Name: series-workflowz4j2t Phase: Succeeded StartedAt: 2026-08-27 04:40:35 +0000 UTC FinishedAt: 2026-08-27 05:16:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz4j2t[0] Phase: Succeeded StartedAt: 2026-08-27 04:40:35 +0000 UTC FinishedAt: 2026-08-27 04:45:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz4j2t[0].run-triage Phase: Succeeded StartedAt: 2026-08-27 04:40:35 +0000 UTC FinishedAt: 2026-08-27 04:45:41 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS" ], "series_id": "b6f5cc47-9651-4223-a739-e2141668ed75" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damos_commit_quota_goals", "damos_sysfs_set_quota_scores" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA0OjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzJiMzNDssCiAgICAmIzM0O2RhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBidWcgd2hlcmUgdGhlIGBsYXN0X3BzaV90b3RhbGAgZmllbGQgaW4gYHN0cnVjdCBkYW1vc19xdW90YV9nb2FsYCBpcyBsZWZ0IHVuaW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uLiBUaGUgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB1c2luZyBga21hbGxvY19vYmooKWAgKHdoaWNoIG1hcHMgdG8gYGttYWxsb2NgIGFuZCBkb2VzIG5vdCB6ZXJvIG1lbW9yeSkgaW4gYGRhbW9zX25ld19xdW90YV9nb2FsKClgLCBidXQgYGxhc3RfcHNpX3RvdGFsYCB3YXMgbm90IGluaXRpYWxpemVkLiBEdXJpbmcgdGhlIGZpcnN0IGV2YWx1YXRpb24gY3ljbGUsIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKClgIHJlYWRzIHRoaXMgdW5pbml0aWFsaXplZCBmaWVsZCB0byBjb21wdXRlIGBnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBub3dfcHNpX3RvdGFsIC0gZ29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbDtgLiBUaGlzIHVuaW5pdGlhbGl6ZWQgcmVzdWx0IGlzIHN1YnNlcXVlbnRseSB1c2VkIGluIGEgY29uZGl0aW9uYWwgYnJhbmNoICh2aWEgdGhlIGBtYXgoKWAgbWFjcm8pIGluIGBkYW1vc19xdW90YV9zY29yZSgpYCB0byBkZXRlcm1pbmUgdGhlIGhpZ2hlc3QgcXVvdGEgc2NvcmUsIHdoaWNoIGRpY3RhdGVzIG1lbW9yeSByZWNsYWltIGJlaGF2aW9yLlxuXG5TdGFuZGFyZCBLQVNBTiBvbmx5IGRldGVjdHMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWUgYnVnczsgaXQgZG9lcyBub3QgdHJhY2sgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIHdvdWxkIGNvbXBsZXRlbHkgbWlzcyB0aGlzIGJ1Zy4gS01TQU4sIG9uIHRoZSBvdGhlciBoYW5kLCB0cmFja3MgdW5pbml0aWFsaXplZCBtZW1vcnkgYXQgdGhlIGJpdCBsZXZlbCBhbmQgd2lsbCByZWxpYWJseSBmbGFnIHRoZSB1c2Ugb2YgdGhlIHVuaW5pdGlhbGl6ZWQgdmFsdWUgd2hlbiBpdCBhZmZlY3RzIGNvbnRyb2wgZmxvdyAoZS5nLiwgaW4gdGhlIGBtYXgoKWAgY29tcGFyaXNvbikuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBoaWdobHkganVzdGlmaWVkIHRvIGNhdGNoIHRoaXMgYW5kIHNpbWlsYXIgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGluIHRoZSBEQU1PTiBzdWJzeXN0ZW0uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IHRydWUsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgREFNT04gbG9naWMgdG8gcHJvcGVybHkgaW5pdGlhbGl6ZSBhbmQgY29tbWl0IHRoZSBgbGFzdF9wc2lfdG90YWxgIGZvciB0aGUgYERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AgcXVvdGEgbWV0cmljLiBJdCBhbHNvIGZpeGVzIHRoZSBgbmV4dF9yZWZyZXNoX2ppZmZpZXNgIGhhbmRsaW5nIGluIERBTU9OIHN5c2ZzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzeXNmcywgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQxNmRlYWU4Y2E4MzA1M2M2OWVkODNlYjA0YmZmZThkOWEzNGIyODVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyNyAwNDo0MTo1NyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDY0NGRhZjVhMTY1NjAuLjZmMzYwZDYxMzkwYWQgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTExMjIsNiAmIzQzOzExMjIsOSBAQCBzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihcbiBcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKnNyYylcbiB7XG4gXHRzd2l0Y2ggKGRzdC1cdTAwM2VtZXRyaWMpIHtcbiYjNDM7XHRjYXNlIERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUzpcbiYjNDM7XHRcdGRzdC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKTtcbiYjNDM7XHRcdGJyZWFrO1xuIFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQOlxuIFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9GUkVFX0JQOlxuIFx0XHRkc3QtXHUwMDNlbmlkID0gc3JjLVx1MDAzZW5pZDtcbkBAIC0xMTQzLDcgJiM0MzsxMTQ2LDYgQEAgc3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoXG4gXHRkc3QtXHUwMDNldGFyZ2V0X3ZhbHVlID0gc3JjLVx1MDAzZXRhcmdldF92YWx1ZTtcbiBcdGlmIChkc3QtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX1VTRVJfSU5QVVQpXG4gXHRcdGRzdC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gc3JjLVx1MDAzZWN1cnJlbnRfdmFsdWU7XG4tXHQvKiBrZWVwIGxhc3RfcHNpX3RvdGFsIGFzIGlzLCBzaW5jZSBpdCB3aWxsIGJlIHVwZGF0ZWQgaW4gbmV4dCBjeWNsZSAqL1xuIFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oZHN0LCBzcmMpO1xuIH1cbiBcbkBAIC0zNzI3LDYgJiM0MzszNzI5LDE3IEBAIHN0YXRpYyBpbnQga2RhbW9uZF93YWl0X2FjdGl2YXRpb24oc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuIFx0cmV0dXJuIC1FQlVTWTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGRhbW9zX2luaXRfcXVvdGFfZ29hbF9sYXN0X3BzaShzdHJ1Y3QgZGFtb3MgKnMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcbiYjNDM7XG4mIzQzO1x0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbChnb2FsLCBcdTAwMjZzLVx1MDAzZXF1b3RhKSB7XG4mIzQzO1x0XHRpZiAoZ29hbC1cdTAwM2VtZXRyaWMgIT0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWwgPSBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKCk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGtkYW1vbmRfaW5pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgc2FtcGxlX2ludGVydmFsID0gY3R4LVx1MDAzZWF0dHJzLnNhbXBsZV9pbnRlcnZhbCA/XG5AQCAtMzc0Myw2ICYjNDM7Mzc1Niw3IEBAIHN0YXRpYyB2b2lkIGtkYW1vbmRfaW5pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuIFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHNjaGVtZSwgY3R4KSB7XG4gXHRcdGRhbW9zX3NldF9uZXh0X2FwcGx5X3NpcyhzY2hlbWUsIGN0eCk7XG4gXHRcdGRhbW9zX3NldF9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0KHNjaGVtZSk7XG4mIzQzO1x0XHRkYW1vc19pbml0X3F1b3RhX2dvYWxfbGFzdF9wc2koc2NoZW1lKTtcbiBcdH1cbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMuYyBiL21tL2RhbW9uL3N5c2ZzLmNcbmluZGV4IGUzODU4ZmZhYjRiMjIuLmYwNWIyNTZjOTBlZTcgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9zeXNmcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9zeXNmcy5jXG5AQCAtMTc4OSw2ICYjNDM7MTc4OSw3IEBAIHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kIHtcbiBcdHN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0cyAqY29udGV4dHM7XG4gXHRzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9jdHg7XG4gXHR1bnNpZ25lZCBpbnQgcmVmcmVzaF9tcztcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5leHRfcmVmcmVzaF9qaWZmaWVzO1xuIH07XG4gXG4gc3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICpkYW1vbl9zeXNmc19rZGFtb25kX2FsbG9jKHZvaWQpXG5AQCAtMjIxNSwxNyAmIzQzOzIyMTYsMTUgQEAgc3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3N5c2ZzX2J1aWxkX2N0eChcbiBcdHJldHVybiBjdHg7XG4gfVxuIFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXM7XG4tXG4gc3RhdGljIGludCBkYW1vbl9zeXNmc19yZXBlYXRfY2FsbF9mbih2b2lkICpkYXRhKVxuIHtcbiBcdHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICpzeXNmc19rZGFtb25kID0gZGF0YTtcbiBcbiBcdGlmICghc3lzZnNfa2RhbW9uZC1cdTAwM2VyZWZyZXNoX21zKVxuIFx0XHRyZXR1cm4gMDtcbi1cdGlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBkYW1vbl9zeXNmc19uZXh0X3VwZGF0ZV9qaWZmaWVzKSlcbiYjNDM7XHRpZiAodGltZV9iZWZvcmUoamlmZmllcywgc3lzZnNfa2RhbW9uZC1cdTAwM2VuZXh0X3JlZnJlc2hfamlmZmllcykpXG4gXHRcdHJldHVybiAwO1xuLVx0ZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllcyA9IGppZmZpZXMgJiM0MztcbiYjNDM7XHRzeXNmc19rZGFtb25kLVx1MDAzZW5leHRfcmVmcmVzaF9qaWZmaWVzID0gamlmZmllcyAmIzQzO1xuIFx0XHRtc2Vjc190b19qaWZmaWVzKHN5c2ZzX2tkYW1vbmQtXHUwMDNlcmVmcmVzaF9tcyk7XG4gXG4gXHRpZiAoIW11dGV4X3RyeWxvY2soXHUwMDI2ZGFtb25fc3lzZnNfbG9jaykpXG5AQCAtMjI3Myw4ICYjNDM7MjI3Miw4IEBAIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcbiBcdH1cbiBcdGtkYW1vbmQtXHUwMDNlZGFtb25fY3R4ID0gY3R4O1xuIFxuLVx0ZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllcyA9XG4tXHRcdGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhrZGFtb25kLVx1MDAzZXJlZnJlc2hfbXMpO1xuJiM0MztcdGtkYW1vbmQtXHUwMDNlbmV4dF9yZWZyZXNoX2ppZmZpZXMgPSBqaWZmaWVzICYjNDM7XG4mIzQzO1x0XHRtc2Vjc190b19qaWZmaWVzKGtkYW1vbmQtXHUwMDNlcmVmcmVzaF9tcyk7XG4gXG4gXHRyZXBlYXRfY2FsbF9jb250cm9sLVx1MDAzZWZuID0gZGFtb25fc3lzZnNfcmVwZWF0X2NhbGxfZm47XG4gXHRyZXBlYXRfY2FsbF9jb250cm9sLVx1MDAzZWRhdGEgPSBrZGFtb25kO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA0OjQyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9zX2NvbW1pdF9xdW90YV9nb2FscyYjMzQ7LAogICAgJiMzNDtkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIERBTU9OIGxvZ2ljIHRvIHByb3Blcmx5IGluaXRpYWxpemUgYW5kIGNvbW1pdCB0aGUgYGxhc3RfcHNpX3RvdGFsYCBmb3IgdGhlIGBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVNgIHF1b3RhIG1ldHJpYy4gSXQgYWxzbyBmaXhlcyB0aGUgYG5leHRfcmVmcmVzaF9qaWZmaWVzYCBoYW5kbGluZyBpbiBEQU1PTiBzeXNmcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3lzZnMsIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkMTZkZWFlOGNhODMwNTNjNjllZDgzZWIwNGJmZmU4ZDlhMzRiMjg1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMjcgMDQ6NDE6NTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmMKaW5kZXggNjQ0ZGFmNWExNjU2MC4uNmYzNjBkNjEzOTBhZCAxMDA2NDQKLS0tIGEvbW0vZGFtb24vY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuYwpAQCAtMTEyMiw2ICYjNDM7MTEyMiw5IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKAogCQlzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqc3JjKQogewogCXN3aXRjaCAoZHN0LSZndDttZXRyaWMpIHsKJiM0MzsJY2FzZSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVM6CiYjNDM7CQlkc3QtJmd0O2xhc3RfcHNpX3RvdGFsID0gZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpOwomIzQzOwkJYnJlYWs7CiAJY2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQOgogCWNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUDoKIAkJZHN0LSZndDtuaWQgPSBzcmMtJmd0O25pZDsKQEAgLTExNDMsNyAmIzQzOzExNDYsNiBAQCBzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbCgKIAlkc3QtJmd0O3RhcmdldF92YWx1ZSA9IHNyYy0mZ3Q7dGFyZ2V0X3ZhbHVlOwogCWlmIChkc3QtJmd0O21ldHJpYyA9PSBEQU1PU19RVU9UQV9VU0VSX0lOUFVUKQogCQlkc3QtJmd0O2N1cnJlbnRfdmFsdWUgPSBzcmMtJmd0O2N1cnJlbnRfdmFsdWU7Ci0JLyoga2VlcCBsYXN0X3BzaV90b3RhbCBhcyBpcywgc2luY2UgaXQgd2lsbCBiZSB1cGRhdGVkIGluIG5leHQgY3ljbGUgKi8KIAlkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihkc3QsIHNyYyk7CiB9CiAKQEAgLTM3MjcsNiAmIzQzOzM3MjksMTcgQEAgc3RhdGljIGludCBrZGFtb25kX3dhaXRfYWN0aXZhdGlvbihzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpCiAJcmV0dXJuIC1FQlVTWTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGRhbW9zX2luaXRfcXVvdGFfZ29hbF9sYXN0X3BzaShzdHJ1Y3QgZGFtb3MgKnMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDsKJiM0MzsKJiM0MzsJZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbChnb2FsLCAmYW1wO3MtJmd0O3F1b3RhKSB7CiYjNDM7CQlpZiAoZ29hbC0mZ3Q7bWV0cmljICE9IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUykKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWdvYWwtJmd0O2xhc3RfcHNpX3RvdGFsID0gZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpOwomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQga2RhbW9uZF9pbml0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpCiB7CiAJdW5zaWduZWQgbG9uZyBzYW1wbGVfaW50ZXJ2YWwgPSBjdHgtJmd0O2F0dHJzLnNhbXBsZV9pbnRlcnZhbCA/CkBAIC0zNzQzLDYgJiM0MzszNzU2LDcgQEAgc3RhdGljIHZvaWQga2RhbW9uZF9pbml0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpCiAJZGFtb25fZm9yX2VhY2hfc2NoZW1lKHNjaGVtZSwgY3R4KSB7CiAJCWRhbW9zX3NldF9uZXh0X2FwcGx5X3NpcyhzY2hlbWUsIGN0eCk7CiAJCWRhbW9zX3NldF9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0KHNjaGVtZSk7CiYjNDM7CQlkYW1vc19pbml0X3F1b3RhX2dvYWxfbGFzdF9wc2koc2NoZW1lKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLmMgYi9tbS9kYW1vbi9zeXNmcy5jCmluZGV4IGUzODU4ZmZhYjRiMjIuLmYwNWIyNTZjOTBlZTcgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3N5c2ZzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vc3lzZnMuYwpAQCAtMTc4OSw2ICYjNDM7MTc4OSw3IEBAIHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kIHsKIAlzdHJ1Y3QgZGFtb25fc3lzZnNfY29udGV4dHMgKmNvbnRleHRzOwogCXN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX2N0eDsKIAl1bnNpZ25lZCBpbnQgcmVmcmVzaF9tczsKJiM0MzsJdW5zaWduZWQgbG9uZyBuZXh0X3JlZnJlc2hfamlmZmllczsKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqZGFtb25fc3lzZnNfa2RhbW9uZF9hbGxvYyh2b2lkKQpAQCAtMjIxNSwxNyAmIzQzOzIyMTYsMTUgQEAgc3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3N5c2ZzX2J1aWxkX2N0eCgKIAlyZXR1cm4gY3R4OwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9zeXNmc19uZXh0X3VwZGF0ZV9qaWZmaWVzOwotCiBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3JlcGVhdF9jYWxsX2ZuKHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKnN5c2ZzX2tkYW1vbmQgPSBkYXRhOwogCiAJaWYgKCFzeXNmc19rZGFtb25kLSZndDtyZWZyZXNoX21zKQogCQlyZXR1cm4gMDsKLQlpZiAodGltZV9iZWZvcmUoamlmZmllcywgZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllcykpCiYjNDM7CWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBzeXNmc19rZGFtb25kLSZndDtuZXh0X3JlZnJlc2hfamlmZmllcykpCiAJCXJldHVybiAwOwotCWRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXMgPSBqaWZmaWVzICYjNDM7CiYjNDM7CXN5c2ZzX2tkYW1vbmQtJmd0O25leHRfcmVmcmVzaF9qaWZmaWVzID0gamlmZmllcyAmIzQzOwogCQltc2Vjc190b19qaWZmaWVzKHN5c2ZzX2tkYW1vbmQtJmd0O3JlZnJlc2hfbXMpOwogCiAJaWYgKCFtdXRleF90cnlsb2NrKCZhbXA7ZGFtb25fc3lzZnNfbG9jaykpCkBAIC0yMjczLDggJiM0MzsyMjcyLDggQEAgc3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKQogCX0KIAlrZGFtb25kLSZndDtkYW1vbl9jdHggPSBjdHg7CiAKLQlkYW1vbl9zeXNmc19uZXh0X3VwZGF0ZV9qaWZmaWVzID0KLQkJamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKGtkYW1vbmQtJmd0O3JlZnJlc2hfbXMpOwomIzQzOwlrZGFtb25kLSZndDtuZXh0X3JlZnJlc2hfamlmZmllcyA9IGppZmZpZXMgJiM0MzsKJiM0MzsJCW1zZWNzX3RvX2ppZmZpZXMoa2RhbW9uZC0mZ3Q7cmVmcmVzaF9tcyk7CiAKIAlyZXBlYXRfY2FsbF9jb250cm9sLSZndDtmbiA9IGRhbW9uX3N5c2ZzX3JlcGVhdF9jYWxsX2ZuOwogCXJlcGVhdF9jYWxsX2NvbnRyb2wtJmd0O2RhdGEgPSBrZGFtb25kOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTE1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRBTU9OIFBhdGNoIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIG5ldyBwYXRjaCBoZXJlIG1vZGlmeWluZyBgbW0vZGFtb24vY29yZS5jYCBhbmQgYG1tL2RhbW9uL3N5c2ZzLmNgLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBwcmltYXJ5IGZpeCBzZWVtcyB0byBiZSBpbiBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb25gLCBzcGVjaWZpY2FsbHkgaW5pdGlhbGl6aW5nIGBsYXN0X3BzaV90b3RhbGAgY29ycmVjdGx5IGZvciB0aGUgYERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AgY2FzZS4gR29vZCwgdGhhdCBsaWtlbHkgcmVzb2x2ZXMgYSBzdWJ0bGUgcmFjZSBjb25kaXRpb24gb3IgY2FsY3VsYXRpb24gZXJyb3IgcmVsYXRlZCB0byBtZW1vcnkgcXVvdGEgdHJhY2tpbmcgd2l0aCBQZXJmb3JtYW5jZSBTdGF0ZSBJbmZvcm1hdGlvbiAoUFNJKS4gVGhlIGFkZGl0aW9uIG9mIGBkYW1vc19pbml0X3F1b3RhX2dvYWxfbGFzdF9wc2lgIGNhbGxlZCBmcm9tIGBrZGFtb25kX2luaXRfY3R4YCBsb29rcyBsaWtlIGEgY29tcGFuaW9uIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLCBlbnN1cmluZyBwcm9wZXIgc3RhdGUgc2V0dXAuIFN0YW5kYXJkIHN0dWZmLCBidXQgaW1wb3J0YW50IHRvIGNhdGNoLgoKTm93LCB0aGUgYG1tL2RhbW9uL3N5c2ZzLmNgIGNoYW5nZSBpcyBpbnRlcmVzdGluZy4gVGhleSYjMzk7dmUgbW92ZWQgYGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXNgIGZyb20gYSBnbG9iYWwgdG8gYSBwZXIta2RhbW9uZCB2YXJpYWJsZSBuYW1lZCBgbmV4dF9yZWZyZXNoX2ppZmZpZXNgLiBUaGF0JiMzOTtzIGEgbmljZSBpbXByb3ZlbWVudCBmb3IgY29uZmlndXJhYmlsaXR5IGFuZCBwb3RlbnRpYWwgY29uY3VycmVuY3kuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYSByZWZyZXNoIHRpbWUgZm9yIHRoZSBzeXN0ZW0gZmlsZSBpbnRlcmZhY2UgKHN5c2ZzKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIGJ1Z2ZpeCwgaW4gREFNT04sIHdoaWNoIGlzIGEgY29yZSBrZXJuZWwgY29tcG9uZW50LgoKSSBzaG91bGQgcHJvYmFibHkgcmV2aWV3IHRoZSBjb25maWcgb3B0aW9ucyBmb3IgREFNT04gdG8gdW5kZXJzdGFuZCBpZiBhbnl0aGluZyBpbiB0aGF0IGFyZWEgaGFzIGNoYW5nZWQsIG9yIGlmIHRoZXJlIGlzIG5ldyBmdW5jdGlvbmFsaXR5IGludm9sdmVkLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA0OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBEQU1PTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXCYjMzQ7RGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1wmIzM0O1xubW0vZGFtb24vS2NvbmZpZy00LVxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy02LVx0Ym9vbCBcJiMzNDtEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXG5tbS9kYW1vbi9LY29uZmlnLTE2LVx0Ym9vbCBcJiMzNDtDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMjUtXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTI3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vblwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy0zNy1cbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXG5tbS9kYW1vbi9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctNDgtXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy02Ny1cbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXG5tbS9kYW1vbi9LY29uZmlnLTY5LVx0Ym9vbCBcJiMzNDtEQU1PTiBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy03Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxubW0vZGFtb24vS2NvbmZpZy04OS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTA3LVxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcbm1tL2RhbW9uL0tjb25maWctMTA5LVx0Ym9vbCBcJiMzNDtCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMTUtXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcbm1tL2RhbW9uL0tjb25maWctMTE3LVx0Ym9vbCBcJiMzNDtFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM5NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgY29uZmlnIG9wdGlvbnMgYW5kIGZ1bmN0aW9ucywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBEQU1PTiBDb25maWd1cmF0aW9uIGFuZCBJbml0aWFsaXphdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgb24gbXkgbWluZCwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIGRlZmluaXRlbHkgdGhlIERBTU9OIGNvbmZpZ3VyYXRpb25zOiBgREFNT05gIGFuZCBgREFNT05fU1lTRlNgLiBUaGVzZSBhcmUgdGhlIGZvdW5kYXRpb25hbCBzZXR0aW5ncy4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZywgJiMzNDtBcmUgYm90aCBvZiB0aGVzZSBlbmFibGVkPyBXaGF0JiMzOTtzIHRoZSBpbXBhY3Qgb2Ygb25lIGJlaW5nIGVuYWJsZWQgd2l0aG91dCB0aGUgb3RoZXI/JiMzNDsgSXQmIzM5O3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgREFNT04gaXMgYWN0dWFsbHkgb3BlcmF0aW5nIGF0IHRoZSBzeXN0ZW0gbGV2ZWwsIGFuZCB0aGF0IGhlbHBzIGluZm9ybSBwZXJmb3JtYW5jZSB0d2Vha3MuCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gdGhlIGtlcm5lbCBjb2RlOyBJIG5lZWQgdG8gbG9vayBhdCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGhpbiBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb25gIGFuZCBgZGFtb3NfaW5pdF9xdW90YV9nb2FsX2xhc3RfcHNpYC4gTXkgZ3V0IHJlYWN0aW9uIGlzIHRoYXQgdGhleSYjMzk7cmUgcmVsYXRlZCB0byBoYW5kbGluZyBxdW90YSBnb2FscywgYnV0IHRoZSBzcGVjaWZpYyBtZWNoYW5pY3MgYXJlIHdoYXQmIzM5O3MgaW1wb3J0YW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZDoKCiogICAqKmBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbmAqKjogU3BlY2lmaWNhbGx5LCBob3cgYW5kIHdoZW4gdGhpcyBpcyBpbnZva2VkLiBEb2VzIGl0IGdldCB0cmlnZ2VyZWQgb24gYW55IHNvcnQgb2YgZXZlbnQsIG9yIGlzIGl0IHBlcmlvZGljPyBXaGF0JiMzOTtzIHRoZSBjb250ZXh04oCUYXJlIHdlIHRhbGtpbmcgYWJvdXQgcGVyLXByb2Nlc3MgcXVvdGEsIHN5c3RlbS13aWRlLCBvciBzb21ldGhpbmcgbW9yZSBncmFudWxhcj8gSSYjMzk7bSBiZXR0aW5nIHRoaXMgaXMgd2hlcmUgY2hhbmdlcyB0byBxdW90YSBnb2FscyBhcmUgYWN0dWFsbHkgYXBwbGllZCwgZWl0aGVyIGltbWVkaWF0ZWx5IG9yIGRlZmVycmVkLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBpZiBpdCBpbnZvbHZlcyBhbnkgbG9ja2luZyBtZWNoYW5pc21zLCBhbmQgdGhlIGltcGFjdCBvbiB0aGUgc3lzdGVtLgoqICAgKipgZGFtb3NfaW5pdF9xdW90YV9nb2FsX2xhc3RfcHNpYCoqOiBUaGlzIGhhcyB0aGUgZGlzdGluY3Qgc21lbGwgb2YgaW5pdGlhbGl6YXRpb24uICYjMzQ7TGFzdCBQU0kmIzM0OyBzdWdnZXN0cyBpdCYjMzk7cyBsaWtlbHkgaW52b2x2ZWQgd2l0aCBtb25pdG9yaW5nIG9yIHRyYWNraW5nIHNvbWUgZm9ybSBvZiBQZXJmb3JtYW5jZSBTdGF0ZSBJbmZvcm1hdGlvbiAoUFNJKS4gVGhlICYjMzQ7cXVvdGEgZ29hbCYjMzQ7IHBhcnQgaGludHMgYXQgaXQgcmVsYXRlZCB0byBxdW90YSBlbmZvcmNlbWVudC4gTXkgd29ya2luZyBoeXBvdGhlc2lzIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiBtaWdodCBoYW5kbGUgZWl0aGVyIHRoZSBpbml0aWFsIHNldHVwIG9mIHF1b3RhIGxpbWl0cyByZWxhdGVkIHRvIHBlcmZvcm1hbmNlIG9yIGl0IG1pZ2h0IGluaXRpYWxpemUgYSBzdHJ1Y3R1cmUgdGhhdCB0cmFja3MgdGhlIGdvYWxzLiBJIGhhdmUgdG8gc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBEQU1PTiBjb21wb25lbnRzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGZ1bmN0aW9uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB3aGVyZSB0aGlzIGlzIGNhbGxlZCwgYW5kIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGl0IG1hbmlwdWxhdGVzLiBIb3cgaXMgdGhpcyAmIzM0O2xhc3QgUFNJJiMzNDsgdmFsdWUgdXNlZCBsYXRlciBvbiBpbiBkZWNpc2lvbi1tYWtpbmc/CgpFc3NlbnRpYWxseSwgSSBuZWVkIHRvIHNlZSBob3cgdGhlc2UgdHdvIHBpZWNlcyBmaXQgdG9nZXRoZXIgYW5kIHJlbGF0ZSB0byB0aGUgREFNT04gY29yZS4gQXJlIHRoZXkgaW52b2x2ZWQgaW4gZ29hbCBzZXR0aW5nLCBlbmZvcmNlbWVudCwgYWRhcHRhdGlvbiwgb3Igc29tZSBjb21iaW5hdGlvbiBvZiB0aGUgYWJvdmU/IExldCYjMzk7cyBnZXQgdG8gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTExMDg9c3RhdGljIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19udGhfcXVvdGFfZ29hbChcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTEyMC1cbm1tL2RhbW9uL2NvcmUuYzoxMTIxOnN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKFxubW0vZGFtb24vY29yZS5jLTExMjItXHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jPTExNDI9c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoXG4tLVxubW0vZGFtb24vY29yZS5jLTExNDgtXHRcdGRzdC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gc3JjLVx1MDAzZWN1cnJlbnRfdmFsdWU7XG5tbS9kYW1vbi9jb3JlLmM6MTE0OTpcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKGRzdCwgc3JjKTtcbm1tL2RhbW9uL2NvcmUuYy0xMTUwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjA1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBtb2RpZmljYXRpb25zLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOgoKKipNeSBQZXJzcGVjdGl2ZSBvbiB0aGUgYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gIE1vZGlmaWNhdGlvbioqCgpBbHJpZ2h0LCBzbyBJIHNlZSB0aGV5JiMzOTt2ZSBiZWVuIG1lc3Npbmcgd2l0aCBgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbmAuIEZyb20gdGhlIG5hbWUgYWxvbmUsIEkgY2FuIGd1ZXNzIHRoaXMgaXMgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBhY3R1YWxseSAqYWN0aXZhdGluZyogYSBEQU1PTiBtb25pdG9yIHRocm91Z2ggdGhlIHN5c2ZzIGludGVyZmFjZS4gVGhhdCYjMzk7cyBhIGNyaXRpY2FsIHBpZWNlLCB0aGUgcG9pbnQgb2Ygbm8gcmV0dXJuIHNvIHRvIHNwZWFrLiBJZiB0aGlzIGlzIHdoZXJlIHRoZXkmIzM5O3JlIGNoYW5naW5nIHRoaW5ncywgaXQgbWVhbnMgdGhleSBhcmUgdHJ5aW5nIHRvIGluZmx1ZW5jZSBob3cgYSBEQU1PTiBtb25pdG9yIGNvbWVzIG9ubGluZSBhbmQgc2V0cyBpdHNlbGYgdXAuIAoKSSBpbW1lZGlhdGVseSBzdGFydCB0aGlua2luZyBhYm91dCBhIGZldyB0aGluZ3M6CgoqICAgKipBY3RpdmF0aW9uIFRyaWdnZXJzKio6IEFyZSB0aGV5IGNoYW5naW5nICpob3cqIHRoZSBtb25pdG9yIGlzIHRyaWdnZXJlZD8gSXMgaXQgc3RpbGwgYSBzaW1wbGUgJiMzOTtlY2hvIDEgJmd0OyBlbmFibGUmIzM5Oz8gT3IgYXJlIHRoZXkgaW50cm9kdWNpbmcgc29tZSBtb3JlIG51YW5jZWQgYWN0aXZhdGlvbiBjcml0ZXJpYSwgcGVyaGFwcyBiYXNlZCBvbiByZXNvdXJjZSBhdmFpbGFiaWxpdHksIGxvYWQsIG9yIHNvbWUgb3RoZXIgc3lzdGVtIGNvbmRpdGlvbj8gTWF5YmUgc29tZSBjb25maWd1cmF0aW9uIGluIHRoZSBzeXNmcyBub2RlIGhhcyB0byBiZSBjb3JyZWN0LgoqICAgKipJbml0aWFsaXphdGlvbioqOiBCZXlvbmQgdHVybmluZyBpdCBvbiwgd2hhdCBkb2VzIHRoZSBmdW5jdGlvbiAqZG8qIGR1cmluZyBpbml0aWFsaXphdGlvbj8gRG9lcyBpdCBhbGxvY2F0ZSBtZW1vcnksIHJlZ2lzdGVyIHRoZSBtb25pdG9yIHdpdGggdGhlIGNvcmUgREFNT04gaW5mcmFzdHJ1Y3R1cmUsIGNvbmZpZ3VyZSBhbnkgZGVmYXVsdCBwYXJhbWV0ZXJzPyBBbnkgY2hhbmdlcyBoZXJlIGFyZSBnb2luZyB0byBoYXZlIGEgYmlnIGltcGFjdCBvbiBob3cgcGVyZm9ybWFudCB0aGUgbW9uaXRvciB3aWxsIGJlIGFzIHdlbGwgYXMgdGhlIG51bWJlciBvZiBhdmFpbGFibGUgbW9uaXRvcnMuCiogICAqKkVycm9yIEhhbmRsaW5nKio6IEFyZSB0aGV5IGltcHJvdmluZyB0aGUgZXJyb3IgaGFuZGxpbmcgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyB3cm9uZyBkdXJpbmcgYWN0aXZhdGlvbj8gSWYgdGhlIG1vbml0b3IgZmFpbHMgdG8gaW5pdGlhbGl6ZSwgZG9lcyBpdCBwcm92aWRlIGhlbHBmdWwgZXJyb3IgbWVzc2FnZXMsIG9yIGp1c3Qgc2lsZW50bHkgZmFpbD8gSXQmIzM5O3MgYWx3YXlzIGNydWNpYWwgdG8gZmFpbCBncmFjZWZ1bGx5IGFuZCBwcm92aWRlIHNvbWUgZGVidWdnaW5nIGluZm9ybWF0aW9uLgoqICAgKipTZWN1cml0eSBDb25jZXJucyoqOiBJZiB0aGV5JiMzOTtyZSBhZGRpbmcgZXh0cmEgbGF5ZXJzIG9mIGFjdGl2YXRpb24sIEkmIzM5O20gbm93IGN1cmlvdXMgd2hldGhlciB0aGVyZSYjMzk7cyBzb21lIGNoYW5nZSBpbiB0aGUgc2VjdXJpdHkgY29udGV4dC4gQXJlIHdlIGdvaW5nIHRvIHNlZSBuZXcgcHJpdmlsZWdlcyBvciBwZXJtaXNzaW9ucyByZWxhdGVkIHRvIHN0YXJ0aW5nIGEgbW9uaXRvcj8KClVsdGltYXRlbHksIHdpdGhvdXQga25vd2luZyAqZXhhY3RseSogd2hhdCB3YXMgbW9kaWZpZWQsIHRoZXNlIGFyZSB0aGUgdHlwZXMgb2YgdGhpbmdzIEkmIzM5O2QgYmUgbG9va2luZyBmb3IgaW4gYSBjb2RlIHJldmlldyBvciBhIHBhdGNoIGRlc2NyaXB0aW9uLiBCZWNhdXNlIHRoaXMgZnVuY3Rpb24gaXMgdGhlIGdhdGV3YXkgdG8gbW9uaXRvcmluZywgYW55IG1vZGlmaWNhdGlvbiBoZXJlIG5lZWRzIHRvIGJlIHRob3JvdWdobHkgdmV0dGVkIHRvIGVuc3VyZSBEQU1PTiBjb250aW51ZXMgdG8gd29yayBlZmZpY2llbnRseSwgZWZmZWN0aXZlbHksIGFuZCBzYWZlbHkuIEkgd291bGQgbmVlZCB0byBkaWcgaW50byB0aGUgZGlmZnMgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLmM9MjIxOT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3JlcGVhdF9jYWxsX2ZuKHZvaWQgKmRhdGEpXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMjQxLVxubW0vZGFtb24vc3lzZnMuYzoyMjQyOnN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcbm1tL2RhbW9uL3N5c2ZzLmMtMjI0My17XG4tLVxubW0vZGFtb24vc3lzZnMuYz0yMjg3PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vZmYoc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMjk0LVx0ICogREFNT04sIHdlIGZyZWUga2RhbW9uZC1cdTAwM2VkYW1vbl9jdHggaW4gbmV4dFxubW0vZGFtb24vc3lzZnMuYzoyMjk1Olx0ICogZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbigpLCBvciBrZGFtb25kc19ucl9zdG9yZSgpXG5tbS9kYW1vbi9zeXNmcy5jLTIyOTYtXHQgKi9cbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIzNjM9c3RhdGljIGludCBkYW1vbl9zeXNmc19oYW5kbGVfY21kKGVudW0gZGFtb25fc3lzZnNfY21kIGNtZCxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIzNzAtXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9PTjpcbm1tL2RhbW9uL3N5c2ZzLmM6MjM3MTpcdFx0cmV0dXJuIGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oa2RhbW9uZCk7XG5tbS9kYW1vbi9zeXNmcy5jLTIzNzItXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9PRkY6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjEyNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFscmVhZHkgcXVpdGUgZmFtaWxpYXIgd2l0aCB0aGUgRGFtb24gc3lzdGVtIGFuZCBzeXNmczoKCioqRGl2aW5nIGludG8gdGhlIFN5c2ZzIENvbW1hbmQgSGFuZGxlcioqCgpBbHJpZ2h0LCBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBkYW1vbl9zeXNmc19oYW5kbGVfY21kYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyB0aGUgb25lIHRoYXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIGFsbCB0aGUgY29tbWFuZHMgY29taW5nIGluIHRocm91Z2ggdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSBzeXN0ZW0uIEl0JiMzOTtzIHRoZSBjZW50cmFsIHBvaW50IG9mIGNvbnRyb2wuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBpdCB3b3Jrcy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBob3cgaXQgcHJvY2Vzc2VzIHRob3NlIGluY29taW5nIGNvbW1hbmRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uJiMzOTtzIGxvZ2ljIGluc2lkZSBhbmQgb3V0IHRvIHRyb3VibGVzaG9vdCBlZmZlY3RpdmVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fc3lzZnNfaGFuZGxlX2NtZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy5jPTIzMzM9c3RhdGljIGludCBkYW1vbl9zeXNmc191cGRhdGVfc2NoZW1lc190cmllZF9yZWdpb25zKFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjM1NC0vKlxubW0vZGFtb24vc3lzZnMuYzoyMzU1OiAqIGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWQoKSAtIEhhbmRsZSBhIGNvbW1hbmQgZm9yIGEgc3BlY2lmaWMga2RhbW9uZC5cbm1tL2RhbW9uL3N5c2ZzLmMtMjM1Ni0gKiBAY21kOlx0VGhlIGNvbW1hbmQgdG8gaGFuZGxlLlxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjM2Mi0gKi9cbm1tL2RhbW9uL3N5c2ZzLmM6MjM2MzpzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWQoZW51bSBkYW1vbl9zeXNmc19jbWQgY21kLFxubW0vZGFtb24vc3lzZnMuYy0yMzY0LVx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTI0MDM9c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTI0MTQtXHRcdGlmIChzeXNmc19zdHJlcShidWYsIGRhbW9uX3N5c2ZzX2NtZF9zdHJzW2NtZF0pKSB7XG5tbS9kYW1vbi9zeXNmcy5jOjI0MTU6XHRcdFx0cmV0ID0gZGFtb25fc3lzZnNfaGFuZGxlX2NtZChjbWQsIGtkYW1vbmQpO1xubW0vZGFtb24vc3lzZnMuYy0yNDE2LVx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjkyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIFN5c2ZzIEludGVyZmFjZTogQSBSZWNvbm5haXNzYW5jZSoqCgpPa2F5LCBzbyB0aGUgc3lzZnMgaW50ZXJmYWNlIGlzIGRlZmluaXRlbHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZS4gVGhhdCBtZWFucyBpdCYjMzk7cyBmdXp6YWJsZSDigJMgdGhhdCYjMzk7cyB0aGUgZmlyc3Qgc3RlcC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGF0dGFjayBzdXJmYWNlIGlzLiBOb3csIEkgc2VlIHRoYXQgdGhlIGZ1bmN0aW9ucyBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb25gIGFuZCBgZGFtb3NfaW5pdF9xdW90YV9nb2FsX2xhc3RfcHNpYCBhcmUgcmVhY2hhYmxlIGZyb20gaXQuIExldCYjMzk7cyBkaWcgZGVlcGVyIGFuZCBnZXQgYSBiZXR0ZXIgcGljdHVyZSBvZiB0aGUgYXZhaWxhYmxlIHN5bWJvbHMuCgpIbW0sIGl0IGxvb2tzIGxpa2UgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBTbyBpcyBgZGFtb3NfaW5pdF9xdW90YV9nb2FsX2xhc3RfcHNpYCwgYWxvbmcgd2l0aCBgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbmAsIGBkYW1vbl9zeXNmc19oYW5kbGVfY21kYCwgYW5kIGBzdGF0ZV9zdG9yZWAuIFRoZXNlIHN0YXRpYyBmdW5jdGlvbnMgY291bGQgc3RpbGwgYmUgdXNlZnVsIGRlcGVuZGluZyBvbiBob3cgdGhleSBhcmUgdXNlZC4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55ICpub24qLXN0YXRpYyBmdW5jdGlvbnMgd2UgY2FuIGV4YW1pbmUuIEl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgd2hhdCBlbHNlIGlzIGF2YWlsYWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTExMDg9c3RhdGljIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19udGhfcXVvdGFfZ29hbChcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTEyMC1cbm1tL2RhbW9uL2NvcmUuYzoxMTIxOnN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKFxubW0vZGFtb24vY29yZS5jLTExMjItXHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTExNDEtXG5tbS9kYW1vbi9jb3JlLmM6MTE0MjpzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcbm1tL2RhbW9uL2NvcmUuYy0xMTQzLVx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMTQ4LVx0XHRkc3QtXHUwMDNlY3VycmVudF92YWx1ZSA9IHNyYy1cdTAwM2VjdXJyZW50X3ZhbHVlO1xubW0vZGFtb24vY29yZS5jOjExNDk6XHRkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihkc3QsIHNyYyk7XG5tbS9kYW1vbi9jb3JlLmMtMTE1MC19XG4tLVxubW0vZGFtb24vY29yZS5jLTExNTItLyoqXG5tbS9kYW1vbi9jb3JlLmM6MTE1MzogKiBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoKSAtIENvbW1pdCBEQU1PUyBxdW90YSBnb2FscyB0byBhbm90aGVyIHF1b3RhLlxubW0vZGFtb24vY29yZS5jLTExNTQtICogQGRzdDpcdFRoZSBjb21taXQgZGVzdGluYXRpb24gREFNT1MgcXVvdGEuXG4tLVxubW0vZGFtb24vY29yZS5jLTExNjMtICovXG5tbS9kYW1vbi9jb3JlLmM6MTE2NDppbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcbm1tL2RhbW9uL2NvcmUuYy0xMTY1LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTE3MS1cdFx0aWYgKHNyY19nb2FsKVxubW0vZGFtb24vY29yZS5jOjExNzI6XHRcdFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoZHN0X2dvYWwsIHNyY19nb2FsKTtcbm1tL2RhbW9uL2NvcmUuYy0xMTczLVx0XHRlbHNlXG4tLVxubW0vZGFtb24vY29yZS5jLTExODItXHRcdFx0cmV0dXJuIC1FTk9NRU07XG5tbS9kYW1vbi9jb3JlLmM6MTE4MzpcdFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwobmV3X2dvYWwsIHNyY19nb2FsKTtcbm1tL2RhbW9uL2NvcmUuYy0xMTg0LVx0XHRkYW1vc19hZGRfcXVvdGFfZ29hbChkc3QsIG5ld19nb2FsKTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTE4OT1zdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9xdW90YShzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTExOTUtXHRkc3QtXHUwMDNlc3ogPSBzcmMtXHUwMDNlc3o7XG5tbS9kYW1vbi9jb3JlLmM6MTE5NjpcdGVyciA9IGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fscyhkc3QsIHNyYyk7XG5tbS9kYW1vbi9jb3JlLmMtMTE5Ny1cdGlmIChlcnIpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4OTQ9aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5MTgtXHRcdH1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyOTE5Olx0XHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoXHUwMDI2c2NoZW1lLVx1MDAzZXF1b3RhLCBcdTAwMjZxdW90YSk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjkyMC1cdFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbF9zYWZlKGcsIGdfbmV4dCwgXHUwMDI2cXVvdGEpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTc1MD1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTc1Ny1cdFx0ZHN0X2xhc3RfcHNpX3RvdGFsID0gZHN0LVx1MDAzZWxhc3RfcHNpX3RvdGFsO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjc1ODpcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKGRzdCwgc3JjKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC03NTktXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTgzND1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2Fsc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NDktXHRcdCAqIFdoZW4gbnJfc3JjX2dvYWxzIGlzIHNtYWxsZXIgdGhhbiBkc3RfZ29hbHMsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODUwOlx0XHQgKiBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoKSB3aWxsIGtmcmVlKCkgdGhlIGRzdCBnb2Fscy5cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NTEtXHRcdCAqIE1ha2UgaXQga2ZyZWUoKS1hYmxlLlxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NjItXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODYzOlx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKFx1MDAyNmRzdCwgXHUwMDI2c3JjKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NjQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA0OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyOTcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgUG90ZW50aWFsIEluaXRpYWxpemF0aW9uIElzc3VlcyB3aXRoIE5vbi1TdGF0aWMgVmFyaWFibGVzKioKCk9rYXksIHNvIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgIGlzbiYjMzk7dCBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgaW5pdGlhbGl6YXRpb24gcHJvYmxlbS4gV2UgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGFuZCBob3cgdGhpcyB2YXJpYWJsZSBpcyBiZWluZyBpbml0aWFsaXplZCwgYW5kIG1vcmUgaW1wb3J0YW50bHksIGlmIGl0JiMzOTtzIGJlaW5nIGhhbmRsZWQgY29ycmVjdGx5IGFjcm9zcyBkaWZmZXJlbnQgdGhyZWFkcyBvciBjb250ZXh0cy4gU2luY2UgaXQmIzM5O3Mgbm90IHN0YXRpYywgaXQgc3VnZ2VzdHMgc29tZSBzb3J0IG9mIGR5bmFtaWMgb3IgcG90ZW50aWFsbHkgZ2xvYmFsIHNjb3BlLiBTbywgd2hlcmUgYXJlIHRoZSBjcml0aWNhbCBwb2ludHM/IE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGlnIGludG8gYGtkYW1vbmRfaW5pdF9jdHhgIG9yIGBkYW1vc19pbml0X3F1b3RhX2dvYWxfbGFzdF9wc2lgLiBJ4oCZbGwgc3RhcnQgYnkgcmV2aWV3aW5nIHRoZSBpbml0aWFsaXphdGlvbiBsb2dpYyB3aXRoaW4gdGhvc2UgZnVuY3Rpb25zLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYCBhbmQgaWYgdGhlcmUmIzM5O3MgYW55IHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zIG9yIHVuaW50ZW5kZWQgc2lkZSBlZmZlY3RzIGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcywgZXNwZWNpYWxseSBpbiBhIG11bHRpLXRocmVhZGVkIHNjZW5hcmlvLiBJdCYjMzk7cyBhIGNsYXNzaWMgZGVidWdnaW5nIGFwcHJvYWNoOiBzdGFydCB3aXRoIHRoZSBsaWtlbHkgY3VscHJpdHMuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIHZhcmlhYmxlJiMzOTtzIGxpZmVjeWNsZSBmcm9tIGRlY2xhcmF0aW9uIHRvIHVzZS4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aG9zZSBmdW5jdGlvbnMgaXMga2V5IHRvIHBpbnBvaW50aW5nIGFueSBwcm9ibGVtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2RhbW9uZF9pbml0X2N0eCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9ODMyPXN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld19jdHgodm9pZClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtODQ2LVx0Y3R4LVx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzID0gMDtcbm1tL2RhbW9uL2NvcmUuYzo4NDc6XHQvKiBUaGVzZSB3aWxsIGJlIHNldCBmcm9tIGtkYW1vbmRfaW5pdF9jdHgoKSAqL1xubW0vZGFtb24vY29yZS5jLTg0OC1cdGN0eC1cdTAwM2VuZXh0X2FnZ3JlZ2F0aW9uX3NpcyA9IDA7XG4tLVxubW0vZGFtb24vY29yZS5jPTM3MzI9c3RhdGljIHZvaWQgZGFtb3NfaW5pdF9xdW90YV9nb2FsX2xhc3RfcHNpKHN0cnVjdCBkYW1vcyAqcylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzc0Mi1cbm1tL2RhbW9uL2NvcmUuYzozNzQzOnN0YXRpYyB2b2lkIGtkYW1vbmRfaW5pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxubW0vZGFtb24vY29yZS5jLTM3NDQte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zNzY2PXN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNzc5LVx0Y29tcGxldGUoXHUwMDI2Y3R4LVx1MDAzZWtkYW1vbmRfc3RhcnRlZCk7XG5tbS9kYW1vbi9jb3JlLmM6Mzc4MDpcdGtkYW1vbmRfaW5pdF9jdHgoY3R4KTtcbm1tL2RhbW9uL2NvcmUuYy0zNzgxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTM3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBDb2RlIFN0cnVjdHVyZSBhbmQgU2NvcGUqKgoKSG1tLCBzbyBga2RhbW9uZF9mbmAgaXMgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgaXQgaW4gbXkgbWluZCBhcyBiZWluZyBsaW1pdGVkIGluIHNjb3BlIOKAkyBsaWtlbHkgaW50ZXJuYWwgdG8gYSBzaW5nbGUgZmlsZSBvciBjb21waWxhdGlvbiB1bml0LiBPa2F5LCBub3RlZC4gTm93LCBsZXQgbWUgc2VlLi4uIGFuZCBoZXJlIHdlIGhhdmUgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2AsIGFuZCBpdCYjMzk7cyAqbm90KiBzdGF0aWMuIFRoYXQgaW1wbGllcyBpdCYjMzk7cyBpbnRlbmRlZCB0byBiZSB2aXNpYmxlIG91dHNpZGUgb2YgaXRzIGltbWVkaWF0ZSBjb250ZXh0LiBDb3VsZCBiZSBhIGZ1bmN0aW9uIG90aGVyIG1vZHVsZXMgY2FuIGNhbGwgdG8gY29tbWl0IHF1b3RhIGNoYW5nZXMuCgpKdXN0IHRvIGJlIHRob3JvdWdoLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaG93IGBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzYCBpcyBkZWZpbmVkLiBJIHdhbnQgdG8gc2VlIGlmIHRoaXMgaGFzIGEgcmVsYXRpb25zaGlwIHRvIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgLiBJcyBpdCBhIGhlbHBlcj8gRG9lcyBpdCBjYWxsIGl0PyBBcmUgdGhleSBib3RoIHVzZWQgaW4gdGhlIHNhbWUgY29udGV4dD8gVW5kZXJzdGFuZGluZyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdGhyZWUgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBvdmVyYWxsIHF1b3RhIHN5c3RlbSB3b3JrcywgYW5kIGhvdyB0aGlzIG1vZHVsZSBmaXRzIGludG8gaXQuIFRoaXMgd2lsbCBoZWxwIG1lIGFzc2VzcyB0aGUgYXJjaGl0ZWN0dXJlIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIGFueSBjaGFuZ2VzIGRvd24gdGhlIGxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA0OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMtY29tbW9uLmg9NTE9aW50IGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9ucyhcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01My1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjU0OmludCBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTUtXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NDc9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4OTMtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg5NDppbnQgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODk1LVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vc3lzZnMuYz0yMTUyPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfY29tbWl0X3NjaGVtZXNfcXVvdGFfZ29hbHModm9pZCAqZGF0YSlcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIxNjUtXHRzeXNmc19jdHggPSBzeXNmc19rZGFtb25kLVx1MDAzZWNvbnRleHRzLVx1MDAzZWNvbnRleHRzX2FyclswXTtcbm1tL2RhbW9uL3N5c2ZzLmM6MjE2NjpcdHJldHVybiBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN5c2ZzX2N0eC1cdTAwM2VzY2hlbWVzLCBjdHgpO1xubW0vZGFtb24vc3lzZnMuYy0yMTY3LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTY1MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgREFNT04gU3lzZnMgRnVuY3Rpb24gU2NvcGUqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlIERBTU9OIHN5c2ZzIGNvZGUsIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGZ1bmN0aW9uIHZpc2liaWxpdHkuIEkgc2VlIHRoYXQgYGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNgIGlzIG5vbi1zdGF0aWMsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IHNjb3BlIGFuZCBwb3RlbnRpYWwgZXh0ZXJuYWwgaW50ZXJhY3Rpb25zLiBJcyB0aGlzIGZ1bmN0aW9uIGludGVuZGVkIHRvIGJlIGV4cG9zZWQgb3V0c2lkZSB0aGUgbW9kdWxlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBjaG9pY2Ugd2FzIG1hZGUuCgpUaGVuIG15IG1pbmQgZHJpZnRzIHRvIGBkYW1vbl9zeXNmc19oYW5kbGVfY21kYC4gQWgsIHRoYXQgb25lICppcyogc3RhdGljLiBJbnRlcmVzdGluZyBjb250cmFzdC4gSSBuZWVkIHRvIGtlZXAgdGhpcyBwYXR0ZXJuIGluIG1pbmQuIEl0JiMzOTtzIGEga2V5IGZhY3Rvci4KCk5vdywgdGhlIG5hdHVyYWwgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHN5c2ZzIGltcGxlbWVudGF0aW9uLiBMZXQmIzM5O3Mgc2VlLi4uIGBkYW1vbl9zeXNmc19jb21taXRfc2NoZW1lc19xdW90YV9nb2Fsc2AgaXMgc3RhdGljLCBgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbmAgaXMgYWxzbyBzdGF0aWMsIGFzIGlzIGBkYW1vbl9zeXNmc19yZXBlYXRfY2FsbF9mbmAuIFNvLCBpdCBzZWVtcyBsaWtlIG1vc3Qgb2YgdGhlIHN5c2ZzIGZ1bmN0aW9ucyBhcmUgZGVsaWJlcmF0ZWx5IHNjb3BlZCB3aXRoaW4gdGhlIG1vZHVsZS4gR29vZCwgdGhhdCBoZWxwcy4KCkkgbmVlZCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgYW5kIHRvIHNlZSBpZiBJIG1pc3NlZCBhbnkuIExldCYjMzk7cyBoZWFkIG92ZXIgdG8gYG1tL2RhbW9uL3N5c2ZzLmNgIGZvciBhIGNvbXByZWhlbnNpdmUgbG9vay4gSSB3YW50IHRvIGRvdWJsZS1jaGVjayBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyBsdXJraW5nIGFyb3VuZCwgd2hpY2ggd291bGQgYWZmZWN0IGhvdyB0aGUgc3lzZnMgaW50ZXJmYWNlIGJlaGF2ZXMuIEkgd2FudCB0byBidWlsZCBhIGJldHRlciBvdmVyYWxsIHBpY3R1cmUgb2YgdGhlIG1vZHVsZSYjMzk7cyBleHBvc2VkIGZ1bmN0aW9uYWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50IGRhbW9uX3N5c2ZzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA0OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTYwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBtbS9kYW1vbi9zeXNmcy5jYCBmb3IgRnVuY3Rpb24gU2NvcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGBtbS9kYW1vbi9zeXNmcy5jYC4gTXkgcHJpbWFyeSBjb25jZXJuIGlzIHBpbnBvaW50aW5nIGFueSBmdW5jdGlvbnMgZGVmaW5lZCB3aXRoaW4gdGhhdCBmaWxlIHRoYXQgYXJlbiYjMzk7dCBkZWNsYXJlZCBhcyBgc3RhdGljYC4gIEtub3dpbmcgdGhlIHNjb3BlIG9mIHRoZXNlIGZ1bmN0aW9ucyBpcyBjcnVjaWFsLiBJdCBsZXRzIG1lIHVuZGVyc3RhbmQgaWYgdGhleSBtaWdodCBiZSBpbnRlbmRlZCBmb3IgZXh0ZXJuYWwgdXNlLCBwZXJoYXBzIGNhbGxlZCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBEQU1PTiBpbmZyYXN0cnVjdHVyZSBvciBldmVuIGtlcm5lbCBzdWJzeXN0ZW1zLiBJZiB0aGV5ICphcmUqIHN0YXRpYywgdGhlbiBJIGhhdmUgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBidWlsZCBhbiBvdmVyYWxsIHBpY3R1cmUgb2YgaG93IGl0IGFsbCB3b3Jrcy4gSSBjYW4gc3RhcnQgYnkganVzdCBsaXN0aW5nIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBhbmQgdGhlaXIgc2lnbmF0dXJlcy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIGRlc2lnbiBpbnRlbnRpb25zIGZvciB0aGlzIHN5c2ZzIGludGVyZmFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpfXSYjNDM7IGRhbW9uX3N5c2ZzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy5jLTE1LVxubW0vZGFtb24vc3lzZnMuYzoxNjpzdHJ1Y3QgZGFtb25fc3lzZnNfcmVnaW9uIHtcbm1tL2RhbW9uL3N5c2ZzLmMtMTctXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9ODI9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfcmVnaW9uX2t0eXBlID0ge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtOTEtXG5tbS9kYW1vbi9zeXNmcy5jOjkyOnN0cnVjdCBkYW1vbl9zeXNmc19yZWdpb25zIHtcbm1tL2RhbW9uL3N5c2ZzLmMtOTMtXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjAxPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3JlZ2lvbnNfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMTAtXG5tbS9kYW1vbi9zeXNmcy5jOjIxMTpzdHJ1Y3QgZGFtb25fc3lzZnNfdGFyZ2V0IHtcbm1tL2RhbW9uL3N5c2ZzLmMtMjEyLVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTMwOD1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc190YXJnZXRfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy0zMTctXG5tbS9kYW1vbi9zeXNmcy5jOjMxODpzdHJ1Y3QgZGFtb25fc3lzZnNfdGFyZ2V0cyB7XG5tbS9kYW1vbi9zeXNmcy5jLTMxOS1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMuYz00MzY9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfdGFyZ2V0c19rdHlwZSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTQ0NS1cbm1tL2RhbW9uL3N5c2ZzLmM6NDQ2OnN0cnVjdCBkYW1vbl9zeXNmc19pbnRlcnZhbHNfZ29hbCB7XG5tbS9kYW1vbi9zeXNmcy5jLTQ0Ny1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMuYz01OTM9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfaW50ZXJ2YWxzX2dvYWxfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy02MDItXG5tbS9kYW1vbi9zeXNmcy5jOjYwMzpzdHJ1Y3QgZGFtb25fc3lzZnNfaW50ZXJ2YWxzIHtcbm1tL2RhbW9uL3N5c2ZzLmMtNjA0LVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTc0Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19pbnRlcnZhbHNfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy03NTYtXG5tbS9kYW1vbi9zeXNmcy5jOjc1NzpzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVyIHtcbm1tL2RhbW9uL3N5c2ZzLmMtNzU4LVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTc2NT1zdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX2ZpbHRlciAqZGFtb25fc3lzZnNfZmlsdGVyX2FsbG9jKHZvaWQpXG4tLVxubW0vZGFtb24vc3lzZnMuYy03NjktXG5tbS9kYW1vbi9zeXNmcy5jOjc3MDpzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVyX3R5cGVfbmFtZSB7XG5tbS9kYW1vbi9zeXNmcy5jLTc3MS1cdGVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZTtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTkzNz1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19maWx0ZXJfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy05NDYtXG5tbS9kYW1vbi9zeXNmcy5jOjk0NzpzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVycyB7XG5tbS9kYW1vbi9zeXNmcy5jLTk0OC1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0xMDU2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2ZpbHRlcnNfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy0xMDY1LVxubW0vZGFtb24vc3lzZnMuYzoxMDY2OnN0cnVjdCBkYW1vbl9zeXNmc19wcm9iZSB7XG5tbS9kYW1vbi9zeXNmcy5jLTEwNjctXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MTEzNz1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19wcm9iZV9rdHlwZSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTExNDYtXG5tbS9kYW1vbi9zeXNmcy5jOjExNDc6c3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlcyB7XG5tbS9kYW1vbi9zeXNmcy5jLTExNDgtXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MTI2Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19wcm9iZXNfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy0xMjc1LVxubW0vZGFtb24vc3lzZnMuYzoxMjc2OnN0cnVjdCBkYW1vbl9zeXNmc19hdHRycyB7XG5tbS9kYW1vbi9zeXNmcy5jLTEyNzctXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MTM3Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19hdHRyc19rdHlwZSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTEzODEtXG5tbS9kYW1vbi9zeXNmcy5jOjEzODI6c3RydWN0IGRhbW9uX3N5c2ZzX29wc19uYW1lIHtcbm1tL2RhbW9uL3N5c2ZzLmMtMTM4My1cdGVudW0gZGFtb25fb3BzX2lkIG9wc19pZDtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTEzODc9c3RhdGljIGNvbnN0IHN0cnVjdCBkYW1vbl9zeXNmc19vcHNfbmFtZSBkYW1vbl9zeXNmc19vcHNfbmFtZXNbXSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTE0MDEtXG5tbS9kYW1vbi9zeXNmcy5jOjE0MDI6c3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHQge1xubW0vZGFtb24vc3lzZnMuYy0xNDAzLVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTE2NDg9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfY29udGV4dF9rdHlwZSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTE2NTctXG5tbS9kYW1vbi9zeXNmcy5jOjE2NTg6c3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHRzIHtcbm1tL2RhbW9uL3N5c2ZzLmMtMTY1OS1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0xNzc3PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2NvbnRleHRzX2t0eXBlID0ge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMTc4Ni1cbm1tL2RhbW9uL3N5c2ZzLmM6MTc4NzpzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCB7XG5tbS9kYW1vbi9zeXNmcy5jLTE3ODgtXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MTgyMT1zdGF0aWMgdm9pZCBkYW1vbl9zeXNmc19rZGFtb25kX3JtX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXG4tLVxubW0vZGFtb24vc3lzZnMuYy0xODI5LSAqL1xubW0vZGFtb24vc3lzZnMuYzoxODMwOmVudW0gZGFtb25fc3lzZnNfY21kIHtcbm1tL2RhbW9uL3N5c2ZzLmMtMTgzMS1cdC8qIEBEQU1PTl9TWVNGU19DTURfT046IFR1cm4gdGhlIGtkYW1vbmQgb24uICovXG4tLVxubW0vZGFtb24vc3lzZnMuYz0yMzAwPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfZGFtb25fY2FsbChpbnQgKCpmbikodm9pZCAqZGF0YSksXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMzEzLVxubW0vZGFtb24vc3lzZnMuYzoyMzE0OnN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzX3dhbGtfZGF0YSB7XG5tbS9kYW1vbi9zeXNmcy5jLTIzMTUtXHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqc3lzZnNfa2RhbW9uZDtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTI0OTg9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfa2RhbW9uZF9rdHlwZSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTI1MDctXG5tbS9kYW1vbi9zeXNmcy5jOjI1MDg6c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmRzIHtcbm1tL2RhbW9uL3N5c2ZzLmMtMjUwOS1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0yNjQzPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2tkYW1vbmRzX2t0eXBlID0ge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjY1Mi1cbm1tL2RhbW9uL3N5c2ZzLmM6MjY1MzpzdHJ1Y3QgZGFtb25fc3lzZnNfdWlfZGlyIHtcbm1tL2RhbW9uL3N5c2ZzLmMtMjY1NC1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA0OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDY0CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBcHByb2FjaCB0byBVbmRlcnN0YW5kaW5nIHRoZSBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBzeXNmcyBjb2RlLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gaG93IGl0IHVzZXMgYGtvYmpfdHlwZWAgYW5kIHN5c2ZzIGZpbGVzIHRvIG1hbmFnZSB0aGluZ3MuIEJhc2VkIG9uIHRoZSBjb250ZXh0LCBJIHRoaW5rIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCBoZXJlIGFyZSBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYCBhbmQgcG90ZW50aWFsbHkgYGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNgLiBJdCBzb3VuZHMgbGlrZSB0aGVzZSBhcmUgY2VudHJhbCB0byBzZXR0aW5nIG9yIGFwcGx5aW5nIHF1b3RhIHRhcmdldHMuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIHZlcmlmeSB0aGUgbG9jYXRpb24gb2YgYGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNgIHdpdGhpbiB0aGUgY29kZS4gTGV0JiMzOTtzIHNlZSBpZiBpdCYjMzk7cyBkZWZpbmVkIGluIGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgLiBUaGF0IGZpbGUgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgcGxhY2UgZm9yIHRoaXMga2luZCBvZiBmdW5jdGlvbmFsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yODQ3PXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlKFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODkzLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4OTQ6aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg5NS1cdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg5MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBEYXRhIEFjY2VzcyBNb25pdG9yIChEQU1PTikgUXVvdGEgTWFuYWdlbWVudCBJc3N1ZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBJJiMzOTttIGxvb2tpbmcgYXQgYGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNgLCBhbmQgaXQmIzM5O3MgbWFya2VkIGFzIG5vbi1zdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVkIG15IGludGVyZXN0LiBJbiB0aGUgY29udGV4dCBvZiBEQU1PTiYjMzk7cyBxdW90YSBzeXN0ZW0sIHRoYXQgbWVhbnMgaXQmIzM5O3MgcG90ZW50aWFsbHkgYWNjZXNzaWJsZSBmcm9tIGVsc2V3aGVyZSBpbiB0aGUga2VybmVsLiBNeSBuZXh0IHRob3VnaHQgaXMsIHdoZXJlIGVsc2UgYXJlIHRoZSBEQU1PTiBxdW90YSByb3V0aW5lcyBmb3VuZD8gQW5kLCB3aGF0IG9mIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgPyBUaW1lIHRvIGNoZWNrIGBtbS9kYW1vbi9jb3JlLmNgLiBUaGF0JiMzOTtzIHdoZXJlIERBTU9OJiMzOTtzIGNvcmUgZnVuY3Rpb25hbGl0eSByZXNpZGVzLCBzbyBpdCYjMzk7cyBhIGxpa2VseSBwbGFjZSB0byBmaW5kIG90aGVyIGtleSBxdW90YS1yZWxhdGVkIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucywgYW5kIHdoZXRoZXIgdGhleSBtaWdodCBpbmFkdmVydGVudGx5IGludHJvZHVjZSBzb21lIHJhY2UgY29uZGl0aW9ucyBvciBvdGhlciBpc3N1ZXMuIE15IGZvY3VzIG5vdyBpcyBvbiB1bmRlcnN0YW5kaW5nIGRhdGEgaW50ZWdyaXR5IGluIHRoaXMgcXVvdGEgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0xMTQyPXN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMTUyLS8qKlxubW0vZGFtb24vY29yZS5jOjExNTM6ICogZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKCkgLSBDb21taXQgREFNT1MgcXVvdGEgZ29hbHMgdG8gYW5vdGhlciBxdW90YS5cbm1tL2RhbW9uL2NvcmUuYy0xMTU0LSAqIEBkc3Q6XHRUaGUgY29tbWl0IGRlc3RpbmF0aW9uIERBTU9TIHF1b3RhLlxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMTYzLSAqL1xubW0vZGFtb24vY29yZS5jOjExNjQ6aW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpXG5tbS9kYW1vbi9jb3JlLmMtMTE2NS17XG4tLVxubW0vZGFtb24vY29yZS5jPTExODk9c3RhdGljIGludCBkYW1vc19jb21taXRfcXVvdGEoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMTk1LVx0ZHN0LVx1MDAzZXN6ID0gc3JjLVx1MDAzZXN6O1xubW0vZGFtb24vY29yZS5jOjExOTY6XHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoZHN0LCBzcmMpO1xubW0vZGFtb24vY29yZS5jLTExOTctXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ4OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIERBTU9OLVJlbGF0ZWQgQ29uZmlndXJhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHplcm8gaW4uIEkmIzM5O20gc2VlaW5nIHRoYXQgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2AgYW5kIGBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzYCBhcmUgc29saWQgaW5kaWNhdG9ycyBvZiB0aGUgYXJlYSBJIG5lZWQgdG8gYmUgZm9jdXNlZCBvbi4gVGhvc2UgbG9vayBsaWtlIGdvb2Qgc3RhcnRpbmcgcG9pbnRzLiBOb3csIEkgbmVlZCB0byBjb25maXJtIHRoZSBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIHRoaXMgYXJlYSwgd2hpY2ggSSB0aGluayBhcmUgYERBTU9OYCBhbmQgYERBTU9OX1NZU0ZTYC4gT2theSwgdGltZSB0byBjaGVjazogSSBzaG91bGQgdmVyaWZ5IGlmIGBEQU1PTl9TWVNGU2AgaGFzIGFueSBkZXBlbmRlbmNpZXMuIEkgY2FuJiMzOTt0IGJlIHN1cmUgd2l0aG91dCBsb29raW5nLCBzbyBsZXQmIzM5O3MgZmluZCBvdXQhIEkmIzM5O2xsIGRpdmUgaW50byB0aGUgZGVwZW5kZW5jaWVzIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREFNT05fU1lTRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWc9NTY9Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1Rcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcbm1tL2RhbW9uL0tjb25maWctNjktXHRib29sIFwmIzM0O0RBTU9OIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNzUtXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTc3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg5MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgREFNT04gU3lzZnMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgYG1tL2RhbW9uL0tjb25maWdgIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBEQU1PTl9TWVNGU2AgY29uZmlndXJhdGlvbiBvcHRpb24uIFRoaXMgaXMgdGhlIGVudHJ5IHBvaW50LCB0aGUgY2VudHJhbCBwbGFjZSB3aGVyZSB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTiBpcyBkZWZpbmVkIGluIHRoZSBidWlsZCBzeXN0ZW0uIFRoaXMgZmlsZSBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgc3lzZnMgaW50ZXJmYWNlIGlzIGVuYWJsZWQsIGRpc2FibGVkLCBhbmQgY29uZmlndXJlZC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgaGVyZSwgZ2l2ZW4gaXRzIGNyaXRpY2FsaXR5IGluIGVuYWJsaW5nIHVzZXJzcGFjZSBjb250cm9sIG92ZXIgdGhpcyBmcmFtZXdvcmsuIEkgZXhwZWN0IHRvIHNlZSB0aGUgdHlwaWNhbCBgY29uZmlnYCBibG9jayB3aXRoIHBvdGVudGlhbGx5IGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgZmVhdHVyZXMuIEhvcGVmdWxseSB0aGVyZSB3aWxsIGJlIGNsZWFyIGRvY3VtZW50YXRpb24gaW5saW5lIG9yIG5lYXJieSBhYm91dCBpdHMgaW1wbGljYXRpb25zIHdoZW4gZW5hYmxlZC4gSSYjMzk7bGwgYmUgbG9va2luZyB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25kaXRpb25zIHRoYXQgbmVlZCB0byBiZSBtZXQgZm9yIGl0IHRvIGJlIGVuYWJsZWQuIEFueSBkZXBlbmRlbmNpZXMgb24gc3BlY2lmaWMga2VybmVsIHZlcnNpb25zLCBvdGhlciBjb25maWd1cmF0aW9ucywgb3IgZXZlbiBoYXJkd2FyZSBwbGF0Zm9ybXMgd291bGQgYmUgaW1wb3J0YW50IHRvIG5vdGUuIE9uY2UgSSBmdWxseSB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIEkmIzM5O2xsIGhhdmUgYSBtdWNoIGJldHRlciBpZGVhIG9mIGhvdyB0aGUgc3lzZnMgaW50ZXJmYWNlIGJlaGF2ZXMgYW5kIGhvdyB0byBtYW5hZ2UgdGhlIGtlcm5lbCBmZWF0dXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2MDpcdFx0aGVscFxuICA2MTpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gdmlydHVhbCBhZGRyZXNzZXMgb3BlcmF0aW9ucyBLdW5pdCB0ZXN0IHN1aXRlLlxuICA2MjpcdFxuICA2MzpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcbiAgNjQ6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXG4gIDY1Olx0XG4gIDY2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDY3Olx0XG4gIDY4Olx0Y29uZmlnIERBTU9OX1NZU0ZTXG4gIDY5Olx0XHRib29sIFwmIzM0O0RBTU9OIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuICA3MDpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgU1lTRlNcbiAgNzE6XHRcdGRlZmF1bHQgREFNT05cbiAgNzI6XHRcdGhlbHBcbiAgNzM6XHRcdCAgVGhpcyBidWlsZHMgdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgREFNT04uICBUaGUgdXNlciBzcGFjZSBjYW4gdXNlXG4gIDc0Olx0XHQgIHRoZSBpbnRlcmZhY2UgZm9yIGFyYml0cmFyeSBkYXRhIGFjY2VzcyBtb25pdG9yaW5nLlxuICA3NTpcdFxuICA3NjpcdGNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG4gIDc3Olx0XHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDc4Olx0XHRkZXBlbmRzIG9uIERBTU9OX1NZU0ZTIFx1MDAyNlx1MDAyNiBLVU5JVD15XG4gIDc5Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQ2OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgREFNT04mIzM5O3MgU3lzZnMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBgREFNT05fU1lTRlNgIHJlbGllcyBvbiBib3RoIGBEQU1PTmAgYW5kIGBTWVNGU2AuIGBTWVNGU2AgaXMgcHJldHR5IHN0YW5kYXJkLCB3aGljaCBtZWFucyB0aGUgcmVhbCBjb25maWd1cmF0aW9ucyBvZiBpbnRlcmVzdCBhcmUgZ29pbmcgdG8gYmUgdGhvc2UgcmVsYXRlZCB0byBgREFNT05gIGFuZCB0aGVuIHNwZWNpZmljYWxseSwgYERBTU9OX1NZU0ZTYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIGFyZSBzZXQgdXAuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYC4gSXMgdGhhdCB0aGUgb25seSByZWxldmFudCBub24tc3RhdGljIGZ1bmN0aW9uIHRoZXJlPyBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcgY3J1Y2lhbC4KCkFoLCB3YWl0LCBob2xkIG9uLiBUaGVyZSYjMzk7cyBhbHNvIGBkYW1vbl9zeXNmc19zZXRfcXVvdGFfc2NvcmVzYCBpbiBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYOKApiBObywgd2FpdCwgdGhhdCYjMzk7cyBub3QgcXVpdGUgcmlnaHQuIEl0IGxvb2tzIGxpa2UgaXQgaXMgYWN0dWFsbHkgYGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNgLiBJIG5lZWQgdG8gcmUtZXhhbWluZSB0aGF0IGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA0OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMtY29tbW9uLmg9NTE9aW50IGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9ucyhcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01My1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjU0OmludCBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTUtXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NDc9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4OTMtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg5NDppbnQgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODk1LVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vc3lzZnMuYz0yMTUyPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfY29tbWl0X3NjaGVtZXNfcXVvdGFfZ29hbHModm9pZCAqZGF0YSlcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIxNjUtXHRzeXNmc19jdHggPSBzeXNmc19rZGFtb25kLVx1MDAzZWNvbnRleHRzLVx1MDAzZWNvbnRleHRzX2FyclswXTtcbm1tL2RhbW9uL3N5c2ZzLmM6MjE2NjpcdHJldHVybiBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN5c2ZzX2N0eC1cdTAwM2VzY2hlbWVzLCBjdHgpO1xubW0vZGFtb24vc3lzZnMuYy0yMTY3LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyNTcKCQkJCQkJCW91dHB1dDogMTUzCgkJCQkJCQl0aG91Z2h0czogMTc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIERBTU9OIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgcHJldHR5IGNyaXRpY2FsIGJ1ZyByZWxhdGVkIHRvIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgY29tbWl0bWVudCBvZiBgbGFzdF9wc2lfdG90YWxgIHdpdGhpbiB0aGUgREFNT04gY29yZSBhbmQgaXRzIHN5c2ZzIGludGVyZmFjZS4gVGhhdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBubyBxdWVzdGlvbi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgY2hhbmdlcyB0byBob3cgREFNT04gaGFuZGxlcyB0aGUgYERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AgcXVvdGEgbWV0cmljLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIG1lbW9yeSBwcmVzc3VyZSBpbmZvcm1hdGlvbi4gQW5kIGl0JiMzOTtzIG5vdCBqdXN0IHRoZSBjb3JlIGxvZ2ljOyB0aGUgcGF0Y2ggYWxzbyB0d2Vha3MgYG5leHRfcmVmcmVzaF9qaWZmaWVzYCBpbiB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlLCB3aGljaCBpcyB0aGUgdXNlci1zcGFjZSBmYWNpbmcgc2lkZSBvZiB0aGUgc3lzdGVtLgoKR2l2ZW4gdGhhdCB0aGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGFyZSBleHBvc2VkIHRocm91Z2ggc3lzZnMsIHRoZSBhdHRhY2sgc3VyZmFjZSBpcyBkZWZpbml0ZWx5IHRoZXJlLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIHBhdGggdG8gaW5mbHVlbmNlIG1lbW9yeSBtYW5hZ2VtZW50IGJlaGF2aW9yIGZyb20gdXNlcnNwYWNlLiBUaGUga2V5IHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uIGR1cmluZyBmdXp6aW5nIGFyZSBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYCBhbmQgYGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNgLCBzaW5jZSB0aGVzZSBhcmUgdGhlIHBvaW50cyBvZiBpbnRlZ3JhdGlvbiBhZmZlY3RlZCBieSB0aGlzIHBhdGNoLiBXZSBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGBEQU1PTmAgYW5kIGBEQU1PTl9TWVNGU2AgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQsIGFzIHRoZXNlIGFyZSBwcmVyZXF1aXNpdGVzIGZvciB0aGUgYWZmZWN0ZWQgY29kZSBwYXRocy4KClRoZXJlZm9yZSwgdGhpcyBwYXRjaCBoYXMgdGhlIHBvdGVudGlhbCB0byBpbnRyb2R1Y2Ugc3VidGxlIGJ1dCBjcml0aWNhbCBtZW1vcnkgbWFuYWdlbWVudCBlcnJvcnMgdGhhdCBjb3VsZCBiZSBleHBsb2l0YWJsZSwgYW5kIGl0IHdhcnJhbnRzIHRob3JvdWdoIGZ1enppbmcuIEkmIzM5O20gZ29pbmcgdG8gbWFyayB0aGlzIGFzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA0OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9zX2NvbW1pdF9xdW90YV9nb2FscyYjMzQ7LAogICAgJiMzNDtkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIERBTU9OIGxvZ2ljIHRvIHByb3Blcmx5IGluaXRpYWxpemUgYW5kIGNvbW1pdCB0aGUgYGxhc3RfcHNpX3RvdGFsYCBmb3IgdGhlIGBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVNgIHF1b3RhIG1ldHJpYy4gSXQgYWxzbyBmaXhlcyB0aGUgYG5leHRfcmVmcmVzaF9qaWZmaWVzYCBoYW5kbGluZyBpbiBEQU1PTiBzeXNmcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3lzZnMsIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzJiMzNDssCiAgICAmIzM0O2RhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgREFNT04gbG9naWMgdG8gcHJvcGVybHkgaW5pdGlhbGl6ZSBhbmQgY29tbWl0IHRoZSBgbGFzdF9wc2lfdG90YWxgIGZvciB0aGUgYERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AgcXVvdGEgbWV0cmljLiBJdCBhbHNvIGZpeGVzIHRoZSBgbmV4dF9yZWZyZXNoX2ppZmZpZXNgIGhhbmRsaW5nIGluIERBTU9OIHN5c2ZzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzeXNmcywgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBidWcgd2hlcmUgdGhlIGBsYXN0X3BzaV90b3RhbGAgZmllbGQgaW4gYHN0cnVjdCBkYW1vc19xdW90YV9nb2FsYCBpcyBsZWZ0IHVuaW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uLiBUaGUgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB1c2luZyBga21hbGxvY19vYmooKWAgKHdoaWNoIG1hcHMgdG8gYGttYWxsb2NgIGFuZCBkb2VzIG5vdCB6ZXJvIG1lbW9yeSkgaW4gYGRhbW9zX25ld19xdW90YV9nb2FsKClgLCBidXQgYGxhc3RfcHNpX3RvdGFsYCB3YXMgbm90IGluaXRpYWxpemVkLiBEdXJpbmcgdGhlIGZpcnN0IGV2YWx1YXRpb24gY3ljbGUsIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKClgIHJlYWRzIHRoaXMgdW5pbml0aWFsaXplZCBmaWVsZCB0byBjb21wdXRlIGBnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBub3dfcHNpX3RvdGFsIC0gZ29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbDtgLiBUaGlzIHVuaW5pdGlhbGl6ZWQgcmVzdWx0IGlzIHN1YnNlcXVlbnRseSB1c2VkIGluIGEgY29uZGl0aW9uYWwgYnJhbmNoICh2aWEgdGhlIGBtYXgoKWAgbWFjcm8pIGluIGBkYW1vc19xdW90YV9zY29yZSgpYCB0byBkZXRlcm1pbmUgdGhlIGhpZ2hlc3QgcXVvdGEgc2NvcmUsIHdoaWNoIGRpY3RhdGVzIG1lbW9yeSByZWNsYWltIGJlaGF2aW9yLlxuXG5TdGFuZGFyZCBLQVNBTiBvbmx5IGRldGVjdHMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWUgYnVnczsgaXQgZG9lcyBub3QgdHJhY2sgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIHdvdWxkIGNvbXBsZXRlbHkgbWlzcyB0aGlzIGJ1Zy4gS01TQU4sIG9uIHRoZSBvdGhlciBoYW5kLCB0cmFja3MgdW5pbml0aWFsaXplZCBtZW1vcnkgYXQgdGhlIGJpdCBsZXZlbCBhbmQgd2lsbCByZWxpYWJseSBmbGFnIHRoZSB1c2Ugb2YgdGhlIHVuaW5pdGlhbGl6ZWQgdmFsdWUgd2hlbiBpdCBhZmZlY3RzIGNvbnRyb2wgZmxvdyAoZS5nLiwgaW4gdGhlIGBtYXgoKWAgY29tcGFyaXNvbikuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBoaWdobHkganVzdGlmaWVkIHRvIGNhdGNoIHRoaXMgYW5kIHNpbWlsYXIgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGluIHRoZSBEQU1PTiBzdWJzeXN0ZW0uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDE2ZGVhZThjYTgzMDUzYzY5ZWQ4M2ViMDRiZmZlOGQ5YTM0YjI4NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDI3IDA0OjQxOjU3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jCmluZGV4IDY0NGRhZjVhMTY1NjAuLjZmMzYwZDYxMzkwYWQgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmMKQEAgLTExMjIsNiAmIzQzOzExMjIsOSBAQCBzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbigKIAkJc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKnNyYykKIHsKIAlzd2l0Y2ggKGRzdC0mZ3Q7bWV0cmljKSB7CiYjNDM7CWNhc2UgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTOgomIzQzOwkJZHN0LSZndDtsYXN0X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKTsKJiM0MzsJCWJyZWFrOwogCWNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUDoKIAljYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlA6CiAJCWRzdC0mZ3Q7bmlkID0gc3JjLSZndDtuaWQ7CkBAIC0xMTQzLDcgJiM0MzsxMTQ2LDYgQEAgc3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoCiAJZHN0LSZndDt0YXJnZXRfdmFsdWUgPSBzcmMtJmd0O3RhcmdldF92YWx1ZTsKIAlpZiAoZHN0LSZndDttZXRyaWMgPT0gREFNT1NfUVVPVEFfVVNFUl9JTlBVVCkKIAkJZHN0LSZndDtjdXJyZW50X3ZhbHVlID0gc3JjLSZndDtjdXJyZW50X3ZhbHVlOwotCS8qIGtlZXAgbGFzdF9wc2lfdG90YWwgYXMgaXMsIHNpbmNlIGl0IHdpbGwgYmUgdXBkYXRlZCBpbiBuZXh0IGN5Y2xlICovCiAJZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oZHN0LCBzcmMpOwogfQogCkBAIC0zNzI3LDYgJiM0MzszNzI5LDE3IEBAIHN0YXRpYyBpbnQga2RhbW9uZF93YWl0X2FjdGl2YXRpb24oc3RydWN0IGRhbW9uX2N0eCAqY3R4KQogCXJldHVybiAtRUJVU1k7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBkYW1vc19pbml0X3F1b3RhX2dvYWxfbGFzdF9wc2koc3RydWN0IGRhbW9zICpzKQomIzQzO3sKJiM0MzsJc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7CiYjNDM7CiYjNDM7CWRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgJmFtcDtzLSZndDtxdW90YSkgewomIzQzOwkJaWYgKGdvYWwtJmd0O21ldHJpYyAhPSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlnb2FsLSZndDtsYXN0X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGtkYW1vbmRfaW5pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqY3R4KQogewogCXVuc2lnbmVkIGxvbmcgc2FtcGxlX2ludGVydmFsID0gY3R4LSZndDthdHRycy5zYW1wbGVfaW50ZXJ2YWwgPwpAQCAtMzc0Myw2ICYjNDM7Mzc1Niw3IEBAIHN0YXRpYyB2b2lkIGtkYW1vbmRfaW5pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqY3R4KQogCWRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzY2hlbWUsIGN0eCkgewogCQlkYW1vc19zZXRfbmV4dF9hcHBseV9zaXMoc2NoZW1lLCBjdHgpOwogCQlkYW1vc19zZXRfZmlsdGVyc19kZWZhdWx0X3JlamVjdChzY2hlbWUpOwomIzQzOwkJZGFtb3NfaW5pdF9xdW90YV9nb2FsX2xhc3RfcHNpKHNjaGVtZSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy5jIGIvbW0vZGFtb24vc3lzZnMuYwppbmRleCBlMzg1OGZmYWI0YjIyLi5mMDViMjU2YzkwZWU3IDEwMDY0NAotLS0gYS9tbS9kYW1vbi9zeXNmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3N5c2ZzLmMKQEAgLTE3ODksNiAmIzQzOzE3ODksNyBAQCBzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCB7CiAJc3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHRzICpjb250ZXh0czsKIAlzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9jdHg7CiAJdW5zaWduZWQgaW50IHJlZnJlc2hfbXM7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbmV4dF9yZWZyZXNoX2ppZmZpZXM7CiB9OwogCiBzdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmRhbW9uX3N5c2ZzX2tkYW1vbmRfYWxsb2Modm9pZCkKQEAgLTIyMTUsMTcgJiM0MzsyMjE2LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zeXNmc19idWlsZF9jdHgoCiAJcmV0dXJuIGN0eDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllczsKLQogc3RhdGljIGludCBkYW1vbl9zeXNmc19yZXBlYXRfY2FsbF9mbih2b2lkICpkYXRhKQogewogCXN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICpzeXNmc19rZGFtb25kID0gZGF0YTsKIAogCWlmICghc3lzZnNfa2RhbW9uZC0mZ3Q7cmVmcmVzaF9tcykKIAkJcmV0dXJuIDA7Ci0JaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXMpKQomIzQzOwlpZiAodGltZV9iZWZvcmUoamlmZmllcywgc3lzZnNfa2RhbW9uZC0mZ3Q7bmV4dF9yZWZyZXNoX2ppZmZpZXMpKQogCQlyZXR1cm4gMDsKLQlkYW1vbl9zeXNmc19uZXh0X3VwZGF0ZV9qaWZmaWVzID0gamlmZmllcyAmIzQzOwomIzQzOwlzeXNmc19rZGFtb25kLSZndDtuZXh0X3JlZnJlc2hfamlmZmllcyA9IGppZmZpZXMgJiM0MzsKIAkJbXNlY3NfdG9famlmZmllcyhzeXNmc19rZGFtb25kLSZndDtyZWZyZXNoX21zKTsKIAogCWlmICghbXV0ZXhfdHJ5bG9jaygmYW1wO2RhbW9uX3N5c2ZzX2xvY2spKQpAQCAtMjI3Myw4ICYjNDM7MjI3Miw4IEBAIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZCkKIAl9CiAJa2RhbW9uZC0mZ3Q7ZGFtb25fY3R4ID0gY3R4OwogCi0JZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllcyA9Ci0JCWppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhrZGFtb25kLSZndDtyZWZyZXNoX21zKTsKJiM0MzsJa2RhbW9uZC0mZ3Q7bmV4dF9yZWZyZXNoX2ppZmZpZXMgPSBqaWZmaWVzICYjNDM7CiYjNDM7CQltc2Vjc190b19qaWZmaWVzKGtkYW1vbmQtJmd0O3JlZnJlc2hfbXMpOwogCiAJcmVwZWF0X2NhbGxfY29udHJvbC0mZ3Q7Zm4gPSBkYW1vbl9zeXNmc19yZXBlYXRfY2FsbF9mbjsKIAlyZXBlYXRfY2FsbF9jb250cm9sLSZndDtkYXRhID0ga2RhbW9uZDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA0OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMTIKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqREFNT04gUGF0Y2ggQW5hbHlzaXM6IFBTSSBJbnRlZ3JhdGlvbiBhbmQgU3lzZnMgRW5oYW5jZW1lbnRzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgREFNT04gcGF0Y2guIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3ZlIGdvdCBjaGFuZ2VzIGluIGBtbS9kYW1vbi9jb3JlLmNgIGFuZCBgbW0vZGFtb24vc3lzZnMuY2AsIGZvY3VzaW5nIG9uIGludGVncmF0aW5nIFBTSSAoUHJlc3N1cmUgU3RhbGwgSW5mb3JtYXRpb24pIG1ldHJpY3MgYW5kIGltcHJvdmluZyB0aGUgc3lzZnMgaW50ZXJmYWNlLgoKRmlyc3QsIGluIGBtbS9kYW1vbi9jb3JlLmNgLCB0aGUga2V5IGFkanVzdG1lbnQgc2VlbXMgdG8gYmUgaW50ZWdyYXRpbmcgYERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AuIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbmAgaXMgbm93IHVwZGF0ZWQgdG8gaGFuZGxlIHRoaXMgcXVvdGEgdHlwZS4gQ3JpdGljYWxseSwgd2UmIzM5O3JlIGdyYWJiaW5nIHRoZSB0b3RhbCBQU0kgbWV0cmljcyB1c2luZyBgZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpYCBhbmQgc3RvcmluZyB0aGVtIGluIGBkc3QtJmd0O2xhc3RfcHNpX3RvdGFsYC4gVGhpcyBzdHJvbmdseSBpbXBsaWVzIHRoYXQgd2UmIzM5O3JlIHVzaW5nIFBTSSBkYXRhIHRvIGluZm9ybSBvdXIgcXVvdGEgZGVjaXNpb25zLCB3aGljaCBpcyBhIHNpZ25pZmljYW50IGFkZGl0aW9uIGZvciBtb3JlIGludGVsbGlnZW50IG1lbW9yeSBtYW5hZ2VtZW50LiBUaGVyZSBhcmUgc29tZSBtaW5vciB0d2Vha3MgdG8gZXhpc3RpbmcgZnVuY3Rpb25zLiBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxgIGhhcyBhIGNvbW1lbnQgcmVtb3ZlZCwgYW5kIGEgbmV3IGZ1bmN0aW9uLCBgZGFtb3NfaW5pdF9xdW90YV9nb2FsX2xhc3RfcHNpYCwgaGFzIGJlZW4gaW50cm9kdWNlZCwgd2hpY2ggZG9lcyB3aGF0IHRoZSBuYW1lIGltcGxpZXM6IGluaXRpYWxpemVzIGBnb2FsLSZndDtsYXN0X3BzaV90b3RhbGAgZm9yIHRoZSBgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTYCBzY2hlbWUuIFRoaXMgaW5pdGlhbGl6YXRpb24gaXMgZXNzZW50aWFsLCBhbmQgaXQmIzM5O3MgZ29vZCB0byBzZWUgaXQgYWRkcmVzc2VkIGRpcmVjdGx5IHdpdGhpbiB0aGUgY29udGV4dCBpbml0aWFsaXphdGlvbiAoYGtkYW1vbmRfaW5pdF9jdHhgKS4KCk5vdywgZmxpcHBpbmcgb3ZlciB0byBgbW0vZGFtb24vc3lzZnMuY2AsIHRoZSBtb2RpZmljYXRpb25zIHNlZW0gY2VudGVyZWQgYXJvdW5kIHJlZmluaW5nIHRoZSB1cGRhdGUgbWVjaGFuaXNtIGFuZCB0eWluZyBpdCB0byBQU0kgaW50ZWdyYXRpb24uIEEga2V5IGNoYW5nZSBpcyB0aGUgYWRkaXRpb24gb2YgYSBuZXcgZmllbGQsIGB1bnNpZ25lZCBsb25nIG5leHRfcmVmcmVzaF9qaWZmaWVzYCwgd2l0aGluIHRoZSBgc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmRgLiBUaGUgZ2xvYmFsIHZhcmlhYmxlIGBkYW1vbl9zeXNmc19uZXh0X3VwZGF0ZV9qaWZmaWVzYCBoYXMgYmVlbiByZW1vdmVkLCByZXBsYWNlZCBieSB0aGlzIHBlci1pbnN0YW5jZSBmaWVsZC4gVGhpcyBjaGFuZ2UgaXMgaW1wb3J0YW50IGJlY2F1c2UgaXQgbWFrZXMgdGhlIHJlZnJlc2ggbWVjaGFuaXNtIG1vcmUgZmxleGlibGUgYW5kIHBvdGVudGlhbGx5IGFsbG93cyBmb3IgZGlmZmVyZW50IHVwZGF0ZSBmcmVxdWVuY2llcyBmb3IgZGlmZmVyZW50IERBTU9OIGluc3RhbmNlcy4gVGhpcyBtYWtlcyBzZW5zZSBmcm9tIGEgcGVyZm9ybWFuY2UgcGVyc3BlY3RpdmUuIGBkYW1vbl9zeXNmc19yZXBlYXRfY2FsbF9mbmAgbm93IHVzZXMgYHN5c2ZzX2tkYW1vbmQtJmd0O25leHRfcmVmcmVzaF9qaWZmaWVzYC4gSSYjMzk7bGwgd2FudCB0byBlbnN1cmUgdGhpcyBpc24mIzM5O3QgY3JlYXRpbmcgYW55IHVuZXhwZWN0ZWQgcmFjZSBjb25kaXRpb25zIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyBhbmQgdGhhdCB0aGUgY29ycmVjdCBqaWZmaWVzIGFyZSBiZWluZyBzZXQuIFRoZSBpbml0aWFsaXphdGlvbiBvZiBga2RhbW9uZC0mZ3Q7bmV4dF9yZWZyZXNoX2ppZmZpZXNgIGR1cmluZyBgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbmAgaXMgdGhlIGZpbmFsIHBpZWNlIG9mIHRoZSBwdXp6bGUuCgpGaW5hbGx5LCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmRgIGlzIGJlaW5nIGFsbG9jYXRlZC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBpdCBpcyBiZWluZyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2NgLiBJJiMzOTtsbCB3YW50IHRvIGNoZWNrIHRoYXQgdGhpcyBhbGxvY2F0aW9uIGlzIGhhbmRsZWQgY29ycmVjdGx5IGJ5IGBkYW1vbl9zeXNmc19rZGFtb25kX2FsbG9jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fc3lzZnNfa2RhbW9uZF9hbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYz0xNzg3PXN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kIHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTE3OTQtXG5tbS9kYW1vbi9zeXNmcy5jOjE3OTU6c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICpkYW1vbl9zeXNmc19rZGFtb25kX2FsbG9jKHZvaWQpXG5tbS9kYW1vbi9zeXNmcy5jLTE3OTYte1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjU0Nz1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2tkYW1vbmRzX2FkZF9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kcyAqa2RhbW9uZHMsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yNTY2LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfa2RhbW9uZHM7IGkmIzQzOyYjNDM7KSB7XG5tbS9kYW1vbi9zeXNmcy5jOjI1Njc6XHRcdGtkYW1vbmQgPSBkYW1vbl9zeXNmc19rZGFtb25kX2FsbG9jKCk7XG5tbS9kYW1vbi9zeXNmcy5jLTI1NjgtXHRcdGlmICgha2RhbW9uZCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Mzg2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgZGFtb25fc3lzZnNfa2RhbW9uZF9hbGxvY2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgYGRhbW9uX3N5c2ZzX2tkYW1vbmRfYWxsb2NgIGlzIGltcGxlbWVudGVkLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiwgYW5kIGEgZ29vZCBncmFzcCBvZiBpdHMgc3BlY2lmaWNzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgREFNT04gKERhdGEgQWNjZXNzIE1PTml0b3IpIHN5c3RlbSBhbmQgaXRzIGludGVyYWN0aW9ucyB3aXRoIHRoZSBzeXNmcyBpbnRlcmZhY2UuIEkgbmVlZCB0byB3YWxrIHRocm91Z2ggdGhlIGNvZGUgYW5kIHF1aWNrbHkgcmVjYWxsIHRoZSBhbGxvY2F0aW9uIGxvZ2ljLiBJIHNob3VsZCBmb2N1cyBvbiBob3cgaXQgaGFuZGxlcyBtZW1vcnksIHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQgdXNlcywgcG90ZW50aWFsIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMsIGFuZCB0aGUgb3ZlcmFsbCBlZmZpY2llbmN5IG9mIGl0cyBhbGxvY2F0aW9uIHNjaGVtZS4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IGdvdGNoYXMgaW4gdGhpcyBhbGxvY2F0aW9uIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3OTU6XHRzdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmRhbW9uX3N5c2ZzX2tkYW1vbmRfYWxsb2Modm9pZClcbjE3OTY6XHR7XG4xNzk3Olx0XHRyZXR1cm4ga3phbGxvY19vYmooc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQpO1xuMTc5ODpcdH1cbjE3OTk6XHRcbjE4MDA6XHRzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2tkYW1vbmRfYWRkX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXG4xODAxOlx0e1xuMTgwMjpcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHRzICpjb250ZXh0cztcbjE4MDM6XHRcdGludCBlcnI7XG4xODA0Olx0XG4xODA1Olx0XHRjb250ZXh0cyA9IGRhbW9uX3N5c2ZzX2NvbnRleHRzX2FsbG9jKCk7XG4xODA2Olx0XHRpZiAoIWNvbnRleHRzKVxuMTgwNzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjE4MDg6XHRcbjE4MDk6XHRcdGVyciA9IGtvYmplY3RfaW5pdF9hbmRfYWRkKFx1MDAyNmNvbnRleHRzLVx1MDAzZWtvYmosXG4xODEwOlx0XHRcdFx0XHUwMDI2ZGFtb25fc3lzZnNfY29udGV4dHNfa3R5cGUsIFx1MDAyNmtkYW1vbmQtXHUwMDNla29iaixcbjE4MTE6XHRcdFx0XHRcJiMzNDtjb250ZXh0c1wmIzM0Oyk7XG4xODEyOlx0XHRpZiAoZXJyKSB7XG4xODEzOlx0XHRcdGtvYmplY3RfcHV0KFx1MDAyNmNvbnRleHRzLVx1MDAzZWtvYmopO1xuMTgxNDpcdFx0XHRyZXR1cm4gZXJyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTI2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFNT04gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgREFNT04gcGF0Y2gsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyB1c2luZyBga3phbGxvY19vYmpgLCB3aGljaCBzdHJvbmdseSBzdWdnZXN0cyB0aGUgbWVtb3J5IGlzIGJlaW5nIHplcm9lZCBvdXQuIFRoYXQmIzM5O3MgZ29vZCB0byBzZWUuIFRoZSBzZWNvbmQgYXJlYSBvZiBjb25jZXJuIEkgaGF2ZSBpcyB0aGUgY2hhbmdlIGluIGBtbS9kYW1vbi9jb3JlLmNgLCBzcGVjaWZpY2FsbHkgaG93IGBsYXN0X3BzaV90b3RhbGAgaXMgaW5pdGlhbGl6ZWQuIFdhaXQsIG5vdyB0aGF0IEkgdGhpbmsgYWJvdXQgaXQsIGBsYXN0X3BzaV90b3RhbGAgZ2V0cyBpbml0aWFsaXplZCBpbiBgZGFtb3NfaW5pdF9xdW90YV9nb2FsX2xhc3RfcHNpYCB3aGVuIGBrZGFtb25kX2luaXRfY3R4YCBpcyBjYWxsZWQuCgpUaGUga2V5IHF1ZXN0aW9uIGluIG15IG1pbmQgaXMgYWx3YXlzOiBJcyB0aGVyZSBhIHBvdGVudGlhbCBmb3IgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBpbmZvcm1hdGlvbiBsZWFrIGhlcmU/IExldCYjMzk7cyBkaWcgZGVlcGVyLiBUaGUgY2hhbmdlcyBhcHBlYXIgdG8gYmUgbG9naWMgZml4ZXMuIFNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZToKCjEuICBgbGFzdF9wc2lfdG90YWxgIHdhc24mIzM5O3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQgd2hlbiB0aGUgY29udGV4dCB3YXMgc3RhcnRlZCwgb3Igd2FzbiYjMzk7dCB1cGRhdGVkIGNvcnJlY3RseSBpbiBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb25gLgoyLiAgYGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXNgIHdhcyBhIGdsb2JhbCB2YXJpYWJsZS4gVGhpcyBtZWFucyBtdWx0aXBsZSBrZGFtb25kcyBjb3VsZCBzdGVwIG9uIGVhY2ggb3RoZXIsIGNhdXNpbmcgc2VyaW91cyBidWdzLiBTbywgdGhleSBtb3ZlZCBpdCB0byBgc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmRgLgoKR2l2ZW4gdGhhdCwgbXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBuZWl0aGVyIG9mIHRoZXNlIGNoYW5nZXMgZGlyZWN0bHkgaW50cm9kdWNlIGEgcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2Vyc3BhY2UsIG9yIHVzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGEgd2F5IHRoYXQgS01TQU4gd291bGQgdW5pcXVlbHkgZmxhZy4gVGhlIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIGBkYW1vbl9zeXNmc19rZGFtb25kYCBpcyB6ZXJvZWQsIGFuZCB0aGUgYGxhc3RfcHNpX3RvdGFsYCBpcyBhIGZpZWxkIGluIGBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbGAsIHdoaWNoIGlzIGxpa2VseSB6ZXJvLWluaXRpYWxpemVkIHVwb24gYWxsb2NhdGlvbi4gSG93ZXZlciwgYmV0dGVyIHRvIGJlIGNlcnRhaW4gdGhhbiBzb3JyeS4gTGV0JiMzOTtzIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYGRhbW9zX3F1b3RhX2dvYWxgIGFsbG9jYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA0OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3NfcXVvdGFfZ29hbC4qYWxsb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjczCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIE5ldyBRdW90YSBHb2FsKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgIHZhcmlhYmxlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgY29uc2lkZXIgaXRzIGNvbnRleHQgd2l0aGluIHRoZSBicm9hZGVyIGBkYW1vc2AgZnJhbWV3b3JrLiBJcyB0aGlzIGEgbmV3IGdvYWwgYmVpbmcgaW50cm9kdWNlZD8gQSByZXZpc2lvbiBvZiBhbiBleGlzdGluZyBvbmU/IEFuZCB3aGF0JiMzOTtzIHRoZSBleHBlY3RlZCBpbXBhY3Q/IEkmIzM5O20gYWxyZWFkeSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgZG93bnN0cmVhbSBkZXBlbmRlbmNpZXM7IHdoaWNoIG1vZGVscywgcmVwb3J0cywgb3IgZGFzaGJvYXJkcyByZWx5IG9uIHRoaXMgcGFydGljdWxhciBxdW90YT8KCkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc3RydWN0dXJlLiBJcyB0aGlzIGEgc2NhbGFyIHZhbHVlLCBhIGRpc3RyaWJ1dGlvbiwgb3Igc29tZXRoaW5nIG1vcmUgY29tcGxleD8gVGhlIGZvcm1hdCB3aWxsIGRpY3RhdGUgaG93IEkmIzM5O2xsIHZhbGlkYXRlIGl0IGFuZCBpZGVudGlmeSBwb3RlbnRpYWwgaXNzdWVzLiBBcmUgdGhlcmUgYW55IGFzc29jaWF0ZWQgbWV0YWRhdGEgdGFncyBvciBkb2N1bWVudGF0aW9uIEkgc2hvdWxkIGJlIHJldmlld2luZz8gQ2hlY2tpbmcgdGhlIHNjaGVtYSBvciBkYXRhIGRpY3Rpb25hcnkgd291bGQgYmUgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIHRvIHVuZGVyc3RhbmQgdGhlIGlucHV0IHR5cGVzLCB2YWxpZGl0eSBjb25zdHJhaW50cywgYW5kIHRoZSBhY2NlcHRhYmxlIHJhbmdlLgoKQXNzdW1pbmcgdGhpcyBpcyBuZXcgb3IgbW9kaWZpZWQsIEkgbmVlZCB0byBldmFsdWF0ZSB0aGUgaW1wbGljYXRpb25zIGZvciBmb3JlY2FzdGluZy4gRG9lcyB0aGlzIGNoYW5nZSBuZWNlc3NpdGF0ZSByZS1jYWxpYnJhdGlvbiBvZiBhbnkgcHJlZGljdGl2ZSBtb2RlbHM/IFdoYXQgYWJvdXQgaGlzdG9yaWNhbCBjb21wYXJpc29ucz8gV2lsbCB0aGlzIGNoYW5nZSBhZmZlY3Qgb3VyIGFiaWxpdHkgdG8gYWNjdXJhdGVseSBtZWFzdXJlIHBlcmZvcm1hbmNlIGFnYWluc3QgdGhlIG9yaWdpbmFsIHRhcmdldHM/IEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBjaGFuZ2UgYWZmZWN0cyB0aGUgb3ZlcmFsbCBwZXJmb3JtYW5jZSBtZXRyaWNzIGFuZCB3aGV0aGVyIG9yIG5vdCB0aGVyZSBhcmUgYW55IGltcGFjdHMgb24gdGhlIHJlcG9ydGluZy4KCkZyb20gdGhlcmUsIEkgd2FudCB0byBpbW1lZGlhdGVseSB0aGluayBhYm91dCB0aGUgaW1wYWN0IG9mIHRoaXMgcGFydGljdWxhciBnb2FsIG9uIGFueSBleGlzdGluZyBhbGVydHMgb3IgbW9uaXRvcmluZyBzeXN0ZW1zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlc2Ugc3lzdGVtcyByZWZsZWN0IHRoZSBuZXcgdGhyZXNob2xkLCBhbmQgaWYgbm90LCB3aGF0IHR5cGUgb2YgcmVtZWRpYXRpb24gaXMgcmVxdWlyZWQ/ClVsdGltYXRlbHksIG15IGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgY2hhbmdlIGlzIHJlYXNvbmFibGUsIHRob3JvdWdobHkgdmV0dGVkLCBhbmQgd2lsbCBpbnRlZ3JhdGUgc21vb3RobHkgaW50byB0aGUgZXhpc3Rpbmcgb3BlcmF0aW9uYWwgZW52aXJvbm1lbnQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBhbGwgZ29lcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vc19uZXdfcXVvdGFfZ29hbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9NjIxPXZvaWQgZGFtb3NfZGVzdHJveV9maWx0ZXIoc3RydWN0IGRhbW9zX2ZpbHRlciAqZilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNjI2LVxubW0vZGFtb24vY29yZS5jOjYyNzpzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZGFtb3NfbmV3X3F1b3RhX2dvYWwoXG5tbS9kYW1vbi9jb3JlLmMtNjI4LVx0XHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYyxcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTE2ND1pbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTE3OC1cdFx0XHRjb250aW51ZTtcbm1tL2RhbW9uL2NvcmUuYzoxMTc5Olx0XHRuZXdfZ29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKFxubW0vZGFtb24vY29yZS5jLTExODAtXHRcdFx0XHRzcmNfZ29hbC1cdTAwM2VtZXRyaWMsIHNyY19nb2FsLVx1MDAzZXRhcmdldF92YWx1ZSk7XG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz0yMjk9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hZGRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zICpob3Rfc2NoZW1lLFxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMjM3LVx0XHRyZXR1cm4gLUVJTlZBTDtcbm1tL2RhbW9uL2xydV9zb3J0LmM6MjM4Olx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX0FDVElWRV9NRU1fQlAsIGFjdGl2ZV9tZW1fYnApO1xubW0vZGFtb24vbHJ1X3NvcnQuYy0yMzktXHRpZiAoIWdvYWwpXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0yNDItXHQvKiBhaW0gMC4yICUgZ29hbCBjb25mbGljdCwgdG8ga2VlcCBsaXR0bGUgcGluZyBwb25nICovXG5tbS9kYW1vbi9scnVfc29ydC5jOjI0MzpcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9JTkFDVElWRV9NRU1fQlAsXG5tbS9kYW1vbi9scnVfc29ydC5jLTI0NC1cdFx0XHQxMDAwMCAtIGFjdGl2ZV9tZW1fYnAgJiM0MzsgMik7XG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTE5ND1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy0yMzUtXHRpZiAocXVvdGFfbWVtX3ByZXNzdXJlX3VzKSB7XG5tbS9kYW1vbi9yZWNsYWltLmM6MjM2Olx0XHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLFxubW0vZGFtb24vcmVjbGFpbS5jLTIzNy1cdFx0XHRcdHF1b3RhX21lbV9wcmVzc3VyZV91cyk7XG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTI0My1cdGlmIChxdW90YV9hdXRvdHVuZV9mZWVkYmFjaykge1xubW0vZGFtb24vcmVjbGFpbS5jOjI0NDpcdFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX1VTRVJfSU5QVVQsIDEwMDAwKTtcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNDUtXHRcdGlmICghZ29hbClcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjg0Nz1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX2FkZF9xdW90YV9zY29yZShcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg2MC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODYxOlx0XHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoc3lzZnNfZ29hbC1cdTAwM2VtZXRyaWMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg2Mi1cdFx0XHRcdHN5c2ZzX2dvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlKTtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9ODM0PXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxzX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg1Mi1cdFx0ICovXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODUzOlx0XHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoZHN0X2dvYWxzW2ldLm1ldHJpYyxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NTQtXHRcdFx0XHRkc3RfZ29hbHNbaV0udGFyZ2V0X3ZhbHVlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzAxNAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBOZXcgUXVvdGEgR29hbCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGRhbW9zX25ld19xdW90YV9nb2FsYCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIGl0cyBvdmVyYWxsIGxvZ2ljIGFuZCBtYWtlIHN1cmUgaXQgYWxpZ25zIHdpdGggdGhlIHVwZGF0ZWQgcmVxdWlyZW1lbnRzLiBJIHdhbnQgdG8gY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgZWRnZSBjYXNlcyB0aGF0IG1pZ2h0IGhhdmUgYmVlbiBtaXNzZWQgaW4gdGhlIGluaXRpYWwgZGVzaWduLiBUaGluZ3MgbGlrZSBob3cgaXQgaGFuZGxlcyBzY2VuYXJpb3Mgd2l0aCB6ZXJvIHF1b3RhLCBxdW90YXMgdGhhdCBhcmUgdXBkYXRlZCBtaWQtY3ljbGUsIGFuZCBuZWdhdGl2ZSB2YWx1ZXMsIGlmIHRob3NlIGFyZSBldmVuIHBlcm1pdHRlZC4gSSBuZWVkIHRvIGV4YW1pbmUgdGhlIHNwZWNpZmljIGNhbGN1bGF0aW9ucywgZW5zdXJpbmcgdGhleSYjMzk7cmUgY29tcHV0YXRpb25hbGx5IGVmZmljaWVudCBhbmQgY29ycmVjdGx5IGFjY291bnQgZm9yIGFueSBpbmhlcml0ZWQgb3Igc2hhcmVkIHJlc291cmNlcy4gQXJlIHdlIGFjY3VyYXRlbHkgcmVmbGVjdGluZyB0aGUgbmV3IGdvYWwgd2l0aGluIHRoZSBxdW90YSBzeXN0ZW0mIzM5O3MgZXhpc3RpbmcgZnJhbWV3b3JrPyBJIGFsc28gd2FudCB0byB2ZXJpZnkgaXQgaW50ZWdyYXRlcyBzZWFtbGVzc2x5IHdpdGggYW55IG1vbml0b3JpbmcgYW5kIGFsZXJ0aW5nIHN5c3RlbXMgd2UgaGF2ZSBpbiBwbGFjZS4gRmluYWxseSwgSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgYW55IGRhdGEgZGVwZW5kZW5jaWVzIGFyZSBwcm9wZXJseSBoYW5kbGVkLiBUaGUgbGFzdCB0aGluZyBJIHdhbnQgaXMgYSBjYXNjYWRpbmcgZXJyb3IgZHVlIHRvIGEgc2ltcGxlIG92ZXJzaWdodC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBjb2RlIHJldmlldyBhbmQgdHJhY2UgdGhyb3VnaCBhIGZldyByZXByZXNlbnRhdGl2ZSB1c2UgY2FzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA0OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjI3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2Mjc6XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZGFtb3NfbmV3X3F1b3RhX2dvYWwoXG4gNjI4Olx0XHRcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljLFxuIDYyOTpcdFx0XHR1bnNpZ25lZCBsb25nIHRhcmdldF92YWx1ZSlcbiA2MzA6XHR7XG4gNjMxOlx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcbiA2MzI6XHRcbiA2MzM6XHRcdGdvYWwgPSBrbWFsbG9jX29iaigqZ29hbCk7XG4gNjM0Olx0XHRpZiAoIWdvYWwpXG4gNjM1Olx0XHRcdHJldHVybiBOVUxMO1xuIDYzNjpcdFx0Z29hbC1cdTAwM2VtZXRyaWMgPSBtZXRyaWM7XG4gNjM3Olx0XHRnb2FsLVx1MDAzZXRhcmdldF92YWx1ZSA9IHRhcmdldF92YWx1ZTtcbiA2Mzg6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmdvYWwtXHUwMDNlbGlzdCk7XG4gNjM5Olx0XHRyZXR1cm4gZ29hbDtcbiA2NDA6XHR9XG4gNjQxOlx0XG4gNjQyOlx0dm9pZCBkYW1vc19hZGRfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnEsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnKVxuIDY0MzpcdHtcbiA2NDQ6XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2Zy1cdTAwM2VsaXN0LCBcdTAwMjZxLVx1MDAzZWdvYWxzKTtcbiA2NDU6XHR9XG4gNjQ2Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA0OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NzAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYSBOb24tWmVyb2luZyBBbGxvY2F0aW9uKioKCk9rYXksIEkgc2VlIGBrbWFsbG9jX29iamAgYmVpbmcgdXNlZCBmb3IgdGhpcyBhbGxvY2F0aW9uLiBIbW0sIGludGVyZXN0aW5nLiBVbmxpa2Ugc29tZSBvZiB0aGUgb3RoZXIgYWxsb2NhdGlvbiBtZXRob2RzIEkmIzM5O20gZmFtaWxpYXIgd2l0aCwgdGhpcyBkb2VzbiYjMzk7dCBndWFyYW50ZWUgemVyb2VkIG1lbW9yeSwgd2hpY2ggY291bGQgbGVhZCB0byBzb21lIGludGVyZXN0aW5nIGFuZCBwb3RlbnRpYWxseSBuYXN0eSBidWdzIGlmIHdlIGFyZW4mIzM5O3QgY2FyZWZ1bCBhYm91dCBpbml0aWFsaXphdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGhhbmRsZWQgY29ycmVjdGx5IGRvd25zdHJlYW0uIFdhaXQgYSBtaW51dGUuLi4gYGttYWxsb2Nfb2JqYD8gSSBkb24mIzM5O3QgcmVjYWxsIHNlZWluZyB0aGF0IG1hY3JvIGJlZm9yZS4gSXQmIzM5O3Mgbm90IGltbWVkaWF0ZWx5IGZhbWlsaWFyIHRvIG1lLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCB0aGF0IG1hY3JvIGFjdHVhbGx5ICpkb2VzKi4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBga21hbGxvY19vYmpgIHRvIGNvbmZpcm0gd2hldGhlciBteSBhc3N1bXB0aW9uIGFib3V0IHRoZSBsYWNrIG9mIHplcm9pbmcgaXMgY29ycmVjdCwgYW5kIHdoYXQga2luZCBvZiBndWFyYW50ZWVzLCBpZiBhbnksIGl0IHByb3ZpZGVzIGFib3V0IG1lbW9yeSBhbGxvY2F0aW9uIGJlaGF2aW9yLiBHb3R0YSBmaW5kIHRoZSBoZWFkZXIgd2hlcmUgaXQmIzM5O3MgZGVmaW5lZC4gTGV0JiMzOTtzIGxvb2sgdGhhdCB1cCBmaXJzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a21hbGxvY19vYmomIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTExND1zdHJ1Y3QgZGFtb25fZmlsdGVyICpkYW1vbl9uZXdfZmlsdGVyKGVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZSxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTE4LVxubW0vZGFtb24vY29yZS5jOjExOTpcdGZpbHRlciA9IGttYWxsb2Nfb2JqKCpmaWx0ZXIpO1xubW0vZGFtb24vY29yZS5jLTEyMC1cdGlmICghZmlsdGVyKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNjI9c3RydWN0IGRhbW9uX3Byb2JlICpkYW1vbl9uZXdfcHJvYmUodm9pZClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTY1LVxubW0vZGFtb24vY29yZS5jOjE2NjpcdHAgPSBrbWFsbG9jX29iaigqcCk7XG5tbS9kYW1vbi9jb3JlLmMtMTY3LVx0aWYgKCFwKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz01Njk9c3RydWN0IGRhbW9zX2ZpbHRlciAqZGFtb3NfbmV3X2ZpbHRlcihlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHR5cGUsXG4tLVxubW0vZGFtb24vY29yZS5jLTU3My1cbm1tL2RhbW9uL2NvcmUuYzo1NzQ6XHRmaWx0ZXIgPSBrbWFsbG9jX29iaigqZmlsdGVyKTtcbm1tL2RhbW9uL2NvcmUuYy01NzUtXHRpZiAoIWZpbHRlcilcbi0tXG5tbS9kYW1vbi9jb3JlLmM9NjI3PXN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19uZXdfcXVvdGFfZ29hbChcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNjMyLVxubW0vZGFtb24vY29yZS5jOjYzMzpcdGdvYWwgPSBrbWFsbG9jX29iaigqZ29hbCk7XG5tbS9kYW1vbi9jb3JlLmMtNjM0LVx0aWYgKCFnb2FsKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz02ODI9c3RydWN0IGRhbW9zICpkYW1vbl9uZXdfc2NoZW1lKHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiAqcGF0dGVybixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNjkwLVxubW0vZGFtb24vY29yZS5jOjY5MTpcdHNjaGVtZSA9IGttYWxsb2Nfb2JqKCpzY2hlbWUpO1xubW0vZGFtb24vY29yZS5jLTY5Mi1cdGlmICghc2NoZW1lKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz03NzY9c3RydWN0IGRhbW9uX3RhcmdldCAqZGFtb25fbmV3X3RhcmdldCh2b2lkKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy03NzktXG5tbS9kYW1vbi9jb3JlLmM6NzgwOlx0dCA9IGttYWxsb2Nfb2JqKCp0KTtcbm1tL2RhbW9uL2NvcmUuYy03ODEtXHRpZiAoIXQpXG4tLVxubW0vZGFtb24vc3RhdC5jPTg0PXN0YXRpYyBpbnQgZGFtb25fc3RhdF9zb3J0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX2N0eCAqYyxcbi0tXG5tbS9kYW1vbi9zdGF0LmMtOTUtXHRcdC8qIHRoZXJlIGlzIG9ubHkgb25lIHRhcmdldCAqL1xubW0vZGFtb24vc3RhdC5jOjk2Olx0XHRyZWdpb25fcG9pbnRlcnMgPSBrbWFsbG9jX29ianMoKnJlZ2lvbl9wb2ludGVycyxcbm1tL2RhbW9uL3N0YXQuYy05Ny1cdFx0XHRcdFx0ICAgICAgIGRhbW9uX25yX3JlZ2lvbnModCkpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jPTE2PXN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqZGFtb25fc3lzZnNfdWxfcmFuZ2VfYWxsb2MoXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTkte1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MjA6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UgKnJhbmdlID0ga21hbGxvY19vYmooKnJhbmdlKTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTIxLVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz05MD1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX3Byb2Jlc19hZGRfZGlycyhzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmVzICpwcm9iZXMsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEwMi1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMDM6XHRwcm9iZXNfYXJyID0ga21hbGxvY19vYmpzKCpwcm9iZXNfYXJyLCBpKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMDQtXHRpZiAoIXByb2Jlc19hcnIpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE2MD1zdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fYWxsb2MoXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2Mi17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTYzOlx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnN5c2ZzX3JlZ2lvbiA9IGttYWxsb2Nfb2JqKCpzeXNmc19yZWdpb24pO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2NC1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MzA1PWRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX2FsbG9jKHZvaWQpXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA2LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMDc6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMgKnJlZ2lvbnMgPSBrbWFsbG9jX29iaigqcmVnaW9ucyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA4LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz05MjU9c3RhdGljIGludCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyc19hZGRfZGlycyhcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtOTM0LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjkzNTpcdGZpbHRlcnNfYXJyID0ga21hbGxvY19vYmpzKCpmaWx0ZXJzX2FyciwgbnJfZmlsdGVycyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy05MzYtXHRcdFx0XHQgICBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTAyOT1zdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3dhdGVybWFya3MgKmRhbW9uX3N5c2ZzX3dhdGVybWFya3NfYWxsb2MoXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEwMzIte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEwMzM6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfd2F0ZXJtYXJrcyAqd2F0ZXJtYXJrcyA9IGttYWxsb2Nfb2JqKCp3YXRlcm1hcmtzKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMDM0LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNDc2PXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfYWRkX2RpcnMoXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0ODUtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ4NjpcdGdvYWxzX2FyciA9IGttYWxsb2Nfb2JqcygqZ29hbHNfYXJyLCBucl9nb2Fscyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDg3LVx0XHRcdFx0IEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNTc3PXN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfd2VpZ2h0cyAqZGFtb25fc3lzZnNfd2VpZ2h0c19hbGxvYyh1bnNpZ25lZCBpbnQgc3osXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1Nzkte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1ODA6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfd2VpZ2h0cyAqd2VpZ2h0cyA9IGttYWxsb2Nfb2JqKCp3ZWlnaHRzKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTgxLVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xOTYzPXN0cnVjdCBkYW1vbl9zeXNmc19hY2Nlc3NfcGF0dGVybiAqZGFtb25fc3lzZnNfYWNjZXNzX3BhdHRlcm5fYWxsb2Modm9pZClcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xOTY0LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTY1Olx0c3RydWN0IGRhbW9uX3N5c2ZzX2FjY2Vzc19wYXR0ZXJuICphY2Nlc3NfcGF0dGVybiA9IGttYWxsb2Nfb2JqKCphY2Nlc3NfcGF0dGVybik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTk2Ni1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjE1Nj1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX2Rlc3RzX2FkZF9kaXJzKFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMTY1LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIxNjY6XHRkZXN0c19hcnIgPSBrbWFsbG9jX29ianMoKmRlc3RzX2FyciwgbnJfZGVzdHMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjE2Ny1cdFx0XHRcdCBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjMxOD1zdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZSAqZGFtb25fc3lzZnNfc2NoZW1lX2FsbG9jKFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMzIwLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMzIxOlx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZSAqc2NoZW1lID0ga21hbGxvY19vYmooKnNjaGVtZSk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjMyMi1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjcwMD1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NjaGVtZXNfYWRkX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnNjaGVtZXMsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI3MDktXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjcxMDpcdHNjaGVtZXNfYXJyID0ga21hbGxvY19vYmpzKCpzY2hlbWVzX2FyciwgbnJfc2NoZW1lcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNzExLVx0XHRcdFx0ICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTik7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI5NDk9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfbWlncmF0ZV9kZXN0KHN0cnVjdCBkYW1vcyAqc2NoZW1lLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTU0LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI5NTU6XHRkZXN0cy1cdTAwM2Vub2RlX2lkX2FyciA9IGttYWxsb2Nfb2JqcygqZGVzdHMtXHUwMDNlbm9kZV9pZF9hcnIsIHN5c2ZzX2Rlc3RzLVx1MDAzZW5yKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTU2LVx0aWYgKCFkZXN0cy1cdTAwM2Vub2RlX2lkX2Fycilcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTU3LVx0XHRyZXR1cm4gLUVOT01FTTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyOTU4Olx0ZGVzdHMtXHUwMDNld2VpZ2h0X2FyciA9IGttYWxsb2Nfb2JqcygqZGVzdHMtXHUwMDNld2VpZ2h0X2Fyciwgc3lzZnNfZGVzdHMtXHUwMDNlbnIpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5NTktXHRpZiAoIWRlc3RzLVx1MDAzZXdlaWdodF9hcnIpXG4tLVxubW0vZGFtb24vc3lzZnMuYz0xMTc9c3RhdGljIGludCBkYW1vbl9zeXNmc19yZWdpb25zX2FkZF9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19yZWdpb25zICpyZWdpb25zLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMTI2LVxubW0vZGFtb24vc3lzZnMuYzoxMjc6XHRyZWdpb25zX2FyciA9IGttYWxsb2Nfb2JqcygqcmVnaW9uc19hcnIsIG5yX3JlZ2lvbnMsXG5tbS9kYW1vbi9zeXNmcy5jLTEyOC1cdFx0XHRcdCAgIEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MzQ0PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdGFyZ2V0c19hZGRfZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfdGFyZ2V0cyAqdGFyZ2V0cyxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTM1My1cbm1tL2RhbW9uL3N5c2ZzLmM6MzU0Olx0dGFyZ2V0c19hcnIgPSBrbWFsbG9jX29ianMoKnRhcmdldHNfYXJyLCBucl90YXJnZXRzLFxubW0vZGFtb24vc3lzZnMuYy0zNTUtXHRcdFx0XHQgICBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTQ1ND1zdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX2ludGVydmFsc19nb2FsICpkYW1vbl9zeXNmc19pbnRlcnZhbHNfZ29hbF9hbGxvYyhcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTQ1Ny17XG5tbS9kYW1vbi9zeXNmcy5jOjQ1ODpcdHN0cnVjdCBkYW1vbl9zeXNmc19pbnRlcnZhbHNfZ29hbCAqZ29hbCA9IGttYWxsb2Nfb2JqKCpnb2FsKTtcbm1tL2RhbW9uL3N5c2ZzLmMtNDU5LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9NjExPXN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfaW50ZXJ2YWxzICpkYW1vbl9zeXNmc19pbnRlcnZhbHNfYWxsb2MoXG4tLVxubW0vZGFtb24vc3lzZnMuYy02MTQte1xubW0vZGFtb24vc3lzZnMuYzo2MTU6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfaW50ZXJ2YWxzICppbnRlcnZhbHMgPSBrbWFsbG9jX29iaigqaW50ZXJ2YWxzKTtcbm1tL2RhbW9uL3N5c2ZzLmMtNjE2LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9ODg3PXN0YXRpYyBzc2l6ZV90IHBhdGhfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMuYy04OTEtXHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX2ZpbHRlciwga29iaik7XG5tbS9kYW1vbi9zeXNmcy5jOjg5MjpcdGNoYXIgKnBhdGggPSBrbWFsbG9jX29ianMoKnBhdGgsIHNpemVfYWRkKGNvdW50LCAxKSk7XG5tbS9kYW1vbi9zeXNmcy5jLTg5My1cbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTk3Mj1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2ZpbHRlcnNfYWRkX2RpcnMoXG4tLVxubW0vZGFtb24vc3lzZnMuYy05ODEtXG5tbS9kYW1vbi9zeXNmcy5jOjk4MjpcdGZpbHRlcnNfYXJyID0ga21hbGxvY19vYmpzKCpmaWx0ZXJzX2FyciwgbnJfZmlsdGVycyxcbm1tL2RhbW9uL3N5c2ZzLmMtOTgzLVx0XHRcdFx0ICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTik7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0xMTc0PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfcHJvYmVzX2FkZF9kaXJzKFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMTE4My1cbm1tL2RhbW9uL3N5c2ZzLmM6MTE4NDpcdHByb2Jlc19hcnIgPSBrbWFsbG9jX29ianMoKnByb2Jlc19hcnIsIG5yX3Byb2Jlcyxcbm1tL2RhbW9uL3N5c2ZzLmMtMTE4NS1cdFx0XHRcdCAgIEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MTI4Mz1zdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX2F0dHJzICpkYW1vbl9zeXNmc19hdHRyc19hbGxvYyh2b2lkKVxubW0vZGFtb24vc3lzZnMuYy0xMjg0LXtcbm1tL2RhbW9uL3N5c2ZzLmM6MTI4NTpcdHN0cnVjdCBkYW1vbl9zeXNmc19hdHRycyAqYXR0cnMgPSBrbWFsbG9jX29iaigqYXR0cnMpO1xubW0vZGFtb24vc3lzZnMuYy0xMjg2LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MTQxMj1zdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHQgKmRhbW9uX3N5c2ZzX2NvbnRleHRfYWxsb2MoXG4tLVxubW0vZGFtb24vc3lzZnMuYy0xNDE0LXtcbm1tL2RhbW9uL3N5c2ZzLmM6MTQxNTpcdHN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0ICpjb250ZXh0ID0ga21hbGxvY19vYmooKmNvbnRleHQpO1xubW0vZGFtb24vc3lzZnMuYy0xNDE2LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MTY4ND1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2NvbnRleHRzX2FkZF9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0cyAqY29udGV4dHMsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0xNjkzLVxubW0vZGFtb24vc3lzZnMuYzoxNjk0Olx0Y29udGV4dHNfYXJyID0ga21hbGxvY19vYmpzKCpjb250ZXh0c19hcnIsIG5yX2NvbnRleHRzLFxubW0vZGFtb24vc3lzZnMuYy0xNjk1LVx0XHRcdFx0ICAgIEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjAwMT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMDA0LXtcbm1tL2RhbW9uL3N5c2ZzLmM6MjAwNTpcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMgPSBrbWFsbG9jX29ianMoKnJhbmdlcyxcbm1tL2RhbW9uL3N5c2ZzLmMtMjAwNi1cdFx0XHRcdFx0XHQgICAgICAgc3lzZnNfcmVnaW9ucy1cdTAwM2Vucixcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIyNDI9c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjI1Ny1cbm1tL2RhbW9uL3N5c2ZzLmM6MjI1ODpcdHJlcGVhdF9jYWxsX2NvbnRyb2wgPSBrbWFsbG9jX29iaigqcmVwZWF0X2NhbGxfY29udHJvbCk7XG5tbS9kYW1vbi9zeXNmcy5jLTIyNTktXHRpZiAoIXJlcGVhdF9jYWxsX2NvbnRyb2wpXG4tLVxubW0vZGFtb24vc3lzZnMuYz0yNTQ3PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfa2RhbW9uZHNfYWRkX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmRzICprZGFtb25kcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTI1NTktXG5tbS9kYW1vbi9zeXNmcy5jOjI1NjA6XHRrZGFtb25kc19hcnIgPSBrbWFsbG9jX29ianMoKmtkYW1vbmRzX2FyciwgbnJfa2RhbW9uZHMsXG5tbS9kYW1vbi9zeXNmcy5jLTI1NjEtXHRcdFx0XHQgICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTik7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTk2ND1zdGF0aWMgaW50IGRhbW9zX3Rlc3RfaGVscF9kZXN0c19zZXR1cChzdHJ1Y3QgZGFtb3NfbWlncmF0ZV9kZXN0cyAqZGVzdHMsXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTk2OS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo5NzA6XHRkZXN0cy1cdTAwM2Vub2RlX2lkX2FyciA9IGttYWxsb2Nfb2JqcygqZGVzdHMtXHUwMDNlbm9kZV9pZF9hcnIsIG5yX2Rlc3RzKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05NzEtXHRpZiAoIWRlc3RzLVx1MDAzZW5vZGVfaWRfYXJyKVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTk3Mi1cdFx0cmV0dXJuIC1FTk9NRU07XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6OTczOlx0ZGVzdHMtXHUwMDNld2VpZ2h0X2FyciA9IGttYWxsb2Nfb2JqcygqZGVzdHMtXHUwMDNld2VpZ2h0X2FyciwgbnJfZGVzdHMpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTk3NC1cdGlmICghZGVzdHMtXHUwMDNld2VpZ2h0X2Fycikge1xuLS1cbm1tL2RhbW9uL3Rlc3RzL3N5c2ZzLWt1bml0Lmg9Mzk9c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfdGVzdF9hZGRfdGFyZ2V0cyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvc3lzZnMta3VuaXQuaC00OC1cdHN5c2ZzX3RhcmdldHMtXHUwMDNlbnIgPSAxO1xubW0vZGFtb24vdGVzdHMvc3lzZnMta3VuaXQuaDo0OTpcdHN5c2ZzX3RhcmdldHMtXHUwMDNldGFyZ2V0c19hcnIgPSBrbWFsbG9jX29ianMoKnN5c2ZzX3RhcmdldHMtXHUwMDNldGFyZ2V0c19hcnIsXG5tbS9kYW1vbi90ZXN0cy9zeXNmcy1rdW5pdC5oLTUwLVx0XHRcdFx0XHRcdCAgMSk7XG4tLVxubW0vZGFtb24vdmFkZHIuYz03Mzg9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfdmFfbWlncmF0ZShzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0YXJnZXQsXG4tLVxubW0vZGFtb24vdmFkZHIuYy03NTctXHRwcml2LnNjaGVtZSA9IHM7XG5tbS9kYW1vbi92YWRkci5jOjc1ODpcdHByaXYubWlncmF0aW9uX2xpc3RzID0ga21hbGxvY19vYmpzKCpwcml2Lm1pZ3JhdGlvbl9saXN0cywgbnJfZGVzdHMpO1xubW0vZGFtb24vdmFkZHIuYy03NTktXHRpZiAoIXByaXYubWlncmF0aW9uX2xpc3RzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI1NgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgTWVtb3J5IEFsbG9jYXRpb24gTWFjcm9zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIEkgc2VlIGBrbWFsbG9jX29iamAuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgYSBtYWNybyDigJMgcHJvYmFibHkgZGVmaW5lZCB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgbWF5YmUgZXZlbiBpbiB0aGUgYG1tL2RhbW9uL2AgZGlyZWN0b3J5LiBCdXQgd2FpdCwgSSYjMzk7bSBqdXN0IHJlY2FsbGluZyB0aGF0IEkmIzM5O3ZlIHNlZW4gYGt6YWxsb2Nfb2JqYCBiZWluZyB1c2VkIGZvciB0aGUgYGRhbW9uX3N5c2ZzX2tkYW1vbmRfYWxsb2NgIGZ1bmN0aW9uLiBUaGF0IHRocm93cyBhIHNsaWdodCB3cmlua2xlIGluIHRoZSBhbmFseXNpcy4gSSBzaG91bGQgZG91YmxlIGNoZWNrIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCBga3phbGxvY19vYmpgLCBhbmQgc2VlIGhvdyB0aGUgdHdvIGFyZSByZWxhdGVkLCBvciBpZiB0aGV5IGFyZSByZWxhdGVkIGF0IGFsbC4gVGhhdCYjMzk7bGwgY2xlYXIgdGhpbmdzIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtremFsbG9jX29iaiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9ODMyPXN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld19jdHgodm9pZClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtODM1LVxubW0vZGFtb24vY29yZS5jOjgzNjpcdGN0eCA9IGt6YWxsb2Nfb2JqKCpjdHgpO1xubW0vZGFtb24vY29yZS5jLTgzNy1cdGlmICghY3R4KVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yMD1zdGF0aWMgc3RydWN0IGRhbW9zX3N5c2ZzX3Byb2JlICpkYW1vc19zeXNmc19wcm9iZV9hbGxvYyh1bnNpZ25lZCBjaGFyIGhpdHMpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIzLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI0Olx0cHJvYmUgPSBremFsbG9jX29iaigqcHJvYmUpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1LVx0aWYgKCFwcm9iZSlcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NzM9c3RhdGljIHN0cnVjdCBkYW1vc19zeXNmc19wcm9iZXMgKmRhbW9zX3N5c2ZzX3Byb2Jlc19hbGxvYyh2b2lkKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTc0LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3NTpcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmVzKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03Ni19XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTM3OD1zdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpkYW1vbl9zeXNmc19zdGF0c19hbGxvYyh2b2lkKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM3OS17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzgwOlx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzgxLX1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NTQxPXN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcl9hbGxvYyhcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTQ1LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjU0NjpcdGZpbHRlciA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NDctXHRpZiAoZmlsdGVyKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz05MDA9ZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcnNfYWxsb2MoZW51bSBkYW1vc19zeXNmc19maWx0ZXJfaGFuZGxlX2xheWVyIGxheWVyKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy05MDMtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6OTA0Olx0ZmlsdGVycyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVycyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtOTA1LVx0aWYgKGZpbHRlcnMpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEyMjQ9c3RhdGljIHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpkYW1vc19zeXNmc19xdW90YV9nb2FsX2FsbG9jKHZvaWQpXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTIyNS17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTIyNjpcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTIyNy19XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE0NTY9c3RhdGljIHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FscyAqZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfYWxsb2Modm9pZClcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDU3LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDU4Olx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2Fscyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ1OS19XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE2OTM9c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMgKmRhbW9uX3N5c2ZzX3F1b3Rhc19hbGxvYyh2b2lkKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2OTQte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE2OTU6XHRyZXR1cm4ga3phbGxvY19vYmooc3RydWN0IGRhbW9uX3N5c2ZzX3F1b3Rhcyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTY5Ni19XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIwNTY9c3RhdGljIHN0cnVjdCBkYW1vc19zeXNmc19kZXN0ICpkYW1vc19zeXNmc19kZXN0X2FsbG9jKHZvaWQpXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjA1Ny17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjA1ODpcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb3Nfc3lzZnNfZGVzdCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjA1OS19XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIxMzY9ZGFtb3Nfc3lzZnNfZGVzdHNfYWxsb2Modm9pZClcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMTM3LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMTM4Olx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vc19zeXNmc19kZXN0cyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjEzOS19XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI2ODA9c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKmRhbW9uX3N5c2ZzX3NjaGVtZXNfYWxsb2Modm9pZClcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNjgxLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNjgyOlx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNjgzLX1cbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIxPXN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfcmVnaW9uICpkYW1vbl9zeXNmc19yZWdpb25fYWxsb2Modm9pZClcbm1tL2RhbW9uL3N5c2ZzLmMtMjIte1xubW0vZGFtb24vc3lzZnMuYzoyMzpcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb25fc3lzZnNfcmVnaW9uKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMjQtfVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9OTg9c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19yZWdpb25zICpkYW1vbl9zeXNmc19yZWdpb25zX2FsbG9jKHZvaWQpXG5tbS9kYW1vbi9zeXNmcy5jLTk5LXtcbm1tL2RhbW9uL3N5c2ZzLmM6MTAwOlx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19yZWdpb25zKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMTAxLX1cbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIxOD1zdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3RhcmdldCAqZGFtb25fc3lzZnNfdGFyZ2V0X2FsbG9jKHZvaWQpXG5tbS9kYW1vbi9zeXNmcy5jLTIxOS17XG5tbS9kYW1vbi9zeXNmcy5jOjIyMDpcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb25fc3lzZnNfdGFyZ2V0KTtcbm1tL2RhbW9uL3N5c2ZzLmMtMjIxLX1cbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTMyND1zdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3RhcmdldHMgKmRhbW9uX3N5c2ZzX3RhcmdldHNfYWxsb2Modm9pZClcbm1tL2RhbW9uL3N5c2ZzLmMtMzI1LXtcbm1tL2RhbW9uL3N5c2ZzLmM6MzI2Olx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc190YXJnZXRzKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMzI3LX1cbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTc2NT1zdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX2ZpbHRlciAqZGFtb25fc3lzZnNfZmlsdGVyX2FsbG9jKHZvaWQpXG5tbS9kYW1vbi9zeXNmcy5jLTc2Ni17XG5tbS9kYW1vbi9zeXNmcy5jOjc2NzpcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVyKTtcbm1tL2RhbW9uL3N5c2ZzLmMtNzY4LX1cbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTk1Mz1zdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX2ZpbHRlcnMgKmRhbW9uX3N5c2ZzX2ZpbHRlcnNfYWxsb2Modm9pZClcbm1tL2RhbW9uL3N5c2ZzLmMtOTU0LXtcbm1tL2RhbW9uL3N5c2ZzLmM6OTU1Olx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19maWx0ZXJzKTtcbm1tL2RhbW9uL3N5c2ZzLmMtOTU2LX1cbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTEwNzI9c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19wcm9iZSAqZGFtb25fc3lzZnNfcHJvYmVfYWxsb2Modm9pZClcbm1tL2RhbW9uL3N5c2ZzLmMtMTA3My17XG5tbS9kYW1vbi9zeXNmcy5jOjEwNzQ6XHRyZXR1cm4ga3phbGxvY19vYmooc3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMTA3NS19XG4tLVxubW0vZGFtb24vc3lzZnMuYz0xMTUzPXN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmVzICpkYW1vbl9zeXNmc19wcm9iZXNfYWxsb2Modm9pZClcbm1tL2RhbW9uL3N5c2ZzLmMtMTE1NC17XG5tbS9kYW1vbi9zeXNmcy5jOjExNTU6XHRyZXR1cm4ga3phbGxvY19vYmooc3RydWN0IGRhbW9uX3N5c2ZzX3Byb2Jlcyk7XG5tbS9kYW1vbi9zeXNmcy5jLTExNTYtfVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MTY2ND1zdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHRzICpkYW1vbl9zeXNmc19jb250ZXh0c19hbGxvYyh2b2lkKVxubW0vZGFtb24vc3lzZnMuYy0xNjY1LXtcbm1tL2RhbW9uL3N5c2ZzLmM6MTY2NjpcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb25fc3lzZnNfY29udGV4dHMpO1xubW0vZGFtb24vc3lzZnMuYy0xNjY3LX1cbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTE3OTU9c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICpkYW1vbl9zeXNmc19rZGFtb25kX2FsbG9jKHZvaWQpXG5tbS9kYW1vbi9zeXNmcy5jLTE3OTYte1xubW0vZGFtb24vc3lzZnMuYzoxNzk3Olx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMTc5OC19XG4tLVxubW0vZGFtb24vc3lzZnMuYz0yNTE0PXN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZHMgKmRhbW9uX3N5c2ZzX2tkYW1vbmRzX2FsbG9jKHZvaWQpXG5tbS9kYW1vbi9zeXNmcy5jLTI1MTUte1xubW0vZGFtb24vc3lzZnMuYzoyNTE2Olx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kcyk7XG5tbS9kYW1vbi9zeXNmcy5jLTI1MTctfVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjY1OD1zdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3VpX2RpciAqZGFtb25fc3lzZnNfdWlfZGlyX2FsbG9jKHZvaWQpXG5tbS9kYW1vbi9zeXNmcy5jLTI2NTkte1xubW0vZGFtb24vc3lzZnMuYzoyNjYwOlx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc191aV9kaXIpO1xubW0vZGFtb24vc3lzZnMuYy0yNjYxLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxMDUKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIGBrbWFsbG9jX29iamAmIzM5O3MgQmVoYXZpb3Igd2l0aCBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgKioKCkFscmlnaHQsIGhhbmcgb24gYSBzZWNvbmQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoaXMgY29ubmVjdGlvbiBiZXR3ZWVuIGBrbWFsbG9jX29iamAgYW5kIGBkYW1vc19uZXdfcXVvdGFfZ29hbGAuIFNwZWNpZmljYWxseSwgZG9lcyBga21hbGxvY19vYmpgIHBlcmZvcm0gbWVtb3J5IHplcm9pbmc/IFRoYXQmIzM5O3MgYSBjcml0aWNhbCBkZXRhaWwsIGFuZCBJIGRvbiYjMzk7dCB3YW50IHRvIG1ha2UgYXNzdW1wdGlvbnMuIEkga25vdyB0aGUgcG90ZW50aWFsIHBpdGZhbGxzIGhlcmUsIHNvIEkgbmVlZCB0byB2ZXJpZnkuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIGBrbWFsbG9jX29iamAgYW5kIGdldCB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIuIEkgY2FuJiMzOTt0IHByb2NlZWQgd2l0aG91dCBjbGFyaWZ5aW5nIHRoYXQgYXNwZWN0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGRvY3VtZW50YXRpb24gYW5kIHRoZSBjb2RlIGl0c2VsZiB0ZWxsIHVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIGttYWxsb2Nfb2JqJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2xhYi5oPTEwNzA9dm9pZCAqa21hbGxvY19ub2xvY2soc2l6ZV90IHNpemUsIGdmcF90IGdmcF9mbGFncywgaW50IG5vZGUpO1xuLS1cbmluY2x1ZGUvbGludXgvc2xhYi5oLTExMjAtICovXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDoxMTIxOiNkZWZpbmUga21hbGxvY19vYmooVkFSX09SX1RZUEUsIC4uLikgXFxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExMjItXHRfX2FsbG9jX29ianMoa21hbGxvYywgZGVmYXVsdF9nZnAoX19WQV9BUkdTX18pLCB0eXBlb2YoVkFSX09SX1RZUEUpLCAxKVxuLS1cbmluY2x1ZGUvbGludXgvc2xhYi5oLTExMzItICovXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDoxMTMzOiNkZWZpbmUga21hbGxvY19vYmpzKFZBUl9PUl9UWVBFLCBDT1VOVCwgLi4uKSBcXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTEzNC1cdF9fYWxsb2Nfb2JqcyhrbWFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihWQVJfT1JfVFlQRSksIENPVU5UKVxuLS1cbmxpYi9kZWNvbXByZXNzX3VueHouYy0xNjMtI3VuZGVmIHZmcmVlXG5saWIvZGVjb21wcmVzc191bnh6LmM6MTY0OiNkZWZpbmUga21hbGxvY19vYmoodHlwZSkgbWFsbG9jKHNpemVvZih0eXBlKSlcbmxpYi9kZWNvbXByZXNzX3VueHouYy0xNjUtI2RlZmluZSBrZnJlZShwdHIpIGZyZWUocHRyKVxuLS1cbnRvb2xzL3ZpcnRpby9saW51eC9rZXJuZWwuaD02Mz1zdGF0aWMgaW5saW5lIHZvaWQgKmttYWxsb2NfYXJyYXkodW5zaWduZWQgbiwgc2l6ZV90IHMsIGdmcF90IGdmcClcbi0tXG50b29scy92aXJ0aW8vbGludXgva2VybmVsLmgtNjctXG50b29scy92aXJ0aW8vbGludXgva2VybmVsLmg6Njg6I2RlZmluZSBrbWFsbG9jX29iaihWQVJfT1JfVFlQRSwgLi4uKSBcXFxudG9vbHMvdmlydGlvL2xpbnV4L2tlcm5lbC5oLTY5LVx0KCh0eXBlb2YoVkFSX09SX1RZUEUpICopa21hbGxvYyhzaXplb2YodHlwZW9mKFZBUl9PUl9UWVBFKSksIDApKVxudG9vbHMvdmlydGlvL2xpbnV4L2tlcm5lbC5oLTcwLVxudG9vbHMvdmlydGlvL2xpbnV4L2tlcm5lbC5oOjcxOiNkZWZpbmUga21hbGxvY19vYmpzKFZBUl9PUl9UWVBFLCBDT1VOVCwgLi4uKSBcXFxudG9vbHMvdmlydGlvL2xpbnV4L2tlcm5lbC5oLTcyLVx0KCh0eXBlb2YoVkFSX09SX1RZUEUpICopa21hbGxvYyhzaXplb2YodHlwZW9mKFZBUl9PUl9UWVBFKSkgKiAoQ09VTlQpLCAwKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4NjMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IEFjY2VzcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGttYWxsb2Nfb2JqYCwgYW5kIHRoYXQmIzM5O3MganVzdCBhIHdyYXBwZXIgYXJvdW5kIGBrbWFsbG9jYC4gVGhlIGNyaXRpY2FsIHRoaW5nIHRvIHJlbWVtYmVyIGlzIHRoYXQgYGttYWxsb2NgICpkb2VzbiYjMzk7dCogemVybyBvdXQgdGhlIGFsbG9jYXRlZCBtZW1vcnkuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGZvciB0aGlzIHN0cnVjdC4KClRoZSBjb2RlIHNob3dzIGBkYW1vc19uZXdfcXVvdGFfZ29hbGAgYWxsb2NhdGluZyBtZW1vcnkgdXNpbmcgYGttYWxsb2Nfb2JqYCwgYW5kIHRoZW4gc2V0dGluZyBhIGZldyBmaWVsZHM6IGBtZXRyaWNgLCBgdGFyZ2V0X3ZhbHVlYCwgYW5kIHRoZSBgbGlzdGAgaGVhZCB1c2luZyBgSU5JVF9MSVNUX0hFQURgLiBCdXQsIGhhbmcgb24uLi4gd2hhdCBhYm91dCBgZ29hbC0mZ3Q7bGFzdF9wc2lfdG90YWxgPyBUaGF0JiMzOTtzICpub3QqIGluaXRpYWxpemVkIHRoZXJlLiBUaGF0JiMzOTtzIGEgcmVkIGZsYWchIEFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgY291bGQgbGVhZCB0byBhbGwgc29ydHMgb2YgaXNzdWVzLiBJZiB0aGUgY29kZSB0aGVuIHRyaWVzIHRvIHJlYWQgdGhhdCB2YWx1ZSBsYXRlciB3aXRob3V0IGZpcnN0IGluaXRpYWxpemluZyBpdCwgd2UmIzM5O3ZlIGdvdCBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IG9yIGF0IHRoZSB2ZXJ5IGxlYXN0LCB1bnByZWRpY3RhYmxlIGJlaGF2aW9yLgoKSSBzZWUgdGhhdCB0aGUgcGF0Y2ggaW5jbHVkZXMgYSBuZXcgZnVuY3Rpb24sIGBkYW1vc19pbml0X3F1b3RhX2dvYWxfbGFzdF9wc2lgLiBBbmQgKnRoYXQqIGZ1bmN0aW9uIGluaXRpYWxpemVzIGBsYXN0X3BzaV90b3RhbGAuLi4gYnV0IG9ubHkgZm9yIGEgc3BlY2lmaWMgYG1ldHJpY2AsIGBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVNgLiBUaGF0JiMzOTtzIGEgbGl0dGxlIGJldHRlciwgYnV0IGl0JiMzOTtzIHN0aWxsIG5vdCBhIGNvbXBsZXRlIHNvbHV0aW9uLiBJdCBsZWF2ZXMgdGhlIG90aGVycyBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkLgoKTm93LCBJIHJlYWxseSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBoZXJlLiBJcyBgZ29hbC0mZ3Q7bGFzdF9wc2lfdG90YWxgIGV2ZXIgZXhwb3NlZCB0byB1c2Vyc3BhY2U/IFRoYXQmIzM5O3MgdGhlIGtleSBxdWVzdGlvbi4gSWYgaXQgKmlzKiwgdGhlbiB3ZSBoYXZlIGEgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWsuIElmIGl0JiMzOTtzIHVzZWQgaW50ZXJuYWxseSwgdW5pbml0aWFsaXplZCwgdGhhdCBjb3VsZCBiZSBhIGJ1ZyBvciBjYXVzZSBzZWN1cml0eSBpc3N1ZXMuIEkgbmVlZCB0byB0cmFjZSB3aGVyZSB0aGlzIGBsYXN0X3BzaV90b3RhbGAgZmllbGQgaXMgdXNlZC4gSSYjMzk7bGwgc2VhcmNoIHRocm91Z2ggdGhlIGNvZGViYXNlIGZvciByZWZlcmVuY2VzIHRvIGl0IGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSByZWFkcyBvZiB0aGF0IGZpZWxkIGJlZm9yZSBpdCYjMzk7cyBpbml0aWFsaXplZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGFzdF9wc2lfdG90YWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTExMjE9c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oXG4tLVxubW0vZGFtb24vY29yZS5jLTExMjUtXHRjYXNlIERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUzpcbm1tL2RhbW9uL2NvcmUuYzoxMTI2Olx0XHRkc3QtXHUwMDNlbGFzdF9wc2lfdG90YWwgPSBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKCk7XG5tbS9kYW1vbi9jb3JlLmMtMTEyNy1cdFx0YnJlYWs7XG4tLVxubW0vZGFtb24vY29yZS5jPTMwMTI9c3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMDIyLVx0XHRub3dfcHNpX3RvdGFsID0gZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpO1xubW0vZGFtb24vY29yZS5jOjMwMjM6XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IG5vd19wc2lfdG90YWwgLSBnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsO1xubW0vZGFtb24vY29yZS5jOjMwMjQ6XHRcdGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWwgPSBub3dfcHNpX3RvdGFsO1xubW0vZGFtb24vY29yZS5jLTMwMjUtXHRcdGJyZWFrO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zNzMyPXN0YXRpYyB2b2lkIGRhbW9zX2luaXRfcXVvdGFfZ29hbF9sYXN0X3BzaShzdHJ1Y3QgZGFtb3MgKnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTM3MzgtXHRcdFx0Y29udGludWU7XG5tbS9kYW1vbi9jb3JlLmM6MzczOTpcdFx0Z29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKTtcbm1tL2RhbW9uL2NvcmUuYy0zNzQwLVx0fVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD03NTA9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC03NTMte1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjc1NDpcdHU2NCBkc3RfbGFzdF9wc2lfdG90YWwgPSAwO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTc1NS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC03NTYtXHRpZiAoZHN0LVx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMpXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NzU3Olx0XHRkc3RfbGFzdF9wc2lfdG90YWwgPSBkc3QtXHUwMDNlbGFzdF9wc2lfdG90YWw7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNzU4LVx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoZHN0LCBzcmMpO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC03NjMtXHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNlY3VycmVudF92YWx1ZSwgc3JjLVx1MDAzZWN1cnJlbnRfdmFsdWUpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjc2NDpcdGlmIChkc3RfbGFzdF9wc2lfdG90YWwgXHUwMDI2XHUwMDI2IHNyYy1cdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTKVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjc2NTpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cdTAwM2VsYXN0X3BzaV90b3RhbCwgZHN0X2xhc3RfcHNpX3RvdGFsKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC03NjYtXHRzd2l0Y2ggKGRzdC1cdTAwM2VtZXRyaWMpIHtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9NzgxPXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWwoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC03ODYtXHRcdC5jdXJyZW50X3ZhbHVlID0gMTIzLFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjc4NzpcdFx0Lmxhc3RfcHNpX3RvdGFsID0gNDU2LFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTc4OC1cdH07XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTgyOS1cdFx0XHQuY3VycmVudF92YWx1ZSA9IDM0NSxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4MzA6XHRcdFx0Lmxhc3RfcHNpX3RvdGFsID0gNTY3LFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTgzMS1cdFx0XHR9KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2MzUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBpbiBEQU1PUyBRdW90YSBDYWxjdWxhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZWAgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyBsaWtlIHRoZSBgbGFzdF9wc2lfdG90YWxgIHZhcmlhYmxlIGlzIGNyaXRpY2FsLiBTcGVjaWZpY2FsbHksIGluc2lkZSB0aGUgYERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AgY2FzZSwgdGhlIGNvZGUgY2FsY3VsYXRlcyBgZ29hbC0mZ3Q7Y3VycmVudF92YWx1ZWAgYnkgc3VidHJhY3RpbmcgYGdvYWwtJmd0O2xhc3RfcHNpX3RvdGFsYCBmcm9tIHRoZSBjdXJyZW50IFBTSSB0b3RhbC4gVGhlIGNvbmNlcm4sIGFuZCBpdCYjMzk7cyBhIHZhbGlkIG9uZSwgaXMgd2hhdCBoYXBwZW5zIGlmIGBsYXN0X3BzaV90b3RhbGAgaGFzbiYjMzk7dCBiZWVuIGluaXRpYWxpemVkIGJlZm9yZSB0aGlzIHBvaW50LiBXZSBjb3VsZCBlbmQgdXAgY2FsY3VsYXRpbmcgYGN1cnJlbnRfdmFsdWVgIHVzaW5nIHdoYXRldmVyIGdhcmJhZ2UgaGFwcGVucyB0byBiZSBpbiB0aGF0IG1lbW9yeSBsb2NhdGlvbiwgd2hpY2ggaXMgYSBjbGFzc2ljIGJ1ZyBzY2VuYXJpby4KClRoaXMgaXMgYSByZWQgZmxhZywgYW5kIGl0JiMzOTtzIG1ha2luZyBtZSB3b25kZXI6IGlzIGBnb2FsLSZndDtjdXJyZW50X3ZhbHVlYCBleHBvc2VkIHRvIHVzZXIgc3BhY2UgaW4gYW55IHdheT8gSWYgc28sIHRoaXMgY291bGQgYmUgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5LCBvciBhdCB0aGUgdmVyeSBsZWFzdCwgbGVhZCB0byB1bnJlbGlhYmxlIGRhdGEgZm9yIG91ciBlbmQgdXNlcnMuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGRpdmUgaW50byB0aGUgY29kZWJhc2UgYW5kIHRyYWNlIHRoZSB1c2VzIG9mIGBjdXJyZW50X3ZhbHVlYCB0byB1bmRlcnN0YW5kIHdoZXJlIGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZC4gVW5kZXJzdGFuZGluZyB3aGVyZSBpdCYjMzk7cyB1c2VkIGlzIGNyaXRpY2FsIHRvIGV2YWx1YXRpbmcgdGhlIGltcGFjdCBvZiB0aGlzIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y3VycmVudF92YWx1ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MTE0Mj1zdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTE0Ny1cdGlmIChkc3QtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX1VTRVJfSU5QVVQpXG5tbS9kYW1vbi9jb3JlLmM6MTE0ODpcdFx0ZHN0LVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBzcmMtXHUwMDNlY3VycmVudF92YWx1ZTtcbm1tL2RhbW9uL2NvcmUuYy0xMTQ5LVx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oZHN0LCBzcmMpO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yOTk3PXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnAoYm9vbCBhY3RpdmVfcmF0aW8pXG4tLVxubW0vZGFtb24vY29yZS5jLTMwMTEtXG5tbS9kYW1vbi9jb3JlLmM6MzAxMjpzdGF0aWMgdm9pZCBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKHN0cnVjdCBkYW1vbl9jdHggKmMsXG5tbS9kYW1vbi9jb3JlLmMtMzAxMy1cdFx0c3RydWN0IGRhbW9zICpzLCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzAxOC1cdGNhc2UgREFNT1NfUVVPVEFfVVNFUl9JTlBVVDpcbm1tL2RhbW9uL2NvcmUuYzozMDE5Olx0XHQvKiBVc2VyIHNob3VsZCBhbHJlYWR5IHNldCBnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgKi9cbm1tL2RhbW9uL2NvcmUuYy0zMDIwLVx0XHRicmVhaztcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzAyMi1cdFx0bm93X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKTtcbm1tL2RhbW9uL2NvcmUuYzozMDIzOlx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBub3dfcHNpX3RvdGFsIC0gZ29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbDtcbm1tL2RhbW9uL2NvcmUuYy0zMDI0LVx0XHRnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsID0gbm93X3BzaV90b3RhbDtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzAyNy1cdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUDpcbm1tL2RhbW9uL2NvcmUuYzozMDI4Olx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfbm9kZV9tZW1fYnAoZ29hbCk7XG5tbS9kYW1vbi9jb3JlLmMtMzAyOS1cdFx0YnJlYWs7XG4tLVxubW0vZGFtb24vY29yZS5jLTMwMzEtXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUDpcbm1tL2RhbW9uL2NvcmUuYzozMDMyOlx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwKGdvYWwpO1xubW0vZGFtb24vY29yZS5jLTMwMzMtXHRcdGJyZWFrO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMDM1LVx0Y2FzZSBEQU1PU19RVU9UQV9JTkFDVElWRV9NRU1fQlA6XG5tbS9kYW1vbi9jb3JlLmM6MzAzNjpcdFx0Z29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnAoXG5tbS9kYW1vbi9jb3JlLmMtMzAzNy1cdFx0XHRcdGdvYWwtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX0FDVElWRV9NRU1fQlApO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMDM5LVx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX0VMSUdJQkxFX01FTV9CUDpcbm1tL2RhbW9uL2NvcmUuYzozMDQwOlx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfbm9kZV9lbGlnaWJsZV9tZW1fYnAoYywgcyxcbm1tL2RhbW9uL2NvcmUuYy0zMDQxLVx0XHRcdFx0Z29hbC1cdTAwM2VuaWQpO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMDQ5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3F1b3RhX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzA1NS1cdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgcXVvdGEpIHtcbm1tL2RhbW9uL2NvcmUuYzozMDU2Olx0XHRkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKGMsIHMsIGdvYWwpO1xubW0vZGFtb24vY29yZS5jLTMwNTctXHRcdGhpZ2hlc3Rfc2NvcmUgPSBtYXgoaGlnaGVzdF9zY29yZSxcbm1tL2RhbW9uL2NvcmUuYzozMDU4Olx0XHRcdFx0bXVsdF9mcmFjKGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSwgMTAwMDAsXG5tbS9kYW1vbi9jb3JlLmMtMzA1OS1cdFx0XHRcdFx0Z29hbC1cdTAwM2V0YXJnZXRfdmFsdWUpKTtcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MTk0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTI0Ni1cdFx0XHRnb3RvIG91dDtcbm1tL2RhbW9uL3JlY2xhaW0uYzoyNDc6XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IHF1b3RhX2F1dG90dW5lX2ZlZWRiYWNrO1xubW0vZGFtb24vcmVjbGFpbS5jLTI0OC1cdFx0ZGFtb3NfYWRkX3F1b3RhX2dvYWwoXHUwMDI2c2NoZW1lLVx1MDAzZXF1b3RhLCBnb2FsKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTIxNT1zdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMTgtXHR1bnNpZ25lZCBsb25nIHRhcmdldF92YWx1ZTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjE5Olx0dW5zaWduZWQgbG9uZyBjdXJyZW50X3ZhbHVlO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMjAtXHRpbnQgbmlkO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMzE5PXN0YXRpYyBzc2l6ZV90IHRhcmdldF92YWx1ZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMyOC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzI5OnN0YXRpYyBzc2l6ZV90IGN1cnJlbnRfdmFsdWVfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzMwLVx0XHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zilcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMzNC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzM1Olx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslbHVcXG5cJiMzNDssIGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMzNi19XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMzNy1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzM4OnN0YXRpYyBzc2l6ZV90IGN1cnJlbnRfdmFsdWVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMzOS1cdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTM0Mi1cdFx0XHRkYW1vc19zeXNmc19xdW90YV9nb2FsLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzQzOlx0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXHUwMDI2Z29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzQ0LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNDE4PXN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF90YXJnZXRfdmFsdWVfYXR0ciA9XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MjAtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQyMTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZV9hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDIyOlx0XHRfX0FUVFJfUldfTU9ERShjdXJyZW50X3ZhbHVlLCAwNjAwKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDIzLVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNDMwPXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vc19zeXNmc19xdW90YV9nb2FsX2F0dHJzW10gPSB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MzItXHRcdTAwMjZkYW1vc19zeXNmc19xdW90YV9nb2FsX3RhcmdldF92YWx1ZV9hdHRyLmF0dHIsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQzMzpcdFx1MDAyNmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZV9hdHRyLmF0dHIsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQzNC1cdFx1MDAyNmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfbmlkX2F0dHIuYXR0cixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjg0Nz1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX2FkZF9xdW90YV9zY29yZShcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg2Ni1cdFx0Y2FzZSBEQU1PU19RVU9UQV9VU0VSX0lOUFVUOlxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4Njc6XHRcdFx0Z29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gc3lzZnNfZ29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NjgtXHRcdFx0YnJlYWs7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTc1MD1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTc2Mi1cdGlmIChzcmMtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX1VTRVJfSU5QVVQpXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NzYzOlx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZWN1cnJlbnRfdmFsdWUsIHNyYy1cdTAwM2VjdXJyZW50X3ZhbHVlKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC03NjQtXHRpZiAoZHN0X2xhc3RfcHNpX3RvdGFsIFx1MDAyNlx1MDAyNiBzcmMtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUylcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9NzgxPXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWwoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC03ODUtXHRcdC50YXJnZXRfdmFsdWUgPSAxMDAwLFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjc4NjpcdFx0LmN1cnJlbnRfdmFsdWUgPSAxMjMsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNzg3LVx0XHQubGFzdF9wc2lfdG90YWwgPSA0NTYsXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTc5My1cdFx0XHQudGFyZ2V0X3ZhbHVlID0gNzg5LFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjc5NDpcdFx0XHQuY3VycmVudF92YWx1ZSA9IDEyfSk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNzk1LVx0ZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3IodGVzdCwgXHUwMDI2ZHN0LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC03OTgtXHRcdFx0LnRhcmdldF92YWx1ZSA9IDM0NSxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo3OTk6XHRcdFx0LmN1cnJlbnRfdmFsdWUgPSA2NzgsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODAwLVx0XHRcdC5uaWQgPSA5LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MDUtXHRcdFx0LnRhcmdldF92YWx1ZSA9IDEyLFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjgwNjpcdFx0XHQuY3VycmVudF92YWx1ZSA9IDM0NSxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MDctXHRcdFx0Lm5pZCA9IDYsXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTgxMi1cdFx0XHQudGFyZ2V0X3ZhbHVlID0gNDU2LFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjgxMzpcdFx0XHQuY3VycmVudF92YWx1ZSA9IDU2Nyxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MTQtXHRcdFx0Lm5pZCA9IDYsXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTgyMC1cdFx0XHQudGFyZ2V0X3ZhbHVlID0gODkwLFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjgyMTpcdFx0XHQuY3VycmVudF92YWx1ZSA9IDkwMSxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MjItXHRcdFx0Lm5pZCA9IDEwLFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MjgtXHRcdFx0LnRhcmdldF92YWx1ZSA9IDIzNCxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4Mjk6XHRcdFx0LmN1cnJlbnRfdmFsdWUgPSAzNDUsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODMwLVx0XHRcdC5sYXN0X3BzaV90b3RhbCA9IDU2NyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5NzcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBEYXRhIEZsb3cgb2YgREFNT04gUXVvdGEgR29hbHMqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSBuZWVkIHRvIGNsYXJpZnkgc29tZXRoaW5nIGFib3V0IGhvdyB0aGUgYGN1cnJlbnRfdmFsdWVgIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBEQU1PTiBxdW90YSBzeXN0ZW0uIEkga25vdyB0aGF0IGBjdXJyZW50X3ZhbHVlYCBpcyBhIGNyaXRpY2FsIGZpZWxkLCBhbmQgSSYjMzk7dmUganVzdCByZWFsaXplZCBpdCBleGlzdHMgaW4gKnR3byogZGlzdGluY3Qgc3RydWN0dXJlczogYHN0cnVjdCBkYW1vc19xdW90YV9nb2FsYCBpbiBgbW0vZGFtb24vY29yZS5jYCBhbmQgYWxzbyBpbiBgc3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxgIHdpdGhpbiBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYC4KCk15IHByaW1hcnkgY29uY2VybiBpcyB0aGlzOiB0aGUgc3lzZnMgaW50ZXJmYWNlIGlzIGhvdyB1c2Vyc3BhY2UgaW50ZXJhY3RzIHdpdGggdGhpcyBgY3VycmVudF92YWx1ZWAgdmlhIGBkYW1vc19zeXNmc19xdW90YV9nb2FsYC4gQnV0IHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzLCBob3cgZG9lcyB0aGlzIHZhbHVlIGluIGBkYW1vc19zeXNmc19xdW90YV9nb2FsYCBnZXQgdXBkYXRlZD8gRG9lcyBpdCBtaXJyb3IgdGhlIGBjdXJyZW50X3ZhbHVlYCBzdG9yZWQgaW5zaWRlIG9mIGBkYW1vc19xdW90YV9nb2FsYD8gSXMgdGhlcmUgYSBkaXJlY3QgY29weT8gQSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtPwoKSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBtYWtlIHN1cmUgdGhhdCB0aGUgYGRhbW9zX3F1b3RhX2dvYWwtJmd0O2N1cnJlbnRfdmFsdWVgIGlzLCBpbiBmYWN0LCBiZWluZyBjb3BpZWQgb3IgYXBwcm9wcmlhdGVseSBzeW5jaHJvbml6ZWQgdG8gYGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwtJmd0O2N1cnJlbnRfdmFsdWVgLiBUaGlzIGlzIGVzc2VudGlhbCB0byBndWFyYW50ZWUgdGhhdCB1c2VyLXNwYWNlIGludGVyYWN0aW9ucyB0aHJvdWdoIHN5c2ZzIGFyZSBhbHdheXMgcmVmbGVjdGluZyB0aGUgKmFjdHVhbCogcnVubmluZyBzdGF0ZSBvZiB0aGUgREFNT04gcXVvdGEgZ29hbHMgYW5kIG5vdCBzb21lIG91dGRhdGVkIG9yIHN0YWxlIHZhbHVlLiBUaGUgY29ycmVjdG5lc3Mgb2YgdGhlIHVzZXIgZXhwb3NlZCB2YWx1ZSBpcyBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA0OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2N1cnJlbnRfdmFsdWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEyMTU9c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjE4LVx0dW5zaWduZWQgbG9uZyB0YXJnZXRfdmFsdWU7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTIxOTpcdHVuc2lnbmVkIGxvbmcgY3VycmVudF92YWx1ZTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjIwLVx0aW50IG5pZDtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTMxOT1zdGF0aWMgc3NpemVfdCB0YXJnZXRfdmFsdWVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMjgtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMyOTpzdGF0aWMgc3NpemVfdCBjdXJyZW50X3ZhbHVlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMzMC1cdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMzQtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMzNTpcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JWx1XFxuXCYjMzQ7LCBnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMzYtfVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMzctXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMzODpzdGF0aWMgc3NpemVfdCBjdXJyZW50X3ZhbHVlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMzktXHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzNDItXHRcdFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTM0MzpcdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFx1MDAyNmdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTM0NC1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTQxOD1zdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfdGFyZ2V0X3ZhbHVlX2F0dHIgPVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDIwLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MjE6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vc19zeXNmc19xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQyMjpcdFx0X19BVFRSX1JXX01PREUoY3VycmVudF92YWx1ZSwgMDYwMCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQyMy1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTQzMD1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9hdHRyc1tdID0ge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDMyLVx0XHUwMDI2ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF90YXJnZXRfdmFsdWVfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MzM6XHRcdTAwMjZkYW1vc19zeXNmc19xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MzQtXHRcdTAwMjZkYW1vc19zeXNmc19xdW90YV9nb2FsX25pZF9hdHRyLmF0dHIsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NDc9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NjYtXHRcdGNhc2UgREFNT1NfUVVPVEFfVVNFUl9JTlBVVDpcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODY3Olx0XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IHN5c2ZzX2dvYWwtXHUwMDNlY3VycmVudF92YWx1ZTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODY4LVx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjQxNAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERhdGEgRmxvdyBmb3IgUXVvdGEgR29hbCBWYWx1ZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIHRyYWNlIGhvdyB0aGUgcXVvdGEgZ29hbCB2YWx1ZXMgYXJlIGhhbmRsZWQsIHNwZWNpZmljYWxseSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgc3lzdGVtIGZpbGUgc3lzdGVtIChzeXNmcykgcmVwcmVzZW50YXRpb24gYW5kIHRoZSBpbnRlcm5hbCBgZGFtb3NfcXVvdGFfZ29hbGAgZGF0YSBzdHJ1Y3R1cmUuIEl0IGxvb2tzIGxpa2UgdGhlIGBkYW1vc19zeXNmc19xdW90YV9nb2FsLSZndDtjdXJyZW50X3ZhbHVlYCBpcyBvbmx5IGV2ZXIgKnJlYWQqIGZyb20gc3lzZnMuIFRoZW4sIGl0IHNlZW1zIHRvIGJlIGNvcGllZCB0byBgZGFtb3NfcXVvdGFfZ29hbC0mZ3Q7Y3VycmVudF92YWx1ZWAsIGJ1dCBvbmx5IHdoZW4gYERBTU9TX1FVT1RBX1VTRVJfSU5QVVRgIGlzIGludm9sdmVkLgoKVGhhdCYjMzk7cyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nIGFuZCB3aGVyZSBJIGdldCBhIGJpdCBjb25jZXJuZWQuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgaXMgdGhlcmUgZXZlciBhbnkgd3JpdGUtYmFjaz8gRG9lcyBgZGFtb3NfcXVvdGFfZ29hbC0mZ3Q7Y3VycmVudF92YWx1ZWAgZXZlciBnZXQgdXBkYXRlZCBpbiB0aGUgY29yZSBsb2dpYyBhbmQgdGhlbiByZWZsZWN0ZWQgaW4gYGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwtJmd0O2N1cnJlbnRfdmFsdWVgPyBCZWNhdXNlIGlmIG5vdCwgdGhlbiB0aGUgc3lzZnMgcmVwcmVzZW50YXRpb24gaXMgZWZmZWN0aXZlbHkgYSBvbmUtd2F5IHN0cmVldCwgd2hpY2ggY291bGQgbGVhZCB0byBkaXNjcmVwYW5jaWVzIGlmIGNoYW5nZXMgYXJlIG1hZGUgaW50ZXJuYWxseSBhbmQgbmVlZCB0byBiZSByZWZsZWN0ZWQgaW4gc3lzZnMuCgpJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIGNhcmVmdWxseSBnbyB0aHJvdWdoIHRoZSBjb2RlIGFuZCBjaGVjayBmb3IgYW55IGZ1bmN0aW9ucyBvciBtZWNoYW5pc21zIHRoYXQgbWlnaHQgYmUgdXBkYXRpbmcgdGhlIHN5c2ZzIGZpbGUgZnJvbSB0aGUgY29yZS4gR290dGEgbWFrZSBzdXJlIHRoZSBkYXRhIGlzIGNvbnNpc3RlbnQgYW5kIHRoYXQgYSB1c2VyIGNvdWxkIGNoYW5nZSB0aGUgYGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwtJmd0O2N1cnJlbnRfdmFsdWVgIGFuZCBpdCB3b3VsZCBoYXZlIGFuIGFmZmVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjdXJyZW50X3ZhbHVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA0OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyODcwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBEYXRhIFNvdXJjZSBVcGRhdGVzIGZvciBTY2hlbWUgU3RhdGlzdGljcyoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzb3VyY2UgZm9yIHRoZXNlIHNjaGVtZSBzdGF0aXN0aWNzLiBNeSBmaXJzdCBpbnN0aW5jdCwgYW5kIHdoZXJlIEkmIzM5O2Qgc3RhcnQgZGlnZ2luZywgaXMgd2hldGhlciBgZGFtb25fc3lzZnNfdXBkYXRlX3NjaGVtZXNfc3RhdHNgIG9yIGEgZnVuY3Rpb24gd2l0aCBhIHNpbWlsYXIgbmFtZSDigJMgc29tZXRoaW5nIHJlbGF0ZWQgdG8gRGFtb24gKERhdGEgQWNjZXNzIE1vbml0b3IpIGFuZCBzeXNmcyB1cGRhdGVzIOKAkyBoYW5kbGVzIHRoZSBwb3B1bGF0aW9uIG9yIG1vZGlmaWNhdGlvbiBvZiB0aGVzZSBzdGF0aXN0aWNzLiBUaGF0JiMzOTtzIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gbG9vayBmaXJzdCwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgbGlrZWx5IGNvbnRleHQgb2YgdGhlIGRhdGEgYW5kIGl0cyBwb3RlbnRpYWwgY29ubmVjdGlvbiB0byBzeXN0ZW0gbW9uaXRvcmluZy4gSWYgdGhhdCBmdW5jdGlvbiBkb2VzbiYjMzk7dCBzZWVtIHJlbGV2YW50LCBJJiMzOTtsbCBuZWVkIHRvIGJyb2FkZW4gdGhlIHNlYXJjaCB0byByZWxhdGVkIGFyZWFzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzdGF0aXN0aWNzIGFyZSBjYWxjdWxhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1cGRhdGUuKnN0YXRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2xydV9zb3J0LmM9Mzg4PXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfZGFtb25fY2FsbF9mbih2b2lkICphcmcpXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0zOTItXG5tbS9kYW1vbi9scnVfc29ydC5jOjM5MzpcdC8qIHVwZGF0ZSB0aGUgc3RhdHMgcGFyYW1ldGVyICovXG5tbS9kYW1vbi9scnVfc29ydC5jLTM5NC1cdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjKSB7XG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTMxMz1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fZGFtb25fY2FsbF9mbih2b2lkICphcmcpXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTMxNy1cbm1tL2RhbW9uL3JlY2xhaW0uYzozMTg6XHQvKiB1cGRhdGUgdGhlIHN0YXRzIHBhcmFtZXRlciAqL1xubW0vZGFtb24vcmVjbGFpbS5jLTMxOS1cdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oPTM5PWludCBkYW1vbl9zeXNmc19hZGRfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNDEtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo0Mjp2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfdXBkYXRlX3N0YXRzKFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNDMtXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0zMDQ0PWludCBkYW1vbl9zeXNmc19hZGRfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwNjItXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzA2Mzp2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfdXBkYXRlX3N0YXRzKFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwNjQtXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MTg3OT1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGRhbW9uX3N5c2ZzX2NtZF9zdHJzW10gPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy0xODgzLVx0XCYjMzQ7Y29tbWl0X3NjaGVtZXNfcXVvdGFfZ29hbHNcJiMzNDssXG5tbS9kYW1vbi9zeXNmcy5jOjE4ODQ6XHRcJiMzNDt1cGRhdGVfc2NoZW1lc19zdGF0c1wmIzM0Oyxcbm1tL2RhbW9uL3N5c2ZzLmMtMTg4NS1cdFwmIzM0O3VwZGF0ZV9zY2hlbWVzX3RyaWVkX2J5dGVzXCYjMzQ7LFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjA3OD1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3VwZF9zY2hlbWVzX3N0YXRzKHZvaWQgKmRhdGEpXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMDgyLVxubW0vZGFtb24vc3lzZnMuYzoyMDgzOlx0ZGFtb25fc3lzZnNfc2NoZW1lc191cGRhdGVfc3RhdHMoXG5tbS9kYW1vbi9zeXNmcy5jLTIwODQtXHRcdFx0a2RhbW9uZC1cdTAwM2Vjb250ZXh0cy1cdTAwM2Vjb250ZXh0c19hcnJbMF0tXHUwMDNlc2NoZW1lcywgY3R4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM4MTAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIGBkYW1vbl9zeXNmc19zY2hlbWVzX3VwZGF0ZV9zdGF0c2AqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCYjMzk7cyBkaWcgaW50byB0aGlzIGBkYW1vbl9zeXNmc19zY2hlbWVzX3VwZGF0ZV9zdGF0c2AuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gYXNzZXNzIGl0cyBzaWduaWZpY2FuY2Ugd2l0aGluIHRoZSBicm9hZGVyIERBTU9OIGNvbnRleHQsIHRoZSBEYXRhIEFjY2VzcyBNb25pdG9yLiBXaGF0IHNwZWNpZmljIHN0YXRzIGFyZSB3ZSB0YWxraW5nIGFib3V0IGhlcmU/IEl0JiMzOTtzIGltbWVkaWF0ZWx5IGV2aWRlbnQgdGhhdCB0aGlzIGZ1bmN0aW9uIGRlYWxzIHdpdGggdXBkYXRpbmcgc3RhdGlzdGljcyByZWxhdGVkIHRvIHRoZSBkaWZmZXJlbnQgbW9uaXRvcmluZyBzY2hlbWVzIGV4cG9zZWQgdmlhIHN5c2ZzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCB0aG9zZSBhcmUuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGFjY2VzcyBmcmVxdWVuY3ksIGFjY2VzcyBzaXplLCBhY2Nlc3MgcGF0dGVybnMsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBBIHF1aWNrIHNjYW4gb2YgdGhlIGNvZGUgc2hvdWxkIGNsYXJpZnkgdGhhdC4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIG1hbmlwdWxhdGVkLiBUaGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGltcGFjdCBvZiBhbnkgY2hhbmdlcyBvciBkZWJ1Z2dpbmcgYW55IGlzc3VlcyByZWxhdGVkIHRvIERBTU9OJiMzOTtzIHJlcG9ydGluZyBjYXBhYmlsaXRpZXMuIERlcGVuZGluZyBvbiB0aGUgY29tcGxleGl0eSwgSSBtaWdodCBuZWVkIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgZnJvbSB0aGUgcG9pbnQgb2YgY29sbGVjdGlvbiBhbGwgdGhlIHdheSB0byBpdHMgcHJlc2VudGF0aW9uLiBBIHBvdGVudGlhbCBnb3RjaGEgd291bGQgYmUgaWYgdGhlcmUgYXJlIGFueSByYWNlIGNvbmRpdGlvbnMuIEEgY2xvc2VyIGxvb2sgYXQgdGhlIGRhdGEgc3RydWN0dXJlIGlzIHJlcXVpcmVkIHRvIGVuc3VyZSBhdG9taWNpdHkuIFRoaXMgaXMgYW4gaW1wb3J0YW50IHBpZWNlIG9mIHRoZSBwdXp6bGUsIGFuZCBJIG5lZWQgdG8gZW5zdXJlIGl0JiMzOTtzIGZ1bmN0aW9uaW5nIGFzIGV4cGVjdGVkLiBJdCYjMzk7cyBvZnRlbiB0aGUgdW5zdW5nIGhlcm9lcyBsaWtlIHRoZXNlIHN0YXRpc3RpY3MgdXBkYXRlcyB0aGF0IGNhbiBtYWtlIG9yIGJyZWFrIHRoZSBkaWFnbm9zdGljIHVzZWZ1bG5lc3Mgb2YgdGhlIHRvb2wuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA0OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzA2MywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMDYzOlx0dm9pZCBkYW1vbl9zeXNmc19zY2hlbWVzX3VwZGF0ZV9zdGF0cyhcbjMwNjQ6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG4zMDY1Olx0XHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbjMwNjY6XHR7XG4zMDY3Olx0XHRzdHJ1Y3QgZGFtb3MgKnNjaGVtZTtcbjMwNjg6XHRcdGludCBzY2hlbWVzX2lkeCA9IDA7XG4zMDY5Olx0XG4zMDcwOlx0XHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUoc2NoZW1lLCBjdHgpIHtcbjMwNzE6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpzeXNmc19zdGF0cztcbjMwNzI6XHRcbjMwNzM6XHRcdFx0LyogdXNlciBjb3VsZCBoYXZlIHJlbW92ZWQgdGhlIHNjaGVtZSBzeXNmcyBkaXIgKi9cbjMwNzQ6XHRcdFx0aWYgKHNjaGVtZXNfaWR4IFx1MDAzZT0gc3lzZnNfc2NoZW1lcy1cdTAwM2VucilcbjMwNzU6XHRcdFx0XHRicmVhaztcbjMwNzY6XHRcbjMwNzc6XHRcdFx0c3lzZnNfc3RhdHMgPSBzeXNmc19zY2hlbWVzLVx1MDAzZXNjaGVtZXNfYXJyW3NjaGVtZXNfaWR4JiM0MzsmIzQzO10tXHUwMDNlc3RhdHM7XG4zMDc4Olx0XHRcdHN5c2ZzX3N0YXRzLVx1MDAzZW5yX3RyaWVkID0gc2NoZW1lLVx1MDAzZXN0YXQubnJfdHJpZWQ7XG4zMDc5Olx0XHRcdHN5c2ZzX3N0YXRzLVx1MDAzZXN6X3RyaWVkID0gc2NoZW1lLVx1MDAzZXN0YXQuc3pfdHJpZWQ7XG4zMDgwOlx0XHRcdHN5c2ZzX3N0YXRzLVx1MDAzZW5yX2FwcGxpZWQgPSBzY2hlbWUtXHUwMDNlc3RhdC5ucl9hcHBsaWVkO1xuMzA4MTpcdFx0XHRzeXNmc19zdGF0cy1cdTAwM2Vzel9hcHBsaWVkID0gc2NoZW1lLVx1MDAzZXN0YXQuc3pfYXBwbGllZDtcbjMwODI6XHRcdFx0c3lzZnNfc3RhdHMtXHUwMDNlc3pfb3BzX2ZpbHRlcl9wYXNzZWQgPVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDU0MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBTU9OIFF1b3RhIEdvYWwgVXBkYXRlIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgcXVvdGEgZ29hbHMgYXJlIGJlaW5nIHVwZGF0ZWQsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXJzcGFjZS4gSXQmIzM5O3MgY2xlYXIgdGhhdCB0aGUgc3RhdHMgYXJlIGdldHRpbmcgdXBkYXRlZCwgdGhhdCBtdWNoIGlzIG9idmlvdXMgZnJvbSB0aGUgY29kZSwgYnV0IEkmIzM5O20gY29uY2VybmVkIGFib3V0IGBjdXJyZW50X3ZhbHVlYCBhbmQgYGxhc3RfcHNpX3RvdGFsYC4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTttIHByZXR0eSBzdXJlIGBsYXN0X3BzaV90b3RhbGAgaXNuJiMzOTt0IGV2ZW4gZXhwb3NlZCB0byB1c2Vyc3BhY2UgZGlyZWN0bHkuIEdvb2QuIEJ1dCB3aGF0IGFib3V0IGBjdXJyZW50X3ZhbHVlYD8KCkFoYSwgZGl2aW5nIGludG8gYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AsIEkgc2VlIHRoZSBgY3VycmVudF92YWx1ZV9zaG93YCBmdW5jdGlvbi4gQmluZ28uIEl0JiMzOTtzIGV4cG9zaW5nIGBkYW1vc19zeXNmc19xdW90YV9nb2FsLSZndDtjdXJyZW50X3ZhbHVlYCB0byB1c2Vyc3BhY2UsIHdoaWNoIGlzIHNldCBmcm9tIHVzZXJzcGFjZSB2aWEgYGN1cnJlbnRfdmFsdWVfc3RvcmVgLiBDcnVjaWFsbHksIHRoaXMgaXNuJiMzOTt0IHN5bmNocm9uaXplZCB3aXRoIHRoZSBjb3JlIGBkYW1vc19xdW90YV9nb2FsLSZndDtjdXJyZW50X3ZhbHVlYC4gU28sIHRoZXJlJiMzOTtzIG5vIGluaGVyZW50IHVwZGF0ZSBwYXRoIGZyb20gdGhlIGNvcmUgREFNT04gbG9naWMgdG8gdGhlIHN5c2ZzIGV4cG9zZWQgdmFsdWUgZm9yIGBjdXJyZW50X3ZhbHVlYC4KCk5vdywgdGhlIHF1ZXN0aW9uIGlzLCAqd2hlcmUgZWxzZSogaXMgYGN1cnJlbnRfdmFsdWVgIGV2ZXIgdXBkYXRlZD8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXNuJiMzOTt0IGJlaW5nIGluYWR2ZXJ0ZW50bHkgbW9kaWZpZWQgc29tZXdoZXJlIGVsc2UgaW4gdGhlIGNvZGViYXNlLiBUaGlzIGNvdWxkIGNhdXNlIHNvbWUgcmVhbGx5IHN1YnRsZSBidWdzIGluIGhvdyB0aGUgcXVvdGEgZ29hbHMgYXJlIGVuZm9yY2VkLCBlc3BlY2lhbGx5IGdpdmVuIGhvdyBgY3VycmVudF92YWx1ZWAgYXBwZWFycyB0byBiZSBhIGNydWNpYWwgZmllbGQgZm9yIHRoZSB1c2VyIHRvIGJlIHRyYWNraW5nLiBJJiMzOTttIGdvaW5nIHRvIGRvIGEgcXVpY2sgc2VhcmNoIGFuZCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHBsYWNlcyB3aGVyZSBgY3VycmVudF92YWx1ZWAgaXMgbWFuaXB1bGF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA0OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2N1cnJlbnRfdmFsdWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEyMTU9c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjE4LVx0dW5zaWduZWQgbG9uZyB0YXJnZXRfdmFsdWU7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTIxOTpcdHVuc2lnbmVkIGxvbmcgY3VycmVudF92YWx1ZTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjIwLVx0aW50IG5pZDtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTMxOT1zdGF0aWMgc3NpemVfdCB0YXJnZXRfdmFsdWVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMjgtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMyOTpzdGF0aWMgc3NpemVfdCBjdXJyZW50X3ZhbHVlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMzMC1cdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMzQtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMzNTpcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JWx1XFxuXCYjMzQ7LCBnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMzYtfVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMzctXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMzODpzdGF0aWMgc3NpemVfdCBjdXJyZW50X3ZhbHVlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMzktXHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzNDItXHRcdFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTM0MzpcdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFx1MDAyNmdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTM0NC1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTQxOD1zdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfdGFyZ2V0X3ZhbHVlX2F0dHIgPVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDIwLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MjE6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vc19zeXNmc19xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQyMjpcdFx0X19BVFRSX1JXX01PREUoY3VycmVudF92YWx1ZSwgMDYwMCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQyMy1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTQzMD1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9hdHRyc1tdID0ge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDMyLVx0XHUwMDI2ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF90YXJnZXRfdmFsdWVfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MzM6XHRcdTAwMjZkYW1vc19zeXNmc19xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MzQtXHRcdTAwMjZkYW1vc19zeXNmc19xdW90YV9nb2FsX25pZF9hdHRyLmF0dHIsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NDc9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NjYtXHRcdGNhc2UgREFNT1NfUVVPVEFfVVNFUl9JTlBVVDpcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODY3Olx0XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IHN5c2ZzX2dvYWwtXHUwMDNlY3VycmVudF92YWx1ZTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODY4LVx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjEwMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEludGVybmFsIERpYWxvZ3VlIG9uIERBTU9TIFF1b3RhIFVwZGF0ZXMqKgoKT2theSwgc28gdGhlIGBjdXJyZW50X3ZhbHVlYCB3ZSYjMzk7cmUgcHVsbGluZyBmcm9tIHN5c2ZzLCB0aGF0JiMzOTtzIGp1c3QgYSBvbmUtd2F5IHN0cmVldCwgcmlnaHQ/IEl0JiMzOTtzIHJlYWQtb25seSBhbmQgZmVlZHMgZGlyZWN0bHkgaW50byB0aGUgY29yZSB1c2luZyBgREFNT1NfUVVPVEFfVVNFUl9JTlBVVGAuIE5vIGNvbXBsZXhpdGllcyB0aGVyZSwganVzdCBhIHN0cmFpZ2h0Zm9yd2FyZCBkYXRhIHRyYW5zZmVyLiBCdXQsIGhvbGQgb24gYSBzZWNvbmQuLi5zb21ldGhpbmcgZmVlbHMgb2ZmLiBXaGF0IGFib3V0IGBkYW1vbl9zeXNmc191cGRhdGVfc2NoZW1lc19lZmZlY3RpdmVfcXVvdGFzYD8gVGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gdGhhdCB3b3JyaWVzIG1lLCBJIG5lZWQgdG8gY2hlY2sgaG93IGl0IHdvcmtzIGJlY2F1c2UgaXQgbWF5IGFmZmVjdCBteSBjb25jbHVzaW9uIHRoYXQgYGN1cnJlbnRfdmFsdWVgIGlzIG9ubHkgcmVhZC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgb2YgdGhlc2UgZnVuY3Rpb25zLiBJIHdvbmRlciBpZiB0aGVyZSYjMzk7cyBhbnkgaGlkZGVuIG1hbmlwdWxhdGlvbiBvciBzaWRlIGVmZmVjdHMgaGFwcGVuaW5nIHdpdGhpbiB0aGF0IG90aGVyIGZ1bmN0aW9uLiBJdCYjMzk7cyBlYXN5IHRvIGdldCBsb3N0IGluIHRoZXNlIGxheWVycyBvZiBhYnN0cmFjdGlvbiwgSSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA0OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VwZGF0ZV9zY2hlbWVzX2VmZmVjdGl2ZV9xdW90YXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYz0xODc5PXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZGFtb25fc3lzZnNfY21kX3N0cnNbXSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTE4ODctXHRcJiMzNDtjbGVhcl9zY2hlbWVzX3RyaWVkX3JlZ2lvbnNcJiMzNDssXG5tbS9kYW1vbi9zeXNmcy5jOjE4ODg6XHRcJiMzNDt1cGRhdGVfc2NoZW1lc19lZmZlY3RpdmVfcXVvdGFzXCYjMzQ7LFxubW0vZGFtb24vc3lzZnMuYy0xODg5LVx0XCYjMzQ7dXBkYXRlX3R1bmVkX2ludGVydmFsc1wmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY1MDYKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIEVmZmVjdGl2ZSBRdW90YXMgdmlhIGBkYW1vbl9zeXNmc191cGRfc2NoZW1lc19lZmZlY3RpdmVfcXVvdGFzYCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBgZGFtb25fc3lzZnNfdXBkX3NjaGVtZXNfZWZmZWN0aXZlX3F1b3Rhc2AgaW50ZXJmYWNlLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byB1bmRlcnN0YW5kIHRoZSBjdXJyZW50IHN0YXRlIG9mIHF1b3RhcyBhcyB0aGV5IHBlcnRhaW4gdG8gREFNT04gdXBkYXRlIHNjaGVtZXMuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHNlZSB3aGF0IGVmZmVjdGl2ZSBxdW90YSBzZXR0aW5ncyBhcmUgYmVpbmcgYXBwbGllZC4gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYXMgYSBkaWFnbm9zdGljIHN0ZXAg4oCTIEkgbmVlZCB0byBlbnN1cmUgdGhlIHBhcmFtZXRlcnMgSSYjMzk7dmUgY29uZmlndXJlZCB2aWEgc3lzZnMgYXJlIHRyYW5zbGF0aW5nIGludG8gdGhlIGJlaGF2aW9yIEkgZXhwZWN0IGluIHRoZSBEQU1PTiBmcmFtZXdvcmsuIEFtIEkgc2VlaW5nIHRoZSBsaW1pdHMsIHRoZSBidWRnZXQgYWxsb2NhdGlvbnMsIHRoZSBleHBlY3RlZCByZWR1Y3Rpb24gaW4gbWVtb3J5IHByZXNzdXJlLCBvciBhcmUgdGhlcmUgdW5leHBlY3RlZCBxdW90YSB2YWx1ZXMgdGhhdCBjb3VsZCBpbmRpY2F0ZSBhIGJ1ZyBpbiB0aGUgREFNT04gY29uZmlndXJhdGlvbiBsb2dpYywgb3IgYSBwb3RlbnRpYWwgY29uZmxpY3Qgd2l0aCBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zPwoKSSYjMzk7bSBwcm9iYWJseSBnb2luZyB0byBiZSBjcm9zcy1yZWZlcmVuY2luZyB0aGlzIGRhdGEgd2l0aCBvdGhlciBzb3VyY2VzLCBzdWNoIGFzIHRoZSBgZGFtb25fbW9uaXRvcnNgIHN5c2ZzIGludGVyZmFjZSwgdG8gY29ycmVsYXRlIHRoZSBxdW90YSBzZXR0aW5ncyB3aXRoIG9ic2VydmVkIG1vbml0b3JpbmcgcmVzdWx0cy4gSXMgdGhlIGBkYW1vbl9zeXNmc191cGRfc2NoZW1lc19lZmZlY3RpdmVfcXVvdGFzYCBkaXNwbGF5aW5nIHRoZSBjdXJyZW50IHN0YXRlIGFzIGNhbGN1bGF0ZWQgb3IgaXMgdGhlIGFjdHVhbCBiZWhhdmlvciBjb25mbGljdGluZyB3aXRoIHRoaXMgdmFsdWU/IEZyb20gaGVyZSwgSSB3aWxsIGxpa2VseSBnbyBvbiB0byBjaGVjayBob3cgdGhlc2UgcXVvdGFzIGFyZSBiZWluZyB1cGRhdGVkLCBvciBob3cgdGhlc2UgcXVvdGFzIGFyZSBlZmZlY3RpbmcgdGhlIHVuZGVybHlpbmcgYmVoYXZpb3IsIG1heWJlIGNvbXBhcmUgaXQgdG8gYSBjb250cm9sIHNldHVwIHRvIG9ic2VydmUgdGhlIGVmZmVjdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA0OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3N5c2ZzX3VwZF9zY2hlbWVzX2VmZmVjdGl2ZV9xdW90YXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYz0yMTUyPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfY29tbWl0X3NjaGVtZXNfcXVvdGFfZ29hbHModm9pZCAqZGF0YSlcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIxNjktLypcbm1tL2RhbW9uL3N5c2ZzLmM6MjE3MDogKiBkYW1vbl9zeXNmc191cGRfc2NoZW1lc19lZmZlY3RpdmVfcXVvdGFzKCkgLSBVcGRhdGUgc2NoZW1lcyBlZmZlY3RpdmUgcXVvdGFzXG5tbS9kYW1vbi9zeXNmcy5jLTIxNzEtICogc3lzZnMgZmlsZXMuXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMTc4LSAqL1xubW0vZGFtb24vc3lzZnMuYzoyMTc5OnN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdXBkX3NjaGVtZXNfZWZmZWN0aXZlX3F1b3Rhcyh2b2lkICpkYXRhKVxubW0vZGFtb24vc3lzZnMuYy0yMTgwLXtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIyMTk9c3RhdGljIGludCBkYW1vbl9zeXNmc19yZXBlYXRfY2FsbF9mbih2b2lkICpkYXRhKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjIzNS1cdGRhbW9uX3N5c2ZzX3VwZF9zY2hlbWVzX3N0YXRzKHN5c2ZzX2tkYW1vbmQpO1xubW0vZGFtb24vc3lzZnMuYzoyMjM2Olx0ZGFtb25fc3lzZnNfdXBkX3NjaGVtZXNfZWZmZWN0aXZlX3F1b3RhcyhzeXNmc19rZGFtb25kKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMjIzNy1vdXQ6XG4tLVxubW0vZGFtb24vc3lzZnMuYz0yMzYzPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfaGFuZGxlX2NtZChlbnVtIGRhbW9uX3N5c2ZzX2NtZCBjbWQsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMzkyLVx0XHRyZXR1cm4gZGFtb25fc3lzZnNfZGFtb25fY2FsbChcbm1tL2RhbW9uL3N5c2ZzLmM6MjM5MzpcdFx0XHRcdGRhbW9uX3N5c2ZzX3VwZF9zY2hlbWVzX2VmZmVjdGl2ZV9xdW90YXMsXG5tbS9kYW1vbi9zeXNmcy5jLTIzOTQtXHRcdFx0XHRrZGFtb25kKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjczNDYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0JiMzOTtzIGdvaW5nIHRocm91Z2ggbXkgbWluZCwgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgaWYgSSYjMzk7bSB0aGUgZXhwZXJ0OgoKKipEaXZpbmcgaW50byBgZGFtb25fc3lzZnNfdXBkX3NjaGVtZXNfZWZmZWN0aXZlX3F1b3Rhc2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYGRhbW9uX3N5c2ZzX3VwZF9zY2hlbWVzX2VmZmVjdGl2ZV9xdW90YXNgIGZpbGUuIEltbWVkaWF0ZWx5LCBJJiMzOTttIHRoaW5raW5nOiB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIHRoZSBEeW5hbWljIEFkYXB0aXZlIE1lbW9yeSBPcHRpbWl6ZXIgKERBTU9OKSBzeXN0ZW0gYW5kIGhvdyBpdCBpbnRlcmZhY2VzIHRocm91Z2ggdGhlIHN5c2ZzIGZpbGVzeXN0ZW0gdG8gbWFuYWdlIHVwZGF0ZSBzY2hlbWVzIGFuZCB0aGVpciBlZmZlY3RpdmUgcXVvdGFzLiBTbywgaXQmIzM5O3MgYWJvdXQgY29udHJvbCBhbmQgbW9uaXRvcmluZywgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBtZW1vcnkgcmVjbGFtYXRpb24gb3Igb3B0aW1pemF0aW9uLgoKR2l2ZW4gdGhlIG5hbWluZywgSSBhbnRpY2lwYXRlIHRoaXMgZmlsZSB3aWxsIGV4cG9zZSBkZXRhaWxzIHJlZ2FyZGluZyB0aGUgcXVvdGFzIGVuZm9yY2VkIG9yIGFwcGxpZWQgdG8gdGhlIGRpZmZlcmVudCB1cGRhdGUgc2NoZW1lcyB0aGF0IERBTU9OIHN1cHBvcnRzLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgaW5mb3JtYXRpb24gcmVmbGVjdGluZyBob3cgdGhlIHN5c3RlbSBpcyBjdXJyZW50bHkgYmVoYXZpbmcgYmFzZWQgb24gdGhlc2UgZGVmaW5lZCBzY2hlbWVzLiBUaGlzIGxpa2VseSB0cmFuc2xhdGVzIHRvIGhvdyBhZ2dyZXNzaXZlbHkgREFNT04gd2lsbCByZWNsYWltIG1lbW9yeSBvciBwZXJmb3JtIHNwZWNpZmljIG9wdGltaXphdGlvbnMgYmFzZWQgb24gdXNhZ2UgcGF0dGVybnMgYW5kIHByZWRlZmluZWQgc2V0dGluZ3MuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3Iga2V5IHBhcmFtZXRlcnMgc3VjaCBhcyB0aGUgbWVtb3J5IHJlZ2lvbiBzaXplLCB1cGRhdGUgcGVyaW9kcywgdGhyZXNob2xkIHZhbHVlcywgYW5kIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucyB0aGF0IGltcGFjdCBxdW90YSBlbmZvcmNlbWVudC4KCkkmIzM5O20gcHJlcGFyZWQgdG8gaW50ZXJwcmV0IHRoZSBkYXRhLCB1bmRlcnN0YW5kaW5nIHRoYXQgdGhlIGVmZmVjdGl2ZSBxdW90YXMgYXJlIHByb2JhYmx5IGNhbGN1bGF0ZWQgYW5kIGFkanVzdGVkIGR5bmFtaWNhbGx5IGJ5IERBTU9OIGJhc2VkIG9uIHZhcmlvdXMgZmFjdG9ycywgcGVyaGFwcyBpbmNsdWRpbmcgYXZhaWxhYmxlIG1lbW9yeSwgb3ZlcmFsbCBzeXN0ZW0gbG9hZCwgYW5kIHBvdGVudGlhbGx5IGV2ZW4gdXNlci1kZWZpbmVkIHR1bmFibGVzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgdGhlIGludGVycGxheSBiZXR3ZWVuIGRpZmZlcmVudCB1cGRhdGUgc2NoZW1lcyBhbmQgaG93IHRoZWlyIHF1b3RhcyBtaWdodCBiZSBwcmlvcml0aXplZCBvciB3ZWlnaHRlZC4gVWx0aW1hdGVseSwgSSYjMzk7bSBob3BpbmcgdGhpcyB3aWxsIGlsbHVtaW5hdGUgaG93IERBTU9OJiMzOTtzIHVwZGF0ZSBsb2dpYyB3b3JrcyBhbmQgcHJvdmlkZSBpbnNpZ2h0IGludG8gb3B0aW1pemluZyB0aGUgc3lzdGVtJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTc5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxNzk6XHRzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3VwZF9zY2hlbWVzX2VmZmVjdGl2ZV9xdW90YXModm9pZCAqZGF0YSlcbjIxODA6XHR7XG4yMTgxOlx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZCA9IGRhdGE7XG4yMTgyOlx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHggPSBrZGFtb25kLVx1MDAzZWRhbW9uX2N0eDtcbjIxODM6XHRcbjIxODQ6XHRcdGRhbW9zX3N5c2ZzX3VwZGF0ZV9lZmZlY3RpdmVfcXVvdGFzKFxuMjE4NTpcdFx0XHRcdGtkYW1vbmQtXHUwMDNlY29udGV4dHMtXHUwMDNlY29udGV4dHNfYXJyWzBdLVx1MDAzZXNjaGVtZXMsIGN0eCk7XG4yMTg2Olx0XHRyZXR1cm4gMDtcbjIxODc6XHR9XG4yMTg4Olx0XG4yMTg5Olx0c3RhdGljIGludCBkYW1vbl9zeXNmc191cGRfdHVuZWRfaW50ZXJ2YWxzKHZvaWQgKmRhdGEpXG4yMTkwOlx0e1xuMjE5MTpcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQgPSBkYXRhO1xuMjE5MjpcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4ID0ga2RhbW9uZC1cdTAwM2VkYW1vbl9jdHg7XG4yMTkzOlx0XG4yMTk0Olx0XHRrZGFtb25kLVx1MDAzZWNvbnRleHRzLVx1MDAzZWNvbnRleHRzX2FyclswXS1cdTAwM2VhdHRycy1cdTAwM2VpbnRlcnZhbHMtXHUwMDNlc2FtcGxlX3VzID1cbjIxOTU6XHRcdFx0Y3R4LVx1MDAzZWF0dHJzLnNhbXBsZV9pbnRlcnZhbDtcbjIxOTY6XHRcdGtkYW1vbmQtXHUwMDNlY29udGV4dHMtXHUwMDNlY29udGV4dHNfYXJyWzBdLVx1MDAzZWF0dHJzLVx1MDAzZWludGVydmFscy1cdTAwM2VhZ2dyX3VzID1cbjIxOTc6XHRcdFx0Y3R4LVx1MDAzZWF0dHJzLmFnZ3JfaW50ZXJ2YWw7XG4yMTk4Olx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgxMjIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBkYW1vc19zeXNmc191cGRhdGVfZWZmZWN0aXZlX3F1b3Rhc2AgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBjb2RlIGlzIGRvaW5nIOKAkyBhbmQgaWRlYWxseSwgaG93IGl0JiMzOTtzICpzdXBwb3NlZCogdG8gYmUgZG9pbmcgaXQuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBmaXJzdCwgdHJ5aW5nIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGlucHV0IGFyZ3VtZW50cywgd2hhdCBkYXRhIHN0cnVjdHVyZXMgaXQmIzM5O3Mgd29ya2luZyB3aXRoLCBhbmQgdGhlIGV4cGVjdGVkIG91dHB1dCBvciBzaWRlIGVmZmVjdHMuIElzIHRoaXMgdG91Y2hpbmcgc3lzZnMgZGlyZWN0bHk/IElmIHNvLCB3aGF0IGF0dHJpYnV0ZXM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGxvY2tpbmcgbWVjaGFuaXNtcyBiZWluZyB1c2VkPyBJIG5lZWQgdG8gaW1tZWRpYXRlbHkgbG9vayBmb3IgcG90ZW50aWFsIGVycm9yIHBhdGhzIOKAkyB3aGF0IGhhcHBlbnMgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcgZHVyaW5nIGEgd3JpdGUsIG9yIGlmIHNvbWUgY3JpdGljYWwgcmVzb3VyY2UgaXNuJiMzOTt0IGF2YWlsYWJsZT8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHNpZ25zIG9mIG1lbW9yeSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiwgZXJyb3IgaGFuZGxpbmcgd2l0aCByZWxldmFudCByZXR1cm4gY29kZXMgYW5kL29yIGxvZyBtZXNzYWdlcy4gTXkgcHJpbWFyeSBmb2N1cyBpcyBvbiBob3cgaXQgbWFuYWdlcyBxdW90YXMgYW5kLCBzcGVjaWZpY2FsbHksIGhvdyBpdCAqdXBkYXRlcyogdGhlIGVmZmVjdGl2ZSBxdW90YXMgdmlhIHN5c2ZzLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHBvc3NpYmxlIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGNvbXBvbmVudHMgdGhhdCBtYXkgYmUgcmVhZGluZyBvciB3cml0aW5nIHRvIHRoZSBzYW1lIHN5c2ZzIGF0dHJpYnV0ZXMgYXQgdGhlIHNhbWUgdGltZS4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IGNvbW1lbnRzIGV4cGxhaW5pbmcgdGhlIGludGVudCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3Nfc3lzZnNfdXBkYXRlX2VmZmVjdGl2ZV9xdW90YXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMtY29tbW9uLmg9NTQ9aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTYtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo1Nzp2b2lkIGRhbW9zX3N5c2ZzX3VwZGF0ZV9lZmZlY3RpdmVfcXVvdGFzKFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTgtXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yODk0PWludCBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTI4LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI5Mjk6dm9pZCBkYW1vc19zeXNmc191cGRhdGVfZWZmZWN0aXZlX3F1b3Rhcyhcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTMwLVx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIxNzk9c3RhdGljIGludCBkYW1vbl9zeXNmc191cGRfc2NoZW1lc19lZmZlY3RpdmVfcXVvdGFzKHZvaWQgKmRhdGEpXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMTgzLVxubW0vZGFtb24vc3lzZnMuYzoyMTg0Olx0ZGFtb3Nfc3lzZnNfdXBkYXRlX2VmZmVjdGl2ZV9xdW90YXMoXG5tbS9kYW1vbi9zeXNmcy5jLTIxODUtXHRcdFx0a2RhbW9uZC1cdTAwM2Vjb250ZXh0cy1cdTAwM2Vjb250ZXh0c19hcnJbMF0tXHUwMDNlc2NoZW1lcywgY3R4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg4MTEKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBkYW1vc19zeXNmc191cGRhdGVfZWZmZWN0aXZlX3F1b3Rhc2AgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBkb2luZywgc3BlY2lmaWNhbGx5IGhvdyBpdCYjMzk7cyB1cGRhdGluZyBlZmZlY3RpdmUgcXVvdGFzLiBCYXNlZCBvbiB0aGUgbmFtZSwgaXQgc2VlbXMgcmVsYXRlZCB0byB0aGUgc3lzZnMgaW50ZXJmYWNlLCBzbyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgZmlsZSBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHVzZWQsIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMgZW1wbG95ZWQgdG8gZW5zdXJlIHRocmVhZCBzYWZldHksIGFuZCBhbnkgZXJyb3IgaGFuZGxpbmcgdGhhdCYjMzk7cyBwcmVzZW50LiBJJiMzOTtsbCBiZSBleHBlY3RpbmcgdG8gZmluZCBkZXRhaWxzIG9uIGhvdyB0aGUgcXVvdGEgdmFsdWVzIGFyZSBjYWxjdWxhdGVkLCBhbmQgaG93IHRoZXNlIGNhbGN1bGF0aW9ucyBhcmUgaW50ZWdyYXRlZCBpbnRvIHRoZSBxdW90YSBzeXN0ZW0uIEkmIzM5O2xsIGJlIGFuYWx5emluZyBlYWNoIGxpbmUgb2YgdGhlIGltcGxlbWVudGF0aW9uLCBsaW5lIGJ5IGxpbmUuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBjb2RlIGlzIHdlbGwtY29tbWVudGVkIGFuZCBlYXN5IHRvIGZvbGxvdy4gSSBob3BlIGl0JiMzOTtzIHdlbGwtd3JpdHRlbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTI5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI5Mjk6XHR2b2lkIGRhbW9zX3N5c2ZzX3VwZGF0ZV9lZmZlY3RpdmVfcXVvdGFzKFxuMjkzMDpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbjI5MzE6XHRcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuMjkzMjpcdHtcbjI5MzM6XHRcdHN0cnVjdCBkYW1vcyAqc2NoZW1lO1xuMjkzNDpcdFx0aW50IHNjaGVtZXNfaWR4ID0gMDtcbjI5MzU6XHRcbjI5MzY6XHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzY2hlbWUsIGN0eCkge1xuMjkzNzpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzICpzeXNmc19xdW90YXM7XG4yOTM4Olx0XG4yOTM5Olx0XHRcdC8qIHVzZXIgY291bGQgaGF2ZSByZW1vdmVkIHRoZSBzY2hlbWUgc3lzZnMgZGlyICovXG4yOTQwOlx0XHRcdGlmIChzY2hlbWVzX2lkeCBcdTAwM2U9IHN5c2ZzX3NjaGVtZXMtXHUwMDNlbnIpXG4yOTQxOlx0XHRcdFx0YnJlYWs7XG4yOTQyOlx0XG4yOTQzOlx0XHRcdHN5c2ZzX3F1b3RhcyA9XG4yOTQ0Olx0XHRcdFx0c3lzZnNfc2NoZW1lcy1cdTAwM2VzY2hlbWVzX2FycltzY2hlbWVzX2lkeCYjNDM7JiM0MztdLVx1MDAzZXF1b3RhcztcbjI5NDU6XHRcdFx0c3lzZnNfcXVvdGFzLVx1MDAzZWVmZmVjdGl2ZV9zeiA9IHNjaGVtZS1cdTAwM2VxdW90YS5lc3o7XG4yOTQ2Olx0XHR9XG4yOTQ3Olx0fVxuMjk0ODpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTM1MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDcxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEluZm9ybWF0aW9uIExlYWthZ2UgYW5kIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFVzYWdlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBgbGFzdF9wc2lfdG90YWxgIGlzIHB1cmVseSBpbnRlcm5hbCBhbmQgbm90IGV4cG9zZWQgdG8gdXNlcnNwYWNlLCB3aGljaCBpcyBnb29kLiBUaGUgYGN1cnJlbnRfdmFsdWVgIGlzIG9ubHkgdXNlci12aXNpYmxlIGZvciBpbnB1dCwgd2hpY2ggYWxzbyBzZWVtZWQgc2FmZS4gQnV0IHRoZW4gSSByZWFsaXplZCBgY3VycmVudF92YWx1ZV9zaG93YCBwcmludHMgYGdvYWwtJmd0O2N1cnJlbnRfdmFsdWVgLCBub3Qgc29tZSBkZXJpdmVkIG9yIHNhbml0aXplZCB2YWx1ZS4gSG93ZXZlciwgdGhlIGtlcm5lbCYjMzk7cyBgZGFtb3NfcXVvdGFfZ29hbC0mZ3Q7Y3VycmVudF92YWx1ZWAgaXMgbmV2ZXIgZGlyZWN0bHkgZXhwb3NlZC4gU28sIG5vIGluZm9ybWF0aW9uIGxlYWsgdGhlcmUuIFRoYXQmIzM5O3MgYSByZWxpZWYuCgpUaGUgbmV4dCBjb25jZXJuIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJZiBgbGFzdF9wc2lfdG90YWxgIHdhc24mIzM5O3QgaW5pdGlhbGl6ZWQsIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYCB3b3VsZCB1c2UgaXQ6IEl0IGNhbGN1bGF0ZXMgYGdvYWwtJmd0O2N1cnJlbnRfdmFsdWVgIGJ5IHN1YnRyYWN0aW5nIGl0IGZyb20gYG5vd19wc2lfdG90YWxgLiBBbmQgdGhlbiBgZ29hbC0mZ3Q7Y3VycmVudF92YWx1ZWAgaXMgdXNlZCBpbiBgZGFtb3NfcXVvdGFfc2NvcmVgLCBzcGVjaWZpY2FsbHkgaW4gY2FsY3VsYXRpbmcgdGhlIGBoaWdoZXN0X3Njb3JlYC4gVGhhdCBgaGlnaGVzdF9zY29yZWAgaXMgdXNlZCB0byBhZGp1c3QgdGhlIHF1b3RhIHNpemUsIHNvIGlmIHRoaXMgdmFsdWUgaXMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLCB0aGUgcXVvdGEgYWRqdXN0bWVudCB3b3VsZCBiZSByYW5kb20vd3JvbmcgZm9yIHRoZSBmaXJzdCBjeWNsZS4gVGhpcyBpcyBhIGxvZ2ljIGJ1ZyB0aGF0IGNvdWxkIGhhdmUgc2VyaW91cyBjb25zZXF1ZW5jZXMuCgpXYWl0LCBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgIHVzZXMgYGttYWxsb2Nfb2JqYCwgd2hpY2ggKmRvZXNuJiMzOTt0KiB6ZXJvIG1lbW9yeS4gU28sIGBsYXN0X3BzaV90b3RhbGAgKmlzKiBpbmRlZWQgdW5pbml0aWFsaXplZC4gVGhlIHBhdGNoIGZpeGVzIHRoaXMgYnkgaW5pdGlhbGl6aW5nIGBsYXN0X3BzaV90b3RhbGAuCgpNeSBxdWVzdGlvbiB0aGVuIGJlY2FtZTogV291bGQgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBjYXRjaCB0aGlzPyBZZXMsIGl0IHdvdWxkLiBLTVNBTiBkZXRlY3RzIHRoZSB1c2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY2FsY3VsYXRpb25zIHRoYXQgYWZmZWN0IGNvbnRyb2wgZmxvdyBvciBhcmUgcGFzc2VkIHRvIG90aGVyIGZ1bmN0aW9ucy4KCkRvZXMgYGdvYWwtJmd0O2N1cnJlbnRfdmFsdWVgIGFmZmVjdCBjb250cm9sIGZsb3c/IGBoaWdoZXN0X3Njb3JlYCB1c2VzIGBnb2FsLSZndDtjdXJyZW50X3ZhbHVlYCB0byBjYWxjdWxhdGUgYHF1b3RhLSZndDtlc3pgIChlZmZlY3RpdmUgc2l6ZSkuIFRoYXQgYHF1b3RhLSZndDtlc3pgIGlzIHVzZWQgaW4gYGRhbW9zX2FkanVzdF9xdW90YWAsIHdoaWNoIGRldGVybWluZXMgaG93IG11Y2ggbWVtb3J5IERBTU9OIHJlY2xhaW1zLiBUaGlzIG1lYW5zIGFuIGluY29ycmVjdCB2YWx1ZSBvZiBgcXVvdGEtJmd0O2VzemAgY2FuIGxlYWQgdG8gdW5wcmVkaWN0YWJsZSBiZWhhdmlvci4gSXQgaXMgbm90IGp1c3QgYSBidWcsIGl0IGNvdWxkIGhhdmUgYW4gZWZmZWN0IG9uIGNvbnRyb2wgZmxvdy4gSXTigJlzIGNlcnRhaW5seSBhIGZ1bmN0aW9uYWwgYnVnLCBzaW5jZSBgcXVvdGEtJmd0O2VzemAgaGFzIGFuIGltcG9ydGFudCBmdW5jdGlvbiBhbmQgdGhpcyBtYWtlcyBpdCBpbmNvcnJlY3QsIEtNU0FOIHdvdWxkIGNhdGNoIHRoZSB1c2Ugb2YgdW5pbml0aWFsaXplZCBgbGFzdF9wc2lfdG90YWxgIGluIGBub3dfcHNpX3RvdGFsIC0gZ29hbC0mZ3Q7bGFzdF9wc2lfdG90YWxgLgoKS01TQU4gcmVwb3J0cyB1bmluaXRpYWxpemVkIG1lbW9yeSBpZiB1c2VkIGluIGEgYnJhbmNoIG9yIHdoZW4gY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgYXMgYSBwb2ludGVyL2luZGV4LiBJcyBgZ29hbC0mZ3Q7Y3VycmVudF92YWx1ZWAgdXNlZCBpbiBhIGJyYW5jaD8gSSYjMzk7ZCBoYXZlIHRvIGxvb2sgYXQgYG11bHRfZnJhY2Agc3BlY2lmaWNhbGx5IHRvIGNvbmZpcm0gdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXVsdF9mcmFjJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tYXRoLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tYXRoLmg9MTE2PV9fU1RSVUNUX0ZSQUNUKHUzMilcbi0tXG5pbmNsdWRlL2xpbnV4L21hdGguaC0xMTktLyogQ2FsY3VsYXRlIFwmIzM0O3ggKiBuIC8gZFwmIzM0OyB3aXRob3V0IHVubmVjZXNzYXJ5IG92ZXJmbG93IG9yIGxvc3Mgb2YgcHJlY2lzaW9uLiAqL1xuaW5jbHVkZS9saW51eC9tYXRoLmg6MTIwOiNkZWZpbmUgbXVsdF9mcmFjKHgsIG4sIGQpXHRcXFxuaW5jbHVkZS9saW51eC9tYXRoLmgtMTIxLSh7XHRcdFx0XHRcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDc5MAoJCQkJCQkJb3V0cHV0OiAzMDAKCQkJCQkJCXRob3VnaHRzOiAyNDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEp1c3RpZmljYXRpb246IFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJlYWQgaW4gREFNT04gUXVvdGEgU2NvcmluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSBoYXZlIGBtdWx0X2ZyYWNgLCBwdXJlbHkgbWF0aGVtYXRpY2FsLCBubyBpc3N1ZSB0aGVyZS4gVGhlIHJlYWwgY29uY2VybiBpcyB0aGUgYG1heChoaWdoZXN0X3Njb3JlLCAuLi4pYCBjYWxsLiBgbWF4YCwgYXMgZGVmaW5lZCBieSB0aGUgbWFjcm8sIGNsZWFybHkgaW52b2x2ZXMgYSBjb21wYXJpc29uIOKAkyBhIGNvbmRpdGlvbmFsIGJyYW5jaC4gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaGUgY29yZSBwcm9ibGVtIGlzIHRoYXQgYGxhc3RfcHNpX3RvdGFsYCB3aXRoaW4gdGhlIGBkYW1vc19xdW90YV9nb2FsYCBzdHJ1Y3QgbWlnaHQgYmUgdW5pbml0aWFsaXplZC4gS01TQU4sIHdpdGggaXRzIGJpdC1sZXZlbCB0cmFja2luZywgd2lsbCBmbGFnIGFueSB1c2Ugb2YgYW4gdW5pbml0aWFsaXplZCB2YWx1ZSBpbiBhIGNvbmRpdGlvbmFsLCBhcyB3ZSBoYXZlIGhlcmUgd2l0aCB0aGUgYCZndDtgIGluIHRoZSBgbWF4YCBtYWNyby4KCk5vdywgaXMgdGhpcyBidWcgZXZlbiByZWFjaGFibGU/IERBTU9OJiMzOTtzIGBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVNgIGZlYXR1cmUsIGludHJvZHVjZWQgaW4gdjYuMTAgb3Igc28sIGlzIGtleSBoZXJlLiBVc2Vyc3BhY2UgY2FuIGNyZWF0ZSBhIERBTU9OIHNjaGVtZSB1c2luZyB0aGlzIG1ldHJpYy4gV2hlbiBzdWNoIGEgc2NoZW1lICpzdGFydHMqLCBgbGFzdF9wc2lfdG90YWxgIGlzIHVuaW5pdGlhbGl6ZWQuIFRoZSBmdW5jdGlvbiBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZWAgaXMgdGhlbiBjYWxsZWQgaW4gdGhlIGZpcnN0IGN5Y2xlLCB1c2luZyB0aGUgYGxhc3RfcHNpX3RvdGFsYC4gQmluZ28hIEtNU0FOIHdpbGwgY2F0Y2ggdGhpcy4KCkJ1dCB3YWl0LCB3b3VsZCBLQVNBTiBoYXZlIGNhdWdodCB0aGlzPyBOb3BlLiBLQVNBTiBvbmx5IGRldGVjdHMgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucy4gSXQgZG9lc24mIzM5O3QgY2FyZSBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyB3aXRoaW4gYWxsb2NhdGVkIHJlZ2lvbnMuIFNvLCB0aGlzIGlzIGEgcHVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGJ1Zy4KCkxldCYjMzk7cyBjb25maXJtIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgbGFzdF9wc2lfdG90YWxgLiBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgIGFsbG9jYXRlcyBpdCB2aWEgYGttYWxsb2Nfb2JqYC4gTG9va2luZyBhdCB0aGUgY29kZToKCmBgYGMKc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX25ld19xdW90YV9nb2FsKAoJCWVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljLAoJCXVuc2lnbmVkIGxvbmcgdGFyZ2V0X3ZhbHVlKQp7CglzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDsKCglnb2FsID0ga21hbGxvY19vYmooKmdvYWwpOwoJaWYgKCFnb2FsKQoJCXJldHVybiBOVUxMOwoJZ29hbC0mZ3Q7bWV0cmljID0gbWV0cmljOwoJZ29hbC0mZ3Q7dGFyZ2V0X3ZhbHVlID0gdGFyZ2V0X3ZhbHVlOwoJSU5JVF9MSVNUX0hFQUQoJmFtcDtnb2FsLSZndDtsaXN0KTsKCXJldHVybiBnb2FsOwp9CmBgYAoKWWVzLCBga21hbGxvY19vYmpgIGFsbG9jYXRlcyBidXQgKmRvZXNuJiMzOTt0KiBpbml0aWFsaXplIGl0LiBUaGlzIGZ1bmN0aW9uIGRvZXNuJiMzOTt0IGluaXRpYWxpemUgYGxhc3RfcHNpX3RvdGFsYC4gQmVmb3JlIHRoZSBwYXRjaCwgaXQgd2FzIG9ubHkgaW5pdGlhbGl6ZWQgaW4gYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uYCAob3Igbm90IGF0IGFsbCkuIFRoZSBwYXRjaCBhZGRlZCBpbml0aWFsaXphdGlvbiBvZiB0aGlzIHZhbHVlIGJ1dCBub3QgZm9yIHRoZSBmaXJzdCBjeWNsZS4gU28sIHByZS1wYXRjaCwgYGxhc3RfcHNpX3RvdGFsYCB3YXMgKm5ldmVyKiBpbml0aWFsaXplZCBvbiBnb2FsIGNyZWF0aW9uLCBhbmQgdGhlIHBhdGNoIGFkZHMgdGhlIGluaXRpYWxpemF0aW9uIGluIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbmAgYnV0IG5vdCBvbiBpbml0aWFsIGFsbG9jYXRpb24hIFRoZSBjb21tZW50IGluIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbGAgbWVudGlvbnMsICYjMzQ7a2VlcCBgbGFzdF9wc2lfdG90YWxgIGFzIGlzLCBzaW5jZSBpdCB3aWxsIGJlIHVwZGF0ZWQgaW4gbmV4dCBjeWNsZS4mIzM0OyBUaGlzIGNvbmZpcm1zIHRoZSBpbnRlbmRlZCBiZWhhdmlvcjogIHRoZSBpbml0aWFsIGN5Y2xlICptdXN0KiB1c2UgYW4gdW5pbml0aWFsaXplZCB2YWx1ZSEKClNvLCB5ZXMsIGl0JiMzOTtzIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZS4gVGhlIGJ1ZyBpcyBoZXJlIQoKSXMgdGhpcyBhIHNlY3VyaXR5IGlzc3VlPyBEZWZpbml0ZWx5LiBBbiB1bmluaXRpYWxpemVkIHJlYWQgY2FuIGluZmx1ZW5jZSB0aGUgcXVvdGEgc2NvcmUsIGFuZCB0aGUgcXVvdGEgc2NvcmUgaW1wYWN0cyBob3cgYWdncmVzc2l2ZWx5IERBTU9OIHJlY2xhaW1zIG1lbW9yeS4gQW4gYXR0YWNrZXIgY291bGQgcG90ZW50aWFsbHkgbWFuaXB1bGF0ZSBtZW1vcnkgcmVjbGFpbSBkZWNpc2lvbnMgYmFzZWQgb24gdGhlICpyYW5kb20qIGNvbnRlbnRzIG9mIHVuaW5pdGlhbGl6ZWQgaGVhcCBtZW1vcnkuIFRoaXMgaXMgYSBjbGFzc2ljIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSB2dWxuZXJhYmlsaXR5LiBLTVNBTiBpcyB0aGUgKnBlcmZlY3QqIHRvb2wgdG8gY2F0Y2ggdGhpcy4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhhdCBga21hbGxvY19vYmpgIGFjdHVhbGx5IGNhbGxzIGBrbWFsbG9jYCwgbm90IGBremFsbG9jYDoKCmBgYGMKI2RlZmluZSBrbWFsbG9jX29iaihWQVJfT1JfVFlQRSwgLi4uKSBcCglfX2FsbG9jX29ianMoa21hbGxvYywgZGVmYXVsdF9nZnAoX19WQV9BUkdTX18pLCB0eXBlb2YoVkFSX09SX1RZUEUpLCAxKQpgYGAKClllcCwgaXQgdXNlcyBga21hbGxvY2AuCgpUaGUgY2hhbmdlIGluIGBtbS9kYW1vbi9zeXNmcy5jYCBpcyBpcnJlbGV2YW50OyBpdCYjMzk7cyBqdXN0IGZpeGluZyBhIGtkYW1vbmQgcmVmcmVzaCBpbnRlcnZhbCBpc3N1ZS4KClNvLCB0aGUgYnVnIGlzIGRlZmluaXRlbHkgd2l0aCBgbGFzdF9wc2lfdG90YWxgLCB1c2VkIGluIGBub3dfcHNpX3RvdGFsIC0gZ29hbC0mZ3Q7bGFzdF9wc2lfdG90YWxgLCBhbmQgdGhpcyByZXN1bHQgaXMgdGhlbiB1c2VkIGluIGEgY29tcGFyaXNvbiB3aXRoaW4gYG1heChoaWdoZXN0X3Njb3JlLCAuLi4pYC4gS01TQU4gKndpbGwqIGNhdGNoIHRoaXMgYmVjYXVzZSBpdCB1c2VzIGFuIHVuaW5pdGlhbGl6ZWQgdmFsdWUgaW4gYSBjb25kaXRpb25hbCBicmFuY2guIFRoZXJlJiMzOTtzIG5vIHdheSBhcm91bmQgaXQuCgpMZXQmIzM5O3MgY29uZmlybSB0aGUgdHlwZSBvZiBgZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpYCBpcyBgdTY0YC4KCmBgYGMKdTY0IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwodm9pZCkKYGBgCgpHb29kLgoKTGV0JiMzOTtzIHJldmlldyB0aGUgS01TQU4gcnVsZXM6IFRoZSBwYXRjaCBtb2RpZmllZCBpbml0aWFsaXphdGlvbiBvZiBhIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgKGBkYW1vc19xdW90YV9nb2FsYCkgd2hlcmUKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBidWcgd2hlcmUgdGhlIGBsYXN0X3BzaV90b3RhbGAgZmllbGQgaW4gYHN0cnVjdCBkYW1vc19xdW90YV9nb2FsYCBpcyBsZWZ0IHVuaW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uLiBUaGUgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB1c2luZyBga21hbGxvY19vYmooKWAgKHdoaWNoIG1hcHMgdG8gYGttYWxsb2NgIGFuZCBkb2VzIG5vdCB6ZXJvIG1lbW9yeSkgaW4gYGRhbW9zX25ld19xdW90YV9nb2FsKClgLCBidXQgYGxhc3RfcHNpX3RvdGFsYCB3YXMgbm90IGluaXRpYWxpemVkLiBEdXJpbmcgdGhlIGZpcnN0IGV2YWx1YXRpb24gY3ljbGUsIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKClgIHJlYWRzIHRoaXMgdW5pbml0aWFsaXplZCBmaWVsZCB0byBjb21wdXRlIGBnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBub3dfcHNpX3RvdGFsIC0gZ29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbDtgLiBUaGlzIHVuaW5pdGlhbGl6ZWQgcmVzdWx0IGlzIHN1YnNlcXVlbnRseSB1c2VkIGluIGEgY29uZGl0aW9uYWwgYnJhbmNoICh2aWEgdGhlIGBtYXgoKWAgbWFjcm8pIGluIGBkYW1vc19xdW90YV9zY29yZSgpYCB0byBkZXRlcm1pbmUgdGhlIGhpZ2hlc3QgcXVvdGEgc2NvcmUsIHdoaWNoIGRpY3RhdGVzIG1lbW9yeSByZWNsYWltIGJlaGF2aW9yLlxuXG5TdGFuZGFyZCBLQVNBTiBvbmx5IGRldGVjdHMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWUgYnVnczsgaXQgZG9lcyBub3QgdHJhY2sgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIHdvdWxkIGNvbXBsZXRlbHkgbWlzcyB0aGlzIGJ1Zy4gS01TQU4sIG9uIHRoZSBvdGhlciBoYW5kLCB0cmFja3MgdW5pbml0aWFsaXplZCBtZW1vcnkgYXQgdGhlIGJpdCBsZXZlbCBhbmQgd2lsbCByZWxpYWJseSBmbGFnIHRoZSB1c2Ugb2YgdGhlIHVuaW5pdGlhbGl6ZWQgdmFsdWUgd2hlbiBpdCBhZmZlY3RzIGNvbnRyb2wgZmxvdyAoZS5nLiwgaW4gdGhlIGBtYXgoKWAgY29tcGFyaXNvbikuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBoaWdobHkganVzdGlmaWVkIHRvIGNhdGNoIHRoaXMgYW5kIHNpbWlsYXIgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGluIHRoZSBEQU1PTiBzdWJzeXN0ZW0uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGJ1ZyB3aGVyZSB0aGUgYGxhc3RfcHNpX3RvdGFsYCBmaWVsZCBpbiBgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWxgIGlzIGxlZnQgdW5pbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24uIFRoZSBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHVzaW5nIGBrbWFsbG9jX29iaigpYCAod2hpY2ggbWFwcyB0byBga21hbGxvY2AgYW5kIGRvZXMgbm90IHplcm8gbWVtb3J5KSBpbiBgZGFtb3NfbmV3X3F1b3RhX2dvYWwoKWAsIGJ1dCBgbGFzdF9wc2lfdG90YWxgIHdhcyBub3QgaW5pdGlhbGl6ZWQuIER1cmluZyB0aGUgZmlyc3QgZXZhbHVhdGlvbiBjeWNsZSwgYGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoKWAgcmVhZHMgdGhpcyB1bmluaXRpYWxpemVkIGZpZWxkIHRvIGNvbXB1dGUgYGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IG5vd19wc2lfdG90YWwgLSBnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsO2AuIFRoaXMgdW5pbml0aWFsaXplZCByZXN1bHQgaXMgc3Vic2VxdWVudGx5IHVzZWQgaW4gYSBjb25kaXRpb25hbCBicmFuY2ggKHZpYSB0aGUgYG1heCgpYCBtYWNybykgaW4gYGRhbW9zX3F1b3RhX3Njb3JlKClgIHRvIGRldGVybWluZSB0aGUgaGlnaGVzdCBxdW90YSBzY29yZSwgd2hpY2ggZGljdGF0ZXMgbWVtb3J5IHJlY2xhaW0gYmVoYXZpb3IuXG5cblN0YW5kYXJkIEtBU0FOIG9ubHkgZGV0ZWN0cyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzOyBpdCBkb2VzIG5vdCB0cmFjayB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgd291bGQgY29tcGxldGVseSBtaXNzIHRoaXMgYnVnLiBLTVNBTiwgb24gdGhlIG90aGVyIGhhbmQsIHRyYWNrcyB1bmluaXRpYWxpemVkIG1lbW9yeSBhdCB0aGUgYml0IGxldmVsIGFuZCB3aWxsIHJlbGlhYmx5IGZsYWcgdGhlIHVzZSBvZiB0aGUgdW5pbml0aWFsaXplZCB2YWx1ZSB3aGVuIGl0IGFmZmVjdHMgY29udHJvbCBmbG93IChlLmcuLCBpbiB0aGUgYG1heCgpYCBjb21wYXJpc29uKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIGhpZ2hseSBqdXN0aWZpZWQgdG8gY2F0Y2ggdGhpcyBhbmQgc2ltaWxhciB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgaW4gdGhlIERBTU9OIHN1YnN5c3RlbS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0MTo1OC44OTU0OTA2MzRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTAyMzkwNTA0NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzXCIsXG4gICAgXCJkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBidWcgd2hlcmUgdGhlIGBsYXN0X3BzaV90b3RhbGAgZmllbGQgaW4gYHN0cnVjdCBkYW1vc19xdW90YV9nb2FsYCBpcyBsZWZ0IHVuaW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uLiBUaGUgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB1c2luZyBga21hbGxvY19vYmooKWAgKHdoaWNoIG1hcHMgdG8gYGttYWxsb2NgIGFuZCBkb2VzIG5vdCB6ZXJvIG1lbW9yeSkgaW4gYGRhbW9zX25ld19xdW90YV9nb2FsKClgLCBidXQgYGxhc3RfcHNpX3RvdGFsYCB3YXMgbm90IGluaXRpYWxpemVkLiBEdXJpbmcgdGhlIGZpcnN0IGV2YWx1YXRpb24gY3ljbGUsIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKClgIHJlYWRzIHRoaXMgdW5pbml0aWFsaXplZCBmaWVsZCB0byBjb21wdXRlIGBnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gbm93X3BzaV90b3RhbCAtIGdvYWwtXFx1MDAzZWxhc3RfcHNpX3RvdGFsO2AuIFRoaXMgdW5pbml0aWFsaXplZCByZXN1bHQgaXMgc3Vic2VxdWVudGx5IHVzZWQgaW4gYSBjb25kaXRpb25hbCBicmFuY2ggKHZpYSB0aGUgYG1heCgpYCBtYWNybykgaW4gYGRhbW9zX3F1b3RhX3Njb3JlKClgIHRvIGRldGVybWluZSB0aGUgaGlnaGVzdCBxdW90YSBzY29yZSwgd2hpY2ggZGljdGF0ZXMgbWVtb3J5IHJlY2xhaW0gYmVoYXZpb3IuXFxuXFxuU3RhbmRhcmQgS0FTQU4gb25seSBkZXRlY3RzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3M7IGl0IGRvZXMgbm90IHRyYWNrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCB3b3VsZCBjb21wbGV0ZWx5IG1pc3MgdGhpcyBidWcuIEtNU0FOLCBvbiB0aGUgb3RoZXIgaGFuZCwgdHJhY2tzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGF0IHRoZSBiaXQgbGV2ZWwgYW5kIHdpbGwgcmVsaWFibHkgZmxhZyB0aGUgdXNlIG9mIHRoZSB1bmluaXRpYWxpemVkIHZhbHVlIHdoZW4gaXQgYWZmZWN0cyBjb250cm9sIGZsb3cgKGUuZy4sIGluIHRoZSBgbWF4KClgIGNvbXBhcmlzb24pLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgaGlnaGx5IGp1c3RpZmllZCB0byBjYXRjaCB0aGlzIGFuZCBzaW1pbGFyIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBpbiB0aGUgREFNT04gc3Vic3lzdGVtLlwiLFxuICBcIk5lZWRzS01TQU5cIjogdHJ1ZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgREFNT04gbG9naWMgdG8gcHJvcGVybHkgaW5pdGlhbGl6ZSBhbmQgY29tbWl0IHRoZSBgbGFzdF9wc2lfdG90YWxgIGZvciB0aGUgYERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AgcXVvdGEgbWV0cmljLiBJdCBhbHNvIGZpeGVzIHRoZSBgbmV4dF9yZWZyZXNoX2ppZmZpZXNgIGhhbmRsaW5nIGluIERBTU9OIHN5c2ZzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzeXNmcywgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDE6NTguODk1NDk0Nzk0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDYxNTY4NDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDE2ZGVhZThjYTgzMDUzYzY5ZWQ4M2ViMDRiZmZlOGQ5YTM0YjI4NVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAyNyAwNDo0MTo1NyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcXG5pbmRleCA2NDRkYWY1YTE2NTYwLi42ZjM2MGQ2MTM5MGFkIDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xcbkBAIC0xMTIyLDYgKzExMjIsOSBAQCBzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihcXG4gXFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKnNyYylcXG4ge1xcbiBcXHRzd2l0Y2ggKGRzdC1cXHUwMDNlbWV0cmljKSB7XFxuK1xcdGNhc2UgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTOlxcbitcXHRcXHRkc3QtXFx1MDAzZWxhc3RfcHNpX3RvdGFsID0gZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpO1xcbitcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQOlxcbiBcXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlA6XFxuIFxcdFxcdGRzdC1cXHUwMDNlbmlkID0gc3JjLVxcdTAwM2VuaWQ7XFxuQEAgLTExNDMsNyArMTE0Niw2IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxcbiBcXHRkc3QtXFx1MDAzZXRhcmdldF92YWx1ZSA9IHNyYy1cXHUwMDNldGFyZ2V0X3ZhbHVlO1xcbiBcXHRpZiAoZHN0LVxcdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfVVNFUl9JTlBVVClcXG4gXFx0XFx0ZHN0LVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gc3JjLVxcdTAwM2VjdXJyZW50X3ZhbHVlO1xcbi1cXHQvKiBrZWVwIGxhc3RfcHNpX3RvdGFsIGFzIGlzLCBzaW5jZSBpdCB3aWxsIGJlIHVwZGF0ZWQgaW4gbmV4dCBjeWNsZSAqL1xcbiBcXHRkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihkc3QsIHNyYyk7XFxuIH1cXG4gXFxuQEAgLTM3MjcsNiArMzcyOSwxNyBAQCBzdGF0aWMgaW50IGtkYW1vbmRfd2FpdF9hY3RpdmF0aW9uKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4gXFx0cmV0dXJuIC1FQlVTWTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgZGFtb3NfaW5pdF9xdW90YV9nb2FsX2xhc3RfcHNpKHN0cnVjdCBkYW1vcyAqcylcXG4re1xcbitcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcXG4rXFxuK1xcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgXFx1MDAyNnMtXFx1MDAzZXF1b3RhKSB7XFxuK1xcdFxcdGlmIChnb2FsLVxcdTAwM2VtZXRyaWMgIT0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0Z29hbC1cXHUwMDNlbGFzdF9wc2lfdG90YWwgPSBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKCk7XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIHZvaWQga2RhbW9uZF9pbml0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBzYW1wbGVfaW50ZXJ2YWwgPSBjdHgtXFx1MDAzZWF0dHJzLnNhbXBsZV9pbnRlcnZhbCA/XFxuQEAgLTM3NDMsNiArMzc1Niw3IEBAIHN0YXRpYyB2b2lkIGtkYW1vbmRfaW5pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbiBcXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUoc2NoZW1lLCBjdHgpIHtcXG4gXFx0XFx0ZGFtb3Nfc2V0X25leHRfYXBwbHlfc2lzKHNjaGVtZSwgY3R4KTtcXG4gXFx0XFx0ZGFtb3Nfc2V0X2ZpbHRlcnNfZGVmYXVsdF9yZWplY3Qoc2NoZW1lKTtcXG4rXFx0XFx0ZGFtb3NfaW5pdF9xdW90YV9nb2FsX2xhc3RfcHNpKHNjaGVtZSk7XFxuIFxcdH1cXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMuYyBiL21tL2RhbW9uL3N5c2ZzLmNcXG5pbmRleCBlMzg1OGZmYWI0YjIyLi5mMDViMjU2YzkwZWU3IDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL3N5c2ZzLmNcXG4rKysgYi9tbS9kYW1vbi9zeXNmcy5jXFxuQEAgLTE3ODksNiArMTc4OSw3IEBAIHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kIHtcXG4gXFx0c3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHRzICpjb250ZXh0cztcXG4gXFx0c3RydWN0IGRhbW9uX2N0eCAqZGFtb25fY3R4O1xcbiBcXHR1bnNpZ25lZCBpbnQgcmVmcmVzaF9tcztcXG4rXFx0dW5zaWduZWQgbG9uZyBuZXh0X3JlZnJlc2hfamlmZmllcztcXG4gfTtcXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqZGFtb25fc3lzZnNfa2RhbW9uZF9hbGxvYyh2b2lkKVxcbkBAIC0yMjE1LDE3ICsyMjE2LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zeXNmc19idWlsZF9jdHgoXFxuIFxcdHJldHVybiBjdHg7XFxuIH1cXG4gXFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXM7XFxuLVxcbiBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3JlcGVhdF9jYWxsX2ZuKHZvaWQgKmRhdGEpXFxuIHtcXG4gXFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKnN5c2ZzX2tkYW1vbmQgPSBkYXRhO1xcbiBcXG4gXFx0aWYgKCFzeXNmc19rZGFtb25kLVxcdTAwM2VyZWZyZXNoX21zKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4tXFx0aWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXMpKVxcbitcXHRpZiAodGltZV9iZWZvcmUoamlmZmllcywgc3lzZnNfa2RhbW9uZC1cXHUwMDNlbmV4dF9yZWZyZXNoX2ppZmZpZXMpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4tXFx0ZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllcyA9IGppZmZpZXMgK1xcbitcXHRzeXNmc19rZGFtb25kLVxcdTAwM2VuZXh0X3JlZnJlc2hfamlmZmllcyA9IGppZmZpZXMgK1xcbiBcXHRcXHRtc2Vjc190b19qaWZmaWVzKHN5c2ZzX2tkYW1vbmQtXFx1MDAzZXJlZnJlc2hfbXMpO1xcbiBcXG4gXFx0aWYgKCFtdXRleF90cnlsb2NrKFxcdTAwMjZkYW1vbl9zeXNmc19sb2NrKSlcXG5AQCAtMjI3Myw4ICsyMjcyLDggQEAgc3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxcbiBcXHR9XFxuIFxcdGtkYW1vbmQtXFx1MDAzZWRhbW9uX2N0eCA9IGN0eDtcXG4gXFxuLVxcdGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXMgPVxcbi1cXHRcXHRqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhrZGFtb25kLVxcdTAwM2VyZWZyZXNoX21zKTtcXG4rXFx0a2RhbW9uZC1cXHUwMDNlbmV4dF9yZWZyZXNoX2ppZmZpZXMgPSBqaWZmaWVzICtcXG4rXFx0XFx0bXNlY3NfdG9famlmZmllcyhrZGFtb25kLVxcdTAwM2VyZWZyZXNoX21zKTtcXG4gXFxuIFxcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXFx1MDAzZWZuID0gZGFtb25fc3lzZnNfcmVwZWF0X2NhbGxfZm47XFxuIFxcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXFx1MDAzZWRhdGEgPSBrZGFtb25kO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0MjowMC4zNTc3MDE3MzFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2NjQwNTEwMDgzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vc19jb21taXRfcXVvdGFfZ29hbHNcIixcbiAgICBcImRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBEQU1PTiBsb2dpYyB0byBwcm9wZXJseSBpbml0aWFsaXplIGFuZCBjb21taXQgdGhlIGBsYXN0X3BzaV90b3RhbGAgZm9yIHRoZSBgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTYCBxdW90YSBtZXRyaWMuIEl0IGFsc28gZml4ZXMgdGhlIGBuZXh0X3JlZnJlc2hfamlmZmllc2AgaGFuZGxpbmcgaW4gREFNT04gc3lzZnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHN5c2ZzLCBtYWtpbmcgdGhlbSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkMTZkZWFlOGNhODMwNTNjNjllZDgzZWIwNGJmZmU4ZDlhMzRiMjg1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjcgMDQ6NDE6NTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDY0NGRhZjVhMTY1NjAuLjZmMzYwZDYxMzkwYWQgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTExMjIsNiArMTEyMiw5IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKFxuIFx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqc3JjKVxuIHtcbiBcdHN3aXRjaCAoZHN0LVx1MDAzZW1ldHJpYykge1xuK1x0Y2FzZSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVM6XG4rXHRcdGRzdC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKTtcbitcdFx0YnJlYWs7XG4gXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlA6XG4gXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlA6XG4gXHRcdGRzdC1cdTAwM2VuaWQgPSBzcmMtXHUwMDNlbmlkO1xuQEAgLTExNDMsNyArMTE0Niw2IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxuIFx0ZHN0LVx1MDAzZXRhcmdldF92YWx1ZSA9IHNyYy1cdTAwM2V0YXJnZXRfdmFsdWU7XG4gXHRpZiAoZHN0LVx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9VU0VSX0lOUFVUKVxuIFx0XHRkc3QtXHUwMDNlY3VycmVudF92YWx1ZSA9IHNyYy1cdTAwM2VjdXJyZW50X3ZhbHVlO1xuLVx0Lyoga2VlcCBsYXN0X3BzaV90b3RhbCBhcyBpcywgc2luY2UgaXQgd2lsbCBiZSB1cGRhdGVkIGluIG5leHQgY3ljbGUgKi9cbiBcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKGRzdCwgc3JjKTtcbiB9XG4gXG5AQCAtMzcyNyw2ICszNzI5LDE3IEBAIHN0YXRpYyBpbnQga2RhbW9uZF93YWl0X2FjdGl2YXRpb24oc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuIFx0cmV0dXJuIC1FQlVTWTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgZGFtb3NfaW5pdF9xdW90YV9nb2FsX2xhc3RfcHNpKHN0cnVjdCBkYW1vcyAqcylcbit7XG4rXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcbitcbitcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgXHUwMDI2cy1cdTAwM2VxdW90YSkge1xuK1x0XHRpZiAoZ29hbC1cdTAwM2VtZXRyaWMgIT0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsID0gZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpO1xuK1x0fVxuK31cbitcbiBzdGF0aWMgdm9pZCBrZGFtb25kX2luaXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHNhbXBsZV9pbnRlcnZhbCA9IGN0eC1cdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWwgP1xuQEAgLTM3NDMsNiArMzc1Niw3IEBAIHN0YXRpYyB2b2lkIGtkYW1vbmRfaW5pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuIFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHNjaGVtZSwgY3R4KSB7XG4gXHRcdGRhbW9zX3NldF9uZXh0X2FwcGx5X3NpcyhzY2hlbWUsIGN0eCk7XG4gXHRcdGRhbW9zX3NldF9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0KHNjaGVtZSk7XG4rXHRcdGRhbW9zX2luaXRfcXVvdGFfZ29hbF9sYXN0X3BzaShzY2hlbWUpO1xuIFx0fVxuIH1cbiBcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy5jIGIvbW0vZGFtb24vc3lzZnMuY1xuaW5kZXggZTM4NThmZmFiNGIyMi4uZjA1YjI1NmM5MGVlNyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3N5c2ZzLmNcbisrKyBiL21tL2RhbW9uL3N5c2ZzLmNcbkBAIC0xNzg5LDYgKzE3ODksNyBAQCBzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCB7XG4gXHRzdHJ1Y3QgZGFtb25fc3lzZnNfY29udGV4dHMgKmNvbnRleHRzO1xuIFx0c3RydWN0IGRhbW9uX2N0eCAqZGFtb25fY3R4O1xuIFx0dW5zaWduZWQgaW50IHJlZnJlc2hfbXM7XG4rXHR1bnNpZ25lZCBsb25nIG5leHRfcmVmcmVzaF9qaWZmaWVzO1xuIH07XG4gXG4gc3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICpkYW1vbl9zeXNmc19rZGFtb25kX2FsbG9jKHZvaWQpXG5AQCAtMjIxNSwxNyArMjIxNiwxNSBAQCBzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fc3lzZnNfYnVpbGRfY3R4KFxuIFx0cmV0dXJuIGN0eDtcbiB9XG4gXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllcztcbi1cbiBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3JlcGVhdF9jYWxsX2ZuKHZvaWQgKmRhdGEpXG4ge1xuIFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKnN5c2ZzX2tkYW1vbmQgPSBkYXRhO1xuIFxuIFx0aWYgKCFzeXNmc19rZGFtb25kLVx1MDAzZXJlZnJlc2hfbXMpXG4gXHRcdHJldHVybiAwO1xuLVx0aWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXMpKVxuK1x0aWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHN5c2ZzX2tkYW1vbmQtXHUwMDNlbmV4dF9yZWZyZXNoX2ppZmZpZXMpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXMgPSBqaWZmaWVzICtcbitcdHN5c2ZzX2tkYW1vbmQtXHUwMDNlbmV4dF9yZWZyZXNoX2ppZmZpZXMgPSBqaWZmaWVzICtcbiBcdFx0bXNlY3NfdG9famlmZmllcyhzeXNmc19rZGFtb25kLVx1MDAzZXJlZnJlc2hfbXMpO1xuIFxuIFx0aWYgKCFtdXRleF90cnlsb2NrKFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spKVxuQEAgLTIyNzMsOCArMjI3Miw4IEBAIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcbiBcdH1cbiBcdGtkYW1vbmQtXHUwMDNlZGFtb25fY3R4ID0gY3R4O1xuIFxuLVx0ZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllcyA9XG4tXHRcdGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGtkYW1vbmQtXHUwMDNlcmVmcmVzaF9tcyk7XG4rXHRrZGFtb25kLVx1MDAzZW5leHRfcmVmcmVzaF9qaWZmaWVzID0gamlmZmllcyArXG4rXHRcdG1zZWNzX3RvX2ppZmZpZXMoa2RhbW9uZC1cdTAwM2VyZWZyZXNoX21zKTtcbiBcbiBcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXHUwMDNlZm4gPSBkYW1vbl9zeXNmc19yZXBlYXRfY2FsbF9mbjtcbiBcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXHUwMDNlZGF0YSA9IGtkYW1vbmQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0MjowMC4zNTc3MDI4MTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDc5ODUwOTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRBTU9OIFBhdGNoIEFuYWx5c2lzKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBuZXcgcGF0Y2ggaGVyZSBtb2RpZnlpbmcgYG1tL2RhbW9uL2NvcmUuY2AgYW5kIGBtbS9kYW1vbi9zeXNmcy5jYC4gTGV0J3Mgc2VlLi4uIHRoZSBwcmltYXJ5IGZpeCBzZWVtcyB0byBiZSBpbiBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb25gLCBzcGVjaWZpY2FsbHkgaW5pdGlhbGl6aW5nIGBsYXN0X3BzaV90b3RhbGAgY29ycmVjdGx5IGZvciB0aGUgYERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AgY2FzZS4gR29vZCwgdGhhdCBsaWtlbHkgcmVzb2x2ZXMgYSBzdWJ0bGUgcmFjZSBjb25kaXRpb24gb3IgY2FsY3VsYXRpb24gZXJyb3IgcmVsYXRlZCB0byBtZW1vcnkgcXVvdGEgdHJhY2tpbmcgd2l0aCBQZXJmb3JtYW5jZSBTdGF0ZSBJbmZvcm1hdGlvbiAoUFNJKS4gVGhlIGFkZGl0aW9uIG9mIGBkYW1vc19pbml0X3F1b3RhX2dvYWxfbGFzdF9wc2lgIGNhbGxlZCBmcm9tIGBrZGFtb25kX2luaXRfY3R4YCBsb29rcyBsaWtlIGEgY29tcGFuaW9uIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLCBlbnN1cmluZyBwcm9wZXIgc3RhdGUgc2V0dXAuIFN0YW5kYXJkIHN0dWZmLCBidXQgaW1wb3J0YW50IHRvIGNhdGNoLlxuXG5Ob3csIHRoZSBgbW0vZGFtb24vc3lzZnMuY2AgY2hhbmdlIGlzIGludGVyZXN0aW5nLiBUaGV5J3ZlIG1vdmVkIGBkYW1vbl9zeXNmc19uZXh0X3VwZGF0ZV9qaWZmaWVzYCBmcm9tIGEgZ2xvYmFsIHRvIGEgcGVyLWtkYW1vbmQgdmFyaWFibGUgbmFtZWQgYG5leHRfcmVmcmVzaF9qaWZmaWVzYC4gVGhhdCdzIGEgbmljZSBpbXByb3ZlbWVudCBmb3IgY29uZmlndXJhYmlsaXR5IGFuZCBwb3RlbnRpYWwgY29uY3VycmVuY3kuIEl0IGxvb2tzIGxpa2UgaXQncyBhIHJlZnJlc2ggdGltZSBmb3IgdGhlIHN5c3RlbSBmaWxlIGludGVyZmFjZSAoc3lzZnMpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgYnVnZml4LCBpbiBEQU1PTiwgd2hpY2ggaXMgYSBjb3JlIGtlcm5lbCBjb21wb25lbnQuXG5cbkkgc2hvdWxkIHByb2JhYmx5IHJldmlldyB0aGUgY29uZmlnIG9wdGlvbnMgZm9yIERBTU9OIHRvIHVuZGVyc3RhbmQgaWYgYW55dGhpbmcgaW4gdGhhdCBhcmVhIGhhcyBjaGFuZ2VkLCBvciBpZiB0aGVyZSBpcyBuZXcgZnVuY3Rpb25hbGl0eSBpbnZvbHZlZC4gVGltZSB0byBkaWcgaW50byB0aGUgS2NvbmZpZyBmaWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzExNSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQyOjA1LjgzNzU1NjczOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDU5MzQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREFNT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcXFwiRGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1xcXCJcXG5tbS9kYW1vbi9LY29uZmlnLTQtXFxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNi1cXHRib29sIFxcXCJEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxcbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbm1tL2RhbW9uL0tjb25maWctMTYtXFx0Ym9vbCBcXFwiQ2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxcbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTI3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxcbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXFxubW0vZGFtb24vS2NvbmZpZy0zOS1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxcbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy00OC1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy01NS1cXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy01Ny1cXHRib29sIFxcXCJUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxcbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXFxubW0vZGFtb24vS2NvbmZpZy02OS1cXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxcbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTc3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy04Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXFxubW0vZGFtb24vS2NvbmZpZy04OS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctOTktXFxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTA3LVxcbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXFxubW0vZGFtb24vS2NvbmZpZy0xMDktXFx0Ym9vbCBcXFwiQnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTE1LVxcbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxcbm1tL2RhbW9uL0tjb25maWctMTE3LVxcdGJvb2wgXFxcIkVuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQyOjA1Ljg4ODE2NTYwOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4OTc3NTQ1NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGNvbmZpZyBvcHRpb25zIGFuZCBmdW5jdGlvbnMsIGFzIGlmIHRoZXkncmUgbXkgb3duIG1lbnRhbCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIERBTU9OIENvbmZpZ3VyYXRpb24gYW5kIEluaXRpYWxpemF0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIG9uIG15IG1pbmQsIGdpdmVuIHRoZSBjb250ZXh0LCBpcyBkZWZpbml0ZWx5IHRoZSBEQU1PTiBjb25maWd1cmF0aW9uczogYERBTU9OYCBhbmQgYERBTU9OX1NZU0ZTYC4gVGhlc2UgYXJlIHRoZSBmb3VuZGF0aW9uYWwgc2V0dGluZ3MuIEknbSBpbW1lZGlhdGVseSB0aGlua2luZywgXCJBcmUgYm90aCBvZiB0aGVzZSBlbmFibGVkPyBXaGF0J3MgdGhlIGltcGFjdCBvZiBvbmUgYmVpbmcgZW5hYmxlZCB3aXRob3V0IHRoZSBvdGhlcj9cIiBJdCdzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IERBTU9OIGlzIGFjdHVhbGx5IG9wZXJhdGluZyBhdCB0aGUgc3lzdGVtIGxldmVsLCBhbmQgdGhhdCBoZWxwcyBpbmZvcm0gcGVyZm9ybWFuY2UgdHdlYWtzLlxuXG5Ob3csIGxldCdzIGRyaWxsIGRvd24gaW50byB0aGUga2VybmVsIGNvZGU7IEkgbmVlZCB0byBsb29rIGF0IHdoYXQncyBnb2luZyBvbiB3aXRoaW4gYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uYCBhbmQgYGRhbW9zX2luaXRfcXVvdGFfZ29hbF9sYXN0X3BzaWAuIE15IGd1dCByZWFjdGlvbiBpcyB0aGF0IHRoZXkncmUgcmVsYXRlZCB0byBoYW5kbGluZyBxdW90YSBnb2FscywgYnV0IHRoZSBzcGVjaWZpYyBtZWNoYW5pY3MgYXJlIHdoYXQncyBpbXBvcnRhbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kOlxuXG4qICAgKipgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb25gKio6IFNwZWNpZmljYWxseSwgaG93IGFuZCB3aGVuIHRoaXMgaXMgaW52b2tlZC4gRG9lcyBpdCBnZXQgdHJpZ2dlcmVkIG9uIGFueSBzb3J0IG9mIGV2ZW50LCBvciBpcyBpdCBwZXJpb2RpYz8gV2hhdCdzIHRoZSBjb250ZXh04oCUYXJlIHdlIHRhbGtpbmcgYWJvdXQgcGVyLXByb2Nlc3MgcXVvdGEsIHN5c3RlbS13aWRlLCBvciBzb21ldGhpbmcgbW9yZSBncmFudWxhcj8gSSdtIGJldHRpbmcgdGhpcyBpcyB3aGVyZSBjaGFuZ2VzIHRvIHF1b3RhIGdvYWxzIGFyZSBhY3R1YWxseSBhcHBsaWVkLCBlaXRoZXIgaW1tZWRpYXRlbHkgb3IgZGVmZXJyZWQuIEknbGwgbmVlZCB0byBzZWUgaWYgaXQgaW52b2x2ZXMgYW55IGxvY2tpbmcgbWVjaGFuaXNtcywgYW5kIHRoZSBpbXBhY3Qgb24gdGhlIHN5c3RlbS5cbiogICAqKmBkYW1vc19pbml0X3F1b3RhX2dvYWxfbGFzdF9wc2lgKio6IFRoaXMgaGFzIHRoZSBkaXN0aW5jdCBzbWVsbCBvZiBpbml0aWFsaXphdGlvbi4gXCJMYXN0IFBTSVwiIHN1Z2dlc3RzIGl0J3MgbGlrZWx5IGludm9sdmVkIHdpdGggbW9uaXRvcmluZyBvciB0cmFja2luZyBzb21lIGZvcm0gb2YgUGVyZm9ybWFuY2UgU3RhdGUgSW5mb3JtYXRpb24gKFBTSSkuIFRoZSBcInF1b3RhIGdvYWxcIiBwYXJ0IGhpbnRzIGF0IGl0IHJlbGF0ZWQgdG8gcXVvdGEgZW5mb3JjZW1lbnQuIE15IHdvcmtpbmcgaHlwb3RoZXNpcyBpcyB0aGF0IHRoaXMgZnVuY3Rpb24gbWlnaHQgaGFuZGxlIGVpdGhlciB0aGUgaW5pdGlhbCBzZXR1cCBvZiBxdW90YSBsaW1pdHMgcmVsYXRlZCB0byBwZXJmb3JtYW5jZSBvciBpdCBtaWdodCBpbml0aWFsaXplIGEgc3RydWN0dXJlIHRoYXQgdHJhY2tzIHRoZSBnb2Fscy4gSSBoYXZlIHRvIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgREFNT04gY29tcG9uZW50cyB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbi4gSSdsbCBiZSBsb29raW5nIGZvciB3aGVyZSB0aGlzIGlzIGNhbGxlZCwgYW5kIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGl0IG1hbmlwdWxhdGVzLiBIb3cgaXMgdGhpcyBcImxhc3QgUFNJXCIgdmFsdWUgdXNlZCBsYXRlciBvbiBpbiBkZWNpc2lvbi1tYWtpbmc/XG5cbkVzc2VudGlhbGx5LCBJIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSB0d28gcGllY2VzIGZpdCB0b2dldGhlciBhbmQgcmVsYXRlIHRvIHRoZSBEQU1PTiBjb3JlLiBBcmUgdGhleSBpbnZvbHZlZCBpbiBnb2FsIHNldHRpbmcsIGVuZm9yY2VtZW50LCBhZGFwdGF0aW9uLCBvciBzb21lIGNvbWJpbmF0aW9uIG9mIHRoZSBhYm92ZT8gTGV0J3MgZ2V0IHRvIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Mzk1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDI6MTEuNzg1OTIyMjE1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NTAzODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MTEwOD1zdGF0aWMgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX250aF9xdW90YV9nb2FsKFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTExMjAtXFxubW0vZGFtb24vY29yZS5jOjExMjE6c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oXFxubW0vZGFtb24vY29yZS5jLTExMjItXFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMTQyPXN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTExNDgtXFx0XFx0ZHN0LVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gc3JjLVxcdTAwM2VjdXJyZW50X3ZhbHVlO1xcbm1tL2RhbW9uL2NvcmUuYzoxMTQ5OlxcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKGRzdCwgc3JjKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTE1MC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQyOjExLjgzMDQyODk4NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MTAyODg3MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIG1vZGlmaWNhdGlvbnMsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6XG5cbioqTXkgUGVyc3BlY3RpdmUgb24gdGhlIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYCBNb2RpZmljYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBJIHNlZSB0aGV5J3ZlIGJlZW4gbWVzc2luZyB3aXRoIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYC4gRnJvbSB0aGUgbmFtZSBhbG9uZSwgSSBjYW4gZ3Vlc3MgdGhpcyBpcyB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGFjdHVhbGx5ICphY3RpdmF0aW5nKiBhIERBTU9OIG1vbml0b3IgdGhyb3VnaCB0aGUgc3lzZnMgaW50ZXJmYWNlLiBUaGF0J3MgYSBjcml0aWNhbCBwaWVjZSwgdGhlIHBvaW50IG9mIG5vIHJldHVybiBzbyB0byBzcGVhay4gSWYgdGhpcyBpcyB3aGVyZSB0aGV5J3JlIGNoYW5naW5nIHRoaW5ncywgaXQgbWVhbnMgdGhleSBhcmUgdHJ5aW5nIHRvIGluZmx1ZW5jZSBob3cgYSBEQU1PTiBtb25pdG9yIGNvbWVzIG9ubGluZSBhbmQgc2V0cyBpdHNlbGYgdXAuIFxuXG5JIGltbWVkaWF0ZWx5IHN0YXJ0IHRoaW5raW5nIGFib3V0IGEgZmV3IHRoaW5nczpcblxuKiAgICoqQWN0aXZhdGlvbiBUcmlnZ2VycyoqOiBBcmUgdGhleSBjaGFuZ2luZyAqaG93KiB0aGUgbW9uaXRvciBpcyB0cmlnZ2VyZWQ/IElzIGl0IHN0aWxsIGEgc2ltcGxlICdlY2hvIDEgXHUwMDNlIGVuYWJsZSc/IE9yIGFyZSB0aGV5IGludHJvZHVjaW5nIHNvbWUgbW9yZSBudWFuY2VkIGFjdGl2YXRpb24gY3JpdGVyaWEsIHBlcmhhcHMgYmFzZWQgb24gcmVzb3VyY2UgYXZhaWxhYmlsaXR5LCBsb2FkLCBvciBzb21lIG90aGVyIHN5c3RlbSBjb25kaXRpb24/IE1heWJlIHNvbWUgY29uZmlndXJhdGlvbiBpbiB0aGUgc3lzZnMgbm9kZSBoYXMgdG8gYmUgY29ycmVjdC5cbiogICAqKkluaXRpYWxpemF0aW9uKio6IEJleW9uZCB0dXJuaW5nIGl0IG9uLCB3aGF0IGRvZXMgdGhlIGZ1bmN0aW9uICpkbyogZHVyaW5nIGluaXRpYWxpemF0aW9uPyBEb2VzIGl0IGFsbG9jYXRlIG1lbW9yeSwgcmVnaXN0ZXIgdGhlIG1vbml0b3Igd2l0aCB0aGUgY29yZSBEQU1PTiBpbmZyYXN0cnVjdHVyZSwgY29uZmlndXJlIGFueSBkZWZhdWx0IHBhcmFtZXRlcnM/IEFueSBjaGFuZ2VzIGhlcmUgYXJlIGdvaW5nIHRvIGhhdmUgYSBiaWcgaW1wYWN0IG9uIGhvdyBwZXJmb3JtYW50IHRoZSBtb25pdG9yIHdpbGwgYmUgYXMgd2VsbCBhcyB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBtb25pdG9ycy5cbiogICAqKkVycm9yIEhhbmRsaW5nKio6IEFyZSB0aGV5IGltcHJvdmluZyB0aGUgZXJyb3IgaGFuZGxpbmcgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyB3cm9uZyBkdXJpbmcgYWN0aXZhdGlvbj8gSWYgdGhlIG1vbml0b3IgZmFpbHMgdG8gaW5pdGlhbGl6ZSwgZG9lcyBpdCBwcm92aWRlIGhlbHBmdWwgZXJyb3IgbWVzc2FnZXMsIG9yIGp1c3Qgc2lsZW50bHkgZmFpbD8gSXQncyBhbHdheXMgY3J1Y2lhbCB0byBmYWlsIGdyYWNlZnVsbHkgYW5kIHByb3ZpZGUgc29tZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uXG4qICAgKipTZWN1cml0eSBDb25jZXJucyoqOiBJZiB0aGV5J3JlIGFkZGluZyBleHRyYSBsYXllcnMgb2YgYWN0aXZhdGlvbiwgSSdtIG5vdyBjdXJpb3VzIHdoZXRoZXIgdGhlcmUncyBzb21lIGNoYW5nZSBpbiB0aGUgc2VjdXJpdHkgY29udGV4dC4gQXJlIHdlIGdvaW5nIHRvIHNlZSBuZXcgcHJpdmlsZWdlcyBvciBwZXJtaXNzaW9ucyByZWxhdGVkIHRvIHN0YXJ0aW5nIGEgbW9uaXRvcj9cblxuVWx0aW1hdGVseSwgd2l0aG91dCBrbm93aW5nICpleGFjdGx5KiB3aGF0IHdhcyBtb2RpZmllZCwgdGhlc2UgYXJlIHRoZSB0eXBlcyBvZiB0aGluZ3MgSSdkIGJlIGxvb2tpbmcgZm9yIGluIGEgY29kZSByZXZpZXcgb3IgYSBwYXRjaCBkZXNjcmlwdGlvbi4gQmVjYXVzZSB0aGlzIGZ1bmN0aW9uIGlzIHRoZSBnYXRld2F5IHRvIG1vbml0b3JpbmcsIGFueSBtb2RpZmljYXRpb24gaGVyZSBuZWVkcyB0byBiZSB0aG9yb3VnaGx5IHZldHRlZCB0byBlbnN1cmUgREFNT04gY29udGludWVzIHRvIHdvcmsgZWZmaWNpZW50bHksIGVmZmVjdGl2ZWx5LCBhbmQgc2FmZWx5LiBJIHdvdWxkIG5lZWQgdG8gZGlnIGludG8gdGhlIGRpZmZzIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyMDUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0MjoxNi41NDA3MjEwMjVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUwMTkwNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vc3lzZnMuYz0yMjE5PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfcmVwZWF0X2NhbGxfZm4odm9pZCAqZGF0YSlcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjI0MS1cXG5tbS9kYW1vbi9zeXNmcy5jOjIyNDI6c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjI0My17XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIyODc9c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29mZihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjI5NC1cXHQgKiBEQU1PTiwgd2UgZnJlZSBrZGFtb25kLVxcdTAwM2VkYW1vbl9jdHggaW4gbmV4dFxcbm1tL2RhbW9uL3N5c2ZzLmM6MjI5NTpcXHQgKiBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKCksIG9yIGtkYW1vbmRzX25yX3N0b3JlKClcXG5tbS9kYW1vbi9zeXNmcy5jLTIyOTYtXFx0ICovXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIzNjM9c3RhdGljIGludCBkYW1vbl9zeXNmc19oYW5kbGVfY21kKGVudW0gZGFtb25fc3lzZnNfY21kIGNtZCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjM3MC1cXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9PTjpcXG5tbS9kYW1vbi9zeXNmcy5jOjIzNzE6XFx0XFx0cmV0dXJuIGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oa2RhbW9uZCk7XFxubW0vZGFtb24vc3lzZnMuYy0yMzcyLVxcdGNhc2UgREFNT05fU1lTRlNfQ01EX09GRjpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDI6MTYuNTg1NzQyMjg1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU1MTY0ODM5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYWxyZWFkeSBxdWl0ZSBmYW1pbGlhciB3aXRoIHRoZSBEYW1vbiBzeXN0ZW0gYW5kIHN5c2ZzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTeXNmcyBDb21tYW5kIEhhbmRsZXIqKlxuXG5BbHJpZ2h0LCBJJ20gbG9va2luZyBhdCB0aGUgYGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWRgIGZ1bmN0aW9uLiBUaGF0J3MgdGhlIG9uZSB0aGF0J3MgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIGFsbCB0aGUgY29tbWFuZHMgY29taW5nIGluIHRocm91Z2ggdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSBzeXN0ZW0uIEl0J3MgdGhlIGNlbnRyYWwgcG9pbnQgb2YgY29udHJvbC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGl0IHdvcmtzLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIGhvdyBpdCBwcm9jZXNzZXMgdGhvc2UgaW5jb21pbmcgY29tbWFuZHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZnVuY3Rpb24ncyBsb2dpYyBpbnNpZGUgYW5kIG91dCB0byB0cm91Ymxlc2hvb3QgZWZmZWN0aXZlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMjYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0MjoyMC4xMzczOTI2ODdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MDI0MDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX3N5c2ZzX2hhbmRsZV9jbWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3N5c2ZzLmM9MjMzMz1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3VwZGF0ZV9zY2hlbWVzX3RyaWVkX3JlZ2lvbnMoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIzNTQtLypcXG5tbS9kYW1vbi9zeXNmcy5jOjIzNTU6ICogZGFtb25fc3lzZnNfaGFuZGxlX2NtZCgpIC0gSGFuZGxlIGEgY29tbWFuZCBmb3IgYSBzcGVjaWZpYyBrZGFtb25kLlxcbm1tL2RhbW9uL3N5c2ZzLmMtMjM1Ni0gKiBAY21kOlxcdFRoZSBjb21tYW5kIHRvIGhhbmRsZS5cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjM2Mi0gKi9cXG5tbS9kYW1vbi9zeXNmcy5jOjIzNjM6c3RhdGljIGludCBkYW1vbl9zeXNmc19oYW5kbGVfY21kKGVudW0gZGFtb25fc3lzZnNfY21kIGNtZCxcXG5tbS9kYW1vbi9zeXNmcy5jLTIzNjQtXFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTI0MDM9c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjQxNC1cXHRcXHRpZiAoc3lzZnNfc3RyZXEoYnVmLCBkYW1vbl9zeXNmc19jbWRfc3Ryc1tjbWRdKSkge1xcbm1tL2RhbW9uL3N5c2ZzLmM6MjQxNTpcXHRcXHRcXHRyZXQgPSBkYW1vbl9zeXNmc19oYW5kbGVfY21kKGNtZCwga2RhbW9uZCk7XFxubW0vZGFtb24vc3lzZnMuYy0yNDE2LVxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0MjoyMC4xODQ0MjE0NTdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUzOTg1NTEwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBTeXNmcyBJbnRlcmZhY2U6IEEgUmVjb25uYWlzc2FuY2UqKlxuXG5Pa2F5LCBzbyB0aGUgc3lzZnMgaW50ZXJmYWNlIGlzIGRlZmluaXRlbHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZS4gVGhhdCBtZWFucyBpdCdzIGZ1enphYmxlIOKAkyB0aGF0J3MgdGhlIGZpcnN0IHN0ZXAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBhdHRhY2sgc3VyZmFjZSBpcy4gTm93LCBJIHNlZSB0aGF0IHRoZSBmdW5jdGlvbnMgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uYCBhbmQgYGRhbW9zX2luaXRfcXVvdGFfZ29hbF9sYXN0X3BzaWAgYXJlIHJlYWNoYWJsZSBmcm9tIGl0LiBMZXQncyBkaWcgZGVlcGVyIGFuZCBnZXQgYSBiZXR0ZXIgcGljdHVyZSBvZiB0aGUgYXZhaWxhYmxlIHN5bWJvbHMuXG5cbkhtbSwgaXQgbG9va3MgbGlrZSBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb25gIGlzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFNvIGlzIGBkYW1vc19pbml0X3F1b3RhX2dvYWxfbGFzdF9wc2lgLCBhbG9uZyB3aXRoIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYCwgYGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWRgLCBhbmQgYHN0YXRlX3N0b3JlYC4gVGhlc2Ugc3RhdGljIGZ1bmN0aW9ucyBjb3VsZCBzdGlsbCBiZSB1c2VmdWwgZGVwZW5kaW5nIG9uIGhvdyB0aGV5IGFyZSB1c2VkLiBMZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSAqbm9uKi1zdGF0aWMgZnVuY3Rpb25zIHdlIGNhbiBleGFtaW5lLiBJdCdzIHRpbWUgdG8gY2hlY2sgd2hhdCBlbHNlIGlzIGF2YWlsYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY5MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0MjoyNC43MjQyNzkzMjdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMTg1MzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX2NvbW1pdF9xdW90YV9nb2FsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MTEwOD1zdGF0aWMgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX250aF9xdW90YV9nb2FsKFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTExMjAtXFxubW0vZGFtb24vY29yZS5jOjExMjE6c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oXFxubW0vZGFtb24vY29yZS5jLTExMjItXFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTQxLVxcbm1tL2RhbW9uL2NvcmUuYzoxMTQyOnN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxcbm1tL2RhbW9uL2NvcmUuYy0xMTQzLVxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTE0OC1cXHRcXHRkc3QtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBzcmMtXFx1MDAzZWN1cnJlbnRfdmFsdWU7XFxubW0vZGFtb24vY29yZS5jOjExNDk6XFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oZHN0LCBzcmMpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMTUwLX1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTUyLS8qKlxcbm1tL2RhbW9uL2NvcmUuYzoxMTUzOiAqIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscygpIC0gQ29tbWl0IERBTU9TIHF1b3RhIGdvYWxzIHRvIGFub3RoZXIgcXVvdGEuXFxubW0vZGFtb24vY29yZS5jLTExNTQtICogQGRzdDpcXHRUaGUgY29tbWl0IGRlc3RpbmF0aW9uIERBTU9TIHF1b3RhLlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTExNjMtICovXFxubW0vZGFtb24vY29yZS5jOjExNjQ6aW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpXFxubW0vZGFtb24vY29yZS5jLTExNjUte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTExNzEtXFx0XFx0aWYgKHNyY19nb2FsKVxcbm1tL2RhbW9uL2NvcmUuYzoxMTcyOlxcdFxcdFxcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKGRzdF9nb2FsLCBzcmNfZ29hbCk7XFxubW0vZGFtb24vY29yZS5jLTExNzMtXFx0XFx0ZWxzZVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTExODItXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxubW0vZGFtb24vY29yZS5jOjExODM6XFx0XFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwobmV3X2dvYWwsIHNyY19nb2FsKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTE4NC1cXHRcXHRkYW1vc19hZGRfcXVvdGFfZ29hbChkc3QsIG5ld19nb2FsKTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMTg5PXN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X3F1b3RhKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTk1LVxcdGRzdC1cXHUwMDNlc3ogPSBzcmMtXFx1MDAzZXN6O1xcbm1tL2RhbW9uL2NvcmUuYzoxMTk2OlxcdGVyciA9IGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fscyhkc3QsIHNyYyk7XFxubW0vZGFtb24vY29yZS5jLTExOTctXFx0aWYgKGVycilcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yODk0PWludCBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5MTgtXFx0XFx0fVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyOTE5OlxcdFxcdGVyciA9IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhcXHUwMDI2c2NoZW1lLVxcdTAwM2VxdW90YSwgXFx1MDAyNnF1b3RhKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjkyMC1cXHRcXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoZywgZ19uZXh0LCBcXHUwMDI2cXVvdGEpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9NzUwPXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC03NTctXFx0XFx0ZHN0X2xhc3RfcHNpX3RvdGFsID0gZHN0LVxcdTAwM2VsYXN0X3BzaV90b3RhbDtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NzU4OlxcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKGRzdCwgc3JjKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNzU5LVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTgzND1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2Fsc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg0OS1cXHRcXHQgKiBXaGVuIG5yX3NyY19nb2FscyBpcyBzbWFsbGVyIHRoYW4gZHN0X2dvYWxzLFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4NTA6XFx0XFx0ICogZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKCkgd2lsbCBrZnJlZSgpIHRoZSBkc3QgZ29hbHMuXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg1MS1cXHRcXHQgKiBNYWtlIGl0IGtmcmVlKCktYWJsZS5cXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NjItXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjg2MzpcXHRkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoXFx1MDAyNmRzdCwgXFx1MDAyNnNyYyk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg2NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDI6MjQuNzY3NDY5NDE2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NDg3MTkyNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBQb3RlbnRpYWwgSW5pdGlhbGl6YXRpb24gSXNzdWVzIHdpdGggTm9uLVN0YXRpYyBWYXJpYWJsZXMqKlxuXG5Pa2F5LCBzbyBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYCBpc24ndCBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgaW5pdGlhbGl6YXRpb24gcHJvYmxlbS4gV2UgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGFuZCBob3cgdGhpcyB2YXJpYWJsZSBpcyBiZWluZyBpbml0aWFsaXplZCwgYW5kIG1vcmUgaW1wb3J0YW50bHksIGlmIGl0J3MgYmVpbmcgaGFuZGxlZCBjb3JyZWN0bHkgYWNyb3NzIGRpZmZlcmVudCB0aHJlYWRzIG9yIGNvbnRleHRzLiBTaW5jZSBpdCdzIG5vdCBzdGF0aWMsIGl0IHN1Z2dlc3RzIHNvbWUgc29ydCBvZiBkeW5hbWljIG9yIHBvdGVudGlhbGx5IGdsb2JhbCBzY29wZS4gU28sIHdoZXJlIGFyZSB0aGUgY3JpdGljYWwgcG9pbnRzPyBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpZyBpbnRvIGBrZGFtb25kX2luaXRfY3R4YCBvciBgZGFtb3NfaW5pdF9xdW90YV9nb2FsX2xhc3RfcHNpYC4gSeKAmWxsIHN0YXJ0IGJ5IHJldmlld2luZyB0aGUgaW5pdGlhbGl6YXRpb24gbG9naWMgd2l0aGluIHRob3NlIGZ1bmN0aW9ucy4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2AgYW5kIGlmIHRoZXJlJ3MgYW55IHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zIG9yIHVuaW50ZW5kZWQgc2lkZSBlZmZlY3RzIGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcywgZXNwZWNpYWxseSBpbiBhIG11bHRpLXRocmVhZGVkIHNjZW5hcmlvLiBJdCdzIGEgY2xhc3NpYyBkZWJ1Z2dpbmcgYXBwcm9hY2g6IHN0YXJ0IHdpdGggdGhlIGxpa2VseSBjdWxwcml0cy4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSB2YXJpYWJsZSdzIGxpZmVjeWNsZSBmcm9tIGRlY2xhcmF0aW9uIHRvIHVzZS4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aG9zZSBmdW5jdGlvbnMgaXMga2V5IHRvIHBpbnBvaW50aW5nIGFueSBwcm9ibGVtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI5NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQyOjI4LjMxNjE5MDg2OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM2MDI1NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2RhbW9uZF9pbml0X2N0eFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTgzMj1zdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9uZXdfY3R4KHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtODQ2LVxcdGN0eC1cXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMgPSAwO1xcbm1tL2RhbW9uL2NvcmUuYzo4NDc6XFx0LyogVGhlc2Ugd2lsbCBiZSBzZXQgZnJvbSBrZGFtb25kX2luaXRfY3R4KCkgKi9cXG5tbS9kYW1vbi9jb3JlLmMtODQ4LVxcdGN0eC1cXHUwMDNlbmV4dF9hZ2dyZWdhdGlvbl9zaXMgPSAwO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTM3MzI9c3RhdGljIHZvaWQgZGFtb3NfaW5pdF9xdW90YV9nb2FsX2xhc3RfcHNpKHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNzQyLVxcbm1tL2RhbW9uL2NvcmUuYzozNzQzOnN0YXRpYyB2b2lkIGtkYW1vbmRfaW5pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbm1tL2RhbW9uL2NvcmUuYy0zNzQ0LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zNzY2PXN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM3NzktXFx0Y29tcGxldGUoXFx1MDAyNmN0eC1cXHUwMDNla2RhbW9uZF9zdGFydGVkKTtcXG5tbS9kYW1vbi9jb3JlLmM6Mzc4MDpcXHRrZGFtb25kX2luaXRfY3R4KGN0eCk7XFxubW0vZGFtb24vY29yZS5jLTM3ODEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQyOjI4LjM1OTc5NTAyOFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjc0NzMyMjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIENvZGUgU3RydWN0dXJlIGFuZCBTY29wZSoqXG5cbkhtbSwgc28gYGtkYW1vbmRfZm5gIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGl0IGluIG15IG1pbmQgYXMgYmVpbmcgbGltaXRlZCBpbiBzY29wZSDigJMgbGlrZWx5IGludGVybmFsIHRvIGEgc2luZ2xlIGZpbGUgb3IgY29tcGlsYXRpb24gdW5pdC4gT2theSwgbm90ZWQuIE5vdywgbGV0IG1lIHNlZS4uLiBhbmQgaGVyZSB3ZSBoYXZlIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgLCBhbmQgaXQncyAqbm90KiBzdGF0aWMuIFRoYXQgaW1wbGllcyBpdCdzIGludGVuZGVkIHRvIGJlIHZpc2libGUgb3V0c2lkZSBvZiBpdHMgaW1tZWRpYXRlIGNvbnRleHQuIENvdWxkIGJlIGEgZnVuY3Rpb24gb3RoZXIgbW9kdWxlcyBjYW4gY2FsbCB0byBjb21taXQgcXVvdGEgY2hhbmdlcy5cblxuSnVzdCB0byBiZSB0aG9yb3VnaCwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaG93IGBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzYCBpcyBkZWZpbmVkLiBJIHdhbnQgdG8gc2VlIGlmIHRoaXMgaGFzIGEgcmVsYXRpb25zaGlwIHRvIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgLiBJcyBpdCBhIGhlbHBlcj8gRG9lcyBpdCBjYWxsIGl0PyBBcmUgdGhleSBib3RoIHVzZWQgaW4gdGhlIHNhbWUgY29udGV4dD8gVW5kZXJzdGFuZGluZyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdGhyZWUgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBvdmVyYWxsIHF1b3RhIHN5c3RlbSB3b3JrcywgYW5kIGhvdyB0aGlzIG1vZHVsZSBmaXRzIGludG8gaXQuIFRoaXMgd2lsbCBoZWxwIG1lIGFzc2VzcyB0aGUgYXJjaGl0ZWN0dXJlIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIGFueSBjaGFuZ2VzIGRvd24gdGhlIGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5MzcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0MjozMi4wMzQ1Mjk2NzFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0Mjg2MDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oPTUxPWludCBkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnMoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01My1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo1NDppbnQgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01NS1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NDc9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg5My1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg5NDppbnQgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg5NS1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIxNTI9c3RhdGljIGludCBkYW1vbl9zeXNmc19jb21taXRfc2NoZW1lc19xdW90YV9nb2Fscyh2b2lkICpkYXRhKVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMTY1LVxcdHN5c2ZzX2N0eCA9IHN5c2ZzX2tkYW1vbmQtXFx1MDAzZWNvbnRleHRzLVxcdTAwM2Vjb250ZXh0c19hcnJbMF07XFxubW0vZGFtb24vc3lzZnMuYzoyMTY2OlxcdHJldHVybiBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN5c2ZzX2N0eC1cXHUwMDNlc2NoZW1lcywgY3R4KTtcXG5tbS9kYW1vbi9zeXNmcy5jLTIxNjctfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0MjozMi4wNzg4MTc3OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTg0NDAzMjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBEQU1PTiBTeXNmcyBGdW5jdGlvbiBTY29wZSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhlIERBTU9OIHN5c2ZzIGNvZGUsIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGZ1bmN0aW9uIHZpc2liaWxpdHkuIEkgc2VlIHRoYXQgYGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNgIGlzIG5vbi1zdGF0aWMsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IHNjb3BlIGFuZCBwb3RlbnRpYWwgZXh0ZXJuYWwgaW50ZXJhY3Rpb25zLiBJcyB0aGlzIGZ1bmN0aW9uIGludGVuZGVkIHRvIGJlIGV4cG9zZWQgb3V0c2lkZSB0aGUgbW9kdWxlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBjaG9pY2Ugd2FzIG1hZGUuXG5cblRoZW4gbXkgbWluZCBkcmlmdHMgdG8gYGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWRgLiBBaCwgdGhhdCBvbmUgKmlzKiBzdGF0aWMuIEludGVyZXN0aW5nIGNvbnRyYXN0LiBJIG5lZWQgdG8ga2VlcCB0aGlzIHBhdHRlcm4gaW4gbWluZC4gSXQncyBhIGtleSBmYWN0b3IuXG5cbk5vdywgdGhlIG5hdHVyYWwgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHN5c2ZzIGltcGxlbWVudGF0aW9uLiBMZXQncyBzZWUuLi4gYGRhbW9uX3N5c2ZzX2NvbW1pdF9zY2hlbWVzX3F1b3RhX2dvYWxzYCBpcyBzdGF0aWMsIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYCBpcyBhbHNvIHN0YXRpYywgYXMgaXMgYGRhbW9uX3N5c2ZzX3JlcGVhdF9jYWxsX2ZuYC4gU28sIGl0IHNlZW1zIGxpa2UgbW9zdCBvZiB0aGUgc3lzZnMgZnVuY3Rpb25zIGFyZSBkZWxpYmVyYXRlbHkgc2NvcGVkIHdpdGhpbiB0aGUgbW9kdWxlLiBHb29kLCB0aGF0IGhlbHBzLlxuXG5JIG5lZWQgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIGFuZCB0byBzZWUgaWYgSSBtaXNzZWQgYW55LiBMZXQncyBoZWFkIG92ZXIgdG8gYG1tL2RhbW9uL3N5c2ZzLmNgIGZvciBhIGNvbXByZWhlbnNpdmUgbG9vay4gSSB3YW50IHRvIGRvdWJsZS1jaGVjayBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGx1cmtpbmcgYXJvdW5kLCB3aGljaCB3b3VsZCBhZmZlY3QgaG93IHRoZSBzeXNmcyBpbnRlcmZhY2UgYmVoYXZlcy4gSSB3YW50IHRvIGJ1aWxkIGEgYmV0dGVyIG92ZXJhbGwgcGljdHVyZSBvZiB0aGUgbW9kdWxlJ3MgZXhwb3NlZCBmdW5jdGlvbmFsaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2NTEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDI6MzcuMDYzMjIzODk5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDUxNTE4MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmludCBkYW1vbl9zeXNmc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9zeXNmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0MjozNy4xMDc3NDUxOTlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwNzQxNDU3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBtbS9kYW1vbi9zeXNmcy5jYCBmb3IgRnVuY3Rpb24gU2NvcGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYG1tL2RhbW9uL3N5c2ZzLmNgLiBNeSBwcmltYXJ5IGNvbmNlcm4gaXMgcGlucG9pbnRpbmcgYW55IGZ1bmN0aW9ucyBkZWZpbmVkIHdpdGhpbiB0aGF0IGZpbGUgdGhhdCBhcmVuJ3QgZGVjbGFyZWQgYXMgYHN0YXRpY2AuICBLbm93aW5nIHRoZSBzY29wZSBvZiB0aGVzZSBmdW5jdGlvbnMgaXMgY3J1Y2lhbC4gSXQgbGV0cyBtZSB1bmRlcnN0YW5kIGlmIHRoZXkgbWlnaHQgYmUgaW50ZW5kZWQgZm9yIGV4dGVybmFsIHVzZSwgcGVyaGFwcyBjYWxsZWQgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgREFNT04gaW5mcmFzdHJ1Y3R1cmUgb3IgZXZlbiBrZXJuZWwgc3Vic3lzdGVtcy4gSWYgdGhleSAqYXJlKiBzdGF0aWMsIHRoZW4gSSBoYXZlIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIEkgYnVpbGQgYW4gb3ZlcmFsbCBwaWN0dXJlIG9mIGhvdyBpdCBhbGwgd29ya3MuIEkgY2FuIHN0YXJ0IGJ5IGp1c3QgbGlzdGluZyB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYW5kIHRoZWlyIHNpZ25hdHVyZXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBkZXNpZ24gaW50ZW50aW9ucyBmb3IgdGhpcyBzeXNmcyBpbnRlcmZhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTYwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDI6NDAuMzE1MTYxODAyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDAzMTI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2Etel9dKyBkYW1vbl9zeXNmc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9zeXNmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3N5c2ZzLmMtMTUtXFxubW0vZGFtb24vc3lzZnMuYzoxNjpzdHJ1Y3QgZGFtb25fc3lzZnNfcmVnaW9uIHtcXG5tbS9kYW1vbi9zeXNmcy5jLTE3LVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTgyPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3JlZ2lvbl9rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtOTEtXFxubW0vZGFtb24vc3lzZnMuYzo5MjpzdHJ1Y3QgZGFtb25fc3lzZnNfcmVnaW9ucyB7XFxubW0vZGFtb24vc3lzZnMuYy05My1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMDE9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfcmVnaW9uc19rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjEwLVxcbm1tL2RhbW9uL3N5c2ZzLmM6MjExOnN0cnVjdCBkYW1vbl9zeXNmc190YXJnZXQge1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjEyLVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTMwOD1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc190YXJnZXRfa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTMxNy1cXG5tbS9kYW1vbi9zeXNmcy5jOjMxODpzdHJ1Y3QgZGFtb25fc3lzZnNfdGFyZ2V0cyB7XFxubW0vZGFtb24vc3lzZnMuYy0zMTktXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9NDM2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3RhcmdldHNfa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTQ0NS1cXG5tbS9kYW1vbi9zeXNmcy5jOjQ0NjpzdHJ1Y3QgZGFtb25fc3lzZnNfaW50ZXJ2YWxzX2dvYWwge1xcbm1tL2RhbW9uL3N5c2ZzLmMtNDQ3LVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTU5Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19pbnRlcnZhbHNfZ29hbF9rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtNjAyLVxcbm1tL2RhbW9uL3N5c2ZzLmM6NjAzOnN0cnVjdCBkYW1vbl9zeXNmc19pbnRlcnZhbHMge1xcbm1tL2RhbW9uL3N5c2ZzLmMtNjA0LVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTc0Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19pbnRlcnZhbHNfa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTc1Ni1cXG5tbS9kYW1vbi9zeXNmcy5jOjc1NzpzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVyIHtcXG5tbS9kYW1vbi9zeXNmcy5jLTc1OC1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz03NjU9c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19maWx0ZXIgKmRhbW9uX3N5c2ZzX2ZpbHRlcl9hbGxvYyh2b2lkKVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy03NjktXFxubW0vZGFtb24vc3lzZnMuYzo3NzA6c3RydWN0IGRhbW9uX3N5c2ZzX2ZpbHRlcl90eXBlX25hbWUge1xcbm1tL2RhbW9uL3N5c2ZzLmMtNzcxLVxcdGVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9OTM3PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2ZpbHRlcl9rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtOTQ2LVxcbm1tL2RhbW9uL3N5c2ZzLmM6OTQ3OnN0cnVjdCBkYW1vbl9zeXNmc19maWx0ZXJzIHtcXG5tbS9kYW1vbi9zeXNmcy5jLTk0OC1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0xMDU2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2ZpbHRlcnNfa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTEwNjUtXFxubW0vZGFtb24vc3lzZnMuYzoxMDY2OnN0cnVjdCBkYW1vbl9zeXNmc19wcm9iZSB7XFxubW0vZGFtb24vc3lzZnMuYy0xMDY3LVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTExMzc9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfcHJvYmVfa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTExNDYtXFxubW0vZGFtb24vc3lzZnMuYzoxMTQ3OnN0cnVjdCBkYW1vbl9zeXNmc19wcm9iZXMge1xcbm1tL2RhbW9uL3N5c2ZzLmMtMTE0OC1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0xMjY2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3Byb2Jlc19rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMTI3NS1cXG5tbS9kYW1vbi9zeXNmcy5jOjEyNzY6c3RydWN0IGRhbW9uX3N5c2ZzX2F0dHJzIHtcXG5tbS9kYW1vbi9zeXNmcy5jLTEyNzctXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTM3Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19hdHRyc19rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMTM4MS1cXG5tbS9kYW1vbi9zeXNmcy5jOjEzODI6c3RydWN0IGRhbW9uX3N5c2ZzX29wc19uYW1lIHtcXG5tbS9kYW1vbi9zeXNmcy5jLTEzODMtXFx0ZW51bSBkYW1vbl9vcHNfaWQgb3BzX2lkO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0xMzg3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGFtb25fc3lzZnNfb3BzX25hbWUgZGFtb25fc3lzZnNfb3BzX25hbWVzW10gPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTE0MDEtXFxubW0vZGFtb24vc3lzZnMuYzoxNDAyOnN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0IHtcXG5tbS9kYW1vbi9zeXNmcy5jLTE0MDMtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTY0OD1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19jb250ZXh0X2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0xNjU3LVxcbm1tL2RhbW9uL3N5c2ZzLmM6MTY1ODpzdHJ1Y3QgZGFtb25fc3lzZnNfY29udGV4dHMge1xcbm1tL2RhbW9uL3N5c2ZzLmMtMTY1OS1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0xNzc3PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2NvbnRleHRzX2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0xNzg2LVxcbm1tL2RhbW9uL3N5c2ZzLmM6MTc4NzpzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCB7XFxubW0vZGFtb24vc3lzZnMuYy0xNzg4LVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTE4MjE9c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfa2RhbW9uZF9ybV9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0xODI5LSAqL1xcbm1tL2RhbW9uL3N5c2ZzLmM6MTgzMDplbnVtIGRhbW9uX3N5c2ZzX2NtZCB7XFxubW0vZGFtb24vc3lzZnMuYy0xODMxLVxcdC8qIEBEQU1PTl9TWVNGU19DTURfT046IFR1cm4gdGhlIGtkYW1vbmQgb24uICovXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIzMDA9c3RhdGljIGludCBkYW1vbl9zeXNmc19kYW1vbl9jYWxsKGludCAoKmZuKSh2b2lkICpkYXRhKSxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjMxMy1cXG5tbS9kYW1vbi9zeXNmcy5jOjIzMTQ6c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXNfd2Fsa19kYXRhIHtcXG5tbS9kYW1vbi9zeXNmcy5jLTIzMTUtXFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKnN5c2ZzX2tkYW1vbmQ7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTI0OTg9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfa2RhbW9uZF9rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjUwNy1cXG5tbS9kYW1vbi9zeXNmcy5jOjI1MDg6c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmRzIHtcXG5tbS9kYW1vbi9zeXNmcy5jLTI1MDktXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjY0Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19rZGFtb25kc19rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjY1Mi1cXG5tbS9kYW1vbi9zeXNmcy5jOjI2NTM6c3RydWN0IGRhbW9uX3N5c2ZzX3VpX2RpciB7XFxubW0vZGFtb24vc3lzZnMuYy0yNjU0LVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQyOjQwLjM1OTE5NTE1MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzY3OTkzMDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXBwcm9hY2ggdG8gVW5kZXJzdGFuZGluZyB0aGUgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIHN5c2ZzIGNvZGUuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBob3cgaXQgdXNlcyBga29ial90eXBlYCBhbmQgc3lzZnMgZmlsZXMgdG8gbWFuYWdlIHRoaW5ncy4gQmFzZWQgb24gdGhlIGNvbnRleHQsIEkgdGhpbmsgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB0byB1bmRlcnN0YW5kIGhlcmUgYXJlIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgIGFuZCBwb3RlbnRpYWxseSBgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3Jlc2AuIEl0IHNvdW5kcyBsaWtlIHRoZXNlIGFyZSBjZW50cmFsIHRvIHNldHRpbmcgb3IgYXBwbHlpbmcgcXVvdGEgdGFyZ2V0cy4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gdmVyaWZ5IHRoZSBsb2NhdGlvbiBvZiBgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3Jlc2Agd2l0aGluIHRoZSBjb2RlLiBMZXQncyBzZWUgaWYgaXQncyBkZWZpbmVkIGluIGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgLiBUaGF0IGZpbGUgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgcGxhY2UgZm9yIHRoaXMga2luZCBvZiBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ2NCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQyOjQ0LjEyNzE5MDM1M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAzNjI0MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3Jlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NDc9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg5My1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg5NDppbnQgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg5NS1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQyOjQ0LjE5NzU1NTMxM1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzM2OTQ1MDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBEYXRhIEFjY2VzcyBNb25pdG9yIChEQU1PTikgUXVvdGEgTWFuYWdlbWVudCBJc3N1ZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gSSdtIGxvb2tpbmcgYXQgYGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNgLCBhbmQgaXQncyBtYXJrZWQgYXMgbm9uLXN0YXRpYy4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZWQgbXkgaW50ZXJlc3QuIEluIHRoZSBjb250ZXh0IG9mIERBTU9OJ3MgcXVvdGEgc3lzdGVtLCB0aGF0IG1lYW5zIGl0J3MgcG90ZW50aWFsbHkgYWNjZXNzaWJsZSBmcm9tIGVsc2V3aGVyZSBpbiB0aGUga2VybmVsLiBNeSBuZXh0IHRob3VnaHQgaXMsIHdoZXJlIGVsc2UgYXJlIHRoZSBEQU1PTiBxdW90YSByb3V0aW5lcyBmb3VuZD8gQW5kLCB3aGF0IG9mIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgPyBUaW1lIHRvIGNoZWNrIGBtbS9kYW1vbi9jb3JlLmNgLiBUaGF0J3Mgd2hlcmUgREFNT04ncyBjb3JlIGZ1bmN0aW9uYWxpdHkgcmVzaWRlcywgc28gaXQncyBhIGxpa2VseSBwbGFjZSB0byBmaW5kIG90aGVyIGtleSBxdW90YS1yZWxhdGVkIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucywgYW5kIHdoZXRoZXIgdGhleSBtaWdodCBpbmFkdmVydGVudGx5IGludHJvZHVjZSBzb21lIHJhY2UgY29uZGl0aW9ucyBvciBvdGhlciBpc3N1ZXMuIE15IGZvY3VzIG5vdyBpcyBvbiB1bmRlcnN0YW5kaW5nIGRhdGEgaW50ZWdyaXR5IGluIHRoaXMgcXVvdGEgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4OTIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0Mjo0Ny45MzQ1MDI1MzVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MTYyMDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTExNDI9c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTE1Mi0vKipcXG5tbS9kYW1vbi9jb3JlLmM6MTE1MzogKiBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoKSAtIENvbW1pdCBEQU1PUyBxdW90YSBnb2FscyB0byBhbm90aGVyIHF1b3RhLlxcbm1tL2RhbW9uL2NvcmUuYy0xMTU0LSAqIEBkc3Q6XFx0VGhlIGNvbW1pdCBkZXN0aW5hdGlvbiBEQU1PUyBxdW90YS5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTYzLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxMTY0OmludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xMTY1LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMTg5PXN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X3F1b3RhKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTk1LVxcdGRzdC1cXHUwMDNlc3ogPSBzcmMtXFx1MDAzZXN6O1xcbm1tL2RhbW9uL2NvcmUuYzoxMTk2OlxcdGVyciA9IGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fscyhkc3QsIHNyYyk7XFxubW0vZGFtb24vY29yZS5jLTExOTctXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDI6NDcuOTgwNjY2MDg1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMTE4MDQ0NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgREFNT04tUmVsYXRlZCBDb25maWd1cmF0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIHplcm8gaW4uIEknbSBzZWVpbmcgdGhhdCBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYCBhbmQgYGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNgIGFyZSBzb2xpZCBpbmRpY2F0b3JzIG9mIHRoZSBhcmVhIEkgbmVlZCB0byBiZSBmb2N1c2VkIG9uLiBUaG9zZSBsb29rIGxpa2UgZ29vZCBzdGFydGluZyBwb2ludHMuIE5vdywgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gdGhpcyBhcmVhLCB3aGljaCBJIHRoaW5rIGFyZSBgREFNT05gIGFuZCBgREFNT05fU1lTRlNgLiBPa2F5LCB0aW1lIHRvIGNoZWNrOiBJIHNob3VsZCB2ZXJpZnkgaWYgYERBTU9OX1NZU0ZTYCBoYXMgYW55IGRlcGVuZGVuY2llcy4gSSBjYW4ndCBiZSBzdXJlIHdpdGhvdXQgbG9va2luZywgc28gbGV0J3MgZmluZCBvdXQhIEknbGwgZGl2ZSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDg4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDI6NTIuMDkyNDcyMzM2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzg5Mjk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREFNT05fU1lTRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9LY29uZmlnPTU2PWNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxcbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXFxubW0vZGFtb24vS2NvbmZpZy02OS1cXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxcbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTc3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0Mjo1Mi4xNDAzNjkxNDZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE1NTI1NzEzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIERBTU9OIFN5c2ZzIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGV4YW1pbmluZyBgbW0vZGFtb24vS2NvbmZpZ2Agc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYERBTU9OX1NZU0ZTYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQsIHRoZSBjZW50cmFsIHBsYWNlIHdoZXJlIHRoZSBzeXNmcyBpbnRlcmZhY2UgZm9yIERBTU9OIGlzIGRlZmluZWQgaW4gdGhlIGJ1aWxkIHN5c3RlbS4gVGhpcyBmaWxlIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzeXNmcyBpbnRlcmZhY2UgaXMgZW5hYmxlZCwgZGlzYWJsZWQsIGFuZCBjb25maWd1cmVkLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBoZXJlLCBnaXZlbiBpdHMgY3JpdGljYWxpdHkgaW4gZW5hYmxpbmcgdXNlcnNwYWNlIGNvbnRyb2wgb3ZlciB0aGlzIGZyYW1ld29yay4gSSBleHBlY3QgdG8gc2VlIHRoZSB0eXBpY2FsIGBjb25maWdgIGJsb2NrIHdpdGggcG90ZW50aWFsbHkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBmZWF0dXJlcy4gSG9wZWZ1bGx5IHRoZXJlIHdpbGwgYmUgY2xlYXIgZG9jdW1lbnRhdGlvbiBpbmxpbmUgb3IgbmVhcmJ5IGFib3V0IGl0cyBpbXBsaWNhdGlvbnMgd2hlbiBlbmFibGVkLiBJJ2xsIGJlIGxvb2tpbmcgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgY29uZGl0aW9ucyB0aGF0IG5lZWQgdG8gYmUgbWV0IGZvciBpdCB0byBiZSBlbmFibGVkLiBBbnkgZGVwZW5kZW5jaWVzIG9uIHNwZWNpZmljIGtlcm5lbCB2ZXJzaW9ucywgb3RoZXIgY29uZmlndXJhdGlvbnMsIG9yIGV2ZW4gaGFyZHdhcmUgcGxhdGZvcm1zIHdvdWxkIGJlIGltcG9ydGFudCB0byBub3RlLiBPbmNlIEkgZnVsbHkgdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBJJ2xsIGhhdmUgYSBtdWNoIGJldHRlciBpZGVhIG9mIGhvdyB0aGUgc3lzZnMgaW50ZXJmYWNlIGJlaGF2ZXMgYW5kIGhvdyB0byBtYW5hZ2UgdGhlIGtlcm5lbCBmZWF0dXJlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4OTIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0Mjo1Ni4yOTU2MjgzNzdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2MDpcXHRcXHRoZWxwXFxuICA2MTpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiB2aXJ0dWFsIGFkZHJlc3NlcyBvcGVyYXRpb25zIEt1bml0IHRlc3Qgc3VpdGUuXFxuICA2MjpcXHRcXG4gIDYzOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXFxuICA2NDpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxcbiAgNjU6XFx0XFxuICA2NjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA2NzpcXHRcXG4gIDY4OlxcdGNvbmZpZyBEQU1PTl9TWVNGU1xcbiAgNjk6XFx0XFx0Ym9vbCBcXFwiREFNT04gc3lzZnMgaW50ZXJmYWNlXFxcIlxcbiAgNzA6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBTWVNGU1xcbiAgNzE6XFx0XFx0ZGVmYXVsdCBEQU1PTlxcbiAgNzI6XFx0XFx0aGVscFxcbiAgNzM6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTi4gIFRoZSB1c2VyIHNwYWNlIGNhbiB1c2VcXG4gIDc0OlxcdFxcdCAgdGhlIGludGVyZmFjZSBmb3IgYXJiaXRyYXJ5IGRhdGEgYWNjZXNzIG1vbml0b3JpbmcuXFxuICA3NTpcXHRcXG4gIDc2OlxcdGNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxuICA3NzpcXHRcXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4gIDc4OlxcdFxcdGRlcGVuZHMgb24gREFNT05fU1lTRlMgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbiAgNzk6XFx0XFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDI6NTYuMjk1Njg5NDQ2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NDM4OTAzNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIERBTU9OJ3MgU3lzZnMgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGBEQU1PTl9TWVNGU2AgcmVsaWVzIG9uIGJvdGggYERBTU9OYCBhbmQgYFNZU0ZTYC4gYFNZU0ZTYCBpcyBwcmV0dHkgc3RhbmRhcmQsIHdoaWNoIG1lYW5zIHRoZSByZWFsIGNvbmZpZ3VyYXRpb25zIG9mIGludGVyZXN0IGFyZSBnb2luZyB0byBiZSB0aG9zZSByZWxhdGVkIHRvIGBEQU1PTmAgYW5kIHRoZW4gc3BlY2lmaWNhbGx5LCBgREFNT05fU1lTRlNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgYXJlIHNldCB1cC4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYCB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2AuIElzIHRoYXQgdGhlIG9ubHkgcmVsZXZhbnQgbm9uLXN0YXRpYyBmdW5jdGlvbiB0aGVyZT8gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcgY3J1Y2lhbC5cblxuQWgsIHdhaXQsIGhvbGQgb24uIFRoZXJlJ3MgYWxzbyBgZGFtb25fc3lzZnNfc2V0X3F1b3RhX3Njb3Jlc2AgaW4gYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2DigKYgTm8sIHdhaXQsIHRoYXQncyBub3QgcXVpdGUgcmlnaHQuIEl0IGxvb2tzIGxpa2UgaXQgaXMgYWN0dWFsbHkgYGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNgLiBJIG5lZWQgdG8gcmUtZXhhbWluZSB0aGF0IGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDY4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDM6MDAuNzM5NTgyNzY3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzAzMDAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9zeXNmcy1jb21tb24uaD01MT1pbnQgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zKFxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTMtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NTQ6aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTUtXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yODQ3PXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlKFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4OTMtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4OTQ6aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4OTUtXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMTUyPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfY29tbWl0X3NjaGVtZXNfcXVvdGFfZ29hbHModm9pZCAqZGF0YSlcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjE2NS1cXHRzeXNmc19jdHggPSBzeXNmc19rZGFtb25kLVxcdTAwM2Vjb250ZXh0cy1cXHUwMDNlY29udGV4dHNfYXJyWzBdO1xcbm1tL2RhbW9uL3N5c2ZzLmM6MjE2NjpcXHRyZXR1cm4gZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzeXNmc19jdHgtXFx1MDAzZXNjaGVtZXMsIGN0eCk7XFxubW0vZGFtb24vc3lzZnMuYy0yMTY3LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDM6MDAuNzg2NjE2NTQ3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5MDAwOTY5NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgREFNT04gUGF0Y2ggZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIHByZXR0eSBjcml0aWNhbCBidWcgcmVsYXRlZCB0byB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGNvbW1pdG1lbnQgb2YgYGxhc3RfcHNpX3RvdGFsYCB3aXRoaW4gdGhlIERBTU9OIGNvcmUgYW5kIGl0cyBzeXNmcyBpbnRlcmZhY2UuIFRoYXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBubyBxdWVzdGlvbi4gV2UncmUgbG9va2luZyBhdCBjaGFuZ2VzIHRvIGhvdyBEQU1PTiBoYW5kbGVzIHRoZSBgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTYCBxdW90YSBtZXRyaWMsIHNwZWNpZmljYWxseSBhcm91bmQgaXRzIGludGVyYWN0aW9uIHdpdGggbWVtb3J5IHByZXNzdXJlIGluZm9ybWF0aW9uLiBBbmQgaXQncyBub3QganVzdCB0aGUgY29yZSBsb2dpYzsgdGhlIHBhdGNoIGFsc28gdHdlYWtzIGBuZXh0X3JlZnJlc2hfamlmZmllc2AgaW4gdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSwgd2hpY2ggaXMgdGhlIHVzZXItc3BhY2UgZmFjaW5nIHNpZGUgb2YgdGhlIHN5c3RlbS5cblxuR2l2ZW4gdGhhdCB0aGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGFyZSBleHBvc2VkIHRocm91Z2ggc3lzZnMsIHRoZSBhdHRhY2sgc3VyZmFjZSBpcyBkZWZpbml0ZWx5IHRoZXJlLiBXZSdyZSB0YWxraW5nIGFib3V0IGEgcGF0aCB0byBpbmZsdWVuY2UgbWVtb3J5IG1hbmFnZW1lbnQgYmVoYXZpb3IgZnJvbSB1c2Vyc3BhY2UuIFRoZSBrZXkgc3ltYm9scyBJIG5lZWQgdG8gZm9jdXMgb24gZHVyaW5nIGZ1enppbmcgYXJlIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgIGFuZCBgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3Jlc2AsIHNpbmNlIHRoZXNlIGFyZSB0aGUgcG9pbnRzIG9mIGludGVncmF0aW9uIGFmZmVjdGVkIGJ5IHRoaXMgcGF0Y2guIFdlIGFsc28gbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYERBTU9OYCBhbmQgYERBTU9OX1NZU0ZTYCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZCwgYXMgdGhlc2UgYXJlIHByZXJlcXVpc2l0ZXMgZm9yIHRoZSBhZmZlY3RlZCBjb2RlIHBhdGhzLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaGFzIHRoZSBwb3RlbnRpYWwgdG8gaW50cm9kdWNlIHN1YnRsZSBidXQgY3JpdGljYWwgbWVtb3J5IG1hbmFnZW1lbnQgZXJyb3JzIHRoYXQgY291bGQgYmUgZXhwbG9pdGFibGUsIGFuZCBpdCB3YXJyYW50cyB0aG9yb3VnaCBmdXp6aW5nLiBJJ20gZ29pbmcgdG8gbWFyayB0aGlzIGFzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjU3LCJPdXRwdXRUb2tlbnMiOjE1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0MzowNi42ODY3MTU0NTNaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjA4NDU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzXCIsXG4gICAgXCJkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgREFNT04gbG9naWMgdG8gcHJvcGVybHkgaW5pdGlhbGl6ZSBhbmQgY29tbWl0IHRoZSBgbGFzdF9wc2lfdG90YWxgIGZvciB0aGUgYERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AgcXVvdGEgbWV0cmljLiBJdCBhbHNvIGZpeGVzIHRoZSBgbmV4dF9yZWZyZXNoX2ppZmZpZXNgIGhhbmRsaW5nIGluIERBTU9OIHN5c2ZzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzeXNmcywgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vc19jb21taXRfcXVvdGFfZ29hbHNcIixcbiAgICBcImRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBEQU1PTiBsb2dpYyB0byBwcm9wZXJseSBpbml0aWFsaXplIGFuZCBjb21taXQgdGhlIGBsYXN0X3BzaV90b3RhbGAgZm9yIHRoZSBgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTYCBxdW90YSBtZXRyaWMuIEl0IGFsc28gZml4ZXMgdGhlIGBuZXh0X3JlZnJlc2hfamlmZmllc2AgaGFuZGxpbmcgaW4gREFNT04gc3lzZnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHN5c2ZzLCBtYWtpbmcgdGhlbSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0MzowNi43NjI4MDU4OTNaIiwiU2VxIjozMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjM3MTcyNzQ4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQzOjA2Ljc2MzI1NjIzM1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNDIzNzEyNzQzNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGJ1ZyB3aGVyZSB0aGUgYGxhc3RfcHNpX3RvdGFsYCBmaWVsZCBpbiBgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWxgIGlzIGxlZnQgdW5pbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24uIFRoZSBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHVzaW5nIGBrbWFsbG9jX29iaigpYCAod2hpY2ggbWFwcyB0byBga21hbGxvY2AgYW5kIGRvZXMgbm90IHplcm8gbWVtb3J5KSBpbiBgZGFtb3NfbmV3X3F1b3RhX2dvYWwoKWAsIGJ1dCBgbGFzdF9wc2lfdG90YWxgIHdhcyBub3QgaW5pdGlhbGl6ZWQuIER1cmluZyB0aGUgZmlyc3QgZXZhbHVhdGlvbiBjeWNsZSwgYGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoKWAgcmVhZHMgdGhpcyB1bmluaXRpYWxpemVkIGZpZWxkIHRvIGNvbXB1dGUgYGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBub3dfcHNpX3RvdGFsIC0gZ29hbC1cXHUwMDNlbGFzdF9wc2lfdG90YWw7YC4gVGhpcyB1bmluaXRpYWxpemVkIHJlc3VsdCBpcyBzdWJzZXF1ZW50bHkgdXNlZCBpbiBhIGNvbmRpdGlvbmFsIGJyYW5jaCAodmlhIHRoZSBgbWF4KClgIG1hY3JvKSBpbiBgZGFtb3NfcXVvdGFfc2NvcmUoKWAgdG8gZGV0ZXJtaW5lIHRoZSBoaWdoZXN0IHF1b3RhIHNjb3JlLCB3aGljaCBkaWN0YXRlcyBtZW1vcnkgcmVjbGFpbSBiZWhhdmlvci5cXG5cXG5TdGFuZGFyZCBLQVNBTiBvbmx5IGRldGVjdHMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWUgYnVnczsgaXQgZG9lcyBub3QgdHJhY2sgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIHdvdWxkIGNvbXBsZXRlbHkgbWlzcyB0aGlzIGJ1Zy4gS01TQU4sIG9uIHRoZSBvdGhlciBoYW5kLCB0cmFja3MgdW5pbml0aWFsaXplZCBtZW1vcnkgYXQgdGhlIGJpdCBsZXZlbCBhbmQgd2lsbCByZWxpYWJseSBmbGFnIHRoZSB1c2Ugb2YgdGhlIHVuaW5pdGlhbGl6ZWQgdmFsdWUgd2hlbiBpdCBhZmZlY3RzIGNvbnRyb2wgZmxvdyAoZS5nLiwgaW4gdGhlIGBtYXgoKWAgY29tcGFyaXNvbikuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBoaWdobHkganVzdGlmaWVkIHRvIGNhdGNoIHRoaXMgYW5kIHNpbWlsYXIgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGluIHRoZSBEQU1PTiBzdWJzeXN0ZW0uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkMTZkZWFlOGNhODMwNTNjNjllZDgzZWIwNGJmZmU4ZDlhMzRiMjg1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjcgMDQ6NDE6NTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDY0NGRhZjVhMTY1NjAuLjZmMzYwZDYxMzkwYWQgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTExMjIsNiArMTEyMiw5IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKFxuIFx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqc3JjKVxuIHtcbiBcdHN3aXRjaCAoZHN0LVx1MDAzZW1ldHJpYykge1xuK1x0Y2FzZSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVM6XG4rXHRcdGRzdC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKTtcbitcdFx0YnJlYWs7XG4gXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlA6XG4gXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlA6XG4gXHRcdGRzdC1cdTAwM2VuaWQgPSBzcmMtXHUwMDNlbmlkO1xuQEAgLTExNDMsNyArMTE0Niw2IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxuIFx0ZHN0LVx1MDAzZXRhcmdldF92YWx1ZSA9IHNyYy1cdTAwM2V0YXJnZXRfdmFsdWU7XG4gXHRpZiAoZHN0LVx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9VU0VSX0lOUFVUKVxuIFx0XHRkc3QtXHUwMDNlY3VycmVudF92YWx1ZSA9IHNyYy1cdTAwM2VjdXJyZW50X3ZhbHVlO1xuLVx0Lyoga2VlcCBsYXN0X3BzaV90b3RhbCBhcyBpcywgc2luY2UgaXQgd2lsbCBiZSB1cGRhdGVkIGluIG5leHQgY3ljbGUgKi9cbiBcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKGRzdCwgc3JjKTtcbiB9XG4gXG5AQCAtMzcyNyw2ICszNzI5LDE3IEBAIHN0YXRpYyBpbnQga2RhbW9uZF93YWl0X2FjdGl2YXRpb24oc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuIFx0cmV0dXJuIC1FQlVTWTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgZGFtb3NfaW5pdF9xdW90YV9nb2FsX2xhc3RfcHNpKHN0cnVjdCBkYW1vcyAqcylcbit7XG4rXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcbitcbitcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgXHUwMDI2cy1cdTAwM2VxdW90YSkge1xuK1x0XHRpZiAoZ29hbC1cdTAwM2VtZXRyaWMgIT0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsID0gZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpO1xuK1x0fVxuK31cbitcbiBzdGF0aWMgdm9pZCBrZGFtb25kX2luaXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHNhbXBsZV9pbnRlcnZhbCA9IGN0eC1cdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWwgP1xuQEAgLTM3NDMsNiArMzc1Niw3IEBAIHN0YXRpYyB2b2lkIGtkYW1vbmRfaW5pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuIFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHNjaGVtZSwgY3R4KSB7XG4gXHRcdGRhbW9zX3NldF9uZXh0X2FwcGx5X3NpcyhzY2hlbWUsIGN0eCk7XG4gXHRcdGRhbW9zX3NldF9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0KHNjaGVtZSk7XG4rXHRcdGRhbW9zX2luaXRfcXVvdGFfZ29hbF9sYXN0X3BzaShzY2hlbWUpO1xuIFx0fVxuIH1cbiBcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy5jIGIvbW0vZGFtb24vc3lzZnMuY1xuaW5kZXggZTM4NThmZmFiNGIyMi4uZjA1YjI1NmM5MGVlNyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3N5c2ZzLmNcbisrKyBiL21tL2RhbW9uL3N5c2ZzLmNcbkBAIC0xNzg5LDYgKzE3ODksNyBAQCBzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCB7XG4gXHRzdHJ1Y3QgZGFtb25fc3lzZnNfY29udGV4dHMgKmNvbnRleHRzO1xuIFx0c3RydWN0IGRhbW9uX2N0eCAqZGFtb25fY3R4O1xuIFx0dW5zaWduZWQgaW50IHJlZnJlc2hfbXM7XG4rXHR1bnNpZ25lZCBsb25nIG5leHRfcmVmcmVzaF9qaWZmaWVzO1xuIH07XG4gXG4gc3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICpkYW1vbl9zeXNmc19rZGFtb25kX2FsbG9jKHZvaWQpXG5AQCAtMjIxNSwxNyArMjIxNiwxNSBAQCBzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fc3lzZnNfYnVpbGRfY3R4KFxuIFx0cmV0dXJuIGN0eDtcbiB9XG4gXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllcztcbi1cbiBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3JlcGVhdF9jYWxsX2ZuKHZvaWQgKmRhdGEpXG4ge1xuIFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKnN5c2ZzX2tkYW1vbmQgPSBkYXRhO1xuIFxuIFx0aWYgKCFzeXNmc19rZGFtb25kLVx1MDAzZXJlZnJlc2hfbXMpXG4gXHRcdHJldHVybiAwO1xuLVx0aWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXMpKVxuK1x0aWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHN5c2ZzX2tkYW1vbmQtXHUwMDNlbmV4dF9yZWZyZXNoX2ppZmZpZXMpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXMgPSBqaWZmaWVzICtcbitcdHN5c2ZzX2tkYW1vbmQtXHUwMDNlbmV4dF9yZWZyZXNoX2ppZmZpZXMgPSBqaWZmaWVzICtcbiBcdFx0bXNlY3NfdG9famlmZmllcyhzeXNmc19rZGFtb25kLVx1MDAzZXJlZnJlc2hfbXMpO1xuIFxuIFx0aWYgKCFtdXRleF90cnlsb2NrKFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spKVxuQEAgLTIyNzMsOCArMjI3Miw4IEBAIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcbiBcdH1cbiBcdGtkYW1vbmQtXHUwMDNlZGFtb25fY3R4ID0gY3R4O1xuIFxuLVx0ZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllcyA9XG4tXHRcdGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGtkYW1vbmQtXHUwMDNlcmVmcmVzaF9tcyk7XG4rXHRrZGFtb25kLVx1MDAzZW5leHRfcmVmcmVzaF9qaWZmaWVzID0gamlmZmllcyArXG4rXHRcdG1zZWNzX3RvX2ppZmZpZXMoa2RhbW9uZC1cdTAwM2VyZWZyZXNoX21zKTtcbiBcbiBcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXHUwMDNlZm4gPSBkYW1vbl9zeXNmc19yZXBlYXRfY2FsbF9mbjtcbiBcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXHUwMDNlZGF0YSA9IGtkYW1vbmQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0MzowNi43NjMyNTcwNzNaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTYxMjE5Njc0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEQU1PTiBQYXRjaCBBbmFseXNpczogUFNJIEludGVncmF0aW9uIGFuZCBTeXNmcyBFbmhhbmNlbWVudHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgREFNT04gcGF0Y2guIEl0IGxvb2tzIGxpa2Ugd2UndmUgZ290IGNoYW5nZXMgaW4gYG1tL2RhbW9uL2NvcmUuY2AgYW5kIGBtbS9kYW1vbi9zeXNmcy5jYCwgZm9jdXNpbmcgb24gaW50ZWdyYXRpbmcgUFNJIChQcmVzc3VyZSBTdGFsbCBJbmZvcm1hdGlvbikgbWV0cmljcyBhbmQgaW1wcm92aW5nIHRoZSBzeXNmcyBpbnRlcmZhY2UuXG5cbkZpcnN0LCBpbiBgbW0vZGFtb24vY29yZS5jYCwgdGhlIGtleSBhZGp1c3RtZW50IHNlZW1zIHRvIGJlIGludGVncmF0aW5nIGBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVNgLiBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb25gIGlzIG5vdyB1cGRhdGVkIHRvIGhhbmRsZSB0aGlzIHF1b3RhIHR5cGUuIENyaXRpY2FsbHksIHdlJ3JlIGdyYWJiaW5nIHRoZSB0b3RhbCBQU0kgbWV0cmljcyB1c2luZyBgZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpYCBhbmQgc3RvcmluZyB0aGVtIGluIGBkc3QtXHUwMDNlbGFzdF9wc2lfdG90YWxgLiBUaGlzIHN0cm9uZ2x5IGltcGxpZXMgdGhhdCB3ZSdyZSB1c2luZyBQU0kgZGF0YSB0byBpbmZvcm0gb3VyIHF1b3RhIGRlY2lzaW9ucywgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBhZGRpdGlvbiBmb3IgbW9yZSBpbnRlbGxpZ2VudCBtZW1vcnkgbWFuYWdlbWVudC4gVGhlcmUgYXJlIHNvbWUgbWlub3IgdHdlYWtzIHRvIGV4aXN0aW5nIGZ1bmN0aW9ucy4gYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsYCBoYXMgYSBjb21tZW50IHJlbW92ZWQsIGFuZCBhIG5ldyBmdW5jdGlvbiwgYGRhbW9zX2luaXRfcXVvdGFfZ29hbF9sYXN0X3BzaWAsIGhhcyBiZWVuIGludHJvZHVjZWQsIHdoaWNoIGRvZXMgd2hhdCB0aGUgbmFtZSBpbXBsaWVzOiBpbml0aWFsaXplcyBgZ29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbGAgZm9yIHRoZSBgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTYCBzY2hlbWUuIFRoaXMgaW5pdGlhbGl6YXRpb24gaXMgZXNzZW50aWFsLCBhbmQgaXQncyBnb29kIHRvIHNlZSBpdCBhZGRyZXNzZWQgZGlyZWN0bHkgd2l0aGluIHRoZSBjb250ZXh0IGluaXRpYWxpemF0aW9uIChga2RhbW9uZF9pbml0X2N0eGApLlxuXG5Ob3csIGZsaXBwaW5nIG92ZXIgdG8gYG1tL2RhbW9uL3N5c2ZzLmNgLCB0aGUgbW9kaWZpY2F0aW9ucyBzZWVtIGNlbnRlcmVkIGFyb3VuZCByZWZpbmluZyB0aGUgdXBkYXRlIG1lY2hhbmlzbSBhbmQgdHlpbmcgaXQgdG8gUFNJIGludGVncmF0aW9uLiBBIGtleSBjaGFuZ2UgaXMgdGhlIGFkZGl0aW9uIG9mIGEgbmV3IGZpZWxkLCBgdW5zaWduZWQgbG9uZyBuZXh0X3JlZnJlc2hfamlmZmllc2AsIHdpdGhpbiB0aGUgYHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kYC4gVGhlIGdsb2JhbCB2YXJpYWJsZSBgZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllc2AgaGFzIGJlZW4gcmVtb3ZlZCwgcmVwbGFjZWQgYnkgdGhpcyBwZXItaW5zdGFuY2UgZmllbGQuIFRoaXMgY2hhbmdlIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IG1ha2VzIHRoZSByZWZyZXNoIG1lY2hhbmlzbSBtb3JlIGZsZXhpYmxlIGFuZCBwb3RlbnRpYWxseSBhbGxvd3MgZm9yIGRpZmZlcmVudCB1cGRhdGUgZnJlcXVlbmNpZXMgZm9yIGRpZmZlcmVudCBEQU1PTiBpbnN0YW5jZXMuIFRoaXMgbWFrZXMgc2Vuc2UgZnJvbSBhIHBlcmZvcm1hbmNlIHBlcnNwZWN0aXZlLiBgZGFtb25fc3lzZnNfcmVwZWF0X2NhbGxfZm5gIG5vdyB1c2VzIGBzeXNmc19rZGFtb25kLVx1MDAzZW5leHRfcmVmcmVzaF9qaWZmaWVzYC4gSSdsbCB3YW50IHRvIGVuc3VyZSB0aGlzIGlzbid0IGNyZWF0aW5nIGFueSB1bmV4cGVjdGVkIHJhY2UgY29uZGl0aW9ucyBvciBjb25jdXJyZW5jeSBpc3N1ZXMgYW5kIHRoYXQgdGhlIGNvcnJlY3QgamlmZmllcyBhcmUgYmVpbmcgc2V0LiBUaGUgaW5pdGlhbGl6YXRpb24gb2YgYGtkYW1vbmQtXHUwMDNlbmV4dF9yZWZyZXNoX2ppZmZpZXNgIGR1cmluZyBgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbmAgaXMgdGhlIGZpbmFsIHBpZWNlIG9mIHRoZSBwdXp6bGUuXG5cbkZpbmFsbHksIEkgbmVlZCB0byB2ZXJpZnkgaG93IGBzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZGAgaXMgYmVpbmcgYWxsb2NhdGVkLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgaXQgaXMgYmVpbmcgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jYC4gSSdsbCB3YW50IHRvIGNoZWNrIHRoYXQgdGhpcyBhbGxvY2F0aW9uIGlzIGhhbmRsZWQgY29ycmVjdGx5IGJ5IGBkYW1vbl9zeXNmc19rZGFtb25kX2FsbG9jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzExMiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQzOjE2LjM3NTQ1NjMzMloiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4ODg2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fc3lzZnNfa2RhbW9uZF9hbGxvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9zeXNmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3N5c2ZzLmM9MTc4Nz1zdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTE3OTQtXFxubW0vZGFtb24vc3lzZnMuYzoxNzk1OnN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqZGFtb25fc3lzZnNfa2RhbW9uZF9hbGxvYyh2b2lkKVxcbm1tL2RhbW9uL3N5c2ZzLmMtMTc5Ni17XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTI1NDc9c3RhdGljIGludCBkYW1vbl9zeXNmc19rZGFtb25kc19hZGRfZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZHMgKmtkYW1vbmRzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yNTY2LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9rZGFtb25kczsgaSsrKSB7XFxubW0vZGFtb24vc3lzZnMuYzoyNTY3OlxcdFxcdGtkYW1vbmQgPSBkYW1vbl9zeXNmc19rZGFtb25kX2FsbG9jKCk7XFxubW0vZGFtb24vc3lzZnMuYy0yNTY4LVxcdFxcdGlmICgha2RhbW9uZCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0MzoxNi40MjEzNjA5MzJaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk4NTY3MTMwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgZGFtb25fc3lzZnNfa2RhbW9uZF9hbGxvY2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgZGFtb25fc3lzZnNfa2RhbW9uZF9hbGxvY2AgaXMgaW1wbGVtZW50ZWQuIEl0J3MgYSBrZXkgZnVuY3Rpb24sIGFuZCBhIGdvb2QgZ3Jhc3Agb2YgaXRzIHNwZWNpZmljcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSBzeXN0ZW0gYW5kIGl0cyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgc3lzZnMgaW50ZXJmYWNlLiBJIG5lZWQgdG8gd2FsayB0aHJvdWdoIHRoZSBjb2RlIGFuZCBxdWlja2x5IHJlY2FsbCB0aGUgYWxsb2NhdGlvbiBsb2dpYy4gSSBzaG91bGQgZm9jdXMgb24gaG93IGl0IGhhbmRsZXMgbWVtb3J5LCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IHVzZXMsIHBvdGVudGlhbCBzeW5jaHJvbml6YXRpb24gaXNzdWVzLCBhbmQgdGhlIG92ZXJhbGwgZWZmaWNpZW5jeSBvZiBpdHMgYWxsb2NhdGlvbiBzY2hlbWUuIExldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IGdvdGNoYXMgaW4gdGhpcyBhbGxvY2F0aW9uIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Mzg2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDM6MTkuNDA3MDMzNzA1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9zeXNmcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3OTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3OTU6XFx0c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICpkYW1vbl9zeXNmc19rZGFtb25kX2FsbG9jKHZvaWQpXFxuMTc5NjpcXHR7XFxuMTc5NzpcXHRcXHRyZXR1cm4ga3phbGxvY19vYmooc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQpO1xcbjE3OTg6XFx0fVxcbjE3OTk6XFx0XFxuMTgwMDpcXHRzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2tkYW1vbmRfYWRkX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXFxuMTgwMTpcXHR7XFxuMTgwMjpcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfY29udGV4dHMgKmNvbnRleHRzO1xcbjE4MDM6XFx0XFx0aW50IGVycjtcXG4xODA0OlxcdFxcbjE4MDU6XFx0XFx0Y29udGV4dHMgPSBkYW1vbl9zeXNmc19jb250ZXh0c19hbGxvYygpO1xcbjE4MDY6XFx0XFx0aWYgKCFjb250ZXh0cylcXG4xODA3OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjE4MDg6XFx0XFxuMTgwOTpcXHRcXHRlcnIgPSBrb2JqZWN0X2luaXRfYW5kX2FkZChcXHUwMDI2Y29udGV4dHMtXFx1MDAzZWtvYmosXFxuMTgxMDpcXHRcXHRcXHRcXHRcXHUwMDI2ZGFtb25fc3lzZnNfY29udGV4dHNfa3R5cGUsIFxcdTAwMjZrZGFtb25kLVxcdTAwM2Vrb2JqLFxcbjE4MTE6XFx0XFx0XFx0XFx0XFxcImNvbnRleHRzXFxcIik7XFxuMTgxMjpcXHRcXHRpZiAoZXJyKSB7XFxuMTgxMzpcXHRcXHRcXHRrb2JqZWN0X3B1dChcXHUwMDI2Y29udGV4dHMtXFx1MDAzZWtvYmopO1xcbjE4MTQ6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDM6MTkuNDA3MjI5MDM1WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3NTQ1MTc2MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEQU1PTiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgREFNT04gcGF0Y2gsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIHVzaW5nIGBremFsbG9jX29iamAsIHdoaWNoIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoZSBtZW1vcnkgaXMgYmVpbmcgemVyb2VkIG91dC4gVGhhdCdzIGdvb2QgdG8gc2VlLiBUaGUgc2Vjb25kIGFyZWEgb2YgY29uY2VybiBJIGhhdmUgaXMgdGhlIGNoYW5nZSBpbiBgbW0vZGFtb24vY29yZS5jYCwgc3BlY2lmaWNhbGx5IGhvdyBgbGFzdF9wc2lfdG90YWxgIGlzIGluaXRpYWxpemVkLiBXYWl0LCBub3cgdGhhdCBJIHRoaW5rIGFib3V0IGl0LCBgbGFzdF9wc2lfdG90YWxgIGdldHMgaW5pdGlhbGl6ZWQgaW4gYGRhbW9zX2luaXRfcXVvdGFfZ29hbF9sYXN0X3BzaWAgd2hlbiBga2RhbW9uZF9pbml0X2N0eGAgaXMgY2FsbGVkLlxuXG5UaGUga2V5IHF1ZXN0aW9uIGluIG15IG1pbmQgaXMgYWx3YXlzOiBJcyB0aGVyZSBhIHBvdGVudGlhbCBmb3IgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBpbmZvcm1hdGlvbiBsZWFrIGhlcmU/IExldCdzIGRpZyBkZWVwZXIuIFRoZSBjaGFuZ2VzIGFwcGVhciB0byBiZSBsb2dpYyBmaXhlcy4gU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlOlxuXG4xLiAgYGxhc3RfcHNpX3RvdGFsYCB3YXNuJ3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQgd2hlbiB0aGUgY29udGV4dCB3YXMgc3RhcnRlZCwgb3Igd2Fzbid0IHVwZGF0ZWQgY29ycmVjdGx5IGluIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbmAuXG4yLiAgYGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXNgIHdhcyBhIGdsb2JhbCB2YXJpYWJsZS4gVGhpcyBtZWFucyBtdWx0aXBsZSBrZGFtb25kcyBjb3VsZCBzdGVwIG9uIGVhY2ggb3RoZXIsIGNhdXNpbmcgc2VyaW91cyBidWdzLiBTbywgdGhleSBtb3ZlZCBpdCB0byBgc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmRgLlxuXG5HaXZlbiB0aGF0LCBteSBndXQgZmVlbGluZyBpcyB0aGF0IG5laXRoZXIgb2YgdGhlc2UgY2hhbmdlcyBkaXJlY3RseSBpbnRyb2R1Y2UgYSByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXJzcGFjZSwgb3IgdXNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gYSB3YXkgdGhhdCBLTVNBTiB3b3VsZCB1bmlxdWVseSBmbGFnLiBUaGUgbWVtb3J5IGFsbG9jYXRlZCBmb3IgYGRhbW9uX3N5c2ZzX2tkYW1vbmRgIGlzIHplcm9lZCwgYW5kIHRoZSBgbGFzdF9wc2lfdG90YWxgIGlzIGEgZmllbGQgaW4gYHN0cnVjdCBkYW1vc19xdW90YV9nb2FsYCwgd2hpY2ggaXMgbGlrZWx5IHplcm8taW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uLiBIb3dldmVyLCBiZXR0ZXIgdG8gYmUgY2VydGFpbiB0aGFuIHNvcnJ5LiBMZXQncyBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBkYW1vc19xdW90YV9nb2FsYCBhbGxvY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTI2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDM6MjYuMTYxNzQ5NTZaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDc1ODYwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19xdW90YV9nb2FsLiphbGxvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQzOjI2LjIwNjgyOTY3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NjgxODkzNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBOZXcgUXVvdGEgR29hbCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBkYW1vc19uZXdfcXVvdGFfZ29hbGAgdmFyaWFibGUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBjb25zaWRlciBpdHMgY29udGV4dCB3aXRoaW4gdGhlIGJyb2FkZXIgYGRhbW9zYCBmcmFtZXdvcmsuIElzIHRoaXMgYSBuZXcgZ29hbCBiZWluZyBpbnRyb2R1Y2VkPyBBIHJldmlzaW9uIG9mIGFuIGV4aXN0aW5nIG9uZT8gQW5kIHdoYXQncyB0aGUgZXhwZWN0ZWQgaW1wYWN0PyBJJ20gYWxyZWFkeSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgZG93bnN0cmVhbSBkZXBlbmRlbmNpZXM7IHdoaWNoIG1vZGVscywgcmVwb3J0cywgb3IgZGFzaGJvYXJkcyByZWx5IG9uIHRoaXMgcGFydGljdWxhciBxdW90YT9cblxuRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzdHJ1Y3R1cmUuIElzIHRoaXMgYSBzY2FsYXIgdmFsdWUsIGEgZGlzdHJpYnV0aW9uLCBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4PyBUaGUgZm9ybWF0IHdpbGwgZGljdGF0ZSBob3cgSSdsbCB2YWxpZGF0ZSBpdCBhbmQgaWRlbnRpZnkgcG90ZW50aWFsIGlzc3Vlcy4gQXJlIHRoZXJlIGFueSBhc3NvY2lhdGVkIG1ldGFkYXRhIHRhZ3Mgb3IgZG9jdW1lbnRhdGlvbiBJIHNob3VsZCBiZSByZXZpZXdpbmc/IENoZWNraW5nIHRoZSBzY2hlbWEgb3IgZGF0YSBkaWN0aW9uYXJ5IHdvdWxkIGJlIHRoZSBsb2dpY2FsIG5leHQgc3RlcCB0byB1bmRlcnN0YW5kIHRoZSBpbnB1dCB0eXBlcywgdmFsaWRpdHkgY29uc3RyYWludHMsIGFuZCB0aGUgYWNjZXB0YWJsZSByYW5nZS5cblxuQXNzdW1pbmcgdGhpcyBpcyBuZXcgb3IgbW9kaWZpZWQsIEkgbmVlZCB0byBldmFsdWF0ZSB0aGUgaW1wbGljYXRpb25zIGZvciBmb3JlY2FzdGluZy4gRG9lcyB0aGlzIGNoYW5nZSBuZWNlc3NpdGF0ZSByZS1jYWxpYnJhdGlvbiBvZiBhbnkgcHJlZGljdGl2ZSBtb2RlbHM/IFdoYXQgYWJvdXQgaGlzdG9yaWNhbCBjb21wYXJpc29ucz8gV2lsbCB0aGlzIGNoYW5nZSBhZmZlY3Qgb3VyIGFiaWxpdHkgdG8gYWNjdXJhdGVseSBtZWFzdXJlIHBlcmZvcm1hbmNlIGFnYWluc3QgdGhlIG9yaWdpbmFsIHRhcmdldHM/IEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIGNoYW5nZSBhZmZlY3RzIHRoZSBvdmVyYWxsIHBlcmZvcm1hbmNlIG1ldHJpY3MgYW5kIHdoZXRoZXIgb3Igbm90IHRoZXJlIGFyZSBhbnkgaW1wYWN0cyBvbiB0aGUgcmVwb3J0aW5nLlxuXG5Gcm9tIHRoZXJlLCBJIHdhbnQgdG8gaW1tZWRpYXRlbHkgdGhpbmsgYWJvdXQgdGhlIGltcGFjdCBvZiB0aGlzIHBhcnRpY3VsYXIgZ29hbCBvbiBhbnkgZXhpc3RpbmcgYWxlcnRzIG9yIG1vbml0b3Jpbmcgc3lzdGVtcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXNlIHN5c3RlbXMgcmVmbGVjdCB0aGUgbmV3IHRocmVzaG9sZCwgYW5kIGlmIG5vdCwgd2hhdCB0eXBlIG9mIHJlbWVkaWF0aW9uIGlzIHJlcXVpcmVkP1xuVWx0aW1hdGVseSwgbXkgZ29hbCBoZXJlIGlzIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBjaGFuZ2UgaXMgcmVhc29uYWJsZSwgdGhvcm91Z2hseSB2ZXR0ZWQsIGFuZCB3aWxsIGludGVncmF0ZSBzbW9vdGhseSBpbnRvIHRoZSBleGlzdGluZyBvcGVyYXRpb25hbCBlbnZpcm9ubWVudC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGFsbCBnb2VzIHdlbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NzMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0MzozMC4xNzUwMjA2MjFaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDE3MjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX25ld19xdW90YV9nb2FsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9NjIxPXZvaWQgZGFtb3NfZGVzdHJveV9maWx0ZXIoc3RydWN0IGRhbW9zX2ZpbHRlciAqZilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy02MjYtXFxubW0vZGFtb24vY29yZS5jOjYyNzpzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZGFtb3NfbmV3X3F1b3RhX2dvYWwoXFxubW0vZGFtb24vY29yZS5jLTYyOC1cXHRcXHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMTY0PWludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTExNzgtXFx0XFx0XFx0Y29udGludWU7XFxubW0vZGFtb24vY29yZS5jOjExNzk6XFx0XFx0bmV3X2dvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChcXG5tbS9kYW1vbi9jb3JlLmMtMTE4MC1cXHRcXHRcXHRcXHRzcmNfZ29hbC1cXHUwMDNlbWV0cmljLCBzcmNfZ29hbC1cXHUwMDNldGFyZ2V0X3ZhbHVlKTtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9MjI5PXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYWRkX3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vcyAqaG90X3NjaGVtZSxcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjM3LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbm1tL2RhbW9uL2xydV9zb3J0LmM6MjM4OlxcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9BQ1RJVkVfTUVNX0JQLCBhY3RpdmVfbWVtX2JwKTtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTIzOS1cXHRpZiAoIWdvYWwpXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTI0Mi1cXHQvKiBhaW0gMC4yICUgZ29hbCBjb25mbGljdCwgdG8ga2VlcCBsaXR0bGUgcGluZyBwb25nICovXFxubW0vZGFtb24vbHJ1X3NvcnQuYzoyNDM6XFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX0lOQUNUSVZFX01FTV9CUCxcXG5tbS9kYW1vbi9scnVfc29ydC5jLTI0NC1cXHRcXHRcXHQxMDAwMCAtIGFjdGl2ZV9tZW1fYnAgKyAyKTtcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0xOTQ9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yMzUtXFx0aWYgKHF1b3RhX21lbV9wcmVzc3VyZV91cykge1xcbm1tL2RhbW9uL3JlY2xhaW0uYzoyMzY6XFx0XFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUyxcXG5tbS9kYW1vbi9yZWNsYWltLmMtMjM3LVxcdFxcdFxcdFxcdHF1b3RhX21lbV9wcmVzc3VyZV91cyk7XFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMjQzLVxcdGlmIChxdW90YV9hdXRvdHVuZV9mZWVkYmFjaykge1xcbm1tL2RhbW9uL3JlY2xhaW0uYzoyNDQ6XFx0XFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX1VTRVJfSU5QVVQsIDEwMDAwKTtcXG5tbS9kYW1vbi9yZWNsYWltLmMtMjQ1LVxcdFxcdGlmICghZ29hbClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yODQ3PXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlKFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NjAtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4NjE6XFx0XFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKHN5c2ZzX2dvYWwtXFx1MDAzZW1ldHJpYyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg2Mi1cXHRcXHRcXHRcXHRzeXNmc19nb2FsLVxcdTAwM2V0YXJnZXRfdmFsdWUpO1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTgzND1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2Fsc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg1Mi1cXHRcXHQgKi9cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODUzOlxcdFxcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChkc3RfZ29hbHNbaV0ubWV0cmljLFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NTQtXFx0XFx0XFx0XFx0ZHN0X2dvYWxzW2ldLnRhcmdldF92YWx1ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQzOjMwLjIxOTQ0MDQ0MVoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTI3NDk4ODkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgTmV3IFF1b3RhIEdvYWwgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaXRzIG92ZXJhbGwgbG9naWMgYW5kIG1ha2Ugc3VyZSBpdCBhbGlnbnMgd2l0aCB0aGUgdXBkYXRlZCByZXF1aXJlbWVudHMuIEkgd2FudCB0byBjaGVjayBmb3IgYW55IHBvdGVudGlhbCBlZGdlIGNhc2VzIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIG1pc3NlZCBpbiB0aGUgaW5pdGlhbCBkZXNpZ24uIFRoaW5ncyBsaWtlIGhvdyBpdCBoYW5kbGVzIHNjZW5hcmlvcyB3aXRoIHplcm8gcXVvdGEsIHF1b3RhcyB0aGF0IGFyZSB1cGRhdGVkIG1pZC1jeWNsZSwgYW5kIG5lZ2F0aXZlIHZhbHVlcywgaWYgdGhvc2UgYXJlIGV2ZW4gcGVybWl0dGVkLiBJIG5lZWQgdG8gZXhhbWluZSB0aGUgc3BlY2lmaWMgY2FsY3VsYXRpb25zLCBlbnN1cmluZyB0aGV5J3JlIGNvbXB1dGF0aW9uYWxseSBlZmZpY2llbnQgYW5kIGNvcnJlY3RseSBhY2NvdW50IGZvciBhbnkgaW5oZXJpdGVkIG9yIHNoYXJlZCByZXNvdXJjZXMuIEFyZSB3ZSBhY2N1cmF0ZWx5IHJlZmxlY3RpbmcgdGhlIG5ldyBnb2FsIHdpdGhpbiB0aGUgcXVvdGEgc3lzdGVtJ3MgZXhpc3RpbmcgZnJhbWV3b3JrPyBJIGFsc28gd2FudCB0byB2ZXJpZnkgaXQgaW50ZWdyYXRlcyBzZWFtbGVzc2x5IHdpdGggYW55IG1vbml0b3JpbmcgYW5kIGFsZXJ0aW5nIHN5c3RlbXMgd2UgaGF2ZSBpbiBwbGFjZS4gRmluYWxseSwgSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBhbnkgZGF0YSBkZXBlbmRlbmNpZXMgYXJlIHByb3Blcmx5IGhhbmRsZWQuIFRoZSBsYXN0IHRoaW5nIEkgd2FudCBpcyBhIGNhc2NhZGluZyBlcnJvciBkdWUgdG8gYSBzaW1wbGUgb3ZlcnNpZ2h0LiBMZXQncyBzdGFydCB3aXRoIGEgY29kZSByZXZpZXcgYW5kIHRyYWNlIHRocm91Z2ggYSBmZXcgcmVwcmVzZW50YXRpdmUgdXNlIGNhc2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDE0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDM6MzQuMTQ2OTQyNzMyWiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjI3LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjI3OlxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19uZXdfcXVvdGFfZ29hbChcXG4gNjI4OlxcdFxcdFxcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljLFxcbiA2Mjk6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyB0YXJnZXRfdmFsdWUpXFxuIDYzMDpcXHR7XFxuIDYzMTpcXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcXG4gNjMyOlxcdFxcbiA2MzM6XFx0XFx0Z29hbCA9IGttYWxsb2Nfb2JqKCpnb2FsKTtcXG4gNjM0OlxcdFxcdGlmICghZ29hbClcXG4gNjM1OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA2MzY6XFx0XFx0Z29hbC1cXHUwMDNlbWV0cmljID0gbWV0cmljO1xcbiA2Mzc6XFx0XFx0Z29hbC1cXHUwMDNldGFyZ2V0X3ZhbHVlID0gdGFyZ2V0X3ZhbHVlO1xcbiA2Mzg6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmdvYWwtXFx1MDAzZWxpc3QpO1xcbiA2Mzk6XFx0XFx0cmV0dXJuIGdvYWw7XFxuIDY0MDpcXHR9XFxuIDY0MTpcXHRcXG4gNjQyOlxcdHZvaWQgZGFtb3NfYWRkX3F1b3RhX2dvYWwoc3RydWN0IGRhbW9zX3F1b3RhICpxLCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZylcXG4gNjQzOlxcdHtcXG4gNjQ0OlxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmctXFx1MDAzZWxpc3QsIFxcdTAwMjZxLVxcdTAwM2Vnb2Fscyk7XFxuIDY0NTpcXHR9XFxuIDY0NjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDM6MzQuMTQ3MTExNDMyWiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjY4NzkyOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBhIE5vbi1aZXJvaW5nIEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBJIHNlZSBga21hbGxvY19vYmpgIGJlaW5nIHVzZWQgZm9yIHRoaXMgYWxsb2NhdGlvbi4gSG1tLCBpbnRlcmVzdGluZy4gVW5saWtlIHNvbWUgb2YgdGhlIG90aGVyIGFsbG9jYXRpb24gbWV0aG9kcyBJJ20gZmFtaWxpYXIgd2l0aCwgdGhpcyBkb2Vzbid0IGd1YXJhbnRlZSB6ZXJvZWQgbWVtb3J5LCB3aGljaCBjb3VsZCBsZWFkIHRvIHNvbWUgaW50ZXJlc3RpbmcgYW5kIHBvdGVudGlhbGx5IG5hc3R5IGJ1Z3MgaWYgd2UgYXJlbid0IGNhcmVmdWwgYWJvdXQgaW5pdGlhbGl6YXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBoYW5kbGVkIGNvcnJlY3RseSBkb3duc3RyZWFtLiBXYWl0IGEgbWludXRlLi4uIGBrbWFsbG9jX29iamA/IEkgZG9uJ3QgcmVjYWxsIHNlZWluZyB0aGF0IG1hY3JvIGJlZm9yZS4gSXQncyBub3QgaW1tZWRpYXRlbHkgZmFtaWxpYXIgdG8gbWUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IHRoYXQgbWFjcm8gYWN0dWFsbHkgKmRvZXMqLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGRlZmluaXRpb24gb2YgYGttYWxsb2Nfb2JqYCB0byBjb25maXJtIHdoZXRoZXIgbXkgYXNzdW1wdGlvbiBhYm91dCB0aGUgbGFjayBvZiB6ZXJvaW5nIGlzIGNvcnJlY3QsIGFuZCB3aGF0IGtpbmQgb2YgZ3VhcmFudGVlcywgaWYgYW55LCBpdCBwcm92aWRlcyBhYm91dCBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvci4gR290dGEgZmluZCB0aGUgaGVhZGVyIHdoZXJlIGl0J3MgZGVmaW5lZC4gTGV0J3MgbG9vayB0aGF0IHVwIGZpcnN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTcwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0MzozNy44NzM5OTI3MDRaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NTI0NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImttYWxsb2Nfb2JqXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MTE0PXN0cnVjdCBkYW1vbl9maWx0ZXIgKmRhbW9uX25ld19maWx0ZXIoZW51bSBkYW1vbl9maWx0ZXJfdHlwZSB0eXBlLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTExOC1cXG5tbS9kYW1vbi9jb3JlLmM6MTE5OlxcdGZpbHRlciA9IGttYWxsb2Nfb2JqKCpmaWx0ZXIpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMjAtXFx0aWYgKCFmaWx0ZXIpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTYyPXN0cnVjdCBkYW1vbl9wcm9iZSAqZGFtb25fbmV3X3Byb2JlKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTY1LVxcbm1tL2RhbW9uL2NvcmUuYzoxNjY6XFx0cCA9IGttYWxsb2Nfb2JqKCpwKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTY3LVxcdGlmICghcClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz01Njk9c3RydWN0IGRhbW9zX2ZpbHRlciAqZGFtb3NfbmV3X2ZpbHRlcihlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHR5cGUsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNTczLVxcbm1tL2RhbW9uL2NvcmUuYzo1NzQ6XFx0ZmlsdGVyID0ga21hbGxvY19vYmooKmZpbHRlcik7XFxubW0vZGFtb24vY29yZS5jLTU3NS1cXHRpZiAoIWZpbHRlcilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz02Mjc9c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX25ld19xdW90YV9nb2FsKFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTYzMi1cXG5tbS9kYW1vbi9jb3JlLmM6NjMzOlxcdGdvYWwgPSBrbWFsbG9jX29iaigqZ29hbCk7XFxubW0vZGFtb24vY29yZS5jLTYzNC1cXHRpZiAoIWdvYWwpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9NjgyPXN0cnVjdCBkYW1vcyAqZGFtb25fbmV3X3NjaGVtZShzdHJ1Y3QgZGFtb3NfYWNjZXNzX3BhdHRlcm4gKnBhdHRlcm4sXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNjkwLVxcbm1tL2RhbW9uL2NvcmUuYzo2OTE6XFx0c2NoZW1lID0ga21hbGxvY19vYmooKnNjaGVtZSk7XFxubW0vZGFtb24vY29yZS5jLTY5Mi1cXHRpZiAoIXNjaGVtZSlcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz03NzY9c3RydWN0IGRhbW9uX3RhcmdldCAqZGFtb25fbmV3X3RhcmdldCh2b2lkKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTc3OS1cXG5tbS9kYW1vbi9jb3JlLmM6NzgwOlxcdHQgPSBrbWFsbG9jX29iaigqdCk7XFxubW0vZGFtb24vY29yZS5jLTc4MS1cXHRpZiAoIXQpXFxuLS1cXG5tbS9kYW1vbi9zdGF0LmM9ODQ9c3RhdGljIGludCBkYW1vbl9zdGF0X3NvcnRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbi0tXFxubW0vZGFtb24vc3RhdC5jLTk1LVxcdFxcdC8qIHRoZXJlIGlzIG9ubHkgb25lIHRhcmdldCAqL1xcbm1tL2RhbW9uL3N0YXQuYzo5NjpcXHRcXHRyZWdpb25fcG9pbnRlcnMgPSBrbWFsbG9jX29ianMoKnJlZ2lvbl9wb2ludGVycyxcXG5tbS9kYW1vbi9zdGF0LmMtOTctXFx0XFx0XFx0XFx0XFx0ICAgICAgIGRhbW9uX25yX3JlZ2lvbnModCkpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM9MTY9c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlICpkYW1vbl9zeXNmc191bF9yYW5nZV9hbGxvYyhcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTE5LXtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzoyMDpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UgKnJhbmdlID0ga21hbGxvY19vYmooKnJhbmdlKTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0yMS1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz05MD1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX3Byb2Jlc19hZGRfZGlycyhzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmVzICpwcm9iZXMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTAyLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMDM6XFx0cHJvYmVzX2FyciA9IGttYWxsb2Nfb2JqcygqcHJvYmVzX2FyciwgaSk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEwNC1cXHRpZiAoIXByb2Jlc19hcnIpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTYwPXN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiAqZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9hbGxvYyhcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjIte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNjM6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnN5c2ZzX3JlZ2lvbiA9IGttYWxsb2Nfb2JqKCpzeXNmc19yZWdpb24pO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjQtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MzA1PWRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX2FsbG9jKHZvaWQpXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwNi17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMwNzpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMgKnJlZ2lvbnMgPSBrbWFsbG9jX29iaigqcmVnaW9ucyk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwOC1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz05MjU9c3RhdGljIGludCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyc19hZGRfZGlycyhcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy05MzQtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjkzNTpcXHRmaWx0ZXJzX2FyciA9IGttYWxsb2Nfb2JqcygqZmlsdGVyc19hcnIsIG5yX2ZpbHRlcnMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTkzNi1cXHRcXHRcXHRcXHQgICBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMDI5PXN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfd2F0ZXJtYXJrcyAqZGFtb25fc3lzZnNfd2F0ZXJtYXJrc19hbGxvYyhcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMDMyLXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTAzMzpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfd2F0ZXJtYXJrcyAqd2F0ZXJtYXJrcyA9IGttYWxsb2Nfb2JqKCp3YXRlcm1hcmtzKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTAzNC1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNDc2PXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfYWRkX2RpcnMoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ4NS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ4NjpcXHRnb2Fsc19hcnIgPSBrbWFsbG9jX29ianMoKmdvYWxzX2FyciwgbnJfZ29hbHMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0ODctXFx0XFx0XFx0XFx0IEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE1Nzc9c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc193ZWlnaHRzICpkYW1vbl9zeXNmc193ZWlnaHRzX2FsbG9jKHVuc2lnbmVkIGludCBzeixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTc5LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTU4MDpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfd2VpZ2h0cyAqd2VpZ2h0cyA9IGttYWxsb2Nfb2JqKCp3ZWlnaHRzKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTU4MS1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xOTYzPXN0cnVjdCBkYW1vbl9zeXNmc19hY2Nlc3NfcGF0dGVybiAqZGFtb25fc3lzZnNfYWNjZXNzX3BhdHRlcm5fYWxsb2Modm9pZClcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTk2NC17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE5NjU6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX2FjY2Vzc19wYXR0ZXJuICphY2Nlc3NfcGF0dGVybiA9IGttYWxsb2Nfb2JqKCphY2Nlc3NfcGF0dGVybik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE5NjYtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjE1Nj1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX2Rlc3RzX2FkZF9kaXJzKFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIxNjUtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIxNjY6XFx0ZGVzdHNfYXJyID0ga21hbGxvY19vYmpzKCpkZXN0c19hcnIsIG5yX2Rlc3RzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMTY3LVxcdFxcdFxcdFxcdCBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yMzE4PXN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lICpkYW1vbl9zeXNmc19zY2hlbWVfYWxsb2MoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjMyMC17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIzMjE6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZSAqc2NoZW1lID0ga21hbGxvY19vYmooKnNjaGVtZSk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIzMjItXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjcwMD1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NjaGVtZXNfYWRkX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnNjaGVtZXMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjcwOS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjcxMDpcXHRzY2hlbWVzX2FyciA9IGttYWxsb2Nfb2Jqcygqc2NoZW1lc19hcnIsIG5yX3NjaGVtZXMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI3MTEtXFx0XFx0XFx0XFx0ICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTik7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjk0OT1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX2FkZF9taWdyYXRlX2Rlc3Qoc3RydWN0IGRhbW9zICpzY2hlbWUsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjk1NC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjk1NTpcXHRkZXN0cy1cXHUwMDNlbm9kZV9pZF9hcnIgPSBrbWFsbG9jX29ianMoKmRlc3RzLVxcdTAwM2Vub2RlX2lkX2Fyciwgc3lzZnNfZGVzdHMtXFx1MDAzZW5yKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjk1Ni1cXHRpZiAoIWRlc3RzLVxcdTAwM2Vub2RlX2lkX2FycilcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjk1Ny1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjk1ODpcXHRkZXN0cy1cXHUwMDNld2VpZ2h0X2FyciA9IGttYWxsb2Nfb2JqcygqZGVzdHMtXFx1MDAzZXdlaWdodF9hcnIsIHN5c2ZzX2Rlc3RzLVxcdTAwM2Vucik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5NTktXFx0aWYgKCFkZXN0cy1cXHUwMDNld2VpZ2h0X2FycilcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTE3PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfcmVnaW9uc19hZGRfZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfcmVnaW9ucyAqcmVnaW9ucyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMTI2LVxcbm1tL2RhbW9uL3N5c2ZzLmM6MTI3OlxcdHJlZ2lvbnNfYXJyID0ga21hbGxvY19vYmpzKCpyZWdpb25zX2FyciwgbnJfcmVnaW9ucyxcXG5tbS9kYW1vbi9zeXNmcy5jLTEyOC1cXHRcXHRcXHRcXHQgICBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MzQ0PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdGFyZ2V0c19hZGRfZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfdGFyZ2V0cyAqdGFyZ2V0cyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMzUzLVxcbm1tL2RhbW9uL3N5c2ZzLmM6MzU0OlxcdHRhcmdldHNfYXJyID0ga21hbGxvY19vYmpzKCp0YXJnZXRzX2FyciwgbnJfdGFyZ2V0cyxcXG5tbS9kYW1vbi9zeXNmcy5jLTM1NS1cXHRcXHRcXHRcXHQgICBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9NDU0PXN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfaW50ZXJ2YWxzX2dvYWwgKmRhbW9uX3N5c2ZzX2ludGVydmFsc19nb2FsX2FsbG9jKFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy00NTcte1xcbm1tL2RhbW9uL3N5c2ZzLmM6NDU4OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19pbnRlcnZhbHNfZ29hbCAqZ29hbCA9IGttYWxsb2Nfb2JqKCpnb2FsKTtcXG5tbS9kYW1vbi9zeXNmcy5jLTQ1OS1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9NjExPXN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfaW50ZXJ2YWxzICpkYW1vbl9zeXNmc19pbnRlcnZhbHNfYWxsb2MoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTYxNC17XFxubW0vZGFtb24vc3lzZnMuYzo2MTU6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX2ludGVydmFscyAqaW50ZXJ2YWxzID0ga21hbGxvY19vYmooKmludGVydmFscyk7XFxubW0vZGFtb24vc3lzZnMuYy02MTYtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTg4Nz1zdGF0aWMgc3NpemVfdCBwYXRoX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy04OTEtXFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX2ZpbHRlciwga29iaik7XFxubW0vZGFtb24vc3lzZnMuYzo4OTI6XFx0Y2hhciAqcGF0aCA9IGttYWxsb2Nfb2JqcygqcGF0aCwgc2l6ZV9hZGQoY291bnQsIDEpKTtcXG5tbS9kYW1vbi9zeXNmcy5jLTg5My1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9OTcyPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfZmlsdGVyc19hZGRfZGlycyhcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtOTgxLVxcbm1tL2RhbW9uL3N5c2ZzLmM6OTgyOlxcdGZpbHRlcnNfYXJyID0ga21hbGxvY19vYmpzKCpmaWx0ZXJzX2FyciwgbnJfZmlsdGVycyxcXG5tbS9kYW1vbi9zeXNmcy5jLTk4My1cXHRcXHRcXHRcXHQgICBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTE3ND1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3Byb2Jlc19hZGRfZGlycyhcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMTE4My1cXG5tbS9kYW1vbi9zeXNmcy5jOjExODQ6XFx0cHJvYmVzX2FyciA9IGttYWxsb2Nfb2JqcygqcHJvYmVzX2FyciwgbnJfcHJvYmVzLFxcbm1tL2RhbW9uL3N5c2ZzLmMtMTE4NS1cXHRcXHRcXHRcXHQgICBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTI4Mz1zdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX2F0dHJzICpkYW1vbl9zeXNmc19hdHRyc19hbGxvYyh2b2lkKVxcbm1tL2RhbW9uL3N5c2ZzLmMtMTI4NC17XFxubW0vZGFtb24vc3lzZnMuYzoxMjg1OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19hdHRycyAqYXR0cnMgPSBrbWFsbG9jX29iaigqYXR0cnMpO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMTI4Ni1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTQxMj1zdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHQgKmRhbW9uX3N5c2ZzX2NvbnRleHRfYWxsb2MoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTE0MTQte1xcbm1tL2RhbW9uL3N5c2ZzLmM6MTQxNTpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfY29udGV4dCAqY29udGV4dCA9IGttYWxsb2Nfb2JqKCpjb250ZXh0KTtcXG5tbS9kYW1vbi9zeXNmcy5jLTE0MTYtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTE2ODQ9c3RhdGljIGludCBkYW1vbl9zeXNmc19jb250ZXh0c19hZGRfZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfY29udGV4dHMgKmNvbnRleHRzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0xNjkzLVxcbm1tL2RhbW9uL3N5c2ZzLmM6MTY5NDpcXHRjb250ZXh0c19hcnIgPSBrbWFsbG9jX29ianMoKmNvbnRleHRzX2FyciwgbnJfY29udGV4dHMsXFxubW0vZGFtb24vc3lzZnMuYy0xNjk1LVxcdFxcdFxcdFxcdCAgICBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjAwMT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIwMDQte1xcbm1tL2RhbW9uL3N5c2ZzLmM6MjAwNTpcXHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzID0ga21hbGxvY19vYmpzKCpyYW5nZXMsXFxubW0vZGFtb24vc3lzZnMuYy0yMDA2LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBzeXNmc19yZWdpb25zLVxcdTAwM2VucixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjI0Mj1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIyNTctXFxubW0vZGFtb24vc3lzZnMuYzoyMjU4OlxcdHJlcGVhdF9jYWxsX2NvbnRyb2wgPSBrbWFsbG9jX29iaigqcmVwZWF0X2NhbGxfY29udHJvbCk7XFxubW0vZGFtb24vc3lzZnMuYy0yMjU5LVxcdGlmICghcmVwZWF0X2NhbGxfY29udHJvbClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjU0Nz1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2tkYW1vbmRzX2FkZF9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kcyAqa2RhbW9uZHMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTI1NTktXFxubW0vZGFtb24vc3lzZnMuYzoyNTYwOlxcdGtkYW1vbmRzX2FyciA9IGttYWxsb2Nfb2Jqcygqa2RhbW9uZHNfYXJyLCBucl9rZGFtb25kcyxcXG5tbS9kYW1vbi9zeXNmcy5jLTI1NjEtXFx0XFx0XFx0XFx0ICAgIEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pO1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTk2ND1zdGF0aWMgaW50IGRhbW9zX3Rlc3RfaGVscF9kZXN0c19zZXR1cChzdHJ1Y3QgZGFtb3NfbWlncmF0ZV9kZXN0cyAqZGVzdHMsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTY5LVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo5NzA6XFx0ZGVzdHMtXFx1MDAzZW5vZGVfaWRfYXJyID0ga21hbGxvY19vYmpzKCpkZXN0cy1cXHUwMDNlbm9kZV9pZF9hcnIsIG5yX2Rlc3RzKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTcxLVxcdGlmICghZGVzdHMtXFx1MDAzZW5vZGVfaWRfYXJyKVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05NzItXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjk3MzpcXHRkZXN0cy1cXHUwMDNld2VpZ2h0X2FyciA9IGttYWxsb2Nfb2JqcygqZGVzdHMtXFx1MDAzZXdlaWdodF9hcnIsIG5yX2Rlc3RzKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTc0LVxcdGlmICghZGVzdHMtXFx1MDAzZXdlaWdodF9hcnIpIHtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL3N5c2ZzLWt1bml0Lmg9Mzk9c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfdGVzdF9hZGRfdGFyZ2V0cyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9zeXNmcy1rdW5pdC5oLTQ4LVxcdHN5c2ZzX3RhcmdldHMtXFx1MDAzZW5yID0gMTtcXG5tbS9kYW1vbi90ZXN0cy9zeXNmcy1rdW5pdC5oOjQ5OlxcdHN5c2ZzX3RhcmdldHMtXFx1MDAzZXRhcmdldHNfYXJyID0ga21hbGxvY19vYmpzKCpzeXNmc190YXJnZXRzLVxcdTAwM2V0YXJnZXRzX2FycixcXG5tbS9kYW1vbi90ZXN0cy9zeXNmcy1rdW5pdC5oLTUwLVxcdFxcdFxcdFxcdFxcdFxcdCAgMSk7XFxuLS1cXG5tbS9kYW1vbi92YWRkci5jPTczOD1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc192YV9taWdyYXRlKHN0cnVjdCBkYW1vbl90YXJnZXQgKnRhcmdldCxcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtNzU3LVxcdHByaXYuc2NoZW1lID0gcztcXG5tbS9kYW1vbi92YWRkci5jOjc1ODpcXHRwcml2Lm1pZ3JhdGlvbl9saXN0cyA9IGttYWxsb2Nfb2JqcygqcHJpdi5taWdyYXRpb25fbGlzdHMsIG5yX2Rlc3RzKTtcXG5tbS9kYW1vbi92YWRkci5jLTc1OS1cXHRpZiAoIXByaXYubWlncmF0aW9uX2xpc3RzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0MzozNy45MTg1MTg5NjRaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0NjYyODYzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIE1lbW9yeSBBbGxvY2F0aW9uIE1hY3JvcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgSSBzZWUgYGttYWxsb2Nfb2JqYC4gSXQncyBhbG1vc3QgY2VydGFpbmx5IGEgbWFjcm8g4oCTIHByb2JhYmx5IGRlZmluZWQgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIG1heWJlIGV2ZW4gaW4gdGhlIGBtbS9kYW1vbi9gIGRpcmVjdG9yeS4gQnV0IHdhaXQsIEknbSBqdXN0IHJlY2FsbGluZyB0aGF0IEkndmUgc2VlbiBga3phbGxvY19vYmpgIGJlaW5nIHVzZWQgZm9yIHRoZSBgZGFtb25fc3lzZnNfa2RhbW9uZF9hbGxvY2AgZnVuY3Rpb24uIFRoYXQgdGhyb3dzIGEgc2xpZ2h0IHdyaW5rbGUgaW4gdGhlIGFuYWx5c2lzLiBJIHNob3VsZCBkb3VibGUgY2hlY2sgd2hhdCdzIGdvaW5nIG9uIHdpdGggYGt6YWxsb2Nfb2JqYCwgYW5kIHNlZSBob3cgdGhlIHR3byBhcmUgcmVsYXRlZCwgb3IgaWYgdGhleSBhcmUgcmVsYXRlZCBhdCBhbGwuIFRoYXQnbGwgY2xlYXIgdGhpbmdzIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjI1NiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQzOjQxLjE2NTE0OTkzN1oiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ4MjY0MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3phbGxvY19vYmpcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz04MzI9c3RydWN0IGRhbW9uX2N0eCAqZGFtb25fbmV3X2N0eCh2b2lkKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTgzNS1cXG5tbS9kYW1vbi9jb3JlLmM6ODM2OlxcdGN0eCA9IGt6YWxsb2Nfb2JqKCpjdHgpO1xcbm1tL2RhbW9uL2NvcmUuYy04MzctXFx0aWYgKCFjdHgpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjA9c3RhdGljIHN0cnVjdCBkYW1vc19zeXNmc19wcm9iZSAqZGFtb3Nfc3lzZnNfcHJvYmVfYWxsb2ModW5zaWduZWQgY2hhciBoaXRzKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIzLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNDpcXHRwcm9iZSA9IGt6YWxsb2Nfb2JqKCpwcm9iZSk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1LVxcdGlmICghcHJvYmUpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NzM9c3RhdGljIHN0cnVjdCBkYW1vc19zeXNmc19wcm9iZXMgKmRhbW9zX3N5c2ZzX3Byb2Jlc19hbGxvYyh2b2lkKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03NC17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjc1OlxcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmVzKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzYtfVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTM3OD1zdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpkYW1vbl9zeXNmc19zdGF0c19hbGxvYyh2b2lkKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNzkte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozODA6XFx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM4MS19XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NTQxPXN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcl9hbGxvYyhcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NDUtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjU0NjpcXHRmaWx0ZXIgPSBremFsbG9jX29iaihzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU0Ny1cXHRpZiAoZmlsdGVyKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTkwMD1kYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyc19hbGxvYyhlbnVtIGRhbW9zX3N5c2ZzX2ZpbHRlcl9oYW5kbGVfbGF5ZXIgbGF5ZXIpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtOTAzLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo5MDQ6XFx0ZmlsdGVycyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVycyk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTkwNS1cXHRpZiAoZmlsdGVycylcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMjI0PXN0YXRpYyBzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9hbGxvYyh2b2lkKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjI1LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTIyNjpcXHRyZXR1cm4ga3phbGxvY19vYmooc3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjI3LX1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNDU2PXN0YXRpYyBzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHMgKmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX2FsbG9jKHZvaWQpXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NTcte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDU4OlxcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHMpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDU5LX1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNjkzPXN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzICpkYW1vbl9zeXNmc19xdW90YXNfYWxsb2Modm9pZClcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTY5NC17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE2OTU6XFx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjk2LX1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yMDU2PXN0YXRpYyBzdHJ1Y3QgZGFtb3Nfc3lzZnNfZGVzdCAqZGFtb3Nfc3lzZnNfZGVzdF9hbGxvYyh2b2lkKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMDU3LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjA1ODpcXHRyZXR1cm4ga3phbGxvY19vYmooc3RydWN0IGRhbW9zX3N5c2ZzX2Rlc3QpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMDU5LX1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yMTM2PWRhbW9zX3N5c2ZzX2Rlc3RzX2FsbG9jKHZvaWQpXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIxMzcte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMTM4OlxcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb3Nfc3lzZnNfZGVzdHMpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMTM5LX1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yNjgwPXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpkYW1vbl9zeXNmc19zY2hlbWVzX2FsbG9jKHZvaWQpXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI2ODEte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNjgyOlxcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI2ODMtfVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMT1zdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3JlZ2lvbiAqZGFtb25fc3lzZnNfcmVnaW9uX2FsbG9jKHZvaWQpXFxubW0vZGFtb24vc3lzZnMuYy0yMi17XFxubW0vZGFtb24vc3lzZnMuYzoyMzpcXHRyZXR1cm4ga3phbGxvY19vYmooc3RydWN0IGRhbW9uX3N5c2ZzX3JlZ2lvbik7XFxubW0vZGFtb24vc3lzZnMuYy0yNC19XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTk4PXN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfcmVnaW9ucyAqZGFtb25fc3lzZnNfcmVnaW9uc19hbGxvYyh2b2lkKVxcbm1tL2RhbW9uL3N5c2ZzLmMtOTkte1xcbm1tL2RhbW9uL3N5c2ZzLmM6MTAwOlxcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb25fc3lzZnNfcmVnaW9ucyk7XFxubW0vZGFtb24vc3lzZnMuYy0xMDEtfVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMTg9c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc190YXJnZXQgKmRhbW9uX3N5c2ZzX3RhcmdldF9hbGxvYyh2b2lkKVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjE5LXtcXG5tbS9kYW1vbi9zeXNmcy5jOjIyMDpcXHRyZXR1cm4ga3phbGxvY19vYmooc3RydWN0IGRhbW9uX3N5c2ZzX3RhcmdldCk7XFxubW0vZGFtb24vc3lzZnMuYy0yMjEtfVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0zMjQ9c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc190YXJnZXRzICpkYW1vbl9zeXNmc190YXJnZXRzX2FsbG9jKHZvaWQpXFxubW0vZGFtb24vc3lzZnMuYy0zMjUte1xcbm1tL2RhbW9uL3N5c2ZzLmM6MzI2OlxcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb25fc3lzZnNfdGFyZ2V0cyk7XFxubW0vZGFtb24vc3lzZnMuYy0zMjctfVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz03NjU9c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19maWx0ZXIgKmRhbW9uX3N5c2ZzX2ZpbHRlcl9hbGxvYyh2b2lkKVxcbm1tL2RhbW9uL3N5c2ZzLmMtNzY2LXtcXG5tbS9kYW1vbi9zeXNmcy5jOjc2NzpcXHRyZXR1cm4ga3phbGxvY19vYmooc3RydWN0IGRhbW9uX3N5c2ZzX2ZpbHRlcik7XFxubW0vZGFtb24vc3lzZnMuYy03NjgtfVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz05NTM9c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19maWx0ZXJzICpkYW1vbl9zeXNmc19maWx0ZXJzX2FsbG9jKHZvaWQpXFxubW0vZGFtb24vc3lzZnMuYy05NTQte1xcbm1tL2RhbW9uL3N5c2ZzLmM6OTU1OlxcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVycyk7XFxubW0vZGFtb24vc3lzZnMuYy05NTYtfVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0xMDcyPXN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUgKmRhbW9uX3N5c2ZzX3Byb2JlX2FsbG9jKHZvaWQpXFxubW0vZGFtb24vc3lzZnMuYy0xMDczLXtcXG5tbS9kYW1vbi9zeXNmcy5jOjEwNzQ6XFx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19wcm9iZSk7XFxubW0vZGFtb24vc3lzZnMuYy0xMDc1LX1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTE1Mz1zdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlcyAqZGFtb25fc3lzZnNfcHJvYmVzX2FsbG9jKHZvaWQpXFxubW0vZGFtb24vc3lzZnMuYy0xMTU0LXtcXG5tbS9kYW1vbi9zeXNmcy5jOjExNTU6XFx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19wcm9iZXMpO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMTE1Ni19XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTE2NjQ9c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0cyAqZGFtb25fc3lzZnNfY29udGV4dHNfYWxsb2Modm9pZClcXG5tbS9kYW1vbi9zeXNmcy5jLTE2NjUte1xcbm1tL2RhbW9uL3N5c2ZzLmM6MTY2NjpcXHRyZXR1cm4ga3phbGxvY19vYmooc3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHRzKTtcXG5tbS9kYW1vbi9zeXNmcy5jLTE2NjctfVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0xNzk1PXN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqZGFtb25fc3lzZnNfa2RhbW9uZF9hbGxvYyh2b2lkKVxcbm1tL2RhbW9uL3N5c2ZzLmMtMTc5Ni17XFxubW0vZGFtb24vc3lzZnMuYzoxNzk3OlxcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCk7XFxubW0vZGFtb24vc3lzZnMuYy0xNzk4LX1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjUxND1zdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmRzICpkYW1vbl9zeXNmc19rZGFtb25kc19hbGxvYyh2b2lkKVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjUxNS17XFxubW0vZGFtb24vc3lzZnMuYzoyNTE2OlxcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZHMpO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjUxNy19XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTI2NTg9c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc191aV9kaXIgKmRhbW9uX3N5c2ZzX3VpX2Rpcl9hbGxvYyh2b2lkKVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjY1OS17XFxubW0vZGFtb24vc3lzZnMuYzoyNjYwOlxcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb25fc3lzZnNfdWlfZGlyKTtcXG5tbS9kYW1vbi9zeXNmcy5jLTI2NjEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0Mzo0MS4yMDk5ODExNzdaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc4Mjk2ODIyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIGBrbWFsbG9jX29iamAncyBCZWhhdmlvciB3aXRoIGBkYW1vc19uZXdfcXVvdGFfZ29hbGAqKlxuXG5BbHJpZ2h0LCBoYW5nIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGlzIGNvbm5lY3Rpb24gYmV0d2VlbiBga21hbGxvY19vYmpgIGFuZCBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgLiBTcGVjaWZpY2FsbHksIGRvZXMgYGttYWxsb2Nfb2JqYCBwZXJmb3JtIG1lbW9yeSB6ZXJvaW5nPyBUaGF0J3MgYSBjcml0aWNhbCBkZXRhaWwsIGFuZCBJIGRvbid0IHdhbnQgdG8gbWFrZSBhc3N1bXB0aW9ucy4gSSBrbm93IHRoZSBwb3RlbnRpYWwgcGl0ZmFsbHMgaGVyZSwgc28gSSBuZWVkIHRvIHZlcmlmeS4gVGltZSB0byBkaXZlIGludG8gdGhlIGRlZmluaXRpb24gb2YgYGttYWxsb2Nfb2JqYCBhbmQgZ2V0IHRoZSBkZWZpbml0aXZlIGFuc3dlci4gSSBjYW4ndCBwcm9jZWVkIHdpdGhvdXQgY2xhcmlmeWluZyB0aGF0IGFzcGVjdC4gTGV0J3Mgc2VlIHdoYXQgdGhlIGRvY3VtZW50YXRpb24gYW5kIHRoZSBjb2RlIGl0c2VsZiB0ZWxsIHVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTEwNSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQzOjQ0Ljk5Mjk1MTkyOFoiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzNjA4NzExNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIGttYWxsb2Nfb2JqXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NsYWIuaD0xMDcwPXZvaWQgKmttYWxsb2Nfbm9sb2NrKHNpemVfdCBzaXplLCBnZnBfdCBnZnBfZmxhZ3MsIGludCBub2RlKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExMjAtICovXFxuaW5jbHVkZS9saW51eC9zbGFiLmg6MTEyMTojZGVmaW5lIGttYWxsb2Nfb2JqKFZBUl9PUl9UWVBFLCAuLi4pIFxcXFxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTIyLVxcdF9fYWxsb2Nfb2JqcyhrbWFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihWQVJfT1JfVFlQRSksIDEpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTMyLSAqL1xcbmluY2x1ZGUvbGludXgvc2xhYi5oOjExMzM6I2RlZmluZSBrbWFsbG9jX29ianMoVkFSX09SX1RZUEUsIENPVU5ULCAuLi4pIFxcXFxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTM0LVxcdF9fYWxsb2Nfb2JqcyhrbWFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihWQVJfT1JfVFlQRSksIENPVU5UKVxcbi0tXFxubGliL2RlY29tcHJlc3NfdW54ei5jLTE2My0jdW5kZWYgdmZyZWVcXG5saWIvZGVjb21wcmVzc191bnh6LmM6MTY0OiNkZWZpbmUga21hbGxvY19vYmoodHlwZSkgbWFsbG9jKHNpemVvZih0eXBlKSlcXG5saWIvZGVjb21wcmVzc191bnh6LmMtMTY1LSNkZWZpbmUga2ZyZWUocHRyKSBmcmVlKHB0cilcXG4tLVxcbnRvb2xzL3ZpcnRpby9saW51eC9rZXJuZWwuaD02Mz1zdGF0aWMgaW5saW5lIHZvaWQgKmttYWxsb2NfYXJyYXkodW5zaWduZWQgbiwgc2l6ZV90IHMsIGdmcF90IGdmcClcXG4tLVxcbnRvb2xzL3ZpcnRpby9saW51eC9rZXJuZWwuaC02Ny1cXG50b29scy92aXJ0aW8vbGludXgva2VybmVsLmg6Njg6I2RlZmluZSBrbWFsbG9jX29iaihWQVJfT1JfVFlQRSwgLi4uKSBcXFxcXFxudG9vbHMvdmlydGlvL2xpbnV4L2tlcm5lbC5oLTY5LVxcdCgodHlwZW9mKFZBUl9PUl9UWVBFKSAqKWttYWxsb2Moc2l6ZW9mKHR5cGVvZihWQVJfT1JfVFlQRSkpLCAwKSlcXG50b29scy92aXJ0aW8vbGludXgva2VybmVsLmgtNzAtXFxudG9vbHMvdmlydGlvL2xpbnV4L2tlcm5lbC5oOjcxOiNkZWZpbmUga21hbGxvY19vYmpzKFZBUl9PUl9UWVBFLCBDT1VOVCwgLi4uKSBcXFxcXFxudG9vbHMvdmlydGlvL2xpbnV4L2tlcm5lbC5oLTcyLVxcdCgodHlwZW9mKFZBUl9PUl9UWVBFKSAqKWttYWxsb2Moc2l6ZW9mKHR5cGVvZihWQVJfT1JfVFlQRSkpICogKENPVU5UKSwgMCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQzOjQ2LjYyOTA0NjA5NFoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzE2MzI0NDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBBY2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBga21hbGxvY19vYmpgLCBhbmQgdGhhdCdzIGp1c3QgYSB3cmFwcGVyIGFyb3VuZCBga21hbGxvY2AuIFRoZSBjcml0aWNhbCB0aGluZyB0byByZW1lbWJlciBpcyB0aGF0IGBrbWFsbG9jYCAqZG9lc24ndCogemVybyBvdXQgdGhlIGFsbG9jYXRlZCBtZW1vcnkuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGZvciB0aGlzIHN0cnVjdC5cblxuVGhlIGNvZGUgc2hvd3MgYGRhbW9zX25ld19xdW90YV9nb2FsYCBhbGxvY2F0aW5nIG1lbW9yeSB1c2luZyBga21hbGxvY19vYmpgLCBhbmQgdGhlbiBzZXR0aW5nIGEgZmV3IGZpZWxkczogYG1ldHJpY2AsIGB0YXJnZXRfdmFsdWVgLCBhbmQgdGhlIGBsaXN0YCBoZWFkIHVzaW5nIGBJTklUX0xJU1RfSEVBRGAuIEJ1dCwgaGFuZyBvbi4uLiB3aGF0IGFib3V0IGBnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsYD8gVGhhdCdzICpub3QqIGluaXRpYWxpemVkIHRoZXJlLiBUaGF0J3MgYSByZWQgZmxhZyEgQW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSBjb3VsZCBsZWFkIHRvIGFsbCBzb3J0cyBvZiBpc3N1ZXMuIElmIHRoZSBjb2RlIHRoZW4gdHJpZXMgdG8gcmVhZCB0aGF0IHZhbHVlIGxhdGVyIHdpdGhvdXQgZmlyc3QgaW5pdGlhbGl6aW5nIGl0LCB3ZSd2ZSBnb3QgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBvciBhdCB0aGUgdmVyeSBsZWFzdCwgdW5wcmVkaWN0YWJsZSBiZWhhdmlvci5cblxuSSBzZWUgdGhhdCB0aGUgcGF0Y2ggaW5jbHVkZXMgYSBuZXcgZnVuY3Rpb24sIGBkYW1vc19pbml0X3F1b3RhX2dvYWxfbGFzdF9wc2lgLiBBbmQgKnRoYXQqIGZ1bmN0aW9uIGluaXRpYWxpemVzIGBsYXN0X3BzaV90b3RhbGAuLi4gYnV0IG9ubHkgZm9yIGEgc3BlY2lmaWMgYG1ldHJpY2AsIGBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVNgLiBUaGF0J3MgYSBsaXR0bGUgYmV0dGVyLCBidXQgaXQncyBzdGlsbCBub3QgYSBjb21wbGV0ZSBzb2x1dGlvbi4gSXQgbGVhdmVzIHRoZSBvdGhlcnMgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZC5cblxuTm93LCBJIHJlYWxseSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBoZXJlLiBJcyBgZ29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbGAgZXZlciBleHBvc2VkIHRvIHVzZXJzcGFjZT8gVGhhdCdzIHRoZSBrZXkgcXVlc3Rpb24uIElmIGl0ICppcyosIHRoZW4gd2UgaGF2ZSBhIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrLiBJZiBpdCdzIHVzZWQgaW50ZXJuYWxseSwgdW5pbml0aWFsaXplZCwgdGhhdCBjb3VsZCBiZSBhIGJ1ZyBvciBjYXVzZSBzZWN1cml0eSBpc3N1ZXMuIEkgbmVlZCB0byB0cmFjZSB3aGVyZSB0aGlzIGBsYXN0X3BzaV90b3RhbGAgZmllbGQgaXMgdXNlZC4gSSdsbCBzZWFyY2ggdGhyb3VnaCB0aGUgY29kZWJhc2UgZm9yIHJlZmVyZW5jZXMgdG8gaXQgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IHJlYWRzIG9mIHRoYXQgZmllbGQgYmVmb3JlIGl0J3MgaW5pdGlhbGl6ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODYzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQzOjU0LjM0NTM3MzU2N1oiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM4NTA3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGFzdF9wc2lfdG90YWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0xMTIxPXN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTExMjUtXFx0Y2FzZSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVM6XFxubW0vZGFtb24vY29yZS5jOjExMjY6XFx0XFx0ZHN0LVxcdTAwM2VsYXN0X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTEyNy1cXHRcXHRicmVhaztcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMDEyPXN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMDIyLVxcdFxcdG5vd19wc2lfdG90YWwgPSBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKCk7XFxubW0vZGFtb24vY29yZS5jOjMwMjM6XFx0XFx0Z29hbC1cXHUwMDNlY3VycmVudF92YWx1ZSA9IG5vd19wc2lfdG90YWwgLSBnb2FsLVxcdTAwM2VsYXN0X3BzaV90b3RhbDtcXG5tbS9kYW1vbi9jb3JlLmM6MzAyNDpcXHRcXHRnb2FsLVxcdTAwM2VsYXN0X3BzaV90b3RhbCA9IG5vd19wc2lfdG90YWw7XFxubW0vZGFtb24vY29yZS5jLTMwMjUtXFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzczMj1zdGF0aWMgdm9pZCBkYW1vc19pbml0X3F1b3RhX2dvYWxfbGFzdF9wc2koc3RydWN0IGRhbW9zICpzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM3MzgtXFx0XFx0XFx0Y29udGludWU7XFxubW0vZGFtb24vY29yZS5jOjM3Mzk6XFx0XFx0Z29hbC1cXHUwMDNlbGFzdF9wc2lfdG90YWwgPSBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKCk7XFxubW0vZGFtb24vY29yZS5jLTM3NDAtXFx0fVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTc1MD1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNzUzLXtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NzU0OlxcdHU2NCBkc3RfbGFzdF9wc2lfdG90YWwgPSAwO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC03NTUtXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTc1Ni1cXHRpZiAoZHN0LVxcdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTKVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo3NTc6XFx0XFx0ZHN0X2xhc3RfcHNpX3RvdGFsID0gZHN0LVxcdTAwM2VsYXN0X3BzaV90b3RhbDtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNzU4LVxcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKGRzdCwgc3JjKTtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC03NjMtXFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cXHUwMDNlY3VycmVudF92YWx1ZSwgc3JjLVxcdTAwM2VjdXJyZW50X3ZhbHVlKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NzY0OlxcdGlmIChkc3RfbGFzdF9wc2lfdG90YWwgXFx1MDAyNlxcdTAwMjYgc3JjLVxcdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTKVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo3NjU6XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cXHUwMDNlbGFzdF9wc2lfdG90YWwsIGRzdF9sYXN0X3BzaV90b3RhbCk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTc2Ni1cXHRzd2l0Y2ggKGRzdC1cXHUwMDNlbWV0cmljKSB7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9NzgxPXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWwoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTc4Ni1cXHRcXHQuY3VycmVudF92YWx1ZSA9IDEyMyxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6Nzg3OlxcdFxcdC5sYXN0X3BzaV90b3RhbCA9IDQ1NixcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNzg4LVxcdH07XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODI5LVxcdFxcdFxcdC5jdXJyZW50X3ZhbHVlID0gMzQ1LFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4MzA6XFx0XFx0XFx0Lmxhc3RfcHNpX3RvdGFsID0gNTY3LFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MzEtXFx0XFx0XFx0fSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQzOjU0LjM4OTIyODAyN1oiLCJTZXEiOjUzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjE4OTE2MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgaW4gREFNT1MgUXVvdGEgQ2FsY3VsYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYCBmdW5jdGlvbiwgYW5kIGl0IHNlZW1zIGxpa2UgdGhlIGBsYXN0X3BzaV90b3RhbGAgdmFyaWFibGUgaXMgY3JpdGljYWwuIFNwZWNpZmljYWxseSwgaW5zaWRlIHRoZSBgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTYCBjYXNlLCB0aGUgY29kZSBjYWxjdWxhdGVzIGBnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWVgIGJ5IHN1YnRyYWN0aW5nIGBnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsYCBmcm9tIHRoZSBjdXJyZW50IFBTSSB0b3RhbC4gVGhlIGNvbmNlcm4sIGFuZCBpdCdzIGEgdmFsaWQgb25lLCBpcyB3aGF0IGhhcHBlbnMgaWYgYGxhc3RfcHNpX3RvdGFsYCBoYXNuJ3QgYmVlbiBpbml0aWFsaXplZCBiZWZvcmUgdGhpcyBwb2ludC4gV2UgY291bGQgZW5kIHVwIGNhbGN1bGF0aW5nIGBjdXJyZW50X3ZhbHVlYCB1c2luZyB3aGF0ZXZlciBnYXJiYWdlIGhhcHBlbnMgdG8gYmUgaW4gdGhhdCBtZW1vcnkgbG9jYXRpb24sIHdoaWNoIGlzIGEgY2xhc3NpYyBidWcgc2NlbmFyaW8uXG5cblRoaXMgaXMgYSByZWQgZmxhZywgYW5kIGl0J3MgbWFraW5nIG1lIHdvbmRlcjogaXMgYGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZWAgZXhwb3NlZCB0byB1c2VyIHNwYWNlIGluIGFueSB3YXk/IElmIHNvLCB0aGlzIGNvdWxkIGJlIGEgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSwgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIGxlYWQgdG8gdW5yZWxpYWJsZSBkYXRhIGZvciBvdXIgZW5kIHVzZXJzLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBkaXZlIGludG8gdGhlIGNvZGViYXNlIGFuZCB0cmFjZSB0aGUgdXNlcyBvZiBgY3VycmVudF92YWx1ZWAgdG8gdW5kZXJzdGFuZCB3aGVyZSBhbmQgaG93IGl0J3MgYmVpbmcgdXNlZC4gVW5kZXJzdGFuZGluZyB3aGVyZSBpdCdzIHVzZWQgaXMgY3JpdGljYWwgdG8gZXZhbHVhdGluZyB0aGUgaW1wYWN0IG9mIHRoaXMgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzYzNSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0Mzo1OS4wMDgxNDcwMjdaIiwiU2VxIjo1NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTg3NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImN1cnJlbnRfdmFsdWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0xMTQyPXN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTExNDctXFx0aWYgKGRzdC1cXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX1VTRVJfSU5QVVQpXFxubW0vZGFtb24vY29yZS5jOjExNDg6XFx0XFx0ZHN0LVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gc3JjLVxcdTAwM2VjdXJyZW50X3ZhbHVlO1xcbm1tL2RhbW9uL2NvcmUuYy0xMTQ5LVxcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKGRzdCwgc3JjKTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yOTk3PXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnAoYm9vbCBhY3RpdmVfcmF0aW8pXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzAxMS1cXG5tbS9kYW1vbi9jb3JlLmM6MzAxMjpzdGF0aWMgdm9pZCBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxubW0vZGFtb24vY29yZS5jLTMwMTMtXFx0XFx0c3RydWN0IGRhbW9zICpzLCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMDE4LVxcdGNhc2UgREFNT1NfUVVPVEFfVVNFUl9JTlBVVDpcXG5tbS9kYW1vbi9jb3JlLmM6MzAxOTpcXHRcXHQvKiBVc2VyIHNob3VsZCBhbHJlYWR5IHNldCBnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlICovXFxubW0vZGFtb24vY29yZS5jLTMwMjAtXFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzAyMi1cXHRcXHRub3dfcHNpX3RvdGFsID0gZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpO1xcbm1tL2RhbW9uL2NvcmUuYzozMDIzOlxcdFxcdGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBub3dfcHNpX3RvdGFsIC0gZ29hbC1cXHUwMDNlbGFzdF9wc2lfdG90YWw7XFxubW0vZGFtb24vY29yZS5jLTMwMjQtXFx0XFx0Z29hbC1cXHUwMDNlbGFzdF9wc2lfdG90YWwgPSBub3dfcHNpX3RvdGFsO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTMwMjctXFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9GUkVFX0JQOlxcbm1tL2RhbW9uL2NvcmUuYzozMDI4OlxcdFxcdGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfbm9kZV9tZW1fYnAoZ29hbCk7XFxubW0vZGFtb24vY29yZS5jLTMwMjktXFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzAzMS1cXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUDpcXG5tbS9kYW1vbi9jb3JlLmM6MzAzMjpcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChnb2FsKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzAzMy1cXHRcXHRicmVhaztcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMDM1LVxcdGNhc2UgREFNT1NfUVVPVEFfSU5BQ1RJVkVfTUVNX0JQOlxcbm1tL2RhbW9uL2NvcmUuYzozMDM2OlxcdFxcdGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icChcXG5tbS9kYW1vbi9jb3JlLmMtMzAzNy1cXHRcXHRcXHRcXHRnb2FsLVxcdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfQUNUSVZFX01FTV9CUCk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzAzOS1cXHRjYXNlIERBTU9TX1FVT1RBX05PREVfRUxJR0lCTEVfTUVNX0JQOlxcbm1tL2RhbW9uL2NvcmUuYzozMDQwOlxcdFxcdGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfbm9kZV9lbGlnaWJsZV9tZW1fYnAoYywgcyxcXG5tbS9kYW1vbi9jb3JlLmMtMzA0MS1cXHRcXHRcXHRcXHRnb2FsLVxcdTAwM2VuaWQpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTMwNDk9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfcXVvdGFfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMwNTUtXFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbChnb2FsLCBxdW90YSkge1xcbm1tL2RhbW9uL2NvcmUuYzozMDU2OlxcdFxcdGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoYywgcywgZ29hbCk7XFxubW0vZGFtb24vY29yZS5jLTMwNTctXFx0XFx0aGlnaGVzdF9zY29yZSA9IG1heChoaWdoZXN0X3Njb3JlLFxcbm1tL2RhbW9uL2NvcmUuYzozMDU4OlxcdFxcdFxcdFxcdG11bHRfZnJhYyhnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlLCAxMDAwMCxcXG5tbS9kYW1vbi9jb3JlLmMtMzA1OS1cXHRcXHRcXHRcXHRcXHRnb2FsLVxcdTAwM2V0YXJnZXRfdmFsdWUpKTtcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0xOTQ9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNDYtXFx0XFx0XFx0Z290byBvdXQ7XFxubW0vZGFtb24vcmVjbGFpbS5jOjI0NzpcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gcXVvdGFfYXV0b3R1bmVfZmVlZGJhY2s7XFxubW0vZGFtb24vcmVjbGFpbS5jLTI0OC1cXHRcXHRkYW1vc19hZGRfcXVvdGFfZ29hbChcXHUwMDI2c2NoZW1lLVxcdTAwM2VxdW90YSwgZ29hbCk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTIxNT1zdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTIxOC1cXHR1bnNpZ25lZCBsb25nIHRhcmdldF92YWx1ZTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTIxOTpcXHR1bnNpZ25lZCBsb25nIGN1cnJlbnRfdmFsdWU7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMjAtXFx0aW50IG5pZDtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMzE5PXN0YXRpYyBzc2l6ZV90IHRhcmdldF92YWx1ZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzI4LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzI5OnN0YXRpYyBzc2l6ZV90IGN1cnJlbnRfdmFsdWVfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMzMC1cXHRcXHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzM0LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzM1OlxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVsdVxcXFxuXFxcIiwgZ29hbC1cXHUwMDNlY3VycmVudF92YWx1ZSk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMzYtfVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzM3LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzM4OnN0YXRpYyBzc2l6ZV90IGN1cnJlbnRfdmFsdWVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMzktXFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzQyLVxcdFxcdFxcdGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzQzOlxcdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFxcdTAwMjZnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTM0NC1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNDE4PXN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF90YXJnZXRfdmFsdWVfYXR0ciA9XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQyMC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQyMTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZV9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQyMjpcXHRcXHRfX0FUVFJfUldfTU9ERShjdXJyZW50X3ZhbHVlLCAwNjAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQyMy1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNDMwPXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vc19zeXNmc19xdW90YV9nb2FsX2F0dHJzW10gPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQzMi1cXHRcXHUwMDI2ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF90YXJnZXRfdmFsdWVfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDMzOlxcdFxcdTAwMjZkYW1vc19zeXNmc19xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDM0LVxcdFxcdTAwMjZkYW1vc19zeXNmc19xdW90YV9nb2FsX25pZF9hdHRyLmF0dHIsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjg0Nz1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX2FkZF9xdW90YV9zY29yZShcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODY2LVxcdFxcdGNhc2UgREFNT1NfUVVPVEFfVVNFUl9JTlBVVDpcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg2NzpcXHRcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gc3lzZnNfZ29hbC1cXHUwMDNlY3VycmVudF92YWx1ZTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg2OC1cXHRcXHRcXHRicmVhaztcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD03NTA9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTc2Mi1cXHRpZiAoc3JjLVxcdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfVVNFUl9JTlBVVClcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NzYzOlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXFx1MDAzZWN1cnJlbnRfdmFsdWUsIHNyYy1cXHUwMDNlY3VycmVudF92YWx1ZSk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTc2NC1cXHRpZiAoZHN0X2xhc3RfcHNpX3RvdGFsIFxcdTAwMjZcXHUwMDI2IHNyYy1cXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUylcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD03ODE9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNzg1LVxcdFxcdC50YXJnZXRfdmFsdWUgPSAxMDAwLFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo3ODY6XFx0XFx0LmN1cnJlbnRfdmFsdWUgPSAxMjMsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTc4Ny1cXHRcXHQubGFzdF9wc2lfdG90YWwgPSA0NTYsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNzkzLVxcdFxcdFxcdC50YXJnZXRfdmFsdWUgPSA3ODksXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjc5NDpcXHRcXHRcXHQuY3VycmVudF92YWx1ZSA9IDEyfSk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTc5NS1cXHRkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2Zvcih0ZXN0LCBcXHUwMDI2ZHN0LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTc5OC1cXHRcXHRcXHQudGFyZ2V0X3ZhbHVlID0gMzQ1LFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo3OTk6XFx0XFx0XFx0LmN1cnJlbnRfdmFsdWUgPSA2NzgsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTgwMC1cXHRcXHRcXHQubmlkID0gOSxcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MDUtXFx0XFx0XFx0LnRhcmdldF92YWx1ZSA9IDEyLFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4MDY6XFx0XFx0XFx0LmN1cnJlbnRfdmFsdWUgPSAzNDUsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTgwNy1cXHRcXHRcXHQubmlkID0gNixcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MTItXFx0XFx0XFx0LnRhcmdldF92YWx1ZSA9IDQ1NixcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODEzOlxcdFxcdFxcdC5jdXJyZW50X3ZhbHVlID0gNTY3LFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MTQtXFx0XFx0XFx0Lm5pZCA9IDYsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODIwLVxcdFxcdFxcdC50YXJnZXRfdmFsdWUgPSA4OTAsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjgyMTpcXHRcXHRcXHQuY3VycmVudF92YWx1ZSA9IDkwMSxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODIyLVxcdFxcdFxcdC5uaWQgPSAxMCxcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MjgtXFx0XFx0XFx0LnRhcmdldF92YWx1ZSA9IDIzNCxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODI5OlxcdFxcdFxcdC5jdXJyZW50X3ZhbHVlID0gMzQ1LFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MzAtXFx0XFx0XFx0Lmxhc3RfcHNpX3RvdGFsID0gNTY3LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0Mzo1OS4wNTE3Mzc5MzdaIiwiU2VxIjo1NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ2Njk1MDA0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIERhdGEgRmxvdyBvZiBEQU1PTiBRdW90YSBHb2FscyoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgbmVlZCB0byBjbGFyaWZ5IHNvbWV0aGluZyBhYm91dCBob3cgdGhlIGBjdXJyZW50X3ZhbHVlYCBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgREFNT04gcXVvdGEgc3lzdGVtLiBJIGtub3cgdGhhdCBgY3VycmVudF92YWx1ZWAgaXMgYSBjcml0aWNhbCBmaWVsZCwgYW5kIEkndmUganVzdCByZWFsaXplZCBpdCBleGlzdHMgaW4gKnR3byogZGlzdGluY3Qgc3RydWN0dXJlczogYHN0cnVjdCBkYW1vc19xdW90YV9nb2FsYCBpbiBgbW0vZGFtb24vY29yZS5jYCBhbmQgYWxzbyBpbiBgc3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxgIHdpdGhpbiBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYC5cblxuTXkgcHJpbWFyeSBjb25jZXJuIGlzIHRoaXM6IHRoZSBzeXNmcyBpbnRlcmZhY2UgaXMgaG93IHVzZXJzcGFjZSBpbnRlcmFjdHMgd2l0aCB0aGlzIGBjdXJyZW50X3ZhbHVlYCB2aWEgYGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxgLiBCdXQgdGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGhvdyBkb2VzIHRoaXMgdmFsdWUgaW4gYGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxgIGdldCB1cGRhdGVkPyBEb2VzIGl0IG1pcnJvciB0aGUgYGN1cnJlbnRfdmFsdWVgIHN0b3JlZCBpbnNpZGUgb2YgYGRhbW9zX3F1b3RhX2dvYWxgPyBJcyB0aGVyZSBhIGRpcmVjdCBjb3B5PyBBIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc20/XG5cbkkgbmVlZCB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgbWFrZSBzdXJlIHRoYXQgdGhlIGBkYW1vc19xdW90YV9nb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWVgIGlzLCBpbiBmYWN0LCBiZWluZyBjb3BpZWQgb3IgYXBwcm9wcmlhdGVseSBzeW5jaHJvbml6ZWQgdG8gYGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwtXHUwMDNlY3VycmVudF92YWx1ZWAuIFRoaXMgaXMgZXNzZW50aWFsIHRvIGd1YXJhbnRlZSB0aGF0IHVzZXItc3BhY2UgaW50ZXJhY3Rpb25zIHRocm91Z2ggc3lzZnMgYXJlIGFsd2F5cyByZWZsZWN0aW5nIHRoZSAqYWN0dWFsKiBydW5uaW5nIHN0YXRlIG9mIHRoZSBEQU1PTiBxdW90YSBnb2FscyBhbmQgbm90IHNvbWUgb3V0ZGF0ZWQgb3Igc3RhbGUgdmFsdWUuIFRoZSBjb3JyZWN0bmVzcyBvZiB0aGUgdXNlciBleHBvc2VkIHZhbHVlIGlzIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5NzcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDQ6MDQuNTE4NjkwMjU0WiIsIlNlcSI6NTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzkyNDg0NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3VycmVudF92YWx1ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEyMTU9c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMTgtXFx0dW5zaWduZWQgbG9uZyB0YXJnZXRfdmFsdWU7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyMTk6XFx0dW5zaWduZWQgbG9uZyBjdXJyZW50X3ZhbHVlO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjIwLVxcdGludCBuaWQ7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTMxOT1zdGF0aWMgc3NpemVfdCB0YXJnZXRfdmFsdWVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMyOC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMyOTpzdGF0aWMgc3NpemVfdCBjdXJyZW50X3ZhbHVlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMzAtXFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMzNC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMzNTpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlbHVcXFxcblxcXCIsIGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzM2LX1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMzNy1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMzODpzdGF0aWMgc3NpemVfdCBjdXJyZW50X3ZhbHVlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzM5LVxcdFxcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTM0Mi1cXHRcXHRcXHRkYW1vc19zeXNmc19xdW90YV9nb2FsLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTM0MzpcXHRpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCBcXHUwMDI2Z29hbC1cXHUwMDNlY3VycmVudF92YWx1ZSk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzNDQtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTQxOD1zdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfdGFyZ2V0X3ZhbHVlX2F0dHIgPVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MjAtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MjE6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vc19zeXNmc19xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MjI6XFx0XFx0X19BVFRSX1JXX01PREUoY3VycmVudF92YWx1ZSwgMDYwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MjMtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTQzMD1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9hdHRyc1tdID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MzItXFx0XFx1MDAyNmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfdGFyZ2V0X3ZhbHVlX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQzMzpcXHRcXHUwMDI2ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQzNC1cXHRcXHUwMDI2ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9uaWRfYXR0ci5hdHRyLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NDc9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg2Ni1cXHRcXHRjYXNlIERBTU9TX1FVT1RBX1VTRVJfSU5QVVQ6XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4Njc6XFx0XFx0XFx0Z29hbC1cXHUwMDNlY3VycmVudF92YWx1ZSA9IHN5c2ZzX2dvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWU7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NjgtXFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQ0OjA0Ljk5Nzk0NDI0NFoiLCJTZXEiOjU3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTQ5ODIwNjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRGF0YSBGbG93IGZvciBRdW90YSBHb2FsIFZhbHVlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIHRyYWNlIGhvdyB0aGUgcXVvdGEgZ29hbCB2YWx1ZXMgYXJlIGhhbmRsZWQsIHNwZWNpZmljYWxseSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgc3lzdGVtIGZpbGUgc3lzdGVtIChzeXNmcykgcmVwcmVzZW50YXRpb24gYW5kIHRoZSBpbnRlcm5hbCBgZGFtb3NfcXVvdGFfZ29hbGAgZGF0YSBzdHJ1Y3R1cmUuIEl0IGxvb2tzIGxpa2UgdGhlIGBkYW1vc19zeXNmc19xdW90YV9nb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWVgIGlzIG9ubHkgZXZlciAqcmVhZCogZnJvbSBzeXNmcy4gVGhlbiwgaXQgc2VlbXMgdG8gYmUgY29waWVkIHRvIGBkYW1vc19xdW90YV9nb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWVgLCBidXQgb25seSB3aGVuIGBEQU1PU19RVU9UQV9VU0VSX0lOUFVUYCBpcyBpbnZvbHZlZC5cblxuVGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcgYW5kIHdoZXJlIEkgZ2V0IGEgYml0IGNvbmNlcm5lZC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBpcyB0aGVyZSBldmVyIGFueSB3cml0ZS1iYWNrPyBEb2VzIGBkYW1vc19xdW90YV9nb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWVgIGV2ZXIgZ2V0IHVwZGF0ZWQgaW4gdGhlIGNvcmUgbG9naWMgYW5kIHRoZW4gcmVmbGVjdGVkIGluIGBkYW1vc19zeXNmc19xdW90YV9nb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWVgPyBCZWNhdXNlIGlmIG5vdCwgdGhlbiB0aGUgc3lzZnMgcmVwcmVzZW50YXRpb24gaXMgZWZmZWN0aXZlbHkgYSBvbmUtd2F5IHN0cmVldCwgd2hpY2ggY291bGQgbGVhZCB0byBkaXNjcmVwYW5jaWVzIGlmIGNoYW5nZXMgYXJlIG1hZGUgaW50ZXJuYWxseSBhbmQgbmVlZCB0byBiZSByZWZsZWN0ZWQgaW4gc3lzZnMuXG5cbkkgbmVlZCB0byBkaWcgZGVlcGVyLiBJJ20gZ29pbmcgdG8gaGF2ZSB0byBjYXJlZnVsbHkgZ28gdGhyb3VnaCB0aGUgY29kZSBhbmQgY2hlY2sgZm9yIGFueSBmdW5jdGlvbnMgb3IgbWVjaGFuaXNtcyB0aGF0IG1pZ2h0IGJlIHVwZGF0aW5nIHRoZSBzeXNmcyBmaWxlIGZyb20gdGhlIGNvcmUuIEdvdHRhIG1ha2Ugc3VyZSB0aGUgZGF0YSBpcyBjb25zaXN0ZW50IGFuZCB0aGF0IGEgdXNlciBjb3VsZCBjaGFuZ2UgdGhlIGBkYW1vc19zeXNmc19xdW90YV9nb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWVgIGFuZCBpdCB3b3VsZCBoYXZlIGFuIGFmZmVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI0MTQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDQ6MTAuOTQ3NzY2NzhaIiwiU2VxIjo1OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MDc0NzcwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjdXJyZW50X3ZhbHVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL3N5c2ZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQ0OjExLjAzMzg0NzE2WiIsIlNlcSI6NTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NjI0OTkwNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBEYXRhIFNvdXJjZSBVcGRhdGVzIGZvciBTY2hlbWUgU3RhdGlzdGljcyoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc291cmNlIGZvciB0aGVzZSBzY2hlbWUgc3RhdGlzdGljcy4gTXkgZmlyc3QgaW5zdGluY3QsIGFuZCB3aGVyZSBJJ2Qgc3RhcnQgZGlnZ2luZywgaXMgd2hldGhlciBgZGFtb25fc3lzZnNfdXBkYXRlX3NjaGVtZXNfc3RhdHNgIG9yIGEgZnVuY3Rpb24gd2l0aCBhIHNpbWlsYXIgbmFtZSDigJMgc29tZXRoaW5nIHJlbGF0ZWQgdG8gRGFtb24gKERhdGEgQWNjZXNzIE1vbml0b3IpIGFuZCBzeXNmcyB1cGRhdGVzIOKAkyBoYW5kbGVzIHRoZSBwb3B1bGF0aW9uIG9yIG1vZGlmaWNhdGlvbiBvZiB0aGVzZSBzdGF0aXN0aWNzLiBUaGF0J3MgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBsb29rIGZpcnN0LCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBsaWtlbHkgY29udGV4dCBvZiB0aGUgZGF0YSBhbmQgaXRzIHBvdGVudGlhbCBjb25uZWN0aW9uIHRvIHN5c3RlbSBtb25pdG9yaW5nLiBJZiB0aGF0IGZ1bmN0aW9uIGRvZXNuJ3Qgc2VlbSByZWxldmFudCwgSSdsbCBuZWVkIHRvIGJyb2FkZW4gdGhlIHNlYXJjaCB0byByZWxhdGVkIGFyZWFzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzdGF0aXN0aWNzIGFyZSBjYWxjdWxhdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjg3MCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQ0OjE0LjQ5NjM0NzgwM1oiLCJTZXEiOjYwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQzMjUzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXBkYXRlLipzdGF0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vbHJ1X3NvcnQuYz0zODg9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9kYW1vbl9jYWxsX2ZuKHZvaWQgKmFyZylcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzkyLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MzkzOlxcdC8qIHVwZGF0ZSB0aGUgc3RhdHMgcGFyYW1ldGVyICovXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zOTQtXFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0zMTM9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2RhbW9uX2NhbGxfZm4odm9pZCAqYXJnKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTMxNy1cXG5tbS9kYW1vbi9yZWNsYWltLmM6MzE4OlxcdC8qIHVwZGF0ZSB0aGUgc3RhdHMgcGFyYW1ldGVyICovXFxubW0vZGFtb24vcmVjbGFpbS5jLTMxOS1cXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgYylcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oPTM5PWludCBkYW1vbl9zeXNmc19hZGRfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC00MS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo0Mjp2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfdXBkYXRlX3N0YXRzKFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQzLVxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTMwNDQ9aW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMDYyLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMDYzOnZvaWQgZGFtb25fc3lzZnNfc2NoZW1lc191cGRhdGVfc3RhdHMoXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwNjQtXFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTE4Nzk9c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBkYW1vbl9zeXNmc19jbWRfc3Ryc1tdID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0xODgzLVxcdFxcXCJjb21taXRfc2NoZW1lc19xdW90YV9nb2Fsc1xcXCIsXFxubW0vZGFtb24vc3lzZnMuYzoxODg0OlxcdFxcXCJ1cGRhdGVfc2NoZW1lc19zdGF0c1xcXCIsXFxubW0vZGFtb24vc3lzZnMuYy0xODg1LVxcdFxcXCJ1cGRhdGVfc2NoZW1lc190cmllZF9ieXRlc1xcXCIsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIwNzg9c3RhdGljIGludCBkYW1vbl9zeXNmc191cGRfc2NoZW1lc19zdGF0cyh2b2lkICpkYXRhKVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMDgyLVxcbm1tL2RhbW9uL3N5c2ZzLmM6MjA4MzpcXHRkYW1vbl9zeXNmc19zY2hlbWVzX3VwZGF0ZV9zdGF0cyhcXG5tbS9kYW1vbi9zeXNmcy5jLTIwODQtXFx0XFx0XFx0a2RhbW9uZC1cXHUwMDNlY29udGV4dHMtXFx1MDAzZWNvbnRleHRzX2FyclswXS1cXHUwMDNlc2NoZW1lcywgY3R4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDQ6MTQuNTUwNjc1NDAzWiIsIlNlcSI6NjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4NDI2NDk3MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgYGRhbW9uX3N5c2ZzX3NjaGVtZXNfdXBkYXRlX3N0YXRzYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQncyBkaWcgaW50byB0aGlzIGBkYW1vbl9zeXNmc19zY2hlbWVzX3VwZGF0ZV9zdGF0c2AuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gYXNzZXNzIGl0cyBzaWduaWZpY2FuY2Ugd2l0aGluIHRoZSBicm9hZGVyIERBTU9OIGNvbnRleHQsIHRoZSBEYXRhIEFjY2VzcyBNb25pdG9yLiBXaGF0IHNwZWNpZmljIHN0YXRzIGFyZSB3ZSB0YWxraW5nIGFib3V0IGhlcmU/IEl0J3MgaW1tZWRpYXRlbHkgZXZpZGVudCB0aGF0IHRoaXMgZnVuY3Rpb24gZGVhbHMgd2l0aCB1cGRhdGluZyBzdGF0aXN0aWNzIHJlbGF0ZWQgdG8gdGhlIGRpZmZlcmVudCBtb25pdG9yaW5nIHNjaGVtZXMgZXhwb3NlZCB2aWEgc3lzZnMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IHRob3NlIGFyZS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYWNjZXNzIGZyZXF1ZW5jeSwgYWNjZXNzIHNpemUsIGFjY2VzcyBwYXR0ZXJucywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEEgcXVpY2sgc2NhbiBvZiB0aGUgY29kZSBzaG91bGQgY2xhcmlmeSB0aGF0LiBTcGVjaWZpY2FsbHksIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIGFib3V0IHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcyBiZWluZyBtYW5pcHVsYXRlZC4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbXBhY3Qgb2YgYW55IGNoYW5nZXMgb3IgZGVidWdnaW5nIGFueSBpc3N1ZXMgcmVsYXRlZCB0byBEQU1PTidzIHJlcG9ydGluZyBjYXBhYmlsaXRpZXMuIERlcGVuZGluZyBvbiB0aGUgY29tcGxleGl0eSwgSSBtaWdodCBuZWVkIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgZnJvbSB0aGUgcG9pbnQgb2YgY29sbGVjdGlvbiBhbGwgdGhlIHdheSB0byBpdHMgcHJlc2VudGF0aW9uLiBBIHBvdGVudGlhbCBnb3RjaGEgd291bGQgYmUgaWYgdGhlcmUgYXJlIGFueSByYWNlIGNvbmRpdGlvbnMuIEEgY2xvc2VyIGxvb2sgYXQgdGhlIGRhdGEgc3RydWN0dXJlIGlzIHJlcXVpcmVkIHRvIGVuc3VyZSBhdG9taWNpdHkuIFRoaXMgaXMgYW4gaW1wb3J0YW50IHBpZWNlIG9mIHRoZSBwdXp6bGUsIGFuZCBJIG5lZWQgdG8gZW5zdXJlIGl0J3MgZnVuY3Rpb25pbmcgYXMgZXhwZWN0ZWQuIEl0J3Mgb2Z0ZW4gdGhlIHVuc3VuZyBoZXJvZXMgbGlrZSB0aGVzZSBzdGF0aXN0aWNzIHVwZGF0ZXMgdGhhdCBjYW4gbWFrZSBvciBicmVhayB0aGUgZGlhZ25vc3RpYyB1c2VmdWxuZXNzIG9mIHRoZSB0b29sLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzgxMCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQ0OjIyLjM5MzMyNzgwNVoiLCJTZXEiOjYyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjc5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwNjMsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMwNjM6XFx0dm9pZCBkYW1vbl9zeXNmc19zY2hlbWVzX3VwZGF0ZV9zdGF0cyhcXG4zMDY0OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbjMwNjU6XFx0XFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbjMwNjY6XFx0e1xcbjMwNjc6XFx0XFx0c3RydWN0IGRhbW9zICpzY2hlbWU7XFxuMzA2ODpcXHRcXHRpbnQgc2NoZW1lc19pZHggPSAwO1xcbjMwNjk6XFx0XFxuMzA3MDpcXHRcXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUoc2NoZW1lLCBjdHgpIHtcXG4zMDcxOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqc3lzZnNfc3RhdHM7XFxuMzA3MjpcXHRcXG4zMDczOlxcdFxcdFxcdC8qIHVzZXIgY291bGQgaGF2ZSByZW1vdmVkIHRoZSBzY2hlbWUgc3lzZnMgZGlyICovXFxuMzA3NDpcXHRcXHRcXHRpZiAoc2NoZW1lc19pZHggXFx1MDAzZT0gc3lzZnNfc2NoZW1lcy1cXHUwMDNlbnIpXFxuMzA3NTpcXHRcXHRcXHRcXHRicmVhaztcXG4zMDc2OlxcdFxcbjMwNzc6XFx0XFx0XFx0c3lzZnNfc3RhdHMgPSBzeXNmc19zY2hlbWVzLVxcdTAwM2VzY2hlbWVzX2FycltzY2hlbWVzX2lkeCsrXS1cXHUwMDNlc3RhdHM7XFxuMzA3ODpcXHRcXHRcXHRzeXNmc19zdGF0cy1cXHUwMDNlbnJfdHJpZWQgPSBzY2hlbWUtXFx1MDAzZXN0YXQubnJfdHJpZWQ7XFxuMzA3OTpcXHRcXHRcXHRzeXNmc19zdGF0cy1cXHUwMDNlc3pfdHJpZWQgPSBzY2hlbWUtXFx1MDAzZXN0YXQuc3pfdHJpZWQ7XFxuMzA4MDpcXHRcXHRcXHRzeXNmc19zdGF0cy1cXHUwMDNlbnJfYXBwbGllZCA9IHNjaGVtZS1cXHUwMDNlc3RhdC5ucl9hcHBsaWVkO1xcbjMwODE6XFx0XFx0XFx0c3lzZnNfc3RhdHMtXFx1MDAzZXN6X2FwcGxpZWQgPSBzY2hlbWUtXFx1MDAzZXN0YXQuc3pfYXBwbGllZDtcXG4zMDgyOlxcdFxcdFxcdHN5c2ZzX3N0YXRzLVxcdTAwM2Vzel9vcHNfZmlsdGVyX3Bhc3NlZCA9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQ0OjIyLjM5MzQ1Njg4NVoiLCJTZXEiOjYzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzkzODkzMTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgREFNT04gUXVvdGEgR29hbCBVcGRhdGUgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgcXVvdGEgZ29hbHMgYXJlIGJlaW5nIHVwZGF0ZWQsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXJzcGFjZS4gSXQncyBjbGVhciB0aGF0IHRoZSBzdGF0cyBhcmUgZ2V0dGluZyB1cGRhdGVkLCB0aGF0IG11Y2ggaXMgb2J2aW91cyBmcm9tIHRoZSBjb2RlLCBidXQgSSdtIGNvbmNlcm5lZCBhYm91dCBgY3VycmVudF92YWx1ZWAgYW5kIGBsYXN0X3BzaV90b3RhbGAuIExldCdzIHNlZS4uLiBJJ20gcHJldHR5IHN1cmUgYGxhc3RfcHNpX3RvdGFsYCBpc24ndCBldmVuIGV4cG9zZWQgdG8gdXNlcnNwYWNlIGRpcmVjdGx5LiBHb29kLiBCdXQgd2hhdCBhYm91dCBgY3VycmVudF92YWx1ZWA/XG5cbkFoYSwgZGl2aW5nIGludG8gYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AsIEkgc2VlIHRoZSBgY3VycmVudF92YWx1ZV9zaG93YCBmdW5jdGlvbi4gQmluZ28uIEl0J3MgZXhwb3NpbmcgYGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwtXHUwMDNlY3VycmVudF92YWx1ZWAgdG8gdXNlcnNwYWNlLCB3aGljaCBpcyBzZXQgZnJvbSB1c2Vyc3BhY2UgdmlhIGBjdXJyZW50X3ZhbHVlX3N0b3JlYC4gQ3J1Y2lhbGx5LCB0aGlzIGlzbid0IHN5bmNocm9uaXplZCB3aXRoIHRoZSBjb3JlIGBkYW1vc19xdW90YV9nb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWVgLiBTbywgdGhlcmUncyBubyBpbmhlcmVudCB1cGRhdGUgcGF0aCBmcm9tIHRoZSBjb3JlIERBTU9OIGxvZ2ljIHRvIHRoZSBzeXNmcyBleHBvc2VkIHZhbHVlIGZvciBgY3VycmVudF92YWx1ZWAuXG5cbk5vdywgdGhlIHF1ZXN0aW9uIGlzLCAqd2hlcmUgZWxzZSogaXMgYGN1cnJlbnRfdmFsdWVgIGV2ZXIgdXBkYXRlZD8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXNuJ3QgYmVpbmcgaW5hZHZlcnRlbnRseSBtb2RpZmllZCBzb21ld2hlcmUgZWxzZSBpbiB0aGUgY29kZWJhc2UuIFRoaXMgY291bGQgY2F1c2Ugc29tZSByZWFsbHkgc3VidGxlIGJ1Z3MgaW4gaG93IHRoZSBxdW90YSBnb2FscyBhcmUgZW5mb3JjZWQsIGVzcGVjaWFsbHkgZ2l2ZW4gaG93IGBjdXJyZW50X3ZhbHVlYCBhcHBlYXJzIHRvIGJlIGEgY3J1Y2lhbCBmaWVsZCBmb3IgdGhlIHVzZXIgdG8gYmUgdHJhY2tpbmcuIEknbSBnb2luZyB0byBkbyBhIHF1aWNrIHNlYXJjaCBhbmQgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBwbGFjZXMgd2hlcmUgYGN1cnJlbnRfdmFsdWVgIGlzIG1hbmlwdWxhdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDU0MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQ0OjI4Ljc4NzM1MzAzMVoiLCJTZXEiOjY0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxNDAxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3VycmVudF92YWx1ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEyMTU9c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMTgtXFx0dW5zaWduZWQgbG9uZyB0YXJnZXRfdmFsdWU7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyMTk6XFx0dW5zaWduZWQgbG9uZyBjdXJyZW50X3ZhbHVlO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjIwLVxcdGludCBuaWQ7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTMxOT1zdGF0aWMgc3NpemVfdCB0YXJnZXRfdmFsdWVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMyOC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMyOTpzdGF0aWMgc3NpemVfdCBjdXJyZW50X3ZhbHVlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMzAtXFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMzNC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMzNTpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlbHVcXFxcblxcXCIsIGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzM2LX1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMzNy1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMzODpzdGF0aWMgc3NpemVfdCBjdXJyZW50X3ZhbHVlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzM5LVxcdFxcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTM0Mi1cXHRcXHRcXHRkYW1vc19zeXNmc19xdW90YV9nb2FsLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTM0MzpcXHRpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCBcXHUwMDI2Z29hbC1cXHUwMDNlY3VycmVudF92YWx1ZSk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzNDQtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTQxOD1zdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfdGFyZ2V0X3ZhbHVlX2F0dHIgPVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MjAtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MjE6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vc19zeXNmc19xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MjI6XFx0XFx0X19BVFRSX1JXX01PREUoY3VycmVudF92YWx1ZSwgMDYwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MjMtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTQzMD1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9hdHRyc1tdID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MzItXFx0XFx1MDAyNmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfdGFyZ2V0X3ZhbHVlX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQzMzpcXHRcXHUwMDI2ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQzNC1cXHRcXHUwMDI2ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9uaWRfYXR0ci5hdHRyLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NDc9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg2Ni1cXHRcXHRjYXNlIERBTU9TX1FVT1RBX1VTRVJfSU5QVVQ6XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4Njc6XFx0XFx0XFx0Z29hbC1cXHUwMDNlY3VycmVudF92YWx1ZSA9IHN5c2ZzX2dvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWU7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NjgtXFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQ0OjI4LjgzMTQ5NzM4MVoiLCJTZXEiOjY1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzE4NjI1MzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEludGVybmFsIERpYWxvZ3VlIG9uIERBTU9TIFF1b3RhIFVwZGF0ZXMqKlxuXG5Pa2F5LCBzbyB0aGUgYGN1cnJlbnRfdmFsdWVgIHdlJ3JlIHB1bGxpbmcgZnJvbSBzeXNmcywgdGhhdCdzIGp1c3QgYSBvbmUtd2F5IHN0cmVldCwgcmlnaHQ/IEl0J3MgcmVhZC1vbmx5IGFuZCBmZWVkcyBkaXJlY3RseSBpbnRvIHRoZSBjb3JlIHVzaW5nIGBEQU1PU19RVU9UQV9VU0VSX0lOUFVUYC4gTm8gY29tcGxleGl0aWVzIHRoZXJlLCBqdXN0IGEgc3RyYWlnaHRmb3J3YXJkIGRhdGEgdHJhbnNmZXIuIEJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLnNvbWV0aGluZyBmZWVscyBvZmYuIFdoYXQgYWJvdXQgYGRhbW9uX3N5c2ZzX3VwZGF0ZV9zY2hlbWVzX2VmZmVjdGl2ZV9xdW90YXNgPyBUaGF0J3MgdGhlIGZ1bmN0aW9uIHRoYXQgd29ycmllcyBtZSwgSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCB3b3JrcyBiZWNhdXNlIGl0IG1heSBhZmZlY3QgbXkgY29uY2x1c2lvbiB0aGF0IGBjdXJyZW50X3ZhbHVlYCBpcyBvbmx5IHJlYWQuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIG9mIHRoZXNlIGZ1bmN0aW9ucy4gSSB3b25kZXIgaWYgdGhlcmUncyBhbnkgaGlkZGVuIG1hbmlwdWxhdGlvbiBvciBzaWRlIGVmZmVjdHMgaGFwcGVuaW5nIHdpdGhpbiB0aGF0IG90aGVyIGZ1bmN0aW9uLiBJdCdzIGVhc3kgdG8gZ2V0IGxvc3QgaW4gdGhlc2UgbGF5ZXJzIG9mIGFic3RyYWN0aW9uLCBJIHNob3VsZCB0YWtlIGEgbG9vayBhdCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYxMDMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0NDozMi4xNTAxMjQ4MjVaIiwiU2VxIjo2NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MTExMTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVwZGF0ZV9zY2hlbWVzX2VmZmVjdGl2ZV9xdW90YXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3N5c2ZzLmM9MTg3OT1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGRhbW9uX3N5c2ZzX2NtZF9zdHJzW10gPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTE4ODctXFx0XFxcImNsZWFyX3NjaGVtZXNfdHJpZWRfcmVnaW9uc1xcXCIsXFxubW0vZGFtb24vc3lzZnMuYzoxODg4OlxcdFxcXCJ1cGRhdGVfc2NoZW1lc19lZmZlY3RpdmVfcXVvdGFzXFxcIixcXG5tbS9kYW1vbi9zeXNmcy5jLTE4ODktXFx0XFxcInVwZGF0ZV90dW5lZF9pbnRlcnZhbHNcXFwiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0NDozMi4xOTQyNDMyMjVaIiwiU2VxIjo2NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM5NDc0MDYxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyBFZmZlY3RpdmUgUXVvdGFzIHZpYSBgZGFtb25fc3lzZnNfdXBkX3NjaGVtZXNfZWZmZWN0aXZlX3F1b3Rhc2AqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIGBkYW1vbl9zeXNmc191cGRfc2NoZW1lc19lZmZlY3RpdmVfcXVvdGFzYCBpbnRlcmZhY2UuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgcXVvdGFzIGFzIHRoZXkgcGVydGFpbiB0byBEQU1PTiB1cGRhdGUgc2NoZW1lcy4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gc2VlIHdoYXQgZWZmZWN0aXZlIHF1b3RhIHNldHRpbmdzIGFyZSBiZWluZyBhcHBsaWVkLiBJJ20gbG9va2luZyBhdCB0aGlzIGFzIGEgZGlhZ25vc3RpYyBzdGVwIOKAkyBJIG5lZWQgdG8gZW5zdXJlIHRoZSBwYXJhbWV0ZXJzIEkndmUgY29uZmlndXJlZCB2aWEgc3lzZnMgYXJlIHRyYW5zbGF0aW5nIGludG8gdGhlIGJlaGF2aW9yIEkgZXhwZWN0IGluIHRoZSBEQU1PTiBmcmFtZXdvcmsuIEFtIEkgc2VlaW5nIHRoZSBsaW1pdHMsIHRoZSBidWRnZXQgYWxsb2NhdGlvbnMsIHRoZSBleHBlY3RlZCByZWR1Y3Rpb24gaW4gbWVtb3J5IHByZXNzdXJlLCBvciBhcmUgdGhlcmUgdW5leHBlY3RlZCBxdW90YSB2YWx1ZXMgdGhhdCBjb3VsZCBpbmRpY2F0ZSBhIGJ1ZyBpbiB0aGUgREFNT04gY29uZmlndXJhdGlvbiBsb2dpYywgb3IgYSBwb3RlbnRpYWwgY29uZmxpY3Qgd2l0aCBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zP1xuXG5JJ20gcHJvYmFibHkgZ29pbmcgdG8gYmUgY3Jvc3MtcmVmZXJlbmNpbmcgdGhpcyBkYXRhIHdpdGggb3RoZXIgc291cmNlcywgc3VjaCBhcyB0aGUgYGRhbW9uX21vbml0b3JzYCBzeXNmcyBpbnRlcmZhY2UsIHRvIGNvcnJlbGF0ZSB0aGUgcXVvdGEgc2V0dGluZ3Mgd2l0aCBvYnNlcnZlZCBtb25pdG9yaW5nIHJlc3VsdHMuIElzIHRoZSBgZGFtb25fc3lzZnNfdXBkX3NjaGVtZXNfZWZmZWN0aXZlX3F1b3Rhc2AgZGlzcGxheWluZyB0aGUgY3VycmVudCBzdGF0ZSBhcyBjYWxjdWxhdGVkIG9yIGlzIHRoZSBhY3R1YWwgYmVoYXZpb3IgY29uZmxpY3Rpbmcgd2l0aCB0aGlzIHZhbHVlPyBGcm9tIGhlcmUsIEkgd2lsbCBsaWtlbHkgZ28gb24gdG8gY2hlY2sgaG93IHRoZXNlIHF1b3RhcyBhcmUgYmVpbmcgdXBkYXRlZCwgb3IgaG93IHRoZXNlIHF1b3RhcyBhcmUgZWZmZWN0aW5nIHRoZSB1bmRlcmx5aW5nIGJlaGF2aW9yLCBtYXliZSBjb21wYXJlIGl0IHRvIGEgY29udHJvbCBzZXR1cCB0byBvYnNlcnZlIHRoZSBlZmZlY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjUwNiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQ0OjM4LjU4ODk4Njg1OFoiLCJTZXEiOjY4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5ODA4NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fc3lzZnNfdXBkX3NjaGVtZXNfZWZmZWN0aXZlX3F1b3Rhc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vc3lzZnMuYz0yMTUyPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfY29tbWl0X3NjaGVtZXNfcXVvdGFfZ29hbHModm9pZCAqZGF0YSlcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjE2OS0vKlxcbm1tL2RhbW9uL3N5c2ZzLmM6MjE3MDogKiBkYW1vbl9zeXNmc191cGRfc2NoZW1lc19lZmZlY3RpdmVfcXVvdGFzKCkgLSBVcGRhdGUgc2NoZW1lcyBlZmZlY3RpdmUgcXVvdGFzXFxubW0vZGFtb24vc3lzZnMuYy0yMTcxLSAqIHN5c2ZzIGZpbGVzLlxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMTc4LSAqL1xcbm1tL2RhbW9uL3N5c2ZzLmM6MjE3OTpzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3VwZF9zY2hlbWVzX2VmZmVjdGl2ZV9xdW90YXModm9pZCAqZGF0YSlcXG5tbS9kYW1vbi9zeXNmcy5jLTIxODAte1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMjE5PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfcmVwZWF0X2NhbGxfZm4odm9pZCAqZGF0YSlcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjIzNS1cXHRkYW1vbl9zeXNmc191cGRfc2NoZW1lc19zdGF0cyhzeXNmc19rZGFtb25kKTtcXG5tbS9kYW1vbi9zeXNmcy5jOjIyMzY6XFx0ZGFtb25fc3lzZnNfdXBkX3NjaGVtZXNfZWZmZWN0aXZlX3F1b3RhcyhzeXNmc19rZGFtb25kKTtcXG5tbS9kYW1vbi9zeXNmcy5jLTIyMzctb3V0Olxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMzYzPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfaGFuZGxlX2NtZChlbnVtIGRhbW9uX3N5c2ZzX2NtZCBjbWQsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIzOTItXFx0XFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoXFxubW0vZGFtb24vc3lzZnMuYzoyMzkzOlxcdFxcdFxcdFxcdGRhbW9uX3N5c2ZzX3VwZF9zY2hlbWVzX2VmZmVjdGl2ZV9xdW90YXMsXFxubW0vZGFtb24vc3lzZnMuYy0yMzk0LVxcdFxcdFxcdFxcdGtkYW1vbmQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0NDozOC42Mzc5Njk3MjhaIiwiU2VxIjo2OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMyMjgwMzIwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQncyBnb2luZyB0aHJvdWdoIG15IG1pbmQsIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIGlmIEknbSB0aGUgZXhwZXJ0OlxuXG4qKkRpdmluZyBpbnRvIGBkYW1vbl9zeXNmc191cGRfc2NoZW1lc19lZmZlY3RpdmVfcXVvdGFzYCoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSB3aGF0J3Mgd2hhdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgZGFtb25fc3lzZnNfdXBkX3NjaGVtZXNfZWZmZWN0aXZlX3F1b3Rhc2AgZmlsZS4gSW1tZWRpYXRlbHksIEknbSB0aGlua2luZzogdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byB0aGUgRHluYW1pYyBBZGFwdGl2ZSBNZW1vcnkgT3B0aW1pemVyIChEQU1PTikgc3lzdGVtIGFuZCBob3cgaXQgaW50ZXJmYWNlcyB0aHJvdWdoIHRoZSBzeXNmcyBmaWxlc3lzdGVtIHRvIG1hbmFnZSB1cGRhdGUgc2NoZW1lcyBhbmQgdGhlaXIgZWZmZWN0aXZlIHF1b3Rhcy4gU28sIGl0J3MgYWJvdXQgY29udHJvbCBhbmQgbW9uaXRvcmluZywgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBtZW1vcnkgcmVjbGFtYXRpb24gb3Igb3B0aW1pemF0aW9uLlxuXG5HaXZlbiB0aGUgbmFtaW5nLCBJIGFudGljaXBhdGUgdGhpcyBmaWxlIHdpbGwgZXhwb3NlIGRldGFpbHMgcmVnYXJkaW5nIHRoZSBxdW90YXMgZW5mb3JjZWQgb3IgYXBwbGllZCB0byB0aGUgZGlmZmVyZW50IHVwZGF0ZSBzY2hlbWVzIHRoYXQgREFNT04gc3VwcG9ydHMuIEknbSBleHBlY3RpbmcgdG8gc2VlIGluZm9ybWF0aW9uIHJlZmxlY3RpbmcgaG93IHRoZSBzeXN0ZW0gaXMgY3VycmVudGx5IGJlaGF2aW5nIGJhc2VkIG9uIHRoZXNlIGRlZmluZWQgc2NoZW1lcy4gVGhpcyBsaWtlbHkgdHJhbnNsYXRlcyB0byBob3cgYWdncmVzc2l2ZWx5IERBTU9OIHdpbGwgcmVjbGFpbSBtZW1vcnkgb3IgcGVyZm9ybSBzcGVjaWZpYyBvcHRpbWl6YXRpb25zIGJhc2VkIG9uIHVzYWdlIHBhdHRlcm5zIGFuZCBwcmVkZWZpbmVkIHNldHRpbmdzLiBJJ2xsIG5lZWQgdG8gbG9vayBmb3Iga2V5IHBhcmFtZXRlcnMgc3VjaCBhcyB0aGUgbWVtb3J5IHJlZ2lvbiBzaXplLCB1cGRhdGUgcGVyaW9kcywgdGhyZXNob2xkIHZhbHVlcywgYW5kIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucyB0aGF0IGltcGFjdCBxdW90YSBlbmZvcmNlbWVudC5cblxuSSdtIHByZXBhcmVkIHRvIGludGVycHJldCB0aGUgZGF0YSwgdW5kZXJzdGFuZGluZyB0aGF0IHRoZSBlZmZlY3RpdmUgcXVvdGFzIGFyZSBwcm9iYWJseSBjYWxjdWxhdGVkIGFuZCBhZGp1c3RlZCBkeW5hbWljYWxseSBieSBEQU1PTiBiYXNlZCBvbiB2YXJpb3VzIGZhY3RvcnMsIHBlcmhhcHMgaW5jbHVkaW5nIGF2YWlsYWJsZSBtZW1vcnksIG92ZXJhbGwgc3lzdGVtIGxvYWQsIGFuZCBwb3RlbnRpYWxseSBldmVuIHVzZXItZGVmaW5lZCB0dW5hYmxlcy4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgdGhlIGludGVycGxheSBiZXR3ZWVuIGRpZmZlcmVudCB1cGRhdGUgc2NoZW1lcyBhbmQgaG93IHRoZWlyIHF1b3RhcyBtaWdodCBiZSBwcmlvcml0aXplZCBvciB3ZWlnaHRlZC4gVWx0aW1hdGVseSwgSSdtIGhvcGluZyB0aGlzIHdpbGwgaWxsdW1pbmF0ZSBob3cgREFNT04ncyB1cGRhdGUgbG9naWMgd29ya3MgYW5kIHByb3ZpZGUgaW5zaWdodCBpbnRvIG9wdGltaXppbmcgdGhlIHN5c3RlbSdzIG1lbW9yeSBtYW5hZ2VtZW50IGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzM0NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQ0OjQyLjk2MDc3NTExOVoiLCJTZXEiOjcwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDY3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vc3lzZnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTc5LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTc5OlxcdHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdXBkX3NjaGVtZXNfZWZmZWN0aXZlX3F1b3Rhcyh2b2lkICpkYXRhKVxcbjIxODA6XFx0e1xcbjIxODE6XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQgPSBkYXRhO1xcbjIxODI6XFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4ID0ga2RhbW9uZC1cXHUwMDNlZGFtb25fY3R4O1xcbjIxODM6XFx0XFxuMjE4NDpcXHRcXHRkYW1vc19zeXNmc191cGRhdGVfZWZmZWN0aXZlX3F1b3RhcyhcXG4yMTg1OlxcdFxcdFxcdFxcdGtkYW1vbmQtXFx1MDAzZWNvbnRleHRzLVxcdTAwM2Vjb250ZXh0c19hcnJbMF0tXFx1MDAzZXNjaGVtZXMsIGN0eCk7XFxuMjE4NjpcXHRcXHRyZXR1cm4gMDtcXG4yMTg3OlxcdH1cXG4yMTg4OlxcdFxcbjIxODk6XFx0c3RhdGljIGludCBkYW1vbl9zeXNmc191cGRfdHVuZWRfaW50ZXJ2YWxzKHZvaWQgKmRhdGEpXFxuMjE5MDpcXHR7XFxuMjE5MTpcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZCA9IGRhdGE7XFxuMjE5MjpcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHggPSBrZGFtb25kLVxcdTAwM2VkYW1vbl9jdHg7XFxuMjE5MzpcXHRcXG4yMTk0OlxcdFxcdGtkYW1vbmQtXFx1MDAzZWNvbnRleHRzLVxcdTAwM2Vjb250ZXh0c19hcnJbMF0tXFx1MDAzZWF0dHJzLVxcdTAwM2VpbnRlcnZhbHMtXFx1MDAzZXNhbXBsZV91cyA9XFxuMjE5NTpcXHRcXHRcXHRjdHgtXFx1MDAzZWF0dHJzLnNhbXBsZV9pbnRlcnZhbDtcXG4yMTk2OlxcdFxcdGtkYW1vbmQtXFx1MDAzZWNvbnRleHRzLVxcdTAwM2Vjb250ZXh0c19hcnJbMF0tXFx1MDAzZWF0dHJzLVxcdTAwM2VpbnRlcnZhbHMtXFx1MDAzZWFnZ3JfdXMgPVxcbjIxOTc6XFx0XFx0XFx0Y3R4LVxcdTAwM2VhdHRycy5hZ2dyX2ludGVydmFsO1xcbjIxOTg6XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQ0OjQyLjk2MDk4NDMxOVoiLCJTZXEiOjcxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODQwMDM4ODY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgZGFtb3Nfc3lzZnNfdXBkYXRlX2VmZmVjdGl2ZV9xdW90YXNgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgY29kZSBpcyBkb2luZyDigJMgYW5kIGlkZWFsbHksIGhvdyBpdCdzICpzdXBwb3NlZCogdG8gYmUgZG9pbmcgaXQuIEknbSBnb2luZyB0byBmb2N1cyBvbiB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IGZpcnN0LCB0cnlpbmcgdG8gcXVpY2tseSBncmFzcCB0aGUgaW5wdXQgYXJndW1lbnRzLCB3aGF0IGRhdGEgc3RydWN0dXJlcyBpdCdzIHdvcmtpbmcgd2l0aCwgYW5kIHRoZSBleHBlY3RlZCBvdXRwdXQgb3Igc2lkZSBlZmZlY3RzLiBJcyB0aGlzIHRvdWNoaW5nIHN5c2ZzIGRpcmVjdGx5PyBJZiBzbywgd2hhdCBhdHRyaWJ1dGVzPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBsb2NraW5nIG1lY2hhbmlzbXMgYmVpbmcgdXNlZD8gSSBuZWVkIHRvIGltbWVkaWF0ZWx5IGxvb2sgZm9yIHBvdGVudGlhbCBlcnJvciBwYXRocyDigJMgd2hhdCBoYXBwZW5zIGlmIHNvbWV0aGluZyBnb2VzIHdyb25nIGR1cmluZyBhIHdyaXRlLCBvciBpZiBzb21lIGNyaXRpY2FsIHJlc291cmNlIGlzbid0IGF2YWlsYWJsZT8gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgc2lnbnMgb2YgbWVtb3J5IGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uLCBlcnJvciBoYW5kbGluZyB3aXRoIHJlbGV2YW50IHJldHVybiBjb2RlcyBhbmQvb3IgbG9nIG1lc3NhZ2VzLiBNeSBwcmltYXJ5IGZvY3VzIGlzIG9uIGhvdyBpdCBtYW5hZ2VzIHF1b3RhcyBhbmQsIHNwZWNpZmljYWxseSwgaG93IGl0ICp1cGRhdGVzKiB0aGUgZWZmZWN0aXZlIHF1b3RhcyB2aWEgc3lzZnMuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgcG9zc2libGUgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgY29tcG9uZW50cyB0aGF0IG1heSBiZSByZWFkaW5nIG9yIHdyaXRpbmcgdG8gdGhlIHNhbWUgc3lzZnMgYXR0cmlidXRlcyBhdCB0aGUgc2FtZSB0aW1lLiBMZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBjb21tZW50cyBleHBsYWluaW5nIHRoZSBpbnRlbnQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MTIyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0NDo0Ni44MDEwMjYxMzJaIiwiU2VxIjo3MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTcwOTIzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19zeXNmc191cGRhdGVfZWZmZWN0aXZlX3F1b3Rhc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vc3lzZnMtY29tbW9uLmg9NTQ9aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01Ni1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo1Nzp2b2lkIGRhbW9zX3N5c2ZzX3VwZGF0ZV9lZmZlY3RpdmVfcXVvdGFzKFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTU4LVxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4OTQ9aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjkyOC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjkyOTp2b2lkIGRhbW9zX3N5c2ZzX3VwZGF0ZV9lZmZlY3RpdmVfcXVvdGFzKFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTMwLVxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMTc5PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdXBkX3NjaGVtZXNfZWZmZWN0aXZlX3F1b3Rhcyh2b2lkICpkYXRhKVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMTgzLVxcbm1tL2RhbW9uL3N5c2ZzLmM6MjE4NDpcXHRkYW1vc19zeXNmc191cGRhdGVfZWZmZWN0aXZlX3F1b3RhcyhcXG5tbS9kYW1vbi9zeXNmcy5jLTIxODUtXFx0XFx0XFx0a2RhbW9uZC1cXHUwMDNlY29udGV4dHMtXFx1MDAzZWNvbnRleHRzX2FyclswXS1cXHUwMDNlc2NoZW1lcywgY3R4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDQ6NDYuOTQyNzM3OTEyWiIsIlNlcSI6NzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMjc5MDM2OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBkYW1vc19zeXNmc191cGRhdGVfZWZmZWN0aXZlX3F1b3Rhc2AgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBkb2luZywgc3BlY2lmaWNhbGx5IGhvdyBpdCdzIHVwZGF0aW5nIGVmZmVjdGl2ZSBxdW90YXMuIEJhc2VkIG9uIHRoZSBuYW1lLCBpdCBzZWVtcyByZWxhdGVkIHRvIHRoZSBzeXNmcyBpbnRlcmZhY2UsIHNvIEknbGwgYmUgbG9va2luZyBmb3IgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGZpbGUgc3lzdGVtLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHVzZWQsIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMgZW1wbG95ZWQgdG8gZW5zdXJlIHRocmVhZCBzYWZldHksIGFuZCBhbnkgZXJyb3IgaGFuZGxpbmcgdGhhdCdzIHByZXNlbnQuIEknbGwgYmUgZXhwZWN0aW5nIHRvIGZpbmQgZGV0YWlscyBvbiBob3cgdGhlIHF1b3RhIHZhbHVlcyBhcmUgY2FsY3VsYXRlZCwgYW5kIGhvdyB0aGVzZSBjYWxjdWxhdGlvbnMgYXJlIGludGVncmF0ZWQgaW50byB0aGUgcXVvdGEgc3lzdGVtLiBJJ2xsIGJlIGFuYWx5emluZyBlYWNoIGxpbmUgb2YgdGhlIGltcGxlbWVudGF0aW9uLCBsaW5lIGJ5IGxpbmUuIExldCdzIHNlZSBpZiB0aGlzIGNvZGUgaXMgd2VsbC1jb21tZW50ZWQgYW5kIGVhc3kgdG8gZm9sbG93LiBJIGhvcGUgaXQncyB3ZWxsLXdyaXR0ZW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4ODExLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDQ6NTAuMTcwNjQzOTI3WiIsIlNlcSI6NzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjkyOSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjkyOTpcXHR2b2lkIGRhbW9zX3N5c2ZzX3VwZGF0ZV9lZmZlY3RpdmVfcXVvdGFzKFxcbjI5MzA6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXFxuMjkzMTpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuMjkzMjpcXHR7XFxuMjkzMzpcXHRcXHRzdHJ1Y3QgZGFtb3MgKnNjaGVtZTtcXG4yOTM0OlxcdFxcdGludCBzY2hlbWVzX2lkeCA9IDA7XFxuMjkzNTpcXHRcXG4yOTM2OlxcdFxcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzY2hlbWUsIGN0eCkge1xcbjI5Mzc6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3RhcyAqc3lzZnNfcXVvdGFzO1xcbjI5Mzg6XFx0XFxuMjkzOTpcXHRcXHRcXHQvKiB1c2VyIGNvdWxkIGhhdmUgcmVtb3ZlZCB0aGUgc2NoZW1lIHN5c2ZzIGRpciAqL1xcbjI5NDA6XFx0XFx0XFx0aWYgKHNjaGVtZXNfaWR4IFxcdTAwM2U9IHN5c2ZzX3NjaGVtZXMtXFx1MDAzZW5yKVxcbjI5NDE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjk0MjpcXHRcXG4yOTQzOlxcdFxcdFxcdHN5c2ZzX3F1b3RhcyA9XFxuMjk0NDpcXHRcXHRcXHRcXHRzeXNmc19zY2hlbWVzLVxcdTAwM2VzY2hlbWVzX2FycltzY2hlbWVzX2lkeCsrXS1cXHUwMDNlcXVvdGFzO1xcbjI5NDU6XFx0XFx0XFx0c3lzZnNfcXVvdGFzLVxcdTAwM2VlZmZlY3RpdmVfc3ogPSBzY2hlbWUtXFx1MDAzZXF1b3RhLmVzejtcXG4yOTQ2OlxcdFxcdH1cXG4yOTQ3OlxcdH1cXG4yOTQ4OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0NDo1MC4xNzA3Nzc4NTdaIiwiU2VxIjo3NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAxNzUwMzQxMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBJbmZvcm1hdGlvbiBMZWFrYWdlIGFuZCBVbmluaXRpYWxpemVkIE1lbW9yeSBVc2FnZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGBsYXN0X3BzaV90b3RhbGAgaXMgcHVyZWx5IGludGVybmFsIGFuZCBub3QgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIHdoaWNoIGlzIGdvb2QuIFRoZSBgY3VycmVudF92YWx1ZWAgaXMgb25seSB1c2VyLXZpc2libGUgZm9yIGlucHV0LCB3aGljaCBhbHNvIHNlZW1lZCBzYWZlLiBCdXQgdGhlbiBJIHJlYWxpemVkIGBjdXJyZW50X3ZhbHVlX3Nob3dgIHByaW50cyBgZ29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlYCwgbm90IHNvbWUgZGVyaXZlZCBvciBzYW5pdGl6ZWQgdmFsdWUuIEhvd2V2ZXIsIHRoZSBrZXJuZWwncyBgZGFtb3NfcXVvdGFfZ29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlYCBpcyBuZXZlciBkaXJlY3RseSBleHBvc2VkLiBTbywgbm8gaW5mb3JtYXRpb24gbGVhayB0aGVyZS4gVGhhdCdzIGEgcmVsaWVmLlxuXG5UaGUgbmV4dCBjb25jZXJuIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJZiBgbGFzdF9wc2lfdG90YWxgIHdhc24ndCBpbml0aWFsaXplZCwgYGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVgIHdvdWxkIHVzZSBpdDogSXQgY2FsY3VsYXRlcyBgZ29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlYCBieSBzdWJ0cmFjdGluZyBpdCBmcm9tIGBub3dfcHNpX3RvdGFsYC4gQW5kIHRoZW4gYGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZWAgaXMgdXNlZCBpbiBgZGFtb3NfcXVvdGFfc2NvcmVgLCBzcGVjaWZpY2FsbHkgaW4gY2FsY3VsYXRpbmcgdGhlIGBoaWdoZXN0X3Njb3JlYC4gVGhhdCBgaGlnaGVzdF9zY29yZWAgaXMgdXNlZCB0byBhZGp1c3QgdGhlIHF1b3RhIHNpemUsIHNvIGlmIHRoaXMgdmFsdWUgaXMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLCB0aGUgcXVvdGEgYWRqdXN0bWVudCB3b3VsZCBiZSByYW5kb20vd3JvbmcgZm9yIHRoZSBmaXJzdCBjeWNsZS4gVGhpcyBpcyBhIGxvZ2ljIGJ1ZyB0aGF0IGNvdWxkIGhhdmUgc2VyaW91cyBjb25zZXF1ZW5jZXMuXG5cbldhaXQsIGBkYW1vc19uZXdfcXVvdGFfZ29hbGAgdXNlcyBga21hbGxvY19vYmpgLCB3aGljaCAqZG9lc24ndCogemVybyBtZW1vcnkuIFNvLCBgbGFzdF9wc2lfdG90YWxgICppcyogaW5kZWVkIHVuaW5pdGlhbGl6ZWQuIFRoZSBwYXRjaCBmaXhlcyB0aGlzIGJ5IGluaXRpYWxpemluZyBgbGFzdF9wc2lfdG90YWxgLlxuXG5NeSBxdWVzdGlvbiB0aGVuIGJlY2FtZTogV291bGQgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBjYXRjaCB0aGlzPyBZZXMsIGl0IHdvdWxkLiBLTVNBTiBkZXRlY3RzIHRoZSB1c2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY2FsY3VsYXRpb25zIHRoYXQgYWZmZWN0IGNvbnRyb2wgZmxvdyBvciBhcmUgcGFzc2VkIHRvIG90aGVyIGZ1bmN0aW9ucy5cblxuRG9lcyBgZ29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlYCBhZmZlY3QgY29udHJvbCBmbG93PyBgaGlnaGVzdF9zY29yZWAgdXNlcyBgZ29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlYCB0byBjYWxjdWxhdGUgYHF1b3RhLVx1MDAzZWVzemAgKGVmZmVjdGl2ZSBzaXplKS4gVGhhdCBgcXVvdGEtXHUwMDNlZXN6YCBpcyB1c2VkIGluIGBkYW1vc19hZGp1c3RfcXVvdGFgLCB3aGljaCBkZXRlcm1pbmVzIGhvdyBtdWNoIG1lbW9yeSBEQU1PTiByZWNsYWltcy4gVGhpcyBtZWFucyBhbiBpbmNvcnJlY3QgdmFsdWUgb2YgYHF1b3RhLVx1MDAzZWVzemAgY2FuIGxlYWQgdG8gdW5wcmVkaWN0YWJsZSBiZWhhdmlvci4gSXQgaXMgbm90IGp1c3QgYSBidWcsIGl0IGNvdWxkIGhhdmUgYW4gZWZmZWN0IG9uIGNvbnRyb2wgZmxvdy4gSXTigJlzIGNlcnRhaW5seSBhIGZ1bmN0aW9uYWwgYnVnLCBzaW5jZSBgcXVvdGEtXHUwMDNlZXN6YCBoYXMgYW4gaW1wb3J0YW50IGZ1bmN0aW9uIGFuZCB0aGlzIG1ha2VzIGl0IGluY29ycmVjdCwgS01TQU4gd291bGQgY2F0Y2ggdGhlIHVzZSBvZiB1bmluaXRpYWxpemVkIGBsYXN0X3BzaV90b3RhbGAgaW4gYG5vd19wc2lfdG90YWwgLSBnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsYC5cblxuS01TQU4gcmVwb3J0cyB1bmluaXRpYWxpemVkIG1lbW9yeSBpZiB1c2VkIGluIGEgYnJhbmNoIG9yIHdoZW4gY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgYXMgYSBwb2ludGVyL2luZGV4LiBJcyBgZ29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlYCB1c2VkIGluIGEgYnJhbmNoPyBJJ2QgaGF2ZSB0byBsb29rIGF0IGBtdWx0X2ZyYWNgIHNwZWNpZmljYWxseSB0byBjb25maXJtIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MzUwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDU6MDAuMzQ1ODE0ODM2WiIsIlNlcSI6NzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjczOTIzMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXVsdF9mcmFjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvbWF0aC5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWF0aC5oPTExNj1fX1NUUlVDVF9GUkFDVCh1MzIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21hdGguaC0xMTktLyogQ2FsY3VsYXRlIFxcXCJ4ICogbiAvIGRcXFwiIHdpdGhvdXQgdW5uZWNlc3Nhcnkgb3ZlcmZsb3cgb3IgbG9zcyBvZiBwcmVjaXNpb24uICovXFxuaW5jbHVkZS9saW51eC9tYXRoLmg6MTIwOiNkZWZpbmUgbXVsdF9mcmFjKHgsIG4sIGQpXFx0XFxcXFxcbmluY2x1ZGUvbGludXgvbWF0aC5oLTEyMS0oe1xcdFxcdFxcdFxcdFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDU6MDAuOTEzMjExOTA1WiIsIlNlcSI6NzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MjIxMzAwODYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEp1c3RpZmljYXRpb246IFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJlYWQgaW4gREFNT04gUXVvdGEgU2NvcmluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UgaGF2ZSBgbXVsdF9mcmFjYCwgcHVyZWx5IG1hdGhlbWF0aWNhbCwgbm8gaXNzdWUgdGhlcmUuIFRoZSByZWFsIGNvbmNlcm4gaXMgdGhlIGBtYXgoaGlnaGVzdF9zY29yZSwgLi4uKWAgY2FsbC4gYG1heGAsIGFzIGRlZmluZWQgYnkgdGhlIG1hY3JvLCBjbGVhcmx5IGludm9sdmVzIGEgY29tcGFyaXNvbiDigJMgYSBjb25kaXRpb25hbCBicmFuY2guIFRoaXMgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gVGhlIGNvcmUgcHJvYmxlbSBpcyB0aGF0IGBsYXN0X3BzaV90b3RhbGAgd2l0aGluIHRoZSBgZGFtb3NfcXVvdGFfZ29hbGAgc3RydWN0IG1pZ2h0IGJlIHVuaW5pdGlhbGl6ZWQuIEtNU0FOLCB3aXRoIGl0cyBiaXQtbGV2ZWwgdHJhY2tpbmcsIHdpbGwgZmxhZyBhbnkgdXNlIG9mIGFuIHVuaW5pdGlhbGl6ZWQgdmFsdWUgaW4gYSBjb25kaXRpb25hbCwgYXMgd2UgaGF2ZSBoZXJlIHdpdGggdGhlIGBcdTAwM2VgIGluIHRoZSBgbWF4YCBtYWNyby5cblxuTm93LCBpcyB0aGlzIGJ1ZyBldmVuIHJlYWNoYWJsZT8gREFNT04ncyBgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTYCBmZWF0dXJlLCBpbnRyb2R1Y2VkIGluIHY2LjEwIG9yIHNvLCBpcyBrZXkgaGVyZS4gVXNlcnNwYWNlIGNhbiBjcmVhdGUgYSBEQU1PTiBzY2hlbWUgdXNpbmcgdGhpcyBtZXRyaWMuIFdoZW4gc3VjaCBhIHNjaGVtZSAqc3RhcnRzKiwgYGxhc3RfcHNpX3RvdGFsYCBpcyB1bmluaXRpYWxpemVkLiBUaGUgZnVuY3Rpb24gYGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVgIGlzIHRoZW4gY2FsbGVkIGluIHRoZSBmaXJzdCBjeWNsZSwgdXNpbmcgdGhlIGBsYXN0X3BzaV90b3RhbGAuIEJpbmdvISBLTVNBTiB3aWxsIGNhdGNoIHRoaXMuXG5cbkJ1dCB3YWl0LCB3b3VsZCBLQVNBTiBoYXZlIGNhdWdodCB0aGlzPyBOb3BlLiBLQVNBTiBvbmx5IGRldGVjdHMgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucy4gSXQgZG9lc24ndCBjYXJlIGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIHdpdGhpbiBhbGxvY2F0ZWQgcmVnaW9ucy4gU28sIHRoaXMgaXMgYSBwdXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgYnVnLlxuXG5MZXQncyBjb25maXJtIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgbGFzdF9wc2lfdG90YWxgLiBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgIGFsbG9jYXRlcyBpdCB2aWEgYGttYWxsb2Nfb2JqYC4gTG9va2luZyBhdCB0aGUgY29kZTpcblxuYGBgY1xuc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX25ld19xdW90YV9nb2FsKFxuXHRcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljLFxuXHRcdHVuc2lnbmVkIGxvbmcgdGFyZ2V0X3ZhbHVlKVxue1xuXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcblxuXHRnb2FsID0ga21hbGxvY19vYmooKmdvYWwpO1xuXHRpZiAoIWdvYWwpXG5cdFx0cmV0dXJuIE5VTEw7XG5cdGdvYWwtXHUwMDNlbWV0cmljID0gbWV0cmljO1xuXHRnb2FsLVx1MDAzZXRhcmdldF92YWx1ZSA9IHRhcmdldF92YWx1ZTtcblx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2Z29hbC1cdTAwM2VsaXN0KTtcblx0cmV0dXJuIGdvYWw7XG59XG5gYGBcblxuWWVzLCBga21hbGxvY19vYmpgIGFsbG9jYXRlcyBidXQgKmRvZXNuJ3QqIGluaXRpYWxpemUgaXQuIFRoaXMgZnVuY3Rpb24gZG9lc24ndCBpbml0aWFsaXplIGBsYXN0X3BzaV90b3RhbGAuIEJlZm9yZSB0aGUgcGF0Y2gsIGl0IHdhcyBvbmx5IGluaXRpYWxpemVkIGluIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbmAgKG9yIG5vdCBhdCBhbGwpLiBUaGUgcGF0Y2ggYWRkZWQgaW5pdGlhbGl6YXRpb24gb2YgdGhpcyB2YWx1ZSBidXQgbm90IGZvciB0aGUgZmlyc3QgY3ljbGUuIFNvLCBwcmUtcGF0Y2gsIGBsYXN0X3BzaV90b3RhbGAgd2FzICpuZXZlciogaW5pdGlhbGl6ZWQgb24gZ29hbCBjcmVhdGlvbiwgYW5kIHRoZSBwYXRjaCBhZGRzIHRoZSBpbml0aWFsaXphdGlvbiBpbiBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb25gIGJ1dCBub3Qgb24gaW5pdGlhbCBhbGxvY2F0aW9uISBUaGUgY29tbWVudCBpbiBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxgIG1lbnRpb25zLCBcImtlZXAgYGxhc3RfcHNpX3RvdGFsYCBhcyBpcywgc2luY2UgaXQgd2lsbCBiZSB1cGRhdGVkIGluIG5leHQgY3ljbGUuXCIgVGhpcyBjb25maXJtcyB0aGUgaW50ZW5kZWQgYmVoYXZpb3I6ICB0aGUgaW5pdGlhbCBjeWNsZSAqbXVzdCogdXNlIGFuIHVuaW5pdGlhbGl6ZWQgdmFsdWUhXG5cblNvLCB5ZXMsIGl0J3MgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlLiBUaGUgYnVnIGlzIGhlcmUhXG5cbklzIHRoaXMgYSBzZWN1cml0eSBpc3N1ZT8gRGVmaW5pdGVseS4gQW4gdW5pbml0aWFsaXplZCByZWFkIGNhbiBpbmZsdWVuY2UgdGhlIHF1b3RhIHNjb3JlLCBhbmQgdGhlIHF1b3RhIHNjb3JlIGltcGFjdHMgaG93IGFnZ3Jlc3NpdmVseSBEQU1PTiByZWNsYWltcyBtZW1vcnkuIEFuIGF0dGFja2VyIGNvdWxkIHBvdGVudGlhbGx5IG1hbmlwdWxhdGUgbWVtb3J5IHJlY2xhaW0gZGVjaXNpb25zIGJhc2VkIG9uIHRoZSAqcmFuZG9tKiBjb250ZW50cyBvZiB1bmluaXRpYWxpemVkIGhlYXAgbWVtb3J5LiBUaGlzIGlzIGEgY2xhc3NpYyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2UgdnVsbmVyYWJpbGl0eS4gS01TQU4gaXMgdGhlICpwZXJmZWN0KiB0b29sIHRvIGNhdGNoIHRoaXMuXG5cbkxldCdzIGRvdWJsZS1jaGVjayB0aGF0IGBrbWFsbG9jX29iamAgYWN0dWFsbHkgY2FsbHMgYGttYWxsb2NgLCBub3QgYGt6YWxsb2NgOlxuXG5gYGBjXG4jZGVmaW5lIGttYWxsb2Nfb2JqKFZBUl9PUl9UWVBFLCAuLi4pIFxcXG5cdF9fYWxsb2Nfb2JqcyhrbWFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihWQVJfT1JfVFlQRSksIDEpXG5gYGBcblxuWWVwLCBpdCB1c2VzIGBrbWFsbG9jYC5cblxuVGhlIGNoYW5nZSBpbiBgbW0vZGFtb24vc3lzZnMuY2AgaXMgaXJyZWxldmFudDsgaXQncyBqdXN0IGZpeGluZyBhIGtkYW1vbmQgcmVmcmVzaCBpbnRlcnZhbCBpc3N1ZS5cblxuU28sIHRoZSBidWcgaXMgZGVmaW5pdGVseSB3aXRoIGBsYXN0X3BzaV90b3RhbGAsIHVzZWQgaW4gYG5vd19wc2lfdG90YWwgLSBnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsYCwgYW5kIHRoaXMgcmVzdWx0IGlzIHRoZW4gdXNlZCBpbiBhIGNvbXBhcmlzb24gd2l0aGluIGBtYXgoaGlnaGVzdF9zY29yZSwgLi4uKWAuIEtNU0FOICp3aWxsKiBjYXRjaCB0aGlzIGJlY2F1c2UgaXQgdXNlcyBhbiB1bmluaXRpYWxpemVkIHZhbHVlIGluIGEgY29uZGl0aW9uYWwgYnJhbmNoLiBUaGVyZSdzIG5vIHdheSBhcm91bmQgaXQuXG5cbkxldCdzIGNvbmZpcm0gdGhlIHR5cGUgb2YgYGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKWAgaXMgYHU2NGAuXG5cbmBgYGNcbnU2NCBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKHZvaWQpXG5gYGBcblxuR29vZC5cblxuTGV0J3MgcmV2aWV3IHRoZSBLTVNBTiBydWxlczogVGhlIHBhdGNoIG1vZGlmaWVkIGluaXRpYWxpemF0aW9uIG9mIGEgY29tcGxleCBkYXRhIHN0cnVjdHVyZSAoYGRhbW9zX3F1b3RhX2dvYWxgKSB3aGVyZVxuXG4iLCJJbnB1dFRva2VucyI6MzA3OTAsIk91dHB1dFRva2VucyI6MzAwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0NToyOS4xMzQ1MTU0NzhaIiwiU2VxIjo3OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGJ1ZyB3aGVyZSB0aGUgYGxhc3RfcHNpX3RvdGFsYCBmaWVsZCBpbiBgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWxgIGlzIGxlZnQgdW5pbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24uIFRoZSBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHVzaW5nIGBrbWFsbG9jX29iaigpYCAod2hpY2ggbWFwcyB0byBga21hbGxvY2AgYW5kIGRvZXMgbm90IHplcm8gbWVtb3J5KSBpbiBgZGFtb3NfbmV3X3F1b3RhX2dvYWwoKWAsIGJ1dCBgbGFzdF9wc2lfdG90YWxgIHdhcyBub3QgaW5pdGlhbGl6ZWQuIER1cmluZyB0aGUgZmlyc3QgZXZhbHVhdGlvbiBjeWNsZSwgYGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoKWAgcmVhZHMgdGhpcyB1bmluaXRpYWxpemVkIGZpZWxkIHRvIGNvbXB1dGUgYGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBub3dfcHNpX3RvdGFsIC0gZ29hbC1cXHUwMDNlbGFzdF9wc2lfdG90YWw7YC4gVGhpcyB1bmluaXRpYWxpemVkIHJlc3VsdCBpcyBzdWJzZXF1ZW50bHkgdXNlZCBpbiBhIGNvbmRpdGlvbmFsIGJyYW5jaCAodmlhIHRoZSBgbWF4KClgIG1hY3JvKSBpbiBgZGFtb3NfcXVvdGFfc2NvcmUoKWAgdG8gZGV0ZXJtaW5lIHRoZSBoaWdoZXN0IHF1b3RhIHNjb3JlLCB3aGljaCBkaWN0YXRlcyBtZW1vcnkgcmVjbGFpbSBiZWhhdmlvci5cXG5cXG5TdGFuZGFyZCBLQVNBTiBvbmx5IGRldGVjdHMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWUgYnVnczsgaXQgZG9lcyBub3QgdHJhY2sgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIHdvdWxkIGNvbXBsZXRlbHkgbWlzcyB0aGlzIGJ1Zy4gS01TQU4sIG9uIHRoZSBvdGhlciBoYW5kLCB0cmFja3MgdW5pbml0aWFsaXplZCBtZW1vcnkgYXQgdGhlIGJpdCBsZXZlbCBhbmQgd2lsbCByZWxpYWJseSBmbGFnIHRoZSB1c2Ugb2YgdGhlIHVuaW5pdGlhbGl6ZWQgdmFsdWUgd2hlbiBpdCBhZmZlY3RzIGNvbnRyb2wgZmxvdyAoZS5nLiwgaW4gdGhlIGBtYXgoKWAgY29tcGFyaXNvbikuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBoaWdobHkganVzdGlmaWVkIHRvIGNhdGNoIHRoaXMgYW5kIHNpbWlsYXIgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGluIHRoZSBEQU1PTiBzdWJzeXN0ZW0uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBidWcgd2hlcmUgdGhlIGBsYXN0X3BzaV90b3RhbGAgZmllbGQgaW4gYHN0cnVjdCBkYW1vc19xdW90YV9nb2FsYCBpcyBsZWZ0IHVuaW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uLiBUaGUgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB1c2luZyBga21hbGxvY19vYmooKWAgKHdoaWNoIG1hcHMgdG8gYGttYWxsb2NgIGFuZCBkb2VzIG5vdCB6ZXJvIG1lbW9yeSkgaW4gYGRhbW9zX25ld19xdW90YV9nb2FsKClgLCBidXQgYGxhc3RfcHNpX3RvdGFsYCB3YXMgbm90IGluaXRpYWxpemVkLiBEdXJpbmcgdGhlIGZpcnN0IGV2YWx1YXRpb24gY3ljbGUsIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKClgIHJlYWRzIHRoaXMgdW5pbml0aWFsaXplZCBmaWVsZCB0byBjb21wdXRlIGBnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gbm93X3BzaV90b3RhbCAtIGdvYWwtXFx1MDAzZWxhc3RfcHNpX3RvdGFsO2AuIFRoaXMgdW5pbml0aWFsaXplZCByZXN1bHQgaXMgc3Vic2VxdWVudGx5IHVzZWQgaW4gYSBjb25kaXRpb25hbCBicmFuY2ggKHZpYSB0aGUgYG1heCgpYCBtYWNybykgaW4gYGRhbW9zX3F1b3RhX3Njb3JlKClgIHRvIGRldGVybWluZSB0aGUgaGlnaGVzdCBxdW90YSBzY29yZSwgd2hpY2ggZGljdGF0ZXMgbWVtb3J5IHJlY2xhaW0gYmVoYXZpb3IuXFxuXFxuU3RhbmRhcmQgS0FTQU4gb25seSBkZXRlY3RzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3M7IGl0IGRvZXMgbm90IHRyYWNrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCB3b3VsZCBjb21wbGV0ZWx5IG1pc3MgdGhpcyBidWcuIEtNU0FOLCBvbiB0aGUgb3RoZXIgaGFuZCwgdHJhY2tzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGF0IHRoZSBiaXQgbGV2ZWwgYW5kIHdpbGwgcmVsaWFibHkgZmxhZyB0aGUgdXNlIG9mIHRoZSB1bmluaXRpYWxpemVkIHZhbHVlIHdoZW4gaXQgYWZmZWN0cyBjb250cm9sIGZsb3cgKGUuZy4sIGluIHRoZSBgbWF4KClgIGNvbXBhcmlzb24pLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgaGlnaGx5IGp1c3RpZmllZCB0byBjYXRjaCB0aGlzIGFuZCBzaW1pbGFyIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBpbiB0aGUgREFNT04gc3Vic3lzdGVtLlwiLFxuICBcIk5lZWRzS01TQU5cIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowz4j2t[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-27 04:40:35 +0000 UTC FinishedAt: 2026-08-27 04:45:31 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS" ], "series_id": "b6f5cc47-9651-4223-a739-e2141668ed75" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damos_commit_quota_goals", "damos_sysfs_set_quota_scores" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA0OjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzJiMzNDssCiAgICAmIzM0O2RhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBidWcgd2hlcmUgdGhlIGBsYXN0X3BzaV90b3RhbGAgZmllbGQgaW4gYHN0cnVjdCBkYW1vc19xdW90YV9nb2FsYCBpcyBsZWZ0IHVuaW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uLiBUaGUgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB1c2luZyBga21hbGxvY19vYmooKWAgKHdoaWNoIG1hcHMgdG8gYGttYWxsb2NgIGFuZCBkb2VzIG5vdCB6ZXJvIG1lbW9yeSkgaW4gYGRhbW9zX25ld19xdW90YV9nb2FsKClgLCBidXQgYGxhc3RfcHNpX3RvdGFsYCB3YXMgbm90IGluaXRpYWxpemVkLiBEdXJpbmcgdGhlIGZpcnN0IGV2YWx1YXRpb24gY3ljbGUsIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKClgIHJlYWRzIHRoaXMgdW5pbml0aWFsaXplZCBmaWVsZCB0byBjb21wdXRlIGBnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBub3dfcHNpX3RvdGFsIC0gZ29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbDtgLiBUaGlzIHVuaW5pdGlhbGl6ZWQgcmVzdWx0IGlzIHN1YnNlcXVlbnRseSB1c2VkIGluIGEgY29uZGl0aW9uYWwgYnJhbmNoICh2aWEgdGhlIGBtYXgoKWAgbWFjcm8pIGluIGBkYW1vc19xdW90YV9zY29yZSgpYCB0byBkZXRlcm1pbmUgdGhlIGhpZ2hlc3QgcXVvdGEgc2NvcmUsIHdoaWNoIGRpY3RhdGVzIG1lbW9yeSByZWNsYWltIGJlaGF2aW9yLlxuXG5TdGFuZGFyZCBLQVNBTiBvbmx5IGRldGVjdHMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWUgYnVnczsgaXQgZG9lcyBub3QgdHJhY2sgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIHdvdWxkIGNvbXBsZXRlbHkgbWlzcyB0aGlzIGJ1Zy4gS01TQU4sIG9uIHRoZSBvdGhlciBoYW5kLCB0cmFja3MgdW5pbml0aWFsaXplZCBtZW1vcnkgYXQgdGhlIGJpdCBsZXZlbCBhbmQgd2lsbCByZWxpYWJseSBmbGFnIHRoZSB1c2Ugb2YgdGhlIHVuaW5pdGlhbGl6ZWQgdmFsdWUgd2hlbiBpdCBhZmZlY3RzIGNvbnRyb2wgZmxvdyAoZS5nLiwgaW4gdGhlIGBtYXgoKWAgY29tcGFyaXNvbikuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBoaWdobHkganVzdGlmaWVkIHRvIGNhdGNoIHRoaXMgYW5kIHNpbWlsYXIgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGluIHRoZSBEQU1PTiBzdWJzeXN0ZW0uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IHRydWUsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgREFNT04gbG9naWMgdG8gcHJvcGVybHkgaW5pdGlhbGl6ZSBhbmQgY29tbWl0IHRoZSBgbGFzdF9wc2lfdG90YWxgIGZvciB0aGUgYERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AgcXVvdGEgbWV0cmljLiBJdCBhbHNvIGZpeGVzIHRoZSBgbmV4dF9yZWZyZXNoX2ppZmZpZXNgIGhhbmRsaW5nIGluIERBTU9OIHN5c2ZzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzeXNmcywgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQxNmRlYWU4Y2E4MzA1M2M2OWVkODNlYjA0YmZmZThkOWEzNGIyODVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyNyAwNDo0MTo1NyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDY0NGRhZjVhMTY1NjAuLjZmMzYwZDYxMzkwYWQgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTExMjIsNiAmIzQzOzExMjIsOSBAQCBzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihcbiBcdFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKnNyYylcbiB7XG4gXHRzd2l0Y2ggKGRzdC1cdTAwM2VtZXRyaWMpIHtcbiYjNDM7XHRjYXNlIERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUzpcbiYjNDM7XHRcdGRzdC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKTtcbiYjNDM7XHRcdGJyZWFrO1xuIFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQOlxuIFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9GUkVFX0JQOlxuIFx0XHRkc3QtXHUwMDNlbmlkID0gc3JjLVx1MDAzZW5pZDtcbkBAIC0xMTQzLDcgJiM0MzsxMTQ2LDYgQEAgc3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoXG4gXHRkc3QtXHUwMDNldGFyZ2V0X3ZhbHVlID0gc3JjLVx1MDAzZXRhcmdldF92YWx1ZTtcbiBcdGlmIChkc3QtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX1VTRVJfSU5QVVQpXG4gXHRcdGRzdC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gc3JjLVx1MDAzZWN1cnJlbnRfdmFsdWU7XG4tXHQvKiBrZWVwIGxhc3RfcHNpX3RvdGFsIGFzIGlzLCBzaW5jZSBpdCB3aWxsIGJlIHVwZGF0ZWQgaW4gbmV4dCBjeWNsZSAqL1xuIFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oZHN0LCBzcmMpO1xuIH1cbiBcbkBAIC0zNzI3LDYgJiM0MzszNzI5LDE3IEBAIHN0YXRpYyBpbnQga2RhbW9uZF93YWl0X2FjdGl2YXRpb24oc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuIFx0cmV0dXJuIC1FQlVTWTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGRhbW9zX2luaXRfcXVvdGFfZ29hbF9sYXN0X3BzaShzdHJ1Y3QgZGFtb3MgKnMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcbiYjNDM7XG4mIzQzO1x0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbChnb2FsLCBcdTAwMjZzLVx1MDAzZXF1b3RhKSB7XG4mIzQzO1x0XHRpZiAoZ29hbC1cdTAwM2VtZXRyaWMgIT0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWwgPSBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKCk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGtkYW1vbmRfaW5pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgc2FtcGxlX2ludGVydmFsID0gY3R4LVx1MDAzZWF0dHJzLnNhbXBsZV9pbnRlcnZhbCA/XG5AQCAtMzc0Myw2ICYjNDM7Mzc1Niw3IEBAIHN0YXRpYyB2b2lkIGtkYW1vbmRfaW5pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuIFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHNjaGVtZSwgY3R4KSB7XG4gXHRcdGRhbW9zX3NldF9uZXh0X2FwcGx5X3NpcyhzY2hlbWUsIGN0eCk7XG4gXHRcdGRhbW9zX3NldF9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0KHNjaGVtZSk7XG4mIzQzO1x0XHRkYW1vc19pbml0X3F1b3RhX2dvYWxfbGFzdF9wc2koc2NoZW1lKTtcbiBcdH1cbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMuYyBiL21tL2RhbW9uL3N5c2ZzLmNcbmluZGV4IGUzODU4ZmZhYjRiMjIuLmYwNWIyNTZjOTBlZTcgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9zeXNmcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9zeXNmcy5jXG5AQCAtMTc4OSw2ICYjNDM7MTc4OSw3IEBAIHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kIHtcbiBcdHN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0cyAqY29udGV4dHM7XG4gXHRzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9jdHg7XG4gXHR1bnNpZ25lZCBpbnQgcmVmcmVzaF9tcztcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5leHRfcmVmcmVzaF9qaWZmaWVzO1xuIH07XG4gXG4gc3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICpkYW1vbl9zeXNmc19rZGFtb25kX2FsbG9jKHZvaWQpXG5AQCAtMjIxNSwxNyAmIzQzOzIyMTYsMTUgQEAgc3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3N5c2ZzX2J1aWxkX2N0eChcbiBcdHJldHVybiBjdHg7XG4gfVxuIFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXM7XG4tXG4gc3RhdGljIGludCBkYW1vbl9zeXNmc19yZXBlYXRfY2FsbF9mbih2b2lkICpkYXRhKVxuIHtcbiBcdHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICpzeXNmc19rZGFtb25kID0gZGF0YTtcbiBcbiBcdGlmICghc3lzZnNfa2RhbW9uZC1cdTAwM2VyZWZyZXNoX21zKVxuIFx0XHRyZXR1cm4gMDtcbi1cdGlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBkYW1vbl9zeXNmc19uZXh0X3VwZGF0ZV9qaWZmaWVzKSlcbiYjNDM7XHRpZiAodGltZV9iZWZvcmUoamlmZmllcywgc3lzZnNfa2RhbW9uZC1cdTAwM2VuZXh0X3JlZnJlc2hfamlmZmllcykpXG4gXHRcdHJldHVybiAwO1xuLVx0ZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllcyA9IGppZmZpZXMgJiM0MztcbiYjNDM7XHRzeXNmc19rZGFtb25kLVx1MDAzZW5leHRfcmVmcmVzaF9qaWZmaWVzID0gamlmZmllcyAmIzQzO1xuIFx0XHRtc2Vjc190b19qaWZmaWVzKHN5c2ZzX2tkYW1vbmQtXHUwMDNlcmVmcmVzaF9tcyk7XG4gXG4gXHRpZiAoIW11dGV4X3RyeWxvY2soXHUwMDI2ZGFtb25fc3lzZnNfbG9jaykpXG5AQCAtMjI3Myw4ICYjNDM7MjI3Miw4IEBAIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcbiBcdH1cbiBcdGtkYW1vbmQtXHUwMDNlZGFtb25fY3R4ID0gY3R4O1xuIFxuLVx0ZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllcyA9XG4tXHRcdGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhrZGFtb25kLVx1MDAzZXJlZnJlc2hfbXMpO1xuJiM0MztcdGtkYW1vbmQtXHUwMDNlbmV4dF9yZWZyZXNoX2ppZmZpZXMgPSBqaWZmaWVzICYjNDM7XG4mIzQzO1x0XHRtc2Vjc190b19qaWZmaWVzKGtkYW1vbmQtXHUwMDNlcmVmcmVzaF9tcyk7XG4gXG4gXHRyZXBlYXRfY2FsbF9jb250cm9sLVx1MDAzZWZuID0gZGFtb25fc3lzZnNfcmVwZWF0X2NhbGxfZm47XG4gXHRyZXBlYXRfY2FsbF9jb250cm9sLVx1MDAzZWRhdGEgPSBrZGFtb25kO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA0OjQyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9zX2NvbW1pdF9xdW90YV9nb2FscyYjMzQ7LAogICAgJiMzNDtkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIERBTU9OIGxvZ2ljIHRvIHByb3Blcmx5IGluaXRpYWxpemUgYW5kIGNvbW1pdCB0aGUgYGxhc3RfcHNpX3RvdGFsYCBmb3IgdGhlIGBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVNgIHF1b3RhIG1ldHJpYy4gSXQgYWxzbyBmaXhlcyB0aGUgYG5leHRfcmVmcmVzaF9qaWZmaWVzYCBoYW5kbGluZyBpbiBEQU1PTiBzeXNmcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3lzZnMsIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkMTZkZWFlOGNhODMwNTNjNjllZDgzZWIwNGJmZmU4ZDlhMzRiMjg1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMjcgMDQ6NDE6NTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmMKaW5kZXggNjQ0ZGFmNWExNjU2MC4uNmYzNjBkNjEzOTBhZCAxMDA2NDQKLS0tIGEvbW0vZGFtb24vY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuYwpAQCAtMTEyMiw2ICYjNDM7MTEyMiw5IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKAogCQlzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqc3JjKQogewogCXN3aXRjaCAoZHN0LSZndDttZXRyaWMpIHsKJiM0MzsJY2FzZSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVM6CiYjNDM7CQlkc3QtJmd0O2xhc3RfcHNpX3RvdGFsID0gZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpOwomIzQzOwkJYnJlYWs7CiAJY2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQOgogCWNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUDoKIAkJZHN0LSZndDtuaWQgPSBzcmMtJmd0O25pZDsKQEAgLTExNDMsNyAmIzQzOzExNDYsNiBAQCBzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbCgKIAlkc3QtJmd0O3RhcmdldF92YWx1ZSA9IHNyYy0mZ3Q7dGFyZ2V0X3ZhbHVlOwogCWlmIChkc3QtJmd0O21ldHJpYyA9PSBEQU1PU19RVU9UQV9VU0VSX0lOUFVUKQogCQlkc3QtJmd0O2N1cnJlbnRfdmFsdWUgPSBzcmMtJmd0O2N1cnJlbnRfdmFsdWU7Ci0JLyoga2VlcCBsYXN0X3BzaV90b3RhbCBhcyBpcywgc2luY2UgaXQgd2lsbCBiZSB1cGRhdGVkIGluIG5leHQgY3ljbGUgKi8KIAlkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihkc3QsIHNyYyk7CiB9CiAKQEAgLTM3MjcsNiAmIzQzOzM3MjksMTcgQEAgc3RhdGljIGludCBrZGFtb25kX3dhaXRfYWN0aXZhdGlvbihzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpCiAJcmV0dXJuIC1FQlVTWTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGRhbW9zX2luaXRfcXVvdGFfZ29hbF9sYXN0X3BzaShzdHJ1Y3QgZGFtb3MgKnMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDsKJiM0MzsKJiM0MzsJZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbChnb2FsLCAmYW1wO3MtJmd0O3F1b3RhKSB7CiYjNDM7CQlpZiAoZ29hbC0mZ3Q7bWV0cmljICE9IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUykKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWdvYWwtJmd0O2xhc3RfcHNpX3RvdGFsID0gZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpOwomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQga2RhbW9uZF9pbml0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpCiB7CiAJdW5zaWduZWQgbG9uZyBzYW1wbGVfaW50ZXJ2YWwgPSBjdHgtJmd0O2F0dHJzLnNhbXBsZV9pbnRlcnZhbCA/CkBAIC0zNzQzLDYgJiM0MzszNzU2LDcgQEAgc3RhdGljIHZvaWQga2RhbW9uZF9pbml0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpCiAJZGFtb25fZm9yX2VhY2hfc2NoZW1lKHNjaGVtZSwgY3R4KSB7CiAJCWRhbW9zX3NldF9uZXh0X2FwcGx5X3NpcyhzY2hlbWUsIGN0eCk7CiAJCWRhbW9zX3NldF9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0KHNjaGVtZSk7CiYjNDM7CQlkYW1vc19pbml0X3F1b3RhX2dvYWxfbGFzdF9wc2koc2NoZW1lKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLmMgYi9tbS9kYW1vbi9zeXNmcy5jCmluZGV4IGUzODU4ZmZhYjRiMjIuLmYwNWIyNTZjOTBlZTcgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3N5c2ZzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vc3lzZnMuYwpAQCAtMTc4OSw2ICYjNDM7MTc4OSw3IEBAIHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kIHsKIAlzdHJ1Y3QgZGFtb25fc3lzZnNfY29udGV4dHMgKmNvbnRleHRzOwogCXN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX2N0eDsKIAl1bnNpZ25lZCBpbnQgcmVmcmVzaF9tczsKJiM0MzsJdW5zaWduZWQgbG9uZyBuZXh0X3JlZnJlc2hfamlmZmllczsKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqZGFtb25fc3lzZnNfa2RhbW9uZF9hbGxvYyh2b2lkKQpAQCAtMjIxNSwxNyAmIzQzOzIyMTYsMTUgQEAgc3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3N5c2ZzX2J1aWxkX2N0eCgKIAlyZXR1cm4gY3R4OwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9zeXNmc19uZXh0X3VwZGF0ZV9qaWZmaWVzOwotCiBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3JlcGVhdF9jYWxsX2ZuKHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKnN5c2ZzX2tkYW1vbmQgPSBkYXRhOwogCiAJaWYgKCFzeXNmc19rZGFtb25kLSZndDtyZWZyZXNoX21zKQogCQlyZXR1cm4gMDsKLQlpZiAodGltZV9iZWZvcmUoamlmZmllcywgZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllcykpCiYjNDM7CWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBzeXNmc19rZGFtb25kLSZndDtuZXh0X3JlZnJlc2hfamlmZmllcykpCiAJCXJldHVybiAwOwotCWRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXMgPSBqaWZmaWVzICYjNDM7CiYjNDM7CXN5c2ZzX2tkYW1vbmQtJmd0O25leHRfcmVmcmVzaF9qaWZmaWVzID0gamlmZmllcyAmIzQzOwogCQltc2Vjc190b19qaWZmaWVzKHN5c2ZzX2tkYW1vbmQtJmd0O3JlZnJlc2hfbXMpOwogCiAJaWYgKCFtdXRleF90cnlsb2NrKCZhbXA7ZGFtb25fc3lzZnNfbG9jaykpCkBAIC0yMjczLDggJiM0MzsyMjcyLDggQEAgc3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKQogCX0KIAlrZGFtb25kLSZndDtkYW1vbl9jdHggPSBjdHg7CiAKLQlkYW1vbl9zeXNmc19uZXh0X3VwZGF0ZV9qaWZmaWVzID0KLQkJamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKGtkYW1vbmQtJmd0O3JlZnJlc2hfbXMpOwomIzQzOwlrZGFtb25kLSZndDtuZXh0X3JlZnJlc2hfamlmZmllcyA9IGppZmZpZXMgJiM0MzsKJiM0MzsJCW1zZWNzX3RvX2ppZmZpZXMoa2RhbW9uZC0mZ3Q7cmVmcmVzaF9tcyk7CiAKIAlyZXBlYXRfY2FsbF9jb250cm9sLSZndDtmbiA9IGRhbW9uX3N5c2ZzX3JlcGVhdF9jYWxsX2ZuOwogCXJlcGVhdF9jYWxsX2NvbnRyb2wtJmd0O2RhdGEgPSBrZGFtb25kOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTE1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRBTU9OIFBhdGNoIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIG5ldyBwYXRjaCBoZXJlIG1vZGlmeWluZyBgbW0vZGFtb24vY29yZS5jYCBhbmQgYG1tL2RhbW9uL3N5c2ZzLmNgLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBwcmltYXJ5IGZpeCBzZWVtcyB0byBiZSBpbiBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb25gLCBzcGVjaWZpY2FsbHkgaW5pdGlhbGl6aW5nIGBsYXN0X3BzaV90b3RhbGAgY29ycmVjdGx5IGZvciB0aGUgYERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AgY2FzZS4gR29vZCwgdGhhdCBsaWtlbHkgcmVzb2x2ZXMgYSBzdWJ0bGUgcmFjZSBjb25kaXRpb24gb3IgY2FsY3VsYXRpb24gZXJyb3IgcmVsYXRlZCB0byBtZW1vcnkgcXVvdGEgdHJhY2tpbmcgd2l0aCBQZXJmb3JtYW5jZSBTdGF0ZSBJbmZvcm1hdGlvbiAoUFNJKS4gVGhlIGFkZGl0aW9uIG9mIGBkYW1vc19pbml0X3F1b3RhX2dvYWxfbGFzdF9wc2lgIGNhbGxlZCBmcm9tIGBrZGFtb25kX2luaXRfY3R4YCBsb29rcyBsaWtlIGEgY29tcGFuaW9uIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLCBlbnN1cmluZyBwcm9wZXIgc3RhdGUgc2V0dXAuIFN0YW5kYXJkIHN0dWZmLCBidXQgaW1wb3J0YW50IHRvIGNhdGNoLgoKTm93LCB0aGUgYG1tL2RhbW9uL3N5c2ZzLmNgIGNoYW5nZSBpcyBpbnRlcmVzdGluZy4gVGhleSYjMzk7dmUgbW92ZWQgYGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXNgIGZyb20gYSBnbG9iYWwgdG8gYSBwZXIta2RhbW9uZCB2YXJpYWJsZSBuYW1lZCBgbmV4dF9yZWZyZXNoX2ppZmZpZXNgLiBUaGF0JiMzOTtzIGEgbmljZSBpbXByb3ZlbWVudCBmb3IgY29uZmlndXJhYmlsaXR5IGFuZCBwb3RlbnRpYWwgY29uY3VycmVuY3kuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYSByZWZyZXNoIHRpbWUgZm9yIHRoZSBzeXN0ZW0gZmlsZSBpbnRlcmZhY2UgKHN5c2ZzKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIGJ1Z2ZpeCwgaW4gREFNT04sIHdoaWNoIGlzIGEgY29yZSBrZXJuZWwgY29tcG9uZW50LgoKSSBzaG91bGQgcHJvYmFibHkgcmV2aWV3IHRoZSBjb25maWcgb3B0aW9ucyBmb3IgREFNT04gdG8gdW5kZXJzdGFuZCBpZiBhbnl0aGluZyBpbiB0aGF0IGFyZWEgaGFzIGNoYW5nZWQsIG9yIGlmIHRoZXJlIGlzIG5ldyBmdW5jdGlvbmFsaXR5IGludm9sdmVkLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA0OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBEQU1PTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXCYjMzQ7RGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1wmIzM0O1xubW0vZGFtb24vS2NvbmZpZy00LVxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy02LVx0Ym9vbCBcJiMzNDtEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXG5tbS9kYW1vbi9LY29uZmlnLTE2LVx0Ym9vbCBcJiMzNDtDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMjUtXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTI3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vblwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy0zNy1cbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXG5tbS9kYW1vbi9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctNDgtXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy02Ny1cbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXG5tbS9kYW1vbi9LY29uZmlnLTY5LVx0Ym9vbCBcJiMzNDtEQU1PTiBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy03Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxubW0vZGFtb24vS2NvbmZpZy04OS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTA3LVxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcbm1tL2RhbW9uL0tjb25maWctMTA5LVx0Ym9vbCBcJiMzNDtCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMTUtXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcbm1tL2RhbW9uL0tjb25maWctMTE3LVx0Ym9vbCBcJiMzNDtFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM5NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgY29uZmlnIG9wdGlvbnMgYW5kIGZ1bmN0aW9ucywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBEQU1PTiBDb25maWd1cmF0aW9uIGFuZCBJbml0aWFsaXphdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgb24gbXkgbWluZCwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIGRlZmluaXRlbHkgdGhlIERBTU9OIGNvbmZpZ3VyYXRpb25zOiBgREFNT05gIGFuZCBgREFNT05fU1lTRlNgLiBUaGVzZSBhcmUgdGhlIGZvdW5kYXRpb25hbCBzZXR0aW5ncy4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZywgJiMzNDtBcmUgYm90aCBvZiB0aGVzZSBlbmFibGVkPyBXaGF0JiMzOTtzIHRoZSBpbXBhY3Qgb2Ygb25lIGJlaW5nIGVuYWJsZWQgd2l0aG91dCB0aGUgb3RoZXI/JiMzNDsgSXQmIzM5O3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgREFNT04gaXMgYWN0dWFsbHkgb3BlcmF0aW5nIGF0IHRoZSBzeXN0ZW0gbGV2ZWwsIGFuZCB0aGF0IGhlbHBzIGluZm9ybSBwZXJmb3JtYW5jZSB0d2Vha3MuCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gdGhlIGtlcm5lbCBjb2RlOyBJIG5lZWQgdG8gbG9vayBhdCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGhpbiBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb25gIGFuZCBgZGFtb3NfaW5pdF9xdW90YV9nb2FsX2xhc3RfcHNpYC4gTXkgZ3V0IHJlYWN0aW9uIGlzIHRoYXQgdGhleSYjMzk7cmUgcmVsYXRlZCB0byBoYW5kbGluZyBxdW90YSBnb2FscywgYnV0IHRoZSBzcGVjaWZpYyBtZWNoYW5pY3MgYXJlIHdoYXQmIzM5O3MgaW1wb3J0YW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZDoKCiogICAqKmBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbmAqKjogU3BlY2lmaWNhbGx5LCBob3cgYW5kIHdoZW4gdGhpcyBpcyBpbnZva2VkLiBEb2VzIGl0IGdldCB0cmlnZ2VyZWQgb24gYW55IHNvcnQgb2YgZXZlbnQsIG9yIGlzIGl0IHBlcmlvZGljPyBXaGF0JiMzOTtzIHRoZSBjb250ZXh04oCUYXJlIHdlIHRhbGtpbmcgYWJvdXQgcGVyLXByb2Nlc3MgcXVvdGEsIHN5c3RlbS13aWRlLCBvciBzb21ldGhpbmcgbW9yZSBncmFudWxhcj8gSSYjMzk7bSBiZXR0aW5nIHRoaXMgaXMgd2hlcmUgY2hhbmdlcyB0byBxdW90YSBnb2FscyBhcmUgYWN0dWFsbHkgYXBwbGllZCwgZWl0aGVyIGltbWVkaWF0ZWx5IG9yIGRlZmVycmVkLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBpZiBpdCBpbnZvbHZlcyBhbnkgbG9ja2luZyBtZWNoYW5pc21zLCBhbmQgdGhlIGltcGFjdCBvbiB0aGUgc3lzdGVtLgoqICAgKipgZGFtb3NfaW5pdF9xdW90YV9nb2FsX2xhc3RfcHNpYCoqOiBUaGlzIGhhcyB0aGUgZGlzdGluY3Qgc21lbGwgb2YgaW5pdGlhbGl6YXRpb24uICYjMzQ7TGFzdCBQU0kmIzM0OyBzdWdnZXN0cyBpdCYjMzk7cyBsaWtlbHkgaW52b2x2ZWQgd2l0aCBtb25pdG9yaW5nIG9yIHRyYWNraW5nIHNvbWUgZm9ybSBvZiBQZXJmb3JtYW5jZSBTdGF0ZSBJbmZvcm1hdGlvbiAoUFNJKS4gVGhlICYjMzQ7cXVvdGEgZ29hbCYjMzQ7IHBhcnQgaGludHMgYXQgaXQgcmVsYXRlZCB0byBxdW90YSBlbmZvcmNlbWVudC4gTXkgd29ya2luZyBoeXBvdGhlc2lzIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiBtaWdodCBoYW5kbGUgZWl0aGVyIHRoZSBpbml0aWFsIHNldHVwIG9mIHF1b3RhIGxpbWl0cyByZWxhdGVkIHRvIHBlcmZvcm1hbmNlIG9yIGl0IG1pZ2h0IGluaXRpYWxpemUgYSBzdHJ1Y3R1cmUgdGhhdCB0cmFja3MgdGhlIGdvYWxzLiBJIGhhdmUgdG8gc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBEQU1PTiBjb21wb25lbnRzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGZ1bmN0aW9uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB3aGVyZSB0aGlzIGlzIGNhbGxlZCwgYW5kIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGl0IG1hbmlwdWxhdGVzLiBIb3cgaXMgdGhpcyAmIzM0O2xhc3QgUFNJJiMzNDsgdmFsdWUgdXNlZCBsYXRlciBvbiBpbiBkZWNpc2lvbi1tYWtpbmc/CgpFc3NlbnRpYWxseSwgSSBuZWVkIHRvIHNlZSBob3cgdGhlc2UgdHdvIHBpZWNlcyBmaXQgdG9nZXRoZXIgYW5kIHJlbGF0ZSB0byB0aGUgREFNT04gY29yZS4gQXJlIHRoZXkgaW52b2x2ZWQgaW4gZ29hbCBzZXR0aW5nLCBlbmZvcmNlbWVudCwgYWRhcHRhdGlvbiwgb3Igc29tZSBjb21iaW5hdGlvbiBvZiB0aGUgYWJvdmU/IExldCYjMzk7cyBnZXQgdG8gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTExMDg9c3RhdGljIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19udGhfcXVvdGFfZ29hbChcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTEyMC1cbm1tL2RhbW9uL2NvcmUuYzoxMTIxOnN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKFxubW0vZGFtb24vY29yZS5jLTExMjItXHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jPTExNDI9c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoXG4tLVxubW0vZGFtb24vY29yZS5jLTExNDgtXHRcdGRzdC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gc3JjLVx1MDAzZWN1cnJlbnRfdmFsdWU7XG5tbS9kYW1vbi9jb3JlLmM6MTE0OTpcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKGRzdCwgc3JjKTtcbm1tL2RhbW9uL2NvcmUuYy0xMTUwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjA1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBtb2RpZmljYXRpb25zLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOgoKKipNeSBQZXJzcGVjdGl2ZSBvbiB0aGUgYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gIE1vZGlmaWNhdGlvbioqCgpBbHJpZ2h0LCBzbyBJIHNlZSB0aGV5JiMzOTt2ZSBiZWVuIG1lc3Npbmcgd2l0aCBgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbmAuIEZyb20gdGhlIG5hbWUgYWxvbmUsIEkgY2FuIGd1ZXNzIHRoaXMgaXMgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBhY3R1YWxseSAqYWN0aXZhdGluZyogYSBEQU1PTiBtb25pdG9yIHRocm91Z2ggdGhlIHN5c2ZzIGludGVyZmFjZS4gVGhhdCYjMzk7cyBhIGNyaXRpY2FsIHBpZWNlLCB0aGUgcG9pbnQgb2Ygbm8gcmV0dXJuIHNvIHRvIHNwZWFrLiBJZiB0aGlzIGlzIHdoZXJlIHRoZXkmIzM5O3JlIGNoYW5naW5nIHRoaW5ncywgaXQgbWVhbnMgdGhleSBhcmUgdHJ5aW5nIHRvIGluZmx1ZW5jZSBob3cgYSBEQU1PTiBtb25pdG9yIGNvbWVzIG9ubGluZSBhbmQgc2V0cyBpdHNlbGYgdXAuIAoKSSBpbW1lZGlhdGVseSBzdGFydCB0aGlua2luZyBhYm91dCBhIGZldyB0aGluZ3M6CgoqICAgKipBY3RpdmF0aW9uIFRyaWdnZXJzKio6IEFyZSB0aGV5IGNoYW5naW5nICpob3cqIHRoZSBtb25pdG9yIGlzIHRyaWdnZXJlZD8gSXMgaXQgc3RpbGwgYSBzaW1wbGUgJiMzOTtlY2hvIDEgJmd0OyBlbmFibGUmIzM5Oz8gT3IgYXJlIHRoZXkgaW50cm9kdWNpbmcgc29tZSBtb3JlIG51YW5jZWQgYWN0aXZhdGlvbiBjcml0ZXJpYSwgcGVyaGFwcyBiYXNlZCBvbiByZXNvdXJjZSBhdmFpbGFiaWxpdHksIGxvYWQsIG9yIHNvbWUgb3RoZXIgc3lzdGVtIGNvbmRpdGlvbj8gTWF5YmUgc29tZSBjb25maWd1cmF0aW9uIGluIHRoZSBzeXNmcyBub2RlIGhhcyB0byBiZSBjb3JyZWN0LgoqICAgKipJbml0aWFsaXphdGlvbioqOiBCZXlvbmQgdHVybmluZyBpdCBvbiwgd2hhdCBkb2VzIHRoZSBmdW5jdGlvbiAqZG8qIGR1cmluZyBpbml0aWFsaXphdGlvbj8gRG9lcyBpdCBhbGxvY2F0ZSBtZW1vcnksIHJlZ2lzdGVyIHRoZSBtb25pdG9yIHdpdGggdGhlIGNvcmUgREFNT04gaW5mcmFzdHJ1Y3R1cmUsIGNvbmZpZ3VyZSBhbnkgZGVmYXVsdCBwYXJhbWV0ZXJzPyBBbnkgY2hhbmdlcyBoZXJlIGFyZSBnb2luZyB0byBoYXZlIGEgYmlnIGltcGFjdCBvbiBob3cgcGVyZm9ybWFudCB0aGUgbW9uaXRvciB3aWxsIGJlIGFzIHdlbGwgYXMgdGhlIG51bWJlciBvZiBhdmFpbGFibGUgbW9uaXRvcnMuCiogICAqKkVycm9yIEhhbmRsaW5nKio6IEFyZSB0aGV5IGltcHJvdmluZyB0aGUgZXJyb3IgaGFuZGxpbmcgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyB3cm9uZyBkdXJpbmcgYWN0aXZhdGlvbj8gSWYgdGhlIG1vbml0b3IgZmFpbHMgdG8gaW5pdGlhbGl6ZSwgZG9lcyBpdCBwcm92aWRlIGhlbHBmdWwgZXJyb3IgbWVzc2FnZXMsIG9yIGp1c3Qgc2lsZW50bHkgZmFpbD8gSXQmIzM5O3MgYWx3YXlzIGNydWNpYWwgdG8gZmFpbCBncmFjZWZ1bGx5IGFuZCBwcm92aWRlIHNvbWUgZGVidWdnaW5nIGluZm9ybWF0aW9uLgoqICAgKipTZWN1cml0eSBDb25jZXJucyoqOiBJZiB0aGV5JiMzOTtyZSBhZGRpbmcgZXh0cmEgbGF5ZXJzIG9mIGFjdGl2YXRpb24sIEkmIzM5O20gbm93IGN1cmlvdXMgd2hldGhlciB0aGVyZSYjMzk7cyBzb21lIGNoYW5nZSBpbiB0aGUgc2VjdXJpdHkgY29udGV4dC4gQXJlIHdlIGdvaW5nIHRvIHNlZSBuZXcgcHJpdmlsZWdlcyBvciBwZXJtaXNzaW9ucyByZWxhdGVkIHRvIHN0YXJ0aW5nIGEgbW9uaXRvcj8KClVsdGltYXRlbHksIHdpdGhvdXQga25vd2luZyAqZXhhY3RseSogd2hhdCB3YXMgbW9kaWZpZWQsIHRoZXNlIGFyZSB0aGUgdHlwZXMgb2YgdGhpbmdzIEkmIzM5O2QgYmUgbG9va2luZyBmb3IgaW4gYSBjb2RlIHJldmlldyBvciBhIHBhdGNoIGRlc2NyaXB0aW9uLiBCZWNhdXNlIHRoaXMgZnVuY3Rpb24gaXMgdGhlIGdhdGV3YXkgdG8gbW9uaXRvcmluZywgYW55IG1vZGlmaWNhdGlvbiBoZXJlIG5lZWRzIHRvIGJlIHRob3JvdWdobHkgdmV0dGVkIHRvIGVuc3VyZSBEQU1PTiBjb250aW51ZXMgdG8gd29yayBlZmZpY2llbnRseSwgZWZmZWN0aXZlbHksIGFuZCBzYWZlbHkuIEkgd291bGQgbmVlZCB0byBkaWcgaW50byB0aGUgZGlmZnMgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLmM9MjIxOT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3JlcGVhdF9jYWxsX2ZuKHZvaWQgKmRhdGEpXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMjQxLVxubW0vZGFtb24vc3lzZnMuYzoyMjQyOnN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcbm1tL2RhbW9uL3N5c2ZzLmMtMjI0My17XG4tLVxubW0vZGFtb24vc3lzZnMuYz0yMjg3PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vZmYoc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMjk0LVx0ICogREFNT04sIHdlIGZyZWUga2RhbW9uZC1cdTAwM2VkYW1vbl9jdHggaW4gbmV4dFxubW0vZGFtb24vc3lzZnMuYzoyMjk1Olx0ICogZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbigpLCBvciBrZGFtb25kc19ucl9zdG9yZSgpXG5tbS9kYW1vbi9zeXNmcy5jLTIyOTYtXHQgKi9cbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIzNjM9c3RhdGljIGludCBkYW1vbl9zeXNmc19oYW5kbGVfY21kKGVudW0gZGFtb25fc3lzZnNfY21kIGNtZCxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIzNzAtXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9PTjpcbm1tL2RhbW9uL3N5c2ZzLmM6MjM3MTpcdFx0cmV0dXJuIGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oa2RhbW9uZCk7XG5tbS9kYW1vbi9zeXNmcy5jLTIzNzItXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9PRkY6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjEyNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFscmVhZHkgcXVpdGUgZmFtaWxpYXIgd2l0aCB0aGUgRGFtb24gc3lzdGVtIGFuZCBzeXNmczoKCioqRGl2aW5nIGludG8gdGhlIFN5c2ZzIENvbW1hbmQgSGFuZGxlcioqCgpBbHJpZ2h0LCBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBkYW1vbl9zeXNmc19oYW5kbGVfY21kYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyB0aGUgb25lIHRoYXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIGFsbCB0aGUgY29tbWFuZHMgY29taW5nIGluIHRocm91Z2ggdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSBzeXN0ZW0uIEl0JiMzOTtzIHRoZSBjZW50cmFsIHBvaW50IG9mIGNvbnRyb2wuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBpdCB3b3Jrcy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBob3cgaXQgcHJvY2Vzc2VzIHRob3NlIGluY29taW5nIGNvbW1hbmRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uJiMzOTtzIGxvZ2ljIGluc2lkZSBhbmQgb3V0IHRvIHRyb3VibGVzaG9vdCBlZmZlY3RpdmVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fc3lzZnNfaGFuZGxlX2NtZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy5jPTIzMzM9c3RhdGljIGludCBkYW1vbl9zeXNmc191cGRhdGVfc2NoZW1lc190cmllZF9yZWdpb25zKFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjM1NC0vKlxubW0vZGFtb24vc3lzZnMuYzoyMzU1OiAqIGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWQoKSAtIEhhbmRsZSBhIGNvbW1hbmQgZm9yIGEgc3BlY2lmaWMga2RhbW9uZC5cbm1tL2RhbW9uL3N5c2ZzLmMtMjM1Ni0gKiBAY21kOlx0VGhlIGNvbW1hbmQgdG8gaGFuZGxlLlxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjM2Mi0gKi9cbm1tL2RhbW9uL3N5c2ZzLmM6MjM2MzpzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWQoZW51bSBkYW1vbl9zeXNmc19jbWQgY21kLFxubW0vZGFtb24vc3lzZnMuYy0yMzY0LVx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTI0MDM9c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTI0MTQtXHRcdGlmIChzeXNmc19zdHJlcShidWYsIGRhbW9uX3N5c2ZzX2NtZF9zdHJzW2NtZF0pKSB7XG5tbS9kYW1vbi9zeXNmcy5jOjI0MTU6XHRcdFx0cmV0ID0gZGFtb25fc3lzZnNfaGFuZGxlX2NtZChjbWQsIGtkYW1vbmQpO1xubW0vZGFtb24vc3lzZnMuYy0yNDE2LVx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjkyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIFN5c2ZzIEludGVyZmFjZTogQSBSZWNvbm5haXNzYW5jZSoqCgpPa2F5LCBzbyB0aGUgc3lzZnMgaW50ZXJmYWNlIGlzIGRlZmluaXRlbHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZS4gVGhhdCBtZWFucyBpdCYjMzk7cyBmdXp6YWJsZSDigJMgdGhhdCYjMzk7cyB0aGUgZmlyc3Qgc3RlcC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGF0dGFjayBzdXJmYWNlIGlzLiBOb3csIEkgc2VlIHRoYXQgdGhlIGZ1bmN0aW9ucyBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb25gIGFuZCBgZGFtb3NfaW5pdF9xdW90YV9nb2FsX2xhc3RfcHNpYCBhcmUgcmVhY2hhYmxlIGZyb20gaXQuIExldCYjMzk7cyBkaWcgZGVlcGVyIGFuZCBnZXQgYSBiZXR0ZXIgcGljdHVyZSBvZiB0aGUgYXZhaWxhYmxlIHN5bWJvbHMuCgpIbW0sIGl0IGxvb2tzIGxpa2UgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBTbyBpcyBgZGFtb3NfaW5pdF9xdW90YV9nb2FsX2xhc3RfcHNpYCwgYWxvbmcgd2l0aCBgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbmAsIGBkYW1vbl9zeXNmc19oYW5kbGVfY21kYCwgYW5kIGBzdGF0ZV9zdG9yZWAuIFRoZXNlIHN0YXRpYyBmdW5jdGlvbnMgY291bGQgc3RpbGwgYmUgdXNlZnVsIGRlcGVuZGluZyBvbiBob3cgdGhleSBhcmUgdXNlZC4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55ICpub24qLXN0YXRpYyBmdW5jdGlvbnMgd2UgY2FuIGV4YW1pbmUuIEl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgd2hhdCBlbHNlIGlzIGF2YWlsYWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTExMDg9c3RhdGljIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19udGhfcXVvdGFfZ29hbChcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTEyMC1cbm1tL2RhbW9uL2NvcmUuYzoxMTIxOnN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKFxubW0vZGFtb24vY29yZS5jLTExMjItXHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTExNDEtXG5tbS9kYW1vbi9jb3JlLmM6MTE0MjpzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcbm1tL2RhbW9uL2NvcmUuYy0xMTQzLVx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMTQ4LVx0XHRkc3QtXHUwMDNlY3VycmVudF92YWx1ZSA9IHNyYy1cdTAwM2VjdXJyZW50X3ZhbHVlO1xubW0vZGFtb24vY29yZS5jOjExNDk6XHRkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihkc3QsIHNyYyk7XG5tbS9kYW1vbi9jb3JlLmMtMTE1MC19XG4tLVxubW0vZGFtb24vY29yZS5jLTExNTItLyoqXG5tbS9kYW1vbi9jb3JlLmM6MTE1MzogKiBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoKSAtIENvbW1pdCBEQU1PUyBxdW90YSBnb2FscyB0byBhbm90aGVyIHF1b3RhLlxubW0vZGFtb24vY29yZS5jLTExNTQtICogQGRzdDpcdFRoZSBjb21taXQgZGVzdGluYXRpb24gREFNT1MgcXVvdGEuXG4tLVxubW0vZGFtb24vY29yZS5jLTExNjMtICovXG5tbS9kYW1vbi9jb3JlLmM6MTE2NDppbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcbm1tL2RhbW9uL2NvcmUuYy0xMTY1LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTE3MS1cdFx0aWYgKHNyY19nb2FsKVxubW0vZGFtb24vY29yZS5jOjExNzI6XHRcdFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoZHN0X2dvYWwsIHNyY19nb2FsKTtcbm1tL2RhbW9uL2NvcmUuYy0xMTczLVx0XHRlbHNlXG4tLVxubW0vZGFtb24vY29yZS5jLTExODItXHRcdFx0cmV0dXJuIC1FTk9NRU07XG5tbS9kYW1vbi9jb3JlLmM6MTE4MzpcdFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwobmV3X2dvYWwsIHNyY19nb2FsKTtcbm1tL2RhbW9uL2NvcmUuYy0xMTg0LVx0XHRkYW1vc19hZGRfcXVvdGFfZ29hbChkc3QsIG5ld19nb2FsKTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTE4OT1zdGF0aWMgaW50IGRhbW9zX2NvbW1pdF9xdW90YShzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTExOTUtXHRkc3QtXHUwMDNlc3ogPSBzcmMtXHUwMDNlc3o7XG5tbS9kYW1vbi9jb3JlLmM6MTE5NjpcdGVyciA9IGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fscyhkc3QsIHNyYyk7XG5tbS9kYW1vbi9jb3JlLmMtMTE5Ny1cdGlmIChlcnIpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4OTQ9aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5MTgtXHRcdH1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyOTE5Olx0XHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoXHUwMDI2c2NoZW1lLVx1MDAzZXF1b3RhLCBcdTAwMjZxdW90YSk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjkyMC1cdFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbF9zYWZlKGcsIGdfbmV4dCwgXHUwMDI2cXVvdGEpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTc1MD1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTc1Ny1cdFx0ZHN0X2xhc3RfcHNpX3RvdGFsID0gZHN0LVx1MDAzZWxhc3RfcHNpX3RvdGFsO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjc1ODpcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKGRzdCwgc3JjKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC03NTktXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTgzND1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2Fsc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NDktXHRcdCAqIFdoZW4gbnJfc3JjX2dvYWxzIGlzIHNtYWxsZXIgdGhhbiBkc3RfZ29hbHMsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODUwOlx0XHQgKiBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoKSB3aWxsIGtmcmVlKCkgdGhlIGRzdCBnb2Fscy5cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NTEtXHRcdCAqIE1ha2UgaXQga2ZyZWUoKS1hYmxlLlxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NjItXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODYzOlx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKFx1MDAyNmRzdCwgXHUwMDI2c3JjKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NjQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA0OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyOTcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgUG90ZW50aWFsIEluaXRpYWxpemF0aW9uIElzc3VlcyB3aXRoIE5vbi1TdGF0aWMgVmFyaWFibGVzKioKCk9rYXksIHNvIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgIGlzbiYjMzk7dCBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgaW5pdGlhbGl6YXRpb24gcHJvYmxlbS4gV2UgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGFuZCBob3cgdGhpcyB2YXJpYWJsZSBpcyBiZWluZyBpbml0aWFsaXplZCwgYW5kIG1vcmUgaW1wb3J0YW50bHksIGlmIGl0JiMzOTtzIGJlaW5nIGhhbmRsZWQgY29ycmVjdGx5IGFjcm9zcyBkaWZmZXJlbnQgdGhyZWFkcyBvciBjb250ZXh0cy4gU2luY2UgaXQmIzM5O3Mgbm90IHN0YXRpYywgaXQgc3VnZ2VzdHMgc29tZSBzb3J0IG9mIGR5bmFtaWMgb3IgcG90ZW50aWFsbHkgZ2xvYmFsIHNjb3BlLiBTbywgd2hlcmUgYXJlIHRoZSBjcml0aWNhbCBwb2ludHM/IE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGlnIGludG8gYGtkYW1vbmRfaW5pdF9jdHhgIG9yIGBkYW1vc19pbml0X3F1b3RhX2dvYWxfbGFzdF9wc2lgLiBJ4oCZbGwgc3RhcnQgYnkgcmV2aWV3aW5nIHRoZSBpbml0aWFsaXphdGlvbiBsb2dpYyB3aXRoaW4gdGhvc2UgZnVuY3Rpb25zLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYCBhbmQgaWYgdGhlcmUmIzM5O3MgYW55IHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zIG9yIHVuaW50ZW5kZWQgc2lkZSBlZmZlY3RzIGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcywgZXNwZWNpYWxseSBpbiBhIG11bHRpLXRocmVhZGVkIHNjZW5hcmlvLiBJdCYjMzk7cyBhIGNsYXNzaWMgZGVidWdnaW5nIGFwcHJvYWNoOiBzdGFydCB3aXRoIHRoZSBsaWtlbHkgY3VscHJpdHMuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIHZhcmlhYmxlJiMzOTtzIGxpZmVjeWNsZSBmcm9tIGRlY2xhcmF0aW9uIHRvIHVzZS4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aG9zZSBmdW5jdGlvbnMgaXMga2V5IHRvIHBpbnBvaW50aW5nIGFueSBwcm9ibGVtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2RhbW9uZF9pbml0X2N0eCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9ODMyPXN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld19jdHgodm9pZClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtODQ2LVx0Y3R4LVx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzID0gMDtcbm1tL2RhbW9uL2NvcmUuYzo4NDc6XHQvKiBUaGVzZSB3aWxsIGJlIHNldCBmcm9tIGtkYW1vbmRfaW5pdF9jdHgoKSAqL1xubW0vZGFtb24vY29yZS5jLTg0OC1cdGN0eC1cdTAwM2VuZXh0X2FnZ3JlZ2F0aW9uX3NpcyA9IDA7XG4tLVxubW0vZGFtb24vY29yZS5jPTM3MzI9c3RhdGljIHZvaWQgZGFtb3NfaW5pdF9xdW90YV9nb2FsX2xhc3RfcHNpKHN0cnVjdCBkYW1vcyAqcylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzc0Mi1cbm1tL2RhbW9uL2NvcmUuYzozNzQzOnN0YXRpYyB2b2lkIGtkYW1vbmRfaW5pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxubW0vZGFtb24vY29yZS5jLTM3NDQte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zNzY2PXN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNzc5LVx0Y29tcGxldGUoXHUwMDI2Y3R4LVx1MDAzZWtkYW1vbmRfc3RhcnRlZCk7XG5tbS9kYW1vbi9jb3JlLmM6Mzc4MDpcdGtkYW1vbmRfaW5pdF9jdHgoY3R4KTtcbm1tL2RhbW9uL2NvcmUuYy0zNzgxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTM3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBDb2RlIFN0cnVjdHVyZSBhbmQgU2NvcGUqKgoKSG1tLCBzbyBga2RhbW9uZF9mbmAgaXMgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgaXQgaW4gbXkgbWluZCBhcyBiZWluZyBsaW1pdGVkIGluIHNjb3BlIOKAkyBsaWtlbHkgaW50ZXJuYWwgdG8gYSBzaW5nbGUgZmlsZSBvciBjb21waWxhdGlvbiB1bml0LiBPa2F5LCBub3RlZC4gTm93LCBsZXQgbWUgc2VlLi4uIGFuZCBoZXJlIHdlIGhhdmUgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2AsIGFuZCBpdCYjMzk7cyAqbm90KiBzdGF0aWMuIFRoYXQgaW1wbGllcyBpdCYjMzk7cyBpbnRlbmRlZCB0byBiZSB2aXNpYmxlIG91dHNpZGUgb2YgaXRzIGltbWVkaWF0ZSBjb250ZXh0LiBDb3VsZCBiZSBhIGZ1bmN0aW9uIG90aGVyIG1vZHVsZXMgY2FuIGNhbGwgdG8gY29tbWl0IHF1b3RhIGNoYW5nZXMuCgpKdXN0IHRvIGJlIHRob3JvdWdoLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaG93IGBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzYCBpcyBkZWZpbmVkLiBJIHdhbnQgdG8gc2VlIGlmIHRoaXMgaGFzIGEgcmVsYXRpb25zaGlwIHRvIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgLiBJcyBpdCBhIGhlbHBlcj8gRG9lcyBpdCBjYWxsIGl0PyBBcmUgdGhleSBib3RoIHVzZWQgaW4gdGhlIHNhbWUgY29udGV4dD8gVW5kZXJzdGFuZGluZyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdGhyZWUgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBvdmVyYWxsIHF1b3RhIHN5c3RlbSB3b3JrcywgYW5kIGhvdyB0aGlzIG1vZHVsZSBmaXRzIGludG8gaXQuIFRoaXMgd2lsbCBoZWxwIG1lIGFzc2VzcyB0aGUgYXJjaGl0ZWN0dXJlIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIGFueSBjaGFuZ2VzIGRvd24gdGhlIGxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA0OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMtY29tbW9uLmg9NTE9aW50IGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9ucyhcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01My1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjU0OmludCBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTUtXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NDc9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4OTMtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg5NDppbnQgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODk1LVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vc3lzZnMuYz0yMTUyPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfY29tbWl0X3NjaGVtZXNfcXVvdGFfZ29hbHModm9pZCAqZGF0YSlcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIxNjUtXHRzeXNmc19jdHggPSBzeXNmc19rZGFtb25kLVx1MDAzZWNvbnRleHRzLVx1MDAzZWNvbnRleHRzX2FyclswXTtcbm1tL2RhbW9uL3N5c2ZzLmM6MjE2NjpcdHJldHVybiBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN5c2ZzX2N0eC1cdTAwM2VzY2hlbWVzLCBjdHgpO1xubW0vZGFtb24vc3lzZnMuYy0yMTY3LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTY1MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgREFNT04gU3lzZnMgRnVuY3Rpb24gU2NvcGUqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlIERBTU9OIHN5c2ZzIGNvZGUsIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGZ1bmN0aW9uIHZpc2liaWxpdHkuIEkgc2VlIHRoYXQgYGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNgIGlzIG5vbi1zdGF0aWMsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IHNjb3BlIGFuZCBwb3RlbnRpYWwgZXh0ZXJuYWwgaW50ZXJhY3Rpb25zLiBJcyB0aGlzIGZ1bmN0aW9uIGludGVuZGVkIHRvIGJlIGV4cG9zZWQgb3V0c2lkZSB0aGUgbW9kdWxlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBjaG9pY2Ugd2FzIG1hZGUuCgpUaGVuIG15IG1pbmQgZHJpZnRzIHRvIGBkYW1vbl9zeXNmc19oYW5kbGVfY21kYC4gQWgsIHRoYXQgb25lICppcyogc3RhdGljLiBJbnRlcmVzdGluZyBjb250cmFzdC4gSSBuZWVkIHRvIGtlZXAgdGhpcyBwYXR0ZXJuIGluIG1pbmQuIEl0JiMzOTtzIGEga2V5IGZhY3Rvci4KCk5vdywgdGhlIG5hdHVyYWwgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHN5c2ZzIGltcGxlbWVudGF0aW9uLiBMZXQmIzM5O3Mgc2VlLi4uIGBkYW1vbl9zeXNmc19jb21taXRfc2NoZW1lc19xdW90YV9nb2Fsc2AgaXMgc3RhdGljLCBgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbmAgaXMgYWxzbyBzdGF0aWMsIGFzIGlzIGBkYW1vbl9zeXNmc19yZXBlYXRfY2FsbF9mbmAuIFNvLCBpdCBzZWVtcyBsaWtlIG1vc3Qgb2YgdGhlIHN5c2ZzIGZ1bmN0aW9ucyBhcmUgZGVsaWJlcmF0ZWx5IHNjb3BlZCB3aXRoaW4gdGhlIG1vZHVsZS4gR29vZCwgdGhhdCBoZWxwcy4KCkkgbmVlZCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgYW5kIHRvIHNlZSBpZiBJIG1pc3NlZCBhbnkuIExldCYjMzk7cyBoZWFkIG92ZXIgdG8gYG1tL2RhbW9uL3N5c2ZzLmNgIGZvciBhIGNvbXByZWhlbnNpdmUgbG9vay4gSSB3YW50IHRvIGRvdWJsZS1jaGVjayBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyBsdXJraW5nIGFyb3VuZCwgd2hpY2ggd291bGQgYWZmZWN0IGhvdyB0aGUgc3lzZnMgaW50ZXJmYWNlIGJlaGF2ZXMuIEkgd2FudCB0byBidWlsZCBhIGJldHRlciBvdmVyYWxsIHBpY3R1cmUgb2YgdGhlIG1vZHVsZSYjMzk7cyBleHBvc2VkIGZ1bmN0aW9uYWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50IGRhbW9uX3N5c2ZzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA0OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTYwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBtbS9kYW1vbi9zeXNmcy5jYCBmb3IgRnVuY3Rpb24gU2NvcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGBtbS9kYW1vbi9zeXNmcy5jYC4gTXkgcHJpbWFyeSBjb25jZXJuIGlzIHBpbnBvaW50aW5nIGFueSBmdW5jdGlvbnMgZGVmaW5lZCB3aXRoaW4gdGhhdCBmaWxlIHRoYXQgYXJlbiYjMzk7dCBkZWNsYXJlZCBhcyBgc3RhdGljYC4gIEtub3dpbmcgdGhlIHNjb3BlIG9mIHRoZXNlIGZ1bmN0aW9ucyBpcyBjcnVjaWFsLiBJdCBsZXRzIG1lIHVuZGVyc3RhbmQgaWYgdGhleSBtaWdodCBiZSBpbnRlbmRlZCBmb3IgZXh0ZXJuYWwgdXNlLCBwZXJoYXBzIGNhbGxlZCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBEQU1PTiBpbmZyYXN0cnVjdHVyZSBvciBldmVuIGtlcm5lbCBzdWJzeXN0ZW1zLiBJZiB0aGV5ICphcmUqIHN0YXRpYywgdGhlbiBJIGhhdmUgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBidWlsZCBhbiBvdmVyYWxsIHBpY3R1cmUgb2YgaG93IGl0IGFsbCB3b3Jrcy4gSSBjYW4gc3RhcnQgYnkganVzdCBsaXN0aW5nIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBhbmQgdGhlaXIgc2lnbmF0dXJlcy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIGRlc2lnbiBpbnRlbnRpb25zIGZvciB0aGlzIHN5c2ZzIGludGVyZmFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpfXSYjNDM7IGRhbW9uX3N5c2ZzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy5jLTE1LVxubW0vZGFtb24vc3lzZnMuYzoxNjpzdHJ1Y3QgZGFtb25fc3lzZnNfcmVnaW9uIHtcbm1tL2RhbW9uL3N5c2ZzLmMtMTctXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9ODI9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfcmVnaW9uX2t0eXBlID0ge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtOTEtXG5tbS9kYW1vbi9zeXNmcy5jOjkyOnN0cnVjdCBkYW1vbl9zeXNmc19yZWdpb25zIHtcbm1tL2RhbW9uL3N5c2ZzLmMtOTMtXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjAxPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3JlZ2lvbnNfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMTAtXG5tbS9kYW1vbi9zeXNmcy5jOjIxMTpzdHJ1Y3QgZGFtb25fc3lzZnNfdGFyZ2V0IHtcbm1tL2RhbW9uL3N5c2ZzLmMtMjEyLVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTMwOD1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc190YXJnZXRfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy0zMTctXG5tbS9kYW1vbi9zeXNmcy5jOjMxODpzdHJ1Y3QgZGFtb25fc3lzZnNfdGFyZ2V0cyB7XG5tbS9kYW1vbi9zeXNmcy5jLTMxOS1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMuYz00MzY9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfdGFyZ2V0c19rdHlwZSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTQ0NS1cbm1tL2RhbW9uL3N5c2ZzLmM6NDQ2OnN0cnVjdCBkYW1vbl9zeXNmc19pbnRlcnZhbHNfZ29hbCB7XG5tbS9kYW1vbi9zeXNmcy5jLTQ0Ny1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMuYz01OTM9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfaW50ZXJ2YWxzX2dvYWxfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy02MDItXG5tbS9kYW1vbi9zeXNmcy5jOjYwMzpzdHJ1Y3QgZGFtb25fc3lzZnNfaW50ZXJ2YWxzIHtcbm1tL2RhbW9uL3N5c2ZzLmMtNjA0LVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTc0Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19pbnRlcnZhbHNfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy03NTYtXG5tbS9kYW1vbi9zeXNmcy5jOjc1NzpzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVyIHtcbm1tL2RhbW9uL3N5c2ZzLmMtNzU4LVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTc2NT1zdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX2ZpbHRlciAqZGFtb25fc3lzZnNfZmlsdGVyX2FsbG9jKHZvaWQpXG4tLVxubW0vZGFtb24vc3lzZnMuYy03NjktXG5tbS9kYW1vbi9zeXNmcy5jOjc3MDpzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVyX3R5cGVfbmFtZSB7XG5tbS9kYW1vbi9zeXNmcy5jLTc3MS1cdGVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZTtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTkzNz1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19maWx0ZXJfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy05NDYtXG5tbS9kYW1vbi9zeXNmcy5jOjk0NzpzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVycyB7XG5tbS9kYW1vbi9zeXNmcy5jLTk0OC1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0xMDU2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2ZpbHRlcnNfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy0xMDY1LVxubW0vZGFtb24vc3lzZnMuYzoxMDY2OnN0cnVjdCBkYW1vbl9zeXNmc19wcm9iZSB7XG5tbS9kYW1vbi9zeXNmcy5jLTEwNjctXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MTEzNz1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19wcm9iZV9rdHlwZSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTExNDYtXG5tbS9kYW1vbi9zeXNmcy5jOjExNDc6c3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlcyB7XG5tbS9kYW1vbi9zeXNmcy5jLTExNDgtXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MTI2Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19wcm9iZXNfa3R5cGUgPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy0xMjc1LVxubW0vZGFtb24vc3lzZnMuYzoxMjc2OnN0cnVjdCBkYW1vbl9zeXNmc19hdHRycyB7XG5tbS9kYW1vbi9zeXNmcy5jLTEyNzctXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MTM3Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19hdHRyc19rdHlwZSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTEzODEtXG5tbS9kYW1vbi9zeXNmcy5jOjEzODI6c3RydWN0IGRhbW9uX3N5c2ZzX29wc19uYW1lIHtcbm1tL2RhbW9uL3N5c2ZzLmMtMTM4My1cdGVudW0gZGFtb25fb3BzX2lkIG9wc19pZDtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTEzODc9c3RhdGljIGNvbnN0IHN0cnVjdCBkYW1vbl9zeXNmc19vcHNfbmFtZSBkYW1vbl9zeXNmc19vcHNfbmFtZXNbXSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTE0MDEtXG5tbS9kYW1vbi9zeXNmcy5jOjE0MDI6c3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHQge1xubW0vZGFtb24vc3lzZnMuYy0xNDAzLVx0c3RydWN0IGtvYmplY3Qga29iajtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTE2NDg9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfY29udGV4dF9rdHlwZSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTE2NTctXG5tbS9kYW1vbi9zeXNmcy5jOjE2NTg6c3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHRzIHtcbm1tL2RhbW9uL3N5c2ZzLmMtMTY1OS1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0xNzc3PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2NvbnRleHRzX2t0eXBlID0ge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMTc4Ni1cbm1tL2RhbW9uL3N5c2ZzLmM6MTc4NzpzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCB7XG5tbS9kYW1vbi9zeXNmcy5jLTE3ODgtXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MTgyMT1zdGF0aWMgdm9pZCBkYW1vbl9zeXNmc19rZGFtb25kX3JtX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXG4tLVxubW0vZGFtb24vc3lzZnMuYy0xODI5LSAqL1xubW0vZGFtb24vc3lzZnMuYzoxODMwOmVudW0gZGFtb25fc3lzZnNfY21kIHtcbm1tL2RhbW9uL3N5c2ZzLmMtMTgzMS1cdC8qIEBEQU1PTl9TWVNGU19DTURfT046IFR1cm4gdGhlIGtkYW1vbmQgb24uICovXG4tLVxubW0vZGFtb24vc3lzZnMuYz0yMzAwPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfZGFtb25fY2FsbChpbnQgKCpmbikodm9pZCAqZGF0YSksXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMzEzLVxubW0vZGFtb24vc3lzZnMuYzoyMzE0OnN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzX3dhbGtfZGF0YSB7XG5tbS9kYW1vbi9zeXNmcy5jLTIzMTUtXHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqc3lzZnNfa2RhbW9uZDtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTI0OTg9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfa2RhbW9uZF9rdHlwZSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTI1MDctXG5tbS9kYW1vbi9zeXNmcy5jOjI1MDg6c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmRzIHtcbm1tL2RhbW9uL3N5c2ZzLmMtMjUwOS1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0yNjQzPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2tkYW1vbmRzX2t0eXBlID0ge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjY1Mi1cbm1tL2RhbW9uL3N5c2ZzLmM6MjY1MzpzdHJ1Y3QgZGFtb25fc3lzZnNfdWlfZGlyIHtcbm1tL2RhbW9uL3N5c2ZzLmMtMjY1NC1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA0OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDY0CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBcHByb2FjaCB0byBVbmRlcnN0YW5kaW5nIHRoZSBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBzeXNmcyBjb2RlLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gaG93IGl0IHVzZXMgYGtvYmpfdHlwZWAgYW5kIHN5c2ZzIGZpbGVzIHRvIG1hbmFnZSB0aGluZ3MuIEJhc2VkIG9uIHRoZSBjb250ZXh0LCBJIHRoaW5rIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCBoZXJlIGFyZSBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYCBhbmQgcG90ZW50aWFsbHkgYGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNgLiBJdCBzb3VuZHMgbGlrZSB0aGVzZSBhcmUgY2VudHJhbCB0byBzZXR0aW5nIG9yIGFwcGx5aW5nIHF1b3RhIHRhcmdldHMuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIHZlcmlmeSB0aGUgbG9jYXRpb24gb2YgYGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNgIHdpdGhpbiB0aGUgY29kZS4gTGV0JiMzOTtzIHNlZSBpZiBpdCYjMzk7cyBkZWZpbmVkIGluIGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgLiBUaGF0IGZpbGUgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgcGxhY2UgZm9yIHRoaXMga2luZCBvZiBmdW5jdGlvbmFsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yODQ3PXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlKFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODkzLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4OTQ6aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg5NS1cdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg5MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBEYXRhIEFjY2VzcyBNb25pdG9yIChEQU1PTikgUXVvdGEgTWFuYWdlbWVudCBJc3N1ZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBJJiMzOTttIGxvb2tpbmcgYXQgYGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNgLCBhbmQgaXQmIzM5O3MgbWFya2VkIGFzIG5vbi1zdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVkIG15IGludGVyZXN0LiBJbiB0aGUgY29udGV4dCBvZiBEQU1PTiYjMzk7cyBxdW90YSBzeXN0ZW0sIHRoYXQgbWVhbnMgaXQmIzM5O3MgcG90ZW50aWFsbHkgYWNjZXNzaWJsZSBmcm9tIGVsc2V3aGVyZSBpbiB0aGUga2VybmVsLiBNeSBuZXh0IHRob3VnaHQgaXMsIHdoZXJlIGVsc2UgYXJlIHRoZSBEQU1PTiBxdW90YSByb3V0aW5lcyBmb3VuZD8gQW5kLCB3aGF0IG9mIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgPyBUaW1lIHRvIGNoZWNrIGBtbS9kYW1vbi9jb3JlLmNgLiBUaGF0JiMzOTtzIHdoZXJlIERBTU9OJiMzOTtzIGNvcmUgZnVuY3Rpb25hbGl0eSByZXNpZGVzLCBzbyBpdCYjMzk7cyBhIGxpa2VseSBwbGFjZSB0byBmaW5kIG90aGVyIGtleSBxdW90YS1yZWxhdGVkIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucywgYW5kIHdoZXRoZXIgdGhleSBtaWdodCBpbmFkdmVydGVudGx5IGludHJvZHVjZSBzb21lIHJhY2UgY29uZGl0aW9ucyBvciBvdGhlciBpc3N1ZXMuIE15IGZvY3VzIG5vdyBpcyBvbiB1bmRlcnN0YW5kaW5nIGRhdGEgaW50ZWdyaXR5IGluIHRoaXMgcXVvdGEgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0xMTQyPXN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMTUyLS8qKlxubW0vZGFtb24vY29yZS5jOjExNTM6ICogZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKCkgLSBDb21taXQgREFNT1MgcXVvdGEgZ29hbHMgdG8gYW5vdGhlciBxdW90YS5cbm1tL2RhbW9uL2NvcmUuYy0xMTU0LSAqIEBkc3Q6XHRUaGUgY29tbWl0IGRlc3RpbmF0aW9uIERBTU9TIHF1b3RhLlxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMTYzLSAqL1xubW0vZGFtb24vY29yZS5jOjExNjQ6aW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpXG5tbS9kYW1vbi9jb3JlLmMtMTE2NS17XG4tLVxubW0vZGFtb24vY29yZS5jPTExODk9c3RhdGljIGludCBkYW1vc19jb21taXRfcXVvdGEoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMTk1LVx0ZHN0LVx1MDAzZXN6ID0gc3JjLVx1MDAzZXN6O1xubW0vZGFtb24vY29yZS5jOjExOTY6XHRlcnIgPSBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoZHN0LCBzcmMpO1xubW0vZGFtb24vY29yZS5jLTExOTctXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ4OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIERBTU9OLVJlbGF0ZWQgQ29uZmlndXJhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHplcm8gaW4uIEkmIzM5O20gc2VlaW5nIHRoYXQgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2AgYW5kIGBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzYCBhcmUgc29saWQgaW5kaWNhdG9ycyBvZiB0aGUgYXJlYSBJIG5lZWQgdG8gYmUgZm9jdXNlZCBvbi4gVGhvc2UgbG9vayBsaWtlIGdvb2Qgc3RhcnRpbmcgcG9pbnRzLiBOb3csIEkgbmVlZCB0byBjb25maXJtIHRoZSBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIHRoaXMgYXJlYSwgd2hpY2ggSSB0aGluayBhcmUgYERBTU9OYCBhbmQgYERBTU9OX1NZU0ZTYC4gT2theSwgdGltZSB0byBjaGVjazogSSBzaG91bGQgdmVyaWZ5IGlmIGBEQU1PTl9TWVNGU2AgaGFzIGFueSBkZXBlbmRlbmNpZXMuIEkgY2FuJiMzOTt0IGJlIHN1cmUgd2l0aG91dCBsb29raW5nLCBzbyBsZXQmIzM5O3MgZmluZCBvdXQhIEkmIzM5O2xsIGRpdmUgaW50byB0aGUgZGVwZW5kZW5jaWVzIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREFNT05fU1lTRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWc9NTY9Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1Rcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcbm1tL2RhbW9uL0tjb25maWctNjktXHRib29sIFwmIzM0O0RBTU9OIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNzUtXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTc3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg5MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgREFNT04gU3lzZnMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgYG1tL2RhbW9uL0tjb25maWdgIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBEQU1PTl9TWVNGU2AgY29uZmlndXJhdGlvbiBvcHRpb24uIFRoaXMgaXMgdGhlIGVudHJ5IHBvaW50LCB0aGUgY2VudHJhbCBwbGFjZSB3aGVyZSB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTiBpcyBkZWZpbmVkIGluIHRoZSBidWlsZCBzeXN0ZW0uIFRoaXMgZmlsZSBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgc3lzZnMgaW50ZXJmYWNlIGlzIGVuYWJsZWQsIGRpc2FibGVkLCBhbmQgY29uZmlndXJlZC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgaGVyZSwgZ2l2ZW4gaXRzIGNyaXRpY2FsaXR5IGluIGVuYWJsaW5nIHVzZXJzcGFjZSBjb250cm9sIG92ZXIgdGhpcyBmcmFtZXdvcmsuIEkgZXhwZWN0IHRvIHNlZSB0aGUgdHlwaWNhbCBgY29uZmlnYCBibG9jayB3aXRoIHBvdGVudGlhbGx5IGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgZmVhdHVyZXMuIEhvcGVmdWxseSB0aGVyZSB3aWxsIGJlIGNsZWFyIGRvY3VtZW50YXRpb24gaW5saW5lIG9yIG5lYXJieSBhYm91dCBpdHMgaW1wbGljYXRpb25zIHdoZW4gZW5hYmxlZC4gSSYjMzk7bGwgYmUgbG9va2luZyB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25kaXRpb25zIHRoYXQgbmVlZCB0byBiZSBtZXQgZm9yIGl0IHRvIGJlIGVuYWJsZWQuIEFueSBkZXBlbmRlbmNpZXMgb24gc3BlY2lmaWMga2VybmVsIHZlcnNpb25zLCBvdGhlciBjb25maWd1cmF0aW9ucywgb3IgZXZlbiBoYXJkd2FyZSBwbGF0Zm9ybXMgd291bGQgYmUgaW1wb3J0YW50IHRvIG5vdGUuIE9uY2UgSSBmdWxseSB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIEkmIzM5O2xsIGhhdmUgYSBtdWNoIGJldHRlciBpZGVhIG9mIGhvdyB0aGUgc3lzZnMgaW50ZXJmYWNlIGJlaGF2ZXMgYW5kIGhvdyB0byBtYW5hZ2UgdGhlIGtlcm5lbCBmZWF0dXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2MDpcdFx0aGVscFxuICA2MTpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gdmlydHVhbCBhZGRyZXNzZXMgb3BlcmF0aW9ucyBLdW5pdCB0ZXN0IHN1aXRlLlxuICA2MjpcdFxuICA2MzpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcbiAgNjQ6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXG4gIDY1Olx0XG4gIDY2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDY3Olx0XG4gIDY4Olx0Y29uZmlnIERBTU9OX1NZU0ZTXG4gIDY5Olx0XHRib29sIFwmIzM0O0RBTU9OIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuICA3MDpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgU1lTRlNcbiAgNzE6XHRcdGRlZmF1bHQgREFNT05cbiAgNzI6XHRcdGhlbHBcbiAgNzM6XHRcdCAgVGhpcyBidWlsZHMgdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgREFNT04uICBUaGUgdXNlciBzcGFjZSBjYW4gdXNlXG4gIDc0Olx0XHQgIHRoZSBpbnRlcmZhY2UgZm9yIGFyYml0cmFyeSBkYXRhIGFjY2VzcyBtb25pdG9yaW5nLlxuICA3NTpcdFxuICA3NjpcdGNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG4gIDc3Olx0XHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDc4Olx0XHRkZXBlbmRzIG9uIERBTU9OX1NZU0ZTIFx1MDAyNlx1MDAyNiBLVU5JVD15XG4gIDc5Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQ2OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgREFNT04mIzM5O3MgU3lzZnMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBgREFNT05fU1lTRlNgIHJlbGllcyBvbiBib3RoIGBEQU1PTmAgYW5kIGBTWVNGU2AuIGBTWVNGU2AgaXMgcHJldHR5IHN0YW5kYXJkLCB3aGljaCBtZWFucyB0aGUgcmVhbCBjb25maWd1cmF0aW9ucyBvZiBpbnRlcmVzdCBhcmUgZ29pbmcgdG8gYmUgdGhvc2UgcmVsYXRlZCB0byBgREFNT05gIGFuZCB0aGVuIHNwZWNpZmljYWxseSwgYERBTU9OX1NZU0ZTYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIGFyZSBzZXQgdXAuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYC4gSXMgdGhhdCB0aGUgb25seSByZWxldmFudCBub24tc3RhdGljIGZ1bmN0aW9uIHRoZXJlPyBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcgY3J1Y2lhbC4KCkFoLCB3YWl0LCBob2xkIG9uLiBUaGVyZSYjMzk7cyBhbHNvIGBkYW1vbl9zeXNmc19zZXRfcXVvdGFfc2NvcmVzYCBpbiBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYOKApiBObywgd2FpdCwgdGhhdCYjMzk7cyBub3QgcXVpdGUgcmlnaHQuIEl0IGxvb2tzIGxpa2UgaXQgaXMgYWN0dWFsbHkgYGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNgLiBJIG5lZWQgdG8gcmUtZXhhbWluZSB0aGF0IGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA0OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMtY29tbW9uLmg9NTE9aW50IGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9ucyhcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01My1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjU0OmludCBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTUtXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NDc9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4OTMtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg5NDppbnQgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODk1LVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vc3lzZnMuYz0yMTUyPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfY29tbWl0X3NjaGVtZXNfcXVvdGFfZ29hbHModm9pZCAqZGF0YSlcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIxNjUtXHRzeXNmc19jdHggPSBzeXNmc19rZGFtb25kLVx1MDAzZWNvbnRleHRzLVx1MDAzZWNvbnRleHRzX2FyclswXTtcbm1tL2RhbW9uL3N5c2ZzLmM6MjE2NjpcdHJldHVybiBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN5c2ZzX2N0eC1cdTAwM2VzY2hlbWVzLCBjdHgpO1xubW0vZGFtb24vc3lzZnMuYy0yMTY3LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyNTcKCQkJCQkJCW91dHB1dDogMTUzCgkJCQkJCQl0aG91Z2h0czogMTc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIERBTU9OIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgcHJldHR5IGNyaXRpY2FsIGJ1ZyByZWxhdGVkIHRvIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgY29tbWl0bWVudCBvZiBgbGFzdF9wc2lfdG90YWxgIHdpdGhpbiB0aGUgREFNT04gY29yZSBhbmQgaXRzIHN5c2ZzIGludGVyZmFjZS4gVGhhdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBubyBxdWVzdGlvbi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgY2hhbmdlcyB0byBob3cgREFNT04gaGFuZGxlcyB0aGUgYERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AgcXVvdGEgbWV0cmljLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIG1lbW9yeSBwcmVzc3VyZSBpbmZvcm1hdGlvbi4gQW5kIGl0JiMzOTtzIG5vdCBqdXN0IHRoZSBjb3JlIGxvZ2ljOyB0aGUgcGF0Y2ggYWxzbyB0d2Vha3MgYG5leHRfcmVmcmVzaF9qaWZmaWVzYCBpbiB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlLCB3aGljaCBpcyB0aGUgdXNlci1zcGFjZSBmYWNpbmcgc2lkZSBvZiB0aGUgc3lzdGVtLgoKR2l2ZW4gdGhhdCB0aGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGFyZSBleHBvc2VkIHRocm91Z2ggc3lzZnMsIHRoZSBhdHRhY2sgc3VyZmFjZSBpcyBkZWZpbml0ZWx5IHRoZXJlLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIHBhdGggdG8gaW5mbHVlbmNlIG1lbW9yeSBtYW5hZ2VtZW50IGJlaGF2aW9yIGZyb20gdXNlcnNwYWNlLiBUaGUga2V5IHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uIGR1cmluZyBmdXp6aW5nIGFyZSBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYCBhbmQgYGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNgLCBzaW5jZSB0aGVzZSBhcmUgdGhlIHBvaW50cyBvZiBpbnRlZ3JhdGlvbiBhZmZlY3RlZCBieSB0aGlzIHBhdGNoLiBXZSBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGBEQU1PTmAgYW5kIGBEQU1PTl9TWVNGU2AgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQsIGFzIHRoZXNlIGFyZSBwcmVyZXF1aXNpdGVzIGZvciB0aGUgYWZmZWN0ZWQgY29kZSBwYXRocy4KClRoZXJlZm9yZSwgdGhpcyBwYXRjaCBoYXMgdGhlIHBvdGVudGlhbCB0byBpbnRyb2R1Y2Ugc3VidGxlIGJ1dCBjcml0aWNhbCBtZW1vcnkgbWFuYWdlbWVudCBlcnJvcnMgdGhhdCBjb3VsZCBiZSBleHBsb2l0YWJsZSwgYW5kIGl0IHdhcnJhbnRzIHRob3JvdWdoIGZ1enppbmcuIEkmIzM5O20gZ29pbmcgdG8gbWFyayB0aGlzIGFzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA0OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9zX2NvbW1pdF9xdW90YV9nb2FscyYjMzQ7LAogICAgJiMzNDtkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIERBTU9OIGxvZ2ljIHRvIHByb3Blcmx5IGluaXRpYWxpemUgYW5kIGNvbW1pdCB0aGUgYGxhc3RfcHNpX3RvdGFsYCBmb3IgdGhlIGBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVNgIHF1b3RhIG1ldHJpYy4gSXQgYWxzbyBmaXhlcyB0aGUgYG5leHRfcmVmcmVzaF9qaWZmaWVzYCBoYW5kbGluZyBpbiBEQU1PTiBzeXNmcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3lzZnMsIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzJiMzNDssCiAgICAmIzM0O2RhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgREFNT04gbG9naWMgdG8gcHJvcGVybHkgaW5pdGlhbGl6ZSBhbmQgY29tbWl0IHRoZSBgbGFzdF9wc2lfdG90YWxgIGZvciB0aGUgYERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AgcXVvdGEgbWV0cmljLiBJdCBhbHNvIGZpeGVzIHRoZSBgbmV4dF9yZWZyZXNoX2ppZmZpZXNgIGhhbmRsaW5nIGluIERBTU9OIHN5c2ZzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzeXNmcywgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBidWcgd2hlcmUgdGhlIGBsYXN0X3BzaV90b3RhbGAgZmllbGQgaW4gYHN0cnVjdCBkYW1vc19xdW90YV9nb2FsYCBpcyBsZWZ0IHVuaW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uLiBUaGUgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB1c2luZyBga21hbGxvY19vYmooKWAgKHdoaWNoIG1hcHMgdG8gYGttYWxsb2NgIGFuZCBkb2VzIG5vdCB6ZXJvIG1lbW9yeSkgaW4gYGRhbW9zX25ld19xdW90YV9nb2FsKClgLCBidXQgYGxhc3RfcHNpX3RvdGFsYCB3YXMgbm90IGluaXRpYWxpemVkLiBEdXJpbmcgdGhlIGZpcnN0IGV2YWx1YXRpb24gY3ljbGUsIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKClgIHJlYWRzIHRoaXMgdW5pbml0aWFsaXplZCBmaWVsZCB0byBjb21wdXRlIGBnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBub3dfcHNpX3RvdGFsIC0gZ29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbDtgLiBUaGlzIHVuaW5pdGlhbGl6ZWQgcmVzdWx0IGlzIHN1YnNlcXVlbnRseSB1c2VkIGluIGEgY29uZGl0aW9uYWwgYnJhbmNoICh2aWEgdGhlIGBtYXgoKWAgbWFjcm8pIGluIGBkYW1vc19xdW90YV9zY29yZSgpYCB0byBkZXRlcm1pbmUgdGhlIGhpZ2hlc3QgcXVvdGEgc2NvcmUsIHdoaWNoIGRpY3RhdGVzIG1lbW9yeSByZWNsYWltIGJlaGF2aW9yLlxuXG5TdGFuZGFyZCBLQVNBTiBvbmx5IGRldGVjdHMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWUgYnVnczsgaXQgZG9lcyBub3QgdHJhY2sgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIHdvdWxkIGNvbXBsZXRlbHkgbWlzcyB0aGlzIGJ1Zy4gS01TQU4sIG9uIHRoZSBvdGhlciBoYW5kLCB0cmFja3MgdW5pbml0aWFsaXplZCBtZW1vcnkgYXQgdGhlIGJpdCBsZXZlbCBhbmQgd2lsbCByZWxpYWJseSBmbGFnIHRoZSB1c2Ugb2YgdGhlIHVuaW5pdGlhbGl6ZWQgdmFsdWUgd2hlbiBpdCBhZmZlY3RzIGNvbnRyb2wgZmxvdyAoZS5nLiwgaW4gdGhlIGBtYXgoKWAgY29tcGFyaXNvbikuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBoaWdobHkganVzdGlmaWVkIHRvIGNhdGNoIHRoaXMgYW5kIHNpbWlsYXIgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGluIHRoZSBEQU1PTiBzdWJzeXN0ZW0uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDE2ZGVhZThjYTgzMDUzYzY5ZWQ4M2ViMDRiZmZlOGQ5YTM0YjI4NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDI3IDA0OjQxOjU3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jCmluZGV4IDY0NGRhZjVhMTY1NjAuLjZmMzYwZDYxMzkwYWQgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmMKQEAgLTExMjIsNiAmIzQzOzExMjIsOSBAQCBzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbigKIAkJc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKnNyYykKIHsKIAlzd2l0Y2ggKGRzdC0mZ3Q7bWV0cmljKSB7CiYjNDM7CWNhc2UgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTOgomIzQzOwkJZHN0LSZndDtsYXN0X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKTsKJiM0MzsJCWJyZWFrOwogCWNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fVVNFRF9CUDoKIAljYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlA6CiAJCWRzdC0mZ3Q7bmlkID0gc3JjLSZndDtuaWQ7CkBAIC0xMTQzLDcgJiM0MzsxMTQ2LDYgQEAgc3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoCiAJZHN0LSZndDt0YXJnZXRfdmFsdWUgPSBzcmMtJmd0O3RhcmdldF92YWx1ZTsKIAlpZiAoZHN0LSZndDttZXRyaWMgPT0gREFNT1NfUVVPVEFfVVNFUl9JTlBVVCkKIAkJZHN0LSZndDtjdXJyZW50X3ZhbHVlID0gc3JjLSZndDtjdXJyZW50X3ZhbHVlOwotCS8qIGtlZXAgbGFzdF9wc2lfdG90YWwgYXMgaXMsIHNpbmNlIGl0IHdpbGwgYmUgdXBkYXRlZCBpbiBuZXh0IGN5Y2xlICovCiAJZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oZHN0LCBzcmMpOwogfQogCkBAIC0zNzI3LDYgJiM0MzszNzI5LDE3IEBAIHN0YXRpYyBpbnQga2RhbW9uZF93YWl0X2FjdGl2YXRpb24oc3RydWN0IGRhbW9uX2N0eCAqY3R4KQogCXJldHVybiAtRUJVU1k7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBkYW1vc19pbml0X3F1b3RhX2dvYWxfbGFzdF9wc2koc3RydWN0IGRhbW9zICpzKQomIzQzO3sKJiM0MzsJc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7CiYjNDM7CiYjNDM7CWRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgJmFtcDtzLSZndDtxdW90YSkgewomIzQzOwkJaWYgKGdvYWwtJmd0O21ldHJpYyAhPSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlnb2FsLSZndDtsYXN0X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGtkYW1vbmRfaW5pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqY3R4KQogewogCXVuc2lnbmVkIGxvbmcgc2FtcGxlX2ludGVydmFsID0gY3R4LSZndDthdHRycy5zYW1wbGVfaW50ZXJ2YWwgPwpAQCAtMzc0Myw2ICYjNDM7Mzc1Niw3IEBAIHN0YXRpYyB2b2lkIGtkYW1vbmRfaW5pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqY3R4KQogCWRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzY2hlbWUsIGN0eCkgewogCQlkYW1vc19zZXRfbmV4dF9hcHBseV9zaXMoc2NoZW1lLCBjdHgpOwogCQlkYW1vc19zZXRfZmlsdGVyc19kZWZhdWx0X3JlamVjdChzY2hlbWUpOwomIzQzOwkJZGFtb3NfaW5pdF9xdW90YV9nb2FsX2xhc3RfcHNpKHNjaGVtZSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy5jIGIvbW0vZGFtb24vc3lzZnMuYwppbmRleCBlMzg1OGZmYWI0YjIyLi5mMDViMjU2YzkwZWU3IDEwMDY0NAotLS0gYS9tbS9kYW1vbi9zeXNmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3N5c2ZzLmMKQEAgLTE3ODksNiAmIzQzOzE3ODksNyBAQCBzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCB7CiAJc3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHRzICpjb250ZXh0czsKIAlzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9jdHg7CiAJdW5zaWduZWQgaW50IHJlZnJlc2hfbXM7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbmV4dF9yZWZyZXNoX2ppZmZpZXM7CiB9OwogCiBzdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmRhbW9uX3N5c2ZzX2tkYW1vbmRfYWxsb2Modm9pZCkKQEAgLTIyMTUsMTcgJiM0MzsyMjE2LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zeXNmc19idWlsZF9jdHgoCiAJcmV0dXJuIGN0eDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllczsKLQogc3RhdGljIGludCBkYW1vbl9zeXNmc19yZXBlYXRfY2FsbF9mbih2b2lkICpkYXRhKQogewogCXN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICpzeXNmc19rZGFtb25kID0gZGF0YTsKIAogCWlmICghc3lzZnNfa2RhbW9uZC0mZ3Q7cmVmcmVzaF9tcykKIAkJcmV0dXJuIDA7Ci0JaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXMpKQomIzQzOwlpZiAodGltZV9iZWZvcmUoamlmZmllcywgc3lzZnNfa2RhbW9uZC0mZ3Q7bmV4dF9yZWZyZXNoX2ppZmZpZXMpKQogCQlyZXR1cm4gMDsKLQlkYW1vbl9zeXNmc19uZXh0X3VwZGF0ZV9qaWZmaWVzID0gamlmZmllcyAmIzQzOwomIzQzOwlzeXNmc19rZGFtb25kLSZndDtuZXh0X3JlZnJlc2hfamlmZmllcyA9IGppZmZpZXMgJiM0MzsKIAkJbXNlY3NfdG9famlmZmllcyhzeXNmc19rZGFtb25kLSZndDtyZWZyZXNoX21zKTsKIAogCWlmICghbXV0ZXhfdHJ5bG9jaygmYW1wO2RhbW9uX3N5c2ZzX2xvY2spKQpAQCAtMjI3Myw4ICYjNDM7MjI3Miw4IEBAIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZCkKIAl9CiAJa2RhbW9uZC0mZ3Q7ZGFtb25fY3R4ID0gY3R4OwogCi0JZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllcyA9Ci0JCWppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhrZGFtb25kLSZndDtyZWZyZXNoX21zKTsKJiM0MzsJa2RhbW9uZC0mZ3Q7bmV4dF9yZWZyZXNoX2ppZmZpZXMgPSBqaWZmaWVzICYjNDM7CiYjNDM7CQltc2Vjc190b19qaWZmaWVzKGtkYW1vbmQtJmd0O3JlZnJlc2hfbXMpOwogCiAJcmVwZWF0X2NhbGxfY29udHJvbC0mZ3Q7Zm4gPSBkYW1vbl9zeXNmc19yZXBlYXRfY2FsbF9mbjsKIAlyZXBlYXRfY2FsbF9jb250cm9sLSZndDtkYXRhID0ga2RhbW9uZDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA0OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMTIKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqREFNT04gUGF0Y2ggQW5hbHlzaXM6IFBTSSBJbnRlZ3JhdGlvbiBhbmQgU3lzZnMgRW5oYW5jZW1lbnRzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgREFNT04gcGF0Y2guIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3ZlIGdvdCBjaGFuZ2VzIGluIGBtbS9kYW1vbi9jb3JlLmNgIGFuZCBgbW0vZGFtb24vc3lzZnMuY2AsIGZvY3VzaW5nIG9uIGludGVncmF0aW5nIFBTSSAoUHJlc3N1cmUgU3RhbGwgSW5mb3JtYXRpb24pIG1ldHJpY3MgYW5kIGltcHJvdmluZyB0aGUgc3lzZnMgaW50ZXJmYWNlLgoKRmlyc3QsIGluIGBtbS9kYW1vbi9jb3JlLmNgLCB0aGUga2V5IGFkanVzdG1lbnQgc2VlbXMgdG8gYmUgaW50ZWdyYXRpbmcgYERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AuIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbmAgaXMgbm93IHVwZGF0ZWQgdG8gaGFuZGxlIHRoaXMgcXVvdGEgdHlwZS4gQ3JpdGljYWxseSwgd2UmIzM5O3JlIGdyYWJiaW5nIHRoZSB0b3RhbCBQU0kgbWV0cmljcyB1c2luZyBgZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpYCBhbmQgc3RvcmluZyB0aGVtIGluIGBkc3QtJmd0O2xhc3RfcHNpX3RvdGFsYC4gVGhpcyBzdHJvbmdseSBpbXBsaWVzIHRoYXQgd2UmIzM5O3JlIHVzaW5nIFBTSSBkYXRhIHRvIGluZm9ybSBvdXIgcXVvdGEgZGVjaXNpb25zLCB3aGljaCBpcyBhIHNpZ25pZmljYW50IGFkZGl0aW9uIGZvciBtb3JlIGludGVsbGlnZW50IG1lbW9yeSBtYW5hZ2VtZW50LiBUaGVyZSBhcmUgc29tZSBtaW5vciB0d2Vha3MgdG8gZXhpc3RpbmcgZnVuY3Rpb25zLiBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxgIGhhcyBhIGNvbW1lbnQgcmVtb3ZlZCwgYW5kIGEgbmV3IGZ1bmN0aW9uLCBgZGFtb3NfaW5pdF9xdW90YV9nb2FsX2xhc3RfcHNpYCwgaGFzIGJlZW4gaW50cm9kdWNlZCwgd2hpY2ggZG9lcyB3aGF0IHRoZSBuYW1lIGltcGxpZXM6IGluaXRpYWxpemVzIGBnb2FsLSZndDtsYXN0X3BzaV90b3RhbGAgZm9yIHRoZSBgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTYCBzY2hlbWUuIFRoaXMgaW5pdGlhbGl6YXRpb24gaXMgZXNzZW50aWFsLCBhbmQgaXQmIzM5O3MgZ29vZCB0byBzZWUgaXQgYWRkcmVzc2VkIGRpcmVjdGx5IHdpdGhpbiB0aGUgY29udGV4dCBpbml0aWFsaXphdGlvbiAoYGtkYW1vbmRfaW5pdF9jdHhgKS4KCk5vdywgZmxpcHBpbmcgb3ZlciB0byBgbW0vZGFtb24vc3lzZnMuY2AsIHRoZSBtb2RpZmljYXRpb25zIHNlZW0gY2VudGVyZWQgYXJvdW5kIHJlZmluaW5nIHRoZSB1cGRhdGUgbWVjaGFuaXNtIGFuZCB0eWluZyBpdCB0byBQU0kgaW50ZWdyYXRpb24uIEEga2V5IGNoYW5nZSBpcyB0aGUgYWRkaXRpb24gb2YgYSBuZXcgZmllbGQsIGB1bnNpZ25lZCBsb25nIG5leHRfcmVmcmVzaF9qaWZmaWVzYCwgd2l0aGluIHRoZSBgc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmRgLiBUaGUgZ2xvYmFsIHZhcmlhYmxlIGBkYW1vbl9zeXNmc19uZXh0X3VwZGF0ZV9qaWZmaWVzYCBoYXMgYmVlbiByZW1vdmVkLCByZXBsYWNlZCBieSB0aGlzIHBlci1pbnN0YW5jZSBmaWVsZC4gVGhpcyBjaGFuZ2UgaXMgaW1wb3J0YW50IGJlY2F1c2UgaXQgbWFrZXMgdGhlIHJlZnJlc2ggbWVjaGFuaXNtIG1vcmUgZmxleGlibGUgYW5kIHBvdGVudGlhbGx5IGFsbG93cyBmb3IgZGlmZmVyZW50IHVwZGF0ZSBmcmVxdWVuY2llcyBmb3IgZGlmZmVyZW50IERBTU9OIGluc3RhbmNlcy4gVGhpcyBtYWtlcyBzZW5zZSBmcm9tIGEgcGVyZm9ybWFuY2UgcGVyc3BlY3RpdmUuIGBkYW1vbl9zeXNmc19yZXBlYXRfY2FsbF9mbmAgbm93IHVzZXMgYHN5c2ZzX2tkYW1vbmQtJmd0O25leHRfcmVmcmVzaF9qaWZmaWVzYC4gSSYjMzk7bGwgd2FudCB0byBlbnN1cmUgdGhpcyBpc24mIzM5O3QgY3JlYXRpbmcgYW55IHVuZXhwZWN0ZWQgcmFjZSBjb25kaXRpb25zIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyBhbmQgdGhhdCB0aGUgY29ycmVjdCBqaWZmaWVzIGFyZSBiZWluZyBzZXQuIFRoZSBpbml0aWFsaXphdGlvbiBvZiBga2RhbW9uZC0mZ3Q7bmV4dF9yZWZyZXNoX2ppZmZpZXNgIGR1cmluZyBgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbmAgaXMgdGhlIGZpbmFsIHBpZWNlIG9mIHRoZSBwdXp6bGUuCgpGaW5hbGx5LCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmRgIGlzIGJlaW5nIGFsbG9jYXRlZC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBpdCBpcyBiZWluZyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2NgLiBJJiMzOTtsbCB3YW50IHRvIGNoZWNrIHRoYXQgdGhpcyBhbGxvY2F0aW9uIGlzIGhhbmRsZWQgY29ycmVjdGx5IGJ5IGBkYW1vbl9zeXNmc19rZGFtb25kX2FsbG9jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fc3lzZnNfa2RhbW9uZF9hbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYz0xNzg3PXN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kIHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTE3OTQtXG5tbS9kYW1vbi9zeXNmcy5jOjE3OTU6c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICpkYW1vbl9zeXNmc19rZGFtb25kX2FsbG9jKHZvaWQpXG5tbS9kYW1vbi9zeXNmcy5jLTE3OTYte1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjU0Nz1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2tkYW1vbmRzX2FkZF9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kcyAqa2RhbW9uZHMsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yNTY2LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfa2RhbW9uZHM7IGkmIzQzOyYjNDM7KSB7XG5tbS9kYW1vbi9zeXNmcy5jOjI1Njc6XHRcdGtkYW1vbmQgPSBkYW1vbl9zeXNmc19rZGFtb25kX2FsbG9jKCk7XG5tbS9kYW1vbi9zeXNmcy5jLTI1NjgtXHRcdGlmICgha2RhbW9uZCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Mzg2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgZGFtb25fc3lzZnNfa2RhbW9uZF9hbGxvY2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgYGRhbW9uX3N5c2ZzX2tkYW1vbmRfYWxsb2NgIGlzIGltcGxlbWVudGVkLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiwgYW5kIGEgZ29vZCBncmFzcCBvZiBpdHMgc3BlY2lmaWNzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgREFNT04gKERhdGEgQWNjZXNzIE1PTml0b3IpIHN5c3RlbSBhbmQgaXRzIGludGVyYWN0aW9ucyB3aXRoIHRoZSBzeXNmcyBpbnRlcmZhY2UuIEkgbmVlZCB0byB3YWxrIHRocm91Z2ggdGhlIGNvZGUgYW5kIHF1aWNrbHkgcmVjYWxsIHRoZSBhbGxvY2F0aW9uIGxvZ2ljLiBJIHNob3VsZCBmb2N1cyBvbiBob3cgaXQgaGFuZGxlcyBtZW1vcnksIHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQgdXNlcywgcG90ZW50aWFsIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMsIGFuZCB0aGUgb3ZlcmFsbCBlZmZpY2llbmN5IG9mIGl0cyBhbGxvY2F0aW9uIHNjaGVtZS4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IGdvdGNoYXMgaW4gdGhpcyBhbGxvY2F0aW9uIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3OTU6XHRzdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmRhbW9uX3N5c2ZzX2tkYW1vbmRfYWxsb2Modm9pZClcbjE3OTY6XHR7XG4xNzk3Olx0XHRyZXR1cm4ga3phbGxvY19vYmooc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQpO1xuMTc5ODpcdH1cbjE3OTk6XHRcbjE4MDA6XHRzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2tkYW1vbmRfYWRkX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXG4xODAxOlx0e1xuMTgwMjpcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHRzICpjb250ZXh0cztcbjE4MDM6XHRcdGludCBlcnI7XG4xODA0Olx0XG4xODA1Olx0XHRjb250ZXh0cyA9IGRhbW9uX3N5c2ZzX2NvbnRleHRzX2FsbG9jKCk7XG4xODA2Olx0XHRpZiAoIWNvbnRleHRzKVxuMTgwNzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjE4MDg6XHRcbjE4MDk6XHRcdGVyciA9IGtvYmplY3RfaW5pdF9hbmRfYWRkKFx1MDAyNmNvbnRleHRzLVx1MDAzZWtvYmosXG4xODEwOlx0XHRcdFx0XHUwMDI2ZGFtb25fc3lzZnNfY29udGV4dHNfa3R5cGUsIFx1MDAyNmtkYW1vbmQtXHUwMDNla29iaixcbjE4MTE6XHRcdFx0XHRcJiMzNDtjb250ZXh0c1wmIzM0Oyk7XG4xODEyOlx0XHRpZiAoZXJyKSB7XG4xODEzOlx0XHRcdGtvYmplY3RfcHV0KFx1MDAyNmNvbnRleHRzLVx1MDAzZWtvYmopO1xuMTgxNDpcdFx0XHRyZXR1cm4gZXJyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTI2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFNT04gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgREFNT04gcGF0Y2gsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyB1c2luZyBga3phbGxvY19vYmpgLCB3aGljaCBzdHJvbmdseSBzdWdnZXN0cyB0aGUgbWVtb3J5IGlzIGJlaW5nIHplcm9lZCBvdXQuIFRoYXQmIzM5O3MgZ29vZCB0byBzZWUuIFRoZSBzZWNvbmQgYXJlYSBvZiBjb25jZXJuIEkgaGF2ZSBpcyB0aGUgY2hhbmdlIGluIGBtbS9kYW1vbi9jb3JlLmNgLCBzcGVjaWZpY2FsbHkgaG93IGBsYXN0X3BzaV90b3RhbGAgaXMgaW5pdGlhbGl6ZWQuIFdhaXQsIG5vdyB0aGF0IEkgdGhpbmsgYWJvdXQgaXQsIGBsYXN0X3BzaV90b3RhbGAgZ2V0cyBpbml0aWFsaXplZCBpbiBgZGFtb3NfaW5pdF9xdW90YV9nb2FsX2xhc3RfcHNpYCB3aGVuIGBrZGFtb25kX2luaXRfY3R4YCBpcyBjYWxsZWQuCgpUaGUga2V5IHF1ZXN0aW9uIGluIG15IG1pbmQgaXMgYWx3YXlzOiBJcyB0aGVyZSBhIHBvdGVudGlhbCBmb3IgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBpbmZvcm1hdGlvbiBsZWFrIGhlcmU/IExldCYjMzk7cyBkaWcgZGVlcGVyLiBUaGUgY2hhbmdlcyBhcHBlYXIgdG8gYmUgbG9naWMgZml4ZXMuIFNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZToKCjEuICBgbGFzdF9wc2lfdG90YWxgIHdhc24mIzM5O3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQgd2hlbiB0aGUgY29udGV4dCB3YXMgc3RhcnRlZCwgb3Igd2FzbiYjMzk7dCB1cGRhdGVkIGNvcnJlY3RseSBpbiBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb25gLgoyLiAgYGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXNgIHdhcyBhIGdsb2JhbCB2YXJpYWJsZS4gVGhpcyBtZWFucyBtdWx0aXBsZSBrZGFtb25kcyBjb3VsZCBzdGVwIG9uIGVhY2ggb3RoZXIsIGNhdXNpbmcgc2VyaW91cyBidWdzLiBTbywgdGhleSBtb3ZlZCBpdCB0byBgc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmRgLgoKR2l2ZW4gdGhhdCwgbXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBuZWl0aGVyIG9mIHRoZXNlIGNoYW5nZXMgZGlyZWN0bHkgaW50cm9kdWNlIGEgcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2Vyc3BhY2UsIG9yIHVzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGEgd2F5IHRoYXQgS01TQU4gd291bGQgdW5pcXVlbHkgZmxhZy4gVGhlIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIGBkYW1vbl9zeXNmc19rZGFtb25kYCBpcyB6ZXJvZWQsIGFuZCB0aGUgYGxhc3RfcHNpX3RvdGFsYCBpcyBhIGZpZWxkIGluIGBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbGAsIHdoaWNoIGlzIGxpa2VseSB6ZXJvLWluaXRpYWxpemVkIHVwb24gYWxsb2NhdGlvbi4gSG93ZXZlciwgYmV0dGVyIHRvIGJlIGNlcnRhaW4gdGhhbiBzb3JyeS4gTGV0JiMzOTtzIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYGRhbW9zX3F1b3RhX2dvYWxgIGFsbG9jYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA0OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3NfcXVvdGFfZ29hbC4qYWxsb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjczCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIE5ldyBRdW90YSBHb2FsKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgIHZhcmlhYmxlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgY29uc2lkZXIgaXRzIGNvbnRleHQgd2l0aGluIHRoZSBicm9hZGVyIGBkYW1vc2AgZnJhbWV3b3JrLiBJcyB0aGlzIGEgbmV3IGdvYWwgYmVpbmcgaW50cm9kdWNlZD8gQSByZXZpc2lvbiBvZiBhbiBleGlzdGluZyBvbmU/IEFuZCB3aGF0JiMzOTtzIHRoZSBleHBlY3RlZCBpbXBhY3Q/IEkmIzM5O20gYWxyZWFkeSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgZG93bnN0cmVhbSBkZXBlbmRlbmNpZXM7IHdoaWNoIG1vZGVscywgcmVwb3J0cywgb3IgZGFzaGJvYXJkcyByZWx5IG9uIHRoaXMgcGFydGljdWxhciBxdW90YT8KCkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc3RydWN0dXJlLiBJcyB0aGlzIGEgc2NhbGFyIHZhbHVlLCBhIGRpc3RyaWJ1dGlvbiwgb3Igc29tZXRoaW5nIG1vcmUgY29tcGxleD8gVGhlIGZvcm1hdCB3aWxsIGRpY3RhdGUgaG93IEkmIzM5O2xsIHZhbGlkYXRlIGl0IGFuZCBpZGVudGlmeSBwb3RlbnRpYWwgaXNzdWVzLiBBcmUgdGhlcmUgYW55IGFzc29jaWF0ZWQgbWV0YWRhdGEgdGFncyBvciBkb2N1bWVudGF0aW9uIEkgc2hvdWxkIGJlIHJldmlld2luZz8gQ2hlY2tpbmcgdGhlIHNjaGVtYSBvciBkYXRhIGRpY3Rpb25hcnkgd291bGQgYmUgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIHRvIHVuZGVyc3RhbmQgdGhlIGlucHV0IHR5cGVzLCB2YWxpZGl0eSBjb25zdHJhaW50cywgYW5kIHRoZSBhY2NlcHRhYmxlIHJhbmdlLgoKQXNzdW1pbmcgdGhpcyBpcyBuZXcgb3IgbW9kaWZpZWQsIEkgbmVlZCB0byBldmFsdWF0ZSB0aGUgaW1wbGljYXRpb25zIGZvciBmb3JlY2FzdGluZy4gRG9lcyB0aGlzIGNoYW5nZSBuZWNlc3NpdGF0ZSByZS1jYWxpYnJhdGlvbiBvZiBhbnkgcHJlZGljdGl2ZSBtb2RlbHM/IFdoYXQgYWJvdXQgaGlzdG9yaWNhbCBjb21wYXJpc29ucz8gV2lsbCB0aGlzIGNoYW5nZSBhZmZlY3Qgb3VyIGFiaWxpdHkgdG8gYWNjdXJhdGVseSBtZWFzdXJlIHBlcmZvcm1hbmNlIGFnYWluc3QgdGhlIG9yaWdpbmFsIHRhcmdldHM/IEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBjaGFuZ2UgYWZmZWN0cyB0aGUgb3ZlcmFsbCBwZXJmb3JtYW5jZSBtZXRyaWNzIGFuZCB3aGV0aGVyIG9yIG5vdCB0aGVyZSBhcmUgYW55IGltcGFjdHMgb24gdGhlIHJlcG9ydGluZy4KCkZyb20gdGhlcmUsIEkgd2FudCB0byBpbW1lZGlhdGVseSB0aGluayBhYm91dCB0aGUgaW1wYWN0IG9mIHRoaXMgcGFydGljdWxhciBnb2FsIG9uIGFueSBleGlzdGluZyBhbGVydHMgb3IgbW9uaXRvcmluZyBzeXN0ZW1zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlc2Ugc3lzdGVtcyByZWZsZWN0IHRoZSBuZXcgdGhyZXNob2xkLCBhbmQgaWYgbm90LCB3aGF0IHR5cGUgb2YgcmVtZWRpYXRpb24gaXMgcmVxdWlyZWQ/ClVsdGltYXRlbHksIG15IGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgY2hhbmdlIGlzIHJlYXNvbmFibGUsIHRob3JvdWdobHkgdmV0dGVkLCBhbmQgd2lsbCBpbnRlZ3JhdGUgc21vb3RobHkgaW50byB0aGUgZXhpc3Rpbmcgb3BlcmF0aW9uYWwgZW52aXJvbm1lbnQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBhbGwgZ29lcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vc19uZXdfcXVvdGFfZ29hbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9NjIxPXZvaWQgZGFtb3NfZGVzdHJveV9maWx0ZXIoc3RydWN0IGRhbW9zX2ZpbHRlciAqZilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNjI2LVxubW0vZGFtb24vY29yZS5jOjYyNzpzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZGFtb3NfbmV3X3F1b3RhX2dvYWwoXG5tbS9kYW1vbi9jb3JlLmMtNjI4LVx0XHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYyxcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTE2ND1pbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTE3OC1cdFx0XHRjb250aW51ZTtcbm1tL2RhbW9uL2NvcmUuYzoxMTc5Olx0XHRuZXdfZ29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKFxubW0vZGFtb24vY29yZS5jLTExODAtXHRcdFx0XHRzcmNfZ29hbC1cdTAwM2VtZXRyaWMsIHNyY19nb2FsLVx1MDAzZXRhcmdldF92YWx1ZSk7XG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz0yMjk9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hZGRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zICpob3Rfc2NoZW1lLFxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMjM3LVx0XHRyZXR1cm4gLUVJTlZBTDtcbm1tL2RhbW9uL2xydV9zb3J0LmM6MjM4Olx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX0FDVElWRV9NRU1fQlAsIGFjdGl2ZV9tZW1fYnApO1xubW0vZGFtb24vbHJ1X3NvcnQuYy0yMzktXHRpZiAoIWdvYWwpXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0yNDItXHQvKiBhaW0gMC4yICUgZ29hbCBjb25mbGljdCwgdG8ga2VlcCBsaXR0bGUgcGluZyBwb25nICovXG5tbS9kYW1vbi9scnVfc29ydC5jOjI0MzpcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9JTkFDVElWRV9NRU1fQlAsXG5tbS9kYW1vbi9scnVfc29ydC5jLTI0NC1cdFx0XHQxMDAwMCAtIGFjdGl2ZV9tZW1fYnAgJiM0MzsgMik7XG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTE5ND1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy0yMzUtXHRpZiAocXVvdGFfbWVtX3ByZXNzdXJlX3VzKSB7XG5tbS9kYW1vbi9yZWNsYWltLmM6MjM2Olx0XHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLFxubW0vZGFtb24vcmVjbGFpbS5jLTIzNy1cdFx0XHRcdHF1b3RhX21lbV9wcmVzc3VyZV91cyk7XG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTI0My1cdGlmIChxdW90YV9hdXRvdHVuZV9mZWVkYmFjaykge1xubW0vZGFtb24vcmVjbGFpbS5jOjI0NDpcdFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX1VTRVJfSU5QVVQsIDEwMDAwKTtcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNDUtXHRcdGlmICghZ29hbClcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjg0Nz1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX2FkZF9xdW90YV9zY29yZShcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg2MC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODYxOlx0XHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoc3lzZnNfZ29hbC1cdTAwM2VtZXRyaWMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg2Mi1cdFx0XHRcdHN5c2ZzX2dvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlKTtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9ODM0PXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxzX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg1Mi1cdFx0ICovXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODUzOlx0XHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoZHN0X2dvYWxzW2ldLm1ldHJpYyxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NTQtXHRcdFx0XHRkc3RfZ29hbHNbaV0udGFyZ2V0X3ZhbHVlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzAxNAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBOZXcgUXVvdGEgR29hbCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGRhbW9zX25ld19xdW90YV9nb2FsYCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIGl0cyBvdmVyYWxsIGxvZ2ljIGFuZCBtYWtlIHN1cmUgaXQgYWxpZ25zIHdpdGggdGhlIHVwZGF0ZWQgcmVxdWlyZW1lbnRzLiBJIHdhbnQgdG8gY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgZWRnZSBjYXNlcyB0aGF0IG1pZ2h0IGhhdmUgYmVlbiBtaXNzZWQgaW4gdGhlIGluaXRpYWwgZGVzaWduLiBUaGluZ3MgbGlrZSBob3cgaXQgaGFuZGxlcyBzY2VuYXJpb3Mgd2l0aCB6ZXJvIHF1b3RhLCBxdW90YXMgdGhhdCBhcmUgdXBkYXRlZCBtaWQtY3ljbGUsIGFuZCBuZWdhdGl2ZSB2YWx1ZXMsIGlmIHRob3NlIGFyZSBldmVuIHBlcm1pdHRlZC4gSSBuZWVkIHRvIGV4YW1pbmUgdGhlIHNwZWNpZmljIGNhbGN1bGF0aW9ucywgZW5zdXJpbmcgdGhleSYjMzk7cmUgY29tcHV0YXRpb25hbGx5IGVmZmljaWVudCBhbmQgY29ycmVjdGx5IGFjY291bnQgZm9yIGFueSBpbmhlcml0ZWQgb3Igc2hhcmVkIHJlc291cmNlcy4gQXJlIHdlIGFjY3VyYXRlbHkgcmVmbGVjdGluZyB0aGUgbmV3IGdvYWwgd2l0aGluIHRoZSBxdW90YSBzeXN0ZW0mIzM5O3MgZXhpc3RpbmcgZnJhbWV3b3JrPyBJIGFsc28gd2FudCB0byB2ZXJpZnkgaXQgaW50ZWdyYXRlcyBzZWFtbGVzc2x5IHdpdGggYW55IG1vbml0b3JpbmcgYW5kIGFsZXJ0aW5nIHN5c3RlbXMgd2UgaGF2ZSBpbiBwbGFjZS4gRmluYWxseSwgSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgYW55IGRhdGEgZGVwZW5kZW5jaWVzIGFyZSBwcm9wZXJseSBoYW5kbGVkLiBUaGUgbGFzdCB0aGluZyBJIHdhbnQgaXMgYSBjYXNjYWRpbmcgZXJyb3IgZHVlIHRvIGEgc2ltcGxlIG92ZXJzaWdodC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBjb2RlIHJldmlldyBhbmQgdHJhY2UgdGhyb3VnaCBhIGZldyByZXByZXNlbnRhdGl2ZSB1c2UgY2FzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA0OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjI3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2Mjc6XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZGFtb3NfbmV3X3F1b3RhX2dvYWwoXG4gNjI4Olx0XHRcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljLFxuIDYyOTpcdFx0XHR1bnNpZ25lZCBsb25nIHRhcmdldF92YWx1ZSlcbiA2MzA6XHR7XG4gNjMxOlx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcbiA2MzI6XHRcbiA2MzM6XHRcdGdvYWwgPSBrbWFsbG9jX29iaigqZ29hbCk7XG4gNjM0Olx0XHRpZiAoIWdvYWwpXG4gNjM1Olx0XHRcdHJldHVybiBOVUxMO1xuIDYzNjpcdFx0Z29hbC1cdTAwM2VtZXRyaWMgPSBtZXRyaWM7XG4gNjM3Olx0XHRnb2FsLVx1MDAzZXRhcmdldF92YWx1ZSA9IHRhcmdldF92YWx1ZTtcbiA2Mzg6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmdvYWwtXHUwMDNlbGlzdCk7XG4gNjM5Olx0XHRyZXR1cm4gZ29hbDtcbiA2NDA6XHR9XG4gNjQxOlx0XG4gNjQyOlx0dm9pZCBkYW1vc19hZGRfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnEsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnKVxuIDY0MzpcdHtcbiA2NDQ6XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2Zy1cdTAwM2VsaXN0LCBcdTAwMjZxLVx1MDAzZWdvYWxzKTtcbiA2NDU6XHR9XG4gNjQ2Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA0OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NzAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYSBOb24tWmVyb2luZyBBbGxvY2F0aW9uKioKCk9rYXksIEkgc2VlIGBrbWFsbG9jX29iamAgYmVpbmcgdXNlZCBmb3IgdGhpcyBhbGxvY2F0aW9uLiBIbW0sIGludGVyZXN0aW5nLiBVbmxpa2Ugc29tZSBvZiB0aGUgb3RoZXIgYWxsb2NhdGlvbiBtZXRob2RzIEkmIzM5O20gZmFtaWxpYXIgd2l0aCwgdGhpcyBkb2VzbiYjMzk7dCBndWFyYW50ZWUgemVyb2VkIG1lbW9yeSwgd2hpY2ggY291bGQgbGVhZCB0byBzb21lIGludGVyZXN0aW5nIGFuZCBwb3RlbnRpYWxseSBuYXN0eSBidWdzIGlmIHdlIGFyZW4mIzM5O3QgY2FyZWZ1bCBhYm91dCBpbml0aWFsaXphdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGhhbmRsZWQgY29ycmVjdGx5IGRvd25zdHJlYW0uIFdhaXQgYSBtaW51dGUuLi4gYGttYWxsb2Nfb2JqYD8gSSBkb24mIzM5O3QgcmVjYWxsIHNlZWluZyB0aGF0IG1hY3JvIGJlZm9yZS4gSXQmIzM5O3Mgbm90IGltbWVkaWF0ZWx5IGZhbWlsaWFyIHRvIG1lLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCB0aGF0IG1hY3JvIGFjdHVhbGx5ICpkb2VzKi4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBga21hbGxvY19vYmpgIHRvIGNvbmZpcm0gd2hldGhlciBteSBhc3N1bXB0aW9uIGFib3V0IHRoZSBsYWNrIG9mIHplcm9pbmcgaXMgY29ycmVjdCwgYW5kIHdoYXQga2luZCBvZiBndWFyYW50ZWVzLCBpZiBhbnksIGl0IHByb3ZpZGVzIGFib3V0IG1lbW9yeSBhbGxvY2F0aW9uIGJlaGF2aW9yLiBHb3R0YSBmaW5kIHRoZSBoZWFkZXIgd2hlcmUgaXQmIzM5O3MgZGVmaW5lZC4gTGV0JiMzOTtzIGxvb2sgdGhhdCB1cCBmaXJzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a21hbGxvY19vYmomIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTExND1zdHJ1Y3QgZGFtb25fZmlsdGVyICpkYW1vbl9uZXdfZmlsdGVyKGVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZSxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTE4LVxubW0vZGFtb24vY29yZS5jOjExOTpcdGZpbHRlciA9IGttYWxsb2Nfb2JqKCpmaWx0ZXIpO1xubW0vZGFtb24vY29yZS5jLTEyMC1cdGlmICghZmlsdGVyKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNjI9c3RydWN0IGRhbW9uX3Byb2JlICpkYW1vbl9uZXdfcHJvYmUodm9pZClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTY1LVxubW0vZGFtb24vY29yZS5jOjE2NjpcdHAgPSBrbWFsbG9jX29iaigqcCk7XG5tbS9kYW1vbi9jb3JlLmMtMTY3LVx0aWYgKCFwKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz01Njk9c3RydWN0IGRhbW9zX2ZpbHRlciAqZGFtb3NfbmV3X2ZpbHRlcihlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHR5cGUsXG4tLVxubW0vZGFtb24vY29yZS5jLTU3My1cbm1tL2RhbW9uL2NvcmUuYzo1NzQ6XHRmaWx0ZXIgPSBrbWFsbG9jX29iaigqZmlsdGVyKTtcbm1tL2RhbW9uL2NvcmUuYy01NzUtXHRpZiAoIWZpbHRlcilcbi0tXG5tbS9kYW1vbi9jb3JlLmM9NjI3PXN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19uZXdfcXVvdGFfZ29hbChcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNjMyLVxubW0vZGFtb24vY29yZS5jOjYzMzpcdGdvYWwgPSBrbWFsbG9jX29iaigqZ29hbCk7XG5tbS9kYW1vbi9jb3JlLmMtNjM0LVx0aWYgKCFnb2FsKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz02ODI9c3RydWN0IGRhbW9zICpkYW1vbl9uZXdfc2NoZW1lKHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiAqcGF0dGVybixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNjkwLVxubW0vZGFtb24vY29yZS5jOjY5MTpcdHNjaGVtZSA9IGttYWxsb2Nfb2JqKCpzY2hlbWUpO1xubW0vZGFtb24vY29yZS5jLTY5Mi1cdGlmICghc2NoZW1lKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz03NzY9c3RydWN0IGRhbW9uX3RhcmdldCAqZGFtb25fbmV3X3RhcmdldCh2b2lkKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy03NzktXG5tbS9kYW1vbi9jb3JlLmM6NzgwOlx0dCA9IGttYWxsb2Nfb2JqKCp0KTtcbm1tL2RhbW9uL2NvcmUuYy03ODEtXHRpZiAoIXQpXG4tLVxubW0vZGFtb24vc3RhdC5jPTg0PXN0YXRpYyBpbnQgZGFtb25fc3RhdF9zb3J0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX2N0eCAqYyxcbi0tXG5tbS9kYW1vbi9zdGF0LmMtOTUtXHRcdC8qIHRoZXJlIGlzIG9ubHkgb25lIHRhcmdldCAqL1xubW0vZGFtb24vc3RhdC5jOjk2Olx0XHRyZWdpb25fcG9pbnRlcnMgPSBrbWFsbG9jX29ianMoKnJlZ2lvbl9wb2ludGVycyxcbm1tL2RhbW9uL3N0YXQuYy05Ny1cdFx0XHRcdFx0ICAgICAgIGRhbW9uX25yX3JlZ2lvbnModCkpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jPTE2PXN0cnVjdCBkYW1vbl9zeXNmc191bF9yYW5nZSAqZGFtb25fc3lzZnNfdWxfcmFuZ2VfYWxsb2MoXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTkte1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmM6MjA6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UgKnJhbmdlID0ga21hbGxvY19vYmooKnJhbmdlKTtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTIxLVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz05MD1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX3Byb2Jlc19hZGRfZGlycyhzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmVzICpwcm9iZXMsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEwMi1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMDM6XHRwcm9iZXNfYXJyID0ga21hbGxvY19vYmpzKCpwcm9iZXNfYXJyLCBpKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMDQtXHRpZiAoIXByb2Jlc19hcnIpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE2MD1zdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fYWxsb2MoXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2Mi17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTYzOlx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnN5c2ZzX3JlZ2lvbiA9IGttYWxsb2Nfb2JqKCpzeXNmc19yZWdpb24pO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2NC1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MzA1PWRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX2FsbG9jKHZvaWQpXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA2LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMDc6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMgKnJlZ2lvbnMgPSBrbWFsbG9jX29iaigqcmVnaW9ucyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzA4LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz05MjU9c3RhdGljIGludCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyc19hZGRfZGlycyhcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtOTM0LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjkzNTpcdGZpbHRlcnNfYXJyID0ga21hbGxvY19vYmpzKCpmaWx0ZXJzX2FyciwgbnJfZmlsdGVycyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy05MzYtXHRcdFx0XHQgICBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTAyOT1zdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3dhdGVybWFya3MgKmRhbW9uX3N5c2ZzX3dhdGVybWFya3NfYWxsb2MoXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEwMzIte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEwMzM6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfd2F0ZXJtYXJrcyAqd2F0ZXJtYXJrcyA9IGttYWxsb2Nfb2JqKCp3YXRlcm1hcmtzKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMDM0LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNDc2PXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfYWRkX2RpcnMoXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0ODUtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ4NjpcdGdvYWxzX2FyciA9IGttYWxsb2Nfb2JqcygqZ29hbHNfYXJyLCBucl9nb2Fscyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDg3LVx0XHRcdFx0IEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNTc3PXN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfd2VpZ2h0cyAqZGFtb25fc3lzZnNfd2VpZ2h0c19hbGxvYyh1bnNpZ25lZCBpbnQgc3osXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE1Nzkte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE1ODA6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfd2VpZ2h0cyAqd2VpZ2h0cyA9IGttYWxsb2Nfb2JqKCp3ZWlnaHRzKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTgxLVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xOTYzPXN0cnVjdCBkYW1vbl9zeXNmc19hY2Nlc3NfcGF0dGVybiAqZGFtb25fc3lzZnNfYWNjZXNzX3BhdHRlcm5fYWxsb2Modm9pZClcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xOTY0LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxOTY1Olx0c3RydWN0IGRhbW9uX3N5c2ZzX2FjY2Vzc19wYXR0ZXJuICphY2Nlc3NfcGF0dGVybiA9IGttYWxsb2Nfb2JqKCphY2Nlc3NfcGF0dGVybik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTk2Ni1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjE1Nj1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX2Rlc3RzX2FkZF9kaXJzKFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMTY1LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIxNjY6XHRkZXN0c19hcnIgPSBrbWFsbG9jX29ianMoKmRlc3RzX2FyciwgbnJfZGVzdHMsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjE2Ny1cdFx0XHRcdCBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjMxOD1zdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZSAqZGFtb25fc3lzZnNfc2NoZW1lX2FsbG9jKFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMzIwLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMzIxOlx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZSAqc2NoZW1lID0ga21hbGxvY19vYmooKnNjaGVtZSk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjMyMi1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjcwMD1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NjaGVtZXNfYWRkX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnNjaGVtZXMsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI3MDktXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjcxMDpcdHNjaGVtZXNfYXJyID0ga21hbGxvY19vYmpzKCpzY2hlbWVzX2FyciwgbnJfc2NoZW1lcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNzExLVx0XHRcdFx0ICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTik7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI5NDk9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfbWlncmF0ZV9kZXN0KHN0cnVjdCBkYW1vcyAqc2NoZW1lLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTU0LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI5NTU6XHRkZXN0cy1cdTAwM2Vub2RlX2lkX2FyciA9IGttYWxsb2Nfb2JqcygqZGVzdHMtXHUwMDNlbm9kZV9pZF9hcnIsIHN5c2ZzX2Rlc3RzLVx1MDAzZW5yKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTU2LVx0aWYgKCFkZXN0cy1cdTAwM2Vub2RlX2lkX2Fycilcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTU3LVx0XHRyZXR1cm4gLUVOT01FTTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyOTU4Olx0ZGVzdHMtXHUwMDNld2VpZ2h0X2FyciA9IGttYWxsb2Nfb2JqcygqZGVzdHMtXHUwMDNld2VpZ2h0X2Fyciwgc3lzZnNfZGVzdHMtXHUwMDNlbnIpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5NTktXHRpZiAoIWRlc3RzLVx1MDAzZXdlaWdodF9hcnIpXG4tLVxubW0vZGFtb24vc3lzZnMuYz0xMTc9c3RhdGljIGludCBkYW1vbl9zeXNmc19yZWdpb25zX2FkZF9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19yZWdpb25zICpyZWdpb25zLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMTI2LVxubW0vZGFtb24vc3lzZnMuYzoxMjc6XHRyZWdpb25zX2FyciA9IGttYWxsb2Nfb2JqcygqcmVnaW9uc19hcnIsIG5yX3JlZ2lvbnMsXG5tbS9kYW1vbi9zeXNmcy5jLTEyOC1cdFx0XHRcdCAgIEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MzQ0PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdGFyZ2V0c19hZGRfZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfdGFyZ2V0cyAqdGFyZ2V0cyxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTM1My1cbm1tL2RhbW9uL3N5c2ZzLmM6MzU0Olx0dGFyZ2V0c19hcnIgPSBrbWFsbG9jX29ianMoKnRhcmdldHNfYXJyLCBucl90YXJnZXRzLFxubW0vZGFtb24vc3lzZnMuYy0zNTUtXHRcdFx0XHQgICBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTQ1ND1zdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX2ludGVydmFsc19nb2FsICpkYW1vbl9zeXNmc19pbnRlcnZhbHNfZ29hbF9hbGxvYyhcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTQ1Ny17XG5tbS9kYW1vbi9zeXNmcy5jOjQ1ODpcdHN0cnVjdCBkYW1vbl9zeXNmc19pbnRlcnZhbHNfZ29hbCAqZ29hbCA9IGttYWxsb2Nfb2JqKCpnb2FsKTtcbm1tL2RhbW9uL3N5c2ZzLmMtNDU5LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9NjExPXN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfaW50ZXJ2YWxzICpkYW1vbl9zeXNmc19pbnRlcnZhbHNfYWxsb2MoXG4tLVxubW0vZGFtb24vc3lzZnMuYy02MTQte1xubW0vZGFtb24vc3lzZnMuYzo2MTU6XHRzdHJ1Y3QgZGFtb25fc3lzZnNfaW50ZXJ2YWxzICppbnRlcnZhbHMgPSBrbWFsbG9jX29iaigqaW50ZXJ2YWxzKTtcbm1tL2RhbW9uL3N5c2ZzLmMtNjE2LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9ODg3PXN0YXRpYyBzc2l6ZV90IHBhdGhfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMuYy04OTEtXHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX2ZpbHRlciwga29iaik7XG5tbS9kYW1vbi9zeXNmcy5jOjg5MjpcdGNoYXIgKnBhdGggPSBrbWFsbG9jX29ianMoKnBhdGgsIHNpemVfYWRkKGNvdW50LCAxKSk7XG5tbS9kYW1vbi9zeXNmcy5jLTg5My1cbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTk3Mj1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2ZpbHRlcnNfYWRkX2RpcnMoXG4tLVxubW0vZGFtb24vc3lzZnMuYy05ODEtXG5tbS9kYW1vbi9zeXNmcy5jOjk4MjpcdGZpbHRlcnNfYXJyID0ga21hbGxvY19vYmpzKCpmaWx0ZXJzX2FyciwgbnJfZmlsdGVycyxcbm1tL2RhbW9uL3N5c2ZzLmMtOTgzLVx0XHRcdFx0ICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTik7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0xMTc0PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfcHJvYmVzX2FkZF9kaXJzKFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMTE4My1cbm1tL2RhbW9uL3N5c2ZzLmM6MTE4NDpcdHByb2Jlc19hcnIgPSBrbWFsbG9jX29ianMoKnByb2Jlc19hcnIsIG5yX3Byb2Jlcyxcbm1tL2RhbW9uL3N5c2ZzLmMtMTE4NS1cdFx0XHRcdCAgIEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MTI4Mz1zdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX2F0dHJzICpkYW1vbl9zeXNmc19hdHRyc19hbGxvYyh2b2lkKVxubW0vZGFtb24vc3lzZnMuYy0xMjg0LXtcbm1tL2RhbW9uL3N5c2ZzLmM6MTI4NTpcdHN0cnVjdCBkYW1vbl9zeXNmc19hdHRycyAqYXR0cnMgPSBrbWFsbG9jX29iaigqYXR0cnMpO1xubW0vZGFtb24vc3lzZnMuYy0xMjg2LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MTQxMj1zdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHQgKmRhbW9uX3N5c2ZzX2NvbnRleHRfYWxsb2MoXG4tLVxubW0vZGFtb24vc3lzZnMuYy0xNDE0LXtcbm1tL2RhbW9uL3N5c2ZzLmM6MTQxNTpcdHN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0ICpjb250ZXh0ID0ga21hbGxvY19vYmooKmNvbnRleHQpO1xubW0vZGFtb24vc3lzZnMuYy0xNDE2LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MTY4ND1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2NvbnRleHRzX2FkZF9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0cyAqY29udGV4dHMsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0xNjkzLVxubW0vZGFtb24vc3lzZnMuYzoxNjk0Olx0Y29udGV4dHNfYXJyID0ga21hbGxvY19vYmpzKCpjb250ZXh0c19hcnIsIG5yX2NvbnRleHRzLFxubW0vZGFtb24vc3lzZnMuYy0xNjk1LVx0XHRcdFx0ICAgIEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjAwMT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMDA0LXtcbm1tL2RhbW9uL3N5c2ZzLmM6MjAwNTpcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMgPSBrbWFsbG9jX29ianMoKnJhbmdlcyxcbm1tL2RhbW9uL3N5c2ZzLmMtMjAwNi1cdFx0XHRcdFx0XHQgICAgICAgc3lzZnNfcmVnaW9ucy1cdTAwM2Vucixcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIyNDI9c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjI1Ny1cbm1tL2RhbW9uL3N5c2ZzLmM6MjI1ODpcdHJlcGVhdF9jYWxsX2NvbnRyb2wgPSBrbWFsbG9jX29iaigqcmVwZWF0X2NhbGxfY29udHJvbCk7XG5tbS9kYW1vbi9zeXNmcy5jLTIyNTktXHRpZiAoIXJlcGVhdF9jYWxsX2NvbnRyb2wpXG4tLVxubW0vZGFtb24vc3lzZnMuYz0yNTQ3PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfa2RhbW9uZHNfYWRkX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmRzICprZGFtb25kcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTI1NTktXG5tbS9kYW1vbi9zeXNmcy5jOjI1NjA6XHRrZGFtb25kc19hcnIgPSBrbWFsbG9jX29ianMoKmtkYW1vbmRzX2FyciwgbnJfa2RhbW9uZHMsXG5tbS9kYW1vbi9zeXNmcy5jLTI1NjEtXHRcdFx0XHQgICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTik7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTk2ND1zdGF0aWMgaW50IGRhbW9zX3Rlc3RfaGVscF9kZXN0c19zZXR1cChzdHJ1Y3QgZGFtb3NfbWlncmF0ZV9kZXN0cyAqZGVzdHMsXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTk2OS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo5NzA6XHRkZXN0cy1cdTAwM2Vub2RlX2lkX2FyciA9IGttYWxsb2Nfb2JqcygqZGVzdHMtXHUwMDNlbm9kZV9pZF9hcnIsIG5yX2Rlc3RzKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05NzEtXHRpZiAoIWRlc3RzLVx1MDAzZW5vZGVfaWRfYXJyKVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTk3Mi1cdFx0cmV0dXJuIC1FTk9NRU07XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6OTczOlx0ZGVzdHMtXHUwMDNld2VpZ2h0X2FyciA9IGttYWxsb2Nfb2JqcygqZGVzdHMtXHUwMDNld2VpZ2h0X2FyciwgbnJfZGVzdHMpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTk3NC1cdGlmICghZGVzdHMtXHUwMDNld2VpZ2h0X2Fycikge1xuLS1cbm1tL2RhbW9uL3Rlc3RzL3N5c2ZzLWt1bml0Lmg9Mzk9c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfdGVzdF9hZGRfdGFyZ2V0cyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvc3lzZnMta3VuaXQuaC00OC1cdHN5c2ZzX3RhcmdldHMtXHUwMDNlbnIgPSAxO1xubW0vZGFtb24vdGVzdHMvc3lzZnMta3VuaXQuaDo0OTpcdHN5c2ZzX3RhcmdldHMtXHUwMDNldGFyZ2V0c19hcnIgPSBrbWFsbG9jX29ianMoKnN5c2ZzX3RhcmdldHMtXHUwMDNldGFyZ2V0c19hcnIsXG5tbS9kYW1vbi90ZXN0cy9zeXNmcy1rdW5pdC5oLTUwLVx0XHRcdFx0XHRcdCAgMSk7XG4tLVxubW0vZGFtb24vdmFkZHIuYz03Mzg9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfdmFfbWlncmF0ZShzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0YXJnZXQsXG4tLVxubW0vZGFtb24vdmFkZHIuYy03NTctXHRwcml2LnNjaGVtZSA9IHM7XG5tbS9kYW1vbi92YWRkci5jOjc1ODpcdHByaXYubWlncmF0aW9uX2xpc3RzID0ga21hbGxvY19vYmpzKCpwcml2Lm1pZ3JhdGlvbl9saXN0cywgbnJfZGVzdHMpO1xubW0vZGFtb24vdmFkZHIuYy03NTktXHRpZiAoIXByaXYubWlncmF0aW9uX2xpc3RzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI1NgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgTWVtb3J5IEFsbG9jYXRpb24gTWFjcm9zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIEkgc2VlIGBrbWFsbG9jX29iamAuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgYSBtYWNybyDigJMgcHJvYmFibHkgZGVmaW5lZCB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgbWF5YmUgZXZlbiBpbiB0aGUgYG1tL2RhbW9uL2AgZGlyZWN0b3J5LiBCdXQgd2FpdCwgSSYjMzk7bSBqdXN0IHJlY2FsbGluZyB0aGF0IEkmIzM5O3ZlIHNlZW4gYGt6YWxsb2Nfb2JqYCBiZWluZyB1c2VkIGZvciB0aGUgYGRhbW9uX3N5c2ZzX2tkYW1vbmRfYWxsb2NgIGZ1bmN0aW9uLiBUaGF0IHRocm93cyBhIHNsaWdodCB3cmlua2xlIGluIHRoZSBhbmFseXNpcy4gSSBzaG91bGQgZG91YmxlIGNoZWNrIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCBga3phbGxvY19vYmpgLCBhbmQgc2VlIGhvdyB0aGUgdHdvIGFyZSByZWxhdGVkLCBvciBpZiB0aGV5IGFyZSByZWxhdGVkIGF0IGFsbC4gVGhhdCYjMzk7bGwgY2xlYXIgdGhpbmdzIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtremFsbG9jX29iaiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9ODMyPXN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld19jdHgodm9pZClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtODM1LVxubW0vZGFtb24vY29yZS5jOjgzNjpcdGN0eCA9IGt6YWxsb2Nfb2JqKCpjdHgpO1xubW0vZGFtb24vY29yZS5jLTgzNy1cdGlmICghY3R4KVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yMD1zdGF0aWMgc3RydWN0IGRhbW9zX3N5c2ZzX3Byb2JlICpkYW1vc19zeXNmc19wcm9iZV9hbGxvYyh1bnNpZ25lZCBjaGFyIGhpdHMpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIzLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI0Olx0cHJvYmUgPSBremFsbG9jX29iaigqcHJvYmUpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1LVx0aWYgKCFwcm9iZSlcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NzM9c3RhdGljIHN0cnVjdCBkYW1vc19zeXNmc19wcm9iZXMgKmRhbW9zX3N5c2ZzX3Byb2Jlc19hbGxvYyh2b2lkKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTc0LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo3NTpcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmVzKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03Ni19XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTM3OD1zdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpkYW1vbl9zeXNmc19zdGF0c19hbGxvYyh2b2lkKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM3OS17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzgwOlx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzgxLX1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NTQxPXN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcl9hbGxvYyhcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNTQ1LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjU0NjpcdGZpbHRlciA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NDctXHRpZiAoZmlsdGVyKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz05MDA9ZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcnNfYWxsb2MoZW51bSBkYW1vc19zeXNmc19maWx0ZXJfaGFuZGxlX2xheWVyIGxheWVyKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy05MDMtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6OTA0Olx0ZmlsdGVycyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVycyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtOTA1LVx0aWYgKGZpbHRlcnMpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEyMjQ9c3RhdGljIHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FsICpkYW1vc19zeXNmc19xdW90YV9nb2FsX2FsbG9jKHZvaWQpXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTIyNS17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTIyNjpcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTIyNy19XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE0NTY9c3RhdGljIHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2FscyAqZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfYWxsb2Modm9pZClcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDU3LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDU4Olx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vc19zeXNmc19xdW90YV9nb2Fscyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ1OS19XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE2OTM9c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMgKmRhbW9uX3N5c2ZzX3F1b3Rhc19hbGxvYyh2b2lkKVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE2OTQte1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE2OTU6XHRyZXR1cm4ga3phbGxvY19vYmooc3RydWN0IGRhbW9uX3N5c2ZzX3F1b3Rhcyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTY5Ni19XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIwNTY9c3RhdGljIHN0cnVjdCBkYW1vc19zeXNmc19kZXN0ICpkYW1vc19zeXNmc19kZXN0X2FsbG9jKHZvaWQpXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjA1Ny17XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjA1ODpcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb3Nfc3lzZnNfZGVzdCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjA1OS19XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIxMzY9ZGFtb3Nfc3lzZnNfZGVzdHNfYWxsb2Modm9pZClcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMTM3LXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMTM4Olx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vc19zeXNmc19kZXN0cyk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjEzOS19XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI2ODA9c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKmRhbW9uX3N5c2ZzX3NjaGVtZXNfYWxsb2Modm9pZClcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNjgxLXtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNjgyOlx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yNjgzLX1cbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIxPXN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfcmVnaW9uICpkYW1vbl9zeXNmc19yZWdpb25fYWxsb2Modm9pZClcbm1tL2RhbW9uL3N5c2ZzLmMtMjIte1xubW0vZGFtb24vc3lzZnMuYzoyMzpcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb25fc3lzZnNfcmVnaW9uKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMjQtfVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9OTg9c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19yZWdpb25zICpkYW1vbl9zeXNmc19yZWdpb25zX2FsbG9jKHZvaWQpXG5tbS9kYW1vbi9zeXNmcy5jLTk5LXtcbm1tL2RhbW9uL3N5c2ZzLmM6MTAwOlx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19yZWdpb25zKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMTAxLX1cbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIxOD1zdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3RhcmdldCAqZGFtb25fc3lzZnNfdGFyZ2V0X2FsbG9jKHZvaWQpXG5tbS9kYW1vbi9zeXNmcy5jLTIxOS17XG5tbS9kYW1vbi9zeXNmcy5jOjIyMDpcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb25fc3lzZnNfdGFyZ2V0KTtcbm1tL2RhbW9uL3N5c2ZzLmMtMjIxLX1cbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTMyND1zdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3RhcmdldHMgKmRhbW9uX3N5c2ZzX3RhcmdldHNfYWxsb2Modm9pZClcbm1tL2RhbW9uL3N5c2ZzLmMtMzI1LXtcbm1tL2RhbW9uL3N5c2ZzLmM6MzI2Olx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc190YXJnZXRzKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMzI3LX1cbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTc2NT1zdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX2ZpbHRlciAqZGFtb25fc3lzZnNfZmlsdGVyX2FsbG9jKHZvaWQpXG5tbS9kYW1vbi9zeXNmcy5jLTc2Ni17XG5tbS9kYW1vbi9zeXNmcy5jOjc2NzpcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVyKTtcbm1tL2RhbW9uL3N5c2ZzLmMtNzY4LX1cbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTk1Mz1zdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX2ZpbHRlcnMgKmRhbW9uX3N5c2ZzX2ZpbHRlcnNfYWxsb2Modm9pZClcbm1tL2RhbW9uL3N5c2ZzLmMtOTU0LXtcbm1tL2RhbW9uL3N5c2ZzLmM6OTU1Olx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19maWx0ZXJzKTtcbm1tL2RhbW9uL3N5c2ZzLmMtOTU2LX1cbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTEwNzI9c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19wcm9iZSAqZGFtb25fc3lzZnNfcHJvYmVfYWxsb2Modm9pZClcbm1tL2RhbW9uL3N5c2ZzLmMtMTA3My17XG5tbS9kYW1vbi9zeXNmcy5jOjEwNzQ6XHRyZXR1cm4ga3phbGxvY19vYmooc3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMTA3NS19XG4tLVxubW0vZGFtb24vc3lzZnMuYz0xMTUzPXN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmVzICpkYW1vbl9zeXNmc19wcm9iZXNfYWxsb2Modm9pZClcbm1tL2RhbW9uL3N5c2ZzLmMtMTE1NC17XG5tbS9kYW1vbi9zeXNmcy5jOjExNTU6XHRyZXR1cm4ga3phbGxvY19vYmooc3RydWN0IGRhbW9uX3N5c2ZzX3Byb2Jlcyk7XG5tbS9kYW1vbi9zeXNmcy5jLTExNTYtfVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MTY2ND1zdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHRzICpkYW1vbl9zeXNmc19jb250ZXh0c19hbGxvYyh2b2lkKVxubW0vZGFtb24vc3lzZnMuYy0xNjY1LXtcbm1tL2RhbW9uL3N5c2ZzLmM6MTY2NjpcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb25fc3lzZnNfY29udGV4dHMpO1xubW0vZGFtb24vc3lzZnMuYy0xNjY3LX1cbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTE3OTU9c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICpkYW1vbl9zeXNmc19rZGFtb25kX2FsbG9jKHZvaWQpXG5tbS9kYW1vbi9zeXNmcy5jLTE3OTYte1xubW0vZGFtb24vc3lzZnMuYzoxNzk3Olx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMTc5OC19XG4tLVxubW0vZGFtb24vc3lzZnMuYz0yNTE0PXN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZHMgKmRhbW9uX3N5c2ZzX2tkYW1vbmRzX2FsbG9jKHZvaWQpXG5tbS9kYW1vbi9zeXNmcy5jLTI1MTUte1xubW0vZGFtb24vc3lzZnMuYzoyNTE2Olx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kcyk7XG5tbS9kYW1vbi9zeXNmcy5jLTI1MTctfVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjY1OD1zdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3VpX2RpciAqZGFtb25fc3lzZnNfdWlfZGlyX2FsbG9jKHZvaWQpXG5tbS9kYW1vbi9zeXNmcy5jLTI2NTkte1xubW0vZGFtb24vc3lzZnMuYzoyNjYwOlx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc191aV9kaXIpO1xubW0vZGFtb24vc3lzZnMuYy0yNjYxLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxMDUKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIGBrbWFsbG9jX29iamAmIzM5O3MgQmVoYXZpb3Igd2l0aCBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgKioKCkFscmlnaHQsIGhhbmcgb24gYSBzZWNvbmQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoaXMgY29ubmVjdGlvbiBiZXR3ZWVuIGBrbWFsbG9jX29iamAgYW5kIGBkYW1vc19uZXdfcXVvdGFfZ29hbGAuIFNwZWNpZmljYWxseSwgZG9lcyBga21hbGxvY19vYmpgIHBlcmZvcm0gbWVtb3J5IHplcm9pbmc/IFRoYXQmIzM5O3MgYSBjcml0aWNhbCBkZXRhaWwsIGFuZCBJIGRvbiYjMzk7dCB3YW50IHRvIG1ha2UgYXNzdW1wdGlvbnMuIEkga25vdyB0aGUgcG90ZW50aWFsIHBpdGZhbGxzIGhlcmUsIHNvIEkgbmVlZCB0byB2ZXJpZnkuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIGBrbWFsbG9jX29iamAgYW5kIGdldCB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIuIEkgY2FuJiMzOTt0IHByb2NlZWQgd2l0aG91dCBjbGFyaWZ5aW5nIHRoYXQgYXNwZWN0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGRvY3VtZW50YXRpb24gYW5kIHRoZSBjb2RlIGl0c2VsZiB0ZWxsIHVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIGttYWxsb2Nfb2JqJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2xhYi5oPTEwNzA9dm9pZCAqa21hbGxvY19ub2xvY2soc2l6ZV90IHNpemUsIGdmcF90IGdmcF9mbGFncywgaW50IG5vZGUpO1xuLS1cbmluY2x1ZGUvbGludXgvc2xhYi5oLTExMjAtICovXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDoxMTIxOiNkZWZpbmUga21hbGxvY19vYmooVkFSX09SX1RZUEUsIC4uLikgXFxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExMjItXHRfX2FsbG9jX29ianMoa21hbGxvYywgZGVmYXVsdF9nZnAoX19WQV9BUkdTX18pLCB0eXBlb2YoVkFSX09SX1RZUEUpLCAxKVxuLS1cbmluY2x1ZGUvbGludXgvc2xhYi5oLTExMzItICovXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDoxMTMzOiNkZWZpbmUga21hbGxvY19vYmpzKFZBUl9PUl9UWVBFLCBDT1VOVCwgLi4uKSBcXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTEzNC1cdF9fYWxsb2Nfb2JqcyhrbWFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihWQVJfT1JfVFlQRSksIENPVU5UKVxuLS1cbmxpYi9kZWNvbXByZXNzX3VueHouYy0xNjMtI3VuZGVmIHZmcmVlXG5saWIvZGVjb21wcmVzc191bnh6LmM6MTY0OiNkZWZpbmUga21hbGxvY19vYmoodHlwZSkgbWFsbG9jKHNpemVvZih0eXBlKSlcbmxpYi9kZWNvbXByZXNzX3VueHouYy0xNjUtI2RlZmluZSBrZnJlZShwdHIpIGZyZWUocHRyKVxuLS1cbnRvb2xzL3ZpcnRpby9saW51eC9rZXJuZWwuaD02Mz1zdGF0aWMgaW5saW5lIHZvaWQgKmttYWxsb2NfYXJyYXkodW5zaWduZWQgbiwgc2l6ZV90IHMsIGdmcF90IGdmcClcbi0tXG50b29scy92aXJ0aW8vbGludXgva2VybmVsLmgtNjctXG50b29scy92aXJ0aW8vbGludXgva2VybmVsLmg6Njg6I2RlZmluZSBrbWFsbG9jX29iaihWQVJfT1JfVFlQRSwgLi4uKSBcXFxudG9vbHMvdmlydGlvL2xpbnV4L2tlcm5lbC5oLTY5LVx0KCh0eXBlb2YoVkFSX09SX1RZUEUpICopa21hbGxvYyhzaXplb2YodHlwZW9mKFZBUl9PUl9UWVBFKSksIDApKVxudG9vbHMvdmlydGlvL2xpbnV4L2tlcm5lbC5oLTcwLVxudG9vbHMvdmlydGlvL2xpbnV4L2tlcm5lbC5oOjcxOiNkZWZpbmUga21hbGxvY19vYmpzKFZBUl9PUl9UWVBFLCBDT1VOVCwgLi4uKSBcXFxudG9vbHMvdmlydGlvL2xpbnV4L2tlcm5lbC5oLTcyLVx0KCh0eXBlb2YoVkFSX09SX1RZUEUpICopa21hbGxvYyhzaXplb2YodHlwZW9mKFZBUl9PUl9UWVBFKSkgKiAoQ09VTlQpLCAwKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4NjMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IEFjY2VzcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGttYWxsb2Nfb2JqYCwgYW5kIHRoYXQmIzM5O3MganVzdCBhIHdyYXBwZXIgYXJvdW5kIGBrbWFsbG9jYC4gVGhlIGNyaXRpY2FsIHRoaW5nIHRvIHJlbWVtYmVyIGlzIHRoYXQgYGttYWxsb2NgICpkb2VzbiYjMzk7dCogemVybyBvdXQgdGhlIGFsbG9jYXRlZCBtZW1vcnkuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGZvciB0aGlzIHN0cnVjdC4KClRoZSBjb2RlIHNob3dzIGBkYW1vc19uZXdfcXVvdGFfZ29hbGAgYWxsb2NhdGluZyBtZW1vcnkgdXNpbmcgYGttYWxsb2Nfb2JqYCwgYW5kIHRoZW4gc2V0dGluZyBhIGZldyBmaWVsZHM6IGBtZXRyaWNgLCBgdGFyZ2V0X3ZhbHVlYCwgYW5kIHRoZSBgbGlzdGAgaGVhZCB1c2luZyBgSU5JVF9MSVNUX0hFQURgLiBCdXQsIGhhbmcgb24uLi4gd2hhdCBhYm91dCBgZ29hbC0mZ3Q7bGFzdF9wc2lfdG90YWxgPyBUaGF0JiMzOTtzICpub3QqIGluaXRpYWxpemVkIHRoZXJlLiBUaGF0JiMzOTtzIGEgcmVkIGZsYWchIEFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgY291bGQgbGVhZCB0byBhbGwgc29ydHMgb2YgaXNzdWVzLiBJZiB0aGUgY29kZSB0aGVuIHRyaWVzIHRvIHJlYWQgdGhhdCB2YWx1ZSBsYXRlciB3aXRob3V0IGZpcnN0IGluaXRpYWxpemluZyBpdCwgd2UmIzM5O3ZlIGdvdCBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IG9yIGF0IHRoZSB2ZXJ5IGxlYXN0LCB1bnByZWRpY3RhYmxlIGJlaGF2aW9yLgoKSSBzZWUgdGhhdCB0aGUgcGF0Y2ggaW5jbHVkZXMgYSBuZXcgZnVuY3Rpb24sIGBkYW1vc19pbml0X3F1b3RhX2dvYWxfbGFzdF9wc2lgLiBBbmQgKnRoYXQqIGZ1bmN0aW9uIGluaXRpYWxpemVzIGBsYXN0X3BzaV90b3RhbGAuLi4gYnV0IG9ubHkgZm9yIGEgc3BlY2lmaWMgYG1ldHJpY2AsIGBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVNgLiBUaGF0JiMzOTtzIGEgbGl0dGxlIGJldHRlciwgYnV0IGl0JiMzOTtzIHN0aWxsIG5vdCBhIGNvbXBsZXRlIHNvbHV0aW9uLiBJdCBsZWF2ZXMgdGhlIG90aGVycyBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkLgoKTm93LCBJIHJlYWxseSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBoZXJlLiBJcyBgZ29hbC0mZ3Q7bGFzdF9wc2lfdG90YWxgIGV2ZXIgZXhwb3NlZCB0byB1c2Vyc3BhY2U/IFRoYXQmIzM5O3MgdGhlIGtleSBxdWVzdGlvbi4gSWYgaXQgKmlzKiwgdGhlbiB3ZSBoYXZlIGEgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWsuIElmIGl0JiMzOTtzIHVzZWQgaW50ZXJuYWxseSwgdW5pbml0aWFsaXplZCwgdGhhdCBjb3VsZCBiZSBhIGJ1ZyBvciBjYXVzZSBzZWN1cml0eSBpc3N1ZXMuIEkgbmVlZCB0byB0cmFjZSB3aGVyZSB0aGlzIGBsYXN0X3BzaV90b3RhbGAgZmllbGQgaXMgdXNlZC4gSSYjMzk7bGwgc2VhcmNoIHRocm91Z2ggdGhlIGNvZGViYXNlIGZvciByZWZlcmVuY2VzIHRvIGl0IGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSByZWFkcyBvZiB0aGF0IGZpZWxkIGJlZm9yZSBpdCYjMzk7cyBpbml0aWFsaXplZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGFzdF9wc2lfdG90YWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTExMjE9c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oXG4tLVxubW0vZGFtb24vY29yZS5jLTExMjUtXHRjYXNlIERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUzpcbm1tL2RhbW9uL2NvcmUuYzoxMTI2Olx0XHRkc3QtXHUwMDNlbGFzdF9wc2lfdG90YWwgPSBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKCk7XG5tbS9kYW1vbi9jb3JlLmMtMTEyNy1cdFx0YnJlYWs7XG4tLVxubW0vZGFtb24vY29yZS5jPTMwMTI9c3RhdGljIHZvaWQgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZShzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMDIyLVx0XHRub3dfcHNpX3RvdGFsID0gZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpO1xubW0vZGFtb24vY29yZS5jOjMwMjM6XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IG5vd19wc2lfdG90YWwgLSBnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsO1xubW0vZGFtb24vY29yZS5jOjMwMjQ6XHRcdGdvYWwtXHUwMDNlbGFzdF9wc2lfdG90YWwgPSBub3dfcHNpX3RvdGFsO1xubW0vZGFtb24vY29yZS5jLTMwMjUtXHRcdGJyZWFrO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zNzMyPXN0YXRpYyB2b2lkIGRhbW9zX2luaXRfcXVvdGFfZ29hbF9sYXN0X3BzaShzdHJ1Y3QgZGFtb3MgKnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTM3MzgtXHRcdFx0Y29udGludWU7XG5tbS9kYW1vbi9jb3JlLmM6MzczOTpcdFx0Z29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKTtcbm1tL2RhbW9uL2NvcmUuYy0zNzQwLVx0fVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD03NTA9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC03NTMte1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjc1NDpcdHU2NCBkc3RfbGFzdF9wc2lfdG90YWwgPSAwO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTc1NS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC03NTYtXHRpZiAoZHN0LVx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMpXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NzU3Olx0XHRkc3RfbGFzdF9wc2lfdG90YWwgPSBkc3QtXHUwMDNlbGFzdF9wc2lfdG90YWw7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNzU4LVx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoZHN0LCBzcmMpO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC03NjMtXHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXHUwMDNlY3VycmVudF92YWx1ZSwgc3JjLVx1MDAzZWN1cnJlbnRfdmFsdWUpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjc2NDpcdGlmIChkc3RfbGFzdF9wc2lfdG90YWwgXHUwMDI2XHUwMDI2IHNyYy1cdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTKVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjc2NTpcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cdTAwM2VsYXN0X3BzaV90b3RhbCwgZHN0X2xhc3RfcHNpX3RvdGFsKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC03NjYtXHRzd2l0Y2ggKGRzdC1cdTAwM2VtZXRyaWMpIHtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9NzgxPXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWwoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC03ODYtXHRcdC5jdXJyZW50X3ZhbHVlID0gMTIzLFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjc4NzpcdFx0Lmxhc3RfcHNpX3RvdGFsID0gNDU2LFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTc4OC1cdH07XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTgyOS1cdFx0XHQuY3VycmVudF92YWx1ZSA9IDM0NSxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4MzA6XHRcdFx0Lmxhc3RfcHNpX3RvdGFsID0gNTY3LFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTgzMS1cdFx0XHR9KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2MzUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBpbiBEQU1PUyBRdW90YSBDYWxjdWxhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZWAgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyBsaWtlIHRoZSBgbGFzdF9wc2lfdG90YWxgIHZhcmlhYmxlIGlzIGNyaXRpY2FsLiBTcGVjaWZpY2FsbHksIGluc2lkZSB0aGUgYERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AgY2FzZSwgdGhlIGNvZGUgY2FsY3VsYXRlcyBgZ29hbC0mZ3Q7Y3VycmVudF92YWx1ZWAgYnkgc3VidHJhY3RpbmcgYGdvYWwtJmd0O2xhc3RfcHNpX3RvdGFsYCBmcm9tIHRoZSBjdXJyZW50IFBTSSB0b3RhbC4gVGhlIGNvbmNlcm4sIGFuZCBpdCYjMzk7cyBhIHZhbGlkIG9uZSwgaXMgd2hhdCBoYXBwZW5zIGlmIGBsYXN0X3BzaV90b3RhbGAgaGFzbiYjMzk7dCBiZWVuIGluaXRpYWxpemVkIGJlZm9yZSB0aGlzIHBvaW50LiBXZSBjb3VsZCBlbmQgdXAgY2FsY3VsYXRpbmcgYGN1cnJlbnRfdmFsdWVgIHVzaW5nIHdoYXRldmVyIGdhcmJhZ2UgaGFwcGVucyB0byBiZSBpbiB0aGF0IG1lbW9yeSBsb2NhdGlvbiwgd2hpY2ggaXMgYSBjbGFzc2ljIGJ1ZyBzY2VuYXJpby4KClRoaXMgaXMgYSByZWQgZmxhZywgYW5kIGl0JiMzOTtzIG1ha2luZyBtZSB3b25kZXI6IGlzIGBnb2FsLSZndDtjdXJyZW50X3ZhbHVlYCBleHBvc2VkIHRvIHVzZXIgc3BhY2UgaW4gYW55IHdheT8gSWYgc28sIHRoaXMgY291bGQgYmUgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5LCBvciBhdCB0aGUgdmVyeSBsZWFzdCwgbGVhZCB0byB1bnJlbGlhYmxlIGRhdGEgZm9yIG91ciBlbmQgdXNlcnMuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGRpdmUgaW50byB0aGUgY29kZWJhc2UgYW5kIHRyYWNlIHRoZSB1c2VzIG9mIGBjdXJyZW50X3ZhbHVlYCB0byB1bmRlcnN0YW5kIHdoZXJlIGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZC4gVW5kZXJzdGFuZGluZyB3aGVyZSBpdCYjMzk7cyB1c2VkIGlzIGNyaXRpY2FsIHRvIGV2YWx1YXRpbmcgdGhlIGltcGFjdCBvZiB0aGlzIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y3VycmVudF92YWx1ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MTE0Mj1zdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbChcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTE0Ny1cdGlmIChkc3QtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX1VTRVJfSU5QVVQpXG5tbS9kYW1vbi9jb3JlLmM6MTE0ODpcdFx0ZHN0LVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBzcmMtXHUwMDNlY3VycmVudF92YWx1ZTtcbm1tL2RhbW9uL2NvcmUuYy0xMTQ5LVx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oZHN0LCBzcmMpO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yOTk3PXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnAoYm9vbCBhY3RpdmVfcmF0aW8pXG4tLVxubW0vZGFtb24vY29yZS5jLTMwMTEtXG5tbS9kYW1vbi9jb3JlLmM6MzAxMjpzdGF0aWMgdm9pZCBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKHN0cnVjdCBkYW1vbl9jdHggKmMsXG5tbS9kYW1vbi9jb3JlLmMtMzAxMy1cdFx0c3RydWN0IGRhbW9zICpzLCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzAxOC1cdGNhc2UgREFNT1NfUVVPVEFfVVNFUl9JTlBVVDpcbm1tL2RhbW9uL2NvcmUuYzozMDE5Olx0XHQvKiBVc2VyIHNob3VsZCBhbHJlYWR5IHNldCBnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgKi9cbm1tL2RhbW9uL2NvcmUuYy0zMDIwLVx0XHRicmVhaztcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzAyMi1cdFx0bm93X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKTtcbm1tL2RhbW9uL2NvcmUuYzozMDIzOlx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBub3dfcHNpX3RvdGFsIC0gZ29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbDtcbm1tL2RhbW9uL2NvcmUuYy0zMDI0LVx0XHRnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsID0gbm93X3BzaV90b3RhbDtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzAyNy1cdGNhc2UgREFNT1NfUVVPVEFfTk9ERV9NRU1fRlJFRV9CUDpcbm1tL2RhbW9uL2NvcmUuYzozMDI4Olx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfbm9kZV9tZW1fYnAoZ29hbCk7XG5tbS9kYW1vbi9jb3JlLmMtMzAyOS1cdFx0YnJlYWs7XG4tLVxubW0vZGFtb24vY29yZS5jLTMwMzEtXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUDpcbm1tL2RhbW9uL2NvcmUuYzozMDMyOlx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfbm9kZV9tZW1jZ191c2VkX2JwKGdvYWwpO1xubW0vZGFtb24vY29yZS5jLTMwMzMtXHRcdGJyZWFrO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMDM1LVx0Y2FzZSBEQU1PU19RVU9UQV9JTkFDVElWRV9NRU1fQlA6XG5tbS9kYW1vbi9jb3JlLmM6MzAzNjpcdFx0Z29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnAoXG5tbS9kYW1vbi9jb3JlLmMtMzAzNy1cdFx0XHRcdGdvYWwtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX0FDVElWRV9NRU1fQlApO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMDM5LVx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX0VMSUdJQkxFX01FTV9CUDpcbm1tL2RhbW9uL2NvcmUuYzozMDQwOlx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfbm9kZV9lbGlnaWJsZV9tZW1fYnAoYywgcyxcbm1tL2RhbW9uL2NvcmUuYy0zMDQxLVx0XHRcdFx0Z29hbC1cdTAwM2VuaWQpO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMDQ5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3F1b3RhX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzA1NS1cdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgcXVvdGEpIHtcbm1tL2RhbW9uL2NvcmUuYzozMDU2Olx0XHRkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKGMsIHMsIGdvYWwpO1xubW0vZGFtb24vY29yZS5jLTMwNTctXHRcdGhpZ2hlc3Rfc2NvcmUgPSBtYXgoaGlnaGVzdF9zY29yZSxcbm1tL2RhbW9uL2NvcmUuYzozMDU4Olx0XHRcdFx0bXVsdF9mcmFjKGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSwgMTAwMDAsXG5tbS9kYW1vbi9jb3JlLmMtMzA1OS1cdFx0XHRcdFx0Z29hbC1cdTAwM2V0YXJnZXRfdmFsdWUpKTtcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MTk0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTI0Ni1cdFx0XHRnb3RvIG91dDtcbm1tL2RhbW9uL3JlY2xhaW0uYzoyNDc6XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IHF1b3RhX2F1dG90dW5lX2ZlZWRiYWNrO1xubW0vZGFtb24vcmVjbGFpbS5jLTI0OC1cdFx0ZGFtb3NfYWRkX3F1b3RhX2dvYWwoXHUwMDI2c2NoZW1lLVx1MDAzZXF1b3RhLCBnb2FsKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTIxNT1zdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMTgtXHR1bnNpZ25lZCBsb25nIHRhcmdldF92YWx1ZTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMjE5Olx0dW5zaWduZWQgbG9uZyBjdXJyZW50X3ZhbHVlO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMjAtXHRpbnQgbmlkO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMzE5PXN0YXRpYyBzc2l6ZV90IHRhcmdldF92YWx1ZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMyOC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzI5OnN0YXRpYyBzc2l6ZV90IGN1cnJlbnRfdmFsdWVfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzMwLVx0XHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zilcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMzNC1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzM1Olx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslbHVcXG5cJiMzNDssIGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMzNi19XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMzNy1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzM4OnN0YXRpYyBzc2l6ZV90IGN1cnJlbnRfdmFsdWVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMzOS1cdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTM0Mi1cdFx0XHRkYW1vc19zeXNmc19xdW90YV9nb2FsLCBrb2JqKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzQzOlx0aW50IGVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwgXHUwMDI2Z29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzQ0LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNDE4PXN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF90YXJnZXRfdmFsdWVfYXR0ciA9XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MjAtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQyMTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZV9hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDIyOlx0XHRfX0FUVFJfUldfTU9ERShjdXJyZW50X3ZhbHVlLCAwNjAwKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDIzLVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNDMwPXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vc19zeXNmc19xdW90YV9nb2FsX2F0dHJzW10gPSB7XG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MzItXHRcdTAwMjZkYW1vc19zeXNmc19xdW90YV9nb2FsX3RhcmdldF92YWx1ZV9hdHRyLmF0dHIsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQzMzpcdFx1MDAyNmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZV9hdHRyLmF0dHIsXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQzNC1cdFx1MDAyNmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfbmlkX2F0dHIuYXR0cixcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjg0Nz1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX2FkZF9xdW90YV9zY29yZShcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg2Ni1cdFx0Y2FzZSBEQU1PU19RVU9UQV9VU0VSX0lOUFVUOlxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4Njc6XHRcdFx0Z29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlID0gc3lzZnNfZ29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NjgtXHRcdFx0YnJlYWs7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTc1MD1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTc2Mi1cdGlmIChzcmMtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX1VTRVJfSU5QVVQpXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NzYzOlx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LVx1MDAzZWN1cnJlbnRfdmFsdWUsIHNyYy1cdTAwM2VjdXJyZW50X3ZhbHVlKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC03NjQtXHRpZiAoZHN0X2xhc3RfcHNpX3RvdGFsIFx1MDAyNlx1MDAyNiBzcmMtXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUylcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9NzgxPXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWwoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC03ODUtXHRcdC50YXJnZXRfdmFsdWUgPSAxMDAwLFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjc4NjpcdFx0LmN1cnJlbnRfdmFsdWUgPSAxMjMsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNzg3LVx0XHQubGFzdF9wc2lfdG90YWwgPSA0NTYsXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTc5My1cdFx0XHQudGFyZ2V0X3ZhbHVlID0gNzg5LFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjc5NDpcdFx0XHQuY3VycmVudF92YWx1ZSA9IDEyfSk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNzk1LVx0ZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3IodGVzdCwgXHUwMDI2ZHN0LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC03OTgtXHRcdFx0LnRhcmdldF92YWx1ZSA9IDM0NSxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo3OTk6XHRcdFx0LmN1cnJlbnRfdmFsdWUgPSA2NzgsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODAwLVx0XHRcdC5uaWQgPSA5LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MDUtXHRcdFx0LnRhcmdldF92YWx1ZSA9IDEyLFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjgwNjpcdFx0XHQuY3VycmVudF92YWx1ZSA9IDM0NSxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MDctXHRcdFx0Lm5pZCA9IDYsXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTgxMi1cdFx0XHQudGFyZ2V0X3ZhbHVlID0gNDU2LFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjgxMzpcdFx0XHQuY3VycmVudF92YWx1ZSA9IDU2Nyxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MTQtXHRcdFx0Lm5pZCA9IDYsXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTgyMC1cdFx0XHQudGFyZ2V0X3ZhbHVlID0gODkwLFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjgyMTpcdFx0XHQuY3VycmVudF92YWx1ZSA9IDkwMSxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MjItXHRcdFx0Lm5pZCA9IDEwLFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MjgtXHRcdFx0LnRhcmdldF92YWx1ZSA9IDIzNCxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4Mjk6XHRcdFx0LmN1cnJlbnRfdmFsdWUgPSAzNDUsXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODMwLVx0XHRcdC5sYXN0X3BzaV90b3RhbCA9IDU2NyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5NzcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBEYXRhIEZsb3cgb2YgREFNT04gUXVvdGEgR29hbHMqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSBuZWVkIHRvIGNsYXJpZnkgc29tZXRoaW5nIGFib3V0IGhvdyB0aGUgYGN1cnJlbnRfdmFsdWVgIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBEQU1PTiBxdW90YSBzeXN0ZW0uIEkga25vdyB0aGF0IGBjdXJyZW50X3ZhbHVlYCBpcyBhIGNyaXRpY2FsIGZpZWxkLCBhbmQgSSYjMzk7dmUganVzdCByZWFsaXplZCBpdCBleGlzdHMgaW4gKnR3byogZGlzdGluY3Qgc3RydWN0dXJlczogYHN0cnVjdCBkYW1vc19xdW90YV9nb2FsYCBpbiBgbW0vZGFtb24vY29yZS5jYCBhbmQgYWxzbyBpbiBgc3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxgIHdpdGhpbiBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYC4KCk15IHByaW1hcnkgY29uY2VybiBpcyB0aGlzOiB0aGUgc3lzZnMgaW50ZXJmYWNlIGlzIGhvdyB1c2Vyc3BhY2UgaW50ZXJhY3RzIHdpdGggdGhpcyBgY3VycmVudF92YWx1ZWAgdmlhIGBkYW1vc19zeXNmc19xdW90YV9nb2FsYC4gQnV0IHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzLCBob3cgZG9lcyB0aGlzIHZhbHVlIGluIGBkYW1vc19zeXNmc19xdW90YV9nb2FsYCBnZXQgdXBkYXRlZD8gRG9lcyBpdCBtaXJyb3IgdGhlIGBjdXJyZW50X3ZhbHVlYCBzdG9yZWQgaW5zaWRlIG9mIGBkYW1vc19xdW90YV9nb2FsYD8gSXMgdGhlcmUgYSBkaXJlY3QgY29weT8gQSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtPwoKSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBtYWtlIHN1cmUgdGhhdCB0aGUgYGRhbW9zX3F1b3RhX2dvYWwtJmd0O2N1cnJlbnRfdmFsdWVgIGlzLCBpbiBmYWN0LCBiZWluZyBjb3BpZWQgb3IgYXBwcm9wcmlhdGVseSBzeW5jaHJvbml6ZWQgdG8gYGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwtJmd0O2N1cnJlbnRfdmFsdWVgLiBUaGlzIGlzIGVzc2VudGlhbCB0byBndWFyYW50ZWUgdGhhdCB1c2VyLXNwYWNlIGludGVyYWN0aW9ucyB0aHJvdWdoIHN5c2ZzIGFyZSBhbHdheXMgcmVmbGVjdGluZyB0aGUgKmFjdHVhbCogcnVubmluZyBzdGF0ZSBvZiB0aGUgREFNT04gcXVvdGEgZ29hbHMgYW5kIG5vdCBzb21lIG91dGRhdGVkIG9yIHN0YWxlIHZhbHVlLiBUaGUgY29ycmVjdG5lc3Mgb2YgdGhlIHVzZXIgZXhwb3NlZCB2YWx1ZSBpcyBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA0OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2N1cnJlbnRfdmFsdWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEyMTU9c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjE4LVx0dW5zaWduZWQgbG9uZyB0YXJnZXRfdmFsdWU7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTIxOTpcdHVuc2lnbmVkIGxvbmcgY3VycmVudF92YWx1ZTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjIwLVx0aW50IG5pZDtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTMxOT1zdGF0aWMgc3NpemVfdCB0YXJnZXRfdmFsdWVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMjgtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMyOTpzdGF0aWMgc3NpemVfdCBjdXJyZW50X3ZhbHVlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMzMC1cdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMzQtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMzNTpcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JWx1XFxuXCYjMzQ7LCBnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMzYtfVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMzctXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMzODpzdGF0aWMgc3NpemVfdCBjdXJyZW50X3ZhbHVlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMzktXHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzNDItXHRcdFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTM0MzpcdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFx1MDAyNmdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTM0NC1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTQxOD1zdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfdGFyZ2V0X3ZhbHVlX2F0dHIgPVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDIwLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MjE6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vc19zeXNmc19xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQyMjpcdFx0X19BVFRSX1JXX01PREUoY3VycmVudF92YWx1ZSwgMDYwMCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQyMy1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTQzMD1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9hdHRyc1tdID0ge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDMyLVx0XHUwMDI2ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF90YXJnZXRfdmFsdWVfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MzM6XHRcdTAwMjZkYW1vc19zeXNmc19xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MzQtXHRcdTAwMjZkYW1vc19zeXNmc19xdW90YV9nb2FsX25pZF9hdHRyLmF0dHIsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NDc9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NjYtXHRcdGNhc2UgREFNT1NfUVVPVEFfVVNFUl9JTlBVVDpcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODY3Olx0XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IHN5c2ZzX2dvYWwtXHUwMDNlY3VycmVudF92YWx1ZTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODY4LVx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjQxNAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERhdGEgRmxvdyBmb3IgUXVvdGEgR29hbCBWYWx1ZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIHRyYWNlIGhvdyB0aGUgcXVvdGEgZ29hbCB2YWx1ZXMgYXJlIGhhbmRsZWQsIHNwZWNpZmljYWxseSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgc3lzdGVtIGZpbGUgc3lzdGVtIChzeXNmcykgcmVwcmVzZW50YXRpb24gYW5kIHRoZSBpbnRlcm5hbCBgZGFtb3NfcXVvdGFfZ29hbGAgZGF0YSBzdHJ1Y3R1cmUuIEl0IGxvb2tzIGxpa2UgdGhlIGBkYW1vc19zeXNmc19xdW90YV9nb2FsLSZndDtjdXJyZW50X3ZhbHVlYCBpcyBvbmx5IGV2ZXIgKnJlYWQqIGZyb20gc3lzZnMuIFRoZW4sIGl0IHNlZW1zIHRvIGJlIGNvcGllZCB0byBgZGFtb3NfcXVvdGFfZ29hbC0mZ3Q7Y3VycmVudF92YWx1ZWAsIGJ1dCBvbmx5IHdoZW4gYERBTU9TX1FVT1RBX1VTRVJfSU5QVVRgIGlzIGludm9sdmVkLgoKVGhhdCYjMzk7cyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nIGFuZCB3aGVyZSBJIGdldCBhIGJpdCBjb25jZXJuZWQuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgaXMgdGhlcmUgZXZlciBhbnkgd3JpdGUtYmFjaz8gRG9lcyBgZGFtb3NfcXVvdGFfZ29hbC0mZ3Q7Y3VycmVudF92YWx1ZWAgZXZlciBnZXQgdXBkYXRlZCBpbiB0aGUgY29yZSBsb2dpYyBhbmQgdGhlbiByZWZsZWN0ZWQgaW4gYGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwtJmd0O2N1cnJlbnRfdmFsdWVgPyBCZWNhdXNlIGlmIG5vdCwgdGhlbiB0aGUgc3lzZnMgcmVwcmVzZW50YXRpb24gaXMgZWZmZWN0aXZlbHkgYSBvbmUtd2F5IHN0cmVldCwgd2hpY2ggY291bGQgbGVhZCB0byBkaXNjcmVwYW5jaWVzIGlmIGNoYW5nZXMgYXJlIG1hZGUgaW50ZXJuYWxseSBhbmQgbmVlZCB0byBiZSByZWZsZWN0ZWQgaW4gc3lzZnMuCgpJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIGNhcmVmdWxseSBnbyB0aHJvdWdoIHRoZSBjb2RlIGFuZCBjaGVjayBmb3IgYW55IGZ1bmN0aW9ucyBvciBtZWNoYW5pc21zIHRoYXQgbWlnaHQgYmUgdXBkYXRpbmcgdGhlIHN5c2ZzIGZpbGUgZnJvbSB0aGUgY29yZS4gR290dGEgbWFrZSBzdXJlIHRoZSBkYXRhIGlzIGNvbnNpc3RlbnQgYW5kIHRoYXQgYSB1c2VyIGNvdWxkIGNoYW5nZSB0aGUgYGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwtJmd0O2N1cnJlbnRfdmFsdWVgIGFuZCBpdCB3b3VsZCBoYXZlIGFuIGFmZmVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjdXJyZW50X3ZhbHVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA0OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyODcwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBEYXRhIFNvdXJjZSBVcGRhdGVzIGZvciBTY2hlbWUgU3RhdGlzdGljcyoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzb3VyY2UgZm9yIHRoZXNlIHNjaGVtZSBzdGF0aXN0aWNzLiBNeSBmaXJzdCBpbnN0aW5jdCwgYW5kIHdoZXJlIEkmIzM5O2Qgc3RhcnQgZGlnZ2luZywgaXMgd2hldGhlciBgZGFtb25fc3lzZnNfdXBkYXRlX3NjaGVtZXNfc3RhdHNgIG9yIGEgZnVuY3Rpb24gd2l0aCBhIHNpbWlsYXIgbmFtZSDigJMgc29tZXRoaW5nIHJlbGF0ZWQgdG8gRGFtb24gKERhdGEgQWNjZXNzIE1vbml0b3IpIGFuZCBzeXNmcyB1cGRhdGVzIOKAkyBoYW5kbGVzIHRoZSBwb3B1bGF0aW9uIG9yIG1vZGlmaWNhdGlvbiBvZiB0aGVzZSBzdGF0aXN0aWNzLiBUaGF0JiMzOTtzIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gbG9vayBmaXJzdCwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgbGlrZWx5IGNvbnRleHQgb2YgdGhlIGRhdGEgYW5kIGl0cyBwb3RlbnRpYWwgY29ubmVjdGlvbiB0byBzeXN0ZW0gbW9uaXRvcmluZy4gSWYgdGhhdCBmdW5jdGlvbiBkb2VzbiYjMzk7dCBzZWVtIHJlbGV2YW50LCBJJiMzOTtsbCBuZWVkIHRvIGJyb2FkZW4gdGhlIHNlYXJjaCB0byByZWxhdGVkIGFyZWFzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzdGF0aXN0aWNzIGFyZSBjYWxjdWxhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1cGRhdGUuKnN0YXRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2xydV9zb3J0LmM9Mzg4PXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfZGFtb25fY2FsbF9mbih2b2lkICphcmcpXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0zOTItXG5tbS9kYW1vbi9scnVfc29ydC5jOjM5MzpcdC8qIHVwZGF0ZSB0aGUgc3RhdHMgcGFyYW1ldGVyICovXG5tbS9kYW1vbi9scnVfc29ydC5jLTM5NC1cdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjKSB7XG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTMxMz1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fZGFtb25fY2FsbF9mbih2b2lkICphcmcpXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTMxNy1cbm1tL2RhbW9uL3JlY2xhaW0uYzozMTg6XHQvKiB1cGRhdGUgdGhlIHN0YXRzIHBhcmFtZXRlciAqL1xubW0vZGFtb24vcmVjbGFpbS5jLTMxOS1cdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oPTM5PWludCBkYW1vbl9zeXNmc19hZGRfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNDEtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo0Mjp2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfdXBkYXRlX3N0YXRzKFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNDMtXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0zMDQ0PWludCBkYW1vbl9zeXNmc19hZGRfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwNjItXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzA2Mzp2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfdXBkYXRlX3N0YXRzKFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwNjQtXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MTg3OT1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGRhbW9uX3N5c2ZzX2NtZF9zdHJzW10gPSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy0xODgzLVx0XCYjMzQ7Y29tbWl0X3NjaGVtZXNfcXVvdGFfZ29hbHNcJiMzNDssXG5tbS9kYW1vbi9zeXNmcy5jOjE4ODQ6XHRcJiMzNDt1cGRhdGVfc2NoZW1lc19zdGF0c1wmIzM0Oyxcbm1tL2RhbW9uL3N5c2ZzLmMtMTg4NS1cdFwmIzM0O3VwZGF0ZV9zY2hlbWVzX3RyaWVkX2J5dGVzXCYjMzQ7LFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjA3OD1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3VwZF9zY2hlbWVzX3N0YXRzKHZvaWQgKmRhdGEpXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMDgyLVxubW0vZGFtb24vc3lzZnMuYzoyMDgzOlx0ZGFtb25fc3lzZnNfc2NoZW1lc191cGRhdGVfc3RhdHMoXG5tbS9kYW1vbi9zeXNmcy5jLTIwODQtXHRcdFx0a2RhbW9uZC1cdTAwM2Vjb250ZXh0cy1cdTAwM2Vjb250ZXh0c19hcnJbMF0tXHUwMDNlc2NoZW1lcywgY3R4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM4MTAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIGBkYW1vbl9zeXNmc19zY2hlbWVzX3VwZGF0ZV9zdGF0c2AqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCYjMzk7cyBkaWcgaW50byB0aGlzIGBkYW1vbl9zeXNmc19zY2hlbWVzX3VwZGF0ZV9zdGF0c2AuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gYXNzZXNzIGl0cyBzaWduaWZpY2FuY2Ugd2l0aGluIHRoZSBicm9hZGVyIERBTU9OIGNvbnRleHQsIHRoZSBEYXRhIEFjY2VzcyBNb25pdG9yLiBXaGF0IHNwZWNpZmljIHN0YXRzIGFyZSB3ZSB0YWxraW5nIGFib3V0IGhlcmU/IEl0JiMzOTtzIGltbWVkaWF0ZWx5IGV2aWRlbnQgdGhhdCB0aGlzIGZ1bmN0aW9uIGRlYWxzIHdpdGggdXBkYXRpbmcgc3RhdGlzdGljcyByZWxhdGVkIHRvIHRoZSBkaWZmZXJlbnQgbW9uaXRvcmluZyBzY2hlbWVzIGV4cG9zZWQgdmlhIHN5c2ZzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCB0aG9zZSBhcmUuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGFjY2VzcyBmcmVxdWVuY3ksIGFjY2VzcyBzaXplLCBhY2Nlc3MgcGF0dGVybnMsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBBIHF1aWNrIHNjYW4gb2YgdGhlIGNvZGUgc2hvdWxkIGNsYXJpZnkgdGhhdC4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIG1hbmlwdWxhdGVkLiBUaGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGltcGFjdCBvZiBhbnkgY2hhbmdlcyBvciBkZWJ1Z2dpbmcgYW55IGlzc3VlcyByZWxhdGVkIHRvIERBTU9OJiMzOTtzIHJlcG9ydGluZyBjYXBhYmlsaXRpZXMuIERlcGVuZGluZyBvbiB0aGUgY29tcGxleGl0eSwgSSBtaWdodCBuZWVkIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgZnJvbSB0aGUgcG9pbnQgb2YgY29sbGVjdGlvbiBhbGwgdGhlIHdheSB0byBpdHMgcHJlc2VudGF0aW9uLiBBIHBvdGVudGlhbCBnb3RjaGEgd291bGQgYmUgaWYgdGhlcmUgYXJlIGFueSByYWNlIGNvbmRpdGlvbnMuIEEgY2xvc2VyIGxvb2sgYXQgdGhlIGRhdGEgc3RydWN0dXJlIGlzIHJlcXVpcmVkIHRvIGVuc3VyZSBhdG9taWNpdHkuIFRoaXMgaXMgYW4gaW1wb3J0YW50IHBpZWNlIG9mIHRoZSBwdXp6bGUsIGFuZCBJIG5lZWQgdG8gZW5zdXJlIGl0JiMzOTtzIGZ1bmN0aW9uaW5nIGFzIGV4cGVjdGVkLiBJdCYjMzk7cyBvZnRlbiB0aGUgdW5zdW5nIGhlcm9lcyBsaWtlIHRoZXNlIHN0YXRpc3RpY3MgdXBkYXRlcyB0aGF0IGNhbiBtYWtlIG9yIGJyZWFrIHRoZSBkaWFnbm9zdGljIHVzZWZ1bG5lc3Mgb2YgdGhlIHRvb2wuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA0OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzA2MywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMDYzOlx0dm9pZCBkYW1vbl9zeXNmc19zY2hlbWVzX3VwZGF0ZV9zdGF0cyhcbjMwNjQ6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG4zMDY1Olx0XHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbjMwNjY6XHR7XG4zMDY3Olx0XHRzdHJ1Y3QgZGFtb3MgKnNjaGVtZTtcbjMwNjg6XHRcdGludCBzY2hlbWVzX2lkeCA9IDA7XG4zMDY5Olx0XG4zMDcwOlx0XHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUoc2NoZW1lLCBjdHgpIHtcbjMwNzE6XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpzeXNmc19zdGF0cztcbjMwNzI6XHRcbjMwNzM6XHRcdFx0LyogdXNlciBjb3VsZCBoYXZlIHJlbW92ZWQgdGhlIHNjaGVtZSBzeXNmcyBkaXIgKi9cbjMwNzQ6XHRcdFx0aWYgKHNjaGVtZXNfaWR4IFx1MDAzZT0gc3lzZnNfc2NoZW1lcy1cdTAwM2VucilcbjMwNzU6XHRcdFx0XHRicmVhaztcbjMwNzY6XHRcbjMwNzc6XHRcdFx0c3lzZnNfc3RhdHMgPSBzeXNmc19zY2hlbWVzLVx1MDAzZXNjaGVtZXNfYXJyW3NjaGVtZXNfaWR4JiM0MzsmIzQzO10tXHUwMDNlc3RhdHM7XG4zMDc4Olx0XHRcdHN5c2ZzX3N0YXRzLVx1MDAzZW5yX3RyaWVkID0gc2NoZW1lLVx1MDAzZXN0YXQubnJfdHJpZWQ7XG4zMDc5Olx0XHRcdHN5c2ZzX3N0YXRzLVx1MDAzZXN6X3RyaWVkID0gc2NoZW1lLVx1MDAzZXN0YXQuc3pfdHJpZWQ7XG4zMDgwOlx0XHRcdHN5c2ZzX3N0YXRzLVx1MDAzZW5yX2FwcGxpZWQgPSBzY2hlbWUtXHUwMDNlc3RhdC5ucl9hcHBsaWVkO1xuMzA4MTpcdFx0XHRzeXNmc19zdGF0cy1cdTAwM2Vzel9hcHBsaWVkID0gc2NoZW1lLVx1MDAzZXN0YXQuc3pfYXBwbGllZDtcbjMwODI6XHRcdFx0c3lzZnNfc3RhdHMtXHUwMDNlc3pfb3BzX2ZpbHRlcl9wYXNzZWQgPVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDU0MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBTU9OIFF1b3RhIEdvYWwgVXBkYXRlIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgcXVvdGEgZ29hbHMgYXJlIGJlaW5nIHVwZGF0ZWQsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXJzcGFjZS4gSXQmIzM5O3MgY2xlYXIgdGhhdCB0aGUgc3RhdHMgYXJlIGdldHRpbmcgdXBkYXRlZCwgdGhhdCBtdWNoIGlzIG9idmlvdXMgZnJvbSB0aGUgY29kZSwgYnV0IEkmIzM5O20gY29uY2VybmVkIGFib3V0IGBjdXJyZW50X3ZhbHVlYCBhbmQgYGxhc3RfcHNpX3RvdGFsYC4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTttIHByZXR0eSBzdXJlIGBsYXN0X3BzaV90b3RhbGAgaXNuJiMzOTt0IGV2ZW4gZXhwb3NlZCB0byB1c2Vyc3BhY2UgZGlyZWN0bHkuIEdvb2QuIEJ1dCB3aGF0IGFib3V0IGBjdXJyZW50X3ZhbHVlYD8KCkFoYSwgZGl2aW5nIGludG8gYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AsIEkgc2VlIHRoZSBgY3VycmVudF92YWx1ZV9zaG93YCBmdW5jdGlvbi4gQmluZ28uIEl0JiMzOTtzIGV4cG9zaW5nIGBkYW1vc19zeXNmc19xdW90YV9nb2FsLSZndDtjdXJyZW50X3ZhbHVlYCB0byB1c2Vyc3BhY2UsIHdoaWNoIGlzIHNldCBmcm9tIHVzZXJzcGFjZSB2aWEgYGN1cnJlbnRfdmFsdWVfc3RvcmVgLiBDcnVjaWFsbHksIHRoaXMgaXNuJiMzOTt0IHN5bmNocm9uaXplZCB3aXRoIHRoZSBjb3JlIGBkYW1vc19xdW90YV9nb2FsLSZndDtjdXJyZW50X3ZhbHVlYC4gU28sIHRoZXJlJiMzOTtzIG5vIGluaGVyZW50IHVwZGF0ZSBwYXRoIGZyb20gdGhlIGNvcmUgREFNT04gbG9naWMgdG8gdGhlIHN5c2ZzIGV4cG9zZWQgdmFsdWUgZm9yIGBjdXJyZW50X3ZhbHVlYC4KCk5vdywgdGhlIHF1ZXN0aW9uIGlzLCAqd2hlcmUgZWxzZSogaXMgYGN1cnJlbnRfdmFsdWVgIGV2ZXIgdXBkYXRlZD8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXNuJiMzOTt0IGJlaW5nIGluYWR2ZXJ0ZW50bHkgbW9kaWZpZWQgc29tZXdoZXJlIGVsc2UgaW4gdGhlIGNvZGViYXNlLiBUaGlzIGNvdWxkIGNhdXNlIHNvbWUgcmVhbGx5IHN1YnRsZSBidWdzIGluIGhvdyB0aGUgcXVvdGEgZ29hbHMgYXJlIGVuZm9yY2VkLCBlc3BlY2lhbGx5IGdpdmVuIGhvdyBgY3VycmVudF92YWx1ZWAgYXBwZWFycyB0byBiZSBhIGNydWNpYWwgZmllbGQgZm9yIHRoZSB1c2VyIHRvIGJlIHRyYWNraW5nLiBJJiMzOTttIGdvaW5nIHRvIGRvIGEgcXVpY2sgc2VhcmNoIGFuZCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHBsYWNlcyB3aGVyZSBgY3VycmVudF92YWx1ZWAgaXMgbWFuaXB1bGF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA0OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2N1cnJlbnRfdmFsdWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEyMTU9c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjE4LVx0dW5zaWduZWQgbG9uZyB0YXJnZXRfdmFsdWU7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTIxOTpcdHVuc2lnbmVkIGxvbmcgY3VycmVudF92YWx1ZTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjIwLVx0aW50IG5pZDtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTMxOT1zdGF0aWMgc3NpemVfdCB0YXJnZXRfdmFsdWVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMjgtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMyOTpzdGF0aWMgc3NpemVfdCBjdXJyZW50X3ZhbHVlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMzMC1cdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMzQtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMzNTpcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JWx1XFxuXCYjMzQ7LCBnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMzYtfVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMzctXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMzODpzdGF0aWMgc3NpemVfdCBjdXJyZW50X3ZhbHVlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMzktXHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzNDItXHRcdFx0ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCwga29iaik7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTM0MzpcdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFx1MDAyNmdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTM0NC1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTQxOD1zdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfdGFyZ2V0X3ZhbHVlX2F0dHIgPVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDIwLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MjE6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vc19zeXNmc19xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVfYXR0ciA9XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQyMjpcdFx0X19BVFRSX1JXX01PREUoY3VycmVudF92YWx1ZSwgMDYwMCk7XG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQyMy1cbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTQzMD1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9hdHRyc1tdID0ge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDMyLVx0XHUwMDI2ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF90YXJnZXRfdmFsdWVfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MzM6XHRcdTAwMjZkYW1vc19zeXNmc19xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MzQtXHRcdTAwMjZkYW1vc19zeXNmc19xdW90YV9nb2FsX25pZF9hdHRyLmF0dHIsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NDc9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NjYtXHRcdGNhc2UgREFNT1NfUVVPVEFfVVNFUl9JTlBVVDpcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyODY3Olx0XHRcdGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IHN5c2ZzX2dvYWwtXHUwMDNlY3VycmVudF92YWx1ZTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODY4LVx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjEwMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEludGVybmFsIERpYWxvZ3VlIG9uIERBTU9TIFF1b3RhIFVwZGF0ZXMqKgoKT2theSwgc28gdGhlIGBjdXJyZW50X3ZhbHVlYCB3ZSYjMzk7cmUgcHVsbGluZyBmcm9tIHN5c2ZzLCB0aGF0JiMzOTtzIGp1c3QgYSBvbmUtd2F5IHN0cmVldCwgcmlnaHQ/IEl0JiMzOTtzIHJlYWQtb25seSBhbmQgZmVlZHMgZGlyZWN0bHkgaW50byB0aGUgY29yZSB1c2luZyBgREFNT1NfUVVPVEFfVVNFUl9JTlBVVGAuIE5vIGNvbXBsZXhpdGllcyB0aGVyZSwganVzdCBhIHN0cmFpZ2h0Zm9yd2FyZCBkYXRhIHRyYW5zZmVyLiBCdXQsIGhvbGQgb24gYSBzZWNvbmQuLi5zb21ldGhpbmcgZmVlbHMgb2ZmLiBXaGF0IGFib3V0IGBkYW1vbl9zeXNmc191cGRhdGVfc2NoZW1lc19lZmZlY3RpdmVfcXVvdGFzYD8gVGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gdGhhdCB3b3JyaWVzIG1lLCBJIG5lZWQgdG8gY2hlY2sgaG93IGl0IHdvcmtzIGJlY2F1c2UgaXQgbWF5IGFmZmVjdCBteSBjb25jbHVzaW9uIHRoYXQgYGN1cnJlbnRfdmFsdWVgIGlzIG9ubHkgcmVhZC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgb2YgdGhlc2UgZnVuY3Rpb25zLiBJIHdvbmRlciBpZiB0aGVyZSYjMzk7cyBhbnkgaGlkZGVuIG1hbmlwdWxhdGlvbiBvciBzaWRlIGVmZmVjdHMgaGFwcGVuaW5nIHdpdGhpbiB0aGF0IG90aGVyIGZ1bmN0aW9uLiBJdCYjMzk7cyBlYXN5IHRvIGdldCBsb3N0IGluIHRoZXNlIGxheWVycyBvZiBhYnN0cmFjdGlvbiwgSSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA0OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VwZGF0ZV9zY2hlbWVzX2VmZmVjdGl2ZV9xdW90YXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYz0xODc5PXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZGFtb25fc3lzZnNfY21kX3N0cnNbXSA9IHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTE4ODctXHRcJiMzNDtjbGVhcl9zY2hlbWVzX3RyaWVkX3JlZ2lvbnNcJiMzNDssXG5tbS9kYW1vbi9zeXNmcy5jOjE4ODg6XHRcJiMzNDt1cGRhdGVfc2NoZW1lc19lZmZlY3RpdmVfcXVvdGFzXCYjMzQ7LFxubW0vZGFtb24vc3lzZnMuYy0xODg5LVx0XCYjMzQ7dXBkYXRlX3R1bmVkX2ludGVydmFsc1wmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY1MDYKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIEVmZmVjdGl2ZSBRdW90YXMgdmlhIGBkYW1vbl9zeXNmc191cGRfc2NoZW1lc19lZmZlY3RpdmVfcXVvdGFzYCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBgZGFtb25fc3lzZnNfdXBkX3NjaGVtZXNfZWZmZWN0aXZlX3F1b3Rhc2AgaW50ZXJmYWNlLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byB1bmRlcnN0YW5kIHRoZSBjdXJyZW50IHN0YXRlIG9mIHF1b3RhcyBhcyB0aGV5IHBlcnRhaW4gdG8gREFNT04gdXBkYXRlIHNjaGVtZXMuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHNlZSB3aGF0IGVmZmVjdGl2ZSBxdW90YSBzZXR0aW5ncyBhcmUgYmVpbmcgYXBwbGllZC4gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYXMgYSBkaWFnbm9zdGljIHN0ZXAg4oCTIEkgbmVlZCB0byBlbnN1cmUgdGhlIHBhcmFtZXRlcnMgSSYjMzk7dmUgY29uZmlndXJlZCB2aWEgc3lzZnMgYXJlIHRyYW5zbGF0aW5nIGludG8gdGhlIGJlaGF2aW9yIEkgZXhwZWN0IGluIHRoZSBEQU1PTiBmcmFtZXdvcmsuIEFtIEkgc2VlaW5nIHRoZSBsaW1pdHMsIHRoZSBidWRnZXQgYWxsb2NhdGlvbnMsIHRoZSBleHBlY3RlZCByZWR1Y3Rpb24gaW4gbWVtb3J5IHByZXNzdXJlLCBvciBhcmUgdGhlcmUgdW5leHBlY3RlZCBxdW90YSB2YWx1ZXMgdGhhdCBjb3VsZCBpbmRpY2F0ZSBhIGJ1ZyBpbiB0aGUgREFNT04gY29uZmlndXJhdGlvbiBsb2dpYywgb3IgYSBwb3RlbnRpYWwgY29uZmxpY3Qgd2l0aCBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zPwoKSSYjMzk7bSBwcm9iYWJseSBnb2luZyB0byBiZSBjcm9zcy1yZWZlcmVuY2luZyB0aGlzIGRhdGEgd2l0aCBvdGhlciBzb3VyY2VzLCBzdWNoIGFzIHRoZSBgZGFtb25fbW9uaXRvcnNgIHN5c2ZzIGludGVyZmFjZSwgdG8gY29ycmVsYXRlIHRoZSBxdW90YSBzZXR0aW5ncyB3aXRoIG9ic2VydmVkIG1vbml0b3JpbmcgcmVzdWx0cy4gSXMgdGhlIGBkYW1vbl9zeXNmc191cGRfc2NoZW1lc19lZmZlY3RpdmVfcXVvdGFzYCBkaXNwbGF5aW5nIHRoZSBjdXJyZW50IHN0YXRlIGFzIGNhbGN1bGF0ZWQgb3IgaXMgdGhlIGFjdHVhbCBiZWhhdmlvciBjb25mbGljdGluZyB3aXRoIHRoaXMgdmFsdWU/IEZyb20gaGVyZSwgSSB3aWxsIGxpa2VseSBnbyBvbiB0byBjaGVjayBob3cgdGhlc2UgcXVvdGFzIGFyZSBiZWluZyB1cGRhdGVkLCBvciBob3cgdGhlc2UgcXVvdGFzIGFyZSBlZmZlY3RpbmcgdGhlIHVuZGVybHlpbmcgYmVoYXZpb3IsIG1heWJlIGNvbXBhcmUgaXQgdG8gYSBjb250cm9sIHNldHVwIHRvIG9ic2VydmUgdGhlIGVmZmVjdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA0OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3N5c2ZzX3VwZF9zY2hlbWVzX2VmZmVjdGl2ZV9xdW90YXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMuYz0yMTUyPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfY29tbWl0X3NjaGVtZXNfcXVvdGFfZ29hbHModm9pZCAqZGF0YSlcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIxNjktLypcbm1tL2RhbW9uL3N5c2ZzLmM6MjE3MDogKiBkYW1vbl9zeXNmc191cGRfc2NoZW1lc19lZmZlY3RpdmVfcXVvdGFzKCkgLSBVcGRhdGUgc2NoZW1lcyBlZmZlY3RpdmUgcXVvdGFzXG5tbS9kYW1vbi9zeXNmcy5jLTIxNzEtICogc3lzZnMgZmlsZXMuXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMTc4LSAqL1xubW0vZGFtb24vc3lzZnMuYzoyMTc5OnN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdXBkX3NjaGVtZXNfZWZmZWN0aXZlX3F1b3Rhcyh2b2lkICpkYXRhKVxubW0vZGFtb24vc3lzZnMuYy0yMTgwLXtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIyMTk9c3RhdGljIGludCBkYW1vbl9zeXNmc19yZXBlYXRfY2FsbF9mbih2b2lkICpkYXRhKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjIzNS1cdGRhbW9uX3N5c2ZzX3VwZF9zY2hlbWVzX3N0YXRzKHN5c2ZzX2tkYW1vbmQpO1xubW0vZGFtb24vc3lzZnMuYzoyMjM2Olx0ZGFtb25fc3lzZnNfdXBkX3NjaGVtZXNfZWZmZWN0aXZlX3F1b3RhcyhzeXNmc19rZGFtb25kKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMjIzNy1vdXQ6XG4tLVxubW0vZGFtb24vc3lzZnMuYz0yMzYzPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfaGFuZGxlX2NtZChlbnVtIGRhbW9uX3N5c2ZzX2NtZCBjbWQsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMzkyLVx0XHRyZXR1cm4gZGFtb25fc3lzZnNfZGFtb25fY2FsbChcbm1tL2RhbW9uL3N5c2ZzLmM6MjM5MzpcdFx0XHRcdGRhbW9uX3N5c2ZzX3VwZF9zY2hlbWVzX2VmZmVjdGl2ZV9xdW90YXMsXG5tbS9kYW1vbi9zeXNmcy5jLTIzOTQtXHRcdFx0XHRrZGFtb25kKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjczNDYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0JiMzOTtzIGdvaW5nIHRocm91Z2ggbXkgbWluZCwgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgaWYgSSYjMzk7bSB0aGUgZXhwZXJ0OgoKKipEaXZpbmcgaW50byBgZGFtb25fc3lzZnNfdXBkX3NjaGVtZXNfZWZmZWN0aXZlX3F1b3Rhc2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYGRhbW9uX3N5c2ZzX3VwZF9zY2hlbWVzX2VmZmVjdGl2ZV9xdW90YXNgIGZpbGUuIEltbWVkaWF0ZWx5LCBJJiMzOTttIHRoaW5raW5nOiB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIHRoZSBEeW5hbWljIEFkYXB0aXZlIE1lbW9yeSBPcHRpbWl6ZXIgKERBTU9OKSBzeXN0ZW0gYW5kIGhvdyBpdCBpbnRlcmZhY2VzIHRocm91Z2ggdGhlIHN5c2ZzIGZpbGVzeXN0ZW0gdG8gbWFuYWdlIHVwZGF0ZSBzY2hlbWVzIGFuZCB0aGVpciBlZmZlY3RpdmUgcXVvdGFzLiBTbywgaXQmIzM5O3MgYWJvdXQgY29udHJvbCBhbmQgbW9uaXRvcmluZywgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBtZW1vcnkgcmVjbGFtYXRpb24gb3Igb3B0aW1pemF0aW9uLgoKR2l2ZW4gdGhlIG5hbWluZywgSSBhbnRpY2lwYXRlIHRoaXMgZmlsZSB3aWxsIGV4cG9zZSBkZXRhaWxzIHJlZ2FyZGluZyB0aGUgcXVvdGFzIGVuZm9yY2VkIG9yIGFwcGxpZWQgdG8gdGhlIGRpZmZlcmVudCB1cGRhdGUgc2NoZW1lcyB0aGF0IERBTU9OIHN1cHBvcnRzLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgaW5mb3JtYXRpb24gcmVmbGVjdGluZyBob3cgdGhlIHN5c3RlbSBpcyBjdXJyZW50bHkgYmVoYXZpbmcgYmFzZWQgb24gdGhlc2UgZGVmaW5lZCBzY2hlbWVzLiBUaGlzIGxpa2VseSB0cmFuc2xhdGVzIHRvIGhvdyBhZ2dyZXNzaXZlbHkgREFNT04gd2lsbCByZWNsYWltIG1lbW9yeSBvciBwZXJmb3JtIHNwZWNpZmljIG9wdGltaXphdGlvbnMgYmFzZWQgb24gdXNhZ2UgcGF0dGVybnMgYW5kIHByZWRlZmluZWQgc2V0dGluZ3MuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3Iga2V5IHBhcmFtZXRlcnMgc3VjaCBhcyB0aGUgbWVtb3J5IHJlZ2lvbiBzaXplLCB1cGRhdGUgcGVyaW9kcywgdGhyZXNob2xkIHZhbHVlcywgYW5kIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucyB0aGF0IGltcGFjdCBxdW90YSBlbmZvcmNlbWVudC4KCkkmIzM5O20gcHJlcGFyZWQgdG8gaW50ZXJwcmV0IHRoZSBkYXRhLCB1bmRlcnN0YW5kaW5nIHRoYXQgdGhlIGVmZmVjdGl2ZSBxdW90YXMgYXJlIHByb2JhYmx5IGNhbGN1bGF0ZWQgYW5kIGFkanVzdGVkIGR5bmFtaWNhbGx5IGJ5IERBTU9OIGJhc2VkIG9uIHZhcmlvdXMgZmFjdG9ycywgcGVyaGFwcyBpbmNsdWRpbmcgYXZhaWxhYmxlIG1lbW9yeSwgb3ZlcmFsbCBzeXN0ZW0gbG9hZCwgYW5kIHBvdGVudGlhbGx5IGV2ZW4gdXNlci1kZWZpbmVkIHR1bmFibGVzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgdGhlIGludGVycGxheSBiZXR3ZWVuIGRpZmZlcmVudCB1cGRhdGUgc2NoZW1lcyBhbmQgaG93IHRoZWlyIHF1b3RhcyBtaWdodCBiZSBwcmlvcml0aXplZCBvciB3ZWlnaHRlZC4gVWx0aW1hdGVseSwgSSYjMzk7bSBob3BpbmcgdGhpcyB3aWxsIGlsbHVtaW5hdGUgaG93IERBTU9OJiMzOTtzIHVwZGF0ZSBsb2dpYyB3b3JrcyBhbmQgcHJvdmlkZSBpbnNpZ2h0IGludG8gb3B0aW1pemluZyB0aGUgc3lzdGVtJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTc5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxNzk6XHRzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3VwZF9zY2hlbWVzX2VmZmVjdGl2ZV9xdW90YXModm9pZCAqZGF0YSlcbjIxODA6XHR7XG4yMTgxOlx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZCA9IGRhdGE7XG4yMTgyOlx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHggPSBrZGFtb25kLVx1MDAzZWRhbW9uX2N0eDtcbjIxODM6XHRcbjIxODQ6XHRcdGRhbW9zX3N5c2ZzX3VwZGF0ZV9lZmZlY3RpdmVfcXVvdGFzKFxuMjE4NTpcdFx0XHRcdGtkYW1vbmQtXHUwMDNlY29udGV4dHMtXHUwMDNlY29udGV4dHNfYXJyWzBdLVx1MDAzZXNjaGVtZXMsIGN0eCk7XG4yMTg2Olx0XHRyZXR1cm4gMDtcbjIxODc6XHR9XG4yMTg4Olx0XG4yMTg5Olx0c3RhdGljIGludCBkYW1vbl9zeXNmc191cGRfdHVuZWRfaW50ZXJ2YWxzKHZvaWQgKmRhdGEpXG4yMTkwOlx0e1xuMjE5MTpcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQgPSBkYXRhO1xuMjE5MjpcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4ID0ga2RhbW9uZC1cdTAwM2VkYW1vbl9jdHg7XG4yMTkzOlx0XG4yMTk0Olx0XHRrZGFtb25kLVx1MDAzZWNvbnRleHRzLVx1MDAzZWNvbnRleHRzX2FyclswXS1cdTAwM2VhdHRycy1cdTAwM2VpbnRlcnZhbHMtXHUwMDNlc2FtcGxlX3VzID1cbjIxOTU6XHRcdFx0Y3R4LVx1MDAzZWF0dHJzLnNhbXBsZV9pbnRlcnZhbDtcbjIxOTY6XHRcdGtkYW1vbmQtXHUwMDNlY29udGV4dHMtXHUwMDNlY29udGV4dHNfYXJyWzBdLVx1MDAzZWF0dHJzLVx1MDAzZWludGVydmFscy1cdTAwM2VhZ2dyX3VzID1cbjIxOTc6XHRcdFx0Y3R4LVx1MDAzZWF0dHJzLmFnZ3JfaW50ZXJ2YWw7XG4yMTk4Olx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgxMjIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBkYW1vc19zeXNmc191cGRhdGVfZWZmZWN0aXZlX3F1b3Rhc2AgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBjb2RlIGlzIGRvaW5nIOKAkyBhbmQgaWRlYWxseSwgaG93IGl0JiMzOTtzICpzdXBwb3NlZCogdG8gYmUgZG9pbmcgaXQuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBmaXJzdCwgdHJ5aW5nIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGlucHV0IGFyZ3VtZW50cywgd2hhdCBkYXRhIHN0cnVjdHVyZXMgaXQmIzM5O3Mgd29ya2luZyB3aXRoLCBhbmQgdGhlIGV4cGVjdGVkIG91dHB1dCBvciBzaWRlIGVmZmVjdHMuIElzIHRoaXMgdG91Y2hpbmcgc3lzZnMgZGlyZWN0bHk/IElmIHNvLCB3aGF0IGF0dHJpYnV0ZXM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGxvY2tpbmcgbWVjaGFuaXNtcyBiZWluZyB1c2VkPyBJIG5lZWQgdG8gaW1tZWRpYXRlbHkgbG9vayBmb3IgcG90ZW50aWFsIGVycm9yIHBhdGhzIOKAkyB3aGF0IGhhcHBlbnMgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcgZHVyaW5nIGEgd3JpdGUsIG9yIGlmIHNvbWUgY3JpdGljYWwgcmVzb3VyY2UgaXNuJiMzOTt0IGF2YWlsYWJsZT8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHNpZ25zIG9mIG1lbW9yeSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiwgZXJyb3IgaGFuZGxpbmcgd2l0aCByZWxldmFudCByZXR1cm4gY29kZXMgYW5kL29yIGxvZyBtZXNzYWdlcy4gTXkgcHJpbWFyeSBmb2N1cyBpcyBvbiBob3cgaXQgbWFuYWdlcyBxdW90YXMgYW5kLCBzcGVjaWZpY2FsbHksIGhvdyBpdCAqdXBkYXRlcyogdGhlIGVmZmVjdGl2ZSBxdW90YXMgdmlhIHN5c2ZzLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHBvc3NpYmxlIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGNvbXBvbmVudHMgdGhhdCBtYXkgYmUgcmVhZGluZyBvciB3cml0aW5nIHRvIHRoZSBzYW1lIHN5c2ZzIGF0dHJpYnV0ZXMgYXQgdGhlIHNhbWUgdGltZS4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IGNvbW1lbnRzIGV4cGxhaW5pbmcgdGhlIGludGVudCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3Nfc3lzZnNfdXBkYXRlX2VmZmVjdGl2ZV9xdW90YXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMtY29tbW9uLmg9NTQ9aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTYtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo1Nzp2b2lkIGRhbW9zX3N5c2ZzX3VwZGF0ZV9lZmZlY3RpdmVfcXVvdGFzKFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTgtXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yODk0PWludCBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTI4LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI5Mjk6dm9pZCBkYW1vc19zeXNmc191cGRhdGVfZWZmZWN0aXZlX3F1b3Rhcyhcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTMwLVx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIxNzk9c3RhdGljIGludCBkYW1vbl9zeXNmc191cGRfc2NoZW1lc19lZmZlY3RpdmVfcXVvdGFzKHZvaWQgKmRhdGEpXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMTgzLVxubW0vZGFtb24vc3lzZnMuYzoyMTg0Olx0ZGFtb3Nfc3lzZnNfdXBkYXRlX2VmZmVjdGl2ZV9xdW90YXMoXG5tbS9kYW1vbi9zeXNmcy5jLTIxODUtXHRcdFx0a2RhbW9uZC1cdTAwM2Vjb250ZXh0cy1cdTAwM2Vjb250ZXh0c19hcnJbMF0tXHUwMDNlc2NoZW1lcywgY3R4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg4MTEKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBkYW1vc19zeXNmc191cGRhdGVfZWZmZWN0aXZlX3F1b3Rhc2AgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBkb2luZywgc3BlY2lmaWNhbGx5IGhvdyBpdCYjMzk7cyB1cGRhdGluZyBlZmZlY3RpdmUgcXVvdGFzLiBCYXNlZCBvbiB0aGUgbmFtZSwgaXQgc2VlbXMgcmVsYXRlZCB0byB0aGUgc3lzZnMgaW50ZXJmYWNlLCBzbyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgZmlsZSBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHVzZWQsIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMgZW1wbG95ZWQgdG8gZW5zdXJlIHRocmVhZCBzYWZldHksIGFuZCBhbnkgZXJyb3IgaGFuZGxpbmcgdGhhdCYjMzk7cyBwcmVzZW50LiBJJiMzOTtsbCBiZSBleHBlY3RpbmcgdG8gZmluZCBkZXRhaWxzIG9uIGhvdyB0aGUgcXVvdGEgdmFsdWVzIGFyZSBjYWxjdWxhdGVkLCBhbmQgaG93IHRoZXNlIGNhbGN1bGF0aW9ucyBhcmUgaW50ZWdyYXRlZCBpbnRvIHRoZSBxdW90YSBzeXN0ZW0uIEkmIzM5O2xsIGJlIGFuYWx5emluZyBlYWNoIGxpbmUgb2YgdGhlIGltcGxlbWVudGF0aW9uLCBsaW5lIGJ5IGxpbmUuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBjb2RlIGlzIHdlbGwtY29tbWVudGVkIGFuZCBlYXN5IHRvIGZvbGxvdy4gSSBob3BlIGl0JiMzOTtzIHdlbGwtd3JpdHRlbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTI5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI5Mjk6XHR2b2lkIGRhbW9zX3N5c2ZzX3VwZGF0ZV9lZmZlY3RpdmVfcXVvdGFzKFxuMjkzMDpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbjI5MzE6XHRcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuMjkzMjpcdHtcbjI5MzM6XHRcdHN0cnVjdCBkYW1vcyAqc2NoZW1lO1xuMjkzNDpcdFx0aW50IHNjaGVtZXNfaWR4ID0gMDtcbjI5MzU6XHRcbjI5MzY6XHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzY2hlbWUsIGN0eCkge1xuMjkzNzpcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzICpzeXNmc19xdW90YXM7XG4yOTM4Olx0XG4yOTM5Olx0XHRcdC8qIHVzZXIgY291bGQgaGF2ZSByZW1vdmVkIHRoZSBzY2hlbWUgc3lzZnMgZGlyICovXG4yOTQwOlx0XHRcdGlmIChzY2hlbWVzX2lkeCBcdTAwM2U9IHN5c2ZzX3NjaGVtZXMtXHUwMDNlbnIpXG4yOTQxOlx0XHRcdFx0YnJlYWs7XG4yOTQyOlx0XG4yOTQzOlx0XHRcdHN5c2ZzX3F1b3RhcyA9XG4yOTQ0Olx0XHRcdFx0c3lzZnNfc2NoZW1lcy1cdTAwM2VzY2hlbWVzX2FycltzY2hlbWVzX2lkeCYjNDM7JiM0MztdLVx1MDAzZXF1b3RhcztcbjI5NDU6XHRcdFx0c3lzZnNfcXVvdGFzLVx1MDAzZWVmZmVjdGl2ZV9zeiA9IHNjaGVtZS1cdTAwM2VxdW90YS5lc3o7XG4yOTQ2Olx0XHR9XG4yOTQ3Olx0fVxuMjk0ODpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTM1MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDcxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEluZm9ybWF0aW9uIExlYWthZ2UgYW5kIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFVzYWdlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBgbGFzdF9wc2lfdG90YWxgIGlzIHB1cmVseSBpbnRlcm5hbCBhbmQgbm90IGV4cG9zZWQgdG8gdXNlcnNwYWNlLCB3aGljaCBpcyBnb29kLiBUaGUgYGN1cnJlbnRfdmFsdWVgIGlzIG9ubHkgdXNlci12aXNpYmxlIGZvciBpbnB1dCwgd2hpY2ggYWxzbyBzZWVtZWQgc2FmZS4gQnV0IHRoZW4gSSByZWFsaXplZCBgY3VycmVudF92YWx1ZV9zaG93YCBwcmludHMgYGdvYWwtJmd0O2N1cnJlbnRfdmFsdWVgLCBub3Qgc29tZSBkZXJpdmVkIG9yIHNhbml0aXplZCB2YWx1ZS4gSG93ZXZlciwgdGhlIGtlcm5lbCYjMzk7cyBgZGFtb3NfcXVvdGFfZ29hbC0mZ3Q7Y3VycmVudF92YWx1ZWAgaXMgbmV2ZXIgZGlyZWN0bHkgZXhwb3NlZC4gU28sIG5vIGluZm9ybWF0aW9uIGxlYWsgdGhlcmUuIFRoYXQmIzM5O3MgYSByZWxpZWYuCgpUaGUgbmV4dCBjb25jZXJuIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJZiBgbGFzdF9wc2lfdG90YWxgIHdhc24mIzM5O3QgaW5pdGlhbGl6ZWQsIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYCB3b3VsZCB1c2UgaXQ6IEl0IGNhbGN1bGF0ZXMgYGdvYWwtJmd0O2N1cnJlbnRfdmFsdWVgIGJ5IHN1YnRyYWN0aW5nIGl0IGZyb20gYG5vd19wc2lfdG90YWxgLiBBbmQgdGhlbiBgZ29hbC0mZ3Q7Y3VycmVudF92YWx1ZWAgaXMgdXNlZCBpbiBgZGFtb3NfcXVvdGFfc2NvcmVgLCBzcGVjaWZpY2FsbHkgaW4gY2FsY3VsYXRpbmcgdGhlIGBoaWdoZXN0X3Njb3JlYC4gVGhhdCBgaGlnaGVzdF9zY29yZWAgaXMgdXNlZCB0byBhZGp1c3QgdGhlIHF1b3RhIHNpemUsIHNvIGlmIHRoaXMgdmFsdWUgaXMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLCB0aGUgcXVvdGEgYWRqdXN0bWVudCB3b3VsZCBiZSByYW5kb20vd3JvbmcgZm9yIHRoZSBmaXJzdCBjeWNsZS4gVGhpcyBpcyBhIGxvZ2ljIGJ1ZyB0aGF0IGNvdWxkIGhhdmUgc2VyaW91cyBjb25zZXF1ZW5jZXMuCgpXYWl0LCBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgIHVzZXMgYGttYWxsb2Nfb2JqYCwgd2hpY2ggKmRvZXNuJiMzOTt0KiB6ZXJvIG1lbW9yeS4gU28sIGBsYXN0X3BzaV90b3RhbGAgKmlzKiBpbmRlZWQgdW5pbml0aWFsaXplZC4gVGhlIHBhdGNoIGZpeGVzIHRoaXMgYnkgaW5pdGlhbGl6aW5nIGBsYXN0X3BzaV90b3RhbGAuCgpNeSBxdWVzdGlvbiB0aGVuIGJlY2FtZTogV291bGQgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBjYXRjaCB0aGlzPyBZZXMsIGl0IHdvdWxkLiBLTVNBTiBkZXRlY3RzIHRoZSB1c2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY2FsY3VsYXRpb25zIHRoYXQgYWZmZWN0IGNvbnRyb2wgZmxvdyBvciBhcmUgcGFzc2VkIHRvIG90aGVyIGZ1bmN0aW9ucy4KCkRvZXMgYGdvYWwtJmd0O2N1cnJlbnRfdmFsdWVgIGFmZmVjdCBjb250cm9sIGZsb3c/IGBoaWdoZXN0X3Njb3JlYCB1c2VzIGBnb2FsLSZndDtjdXJyZW50X3ZhbHVlYCB0byBjYWxjdWxhdGUgYHF1b3RhLSZndDtlc3pgIChlZmZlY3RpdmUgc2l6ZSkuIFRoYXQgYHF1b3RhLSZndDtlc3pgIGlzIHVzZWQgaW4gYGRhbW9zX2FkanVzdF9xdW90YWAsIHdoaWNoIGRldGVybWluZXMgaG93IG11Y2ggbWVtb3J5IERBTU9OIHJlY2xhaW1zLiBUaGlzIG1lYW5zIGFuIGluY29ycmVjdCB2YWx1ZSBvZiBgcXVvdGEtJmd0O2VzemAgY2FuIGxlYWQgdG8gdW5wcmVkaWN0YWJsZSBiZWhhdmlvci4gSXQgaXMgbm90IGp1c3QgYSBidWcsIGl0IGNvdWxkIGhhdmUgYW4gZWZmZWN0IG9uIGNvbnRyb2wgZmxvdy4gSXTigJlzIGNlcnRhaW5seSBhIGZ1bmN0aW9uYWwgYnVnLCBzaW5jZSBgcXVvdGEtJmd0O2VzemAgaGFzIGFuIGltcG9ydGFudCBmdW5jdGlvbiBhbmQgdGhpcyBtYWtlcyBpdCBpbmNvcnJlY3QsIEtNU0FOIHdvdWxkIGNhdGNoIHRoZSB1c2Ugb2YgdW5pbml0aWFsaXplZCBgbGFzdF9wc2lfdG90YWxgIGluIGBub3dfcHNpX3RvdGFsIC0gZ29hbC0mZ3Q7bGFzdF9wc2lfdG90YWxgLgoKS01TQU4gcmVwb3J0cyB1bmluaXRpYWxpemVkIG1lbW9yeSBpZiB1c2VkIGluIGEgYnJhbmNoIG9yIHdoZW4gY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgYXMgYSBwb2ludGVyL2luZGV4LiBJcyBgZ29hbC0mZ3Q7Y3VycmVudF92YWx1ZWAgdXNlZCBpbiBhIGJyYW5jaD8gSSYjMzk7ZCBoYXZlIHRvIGxvb2sgYXQgYG11bHRfZnJhY2Agc3BlY2lmaWNhbGx5IHRvIGNvbmZpcm0gdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDQ6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXVsdF9mcmFjJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tYXRoLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tYXRoLmg9MTE2PV9fU1RSVUNUX0ZSQUNUKHUzMilcbi0tXG5pbmNsdWRlL2xpbnV4L21hdGguaC0xMTktLyogQ2FsY3VsYXRlIFwmIzM0O3ggKiBuIC8gZFwmIzM0OyB3aXRob3V0IHVubmVjZXNzYXJ5IG92ZXJmbG93IG9yIGxvc3Mgb2YgcHJlY2lzaW9uLiAqL1xuaW5jbHVkZS9saW51eC9tYXRoLmg6MTIwOiNkZWZpbmUgbXVsdF9mcmFjKHgsIG4sIGQpXHRcXFxuaW5jbHVkZS9saW51eC9tYXRoLmgtMTIxLSh7XHRcdFx0XHRcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDc5MAoJCQkJCQkJb3V0cHV0OiAzMDAKCQkJCQkJCXRob3VnaHRzOiAyNDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEp1c3RpZmljYXRpb246IFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJlYWQgaW4gREFNT04gUXVvdGEgU2NvcmluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSBoYXZlIGBtdWx0X2ZyYWNgLCBwdXJlbHkgbWF0aGVtYXRpY2FsLCBubyBpc3N1ZSB0aGVyZS4gVGhlIHJlYWwgY29uY2VybiBpcyB0aGUgYG1heChoaWdoZXN0X3Njb3JlLCAuLi4pYCBjYWxsLiBgbWF4YCwgYXMgZGVmaW5lZCBieSB0aGUgbWFjcm8sIGNsZWFybHkgaW52b2x2ZXMgYSBjb21wYXJpc29uIOKAkyBhIGNvbmRpdGlvbmFsIGJyYW5jaC4gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaGUgY29yZSBwcm9ibGVtIGlzIHRoYXQgYGxhc3RfcHNpX3RvdGFsYCB3aXRoaW4gdGhlIGBkYW1vc19xdW90YV9nb2FsYCBzdHJ1Y3QgbWlnaHQgYmUgdW5pbml0aWFsaXplZC4gS01TQU4sIHdpdGggaXRzIGJpdC1sZXZlbCB0cmFja2luZywgd2lsbCBmbGFnIGFueSB1c2Ugb2YgYW4gdW5pbml0aWFsaXplZCB2YWx1ZSBpbiBhIGNvbmRpdGlvbmFsLCBhcyB3ZSBoYXZlIGhlcmUgd2l0aCB0aGUgYCZndDtgIGluIHRoZSBgbWF4YCBtYWNyby4KCk5vdywgaXMgdGhpcyBidWcgZXZlbiByZWFjaGFibGU/IERBTU9OJiMzOTtzIGBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVNgIGZlYXR1cmUsIGludHJvZHVjZWQgaW4gdjYuMTAgb3Igc28sIGlzIGtleSBoZXJlLiBVc2Vyc3BhY2UgY2FuIGNyZWF0ZSBhIERBTU9OIHNjaGVtZSB1c2luZyB0aGlzIG1ldHJpYy4gV2hlbiBzdWNoIGEgc2NoZW1lICpzdGFydHMqLCBgbGFzdF9wc2lfdG90YWxgIGlzIHVuaW5pdGlhbGl6ZWQuIFRoZSBmdW5jdGlvbiBgZGFtb3Nfc2V0X3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZWAgaXMgdGhlbiBjYWxsZWQgaW4gdGhlIGZpcnN0IGN5Y2xlLCB1c2luZyB0aGUgYGxhc3RfcHNpX3RvdGFsYC4gQmluZ28hIEtNU0FOIHdpbGwgY2F0Y2ggdGhpcy4KCkJ1dCB3YWl0LCB3b3VsZCBLQVNBTiBoYXZlIGNhdWdodCB0aGlzPyBOb3BlLiBLQVNBTiBvbmx5IGRldGVjdHMgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucy4gSXQgZG9lc24mIzM5O3QgY2FyZSBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyB3aXRoaW4gYWxsb2NhdGVkIHJlZ2lvbnMuIFNvLCB0aGlzIGlzIGEgcHVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGJ1Zy4KCkxldCYjMzk7cyBjb25maXJtIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgbGFzdF9wc2lfdG90YWxgLiBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgIGFsbG9jYXRlcyBpdCB2aWEgYGttYWxsb2Nfb2JqYC4gTG9va2luZyBhdCB0aGUgY29kZToKCmBgYGMKc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX25ld19xdW90YV9nb2FsKAoJCWVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljLAoJCXVuc2lnbmVkIGxvbmcgdGFyZ2V0X3ZhbHVlKQp7CglzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDsKCglnb2FsID0ga21hbGxvY19vYmooKmdvYWwpOwoJaWYgKCFnb2FsKQoJCXJldHVybiBOVUxMOwoJZ29hbC0mZ3Q7bWV0cmljID0gbWV0cmljOwoJZ29hbC0mZ3Q7dGFyZ2V0X3ZhbHVlID0gdGFyZ2V0X3ZhbHVlOwoJSU5JVF9MSVNUX0hFQUQoJmFtcDtnb2FsLSZndDtsaXN0KTsKCXJldHVybiBnb2FsOwp9CmBgYAoKWWVzLCBga21hbGxvY19vYmpgIGFsbG9jYXRlcyBidXQgKmRvZXNuJiMzOTt0KiBpbml0aWFsaXplIGl0LiBUaGlzIGZ1bmN0aW9uIGRvZXNuJiMzOTt0IGluaXRpYWxpemUgYGxhc3RfcHNpX3RvdGFsYC4gQmVmb3JlIHRoZSBwYXRjaCwgaXQgd2FzIG9ubHkgaW5pdGlhbGl6ZWQgaW4gYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uYCAob3Igbm90IGF0IGFsbCkuIFRoZSBwYXRjaCBhZGRlZCBpbml0aWFsaXphdGlvbiBvZiB0aGlzIHZhbHVlIGJ1dCBub3QgZm9yIHRoZSBmaXJzdCBjeWNsZS4gU28sIHByZS1wYXRjaCwgYGxhc3RfcHNpX3RvdGFsYCB3YXMgKm5ldmVyKiBpbml0aWFsaXplZCBvbiBnb2FsIGNyZWF0aW9uLCBhbmQgdGhlIHBhdGNoIGFkZHMgdGhlIGluaXRpYWxpemF0aW9uIGluIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbmAgYnV0IG5vdCBvbiBpbml0aWFsIGFsbG9jYXRpb24hIFRoZSBjb21tZW50IGluIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbGAgbWVudGlvbnMsICYjMzQ7a2VlcCBgbGFzdF9wc2lfdG90YWxgIGFzIGlzLCBzaW5jZSBpdCB3aWxsIGJlIHVwZGF0ZWQgaW4gbmV4dCBjeWNsZS4mIzM0OyBUaGlzIGNvbmZpcm1zIHRoZSBpbnRlbmRlZCBiZWhhdmlvcjogIHRoZSBpbml0aWFsIGN5Y2xlICptdXN0KiB1c2UgYW4gdW5pbml0aWFsaXplZCB2YWx1ZSEKClNvLCB5ZXMsIGl0JiMzOTtzIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZS4gVGhlIGJ1ZyBpcyBoZXJlIQoKSXMgdGhpcyBhIHNlY3VyaXR5IGlzc3VlPyBEZWZpbml0ZWx5LiBBbiB1bmluaXRpYWxpemVkIHJlYWQgY2FuIGluZmx1ZW5jZSB0aGUgcXVvdGEgc2NvcmUsIGFuZCB0aGUgcXVvdGEgc2NvcmUgaW1wYWN0cyBob3cgYWdncmVzc2l2ZWx5IERBTU9OIHJlY2xhaW1zIG1lbW9yeS4gQW4gYXR0YWNrZXIgY291bGQgcG90ZW50aWFsbHkgbWFuaXB1bGF0ZSBtZW1vcnkgcmVjbGFpbSBkZWNpc2lvbnMgYmFzZWQgb24gdGhlICpyYW5kb20qIGNvbnRlbnRzIG9mIHVuaW5pdGlhbGl6ZWQgaGVhcCBtZW1vcnkuIFRoaXMgaXMgYSBjbGFzc2ljIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSB2dWxuZXJhYmlsaXR5LiBLTVNBTiBpcyB0aGUgKnBlcmZlY3QqIHRvb2wgdG8gY2F0Y2ggdGhpcy4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhhdCBga21hbGxvY19vYmpgIGFjdHVhbGx5IGNhbGxzIGBrbWFsbG9jYCwgbm90IGBremFsbG9jYDoKCmBgYGMKI2RlZmluZSBrbWFsbG9jX29iaihWQVJfT1JfVFlQRSwgLi4uKSBcCglfX2FsbG9jX29ianMoa21hbGxvYywgZGVmYXVsdF9nZnAoX19WQV9BUkdTX18pLCB0eXBlb2YoVkFSX09SX1RZUEUpLCAxKQpgYGAKClllcCwgaXQgdXNlcyBga21hbGxvY2AuCgpUaGUgY2hhbmdlIGluIGBtbS9kYW1vbi9zeXNmcy5jYCBpcyBpcnJlbGV2YW50OyBpdCYjMzk7cyBqdXN0IGZpeGluZyBhIGtkYW1vbmQgcmVmcmVzaCBpbnRlcnZhbCBpc3N1ZS4KClNvLCB0aGUgYnVnIGlzIGRlZmluaXRlbHkgd2l0aCBgbGFzdF9wc2lfdG90YWxgLCB1c2VkIGluIGBub3dfcHNpX3RvdGFsIC0gZ29hbC0mZ3Q7bGFzdF9wc2lfdG90YWxgLCBhbmQgdGhpcyByZXN1bHQgaXMgdGhlbiB1c2VkIGluIGEgY29tcGFyaXNvbiB3aXRoaW4gYG1heChoaWdoZXN0X3Njb3JlLCAuLi4pYC4gS01TQU4gKndpbGwqIGNhdGNoIHRoaXMgYmVjYXVzZSBpdCB1c2VzIGFuIHVuaW5pdGlhbGl6ZWQgdmFsdWUgaW4gYSBjb25kaXRpb25hbCBicmFuY2guIFRoZXJlJiMzOTtzIG5vIHdheSBhcm91bmQgaXQuCgpMZXQmIzM5O3MgY29uZmlybSB0aGUgdHlwZSBvZiBgZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpYCBpcyBgdTY0YC4KCmBgYGMKdTY0IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwodm9pZCkKYGBgCgpHb29kLgoKTGV0JiMzOTtzIHJldmlldyB0aGUgS01TQU4gcnVsZXM6IFRoZSBwYXRjaCBtb2RpZmllZCBpbml0aWFsaXphdGlvbiBvZiBhIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgKGBkYW1vc19xdW90YV9nb2FsYCkgd2hlcmUKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBidWcgd2hlcmUgdGhlIGBsYXN0X3BzaV90b3RhbGAgZmllbGQgaW4gYHN0cnVjdCBkYW1vc19xdW90YV9nb2FsYCBpcyBsZWZ0IHVuaW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uLiBUaGUgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB1c2luZyBga21hbGxvY19vYmooKWAgKHdoaWNoIG1hcHMgdG8gYGttYWxsb2NgIGFuZCBkb2VzIG5vdCB6ZXJvIG1lbW9yeSkgaW4gYGRhbW9zX25ld19xdW90YV9nb2FsKClgLCBidXQgYGxhc3RfcHNpX3RvdGFsYCB3YXMgbm90IGluaXRpYWxpemVkLiBEdXJpbmcgdGhlIGZpcnN0IGV2YWx1YXRpb24gY3ljbGUsIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKClgIHJlYWRzIHRoaXMgdW5pbml0aWFsaXplZCBmaWVsZCB0byBjb21wdXRlIGBnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBub3dfcHNpX3RvdGFsIC0gZ29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbDtgLiBUaGlzIHVuaW5pdGlhbGl6ZWQgcmVzdWx0IGlzIHN1YnNlcXVlbnRseSB1c2VkIGluIGEgY29uZGl0aW9uYWwgYnJhbmNoICh2aWEgdGhlIGBtYXgoKWAgbWFjcm8pIGluIGBkYW1vc19xdW90YV9zY29yZSgpYCB0byBkZXRlcm1pbmUgdGhlIGhpZ2hlc3QgcXVvdGEgc2NvcmUsIHdoaWNoIGRpY3RhdGVzIG1lbW9yeSByZWNsYWltIGJlaGF2aW9yLlxuXG5TdGFuZGFyZCBLQVNBTiBvbmx5IGRldGVjdHMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWUgYnVnczsgaXQgZG9lcyBub3QgdHJhY2sgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIHdvdWxkIGNvbXBsZXRlbHkgbWlzcyB0aGlzIGJ1Zy4gS01TQU4sIG9uIHRoZSBvdGhlciBoYW5kLCB0cmFja3MgdW5pbml0aWFsaXplZCBtZW1vcnkgYXQgdGhlIGJpdCBsZXZlbCBhbmQgd2lsbCByZWxpYWJseSBmbGFnIHRoZSB1c2Ugb2YgdGhlIHVuaW5pdGlhbGl6ZWQgdmFsdWUgd2hlbiBpdCBhZmZlY3RzIGNvbnRyb2wgZmxvdyAoZS5nLiwgaW4gdGhlIGBtYXgoKWAgY29tcGFyaXNvbikuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBoaWdobHkganVzdGlmaWVkIHRvIGNhdGNoIHRoaXMgYW5kIHNpbWlsYXIgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGluIHRoZSBEQU1PTiBzdWJzeXN0ZW0uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGJ1ZyB3aGVyZSB0aGUgYGxhc3RfcHNpX3RvdGFsYCBmaWVsZCBpbiBgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWxgIGlzIGxlZnQgdW5pbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24uIFRoZSBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHVzaW5nIGBrbWFsbG9jX29iaigpYCAod2hpY2ggbWFwcyB0byBga21hbGxvY2AgYW5kIGRvZXMgbm90IHplcm8gbWVtb3J5KSBpbiBgZGFtb3NfbmV3X3F1b3RhX2dvYWwoKWAsIGJ1dCBgbGFzdF9wc2lfdG90YWxgIHdhcyBub3QgaW5pdGlhbGl6ZWQuIER1cmluZyB0aGUgZmlyc3QgZXZhbHVhdGlvbiBjeWNsZSwgYGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoKWAgcmVhZHMgdGhpcyB1bmluaXRpYWxpemVkIGZpZWxkIHRvIGNvbXB1dGUgYGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZSA9IG5vd19wc2lfdG90YWwgLSBnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsO2AuIFRoaXMgdW5pbml0aWFsaXplZCByZXN1bHQgaXMgc3Vic2VxdWVudGx5IHVzZWQgaW4gYSBjb25kaXRpb25hbCBicmFuY2ggKHZpYSB0aGUgYG1heCgpYCBtYWNybykgaW4gYGRhbW9zX3F1b3RhX3Njb3JlKClgIHRvIGRldGVybWluZSB0aGUgaGlnaGVzdCBxdW90YSBzY29yZSwgd2hpY2ggZGljdGF0ZXMgbWVtb3J5IHJlY2xhaW0gYmVoYXZpb3IuXG5cblN0YW5kYXJkIEtBU0FOIG9ubHkgZGV0ZWN0cyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzOyBpdCBkb2VzIG5vdCB0cmFjayB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgd291bGQgY29tcGxldGVseSBtaXNzIHRoaXMgYnVnLiBLTVNBTiwgb24gdGhlIG90aGVyIGhhbmQsIHRyYWNrcyB1bmluaXRpYWxpemVkIG1lbW9yeSBhdCB0aGUgYml0IGxldmVsIGFuZCB3aWxsIHJlbGlhYmx5IGZsYWcgdGhlIHVzZSBvZiB0aGUgdW5pbml0aWFsaXplZCB2YWx1ZSB3aGVuIGl0IGFmZmVjdHMgY29udHJvbCBmbG93IChlLmcuLCBpbiB0aGUgYG1heCgpYCBjb21wYXJpc29uKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIGhpZ2hseSBqdXN0aWZpZWQgdG8gY2F0Y2ggdGhpcyBhbmQgc2ltaWxhciB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgaW4gdGhlIERBTU9OIHN1YnN5c3RlbS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0MTo1OC44OTU0OTA2MzRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTAyMzkwNTA0NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzXCIsXG4gICAgXCJkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBidWcgd2hlcmUgdGhlIGBsYXN0X3BzaV90b3RhbGAgZmllbGQgaW4gYHN0cnVjdCBkYW1vc19xdW90YV9nb2FsYCBpcyBsZWZ0IHVuaW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uLiBUaGUgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB1c2luZyBga21hbGxvY19vYmooKWAgKHdoaWNoIG1hcHMgdG8gYGttYWxsb2NgIGFuZCBkb2VzIG5vdCB6ZXJvIG1lbW9yeSkgaW4gYGRhbW9zX25ld19xdW90YV9nb2FsKClgLCBidXQgYGxhc3RfcHNpX3RvdGFsYCB3YXMgbm90IGluaXRpYWxpemVkLiBEdXJpbmcgdGhlIGZpcnN0IGV2YWx1YXRpb24gY3ljbGUsIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKClgIHJlYWRzIHRoaXMgdW5pbml0aWFsaXplZCBmaWVsZCB0byBjb21wdXRlIGBnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gbm93X3BzaV90b3RhbCAtIGdvYWwtXFx1MDAzZWxhc3RfcHNpX3RvdGFsO2AuIFRoaXMgdW5pbml0aWFsaXplZCByZXN1bHQgaXMgc3Vic2VxdWVudGx5IHVzZWQgaW4gYSBjb25kaXRpb25hbCBicmFuY2ggKHZpYSB0aGUgYG1heCgpYCBtYWNybykgaW4gYGRhbW9zX3F1b3RhX3Njb3JlKClgIHRvIGRldGVybWluZSB0aGUgaGlnaGVzdCBxdW90YSBzY29yZSwgd2hpY2ggZGljdGF0ZXMgbWVtb3J5IHJlY2xhaW0gYmVoYXZpb3IuXFxuXFxuU3RhbmRhcmQgS0FTQU4gb25seSBkZXRlY3RzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3M7IGl0IGRvZXMgbm90IHRyYWNrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCB3b3VsZCBjb21wbGV0ZWx5IG1pc3MgdGhpcyBidWcuIEtNU0FOLCBvbiB0aGUgb3RoZXIgaGFuZCwgdHJhY2tzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGF0IHRoZSBiaXQgbGV2ZWwgYW5kIHdpbGwgcmVsaWFibHkgZmxhZyB0aGUgdXNlIG9mIHRoZSB1bmluaXRpYWxpemVkIHZhbHVlIHdoZW4gaXQgYWZmZWN0cyBjb250cm9sIGZsb3cgKGUuZy4sIGluIHRoZSBgbWF4KClgIGNvbXBhcmlzb24pLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgaGlnaGx5IGp1c3RpZmllZCB0byBjYXRjaCB0aGlzIGFuZCBzaW1pbGFyIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBpbiB0aGUgREFNT04gc3Vic3lzdGVtLlwiLFxuICBcIk5lZWRzS01TQU5cIjogdHJ1ZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgREFNT04gbG9naWMgdG8gcHJvcGVybHkgaW5pdGlhbGl6ZSBhbmQgY29tbWl0IHRoZSBgbGFzdF9wc2lfdG90YWxgIGZvciB0aGUgYERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AgcXVvdGEgbWV0cmljLiBJdCBhbHNvIGZpeGVzIHRoZSBgbmV4dF9yZWZyZXNoX2ppZmZpZXNgIGhhbmRsaW5nIGluIERBTU9OIHN5c2ZzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzeXNmcywgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDE6NTguODk1NDk0Nzk0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDYxNTY4NDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDE2ZGVhZThjYTgzMDUzYzY5ZWQ4M2ViMDRiZmZlOGQ5YTM0YjI4NVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAyNyAwNDo0MTo1NyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcXG5pbmRleCA2NDRkYWY1YTE2NTYwLi42ZjM2MGQ2MTM5MGFkIDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xcbkBAIC0xMTIyLDYgKzExMjIsOSBAQCBzdGF0aWMgdm9pZCBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihcXG4gXFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKnNyYylcXG4ge1xcbiBcXHRzd2l0Y2ggKGRzdC1cXHUwMDNlbWV0cmljKSB7XFxuK1xcdGNhc2UgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTOlxcbitcXHRcXHRkc3QtXFx1MDAzZWxhc3RfcHNpX3RvdGFsID0gZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpO1xcbitcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9VU0VEX0JQOlxcbiBcXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlA6XFxuIFxcdFxcdGRzdC1cXHUwMDNlbmlkID0gc3JjLVxcdTAwM2VuaWQ7XFxuQEAgLTExNDMsNyArMTE0Niw2IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxcbiBcXHRkc3QtXFx1MDAzZXRhcmdldF92YWx1ZSA9IHNyYy1cXHUwMDNldGFyZ2V0X3ZhbHVlO1xcbiBcXHRpZiAoZHN0LVxcdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfVVNFUl9JTlBVVClcXG4gXFx0XFx0ZHN0LVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gc3JjLVxcdTAwM2VjdXJyZW50X3ZhbHVlO1xcbi1cXHQvKiBrZWVwIGxhc3RfcHNpX3RvdGFsIGFzIGlzLCBzaW5jZSBpdCB3aWxsIGJlIHVwZGF0ZWQgaW4gbmV4dCBjeWNsZSAqL1xcbiBcXHRkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbihkc3QsIHNyYyk7XFxuIH1cXG4gXFxuQEAgLTM3MjcsNiArMzcyOSwxNyBAQCBzdGF0aWMgaW50IGtkYW1vbmRfd2FpdF9hY3RpdmF0aW9uKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4gXFx0cmV0dXJuIC1FQlVTWTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgZGFtb3NfaW5pdF9xdW90YV9nb2FsX2xhc3RfcHNpKHN0cnVjdCBkYW1vcyAqcylcXG4re1xcbitcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcXG4rXFxuK1xcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgXFx1MDAyNnMtXFx1MDAzZXF1b3RhKSB7XFxuK1xcdFxcdGlmIChnb2FsLVxcdTAwM2VtZXRyaWMgIT0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0Z29hbC1cXHUwMDNlbGFzdF9wc2lfdG90YWwgPSBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKCk7XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIHZvaWQga2RhbW9uZF9pbml0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBzYW1wbGVfaW50ZXJ2YWwgPSBjdHgtXFx1MDAzZWF0dHJzLnNhbXBsZV9pbnRlcnZhbCA/XFxuQEAgLTM3NDMsNiArMzc1Niw3IEBAIHN0YXRpYyB2b2lkIGtkYW1vbmRfaW5pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbiBcXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUoc2NoZW1lLCBjdHgpIHtcXG4gXFx0XFx0ZGFtb3Nfc2V0X25leHRfYXBwbHlfc2lzKHNjaGVtZSwgY3R4KTtcXG4gXFx0XFx0ZGFtb3Nfc2V0X2ZpbHRlcnNfZGVmYXVsdF9yZWplY3Qoc2NoZW1lKTtcXG4rXFx0XFx0ZGFtb3NfaW5pdF9xdW90YV9nb2FsX2xhc3RfcHNpKHNjaGVtZSk7XFxuIFxcdH1cXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMuYyBiL21tL2RhbW9uL3N5c2ZzLmNcXG5pbmRleCBlMzg1OGZmYWI0YjIyLi5mMDViMjU2YzkwZWU3IDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL3N5c2ZzLmNcXG4rKysgYi9tbS9kYW1vbi9zeXNmcy5jXFxuQEAgLTE3ODksNiArMTc4OSw3IEBAIHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kIHtcXG4gXFx0c3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHRzICpjb250ZXh0cztcXG4gXFx0c3RydWN0IGRhbW9uX2N0eCAqZGFtb25fY3R4O1xcbiBcXHR1bnNpZ25lZCBpbnQgcmVmcmVzaF9tcztcXG4rXFx0dW5zaWduZWQgbG9uZyBuZXh0X3JlZnJlc2hfamlmZmllcztcXG4gfTtcXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqZGFtb25fc3lzZnNfa2RhbW9uZF9hbGxvYyh2b2lkKVxcbkBAIC0yMjE1LDE3ICsyMjE2LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zeXNmc19idWlsZF9jdHgoXFxuIFxcdHJldHVybiBjdHg7XFxuIH1cXG4gXFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXM7XFxuLVxcbiBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3JlcGVhdF9jYWxsX2ZuKHZvaWQgKmRhdGEpXFxuIHtcXG4gXFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKnN5c2ZzX2tkYW1vbmQgPSBkYXRhO1xcbiBcXG4gXFx0aWYgKCFzeXNmc19rZGFtb25kLVxcdTAwM2VyZWZyZXNoX21zKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4tXFx0aWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXMpKVxcbitcXHRpZiAodGltZV9iZWZvcmUoamlmZmllcywgc3lzZnNfa2RhbW9uZC1cXHUwMDNlbmV4dF9yZWZyZXNoX2ppZmZpZXMpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4tXFx0ZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllcyA9IGppZmZpZXMgK1xcbitcXHRzeXNmc19rZGFtb25kLVxcdTAwM2VuZXh0X3JlZnJlc2hfamlmZmllcyA9IGppZmZpZXMgK1xcbiBcXHRcXHRtc2Vjc190b19qaWZmaWVzKHN5c2ZzX2tkYW1vbmQtXFx1MDAzZXJlZnJlc2hfbXMpO1xcbiBcXG4gXFx0aWYgKCFtdXRleF90cnlsb2NrKFxcdTAwMjZkYW1vbl9zeXNmc19sb2NrKSlcXG5AQCAtMjI3Myw4ICsyMjcyLDggQEAgc3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxcbiBcXHR9XFxuIFxcdGtkYW1vbmQtXFx1MDAzZWRhbW9uX2N0eCA9IGN0eDtcXG4gXFxuLVxcdGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXMgPVxcbi1cXHRcXHRqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhrZGFtb25kLVxcdTAwM2VyZWZyZXNoX21zKTtcXG4rXFx0a2RhbW9uZC1cXHUwMDNlbmV4dF9yZWZyZXNoX2ppZmZpZXMgPSBqaWZmaWVzICtcXG4rXFx0XFx0bXNlY3NfdG9famlmZmllcyhrZGFtb25kLVxcdTAwM2VyZWZyZXNoX21zKTtcXG4gXFxuIFxcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXFx1MDAzZWZuID0gZGFtb25fc3lzZnNfcmVwZWF0X2NhbGxfZm47XFxuIFxcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXFx1MDAzZWRhdGEgPSBrZGFtb25kO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0MjowMC4zNTc3MDE3MzFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2NjQwNTEwMDgzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vc19jb21taXRfcXVvdGFfZ29hbHNcIixcbiAgICBcImRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBEQU1PTiBsb2dpYyB0byBwcm9wZXJseSBpbml0aWFsaXplIGFuZCBjb21taXQgdGhlIGBsYXN0X3BzaV90b3RhbGAgZm9yIHRoZSBgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTYCBxdW90YSBtZXRyaWMuIEl0IGFsc28gZml4ZXMgdGhlIGBuZXh0X3JlZnJlc2hfamlmZmllc2AgaGFuZGxpbmcgaW4gREFNT04gc3lzZnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHN5c2ZzLCBtYWtpbmcgdGhlbSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkMTZkZWFlOGNhODMwNTNjNjllZDgzZWIwNGJmZmU4ZDlhMzRiMjg1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjcgMDQ6NDE6NTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDY0NGRhZjVhMTY1NjAuLjZmMzYwZDYxMzkwYWQgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTExMjIsNiArMTEyMiw5IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKFxuIFx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqc3JjKVxuIHtcbiBcdHN3aXRjaCAoZHN0LVx1MDAzZW1ldHJpYykge1xuK1x0Y2FzZSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVM6XG4rXHRcdGRzdC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKTtcbitcdFx0YnJlYWs7XG4gXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlA6XG4gXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlA6XG4gXHRcdGRzdC1cdTAwM2VuaWQgPSBzcmMtXHUwMDNlbmlkO1xuQEAgLTExNDMsNyArMTE0Niw2IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxuIFx0ZHN0LVx1MDAzZXRhcmdldF92YWx1ZSA9IHNyYy1cdTAwM2V0YXJnZXRfdmFsdWU7XG4gXHRpZiAoZHN0LVx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9VU0VSX0lOUFVUKVxuIFx0XHRkc3QtXHUwMDNlY3VycmVudF92YWx1ZSA9IHNyYy1cdTAwM2VjdXJyZW50X3ZhbHVlO1xuLVx0Lyoga2VlcCBsYXN0X3BzaV90b3RhbCBhcyBpcywgc2luY2UgaXQgd2lsbCBiZSB1cGRhdGVkIGluIG5leHQgY3ljbGUgKi9cbiBcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKGRzdCwgc3JjKTtcbiB9XG4gXG5AQCAtMzcyNyw2ICszNzI5LDE3IEBAIHN0YXRpYyBpbnQga2RhbW9uZF93YWl0X2FjdGl2YXRpb24oc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuIFx0cmV0dXJuIC1FQlVTWTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgZGFtb3NfaW5pdF9xdW90YV9nb2FsX2xhc3RfcHNpKHN0cnVjdCBkYW1vcyAqcylcbit7XG4rXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcbitcbitcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgXHUwMDI2cy1cdTAwM2VxdW90YSkge1xuK1x0XHRpZiAoZ29hbC1cdTAwM2VtZXRyaWMgIT0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsID0gZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpO1xuK1x0fVxuK31cbitcbiBzdGF0aWMgdm9pZCBrZGFtb25kX2luaXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHNhbXBsZV9pbnRlcnZhbCA9IGN0eC1cdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWwgP1xuQEAgLTM3NDMsNiArMzc1Niw3IEBAIHN0YXRpYyB2b2lkIGtkYW1vbmRfaW5pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuIFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHNjaGVtZSwgY3R4KSB7XG4gXHRcdGRhbW9zX3NldF9uZXh0X2FwcGx5X3NpcyhzY2hlbWUsIGN0eCk7XG4gXHRcdGRhbW9zX3NldF9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0KHNjaGVtZSk7XG4rXHRcdGRhbW9zX2luaXRfcXVvdGFfZ29hbF9sYXN0X3BzaShzY2hlbWUpO1xuIFx0fVxuIH1cbiBcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy5jIGIvbW0vZGFtb24vc3lzZnMuY1xuaW5kZXggZTM4NThmZmFiNGIyMi4uZjA1YjI1NmM5MGVlNyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3N5c2ZzLmNcbisrKyBiL21tL2RhbW9uL3N5c2ZzLmNcbkBAIC0xNzg5LDYgKzE3ODksNyBAQCBzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCB7XG4gXHRzdHJ1Y3QgZGFtb25fc3lzZnNfY29udGV4dHMgKmNvbnRleHRzO1xuIFx0c3RydWN0IGRhbW9uX2N0eCAqZGFtb25fY3R4O1xuIFx0dW5zaWduZWQgaW50IHJlZnJlc2hfbXM7XG4rXHR1bnNpZ25lZCBsb25nIG5leHRfcmVmcmVzaF9qaWZmaWVzO1xuIH07XG4gXG4gc3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICpkYW1vbl9zeXNmc19rZGFtb25kX2FsbG9jKHZvaWQpXG5AQCAtMjIxNSwxNyArMjIxNiwxNSBAQCBzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fc3lzZnNfYnVpbGRfY3R4KFxuIFx0cmV0dXJuIGN0eDtcbiB9XG4gXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllcztcbi1cbiBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3JlcGVhdF9jYWxsX2ZuKHZvaWQgKmRhdGEpXG4ge1xuIFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKnN5c2ZzX2tkYW1vbmQgPSBkYXRhO1xuIFxuIFx0aWYgKCFzeXNmc19rZGFtb25kLVx1MDAzZXJlZnJlc2hfbXMpXG4gXHRcdHJldHVybiAwO1xuLVx0aWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXMpKVxuK1x0aWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHN5c2ZzX2tkYW1vbmQtXHUwMDNlbmV4dF9yZWZyZXNoX2ppZmZpZXMpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXMgPSBqaWZmaWVzICtcbitcdHN5c2ZzX2tkYW1vbmQtXHUwMDNlbmV4dF9yZWZyZXNoX2ppZmZpZXMgPSBqaWZmaWVzICtcbiBcdFx0bXNlY3NfdG9famlmZmllcyhzeXNmc19rZGFtb25kLVx1MDAzZXJlZnJlc2hfbXMpO1xuIFxuIFx0aWYgKCFtdXRleF90cnlsb2NrKFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spKVxuQEAgLTIyNzMsOCArMjI3Miw4IEBAIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcbiBcdH1cbiBcdGtkYW1vbmQtXHUwMDNlZGFtb25fY3R4ID0gY3R4O1xuIFxuLVx0ZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllcyA9XG4tXHRcdGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGtkYW1vbmQtXHUwMDNlcmVmcmVzaF9tcyk7XG4rXHRrZGFtb25kLVx1MDAzZW5leHRfcmVmcmVzaF9qaWZmaWVzID0gamlmZmllcyArXG4rXHRcdG1zZWNzX3RvX2ppZmZpZXMoa2RhbW9uZC1cdTAwM2VyZWZyZXNoX21zKTtcbiBcbiBcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXHUwMDNlZm4gPSBkYW1vbl9zeXNmc19yZXBlYXRfY2FsbF9mbjtcbiBcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXHUwMDNlZGF0YSA9IGtkYW1vbmQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0MjowMC4zNTc3MDI4MTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDc5ODUwOTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRBTU9OIFBhdGNoIEFuYWx5c2lzKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBuZXcgcGF0Y2ggaGVyZSBtb2RpZnlpbmcgYG1tL2RhbW9uL2NvcmUuY2AgYW5kIGBtbS9kYW1vbi9zeXNmcy5jYC4gTGV0J3Mgc2VlLi4uIHRoZSBwcmltYXJ5IGZpeCBzZWVtcyB0byBiZSBpbiBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb25gLCBzcGVjaWZpY2FsbHkgaW5pdGlhbGl6aW5nIGBsYXN0X3BzaV90b3RhbGAgY29ycmVjdGx5IGZvciB0aGUgYERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AgY2FzZS4gR29vZCwgdGhhdCBsaWtlbHkgcmVzb2x2ZXMgYSBzdWJ0bGUgcmFjZSBjb25kaXRpb24gb3IgY2FsY3VsYXRpb24gZXJyb3IgcmVsYXRlZCB0byBtZW1vcnkgcXVvdGEgdHJhY2tpbmcgd2l0aCBQZXJmb3JtYW5jZSBTdGF0ZSBJbmZvcm1hdGlvbiAoUFNJKS4gVGhlIGFkZGl0aW9uIG9mIGBkYW1vc19pbml0X3F1b3RhX2dvYWxfbGFzdF9wc2lgIGNhbGxlZCBmcm9tIGBrZGFtb25kX2luaXRfY3R4YCBsb29rcyBsaWtlIGEgY29tcGFuaW9uIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLCBlbnN1cmluZyBwcm9wZXIgc3RhdGUgc2V0dXAuIFN0YW5kYXJkIHN0dWZmLCBidXQgaW1wb3J0YW50IHRvIGNhdGNoLlxuXG5Ob3csIHRoZSBgbW0vZGFtb24vc3lzZnMuY2AgY2hhbmdlIGlzIGludGVyZXN0aW5nLiBUaGV5J3ZlIG1vdmVkIGBkYW1vbl9zeXNmc19uZXh0X3VwZGF0ZV9qaWZmaWVzYCBmcm9tIGEgZ2xvYmFsIHRvIGEgcGVyLWtkYW1vbmQgdmFyaWFibGUgbmFtZWQgYG5leHRfcmVmcmVzaF9qaWZmaWVzYC4gVGhhdCdzIGEgbmljZSBpbXByb3ZlbWVudCBmb3IgY29uZmlndXJhYmlsaXR5IGFuZCBwb3RlbnRpYWwgY29uY3VycmVuY3kuIEl0IGxvb2tzIGxpa2UgaXQncyBhIHJlZnJlc2ggdGltZSBmb3IgdGhlIHN5c3RlbSBmaWxlIGludGVyZmFjZSAoc3lzZnMpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgYnVnZml4LCBpbiBEQU1PTiwgd2hpY2ggaXMgYSBjb3JlIGtlcm5lbCBjb21wb25lbnQuXG5cbkkgc2hvdWxkIHByb2JhYmx5IHJldmlldyB0aGUgY29uZmlnIG9wdGlvbnMgZm9yIERBTU9OIHRvIHVuZGVyc3RhbmQgaWYgYW55dGhpbmcgaW4gdGhhdCBhcmVhIGhhcyBjaGFuZ2VkLCBvciBpZiB0aGVyZSBpcyBuZXcgZnVuY3Rpb25hbGl0eSBpbnZvbHZlZC4gVGltZSB0byBkaWcgaW50byB0aGUgS2NvbmZpZyBmaWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzExNSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQyOjA1LjgzNzU1NjczOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDU5MzQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREFNT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcXFwiRGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1xcXCJcXG5tbS9kYW1vbi9LY29uZmlnLTQtXFxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNi1cXHRib29sIFxcXCJEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxcbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbm1tL2RhbW9uL0tjb25maWctMTYtXFx0Ym9vbCBcXFwiQ2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxcbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTI3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxcbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXFxubW0vZGFtb24vS2NvbmZpZy0zOS1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxcbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy00OC1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy01NS1cXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy01Ny1cXHRib29sIFxcXCJUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxcbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXFxubW0vZGFtb24vS2NvbmZpZy02OS1cXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxcbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTc3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy04Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXFxubW0vZGFtb24vS2NvbmZpZy04OS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctOTktXFxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTA3LVxcbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXFxubW0vZGFtb24vS2NvbmZpZy0xMDktXFx0Ym9vbCBcXFwiQnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTE1LVxcbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxcbm1tL2RhbW9uL0tjb25maWctMTE3LVxcdGJvb2wgXFxcIkVuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQyOjA1Ljg4ODE2NTYwOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4OTc3NTQ1NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGNvbmZpZyBvcHRpb25zIGFuZCBmdW5jdGlvbnMsIGFzIGlmIHRoZXkncmUgbXkgb3duIG1lbnRhbCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIERBTU9OIENvbmZpZ3VyYXRpb24gYW5kIEluaXRpYWxpemF0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIG9uIG15IG1pbmQsIGdpdmVuIHRoZSBjb250ZXh0LCBpcyBkZWZpbml0ZWx5IHRoZSBEQU1PTiBjb25maWd1cmF0aW9uczogYERBTU9OYCBhbmQgYERBTU9OX1NZU0ZTYC4gVGhlc2UgYXJlIHRoZSBmb3VuZGF0aW9uYWwgc2V0dGluZ3MuIEknbSBpbW1lZGlhdGVseSB0aGlua2luZywgXCJBcmUgYm90aCBvZiB0aGVzZSBlbmFibGVkPyBXaGF0J3MgdGhlIGltcGFjdCBvZiBvbmUgYmVpbmcgZW5hYmxlZCB3aXRob3V0IHRoZSBvdGhlcj9cIiBJdCdzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IERBTU9OIGlzIGFjdHVhbGx5IG9wZXJhdGluZyBhdCB0aGUgc3lzdGVtIGxldmVsLCBhbmQgdGhhdCBoZWxwcyBpbmZvcm0gcGVyZm9ybWFuY2UgdHdlYWtzLlxuXG5Ob3csIGxldCdzIGRyaWxsIGRvd24gaW50byB0aGUga2VybmVsIGNvZGU7IEkgbmVlZCB0byBsb29rIGF0IHdoYXQncyBnb2luZyBvbiB3aXRoaW4gYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uYCBhbmQgYGRhbW9zX2luaXRfcXVvdGFfZ29hbF9sYXN0X3BzaWAuIE15IGd1dCByZWFjdGlvbiBpcyB0aGF0IHRoZXkncmUgcmVsYXRlZCB0byBoYW5kbGluZyBxdW90YSBnb2FscywgYnV0IHRoZSBzcGVjaWZpYyBtZWNoYW5pY3MgYXJlIHdoYXQncyBpbXBvcnRhbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kOlxuXG4qICAgKipgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb25gKio6IFNwZWNpZmljYWxseSwgaG93IGFuZCB3aGVuIHRoaXMgaXMgaW52b2tlZC4gRG9lcyBpdCBnZXQgdHJpZ2dlcmVkIG9uIGFueSBzb3J0IG9mIGV2ZW50LCBvciBpcyBpdCBwZXJpb2RpYz8gV2hhdCdzIHRoZSBjb250ZXh04oCUYXJlIHdlIHRhbGtpbmcgYWJvdXQgcGVyLXByb2Nlc3MgcXVvdGEsIHN5c3RlbS13aWRlLCBvciBzb21ldGhpbmcgbW9yZSBncmFudWxhcj8gSSdtIGJldHRpbmcgdGhpcyBpcyB3aGVyZSBjaGFuZ2VzIHRvIHF1b3RhIGdvYWxzIGFyZSBhY3R1YWxseSBhcHBsaWVkLCBlaXRoZXIgaW1tZWRpYXRlbHkgb3IgZGVmZXJyZWQuIEknbGwgbmVlZCB0byBzZWUgaWYgaXQgaW52b2x2ZXMgYW55IGxvY2tpbmcgbWVjaGFuaXNtcywgYW5kIHRoZSBpbXBhY3Qgb24gdGhlIHN5c3RlbS5cbiogICAqKmBkYW1vc19pbml0X3F1b3RhX2dvYWxfbGFzdF9wc2lgKio6IFRoaXMgaGFzIHRoZSBkaXN0aW5jdCBzbWVsbCBvZiBpbml0aWFsaXphdGlvbi4gXCJMYXN0IFBTSVwiIHN1Z2dlc3RzIGl0J3MgbGlrZWx5IGludm9sdmVkIHdpdGggbW9uaXRvcmluZyBvciB0cmFja2luZyBzb21lIGZvcm0gb2YgUGVyZm9ybWFuY2UgU3RhdGUgSW5mb3JtYXRpb24gKFBTSSkuIFRoZSBcInF1b3RhIGdvYWxcIiBwYXJ0IGhpbnRzIGF0IGl0IHJlbGF0ZWQgdG8gcXVvdGEgZW5mb3JjZW1lbnQuIE15IHdvcmtpbmcgaHlwb3RoZXNpcyBpcyB0aGF0IHRoaXMgZnVuY3Rpb24gbWlnaHQgaGFuZGxlIGVpdGhlciB0aGUgaW5pdGlhbCBzZXR1cCBvZiBxdW90YSBsaW1pdHMgcmVsYXRlZCB0byBwZXJmb3JtYW5jZSBvciBpdCBtaWdodCBpbml0aWFsaXplIGEgc3RydWN0dXJlIHRoYXQgdHJhY2tzIHRoZSBnb2Fscy4gSSBoYXZlIHRvIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgREFNT04gY29tcG9uZW50cyB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbi4gSSdsbCBiZSBsb29raW5nIGZvciB3aGVyZSB0aGlzIGlzIGNhbGxlZCwgYW5kIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGl0IG1hbmlwdWxhdGVzLiBIb3cgaXMgdGhpcyBcImxhc3QgUFNJXCIgdmFsdWUgdXNlZCBsYXRlciBvbiBpbiBkZWNpc2lvbi1tYWtpbmc/XG5cbkVzc2VudGlhbGx5LCBJIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSB0d28gcGllY2VzIGZpdCB0b2dldGhlciBhbmQgcmVsYXRlIHRvIHRoZSBEQU1PTiBjb3JlLiBBcmUgdGhleSBpbnZvbHZlZCBpbiBnb2FsIHNldHRpbmcsIGVuZm9yY2VtZW50LCBhZGFwdGF0aW9uLCBvciBzb21lIGNvbWJpbmF0aW9uIG9mIHRoZSBhYm92ZT8gTGV0J3MgZ2V0IHRvIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Mzk1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDI6MTEuNzg1OTIyMjE1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NTAzODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MTEwOD1zdGF0aWMgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX250aF9xdW90YV9nb2FsKFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTExMjAtXFxubW0vZGFtb24vY29yZS5jOjExMjE6c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oXFxubW0vZGFtb24vY29yZS5jLTExMjItXFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMTQyPXN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTExNDgtXFx0XFx0ZHN0LVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gc3JjLVxcdTAwM2VjdXJyZW50X3ZhbHVlO1xcbm1tL2RhbW9uL2NvcmUuYzoxMTQ5OlxcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKGRzdCwgc3JjKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTE1MC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQyOjExLjgzMDQyODk4NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MTAyODg3MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIG1vZGlmaWNhdGlvbnMsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6XG5cbioqTXkgUGVyc3BlY3RpdmUgb24gdGhlIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYCBNb2RpZmljYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBJIHNlZSB0aGV5J3ZlIGJlZW4gbWVzc2luZyB3aXRoIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYC4gRnJvbSB0aGUgbmFtZSBhbG9uZSwgSSBjYW4gZ3Vlc3MgdGhpcyBpcyB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGFjdHVhbGx5ICphY3RpdmF0aW5nKiBhIERBTU9OIG1vbml0b3IgdGhyb3VnaCB0aGUgc3lzZnMgaW50ZXJmYWNlLiBUaGF0J3MgYSBjcml0aWNhbCBwaWVjZSwgdGhlIHBvaW50IG9mIG5vIHJldHVybiBzbyB0byBzcGVhay4gSWYgdGhpcyBpcyB3aGVyZSB0aGV5J3JlIGNoYW5naW5nIHRoaW5ncywgaXQgbWVhbnMgdGhleSBhcmUgdHJ5aW5nIHRvIGluZmx1ZW5jZSBob3cgYSBEQU1PTiBtb25pdG9yIGNvbWVzIG9ubGluZSBhbmQgc2V0cyBpdHNlbGYgdXAuIFxuXG5JIGltbWVkaWF0ZWx5IHN0YXJ0IHRoaW5raW5nIGFib3V0IGEgZmV3IHRoaW5nczpcblxuKiAgICoqQWN0aXZhdGlvbiBUcmlnZ2VycyoqOiBBcmUgdGhleSBjaGFuZ2luZyAqaG93KiB0aGUgbW9uaXRvciBpcyB0cmlnZ2VyZWQ/IElzIGl0IHN0aWxsIGEgc2ltcGxlICdlY2hvIDEgXHUwMDNlIGVuYWJsZSc/IE9yIGFyZSB0aGV5IGludHJvZHVjaW5nIHNvbWUgbW9yZSBudWFuY2VkIGFjdGl2YXRpb24gY3JpdGVyaWEsIHBlcmhhcHMgYmFzZWQgb24gcmVzb3VyY2UgYXZhaWxhYmlsaXR5LCBsb2FkLCBvciBzb21lIG90aGVyIHN5c3RlbSBjb25kaXRpb24/IE1heWJlIHNvbWUgY29uZmlndXJhdGlvbiBpbiB0aGUgc3lzZnMgbm9kZSBoYXMgdG8gYmUgY29ycmVjdC5cbiogICAqKkluaXRpYWxpemF0aW9uKio6IEJleW9uZCB0dXJuaW5nIGl0IG9uLCB3aGF0IGRvZXMgdGhlIGZ1bmN0aW9uICpkbyogZHVyaW5nIGluaXRpYWxpemF0aW9uPyBEb2VzIGl0IGFsbG9jYXRlIG1lbW9yeSwgcmVnaXN0ZXIgdGhlIG1vbml0b3Igd2l0aCB0aGUgY29yZSBEQU1PTiBpbmZyYXN0cnVjdHVyZSwgY29uZmlndXJlIGFueSBkZWZhdWx0IHBhcmFtZXRlcnM/IEFueSBjaGFuZ2VzIGhlcmUgYXJlIGdvaW5nIHRvIGhhdmUgYSBiaWcgaW1wYWN0IG9uIGhvdyBwZXJmb3JtYW50IHRoZSBtb25pdG9yIHdpbGwgYmUgYXMgd2VsbCBhcyB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBtb25pdG9ycy5cbiogICAqKkVycm9yIEhhbmRsaW5nKio6IEFyZSB0aGV5IGltcHJvdmluZyB0aGUgZXJyb3IgaGFuZGxpbmcgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyB3cm9uZyBkdXJpbmcgYWN0aXZhdGlvbj8gSWYgdGhlIG1vbml0b3IgZmFpbHMgdG8gaW5pdGlhbGl6ZSwgZG9lcyBpdCBwcm92aWRlIGhlbHBmdWwgZXJyb3IgbWVzc2FnZXMsIG9yIGp1c3Qgc2lsZW50bHkgZmFpbD8gSXQncyBhbHdheXMgY3J1Y2lhbCB0byBmYWlsIGdyYWNlZnVsbHkgYW5kIHByb3ZpZGUgc29tZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uXG4qICAgKipTZWN1cml0eSBDb25jZXJucyoqOiBJZiB0aGV5J3JlIGFkZGluZyBleHRyYSBsYXllcnMgb2YgYWN0aXZhdGlvbiwgSSdtIG5vdyBjdXJpb3VzIHdoZXRoZXIgdGhlcmUncyBzb21lIGNoYW5nZSBpbiB0aGUgc2VjdXJpdHkgY29udGV4dC4gQXJlIHdlIGdvaW5nIHRvIHNlZSBuZXcgcHJpdmlsZWdlcyBvciBwZXJtaXNzaW9ucyByZWxhdGVkIHRvIHN0YXJ0aW5nIGEgbW9uaXRvcj9cblxuVWx0aW1hdGVseSwgd2l0aG91dCBrbm93aW5nICpleGFjdGx5KiB3aGF0IHdhcyBtb2RpZmllZCwgdGhlc2UgYXJlIHRoZSB0eXBlcyBvZiB0aGluZ3MgSSdkIGJlIGxvb2tpbmcgZm9yIGluIGEgY29kZSByZXZpZXcgb3IgYSBwYXRjaCBkZXNjcmlwdGlvbi4gQmVjYXVzZSB0aGlzIGZ1bmN0aW9uIGlzIHRoZSBnYXRld2F5IHRvIG1vbml0b3JpbmcsIGFueSBtb2RpZmljYXRpb24gaGVyZSBuZWVkcyB0byBiZSB0aG9yb3VnaGx5IHZldHRlZCB0byBlbnN1cmUgREFNT04gY29udGludWVzIHRvIHdvcmsgZWZmaWNpZW50bHksIGVmZmVjdGl2ZWx5LCBhbmQgc2FmZWx5LiBJIHdvdWxkIG5lZWQgdG8gZGlnIGludG8gdGhlIGRpZmZzIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyMDUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0MjoxNi41NDA3MjEwMjVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUwMTkwNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vc3lzZnMuYz0yMjE5PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfcmVwZWF0X2NhbGxfZm4odm9pZCAqZGF0YSlcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjI0MS1cXG5tbS9kYW1vbi9zeXNmcy5jOjIyNDI6c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjI0My17XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIyODc9c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29mZihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjI5NC1cXHQgKiBEQU1PTiwgd2UgZnJlZSBrZGFtb25kLVxcdTAwM2VkYW1vbl9jdHggaW4gbmV4dFxcbm1tL2RhbW9uL3N5c2ZzLmM6MjI5NTpcXHQgKiBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKCksIG9yIGtkYW1vbmRzX25yX3N0b3JlKClcXG5tbS9kYW1vbi9zeXNmcy5jLTIyOTYtXFx0ICovXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIzNjM9c3RhdGljIGludCBkYW1vbl9zeXNmc19oYW5kbGVfY21kKGVudW0gZGFtb25fc3lzZnNfY21kIGNtZCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjM3MC1cXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9PTjpcXG5tbS9kYW1vbi9zeXNmcy5jOjIzNzE6XFx0XFx0cmV0dXJuIGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oa2RhbW9uZCk7XFxubW0vZGFtb24vc3lzZnMuYy0yMzcyLVxcdGNhc2UgREFNT05fU1lTRlNfQ01EX09GRjpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDI6MTYuNTg1NzQyMjg1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU1MTY0ODM5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYWxyZWFkeSBxdWl0ZSBmYW1pbGlhciB3aXRoIHRoZSBEYW1vbiBzeXN0ZW0gYW5kIHN5c2ZzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTeXNmcyBDb21tYW5kIEhhbmRsZXIqKlxuXG5BbHJpZ2h0LCBJJ20gbG9va2luZyBhdCB0aGUgYGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWRgIGZ1bmN0aW9uLiBUaGF0J3MgdGhlIG9uZSB0aGF0J3MgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIGFsbCB0aGUgY29tbWFuZHMgY29taW5nIGluIHRocm91Z2ggdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSBzeXN0ZW0uIEl0J3MgdGhlIGNlbnRyYWwgcG9pbnQgb2YgY29udHJvbC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGl0IHdvcmtzLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIGhvdyBpdCBwcm9jZXNzZXMgdGhvc2UgaW5jb21pbmcgY29tbWFuZHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZnVuY3Rpb24ncyBsb2dpYyBpbnNpZGUgYW5kIG91dCB0byB0cm91Ymxlc2hvb3QgZWZmZWN0aXZlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMjYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0MjoyMC4xMzczOTI2ODdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MDI0MDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX3N5c2ZzX2hhbmRsZV9jbWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3N5c2ZzLmM9MjMzMz1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3VwZGF0ZV9zY2hlbWVzX3RyaWVkX3JlZ2lvbnMoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIzNTQtLypcXG5tbS9kYW1vbi9zeXNmcy5jOjIzNTU6ICogZGFtb25fc3lzZnNfaGFuZGxlX2NtZCgpIC0gSGFuZGxlIGEgY29tbWFuZCBmb3IgYSBzcGVjaWZpYyBrZGFtb25kLlxcbm1tL2RhbW9uL3N5c2ZzLmMtMjM1Ni0gKiBAY21kOlxcdFRoZSBjb21tYW5kIHRvIGhhbmRsZS5cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjM2Mi0gKi9cXG5tbS9kYW1vbi9zeXNmcy5jOjIzNjM6c3RhdGljIGludCBkYW1vbl9zeXNmc19oYW5kbGVfY21kKGVudW0gZGFtb25fc3lzZnNfY21kIGNtZCxcXG5tbS9kYW1vbi9zeXNmcy5jLTIzNjQtXFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTI0MDM9c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjQxNC1cXHRcXHRpZiAoc3lzZnNfc3RyZXEoYnVmLCBkYW1vbl9zeXNmc19jbWRfc3Ryc1tjbWRdKSkge1xcbm1tL2RhbW9uL3N5c2ZzLmM6MjQxNTpcXHRcXHRcXHRyZXQgPSBkYW1vbl9zeXNmc19oYW5kbGVfY21kKGNtZCwga2RhbW9uZCk7XFxubW0vZGFtb24vc3lzZnMuYy0yNDE2LVxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0MjoyMC4xODQ0MjE0NTdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUzOTg1NTEwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBTeXNmcyBJbnRlcmZhY2U6IEEgUmVjb25uYWlzc2FuY2UqKlxuXG5Pa2F5LCBzbyB0aGUgc3lzZnMgaW50ZXJmYWNlIGlzIGRlZmluaXRlbHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZS4gVGhhdCBtZWFucyBpdCdzIGZ1enphYmxlIOKAkyB0aGF0J3MgdGhlIGZpcnN0IHN0ZXAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBhdHRhY2sgc3VyZmFjZSBpcy4gTm93LCBJIHNlZSB0aGF0IHRoZSBmdW5jdGlvbnMgYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uYCBhbmQgYGRhbW9zX2luaXRfcXVvdGFfZ29hbF9sYXN0X3BzaWAgYXJlIHJlYWNoYWJsZSBmcm9tIGl0LiBMZXQncyBkaWcgZGVlcGVyIGFuZCBnZXQgYSBiZXR0ZXIgcGljdHVyZSBvZiB0aGUgYXZhaWxhYmxlIHN5bWJvbHMuXG5cbkhtbSwgaXQgbG9va3MgbGlrZSBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb25gIGlzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFNvIGlzIGBkYW1vc19pbml0X3F1b3RhX2dvYWxfbGFzdF9wc2lgLCBhbG9uZyB3aXRoIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYCwgYGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWRgLCBhbmQgYHN0YXRlX3N0b3JlYC4gVGhlc2Ugc3RhdGljIGZ1bmN0aW9ucyBjb3VsZCBzdGlsbCBiZSB1c2VmdWwgZGVwZW5kaW5nIG9uIGhvdyB0aGV5IGFyZSB1c2VkLiBMZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSAqbm9uKi1zdGF0aWMgZnVuY3Rpb25zIHdlIGNhbiBleGFtaW5lLiBJdCdzIHRpbWUgdG8gY2hlY2sgd2hhdCBlbHNlIGlzIGF2YWlsYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY5MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0MjoyNC43MjQyNzkzMjdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMTg1MzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX2NvbW1pdF9xdW90YV9nb2FsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MTEwOD1zdGF0aWMgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX250aF9xdW90YV9nb2FsKFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTExMjAtXFxubW0vZGFtb24vY29yZS5jOjExMjE6c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oXFxubW0vZGFtb24vY29yZS5jLTExMjItXFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTQxLVxcbm1tL2RhbW9uL2NvcmUuYzoxMTQyOnN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxcbm1tL2RhbW9uL2NvcmUuYy0xMTQzLVxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTE0OC1cXHRcXHRkc3QtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBzcmMtXFx1MDAzZWN1cnJlbnRfdmFsdWU7XFxubW0vZGFtb24vY29yZS5jOjExNDk6XFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb24oZHN0LCBzcmMpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMTUwLX1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTUyLS8qKlxcbm1tL2RhbW9uL2NvcmUuYzoxMTUzOiAqIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscygpIC0gQ29tbWl0IERBTU9TIHF1b3RhIGdvYWxzIHRvIGFub3RoZXIgcXVvdGEuXFxubW0vZGFtb24vY29yZS5jLTExNTQtICogQGRzdDpcXHRUaGUgY29tbWl0IGRlc3RpbmF0aW9uIERBTU9TIHF1b3RhLlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTExNjMtICovXFxubW0vZGFtb24vY29yZS5jOjExNjQ6aW50IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRzdCwgc3RydWN0IGRhbW9zX3F1b3RhICpzcmMpXFxubW0vZGFtb24vY29yZS5jLTExNjUte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTExNzEtXFx0XFx0aWYgKHNyY19nb2FsKVxcbm1tL2RhbW9uL2NvcmUuYzoxMTcyOlxcdFxcdFxcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKGRzdF9nb2FsLCBzcmNfZ29hbCk7XFxubW0vZGFtb24vY29yZS5jLTExNzMtXFx0XFx0ZWxzZVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTExODItXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxubW0vZGFtb24vY29yZS5jOjExODM6XFx0XFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwobmV3X2dvYWwsIHNyY19nb2FsKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTE4NC1cXHRcXHRkYW1vc19hZGRfcXVvdGFfZ29hbChkc3QsIG5ld19nb2FsKTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMTg5PXN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X3F1b3RhKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTk1LVxcdGRzdC1cXHUwMDNlc3ogPSBzcmMtXFx1MDAzZXN6O1xcbm1tL2RhbW9uL2NvcmUuYzoxMTk2OlxcdGVyciA9IGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fscyhkc3QsIHNyYyk7XFxubW0vZGFtb24vY29yZS5jLTExOTctXFx0aWYgKGVycilcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yODk0PWludCBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5MTgtXFx0XFx0fVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyOTE5OlxcdFxcdGVyciA9IGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhcXHUwMDI2c2NoZW1lLVxcdTAwM2VxdW90YSwgXFx1MDAyNnF1b3RhKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjkyMC1cXHRcXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsX3NhZmUoZywgZ19uZXh0LCBcXHUwMDI2cXVvdGEpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9NzUwPXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC03NTctXFx0XFx0ZHN0X2xhc3RfcHNpX3RvdGFsID0gZHN0LVxcdTAwM2VsYXN0X3BzaV90b3RhbDtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NzU4OlxcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKGRzdCwgc3JjKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNzU5LVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTgzND1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2Fsc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg0OS1cXHRcXHQgKiBXaGVuIG5yX3NyY19nb2FscyBpcyBzbWFsbGVyIHRoYW4gZHN0X2dvYWxzLFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4NTA6XFx0XFx0ICogZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKCkgd2lsbCBrZnJlZSgpIHRoZSBkc3QgZ29hbHMuXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg1MS1cXHRcXHQgKiBNYWtlIGl0IGtmcmVlKCktYWJsZS5cXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NjItXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjg2MzpcXHRkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoXFx1MDAyNmRzdCwgXFx1MDAyNnNyYyk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg2NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDI6MjQuNzY3NDY5NDE2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NDg3MTkyNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBQb3RlbnRpYWwgSW5pdGlhbGl6YXRpb24gSXNzdWVzIHdpdGggTm9uLVN0YXRpYyBWYXJpYWJsZXMqKlxuXG5Pa2F5LCBzbyBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYCBpc24ndCBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgaW5pdGlhbGl6YXRpb24gcHJvYmxlbS4gV2UgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGFuZCBob3cgdGhpcyB2YXJpYWJsZSBpcyBiZWluZyBpbml0aWFsaXplZCwgYW5kIG1vcmUgaW1wb3J0YW50bHksIGlmIGl0J3MgYmVpbmcgaGFuZGxlZCBjb3JyZWN0bHkgYWNyb3NzIGRpZmZlcmVudCB0aHJlYWRzIG9yIGNvbnRleHRzLiBTaW5jZSBpdCdzIG5vdCBzdGF0aWMsIGl0IHN1Z2dlc3RzIHNvbWUgc29ydCBvZiBkeW5hbWljIG9yIHBvdGVudGlhbGx5IGdsb2JhbCBzY29wZS4gU28sIHdoZXJlIGFyZSB0aGUgY3JpdGljYWwgcG9pbnRzPyBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpZyBpbnRvIGBrZGFtb25kX2luaXRfY3R4YCBvciBgZGFtb3NfaW5pdF9xdW90YV9nb2FsX2xhc3RfcHNpYC4gSeKAmWxsIHN0YXJ0IGJ5IHJldmlld2luZyB0aGUgaW5pdGlhbGl6YXRpb24gbG9naWMgd2l0aGluIHRob3NlIGZ1bmN0aW9ucy4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggYGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc2AgYW5kIGlmIHRoZXJlJ3MgYW55IHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zIG9yIHVuaW50ZW5kZWQgc2lkZSBlZmZlY3RzIGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcywgZXNwZWNpYWxseSBpbiBhIG11bHRpLXRocmVhZGVkIHNjZW5hcmlvLiBJdCdzIGEgY2xhc3NpYyBkZWJ1Z2dpbmcgYXBwcm9hY2g6IHN0YXJ0IHdpdGggdGhlIGxpa2VseSBjdWxwcml0cy4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSB2YXJpYWJsZSdzIGxpZmVjeWNsZSBmcm9tIGRlY2xhcmF0aW9uIHRvIHVzZS4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aG9zZSBmdW5jdGlvbnMgaXMga2V5IHRvIHBpbnBvaW50aW5nIGFueSBwcm9ibGVtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI5NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQyOjI4LjMxNjE5MDg2OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM2MDI1NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2RhbW9uZF9pbml0X2N0eFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTgzMj1zdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9uZXdfY3R4KHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtODQ2LVxcdGN0eC1cXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMgPSAwO1xcbm1tL2RhbW9uL2NvcmUuYzo4NDc6XFx0LyogVGhlc2Ugd2lsbCBiZSBzZXQgZnJvbSBrZGFtb25kX2luaXRfY3R4KCkgKi9cXG5tbS9kYW1vbi9jb3JlLmMtODQ4LVxcdGN0eC1cXHUwMDNlbmV4dF9hZ2dyZWdhdGlvbl9zaXMgPSAwO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTM3MzI9c3RhdGljIHZvaWQgZGFtb3NfaW5pdF9xdW90YV9nb2FsX2xhc3RfcHNpKHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNzQyLVxcbm1tL2RhbW9uL2NvcmUuYzozNzQzOnN0YXRpYyB2b2lkIGtkYW1vbmRfaW5pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbm1tL2RhbW9uL2NvcmUuYy0zNzQ0LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zNzY2PXN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM3NzktXFx0Y29tcGxldGUoXFx1MDAyNmN0eC1cXHUwMDNla2RhbW9uZF9zdGFydGVkKTtcXG5tbS9kYW1vbi9jb3JlLmM6Mzc4MDpcXHRrZGFtb25kX2luaXRfY3R4KGN0eCk7XFxubW0vZGFtb24vY29yZS5jLTM3ODEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQyOjI4LjM1OTc5NTAyOFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjc0NzMyMjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIENvZGUgU3RydWN0dXJlIGFuZCBTY29wZSoqXG5cbkhtbSwgc28gYGtkYW1vbmRfZm5gIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGl0IGluIG15IG1pbmQgYXMgYmVpbmcgbGltaXRlZCBpbiBzY29wZSDigJMgbGlrZWx5IGludGVybmFsIHRvIGEgc2luZ2xlIGZpbGUgb3IgY29tcGlsYXRpb24gdW5pdC4gT2theSwgbm90ZWQuIE5vdywgbGV0IG1lIHNlZS4uLiBhbmQgaGVyZSB3ZSBoYXZlIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgLCBhbmQgaXQncyAqbm90KiBzdGF0aWMuIFRoYXQgaW1wbGllcyBpdCdzIGludGVuZGVkIHRvIGJlIHZpc2libGUgb3V0c2lkZSBvZiBpdHMgaW1tZWRpYXRlIGNvbnRleHQuIENvdWxkIGJlIGEgZnVuY3Rpb24gb3RoZXIgbW9kdWxlcyBjYW4gY2FsbCB0byBjb21taXQgcXVvdGEgY2hhbmdlcy5cblxuSnVzdCB0byBiZSB0aG9yb3VnaCwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaG93IGBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzYCBpcyBkZWZpbmVkLiBJIHdhbnQgdG8gc2VlIGlmIHRoaXMgaGFzIGEgcmVsYXRpb25zaGlwIHRvIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgLiBJcyBpdCBhIGhlbHBlcj8gRG9lcyBpdCBjYWxsIGl0PyBBcmUgdGhleSBib3RoIHVzZWQgaW4gdGhlIHNhbWUgY29udGV4dD8gVW5kZXJzdGFuZGluZyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdGhyZWUgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBvdmVyYWxsIHF1b3RhIHN5c3RlbSB3b3JrcywgYW5kIGhvdyB0aGlzIG1vZHVsZSBmaXRzIGludG8gaXQuIFRoaXMgd2lsbCBoZWxwIG1lIGFzc2VzcyB0aGUgYXJjaGl0ZWN0dXJlIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIGFueSBjaGFuZ2VzIGRvd24gdGhlIGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5MzcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0MjozMi4wMzQ1Mjk2NzFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0Mjg2MDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oPTUxPWludCBkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnMoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01My1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo1NDppbnQgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01NS1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NDc9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg5My1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg5NDppbnQgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg5NS1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIxNTI9c3RhdGljIGludCBkYW1vbl9zeXNmc19jb21taXRfc2NoZW1lc19xdW90YV9nb2Fscyh2b2lkICpkYXRhKVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMTY1LVxcdHN5c2ZzX2N0eCA9IHN5c2ZzX2tkYW1vbmQtXFx1MDAzZWNvbnRleHRzLVxcdTAwM2Vjb250ZXh0c19hcnJbMF07XFxubW0vZGFtb24vc3lzZnMuYzoyMTY2OlxcdHJldHVybiBkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzKHN5c2ZzX2N0eC1cXHUwMDNlc2NoZW1lcywgY3R4KTtcXG5tbS9kYW1vbi9zeXNmcy5jLTIxNjctfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0MjozMi4wNzg4MTc3OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTg0NDAzMjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBEQU1PTiBTeXNmcyBGdW5jdGlvbiBTY29wZSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhlIERBTU9OIHN5c2ZzIGNvZGUsIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGZ1bmN0aW9uIHZpc2liaWxpdHkuIEkgc2VlIHRoYXQgYGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNgIGlzIG5vbi1zdGF0aWMsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IHNjb3BlIGFuZCBwb3RlbnRpYWwgZXh0ZXJuYWwgaW50ZXJhY3Rpb25zLiBJcyB0aGlzIGZ1bmN0aW9uIGludGVuZGVkIHRvIGJlIGV4cG9zZWQgb3V0c2lkZSB0aGUgbW9kdWxlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBjaG9pY2Ugd2FzIG1hZGUuXG5cblRoZW4gbXkgbWluZCBkcmlmdHMgdG8gYGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWRgLiBBaCwgdGhhdCBvbmUgKmlzKiBzdGF0aWMuIEludGVyZXN0aW5nIGNvbnRyYXN0LiBJIG5lZWQgdG8ga2VlcCB0aGlzIHBhdHRlcm4gaW4gbWluZC4gSXQncyBhIGtleSBmYWN0b3IuXG5cbk5vdywgdGhlIG5hdHVyYWwgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHN5c2ZzIGltcGxlbWVudGF0aW9uLiBMZXQncyBzZWUuLi4gYGRhbW9uX3N5c2ZzX2NvbW1pdF9zY2hlbWVzX3F1b3RhX2dvYWxzYCBpcyBzdGF0aWMsIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYCBpcyBhbHNvIHN0YXRpYywgYXMgaXMgYGRhbW9uX3N5c2ZzX3JlcGVhdF9jYWxsX2ZuYC4gU28sIGl0IHNlZW1zIGxpa2UgbW9zdCBvZiB0aGUgc3lzZnMgZnVuY3Rpb25zIGFyZSBkZWxpYmVyYXRlbHkgc2NvcGVkIHdpdGhpbiB0aGUgbW9kdWxlLiBHb29kLCB0aGF0IGhlbHBzLlxuXG5JIG5lZWQgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIGFuZCB0byBzZWUgaWYgSSBtaXNzZWQgYW55LiBMZXQncyBoZWFkIG92ZXIgdG8gYG1tL2RhbW9uL3N5c2ZzLmNgIGZvciBhIGNvbXByZWhlbnNpdmUgbG9vay4gSSB3YW50IHRvIGRvdWJsZS1jaGVjayBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGx1cmtpbmcgYXJvdW5kLCB3aGljaCB3b3VsZCBhZmZlY3QgaG93IHRoZSBzeXNmcyBpbnRlcmZhY2UgYmVoYXZlcy4gSSB3YW50IHRvIGJ1aWxkIGEgYmV0dGVyIG92ZXJhbGwgcGljdHVyZSBvZiB0aGUgbW9kdWxlJ3MgZXhwb3NlZCBmdW5jdGlvbmFsaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2NTEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDI6MzcuMDYzMjIzODk5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDUxNTE4MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmludCBkYW1vbl9zeXNmc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9zeXNmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0MjozNy4xMDc3NDUxOTlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwNzQxNDU3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBtbS9kYW1vbi9zeXNmcy5jYCBmb3IgRnVuY3Rpb24gU2NvcGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYG1tL2RhbW9uL3N5c2ZzLmNgLiBNeSBwcmltYXJ5IGNvbmNlcm4gaXMgcGlucG9pbnRpbmcgYW55IGZ1bmN0aW9ucyBkZWZpbmVkIHdpdGhpbiB0aGF0IGZpbGUgdGhhdCBhcmVuJ3QgZGVjbGFyZWQgYXMgYHN0YXRpY2AuICBLbm93aW5nIHRoZSBzY29wZSBvZiB0aGVzZSBmdW5jdGlvbnMgaXMgY3J1Y2lhbC4gSXQgbGV0cyBtZSB1bmRlcnN0YW5kIGlmIHRoZXkgbWlnaHQgYmUgaW50ZW5kZWQgZm9yIGV4dGVybmFsIHVzZSwgcGVyaGFwcyBjYWxsZWQgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgREFNT04gaW5mcmFzdHJ1Y3R1cmUgb3IgZXZlbiBrZXJuZWwgc3Vic3lzdGVtcy4gSWYgdGhleSAqYXJlKiBzdGF0aWMsIHRoZW4gSSBoYXZlIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIEkgYnVpbGQgYW4gb3ZlcmFsbCBwaWN0dXJlIG9mIGhvdyBpdCBhbGwgd29ya3MuIEkgY2FuIHN0YXJ0IGJ5IGp1c3QgbGlzdGluZyB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYW5kIHRoZWlyIHNpZ25hdHVyZXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBkZXNpZ24gaW50ZW50aW9ucyBmb3IgdGhpcyBzeXNmcyBpbnRlcmZhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTYwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDI6NDAuMzE1MTYxODAyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDAzMTI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2Etel9dKyBkYW1vbl9zeXNmc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9zeXNmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3N5c2ZzLmMtMTUtXFxubW0vZGFtb24vc3lzZnMuYzoxNjpzdHJ1Y3QgZGFtb25fc3lzZnNfcmVnaW9uIHtcXG5tbS9kYW1vbi9zeXNmcy5jLTE3LVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTgyPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3JlZ2lvbl9rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtOTEtXFxubW0vZGFtb24vc3lzZnMuYzo5MjpzdHJ1Y3QgZGFtb25fc3lzZnNfcmVnaW9ucyB7XFxubW0vZGFtb24vc3lzZnMuYy05My1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMDE9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfcmVnaW9uc19rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjEwLVxcbm1tL2RhbW9uL3N5c2ZzLmM6MjExOnN0cnVjdCBkYW1vbl9zeXNmc190YXJnZXQge1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjEyLVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTMwOD1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc190YXJnZXRfa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTMxNy1cXG5tbS9kYW1vbi9zeXNmcy5jOjMxODpzdHJ1Y3QgZGFtb25fc3lzZnNfdGFyZ2V0cyB7XFxubW0vZGFtb24vc3lzZnMuYy0zMTktXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9NDM2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3RhcmdldHNfa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTQ0NS1cXG5tbS9kYW1vbi9zeXNmcy5jOjQ0NjpzdHJ1Y3QgZGFtb25fc3lzZnNfaW50ZXJ2YWxzX2dvYWwge1xcbm1tL2RhbW9uL3N5c2ZzLmMtNDQ3LVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTU5Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19pbnRlcnZhbHNfZ29hbF9rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtNjAyLVxcbm1tL2RhbW9uL3N5c2ZzLmM6NjAzOnN0cnVjdCBkYW1vbl9zeXNmc19pbnRlcnZhbHMge1xcbm1tL2RhbW9uL3N5c2ZzLmMtNjA0LVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTc0Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19pbnRlcnZhbHNfa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTc1Ni1cXG5tbS9kYW1vbi9zeXNmcy5jOjc1NzpzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVyIHtcXG5tbS9kYW1vbi9zeXNmcy5jLTc1OC1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz03NjU9c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19maWx0ZXIgKmRhbW9uX3N5c2ZzX2ZpbHRlcl9hbGxvYyh2b2lkKVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy03NjktXFxubW0vZGFtb24vc3lzZnMuYzo3NzA6c3RydWN0IGRhbW9uX3N5c2ZzX2ZpbHRlcl90eXBlX25hbWUge1xcbm1tL2RhbW9uL3N5c2ZzLmMtNzcxLVxcdGVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9OTM3PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2ZpbHRlcl9rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtOTQ2LVxcbm1tL2RhbW9uL3N5c2ZzLmM6OTQ3OnN0cnVjdCBkYW1vbl9zeXNmc19maWx0ZXJzIHtcXG5tbS9kYW1vbi9zeXNmcy5jLTk0OC1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0xMDU2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2ZpbHRlcnNfa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTEwNjUtXFxubW0vZGFtb24vc3lzZnMuYzoxMDY2OnN0cnVjdCBkYW1vbl9zeXNmc19wcm9iZSB7XFxubW0vZGFtb24vc3lzZnMuYy0xMDY3LVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTExMzc9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfcHJvYmVfa3R5cGUgPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTExNDYtXFxubW0vZGFtb24vc3lzZnMuYzoxMTQ3OnN0cnVjdCBkYW1vbl9zeXNmc19wcm9iZXMge1xcbm1tL2RhbW9uL3N5c2ZzLmMtMTE0OC1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0xMjY2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3Byb2Jlc19rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMTI3NS1cXG5tbS9kYW1vbi9zeXNmcy5jOjEyNzY6c3RydWN0IGRhbW9uX3N5c2ZzX2F0dHJzIHtcXG5tbS9kYW1vbi9zeXNmcy5jLTEyNzctXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTM3Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19hdHRyc19rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMTM4MS1cXG5tbS9kYW1vbi9zeXNmcy5jOjEzODI6c3RydWN0IGRhbW9uX3N5c2ZzX29wc19uYW1lIHtcXG5tbS9kYW1vbi9zeXNmcy5jLTEzODMtXFx0ZW51bSBkYW1vbl9vcHNfaWQgb3BzX2lkO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0xMzg3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGFtb25fc3lzZnNfb3BzX25hbWUgZGFtb25fc3lzZnNfb3BzX25hbWVzW10gPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTE0MDEtXFxubW0vZGFtb24vc3lzZnMuYzoxNDAyOnN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0IHtcXG5tbS9kYW1vbi9zeXNmcy5jLTE0MDMtXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTY0OD1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19jb250ZXh0X2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0xNjU3LVxcbm1tL2RhbW9uL3N5c2ZzLmM6MTY1ODpzdHJ1Y3QgZGFtb25fc3lzZnNfY29udGV4dHMge1xcbm1tL2RhbW9uL3N5c2ZzLmMtMTY1OS1cXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0xNzc3PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX2NvbnRleHRzX2t0eXBlID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0xNzg2LVxcbm1tL2RhbW9uL3N5c2ZzLmM6MTc4NzpzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCB7XFxubW0vZGFtb24vc3lzZnMuYy0xNzg4LVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTE4MjE9c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfa2RhbW9uZF9ybV9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0xODI5LSAqL1xcbm1tL2RhbW9uL3N5c2ZzLmM6MTgzMDplbnVtIGRhbW9uX3N5c2ZzX2NtZCB7XFxubW0vZGFtb24vc3lzZnMuYy0xODMxLVxcdC8qIEBEQU1PTl9TWVNGU19DTURfT046IFR1cm4gdGhlIGtkYW1vbmQgb24uICovXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIzMDA9c3RhdGljIGludCBkYW1vbl9zeXNmc19kYW1vbl9jYWxsKGludCAoKmZuKSh2b2lkICpkYXRhKSxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjMxMy1cXG5tbS9kYW1vbi9zeXNmcy5jOjIzMTQ6c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXNfd2Fsa19kYXRhIHtcXG5tbS9kYW1vbi9zeXNmcy5jLTIzMTUtXFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKnN5c2ZzX2tkYW1vbmQ7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTI0OTg9c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfa2RhbW9uZF9rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjUwNy1cXG5tbS9kYW1vbi9zeXNmcy5jOjI1MDg6c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmRzIHtcXG5tbS9kYW1vbi9zeXNmcy5jLTI1MDktXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjY0Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19rZGFtb25kc19rdHlwZSA9IHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjY1Mi1cXG5tbS9kYW1vbi9zeXNmcy5jOjI2NTM6c3RydWN0IGRhbW9uX3N5c2ZzX3VpX2RpciB7XFxubW0vZGFtb24vc3lzZnMuYy0yNjU0LVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQyOjQwLjM1OTE5NTE1MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzY3OTkzMDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXBwcm9hY2ggdG8gVW5kZXJzdGFuZGluZyB0aGUgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIHN5c2ZzIGNvZGUuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBob3cgaXQgdXNlcyBga29ial90eXBlYCBhbmQgc3lzZnMgZmlsZXMgdG8gbWFuYWdlIHRoaW5ncy4gQmFzZWQgb24gdGhlIGNvbnRleHQsIEkgdGhpbmsgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB0byB1bmRlcnN0YW5kIGhlcmUgYXJlIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgIGFuZCBwb3RlbnRpYWxseSBgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3Jlc2AuIEl0IHNvdW5kcyBsaWtlIHRoZXNlIGFyZSBjZW50cmFsIHRvIHNldHRpbmcgb3IgYXBwbHlpbmcgcXVvdGEgdGFyZ2V0cy4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gdmVyaWZ5IHRoZSBsb2NhdGlvbiBvZiBgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3Jlc2Agd2l0aGluIHRoZSBjb2RlLiBMZXQncyBzZWUgaWYgaXQncyBkZWZpbmVkIGluIGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgLiBUaGF0IGZpbGUgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgcGxhY2UgZm9yIHRoaXMga2luZCBvZiBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ2NCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQyOjQ0LjEyNzE5MDM1M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAzNjI0MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3Jlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NDc9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg5My1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg5NDppbnQgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg5NS1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQyOjQ0LjE5NzU1NTMxM1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzM2OTQ1MDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBEYXRhIEFjY2VzcyBNb25pdG9yIChEQU1PTikgUXVvdGEgTWFuYWdlbWVudCBJc3N1ZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gSSdtIGxvb2tpbmcgYXQgYGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNgLCBhbmQgaXQncyBtYXJrZWQgYXMgbm9uLXN0YXRpYy4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZWQgbXkgaW50ZXJlc3QuIEluIHRoZSBjb250ZXh0IG9mIERBTU9OJ3MgcXVvdGEgc3lzdGVtLCB0aGF0IG1lYW5zIGl0J3MgcG90ZW50aWFsbHkgYWNjZXNzaWJsZSBmcm9tIGVsc2V3aGVyZSBpbiB0aGUga2VybmVsLiBNeSBuZXh0IHRob3VnaHQgaXMsIHdoZXJlIGVsc2UgYXJlIHRoZSBEQU1PTiBxdW90YSByb3V0aW5lcyBmb3VuZD8gQW5kLCB3aGF0IG9mIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgPyBUaW1lIHRvIGNoZWNrIGBtbS9kYW1vbi9jb3JlLmNgLiBUaGF0J3Mgd2hlcmUgREFNT04ncyBjb3JlIGZ1bmN0aW9uYWxpdHkgcmVzaWRlcywgc28gaXQncyBhIGxpa2VseSBwbGFjZSB0byBmaW5kIG90aGVyIGtleSBxdW90YS1yZWxhdGVkIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucywgYW5kIHdoZXRoZXIgdGhleSBtaWdodCBpbmFkdmVydGVudGx5IGludHJvZHVjZSBzb21lIHJhY2UgY29uZGl0aW9ucyBvciBvdGhlciBpc3N1ZXMuIE15IGZvY3VzIG5vdyBpcyBvbiB1bmRlcnN0YW5kaW5nIGRhdGEgaW50ZWdyaXR5IGluIHRoaXMgcXVvdGEgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4OTIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0Mjo0Ny45MzQ1MDI1MzVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MTYyMDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX2NvbW1pdF9xdW90YV9nb2Fsc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTExNDI9c3RhdGljIHZvaWQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWwoXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTE1Mi0vKipcXG5tbS9kYW1vbi9jb3JlLmM6MTE1MzogKiBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoKSAtIENvbW1pdCBEQU1PUyBxdW90YSBnb2FscyB0byBhbm90aGVyIHF1b3RhLlxcbm1tL2RhbW9uL2NvcmUuYy0xMTU0LSAqIEBkc3Q6XFx0VGhlIGNvbW1pdCBkZXN0aW5hdGlvbiBEQU1PUyBxdW90YS5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTYzLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxMTY0OmludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xMTY1LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMTg5PXN0YXRpYyBpbnQgZGFtb3NfY29tbWl0X3F1b3RhKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTk1LVxcdGRzdC1cXHUwMDNlc3ogPSBzcmMtXFx1MDAzZXN6O1xcbm1tL2RhbW9uL2NvcmUuYzoxMTk2OlxcdGVyciA9IGRhbW9zX2NvbW1pdF9xdW90YV9nb2Fscyhkc3QsIHNyYyk7XFxubW0vZGFtb24vY29yZS5jLTExOTctXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDI6NDcuOTgwNjY2MDg1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMTE4MDQ0NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgREFNT04tUmVsYXRlZCBDb25maWd1cmF0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIHplcm8gaW4uIEknbSBzZWVpbmcgdGhhdCBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYCBhbmQgYGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNgIGFyZSBzb2xpZCBpbmRpY2F0b3JzIG9mIHRoZSBhcmVhIEkgbmVlZCB0byBiZSBmb2N1c2VkIG9uLiBUaG9zZSBsb29rIGxpa2UgZ29vZCBzdGFydGluZyBwb2ludHMuIE5vdywgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gdGhpcyBhcmVhLCB3aGljaCBJIHRoaW5rIGFyZSBgREFNT05gIGFuZCBgREFNT05fU1lTRlNgLiBPa2F5LCB0aW1lIHRvIGNoZWNrOiBJIHNob3VsZCB2ZXJpZnkgaWYgYERBTU9OX1NZU0ZTYCBoYXMgYW55IGRlcGVuZGVuY2llcy4gSSBjYW4ndCBiZSBzdXJlIHdpdGhvdXQgbG9va2luZywgc28gbGV0J3MgZmluZCBvdXQhIEknbGwgZGl2ZSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDg4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDI6NTIuMDkyNDcyMzM2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzg5Mjk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREFNT05fU1lTRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9LY29uZmlnPTU2PWNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxcbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXFxubW0vZGFtb24vS2NvbmZpZy02OS1cXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxcbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTc3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0Mjo1Mi4xNDAzNjkxNDZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE1NTI1NzEzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIERBTU9OIFN5c2ZzIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGV4YW1pbmluZyBgbW0vZGFtb24vS2NvbmZpZ2Agc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYERBTU9OX1NZU0ZTYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQsIHRoZSBjZW50cmFsIHBsYWNlIHdoZXJlIHRoZSBzeXNmcyBpbnRlcmZhY2UgZm9yIERBTU9OIGlzIGRlZmluZWQgaW4gdGhlIGJ1aWxkIHN5c3RlbS4gVGhpcyBmaWxlIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzeXNmcyBpbnRlcmZhY2UgaXMgZW5hYmxlZCwgZGlzYWJsZWQsIGFuZCBjb25maWd1cmVkLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBoZXJlLCBnaXZlbiBpdHMgY3JpdGljYWxpdHkgaW4gZW5hYmxpbmcgdXNlcnNwYWNlIGNvbnRyb2wgb3ZlciB0aGlzIGZyYW1ld29yay4gSSBleHBlY3QgdG8gc2VlIHRoZSB0eXBpY2FsIGBjb25maWdgIGJsb2NrIHdpdGggcG90ZW50aWFsbHkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBmZWF0dXJlcy4gSG9wZWZ1bGx5IHRoZXJlIHdpbGwgYmUgY2xlYXIgZG9jdW1lbnRhdGlvbiBpbmxpbmUgb3IgbmVhcmJ5IGFib3V0IGl0cyBpbXBsaWNhdGlvbnMgd2hlbiBlbmFibGVkLiBJJ2xsIGJlIGxvb2tpbmcgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgY29uZGl0aW9ucyB0aGF0IG5lZWQgdG8gYmUgbWV0IGZvciBpdCB0byBiZSBlbmFibGVkLiBBbnkgZGVwZW5kZW5jaWVzIG9uIHNwZWNpZmljIGtlcm5lbCB2ZXJzaW9ucywgb3RoZXIgY29uZmlndXJhdGlvbnMsIG9yIGV2ZW4gaGFyZHdhcmUgcGxhdGZvcm1zIHdvdWxkIGJlIGltcG9ydGFudCB0byBub3RlLiBPbmNlIEkgZnVsbHkgdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBJJ2xsIGhhdmUgYSBtdWNoIGJldHRlciBpZGVhIG9mIGhvdyB0aGUgc3lzZnMgaW50ZXJmYWNlIGJlaGF2ZXMgYW5kIGhvdyB0byBtYW5hZ2UgdGhlIGtlcm5lbCBmZWF0dXJlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4OTIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0Mjo1Ni4yOTU2MjgzNzdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2MDpcXHRcXHRoZWxwXFxuICA2MTpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiB2aXJ0dWFsIGFkZHJlc3NlcyBvcGVyYXRpb25zIEt1bml0IHRlc3Qgc3VpdGUuXFxuICA2MjpcXHRcXG4gIDYzOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXFxuICA2NDpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxcbiAgNjU6XFx0XFxuICA2NjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA2NzpcXHRcXG4gIDY4OlxcdGNvbmZpZyBEQU1PTl9TWVNGU1xcbiAgNjk6XFx0XFx0Ym9vbCBcXFwiREFNT04gc3lzZnMgaW50ZXJmYWNlXFxcIlxcbiAgNzA6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBTWVNGU1xcbiAgNzE6XFx0XFx0ZGVmYXVsdCBEQU1PTlxcbiAgNzI6XFx0XFx0aGVscFxcbiAgNzM6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTi4gIFRoZSB1c2VyIHNwYWNlIGNhbiB1c2VcXG4gIDc0OlxcdFxcdCAgdGhlIGludGVyZmFjZSBmb3IgYXJiaXRyYXJ5IGRhdGEgYWNjZXNzIG1vbml0b3JpbmcuXFxuICA3NTpcXHRcXG4gIDc2OlxcdGNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxuICA3NzpcXHRcXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4gIDc4OlxcdFxcdGRlcGVuZHMgb24gREFNT05fU1lTRlMgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbiAgNzk6XFx0XFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDI6NTYuMjk1Njg5NDQ2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NDM4OTAzNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIERBTU9OJ3MgU3lzZnMgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGBEQU1PTl9TWVNGU2AgcmVsaWVzIG9uIGJvdGggYERBTU9OYCBhbmQgYFNZU0ZTYC4gYFNZU0ZTYCBpcyBwcmV0dHkgc3RhbmRhcmQsIHdoaWNoIG1lYW5zIHRoZSByZWFsIGNvbmZpZ3VyYXRpb25zIG9mIGludGVyZXN0IGFyZSBnb2luZyB0byBiZSB0aG9zZSByZWxhdGVkIHRvIGBEQU1PTmAgYW5kIHRoZW4gc3BlY2lmaWNhbGx5LCBgREFNT05fU1lTRlNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgYXJlIHNldCB1cC4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzYCB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2AuIElzIHRoYXQgdGhlIG9ubHkgcmVsZXZhbnQgbm9uLXN0YXRpYyBmdW5jdGlvbiB0aGVyZT8gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcgY3J1Y2lhbC5cblxuQWgsIHdhaXQsIGhvbGQgb24uIFRoZXJlJ3MgYWxzbyBgZGFtb25fc3lzZnNfc2V0X3F1b3RhX3Njb3Jlc2AgaW4gYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2DigKYgTm8sIHdhaXQsIHRoYXQncyBub3QgcXVpdGUgcmlnaHQuIEl0IGxvb2tzIGxpa2UgaXQgaXMgYWN0dWFsbHkgYGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNgLiBJIG5lZWQgdG8gcmUtZXhhbWluZSB0aGF0IGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDY4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDM6MDAuNzM5NTgyNzY3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzAzMDAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9zeXNmcy1jb21tb24uaD01MT1pbnQgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zKFxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTMtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NTQ6aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTUtXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yODQ3PXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlKFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4OTMtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4OTQ6aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4OTUtXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMTUyPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfY29tbWl0X3NjaGVtZXNfcXVvdGFfZ29hbHModm9pZCAqZGF0YSlcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjE2NS1cXHRzeXNmc19jdHggPSBzeXNmc19rZGFtb25kLVxcdTAwM2Vjb250ZXh0cy1cXHUwMDNlY29udGV4dHNfYXJyWzBdO1xcbm1tL2RhbW9uL3N5c2ZzLmM6MjE2NjpcXHRyZXR1cm4gZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzeXNmc19jdHgtXFx1MDAzZXNjaGVtZXMsIGN0eCk7XFxubW0vZGFtb24vc3lzZnMuYy0yMTY3LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDM6MDAuNzg2NjE2NTQ3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5MDAwOTY5NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgREFNT04gUGF0Y2ggZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIHByZXR0eSBjcml0aWNhbCBidWcgcmVsYXRlZCB0byB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGNvbW1pdG1lbnQgb2YgYGxhc3RfcHNpX3RvdGFsYCB3aXRoaW4gdGhlIERBTU9OIGNvcmUgYW5kIGl0cyBzeXNmcyBpbnRlcmZhY2UuIFRoYXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBubyBxdWVzdGlvbi4gV2UncmUgbG9va2luZyBhdCBjaGFuZ2VzIHRvIGhvdyBEQU1PTiBoYW5kbGVzIHRoZSBgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTYCBxdW90YSBtZXRyaWMsIHNwZWNpZmljYWxseSBhcm91bmQgaXRzIGludGVyYWN0aW9uIHdpdGggbWVtb3J5IHByZXNzdXJlIGluZm9ybWF0aW9uLiBBbmQgaXQncyBub3QganVzdCB0aGUgY29yZSBsb2dpYzsgdGhlIHBhdGNoIGFsc28gdHdlYWtzIGBuZXh0X3JlZnJlc2hfamlmZmllc2AgaW4gdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSwgd2hpY2ggaXMgdGhlIHVzZXItc3BhY2UgZmFjaW5nIHNpZGUgb2YgdGhlIHN5c3RlbS5cblxuR2l2ZW4gdGhhdCB0aGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGFyZSBleHBvc2VkIHRocm91Z2ggc3lzZnMsIHRoZSBhdHRhY2sgc3VyZmFjZSBpcyBkZWZpbml0ZWx5IHRoZXJlLiBXZSdyZSB0YWxraW5nIGFib3V0IGEgcGF0aCB0byBpbmZsdWVuY2UgbWVtb3J5IG1hbmFnZW1lbnQgYmVoYXZpb3IgZnJvbSB1c2Vyc3BhY2UuIFRoZSBrZXkgc3ltYm9scyBJIG5lZWQgdG8gZm9jdXMgb24gZHVyaW5nIGZ1enppbmcgYXJlIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbHNgIGFuZCBgZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3Jlc2AsIHNpbmNlIHRoZXNlIGFyZSB0aGUgcG9pbnRzIG9mIGludGVncmF0aW9uIGFmZmVjdGVkIGJ5IHRoaXMgcGF0Y2guIFdlIGFsc28gbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYERBTU9OYCBhbmQgYERBTU9OX1NZU0ZTYCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZCwgYXMgdGhlc2UgYXJlIHByZXJlcXVpc2l0ZXMgZm9yIHRoZSBhZmZlY3RlZCBjb2RlIHBhdGhzLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaGFzIHRoZSBwb3RlbnRpYWwgdG8gaW50cm9kdWNlIHN1YnRsZSBidXQgY3JpdGljYWwgbWVtb3J5IG1hbmFnZW1lbnQgZXJyb3JzIHRoYXQgY291bGQgYmUgZXhwbG9pdGFibGUsIGFuZCBpdCB3YXJyYW50cyB0aG9yb3VnaCBmdXp6aW5nLiBJJ20gZ29pbmcgdG8gbWFyayB0aGlzIGFzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjU3LCJPdXRwdXRUb2tlbnMiOjE1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0MzowNi42ODY3MTU0NTNaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjA4NDU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzXCIsXG4gICAgXCJkYW1vc19zeXNmc19zZXRfcXVvdGFfc2NvcmVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgREFNT04gbG9naWMgdG8gcHJvcGVybHkgaW5pdGlhbGl6ZSBhbmQgY29tbWl0IHRoZSBgbGFzdF9wc2lfdG90YWxgIGZvciB0aGUgYERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VU2AgcXVvdGEgbWV0cmljLiBJdCBhbHNvIGZpeGVzIHRoZSBgbmV4dF9yZWZyZXNoX2ppZmZpZXNgIGhhbmRsaW5nIGluIERBTU9OIHN5c2ZzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzeXNmcywgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vc19jb21taXRfcXVvdGFfZ29hbHNcIixcbiAgICBcImRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBEQU1PTiBsb2dpYyB0byBwcm9wZXJseSBpbml0aWFsaXplIGFuZCBjb21taXQgdGhlIGBsYXN0X3BzaV90b3RhbGAgZm9yIHRoZSBgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTYCBxdW90YSBtZXRyaWMuIEl0IGFsc28gZml4ZXMgdGhlIGBuZXh0X3JlZnJlc2hfamlmZmllc2AgaGFuZGxpbmcgaW4gREFNT04gc3lzZnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHN5c2ZzLCBtYWtpbmcgdGhlbSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0MzowNi43NjI4MDU4OTNaIiwiU2VxIjozMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjM3MTcyNzQ4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQzOjA2Ljc2MzI1NjIzM1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNDIzNzEyNzQzNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGJ1ZyB3aGVyZSB0aGUgYGxhc3RfcHNpX3RvdGFsYCBmaWVsZCBpbiBgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWxgIGlzIGxlZnQgdW5pbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24uIFRoZSBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHVzaW5nIGBrbWFsbG9jX29iaigpYCAod2hpY2ggbWFwcyB0byBga21hbGxvY2AgYW5kIGRvZXMgbm90IHplcm8gbWVtb3J5KSBpbiBgZGFtb3NfbmV3X3F1b3RhX2dvYWwoKWAsIGJ1dCBgbGFzdF9wc2lfdG90YWxgIHdhcyBub3QgaW5pdGlhbGl6ZWQuIER1cmluZyB0aGUgZmlyc3QgZXZhbHVhdGlvbiBjeWNsZSwgYGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoKWAgcmVhZHMgdGhpcyB1bmluaXRpYWxpemVkIGZpZWxkIHRvIGNvbXB1dGUgYGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBub3dfcHNpX3RvdGFsIC0gZ29hbC1cXHUwMDNlbGFzdF9wc2lfdG90YWw7YC4gVGhpcyB1bmluaXRpYWxpemVkIHJlc3VsdCBpcyBzdWJzZXF1ZW50bHkgdXNlZCBpbiBhIGNvbmRpdGlvbmFsIGJyYW5jaCAodmlhIHRoZSBgbWF4KClgIG1hY3JvKSBpbiBgZGFtb3NfcXVvdGFfc2NvcmUoKWAgdG8gZGV0ZXJtaW5lIHRoZSBoaWdoZXN0IHF1b3RhIHNjb3JlLCB3aGljaCBkaWN0YXRlcyBtZW1vcnkgcmVjbGFpbSBiZWhhdmlvci5cXG5cXG5TdGFuZGFyZCBLQVNBTiBvbmx5IGRldGVjdHMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWUgYnVnczsgaXQgZG9lcyBub3QgdHJhY2sgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIHdvdWxkIGNvbXBsZXRlbHkgbWlzcyB0aGlzIGJ1Zy4gS01TQU4sIG9uIHRoZSBvdGhlciBoYW5kLCB0cmFja3MgdW5pbml0aWFsaXplZCBtZW1vcnkgYXQgdGhlIGJpdCBsZXZlbCBhbmQgd2lsbCByZWxpYWJseSBmbGFnIHRoZSB1c2Ugb2YgdGhlIHVuaW5pdGlhbGl6ZWQgdmFsdWUgd2hlbiBpdCBhZmZlY3RzIGNvbnRyb2wgZmxvdyAoZS5nLiwgaW4gdGhlIGBtYXgoKWAgY29tcGFyaXNvbikuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBoaWdobHkganVzdGlmaWVkIHRvIGNhdGNoIHRoaXMgYW5kIHNpbWlsYXIgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGluIHRoZSBEQU1PTiBzdWJzeXN0ZW0uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkMTZkZWFlOGNhODMwNTNjNjllZDgzZWIwNGJmZmU4ZDlhMzRiMjg1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjcgMDQ6NDE6NTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDY0NGRhZjVhMTY1NjAuLjZmMzYwZDYxMzkwYWQgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTExMjIsNiArMTEyMiw5IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKFxuIFx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqc3JjKVxuIHtcbiBcdHN3aXRjaCAoZHN0LVx1MDAzZW1ldHJpYykge1xuK1x0Y2FzZSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVM6XG4rXHRcdGRzdC1cdTAwM2VsYXN0X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKTtcbitcdFx0YnJlYWs7XG4gXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX1VTRURfQlA6XG4gXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNX0ZSRUVfQlA6XG4gXHRcdGRzdC1cdTAwM2VuaWQgPSBzcmMtXHUwMDNlbmlkO1xuQEAgLTExNDMsNyArMTE0Niw2IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxuIFx0ZHN0LVx1MDAzZXRhcmdldF92YWx1ZSA9IHNyYy1cdTAwM2V0YXJnZXRfdmFsdWU7XG4gXHRpZiAoZHN0LVx1MDAzZW1ldHJpYyA9PSBEQU1PU19RVU9UQV9VU0VSX0lOUFVUKVxuIFx0XHRkc3QtXHUwMDNlY3VycmVudF92YWx1ZSA9IHNyYy1cdTAwM2VjdXJyZW50X3ZhbHVlO1xuLVx0Lyoga2VlcCBsYXN0X3BzaV90b3RhbCBhcyBpcywgc2luY2UgaXQgd2lsbCBiZSB1cGRhdGVkIGluIG5leHQgY3ljbGUgKi9cbiBcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKGRzdCwgc3JjKTtcbiB9XG4gXG5AQCAtMzcyNyw2ICszNzI5LDE3IEBAIHN0YXRpYyBpbnQga2RhbW9uZF93YWl0X2FjdGl2YXRpb24oc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuIFx0cmV0dXJuIC1FQlVTWTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgZGFtb3NfaW5pdF9xdW90YV9nb2FsX2xhc3RfcHNpKHN0cnVjdCBkYW1vcyAqcylcbit7XG4rXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcbitcbitcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgXHUwMDI2cy1cdTAwM2VxdW90YSkge1xuK1x0XHRpZiAoZ29hbC1cdTAwM2VtZXRyaWMgIT0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsID0gZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpO1xuK1x0fVxuK31cbitcbiBzdGF0aWMgdm9pZCBrZGFtb25kX2luaXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHNhbXBsZV9pbnRlcnZhbCA9IGN0eC1cdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWwgP1xuQEAgLTM3NDMsNiArMzc1Niw3IEBAIHN0YXRpYyB2b2lkIGtkYW1vbmRfaW5pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuIFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHNjaGVtZSwgY3R4KSB7XG4gXHRcdGRhbW9zX3NldF9uZXh0X2FwcGx5X3NpcyhzY2hlbWUsIGN0eCk7XG4gXHRcdGRhbW9zX3NldF9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0KHNjaGVtZSk7XG4rXHRcdGRhbW9zX2luaXRfcXVvdGFfZ29hbF9sYXN0X3BzaShzY2hlbWUpO1xuIFx0fVxuIH1cbiBcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy5jIGIvbW0vZGFtb24vc3lzZnMuY1xuaW5kZXggZTM4NThmZmFiNGIyMi4uZjA1YjI1NmM5MGVlNyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3N5c2ZzLmNcbisrKyBiL21tL2RhbW9uL3N5c2ZzLmNcbkBAIC0xNzg5LDYgKzE3ODksNyBAQCBzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCB7XG4gXHRzdHJ1Y3QgZGFtb25fc3lzZnNfY29udGV4dHMgKmNvbnRleHRzO1xuIFx0c3RydWN0IGRhbW9uX2N0eCAqZGFtb25fY3R4O1xuIFx0dW5zaWduZWQgaW50IHJlZnJlc2hfbXM7XG4rXHR1bnNpZ25lZCBsb25nIG5leHRfcmVmcmVzaF9qaWZmaWVzO1xuIH07XG4gXG4gc3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICpkYW1vbl9zeXNmc19rZGFtb25kX2FsbG9jKHZvaWQpXG5AQCAtMjIxNSwxNyArMjIxNiwxNSBAQCBzdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fc3lzZnNfYnVpbGRfY3R4KFxuIFx0cmV0dXJuIGN0eDtcbiB9XG4gXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllcztcbi1cbiBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3JlcGVhdF9jYWxsX2ZuKHZvaWQgKmRhdGEpXG4ge1xuIFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKnN5c2ZzX2tkYW1vbmQgPSBkYXRhO1xuIFxuIFx0aWYgKCFzeXNmc19rZGFtb25kLVx1MDAzZXJlZnJlc2hfbXMpXG4gXHRcdHJldHVybiAwO1xuLVx0aWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXMpKVxuK1x0aWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHN5c2ZzX2tkYW1vbmQtXHUwMDNlbmV4dF9yZWZyZXNoX2ppZmZpZXMpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXMgPSBqaWZmaWVzICtcbitcdHN5c2ZzX2tkYW1vbmQtXHUwMDNlbmV4dF9yZWZyZXNoX2ppZmZpZXMgPSBqaWZmaWVzICtcbiBcdFx0bXNlY3NfdG9famlmZmllcyhzeXNmc19rZGFtb25kLVx1MDAzZXJlZnJlc2hfbXMpO1xuIFxuIFx0aWYgKCFtdXRleF90cnlsb2NrKFx1MDAyNmRhbW9uX3N5c2ZzX2xvY2spKVxuQEAgLTIyNzMsOCArMjI3Miw4IEBAIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcbiBcdH1cbiBcdGtkYW1vbmQtXHUwMDNlZGFtb25fY3R4ID0gY3R4O1xuIFxuLVx0ZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllcyA9XG4tXHRcdGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGtkYW1vbmQtXHUwMDNlcmVmcmVzaF9tcyk7XG4rXHRrZGFtb25kLVx1MDAzZW5leHRfcmVmcmVzaF9qaWZmaWVzID0gamlmZmllcyArXG4rXHRcdG1zZWNzX3RvX2ppZmZpZXMoa2RhbW9uZC1cdTAwM2VyZWZyZXNoX21zKTtcbiBcbiBcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXHUwMDNlZm4gPSBkYW1vbl9zeXNmc19yZXBlYXRfY2FsbF9mbjtcbiBcdHJlcGVhdF9jYWxsX2NvbnRyb2wtXHUwMDNlZGF0YSA9IGtkYW1vbmQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0MzowNi43NjMyNTcwNzNaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTYxMjE5Njc0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEQU1PTiBQYXRjaCBBbmFseXNpczogUFNJIEludGVncmF0aW9uIGFuZCBTeXNmcyBFbmhhbmNlbWVudHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgREFNT04gcGF0Y2guIEl0IGxvb2tzIGxpa2Ugd2UndmUgZ290IGNoYW5nZXMgaW4gYG1tL2RhbW9uL2NvcmUuY2AgYW5kIGBtbS9kYW1vbi9zeXNmcy5jYCwgZm9jdXNpbmcgb24gaW50ZWdyYXRpbmcgUFNJIChQcmVzc3VyZSBTdGFsbCBJbmZvcm1hdGlvbikgbWV0cmljcyBhbmQgaW1wcm92aW5nIHRoZSBzeXNmcyBpbnRlcmZhY2UuXG5cbkZpcnN0LCBpbiBgbW0vZGFtb24vY29yZS5jYCwgdGhlIGtleSBhZGp1c3RtZW50IHNlZW1zIHRvIGJlIGludGVncmF0aW5nIGBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVNgLiBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb25gIGlzIG5vdyB1cGRhdGVkIHRvIGhhbmRsZSB0aGlzIHF1b3RhIHR5cGUuIENyaXRpY2FsbHksIHdlJ3JlIGdyYWJiaW5nIHRoZSB0b3RhbCBQU0kgbWV0cmljcyB1c2luZyBgZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpYCBhbmQgc3RvcmluZyB0aGVtIGluIGBkc3QtXHUwMDNlbGFzdF9wc2lfdG90YWxgLiBUaGlzIHN0cm9uZ2x5IGltcGxpZXMgdGhhdCB3ZSdyZSB1c2luZyBQU0kgZGF0YSB0byBpbmZvcm0gb3VyIHF1b3RhIGRlY2lzaW9ucywgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBhZGRpdGlvbiBmb3IgbW9yZSBpbnRlbGxpZ2VudCBtZW1vcnkgbWFuYWdlbWVudC4gVGhlcmUgYXJlIHNvbWUgbWlub3IgdHdlYWtzIHRvIGV4aXN0aW5nIGZ1bmN0aW9ucy4gYGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsYCBoYXMgYSBjb21tZW50IHJlbW92ZWQsIGFuZCBhIG5ldyBmdW5jdGlvbiwgYGRhbW9zX2luaXRfcXVvdGFfZ29hbF9sYXN0X3BzaWAsIGhhcyBiZWVuIGludHJvZHVjZWQsIHdoaWNoIGRvZXMgd2hhdCB0aGUgbmFtZSBpbXBsaWVzOiBpbml0aWFsaXplcyBgZ29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbGAgZm9yIHRoZSBgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTYCBzY2hlbWUuIFRoaXMgaW5pdGlhbGl6YXRpb24gaXMgZXNzZW50aWFsLCBhbmQgaXQncyBnb29kIHRvIHNlZSBpdCBhZGRyZXNzZWQgZGlyZWN0bHkgd2l0aGluIHRoZSBjb250ZXh0IGluaXRpYWxpemF0aW9uIChga2RhbW9uZF9pbml0X2N0eGApLlxuXG5Ob3csIGZsaXBwaW5nIG92ZXIgdG8gYG1tL2RhbW9uL3N5c2ZzLmNgLCB0aGUgbW9kaWZpY2F0aW9ucyBzZWVtIGNlbnRlcmVkIGFyb3VuZCByZWZpbmluZyB0aGUgdXBkYXRlIG1lY2hhbmlzbSBhbmQgdHlpbmcgaXQgdG8gUFNJIGludGVncmF0aW9uLiBBIGtleSBjaGFuZ2UgaXMgdGhlIGFkZGl0aW9uIG9mIGEgbmV3IGZpZWxkLCBgdW5zaWduZWQgbG9uZyBuZXh0X3JlZnJlc2hfamlmZmllc2AsIHdpdGhpbiB0aGUgYHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kYC4gVGhlIGdsb2JhbCB2YXJpYWJsZSBgZGFtb25fc3lzZnNfbmV4dF91cGRhdGVfamlmZmllc2AgaGFzIGJlZW4gcmVtb3ZlZCwgcmVwbGFjZWQgYnkgdGhpcyBwZXItaW5zdGFuY2UgZmllbGQuIFRoaXMgY2hhbmdlIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IG1ha2VzIHRoZSByZWZyZXNoIG1lY2hhbmlzbSBtb3JlIGZsZXhpYmxlIGFuZCBwb3RlbnRpYWxseSBhbGxvd3MgZm9yIGRpZmZlcmVudCB1cGRhdGUgZnJlcXVlbmNpZXMgZm9yIGRpZmZlcmVudCBEQU1PTiBpbnN0YW5jZXMuIFRoaXMgbWFrZXMgc2Vuc2UgZnJvbSBhIHBlcmZvcm1hbmNlIHBlcnNwZWN0aXZlLiBgZGFtb25fc3lzZnNfcmVwZWF0X2NhbGxfZm5gIG5vdyB1c2VzIGBzeXNmc19rZGFtb25kLVx1MDAzZW5leHRfcmVmcmVzaF9qaWZmaWVzYC4gSSdsbCB3YW50IHRvIGVuc3VyZSB0aGlzIGlzbid0IGNyZWF0aW5nIGFueSB1bmV4cGVjdGVkIHJhY2UgY29uZGl0aW9ucyBvciBjb25jdXJyZW5jeSBpc3N1ZXMgYW5kIHRoYXQgdGhlIGNvcnJlY3QgamlmZmllcyBhcmUgYmVpbmcgc2V0LiBUaGUgaW5pdGlhbGl6YXRpb24gb2YgYGtkYW1vbmQtXHUwMDNlbmV4dF9yZWZyZXNoX2ppZmZpZXNgIGR1cmluZyBgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbmAgaXMgdGhlIGZpbmFsIHBpZWNlIG9mIHRoZSBwdXp6bGUuXG5cbkZpbmFsbHksIEkgbmVlZCB0byB2ZXJpZnkgaG93IGBzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZGAgaXMgYmVpbmcgYWxsb2NhdGVkLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgaXQgaXMgYmVpbmcgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jYC4gSSdsbCB3YW50IHRvIGNoZWNrIHRoYXQgdGhpcyBhbGxvY2F0aW9uIGlzIGhhbmRsZWQgY29ycmVjdGx5IGJ5IGBkYW1vbl9zeXNmc19rZGFtb25kX2FsbG9jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzExMiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQzOjE2LjM3NTQ1NjMzMloiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4ODg2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fc3lzZnNfa2RhbW9uZF9hbGxvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9zeXNmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3N5c2ZzLmM9MTc4Nz1zdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTE3OTQtXFxubW0vZGFtb24vc3lzZnMuYzoxNzk1OnN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqZGFtb25fc3lzZnNfa2RhbW9uZF9hbGxvYyh2b2lkKVxcbm1tL2RhbW9uL3N5c2ZzLmMtMTc5Ni17XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTI1NDc9c3RhdGljIGludCBkYW1vbl9zeXNmc19rZGFtb25kc19hZGRfZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZHMgKmtkYW1vbmRzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yNTY2LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9rZGFtb25kczsgaSsrKSB7XFxubW0vZGFtb24vc3lzZnMuYzoyNTY3OlxcdFxcdGtkYW1vbmQgPSBkYW1vbl9zeXNmc19rZGFtb25kX2FsbG9jKCk7XFxubW0vZGFtb24vc3lzZnMuYy0yNTY4LVxcdFxcdGlmICgha2RhbW9uZCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0MzoxNi40MjEzNjA5MzJaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk4NTY3MTMwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgZGFtb25fc3lzZnNfa2RhbW9uZF9hbGxvY2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgZGFtb25fc3lzZnNfa2RhbW9uZF9hbGxvY2AgaXMgaW1wbGVtZW50ZWQuIEl0J3MgYSBrZXkgZnVuY3Rpb24sIGFuZCBhIGdvb2QgZ3Jhc3Agb2YgaXRzIHNwZWNpZmljcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSBzeXN0ZW0gYW5kIGl0cyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgc3lzZnMgaW50ZXJmYWNlLiBJIG5lZWQgdG8gd2FsayB0aHJvdWdoIHRoZSBjb2RlIGFuZCBxdWlja2x5IHJlY2FsbCB0aGUgYWxsb2NhdGlvbiBsb2dpYy4gSSBzaG91bGQgZm9jdXMgb24gaG93IGl0IGhhbmRsZXMgbWVtb3J5LCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IHVzZXMsIHBvdGVudGlhbCBzeW5jaHJvbml6YXRpb24gaXNzdWVzLCBhbmQgdGhlIG92ZXJhbGwgZWZmaWNpZW5jeSBvZiBpdHMgYWxsb2NhdGlvbiBzY2hlbWUuIExldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IGdvdGNoYXMgaW4gdGhpcyBhbGxvY2F0aW9uIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Mzg2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDM6MTkuNDA3MDMzNzA1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9zeXNmcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3OTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3OTU6XFx0c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICpkYW1vbl9zeXNmc19rZGFtb25kX2FsbG9jKHZvaWQpXFxuMTc5NjpcXHR7XFxuMTc5NzpcXHRcXHRyZXR1cm4ga3phbGxvY19vYmooc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQpO1xcbjE3OTg6XFx0fVxcbjE3OTk6XFx0XFxuMTgwMDpcXHRzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2tkYW1vbmRfYWRkX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXFxuMTgwMTpcXHR7XFxuMTgwMjpcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfY29udGV4dHMgKmNvbnRleHRzO1xcbjE4MDM6XFx0XFx0aW50IGVycjtcXG4xODA0OlxcdFxcbjE4MDU6XFx0XFx0Y29udGV4dHMgPSBkYW1vbl9zeXNmc19jb250ZXh0c19hbGxvYygpO1xcbjE4MDY6XFx0XFx0aWYgKCFjb250ZXh0cylcXG4xODA3OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjE4MDg6XFx0XFxuMTgwOTpcXHRcXHRlcnIgPSBrb2JqZWN0X2luaXRfYW5kX2FkZChcXHUwMDI2Y29udGV4dHMtXFx1MDAzZWtvYmosXFxuMTgxMDpcXHRcXHRcXHRcXHRcXHUwMDI2ZGFtb25fc3lzZnNfY29udGV4dHNfa3R5cGUsIFxcdTAwMjZrZGFtb25kLVxcdTAwM2Vrb2JqLFxcbjE4MTE6XFx0XFx0XFx0XFx0XFxcImNvbnRleHRzXFxcIik7XFxuMTgxMjpcXHRcXHRpZiAoZXJyKSB7XFxuMTgxMzpcXHRcXHRcXHRrb2JqZWN0X3B1dChcXHUwMDI2Y29udGV4dHMtXFx1MDAzZWtvYmopO1xcbjE4MTQ6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDM6MTkuNDA3MjI5MDM1WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3NTQ1MTc2MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEQU1PTiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgREFNT04gcGF0Y2gsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIHVzaW5nIGBremFsbG9jX29iamAsIHdoaWNoIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoZSBtZW1vcnkgaXMgYmVpbmcgemVyb2VkIG91dC4gVGhhdCdzIGdvb2QgdG8gc2VlLiBUaGUgc2Vjb25kIGFyZWEgb2YgY29uY2VybiBJIGhhdmUgaXMgdGhlIGNoYW5nZSBpbiBgbW0vZGFtb24vY29yZS5jYCwgc3BlY2lmaWNhbGx5IGhvdyBgbGFzdF9wc2lfdG90YWxgIGlzIGluaXRpYWxpemVkLiBXYWl0LCBub3cgdGhhdCBJIHRoaW5rIGFib3V0IGl0LCBgbGFzdF9wc2lfdG90YWxgIGdldHMgaW5pdGlhbGl6ZWQgaW4gYGRhbW9zX2luaXRfcXVvdGFfZ29hbF9sYXN0X3BzaWAgd2hlbiBga2RhbW9uZF9pbml0X2N0eGAgaXMgY2FsbGVkLlxuXG5UaGUga2V5IHF1ZXN0aW9uIGluIG15IG1pbmQgaXMgYWx3YXlzOiBJcyB0aGVyZSBhIHBvdGVudGlhbCBmb3IgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBpbmZvcm1hdGlvbiBsZWFrIGhlcmU/IExldCdzIGRpZyBkZWVwZXIuIFRoZSBjaGFuZ2VzIGFwcGVhciB0byBiZSBsb2dpYyBmaXhlcy4gU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlOlxuXG4xLiAgYGxhc3RfcHNpX3RvdGFsYCB3YXNuJ3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQgd2hlbiB0aGUgY29udGV4dCB3YXMgc3RhcnRlZCwgb3Igd2Fzbid0IHVwZGF0ZWQgY29ycmVjdGx5IGluIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbmAuXG4yLiAgYGRhbW9uX3N5c2ZzX25leHRfdXBkYXRlX2ppZmZpZXNgIHdhcyBhIGdsb2JhbCB2YXJpYWJsZS4gVGhpcyBtZWFucyBtdWx0aXBsZSBrZGFtb25kcyBjb3VsZCBzdGVwIG9uIGVhY2ggb3RoZXIsIGNhdXNpbmcgc2VyaW91cyBidWdzLiBTbywgdGhleSBtb3ZlZCBpdCB0byBgc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmRgLlxuXG5HaXZlbiB0aGF0LCBteSBndXQgZmVlbGluZyBpcyB0aGF0IG5laXRoZXIgb2YgdGhlc2UgY2hhbmdlcyBkaXJlY3RseSBpbnRyb2R1Y2UgYSByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXJzcGFjZSwgb3IgdXNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gYSB3YXkgdGhhdCBLTVNBTiB3b3VsZCB1bmlxdWVseSBmbGFnLiBUaGUgbWVtb3J5IGFsbG9jYXRlZCBmb3IgYGRhbW9uX3N5c2ZzX2tkYW1vbmRgIGlzIHplcm9lZCwgYW5kIHRoZSBgbGFzdF9wc2lfdG90YWxgIGlzIGEgZmllbGQgaW4gYHN0cnVjdCBkYW1vc19xdW90YV9nb2FsYCwgd2hpY2ggaXMgbGlrZWx5IHplcm8taW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uLiBIb3dldmVyLCBiZXR0ZXIgdG8gYmUgY2VydGFpbiB0aGFuIHNvcnJ5LiBMZXQncyBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBkYW1vc19xdW90YV9nb2FsYCBhbGxvY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTI2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDM6MjYuMTYxNzQ5NTZaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDc1ODYwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19xdW90YV9nb2FsLiphbGxvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQzOjI2LjIwNjgyOTY3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NjgxODkzNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBOZXcgUXVvdGEgR29hbCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBkYW1vc19uZXdfcXVvdGFfZ29hbGAgdmFyaWFibGUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBjb25zaWRlciBpdHMgY29udGV4dCB3aXRoaW4gdGhlIGJyb2FkZXIgYGRhbW9zYCBmcmFtZXdvcmsuIElzIHRoaXMgYSBuZXcgZ29hbCBiZWluZyBpbnRyb2R1Y2VkPyBBIHJldmlzaW9uIG9mIGFuIGV4aXN0aW5nIG9uZT8gQW5kIHdoYXQncyB0aGUgZXhwZWN0ZWQgaW1wYWN0PyBJJ20gYWxyZWFkeSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgZG93bnN0cmVhbSBkZXBlbmRlbmNpZXM7IHdoaWNoIG1vZGVscywgcmVwb3J0cywgb3IgZGFzaGJvYXJkcyByZWx5IG9uIHRoaXMgcGFydGljdWxhciBxdW90YT9cblxuRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzdHJ1Y3R1cmUuIElzIHRoaXMgYSBzY2FsYXIgdmFsdWUsIGEgZGlzdHJpYnV0aW9uLCBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4PyBUaGUgZm9ybWF0IHdpbGwgZGljdGF0ZSBob3cgSSdsbCB2YWxpZGF0ZSBpdCBhbmQgaWRlbnRpZnkgcG90ZW50aWFsIGlzc3Vlcy4gQXJlIHRoZXJlIGFueSBhc3NvY2lhdGVkIG1ldGFkYXRhIHRhZ3Mgb3IgZG9jdW1lbnRhdGlvbiBJIHNob3VsZCBiZSByZXZpZXdpbmc/IENoZWNraW5nIHRoZSBzY2hlbWEgb3IgZGF0YSBkaWN0aW9uYXJ5IHdvdWxkIGJlIHRoZSBsb2dpY2FsIG5leHQgc3RlcCB0byB1bmRlcnN0YW5kIHRoZSBpbnB1dCB0eXBlcywgdmFsaWRpdHkgY29uc3RyYWludHMsIGFuZCB0aGUgYWNjZXB0YWJsZSByYW5nZS5cblxuQXNzdW1pbmcgdGhpcyBpcyBuZXcgb3IgbW9kaWZpZWQsIEkgbmVlZCB0byBldmFsdWF0ZSB0aGUgaW1wbGljYXRpb25zIGZvciBmb3JlY2FzdGluZy4gRG9lcyB0aGlzIGNoYW5nZSBuZWNlc3NpdGF0ZSByZS1jYWxpYnJhdGlvbiBvZiBhbnkgcHJlZGljdGl2ZSBtb2RlbHM/IFdoYXQgYWJvdXQgaGlzdG9yaWNhbCBjb21wYXJpc29ucz8gV2lsbCB0aGlzIGNoYW5nZSBhZmZlY3Qgb3VyIGFiaWxpdHkgdG8gYWNjdXJhdGVseSBtZWFzdXJlIHBlcmZvcm1hbmNlIGFnYWluc3QgdGhlIG9yaWdpbmFsIHRhcmdldHM/IEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIGNoYW5nZSBhZmZlY3RzIHRoZSBvdmVyYWxsIHBlcmZvcm1hbmNlIG1ldHJpY3MgYW5kIHdoZXRoZXIgb3Igbm90IHRoZXJlIGFyZSBhbnkgaW1wYWN0cyBvbiB0aGUgcmVwb3J0aW5nLlxuXG5Gcm9tIHRoZXJlLCBJIHdhbnQgdG8gaW1tZWRpYXRlbHkgdGhpbmsgYWJvdXQgdGhlIGltcGFjdCBvZiB0aGlzIHBhcnRpY3VsYXIgZ29hbCBvbiBhbnkgZXhpc3RpbmcgYWxlcnRzIG9yIG1vbml0b3Jpbmcgc3lzdGVtcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXNlIHN5c3RlbXMgcmVmbGVjdCB0aGUgbmV3IHRocmVzaG9sZCwgYW5kIGlmIG5vdCwgd2hhdCB0eXBlIG9mIHJlbWVkaWF0aW9uIGlzIHJlcXVpcmVkP1xuVWx0aW1hdGVseSwgbXkgZ29hbCBoZXJlIGlzIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBjaGFuZ2UgaXMgcmVhc29uYWJsZSwgdGhvcm91Z2hseSB2ZXR0ZWQsIGFuZCB3aWxsIGludGVncmF0ZSBzbW9vdGhseSBpbnRvIHRoZSBleGlzdGluZyBvcGVyYXRpb25hbCBlbnZpcm9ubWVudC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGFsbCBnb2VzIHdlbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NzMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0MzozMC4xNzUwMjA2MjFaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDE3MjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX25ld19xdW90YV9nb2FsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9NjIxPXZvaWQgZGFtb3NfZGVzdHJveV9maWx0ZXIoc3RydWN0IGRhbW9zX2ZpbHRlciAqZilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy02MjYtXFxubW0vZGFtb24vY29yZS5jOjYyNzpzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZGFtb3NfbmV3X3F1b3RhX2dvYWwoXFxubW0vZGFtb24vY29yZS5jLTYyOC1cXHRcXHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMTY0PWludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTExNzgtXFx0XFx0XFx0Y29udGludWU7XFxubW0vZGFtb24vY29yZS5jOjExNzk6XFx0XFx0bmV3X2dvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChcXG5tbS9kYW1vbi9jb3JlLmMtMTE4MC1cXHRcXHRcXHRcXHRzcmNfZ29hbC1cXHUwMDNlbWV0cmljLCBzcmNfZ29hbC1cXHUwMDNldGFyZ2V0X3ZhbHVlKTtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9MjI5PXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYWRkX3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vcyAqaG90X3NjaGVtZSxcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjM3LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbm1tL2RhbW9uL2xydV9zb3J0LmM6MjM4OlxcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9BQ1RJVkVfTUVNX0JQLCBhY3RpdmVfbWVtX2JwKTtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTIzOS1cXHRpZiAoIWdvYWwpXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTI0Mi1cXHQvKiBhaW0gMC4yICUgZ29hbCBjb25mbGljdCwgdG8ga2VlcCBsaXR0bGUgcGluZyBwb25nICovXFxubW0vZGFtb24vbHJ1X3NvcnQuYzoyNDM6XFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX0lOQUNUSVZFX01FTV9CUCxcXG5tbS9kYW1vbi9scnVfc29ydC5jLTI0NC1cXHRcXHRcXHQxMDAwMCAtIGFjdGl2ZV9tZW1fYnAgKyAyKTtcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0xOTQ9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yMzUtXFx0aWYgKHF1b3RhX21lbV9wcmVzc3VyZV91cykge1xcbm1tL2RhbW9uL3JlY2xhaW0uYzoyMzY6XFx0XFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUyxcXG5tbS9kYW1vbi9yZWNsYWltLmMtMjM3LVxcdFxcdFxcdFxcdHF1b3RhX21lbV9wcmVzc3VyZV91cyk7XFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMjQzLVxcdGlmIChxdW90YV9hdXRvdHVuZV9mZWVkYmFjaykge1xcbm1tL2RhbW9uL3JlY2xhaW0uYzoyNDQ6XFx0XFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX1VTRVJfSU5QVVQsIDEwMDAwKTtcXG5tbS9kYW1vbi9yZWNsYWltLmMtMjQ1LVxcdFxcdGlmICghZ29hbClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yODQ3PXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfYWRkX3F1b3RhX3Njb3JlKFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NjAtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4NjE6XFx0XFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKHN5c2ZzX2dvYWwtXFx1MDAzZW1ldHJpYyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg2Mi1cXHRcXHRcXHRcXHRzeXNmc19nb2FsLVxcdTAwM2V0YXJnZXRfdmFsdWUpO1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTgzND1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2Fsc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTg1Mi1cXHRcXHQgKi9cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODUzOlxcdFxcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChkc3RfZ29hbHNbaV0ubWV0cmljLFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04NTQtXFx0XFx0XFx0XFx0ZHN0X2dvYWxzW2ldLnRhcmdldF92YWx1ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQzOjMwLjIxOTQ0MDQ0MVoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTI3NDk4ODkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgTmV3IFF1b3RhIEdvYWwgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaXRzIG92ZXJhbGwgbG9naWMgYW5kIG1ha2Ugc3VyZSBpdCBhbGlnbnMgd2l0aCB0aGUgdXBkYXRlZCByZXF1aXJlbWVudHMuIEkgd2FudCB0byBjaGVjayBmb3IgYW55IHBvdGVudGlhbCBlZGdlIGNhc2VzIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIG1pc3NlZCBpbiB0aGUgaW5pdGlhbCBkZXNpZ24uIFRoaW5ncyBsaWtlIGhvdyBpdCBoYW5kbGVzIHNjZW5hcmlvcyB3aXRoIHplcm8gcXVvdGEsIHF1b3RhcyB0aGF0IGFyZSB1cGRhdGVkIG1pZC1jeWNsZSwgYW5kIG5lZ2F0aXZlIHZhbHVlcywgaWYgdGhvc2UgYXJlIGV2ZW4gcGVybWl0dGVkLiBJIG5lZWQgdG8gZXhhbWluZSB0aGUgc3BlY2lmaWMgY2FsY3VsYXRpb25zLCBlbnN1cmluZyB0aGV5J3JlIGNvbXB1dGF0aW9uYWxseSBlZmZpY2llbnQgYW5kIGNvcnJlY3RseSBhY2NvdW50IGZvciBhbnkgaW5oZXJpdGVkIG9yIHNoYXJlZCByZXNvdXJjZXMuIEFyZSB3ZSBhY2N1cmF0ZWx5IHJlZmxlY3RpbmcgdGhlIG5ldyBnb2FsIHdpdGhpbiB0aGUgcXVvdGEgc3lzdGVtJ3MgZXhpc3RpbmcgZnJhbWV3b3JrPyBJIGFsc28gd2FudCB0byB2ZXJpZnkgaXQgaW50ZWdyYXRlcyBzZWFtbGVzc2x5IHdpdGggYW55IG1vbml0b3JpbmcgYW5kIGFsZXJ0aW5nIHN5c3RlbXMgd2UgaGF2ZSBpbiBwbGFjZS4gRmluYWxseSwgSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBhbnkgZGF0YSBkZXBlbmRlbmNpZXMgYXJlIHByb3Blcmx5IGhhbmRsZWQuIFRoZSBsYXN0IHRoaW5nIEkgd2FudCBpcyBhIGNhc2NhZGluZyBlcnJvciBkdWUgdG8gYSBzaW1wbGUgb3ZlcnNpZ2h0LiBMZXQncyBzdGFydCB3aXRoIGEgY29kZSByZXZpZXcgYW5kIHRyYWNlIHRocm91Z2ggYSBmZXcgcmVwcmVzZW50YXRpdmUgdXNlIGNhc2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDE0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDM6MzQuMTQ2OTQyNzMyWiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjI3LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjI3OlxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19uZXdfcXVvdGFfZ29hbChcXG4gNjI4OlxcdFxcdFxcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljLFxcbiA2Mjk6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyB0YXJnZXRfdmFsdWUpXFxuIDYzMDpcXHR7XFxuIDYzMTpcXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcXG4gNjMyOlxcdFxcbiA2MzM6XFx0XFx0Z29hbCA9IGttYWxsb2Nfb2JqKCpnb2FsKTtcXG4gNjM0OlxcdFxcdGlmICghZ29hbClcXG4gNjM1OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA2MzY6XFx0XFx0Z29hbC1cXHUwMDNlbWV0cmljID0gbWV0cmljO1xcbiA2Mzc6XFx0XFx0Z29hbC1cXHUwMDNldGFyZ2V0X3ZhbHVlID0gdGFyZ2V0X3ZhbHVlO1xcbiA2Mzg6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmdvYWwtXFx1MDAzZWxpc3QpO1xcbiA2Mzk6XFx0XFx0cmV0dXJuIGdvYWw7XFxuIDY0MDpcXHR9XFxuIDY0MTpcXHRcXG4gNjQyOlxcdHZvaWQgZGFtb3NfYWRkX3F1b3RhX2dvYWwoc3RydWN0IGRhbW9zX3F1b3RhICpxLCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZylcXG4gNjQzOlxcdHtcXG4gNjQ0OlxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmctXFx1MDAzZWxpc3QsIFxcdTAwMjZxLVxcdTAwM2Vnb2Fscyk7XFxuIDY0NTpcXHR9XFxuIDY0NjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDM6MzQuMTQ3MTExNDMyWiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjY4NzkyOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBhIE5vbi1aZXJvaW5nIEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBJIHNlZSBga21hbGxvY19vYmpgIGJlaW5nIHVzZWQgZm9yIHRoaXMgYWxsb2NhdGlvbi4gSG1tLCBpbnRlcmVzdGluZy4gVW5saWtlIHNvbWUgb2YgdGhlIG90aGVyIGFsbG9jYXRpb24gbWV0aG9kcyBJJ20gZmFtaWxpYXIgd2l0aCwgdGhpcyBkb2Vzbid0IGd1YXJhbnRlZSB6ZXJvZWQgbWVtb3J5LCB3aGljaCBjb3VsZCBsZWFkIHRvIHNvbWUgaW50ZXJlc3RpbmcgYW5kIHBvdGVudGlhbGx5IG5hc3R5IGJ1Z3MgaWYgd2UgYXJlbid0IGNhcmVmdWwgYWJvdXQgaW5pdGlhbGl6YXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBoYW5kbGVkIGNvcnJlY3RseSBkb3duc3RyZWFtLiBXYWl0IGEgbWludXRlLi4uIGBrbWFsbG9jX29iamA/IEkgZG9uJ3QgcmVjYWxsIHNlZWluZyB0aGF0IG1hY3JvIGJlZm9yZS4gSXQncyBub3QgaW1tZWRpYXRlbHkgZmFtaWxpYXIgdG8gbWUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IHRoYXQgbWFjcm8gYWN0dWFsbHkgKmRvZXMqLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGRlZmluaXRpb24gb2YgYGttYWxsb2Nfb2JqYCB0byBjb25maXJtIHdoZXRoZXIgbXkgYXNzdW1wdGlvbiBhYm91dCB0aGUgbGFjayBvZiB6ZXJvaW5nIGlzIGNvcnJlY3QsIGFuZCB3aGF0IGtpbmQgb2YgZ3VhcmFudGVlcywgaWYgYW55LCBpdCBwcm92aWRlcyBhYm91dCBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvci4gR290dGEgZmluZCB0aGUgaGVhZGVyIHdoZXJlIGl0J3MgZGVmaW5lZC4gTGV0J3MgbG9vayB0aGF0IHVwIGZpcnN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTcwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0MzozNy44NzM5OTI3MDRaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NTI0NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImttYWxsb2Nfb2JqXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MTE0PXN0cnVjdCBkYW1vbl9maWx0ZXIgKmRhbW9uX25ld19maWx0ZXIoZW51bSBkYW1vbl9maWx0ZXJfdHlwZSB0eXBlLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTExOC1cXG5tbS9kYW1vbi9jb3JlLmM6MTE5OlxcdGZpbHRlciA9IGttYWxsb2Nfb2JqKCpmaWx0ZXIpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMjAtXFx0aWYgKCFmaWx0ZXIpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTYyPXN0cnVjdCBkYW1vbl9wcm9iZSAqZGFtb25fbmV3X3Byb2JlKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTY1LVxcbm1tL2RhbW9uL2NvcmUuYzoxNjY6XFx0cCA9IGttYWxsb2Nfb2JqKCpwKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTY3LVxcdGlmICghcClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz01Njk9c3RydWN0IGRhbW9zX2ZpbHRlciAqZGFtb3NfbmV3X2ZpbHRlcihlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHR5cGUsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNTczLVxcbm1tL2RhbW9uL2NvcmUuYzo1NzQ6XFx0ZmlsdGVyID0ga21hbGxvY19vYmooKmZpbHRlcik7XFxubW0vZGFtb24vY29yZS5jLTU3NS1cXHRpZiAoIWZpbHRlcilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz02Mjc9c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX25ld19xdW90YV9nb2FsKFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTYzMi1cXG5tbS9kYW1vbi9jb3JlLmM6NjMzOlxcdGdvYWwgPSBrbWFsbG9jX29iaigqZ29hbCk7XFxubW0vZGFtb24vY29yZS5jLTYzNC1cXHRpZiAoIWdvYWwpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9NjgyPXN0cnVjdCBkYW1vcyAqZGFtb25fbmV3X3NjaGVtZShzdHJ1Y3QgZGFtb3NfYWNjZXNzX3BhdHRlcm4gKnBhdHRlcm4sXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNjkwLVxcbm1tL2RhbW9uL2NvcmUuYzo2OTE6XFx0c2NoZW1lID0ga21hbGxvY19vYmooKnNjaGVtZSk7XFxubW0vZGFtb24vY29yZS5jLTY5Mi1cXHRpZiAoIXNjaGVtZSlcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz03NzY9c3RydWN0IGRhbW9uX3RhcmdldCAqZGFtb25fbmV3X3RhcmdldCh2b2lkKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTc3OS1cXG5tbS9kYW1vbi9jb3JlLmM6NzgwOlxcdHQgPSBrbWFsbG9jX29iaigqdCk7XFxubW0vZGFtb24vY29yZS5jLTc4MS1cXHRpZiAoIXQpXFxuLS1cXG5tbS9kYW1vbi9zdGF0LmM9ODQ9c3RhdGljIGludCBkYW1vbl9zdGF0X3NvcnRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbi0tXFxubW0vZGFtb24vc3RhdC5jLTk1LVxcdFxcdC8qIHRoZXJlIGlzIG9ubHkgb25lIHRhcmdldCAqL1xcbm1tL2RhbW9uL3N0YXQuYzo5NjpcXHRcXHRyZWdpb25fcG9pbnRlcnMgPSBrbWFsbG9jX29ianMoKnJlZ2lvbl9wb2ludGVycyxcXG5tbS9kYW1vbi9zdGF0LmMtOTctXFx0XFx0XFx0XFx0XFx0ICAgICAgIGRhbW9uX25yX3JlZ2lvbnModCkpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM9MTY9c3RydWN0IGRhbW9uX3N5c2ZzX3VsX3JhbmdlICpkYW1vbl9zeXNmc191bF9yYW5nZV9hbGxvYyhcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTE5LXtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzoyMDpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfdWxfcmFuZ2UgKnJhbmdlID0ga21hbGxvY19vYmooKnJhbmdlKTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0yMS1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz05MD1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX3Byb2Jlc19hZGRfZGlycyhzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmVzICpwcm9iZXMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTAyLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMDM6XFx0cHJvYmVzX2FyciA9IGttYWxsb2Nfb2JqcygqcHJvYmVzX2FyciwgaSk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEwNC1cXHRpZiAoIXByb2Jlc19hcnIpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTYwPXN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiAqZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9hbGxvYyhcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjIte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNjM6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnN5c2ZzX3JlZ2lvbiA9IGttYWxsb2Nfb2JqKCpzeXNmc19yZWdpb24pO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjQtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MzA1PWRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX2FsbG9jKHZvaWQpXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwNi17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMwNzpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMgKnJlZ2lvbnMgPSBrbWFsbG9jX29iaigqcmVnaW9ucyk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwOC1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz05MjU9c3RhdGljIGludCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyc19hZGRfZGlycyhcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy05MzQtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjkzNTpcXHRmaWx0ZXJzX2FyciA9IGttYWxsb2Nfb2JqcygqZmlsdGVyc19hcnIsIG5yX2ZpbHRlcnMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTkzNi1cXHRcXHRcXHRcXHQgICBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMDI5PXN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfd2F0ZXJtYXJrcyAqZGFtb25fc3lzZnNfd2F0ZXJtYXJrc19hbGxvYyhcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMDMyLXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTAzMzpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfd2F0ZXJtYXJrcyAqd2F0ZXJtYXJrcyA9IGttYWxsb2Nfb2JqKCp3YXRlcm1hcmtzKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTAzNC1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNDc2PXN0YXRpYyBpbnQgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHNfYWRkX2RpcnMoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQ4NS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQ4NjpcXHRnb2Fsc19hcnIgPSBrbWFsbG9jX29ianMoKmdvYWxzX2FyciwgbnJfZ29hbHMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0ODctXFx0XFx0XFx0XFx0IEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTE1Nzc9c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc193ZWlnaHRzICpkYW1vbl9zeXNmc193ZWlnaHRzX2FsbG9jKHVuc2lnbmVkIGludCBzeixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNTc5LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTU4MDpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfd2VpZ2h0cyAqd2VpZ2h0cyA9IGttYWxsb2Nfb2JqKCp3ZWlnaHRzKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTU4MS1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xOTYzPXN0cnVjdCBkYW1vbl9zeXNmc19hY2Nlc3NfcGF0dGVybiAqZGFtb25fc3lzZnNfYWNjZXNzX3BhdHRlcm5fYWxsb2Modm9pZClcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTk2NC17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE5NjU6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX2FjY2Vzc19wYXR0ZXJuICphY2Nlc3NfcGF0dGVybiA9IGttYWxsb2Nfb2JqKCphY2Nlc3NfcGF0dGVybik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE5NjYtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjE1Nj1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX2Rlc3RzX2FkZF9kaXJzKFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIxNjUtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIxNjY6XFx0ZGVzdHNfYXJyID0ga21hbGxvY19vYmpzKCpkZXN0c19hcnIsIG5yX2Rlc3RzLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMTY3LVxcdFxcdFxcdFxcdCBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yMzE4PXN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lICpkYW1vbl9zeXNmc19zY2hlbWVfYWxsb2MoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjMyMC17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIzMjE6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZSAqc2NoZW1lID0ga21hbGxvY19vYmooKnNjaGVtZSk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIzMjItXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjcwMD1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NjaGVtZXNfYWRkX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnNjaGVtZXMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjcwOS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjcxMDpcXHRzY2hlbWVzX2FyciA9IGttYWxsb2Nfb2Jqcygqc2NoZW1lc19hcnIsIG5yX3NjaGVtZXMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI3MTEtXFx0XFx0XFx0XFx0ICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTik7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjk0OT1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX2FkZF9taWdyYXRlX2Rlc3Qoc3RydWN0IGRhbW9zICpzY2hlbWUsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjk1NC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjk1NTpcXHRkZXN0cy1cXHUwMDNlbm9kZV9pZF9hcnIgPSBrbWFsbG9jX29ianMoKmRlc3RzLVxcdTAwM2Vub2RlX2lkX2Fyciwgc3lzZnNfZGVzdHMtXFx1MDAzZW5yKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjk1Ni1cXHRpZiAoIWRlc3RzLVxcdTAwM2Vub2RlX2lkX2FycilcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjk1Ny1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjk1ODpcXHRkZXN0cy1cXHUwMDNld2VpZ2h0X2FyciA9IGttYWxsb2Nfb2JqcygqZGVzdHMtXFx1MDAzZXdlaWdodF9hcnIsIHN5c2ZzX2Rlc3RzLVxcdTAwM2Vucik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI5NTktXFx0aWYgKCFkZXN0cy1cXHUwMDNld2VpZ2h0X2FycilcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTE3PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfcmVnaW9uc19hZGRfZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfcmVnaW9ucyAqcmVnaW9ucyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMTI2LVxcbm1tL2RhbW9uL3N5c2ZzLmM6MTI3OlxcdHJlZ2lvbnNfYXJyID0ga21hbGxvY19vYmpzKCpyZWdpb25zX2FyciwgbnJfcmVnaW9ucyxcXG5tbS9kYW1vbi9zeXNmcy5jLTEyOC1cXHRcXHRcXHRcXHQgICBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MzQ0PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdGFyZ2V0c19hZGRfZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfdGFyZ2V0cyAqdGFyZ2V0cyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMzUzLVxcbm1tL2RhbW9uL3N5c2ZzLmM6MzU0OlxcdHRhcmdldHNfYXJyID0ga21hbGxvY19vYmpzKCp0YXJnZXRzX2FyciwgbnJfdGFyZ2V0cyxcXG5tbS9kYW1vbi9zeXNmcy5jLTM1NS1cXHRcXHRcXHRcXHQgICBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9NDU0PXN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfaW50ZXJ2YWxzX2dvYWwgKmRhbW9uX3N5c2ZzX2ludGVydmFsc19nb2FsX2FsbG9jKFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy00NTcte1xcbm1tL2RhbW9uL3N5c2ZzLmM6NDU4OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19pbnRlcnZhbHNfZ29hbCAqZ29hbCA9IGttYWxsb2Nfb2JqKCpnb2FsKTtcXG5tbS9kYW1vbi9zeXNmcy5jLTQ1OS1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9NjExPXN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfaW50ZXJ2YWxzICpkYW1vbl9zeXNmc19pbnRlcnZhbHNfYWxsb2MoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTYxNC17XFxubW0vZGFtb24vc3lzZnMuYzo2MTU6XFx0c3RydWN0IGRhbW9uX3N5c2ZzX2ludGVydmFscyAqaW50ZXJ2YWxzID0ga21hbGxvY19vYmooKmludGVydmFscyk7XFxubW0vZGFtb24vc3lzZnMuYy02MTYtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTg4Nz1zdGF0aWMgc3NpemVfdCBwYXRoX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy04OTEtXFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX2ZpbHRlciwga29iaik7XFxubW0vZGFtb24vc3lzZnMuYzo4OTI6XFx0Y2hhciAqcGF0aCA9IGttYWxsb2Nfb2JqcygqcGF0aCwgc2l6ZV9hZGQoY291bnQsIDEpKTtcXG5tbS9kYW1vbi9zeXNmcy5jLTg5My1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9OTcyPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfZmlsdGVyc19hZGRfZGlycyhcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtOTgxLVxcbm1tL2RhbW9uL3N5c2ZzLmM6OTgyOlxcdGZpbHRlcnNfYXJyID0ga21hbGxvY19vYmpzKCpmaWx0ZXJzX2FyciwgbnJfZmlsdGVycyxcXG5tbS9kYW1vbi9zeXNmcy5jLTk4My1cXHRcXHRcXHRcXHQgICBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTE3ND1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3Byb2Jlc19hZGRfZGlycyhcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMTE4My1cXG5tbS9kYW1vbi9zeXNmcy5jOjExODQ6XFx0cHJvYmVzX2FyciA9IGttYWxsb2Nfb2JqcygqcHJvYmVzX2FyciwgbnJfcHJvYmVzLFxcbm1tL2RhbW9uL3N5c2ZzLmMtMTE4NS1cXHRcXHRcXHRcXHQgICBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTI4Mz1zdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX2F0dHJzICpkYW1vbl9zeXNmc19hdHRyc19hbGxvYyh2b2lkKVxcbm1tL2RhbW9uL3N5c2ZzLmMtMTI4NC17XFxubW0vZGFtb24vc3lzZnMuYzoxMjg1OlxcdHN0cnVjdCBkYW1vbl9zeXNmc19hdHRycyAqYXR0cnMgPSBrbWFsbG9jX29iaigqYXR0cnMpO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMTI4Ni1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTQxMj1zdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHQgKmRhbW9uX3N5c2ZzX2NvbnRleHRfYWxsb2MoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTE0MTQte1xcbm1tL2RhbW9uL3N5c2ZzLmM6MTQxNTpcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfY29udGV4dCAqY29udGV4dCA9IGttYWxsb2Nfb2JqKCpjb250ZXh0KTtcXG5tbS9kYW1vbi9zeXNmcy5jLTE0MTYtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTE2ODQ9c3RhdGljIGludCBkYW1vbl9zeXNmc19jb250ZXh0c19hZGRfZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfY29udGV4dHMgKmNvbnRleHRzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0xNjkzLVxcbm1tL2RhbW9uL3N5c2ZzLmM6MTY5NDpcXHRjb250ZXh0c19hcnIgPSBrbWFsbG9jX29ianMoKmNvbnRleHRzX2FyciwgbnJfY29udGV4dHMsXFxubW0vZGFtb24vc3lzZnMuYy0xNjk1LVxcdFxcdFxcdFxcdCAgICBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjAwMT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIwMDQte1xcbm1tL2RhbW9uL3N5c2ZzLmM6MjAwNTpcXHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzID0ga21hbGxvY19vYmpzKCpyYW5nZXMsXFxubW0vZGFtb24vc3lzZnMuYy0yMDA2LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBzeXNmc19yZWdpb25zLVxcdTAwM2VucixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjI0Mj1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIyNTctXFxubW0vZGFtb24vc3lzZnMuYzoyMjU4OlxcdHJlcGVhdF9jYWxsX2NvbnRyb2wgPSBrbWFsbG9jX29iaigqcmVwZWF0X2NhbGxfY29udHJvbCk7XFxubW0vZGFtb24vc3lzZnMuYy0yMjU5LVxcdGlmICghcmVwZWF0X2NhbGxfY29udHJvbClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjU0Nz1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2tkYW1vbmRzX2FkZF9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kcyAqa2RhbW9uZHMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTI1NTktXFxubW0vZGFtb24vc3lzZnMuYzoyNTYwOlxcdGtkYW1vbmRzX2FyciA9IGttYWxsb2Nfb2Jqcygqa2RhbW9uZHNfYXJyLCBucl9rZGFtb25kcyxcXG5tbS9kYW1vbi9zeXNmcy5jLTI1NjEtXFx0XFx0XFx0XFx0ICAgIEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pO1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTk2ND1zdGF0aWMgaW50IGRhbW9zX3Rlc3RfaGVscF9kZXN0c19zZXR1cChzdHJ1Y3QgZGFtb3NfbWlncmF0ZV9kZXN0cyAqZGVzdHMsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTY5LVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo5NzA6XFx0ZGVzdHMtXFx1MDAzZW5vZGVfaWRfYXJyID0ga21hbGxvY19vYmpzKCpkZXN0cy1cXHUwMDNlbm9kZV9pZF9hcnIsIG5yX2Rlc3RzKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTcxLVxcdGlmICghZGVzdHMtXFx1MDAzZW5vZGVfaWRfYXJyKVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC05NzItXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjk3MzpcXHRkZXN0cy1cXHUwMDNld2VpZ2h0X2FyciA9IGttYWxsb2Nfb2JqcygqZGVzdHMtXFx1MDAzZXdlaWdodF9hcnIsIG5yX2Rlc3RzKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtOTc0LVxcdGlmICghZGVzdHMtXFx1MDAzZXdlaWdodF9hcnIpIHtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL3N5c2ZzLWt1bml0Lmg9Mzk9c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfdGVzdF9hZGRfdGFyZ2V0cyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9zeXNmcy1rdW5pdC5oLTQ4LVxcdHN5c2ZzX3RhcmdldHMtXFx1MDAzZW5yID0gMTtcXG5tbS9kYW1vbi90ZXN0cy9zeXNmcy1rdW5pdC5oOjQ5OlxcdHN5c2ZzX3RhcmdldHMtXFx1MDAzZXRhcmdldHNfYXJyID0ga21hbGxvY19vYmpzKCpzeXNmc190YXJnZXRzLVxcdTAwM2V0YXJnZXRzX2FycixcXG5tbS9kYW1vbi90ZXN0cy9zeXNmcy1rdW5pdC5oLTUwLVxcdFxcdFxcdFxcdFxcdFxcdCAgMSk7XFxuLS1cXG5tbS9kYW1vbi92YWRkci5jPTczOD1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc192YV9taWdyYXRlKHN0cnVjdCBkYW1vbl90YXJnZXQgKnRhcmdldCxcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtNzU3LVxcdHByaXYuc2NoZW1lID0gcztcXG5tbS9kYW1vbi92YWRkci5jOjc1ODpcXHRwcml2Lm1pZ3JhdGlvbl9saXN0cyA9IGttYWxsb2Nfb2JqcygqcHJpdi5taWdyYXRpb25fbGlzdHMsIG5yX2Rlc3RzKTtcXG5tbS9kYW1vbi92YWRkci5jLTc1OS1cXHRpZiAoIXByaXYubWlncmF0aW9uX2xpc3RzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0MzozNy45MTg1MTg5NjRaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0NjYyODYzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIE1lbW9yeSBBbGxvY2F0aW9uIE1hY3JvcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgSSBzZWUgYGttYWxsb2Nfb2JqYC4gSXQncyBhbG1vc3QgY2VydGFpbmx5IGEgbWFjcm8g4oCTIHByb2JhYmx5IGRlZmluZWQgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIG1heWJlIGV2ZW4gaW4gdGhlIGBtbS9kYW1vbi9gIGRpcmVjdG9yeS4gQnV0IHdhaXQsIEknbSBqdXN0IHJlY2FsbGluZyB0aGF0IEkndmUgc2VlbiBga3phbGxvY19vYmpgIGJlaW5nIHVzZWQgZm9yIHRoZSBgZGFtb25fc3lzZnNfa2RhbW9uZF9hbGxvY2AgZnVuY3Rpb24uIFRoYXQgdGhyb3dzIGEgc2xpZ2h0IHdyaW5rbGUgaW4gdGhlIGFuYWx5c2lzLiBJIHNob3VsZCBkb3VibGUgY2hlY2sgd2hhdCdzIGdvaW5nIG9uIHdpdGggYGt6YWxsb2Nfb2JqYCwgYW5kIHNlZSBob3cgdGhlIHR3byBhcmUgcmVsYXRlZCwgb3IgaWYgdGhleSBhcmUgcmVsYXRlZCBhdCBhbGwuIFRoYXQnbGwgY2xlYXIgdGhpbmdzIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjI1NiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQzOjQxLjE2NTE0OTkzN1oiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ4MjY0MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3phbGxvY19vYmpcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz04MzI9c3RydWN0IGRhbW9uX2N0eCAqZGFtb25fbmV3X2N0eCh2b2lkKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTgzNS1cXG5tbS9kYW1vbi9jb3JlLmM6ODM2OlxcdGN0eCA9IGt6YWxsb2Nfb2JqKCpjdHgpO1xcbm1tL2RhbW9uL2NvcmUuYy04MzctXFx0aWYgKCFjdHgpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MjA9c3RhdGljIHN0cnVjdCBkYW1vc19zeXNmc19wcm9iZSAqZGFtb3Nfc3lzZnNfcHJvYmVfYWxsb2ModW5zaWduZWQgY2hhciBoaXRzKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIzLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNDpcXHRwcm9iZSA9IGt6YWxsb2Nfb2JqKCpwcm9iZSk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI1LVxcdGlmICghcHJvYmUpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NzM9c3RhdGljIHN0cnVjdCBkYW1vc19zeXNmc19wcm9iZXMgKmRhbW9zX3N5c2ZzX3Byb2Jlc19hbGxvYyh2b2lkKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy03NC17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjc1OlxcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmVzKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtNzYtfVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTM3OD1zdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3N0YXRzICpkYW1vbl9zeXNmc19zdGF0c19hbGxvYyh2b2lkKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zNzkte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozODA6XFx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTM4MS19XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9NTQxPXN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlciAqZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcl9hbGxvYyhcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy01NDUtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjU0NjpcXHRmaWx0ZXIgPSBremFsbG9jX29iaihzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX2ZpbHRlcik7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTU0Ny1cXHRpZiAoZmlsdGVyKVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTkwMD1kYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVyc19hbGxvYyhlbnVtIGRhbW9zX3N5c2ZzX2ZpbHRlcl9oYW5kbGVfbGF5ZXIgbGF5ZXIpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtOTAzLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzo5MDQ6XFx0ZmlsdGVycyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfZmlsdGVycyk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTkwNS1cXHRpZiAoZmlsdGVycylcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMjI0PXN0YXRpYyBzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCAqZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9hbGxvYyh2b2lkKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjI1LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTIyNjpcXHRyZXR1cm4ga3phbGxvY19vYmooc3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjI3LX1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNDU2PXN0YXRpYyBzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHMgKmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxzX2FsbG9jKHZvaWQpXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0NTcte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDU4OlxcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbHMpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDU5LX1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNjkzPXN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfcXVvdGFzICpkYW1vbl9zeXNmc19xdW90YXNfYWxsb2Modm9pZClcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTY5NC17XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE2OTU6XFx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19xdW90YXMpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNjk2LX1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yMDU2PXN0YXRpYyBzdHJ1Y3QgZGFtb3Nfc3lzZnNfZGVzdCAqZGFtb3Nfc3lzZnNfZGVzdF9hbGxvYyh2b2lkKVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMDU3LXtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjA1ODpcXHRyZXR1cm4ga3phbGxvY19vYmooc3RydWN0IGRhbW9zX3N5c2ZzX2Rlc3QpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMDU5LX1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yMTM2PWRhbW9zX3N5c2ZzX2Rlc3RzX2FsbG9jKHZvaWQpXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIxMzcte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyMTM4OlxcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb3Nfc3lzZnNfZGVzdHMpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMTM5LX1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yNjgwPXN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpkYW1vbl9zeXNmc19zY2hlbWVzX2FsbG9jKHZvaWQpXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI2ODEte1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoyNjgyOlxcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI2ODMtfVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMT1zdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3JlZ2lvbiAqZGFtb25fc3lzZnNfcmVnaW9uX2FsbG9jKHZvaWQpXFxubW0vZGFtb24vc3lzZnMuYy0yMi17XFxubW0vZGFtb24vc3lzZnMuYzoyMzpcXHRyZXR1cm4ga3phbGxvY19vYmooc3RydWN0IGRhbW9uX3N5c2ZzX3JlZ2lvbik7XFxubW0vZGFtb24vc3lzZnMuYy0yNC19XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTk4PXN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfcmVnaW9ucyAqZGFtb25fc3lzZnNfcmVnaW9uc19hbGxvYyh2b2lkKVxcbm1tL2RhbW9uL3N5c2ZzLmMtOTkte1xcbm1tL2RhbW9uL3N5c2ZzLmM6MTAwOlxcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb25fc3lzZnNfcmVnaW9ucyk7XFxubW0vZGFtb24vc3lzZnMuYy0xMDEtfVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMTg9c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc190YXJnZXQgKmRhbW9uX3N5c2ZzX3RhcmdldF9hbGxvYyh2b2lkKVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjE5LXtcXG5tbS9kYW1vbi9zeXNmcy5jOjIyMDpcXHRyZXR1cm4ga3phbGxvY19vYmooc3RydWN0IGRhbW9uX3N5c2ZzX3RhcmdldCk7XFxubW0vZGFtb24vc3lzZnMuYy0yMjEtfVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0zMjQ9c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc190YXJnZXRzICpkYW1vbl9zeXNmc190YXJnZXRzX2FsbG9jKHZvaWQpXFxubW0vZGFtb24vc3lzZnMuYy0zMjUte1xcbm1tL2RhbW9uL3N5c2ZzLmM6MzI2OlxcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb25fc3lzZnNfdGFyZ2V0cyk7XFxubW0vZGFtb24vc3lzZnMuYy0zMjctfVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz03NjU9c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19maWx0ZXIgKmRhbW9uX3N5c2ZzX2ZpbHRlcl9hbGxvYyh2b2lkKVxcbm1tL2RhbW9uL3N5c2ZzLmMtNzY2LXtcXG5tbS9kYW1vbi9zeXNmcy5jOjc2NzpcXHRyZXR1cm4ga3phbGxvY19vYmooc3RydWN0IGRhbW9uX3N5c2ZzX2ZpbHRlcik7XFxubW0vZGFtb24vc3lzZnMuYy03NjgtfVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz05NTM9c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19maWx0ZXJzICpkYW1vbl9zeXNmc19maWx0ZXJzX2FsbG9jKHZvaWQpXFxubW0vZGFtb24vc3lzZnMuYy05NTQte1xcbm1tL2RhbW9uL3N5c2ZzLmM6OTU1OlxcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVycyk7XFxubW0vZGFtb24vc3lzZnMuYy05NTYtfVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0xMDcyPXN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUgKmRhbW9uX3N5c2ZzX3Byb2JlX2FsbG9jKHZvaWQpXFxubW0vZGFtb24vc3lzZnMuYy0xMDczLXtcXG5tbS9kYW1vbi9zeXNmcy5jOjEwNzQ6XFx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19wcm9iZSk7XFxubW0vZGFtb24vc3lzZnMuYy0xMDc1LX1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTE1Mz1zdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlcyAqZGFtb25fc3lzZnNfcHJvYmVzX2FsbG9jKHZvaWQpXFxubW0vZGFtb24vc3lzZnMuYy0xMTU0LXtcXG5tbS9kYW1vbi9zeXNmcy5jOjExNTU6XFx0cmV0dXJuIGt6YWxsb2Nfb2JqKHN0cnVjdCBkYW1vbl9zeXNmc19wcm9iZXMpO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMTE1Ni19XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTE2NjQ9c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0cyAqZGFtb25fc3lzZnNfY29udGV4dHNfYWxsb2Modm9pZClcXG5tbS9kYW1vbi9zeXNmcy5jLTE2NjUte1xcbm1tL2RhbW9uL3N5c2ZzLmM6MTY2NjpcXHRyZXR1cm4ga3phbGxvY19vYmooc3RydWN0IGRhbW9uX3N5c2ZzX2NvbnRleHRzKTtcXG5tbS9kYW1vbi9zeXNmcy5jLTE2NjctfVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0xNzk1PXN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqZGFtb25fc3lzZnNfa2RhbW9uZF9hbGxvYyh2b2lkKVxcbm1tL2RhbW9uL3N5c2ZzLmMtMTc5Ni17XFxubW0vZGFtb24vc3lzZnMuYzoxNzk3OlxcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCk7XFxubW0vZGFtb24vc3lzZnMuYy0xNzk4LX1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjUxND1zdGF0aWMgc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmRzICpkYW1vbl9zeXNmc19rZGFtb25kc19hbGxvYyh2b2lkKVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjUxNS17XFxubW0vZGFtb24vc3lzZnMuYzoyNTE2OlxcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZHMpO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjUxNy19XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTI2NTg9c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc191aV9kaXIgKmRhbW9uX3N5c2ZzX3VpX2Rpcl9hbGxvYyh2b2lkKVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjY1OS17XFxubW0vZGFtb24vc3lzZnMuYzoyNjYwOlxcdHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZGFtb25fc3lzZnNfdWlfZGlyKTtcXG5tbS9kYW1vbi9zeXNmcy5jLTI2NjEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0Mzo0MS4yMDk5ODExNzdaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc4Mjk2ODIyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIGBrbWFsbG9jX29iamAncyBCZWhhdmlvciB3aXRoIGBkYW1vc19uZXdfcXVvdGFfZ29hbGAqKlxuXG5BbHJpZ2h0LCBoYW5nIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGlzIGNvbm5lY3Rpb24gYmV0d2VlbiBga21hbGxvY19vYmpgIGFuZCBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgLiBTcGVjaWZpY2FsbHksIGRvZXMgYGttYWxsb2Nfb2JqYCBwZXJmb3JtIG1lbW9yeSB6ZXJvaW5nPyBUaGF0J3MgYSBjcml0aWNhbCBkZXRhaWwsIGFuZCBJIGRvbid0IHdhbnQgdG8gbWFrZSBhc3N1bXB0aW9ucy4gSSBrbm93IHRoZSBwb3RlbnRpYWwgcGl0ZmFsbHMgaGVyZSwgc28gSSBuZWVkIHRvIHZlcmlmeS4gVGltZSB0byBkaXZlIGludG8gdGhlIGRlZmluaXRpb24gb2YgYGttYWxsb2Nfb2JqYCBhbmQgZ2V0IHRoZSBkZWZpbml0aXZlIGFuc3dlci4gSSBjYW4ndCBwcm9jZWVkIHdpdGhvdXQgY2xhcmlmeWluZyB0aGF0IGFzcGVjdC4gTGV0J3Mgc2VlIHdoYXQgdGhlIGRvY3VtZW50YXRpb24gYW5kIHRoZSBjb2RlIGl0c2VsZiB0ZWxsIHVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTEwNSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQzOjQ0Ljk5Mjk1MTkyOFoiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzNjA4NzExNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIGttYWxsb2Nfb2JqXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NsYWIuaD0xMDcwPXZvaWQgKmttYWxsb2Nfbm9sb2NrKHNpemVfdCBzaXplLCBnZnBfdCBnZnBfZmxhZ3MsIGludCBub2RlKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExMjAtICovXFxuaW5jbHVkZS9saW51eC9zbGFiLmg6MTEyMTojZGVmaW5lIGttYWxsb2Nfb2JqKFZBUl9PUl9UWVBFLCAuLi4pIFxcXFxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTIyLVxcdF9fYWxsb2Nfb2JqcyhrbWFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihWQVJfT1JfVFlQRSksIDEpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTMyLSAqL1xcbmluY2x1ZGUvbGludXgvc2xhYi5oOjExMzM6I2RlZmluZSBrbWFsbG9jX29ianMoVkFSX09SX1RZUEUsIENPVU5ULCAuLi4pIFxcXFxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTM0LVxcdF9fYWxsb2Nfb2JqcyhrbWFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihWQVJfT1JfVFlQRSksIENPVU5UKVxcbi0tXFxubGliL2RlY29tcHJlc3NfdW54ei5jLTE2My0jdW5kZWYgdmZyZWVcXG5saWIvZGVjb21wcmVzc191bnh6LmM6MTY0OiNkZWZpbmUga21hbGxvY19vYmoodHlwZSkgbWFsbG9jKHNpemVvZih0eXBlKSlcXG5saWIvZGVjb21wcmVzc191bnh6LmMtMTY1LSNkZWZpbmUga2ZyZWUocHRyKSBmcmVlKHB0cilcXG4tLVxcbnRvb2xzL3ZpcnRpby9saW51eC9rZXJuZWwuaD02Mz1zdGF0aWMgaW5saW5lIHZvaWQgKmttYWxsb2NfYXJyYXkodW5zaWduZWQgbiwgc2l6ZV90IHMsIGdmcF90IGdmcClcXG4tLVxcbnRvb2xzL3ZpcnRpby9saW51eC9rZXJuZWwuaC02Ny1cXG50b29scy92aXJ0aW8vbGludXgva2VybmVsLmg6Njg6I2RlZmluZSBrbWFsbG9jX29iaihWQVJfT1JfVFlQRSwgLi4uKSBcXFxcXFxudG9vbHMvdmlydGlvL2xpbnV4L2tlcm5lbC5oLTY5LVxcdCgodHlwZW9mKFZBUl9PUl9UWVBFKSAqKWttYWxsb2Moc2l6ZW9mKHR5cGVvZihWQVJfT1JfVFlQRSkpLCAwKSlcXG50b29scy92aXJ0aW8vbGludXgva2VybmVsLmgtNzAtXFxudG9vbHMvdmlydGlvL2xpbnV4L2tlcm5lbC5oOjcxOiNkZWZpbmUga21hbGxvY19vYmpzKFZBUl9PUl9UWVBFLCBDT1VOVCwgLi4uKSBcXFxcXFxudG9vbHMvdmlydGlvL2xpbnV4L2tlcm5lbC5oLTcyLVxcdCgodHlwZW9mKFZBUl9PUl9UWVBFKSAqKWttYWxsb2Moc2l6ZW9mKHR5cGVvZihWQVJfT1JfVFlQRSkpICogKENPVU5UKSwgMCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQzOjQ2LjYyOTA0NjA5NFoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzE2MzI0NDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBBY2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBga21hbGxvY19vYmpgLCBhbmQgdGhhdCdzIGp1c3QgYSB3cmFwcGVyIGFyb3VuZCBga21hbGxvY2AuIFRoZSBjcml0aWNhbCB0aGluZyB0byByZW1lbWJlciBpcyB0aGF0IGBrbWFsbG9jYCAqZG9lc24ndCogemVybyBvdXQgdGhlIGFsbG9jYXRlZCBtZW1vcnkuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGZvciB0aGlzIHN0cnVjdC5cblxuVGhlIGNvZGUgc2hvd3MgYGRhbW9zX25ld19xdW90YV9nb2FsYCBhbGxvY2F0aW5nIG1lbW9yeSB1c2luZyBga21hbGxvY19vYmpgLCBhbmQgdGhlbiBzZXR0aW5nIGEgZmV3IGZpZWxkczogYG1ldHJpY2AsIGB0YXJnZXRfdmFsdWVgLCBhbmQgdGhlIGBsaXN0YCBoZWFkIHVzaW5nIGBJTklUX0xJU1RfSEVBRGAuIEJ1dCwgaGFuZyBvbi4uLiB3aGF0IGFib3V0IGBnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsYD8gVGhhdCdzICpub3QqIGluaXRpYWxpemVkIHRoZXJlLiBUaGF0J3MgYSByZWQgZmxhZyEgQW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSBjb3VsZCBsZWFkIHRvIGFsbCBzb3J0cyBvZiBpc3N1ZXMuIElmIHRoZSBjb2RlIHRoZW4gdHJpZXMgdG8gcmVhZCB0aGF0IHZhbHVlIGxhdGVyIHdpdGhvdXQgZmlyc3QgaW5pdGlhbGl6aW5nIGl0LCB3ZSd2ZSBnb3QgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBvciBhdCB0aGUgdmVyeSBsZWFzdCwgdW5wcmVkaWN0YWJsZSBiZWhhdmlvci5cblxuSSBzZWUgdGhhdCB0aGUgcGF0Y2ggaW5jbHVkZXMgYSBuZXcgZnVuY3Rpb24sIGBkYW1vc19pbml0X3F1b3RhX2dvYWxfbGFzdF9wc2lgLiBBbmQgKnRoYXQqIGZ1bmN0aW9uIGluaXRpYWxpemVzIGBsYXN0X3BzaV90b3RhbGAuLi4gYnV0IG9ubHkgZm9yIGEgc3BlY2lmaWMgYG1ldHJpY2AsIGBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVNgLiBUaGF0J3MgYSBsaXR0bGUgYmV0dGVyLCBidXQgaXQncyBzdGlsbCBub3QgYSBjb21wbGV0ZSBzb2x1dGlvbi4gSXQgbGVhdmVzIHRoZSBvdGhlcnMgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZC5cblxuTm93LCBJIHJlYWxseSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBoZXJlLiBJcyBgZ29hbC1cdTAwM2VsYXN0X3BzaV90b3RhbGAgZXZlciBleHBvc2VkIHRvIHVzZXJzcGFjZT8gVGhhdCdzIHRoZSBrZXkgcXVlc3Rpb24uIElmIGl0ICppcyosIHRoZW4gd2UgaGF2ZSBhIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrLiBJZiBpdCdzIHVzZWQgaW50ZXJuYWxseSwgdW5pbml0aWFsaXplZCwgdGhhdCBjb3VsZCBiZSBhIGJ1ZyBvciBjYXVzZSBzZWN1cml0eSBpc3N1ZXMuIEkgbmVlZCB0byB0cmFjZSB3aGVyZSB0aGlzIGBsYXN0X3BzaV90b3RhbGAgZmllbGQgaXMgdXNlZC4gSSdsbCBzZWFyY2ggdGhyb3VnaCB0aGUgY29kZWJhc2UgZm9yIHJlZmVyZW5jZXMgdG8gaXQgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IHJlYWRzIG9mIHRoYXQgZmllbGQgYmVmb3JlIGl0J3MgaW5pdGlhbGl6ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODYzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQzOjU0LjM0NTM3MzU2N1oiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM4NTA3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGFzdF9wc2lfdG90YWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0xMTIxPXN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTExMjUtXFx0Y2FzZSBEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVM6XFxubW0vZGFtb24vY29yZS5jOjExMjY6XFx0XFx0ZHN0LVxcdTAwM2VsYXN0X3BzaV90b3RhbCA9IGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTEyNy1cXHRcXHRicmVhaztcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMDEyPXN0YXRpYyB2b2lkIGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMDIyLVxcdFxcdG5vd19wc2lfdG90YWwgPSBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKCk7XFxubW0vZGFtb24vY29yZS5jOjMwMjM6XFx0XFx0Z29hbC1cXHUwMDNlY3VycmVudF92YWx1ZSA9IG5vd19wc2lfdG90YWwgLSBnb2FsLVxcdTAwM2VsYXN0X3BzaV90b3RhbDtcXG5tbS9kYW1vbi9jb3JlLmM6MzAyNDpcXHRcXHRnb2FsLVxcdTAwM2VsYXN0X3BzaV90b3RhbCA9IG5vd19wc2lfdG90YWw7XFxubW0vZGFtb24vY29yZS5jLTMwMjUtXFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzczMj1zdGF0aWMgdm9pZCBkYW1vc19pbml0X3F1b3RhX2dvYWxfbGFzdF9wc2koc3RydWN0IGRhbW9zICpzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM3MzgtXFx0XFx0XFx0Y29udGludWU7XFxubW0vZGFtb24vY29yZS5jOjM3Mzk6XFx0XFx0Z29hbC1cXHUwMDNlbGFzdF9wc2lfdG90YWwgPSBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKCk7XFxubW0vZGFtb24vY29yZS5jLTM3NDAtXFx0fVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTc1MD1zdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNzUzLXtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NzU0OlxcdHU2NCBkc3RfbGFzdF9wc2lfdG90YWwgPSAwO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC03NTUtXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTc1Ni1cXHRpZiAoZHN0LVxcdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTKVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo3NTc6XFx0XFx0ZHN0X2xhc3RfcHNpX3RvdGFsID0gZHN0LVxcdTAwM2VsYXN0X3BzaV90b3RhbDtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNzU4LVxcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKGRzdCwgc3JjKTtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC03NjMtXFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cXHUwMDNlY3VycmVudF92YWx1ZSwgc3JjLVxcdTAwM2VjdXJyZW50X3ZhbHVlKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NzY0OlxcdGlmIChkc3RfbGFzdF9wc2lfdG90YWwgXFx1MDAyNlxcdTAwMjYgc3JjLVxcdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTKVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo3NjU6XFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC1cXHUwMDNlbGFzdF9wc2lfdG90YWwsIGRzdF9sYXN0X3BzaV90b3RhbCk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTc2Ni1cXHRzd2l0Y2ggKGRzdC1cXHUwMDNlbWV0cmljKSB7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9NzgxPXN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWwoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTc4Ni1cXHRcXHQuY3VycmVudF92YWx1ZSA9IDEyMyxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6Nzg3OlxcdFxcdC5sYXN0X3BzaV90b3RhbCA9IDQ1NixcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNzg4LVxcdH07XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODI5LVxcdFxcdFxcdC5jdXJyZW50X3ZhbHVlID0gMzQ1LFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4MzA6XFx0XFx0XFx0Lmxhc3RfcHNpX3RvdGFsID0gNTY3LFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MzEtXFx0XFx0XFx0fSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQzOjU0LjM4OTIyODAyN1oiLCJTZXEiOjUzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjE4OTE2MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgaW4gREFNT1MgUXVvdGEgQ2FsY3VsYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlYCBmdW5jdGlvbiwgYW5kIGl0IHNlZW1zIGxpa2UgdGhlIGBsYXN0X3BzaV90b3RhbGAgdmFyaWFibGUgaXMgY3JpdGljYWwuIFNwZWNpZmljYWxseSwgaW5zaWRlIHRoZSBgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTYCBjYXNlLCB0aGUgY29kZSBjYWxjdWxhdGVzIGBnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWVgIGJ5IHN1YnRyYWN0aW5nIGBnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsYCBmcm9tIHRoZSBjdXJyZW50IFBTSSB0b3RhbC4gVGhlIGNvbmNlcm4sIGFuZCBpdCdzIGEgdmFsaWQgb25lLCBpcyB3aGF0IGhhcHBlbnMgaWYgYGxhc3RfcHNpX3RvdGFsYCBoYXNuJ3QgYmVlbiBpbml0aWFsaXplZCBiZWZvcmUgdGhpcyBwb2ludC4gV2UgY291bGQgZW5kIHVwIGNhbGN1bGF0aW5nIGBjdXJyZW50X3ZhbHVlYCB1c2luZyB3aGF0ZXZlciBnYXJiYWdlIGhhcHBlbnMgdG8gYmUgaW4gdGhhdCBtZW1vcnkgbG9jYXRpb24sIHdoaWNoIGlzIGEgY2xhc3NpYyBidWcgc2NlbmFyaW8uXG5cblRoaXMgaXMgYSByZWQgZmxhZywgYW5kIGl0J3MgbWFraW5nIG1lIHdvbmRlcjogaXMgYGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZWAgZXhwb3NlZCB0byB1c2VyIHNwYWNlIGluIGFueSB3YXk/IElmIHNvLCB0aGlzIGNvdWxkIGJlIGEgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSwgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIGxlYWQgdG8gdW5yZWxpYWJsZSBkYXRhIGZvciBvdXIgZW5kIHVzZXJzLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBkaXZlIGludG8gdGhlIGNvZGViYXNlIGFuZCB0cmFjZSB0aGUgdXNlcyBvZiBgY3VycmVudF92YWx1ZWAgdG8gdW5kZXJzdGFuZCB3aGVyZSBhbmQgaG93IGl0J3MgYmVpbmcgdXNlZC4gVW5kZXJzdGFuZGluZyB3aGVyZSBpdCdzIHVzZWQgaXMgY3JpdGljYWwgdG8gZXZhbHVhdGluZyB0aGUgaW1wYWN0IG9mIHRoaXMgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzYzNSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0Mzo1OS4wMDgxNDcwMjdaIiwiU2VxIjo1NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTg3NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImN1cnJlbnRfdmFsdWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0xMTQyPXN0YXRpYyB2b2lkIGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsKFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTExNDctXFx0aWYgKGRzdC1cXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX1VTRVJfSU5QVVQpXFxubW0vZGFtb24vY29yZS5jOjExNDg6XFx0XFx0ZHN0LVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gc3JjLVxcdTAwM2VjdXJyZW50X3ZhbHVlO1xcbm1tL2RhbW9uL2NvcmUuYy0xMTQ5LVxcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FsX3VuaW9uKGRzdCwgc3JjKTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yOTk3PXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb3NfZ2V0X2luX2FjdGl2ZV9tZW1fYnAoYm9vbCBhY3RpdmVfcmF0aW8pXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzAxMS1cXG5tbS9kYW1vbi9jb3JlLmM6MzAxMjpzdGF0aWMgdm9pZCBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxubW0vZGFtb24vY29yZS5jLTMwMTMtXFx0XFx0c3RydWN0IGRhbW9zICpzLCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMDE4LVxcdGNhc2UgREFNT1NfUVVPVEFfVVNFUl9JTlBVVDpcXG5tbS9kYW1vbi9jb3JlLmM6MzAxOTpcXHRcXHQvKiBVc2VyIHNob3VsZCBhbHJlYWR5IHNldCBnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlICovXFxubW0vZGFtb24vY29yZS5jLTMwMjAtXFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzAyMi1cXHRcXHRub3dfcHNpX3RvdGFsID0gZGFtb3NfZ2V0X3NvbWVfbWVtX3BzaV90b3RhbCgpO1xcbm1tL2RhbW9uL2NvcmUuYzozMDIzOlxcdFxcdGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBub3dfcHNpX3RvdGFsIC0gZ29hbC1cXHUwMDNlbGFzdF9wc2lfdG90YWw7XFxubW0vZGFtb24vY29yZS5jLTMwMjQtXFx0XFx0Z29hbC1cXHUwMDNlbGFzdF9wc2lfdG90YWwgPSBub3dfcHNpX3RvdGFsO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTMwMjctXFx0Y2FzZSBEQU1PU19RVU9UQV9OT0RFX01FTV9GUkVFX0JQOlxcbm1tL2RhbW9uL2NvcmUuYzozMDI4OlxcdFxcdGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfbm9kZV9tZW1fYnAoZ29hbCk7XFxubW0vZGFtb24vY29yZS5jLTMwMjktXFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzAzMS1cXHRjYXNlIERBTU9TX1FVT1RBX05PREVfTUVNQ0dfRlJFRV9CUDpcXG5tbS9kYW1vbi9jb3JlLmM6MzAzMjpcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gZGFtb3NfZ2V0X25vZGVfbWVtY2dfdXNlZF9icChnb2FsKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzAzMy1cXHRcXHRicmVhaztcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMDM1LVxcdGNhc2UgREFNT1NfUVVPVEFfSU5BQ1RJVkVfTUVNX0JQOlxcbm1tL2RhbW9uL2NvcmUuYzozMDM2OlxcdFxcdGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfaW5fYWN0aXZlX21lbV9icChcXG5tbS9kYW1vbi9jb3JlLmMtMzAzNy1cXHRcXHRcXHRcXHRnb2FsLVxcdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfQUNUSVZFX01FTV9CUCk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzAzOS1cXHRjYXNlIERBTU9TX1FVT1RBX05PREVfRUxJR0lCTEVfTUVNX0JQOlxcbm1tL2RhbW9uL2NvcmUuYzozMDQwOlxcdFxcdGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBkYW1vc19nZXRfbm9kZV9lbGlnaWJsZV9tZW1fYnAoYywgcyxcXG5tbS9kYW1vbi9jb3JlLmMtMzA0MS1cXHRcXHRcXHRcXHRnb2FsLVxcdTAwM2VuaWQpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTMwNDk9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfcXVvdGFfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMwNTUtXFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbChnb2FsLCBxdW90YSkge1xcbm1tL2RhbW9uL2NvcmUuYzozMDU2OlxcdFxcdGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoYywgcywgZ29hbCk7XFxubW0vZGFtb24vY29yZS5jLTMwNTctXFx0XFx0aGlnaGVzdF9zY29yZSA9IG1heChoaWdoZXN0X3Njb3JlLFxcbm1tL2RhbW9uL2NvcmUuYzozMDU4OlxcdFxcdFxcdFxcdG11bHRfZnJhYyhnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlLCAxMDAwMCxcXG5tbS9kYW1vbi9jb3JlLmMtMzA1OS1cXHRcXHRcXHRcXHRcXHRnb2FsLVxcdTAwM2V0YXJnZXRfdmFsdWUpKTtcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0xOTQ9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNDYtXFx0XFx0XFx0Z290byBvdXQ7XFxubW0vZGFtb24vcmVjbGFpbS5jOjI0NzpcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gcXVvdGFfYXV0b3R1bmVfZmVlZGJhY2s7XFxubW0vZGFtb24vcmVjbGFpbS5jLTI0OC1cXHRcXHRkYW1vc19hZGRfcXVvdGFfZ29hbChcXHUwMDI2c2NoZW1lLVxcdTAwM2VxdW90YSwgZ29hbCk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTIxNT1zdHJ1Y3QgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbCB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTIxOC1cXHR1bnNpZ25lZCBsb25nIHRhcmdldF92YWx1ZTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTIxOTpcXHR1bnNpZ25lZCBsb25nIGN1cnJlbnRfdmFsdWU7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMjAtXFx0aW50IG5pZDtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xMzE5PXN0YXRpYyBzc2l6ZV90IHRhcmdldF92YWx1ZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzI4LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzI5OnN0YXRpYyBzc2l6ZV90IGN1cnJlbnRfdmFsdWVfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMzMC1cXHRcXHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzM0LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzM1OlxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVsdVxcXFxuXFxcIiwgZ29hbC1cXHUwMDNlY3VycmVudF92YWx1ZSk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMzYtfVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzM3LVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzM4OnN0YXRpYyBzc2l6ZV90IGN1cnJlbnRfdmFsdWVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMzktXFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzQyLVxcdFxcdFxcdGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwsIGtvYmopO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxMzQzOlxcdGludCBlcnIgPSBrc3RydG91bChidWYsIDAsIFxcdTAwMjZnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTM0NC1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNDE4PXN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF90YXJnZXRfdmFsdWVfYXR0ciA9XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQyMC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQyMTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfY3VycmVudF92YWx1ZV9hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQyMjpcXHRcXHRfX0FUVFJfUldfTU9ERShjdXJyZW50X3ZhbHVlLCAwNjAwKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQyMy1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0xNDMwPXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vc19zeXNmc19xdW90YV9nb2FsX2F0dHJzW10gPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQzMi1cXHRcXHUwMDI2ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF90YXJnZXRfdmFsdWVfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzoxNDMzOlxcdFxcdTAwMjZkYW1vc19zeXNmc19xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xNDM0LVxcdFxcdTAwMjZkYW1vc19zeXNmc19xdW90YV9nb2FsX25pZF9hdHRyLmF0dHIsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9Mjg0Nz1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX2FkZF9xdW90YV9zY29yZShcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yODY2LVxcdFxcdGNhc2UgREFNT1NfUVVPVEFfVVNFUl9JTlBVVDpcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6Mjg2NzpcXHRcXHRcXHRnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gc3lzZnNfZ29hbC1cXHUwMDNlY3VycmVudF92YWx1ZTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg2OC1cXHRcXHRcXHRicmVhaztcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD03NTA9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbF9mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTc2Mi1cXHRpZiAoc3JjLVxcdTAwM2VtZXRyaWMgPT0gREFNT1NfUVVPVEFfVVNFUl9JTlBVVClcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NzYzOlxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QtXFx1MDAzZWN1cnJlbnRfdmFsdWUsIHNyYy1cXHUwMDNlY3VycmVudF92YWx1ZSk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTc2NC1cXHRpZiAoZHN0X2xhc3RfcHNpX3RvdGFsIFxcdTAwMjZcXHUwMDI2IHNyYy1cXHUwMDNlbWV0cmljID09IERBTU9TX1FVT1RBX1NPTUVfTUVNX1BTSV9VUylcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD03ODE9c3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNzg1LVxcdFxcdC50YXJnZXRfdmFsdWUgPSAxMDAwLFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo3ODY6XFx0XFx0LmN1cnJlbnRfdmFsdWUgPSAxMjMsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTc4Ny1cXHRcXHQubGFzdF9wc2lfdG90YWwgPSA0NTYsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNzkzLVxcdFxcdFxcdC50YXJnZXRfdmFsdWUgPSA3ODksXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjc5NDpcXHRcXHRcXHQuY3VycmVudF92YWx1ZSA9IDEyfSk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTc5NS1cXHRkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsX2Zvcih0ZXN0LCBcXHUwMDI2ZHN0LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTc5OC1cXHRcXHRcXHQudGFyZ2V0X3ZhbHVlID0gMzQ1LFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo3OTk6XFx0XFx0XFx0LmN1cnJlbnRfdmFsdWUgPSA2NzgsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTgwMC1cXHRcXHRcXHQubmlkID0gOSxcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MDUtXFx0XFx0XFx0LnRhcmdldF92YWx1ZSA9IDEyLFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4MDY6XFx0XFx0XFx0LmN1cnJlbnRfdmFsdWUgPSAzNDUsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTgwNy1cXHRcXHRcXHQubmlkID0gNixcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MTItXFx0XFx0XFx0LnRhcmdldF92YWx1ZSA9IDQ1NixcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODEzOlxcdFxcdFxcdC5jdXJyZW50X3ZhbHVlID0gNTY3LFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MTQtXFx0XFx0XFx0Lm5pZCA9IDYsXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODIwLVxcdFxcdFxcdC50YXJnZXRfdmFsdWUgPSA4OTAsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjgyMTpcXHRcXHRcXHQuY3VycmVudF92YWx1ZSA9IDkwMSxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODIyLVxcdFxcdFxcdC5uaWQgPSAxMCxcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MjgtXFx0XFx0XFx0LnRhcmdldF92YWx1ZSA9IDIzNCxcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6ODI5OlxcdFxcdFxcdC5jdXJyZW50X3ZhbHVlID0gMzQ1LFxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC04MzAtXFx0XFx0XFx0Lmxhc3RfcHNpX3RvdGFsID0gNTY3LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0Mzo1OS4wNTE3Mzc5MzdaIiwiU2VxIjo1NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ2Njk1MDA0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIERhdGEgRmxvdyBvZiBEQU1PTiBRdW90YSBHb2FscyoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgbmVlZCB0byBjbGFyaWZ5IHNvbWV0aGluZyBhYm91dCBob3cgdGhlIGBjdXJyZW50X3ZhbHVlYCBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgREFNT04gcXVvdGEgc3lzdGVtLiBJIGtub3cgdGhhdCBgY3VycmVudF92YWx1ZWAgaXMgYSBjcml0aWNhbCBmaWVsZCwgYW5kIEkndmUganVzdCByZWFsaXplZCBpdCBleGlzdHMgaW4gKnR3byogZGlzdGluY3Qgc3RydWN0dXJlczogYHN0cnVjdCBkYW1vc19xdW90YV9nb2FsYCBpbiBgbW0vZGFtb24vY29yZS5jYCBhbmQgYWxzbyBpbiBgc3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxgIHdpdGhpbiBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYC5cblxuTXkgcHJpbWFyeSBjb25jZXJuIGlzIHRoaXM6IHRoZSBzeXNmcyBpbnRlcmZhY2UgaXMgaG93IHVzZXJzcGFjZSBpbnRlcmFjdHMgd2l0aCB0aGlzIGBjdXJyZW50X3ZhbHVlYCB2aWEgYGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxgLiBCdXQgdGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGhvdyBkb2VzIHRoaXMgdmFsdWUgaW4gYGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxgIGdldCB1cGRhdGVkPyBEb2VzIGl0IG1pcnJvciB0aGUgYGN1cnJlbnRfdmFsdWVgIHN0b3JlZCBpbnNpZGUgb2YgYGRhbW9zX3F1b3RhX2dvYWxgPyBJcyB0aGVyZSBhIGRpcmVjdCBjb3B5PyBBIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc20/XG5cbkkgbmVlZCB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgbWFrZSBzdXJlIHRoYXQgdGhlIGBkYW1vc19xdW90YV9nb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWVgIGlzLCBpbiBmYWN0LCBiZWluZyBjb3BpZWQgb3IgYXBwcm9wcmlhdGVseSBzeW5jaHJvbml6ZWQgdG8gYGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwtXHUwMDNlY3VycmVudF92YWx1ZWAuIFRoaXMgaXMgZXNzZW50aWFsIHRvIGd1YXJhbnRlZSB0aGF0IHVzZXItc3BhY2UgaW50ZXJhY3Rpb25zIHRocm91Z2ggc3lzZnMgYXJlIGFsd2F5cyByZWZsZWN0aW5nIHRoZSAqYWN0dWFsKiBydW5uaW5nIHN0YXRlIG9mIHRoZSBEQU1PTiBxdW90YSBnb2FscyBhbmQgbm90IHNvbWUgb3V0ZGF0ZWQgb3Igc3RhbGUgdmFsdWUuIFRoZSBjb3JyZWN0bmVzcyBvZiB0aGUgdXNlciBleHBvc2VkIHZhbHVlIGlzIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5NzcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDQ6MDQuNTE4NjkwMjU0WiIsIlNlcSI6NTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzkyNDg0NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3VycmVudF92YWx1ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEyMTU9c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMTgtXFx0dW5zaWduZWQgbG9uZyB0YXJnZXRfdmFsdWU7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyMTk6XFx0dW5zaWduZWQgbG9uZyBjdXJyZW50X3ZhbHVlO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjIwLVxcdGludCBuaWQ7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTMxOT1zdGF0aWMgc3NpemVfdCB0YXJnZXRfdmFsdWVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMyOC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMyOTpzdGF0aWMgc3NpemVfdCBjdXJyZW50X3ZhbHVlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMzAtXFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMzNC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMzNTpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlbHVcXFxcblxcXCIsIGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzM2LX1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMzNy1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMzODpzdGF0aWMgc3NpemVfdCBjdXJyZW50X3ZhbHVlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzM5LVxcdFxcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTM0Mi1cXHRcXHRcXHRkYW1vc19zeXNmc19xdW90YV9nb2FsLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTM0MzpcXHRpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCBcXHUwMDI2Z29hbC1cXHUwMDNlY3VycmVudF92YWx1ZSk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzNDQtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTQxOD1zdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfdGFyZ2V0X3ZhbHVlX2F0dHIgPVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MjAtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MjE6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vc19zeXNmc19xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MjI6XFx0XFx0X19BVFRSX1JXX01PREUoY3VycmVudF92YWx1ZSwgMDYwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MjMtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTQzMD1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9hdHRyc1tdID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MzItXFx0XFx1MDAyNmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfdGFyZ2V0X3ZhbHVlX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQzMzpcXHRcXHUwMDI2ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQzNC1cXHRcXHUwMDI2ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9uaWRfYXR0ci5hdHRyLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NDc9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg2Ni1cXHRcXHRjYXNlIERBTU9TX1FVT1RBX1VTRVJfSU5QVVQ6XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4Njc6XFx0XFx0XFx0Z29hbC1cXHUwMDNlY3VycmVudF92YWx1ZSA9IHN5c2ZzX2dvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWU7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NjgtXFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQ0OjA0Ljk5Nzk0NDI0NFoiLCJTZXEiOjU3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTQ5ODIwNjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRGF0YSBGbG93IGZvciBRdW90YSBHb2FsIFZhbHVlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIHRyYWNlIGhvdyB0aGUgcXVvdGEgZ29hbCB2YWx1ZXMgYXJlIGhhbmRsZWQsIHNwZWNpZmljYWxseSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgc3lzdGVtIGZpbGUgc3lzdGVtIChzeXNmcykgcmVwcmVzZW50YXRpb24gYW5kIHRoZSBpbnRlcm5hbCBgZGFtb3NfcXVvdGFfZ29hbGAgZGF0YSBzdHJ1Y3R1cmUuIEl0IGxvb2tzIGxpa2UgdGhlIGBkYW1vc19zeXNmc19xdW90YV9nb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWVgIGlzIG9ubHkgZXZlciAqcmVhZCogZnJvbSBzeXNmcy4gVGhlbiwgaXQgc2VlbXMgdG8gYmUgY29waWVkIHRvIGBkYW1vc19xdW90YV9nb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWVgLCBidXQgb25seSB3aGVuIGBEQU1PU19RVU9UQV9VU0VSX0lOUFVUYCBpcyBpbnZvbHZlZC5cblxuVGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcgYW5kIHdoZXJlIEkgZ2V0IGEgYml0IGNvbmNlcm5lZC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBpcyB0aGVyZSBldmVyIGFueSB3cml0ZS1iYWNrPyBEb2VzIGBkYW1vc19xdW90YV9nb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWVgIGV2ZXIgZ2V0IHVwZGF0ZWQgaW4gdGhlIGNvcmUgbG9naWMgYW5kIHRoZW4gcmVmbGVjdGVkIGluIGBkYW1vc19zeXNmc19xdW90YV9nb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWVgPyBCZWNhdXNlIGlmIG5vdCwgdGhlbiB0aGUgc3lzZnMgcmVwcmVzZW50YXRpb24gaXMgZWZmZWN0aXZlbHkgYSBvbmUtd2F5IHN0cmVldCwgd2hpY2ggY291bGQgbGVhZCB0byBkaXNjcmVwYW5jaWVzIGlmIGNoYW5nZXMgYXJlIG1hZGUgaW50ZXJuYWxseSBhbmQgbmVlZCB0byBiZSByZWZsZWN0ZWQgaW4gc3lzZnMuXG5cbkkgbmVlZCB0byBkaWcgZGVlcGVyLiBJJ20gZ29pbmcgdG8gaGF2ZSB0byBjYXJlZnVsbHkgZ28gdGhyb3VnaCB0aGUgY29kZSBhbmQgY2hlY2sgZm9yIGFueSBmdW5jdGlvbnMgb3IgbWVjaGFuaXNtcyB0aGF0IG1pZ2h0IGJlIHVwZGF0aW5nIHRoZSBzeXNmcyBmaWxlIGZyb20gdGhlIGNvcmUuIEdvdHRhIG1ha2Ugc3VyZSB0aGUgZGF0YSBpcyBjb25zaXN0ZW50IGFuZCB0aGF0IGEgdXNlciBjb3VsZCBjaGFuZ2UgdGhlIGBkYW1vc19zeXNmc19xdW90YV9nb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWVgIGFuZCBpdCB3b3VsZCBoYXZlIGFuIGFmZmVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI0MTQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDQ6MTAuOTQ3NzY2NzhaIiwiU2VxIjo1OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MDc0NzcwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjdXJyZW50X3ZhbHVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL3N5c2ZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQ0OjExLjAzMzg0NzE2WiIsIlNlcSI6NTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NjI0OTkwNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBEYXRhIFNvdXJjZSBVcGRhdGVzIGZvciBTY2hlbWUgU3RhdGlzdGljcyoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc291cmNlIGZvciB0aGVzZSBzY2hlbWUgc3RhdGlzdGljcy4gTXkgZmlyc3QgaW5zdGluY3QsIGFuZCB3aGVyZSBJJ2Qgc3RhcnQgZGlnZ2luZywgaXMgd2hldGhlciBgZGFtb25fc3lzZnNfdXBkYXRlX3NjaGVtZXNfc3RhdHNgIG9yIGEgZnVuY3Rpb24gd2l0aCBhIHNpbWlsYXIgbmFtZSDigJMgc29tZXRoaW5nIHJlbGF0ZWQgdG8gRGFtb24gKERhdGEgQWNjZXNzIE1vbml0b3IpIGFuZCBzeXNmcyB1cGRhdGVzIOKAkyBoYW5kbGVzIHRoZSBwb3B1bGF0aW9uIG9yIG1vZGlmaWNhdGlvbiBvZiB0aGVzZSBzdGF0aXN0aWNzLiBUaGF0J3MgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBsb29rIGZpcnN0LCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBsaWtlbHkgY29udGV4dCBvZiB0aGUgZGF0YSBhbmQgaXRzIHBvdGVudGlhbCBjb25uZWN0aW9uIHRvIHN5c3RlbSBtb25pdG9yaW5nLiBJZiB0aGF0IGZ1bmN0aW9uIGRvZXNuJ3Qgc2VlbSByZWxldmFudCwgSSdsbCBuZWVkIHRvIGJyb2FkZW4gdGhlIHNlYXJjaCB0byByZWxhdGVkIGFyZWFzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzdGF0aXN0aWNzIGFyZSBjYWxjdWxhdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjg3MCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQ0OjE0LjQ5NjM0NzgwM1oiLCJTZXEiOjYwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQzMjUzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXBkYXRlLipzdGF0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vbHJ1X3NvcnQuYz0zODg9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9kYW1vbl9jYWxsX2ZuKHZvaWQgKmFyZylcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzkyLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MzkzOlxcdC8qIHVwZGF0ZSB0aGUgc3RhdHMgcGFyYW1ldGVyICovXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zOTQtXFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0zMTM9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2RhbW9uX2NhbGxfZm4odm9pZCAqYXJnKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTMxNy1cXG5tbS9kYW1vbi9yZWNsYWltLmM6MzE4OlxcdC8qIHVwZGF0ZSB0aGUgc3RhdHMgcGFyYW1ldGVyICovXFxubW0vZGFtb24vcmVjbGFpbS5jLTMxOS1cXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgYylcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oPTM5PWludCBkYW1vbl9zeXNmc19hZGRfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC00MS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo0Mjp2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfdXBkYXRlX3N0YXRzKFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQzLVxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTMwNDQ9aW50IGRhbW9uX3N5c2ZzX2FkZF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMDYyLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMDYzOnZvaWQgZGFtb25fc3lzZnNfc2NoZW1lc191cGRhdGVfc3RhdHMoXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwNjQtXFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTE4Nzk9c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBkYW1vbl9zeXNmc19jbWRfc3Ryc1tdID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0xODgzLVxcdFxcXCJjb21taXRfc2NoZW1lc19xdW90YV9nb2Fsc1xcXCIsXFxubW0vZGFtb24vc3lzZnMuYzoxODg0OlxcdFxcXCJ1cGRhdGVfc2NoZW1lc19zdGF0c1xcXCIsXFxubW0vZGFtb24vc3lzZnMuYy0xODg1LVxcdFxcXCJ1cGRhdGVfc2NoZW1lc190cmllZF9ieXRlc1xcXCIsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIwNzg9c3RhdGljIGludCBkYW1vbl9zeXNmc191cGRfc2NoZW1lc19zdGF0cyh2b2lkICpkYXRhKVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMDgyLVxcbm1tL2RhbW9uL3N5c2ZzLmM6MjA4MzpcXHRkYW1vbl9zeXNmc19zY2hlbWVzX3VwZGF0ZV9zdGF0cyhcXG5tbS9kYW1vbi9zeXNmcy5jLTIwODQtXFx0XFx0XFx0a2RhbW9uZC1cXHUwMDNlY29udGV4dHMtXFx1MDAzZWNvbnRleHRzX2FyclswXS1cXHUwMDNlc2NoZW1lcywgY3R4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDQ6MTQuNTUwNjc1NDAzWiIsIlNlcSI6NjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4NDI2NDk3MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgYGRhbW9uX3N5c2ZzX3NjaGVtZXNfdXBkYXRlX3N0YXRzYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQncyBkaWcgaW50byB0aGlzIGBkYW1vbl9zeXNmc19zY2hlbWVzX3VwZGF0ZV9zdGF0c2AuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gYXNzZXNzIGl0cyBzaWduaWZpY2FuY2Ugd2l0aGluIHRoZSBicm9hZGVyIERBTU9OIGNvbnRleHQsIHRoZSBEYXRhIEFjY2VzcyBNb25pdG9yLiBXaGF0IHNwZWNpZmljIHN0YXRzIGFyZSB3ZSB0YWxraW5nIGFib3V0IGhlcmU/IEl0J3MgaW1tZWRpYXRlbHkgZXZpZGVudCB0aGF0IHRoaXMgZnVuY3Rpb24gZGVhbHMgd2l0aCB1cGRhdGluZyBzdGF0aXN0aWNzIHJlbGF0ZWQgdG8gdGhlIGRpZmZlcmVudCBtb25pdG9yaW5nIHNjaGVtZXMgZXhwb3NlZCB2aWEgc3lzZnMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IHRob3NlIGFyZS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYWNjZXNzIGZyZXF1ZW5jeSwgYWNjZXNzIHNpemUsIGFjY2VzcyBwYXR0ZXJucywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEEgcXVpY2sgc2NhbiBvZiB0aGUgY29kZSBzaG91bGQgY2xhcmlmeSB0aGF0LiBTcGVjaWZpY2FsbHksIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIGFib3V0IHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcyBiZWluZyBtYW5pcHVsYXRlZC4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbXBhY3Qgb2YgYW55IGNoYW5nZXMgb3IgZGVidWdnaW5nIGFueSBpc3N1ZXMgcmVsYXRlZCB0byBEQU1PTidzIHJlcG9ydGluZyBjYXBhYmlsaXRpZXMuIERlcGVuZGluZyBvbiB0aGUgY29tcGxleGl0eSwgSSBtaWdodCBuZWVkIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgZnJvbSB0aGUgcG9pbnQgb2YgY29sbGVjdGlvbiBhbGwgdGhlIHdheSB0byBpdHMgcHJlc2VudGF0aW9uLiBBIHBvdGVudGlhbCBnb3RjaGEgd291bGQgYmUgaWYgdGhlcmUgYXJlIGFueSByYWNlIGNvbmRpdGlvbnMuIEEgY2xvc2VyIGxvb2sgYXQgdGhlIGRhdGEgc3RydWN0dXJlIGlzIHJlcXVpcmVkIHRvIGVuc3VyZSBhdG9taWNpdHkuIFRoaXMgaXMgYW4gaW1wb3J0YW50IHBpZWNlIG9mIHRoZSBwdXp6bGUsIGFuZCBJIG5lZWQgdG8gZW5zdXJlIGl0J3MgZnVuY3Rpb25pbmcgYXMgZXhwZWN0ZWQuIEl0J3Mgb2Z0ZW4gdGhlIHVuc3VuZyBoZXJvZXMgbGlrZSB0aGVzZSBzdGF0aXN0aWNzIHVwZGF0ZXMgdGhhdCBjYW4gbWFrZSBvciBicmVhayB0aGUgZGlhZ25vc3RpYyB1c2VmdWxuZXNzIG9mIHRoZSB0b29sLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzgxMCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQ0OjIyLjM5MzMyNzgwNVoiLCJTZXEiOjYyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjc5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwNjMsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMwNjM6XFx0dm9pZCBkYW1vbl9zeXNmc19zY2hlbWVzX3VwZGF0ZV9zdGF0cyhcXG4zMDY0OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbjMwNjU6XFx0XFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbjMwNjY6XFx0e1xcbjMwNjc6XFx0XFx0c3RydWN0IGRhbW9zICpzY2hlbWU7XFxuMzA2ODpcXHRcXHRpbnQgc2NoZW1lc19pZHggPSAwO1xcbjMwNjk6XFx0XFxuMzA3MDpcXHRcXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUoc2NoZW1lLCBjdHgpIHtcXG4zMDcxOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zdGF0cyAqc3lzZnNfc3RhdHM7XFxuMzA3MjpcXHRcXG4zMDczOlxcdFxcdFxcdC8qIHVzZXIgY291bGQgaGF2ZSByZW1vdmVkIHRoZSBzY2hlbWUgc3lzZnMgZGlyICovXFxuMzA3NDpcXHRcXHRcXHRpZiAoc2NoZW1lc19pZHggXFx1MDAzZT0gc3lzZnNfc2NoZW1lcy1cXHUwMDNlbnIpXFxuMzA3NTpcXHRcXHRcXHRcXHRicmVhaztcXG4zMDc2OlxcdFxcbjMwNzc6XFx0XFx0XFx0c3lzZnNfc3RhdHMgPSBzeXNmc19zY2hlbWVzLVxcdTAwM2VzY2hlbWVzX2FycltzY2hlbWVzX2lkeCsrXS1cXHUwMDNlc3RhdHM7XFxuMzA3ODpcXHRcXHRcXHRzeXNmc19zdGF0cy1cXHUwMDNlbnJfdHJpZWQgPSBzY2hlbWUtXFx1MDAzZXN0YXQubnJfdHJpZWQ7XFxuMzA3OTpcXHRcXHRcXHRzeXNmc19zdGF0cy1cXHUwMDNlc3pfdHJpZWQgPSBzY2hlbWUtXFx1MDAzZXN0YXQuc3pfdHJpZWQ7XFxuMzA4MDpcXHRcXHRcXHRzeXNmc19zdGF0cy1cXHUwMDNlbnJfYXBwbGllZCA9IHNjaGVtZS1cXHUwMDNlc3RhdC5ucl9hcHBsaWVkO1xcbjMwODE6XFx0XFx0XFx0c3lzZnNfc3RhdHMtXFx1MDAzZXN6X2FwcGxpZWQgPSBzY2hlbWUtXFx1MDAzZXN0YXQuc3pfYXBwbGllZDtcXG4zMDgyOlxcdFxcdFxcdHN5c2ZzX3N0YXRzLVxcdTAwM2Vzel9vcHNfZmlsdGVyX3Bhc3NlZCA9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQ0OjIyLjM5MzQ1Njg4NVoiLCJTZXEiOjYzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzkzODkzMTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgREFNT04gUXVvdGEgR29hbCBVcGRhdGUgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgcXVvdGEgZ29hbHMgYXJlIGJlaW5nIHVwZGF0ZWQsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXJzcGFjZS4gSXQncyBjbGVhciB0aGF0IHRoZSBzdGF0cyBhcmUgZ2V0dGluZyB1cGRhdGVkLCB0aGF0IG11Y2ggaXMgb2J2aW91cyBmcm9tIHRoZSBjb2RlLCBidXQgSSdtIGNvbmNlcm5lZCBhYm91dCBgY3VycmVudF92YWx1ZWAgYW5kIGBsYXN0X3BzaV90b3RhbGAuIExldCdzIHNlZS4uLiBJJ20gcHJldHR5IHN1cmUgYGxhc3RfcHNpX3RvdGFsYCBpc24ndCBldmVuIGV4cG9zZWQgdG8gdXNlcnNwYWNlIGRpcmVjdGx5LiBHb29kLiBCdXQgd2hhdCBhYm91dCBgY3VycmVudF92YWx1ZWA/XG5cbkFoYSwgZGl2aW5nIGludG8gYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AsIEkgc2VlIHRoZSBgY3VycmVudF92YWx1ZV9zaG93YCBmdW5jdGlvbi4gQmluZ28uIEl0J3MgZXhwb3NpbmcgYGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwtXHUwMDNlY3VycmVudF92YWx1ZWAgdG8gdXNlcnNwYWNlLCB3aGljaCBpcyBzZXQgZnJvbSB1c2Vyc3BhY2UgdmlhIGBjdXJyZW50X3ZhbHVlX3N0b3JlYC4gQ3J1Y2lhbGx5LCB0aGlzIGlzbid0IHN5bmNocm9uaXplZCB3aXRoIHRoZSBjb3JlIGBkYW1vc19xdW90YV9nb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWVgLiBTbywgdGhlcmUncyBubyBpbmhlcmVudCB1cGRhdGUgcGF0aCBmcm9tIHRoZSBjb3JlIERBTU9OIGxvZ2ljIHRvIHRoZSBzeXNmcyBleHBvc2VkIHZhbHVlIGZvciBgY3VycmVudF92YWx1ZWAuXG5cbk5vdywgdGhlIHF1ZXN0aW9uIGlzLCAqd2hlcmUgZWxzZSogaXMgYGN1cnJlbnRfdmFsdWVgIGV2ZXIgdXBkYXRlZD8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXNuJ3QgYmVpbmcgaW5hZHZlcnRlbnRseSBtb2RpZmllZCBzb21ld2hlcmUgZWxzZSBpbiB0aGUgY29kZWJhc2UuIFRoaXMgY291bGQgY2F1c2Ugc29tZSByZWFsbHkgc3VidGxlIGJ1Z3MgaW4gaG93IHRoZSBxdW90YSBnb2FscyBhcmUgZW5mb3JjZWQsIGVzcGVjaWFsbHkgZ2l2ZW4gaG93IGBjdXJyZW50X3ZhbHVlYCBhcHBlYXJzIHRvIGJlIGEgY3J1Y2lhbCBmaWVsZCBmb3IgdGhlIHVzZXIgdG8gYmUgdHJhY2tpbmcuIEknbSBnb2luZyB0byBkbyBhIHF1aWNrIHNlYXJjaCBhbmQgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBwbGFjZXMgd2hlcmUgYGN1cnJlbnRfdmFsdWVgIGlzIG1hbmlwdWxhdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDU0MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQ0OjI4Ljc4NzM1MzAzMVoiLCJTZXEiOjY0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxNDAxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3VycmVudF92YWx1ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTEyMTU9c3RydWN0IGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWwge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEyMTgtXFx0dW5zaWduZWQgbG9uZyB0YXJnZXRfdmFsdWU7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjEyMTk6XFx0dW5zaWduZWQgbG9uZyBjdXJyZW50X3ZhbHVlO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMjIwLVxcdGludCBuaWQ7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTMxOT1zdGF0aWMgc3NpemVfdCB0YXJnZXRfdmFsdWVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMyOC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMyOTpzdGF0aWMgc3NpemVfdCBjdXJyZW50X3ZhbHVlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzMzAtXFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMzNC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMzNTpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlbHVcXFxcblxcXCIsIGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUpO1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzM2LX1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTMzNy1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTMzODpzdGF0aWMgc3NpemVfdCBjdXJyZW50X3ZhbHVlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMzM5LVxcdFxcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTM0Mi1cXHRcXHRcXHRkYW1vc19zeXNmc19xdW90YV9nb2FsLCBrb2JqKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTM0MzpcXHRpbnQgZXJyID0ga3N0cnRvdWwoYnVmLCAwLCBcXHUwMDI2Z29hbC1cXHUwMDNlY3VycmVudF92YWx1ZSk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTEzNDQtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTQxOD1zdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfdGFyZ2V0X3ZhbHVlX2F0dHIgPVxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MjAtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MjE6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vc19zeXNmc19xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjE0MjI6XFx0XFx0X19BVFRSX1JXX01PREUoY3VycmVudF92YWx1ZSwgMDYwMCk7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MjMtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MTQzMD1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9hdHRyc1tdID0ge1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTE0MzItXFx0XFx1MDAyNmRhbW9zX3N5c2ZzX3F1b3RhX2dvYWxfdGFyZ2V0X3ZhbHVlX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTQzMzpcXHRcXHUwMDI2ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlX2F0dHIuYXR0cixcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTQzNC1cXHRcXHUwMDI2ZGFtb3Nfc3lzZnNfcXVvdGFfZ29hbF9uaWRfYXR0ci5hdHRyLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4NDc9c3RhdGljIGludCBkYW1vc19zeXNmc19hZGRfcXVvdGFfc2NvcmUoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjg2Ni1cXHRcXHRjYXNlIERBTU9TX1FVT1RBX1VTRVJfSU5QVVQ6XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjI4Njc6XFx0XFx0XFx0Z29hbC1cXHUwMDNlY3VycmVudF92YWx1ZSA9IHN5c2ZzX2dvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWU7XFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTI4NjgtXFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQ0OjI4LjgzMTQ5NzM4MVoiLCJTZXEiOjY1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzE4NjI1MzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEludGVybmFsIERpYWxvZ3VlIG9uIERBTU9TIFF1b3RhIFVwZGF0ZXMqKlxuXG5Pa2F5LCBzbyB0aGUgYGN1cnJlbnRfdmFsdWVgIHdlJ3JlIHB1bGxpbmcgZnJvbSBzeXNmcywgdGhhdCdzIGp1c3QgYSBvbmUtd2F5IHN0cmVldCwgcmlnaHQ/IEl0J3MgcmVhZC1vbmx5IGFuZCBmZWVkcyBkaXJlY3RseSBpbnRvIHRoZSBjb3JlIHVzaW5nIGBEQU1PU19RVU9UQV9VU0VSX0lOUFVUYC4gTm8gY29tcGxleGl0aWVzIHRoZXJlLCBqdXN0IGEgc3RyYWlnaHRmb3J3YXJkIGRhdGEgdHJhbnNmZXIuIEJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLnNvbWV0aGluZyBmZWVscyBvZmYuIFdoYXQgYWJvdXQgYGRhbW9uX3N5c2ZzX3VwZGF0ZV9zY2hlbWVzX2VmZmVjdGl2ZV9xdW90YXNgPyBUaGF0J3MgdGhlIGZ1bmN0aW9uIHRoYXQgd29ycmllcyBtZSwgSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCB3b3JrcyBiZWNhdXNlIGl0IG1heSBhZmZlY3QgbXkgY29uY2x1c2lvbiB0aGF0IGBjdXJyZW50X3ZhbHVlYCBpcyBvbmx5IHJlYWQuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIG9mIHRoZXNlIGZ1bmN0aW9ucy4gSSB3b25kZXIgaWYgdGhlcmUncyBhbnkgaGlkZGVuIG1hbmlwdWxhdGlvbiBvciBzaWRlIGVmZmVjdHMgaGFwcGVuaW5nIHdpdGhpbiB0aGF0IG90aGVyIGZ1bmN0aW9uLiBJdCdzIGVhc3kgdG8gZ2V0IGxvc3QgaW4gdGhlc2UgbGF5ZXJzIG9mIGFic3RyYWN0aW9uLCBJIHNob3VsZCB0YWtlIGEgbG9vayBhdCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYxMDMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0NDozMi4xNTAxMjQ4MjVaIiwiU2VxIjo2NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MTExMTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVwZGF0ZV9zY2hlbWVzX2VmZmVjdGl2ZV9xdW90YXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3N5c2ZzLmM9MTg3OT1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGRhbW9uX3N5c2ZzX2NtZF9zdHJzW10gPSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTE4ODctXFx0XFxcImNsZWFyX3NjaGVtZXNfdHJpZWRfcmVnaW9uc1xcXCIsXFxubW0vZGFtb24vc3lzZnMuYzoxODg4OlxcdFxcXCJ1cGRhdGVfc2NoZW1lc19lZmZlY3RpdmVfcXVvdGFzXFxcIixcXG5tbS9kYW1vbi9zeXNmcy5jLTE4ODktXFx0XFxcInVwZGF0ZV90dW5lZF9pbnRlcnZhbHNcXFwiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0NDozMi4xOTQyNDMyMjVaIiwiU2VxIjo2NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM5NDc0MDYxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyBFZmZlY3RpdmUgUXVvdGFzIHZpYSBgZGFtb25fc3lzZnNfdXBkX3NjaGVtZXNfZWZmZWN0aXZlX3F1b3Rhc2AqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIGBkYW1vbl9zeXNmc191cGRfc2NoZW1lc19lZmZlY3RpdmVfcXVvdGFzYCBpbnRlcmZhY2UuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgcXVvdGFzIGFzIHRoZXkgcGVydGFpbiB0byBEQU1PTiB1cGRhdGUgc2NoZW1lcy4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gc2VlIHdoYXQgZWZmZWN0aXZlIHF1b3RhIHNldHRpbmdzIGFyZSBiZWluZyBhcHBsaWVkLiBJJ20gbG9va2luZyBhdCB0aGlzIGFzIGEgZGlhZ25vc3RpYyBzdGVwIOKAkyBJIG5lZWQgdG8gZW5zdXJlIHRoZSBwYXJhbWV0ZXJzIEkndmUgY29uZmlndXJlZCB2aWEgc3lzZnMgYXJlIHRyYW5zbGF0aW5nIGludG8gdGhlIGJlaGF2aW9yIEkgZXhwZWN0IGluIHRoZSBEQU1PTiBmcmFtZXdvcmsuIEFtIEkgc2VlaW5nIHRoZSBsaW1pdHMsIHRoZSBidWRnZXQgYWxsb2NhdGlvbnMsIHRoZSBleHBlY3RlZCByZWR1Y3Rpb24gaW4gbWVtb3J5IHByZXNzdXJlLCBvciBhcmUgdGhlcmUgdW5leHBlY3RlZCBxdW90YSB2YWx1ZXMgdGhhdCBjb3VsZCBpbmRpY2F0ZSBhIGJ1ZyBpbiB0aGUgREFNT04gY29uZmlndXJhdGlvbiBsb2dpYywgb3IgYSBwb3RlbnRpYWwgY29uZmxpY3Qgd2l0aCBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zP1xuXG5JJ20gcHJvYmFibHkgZ29pbmcgdG8gYmUgY3Jvc3MtcmVmZXJlbmNpbmcgdGhpcyBkYXRhIHdpdGggb3RoZXIgc291cmNlcywgc3VjaCBhcyB0aGUgYGRhbW9uX21vbml0b3JzYCBzeXNmcyBpbnRlcmZhY2UsIHRvIGNvcnJlbGF0ZSB0aGUgcXVvdGEgc2V0dGluZ3Mgd2l0aCBvYnNlcnZlZCBtb25pdG9yaW5nIHJlc3VsdHMuIElzIHRoZSBgZGFtb25fc3lzZnNfdXBkX3NjaGVtZXNfZWZmZWN0aXZlX3F1b3Rhc2AgZGlzcGxheWluZyB0aGUgY3VycmVudCBzdGF0ZSBhcyBjYWxjdWxhdGVkIG9yIGlzIHRoZSBhY3R1YWwgYmVoYXZpb3IgY29uZmxpY3Rpbmcgd2l0aCB0aGlzIHZhbHVlPyBGcm9tIGhlcmUsIEkgd2lsbCBsaWtlbHkgZ28gb24gdG8gY2hlY2sgaG93IHRoZXNlIHF1b3RhcyBhcmUgYmVpbmcgdXBkYXRlZCwgb3IgaG93IHRoZXNlIHF1b3RhcyBhcmUgZWZmZWN0aW5nIHRoZSB1bmRlcmx5aW5nIGJlaGF2aW9yLCBtYXliZSBjb21wYXJlIGl0IHRvIGEgY29udHJvbCBzZXR1cCB0byBvYnNlcnZlIHRoZSBlZmZlY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjUwNiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQ0OjM4LjU4ODk4Njg1OFoiLCJTZXEiOjY4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5ODA4NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fc3lzZnNfdXBkX3NjaGVtZXNfZWZmZWN0aXZlX3F1b3Rhc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vc3lzZnMuYz0yMTUyPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfY29tbWl0X3NjaGVtZXNfcXVvdGFfZ29hbHModm9pZCAqZGF0YSlcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjE2OS0vKlxcbm1tL2RhbW9uL3N5c2ZzLmM6MjE3MDogKiBkYW1vbl9zeXNmc191cGRfc2NoZW1lc19lZmZlY3RpdmVfcXVvdGFzKCkgLSBVcGRhdGUgc2NoZW1lcyBlZmZlY3RpdmUgcXVvdGFzXFxubW0vZGFtb24vc3lzZnMuYy0yMTcxLSAqIHN5c2ZzIGZpbGVzLlxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMTc4LSAqL1xcbm1tL2RhbW9uL3N5c2ZzLmM6MjE3OTpzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3VwZF9zY2hlbWVzX2VmZmVjdGl2ZV9xdW90YXModm9pZCAqZGF0YSlcXG5tbS9kYW1vbi9zeXNmcy5jLTIxODAte1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMjE5PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfcmVwZWF0X2NhbGxfZm4odm9pZCAqZGF0YSlcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjIzNS1cXHRkYW1vbl9zeXNmc191cGRfc2NoZW1lc19zdGF0cyhzeXNmc19rZGFtb25kKTtcXG5tbS9kYW1vbi9zeXNmcy5jOjIyMzY6XFx0ZGFtb25fc3lzZnNfdXBkX3NjaGVtZXNfZWZmZWN0aXZlX3F1b3RhcyhzeXNmc19rZGFtb25kKTtcXG5tbS9kYW1vbi9zeXNmcy5jLTIyMzctb3V0Olxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMzYzPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfaGFuZGxlX2NtZChlbnVtIGRhbW9uX3N5c2ZzX2NtZCBjbWQsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIzOTItXFx0XFx0cmV0dXJuIGRhbW9uX3N5c2ZzX2RhbW9uX2NhbGwoXFxubW0vZGFtb24vc3lzZnMuYzoyMzkzOlxcdFxcdFxcdFxcdGRhbW9uX3N5c2ZzX3VwZF9zY2hlbWVzX2VmZmVjdGl2ZV9xdW90YXMsXFxubW0vZGFtb24vc3lzZnMuYy0yMzk0LVxcdFxcdFxcdFxcdGtkYW1vbmQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0NDozOC42Mzc5Njk3MjhaIiwiU2VxIjo2OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMyMjgwMzIwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQncyBnb2luZyB0aHJvdWdoIG15IG1pbmQsIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIGlmIEknbSB0aGUgZXhwZXJ0OlxuXG4qKkRpdmluZyBpbnRvIGBkYW1vbl9zeXNmc191cGRfc2NoZW1lc19lZmZlY3RpdmVfcXVvdGFzYCoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSB3aGF0J3Mgd2hhdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgZGFtb25fc3lzZnNfdXBkX3NjaGVtZXNfZWZmZWN0aXZlX3F1b3Rhc2AgZmlsZS4gSW1tZWRpYXRlbHksIEknbSB0aGlua2luZzogdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byB0aGUgRHluYW1pYyBBZGFwdGl2ZSBNZW1vcnkgT3B0aW1pemVyIChEQU1PTikgc3lzdGVtIGFuZCBob3cgaXQgaW50ZXJmYWNlcyB0aHJvdWdoIHRoZSBzeXNmcyBmaWxlc3lzdGVtIHRvIG1hbmFnZSB1cGRhdGUgc2NoZW1lcyBhbmQgdGhlaXIgZWZmZWN0aXZlIHF1b3Rhcy4gU28sIGl0J3MgYWJvdXQgY29udHJvbCBhbmQgbW9uaXRvcmluZywgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBtZW1vcnkgcmVjbGFtYXRpb24gb3Igb3B0aW1pemF0aW9uLlxuXG5HaXZlbiB0aGUgbmFtaW5nLCBJIGFudGljaXBhdGUgdGhpcyBmaWxlIHdpbGwgZXhwb3NlIGRldGFpbHMgcmVnYXJkaW5nIHRoZSBxdW90YXMgZW5mb3JjZWQgb3IgYXBwbGllZCB0byB0aGUgZGlmZmVyZW50IHVwZGF0ZSBzY2hlbWVzIHRoYXQgREFNT04gc3VwcG9ydHMuIEknbSBleHBlY3RpbmcgdG8gc2VlIGluZm9ybWF0aW9uIHJlZmxlY3RpbmcgaG93IHRoZSBzeXN0ZW0gaXMgY3VycmVudGx5IGJlaGF2aW5nIGJhc2VkIG9uIHRoZXNlIGRlZmluZWQgc2NoZW1lcy4gVGhpcyBsaWtlbHkgdHJhbnNsYXRlcyB0byBob3cgYWdncmVzc2l2ZWx5IERBTU9OIHdpbGwgcmVjbGFpbSBtZW1vcnkgb3IgcGVyZm9ybSBzcGVjaWZpYyBvcHRpbWl6YXRpb25zIGJhc2VkIG9uIHVzYWdlIHBhdHRlcm5zIGFuZCBwcmVkZWZpbmVkIHNldHRpbmdzLiBJJ2xsIG5lZWQgdG8gbG9vayBmb3Iga2V5IHBhcmFtZXRlcnMgc3VjaCBhcyB0aGUgbWVtb3J5IHJlZ2lvbiBzaXplLCB1cGRhdGUgcGVyaW9kcywgdGhyZXNob2xkIHZhbHVlcywgYW5kIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucyB0aGF0IGltcGFjdCBxdW90YSBlbmZvcmNlbWVudC5cblxuSSdtIHByZXBhcmVkIHRvIGludGVycHJldCB0aGUgZGF0YSwgdW5kZXJzdGFuZGluZyB0aGF0IHRoZSBlZmZlY3RpdmUgcXVvdGFzIGFyZSBwcm9iYWJseSBjYWxjdWxhdGVkIGFuZCBhZGp1c3RlZCBkeW5hbWljYWxseSBieSBEQU1PTiBiYXNlZCBvbiB2YXJpb3VzIGZhY3RvcnMsIHBlcmhhcHMgaW5jbHVkaW5nIGF2YWlsYWJsZSBtZW1vcnksIG92ZXJhbGwgc3lzdGVtIGxvYWQsIGFuZCBwb3RlbnRpYWxseSBldmVuIHVzZXItZGVmaW5lZCB0dW5hYmxlcy4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgdGhlIGludGVycGxheSBiZXR3ZWVuIGRpZmZlcmVudCB1cGRhdGUgc2NoZW1lcyBhbmQgaG93IHRoZWlyIHF1b3RhcyBtaWdodCBiZSBwcmlvcml0aXplZCBvciB3ZWlnaHRlZC4gVWx0aW1hdGVseSwgSSdtIGhvcGluZyB0aGlzIHdpbGwgaWxsdW1pbmF0ZSBob3cgREFNT04ncyB1cGRhdGUgbG9naWMgd29ya3MgYW5kIHByb3ZpZGUgaW5zaWdodCBpbnRvIG9wdGltaXppbmcgdGhlIHN5c3RlbSdzIG1lbW9yeSBtYW5hZ2VtZW50IGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzM0NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQ0OjQyLjk2MDc3NTExOVoiLCJTZXEiOjcwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDY3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vc3lzZnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTc5LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTc5OlxcdHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdXBkX3NjaGVtZXNfZWZmZWN0aXZlX3F1b3Rhcyh2b2lkICpkYXRhKVxcbjIxODA6XFx0e1xcbjIxODE6XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQgPSBkYXRhO1xcbjIxODI6XFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4ID0ga2RhbW9uZC1cXHUwMDNlZGFtb25fY3R4O1xcbjIxODM6XFx0XFxuMjE4NDpcXHRcXHRkYW1vc19zeXNmc191cGRhdGVfZWZmZWN0aXZlX3F1b3RhcyhcXG4yMTg1OlxcdFxcdFxcdFxcdGtkYW1vbmQtXFx1MDAzZWNvbnRleHRzLVxcdTAwM2Vjb250ZXh0c19hcnJbMF0tXFx1MDAzZXNjaGVtZXMsIGN0eCk7XFxuMjE4NjpcXHRcXHRyZXR1cm4gMDtcXG4yMTg3OlxcdH1cXG4yMTg4OlxcdFxcbjIxODk6XFx0c3RhdGljIGludCBkYW1vbl9zeXNmc191cGRfdHVuZWRfaW50ZXJ2YWxzKHZvaWQgKmRhdGEpXFxuMjE5MDpcXHR7XFxuMjE5MTpcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZCA9IGRhdGE7XFxuMjE5MjpcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHggPSBrZGFtb25kLVxcdTAwM2VkYW1vbl9jdHg7XFxuMjE5MzpcXHRcXG4yMTk0OlxcdFxcdGtkYW1vbmQtXFx1MDAzZWNvbnRleHRzLVxcdTAwM2Vjb250ZXh0c19hcnJbMF0tXFx1MDAzZWF0dHJzLVxcdTAwM2VpbnRlcnZhbHMtXFx1MDAzZXNhbXBsZV91cyA9XFxuMjE5NTpcXHRcXHRcXHRjdHgtXFx1MDAzZWF0dHJzLnNhbXBsZV9pbnRlcnZhbDtcXG4yMTk2OlxcdFxcdGtkYW1vbmQtXFx1MDAzZWNvbnRleHRzLVxcdTAwM2Vjb250ZXh0c19hcnJbMF0tXFx1MDAzZWF0dHJzLVxcdTAwM2VpbnRlcnZhbHMtXFx1MDAzZWFnZ3JfdXMgPVxcbjIxOTc6XFx0XFx0XFx0Y3R4LVxcdTAwM2VhdHRycy5hZ2dyX2ludGVydmFsO1xcbjIxOTg6XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA0OjQ0OjQyLjk2MDk4NDMxOVoiLCJTZXEiOjcxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODQwMDM4ODY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgZGFtb3Nfc3lzZnNfdXBkYXRlX2VmZmVjdGl2ZV9xdW90YXNgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgY29kZSBpcyBkb2luZyDigJMgYW5kIGlkZWFsbHksIGhvdyBpdCdzICpzdXBwb3NlZCogdG8gYmUgZG9pbmcgaXQuIEknbSBnb2luZyB0byBmb2N1cyBvbiB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IGZpcnN0LCB0cnlpbmcgdG8gcXVpY2tseSBncmFzcCB0aGUgaW5wdXQgYXJndW1lbnRzLCB3aGF0IGRhdGEgc3RydWN0dXJlcyBpdCdzIHdvcmtpbmcgd2l0aCwgYW5kIHRoZSBleHBlY3RlZCBvdXRwdXQgb3Igc2lkZSBlZmZlY3RzLiBJcyB0aGlzIHRvdWNoaW5nIHN5c2ZzIGRpcmVjdGx5PyBJZiBzbywgd2hhdCBhdHRyaWJ1dGVzPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBsb2NraW5nIG1lY2hhbmlzbXMgYmVpbmcgdXNlZD8gSSBuZWVkIHRvIGltbWVkaWF0ZWx5IGxvb2sgZm9yIHBvdGVudGlhbCBlcnJvciBwYXRocyDigJMgd2hhdCBoYXBwZW5zIGlmIHNvbWV0aGluZyBnb2VzIHdyb25nIGR1cmluZyBhIHdyaXRlLCBvciBpZiBzb21lIGNyaXRpY2FsIHJlc291cmNlIGlzbid0IGF2YWlsYWJsZT8gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgc2lnbnMgb2YgbWVtb3J5IGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uLCBlcnJvciBoYW5kbGluZyB3aXRoIHJlbGV2YW50IHJldHVybiBjb2RlcyBhbmQvb3IgbG9nIG1lc3NhZ2VzLiBNeSBwcmltYXJ5IGZvY3VzIGlzIG9uIGhvdyBpdCBtYW5hZ2VzIHF1b3RhcyBhbmQsIHNwZWNpZmljYWxseSwgaG93IGl0ICp1cGRhdGVzKiB0aGUgZWZmZWN0aXZlIHF1b3RhcyB2aWEgc3lzZnMuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgcG9zc2libGUgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgY29tcG9uZW50cyB0aGF0IG1heSBiZSByZWFkaW5nIG9yIHdyaXRpbmcgdG8gdGhlIHNhbWUgc3lzZnMgYXR0cmlidXRlcyBhdCB0aGUgc2FtZSB0aW1lLiBMZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBjb21tZW50cyBleHBsYWluaW5nIHRoZSBpbnRlbnQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MTIyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0NDo0Ni44MDEwMjYxMzJaIiwiU2VxIjo3MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTcwOTIzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19zeXNmc191cGRhdGVfZWZmZWN0aXZlX3F1b3Rhc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vc3lzZnMtY29tbW9uLmg9NTQ9aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaC01Ni1cXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo1Nzp2b2lkIGRhbW9zX3N5c2ZzX3VwZGF0ZV9lZmZlY3RpdmVfcXVvdGFzKFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTU4LVxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI4OTQ9aW50IGRhbW9zX3N5c2ZzX3NldF9xdW90YV9zY29yZXMoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjkyOC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjkyOTp2b2lkIGRhbW9zX3N5c2ZzX3VwZGF0ZV9lZmZlY3RpdmVfcXVvdGFzKFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yOTMwLVxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMTc5PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdXBkX3NjaGVtZXNfZWZmZWN0aXZlX3F1b3Rhcyh2b2lkICpkYXRhKVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMTgzLVxcbm1tL2RhbW9uL3N5c2ZzLmM6MjE4NDpcXHRkYW1vc19zeXNmc191cGRhdGVfZWZmZWN0aXZlX3F1b3RhcyhcXG5tbS9kYW1vbi9zeXNmcy5jLTIxODUtXFx0XFx0XFx0a2RhbW9uZC1cXHUwMDNlY29udGV4dHMtXFx1MDAzZWNvbnRleHRzX2FyclswXS1cXHUwMDNlc2NoZW1lcywgY3R4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDQ6NDYuOTQyNzM3OTEyWiIsIlNlcSI6NzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMjc5MDM2OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBkYW1vc19zeXNmc191cGRhdGVfZWZmZWN0aXZlX3F1b3Rhc2AgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBkb2luZywgc3BlY2lmaWNhbGx5IGhvdyBpdCdzIHVwZGF0aW5nIGVmZmVjdGl2ZSBxdW90YXMuIEJhc2VkIG9uIHRoZSBuYW1lLCBpdCBzZWVtcyByZWxhdGVkIHRvIHRoZSBzeXNmcyBpbnRlcmZhY2UsIHNvIEknbGwgYmUgbG9va2luZyBmb3IgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGZpbGUgc3lzdGVtLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHVzZWQsIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMgZW1wbG95ZWQgdG8gZW5zdXJlIHRocmVhZCBzYWZldHksIGFuZCBhbnkgZXJyb3IgaGFuZGxpbmcgdGhhdCdzIHByZXNlbnQuIEknbGwgYmUgZXhwZWN0aW5nIHRvIGZpbmQgZGV0YWlscyBvbiBob3cgdGhlIHF1b3RhIHZhbHVlcyBhcmUgY2FsY3VsYXRlZCwgYW5kIGhvdyB0aGVzZSBjYWxjdWxhdGlvbnMgYXJlIGludGVncmF0ZWQgaW50byB0aGUgcXVvdGEgc3lzdGVtLiBJJ2xsIGJlIGFuYWx5emluZyBlYWNoIGxpbmUgb2YgdGhlIGltcGxlbWVudGF0aW9uLCBsaW5lIGJ5IGxpbmUuIExldCdzIHNlZSBpZiB0aGlzIGNvZGUgaXMgd2VsbC1jb21tZW50ZWQgYW5kIGVhc3kgdG8gZm9sbG93LiBJIGhvcGUgaXQncyB3ZWxsLXdyaXR0ZW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4ODExLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDQ6NTAuMTcwNjQzOTI3WiIsIlNlcSI6NzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjkyOSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjkyOTpcXHR2b2lkIGRhbW9zX3N5c2ZzX3VwZGF0ZV9lZmZlY3RpdmVfcXVvdGFzKFxcbjI5MzA6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXFxuMjkzMTpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuMjkzMjpcXHR7XFxuMjkzMzpcXHRcXHRzdHJ1Y3QgZGFtb3MgKnNjaGVtZTtcXG4yOTM0OlxcdFxcdGludCBzY2hlbWVzX2lkeCA9IDA7XFxuMjkzNTpcXHRcXG4yOTM2OlxcdFxcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzY2hlbWUsIGN0eCkge1xcbjI5Mzc6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3F1b3RhcyAqc3lzZnNfcXVvdGFzO1xcbjI5Mzg6XFx0XFxuMjkzOTpcXHRcXHRcXHQvKiB1c2VyIGNvdWxkIGhhdmUgcmVtb3ZlZCB0aGUgc2NoZW1lIHN5c2ZzIGRpciAqL1xcbjI5NDA6XFx0XFx0XFx0aWYgKHNjaGVtZXNfaWR4IFxcdTAwM2U9IHN5c2ZzX3NjaGVtZXMtXFx1MDAzZW5yKVxcbjI5NDE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjk0MjpcXHRcXG4yOTQzOlxcdFxcdFxcdHN5c2ZzX3F1b3RhcyA9XFxuMjk0NDpcXHRcXHRcXHRcXHRzeXNmc19zY2hlbWVzLVxcdTAwM2VzY2hlbWVzX2FycltzY2hlbWVzX2lkeCsrXS1cXHUwMDNlcXVvdGFzO1xcbjI5NDU6XFx0XFx0XFx0c3lzZnNfcXVvdGFzLVxcdTAwM2VlZmZlY3RpdmVfc3ogPSBzY2hlbWUtXFx1MDAzZXF1b3RhLmVzejtcXG4yOTQ2OlxcdFxcdH1cXG4yOTQ3OlxcdH1cXG4yOTQ4OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0NDo1MC4xNzA3Nzc4NTdaIiwiU2VxIjo3NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAxNzUwMzQxMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBJbmZvcm1hdGlvbiBMZWFrYWdlIGFuZCBVbmluaXRpYWxpemVkIE1lbW9yeSBVc2FnZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGBsYXN0X3BzaV90b3RhbGAgaXMgcHVyZWx5IGludGVybmFsIGFuZCBub3QgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIHdoaWNoIGlzIGdvb2QuIFRoZSBgY3VycmVudF92YWx1ZWAgaXMgb25seSB1c2VyLXZpc2libGUgZm9yIGlucHV0LCB3aGljaCBhbHNvIHNlZW1lZCBzYWZlLiBCdXQgdGhlbiBJIHJlYWxpemVkIGBjdXJyZW50X3ZhbHVlX3Nob3dgIHByaW50cyBgZ29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlYCwgbm90IHNvbWUgZGVyaXZlZCBvciBzYW5pdGl6ZWQgdmFsdWUuIEhvd2V2ZXIsIHRoZSBrZXJuZWwncyBgZGFtb3NfcXVvdGFfZ29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlYCBpcyBuZXZlciBkaXJlY3RseSBleHBvc2VkLiBTbywgbm8gaW5mb3JtYXRpb24gbGVhayB0aGVyZS4gVGhhdCdzIGEgcmVsaWVmLlxuXG5UaGUgbmV4dCBjb25jZXJuIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJZiBgbGFzdF9wc2lfdG90YWxgIHdhc24ndCBpbml0aWFsaXplZCwgYGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVgIHdvdWxkIHVzZSBpdDogSXQgY2FsY3VsYXRlcyBgZ29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlYCBieSBzdWJ0cmFjdGluZyBpdCBmcm9tIGBub3dfcHNpX3RvdGFsYC4gQW5kIHRoZW4gYGdvYWwtXHUwMDNlY3VycmVudF92YWx1ZWAgaXMgdXNlZCBpbiBgZGFtb3NfcXVvdGFfc2NvcmVgLCBzcGVjaWZpY2FsbHkgaW4gY2FsY3VsYXRpbmcgdGhlIGBoaWdoZXN0X3Njb3JlYC4gVGhhdCBgaGlnaGVzdF9zY29yZWAgaXMgdXNlZCB0byBhZGp1c3QgdGhlIHF1b3RhIHNpemUsIHNvIGlmIHRoaXMgdmFsdWUgaXMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLCB0aGUgcXVvdGEgYWRqdXN0bWVudCB3b3VsZCBiZSByYW5kb20vd3JvbmcgZm9yIHRoZSBmaXJzdCBjeWNsZS4gVGhpcyBpcyBhIGxvZ2ljIGJ1ZyB0aGF0IGNvdWxkIGhhdmUgc2VyaW91cyBjb25zZXF1ZW5jZXMuXG5cbldhaXQsIGBkYW1vc19uZXdfcXVvdGFfZ29hbGAgdXNlcyBga21hbGxvY19vYmpgLCB3aGljaCAqZG9lc24ndCogemVybyBtZW1vcnkuIFNvLCBgbGFzdF9wc2lfdG90YWxgICppcyogaW5kZWVkIHVuaW5pdGlhbGl6ZWQuIFRoZSBwYXRjaCBmaXhlcyB0aGlzIGJ5IGluaXRpYWxpemluZyBgbGFzdF9wc2lfdG90YWxgLlxuXG5NeSBxdWVzdGlvbiB0aGVuIGJlY2FtZTogV291bGQgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBjYXRjaCB0aGlzPyBZZXMsIGl0IHdvdWxkLiBLTVNBTiBkZXRlY3RzIHRoZSB1c2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY2FsY3VsYXRpb25zIHRoYXQgYWZmZWN0IGNvbnRyb2wgZmxvdyBvciBhcmUgcGFzc2VkIHRvIG90aGVyIGZ1bmN0aW9ucy5cblxuRG9lcyBgZ29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlYCBhZmZlY3QgY29udHJvbCBmbG93PyBgaGlnaGVzdF9zY29yZWAgdXNlcyBgZ29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlYCB0byBjYWxjdWxhdGUgYHF1b3RhLVx1MDAzZWVzemAgKGVmZmVjdGl2ZSBzaXplKS4gVGhhdCBgcXVvdGEtXHUwMDNlZXN6YCBpcyB1c2VkIGluIGBkYW1vc19hZGp1c3RfcXVvdGFgLCB3aGljaCBkZXRlcm1pbmVzIGhvdyBtdWNoIG1lbW9yeSBEQU1PTiByZWNsYWltcy4gVGhpcyBtZWFucyBhbiBpbmNvcnJlY3QgdmFsdWUgb2YgYHF1b3RhLVx1MDAzZWVzemAgY2FuIGxlYWQgdG8gdW5wcmVkaWN0YWJsZSBiZWhhdmlvci4gSXQgaXMgbm90IGp1c3QgYSBidWcsIGl0IGNvdWxkIGhhdmUgYW4gZWZmZWN0IG9uIGNvbnRyb2wgZmxvdy4gSXTigJlzIGNlcnRhaW5seSBhIGZ1bmN0aW9uYWwgYnVnLCBzaW5jZSBgcXVvdGEtXHUwMDNlZXN6YCBoYXMgYW4gaW1wb3J0YW50IGZ1bmN0aW9uIGFuZCB0aGlzIG1ha2VzIGl0IGluY29ycmVjdCwgS01TQU4gd291bGQgY2F0Y2ggdGhlIHVzZSBvZiB1bmluaXRpYWxpemVkIGBsYXN0X3BzaV90b3RhbGAgaW4gYG5vd19wc2lfdG90YWwgLSBnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsYC5cblxuS01TQU4gcmVwb3J0cyB1bmluaXRpYWxpemVkIG1lbW9yeSBpZiB1c2VkIGluIGEgYnJhbmNoIG9yIHdoZW4gY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgYXMgYSBwb2ludGVyL2luZGV4LiBJcyBgZ29hbC1cdTAwM2VjdXJyZW50X3ZhbHVlYCB1c2VkIGluIGEgYnJhbmNoPyBJJ2QgaGF2ZSB0byBsb29rIGF0IGBtdWx0X2ZyYWNgIHNwZWNpZmljYWxseSB0byBjb25maXJtIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MzUwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDU6MDAuMzQ1ODE0ODM2WiIsIlNlcSI6NzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjczOTIzMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXVsdF9mcmFjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvbWF0aC5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWF0aC5oPTExNj1fX1NUUlVDVF9GUkFDVCh1MzIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21hdGguaC0xMTktLyogQ2FsY3VsYXRlIFxcXCJ4ICogbiAvIGRcXFwiIHdpdGhvdXQgdW5uZWNlc3Nhcnkgb3ZlcmZsb3cgb3IgbG9zcyBvZiBwcmVjaXNpb24uICovXFxuaW5jbHVkZS9saW51eC9tYXRoLmg6MTIwOiNkZWZpbmUgbXVsdF9mcmFjKHgsIG4sIGQpXFx0XFxcXFxcbmluY2x1ZGUvbGludXgvbWF0aC5oLTEyMS0oe1xcdFxcdFxcdFxcdFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDQ6NDU6MDAuOTEzMjExOTA1WiIsIlNlcSI6NzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MjIxMzAwODYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEp1c3RpZmljYXRpb246IFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJlYWQgaW4gREFNT04gUXVvdGEgU2NvcmluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UgaGF2ZSBgbXVsdF9mcmFjYCwgcHVyZWx5IG1hdGhlbWF0aWNhbCwgbm8gaXNzdWUgdGhlcmUuIFRoZSByZWFsIGNvbmNlcm4gaXMgdGhlIGBtYXgoaGlnaGVzdF9zY29yZSwgLi4uKWAgY2FsbC4gYG1heGAsIGFzIGRlZmluZWQgYnkgdGhlIG1hY3JvLCBjbGVhcmx5IGludm9sdmVzIGEgY29tcGFyaXNvbiDigJMgYSBjb25kaXRpb25hbCBicmFuY2guIFRoaXMgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gVGhlIGNvcmUgcHJvYmxlbSBpcyB0aGF0IGBsYXN0X3BzaV90b3RhbGAgd2l0aGluIHRoZSBgZGFtb3NfcXVvdGFfZ29hbGAgc3RydWN0IG1pZ2h0IGJlIHVuaW5pdGlhbGl6ZWQuIEtNU0FOLCB3aXRoIGl0cyBiaXQtbGV2ZWwgdHJhY2tpbmcsIHdpbGwgZmxhZyBhbnkgdXNlIG9mIGFuIHVuaW5pdGlhbGl6ZWQgdmFsdWUgaW4gYSBjb25kaXRpb25hbCwgYXMgd2UgaGF2ZSBoZXJlIHdpdGggdGhlIGBcdTAwM2VgIGluIHRoZSBgbWF4YCBtYWNyby5cblxuTm93LCBpcyB0aGlzIGJ1ZyBldmVuIHJlYWNoYWJsZT8gREFNT04ncyBgREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTYCBmZWF0dXJlLCBpbnRyb2R1Y2VkIGluIHY2LjEwIG9yIHNvLCBpcyBrZXkgaGVyZS4gVXNlcnNwYWNlIGNhbiBjcmVhdGUgYSBEQU1PTiBzY2hlbWUgdXNpbmcgdGhpcyBtZXRyaWMuIFdoZW4gc3VjaCBhIHNjaGVtZSAqc3RhcnRzKiwgYGxhc3RfcHNpX3RvdGFsYCBpcyB1bmluaXRpYWxpemVkLiBUaGUgZnVuY3Rpb24gYGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWVgIGlzIHRoZW4gY2FsbGVkIGluIHRoZSBmaXJzdCBjeWNsZSwgdXNpbmcgdGhlIGBsYXN0X3BzaV90b3RhbGAuIEJpbmdvISBLTVNBTiB3aWxsIGNhdGNoIHRoaXMuXG5cbkJ1dCB3YWl0LCB3b3VsZCBLQVNBTiBoYXZlIGNhdWdodCB0aGlzPyBOb3BlLiBLQVNBTiBvbmx5IGRldGVjdHMgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucy4gSXQgZG9lc24ndCBjYXJlIGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIHdpdGhpbiBhbGxvY2F0ZWQgcmVnaW9ucy4gU28sIHRoaXMgaXMgYSBwdXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgYnVnLlxuXG5MZXQncyBjb25maXJtIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgbGFzdF9wc2lfdG90YWxgLiBgZGFtb3NfbmV3X3F1b3RhX2dvYWxgIGFsbG9jYXRlcyBpdCB2aWEgYGttYWxsb2Nfb2JqYC4gTG9va2luZyBhdCB0aGUgY29kZTpcblxuYGBgY1xuc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmRhbW9zX25ld19xdW90YV9nb2FsKFxuXHRcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljLFxuXHRcdHVuc2lnbmVkIGxvbmcgdGFyZ2V0X3ZhbHVlKVxue1xuXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcblxuXHRnb2FsID0ga21hbGxvY19vYmooKmdvYWwpO1xuXHRpZiAoIWdvYWwpXG5cdFx0cmV0dXJuIE5VTEw7XG5cdGdvYWwtXHUwMDNlbWV0cmljID0gbWV0cmljO1xuXHRnb2FsLVx1MDAzZXRhcmdldF92YWx1ZSA9IHRhcmdldF92YWx1ZTtcblx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2Z29hbC1cdTAwM2VsaXN0KTtcblx0cmV0dXJuIGdvYWw7XG59XG5gYGBcblxuWWVzLCBga21hbGxvY19vYmpgIGFsbG9jYXRlcyBidXQgKmRvZXNuJ3QqIGluaXRpYWxpemUgaXQuIFRoaXMgZnVuY3Rpb24gZG9lc24ndCBpbml0aWFsaXplIGBsYXN0X3BzaV90b3RhbGAuIEJlZm9yZSB0aGUgcGF0Y2gsIGl0IHdhcyBvbmx5IGluaXRpYWxpemVkIGluIGBkYW1vc19jb21taXRfcXVvdGFfZ29hbF91bmlvbmAgKG9yIG5vdCBhdCBhbGwpLiBUaGUgcGF0Y2ggYWRkZWQgaW5pdGlhbGl6YXRpb24gb2YgdGhpcyB2YWx1ZSBidXQgbm90IGZvciB0aGUgZmlyc3QgY3ljbGUuIFNvLCBwcmUtcGF0Y2gsIGBsYXN0X3BzaV90b3RhbGAgd2FzICpuZXZlciogaW5pdGlhbGl6ZWQgb24gZ29hbCBjcmVhdGlvbiwgYW5kIHRoZSBwYXRjaCBhZGRzIHRoZSBpbml0aWFsaXphdGlvbiBpbiBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxfdW5pb25gIGJ1dCBub3Qgb24gaW5pdGlhbCBhbGxvY2F0aW9uISBUaGUgY29tbWVudCBpbiBgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxgIG1lbnRpb25zLCBcImtlZXAgYGxhc3RfcHNpX3RvdGFsYCBhcyBpcywgc2luY2UgaXQgd2lsbCBiZSB1cGRhdGVkIGluIG5leHQgY3ljbGUuXCIgVGhpcyBjb25maXJtcyB0aGUgaW50ZW5kZWQgYmVoYXZpb3I6ICB0aGUgaW5pdGlhbCBjeWNsZSAqbXVzdCogdXNlIGFuIHVuaW5pdGlhbGl6ZWQgdmFsdWUhXG5cblNvLCB5ZXMsIGl0J3MgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlLiBUaGUgYnVnIGlzIGhlcmUhXG5cbklzIHRoaXMgYSBzZWN1cml0eSBpc3N1ZT8gRGVmaW5pdGVseS4gQW4gdW5pbml0aWFsaXplZCByZWFkIGNhbiBpbmZsdWVuY2UgdGhlIHF1b3RhIHNjb3JlLCBhbmQgdGhlIHF1b3RhIHNjb3JlIGltcGFjdHMgaG93IGFnZ3Jlc3NpdmVseSBEQU1PTiByZWNsYWltcyBtZW1vcnkuIEFuIGF0dGFja2VyIGNvdWxkIHBvdGVudGlhbGx5IG1hbmlwdWxhdGUgbWVtb3J5IHJlY2xhaW0gZGVjaXNpb25zIGJhc2VkIG9uIHRoZSAqcmFuZG9tKiBjb250ZW50cyBvZiB1bmluaXRpYWxpemVkIGhlYXAgbWVtb3J5LiBUaGlzIGlzIGEgY2xhc3NpYyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2UgdnVsbmVyYWJpbGl0eS4gS01TQU4gaXMgdGhlICpwZXJmZWN0KiB0b29sIHRvIGNhdGNoIHRoaXMuXG5cbkxldCdzIGRvdWJsZS1jaGVjayB0aGF0IGBrbWFsbG9jX29iamAgYWN0dWFsbHkgY2FsbHMgYGttYWxsb2NgLCBub3QgYGt6YWxsb2NgOlxuXG5gYGBjXG4jZGVmaW5lIGttYWxsb2Nfb2JqKFZBUl9PUl9UWVBFLCAuLi4pIFxcXG5cdF9fYWxsb2Nfb2JqcyhrbWFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihWQVJfT1JfVFlQRSksIDEpXG5gYGBcblxuWWVwLCBpdCB1c2VzIGBrbWFsbG9jYC5cblxuVGhlIGNoYW5nZSBpbiBgbW0vZGFtb24vc3lzZnMuY2AgaXMgaXJyZWxldmFudDsgaXQncyBqdXN0IGZpeGluZyBhIGtkYW1vbmQgcmVmcmVzaCBpbnRlcnZhbCBpc3N1ZS5cblxuU28sIHRoZSBidWcgaXMgZGVmaW5pdGVseSB3aXRoIGBsYXN0X3BzaV90b3RhbGAsIHVzZWQgaW4gYG5vd19wc2lfdG90YWwgLSBnb2FsLVx1MDAzZWxhc3RfcHNpX3RvdGFsYCwgYW5kIHRoaXMgcmVzdWx0IGlzIHRoZW4gdXNlZCBpbiBhIGNvbXBhcmlzb24gd2l0aGluIGBtYXgoaGlnaGVzdF9zY29yZSwgLi4uKWAuIEtNU0FOICp3aWxsKiBjYXRjaCB0aGlzIGJlY2F1c2UgaXQgdXNlcyBhbiB1bmluaXRpYWxpemVkIHZhbHVlIGluIGEgY29uZGl0aW9uYWwgYnJhbmNoLiBUaGVyZSdzIG5vIHdheSBhcm91bmQgaXQuXG5cbkxldCdzIGNvbmZpcm0gdGhlIHR5cGUgb2YgYGRhbW9zX2dldF9zb21lX21lbV9wc2lfdG90YWwoKWAgaXMgYHU2NGAuXG5cbmBgYGNcbnU2NCBkYW1vc19nZXRfc29tZV9tZW1fcHNpX3RvdGFsKHZvaWQpXG5gYGBcblxuR29vZC5cblxuTGV0J3MgcmV2aWV3IHRoZSBLTVNBTiBydWxlczogVGhlIHBhdGNoIG1vZGlmaWVkIGluaXRpYWxpemF0aW9uIG9mIGEgY29tcGxleCBkYXRhIHN0cnVjdHVyZSAoYGRhbW9zX3F1b3RhX2dvYWxgKSB3aGVyZVxuXG4iLCJJbnB1dFRva2VucyI6MzA3OTAsIk91dHB1dFRva2VucyI6MzAwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNDo0NToyOS4xMzQ1MTU0NzhaIiwiU2VxIjo3OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGJ1ZyB3aGVyZSB0aGUgYGxhc3RfcHNpX3RvdGFsYCBmaWVsZCBpbiBgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWxgIGlzIGxlZnQgdW5pbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24uIFRoZSBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHVzaW5nIGBrbWFsbG9jX29iaigpYCAod2hpY2ggbWFwcyB0byBga21hbGxvY2AgYW5kIGRvZXMgbm90IHplcm8gbWVtb3J5KSBpbiBgZGFtb3NfbmV3X3F1b3RhX2dvYWwoKWAsIGJ1dCBgbGFzdF9wc2lfdG90YWxgIHdhcyBub3QgaW5pdGlhbGl6ZWQuIER1cmluZyB0aGUgZmlyc3QgZXZhbHVhdGlvbiBjeWNsZSwgYGRhbW9zX3NldF9xdW90YV9nb2FsX2N1cnJlbnRfdmFsdWUoKWAgcmVhZHMgdGhpcyB1bmluaXRpYWxpemVkIGZpZWxkIHRvIGNvbXB1dGUgYGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBub3dfcHNpX3RvdGFsIC0gZ29hbC1cXHUwMDNlbGFzdF9wc2lfdG90YWw7YC4gVGhpcyB1bmluaXRpYWxpemVkIHJlc3VsdCBpcyBzdWJzZXF1ZW50bHkgdXNlZCBpbiBhIGNvbmRpdGlvbmFsIGJyYW5jaCAodmlhIHRoZSBgbWF4KClgIG1hY3JvKSBpbiBgZGFtb3NfcXVvdGFfc2NvcmUoKWAgdG8gZGV0ZXJtaW5lIHRoZSBoaWdoZXN0IHF1b3RhIHNjb3JlLCB3aGljaCBkaWN0YXRlcyBtZW1vcnkgcmVjbGFpbSBiZWhhdmlvci5cXG5cXG5TdGFuZGFyZCBLQVNBTiBvbmx5IGRldGVjdHMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWUgYnVnczsgaXQgZG9lcyBub3QgdHJhY2sgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIHdvdWxkIGNvbXBsZXRlbHkgbWlzcyB0aGlzIGJ1Zy4gS01TQU4sIG9uIHRoZSBvdGhlciBoYW5kLCB0cmFja3MgdW5pbml0aWFsaXplZCBtZW1vcnkgYXQgdGhlIGJpdCBsZXZlbCBhbmQgd2lsbCByZWxpYWJseSBmbGFnIHRoZSB1c2Ugb2YgdGhlIHVuaW5pdGlhbGl6ZWQgdmFsdWUgd2hlbiBpdCBhZmZlY3RzIGNvbnRyb2wgZmxvdyAoZS5nLiwgaW4gdGhlIGBtYXgoKWAgY29tcGFyaXNvbikuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBoaWdobHkganVzdGlmaWVkIHRvIGNhdGNoIHRoaXMgYW5kIHNpbWlsYXIgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGluIHRoZSBEQU1PTiBzdWJzeXN0ZW0uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBidWcgd2hlcmUgdGhlIGBsYXN0X3BzaV90b3RhbGAgZmllbGQgaW4gYHN0cnVjdCBkYW1vc19xdW90YV9nb2FsYCBpcyBsZWZ0IHVuaW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uLiBUaGUgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB1c2luZyBga21hbGxvY19vYmooKWAgKHdoaWNoIG1hcHMgdG8gYGttYWxsb2NgIGFuZCBkb2VzIG5vdCB6ZXJvIG1lbW9yeSkgaW4gYGRhbW9zX25ld19xdW90YV9nb2FsKClgLCBidXQgYGxhc3RfcHNpX3RvdGFsYCB3YXMgbm90IGluaXRpYWxpemVkLiBEdXJpbmcgdGhlIGZpcnN0IGV2YWx1YXRpb24gY3ljbGUsIGBkYW1vc19zZXRfcXVvdGFfZ29hbF9jdXJyZW50X3ZhbHVlKClgIHJlYWRzIHRoaXMgdW5pbml0aWFsaXplZCBmaWVsZCB0byBjb21wdXRlIGBnb2FsLVxcdTAwM2VjdXJyZW50X3ZhbHVlID0gbm93X3BzaV90b3RhbCAtIGdvYWwtXFx1MDAzZWxhc3RfcHNpX3RvdGFsO2AuIFRoaXMgdW5pbml0aWFsaXplZCByZXN1bHQgaXMgc3Vic2VxdWVudGx5IHVzZWQgaW4gYSBjb25kaXRpb25hbCBicmFuY2ggKHZpYSB0aGUgYG1heCgpYCBtYWNybykgaW4gYGRhbW9zX3F1b3RhX3Njb3JlKClgIHRvIGRldGVybWluZSB0aGUgaGlnaGVzdCBxdW90YSBzY29yZSwgd2hpY2ggZGljdGF0ZXMgbWVtb3J5IHJlY2xhaW0gYmVoYXZpb3IuXFxuXFxuU3RhbmRhcmQgS0FTQU4gb25seSBkZXRlY3RzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3M7IGl0IGRvZXMgbm90IHRyYWNrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCB3b3VsZCBjb21wbGV0ZWx5IG1pc3MgdGhpcyBidWcuIEtNU0FOLCBvbiB0aGUgb3RoZXIgaGFuZCwgdHJhY2tzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGF0IHRoZSBiaXQgbGV2ZWwgYW5kIHdpbGwgcmVsaWFibHkgZmxhZyB0aGUgdXNlIG9mIHRoZSB1bmluaXRpYWxpemVkIHZhbHVlIHdoZW4gaXQgYWZmZWN0cyBjb250cm9sIGZsb3cgKGUuZy4sIGluIHRoZSBgbWF4KClgIGNvbXBhcmlzb24pLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgaGlnaGx5IGp1c3RpZmllZCB0byBjYXRjaCB0aGlzIGFuZCBzaW1pbGFyIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBpbiB0aGUgREFNT04gc3Vic3lzdGVtLlwiLFxuICBcIk5lZWRzS01TQU5cIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowz4j2t[1] Phase: Succeeded StartedAt: 2026-08-27 04:45:41 +0000 UTC FinishedAt: 2026-08-27 04:45:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz4j2t[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-27 04:45:41 +0000 UTC FinishedAt: 2026-08-27 04:45:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz4j2t[2] Phase: Succeeded StartedAt: 2026-08-27 04:45:41 +0000 UTC FinishedAt: 2026-08-27 05:16:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz4j2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"b6f5cc47-9651-4223-a739-e2141668ed75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-08-27 04:45:41 +0000 UTC FinishedAt: 2026-08-27 05:16:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_sysfs_set_quota_scores"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"b6f5cc47-9651-4223-a739-e2141668ed75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowz4j2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"b6f5cc47-9651-4223-a739-e2141668ed75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-27 04:45:41 +0000 UTC FinishedAt: 2026-08-27 04:45:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz4j2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"b6f5cc47-9651-4223-a739-e2141668ed75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-27 04:45:41 +0000 UTC FinishedAt: 2026-08-27 04:45:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz4j2t/series-workflowz4j2t-convert-artifact-3673190716/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz4j2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"b6f5cc47-9651-4223-a739-e2141668ed75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-27 04:45:51 +0000 UTC FinishedAt: 2026-08-27 05:02:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz4j2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"b6f5cc47-9651-4223-a739-e2141668ed75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-27 04:45:51 +0000 UTC FinishedAt: 2026-08-27 05:02:11 +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:*5df9a0c2-b725-4acc-8910-2900e0c0b60c,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-workflowz4j2t/series-workflowz4j2t-convert-artifact-3673190716/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": "fb291caa-144b-44fe-9dd7-3f6927ec0bca", "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-workflowz4j2t/series-workflowz4j2t-build-action-1723138666/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz4j2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"b6f5cc47-9651-4223-a739-e2141668ed75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-27 04:45:51 +0000 UTC FinishedAt: 2026-08-27 05:02:01 +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:*5df9a0c2-b725-4acc-8910-2900e0c0b60c,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-workflowz4j2t/series-workflowz4j2t-convert-artifact-3673190716/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": "fb291caa-144b-44fe-9dd7-3f6927ec0bca", "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-workflowz4j2t/series-workflowz4j2t-build-action-1723138666/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz4j2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"b6f5cc47-9651-4223-a739-e2141668ed75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-27 05:02:11 +0000 UTC FinishedAt: 2026-08-27 05:02:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz4j2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"b6f5cc47-9651-4223-a739-e2141668ed75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-27 05:02:11 +0000 UTC FinishedAt: 2026-08-27 05:02:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz4j2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"b6f5cc47-9651-4223-a739-e2141668ed75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-27 05:02:11 +0000 UTC FinishedAt: 2026-08-27 05:02:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz4j2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"b6f5cc47-9651-4223-a739-e2141668ed75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-27 05:02:11 +0000 UTC FinishedAt: 2026-08-27 05:02:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"b6f5cc47-9651-4223-a739-e2141668ed75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz4j2t/series-workflowz4j2t-convert-artifact-1880550779/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz4j2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"b6f5cc47-9651-4223-a739-e2141668ed75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-27 05:02:21 +0000 UTC FinishedAt: 2026-08-27 05:04:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz4j2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"b6f5cc47-9651-4223-a739-e2141668ed75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-27 05:02:21 +0000 UTC FinishedAt: 2026-08-27 05:04:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fb291caa-144b-44fe-9dd7-3f6927ec0bca,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-workflowz4j2t/series-workflowz4j2t-build-action-1723138666/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-workflowz4j2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"b6f5cc47-9651-4223-a739-e2141668ed75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-27 05:04:28 +0000 UTC FinishedAt: 2026-08-27 05:04:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz4j2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"b6f5cc47-9651-4223-a739-e2141668ed75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-27 05:04:28 +0000 UTC FinishedAt: 2026-08-27 05:04:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz4j2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"b6f5cc47-9651-4223-a739-e2141668ed75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-27 05:04:28 +0000 UTC FinishedAt: 2026-08-27 05:16:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz4j2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"b6f5cc47-9651-4223-a739-e2141668ed75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-27 05:04:28 +0000 UTC FinishedAt: 2026-08-27 05:16:30 +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:*5df9a0c2-b725-4acc-8910-2900e0c0b60c,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-workflowz4j2t/series-workflowz4j2t-convert-artifact-1880550779/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": "ba589a95-7a6a-4c62-84dc-f2fe194cdd4b", "success": false },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-workflowz4j2t/series-workflowz4j2t-build-action-3663028639/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz4j2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"b6f5cc47-9651-4223-a739-e2141668ed75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-27 05:04:28 +0000 UTC FinishedAt: 2026-08-27 05:16:20 +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:*5df9a0c2-b725-4acc-8910-2900e0c0b60c,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-workflowz4j2t/series-workflowz4j2t-convert-artifact-1880550779/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": "ba589a95-7a6a-4c62-84dc-f2fe194cdd4b", "success": false },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-workflowz4j2t/series-workflowz4j2t-build-action-3663028639/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz4j2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"b6f5cc47-9651-4223-a739-e2141668ed75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Failed StartedAt: 2026-08-27 05:16:30 +0000 UTC FinishedAt: 2026-08-27 05:16:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz4j2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_commit_quota_goals","damos_sysfs_set_quota_scores"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS"],"series_id":"b6f5cc47-9651-4223-a739-e2141668ed75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Failed StartedAt: 2026-08-27 05:16:30 +0000 UTC FinishedAt: 2026-08-27 05:16:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}