Name: series-workflow9t479 Phase: Succeeded StartedAt: 2026-07-24 23:33:09 +0000 UTC FinishedAt: 2026-07-25 01:45:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9t479[0] Phase: Succeeded StartedAt: 2026-07-24 23:33:09 +0000 UTC FinishedAt: 2026-07-25 00:10:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9t479[0].run-triage Phase: Succeeded StartedAt: 2026-07-24 23:33:09 +0000 UTC FinishedAt: 2026-07-25 00:10:43 +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": "e61e6fd4f139f2342a6bc86da602df7456ef87f6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "e61e6fd4f139f2342a6bc86da602df7456ef87f6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "0be33aa3-3dc3-48fc-b5e7-39c18810e642" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_arch_set_irq_inatomic", "kvm_s390_unmap_all_adapters", "kvm_s390_destroy_adapters" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAwOjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3NldF9pcnFfaW5hdG9taWMmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2Rlc3Ryb3lfYWRhcHRlcnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHMzOTAgS1ZNIGludGVycnVwdCBoYW5kbGluZyBsb2dpYyB0byBhbGxvdyBmYWxsYmFjayB0byBzaG9ydC10ZXJtIHBpbm5pbmcgd2hlbiBsb25nLXRlcm0gcGlubmluZyBmYWlscyBmb3IgYWRhcHRlciBpbmRpY2F0b3JzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEtWTSBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGhvdyBpbnRlcnJ1cHRzIGFyZSBpbmplY3RlZCBhbmQgbWFwcGVkLCBhbmQgaXQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMDowOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGMxNjFmYjI0MDNhNjk3YzgwZDRiY2M3MDczOWI3ODAzYWI4MWQyOGJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAyNSAwMDowOTowNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvczM5MF9mbGljLnJzdCBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vZGV2aWNlcy9zMzkwX2ZsaWMucnN0XG5pbmRleCBiNzg0ZjgwMTY3NDgzNi4uZWM5YWFhZTA0ZTIyMGEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvczM5MF9mbGljLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3MzOTBfZmxpYy5yc3RcbkBAIC0xMTIsOSAmIzQzOzExMiwxNiBAQCBHcm91cHM6XG4gICAgICAgbWFzayBvciB1bm1hc2sgdGhlIGFkYXB0ZXIsIGFzIHNwZWNpZmllZCBpbiBtYXNrXG4gXG4gICAgIEtWTV9TMzkwX0lPX0FEQVBURVJfTUFQXG4tICAgICAgVGhpcyBpcyBub3cgYSBuby1vcC4gVGhlIG1hcHBpbmcgaXMgcHVyZWx5IGRvbmUgYnkgdGhlIGlycSByb3V0ZS5cbiYjNDM7ICAgICAgTWFwIGFuIGFkYXB0ZXIgaW5kaWNhdG9yIG9yIHN1bW1hcnkgcGFnZSBmb3IgbG9uZy10ZXJtIHBpbm5pbmcgc28gdGhhdFxuJiM0MzsgICAgICBpbnRlcnJ1cHQgaW5qZWN0aW9uIGNhbiBiZSBwZXJmb3JtZWQgaW4gYXRvbWljIGNvbnRleHQuIElmIGxvbmctdGVybVxuJiM0MzsgICAgICBwaW5uaW5nIGlzIG5vdCBwb3NzaWJsZSAoZS5nLiBmaWxlLWJhY2tlZCBtZW1vcnkpLCB0aGUgcGFnZSBpcyB2ZXJpZmllZFxuJiM0MzsgICAgICB2aWEgYSBzaG9ydC10ZXJtIHBpbiBhbmQgdGhlIGlvY3RsIHJldHVybnMgc3VjY2VzczsgaW50ZXJydXB0IGluamVjdGlvblxuJiM0MzsgICAgICB3aWxsIHVzZSB0aGUgbm9uLWF0b21pYyBpcnFmZCBwYXRoIHdpdGggc2hvcnQtdGVybSBwaW5uaW5nIG9uIGVhY2hcbiYjNDM7ICAgICAgaW50ZXJydXB0LiBJbiBTZWN1cmUgRXhlY3V0aW9uIG1vZGUgdGhpcyBpcyBhIG5vLW9wLlxuICAgICBLVk1fUzM5MF9JT19BREFQVEVSX1VOTUFQXG4tICAgICAgVGhpcyBpcyBub3cgYSBuby1vcC4gVGhlIG1hcHBpbmcgaXMgcHVyZWx5IGRvbmUgYnkgdGhlIGlycSByb3V0ZS5cbiYjNDM7ICAgICAgVW5tYXAgYSBwcmV2aW91c2x5IG1hcHBlZCBhZGFwdGVyIGluZGljYXRvciBvciBzdW1tYXJ5IHBhZ2UgYW5kIHJlbGVhc2VcbiYjNDM7ICAgICAgdGhlIGxvbmctdGVybSBwaW4uIElmIHRoZSBwYWdlIHdhcyBub3QgbG9uZy10ZXJtIHBpbm5lZCAoZS5nLiBmaWxlLWJhY2tlZFxuJiM0MzsgICAgICBtZW1vcnkgb3IgU2VjdXJlIEV4ZWN1dGlvbiBtb2RlKSwgdGhpcyBpcyBhIG5vLW9wIGFuZCByZXR1cm5zIHN1Y2Nlc3MuXG4gXG4gICBLVk1fREVWX0ZMSUNfQUlTTVxuICAgICBtb2RpZnkgdGhlIGFkYXB0ZXItaW50ZXJydXB0aW9uLXN1cHByZXNzaW9uIG1vZGUgZm9yIGEgZ2l2ZW4gaXNjIGlmIHRoZVxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IGVhYTM0YzViZDNjMTEwLi5jMTcyZjliMjEyZDE4ZSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTQ3Niw2ICYjNDM7NDc2LDExIEBAIHN0cnVjdCBzMzkwX21hcF9pbmZvIHtcbiBcdF9fdTY0IGd1ZXN0X2FkZHI7XG4gXHRfX3U2NCBhZGRyO1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUcnVlIGlmIHRoZSBwYWdlIGlzIGxvbmctdGVybSBwaW5uZWQuIEZhbHNlIGlmIGxvbmctdGVybSBwaW5uaW5nXG4mIzQzO1x0ICogZmFpbGVkIGFuZCB0aGlzIGVudHJ5IGV4aXN0cyBvbmx5IHRvIHByZXNlcnZlIE1BUC9VTk1BUCBzeW1tZXRyeS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRib29sIHBpbm5lZDtcbiB9O1xuIFxuIHN0cnVjdCBzMzkwX2lvX2FkYXB0ZXIge1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXG5pbmRleCA5ZTNlNmIwZDcyYWQ2MS4uNzVlYWNkMTU3OGVmYTYgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXG5AQCAtMjUyMCw4ICYjNDM7MjUyMCwyMiBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2FkYXB0ZXJfbWFwKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkLCBfX3U2NCBhZGRyKVxuIFx0bWFwLVx1MDAzZWFkZHIgPSBob3N0X2FkZHI7XG4gXHRtYXAtXHUwMDNlcGFnZSA9IHBpbl9tYXBfcGFnZShrdm0sIGhvc3RfYWRkciwgRk9MTF9MT05HVEVSTSk7XG4gXHRpZiAoIW1hcC1cdTAwM2VwYWdlKSB7XG4tXHRcdHJldCA9IC1FSU5WQUw7XG4tXHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIExvbmctdGVybSBwaW5uaW5nIG1heSBmYWlsIGZvciBtZW1vcnkgdHlwZXMgc3VjaCBhcyBmaWxlLWJhY2tlZFxuJiM0MztcdFx0ICogbWVtb3J5LiBWZXJpZnkgdGhhdCBzaG9ydC10ZXJtIHBpbm5pbmcgc3VjY2VlZHMgc28gdGhhdCB0aGVcbiYjNDM7XHRcdCAqIG5vbi1hdG9taWMgaXJxZmQgcGF0aCBjYW4gaGFuZGxlIGludGVycnVwdCBpbmplY3Rpb24uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdG1hcC1cdTAwM2VwYWdlID0gcGluX21hcF9wYWdlKGt2bSwgaG9zdF9hZGRyLCAwKTtcbiYjNDM7XHRcdGlmICghbWFwLVx1MDAzZXBhZ2UpIHtcbiYjNDM7XHRcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHR1bnBpbl91c2VyX3BhZ2UobWFwLVx1MDAzZXBhZ2UpO1xuJiM0MztcdFx0bWFwLVx1MDAzZXBhZ2UgPSBOVUxMO1xuJiM0MztcdFx0bWFwLVx1MDAzZXBpbm5lZCA9IGZhbHNlO1xuJiM0MztcdFx0LyogQWRkIGFuIGVudHJ5IHRvIHByZXNlcnZlIE1BUC9VTk1BUCBzeW1tZXRyeS4gKi9cbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0bWFwLVx1MDAzZXBpbm5lZCA9IHRydWU7XG4gXHR9XG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZhZGFwdGVyLVx1MDAzZW1hcHNfbG9jaywgZmxhZ3MpO1xuIFx0aWYgKGFkYXB0ZXItXHUwMDNlbnJfbWFwcyBcdTAwM2MgTUFYX1MzOTBfQURBUFRFUl9NQVBTKSB7XG5AQCAtMjUzMiw3ICYjNDM7MjU0Niw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfYWRhcHRlcl9tYXAoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQsIF9fdTY0IGFkZHIpXG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXHR9XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmFkYXB0ZXItXHUwMDNlbWFwc19sb2NrLCBmbGFncyk7XG4tXHRpZiAocmV0KVxuJiM0MztcdGlmIChyZXQgXHUwMDI2XHUwMDI2IG1hcC1cdTAwM2VwYWdlKVxuIFx0XHR1bnBpbl91c2VyX3BhZ2UobWFwLVx1MDAzZXBhZ2UpO1xuIG91dDpcbiBcdGlmIChyZXQpXG5AQCAtMjU0Niw2ICYjNDM7MjU2MCw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfYWRhcHRlcl91bm1hcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZCwgX191NjQgYWRkcilcbiBcdHN0cnVjdCBzMzkwX21hcF9pbmZvICptYXAsICp0bXAsICptYXBfdG9fZnJlZTtcbiBcdHN0cnVjdCBwYWdlICptYXBfcGFnZV90b19wdXQgPSBOVUxMO1xuIFx0dTY0IG1hcF9hZGRyX3RvX21hcmsgPSAwO1xuJiM0MztcdGJvb2wgbWFwX3Bpbm5lZCA9IGZhbHNlO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGludCBmb3VuZCA9IDAsIGlkeDtcbiBcbkBAIC0yNTYwLDYgJiM0MzsyNTc1LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9hZGFwdGVyX3VubWFwKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkLCBfX3U2NCBhZGRyKVxuIFx0XHRcdGxpc3RfZGVsKFx1MDAyNm1hcC1cdTAwM2VsaXN0KTtcbiBcdFx0XHRtYXBfcGFnZV90b19wdXQgPSBtYXAtXHUwMDNlcGFnZTtcbiBcdFx0XHRtYXBfYWRkcl90b19tYXJrID0gbWFwLVx1MDAzZWd1ZXN0X2FkZHI7XG4mIzQzO1x0XHRcdG1hcF9waW5uZWQgPSBtYXAtXHUwMDNlcGlubmVkO1xuIFx0XHRcdG1hcF90b19mcmVlID0gbWFwO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5AQCAtMjU2OCwxMSAmIzQzOzI1ODQsMTggQEAgc3RhdGljIGludCBrdm1fczM5MF9hZGFwdGVyX3VubWFwKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkLCBfX3U2NCBhZGRyKVxuIFxuIFx0aWYgKGZvdW5kKSB7XG4gXHRcdGtmcmVlKG1hcF90b19mcmVlKTtcbi1cdFx0aWR4ID0gc3JjdV9yZWFkX2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNyY3UpO1xuLVx0XHRtYXJrX3BhZ2VfZGlydHkoa3ZtLCBtYXBfYWRkcl90b19tYXJrIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbi1cdFx0c2V0X3BhZ2VfZGlydHlfbG9jayhtYXBfcGFnZV90b19wdXQpO1xuLVx0XHRzcmN1X3JlYWRfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzcmN1LCBpZHgpO1xuLVx0XHR1bnBpbl91c2VyX3BhZ2UobWFwX3BhZ2VfdG9fcHV0KTtcbiYjNDM7XHRcdGlmIChtYXBfcGlubmVkKSB7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIE9ubHkgbG9uZy10ZXJtIHBpbm5lZCBwYWdlcyBuZWVkIHRvIGJlIG1hcmtlZCBkaXJ0eVxuJiM0MztcdFx0XHQgKiBhbmQgcmVsZWFzZWQuIEZhbGxiYWNrIGVudHJpZXMgZXhpc3Qgb25seSBmb3JcbiYjNDM7XHRcdFx0ICogTUFQL1VOTUFQIHN5bW1ldHJ5LlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0aWR4ID0gc3JjdV9yZWFkX2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNyY3UpO1xuJiM0MztcdFx0XHRtYXJrX3BhZ2VfZGlydHkoa3ZtLCBtYXBfYWRkcl90b19tYXJrIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbiYjNDM7XHRcdFx0c2V0X3BhZ2VfZGlydHlfbG9jayhtYXBfcGFnZV90b19wdXQpO1xuJiM0MztcdFx0XHRzcmN1X3JlYWRfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzcmN1LCBpZHgpO1xuJiM0MztcdFx0XHR1bnBpbl91c2VyX3BhZ2UobWFwX3BhZ2VfdG9fcHV0KTtcbiYjNDM7XHRcdH1cbiBcdH1cbiBcbiBcdHJldHVybiBmb3VuZCA/IDAgOiAtRU5PRU5UO1xuQEAgLTI1OTgsMTEgJiM0MzsyNjIxLDEzIEBAIHZvaWQga3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzKHN0cnVjdCBrdm0gKmt2bSlcbiBcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1hcCwgdG1wLCBcdTAwMjZsb2NhbF9saXN0LCBsaXN0KSB7XG4gXHRcdFx0bGlzdF9kZWwoXHUwMDI2bWFwLVx1MDAzZWxpc3QpO1xuLVx0XHRcdGlkeCA9IHNyY3VfcmVhZF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzcmN1KTtcbi1cdFx0XHRtYXJrX3BhZ2VfZGlydHkoa3ZtLCBtYXAtXHUwMDNlZ3Vlc3RfYWRkciBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4tXHRcdFx0c2V0X3BhZ2VfZGlydHlfbG9jayhtYXAtXHUwMDNlcGFnZSk7XG4tXHRcdFx0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc3JjdSwgaWR4KTtcbi1cdFx0XHR1bnBpbl91c2VyX3BhZ2UobWFwLVx1MDAzZXBhZ2UpO1xuJiM0MztcdFx0XHRpZiAobWFwLVx1MDAzZXBpbm5lZCkge1xuJiM0MztcdFx0XHRcdGlkeCA9IHNyY3VfcmVhZF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzcmN1KTtcbiYjNDM7XHRcdFx0XHRtYXJrX3BhZ2VfZGlydHkoa3ZtLCBtYXAtXHUwMDNlZ3Vlc3RfYWRkciBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4mIzQzO1x0XHRcdFx0c2V0X3BhZ2VfZGlydHlfbG9jayhtYXAtXHUwMDNlcGFnZSk7XG4mIzQzO1x0XHRcdFx0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc3JjdSwgaWR4KTtcbiYjNDM7XHRcdFx0XHR1bnBpbl91c2VyX3BhZ2UobWFwLVx1MDAzZXBhZ2UpO1xuJiM0MztcdFx0XHR9XG4gXHRcdFx0a2ZyZWUobWFwKTtcbiBcdFx0fVxuIFx0fVxuQEAgLTI5MjksOCAmIzQzOzI5NTQsMTIgQEAgc3RhdGljIHN0cnVjdCBzMzkwX21hcF9pbmZvICpnZXRfbWFwX2luZm8oc3RydWN0IHMzOTBfaW9fYWRhcHRlciAqYWRhcHRlcixcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hcCwgXHUwMDI2YWRhcHRlci1cdTAwM2VtYXBzLCBsaXN0KSB7XG4tXHRcdGlmIChtYXAtXHUwMDNlYWRkciA9PSBhZGRyKVxuLVx0XHRcdHJldHVybiBtYXA7XG4mIzQzO1x0XHRpZiAobWFwLVx1MDAzZWFkZHIgPT0gYWRkcikge1xuJiM0MztcdFx0XHRpZiAobWFwLVx1MDAzZXBpbm5lZClcbiYjNDM7XHRcdFx0XHRyZXR1cm4gbWFwO1xuJiM0MztcdFx0XHRlbHNlXG4mIzQzO1x0XHRcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDA6MDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3NldF9pcnFfaW5hdG9taWMmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2Rlc3Ryb3lfYWRhcHRlcnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHMzOTAgS1ZNIGludGVycnVwdCBoYW5kbGluZyBsb2dpYyB0byBhbGxvdyBmYWxsYmFjayB0byBzaG9ydC10ZXJtIHBpbm5pbmcgd2hlbiBsb25nLXRlcm0gcGlubmluZyBmYWlscyBmb3IgYWRhcHRlciBpbmRpY2F0b3JzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEtWTSBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGhvdyBpbnRlcnJ1cHRzIGFyZSBpbmplY3RlZCBhbmQgbWFwcGVkLCBhbmQgaXQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGMxNjFmYjI0MDNhNjk3YzgwZDRiY2M3MDczOWI3ODAzYWI4MWQyOGIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1bCAyNSAwMDowOTowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vZGV2aWNlcy9zMzkwX2ZsaWMucnN0IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3MzOTBfZmxpYy5yc3QKaW5kZXggYjc4NGY4MDE2NzQ4MzYuLmVjOWFhYWUwNGUyMjBhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvczM5MF9mbGljLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvczM5MF9mbGljLnJzdApAQCAtMTEyLDkgJiM0MzsxMTIsMTYgQEAgR3JvdXBzOgogICAgICAgbWFzayBvciB1bm1hc2sgdGhlIGFkYXB0ZXIsIGFzIHNwZWNpZmllZCBpbiBtYXNrCiAKICAgICBLVk1fUzM5MF9JT19BREFQVEVSX01BUAotICAgICAgVGhpcyBpcyBub3cgYSBuby1vcC4gVGhlIG1hcHBpbmcgaXMgcHVyZWx5IGRvbmUgYnkgdGhlIGlycSByb3V0ZS4KJiM0MzsgICAgICBNYXAgYW4gYWRhcHRlciBpbmRpY2F0b3Igb3Igc3VtbWFyeSBwYWdlIGZvciBsb25nLXRlcm0gcGlubmluZyBzbyB0aGF0CiYjNDM7ICAgICAgaW50ZXJydXB0IGluamVjdGlvbiBjYW4gYmUgcGVyZm9ybWVkIGluIGF0b21pYyBjb250ZXh0LiBJZiBsb25nLXRlcm0KJiM0MzsgICAgICBwaW5uaW5nIGlzIG5vdCBwb3NzaWJsZSAoZS5nLiBmaWxlLWJhY2tlZCBtZW1vcnkpLCB0aGUgcGFnZSBpcyB2ZXJpZmllZAomIzQzOyAgICAgIHZpYSBhIHNob3J0LXRlcm0gcGluIGFuZCB0aGUgaW9jdGwgcmV0dXJucyBzdWNjZXNzOyBpbnRlcnJ1cHQgaW5qZWN0aW9uCiYjNDM7ICAgICAgd2lsbCB1c2UgdGhlIG5vbi1hdG9taWMgaXJxZmQgcGF0aCB3aXRoIHNob3J0LXRlcm0gcGlubmluZyBvbiBlYWNoCiYjNDM7ICAgICAgaW50ZXJydXB0LiBJbiBTZWN1cmUgRXhlY3V0aW9uIG1vZGUgdGhpcyBpcyBhIG5vLW9wLgogICAgIEtWTV9TMzkwX0lPX0FEQVBURVJfVU5NQVAKLSAgICAgIFRoaXMgaXMgbm93IGEgbm8tb3AuIFRoZSBtYXBwaW5nIGlzIHB1cmVseSBkb25lIGJ5IHRoZSBpcnEgcm91dGUuCiYjNDM7ICAgICAgVW5tYXAgYSBwcmV2aW91c2x5IG1hcHBlZCBhZGFwdGVyIGluZGljYXRvciBvciBzdW1tYXJ5IHBhZ2UgYW5kIHJlbGVhc2UKJiM0MzsgICAgICB0aGUgbG9uZy10ZXJtIHBpbi4gSWYgdGhlIHBhZ2Ugd2FzIG5vdCBsb25nLXRlcm0gcGlubmVkIChlLmcuIGZpbGUtYmFja2VkCiYjNDM7ICAgICAgbWVtb3J5IG9yIFNlY3VyZSBFeGVjdXRpb24gbW9kZSksIHRoaXMgaXMgYSBuby1vcCBhbmQgcmV0dXJucyBzdWNjZXNzLgogCiAgIEtWTV9ERVZfRkxJQ19BSVNNCiAgICAgbW9kaWZ5IHRoZSBhZGFwdGVyLWludGVycnVwdGlvbi1zdXBwcmVzc2lvbiBtb2RlIGZvciBhIGdpdmVuIGlzYyBpZiB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggZWFhMzRjNWJkM2MxMTAuLmMxNzJmOWIyMTJkMThlIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtNDc2LDYgJiM0Mzs0NzYsMTEgQEAgc3RydWN0IHMzOTBfbWFwX2luZm8gewogCV9fdTY0IGd1ZXN0X2FkZHI7CiAJX191NjQgYWRkcjsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKJiM0MzsJLyoKJiM0MzsJICogVHJ1ZSBpZiB0aGUgcGFnZSBpcyBsb25nLXRlcm0gcGlubmVkLiBGYWxzZSBpZiBsb25nLXRlcm0gcGlubmluZwomIzQzOwkgKiBmYWlsZWQgYW5kIHRoaXMgZW50cnkgZXhpc3RzIG9ubHkgdG8gcHJlc2VydmUgTUFQL1VOTUFQIHN5bW1ldHJ5LgomIzQzOwkgKi8KJiM0MzsJYm9vbCBwaW5uZWQ7CiB9OwogCiBzdHJ1Y3QgczM5MF9pb19hZGFwdGVyIHsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jCmluZGV4IDllM2U2YjBkNzJhZDYxLi43NWVhY2QxNTc4ZWZhNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jCkBAIC0yNTIwLDggJiM0MzsyNTIwLDIyIEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfYWRhcHRlcl9tYXAoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQsIF9fdTY0IGFkZHIpCiAJbWFwLSZndDthZGRyID0gaG9zdF9hZGRyOwogCW1hcC0mZ3Q7cGFnZSA9IHBpbl9tYXBfcGFnZShrdm0sIGhvc3RfYWRkciwgRk9MTF9MT05HVEVSTSk7CiAJaWYgKCFtYXAtJmd0O3BhZ2UpIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7CiYjNDM7CQkvKgomIzQzOwkJICogTG9uZy10ZXJtIHBpbm5pbmcgbWF5IGZhaWwgZm9yIG1lbW9yeSB0eXBlcyBzdWNoIGFzIGZpbGUtYmFja2VkCiYjNDM7CQkgKiBtZW1vcnkuIFZlcmlmeSB0aGF0IHNob3J0LXRlcm0gcGlubmluZyBzdWNjZWVkcyBzbyB0aGF0IHRoZQomIzQzOwkJICogbm9uLWF0b21pYyBpcnFmZCBwYXRoIGNhbiBoYW5kbGUgaW50ZXJydXB0IGluamVjdGlvbi4KJiM0MzsJCSAqLwomIzQzOwkJbWFwLSZndDtwYWdlID0gcGluX21hcF9wYWdlKGt2bSwgaG9zdF9hZGRyLCAwKTsKJiM0MzsJCWlmICghbWFwLSZndDtwYWdlKSB7CiYjNDM7CQkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsJCXVucGluX3VzZXJfcGFnZShtYXAtJmd0O3BhZ2UpOwomIzQzOwkJbWFwLSZndDtwYWdlID0gTlVMTDsKJiM0MzsJCW1hcC0mZ3Q7cGlubmVkID0gZmFsc2U7CiYjNDM7CQkvKiBBZGQgYW4gZW50cnkgdG8gcHJlc2VydmUgTUFQL1VOTUFQIHN5bW1ldHJ5LiAqLwomIzQzOwl9IGVsc2UgewomIzQzOwkJbWFwLSZndDtwaW5uZWQgPSB0cnVlOwogCX0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2FkYXB0ZXItJmd0O21hcHNfbG9jaywgZmxhZ3MpOwogCWlmIChhZGFwdGVyLSZndDtucl9tYXBzICZsdDsgTUFYX1MzOTBfQURBUFRFUl9NQVBTKSB7CkBAIC0yNTMyLDcgJiM0MzsyNTQ2LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9hZGFwdGVyX21hcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZCwgX191NjQgYWRkcikKIAkJcmV0ID0gLUVJTlZBTDsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2FkYXB0ZXItJmd0O21hcHNfbG9jaywgZmxhZ3MpOwotCWlmIChyZXQpCiYjNDM7CWlmIChyZXQgJmFtcDsmYW1wOyBtYXAtJmd0O3BhZ2UpCiAJCXVucGluX3VzZXJfcGFnZShtYXAtJmd0O3BhZ2UpOwogb3V0OgogCWlmIChyZXQpCkBAIC0yNTQ2LDYgJiM0MzsyNTYwLDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9hZGFwdGVyX3VubWFwKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkLCBfX3U2NCBhZGRyKQogCXN0cnVjdCBzMzkwX21hcF9pbmZvICptYXAsICp0bXAsICptYXBfdG9fZnJlZTsKIAlzdHJ1Y3QgcGFnZSAqbWFwX3BhZ2VfdG9fcHV0ID0gTlVMTDsKIAl1NjQgbWFwX2FkZHJfdG9fbWFyayA9IDA7CiYjNDM7CWJvb2wgbWFwX3Bpbm5lZCA9IGZhbHNlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGZvdW5kID0gMCwgaWR4OwogCkBAIC0yNTYwLDYgJiM0MzsyNTc1LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9hZGFwdGVyX3VubWFwKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkLCBfX3U2NCBhZGRyKQogCQkJbGlzdF9kZWwoJmFtcDttYXAtJmd0O2xpc3QpOwogCQkJbWFwX3BhZ2VfdG9fcHV0ID0gbWFwLSZndDtwYWdlOwogCQkJbWFwX2FkZHJfdG9fbWFyayA9IG1hcC0mZ3Q7Z3Vlc3RfYWRkcjsKJiM0MzsJCQltYXBfcGlubmVkID0gbWFwLSZndDtwaW5uZWQ7CiAJCQltYXBfdG9fZnJlZSA9IG1hcDsKIAkJCWJyZWFrOwogCQl9CkBAIC0yNTY4LDExICYjNDM7MjU4NCwxOCBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2FkYXB0ZXJfdW5tYXAoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQsIF9fdTY0IGFkZHIpCiAKIAlpZiAoZm91bmQpIHsKIAkJa2ZyZWUobWFwX3RvX2ZyZWUpOwotCQlpZHggPSBzcmN1X3JlYWRfbG9jaygmYW1wO2t2bS0mZ3Q7c3JjdSk7Ci0JCW1hcmtfcGFnZV9kaXJ0eShrdm0sIG1hcF9hZGRyX3RvX21hcmsgJmd0OyZndDsgUEFHRV9TSElGVCk7Ci0JCXNldF9wYWdlX2RpcnR5X2xvY2sobWFwX3BhZ2VfdG9fcHV0KTsKLQkJc3JjdV9yZWFkX3VubG9jaygmYW1wO2t2bS0mZ3Q7c3JjdSwgaWR4KTsKLQkJdW5waW5fdXNlcl9wYWdlKG1hcF9wYWdlX3RvX3B1dCk7CiYjNDM7CQlpZiAobWFwX3Bpbm5lZCkgewomIzQzOwkJCS8qCiYjNDM7CQkJICogT25seSBsb25nLXRlcm0gcGlubmVkIHBhZ2VzIG5lZWQgdG8gYmUgbWFya2VkIGRpcnR5CiYjNDM7CQkJICogYW5kIHJlbGVhc2VkLiBGYWxsYmFjayBlbnRyaWVzIGV4aXN0IG9ubHkgZm9yCiYjNDM7CQkJICogTUFQL1VOTUFQIHN5bW1ldHJ5LgomIzQzOwkJCSAqLwomIzQzOwkJCWlkeCA9IHNyY3VfcmVhZF9sb2NrKCZhbXA7a3ZtLSZndDtzcmN1KTsKJiM0MzsJCQltYXJrX3BhZ2VfZGlydHkoa3ZtLCBtYXBfYWRkcl90b19tYXJrICZndDsmZ3Q7IFBBR0VfU0hJRlQpOwomIzQzOwkJCXNldF9wYWdlX2RpcnR5X2xvY2sobWFwX3BhZ2VfdG9fcHV0KTsKJiM0MzsJCQlzcmN1X3JlYWRfdW5sb2NrKCZhbXA7a3ZtLSZndDtzcmN1LCBpZHgpOwomIzQzOwkJCXVucGluX3VzZXJfcGFnZShtYXBfcGFnZV90b19wdXQpOwomIzQzOwkJfQogCX0KIAogCXJldHVybiBmb3VuZCA/IDAgOiAtRU5PRU5UOwpAQCAtMjU5OCwxMSAmIzQzOzI2MjEsMTMgQEAgdm9pZCBrdm1fczM5MF91bm1hcF9hbGxfYWRhcHRlcnMoc3RydWN0IGt2bSAqa3ZtKQogCiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtYXAsIHRtcCwgJmFtcDtsb2NhbF9saXN0LCBsaXN0KSB7CiAJCQlsaXN0X2RlbCgmYW1wO21hcC0mZ3Q7bGlzdCk7Ci0JCQlpZHggPSBzcmN1X3JlYWRfbG9jaygmYW1wO2t2bS0mZ3Q7c3JjdSk7Ci0JCQltYXJrX3BhZ2VfZGlydHkoa3ZtLCBtYXAtJmd0O2d1ZXN0X2FkZHIgJmd0OyZndDsgUEFHRV9TSElGVCk7Ci0JCQlzZXRfcGFnZV9kaXJ0eV9sb2NrKG1hcC0mZ3Q7cGFnZSk7Ci0JCQlzcmN1X3JlYWRfdW5sb2NrKCZhbXA7a3ZtLSZndDtzcmN1LCBpZHgpOwotCQkJdW5waW5fdXNlcl9wYWdlKG1hcC0mZ3Q7cGFnZSk7CiYjNDM7CQkJaWYgKG1hcC0mZ3Q7cGlubmVkKSB7CiYjNDM7CQkJCWlkeCA9IHNyY3VfcmVhZF9sb2NrKCZhbXA7a3ZtLSZndDtzcmN1KTsKJiM0MzsJCQkJbWFya19wYWdlX2RpcnR5KGt2bSwgbWFwLSZndDtndWVzdF9hZGRyICZndDsmZ3Q7IFBBR0VfU0hJRlQpOwomIzQzOwkJCQlzZXRfcGFnZV9kaXJ0eV9sb2NrKG1hcC0mZ3Q7cGFnZSk7CiYjNDM7CQkJCXNyY3VfcmVhZF91bmxvY2soJmFtcDtrdm0tJmd0O3NyY3UsIGlkeCk7CiYjNDM7CQkJCXVucGluX3VzZXJfcGFnZShtYXAtJmd0O3BhZ2UpOwomIzQzOwkJCX0KIAkJCWtmcmVlKG1hcCk7CiAJCX0KIAl9CkBAIC0yOTI5LDggJiM0MzsyOTU0LDEyIEBAIHN0YXRpYyBzdHJ1Y3QgczM5MF9tYXBfaW5mbyAqZ2V0X21hcF9pbmZvKHN0cnVjdCBzMzkwX2lvX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCXJldHVybiBOVUxMOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShtYXAsICZhbXA7YWRhcHRlci0mZ3Q7bWFwcywgbGlzdCkgewotCQlpZiAobWFwLSZndDthZGRyID09IGFkZHIpCi0JCQlyZXR1cm4gbWFwOwomIzQzOwkJaWYgKG1hcC0mZ3Q7YWRkciA9PSBhZGRyKSB7CiYjNDM7CQkJaWYgKG1hcC0mZ3Q7cGlubmVkKQomIzQzOwkJCQlyZXR1cm4gbWFwOwomIzQzOwkJCWVsc2UKJiM0MzsJCQkJcmV0dXJuIE5VTEw7CiYjNDM7CQl9CiAJfQogCXJldHVybiBOVUxMOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTA2CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRGVjaXNpb24gZm9yIHRoZSBzMzkwIEtWTSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoICpkb2VzKiBpbnRyb2R1Y2UgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwsIGFuZCB0aGVyZWZvcmUsIGNvdWxkIHBvdGVudGlhbGx5IGJlbmVmaXQgZnJvbSBmdXp6aW5nLiBTcGVjaWZpY2FsbHksIGl0IHRvdWNoZXMgYGFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNgIGFuZCBgYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhgLCB3aGljaCBhcmUga2V5IGFyZWFzIGZvciBLVk0gb24gczM5MC4gSXQmIzM5O3MgbW9kaWZ5aW5nIHRoZSBwaW5uaW5nIGJlaGF2aW9yIG9mIGBrdm1fczM5MF9hZGFwdGVyX21hcGAgYW5kIGBrdm1fczM5MF9hZGFwdGVyX3VubWFwYC4gRXNzZW50aWFsbHksIGl0JiMzOTtzIGFkZGluZyBhIGZhbGxiYWNrIG1lY2hhbmlzbSBmb3Igd2hlbiBsb25nLXRlcm0gcGlubmluZyBmYWlscywgd2hpY2ggaXMgcmVsZXZhbnQgaW4gc2NlbmFyaW9zIGxpa2UgZmlsZS1iYWNrZWQgbWVtb3J5LiBJdCBub3cgdHJpZXMgc2hvcnQgdGVybSBwaW5uaW5nLCBhbmQgdGhlbiB1bnBpbnMgaXQuIFRoaXMgaXMgYSBiZWhhdmlvcmFsIGNoYW5nZSBkZXNpZ25lZCB0byBtYWtlIHRoZSBgS1ZNX1MzOTBfSU9fQURBUFRFUl9NQVBgIGlvY3RsIG1vcmUgcm9idXN0LCBhbmQgaXMgYSBjbGVhciBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbi4KClRoZSBjcml0aWNhbCBxdWVzdGlvbiBub3csIGdpdmVuIHRoZSBzcGVjaWZpYyBjcml0ZXJpYSBJIGhhdmUgdG8gYWRoZXJlIHRvLCBpcyB3aGV0aGVyIHRoaXMgaXMgZnV6emFibGUuIFRoZSBydWxlcyBzcGVjaWZ5IHRoYXQgaWYgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBpdCYjMzk7cyBub3Qgd29ydGggZnV6emluZy4gSG93ZXZlciwgczM5MHggS1ZNICppcyogcmVhY2hhYmxlIOKAkyB3ZSBjYW4gZnV6eiBpdCB1c2luZyBTeXprYWxsZXIuIEV4Y2VsbGVudCwgU3l6a2FsbGVyIGFscmVhZHkgc3VwcG9ydHMgczM5MHgsIHdoaWNoIGlzIGEgYmlnIHRpY2suIFdlIGtub3cgdGhhdCB0aGUgY29kZSBwYXRoIGlzIGFjY2Vzc2libGUuCgpDaGVja2luZyB0aGUgY29uZmlnLCBpdCYjMzk7cyBlbmFibGVkOiBgS1ZNYCBpcyBjb25maWd1cmVkLCBhbmQgdGhlIGFyY2hpdGVjdHVyZSBpcyBgczM5MGAuIFNvIGZyb20gdGhlIGluaXRpYWwgYXNzZXNzbWVudCwgdGhlIHBhdGNoIGlzIGxpa2VseSB3b3J0aCBmdXp6aW5nLgoKTXkgZm9jdXMgc3ltYm9scyBhcmU6IGBrdm1fczM5MF9hZGFwdGVyX21hcGAsIGBrdm1fczM5MF9hZGFwdGVyX3VubWFwYCwgYGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVyc2AsIGFuZCBgZ2V0X21hcF9pbmZvYC4gVGhlIGZpcnN0IHR3byBhcmUgc3RhdGljLCBzbyBJIG5lZWQgdG8gdHJhY2UgdGhlaXIgY2FsbCBzaXRlcyB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGFyZSB0cmlnZ2VyZWQgYW5kIHRodXMgaG93IHRvIGNyYWZ0IGlucHV0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fczM5MF9hZGFwdGVyX21hcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yNDc2PXN0YXRpYyBzdHJ1Y3QgcGFnZSAqcGluX21hcF9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgdTY0IHVhZGRyLFxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjQ5NC1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjQ5NTpzdGF0aWMgaW50IGt2bV9zMzkwX2FkYXB0ZXJfbWFwKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkLCBfX3U2NCBhZGRyKVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNDk2LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTI2NDg9c3RhdGljIGludCBtb2RpZnlfaW9fYWRhcHRlcihzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LFxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjY3Ni1cdFx0XHRkZXYtXHUwMDNla3ZtLVx1MDAzZXN0YXQuaW9fMzkwX2FkYXB0ZXJfbWFwJiM0MzsmIzQzOztcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjY3NzpcdFx0XHRyZXQgPSBrdm1fczM5MF9hZGFwdGVyX21hcChkZXYtXHUwMDNla3ZtLCByZXEuaWQsIHJlcS5hZGRyKTtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjY3OC1cdFx0fSBlbHNlIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDA1CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgdGhlIEkvTyBBZGFwdGVyIE1hcHBpbmcgRmxvdyoqCgpBbHJpZ2h0LCBzbyBgbW9kaWZ5X2lvX2FkYXB0ZXJgIGlzIHRoZSBlbnRyeSBwb2ludCwgYW5kIHRoYXQgc2VlbXMgdG8gdHJpZ2dlciBga3ZtX3MzOTBfYWRhcHRlcl9tYXBgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgY29tcGxldGUgSS9PIGFkYXB0ZXIgbGlmZWN5Y2xlLCBhbmQgbm93IEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvdW50ZXJwYXJ0OiBIb3cgZG9lcyB0aGUgc3lzdGVtIHVubWFwIHRoZSBhZGFwdGVyPyBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgd2hhdCBoYXBwZW5zIHdpdGggYm90aCBtYXBwaW5nIGFuZCB1bm1hcHBpbmcuIFNvLCBJIG5lZWQgdG8gY2hlY2sgYm90aCBgbW9kaWZ5X2lvX2FkYXB0ZXJgIGFuZCBga3ZtX3MzOTBfYWRhcHRlcl91bm1hcGAgdG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gdGhpcyBmbG93LCBwYXJ0aWN1bGFybHkgaG93IHJlc291cmNlcyBhcmUgYWNxdWlyZWQgYW5kIHJlbGVhc2VkLiBJJiMzOTttIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgcmVzb3VyY2UgbGVha3MuIExldCYjMzk7cyBzZWUgaG93IHRoZXkgaW50ZXJhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3MzOTBfYWRhcHRlcl91bm1hcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yNDk1PXN0YXRpYyBpbnQga3ZtX3MzOTBfYWRhcHRlcl9tYXAoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQsIF9fdTY0IGFkZHIpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNTU2LVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyNTU3OnN0YXRpYyBpbnQga3ZtX3MzOTBfYWRhcHRlcl91bm1hcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZCwgX191NjQgYWRkcilcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjU1OC17XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yNjQ4PXN0YXRpYyBpbnQgbW9kaWZ5X2lvX2FkYXB0ZXIoc3RydWN0IGt2bV9kZXZpY2UgKmRldixcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI2NzktXHRcdFx0ZGV2LVx1MDAzZWt2bS1cdTAwM2VzdGF0LmlvXzM5MF9hZGFwdGVyX3VubWFwJiM0MzsmIzQzOztcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjY4MDpcdFx0XHRyZXQgPSBrdm1fczM5MF9hZGFwdGVyX3VubWFwKGRldi1cdTAwM2Vrdm0sIHJlcS5pZCwgcmVxLmFkZHIpO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNjgxLVx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk4MgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBtb2RpZnlfaW9fYWRhcHRlcmAgQ2FsbGVycyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBgbW9kaWZ5X2lvX2FkYXB0ZXJgIGZ1bmN0aW9uLiBUbyB0cnVseSBncmFzcCBpdHMgaW1wbGljYXRpb25zIGFuZCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLCBJIG5lZWQgdG8ga25vdyAqd2hlcmUqIGl0JiMzOTtzIGJlaW5nIGludm9rZWQuIFRoZSBmdW5jdGlvbiYjMzk7cyBpbnRlcm5hbCBsb2dpYyBpcywgb2YgY291cnNlLCBpbXBvcnRhbnQsIGJ1dCBpdHMgY29udGV4dCBpcyBldmVyeXRoaW5nLiBXaGF0JiMzOTtzIHRoZSBjb250cm9sIGZsb3c/IFdoYXQgb3RoZXIgY29tcG9uZW50cyBhcmUgYWZmZWN0ZWQgYXQgdGhlIGNhbGwgc2l0ZXM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyBJIHNob3VsZCBpbW1lZGlhdGVseSBjb25zaWRlciwgZ2l2ZW4gdGhlIG5hdHVyZSBvZiBJL08gYWRhcHRlciBtb2RpZmljYXRpb25zPyBUaGlzIHJlcXVpcmVzIGEgY2xlYXIgY2FsbCBncmFwaCBhbmFseXNpcy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGlkZW50aWZ5aW5nIGV2ZXJ5IGluc3RhbmNlIG9mIHRoYXQgZnVuY3Rpb24gY2FsbC4gSSBuZWVkIHRoZSByYXcgZGF0YSwgbm8gYWJzdHJhY3QgbW9kZWxzIG9yIHRoZW9yaWVzLiBJIG5lZWQgdG8gc2VlIHRoZSBkaXJlY3QgY29kZSBwYXRocy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2RpZnlfaW9fYWRhcHRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yNjM2PXZvaWQga3ZtX3MzOTBfZGVzdHJveV9hZGFwdGVycyhzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNjQ3LVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyNjQ4OnN0YXRpYyBpbnQgbW9kaWZ5X2lvX2FkYXB0ZXIoc3RydWN0IGt2bV9kZXZpY2UgKmRldixcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjY0OS1cdFx0XHQgICAgIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yODM0PXN0YXRpYyBpbnQgZmxpY19zZXRfYXR0cihzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjg2OC1cdGNhc2UgS1ZNX0RFVl9GTElDX0FEQVBURVJfTU9ESUZZOlxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyODY5Olx0XHRyID0gbW9kaWZ5X2lvX2FkYXB0ZXIoZGV2LCBhdHRyKTtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjg3MC1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ5NwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgZnVuY3Rpb246CgoqKkFuYWx5emluZyB0aGUgRW50cnkgUG9pbnQ6IGBmbGljX3NldF9hdHRyYCoqCgpPa2F5LCBzbyBgZmxpY19zZXRfYXR0cmAgaXMgdGhlIHN0YXJ0aW5nIHBvaW50LiBUaGF04oCZcyB3aGVyZSBldmVyeXRoaW5nIGJlZ2lucy4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBJcyB0aGlzIHRoaW5nIHN0YXRpYz8gVW5kZXJzdGFuZGluZyBpdHMgc2NvcGUgaXMgY3J1Y2lhbCByaWdodCBvZmYgdGhlIGJhdC4gS25vd2luZyBpZiBpdCYjMzk7cyBzdGF0aWMgd2lsbCBpbW1lZGlhdGVseSB0ZWxsIG1lIHNvbWV0aGluZyBhYm91dCBpdHMgdmlzaWJpbGl0eSBhbmQgdGhlIG92ZXJhbGwgZGVzaWduIG9mIHRoZSBtb2R1bGUgb3IgbGlicmFyeSBJJiMzOTttIHdvcmtpbmcgd2l0aC4gVGhpcyBjb250ZXh0IGlzIGltcG9ydGFudCBiZWNhdXNlIGlmIGl0JiMzOTtzIHN0YXRpYywgaXQgbGltaXRzIGl0cyBhY2Nlc3MgYW5kIHVzYWdlLCB0aGVyZWJ5LCBhZmZlY3RpbmcgaG93IHRoZSBmdW5jdGlvbiBpcyBpbnRlcmFjdGVkIHdpdGgsIGFuZCB0aGUgd2F5cyB0aGF0IGl0IGNhbiBpbnRlcmFjdCB3aXRoIG90aGVyIG1vZHVsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZsaWNfc2V0X2F0dHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MjgxND1zdGF0aWMgaW50IGZsaWNfYWlzX21vZGVfc2V0X2FsbChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yODMzLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyODM0OnN0YXRpYyBpbnQgZmxpY19zZXRfYXR0cihzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yODM1LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTI5Mjc9c3RydWN0IGt2bV9kZXZpY2Vfb3BzIGt2bV9mbGljX29wcyA9IHtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI5MjktXHQuZ2V0X2F0dHIgPSBmbGljX2dldF9hdHRyLFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyOTMwOlx0LnNldF9hdHRyID0gZmxpY19zZXRfYXR0cixcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjkzMS1cdC5oYXNfYXR0ciA9IGZsaWNfaGFzX2F0dHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAwOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5OTMKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipDb25zaWRlcmluZyBTdGF0aWMgRnVuY3Rpb25zIFdpdGhpbiBPcGVyYXRpb24gU3RydWN0dXJlcyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGZsaWNfc2V0X2F0dHJgIGFuZCBub3RpY2luZyBpdCYjMzk7cyBkZWNsYXJlZCBgc3RhdGljYC4gVGhhdCYjMzk7cyBhIGxpdHRsZSBpbnRlcmVzdGluZywgYmVjYXVzZSBpdCBsaXZlcyB3aXRoaW4gdGhlIGBrdm1fZmxpY19vcHNgIHN0cnVjdHVyZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2VsbCwgdGhhdCYjMzk7cyBub3QgbmVjZXNzYXJpbHkgdW51c3VhbCwgYnV0IEkgc2hvdWxkIHBhdXNlIGFuZCBjb25zaWRlciB3aHkuJiMzNDsgSXMgdGhpcyBpbnRlbmRlZCB0byBiZSBhIHByaXZhdGUgaW1wbGVtZW50YXRpb24gZGV0YWlsLCBvciBpcyB0aGlzIGRlc2lnbiBjb25zdHJhaW5pbmcgaW4gYW55IHdheT8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0aGlzIGFmZmVjdHMgdGhlIHBvdGVudGlhbCBmb3IgZnV0dXJlIGV4dGVuc2lvbiBvciB1c2Ugb3V0c2lkZSB0aGUgaW1tZWRpYXRlIGNvbnRleHQuCgpUaGVuIG15IG1pbmQgc2hpZnRzIHRvIGBrdm1fczM5MF91bm1hcF9hbGxfYWRhcHRlcnNgLiBUaGlzIG9uZSAqaXNuJiMzOTt0KiBgc3RhdGljYC4gU28sIG5vdyBJIG5lZWQgdG8gcmVjb25jaWxlIHRoZXNlIHR3by4gV2h5IHRoZSBkaWZmZXJlbmNlPyBXaGF0IHdhcyB0aGUgZGVzaWduIHJhdGlvbmFsZSBmb3IgdGhlIGNob2ljZXMgaGVyZT8gQXJlIHRoZXkgcmVsYXRlZCBjb25jZXB0dWFsbHk/IElzIG9uZSAqbWVhbnQqIHRvIGJlIHB1YmxpYyB3aGVyZWFzIHRoZSBvdGhlciBpcyBkZWxpYmVyYXRlbHkgaGlkZGVuPyBBcmUgdGhlcmUgYW55IHBlcmZvcm1hbmNlIG9yIG1lbW9yeSBpbXBsaWNhdGlvbnMgYXJpc2luZyBmcm9tIHRoZXNlIGRlY2xhcmF0aW9ucz8gVGhlIGltcGxpY2F0aW9ucyBvZiBzdGF0aWMgdnMuIG5vbi1zdGF0aWMgaXMgc3VidGxlLCBidXQgaW1wb3J0YW50LiBJIHNob3VsZCBpbnZlc3RpZ2F0ZSBib3RoIGRlY2xhcmF0aW9ucyB0byB1bmRlcnN0YW5kIHRoZSBkZXNpZ24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVycyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MjU1Nz1zdGF0aWMgaW50IGt2bV9zMzkwX2FkYXB0ZXJfdW5tYXAoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQsIF9fdTY0IGFkZHIpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNjAzLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyNjA0OnZvaWQga3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzKHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjYwNS17XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yNjM2PXZvaWQga3ZtX3MzOTBfZGVzdHJveV9hZGFwdGVycyhzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNjM5LVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyNjQwOlx0a3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzKGt2bSk7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI2NDEtXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTI1Nzk9c3RhdGljIGludCBrdm1fczM5MF9oYW5kbGVfcHYoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3B2X2NtZCAqY21kKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yNTk0LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjI1OTU6XHRcdGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVycyhrdm0pO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTI1OTYtXHRcdG1tYXBfd3JpdGVfbG9jayhrdm0tXHUwMDNlbW0pO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaD01NjM9dm9pZCBrdm1fczM5MF9naWJfZGVzdHJveSh2b2lkKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaDo1NjQ6dm9pZCBrdm1fczM5MF91bm1hcF9hbGxfYWRhcHRlcnMoc3RydWN0IGt2bSAqa3ZtKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaC01NjUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAwOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4OTkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqQW5hbHl6aW5nIEtWTS9zMzkwIEFkYXB0ZXIgVW5tYXBwaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgYWRhcHRlcnMgYXJlIHVubWFwcGVkIHdpdGhpbiB0aGUgS1ZNL3MzOTAgY29udGV4dC4gSXQgc2VlbXMgYGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVyc2AgZ2V0cyB0cmlnZ2VyZWQgaW4gdHdvIHNwZWNpZmljIHBsYWNlczogYGt2bV9zMzkwX2Rlc3Ryb3lfYWRhcHRlcnNgIGFuZCBga3ZtX3MzOTBfaGFuZGxlX3B2YC4gUmlnaHQgb2ZmIHRoZSBiYXQsIGBrdm1fczM5MF9oYW5kbGVfcHZgIHNlZW1zIGxpa2UgYSBwcmV0dHkgaW1wb3J0YW50IHN5bWJvbCB0byBrZXkgaW4gb24g4oCTIGl0JiMzOTtzIGxpa2VseSBhIGNlbnRyYWwgcG9pbnQgb2YgaW50ZXJhY3Rpb24uIE5vdywgdGhlIHVubWFwcGluZyBpdHNlbGYgaXMgdGhlIGdvYWwsIHNvIEkgc2hvdWxkIHNlZSBob3cgdGhpcyBpcyBkb25lLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgbW9yZSwgc28gbGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgZ2V0X21hcF9pbmZvYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2V0X21hcF9pbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTI5MzY9c3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2luZF9iaXQoX191NjQgYWRkciwgdW5zaWduZWQgbG9uZyBiaXRfbnIsIGJvb2wgc3dhcClcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI5NDctXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI5NDg6c3RhdGljIHN0cnVjdCBzMzkwX21hcF9pbmZvICpnZXRfbWFwX2luZm8oc3RydWN0IHMzOTBfaW9fYWRhcHRlciAqYWRhcHRlcixcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjk0OS1cdFx0XHRcdFx0ICB1NjQgYWRkcilcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTI5Njc9c3RhdGljIGludCBhZGFwdGVyX2luZGljYXRvcnNfc2V0KHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI5ODAtXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZhZGFwdGVyLVx1MDAzZW1hcHNfbG9jaywgZmxhZ3MpO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyOTgxOlx0aW5kX2luZm8gPSBnZXRfbWFwX2luZm8oYWRhcHRlciwgYWRhcHRlcl9pbnQtXHUwMDNlaW5kX2FkZHIpO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yOTgyLVx0aWYgKCFpbmRfaW5mbykge1xuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzAwMy1cdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmFkYXB0ZXItXHUwMDNlbWFwc19sb2NrLCBmbGFncyk7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjMwMDQ6XHRzdW1tYXJ5X2luZm8gPSBnZXRfbWFwX2luZm8oYWRhcHRlciwgYWRhcHRlcl9pbnQtXHUwMDNlc3VtbWFyeV9hZGRyKTtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzAwNS1cdGlmICghc3VtbWFyeV9pbmZvKSB7XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0zMDMwPXN0YXRpYyBpbnQgYWRhcHRlcl9pbmRpY2F0b3JzX3NldF9mYXN0KHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTMwNDAtXHRzcGluX2xvY2soXHUwMDI2YWRhcHRlci1cdTAwM2VtYXBzX2xvY2spO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozMDQxOlx0aW5kX2luZm8gPSBnZXRfbWFwX2luZm8oYWRhcHRlciwgYWRhcHRlcl9pbnQtXHUwMDNlaW5kX2FkZHIpO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMDQyLVx0aWYgKCFpbmRfaW5mbykge1xuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzA0OS1cdFx0c2V0X2JpdChiaXQsIG1hcCk7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjMwNTA6XHRzdW1tYXJ5X2luZm8gPSBnZXRfbWFwX2luZm8oYWRhcHRlciwgYWRhcHRlcl9pbnQtXHUwMDNlc3VtbWFyeV9hZGRyKTtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzA1MS1cdGlmICghc3VtbWFyeV9pbmZvKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAwOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NTEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBTdGF0aWMgSW5kaWNhdG9yIFNldHMqKgoKQWxyaWdodCwgc28gYGFkYXB0ZXJfaW5kaWNhdG9yc19zZXRgIGFuZCBgYWRhcHRlcl9pbmRpY2F0b3JzX3NldF9mYXN0YCBhcmUgZGVjbGFyZWQgYXMgc3RhdGljLiBIbW0sIHRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZyBmb3IgbWUuIFN0YXRpYyB2YXJpYWJsZXMgbWVhbiB0aGV5IGhhdmUgZmlsZSBzY29wZSwgYW5kIHVzdWFsbHkgcmVwcmVzZW50IHNvbWUga2luZCBvZiBzaGFyZWQgc3RhdGUgb3IgbG9va3VwIHRhYmxlIHdpdGhpbiB0aGUgY29tcGlsZWQgbW9kdWxlLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGFyZSBiZWluZyB1c2VkLiBXaGVyZSBhcmUgdGhlc2UgdGhpbmdzICphY3R1YWxseSogY2FsbGVkPyBJIG5lZWQgdG8gdHJhY2UgdGhvc2UgY2FsbHMgdG8gdW5kZXJzdGFuZCB0aGVpciBmdW5jdGlvbiBhbmQgd2hhdCBjb250ZXh0IHRoZXkgYXJlIHVzZWQgd2l0aGluLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGNvZGUgYW5kIGZpbmQgYWxsIHRoZSByZWZlcmVuY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZGFwdGVyX2luZGljYXRvcnNfc2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTI5NDg9c3RhdGljIHN0cnVjdCBzMzkwX21hcF9pbmZvICpnZXRfbWFwX2luZm8oc3RydWN0IHMzOTBfaW9fYWRhcHRlciAqYWRhcHRlcixcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI5NjYtXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI5Njc6c3RhdGljIGludCBhZGFwdGVyX2luZGljYXRvcnNfc2V0KHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjk2OC1cdFx0XHRcdCAgc3RydWN0IHMzOTBfaW9fYWRhcHRlciAqYWRhcHRlcixcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTMwMjktXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjMwMzA6c3RhdGljIGludCBhZGFwdGVyX2luZGljYXRvcnNfc2V0X2Zhc3Qoc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMDMxLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBzMzkwX2lvX2FkYXB0ZXIgKmFkYXB0ZXIsXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0zMDczPXN0YXRpYyBpbnQgc2V0X2FkYXB0ZXJfaW50KHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLFxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzA4Ny1cdFx0cmV0dXJuIC0xO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozMDg4Olx0cmV0ID0gYWRhcHRlcl9pbmRpY2F0b3JzX3NldChrdm0sIGFkYXB0ZXIsIFx1MDAyNmUtXHUwMDNlYWRhcHRlcik7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTMwODktXHRpZiAoKHJldCBcdTAwM2UgMCkgXHUwMDI2XHUwMDI2ICFhZGFwdGVyLVx1MDAzZW1hc2tlZCkge1xuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9Mzc0Mz1pbnQga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYyhzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM3NjktXHRzZXRiaXQgPSAxO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozNzcwOlx0cmV0ID0gYWRhcHRlcl9pbmRpY2F0b3JzX3NldF9mYXN0KGt2bSwgYWRhcHRlciwgXHUwMDI2ZS1cdTAwM2VhZGFwdGVyLCBzZXRiaXQpO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNzcxLVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM3ODAtXHRcdHNldGJpdCA9IDA7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjM3ODE6XHRcdGFkYXB0ZXJfaW5kaWNhdG9yc19zZXRfZmFzdChrdm0sIGFkYXB0ZXIsIFx1MDAyNmUtXHUwMDNlYWRhcHRlciwgc2V0Yml0KTtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzc4Mi1cdFx0cmV0dXJuIC1FV09VTERCTE9DSztcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM3OTAtXHRcdFx0c2V0Yml0ID0gMDtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6Mzc5MTpcdFx0XHRhZGFwdGVyX2luZGljYXRvcnNfc2V0X2Zhc3Qoa3ZtLCBhZGFwdGVyLCBcdTAwMjZlLVx1MDAzZWFkYXB0ZXIsIHNldGJpdCk7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM3OTItXHRcdFx0a2ZyZWUoaW50aSk7XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zODEzLVx0XHRzZXRiaXQgPSAwO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozODE0Olx0XHRhZGFwdGVyX2luZGljYXRvcnNfc2V0X2Zhc3Qoa3ZtLCBhZGFwdGVyLCBcdTAwMjZlLVx1MDAzZWFkYXB0ZXIsIHNldGJpdCk7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM4MTUtXHRcdGtmcmVlKGludGkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODk2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqSW52ZXN0aWdhdGluZyBLVk0gb24gczM5MCBBUEkgQ2FsbHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9uczogYHNldF9hZGFwdGVyX2ludGAsIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYCwgYW5kIGBrdm1fczM5MF9oYW5kbGVfcHZgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGVpciByZWxhdGlvbnNoaXAsIGVzcGVjaWFsbHkgZnJvbSBhbiBBUEkgcGVyc3BlY3RpdmUuIEl0IHNlZW1zIGBzZXRfYWRhcHRlcl9pbnRgIGlzIGNhbGxpbmcgYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgLiBUaGUgaW50ZXJlc3RpbmcgcG9pbnQgaXMgdGhhdCBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2AgaXMgYSBwdWJsaWNseSBhY2Nlc3NpYmxlLCBub24tc3RhdGljIEFQSSBlbnRyeSBwb2ludCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMgYW5kIGlmIGl0IGlzIGJlaW5nIGNhbGxlZCBmcm9tIG90aGVyIG1vZHVsZXMgb3Igb25seSBmcm9tIGBzZXRfYWRhcHRlcl9pbnRgLiBGdXJ0aGVyLCBpdCBsb29rcyBsaWtlIGBrdm1fczM5MF9oYW5kbGVfcHZgIGlzIGFub3RoZXIgcHVibGljbHkgYWNjZXNzaWJsZSBBUEkgZW50cnkgcG9pbnQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGZvciBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRob3NlIHR3byBBUEkgZW50cnkgcG9pbnRzIGFuZCB0aGVpciBpbnRlcmFjdGlvbnMuIEJlZm9yZSBJIGdvIHRvbyBkZWVwIGludG8gdGhlIGNvZGUgdGhvdWdoLCBsZXQmIzM5O3MgbWFrZSBzdXJlIEtWTSBpcyBldmVuIGVuYWJsZWQgZm9yIHMzOTAuIEkgd2lsbCBkb3VibGUgY2hlY2sgdGhlIEtjb25maWcgc2V0dGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9LY29uZmlnPTE3PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMTgtXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6MTk6Y29uZmlnIEtWTVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTIwLVx0ZGVmX3RyaXN0YXRlIHlcbi0tXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDYtXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDc6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDgtXHRib29sIFwmIzM0O1VzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0MzkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgbGlrZSB5b3Vyc2VsZjoKCioqQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5IEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24sIGFuZCB0aGUga2V5IHRoaW5nIEkmIzM5O20gcGlja2luZyB1cCBvbiBpcyB0aGF0IGl0JiMzOTtzIHNldCB0byBgS1ZNYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7UmlnaHQsIEtWTS4mIzM0OyBCdXQgdGhlbiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuIGBLVk1gIGlzbiYjMzk7dCBqdXN0IGEgc3RhbmRhbG9uZSB0aGluZzsgaXQgKmRlcGVuZHMqIG9uIHNvbWV0aGluZyBlbHNlLiBBbmQgdGhhdCBzb21ldGhpbmcgZWxzZSwgaW4gdGhpcyBjYXNlLCBpcyBjbGVhcmx5IGBWSVJUVUFMSVpBVElPTmAuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcHJlcmVxdWlzaXRlLiBJJiMzOTttIHBhcnNpbmcgdGhpcyBhcyBhIGxheWVyZWQgZGVwZW5kZW5jeTogdG8gZ2V0IEtWTSB3b3JraW5nLCBWSVJUVUFMSVpBVElPTiBoYXMgdG8gYmUgcHJlc2VudCwgZW5hYmxlZCwgYW5kIGZ1bmN0aW9uaW5nLiBPdGhlcndpc2UsIGl0IGlzIGdvaW5nIHRvIGNyYXNoIGFuZCBidXJuISBJIGNhbiBhbHJlYWR5IHNlZSBzb21lIHBvdGVudGlhbCB0cm91Ymxlc2hvb3RpbmcgcGF0aHMgb3BlbmluZyB1cCBpbiBteSBtaW5kLCBhbmQgdGhpbmtpbmcgdGhyb3VnaCB0aGVtLCBiYXNlZCBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IFZJUlRVQUxJWkFUSU9OIGlzIHByZXNlbnQuIElmIGl0ICppc24mIzM5O3QqLCB0aGF0JiMzOTtzIHRoZSBmaXJzdCBwbGFjZSB0byBsb29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVklSVFVBTElaQVRJT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9LY29uZmlnPTU9c291cmNlIFwmIzM0O3ZpcnQva3ZtL0tjb25maWdcJiMzNDtcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy02LVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjc6bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTgtXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAwOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzk3CgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMjYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLVk0gQ29uZmlndXJhdGlvbiBhbmQgUG90ZW50aWFsIEZvY3VzIFN5bWJvbHMqKgoKT2theSwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIEtWTSBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgcmVsYXRpbmcgdG8gczM5MCBhcmNoaXRlY3R1cmUsIEkgYmVsaWV2ZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgZm9yIGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhpcyBjb250ZXh0LiBXZSB3YW50IHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgd2UgY2FuIHBvdGVudGlhbGx5IHVzZSBmb3Igb3VyIGFuYWx5c2lzLgoKQWxyaWdodCwgYSBxdWljayBzY2FuIHJldmVhbHMgdGhhdCBga3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzYCBpcyBjYWxsZWQgZnJvbSBga3ZtX3MzOTBfZGVzdHJveV9hZGFwdGVyc2AgYW5kIGFsc28gYGt2bV9zMzkwX2hhbmRsZV9wdmAuIGBrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzYCwgaW4gdHVybiwgaXMgY2FsbGVkIGZyb20gYGt2bV9hcmNoX2Rlc3Ryb3lfdm1gLiBUaGVuIHRoZXJlJiMzOTtzIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYCwgd2hpY2ggaXMgcGFydCBvZiBnZW5lcmljIEtWTSBjb2RlLgoKQmFzZWQgb24gdGhpcyBjYWxsIGdyYXBoLCB0aGUgbGlrZWx5IGZvY3VzIHN5bWJvbHMsIHRoZSBmdW5jdGlvbnMgdGhhdCBzZWVtIG1vc3QgaW50ZXJlc3RpbmcsIGFyZTogYGt2bV9zMzkwX2hhbmRsZV9wdmAsIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYCwgYW5kIGBrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzYC4KCkhvd2V2ZXIsIHdhaXQgYSBzZWNvbmQuIGBrdm1fczM5MF91bm1hcF9hbGxfYWRhcHRlcnNgIGlzLCBpbiBmYWN0LCBub24tc3RhdGljLiBUaGlzIHNpbXBsaWZpZXMgdGhpbmdzLiBUaGF0IG9wZW5zIHRoZSBkb29yIHRvIHVzaW5nIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkgaW4gb3VyIGFuYWx5c2lzIHdpdGhvdXQgZGlnZ2luZyBkZWVwZXIgaW50byBpdHMgY2FsbGVycy4gV2UgY2FuIGp1c3QgZm9jdXMgb24gYGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVyc2AgYW5kIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYC4KCk5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNvbmZpcm0gd2hldGhlciBga3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzYCBpcyBleHBvcnRlZC4gVGhhdCYjMzk7bGwgYmUgdGhlIGtleSB0byBpdCBhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qa3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQ5NQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDM5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBUaG91Z2h0IFByb2Nlc3Mgb24gSWRlbnRpZnlpbmcgS2V5IFN5bWJvbHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3Qgc3ltYm9sIHRvIHJlcHJlc2VudCB0aGUgZnVuY3Rpb25hbGl0eS4gVGhlIGdvYWwsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeSBwb2ludHMuIFJpZ2h0LCByaWdodC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgY29kZSBjaGFuZ2VzIHRvdWNoIGBrdm1fczM5MF9hZGFwdGVyX21hcGAgYW5kIGBrdm1fczM5MF9hZGFwdGVyX3VubWFwYC4gVGhvc2UgYXJlIGNhbGxlZCBieSBgbW9kaWZ5X2lvX2FkYXB0ZXJgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBmcm9tIGBmbGljX3NldF9hdHRyYC4gYGZsaWNfc2V0X2F0dHJgIGlzIHBhcnQgb2YgYGt2bV9mbGljX29wc2AuIEFuZCBsb29raW5nIGF0IHRoZSBicm9hZGVyIGNvbnRleHQsIGBmbGljX3NldF9hdHRyYCBoYW5kbGVzIHRoZSBgS1ZNX1MzOTBfSU9fQURBUFRFUl9NQVBgIGFuZCBgS1ZNX1MzOTBfSU9fQURBUFRFUl9VTk1BUGAgaW9jdGxzLgoKU28sICppbml0aWFsbHkqLCBteSB0aGlua2luZyBpcyB0aGF0IGBmbGljX3NldF9hdHRyYCBzZWVtcyBsaWtlIGEgZ29vZCBjYW5kaWRhdGUsIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIHN0YXRpYywgYmVjYXVzZSBpdCYjMzk7cyBlc3NlbnRpYWxseSBhbiBlbnRyeSBwb2ludCB0aHJvdWdoIHRob3NlIG9wcy4gQnV0IHdhaXQsIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHNheXMgJiMzNDtQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMmIzM0Oy4gSXMgdGhlcmUgYSBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgKmNhbGxzKiBgZmxpY19zZXRfYXR0cmA/IE5vcGUsIGl0JiMzOTtzIGludm9rZWQgdGhyb3VnaCBhIGZ1bmN0aW9uIHBvaW50ZXIuIFNvIHRoYXQmIzM5O3Mgb3V0LiBJIGNhbiYjMzk7dCBpbmNsdWRlIG9wcyBlaXRoZXIuCgpBbHJpZ2h0LCB3aGF0IGVsc2UgaXMgcmVsZXZhbnQ/IFdlIGNvdWxkIGluY2x1ZGUgYGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVyc2AgYW5kIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYC4KCkJ1dCwgb2gsIHJpZ2h0ISBgZmxpY19zZXRfYXR0cmAgKmlzKiBzdGF0aWMuIEhtbSwgdGhlcmUmIzM5O3MgYGt2bV9zMzkwX2hhbmRsZV9wdmAuIFRoYXQgY2FsbHMgYGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVyc2AuCgpTbywgaXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBzdWl0YWJsZSBub24tc3RhdGljIGFuZCBub3QgaW4tbGluZWQgZnVuY3Rpb24gdG8gYmUgaW5jbHVkZWQgd291bGQgYmUgYGt2bV9zMzkwX2hhbmRsZV9wdmAuIEFuZCBJIHNob3VsZCBhbHNvIGtlZXAgYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgIGluIG1pbmQuCgpUaW1lIHRvIGNoZWNrIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MzY4NT1pbnQgX19pbml0IGt2bV9zMzkwX2dpYl9pbml0KHU4IG5pc2MpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNzQwLS8qXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjM3NDE6ICoga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYzogZmFzdC1wYXRoIGZvciBpcnFmZCBpbmplY3Rpb25cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzc0Mi0gKi9cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6Mzc0MzppbnQga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYyhzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzc0NC1cdFx0XHQgICAgICBzdHJ1Y3Qga3ZtICprdm0sIGludCBpcnFfc291cmNlX2lkLCBpbnQgbGV2ZWwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAwOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjQyCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIEtWTS9zMzkwIEludGVycnVwdCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBpdCYjMzk7cyAqbm90KiBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCYjMzk7cyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IHN1Z2dlc3RzIGl0JiMzOTtzIGxpa2VseSBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoZSBzcGVjaWZpYyBmaWxlIGl0JiMzOTtzIGRlZmluZWQgaW4uIFRoaXMgcHJvYmFibHkgbWVhbnMgaXQmIzM5O3MgYSBwdWJsaWNseSBhY2Nlc3NpYmxlIGZ1bmN0aW9uLCBhdCBsZWFzdCB3aXRoaW4gdGhlIEtWTS9zMzkwIGFyY2hpdGVjdHVyZS4gV2UgbmVlZCB0byBrZWVwIHRoaXMgaW4gbWluZCBhcyB3ZSB0cmFjZSBob3cgaW50ZXJydXB0IGluamVjdGlvbiBpcyBoYW5kbGVkLiBUaGlzIG5vbi1zdGF0aWMgbmF0dXJlIGJyb2FkZW5zIHRoZSBzY29wZSBvZiB3aGVyZSBwb3RlbnRpYWwgaXNzdWVzIGNvdWxkIGJlIGludHJvZHVjZWQsIG9yIHdoZXJlIHdlIGNvdWxkIG9wdGltaXplLgoKTm93LCBsZXQmIzM5O3MgcGl2b3QgYW5kIHRha2UgYSBsb29rIGF0IGBrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzYC4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgdGhlIGRlc3RydWN0aW9uIG9mIGFkYXB0ZXJzIHdpbGwgaGF2ZSBzb21lIGludGVycGxheSB3aXRoIGhvdyBpbnRlcnJ1cHRzIGFyZSBtYW5hZ2VkLiBQZXJoYXBzIHRoZSBjbGVhbnVwIHJvdXRpbmVzIGZvciB0aGUgYWRhcHRlcnMgcmVsZWFzZSBvciByZS1jb25maWd1cmUgSVJRcy4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYWRhcHRlcnMgaW50ZXJhY3Qgd2l0aCB0aGUgaGFyZHdhcmUgYW5kIHRoZSB2aXJ0dWFsIG1hY2hpbmUmIzM5O3MgaW50ZXJydXB0IGNvbnRyb2xsZXIgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZmxvdyBvZiBpbnRlcnJ1cHQgZXZlbnRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgYWRhcHRlcnMgbWlnaHQgYmUgYSBzb3VyY2Ugb2YgaW50ZXJydXB0IG1hc2tpbmcsIGRlLWFzc2VydGlvbiwgb3IgcmVkaXJlY3Rpb24uIFRoZXJlIGNvdWxkIGJlIGNyaXRpY2FsIGxvZ2ljIGluIHRoZXJlIGZvciBlbnN1cmluZyBpbnRlcnJ1cHRzIGFyZSBwcm9wZXJseSBoYW5kbGVkIGR1cmluZyBzaHV0ZG93bi4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IGNvbm5lY3Rpb24gZXhpc3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yNjA0PXZvaWQga3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI2MzUtXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI2MzY6dm9pZCBrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzKHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjYzNy17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTM0Mjg9dm9pZCBrdm1fYXJjaF9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzQ1MS1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylrdm0tXHUwMDNlYXJjaC5zaWVfcGFnZTIpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM0NTI6XHRrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzKGt2bSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzQ1My1cdGt2bV9zMzkwX2NsZWFyX2Zsb2F0X2lycXMoa3ZtKTtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg9NTQ2PWludCBwc3dfZXh0aW50X2Rpc2FibGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg6NTQ3OnZvaWQga3ZtX3MzOTBfZGVzdHJveV9hZGFwdGVycyhzdHJ1Y3Qga3ZtICprdm0pO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oLTU0OC1pbnQga3ZtX3MzOTBfZXh0X2NhbGxfcGVuZGluZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ3MwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtWTS9zMzkwIEFkYXB0ZXIgTW9kaWZpY2F0aW9uIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzYC4gSXQmIzM5O3Mgbm9uLXN0YXRpYywgd2hpY2ggaXMgZ29vZC4gVGhhdCYjMzk7cyBhIHBvaW50IGluIGl0cyBmYXZvciwgYnV0IGxldCYjMzk7cyBzZWUgaG93IGl0IGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuIE15IHRoaW5raW5nIGlzLCBob3cgaXMgdGhpcyBhY3R1YWxseSB0cmlnZ2VyZWQ/CgpOb3cgSSYjMzk7bSBsb29raW5nIGF0IGBmbGljX3NldF9hdHRyYC4gSXQgaGFuZGxlcyBgS1ZNX0RFVl9GTElDX0FEQVBURVJfTU9ESUZZYCwgd2hpY2ggaXMgaW1wb3J0YW50IGJlY2F1c2UgKnRoYXQmIzM5O3MqIHRoZSBpb2N0bCB0aGF0IGtpY2tzIG9mZiBga3ZtX3MzOTBfYWRhcHRlcl9tYXBgIGFuZCBga3ZtX3MzOTBfYWRhcHRlcl91bm1hcGAuIEV2ZW4gdGhvdWdoIGBmbGljX3NldF9hdHRyYCAqaXMqIHN0YXRpYywgaXQgc2VlbXMgdG8gYmUgdGhlIG1haW4gcG9pbnQgb2YgZW50cnkgZm9yIHRoZSBhZGFwdGVyIG1vZGlmaWNhdGlvbiBsb2dpYy4gSXTigJlzIGRlZmluaXRlbHkgd2hlcmUgdGhlIGFjdGlvbiBzdGFydHMgaW4gdGVybXMgb2YgbW9kaWZ5aW5nIHRoZSBhZGFwdGVycy4gU28sIGJhc2VkIG9uIHRoZSBmYWN0IHRoYXQgdGhlIGNoYW5nZXMgc3RhcnQgaGVyZSwgSSYjMzk7bSBnb2luZyB0byBpbmNsdWRlIGl0LgoKV2FpdCBhIHNlY29uZOKApiBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nLiBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBwcmVmZXJzICpub24tc3RhdGljLCBub24taW5saW5lZCogZW50cnkgcG9pbnRzLiBBbmQgdGhlbiBpdCBnb2VzIG9uIHRvIGhpZ2hsaWdodCB0aGF0ICpzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyogd2hpY2ggYXJlIHVzdWFsbHkgaW5saW5lZCwgbGFjayBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBCdXQgYGZsaWNfc2V0X2F0dHJgIGlzIGEgKmZ1bmN0aW9uIHBvaW50ZXIqIGluc2lkZSBvZiBhIHN0cnVjdCEgVGhlcmVmb3JlLCBpdCBzaG91bGQgKm5vdCogYmUgaW5saW5lZC4gSXQgaGFzIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIE9rYXksIHRoYXQgY2hhbmdlcyB0aGluZ3MuCgpPa2F5LCBuZXh0IEkmIzM5O2xsIG1vdmUgb24gdG8gY2hlY2sgYGt2bV9zMzkwX2hhbmRsZV9wdmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9zMzkwX2hhbmRsZV9wdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yNDQ2PXN0YXRpYyBpbnQga3ZtX3MzOTBfY3B1c190b19wdihzdHJ1Y3Qga3ZtICprdm0sIHUxNiAqcmMsIHUxNiAqcnJjKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yNDc3LSAqL1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjI0Nzg6c3RhdGljIHNzaXplX3Qga3ZtX3MzOTBfaGFuZGxlX3B2X2luZm8oc3RydWN0IGt2bV9zMzkwX3B2X2luZm8gKmluZm8pXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjQ3OS17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTI1MTc9c3RhdGljIGludCBrdm1fczM5MF9wdl9kbXAoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3B2X2NtZCAqY21kLFxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yNTc4LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjI1Nzk6c3RhdGljIGludCBrdm1fczM5MF9oYW5kbGVfcHYoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3B2X2NtZCAqY21kKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTI1ODAte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yNzY0LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjI3NjU6XHRcdGRhdGFfbGVuID0ga3ZtX3MzOTBfaGFuZGxlX3B2X2luZm8oXHUwMDI2aW5mbyk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjc2Ni1cdFx0aWYgKGRhdGFfbGVuIFx1MDAzYyAwKSB7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTI5MjU9aW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMDQwLVx0XHQvKiBtdXN0IGJlIGNhbGxlZCB3aXRob3V0IGt2bS1cdTAwM2Vsb2NrICovXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzA0MTpcdFx0ciA9IGt2bV9zMzkwX2hhbmRsZV9wdihrdm0sIFx1MDAyNmFyZ3MpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMwNDItXHRcdGlmIChjb3B5X3RvX3VzZXIoYXJncCwgXHUwMDI2YXJncywgc2l6ZW9mKGFyZ3MpKSkge1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01NDMwPWxvbmcga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLFxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NDc0LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU0NzU6c3RhdGljIGludCBrdm1fczM5MF9oYW5kbGVfcHZfdmNwdV9kdW1wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NDc2LVx0XHRcdFx0XHRzdHJ1Y3Qga3ZtX3B2X2NtZCAqY21kKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01NTE3PWxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTcxNS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1NzE2Olx0XHRyID0ga3ZtX3MzOTBfaGFuZGxlX3B2X3ZjcHVfZHVtcCh2Y3B1LCBcdTAwMjZjbWQpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU3MTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDMxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEtWTS9zMzkwIENvZGUgU3RydWN0dXJlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkgc2VlIHRoYXQgYGt2bV9zMzkwX2hhbmRsZV9wdmAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIGJ1dCB3aGF0JiMzOTtzIGludGVyZXN0aW5nIGlzIHRoYXQgaXQgY2FsbHMgYGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVyc2AuIFRoYXQmIzM5O3MgYSBrZXkgY29ubmVjdGlvbiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLiBBbHNvLCBga3ZtX2FyY2hfdm1faW9jdGxgIGlzIG5vbi1zdGF0aWMgYW5kICphbHNvKiBjYWxscyBga3ZtX3MzOTBfaGFuZGxlX3B2YC4gVGhhdCYjMzk7cyBhIGNsZWFyIGNvbnRyb2wgZmxvdyBwYXRoLCB3aGljaCBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBtb3N0IHJlbGV2YW50IHN5bWJvbHMgdG8gZm9jdXMgb24gaGVyZSBhcmUgZGVmaW5pdGVseTogYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgLCBga3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzYCwgYW5kIGBrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBjcml0aWNhbCBwb2ludHMgb2YgaW50ZXJlc3QgcmlnaHQgbm93LgoKSGFuZyBvbiBhIHNlY29uZOKApiBJJiMzOTt2ZSBnb3QgdG8gcmV2aXNpdCB0aGUgYGZsaWNfc2V0X2F0dHJgIGZ1bmN0aW9uLiBJdCYjMzk7cyBzdGF0aWMsIGJ1dCBpdCAqaXMqIHRoZSBpb2N0bCBoYW5kbGVyIGZvciB0aGUgZGV2aWNlLiBUaGF0JiMzOTtzIGEgYml0IG9mIGEgc3VycHJpc2UsIGJ1dCBJIGtub3cgaXQmIzM5O3MgdXNlZCB3aXRoIGBrdm1fZGV2aWNlX29wc2AgYnkgdGhlIGdlbmVyaWMgS1ZNIGNvZGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3Qgb3Zlcmxvb2sgYW55IHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgdGhlcmUuIEkgY2FuJiMzOTt0IHRoaW5rIG9mIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiBhdCB0aGUgbW9tZW50LCBidXQgdGhhdCBkb2VzbiYjMzk7dCBtZWFuIGl0IGRvZXNuJiMzOTt0IGV4aXN0LgoKU28sIEkmIzM5O20gZ29pbmcgdG8gc29saWRpZnkgbXkgZm9jdXMgb24gdGhvc2UgdGhyZWUgaW5pdGlhbCBzeW1ib2xzOiBga3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzYCwgYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgLCBhbmQgYGt2bV9zMzkwX2Rlc3Ryb3lfYWRhcHRlcnNgLiBJIG1pZ2h0IG5lZWQgdG8gY2lyY2xlIGJhY2sgdG8gYGZsaWNfc2V0X2F0dHJgLCBidXQgdGhvc2UgdGhyZWUgc2VlbSB0aGUgbW9zdCBpbXBvcnRhbnQgcmlnaHQgbm93LgoKRmluYWxseSwganVzdCBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBiZSBjb21wbGV0ZS4gVGhpcyBwYXRjaCBtb2RpZmllcyBgYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY2AuIEkga25vdyB0aGF0IHRoaXMgZmlsZSBpcyBvbmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19LVk1gIGlzIGVuYWJsZWQsIHNvIEkmIzM5O20gY292ZXJlZCBvbiB0aGUgY29uZmlndXJhdGlvbiBmcm9udC4gRXhjZWxsZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnRlcnJ1cHQubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9NYWtlZmlsZT04PWNjZmxhZ3MteSA6PSAtSXZpcnQva3ZtIC1JYXJjaC9zMzkwL2t2bVxuYXJjaC9zMzkwL2t2bS9NYWtlZmlsZS05LVxuYXJjaC9zMzkwL2t2bS9NYWtlZmlsZToxMDprdm0teSAmIzQzOz0ga3ZtLXMzOTAubyBpbnRlcmNlcHQubyBpbnRlcnJ1cHQubyBwcml2Lm8gc2lncC5vXG5hcmNoL3MzOTAva3ZtL01ha2VmaWxlLTExLWt2bS15ICYjNDM7PSBkaWFnLm8gZ2FjY2Vzcy5vIGd1ZXN0ZGJnLm8gdnNpZS5vIHB2Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5NjEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtWTSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGJ1aWxkIHN5c3RlbSBhbmQgY29uZmlybWluZyBhIGZldyB0aGluZ3MuIEZpcnN0LCB5ZXMsIGBpbnRlcnJ1cHQub2AgaXMgZGVmaW5pdGVseSBwdWxsZWQgaW4gYnkgYGt2bS15YC4gVGhhdCYjMzk7cyBleHBlY3RlZCwgZ2l2ZW4gaXRzIHJvbGUuIE5leHQsIHRoZSBvdmVyYWxsIGNvbmZpZyBmb3IgdGhpcyBtb2R1bGUgaXMgaW5kZWVkIGBLVk1gLiBOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXM6IERvZXMgYEtWTWAgZGVwZW5kIG9uIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyBvciBmZWF0dXJlcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyB0byBmdWxseSBncmFzcCBob3cgdGhpcyBhbGwgZml0cyB0b2dldGhlciBhbmQgcGlucG9pbnQgcG90ZW50aWFsIHBvaW50cyBvZiBpbXBhY3QuIExldCYjMzk7cyBkaWcgZGVlcGVyIGludG8gdGhlIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9LY29uZmlnPTE3PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMTgtXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6MTk6Y29uZmlnIEtWTVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTIwLVx0ZGVmX3RyaXN0YXRlIHlcbi0tXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDYtXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDc6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDgtXHRib29sIFwmIzM0O1VzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzMjIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipUaGUgUGl2b3RhbCBSb2xlIG9mIFZpcnR1YWxpemF0aW9uKioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMgbWF0dGVyLCB3aGF0ZXZlciAmIzM0O2l0JiMzNDsgaXMsIGhpbmdlcyBvbiB0aGUgdmVyeSBuYXR1cmUgYW5kIGltcGxlbWVudGF0aW9uIG9mIGBWSVJUVUFMSVpBVElPTmAuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGluZnJhc3RydWN0dXJlLCBhcHBsaWNhdGlvbnMsIHJlc291cmNlc+KApiBldmVyeXRoaW5nLiBUaGUgbnVhbmNlcyBvZiB0aGUgc3BlY2lmaWMgdmlydHVhbGl6YXRpb24gdGVjaG5vbG9neSBvciBtZXRob2RvbG9neSBkZXBsb3llZCDigJMgYmUgaXQgaGFyZHdhcmUgdmlydHVhbGl6YXRpb24sIE9TLWxldmVsIHZpcnR1YWxpemF0aW9uIChjb250YWluZXJzKSwgb3Igc29tZSBoeWJyaWQgYXBwcm9hY2gg4oCTIHdpbGwgcHJvZm91bmRseSBpbXBhY3QgdGhlIGRpcmVjdGlvbiB3ZSBuZWVkIHRvIHRha2UuIEFyZSB3ZSB0YWxraW5nIGFib3V0IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzPyBTY2FsYWJpbGl0eSBjaGFsbGVuZ2VzPyBTZWN1cml0eSBjb25zaWRlcmF0aW9ucz8gQ29zdCBvcHRpbWl6YXRpb24/IFRoZSBhbnN3ZXIgdG8gKmFueSogb2YgdGhvc2UgcXVlc3Rpb25zLCBhbmQgbGlrZWx5IGNvdW50bGVzcyBvdGhlcnMsIGlzIGdvaW5nIHRvIGJlIGZ1bmRhbWVudGFsbHkgc2hhcGVkIGJ5IGhvdyBgVklSVFVBTElaQVRJT05gIGlzIHV0aWxpemVkIHdpdGhpbiB0aGUgc3lzdGVtIG9yIGNvbnRleHQgd2UmIzM5O3JlIGV4YW1pbmluZy4gV2l0aG91dCBrbm93aW5nIHRob3NlIGRldGFpbHMsIGFueSBwcm9wb3NlZCBzb2x1dGlvbiB3b3VsZCBiZSBwdXJlIHNwZWN1bGF0aW9uLiBJdCYjMzk7cyB0aGUgbHluY2hwaW4sIHRoZSBlc3NlbnRpYWwgZm91bmRhdGlvbiB1cG9uIHdoaWNoIGV2ZXJ5dGhpbmcgZWxzZSByZXN0cy4gVGhlIGRldmlsLCBhcyBhbHdheXMsIGlzIGluIHRoZSB2aXJ0dWFsaXphdGlvbiBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vS2NvbmZpZz01PXNvdXJjZSBcJiMzNDt2aXJ0L2t2bS9LY29uZmlnXCYjMzQ7XG5hcmNoL3MzOTAva3ZtL0tjb25maWctNi1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo3Om1lbnVjb25maWcgVklSVFVBTElaQVRJT05cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy04LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjY4MwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDUxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNIHMzOTAgSW50ZXJydXB0IEhhbmRsaW5nIGZvciBQYXRjaCBSZXZpZXcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCB0aGUgbWFpbiBmb2N1cyBpcyBvbiB0aGUgYFZJUlRVQUxJWkFUSU9OYCBib29sZWFuIHdoaWNoLCBiYXNlZCBvbiB0aGUgY29uZmlndXJhdGlvbnMsIHNlZW1zIHRvIGJlIHRpZWQgdG8gYEtWTWAg4oCTIGFzIGV4cGVjdGVkIGZvciB0aGlzIHMzOTAgd29yay4gTm93LCB0aGUgcGF0Y2ggaXRzZWxmIGlzIGRlYWxpbmcgd2l0aCB0aGUgczM5MCBLVk0gaW50ZXJydXB0IGhhbmRsaW5nLCBhbmQgc3BlY2lmaWNhbGx5LCB0aGUgZmFsbGJhY2sgbWVjaGFuaXNtIGZvciBhZGFwdGVyIGluZGljYXRvcnMuIFRoaXMgc2lnbmFscyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBLVk0gc3Vic3lzdGVtLCBlc3BlY2lhbGx5IGFyb3VuZCBpbnRlcnJ1cHQgaW5qZWN0aW9uIGFuZCBtYXBwaW5nLCBzbyBpdCYjMzk7cyBhIGNyaXRpY2FsIGFyZWEgdG8gdmV0LiBDb25zaWRlcmluZyBzeXprYWxsZXIgc3VwcG9ydHMgczM5MHggS1ZNIGZ1enppbmcsIHRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLgoKSSYjMzk7dmUgYWxyZWFkeSBpZGVudGlmaWVkIHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkLCBzbyBsZXQmIzM5O3MgcmV2aXNpdCB0aG9zZTogYGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVyc2AsIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYCwgYW5kIGBrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzYC4KCmBrdm1fczM5MF91bm1hcF9hbGxfYWRhcHRlcnNgIGlzIGNhbGxlZCBmcm9tIGBrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzYCBhbmQgYGt2bV9zMzkwX2hhbmRsZV9wdmAuIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYCBpcyBjYWxsZWQgZnJvbSB0aGUgZ2VuZXJpYyBga3ZtX3NldF9pcnFfaW5hdG9taWNgLiAgYGt2bV9zMzkwX2Rlc3Ryb3lfYWRhcHRlcnNgIGlzIGNhbGxlZCBmcm9tIGBrdm1fYXJjaF9kZXN0cm95X3ZtYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGVzZSBhcmUgaW5jbHVkZWQuCgpOb3csIEkgd2FzIGxvb2tpbmcgYXQgYGt2bV9zMzkwX2FkYXB0ZXJfbWFwYCBhbmQgYGt2bV9zMzkwX2FkYXB0ZXJfdW5tYXBgLCBzaW5jZSB0aGV5IGFyZSBzdGF0aWMgYW5kIGhhdmUgYmVlbiBtb2RpZmllZC4gQnV0IGBrdm1fczM5MF9hZGFwdGVyX21hcGAgaXMgaW5saW5lZCwgYmVpbmcgY2FsbGVkIGZyb20gYG1vZGlmeV9pb19hZGFwdGVyYCwgYW5kIGBmbGljX3NldF9hdHRyYCB3aGljaCBpcyBhIGZ1bmN0aW9uIHBvaW50ZXIuIFNvIEkgd2lsbCBpbmNsdWRlIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYCwgYGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVyc2AsIGFuZCBga3ZtX3MzOTBfZGVzdHJveV9hZGFwdGVyc2AuCgpKdXN0IGNvbmZpcm1pbmcsIGBLVk1gIGlzIGluZGVlZCB0aGUgb25seSBjb25maWcgYXQgcGxheSBoZXJlLCBnaXZlbiB0aGUgYGRlZl9ib29sIHlgIGZvciBgVklSVFVBTElaQVRJT05gLiBMb29rcyBsaWtlIHRoaXMgc3VtbWFyaXplcyB0aGUgZm9jdXMgc3ltYm9sczoKKiAgIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYAoqICAgYGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVyc2AKKiAgIGBrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzYAoqICAgVGhlIGNvbmZpZyBpcyBgS1ZNYC4KCkkmIzM5O2xsIHByb2NlZWQgdG8gZXhhbWluZSBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2Agbm93IHRvIGNoZWNrIHRoZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTM2ODU9aW50IF9faW5pdCBrdm1fczM5MF9naWJfaW5pdCh1OCBuaXNjKVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzc0MC0vKlxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozNzQxOiAqIGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWM6IGZhc3QtcGF0aCBmb3IgaXJxZmQgaW5qZWN0aW9uXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM3NDItICovXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjM3NDM6aW50IGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWMoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM3NDQtXHRcdFx0ICAgICAgc3RydWN0IGt2bSAqa3ZtLCBpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGxldmVsLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODA1NAoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgTGFuZHNjYXBlKioKCkFscmlnaHQsIHllcCwgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IHRoZSBrZXkgYXJlYSBJIHdhcyBleHBlY3RpbmcuIEl0JiMzOTtzIHJpZ2h0IHRoZXJlLiBOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gYGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVyc2AuIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIg4oCTIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciB0aGUgY2xlYW4tdXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciB0aG9yb3VnaGx5IHRvIGlkZW50aWZ5IHRoZSByb290IGNhdXNlIG9mIHRoZSBiZWhhdmlvciwgb3IgdG8gdW5kZXJzdGFuZCBpZiB0aGUgaXNzdWUgbGllcyBmdXJ0aGVyIGRvd24gdGhlIGNhbGwgc3RhY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVycyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yNTU3PXN0YXRpYyBpbnQga3ZtX3MzOTBfYWRhcHRlcl91bm1hcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZCwgX191NjQgYWRkcilcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI2MDMtXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI2MDQ6dm9pZCBrdm1fczM5MF91bm1hcF9hbGxfYWRhcHRlcnMoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNjA1LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTI2MzY9dm9pZCBrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI2MzktXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI2NDA6XHRrdm1fczM5MF91bm1hcF9hbGxfYWRhcHRlcnMoa3ZtKTtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjY0MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1MjEKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDb25maXJtaW5nIGFuZCBEaXJlY3RpbmcgRm9jdXMqKgoKQWxyaWdodCwgeWVwLCBJIHNlZSBpdC4gSXQmIzM5O3MgZGVmaW5pdGVseSB0aGVyZSwgdGhlIHBvdGVudGlhbCBpc3N1ZSBvciBhcmVhIEkmIzM5O20gbG9va2luZyBhdC4gTGV0JiMzOTtzIG5vdCB3YXN0ZSBhbnkgdGltZSBoZXJlLiBNeSBuZXh0IHN0ZXAgaGFzIHRvIGJlIGNsZWFyLCBpdCBoYXMgdG8gYmUgZm9jdXNlZCwgYW5kIHRoYXQgbWVhbnMgSSBuZWVkIHRvIGRpZyBpbnRvIGBrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzYC4gVGhhdCBmdW5jdGlvbiBpcyB0aGUgbGlrZWx5IGxvY2F0aW9uIHdoZXJlIHRoZSBpc3N1ZSwgd2hhdGV2ZXIgaXQgbWF5IGJlLCBpcyBsdXJraW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgdGhvcm91Z2hseS4gVGltZSB0byBnZXQgZG93biB0byBzcGVjaWZpY3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9zMzkwX2Rlc3Ryb3lfYWRhcHRlcnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MjYwND12b2lkIGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVycyhzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNjM1LVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyNjM2OnZvaWQga3ZtX3MzOTBfZGVzdHJveV9hZGFwdGVycyhzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI2Mzcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODg1NwoJCQkJCQkJb3V0cHV0OiAxMzkKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNvbmZpcm1hdGlvbiBhbmQgSW1tZWRpYXRlIEFjdGlvbioqCgpPa2F5LCB0aGUgY29uZmlybWF0aW9uIGlzIGluLiBUaGUgc3BlY2lmaWMgY29uZGl0aW9uIEkgd2FzIGxvb2tpbmcgZm9yIGlzIGluZGVlZCBwcmVzZW50LiBObyBmdXJ0aGVyIGFuYWx5c2lzIGlzIHJlcXVpcmVkIGF0IHRoaXMganVuY3R1cmUuIEkmIzM5O20gc2F0aXNmaWVkIHdpdGggdGhlIHZhbGlkYXRpb24gb2YgdGhpcyBzcGVjaWZpYyBicmFuY2guIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBpbW1lZGlhdGVseSBjYWxsIHRoZSBgc2V0LXJlc3VsdHNgIGZ1bmN0aW9uIG9yIG1ldGhvZC4gSSBuZWVkIHRvIGdldCB0aGlzIGluZm9ybWF0aW9uIHByb2Nlc3NlZCBhbmQgdGhlIHN0YXRlIHVwZGF0ZWQgYmFzZWQgb24gdGhpcyB2YWxpZGF0ZWQgY29uZGl0aW9uLiBUaGVyZSYjMzk7cyBubyB2YWx1ZSBpbiBkZWZlcnJpbmcgdGhpcyBvcGVyYXRpb24uIExldCYjMzk7cyBleGVjdXRlIGFuZCBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVycyYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzMzkwIEtWTSBpbnRlcnJ1cHQgaGFuZGxpbmcgbG9naWMgdG8gYWxsb3cgZmFsbGJhY2sgdG8gc2hvcnQtdGVybSBwaW5uaW5nIHdoZW4gbG9uZy10ZXJtIHBpbm5pbmcgZmFpbHMgZm9yIGFkYXB0ZXIgaW5kaWNhdG9ycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBLVk0gc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBob3cgaW50ZXJydXB0cyBhcmUgaW5qZWN0ZWQgYW5kIG1hcHBlZCwgYW5kIGl0IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3NldF9pcnFfaW5hdG9taWMmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2Rlc3Ryb3lfYWRhcHRlcnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHMzOTAgS1ZNIGludGVycnVwdCBoYW5kbGluZyBsb2dpYyB0byBhbGxvdyBmYWxsYmFjayB0byBzaG9ydC10ZXJtIHBpbm5pbmcgd2hlbiBsb25nLXRlcm0gcGlubmluZyBmYWlscyBmb3IgYWRhcHRlciBpbmRpY2F0b3JzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEtWTSBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGhvdyBpbnRlcnJ1cHRzIGFyZSBpbmplY3RlZCBhbmQgbWFwcGVkLCBhbmQgaXQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAwOjA5OjA3LjE2MjQ3NzYwMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0MzUyNjA0NjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNcIixcbiAgICBcImt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVyc1wiLFxuICAgIFwia3ZtX3MzOTBfZGVzdHJveV9hZGFwdGVyc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzMzkwIEtWTSBpbnRlcnJ1cHQgaGFuZGxpbmcgbG9naWMgdG8gYWxsb3cgZmFsbGJhY2sgdG8gc2hvcnQtdGVybSBwaW5uaW5nIHdoZW4gbG9uZy10ZXJtIHBpbm5pbmcgZmFpbHMgZm9yIGFkYXB0ZXIgaW5kaWNhdG9ycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBLVk0gc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBob3cgaW50ZXJydXB0cyBhcmUgaW5qZWN0ZWQgYW5kIG1hcHBlZCwgYW5kIGl0IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAwOjA5OjA3LjE2MjQ4NjI4MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQyNDM5NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzE2MWZiMjQwM2E2OTdjODBkNGJjYzcwNzM5Yjc4MDNhYjgxZDI4YlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCAyNSAwMDowOTowNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvczM5MF9mbGljLnJzdCBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vZGV2aWNlcy9zMzkwX2ZsaWMucnN0XFxuaW5kZXggYjc4NGY4MDE2NzQ4MzYuLmVjOWFhYWUwNGUyMjBhIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vZGV2aWNlcy9zMzkwX2ZsaWMucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3MzOTBfZmxpYy5yc3RcXG5AQCAtMTEyLDkgKzExMiwxNiBAQCBHcm91cHM6XFxuICAgICAgIG1hc2sgb3IgdW5tYXNrIHRoZSBhZGFwdGVyLCBhcyBzcGVjaWZpZWQgaW4gbWFza1xcbiBcXG4gICAgIEtWTV9TMzkwX0lPX0FEQVBURVJfTUFQXFxuLSAgICAgIFRoaXMgaXMgbm93IGEgbm8tb3AuIFRoZSBtYXBwaW5nIGlzIHB1cmVseSBkb25lIGJ5IHRoZSBpcnEgcm91dGUuXFxuKyAgICAgIE1hcCBhbiBhZGFwdGVyIGluZGljYXRvciBvciBzdW1tYXJ5IHBhZ2UgZm9yIGxvbmctdGVybSBwaW5uaW5nIHNvIHRoYXRcXG4rICAgICAgaW50ZXJydXB0IGluamVjdGlvbiBjYW4gYmUgcGVyZm9ybWVkIGluIGF0b21pYyBjb250ZXh0LiBJZiBsb25nLXRlcm1cXG4rICAgICAgcGlubmluZyBpcyBub3QgcG9zc2libGUgKGUuZy4gZmlsZS1iYWNrZWQgbWVtb3J5KSwgdGhlIHBhZ2UgaXMgdmVyaWZpZWRcXG4rICAgICAgdmlhIGEgc2hvcnQtdGVybSBwaW4gYW5kIHRoZSBpb2N0bCByZXR1cm5zIHN1Y2Nlc3M7IGludGVycnVwdCBpbmplY3Rpb25cXG4rICAgICAgd2lsbCB1c2UgdGhlIG5vbi1hdG9taWMgaXJxZmQgcGF0aCB3aXRoIHNob3J0LXRlcm0gcGlubmluZyBvbiBlYWNoXFxuKyAgICAgIGludGVycnVwdC4gSW4gU2VjdXJlIEV4ZWN1dGlvbiBtb2RlIHRoaXMgaXMgYSBuby1vcC5cXG4gICAgIEtWTV9TMzkwX0lPX0FEQVBURVJfVU5NQVBcXG4tICAgICAgVGhpcyBpcyBub3cgYSBuby1vcC4gVGhlIG1hcHBpbmcgaXMgcHVyZWx5IGRvbmUgYnkgdGhlIGlycSByb3V0ZS5cXG4rICAgICAgVW5tYXAgYSBwcmV2aW91c2x5IG1hcHBlZCBhZGFwdGVyIGluZGljYXRvciBvciBzdW1tYXJ5IHBhZ2UgYW5kIHJlbGVhc2VcXG4rICAgICAgdGhlIGxvbmctdGVybSBwaW4uIElmIHRoZSBwYWdlIHdhcyBub3QgbG9uZy10ZXJtIHBpbm5lZCAoZS5nLiBmaWxlLWJhY2tlZFxcbisgICAgICBtZW1vcnkgb3IgU2VjdXJlIEV4ZWN1dGlvbiBtb2RlKSwgdGhpcyBpcyBhIG5vLW9wIGFuZCByZXR1cm5zIHN1Y2Nlc3MuXFxuIFxcbiAgIEtWTV9ERVZfRkxJQ19BSVNNXFxuICAgICBtb2RpZnkgdGhlIGFkYXB0ZXItaW50ZXJydXB0aW9uLXN1cHByZXNzaW9uIG1vZGUgZm9yIGEgZ2l2ZW4gaXNjIGlmIHRoZVxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuaW5kZXggZWFhMzRjNWJkM2MxMTAuLmMxNzJmOWIyMTJkMThlIDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG5AQCAtNDc2LDYgKzQ3NiwxMSBAQCBzdHJ1Y3QgczM5MF9tYXBfaW5mbyB7XFxuIFxcdF9fdTY0IGd1ZXN0X2FkZHI7XFxuIFxcdF9fdTY0IGFkZHI7XFxuIFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbitcXHQvKlxcbitcXHQgKiBUcnVlIGlmIHRoZSBwYWdlIGlzIGxvbmctdGVybSBwaW5uZWQuIEZhbHNlIGlmIGxvbmctdGVybSBwaW5uaW5nXFxuK1xcdCAqIGZhaWxlZCBhbmQgdGhpcyBlbnRyeSBleGlzdHMgb25seSB0byBwcmVzZXJ2ZSBNQVAvVU5NQVAgc3ltbWV0cnkuXFxuK1xcdCAqL1xcbitcXHRib29sIHBpbm5lZDtcXG4gfTtcXG4gXFxuIHN0cnVjdCBzMzkwX2lvX2FkYXB0ZXIge1xcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1xcbmluZGV4IDllM2U2YjBkNzJhZDYxLi43NWVhY2QxNTc4ZWZhNiAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1xcbkBAIC0yNTIwLDggKzI1MjAsMjIgQEAgc3RhdGljIGludCBrdm1fczM5MF9hZGFwdGVyX21hcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZCwgX191NjQgYWRkcilcXG4gXFx0bWFwLVxcdTAwM2VhZGRyID0gaG9zdF9hZGRyO1xcbiBcXHRtYXAtXFx1MDAzZXBhZ2UgPSBwaW5fbWFwX3BhZ2Uoa3ZtLCBob3N0X2FkZHIsIEZPTExfTE9OR1RFUk0pO1xcbiBcXHRpZiAoIW1hcC1cXHUwMDNlcGFnZSkge1xcbi1cXHRcXHRyZXQgPSAtRUlOVkFMO1xcbi1cXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogTG9uZy10ZXJtIHBpbm5pbmcgbWF5IGZhaWwgZm9yIG1lbW9yeSB0eXBlcyBzdWNoIGFzIGZpbGUtYmFja2VkXFxuK1xcdFxcdCAqIG1lbW9yeS4gVmVyaWZ5IHRoYXQgc2hvcnQtdGVybSBwaW5uaW5nIHN1Y2NlZWRzIHNvIHRoYXQgdGhlXFxuK1xcdFxcdCAqIG5vbi1hdG9taWMgaXJxZmQgcGF0aCBjYW4gaGFuZGxlIGludGVycnVwdCBpbmplY3Rpb24uXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRtYXAtXFx1MDAzZXBhZ2UgPSBwaW5fbWFwX3BhZ2Uoa3ZtLCBob3N0X2FkZHIsIDApO1xcbitcXHRcXHRpZiAoIW1hcC1cXHUwMDNlcGFnZSkge1xcbitcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbitcXHRcXHR1bnBpbl91c2VyX3BhZ2UobWFwLVxcdTAwM2VwYWdlKTtcXG4rXFx0XFx0bWFwLVxcdTAwM2VwYWdlID0gTlVMTDtcXG4rXFx0XFx0bWFwLVxcdTAwM2VwaW5uZWQgPSBmYWxzZTtcXG4rXFx0XFx0LyogQWRkIGFuIGVudHJ5IHRvIHByZXNlcnZlIE1BUC9VTk1BUCBzeW1tZXRyeS4gKi9cXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0bWFwLVxcdTAwM2VwaW5uZWQgPSB0cnVlO1xcbiBcXHR9XFxuIFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VtYXBzX2xvY2ssIGZsYWdzKTtcXG4gXFx0aWYgKGFkYXB0ZXItXFx1MDAzZW5yX21hcHMgXFx1MDAzYyBNQVhfUzM5MF9BREFQVEVSX01BUFMpIHtcXG5AQCAtMjUzMiw3ICsyNTQ2LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9hZGFwdGVyX21hcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZCwgX191NjQgYWRkcilcXG4gXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VtYXBzX2xvY2ssIGZsYWdzKTtcXG4tXFx0aWYgKHJldClcXG4rXFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiBtYXAtXFx1MDAzZXBhZ2UpXFxuIFxcdFxcdHVucGluX3VzZXJfcGFnZShtYXAtXFx1MDAzZXBhZ2UpO1xcbiBvdXQ6XFxuIFxcdGlmIChyZXQpXFxuQEAgLTI1NDYsNiArMjU2MCw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfYWRhcHRlcl91bm1hcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZCwgX191NjQgYWRkcilcXG4gXFx0c3RydWN0IHMzOTBfbWFwX2luZm8gKm1hcCwgKnRtcCwgKm1hcF90b19mcmVlO1xcbiBcXHRzdHJ1Y3QgcGFnZSAqbWFwX3BhZ2VfdG9fcHV0ID0gTlVMTDtcXG4gXFx0dTY0IG1hcF9hZGRyX3RvX21hcmsgPSAwO1xcbitcXHRib29sIG1hcF9waW5uZWQgPSBmYWxzZTtcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0aW50IGZvdW5kID0gMCwgaWR4O1xcbiBcXG5AQCAtMjU2MCw2ICsyNTc1LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9hZGFwdGVyX3VubWFwKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkLCBfX3U2NCBhZGRyKVxcbiBcXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2bWFwLVxcdTAwM2VsaXN0KTtcXG4gXFx0XFx0XFx0bWFwX3BhZ2VfdG9fcHV0ID0gbWFwLVxcdTAwM2VwYWdlO1xcbiBcXHRcXHRcXHRtYXBfYWRkcl90b19tYXJrID0gbWFwLVxcdTAwM2VndWVzdF9hZGRyO1xcbitcXHRcXHRcXHRtYXBfcGlubmVkID0gbWFwLVxcdTAwM2VwaW5uZWQ7XFxuIFxcdFxcdFxcdG1hcF90b19mcmVlID0gbWFwO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbkBAIC0yNTY4LDExICsyNTg0LDE4IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfYWRhcHRlcl91bm1hcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZCwgX191NjQgYWRkcilcXG4gXFxuIFxcdGlmIChmb3VuZCkge1xcbiBcXHRcXHRrZnJlZShtYXBfdG9fZnJlZSk7XFxuLVxcdFxcdGlkeCA9IHNyY3VfcmVhZF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNyY3UpO1xcbi1cXHRcXHRtYXJrX3BhZ2VfZGlydHkoa3ZtLCBtYXBfYWRkcl90b19tYXJrIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbi1cXHRcXHRzZXRfcGFnZV9kaXJ0eV9sb2NrKG1hcF9wYWdlX3RvX3B1dCk7XFxuLVxcdFxcdHNyY3VfcmVhZF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlc3JjdSwgaWR4KTtcXG4tXFx0XFx0dW5waW5fdXNlcl9wYWdlKG1hcF9wYWdlX3RvX3B1dCk7XFxuK1xcdFxcdGlmIChtYXBfcGlubmVkKSB7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIE9ubHkgbG9uZy10ZXJtIHBpbm5lZCBwYWdlcyBuZWVkIHRvIGJlIG1hcmtlZCBkaXJ0eVxcbitcXHRcXHRcXHQgKiBhbmQgcmVsZWFzZWQuIEZhbGxiYWNrIGVudHJpZXMgZXhpc3Qgb25seSBmb3JcXG4rXFx0XFx0XFx0ICogTUFQL1VOTUFQIHN5bW1ldHJ5LlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aWR4ID0gc3JjdV9yZWFkX2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlc3JjdSk7XFxuK1xcdFxcdFxcdG1hcmtfcGFnZV9kaXJ0eShrdm0sIG1hcF9hZGRyX3RvX21hcmsgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuK1xcdFxcdFxcdHNldF9wYWdlX2RpcnR5X2xvY2sobWFwX3BhZ2VfdG9fcHV0KTtcXG4rXFx0XFx0XFx0c3JjdV9yZWFkX3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzcmN1LCBpZHgpO1xcbitcXHRcXHRcXHR1bnBpbl91c2VyX3BhZ2UobWFwX3BhZ2VfdG9fcHV0KTtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gZm91bmQgPyAwIDogLUVOT0VOVDtcXG5AQCAtMjU5OCwxMSArMjYyMSwxMyBAQCB2b2lkIGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVycyhzdHJ1Y3Qga3ZtICprdm0pXFxuIFxcbiBcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobWFwLCB0bXAsIFxcdTAwMjZsb2NhbF9saXN0LCBsaXN0KSB7XFxuIFxcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZtYXAtXFx1MDAzZWxpc3QpO1xcbi1cXHRcXHRcXHRpZHggPSBzcmN1X3JlYWRfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzcmN1KTtcXG4tXFx0XFx0XFx0bWFya19wYWdlX2RpcnR5KGt2bSwgbWFwLVxcdTAwM2VndWVzdF9hZGRyIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbi1cXHRcXHRcXHRzZXRfcGFnZV9kaXJ0eV9sb2NrKG1hcC1cXHUwMDNlcGFnZSk7XFxuLVxcdFxcdFxcdHNyY3VfcmVhZF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlc3JjdSwgaWR4KTtcXG4tXFx0XFx0XFx0dW5waW5fdXNlcl9wYWdlKG1hcC1cXHUwMDNlcGFnZSk7XFxuK1xcdFxcdFxcdGlmIChtYXAtXFx1MDAzZXBpbm5lZCkge1xcbitcXHRcXHRcXHRcXHRpZHggPSBzcmN1X3JlYWRfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzcmN1KTtcXG4rXFx0XFx0XFx0XFx0bWFya19wYWdlX2RpcnR5KGt2bSwgbWFwLVxcdTAwM2VndWVzdF9hZGRyIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbitcXHRcXHRcXHRcXHRzZXRfcGFnZV9kaXJ0eV9sb2NrKG1hcC1cXHUwMDNlcGFnZSk7XFxuK1xcdFxcdFxcdFxcdHNyY3VfcmVhZF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlc3JjdSwgaWR4KTtcXG4rXFx0XFx0XFx0XFx0dW5waW5fdXNlcl9wYWdlKG1hcC1cXHUwMDNlcGFnZSk7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0XFx0a2ZyZWUobWFwKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuQEAgLTI5MjksOCArMjk1NCwxMiBAQCBzdGF0aWMgc3RydWN0IHMzOTBfbWFwX2luZm8gKmdldF9tYXBfaW5mbyhzdHJ1Y3QgczM5MF9pb19hZGFwdGVyICphZGFwdGVyLFxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnkobWFwLCBcXHUwMDI2YWRhcHRlci1cXHUwMDNlbWFwcywgbGlzdCkge1xcbi1cXHRcXHRpZiAobWFwLVxcdTAwM2VhZGRyID09IGFkZHIpXFxuLVxcdFxcdFxcdHJldHVybiBtYXA7XFxuK1xcdFxcdGlmIChtYXAtXFx1MDAzZWFkZHIgPT0gYWRkcikge1xcbitcXHRcXHRcXHRpZiAobWFwLVxcdTAwM2VwaW5uZWQpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBtYXA7XFxuK1xcdFxcdFxcdGVsc2VcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMDowOTowNy45MDU5MTI2NTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4MzYwOTE1MzgzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljXCIsXG4gICAgXCJrdm1fczM5MF91bm1hcF9hbGxfYWRhcHRlcnNcIixcbiAgICBcImt2bV9zMzkwX2Rlc3Ryb3lfYWRhcHRlcnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgczM5MCBLVk0gaW50ZXJydXB0IGhhbmRsaW5nIGxvZ2ljIHRvIGFsbG93IGZhbGxiYWNrIHRvIHNob3J0LXRlcm0gcGlubmluZyB3aGVuIGxvbmctdGVybSBwaW5uaW5nIGZhaWxzIGZvciBhZGFwdGVyIGluZGljYXRvcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgS1ZNIHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMgaG93IGludGVycnVwdHMgYXJlIGluamVjdGVkIGFuZCBtYXBwZWQsIGFuZCBpdCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjMTYxZmIyNDAzYTY5N2M4MGQ0YmNjNzA3MzliNzgwM2FiODFkMjhiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMjUgMDA6MDk6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvczM5MF9mbGljLnJzdCBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vZGV2aWNlcy9zMzkwX2ZsaWMucnN0XG5pbmRleCBiNzg0ZjgwMTY3NDgzNi4uZWM5YWFhZTA0ZTIyMGEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvczM5MF9mbGljLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3MzOTBfZmxpYy5yc3RcbkBAIC0xMTIsOSArMTEyLDE2IEBAIEdyb3VwczpcbiAgICAgICBtYXNrIG9yIHVubWFzayB0aGUgYWRhcHRlciwgYXMgc3BlY2lmaWVkIGluIG1hc2tcbiBcbiAgICAgS1ZNX1MzOTBfSU9fQURBUFRFUl9NQVBcbi0gICAgICBUaGlzIGlzIG5vdyBhIG5vLW9wLiBUaGUgbWFwcGluZyBpcyBwdXJlbHkgZG9uZSBieSB0aGUgaXJxIHJvdXRlLlxuKyAgICAgIE1hcCBhbiBhZGFwdGVyIGluZGljYXRvciBvciBzdW1tYXJ5IHBhZ2UgZm9yIGxvbmctdGVybSBwaW5uaW5nIHNvIHRoYXRcbisgICAgICBpbnRlcnJ1cHQgaW5qZWN0aW9uIGNhbiBiZSBwZXJmb3JtZWQgaW4gYXRvbWljIGNvbnRleHQuIElmIGxvbmctdGVybVxuKyAgICAgIHBpbm5pbmcgaXMgbm90IHBvc3NpYmxlIChlLmcuIGZpbGUtYmFja2VkIG1lbW9yeSksIHRoZSBwYWdlIGlzIHZlcmlmaWVkXG4rICAgICAgdmlhIGEgc2hvcnQtdGVybSBwaW4gYW5kIHRoZSBpb2N0bCByZXR1cm5zIHN1Y2Nlc3M7IGludGVycnVwdCBpbmplY3Rpb25cbisgICAgICB3aWxsIHVzZSB0aGUgbm9uLWF0b21pYyBpcnFmZCBwYXRoIHdpdGggc2hvcnQtdGVybSBwaW5uaW5nIG9uIGVhY2hcbisgICAgICBpbnRlcnJ1cHQuIEluIFNlY3VyZSBFeGVjdXRpb24gbW9kZSB0aGlzIGlzIGEgbm8tb3AuXG4gICAgIEtWTV9TMzkwX0lPX0FEQVBURVJfVU5NQVBcbi0gICAgICBUaGlzIGlzIG5vdyBhIG5vLW9wLiBUaGUgbWFwcGluZyBpcyBwdXJlbHkgZG9uZSBieSB0aGUgaXJxIHJvdXRlLlxuKyAgICAgIFVubWFwIGEgcHJldmlvdXNseSBtYXBwZWQgYWRhcHRlciBpbmRpY2F0b3Igb3Igc3VtbWFyeSBwYWdlIGFuZCByZWxlYXNlXG4rICAgICAgdGhlIGxvbmctdGVybSBwaW4uIElmIHRoZSBwYWdlIHdhcyBub3QgbG9uZy10ZXJtIHBpbm5lZCAoZS5nLiBmaWxlLWJhY2tlZFxuKyAgICAgIG1lbW9yeSBvciBTZWN1cmUgRXhlY3V0aW9uIG1vZGUpLCB0aGlzIGlzIGEgbm8tb3AgYW5kIHJldHVybnMgc3VjY2Vzcy5cbiBcbiAgIEtWTV9ERVZfRkxJQ19BSVNNXG4gICAgIG1vZGlmeSB0aGUgYWRhcHRlci1pbnRlcnJ1cHRpb24tc3VwcHJlc3Npb24gbW9kZSBmb3IgYSBnaXZlbiBpc2MgaWYgdGhlXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggZWFhMzRjNWJkM2MxMTAuLmMxNzJmOWIyMTJkMThlIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtNDc2LDYgKzQ3NiwxMSBAQCBzdHJ1Y3QgczM5MF9tYXBfaW5mbyB7XG4gXHRfX3U2NCBndWVzdF9hZGRyO1xuIFx0X191NjQgYWRkcjtcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuK1x0LypcbitcdCAqIFRydWUgaWYgdGhlIHBhZ2UgaXMgbG9uZy10ZXJtIHBpbm5lZC4gRmFsc2UgaWYgbG9uZy10ZXJtIHBpbm5pbmdcbitcdCAqIGZhaWxlZCBhbmQgdGhpcyBlbnRyeSBleGlzdHMgb25seSB0byBwcmVzZXJ2ZSBNQVAvVU5NQVAgc3ltbWV0cnkuXG4rXHQgKi9cbitcdGJvb2wgcGlubmVkO1xuIH07XG4gXG4gc3RydWN0IHMzOTBfaW9fYWRhcHRlciB7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcbmluZGV4IDllM2U2YjBkNzJhZDYxLi43NWVhY2QxNTc4ZWZhNiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcbisrKyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcbkBAIC0yNTIwLDggKzI1MjAsMjIgQEAgc3RhdGljIGludCBrdm1fczM5MF9hZGFwdGVyX21hcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZCwgX191NjQgYWRkcilcbiBcdG1hcC1cdTAwM2VhZGRyID0gaG9zdF9hZGRyO1xuIFx0bWFwLVx1MDAzZXBhZ2UgPSBwaW5fbWFwX3BhZ2Uoa3ZtLCBob3N0X2FkZHIsIEZPTExfTE9OR1RFUk0pO1xuIFx0aWYgKCFtYXAtXHUwMDNlcGFnZSkge1xuLVx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRnb3RvIG91dDtcbitcdFx0LypcbitcdFx0ICogTG9uZy10ZXJtIHBpbm5pbmcgbWF5IGZhaWwgZm9yIG1lbW9yeSB0eXBlcyBzdWNoIGFzIGZpbGUtYmFja2VkXG4rXHRcdCAqIG1lbW9yeS4gVmVyaWZ5IHRoYXQgc2hvcnQtdGVybSBwaW5uaW5nIHN1Y2NlZWRzIHNvIHRoYXQgdGhlXG4rXHRcdCAqIG5vbi1hdG9taWMgaXJxZmQgcGF0aCBjYW4gaGFuZGxlIGludGVycnVwdCBpbmplY3Rpb24uXG4rXHRcdCAqL1xuK1x0XHRtYXAtXHUwMDNlcGFnZSA9IHBpbl9tYXBfcGFnZShrdm0sIGhvc3RfYWRkciwgMCk7XG4rXHRcdGlmICghbWFwLVx1MDAzZXBhZ2UpIHtcbitcdFx0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHR9XG4rXHRcdHVucGluX3VzZXJfcGFnZShtYXAtXHUwMDNlcGFnZSk7XG4rXHRcdG1hcC1cdTAwM2VwYWdlID0gTlVMTDtcbitcdFx0bWFwLVx1MDAzZXBpbm5lZCA9IGZhbHNlO1xuK1x0XHQvKiBBZGQgYW4gZW50cnkgdG8gcHJlc2VydmUgTUFQL1VOTUFQIHN5bW1ldHJ5LiAqL1xuK1x0fSBlbHNlIHtcbitcdFx0bWFwLVx1MDAzZXBpbm5lZCA9IHRydWU7XG4gXHR9XG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZhZGFwdGVyLVx1MDAzZW1hcHNfbG9jaywgZmxhZ3MpO1xuIFx0aWYgKGFkYXB0ZXItXHUwMDNlbnJfbWFwcyBcdTAwM2MgTUFYX1MzOTBfQURBUFRFUl9NQVBTKSB7XG5AQCAtMjUzMiw3ICsyNTQ2LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9hZGFwdGVyX21hcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZCwgX191NjQgYWRkcilcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdH1cbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2YWRhcHRlci1cdTAwM2VtYXBzX2xvY2ssIGZsYWdzKTtcbi1cdGlmIChyZXQpXG4rXHRpZiAocmV0IFx1MDAyNlx1MDAyNiBtYXAtXHUwMDNlcGFnZSlcbiBcdFx0dW5waW5fdXNlcl9wYWdlKG1hcC1cdTAwM2VwYWdlKTtcbiBvdXQ6XG4gXHRpZiAocmV0KVxuQEAgLTI1NDYsNiArMjU2MCw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfYWRhcHRlcl91bm1hcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZCwgX191NjQgYWRkcilcbiBcdHN0cnVjdCBzMzkwX21hcF9pbmZvICptYXAsICp0bXAsICptYXBfdG9fZnJlZTtcbiBcdHN0cnVjdCBwYWdlICptYXBfcGFnZV90b19wdXQgPSBOVUxMO1xuIFx0dTY0IG1hcF9hZGRyX3RvX21hcmsgPSAwO1xuK1x0Ym9vbCBtYXBfcGlubmVkID0gZmFsc2U7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50IGZvdW5kID0gMCwgaWR4O1xuIFxuQEAgLTI1NjAsNiArMjU3NSw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfYWRhcHRlcl91bm1hcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZCwgX191NjQgYWRkcilcbiBcdFx0XHRsaXN0X2RlbChcdTAwMjZtYXAtXHUwMDNlbGlzdCk7XG4gXHRcdFx0bWFwX3BhZ2VfdG9fcHV0ID0gbWFwLVx1MDAzZXBhZ2U7XG4gXHRcdFx0bWFwX2FkZHJfdG9fbWFyayA9IG1hcC1cdTAwM2VndWVzdF9hZGRyO1xuK1x0XHRcdG1hcF9waW5uZWQgPSBtYXAtXHUwMDNlcGlubmVkO1xuIFx0XHRcdG1hcF90b19mcmVlID0gbWFwO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5AQCAtMjU2OCwxMSArMjU4NCwxOCBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2FkYXB0ZXJfdW5tYXAoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQsIF9fdTY0IGFkZHIpXG4gXG4gXHRpZiAoZm91bmQpIHtcbiBcdFx0a2ZyZWUobWFwX3RvX2ZyZWUpO1xuLVx0XHRpZHggPSBzcmN1X3JlYWRfbG9jayhcdTAwMjZrdm0tXHUwMDNlc3JjdSk7XG4tXHRcdG1hcmtfcGFnZV9kaXJ0eShrdm0sIG1hcF9hZGRyX3RvX21hcmsgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuLVx0XHRzZXRfcGFnZV9kaXJ0eV9sb2NrKG1hcF9wYWdlX3RvX3B1dCk7XG4tXHRcdHNyY3VfcmVhZF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZXNyY3UsIGlkeCk7XG4tXHRcdHVucGluX3VzZXJfcGFnZShtYXBfcGFnZV90b19wdXQpO1xuK1x0XHRpZiAobWFwX3Bpbm5lZCkge1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogT25seSBsb25nLXRlcm0gcGlubmVkIHBhZ2VzIG5lZWQgdG8gYmUgbWFya2VkIGRpcnR5XG4rXHRcdFx0ICogYW5kIHJlbGVhc2VkLiBGYWxsYmFjayBlbnRyaWVzIGV4aXN0IG9ubHkgZm9yXG4rXHRcdFx0ICogTUFQL1VOTUFQIHN5bW1ldHJ5LlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlkeCA9IHNyY3VfcmVhZF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzcmN1KTtcbitcdFx0XHRtYXJrX3BhZ2VfZGlydHkoa3ZtLCBtYXBfYWRkcl90b19tYXJrIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbitcdFx0XHRzZXRfcGFnZV9kaXJ0eV9sb2NrKG1hcF9wYWdlX3RvX3B1dCk7XG4rXHRcdFx0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc3JjdSwgaWR4KTtcbitcdFx0XHR1bnBpbl91c2VyX3BhZ2UobWFwX3BhZ2VfdG9fcHV0KTtcbitcdFx0fVxuIFx0fVxuIFxuIFx0cmV0dXJuIGZvdW5kID8gMCA6IC1FTk9FTlQ7XG5AQCAtMjU5OCwxMSArMjYyMSwxMyBAQCB2b2lkIGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVycyhzdHJ1Y3Qga3ZtICprdm0pXG4gXG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtYXAsIHRtcCwgXHUwMDI2bG9jYWxfbGlzdCwgbGlzdCkge1xuIFx0XHRcdGxpc3RfZGVsKFx1MDAyNm1hcC1cdTAwM2VsaXN0KTtcbi1cdFx0XHRpZHggPSBzcmN1X3JlYWRfbG9jayhcdTAwMjZrdm0tXHUwMDNlc3JjdSk7XG4tXHRcdFx0bWFya19wYWdlX2RpcnR5KGt2bSwgbWFwLVx1MDAzZWd1ZXN0X2FkZHIgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuLVx0XHRcdHNldF9wYWdlX2RpcnR5X2xvY2sobWFwLVx1MDAzZXBhZ2UpO1xuLVx0XHRcdHNyY3VfcmVhZF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZXNyY3UsIGlkeCk7XG4tXHRcdFx0dW5waW5fdXNlcl9wYWdlKG1hcC1cdTAwM2VwYWdlKTtcbitcdFx0XHRpZiAobWFwLVx1MDAzZXBpbm5lZCkge1xuK1x0XHRcdFx0aWR4ID0gc3JjdV9yZWFkX2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNyY3UpO1xuK1x0XHRcdFx0bWFya19wYWdlX2RpcnR5KGt2bSwgbWFwLVx1MDAzZWd1ZXN0X2FkZHIgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuK1x0XHRcdFx0c2V0X3BhZ2VfZGlydHlfbG9jayhtYXAtXHUwMDNlcGFnZSk7XG4rXHRcdFx0XHRzcmN1X3JlYWRfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzcmN1LCBpZHgpO1xuK1x0XHRcdFx0dW5waW5fdXNlcl9wYWdlKG1hcC1cdTAwM2VwYWdlKTtcbitcdFx0XHR9XG4gXHRcdFx0a2ZyZWUobWFwKTtcbiBcdFx0fVxuIFx0fVxuQEAgLTI5MjksOCArMjk1NCwxMiBAQCBzdGF0aWMgc3RydWN0IHMzOTBfbWFwX2luZm8gKmdldF9tYXBfaW5mbyhzdHJ1Y3QgczM5MF9pb19hZGFwdGVyICphZGFwdGVyLFxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkobWFwLCBcdTAwMjZhZGFwdGVyLVx1MDAzZW1hcHMsIGxpc3QpIHtcbi1cdFx0aWYgKG1hcC1cdTAwM2VhZGRyID09IGFkZHIpXG4tXHRcdFx0cmV0dXJuIG1hcDtcbitcdFx0aWYgKG1hcC1cdTAwM2VhZGRyID09IGFkZHIpIHtcbitcdFx0XHRpZiAobWFwLVx1MDAzZXBpbm5lZClcbitcdFx0XHRcdHJldHVybiBtYXA7XG4rXHRcdFx0ZWxzZVxuK1x0XHRcdFx0cmV0dXJuIE5VTEw7XG4rXHRcdH1cbiBcdH1cbiBcdHJldHVybiBOVUxMO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAwOjA5OjA3LjkwNTkxNDgyMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0ODUzOTMwMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBEZWNpc2lvbiBmb3IgdGhlIHMzOTAgS1ZNIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoICpkb2VzKiBpbnRyb2R1Y2UgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwsIGFuZCB0aGVyZWZvcmUsIGNvdWxkIHBvdGVudGlhbGx5IGJlbmVmaXQgZnJvbSBmdXp6aW5nLiBTcGVjaWZpY2FsbHksIGl0IHRvdWNoZXMgYGFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNgIGFuZCBgYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhgLCB3aGljaCBhcmUga2V5IGFyZWFzIGZvciBLVk0gb24gczM5MC4gSXQncyBtb2RpZnlpbmcgdGhlIHBpbm5pbmcgYmVoYXZpb3Igb2YgYGt2bV9zMzkwX2FkYXB0ZXJfbWFwYCBhbmQgYGt2bV9zMzkwX2FkYXB0ZXJfdW5tYXBgLiBFc3NlbnRpYWxseSwgaXQncyBhZGRpbmcgYSBmYWxsYmFjayBtZWNoYW5pc20gZm9yIHdoZW4gbG9uZy10ZXJtIHBpbm5pbmcgZmFpbHMsIHdoaWNoIGlzIHJlbGV2YW50IGluIHNjZW5hcmlvcyBsaWtlIGZpbGUtYmFja2VkIG1lbW9yeS4gSXQgbm93IHRyaWVzIHNob3J0IHRlcm0gcGlubmluZywgYW5kIHRoZW4gdW5waW5zIGl0LiBUaGlzIGlzIGEgYmVoYXZpb3JhbCBjaGFuZ2UgZGVzaWduZWQgdG8gbWFrZSB0aGUgYEtWTV9TMzkwX0lPX0FEQVBURVJfTUFQYCBpb2N0bCBtb3JlIHJvYnVzdCwgYW5kIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24uXG5cblRoZSBjcml0aWNhbCBxdWVzdGlvbiBub3csIGdpdmVuIHRoZSBzcGVjaWZpYyBjcml0ZXJpYSBJIGhhdmUgdG8gYWRoZXJlIHRvLCBpcyB3aGV0aGVyIHRoaXMgaXMgZnV6emFibGUuIFRoZSBydWxlcyBzcGVjaWZ5IHRoYXQgaWYgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBpdCdzIG5vdCB3b3J0aCBmdXp6aW5nLiBIb3dldmVyLCBzMzkweCBLVk0gKmlzKiByZWFjaGFibGUg4oCTIHdlIGNhbiBmdXp6IGl0IHVzaW5nIFN5emthbGxlci4gRXhjZWxsZW50LCBTeXprYWxsZXIgYWxyZWFkeSBzdXBwb3J0cyBzMzkweCwgd2hpY2ggaXMgYSBiaWcgdGljay4gV2Uga25vdyB0aGF0IHRoZSBjb2RlIHBhdGggaXMgYWNjZXNzaWJsZS5cblxuQ2hlY2tpbmcgdGhlIGNvbmZpZywgaXQncyBlbmFibGVkOiBgS1ZNYCBpcyBjb25maWd1cmVkLCBhbmQgdGhlIGFyY2hpdGVjdHVyZSBpcyBgczM5MGAuIFNvIGZyb20gdGhlIGluaXRpYWwgYXNzZXNzbWVudCwgdGhlIHBhdGNoIGlzIGxpa2VseSB3b3J0aCBmdXp6aW5nLlxuXG5NeSBmb2N1cyBzeW1ib2xzIGFyZTogYGt2bV9zMzkwX2FkYXB0ZXJfbWFwYCwgYGt2bV9zMzkwX2FkYXB0ZXJfdW5tYXBgLCBga3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzYCwgYW5kIGBnZXRfbWFwX2luZm9gLiBUaGUgZmlyc3QgdHdvIGFyZSBzdGF0aWMsIHNvIEkgbmVlZCB0byB0cmFjZSB0aGVpciBjYWxsIHNpdGVzIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgYXJlIHRyaWdnZXJlZCBhbmQgdGh1cyBob3cgdG8gY3JhZnQgaW5wdXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTA2LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTE3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDA6MDk6MTUuMzkxMzEwODZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwMzMzOTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9zMzkwX2FkYXB0ZXJfbWFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yNDc2PXN0YXRpYyBzdHJ1Y3QgcGFnZSAqcGluX21hcF9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgdTY0IHVhZGRyLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNDk0LVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjQ5NTpzdGF0aWMgaW50IGt2bV9zMzkwX2FkYXB0ZXJfbWFwKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkLCBfX3U2NCBhZGRyKVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjQ5Ni17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTI2NDg9c3RhdGljIGludCBtb2RpZnlfaW9fYWRhcHRlcihzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNjc2LVxcdFxcdFxcdGRldi1cXHUwMDNla3ZtLVxcdTAwM2VzdGF0LmlvXzM5MF9hZGFwdGVyX21hcCsrO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjY3NzpcXHRcXHRcXHRyZXQgPSBrdm1fczM5MF9hZGFwdGVyX21hcChkZXYtXFx1MDAzZWt2bSwgcmVxLmlkLCByZXEuYWRkcik7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNjc4LVxcdFxcdH0gZWxzZSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAwOjA5OjE1LjUyMTY0OTg5N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMzU0MjAyOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBJL08gQWRhcHRlciBNYXBwaW5nIEZsb3cqKlxuXG5BbHJpZ2h0LCBzbyBgbW9kaWZ5X2lvX2FkYXB0ZXJgIGlzIHRoZSBlbnRyeSBwb2ludCwgYW5kIHRoYXQgc2VlbXMgdG8gdHJpZ2dlciBga3ZtX3MzOTBfYWRhcHRlcl9tYXBgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgY29tcGxldGUgSS9PIGFkYXB0ZXIgbGlmZWN5Y2xlLCBhbmQgbm93IEknbSB0aGlua2luZyBhYm91dCB0aGUgY291bnRlcnBhcnQ6IEhvdyBkb2VzIHRoZSBzeXN0ZW0gdW5tYXAgdGhlIGFkYXB0ZXI/IEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB3aGF0IGhhcHBlbnMgd2l0aCBib3RoIG1hcHBpbmcgYW5kIHVubWFwcGluZy4gU28sIEkgbmVlZCB0byBjaGVjayBib3RoIGBtb2RpZnlfaW9fYWRhcHRlcmAgYW5kIGBrdm1fczM5MF9hZGFwdGVyX3VubWFwYCB0byBnZXQgYSBnb29kIGhhbmRsZSBvbiB0aGlzIGZsb3csIHBhcnRpY3VsYXJseSBob3cgcmVzb3VyY2VzIGFyZSBhY3F1aXJlZCBhbmQgcmVsZWFzZWQuIEknbSBsb29raW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIHJlc291cmNlIGxlYWtzLiBMZXQncyBzZWUgaG93IHRoZXkgaW50ZXJhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MDUsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMDowOToxOC43NTcwOTA2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDA2NTg5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fczM5MF9hZGFwdGVyX3VubWFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yNDk1PXN0YXRpYyBpbnQga3ZtX3MzOTBfYWRhcHRlcl9tYXAoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQsIF9fdTY0IGFkZHIpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI1NTYtXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyNTU3OnN0YXRpYyBpbnQga3ZtX3MzOTBfYWRhcHRlcl91bm1hcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZCwgX191NjQgYWRkcilcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI1NTgte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yNjQ4PXN0YXRpYyBpbnQgbW9kaWZ5X2lvX2FkYXB0ZXIoc3RydWN0IGt2bV9kZXZpY2UgKmRldixcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjY3OS1cXHRcXHRcXHRkZXYtXFx1MDAzZWt2bS1cXHUwMDNlc3RhdC5pb18zOTBfYWRhcHRlcl91bm1hcCsrO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjY4MDpcXHRcXHRcXHRyZXQgPSBrdm1fczM5MF9hZGFwdGVyX3VubWFwKGRldi1cXHUwMDNla3ZtLCByZXEuaWQsIHJlcS5hZGRyKTtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI2ODEtXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMDowOToxOC45MDExNjc2MzdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDE5NTExOTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgbW9kaWZ5X2lvX2FkYXB0ZXJgIENhbGxlcnMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBgbW9kaWZ5X2lvX2FkYXB0ZXJgIGZ1bmN0aW9uLiBUbyB0cnVseSBncmFzcCBpdHMgaW1wbGljYXRpb25zIGFuZCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLCBJIG5lZWQgdG8ga25vdyAqd2hlcmUqIGl0J3MgYmVpbmcgaW52b2tlZC4gVGhlIGZ1bmN0aW9uJ3MgaW50ZXJuYWwgbG9naWMgaXMsIG9mIGNvdXJzZSwgaW1wb3J0YW50LCBidXQgaXRzIGNvbnRleHQgaXMgZXZlcnl0aGluZy4gV2hhdCdzIHRoZSBjb250cm9sIGZsb3c/IFdoYXQgb3RoZXIgY29tcG9uZW50cyBhcmUgYWZmZWN0ZWQgYXQgdGhlIGNhbGwgc2l0ZXM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyBJIHNob3VsZCBpbW1lZGlhdGVseSBjb25zaWRlciwgZ2l2ZW4gdGhlIG5hdHVyZSBvZiBJL08gYWRhcHRlciBtb2RpZmljYXRpb25zPyBUaGlzIHJlcXVpcmVzIGEgY2xlYXIgY2FsbCBncmFwaCBhbmFseXNpcy4gTGV0J3Mgc3RhcnQgYnkgaWRlbnRpZnlpbmcgZXZlcnkgaW5zdGFuY2Ugb2YgdGhhdCBmdW5jdGlvbiBjYWxsLiBJIG5lZWQgdGhlIHJhdyBkYXRhLCBubyBhYnN0cmFjdCBtb2RlbHMgb3IgdGhlb3JpZXMuIEkgbmVlZCB0byBzZWUgdGhlIGRpcmVjdCBjb2RlIHBhdGhzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTgyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDA6MDk6MjEuOTIwNjgyNTU2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjkwODYyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2RpZnlfaW9fYWRhcHRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MjYzNj12b2lkIGt2bV9zMzkwX2Rlc3Ryb3lfYWRhcHRlcnMoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNjQ3LVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjY0ODpzdGF0aWMgaW50IG1vZGlmeV9pb19hZGFwdGVyKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNjQ5LVxcdFxcdFxcdCAgICAgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MjgzND1zdGF0aWMgaW50IGZsaWNfc2V0X2F0dHIoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjg2OC1cXHRjYXNlIEtWTV9ERVZfRkxJQ19BREFQVEVSX01PRElGWTpcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI4Njk6XFx0XFx0ciA9IG1vZGlmeV9pb19hZGFwdGVyKGRldiwgYXR0cik7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yODcwLVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMDowOToyMi4xMzM2MDAwM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MDIxNTU0NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGZ1bmN0aW9uOlxuXG4qKkFuYWx5emluZyB0aGUgRW50cnkgUG9pbnQ6IGBmbGljX3NldF9hdHRyYCoqXG5cbk9rYXksIHNvIGBmbGljX3NldF9hdHRyYCBpcyB0aGUgc3RhcnRpbmcgcG9pbnQuIFRoYXTigJlzIHdoZXJlIGV2ZXJ5dGhpbmcgYmVnaW5zLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IElzIHRoaXMgdGhpbmcgc3RhdGljPyBVbmRlcnN0YW5kaW5nIGl0cyBzY29wZSBpcyBjcnVjaWFsIHJpZ2h0IG9mZiB0aGUgYmF0LiBLbm93aW5nIGlmIGl0J3Mgc3RhdGljIHdpbGwgaW1tZWRpYXRlbHkgdGVsbCBtZSBzb21ldGhpbmcgYWJvdXQgaXRzIHZpc2liaWxpdHkgYW5kIHRoZSBvdmVyYWxsIGRlc2lnbiBvZiB0aGUgbW9kdWxlIG9yIGxpYnJhcnkgSSdtIHdvcmtpbmcgd2l0aC4gVGhpcyBjb250ZXh0IGlzIGltcG9ydGFudCBiZWNhdXNlIGlmIGl0J3Mgc3RhdGljLCBpdCBsaW1pdHMgaXRzIGFjY2VzcyBhbmQgdXNhZ2UsIHRoZXJlYnksIGFmZmVjdGluZyBob3cgdGhlIGZ1bmN0aW9uIGlzIGludGVyYWN0ZWQgd2l0aCwgYW5kIHRoZSB3YXlzIHRoYXQgaXQgY2FuIGludGVyYWN0IHdpdGggb3RoZXIgbW9kdWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ5NywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAwOjA5OjI0LjkzNTc1ODIzNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyMTEwODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZsaWNfc2V0X2F0dHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTI4MTQ9c3RhdGljIGludCBmbGljX2Fpc19tb2RlX3NldF9hbGwoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yODMzLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjgzNDpzdGF0aWMgaW50IGZsaWNfc2V0X2F0dHIoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI4MzUte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yOTI3PXN0cnVjdCBrdm1fZGV2aWNlX29wcyBrdm1fZmxpY19vcHMgPSB7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI5MjktXFx0LmdldF9hdHRyID0gZmxpY19nZXRfYXR0cixcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI5MzA6XFx0LnNldF9hdHRyID0gZmxpY19zZXRfYXR0cixcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI5MzEtXFx0Lmhhc19hdHRyID0gZmxpY19oYXNfYXR0cixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDA6MDk6MjUuMDU3ODc2MzMyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDE0NTQyMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkNvbnNpZGVyaW5nIFN0YXRpYyBGdW5jdGlvbnMgV2l0aGluIE9wZXJhdGlvbiBTdHJ1Y3R1cmVzKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYGZsaWNfc2V0X2F0dHJgIGFuZCBub3RpY2luZyBpdCdzIGRlY2xhcmVkIGBzdGF0aWNgLiBUaGF0J3MgYSBsaXR0bGUgaW50ZXJlc3RpbmcsIGJlY2F1c2UgaXQgbGl2ZXMgd2l0aGluIHRoZSBga3ZtX2ZsaWNfb3BzYCBzdHJ1Y3R1cmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldlbGwsIHRoYXQncyBub3QgbmVjZXNzYXJpbHkgdW51c3VhbCwgYnV0IEkgc2hvdWxkIHBhdXNlIGFuZCBjb25zaWRlciB3aHkuXCIgSXMgdGhpcyBpbnRlbmRlZCB0byBiZSBhIHByaXZhdGUgaW1wbGVtZW50YXRpb24gZGV0YWlsLCBvciBpcyB0aGlzIGRlc2lnbiBjb25zdHJhaW5pbmcgaW4gYW55IHdheT8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0aGlzIGFmZmVjdHMgdGhlIHBvdGVudGlhbCBmb3IgZnV0dXJlIGV4dGVuc2lvbiBvciB1c2Ugb3V0c2lkZSB0aGUgaW1tZWRpYXRlIGNvbnRleHQuXG5cblRoZW4gbXkgbWluZCBzaGlmdHMgdG8gYGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVyc2AuIFRoaXMgb25lICppc24ndCogYHN0YXRpY2AuIFNvLCBub3cgSSBuZWVkIHRvIHJlY29uY2lsZSB0aGVzZSB0d28uIFdoeSB0aGUgZGlmZmVyZW5jZT8gV2hhdCB3YXMgdGhlIGRlc2lnbiByYXRpb25hbGUgZm9yIHRoZSBjaG9pY2VzIGhlcmU/IEFyZSB0aGV5IHJlbGF0ZWQgY29uY2VwdHVhbGx5PyBJcyBvbmUgKm1lYW50KiB0byBiZSBwdWJsaWMgd2hlcmVhcyB0aGUgb3RoZXIgaXMgZGVsaWJlcmF0ZWx5IGhpZGRlbj8gQXJlIHRoZXJlIGFueSBwZXJmb3JtYW5jZSBvciBtZW1vcnkgaW1wbGljYXRpb25zIGFyaXNpbmcgZnJvbSB0aGVzZSBkZWNsYXJhdGlvbnM/IFRoZSBpbXBsaWNhdGlvbnMgb2Ygc3RhdGljIHZzLiBub24tc3RhdGljIGlzIHN1YnRsZSwgYnV0IGltcG9ydGFudC4gSSBzaG91bGQgaW52ZXN0aWdhdGUgYm90aCBkZWNsYXJhdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgZGVzaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTkzLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDA6MDk6MjguNDk5MzMzMzg5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzEyNDQwMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MjU1Nz1zdGF0aWMgaW50IGt2bV9zMzkwX2FkYXB0ZXJfdW5tYXAoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQsIF9fdTY0IGFkZHIpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI2MDMtXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyNjA0OnZvaWQga3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzKHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI2MDUte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yNjM2PXZvaWQga3ZtX3MzOTBfZGVzdHJveV9hZGFwdGVycyhzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI2MzktXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyNjQwOlxcdGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVycyhrdm0pO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjY0MS1cXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yNTc5PXN0YXRpYyBpbnQga3ZtX3MzOTBfaGFuZGxlX3B2KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9wdl9jbWQgKmNtZClcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yNTk0LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyNTk1OlxcdFxcdGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVycyhrdm0pO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yNTk2LVxcdFxcdG1tYXBfd3JpdGVfbG9jayhrdm0tXFx1MDAzZW1tKTtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaD01NjM9dm9pZCBrdm1fczM5MF9naWJfZGVzdHJveSh2b2lkKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg6NTY0OnZvaWQga3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzKHN0cnVjdCBrdm0gKmt2bSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oLTU2NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDA6MDk6MjguNjcwNTgzMzU1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNjc0MzgwNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkFuYWx5emluZyBLVk0vczM5MCBBZGFwdGVyIFVubWFwcGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBhZGFwdGVycyBhcmUgdW5tYXBwZWQgd2l0aGluIHRoZSBLVk0vczM5MCBjb250ZXh0LiBJdCBzZWVtcyBga3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzYCBnZXRzIHRyaWdnZXJlZCBpbiB0d28gc3BlY2lmaWMgcGxhY2VzOiBga3ZtX3MzOTBfZGVzdHJveV9hZGFwdGVyc2AgYW5kIGBrdm1fczM5MF9oYW5kbGVfcHZgLiBSaWdodCBvZmYgdGhlIGJhdCwgYGt2bV9zMzkwX2hhbmRsZV9wdmAgc2VlbXMgbGlrZSBhIHByZXR0eSBpbXBvcnRhbnQgc3ltYm9sIHRvIGtleSBpbiBvbiDigJMgaXQncyBsaWtlbHkgYSBjZW50cmFsIHBvaW50IG9mIGludGVyYWN0aW9uLiBOb3csIHRoZSB1bm1hcHBpbmcgaXRzZWxmIGlzIHRoZSBnb2FsLCBzbyBJIHNob3VsZCBzZWUgaG93IHRoaXMgaXMgZG9uZS4gSSdsbCBuZWVkIHRvIGtub3cgbW9yZSwgc28gbGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBnZXRfbWFwX2luZm9gLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODk5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDA6MDk6MzEuODM4MDI0NTlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDQ1MDUyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfbWFwX2luZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTI5MzY9c3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2luZF9iaXQoX191NjQgYWRkciwgdW5zaWduZWQgbG9uZyBiaXRfbnIsIGJvb2wgc3dhcClcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjk0Ny1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI5NDg6c3RhdGljIHN0cnVjdCBzMzkwX21hcF9pbmZvICpnZXRfbWFwX2luZm8oc3RydWN0IHMzOTBfaW9fYWRhcHRlciAqYWRhcHRlcixcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI5NDktXFx0XFx0XFx0XFx0XFx0ICB1NjQgYWRkcilcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9Mjk2Nz1zdGF0aWMgaW50IGFkYXB0ZXJfaW5kaWNhdG9yc19zZXQoc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yOTgwLVxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VtYXBzX2xvY2ssIGZsYWdzKTtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI5ODE6XFx0aW5kX2luZm8gPSBnZXRfbWFwX2luZm8oYWRhcHRlciwgYWRhcHRlcl9pbnQtXFx1MDAzZWluZF9hZGRyKTtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI5ODItXFx0aWYgKCFpbmRfaW5mbykge1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMDAzLVxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VtYXBzX2xvY2ssIGZsYWdzKTtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjMwMDQ6XFx0c3VtbWFyeV9pbmZvID0gZ2V0X21hcF9pbmZvKGFkYXB0ZXIsIGFkYXB0ZXJfaW50LVxcdTAwM2VzdW1tYXJ5X2FkZHIpO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzAwNS1cXHRpZiAoIXN1bW1hcnlfaW5mbykge1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0zMDMwPXN0YXRpYyBpbnQgYWRhcHRlcl9pbmRpY2F0b3JzX3NldF9mYXN0KHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzA0MC1cXHRzcGluX2xvY2soXFx1MDAyNmFkYXB0ZXItXFx1MDAzZW1hcHNfbG9jayk7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozMDQxOlxcdGluZF9pbmZvID0gZ2V0X21hcF9pbmZvKGFkYXB0ZXIsIGFkYXB0ZXJfaW50LVxcdTAwM2VpbmRfYWRkcik7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMDQyLVxcdGlmICghaW5kX2luZm8pIHtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzA0OS1cXHRcXHRzZXRfYml0KGJpdCwgbWFwKTtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjMwNTA6XFx0c3VtbWFyeV9pbmZvID0gZ2V0X21hcF9pbmZvKGFkYXB0ZXIsIGFkYXB0ZXJfaW50LVxcdTAwM2VzdW1tYXJ5X2FkZHIpO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzA1MS1cXHRpZiAoIXN1bW1hcnlfaW5mbykge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMDowOTozMS45NjI0ODIxMDdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc1MzU4OTQ4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBTdGF0aWMgSW5kaWNhdG9yIFNldHMqKlxuXG5BbHJpZ2h0LCBzbyBgYWRhcHRlcl9pbmRpY2F0b3JzX3NldGAgYW5kIGBhZGFwdGVyX2luZGljYXRvcnNfc2V0X2Zhc3RgIGFyZSBkZWNsYXJlZCBhcyBzdGF0aWMuIEhtbSwgdGhhdCBpbW1lZGlhdGVseSByYWlzZXMgYSBmbGFnIGZvciBtZS4gU3RhdGljIHZhcmlhYmxlcyBtZWFuIHRoZXkgaGF2ZSBmaWxlIHNjb3BlLCBhbmQgdXN1YWxseSByZXByZXNlbnQgc29tZSBraW5kIG9mIHNoYXJlZCBzdGF0ZSBvciBsb29rdXAgdGFibGUgd2l0aGluIHRoZSBjb21waWxlZCBtb2R1bGUuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgYXJlIGJlaW5nIHVzZWQuIFdoZXJlIGFyZSB0aGVzZSB0aGluZ3MgKmFjdHVhbGx5KiBjYWxsZWQ/IEkgbmVlZCB0byB0cmFjZSB0aG9zZSBjYWxscyB0byB1bmRlcnN0YW5kIHRoZWlyIGZ1bmN0aW9uIGFuZCB3aGF0IGNvbnRleHQgdGhleSBhcmUgdXNlZCB3aXRoaW4uIExldCdzIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBmaW5kIGFsbCB0aGUgcmVmZXJlbmNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg1MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAwOjA5OjM0LjcxNjA3NzE4M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4ODY5MTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFkYXB0ZXJfaW5kaWNhdG9yc19zZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTI5NDg9c3RhdGljIHN0cnVjdCBzMzkwX21hcF9pbmZvICpnZXRfbWFwX2luZm8oc3RydWN0IHMzOTBfaW9fYWRhcHRlciAqYWRhcHRlcixcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjk2Ni1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI5Njc6c3RhdGljIGludCBhZGFwdGVyX2luZGljYXRvcnNfc2V0KHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI5NjgtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgczM5MF9pb19hZGFwdGVyICphZGFwdGVyLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMDI5LVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzAzMDpzdGF0aWMgaW50IGFkYXB0ZXJfaW5kaWNhdG9yc19zZXRfZmFzdChzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMDMxLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgczM5MF9pb19hZGFwdGVyICphZGFwdGVyLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0zMDczPXN0YXRpYyBpbnQgc2V0X2FkYXB0ZXJfaW50KHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMDg3LVxcdFxcdHJldHVybiAtMTtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjMwODg6XFx0cmV0ID0gYWRhcHRlcl9pbmRpY2F0b3JzX3NldChrdm0sIGFkYXB0ZXIsIFxcdTAwMjZlLVxcdTAwM2VhZGFwdGVyKTtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTMwODktXFx0aWYgKChyZXQgXFx1MDAzZSAwKSBcXHUwMDI2XFx1MDAyNiAhYWRhcHRlci1cXHUwMDNlbWFza2VkKSB7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTM3NDM9aW50IGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWMoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM3NjktXFx0c2V0Yml0ID0gMTtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjM3NzA6XFx0cmV0ID0gYWRhcHRlcl9pbmRpY2F0b3JzX3NldF9mYXN0KGt2bSwgYWRhcHRlciwgXFx1MDAyNmUtXFx1MDAzZWFkYXB0ZXIsIHNldGJpdCk7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNzcxLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNzgwLVxcdFxcdHNldGJpdCA9IDA7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozNzgxOlxcdFxcdGFkYXB0ZXJfaW5kaWNhdG9yc19zZXRfZmFzdChrdm0sIGFkYXB0ZXIsIFxcdTAwMjZlLVxcdTAwM2VhZGFwdGVyLCBzZXRiaXQpO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzc4Mi1cXHRcXHRyZXR1cm4gLUVXT1VMREJMT0NLO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNzkwLVxcdFxcdFxcdHNldGJpdCA9IDA7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozNzkxOlxcdFxcdFxcdGFkYXB0ZXJfaW5kaWNhdG9yc19zZXRfZmFzdChrdm0sIGFkYXB0ZXIsIFxcdTAwMjZlLVxcdTAwM2VhZGFwdGVyLCBzZXRiaXQpO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzc5Mi1cXHRcXHRcXHRrZnJlZShpbnRpKTtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzgxMy1cXHRcXHRzZXRiaXQgPSAwO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzgxNDpcXHRcXHRhZGFwdGVyX2luZGljYXRvcnNfc2V0X2Zhc3Qoa3ZtLCBhZGFwdGVyLCBcXHUwMDI2ZS1cXHUwMDNlYWRhcHRlciwgc2V0Yml0KTtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM4MTUtXFx0XFx0a2ZyZWUoaW50aSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAwOjA5OjM0Ljg4NDk1MTU4OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzkwOTczNjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipJbnZlc3RpZ2F0aW5nIEtWTSBvbiBzMzkwIEFQSSBDYWxscyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9uczogYHNldF9hZGFwdGVyX2ludGAsIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYCwgYW5kIGBrdm1fczM5MF9oYW5kbGVfcHZgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGVpciByZWxhdGlvbnNoaXAsIGVzcGVjaWFsbHkgZnJvbSBhbiBBUEkgcGVyc3BlY3RpdmUuIEl0IHNlZW1zIGBzZXRfYWRhcHRlcl9pbnRgIGlzIGNhbGxpbmcgYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgLiBUaGUgaW50ZXJlc3RpbmcgcG9pbnQgaXMgdGhhdCBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2AgaXMgYSBwdWJsaWNseSBhY2Nlc3NpYmxlLCBub24tc3RhdGljIEFQSSBlbnRyeSBwb2ludCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMgYW5kIGlmIGl0IGlzIGJlaW5nIGNhbGxlZCBmcm9tIG90aGVyIG1vZHVsZXMgb3Igb25seSBmcm9tIGBzZXRfYWRhcHRlcl9pbnRgLiBGdXJ0aGVyLCBpdCBsb29rcyBsaWtlIGBrdm1fczM5MF9oYW5kbGVfcHZgIGlzIGFub3RoZXIgcHVibGljbHkgYWNjZXNzaWJsZSBBUEkgZW50cnkgcG9pbnQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGZvciBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRob3NlIHR3byBBUEkgZW50cnkgcG9pbnRzIGFuZCB0aGVpciBpbnRlcmFjdGlvbnMuIEJlZm9yZSBJIGdvIHRvbyBkZWVwIGludG8gdGhlIGNvZGUgdGhvdWdoLCBsZXQncyBtYWtlIHN1cmUgS1ZNIGlzIGV2ZW4gZW5hYmxlZCBmb3IgczM5MC4gSSB3aWxsIGRvdWJsZSBjaGVjayB0aGUgS2NvbmZpZyBzZXR0aW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg5NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAwOjA5OjM4LjI3NTkyODI3OFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzNTUzNTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vS2NvbmZpZz0xNz1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0xOC1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6MTk6Y29uZmlnIEtWTVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0yMC1cXHRkZWZfdHJpc3RhdGUgeVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ2LVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiVXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDA6MDk6MzguNDA5NDkxMTQ0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNTE2NTc2NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgbGlrZSB5b3Vyc2VsZjpcblxuKipDb25maWd1cmF0aW9uIERlcGVuZGVuY3kgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24sIGFuZCB0aGUga2V5IHRoaW5nIEknbSBwaWNraW5nIHVwIG9uIGlzIHRoYXQgaXQncyBzZXQgdG8gYEtWTWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIlJpZ2h0LCBLVk0uXCIgQnV0IHRoZW4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuIGBLVk1gIGlzbid0IGp1c3QgYSBzdGFuZGFsb25lIHRoaW5nOyBpdCAqZGVwZW5kcyogb24gc29tZXRoaW5nIGVsc2UuIEFuZCB0aGF0IHNvbWV0aGluZyBlbHNlLCBpbiB0aGlzIGNhc2UsIGlzIGNsZWFybHkgYFZJUlRVQUxJWkFUSU9OYC4gSXQncyBhIGZ1bmRhbWVudGFsIHByZXJlcXVpc2l0ZS4gSSdtIHBhcnNpbmcgdGhpcyBhcyBhIGxheWVyZWQgZGVwZW5kZW5jeTogdG8gZ2V0IEtWTSB3b3JraW5nLCBWSVJUVUFMSVpBVElPTiBoYXMgdG8gYmUgcHJlc2VudCwgZW5hYmxlZCwgYW5kIGZ1bmN0aW9uaW5nLiBPdGhlcndpc2UsIGl0IGlzIGdvaW5nIHRvIGNyYXNoIGFuZCBidXJuISBJIGNhbiBhbHJlYWR5IHNlZSBzb21lIHBvdGVudGlhbCB0cm91Ymxlc2hvb3RpbmcgcGF0aHMgb3BlbmluZyB1cCBpbiBteSBtaW5kLCBhbmQgdGhpbmtpbmcgdGhyb3VnaCB0aGVtLCBiYXNlZCBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IFZJUlRVQUxJWkFUSU9OIGlzIHByZXNlbnQuIElmIGl0ICppc24ndCosIHRoYXQncyB0aGUgZmlyc3QgcGxhY2UgdG8gbG9vay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0MzksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMDowOTo0MS40NjExNTE3MzJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDU0NjM2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVklSVFVBTElaQVRJT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vS2NvbmZpZz01PXNvdXJjZSBcXFwidmlydC9rdm0vS2NvbmZpZ1xcXCJcXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNi1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NzptZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTgtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMDowOTo0MS42OTU3MDUyNzZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgwODU0Njk1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNIENvbmZpZ3VyYXRpb24gYW5kIFBvdGVudGlhbCBGb2N1cyBTeW1ib2xzKipcblxuT2theSwgc28gd2UncmUgZGVhbGluZyB3aXRoIGEgS1ZNIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSByZWxhdGluZyB0byBzMzkwIGFyY2hpdGVjdHVyZSwgSSBiZWxpZXZlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBmb3IgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGNvbnRleHQuIFdlIHdhbnQgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCB3ZSBjYW4gcG90ZW50aWFsbHkgdXNlIGZvciBvdXIgYW5hbHlzaXMuXG5cbkFscmlnaHQsIGEgcXVpY2sgc2NhbiByZXZlYWxzIHRoYXQgYGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVyc2AgaXMgY2FsbGVkIGZyb20gYGt2bV9zMzkwX2Rlc3Ryb3lfYWRhcHRlcnNgIGFuZCBhbHNvIGBrdm1fczM5MF9oYW5kbGVfcHZgLiBga3ZtX3MzOTBfZGVzdHJveV9hZGFwdGVyc2AsIGluIHR1cm4sIGlzIGNhbGxlZCBmcm9tIGBrdm1fYXJjaF9kZXN0cm95X3ZtYC4gVGhlbiB0aGVyZSdzIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYCwgd2hpY2ggaXMgcGFydCBvZiBnZW5lcmljIEtWTSBjb2RlLlxuXG5CYXNlZCBvbiB0aGlzIGNhbGwgZ3JhcGgsIHRoZSBsaWtlbHkgZm9jdXMgc3ltYm9scywgdGhlIGZ1bmN0aW9ucyB0aGF0IHNlZW0gbW9zdCBpbnRlcmVzdGluZywgYXJlOiBga3ZtX3MzOTBfaGFuZGxlX3B2YCwgYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgLCBhbmQgYGt2bV9zMzkwX2Rlc3Ryb3lfYWRhcHRlcnNgLlxuXG5Ib3dldmVyLCB3YWl0IGEgc2Vjb25kLiBga3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzYCBpcywgaW4gZmFjdCwgbm9uLXN0YXRpYy4gVGhpcyBzaW1wbGlmaWVzIHRoaW5ncy4gVGhhdCBvcGVucyB0aGUgZG9vciB0byB1c2luZyB0aGlzIGZ1bmN0aW9uIGRpcmVjdGx5IGluIG91ciBhbmFseXNpcyB3aXRob3V0IGRpZ2dpbmcgZGVlcGVyIGludG8gaXRzIGNhbGxlcnMuIFdlIGNhbiBqdXN0IGZvY3VzIG9uIGBrdm1fczM5MF91bm1hcF9hbGxfYWRhcHRlcnNgIGFuZCBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2AuXG5cbk5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNvbmZpcm0gd2hldGhlciBga3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzYCBpcyBleHBvcnRlZC4gVGhhdCdsbCBiZSB0aGUga2V5IHRvIGl0IGFsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3OTcsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDA6MDk6NDYuNTA0MjU0ODE3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDMyNjM5ODcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVyc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDA6MDk6NDYuNjQ3NTI3OTk0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0NzA2NjE0MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgVGhvdWdodCBQcm9jZXNzIG9uIElkZW50aWZ5aW5nIEtleSBTeW1ib2xzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBzeW1ib2wgdG8gcmVwcmVzZW50IHRoZSBmdW5jdGlvbmFsaXR5LiBUaGUgZ29hbCwgYXMgSSB1bmRlcnN0YW5kIGl0LCBpcyB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5IHBvaW50cy4gUmlnaHQsIHJpZ2h0LiBMZXQncyBzZWUuLi4gdGhlIGNvZGUgY2hhbmdlcyB0b3VjaCBga3ZtX3MzOTBfYWRhcHRlcl9tYXBgIGFuZCBga3ZtX3MzOTBfYWRhcHRlcl91bm1hcGAuIFRob3NlIGFyZSBjYWxsZWQgYnkgYG1vZGlmeV9pb19hZGFwdGVyYCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgZnJvbSBgZmxpY19zZXRfYXR0cmAuIGBmbGljX3NldF9hdHRyYCBpcyBwYXJ0IG9mIGBrdm1fZmxpY19vcHNgLiBBbmQgbG9va2luZyBhdCB0aGUgYnJvYWRlciBjb250ZXh0LCBgZmxpY19zZXRfYXR0cmAgaGFuZGxlcyB0aGUgYEtWTV9TMzkwX0lPX0FEQVBURVJfTUFQYCBhbmQgYEtWTV9TMzkwX0lPX0FEQVBURVJfVU5NQVBgIGlvY3Rscy5cblxuU28sICppbml0aWFsbHkqLCBteSB0aGlua2luZyBpcyB0aGF0IGBmbGljX3NldF9hdHRyYCBzZWVtcyBsaWtlIGEgZ29vZCBjYW5kaWRhdGUsIGV2ZW4gdGhvdWdoIGl0J3Mgc3RhdGljLCBiZWNhdXNlIGl0J3MgZXNzZW50aWFsbHkgYW4gZW50cnkgcG9pbnQgdGhyb3VnaCB0aG9zZSBvcHMuIEJ1dCB3YWl0LCB0aGUgcHJvbXB0IHNwZWNpZmljYWxseSBzYXlzIFwiUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXCIuIElzIHRoZXJlIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiB0aGF0ICpjYWxscyogYGZsaWNfc2V0X2F0dHJgPyBOb3BlLCBpdCdzIGludm9rZWQgdGhyb3VnaCBhIGZ1bmN0aW9uIHBvaW50ZXIuIFNvIHRoYXQncyBvdXQuIEkgY2FuJ3QgaW5jbHVkZSBvcHMgZWl0aGVyLlxuXG5BbHJpZ2h0LCB3aGF0IGVsc2UgaXMgcmVsZXZhbnQ/IFdlIGNvdWxkIGluY2x1ZGUgYGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVyc2AgYW5kIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYC5cblxuQnV0LCBvaCwgcmlnaHQhIGBmbGljX3NldF9hdHRyYCAqaXMqIHN0YXRpYy4gSG1tLCB0aGVyZSdzIGBrdm1fczM5MF9oYW5kbGVfcHZgLiBUaGF0IGNhbGxzIGBrdm1fczM5MF91bm1hcF9hbGxfYWRhcHRlcnNgLlxuXG5TbywgaXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBzdWl0YWJsZSBub24tc3RhdGljIGFuZCBub3QgaW4tbGluZWQgZnVuY3Rpb24gdG8gYmUgaW5jbHVkZWQgd291bGQgYmUgYGt2bV9zMzkwX2hhbmRsZV9wdmAuIEFuZCBJIHNob3VsZCBhbHNvIGtlZXAgYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgIGluIG1pbmQuXG5cblRpbWUgdG8gY2hlY2sgYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQ5NSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMDowOTo1My4xMTgxOTQxM1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzNDg0NDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0zNjg1PWludCBfX2luaXQga3ZtX3MzOTBfZ2liX2luaXQodTggbmlzYylcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzc0MC0vKlxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6Mzc0MTogKiBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljOiBmYXN0LXBhdGggZm9yIGlycWZkIGluamVjdGlvblxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzc0Mi0gKi9cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjM3NDM6aW50IGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWMoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNzQ0LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycV9zb3VyY2VfaWQsIGludCBsZXZlbCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDA6MDk6NTMuMjUxNjg4MDM3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MTk5Nzk2NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIEtWTS9zMzkwIEludGVycnVwdCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYC4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgaXQncyAqbm90KiBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCdzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nIGJlY2F1c2UgaXQgc3VnZ2VzdHMgaXQncyBsaWtlbHkgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGUgc3BlY2lmaWMgZmlsZSBpdCdzIGRlZmluZWQgaW4uIFRoaXMgcHJvYmFibHkgbWVhbnMgaXQncyBhIHB1YmxpY2x5IGFjY2Vzc2libGUgZnVuY3Rpb24sIGF0IGxlYXN0IHdpdGhpbiB0aGUgS1ZNL3MzOTAgYXJjaGl0ZWN0dXJlLiBXZSBuZWVkIHRvIGtlZXAgdGhpcyBpbiBtaW5kIGFzIHdlIHRyYWNlIGhvdyBpbnRlcnJ1cHQgaW5qZWN0aW9uIGlzIGhhbmRsZWQuIFRoaXMgbm9uLXN0YXRpYyBuYXR1cmUgYnJvYWRlbnMgdGhlIHNjb3BlIG9mIHdoZXJlIHBvdGVudGlhbCBpc3N1ZXMgY291bGQgYmUgaW50cm9kdWNlZCwgb3Igd2hlcmUgd2UgY291bGQgb3B0aW1pemUuXG5cbk5vdywgbGV0J3MgcGl2b3QgYW5kIHRha2UgYSBsb29rIGF0IGBrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzYC4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgdGhlIGRlc3RydWN0aW9uIG9mIGFkYXB0ZXJzIHdpbGwgaGF2ZSBzb21lIGludGVycGxheSB3aXRoIGhvdyBpbnRlcnJ1cHRzIGFyZSBtYW5hZ2VkLiBQZXJoYXBzIHRoZSBjbGVhbnVwIHJvdXRpbmVzIGZvciB0aGUgYWRhcHRlcnMgcmVsZWFzZSBvciByZS1jb25maWd1cmUgSVJRcy4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBhZGFwdGVycyBpbnRlcmFjdCB3aXRoIHRoZSBoYXJkd2FyZSBhbmQgdGhlIHZpcnR1YWwgbWFjaGluZSdzIGludGVycnVwdCBjb250cm9sbGVyIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGZsb3cgb2YgaW50ZXJydXB0IGV2ZW50cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGFkYXB0ZXJzIG1pZ2h0IGJlIGEgc291cmNlIG9mIGludGVycnVwdCBtYXNraW5nLCBkZS1hc3NlcnRpb24sIG9yIHJlZGlyZWN0aW9uLiBUaGVyZSBjb3VsZCBiZSBjcml0aWNhbCBsb2dpYyBpbiB0aGVyZSBmb3IgZW5zdXJpbmcgaW50ZXJydXB0cyBhcmUgcHJvcGVybHkgaGFuZGxlZCBkdXJpbmcgc2h1dGRvd24uIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCBjb25uZWN0aW9uIGV4aXN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2NDIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMDowOTo1Ni42NzE2NzIzMTVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDgxMTM0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MjYwND12b2lkIGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVycyhzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI2MzUtXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyNjM2OnZvaWQga3ZtX3MzOTBfZGVzdHJveV9hZGFwdGVycyhzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNjM3LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zNDI4PXZvaWQga3ZtX2FyY2hfZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzQ1MS1cXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpa3ZtLVxcdTAwM2VhcmNoLnNpZV9wYWdlMik7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM0NTI6XFx0a3ZtX3MzOTBfZGVzdHJveV9hZGFwdGVycyhrdm0pO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNDUzLVxcdGt2bV9zMzkwX2NsZWFyX2Zsb2F0X2lycXMoa3ZtKTtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaD01NDY9aW50IHBzd19leHRpbnRfZGlzYWJsZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg6NTQ3OnZvaWQga3ZtX3MzOTBfZGVzdHJveV9hZGFwdGVycyhzdHJ1Y3Qga3ZtICprdm0pO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaC01NDgtaW50IGt2bV9zMzkwX2V4dF9jYWxsX3BlbmRpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDA6MDk6NTYuNzkyNDg5NzMyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMTc2OTAwMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0vczM5MCBBZGFwdGVyIE1vZGlmaWNhdGlvbiBDb2RlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGt2bV9zMzkwX2Rlc3Ryb3lfYWRhcHRlcnNgLiBJdCdzIG5vbi1zdGF0aWMsIHdoaWNoIGlzIGdvb2QuIFRoYXQncyBhIHBvaW50IGluIGl0cyBmYXZvciwgYnV0IGxldCdzIHNlZSBob3cgaXQgZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4gTXkgdGhpbmtpbmcgaXMsIGhvdyBpcyB0aGlzIGFjdHVhbGx5IHRyaWdnZXJlZD9cblxuTm93IEknbSBsb29raW5nIGF0IGBmbGljX3NldF9hdHRyYC4gSXQgaGFuZGxlcyBgS1ZNX0RFVl9GTElDX0FEQVBURVJfTU9ESUZZYCwgd2hpY2ggaXMgaW1wb3J0YW50IGJlY2F1c2UgKnRoYXQncyogdGhlIGlvY3RsIHRoYXQga2lja3Mgb2ZmIGBrdm1fczM5MF9hZGFwdGVyX21hcGAgYW5kIGBrdm1fczM5MF9hZGFwdGVyX3VubWFwYC4gRXZlbiB0aG91Z2ggYGZsaWNfc2V0X2F0dHJgICppcyogc3RhdGljLCBpdCBzZWVtcyB0byBiZSB0aGUgbWFpbiBwb2ludCBvZiBlbnRyeSBmb3IgdGhlIGFkYXB0ZXIgbW9kaWZpY2F0aW9uIGxvZ2ljLiBJdOKAmXMgZGVmaW5pdGVseSB3aGVyZSB0aGUgYWN0aW9uIHN0YXJ0cyBpbiB0ZXJtcyBvZiBtb2RpZnlpbmcgdGhlIGFkYXB0ZXJzLiBTbywgYmFzZWQgb24gdGhlIGZhY3QgdGhhdCB0aGUgY2hhbmdlcyBzdGFydCBoZXJlLCBJJ20gZ29pbmcgdG8gaW5jbHVkZSBpdC5cblxuV2FpdCBhIHNlY29uZOKApiBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nLiBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBwcmVmZXJzICpub24tc3RhdGljLCBub24taW5saW5lZCogZW50cnkgcG9pbnRzLiBBbmQgdGhlbiBpdCBnb2VzIG9uIHRvIGhpZ2hsaWdodCB0aGF0ICpzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyogd2hpY2ggYXJlIHVzdWFsbHkgaW5saW5lZCwgbGFjayBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBCdXQgYGZsaWNfc2V0X2F0dHJgIGlzIGEgKmZ1bmN0aW9uIHBvaW50ZXIqIGluc2lkZSBvZiBhIHN0cnVjdCEgVGhlcmVmb3JlLCBpdCBzaG91bGQgKm5vdCogYmUgaW5saW5lZC4gSXQgaGFzIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIE9rYXksIHRoYXQgY2hhbmdlcyB0aGluZ3MuXG5cbk9rYXksIG5leHQgSSdsbCBtb3ZlIG9uIHRvIGNoZWNrIGBrdm1fczM5MF9oYW5kbGVfcHZgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ3MywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMDoxMDowMS45MTAxODI4NDVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4ODc3MjE3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fczM5MF9oYW5kbGVfcHZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTI0NDY9c3RhdGljIGludCBrdm1fczM5MF9jcHVzX3RvX3B2KHN0cnVjdCBrdm0gKmt2bSwgdTE2ICpyYywgdTE2ICpycmMpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjQ3Ny0gKi9cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MjQ3ODpzdGF0aWMgc3NpemVfdCBrdm1fczM5MF9oYW5kbGVfcHZfaW5mbyhzdHJ1Y3Qga3ZtX3MzOTBfcHZfaW5mbyAqaW5mbylcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjQ3OS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjUxNz1zdGF0aWMgaW50IGt2bV9zMzkwX3B2X2RtcChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fcHZfY21kICpjbWQsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjU3OC1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MjU3OTpzdGF0aWMgaW50IGt2bV9zMzkwX2hhbmRsZV9wdihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fcHZfY21kICpjbWQpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTI1ODAte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTI3NjQtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjI3NjU6XFx0XFx0ZGF0YV9sZW4gPSBrdm1fczM5MF9oYW5kbGVfcHZfaW5mbyhcXHUwMDI2aW5mbyk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTI3NjYtXFx0XFx0aWYgKGRhdGFfbGVuIFxcdTAwM2MgMCkge1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTI5MjU9aW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMwNDAtXFx0XFx0LyogbXVzdCBiZSBjYWxsZWQgd2l0aG91dCBrdm0tXFx1MDAzZWxvY2sgKi9cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzA0MTpcXHRcXHRyID0ga3ZtX3MzOTBfaGFuZGxlX3B2KGt2bSwgXFx1MDAyNmFyZ3MpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMDQyLVxcdFxcdGlmIChjb3B5X3RvX3VzZXIoYXJncCwgXFx1MDAyNmFyZ3MsIHNpemVvZihhcmdzKSkpIHtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01NDMwPWxvbmcga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU0NzQtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU0NzU6c3RhdGljIGludCBrdm1fczM5MF9oYW5kbGVfcHZfdmNwdV9kdW1wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTQ3Ni1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qga3ZtX3B2X2NtZCAqY21kKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU1MTc9bG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU3MTUtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU3MTY6XFx0XFx0ciA9IGt2bV9zMzkwX2hhbmRsZV9wdl92Y3B1X2R1bXAodmNwdSwgXFx1MDAyNmNtZCk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU3MTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAwOjEwOjAyLjI5ODk2MzU4NFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mzg0Njk0MzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEtWTS9zMzkwIENvZGUgU3RydWN0dXJlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB0aGF0IGBrdm1fczM5MF9oYW5kbGVfcHZgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCBidXQgd2hhdCdzIGludGVyZXN0aW5nIGlzIHRoYXQgaXQgY2FsbHMgYGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVyc2AuIFRoYXQncyBhIGtleSBjb25uZWN0aW9uIEkgbmVlZCB0byBrZWVwIGluIG1pbmQuIEFsc28sIGBrdm1fYXJjaF92bV9pb2N0bGAgaXMgbm9uLXN0YXRpYyBhbmQgKmFsc28qIGNhbGxzIGBrdm1fczM5MF9oYW5kbGVfcHZgLiBUaGF0J3MgYSBjbGVhciBjb250cm9sIGZsb3cgcGF0aCwgd2hpY2ggaXMgc29tZXRoaW5nIEkgbmVlZCB0byBrZWVwIGluIG1pbmQuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBtb3N0IHJlbGV2YW50IHN5bWJvbHMgdG8gZm9jdXMgb24gaGVyZSBhcmUgZGVmaW5pdGVseTogYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgLCBga3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzYCwgYW5kIGBrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBjcml0aWNhbCBwb2ludHMgb2YgaW50ZXJlc3QgcmlnaHQgbm93LlxuXG5IYW5nIG9uIGEgc2Vjb25k4oCmIEkndmUgZ290IHRvIHJldmlzaXQgdGhlIGBmbGljX3NldF9hdHRyYCBmdW5jdGlvbi4gSXQncyBzdGF0aWMsIGJ1dCBpdCAqaXMqIHRoZSBpb2N0bCBoYW5kbGVyIGZvciB0aGUgZGV2aWNlLiBUaGF0J3MgYSBiaXQgb2YgYSBzdXJwcmlzZSwgYnV0IEkga25vdyBpdCdzIHVzZWQgd2l0aCBga3ZtX2RldmljZV9vcHNgIGJ5IHRoZSBnZW5lcmljIEtWTSBjb2RlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJ3Qgb3Zlcmxvb2sgYW55IHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgdGhlcmUuIEkgY2FuJ3QgdGhpbmsgb2YgYSBub24tc3RhdGljIGZ1bmN0aW9uIGF0IHRoZSBtb21lbnQsIGJ1dCB0aGF0IGRvZXNuJ3QgbWVhbiBpdCBkb2Vzbid0IGV4aXN0LlxuXG5TbywgSSdtIGdvaW5nIHRvIHNvbGlkaWZ5IG15IGZvY3VzIG9uIHRob3NlIHRocmVlIGluaXRpYWwgc3ltYm9sczogYGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVyc2AsIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYCwgYW5kIGBrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzYC4gSSBtaWdodCBuZWVkIHRvIGNpcmNsZSBiYWNrIHRvIGBmbGljX3NldF9hdHRyYCwgYnV0IHRob3NlIHRocmVlIHNlZW0gdGhlIG1vc3QgaW1wb3J0YW50IHJpZ2h0IG5vdy5cblxuRmluYWxseSwganVzdCBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBiZSBjb21wbGV0ZS4gVGhpcyBwYXRjaCBtb2RpZmllcyBgYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY2AuIEkga25vdyB0aGF0IHRoaXMgZmlsZSBpcyBvbmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19LVk1gIGlzIGVuYWJsZWQsIHNvIEknbSBjb3ZlcmVkIG9uIHRoZSBjb25maWd1cmF0aW9uIGZyb250LiBFeGNlbGxlbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDMxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAwOjEwOjA3LjY4MzY2MDgyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTM5NjkwNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50ZXJydXB0Lm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL01ha2VmaWxlPTg9Y2NmbGFncy15IDo9IC1JdmlydC9rdm0gLUlhcmNoL3MzOTAva3ZtXFxuYXJjaC9zMzkwL2t2bS9NYWtlZmlsZS05LVxcbmFyY2gvczM5MC9rdm0vTWFrZWZpbGU6MTA6a3ZtLXkgKz0ga3ZtLXMzOTAubyBpbnRlcmNlcHQubyBpbnRlcnJ1cHQubyBwcml2Lm8gc2lncC5vXFxuYXJjaC9zMzkwL2t2bS9NYWtlZmlsZS0xMS1rdm0teSArPSBkaWFnLm8gZ2FjY2Vzcy5vIGd1ZXN0ZGJnLm8gdnNpZS5vIHB2Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDA6MTA6MDguMTM3NjM2MTU4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NzkxMjAwMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYnVpbGQgc3lzdGVtIGFuZCBjb25maXJtaW5nIGEgZmV3IHRoaW5ncy4gRmlyc3QsIHllcywgYGludGVycnVwdC5vYCBpcyBkZWZpbml0ZWx5IHB1bGxlZCBpbiBieSBga3ZtLXlgLiBUaGF0J3MgZXhwZWN0ZWQsIGdpdmVuIGl0cyByb2xlLiBOZXh0LCB0aGUgb3ZlcmFsbCBjb25maWcgZm9yIHRoaXMgbW9kdWxlIGlzIGluZGVlZCBgS1ZNYC4gTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBEb2VzIGBLVk1gIGRlcGVuZCBvbiBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgb3IgZmVhdHVyZXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgdG8gZnVsbHkgZ3Jhc3AgaG93IHRoaXMgYWxsIGZpdHMgdG9nZXRoZXIgYW5kIHBpbnBvaW50IHBvdGVudGlhbCBwb2ludHMgb2YgaW1wYWN0LiBMZXQncyBkaWcgZGVlcGVyIGludG8gdGhlIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTYxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDA6MTA6MTEuMTE2NzU5NjY4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE4ODg5MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9LY29uZmlnPTE3PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTE4LVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzoxOTpjb25maWcgS1ZNXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTIwLVxcdGRlZl90cmlzdGF0ZSB5XFxuLS1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDYtXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cXHRib29sIFxcXCJVc2Vyc3BhY2UgY29udHJvbGxlZCB2aXJ0dWFsIG1hY2hpbmVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMDoxMDoxMS4yNjg2NTQ0ODRaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzExMjMyNjA0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKlRoZSBQaXZvdGFsIFJvbGUgb2YgVmlydHVhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGlzIG1hdHRlciwgd2hhdGV2ZXIgXCJpdFwiIGlzLCBoaW5nZXMgb24gdGhlIHZlcnkgbmF0dXJlIGFuZCBpbXBsZW1lbnRhdGlvbiBvZiBgVklSVFVBTElaQVRJT05gLiBXZSdyZSB0YWxraW5nIGFib3V0IGluZnJhc3RydWN0dXJlLCBhcHBsaWNhdGlvbnMsIHJlc291cmNlc+KApiBldmVyeXRoaW5nLiBUaGUgbnVhbmNlcyBvZiB0aGUgc3BlY2lmaWMgdmlydHVhbGl6YXRpb24gdGVjaG5vbG9neSBvciBtZXRob2RvbG9neSBkZXBsb3llZCDigJMgYmUgaXQgaGFyZHdhcmUgdmlydHVhbGl6YXRpb24sIE9TLWxldmVsIHZpcnR1YWxpemF0aW9uIChjb250YWluZXJzKSwgb3Igc29tZSBoeWJyaWQgYXBwcm9hY2gg4oCTIHdpbGwgcHJvZm91bmRseSBpbXBhY3QgdGhlIGRpcmVjdGlvbiB3ZSBuZWVkIHRvIHRha2UuIEFyZSB3ZSB0YWxraW5nIGFib3V0IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzPyBTY2FsYWJpbGl0eSBjaGFsbGVuZ2VzPyBTZWN1cml0eSBjb25zaWRlcmF0aW9ucz8gQ29zdCBvcHRpbWl6YXRpb24/IFRoZSBhbnN3ZXIgdG8gKmFueSogb2YgdGhvc2UgcXVlc3Rpb25zLCBhbmQgbGlrZWx5IGNvdW50bGVzcyBvdGhlcnMsIGlzIGdvaW5nIHRvIGJlIGZ1bmRhbWVudGFsbHkgc2hhcGVkIGJ5IGhvdyBgVklSVFVBTElaQVRJT05gIGlzIHV0aWxpemVkIHdpdGhpbiB0aGUgc3lzdGVtIG9yIGNvbnRleHQgd2UncmUgZXhhbWluaW5nLiBXaXRob3V0IGtub3dpbmcgdGhvc2UgZGV0YWlscywgYW55IHByb3Bvc2VkIHNvbHV0aW9uIHdvdWxkIGJlIHB1cmUgc3BlY3VsYXRpb24uIEl0J3MgdGhlIGx5bmNocGluLCB0aGUgZXNzZW50aWFsIGZvdW5kYXRpb24gdXBvbiB3aGljaCBldmVyeXRoaW5nIGVsc2UgcmVzdHMuIFRoZSBkZXZpbCwgYXMgYWx3YXlzLCBpcyBpbiB0aGUgdmlydHVhbGl6YXRpb24gZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzMjIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAwOjEwOjE0LjM4MDk4NDU3MVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4NTIzNDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbnVjb25maWcgVklSVFVBTElaQVRJT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vS2NvbmZpZz01PXNvdXJjZSBcXFwidmlydC9rdm0vS2NvbmZpZ1xcXCJcXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNi1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NzptZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTgtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMDoxMDoxNC41Mzk1MTcyMTZaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzUzOTczNzQyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNIHMzOTAgSW50ZXJydXB0IEhhbmRsaW5nIGZvciBQYXRjaCBSZXZpZXcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgdGhlIG1haW4gZm9jdXMgaXMgb24gdGhlIGBWSVJUVUFMSVpBVElPTmAgYm9vbGVhbiB3aGljaCwgYmFzZWQgb24gdGhlIGNvbmZpZ3VyYXRpb25zLCBzZWVtcyB0byBiZSB0aWVkIHRvIGBLVk1gIOKAkyBhcyBleHBlY3RlZCBmb3IgdGhpcyBzMzkwIHdvcmsuIE5vdywgdGhlIHBhdGNoIGl0c2VsZiBpcyBkZWFsaW5nIHdpdGggdGhlIHMzOTAgS1ZNIGludGVycnVwdCBoYW5kbGluZywgYW5kIHNwZWNpZmljYWxseSwgdGhlIGZhbGxiYWNrIG1lY2hhbmlzbSBmb3IgYWRhcHRlciBpbmRpY2F0b3JzLiBUaGlzIHNpZ25hbHMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgS1ZNIHN1YnN5c3RlbSwgZXNwZWNpYWxseSBhcm91bmQgaW50ZXJydXB0IGluamVjdGlvbiBhbmQgbWFwcGluZywgc28gaXQncyBhIGNyaXRpY2FsIGFyZWEgdG8gdmV0LiBDb25zaWRlcmluZyBzeXprYWxsZXIgc3VwcG9ydHMgczM5MHggS1ZNIGZ1enppbmcsIHRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlxuXG5JJ3ZlIGFscmVhZHkgaWRlbnRpZmllZCB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCwgc28gbGV0J3MgcmV2aXNpdCB0aG9zZTogYGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVyc2AsIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYCwgYW5kIGBrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzYC5cblxuYGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVyc2AgaXMgY2FsbGVkIGZyb20gYGt2bV9zMzkwX2Rlc3Ryb3lfYWRhcHRlcnNgIGFuZCBga3ZtX3MzOTBfaGFuZGxlX3B2YC4gYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgIGlzIGNhbGxlZCBmcm9tIHRoZSBnZW5lcmljIGBrdm1fc2V0X2lycV9pbmF0b21pY2AuICBga3ZtX3MzOTBfZGVzdHJveV9hZGFwdGVyc2AgaXMgY2FsbGVkIGZyb20gYGt2bV9hcmNoX2Rlc3Ryb3lfdm1gLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXNlIGFyZSBpbmNsdWRlZC5cblxuTm93LCBJIHdhcyBsb29raW5nIGF0IGBrdm1fczM5MF9hZGFwdGVyX21hcGAgYW5kIGBrdm1fczM5MF9hZGFwdGVyX3VubWFwYCwgc2luY2UgdGhleSBhcmUgc3RhdGljIGFuZCBoYXZlIGJlZW4gbW9kaWZpZWQuIEJ1dCBga3ZtX3MzOTBfYWRhcHRlcl9tYXBgIGlzIGlubGluZWQsIGJlaW5nIGNhbGxlZCBmcm9tIGBtb2RpZnlfaW9fYWRhcHRlcmAsIGFuZCBgZmxpY19zZXRfYXR0cmAgd2hpY2ggaXMgYSBmdW5jdGlvbiBwb2ludGVyLiBTbyBJIHdpbGwgaW5jbHVkZSBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2AsIGBrdm1fczM5MF91bm1hcF9hbGxfYWRhcHRlcnNgLCBhbmQgYGt2bV9zMzkwX2Rlc3Ryb3lfYWRhcHRlcnNgLlxuXG5KdXN0IGNvbmZpcm1pbmcsIGBLVk1gIGlzIGluZGVlZCB0aGUgb25seSBjb25maWcgYXQgcGxheSBoZXJlLCBnaXZlbiB0aGUgYGRlZl9ib29sIHlgIGZvciBgVklSVFVBTElaQVRJT05gLiBMb29rcyBsaWtlIHRoaXMgc3VtbWFyaXplcyB0aGUgZm9jdXMgc3ltYm9sczpcbiogICBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2BcbiogICBga3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzYFxuKiAgIGBrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzYFxuKiAgIFRoZSBjb25maWcgaXMgYEtWTWAuXG5cbkknbGwgcHJvY2VlZCB0byBleGFtaW5lIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYCBub3cgdG8gY2hlY2sgdGhlIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjgzLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAwOjEwOjIyLjA3OTI1ODMyNVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwMDE4MTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTM2ODU9aW50IF9faW5pdCBrdm1fczM5MF9naWJfaW5pdCh1OCBuaXNjKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNzQwLS8qXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozNzQxOiAqIGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWM6IGZhc3QtcGF0aCBmb3IgaXJxZmQgaW5qZWN0aW9uXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNzQyLSAqL1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6Mzc0MzppbnQga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYyhzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM3NDQtXFx0XFx0XFx0ICAgICAgc3RydWN0IGt2bSAqa3ZtLCBpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGxldmVsLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMDoxMDoyMi4yNjkyODQ0MDlaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc1ODU1MDA5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCB5ZXAsIHRoYXQncyBkZWZpbml0ZWx5IHRoZSBrZXkgYXJlYSBJIHdhcyBleHBlY3RpbmcuIEl0J3MgcmlnaHQgdGhlcmUuIE5vdywgbGV0J3MgZHJpbGwgZG93biBpbnRvIGBrdm1fczM5MF91bm1hcF9hbGxfYWRhcHRlcnNgLiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIOKAkyB0aGUgZnVuY3Rpb24gdGhhdCdzIHJlc3BvbnNpYmxlIGZvciB0aGUgY2xlYW4tdXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciB0aG9yb3VnaGx5IHRvIGlkZW50aWZ5IHRoZSByb290IGNhdXNlIG9mIHRoZSBiZWhhdmlvciwgb3IgdG8gdW5kZXJzdGFuZCBpZiB0aGUgaXNzdWUgbGllcyBmdXJ0aGVyIGRvd24gdGhlIGNhbGwgc3RhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MDU0LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDA6MTA6MjUuMDI3ODM4ODc1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzA2NjgwODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yNTU3PXN0YXRpYyBpbnQga3ZtX3MzOTBfYWRhcHRlcl91bm1hcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZCwgX191NjQgYWRkcilcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjYwMy1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI2MDQ6dm9pZCBrdm1fczM5MF91bm1hcF9hbGxfYWRhcHRlcnMoc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjYwNS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTI2MzY9dm9pZCBrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjYzOS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI2NDA6XFx0a3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzKGt2bSk7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNjQxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMDoxMDoyNS4yNTg1MTY4MjlaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjcyMjcwMjE5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ29uZmlybWluZyBhbmQgRGlyZWN0aW5nIEZvY3VzKipcblxuQWxyaWdodCwgeWVwLCBJIHNlZSBpdC4gSXQncyBkZWZpbml0ZWx5IHRoZXJlLCB0aGUgcG90ZW50aWFsIGlzc3VlIG9yIGFyZWEgSSdtIGxvb2tpbmcgYXQuIExldCdzIG5vdCB3YXN0ZSBhbnkgdGltZSBoZXJlLiBNeSBuZXh0IHN0ZXAgaGFzIHRvIGJlIGNsZWFyLCBpdCBoYXMgdG8gYmUgZm9jdXNlZCwgYW5kIHRoYXQgbWVhbnMgSSBuZWVkIHRvIGRpZyBpbnRvIGBrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzYC4gVGhhdCBmdW5jdGlvbiBpcyB0aGUgbGlrZWx5IGxvY2F0aW9uIHdoZXJlIHRoZSBpc3N1ZSwgd2hhdGV2ZXIgaXQgbWF5IGJlLCBpcyBsdXJraW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgdGhvcm91Z2hseS4gVGltZSB0byBnZXQgZG93biB0byBzcGVjaWZpY3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NTIxLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDA6MTA6MjcuOTgxMjIyNDU2WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ1OTQ4OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3MzOTBfZGVzdHJveV9hZGFwdGVyc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MjYwND12b2lkIGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVycyhzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI2MzUtXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyNjM2OnZvaWQga3ZtX3MzOTBfZGVzdHJveV9hZGFwdGVycyhzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNjM3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDA6MTA6MjguMDk1ODIzMzQ0WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMjg4OTM1MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ29uZmlybWF0aW9uIGFuZCBJbW1lZGlhdGUgQWN0aW9uKipcblxuT2theSwgdGhlIGNvbmZpcm1hdGlvbiBpcyBpbi4gVGhlIHNwZWNpZmljIGNvbmRpdGlvbiBJIHdhcyBsb29raW5nIGZvciBpcyBpbmRlZWQgcHJlc2VudC4gTm8gZnVydGhlciBhbmFseXNpcyBpcyByZXF1aXJlZCBhdCB0aGlzIGp1bmN0dXJlLiBJJ20gc2F0aXNmaWVkIHdpdGggdGhlIHZhbGlkYXRpb24gb2YgdGhpcyBzcGVjaWZpYyBicmFuY2guIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBpbW1lZGlhdGVseSBjYWxsIHRoZSBgc2V0LXJlc3VsdHNgIGZ1bmN0aW9uIG9yIG1ldGhvZC4gSSBuZWVkIHRvIGdldCB0aGlzIGluZm9ybWF0aW9uIHByb2Nlc3NlZCBhbmQgdGhlIHN0YXRlIHVwZGF0ZWQgYmFzZWQgb24gdGhpcyB2YWxpZGF0ZWQgY29uZGl0aW9uLiBUaGVyZSdzIG5vIHZhbHVlIGluIGRlZmVycmluZyB0aGlzIG9wZXJhdGlvbi4gTGV0J3MgZXhlY3V0ZSBhbmQgbW92ZSBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODg1NywiT3V0cHV0VG9rZW5zIjoxMzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMDoxMDozMS4zMjQ3MjE4MTdaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTAzMzk4OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNcIixcbiAgICBcImt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVyc1wiLFxuICAgIFwia3ZtX3MzOTBfZGVzdHJveV9hZGFwdGVyc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzMzkwIEtWTSBpbnRlcnJ1cHQgaGFuZGxpbmcgbG9naWMgdG8gYWxsb3cgZmFsbGJhY2sgdG8gc2hvcnQtdGVybSBwaW5uaW5nIHdoZW4gbG9uZy10ZXJtIHBpbm5pbmcgZmFpbHMgZm9yIGFkYXB0ZXIgaW5kaWNhdG9ycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBLVk0gc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBob3cgaW50ZXJydXB0cyBhcmUgaW5qZWN0ZWQgYW5kIG1hcHBlZCwgYW5kIGl0IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY1wiLFxuICAgIFwia3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzXCIsXG4gICAgXCJrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHMzOTAgS1ZNIGludGVycnVwdCBoYW5kbGluZyBsb2dpYyB0byBhbGxvdyBmYWxsYmFjayB0byBzaG9ydC10ZXJtIHBpbm5pbmcgd2hlbiBsb25nLXRlcm0gcGlubmluZyBmYWlscyBmb3IgYWRhcHRlciBpbmRpY2F0b3JzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEtWTSBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGhvdyBpbnRlcnJ1cHRzIGFyZSBpbmplY3RlZCBhbmQgbWFwcGVkLCBhbmQgaXQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow9t479[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-24 23:33:09 +0000 UTC FinishedAt: 2026-07-25 00:10:33 +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": "e61e6fd4f139f2342a6bc86da602df7456ef87f6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "e61e6fd4f139f2342a6bc86da602df7456ef87f6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "0be33aa3-3dc3-48fc-b5e7-39c18810e642" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_arch_set_irq_inatomic", "kvm_s390_unmap_all_adapters", "kvm_s390_destroy_adapters" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAwOjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3NldF9pcnFfaW5hdG9taWMmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2Rlc3Ryb3lfYWRhcHRlcnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHMzOTAgS1ZNIGludGVycnVwdCBoYW5kbGluZyBsb2dpYyB0byBhbGxvdyBmYWxsYmFjayB0byBzaG9ydC10ZXJtIHBpbm5pbmcgd2hlbiBsb25nLXRlcm0gcGlubmluZyBmYWlscyBmb3IgYWRhcHRlciBpbmRpY2F0b3JzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEtWTSBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGhvdyBpbnRlcnJ1cHRzIGFyZSBpbmplY3RlZCBhbmQgbWFwcGVkLCBhbmQgaXQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMDowOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGMxNjFmYjI0MDNhNjk3YzgwZDRiY2M3MDczOWI3ODAzYWI4MWQyOGJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAyNSAwMDowOTowNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvczM5MF9mbGljLnJzdCBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vZGV2aWNlcy9zMzkwX2ZsaWMucnN0XG5pbmRleCBiNzg0ZjgwMTY3NDgzNi4uZWM5YWFhZTA0ZTIyMGEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvczM5MF9mbGljLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3MzOTBfZmxpYy5yc3RcbkBAIC0xMTIsOSAmIzQzOzExMiwxNiBAQCBHcm91cHM6XG4gICAgICAgbWFzayBvciB1bm1hc2sgdGhlIGFkYXB0ZXIsIGFzIHNwZWNpZmllZCBpbiBtYXNrXG4gXG4gICAgIEtWTV9TMzkwX0lPX0FEQVBURVJfTUFQXG4tICAgICAgVGhpcyBpcyBub3cgYSBuby1vcC4gVGhlIG1hcHBpbmcgaXMgcHVyZWx5IGRvbmUgYnkgdGhlIGlycSByb3V0ZS5cbiYjNDM7ICAgICAgTWFwIGFuIGFkYXB0ZXIgaW5kaWNhdG9yIG9yIHN1bW1hcnkgcGFnZSBmb3IgbG9uZy10ZXJtIHBpbm5pbmcgc28gdGhhdFxuJiM0MzsgICAgICBpbnRlcnJ1cHQgaW5qZWN0aW9uIGNhbiBiZSBwZXJmb3JtZWQgaW4gYXRvbWljIGNvbnRleHQuIElmIGxvbmctdGVybVxuJiM0MzsgICAgICBwaW5uaW5nIGlzIG5vdCBwb3NzaWJsZSAoZS5nLiBmaWxlLWJhY2tlZCBtZW1vcnkpLCB0aGUgcGFnZSBpcyB2ZXJpZmllZFxuJiM0MzsgICAgICB2aWEgYSBzaG9ydC10ZXJtIHBpbiBhbmQgdGhlIGlvY3RsIHJldHVybnMgc3VjY2VzczsgaW50ZXJydXB0IGluamVjdGlvblxuJiM0MzsgICAgICB3aWxsIHVzZSB0aGUgbm9uLWF0b21pYyBpcnFmZCBwYXRoIHdpdGggc2hvcnQtdGVybSBwaW5uaW5nIG9uIGVhY2hcbiYjNDM7ICAgICAgaW50ZXJydXB0LiBJbiBTZWN1cmUgRXhlY3V0aW9uIG1vZGUgdGhpcyBpcyBhIG5vLW9wLlxuICAgICBLVk1fUzM5MF9JT19BREFQVEVSX1VOTUFQXG4tICAgICAgVGhpcyBpcyBub3cgYSBuby1vcC4gVGhlIG1hcHBpbmcgaXMgcHVyZWx5IGRvbmUgYnkgdGhlIGlycSByb3V0ZS5cbiYjNDM7ICAgICAgVW5tYXAgYSBwcmV2aW91c2x5IG1hcHBlZCBhZGFwdGVyIGluZGljYXRvciBvciBzdW1tYXJ5IHBhZ2UgYW5kIHJlbGVhc2VcbiYjNDM7ICAgICAgdGhlIGxvbmctdGVybSBwaW4uIElmIHRoZSBwYWdlIHdhcyBub3QgbG9uZy10ZXJtIHBpbm5lZCAoZS5nLiBmaWxlLWJhY2tlZFxuJiM0MzsgICAgICBtZW1vcnkgb3IgU2VjdXJlIEV4ZWN1dGlvbiBtb2RlKSwgdGhpcyBpcyBhIG5vLW9wIGFuZCByZXR1cm5zIHN1Y2Nlc3MuXG4gXG4gICBLVk1fREVWX0ZMSUNfQUlTTVxuICAgICBtb2RpZnkgdGhlIGFkYXB0ZXItaW50ZXJydXB0aW9uLXN1cHByZXNzaW9uIG1vZGUgZm9yIGEgZ2l2ZW4gaXNjIGlmIHRoZVxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IGVhYTM0YzViZDNjMTEwLi5jMTcyZjliMjEyZDE4ZSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTQ3Niw2ICYjNDM7NDc2LDExIEBAIHN0cnVjdCBzMzkwX21hcF9pbmZvIHtcbiBcdF9fdTY0IGd1ZXN0X2FkZHI7XG4gXHRfX3U2NCBhZGRyO1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUcnVlIGlmIHRoZSBwYWdlIGlzIGxvbmctdGVybSBwaW5uZWQuIEZhbHNlIGlmIGxvbmctdGVybSBwaW5uaW5nXG4mIzQzO1x0ICogZmFpbGVkIGFuZCB0aGlzIGVudHJ5IGV4aXN0cyBvbmx5IHRvIHByZXNlcnZlIE1BUC9VTk1BUCBzeW1tZXRyeS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRib29sIHBpbm5lZDtcbiB9O1xuIFxuIHN0cnVjdCBzMzkwX2lvX2FkYXB0ZXIge1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXG5pbmRleCA5ZTNlNmIwZDcyYWQ2MS4uNzVlYWNkMTU3OGVmYTYgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXG5AQCAtMjUyMCw4ICYjNDM7MjUyMCwyMiBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2FkYXB0ZXJfbWFwKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkLCBfX3U2NCBhZGRyKVxuIFx0bWFwLVx1MDAzZWFkZHIgPSBob3N0X2FkZHI7XG4gXHRtYXAtXHUwMDNlcGFnZSA9IHBpbl9tYXBfcGFnZShrdm0sIGhvc3RfYWRkciwgRk9MTF9MT05HVEVSTSk7XG4gXHRpZiAoIW1hcC1cdTAwM2VwYWdlKSB7XG4tXHRcdHJldCA9IC1FSU5WQUw7XG4tXHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIExvbmctdGVybSBwaW5uaW5nIG1heSBmYWlsIGZvciBtZW1vcnkgdHlwZXMgc3VjaCBhcyBmaWxlLWJhY2tlZFxuJiM0MztcdFx0ICogbWVtb3J5LiBWZXJpZnkgdGhhdCBzaG9ydC10ZXJtIHBpbm5pbmcgc3VjY2VlZHMgc28gdGhhdCB0aGVcbiYjNDM7XHRcdCAqIG5vbi1hdG9taWMgaXJxZmQgcGF0aCBjYW4gaGFuZGxlIGludGVycnVwdCBpbmplY3Rpb24uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdG1hcC1cdTAwM2VwYWdlID0gcGluX21hcF9wYWdlKGt2bSwgaG9zdF9hZGRyLCAwKTtcbiYjNDM7XHRcdGlmICghbWFwLVx1MDAzZXBhZ2UpIHtcbiYjNDM7XHRcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHR1bnBpbl91c2VyX3BhZ2UobWFwLVx1MDAzZXBhZ2UpO1xuJiM0MztcdFx0bWFwLVx1MDAzZXBhZ2UgPSBOVUxMO1xuJiM0MztcdFx0bWFwLVx1MDAzZXBpbm5lZCA9IGZhbHNlO1xuJiM0MztcdFx0LyogQWRkIGFuIGVudHJ5IHRvIHByZXNlcnZlIE1BUC9VTk1BUCBzeW1tZXRyeS4gKi9cbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0bWFwLVx1MDAzZXBpbm5lZCA9IHRydWU7XG4gXHR9XG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZhZGFwdGVyLVx1MDAzZW1hcHNfbG9jaywgZmxhZ3MpO1xuIFx0aWYgKGFkYXB0ZXItXHUwMDNlbnJfbWFwcyBcdTAwM2MgTUFYX1MzOTBfQURBUFRFUl9NQVBTKSB7XG5AQCAtMjUzMiw3ICYjNDM7MjU0Niw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfYWRhcHRlcl9tYXAoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQsIF9fdTY0IGFkZHIpXG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXHR9XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmFkYXB0ZXItXHUwMDNlbWFwc19sb2NrLCBmbGFncyk7XG4tXHRpZiAocmV0KVxuJiM0MztcdGlmIChyZXQgXHUwMDI2XHUwMDI2IG1hcC1cdTAwM2VwYWdlKVxuIFx0XHR1bnBpbl91c2VyX3BhZ2UobWFwLVx1MDAzZXBhZ2UpO1xuIG91dDpcbiBcdGlmIChyZXQpXG5AQCAtMjU0Niw2ICYjNDM7MjU2MCw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfYWRhcHRlcl91bm1hcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZCwgX191NjQgYWRkcilcbiBcdHN0cnVjdCBzMzkwX21hcF9pbmZvICptYXAsICp0bXAsICptYXBfdG9fZnJlZTtcbiBcdHN0cnVjdCBwYWdlICptYXBfcGFnZV90b19wdXQgPSBOVUxMO1xuIFx0dTY0IG1hcF9hZGRyX3RvX21hcmsgPSAwO1xuJiM0MztcdGJvb2wgbWFwX3Bpbm5lZCA9IGZhbHNlO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGludCBmb3VuZCA9IDAsIGlkeDtcbiBcbkBAIC0yNTYwLDYgJiM0MzsyNTc1LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9hZGFwdGVyX3VubWFwKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkLCBfX3U2NCBhZGRyKVxuIFx0XHRcdGxpc3RfZGVsKFx1MDAyNm1hcC1cdTAwM2VsaXN0KTtcbiBcdFx0XHRtYXBfcGFnZV90b19wdXQgPSBtYXAtXHUwMDNlcGFnZTtcbiBcdFx0XHRtYXBfYWRkcl90b19tYXJrID0gbWFwLVx1MDAzZWd1ZXN0X2FkZHI7XG4mIzQzO1x0XHRcdG1hcF9waW5uZWQgPSBtYXAtXHUwMDNlcGlubmVkO1xuIFx0XHRcdG1hcF90b19mcmVlID0gbWFwO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5AQCAtMjU2OCwxMSAmIzQzOzI1ODQsMTggQEAgc3RhdGljIGludCBrdm1fczM5MF9hZGFwdGVyX3VubWFwKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkLCBfX3U2NCBhZGRyKVxuIFxuIFx0aWYgKGZvdW5kKSB7XG4gXHRcdGtmcmVlKG1hcF90b19mcmVlKTtcbi1cdFx0aWR4ID0gc3JjdV9yZWFkX2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNyY3UpO1xuLVx0XHRtYXJrX3BhZ2VfZGlydHkoa3ZtLCBtYXBfYWRkcl90b19tYXJrIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbi1cdFx0c2V0X3BhZ2VfZGlydHlfbG9jayhtYXBfcGFnZV90b19wdXQpO1xuLVx0XHRzcmN1X3JlYWRfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzcmN1LCBpZHgpO1xuLVx0XHR1bnBpbl91c2VyX3BhZ2UobWFwX3BhZ2VfdG9fcHV0KTtcbiYjNDM7XHRcdGlmIChtYXBfcGlubmVkKSB7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIE9ubHkgbG9uZy10ZXJtIHBpbm5lZCBwYWdlcyBuZWVkIHRvIGJlIG1hcmtlZCBkaXJ0eVxuJiM0MztcdFx0XHQgKiBhbmQgcmVsZWFzZWQuIEZhbGxiYWNrIGVudHJpZXMgZXhpc3Qgb25seSBmb3JcbiYjNDM7XHRcdFx0ICogTUFQL1VOTUFQIHN5bW1ldHJ5LlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0aWR4ID0gc3JjdV9yZWFkX2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNyY3UpO1xuJiM0MztcdFx0XHRtYXJrX3BhZ2VfZGlydHkoa3ZtLCBtYXBfYWRkcl90b19tYXJrIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbiYjNDM7XHRcdFx0c2V0X3BhZ2VfZGlydHlfbG9jayhtYXBfcGFnZV90b19wdXQpO1xuJiM0MztcdFx0XHRzcmN1X3JlYWRfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzcmN1LCBpZHgpO1xuJiM0MztcdFx0XHR1bnBpbl91c2VyX3BhZ2UobWFwX3BhZ2VfdG9fcHV0KTtcbiYjNDM7XHRcdH1cbiBcdH1cbiBcbiBcdHJldHVybiBmb3VuZCA/IDAgOiAtRU5PRU5UO1xuQEAgLTI1OTgsMTEgJiM0MzsyNjIxLDEzIEBAIHZvaWQga3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzKHN0cnVjdCBrdm0gKmt2bSlcbiBcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1hcCwgdG1wLCBcdTAwMjZsb2NhbF9saXN0LCBsaXN0KSB7XG4gXHRcdFx0bGlzdF9kZWwoXHUwMDI2bWFwLVx1MDAzZWxpc3QpO1xuLVx0XHRcdGlkeCA9IHNyY3VfcmVhZF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzcmN1KTtcbi1cdFx0XHRtYXJrX3BhZ2VfZGlydHkoa3ZtLCBtYXAtXHUwMDNlZ3Vlc3RfYWRkciBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4tXHRcdFx0c2V0X3BhZ2VfZGlydHlfbG9jayhtYXAtXHUwMDNlcGFnZSk7XG4tXHRcdFx0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc3JjdSwgaWR4KTtcbi1cdFx0XHR1bnBpbl91c2VyX3BhZ2UobWFwLVx1MDAzZXBhZ2UpO1xuJiM0MztcdFx0XHRpZiAobWFwLVx1MDAzZXBpbm5lZCkge1xuJiM0MztcdFx0XHRcdGlkeCA9IHNyY3VfcmVhZF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzcmN1KTtcbiYjNDM7XHRcdFx0XHRtYXJrX3BhZ2VfZGlydHkoa3ZtLCBtYXAtXHUwMDNlZ3Vlc3RfYWRkciBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4mIzQzO1x0XHRcdFx0c2V0X3BhZ2VfZGlydHlfbG9jayhtYXAtXHUwMDNlcGFnZSk7XG4mIzQzO1x0XHRcdFx0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc3JjdSwgaWR4KTtcbiYjNDM7XHRcdFx0XHR1bnBpbl91c2VyX3BhZ2UobWFwLVx1MDAzZXBhZ2UpO1xuJiM0MztcdFx0XHR9XG4gXHRcdFx0a2ZyZWUobWFwKTtcbiBcdFx0fVxuIFx0fVxuQEAgLTI5MjksOCAmIzQzOzI5NTQsMTIgQEAgc3RhdGljIHN0cnVjdCBzMzkwX21hcF9pbmZvICpnZXRfbWFwX2luZm8oc3RydWN0IHMzOTBfaW9fYWRhcHRlciAqYWRhcHRlcixcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hcCwgXHUwMDI2YWRhcHRlci1cdTAwM2VtYXBzLCBsaXN0KSB7XG4tXHRcdGlmIChtYXAtXHUwMDNlYWRkciA9PSBhZGRyKVxuLVx0XHRcdHJldHVybiBtYXA7XG4mIzQzO1x0XHRpZiAobWFwLVx1MDAzZWFkZHIgPT0gYWRkcikge1xuJiM0MztcdFx0XHRpZiAobWFwLVx1MDAzZXBpbm5lZClcbiYjNDM7XHRcdFx0XHRyZXR1cm4gbWFwO1xuJiM0MztcdFx0XHRlbHNlXG4mIzQzO1x0XHRcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDA6MDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3NldF9pcnFfaW5hdG9taWMmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2Rlc3Ryb3lfYWRhcHRlcnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHMzOTAgS1ZNIGludGVycnVwdCBoYW5kbGluZyBsb2dpYyB0byBhbGxvdyBmYWxsYmFjayB0byBzaG9ydC10ZXJtIHBpbm5pbmcgd2hlbiBsb25nLXRlcm0gcGlubmluZyBmYWlscyBmb3IgYWRhcHRlciBpbmRpY2F0b3JzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEtWTSBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGhvdyBpbnRlcnJ1cHRzIGFyZSBpbmplY3RlZCBhbmQgbWFwcGVkLCBhbmQgaXQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGMxNjFmYjI0MDNhNjk3YzgwZDRiY2M3MDczOWI3ODAzYWI4MWQyOGIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1bCAyNSAwMDowOTowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vZGV2aWNlcy9zMzkwX2ZsaWMucnN0IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3MzOTBfZmxpYy5yc3QKaW5kZXggYjc4NGY4MDE2NzQ4MzYuLmVjOWFhYWUwNGUyMjBhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvczM5MF9mbGljLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvczM5MF9mbGljLnJzdApAQCAtMTEyLDkgJiM0MzsxMTIsMTYgQEAgR3JvdXBzOgogICAgICAgbWFzayBvciB1bm1hc2sgdGhlIGFkYXB0ZXIsIGFzIHNwZWNpZmllZCBpbiBtYXNrCiAKICAgICBLVk1fUzM5MF9JT19BREFQVEVSX01BUAotICAgICAgVGhpcyBpcyBub3cgYSBuby1vcC4gVGhlIG1hcHBpbmcgaXMgcHVyZWx5IGRvbmUgYnkgdGhlIGlycSByb3V0ZS4KJiM0MzsgICAgICBNYXAgYW4gYWRhcHRlciBpbmRpY2F0b3Igb3Igc3VtbWFyeSBwYWdlIGZvciBsb25nLXRlcm0gcGlubmluZyBzbyB0aGF0CiYjNDM7ICAgICAgaW50ZXJydXB0IGluamVjdGlvbiBjYW4gYmUgcGVyZm9ybWVkIGluIGF0b21pYyBjb250ZXh0LiBJZiBsb25nLXRlcm0KJiM0MzsgICAgICBwaW5uaW5nIGlzIG5vdCBwb3NzaWJsZSAoZS5nLiBmaWxlLWJhY2tlZCBtZW1vcnkpLCB0aGUgcGFnZSBpcyB2ZXJpZmllZAomIzQzOyAgICAgIHZpYSBhIHNob3J0LXRlcm0gcGluIGFuZCB0aGUgaW9jdGwgcmV0dXJucyBzdWNjZXNzOyBpbnRlcnJ1cHQgaW5qZWN0aW9uCiYjNDM7ICAgICAgd2lsbCB1c2UgdGhlIG5vbi1hdG9taWMgaXJxZmQgcGF0aCB3aXRoIHNob3J0LXRlcm0gcGlubmluZyBvbiBlYWNoCiYjNDM7ICAgICAgaW50ZXJydXB0LiBJbiBTZWN1cmUgRXhlY3V0aW9uIG1vZGUgdGhpcyBpcyBhIG5vLW9wLgogICAgIEtWTV9TMzkwX0lPX0FEQVBURVJfVU5NQVAKLSAgICAgIFRoaXMgaXMgbm93IGEgbm8tb3AuIFRoZSBtYXBwaW5nIGlzIHB1cmVseSBkb25lIGJ5IHRoZSBpcnEgcm91dGUuCiYjNDM7ICAgICAgVW5tYXAgYSBwcmV2aW91c2x5IG1hcHBlZCBhZGFwdGVyIGluZGljYXRvciBvciBzdW1tYXJ5IHBhZ2UgYW5kIHJlbGVhc2UKJiM0MzsgICAgICB0aGUgbG9uZy10ZXJtIHBpbi4gSWYgdGhlIHBhZ2Ugd2FzIG5vdCBsb25nLXRlcm0gcGlubmVkIChlLmcuIGZpbGUtYmFja2VkCiYjNDM7ICAgICAgbWVtb3J5IG9yIFNlY3VyZSBFeGVjdXRpb24gbW9kZSksIHRoaXMgaXMgYSBuby1vcCBhbmQgcmV0dXJucyBzdWNjZXNzLgogCiAgIEtWTV9ERVZfRkxJQ19BSVNNCiAgICAgbW9kaWZ5IHRoZSBhZGFwdGVyLWludGVycnVwdGlvbi1zdXBwcmVzc2lvbiBtb2RlIGZvciBhIGdpdmVuIGlzYyBpZiB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggZWFhMzRjNWJkM2MxMTAuLmMxNzJmOWIyMTJkMThlIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtNDc2LDYgJiM0Mzs0NzYsMTEgQEAgc3RydWN0IHMzOTBfbWFwX2luZm8gewogCV9fdTY0IGd1ZXN0X2FkZHI7CiAJX191NjQgYWRkcjsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKJiM0MzsJLyoKJiM0MzsJICogVHJ1ZSBpZiB0aGUgcGFnZSBpcyBsb25nLXRlcm0gcGlubmVkLiBGYWxzZSBpZiBsb25nLXRlcm0gcGlubmluZwomIzQzOwkgKiBmYWlsZWQgYW5kIHRoaXMgZW50cnkgZXhpc3RzIG9ubHkgdG8gcHJlc2VydmUgTUFQL1VOTUFQIHN5bW1ldHJ5LgomIzQzOwkgKi8KJiM0MzsJYm9vbCBwaW5uZWQ7CiB9OwogCiBzdHJ1Y3QgczM5MF9pb19hZGFwdGVyIHsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jCmluZGV4IDllM2U2YjBkNzJhZDYxLi43NWVhY2QxNTc4ZWZhNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jCkBAIC0yNTIwLDggJiM0MzsyNTIwLDIyIEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfYWRhcHRlcl9tYXAoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQsIF9fdTY0IGFkZHIpCiAJbWFwLSZndDthZGRyID0gaG9zdF9hZGRyOwogCW1hcC0mZ3Q7cGFnZSA9IHBpbl9tYXBfcGFnZShrdm0sIGhvc3RfYWRkciwgRk9MTF9MT05HVEVSTSk7CiAJaWYgKCFtYXAtJmd0O3BhZ2UpIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7CiYjNDM7CQkvKgomIzQzOwkJICogTG9uZy10ZXJtIHBpbm5pbmcgbWF5IGZhaWwgZm9yIG1lbW9yeSB0eXBlcyBzdWNoIGFzIGZpbGUtYmFja2VkCiYjNDM7CQkgKiBtZW1vcnkuIFZlcmlmeSB0aGF0IHNob3J0LXRlcm0gcGlubmluZyBzdWNjZWVkcyBzbyB0aGF0IHRoZQomIzQzOwkJICogbm9uLWF0b21pYyBpcnFmZCBwYXRoIGNhbiBoYW5kbGUgaW50ZXJydXB0IGluamVjdGlvbi4KJiM0MzsJCSAqLwomIzQzOwkJbWFwLSZndDtwYWdlID0gcGluX21hcF9wYWdlKGt2bSwgaG9zdF9hZGRyLCAwKTsKJiM0MzsJCWlmICghbWFwLSZndDtwYWdlKSB7CiYjNDM7CQkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsJCXVucGluX3VzZXJfcGFnZShtYXAtJmd0O3BhZ2UpOwomIzQzOwkJbWFwLSZndDtwYWdlID0gTlVMTDsKJiM0MzsJCW1hcC0mZ3Q7cGlubmVkID0gZmFsc2U7CiYjNDM7CQkvKiBBZGQgYW4gZW50cnkgdG8gcHJlc2VydmUgTUFQL1VOTUFQIHN5bW1ldHJ5LiAqLwomIzQzOwl9IGVsc2UgewomIzQzOwkJbWFwLSZndDtwaW5uZWQgPSB0cnVlOwogCX0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2FkYXB0ZXItJmd0O21hcHNfbG9jaywgZmxhZ3MpOwogCWlmIChhZGFwdGVyLSZndDtucl9tYXBzICZsdDsgTUFYX1MzOTBfQURBUFRFUl9NQVBTKSB7CkBAIC0yNTMyLDcgJiM0MzsyNTQ2LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9hZGFwdGVyX21hcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZCwgX191NjQgYWRkcikKIAkJcmV0ID0gLUVJTlZBTDsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2FkYXB0ZXItJmd0O21hcHNfbG9jaywgZmxhZ3MpOwotCWlmIChyZXQpCiYjNDM7CWlmIChyZXQgJmFtcDsmYW1wOyBtYXAtJmd0O3BhZ2UpCiAJCXVucGluX3VzZXJfcGFnZShtYXAtJmd0O3BhZ2UpOwogb3V0OgogCWlmIChyZXQpCkBAIC0yNTQ2LDYgJiM0MzsyNTYwLDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9hZGFwdGVyX3VubWFwKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkLCBfX3U2NCBhZGRyKQogCXN0cnVjdCBzMzkwX21hcF9pbmZvICptYXAsICp0bXAsICptYXBfdG9fZnJlZTsKIAlzdHJ1Y3QgcGFnZSAqbWFwX3BhZ2VfdG9fcHV0ID0gTlVMTDsKIAl1NjQgbWFwX2FkZHJfdG9fbWFyayA9IDA7CiYjNDM7CWJvb2wgbWFwX3Bpbm5lZCA9IGZhbHNlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGZvdW5kID0gMCwgaWR4OwogCkBAIC0yNTYwLDYgJiM0MzsyNTc1LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9hZGFwdGVyX3VubWFwKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkLCBfX3U2NCBhZGRyKQogCQkJbGlzdF9kZWwoJmFtcDttYXAtJmd0O2xpc3QpOwogCQkJbWFwX3BhZ2VfdG9fcHV0ID0gbWFwLSZndDtwYWdlOwogCQkJbWFwX2FkZHJfdG9fbWFyayA9IG1hcC0mZ3Q7Z3Vlc3RfYWRkcjsKJiM0MzsJCQltYXBfcGlubmVkID0gbWFwLSZndDtwaW5uZWQ7CiAJCQltYXBfdG9fZnJlZSA9IG1hcDsKIAkJCWJyZWFrOwogCQl9CkBAIC0yNTY4LDExICYjNDM7MjU4NCwxOCBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2FkYXB0ZXJfdW5tYXAoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQsIF9fdTY0IGFkZHIpCiAKIAlpZiAoZm91bmQpIHsKIAkJa2ZyZWUobWFwX3RvX2ZyZWUpOwotCQlpZHggPSBzcmN1X3JlYWRfbG9jaygmYW1wO2t2bS0mZ3Q7c3JjdSk7Ci0JCW1hcmtfcGFnZV9kaXJ0eShrdm0sIG1hcF9hZGRyX3RvX21hcmsgJmd0OyZndDsgUEFHRV9TSElGVCk7Ci0JCXNldF9wYWdlX2RpcnR5X2xvY2sobWFwX3BhZ2VfdG9fcHV0KTsKLQkJc3JjdV9yZWFkX3VubG9jaygmYW1wO2t2bS0mZ3Q7c3JjdSwgaWR4KTsKLQkJdW5waW5fdXNlcl9wYWdlKG1hcF9wYWdlX3RvX3B1dCk7CiYjNDM7CQlpZiAobWFwX3Bpbm5lZCkgewomIzQzOwkJCS8qCiYjNDM7CQkJICogT25seSBsb25nLXRlcm0gcGlubmVkIHBhZ2VzIG5lZWQgdG8gYmUgbWFya2VkIGRpcnR5CiYjNDM7CQkJICogYW5kIHJlbGVhc2VkLiBGYWxsYmFjayBlbnRyaWVzIGV4aXN0IG9ubHkgZm9yCiYjNDM7CQkJICogTUFQL1VOTUFQIHN5bW1ldHJ5LgomIzQzOwkJCSAqLwomIzQzOwkJCWlkeCA9IHNyY3VfcmVhZF9sb2NrKCZhbXA7a3ZtLSZndDtzcmN1KTsKJiM0MzsJCQltYXJrX3BhZ2VfZGlydHkoa3ZtLCBtYXBfYWRkcl90b19tYXJrICZndDsmZ3Q7IFBBR0VfU0hJRlQpOwomIzQzOwkJCXNldF9wYWdlX2RpcnR5X2xvY2sobWFwX3BhZ2VfdG9fcHV0KTsKJiM0MzsJCQlzcmN1X3JlYWRfdW5sb2NrKCZhbXA7a3ZtLSZndDtzcmN1LCBpZHgpOwomIzQzOwkJCXVucGluX3VzZXJfcGFnZShtYXBfcGFnZV90b19wdXQpOwomIzQzOwkJfQogCX0KIAogCXJldHVybiBmb3VuZCA/IDAgOiAtRU5PRU5UOwpAQCAtMjU5OCwxMSAmIzQzOzI2MjEsMTMgQEAgdm9pZCBrdm1fczM5MF91bm1hcF9hbGxfYWRhcHRlcnMoc3RydWN0IGt2bSAqa3ZtKQogCiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtYXAsIHRtcCwgJmFtcDtsb2NhbF9saXN0LCBsaXN0KSB7CiAJCQlsaXN0X2RlbCgmYW1wO21hcC0mZ3Q7bGlzdCk7Ci0JCQlpZHggPSBzcmN1X3JlYWRfbG9jaygmYW1wO2t2bS0mZ3Q7c3JjdSk7Ci0JCQltYXJrX3BhZ2VfZGlydHkoa3ZtLCBtYXAtJmd0O2d1ZXN0X2FkZHIgJmd0OyZndDsgUEFHRV9TSElGVCk7Ci0JCQlzZXRfcGFnZV9kaXJ0eV9sb2NrKG1hcC0mZ3Q7cGFnZSk7Ci0JCQlzcmN1X3JlYWRfdW5sb2NrKCZhbXA7a3ZtLSZndDtzcmN1LCBpZHgpOwotCQkJdW5waW5fdXNlcl9wYWdlKG1hcC0mZ3Q7cGFnZSk7CiYjNDM7CQkJaWYgKG1hcC0mZ3Q7cGlubmVkKSB7CiYjNDM7CQkJCWlkeCA9IHNyY3VfcmVhZF9sb2NrKCZhbXA7a3ZtLSZndDtzcmN1KTsKJiM0MzsJCQkJbWFya19wYWdlX2RpcnR5KGt2bSwgbWFwLSZndDtndWVzdF9hZGRyICZndDsmZ3Q7IFBBR0VfU0hJRlQpOwomIzQzOwkJCQlzZXRfcGFnZV9kaXJ0eV9sb2NrKG1hcC0mZ3Q7cGFnZSk7CiYjNDM7CQkJCXNyY3VfcmVhZF91bmxvY2soJmFtcDtrdm0tJmd0O3NyY3UsIGlkeCk7CiYjNDM7CQkJCXVucGluX3VzZXJfcGFnZShtYXAtJmd0O3BhZ2UpOwomIzQzOwkJCX0KIAkJCWtmcmVlKG1hcCk7CiAJCX0KIAl9CkBAIC0yOTI5LDggJiM0MzsyOTU0LDEyIEBAIHN0YXRpYyBzdHJ1Y3QgczM5MF9tYXBfaW5mbyAqZ2V0X21hcF9pbmZvKHN0cnVjdCBzMzkwX2lvX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCXJldHVybiBOVUxMOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShtYXAsICZhbXA7YWRhcHRlci0mZ3Q7bWFwcywgbGlzdCkgewotCQlpZiAobWFwLSZndDthZGRyID09IGFkZHIpCi0JCQlyZXR1cm4gbWFwOwomIzQzOwkJaWYgKG1hcC0mZ3Q7YWRkciA9PSBhZGRyKSB7CiYjNDM7CQkJaWYgKG1hcC0mZ3Q7cGlubmVkKQomIzQzOwkJCQlyZXR1cm4gbWFwOwomIzQzOwkJCWVsc2UKJiM0MzsJCQkJcmV0dXJuIE5VTEw7CiYjNDM7CQl9CiAJfQogCXJldHVybiBOVUxMOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTA2CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRGVjaXNpb24gZm9yIHRoZSBzMzkwIEtWTSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoICpkb2VzKiBpbnRyb2R1Y2UgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwsIGFuZCB0aGVyZWZvcmUsIGNvdWxkIHBvdGVudGlhbGx5IGJlbmVmaXQgZnJvbSBmdXp6aW5nLiBTcGVjaWZpY2FsbHksIGl0IHRvdWNoZXMgYGFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNgIGFuZCBgYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhgLCB3aGljaCBhcmUga2V5IGFyZWFzIGZvciBLVk0gb24gczM5MC4gSXQmIzM5O3MgbW9kaWZ5aW5nIHRoZSBwaW5uaW5nIGJlaGF2aW9yIG9mIGBrdm1fczM5MF9hZGFwdGVyX21hcGAgYW5kIGBrdm1fczM5MF9hZGFwdGVyX3VubWFwYC4gRXNzZW50aWFsbHksIGl0JiMzOTtzIGFkZGluZyBhIGZhbGxiYWNrIG1lY2hhbmlzbSBmb3Igd2hlbiBsb25nLXRlcm0gcGlubmluZyBmYWlscywgd2hpY2ggaXMgcmVsZXZhbnQgaW4gc2NlbmFyaW9zIGxpa2UgZmlsZS1iYWNrZWQgbWVtb3J5LiBJdCBub3cgdHJpZXMgc2hvcnQgdGVybSBwaW5uaW5nLCBhbmQgdGhlbiB1bnBpbnMgaXQuIFRoaXMgaXMgYSBiZWhhdmlvcmFsIGNoYW5nZSBkZXNpZ25lZCB0byBtYWtlIHRoZSBgS1ZNX1MzOTBfSU9fQURBUFRFUl9NQVBgIGlvY3RsIG1vcmUgcm9idXN0LCBhbmQgaXMgYSBjbGVhciBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbi4KClRoZSBjcml0aWNhbCBxdWVzdGlvbiBub3csIGdpdmVuIHRoZSBzcGVjaWZpYyBjcml0ZXJpYSBJIGhhdmUgdG8gYWRoZXJlIHRvLCBpcyB3aGV0aGVyIHRoaXMgaXMgZnV6emFibGUuIFRoZSBydWxlcyBzcGVjaWZ5IHRoYXQgaWYgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBpdCYjMzk7cyBub3Qgd29ydGggZnV6emluZy4gSG93ZXZlciwgczM5MHggS1ZNICppcyogcmVhY2hhYmxlIOKAkyB3ZSBjYW4gZnV6eiBpdCB1c2luZyBTeXprYWxsZXIuIEV4Y2VsbGVudCwgU3l6a2FsbGVyIGFscmVhZHkgc3VwcG9ydHMgczM5MHgsIHdoaWNoIGlzIGEgYmlnIHRpY2suIFdlIGtub3cgdGhhdCB0aGUgY29kZSBwYXRoIGlzIGFjY2Vzc2libGUuCgpDaGVja2luZyB0aGUgY29uZmlnLCBpdCYjMzk7cyBlbmFibGVkOiBgS1ZNYCBpcyBjb25maWd1cmVkLCBhbmQgdGhlIGFyY2hpdGVjdHVyZSBpcyBgczM5MGAuIFNvIGZyb20gdGhlIGluaXRpYWwgYXNzZXNzbWVudCwgdGhlIHBhdGNoIGlzIGxpa2VseSB3b3J0aCBmdXp6aW5nLgoKTXkgZm9jdXMgc3ltYm9scyBhcmU6IGBrdm1fczM5MF9hZGFwdGVyX21hcGAsIGBrdm1fczM5MF9hZGFwdGVyX3VubWFwYCwgYGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVyc2AsIGFuZCBgZ2V0X21hcF9pbmZvYC4gVGhlIGZpcnN0IHR3byBhcmUgc3RhdGljLCBzbyBJIG5lZWQgdG8gdHJhY2UgdGhlaXIgY2FsbCBzaXRlcyB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGFyZSB0cmlnZ2VyZWQgYW5kIHRodXMgaG93IHRvIGNyYWZ0IGlucHV0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fczM5MF9hZGFwdGVyX21hcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yNDc2PXN0YXRpYyBzdHJ1Y3QgcGFnZSAqcGluX21hcF9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgdTY0IHVhZGRyLFxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjQ5NC1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjQ5NTpzdGF0aWMgaW50IGt2bV9zMzkwX2FkYXB0ZXJfbWFwKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkLCBfX3U2NCBhZGRyKVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNDk2LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTI2NDg9c3RhdGljIGludCBtb2RpZnlfaW9fYWRhcHRlcihzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LFxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjY3Ni1cdFx0XHRkZXYtXHUwMDNla3ZtLVx1MDAzZXN0YXQuaW9fMzkwX2FkYXB0ZXJfbWFwJiM0MzsmIzQzOztcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjY3NzpcdFx0XHRyZXQgPSBrdm1fczM5MF9hZGFwdGVyX21hcChkZXYtXHUwMDNla3ZtLCByZXEuaWQsIHJlcS5hZGRyKTtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjY3OC1cdFx0fSBlbHNlIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDA1CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgdGhlIEkvTyBBZGFwdGVyIE1hcHBpbmcgRmxvdyoqCgpBbHJpZ2h0LCBzbyBgbW9kaWZ5X2lvX2FkYXB0ZXJgIGlzIHRoZSBlbnRyeSBwb2ludCwgYW5kIHRoYXQgc2VlbXMgdG8gdHJpZ2dlciBga3ZtX3MzOTBfYWRhcHRlcl9tYXBgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgY29tcGxldGUgSS9PIGFkYXB0ZXIgbGlmZWN5Y2xlLCBhbmQgbm93IEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvdW50ZXJwYXJ0OiBIb3cgZG9lcyB0aGUgc3lzdGVtIHVubWFwIHRoZSBhZGFwdGVyPyBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgd2hhdCBoYXBwZW5zIHdpdGggYm90aCBtYXBwaW5nIGFuZCB1bm1hcHBpbmcuIFNvLCBJIG5lZWQgdG8gY2hlY2sgYm90aCBgbW9kaWZ5X2lvX2FkYXB0ZXJgIGFuZCBga3ZtX3MzOTBfYWRhcHRlcl91bm1hcGAgdG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gdGhpcyBmbG93LCBwYXJ0aWN1bGFybHkgaG93IHJlc291cmNlcyBhcmUgYWNxdWlyZWQgYW5kIHJlbGVhc2VkLiBJJiMzOTttIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgcmVzb3VyY2UgbGVha3MuIExldCYjMzk7cyBzZWUgaG93IHRoZXkgaW50ZXJhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3MzOTBfYWRhcHRlcl91bm1hcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yNDk1PXN0YXRpYyBpbnQga3ZtX3MzOTBfYWRhcHRlcl9tYXAoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQsIF9fdTY0IGFkZHIpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNTU2LVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyNTU3OnN0YXRpYyBpbnQga3ZtX3MzOTBfYWRhcHRlcl91bm1hcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZCwgX191NjQgYWRkcilcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjU1OC17XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yNjQ4PXN0YXRpYyBpbnQgbW9kaWZ5X2lvX2FkYXB0ZXIoc3RydWN0IGt2bV9kZXZpY2UgKmRldixcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI2NzktXHRcdFx0ZGV2LVx1MDAzZWt2bS1cdTAwM2VzdGF0LmlvXzM5MF9hZGFwdGVyX3VubWFwJiM0MzsmIzQzOztcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjY4MDpcdFx0XHRyZXQgPSBrdm1fczM5MF9hZGFwdGVyX3VubWFwKGRldi1cdTAwM2Vrdm0sIHJlcS5pZCwgcmVxLmFkZHIpO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNjgxLVx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk4MgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBtb2RpZnlfaW9fYWRhcHRlcmAgQ2FsbGVycyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBgbW9kaWZ5X2lvX2FkYXB0ZXJgIGZ1bmN0aW9uLiBUbyB0cnVseSBncmFzcCBpdHMgaW1wbGljYXRpb25zIGFuZCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLCBJIG5lZWQgdG8ga25vdyAqd2hlcmUqIGl0JiMzOTtzIGJlaW5nIGludm9rZWQuIFRoZSBmdW5jdGlvbiYjMzk7cyBpbnRlcm5hbCBsb2dpYyBpcywgb2YgY291cnNlLCBpbXBvcnRhbnQsIGJ1dCBpdHMgY29udGV4dCBpcyBldmVyeXRoaW5nLiBXaGF0JiMzOTtzIHRoZSBjb250cm9sIGZsb3c/IFdoYXQgb3RoZXIgY29tcG9uZW50cyBhcmUgYWZmZWN0ZWQgYXQgdGhlIGNhbGwgc2l0ZXM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyBJIHNob3VsZCBpbW1lZGlhdGVseSBjb25zaWRlciwgZ2l2ZW4gdGhlIG5hdHVyZSBvZiBJL08gYWRhcHRlciBtb2RpZmljYXRpb25zPyBUaGlzIHJlcXVpcmVzIGEgY2xlYXIgY2FsbCBncmFwaCBhbmFseXNpcy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGlkZW50aWZ5aW5nIGV2ZXJ5IGluc3RhbmNlIG9mIHRoYXQgZnVuY3Rpb24gY2FsbC4gSSBuZWVkIHRoZSByYXcgZGF0YSwgbm8gYWJzdHJhY3QgbW9kZWxzIG9yIHRoZW9yaWVzLiBJIG5lZWQgdG8gc2VlIHRoZSBkaXJlY3QgY29kZSBwYXRocy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2RpZnlfaW9fYWRhcHRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yNjM2PXZvaWQga3ZtX3MzOTBfZGVzdHJveV9hZGFwdGVycyhzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNjQ3LVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyNjQ4OnN0YXRpYyBpbnQgbW9kaWZ5X2lvX2FkYXB0ZXIoc3RydWN0IGt2bV9kZXZpY2UgKmRldixcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjY0OS1cdFx0XHQgICAgIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yODM0PXN0YXRpYyBpbnQgZmxpY19zZXRfYXR0cihzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjg2OC1cdGNhc2UgS1ZNX0RFVl9GTElDX0FEQVBURVJfTU9ESUZZOlxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyODY5Olx0XHRyID0gbW9kaWZ5X2lvX2FkYXB0ZXIoZGV2LCBhdHRyKTtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjg3MC1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ5NwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgZnVuY3Rpb246CgoqKkFuYWx5emluZyB0aGUgRW50cnkgUG9pbnQ6IGBmbGljX3NldF9hdHRyYCoqCgpPa2F5LCBzbyBgZmxpY19zZXRfYXR0cmAgaXMgdGhlIHN0YXJ0aW5nIHBvaW50LiBUaGF04oCZcyB3aGVyZSBldmVyeXRoaW5nIGJlZ2lucy4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBJcyB0aGlzIHRoaW5nIHN0YXRpYz8gVW5kZXJzdGFuZGluZyBpdHMgc2NvcGUgaXMgY3J1Y2lhbCByaWdodCBvZmYgdGhlIGJhdC4gS25vd2luZyBpZiBpdCYjMzk7cyBzdGF0aWMgd2lsbCBpbW1lZGlhdGVseSB0ZWxsIG1lIHNvbWV0aGluZyBhYm91dCBpdHMgdmlzaWJpbGl0eSBhbmQgdGhlIG92ZXJhbGwgZGVzaWduIG9mIHRoZSBtb2R1bGUgb3IgbGlicmFyeSBJJiMzOTttIHdvcmtpbmcgd2l0aC4gVGhpcyBjb250ZXh0IGlzIGltcG9ydGFudCBiZWNhdXNlIGlmIGl0JiMzOTtzIHN0YXRpYywgaXQgbGltaXRzIGl0cyBhY2Nlc3MgYW5kIHVzYWdlLCB0aGVyZWJ5LCBhZmZlY3RpbmcgaG93IHRoZSBmdW5jdGlvbiBpcyBpbnRlcmFjdGVkIHdpdGgsIGFuZCB0aGUgd2F5cyB0aGF0IGl0IGNhbiBpbnRlcmFjdCB3aXRoIG90aGVyIG1vZHVsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZsaWNfc2V0X2F0dHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MjgxND1zdGF0aWMgaW50IGZsaWNfYWlzX21vZGVfc2V0X2FsbChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yODMzLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyODM0OnN0YXRpYyBpbnQgZmxpY19zZXRfYXR0cihzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yODM1LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTI5Mjc9c3RydWN0IGt2bV9kZXZpY2Vfb3BzIGt2bV9mbGljX29wcyA9IHtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI5MjktXHQuZ2V0X2F0dHIgPSBmbGljX2dldF9hdHRyLFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyOTMwOlx0LnNldF9hdHRyID0gZmxpY19zZXRfYXR0cixcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjkzMS1cdC5oYXNfYXR0ciA9IGZsaWNfaGFzX2F0dHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAwOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5OTMKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipDb25zaWRlcmluZyBTdGF0aWMgRnVuY3Rpb25zIFdpdGhpbiBPcGVyYXRpb24gU3RydWN0dXJlcyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGZsaWNfc2V0X2F0dHJgIGFuZCBub3RpY2luZyBpdCYjMzk7cyBkZWNsYXJlZCBgc3RhdGljYC4gVGhhdCYjMzk7cyBhIGxpdHRsZSBpbnRlcmVzdGluZywgYmVjYXVzZSBpdCBsaXZlcyB3aXRoaW4gdGhlIGBrdm1fZmxpY19vcHNgIHN0cnVjdHVyZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2VsbCwgdGhhdCYjMzk7cyBub3QgbmVjZXNzYXJpbHkgdW51c3VhbCwgYnV0IEkgc2hvdWxkIHBhdXNlIGFuZCBjb25zaWRlciB3aHkuJiMzNDsgSXMgdGhpcyBpbnRlbmRlZCB0byBiZSBhIHByaXZhdGUgaW1wbGVtZW50YXRpb24gZGV0YWlsLCBvciBpcyB0aGlzIGRlc2lnbiBjb25zdHJhaW5pbmcgaW4gYW55IHdheT8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0aGlzIGFmZmVjdHMgdGhlIHBvdGVudGlhbCBmb3IgZnV0dXJlIGV4dGVuc2lvbiBvciB1c2Ugb3V0c2lkZSB0aGUgaW1tZWRpYXRlIGNvbnRleHQuCgpUaGVuIG15IG1pbmQgc2hpZnRzIHRvIGBrdm1fczM5MF91bm1hcF9hbGxfYWRhcHRlcnNgLiBUaGlzIG9uZSAqaXNuJiMzOTt0KiBgc3RhdGljYC4gU28sIG5vdyBJIG5lZWQgdG8gcmVjb25jaWxlIHRoZXNlIHR3by4gV2h5IHRoZSBkaWZmZXJlbmNlPyBXaGF0IHdhcyB0aGUgZGVzaWduIHJhdGlvbmFsZSBmb3IgdGhlIGNob2ljZXMgaGVyZT8gQXJlIHRoZXkgcmVsYXRlZCBjb25jZXB0dWFsbHk/IElzIG9uZSAqbWVhbnQqIHRvIGJlIHB1YmxpYyB3aGVyZWFzIHRoZSBvdGhlciBpcyBkZWxpYmVyYXRlbHkgaGlkZGVuPyBBcmUgdGhlcmUgYW55IHBlcmZvcm1hbmNlIG9yIG1lbW9yeSBpbXBsaWNhdGlvbnMgYXJpc2luZyBmcm9tIHRoZXNlIGRlY2xhcmF0aW9ucz8gVGhlIGltcGxpY2F0aW9ucyBvZiBzdGF0aWMgdnMuIG5vbi1zdGF0aWMgaXMgc3VidGxlLCBidXQgaW1wb3J0YW50LiBJIHNob3VsZCBpbnZlc3RpZ2F0ZSBib3RoIGRlY2xhcmF0aW9ucyB0byB1bmRlcnN0YW5kIHRoZSBkZXNpZ24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVycyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MjU1Nz1zdGF0aWMgaW50IGt2bV9zMzkwX2FkYXB0ZXJfdW5tYXAoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQsIF9fdTY0IGFkZHIpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNjAzLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyNjA0OnZvaWQga3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzKHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjYwNS17XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yNjM2PXZvaWQga3ZtX3MzOTBfZGVzdHJveV9hZGFwdGVycyhzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNjM5LVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyNjQwOlx0a3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzKGt2bSk7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI2NDEtXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTI1Nzk9c3RhdGljIGludCBrdm1fczM5MF9oYW5kbGVfcHYoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3B2X2NtZCAqY21kKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yNTk0LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjI1OTU6XHRcdGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVycyhrdm0pO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTI1OTYtXHRcdG1tYXBfd3JpdGVfbG9jayhrdm0tXHUwMDNlbW0pO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaD01NjM9dm9pZCBrdm1fczM5MF9naWJfZGVzdHJveSh2b2lkKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaDo1NjQ6dm9pZCBrdm1fczM5MF91bm1hcF9hbGxfYWRhcHRlcnMoc3RydWN0IGt2bSAqa3ZtKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaC01NjUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAwOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4OTkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqQW5hbHl6aW5nIEtWTS9zMzkwIEFkYXB0ZXIgVW5tYXBwaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgYWRhcHRlcnMgYXJlIHVubWFwcGVkIHdpdGhpbiB0aGUgS1ZNL3MzOTAgY29udGV4dC4gSXQgc2VlbXMgYGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVyc2AgZ2V0cyB0cmlnZ2VyZWQgaW4gdHdvIHNwZWNpZmljIHBsYWNlczogYGt2bV9zMzkwX2Rlc3Ryb3lfYWRhcHRlcnNgIGFuZCBga3ZtX3MzOTBfaGFuZGxlX3B2YC4gUmlnaHQgb2ZmIHRoZSBiYXQsIGBrdm1fczM5MF9oYW5kbGVfcHZgIHNlZW1zIGxpa2UgYSBwcmV0dHkgaW1wb3J0YW50IHN5bWJvbCB0byBrZXkgaW4gb24g4oCTIGl0JiMzOTtzIGxpa2VseSBhIGNlbnRyYWwgcG9pbnQgb2YgaW50ZXJhY3Rpb24uIE5vdywgdGhlIHVubWFwcGluZyBpdHNlbGYgaXMgdGhlIGdvYWwsIHNvIEkgc2hvdWxkIHNlZSBob3cgdGhpcyBpcyBkb25lLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgbW9yZSwgc28gbGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgZ2V0X21hcF9pbmZvYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2V0X21hcF9pbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTI5MzY9c3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2luZF9iaXQoX191NjQgYWRkciwgdW5zaWduZWQgbG9uZyBiaXRfbnIsIGJvb2wgc3dhcClcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI5NDctXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI5NDg6c3RhdGljIHN0cnVjdCBzMzkwX21hcF9pbmZvICpnZXRfbWFwX2luZm8oc3RydWN0IHMzOTBfaW9fYWRhcHRlciAqYWRhcHRlcixcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjk0OS1cdFx0XHRcdFx0ICB1NjQgYWRkcilcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTI5Njc9c3RhdGljIGludCBhZGFwdGVyX2luZGljYXRvcnNfc2V0KHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI5ODAtXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZhZGFwdGVyLVx1MDAzZW1hcHNfbG9jaywgZmxhZ3MpO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyOTgxOlx0aW5kX2luZm8gPSBnZXRfbWFwX2luZm8oYWRhcHRlciwgYWRhcHRlcl9pbnQtXHUwMDNlaW5kX2FkZHIpO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yOTgyLVx0aWYgKCFpbmRfaW5mbykge1xuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzAwMy1cdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmFkYXB0ZXItXHUwMDNlbWFwc19sb2NrLCBmbGFncyk7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjMwMDQ6XHRzdW1tYXJ5X2luZm8gPSBnZXRfbWFwX2luZm8oYWRhcHRlciwgYWRhcHRlcl9pbnQtXHUwMDNlc3VtbWFyeV9hZGRyKTtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzAwNS1cdGlmICghc3VtbWFyeV9pbmZvKSB7XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0zMDMwPXN0YXRpYyBpbnQgYWRhcHRlcl9pbmRpY2F0b3JzX3NldF9mYXN0KHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTMwNDAtXHRzcGluX2xvY2soXHUwMDI2YWRhcHRlci1cdTAwM2VtYXBzX2xvY2spO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozMDQxOlx0aW5kX2luZm8gPSBnZXRfbWFwX2luZm8oYWRhcHRlciwgYWRhcHRlcl9pbnQtXHUwMDNlaW5kX2FkZHIpO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMDQyLVx0aWYgKCFpbmRfaW5mbykge1xuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzA0OS1cdFx0c2V0X2JpdChiaXQsIG1hcCk7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjMwNTA6XHRzdW1tYXJ5X2luZm8gPSBnZXRfbWFwX2luZm8oYWRhcHRlciwgYWRhcHRlcl9pbnQtXHUwMDNlc3VtbWFyeV9hZGRyKTtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzA1MS1cdGlmICghc3VtbWFyeV9pbmZvKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAwOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NTEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBTdGF0aWMgSW5kaWNhdG9yIFNldHMqKgoKQWxyaWdodCwgc28gYGFkYXB0ZXJfaW5kaWNhdG9yc19zZXRgIGFuZCBgYWRhcHRlcl9pbmRpY2F0b3JzX3NldF9mYXN0YCBhcmUgZGVjbGFyZWQgYXMgc3RhdGljLiBIbW0sIHRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZyBmb3IgbWUuIFN0YXRpYyB2YXJpYWJsZXMgbWVhbiB0aGV5IGhhdmUgZmlsZSBzY29wZSwgYW5kIHVzdWFsbHkgcmVwcmVzZW50IHNvbWUga2luZCBvZiBzaGFyZWQgc3RhdGUgb3IgbG9va3VwIHRhYmxlIHdpdGhpbiB0aGUgY29tcGlsZWQgbW9kdWxlLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGFyZSBiZWluZyB1c2VkLiBXaGVyZSBhcmUgdGhlc2UgdGhpbmdzICphY3R1YWxseSogY2FsbGVkPyBJIG5lZWQgdG8gdHJhY2UgdGhvc2UgY2FsbHMgdG8gdW5kZXJzdGFuZCB0aGVpciBmdW5jdGlvbiBhbmQgd2hhdCBjb250ZXh0IHRoZXkgYXJlIHVzZWQgd2l0aGluLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGNvZGUgYW5kIGZpbmQgYWxsIHRoZSByZWZlcmVuY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZGFwdGVyX2luZGljYXRvcnNfc2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTI5NDg9c3RhdGljIHN0cnVjdCBzMzkwX21hcF9pbmZvICpnZXRfbWFwX2luZm8oc3RydWN0IHMzOTBfaW9fYWRhcHRlciAqYWRhcHRlcixcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI5NjYtXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI5Njc6c3RhdGljIGludCBhZGFwdGVyX2luZGljYXRvcnNfc2V0KHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjk2OC1cdFx0XHRcdCAgc3RydWN0IHMzOTBfaW9fYWRhcHRlciAqYWRhcHRlcixcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTMwMjktXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjMwMzA6c3RhdGljIGludCBhZGFwdGVyX2luZGljYXRvcnNfc2V0X2Zhc3Qoc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMDMxLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBzMzkwX2lvX2FkYXB0ZXIgKmFkYXB0ZXIsXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0zMDczPXN0YXRpYyBpbnQgc2V0X2FkYXB0ZXJfaW50KHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLFxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzA4Ny1cdFx0cmV0dXJuIC0xO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozMDg4Olx0cmV0ID0gYWRhcHRlcl9pbmRpY2F0b3JzX3NldChrdm0sIGFkYXB0ZXIsIFx1MDAyNmUtXHUwMDNlYWRhcHRlcik7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTMwODktXHRpZiAoKHJldCBcdTAwM2UgMCkgXHUwMDI2XHUwMDI2ICFhZGFwdGVyLVx1MDAzZW1hc2tlZCkge1xuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9Mzc0Mz1pbnQga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYyhzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM3NjktXHRzZXRiaXQgPSAxO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozNzcwOlx0cmV0ID0gYWRhcHRlcl9pbmRpY2F0b3JzX3NldF9mYXN0KGt2bSwgYWRhcHRlciwgXHUwMDI2ZS1cdTAwM2VhZGFwdGVyLCBzZXRiaXQpO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNzcxLVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM3ODAtXHRcdHNldGJpdCA9IDA7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjM3ODE6XHRcdGFkYXB0ZXJfaW5kaWNhdG9yc19zZXRfZmFzdChrdm0sIGFkYXB0ZXIsIFx1MDAyNmUtXHUwMDNlYWRhcHRlciwgc2V0Yml0KTtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzc4Mi1cdFx0cmV0dXJuIC1FV09VTERCTE9DSztcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM3OTAtXHRcdFx0c2V0Yml0ID0gMDtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6Mzc5MTpcdFx0XHRhZGFwdGVyX2luZGljYXRvcnNfc2V0X2Zhc3Qoa3ZtLCBhZGFwdGVyLCBcdTAwMjZlLVx1MDAzZWFkYXB0ZXIsIHNldGJpdCk7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM3OTItXHRcdFx0a2ZyZWUoaW50aSk7XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zODEzLVx0XHRzZXRiaXQgPSAwO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozODE0Olx0XHRhZGFwdGVyX2luZGljYXRvcnNfc2V0X2Zhc3Qoa3ZtLCBhZGFwdGVyLCBcdTAwMjZlLVx1MDAzZWFkYXB0ZXIsIHNldGJpdCk7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM4MTUtXHRcdGtmcmVlKGludGkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODk2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqSW52ZXN0aWdhdGluZyBLVk0gb24gczM5MCBBUEkgQ2FsbHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9uczogYHNldF9hZGFwdGVyX2ludGAsIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYCwgYW5kIGBrdm1fczM5MF9oYW5kbGVfcHZgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGVpciByZWxhdGlvbnNoaXAsIGVzcGVjaWFsbHkgZnJvbSBhbiBBUEkgcGVyc3BlY3RpdmUuIEl0IHNlZW1zIGBzZXRfYWRhcHRlcl9pbnRgIGlzIGNhbGxpbmcgYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgLiBUaGUgaW50ZXJlc3RpbmcgcG9pbnQgaXMgdGhhdCBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2AgaXMgYSBwdWJsaWNseSBhY2Nlc3NpYmxlLCBub24tc3RhdGljIEFQSSBlbnRyeSBwb2ludCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMgYW5kIGlmIGl0IGlzIGJlaW5nIGNhbGxlZCBmcm9tIG90aGVyIG1vZHVsZXMgb3Igb25seSBmcm9tIGBzZXRfYWRhcHRlcl9pbnRgLiBGdXJ0aGVyLCBpdCBsb29rcyBsaWtlIGBrdm1fczM5MF9oYW5kbGVfcHZgIGlzIGFub3RoZXIgcHVibGljbHkgYWNjZXNzaWJsZSBBUEkgZW50cnkgcG9pbnQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGZvciBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRob3NlIHR3byBBUEkgZW50cnkgcG9pbnRzIGFuZCB0aGVpciBpbnRlcmFjdGlvbnMuIEJlZm9yZSBJIGdvIHRvbyBkZWVwIGludG8gdGhlIGNvZGUgdGhvdWdoLCBsZXQmIzM5O3MgbWFrZSBzdXJlIEtWTSBpcyBldmVuIGVuYWJsZWQgZm9yIHMzOTAuIEkgd2lsbCBkb3VibGUgY2hlY2sgdGhlIEtjb25maWcgc2V0dGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9LY29uZmlnPTE3PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMTgtXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6MTk6Y29uZmlnIEtWTVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTIwLVx0ZGVmX3RyaXN0YXRlIHlcbi0tXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDYtXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDc6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDgtXHRib29sIFwmIzM0O1VzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0MzkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgbGlrZSB5b3Vyc2VsZjoKCioqQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5IEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24sIGFuZCB0aGUga2V5IHRoaW5nIEkmIzM5O20gcGlja2luZyB1cCBvbiBpcyB0aGF0IGl0JiMzOTtzIHNldCB0byBgS1ZNYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7UmlnaHQsIEtWTS4mIzM0OyBCdXQgdGhlbiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuIGBLVk1gIGlzbiYjMzk7dCBqdXN0IGEgc3RhbmRhbG9uZSB0aGluZzsgaXQgKmRlcGVuZHMqIG9uIHNvbWV0aGluZyBlbHNlLiBBbmQgdGhhdCBzb21ldGhpbmcgZWxzZSwgaW4gdGhpcyBjYXNlLCBpcyBjbGVhcmx5IGBWSVJUVUFMSVpBVElPTmAuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcHJlcmVxdWlzaXRlLiBJJiMzOTttIHBhcnNpbmcgdGhpcyBhcyBhIGxheWVyZWQgZGVwZW5kZW5jeTogdG8gZ2V0IEtWTSB3b3JraW5nLCBWSVJUVUFMSVpBVElPTiBoYXMgdG8gYmUgcHJlc2VudCwgZW5hYmxlZCwgYW5kIGZ1bmN0aW9uaW5nLiBPdGhlcndpc2UsIGl0IGlzIGdvaW5nIHRvIGNyYXNoIGFuZCBidXJuISBJIGNhbiBhbHJlYWR5IHNlZSBzb21lIHBvdGVudGlhbCB0cm91Ymxlc2hvb3RpbmcgcGF0aHMgb3BlbmluZyB1cCBpbiBteSBtaW5kLCBhbmQgdGhpbmtpbmcgdGhyb3VnaCB0aGVtLCBiYXNlZCBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IFZJUlRVQUxJWkFUSU9OIGlzIHByZXNlbnQuIElmIGl0ICppc24mIzM5O3QqLCB0aGF0JiMzOTtzIHRoZSBmaXJzdCBwbGFjZSB0byBsb29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVklSVFVBTElaQVRJT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9LY29uZmlnPTU9c291cmNlIFwmIzM0O3ZpcnQva3ZtL0tjb25maWdcJiMzNDtcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy02LVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjc6bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTgtXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAwOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzk3CgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMjYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLVk0gQ29uZmlndXJhdGlvbiBhbmQgUG90ZW50aWFsIEZvY3VzIFN5bWJvbHMqKgoKT2theSwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIEtWTSBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgcmVsYXRpbmcgdG8gczM5MCBhcmNoaXRlY3R1cmUsIEkgYmVsaWV2ZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgZm9yIGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhpcyBjb250ZXh0LiBXZSB3YW50IHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgd2UgY2FuIHBvdGVudGlhbGx5IHVzZSBmb3Igb3VyIGFuYWx5c2lzLgoKQWxyaWdodCwgYSBxdWljayBzY2FuIHJldmVhbHMgdGhhdCBga3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzYCBpcyBjYWxsZWQgZnJvbSBga3ZtX3MzOTBfZGVzdHJveV9hZGFwdGVyc2AgYW5kIGFsc28gYGt2bV9zMzkwX2hhbmRsZV9wdmAuIGBrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzYCwgaW4gdHVybiwgaXMgY2FsbGVkIGZyb20gYGt2bV9hcmNoX2Rlc3Ryb3lfdm1gLiBUaGVuIHRoZXJlJiMzOTtzIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYCwgd2hpY2ggaXMgcGFydCBvZiBnZW5lcmljIEtWTSBjb2RlLgoKQmFzZWQgb24gdGhpcyBjYWxsIGdyYXBoLCB0aGUgbGlrZWx5IGZvY3VzIHN5bWJvbHMsIHRoZSBmdW5jdGlvbnMgdGhhdCBzZWVtIG1vc3QgaW50ZXJlc3RpbmcsIGFyZTogYGt2bV9zMzkwX2hhbmRsZV9wdmAsIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYCwgYW5kIGBrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzYC4KCkhvd2V2ZXIsIHdhaXQgYSBzZWNvbmQuIGBrdm1fczM5MF91bm1hcF9hbGxfYWRhcHRlcnNgIGlzLCBpbiBmYWN0LCBub24tc3RhdGljLiBUaGlzIHNpbXBsaWZpZXMgdGhpbmdzLiBUaGF0IG9wZW5zIHRoZSBkb29yIHRvIHVzaW5nIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkgaW4gb3VyIGFuYWx5c2lzIHdpdGhvdXQgZGlnZ2luZyBkZWVwZXIgaW50byBpdHMgY2FsbGVycy4gV2UgY2FuIGp1c3QgZm9jdXMgb24gYGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVyc2AgYW5kIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYC4KCk5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNvbmZpcm0gd2hldGhlciBga3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzYCBpcyBleHBvcnRlZC4gVGhhdCYjMzk7bGwgYmUgdGhlIGtleSB0byBpdCBhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qa3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQ5NQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDM5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBUaG91Z2h0IFByb2Nlc3Mgb24gSWRlbnRpZnlpbmcgS2V5IFN5bWJvbHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3Qgc3ltYm9sIHRvIHJlcHJlc2VudCB0aGUgZnVuY3Rpb25hbGl0eS4gVGhlIGdvYWwsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeSBwb2ludHMuIFJpZ2h0LCByaWdodC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgY29kZSBjaGFuZ2VzIHRvdWNoIGBrdm1fczM5MF9hZGFwdGVyX21hcGAgYW5kIGBrdm1fczM5MF9hZGFwdGVyX3VubWFwYC4gVGhvc2UgYXJlIGNhbGxlZCBieSBgbW9kaWZ5X2lvX2FkYXB0ZXJgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBmcm9tIGBmbGljX3NldF9hdHRyYC4gYGZsaWNfc2V0X2F0dHJgIGlzIHBhcnQgb2YgYGt2bV9mbGljX29wc2AuIEFuZCBsb29raW5nIGF0IHRoZSBicm9hZGVyIGNvbnRleHQsIGBmbGljX3NldF9hdHRyYCBoYW5kbGVzIHRoZSBgS1ZNX1MzOTBfSU9fQURBUFRFUl9NQVBgIGFuZCBgS1ZNX1MzOTBfSU9fQURBUFRFUl9VTk1BUGAgaW9jdGxzLgoKU28sICppbml0aWFsbHkqLCBteSB0aGlua2luZyBpcyB0aGF0IGBmbGljX3NldF9hdHRyYCBzZWVtcyBsaWtlIGEgZ29vZCBjYW5kaWRhdGUsIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIHN0YXRpYywgYmVjYXVzZSBpdCYjMzk7cyBlc3NlbnRpYWxseSBhbiBlbnRyeSBwb2ludCB0aHJvdWdoIHRob3NlIG9wcy4gQnV0IHdhaXQsIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHNheXMgJiMzNDtQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMmIzM0Oy4gSXMgdGhlcmUgYSBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgKmNhbGxzKiBgZmxpY19zZXRfYXR0cmA/IE5vcGUsIGl0JiMzOTtzIGludm9rZWQgdGhyb3VnaCBhIGZ1bmN0aW9uIHBvaW50ZXIuIFNvIHRoYXQmIzM5O3Mgb3V0LiBJIGNhbiYjMzk7dCBpbmNsdWRlIG9wcyBlaXRoZXIuCgpBbHJpZ2h0LCB3aGF0IGVsc2UgaXMgcmVsZXZhbnQ/IFdlIGNvdWxkIGluY2x1ZGUgYGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVyc2AgYW5kIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYC4KCkJ1dCwgb2gsIHJpZ2h0ISBgZmxpY19zZXRfYXR0cmAgKmlzKiBzdGF0aWMuIEhtbSwgdGhlcmUmIzM5O3MgYGt2bV9zMzkwX2hhbmRsZV9wdmAuIFRoYXQgY2FsbHMgYGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVyc2AuCgpTbywgaXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBzdWl0YWJsZSBub24tc3RhdGljIGFuZCBub3QgaW4tbGluZWQgZnVuY3Rpb24gdG8gYmUgaW5jbHVkZWQgd291bGQgYmUgYGt2bV9zMzkwX2hhbmRsZV9wdmAuIEFuZCBJIHNob3VsZCBhbHNvIGtlZXAgYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgIGluIG1pbmQuCgpUaW1lIHRvIGNoZWNrIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MzY4NT1pbnQgX19pbml0IGt2bV9zMzkwX2dpYl9pbml0KHU4IG5pc2MpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNzQwLS8qXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjM3NDE6ICoga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYzogZmFzdC1wYXRoIGZvciBpcnFmZCBpbmplY3Rpb25cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzc0Mi0gKi9cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6Mzc0MzppbnQga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYyhzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzc0NC1cdFx0XHQgICAgICBzdHJ1Y3Qga3ZtICprdm0sIGludCBpcnFfc291cmNlX2lkLCBpbnQgbGV2ZWwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAwOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjQyCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIEtWTS9zMzkwIEludGVycnVwdCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBpdCYjMzk7cyAqbm90KiBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCYjMzk7cyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IHN1Z2dlc3RzIGl0JiMzOTtzIGxpa2VseSBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoZSBzcGVjaWZpYyBmaWxlIGl0JiMzOTtzIGRlZmluZWQgaW4uIFRoaXMgcHJvYmFibHkgbWVhbnMgaXQmIzM5O3MgYSBwdWJsaWNseSBhY2Nlc3NpYmxlIGZ1bmN0aW9uLCBhdCBsZWFzdCB3aXRoaW4gdGhlIEtWTS9zMzkwIGFyY2hpdGVjdHVyZS4gV2UgbmVlZCB0byBrZWVwIHRoaXMgaW4gbWluZCBhcyB3ZSB0cmFjZSBob3cgaW50ZXJydXB0IGluamVjdGlvbiBpcyBoYW5kbGVkLiBUaGlzIG5vbi1zdGF0aWMgbmF0dXJlIGJyb2FkZW5zIHRoZSBzY29wZSBvZiB3aGVyZSBwb3RlbnRpYWwgaXNzdWVzIGNvdWxkIGJlIGludHJvZHVjZWQsIG9yIHdoZXJlIHdlIGNvdWxkIG9wdGltaXplLgoKTm93LCBsZXQmIzM5O3MgcGl2b3QgYW5kIHRha2UgYSBsb29rIGF0IGBrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzYC4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgdGhlIGRlc3RydWN0aW9uIG9mIGFkYXB0ZXJzIHdpbGwgaGF2ZSBzb21lIGludGVycGxheSB3aXRoIGhvdyBpbnRlcnJ1cHRzIGFyZSBtYW5hZ2VkLiBQZXJoYXBzIHRoZSBjbGVhbnVwIHJvdXRpbmVzIGZvciB0aGUgYWRhcHRlcnMgcmVsZWFzZSBvciByZS1jb25maWd1cmUgSVJRcy4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYWRhcHRlcnMgaW50ZXJhY3Qgd2l0aCB0aGUgaGFyZHdhcmUgYW5kIHRoZSB2aXJ0dWFsIG1hY2hpbmUmIzM5O3MgaW50ZXJydXB0IGNvbnRyb2xsZXIgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZmxvdyBvZiBpbnRlcnJ1cHQgZXZlbnRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgYWRhcHRlcnMgbWlnaHQgYmUgYSBzb3VyY2Ugb2YgaW50ZXJydXB0IG1hc2tpbmcsIGRlLWFzc2VydGlvbiwgb3IgcmVkaXJlY3Rpb24uIFRoZXJlIGNvdWxkIGJlIGNyaXRpY2FsIGxvZ2ljIGluIHRoZXJlIGZvciBlbnN1cmluZyBpbnRlcnJ1cHRzIGFyZSBwcm9wZXJseSBoYW5kbGVkIGR1cmluZyBzaHV0ZG93bi4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IGNvbm5lY3Rpb24gZXhpc3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yNjA0PXZvaWQga3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI2MzUtXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI2MzY6dm9pZCBrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzKHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjYzNy17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTM0Mjg9dm9pZCBrdm1fYXJjaF9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzQ1MS1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylrdm0tXHUwMDNlYXJjaC5zaWVfcGFnZTIpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM0NTI6XHRrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzKGt2bSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzQ1My1cdGt2bV9zMzkwX2NsZWFyX2Zsb2F0X2lycXMoa3ZtKTtcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg9NTQ2PWludCBwc3dfZXh0aW50X2Rpc2FibGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg6NTQ3OnZvaWQga3ZtX3MzOTBfZGVzdHJveV9hZGFwdGVycyhzdHJ1Y3Qga3ZtICprdm0pO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oLTU0OC1pbnQga3ZtX3MzOTBfZXh0X2NhbGxfcGVuZGluZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ3MwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtWTS9zMzkwIEFkYXB0ZXIgTW9kaWZpY2F0aW9uIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzYC4gSXQmIzM5O3Mgbm9uLXN0YXRpYywgd2hpY2ggaXMgZ29vZC4gVGhhdCYjMzk7cyBhIHBvaW50IGluIGl0cyBmYXZvciwgYnV0IGxldCYjMzk7cyBzZWUgaG93IGl0IGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuIE15IHRoaW5raW5nIGlzLCBob3cgaXMgdGhpcyBhY3R1YWxseSB0cmlnZ2VyZWQ/CgpOb3cgSSYjMzk7bSBsb29raW5nIGF0IGBmbGljX3NldF9hdHRyYC4gSXQgaGFuZGxlcyBgS1ZNX0RFVl9GTElDX0FEQVBURVJfTU9ESUZZYCwgd2hpY2ggaXMgaW1wb3J0YW50IGJlY2F1c2UgKnRoYXQmIzM5O3MqIHRoZSBpb2N0bCB0aGF0IGtpY2tzIG9mZiBga3ZtX3MzOTBfYWRhcHRlcl9tYXBgIGFuZCBga3ZtX3MzOTBfYWRhcHRlcl91bm1hcGAuIEV2ZW4gdGhvdWdoIGBmbGljX3NldF9hdHRyYCAqaXMqIHN0YXRpYywgaXQgc2VlbXMgdG8gYmUgdGhlIG1haW4gcG9pbnQgb2YgZW50cnkgZm9yIHRoZSBhZGFwdGVyIG1vZGlmaWNhdGlvbiBsb2dpYy4gSXTigJlzIGRlZmluaXRlbHkgd2hlcmUgdGhlIGFjdGlvbiBzdGFydHMgaW4gdGVybXMgb2YgbW9kaWZ5aW5nIHRoZSBhZGFwdGVycy4gU28sIGJhc2VkIG9uIHRoZSBmYWN0IHRoYXQgdGhlIGNoYW5nZXMgc3RhcnQgaGVyZSwgSSYjMzk7bSBnb2luZyB0byBpbmNsdWRlIGl0LgoKV2FpdCBhIHNlY29uZOKApiBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nLiBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBwcmVmZXJzICpub24tc3RhdGljLCBub24taW5saW5lZCogZW50cnkgcG9pbnRzLiBBbmQgdGhlbiBpdCBnb2VzIG9uIHRvIGhpZ2hsaWdodCB0aGF0ICpzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyogd2hpY2ggYXJlIHVzdWFsbHkgaW5saW5lZCwgbGFjayBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBCdXQgYGZsaWNfc2V0X2F0dHJgIGlzIGEgKmZ1bmN0aW9uIHBvaW50ZXIqIGluc2lkZSBvZiBhIHN0cnVjdCEgVGhlcmVmb3JlLCBpdCBzaG91bGQgKm5vdCogYmUgaW5saW5lZC4gSXQgaGFzIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIE9rYXksIHRoYXQgY2hhbmdlcyB0aGluZ3MuCgpPa2F5LCBuZXh0IEkmIzM5O2xsIG1vdmUgb24gdG8gY2hlY2sgYGt2bV9zMzkwX2hhbmRsZV9wdmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9zMzkwX2hhbmRsZV9wdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yNDQ2PXN0YXRpYyBpbnQga3ZtX3MzOTBfY3B1c190b19wdihzdHJ1Y3Qga3ZtICprdm0sIHUxNiAqcmMsIHUxNiAqcnJjKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yNDc3LSAqL1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjI0Nzg6c3RhdGljIHNzaXplX3Qga3ZtX3MzOTBfaGFuZGxlX3B2X2luZm8oc3RydWN0IGt2bV9zMzkwX3B2X2luZm8gKmluZm8pXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjQ3OS17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTI1MTc9c3RhdGljIGludCBrdm1fczM5MF9wdl9kbXAoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3B2X2NtZCAqY21kLFxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yNTc4LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjI1Nzk6c3RhdGljIGludCBrdm1fczM5MF9oYW5kbGVfcHYoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3B2X2NtZCAqY21kKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTI1ODAte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yNzY0LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjI3NjU6XHRcdGRhdGFfbGVuID0ga3ZtX3MzOTBfaGFuZGxlX3B2X2luZm8oXHUwMDI2aW5mbyk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjc2Ni1cdFx0aWYgKGRhdGFfbGVuIFx1MDAzYyAwKSB7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTI5MjU9aW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMDQwLVx0XHQvKiBtdXN0IGJlIGNhbGxlZCB3aXRob3V0IGt2bS1cdTAwM2Vsb2NrICovXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzA0MTpcdFx0ciA9IGt2bV9zMzkwX2hhbmRsZV9wdihrdm0sIFx1MDAyNmFyZ3MpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMwNDItXHRcdGlmIChjb3B5X3RvX3VzZXIoYXJncCwgXHUwMDI2YXJncywgc2l6ZW9mKGFyZ3MpKSkge1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01NDMwPWxvbmcga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLFxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NDc0LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU0NzU6c3RhdGljIGludCBrdm1fczM5MF9oYW5kbGVfcHZfdmNwdV9kdW1wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NDc2LVx0XHRcdFx0XHRzdHJ1Y3Qga3ZtX3B2X2NtZCAqY21kKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01NTE3PWxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTcxNS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1NzE2Olx0XHRyID0ga3ZtX3MzOTBfaGFuZGxlX3B2X3ZjcHVfZHVtcCh2Y3B1LCBcdTAwMjZjbWQpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU3MTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDMxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEtWTS9zMzkwIENvZGUgU3RydWN0dXJlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkgc2VlIHRoYXQgYGt2bV9zMzkwX2hhbmRsZV9wdmAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIGJ1dCB3aGF0JiMzOTtzIGludGVyZXN0aW5nIGlzIHRoYXQgaXQgY2FsbHMgYGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVyc2AuIFRoYXQmIzM5O3MgYSBrZXkgY29ubmVjdGlvbiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLiBBbHNvLCBga3ZtX2FyY2hfdm1faW9jdGxgIGlzIG5vbi1zdGF0aWMgYW5kICphbHNvKiBjYWxscyBga3ZtX3MzOTBfaGFuZGxlX3B2YC4gVGhhdCYjMzk7cyBhIGNsZWFyIGNvbnRyb2wgZmxvdyBwYXRoLCB3aGljaCBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBtb3N0IHJlbGV2YW50IHN5bWJvbHMgdG8gZm9jdXMgb24gaGVyZSBhcmUgZGVmaW5pdGVseTogYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgLCBga3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzYCwgYW5kIGBrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBjcml0aWNhbCBwb2ludHMgb2YgaW50ZXJlc3QgcmlnaHQgbm93LgoKSGFuZyBvbiBhIHNlY29uZOKApiBJJiMzOTt2ZSBnb3QgdG8gcmV2aXNpdCB0aGUgYGZsaWNfc2V0X2F0dHJgIGZ1bmN0aW9uLiBJdCYjMzk7cyBzdGF0aWMsIGJ1dCBpdCAqaXMqIHRoZSBpb2N0bCBoYW5kbGVyIGZvciB0aGUgZGV2aWNlLiBUaGF0JiMzOTtzIGEgYml0IG9mIGEgc3VycHJpc2UsIGJ1dCBJIGtub3cgaXQmIzM5O3MgdXNlZCB3aXRoIGBrdm1fZGV2aWNlX29wc2AgYnkgdGhlIGdlbmVyaWMgS1ZNIGNvZGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3Qgb3Zlcmxvb2sgYW55IHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgdGhlcmUuIEkgY2FuJiMzOTt0IHRoaW5rIG9mIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiBhdCB0aGUgbW9tZW50LCBidXQgdGhhdCBkb2VzbiYjMzk7dCBtZWFuIGl0IGRvZXNuJiMzOTt0IGV4aXN0LgoKU28sIEkmIzM5O20gZ29pbmcgdG8gc29saWRpZnkgbXkgZm9jdXMgb24gdGhvc2UgdGhyZWUgaW5pdGlhbCBzeW1ib2xzOiBga3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzYCwgYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgLCBhbmQgYGt2bV9zMzkwX2Rlc3Ryb3lfYWRhcHRlcnNgLiBJIG1pZ2h0IG5lZWQgdG8gY2lyY2xlIGJhY2sgdG8gYGZsaWNfc2V0X2F0dHJgLCBidXQgdGhvc2UgdGhyZWUgc2VlbSB0aGUgbW9zdCBpbXBvcnRhbnQgcmlnaHQgbm93LgoKRmluYWxseSwganVzdCBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBiZSBjb21wbGV0ZS4gVGhpcyBwYXRjaCBtb2RpZmllcyBgYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY2AuIEkga25vdyB0aGF0IHRoaXMgZmlsZSBpcyBvbmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19LVk1gIGlzIGVuYWJsZWQsIHNvIEkmIzM5O20gY292ZXJlZCBvbiB0aGUgY29uZmlndXJhdGlvbiBmcm9udC4gRXhjZWxsZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnRlcnJ1cHQubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9NYWtlZmlsZT04PWNjZmxhZ3MteSA6PSAtSXZpcnQva3ZtIC1JYXJjaC9zMzkwL2t2bVxuYXJjaC9zMzkwL2t2bS9NYWtlZmlsZS05LVxuYXJjaC9zMzkwL2t2bS9NYWtlZmlsZToxMDprdm0teSAmIzQzOz0ga3ZtLXMzOTAubyBpbnRlcmNlcHQubyBpbnRlcnJ1cHQubyBwcml2Lm8gc2lncC5vXG5hcmNoL3MzOTAva3ZtL01ha2VmaWxlLTExLWt2bS15ICYjNDM7PSBkaWFnLm8gZ2FjY2Vzcy5vIGd1ZXN0ZGJnLm8gdnNpZS5vIHB2Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5NjEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtWTSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGJ1aWxkIHN5c3RlbSBhbmQgY29uZmlybWluZyBhIGZldyB0aGluZ3MuIEZpcnN0LCB5ZXMsIGBpbnRlcnJ1cHQub2AgaXMgZGVmaW5pdGVseSBwdWxsZWQgaW4gYnkgYGt2bS15YC4gVGhhdCYjMzk7cyBleHBlY3RlZCwgZ2l2ZW4gaXRzIHJvbGUuIE5leHQsIHRoZSBvdmVyYWxsIGNvbmZpZyBmb3IgdGhpcyBtb2R1bGUgaXMgaW5kZWVkIGBLVk1gLiBOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXM6IERvZXMgYEtWTWAgZGVwZW5kIG9uIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyBvciBmZWF0dXJlcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyB0byBmdWxseSBncmFzcCBob3cgdGhpcyBhbGwgZml0cyB0b2dldGhlciBhbmQgcGlucG9pbnQgcG90ZW50aWFsIHBvaW50cyBvZiBpbXBhY3QuIExldCYjMzk7cyBkaWcgZGVlcGVyIGludG8gdGhlIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9LY29uZmlnPTE3PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMTgtXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6MTk6Y29uZmlnIEtWTVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTIwLVx0ZGVmX3RyaXN0YXRlIHlcbi0tXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDYtXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDc6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDgtXHRib29sIFwmIzM0O1VzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzMjIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipUaGUgUGl2b3RhbCBSb2xlIG9mIFZpcnR1YWxpemF0aW9uKioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMgbWF0dGVyLCB3aGF0ZXZlciAmIzM0O2l0JiMzNDsgaXMsIGhpbmdlcyBvbiB0aGUgdmVyeSBuYXR1cmUgYW5kIGltcGxlbWVudGF0aW9uIG9mIGBWSVJUVUFMSVpBVElPTmAuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGluZnJhc3RydWN0dXJlLCBhcHBsaWNhdGlvbnMsIHJlc291cmNlc+KApiBldmVyeXRoaW5nLiBUaGUgbnVhbmNlcyBvZiB0aGUgc3BlY2lmaWMgdmlydHVhbGl6YXRpb24gdGVjaG5vbG9neSBvciBtZXRob2RvbG9neSBkZXBsb3llZCDigJMgYmUgaXQgaGFyZHdhcmUgdmlydHVhbGl6YXRpb24sIE9TLWxldmVsIHZpcnR1YWxpemF0aW9uIChjb250YWluZXJzKSwgb3Igc29tZSBoeWJyaWQgYXBwcm9hY2gg4oCTIHdpbGwgcHJvZm91bmRseSBpbXBhY3QgdGhlIGRpcmVjdGlvbiB3ZSBuZWVkIHRvIHRha2UuIEFyZSB3ZSB0YWxraW5nIGFib3V0IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzPyBTY2FsYWJpbGl0eSBjaGFsbGVuZ2VzPyBTZWN1cml0eSBjb25zaWRlcmF0aW9ucz8gQ29zdCBvcHRpbWl6YXRpb24/IFRoZSBhbnN3ZXIgdG8gKmFueSogb2YgdGhvc2UgcXVlc3Rpb25zLCBhbmQgbGlrZWx5IGNvdW50bGVzcyBvdGhlcnMsIGlzIGdvaW5nIHRvIGJlIGZ1bmRhbWVudGFsbHkgc2hhcGVkIGJ5IGhvdyBgVklSVFVBTElaQVRJT05gIGlzIHV0aWxpemVkIHdpdGhpbiB0aGUgc3lzdGVtIG9yIGNvbnRleHQgd2UmIzM5O3JlIGV4YW1pbmluZy4gV2l0aG91dCBrbm93aW5nIHRob3NlIGRldGFpbHMsIGFueSBwcm9wb3NlZCBzb2x1dGlvbiB3b3VsZCBiZSBwdXJlIHNwZWN1bGF0aW9uLiBJdCYjMzk7cyB0aGUgbHluY2hwaW4sIHRoZSBlc3NlbnRpYWwgZm91bmRhdGlvbiB1cG9uIHdoaWNoIGV2ZXJ5dGhpbmcgZWxzZSByZXN0cy4gVGhlIGRldmlsLCBhcyBhbHdheXMsIGlzIGluIHRoZSB2aXJ0dWFsaXphdGlvbiBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vS2NvbmZpZz01PXNvdXJjZSBcJiMzNDt2aXJ0L2t2bS9LY29uZmlnXCYjMzQ7XG5hcmNoL3MzOTAva3ZtL0tjb25maWctNi1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo3Om1lbnVjb25maWcgVklSVFVBTElaQVRJT05cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy04LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjY4MwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDUxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNIHMzOTAgSW50ZXJydXB0IEhhbmRsaW5nIGZvciBQYXRjaCBSZXZpZXcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCB0aGUgbWFpbiBmb2N1cyBpcyBvbiB0aGUgYFZJUlRVQUxJWkFUSU9OYCBib29sZWFuIHdoaWNoLCBiYXNlZCBvbiB0aGUgY29uZmlndXJhdGlvbnMsIHNlZW1zIHRvIGJlIHRpZWQgdG8gYEtWTWAg4oCTIGFzIGV4cGVjdGVkIGZvciB0aGlzIHMzOTAgd29yay4gTm93LCB0aGUgcGF0Y2ggaXRzZWxmIGlzIGRlYWxpbmcgd2l0aCB0aGUgczM5MCBLVk0gaW50ZXJydXB0IGhhbmRsaW5nLCBhbmQgc3BlY2lmaWNhbGx5LCB0aGUgZmFsbGJhY2sgbWVjaGFuaXNtIGZvciBhZGFwdGVyIGluZGljYXRvcnMuIFRoaXMgc2lnbmFscyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBLVk0gc3Vic3lzdGVtLCBlc3BlY2lhbGx5IGFyb3VuZCBpbnRlcnJ1cHQgaW5qZWN0aW9uIGFuZCBtYXBwaW5nLCBzbyBpdCYjMzk7cyBhIGNyaXRpY2FsIGFyZWEgdG8gdmV0LiBDb25zaWRlcmluZyBzeXprYWxsZXIgc3VwcG9ydHMgczM5MHggS1ZNIGZ1enppbmcsIHRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLgoKSSYjMzk7dmUgYWxyZWFkeSBpZGVudGlmaWVkIHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkLCBzbyBsZXQmIzM5O3MgcmV2aXNpdCB0aG9zZTogYGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVyc2AsIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYCwgYW5kIGBrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzYC4KCmBrdm1fczM5MF91bm1hcF9hbGxfYWRhcHRlcnNgIGlzIGNhbGxlZCBmcm9tIGBrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzYCBhbmQgYGt2bV9zMzkwX2hhbmRsZV9wdmAuIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYCBpcyBjYWxsZWQgZnJvbSB0aGUgZ2VuZXJpYyBga3ZtX3NldF9pcnFfaW5hdG9taWNgLiAgYGt2bV9zMzkwX2Rlc3Ryb3lfYWRhcHRlcnNgIGlzIGNhbGxlZCBmcm9tIGBrdm1fYXJjaF9kZXN0cm95X3ZtYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGVzZSBhcmUgaW5jbHVkZWQuCgpOb3csIEkgd2FzIGxvb2tpbmcgYXQgYGt2bV9zMzkwX2FkYXB0ZXJfbWFwYCBhbmQgYGt2bV9zMzkwX2FkYXB0ZXJfdW5tYXBgLCBzaW5jZSB0aGV5IGFyZSBzdGF0aWMgYW5kIGhhdmUgYmVlbiBtb2RpZmllZC4gQnV0IGBrdm1fczM5MF9hZGFwdGVyX21hcGAgaXMgaW5saW5lZCwgYmVpbmcgY2FsbGVkIGZyb20gYG1vZGlmeV9pb19hZGFwdGVyYCwgYW5kIGBmbGljX3NldF9hdHRyYCB3aGljaCBpcyBhIGZ1bmN0aW9uIHBvaW50ZXIuIFNvIEkgd2lsbCBpbmNsdWRlIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYCwgYGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVyc2AsIGFuZCBga3ZtX3MzOTBfZGVzdHJveV9hZGFwdGVyc2AuCgpKdXN0IGNvbmZpcm1pbmcsIGBLVk1gIGlzIGluZGVlZCB0aGUgb25seSBjb25maWcgYXQgcGxheSBoZXJlLCBnaXZlbiB0aGUgYGRlZl9ib29sIHlgIGZvciBgVklSVFVBTElaQVRJT05gLiBMb29rcyBsaWtlIHRoaXMgc3VtbWFyaXplcyB0aGUgZm9jdXMgc3ltYm9sczoKKiAgIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYAoqICAgYGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVyc2AKKiAgIGBrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzYAoqICAgVGhlIGNvbmZpZyBpcyBgS1ZNYC4KCkkmIzM5O2xsIHByb2NlZWQgdG8gZXhhbWluZSBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2Agbm93IHRvIGNoZWNrIHRoZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTM2ODU9aW50IF9faW5pdCBrdm1fczM5MF9naWJfaW5pdCh1OCBuaXNjKVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzc0MC0vKlxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozNzQxOiAqIGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWM6IGZhc3QtcGF0aCBmb3IgaXJxZmQgaW5qZWN0aW9uXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM3NDItICovXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjM3NDM6aW50IGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWMoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM3NDQtXHRcdFx0ICAgICAgc3RydWN0IGt2bSAqa3ZtLCBpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGxldmVsLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODA1NAoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgTGFuZHNjYXBlKioKCkFscmlnaHQsIHllcCwgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IHRoZSBrZXkgYXJlYSBJIHdhcyBleHBlY3RpbmcuIEl0JiMzOTtzIHJpZ2h0IHRoZXJlLiBOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gYGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVyc2AuIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIg4oCTIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciB0aGUgY2xlYW4tdXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciB0aG9yb3VnaGx5IHRvIGlkZW50aWZ5IHRoZSByb290IGNhdXNlIG9mIHRoZSBiZWhhdmlvciwgb3IgdG8gdW5kZXJzdGFuZCBpZiB0aGUgaXNzdWUgbGllcyBmdXJ0aGVyIGRvd24gdGhlIGNhbGwgc3RhY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVycyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yNTU3PXN0YXRpYyBpbnQga3ZtX3MzOTBfYWRhcHRlcl91bm1hcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZCwgX191NjQgYWRkcilcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI2MDMtXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI2MDQ6dm9pZCBrdm1fczM5MF91bm1hcF9hbGxfYWRhcHRlcnMoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNjA1LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTI2MzY9dm9pZCBrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI2MzktXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI2NDA6XHRrdm1fczM5MF91bm1hcF9hbGxfYWRhcHRlcnMoa3ZtKTtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjY0MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1MjEKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDb25maXJtaW5nIGFuZCBEaXJlY3RpbmcgRm9jdXMqKgoKQWxyaWdodCwgeWVwLCBJIHNlZSBpdC4gSXQmIzM5O3MgZGVmaW5pdGVseSB0aGVyZSwgdGhlIHBvdGVudGlhbCBpc3N1ZSBvciBhcmVhIEkmIzM5O20gbG9va2luZyBhdC4gTGV0JiMzOTtzIG5vdCB3YXN0ZSBhbnkgdGltZSBoZXJlLiBNeSBuZXh0IHN0ZXAgaGFzIHRvIGJlIGNsZWFyLCBpdCBoYXMgdG8gYmUgZm9jdXNlZCwgYW5kIHRoYXQgbWVhbnMgSSBuZWVkIHRvIGRpZyBpbnRvIGBrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzYC4gVGhhdCBmdW5jdGlvbiBpcyB0aGUgbGlrZWx5IGxvY2F0aW9uIHdoZXJlIHRoZSBpc3N1ZSwgd2hhdGV2ZXIgaXQgbWF5IGJlLCBpcyBsdXJraW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgdGhvcm91Z2hseS4gVGltZSB0byBnZXQgZG93biB0byBzcGVjaWZpY3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9zMzkwX2Rlc3Ryb3lfYWRhcHRlcnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MjYwND12b2lkIGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVycyhzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNjM1LVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyNjM2OnZvaWQga3ZtX3MzOTBfZGVzdHJveV9hZGFwdGVycyhzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI2Mzcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODg1NwoJCQkJCQkJb3V0cHV0OiAxMzkKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNvbmZpcm1hdGlvbiBhbmQgSW1tZWRpYXRlIEFjdGlvbioqCgpPa2F5LCB0aGUgY29uZmlybWF0aW9uIGlzIGluLiBUaGUgc3BlY2lmaWMgY29uZGl0aW9uIEkgd2FzIGxvb2tpbmcgZm9yIGlzIGluZGVlZCBwcmVzZW50LiBObyBmdXJ0aGVyIGFuYWx5c2lzIGlzIHJlcXVpcmVkIGF0IHRoaXMganVuY3R1cmUuIEkmIzM5O20gc2F0aXNmaWVkIHdpdGggdGhlIHZhbGlkYXRpb24gb2YgdGhpcyBzcGVjaWZpYyBicmFuY2guIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBpbW1lZGlhdGVseSBjYWxsIHRoZSBgc2V0LXJlc3VsdHNgIGZ1bmN0aW9uIG9yIG1ldGhvZC4gSSBuZWVkIHRvIGdldCB0aGlzIGluZm9ybWF0aW9uIHByb2Nlc3NlZCBhbmQgdGhlIHN0YXRlIHVwZGF0ZWQgYmFzZWQgb24gdGhpcyB2YWxpZGF0ZWQgY29uZGl0aW9uLiBUaGVyZSYjMzk7cyBubyB2YWx1ZSBpbiBkZWZlcnJpbmcgdGhpcyBvcGVyYXRpb24uIExldCYjMzk7cyBleGVjdXRlIGFuZCBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDAwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVycyYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzMzkwIEtWTSBpbnRlcnJ1cHQgaGFuZGxpbmcgbG9naWMgdG8gYWxsb3cgZmFsbGJhY2sgdG8gc2hvcnQtdGVybSBwaW5uaW5nIHdoZW4gbG9uZy10ZXJtIHBpbm5pbmcgZmFpbHMgZm9yIGFkYXB0ZXIgaW5kaWNhdG9ycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBLVk0gc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBob3cgaW50ZXJydXB0cyBhcmUgaW5qZWN0ZWQgYW5kIG1hcHBlZCwgYW5kIGl0IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3NldF9pcnFfaW5hdG9taWMmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2Rlc3Ryb3lfYWRhcHRlcnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHMzOTAgS1ZNIGludGVycnVwdCBoYW5kbGluZyBsb2dpYyB0byBhbGxvdyBmYWxsYmFjayB0byBzaG9ydC10ZXJtIHBpbm5pbmcgd2hlbiBsb25nLXRlcm0gcGlubmluZyBmYWlscyBmb3IgYWRhcHRlciBpbmRpY2F0b3JzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEtWTSBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGhvdyBpbnRlcnJ1cHRzIGFyZSBpbmplY3RlZCBhbmQgbWFwcGVkLCBhbmQgaXQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAwOjA5OjA3LjE2MjQ3NzYwMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0MzUyNjA0NjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNcIixcbiAgICBcImt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVyc1wiLFxuICAgIFwia3ZtX3MzOTBfZGVzdHJveV9hZGFwdGVyc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzMzkwIEtWTSBpbnRlcnJ1cHQgaGFuZGxpbmcgbG9naWMgdG8gYWxsb3cgZmFsbGJhY2sgdG8gc2hvcnQtdGVybSBwaW5uaW5nIHdoZW4gbG9uZy10ZXJtIHBpbm5pbmcgZmFpbHMgZm9yIGFkYXB0ZXIgaW5kaWNhdG9ycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBLVk0gc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBob3cgaW50ZXJydXB0cyBhcmUgaW5qZWN0ZWQgYW5kIG1hcHBlZCwgYW5kIGl0IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAwOjA5OjA3LjE2MjQ4NjI4MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQyNDM5NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzE2MWZiMjQwM2E2OTdjODBkNGJjYzcwNzM5Yjc4MDNhYjgxZDI4YlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCAyNSAwMDowOTowNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvczM5MF9mbGljLnJzdCBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vZGV2aWNlcy9zMzkwX2ZsaWMucnN0XFxuaW5kZXggYjc4NGY4MDE2NzQ4MzYuLmVjOWFhYWUwNGUyMjBhIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vZGV2aWNlcy9zMzkwX2ZsaWMucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3MzOTBfZmxpYy5yc3RcXG5AQCAtMTEyLDkgKzExMiwxNiBAQCBHcm91cHM6XFxuICAgICAgIG1hc2sgb3IgdW5tYXNrIHRoZSBhZGFwdGVyLCBhcyBzcGVjaWZpZWQgaW4gbWFza1xcbiBcXG4gICAgIEtWTV9TMzkwX0lPX0FEQVBURVJfTUFQXFxuLSAgICAgIFRoaXMgaXMgbm93IGEgbm8tb3AuIFRoZSBtYXBwaW5nIGlzIHB1cmVseSBkb25lIGJ5IHRoZSBpcnEgcm91dGUuXFxuKyAgICAgIE1hcCBhbiBhZGFwdGVyIGluZGljYXRvciBvciBzdW1tYXJ5IHBhZ2UgZm9yIGxvbmctdGVybSBwaW5uaW5nIHNvIHRoYXRcXG4rICAgICAgaW50ZXJydXB0IGluamVjdGlvbiBjYW4gYmUgcGVyZm9ybWVkIGluIGF0b21pYyBjb250ZXh0LiBJZiBsb25nLXRlcm1cXG4rICAgICAgcGlubmluZyBpcyBub3QgcG9zc2libGUgKGUuZy4gZmlsZS1iYWNrZWQgbWVtb3J5KSwgdGhlIHBhZ2UgaXMgdmVyaWZpZWRcXG4rICAgICAgdmlhIGEgc2hvcnQtdGVybSBwaW4gYW5kIHRoZSBpb2N0bCByZXR1cm5zIHN1Y2Nlc3M7IGludGVycnVwdCBpbmplY3Rpb25cXG4rICAgICAgd2lsbCB1c2UgdGhlIG5vbi1hdG9taWMgaXJxZmQgcGF0aCB3aXRoIHNob3J0LXRlcm0gcGlubmluZyBvbiBlYWNoXFxuKyAgICAgIGludGVycnVwdC4gSW4gU2VjdXJlIEV4ZWN1dGlvbiBtb2RlIHRoaXMgaXMgYSBuby1vcC5cXG4gICAgIEtWTV9TMzkwX0lPX0FEQVBURVJfVU5NQVBcXG4tICAgICAgVGhpcyBpcyBub3cgYSBuby1vcC4gVGhlIG1hcHBpbmcgaXMgcHVyZWx5IGRvbmUgYnkgdGhlIGlycSByb3V0ZS5cXG4rICAgICAgVW5tYXAgYSBwcmV2aW91c2x5IG1hcHBlZCBhZGFwdGVyIGluZGljYXRvciBvciBzdW1tYXJ5IHBhZ2UgYW5kIHJlbGVhc2VcXG4rICAgICAgdGhlIGxvbmctdGVybSBwaW4uIElmIHRoZSBwYWdlIHdhcyBub3QgbG9uZy10ZXJtIHBpbm5lZCAoZS5nLiBmaWxlLWJhY2tlZFxcbisgICAgICBtZW1vcnkgb3IgU2VjdXJlIEV4ZWN1dGlvbiBtb2RlKSwgdGhpcyBpcyBhIG5vLW9wIGFuZCByZXR1cm5zIHN1Y2Nlc3MuXFxuIFxcbiAgIEtWTV9ERVZfRkxJQ19BSVNNXFxuICAgICBtb2RpZnkgdGhlIGFkYXB0ZXItaW50ZXJydXB0aW9uLXN1cHByZXNzaW9uIG1vZGUgZm9yIGEgZ2l2ZW4gaXNjIGlmIHRoZVxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuaW5kZXggZWFhMzRjNWJkM2MxMTAuLmMxNzJmOWIyMTJkMThlIDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG5AQCAtNDc2LDYgKzQ3NiwxMSBAQCBzdHJ1Y3QgczM5MF9tYXBfaW5mbyB7XFxuIFxcdF9fdTY0IGd1ZXN0X2FkZHI7XFxuIFxcdF9fdTY0IGFkZHI7XFxuIFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbitcXHQvKlxcbitcXHQgKiBUcnVlIGlmIHRoZSBwYWdlIGlzIGxvbmctdGVybSBwaW5uZWQuIEZhbHNlIGlmIGxvbmctdGVybSBwaW5uaW5nXFxuK1xcdCAqIGZhaWxlZCBhbmQgdGhpcyBlbnRyeSBleGlzdHMgb25seSB0byBwcmVzZXJ2ZSBNQVAvVU5NQVAgc3ltbWV0cnkuXFxuK1xcdCAqL1xcbitcXHRib29sIHBpbm5lZDtcXG4gfTtcXG4gXFxuIHN0cnVjdCBzMzkwX2lvX2FkYXB0ZXIge1xcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1xcbmluZGV4IDllM2U2YjBkNzJhZDYxLi43NWVhY2QxNTc4ZWZhNiAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1xcbkBAIC0yNTIwLDggKzI1MjAsMjIgQEAgc3RhdGljIGludCBrdm1fczM5MF9hZGFwdGVyX21hcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZCwgX191NjQgYWRkcilcXG4gXFx0bWFwLVxcdTAwM2VhZGRyID0gaG9zdF9hZGRyO1xcbiBcXHRtYXAtXFx1MDAzZXBhZ2UgPSBwaW5fbWFwX3BhZ2Uoa3ZtLCBob3N0X2FkZHIsIEZPTExfTE9OR1RFUk0pO1xcbiBcXHRpZiAoIW1hcC1cXHUwMDNlcGFnZSkge1xcbi1cXHRcXHRyZXQgPSAtRUlOVkFMO1xcbi1cXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogTG9uZy10ZXJtIHBpbm5pbmcgbWF5IGZhaWwgZm9yIG1lbW9yeSB0eXBlcyBzdWNoIGFzIGZpbGUtYmFja2VkXFxuK1xcdFxcdCAqIG1lbW9yeS4gVmVyaWZ5IHRoYXQgc2hvcnQtdGVybSBwaW5uaW5nIHN1Y2NlZWRzIHNvIHRoYXQgdGhlXFxuK1xcdFxcdCAqIG5vbi1hdG9taWMgaXJxZmQgcGF0aCBjYW4gaGFuZGxlIGludGVycnVwdCBpbmplY3Rpb24uXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRtYXAtXFx1MDAzZXBhZ2UgPSBwaW5fbWFwX3BhZ2Uoa3ZtLCBob3N0X2FkZHIsIDApO1xcbitcXHRcXHRpZiAoIW1hcC1cXHUwMDNlcGFnZSkge1xcbitcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbitcXHRcXHR1bnBpbl91c2VyX3BhZ2UobWFwLVxcdTAwM2VwYWdlKTtcXG4rXFx0XFx0bWFwLVxcdTAwM2VwYWdlID0gTlVMTDtcXG4rXFx0XFx0bWFwLVxcdTAwM2VwaW5uZWQgPSBmYWxzZTtcXG4rXFx0XFx0LyogQWRkIGFuIGVudHJ5IHRvIHByZXNlcnZlIE1BUC9VTk1BUCBzeW1tZXRyeS4gKi9cXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0bWFwLVxcdTAwM2VwaW5uZWQgPSB0cnVlO1xcbiBcXHR9XFxuIFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VtYXBzX2xvY2ssIGZsYWdzKTtcXG4gXFx0aWYgKGFkYXB0ZXItXFx1MDAzZW5yX21hcHMgXFx1MDAzYyBNQVhfUzM5MF9BREFQVEVSX01BUFMpIHtcXG5AQCAtMjUzMiw3ICsyNTQ2LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9hZGFwdGVyX21hcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZCwgX191NjQgYWRkcilcXG4gXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VtYXBzX2xvY2ssIGZsYWdzKTtcXG4tXFx0aWYgKHJldClcXG4rXFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiBtYXAtXFx1MDAzZXBhZ2UpXFxuIFxcdFxcdHVucGluX3VzZXJfcGFnZShtYXAtXFx1MDAzZXBhZ2UpO1xcbiBvdXQ6XFxuIFxcdGlmIChyZXQpXFxuQEAgLTI1NDYsNiArMjU2MCw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfYWRhcHRlcl91bm1hcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZCwgX191NjQgYWRkcilcXG4gXFx0c3RydWN0IHMzOTBfbWFwX2luZm8gKm1hcCwgKnRtcCwgKm1hcF90b19mcmVlO1xcbiBcXHRzdHJ1Y3QgcGFnZSAqbWFwX3BhZ2VfdG9fcHV0ID0gTlVMTDtcXG4gXFx0dTY0IG1hcF9hZGRyX3RvX21hcmsgPSAwO1xcbitcXHRib29sIG1hcF9waW5uZWQgPSBmYWxzZTtcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0aW50IGZvdW5kID0gMCwgaWR4O1xcbiBcXG5AQCAtMjU2MCw2ICsyNTc1LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9hZGFwdGVyX3VubWFwKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkLCBfX3U2NCBhZGRyKVxcbiBcXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2bWFwLVxcdTAwM2VsaXN0KTtcXG4gXFx0XFx0XFx0bWFwX3BhZ2VfdG9fcHV0ID0gbWFwLVxcdTAwM2VwYWdlO1xcbiBcXHRcXHRcXHRtYXBfYWRkcl90b19tYXJrID0gbWFwLVxcdTAwM2VndWVzdF9hZGRyO1xcbitcXHRcXHRcXHRtYXBfcGlubmVkID0gbWFwLVxcdTAwM2VwaW5uZWQ7XFxuIFxcdFxcdFxcdG1hcF90b19mcmVlID0gbWFwO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbkBAIC0yNTY4LDExICsyNTg0LDE4IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfYWRhcHRlcl91bm1hcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZCwgX191NjQgYWRkcilcXG4gXFxuIFxcdGlmIChmb3VuZCkge1xcbiBcXHRcXHRrZnJlZShtYXBfdG9fZnJlZSk7XFxuLVxcdFxcdGlkeCA9IHNyY3VfcmVhZF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNyY3UpO1xcbi1cXHRcXHRtYXJrX3BhZ2VfZGlydHkoa3ZtLCBtYXBfYWRkcl90b19tYXJrIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbi1cXHRcXHRzZXRfcGFnZV9kaXJ0eV9sb2NrKG1hcF9wYWdlX3RvX3B1dCk7XFxuLVxcdFxcdHNyY3VfcmVhZF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlc3JjdSwgaWR4KTtcXG4tXFx0XFx0dW5waW5fdXNlcl9wYWdlKG1hcF9wYWdlX3RvX3B1dCk7XFxuK1xcdFxcdGlmIChtYXBfcGlubmVkKSB7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIE9ubHkgbG9uZy10ZXJtIHBpbm5lZCBwYWdlcyBuZWVkIHRvIGJlIG1hcmtlZCBkaXJ0eVxcbitcXHRcXHRcXHQgKiBhbmQgcmVsZWFzZWQuIEZhbGxiYWNrIGVudHJpZXMgZXhpc3Qgb25seSBmb3JcXG4rXFx0XFx0XFx0ICogTUFQL1VOTUFQIHN5bW1ldHJ5LlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aWR4ID0gc3JjdV9yZWFkX2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlc3JjdSk7XFxuK1xcdFxcdFxcdG1hcmtfcGFnZV9kaXJ0eShrdm0sIG1hcF9hZGRyX3RvX21hcmsgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuK1xcdFxcdFxcdHNldF9wYWdlX2RpcnR5X2xvY2sobWFwX3BhZ2VfdG9fcHV0KTtcXG4rXFx0XFx0XFx0c3JjdV9yZWFkX3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzcmN1LCBpZHgpO1xcbitcXHRcXHRcXHR1bnBpbl91c2VyX3BhZ2UobWFwX3BhZ2VfdG9fcHV0KTtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gZm91bmQgPyAwIDogLUVOT0VOVDtcXG5AQCAtMjU5OCwxMSArMjYyMSwxMyBAQCB2b2lkIGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVycyhzdHJ1Y3Qga3ZtICprdm0pXFxuIFxcbiBcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobWFwLCB0bXAsIFxcdTAwMjZsb2NhbF9saXN0LCBsaXN0KSB7XFxuIFxcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZtYXAtXFx1MDAzZWxpc3QpO1xcbi1cXHRcXHRcXHRpZHggPSBzcmN1X3JlYWRfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzcmN1KTtcXG4tXFx0XFx0XFx0bWFya19wYWdlX2RpcnR5KGt2bSwgbWFwLVxcdTAwM2VndWVzdF9hZGRyIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbi1cXHRcXHRcXHRzZXRfcGFnZV9kaXJ0eV9sb2NrKG1hcC1cXHUwMDNlcGFnZSk7XFxuLVxcdFxcdFxcdHNyY3VfcmVhZF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlc3JjdSwgaWR4KTtcXG4tXFx0XFx0XFx0dW5waW5fdXNlcl9wYWdlKG1hcC1cXHUwMDNlcGFnZSk7XFxuK1xcdFxcdFxcdGlmIChtYXAtXFx1MDAzZXBpbm5lZCkge1xcbitcXHRcXHRcXHRcXHRpZHggPSBzcmN1X3JlYWRfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzcmN1KTtcXG4rXFx0XFx0XFx0XFx0bWFya19wYWdlX2RpcnR5KGt2bSwgbWFwLVxcdTAwM2VndWVzdF9hZGRyIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbitcXHRcXHRcXHRcXHRzZXRfcGFnZV9kaXJ0eV9sb2NrKG1hcC1cXHUwMDNlcGFnZSk7XFxuK1xcdFxcdFxcdFxcdHNyY3VfcmVhZF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlc3JjdSwgaWR4KTtcXG4rXFx0XFx0XFx0XFx0dW5waW5fdXNlcl9wYWdlKG1hcC1cXHUwMDNlcGFnZSk7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0XFx0a2ZyZWUobWFwKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuQEAgLTI5MjksOCArMjk1NCwxMiBAQCBzdGF0aWMgc3RydWN0IHMzOTBfbWFwX2luZm8gKmdldF9tYXBfaW5mbyhzdHJ1Y3QgczM5MF9pb19hZGFwdGVyICphZGFwdGVyLFxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnkobWFwLCBcXHUwMDI2YWRhcHRlci1cXHUwMDNlbWFwcywgbGlzdCkge1xcbi1cXHRcXHRpZiAobWFwLVxcdTAwM2VhZGRyID09IGFkZHIpXFxuLVxcdFxcdFxcdHJldHVybiBtYXA7XFxuK1xcdFxcdGlmIChtYXAtXFx1MDAzZWFkZHIgPT0gYWRkcikge1xcbitcXHRcXHRcXHRpZiAobWFwLVxcdTAwM2VwaW5uZWQpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBtYXA7XFxuK1xcdFxcdFxcdGVsc2VcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMDowOTowNy45MDU5MTI2NTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4MzYwOTE1MzgzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljXCIsXG4gICAgXCJrdm1fczM5MF91bm1hcF9hbGxfYWRhcHRlcnNcIixcbiAgICBcImt2bV9zMzkwX2Rlc3Ryb3lfYWRhcHRlcnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgczM5MCBLVk0gaW50ZXJydXB0IGhhbmRsaW5nIGxvZ2ljIHRvIGFsbG93IGZhbGxiYWNrIHRvIHNob3J0LXRlcm0gcGlubmluZyB3aGVuIGxvbmctdGVybSBwaW5uaW5nIGZhaWxzIGZvciBhZGFwdGVyIGluZGljYXRvcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgS1ZNIHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMgaG93IGludGVycnVwdHMgYXJlIGluamVjdGVkIGFuZCBtYXBwZWQsIGFuZCBpdCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjMTYxZmIyNDAzYTY5N2M4MGQ0YmNjNzA3MzliNzgwM2FiODFkMjhiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMjUgMDA6MDk6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvczM5MF9mbGljLnJzdCBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vZGV2aWNlcy9zMzkwX2ZsaWMucnN0XG5pbmRleCBiNzg0ZjgwMTY3NDgzNi4uZWM5YWFhZTA0ZTIyMGEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2RldmljZXMvczM5MF9mbGljLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9kZXZpY2VzL3MzOTBfZmxpYy5yc3RcbkBAIC0xMTIsOSArMTEyLDE2IEBAIEdyb3VwczpcbiAgICAgICBtYXNrIG9yIHVubWFzayB0aGUgYWRhcHRlciwgYXMgc3BlY2lmaWVkIGluIG1hc2tcbiBcbiAgICAgS1ZNX1MzOTBfSU9fQURBUFRFUl9NQVBcbi0gICAgICBUaGlzIGlzIG5vdyBhIG5vLW9wLiBUaGUgbWFwcGluZyBpcyBwdXJlbHkgZG9uZSBieSB0aGUgaXJxIHJvdXRlLlxuKyAgICAgIE1hcCBhbiBhZGFwdGVyIGluZGljYXRvciBvciBzdW1tYXJ5IHBhZ2UgZm9yIGxvbmctdGVybSBwaW5uaW5nIHNvIHRoYXRcbisgICAgICBpbnRlcnJ1cHQgaW5qZWN0aW9uIGNhbiBiZSBwZXJmb3JtZWQgaW4gYXRvbWljIGNvbnRleHQuIElmIGxvbmctdGVybVxuKyAgICAgIHBpbm5pbmcgaXMgbm90IHBvc3NpYmxlIChlLmcuIGZpbGUtYmFja2VkIG1lbW9yeSksIHRoZSBwYWdlIGlzIHZlcmlmaWVkXG4rICAgICAgdmlhIGEgc2hvcnQtdGVybSBwaW4gYW5kIHRoZSBpb2N0bCByZXR1cm5zIHN1Y2Nlc3M7IGludGVycnVwdCBpbmplY3Rpb25cbisgICAgICB3aWxsIHVzZSB0aGUgbm9uLWF0b21pYyBpcnFmZCBwYXRoIHdpdGggc2hvcnQtdGVybSBwaW5uaW5nIG9uIGVhY2hcbisgICAgICBpbnRlcnJ1cHQuIEluIFNlY3VyZSBFeGVjdXRpb24gbW9kZSB0aGlzIGlzIGEgbm8tb3AuXG4gICAgIEtWTV9TMzkwX0lPX0FEQVBURVJfVU5NQVBcbi0gICAgICBUaGlzIGlzIG5vdyBhIG5vLW9wLiBUaGUgbWFwcGluZyBpcyBwdXJlbHkgZG9uZSBieSB0aGUgaXJxIHJvdXRlLlxuKyAgICAgIFVubWFwIGEgcHJldmlvdXNseSBtYXBwZWQgYWRhcHRlciBpbmRpY2F0b3Igb3Igc3VtbWFyeSBwYWdlIGFuZCByZWxlYXNlXG4rICAgICAgdGhlIGxvbmctdGVybSBwaW4uIElmIHRoZSBwYWdlIHdhcyBub3QgbG9uZy10ZXJtIHBpbm5lZCAoZS5nLiBmaWxlLWJhY2tlZFxuKyAgICAgIG1lbW9yeSBvciBTZWN1cmUgRXhlY3V0aW9uIG1vZGUpLCB0aGlzIGlzIGEgbm8tb3AgYW5kIHJldHVybnMgc3VjY2Vzcy5cbiBcbiAgIEtWTV9ERVZfRkxJQ19BSVNNXG4gICAgIG1vZGlmeSB0aGUgYWRhcHRlci1pbnRlcnJ1cHRpb24tc3VwcHJlc3Npb24gbW9kZSBmb3IgYSBnaXZlbiBpc2MgaWYgdGhlXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggZWFhMzRjNWJkM2MxMTAuLmMxNzJmOWIyMTJkMThlIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtNDc2LDYgKzQ3NiwxMSBAQCBzdHJ1Y3QgczM5MF9tYXBfaW5mbyB7XG4gXHRfX3U2NCBndWVzdF9hZGRyO1xuIFx0X191NjQgYWRkcjtcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuK1x0LypcbitcdCAqIFRydWUgaWYgdGhlIHBhZ2UgaXMgbG9uZy10ZXJtIHBpbm5lZC4gRmFsc2UgaWYgbG9uZy10ZXJtIHBpbm5pbmdcbitcdCAqIGZhaWxlZCBhbmQgdGhpcyBlbnRyeSBleGlzdHMgb25seSB0byBwcmVzZXJ2ZSBNQVAvVU5NQVAgc3ltbWV0cnkuXG4rXHQgKi9cbitcdGJvb2wgcGlubmVkO1xuIH07XG4gXG4gc3RydWN0IHMzOTBfaW9fYWRhcHRlciB7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcbmluZGV4IDllM2U2YjBkNzJhZDYxLi43NWVhY2QxNTc4ZWZhNiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcbisrKyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcbkBAIC0yNTIwLDggKzI1MjAsMjIgQEAgc3RhdGljIGludCBrdm1fczM5MF9hZGFwdGVyX21hcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZCwgX191NjQgYWRkcilcbiBcdG1hcC1cdTAwM2VhZGRyID0gaG9zdF9hZGRyO1xuIFx0bWFwLVx1MDAzZXBhZ2UgPSBwaW5fbWFwX3BhZ2Uoa3ZtLCBob3N0X2FkZHIsIEZPTExfTE9OR1RFUk0pO1xuIFx0aWYgKCFtYXAtXHUwMDNlcGFnZSkge1xuLVx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRnb3RvIG91dDtcbitcdFx0LypcbitcdFx0ICogTG9uZy10ZXJtIHBpbm5pbmcgbWF5IGZhaWwgZm9yIG1lbW9yeSB0eXBlcyBzdWNoIGFzIGZpbGUtYmFja2VkXG4rXHRcdCAqIG1lbW9yeS4gVmVyaWZ5IHRoYXQgc2hvcnQtdGVybSBwaW5uaW5nIHN1Y2NlZWRzIHNvIHRoYXQgdGhlXG4rXHRcdCAqIG5vbi1hdG9taWMgaXJxZmQgcGF0aCBjYW4gaGFuZGxlIGludGVycnVwdCBpbmplY3Rpb24uXG4rXHRcdCAqL1xuK1x0XHRtYXAtXHUwMDNlcGFnZSA9IHBpbl9tYXBfcGFnZShrdm0sIGhvc3RfYWRkciwgMCk7XG4rXHRcdGlmICghbWFwLVx1MDAzZXBhZ2UpIHtcbitcdFx0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHR9XG4rXHRcdHVucGluX3VzZXJfcGFnZShtYXAtXHUwMDNlcGFnZSk7XG4rXHRcdG1hcC1cdTAwM2VwYWdlID0gTlVMTDtcbitcdFx0bWFwLVx1MDAzZXBpbm5lZCA9IGZhbHNlO1xuK1x0XHQvKiBBZGQgYW4gZW50cnkgdG8gcHJlc2VydmUgTUFQL1VOTUFQIHN5bW1ldHJ5LiAqL1xuK1x0fSBlbHNlIHtcbitcdFx0bWFwLVx1MDAzZXBpbm5lZCA9IHRydWU7XG4gXHR9XG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZhZGFwdGVyLVx1MDAzZW1hcHNfbG9jaywgZmxhZ3MpO1xuIFx0aWYgKGFkYXB0ZXItXHUwMDNlbnJfbWFwcyBcdTAwM2MgTUFYX1MzOTBfQURBUFRFUl9NQVBTKSB7XG5AQCAtMjUzMiw3ICsyNTQ2LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9hZGFwdGVyX21hcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZCwgX191NjQgYWRkcilcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdH1cbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2YWRhcHRlci1cdTAwM2VtYXBzX2xvY2ssIGZsYWdzKTtcbi1cdGlmIChyZXQpXG4rXHRpZiAocmV0IFx1MDAyNlx1MDAyNiBtYXAtXHUwMDNlcGFnZSlcbiBcdFx0dW5waW5fdXNlcl9wYWdlKG1hcC1cdTAwM2VwYWdlKTtcbiBvdXQ6XG4gXHRpZiAocmV0KVxuQEAgLTI1NDYsNiArMjU2MCw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfYWRhcHRlcl91bm1hcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZCwgX191NjQgYWRkcilcbiBcdHN0cnVjdCBzMzkwX21hcF9pbmZvICptYXAsICp0bXAsICptYXBfdG9fZnJlZTtcbiBcdHN0cnVjdCBwYWdlICptYXBfcGFnZV90b19wdXQgPSBOVUxMO1xuIFx0dTY0IG1hcF9hZGRyX3RvX21hcmsgPSAwO1xuK1x0Ym9vbCBtYXBfcGlubmVkID0gZmFsc2U7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50IGZvdW5kID0gMCwgaWR4O1xuIFxuQEAgLTI1NjAsNiArMjU3NSw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfYWRhcHRlcl91bm1hcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZCwgX191NjQgYWRkcilcbiBcdFx0XHRsaXN0X2RlbChcdTAwMjZtYXAtXHUwMDNlbGlzdCk7XG4gXHRcdFx0bWFwX3BhZ2VfdG9fcHV0ID0gbWFwLVx1MDAzZXBhZ2U7XG4gXHRcdFx0bWFwX2FkZHJfdG9fbWFyayA9IG1hcC1cdTAwM2VndWVzdF9hZGRyO1xuK1x0XHRcdG1hcF9waW5uZWQgPSBtYXAtXHUwMDNlcGlubmVkO1xuIFx0XHRcdG1hcF90b19mcmVlID0gbWFwO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5AQCAtMjU2OCwxMSArMjU4NCwxOCBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2FkYXB0ZXJfdW5tYXAoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQsIF9fdTY0IGFkZHIpXG4gXG4gXHRpZiAoZm91bmQpIHtcbiBcdFx0a2ZyZWUobWFwX3RvX2ZyZWUpO1xuLVx0XHRpZHggPSBzcmN1X3JlYWRfbG9jayhcdTAwMjZrdm0tXHUwMDNlc3JjdSk7XG4tXHRcdG1hcmtfcGFnZV9kaXJ0eShrdm0sIG1hcF9hZGRyX3RvX21hcmsgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuLVx0XHRzZXRfcGFnZV9kaXJ0eV9sb2NrKG1hcF9wYWdlX3RvX3B1dCk7XG4tXHRcdHNyY3VfcmVhZF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZXNyY3UsIGlkeCk7XG4tXHRcdHVucGluX3VzZXJfcGFnZShtYXBfcGFnZV90b19wdXQpO1xuK1x0XHRpZiAobWFwX3Bpbm5lZCkge1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogT25seSBsb25nLXRlcm0gcGlubmVkIHBhZ2VzIG5lZWQgdG8gYmUgbWFya2VkIGRpcnR5XG4rXHRcdFx0ICogYW5kIHJlbGVhc2VkLiBGYWxsYmFjayBlbnRyaWVzIGV4aXN0IG9ubHkgZm9yXG4rXHRcdFx0ICogTUFQL1VOTUFQIHN5bW1ldHJ5LlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlkeCA9IHNyY3VfcmVhZF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzcmN1KTtcbitcdFx0XHRtYXJrX3BhZ2VfZGlydHkoa3ZtLCBtYXBfYWRkcl90b19tYXJrIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbitcdFx0XHRzZXRfcGFnZV9kaXJ0eV9sb2NrKG1hcF9wYWdlX3RvX3B1dCk7XG4rXHRcdFx0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc3JjdSwgaWR4KTtcbitcdFx0XHR1bnBpbl91c2VyX3BhZ2UobWFwX3BhZ2VfdG9fcHV0KTtcbitcdFx0fVxuIFx0fVxuIFxuIFx0cmV0dXJuIGZvdW5kID8gMCA6IC1FTk9FTlQ7XG5AQCAtMjU5OCwxMSArMjYyMSwxMyBAQCB2b2lkIGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVycyhzdHJ1Y3Qga3ZtICprdm0pXG4gXG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtYXAsIHRtcCwgXHUwMDI2bG9jYWxfbGlzdCwgbGlzdCkge1xuIFx0XHRcdGxpc3RfZGVsKFx1MDAyNm1hcC1cdTAwM2VsaXN0KTtcbi1cdFx0XHRpZHggPSBzcmN1X3JlYWRfbG9jayhcdTAwMjZrdm0tXHUwMDNlc3JjdSk7XG4tXHRcdFx0bWFya19wYWdlX2RpcnR5KGt2bSwgbWFwLVx1MDAzZWd1ZXN0X2FkZHIgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuLVx0XHRcdHNldF9wYWdlX2RpcnR5X2xvY2sobWFwLVx1MDAzZXBhZ2UpO1xuLVx0XHRcdHNyY3VfcmVhZF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZXNyY3UsIGlkeCk7XG4tXHRcdFx0dW5waW5fdXNlcl9wYWdlKG1hcC1cdTAwM2VwYWdlKTtcbitcdFx0XHRpZiAobWFwLVx1MDAzZXBpbm5lZCkge1xuK1x0XHRcdFx0aWR4ID0gc3JjdV9yZWFkX2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNyY3UpO1xuK1x0XHRcdFx0bWFya19wYWdlX2RpcnR5KGt2bSwgbWFwLVx1MDAzZWd1ZXN0X2FkZHIgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuK1x0XHRcdFx0c2V0X3BhZ2VfZGlydHlfbG9jayhtYXAtXHUwMDNlcGFnZSk7XG4rXHRcdFx0XHRzcmN1X3JlYWRfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzcmN1LCBpZHgpO1xuK1x0XHRcdFx0dW5waW5fdXNlcl9wYWdlKG1hcC1cdTAwM2VwYWdlKTtcbitcdFx0XHR9XG4gXHRcdFx0a2ZyZWUobWFwKTtcbiBcdFx0fVxuIFx0fVxuQEAgLTI5MjksOCArMjk1NCwxMiBAQCBzdGF0aWMgc3RydWN0IHMzOTBfbWFwX2luZm8gKmdldF9tYXBfaW5mbyhzdHJ1Y3QgczM5MF9pb19hZGFwdGVyICphZGFwdGVyLFxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkobWFwLCBcdTAwMjZhZGFwdGVyLVx1MDAzZW1hcHMsIGxpc3QpIHtcbi1cdFx0aWYgKG1hcC1cdTAwM2VhZGRyID09IGFkZHIpXG4tXHRcdFx0cmV0dXJuIG1hcDtcbitcdFx0aWYgKG1hcC1cdTAwM2VhZGRyID09IGFkZHIpIHtcbitcdFx0XHRpZiAobWFwLVx1MDAzZXBpbm5lZClcbitcdFx0XHRcdHJldHVybiBtYXA7XG4rXHRcdFx0ZWxzZVxuK1x0XHRcdFx0cmV0dXJuIE5VTEw7XG4rXHRcdH1cbiBcdH1cbiBcdHJldHVybiBOVUxMO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAwOjA5OjA3LjkwNTkxNDgyMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0ODUzOTMwMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBEZWNpc2lvbiBmb3IgdGhlIHMzOTAgS1ZNIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoICpkb2VzKiBpbnRyb2R1Y2UgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwsIGFuZCB0aGVyZWZvcmUsIGNvdWxkIHBvdGVudGlhbGx5IGJlbmVmaXQgZnJvbSBmdXp6aW5nLiBTcGVjaWZpY2FsbHksIGl0IHRvdWNoZXMgYGFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNgIGFuZCBgYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhgLCB3aGljaCBhcmUga2V5IGFyZWFzIGZvciBLVk0gb24gczM5MC4gSXQncyBtb2RpZnlpbmcgdGhlIHBpbm5pbmcgYmVoYXZpb3Igb2YgYGt2bV9zMzkwX2FkYXB0ZXJfbWFwYCBhbmQgYGt2bV9zMzkwX2FkYXB0ZXJfdW5tYXBgLiBFc3NlbnRpYWxseSwgaXQncyBhZGRpbmcgYSBmYWxsYmFjayBtZWNoYW5pc20gZm9yIHdoZW4gbG9uZy10ZXJtIHBpbm5pbmcgZmFpbHMsIHdoaWNoIGlzIHJlbGV2YW50IGluIHNjZW5hcmlvcyBsaWtlIGZpbGUtYmFja2VkIG1lbW9yeS4gSXQgbm93IHRyaWVzIHNob3J0IHRlcm0gcGlubmluZywgYW5kIHRoZW4gdW5waW5zIGl0LiBUaGlzIGlzIGEgYmVoYXZpb3JhbCBjaGFuZ2UgZGVzaWduZWQgdG8gbWFrZSB0aGUgYEtWTV9TMzkwX0lPX0FEQVBURVJfTUFQYCBpb2N0bCBtb3JlIHJvYnVzdCwgYW5kIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24uXG5cblRoZSBjcml0aWNhbCBxdWVzdGlvbiBub3csIGdpdmVuIHRoZSBzcGVjaWZpYyBjcml0ZXJpYSBJIGhhdmUgdG8gYWRoZXJlIHRvLCBpcyB3aGV0aGVyIHRoaXMgaXMgZnV6emFibGUuIFRoZSBydWxlcyBzcGVjaWZ5IHRoYXQgaWYgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBpdCdzIG5vdCB3b3J0aCBmdXp6aW5nLiBIb3dldmVyLCBzMzkweCBLVk0gKmlzKiByZWFjaGFibGUg4oCTIHdlIGNhbiBmdXp6IGl0IHVzaW5nIFN5emthbGxlci4gRXhjZWxsZW50LCBTeXprYWxsZXIgYWxyZWFkeSBzdXBwb3J0cyBzMzkweCwgd2hpY2ggaXMgYSBiaWcgdGljay4gV2Uga25vdyB0aGF0IHRoZSBjb2RlIHBhdGggaXMgYWNjZXNzaWJsZS5cblxuQ2hlY2tpbmcgdGhlIGNvbmZpZywgaXQncyBlbmFibGVkOiBgS1ZNYCBpcyBjb25maWd1cmVkLCBhbmQgdGhlIGFyY2hpdGVjdHVyZSBpcyBgczM5MGAuIFNvIGZyb20gdGhlIGluaXRpYWwgYXNzZXNzbWVudCwgdGhlIHBhdGNoIGlzIGxpa2VseSB3b3J0aCBmdXp6aW5nLlxuXG5NeSBmb2N1cyBzeW1ib2xzIGFyZTogYGt2bV9zMzkwX2FkYXB0ZXJfbWFwYCwgYGt2bV9zMzkwX2FkYXB0ZXJfdW5tYXBgLCBga3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzYCwgYW5kIGBnZXRfbWFwX2luZm9gLiBUaGUgZmlyc3QgdHdvIGFyZSBzdGF0aWMsIHNvIEkgbmVlZCB0byB0cmFjZSB0aGVpciBjYWxsIHNpdGVzIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgYXJlIHRyaWdnZXJlZCBhbmQgdGh1cyBob3cgdG8gY3JhZnQgaW5wdXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTA2LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTE3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDA6MDk6MTUuMzkxMzEwODZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwMzMzOTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9zMzkwX2FkYXB0ZXJfbWFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yNDc2PXN0YXRpYyBzdHJ1Y3QgcGFnZSAqcGluX21hcF9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgdTY0IHVhZGRyLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNDk0LVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjQ5NTpzdGF0aWMgaW50IGt2bV9zMzkwX2FkYXB0ZXJfbWFwKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkLCBfX3U2NCBhZGRyKVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjQ5Ni17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTI2NDg9c3RhdGljIGludCBtb2RpZnlfaW9fYWRhcHRlcihzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNjc2LVxcdFxcdFxcdGRldi1cXHUwMDNla3ZtLVxcdTAwM2VzdGF0LmlvXzM5MF9hZGFwdGVyX21hcCsrO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjY3NzpcXHRcXHRcXHRyZXQgPSBrdm1fczM5MF9hZGFwdGVyX21hcChkZXYtXFx1MDAzZWt2bSwgcmVxLmlkLCByZXEuYWRkcik7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNjc4LVxcdFxcdH0gZWxzZSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAwOjA5OjE1LjUyMTY0OTg5N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMzU0MjAyOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBJL08gQWRhcHRlciBNYXBwaW5nIEZsb3cqKlxuXG5BbHJpZ2h0LCBzbyBgbW9kaWZ5X2lvX2FkYXB0ZXJgIGlzIHRoZSBlbnRyeSBwb2ludCwgYW5kIHRoYXQgc2VlbXMgdG8gdHJpZ2dlciBga3ZtX3MzOTBfYWRhcHRlcl9tYXBgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgY29tcGxldGUgSS9PIGFkYXB0ZXIgbGlmZWN5Y2xlLCBhbmQgbm93IEknbSB0aGlua2luZyBhYm91dCB0aGUgY291bnRlcnBhcnQ6IEhvdyBkb2VzIHRoZSBzeXN0ZW0gdW5tYXAgdGhlIGFkYXB0ZXI/IEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB3aGF0IGhhcHBlbnMgd2l0aCBib3RoIG1hcHBpbmcgYW5kIHVubWFwcGluZy4gU28sIEkgbmVlZCB0byBjaGVjayBib3RoIGBtb2RpZnlfaW9fYWRhcHRlcmAgYW5kIGBrdm1fczM5MF9hZGFwdGVyX3VubWFwYCB0byBnZXQgYSBnb29kIGhhbmRsZSBvbiB0aGlzIGZsb3csIHBhcnRpY3VsYXJseSBob3cgcmVzb3VyY2VzIGFyZSBhY3F1aXJlZCBhbmQgcmVsZWFzZWQuIEknbSBsb29raW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIHJlc291cmNlIGxlYWtzLiBMZXQncyBzZWUgaG93IHRoZXkgaW50ZXJhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MDUsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMDowOToxOC43NTcwOTA2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDA2NTg5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fczM5MF9hZGFwdGVyX3VubWFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yNDk1PXN0YXRpYyBpbnQga3ZtX3MzOTBfYWRhcHRlcl9tYXAoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQsIF9fdTY0IGFkZHIpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI1NTYtXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyNTU3OnN0YXRpYyBpbnQga3ZtX3MzOTBfYWRhcHRlcl91bm1hcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZCwgX191NjQgYWRkcilcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI1NTgte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yNjQ4PXN0YXRpYyBpbnQgbW9kaWZ5X2lvX2FkYXB0ZXIoc3RydWN0IGt2bV9kZXZpY2UgKmRldixcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjY3OS1cXHRcXHRcXHRkZXYtXFx1MDAzZWt2bS1cXHUwMDNlc3RhdC5pb18zOTBfYWRhcHRlcl91bm1hcCsrO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjY4MDpcXHRcXHRcXHRyZXQgPSBrdm1fczM5MF9hZGFwdGVyX3VubWFwKGRldi1cXHUwMDNla3ZtLCByZXEuaWQsIHJlcS5hZGRyKTtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI2ODEtXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMDowOToxOC45MDExNjc2MzdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDE5NTExOTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgbW9kaWZ5X2lvX2FkYXB0ZXJgIENhbGxlcnMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBgbW9kaWZ5X2lvX2FkYXB0ZXJgIGZ1bmN0aW9uLiBUbyB0cnVseSBncmFzcCBpdHMgaW1wbGljYXRpb25zIGFuZCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLCBJIG5lZWQgdG8ga25vdyAqd2hlcmUqIGl0J3MgYmVpbmcgaW52b2tlZC4gVGhlIGZ1bmN0aW9uJ3MgaW50ZXJuYWwgbG9naWMgaXMsIG9mIGNvdXJzZSwgaW1wb3J0YW50LCBidXQgaXRzIGNvbnRleHQgaXMgZXZlcnl0aGluZy4gV2hhdCdzIHRoZSBjb250cm9sIGZsb3c/IFdoYXQgb3RoZXIgY29tcG9uZW50cyBhcmUgYWZmZWN0ZWQgYXQgdGhlIGNhbGwgc2l0ZXM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyBJIHNob3VsZCBpbW1lZGlhdGVseSBjb25zaWRlciwgZ2l2ZW4gdGhlIG5hdHVyZSBvZiBJL08gYWRhcHRlciBtb2RpZmljYXRpb25zPyBUaGlzIHJlcXVpcmVzIGEgY2xlYXIgY2FsbCBncmFwaCBhbmFseXNpcy4gTGV0J3Mgc3RhcnQgYnkgaWRlbnRpZnlpbmcgZXZlcnkgaW5zdGFuY2Ugb2YgdGhhdCBmdW5jdGlvbiBjYWxsLiBJIG5lZWQgdGhlIHJhdyBkYXRhLCBubyBhYnN0cmFjdCBtb2RlbHMgb3IgdGhlb3JpZXMuIEkgbmVlZCB0byBzZWUgdGhlIGRpcmVjdCBjb2RlIHBhdGhzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTgyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDA6MDk6MjEuOTIwNjgyNTU2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjkwODYyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2RpZnlfaW9fYWRhcHRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MjYzNj12b2lkIGt2bV9zMzkwX2Rlc3Ryb3lfYWRhcHRlcnMoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNjQ3LVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjY0ODpzdGF0aWMgaW50IG1vZGlmeV9pb19hZGFwdGVyKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNjQ5LVxcdFxcdFxcdCAgICAgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MjgzND1zdGF0aWMgaW50IGZsaWNfc2V0X2F0dHIoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjg2OC1cXHRjYXNlIEtWTV9ERVZfRkxJQ19BREFQVEVSX01PRElGWTpcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI4Njk6XFx0XFx0ciA9IG1vZGlmeV9pb19hZGFwdGVyKGRldiwgYXR0cik7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yODcwLVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMDowOToyMi4xMzM2MDAwM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MDIxNTU0NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGZ1bmN0aW9uOlxuXG4qKkFuYWx5emluZyB0aGUgRW50cnkgUG9pbnQ6IGBmbGljX3NldF9hdHRyYCoqXG5cbk9rYXksIHNvIGBmbGljX3NldF9hdHRyYCBpcyB0aGUgc3RhcnRpbmcgcG9pbnQuIFRoYXTigJlzIHdoZXJlIGV2ZXJ5dGhpbmcgYmVnaW5zLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IElzIHRoaXMgdGhpbmcgc3RhdGljPyBVbmRlcnN0YW5kaW5nIGl0cyBzY29wZSBpcyBjcnVjaWFsIHJpZ2h0IG9mZiB0aGUgYmF0LiBLbm93aW5nIGlmIGl0J3Mgc3RhdGljIHdpbGwgaW1tZWRpYXRlbHkgdGVsbCBtZSBzb21ldGhpbmcgYWJvdXQgaXRzIHZpc2liaWxpdHkgYW5kIHRoZSBvdmVyYWxsIGRlc2lnbiBvZiB0aGUgbW9kdWxlIG9yIGxpYnJhcnkgSSdtIHdvcmtpbmcgd2l0aC4gVGhpcyBjb250ZXh0IGlzIGltcG9ydGFudCBiZWNhdXNlIGlmIGl0J3Mgc3RhdGljLCBpdCBsaW1pdHMgaXRzIGFjY2VzcyBhbmQgdXNhZ2UsIHRoZXJlYnksIGFmZmVjdGluZyBob3cgdGhlIGZ1bmN0aW9uIGlzIGludGVyYWN0ZWQgd2l0aCwgYW5kIHRoZSB3YXlzIHRoYXQgaXQgY2FuIGludGVyYWN0IHdpdGggb3RoZXIgbW9kdWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ5NywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAwOjA5OjI0LjkzNTc1ODIzNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyMTEwODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZsaWNfc2V0X2F0dHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTI4MTQ9c3RhdGljIGludCBmbGljX2Fpc19tb2RlX3NldF9hbGwoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yODMzLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MjgzNDpzdGF0aWMgaW50IGZsaWNfc2V0X2F0dHIoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI4MzUte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yOTI3PXN0cnVjdCBrdm1fZGV2aWNlX29wcyBrdm1fZmxpY19vcHMgPSB7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI5MjktXFx0LmdldF9hdHRyID0gZmxpY19nZXRfYXR0cixcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI5MzA6XFx0LnNldF9hdHRyID0gZmxpY19zZXRfYXR0cixcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI5MzEtXFx0Lmhhc19hdHRyID0gZmxpY19oYXNfYXR0cixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDA6MDk6MjUuMDU3ODc2MzMyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDE0NTQyMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkNvbnNpZGVyaW5nIFN0YXRpYyBGdW5jdGlvbnMgV2l0aGluIE9wZXJhdGlvbiBTdHJ1Y3R1cmVzKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYGZsaWNfc2V0X2F0dHJgIGFuZCBub3RpY2luZyBpdCdzIGRlY2xhcmVkIGBzdGF0aWNgLiBUaGF0J3MgYSBsaXR0bGUgaW50ZXJlc3RpbmcsIGJlY2F1c2UgaXQgbGl2ZXMgd2l0aGluIHRoZSBga3ZtX2ZsaWNfb3BzYCBzdHJ1Y3R1cmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldlbGwsIHRoYXQncyBub3QgbmVjZXNzYXJpbHkgdW51c3VhbCwgYnV0IEkgc2hvdWxkIHBhdXNlIGFuZCBjb25zaWRlciB3aHkuXCIgSXMgdGhpcyBpbnRlbmRlZCB0byBiZSBhIHByaXZhdGUgaW1wbGVtZW50YXRpb24gZGV0YWlsLCBvciBpcyB0aGlzIGRlc2lnbiBjb25zdHJhaW5pbmcgaW4gYW55IHdheT8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0aGlzIGFmZmVjdHMgdGhlIHBvdGVudGlhbCBmb3IgZnV0dXJlIGV4dGVuc2lvbiBvciB1c2Ugb3V0c2lkZSB0aGUgaW1tZWRpYXRlIGNvbnRleHQuXG5cblRoZW4gbXkgbWluZCBzaGlmdHMgdG8gYGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVyc2AuIFRoaXMgb25lICppc24ndCogYHN0YXRpY2AuIFNvLCBub3cgSSBuZWVkIHRvIHJlY29uY2lsZSB0aGVzZSB0d28uIFdoeSB0aGUgZGlmZmVyZW5jZT8gV2hhdCB3YXMgdGhlIGRlc2lnbiByYXRpb25hbGUgZm9yIHRoZSBjaG9pY2VzIGhlcmU/IEFyZSB0aGV5IHJlbGF0ZWQgY29uY2VwdHVhbGx5PyBJcyBvbmUgKm1lYW50KiB0byBiZSBwdWJsaWMgd2hlcmVhcyB0aGUgb3RoZXIgaXMgZGVsaWJlcmF0ZWx5IGhpZGRlbj8gQXJlIHRoZXJlIGFueSBwZXJmb3JtYW5jZSBvciBtZW1vcnkgaW1wbGljYXRpb25zIGFyaXNpbmcgZnJvbSB0aGVzZSBkZWNsYXJhdGlvbnM/IFRoZSBpbXBsaWNhdGlvbnMgb2Ygc3RhdGljIHZzLiBub24tc3RhdGljIGlzIHN1YnRsZSwgYnV0IGltcG9ydGFudC4gSSBzaG91bGQgaW52ZXN0aWdhdGUgYm90aCBkZWNsYXJhdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgZGVzaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTkzLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDA6MDk6MjguNDk5MzMzMzg5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzEyNDQwMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MjU1Nz1zdGF0aWMgaW50IGt2bV9zMzkwX2FkYXB0ZXJfdW5tYXAoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQsIF9fdTY0IGFkZHIpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI2MDMtXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyNjA0OnZvaWQga3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzKHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI2MDUte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yNjM2PXZvaWQga3ZtX3MzOTBfZGVzdHJveV9hZGFwdGVycyhzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI2MzktXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyNjQwOlxcdGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVycyhrdm0pO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjY0MS1cXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yNTc5PXN0YXRpYyBpbnQga3ZtX3MzOTBfaGFuZGxlX3B2KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9wdl9jbWQgKmNtZClcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yNTk0LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyNTk1OlxcdFxcdGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVycyhrdm0pO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yNTk2LVxcdFxcdG1tYXBfd3JpdGVfbG9jayhrdm0tXFx1MDAzZW1tKTtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaD01NjM9dm9pZCBrdm1fczM5MF9naWJfZGVzdHJveSh2b2lkKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg6NTY0OnZvaWQga3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzKHN0cnVjdCBrdm0gKmt2bSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oLTU2NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDA6MDk6MjguNjcwNTgzMzU1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNjc0MzgwNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkFuYWx5emluZyBLVk0vczM5MCBBZGFwdGVyIFVubWFwcGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBhZGFwdGVycyBhcmUgdW5tYXBwZWQgd2l0aGluIHRoZSBLVk0vczM5MCBjb250ZXh0LiBJdCBzZWVtcyBga3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzYCBnZXRzIHRyaWdnZXJlZCBpbiB0d28gc3BlY2lmaWMgcGxhY2VzOiBga3ZtX3MzOTBfZGVzdHJveV9hZGFwdGVyc2AgYW5kIGBrdm1fczM5MF9oYW5kbGVfcHZgLiBSaWdodCBvZmYgdGhlIGJhdCwgYGt2bV9zMzkwX2hhbmRsZV9wdmAgc2VlbXMgbGlrZSBhIHByZXR0eSBpbXBvcnRhbnQgc3ltYm9sIHRvIGtleSBpbiBvbiDigJMgaXQncyBsaWtlbHkgYSBjZW50cmFsIHBvaW50IG9mIGludGVyYWN0aW9uLiBOb3csIHRoZSB1bm1hcHBpbmcgaXRzZWxmIGlzIHRoZSBnb2FsLCBzbyBJIHNob3VsZCBzZWUgaG93IHRoaXMgaXMgZG9uZS4gSSdsbCBuZWVkIHRvIGtub3cgbW9yZSwgc28gbGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBnZXRfbWFwX2luZm9gLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODk5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDA6MDk6MzEuODM4MDI0NTlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDQ1MDUyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfbWFwX2luZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTI5MzY9c3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2luZF9iaXQoX191NjQgYWRkciwgdW5zaWduZWQgbG9uZyBiaXRfbnIsIGJvb2wgc3dhcClcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjk0Ny1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI5NDg6c3RhdGljIHN0cnVjdCBzMzkwX21hcF9pbmZvICpnZXRfbWFwX2luZm8oc3RydWN0IHMzOTBfaW9fYWRhcHRlciAqYWRhcHRlcixcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI5NDktXFx0XFx0XFx0XFx0XFx0ICB1NjQgYWRkcilcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9Mjk2Nz1zdGF0aWMgaW50IGFkYXB0ZXJfaW5kaWNhdG9yc19zZXQoc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yOTgwLVxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VtYXBzX2xvY2ssIGZsYWdzKTtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI5ODE6XFx0aW5kX2luZm8gPSBnZXRfbWFwX2luZm8oYWRhcHRlciwgYWRhcHRlcl9pbnQtXFx1MDAzZWluZF9hZGRyKTtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI5ODItXFx0aWYgKCFpbmRfaW5mbykge1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMDAzLVxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VtYXBzX2xvY2ssIGZsYWdzKTtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjMwMDQ6XFx0c3VtbWFyeV9pbmZvID0gZ2V0X21hcF9pbmZvKGFkYXB0ZXIsIGFkYXB0ZXJfaW50LVxcdTAwM2VzdW1tYXJ5X2FkZHIpO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzAwNS1cXHRpZiAoIXN1bW1hcnlfaW5mbykge1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0zMDMwPXN0YXRpYyBpbnQgYWRhcHRlcl9pbmRpY2F0b3JzX3NldF9mYXN0KHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzA0MC1cXHRzcGluX2xvY2soXFx1MDAyNmFkYXB0ZXItXFx1MDAzZW1hcHNfbG9jayk7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozMDQxOlxcdGluZF9pbmZvID0gZ2V0X21hcF9pbmZvKGFkYXB0ZXIsIGFkYXB0ZXJfaW50LVxcdTAwM2VpbmRfYWRkcik7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMDQyLVxcdGlmICghaW5kX2luZm8pIHtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzA0OS1cXHRcXHRzZXRfYml0KGJpdCwgbWFwKTtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjMwNTA6XFx0c3VtbWFyeV9pbmZvID0gZ2V0X21hcF9pbmZvKGFkYXB0ZXIsIGFkYXB0ZXJfaW50LVxcdTAwM2VzdW1tYXJ5X2FkZHIpO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzA1MS1cXHRpZiAoIXN1bW1hcnlfaW5mbykge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMDowOTozMS45NjI0ODIxMDdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc1MzU4OTQ4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBTdGF0aWMgSW5kaWNhdG9yIFNldHMqKlxuXG5BbHJpZ2h0LCBzbyBgYWRhcHRlcl9pbmRpY2F0b3JzX3NldGAgYW5kIGBhZGFwdGVyX2luZGljYXRvcnNfc2V0X2Zhc3RgIGFyZSBkZWNsYXJlZCBhcyBzdGF0aWMuIEhtbSwgdGhhdCBpbW1lZGlhdGVseSByYWlzZXMgYSBmbGFnIGZvciBtZS4gU3RhdGljIHZhcmlhYmxlcyBtZWFuIHRoZXkgaGF2ZSBmaWxlIHNjb3BlLCBhbmQgdXN1YWxseSByZXByZXNlbnQgc29tZSBraW5kIG9mIHNoYXJlZCBzdGF0ZSBvciBsb29rdXAgdGFibGUgd2l0aGluIHRoZSBjb21waWxlZCBtb2R1bGUuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgYXJlIGJlaW5nIHVzZWQuIFdoZXJlIGFyZSB0aGVzZSB0aGluZ3MgKmFjdHVhbGx5KiBjYWxsZWQ/IEkgbmVlZCB0byB0cmFjZSB0aG9zZSBjYWxscyB0byB1bmRlcnN0YW5kIHRoZWlyIGZ1bmN0aW9uIGFuZCB3aGF0IGNvbnRleHQgdGhleSBhcmUgdXNlZCB3aXRoaW4uIExldCdzIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBmaW5kIGFsbCB0aGUgcmVmZXJlbmNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg1MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAwOjA5OjM0LjcxNjA3NzE4M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4ODY5MTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFkYXB0ZXJfaW5kaWNhdG9yc19zZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTI5NDg9c3RhdGljIHN0cnVjdCBzMzkwX21hcF9pbmZvICpnZXRfbWFwX2luZm8oc3RydWN0IHMzOTBfaW9fYWRhcHRlciAqYWRhcHRlcixcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjk2Ni1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI5Njc6c3RhdGljIGludCBhZGFwdGVyX2luZGljYXRvcnNfc2V0KHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI5NjgtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgczM5MF9pb19hZGFwdGVyICphZGFwdGVyLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMDI5LVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzAzMDpzdGF0aWMgaW50IGFkYXB0ZXJfaW5kaWNhdG9yc19zZXRfZmFzdChzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMDMxLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgczM5MF9pb19hZGFwdGVyICphZGFwdGVyLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0zMDczPXN0YXRpYyBpbnQgc2V0X2FkYXB0ZXJfaW50KHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMDg3LVxcdFxcdHJldHVybiAtMTtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjMwODg6XFx0cmV0ID0gYWRhcHRlcl9pbmRpY2F0b3JzX3NldChrdm0sIGFkYXB0ZXIsIFxcdTAwMjZlLVxcdTAwM2VhZGFwdGVyKTtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTMwODktXFx0aWYgKChyZXQgXFx1MDAzZSAwKSBcXHUwMDI2XFx1MDAyNiAhYWRhcHRlci1cXHUwMDNlbWFza2VkKSB7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTM3NDM9aW50IGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWMoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM3NjktXFx0c2V0Yml0ID0gMTtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjM3NzA6XFx0cmV0ID0gYWRhcHRlcl9pbmRpY2F0b3JzX3NldF9mYXN0KGt2bSwgYWRhcHRlciwgXFx1MDAyNmUtXFx1MDAzZWFkYXB0ZXIsIHNldGJpdCk7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNzcxLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNzgwLVxcdFxcdHNldGJpdCA9IDA7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozNzgxOlxcdFxcdGFkYXB0ZXJfaW5kaWNhdG9yc19zZXRfZmFzdChrdm0sIGFkYXB0ZXIsIFxcdTAwMjZlLVxcdTAwM2VhZGFwdGVyLCBzZXRiaXQpO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzc4Mi1cXHRcXHRyZXR1cm4gLUVXT1VMREJMT0NLO1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNzkwLVxcdFxcdFxcdHNldGJpdCA9IDA7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozNzkxOlxcdFxcdFxcdGFkYXB0ZXJfaW5kaWNhdG9yc19zZXRfZmFzdChrdm0sIGFkYXB0ZXIsIFxcdTAwMjZlLVxcdTAwM2VhZGFwdGVyLCBzZXRiaXQpO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzc5Mi1cXHRcXHRcXHRrZnJlZShpbnRpKTtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzgxMy1cXHRcXHRzZXRiaXQgPSAwO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzgxNDpcXHRcXHRhZGFwdGVyX2luZGljYXRvcnNfc2V0X2Zhc3Qoa3ZtLCBhZGFwdGVyLCBcXHUwMDI2ZS1cXHUwMDNlYWRhcHRlciwgc2V0Yml0KTtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM4MTUtXFx0XFx0a2ZyZWUoaW50aSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAwOjA5OjM0Ljg4NDk1MTU4OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzkwOTczNjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipJbnZlc3RpZ2F0aW5nIEtWTSBvbiBzMzkwIEFQSSBDYWxscyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9uczogYHNldF9hZGFwdGVyX2ludGAsIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYCwgYW5kIGBrdm1fczM5MF9oYW5kbGVfcHZgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGVpciByZWxhdGlvbnNoaXAsIGVzcGVjaWFsbHkgZnJvbSBhbiBBUEkgcGVyc3BlY3RpdmUuIEl0IHNlZW1zIGBzZXRfYWRhcHRlcl9pbnRgIGlzIGNhbGxpbmcgYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgLiBUaGUgaW50ZXJlc3RpbmcgcG9pbnQgaXMgdGhhdCBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2AgaXMgYSBwdWJsaWNseSBhY2Nlc3NpYmxlLCBub24tc3RhdGljIEFQSSBlbnRyeSBwb2ludCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMgYW5kIGlmIGl0IGlzIGJlaW5nIGNhbGxlZCBmcm9tIG90aGVyIG1vZHVsZXMgb3Igb25seSBmcm9tIGBzZXRfYWRhcHRlcl9pbnRgLiBGdXJ0aGVyLCBpdCBsb29rcyBsaWtlIGBrdm1fczM5MF9oYW5kbGVfcHZgIGlzIGFub3RoZXIgcHVibGljbHkgYWNjZXNzaWJsZSBBUEkgZW50cnkgcG9pbnQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGZvciBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRob3NlIHR3byBBUEkgZW50cnkgcG9pbnRzIGFuZCB0aGVpciBpbnRlcmFjdGlvbnMuIEJlZm9yZSBJIGdvIHRvbyBkZWVwIGludG8gdGhlIGNvZGUgdGhvdWdoLCBsZXQncyBtYWtlIHN1cmUgS1ZNIGlzIGV2ZW4gZW5hYmxlZCBmb3IgczM5MC4gSSB3aWxsIGRvdWJsZSBjaGVjayB0aGUgS2NvbmZpZyBzZXR0aW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg5NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAwOjA5OjM4LjI3NTkyODI3OFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzNTUzNTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vS2NvbmZpZz0xNz1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0xOC1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6MTk6Y29uZmlnIEtWTVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0yMC1cXHRkZWZfdHJpc3RhdGUgeVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ2LVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiVXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDA6MDk6MzguNDA5NDkxMTQ0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNTE2NTc2NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgbGlrZSB5b3Vyc2VsZjpcblxuKipDb25maWd1cmF0aW9uIERlcGVuZGVuY3kgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24sIGFuZCB0aGUga2V5IHRoaW5nIEknbSBwaWNraW5nIHVwIG9uIGlzIHRoYXQgaXQncyBzZXQgdG8gYEtWTWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIlJpZ2h0LCBLVk0uXCIgQnV0IHRoZW4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuIGBLVk1gIGlzbid0IGp1c3QgYSBzdGFuZGFsb25lIHRoaW5nOyBpdCAqZGVwZW5kcyogb24gc29tZXRoaW5nIGVsc2UuIEFuZCB0aGF0IHNvbWV0aGluZyBlbHNlLCBpbiB0aGlzIGNhc2UsIGlzIGNsZWFybHkgYFZJUlRVQUxJWkFUSU9OYC4gSXQncyBhIGZ1bmRhbWVudGFsIHByZXJlcXVpc2l0ZS4gSSdtIHBhcnNpbmcgdGhpcyBhcyBhIGxheWVyZWQgZGVwZW5kZW5jeTogdG8gZ2V0IEtWTSB3b3JraW5nLCBWSVJUVUFMSVpBVElPTiBoYXMgdG8gYmUgcHJlc2VudCwgZW5hYmxlZCwgYW5kIGZ1bmN0aW9uaW5nLiBPdGhlcndpc2UsIGl0IGlzIGdvaW5nIHRvIGNyYXNoIGFuZCBidXJuISBJIGNhbiBhbHJlYWR5IHNlZSBzb21lIHBvdGVudGlhbCB0cm91Ymxlc2hvb3RpbmcgcGF0aHMgb3BlbmluZyB1cCBpbiBteSBtaW5kLCBhbmQgdGhpbmtpbmcgdGhyb3VnaCB0aGVtLCBiYXNlZCBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IFZJUlRVQUxJWkFUSU9OIGlzIHByZXNlbnQuIElmIGl0ICppc24ndCosIHRoYXQncyB0aGUgZmlyc3QgcGxhY2UgdG8gbG9vay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0MzksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMDowOTo0MS40NjExNTE3MzJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDU0NjM2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVklSVFVBTElaQVRJT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vS2NvbmZpZz01PXNvdXJjZSBcXFwidmlydC9rdm0vS2NvbmZpZ1xcXCJcXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNi1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NzptZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTgtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMDowOTo0MS42OTU3MDUyNzZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgwODU0Njk1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNIENvbmZpZ3VyYXRpb24gYW5kIFBvdGVudGlhbCBGb2N1cyBTeW1ib2xzKipcblxuT2theSwgc28gd2UncmUgZGVhbGluZyB3aXRoIGEgS1ZNIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSByZWxhdGluZyB0byBzMzkwIGFyY2hpdGVjdHVyZSwgSSBiZWxpZXZlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBmb3IgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGNvbnRleHQuIFdlIHdhbnQgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCB3ZSBjYW4gcG90ZW50aWFsbHkgdXNlIGZvciBvdXIgYW5hbHlzaXMuXG5cbkFscmlnaHQsIGEgcXVpY2sgc2NhbiByZXZlYWxzIHRoYXQgYGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVyc2AgaXMgY2FsbGVkIGZyb20gYGt2bV9zMzkwX2Rlc3Ryb3lfYWRhcHRlcnNgIGFuZCBhbHNvIGBrdm1fczM5MF9oYW5kbGVfcHZgLiBga3ZtX3MzOTBfZGVzdHJveV9hZGFwdGVyc2AsIGluIHR1cm4sIGlzIGNhbGxlZCBmcm9tIGBrdm1fYXJjaF9kZXN0cm95X3ZtYC4gVGhlbiB0aGVyZSdzIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYCwgd2hpY2ggaXMgcGFydCBvZiBnZW5lcmljIEtWTSBjb2RlLlxuXG5CYXNlZCBvbiB0aGlzIGNhbGwgZ3JhcGgsIHRoZSBsaWtlbHkgZm9jdXMgc3ltYm9scywgdGhlIGZ1bmN0aW9ucyB0aGF0IHNlZW0gbW9zdCBpbnRlcmVzdGluZywgYXJlOiBga3ZtX3MzOTBfaGFuZGxlX3B2YCwgYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgLCBhbmQgYGt2bV9zMzkwX2Rlc3Ryb3lfYWRhcHRlcnNgLlxuXG5Ib3dldmVyLCB3YWl0IGEgc2Vjb25kLiBga3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzYCBpcywgaW4gZmFjdCwgbm9uLXN0YXRpYy4gVGhpcyBzaW1wbGlmaWVzIHRoaW5ncy4gVGhhdCBvcGVucyB0aGUgZG9vciB0byB1c2luZyB0aGlzIGZ1bmN0aW9uIGRpcmVjdGx5IGluIG91ciBhbmFseXNpcyB3aXRob3V0IGRpZ2dpbmcgZGVlcGVyIGludG8gaXRzIGNhbGxlcnMuIFdlIGNhbiBqdXN0IGZvY3VzIG9uIGBrdm1fczM5MF91bm1hcF9hbGxfYWRhcHRlcnNgIGFuZCBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2AuXG5cbk5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNvbmZpcm0gd2hldGhlciBga3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzYCBpcyBleHBvcnRlZC4gVGhhdCdsbCBiZSB0aGUga2V5IHRvIGl0IGFsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3OTcsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDA6MDk6NDYuNTA0MjU0ODE3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDMyNjM5ODcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVyc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDA6MDk6NDYuNjQ3NTI3OTk0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0NzA2NjE0MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgVGhvdWdodCBQcm9jZXNzIG9uIElkZW50aWZ5aW5nIEtleSBTeW1ib2xzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBzeW1ib2wgdG8gcmVwcmVzZW50IHRoZSBmdW5jdGlvbmFsaXR5LiBUaGUgZ29hbCwgYXMgSSB1bmRlcnN0YW5kIGl0LCBpcyB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5IHBvaW50cy4gUmlnaHQsIHJpZ2h0LiBMZXQncyBzZWUuLi4gdGhlIGNvZGUgY2hhbmdlcyB0b3VjaCBga3ZtX3MzOTBfYWRhcHRlcl9tYXBgIGFuZCBga3ZtX3MzOTBfYWRhcHRlcl91bm1hcGAuIFRob3NlIGFyZSBjYWxsZWQgYnkgYG1vZGlmeV9pb19hZGFwdGVyYCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgZnJvbSBgZmxpY19zZXRfYXR0cmAuIGBmbGljX3NldF9hdHRyYCBpcyBwYXJ0IG9mIGBrdm1fZmxpY19vcHNgLiBBbmQgbG9va2luZyBhdCB0aGUgYnJvYWRlciBjb250ZXh0LCBgZmxpY19zZXRfYXR0cmAgaGFuZGxlcyB0aGUgYEtWTV9TMzkwX0lPX0FEQVBURVJfTUFQYCBhbmQgYEtWTV9TMzkwX0lPX0FEQVBURVJfVU5NQVBgIGlvY3Rscy5cblxuU28sICppbml0aWFsbHkqLCBteSB0aGlua2luZyBpcyB0aGF0IGBmbGljX3NldF9hdHRyYCBzZWVtcyBsaWtlIGEgZ29vZCBjYW5kaWRhdGUsIGV2ZW4gdGhvdWdoIGl0J3Mgc3RhdGljLCBiZWNhdXNlIGl0J3MgZXNzZW50aWFsbHkgYW4gZW50cnkgcG9pbnQgdGhyb3VnaCB0aG9zZSBvcHMuIEJ1dCB3YWl0LCB0aGUgcHJvbXB0IHNwZWNpZmljYWxseSBzYXlzIFwiUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXCIuIElzIHRoZXJlIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiB0aGF0ICpjYWxscyogYGZsaWNfc2V0X2F0dHJgPyBOb3BlLCBpdCdzIGludm9rZWQgdGhyb3VnaCBhIGZ1bmN0aW9uIHBvaW50ZXIuIFNvIHRoYXQncyBvdXQuIEkgY2FuJ3QgaW5jbHVkZSBvcHMgZWl0aGVyLlxuXG5BbHJpZ2h0LCB3aGF0IGVsc2UgaXMgcmVsZXZhbnQ/IFdlIGNvdWxkIGluY2x1ZGUgYGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVyc2AgYW5kIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYC5cblxuQnV0LCBvaCwgcmlnaHQhIGBmbGljX3NldF9hdHRyYCAqaXMqIHN0YXRpYy4gSG1tLCB0aGVyZSdzIGBrdm1fczM5MF9oYW5kbGVfcHZgLiBUaGF0IGNhbGxzIGBrdm1fczM5MF91bm1hcF9hbGxfYWRhcHRlcnNgLlxuXG5TbywgaXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBzdWl0YWJsZSBub24tc3RhdGljIGFuZCBub3QgaW4tbGluZWQgZnVuY3Rpb24gdG8gYmUgaW5jbHVkZWQgd291bGQgYmUgYGt2bV9zMzkwX2hhbmRsZV9wdmAuIEFuZCBJIHNob3VsZCBhbHNvIGtlZXAgYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgIGluIG1pbmQuXG5cblRpbWUgdG8gY2hlY2sgYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQ5NSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMDowOTo1My4xMTgxOTQxM1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzNDg0NDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0zNjg1PWludCBfX2luaXQga3ZtX3MzOTBfZ2liX2luaXQodTggbmlzYylcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzc0MC0vKlxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6Mzc0MTogKiBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljOiBmYXN0LXBhdGggZm9yIGlycWZkIGluamVjdGlvblxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzc0Mi0gKi9cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjM3NDM6aW50IGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWMoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNzQ0LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycV9zb3VyY2VfaWQsIGludCBsZXZlbCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDA6MDk6NTMuMjUxNjg4MDM3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MTk5Nzk2NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIEtWTS9zMzkwIEludGVycnVwdCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYC4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgaXQncyAqbm90KiBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCdzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nIGJlY2F1c2UgaXQgc3VnZ2VzdHMgaXQncyBsaWtlbHkgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGUgc3BlY2lmaWMgZmlsZSBpdCdzIGRlZmluZWQgaW4uIFRoaXMgcHJvYmFibHkgbWVhbnMgaXQncyBhIHB1YmxpY2x5IGFjY2Vzc2libGUgZnVuY3Rpb24sIGF0IGxlYXN0IHdpdGhpbiB0aGUgS1ZNL3MzOTAgYXJjaGl0ZWN0dXJlLiBXZSBuZWVkIHRvIGtlZXAgdGhpcyBpbiBtaW5kIGFzIHdlIHRyYWNlIGhvdyBpbnRlcnJ1cHQgaW5qZWN0aW9uIGlzIGhhbmRsZWQuIFRoaXMgbm9uLXN0YXRpYyBuYXR1cmUgYnJvYWRlbnMgdGhlIHNjb3BlIG9mIHdoZXJlIHBvdGVudGlhbCBpc3N1ZXMgY291bGQgYmUgaW50cm9kdWNlZCwgb3Igd2hlcmUgd2UgY291bGQgb3B0aW1pemUuXG5cbk5vdywgbGV0J3MgcGl2b3QgYW5kIHRha2UgYSBsb29rIGF0IGBrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzYC4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgdGhlIGRlc3RydWN0aW9uIG9mIGFkYXB0ZXJzIHdpbGwgaGF2ZSBzb21lIGludGVycGxheSB3aXRoIGhvdyBpbnRlcnJ1cHRzIGFyZSBtYW5hZ2VkLiBQZXJoYXBzIHRoZSBjbGVhbnVwIHJvdXRpbmVzIGZvciB0aGUgYWRhcHRlcnMgcmVsZWFzZSBvciByZS1jb25maWd1cmUgSVJRcy4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBhZGFwdGVycyBpbnRlcmFjdCB3aXRoIHRoZSBoYXJkd2FyZSBhbmQgdGhlIHZpcnR1YWwgbWFjaGluZSdzIGludGVycnVwdCBjb250cm9sbGVyIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGZsb3cgb2YgaW50ZXJydXB0IGV2ZW50cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGFkYXB0ZXJzIG1pZ2h0IGJlIGEgc291cmNlIG9mIGludGVycnVwdCBtYXNraW5nLCBkZS1hc3NlcnRpb24sIG9yIHJlZGlyZWN0aW9uLiBUaGVyZSBjb3VsZCBiZSBjcml0aWNhbCBsb2dpYyBpbiB0aGVyZSBmb3IgZW5zdXJpbmcgaW50ZXJydXB0cyBhcmUgcHJvcGVybHkgaGFuZGxlZCBkdXJpbmcgc2h1dGRvd24uIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCBjb25uZWN0aW9uIGV4aXN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2NDIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMDowOTo1Ni42NzE2NzIzMTVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDgxMTM0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MjYwND12b2lkIGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVycyhzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI2MzUtXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyNjM2OnZvaWQga3ZtX3MzOTBfZGVzdHJveV9hZGFwdGVycyhzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNjM3LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zNDI4PXZvaWQga3ZtX2FyY2hfZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzQ1MS1cXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpa3ZtLVxcdTAwM2VhcmNoLnNpZV9wYWdlMik7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM0NTI6XFx0a3ZtX3MzOTBfZGVzdHJveV9hZGFwdGVycyhrdm0pO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zNDUzLVxcdGt2bV9zMzkwX2NsZWFyX2Zsb2F0X2lycXMoa3ZtKTtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaD01NDY9aW50IHBzd19leHRpbnRfZGlzYWJsZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmg6NTQ3OnZvaWQga3ZtX3MzOTBfZGVzdHJveV9hZGFwdGVycyhzdHJ1Y3Qga3ZtICprdm0pO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuaC01NDgtaW50IGt2bV9zMzkwX2V4dF9jYWxsX3BlbmRpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDA6MDk6NTYuNzkyNDg5NzMyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMTc2OTAwMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0vczM5MCBBZGFwdGVyIE1vZGlmaWNhdGlvbiBDb2RlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGt2bV9zMzkwX2Rlc3Ryb3lfYWRhcHRlcnNgLiBJdCdzIG5vbi1zdGF0aWMsIHdoaWNoIGlzIGdvb2QuIFRoYXQncyBhIHBvaW50IGluIGl0cyBmYXZvciwgYnV0IGxldCdzIHNlZSBob3cgaXQgZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4gTXkgdGhpbmtpbmcgaXMsIGhvdyBpcyB0aGlzIGFjdHVhbGx5IHRyaWdnZXJlZD9cblxuTm93IEknbSBsb29raW5nIGF0IGBmbGljX3NldF9hdHRyYC4gSXQgaGFuZGxlcyBgS1ZNX0RFVl9GTElDX0FEQVBURVJfTU9ESUZZYCwgd2hpY2ggaXMgaW1wb3J0YW50IGJlY2F1c2UgKnRoYXQncyogdGhlIGlvY3RsIHRoYXQga2lja3Mgb2ZmIGBrdm1fczM5MF9hZGFwdGVyX21hcGAgYW5kIGBrdm1fczM5MF9hZGFwdGVyX3VubWFwYC4gRXZlbiB0aG91Z2ggYGZsaWNfc2V0X2F0dHJgICppcyogc3RhdGljLCBpdCBzZWVtcyB0byBiZSB0aGUgbWFpbiBwb2ludCBvZiBlbnRyeSBmb3IgdGhlIGFkYXB0ZXIgbW9kaWZpY2F0aW9uIGxvZ2ljLiBJdOKAmXMgZGVmaW5pdGVseSB3aGVyZSB0aGUgYWN0aW9uIHN0YXJ0cyBpbiB0ZXJtcyBvZiBtb2RpZnlpbmcgdGhlIGFkYXB0ZXJzLiBTbywgYmFzZWQgb24gdGhlIGZhY3QgdGhhdCB0aGUgY2hhbmdlcyBzdGFydCBoZXJlLCBJJ20gZ29pbmcgdG8gaW5jbHVkZSBpdC5cblxuV2FpdCBhIHNlY29uZOKApiBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nLiBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBwcmVmZXJzICpub24tc3RhdGljLCBub24taW5saW5lZCogZW50cnkgcG9pbnRzLiBBbmQgdGhlbiBpdCBnb2VzIG9uIHRvIGhpZ2hsaWdodCB0aGF0ICpzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyogd2hpY2ggYXJlIHVzdWFsbHkgaW5saW5lZCwgbGFjayBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBCdXQgYGZsaWNfc2V0X2F0dHJgIGlzIGEgKmZ1bmN0aW9uIHBvaW50ZXIqIGluc2lkZSBvZiBhIHN0cnVjdCEgVGhlcmVmb3JlLCBpdCBzaG91bGQgKm5vdCogYmUgaW5saW5lZC4gSXQgaGFzIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIE9rYXksIHRoYXQgY2hhbmdlcyB0aGluZ3MuXG5cbk9rYXksIG5leHQgSSdsbCBtb3ZlIG9uIHRvIGNoZWNrIGBrdm1fczM5MF9oYW5kbGVfcHZgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ3MywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMDoxMDowMS45MTAxODI4NDVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4ODc3MjE3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fczM5MF9oYW5kbGVfcHZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTI0NDY9c3RhdGljIGludCBrdm1fczM5MF9jcHVzX3RvX3B2KHN0cnVjdCBrdm0gKmt2bSwgdTE2ICpyYywgdTE2ICpycmMpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjQ3Ny0gKi9cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MjQ3ODpzdGF0aWMgc3NpemVfdCBrdm1fczM5MF9oYW5kbGVfcHZfaW5mbyhzdHJ1Y3Qga3ZtX3MzOTBfcHZfaW5mbyAqaW5mbylcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjQ3OS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjUxNz1zdGF0aWMgaW50IGt2bV9zMzkwX3B2X2RtcChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fcHZfY21kICpjbWQsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjU3OC1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MjU3OTpzdGF0aWMgaW50IGt2bV9zMzkwX2hhbmRsZV9wdihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fcHZfY21kICpjbWQpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTI1ODAte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTI3NjQtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjI3NjU6XFx0XFx0ZGF0YV9sZW4gPSBrdm1fczM5MF9oYW5kbGVfcHZfaW5mbyhcXHUwMDI2aW5mbyk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTI3NjYtXFx0XFx0aWYgKGRhdGFfbGVuIFxcdTAwM2MgMCkge1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTI5MjU9aW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMwNDAtXFx0XFx0LyogbXVzdCBiZSBjYWxsZWQgd2l0aG91dCBrdm0tXFx1MDAzZWxvY2sgKi9cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzA0MTpcXHRcXHRyID0ga3ZtX3MzOTBfaGFuZGxlX3B2KGt2bSwgXFx1MDAyNmFyZ3MpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMDQyLVxcdFxcdGlmIChjb3B5X3RvX3VzZXIoYXJncCwgXFx1MDAyNmFyZ3MsIHNpemVvZihhcmdzKSkpIHtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01NDMwPWxvbmcga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU0NzQtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU0NzU6c3RhdGljIGludCBrdm1fczM5MF9oYW5kbGVfcHZfdmNwdV9kdW1wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTQ3Ni1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qga3ZtX3B2X2NtZCAqY21kKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU1MTc9bG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU3MTUtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU3MTY6XFx0XFx0ciA9IGt2bV9zMzkwX2hhbmRsZV9wdl92Y3B1X2R1bXAodmNwdSwgXFx1MDAyNmNtZCk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU3MTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAwOjEwOjAyLjI5ODk2MzU4NFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mzg0Njk0MzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEtWTS9zMzkwIENvZGUgU3RydWN0dXJlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB0aGF0IGBrdm1fczM5MF9oYW5kbGVfcHZgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCBidXQgd2hhdCdzIGludGVyZXN0aW5nIGlzIHRoYXQgaXQgY2FsbHMgYGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVyc2AuIFRoYXQncyBhIGtleSBjb25uZWN0aW9uIEkgbmVlZCB0byBrZWVwIGluIG1pbmQuIEFsc28sIGBrdm1fYXJjaF92bV9pb2N0bGAgaXMgbm9uLXN0YXRpYyBhbmQgKmFsc28qIGNhbGxzIGBrdm1fczM5MF9oYW5kbGVfcHZgLiBUaGF0J3MgYSBjbGVhciBjb250cm9sIGZsb3cgcGF0aCwgd2hpY2ggaXMgc29tZXRoaW5nIEkgbmVlZCB0byBrZWVwIGluIG1pbmQuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBtb3N0IHJlbGV2YW50IHN5bWJvbHMgdG8gZm9jdXMgb24gaGVyZSBhcmUgZGVmaW5pdGVseTogYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgLCBga3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzYCwgYW5kIGBrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBjcml0aWNhbCBwb2ludHMgb2YgaW50ZXJlc3QgcmlnaHQgbm93LlxuXG5IYW5nIG9uIGEgc2Vjb25k4oCmIEkndmUgZ290IHRvIHJldmlzaXQgdGhlIGBmbGljX3NldF9hdHRyYCBmdW5jdGlvbi4gSXQncyBzdGF0aWMsIGJ1dCBpdCAqaXMqIHRoZSBpb2N0bCBoYW5kbGVyIGZvciB0aGUgZGV2aWNlLiBUaGF0J3MgYSBiaXQgb2YgYSBzdXJwcmlzZSwgYnV0IEkga25vdyBpdCdzIHVzZWQgd2l0aCBga3ZtX2RldmljZV9vcHNgIGJ5IHRoZSBnZW5lcmljIEtWTSBjb2RlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJ3Qgb3Zlcmxvb2sgYW55IHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgdGhlcmUuIEkgY2FuJ3QgdGhpbmsgb2YgYSBub24tc3RhdGljIGZ1bmN0aW9uIGF0IHRoZSBtb21lbnQsIGJ1dCB0aGF0IGRvZXNuJ3QgbWVhbiBpdCBkb2Vzbid0IGV4aXN0LlxuXG5TbywgSSdtIGdvaW5nIHRvIHNvbGlkaWZ5IG15IGZvY3VzIG9uIHRob3NlIHRocmVlIGluaXRpYWwgc3ltYm9sczogYGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVyc2AsIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYCwgYW5kIGBrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzYC4gSSBtaWdodCBuZWVkIHRvIGNpcmNsZSBiYWNrIHRvIGBmbGljX3NldF9hdHRyYCwgYnV0IHRob3NlIHRocmVlIHNlZW0gdGhlIG1vc3QgaW1wb3J0YW50IHJpZ2h0IG5vdy5cblxuRmluYWxseSwganVzdCBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBiZSBjb21wbGV0ZS4gVGhpcyBwYXRjaCBtb2RpZmllcyBgYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY2AuIEkga25vdyB0aGF0IHRoaXMgZmlsZSBpcyBvbmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19LVk1gIGlzIGVuYWJsZWQsIHNvIEknbSBjb3ZlcmVkIG9uIHRoZSBjb25maWd1cmF0aW9uIGZyb250LiBFeGNlbGxlbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDMxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAwOjEwOjA3LjY4MzY2MDgyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTM5NjkwNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50ZXJydXB0Lm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL01ha2VmaWxlPTg9Y2NmbGFncy15IDo9IC1JdmlydC9rdm0gLUlhcmNoL3MzOTAva3ZtXFxuYXJjaC9zMzkwL2t2bS9NYWtlZmlsZS05LVxcbmFyY2gvczM5MC9rdm0vTWFrZWZpbGU6MTA6a3ZtLXkgKz0ga3ZtLXMzOTAubyBpbnRlcmNlcHQubyBpbnRlcnJ1cHQubyBwcml2Lm8gc2lncC5vXFxuYXJjaC9zMzkwL2t2bS9NYWtlZmlsZS0xMS1rdm0teSArPSBkaWFnLm8gZ2FjY2Vzcy5vIGd1ZXN0ZGJnLm8gdnNpZS5vIHB2Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDA6MTA6MDguMTM3NjM2MTU4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NzkxMjAwMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYnVpbGQgc3lzdGVtIGFuZCBjb25maXJtaW5nIGEgZmV3IHRoaW5ncy4gRmlyc3QsIHllcywgYGludGVycnVwdC5vYCBpcyBkZWZpbml0ZWx5IHB1bGxlZCBpbiBieSBga3ZtLXlgLiBUaGF0J3MgZXhwZWN0ZWQsIGdpdmVuIGl0cyByb2xlLiBOZXh0LCB0aGUgb3ZlcmFsbCBjb25maWcgZm9yIHRoaXMgbW9kdWxlIGlzIGluZGVlZCBgS1ZNYC4gTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBEb2VzIGBLVk1gIGRlcGVuZCBvbiBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgb3IgZmVhdHVyZXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgdG8gZnVsbHkgZ3Jhc3AgaG93IHRoaXMgYWxsIGZpdHMgdG9nZXRoZXIgYW5kIHBpbnBvaW50IHBvdGVudGlhbCBwb2ludHMgb2YgaW1wYWN0LiBMZXQncyBkaWcgZGVlcGVyIGludG8gdGhlIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTYxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDA6MTA6MTEuMTE2NzU5NjY4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE4ODg5MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9LY29uZmlnPTE3PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTE4LVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzoxOTpjb25maWcgS1ZNXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTIwLVxcdGRlZl90cmlzdGF0ZSB5XFxuLS1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDYtXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cXHRib29sIFxcXCJVc2Vyc3BhY2UgY29udHJvbGxlZCB2aXJ0dWFsIG1hY2hpbmVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMDoxMDoxMS4yNjg2NTQ0ODRaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzExMjMyNjA0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKlRoZSBQaXZvdGFsIFJvbGUgb2YgVmlydHVhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGlzIG1hdHRlciwgd2hhdGV2ZXIgXCJpdFwiIGlzLCBoaW5nZXMgb24gdGhlIHZlcnkgbmF0dXJlIGFuZCBpbXBsZW1lbnRhdGlvbiBvZiBgVklSVFVBTElaQVRJT05gLiBXZSdyZSB0YWxraW5nIGFib3V0IGluZnJhc3RydWN0dXJlLCBhcHBsaWNhdGlvbnMsIHJlc291cmNlc+KApiBldmVyeXRoaW5nLiBUaGUgbnVhbmNlcyBvZiB0aGUgc3BlY2lmaWMgdmlydHVhbGl6YXRpb24gdGVjaG5vbG9neSBvciBtZXRob2RvbG9neSBkZXBsb3llZCDigJMgYmUgaXQgaGFyZHdhcmUgdmlydHVhbGl6YXRpb24sIE9TLWxldmVsIHZpcnR1YWxpemF0aW9uIChjb250YWluZXJzKSwgb3Igc29tZSBoeWJyaWQgYXBwcm9hY2gg4oCTIHdpbGwgcHJvZm91bmRseSBpbXBhY3QgdGhlIGRpcmVjdGlvbiB3ZSBuZWVkIHRvIHRha2UuIEFyZSB3ZSB0YWxraW5nIGFib3V0IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzPyBTY2FsYWJpbGl0eSBjaGFsbGVuZ2VzPyBTZWN1cml0eSBjb25zaWRlcmF0aW9ucz8gQ29zdCBvcHRpbWl6YXRpb24/IFRoZSBhbnN3ZXIgdG8gKmFueSogb2YgdGhvc2UgcXVlc3Rpb25zLCBhbmQgbGlrZWx5IGNvdW50bGVzcyBvdGhlcnMsIGlzIGdvaW5nIHRvIGJlIGZ1bmRhbWVudGFsbHkgc2hhcGVkIGJ5IGhvdyBgVklSVFVBTElaQVRJT05gIGlzIHV0aWxpemVkIHdpdGhpbiB0aGUgc3lzdGVtIG9yIGNvbnRleHQgd2UncmUgZXhhbWluaW5nLiBXaXRob3V0IGtub3dpbmcgdGhvc2UgZGV0YWlscywgYW55IHByb3Bvc2VkIHNvbHV0aW9uIHdvdWxkIGJlIHB1cmUgc3BlY3VsYXRpb24uIEl0J3MgdGhlIGx5bmNocGluLCB0aGUgZXNzZW50aWFsIGZvdW5kYXRpb24gdXBvbiB3aGljaCBldmVyeXRoaW5nIGVsc2UgcmVzdHMuIFRoZSBkZXZpbCwgYXMgYWx3YXlzLCBpcyBpbiB0aGUgdmlydHVhbGl6YXRpb24gZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzMjIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAwOjEwOjE0LjM4MDk4NDU3MVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4NTIzNDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbnVjb25maWcgVklSVFVBTElaQVRJT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vS2NvbmZpZz01PXNvdXJjZSBcXFwidmlydC9rdm0vS2NvbmZpZ1xcXCJcXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNi1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NzptZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTgtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMDoxMDoxNC41Mzk1MTcyMTZaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzUzOTczNzQyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNIHMzOTAgSW50ZXJydXB0IEhhbmRsaW5nIGZvciBQYXRjaCBSZXZpZXcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgdGhlIG1haW4gZm9jdXMgaXMgb24gdGhlIGBWSVJUVUFMSVpBVElPTmAgYm9vbGVhbiB3aGljaCwgYmFzZWQgb24gdGhlIGNvbmZpZ3VyYXRpb25zLCBzZWVtcyB0byBiZSB0aWVkIHRvIGBLVk1gIOKAkyBhcyBleHBlY3RlZCBmb3IgdGhpcyBzMzkwIHdvcmsuIE5vdywgdGhlIHBhdGNoIGl0c2VsZiBpcyBkZWFsaW5nIHdpdGggdGhlIHMzOTAgS1ZNIGludGVycnVwdCBoYW5kbGluZywgYW5kIHNwZWNpZmljYWxseSwgdGhlIGZhbGxiYWNrIG1lY2hhbmlzbSBmb3IgYWRhcHRlciBpbmRpY2F0b3JzLiBUaGlzIHNpZ25hbHMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgS1ZNIHN1YnN5c3RlbSwgZXNwZWNpYWxseSBhcm91bmQgaW50ZXJydXB0IGluamVjdGlvbiBhbmQgbWFwcGluZywgc28gaXQncyBhIGNyaXRpY2FsIGFyZWEgdG8gdmV0LiBDb25zaWRlcmluZyBzeXprYWxsZXIgc3VwcG9ydHMgczM5MHggS1ZNIGZ1enppbmcsIHRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlxuXG5JJ3ZlIGFscmVhZHkgaWRlbnRpZmllZCB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCwgc28gbGV0J3MgcmV2aXNpdCB0aG9zZTogYGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVyc2AsIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYCwgYW5kIGBrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzYC5cblxuYGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVyc2AgaXMgY2FsbGVkIGZyb20gYGt2bV9zMzkwX2Rlc3Ryb3lfYWRhcHRlcnNgIGFuZCBga3ZtX3MzOTBfaGFuZGxlX3B2YC4gYGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNgIGlzIGNhbGxlZCBmcm9tIHRoZSBnZW5lcmljIGBrdm1fc2V0X2lycV9pbmF0b21pY2AuICBga3ZtX3MzOTBfZGVzdHJveV9hZGFwdGVyc2AgaXMgY2FsbGVkIGZyb20gYGt2bV9hcmNoX2Rlc3Ryb3lfdm1gLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXNlIGFyZSBpbmNsdWRlZC5cblxuTm93LCBJIHdhcyBsb29raW5nIGF0IGBrdm1fczM5MF9hZGFwdGVyX21hcGAgYW5kIGBrdm1fczM5MF9hZGFwdGVyX3VubWFwYCwgc2luY2UgdGhleSBhcmUgc3RhdGljIGFuZCBoYXZlIGJlZW4gbW9kaWZpZWQuIEJ1dCBga3ZtX3MzOTBfYWRhcHRlcl9tYXBgIGlzIGlubGluZWQsIGJlaW5nIGNhbGxlZCBmcm9tIGBtb2RpZnlfaW9fYWRhcHRlcmAsIGFuZCBgZmxpY19zZXRfYXR0cmAgd2hpY2ggaXMgYSBmdW5jdGlvbiBwb2ludGVyLiBTbyBJIHdpbGwgaW5jbHVkZSBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2AsIGBrdm1fczM5MF91bm1hcF9hbGxfYWRhcHRlcnNgLCBhbmQgYGt2bV9zMzkwX2Rlc3Ryb3lfYWRhcHRlcnNgLlxuXG5KdXN0IGNvbmZpcm1pbmcsIGBLVk1gIGlzIGluZGVlZCB0aGUgb25seSBjb25maWcgYXQgcGxheSBoZXJlLCBnaXZlbiB0aGUgYGRlZl9ib29sIHlgIGZvciBgVklSVFVBTElaQVRJT05gLiBMb29rcyBsaWtlIHRoaXMgc3VtbWFyaXplcyB0aGUgZm9jdXMgc3ltYm9sczpcbiogICBga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY2BcbiogICBga3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzYFxuKiAgIGBrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzYFxuKiAgIFRoZSBjb25maWcgaXMgYEtWTWAuXG5cbkknbGwgcHJvY2VlZCB0byBleGFtaW5lIGBrdm1fYXJjaF9zZXRfaXJxX2luYXRvbWljYCBub3cgdG8gY2hlY2sgdGhlIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjgzLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDAwOjEwOjIyLjA3OTI1ODMyNVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwMDE4MTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTM2ODU9aW50IF9faW5pdCBrdm1fczM5MF9naWJfaW5pdCh1OCBuaXNjKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNzQwLS8qXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozNzQxOiAqIGt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWM6IGZhc3QtcGF0aCBmb3IgaXJxZmQgaW5qZWN0aW9uXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zNzQyLSAqL1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6Mzc0MzppbnQga3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pYyhzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSxcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTM3NDQtXFx0XFx0XFx0ICAgICAgc3RydWN0IGt2bSAqa3ZtLCBpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGxldmVsLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMDoxMDoyMi4yNjkyODQ0MDlaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc1ODU1MDA5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCB5ZXAsIHRoYXQncyBkZWZpbml0ZWx5IHRoZSBrZXkgYXJlYSBJIHdhcyBleHBlY3RpbmcuIEl0J3MgcmlnaHQgdGhlcmUuIE5vdywgbGV0J3MgZHJpbGwgZG93biBpbnRvIGBrdm1fczM5MF91bm1hcF9hbGxfYWRhcHRlcnNgLiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIOKAkyB0aGUgZnVuY3Rpb24gdGhhdCdzIHJlc3BvbnNpYmxlIGZvciB0aGUgY2xlYW4tdXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciB0aG9yb3VnaGx5IHRvIGlkZW50aWZ5IHRoZSByb290IGNhdXNlIG9mIHRoZSBiZWhhdmlvciwgb3IgdG8gdW5kZXJzdGFuZCBpZiB0aGUgaXNzdWUgbGllcyBmdXJ0aGVyIGRvd24gdGhlIGNhbGwgc3RhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MDU0LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDA6MTA6MjUuMDI3ODM4ODc1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzA2NjgwODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0yNTU3PXN0YXRpYyBpbnQga3ZtX3MzOTBfYWRhcHRlcl91bm1hcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZCwgX191NjQgYWRkcilcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjYwMy1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI2MDQ6dm9pZCBrdm1fczM5MF91bm1hcF9hbGxfYWRhcHRlcnMoc3RydWN0IGt2bSAqa3ZtKVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjYwNS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTI2MzY9dm9pZCBrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjYzOS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjI2NDA6XFx0a3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzKGt2bSk7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNjQxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMDoxMDoyNS4yNTg1MTY4MjlaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjcyMjcwMjE5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ29uZmlybWluZyBhbmQgRGlyZWN0aW5nIEZvY3VzKipcblxuQWxyaWdodCwgeWVwLCBJIHNlZSBpdC4gSXQncyBkZWZpbml0ZWx5IHRoZXJlLCB0aGUgcG90ZW50aWFsIGlzc3VlIG9yIGFyZWEgSSdtIGxvb2tpbmcgYXQuIExldCdzIG5vdCB3YXN0ZSBhbnkgdGltZSBoZXJlLiBNeSBuZXh0IHN0ZXAgaGFzIHRvIGJlIGNsZWFyLCBpdCBoYXMgdG8gYmUgZm9jdXNlZCwgYW5kIHRoYXQgbWVhbnMgSSBuZWVkIHRvIGRpZyBpbnRvIGBrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzYC4gVGhhdCBmdW5jdGlvbiBpcyB0aGUgbGlrZWx5IGxvY2F0aW9uIHdoZXJlIHRoZSBpc3N1ZSwgd2hhdGV2ZXIgaXQgbWF5IGJlLCBpcyBsdXJraW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgdGhvcm91Z2hseS4gVGltZSB0byBnZXQgZG93biB0byBzcGVjaWZpY3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NTIxLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDA6MTA6MjcuOTgxMjIyNDU2WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ1OTQ4OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3MzOTBfZGVzdHJveV9hZGFwdGVyc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MjYwND12b2lkIGt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVycyhzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTI2MzUtXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoyNjM2OnZvaWQga3ZtX3MzOTBfZGVzdHJveV9hZGFwdGVycyhzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yNjM3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDA6MTA6MjguMDk1ODIzMzQ0WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMjg4OTM1MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ29uZmlybWF0aW9uIGFuZCBJbW1lZGlhdGUgQWN0aW9uKipcblxuT2theSwgdGhlIGNvbmZpcm1hdGlvbiBpcyBpbi4gVGhlIHNwZWNpZmljIGNvbmRpdGlvbiBJIHdhcyBsb29raW5nIGZvciBpcyBpbmRlZWQgcHJlc2VudC4gTm8gZnVydGhlciBhbmFseXNpcyBpcyByZXF1aXJlZCBhdCB0aGlzIGp1bmN0dXJlLiBJJ20gc2F0aXNmaWVkIHdpdGggdGhlIHZhbGlkYXRpb24gb2YgdGhpcyBzcGVjaWZpYyBicmFuY2guIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBpbW1lZGlhdGVseSBjYWxsIHRoZSBgc2V0LXJlc3VsdHNgIGZ1bmN0aW9uIG9yIG1ldGhvZC4gSSBuZWVkIHRvIGdldCB0aGlzIGluZm9ybWF0aW9uIHByb2Nlc3NlZCBhbmQgdGhlIHN0YXRlIHVwZGF0ZWQgYmFzZWQgb24gdGhpcyB2YWxpZGF0ZWQgY29uZGl0aW9uLiBUaGVyZSdzIG5vIHZhbHVlIGluIGRlZmVycmluZyB0aGlzIG9wZXJhdGlvbi4gTGV0J3MgZXhlY3V0ZSBhbmQgbW92ZSBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODg1NywiT3V0cHV0VG9rZW5zIjoxMzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwMDoxMDozMS4zMjQ3MjE4MTdaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTAzMzk4OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcmNoX3NldF9pcnFfaW5hdG9taWNcIixcbiAgICBcImt2bV9zMzkwX3VubWFwX2FsbF9hZGFwdGVyc1wiLFxuICAgIFwia3ZtX3MzOTBfZGVzdHJveV9hZGFwdGVyc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzMzkwIEtWTSBpbnRlcnJ1cHQgaGFuZGxpbmcgbG9naWMgdG8gYWxsb3cgZmFsbGJhY2sgdG8gc2hvcnQtdGVybSBwaW5uaW5nIHdoZW4gbG9uZy10ZXJtIHBpbm5pbmcgZmFpbHMgZm9yIGFkYXB0ZXIgaW5kaWNhdG9ycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBLVk0gc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBob3cgaW50ZXJydXB0cyBhcmUgaW5qZWN0ZWQgYW5kIG1hcHBlZCwgYW5kIGl0IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2FyY2hfc2V0X2lycV9pbmF0b21pY1wiLFxuICAgIFwia3ZtX3MzOTBfdW5tYXBfYWxsX2FkYXB0ZXJzXCIsXG4gICAgXCJrdm1fczM5MF9kZXN0cm95X2FkYXB0ZXJzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHMzOTAgS1ZNIGludGVycnVwdCBoYW5kbGluZyBsb2dpYyB0byBhbGxvdyBmYWxsYmFjayB0byBzaG9ydC10ZXJtIHBpbm5pbmcgd2hlbiBsb25nLXRlcm0gcGlubmluZyBmYWlscyBmb3IgYWRhcHRlciBpbmRpY2F0b3JzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEtWTSBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGhvdyBpbnRlcnJ1cHRzIGFyZSBpbmplY3RlZCBhbmQgbWFwcGVkLCBhbmQgaXQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow9t479[1] Phase: Succeeded StartedAt: 2026-07-25 00:10:43 +0000 UTC FinishedAt: 2026-07-25 00:10:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9t479[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-25 00:10:43 +0000 UTC FinishedAt: 2026-07-25 00:10:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9t479[2] Phase: Succeeded StartedAt: 2026-07-25 00:10:43 +0000 UTC FinishedAt: 2026-07-25 01:45:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9t479[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_set_irq_inatomic","kvm_s390_unmap_all_adapters","kvm_s390_destroy_adapters"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0be33aa3-3dc3-48fc-b5e7-39c18810e642","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-25 00:10:43 +0000 UTC FinishedAt: 2026-07-25 01:45:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_set_irq_inatomic","kvm_s390_unmap_all_adapters","kvm_s390_destroy_adapters"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0be33aa3-3dc3-48fc-b5e7-39c18810e642","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-workflow9t479[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_set_irq_inatomic","kvm_s390_unmap_all_adapters","kvm_s390_destroy_adapters"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0be33aa3-3dc3-48fc-b5e7-39c18810e642","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-25 00:10:43 +0000 UTC FinishedAt: 2026-07-25 00:11:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9t479[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_set_irq_inatomic","kvm_s390_unmap_all_adapters","kvm_s390_destroy_adapters"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0be33aa3-3dc3-48fc-b5e7-39c18810e642","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-07-25 00:10:43 +0000 UTC FinishedAt: 2026-07-25 00:11:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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-workflow9t479/series-workflow9t479-convert-artifact-1364307600/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9t479[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_set_irq_inatomic","kvm_s390_unmap_all_adapters","kvm_s390_destroy_adapters"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0be33aa3-3dc3-48fc-b5e7-39c18810e642","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-25 00:11:11 +0000 UTC FinishedAt: 2026-07-25 00:56:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9t479[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_set_irq_inatomic","kvm_s390_unmap_all_adapters","kvm_s390_destroy_adapters"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0be33aa3-3dc3-48fc-b5e7-39c18810e642","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-07-25 00:11:11 +0000 UTC FinishedAt: 2026-07-25 00:56:53 +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:*e87dc90b-a877-4de9-86cf-a098651c4387,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-workflow9t479/series-workflow9t479-convert-artifact-1364307600/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": "f4d056b2-155a-43cd-825d-30a1afa89d7e", "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-workflow9t479/series-workflow9t479-build-action-1207618326/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9t479[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_set_irq_inatomic","kvm_s390_unmap_all_adapters","kvm_s390_destroy_adapters"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0be33aa3-3dc3-48fc-b5e7-39c18810e642","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-07-25 00:11:11 +0000 UTC FinishedAt: 2026-07-25 00:56:44 +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:*e87dc90b-a877-4de9-86cf-a098651c4387,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-workflow9t479/series-workflow9t479-convert-artifact-1364307600/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": "f4d056b2-155a-43cd-825d-30a1afa89d7e", "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-workflow9t479/series-workflow9t479-build-action-1207618326/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9t479[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_set_irq_inatomic","kvm_s390_unmap_all_adapters","kvm_s390_destroy_adapters"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0be33aa3-3dc3-48fc-b5e7-39c18810e642","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-25 00:56:53 +0000 UTC FinishedAt: 2026-07-25 00:56:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9t479[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_set_irq_inatomic","kvm_s390_unmap_all_adapters","kvm_s390_destroy_adapters"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0be33aa3-3dc3-48fc-b5e7-39c18810e642","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-07-25 00:56:53 +0000 UTC FinishedAt: 2026-07-25 00:56:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9t479[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_set_irq_inatomic","kvm_s390_unmap_all_adapters","kvm_s390_destroy_adapters"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0be33aa3-3dc3-48fc-b5e7-39c18810e642","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-25 00:56:53 +0000 UTC FinishedAt: 2026-07-25 00:57:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9t479[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_set_irq_inatomic","kvm_s390_unmap_all_adapters","kvm_s390_destroy_adapters"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0be33aa3-3dc3-48fc-b5e7-39c18810e642","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-07-25 00:56:53 +0000 UTC FinishedAt: 2026-07-25 00:57:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0be33aa3-3dc3-48fc-b5e7-39c18810e642","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-workflow9t479/series-workflow9t479-convert-artifact-428624887/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9t479[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_set_irq_inatomic","kvm_s390_unmap_all_adapters","kvm_s390_destroy_adapters"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0be33aa3-3dc3-48fc-b5e7-39c18810e642","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-25 00:57:04 +0000 UTC FinishedAt: 2026-07-25 00:58:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9t479[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_set_irq_inatomic","kvm_s390_unmap_all_adapters","kvm_s390_destroy_adapters"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0be33aa3-3dc3-48fc-b5e7-39c18810e642","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-07-25 00:57:04 +0000 UTC FinishedAt: 2026-07-25 00:58:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f4d056b2-155a-43cd-825d-30a1afa89d7e,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-workflow9t479/series-workflow9t479-build-action-1207618326/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-workflow9t479[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_set_irq_inatomic","kvm_s390_unmap_all_adapters","kvm_s390_destroy_adapters"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0be33aa3-3dc3-48fc-b5e7-39c18810e642","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-25 00:58:57 +0000 UTC FinishedAt: 2026-07-25 00:58:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9t479[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_set_irq_inatomic","kvm_s390_unmap_all_adapters","kvm_s390_destroy_adapters"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0be33aa3-3dc3-48fc-b5e7-39c18810e642","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-07-25 00:58:57 +0000 UTC FinishedAt: 2026-07-25 00:58:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9t479[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_set_irq_inatomic","kvm_s390_unmap_all_adapters","kvm_s390_destroy_adapters"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0be33aa3-3dc3-48fc-b5e7-39c18810e642","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-25 00:58:57 +0000 UTC FinishedAt: 2026-07-25 01:40:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9t479[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_set_irq_inatomic","kvm_s390_unmap_all_adapters","kvm_s390_destroy_adapters"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0be33aa3-3dc3-48fc-b5e7-39c18810e642","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-07-25 00:58:57 +0000 UTC FinishedAt: 2026-07-25 01:40:13 +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:*e87dc90b-a877-4de9-86cf-a098651c4387,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-workflow9t479/series-workflow9t479-convert-artifact-428624887/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": "f680e236-784e-4362-93aa-4ea21665e14e", "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-workflow9t479/series-workflow9t479-build-action-3910475451/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9t479[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_set_irq_inatomic","kvm_s390_unmap_all_adapters","kvm_s390_destroy_adapters"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0be33aa3-3dc3-48fc-b5e7-39c18810e642","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-07-25 00:58:57 +0000 UTC FinishedAt: 2026-07-25 01:40:03 +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:*e87dc90b-a877-4de9-86cf-a098651c4387,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-workflow9t479/series-workflow9t479-convert-artifact-428624887/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": "f680e236-784e-4362-93aa-4ea21665e14e", "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-workflow9t479/series-workflow9t479-build-action-3910475451/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9t479[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_set_irq_inatomic","kvm_s390_unmap_all_adapters","kvm_s390_destroy_adapters"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0be33aa3-3dc3-48fc-b5e7-39c18810e642","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-25 01:40:13 +0000 UTC FinishedAt: 2026-07-25 01:40:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9t479[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_set_irq_inatomic","kvm_s390_unmap_all_adapters","kvm_s390_destroy_adapters"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0be33aa3-3dc3-48fc-b5e7-39c18810e642","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-07-25 01:40:13 +0000 UTC FinishedAt: 2026-07-25 01:40:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9t479[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_set_irq_inatomic","kvm_s390_unmap_all_adapters","kvm_s390_destroy_adapters"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0be33aa3-3dc3-48fc-b5e7-39c18810e642","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-25 01:40:13 +0000 UTC FinishedAt: 2026-07-25 01:42:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9t479[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_set_irq_inatomic","kvm_s390_unmap_all_adapters","kvm_s390_destroy_adapters"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0be33aa3-3dc3-48fc-b5e7-39c18810e642","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-07-25 01:40:13 +0000 UTC FinishedAt: 2026-07-25 01:42:05 +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:*f680e236-784e-4362-93aa-4ea21665e14e,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-workflow9t479/series-workflow9t479-build-action-3910475451/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-workflow9t479[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_set_irq_inatomic","kvm_s390_unmap_all_adapters","kvm_s390_destroy_adapters"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0be33aa3-3dc3-48fc-b5e7-39c18810e642","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-25 01:42:15 +0000 UTC FinishedAt: 2026-07-25 01:45:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9t479[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_set_irq_inatomic","kvm_s390_unmap_all_adapters","kvm_s390_destroy_adapters"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0be33aa3-3dc3-48fc-b5e7-39c18810e642","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-07-25 01:42:15 +0000 UTC FinishedAt: 2026-07-25 01:45:11 +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":["kvm_arch_set_irq_inatomic","kvm_s390_unmap_all_adapters","kvm_s390_destroy_adapters"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*f4d056b2-155a-43cd-825d-30a1afa89d7e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f680e236-784e-4362-93aa-4ea21665e14e,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-workflow9t479/series-workflow9t479-build-action-1207618326/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-workflow9t479/series-workflow9t479-build-action-3910475451/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow9t479[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_set_irq_inatomic","kvm_s390_unmap_all_adapters","kvm_s390_destroy_adapters"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0be33aa3-3dc3-48fc-b5e7-39c18810e642","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-07-25 01:42:15 +0000 UTC FinishedAt: 2026-07-25 01:42:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9t479[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_set_irq_inatomic","kvm_s390_unmap_all_adapters","kvm_s390_destroy_adapters"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0be33aa3-3dc3-48fc-b5e7-39c18810e642","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-07-25 01:42:15 +0000 UTC FinishedAt: 2026-07-25 01:42:20 +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":["kvm_arch_set_irq_inatomic","kvm_s390_unmap_all_adapters","kvm_s390_destroy_adapters"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9t479/series-workflow9t479-convert-artifact-1801166384/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9t479[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_set_irq_inatomic","kvm_s390_unmap_all_adapters","kvm_s390_destroy_adapters"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0be33aa3-3dc3-48fc-b5e7-39c18810e642","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-07-25 01:42:15 +0000 UTC FinishedAt: 2026-07-25 01:42:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9t479[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_set_irq_inatomic","kvm_s390_unmap_all_adapters","kvm_s390_destroy_adapters"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0be33aa3-3dc3-48fc-b5e7-39c18810e642","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-25 01:42:15 +0000 UTC FinishedAt: 2026-07-25 01:42:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9t479[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_set_irq_inatomic","kvm_s390_unmap_all_adapters","kvm_s390_destroy_adapters"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0be33aa3-3dc3-48fc-b5e7-39c18810e642","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-07-25 01:42:15 +0000 UTC FinishedAt: 2026-07-25 01:42:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9t479[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_set_irq_inatomic","kvm_s390_unmap_all_adapters","kvm_s390_destroy_adapters"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0be33aa3-3dc3-48fc-b5e7-39c18810e642","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-07-25 01:42:25 +0000 UTC FinishedAt: 2026-07-25 01:45:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9t479[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_set_irq_inatomic","kvm_s390_unmap_all_adapters","kvm_s390_destroy_adapters"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0be33aa3-3dc3-48fc-b5e7-39c18810e642","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-07-25 01:42:25 +0000 UTC FinishedAt: 2026-07-25 01:44:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f4d056b2-155a-43cd-825d-30a1afa89d7e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f680e236-784e-4362-93aa-4ea21665e14e,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-workflow9t479/series-workflow9t479-build-action-1207618326/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-workflow9t479/series-workflow9t479-build-action-3910475451/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-workflow9t479/series-workflow9t479-convert-artifact-1801166384/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,}