Name: series-workflowd9rq8 Phase: Failed StartedAt: 2026-07-07 14:48:57 +0000 UTC FinishedAt: 2026-07-07 15:13:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd9rq8[0] Phase: Succeeded StartedAt: 2026-07-07 14:48:57 +0000 UTC FinishedAt: 2026-07-07 15:12:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd9rq8[0].run-triage Phase: Succeeded StartedAt: 2026-07-07 14:48:57 +0000 UTC FinishedAt: 2026-07-07 15:12:59 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE1OjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBpdWN2X3NldmVyX3BhdGhgIGluIGBhZl9pdWN2LmNgIHRvIGNsZWFyIHRoZSBgbWVzc2FnZV9xYCBsaXN0LiBIb3dldmVyLCB0aGlzIGZ1bmN0aW9uIG9ubHkgZXhlY3V0ZXMgaXRzIGxvZ2ljIGlmIGBpdWN2LVx1MDAzZXBhdGhgIGlzIG5vbi1OVUxMLiBgaXVjdi1cdTAwM2VwYXRoYCBpcyBvbmx5IGFsbG9jYXRlZCB3aGVuIHRoZSB0cmFuc3BvcnQgaXMgYEFGX0lVQ1ZfVFJBTlNfSVVDVmAsIHdoaWNoIGluIHR1cm4gaXMgb25seSBzZWxlY3RlZCBpZiBgcHJfaXVjdmAgaXMgbm9uLU5VTEwuIGBwcl9pdWN2YCBpcyBpbml0aWFsaXplZCBvbmx5IHdoZW4gYG1hY2hpbmVfaXNfdm0oKWAgaXMgdHJ1ZSwgbWVhbmluZyB0aGUga2VybmVsIG11c3QgYmUgcnVubmluZyB1bmRlciB0aGUgcHJvcHJpZXRhcnkgSUJNIHovVk0gaHlwZXJ2aXNvci4gU2luY2UgUUVNVS9LVk0gZW52aXJvbm1lbnRzIGRvIG5vdCBlbXVsYXRlIHovVk0gKHRoZXkgaWRlbnRpZnkgYXMgS1ZNIG9yIFFFTVUpLCB0aGlzIGNvZGUgcGF0aCBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNTowODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDdlYjEyOTM0YzUyYTI5MTRlMTc1MGIxZjJlYzgxZDM4ODYyZDQ5NjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCA3IDE1OjA4OjI5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pdWN2L2FmX2l1Y3YuYyBiL25ldC9pdWN2L2FmX2l1Y3YuY1xuaW5kZXggZmVkMjQwYjQ1M2JkOWIuLjI4NjlhMTAzZjdmYTJhIDEwMDY0NFxuLS0tIGEvbmV0L2l1Y3YvYWZfaXVjdi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXVjdi9hZl9pdWN2LmNcbkBAIC0zMzcsNiAmIzQzOzMzNyw3IEBAIHN0YXRpYyB2b2lkIGl1Y3Zfc2V2ZXJfcGF0aChzdHJ1Y3Qgc29jayAqc2ssIGludCB3aXRoX3VzZXJfZGF0YSlcbiBcdHVuc2lnbmVkIGNoYXIgdXNlcl9kYXRhWzE2XTtcbiBcdHN0cnVjdCBpdWN2X3NvY2sgKml1Y3YgPSBpdWN2X3NrKHNrKTtcbiBcdHN0cnVjdCBpdWN2X3BhdGggKnBhdGggPSBpdWN2LVx1MDAzZXBhdGg7XG4mIzQzO1x0c3RydWN0IHNvY2tfbXNnX3EgKnAsICpuO1xuIFxuIFx0LyogV2hvZXZlciByZXNldHMgdGhlIHBhdGggcG9pbnRlciwgbXVzdCBzZXZlciBhbmQgZnJlZSBpdC4gKi9cbiBcdGlmICh4Y2hnKFx1MDAyNml1Y3YtXHUwMDNlcGF0aCwgTlVMTCkpIHtcbkBAIC0zNDgsNiAmIzQzOzM0OSwxOSBAQCBzdGF0aWMgdm9pZCBpdWN2X3NldmVyX3BhdGgoc3RydWN0IHNvY2sgKnNrLCBpbnQgd2l0aF91c2VyX2RhdGEpXG4gXHRcdH0gZWxzZVxuIFx0XHRcdHByX2l1Y3YtXHUwMDNlcGF0aF9zZXZlcihwYXRoLCBOVUxMKTtcbiBcdFx0aXVjdl9wYXRoX2ZyZWUocGF0aCk7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIE1lc3NhZ2Ugbm90aWZpY2F0aW9ucyBxdWV1ZWQgb24gbWVzc2FnZV9xIHN0aWxsIHJlZmVyZW5jZVxuJiM0MztcdFx0ICogdGhlIG5vdyBmcmVlZCBwYXRoOyBkcm9wIHRoZW0sIG90aGVyd2lzZSBhIGxhdGVyIHJlY3Ztc2coKVxuJiM0MztcdFx0ICogd291bGQgcGFzcyB0aGUgZnJlZWQgaXVjdl9wYXRoIHRvIG1lc3NhZ2VfcmVjZWl2ZSgpIHZpYVxuJiM0MztcdFx0ICogaXVjdl9wcm9jZXNzX21lc3NhZ2VfcSgpLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRzcGluX2xvY2tfYmgoXHUwMDI2aXVjdi1cdTAwM2VtZXNzYWdlX3EubG9jayk7XG4mIzQzO1x0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbiwgXHUwMDI2aXVjdi1cdTAwM2VtZXNzYWdlX3EubGlzdCwgbGlzdCkge1xuJiM0MztcdFx0XHRsaXN0X2RlbChcdTAwMjZwLVx1MDAzZWxpc3QpO1xuJiM0MztcdFx0XHRrZnJlZShwKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNml1Y3YtXHUwMDNlbWVzc2FnZV9xLmxvY2spO1xuIFx0fVxuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNTowODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaXVjdl9zZXZlcl9wYXRoYCBpbiBgYWZfaXVjdi5jYCB0byBjbGVhciB0aGUgYG1lc3NhZ2VfcWAgbGlzdC4gSG93ZXZlciwgdGhpcyBmdW5jdGlvbiBvbmx5IGV4ZWN1dGVzIGl0cyBsb2dpYyBpZiBgaXVjdi1cdTAwM2VwYXRoYCBpcyBub24tTlVMTC4gYGl1Y3YtXHUwMDNlcGF0aGAgaXMgb25seSBhbGxvY2F0ZWQgd2hlbiB0aGUgdHJhbnNwb3J0IGlzIGBBRl9JVUNWX1RSQU5TX0lVQ1ZgLCB3aGljaCBpbiB0dXJuIGlzIG9ubHkgc2VsZWN0ZWQgaWYgYHByX2l1Y3ZgIGlzIG5vbi1OVUxMLiBgcHJfaXVjdmAgaXMgaW5pdGlhbGl6ZWQgb25seSB3aGVuIGBtYWNoaW5lX2lzX3ZtKClgIGlzIHRydWUsIG1lYW5pbmcgdGhlIGtlcm5lbCBtdXN0IGJlIHJ1bm5pbmcgdW5kZXIgdGhlIHByb3ByaWV0YXJ5IElCTSB6L1ZNIGh5cGVydmlzb3IuIFNpbmNlIFFFTVUvS1ZNIGVudmlyb25tZW50cyBkbyBub3QgZW11bGF0ZSB6L1ZNICh0aGV5IGlkZW50aWZ5IGFzIEtWTSBvciBRRU1VKSwgdGhpcyBjb2RlIHBhdGggaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDdlYjEyOTM0YzUyYTI5MTRlMTc1MGIxZjJlYzgxZDM4ODYyZDQ5NjYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1bCA3IDE1OjA4OjI5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2l1Y3YvYWZfaXVjdi5jIGIvbmV0L2l1Y3YvYWZfaXVjdi5jCmluZGV4IGZlZDI0MGI0NTNiZDliLi4yODY5YTEwM2Y3ZmEyYSAxMDA2NDQKLS0tIGEvbmV0L2l1Y3YvYWZfaXVjdi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pdWN2L2FmX2l1Y3YuYwpAQCAtMzM3LDYgJiM0MzszMzcsNyBAQCBzdGF0aWMgdm9pZCBpdWN2X3NldmVyX3BhdGgoc3RydWN0IHNvY2sgKnNrLCBpbnQgd2l0aF91c2VyX2RhdGEpCiAJdW5zaWduZWQgY2hhciB1c2VyX2RhdGFbMTZdOwogCXN0cnVjdCBpdWN2X3NvY2sgKml1Y3YgPSBpdWN2X3NrKHNrKTsKIAlzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoID0gaXVjdi0mZ3Q7cGF0aDsKJiM0MzsJc3RydWN0IHNvY2tfbXNnX3EgKnAsICpuOwogCiAJLyogV2hvZXZlciByZXNldHMgdGhlIHBhdGggcG9pbnRlciwgbXVzdCBzZXZlciBhbmQgZnJlZSBpdC4gKi8KIAlpZiAoeGNoZygmYW1wO2l1Y3YtJmd0O3BhdGgsIE5VTEwpKSB7CkBAIC0zNDgsNiAmIzQzOzM0OSwxOSBAQCBzdGF0aWMgdm9pZCBpdWN2X3NldmVyX3BhdGgoc3RydWN0IHNvY2sgKnNrLCBpbnQgd2l0aF91c2VyX2RhdGEpCiAJCX0gZWxzZQogCQkJcHJfaXVjdi0mZ3Q7cGF0aF9zZXZlcihwYXRoLCBOVUxMKTsKIAkJaXVjdl9wYXRoX2ZyZWUocGF0aCk7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogTWVzc2FnZSBub3RpZmljYXRpb25zIHF1ZXVlZCBvbiBtZXNzYWdlX3Egc3RpbGwgcmVmZXJlbmNlCiYjNDM7CQkgKiB0aGUgbm93IGZyZWVkIHBhdGg7IGRyb3AgdGhlbSwgb3RoZXJ3aXNlIGEgbGF0ZXIgcmVjdm1zZygpCiYjNDM7CQkgKiB3b3VsZCBwYXNzIHRoZSBmcmVlZCBpdWN2X3BhdGggdG8gbWVzc2FnZV9yZWNlaXZlKCkgdmlhCiYjNDM7CQkgKiBpdWN2X3Byb2Nlc3NfbWVzc2FnZV9xKCkuCiYjNDM7CQkgKi8KJiM0MzsJCXNwaW5fbG9ja19iaCgmYW1wO2l1Y3YtJmd0O21lc3NhZ2VfcS5sb2NrKTsKJiM0MzsJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuLCAmYW1wO2l1Y3YtJmd0O21lc3NhZ2VfcS5saXN0LCBsaXN0KSB7CiYjNDM7CQkJbGlzdF9kZWwoJmFtcDtwLSZndDtsaXN0KTsKJiM0MzsJCQlrZnJlZShwKTsKJiM0MzsJCX0KJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7aXVjdi0mZ3Q7bWVzc2FnZV9xLmxvY2spOwogCX0KIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTE1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIHRvIGBuZXQvaXVjdi9hZl9pdWN2LmNgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgdHdlYWtpbmcgYGl1Y3Zfc2V2ZXJfcGF0aGAgaW4gYG5ldC9pdWN2L2FmX2l1Y3YuY2AuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSB0aGUgY2hhbmdlIGlzIGNsZWFyaW5nIHRoZSBgbWVzc2FnZV9xYCBsaXN0LiBUaGF0JiMzOTtzIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24sIGZvciBzdXJlLiBCZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGNvZGUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBlbnZpcm9ubWVudCB0aGlzIGNvZGUgcnVucyBpbi4KCkZpcnN0IHRob3VnaHQ6IElVQ1YgLSBsZXQgbWUgcmVtaW5kIG15c2VsZiB3aGF0IHRoYXQgaXMuLi4gcmlnaHQsICYjMzQ7SW50cmEtVXNlciBDb21tdW5pY2F0aW9uIFZlaGljbGUuJiMzNDsgSXQmIzM5O3MgYW4gSUJNIHovVk0tc3BlY2lmaWMgcHJvdG9jb2wuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGNvZGUgaXMgZ29pbmcgdG8gYmUgczM5MCBzcGVjaWZpYy4gU28gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgaG93IHRoaXMgaW50ZXJhY3RzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIElzIGBuZXQvaXVjdi9hZl9pdWN2LmNgIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nPyBJJiMzOTtkIGJldHRlciBjb25maXJtIHdoZXJlIHRoaXMgaXMgdXNlZC4gVG8gZG8gdGhhdCBJJiMzOTtsbCBxdWlja2x5IGxvb2sgYXQgYG5ldC9pdWN2L0tjb25maWdgIG9yIGV2ZW4gYG5ldC9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgaXMgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGluZyBhcm91bmQgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTU6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElVQ1YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXVjdi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pdWN2L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9pdWN2L0tjb25maWc6Mjpjb25maWcgSVVDVlxubmV0L2l1Y3YvS2NvbmZpZy0zLVx0ZGVwZW5kcyBvbiBTMzkwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTU6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYxOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25zaWRlcmluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIFMzOTAgQ29kZSBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyB0aGUgcHJvbXB0IG1lbnRpb25zIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtBaCwgdGhpcyAqZGVwZW5kcyogb24gUzM5MC4mIzM0OyBDYW4gd2UgZXZlbiBmdXp6IFMzOTAgY29kZSBlZmZlY3RpdmVseT8gU3l6a2FsbGVyICpkb2VzKiBzdXBwb3J0IHMzOTB4LCB3aGljaCBpcyBwcm9taXNpbmcuIEhvd2V2ZXIsIHR5cGljYWxseSwgd2UmIzM5O3JlIHJ1bm5pbmcgeDg2XzY0IG9yIGFybTY0IGluIG91ciB1c3VhbCBmdXp6aW5nIHNldHVwcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGUgcHJvbXB0IGFuZCB0aGUgc3BlY2lmaWMgdGFyZ2V0LiBUaGUgcHJvbXB0IHRoZW4gc3RyZXNzZXMgdGhlIGlzc3VlIG9mIGVtdWxhdGVkIGhhcmR3YXJlIHN1Y2ggYXMgdXNiIGdhZGdldHMgb3IgbWFjODAyMTFfaHdzaW0gYmVpbmcgdW5yZWFjaGFibGUuCgpCdXQgd2FpdCwgUUVNVSBjYW4gZW11bGF0ZSBzMzkweCwgYW5kIHRoYXQgc2hvdWxkIGJlIGVub3VnaCBmb3IgYmFzaWMgb3BlcmF0aW9uLCByaWdodD8gVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogSXMgdGhlICpzcGVjaWZpYyogY29kZSB0aGV5JiMzOTtyZSB0YWxraW5nIGFib3V0IHJlYWNoYWJsZSAqd2l0aG91dCogcmVseWluZyBvbiBhIGRlZGljYXRlZCB6L1ZNIGh5cGVydmlzb3I/IEkgY2FuIHByb2JhYmx5IGdldCB0aGUgYmFzaWMgQ1BVLCBhbmQgc29tZSBkZXZpY2VzLCBidXQgaXQgY291bGQgYmUgdGhlIGNhc2UgdGhhdCBhIHNwZWNpZmljIGVtdWxhdGVkIGRldmljZSBoYXMgYW4gaXNzdWUgdGhhdCByZXF1aXJlcyBhIHNwZWNpZmljIGh5cGVydmlzb3IgZmVhdHVyZS4KCkkmIzM5O2QgYmV0dGVyIGNoZWNrIGBuZXQvaXVjdi9LY29uZmlnYCBhZ2FpbiB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pdWN2L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgSVVDVlxuICAgMzpcdFx0ZGVwZW5kcyBvbiBTMzkwXG4gICA0Olx0XHRkZWZfdHJpc3RhdGUgeSBpZiBTMzkwXG4gICA1Olx0XHRwcm9tcHQgXCYjMzQ7SVVDViBzdXBwb3J0IChTMzkwIC0gei9WTSBvbmx5KVwmIzM0O1xuICAgNjpcdFx0aGVscFxuICAgNzpcdFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gdXNlIGludGVyLXVzZXIgY29tbXVuaWNhdGlvblxuICAgODpcdFx0ICB1bmRlciBWTSBvciBWSUYuIElmIHlvdSBydW4gb24gei9WTSwgc2F5IFwmIzM0O1lcJiMzNDsgdG8gZW5hYmxlIGEgZmFzdFxuICAgOTpcdFx0ICBjb21tdW5pY2F0aW9uIGxpbmsgYmV0d2VlbiBWTSBndWVzdHMuXG4gIDEwOlx0XG4gIDExOlx0Y29uZmlnIEFGSVVDVlxuICAxMjpcdFx0ZGVwZW5kcyBvbiBTMzkwXG4gIDEzOlx0XHRkZWZfdHJpc3RhdGUgbSBpZiBRRVRIX0wzIHx8IElVQ1ZcbiAgMTQ6XHRcdHByb21wdCBcJiMzNDtBRl9JVUNWIFNvY2tldCBzdXBwb3J0IChTMzkwIC0gei9WTSBhbmQgSGlwZXJTb2NrZXRzIHRyYW5zcG9ydClcJiMzNDtcbiAgMTU6XHRcdGhlbHBcbiAgMTY6XHRcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHVzZSBBRl9JVUNWIHNvY2tldCBhcHBsaWNhdGlvbnNcbiAgMTc6XHRcdCAgYmFzZWQgb24gei9WTSBpbnRlci11c2VyIGNvbW11bmljYXRpb24gdmVoaWNsZSBvciBiYXNlZCBvblxuICAxODpcdFx0ICBIaXBlclNvY2tldHMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTU6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM4MwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBJVUNWIGFuZCBBRklVQ1YgZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIG5vdGVzIGFuZCBJIHNlZSB0aGF0IElVQ1YgaXMgc3BlY2lmaWNhbGx5IGZvciB6L1ZNLCBidXQgQUZJVUNWIHN1cHBvcnRzIEhpcGVyU29ja2V0cyAqYW5kKiB6L1ZNLiBIbW0sIHRoZSBxdWVzdGlvbiB0aGF0IGltbWVkaWF0ZWx5IHBvcHMgaW50byBteSBoZWFkIGlzOiBjYW4gdGhpcyBldmVuIHJ1biB1bmRlciBRRU1VPyBOb3csIEkga25vdyB0aGUgUUVNVSBzMzkweCBlbXVsYXRpb24sIGJ1dCBJJiMzOTttIHByZXR0eSBzdXJlIGl0IGRvZXNuJiMzOTt0IGVtdWxhdGUgei9WTSBJVUNWIGRpcmVjdGx5OyBpdCYjMzk7cyBtb3JlIGdlYXJlZCB0b3dhcmRzIEtWTS9RRU1VLCBvZiBjb3Vyc2UuCgpXYWl0IGEgc2Vjb25kLCB0aGUgbm90ZXMgc2F5IEFGSVVDViAqY2FuKiB1c2UgSGlwZXJTb2NrZXRzLiBUaGF0JiMzOTtzIGEga2V5IGRldGFpbC4gQnV0IHRoZSB1bmRlcmx5aW5nIGRlcGVuZGVuY3kgaXMgc3RpbGwgb24gdGhlIFMzOTAgYXJjaGl0ZWN0dXJlLiBTbywgaWYgSSYjMzk7bSBmdXp6aW5nIGFuIHg4Nl82NCBvciBhcm02NCB0YXJnZXQsIEkmIzM5O20gcHJldHR5IG11Y2ggZGVhZCBpbiB0aGUgd2F0ZXI7IEkgd29uJiMzOTt0IGJlIGFibGUgdG8gYnVpbGQgdGhpcyBjb2RlLiBIb3dldmVyLCBpZiBJJiMzOTttIG9uIHMzOTB4LCB0aGVuIGl0JiMzOTtzIGEgcG9zc2liaWxpdHkuCgpOb3csIGRpZCB0aGUgcHJvbXB0IHNheSBhbnl0aGluZyBhYm91dCBleGNsdWRpbmcgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGU/IExldCBtZSByZXJlYWQgaXQuLi4gJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuJiMzNDsgT2theSwgd2FpdCwgUUVNVSAqY2FuKiBlbXVsYXRlIHMzOTB4ISBTbywgdGhhdCBjb2RlICpzaG91bGQqIGJlIHJlYWNoYWJsZSBpbiBhIFFFTVUgKHMzOTB4KSBlbnZpcm9ubWVudC4KCkhhbmcgb24uLi4gaXMgaXQgKmltcG9zc2libGUqIHRvIHJlYWNoIGl0IGluIFFFTVU/IEkgbmVlZCB0byB0aGluayB0aGlzIHRocm91Z2guIENhbiBJIGNyZWF0ZSBgQUZfSVVDVmAgc29ja2V0cyAqd2l0aG91dCogei9WTT8gVGhhdCYjMzk7cyB0aGUgcmVhbCBxdWVzdGlvbi4gSWYgSSAqY2FuKiBjcmVhdGUgdGhvc2Ugc29ja2V0cywgYW5kIGlmIHRoZSBjb2RlIHBhdGhzIGxlYWRpbmcgdG8gYGl1Y3Zfc2VydmVyX3BhdGhgIGNhbiBiZSByZWFjaGVkLi4uIHRoZW4gd2UgYXJlIGdvbGRlbi4gSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTU6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXVjdl9zZXZlcl9wYXRoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYz0zMjQ9c3RhdGljIHZvaWQgaXVjdl9zb2NrX2tpbGwoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0zMzQtLyogVGVybWluYXRlIGFuIElVQ1YgcGF0aCAqL1xubmV0L2l1Y3YvYWZfaXVjdi5jOjMzNTpzdGF0aWMgdm9pZCBpdWN2X3NldmVyX3BhdGgoc3RydWN0IHNvY2sgKnNrLCBpbnQgd2l0aF91c2VyX2RhdGEpXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzM2LXtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9Mzk1PXN0YXRpYyB2b2lkIGl1Y3Zfc29ja19jbG9zZShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ0Mi1cdGRlZmF1bHQ6XG5uZXQvaXVjdi9hZl9pdWN2LmM6NDQzOlx0XHRpdWN2X3NldmVyX3BhdGgoc2ssIDEpO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTQ0NC1cdH1cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9NzMzPXN0YXRpYyBpbnQgaXVjdl9zb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTc4MS1cdGlmIChlcnIgXHUwMDI2XHUwMDI2IGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVilcbm5ldC9pdWN2L2FmX2l1Y3YuYzo3ODI6XHRcdGl1Y3Zfc2V2ZXJfcGF0aChzaywgMCk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNzgzLVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNjA3PXN0YXRpYyBpbnQgaXVjdl9jYWxsYmFja19jb25ucmVxKHN0cnVjdCBpdWN2X3BhdGggKnBhdGgsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2ODctXHRpZiAoZXJyKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTY4ODpcdFx0aXVjdl9zZXZlcl9wYXRoKG5zaywgMSk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY4OS1cdFx0aXVjdl9zb2NrX2tpbGwobnNrKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTgwMT1zdGF0aWMgdm9pZCBpdWN2X2NhbGxiYWNrX2Nvbm5yZWooc3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCwgdTggaXB1c2VyWzE2XSlcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTgwOC1cdGJoX2xvY2tfc29jayhzayk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTgwOTpcdGl1Y3Zfc2V2ZXJfcGF0aChzaywgMSk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTgxMC1cdHNrLVx1MDAzZXNrX3N0YXRlID0gSVVDVl9ESVNDT05OO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE1OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3ODIKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGBpdWN2X3NldmVyX3BhdGhgKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGBpdWN2X3NldmVyX3BhdGhgIGlzIGFjdHVhbGx5IHJlYWNoYWJsZSBmcm9tIHdoZXJlIGl0JiMzOTtzIGJlaW5nIGNhbGxlZC4gSSBzZWUgaXQmIzM5O3MgYmVpbmcgaW52b2tlZCBmcm9tIGEgZmV3IGtleSBwbGFjZXMgaW4gdGhlIElVQ1Ygc29ja2V0IGNvZGU6IGBpdWN2X3NvY2tfY2xvc2VgLCBgaXVjdl9zb2NrX2Nvbm5lY3RgLCBgaXVjdl9jYWxsYmFja19jb25ucmVxYCwgYW5kIGBpdWN2X2NhbGxiYWNrX2Nvbm5yZWpgLiBUaGF0JiMzOTtzIHRoZSBjb3JlIG9mIGNvbm5lY3Rpb24gbWFuYWdlbWVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdlJiMzOTtyZSByZWFjaGluZyB0aG9zZSBmdW5jdGlvbnMuCgpTbywgbGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIGJhc2ljcy4gQ2FuIHdlIGV2ZW4gaW5zdGFudGlhdGUgYW4gQUZfSVVDViBzb2NrZXQ/IFRoYXQgbWVhbnMgZXhhbWluaW5nIHRoZSBgc29ja2V0KClgIGNhbGwgd2l0aCBgQUZfSVVDVmAsIGBTT0NLX1NUUkVBTWAsIGFuZCAwIGZvciB0aGUgcHJvdG9jb2wuIElmIHdlIGNhbiYjMzk7dCBjcmVhdGUgdGhlIHNvY2tldCBpbiB0aGUgZmlyc3QgcGxhY2UsIHRoZW4gdGhpcyB3aG9sZSBwYXRoIGlzIG1vb3QuCgpUaGF0IGJyaW5ncyBtZSB0byBgaXVjdl9zb2NrX2NyZWF0ZWAuIEkmIzM5O2xsIG5lZWQgdG8gZGl2ZSBpbnRvIHRoYXQgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzIG9mIHRoZSBJVUNWIHNvY2tldCBjcmVhdGlvbiBwcm9jZXNzIGFuZCB3aGVyZSBgaXVjdl9zZXZlcl9wYXRoYCBtaWdodCBiZSByZWxldmFudC4gSXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBmaWd1cmluZyBvdXQgd2hhdCBjb25kaXRpb25zIGNhbiBhbGxvdyBmb3IgaXRzIHVzZS4gSSBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGFueSBhc3NvY2lhdGVkIGVycm9yIGNvbmRpdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE1OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2l1Y3Zfc29ja19jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jPTIyMzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgaXVjdl9zb2NrX29wcyA9IHtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI1My1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjU0OnN0YXRpYyBpbnQgaXVjdl9zb2NrX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjU1LVx0XHRcdCAgICBpbnQga2Vybilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjI4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9wcm90b19mYW1pbHkgaXVjdl9zb2NrX2ZhbWlseV9vcHMgPSB7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyODUtXHQub3duZXJcdD0gVEhJU19NT0RVTEUsXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjI4NjpcdC5jcmVhdGVcdD0gaXVjdl9zb2NrX2NyZWF0ZSxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjg3LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE1OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NjcKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgaXVjdl9zb2NrX2NyZWF0ZWAmIzM5O3MgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkcmlsbCBkb3duIG9uIHRoaXMgYGl1Y3Zfc29ja19jcmVhdGVgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgdGhpcyBpcyBkZWVwbHkgdGllZCB0byB0aGUgei9WTSBlbnZpcm9ubWVudCwgZ2l2ZW4gaXRzIGxpa2VseSBpbnRlcmFjdGlvbiB3aXRoIElVQ1YuIEJ1dCwgYmVmb3JlIEkganVtcCB0byBhbnkgY29uY2x1c2lvbnMsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBhc3N1bXB0aW9uLiBUaGUgY29yZSBxdWVzdGlvbiBpczogZG9lcyB0aGlzIGZ1bmN0aW9uICptYW5kYXRvcmlseSogcmVxdWlyZSB0aGUgei9WTSBoeXBlcnZpc29yIHRvIGZ1bmN0aW9uLCBvciBoYXMgaXQgYmVlbiBkZXNpZ25lZCBpbiBhIHdheSB0aGF0IGFsbG93cyBpdCB0byBvcGVyYXRlLCBhbGJlaXQgcGVyaGFwcyB3aXRoIHJlZHVjZWQgZnVuY3Rpb25hbGl0eSBvciB1bmRlciBzcGVjaWZpYyBjb25kaXRpb25zLCBvbiBhIGJhcmUgczM5MHggc3lzdGVtPyBLbm93aW5nIHRoaXMgd2lsbCBzaWduaWZpY2FudGx5IGluZmx1ZW5jZSBob3cgcG9ydGFibGUgYW55IGNvZGUgdXNpbmcgdGhpcyBpcy4gVGltZSB0byBkaWcgaW50byB0aGUgc291cmNlIGFuZCBjcm9zcy1yZWZlcmVuY2UgdGhlIGRvY3VtZW50YXRpb24gdG8gY29uZmlybSBpdHMgZW52aXJvbm1lbnRhbCByZXF1aXJlbWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE1OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjI1NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMjU0Olx0c3RhdGljIGludCBpdWN2X3NvY2tfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxuMjI1NTpcdFx0XHRcdCAgICBpbnQga2VybilcbjIyNTY6XHR7XG4yMjU3Olx0XHRzdHJ1Y3Qgc29jayAqc2s7XG4yMjU4Olx0XG4yMjU5Olx0XHRpZiAocHJvdG9jb2wgXHUwMDI2XHUwMDI2IHByb3RvY29sICE9IFBGX0lVQ1YpXG4yMjYwOlx0XHRcdHJldHVybiAtRVBST1RPTk9TVVBQT1JUO1xuMjI2MTpcdFxuMjI2MjpcdFx0c29jay1cdTAwM2VzdGF0ZSA9IFNTX1VOQ09OTkVDVEVEO1xuMjI2MzpcdFxuMjI2NDpcdFx0c3dpdGNoIChzb2NrLVx1MDAzZXR5cGUpIHtcbjIyNjU6XHRcdGNhc2UgU09DS19TVFJFQU06XG4yMjY2Olx0XHRjYXNlIFNPQ0tfU0VRUEFDS0VUOlxuMjI2NzpcdFx0XHQvKiBjdXJyZW50bHksIHByb3RvIG9wcyBjYW4gaGFuZGxlIGJvdGggc2sgdHlwZXMgKi9cbjIyNjg6XHRcdFx0c29jay1cdTAwM2VvcHMgPSBcdTAwMjZpdWN2X3NvY2tfb3BzO1xuMjI2OTpcdFx0XHRicmVhaztcbjIyNzA6XHRcdGRlZmF1bHQ6XG4yMjcxOlx0XHRcdHJldHVybiAtRVNPQ0tUTk9TVVBQT1JUO1xuMjI3MjpcdFx0fVxuMjI3MzpcdFxuMjI3NDpcdFx0c2sgPSBpdWN2X3NvY2tfYWxsb2Moc29jaywgcHJvdG9jb2wsIEdGUF9LRVJORUwsIGtlcm4pO1xuMjI3NTpcdFx0aWYgKCFzaylcbjIyNzY6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4yMjc3Olx0XG4yMjc4Olx0XHRpdWN2X3NvY2tfaW5pdChzaywgTlVMTCk7XG4yMjc5Olx0XG4yMjgwOlx0XHRyZXR1cm4gMDtcbjIyODE6XHR9XG4yMjgyOlx0XG4yMjgzOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfcHJvdG9fZmFtaWx5IGl1Y3Zfc29ja19mYW1pbHlfb3BzID0ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTM2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgdGhlIENyZWF0aW9uIFByb2Nlc3MqKgoKSSBzZWUgdGhlIHBvc3NpYmlsaXR5IG9mIHNvbWV0aGluZyBiZWluZyBjcmVhdGVkLiBCdXQgdGhlbiBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGBpdWN2X3NldmVyX3BhdGhgLiBXaHk/IEJlY2F1c2UgaXQmIzM5O3MgdGhlIGNyaXRpY2FsIGp1bmN0dXJlIGluIHRoaXMgcHJvY2Vzcy4gSSYjMzk7bSBmb2N1c2luZyBpbiBvbiB0aGUgbGluZSB0aGF0IHJlYWRzIGBpZiAoeGNoZygmYW1wO2l1Y3YtJmd0O3BhdGgsIE5VTEwpKWAuIFRoaXMgaXMgYSBjcnVjaWFsIGNoZWNrLiBJdCYjMzk7cyB1c2luZyBgeGNoZ2Agd2hpY2gsIGlmIEkgcmVtZW1iZXIgY29ycmVjdGx5LCBpcyBhbiBhdG9taWMgZXhjaGFuZ2Ugb3BlcmF0aW9uLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBhc2tpbmcsICYjMzQ7SGFzIHNvbWV0aGluZyBiZWVuIHNldCBpbiBgaXVjdi0mZ3Q7cGF0aGAgYWxyZWFkeT8gSXMgdGhlcmUgYWxyZWFkeSBhIHBhdGh3YXkgY3JlYXRlZD8KCk15IG5leHQgdGhvdWdodCwgaW5zdGluY3RpdmVseSwgaXMgdG8gdHJhY2UgYmFjazogKldoZW4qIGV4YWN0bHkgaXMgYGl1Y3YtJmd0O3BhdGhgIGluaXRpYWxpemVkPyBCZWZvcmUgaXQmIzM5O3MgZXZlbiBjcmVhdGVkLCBvciByaWdodCBhZnRlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNlcXVlbmNlIG9mIGV2ZW50cyBsZWFkaW5nIHVwIHRvIHRoaXMgcG9pbnQuIEtub3dpbmcgd2hlbiBgaXVjdi0mZ3Q7cGF0aGAgaXMgcG9wdWxhdGVkIGlzIGFic29sdXRlbHkgZnVuZGFtZW50YWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgbG9naWMgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG9yLCBtb3JlIGltcG9ydGFudGx5LCB0aGUgaW50ZW5kZWQgZGVzaWduIGhlcmUuIFRoZSB3aG9sZSBwaWN0dXJlIG5lZWRzIHRvIGJlIHB1dCB0b2dldGhlciBhbmQgaXRzIGZ1bmN0aW9uYWxpdHkgbmVlZHMgdG8gYmUgZ3Jhc3BlZCBjb21wbGV0ZWx5IHRvIHByb3Blcmx5IGNyZWF0ZSBvciBpbXBsZW1lbnQgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE1OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2l1Y3YtXHUwMDNlcGF0aCA9JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYz00NjY9c3RhdGljIHN0cnVjdCBzb2NrICppdWN2X3NvY2tfYWxsb2Moc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvLCBnZnBfdCBwcmlvLCBpbnQga2Vybilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDg5LVx0YXRvbWljX3NldChcdTAwMjZpdWN2LVx1MDAzZW1zZ19yZWN2LCAwKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzo0OTA6XHRpdWN2LVx1MDAzZXBhdGggPSBOVUxMO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTQ5MS1cdGl1Y3YtXHUwMDNlc2tfdHhub3RpZnkgPSBhZml1Y3ZfaHNfY2FsbGJhY2tfdHhub3RpZnk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTY4Nz1zdGF0aWMgaW50IGFmaXVjdl9wYXRoX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTY5OS1cdC8qIENyZWF0ZSBwYXRoLiAqL1xubmV0L2l1Y3YvYWZfaXVjdi5jOjcwMDpcdGl1Y3YtXHUwMDNlcGF0aCA9IGl1Y3ZfcGF0aF9hbGxvYyhpdWN2LVx1MDAzZW1zZ2xpbWl0LFxubmV0L2l1Y3YvYWZfaXVjdi5jLTcwMS1cdFx0XHRcdCAgICAgSVVDVl9JUFJNREFUQSwgR0ZQX0tFUk5FTCk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTcxMC1cdFx0aXVjdl9wYXRoX2ZyZWUoaXVjdi1cdTAwM2VwYXRoKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzo3MTE6XHRcdGl1Y3YtXHUwMDNlcGF0aCA9IE5VTEw7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNzEyLVx0XHRzd2l0Y2ggKGVycikge1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNjA3PXN0YXRpYyBpbnQgaXVjdl9jYWxsYmFja19jb25ucmVxKHN0cnVjdCBpdWN2X3BhdGggKnBhdGgsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NzUtXHRtZW1jcHkobml1Y3YtXHUwMDNlc3JjX3VzZXJfaWQsIGl1Y3YtXHUwMDNlc3JjX3VzZXJfaWQsIDgpO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE2NzY6XHRuaXVjdi1cdTAwM2VwYXRoID0gcGF0aDtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjc3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDEzCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uLCBwcmVzZW50ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQ6CgoqKlVuZGVyc3RhbmRpbmcgdGhlIEFsbG9jYXRpb24gb2YgYGl1Y3YtJmd0O3BhdGhgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBhZml1Y3ZfcGF0aF9jb25uZWN0YCBmdW5jdGlvbiBhbmQgdGhlIGtleSB0aGluZyBoZXJlIGlzIHRoZSBhbGxvY2F0aW9uIG9mIGBpdWN2LSZndDtwYXRoYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgdGhlIG1lbW9yeSBpcyBzZXQgYXNpZGUgZm9yIHRoZSBwYXRoIHN0cnVjdHVyZSBpdHNlbGYuIFRoaXMgaXMgY3JpdGljYWwgYmVjYXVzZSB0aGlzIHN0cnVjdHVyZSBwcmVzdW1hYmx5IGhvbGRzIHRoZSBkZXRhaWxzIG9mIHRoZSBJVUNWIGNvbm5lY3Rpb24sIHRoZSByb3V0ZSwgZW5kcG9pbnRzLCBldmVyeXRoaW5nIG5lZWRlZCBmb3IgdGhlIGFjdHVhbCBjb21tdW5pY2F0aW9uIHRvIG9jY3VyLiBVbmRlcnN0YW5kaW5nICp3aGVyZSogdGhpcyBoYXBwZW5zIGhlbHBzIG1lIGltbWVkaWF0ZWx5IHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgYWxsb2NhdGlvbiwgYW5kIGxpa2VseSwgd2hlbiB0aGUgc3RydWN0dXJlIGJlY29tZXMgdmFsaWQuIFRoaXMgYWxzbyB0ZWxscyBtZSB3aGF0IHRvIGxvb2sgZm9yIHdoZW4gZGVidWdnaW5nIGNvbm5lY3Rpb24gZmFpbHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE1OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FmaXVjdl9wYXRoX2Nvbm5lY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jPTY2NT1zdGF0aWMgaW50IGl1Y3Zfc29ja19hdXRvYmluZChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTY4Ni1cbm5ldC9pdWN2L2FmX2l1Y3YuYzo2ODc6c3RhdGljIGludCBhZml1Y3ZfcGF0aF9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyKVxubmV0L2l1Y3YvYWZfaXVjdi5jLTY4OC17XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTczMz1zdGF0aWMgaW50IGl1Y3Zfc29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy03NjgtXHRlbHNlXG5uZXQvaXVjdi9hZl9pdWN2LmM6NzY5Olx0XHRlcnIgPSBhZml1Y3ZfcGF0aF9jb25uZWN0KHNvY2ssIGFkZHIpO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTc3MC1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE1OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0ODUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IGNvZGUgc25pcHBldCwgcHJlc2VudGVkIGFzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyB0aGUgYGFmaXVjdl9wYXRoX2Nvbm5lY3RgIEZ1bmN0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIGBhZml1Y3ZfcGF0aF9jb25uZWN0YC4uLiB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gSXQgYXBwZWFycyB0byBiZSBhIGZ1bmN0aW9uIGRlYWxpbmcgd2l0aCBzb21lIGtpbmQgb2YgcGF0aCBjb25uZWN0aW9uLCBsaWtlbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIGFuIEFGX0lVQ1YgKEludGVyLVVzZXIgQ29tbXVuaWNhdGlvbiBWZWhpY2xlKSBlbnZpcm9ubWVudCwgd2hpY2ggSSYjMzk7bSBmYW1pbGlhciB3aXRoLgoKVGhlIGZpcnN0IHRoaW5nIGl0IGRvZXMgaXMgY2FsbCBgaXVjdl9wYXRoX2FsbG9jYC4gU28sIGNsZWFybHksIGJlZm9yZSBhbnl0aGluZyBlbHNlLCBhIHBhdGggaXMgYmVpbmcgYWxsb2NhdGVkLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IHlvdSBjYW4mIzM5O3QgY29ubmVjdCB0byBzb21ldGhpbmcgdGhhdCBkb2VzbiYjMzk7dCBleGlzdC4gVGhpcyBhbGxvY2F0aW9uIGxpa2VseSBzZXRzIHVwIHRoZSBiYXNpYyBkYXRhIHN0cnVjdHVyZXMgbmVlZGVkIHRvIG1hbmFnZSB0aGUgY29tbXVuaWNhdGlvbiBwYXRoLgoKVGhlbiwgdGhlcmUmIzM5O3MgYSBjYWxsIHRvIGBwcl9pdWN2LSZndDtwYXRoX2Nvbm5lY3RgLiBBaCwgbm93IHdlIGdldCB0byB0aGUgY29yZSBjb25uZWN0aW9uIGxvZ2ljLiBCdXQsIGFuZCB0aGlzIGlzIHdoZXJlIEkgbmVlZCB0byB0YWtlIGEgcGF1c2UuLi53aGF0ICppcyogYHByX2l1Y3ZgPyBUaGlzIGxvb2tzIGxpa2UgYSBwb2ludGVyIHRvIHNvbWUgc29ydCBvZiBJVUNWLXJlbGF0ZWQgc3RydWN0dXJlLCBwcm9iYWJseSBhIHBlci1JVUNWIGRhdGEgc3RydWN0dXJlLiBJdCYjMzk7cyBsaWtlbHkgd2l0aGluIHRoaXMgc3RydWN0dXJlIHRoYXQgdGhlIGBwYXRoX2Nvbm5lY3RgIG1ldGhvZCBpcyBkZWZpbmVkLiBVbmRlcnN0YW5kaW5nIHdoYXQgYHByX2l1Y3ZgIHJlcHJlc2VudHMgaXMgY3J1Y2lhbCB0byBjb21wcmVoZW5kaW5nIHRoZSBlbnRpcmUgcHJvY2VzcywgaW5jbHVkaW5nIGFueSBjb250ZXh0IGl0IHJlcXVpcmVzLiBJJiMzOTtkIGJldHRlciBmb2xsb3cgdGhpcyBwb2ludGVyIGFuZCBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgZ2V0cyBpbml0aWFsaXplZCwgYW5kIHdoYXQgY29udGV4dCBpdCBwcm92aWRlcyB0byB0aGUgY2FsbCB0byBgcGF0aF9jb25uZWN0YC4gVGhlIGRldGFpbHMgb2YgdGhpcyBzdHJ1Y3R1cmUgYXJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb25uZWN0aW9uIHByb2Nlc3MsIGFuZCB0aGUgbG9naWMgd2l0aGluIHRoZSBgcGF0aF9jb25uZWN0YCBtZXRob2QgaXRzZWxmLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcl9pdWN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYz00Mj1zdGF0aWMgc3RydWN0IHByb3RvIGl1Y3ZfcHJvdG8gPSB7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ3LVxubmV0L2l1Y3YvYWZfaXVjdi5jOjQ4OnN0YXRpYyBzdHJ1Y3QgaXVjdl9pbnRlcmZhY2UgKnByX2l1Y3Y7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNDktc3RhdGljIHN0cnVjdCBpdWN2X2hhbmRsZXIgYWZfaXVjdl9oYW5kbGVyO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0zMzU9c3RhdGljIHZvaWQgaXVjdl9zZXZlcl9wYXRoKHN0cnVjdCBzb2NrICpzaywgaW50IHdpdGhfdXNlcl9kYXRhKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNDctXHRcdFx0QVNDRUJDKHVzZXJfZGF0YSwgc2l6ZW9mKHVzZXJfZGF0YSkpO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjM0ODpcdFx0XHRwcl9pdWN2LVx1MDAzZXBhdGhfc2V2ZXIocGF0aCwgdXNlcl9kYXRhKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNDktXHRcdH0gZWxzZVxubmV0L2l1Y3YvYWZfaXVjdi5jOjM1MDpcdFx0XHRwcl9pdWN2LVx1MDAzZXBhdGhfc2V2ZXIocGF0aCwgTlVMTCk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMzUxLVx0XHRpdWN2X3BhdGhfZnJlZShwYXRoKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9NDY2PXN0YXRpYyBzdHJ1Y3Qgc29jayAqaXVjdl9zb2NrX2FsbG9jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90bywgZ2ZwX3QgcHJpbywgaW50IGtlcm4pXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ5Mi1cdG1lbXNldChcdTAwMjZpdWN2LVx1MDAzZWluaXQsIDAsIHNpemVvZihpdWN2LVx1MDAzZWluaXQpKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzo0OTM6XHRpZiAocHJfaXVjdilcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OTQtXHRcdGl1Y3YtXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz01ODI9c3RhdGljIGludCBpdWN2X3NvY2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjEzLVx0LyogQmluZCB0aGUgc29ja2V0ICovXG5uZXQvaXVjdi9hZl9pdWN2LmM6NjE0Olx0aWYgKHByX2l1Y3YpXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjE1LVx0XHRpZiAoIW1lbWNtcChzYS1cdTAwM2VzaXVjdl91c2VyX2lkLCBpdWN2X3VzZXJpZCwgOCkpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTY0Mi12bV9iaW5kOlxubmV0L2l1Y3YvYWZfaXVjdi5jOjY0MzpcdGlmIChwcl9pdWN2KSB7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNjQ0LVx0XHQvKiB1c2UgbG9jYWwgdXNlcmlkIGZvciBiYWNrd2FyZCBjb21wYXQgKi9cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9NjY1PXN0YXRpYyBpbnQgaXVjdl9zb2NrX2F1dG9iaW5kKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjY5LVxubmV0L2l1Y3YvYWZfaXVjdi5jOjY3MDpcdGlmICh1bmxpa2VseSghcHJfaXVjdikpXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjcxLVx0XHRyZXR1cm4gLUVQUk9UTztcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9Njg3PXN0YXRpYyBpbnQgYWZpdWN2X3BhdGhfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzA1LVx0fVxubmV0L2l1Y3YvYWZfaXVjdi5jOjcwNjpcdGVyciA9IHByX2l1Y3YtXHUwMDNlcGF0aF9jb25uZWN0KGl1Y3YtXHUwMDNlcGF0aCwgXHUwMDI2YWZfaXVjdl9oYW5kbGVyLFxubmV0L2l1Y3YvYWZfaXVjdi5jLTcwNy1cdFx0XHRcdCAgICBzYS1cdTAwM2VzaXVjdl91c2VyX2lkLCBOVUxMLCB1c2VyX2RhdGEsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTkwNT1zdGF0aWMgaW50IGl1Y3Zfc2VuZF9pcHJtKHN0cnVjdCBpdWN2X3BhdGggKnBhdGgsIHN0cnVjdCBpdWN2X21lc3NhZ2UgKm1zZyxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtOTExLVx0cHJtZGF0YVs3XSA9IDB4ZmYgLSAodTgpIHNrYi1cdTAwM2VsZW47XG5uZXQvaXVjdi9hZl9pdWN2LmM6OTEyOlx0cmV0dXJuIHByX2l1Y3YtXHUwMDNlbWVzc2FnZV9zZW5kKHBhdGgsIG1zZywgSVVDVl9JUFJNREFUQSwgMCxcbm5ldC9pdWN2L2FmX2l1Y3YuYy05MTMtXHRcdFx0XHQgKHZvaWQgKikgcHJtZGF0YSwgOCk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTkxNj1zdGF0aWMgaW50IGl1Y3Zfc29ja19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA2OS1cdFx0XHRpZiAoZXJyID09IDB4MTUpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMDcwOlx0XHRcdFx0cHJfaXVjdi1cdTAwM2VwYXRoX3NldmVyKGl1Y3YtXHUwMDNlcGF0aCwgTlVMTCk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA3MS1cdFx0XHRcdGF0b21pY19kZWMoXHUwMDI2aXVjdi1cdTAwM2Vza2JzX2luX3htaXQpO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDg4LVx0XHRcdH1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMDg5Olx0XHRcdGVyciA9IHByX2l1Y3YtXHUwMDNlbWVzc2FnZV9zZW5kKGl1Y3YtXHUwMDNlcGF0aCwgXHUwMDI2dHhtc2csXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA5MC1cdFx0XHRcdFx0XHQgICAgSVVDVl9JUEJVRkxTVCwgMCxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA5Mi1cdFx0fSBlbHNlIHsgLyogbm9uLUlQUk0gTGluZWFyIHNrYiAqL1xubmV0L2l1Y3YvYWZfaXVjdi5jOjEwOTM6XHRcdFx0ZXJyID0gcHJfaXVjdi1cdTAwM2VtZXNzYWdlX3NlbmQoaXVjdi1cdTAwM2VwYXRoLCBcdTAwMjZ0eG1zZyxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDk0LVx0XHRcdFx0XHQwLCAwLCAodm9pZCAqKXNrYi1cdTAwM2VkYXRhLCBza2ItXHUwMDNlbGVuKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTE1OD1zdGF0aWMgdm9pZCBpdWN2X3Byb2Nlc3NfbWVzc2FnZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTExODktXHRcdFx0fVxubmV0L2l1Y3YvYWZfaXVjdi5jOjExOTA6XHRcdFx0cmMgPSBwcl9pdWN2LVx1MDAzZW1lc3NhZ2VfcmVjZWl2ZShwYXRoLCBtc2csXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTE5MS1cdFx0XHRcdFx0ICAgICAgSVVDVl9JUEJVRkxTVCxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTE5My1cdFx0fSBlbHNlIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMTk0Olx0XHRcdHJjID0gcHJfaXVjdi1cdTAwM2VtZXNzYWdlX3JlY2VpdmUocGF0aCwgbXNnLFxubmV0L2l1Y3YvYWZfaXVjdi5jLTExOTUtXHRcdFx0XHRcdCAgICAgIG1zZy1cdTAwM2VmbGFncyBcdTAwMjYgSVVDVl9JUFJNREFUQSxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTQxOD1zdGF0aWMgaW50IGl1Y3Zfc29ja19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaG93KVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDQ2LVx0XHRcdHR4bXNnLnRhZyA9IDA7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ0NzpcdFx0XHRlcnIgPSBwcl9pdWN2LVx1MDAzZW1lc3NhZ2Vfc2VuZChpdWN2LVx1MDAzZXBhdGgsIFx1MDAyNnR4bXNnLFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NDgtXHRcdFx0XHRJVUNWX0lQUk1EQVRBLCAwLCAodm9pZCAqKSBpcHJtX3NodXRkb3duLCA4KTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ2OS1cdFx0ICAgIGl1Y3YtXHUwMDNlcGF0aCkge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE0NzA6XHRcdFx0ZXJyID0gcHJfaXVjdi1cdTAwM2VwYXRoX3F1aWVzY2UoaXVjdi1cdTAwM2VwYXRoLCBOVUxMKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDcxLVx0XHRcdGlmIChlcnIpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTE2MDc9c3RhdGljIGludCBpdWN2X2NhbGxiYWNrX2Nvbm5yZXEoc3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY0NC1cdGlmIChzay1cdTAwM2Vza19zdGF0ZSAhPSBJVUNWX0xJU1RFTikge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE2NDU6XHRcdGVyciA9IHByX2l1Y3YtXHUwMDNlcGF0aF9zZXZlcihwYXRoLCB1c2VyX2RhdGEpO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NDYtXHRcdGl1Y3ZfcGF0aF9mcmVlKHBhdGgpO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjUxLVx0aWYgKHNrX2FjY2VwdHFfaXNfZnVsbChzaykpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjUyOlx0XHRlcnIgPSBwcl9pdWN2LVx1MDAzZXBhdGhfc2V2ZXIocGF0aCwgdXNlcl9kYXRhKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjUzLVx0XHRpdWN2X3BhdGhfZnJlZShwYXRoKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY1OS1cdGlmICghbnNrKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTY2MDpcdFx0ZXJyID0gcHJfaXVjdi1cdTAwM2VwYXRoX3NldmVyKHBhdGgsIHVzZXJfZGF0YSk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY2MS1cdFx0aXVjdl9wYXRoX2ZyZWUocGF0aCk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2ODUtXHRwYXRoLVx1MDAzZW1zZ2xpbSA9IGl1Y3YtXHUwMDNlbXNnbGltaXQ7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTY4NjpcdGVyciA9IHByX2l1Y3YtXHUwMDNlcGF0aF9hY2NlcHQocGF0aCwgXHUwMDI2YWZfaXVjdl9oYW5kbGVyLCBudXNlcl9kYXRhLCBuc2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE2ODctXHRpZiAoZXJyKSB7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTE3MTI9c3RhdGljIHZvaWQgaXVjdl9jYWxsYmFja19yeChzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLCBzdHJ1Y3QgaXVjdl9tZXNzYWdlICptc2cpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE3MjAtXHRpZiAoc2stXHUwMDNlc2tfc2h1dGRvd24gXHUwMDI2IFJDVl9TSFVURE9XTikge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE3MjE6XHRcdHByX2l1Y3YtXHUwMDNlbWVzc2FnZV9yZWplY3QocGF0aCwgbXNnKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNzIyLVx0XHRyZXR1cm47XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTIyOTQ9c3RhdGljIGludCBfX2luaXQgYWZpdWN2X2luaXQodm9pZClcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMwNS1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzA2Olx0XHRwcl9pdWN2ID0gXHUwMDI2aXVjdl9pZjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzA3LVx0fSBlbHNlIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzA4LVx0XHRtZW1zZXQoXHUwMDI2aXVjdl91c2VyaWQsIDAsIHNpemVvZihpdWN2X3VzZXJpZCkpO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMDk6XHRcdHByX2l1Y3YgPSBOVUxMO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMTAtXHR9XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMTgtXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjMxOTpcdGlmIChwcl9pdWN2KSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjMyMDpcdFx0ZXJyID0gcHJfaXVjdi1cdTAwM2VpdWN2X3JlZ2lzdGVyKFx1MDAyNmFmX2l1Y3ZfaGFuZGxlciwgMCk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMyMS1cdFx0aWYgKGVycilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMzMi1vdXRfbm90aWZpZXI6XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjMzMzpcdGlmIChwcl9pdWN2KVxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMzQ6XHRcdHByX2l1Y3YtXHUwMDNlaXVjdl91bnJlZ2lzdGVyKFx1MDAyNmFmX2l1Y3ZfaGFuZGxlciwgMCk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMzNS1vdXRfc29jazpcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjM0Mz1zdGF0aWMgdm9pZCBfX2V4aXQgYWZpdWN2X2V4aXQodm9pZClcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzQ0LXtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzQ1Olx0aWYgKHByX2l1Y3YpXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjM0NjpcdFx0cHJfaXVjdi1cdTAwM2VpdWN2X3VucmVnaXN0ZXIoXHUwMDI2YWZfaXVjdl9oYW5kbGVyLCAwKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzQ3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE0MgoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQgbXlzZWxmLCB3aXRoIGEgZm9jdXMgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZS4KCioqSW52ZXN0aWdhdGluZyBWYXJpYWJsZSBJbml0aWFsaXphdGlvbiBpbiBBRklVQ1YqKgoKQWxyaWdodCwgc28gYHByX2l1Y3ZgIGlzIGJlaW5nIGluaXRpYWxpemVkIHNvbWV3aGVyZSB3aXRoaW4gdGhlIGBhZml1Y3ZfaW5pdGAgZnVuY3Rpb24uIFRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgZHJpbGwgZG93biBpbnRvIGBhZml1Y3ZfaW5pdGAgdG8gdW5kZXJzdGFuZCBob3cgYHByX2l1Y3ZgIGlzIGJlaW5nIGhhbmRsZWQuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBqdW1wIGludG8gdGhhdCBmdW5jdGlvbiBkZWZpbml0aW9uIHRvIGV4YW1pbmUgdGhlIGNvZGUgcGF0aCBkaXJlY3RseSByZXNwb25zaWJsZSBmb3IgdGhhdCBpbml0aWFsaXphdGlvbi4gS25vd2luZyB0aGUgY29udGV4dCwgSSYjMzk7bGwgYmUgYWJsZSB0byBxdWlja2x5IGRldGVybWluZSB0aGUgaW5pdGlhbGl6YXRpb24gbG9naWMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSBgcHJfaXVjdmAgdmFyaWFibGUsIHdoaWNoIGhlbHBzIG1lIGRldGVybWluZSBpZiB0aGUgY3VycmVudCBpbml0aWFsaXphdGlvbiBpcyBjYXVzaW5nIGFuIGlzc3VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyOTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjI5NDpcdHN0YXRpYyBpbnQgX19pbml0IGFmaXVjdl9pbml0KHZvaWQpXG4yMjk1Olx0e1xuMjI5NjpcdFx0aW50IGVycjtcbjIyOTc6XHRcbjIyOTg6XHRcdGlmIChtYWNoaW5lX2lzX3ZtKCkgXHUwMDI2XHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0lVQ1YpKSB7XG4yMjk5Olx0XHRcdGNwY21kKFwmIzM0O1FVRVJZIFVTRVJJRFwmIzM0OywgaXVjdl91c2VyaWQsIHNpemVvZihpdWN2X3VzZXJpZCksIFx1MDAyNmVycik7XG4yMzAwOlx0XHRcdGlmICh1bmxpa2VseShlcnIpKSB7XG4yMzAxOlx0XHRcdFx0V0FSTl9PTihlcnIpO1xuMjMwMjpcdFx0XHRcdGVyciA9IC1FUFJPVE9OT1NVUFBPUlQ7XG4yMzAzOlx0XHRcdFx0Z290byBvdXQ7XG4yMzA0Olx0XHRcdH1cbjIzMDU6XHRcbjIzMDY6XHRcdFx0cHJfaXVjdiA9IFx1MDAyNml1Y3ZfaWY7XG4yMzA3Olx0XHR9IGVsc2Uge1xuMjMwODpcdFx0XHRtZW1zZXQoXHUwMDI2aXVjdl91c2VyaWQsIDAsIHNpemVvZihpdWN2X3VzZXJpZCkpO1xuMjMwOTpcdFx0XHRwcl9pdWN2ID0gTlVMTDtcbjIzMTA6XHRcdH1cbjIzMTE6XHRcbjIzMTI6XHRcdGVyciA9IHByb3RvX3JlZ2lzdGVyKFx1MDAyNml1Y3ZfcHJvdG8sIDApO1xuMjMxMzpcdFx0aWYgKGVycilcbjIzMTQ6XHRcdFx0Z290byBvdXQ7XG4yMzE1Olx0XHRlcnIgPSBzb2NrX3JlZ2lzdGVyKFx1MDAyNml1Y3Zfc29ja19mYW1pbHlfb3BzKTtcbjIzMTY6XHRcdGlmIChlcnIpXG4yMzE3Olx0XHRcdGdvdG8gb3V0X3Byb3RvO1xuMjMxODpcdFxuMjMxOTpcdFx0aWYgKHByX2l1Y3YpIHtcbjIzMjA6XHRcdFx0ZXJyID0gcHJfaXVjdi1cdTAwM2VpdWN2X3JlZ2lzdGVyKFx1MDAyNmFmX2l1Y3ZfaGFuZGxlciwgMCk7XG4yMzIxOlx0XHRcdGlmIChlcnIpXG4yMzIyOlx0XHRcdFx0Z290byBvdXRfc29jaztcbjIzMjM6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTU6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MjcKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYHByX2l1Y3ZgIFZhcmlhYmxlKioKCk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYHByX2l1Y3ZgIGlzIG9ubHkgcG9wdWxhdGVkIGlmIHRoZSBzeXN0ZW0mIzM5O3MgYSBWTSAqYW5kKiB0aGUgSVVDViBjb25maWd1cmF0aW9uIGlzIGVuYWJsZWQuIFJpZ2h0LCBzbyBgbWFjaGluZV9pc192bSgpYCB3aWxsIHRlbGwgbWUgaWYgd2UmIzM5O3JlIHJ1bm5pbmcgdW5kZXIgei9WTS4gSWYgd2UmIzM5O3JlICpub3QqIHVuZGVyIHovVk0sIHRoZW4gYHByX2l1Y3ZgIGdldHMgc2V0IHRvIGBOVUxMYC4KClRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlIGlzOiBpZiBgcHJfaXVjdmAgZW5kcyB1cCBiZWluZyBgTlVMTGAsIGNhbiBgaXVjdl9zZXZlcl9wYXRoYCBzdGlsbCBiZSBjYWxsZWQgYW5kLCB5b3Uga25vdywgYWN0dWFsbHkgKmRvKiBzb21ldGhpbmc/IFRoaXMgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UgaWYgaXQgaXNuJiMzOTt0IGhhbmRsZWQgY29ycmVjdGx5LiBJIHNob3VsZCByZWFsbHkgZ28gYmFjayBhbmQgY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYGl1Y3Zfc2V2ZXJfcGF0aGAgYWdhaW4sIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBJdCB3b3VsZCBiZSBhbiBhbm5veWluZyBidWcsIG90aGVyd2lzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTU6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMzNTpcdHN0YXRpYyB2b2lkIGl1Y3Zfc2V2ZXJfcGF0aChzdHJ1Y3Qgc29jayAqc2ssIGludCB3aXRoX3VzZXJfZGF0YSlcbiAzMzY6XHR7XG4gMzM3Olx0XHR1bnNpZ25lZCBjaGFyIHVzZXJfZGF0YVsxNl07XG4gMzM4Olx0XHRzdHJ1Y3QgaXVjdl9zb2NrICppdWN2ID0gaXVjdl9zayhzayk7XG4gMzM5Olx0XHRzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoID0gaXVjdi1cdTAwM2VwYXRoO1xuIDM0MDpcdFx0c3RydWN0IHNvY2tfbXNnX3EgKnAsICpuO1xuIDM0MTpcdFxuIDM0MjpcdFx0LyogV2hvZXZlciByZXNldHMgdGhlIHBhdGggcG9pbnRlciwgbXVzdCBzZXZlciBhbmQgZnJlZSBpdC4gKi9cbiAzNDM6XHRcdGlmICh4Y2hnKFx1MDAyNml1Y3YtXHUwMDNlcGF0aCwgTlVMTCkpIHtcbiAzNDQ6XHRcdFx0aWYgKHdpdGhfdXNlcl9kYXRhKSB7XG4gMzQ1Olx0XHRcdFx0bG93X25tY3B5KHVzZXJfZGF0YSwgaXVjdi1cdTAwM2VzcmNfbmFtZSk7XG4gMzQ2Olx0XHRcdFx0aGlnaF9ubWNweSh1c2VyX2RhdGEsIGl1Y3YtXHUwMDNlZHN0X25hbWUpO1xuIDM0NzpcdFx0XHRcdEFTQ0VCQyh1c2VyX2RhdGEsIHNpemVvZih1c2VyX2RhdGEpKTtcbiAzNDg6XHRcdFx0XHRwcl9pdWN2LVx1MDAzZXBhdGhfc2V2ZXIocGF0aCwgdXNlcl9kYXRhKTtcbiAzNDk6XHRcdFx0fSBlbHNlXG4gMzUwOlx0XHRcdFx0cHJfaXVjdi1cdTAwM2VwYXRoX3NldmVyKHBhdGgsIE5VTEwpO1xuIDM1MTpcdFx0XHRpdWN2X3BhdGhfZnJlZShwYXRoKTtcbiAzNTI6XHRcbiAzNTM6XHRcdFx0LypcbiAzNTQ6XHRcdFx0ICogTWVzc2FnZSBub3RpZmljYXRpb25zIHF1ZXVlZCBvbiBtZXNzYWdlX3Egc3RpbGwgcmVmZXJlbmNlXG4gMzU1Olx0XHRcdCAqIHRoZSBub3cgZnJlZWQgcGF0aDsgZHJvcCB0aGVtLCBvdGhlcndpc2UgYSBsYXRlciByZWN2bXNnKClcbiAzNTY6XHRcdFx0ICogd291bGQgcGFzcyB0aGUgZnJlZWQgaXVjdl9wYXRoIHRvIG1lc3NhZ2VfcmVjZWl2ZSgpIHZpYVxuIDM1NzpcdFx0XHQgKiBpdWN2X3Byb2Nlc3NfbWVzc2FnZV9xKCkuXG4gMzU4Olx0XHRcdCAqL1xuIDM1OTpcdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2aXVjdi1cdTAwM2VtZXNzYWdlX3EubG9jayk7XG4gMzYwOlx0XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuLCBcdTAwMjZpdWN2LVx1MDAzZW1lc3NhZ2VfcS5saXN0LCBsaXN0KSB7XG4gMzYxOlx0XHRcdFx0bGlzdF9kZWwoXHUwMDI2cC1cdTAwM2VsaXN0KTtcbiAzNjI6XHRcdFx0XHRrZnJlZShwKTtcbiAzNjM6XHRcdFx0fVxuIDM2NDpcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZpdWN2LVx1MDAzZW1lc3NhZ2VfcS5sb2NrKTtcbiAzNjU6XHRcdH1cbiAzNjY6XHR9XG4gMzY3Olx0XG4gMzY4Olx0LyogU2VuZCBjb250cm9sbGluZyBmbGFncyB0aHJvdWdoIGFuIElVQ1Ygc29ja2V0IGZvciBISVBFUiB0cmFuc3BvcnQgKi9cbiAzNjk6XHRzdGF0aWMgaW50IGl1Y3Zfc2VuZF9jdHJsKHN0cnVjdCBzb2NrICpzaywgdTggZmxhZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE1OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODA1CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFkZHJlc3NpbmcgYSBQb3RlbnRpYWwgTnVsbCBQb2ludGVyIERlcmVmZXJlbmNlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IHNlZSBhIHBvdGVudGlhbCBwcm9ibGVtLiBJZiBgcHJfaXVjdmAgaXMgTlVMTCwgdGhlbiB0aGUgY29kZSBpcyBnb2luZyB0byB0cnkgYW5kIGRlcmVmZXJlbmNlIGBwcl9pdWN2LSZndDtwYXRoX3NldmVyYCwgd2hpY2ggaXMgYSBjbGFzc2ljIHJlY2lwZSBmb3IgYSBzZWdtZW50YXRpb24gZmF1bHQuIFRoYXQmIzM5O3MgYSBodWdlIHJlZCBmbGFnIQoKSG9sZCBvbiwgSSBuZWVkIHRvIHRoaW5rIHRoaXMgdGhyb3VnaCBtb3JlIGNhcmVmdWxseS4gSWYgYHByX2l1Y3ZgICppcyogTlVMTCwgY291bGQgYGl1Y3YtJmd0O3BhdGhgIHNvbWVob3cgc3RpbGwgYmUgbm9uLU5VTEw/IFRoYXQmIzM5O3MgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGhlcmUuIEkgbmVlZCB0byB0cmFjZSBiYWNrIHdoZXJlIGBpdWN2LSZndDtwYXRoYCBnZXRzIHNldC4KCkFscmlnaHQsIGEgcXVpY2sgc2NhbiByZXZlYWxzIHRoYXQgYGl1Y3YtJmd0O3BhdGhgIGdldHMgc2V0IGluIGBhZml1Y3ZfcGF0aF9jb25uZWN0YCBhbmQgYWxzbyBpbiBgaXVjdl9jYWxsYmFja19jb25ucmVxYC4gT2theSwgZ29vZC4gTm93LCBJIHJlbWVtYmVyIHRoYXQgYGFmaXVjdl9wYXRoX2Nvbm5lY3RgIGdldHMgY2FsbGVkIGZyb20gYGl1Y3Zfc29ja19jb25uZWN0YC4gU28sIHRoZSBudWxsIGNoZWNrIG9mIGBwcl9pdWN2YCBuZWVkcyB0byBiZSB3YXRlcnRpZ2h0LCBhbmQgYWNjb3VudCBmb3IgdGhlc2UgcG9zc2libGUgY29kZSBwYXRocy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBgcHJfaXVjdmAgcG9pbnRlciBpcyBub3QgbnVsbCBiZWZvcmUgaXQgaXMgZGVyZWZlcmVuY2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDczMywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzMzOlx0c3RhdGljIGludCBpdWN2X3NvY2tfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcbiA3MzQ6XHRcdFx0XHQgICAgIGludCBhbGVuLCBpbnQgZmxhZ3MpXG4gNzM1Olx0e1xuIDczNjpcdFx0REVDTEFSRV9TT0NLQUREUihzdHJ1Y3Qgc29ja2FkZHJfaXVjdiAqLCBzYSwgYWRkcik7XG4gNzM3Olx0XHRzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLVx1MDAzZXNrO1xuIDczODpcdFx0c3RydWN0IGl1Y3Zfc29jayAqaXVjdiA9IGl1Y3Zfc2soc2spO1xuIDczOTpcdFx0aW50IGVycjtcbiA3NDA6XHRcbiA3NDE6XHRcdGlmIChhbGVuIFx1MDAzYyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2l1Y3YpIHx8IGFkZHItXHUwMDNlc2FfZmFtaWx5ICE9IEFGX0lVQ1YpXG4gNzQyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDc0MzpcdFxuIDc0NDpcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlICE9IElVQ1ZfT1BFTiBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfc3RhdGUgIT0gSVVDVl9CT1VORClcbiA3NDU6XHRcdFx0cmV0dXJuIC1FQkFERkQ7XG4gNzQ2Olx0XG4gNzQ3Olx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gSVVDVl9PUEVOIFx1MDAyNlx1MDAyNlxuIDc0ODpcdFx0ICAgIGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIpXG4gNzQ5Olx0XHRcdHJldHVybiAtRUJBREZEOyAvKiBleHBsaWNpdCBiaW5kIHJlcXVpcmVkICovXG4gNzUwOlx0XG4gNzUxOlx0XHRpZiAoc2stXHUwMDNlc2tfdHlwZSAhPSBTT0NLX1NUUkVBTSBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfdHlwZSAhPSBTT0NLX1NFUVBBQ0tFVClcbiA3NTI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNzUzOlx0XG4gNzU0Olx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gSVVDVl9PUEVOKSB7XG4gNzU1Olx0XHRcdGVyciA9IGl1Y3Zfc29ja19hdXRvYmluZChzayk7XG4gNzU2Olx0XHRcdGlmICh1bmxpa2VseShlcnIpKVxuIDc1NzpcdFx0XHRcdHJldHVybiBlcnI7XG4gNzU4Olx0XHR9XG4gNzU5Olx0XG4gNzYwOlx0XHRsb2NrX3NvY2soc2spO1xuIDc2MTpcdFxuIDc2MjpcdFx0LyogU2V0IHRoZSBkZXN0aW5hdGlvbiBpbmZvcm1hdGlvbiAqL1xuIDc2MzpcdFx0bWVtY3B5KGl1Y3YtXHUwMDNlZHN0X3VzZXJfaWQsIHNhLVx1MDAzZXNpdWN2X3VzZXJfaWQsIDgpO1xuIDc2NDpcdFx0bWVtY3B5KGl1Y3YtXHUwMDNlZHN0X25hbWUsIHNhLVx1MDAzZXNpdWN2X25hbWUsIDgpO1xuIDc2NTpcdFxuIDc2NjpcdFx0aWYgKGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIpXG4gNzY3Olx0XHRcdGVyciA9IGl1Y3Zfc2VuZF9jdHJsKHNvY2stXHUwMDNlc2ssIEFGX0lVQ1ZfRkxBR19TWU4pO1xuIDc2ODpcdFx0ZWxzZVxuIDc2OTpcdFx0XHRlcnIgPSBhZml1Y3ZfcGF0aF9jb25uZWN0KHNvY2ssIGFkZHIpO1xuIDc3MDpcdFx0aWYgKGVycilcbiA3NzE6XHRcdFx0Z290byBkb25lO1xuIDc3MjpcdFxuIDc3MzpcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlICE9IElVQ1ZfQ09OTkVDVEVEKVxuIDc3NDpcdFx0XHRlcnIgPSBpdWN2X3NvY2tfd2FpdChzaywgaXVjdl9zb2NrX2luX3N0YXRlKHNrLCBJVUNWX0NPTk5FQ1RFRCxcbiA3NzU6XHRcdFx0XHRcdFx0XHRcdCAgICBJVUNWX0RJU0NPTk4pLFxuIDc3NjpcdFx0XHRcdFx0ICAgICBzb2NrX3NuZHRpbWVvKHNrLCBmbGFncyBcdTAwMjYgT19OT05CTE9DSykpO1xuIDc3NzpcdFxuIDc3ODpcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IElVQ1ZfRElTQ09OTiB8fCBzay1cdTAwM2Vza19zdGF0ZSA9PSBJVUNWX0NMT1NFRClcbiA3Nzk6XHRcdFx0ZXJyID0gLUVDT05OUkVGVVNFRDtcbiA3ODA6XHRcbiA3ODE6XHRcdGlmIChlcnIgXHUwMDI2XHUwMDI2IGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVilcbiA3ODI6XHRcdFx0aXVjdl9zZXZlcl9wYXRoKHNrLCAwKTtcbiA3ODM6XHRcbiA3ODQ6XHRkb25lOlxuIDc4NTpcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbiA3ODY6XHRcdHJldHVybiBlcnI7XG4gNzg3Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDE1NgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgY29kZSBzbmlwcGV0LCBkZWxpdmVyZWQgYXMgaWYgaXQmIzM5O3MgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqRGVjb2RpbmcgdGhlIElVQ1YgVHJhbnNwb3J0IExvZ2ljKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBzZWN0aW9uLCBhbmQgbXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgaXVjdi0mZ3Q7dHJhbnNwb3J0YCB2YXJpYWJsZS4gSSBzZWUgdGhhdCBpZiB0aGlzIHBhcnRpY3VsYXIgdmFsdWUgaXMgZXF1YWwgdG8gYEFGX0lVQ1ZfVFJBTlNfSVVDVmAsIGl0IHRyaWdnZXJzIGEgY2FsbCB0byBgYWZpdWN2X3BhdGhfY29ubmVjdGAgKmFuZCogYGl1Y3Zfc2V2ZXJfcGF0aGAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIHRoZXJlIGlzIGNvbm5lY3Rpb24sIGFuZCB0aGVuIHNldmVyaW5nLiBDbGVhcmx5LCB0aGlzIGlzIHRpZWQgdG8gdGhlIElVQ1YgdHJhbnNwb3J0IHBhdGguCgpUaGUgY3J1Y2lhbCBxdWVzdGlvbiBiZWNvbWVzOiAqV2hlbiogaXMgYGl1Y3YtJmd0O3RyYW5zcG9ydGAgYWN0dWFsbHkgc2V0IHRvIGBBRl9JVUNWX1RSQU5TX0lVQ1ZgPyBXaGF0IGFyZSB0aGUgY29uZGl0aW9ucyB0aGF0IGxlYWQgdG8gdGhpcyBzcGVjaWZpYyB0cmFuc3BvcnQgbWV0aG9kIGJlaW5nIHNlbGVjdGVkPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcHJlY2VkaW5nIGxvZ2ljLCB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZSBgaXVjdmAgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIGFuZCBoYW5kbGluZywgdG8gc2VlIHdoYXQgZGljdGF0ZXMgdGhpcyBjaG9pY2UuIFRoaXMgaXMgdGhlIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbiB0aGF0IHVubG9ja3MgaG93IHRoaXMgcGFydGljdWxhciBjb25uZWN0aW9uIGN5Y2xlIG9wZXJhdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ2NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDY2Olx0c3RhdGljIHN0cnVjdCBzb2NrICppdWN2X3NvY2tfYWxsb2Moc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvLCBnZnBfdCBwcmlvLCBpbnQga2VybilcbiA0Njc6XHR7XG4gNDY4Olx0XHRzdHJ1Y3Qgc29jayAqc2s7XG4gNDY5Olx0XHRzdHJ1Y3QgaXVjdl9zb2NrICppdWN2O1xuIDQ3MDpcdFxuIDQ3MTpcdFx0c2sgPSBza19hbGxvYyhcdTAwMjZpbml0X25ldCwgUEZfSVVDViwgcHJpbywgXHUwMDI2aXVjdl9wcm90bywga2Vybik7XG4gNDcyOlx0XHRpZiAoIXNrKVxuIDQ3MzpcdFx0XHRyZXR1cm4gTlVMTDtcbiA0NzQ6XHRcdGl1Y3YgPSBpdWN2X3NrKHNrKTtcbiA0NzU6XHRcbiA0NzY6XHRcdHNvY2tfaW5pdF9kYXRhKHNvY2ssIHNrKTtcbiA0Nzc6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNml1Y3YtXHUwMDNlYWNjZXB0X3EpO1xuIDQ3ODpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2aXVjdi1cdTAwM2VhY2NlcHRfcV9sb2NrKTtcbiA0Nzk6XHRcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2aXVjdi1cdTAwM2VzZW5kX3NrYl9xKTtcbiA0ODA6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNml1Y3YtXHUwMDNlbWVzc2FnZV9xLmxpc3QpO1xuIDQ4MTpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2aXVjdi1cdTAwM2VtZXNzYWdlX3EubG9jayk7XG4gNDgyOlx0XHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNml1Y3YtXHUwMDNlYmFja2xvZ19za2JfcSk7XG4gNDgzOlx0XHRpdWN2LVx1MDAzZXNlbmRfdGFnID0gMDtcbiA0ODQ6XHRcdGF0b21pY19zZXQoXHUwMDI2aXVjdi1cdTAwM2VwZW5kaW5ncywgMCk7XG4gNDg1Olx0XHRpdWN2LVx1MDAzZWZsYWdzID0gMDtcbiA0ODY6XHRcdGl1Y3YtXHUwMDNlbXNnbGltaXQgPSAwO1xuIDQ4NzpcdFx0YXRvbWljX3NldChcdTAwMjZpdWN2LVx1MDAzZXNrYnNfaW5feG1pdCwgMCk7XG4gNDg4Olx0XHRhdG9taWNfc2V0KFx1MDAyNml1Y3YtXHUwMDNlbXNnX3NlbnQsIDApO1xuIDQ4OTpcdFx0YXRvbWljX3NldChcdTAwMjZpdWN2LVx1MDAzZW1zZ19yZWN2LCAwKTtcbiA0OTA6XHRcdGl1Y3YtXHUwMDNlcGF0aCA9IE5VTEw7XG4gNDkxOlx0XHRpdWN2LVx1MDAzZXNrX3R4bm90aWZ5ID0gYWZpdWN2X2hzX2NhbGxiYWNrX3R4bm90aWZ5O1xuIDQ5MjpcdFx0bWVtc2V0KFx1MDAyNml1Y3YtXHUwMDNlaW5pdCwgMCwgc2l6ZW9mKGl1Y3YtXHUwMDNlaW5pdCkpO1xuIDQ5MzpcdFx0aWYgKHByX2l1Y3YpXG4gNDk0Olx0XHRcdGl1Y3YtXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xuIDQ5NTpcdFx0ZWxzZVxuIDQ5NjpcdFx0XHRpdWN2LVx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSElQRVI7XG4gNDk3Olx0XG4gNDk4Olx0XHRzay1cdTAwM2Vza19kZXN0cnVjdCA9IGl1Y3Zfc29ja19kZXN0cnVjdDtcbiA0OTk6XHRcdHNrLVx1MDAzZXNrX3NuZHRpbWVvID0gSVVDVl9DT05OX1RJTUVPVVQ7XG4gNTAwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE1OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTc5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBJVUNWIFRyYW5zcG9ydCBhbmQgUGF0aCBNYW5hZ2VtZW50KioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgaXQmIzM5O3MgYmVjb21pbmcgY2xlYXIgaG93IHRoZSBgaXVjdi0mZ3Q7dHJhbnNwb3J0YCBmaWVsZCBiZWhhdmVzIGluIHJlbGF0aW9uIHRvIGBwcl9pdWN2YC4gUmlnaHQsIHNvIGlmIGBwcl9pdWN2YCAqaXNuJiMzOTt0KiBzZXQsIHRoZW4gYGl1Y3YtJmd0O3RyYW5zcG9ydGAgZGVmYXVsdHMgdG8gYEFGX0lVQ1ZfVFJBTlNfSElQRVJgLCBhbmQgbm90IGBBRl9JVUNWX1RSQU5TX0lVQ1ZgLiBUaGF0JiMzOTtzIHRoZSBjcnV4IG9mIGl0LiBXaGVuIGl04oCZcyBgSElQRVJgLCBgYWZpdWN2X3BhdGhfY29ubmVjdGAgaXNu4oCZdCBldmVuIGludm9rZWQuIFdoaWNoIGV4cGxhaW5zIHdoeSBgaXVjdi0mZ3Q7cGF0aGAgcmVtYWlucyBOVUxMIGluIHRoYXQgc2NlbmFyaW8uIE1ha2VzIHNlbnNlLgoKQW5kIGJlY2F1c2UgYGl1Y3YtJmd0O3BhdGhgIGlzIE5VTEwgaW4gdGhpcyBISVBFUiBjYXNlLCBgaXVjdl9zZXZlcl9wYXRoYCBlZmZlY3RpdmVseSBkb2VzIG5vdGhpbmcg4oCTIGB4Y2hnKCZhbXA7aXVjdi0mZ3Q7cGF0aCwgTlVMTClgIGp1c3QgcmV0dXJucyBOVUxMLiBHb29kLCBzbyB3ZSYjMzk7cmUgYXZvaWRpbmcgYW55IHBvdGVudGlhbCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb24gYHByX2l1Y3ZgLCBhcyBsb25nIGFzIGl0JiMzOTtzIG51bGwgaW4gdGhpcyBjYXNlLgoKSG1tLCBidXQgaGVyZSYjMzk7cyBhIHRob3VnaHQuLi4gQ2FuIHdlIHZlcmlmeSB0aGUgYmVoYXZpb3Igb2YgYGl1Y3Zfc2V2ZXJfcGF0aGAgZGlyZWN0bHkgd2l0aCBgQUZfSVVDVl9UUkFOU19ISVBFUmA/IExldCBtZSBzZWUuIFNpbmNlIHRoZSBgaXVjdi0mZ3Q7cGF0aGAgcG9pbnRlciBpcyBuZXZlciBhbGxvY2F0ZWQgd2l0aCBgSElQRVJgLCBgaXVjdl9zZXZlcl9wYXRoYCAqc2hvdWxkKiBiZSBhIG5vLW9wLiBCdXQgd2FpdCwgaXMgdGhlcmUgYW55IHNpdHVhdGlvbiB3aGVyZSBgaXVjdi0mZ3Q7cGF0aGAgKmlzKiBhbGxvY2F0ZWQgZm9yIGBBRl9JVUNWX1RSQU5TX0hJUEVSYD8gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGlmIGl0JiMzOTtzIHVzZWQgYXQgYWxsIHdpdGggSElQRVIsIGp1c3QgdG8gYmUgc3VyZS4gSXQgd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLCB0byBlbnN1cmUgd2UgYXJlIGNvdmVyaW5nIGFsbCBjYXNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTU6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXVjdi1cdTAwM2VwYXRoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYz0xNjY9c3RhdGljIGlubGluZSBpbnQgaXVjdl9iZWxvd19tc2dsaW0oc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNzItXHRpZiAoaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKVxubmV0L2l1Y3YvYWZfaXVjdi5jOjE3MzpcdFx0cmV0dXJuIChhdG9taWNfcmVhZChcdTAwMjZpdWN2LVx1MDAzZXNrYnNfaW5feG1pdCkgXHUwMDNjIGl1Y3YtXHUwMDNlcGF0aC1cdTAwM2Vtc2dsaW0pO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE3NC1cdGVsc2Vcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MzM1PXN0YXRpYyB2b2lkIGl1Y3Zfc2V2ZXJfcGF0aChzdHJ1Y3Qgc29jayAqc2ssIGludCB3aXRoX3VzZXJfZGF0YSlcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzM4LVx0c3RydWN0IGl1Y3Zfc29jayAqaXVjdiA9IGl1Y3Zfc2soc2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjMzOTpcdHN0cnVjdCBpdWN2X3BhdGggKnBhdGggPSBpdWN2LVx1MDAzZXBhdGg7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMzQwLVx0c3RydWN0IHNvY2tfbXNnX3EgKnAsICpuO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNDItXHQvKiBXaG9ldmVyIHJlc2V0cyB0aGUgcGF0aCBwb2ludGVyLCBtdXN0IHNldmVyIGFuZCBmcmVlIGl0LiAqL1xubmV0L2l1Y3YvYWZfaXVjdi5jOjM0MzpcdGlmICh4Y2hnKFx1MDAyNml1Y3YtXHUwMDNlcGF0aCwgTlVMTCkpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNDQtXHRcdGlmICh3aXRoX3VzZXJfZGF0YSkge1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNDctXHRcdFx0QVNDRUJDKHVzZXJfZGF0YSwgc2l6ZW9mKHVzZXJfZGF0YSkpO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjM0ODpcdFx0XHRwcl9pdWN2LVx1MDAzZXBhdGhfc2V2ZXIocGF0aCwgdXNlcl9kYXRhKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNDktXHRcdH0gZWxzZVxubmV0L2l1Y3YvYWZfaXVjdi5jOjM1MDpcdFx0XHRwcl9pdWN2LVx1MDAzZXBhdGhfc2V2ZXIocGF0aCwgTlVMTCk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMzUxLVx0XHRpdWN2X3BhdGhfZnJlZShwYXRoKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9NDY2PXN0YXRpYyBzdHJ1Y3Qgc29jayAqaXVjdl9zb2NrX2FsbG9jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90bywgZ2ZwX3QgcHJpbywgaW50IGtlcm4pXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ4OS1cdGF0b21pY19zZXQoXHUwMDI2aXVjdi1cdTAwM2Vtc2dfcmVjdiwgMCk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6NDkwOlx0aXVjdi1cdTAwM2VwYXRoID0gTlVMTDtcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OTEtXHRpdWN2LVx1MDAzZXNrX3R4bm90aWZ5ID0gYWZpdWN2X2hzX2NhbGxiYWNrX3R4bm90aWZ5O1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz01ODI9c3RhdGljIGludCBpdWN2X3NvY2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjA5LVx0fVxubmV0L2l1Y3YvYWZfaXVjdi5jOjYxMDpcdGlmIChpdWN2LVx1MDAzZXBhdGgpXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjExLVx0XHRnb3RvIGRvbmVfdW5sb2NrO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz02ODc9c3RhdGljIGludCBhZml1Y3ZfcGF0aF9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy02OTktXHQvKiBDcmVhdGUgcGF0aC4gKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYzo3MDA6XHRpdWN2LVx1MDAzZXBhdGggPSBpdWN2X3BhdGhfYWxsb2MoaXVjdi1cdTAwM2Vtc2dsaW1pdCxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03MDEtXHRcdFx0XHQgICAgIElVQ1ZfSVBSTURBVEEsIEdGUF9LRVJORUwpO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjcwMjpcdGlmICghaXVjdi1cdTAwM2VwYXRoKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNzAzLVx0XHRlcnIgPSAtRU5PTUVNO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy03MDUtXHR9XG5uZXQvaXVjdi9hZl9pdWN2LmM6NzA2Olx0ZXJyID0gcHJfaXVjdi1cdTAwM2VwYXRoX2Nvbm5lY3QoaXVjdi1cdTAwM2VwYXRoLCBcdTAwMjZhZl9pdWN2X2hhbmRsZXIsXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzA3LVx0XHRcdFx0ICAgIHNhLVx1MDAzZXNpdWN2X3VzZXJfaWQsIE5VTEwsIHVzZXJfZGF0YSxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzA5LVx0aWYgKGVycikge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjcxMDpcdFx0aXVjdl9wYXRoX2ZyZWUoaXVjdi1cdTAwM2VwYXRoKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzo3MTE6XHRcdGl1Y3YtXHUwMDNlcGF0aCA9IE5VTEw7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNzEyLVx0XHRzd2l0Y2ggKGVycikge1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz05MTY9c3RhdGljIGludCBpdWN2X3NvY2tfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNTQtXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTA1NTpcdFx0aWYgKCgoaXVjdi1cdTAwM2VwYXRoLVx1MDAzZWZsYWdzIFx1MDAyNiBJVUNWX0lQUk1EQVRBKSBcdTAwMjYgaXVjdi1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA1Ni1cdFx0ICAgIHNrYi1cdTAwM2VsZW4gXHUwMDNjPSA3KSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTA1NzpcdFx0XHRlcnIgPSBpdWN2X3NlbmRfaXBybShpdWN2LVx1MDAzZXBhdGgsIFx1MDAyNnR4bXNnLCBza2IpO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNTgtXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNjktXHRcdFx0aWYgKGVyciA9PSAweDE1KSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTA3MDpcdFx0XHRcdHByX2l1Y3YtXHUwMDNlcGF0aF9zZXZlcihpdWN2LVx1MDAzZXBhdGgsIE5VTEwpO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNzEtXHRcdFx0XHRhdG9taWNfZGVjKFx1MDAyNml1Y3YtXHUwMDNlc2tic19pbl94bWl0KTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA4OC1cdFx0XHR9XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTA4OTpcdFx0XHRlcnIgPSBwcl9pdWN2LVx1MDAzZW1lc3NhZ2Vfc2VuZChpdWN2LVx1MDAzZXBhdGgsIFx1MDAyNnR4bXNnLFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwOTAtXHRcdFx0XHRcdFx0ICAgIElVQ1ZfSVBCVUZMU1QsIDAsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwOTItXHRcdH0gZWxzZSB7IC8qIG5vbi1JUFJNIExpbmVhciBza2IgKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMDkzOlx0XHRcdGVyciA9IHByX2l1Y3YtXHUwMDNlbWVzc2FnZV9zZW5kKGl1Y3YtXHUwMDNlcGF0aCwgXHUwMDI2dHhtc2csXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA5NC1cdFx0XHRcdFx0MCwgMCwgKHZvaWQgKilza2ItXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWxlbik7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTE0MTg9c3RhdGljIGludCBpdWN2X3NvY2tfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGhvdylcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ0Ni1cdFx0XHR0eG1zZy50YWcgPSAwO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE0NDc6XHRcdFx0ZXJyID0gcHJfaXVjdi1cdTAwM2VtZXNzYWdlX3NlbmQoaXVjdi1cdTAwM2VwYXRoLCBcdTAwMjZ0eG1zZyxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDQ4LVx0XHRcdFx0SVVDVl9JUFJNREFUQSwgMCwgKHZvaWQgKikgaXBybV9zaHV0ZG93biwgOCk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NjgtXHRcdGlmICgoaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKSBcdTAwMjZcdTAwMjZcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNDY5Olx0XHQgICAgaXVjdi1cdTAwM2VwYXRoKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ3MDpcdFx0XHRlcnIgPSBwcl9pdWN2LVx1MDAzZXBhdGhfcXVpZXNjZShpdWN2LVx1MDAzZXBhdGgsIE5VTEwpO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NzEtXHRcdFx0aWYgKGVycilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTU1Mj1zdGF0aWMgaW50IGl1Y3Zfc29ja19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE1NzYtXHRjYXNlIFNPX01TR0xJTUlUOlxubmV0L2l1Y3YvYWZfaXVjdi5jOjE1Nzc6XHRcdHZhbCA9IChpdWN2LVx1MDAzZXBhdGggIT0gTlVMTCkgPyBpdWN2LVx1MDAzZXBhdGgtXHUwMDNlbXNnbGltXHQvKiBjb25uZWN0ZWQgKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNTc4LVx0XHRcdFx0XHQgICA6IGl1Y3YtXHUwMDNlbXNnbGltaXQ7XHQvKiBkZWZhdWx0ICovXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTE2MDc9c3RhdGljIGludCBpdWN2X2NhbGxiYWNrX2Nvbm5yZXEoc3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY0NC1cdGlmIChzay1cdTAwM2Vza19zdGF0ZSAhPSBJVUNWX0xJU1RFTikge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE2NDU6XHRcdGVyciA9IHByX2l1Y3YtXHUwMDNlcGF0aF9zZXZlcihwYXRoLCB1c2VyX2RhdGEpO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NDYtXHRcdGl1Y3ZfcGF0aF9mcmVlKHBhdGgpO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjUxLVx0aWYgKHNrX2FjY2VwdHFfaXNfZnVsbChzaykpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjUyOlx0XHRlcnIgPSBwcl9pdWN2LVx1MDAzZXBhdGhfc2V2ZXIocGF0aCwgdXNlcl9kYXRhKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjUzLVx0XHRpdWN2X3BhdGhfZnJlZShwYXRoKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY1OS1cdGlmICghbnNrKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTY2MDpcdFx0ZXJyID0gcHJfaXVjdi1cdTAwM2VwYXRoX3NldmVyKHBhdGgsIHVzZXJfZGF0YSk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY2MS1cdFx0aXVjdl9wYXRoX2ZyZWUocGF0aCk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NzUtXHRtZW1jcHkobml1Y3YtXHUwMDNlc3JjX3VzZXJfaWQsIGl1Y3YtXHUwMDNlc3JjX3VzZXJfaWQsIDgpO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE2NzY6XHRuaXVjdi1cdTAwM2VwYXRoID0gcGF0aDtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjc3LVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjg1LVx0cGF0aC1cdTAwM2Vtc2dsaW0gPSBpdWN2LVx1MDAzZW1zZ2xpbWl0O1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE2ODY6XHRlcnIgPSBwcl9pdWN2LVx1MDAzZXBhdGhfYWNjZXB0KHBhdGgsIFx1MDAyNmFmX2l1Y3ZfaGFuZGxlciwgbnVzZXJfZGF0YSwgbnNrKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjg3LVx0aWYgKGVycikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODcyMgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDI1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElVQ1YgUGF0aCBMb2dpYyoqCgpPa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBpdWN2LSZndDtwYXRoYCBpcyAqb25seSogdXNlZCB3aGVuIHRoZSB0cmFuc3BvcnQgdHlwZSBpcyBgQUZfSVVDVl9UUkFOU19JVUNWYC4gVGhpcyBpcyB0aGUgY3J1eCBvZiB0aGUgaXNzdWUuIElmIHdlJiMzOTtyZSAqbm90KiBvbiB6L1ZNLCB0aGVuIHRoZSBwb2ludGVyIGBwcl9pdWN2YCBpcyBudWxsLCB0aGUgYGl1Y3YtJmd0O3RyYW5zcG9ydGAgaXMgc2V0IHRvIGBBRl9JVUNWX1RSQU5TX0hJUEVSYCwgYW5kIGBpdWN2LSZndDtwYXRoYCBuZXZlciBnZXRzIGFsbG9jYXRlZCBpbiB0aGUgZmlyc3QgcGxhY2UuCgpXYWl0IGEgc2Vjb25k4oCmIGlmIGBpdWN2LSZndDtwYXRoYCBpcyAqbmV2ZXIqIGFsbG9jYXRlZCB3aGVuIHRoZSB0cmFuc3BvcnQgaXMgSElQRVIsIHRoZW4gdGhlIGZ1bmN0aW9uIGBpdWN2X3NldmVyX3BhdGhgIHdvbuKAmXQgYWN0dWFsbHkgZG8gYW55dGhpbmcgYmVjYXVzZSB0aGUgYHhjaGcoJmFtcDtpdWN2LSZndDtwYXRoLCBOVUxMKWAgY2FsbCB3aWxsIGFsd2F5cyBqdXN0IHJldHVybiBgTlVMTGAuIFRoZXJlZm9yZSwgdGhhdCBtb2RpZmllZCBjb2RlIHdpdGhpbiBgaXVjdl9zZXZlcl9wYXRoYCB3aWxsICpuZXZlciogZ2V0IGV4ZWN1dGVkIHVubGVzcyB0aGUgc3lzdGVtIGlzIHJ1bm5pbmcgb24gei9WTS4KCklzIG15IGxpbmUgb2YgcmVhc29uaW5nIHNvdW5kPyBJIG5lZWQgdG8gY29uZmlybSB0aGlzLgoKQWxyaWdodCwgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayBpZiBgaXVjdi0mZ3Q7cGF0aGAgKmNhbiogYmUgc2V0IGZvciBgQUZfSVVDVl9UUkFOU19ISVBFUmAuIEnigJlsbCBsb29rIGF0IGBuZXQvaXVjdi9hZl9pdWN2LmNgLiBSaWdodCwgYGFmaXVjdl9wYXRoX2Nvbm5lY3RgIGlzIG9ubHkgY2FsbGVkIHdoZW4gYGl1Y3YtJmd0O3RyYW5zcG9ydGAgaXMgKm5vdCogYEFGX0lVQ1ZfVFJBTlNfSElQRVJgLiBTbyBpdCBzZWVtcyBoaWdobHkgdW5saWtlbHkuIE5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBpdWN2X3NlbmRfY3RybGAsIHNpbmNlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBISVBFUi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTU6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNjgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM2ODpcdC8qIFNlbmQgY29udHJvbGxpbmcgZmxhZ3MgdGhyb3VnaCBhbiBJVUNWIHNvY2tldCBmb3IgSElQRVIgdHJhbnNwb3J0ICovXG4gMzY5Olx0c3RhdGljIGludCBpdWN2X3NlbmRfY3RybChzdHJ1Y3Qgc29jayAqc2ssIHU4IGZsYWdzKVxuIDM3MDpcdHtcbiAzNzE6XHRcdHN0cnVjdCBpdWN2X3NvY2sgKml1Y3YgPSBpdWN2X3NrKHNrKTtcbiAzNzI6XHRcdGludCBlcnIgPSAwO1xuIDM3MzpcdFx0aW50IGJsZW47XG4gMzc0Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIDM3NTpcdFx0dTggc2h1dGRvd24gPSAwO1xuIDM3NjpcdFxuIDM3NzpcdFx0YmxlbiA9IHNpemVvZihzdHJ1Y3QgYWZfaXVjdl90cmFuc19oZHIpICYjNDM7XG4gMzc4Olx0XHQgICAgICAgTExfUkVTRVJWRURfU1BBQ0UoaXVjdi1cdTAwM2Voc19kZXYpO1xuIDM3OTpcdFx0aWYgKHNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNiBTRU5EX1NIVVRET1dOKSB7XG4gMzgwOlx0XHRcdC8qIGNvbnRyb2xsaW5nIGZsYWdzIHNob3VsZCBiZSBzZW50IGFueXdheSAqL1xuIDM4MTpcdFx0XHRzaHV0ZG93biA9IHNrLVx1MDAzZXNrX3NodXRkb3duO1xuIDM4MjpcdFx0XHRzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjY9IFJDVl9TSFVURE9XTjtcbiAzODM6XHRcdH1cbiAzODQ6XHRcdHNrYiA9IHNvY2tfYWxsb2Nfc2VuZF9za2Ioc2ssIGJsZW4sIDEsIFx1MDAyNmVycik7XG4gMzg1Olx0XHRpZiAoc2tiKSB7XG4gMzg2Olx0XHRcdHNrYl9yZXNlcnZlKHNrYiwgYmxlbik7XG4gMzg3Olx0XHRcdGVyciA9IGFmaXVjdl9oc19zZW5kKE5VTEwsIHNrLCBza2IsIGZsYWdzKTtcbiAzODg6XHRcdH1cbiAzODk6XHRcdGlmIChzaHV0ZG93bilcbiAzOTA6XHRcdFx0c2stXHUwMDNlc2tfc2h1dGRvd24gPSBzaHV0ZG93bjtcbiAzOTE6XHRcdHJldHVybiBlcnI7XG4gMzkyOlx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTc5NAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgSElQRVIgSXNzdWUqKgoKT2theSwgc28gSSBzZWUgYSBjYWxsIHRvIGBhZml1Y3ZfaHNfc2VuZGAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGFuZCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIEhJUEVSLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4gRmlyc3QsIEkgaGF2ZSBhIGh1bmNoLCBhIG5hZ2dpbmcgcXVlc3Rpb24sIHJlYWxseTogSXMgYGl1Y3YtJmd0O3BhdGhgIGFjdHVhbGx5IGJlaW5nIHNldCBjb3JyZWN0bHkgaW4gdGhlIGNvbnRleHQgb2YgSElQRVIgb3BlcmF0aW9ucz8gVGhhdCYjMzk7cyBhIGNsYXNzaWMgZ290Y2hhLiBUaGUgcGF0aCBpbml0aWFsaXphdGlvbiBpcyBjcnVjaWFsLiBJdOKAmXMgdGhlIG9idmlvdXMgZmlyc3Qgc3RlcCBvZiB0cm91Ymxlc2hvb3RpbmcgdGhpcy4KClRoZXJlZm9yZSwgSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgYGFmaXVjdl9oc19zZW5kYCBmdW5jdGlvbiBpdHNlbGYsIG9yIHBlcmhhcHMgcmVsYXRlZCBISVBFUiBmdW5jdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGRhdGEgZmxvdyBhbmQgaG93IGl0IGhhbmRsZXMgdGhlIElVQ1YgcGF0aCBzdHJ1Y3R1cmVzLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIG9yIG5vdCB0aGlzIGNyaXRpY2FsIGZpZWxkIGlzIGJlaW5nIHByb3Blcmx5IHBvcHVsYXRlZC4gVGhhdOKAmXMgd2hlcmUgSSYjMzk7bGwgYmVnaW4sIGxvb2tpbmcgZm9yIGluaXRpYWxpemF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpdWN2LVx1MDAzZXBhdGggPSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmM9NDY2PXN0YXRpYyBzdHJ1Y3Qgc29jayAqaXVjdl9zb2NrX2FsbG9jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90bywgZ2ZwX3QgcHJpbywgaW50IGtlcm4pXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ4OS1cdGF0b21pY19zZXQoXHUwMDI2aXVjdi1cdTAwM2Vtc2dfcmVjdiwgMCk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6NDkwOlx0aXVjdi1cdTAwM2VwYXRoID0gTlVMTDtcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OTEtXHRpdWN2LVx1MDAzZXNrX3R4bm90aWZ5ID0gYWZpdWN2X2hzX2NhbGxiYWNrX3R4bm90aWZ5O1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz02ODc9c3RhdGljIGludCBhZml1Y3ZfcGF0aF9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy02OTktXHQvKiBDcmVhdGUgcGF0aC4gKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYzo3MDA6XHRpdWN2LVx1MDAzZXBhdGggPSBpdWN2X3BhdGhfYWxsb2MoaXVjdi1cdTAwM2Vtc2dsaW1pdCxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03MDEtXHRcdFx0XHQgICAgIElVQ1ZfSVBSTURBVEEsIEdGUF9LRVJORUwpO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy03MTAtXHRcdGl1Y3ZfcGF0aF9mcmVlKGl1Y3YtXHUwMDNlcGF0aCk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6NzExOlx0XHRpdWN2LVx1MDAzZXBhdGggPSBOVUxMO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTcxMi1cdFx0c3dpdGNoIChlcnIpIHtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTYwNz1zdGF0aWMgaW50IGl1Y3ZfY2FsbGJhY2tfY29ubnJlcShzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjc1LVx0bWVtY3B5KG5pdWN2LVx1MDAzZXNyY191c2VyX2lkLCBpdWN2LVx1MDAzZXNyY191c2VyX2lkLCA4KTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjc2Olx0bml1Y3YtXHUwMDNlcGF0aCA9IHBhdGg7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY3Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTU6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2MjUKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJVUNWIFBhdGggSXNzdWUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IGBpdWN2LSZndDtwYXRoYCBpcyB0aGUgY3VscHJpdCwgYnV0IHdoZXJlIGlzIGl0IHNldD8gVGhlIGNvZGUgc2hvd3MgaXQmIzM5O3Mgb25seSBhc3NpZ25lZCB3aXRoaW4gYGFmaXVjdl9wYXRoX2Nvbm5lY3RgIGFuZCBgaXVjdl9jYWxsYmFja19jb25ucmVxYC4gQ3J1Y2lhbGx5LCBib3RoIGFyZSB0cmlnZ2VyZWQgb25seSB3aGVuIGRlYWxpbmcgd2l0aCBgQUZfSVVDVl9UUkFOU19JVUNWYCBjb25uZWN0aW9ucy4gTm93LCBgaXVjdl9jYWxsYmFja19jb25ucmVxYCBpcyByZWdpc3RlcmVkIGFzIGEgY2FsbGJhY2sgdmlhIGBwcl9pdWN2LSZndDtpdWN2X3JlZ2lzdGVyYC4gSWYgYHByX2l1Y3ZgIGlzIGBOVUxMYCwgdGhlbiBgaXVjdl9jYWxsYmFja19jb25ucmVxYCBpcyAqbmV2ZXIqIGludm9rZWQuIENvbnNlcXVlbnRseSwgYGl1Y3YtJmd0O3BhdGhgIGNhbiAqbmV2ZXIqIGJlIG5vbi1OVUxMIHdoZW4gYHByX2l1Y3ZgIGlzIGBOVUxMYC4KCkFoYSEgTm93LCB3aGVuIGlzIGBwcl9pdWN2YCBub24tTlVMTD8gVGhhdCBkZXBlbmRzIG9uIGBtYWNoaW5lX2lzX3ZtKClgLiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBvbmx5IGlmIHdlJiMzOTtyZSBydW5uaW5nIHVuZGVyIHRoZSB6L1ZNIGh5cGVydmlzb3IuIEJ1dCB3YWl0LCBJIG5lZWQgdG8gY29uZmlybTogZG9lcyBRRU1VIGVtdWxhdGUgei9WTT8gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IFFFTVUgdHlwaWNhbGx5IGVtdWxhdGVzIEtWTSBvciBUQ0csIGFuZCB0aGUgbWFjaGluZSB0eXBlIGlzIHVzdWFsbHkgcmVwb3J0ZWQgYXMgYHMzOTAtY2N3LXZpcnRpb2AuIE9rYXksIHNvIFFFTVUgZG9lcyAqbm90KiBlbXVsYXRlIHovVk0uIFRoZXJlZm9yZSwgYG1hY2hpbmVfaXNfdm0oKWAgd2lsbCByZXR1cm4gZmFsc2UuIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGF0IGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWNoaW5lX2lzX3ZtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9ib290L3N0YXJ0dXAuYz03MT1zdGF0aWMgdm9pZCBkZXRlY3RfZGlhZzI4OCh2b2lkKVxuLS1cbmFyY2gvczM5MC9ib290L3N0YXJ0dXAuYy03Ni1cbmFyY2gvczM5MC9ib290L3N0YXJ0dXAuYzo3NzpcdGFjdGlvbiA9IG1hY2hpbmVfaXNfdm0oKSA/ICh1bnNpZ25lZCBsb25nKWNtZCA6IExQQVJXRFRfUkVTVEFSVDtcbmFyY2gvczM5MC9ib290L3N0YXJ0dXAuYzo3ODpcdGxlbiA9IG1hY2hpbmVfaXNfdm0oKSA/IHNpemVvZihjbWQpIDogMDtcbmFyY2gvczM5MC9ib290L3N0YXJ0dXAuYy03OS1cdGlmIChfX2RpYWcyODgoV0RUX0ZVTkNfSU5JVCwgTUlOX0lOVEVSVkFMLCBhY3Rpb24sIGxlbikpXG4tLVxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcwYy5jPTEwOD1pbnQgX19pbml0IGh5cGZzX2RpYWcwY19pbml0KHZvaWQpXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmMtMTA5LXtcbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYzoxMTA6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYy0xMTEtXHRcdHJldHVybiAwO1xuLS1cbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYz0xMTk9dm9pZCBoeXBmc19kaWFnMGNfZXhpdCh2b2lkKVxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcwYy5jLTEyMC17XG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmM6MTIxOlx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmMtMTIyLVx0XHRyZXR1cm47XG4tLVxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmM9MTIzPWludCBoeXBmc192bV9pbml0KHZvaWQpXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfdm0uYy0xMjQte1xuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmM6MTI1Olx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfdm0uYy0xMjYtXHRcdHJldHVybiAwO1xuLS1cbmFyY2gvczM5MC9oeXBmcy9oeXBmc192bS5jPTEzNz12b2lkIGh5cGZzX3ZtX2V4aXQodm9pZClcbmFyY2gvczM5MC9oeXBmcy9oeXBmc192bS5jLTEzOC17XG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfdm0uYzoxMzk6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9oeXBmcy9oeXBmc192bS5jLTE0MC1cdFx0cmV0dXJuO1xuLS1cbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jPTE0OD1zdGF0aWMgc3NpemVfdCBoeXBmc193cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuLS1cbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jLTE3MC1cdGh5cGZzX2RlbGV0ZV90cmVlKCk7XG5hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYzoxNzE6XHRpZiAobWFjaGluZV9pc192bSgpKVxuYXJjaC9zMzkwL2h5cGZzL2lub2RlLmMtMTcyLVx0XHRyYyA9IGh5cGZzX3ZtX2NyZWF0ZV9maWxlcyhzYi1cdTAwM2VzX3Jvb3QpO1xuLS1cbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jPTI0MD1zdGF0aWMgaW50IGh5cGZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jLTI1OS1cdFx0cmV0dXJuIC1FTk9NRU07XG5hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYzoyNjA6XHRpZiAobWFjaGluZV9pc192bSgpKVxuYXJjaC9zMzkwL2h5cGZzL2lub2RlLmMtMjYxLVx0XHRyYyA9IGh5cGZzX3ZtX2NyZWF0ZV9maWxlcyhyb290X2RlbnRyeSk7XG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwcGxkYXRhLmg9NDU9c3RhdGljIGlubGluZSBpbnQgYXBwbGRhdGFfYXNtKHN0cnVjdCBhcHBsZGF0YV9wYXJhbWV0ZXJfbGlzdCAqcGFybV9saXN0LFxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcHBsZGF0YS5oLTUxLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwcGxkYXRhLmg6NTI6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcHBsZGF0YS5oLTUzLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaD05Nz1ERUZJTkVfTUFDSElORV9IQVNfRkVBVFVSRShscGFyLCBNRkVBVFVSRV9MUEFSKVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaC05OC1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg6OTk6I2RlZmluZSBtYWNoaW5lX2lzX3ZtXHRtYWNoaW5lX2hhc192bVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaC0xMDAtI2RlZmluZSBtYWNoaW5lX2lzX2t2bVx0bWFjaGluZV9oYXNfa3ZtXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jPTExMD1zdGF0aWMgbm9pbmxpbmUgX19pbml0IHZvaWQgc2V0dXBfYXJjaF9zdHJpbmcodm9pZClcbi0tXG5hcmNoL3MzOTAva2VybmVsL2Vhcmx5LmMtMTMyLVx0XHRcdCAgbWFjaGluZV9pc19scGFyKCkgPyBcJiMzNDtMUEFSXCYjMzQ7IDpcbmFyY2gvczM5MC9rZXJuZWwvZWFybHkuYzoxMzM6XHRcdFx0ICBtYWNoaW5lX2lzX3ZtKCkgPyBcJiMzNDt6L1ZNXCYjMzQ7IDpcbmFyY2gvczM5MC9rZXJuZWwvZWFybHkuYy0xMzQtXHRcdFx0ICBtYWNoaW5lX2lzX2t2bSgpID8gXCYjMzQ7S1ZNXCYjMzQ7IDogXCYjMzQ7dW5rbm93blwmIzM0Oyk7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYz02OTQ9c3RhdGljIGludCBfX2luaXQgaXBsX2luaXQodm9pZClcbi0tXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTcwNy1cdGNhc2UgSVBMX1RZUEVfQ0NXOlxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYzo3MDg6XHRcdGlmIChtYWNoaW5lX2lzX3ZtKCkpXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTcwOS1cdFx0XHRyYyA9IHN5c2ZzX2NyZWF0ZV9ncm91cChcdTAwMjZpcGxfa3NldC1cdTAwM2Vrb2JqLFxuLS1cbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM9MTI4Nj1zdGF0aWMgdm9pZCByZWlwbF9ibG9ja19jY3dfZmlsbF9wYXJtcyhzdHJ1Y3QgaXBsX3BhcmFtZXRlcl9ibG9jayAqaXBiKVxuLS1cbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMTI5Ny1cdC8qIFZNIFBBUk0gKi9cbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM6MTI5ODpcdGlmIChtYWNoaW5lX2lzX3ZtKCkgXHUwMDI2XHUwMDI2IGlwbF9ibG9ja192YWxpZCBcdTAwMjZcdTAwMjZcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMTI5OS1cdCAgICAoaXBsX2Jsb2NrLmNjdy52bV9mbGFncyBcdTAwMjYgSVBMX1BCMF9DQ1dfVk1fRkxBR19WUCkpIHtcbi0tXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jPTEzMDg9c3RhdGljIGludCBfX2luaXQgcmVpcGxfbnNzX2luaXQodm9pZClcbi0tXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTEzMTEtXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jOjEzMTI6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMTMxMy1cdFx0cmV0dXJuIDA7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYz0xMzI4PXN0YXRpYyBpbnQgX19pbml0IHJlaXBsX2Njd19pbml0KHZvaWQpXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0xMzM2LVx0cmMgPSBzeXNmc19jcmVhdGVfZ3JvdXAoXHUwMDI2cmVpcGxfa3NldC1cdTAwM2Vrb2JqLFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYzoxMzM3Olx0XHRcdFx0bWFjaGluZV9pc192bSgpID8gXHUwMDI2cmVpcGxfY2N3X2F0dHJfZ3JvdXBfdm1cbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMTMzOC1cdFx0XHRcdFx0XHQ6IFx1MDAyNnJlaXBsX2Njd19hdHRyX2dyb3VwX2xwYXIpO1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM9MjAxND1zdGF0aWMgaW50IHZtY21kX2luaXQodm9pZClcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMjAxNS17XG5hcmNoL3MzOTAva2VybmVsL2lwbC5jOjIwMTY6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMjAxNy1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM9MjI5ND1zdGF0aWMgaW50IF9faW5pdCB2bWNtZF9vbl9yZWJvb3Rfc2V0dXAoY2hhciAqc3RyKVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0yMjk1LXtcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM6MjI5NjpcdGlmICghbWFjaGluZV9pc192bSgpKVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0yMjk3LVx0XHRyZXR1cm4gMTtcbi0tXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jPTIzMDQ9c3RhdGljIGludCBfX2luaXQgdm1jbWRfb25fcGFuaWNfc2V0dXAoY2hhciAqc3RyKVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0yMzA1LXtcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM6MjMwNjpcdGlmICghbWFjaGluZV9pc192bSgpKVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0yMzA3LVx0XHRyZXR1cm4gMTtcbi0tXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jPTIzMTQ9c3RhdGljIGludCBfX2luaXQgdm1jbWRfb25faGFsdF9zZXR1cChjaGFyICpzdHIpXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTIzMTUte1xuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYzoyMzE2Olx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTIzMTctXHRcdHJldHVybiAxO1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM9MjMyND1zdGF0aWMgaW50IF9faW5pdCB2bWNtZF9vbl9wb2ZmX3NldHVwKGNoYXIgKnN0cilcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMjMyNS17XG5hcmNoL3MzOTAva2VybmVsL2lwbC5jOjIzMjY6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMjMyNy1cdFx0cmV0dXJuIDE7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9tYWNoaW5lX2tleGVjLmM9MTgwPXN0YXRpYyBpbnQgbWFjaGluZV9rZXhlY19wcmVwYXJlX2tkdW1wKHZvaWQpXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMtMTgyLSNpZmRlZiBDT05GSUdfQ1JBU0hfRFVNUFxuYXJjaC9zMzkwL2tlcm5lbC9tYWNoaW5lX2tleGVjLmM6MTgzOlx0aWYgKG1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jLTE4NC1cdFx0ZGlhZzEwX3JhbmdlKFBGTl9ET1dOKGNyYXNoa19yZXMuc3RhcnQpLFxuLS1cbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYz0yNDY9c3RhdGljIHZvaWQgX19pbml0IGNvbm1vZGVfZGVmYXVsdCh2b2lkKVxuLS1cbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYy0yNTAtXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmM6MjUxOlx0aWYgKG1hY2hpbmVfaXNfdm0oKSkge1xuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jLTI1Mi1cdFx0Y3BjbWQoXCYjMzQ7UVVFUlkgQ09OU09MRVwmIzM0OywgcXVlcnlfYnVmZmVyLCAxMDI0LCBOVUxMKTtcbi0tXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmM9NTk4PXN0YXRpYyB2b2lkIF9faW5pdCByZXNlcnZlX2NyYXNoa2VybmVsKHZvaWQpXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jLTY1MC1cbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYzo2NTE6XHRpZiAoIW9sZG1lbV9kYXRhLnN0YXJ0IFx1MDAyNlx1MDAyNiBtYWNoaW5lX2lzX3ZtKCkpXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmMtNjUyLVx0XHRkaWFnMTBfcmFuZ2UoUEZOX0RPV04oY3Jhc2hfYmFzZSksIFBGTl9ET1dOKGNyYXNoX3NpemUpKTtcbi0tXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmM9ODk3PXZvaWQgX19pbml0IHNldHVwX2FyY2goY2hhciAqKmNtZGxpbmVfcClcbi0tXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmMtOTAxLSAgICAgICAgICovXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmM6OTAyOlx0aWYgKG1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYy05MDMtXHRcdHByX2luZm8oXCYjMzQ7TGludXggaXMgcnVubmluZyBhcyBhIHovVk0gXCYjMzQ7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9zeXNpbmZvLmM9Mzc5PXN0YXRpYyBfX2luaXQgaW50IGNyZWF0ZV9wcm9jX3NlcnZpY2VfbGV2ZWwodm9pZClcbi0tXG5hcmNoL3MzOTAva2VybmVsL3N5c2luZm8uYy0zODEtXHRwcm9jX2NyZWF0ZV9zZXEoXCYjMzQ7c2VydmljZV9sZXZlbHNcJiMzNDssIDAsIE5VTEwsIFx1MDAyNnNlcnZpY2VfbGV2ZWxfc2VxX29wcyk7XG5hcmNoL3MzOTAva2VybmVsL3N5c2luZm8uYzozODI6XHRpZiAobWFjaGluZV9pc192bSgpKVxuYXJjaC9zMzkwL2tlcm5lbC9zeXNpbmZvLmMtMzgzLVx0XHRyZWdpc3Rlcl9zZXJ2aWNlX2xldmVsKFx1MDAyNnNlcnZpY2VfbGV2ZWxfdm0pO1xuLS1cbmFyY2gvczM5MC9tbS9leHRtZW0uYz0yNTM9c2VnbWVudF90eXBlIChjaGFyKiBuYW1lKVxuLS1cbmFyY2gvczM5MC9tbS9leHRtZW0uYy0yNTctXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmM6MjU4Olx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmMtMjU5LVx0XHRyZXR1cm4gLUVOT1NZUztcbi0tXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmM9NDE1PXNlZ21lbnRfbG9hZCAoY2hhciAqbmFtZSwgaW50IGRvX25vbnNoYXJlZCwgdW5zaWduZWQgbG9uZyAqYWRkcixcbi0tXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmMtNDIwLVxuYXJjaC9zMzkwL21tL2V4dG1lbS5jOjQyMTpcdGlmICghbWFjaGluZV9pc192bSgpKVxuYXJjaC9zMzkwL21tL2V4dG1lbS5jLTQyMi1cdFx0cmV0dXJuIC1FTk9TWVM7XG4tLVxuYXJjaC9zMzkwL21tL2V4dG1lbS5jPTU0Nj1zZWdtZW50X3VubG9hZChjaGFyICpuYW1lKVxuLS1cbmFyY2gvczM5MC9tbS9leHRtZW0uYy01NDktXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmM6NTUwOlx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmMtNTUxLVx0XHRyZXR1cm47XG4tLVxuYXJjaC9zMzkwL21tL2V4dG1lbS5jPTU4Mj1zZWdtZW50X3NhdmUoY2hhciAqbmFtZSlcbi0tXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmMtNTg4LVxuYXJjaC9zMzkwL21tL2V4dG1lbS5jOjU4OTpcdGlmICghbWFjaGluZV9pc192bSgpKVxuYXJjaC9zMzkwL21tL2V4dG1lbS5jLTU5MC1cdFx0cmV0dXJuO1xuLS1cbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkLmM9MzMzOT1pbnQgZGFzZF9kZXZpY2VfaXNfcm8oc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UpXG4tLVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYy0zMzQ0LVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYzozMzQ1Olx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jLTMzNDYtXHRcdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jPTIyND1zdGF0aWMgaW50IF9faW5pdCBkYXNkX3BhcnNlX2tleXdvcmQoY2hhciAqa2V5d29yZClcbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYy0yMzgtXHRpZiAoc3RybmNtcChcJiMzNDtub3BhdlwmIzM0Oywga2V5d29yZCwgbGVuZ3RoKSA9PSAwKSB7XG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYzoyMzk6XHRcdGlmIChtYWNoaW5lX2lzX3ZtKCkpXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYy0yNDAtXHRcdFx0cHJfaW5mbyhcJiMzNDsmIzM5O25vcGF2JiMzOTsgaXMgbm90IHN1cHBvcnRlZCBvbiB6L1ZNXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmM9NjU2PWRhc2RfZGlhZ19pbml0KHZvaWQpXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmMtNjU3LXtcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYzo2NTg6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSkge1xuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jLTY1OS1cdFx0cHJfaW5mbyhcJiMzNDtEaXNjaXBsaW5lICVzIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgei9WTVxcblwmIzM0Oyxcbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmM9MTk0Nz1zdGF0aWMgaW50IGRhc2RfZWNrZF92YWxpZGF0ZV9zZXJ2ZXIoc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UsXG4tLVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jLTE5NTUtXHRcdHJldHVybiAwO1xuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jOjE5NTY6XHRpZiAoZGFzZF9ub3BhdiB8fCBtYWNoaW5lX2lzX3ZtKCkpXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMtMTk1Ny1cdFx0ZW5hYmxlX3BhdiA9IDA7XG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jPTg5OT1zdGF0aWMgaW50IF9faW5pdCBjb24zMjE1X2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci9jb24zMjE1LmMtOTEwLVx0LyogU2V0IHRoZSBjb25zb2xlIG1vZGUgZm9yIFZNICovXG5kcml2ZXJzL3MzOTAvY2hhci9jb24zMjE1LmM6OTExOlx0aWYgKG1hY2hpbmVfaXNfdm0oKSkge1xuZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jLTkxMi1cdFx0Y3BjbWQoXCYjMzQ7VEVSTSBDT05NT0RFIDMyMTVcJiMzNDssIE5VTEwsIDAsIE5VTEwpO1xuLS1cbmRyaXZlcnMvczM5MC9jaGFyL2NvbjMyNzAuYz0yMTM0PWNvbjMyNzBfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jaGFyL2NvbjMyNzAuYy0yMTQ1LVx0LyogU2V0IHRoZSBjb25zb2xlIG1vZGUgZm9yIFZNICovXG5kcml2ZXJzL3MzOTAvY2hhci9jb24zMjcwLmM6MjE0NjpcdGlmIChtYWNoaW5lX2lzX3ZtKCkpIHtcbmRyaXZlcnMvczM5MC9jaGFyL2NvbjMyNzAuYy0yMTQ3LVx0XHRjcGNtZChcJiMzNDtURVJNIENPTk1PREUgMzI3MFwmIzM0OywgTlVMTCwgMCwgTlVMTCk7XG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvaG1jZHJ2X2Z0cC5jPTI5Mz1pbnQgaG1jZHJ2X2Z0cF9zdGFydHVwKHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvaG1jZHJ2X2Z0cC5jLTMxMS1cdGlmIChobWNkcnZfZnRwX3JlZmNudCA9PSAwKSB7XG5kcml2ZXJzL3MzOTAvY2hhci9obWNkcnZfZnRwLmM6MzEyOlx0XHRpZiAobWFjaGluZV9pc192bSgpKVxuZHJpdmVycy9zMzkwL2NoYXIvaG1jZHJ2X2Z0cC5jLTMxMy1cdFx0XHRobWNkcnZfZnRwX2Z1bmNzID0gXHUwMDI2aG1jZHJ2X2Z0cF96dm07XG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvbW9ucmVhZGVyLmM9NDU0PXN0YXRpYyBpbnQgX19pbml0IG1vbl9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvbW9ucmVhZGVyLmMtNDU3LVxuZHJpdmVycy9zMzkwL2NoYXIvbW9ucmVhZGVyLmM6NDU4Olx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpIHtcbmRyaXZlcnMvczM5MC9jaGFyL21vbnJlYWRlci5jLTQ1OS1cdFx0cHJfZXJyKFwmIzM0O1RoZSB6L1ZNICpNT05JVE9SIHJlY29yZCBkZXZpY2UgZHJpdmVyIGNhbm5vdCBiZSBcJiMzNDtcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci9tb253cml0ZXIuYz0yOTQ9c3RhdGljIGludCBfX2luaXQgbW9uX2luaXQodm9pZClcbmRyaXZlcnMvczM5MC9jaGFyL21vbndyaXRlci5jLTI5NS17XG5kcml2ZXJzL3MzOTAvY2hhci9tb253cml0ZXIuYzoyOTY6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcbmRyaXZlcnMvczM5MC9jaGFyL21vbndyaXRlci5jLTI5Ny1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvcmF3MzI3MC5jPTYxND1zdGF0aWMgdm9pZCByYXczMjcwX3Jlc2V0X2RldmljZV9jYihzdHJ1Y3QgcmF3MzI3MF9yZXF1ZXN0ICpycSwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci9yYXczMjcwLmMtNjIyLVx0XHRycC1cdTAwM2VzdGF0ZSA9IFJBVzMyNzBfU1RBVEVfSU5JVDtcbmRyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuYzo2MjM6XHR9IGVsc2UgaWYgKG1hY2hpbmVfaXNfdm0oKSkge1xuZHJpdmVycy9zMzkwL2NoYXIvcmF3MzI3MC5jLTYyNC1cdFx0cmF3MzI3MF9zaXplX2RldmljZV92bShycCk7XG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oPTM0ND1zY2xwX2FzY2ViYyh1bnNpZ25lZCBjaGFyIGNoKVxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oLTM0NS17XG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmg6MzQ2Olx0cmV0dXJuIChtYWNoaW5lX2lzX3ZtKCkpID8gX2FzY2ViY1tjaF0gOiBfYXNjZWJjXzUwMFtjaF07XG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmgtMzQ3LX1cbi0tXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmg9MzUxPXNjbHBfZWJjYXNjX3N0cihjaGFyICpzdHIsIGludCBucilcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHAuaC0zNTIte1xuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oOjM1MzpcdChtYWNoaW5lX2lzX3ZtKCkpID8gRUJDQVNDKHN0ciwgbnIpIDogRUJDQVNDXzUwMChzdHIsIG5yKTtcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHAuaC0zNTQtfVxuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3NjbHAuaD0zNTg9c2NscF9hc2NlYmNfc3RyKGNoYXIgKnN0ciwgaW50IG5yKVxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oLTM1OS17XG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmg6MzYwOlx0KG1hY2hpbmVfaXNfdm0oKSkgPyBBU0NFQkMoc3RyLCBucikgOiBBU0NFQkNfNTAwKHN0ciwgbnIpO1xuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oLTM2MS19XG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF9lYXJseS5jPTI2PXN0YXRpYyB2b2lkIF9faW5pdCBzY2xwX2Vhcmx5X2ZhY2lsaXRpZXNfZGV0ZWN0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF9lYXJseS5jLTc4LVx0aWYgKCFzY2NiLVx1MDAzZWhjcHVhKSB7XG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2Vhcmx5LmM6Nzk6XHRcdGlmIChtYWNoaW5lX2lzX3ZtKCkpXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2Vhcmx5LmMtODAtXHRcdFx0c2NscC5tYXhfY29yZXMgPSA2NDtcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3R0eS5jPTUwNT1zY2xwX3R0eV9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF90dHkuYy01MTItXHQvKiB6L1ZNIG11bHRpcGxleGVzIHRoZSBsaW5lIG1vZGUgb3V0cHV0IG9uIHRoZSAzMnh4IHNjcmVlbiAqL1xuZHJpdmVycy9zMzkwL2NoYXIvc2NscF90dHkuYzo1MTM6XHRpZiAobWFjaGluZV9pc192bSgpIFx1MDAyNlx1MDAyNiAhQ09OU09MRV9JU19TQ0xQKVxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF90dHkuYy01MTQtXHRcdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfdHR5LmMtNTM4LVx0c2NscF90dHlfYnVmZmVyX2NvdW50ID0gMDtcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfdHR5LmM6NTM5Olx0aWYgKG1hY2hpbmVfaXNfdm0oKSkge1xuZHJpdmVycy9zMzkwL2NoYXIvc2NscF90dHkuYy01NDAtXHRcdC8qIGNhc2UgaW5wdXQgbGluZXMgdG8gbG93ZXJjYXNlICovXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvdm1jcC5jPTUyPXZvaWQgX19pbml0IHZtY3BfY21hX3Jlc2VydmUodm9pZClcbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYy01My17XG5kcml2ZXJzL3MzOTAvY2hhci92bWNwLmM6NTQ6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYy01NS1cdFx0cmV0dXJuO1xuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYz0yNDg9c3RhdGljIGludCBfX2luaXQgdm1jcF9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvdm1jcC5jLTI1MS1cbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYzoyNTI6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYy0yNTMtXHRcdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3ZtbG9ncmRyLmM9ODA2PXN0YXRpYyBpbnQgX19pbml0IHZtbG9ncmRyX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci92bWxvZ3Jkci5jLTgxMS1cbmRyaXZlcnMvczM5MC9jaGFyL3ZtbG9ncmRyLmM6ODEyOlx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpIHtcbmRyaXZlcnMvczM5MC9jaGFyL3ZtbG9ncmRyLmMtODEzLVx0XHRwcl9lcnIoXCYjMzQ7bm90IHJ1bm5pbmcgdW5kZXIgVk0sIGRyaXZlciBub3QgbG9hZGVkLlxcblwmIzM0Oyk7XG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvdm11ci5jPTEwMDY9c3RhdGljIGludCBfX2luaXQgdXJfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3ZtdXIuYy0xMDEwLVxuZHJpdmVycy9zMzkwL2NoYXIvdm11ci5jOjEwMTE6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSkge1xuZHJpdmVycy9zMzkwL2NoYXIvdm11ci5jLTEwMTItXHRcdHByX2VycihcJiMzNDtUaGUgJXMgY2Fubm90IGJlIGxvYWRlZCB3aXRob3V0IHovVk1cXG5cJiMzNDssXG4tLVxuZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfaWQuYz0xNzM9c3RhdGljIHZvaWQgc25zaWRfY2FsbGJhY2soc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsIHZvaWQgKmRhdGEsIGludCByYylcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9pZC5jLTE3OC1cbmRyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2lkLmM6MTc5Olx0aWYgKHJjIFx1MDAyNlx1MDAyNiBtYWNoaW5lX2lzX3ZtKCkpIHtcbmRyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2lkLmMtMTgwLVx0XHQvKiBUcnkgZGlhZyAweDIxMCBmYWxsYmFjayBvbiB6L1ZNLiAqL1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM9MjQ5ND1zdGF0aWMgaW5saW5lIGludCBfX2luaXQgYXBfYXN5bmNfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjUwNC1cdCAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNTA1Olx0aWYgKG1hY2hpbmVfaXNfdm0oKSlcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjUwNi1cdFx0cG9sbF9oaWdoX3RpbWVvdXQgPSAxNTAwMDAwO1xuLS1cbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmM9Mjk3PXN0YXRpYyBpbnQgcWV0aF9sMl9yZXF1ZXN0X2luaXRpYWxfbWFjKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpXG4tLVxuZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYy0zMDItXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jOjMwMzpcdGlmIChtYWNoaW5lX2lzX3ZtKCkpIHtcbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMtMzA0LVx0XHRyYyA9IHFldGhfdm1fcmVxdWVzdF9tYWMoY2FyZCk7XG4tLVxuZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jPTEzOT1zdGF0aWMgaW50IF9faW5pdCBzbXNnX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmMtMTQyLVxuZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jOjE0MzpcdGlmICghbWFjaGluZV9pc192bSgpKSB7XG5kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmMtMTQ0LVx0XHRyYyA9IC1FUFJPVE9OT1NVUFBPUlQ7XG4tLVxuZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdl9hcHAuYz0xNTI9c3RhdGljIGludCBfX2luaXQgc21zZ2l1Y3ZfYXBwX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2X2FwcC5jLTE1Ni1cbmRyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3ZfYXBwLmM6MTU3Olx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2X2FwcC5jLTE1OC1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tLVxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmM9MTIzOT1zdGF0aWMgaW50IHBhcmFtX3NldF92bWlkZmlsdGVyKGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4tLVxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmMtMTI0Mi1cbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jOjEyNDM6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSB8fCAhaHZjX2l1Y3ZfZGV2aWNlcylcbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jLTEyNDQtXHRcdHJldHVybiAtRU5PREVWO1xuLS1cbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jPTEyNjY9c3RhdGljIGludCBwYXJhbV9nZXRfdm1pZGZpbHRlcihjaGFyICpidWZmZXIsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuLS1cbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jLTEyNzEtXG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYzoxMjcyOlx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkgfHwgIWh2Y19pdWN2X2RldmljZXMpXG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYy0xMjczLVx0XHRyZXR1cm4gLUVOT0RFVjtcbi0tXG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYz0xMzAxPXN0YXRpYyBpbnQgX19pbml0IGh2Y19pdWN2X2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYy0xMzA4LVxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmM6MTMwOTpcdGlmICghbWFjaGluZV9pc192bSgpKSB7XG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYy0xMzEwLVx0XHRwcl9ub3RpY2UoXCYjMzQ7VGhlIHovVk0gSVVDViBIVkMgZGV2aWNlIGRyaXZlciBjYW5ub3QgXCYjMzQ7XG4tLVxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jPTgxPXN0YXRpYyBpbnQgd2R0X3N0YXJ0KHN0cnVjdCB3YXRjaGRvZ19kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmMtODUtXG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmM6ODY6XHRpZiAobWFjaGluZV9pc192bSgpKSB7XG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmMtODctXHRcdGZ1bmMgPSBjb25jZWFsX29uID8gKFdEVF9GVU5DX0lOSVQgfCBXRFRfRlVOQ19DT05DRUFMKVxuLS1cbmRyaXZlcnMvd2F0Y2hkb2cvZGlhZzI4OF93ZHQuYz0xMDc9c3RhdGljIGludCB3ZHRfcGluZyhzdHJ1Y3Qgd2F0Y2hkb2dfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jLTExMS1cbmRyaXZlcnMvd2F0Y2hkb2cvZGlhZzI4OF93ZHQuYzoxMTI6XHRpZiAobWFjaGluZV9pc192bSgpKSB7XG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmMtMTEzLVx0XHQvKlxuLS1cbmRyaXZlcnMvd2F0Y2hkb2cvZGlhZzI4OF93ZHQuYz0xNjI9c3RhdGljIGludCBfX2luaXQgZGlhZzI4OF9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jLTE2NS1cbmRyaXZlcnMvd2F0Y2hkb2cvZGlhZzI4OF93ZHQuYzoxNjY6XHRpZiAobWFjaGluZV9pc192bSgpKSB7XG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmMtMTY3LVx0XHRjbWRfYnVmID0ga21hbGxvYyhNQVhfQ01ETEVOLCBHRlBfS0VSTkVMKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjI5ND1zdGF0aWMgaW50IF9faW5pdCBhZml1Y3ZfaW5pdCh2b2lkKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjk3LVxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyOTg6XHRpZiAobWFjaGluZV9pc192bSgpIFx1MDAyNlx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19JVUNWKSkge1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIyOTktXHRcdGNwY21kKFwmIzM0O1FVRVJZIFVTRVJJRFwmIzM0OywgaXVjdl91c2VyaWQsIHNpemVvZihpdWN2X3VzZXJpZCksIFx1MDAyNmVycik7XG4tLVxubmV0L2l1Y3YvaXVjdi5jPTE4NjI9c3RhdGljIGludCBfX2luaXQgaXVjdl9pbml0KHZvaWQpXG4tLVxubmV0L2l1Y3YvaXVjdi5jLTE4NjUtXG5uZXQvaXVjdi9pdWN2LmM6MTg2NjpcdGlmICghbWFjaGluZV9pc192bSgpKSB7XG5uZXQvaXVjdi9pdWN2LmMtMTg2Ny1cdFx0cmMgPSAtRVBST1RPTk9TVVBQT1JUO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODkzNQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDEzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBSZWFzb25pbmcgb24gdGhlIFZpcnR1YWwgTWFjaGluZSBEZXRlY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiBvdXIgZW52aXJvbm1lbnQgaXMgYSB2aXJ0dWFsIG1hY2hpbmUuIFNwZWNpZmljYWxseSwgSSBzZWUgYG1hY2hpbmVfaXNfdm1gIGlzIGRlZmluZWQgYXMgYG1hY2hpbmVfaGFzX3ZtYC4gTWFrZXMgc2Vuc2Ugc28gZmFyLiBUaGVuIGBtYWNoaW5lX2hhc192bWAgaXMgc2V0IGlmIHdlJiMzOTtyZSBydW5uaW5nIHVuZGVyIHovVk0uIEhtbSwgdGhhdCYjMzk7cyBhIGNsdWUuIE5vdywgSSBrbm93IFFFTVUgZW11bGF0ZXMgb3RoZXIgdmlydHVhbCBtYWNoaW5lcyDigJMgS1ZNIG9yIFRDRywgdXN1YWxseSDigJMgYnV0IGRvZXMgaXQgZW11bGF0ZSB6L1ZNPyBJIGRvbiYjMzk7dCAqdGhpbmsqIHNvLgoKV2FpdCBhIG1pbnV0ZS4uLiB3ZSYjMzk7cmUgZnV6emluZyBvbiBzMzkweCwgd2hpY2ggKmNvdWxkKiBiZSBydW5uaW5nIG9uIHJlYWwgei9WTSBoYXJkd2FyZS4gQnV0IFN5emthbGxlciB0eXBpY2FsbHkgdXNlcyBRRU1VLCBhbmQgUUVNVSB3b3VsZG4mIzM5O3QgYmUgZW11bGF0aW5nIHovVk0sIHJpZ2h0PyBTbywgZG9lcyBRRU1VIGVtdWxhdGUgei9WTT8KCk9rYXksIEkgbmVlZCB0byBnbyBiYWNrIGFuZCBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgbWFjaGluZV9pc192bWAuIEkgbmVlZCB0byBiZSBzdXJlLiBNeSBpbml0aWFsIGFzc3VtcHRpb25zIG1pZ2h0IGJlIGNvcnJlY3QsIGJ1dCBsZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEJhY2sgdG8gYmFzaWNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWNoaW5lX2hhc192bSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oPTk3PURFRklORV9NQUNISU5FX0hBU19GRUFUVVJFKGxwYXIsIE1GRUFUVVJFX0xQQVIpXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oLTk4LVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaDo5OTojZGVmaW5lIG1hY2hpbmVfaXNfdm1cdG1hY2hpbmVfaGFzX3ZtXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oLTEwMC0jZGVmaW5lIG1hY2hpbmVfaXNfa3ZtXHRtYWNoaW5lX2hhc19rdm1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTU6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk0NjIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlVucGFja2luZyBhIE1hY3JvOiBgbWFjaGluZV9oYXNfdm1gKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgc2VlIGBtYWNoaW5lX2hhc192bWAgaW4gdGhlIGNvZGUsIGFuZCBJJiMzOTttIHByZXR0eSBzdXJlIHRoYXQmIzM5O3MgYSBtYWNyby4gUmlnaHQsIGxldCYjMzk7cyBub3QgbWFrZSBhc3N1bXB0aW9ucyBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgbWFjcm8gaXMgKmFjdHVhbGx5KiBkb2luZyBiZWZvcmUgSSBnbyBhbnkgZnVydGhlci4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGp1bXAgdG8gaXRzIGRlZmluaXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBleHBhbnNpb24gdG8gYmUgY2VydGFpbiBvZiBpdHMgZWZmZWN0LCBlc3BlY2lhbGx5IGdpdmVuIGhvdyBjcml0aWNhbCBWTS1yZWxhdGVkIGxvZ2ljIG9mdGVuIGlzLiBJ4oCZbSBob3BpbmcgaXTigJlzIG5vdCBzb21ldGhpbmcgb3Zlcmx5IGNvbXBsZXgsIGJ1dCB5b3UgbmV2ZXIga25vdyB1bnRpbCB5b3UgbG9vay4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgZmlndXJlIG91dCBleGFjdGx5IHdoYXQgdGhlIHByZXByb2Nlc3NvciBpcyBnb2luZyB0byBzdWJzdGl0dXRlIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE1OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RFRklORV9NQUNISU5FX0hBU19GRUFUVVJFXFwodm0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaD05ND1ERUZJTkVfTUFDSElORV9IQVNfRkVBVFVSRShkaWFnOWMsIE1GRUFUVVJFX0RJQUc5QylcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg6OTU6REVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUodm0sIE1GRUFUVVJFX1ZNKVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaC05Ni1ERUZJTkVfTUFDSElORV9IQVNfRkVBVFVSRShrdm0sIE1GRUFUVVJFX0tWTSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTU6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk4MDMKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdDoKCioqVHJhY2luZyBEb3duIHRoZSBgTUZFQVRVUkVfVk1gIEZsYWcqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGBNRkVBVFVSRV9WTWAgc3ltYm9sIG9yIG1hY3JvIGlzIGRlZmluZWQgYW5kIHVzZWQuIEl0JiMzOTtzIHVzdWFsbHkgdGhlIGZpcnN0IHN0ZXAgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgcHVycG9zZSBvZiBzb21ldGhpbmcuIEkgbmVlZCB0byBrbm93OiBJcyB0aGlzIGEgZGVmaW5lIHN0YXRlbWVudD8gSXMgaXQgYSB2YXJpYWJsZT8gSXMgaXQgYmVpbmcgc2V0IGJhc2VkIG9uIGEgY29tcGlsZS10aW1lIGZsYWc/IEtub3dpbmcgdGhlIGRlZmluaXRpb24gd2lsbCB1bmxvY2sgc28gbXVjaCBpbmZvcm1hdGlvbi4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIHdoZXJlIHRoYXQgdmFyaWFibGUvbWFjcm8gaXMgKnVzZWQqIGFuZCB1bmRlcnN0YW5kIGl0cyBpbXBhY3Qgb24gdGhlIHN5c3RlbS4gSXMgaXQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24/IElzIGl0IGNvbnRyb2xsaW5nIHNvbWUgZXhlY3V0aW9uIHBhdGg/IFRoaXMgaXMgZ29pbmcgdG8gaW52b2x2ZSBzb21lIGNvZGUgc2VhcmNoaW5nIC0gbWF5YmUgZ3JlcCwgbWF5YmUgbXkgSURFJiMzOTtzIHN5bWJvbCBsb29rdXAsIGRlcGVuZGluZyBvbiB0aGUgY29kZWJhc2Ugc2l6ZSBhbmQgc3RydWN0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIHRoaW5rIGFib3V0IHBvdGVudGlhbCBoZWFkZXIgZmlsZXMsIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLCBhbmQgaWYgdGhpcyByZWxhdGVzIHRvIHNvbWUgcGxhdGZvcm0tc3BlY2lmaWMgZnVuY3Rpb25hbGl0eS4gQSBiaXQgb2YgZGV0ZWN0aXZlIHdvcmssIGJ1dCBmYWlybHkgcm91dGluZSB0byB1bmRlcnN0YW5kIHN5c3RlbSBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTU6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUZFQVRVUkVfVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2Jvb3Qvc3RhcnR1cC5jPTUyPXN0YXRpYyB2b2lkIGRldGVjdF9tYWNoaW5lX3R5cGUodm9pZClcbi0tXG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmMtNjctXHRlbHNlIGlmICghbWVtY21wKHZtbXMtXHUwMDNldm1bMF0uY3BpLCBcJiMzNDtcXHhhOVxceDYxXFx4ZTVcXHhkNFwmIzM0OywgNCkpXG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmM6Njg6XHRcdHNldF9tYWNoaW5lX2ZlYXR1cmUoTUZFQVRVUkVfVk0pO1xuYXJjaC9zMzkwL2Jvb3Qvc3RhcnR1cC5jLTY5LX1cbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oLTE3LSNkZWZpbmUgTUZFQVRVUkVfRElBRzlDXHRcdDZcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg6MTg6I2RlZmluZSBNRkVBVFVSRV9WTVx0XHQ3XG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oLTE5LSNkZWZpbmUgTUZFQVRVUkVfS1ZNXHRcdDhcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oPTk0PURFRklORV9NQUNISU5FX0hBU19GRUFUVVJFKGRpYWc5YywgTUZFQVRVUkVfRElBRzlDKVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaDo5NTpERUZJTkVfTUFDSElORV9IQVNfRkVBVFVSRSh2bSwgTUZFQVRVUkVfVk0pXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oLTk2LURFRklORV9NQUNISU5FX0hBU19GRUFUVVJFKGt2bSwgTUZFQVRVUkVfS1ZNKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDM4MgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEh5cGVydmlzb3IgQ2hlY2sqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQmIzM5O3MgY2hlY2tpbmcgYHZtbXMtJmd0O3ZtWzBdLmNwaWAgZm9yIGAmIzM0O1x4YTlceDYxXHhlNVx4ZDQmIzM0O2AsIHdoaWNoIEkgaW5zdGFudGx5IHJlY29nbml6ZSBhcyB0aGUgRUJDRElDIGVxdWl2YWxlbnQgb2YgJiMzNDt6L1ZNJiMzNDsuIFRoYXQmIzM5O3MgdGhlIGtleS4gVGhpcyB3aG9sZSBzZWN0aW9uIGlzIHNwZWNpZmljYWxseSBmb3IgaWRlbnRpZnlpbmcgaWYgdGhlIGNvZGUgaXMgcnVubmluZyBvbiB6L1ZNLiBRRU1VLCBvbiB0aGUgb3RoZXIgaGFuZCwgaWRlbnRpZmllcyBpdHNlbGYgYXMgS1ZNIG9yIFFFTVUsIGFzIGV4cGVjdGVkLiBUaHVzIGBtYWNoaW5lX2lzX3ZtKClgIHdpbGwgYmUgYGZhbHNlYCB1bmRlciBRRU1VLCByaWdodD8KCkFscmlnaHQsIGlmIGBtYWNoaW5lX2lzX3ZtKClgIGlzIGBmYWxzZWAsIHRoZW4gYHByX2l1Y3ZgIGlzIGBOVUxMYC4gQW5kIHdoZW4gYHByX2l1Y3ZgIGlzIGBOVUxMYCwgdGhlIGBpdWN2LSZndDt0cmFuc3BvcnRgIGlzIHNldCB0byBgQUZfSVVDVl9UUkFOU19ISVBFUmAsIGdvdCBpdC4gV2l0aCBgaXVjdi0mZ3Q7dHJhbnNwb3J0YCBhcyBgQUZfSVVDVl9UUkFOU19ISVBFUmAsIHRoZSBjb2RlIGVuc3VyZXMgdGhhdCBgaXVjdi0mZ3Q7cGF0aGAgaXMgbmV2ZXIgYWxsb2NhdGVkLgoKSGVyZSYjMzk7cyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nOiBiZWNhdXNlIGBpdWN2LSZndDtwYXRoYCBpcyBuZXZlciBhbGxvY2F0ZWQsIGBpdWN2X3NldmVyX3BhdGhgIGVmZmVjdGl2ZWx5IGRvZXMgbm90aGluZyBiZWNhdXNlIHRoZSBgeGNoZygmYW1wO2l1Y3YtJmd0O3BhdGgsIE5VTEwpYCBjYWxsIHdpbGwgYWx3YXlzIHJldHVybiBgTlVMTGAuIFRoYXQgbWVhbnMgdGhlIGNvZGUgYmxvY2sgKmluc2lkZSogdGhlIGBpZiAoeGNoZygmYW1wO2l1Y3YtJmd0O3BhdGgsIE5VTEwpKWAgY29uZGl0aW9uIGlzIE5FVkVSIGV4ZWN1dGVkIHdoZW4gcnVubmluZyB1bmRlciBRRU1VLiBUaGF0IGlzLCB1bmxlc3MgbXkgYXNzdW1wdGlvbnMgYXJlIGNvbXBsZXRlbHkgb2ZmLgoKV2FpdC4uLiBhbSBJIG1pc3Npbmcgc29tZXRoaW5nPyBJcyB0aGVyZSAqYW55KiB3YXkgYGl1Y3YtJmd0O3BhdGhgIGNvdWxkIGJlIG5vbi1OVUxMIHdoZW4gYHByX2l1Y3ZgIGlzIGFjdHVhbGx5IGBOVUxMYD8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjay4gSSYjMzk7bSBnb2luZyB0byBsb29rIHRocm91Z2ggdGhlIHN1cnJvdW5kaW5nIGNvZGUgY2FyZWZ1bGx5IGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBwYXRocyB0aGF0IGNvdWxkIHBvc3NpYmx5IHNldCBgaXVjdi0mZ3Q7cGF0aGAuIE5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG92ZXJsb29raW5nIGEgc3VidGxlIGRldGFpbCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpdWN2LVx1MDAzZXBhdGggPSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmM9NDY2PXN0YXRpYyBzdHJ1Y3Qgc29jayAqaXVjdl9zb2NrX2FsbG9jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90bywgZ2ZwX3QgcHJpbywgaW50IGtlcm4pXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ4OS1cdGF0b21pY19zZXQoXHUwMDI2aXVjdi1cdTAwM2Vtc2dfcmVjdiwgMCk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6NDkwOlx0aXVjdi1cdTAwM2VwYXRoID0gTlVMTDtcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OTEtXHRpdWN2LVx1MDAzZXNrX3R4bm90aWZ5ID0gYWZpdWN2X2hzX2NhbGxiYWNrX3R4bm90aWZ5O1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz02ODc9c3RhdGljIGludCBhZml1Y3ZfcGF0aF9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy02OTktXHQvKiBDcmVhdGUgcGF0aC4gKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYzo3MDA6XHRpdWN2LVx1MDAzZXBhdGggPSBpdWN2X3BhdGhfYWxsb2MoaXVjdi1cdTAwM2Vtc2dsaW1pdCxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03MDEtXHRcdFx0XHQgICAgIElVQ1ZfSVBSTURBVEEsIEdGUF9LRVJORUwpO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy03MTAtXHRcdGl1Y3ZfcGF0aF9mcmVlKGl1Y3YtXHUwMDNlcGF0aCk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6NzExOlx0XHRpdWN2LVx1MDAzZXBhdGggPSBOVUxMO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTcxMi1cdFx0c3dpdGNoIChlcnIpIHtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTYwNz1zdGF0aWMgaW50IGl1Y3ZfY2FsbGJhY2tfY29ubnJlcShzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjc1LVx0bWVtY3B5KG5pdWN2LVx1MDAzZXNyY191c2VyX2lkLCBpdWN2LVx1MDAzZXNyY191c2VyX2lkLCA4KTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjc2Olx0bml1Y3YtXHUwMDNlcGF0aCA9IHBhdGg7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY3Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTU6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE2ODgKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIElVQ1YgQ29ubmVjdGlvbiBFc3RhYmxpc2htZW50KioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb2RlIHNuaXBwZXQgaXMgcG9pbnRpbmcgdG8gYSBzcGVjaWZpYyBjb25uZWN0aW9uIHBhdGguIE15IGFuYWx5c2lzIHJldmVhbHMgdGhhdCB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24sIGBhZml1Y3ZfcGF0aF9jb25uZWN0YCwgYW5kIGl0cyBjb3JyZXNwb25kaW5nIGNhbGxiYWNrIGZ1bmN0aW9uLCBgaXVjdl9jYWxsYmFja19jb25ucmVxYCwgYXJlIHRoZSBvbmx5IHBvaW50cyB3aGVyZSBhIHBhcnRpY3VsYXIgY29ubmVjdGlvbiBwYXRod2F5IGlzIGluaXRpYWxpemVkLiBTcGVjaWZpY2FsbHksIGBhZml1Y3ZfcGF0aF9jb25uZWN0YCBpcyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgaXVjdl9zb2NrX2Nvbm5lY3RgLiBUaGlzIHN1Z2dlc3RzIGEgY2xlYXIgY29ubmVjdGlvbiBmbG93OiBhIHNvY2tldCBjb25uZWN0IGV2ZW50IHRyaWdnZXJpbmcgdGhlIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCB2aWEgdGhlIGBhZml1Y3ZfcGF0aF9jb25uZWN0YCBmdW5jdGlvbi4gSSB3aWxsIG5lZWQgdG8gZGVsdmUgZGVlcGVyIGludG8gdGhlc2UgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgdGhlIGludHJpY2FjaWVzIG9mIGhvdyBJVUNWIGNvbm5lY3Rpb25zIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGlzIGNvbnRleHQuIEZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBpbnRvIHRoZXNlIGtleSBmdW5jdGlvbnMgaXMgaW4gb3JkZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE1OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzY2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NjY6XHRcdGlmIChpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSKVxuIDc2NzpcdFx0XHRlcnIgPSBpdWN2X3NlbmRfY3RybChzb2NrLVx1MDAzZXNrLCBBRl9JVUNWX0ZMQUdfU1lOKTtcbiA3Njg6XHRcdGVsc2VcbiA3Njk6XHRcdFx0ZXJyID0gYWZpdWN2X3BhdGhfY29ubmVjdChzb2NrLCBhZGRyKTtcbiA3NzA6XHRcdGlmIChlcnIpXG4gNzcxOlx0XHRcdGdvdG8gZG9uZTtcbiA3NzI6XHRcbiA3NzM6XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSAhPSBJVUNWX0NPTk5FQ1RFRClcbiA3NzQ6XHRcdFx0ZXJyID0gaXVjdl9zb2NrX3dhaXQoc2ssIGl1Y3Zfc29ja19pbl9zdGF0ZShzaywgSVVDVl9DT05ORUNURUQsXG4gNzc1Olx0XHRcdFx0XHRcdFx0XHQgICAgSVVDVl9ESVNDT05OKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTU6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIxNTkKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IGxvZ2ljLCB0YWlsb3JlZCBmb3IgYSBmZWxsb3cgZXhwZXJ0OgoKKipVbmRlcnN0YW5kaW5nIHRoZSBJVUNWIFRyYW5zcG9ydCBGbG93KioKCkFscmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgSVVDViBjb2RlLCBhbmQgaXQmIzM5O3MgY3J5c3RhbCBjbGVhciB0aGF0IHdoZW4gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgYEFGX0lVQ1ZfVFJBTlNfSElQRVJgIHRyYW5zcG9ydCB0eXBlLCB0aGUgY29udHJvbCBmbG93IGRpdmVyZ2VzICpzaWduaWZpY2FudGx5Ki4gVGhlIGtleSBpcyB0aGlzIGNvbmRpdGlvbmFsIGNoZWNrOiBgaWYgKGl1Y3YtJmd0O3RyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSKWAuIElmIHRoYXQgZXZhbHVhdGVzIHRvIHRydWUsIHdlJiMzOTtyZSB0YWtpbmcgdGhlIGBpdWN2X3NlbmRfY3RybGAgcGF0aC4gVGhpcyBpcyBjcnVjaWFsIGJlY2F1c2UgaXQgbWVhbnMgd2UmIzM5O3JlICpieXBhc3NpbmcqIHRoZSB1c3VhbCBgYWZpdWN2X3BhdGhfY29ubmVjdGAgY2FsbCwgd2hpY2ggaXMgd2hhdCBJIHdvdWxkIGhhdmUgZXhwZWN0ZWQuIFRoYXQmIzM5O3MgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gZm9yIHN1cmUsIGJ1dCBpdCBhbHNvIG1lYW5zIHRoZSB3aG9sZSBoYW5kc2hha2UgcHJvY2VzcyBpcyBwcm9iYWJseSBkaWZmZXJlbnQuCgpUaGUgc2Vjb25kIHBhcnQgSSBzZWUgaXMgdGhhdCB0aGUgYGl1Y3YtJmd0O3RyYW5zcG9ydGAgZmllbGQgaXMgKmluaXRpYWxpemVkKiBkdXJpbmcgdGhlIGBpdWN2X3NvY2tfYWxsb2NgIGNhbGwuIFRoaXMgdGVsbHMgbWUgdGhhdCB0aGUgc3BlY2lmaWMgdHJhbnNwb3J0IG1ldGhvZCB3ZSBhcmUgdXNpbmcgZm9yIHRoaXMgc29ja2V0IGlzIGRldGVybWluZWQgKmJlZm9yZSogd2UgZXZlbiBnZXQgdG8gdGhhdCBgaWZgIHN0YXRlbWVudC4gSXQmIzM5O3Mgc2V0IHVwIGluIHRoYXQgaW5pdGlhbCBhbGxvY2F0aW9uIHBoYXNlLCBzbyB0aGF0IGluZm9ybWF0aW9uIGlzIHZpdGFsLCBhcyBpdCYjMzk7cyB0aGUgJiMzNDt0cmlnZ2VyJiMzNDsgZm9yIHRoZSBjb2RlIHRvIHRha2UgdGhlIEhpcGVyIHBhdGguIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBhbGxvY2F0aW9uIGxvZ2ljIHRvIHNlZSBleGFjdGx5IGhvdyBhbmQgd2hlbiBgaXVjdi0mZ3Q7dHJhbnNwb3J0YCBpcyBzZXQgYW5kIHdoYXQgdGhlIHBvc3NpYmxlIHZhbHVlcyBhcmUuIFRoaXMgaXMgYWxsIGFib3V0IGhvdyB3ZSYjMzk7cmUgaGFuZGxpbmcgdGhlIHVuZGVybHlpbmcgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGFuZCBkYXRhIHRyYW5zZmVyIGZvciBIaXBlciwgdmVyc3VzIHRoZSBzdGFuZGFyZCBJVUNWIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE1OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDkyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0OTI6XHRcdG1lbXNldChcdTAwMjZpdWN2LVx1MDAzZWluaXQsIDAsIHNpemVvZihpdWN2LVx1MDAzZWluaXQpKTtcbiA0OTM6XHRcdGlmIChwcl9pdWN2KVxuIDQ5NDpcdFx0XHRpdWN2LVx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcbiA0OTU6XHRcdGVsc2VcbiA0OTY6XHRcdFx0aXVjdi1cdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0hJUEVSO1xuIDQ5NzpcdFxuIDQ5ODpcdFx0c2stXHUwMDNlc2tfZGVzdHJ1Y3QgPSBpdWN2X3NvY2tfZGVzdHJ1Y3Q7XG4gNDk5Olx0XHRzay1cdTAwM2Vza19zbmR0aW1lbyA9IElVQ1ZfQ09OTl9USU1FT1VUO1xuIDUwMDpcdFxuIDUwMTpcdFx0c29ja19yZXNldF9mbGFnKHNrLCBTT0NLX1pBUFBFRCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE1OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNzk2CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCBsb2dpYywgYXMgaWYgaXQgd2VyZSBteSBvd24gdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgYSBzdW1tYXJ5IGZvciBhIGZlbGxvdyBleHBlcnQ6CgoqKlVuZGVyc3RhbmRpbmcgSVVDViBUcmFuc3BvcnQgSW5pdGlhbGl6YXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSWYgSSYjMzk7bSByZWFkaW5nIHRoaXMgY29ycmVjdGx5LCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBpbml0aWFsaXphdGlvbiBvZiBhbiBJVUNWIHRyYW5zcG9ydC4gVGhlIGNvcmUgY29uY2VwdCBoZXJlIGhpbmdlcyBvbiB0aGlzIGBwcl9pdWN2YCB2YXJpYWJsZS4gVGhlIHNuaXBwZXQgaW5kaWNhdGVzIHRoYXQgd2hlbiBgcHJfaXVjdmAgaXMgYE5VTExgLCB3aGljaCBsaWtlbHkgbWVhbnMgaXQgaGFzbiYjMzk7dCBiZWVuIGV4cGxpY2l0bHkgY29uZmlndXJlZCBvciBpcyBpbiBzb21lIGRlZmF1bHQgc3RhdGUsIHRoZW4gYGl1Y3YtJmd0O3RyYW5zcG9ydGAgaXMgYXV0b21hdGljYWxseSBzZXQgdG8gYEFGX0lVQ1ZfVFJBTlNfSElQRVJgLiBTbywgaWYgdGhhdCBwb2ludGVyIGlzIHVuaW5pdGlhbGl6ZWQgb3Igbm90IHBvaW50aW5nIHRvIGFueXRoaW5nIG1lYW5pbmdmdWwsIHRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0IHdlJiMzOTtyZSBmYWxsaW5nIGJhY2sgdG8gdGhlIEhpcGVyU29ja2V0cyBJVUNWIHRyYW5zcG9ydC4KCkNydWNpYWxseSwgaXQgaXMgc2F5aW5nIHRoYXQgYHByX2l1Y3ZgIGlzIGJlaW5nIGFzc2lnbmVkIGEgdmFsdWUgbGF0ZXIgb24gZHVyaW5nIHRoZSBgYWZpdWN2X2luaXRgIHBoYXNlLiBUaGlzIGZ1bmN0aW9uIGlzIG9idmlvdXNseSB3aGVyZSB0aGUgY3JpdGljYWwgY29uZmlndXJhdGlvbiBkZXRhaWxzIGFyZSBsb2FkZWQgb3IgZGV0ZXJtaW5lZC4gSSBjYW4gaW1hZ2luZSB0aGF0IGBhZml1Y3ZfaW5pdGAgbGlrZWx5IGNoZWNrcyBmb3Igc29tZXRoaW5nLCBwZXJoYXBzIGEgY29uZmlndXJhdGlvbiBmaWxlLCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgb3Igc29tZSBvdGhlciBzeXN0ZW0gc2V0dGluZyB0byBkZWNpZGUgd2hpY2ggc3BlY2lmaWMgSVVDViB0cmFuc3BvcnQgbW9kZSB0byB1c2UuIElmIHRoYXQgY29uZmlndXJhdGlvbiBpcyBhYnNlbnQsIG9yIGRvZXNuJiMzOTt0IHNwZWNpZnkgYSBwYXJ0aWN1bGFyIHRyYW5zcG9ydCwgdGhlbiBgcHJfaXVjdmAgd291bGQgbG9naWNhbGx5IHJlbWFpbiBgTlVMTGAsIGNhdXNpbmcgdGhlIGNvZGUgdG8gZGVmYXVsdCB0byBIaXBlclNvY2tldHMuIFRoaXMgbWlnaHQgYmUgYSBsZWdhY3kgc2V0dGluZyBvciBhIGZhaWxzYWZlIG1lY2hhbmlzbS4gSXQgaXMgY3JpdGljYWwgdG8gaW52ZXN0aWdhdGUgaG93IGBwcl9pdWN2YCBpcyBwb3B1bGF0ZWQgZHVyaW5nIGBhZml1Y3ZfaW5pdGAgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGRlY2lzaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyOTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTcKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjI5NDpcdHN0YXRpYyBpbnQgX19pbml0IGFmaXVjdl9pbml0KHZvaWQpXG4yMjk1Olx0e1xuMjI5NjpcdFx0aW50IGVycjtcbjIyOTc6XHRcbjIyOTg6XHRcdGlmIChtYWNoaW5lX2lzX3ZtKCkgXHUwMDI2XHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0lVQ1YpKSB7XG4yMjk5Olx0XHRcdGNwY21kKFwmIzM0O1FVRVJZIFVTRVJJRFwmIzM0OywgaXVjdl91c2VyaWQsIHNpemVvZihpdWN2X3VzZXJpZCksIFx1MDAyNmVycik7XG4yMzAwOlx0XHRcdGlmICh1bmxpa2VseShlcnIpKSB7XG4yMzAxOlx0XHRcdFx0V0FSTl9PTihlcnIpO1xuMjMwMjpcdFx0XHRcdGVyciA9IC1FUFJPVE9OT1NVUFBPUlQ7XG4yMzAzOlx0XHRcdFx0Z290byBvdXQ7XG4yMzA0Olx0XHRcdH1cbjIzMDU6XHRcbjIzMDY6XHRcdFx0cHJfaXVjdiA9IFx1MDAyNml1Y3ZfaWY7XG4yMzA3Olx0XHR9IGVsc2Uge1xuMjMwODpcdFx0XHRtZW1zZXQoXHUwMDI2aXVjdl91c2VyaWQsIDAsIHNpemVvZihpdWN2X3VzZXJpZCkpO1xuMjMwOTpcdFx0XHRwcl9pdWN2ID0gTlVMTDtcbjIzMTA6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTU6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM1MDIKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBpdWN2X3NldmVyX3BhdGggTG9naWMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSWYgYG1hY2hpbmVfaXNfdm0oKWAgcmV0dXJucyBmYWxzZSwgdGhlbiB0aGUgYHByX2l1Y3ZgIHBvaW50ZXIgaXMgbnVsbC4gQW5kIHdlIGtub3cgdGhhdCBgbWFjaGluZV9pc192bSgpYCBpcyBmYWxzZSB3aGVuIHdlJiMzOTtyZSBydW5uaW5nIHVuZGVyIFFFTVUuIFRoYXQgbWVhbnMgdGhlIHNwZWNpZmljIGNvZGUgbW9kaWZpY2F0aW9ucyBtYWRlIHdpdGhpbiBgaXVjdl9zZXZlcl9wYXRoYCBhcmUgKm5ldmVyKiByZWFjaGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiAKCkJ1dCBob2xkIG9uLi4uIGlzIHRoZXJlIGFueSBvdGhlciBwb3NzaWJsZSBwYXRoIHRvIGBpdWN2X3NldmVyX3BhdGhgIHRoYXQgY291bGQgc29tZWhvdyBzZXQgYGl1Y3YtJmd0O3BhdGhgPyBJIGRvbiYjMzk7dCB0aGluayBzbywgYmVjYXVzZSBhcyBmYXIgYXMgSSBjYW4gc2VlLCBgaXVjdi0mZ3Q7cGF0aGAgaXMgKm5ldmVyKiBpbml0aWFsaXplZCBhbnl3aGVyZSBpbiB0aGUgY29kZS4KCldhaXQsIGxldCYjMzk7cyBjb25zaWRlciBhIHNjZW5hcmlvOiB3aGF0IGlmIGB4Y2hnKCZhbXA7aXVjdi0mZ3Q7cGF0aCwgTlVMTClgIGlzIGNhbGxlZCB3aGVuIGBpdWN2LSZndDtwYXRoYCAqaXMqIGFscmVhZHkgTlVMTD8gVGhhdCB3b3VsZCBiZSBpbnRlcmVzdGluZy4gU2luY2UgaXQgcmV0dXJucyBOVUxMLCB0aGUgY29uZGl0aW9uYWwgYGlmICh4Y2hnKCZhbXA7aXVjdi0mZ3Q7cGF0aCwgTlVMTCkpYCBpcyBza2lwcGVkLCByaWdodD8gQW5kIHRoZSBwYXRjaCAqb25seSogbW9kaWZpZXMgY29kZSBpbnNpZGUgdGhhdCBgaWZgIGJsb2NrLCBtYWtpbmcgaXQgaW5hY2Nlc3NpYmxlLiBTbywgcmVnYXJkbGVzcyBvZiB0aGUgVk0gc3RhdGUsIHRoaXMgbW9kaWZpY2F0aW9uIGlzIG5ldmVyIHJlYWNoYWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTU6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMzNzpcdFx0dW5zaWduZWQgY2hhciB1c2VyX2RhdGFbMTZdO1xuIDMzODpcdFx0c3RydWN0IGl1Y3Zfc29jayAqaXVjdiA9IGl1Y3Zfc2soc2spO1xuIDMzOTpcdFx0c3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCA9IGl1Y3YtXHUwMDNlcGF0aDtcbiAzNDA6XHRcdHN0cnVjdCBzb2NrX21zZ19xICpwLCAqbjtcbiAzNDE6XHRcbiAzNDI6XHRcdC8qIFdob2V2ZXIgcmVzZXRzIHRoZSBwYXRoIHBvaW50ZXIsIG11c3Qgc2V2ZXIgYW5kIGZyZWUgaXQuICovXG4gMzQzOlx0XHRpZiAoeGNoZyhcdTAwMjZpdWN2LVx1MDAzZXBhdGgsIE5VTEwpKSB7XG4gMzQ0Olx0XHRcdGlmICh3aXRoX3VzZXJfZGF0YSkge1xuIDM0NTpcdFx0XHRcdGxvd19ubWNweSh1c2VyX2RhdGEsIGl1Y3YtXHUwMDNlc3JjX25hbWUpO1xuIDM0NjpcdFx0XHRcdGhpZ2hfbm1jcHkodXNlcl9kYXRhLCBpdWN2LVx1MDAzZWRzdF9uYW1lKTtcbiAzNDc6XHRcdFx0XHRBU0NFQkModXNlcl9kYXRhLCBzaXplb2YodXNlcl9kYXRhKSk7XG4gMzQ4Olx0XHRcdFx0cHJfaXVjdi1cdTAwM2VwYXRoX3NldmVyKHBhdGgsIHVzZXJfZGF0YSk7XG4gMzQ5Olx0XHRcdH0gZWxzZVxuIDM1MDpcdFx0XHRcdHByX2l1Y3YtXHUwMDNlcGF0aF9zZXZlcihwYXRoLCBOVUxMKTtcbiAzNTE6XHRcdFx0aXVjdl9wYXRoX2ZyZWUocGF0aCk7XG4gMzUyOlx0XG4gMzUzOlx0XHRcdC8qXG4gMzU0Olx0XHRcdCAqIE1lc3NhZ2Ugbm90aWZpY2F0aW9ucyBxdWV1ZWQgb24gbWVzc2FnZV9xIHN0aWxsIHJlZmVyZW5jZVxuIDM1NTpcdFx0XHQgKiB0aGUgbm93IGZyZWVkIHBhdGg7IGRyb3AgdGhlbSwgb3RoZXJ3aXNlIGEgbGF0ZXIgcmVjdm1zZygpXG4gMzU2Olx0XHRcdCAqIHdvdWxkIHBhc3MgdGhlIGZyZWVkIGl1Y3ZfcGF0aCB0byBtZXNzYWdlX3JlY2VpdmUoKSB2aWFcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTU6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQzOTcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1NjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBsaWNhdGlvbiBvZiB0aGlzIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYWRkcmVzcyBhIHBvdGVudGlhbCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZSB3aXRoaW4gdGhlIGBpdWN2YCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSB3aGVuIGEgcGF0aCBpcyBmcmVlZC4gVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGludm9sdmVzIGNsZWFyaW5nIGEgbWVzc2FnZSBxdWV1ZSAoYGl1Y3YtJmd0O21lc3NhZ2VfcWApIGFmdGVyIHRoZSBgaXVjdi0mZ3Q7cGF0aGAgaXMgc2V0IHRvIGBOVUxMYC4gVGhlIGNvZGUgc25pcHBldCBjbGVhcmx5IHNob3dzIHRoaXMgb3BlcmF0aW9uIHdpdGhpbiBhbiBgaWYgKHhjaGcoJmFtcDtpdWN2LSZndDtwYXRoLCBOVUxMKSlgIGJsb2NrLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIG5ldmVyIGV4ZWN1dGVkIGluIHRoZSBlbnZpcm9ubWVudHMgSSB0eXBpY2FsbHkgZGVhbCB3aXRoLCBsaWtlIFFFTVUgb3IgR0NFLCBiZWNhdXNlIHRoZSBgaXVjdi0mZ3Q7cGF0aGAgaXMgYWx3YXlzIE5VTEwgaW4gdGhvc2Ugc2NlbmFyaW9zLiBUaGlzIHN1Z2dlc3RzIHRoZSBwYXRjaCB0YXJnZXRzIGFuIHVucmVhY2hhYmxlIGNvZGUgcGF0aCBpbiB0aGVzZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuCgpOb3csIHdhaXQgYSBzZWNvbmQuIElzIHRoZXJlIGV2ZW4gYSB3YXkgdG8gcnVuIHovVk0gKmluc2lkZSogUUVNVT8gTm8sIHRoYXQmIzM5O3MgYSBwcm9wcmlldGFyeSBJQk0gaHlwZXJ2aXNvciwgYW5kIFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZSBpdC4gT2theSwgc28gd2Uga25vdyB0aGF0IHBhcnQuIENvdWxkIHdlIHNvbWVob3cgKmZha2UqIGBtYWNoaW5lX2lzX3ZtKClgIHRvIHRyaWdnZXIgdGhpcyBjb2RlPyBObywgdGhlIGNvZGUgY2hlY2tzIHRoZSBDUFUgSUQgaW5zdHJ1Y3Rpb24gKFNUU0kgb3Igc2ltaWxhcikgdG8gZGV0ZWN0IEtWTSBvciBRRU1VLCBzbyB0aGF0JiMzOTtzIGEgZGVhZCBlbmQuIEFoLCBidXQgd2FpdCwgYGRldGVjdF9tYWNoaW5lX3R5cGVgIHVzZXMgYHN0c2lgIHRvIGdldCB0aGUgVk0gaW5mb3JtYXRpb27igKYgU28sIGNvdWxkIHdlIHBvdGVudGlhbGx5IHBhc3MgYSBmbGFnIHRvIFFFTVUgdG8gKnNwb29mKiB0aGUgQ1BJIChDb250cm9sIFByb2dyYW0gSWRlbnRpZmljYXRpb24pIGFuZCBwcmV0ZW5kIHdlJiMzOTtyZSB6L1ZNPyBUaGF0ICptaWdodCogYmUgcG9zc2libGUsIGJ1dCBteSBzdGFuZGFyZCBzeXprYWxsZXIgZW52aXJvbm1lbnRzIGRvbiYjMzk7dCBkbyBhbnl0aGluZyBsaWtlIHRoYXQuCgpUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBtZW50aW9ucyAmIzM0O2ltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUmIzM0Oy4gU2luY2UgdGhpcyByZXF1aXJlcyB6L1ZNIGFuZCBjYW4mIzM5O3QgYmUgcmVhY2hlZCBpbiBzdGFuZGFyZCBRRU1VL0tWTSBlbnZpcm9ubWVudHMsIGl0ICpkb2VzKiBmYWxsIHVuZGVyIHRoZSAmIzM0O2ltcG9zc2libGUgdG8gcmVhY2gmIzM0OyBjYXRlZ29yeSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgY29udGV4dC4KCkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBvbmUgdGhpbmcuIENhbiBgQUZfSVVDVmAgZXZlbiBiZSB1c2VkIG92ZXIgSGlwZXJTb2NrZXRzLCBhbmQgaWYgc28sIGRvZXMgaXQgdXNlIHRoZSBgbWVzc2FnZV9xYD8gSWYgYEFGX0lVQ1ZgIHVzZXMgSGlwZXJTb2NrZXRzLCBgaXVjdi0mZ3Q7dHJhbnNwb3J0YCBzaG91bGQgYmUgYEFGX0lVQ1ZfVFJBTlNfSElQRVJgLCBidXQgSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIGlmIHRoYXQgY29kZSBwYXRoIGV2ZW4gdG91Y2hlcyB0aGUgYG1lc3NhZ2VfcWAuIFRpbWUgdG8gZG91YmxlIGNoZWNrIHRoZSBjb2RlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE1OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lc3NhZ2VfcSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmM9MzM1PXN0YXRpYyB2b2lkIGl1Y3Zfc2V2ZXJfcGF0aChzdHJ1Y3Qgc29jayAqc2ssIGludCB3aXRoX3VzZXJfZGF0YSlcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzUzLVx0XHQvKlxubmV0L2l1Y3YvYWZfaXVjdi5jOjM1NDpcdFx0ICogTWVzc2FnZSBub3RpZmljYXRpb25zIHF1ZXVlZCBvbiBtZXNzYWdlX3Egc3RpbGwgcmVmZXJlbmNlXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzU1LVx0XHQgKiB0aGUgbm93IGZyZWVkIHBhdGg7IGRyb3AgdGhlbSwgb3RoZXJ3aXNlIGEgbGF0ZXIgcmVjdm1zZygpXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzU2LVx0XHQgKiB3b3VsZCBwYXNzIHRoZSBmcmVlZCBpdWN2X3BhdGggdG8gbWVzc2FnZV9yZWNlaXZlKCkgdmlhXG5uZXQvaXVjdi9hZl9pdWN2LmM6MzU3Olx0XHQgKiBpdWN2X3Byb2Nlc3NfbWVzc2FnZV9xKCkuXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzU4LVx0XHQgKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYzozNTk6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZpdWN2LVx1MDAzZW1lc3NhZ2VfcS5sb2NrKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzozNjA6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuLCBcdTAwMjZpdWN2LVx1MDAzZW1lc3NhZ2VfcS5saXN0LCBsaXN0KSB7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMzYxLVx0XHRcdGxpc3RfZGVsKFx1MDAyNnAtXHUwMDNlbGlzdCk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTM2My1cdFx0fVxubmV0L2l1Y3YvYWZfaXVjdi5jOjM2NDpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aXVjdi1cdTAwM2VtZXNzYWdlX3EubG9jayk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMzY1LVx0fVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz00NjY9c3RhdGljIHN0cnVjdCBzb2NrICppdWN2X3NvY2tfYWxsb2Moc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvLCBnZnBfdCBwcmlvLCBpbnQga2Vybilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDc5LVx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZpdWN2LVx1MDAzZXNlbmRfc2tiX3EpO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjQ4MDpcdElOSVRfTElTVF9IRUFEKFx1MDAyNml1Y3YtXHUwMDNlbWVzc2FnZV9xLmxpc3QpO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjQ4MTpcdHNwaW5fbG9ja19pbml0KFx1MDAyNml1Y3YtXHUwMDNlbWVzc2FnZV9xLmxvY2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTQ4Mi1cdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2aXVjdi1cdTAwM2ViYWNrbG9nX3NrYl9xKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTEyNj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmFsbG9jX2l1Y3ZfcmVjdl9za2IodW5zaWduZWQgbG9uZyBsZW4pXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTExNTUtICpcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMTU2OiAqIExvY2tpbmc6IG11c3QgYmUgY2FsbGVkIHdpdGggbWVzc2FnZV9xLmxvY2sgaGVsZFxubmV0L2l1Y3YvYWZfaXVjdi5jLTExNTctICovXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTE1OD1zdGF0aWMgdm9pZCBpdWN2X3Byb2Nlc3NfbWVzc2FnZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTEyMTQtXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTIxNTovKiBpdWN2X3Byb2Nlc3NfbWVzc2FnZV9xKCkgLSBQcm9jZXNzIG91dHN0YW5kaW5nIElVQ1YgbWVzc2FnZXNcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMjE2LSAqXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTIxNzogKiBMb2NraW5nOiBtdXN0IGJlIGNhbGxlZCB3aXRoIG1lc3NhZ2VfcS5sb2NrIGhlbGRcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMjE4LSAqL1xubmV0L2l1Y3YvYWZfaXVjdi5jOjEyMTk6c3RhdGljIHZvaWQgaXVjdl9wcm9jZXNzX21lc3NhZ2VfcShzdHJ1Y3Qgc29jayAqc2spXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTIyMC17XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTEyMjQtXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTIyNTpcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuLCBcdTAwMjZpdWN2LVx1MDAzZW1lc3NhZ2VfcS5saXN0LCBsaXN0KSB7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTIyNi1cdFx0c2tiID0gYWxsb2NfaXVjdl9yZWN2X3NrYihpdWN2X21zZ19sZW5ndGgoXHUwMDI2cC1cdTAwM2Vtc2cpKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTIzNz1zdGF0aWMgaW50IGl1Y3Zfc29ja19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTI0OS1cdCAgICBza2JfcXVldWVfZW1wdHkoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSkgXHUwMDI2XHUwMDI2XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTI1MDpcdCAgICBsaXN0X2VtcHR5KFx1MDAyNml1Y3YtXHUwMDNlbWVzc2FnZV9xLmxpc3QpKVxubmV0L2l1Y3YvYWZfaXVjdi5jLTEyNTEtXHRcdHJldHVybiAwO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMzE4LVx0XHQvKiBRdWV1ZSBiYWNrbG9nIHNrYnMgKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMzE5Olx0XHRzcGluX2xvY2tfYmgoXHUwMDI2aXVjdi1cdTAwM2VtZXNzYWdlX3EubG9jayk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTMyMC1cdFx0cnNrYiA9IHNrYl9kZXF1ZXVlKFx1MDAyNml1Y3YtXHUwMDNlYmFja2xvZ19za2JfcSk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTEzMzEtXHRcdGlmIChza2JfcXVldWVfZW1wdHkoXHUwMDI2aXVjdi1cdTAwM2ViYWNrbG9nX3NrYl9xKSkge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjEzMzI6XHRcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNml1Y3YtXHUwMDNlbWVzc2FnZV9xLmxpc3QpKVxubmV0L2l1Y3YvYWZfaXVjdi5jOjEzMzM6XHRcdFx0XHRpdWN2X3Byb2Nlc3NfbWVzc2FnZV9xKHNrKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMzM0LVx0XHRcdGlmIChhdG9taWNfcmVhZChcdTAwMjZpdWN2LVx1MDAzZW1zZ19yZWN2KSBcdTAwM2U9XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTEzNDItXHRcdH1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMzQzOlx0XHRzcGluX3VubG9ja19iaChcdTAwMjZpdWN2LVx1MDAzZW1lc3NhZ2VfcS5sb2NrKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMzQ0LVx0fVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNzEyPXN0YXRpYyB2b2lkIGl1Y3ZfY2FsbGJhY2tfcngoc3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCwgc3RydWN0IGl1Y3ZfbWVzc2FnZSAqbXNnKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNzI0LVxubmV0L2l1Y3YvYWZfaXVjdi5jOjE3MjU6XHRzcGluX2xvY2soXHUwMDI2aXVjdi1cdTAwM2VtZXNzYWdlX3EubG9jayk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTcyNi1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNzI3Olx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNml1Y3YtXHUwMDNlbWVzc2FnZV9xLmxpc3QpIHx8XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTcyOC1cdCAgICAhc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNml1Y3YtXHUwMDNlYmFja2xvZ19za2JfcSkpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE3NDktXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTc1MDpcdGxpc3RfYWRkX3RhaWwoXHUwMDI2c2F2ZV9tc2ctXHUwMDNlbGlzdCwgXHUwMDI2aXVjdi1cdTAwM2VtZXNzYWdlX3EubGlzdCk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTc1MS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNzUyLW91dF91bmxvY2s6XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTc1MzpcdHNwaW5fdW5sb2NrKFx1MDAyNml1Y3YtXHUwMDNlbWVzc2FnZV9xLmxvY2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE3NTQtfVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMDExPXN0YXRpYyBpbnQgYWZpdWN2X2hzX2NhbGxiYWNrX3J4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA0MC1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMDQxOlx0c3Bpbl9sb2NrKFx1MDAyNml1Y3YtXHUwMDNlbWVzc2FnZV9xLmxvY2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIwNDItXHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNml1Y3YtXHUwMDNlYmFja2xvZ19za2JfcSkpIHtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA0Ny1cdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2aXVjdl9zayhzayktXHUwMDNlYmFja2xvZ19za2JfcSwgc2tiKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMDQ4Olx0c3Bpbl91bmxvY2soXHUwMDI2aXVjdi1cdTAwM2VtZXNzYWdlX3EubG9jayk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA0OS1cdHJldHVybiBORVRfUlhfU1VDQ0VTUztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTU6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc3MjEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJVUNWIE1lc3NhZ2luZyBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGF0IGBtZXNzYWdlX3FgIGlzIHRoZSBjcml0aWNhbCBkYXRhIHN0cnVjdHVyZSwgYW5kIGl0JiMzOTtzIGJlaW5nIHVzZWQgZm9yIGJvdGggYEFGX0lVQ1ZfVFJBTlNfSVVDVmAgYW5kIGBBRl9JVUNWX1RSQU5TX0hJUEVSYCwgd2hpY2ggaXMgdGhlIGZpcnN0IHBvaW50IG9mIGludGVyZXN0LiBBIHF1aWNrIGdsYW5jZSBhdCBgYWZpdWN2X2hzX2NhbGxiYWNrX3J4YCByZXZlYWxzIGl0IHVzZXMgdGhlIGxvY2sgb24gYG1lc3NhZ2VfcWAgYW5kIGBiYWNrbG9nX3NrYl9xYCwgYnV0IG5vdCB0aGUgbGlzdCBpdHNlbGYuIEludGVyZXN0aW5nLiBUaGUgYG1lc3NhZ2VfcS5saXN0YCwgb24gdGhlIG90aGVyIGhhbmQsIHNlZW1zIHRvIGJlIGV4Y2x1c2l2ZWx5IHVzZWQgaW4gYGl1Y3ZfY2FsbGJhY2tfcnhgLCB3aGljaCBpcyB0aWVkIGRpcmVjdGx5IHRvIGBBRl9JVUNWX1RSQU5TX0lVQ1ZgLgoKVGhlbiBJIHNlZSB0aGlzIHBhdGNoLCBhbmQgaXQgZXhwbGljaXRseSBjbGVhcnMgYG1lc3NhZ2VfcS5saXN0YCwgdXNpbmcgYSBzcGlubG9jayB0byBwcm90ZWN0IGl0OgoKYGBgYwomIzQzOwkJc3Bpbl9sb2NrX2JoKCZhbXA7aXVjdi0mZ3Q7bWVzc2FnZV9xLmxvY2spOwomIzQzOwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG4sICZhbXA7aXVjdi0mZ3Q7bWVzc2FnZV9xLmxpc3QsIGxpc3QpIHsKJiM0MzsJCQlsaXN0X2RlbCgmYW1wO3AtJmd0O2xpc3QpOwomIzQzOwkJCWtmcmVlKHApOwomIzQzOwkJfQomIzQzOwkJc3Bpbl91bmxvY2tfYmgoJmFtcDtpdWN2LSZndDttZXNzYWdlX3EubG9jayk7CmBgYAoKT2theSwgc28gdGhlIHBhdGNoIGlzIGZvY3VzaW5nIG9uIGNsZWFyaW5nIHRoZSBsaXN0LCB3aGljaCBzdWdnZXN0cyBpdCYjMzk7cyBwcmltYXJpbHkgY29uY2VybmVkIHdpdGggdGhlIGBBRl9JVUNWX1RSQU5TX0lVQ1ZgIHBhdGguIEFuZCBub3cgSSBuZWVkIHRvIGFuYWx5emUgYGl1Y3Zfc2V2ZXJfcGF0aGAuIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgd2hlbiBgeGNoZygmYW1wO2l1Y3YtJmd0O3BhdGgsIE5VTEwpYCByZXR1cm5zIG5vbi1OVUxMLiBDcml0aWNhbGx5LCBgaXVjdi0mZ3Q7cGF0aGAgaXMgKm9ubHkqIHNldCBmb3IgYEFGX0lVQ1ZfVFJBTlNfSVVDVmAuIFNvLCBldmVuIGlmIGBtZXNzYWdlX3FgIHdlcmUgc29tZWhvdyB1c2VkIGZvciBISVBFUiwgd2hpY2ggaXQgaXNuJiMzOTt0IGNvbXBsZXRlbHksIGBpdWN2X3NldmVyX3BhdGhgIHdvdWxkIGRvIG5vdGhpbmcgaW4gdGhhdCBjYXNlIGJlY2F1c2UgYGl1Y3YtJmd0O3BhdGhgIGlzIE5VTEwuCgpUaGVyZWZvcmUsIHRoaXMgZW50aXJlIGNvZGUgbW9kaWZpY2F0aW9uIGlzICpzdHJpY3RseSogdGFyZ2V0ZWQgYXQgYEFGX0lVQ1ZfVFJBTlNfSVVDVmAsIGFuZCBieSBleHRlbnNpb24sIHRoYXQmIzM5O3Mgei9WTSBzcGVjaWZpYy4gTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgb25lIHRoaW5nLiBJcyB0aGVyZSBhbnkgc2NlbmFyaW8gd2hlcmUgYGl1Y3YtJmd0O3BhdGhgIGNvdWxkIGJlIHNldCB3aXRob3V0IGBwcl9pdWN2YCBiZWluZyBub24tTlVMTD8gSSBuZWVkIHRvIGxvb2sgYXQgYGl1Y3ZfcGF0aF9hbGxvY2AgdG8gYmUgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTU6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXVjdl9wYXRoX2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYz02ODc9c3RhdGljIGludCBhZml1Y3ZfcGF0aF9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy02OTktXHQvKiBDcmVhdGUgcGF0aC4gKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYzo3MDA6XHRpdWN2LVx1MDAzZXBhdGggPSBpdWN2X3BhdGhfYWxsb2MoaXVjdi1cdTAwM2Vtc2dsaW1pdCxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03MDEtXHRcdFx0XHQgICAgIElVQ1ZfSVBSTURBVEEsIEdGUF9LRVJORUwpO1xuLS1cbm5ldC9pdWN2L2l1Y3YuYz0xNDY4PXN0YXRpYyB2b2lkIGl1Y3ZfcGF0aF9wZW5kaW5nKHN0cnVjdCBpdWN2X2lycV9kYXRhICpkYXRhKVxuLS1cbm5ldC9pdWN2L2l1Y3YuYy0xNDc3LVx0ZXJyb3IgPSBpdWN2X2Vycm9yX25vX21lbW9yeTtcbm5ldC9pdWN2L2l1Y3YuYzoxNDc4Olx0cGF0aCA9IGl1Y3ZfcGF0aF9hbGxvYyhpcHAtXHUwMDNlaXBtc2dsaW0sIGlwcC1cdTAwM2VpcGZsYWdzMSwgR0ZQX0FUT01JQyk7XG5uZXQvaXVjdi9pdWN2LmMtMTQ3OS1cdGlmICghcGF0aClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTU6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg5OTgKCQkJCQkJCW91dHB1dDogMjA3CgkJCQkJCQl0aG91Z2h0czogMzYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVucmVhY2hhYmxlIENvZGUgQW5hbHlzaXMqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gYGl1Y3ZfcGF0aF9hbGxvY2AgaXMgZGVmaW5lZCBpbiBgbmV0L2l1Y3YvaXVjdi5jYC4gSG93ZXZlciwgdGhlIG9ubHkgY2FsbCBzaXRlIHdpdGhpbiBgYWZfaXVjdi5jYCBpcyBgYWZpdWN2X3BhdGhfY29ubmVjdGAuIE5vdywgYGFmaXVjdl9wYXRoX2Nvbm5lY3RgIGlzIG9ubHkgZW50ZXJlZCBpZiBgaXVjdi0mZ3Q7dHJhbnNwb3J0YCBpc24mIzM5O3QgYEFGX0lVQ1ZfVFJBTlNfSElQRVJgLiBBbmQgdGhhdCBzcGVjaWZpYyBjb25kaXRpb24gKGAhPSBBRl9JVUNWX1RSQU5TX0hJUEVSYCkgaXMgb25seSBtZXQgaWYgYHByX2l1Y3ZgIGhhcyBhIHZhbHVlLiBUaGVuLCBgcHJfaXVjdmAgZ2V0cyBhc3NpZ25lZCBhIHZhbHVlIG9ubHkgaWYgYG1hY2hpbmVfaXNfdm0oKWAgcmV0dXJucyB0cnVlLiBGaW5hbGx5LCBhbmQgdGhpcyBpcyBrZXksIGBtYWNoaW5lX2lzX3ZtKClgIGlzIG9ubHkgdHJ1ZSBpZiB3ZSYjMzk7cmUgcnVubmluZyB1bmRlciB6L1ZNLgoKTm93LCBob2xkIG9uLi4uIGNhbiBRRU1VIGVtdWxhdGUgei9WTT8gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4gV2hpbGUgUUVNVSYjMzk7cyBzMzkweCB0YXJnZXQgY2VydGFpbmx5IGVtdWxhdGVzIHovQXJjaGl0ZWN0dXJlLCBpdCB1dGlsaXplcyBlaXRoZXIgS1ZNIG9yIGl0cyBvd24gVENHIGZvciB0aGUgaHlwZXJ2aXNvci4gVGhlIGNydWNpYWwgcGllY2UgaXMgdGhhdCB0aGUgYG1hY2hpbmVfaXNfdm0oKWAgZnVuY3Rpb24gcmVsaWVzIG9uIHRoZSAmIzM0O3ovVk0mIzM0OyBzdHJpbmcgd2l0aGluIHRoZSBDb250cm9sIFByb2dyYW0gSWRlbnRpZmljYXRpb24gKENQSSkgb2J0YWluZWQgdmlhIHRoZSBTVFNJIGluc3RydWN0aW9uLiBCdXQgUUVNVSBhbmQgS1ZNIHJldHVybiAmIzM0O0tWTS8mIzM0OyBvciAmIzM0O1FFTVUmIzM0OyBpbiB0aGVpciBDUEkgcmVzcG9uc2VzLiBUaGVyZWZvcmUsIGBtYWNoaW5lX2lzX3ZtKClgIHdpbGwgcmV0dXJuIGZhbHNlLgoKVGhlcmVmb3JlLCB0aGlzIGNvZGUgcGF0aCB0aGF0IHdhcyBtb2RpZmllZCBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIGFueSBvZiBvdXIgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMsIG5hbWVseSBRRU1VL0tWTS4gTm8gcG9pbnQgaW4gdHJ5aW5nIHRvIGZ1enogY29kZSB0aGF0IHdvbiYjMzk7dCBydW4sIGFzIHRoZSBwYXRjaCBpcyBvbmx5IHRhcmdldGVkIGF0IHRoZSB6L1ZNIGh5cGVydmlzb3IuCkkgYW0gcmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGJhc2VkIG9uIHRoZSBhYm92ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTU6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaXVjdl9zZXZlcl9wYXRoYCBpbiBgYWZfaXVjdi5jYCB0byBjbGVhciB0aGUgYG1lc3NhZ2VfcWAgbGlzdC4gSG93ZXZlciwgdGhpcyBmdW5jdGlvbiBvbmx5IGV4ZWN1dGVzIGl0cyBsb2dpYyBpZiBgaXVjdi1cdTAwM2VwYXRoYCBpcyBub24tTlVMTC4gYGl1Y3YtXHUwMDNlcGF0aGAgaXMgb25seSBhbGxvY2F0ZWQgd2hlbiB0aGUgdHJhbnNwb3J0IGlzIGBBRl9JVUNWX1RSQU5TX0lVQ1ZgLCB3aGljaCBpbiB0dXJuIGlzIG9ubHkgc2VsZWN0ZWQgaWYgYHByX2l1Y3ZgIGlzIG5vbi1OVUxMLiBgcHJfaXVjdmAgaXMgaW5pdGlhbGl6ZWQgb25seSB3aGVuIGBtYWNoaW5lX2lzX3ZtKClgIGlzIHRydWUsIG1lYW5pbmcgdGhlIGtlcm5lbCBtdXN0IGJlIHJ1bm5pbmcgdW5kZXIgdGhlIHByb3ByaWV0YXJ5IElCTSB6L1ZNIGh5cGVydmlzb3IuIFNpbmNlIFFFTVUvS1ZNIGVudmlyb25tZW50cyBkbyBub3QgZW11bGF0ZSB6L1ZNICh0aGV5IGlkZW50aWZ5IGFzIEtWTSBvciBRRU1VKSwgdGhpcyBjb2RlIHBhdGggaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBpdWN2X3NldmVyX3BhdGhgIGluIGBhZl9pdWN2LmNgIHRvIGNsZWFyIHRoZSBgbWVzc2FnZV9xYCBsaXN0LiBIb3dldmVyLCB0aGlzIGZ1bmN0aW9uIG9ubHkgZXhlY3V0ZXMgaXRzIGxvZ2ljIGlmIGBpdWN2LVx1MDAzZXBhdGhgIGlzIG5vbi1OVUxMLiBgaXVjdi1cdTAwM2VwYXRoYCBpcyBvbmx5IGFsbG9jYXRlZCB3aGVuIHRoZSB0cmFuc3BvcnQgaXMgYEFGX0lVQ1ZfVFJBTlNfSVVDVmAsIHdoaWNoIGluIHR1cm4gaXMgb25seSBzZWxlY3RlZCBpZiBgcHJfaXVjdmAgaXMgbm9uLU5VTEwuIGBwcl9pdWN2YCBpcyBpbml0aWFsaXplZCBvbmx5IHdoZW4gYG1hY2hpbmVfaXNfdm0oKWAgaXMgdHJ1ZSwgbWVhbmluZyB0aGUga2VybmVsIG11c3QgYmUgcnVubmluZyB1bmRlciB0aGUgcHJvcHJpZXRhcnkgSUJNIHovVk0gaHlwZXJ2aXNvci4gU2luY2UgUUVNVS9LVk0gZW52aXJvbm1lbnRzIGRvIG5vdCBlbXVsYXRlIHovVk0gKHRoZXkgaWRlbnRpZnkgYXMgS1ZNIG9yIFFFTVUpLCB0aGlzIGNvZGUgcGF0aCBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE1OjA4OjMxLjU5OTE1MTM4NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzI4Njc1ODYxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGl1Y3Zfc2V2ZXJfcGF0aGAgaW4gYGFmX2l1Y3YuY2AgdG8gY2xlYXIgdGhlIGBtZXNzYWdlX3FgIGxpc3QuIEhvd2V2ZXIsIHRoaXMgZnVuY3Rpb24gb25seSBleGVjdXRlcyBpdHMgbG9naWMgaWYgYGl1Y3YtXFx1MDAzZXBhdGhgIGlzIG5vbi1OVUxMLiBgaXVjdi1cXHUwMDNlcGF0aGAgaXMgb25seSBhbGxvY2F0ZWQgd2hlbiB0aGUgdHJhbnNwb3J0IGlzIGBBRl9JVUNWX1RSQU5TX0lVQ1ZgLCB3aGljaCBpbiB0dXJuIGlzIG9ubHkgc2VsZWN0ZWQgaWYgYHByX2l1Y3ZgIGlzIG5vbi1OVUxMLiBgcHJfaXVjdmAgaXMgaW5pdGlhbGl6ZWQgb25seSB3aGVuIGBtYWNoaW5lX2lzX3ZtKClgIGlzIHRydWUsIG1lYW5pbmcgdGhlIGtlcm5lbCBtdXN0IGJlIHJ1bm5pbmcgdW5kZXIgdGhlIHByb3ByaWV0YXJ5IElCTSB6L1ZNIGh5cGVydmlzb3IuIFNpbmNlIFFFTVUvS1ZNIGVudmlyb25tZW50cyBkbyBub3QgZW11bGF0ZSB6L1ZNICh0aGV5IGlkZW50aWZ5IGFzIEtWTSBvciBRRU1VKSwgdGhpcyBjb2RlIHBhdGggaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE1OjA4OjMxLjU5OTE1NjkwNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI5MDYzMDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgN2ViMTI5MzRjNTJhMjkxNGUxNzUwYjFmMmVjODFkMzg4NjJkNDk2NlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1bCA3IDE1OjA4OjI5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pdWN2L2FmX2l1Y3YuYyBiL25ldC9pdWN2L2FmX2l1Y3YuY1xcbmluZGV4IGZlZDI0MGI0NTNiZDliLi4yODY5YTEwM2Y3ZmEyYSAxMDA2NDRcXG4tLS0gYS9uZXQvaXVjdi9hZl9pdWN2LmNcXG4rKysgYi9uZXQvaXVjdi9hZl9pdWN2LmNcXG5AQCAtMzM3LDYgKzMzNyw3IEBAIHN0YXRpYyB2b2lkIGl1Y3Zfc2V2ZXJfcGF0aChzdHJ1Y3Qgc29jayAqc2ssIGludCB3aXRoX3VzZXJfZGF0YSlcXG4gXFx0dW5zaWduZWQgY2hhciB1c2VyX2RhdGFbMTZdO1xcbiBcXHRzdHJ1Y3QgaXVjdl9zb2NrICppdWN2ID0gaXVjdl9zayhzayk7XFxuIFxcdHN0cnVjdCBpdWN2X3BhdGggKnBhdGggPSBpdWN2LVxcdTAwM2VwYXRoO1xcbitcXHRzdHJ1Y3Qgc29ja19tc2dfcSAqcCwgKm47XFxuIFxcbiBcXHQvKiBXaG9ldmVyIHJlc2V0cyB0aGUgcGF0aCBwb2ludGVyLCBtdXN0IHNldmVyIGFuZCBmcmVlIGl0LiAqL1xcbiBcXHRpZiAoeGNoZyhcXHUwMDI2aXVjdi1cXHUwMDNlcGF0aCwgTlVMTCkpIHtcXG5AQCAtMzQ4LDYgKzM0OSwxOSBAQCBzdGF0aWMgdm9pZCBpdWN2X3NldmVyX3BhdGgoc3RydWN0IHNvY2sgKnNrLCBpbnQgd2l0aF91c2VyX2RhdGEpXFxuIFxcdFxcdH0gZWxzZVxcbiBcXHRcXHRcXHRwcl9pdWN2LVxcdTAwM2VwYXRoX3NldmVyKHBhdGgsIE5VTEwpO1xcbiBcXHRcXHRpdWN2X3BhdGhfZnJlZShwYXRoKTtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIE1lc3NhZ2Ugbm90aWZpY2F0aW9ucyBxdWV1ZWQgb24gbWVzc2FnZV9xIHN0aWxsIHJlZmVyZW5jZVxcbitcXHRcXHQgKiB0aGUgbm93IGZyZWVkIHBhdGg7IGRyb3AgdGhlbSwgb3RoZXJ3aXNlIGEgbGF0ZXIgcmVjdm1zZygpXFxuK1xcdFxcdCAqIHdvdWxkIHBhc3MgdGhlIGZyZWVkIGl1Y3ZfcGF0aCB0byBtZXNzYWdlX3JlY2VpdmUoKSB2aWFcXG4rXFx0XFx0ICogaXVjdl9wcm9jZXNzX21lc3NhZ2VfcSgpLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZpdWN2LVxcdTAwM2VtZXNzYWdlX3EubG9jayk7XFxuK1xcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuLCBcXHUwMDI2aXVjdi1cXHUwMDNlbWVzc2FnZV9xLmxpc3QsIGxpc3QpIHtcXG4rXFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNnAtXFx1MDAzZWxpc3QpO1xcbitcXHRcXHRcXHRrZnJlZShwKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aXVjdi1cXHUwMDNlbWVzc2FnZV9xLmxvY2spO1xcbiBcXHR9XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE1OjA4OjMyLjIyOTIwMTk1M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjEyNjU2NzAwNzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaXVjdl9zZXZlcl9wYXRoYCBpbiBgYWZfaXVjdi5jYCB0byBjbGVhciB0aGUgYG1lc3NhZ2VfcWAgbGlzdC4gSG93ZXZlciwgdGhpcyBmdW5jdGlvbiBvbmx5IGV4ZWN1dGVzIGl0cyBsb2dpYyBpZiBgaXVjdi1cXHUwMDNlcGF0aGAgaXMgbm9uLU5VTEwuIGBpdWN2LVxcdTAwM2VwYXRoYCBpcyBvbmx5IGFsbG9jYXRlZCB3aGVuIHRoZSB0cmFuc3BvcnQgaXMgYEFGX0lVQ1ZfVFJBTlNfSVVDVmAsIHdoaWNoIGluIHR1cm4gaXMgb25seSBzZWxlY3RlZCBpZiBgcHJfaXVjdmAgaXMgbm9uLU5VTEwuIGBwcl9pdWN2YCBpcyBpbml0aWFsaXplZCBvbmx5IHdoZW4gYG1hY2hpbmVfaXNfdm0oKWAgaXMgdHJ1ZSwgbWVhbmluZyB0aGUga2VybmVsIG11c3QgYmUgcnVubmluZyB1bmRlciB0aGUgcHJvcHJpZXRhcnkgSUJNIHovVk0gaHlwZXJ2aXNvci4gU2luY2UgUUVNVS9LVk0gZW52aXJvbm1lbnRzIGRvIG5vdCBlbXVsYXRlIHovVk0gKHRoZXkgaWRlbnRpZnkgYXMgS1ZNIG9yIFFFTVUpLCB0aGlzIGNvZGUgcGF0aCBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3ZWIxMjkzNGM1MmEyOTE0ZTE3NTBiMWYyZWM4MWQzODg2MmQ0OTY2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgNyAxNTowODoyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pdWN2L2FmX2l1Y3YuYyBiL25ldC9pdWN2L2FmX2l1Y3YuY1xuaW5kZXggZmVkMjQwYjQ1M2JkOWIuLjI4NjlhMTAzZjdmYTJhIDEwMDY0NFxuLS0tIGEvbmV0L2l1Y3YvYWZfaXVjdi5jXG4rKysgYi9uZXQvaXVjdi9hZl9pdWN2LmNcbkBAIC0zMzcsNiArMzM3LDcgQEAgc3RhdGljIHZvaWQgaXVjdl9zZXZlcl9wYXRoKHN0cnVjdCBzb2NrICpzaywgaW50IHdpdGhfdXNlcl9kYXRhKVxuIFx0dW5zaWduZWQgY2hhciB1c2VyX2RhdGFbMTZdO1xuIFx0c3RydWN0IGl1Y3Zfc29jayAqaXVjdiA9IGl1Y3Zfc2soc2spO1xuIFx0c3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCA9IGl1Y3YtXHUwMDNlcGF0aDtcbitcdHN0cnVjdCBzb2NrX21zZ19xICpwLCAqbjtcbiBcbiBcdC8qIFdob2V2ZXIgcmVzZXRzIHRoZSBwYXRoIHBvaW50ZXIsIG11c3Qgc2V2ZXIgYW5kIGZyZWUgaXQuICovXG4gXHRpZiAoeGNoZyhcdTAwMjZpdWN2LVx1MDAzZXBhdGgsIE5VTEwpKSB7XG5AQCAtMzQ4LDYgKzM0OSwxOSBAQCBzdGF0aWMgdm9pZCBpdWN2X3NldmVyX3BhdGgoc3RydWN0IHNvY2sgKnNrLCBpbnQgd2l0aF91c2VyX2RhdGEpXG4gXHRcdH0gZWxzZVxuIFx0XHRcdHByX2l1Y3YtXHUwMDNlcGF0aF9zZXZlcihwYXRoLCBOVUxMKTtcbiBcdFx0aXVjdl9wYXRoX2ZyZWUocGF0aCk7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIE1lc3NhZ2Ugbm90aWZpY2F0aW9ucyBxdWV1ZWQgb24gbWVzc2FnZV9xIHN0aWxsIHJlZmVyZW5jZVxuK1x0XHQgKiB0aGUgbm93IGZyZWVkIHBhdGg7IGRyb3AgdGhlbSwgb3RoZXJ3aXNlIGEgbGF0ZXIgcmVjdm1zZygpXG4rXHRcdCAqIHdvdWxkIHBhc3MgdGhlIGZyZWVkIGl1Y3ZfcGF0aCB0byBtZXNzYWdlX3JlY2VpdmUoKSB2aWFcbitcdFx0ICogaXVjdl9wcm9jZXNzX21lc3NhZ2VfcSgpLlxuK1x0XHQgKi9cbitcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNml1Y3YtXHUwMDNlbWVzc2FnZV9xLmxvY2spO1xuK1x0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbiwgXHUwMDI2aXVjdi1cdTAwM2VtZXNzYWdlX3EubGlzdCwgbGlzdCkge1xuK1x0XHRcdGxpc3RfZGVsKFx1MDAyNnAtXHUwMDNlbGlzdCk7XG4rXHRcdFx0a2ZyZWUocCk7XG4rXHRcdH1cbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aXVjdi1cdTAwM2VtZXNzYWdlX3EubG9jayk7XG4gXHR9XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTU6MDg6MzIuMjI5MjA0NTEzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkzMzcyNjk5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCB0byBgbmV0L2l1Y3YvYWZfaXVjdi5jYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCdzIHR3ZWFraW5nIGBpdWN2X3NldmVyX3BhdGhgIGluIGBuZXQvaXVjdi9hZl9pdWN2LmNgLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgdGhlIGNoYW5nZSBpcyBjbGVhcmluZyB0aGUgYG1lc3NhZ2VfcWAgbGlzdC4gVGhhdCdzIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24sIGZvciBzdXJlLiBCZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGNvZGUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBlbnZpcm9ubWVudCB0aGlzIGNvZGUgcnVucyBpbi5cblxuRmlyc3QgdGhvdWdodDogSVVDViAtIGxldCBtZSByZW1pbmQgbXlzZWxmIHdoYXQgdGhhdCBpcy4uLiByaWdodCwgXCJJbnRyYS1Vc2VyIENvbW11bmljYXRpb24gVmVoaWNsZS5cIiBJdCdzIGFuIElCTSB6L1ZNLXNwZWNpZmljIHByb3RvY29sLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBjb2RlIGlzIGdvaW5nIHRvIGJlIHMzOTAgc3BlY2lmaWMuIFNvIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgaG93IHRoaXMgaW50ZXJhY3RzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIElzIGBuZXQvaXVjdi9hZl9pdWN2LmNgIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nPyBJJ2QgYmV0dGVyIGNvbmZpcm0gd2hlcmUgdGhpcyBpcyB1c2VkLiBUbyBkbyB0aGF0IEknbGwgcXVpY2tseSBsb29rIGF0IGBuZXQvaXVjdi9LY29uZmlnYCBvciBldmVuIGBuZXQvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGlzIGFueSBjb25kaXRpb25hbCBjb21waWxpbmcgYXJvdW5kIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTE1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTU6MDg6MzcuMTYyOTM0MTc1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDA4Nzk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVVDVlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXVjdi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pdWN2L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvaXVjdi9LY29uZmlnOjI6Y29uZmlnIElVQ1ZcXG5uZXQvaXVjdi9LY29uZmlnLTMtXFx0ZGVwZW5kcyBvbiBTMzkwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE1OjA4OjM3LjI4NzAyOTYwNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyMDIzMDcxMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uc2lkZXJpbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBTMzkwIENvZGUgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyB0aGUgcHJvbXB0IG1lbnRpb25zIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJBaCwgdGhpcyAqZGVwZW5kcyogb24gUzM5MC5cIiBDYW4gd2UgZXZlbiBmdXp6IFMzOTAgY29kZSBlZmZlY3RpdmVseT8gU3l6a2FsbGVyICpkb2VzKiBzdXBwb3J0IHMzOTB4LCB3aGljaCBpcyBwcm9taXNpbmcuIEhvd2V2ZXIsIHR5cGljYWxseSwgd2UncmUgcnVubmluZyB4ODZfNjQgb3IgYXJtNjQgaW4gb3VyIHVzdWFsIGZ1enppbmcgc2V0dXBzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoZSBwcm9tcHQgYW5kIHRoZSBzcGVjaWZpYyB0YXJnZXQuIFRoZSBwcm9tcHQgdGhlbiBzdHJlc3NlcyB0aGUgaXNzdWUgb2YgZW11bGF0ZWQgaGFyZHdhcmUgc3VjaCBhcyB1c2IgZ2FkZ2V0cyBvciBtYWM4MDIxMV9od3NpbSBiZWluZyB1bnJlYWNoYWJsZS5cblxuQnV0IHdhaXQsIFFFTVUgY2FuIGVtdWxhdGUgczM5MHgsIGFuZCB0aGF0IHNob3VsZCBiZSBlbm91Z2ggZm9yIGJhc2ljIG9wZXJhdGlvbiwgcmlnaHQ/IFRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IElzIHRoZSAqc3BlY2lmaWMqIGNvZGUgdGhleSdyZSB0YWxraW5nIGFib3V0IHJlYWNoYWJsZSAqd2l0aG91dCogcmVseWluZyBvbiBhIGRlZGljYXRlZCB6L1ZNIGh5cGVydmlzb3I/IEkgY2FuIHByb2JhYmx5IGdldCB0aGUgYmFzaWMgQ1BVLCBhbmQgc29tZSBkZXZpY2VzLCBidXQgaXQgY291bGQgYmUgdGhlIGNhc2UgdGhhdCBhIHNwZWNpZmljIGVtdWxhdGVkIGRldmljZSBoYXMgYW4gaXNzdWUgdGhhdCByZXF1aXJlcyBhIHNwZWNpZmljIGh5cGVydmlzb3IgZmVhdHVyZS5cblxuSSdkIGJldHRlciBjaGVjayBgbmV0L2l1Y3YvS2NvbmZpZ2AgYWdhaW4gdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgcG90ZW50aWFsIGRlcGVuZGVuY2llcy4gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTU6MDg6NDYuNDg5MzM4NzMyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2l1Y3YvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIElVQ1ZcXG4gICAzOlxcdFxcdGRlcGVuZHMgb24gUzM5MFxcbiAgIDQ6XFx0XFx0ZGVmX3RyaXN0YXRlIHkgaWYgUzM5MFxcbiAgIDU6XFx0XFx0cHJvbXB0IFxcXCJJVUNWIHN1cHBvcnQgKFMzOTAgLSB6L1ZNIG9ubHkpXFxcIlxcbiAgIDY6XFx0XFx0aGVscFxcbiAgIDc6XFx0XFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gdXNlIGludGVyLXVzZXIgY29tbXVuaWNhdGlvblxcbiAgIDg6XFx0XFx0ICB1bmRlciBWTSBvciBWSUYuIElmIHlvdSBydW4gb24gei9WTSwgc2F5IFxcXCJZXFxcIiB0byBlbmFibGUgYSBmYXN0XFxuICAgOTpcXHRcXHQgIGNvbW11bmljYXRpb24gbGluayBiZXR3ZWVuIFZNIGd1ZXN0cy5cXG4gIDEwOlxcdFxcbiAgMTE6XFx0Y29uZmlnIEFGSVVDVlxcbiAgMTI6XFx0XFx0ZGVwZW5kcyBvbiBTMzkwXFxuICAxMzpcXHRcXHRkZWZfdHJpc3RhdGUgbSBpZiBRRVRIX0wzIHx8IElVQ1ZcXG4gIDE0OlxcdFxcdHByb21wdCBcXFwiQUZfSVVDViBTb2NrZXQgc3VwcG9ydCAoUzM5MCAtIHovVk0gYW5kIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQpXFxcIlxcbiAgMTU6XFx0XFx0aGVscFxcbiAgMTY6XFx0XFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gdXNlIEFGX0lVQ1Ygc29ja2V0IGFwcGxpY2F0aW9uc1xcbiAgMTc6XFx0XFx0ICBiYXNlZCBvbiB6L1ZNIGludGVyLXVzZXIgY29tbXVuaWNhdGlvbiB2ZWhpY2xlIG9yIGJhc2VkIG9uXFxuICAxODpcXHRcXHQgIEhpcGVyU29ja2V0cy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTU6MDg6NDYuNDg5NDAxMzUyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjcwODgzMTU5MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgSVVDViBhbmQgQUZJVUNWIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2Ugbm90ZXMgYW5kIEkgc2VlIHRoYXQgSVVDViBpcyBzcGVjaWZpY2FsbHkgZm9yIHovVk0sIGJ1dCBBRklVQ1Ygc3VwcG9ydHMgSGlwZXJTb2NrZXRzICphbmQqIHovVk0uIEhtbSwgdGhlIHF1ZXN0aW9uIHRoYXQgaW1tZWRpYXRlbHkgcG9wcyBpbnRvIG15IGhlYWQgaXM6IGNhbiB0aGlzIGV2ZW4gcnVuIHVuZGVyIFFFTVU/IE5vdywgSSBrbm93IHRoZSBRRU1VIHMzOTB4IGVtdWxhdGlvbiwgYnV0IEknbSBwcmV0dHkgc3VyZSBpdCBkb2Vzbid0IGVtdWxhdGUgei9WTSBJVUNWIGRpcmVjdGx5OyBpdCdzIG1vcmUgZ2VhcmVkIHRvd2FyZHMgS1ZNL1FFTVUsIG9mIGNvdXJzZS5cblxuV2FpdCBhIHNlY29uZCwgdGhlIG5vdGVzIHNheSBBRklVQ1YgKmNhbiogdXNlIEhpcGVyU29ja2V0cy4gVGhhdCdzIGEga2V5IGRldGFpbC4gQnV0IHRoZSB1bmRlcmx5aW5nIGRlcGVuZGVuY3kgaXMgc3RpbGwgb24gdGhlIFMzOTAgYXJjaGl0ZWN0dXJlLiBTbywgaWYgSSdtIGZ1enppbmcgYW4geDg2XzY0IG9yIGFybTY0IHRhcmdldCwgSSdtIHByZXR0eSBtdWNoIGRlYWQgaW4gdGhlIHdhdGVyOyBJIHdvbid0IGJlIGFibGUgdG8gYnVpbGQgdGhpcyBjb2RlLiBIb3dldmVyLCBpZiBJJ20gb24gczM5MHgsIHRoZW4gaXQncyBhIHBvc3NpYmlsaXR5LlxuXG5Ob3csIGRpZCB0aGUgcHJvbXB0IHNheSBhbnl0aGluZyBhYm91dCBleGNsdWRpbmcgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGU/IExldCBtZSByZXJlYWQgaXQuLi4gXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuXCIgT2theSwgd2FpdCwgUUVNVSAqY2FuKiBlbXVsYXRlIHMzOTB4ISBTbywgdGhhdCBjb2RlICpzaG91bGQqIGJlIHJlYWNoYWJsZSBpbiBhIFFFTVUgKHMzOTB4KSBlbnZpcm9ubWVudC5cblxuSGFuZyBvbi4uLiBpcyBpdCAqaW1wb3NzaWJsZSogdG8gcmVhY2ggaXQgaW4gUUVNVT8gSSBuZWVkIHRvIHRoaW5rIHRoaXMgdGhyb3VnaC4gQ2FuIEkgY3JlYXRlIGBBRl9JVUNWYCBzb2NrZXRzICp3aXRob3V0KiB6L1ZNPyBUaGF0J3MgdGhlIHJlYWwgcXVlc3Rpb24uIElmIEkgKmNhbiogY3JlYXRlIHRob3NlIHNvY2tldHMsIGFuZCBpZiB0aGUgY29kZSBwYXRocyBsZWFkaW5nIHRvIGBpdWN2X3NlcnZlcl9wYXRoYCBjYW4gYmUgcmVhY2hlZC4uLiB0aGVuIHdlIGFyZSBnb2xkZW4uIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzgzLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTU6MDk6MTMuNTc3NzE5MjQ1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDg2NjU0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpdWN2X3NldmVyX3BhdGhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2l1Y3YvYWZfaXVjdi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuYz0zMjQ9c3RhdGljIHZvaWQgaXVjdl9zb2NrX2tpbGwoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTMzNC0vKiBUZXJtaW5hdGUgYW4gSVVDViBwYXRoICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjMzNTpzdGF0aWMgdm9pZCBpdWN2X3NldmVyX3BhdGgoc3RydWN0IHNvY2sgKnNrLCBpbnQgd2l0aF91c2VyX2RhdGEpXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTMzNi17XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9Mzk1PXN0YXRpYyB2b2lkIGl1Y3Zfc29ja19jbG9zZShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDQyLVxcdGRlZmF1bHQ6XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjQ0MzpcXHRcXHRpdWN2X3NldmVyX3BhdGgoc2ssIDEpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy00NDQtXFx0fVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTczMz1zdGF0aWMgaW50IGl1Y3Zfc29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTc4MS1cXHRpZiAoZXJyIFxcdTAwMjZcXHUwMDI2IGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1YpXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjc4MjpcXHRcXHRpdWN2X3NldmVyX3BhdGgoc2ssIDApO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy03ODMtXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTYwNz1zdGF0aWMgaW50IGl1Y3ZfY2FsbGJhY2tfY29ubnJlcShzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2ODctXFx0aWYgKGVycikge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjg4OlxcdFxcdGl1Y3Zfc2V2ZXJfcGF0aChuc2ssIDEpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjg5LVxcdFxcdGl1Y3Zfc29ja19raWxsKG5zayk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTgwMT1zdGF0aWMgdm9pZCBpdWN2X2NhbGxiYWNrX2Nvbm5yZWooc3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCwgdTggaXB1c2VyWzE2XSlcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODA4LVxcdGJoX2xvY2tfc29jayhzayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE4MDk6XFx0aXVjdl9zZXZlcl9wYXRoKHNrLCAxKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTgxMC1cXHRzay1cXHUwMDNlc2tfc3RhdGUgPSBJVUNWX0RJU0NPTk47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE1OjA5OjEzLjY5MjU5MDk0NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3NTU0NzU3ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGBpdWN2X3NldmVyX3BhdGhgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYGl1Y3Zfc2V2ZXJfcGF0aGAgaXMgYWN0dWFsbHkgcmVhY2hhYmxlIGZyb20gd2hlcmUgaXQncyBiZWluZyBjYWxsZWQuIEkgc2VlIGl0J3MgYmVpbmcgaW52b2tlZCBmcm9tIGEgZmV3IGtleSBwbGFjZXMgaW4gdGhlIElVQ1Ygc29ja2V0IGNvZGU6IGBpdWN2X3NvY2tfY2xvc2VgLCBgaXVjdl9zb2NrX2Nvbm5lY3RgLCBgaXVjdl9jYWxsYmFja19jb25ucmVxYCwgYW5kIGBpdWN2X2NhbGxiYWNrX2Nvbm5yZWpgLiBUaGF0J3MgdGhlIGNvcmUgb2YgY29ubmVjdGlvbiBtYW5hZ2VtZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2UncmUgcmVhY2hpbmcgdGhvc2UgZnVuY3Rpb25zLlxuXG5TbywgbGV0J3Mgc3RhcnQgd2l0aCB0aGUgYmFzaWNzLiBDYW4gd2UgZXZlbiBpbnN0YW50aWF0ZSBhbiBBRl9JVUNWIHNvY2tldD8gVGhhdCBtZWFucyBleGFtaW5pbmcgdGhlIGBzb2NrZXQoKWAgY2FsbCB3aXRoIGBBRl9JVUNWYCwgYFNPQ0tfU1RSRUFNYCwgYW5kIDAgZm9yIHRoZSBwcm90b2NvbC4gSWYgd2UgY2FuJ3QgY3JlYXRlIHRoZSBzb2NrZXQgaW4gdGhlIGZpcnN0IHBsYWNlLCB0aGVuIHRoaXMgd2hvbGUgcGF0aCBpcyBtb290LlxuXG5UaGF0IGJyaW5ncyBtZSB0byBgaXVjdl9zb2NrX2NyZWF0ZWAuIEknbGwgbmVlZCB0byBkaXZlIGludG8gdGhhdCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3Mgb2YgdGhlIElVQ1Ygc29ja2V0IGNyZWF0aW9uIHByb2Nlc3MgYW5kIHdoZXJlIGBpdWN2X3NldmVyX3BhdGhgIG1pZ2h0IGJlIHJlbGV2YW50LiBJdCdzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgZmlndXJpbmcgb3V0IHdoYXQgY29uZGl0aW9ucyBjYW4gYWxsb3cgZm9yIGl0cyB1c2UuIEkgbmVlZCB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIGFuZCBhbnkgYXNzb2NpYXRlZCBlcnJvciBjb25kaXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzgyLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE1OjA5OjE5LjQ0ODA2OTAwNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ0NzY0Mjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIml1Y3Zfc29ja19jcmVhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2l1Y3YvYWZfaXVjdi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuYz0yMjM0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGl1Y3Zfc29ja19vcHMgPSB7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI1My1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjI1NDpzdGF0aWMgaW50IGl1Y3Zfc29ja19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyNTUtXFx0XFx0XFx0ICAgIGludCBrZXJuKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTIyODM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfcHJvdG9fZmFtaWx5IGl1Y3Zfc29ja19mYW1pbHlfb3BzID0ge1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyODUtXFx0Lm93bmVyXFx0PSBUSElTX01PRFVMRSxcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjI4NjpcXHQuY3JlYXRlXFx0PSBpdWN2X3NvY2tfY3JlYXRlLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjg3LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE1OjA5OjE5Ljc5MjgzODk0M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDYzMzQyNjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgaXVjdl9zb2NrX2NyZWF0ZWAncyBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkcmlsbCBkb3duIG9uIHRoaXMgYGl1Y3Zfc29ja19jcmVhdGVgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgdGhpcyBpcyBkZWVwbHkgdGllZCB0byB0aGUgei9WTSBlbnZpcm9ubWVudCwgZ2l2ZW4gaXRzIGxpa2VseSBpbnRlcmFjdGlvbiB3aXRoIElVQ1YuIEJ1dCwgYmVmb3JlIEkganVtcCB0byBhbnkgY29uY2x1c2lvbnMsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBhc3N1bXB0aW9uLiBUaGUgY29yZSBxdWVzdGlvbiBpczogZG9lcyB0aGlzIGZ1bmN0aW9uICptYW5kYXRvcmlseSogcmVxdWlyZSB0aGUgei9WTSBoeXBlcnZpc29yIHRvIGZ1bmN0aW9uLCBvciBoYXMgaXQgYmVlbiBkZXNpZ25lZCBpbiBhIHdheSB0aGF0IGFsbG93cyBpdCB0byBvcGVyYXRlLCBhbGJlaXQgcGVyaGFwcyB3aXRoIHJlZHVjZWQgZnVuY3Rpb25hbGl0eSBvciB1bmRlciBzcGVjaWZpYyBjb25kaXRpb25zLCBvbiBhIGJhcmUgczM5MHggc3lzdGVtPyBLbm93aW5nIHRoaXMgd2lsbCBzaWduaWZpY2FudGx5IGluZmx1ZW5jZSBob3cgcG9ydGFibGUgYW55IGNvZGUgdXNpbmcgdGhpcyBpcy4gVGltZSB0byBkaWcgaW50byB0aGUgc291cmNlIGFuZCBjcm9zcy1yZWZlcmVuY2UgdGhlIGRvY3VtZW50YXRpb24gdG8gY29uZmlybSBpdHMgZW52aXJvbm1lbnRhbCByZXF1aXJlbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NjcsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNTowOToyMy4yNTYxODQzOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODcxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2l1Y3YvYWZfaXVjdi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyNTQsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyNTQ6XFx0c3RhdGljIGludCBpdWN2X3NvY2tfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxcbjIyNTU6XFx0XFx0XFx0XFx0ICAgIGludCBrZXJuKVxcbjIyNTY6XFx0e1xcbjIyNTc6XFx0XFx0c3RydWN0IHNvY2sgKnNrO1xcbjIyNTg6XFx0XFxuMjI1OTpcXHRcXHRpZiAocHJvdG9jb2wgXFx1MDAyNlxcdTAwMjYgcHJvdG9jb2wgIT0gUEZfSVVDVilcXG4yMjYwOlxcdFxcdFxcdHJldHVybiAtRVBST1RPTk9TVVBQT1JUO1xcbjIyNjE6XFx0XFxuMjI2MjpcXHRcXHRzb2NrLVxcdTAwM2VzdGF0ZSA9IFNTX1VOQ09OTkVDVEVEO1xcbjIyNjM6XFx0XFxuMjI2NDpcXHRcXHRzd2l0Y2ggKHNvY2stXFx1MDAzZXR5cGUpIHtcXG4yMjY1OlxcdFxcdGNhc2UgU09DS19TVFJFQU06XFxuMjI2NjpcXHRcXHRjYXNlIFNPQ0tfU0VRUEFDS0VUOlxcbjIyNjc6XFx0XFx0XFx0LyogY3VycmVudGx5LCBwcm90byBvcHMgY2FuIGhhbmRsZSBib3RoIHNrIHR5cGVzICovXFxuMjI2ODpcXHRcXHRcXHRzb2NrLVxcdTAwM2VvcHMgPSBcXHUwMDI2aXVjdl9zb2NrX29wcztcXG4yMjY5OlxcdFxcdFxcdGJyZWFrO1xcbjIyNzA6XFx0XFx0ZGVmYXVsdDpcXG4yMjcxOlxcdFxcdFxcdHJldHVybiAtRVNPQ0tUTk9TVVBQT1JUO1xcbjIyNzI6XFx0XFx0fVxcbjIyNzM6XFx0XFxuMjI3NDpcXHRcXHRzayA9IGl1Y3Zfc29ja19hbGxvYyhzb2NrLCBwcm90b2NvbCwgR0ZQX0tFUk5FTCwga2Vybik7XFxuMjI3NTpcXHRcXHRpZiAoIXNrKVxcbjIyNzY6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjI3NzpcXHRcXG4yMjc4OlxcdFxcdGl1Y3Zfc29ja19pbml0KHNrLCBOVUxMKTtcXG4yMjc5OlxcdFxcbjIyODA6XFx0XFx0cmV0dXJuIDA7XFxuMjI4MTpcXHR9XFxuMjI4MjpcXHRcXG4yMjgzOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSBpdWN2X3NvY2tfZmFtaWx5X29wcyA9IHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTU6MDk6MjMuMjU2Mzc0MjFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE0OTkzNTYyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIENyZWF0aW9uIFByb2Nlc3MqKlxuXG5JIHNlZSB0aGUgcG9zc2liaWxpdHkgb2Ygc29tZXRoaW5nIGJlaW5nIGNyZWF0ZWQuIEJ1dCB0aGVuIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYGl1Y3Zfc2V2ZXJfcGF0aGAuIFdoeT8gQmVjYXVzZSBpdCdzIHRoZSBjcml0aWNhbCBqdW5jdHVyZSBpbiB0aGlzIHByb2Nlc3MuIEknbSBmb2N1c2luZyBpbiBvbiB0aGUgbGluZSB0aGF0IHJlYWRzIGBpZiAoeGNoZyhcdTAwMjZpdWN2LVx1MDAzZXBhdGgsIE5VTEwpKWAuIFRoaXMgaXMgYSBjcnVjaWFsIGNoZWNrLiBJdCdzIHVzaW5nIGB4Y2hnYCB3aGljaCwgaWYgSSByZW1lbWJlciBjb3JyZWN0bHksIGlzIGFuIGF0b21pYyBleGNoYW5nZSBvcGVyYXRpb24uIEl0J3MgZXNzZW50aWFsbHkgYXNraW5nLCBcIkhhcyBzb21ldGhpbmcgYmVlbiBzZXQgaW4gYGl1Y3YtXHUwMDNlcGF0aGAgYWxyZWFkeT8gSXMgdGhlcmUgYWxyZWFkeSBhIHBhdGh3YXkgY3JlYXRlZD9cblxuTXkgbmV4dCB0aG91Z2h0LCBpbnN0aW5jdGl2ZWx5LCBpcyB0byB0cmFjZSBiYWNrOiAqV2hlbiogZXhhY3RseSBpcyBgaXVjdi1cdTAwM2VwYXRoYCBpbml0aWFsaXplZD8gQmVmb3JlIGl0J3MgZXZlbiBjcmVhdGVkLCBvciByaWdodCBhZnRlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNlcXVlbmNlIG9mIGV2ZW50cyBsZWFkaW5nIHVwIHRvIHRoaXMgcG9pbnQuIEtub3dpbmcgd2hlbiBgaXVjdi1cdTAwM2VwYXRoYCBpcyBwb3B1bGF0ZWQgaXMgYWJzb2x1dGVseSBmdW5kYW1lbnRhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBsb2dpYyBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgb3IsIG1vcmUgaW1wb3J0YW50bHksIHRoZSBpbnRlbmRlZCBkZXNpZ24gaGVyZS4gVGhlIHdob2xlIHBpY3R1cmUgbmVlZHMgdG8gYmUgcHV0IHRvZ2V0aGVyIGFuZCBpdHMgZnVuY3Rpb25hbGl0eSBuZWVkcyB0byBiZSBncmFzcGVkIGNvbXBsZXRlbHkgdG8gcHJvcGVybHkgY3JlYXRlIG9yIGltcGxlbWVudCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjEzNiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTU6MDk6MjcuNDA2MzEzMjc2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM3NTYxMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXVjdi1cXHUwMDNlcGF0aCA9XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmM9NDY2PXN0YXRpYyBzdHJ1Y3Qgc29jayAqaXVjdl9zb2NrX2FsbG9jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90bywgZ2ZwX3QgcHJpbywgaW50IGtlcm4pXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDg5LVxcdGF0b21pY19zZXQoXFx1MDAyNml1Y3YtXFx1MDAzZW1zZ19yZWN2LCAwKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6NDkwOlxcdGl1Y3YtXFx1MDAzZXBhdGggPSBOVUxMO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OTEtXFx0aXVjdi1cXHUwMDNlc2tfdHhub3RpZnkgPSBhZml1Y3ZfaHNfY2FsbGJhY2tfdHhub3RpZnk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9Njg3PXN0YXRpYyBpbnQgYWZpdWN2X3BhdGhfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy02OTktXFx0LyogQ3JlYXRlIHBhdGguICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjcwMDpcXHRpdWN2LVxcdTAwM2VwYXRoID0gaXVjdl9wYXRoX2FsbG9jKGl1Y3YtXFx1MDAzZW1zZ2xpbWl0LFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03MDEtXFx0XFx0XFx0XFx0ICAgICBJVUNWX0lQUk1EQVRBLCBHRlBfS0VSTkVMKTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03MTAtXFx0XFx0aXVjdl9wYXRoX2ZyZWUoaXVjdi1cXHUwMDNlcGF0aCk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjcxMTpcXHRcXHRpdWN2LVxcdTAwM2VwYXRoID0gTlVMTDtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzEyLVxcdFxcdHN3aXRjaCAoZXJyKSB7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTYwNz1zdGF0aWMgaW50IGl1Y3ZfY2FsbGJhY2tfY29ubnJlcShzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NzUtXFx0bWVtY3B5KG5pdWN2LVxcdTAwM2VzcmNfdXNlcl9pZCwgaXVjdi1cXHUwMDNlc3JjX3VzZXJfaWQsIDgpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjc2OlxcdG5pdWN2LVxcdTAwM2VwYXRoID0gcGF0aDtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY3Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTU6MDk6MjcuNTEwMDc2NDI1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDk0NzQ2OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIHByZXNlbnRlZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydDpcblxuKipVbmRlcnN0YW5kaW5nIHRoZSBBbGxvY2F0aW9uIG9mIGBpdWN2LVx1MDAzZXBhdGhgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgYWZpdWN2X3BhdGhfY29ubmVjdGAgZnVuY3Rpb24gYW5kIHRoZSBrZXkgdGhpbmcgaGVyZSBpcyB0aGUgYWxsb2NhdGlvbiBvZiBgaXVjdi1cdTAwM2VwYXRoYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgdGhlIG1lbW9yeSBpcyBzZXQgYXNpZGUgZm9yIHRoZSBwYXRoIHN0cnVjdHVyZSBpdHNlbGYuIFRoaXMgaXMgY3JpdGljYWwgYmVjYXVzZSB0aGlzIHN0cnVjdHVyZSBwcmVzdW1hYmx5IGhvbGRzIHRoZSBkZXRhaWxzIG9mIHRoZSBJVUNWIGNvbm5lY3Rpb24sIHRoZSByb3V0ZSwgZW5kcG9pbnRzLCBldmVyeXRoaW5nIG5lZWRlZCBmb3IgdGhlIGFjdHVhbCBjb21tdW5pY2F0aW9uIHRvIG9jY3VyLiBVbmRlcnN0YW5kaW5nICp3aGVyZSogdGhpcyBoYXBwZW5zIGhlbHBzIG1lIGltbWVkaWF0ZWx5IHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgYWxsb2NhdGlvbiwgYW5kIGxpa2VseSwgd2hlbiB0aGUgc3RydWN0dXJlIGJlY29tZXMgdmFsaWQuIFRoaXMgYWxzbyB0ZWxscyBtZSB3aGF0IHRvIGxvb2sgZm9yIHdoZW4gZGVidWdnaW5nIGNvbm5lY3Rpb24gZmFpbHVyZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwMTMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNTowOTozMC45NTk1NTM0NjNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTU0MzI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZml1Y3ZfcGF0aF9jb25uZWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmM9NjY1PXN0YXRpYyBpbnQgaXVjdl9zb2NrX2F1dG9iaW5kKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy02ODYtXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjY4NzpzdGF0aWMgaW50IGFmaXVjdl9wYXRoX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIpXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTY4OC17XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9NzMzPXN0YXRpYyBpbnQgaXVjdl9zb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzY4LVxcdGVsc2VcXG5uZXQvaXVjdi9hZl9pdWN2LmM6NzY5OlxcdFxcdGVyciA9IGFmaXVjdl9wYXRoX2Nvbm5lY3Qoc29jaywgYWRkcik7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTc3MC1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNTowOTozMS4xMDExMDM0MTJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQwNTUzOTU2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgY29kZSBzbmlwcGV0LCBwcmVzZW50ZWQgYXMgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgdGhlIGBhZml1Y3ZfcGF0aF9jb25uZWN0YCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gYGFmaXVjdl9wYXRoX2Nvbm5lY3RgLi4uIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIEl0IGFwcGVhcnMgdG8gYmUgYSBmdW5jdGlvbiBkZWFsaW5nIHdpdGggc29tZSBraW5kIG9mIHBhdGggY29ubmVjdGlvbiwgbGlrZWx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBhbiBBRl9JVUNWIChJbnRlci1Vc2VyIENvbW11bmljYXRpb24gVmVoaWNsZSkgZW52aXJvbm1lbnQsIHdoaWNoIEknbSBmYW1pbGlhciB3aXRoLlxuXG5UaGUgZmlyc3QgdGhpbmcgaXQgZG9lcyBpcyBjYWxsIGBpdWN2X3BhdGhfYWxsb2NgLiBTbywgY2xlYXJseSwgYmVmb3JlIGFueXRoaW5nIGVsc2UsIGEgcGF0aCBpcyBiZWluZyBhbGxvY2F0ZWQuIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZTsgeW91IGNhbid0IGNvbm5lY3QgdG8gc29tZXRoaW5nIHRoYXQgZG9lc24ndCBleGlzdC4gVGhpcyBhbGxvY2F0aW9uIGxpa2VseSBzZXRzIHVwIHRoZSBiYXNpYyBkYXRhIHN0cnVjdHVyZXMgbmVlZGVkIHRvIG1hbmFnZSB0aGUgY29tbXVuaWNhdGlvbiBwYXRoLlxuXG5UaGVuLCB0aGVyZSdzIGEgY2FsbCB0byBgcHJfaXVjdi1cdTAwM2VwYXRoX2Nvbm5lY3RgLiBBaCwgbm93IHdlIGdldCB0byB0aGUgY29yZSBjb25uZWN0aW9uIGxvZ2ljLiBCdXQsIGFuZCB0aGlzIGlzIHdoZXJlIEkgbmVlZCB0byB0YWtlIGEgcGF1c2UuLi53aGF0ICppcyogYHByX2l1Y3ZgPyBUaGlzIGxvb2tzIGxpa2UgYSBwb2ludGVyIHRvIHNvbWUgc29ydCBvZiBJVUNWLXJlbGF0ZWQgc3RydWN0dXJlLCBwcm9iYWJseSBhIHBlci1JVUNWIGRhdGEgc3RydWN0dXJlLiBJdCdzIGxpa2VseSB3aXRoaW4gdGhpcyBzdHJ1Y3R1cmUgdGhhdCB0aGUgYHBhdGhfY29ubmVjdGAgbWV0aG9kIGlzIGRlZmluZWQuIFVuZGVyc3RhbmRpbmcgd2hhdCBgcHJfaXVjdmAgcmVwcmVzZW50cyBpcyBjcnVjaWFsIHRvIGNvbXByZWhlbmRpbmcgdGhlIGVudGlyZSBwcm9jZXNzLCBpbmNsdWRpbmcgYW55IGNvbnRleHQgaXQgcmVxdWlyZXMuIEknZCBiZXR0ZXIgZm9sbG93IHRoaXMgcG9pbnRlciBhbmQgZmlndXJlIG91dCB3aGVyZSB0aGlzIGdldHMgaW5pdGlhbGl6ZWQsIGFuZCB3aGF0IGNvbnRleHQgaXQgcHJvdmlkZXMgdG8gdGhlIGNhbGwgdG8gYHBhdGhfY29ubmVjdGAuIFRoZSBkZXRhaWxzIG9mIHRoaXMgc3RydWN0dXJlIGFyZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29ubmVjdGlvbiBwcm9jZXNzLCBhbmQgdGhlIGxvZ2ljIHdpdGhpbiB0aGUgYHBhdGhfY29ubmVjdGAgbWV0aG9kIGl0c2VsZi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ4NSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE1OjA5OjM1LjUwNjY0NTMxNloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODUyMjU4ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJfaXVjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2l1Y3YvYWZfaXVjdi5jPTQyPXN0YXRpYyBzdHJ1Y3QgcHJvdG8gaXVjdl9wcm90byA9IHtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy00Ny1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6NDg6c3RhdGljIHN0cnVjdCBpdWN2X2ludGVyZmFjZSAqcHJfaXVjdjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDktc3RhdGljIHN0cnVjdCBpdWN2X2hhbmRsZXIgYWZfaXVjdl9oYW5kbGVyO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTMzNT1zdGF0aWMgdm9pZCBpdWN2X3NldmVyX3BhdGgoc3RydWN0IHNvY2sgKnNrLCBpbnQgd2l0aF91c2VyX2RhdGEpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzQ3LVxcdFxcdFxcdEFTQ0VCQyh1c2VyX2RhdGEsIHNpemVvZih1c2VyX2RhdGEpKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MzQ4OlxcdFxcdFxcdHByX2l1Y3YtXFx1MDAzZXBhdGhfc2V2ZXIocGF0aCwgdXNlcl9kYXRhKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzQ5LVxcdFxcdH0gZWxzZVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzozNTA6XFx0XFx0XFx0cHJfaXVjdi1cXHUwMDNlcGF0aF9zZXZlcihwYXRoLCBOVUxMKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzUxLVxcdFxcdGl1Y3ZfcGF0aF9mcmVlKHBhdGgpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTQ2Nj1zdGF0aWMgc3RydWN0IHNvY2sgKml1Y3Zfc29ja19hbGxvYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG8sIGdmcF90IHByaW8sIGludCBrZXJuKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ5Mi1cXHRtZW1zZXQoXFx1MDAyNml1Y3YtXFx1MDAzZWluaXQsIDAsIHNpemVvZihpdWN2LVxcdTAwM2Vpbml0KSk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjQ5MzpcXHRpZiAocHJfaXVjdilcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDk0LVxcdFxcdGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz01ODI9c3RhdGljIGludCBpdWN2X3NvY2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy02MTMtXFx0LyogQmluZCB0aGUgc29ja2V0ICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjYxNDpcXHRpZiAocHJfaXVjdilcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjE1LVxcdFxcdGlmICghbWVtY21wKHNhLVxcdTAwM2VzaXVjdl91c2VyX2lkLCBpdWN2X3VzZXJpZCwgOCkpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjQyLXZtX2JpbmQ6XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjY0MzpcXHRpZiAocHJfaXVjdikge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NDQtXFx0XFx0LyogdXNlIGxvY2FsIHVzZXJpZCBmb3IgYmFja3dhcmQgY29tcGF0ICovXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9NjY1PXN0YXRpYyBpbnQgaXVjdl9zb2NrX2F1dG9iaW5kKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NjktXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjY3MDpcXHRpZiAodW5saWtlbHkoIXByX2l1Y3YpKVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NzEtXFx0XFx0cmV0dXJuIC1FUFJPVE87XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9Njg3PXN0YXRpYyBpbnQgYWZpdWN2X3BhdGhfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03MDUtXFx0fVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo3MDY6XFx0ZXJyID0gcHJfaXVjdi1cXHUwMDNlcGF0aF9jb25uZWN0KGl1Y3YtXFx1MDAzZXBhdGgsIFxcdTAwMjZhZl9pdWN2X2hhbmRsZXIsXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTcwNy1cXHRcXHRcXHRcXHQgICAgc2EtXFx1MDAzZXNpdWN2X3VzZXJfaWQsIE5VTEwsIHVzZXJfZGF0YSxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz05MDU9c3RhdGljIGludCBpdWN2X3NlbmRfaXBybShzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLCBzdHJ1Y3QgaXVjdl9tZXNzYWdlICptc2csXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtOTExLVxcdHBybWRhdGFbN10gPSAweGZmIC0gKHU4KSBza2ItXFx1MDAzZWxlbjtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6OTEyOlxcdHJldHVybiBwcl9pdWN2LVxcdTAwM2VtZXNzYWdlX3NlbmQocGF0aCwgbXNnLCBJVUNWX0lQUk1EQVRBLCAwLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy05MTMtXFx0XFx0XFx0XFx0ICh2b2lkICopIHBybWRhdGEsIDgpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTkxNj1zdGF0aWMgaW50IGl1Y3Zfc29ja19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDY5LVxcdFxcdFxcdGlmIChlcnIgPT0gMHgxNSkge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMDcwOlxcdFxcdFxcdFxcdHByX2l1Y3YtXFx1MDAzZXBhdGhfc2V2ZXIoaXVjdi1cXHUwMDNlcGF0aCwgTlVMTCk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNzEtXFx0XFx0XFx0XFx0YXRvbWljX2RlYyhcXHUwMDI2aXVjdi1cXHUwMDNlc2tic19pbl94bWl0KTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDg4LVxcdFxcdFxcdH1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTA4OTpcXHRcXHRcXHRlcnIgPSBwcl9pdWN2LVxcdTAwM2VtZXNzYWdlX3NlbmQoaXVjdi1cXHUwMDNlcGF0aCwgXFx1MDAyNnR4bXNnLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDkwLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBJVUNWX0lQQlVGTFNULCAwLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwOTItXFx0XFx0fSBlbHNlIHsgLyogbm9uLUlQUk0gTGluZWFyIHNrYiAqL1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMDkzOlxcdFxcdFxcdGVyciA9IHByX2l1Y3YtXFx1MDAzZW1lc3NhZ2Vfc2VuZChpdWN2LVxcdTAwM2VwYXRoLCBcXHUwMDI2dHhtc2csXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwOTQtXFx0XFx0XFx0XFx0XFx0MCwgMCwgKHZvaWQgKilza2ItXFx1MDAzZWRhdGEsIHNrYi1cXHUwMDNlbGVuKTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0xMTU4PXN0YXRpYyB2b2lkIGl1Y3ZfcHJvY2Vzc19tZXNzYWdlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMTg5LVxcdFxcdFxcdH1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTE5MDpcXHRcXHRcXHRyYyA9IHByX2l1Y3YtXFx1MDAzZW1lc3NhZ2VfcmVjZWl2ZShwYXRoLCBtc2csXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTExOTEtXFx0XFx0XFx0XFx0XFx0ICAgICAgSVVDVl9JUEJVRkxTVCxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMTkzLVxcdFxcdH0gZWxzZSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjExOTQ6XFx0XFx0XFx0cmMgPSBwcl9pdWN2LVxcdTAwM2VtZXNzYWdlX3JlY2VpdmUocGF0aCwgbXNnLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMTk1LVxcdFxcdFxcdFxcdFxcdCAgICAgIG1zZy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJVUNWX0lQUk1EQVRBLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTE0MTg9c3RhdGljIGludCBpdWN2X3NvY2tfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGhvdylcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDQ2LVxcdFxcdFxcdHR4bXNnLnRhZyA9IDA7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE0NDc6XFx0XFx0XFx0ZXJyID0gcHJfaXVjdi1cXHUwMDNlbWVzc2FnZV9zZW5kKGl1Y3YtXFx1MDAzZXBhdGgsIFxcdTAwMjZ0eG1zZyxcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ0OC1cXHRcXHRcXHRcXHRJVUNWX0lQUk1EQVRBLCAwLCAodm9pZCAqKSBpcHJtX3NodXRkb3duLCA4KTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDY5LVxcdFxcdCAgICBpdWN2LVxcdTAwM2VwYXRoKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE0NzA6XFx0XFx0XFx0ZXJyID0gcHJfaXVjdi1cXHUwMDNlcGF0aF9xdWllc2NlKGl1Y3YtXFx1MDAzZXBhdGgsIE5VTEwpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDcxLVxcdFxcdFxcdGlmIChlcnIpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTYwNz1zdGF0aWMgaW50IGl1Y3ZfY2FsbGJhY2tfY29ubnJlcShzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NDQtXFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSAhPSBJVUNWX0xJU1RFTikge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjQ1OlxcdFxcdGVyciA9IHByX2l1Y3YtXFx1MDAzZXBhdGhfc2V2ZXIocGF0aCwgdXNlcl9kYXRhKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY0Ni1cXHRcXHRpdWN2X3BhdGhfZnJlZShwYXRoKTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjUxLVxcdGlmIChza19hY2NlcHRxX2lzX2Z1bGwoc2spKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE2NTI6XFx0XFx0ZXJyID0gcHJfaXVjdi1cXHUwMDNlcGF0aF9zZXZlcihwYXRoLCB1c2VyX2RhdGEpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjUzLVxcdFxcdGl1Y3ZfcGF0aF9mcmVlKHBhdGgpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NTktXFx0aWYgKCFuc2spIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTY2MDpcXHRcXHRlcnIgPSBwcl9pdWN2LVxcdTAwM2VwYXRoX3NldmVyKHBhdGgsIHVzZXJfZGF0YSk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NjEtXFx0XFx0aXVjdl9wYXRoX2ZyZWUocGF0aCk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY4NS1cXHRwYXRoLVxcdTAwM2Vtc2dsaW0gPSBpdWN2LVxcdTAwM2Vtc2dsaW1pdDtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTY4NjpcXHRlcnIgPSBwcl9pdWN2LVxcdTAwM2VwYXRoX2FjY2VwdChwYXRoLCBcXHUwMDI2YWZfaXVjdl9oYW5kbGVyLCBudXNlcl9kYXRhLCBuc2spO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjg3LVxcdGlmIChlcnIpIHtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNzEyPXN0YXRpYyB2b2lkIGl1Y3ZfY2FsbGJhY2tfcngoc3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCwgc3RydWN0IGl1Y3ZfbWVzc2FnZSAqbXNnKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE3MjAtXFx0aWYgKHNrLVxcdTAwM2Vza19zaHV0ZG93biBcXHUwMDI2IFJDVl9TSFVURE9XTikge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNzIxOlxcdFxcdHByX2l1Y3YtXFx1MDAzZW1lc3NhZ2VfcmVqZWN0KHBhdGgsIG1zZyk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE3MjItXFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTIyOTQ9c3RhdGljIGludCBfX2luaXQgYWZpdWN2X2luaXQodm9pZClcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzA1LVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzA2OlxcdFxcdHByX2l1Y3YgPSBcXHUwMDI2aXVjdl9pZjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMwNy1cXHR9IGVsc2Uge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzA4LVxcdFxcdG1lbXNldChcXHUwMDI2aXVjdl91c2VyaWQsIDAsIHNpemVvZihpdWN2X3VzZXJpZCkpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzA5OlxcdFxcdHByX2l1Y3YgPSBOVUxMO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzEwLVxcdH1cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzE4LVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzE5OlxcdGlmIChwcl9pdWN2KSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMjA6XFx0XFx0ZXJyID0gcHJfaXVjdi1cXHUwMDNlaXVjdl9yZWdpc3RlcihcXHUwMDI2YWZfaXVjdl9oYW5kbGVyLCAwKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMyMS1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMzItb3V0X25vdGlmaWVyOlxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzMzOlxcdGlmIChwcl9pdWN2KVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzM0OlxcdFxcdHByX2l1Y3YtXFx1MDAzZWl1Y3ZfdW5yZWdpc3RlcihcXHUwMDI2YWZfaXVjdl9oYW5kbGVyLCAwKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMzNS1vdXRfc29jazpcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMzQzPXN0YXRpYyB2b2lkIF9fZXhpdCBhZml1Y3ZfZXhpdCh2b2lkKVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzQ0LXtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjM0NTpcXHRpZiAocHJfaXVjdilcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjM0NjpcXHRcXHRwcl9pdWN2LVxcdTAwM2VpdWN2X3VucmVnaXN0ZXIoXFx1MDAyNmFmX2l1Y3ZfaGFuZGxlciwgMCk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzNDctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE1OjA5OjM1LjU5MTg3NjcwNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjMwNTg3Nzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdCBteXNlbGYsIHdpdGggYSBmb2N1cyB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLlxuXG4qKkludmVzdGlnYXRpbmcgVmFyaWFibGUgSW5pdGlhbGl6YXRpb24gaW4gQUZJVUNWKipcblxuQWxyaWdodCwgc28gYHByX2l1Y3ZgIGlzIGJlaW5nIGluaXRpYWxpemVkIHNvbWV3aGVyZSB3aXRoaW4gdGhlIGBhZml1Y3ZfaW5pdGAgZnVuY3Rpb24uIFRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgZHJpbGwgZG93biBpbnRvIGBhZml1Y3ZfaW5pdGAgdG8gdW5kZXJzdGFuZCBob3cgYHByX2l1Y3ZgIGlzIGJlaW5nIGhhbmRsZWQuIEknbSBnb2luZyB0byBxdWlja2x5IGp1bXAgaW50byB0aGF0IGZ1bmN0aW9uIGRlZmluaXRpb24gdG8gZXhhbWluZSB0aGUgY29kZSBwYXRoIGRpcmVjdGx5IHJlc3BvbnNpYmxlIGZvciB0aGF0IGluaXRpYWxpemF0aW9uLiBLbm93aW5nIHRoZSBjb250ZXh0LCBJJ2xsIGJlIGFibGUgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIGluaXRpYWxpemF0aW9uIGxvZ2ljLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgYHByX2l1Y3ZgIHZhcmlhYmxlLCB3aGljaCBoZWxwcyBtZSBkZXRlcm1pbmUgaWYgdGhlIGN1cnJlbnQgaW5pdGlhbGl6YXRpb24gaXMgY2F1c2luZyBhbiBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExNDIsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNTowOTo0Mi4yMjI0NjY5MDNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyNTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjk0LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMjk0OlxcdHN0YXRpYyBpbnQgX19pbml0IGFmaXVjdl9pbml0KHZvaWQpXFxuMjI5NTpcXHR7XFxuMjI5NjpcXHRcXHRpbnQgZXJyO1xcbjIyOTc6XFx0XFxuMjI5ODpcXHRcXHRpZiAobWFjaGluZV9pc192bSgpIFxcdTAwMjZcXHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0lVQ1YpKSB7XFxuMjI5OTpcXHRcXHRcXHRjcGNtZChcXFwiUVVFUlkgVVNFUklEXFxcIiwgaXVjdl91c2VyaWQsIHNpemVvZihpdWN2X3VzZXJpZCksIFxcdTAwMjZlcnIpO1xcbjIzMDA6XFx0XFx0XFx0aWYgKHVubGlrZWx5KGVycikpIHtcXG4yMzAxOlxcdFxcdFxcdFxcdFdBUk5fT04oZXJyKTtcXG4yMzAyOlxcdFxcdFxcdFxcdGVyciA9IC1FUFJPVE9OT1NVUFBPUlQ7XFxuMjMwMzpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4yMzA0OlxcdFxcdFxcdH1cXG4yMzA1OlxcdFxcbjIzMDY6XFx0XFx0XFx0cHJfaXVjdiA9IFxcdTAwMjZpdWN2X2lmO1xcbjIzMDc6XFx0XFx0fSBlbHNlIHtcXG4yMzA4OlxcdFxcdFxcdG1lbXNldChcXHUwMDI2aXVjdl91c2VyaWQsIDAsIHNpemVvZihpdWN2X3VzZXJpZCkpO1xcbjIzMDk6XFx0XFx0XFx0cHJfaXVjdiA9IE5VTEw7XFxuMjMxMDpcXHRcXHR9XFxuMjMxMTpcXHRcXG4yMzEyOlxcdFxcdGVyciA9IHByb3RvX3JlZ2lzdGVyKFxcdTAwMjZpdWN2X3Byb3RvLCAwKTtcXG4yMzEzOlxcdFxcdGlmIChlcnIpXFxuMjMxNDpcXHRcXHRcXHRnb3RvIG91dDtcXG4yMzE1OlxcdFxcdGVyciA9IHNvY2tfcmVnaXN0ZXIoXFx1MDAyNml1Y3Zfc29ja19mYW1pbHlfb3BzKTtcXG4yMzE2OlxcdFxcdGlmIChlcnIpXFxuMjMxNzpcXHRcXHRcXHRnb3RvIG91dF9wcm90bztcXG4yMzE4OlxcdFxcbjIzMTk6XFx0XFx0aWYgKHByX2l1Y3YpIHtcXG4yMzIwOlxcdFxcdFxcdGVyciA9IHByX2l1Y3YtXFx1MDAzZWl1Y3ZfcmVnaXN0ZXIoXFx1MDAyNmFmX2l1Y3ZfaGFuZGxlciwgMCk7XFxuMjMyMTpcXHRcXHRcXHRpZiAoZXJyKVxcbjIzMjI6XFx0XFx0XFx0XFx0Z290byBvdXRfc29jaztcXG4yMzIzOlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTU6MDk6NDIuMjIyNzExNzczWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MjA5ODg0MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgYHByX2l1Y3ZgIFZhcmlhYmxlKipcblxuT2theSwgc28gaXQgbG9va3MgbGlrZSBgcHJfaXVjdmAgaXMgb25seSBwb3B1bGF0ZWQgaWYgdGhlIHN5c3RlbSdzIGEgVk0gKmFuZCogdGhlIElVQ1YgY29uZmlndXJhdGlvbiBpcyBlbmFibGVkLiBSaWdodCwgc28gYG1hY2hpbmVfaXNfdm0oKWAgd2lsbCB0ZWxsIG1lIGlmIHdlJ3JlIHJ1bm5pbmcgdW5kZXIgei9WTS4gSWYgd2UncmUgKm5vdCogdW5kZXIgei9WTSwgdGhlbiBgcHJfaXVjdmAgZ2V0cyBzZXQgdG8gYE5VTExgLlxuXG5UaGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZSBpczogaWYgYHByX2l1Y3ZgIGVuZHMgdXAgYmVpbmcgYE5VTExgLCBjYW4gYGl1Y3Zfc2V2ZXJfcGF0aGAgc3RpbGwgYmUgY2FsbGVkIGFuZCwgeW91IGtub3csIGFjdHVhbGx5ICpkbyogc29tZXRoaW5nPyBUaGlzIHNlZW1zIGxpa2UgYSBwb3RlbnRpYWwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIGlmIGl0IGlzbid0IGhhbmRsZWQgY29ycmVjdGx5LiBJIHNob3VsZCByZWFsbHkgZ28gYmFjayBhbmQgY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYGl1Y3Zfc2V2ZXJfcGF0aGAgYWdhaW4sIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBJdCB3b3VsZCBiZSBhbiBhbm5veWluZyBidWcsIG90aGVyd2lzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4MjcsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNTowOTo0Ni44NDM3MDQxMjdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxMTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzUsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMzU6XFx0c3RhdGljIHZvaWQgaXVjdl9zZXZlcl9wYXRoKHN0cnVjdCBzb2NrICpzaywgaW50IHdpdGhfdXNlcl9kYXRhKVxcbiAzMzY6XFx0e1xcbiAzMzc6XFx0XFx0dW5zaWduZWQgY2hhciB1c2VyX2RhdGFbMTZdO1xcbiAzMzg6XFx0XFx0c3RydWN0IGl1Y3Zfc29jayAqaXVjdiA9IGl1Y3Zfc2soc2spO1xcbiAzMzk6XFx0XFx0c3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCA9IGl1Y3YtXFx1MDAzZXBhdGg7XFxuIDM0MDpcXHRcXHRzdHJ1Y3Qgc29ja19tc2dfcSAqcCwgKm47XFxuIDM0MTpcXHRcXG4gMzQyOlxcdFxcdC8qIFdob2V2ZXIgcmVzZXRzIHRoZSBwYXRoIHBvaW50ZXIsIG11c3Qgc2V2ZXIgYW5kIGZyZWUgaXQuICovXFxuIDM0MzpcXHRcXHRpZiAoeGNoZyhcXHUwMDI2aXVjdi1cXHUwMDNlcGF0aCwgTlVMTCkpIHtcXG4gMzQ0OlxcdFxcdFxcdGlmICh3aXRoX3VzZXJfZGF0YSkge1xcbiAzNDU6XFx0XFx0XFx0XFx0bG93X25tY3B5KHVzZXJfZGF0YSwgaXVjdi1cXHUwMDNlc3JjX25hbWUpO1xcbiAzNDY6XFx0XFx0XFx0XFx0aGlnaF9ubWNweSh1c2VyX2RhdGEsIGl1Y3YtXFx1MDAzZWRzdF9uYW1lKTtcXG4gMzQ3OlxcdFxcdFxcdFxcdEFTQ0VCQyh1c2VyX2RhdGEsIHNpemVvZih1c2VyX2RhdGEpKTtcXG4gMzQ4OlxcdFxcdFxcdFxcdHByX2l1Y3YtXFx1MDAzZXBhdGhfc2V2ZXIocGF0aCwgdXNlcl9kYXRhKTtcXG4gMzQ5OlxcdFxcdFxcdH0gZWxzZVxcbiAzNTA6XFx0XFx0XFx0XFx0cHJfaXVjdi1cXHUwMDNlcGF0aF9zZXZlcihwYXRoLCBOVUxMKTtcXG4gMzUxOlxcdFxcdFxcdGl1Y3ZfcGF0aF9mcmVlKHBhdGgpO1xcbiAzNTI6XFx0XFxuIDM1MzpcXHRcXHRcXHQvKlxcbiAzNTQ6XFx0XFx0XFx0ICogTWVzc2FnZSBub3RpZmljYXRpb25zIHF1ZXVlZCBvbiBtZXNzYWdlX3Egc3RpbGwgcmVmZXJlbmNlXFxuIDM1NTpcXHRcXHRcXHQgKiB0aGUgbm93IGZyZWVkIHBhdGg7IGRyb3AgdGhlbSwgb3RoZXJ3aXNlIGEgbGF0ZXIgcmVjdm1zZygpXFxuIDM1NjpcXHRcXHRcXHQgKiB3b3VsZCBwYXNzIHRoZSBmcmVlZCBpdWN2X3BhdGggdG8gbWVzc2FnZV9yZWNlaXZlKCkgdmlhXFxuIDM1NzpcXHRcXHRcXHQgKiBpdWN2X3Byb2Nlc3NfbWVzc2FnZV9xKCkuXFxuIDM1ODpcXHRcXHRcXHQgKi9cXG4gMzU5OlxcdFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2aXVjdi1cXHUwMDNlbWVzc2FnZV9xLmxvY2spO1xcbiAzNjA6XFx0XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG4sIFxcdTAwMjZpdWN2LVxcdTAwM2VtZXNzYWdlX3EubGlzdCwgbGlzdCkge1xcbiAzNjE6XFx0XFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNnAtXFx1MDAzZWxpc3QpO1xcbiAzNjI6XFx0XFx0XFx0XFx0a2ZyZWUocCk7XFxuIDM2MzpcXHRcXHRcXHR9XFxuIDM2NDpcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aXVjdi1cXHUwMDNlbWVzc2FnZV9xLmxvY2spO1xcbiAzNjU6XFx0XFx0fVxcbiAzNjY6XFx0fVxcbiAzNjc6XFx0XFxuIDM2ODpcXHQvKiBTZW5kIGNvbnRyb2xsaW5nIGZsYWdzIHRocm91Z2ggYW4gSVVDViBzb2NrZXQgZm9yIEhJUEVSIHRyYW5zcG9ydCAqL1xcbiAzNjk6XFx0c3RhdGljIGludCBpdWN2X3NlbmRfY3RybChzdHJ1Y3Qgc29jayAqc2ssIHU4IGZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNTowOTo0Ni44NDM4OTc4MzdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDExNDEzNzQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBZGRyZXNzaW5nIGEgUG90ZW50aWFsIE51bGwgUG9pbnRlciBEZXJlZmVyZW5jZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgc2VlIGEgcG90ZW50aWFsIHByb2JsZW0uIElmIGBwcl9pdWN2YCBpcyBOVUxMLCB0aGVuIHRoZSBjb2RlIGlzIGdvaW5nIHRvIHRyeSBhbmQgZGVyZWZlcmVuY2UgYHByX2l1Y3YtXHUwMDNlcGF0aF9zZXZlcmAsIHdoaWNoIGlzIGEgY2xhc3NpYyByZWNpcGUgZm9yIGEgc2VnbWVudGF0aW9uIGZhdWx0LiBUaGF0J3MgYSBodWdlIHJlZCBmbGFnIVxuXG5Ib2xkIG9uLCBJIG5lZWQgdG8gdGhpbmsgdGhpcyB0aHJvdWdoIG1vcmUgY2FyZWZ1bGx5LiBJZiBgcHJfaXVjdmAgKmlzKiBOVUxMLCBjb3VsZCBgaXVjdi1cdTAwM2VwYXRoYCBzb21laG93IHN0aWxsIGJlIG5vbi1OVUxMPyBUaGF0J3MgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGhlcmUuIEkgbmVlZCB0byB0cmFjZSBiYWNrIHdoZXJlIGBpdWN2LVx1MDAzZXBhdGhgIGdldHMgc2V0LlxuXG5BbHJpZ2h0LCBhIHF1aWNrIHNjYW4gcmV2ZWFscyB0aGF0IGBpdWN2LVx1MDAzZXBhdGhgIGdldHMgc2V0IGluIGBhZml1Y3ZfcGF0aF9jb25uZWN0YCBhbmQgYWxzbyBpbiBgaXVjdl9jYWxsYmFja19jb25ucmVxYC4gT2theSwgZ29vZC4gTm93LCBJIHJlbWVtYmVyIHRoYXQgYGFmaXVjdl9wYXRoX2Nvbm5lY3RgIGdldHMgY2FsbGVkIGZyb20gYGl1Y3Zfc29ja19jb25uZWN0YC4gU28sIHRoZSBudWxsIGNoZWNrIG9mIGBwcl9pdWN2YCBuZWVkcyB0byBiZSB3YXRlcnRpZ2h0LCBhbmQgYWNjb3VudCBmb3IgdGhlc2UgcG9zc2libGUgY29kZSBwYXRocy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBgcHJfaXVjdmAgcG9pbnRlciBpcyBub3QgbnVsbCBiZWZvcmUgaXQgaXMgZGVyZWZlcmVuY2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjgwNSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE1OjA5OjUwLjk1ODAzOTc3MloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTI3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2l1Y3YvYWZfaXVjdi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDczMyxcbiAgXCJMaW5lQ291bnRcIjogNTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDczMzpcXHRzdGF0aWMgaW50IGl1Y3Zfc29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxcbiA3MzQ6XFx0XFx0XFx0XFx0ICAgICBpbnQgYWxlbiwgaW50IGZsYWdzKVxcbiA3MzU6XFx0e1xcbiA3MzY6XFx0XFx0REVDTEFSRV9TT0NLQUREUihzdHJ1Y3Qgc29ja2FkZHJfaXVjdiAqLCBzYSwgYWRkcik7XFxuIDczNzpcXHRcXHRzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLVxcdTAwM2VzaztcXG4gNzM4OlxcdFxcdHN0cnVjdCBpdWN2X3NvY2sgKml1Y3YgPSBpdWN2X3NrKHNrKTtcXG4gNzM5OlxcdFxcdGludCBlcnI7XFxuIDc0MDpcXHRcXG4gNzQxOlxcdFxcdGlmIChhbGVuIFxcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pdWN2KSB8fCBhZGRyLVxcdTAwM2VzYV9mYW1pbHkgIT0gQUZfSVVDVilcXG4gNzQyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA3NDM6XFx0XFxuIDc0NDpcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlICE9IElVQ1ZfT1BFTiBcXHUwMDI2XFx1MDAyNiBzay1cXHUwMDNlc2tfc3RhdGUgIT0gSVVDVl9CT1VORClcXG4gNzQ1OlxcdFxcdFxcdHJldHVybiAtRUJBREZEO1xcbiA3NDY6XFx0XFxuIDc0NzpcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IElVQ1ZfT1BFTiBcXHUwMDI2XFx1MDAyNlxcbiA3NDg6XFx0XFx0ICAgIGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSKVxcbiA3NDk6XFx0XFx0XFx0cmV0dXJuIC1FQkFERkQ7IC8qIGV4cGxpY2l0IGJpbmQgcmVxdWlyZWQgKi9cXG4gNzUwOlxcdFxcbiA3NTE6XFx0XFx0aWYgKHNrLVxcdTAwM2Vza190eXBlICE9IFNPQ0tfU1RSRUFNIFxcdTAwMjZcXHUwMDI2IHNrLVxcdTAwM2Vza190eXBlICE9IFNPQ0tfU0VRUEFDS0VUKVxcbiA3NTI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDc1MzpcXHRcXG4gNzU0OlxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gSVVDVl9PUEVOKSB7XFxuIDc1NTpcXHRcXHRcXHRlcnIgPSBpdWN2X3NvY2tfYXV0b2JpbmQoc2spO1xcbiA3NTY6XFx0XFx0XFx0aWYgKHVubGlrZWx5KGVycikpXFxuIDc1NzpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA3NTg6XFx0XFx0fVxcbiA3NTk6XFx0XFxuIDc2MDpcXHRcXHRsb2NrX3NvY2soc2spO1xcbiA3NjE6XFx0XFxuIDc2MjpcXHRcXHQvKiBTZXQgdGhlIGRlc3RpbmF0aW9uIGluZm9ybWF0aW9uICovXFxuIDc2MzpcXHRcXHRtZW1jcHkoaXVjdi1cXHUwMDNlZHN0X3VzZXJfaWQsIHNhLVxcdTAwM2VzaXVjdl91c2VyX2lkLCA4KTtcXG4gNzY0OlxcdFxcdG1lbWNweShpdWN2LVxcdTAwM2Vkc3RfbmFtZSwgc2EtXFx1MDAzZXNpdWN2X25hbWUsIDgpO1xcbiA3NjU6XFx0XFxuIDc2NjpcXHRcXHRpZiAoaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIpXFxuIDc2NzpcXHRcXHRcXHRlcnIgPSBpdWN2X3NlbmRfY3RybChzb2NrLVxcdTAwM2VzaywgQUZfSVVDVl9GTEFHX1NZTik7XFxuIDc2ODpcXHRcXHRlbHNlXFxuIDc2OTpcXHRcXHRcXHRlcnIgPSBhZml1Y3ZfcGF0aF9jb25uZWN0KHNvY2ssIGFkZHIpO1xcbiA3NzA6XFx0XFx0aWYgKGVycilcXG4gNzcxOlxcdFxcdFxcdGdvdG8gZG9uZTtcXG4gNzcyOlxcdFxcbiA3NzM6XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSAhPSBJVUNWX0NPTk5FQ1RFRClcXG4gNzc0OlxcdFxcdFxcdGVyciA9IGl1Y3Zfc29ja193YWl0KHNrLCBpdWN2X3NvY2tfaW5fc3RhdGUoc2ssIElVQ1ZfQ09OTkVDVEVELFxcbiA3NzU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIElVQ1ZfRElTQ09OTiksXFxuIDc3NjpcXHRcXHRcXHRcXHRcXHQgICAgIHNvY2tfc25kdGltZW8oc2ssIGZsYWdzIFxcdTAwMjYgT19OT05CTE9DSykpO1xcbiA3Nzc6XFx0XFxuIDc3ODpcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IElVQ1ZfRElTQ09OTiB8fCBzay1cXHUwMDNlc2tfc3RhdGUgPT0gSVVDVl9DTE9TRUQpXFxuIDc3OTpcXHRcXHRcXHRlcnIgPSAtRUNPTk5SRUZVU0VEO1xcbiA3ODA6XFx0XFxuIDc4MTpcXHRcXHRpZiAoZXJyIFxcdTAwMjZcXHUwMDI2IGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1YpXFxuIDc4MjpcXHRcXHRcXHRpdWN2X3NldmVyX3BhdGgoc2ssIDApO1xcbiA3ODM6XFx0XFxuIDc4NDpcXHRkb25lOlxcbiA3ODU6XFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4gNzg2OlxcdFxcdHJldHVybiBlcnI7XFxuIDc4NzpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE1OjA5OjUwLjk1ODIzNDg0MloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjczNjA4MDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCBjb2RlIHNuaXBwZXQsIGRlbGl2ZXJlZCBhcyBpZiBpdCdzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGVjb2RpbmcgdGhlIElVQ1YgVHJhbnNwb3J0IExvZ2ljKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgc2VjdGlvbiwgYW5kIG15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYGl1Y3YtXHUwMDNldHJhbnNwb3J0YCB2YXJpYWJsZS4gSSBzZWUgdGhhdCBpZiB0aGlzIHBhcnRpY3VsYXIgdmFsdWUgaXMgZXF1YWwgdG8gYEFGX0lVQ1ZfVFJBTlNfSVVDVmAsIGl0IHRyaWdnZXJzIGEgY2FsbCB0byBgYWZpdWN2X3BhdGhfY29ubmVjdGAgKmFuZCogYGl1Y3Zfc2V2ZXJfcGF0aGAuIFRoYXQncyBpbnRlcmVzdGluZywgdGhlcmUgaXMgY29ubmVjdGlvbiwgYW5kIHRoZW4gc2V2ZXJpbmcuIENsZWFybHksIHRoaXMgaXMgdGllZCB0byB0aGUgSVVDViB0cmFuc3BvcnQgcGF0aC5cblxuVGhlIGNydWNpYWwgcXVlc3Rpb24gYmVjb21lczogKldoZW4qIGlzIGBpdWN2LVx1MDAzZXRyYW5zcG9ydGAgYWN0dWFsbHkgc2V0IHRvIGBBRl9JVUNWX1RSQU5TX0lVQ1ZgPyBXaGF0IGFyZSB0aGUgY29uZGl0aW9ucyB0aGF0IGxlYWQgdG8gdGhpcyBzcGVjaWZpYyB0cmFuc3BvcnQgbWV0aG9kIGJlaW5nIHNlbGVjdGVkPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcHJlY2VkaW5nIGxvZ2ljLCB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZSBgaXVjdmAgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIGFuZCBoYW5kbGluZywgdG8gc2VlIHdoYXQgZGljdGF0ZXMgdGhpcyBjaG9pY2UuIFRoaXMgaXMgdGhlIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbiB0aGF0IHVubG9ja3MgaG93IHRoaXMgcGFydGljdWxhciBjb25uZWN0aW9uIGN5Y2xlIG9wZXJhdGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDE1NiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTU6MDk6NTYuNjMxODQ2NDkyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODMzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDY2LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDY2OlxcdHN0YXRpYyBzdHJ1Y3Qgc29jayAqaXVjdl9zb2NrX2FsbG9jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90bywgZ2ZwX3QgcHJpbywgaW50IGtlcm4pXFxuIDQ2NzpcXHR7XFxuIDQ2ODpcXHRcXHRzdHJ1Y3Qgc29jayAqc2s7XFxuIDQ2OTpcXHRcXHRzdHJ1Y3QgaXVjdl9zb2NrICppdWN2O1xcbiA0NzA6XFx0XFxuIDQ3MTpcXHRcXHRzayA9IHNrX2FsbG9jKFxcdTAwMjZpbml0X25ldCwgUEZfSVVDViwgcHJpbywgXFx1MDAyNml1Y3ZfcHJvdG8sIGtlcm4pO1xcbiA0NzI6XFx0XFx0aWYgKCFzaylcXG4gNDczOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA0NzQ6XFx0XFx0aXVjdiA9IGl1Y3Zfc2soc2spO1xcbiA0NzU6XFx0XFxuIDQ3NjpcXHRcXHRzb2NrX2luaXRfZGF0YShzb2NrLCBzayk7XFxuIDQ3NzpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2aXVjdi1cXHUwMDNlYWNjZXB0X3EpO1xcbiA0Nzg6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNml1Y3YtXFx1MDAzZWFjY2VwdF9xX2xvY2spO1xcbiA0Nzk6XFx0XFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2aXVjdi1cXHUwMDNlc2VuZF9za2JfcSk7XFxuIDQ4MDpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2aXVjdi1cXHUwMDNlbWVzc2FnZV9xLmxpc3QpO1xcbiA0ODE6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNml1Y3YtXFx1MDAzZW1lc3NhZ2VfcS5sb2NrKTtcXG4gNDgyOlxcdFxcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNml1Y3YtXFx1MDAzZWJhY2tsb2dfc2tiX3EpO1xcbiA0ODM6XFx0XFx0aXVjdi1cXHUwMDNlc2VuZF90YWcgPSAwO1xcbiA0ODQ6XFx0XFx0YXRvbWljX3NldChcXHUwMDI2aXVjdi1cXHUwMDNlcGVuZGluZ3MsIDApO1xcbiA0ODU6XFx0XFx0aXVjdi1cXHUwMDNlZmxhZ3MgPSAwO1xcbiA0ODY6XFx0XFx0aXVjdi1cXHUwMDNlbXNnbGltaXQgPSAwO1xcbiA0ODc6XFx0XFx0YXRvbWljX3NldChcXHUwMDI2aXVjdi1cXHUwMDNlc2tic19pbl94bWl0LCAwKTtcXG4gNDg4OlxcdFxcdGF0b21pY19zZXQoXFx1MDAyNml1Y3YtXFx1MDAzZW1zZ19zZW50LCAwKTtcXG4gNDg5OlxcdFxcdGF0b21pY19zZXQoXFx1MDAyNml1Y3YtXFx1MDAzZW1zZ19yZWN2LCAwKTtcXG4gNDkwOlxcdFxcdGl1Y3YtXFx1MDAzZXBhdGggPSBOVUxMO1xcbiA0OTE6XFx0XFx0aXVjdi1cXHUwMDNlc2tfdHhub3RpZnkgPSBhZml1Y3ZfaHNfY2FsbGJhY2tfdHhub3RpZnk7XFxuIDQ5MjpcXHRcXHRtZW1zZXQoXFx1MDAyNml1Y3YtXFx1MDAzZWluaXQsIDAsIHNpemVvZihpdWN2LVxcdTAwM2Vpbml0KSk7XFxuIDQ5MzpcXHRcXHRpZiAocHJfaXVjdilcXG4gNDk0OlxcdFxcdFxcdGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcXG4gNDk1OlxcdFxcdGVsc2VcXG4gNDk2OlxcdFxcdFxcdGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSElQRVI7XFxuIDQ5NzpcXHRcXG4gNDk4OlxcdFxcdHNrLVxcdTAwM2Vza19kZXN0cnVjdCA9IGl1Y3Zfc29ja19kZXN0cnVjdDtcXG4gNDk5OlxcdFxcdHNrLVxcdTAwM2Vza19zbmR0aW1lbyA9IElVQ1ZfQ09OTl9USU1FT1VUO1xcbiA1MDA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE1OjA5OjU2LjYzMjA0NzEwMVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjMzOTE1OTQxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSVVDViBUcmFuc3BvcnQgYW5kIFBhdGggTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgaXQncyBiZWNvbWluZyBjbGVhciBob3cgdGhlIGBpdWN2LVx1MDAzZXRyYW5zcG9ydGAgZmllbGQgYmVoYXZlcyBpbiByZWxhdGlvbiB0byBgcHJfaXVjdmAuIFJpZ2h0LCBzbyBpZiBgcHJfaXVjdmAgKmlzbid0KiBzZXQsIHRoZW4gYGl1Y3YtXHUwMDNldHJhbnNwb3J0YCBkZWZhdWx0cyB0byBgQUZfSVVDVl9UUkFOU19ISVBFUmAsIGFuZCBub3QgYEFGX0lVQ1ZfVFJBTlNfSVVDVmAuIFRoYXQncyB0aGUgY3J1eCBvZiBpdC4gV2hlbiBpdOKAmXMgYEhJUEVSYCwgYGFmaXVjdl9wYXRoX2Nvbm5lY3RgIGlzbuKAmXQgZXZlbiBpbnZva2VkLiBXaGljaCBleHBsYWlucyB3aHkgYGl1Y3YtXHUwMDNlcGF0aGAgcmVtYWlucyBOVUxMIGluIHRoYXQgc2NlbmFyaW8uIE1ha2VzIHNlbnNlLlxuXG5BbmQgYmVjYXVzZSBgaXVjdi1cdTAwM2VwYXRoYCBpcyBOVUxMIGluIHRoaXMgSElQRVIgY2FzZSwgYGl1Y3Zfc2V2ZXJfcGF0aGAgZWZmZWN0aXZlbHkgZG9lcyBub3RoaW5nIOKAkyBgeGNoZyhcdTAwMjZpdWN2LVx1MDAzZXBhdGgsIE5VTEwpYCBqdXN0IHJldHVybnMgTlVMTC4gR29vZCwgc28gd2UncmUgYXZvaWRpbmcgYW55IHBvdGVudGlhbCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb24gYHByX2l1Y3ZgLCBhcyBsb25nIGFzIGl0J3MgbnVsbCBpbiB0aGlzIGNhc2UuXG5cbkhtbSwgYnV0IGhlcmUncyBhIHRob3VnaHQuLi4gQ2FuIHdlIHZlcmlmeSB0aGUgYmVoYXZpb3Igb2YgYGl1Y3Zfc2V2ZXJfcGF0aGAgZGlyZWN0bHkgd2l0aCBgQUZfSVVDVl9UUkFOU19ISVBFUmA/IExldCBtZSBzZWUuIFNpbmNlIHRoZSBgaXVjdi1cdTAwM2VwYXRoYCBwb2ludGVyIGlzIG5ldmVyIGFsbG9jYXRlZCB3aXRoIGBISVBFUmAsIGBpdWN2X3NldmVyX3BhdGhgICpzaG91bGQqIGJlIGEgbm8tb3AuIEJ1dCB3YWl0LCBpcyB0aGVyZSBhbnkgc2l0dWF0aW9uIHdoZXJlIGBpdWN2LVx1MDAzZXBhdGhgICppcyogYWxsb2NhdGVkIGZvciBgQUZfSVVDVl9UUkFOU19ISVBFUmA/IEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayBpZiBpdCdzIHVzZWQgYXQgYWxsIHdpdGggSElQRVIsIGp1c3QgdG8gYmUgc3VyZS4gSXQgd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLCB0byBlbnN1cmUgd2UgYXJlIGNvdmVyaW5nIGFsbCBjYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxNzksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNToxMDoxMi45NzEyMDg3NTNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNTUxNTMxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpdWN2LVxcdTAwM2VwYXRoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmM9MTY2PXN0YXRpYyBpbmxpbmUgaW50IGl1Y3ZfYmVsb3dfbXNnbGltKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNzItXFx0aWYgKGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1YpXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE3MzpcXHRcXHRyZXR1cm4gKGF0b21pY19yZWFkKFxcdTAwMjZpdWN2LVxcdTAwM2Vza2JzX2luX3htaXQpIFxcdTAwM2MgaXVjdi1cXHUwMDNlcGF0aC1cXHUwMDNlbXNnbGltKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTc0LVxcdGVsc2VcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0zMzU9c3RhdGljIHZvaWQgaXVjdl9zZXZlcl9wYXRoKHN0cnVjdCBzb2NrICpzaywgaW50IHdpdGhfdXNlcl9kYXRhKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTMzOC1cXHRzdHJ1Y3QgaXVjdl9zb2NrICppdWN2ID0gaXVjdl9zayhzayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjMzOTpcXHRzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoID0gaXVjdi1cXHUwMDNlcGF0aDtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzQwLVxcdHN0cnVjdCBzb2NrX21zZ19xICpwLCAqbjtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNDItXFx0LyogV2hvZXZlciByZXNldHMgdGhlIHBhdGggcG9pbnRlciwgbXVzdCBzZXZlciBhbmQgZnJlZSBpdC4gKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MzQzOlxcdGlmICh4Y2hnKFxcdTAwMjZpdWN2LVxcdTAwM2VwYXRoLCBOVUxMKSkge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNDQtXFx0XFx0aWYgKHdpdGhfdXNlcl9kYXRhKSB7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzQ3LVxcdFxcdFxcdEFTQ0VCQyh1c2VyX2RhdGEsIHNpemVvZih1c2VyX2RhdGEpKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MzQ4OlxcdFxcdFxcdHByX2l1Y3YtXFx1MDAzZXBhdGhfc2V2ZXIocGF0aCwgdXNlcl9kYXRhKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzQ5LVxcdFxcdH0gZWxzZVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzozNTA6XFx0XFx0XFx0cHJfaXVjdi1cXHUwMDNlcGF0aF9zZXZlcihwYXRoLCBOVUxMKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzUxLVxcdFxcdGl1Y3ZfcGF0aF9mcmVlKHBhdGgpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTQ2Nj1zdGF0aWMgc3RydWN0IHNvY2sgKml1Y3Zfc29ja19hbGxvYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG8sIGdmcF90IHByaW8sIGludCBrZXJuKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ4OS1cXHRhdG9taWNfc2V0KFxcdTAwMjZpdWN2LVxcdTAwM2Vtc2dfcmVjdiwgMCk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjQ5MDpcXHRpdWN2LVxcdTAwM2VwYXRoID0gTlVMTDtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDkxLVxcdGl1Y3YtXFx1MDAzZXNrX3R4bm90aWZ5ID0gYWZpdWN2X2hzX2NhbGxiYWNrX3R4bm90aWZ5O1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTU4Mj1zdGF0aWMgaW50IGl1Y3Zfc29ja19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTYwOS1cXHR9XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjYxMDpcXHRpZiAoaXVjdi1cXHUwMDNlcGF0aClcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjExLVxcdFxcdGdvdG8gZG9uZV91bmxvY2s7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9Njg3PXN0YXRpYyBpbnQgYWZpdWN2X3BhdGhfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy02OTktXFx0LyogQ3JlYXRlIHBhdGguICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjcwMDpcXHRpdWN2LVxcdTAwM2VwYXRoID0gaXVjdl9wYXRoX2FsbG9jKGl1Y3YtXFx1MDAzZW1zZ2xpbWl0LFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03MDEtXFx0XFx0XFx0XFx0ICAgICBJVUNWX0lQUk1EQVRBLCBHRlBfS0VSTkVMKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6NzAyOlxcdGlmICghaXVjdi1cXHUwMDNlcGF0aCkge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy03MDMtXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03MDUtXFx0fVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo3MDY6XFx0ZXJyID0gcHJfaXVjdi1cXHUwMDNlcGF0aF9jb25uZWN0KGl1Y3YtXFx1MDAzZXBhdGgsIFxcdTAwMjZhZl9pdWN2X2hhbmRsZXIsXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTcwNy1cXHRcXHRcXHRcXHQgICAgc2EtXFx1MDAzZXNpdWN2X3VzZXJfaWQsIE5VTEwsIHVzZXJfZGF0YSxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03MDktXFx0aWYgKGVycikge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzo3MTA6XFx0XFx0aXVjdl9wYXRoX2ZyZWUoaXVjdi1cXHUwMDNlcGF0aCk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjcxMTpcXHRcXHRpdWN2LVxcdTAwM2VwYXRoID0gTlVMTDtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzEyLVxcdFxcdHN3aXRjaCAoZXJyKSB7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9OTE2PXN0YXRpYyBpbnQgaXVjdl9zb2NrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNTQtXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjEwNTU6XFx0XFx0aWYgKCgoaXVjdi1cXHUwMDNlcGF0aC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJVUNWX0lQUk1EQVRBKSBcXHUwMDI2IGl1Y3YtXFx1MDAzZWZsYWdzKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDU2LVxcdFxcdCAgICBza2ItXFx1MDAzZWxlbiBcXHUwMDNjPSA3KSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjEwNTc6XFx0XFx0XFx0ZXJyID0gaXVjdl9zZW5kX2lwcm0oaXVjdi1cXHUwMDNlcGF0aCwgXFx1MDAyNnR4bXNnLCBza2IpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDU4LVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNjktXFx0XFx0XFx0aWYgKGVyciA9PSAweDE1KSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjEwNzA6XFx0XFx0XFx0XFx0cHJfaXVjdi1cXHUwMDNlcGF0aF9zZXZlcihpdWN2LVxcdTAwM2VwYXRoLCBOVUxMKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA3MS1cXHRcXHRcXHRcXHRhdG9taWNfZGVjKFxcdTAwMjZpdWN2LVxcdTAwM2Vza2JzX2luX3htaXQpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwODgtXFx0XFx0XFx0fVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMDg5OlxcdFxcdFxcdGVyciA9IHByX2l1Y3YtXFx1MDAzZW1lc3NhZ2Vfc2VuZChpdWN2LVxcdTAwM2VwYXRoLCBcXHUwMDI2dHhtc2csXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwOTAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIElVQ1ZfSVBCVUZMU1QsIDAsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA5Mi1cXHRcXHR9IGVsc2UgeyAvKiBub24tSVBSTSBMaW5lYXIgc2tiICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjEwOTM6XFx0XFx0XFx0ZXJyID0gcHJfaXVjdi1cXHUwMDNlbWVzc2FnZV9zZW5kKGl1Y3YtXFx1MDAzZXBhdGgsIFxcdTAwMjZ0eG1zZyxcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA5NC1cXHRcXHRcXHRcXHRcXHQwLCAwLCAodm9pZCAqKXNrYi1cXHUwMDNlZGF0YSwgc2tiLVxcdTAwM2VsZW4pO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTE0MTg9c3RhdGljIGludCBpdWN2X3NvY2tfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGhvdylcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDQ2LVxcdFxcdFxcdHR4bXNnLnRhZyA9IDA7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE0NDc6XFx0XFx0XFx0ZXJyID0gcHJfaXVjdi1cXHUwMDNlbWVzc2FnZV9zZW5kKGl1Y3YtXFx1MDAzZXBhdGgsIFxcdTAwMjZ0eG1zZyxcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ0OC1cXHRcXHRcXHRcXHRJVUNWX0lQUk1EQVRBLCAwLCAodm9pZCAqKSBpcHJtX3NodXRkb3duLCA4KTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDY4LVxcdFxcdGlmICgoaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVikgXFx1MDAyNlxcdTAwMjZcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ2OTpcXHRcXHQgICAgaXVjdi1cXHUwMDNlcGF0aCkge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNDcwOlxcdFxcdFxcdGVyciA9IHByX2l1Y3YtXFx1MDAzZXBhdGhfcXVpZXNjZShpdWN2LVxcdTAwM2VwYXRoLCBOVUxMKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ3MS1cXHRcXHRcXHRpZiAoZXJyKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTE1NTI9c3RhdGljIGludCBpdWN2X3NvY2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE1NzYtXFx0Y2FzZSBTT19NU0dMSU1JVDpcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTU3NzpcXHRcXHR2YWwgPSAoaXVjdi1cXHUwMDNlcGF0aCAhPSBOVUxMKSA/IGl1Y3YtXFx1MDAzZXBhdGgtXFx1MDAzZW1zZ2xpbVxcdC8qIGNvbm5lY3RlZCAqL1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNTc4LVxcdFxcdFxcdFxcdFxcdCAgIDogaXVjdi1cXHUwMDNlbXNnbGltaXQ7XFx0LyogZGVmYXVsdCAqL1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTE2MDc9c3RhdGljIGludCBpdWN2X2NhbGxiYWNrX2Nvbm5yZXEoc3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjQ0LVxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgIT0gSVVDVl9MSVNURU4pIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTY0NTpcXHRcXHRlcnIgPSBwcl9pdWN2LVxcdTAwM2VwYXRoX3NldmVyKHBhdGgsIHVzZXJfZGF0YSk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NDYtXFx0XFx0aXVjdl9wYXRoX2ZyZWUocGF0aCk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY1MS1cXHRpZiAoc2tfYWNjZXB0cV9pc19mdWxsKHNrKSkge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjUyOlxcdFxcdGVyciA9IHByX2l1Y3YtXFx1MDAzZXBhdGhfc2V2ZXIocGF0aCwgdXNlcl9kYXRhKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY1My1cXHRcXHRpdWN2X3BhdGhfZnJlZShwYXRoKTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjU5LVxcdGlmICghbnNrKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE2NjA6XFx0XFx0ZXJyID0gcHJfaXVjdi1cXHUwMDNlcGF0aF9zZXZlcihwYXRoLCB1c2VyX2RhdGEpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjYxLVxcdFxcdGl1Y3ZfcGF0aF9mcmVlKHBhdGgpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NzUtXFx0bWVtY3B5KG5pdWN2LVxcdTAwM2VzcmNfdXNlcl9pZCwgaXVjdi1cXHUwMDNlc3JjX3VzZXJfaWQsIDgpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjc2OlxcdG5pdWN2LVxcdTAwM2VwYXRoID0gcGF0aDtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY3Ny1cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjg1LVxcdHBhdGgtXFx1MDAzZW1zZ2xpbSA9IGl1Y3YtXFx1MDAzZW1zZ2xpbWl0O1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjg2OlxcdGVyciA9IHByX2l1Y3YtXFx1MDAzZXBhdGhfYWNjZXB0KHBhdGgsIFxcdTAwMjZhZl9pdWN2X2hhbmRsZXIsIG51c2VyX2RhdGEsIG5zayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2ODctXFx0aWYgKGVycikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNToxMDoxMy4yNzY3MjkxODJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA2OTE2ODQ0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElVQ1YgUGF0aCBMb2dpYyoqXG5cbk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYGl1Y3YtXHUwMDNlcGF0aGAgaXMgKm9ubHkqIHVzZWQgd2hlbiB0aGUgdHJhbnNwb3J0IHR5cGUgaXMgYEFGX0lVQ1ZfVFJBTlNfSVVDVmAuIFRoaXMgaXMgdGhlIGNydXggb2YgdGhlIGlzc3VlLiBJZiB3ZSdyZSAqbm90KiBvbiB6L1ZNLCB0aGVuIHRoZSBwb2ludGVyIGBwcl9pdWN2YCBpcyBudWxsLCB0aGUgYGl1Y3YtXHUwMDNldHJhbnNwb3J0YCBpcyBzZXQgdG8gYEFGX0lVQ1ZfVFJBTlNfSElQRVJgLCBhbmQgYGl1Y3YtXHUwMDNlcGF0aGAgbmV2ZXIgZ2V0cyBhbGxvY2F0ZWQgaW4gdGhlIGZpcnN0IHBsYWNlLlxuXG5XYWl0IGEgc2Vjb25k4oCmIGlmIGBpdWN2LVx1MDAzZXBhdGhgIGlzICpuZXZlciogYWxsb2NhdGVkIHdoZW4gdGhlIHRyYW5zcG9ydCBpcyBISVBFUiwgdGhlbiB0aGUgZnVuY3Rpb24gYGl1Y3Zfc2V2ZXJfcGF0aGAgd29u4oCZdCBhY3R1YWxseSBkbyBhbnl0aGluZyBiZWNhdXNlIHRoZSBgeGNoZyhcdTAwMjZpdWN2LVx1MDAzZXBhdGgsIE5VTEwpYCBjYWxsIHdpbGwgYWx3YXlzIGp1c3QgcmV0dXJuIGBOVUxMYC4gVGhlcmVmb3JlLCB0aGF0IG1vZGlmaWVkIGNvZGUgd2l0aGluIGBpdWN2X3NldmVyX3BhdGhgIHdpbGwgKm5ldmVyKiBnZXQgZXhlY3V0ZWQgdW5sZXNzIHRoZSBzeXN0ZW0gaXMgcnVubmluZyBvbiB6L1ZNLlxuXG5JcyBteSBsaW5lIG9mIHJlYXNvbmluZyBzb3VuZD8gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy5cblxuQWxyaWdodCwgbGV0J3MgZG91YmxlLWNoZWNrIGlmIGBpdWN2LVx1MDAzZXBhdGhgICpjYW4qIGJlIHNldCBmb3IgYEFGX0lVQ1ZfVFJBTlNfSElQRVJgLiBJ4oCZbGwgbG9vayBhdCBgbmV0L2l1Y3YvYWZfaXVjdi5jYC4gUmlnaHQsIGBhZml1Y3ZfcGF0aF9jb25uZWN0YCBpcyBvbmx5IGNhbGxlZCB3aGVuIGBpdWN2LVx1MDAzZXRyYW5zcG9ydGAgaXMgKm5vdCogYEFGX0lVQ1ZfVFJBTlNfSElQRVJgLiBTbyBpdCBzZWVtcyBoaWdobHkgdW5saWtlbHkuIE5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBpdWN2X3NlbmRfY3RybGAsIHNpbmNlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBISVBFUi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3MjIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTU6MTA6MjAuMzQ1OTAwNTA3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMTExMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzY4LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzY4OlxcdC8qIFNlbmQgY29udHJvbGxpbmcgZmxhZ3MgdGhyb3VnaCBhbiBJVUNWIHNvY2tldCBmb3IgSElQRVIgdHJhbnNwb3J0ICovXFxuIDM2OTpcXHRzdGF0aWMgaW50IGl1Y3Zfc2VuZF9jdHJsKHN0cnVjdCBzb2NrICpzaywgdTggZmxhZ3MpXFxuIDM3MDpcXHR7XFxuIDM3MTpcXHRcXHRzdHJ1Y3QgaXVjdl9zb2NrICppdWN2ID0gaXVjdl9zayhzayk7XFxuIDM3MjpcXHRcXHRpbnQgZXJyID0gMDtcXG4gMzczOlxcdFxcdGludCBibGVuO1xcbiAzNzQ6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gMzc1OlxcdFxcdHU4IHNodXRkb3duID0gMDtcXG4gMzc2OlxcdFxcbiAzNzc6XFx0XFx0YmxlbiA9IHNpemVvZihzdHJ1Y3QgYWZfaXVjdl90cmFuc19oZHIpICtcXG4gMzc4OlxcdFxcdCAgICAgICBMTF9SRVNFUlZFRF9TUEFDRShpdWN2LVxcdTAwM2Voc19kZXYpO1xcbiAzNzk6XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19zaHV0ZG93biBcXHUwMDI2IFNFTkRfU0hVVERPV04pIHtcXG4gMzgwOlxcdFxcdFxcdC8qIGNvbnRyb2xsaW5nIGZsYWdzIHNob3VsZCBiZSBzZW50IGFueXdheSAqL1xcbiAzODE6XFx0XFx0XFx0c2h1dGRvd24gPSBzay1cXHUwMDNlc2tfc2h1dGRvd247XFxuIDM4MjpcXHRcXHRcXHRzay1cXHUwMDNlc2tfc2h1dGRvd24gXFx1MDAyNj0gUkNWX1NIVVRET1dOO1xcbiAzODM6XFx0XFx0fVxcbiAzODQ6XFx0XFx0c2tiID0gc29ja19hbGxvY19zZW5kX3NrYihzaywgYmxlbiwgMSwgXFx1MDAyNmVycik7XFxuIDM4NTpcXHRcXHRpZiAoc2tiKSB7XFxuIDM4NjpcXHRcXHRcXHRza2JfcmVzZXJ2ZShza2IsIGJsZW4pO1xcbiAzODc6XFx0XFx0XFx0ZXJyID0gYWZpdWN2X2hzX3NlbmQoTlVMTCwgc2ssIHNrYiwgZmxhZ3MpO1xcbiAzODg6XFx0XFx0fVxcbiAzODk6XFx0XFx0aWYgKHNodXRkb3duKVxcbiAzOTA6XFx0XFx0XFx0c2stXFx1MDAzZXNrX3NodXRkb3duID0gc2h1dGRvd247XFxuIDM5MTpcXHRcXHRyZXR1cm4gZXJyO1xcbiAzOTI6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNToxMDoyMC4zNDYyMjQyMTdaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDExMzAyNjU2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBISVBFUiBJc3N1ZSoqXG5cbk9rYXksIHNvIEkgc2VlIGEgY2FsbCB0byBgYWZpdWN2X2hzX3NlbmRgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIEhJUEVSLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4gRmlyc3QsIEkgaGF2ZSBhIGh1bmNoLCBhIG5hZ2dpbmcgcXVlc3Rpb24sIHJlYWxseTogSXMgYGl1Y3YtXHUwMDNlcGF0aGAgYWN0dWFsbHkgYmVpbmcgc2V0IGNvcnJlY3RseSBpbiB0aGUgY29udGV4dCBvZiBISVBFUiBvcGVyYXRpb25zPyBUaGF0J3MgYSBjbGFzc2ljIGdvdGNoYS4gVGhlIHBhdGggaW5pdGlhbGl6YXRpb24gaXMgY3J1Y2lhbC4gSXTigJlzIHRoZSBvYnZpb3VzIGZpcnN0IHN0ZXAgb2YgdHJvdWJsZXNob290aW5nIHRoaXMuXG5cblRoZXJlZm9yZSwgSSdtIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBgYWZpdWN2X2hzX3NlbmRgIGZ1bmN0aW9uIGl0c2VsZiwgb3IgcGVyaGFwcyByZWxhdGVkIEhJUEVSIGZ1bmN0aW9ucy4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgYW5kIGhvdyBpdCBoYW5kbGVzIHRoZSBJVUNWIHBhdGggc3RydWN0dXJlcy4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBvciBub3QgdGhpcyBjcml0aWNhbCBmaWVsZCBpcyBiZWluZyBwcm9wZXJseSBwb3B1bGF0ZWQuIFRoYXTigJlzIHdoZXJlIEknbGwgYmVnaW4sIGxvb2tpbmcgZm9yIGluaXRpYWxpemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTc5NCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTU6MTA6MjQuNDU5MjU0NTIzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTE1MjYwOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXVjdi1cXHUwMDNlcGF0aCA9XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmM9NDY2PXN0YXRpYyBzdHJ1Y3Qgc29jayAqaXVjdl9zb2NrX2FsbG9jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90bywgZ2ZwX3QgcHJpbywgaW50IGtlcm4pXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDg5LVxcdGF0b21pY19zZXQoXFx1MDAyNml1Y3YtXFx1MDAzZW1zZ19yZWN2LCAwKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6NDkwOlxcdGl1Y3YtXFx1MDAzZXBhdGggPSBOVUxMO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OTEtXFx0aXVjdi1cXHUwMDNlc2tfdHhub3RpZnkgPSBhZml1Y3ZfaHNfY2FsbGJhY2tfdHhub3RpZnk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9Njg3PXN0YXRpYyBpbnQgYWZpdWN2X3BhdGhfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy02OTktXFx0LyogQ3JlYXRlIHBhdGguICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjcwMDpcXHRpdWN2LVxcdTAwM2VwYXRoID0gaXVjdl9wYXRoX2FsbG9jKGl1Y3YtXFx1MDAzZW1zZ2xpbWl0LFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03MDEtXFx0XFx0XFx0XFx0ICAgICBJVUNWX0lQUk1EQVRBLCBHRlBfS0VSTkVMKTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03MTAtXFx0XFx0aXVjdl9wYXRoX2ZyZWUoaXVjdi1cXHUwMDNlcGF0aCk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjcxMTpcXHRcXHRpdWN2LVxcdTAwM2VwYXRoID0gTlVMTDtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzEyLVxcdFxcdHN3aXRjaCAoZXJyKSB7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTYwNz1zdGF0aWMgaW50IGl1Y3ZfY2FsbGJhY2tfY29ubnJlcShzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NzUtXFx0bWVtY3B5KG5pdWN2LVxcdTAwM2VzcmNfdXNlcl9pZCwgaXVjdi1cXHUwMDNlc3JjX3VzZXJfaWQsIDgpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjc2OlxcdG5pdWN2LVxcdTAwM2VwYXRoID0gcGF0aDtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY3Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTU6MTA6MjQuNzcwNzg1NjUyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExOTkzODI4MTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSVVDViBQYXRoIElzc3VlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgYGl1Y3YtXHUwMDNlcGF0aGAgaXMgdGhlIGN1bHByaXQsIGJ1dCB3aGVyZSBpcyBpdCBzZXQ/IFRoZSBjb2RlIHNob3dzIGl0J3Mgb25seSBhc3NpZ25lZCB3aXRoaW4gYGFmaXVjdl9wYXRoX2Nvbm5lY3RgIGFuZCBgaXVjdl9jYWxsYmFja19jb25ucmVxYC4gQ3J1Y2lhbGx5LCBib3RoIGFyZSB0cmlnZ2VyZWQgb25seSB3aGVuIGRlYWxpbmcgd2l0aCBgQUZfSVVDVl9UUkFOU19JVUNWYCBjb25uZWN0aW9ucy4gTm93LCBgaXVjdl9jYWxsYmFja19jb25ucmVxYCBpcyByZWdpc3RlcmVkIGFzIGEgY2FsbGJhY2sgdmlhIGBwcl9pdWN2LVx1MDAzZWl1Y3ZfcmVnaXN0ZXJgLiBJZiBgcHJfaXVjdmAgaXMgYE5VTExgLCB0aGVuIGBpdWN2X2NhbGxiYWNrX2Nvbm5yZXFgIGlzICpuZXZlciogaW52b2tlZC4gQ29uc2VxdWVudGx5LCBgaXVjdi1cdTAwM2VwYXRoYCBjYW4gKm5ldmVyKiBiZSBub24tTlVMTCB3aGVuIGBwcl9pdWN2YCBpcyBgTlVMTGAuXG5cbkFoYSEgTm93LCB3aGVuIGlzIGBwcl9pdWN2YCBub24tTlVMTD8gVGhhdCBkZXBlbmRzIG9uIGBtYWNoaW5lX2lzX3ZtKClgLiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBvbmx5IGlmIHdlJ3JlIHJ1bm5pbmcgdW5kZXIgdGhlIHovVk0gaHlwZXJ2aXNvci4gQnV0IHdhaXQsIEkgbmVlZCB0byBjb25maXJtOiBkb2VzIFFFTVUgZW11bGF0ZSB6L1ZNPyBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgUUVNVSB0eXBpY2FsbHkgZW11bGF0ZXMgS1ZNIG9yIFRDRywgYW5kIHRoZSBtYWNoaW5lIHR5cGUgaXMgdXN1YWxseSByZXBvcnRlZCBhcyBgczM5MC1jY3ctdmlydGlvYC4gT2theSwgc28gUUVNVSBkb2VzICpub3QqIGVtdWxhdGUgei9WTS4gVGhlcmVmb3JlLCBgbWFjaGluZV9pc192bSgpYCB3aWxsIHJldHVybiBmYWxzZS4gSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoYXQgbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjI1LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE1OjEwOjM2Ljc2NDYxNTk4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDI2ODE5NjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hY2hpbmVfaXNfdm1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9ib290L3N0YXJ0dXAuYz03MT1zdGF0aWMgdm9pZCBkZXRlY3RfZGlhZzI4OCh2b2lkKVxcbi0tXFxuYXJjaC9zMzkwL2Jvb3Qvc3RhcnR1cC5jLTc2LVxcbmFyY2gvczM5MC9ib290L3N0YXJ0dXAuYzo3NzpcXHRhY3Rpb24gPSBtYWNoaW5lX2lzX3ZtKCkgPyAodW5zaWduZWQgbG9uZyljbWQgOiBMUEFSV0RUX1JFU1RBUlQ7XFxuYXJjaC9zMzkwL2Jvb3Qvc3RhcnR1cC5jOjc4OlxcdGxlbiA9IG1hY2hpbmVfaXNfdm0oKSA/IHNpemVvZihjbWQpIDogMDtcXG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmMtNzktXFx0aWYgKF9fZGlhZzI4OChXRFRfRlVOQ19JTklULCBNSU5fSU5URVJWQUwsIGFjdGlvbiwgbGVuKSlcXG4tLVxcbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYz0xMDg9aW50IF9faW5pdCBoeXBmc19kaWFnMGNfaW5pdCh2b2lkKVxcbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYy0xMDkte1xcbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYzoxMTA6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXFxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcwYy5jLTExMS1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYz0xMTk9dm9pZCBoeXBmc19kaWFnMGNfZXhpdCh2b2lkKVxcbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYy0xMjAte1xcbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYzoxMjE6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXFxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcwYy5jLTEyMi1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfdm0uYz0xMjM9aW50IGh5cGZzX3ZtX2luaXQodm9pZClcXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfdm0uYy0xMjQte1xcbmFyY2gvczM5MC9oeXBmcy9oeXBmc192bS5jOjEyNTpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfdm0uYy0xMjYtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfdm0uYz0xMzc9dm9pZCBoeXBmc192bV9leGl0KHZvaWQpXFxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmMtMTM4LXtcXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfdm0uYzoxMzk6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXFxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmMtMTQwLVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jPTE0OD1zdGF0aWMgc3NpemVfdCBoeXBmc193cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbi0tXFxuYXJjaC9zMzkwL2h5cGZzL2lub2RlLmMtMTcwLVxcdGh5cGZzX2RlbGV0ZV90cmVlKCk7XFxuYXJjaC9zMzkwL2h5cGZzL2lub2RlLmM6MTcxOlxcdGlmIChtYWNoaW5lX2lzX3ZtKCkpXFxuYXJjaC9zMzkwL2h5cGZzL2lub2RlLmMtMTcyLVxcdFxcdHJjID0gaHlwZnNfdm1fY3JlYXRlX2ZpbGVzKHNiLVxcdTAwM2VzX3Jvb3QpO1xcbi0tXFxuYXJjaC9zMzkwL2h5cGZzL2lub2RlLmM9MjQwPXN0YXRpYyBpbnQgaHlwZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYy0yNTktXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuYXJjaC9zMzkwL2h5cGZzL2lub2RlLmM6MjYwOlxcdGlmIChtYWNoaW5lX2lzX3ZtKCkpXFxuYXJjaC9zMzkwL2h5cGZzL2lub2RlLmMtMjYxLVxcdFxcdHJjID0gaHlwZnNfdm1fY3JlYXRlX2ZpbGVzKHJvb3RfZGVudHJ5KTtcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcHBsZGF0YS5oPTQ1PXN0YXRpYyBpbmxpbmUgaW50IGFwcGxkYXRhX2FzbShzdHJ1Y3QgYXBwbGRhdGFfcGFyYW1ldGVyX2xpc3QgKnBhcm1fbGlzdCxcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcHBsZGF0YS5oLTUxLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcHBsZGF0YS5oOjUyOlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcHBsZGF0YS5oLTUzLVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg9OTc9REVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUobHBhciwgTUZFQVRVUkVfTFBBUilcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oLTk4LVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg6OTk6I2RlZmluZSBtYWNoaW5lX2lzX3ZtXFx0bWFjaGluZV9oYXNfdm1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oLTEwMC0jZGVmaW5lIG1hY2hpbmVfaXNfa3ZtXFx0bWFjaGluZV9oYXNfa3ZtXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2Vhcmx5LmM9MTEwPXN0YXRpYyBub2lubGluZSBfX2luaXQgdm9pZCBzZXR1cF9hcmNoX3N0cmluZyh2b2lkKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jLTEzMi1cXHRcXHRcXHQgIG1hY2hpbmVfaXNfbHBhcigpID8gXFxcIkxQQVJcXFwiIDpcXG5hcmNoL3MzOTAva2VybmVsL2Vhcmx5LmM6MTMzOlxcdFxcdFxcdCAgbWFjaGluZV9pc192bSgpID8gXFxcInovVk1cXFwiIDpcXG5hcmNoL3MzOTAva2VybmVsL2Vhcmx5LmMtMTM0LVxcdFxcdFxcdCAgbWFjaGluZV9pc19rdm0oKSA/IFxcXCJLVk1cXFwiIDogXFxcInVua25vd25cXFwiKTtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM9Njk0PXN0YXRpYyBpbnQgX19pbml0IGlwbF9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTcwNy1cXHRjYXNlIElQTF9UWVBFX0NDVzpcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jOjcwODpcXHRcXHRpZiAobWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtNzA5LVxcdFxcdFxcdHJjID0gc3lzZnNfY3JlYXRlX2dyb3VwKFxcdTAwMjZpcGxfa3NldC1cXHUwMDNla29iaixcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM9MTI4Nj1zdGF0aWMgdm9pZCByZWlwbF9ibG9ja19jY3dfZmlsbF9wYXJtcyhzdHJ1Y3QgaXBsX3BhcmFtZXRlcl9ibG9jayAqaXBiKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0xMjk3LVxcdC8qIFZNIFBBUk0gKi9cXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jOjEyOTg6XFx0aWYgKG1hY2hpbmVfaXNfdm0oKSBcXHUwMDI2XFx1MDAyNiBpcGxfYmxvY2tfdmFsaWQgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTEyOTktXFx0ICAgIChpcGxfYmxvY2suY2N3LnZtX2ZsYWdzIFxcdTAwMjYgSVBMX1BCMF9DQ1dfVk1fRkxBR19WUCkpIHtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM9MTMwOD1zdGF0aWMgaW50IF9faW5pdCByZWlwbF9uc3NfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0xMzExLVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM6MTMxMjpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTEzMTMtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jPTEzMjg9c3RhdGljIGludCBfX2luaXQgcmVpcGxfY2N3X2luaXQodm9pZClcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMTMzNi1cXHRyYyA9IHN5c2ZzX2NyZWF0ZV9ncm91cChcXHUwMDI2cmVpcGxfa3NldC1cXHUwMDNla29iaixcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jOjEzMzc6XFx0XFx0XFx0XFx0bWFjaGluZV9pc192bSgpID8gXFx1MDAyNnJlaXBsX2Njd19hdHRyX2dyb3VwX3ZtXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0xMzM4LVxcdFxcdFxcdFxcdFxcdFxcdDogXFx1MDAyNnJlaXBsX2Njd19hdHRyX2dyb3VwX2xwYXIpO1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYz0yMDE0PXN0YXRpYyBpbnQgdm1jbWRfaW5pdCh2b2lkKVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMjAxNS17XFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYzoyMDE2OlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMjAxNy1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jPTIyOTQ9c3RhdGljIGludCBfX2luaXQgdm1jbWRfb25fcmVib290X3NldHVwKGNoYXIgKnN0cilcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTIyOTUte1xcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM6MjI5NjpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTIyOTctXFx0XFx0cmV0dXJuIDE7XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jPTIzMDQ9c3RhdGljIGludCBfX2luaXQgdm1jbWRfb25fcGFuaWNfc2V0dXAoY2hhciAqc3RyKVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMjMwNS17XFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYzoyMzA2OlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMjMwNy1cXHRcXHRyZXR1cm4gMTtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM9MjMxND1zdGF0aWMgaW50IF9faW5pdCB2bWNtZF9vbl9oYWx0X3NldHVwKGNoYXIgKnN0cilcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTIzMTUte1xcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM6MjMxNjpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTIzMTctXFx0XFx0cmV0dXJuIDE7XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jPTIzMjQ9c3RhdGljIGludCBfX2luaXQgdm1jbWRfb25fcG9mZl9zZXR1cChjaGFyICpzdHIpXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0yMzI1LXtcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jOjIzMjY6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0yMzI3LVxcdFxcdHJldHVybiAxO1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9tYWNoaW5lX2tleGVjLmM9MTgwPXN0YXRpYyBpbnQgbWFjaGluZV9rZXhlY19wcmVwYXJlX2tkdW1wKHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL21hY2hpbmVfa2V4ZWMuYy0xODItI2lmZGVmIENPTkZJR19DUkFTSF9EVU1QXFxuYXJjaC9zMzkwL2tlcm5lbC9tYWNoaW5lX2tleGVjLmM6MTgzOlxcdGlmIChtYWNoaW5lX2lzX3ZtKCkpXFxuYXJjaC9zMzkwL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMtMTg0LVxcdFxcdGRpYWcxMF9yYW5nZShQRk5fRE9XTihjcmFzaGtfcmVzLnN0YXJ0KSxcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYz0yNDY9c3RhdGljIHZvaWQgX19pbml0IGNvbm1vZGVfZGVmYXVsdCh2b2lkKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jLTI1MC1cXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmM6MjUxOlxcdGlmIChtYWNoaW5lX2lzX3ZtKCkpIHtcXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmMtMjUyLVxcdFxcdGNwY21kKFxcXCJRVUVSWSBDT05TT0xFXFxcIiwgcXVlcnlfYnVmZmVyLCAxMDI0LCBOVUxMKTtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYz01OTg9c3RhdGljIHZvaWQgX19pbml0IHJlc2VydmVfY3Jhc2hrZXJuZWwodm9pZClcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYy02NTAtXFxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jOjY1MTpcXHRpZiAoIW9sZG1lbV9kYXRhLnN0YXJ0IFxcdTAwMjZcXHUwMDI2IG1hY2hpbmVfaXNfdm0oKSlcXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmMtNjUyLVxcdFxcdGRpYWcxMF9yYW5nZShQRk5fRE9XTihjcmFzaF9iYXNlKSwgUEZOX0RPV04oY3Jhc2hfc2l6ZSkpO1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jPTg5Nz12b2lkIF9faW5pdCBzZXR1cF9hcmNoKGNoYXIgKipjbWRsaW5lX3ApXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmMtOTAxLSAgICAgICAgICovXFxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jOjkwMjpcXHRpZiAobWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYy05MDMtXFx0XFx0cHJfaW5mbyhcXFwiTGludXggaXMgcnVubmluZyBhcyBhIHovVk0gXFxcIlxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9zeXNpbmZvLmM9Mzc5PXN0YXRpYyBfX2luaXQgaW50IGNyZWF0ZV9wcm9jX3NlcnZpY2VfbGV2ZWwodm9pZClcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvc3lzaW5mby5jLTM4MS1cXHRwcm9jX2NyZWF0ZV9zZXEoXFxcInNlcnZpY2VfbGV2ZWxzXFxcIiwgMCwgTlVMTCwgXFx1MDAyNnNlcnZpY2VfbGV2ZWxfc2VxX29wcyk7XFxuYXJjaC9zMzkwL2tlcm5lbC9zeXNpbmZvLmM6MzgyOlxcdGlmIChtYWNoaW5lX2lzX3ZtKCkpXFxuYXJjaC9zMzkwL2tlcm5lbC9zeXNpbmZvLmMtMzgzLVxcdFxcdHJlZ2lzdGVyX3NlcnZpY2VfbGV2ZWwoXFx1MDAyNnNlcnZpY2VfbGV2ZWxfdm0pO1xcbi0tXFxuYXJjaC9zMzkwL21tL2V4dG1lbS5jPTI1Mz1zZWdtZW50X3R5cGUgKGNoYXIqIG5hbWUpXFxuLS1cXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmMtMjU3LVxcbmFyY2gvczM5MC9tbS9leHRtZW0uYzoyNTg6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXFxuYXJjaC9zMzkwL21tL2V4dG1lbS5jLTI1OS1cXHRcXHRyZXR1cm4gLUVOT1NZUztcXG4tLVxcbmFyY2gvczM5MC9tbS9leHRtZW0uYz00MTU9c2VnbWVudF9sb2FkIChjaGFyICpuYW1lLCBpbnQgZG9fbm9uc2hhcmVkLCB1bnNpZ25lZCBsb25nICphZGRyLFxcbi0tXFxuYXJjaC9zMzkwL21tL2V4dG1lbS5jLTQyMC1cXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmM6NDIxOlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9tbS9leHRtZW0uYy00MjItXFx0XFx0cmV0dXJuIC1FTk9TWVM7XFxuLS1cXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmM9NTQ2PXNlZ21lbnRfdW5sb2FkKGNoYXIgKm5hbWUpXFxuLS1cXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmMtNTQ5LVxcbmFyY2gvczM5MC9tbS9leHRtZW0uYzo1NTA6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXFxuYXJjaC9zMzkwL21tL2V4dG1lbS5jLTU1MS1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmM9NTgyPXNlZ21lbnRfc2F2ZShjaGFyICpuYW1lKVxcbi0tXFxuYXJjaC9zMzkwL21tL2V4dG1lbS5jLTU4OC1cXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmM6NTg5OlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9tbS9leHRtZW0uYy01OTAtXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYz0zMzM5PWludCBkYXNkX2RldmljZV9pc19ybyhzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSlcXG4tLVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMtMzM0NC1cXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jOjMzNDU6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYy0zMzQ2LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGV2bWFwLmM9MjI0PXN0YXRpYyBpbnQgX19pbml0IGRhc2RfcGFyc2Vfa2V5d29yZChjaGFyICprZXl3b3JkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGV2bWFwLmMtMjM4LVxcdGlmIChzdHJuY21wKFxcXCJub3BhdlxcXCIsIGtleXdvcmQsIGxlbmd0aCkgPT0gMCkge1xcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jOjIzOTpcXHRcXHRpZiAobWFjaGluZV9pc192bSgpKVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jLTI0MC1cXHRcXHRcXHRwcl9pbmZvKFxcXCInbm9wYXYnIGlzIG5vdCBzdXBwb3J0ZWQgb24gei9WTVxcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmM9NjU2PWRhc2RfZGlhZ19pbml0KHZvaWQpXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jLTY1Ny17XFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jOjY1ODpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSkge1xcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYy02NTktXFx0XFx0cHJfaW5mbyhcXFwiRGlzY2lwbGluZSAlcyBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IHovVk1cXFxcblxcXCIsXFxuLS1cXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmM9MTk0Nz1zdGF0aWMgaW50IGRhc2RfZWNrZF92YWxpZGF0ZV9zZXJ2ZXIoc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UsXFxuLS1cXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMtMTk1NS1cXHRcXHRyZXR1cm4gMDtcXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmM6MTk1NjpcXHRpZiAoZGFzZF9ub3BhdiB8fCBtYWNoaW5lX2lzX3ZtKCkpXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jLTE5NTctXFx0XFx0ZW5hYmxlX3BhdiA9IDA7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci9jb24zMjE1LmM9ODk5PXN0YXRpYyBpbnQgX19pbml0IGNvbjMyMTVfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jLTkxMC1cXHQvKiBTZXQgdGhlIGNvbnNvbGUgbW9kZSBmb3IgVk0gKi9cXG5kcml2ZXJzL3MzOTAvY2hhci9jb24zMjE1LmM6OTExOlxcdGlmIChtYWNoaW5lX2lzX3ZtKCkpIHtcXG5kcml2ZXJzL3MzOTAvY2hhci9jb24zMjE1LmMtOTEyLVxcdFxcdGNwY21kKFxcXCJURVJNIENPTk1PREUgMzIxNVxcXCIsIE5VTEwsIDAsIE5VTEwpO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzI3MC5jPTIxMzQ9Y29uMzI3MF9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci9jb24zMjcwLmMtMjE0NS1cXHQvKiBTZXQgdGhlIGNvbnNvbGUgbW9kZSBmb3IgVk0gKi9cXG5kcml2ZXJzL3MzOTAvY2hhci9jb24zMjcwLmM6MjE0NjpcXHRpZiAobWFjaGluZV9pc192bSgpKSB7XFxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzI3MC5jLTIxNDctXFx0XFx0Y3BjbWQoXFxcIlRFUk0gQ09OTU9ERSAzMjcwXFxcIiwgTlVMTCwgMCwgTlVMTCk7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci9obWNkcnZfZnRwLmM9MjkzPWludCBobWNkcnZfZnRwX3N0YXJ0dXAodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL2htY2Rydl9mdHAuYy0zMTEtXFx0aWYgKGhtY2Rydl9mdHBfcmVmY250ID09IDApIHtcXG5kcml2ZXJzL3MzOTAvY2hhci9obWNkcnZfZnRwLmM6MzEyOlxcdFxcdGlmIChtYWNoaW5lX2lzX3ZtKCkpXFxuZHJpdmVycy9zMzkwL2NoYXIvaG1jZHJ2X2Z0cC5jLTMxMy1cXHRcXHRcXHRobWNkcnZfZnRwX2Z1bmNzID0gXFx1MDAyNmhtY2Rydl9mdHBfenZtO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvbW9ucmVhZGVyLmM9NDU0PXN0YXRpYyBpbnQgX19pbml0IG1vbl9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci9tb25yZWFkZXIuYy00NTctXFxuZHJpdmVycy9zMzkwL2NoYXIvbW9ucmVhZGVyLmM6NDU4OlxcdGlmICghbWFjaGluZV9pc192bSgpKSB7XFxuZHJpdmVycy9zMzkwL2NoYXIvbW9ucmVhZGVyLmMtNDU5LVxcdFxcdHByX2VycihcXFwiVGhlIHovVk0gKk1PTklUT1IgcmVjb3JkIGRldmljZSBkcml2ZXIgY2Fubm90IGJlIFxcXCJcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL21vbndyaXRlci5jPTI5ND1zdGF0aWMgaW50IF9faW5pdCBtb25faW5pdCh2b2lkKVxcbmRyaXZlcnMvczM5MC9jaGFyL21vbndyaXRlci5jLTI5NS17XFxuZHJpdmVycy9zMzkwL2NoYXIvbW9ud3JpdGVyLmM6Mjk2OlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmRyaXZlcnMvczM5MC9jaGFyL21vbndyaXRlci5jLTI5Ny1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuYz02MTQ9c3RhdGljIHZvaWQgcmF3MzI3MF9yZXNldF9kZXZpY2VfY2Ioc3RydWN0IHJhdzMyNzBfcmVxdWVzdCAqcnEsIHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci9yYXczMjcwLmMtNjIyLVxcdFxcdHJwLVxcdTAwM2VzdGF0ZSA9IFJBVzMyNzBfU1RBVEVfSU5JVDtcXG5kcml2ZXJzL3MzOTAvY2hhci9yYXczMjcwLmM6NjIzOlxcdH0gZWxzZSBpZiAobWFjaGluZV9pc192bSgpKSB7XFxuZHJpdmVycy9zMzkwL2NoYXIvcmF3MzI3MC5jLTYyNC1cXHRcXHRyYXczMjcwX3NpemVfZGV2aWNlX3ZtKHJwKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHAuaD0zNDQ9c2NscF9hc2NlYmModW5zaWduZWQgY2hhciBjaClcXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmgtMzQ1LXtcXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmg6MzQ2OlxcdHJldHVybiAobWFjaGluZV9pc192bSgpKSA/IF9hc2NlYmNbY2hdIDogX2FzY2ViY181MDBbY2hdO1xcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHAuaC0zNDctfVxcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oPTM1MT1zY2xwX2ViY2FzY19zdHIoY2hhciAqc3RyLCBpbnQgbnIpXFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oLTM1Mi17XFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oOjM1MzpcXHQobWFjaGluZV9pc192bSgpKSA/IEVCQ0FTQyhzdHIsIG5yKSA6IEVCQ0FTQ181MDAoc3RyLCBucik7XFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oLTM1NC19XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmg9MzU4PXNjbHBfYXNjZWJjX3N0cihjaGFyICpzdHIsIGludCBucilcXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmgtMzU5LXtcXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmg6MzYwOlxcdChtYWNoaW5lX2lzX3ZtKCkpID8gQVNDRUJDKHN0ciwgbnIpIDogQVNDRUJDXzUwMChzdHIsIG5yKTtcXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmgtMzYxLX1cXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfZWFybHkuYz0yNj1zdGF0aWMgdm9pZCBfX2luaXQgc2NscF9lYXJseV9mYWNpbGl0aWVzX2RldGVjdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF9lYXJseS5jLTc4LVxcdGlmICghc2NjYi1cXHUwMDNlaGNwdWEpIHtcXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2Vhcmx5LmM6Nzk6XFx0XFx0aWYgKG1hY2hpbmVfaXNfdm0oKSlcXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2Vhcmx5LmMtODAtXFx0XFx0XFx0c2NscC5tYXhfY29yZXMgPSA2NDtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfdHR5LmM9NTA1PXNjbHBfdHR5X2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfdHR5LmMtNTEyLVxcdC8qIHovVk0gbXVsdGlwbGV4ZXMgdGhlIGxpbmUgbW9kZSBvdXRwdXQgb24gdGhlIDMyeHggc2NyZWVuICovXFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF90dHkuYzo1MTM6XFx0aWYgKG1hY2hpbmVfaXNfdm0oKSBcXHUwMDI2XFx1MDAyNiAhQ09OU09MRV9JU19TQ0xQKVxcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfdHR5LmMtNTE0LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF90dHkuYy01MzgtXFx0c2NscF90dHlfYnVmZmVyX2NvdW50ID0gMDtcXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3R0eS5jOjUzOTpcXHRpZiAobWFjaGluZV9pc192bSgpKSB7XFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF90dHkuYy01NDAtXFx0XFx0LyogY2FzZSBpbnB1dCBsaW5lcyB0byBsb3dlcmNhc2UgKi9cXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYz01Mj12b2lkIF9faW5pdCB2bWNwX2NtYV9yZXNlcnZlKHZvaWQpXFxuZHJpdmVycy9zMzkwL2NoYXIvdm1jcC5jLTUzLXtcXG5kcml2ZXJzL3MzOTAvY2hhci92bWNwLmM6NTQ6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXFxuZHJpdmVycy9zMzkwL2NoYXIvdm1jcC5jLTU1LVxcdFxcdHJldHVybjtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYz0yNDg9c3RhdGljIGludCBfX2luaXQgdm1jcF9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci92bWNwLmMtMjUxLVxcbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYzoyNTI6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXFxuZHJpdmVycy9zMzkwL2NoYXIvdm1jcC5jLTI1My1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3ZtbG9ncmRyLmM9ODA2PXN0YXRpYyBpbnQgX19pbml0IHZtbG9ncmRyX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3ZtbG9ncmRyLmMtODExLVxcbmRyaXZlcnMvczM5MC9jaGFyL3ZtbG9ncmRyLmM6ODEyOlxcdGlmICghbWFjaGluZV9pc192bSgpKSB7XFxuZHJpdmVycy9zMzkwL2NoYXIvdm1sb2dyZHIuYy04MTMtXFx0XFx0cHJfZXJyKFxcXCJub3QgcnVubmluZyB1bmRlciBWTSwgZHJpdmVyIG5vdCBsb2FkZWQuXFxcXG5cXFwiKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3ZtdXIuYz0xMDA2PXN0YXRpYyBpbnQgX19pbml0IHVyX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3ZtdXIuYy0xMDEwLVxcbmRyaXZlcnMvczM5MC9jaGFyL3ZtdXIuYzoxMDExOlxcdGlmICghbWFjaGluZV9pc192bSgpKSB7XFxuZHJpdmVycy9zMzkwL2NoYXIvdm11ci5jLTEwMTItXFx0XFx0cHJfZXJyKFxcXCJUaGUgJXMgY2Fubm90IGJlIGxvYWRlZCB3aXRob3V0IHovVk1cXFxcblxcXCIsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9pZC5jPTE3Mz1zdGF0aWMgdm9pZCBzbnNpZF9jYWxsYmFjayhzdHJ1Y3QgY2N3X2RldmljZSAqY2Rldiwgdm9pZCAqZGF0YSwgaW50IHJjKVxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfaWQuYy0xNzgtXFxuZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfaWQuYzoxNzk6XFx0aWYgKHJjIFxcdTAwMjZcXHUwMDI2IG1hY2hpbmVfaXNfdm0oKSkge1xcbmRyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2lkLmMtMTgwLVxcdFxcdC8qIFRyeSBkaWFnIDB4MjEwIGZhbGxiYWNrIG9uIHovVk0uICovXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jPTI0OTQ9c3RhdGljIGlubGluZSBpbnQgX19pbml0IGFwX2FzeW5jX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjUwNC1cXHQgKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjI1MDU6XFx0aWYgKG1hY2hpbmVfaXNfdm0oKSlcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI1MDYtXFx0XFx0cG9sbF9oaWdoX3RpbWVvdXQgPSAxNTAwMDAwO1xcbi0tXFxuZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYz0yOTc9c3RhdGljIGludCBxZXRoX2wyX3JlcXVlc3RfaW5pdGlhbF9tYWMoc3RydWN0IHFldGhfY2FyZCAqY2FyZClcXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMtMzAyLVxcbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmM6MzAzOlxcdGlmIChtYWNoaW5lX2lzX3ZtKCkpIHtcXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jLTMwNC1cXHRcXHRyYyA9IHFldGhfdm1fcmVxdWVzdF9tYWMoY2FyZCk7XFxuLS1cXG5kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmM9MTM5PXN0YXRpYyBpbnQgX19pbml0IHNtc2dfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jLTE0Mi1cXG5kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmM6MTQzOlxcdGlmICghbWFjaGluZV9pc192bSgpKSB7XFxuZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jLTE0NC1cXHRcXHRyYyA9IC1FUFJPVE9OT1NVUFBPUlQ7XFxuLS1cXG5kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2X2FwcC5jPTE1Mj1zdGF0aWMgaW50IF9faW5pdCBzbXNnaXVjdl9hcHBfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdl9hcHAuYy0xNTYtXFxuZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdl9hcHAuYzoxNTc6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXFxuZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdl9hcHAuYy0xNTgtXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuLS1cXG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYz0xMjM5PXN0YXRpYyBpbnQgcGFyYW1fc2V0X3ZtaWRmaWx0ZXIoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jLTEyNDItXFxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmM6MTI0MzpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSB8fCAhaHZjX2l1Y3ZfZGV2aWNlcylcXG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYy0xMjQ0LVxcdFxcdHJldHVybiAtRU5PREVWO1xcbi0tXFxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmM9MTI2Nj1zdGF0aWMgaW50IHBhcmFtX2dldF92bWlkZmlsdGVyKGNoYXIgKmJ1ZmZlciwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuLS1cXG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYy0xMjcxLVxcbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jOjEyNzI6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkgfHwgIWh2Y19pdWN2X2RldmljZXMpXFxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmMtMTI3My1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4tLVxcbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jPTEzMDE9c3RhdGljIGludCBfX2luaXQgaHZjX2l1Y3ZfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmMtMTMwOC1cXG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYzoxMzA5OlxcdGlmICghbWFjaGluZV9pc192bSgpKSB7XFxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmMtMTMxMC1cXHRcXHRwcl9ub3RpY2UoXFxcIlRoZSB6L1ZNIElVQ1YgSFZDIGRldmljZSBkcml2ZXIgY2Fubm90IFxcXCJcXG4tLVxcbmRyaXZlcnMvd2F0Y2hkb2cvZGlhZzI4OF93ZHQuYz04MT1zdGF0aWMgaW50IHdkdF9zdGFydChzdHJ1Y3Qgd2F0Y2hkb2dfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmMtODUtXFxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jOjg2OlxcdGlmIChtYWNoaW5lX2lzX3ZtKCkpIHtcXG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmMtODctXFx0XFx0ZnVuYyA9IGNvbmNlYWxfb24gPyAoV0RUX0ZVTkNfSU5JVCB8IFdEVF9GVU5DX0NPTkNFQUwpXFxuLS1cXG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmM9MTA3PXN0YXRpYyBpbnQgd2R0X3Bpbmcoc3RydWN0IHdhdGNoZG9nX2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jLTExMS1cXG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmM6MTEyOlxcdGlmIChtYWNoaW5lX2lzX3ZtKCkpIHtcXG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmMtMTEzLVxcdFxcdC8qXFxuLS1cXG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmM9MTYyPXN0YXRpYyBpbnQgX19pbml0IGRpYWcyODhfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jLTE2NS1cXG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmM6MTY2OlxcdGlmIChtYWNoaW5lX2lzX3ZtKCkpIHtcXG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmMtMTY3LVxcdFxcdGNtZF9idWYgPSBrbWFsbG9jKE1BWF9DTURMRU4sIEdGUF9LRVJORUwpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTIyOTQ9c3RhdGljIGludCBfX2luaXQgYWZpdWN2X2luaXQodm9pZClcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjk3LVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjk4OlxcdGlmIChtYWNoaW5lX2lzX3ZtKCkgXFx1MDAyNlxcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfSVVDVikpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI5OS1cXHRcXHRjcGNtZChcXFwiUVVFUlkgVVNFUklEXFxcIiwgaXVjdl91c2VyaWQsIHNpemVvZihpdWN2X3VzZXJpZCksIFxcdTAwMjZlcnIpO1xcbi0tXFxubmV0L2l1Y3YvaXVjdi5jPTE4NjI9c3RhdGljIGludCBfX2luaXQgaXVjdl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXVjdi9pdWN2LmMtMTg2NS1cXG5uZXQvaXVjdi9pdWN2LmM6MTg2NjpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSkge1xcbm5ldC9pdWN2L2l1Y3YuYy0xODY3LVxcdFxcdHJjID0gLUVQUk9UT05PU1VQUE9SVDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTU6MTA6NDMuMTkxNDQ1MTk3WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3Nzg2NDQ3OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgUmVhc29uaW5nIG9uIHRoZSBWaXJ0dWFsIE1hY2hpbmUgRGV0ZWN0aW9uKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIG91ciBlbnZpcm9ubWVudCBpcyBhIHZpcnR1YWwgbWFjaGluZS4gU3BlY2lmaWNhbGx5LCBJIHNlZSBgbWFjaGluZV9pc192bWAgaXMgZGVmaW5lZCBhcyBgbWFjaGluZV9oYXNfdm1gLiBNYWtlcyBzZW5zZSBzbyBmYXIuIFRoZW4gYG1hY2hpbmVfaGFzX3ZtYCBpcyBzZXQgaWYgd2UncmUgcnVubmluZyB1bmRlciB6L1ZNLiBIbW0sIHRoYXQncyBhIGNsdWUuIE5vdywgSSBrbm93IFFFTVUgZW11bGF0ZXMgb3RoZXIgdmlydHVhbCBtYWNoaW5lcyDigJMgS1ZNIG9yIFRDRywgdXN1YWxseSDigJMgYnV0IGRvZXMgaXQgZW11bGF0ZSB6L1ZNPyBJIGRvbid0ICp0aGluayogc28uXG5cbldhaXQgYSBtaW51dGUuLi4gd2UncmUgZnV6emluZyBvbiBzMzkweCwgd2hpY2ggKmNvdWxkKiBiZSBydW5uaW5nIG9uIHJlYWwgei9WTSBoYXJkd2FyZS4gQnV0IFN5emthbGxlciB0eXBpY2FsbHkgdXNlcyBRRU1VLCBhbmQgUUVNVSB3b3VsZG4ndCBiZSBlbXVsYXRpbmcgei9WTSwgcmlnaHQ/IFNvLCBkb2VzIFFFTVUgZW11bGF0ZSB6L1ZNP1xuXG5Pa2F5LCBJIG5lZWQgdG8gZ28gYmFjayBhbmQgY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYG1hY2hpbmVfaXNfdm1gLiBJIG5lZWQgdG8gYmUgc3VyZS4gTXkgaW5pdGlhbCBhc3N1bXB0aW9ucyBtaWdodCBiZSBjb3JyZWN0LCBidXQgbGV0J3MgbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy4gQmFjayB0byBiYXNpY3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4OTM1LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE1OjEwOjQ3Ljk3MDA5MjQyM1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcyMTE1NTU4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWNoaW5lX2hhc192bVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaD05Nz1ERUZJTkVfTUFDSElORV9IQVNfRkVBVFVSRShscGFyLCBNRkVBVFVSRV9MUEFSKVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmgtOTgtXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaDo5OTojZGVmaW5lIG1hY2hpbmVfaXNfdm1cXHRtYWNoaW5lX2hhc192bVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmgtMTAwLSNkZWZpbmUgbWFjaGluZV9pc19rdm1cXHRtYWNoaW5lX2hhc19rdm1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTU6MTA6NTAuNjkxMjUzMDE0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MjQxNTQyMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVW5wYWNraW5nIGEgTWFjcm86IGBtYWNoaW5lX2hhc192bWAqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHNlZSBgbWFjaGluZV9oYXNfdm1gIGluIHRoZSBjb2RlLCBhbmQgSSdtIHByZXR0eSBzdXJlIHRoYXQncyBhIG1hY3JvLiBSaWdodCwgbGV0J3Mgbm90IG1ha2UgYXNzdW1wdGlvbnMgaGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIG1hY3JvIGlzICphY3R1YWxseSogZG9pbmcgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIuIEknbSBnb2luZyB0byBxdWlja2x5IGp1bXAgdG8gaXRzIGRlZmluaXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBleHBhbnNpb24gdG8gYmUgY2VydGFpbiBvZiBpdHMgZWZmZWN0LCBlc3BlY2lhbGx5IGdpdmVuIGhvdyBjcml0aWNhbCBWTS1yZWxhdGVkIGxvZ2ljIG9mdGVuIGlzLiBJ4oCZbSBob3BpbmcgaXTigJlzIG5vdCBzb21ldGhpbmcgb3Zlcmx5IGNvbXBsZXgsIGJ1dCB5b3UgbmV2ZXIga25vdyB1bnRpbCB5b3UgbG9vay4gTGV0J3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCB0aGUgcHJlcHJvY2Vzc29yIGlzIGdvaW5nIHRvIHN1YnN0aXR1dGUgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk0NjIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNToxMDo1NS41MTU0MDk5MzlaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNzQ2MzI5MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiREVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkVcXFxcKHZtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oPTk0PURFRklORV9NQUNISU5FX0hBU19GRUFUVVJFKGRpYWc5YywgTUZFQVRVUkVfRElBRzlDKVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg6OTU6REVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUodm0sIE1GRUFUVVJFX1ZNKVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmgtOTYtREVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUoa3ZtLCBNRkVBVFVSRV9LVk0pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE1OjEwOjU4LjY5MDA0NzU5MloiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTcxNDMyNjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQ6XG5cbioqVHJhY2luZyBEb3duIHRoZSBgTUZFQVRVUkVfVk1gIEZsYWcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgYE1GRUFUVVJFX1ZNYCBzeW1ib2wgb3IgbWFjcm8gaXMgZGVmaW5lZCBhbmQgdXNlZC4gSXQncyB1c3VhbGx5IHRoZSBmaXJzdCBzdGVwIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHB1cnBvc2Ugb2Ygc29tZXRoaW5nLiBJIG5lZWQgdG8ga25vdzogSXMgdGhpcyBhIGRlZmluZSBzdGF0ZW1lbnQ/IElzIGl0IGEgdmFyaWFibGU/IElzIGl0IGJlaW5nIHNldCBiYXNlZCBvbiBhIGNvbXBpbGUtdGltZSBmbGFnPyBLbm93aW5nIHRoZSBkZWZpbml0aW9uIHdpbGwgdW5sb2NrIHNvIG11Y2ggaW5mb3JtYXRpb24uIEZyb20gdGhlcmUsIEkgY2FuIGRldGVybWluZSB3aGVyZSB0aGF0IHZhcmlhYmxlL21hY3JvIGlzICp1c2VkKiBhbmQgdW5kZXJzdGFuZCBpdHMgaW1wYWN0IG9uIHRoZSBzeXN0ZW0uIElzIGl0IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uPyBJcyBpdCBjb250cm9sbGluZyBzb21lIGV4ZWN1dGlvbiBwYXRoPyBUaGlzIGlzIGdvaW5nIHRvIGludm9sdmUgc29tZSBjb2RlIHNlYXJjaGluZyAtIG1heWJlIGdyZXAsIG1heWJlIG15IElERSdzIHN5bWJvbCBsb29rdXAsIGRlcGVuZGluZyBvbiB0aGUgY29kZWJhc2Ugc2l6ZSBhbmQgc3RydWN0dXJlLiBJJ2xsIG5lZWQgdG8gdGhpbmsgYWJvdXQgcG90ZW50aWFsIGhlYWRlciBmaWxlcywgYnVpbGQgY29uZmlndXJhdGlvbnMsIGFuZCBpZiB0aGlzIHJlbGF0ZXMgdG8gc29tZSBwbGF0Zm9ybS1zcGVjaWZpYyBmdW5jdGlvbmFsaXR5LiBBIGJpdCBvZiBkZXRlY3RpdmUgd29yaywgYnV0IGZhaXJseSByb3V0aW5lIHRvIHVuZGVyc3RhbmQgc3lzdGVtIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTgwMywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE1OjExOjAyLjY2MTQ4MzcxMVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcyNzMyNDU4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNRkVBVFVSRV9WTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2Jvb3Qvc3RhcnR1cC5jPTUyPXN0YXRpYyB2b2lkIGRldGVjdF9tYWNoaW5lX3R5cGUodm9pZClcXG4tLVxcbmFyY2gvczM5MC9ib290L3N0YXJ0dXAuYy02Ny1cXHRlbHNlIGlmICghbWVtY21wKHZtbXMtXFx1MDAzZXZtWzBdLmNwaSwgXFxcIlxcXFx4YTlcXFxceDYxXFxcXHhlNVxcXFx4ZDRcXFwiLCA0KSlcXG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmM6Njg6XFx0XFx0c2V0X21hY2hpbmVfZmVhdHVyZShNRkVBVFVSRV9WTSk7XFxuYXJjaC9zMzkwL2Jvb3Qvc3RhcnR1cC5jLTY5LX1cXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmgtMTctI2RlZmluZSBNRkVBVFVSRV9ESUFHOUNcXHRcXHQ2XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaDoxODojZGVmaW5lIE1GRUFUVVJFX1ZNXFx0XFx0N1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmgtMTktI2RlZmluZSBNRkVBVFVSRV9LVk1cXHRcXHQ4XFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oPTk0PURFRklORV9NQUNISU5FX0hBU19GRUFUVVJFKGRpYWc5YywgTUZFQVRVUkVfRElBRzlDKVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg6OTU6REVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUodm0sIE1GRUFUVVJFX1ZNKVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmgtOTYtREVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUoa3ZtLCBNRkVBVFVSRV9LVk0pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE1OjExOjA1LjM4ODgxNTM2NloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTgxMDY0NzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHlwZXJ2aXNvciBDaGVjayoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQncyBjaGVja2luZyBgdm1tcy1cdTAwM2V2bVswXS5jcGlgIGZvciBgXCJcXHhhOVxceDYxXFx4ZTVcXHhkNFwiYCwgd2hpY2ggSSBpbnN0YW50bHkgcmVjb2duaXplIGFzIHRoZSBFQkNESUMgZXF1aXZhbGVudCBvZiBcInovVk1cIi4gVGhhdCdzIHRoZSBrZXkuIFRoaXMgd2hvbGUgc2VjdGlvbiBpcyBzcGVjaWZpY2FsbHkgZm9yIGlkZW50aWZ5aW5nIGlmIHRoZSBjb2RlIGlzIHJ1bm5pbmcgb24gei9WTS4gUUVNVSwgb24gdGhlIG90aGVyIGhhbmQsIGlkZW50aWZpZXMgaXRzZWxmIGFzIEtWTSBvciBRRU1VLCBhcyBleHBlY3RlZC4gVGh1cyBgbWFjaGluZV9pc192bSgpYCB3aWxsIGJlIGBmYWxzZWAgdW5kZXIgUUVNVSwgcmlnaHQ/XG5cbkFscmlnaHQsIGlmIGBtYWNoaW5lX2lzX3ZtKClgIGlzIGBmYWxzZWAsIHRoZW4gYHByX2l1Y3ZgIGlzIGBOVUxMYC4gQW5kIHdoZW4gYHByX2l1Y3ZgIGlzIGBOVUxMYCwgdGhlIGBpdWN2LVx1MDAzZXRyYW5zcG9ydGAgaXMgc2V0IHRvIGBBRl9JVUNWX1RSQU5TX0hJUEVSYCwgZ290IGl0LiBXaXRoIGBpdWN2LVx1MDAzZXRyYW5zcG9ydGAgYXMgYEFGX0lVQ1ZfVFJBTlNfSElQRVJgLCB0aGUgY29kZSBlbnN1cmVzIHRoYXQgYGl1Y3YtXHUwMDNlcGF0aGAgaXMgbmV2ZXIgYWxsb2NhdGVkLlxuXG5IZXJlJ3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZzogYmVjYXVzZSBgaXVjdi1cdTAwM2VwYXRoYCBpcyBuZXZlciBhbGxvY2F0ZWQsIGBpdWN2X3NldmVyX3BhdGhgIGVmZmVjdGl2ZWx5IGRvZXMgbm90aGluZyBiZWNhdXNlIHRoZSBgeGNoZyhcdTAwMjZpdWN2LVx1MDAzZXBhdGgsIE5VTEwpYCBjYWxsIHdpbGwgYWx3YXlzIHJldHVybiBgTlVMTGAuIFRoYXQgbWVhbnMgdGhlIGNvZGUgYmxvY2sgKmluc2lkZSogdGhlIGBpZiAoeGNoZyhcdTAwMjZpdWN2LVx1MDAzZXBhdGgsIE5VTEwpKWAgY29uZGl0aW9uIGlzIE5FVkVSIGV4ZWN1dGVkIHdoZW4gcnVubmluZyB1bmRlciBRRU1VLiBUaGF0IGlzLCB1bmxlc3MgbXkgYXNzdW1wdGlvbnMgYXJlIGNvbXBsZXRlbHkgb2ZmLlxuXG5XYWl0Li4uIGFtIEkgbWlzc2luZyBzb21ldGhpbmc/IElzIHRoZXJlICphbnkqIHdheSBgaXVjdi1cdTAwM2VwYXRoYCBjb3VsZCBiZSBub24tTlVMTCB3aGVuIGBwcl9pdWN2YCBpcyBhY3R1YWxseSBgTlVMTGA/IEkgbmVlZCB0byBkb3VibGUtY2hlY2suIEknbSBnb2luZyB0byBsb29rIHRocm91Z2ggdGhlIHN1cnJvdW5kaW5nIGNvZGUgY2FyZWZ1bGx5IGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBwYXRocyB0aGF0IGNvdWxkIHBvc3NpYmx5IHNldCBgaXVjdi1cdTAwM2VwYXRoYC4gTmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBvdmVybG9va2luZyBhIHN1YnRsZSBkZXRhaWwgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAzODIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTU6MTE6MTMuNTY5ODgyMzY0WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjcyMjYyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXVjdi1cXHUwMDNlcGF0aCA9XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmM9NDY2PXN0YXRpYyBzdHJ1Y3Qgc29jayAqaXVjdl9zb2NrX2FsbG9jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90bywgZ2ZwX3QgcHJpbywgaW50IGtlcm4pXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDg5LVxcdGF0b21pY19zZXQoXFx1MDAyNml1Y3YtXFx1MDAzZW1zZ19yZWN2LCAwKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6NDkwOlxcdGl1Y3YtXFx1MDAzZXBhdGggPSBOVUxMO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OTEtXFx0aXVjdi1cXHUwMDNlc2tfdHhub3RpZnkgPSBhZml1Y3ZfaHNfY2FsbGJhY2tfdHhub3RpZnk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9Njg3PXN0YXRpYyBpbnQgYWZpdWN2X3BhdGhfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy02OTktXFx0LyogQ3JlYXRlIHBhdGguICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjcwMDpcXHRpdWN2LVxcdTAwM2VwYXRoID0gaXVjdl9wYXRoX2FsbG9jKGl1Y3YtXFx1MDAzZW1zZ2xpbWl0LFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03MDEtXFx0XFx0XFx0XFx0ICAgICBJVUNWX0lQUk1EQVRBLCBHRlBfS0VSTkVMKTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03MTAtXFx0XFx0aXVjdl9wYXRoX2ZyZWUoaXVjdi1cXHUwMDNlcGF0aCk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjcxMTpcXHRcXHRpdWN2LVxcdTAwM2VwYXRoID0gTlVMTDtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzEyLVxcdFxcdHN3aXRjaCAoZXJyKSB7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTYwNz1zdGF0aWMgaW50IGl1Y3ZfY2FsbGJhY2tfY29ubnJlcShzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NzUtXFx0bWVtY3B5KG5pdWN2LVxcdTAwM2VzcmNfdXNlcl9pZCwgaXVjdi1cXHUwMDNlc3JjX3VzZXJfaWQsIDgpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjc2OlxcdG5pdWN2LVxcdTAwM2VwYXRoID0gcGF0aDtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY3Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTU6MTE6MTMuNzk3MTE3MjMzWiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNzUyNzgzMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgSVVDViBDb25uZWN0aW9uIEVzdGFibGlzaG1lbnQqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBjb2RlIHNuaXBwZXQgaXMgcG9pbnRpbmcgdG8gYSBzcGVjaWZpYyBjb25uZWN0aW9uIHBhdGguIE15IGFuYWx5c2lzIHJldmVhbHMgdGhhdCB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24sIGBhZml1Y3ZfcGF0aF9jb25uZWN0YCwgYW5kIGl0cyBjb3JyZXNwb25kaW5nIGNhbGxiYWNrIGZ1bmN0aW9uLCBgaXVjdl9jYWxsYmFja19jb25ucmVxYCwgYXJlIHRoZSBvbmx5IHBvaW50cyB3aGVyZSBhIHBhcnRpY3VsYXIgY29ubmVjdGlvbiBwYXRod2F5IGlzIGluaXRpYWxpemVkLiBTcGVjaWZpY2FsbHksIGBhZml1Y3ZfcGF0aF9jb25uZWN0YCBpcyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgaXVjdl9zb2NrX2Nvbm5lY3RgLiBUaGlzIHN1Z2dlc3RzIGEgY2xlYXIgY29ubmVjdGlvbiBmbG93OiBhIHNvY2tldCBjb25uZWN0IGV2ZW50IHRyaWdnZXJpbmcgdGhlIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCB2aWEgdGhlIGBhZml1Y3ZfcGF0aF9jb25uZWN0YCBmdW5jdGlvbi4gSSB3aWxsIG5lZWQgdG8gZGVsdmUgZGVlcGVyIGludG8gdGhlc2UgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgdGhlIGludHJpY2FjaWVzIG9mIGhvdyBJVUNWIGNvbm5lY3Rpb25zIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGlzIGNvbnRleHQuIEZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBpbnRvIHRoZXNlIGtleSBmdW5jdGlvbnMgaXMgaW4gb3JkZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNjg4LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTU6MTE6MTkuMTcyMzk3NTA5WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzY2LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzY2OlxcdFxcdGlmIChpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19ISVBFUilcXG4gNzY3OlxcdFxcdFxcdGVyciA9IGl1Y3Zfc2VuZF9jdHJsKHNvY2stXFx1MDAzZXNrLCBBRl9JVUNWX0ZMQUdfU1lOKTtcXG4gNzY4OlxcdFxcdGVsc2VcXG4gNzY5OlxcdFxcdFxcdGVyciA9IGFmaXVjdl9wYXRoX2Nvbm5lY3Qoc29jaywgYWRkcik7XFxuIDc3MDpcXHRcXHRpZiAoZXJyKVxcbiA3NzE6XFx0XFx0XFx0Z290byBkb25lO1xcbiA3NzI6XFx0XFxuIDc3MzpcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlICE9IElVQ1ZfQ09OTkVDVEVEKVxcbiA3NzQ6XFx0XFx0XFx0ZXJyID0gaXVjdl9zb2NrX3dhaXQoc2ssIGl1Y3Zfc29ja19pbl9zdGF0ZShzaywgSVVDVl9DT05ORUNURUQsXFxuIDc3NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgSVVDVl9ESVNDT05OKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTU6MTE6MTkuMTcyNTIyNzE5WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxOTczMDg3NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IGxvZ2ljLCB0YWlsb3JlZCBmb3IgYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKlVuZGVyc3RhbmRpbmcgdGhlIElVQ1YgVHJhbnNwb3J0IEZsb3cqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgSVVDViBjb2RlLCBhbmQgaXQncyBjcnlzdGFsIGNsZWFyIHRoYXQgd2hlbiB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGBBRl9JVUNWX1RSQU5TX0hJUEVSYCB0cmFuc3BvcnQgdHlwZSwgdGhlIGNvbnRyb2wgZmxvdyBkaXZlcmdlcyAqc2lnbmlmaWNhbnRseSouIFRoZSBrZXkgaXMgdGhpcyBjb25kaXRpb25hbCBjaGVjazogYGlmIChpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSKWAuIElmIHRoYXQgZXZhbHVhdGVzIHRvIHRydWUsIHdlJ3JlIHRha2luZyB0aGUgYGl1Y3Zfc2VuZF9jdHJsYCBwYXRoLiBUaGlzIGlzIGNydWNpYWwgYmVjYXVzZSBpdCBtZWFucyB3ZSdyZSAqYnlwYXNzaW5nKiB0aGUgdXN1YWwgYGFmaXVjdl9wYXRoX2Nvbm5lY3RgIGNhbGwsIHdoaWNoIGlzIHdoYXQgSSB3b3VsZCBoYXZlIGV4cGVjdGVkLiBUaGF0J3MgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gZm9yIHN1cmUsIGJ1dCBpdCBhbHNvIG1lYW5zIHRoZSB3aG9sZSBoYW5kc2hha2UgcHJvY2VzcyBpcyBwcm9iYWJseSBkaWZmZXJlbnQuXG5cblRoZSBzZWNvbmQgcGFydCBJIHNlZSBpcyB0aGF0IHRoZSBgaXVjdi1cdTAwM2V0cmFuc3BvcnRgIGZpZWxkIGlzICppbml0aWFsaXplZCogZHVyaW5nIHRoZSBgaXVjdl9zb2NrX2FsbG9jYCBjYWxsLiBUaGlzIHRlbGxzIG1lIHRoYXQgdGhlIHNwZWNpZmljIHRyYW5zcG9ydCBtZXRob2Qgd2UgYXJlIHVzaW5nIGZvciB0aGlzIHNvY2tldCBpcyBkZXRlcm1pbmVkICpiZWZvcmUqIHdlIGV2ZW4gZ2V0IHRvIHRoYXQgYGlmYCBzdGF0ZW1lbnQuIEl0J3Mgc2V0IHVwIGluIHRoYXQgaW5pdGlhbCBhbGxvY2F0aW9uIHBoYXNlLCBzbyB0aGF0IGluZm9ybWF0aW9uIGlzIHZpdGFsLCBhcyBpdCdzIHRoZSBcInRyaWdnZXJcIiBmb3IgdGhlIGNvZGUgdG8gdGFrZSB0aGUgSGlwZXIgcGF0aC4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgYWxsb2NhdGlvbiBsb2dpYyB0byBzZWUgZXhhY3RseSBob3cgYW5kIHdoZW4gYGl1Y3YtXHUwMDNldHJhbnNwb3J0YCBpcyBzZXQgYW5kIHdoYXQgdGhlIHBvc3NpYmxlIHZhbHVlcyBhcmUuIFRoaXMgaXMgYWxsIGFib3V0IGhvdyB3ZSdyZSBoYW5kbGluZyB0aGUgdW5kZXJseWluZyBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYW5kIGRhdGEgdHJhbnNmZXIgZm9yIEhpcGVyLCB2ZXJzdXMgdGhlIHN0YW5kYXJkIElVQ1YgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIxNTksIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE1OjExOjI1LjM2OTgzNTA3WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDY3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDkyLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDkyOlxcdFxcdG1lbXNldChcXHUwMDI2aXVjdi1cXHUwMDNlaW5pdCwgMCwgc2l6ZW9mKGl1Y3YtXFx1MDAzZWluaXQpKTtcXG4gNDkzOlxcdFxcdGlmIChwcl9pdWN2KVxcbiA0OTQ6XFx0XFx0XFx0aXVjdi1cXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xcbiA0OTU6XFx0XFx0ZWxzZVxcbiA0OTY6XFx0XFx0XFx0aXVjdi1cXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19ISVBFUjtcXG4gNDk3OlxcdFxcbiA0OTg6XFx0XFx0c2stXFx1MDAzZXNrX2Rlc3RydWN0ID0gaXVjdl9zb2NrX2Rlc3RydWN0O1xcbiA0OTk6XFx0XFx0c2stXFx1MDAzZXNrX3NuZHRpbWVvID0gSVVDVl9DT05OX1RJTUVPVVQ7XFxuIDUwMDpcXHRcXG4gNTAxOlxcdFxcdHNvY2tfcmVzZXRfZmxhZyhzaywgU09DS19aQVBQRUQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNToxMToyNS4zNzAwMzc4OFoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzcyMzU0ODcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCBsb2dpYywgYXMgaWYgaXQgd2VyZSBteSBvd24gdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgYSBzdW1tYXJ5IGZvciBhIGZlbGxvdyBleHBlcnQ6XG5cbioqVW5kZXJzdGFuZGluZyBJVUNWIFRyYW5zcG9ydCBJbml0aWFsaXphdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSWYgSSdtIHJlYWRpbmcgdGhpcyBjb3JyZWN0bHksIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYW4gSVVDViB0cmFuc3BvcnQuIFRoZSBjb3JlIGNvbmNlcHQgaGVyZSBoaW5nZXMgb24gdGhpcyBgcHJfaXVjdmAgdmFyaWFibGUuIFRoZSBzbmlwcGV0IGluZGljYXRlcyB0aGF0IHdoZW4gYHByX2l1Y3ZgIGlzIGBOVUxMYCwgd2hpY2ggbGlrZWx5IG1lYW5zIGl0IGhhc24ndCBiZWVuIGV4cGxpY2l0bHkgY29uZmlndXJlZCBvciBpcyBpbiBzb21lIGRlZmF1bHQgc3RhdGUsIHRoZW4gYGl1Y3YtXHUwMDNldHJhbnNwb3J0YCBpcyBhdXRvbWF0aWNhbGx5IHNldCB0byBgQUZfSVVDVl9UUkFOU19ISVBFUmAuIFNvLCBpZiB0aGF0IHBvaW50ZXIgaXMgdW5pbml0aWFsaXplZCBvciBub3QgcG9pbnRpbmcgdG8gYW55dGhpbmcgbWVhbmluZ2Z1bCwgdGhlIGltcGxpY2F0aW9uIGlzIHRoYXQgd2UncmUgZmFsbGluZyBiYWNrIHRvIHRoZSBIaXBlclNvY2tldHMgSVVDViB0cmFuc3BvcnQuXG5cbkNydWNpYWxseSwgaXQgaXMgc2F5aW5nIHRoYXQgYHByX2l1Y3ZgIGlzIGJlaW5nIGFzc2lnbmVkIGEgdmFsdWUgbGF0ZXIgb24gZHVyaW5nIHRoZSBgYWZpdWN2X2luaXRgIHBoYXNlLiBUaGlzIGZ1bmN0aW9uIGlzIG9idmlvdXNseSB3aGVyZSB0aGUgY3JpdGljYWwgY29uZmlndXJhdGlvbiBkZXRhaWxzIGFyZSBsb2FkZWQgb3IgZGV0ZXJtaW5lZC4gSSBjYW4gaW1hZ2luZSB0aGF0IGBhZml1Y3ZfaW5pdGAgbGlrZWx5IGNoZWNrcyBmb3Igc29tZXRoaW5nLCBwZXJoYXBzIGEgY29uZmlndXJhdGlvbiBmaWxlLCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgb3Igc29tZSBvdGhlciBzeXN0ZW0gc2V0dGluZyB0byBkZWNpZGUgd2hpY2ggc3BlY2lmaWMgSVVDViB0cmFuc3BvcnQgbW9kZSB0byB1c2UuIElmIHRoYXQgY29uZmlndXJhdGlvbiBpcyBhYnNlbnQsIG9yIGRvZXNuJ3Qgc3BlY2lmeSBhIHBhcnRpY3VsYXIgdHJhbnNwb3J0LCB0aGVuIGBwcl9pdWN2YCB3b3VsZCBsb2dpY2FsbHkgcmVtYWluIGBOVUxMYCwgY2F1c2luZyB0aGUgY29kZSB0byBkZWZhdWx0IHRvIEhpcGVyU29ja2V0cy4gVGhpcyBtaWdodCBiZSBhIGxlZ2FjeSBzZXR0aW5nIG9yIGEgZmFpbHNhZmUgbWVjaGFuaXNtLiBJdCBpcyBjcml0aWNhbCB0byBpbnZlc3RpZ2F0ZSBob3cgYHByX2l1Y3ZgIGlzIHBvcHVsYXRlZCBkdXJpbmcgYGFmaXVjdl9pbml0YCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgZGVjaXNpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNzk2LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNToxMTozMS4xNDIzOTU5ODJaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk5NjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjk0LFxuICBcIkxpbmVDb3VudFwiOiAxN1xufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMjk0OlxcdHN0YXRpYyBpbnQgX19pbml0IGFmaXVjdl9pbml0KHZvaWQpXFxuMjI5NTpcXHR7XFxuMjI5NjpcXHRcXHRpbnQgZXJyO1xcbjIyOTc6XFx0XFxuMjI5ODpcXHRcXHRpZiAobWFjaGluZV9pc192bSgpIFxcdTAwMjZcXHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0lVQ1YpKSB7XFxuMjI5OTpcXHRcXHRcXHRjcGNtZChcXFwiUVVFUlkgVVNFUklEXFxcIiwgaXVjdl91c2VyaWQsIHNpemVvZihpdWN2X3VzZXJpZCksIFxcdTAwMjZlcnIpO1xcbjIzMDA6XFx0XFx0XFx0aWYgKHVubGlrZWx5KGVycikpIHtcXG4yMzAxOlxcdFxcdFxcdFxcdFdBUk5fT04oZXJyKTtcXG4yMzAyOlxcdFxcdFxcdFxcdGVyciA9IC1FUFJPVE9OT1NVUFBPUlQ7XFxuMjMwMzpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4yMzA0OlxcdFxcdFxcdH1cXG4yMzA1OlxcdFxcbjIzMDY6XFx0XFx0XFx0cHJfaXVjdiA9IFxcdTAwMjZpdWN2X2lmO1xcbjIzMDc6XFx0XFx0fSBlbHNlIHtcXG4yMzA4OlxcdFxcdFxcdG1lbXNldChcXHUwMDI2aXVjdl91c2VyaWQsIDAsIHNpemVvZihpdWN2X3VzZXJpZCkpO1xcbjIzMDk6XFx0XFx0XFx0cHJfaXVjdiA9IE5VTEw7XFxuMjMxMDpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE1OjExOjMxLjE0Mjg5OTI2MloiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjMyMzA0NTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaXVjdl9zZXZlcl9wYXRoIExvZ2ljKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJZiBgbWFjaGluZV9pc192bSgpYCByZXR1cm5zIGZhbHNlLCB0aGVuIHRoZSBgcHJfaXVjdmAgcG9pbnRlciBpcyBudWxsLiBBbmQgd2Uga25vdyB0aGF0IGBtYWNoaW5lX2lzX3ZtKClgIGlzIGZhbHNlIHdoZW4gd2UncmUgcnVubmluZyB1bmRlciBRRU1VLiBUaGF0IG1lYW5zIHRoZSBzcGVjaWZpYyBjb2RlIG1vZGlmaWNhdGlvbnMgbWFkZSB3aXRoaW4gYGl1Y3Zfc2V2ZXJfcGF0aGAgYXJlICpuZXZlciogcmVhY2hlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4gXG5cbkJ1dCBob2xkIG9uLi4uIGlzIHRoZXJlIGFueSBvdGhlciBwb3NzaWJsZSBwYXRoIHRvIGBpdWN2X3NldmVyX3BhdGhgIHRoYXQgY291bGQgc29tZWhvdyBzZXQgYGl1Y3YtXHUwMDNlcGF0aGA/IEkgZG9uJ3QgdGhpbmsgc28sIGJlY2F1c2UgYXMgZmFyIGFzIEkgY2FuIHNlZSwgYGl1Y3YtXHUwMDNlcGF0aGAgaXMgKm5ldmVyKiBpbml0aWFsaXplZCBhbnl3aGVyZSBpbiB0aGUgY29kZS5cblxuV2FpdCwgbGV0J3MgY29uc2lkZXIgYSBzY2VuYXJpbzogd2hhdCBpZiBgeGNoZyhcdTAwMjZpdWN2LVx1MDAzZXBhdGgsIE5VTEwpYCBpcyBjYWxsZWQgd2hlbiBgaXVjdi1cdTAwM2VwYXRoYCAqaXMqIGFscmVhZHkgTlVMTD8gVGhhdCB3b3VsZCBiZSBpbnRlcmVzdGluZy4gU2luY2UgaXQgcmV0dXJucyBOVUxMLCB0aGUgY29uZGl0aW9uYWwgYGlmICh4Y2hnKFx1MDAyNml1Y3YtXHUwMDNlcGF0aCwgTlVMTCkpYCBpcyBza2lwcGVkLCByaWdodD8gQW5kIHRoZSBwYXRjaCAqb25seSogbW9kaWZpZXMgY29kZSBpbnNpZGUgdGhhdCBgaWZgIGJsb2NrLCBtYWtpbmcgaXQgaW5hY2Nlc3NpYmxlLiBTbywgcmVnYXJkbGVzcyBvZiB0aGUgVk0gc3RhdGUsIHRoaXMgbW9kaWZpY2F0aW9uIGlzIG5ldmVyIHJlYWNoYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM1MDIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNToxMTozNi4zNzUyMDU5NTRaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzMTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzcsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMzc6XFx0XFx0dW5zaWduZWQgY2hhciB1c2VyX2RhdGFbMTZdO1xcbiAzMzg6XFx0XFx0c3RydWN0IGl1Y3Zfc29jayAqaXVjdiA9IGl1Y3Zfc2soc2spO1xcbiAzMzk6XFx0XFx0c3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCA9IGl1Y3YtXFx1MDAzZXBhdGg7XFxuIDM0MDpcXHRcXHRzdHJ1Y3Qgc29ja19tc2dfcSAqcCwgKm47XFxuIDM0MTpcXHRcXG4gMzQyOlxcdFxcdC8qIFdob2V2ZXIgcmVzZXRzIHRoZSBwYXRoIHBvaW50ZXIsIG11c3Qgc2V2ZXIgYW5kIGZyZWUgaXQuICovXFxuIDM0MzpcXHRcXHRpZiAoeGNoZyhcXHUwMDI2aXVjdi1cXHUwMDNlcGF0aCwgTlVMTCkpIHtcXG4gMzQ0OlxcdFxcdFxcdGlmICh3aXRoX3VzZXJfZGF0YSkge1xcbiAzNDU6XFx0XFx0XFx0XFx0bG93X25tY3B5KHVzZXJfZGF0YSwgaXVjdi1cXHUwMDNlc3JjX25hbWUpO1xcbiAzNDY6XFx0XFx0XFx0XFx0aGlnaF9ubWNweSh1c2VyX2RhdGEsIGl1Y3YtXFx1MDAzZWRzdF9uYW1lKTtcXG4gMzQ3OlxcdFxcdFxcdFxcdEFTQ0VCQyh1c2VyX2RhdGEsIHNpemVvZih1c2VyX2RhdGEpKTtcXG4gMzQ4OlxcdFxcdFxcdFxcdHByX2l1Y3YtXFx1MDAzZXBhdGhfc2V2ZXIocGF0aCwgdXNlcl9kYXRhKTtcXG4gMzQ5OlxcdFxcdFxcdH0gZWxzZVxcbiAzNTA6XFx0XFx0XFx0XFx0cHJfaXVjdi1cXHUwMDNlcGF0aF9zZXZlcihwYXRoLCBOVUxMKTtcXG4gMzUxOlxcdFxcdFxcdGl1Y3ZfcGF0aF9mcmVlKHBhdGgpO1xcbiAzNTI6XFx0XFxuIDM1MzpcXHRcXHRcXHQvKlxcbiAzNTQ6XFx0XFx0XFx0ICogTWVzc2FnZSBub3RpZmljYXRpb25zIHF1ZXVlZCBvbiBtZXNzYWdlX3Egc3RpbGwgcmVmZXJlbmNlXFxuIDM1NTpcXHRcXHRcXHQgKiB0aGUgbm93IGZyZWVkIHBhdGg7IGRyb3AgdGhlbSwgb3RoZXJ3aXNlIGEgbGF0ZXIgcmVjdm1zZygpXFxuIDM1NjpcXHRcXHRcXHQgKiB3b3VsZCBwYXNzIHRoZSBmcmVlZCBpdWN2X3BhdGggdG8gbWVzc2FnZV9yZWNlaXZlKCkgdmlhXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE1OjExOjM2LjM3NTM0MTE2NFoiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MzM1NzQ1NDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb24gb2YgdGhpcyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYWRkcmVzcyBhIHBvdGVudGlhbCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZSB3aXRoaW4gdGhlIGBpdWN2YCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSB3aGVuIGEgcGF0aCBpcyBmcmVlZC4gVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGludm9sdmVzIGNsZWFyaW5nIGEgbWVzc2FnZSBxdWV1ZSAoYGl1Y3YtXHUwMDNlbWVzc2FnZV9xYCkgYWZ0ZXIgdGhlIGBpdWN2LVx1MDAzZXBhdGhgIGlzIHNldCB0byBgTlVMTGAuIFRoZSBjb2RlIHNuaXBwZXQgY2xlYXJseSBzaG93cyB0aGlzIG9wZXJhdGlvbiB3aXRoaW4gYW4gYGlmICh4Y2hnKFx1MDAyNml1Y3YtXHUwMDNlcGF0aCwgTlVMTCkpYCBibG9jay4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBuZXZlciBleGVjdXRlZCBpbiB0aGUgZW52aXJvbm1lbnRzIEkgdHlwaWNhbGx5IGRlYWwgd2l0aCwgbGlrZSBRRU1VIG9yIEdDRSwgYmVjYXVzZSB0aGUgYGl1Y3YtXHUwMDNlcGF0aGAgaXMgYWx3YXlzIE5VTEwgaW4gdGhvc2Ugc2NlbmFyaW9zLiBUaGlzIHN1Z2dlc3RzIHRoZSBwYXRjaCB0YXJnZXRzIGFuIHVucmVhY2hhYmxlIGNvZGUgcGF0aCBpbiB0aGVzZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXG5cbk5vdywgd2FpdCBhIHNlY29uZC4gSXMgdGhlcmUgZXZlbiBhIHdheSB0byBydW4gei9WTSAqaW5zaWRlKiBRRU1VPyBObywgdGhhdCdzIGEgcHJvcHJpZXRhcnkgSUJNIGh5cGVydmlzb3IsIGFuZCBRRU1VIGRvZXNuJ3QgZW11bGF0ZSBpdC4gT2theSwgc28gd2Uga25vdyB0aGF0IHBhcnQuIENvdWxkIHdlIHNvbWVob3cgKmZha2UqIGBtYWNoaW5lX2lzX3ZtKClgIHRvIHRyaWdnZXIgdGhpcyBjb2RlPyBObywgdGhlIGNvZGUgY2hlY2tzIHRoZSBDUFUgSUQgaW5zdHJ1Y3Rpb24gKFNUU0kgb3Igc2ltaWxhcikgdG8gZGV0ZWN0IEtWTSBvciBRRU1VLCBzbyB0aGF0J3MgYSBkZWFkIGVuZC4gQWgsIGJ1dCB3YWl0LCBgZGV0ZWN0X21hY2hpbmVfdHlwZWAgdXNlcyBgc3RzaWAgdG8gZ2V0IHRoZSBWTSBpbmZvcm1hdGlvbuKApiBTbywgY291bGQgd2UgcG90ZW50aWFsbHkgcGFzcyBhIGZsYWcgdG8gUUVNVSB0byAqc3Bvb2YqIHRoZSBDUEkgKENvbnRyb2wgUHJvZ3JhbSBJZGVudGlmaWNhdGlvbikgYW5kIHByZXRlbmQgd2UncmUgei9WTT8gVGhhdCAqbWlnaHQqIGJlIHBvc3NpYmxlLCBidXQgbXkgc3RhbmRhcmQgc3l6a2FsbGVyIGVudmlyb25tZW50cyBkb24ndCBkbyBhbnl0aGluZyBsaWtlIHRoYXQuXG5cblRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IG1lbnRpb25zIFwiaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZVwiLiBTaW5jZSB0aGlzIHJlcXVpcmVzIHovVk0gYW5kIGNhbid0IGJlIHJlYWNoZWQgaW4gc3RhbmRhcmQgUUVNVS9LVk0gZW52aXJvbm1lbnRzLCBpdCAqZG9lcyogZmFsbCB1bmRlciB0aGUgXCJpbXBvc3NpYmxlIHRvIHJlYWNoXCIgY2F0ZWdvcnkgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGNvbnRleHQuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBvbmUgdGhpbmcuIENhbiBgQUZfSVVDVmAgZXZlbiBiZSB1c2VkIG92ZXIgSGlwZXJTb2NrZXRzLCBhbmQgaWYgc28sIGRvZXMgaXQgdXNlIHRoZSBgbWVzc2FnZV9xYD8gSWYgYEFGX0lVQ1ZgIHVzZXMgSGlwZXJTb2NrZXRzLCBgaXVjdi1cdTAwM2V0cmFuc3BvcnRgIHNob3VsZCBiZSBgQUZfSVVDVl9UUkFOU19ISVBFUmAsIGJ1dCBJJ2xsIG5lZWQgdG8gY29uZmlybSBpZiB0aGF0IGNvZGUgcGF0aCBldmVuIHRvdWNoZXMgdGhlIGBtZXNzYWdlX3FgLiBUaW1lIHRvIGRvdWJsZSBjaGVjayB0aGUgY29kZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDM5NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE1OjExOjQ1LjcxMTA5MDUxWiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDUzMzg0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVzc2FnZV9xXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmM9MzM1PXN0YXRpYyB2b2lkIGl1Y3Zfc2V2ZXJfcGF0aChzdHJ1Y3Qgc29jayAqc2ssIGludCB3aXRoX3VzZXJfZGF0YSlcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNTMtXFx0XFx0LypcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MzU0OlxcdFxcdCAqIE1lc3NhZ2Ugbm90aWZpY2F0aW9ucyBxdWV1ZWQgb24gbWVzc2FnZV9xIHN0aWxsIHJlZmVyZW5jZVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNTUtXFx0XFx0ICogdGhlIG5vdyBmcmVlZCBwYXRoOyBkcm9wIHRoZW0sIG90aGVyd2lzZSBhIGxhdGVyIHJlY3Ztc2coKVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNTYtXFx0XFx0ICogd291bGQgcGFzcyB0aGUgZnJlZWQgaXVjdl9wYXRoIHRvIG1lc3NhZ2VfcmVjZWl2ZSgpIHZpYVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzozNTc6XFx0XFx0ICogaXVjdl9wcm9jZXNzX21lc3NhZ2VfcSgpLlxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNTgtXFx0XFx0ICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjM1OTpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNml1Y3YtXFx1MDAzZW1lc3NhZ2VfcS5sb2NrKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MzYwOlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuLCBcXHUwMDI2aXVjdi1cXHUwMDNlbWVzc2FnZV9xLmxpc3QsIGxpc3QpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzYxLVxcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZwLVxcdTAwM2VsaXN0KTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNjMtXFx0XFx0fVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzozNjQ6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNml1Y3YtXFx1MDAzZW1lc3NhZ2VfcS5sb2NrKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzY1LVxcdH1cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz00NjY9c3RhdGljIHN0cnVjdCBzb2NrICppdWN2X3NvY2tfYWxsb2Moc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvLCBnZnBfdCBwcmlvLCBpbnQga2VybilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy00NzktXFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2aXVjdi1cXHUwMDNlc2VuZF9za2JfcSk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjQ4MDpcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2aXVjdi1cXHUwMDNlbWVzc2FnZV9xLmxpc3QpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzo0ODE6XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNml1Y3YtXFx1MDAzZW1lc3NhZ2VfcS5sb2NrKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDgyLVxcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNml1Y3YtXFx1MDAzZWJhY2tsb2dfc2tiX3EpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTExMjY9c3RhdGljIHN0cnVjdCBza19idWZmICphbGxvY19pdWN2X3JlY3Zfc2tiKHVuc2lnbmVkIGxvbmcgbGVuKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTExNTUtICpcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTE1NjogKiBMb2NraW5nOiBtdXN0IGJlIGNhbGxlZCB3aXRoIG1lc3NhZ2VfcS5sb2NrIGhlbGRcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTE1Ny0gKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTE1OD1zdGF0aWMgdm9pZCBpdWN2X3Byb2Nlc3NfbWVzc2FnZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTIxNC1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTIxNTovKiBpdWN2X3Byb2Nlc3NfbWVzc2FnZV9xKCkgLSBQcm9jZXNzIG91dHN0YW5kaW5nIElVQ1YgbWVzc2FnZXNcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTIxNi0gKlxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMjE3OiAqIExvY2tpbmc6IG11c3QgYmUgY2FsbGVkIHdpdGggbWVzc2FnZV9xLmxvY2sgaGVsZFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMjE4LSAqL1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMjE5OnN0YXRpYyB2b2lkIGl1Y3ZfcHJvY2Vzc19tZXNzYWdlX3Eoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMjIwLXtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMjI0LVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMjI1OlxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuLCBcXHUwMDI2aXVjdi1cXHUwMDNlbWVzc2FnZV9xLmxpc3QsIGxpc3QpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTIyNi1cXHRcXHRza2IgPSBhbGxvY19pdWN2X3JlY3Zfc2tiKGl1Y3ZfbXNnX2xlbmd0aChcXHUwMDI2cC1cXHUwMDNlbXNnKSk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTIzNz1zdGF0aWMgaW50IGl1Y3Zfc29ja19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMjQ5LVxcdCAgICBza2JfcXVldWVfZW1wdHkoXFx1MDAyNnNrLVxcdTAwM2Vza19yZWNlaXZlX3F1ZXVlKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMjUwOlxcdCAgICBsaXN0X2VtcHR5KFxcdTAwMjZpdWN2LVxcdTAwM2VtZXNzYWdlX3EubGlzdCkpXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEyNTEtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTMxOC1cXHRcXHQvKiBRdWV1ZSBiYWNrbG9nIHNrYnMgKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTMxOTpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNml1Y3YtXFx1MDAzZW1lc3NhZ2VfcS5sb2NrKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTMyMC1cXHRcXHRyc2tiID0gc2tiX2RlcXVldWUoXFx1MDAyNml1Y3YtXFx1MDAzZWJhY2tsb2dfc2tiX3EpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEzMzEtXFx0XFx0aWYgKHNrYl9xdWV1ZV9lbXB0eShcXHUwMDI2aXVjdi1cXHUwMDNlYmFja2xvZ19za2JfcSkpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTMzMjpcXHRcXHRcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNml1Y3YtXFx1MDAzZW1lc3NhZ2VfcS5saXN0KSlcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTMzMzpcXHRcXHRcXHRcXHRpdWN2X3Byb2Nlc3NfbWVzc2FnZV9xKHNrKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTMzNC1cXHRcXHRcXHRpZiAoYXRvbWljX3JlYWQoXFx1MDAyNml1Y3YtXFx1MDAzZW1zZ19yZWN2KSBcXHUwMDNlPVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEzNDItXFx0XFx0fVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMzQzOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZpdWN2LVxcdTAwM2VtZXNzYWdlX3EubG9jayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEzNDQtXFx0fVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTE3MTI9c3RhdGljIHZvaWQgaXVjdl9jYWxsYmFja19yeChzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLCBzdHJ1Y3QgaXVjdl9tZXNzYWdlICptc2cpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTcyNC1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTcyNTpcXHRzcGluX2xvY2soXFx1MDAyNml1Y3YtXFx1MDAzZW1lc3NhZ2VfcS5sb2NrKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTcyNi1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTcyNzpcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNml1Y3YtXFx1MDAzZW1lc3NhZ2VfcS5saXN0KSB8fFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNzI4LVxcdCAgICAhc2tiX3F1ZXVlX2VtcHR5KFxcdTAwMjZpdWN2LVxcdTAwM2ViYWNrbG9nX3NrYl9xKSlcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNzQ5LVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNzUwOlxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnNhdmVfbXNnLVxcdTAwM2VsaXN0LCBcXHUwMDI2aXVjdi1cXHUwMDNlbWVzc2FnZV9xLmxpc3QpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNzUxLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNzUyLW91dF91bmxvY2s6XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE3NTM6XFx0c3Bpbl91bmxvY2soXFx1MDAyNml1Y3YtXFx1MDAzZW1lc3NhZ2VfcS5sb2NrKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTc1NC19XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjAxMT1zdGF0aWMgaW50IGFmaXVjdl9oc19jYWxsYmFja19yeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA0MC1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjA0MTpcXHRzcGluX2xvY2soXFx1MDAyNml1Y3YtXFx1MDAzZW1lc3NhZ2VfcS5sb2NrKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA0Mi1cXHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFxcdTAwMjZpdWN2LVxcdTAwM2ViYWNrbG9nX3NrYl9xKSkge1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwNDctXFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNml1Y3Zfc2soc2spLVxcdTAwM2ViYWNrbG9nX3NrYl9xLCBza2IpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMDQ4OlxcdHNwaW5fdW5sb2NrKFxcdTAwMjZpdWN2LVxcdTAwM2VtZXNzYWdlX3EubG9jayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwNDktXFx0cmV0dXJuIE5FVF9SWF9TVUNDRVNTO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNToxMTo0NS44MTY0MzUxOVoiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NjI5NDQ0OTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSVVDViBNZXNzYWdpbmcgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIHRoYXQgYG1lc3NhZ2VfcWAgaXMgdGhlIGNyaXRpY2FsIGRhdGEgc3RydWN0dXJlLCBhbmQgaXQncyBiZWluZyB1c2VkIGZvciBib3RoIGBBRl9JVUNWX1RSQU5TX0lVQ1ZgIGFuZCBgQUZfSVVDVl9UUkFOU19ISVBFUmAsIHdoaWNoIGlzIHRoZSBmaXJzdCBwb2ludCBvZiBpbnRlcmVzdC4gQSBxdWljayBnbGFuY2UgYXQgYGFmaXVjdl9oc19jYWxsYmFja19yeGAgcmV2ZWFscyBpdCB1c2VzIHRoZSBsb2NrIG9uIGBtZXNzYWdlX3FgIGFuZCBgYmFja2xvZ19za2JfcWAsIGJ1dCBub3QgdGhlIGxpc3QgaXRzZWxmLiBJbnRlcmVzdGluZy4gVGhlIGBtZXNzYWdlX3EubGlzdGAsIG9uIHRoZSBvdGhlciBoYW5kLCBzZWVtcyB0byBiZSBleGNsdXNpdmVseSB1c2VkIGluIGBpdWN2X2NhbGxiYWNrX3J4YCwgd2hpY2ggaXMgdGllZCBkaXJlY3RseSB0byBgQUZfSVVDVl9UUkFOU19JVUNWYC5cblxuVGhlbiBJIHNlZSB0aGlzIHBhdGNoLCBhbmQgaXQgZXhwbGljaXRseSBjbGVhcnMgYG1lc3NhZ2VfcS5saXN0YCwgdXNpbmcgYSBzcGlubG9jayB0byBwcm90ZWN0IGl0OlxuXG5gYGBjXG4rXHRcdHNwaW5fbG9ja19iaChcdTAwMjZpdWN2LVx1MDAzZW1lc3NhZ2VfcS5sb2NrKTtcbitcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG4sIFx1MDAyNml1Y3YtXHUwMDNlbWVzc2FnZV9xLmxpc3QsIGxpc3QpIHtcbitcdFx0XHRsaXN0X2RlbChcdTAwMjZwLVx1MDAzZWxpc3QpO1xuK1x0XHRcdGtmcmVlKHApO1xuK1x0XHR9XG4rXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNml1Y3YtXHUwMDNlbWVzc2FnZV9xLmxvY2spO1xuYGBgXG5cbk9rYXksIHNvIHRoZSBwYXRjaCBpcyBmb2N1c2luZyBvbiBjbGVhcmluZyB0aGUgbGlzdCwgd2hpY2ggc3VnZ2VzdHMgaXQncyBwcmltYXJpbHkgY29uY2VybmVkIHdpdGggdGhlIGBBRl9JVUNWX1RSQU5TX0lVQ1ZgIHBhdGguIEFuZCBub3cgSSBuZWVkIHRvIGFuYWx5emUgYGl1Y3Zfc2V2ZXJfcGF0aGAuIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgd2hlbiBgeGNoZyhcdTAwMjZpdWN2LVx1MDAzZXBhdGgsIE5VTEwpYCByZXR1cm5zIG5vbi1OVUxMLiBDcml0aWNhbGx5LCBgaXVjdi1cdTAwM2VwYXRoYCBpcyAqb25seSogc2V0IGZvciBgQUZfSVVDVl9UUkFOU19JVUNWYC4gU28sIGV2ZW4gaWYgYG1lc3NhZ2VfcWAgd2VyZSBzb21laG93IHVzZWQgZm9yIEhJUEVSLCB3aGljaCBpdCBpc24ndCBjb21wbGV0ZWx5LCBgaXVjdl9zZXZlcl9wYXRoYCB3b3VsZCBkbyBub3RoaW5nIGluIHRoYXQgY2FzZSBiZWNhdXNlIGBpdWN2LVx1MDAzZXBhdGhgIGlzIE5VTEwuXG5cblRoZXJlZm9yZSwgdGhpcyBlbnRpcmUgY29kZSBtb2RpZmljYXRpb24gaXMgKnN0cmljdGx5KiB0YXJnZXRlZCBhdCBgQUZfSVVDVl9UUkFOU19JVUNWYCwgYW5kIGJ5IGV4dGVuc2lvbiwgdGhhdCdzIHovVk0gc3BlY2lmaWMuIE5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIG9uZSB0aGluZy4gSXMgdGhlcmUgYW55IHNjZW5hcmlvIHdoZXJlIGBpdWN2LVx1MDAzZXBhdGhgIGNvdWxkIGJlIHNldCB3aXRob3V0IGBwcl9pdWN2YCBiZWluZyBub24tTlVMTD8gSSBuZWVkIHRvIGxvb2sgYXQgYGl1Y3ZfcGF0aF9hbGxvY2AgdG8gYmUgY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc3MjEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTU6MTE6NTUuNDQ1ODg0OTM1WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTIzNzA3NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXVjdl9wYXRoX2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmM9Njg3PXN0YXRpYyBpbnQgYWZpdWN2X3BhdGhfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy02OTktXFx0LyogQ3JlYXRlIHBhdGguICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjcwMDpcXHRpdWN2LVxcdTAwM2VwYXRoID0gaXVjdl9wYXRoX2FsbG9jKGl1Y3YtXFx1MDAzZW1zZ2xpbWl0LFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03MDEtXFx0XFx0XFx0XFx0ICAgICBJVUNWX0lQUk1EQVRBLCBHRlBfS0VSTkVMKTtcXG4tLVxcbm5ldC9pdWN2L2l1Y3YuYz0xNDY4PXN0YXRpYyB2b2lkIGl1Y3ZfcGF0aF9wZW5kaW5nKHN0cnVjdCBpdWN2X2lycV9kYXRhICpkYXRhKVxcbi0tXFxubmV0L2l1Y3YvaXVjdi5jLTE0NzctXFx0ZXJyb3IgPSBpdWN2X2Vycm9yX25vX21lbW9yeTtcXG5uZXQvaXVjdi9pdWN2LmM6MTQ3ODpcXHRwYXRoID0gaXVjdl9wYXRoX2FsbG9jKGlwcC1cXHUwMDNlaXBtc2dsaW0sIGlwcC1cXHUwMDNlaXBmbGFnczEsIEdGUF9BVE9NSUMpO1xcbm5ldC9pdWN2L2l1Y3YuYy0xNDc5LVxcdGlmICghcGF0aClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTU6MTE6NTUuNTU4MjYyNTM1WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkzMjc2MTEzNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5yZWFjaGFibGUgQ29kZSBBbmFseXNpcyoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIGBpdWN2X3BhdGhfYWxsb2NgIGlzIGRlZmluZWQgaW4gYG5ldC9pdWN2L2l1Y3YuY2AuIEhvd2V2ZXIsIHRoZSBvbmx5IGNhbGwgc2l0ZSB3aXRoaW4gYGFmX2l1Y3YuY2AgaXMgYGFmaXVjdl9wYXRoX2Nvbm5lY3RgLiBOb3csIGBhZml1Y3ZfcGF0aF9jb25uZWN0YCBpcyBvbmx5IGVudGVyZWQgaWYgYGl1Y3YtXHUwMDNldHJhbnNwb3J0YCBpc24ndCBgQUZfSVVDVl9UUkFOU19ISVBFUmAuIEFuZCB0aGF0IHNwZWNpZmljIGNvbmRpdGlvbiAoYCE9IEFGX0lVQ1ZfVFJBTlNfSElQRVJgKSBpcyBvbmx5IG1ldCBpZiBgcHJfaXVjdmAgaGFzIGEgdmFsdWUuIFRoZW4sIGBwcl9pdWN2YCBnZXRzIGFzc2lnbmVkIGEgdmFsdWUgb25seSBpZiBgbWFjaGluZV9pc192bSgpYCByZXR1cm5zIHRydWUuIEZpbmFsbHksIGFuZCB0aGlzIGlzIGtleSwgYG1hY2hpbmVfaXNfdm0oKWAgaXMgb25seSB0cnVlIGlmIHdlJ3JlIHJ1bm5pbmcgdW5kZXIgei9WTS5cblxuTm93LCBob2xkIG9uLi4uIGNhbiBRRU1VIGVtdWxhdGUgei9WTT8gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4gV2hpbGUgUUVNVSdzIHMzOTB4IHRhcmdldCBjZXJ0YWlubHkgZW11bGF0ZXMgei9BcmNoaXRlY3R1cmUsIGl0IHV0aWxpemVzIGVpdGhlciBLVk0gb3IgaXRzIG93biBUQ0cgZm9yIHRoZSBoeXBlcnZpc29yLiBUaGUgY3J1Y2lhbCBwaWVjZSBpcyB0aGF0IHRoZSBgbWFjaGluZV9pc192bSgpYCBmdW5jdGlvbiByZWxpZXMgb24gdGhlIFwiei9WTVwiIHN0cmluZyB3aXRoaW4gdGhlIENvbnRyb2wgUHJvZ3JhbSBJZGVudGlmaWNhdGlvbiAoQ1BJKSBvYnRhaW5lZCB2aWEgdGhlIFNUU0kgaW5zdHJ1Y3Rpb24uIEJ1dCBRRU1VIGFuZCBLVk0gcmV0dXJuIFwiS1ZNL1wiIG9yIFwiUUVNVVwiIGluIHRoZWlyIENQSSByZXNwb25zZXMuIFRoZXJlZm9yZSwgYG1hY2hpbmVfaXNfdm0oKWAgd2lsbCByZXR1cm4gZmFsc2UuXG5cblRoZXJlZm9yZSwgdGhpcyBjb2RlIHBhdGggdGhhdCB3YXMgbW9kaWZpZWQgaXMgY29tcGxldGVseSB1bnJlYWNoYWJsZSBpbiBhbnkgb2Ygb3VyIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLCBuYW1lbHkgUUVNVS9LVk0uIE5vIHBvaW50IGluIHRyeWluZyB0byBmdXp6IGNvZGUgdGhhdCB3b24ndCBydW4sIGFzIHRoZSBwYXRjaCBpcyBvbmx5IHRhcmdldGVkIGF0IHRoZSB6L1ZNIGh5cGVydmlzb3IuXG5JIGFtIHJldHVybmluZyBgV29ydGhGdXp6aW5nPWZhbHNlYCBiYXNlZCBvbiB0aGUgYWJvdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4OTk4LCJPdXRwdXRUb2tlbnMiOjIwNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNToxMjowNC44ODU4NzY3NjJaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaXVjdl9zZXZlcl9wYXRoYCBpbiBgYWZfaXVjdi5jYCB0byBjbGVhciB0aGUgYG1lc3NhZ2VfcWAgbGlzdC4gSG93ZXZlciwgdGhpcyBmdW5jdGlvbiBvbmx5IGV4ZWN1dGVzIGl0cyBsb2dpYyBpZiBgaXVjdi1cXHUwMDNlcGF0aGAgaXMgbm9uLU5VTEwuIGBpdWN2LVxcdTAwM2VwYXRoYCBpcyBvbmx5IGFsbG9jYXRlZCB3aGVuIHRoZSB0cmFuc3BvcnQgaXMgYEFGX0lVQ1ZfVFJBTlNfSVVDVmAsIHdoaWNoIGluIHR1cm4gaXMgb25seSBzZWxlY3RlZCBpZiBgcHJfaXVjdmAgaXMgbm9uLU5VTEwuIGBwcl9pdWN2YCBpcyBpbml0aWFsaXplZCBvbmx5IHdoZW4gYG1hY2hpbmVfaXNfdm0oKWAgaXMgdHJ1ZSwgbWVhbmluZyB0aGUga2VybmVsIG11c3QgYmUgcnVubmluZyB1bmRlciB0aGUgcHJvcHJpZXRhcnkgSUJNIHovVk0gaHlwZXJ2aXNvci4gU2luY2UgUUVNVS9LVk0gZW52aXJvbm1lbnRzIGRvIG5vdCBlbXVsYXRlIHovVk0gKHRoZXkgaWRlbnRpZnkgYXMgS1ZNIG9yIFFFTVUpLCB0aGlzIGNvZGUgcGF0aCBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGl1Y3Zfc2V2ZXJfcGF0aGAgaW4gYGFmX2l1Y3YuY2AgdG8gY2xlYXIgdGhlIGBtZXNzYWdlX3FgIGxpc3QuIEhvd2V2ZXIsIHRoaXMgZnVuY3Rpb24gb25seSBleGVjdXRlcyBpdHMgbG9naWMgaWYgYGl1Y3YtXFx1MDAzZXBhdGhgIGlzIG5vbi1OVUxMLiBgaXVjdi1cXHUwMDNlcGF0aGAgaXMgb25seSBhbGxvY2F0ZWQgd2hlbiB0aGUgdHJhbnNwb3J0IGlzIGBBRl9JVUNWX1RSQU5TX0lVQ1ZgLCB3aGljaCBpbiB0dXJuIGlzIG9ubHkgc2VsZWN0ZWQgaWYgYHByX2l1Y3ZgIGlzIG5vbi1OVUxMLiBgcHJfaXVjdmAgaXMgaW5pdGlhbGl6ZWQgb25seSB3aGVuIGBtYWNoaW5lX2lzX3ZtKClgIGlzIHRydWUsIG1lYW5pbmcgdGhlIGtlcm5lbCBtdXN0IGJlIHJ1bm5pbmcgdW5kZXIgdGhlIHByb3ByaWV0YXJ5IElCTSB6L1ZNIGh5cGVydmlzb3IuIFNpbmNlIFFFTVUvS1ZNIGVudmlyb25tZW50cyBkbyBub3QgZW11bGF0ZSB6L1ZNICh0aGV5IGlkZW50aWZ5IGFzIEtWTSBvciBRRU1VKSwgdGhpcyBjb2RlIHBhdGggaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd9rq8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-07 14:48:57 +0000 UTC FinishedAt: 2026-07-07 15:12:06 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE1OjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBpdWN2X3NldmVyX3BhdGhgIGluIGBhZl9pdWN2LmNgIHRvIGNsZWFyIHRoZSBgbWVzc2FnZV9xYCBsaXN0LiBIb3dldmVyLCB0aGlzIGZ1bmN0aW9uIG9ubHkgZXhlY3V0ZXMgaXRzIGxvZ2ljIGlmIGBpdWN2LVx1MDAzZXBhdGhgIGlzIG5vbi1OVUxMLiBgaXVjdi1cdTAwM2VwYXRoYCBpcyBvbmx5IGFsbG9jYXRlZCB3aGVuIHRoZSB0cmFuc3BvcnQgaXMgYEFGX0lVQ1ZfVFJBTlNfSVVDVmAsIHdoaWNoIGluIHR1cm4gaXMgb25seSBzZWxlY3RlZCBpZiBgcHJfaXVjdmAgaXMgbm9uLU5VTEwuIGBwcl9pdWN2YCBpcyBpbml0aWFsaXplZCBvbmx5IHdoZW4gYG1hY2hpbmVfaXNfdm0oKWAgaXMgdHJ1ZSwgbWVhbmluZyB0aGUga2VybmVsIG11c3QgYmUgcnVubmluZyB1bmRlciB0aGUgcHJvcHJpZXRhcnkgSUJNIHovVk0gaHlwZXJ2aXNvci4gU2luY2UgUUVNVS9LVk0gZW52aXJvbm1lbnRzIGRvIG5vdCBlbXVsYXRlIHovVk0gKHRoZXkgaWRlbnRpZnkgYXMgS1ZNIG9yIFFFTVUpLCB0aGlzIGNvZGUgcGF0aCBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNTowODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDdlYjEyOTM0YzUyYTI5MTRlMTc1MGIxZjJlYzgxZDM4ODYyZDQ5NjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCA3IDE1OjA4OjI5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pdWN2L2FmX2l1Y3YuYyBiL25ldC9pdWN2L2FmX2l1Y3YuY1xuaW5kZXggZmVkMjQwYjQ1M2JkOWIuLjI4NjlhMTAzZjdmYTJhIDEwMDY0NFxuLS0tIGEvbmV0L2l1Y3YvYWZfaXVjdi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXVjdi9hZl9pdWN2LmNcbkBAIC0zMzcsNiAmIzQzOzMzNyw3IEBAIHN0YXRpYyB2b2lkIGl1Y3Zfc2V2ZXJfcGF0aChzdHJ1Y3Qgc29jayAqc2ssIGludCB3aXRoX3VzZXJfZGF0YSlcbiBcdHVuc2lnbmVkIGNoYXIgdXNlcl9kYXRhWzE2XTtcbiBcdHN0cnVjdCBpdWN2X3NvY2sgKml1Y3YgPSBpdWN2X3NrKHNrKTtcbiBcdHN0cnVjdCBpdWN2X3BhdGggKnBhdGggPSBpdWN2LVx1MDAzZXBhdGg7XG4mIzQzO1x0c3RydWN0IHNvY2tfbXNnX3EgKnAsICpuO1xuIFxuIFx0LyogV2hvZXZlciByZXNldHMgdGhlIHBhdGggcG9pbnRlciwgbXVzdCBzZXZlciBhbmQgZnJlZSBpdC4gKi9cbiBcdGlmICh4Y2hnKFx1MDAyNml1Y3YtXHUwMDNlcGF0aCwgTlVMTCkpIHtcbkBAIC0zNDgsNiAmIzQzOzM0OSwxOSBAQCBzdGF0aWMgdm9pZCBpdWN2X3NldmVyX3BhdGgoc3RydWN0IHNvY2sgKnNrLCBpbnQgd2l0aF91c2VyX2RhdGEpXG4gXHRcdH0gZWxzZVxuIFx0XHRcdHByX2l1Y3YtXHUwMDNlcGF0aF9zZXZlcihwYXRoLCBOVUxMKTtcbiBcdFx0aXVjdl9wYXRoX2ZyZWUocGF0aCk7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIE1lc3NhZ2Ugbm90aWZpY2F0aW9ucyBxdWV1ZWQgb24gbWVzc2FnZV9xIHN0aWxsIHJlZmVyZW5jZVxuJiM0MztcdFx0ICogdGhlIG5vdyBmcmVlZCBwYXRoOyBkcm9wIHRoZW0sIG90aGVyd2lzZSBhIGxhdGVyIHJlY3Ztc2coKVxuJiM0MztcdFx0ICogd291bGQgcGFzcyB0aGUgZnJlZWQgaXVjdl9wYXRoIHRvIG1lc3NhZ2VfcmVjZWl2ZSgpIHZpYVxuJiM0MztcdFx0ICogaXVjdl9wcm9jZXNzX21lc3NhZ2VfcSgpLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRzcGluX2xvY2tfYmgoXHUwMDI2aXVjdi1cdTAwM2VtZXNzYWdlX3EubG9jayk7XG4mIzQzO1x0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbiwgXHUwMDI2aXVjdi1cdTAwM2VtZXNzYWdlX3EubGlzdCwgbGlzdCkge1xuJiM0MztcdFx0XHRsaXN0X2RlbChcdTAwMjZwLVx1MDAzZWxpc3QpO1xuJiM0MztcdFx0XHRrZnJlZShwKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNml1Y3YtXHUwMDNlbWVzc2FnZV9xLmxvY2spO1xuIFx0fVxuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNTowODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaXVjdl9zZXZlcl9wYXRoYCBpbiBgYWZfaXVjdi5jYCB0byBjbGVhciB0aGUgYG1lc3NhZ2VfcWAgbGlzdC4gSG93ZXZlciwgdGhpcyBmdW5jdGlvbiBvbmx5IGV4ZWN1dGVzIGl0cyBsb2dpYyBpZiBgaXVjdi1cdTAwM2VwYXRoYCBpcyBub24tTlVMTC4gYGl1Y3YtXHUwMDNlcGF0aGAgaXMgb25seSBhbGxvY2F0ZWQgd2hlbiB0aGUgdHJhbnNwb3J0IGlzIGBBRl9JVUNWX1RSQU5TX0lVQ1ZgLCB3aGljaCBpbiB0dXJuIGlzIG9ubHkgc2VsZWN0ZWQgaWYgYHByX2l1Y3ZgIGlzIG5vbi1OVUxMLiBgcHJfaXVjdmAgaXMgaW5pdGlhbGl6ZWQgb25seSB3aGVuIGBtYWNoaW5lX2lzX3ZtKClgIGlzIHRydWUsIG1lYW5pbmcgdGhlIGtlcm5lbCBtdXN0IGJlIHJ1bm5pbmcgdW5kZXIgdGhlIHByb3ByaWV0YXJ5IElCTSB6L1ZNIGh5cGVydmlzb3IuIFNpbmNlIFFFTVUvS1ZNIGVudmlyb25tZW50cyBkbyBub3QgZW11bGF0ZSB6L1ZNICh0aGV5IGlkZW50aWZ5IGFzIEtWTSBvciBRRU1VKSwgdGhpcyBjb2RlIHBhdGggaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDdlYjEyOTM0YzUyYTI5MTRlMTc1MGIxZjJlYzgxZDM4ODYyZDQ5NjYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1bCA3IDE1OjA4OjI5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2l1Y3YvYWZfaXVjdi5jIGIvbmV0L2l1Y3YvYWZfaXVjdi5jCmluZGV4IGZlZDI0MGI0NTNiZDliLi4yODY5YTEwM2Y3ZmEyYSAxMDA2NDQKLS0tIGEvbmV0L2l1Y3YvYWZfaXVjdi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pdWN2L2FmX2l1Y3YuYwpAQCAtMzM3LDYgJiM0MzszMzcsNyBAQCBzdGF0aWMgdm9pZCBpdWN2X3NldmVyX3BhdGgoc3RydWN0IHNvY2sgKnNrLCBpbnQgd2l0aF91c2VyX2RhdGEpCiAJdW5zaWduZWQgY2hhciB1c2VyX2RhdGFbMTZdOwogCXN0cnVjdCBpdWN2X3NvY2sgKml1Y3YgPSBpdWN2X3NrKHNrKTsKIAlzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoID0gaXVjdi0mZ3Q7cGF0aDsKJiM0MzsJc3RydWN0IHNvY2tfbXNnX3EgKnAsICpuOwogCiAJLyogV2hvZXZlciByZXNldHMgdGhlIHBhdGggcG9pbnRlciwgbXVzdCBzZXZlciBhbmQgZnJlZSBpdC4gKi8KIAlpZiAoeGNoZygmYW1wO2l1Y3YtJmd0O3BhdGgsIE5VTEwpKSB7CkBAIC0zNDgsNiAmIzQzOzM0OSwxOSBAQCBzdGF0aWMgdm9pZCBpdWN2X3NldmVyX3BhdGgoc3RydWN0IHNvY2sgKnNrLCBpbnQgd2l0aF91c2VyX2RhdGEpCiAJCX0gZWxzZQogCQkJcHJfaXVjdi0mZ3Q7cGF0aF9zZXZlcihwYXRoLCBOVUxMKTsKIAkJaXVjdl9wYXRoX2ZyZWUocGF0aCk7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogTWVzc2FnZSBub3RpZmljYXRpb25zIHF1ZXVlZCBvbiBtZXNzYWdlX3Egc3RpbGwgcmVmZXJlbmNlCiYjNDM7CQkgKiB0aGUgbm93IGZyZWVkIHBhdGg7IGRyb3AgdGhlbSwgb3RoZXJ3aXNlIGEgbGF0ZXIgcmVjdm1zZygpCiYjNDM7CQkgKiB3b3VsZCBwYXNzIHRoZSBmcmVlZCBpdWN2X3BhdGggdG8gbWVzc2FnZV9yZWNlaXZlKCkgdmlhCiYjNDM7CQkgKiBpdWN2X3Byb2Nlc3NfbWVzc2FnZV9xKCkuCiYjNDM7CQkgKi8KJiM0MzsJCXNwaW5fbG9ja19iaCgmYW1wO2l1Y3YtJmd0O21lc3NhZ2VfcS5sb2NrKTsKJiM0MzsJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuLCAmYW1wO2l1Y3YtJmd0O21lc3NhZ2VfcS5saXN0LCBsaXN0KSB7CiYjNDM7CQkJbGlzdF9kZWwoJmFtcDtwLSZndDtsaXN0KTsKJiM0MzsJCQlrZnJlZShwKTsKJiM0MzsJCX0KJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7aXVjdi0mZ3Q7bWVzc2FnZV9xLmxvY2spOwogCX0KIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTE1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIHRvIGBuZXQvaXVjdi9hZl9pdWN2LmNgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgdHdlYWtpbmcgYGl1Y3Zfc2V2ZXJfcGF0aGAgaW4gYG5ldC9pdWN2L2FmX2l1Y3YuY2AuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSB0aGUgY2hhbmdlIGlzIGNsZWFyaW5nIHRoZSBgbWVzc2FnZV9xYCBsaXN0LiBUaGF0JiMzOTtzIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24sIGZvciBzdXJlLiBCZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGNvZGUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBlbnZpcm9ubWVudCB0aGlzIGNvZGUgcnVucyBpbi4KCkZpcnN0IHRob3VnaHQ6IElVQ1YgLSBsZXQgbWUgcmVtaW5kIG15c2VsZiB3aGF0IHRoYXQgaXMuLi4gcmlnaHQsICYjMzQ7SW50cmEtVXNlciBDb21tdW5pY2F0aW9uIFZlaGljbGUuJiMzNDsgSXQmIzM5O3MgYW4gSUJNIHovVk0tc3BlY2lmaWMgcHJvdG9jb2wuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGNvZGUgaXMgZ29pbmcgdG8gYmUgczM5MCBzcGVjaWZpYy4gU28gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgaG93IHRoaXMgaW50ZXJhY3RzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIElzIGBuZXQvaXVjdi9hZl9pdWN2LmNgIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nPyBJJiMzOTtkIGJldHRlciBjb25maXJtIHdoZXJlIHRoaXMgaXMgdXNlZC4gVG8gZG8gdGhhdCBJJiMzOTtsbCBxdWlja2x5IGxvb2sgYXQgYG5ldC9pdWN2L0tjb25maWdgIG9yIGV2ZW4gYG5ldC9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgaXMgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGluZyBhcm91bmQgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTU6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElVQ1YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXVjdi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pdWN2L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9pdWN2L0tjb25maWc6Mjpjb25maWcgSVVDVlxubmV0L2l1Y3YvS2NvbmZpZy0zLVx0ZGVwZW5kcyBvbiBTMzkwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTU6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYxOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25zaWRlcmluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIFMzOTAgQ29kZSBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyB0aGUgcHJvbXB0IG1lbnRpb25zIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtBaCwgdGhpcyAqZGVwZW5kcyogb24gUzM5MC4mIzM0OyBDYW4gd2UgZXZlbiBmdXp6IFMzOTAgY29kZSBlZmZlY3RpdmVseT8gU3l6a2FsbGVyICpkb2VzKiBzdXBwb3J0IHMzOTB4LCB3aGljaCBpcyBwcm9taXNpbmcuIEhvd2V2ZXIsIHR5cGljYWxseSwgd2UmIzM5O3JlIHJ1bm5pbmcgeDg2XzY0IG9yIGFybTY0IGluIG91ciB1c3VhbCBmdXp6aW5nIHNldHVwcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGUgcHJvbXB0IGFuZCB0aGUgc3BlY2lmaWMgdGFyZ2V0LiBUaGUgcHJvbXB0IHRoZW4gc3RyZXNzZXMgdGhlIGlzc3VlIG9mIGVtdWxhdGVkIGhhcmR3YXJlIHN1Y2ggYXMgdXNiIGdhZGdldHMgb3IgbWFjODAyMTFfaHdzaW0gYmVpbmcgdW5yZWFjaGFibGUuCgpCdXQgd2FpdCwgUUVNVSBjYW4gZW11bGF0ZSBzMzkweCwgYW5kIHRoYXQgc2hvdWxkIGJlIGVub3VnaCBmb3IgYmFzaWMgb3BlcmF0aW9uLCByaWdodD8gVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogSXMgdGhlICpzcGVjaWZpYyogY29kZSB0aGV5JiMzOTtyZSB0YWxraW5nIGFib3V0IHJlYWNoYWJsZSAqd2l0aG91dCogcmVseWluZyBvbiBhIGRlZGljYXRlZCB6L1ZNIGh5cGVydmlzb3I/IEkgY2FuIHByb2JhYmx5IGdldCB0aGUgYmFzaWMgQ1BVLCBhbmQgc29tZSBkZXZpY2VzLCBidXQgaXQgY291bGQgYmUgdGhlIGNhc2UgdGhhdCBhIHNwZWNpZmljIGVtdWxhdGVkIGRldmljZSBoYXMgYW4gaXNzdWUgdGhhdCByZXF1aXJlcyBhIHNwZWNpZmljIGh5cGVydmlzb3IgZmVhdHVyZS4KCkkmIzM5O2QgYmV0dGVyIGNoZWNrIGBuZXQvaXVjdi9LY29uZmlnYCBhZ2FpbiB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pdWN2L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgSVVDVlxuICAgMzpcdFx0ZGVwZW5kcyBvbiBTMzkwXG4gICA0Olx0XHRkZWZfdHJpc3RhdGUgeSBpZiBTMzkwXG4gICA1Olx0XHRwcm9tcHQgXCYjMzQ7SVVDViBzdXBwb3J0IChTMzkwIC0gei9WTSBvbmx5KVwmIzM0O1xuICAgNjpcdFx0aGVscFxuICAgNzpcdFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gdXNlIGludGVyLXVzZXIgY29tbXVuaWNhdGlvblxuICAgODpcdFx0ICB1bmRlciBWTSBvciBWSUYuIElmIHlvdSBydW4gb24gei9WTSwgc2F5IFwmIzM0O1lcJiMzNDsgdG8gZW5hYmxlIGEgZmFzdFxuICAgOTpcdFx0ICBjb21tdW5pY2F0aW9uIGxpbmsgYmV0d2VlbiBWTSBndWVzdHMuXG4gIDEwOlx0XG4gIDExOlx0Y29uZmlnIEFGSVVDVlxuICAxMjpcdFx0ZGVwZW5kcyBvbiBTMzkwXG4gIDEzOlx0XHRkZWZfdHJpc3RhdGUgbSBpZiBRRVRIX0wzIHx8IElVQ1ZcbiAgMTQ6XHRcdHByb21wdCBcJiMzNDtBRl9JVUNWIFNvY2tldCBzdXBwb3J0IChTMzkwIC0gei9WTSBhbmQgSGlwZXJTb2NrZXRzIHRyYW5zcG9ydClcJiMzNDtcbiAgMTU6XHRcdGhlbHBcbiAgMTY6XHRcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHVzZSBBRl9JVUNWIHNvY2tldCBhcHBsaWNhdGlvbnNcbiAgMTc6XHRcdCAgYmFzZWQgb24gei9WTSBpbnRlci11c2VyIGNvbW11bmljYXRpb24gdmVoaWNsZSBvciBiYXNlZCBvblxuICAxODpcdFx0ICBIaXBlclNvY2tldHMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTU6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM4MwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBJVUNWIGFuZCBBRklVQ1YgZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIG5vdGVzIGFuZCBJIHNlZSB0aGF0IElVQ1YgaXMgc3BlY2lmaWNhbGx5IGZvciB6L1ZNLCBidXQgQUZJVUNWIHN1cHBvcnRzIEhpcGVyU29ja2V0cyAqYW5kKiB6L1ZNLiBIbW0sIHRoZSBxdWVzdGlvbiB0aGF0IGltbWVkaWF0ZWx5IHBvcHMgaW50byBteSBoZWFkIGlzOiBjYW4gdGhpcyBldmVuIHJ1biB1bmRlciBRRU1VPyBOb3csIEkga25vdyB0aGUgUUVNVSBzMzkweCBlbXVsYXRpb24sIGJ1dCBJJiMzOTttIHByZXR0eSBzdXJlIGl0IGRvZXNuJiMzOTt0IGVtdWxhdGUgei9WTSBJVUNWIGRpcmVjdGx5OyBpdCYjMzk7cyBtb3JlIGdlYXJlZCB0b3dhcmRzIEtWTS9RRU1VLCBvZiBjb3Vyc2UuCgpXYWl0IGEgc2Vjb25kLCB0aGUgbm90ZXMgc2F5IEFGSVVDViAqY2FuKiB1c2UgSGlwZXJTb2NrZXRzLiBUaGF0JiMzOTtzIGEga2V5IGRldGFpbC4gQnV0IHRoZSB1bmRlcmx5aW5nIGRlcGVuZGVuY3kgaXMgc3RpbGwgb24gdGhlIFMzOTAgYXJjaGl0ZWN0dXJlLiBTbywgaWYgSSYjMzk7bSBmdXp6aW5nIGFuIHg4Nl82NCBvciBhcm02NCB0YXJnZXQsIEkmIzM5O20gcHJldHR5IG11Y2ggZGVhZCBpbiB0aGUgd2F0ZXI7IEkgd29uJiMzOTt0IGJlIGFibGUgdG8gYnVpbGQgdGhpcyBjb2RlLiBIb3dldmVyLCBpZiBJJiMzOTttIG9uIHMzOTB4LCB0aGVuIGl0JiMzOTtzIGEgcG9zc2liaWxpdHkuCgpOb3csIGRpZCB0aGUgcHJvbXB0IHNheSBhbnl0aGluZyBhYm91dCBleGNsdWRpbmcgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGU/IExldCBtZSByZXJlYWQgaXQuLi4gJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuJiMzNDsgT2theSwgd2FpdCwgUUVNVSAqY2FuKiBlbXVsYXRlIHMzOTB4ISBTbywgdGhhdCBjb2RlICpzaG91bGQqIGJlIHJlYWNoYWJsZSBpbiBhIFFFTVUgKHMzOTB4KSBlbnZpcm9ubWVudC4KCkhhbmcgb24uLi4gaXMgaXQgKmltcG9zc2libGUqIHRvIHJlYWNoIGl0IGluIFFFTVU/IEkgbmVlZCB0byB0aGluayB0aGlzIHRocm91Z2guIENhbiBJIGNyZWF0ZSBgQUZfSVVDVmAgc29ja2V0cyAqd2l0aG91dCogei9WTT8gVGhhdCYjMzk7cyB0aGUgcmVhbCBxdWVzdGlvbi4gSWYgSSAqY2FuKiBjcmVhdGUgdGhvc2Ugc29ja2V0cywgYW5kIGlmIHRoZSBjb2RlIHBhdGhzIGxlYWRpbmcgdG8gYGl1Y3Zfc2VydmVyX3BhdGhgIGNhbiBiZSByZWFjaGVkLi4uIHRoZW4gd2UgYXJlIGdvbGRlbi4gSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTU6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXVjdl9zZXZlcl9wYXRoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYz0zMjQ9c3RhdGljIHZvaWQgaXVjdl9zb2NrX2tpbGwoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0zMzQtLyogVGVybWluYXRlIGFuIElVQ1YgcGF0aCAqL1xubmV0L2l1Y3YvYWZfaXVjdi5jOjMzNTpzdGF0aWMgdm9pZCBpdWN2X3NldmVyX3BhdGgoc3RydWN0IHNvY2sgKnNrLCBpbnQgd2l0aF91c2VyX2RhdGEpXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzM2LXtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9Mzk1PXN0YXRpYyB2b2lkIGl1Y3Zfc29ja19jbG9zZShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ0Mi1cdGRlZmF1bHQ6XG5uZXQvaXVjdi9hZl9pdWN2LmM6NDQzOlx0XHRpdWN2X3NldmVyX3BhdGgoc2ssIDEpO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTQ0NC1cdH1cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9NzMzPXN0YXRpYyBpbnQgaXVjdl9zb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTc4MS1cdGlmIChlcnIgXHUwMDI2XHUwMDI2IGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVilcbm5ldC9pdWN2L2FmX2l1Y3YuYzo3ODI6XHRcdGl1Y3Zfc2V2ZXJfcGF0aChzaywgMCk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNzgzLVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNjA3PXN0YXRpYyBpbnQgaXVjdl9jYWxsYmFja19jb25ucmVxKHN0cnVjdCBpdWN2X3BhdGggKnBhdGgsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2ODctXHRpZiAoZXJyKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTY4ODpcdFx0aXVjdl9zZXZlcl9wYXRoKG5zaywgMSk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY4OS1cdFx0aXVjdl9zb2NrX2tpbGwobnNrKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTgwMT1zdGF0aWMgdm9pZCBpdWN2X2NhbGxiYWNrX2Nvbm5yZWooc3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCwgdTggaXB1c2VyWzE2XSlcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTgwOC1cdGJoX2xvY2tfc29jayhzayk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTgwOTpcdGl1Y3Zfc2V2ZXJfcGF0aChzaywgMSk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTgxMC1cdHNrLVx1MDAzZXNrX3N0YXRlID0gSVVDVl9ESVNDT05OO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE1OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3ODIKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGBpdWN2X3NldmVyX3BhdGhgKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGBpdWN2X3NldmVyX3BhdGhgIGlzIGFjdHVhbGx5IHJlYWNoYWJsZSBmcm9tIHdoZXJlIGl0JiMzOTtzIGJlaW5nIGNhbGxlZC4gSSBzZWUgaXQmIzM5O3MgYmVpbmcgaW52b2tlZCBmcm9tIGEgZmV3IGtleSBwbGFjZXMgaW4gdGhlIElVQ1Ygc29ja2V0IGNvZGU6IGBpdWN2X3NvY2tfY2xvc2VgLCBgaXVjdl9zb2NrX2Nvbm5lY3RgLCBgaXVjdl9jYWxsYmFja19jb25ucmVxYCwgYW5kIGBpdWN2X2NhbGxiYWNrX2Nvbm5yZWpgLiBUaGF0JiMzOTtzIHRoZSBjb3JlIG9mIGNvbm5lY3Rpb24gbWFuYWdlbWVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdlJiMzOTtyZSByZWFjaGluZyB0aG9zZSBmdW5jdGlvbnMuCgpTbywgbGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIGJhc2ljcy4gQ2FuIHdlIGV2ZW4gaW5zdGFudGlhdGUgYW4gQUZfSVVDViBzb2NrZXQ/IFRoYXQgbWVhbnMgZXhhbWluaW5nIHRoZSBgc29ja2V0KClgIGNhbGwgd2l0aCBgQUZfSVVDVmAsIGBTT0NLX1NUUkVBTWAsIGFuZCAwIGZvciB0aGUgcHJvdG9jb2wuIElmIHdlIGNhbiYjMzk7dCBjcmVhdGUgdGhlIHNvY2tldCBpbiB0aGUgZmlyc3QgcGxhY2UsIHRoZW4gdGhpcyB3aG9sZSBwYXRoIGlzIG1vb3QuCgpUaGF0IGJyaW5ncyBtZSB0byBgaXVjdl9zb2NrX2NyZWF0ZWAuIEkmIzM5O2xsIG5lZWQgdG8gZGl2ZSBpbnRvIHRoYXQgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzIG9mIHRoZSBJVUNWIHNvY2tldCBjcmVhdGlvbiBwcm9jZXNzIGFuZCB3aGVyZSBgaXVjdl9zZXZlcl9wYXRoYCBtaWdodCBiZSByZWxldmFudC4gSXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBmaWd1cmluZyBvdXQgd2hhdCBjb25kaXRpb25zIGNhbiBhbGxvdyBmb3IgaXRzIHVzZS4gSSBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGFueSBhc3NvY2lhdGVkIGVycm9yIGNvbmRpdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE1OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2l1Y3Zfc29ja19jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jPTIyMzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgaXVjdl9zb2NrX29wcyA9IHtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI1My1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjU0OnN0YXRpYyBpbnQgaXVjdl9zb2NrX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjU1LVx0XHRcdCAgICBpbnQga2Vybilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjI4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9wcm90b19mYW1pbHkgaXVjdl9zb2NrX2ZhbWlseV9vcHMgPSB7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyODUtXHQub3duZXJcdD0gVEhJU19NT0RVTEUsXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjI4NjpcdC5jcmVhdGVcdD0gaXVjdl9zb2NrX2NyZWF0ZSxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjg3LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE1OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NjcKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgaXVjdl9zb2NrX2NyZWF0ZWAmIzM5O3MgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkcmlsbCBkb3duIG9uIHRoaXMgYGl1Y3Zfc29ja19jcmVhdGVgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgdGhpcyBpcyBkZWVwbHkgdGllZCB0byB0aGUgei9WTSBlbnZpcm9ubWVudCwgZ2l2ZW4gaXRzIGxpa2VseSBpbnRlcmFjdGlvbiB3aXRoIElVQ1YuIEJ1dCwgYmVmb3JlIEkganVtcCB0byBhbnkgY29uY2x1c2lvbnMsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBhc3N1bXB0aW9uLiBUaGUgY29yZSBxdWVzdGlvbiBpczogZG9lcyB0aGlzIGZ1bmN0aW9uICptYW5kYXRvcmlseSogcmVxdWlyZSB0aGUgei9WTSBoeXBlcnZpc29yIHRvIGZ1bmN0aW9uLCBvciBoYXMgaXQgYmVlbiBkZXNpZ25lZCBpbiBhIHdheSB0aGF0IGFsbG93cyBpdCB0byBvcGVyYXRlLCBhbGJlaXQgcGVyaGFwcyB3aXRoIHJlZHVjZWQgZnVuY3Rpb25hbGl0eSBvciB1bmRlciBzcGVjaWZpYyBjb25kaXRpb25zLCBvbiBhIGJhcmUgczM5MHggc3lzdGVtPyBLbm93aW5nIHRoaXMgd2lsbCBzaWduaWZpY2FudGx5IGluZmx1ZW5jZSBob3cgcG9ydGFibGUgYW55IGNvZGUgdXNpbmcgdGhpcyBpcy4gVGltZSB0byBkaWcgaW50byB0aGUgc291cmNlIGFuZCBjcm9zcy1yZWZlcmVuY2UgdGhlIGRvY3VtZW50YXRpb24gdG8gY29uZmlybSBpdHMgZW52aXJvbm1lbnRhbCByZXF1aXJlbWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE1OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjI1NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMjU0Olx0c3RhdGljIGludCBpdWN2X3NvY2tfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxuMjI1NTpcdFx0XHRcdCAgICBpbnQga2VybilcbjIyNTY6XHR7XG4yMjU3Olx0XHRzdHJ1Y3Qgc29jayAqc2s7XG4yMjU4Olx0XG4yMjU5Olx0XHRpZiAocHJvdG9jb2wgXHUwMDI2XHUwMDI2IHByb3RvY29sICE9IFBGX0lVQ1YpXG4yMjYwOlx0XHRcdHJldHVybiAtRVBST1RPTk9TVVBQT1JUO1xuMjI2MTpcdFxuMjI2MjpcdFx0c29jay1cdTAwM2VzdGF0ZSA9IFNTX1VOQ09OTkVDVEVEO1xuMjI2MzpcdFxuMjI2NDpcdFx0c3dpdGNoIChzb2NrLVx1MDAzZXR5cGUpIHtcbjIyNjU6XHRcdGNhc2UgU09DS19TVFJFQU06XG4yMjY2Olx0XHRjYXNlIFNPQ0tfU0VRUEFDS0VUOlxuMjI2NzpcdFx0XHQvKiBjdXJyZW50bHksIHByb3RvIG9wcyBjYW4gaGFuZGxlIGJvdGggc2sgdHlwZXMgKi9cbjIyNjg6XHRcdFx0c29jay1cdTAwM2VvcHMgPSBcdTAwMjZpdWN2X3NvY2tfb3BzO1xuMjI2OTpcdFx0XHRicmVhaztcbjIyNzA6XHRcdGRlZmF1bHQ6XG4yMjcxOlx0XHRcdHJldHVybiAtRVNPQ0tUTk9TVVBQT1JUO1xuMjI3MjpcdFx0fVxuMjI3MzpcdFxuMjI3NDpcdFx0c2sgPSBpdWN2X3NvY2tfYWxsb2Moc29jaywgcHJvdG9jb2wsIEdGUF9LRVJORUwsIGtlcm4pO1xuMjI3NTpcdFx0aWYgKCFzaylcbjIyNzY6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4yMjc3Olx0XG4yMjc4Olx0XHRpdWN2X3NvY2tfaW5pdChzaywgTlVMTCk7XG4yMjc5Olx0XG4yMjgwOlx0XHRyZXR1cm4gMDtcbjIyODE6XHR9XG4yMjgyOlx0XG4yMjgzOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfcHJvdG9fZmFtaWx5IGl1Y3Zfc29ja19mYW1pbHlfb3BzID0ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTM2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgdGhlIENyZWF0aW9uIFByb2Nlc3MqKgoKSSBzZWUgdGhlIHBvc3NpYmlsaXR5IG9mIHNvbWV0aGluZyBiZWluZyBjcmVhdGVkLiBCdXQgdGhlbiBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGBpdWN2X3NldmVyX3BhdGhgLiBXaHk/IEJlY2F1c2UgaXQmIzM5O3MgdGhlIGNyaXRpY2FsIGp1bmN0dXJlIGluIHRoaXMgcHJvY2Vzcy4gSSYjMzk7bSBmb2N1c2luZyBpbiBvbiB0aGUgbGluZSB0aGF0IHJlYWRzIGBpZiAoeGNoZygmYW1wO2l1Y3YtJmd0O3BhdGgsIE5VTEwpKWAuIFRoaXMgaXMgYSBjcnVjaWFsIGNoZWNrLiBJdCYjMzk7cyB1c2luZyBgeGNoZ2Agd2hpY2gsIGlmIEkgcmVtZW1iZXIgY29ycmVjdGx5LCBpcyBhbiBhdG9taWMgZXhjaGFuZ2Ugb3BlcmF0aW9uLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBhc2tpbmcsICYjMzQ7SGFzIHNvbWV0aGluZyBiZWVuIHNldCBpbiBgaXVjdi0mZ3Q7cGF0aGAgYWxyZWFkeT8gSXMgdGhlcmUgYWxyZWFkeSBhIHBhdGh3YXkgY3JlYXRlZD8KCk15IG5leHQgdGhvdWdodCwgaW5zdGluY3RpdmVseSwgaXMgdG8gdHJhY2UgYmFjazogKldoZW4qIGV4YWN0bHkgaXMgYGl1Y3YtJmd0O3BhdGhgIGluaXRpYWxpemVkPyBCZWZvcmUgaXQmIzM5O3MgZXZlbiBjcmVhdGVkLCBvciByaWdodCBhZnRlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNlcXVlbmNlIG9mIGV2ZW50cyBsZWFkaW5nIHVwIHRvIHRoaXMgcG9pbnQuIEtub3dpbmcgd2hlbiBgaXVjdi0mZ3Q7cGF0aGAgaXMgcG9wdWxhdGVkIGlzIGFic29sdXRlbHkgZnVuZGFtZW50YWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgbG9naWMgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG9yLCBtb3JlIGltcG9ydGFudGx5LCB0aGUgaW50ZW5kZWQgZGVzaWduIGhlcmUuIFRoZSB3aG9sZSBwaWN0dXJlIG5lZWRzIHRvIGJlIHB1dCB0b2dldGhlciBhbmQgaXRzIGZ1bmN0aW9uYWxpdHkgbmVlZHMgdG8gYmUgZ3Jhc3BlZCBjb21wbGV0ZWx5IHRvIHByb3Blcmx5IGNyZWF0ZSBvciBpbXBsZW1lbnQgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE1OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2l1Y3YtXHUwMDNlcGF0aCA9JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYz00NjY9c3RhdGljIHN0cnVjdCBzb2NrICppdWN2X3NvY2tfYWxsb2Moc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvLCBnZnBfdCBwcmlvLCBpbnQga2Vybilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDg5LVx0YXRvbWljX3NldChcdTAwMjZpdWN2LVx1MDAzZW1zZ19yZWN2LCAwKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzo0OTA6XHRpdWN2LVx1MDAzZXBhdGggPSBOVUxMO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTQ5MS1cdGl1Y3YtXHUwMDNlc2tfdHhub3RpZnkgPSBhZml1Y3ZfaHNfY2FsbGJhY2tfdHhub3RpZnk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTY4Nz1zdGF0aWMgaW50IGFmaXVjdl9wYXRoX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTY5OS1cdC8qIENyZWF0ZSBwYXRoLiAqL1xubmV0L2l1Y3YvYWZfaXVjdi5jOjcwMDpcdGl1Y3YtXHUwMDNlcGF0aCA9IGl1Y3ZfcGF0aF9hbGxvYyhpdWN2LVx1MDAzZW1zZ2xpbWl0LFxubmV0L2l1Y3YvYWZfaXVjdi5jLTcwMS1cdFx0XHRcdCAgICAgSVVDVl9JUFJNREFUQSwgR0ZQX0tFUk5FTCk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTcxMC1cdFx0aXVjdl9wYXRoX2ZyZWUoaXVjdi1cdTAwM2VwYXRoKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzo3MTE6XHRcdGl1Y3YtXHUwMDNlcGF0aCA9IE5VTEw7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNzEyLVx0XHRzd2l0Y2ggKGVycikge1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNjA3PXN0YXRpYyBpbnQgaXVjdl9jYWxsYmFja19jb25ucmVxKHN0cnVjdCBpdWN2X3BhdGggKnBhdGgsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NzUtXHRtZW1jcHkobml1Y3YtXHUwMDNlc3JjX3VzZXJfaWQsIGl1Y3YtXHUwMDNlc3JjX3VzZXJfaWQsIDgpO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE2NzY6XHRuaXVjdi1cdTAwM2VwYXRoID0gcGF0aDtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjc3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDEzCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uLCBwcmVzZW50ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQ6CgoqKlVuZGVyc3RhbmRpbmcgdGhlIEFsbG9jYXRpb24gb2YgYGl1Y3YtJmd0O3BhdGhgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBhZml1Y3ZfcGF0aF9jb25uZWN0YCBmdW5jdGlvbiBhbmQgdGhlIGtleSB0aGluZyBoZXJlIGlzIHRoZSBhbGxvY2F0aW9uIG9mIGBpdWN2LSZndDtwYXRoYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgdGhlIG1lbW9yeSBpcyBzZXQgYXNpZGUgZm9yIHRoZSBwYXRoIHN0cnVjdHVyZSBpdHNlbGYuIFRoaXMgaXMgY3JpdGljYWwgYmVjYXVzZSB0aGlzIHN0cnVjdHVyZSBwcmVzdW1hYmx5IGhvbGRzIHRoZSBkZXRhaWxzIG9mIHRoZSBJVUNWIGNvbm5lY3Rpb24sIHRoZSByb3V0ZSwgZW5kcG9pbnRzLCBldmVyeXRoaW5nIG5lZWRlZCBmb3IgdGhlIGFjdHVhbCBjb21tdW5pY2F0aW9uIHRvIG9jY3VyLiBVbmRlcnN0YW5kaW5nICp3aGVyZSogdGhpcyBoYXBwZW5zIGhlbHBzIG1lIGltbWVkaWF0ZWx5IHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgYWxsb2NhdGlvbiwgYW5kIGxpa2VseSwgd2hlbiB0aGUgc3RydWN0dXJlIGJlY29tZXMgdmFsaWQuIFRoaXMgYWxzbyB0ZWxscyBtZSB3aGF0IHRvIGxvb2sgZm9yIHdoZW4gZGVidWdnaW5nIGNvbm5lY3Rpb24gZmFpbHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE1OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FmaXVjdl9wYXRoX2Nvbm5lY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jPTY2NT1zdGF0aWMgaW50IGl1Y3Zfc29ja19hdXRvYmluZChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTY4Ni1cbm5ldC9pdWN2L2FmX2l1Y3YuYzo2ODc6c3RhdGljIGludCBhZml1Y3ZfcGF0aF9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyKVxubmV0L2l1Y3YvYWZfaXVjdi5jLTY4OC17XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTczMz1zdGF0aWMgaW50IGl1Y3Zfc29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy03NjgtXHRlbHNlXG5uZXQvaXVjdi9hZl9pdWN2LmM6NzY5Olx0XHRlcnIgPSBhZml1Y3ZfcGF0aF9jb25uZWN0KHNvY2ssIGFkZHIpO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTc3MC1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE1OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0ODUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IGNvZGUgc25pcHBldCwgcHJlc2VudGVkIGFzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyB0aGUgYGFmaXVjdl9wYXRoX2Nvbm5lY3RgIEZ1bmN0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIGBhZml1Y3ZfcGF0aF9jb25uZWN0YC4uLiB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gSXQgYXBwZWFycyB0byBiZSBhIGZ1bmN0aW9uIGRlYWxpbmcgd2l0aCBzb21lIGtpbmQgb2YgcGF0aCBjb25uZWN0aW9uLCBsaWtlbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIGFuIEFGX0lVQ1YgKEludGVyLVVzZXIgQ29tbXVuaWNhdGlvbiBWZWhpY2xlKSBlbnZpcm9ubWVudCwgd2hpY2ggSSYjMzk7bSBmYW1pbGlhciB3aXRoLgoKVGhlIGZpcnN0IHRoaW5nIGl0IGRvZXMgaXMgY2FsbCBgaXVjdl9wYXRoX2FsbG9jYC4gU28sIGNsZWFybHksIGJlZm9yZSBhbnl0aGluZyBlbHNlLCBhIHBhdGggaXMgYmVpbmcgYWxsb2NhdGVkLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IHlvdSBjYW4mIzM5O3QgY29ubmVjdCB0byBzb21ldGhpbmcgdGhhdCBkb2VzbiYjMzk7dCBleGlzdC4gVGhpcyBhbGxvY2F0aW9uIGxpa2VseSBzZXRzIHVwIHRoZSBiYXNpYyBkYXRhIHN0cnVjdHVyZXMgbmVlZGVkIHRvIG1hbmFnZSB0aGUgY29tbXVuaWNhdGlvbiBwYXRoLgoKVGhlbiwgdGhlcmUmIzM5O3MgYSBjYWxsIHRvIGBwcl9pdWN2LSZndDtwYXRoX2Nvbm5lY3RgLiBBaCwgbm93IHdlIGdldCB0byB0aGUgY29yZSBjb25uZWN0aW9uIGxvZ2ljLiBCdXQsIGFuZCB0aGlzIGlzIHdoZXJlIEkgbmVlZCB0byB0YWtlIGEgcGF1c2UuLi53aGF0ICppcyogYHByX2l1Y3ZgPyBUaGlzIGxvb2tzIGxpa2UgYSBwb2ludGVyIHRvIHNvbWUgc29ydCBvZiBJVUNWLXJlbGF0ZWQgc3RydWN0dXJlLCBwcm9iYWJseSBhIHBlci1JVUNWIGRhdGEgc3RydWN0dXJlLiBJdCYjMzk7cyBsaWtlbHkgd2l0aGluIHRoaXMgc3RydWN0dXJlIHRoYXQgdGhlIGBwYXRoX2Nvbm5lY3RgIG1ldGhvZCBpcyBkZWZpbmVkLiBVbmRlcnN0YW5kaW5nIHdoYXQgYHByX2l1Y3ZgIHJlcHJlc2VudHMgaXMgY3J1Y2lhbCB0byBjb21wcmVoZW5kaW5nIHRoZSBlbnRpcmUgcHJvY2VzcywgaW5jbHVkaW5nIGFueSBjb250ZXh0IGl0IHJlcXVpcmVzLiBJJiMzOTtkIGJldHRlciBmb2xsb3cgdGhpcyBwb2ludGVyIGFuZCBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgZ2V0cyBpbml0aWFsaXplZCwgYW5kIHdoYXQgY29udGV4dCBpdCBwcm92aWRlcyB0byB0aGUgY2FsbCB0byBgcGF0aF9jb25uZWN0YC4gVGhlIGRldGFpbHMgb2YgdGhpcyBzdHJ1Y3R1cmUgYXJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb25uZWN0aW9uIHByb2Nlc3MsIGFuZCB0aGUgbG9naWMgd2l0aGluIHRoZSBgcGF0aF9jb25uZWN0YCBtZXRob2QgaXRzZWxmLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcl9pdWN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYz00Mj1zdGF0aWMgc3RydWN0IHByb3RvIGl1Y3ZfcHJvdG8gPSB7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ3LVxubmV0L2l1Y3YvYWZfaXVjdi5jOjQ4OnN0YXRpYyBzdHJ1Y3QgaXVjdl9pbnRlcmZhY2UgKnByX2l1Y3Y7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNDktc3RhdGljIHN0cnVjdCBpdWN2X2hhbmRsZXIgYWZfaXVjdl9oYW5kbGVyO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0zMzU9c3RhdGljIHZvaWQgaXVjdl9zZXZlcl9wYXRoKHN0cnVjdCBzb2NrICpzaywgaW50IHdpdGhfdXNlcl9kYXRhKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNDctXHRcdFx0QVNDRUJDKHVzZXJfZGF0YSwgc2l6ZW9mKHVzZXJfZGF0YSkpO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjM0ODpcdFx0XHRwcl9pdWN2LVx1MDAzZXBhdGhfc2V2ZXIocGF0aCwgdXNlcl9kYXRhKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNDktXHRcdH0gZWxzZVxubmV0L2l1Y3YvYWZfaXVjdi5jOjM1MDpcdFx0XHRwcl9pdWN2LVx1MDAzZXBhdGhfc2V2ZXIocGF0aCwgTlVMTCk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMzUxLVx0XHRpdWN2X3BhdGhfZnJlZShwYXRoKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9NDY2PXN0YXRpYyBzdHJ1Y3Qgc29jayAqaXVjdl9zb2NrX2FsbG9jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90bywgZ2ZwX3QgcHJpbywgaW50IGtlcm4pXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ5Mi1cdG1lbXNldChcdTAwMjZpdWN2LVx1MDAzZWluaXQsIDAsIHNpemVvZihpdWN2LVx1MDAzZWluaXQpKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzo0OTM6XHRpZiAocHJfaXVjdilcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OTQtXHRcdGl1Y3YtXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz01ODI9c3RhdGljIGludCBpdWN2X3NvY2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjEzLVx0LyogQmluZCB0aGUgc29ja2V0ICovXG5uZXQvaXVjdi9hZl9pdWN2LmM6NjE0Olx0aWYgKHByX2l1Y3YpXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjE1LVx0XHRpZiAoIW1lbWNtcChzYS1cdTAwM2VzaXVjdl91c2VyX2lkLCBpdWN2X3VzZXJpZCwgOCkpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTY0Mi12bV9iaW5kOlxubmV0L2l1Y3YvYWZfaXVjdi5jOjY0MzpcdGlmIChwcl9pdWN2KSB7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNjQ0LVx0XHQvKiB1c2UgbG9jYWwgdXNlcmlkIGZvciBiYWNrd2FyZCBjb21wYXQgKi9cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9NjY1PXN0YXRpYyBpbnQgaXVjdl9zb2NrX2F1dG9iaW5kKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjY5LVxubmV0L2l1Y3YvYWZfaXVjdi5jOjY3MDpcdGlmICh1bmxpa2VseSghcHJfaXVjdikpXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjcxLVx0XHRyZXR1cm4gLUVQUk9UTztcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9Njg3PXN0YXRpYyBpbnQgYWZpdWN2X3BhdGhfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzA1LVx0fVxubmV0L2l1Y3YvYWZfaXVjdi5jOjcwNjpcdGVyciA9IHByX2l1Y3YtXHUwMDNlcGF0aF9jb25uZWN0KGl1Y3YtXHUwMDNlcGF0aCwgXHUwMDI2YWZfaXVjdl9oYW5kbGVyLFxubmV0L2l1Y3YvYWZfaXVjdi5jLTcwNy1cdFx0XHRcdCAgICBzYS1cdTAwM2VzaXVjdl91c2VyX2lkLCBOVUxMLCB1c2VyX2RhdGEsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTkwNT1zdGF0aWMgaW50IGl1Y3Zfc2VuZF9pcHJtKHN0cnVjdCBpdWN2X3BhdGggKnBhdGgsIHN0cnVjdCBpdWN2X21lc3NhZ2UgKm1zZyxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtOTExLVx0cHJtZGF0YVs3XSA9IDB4ZmYgLSAodTgpIHNrYi1cdTAwM2VsZW47XG5uZXQvaXVjdi9hZl9pdWN2LmM6OTEyOlx0cmV0dXJuIHByX2l1Y3YtXHUwMDNlbWVzc2FnZV9zZW5kKHBhdGgsIG1zZywgSVVDVl9JUFJNREFUQSwgMCxcbm5ldC9pdWN2L2FmX2l1Y3YuYy05MTMtXHRcdFx0XHQgKHZvaWQgKikgcHJtZGF0YSwgOCk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTkxNj1zdGF0aWMgaW50IGl1Y3Zfc29ja19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA2OS1cdFx0XHRpZiAoZXJyID09IDB4MTUpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMDcwOlx0XHRcdFx0cHJfaXVjdi1cdTAwM2VwYXRoX3NldmVyKGl1Y3YtXHUwMDNlcGF0aCwgTlVMTCk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA3MS1cdFx0XHRcdGF0b21pY19kZWMoXHUwMDI2aXVjdi1cdTAwM2Vza2JzX2luX3htaXQpO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDg4LVx0XHRcdH1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMDg5Olx0XHRcdGVyciA9IHByX2l1Y3YtXHUwMDNlbWVzc2FnZV9zZW5kKGl1Y3YtXHUwMDNlcGF0aCwgXHUwMDI2dHhtc2csXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA5MC1cdFx0XHRcdFx0XHQgICAgSVVDVl9JUEJVRkxTVCwgMCxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA5Mi1cdFx0fSBlbHNlIHsgLyogbm9uLUlQUk0gTGluZWFyIHNrYiAqL1xubmV0L2l1Y3YvYWZfaXVjdi5jOjEwOTM6XHRcdFx0ZXJyID0gcHJfaXVjdi1cdTAwM2VtZXNzYWdlX3NlbmQoaXVjdi1cdTAwM2VwYXRoLCBcdTAwMjZ0eG1zZyxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDk0LVx0XHRcdFx0XHQwLCAwLCAodm9pZCAqKXNrYi1cdTAwM2VkYXRhLCBza2ItXHUwMDNlbGVuKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTE1OD1zdGF0aWMgdm9pZCBpdWN2X3Byb2Nlc3NfbWVzc2FnZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTExODktXHRcdFx0fVxubmV0L2l1Y3YvYWZfaXVjdi5jOjExOTA6XHRcdFx0cmMgPSBwcl9pdWN2LVx1MDAzZW1lc3NhZ2VfcmVjZWl2ZShwYXRoLCBtc2csXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTE5MS1cdFx0XHRcdFx0ICAgICAgSVVDVl9JUEJVRkxTVCxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTE5My1cdFx0fSBlbHNlIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMTk0Olx0XHRcdHJjID0gcHJfaXVjdi1cdTAwM2VtZXNzYWdlX3JlY2VpdmUocGF0aCwgbXNnLFxubmV0L2l1Y3YvYWZfaXVjdi5jLTExOTUtXHRcdFx0XHRcdCAgICAgIG1zZy1cdTAwM2VmbGFncyBcdTAwMjYgSVVDVl9JUFJNREFUQSxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTQxOD1zdGF0aWMgaW50IGl1Y3Zfc29ja19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaG93KVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDQ2LVx0XHRcdHR4bXNnLnRhZyA9IDA7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ0NzpcdFx0XHRlcnIgPSBwcl9pdWN2LVx1MDAzZW1lc3NhZ2Vfc2VuZChpdWN2LVx1MDAzZXBhdGgsIFx1MDAyNnR4bXNnLFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NDgtXHRcdFx0XHRJVUNWX0lQUk1EQVRBLCAwLCAodm9pZCAqKSBpcHJtX3NodXRkb3duLCA4KTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ2OS1cdFx0ICAgIGl1Y3YtXHUwMDNlcGF0aCkge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE0NzA6XHRcdFx0ZXJyID0gcHJfaXVjdi1cdTAwM2VwYXRoX3F1aWVzY2UoaXVjdi1cdTAwM2VwYXRoLCBOVUxMKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDcxLVx0XHRcdGlmIChlcnIpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTE2MDc9c3RhdGljIGludCBpdWN2X2NhbGxiYWNrX2Nvbm5yZXEoc3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY0NC1cdGlmIChzay1cdTAwM2Vza19zdGF0ZSAhPSBJVUNWX0xJU1RFTikge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE2NDU6XHRcdGVyciA9IHByX2l1Y3YtXHUwMDNlcGF0aF9zZXZlcihwYXRoLCB1c2VyX2RhdGEpO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NDYtXHRcdGl1Y3ZfcGF0aF9mcmVlKHBhdGgpO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjUxLVx0aWYgKHNrX2FjY2VwdHFfaXNfZnVsbChzaykpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjUyOlx0XHRlcnIgPSBwcl9pdWN2LVx1MDAzZXBhdGhfc2V2ZXIocGF0aCwgdXNlcl9kYXRhKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjUzLVx0XHRpdWN2X3BhdGhfZnJlZShwYXRoKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY1OS1cdGlmICghbnNrKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTY2MDpcdFx0ZXJyID0gcHJfaXVjdi1cdTAwM2VwYXRoX3NldmVyKHBhdGgsIHVzZXJfZGF0YSk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY2MS1cdFx0aXVjdl9wYXRoX2ZyZWUocGF0aCk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2ODUtXHRwYXRoLVx1MDAzZW1zZ2xpbSA9IGl1Y3YtXHUwMDNlbXNnbGltaXQ7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTY4NjpcdGVyciA9IHByX2l1Y3YtXHUwMDNlcGF0aF9hY2NlcHQocGF0aCwgXHUwMDI2YWZfaXVjdl9oYW5kbGVyLCBudXNlcl9kYXRhLCBuc2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE2ODctXHRpZiAoZXJyKSB7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTE3MTI9c3RhdGljIHZvaWQgaXVjdl9jYWxsYmFja19yeChzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLCBzdHJ1Y3QgaXVjdl9tZXNzYWdlICptc2cpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE3MjAtXHRpZiAoc2stXHUwMDNlc2tfc2h1dGRvd24gXHUwMDI2IFJDVl9TSFVURE9XTikge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE3MjE6XHRcdHByX2l1Y3YtXHUwMDNlbWVzc2FnZV9yZWplY3QocGF0aCwgbXNnKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNzIyLVx0XHRyZXR1cm47XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTIyOTQ9c3RhdGljIGludCBfX2luaXQgYWZpdWN2X2luaXQodm9pZClcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMwNS1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzA2Olx0XHRwcl9pdWN2ID0gXHUwMDI2aXVjdl9pZjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzA3LVx0fSBlbHNlIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzA4LVx0XHRtZW1zZXQoXHUwMDI2aXVjdl91c2VyaWQsIDAsIHNpemVvZihpdWN2X3VzZXJpZCkpO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMDk6XHRcdHByX2l1Y3YgPSBOVUxMO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMTAtXHR9XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMTgtXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjMxOTpcdGlmIChwcl9pdWN2KSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjMyMDpcdFx0ZXJyID0gcHJfaXVjdi1cdTAwM2VpdWN2X3JlZ2lzdGVyKFx1MDAyNmFmX2l1Y3ZfaGFuZGxlciwgMCk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMyMS1cdFx0aWYgKGVycilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMzMi1vdXRfbm90aWZpZXI6XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjMzMzpcdGlmIChwcl9pdWN2KVxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMzQ6XHRcdHByX2l1Y3YtXHUwMDNlaXVjdl91bnJlZ2lzdGVyKFx1MDAyNmFmX2l1Y3ZfaGFuZGxlciwgMCk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMzNS1vdXRfc29jazpcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjM0Mz1zdGF0aWMgdm9pZCBfX2V4aXQgYWZpdWN2X2V4aXQodm9pZClcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzQ0LXtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzQ1Olx0aWYgKHByX2l1Y3YpXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjM0NjpcdFx0cHJfaXVjdi1cdTAwM2VpdWN2X3VucmVnaXN0ZXIoXHUwMDI2YWZfaXVjdl9oYW5kbGVyLCAwKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzQ3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE0MgoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQgbXlzZWxmLCB3aXRoIGEgZm9jdXMgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZS4KCioqSW52ZXN0aWdhdGluZyBWYXJpYWJsZSBJbml0aWFsaXphdGlvbiBpbiBBRklVQ1YqKgoKQWxyaWdodCwgc28gYHByX2l1Y3ZgIGlzIGJlaW5nIGluaXRpYWxpemVkIHNvbWV3aGVyZSB3aXRoaW4gdGhlIGBhZml1Y3ZfaW5pdGAgZnVuY3Rpb24uIFRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgZHJpbGwgZG93biBpbnRvIGBhZml1Y3ZfaW5pdGAgdG8gdW5kZXJzdGFuZCBob3cgYHByX2l1Y3ZgIGlzIGJlaW5nIGhhbmRsZWQuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBqdW1wIGludG8gdGhhdCBmdW5jdGlvbiBkZWZpbml0aW9uIHRvIGV4YW1pbmUgdGhlIGNvZGUgcGF0aCBkaXJlY3RseSByZXNwb25zaWJsZSBmb3IgdGhhdCBpbml0aWFsaXphdGlvbi4gS25vd2luZyB0aGUgY29udGV4dCwgSSYjMzk7bGwgYmUgYWJsZSB0byBxdWlja2x5IGRldGVybWluZSB0aGUgaW5pdGlhbGl6YXRpb24gbG9naWMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSBgcHJfaXVjdmAgdmFyaWFibGUsIHdoaWNoIGhlbHBzIG1lIGRldGVybWluZSBpZiB0aGUgY3VycmVudCBpbml0aWFsaXphdGlvbiBpcyBjYXVzaW5nIGFuIGlzc3VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyOTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjI5NDpcdHN0YXRpYyBpbnQgX19pbml0IGFmaXVjdl9pbml0KHZvaWQpXG4yMjk1Olx0e1xuMjI5NjpcdFx0aW50IGVycjtcbjIyOTc6XHRcbjIyOTg6XHRcdGlmIChtYWNoaW5lX2lzX3ZtKCkgXHUwMDI2XHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0lVQ1YpKSB7XG4yMjk5Olx0XHRcdGNwY21kKFwmIzM0O1FVRVJZIFVTRVJJRFwmIzM0OywgaXVjdl91c2VyaWQsIHNpemVvZihpdWN2X3VzZXJpZCksIFx1MDAyNmVycik7XG4yMzAwOlx0XHRcdGlmICh1bmxpa2VseShlcnIpKSB7XG4yMzAxOlx0XHRcdFx0V0FSTl9PTihlcnIpO1xuMjMwMjpcdFx0XHRcdGVyciA9IC1FUFJPVE9OT1NVUFBPUlQ7XG4yMzAzOlx0XHRcdFx0Z290byBvdXQ7XG4yMzA0Olx0XHRcdH1cbjIzMDU6XHRcbjIzMDY6XHRcdFx0cHJfaXVjdiA9IFx1MDAyNml1Y3ZfaWY7XG4yMzA3Olx0XHR9IGVsc2Uge1xuMjMwODpcdFx0XHRtZW1zZXQoXHUwMDI2aXVjdl91c2VyaWQsIDAsIHNpemVvZihpdWN2X3VzZXJpZCkpO1xuMjMwOTpcdFx0XHRwcl9pdWN2ID0gTlVMTDtcbjIzMTA6XHRcdH1cbjIzMTE6XHRcbjIzMTI6XHRcdGVyciA9IHByb3RvX3JlZ2lzdGVyKFx1MDAyNml1Y3ZfcHJvdG8sIDApO1xuMjMxMzpcdFx0aWYgKGVycilcbjIzMTQ6XHRcdFx0Z290byBvdXQ7XG4yMzE1Olx0XHRlcnIgPSBzb2NrX3JlZ2lzdGVyKFx1MDAyNml1Y3Zfc29ja19mYW1pbHlfb3BzKTtcbjIzMTY6XHRcdGlmIChlcnIpXG4yMzE3Olx0XHRcdGdvdG8gb3V0X3Byb3RvO1xuMjMxODpcdFxuMjMxOTpcdFx0aWYgKHByX2l1Y3YpIHtcbjIzMjA6XHRcdFx0ZXJyID0gcHJfaXVjdi1cdTAwM2VpdWN2X3JlZ2lzdGVyKFx1MDAyNmFmX2l1Y3ZfaGFuZGxlciwgMCk7XG4yMzIxOlx0XHRcdGlmIChlcnIpXG4yMzIyOlx0XHRcdFx0Z290byBvdXRfc29jaztcbjIzMjM6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTU6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MjcKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYHByX2l1Y3ZgIFZhcmlhYmxlKioKCk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYHByX2l1Y3ZgIGlzIG9ubHkgcG9wdWxhdGVkIGlmIHRoZSBzeXN0ZW0mIzM5O3MgYSBWTSAqYW5kKiB0aGUgSVVDViBjb25maWd1cmF0aW9uIGlzIGVuYWJsZWQuIFJpZ2h0LCBzbyBgbWFjaGluZV9pc192bSgpYCB3aWxsIHRlbGwgbWUgaWYgd2UmIzM5O3JlIHJ1bm5pbmcgdW5kZXIgei9WTS4gSWYgd2UmIzM5O3JlICpub3QqIHVuZGVyIHovVk0sIHRoZW4gYHByX2l1Y3ZgIGdldHMgc2V0IHRvIGBOVUxMYC4KClRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlIGlzOiBpZiBgcHJfaXVjdmAgZW5kcyB1cCBiZWluZyBgTlVMTGAsIGNhbiBgaXVjdl9zZXZlcl9wYXRoYCBzdGlsbCBiZSBjYWxsZWQgYW5kLCB5b3Uga25vdywgYWN0dWFsbHkgKmRvKiBzb21ldGhpbmc/IFRoaXMgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UgaWYgaXQgaXNuJiMzOTt0IGhhbmRsZWQgY29ycmVjdGx5LiBJIHNob3VsZCByZWFsbHkgZ28gYmFjayBhbmQgY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYGl1Y3Zfc2V2ZXJfcGF0aGAgYWdhaW4sIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBJdCB3b3VsZCBiZSBhbiBhbm5veWluZyBidWcsIG90aGVyd2lzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTU6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMzNTpcdHN0YXRpYyB2b2lkIGl1Y3Zfc2V2ZXJfcGF0aChzdHJ1Y3Qgc29jayAqc2ssIGludCB3aXRoX3VzZXJfZGF0YSlcbiAzMzY6XHR7XG4gMzM3Olx0XHR1bnNpZ25lZCBjaGFyIHVzZXJfZGF0YVsxNl07XG4gMzM4Olx0XHRzdHJ1Y3QgaXVjdl9zb2NrICppdWN2ID0gaXVjdl9zayhzayk7XG4gMzM5Olx0XHRzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoID0gaXVjdi1cdTAwM2VwYXRoO1xuIDM0MDpcdFx0c3RydWN0IHNvY2tfbXNnX3EgKnAsICpuO1xuIDM0MTpcdFxuIDM0MjpcdFx0LyogV2hvZXZlciByZXNldHMgdGhlIHBhdGggcG9pbnRlciwgbXVzdCBzZXZlciBhbmQgZnJlZSBpdC4gKi9cbiAzNDM6XHRcdGlmICh4Y2hnKFx1MDAyNml1Y3YtXHUwMDNlcGF0aCwgTlVMTCkpIHtcbiAzNDQ6XHRcdFx0aWYgKHdpdGhfdXNlcl9kYXRhKSB7XG4gMzQ1Olx0XHRcdFx0bG93X25tY3B5KHVzZXJfZGF0YSwgaXVjdi1cdTAwM2VzcmNfbmFtZSk7XG4gMzQ2Olx0XHRcdFx0aGlnaF9ubWNweSh1c2VyX2RhdGEsIGl1Y3YtXHUwMDNlZHN0X25hbWUpO1xuIDM0NzpcdFx0XHRcdEFTQ0VCQyh1c2VyX2RhdGEsIHNpemVvZih1c2VyX2RhdGEpKTtcbiAzNDg6XHRcdFx0XHRwcl9pdWN2LVx1MDAzZXBhdGhfc2V2ZXIocGF0aCwgdXNlcl9kYXRhKTtcbiAzNDk6XHRcdFx0fSBlbHNlXG4gMzUwOlx0XHRcdFx0cHJfaXVjdi1cdTAwM2VwYXRoX3NldmVyKHBhdGgsIE5VTEwpO1xuIDM1MTpcdFx0XHRpdWN2X3BhdGhfZnJlZShwYXRoKTtcbiAzNTI6XHRcbiAzNTM6XHRcdFx0LypcbiAzNTQ6XHRcdFx0ICogTWVzc2FnZSBub3RpZmljYXRpb25zIHF1ZXVlZCBvbiBtZXNzYWdlX3Egc3RpbGwgcmVmZXJlbmNlXG4gMzU1Olx0XHRcdCAqIHRoZSBub3cgZnJlZWQgcGF0aDsgZHJvcCB0aGVtLCBvdGhlcndpc2UgYSBsYXRlciByZWN2bXNnKClcbiAzNTY6XHRcdFx0ICogd291bGQgcGFzcyB0aGUgZnJlZWQgaXVjdl9wYXRoIHRvIG1lc3NhZ2VfcmVjZWl2ZSgpIHZpYVxuIDM1NzpcdFx0XHQgKiBpdWN2X3Byb2Nlc3NfbWVzc2FnZV9xKCkuXG4gMzU4Olx0XHRcdCAqL1xuIDM1OTpcdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2aXVjdi1cdTAwM2VtZXNzYWdlX3EubG9jayk7XG4gMzYwOlx0XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuLCBcdTAwMjZpdWN2LVx1MDAzZW1lc3NhZ2VfcS5saXN0LCBsaXN0KSB7XG4gMzYxOlx0XHRcdFx0bGlzdF9kZWwoXHUwMDI2cC1cdTAwM2VsaXN0KTtcbiAzNjI6XHRcdFx0XHRrZnJlZShwKTtcbiAzNjM6XHRcdFx0fVxuIDM2NDpcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZpdWN2LVx1MDAzZW1lc3NhZ2VfcS5sb2NrKTtcbiAzNjU6XHRcdH1cbiAzNjY6XHR9XG4gMzY3Olx0XG4gMzY4Olx0LyogU2VuZCBjb250cm9sbGluZyBmbGFncyB0aHJvdWdoIGFuIElVQ1Ygc29ja2V0IGZvciBISVBFUiB0cmFuc3BvcnQgKi9cbiAzNjk6XHRzdGF0aWMgaW50IGl1Y3Zfc2VuZF9jdHJsKHN0cnVjdCBzb2NrICpzaywgdTggZmxhZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE1OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODA1CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFkZHJlc3NpbmcgYSBQb3RlbnRpYWwgTnVsbCBQb2ludGVyIERlcmVmZXJlbmNlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IHNlZSBhIHBvdGVudGlhbCBwcm9ibGVtLiBJZiBgcHJfaXVjdmAgaXMgTlVMTCwgdGhlbiB0aGUgY29kZSBpcyBnb2luZyB0byB0cnkgYW5kIGRlcmVmZXJlbmNlIGBwcl9pdWN2LSZndDtwYXRoX3NldmVyYCwgd2hpY2ggaXMgYSBjbGFzc2ljIHJlY2lwZSBmb3IgYSBzZWdtZW50YXRpb24gZmF1bHQuIFRoYXQmIzM5O3MgYSBodWdlIHJlZCBmbGFnIQoKSG9sZCBvbiwgSSBuZWVkIHRvIHRoaW5rIHRoaXMgdGhyb3VnaCBtb3JlIGNhcmVmdWxseS4gSWYgYHByX2l1Y3ZgICppcyogTlVMTCwgY291bGQgYGl1Y3YtJmd0O3BhdGhgIHNvbWVob3cgc3RpbGwgYmUgbm9uLU5VTEw/IFRoYXQmIzM5O3MgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGhlcmUuIEkgbmVlZCB0byB0cmFjZSBiYWNrIHdoZXJlIGBpdWN2LSZndDtwYXRoYCBnZXRzIHNldC4KCkFscmlnaHQsIGEgcXVpY2sgc2NhbiByZXZlYWxzIHRoYXQgYGl1Y3YtJmd0O3BhdGhgIGdldHMgc2V0IGluIGBhZml1Y3ZfcGF0aF9jb25uZWN0YCBhbmQgYWxzbyBpbiBgaXVjdl9jYWxsYmFja19jb25ucmVxYC4gT2theSwgZ29vZC4gTm93LCBJIHJlbWVtYmVyIHRoYXQgYGFmaXVjdl9wYXRoX2Nvbm5lY3RgIGdldHMgY2FsbGVkIGZyb20gYGl1Y3Zfc29ja19jb25uZWN0YC4gU28sIHRoZSBudWxsIGNoZWNrIG9mIGBwcl9pdWN2YCBuZWVkcyB0byBiZSB3YXRlcnRpZ2h0LCBhbmQgYWNjb3VudCBmb3IgdGhlc2UgcG9zc2libGUgY29kZSBwYXRocy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBgcHJfaXVjdmAgcG9pbnRlciBpcyBub3QgbnVsbCBiZWZvcmUgaXQgaXMgZGVyZWZlcmVuY2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDczMywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzMzOlx0c3RhdGljIGludCBpdWN2X3NvY2tfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcbiA3MzQ6XHRcdFx0XHQgICAgIGludCBhbGVuLCBpbnQgZmxhZ3MpXG4gNzM1Olx0e1xuIDczNjpcdFx0REVDTEFSRV9TT0NLQUREUihzdHJ1Y3Qgc29ja2FkZHJfaXVjdiAqLCBzYSwgYWRkcik7XG4gNzM3Olx0XHRzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLVx1MDAzZXNrO1xuIDczODpcdFx0c3RydWN0IGl1Y3Zfc29jayAqaXVjdiA9IGl1Y3Zfc2soc2spO1xuIDczOTpcdFx0aW50IGVycjtcbiA3NDA6XHRcbiA3NDE6XHRcdGlmIChhbGVuIFx1MDAzYyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2l1Y3YpIHx8IGFkZHItXHUwMDNlc2FfZmFtaWx5ICE9IEFGX0lVQ1YpXG4gNzQyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDc0MzpcdFxuIDc0NDpcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlICE9IElVQ1ZfT1BFTiBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfc3RhdGUgIT0gSVVDVl9CT1VORClcbiA3NDU6XHRcdFx0cmV0dXJuIC1FQkFERkQ7XG4gNzQ2Olx0XG4gNzQ3Olx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gSVVDVl9PUEVOIFx1MDAyNlx1MDAyNlxuIDc0ODpcdFx0ICAgIGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIpXG4gNzQ5Olx0XHRcdHJldHVybiAtRUJBREZEOyAvKiBleHBsaWNpdCBiaW5kIHJlcXVpcmVkICovXG4gNzUwOlx0XG4gNzUxOlx0XHRpZiAoc2stXHUwMDNlc2tfdHlwZSAhPSBTT0NLX1NUUkVBTSBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfdHlwZSAhPSBTT0NLX1NFUVBBQ0tFVClcbiA3NTI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNzUzOlx0XG4gNzU0Olx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gSVVDVl9PUEVOKSB7XG4gNzU1Olx0XHRcdGVyciA9IGl1Y3Zfc29ja19hdXRvYmluZChzayk7XG4gNzU2Olx0XHRcdGlmICh1bmxpa2VseShlcnIpKVxuIDc1NzpcdFx0XHRcdHJldHVybiBlcnI7XG4gNzU4Olx0XHR9XG4gNzU5Olx0XG4gNzYwOlx0XHRsb2NrX3NvY2soc2spO1xuIDc2MTpcdFxuIDc2MjpcdFx0LyogU2V0IHRoZSBkZXN0aW5hdGlvbiBpbmZvcm1hdGlvbiAqL1xuIDc2MzpcdFx0bWVtY3B5KGl1Y3YtXHUwMDNlZHN0X3VzZXJfaWQsIHNhLVx1MDAzZXNpdWN2X3VzZXJfaWQsIDgpO1xuIDc2NDpcdFx0bWVtY3B5KGl1Y3YtXHUwMDNlZHN0X25hbWUsIHNhLVx1MDAzZXNpdWN2X25hbWUsIDgpO1xuIDc2NTpcdFxuIDc2NjpcdFx0aWYgKGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIpXG4gNzY3Olx0XHRcdGVyciA9IGl1Y3Zfc2VuZF9jdHJsKHNvY2stXHUwMDNlc2ssIEFGX0lVQ1ZfRkxBR19TWU4pO1xuIDc2ODpcdFx0ZWxzZVxuIDc2OTpcdFx0XHRlcnIgPSBhZml1Y3ZfcGF0aF9jb25uZWN0KHNvY2ssIGFkZHIpO1xuIDc3MDpcdFx0aWYgKGVycilcbiA3NzE6XHRcdFx0Z290byBkb25lO1xuIDc3MjpcdFxuIDc3MzpcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlICE9IElVQ1ZfQ09OTkVDVEVEKVxuIDc3NDpcdFx0XHRlcnIgPSBpdWN2X3NvY2tfd2FpdChzaywgaXVjdl9zb2NrX2luX3N0YXRlKHNrLCBJVUNWX0NPTk5FQ1RFRCxcbiA3NzU6XHRcdFx0XHRcdFx0XHRcdCAgICBJVUNWX0RJU0NPTk4pLFxuIDc3NjpcdFx0XHRcdFx0ICAgICBzb2NrX3NuZHRpbWVvKHNrLCBmbGFncyBcdTAwMjYgT19OT05CTE9DSykpO1xuIDc3NzpcdFxuIDc3ODpcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IElVQ1ZfRElTQ09OTiB8fCBzay1cdTAwM2Vza19zdGF0ZSA9PSBJVUNWX0NMT1NFRClcbiA3Nzk6XHRcdFx0ZXJyID0gLUVDT05OUkVGVVNFRDtcbiA3ODA6XHRcbiA3ODE6XHRcdGlmIChlcnIgXHUwMDI2XHUwMDI2IGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVilcbiA3ODI6XHRcdFx0aXVjdl9zZXZlcl9wYXRoKHNrLCAwKTtcbiA3ODM6XHRcbiA3ODQ6XHRkb25lOlxuIDc4NTpcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbiA3ODY6XHRcdHJldHVybiBlcnI7XG4gNzg3Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDE1NgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgY29kZSBzbmlwcGV0LCBkZWxpdmVyZWQgYXMgaWYgaXQmIzM5O3MgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqRGVjb2RpbmcgdGhlIElVQ1YgVHJhbnNwb3J0IExvZ2ljKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBzZWN0aW9uLCBhbmQgbXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgaXVjdi0mZ3Q7dHJhbnNwb3J0YCB2YXJpYWJsZS4gSSBzZWUgdGhhdCBpZiB0aGlzIHBhcnRpY3VsYXIgdmFsdWUgaXMgZXF1YWwgdG8gYEFGX0lVQ1ZfVFJBTlNfSVVDVmAsIGl0IHRyaWdnZXJzIGEgY2FsbCB0byBgYWZpdWN2X3BhdGhfY29ubmVjdGAgKmFuZCogYGl1Y3Zfc2V2ZXJfcGF0aGAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIHRoZXJlIGlzIGNvbm5lY3Rpb24sIGFuZCB0aGVuIHNldmVyaW5nLiBDbGVhcmx5LCB0aGlzIGlzIHRpZWQgdG8gdGhlIElVQ1YgdHJhbnNwb3J0IHBhdGguCgpUaGUgY3J1Y2lhbCBxdWVzdGlvbiBiZWNvbWVzOiAqV2hlbiogaXMgYGl1Y3YtJmd0O3RyYW5zcG9ydGAgYWN0dWFsbHkgc2V0IHRvIGBBRl9JVUNWX1RSQU5TX0lVQ1ZgPyBXaGF0IGFyZSB0aGUgY29uZGl0aW9ucyB0aGF0IGxlYWQgdG8gdGhpcyBzcGVjaWZpYyB0cmFuc3BvcnQgbWV0aG9kIGJlaW5nIHNlbGVjdGVkPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcHJlY2VkaW5nIGxvZ2ljLCB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZSBgaXVjdmAgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIGFuZCBoYW5kbGluZywgdG8gc2VlIHdoYXQgZGljdGF0ZXMgdGhpcyBjaG9pY2UuIFRoaXMgaXMgdGhlIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbiB0aGF0IHVubG9ja3MgaG93IHRoaXMgcGFydGljdWxhciBjb25uZWN0aW9uIGN5Y2xlIG9wZXJhdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ2NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDY2Olx0c3RhdGljIHN0cnVjdCBzb2NrICppdWN2X3NvY2tfYWxsb2Moc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvLCBnZnBfdCBwcmlvLCBpbnQga2VybilcbiA0Njc6XHR7XG4gNDY4Olx0XHRzdHJ1Y3Qgc29jayAqc2s7XG4gNDY5Olx0XHRzdHJ1Y3QgaXVjdl9zb2NrICppdWN2O1xuIDQ3MDpcdFxuIDQ3MTpcdFx0c2sgPSBza19hbGxvYyhcdTAwMjZpbml0X25ldCwgUEZfSVVDViwgcHJpbywgXHUwMDI2aXVjdl9wcm90bywga2Vybik7XG4gNDcyOlx0XHRpZiAoIXNrKVxuIDQ3MzpcdFx0XHRyZXR1cm4gTlVMTDtcbiA0NzQ6XHRcdGl1Y3YgPSBpdWN2X3NrKHNrKTtcbiA0NzU6XHRcbiA0NzY6XHRcdHNvY2tfaW5pdF9kYXRhKHNvY2ssIHNrKTtcbiA0Nzc6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNml1Y3YtXHUwMDNlYWNjZXB0X3EpO1xuIDQ3ODpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2aXVjdi1cdTAwM2VhY2NlcHRfcV9sb2NrKTtcbiA0Nzk6XHRcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2aXVjdi1cdTAwM2VzZW5kX3NrYl9xKTtcbiA0ODA6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNml1Y3YtXHUwMDNlbWVzc2FnZV9xLmxpc3QpO1xuIDQ4MTpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2aXVjdi1cdTAwM2VtZXNzYWdlX3EubG9jayk7XG4gNDgyOlx0XHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNml1Y3YtXHUwMDNlYmFja2xvZ19za2JfcSk7XG4gNDgzOlx0XHRpdWN2LVx1MDAzZXNlbmRfdGFnID0gMDtcbiA0ODQ6XHRcdGF0b21pY19zZXQoXHUwMDI2aXVjdi1cdTAwM2VwZW5kaW5ncywgMCk7XG4gNDg1Olx0XHRpdWN2LVx1MDAzZWZsYWdzID0gMDtcbiA0ODY6XHRcdGl1Y3YtXHUwMDNlbXNnbGltaXQgPSAwO1xuIDQ4NzpcdFx0YXRvbWljX3NldChcdTAwMjZpdWN2LVx1MDAzZXNrYnNfaW5feG1pdCwgMCk7XG4gNDg4Olx0XHRhdG9taWNfc2V0KFx1MDAyNml1Y3YtXHUwMDNlbXNnX3NlbnQsIDApO1xuIDQ4OTpcdFx0YXRvbWljX3NldChcdTAwMjZpdWN2LVx1MDAzZW1zZ19yZWN2LCAwKTtcbiA0OTA6XHRcdGl1Y3YtXHUwMDNlcGF0aCA9IE5VTEw7XG4gNDkxOlx0XHRpdWN2LVx1MDAzZXNrX3R4bm90aWZ5ID0gYWZpdWN2X2hzX2NhbGxiYWNrX3R4bm90aWZ5O1xuIDQ5MjpcdFx0bWVtc2V0KFx1MDAyNml1Y3YtXHUwMDNlaW5pdCwgMCwgc2l6ZW9mKGl1Y3YtXHUwMDNlaW5pdCkpO1xuIDQ5MzpcdFx0aWYgKHByX2l1Y3YpXG4gNDk0Olx0XHRcdGl1Y3YtXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xuIDQ5NTpcdFx0ZWxzZVxuIDQ5NjpcdFx0XHRpdWN2LVx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSElQRVI7XG4gNDk3Olx0XG4gNDk4Olx0XHRzay1cdTAwM2Vza19kZXN0cnVjdCA9IGl1Y3Zfc29ja19kZXN0cnVjdDtcbiA0OTk6XHRcdHNrLVx1MDAzZXNrX3NuZHRpbWVvID0gSVVDVl9DT05OX1RJTUVPVVQ7XG4gNTAwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE1OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTc5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBJVUNWIFRyYW5zcG9ydCBhbmQgUGF0aCBNYW5hZ2VtZW50KioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgaXQmIzM5O3MgYmVjb21pbmcgY2xlYXIgaG93IHRoZSBgaXVjdi0mZ3Q7dHJhbnNwb3J0YCBmaWVsZCBiZWhhdmVzIGluIHJlbGF0aW9uIHRvIGBwcl9pdWN2YC4gUmlnaHQsIHNvIGlmIGBwcl9pdWN2YCAqaXNuJiMzOTt0KiBzZXQsIHRoZW4gYGl1Y3YtJmd0O3RyYW5zcG9ydGAgZGVmYXVsdHMgdG8gYEFGX0lVQ1ZfVFJBTlNfSElQRVJgLCBhbmQgbm90IGBBRl9JVUNWX1RSQU5TX0lVQ1ZgLiBUaGF0JiMzOTtzIHRoZSBjcnV4IG9mIGl0LiBXaGVuIGl04oCZcyBgSElQRVJgLCBgYWZpdWN2X3BhdGhfY29ubmVjdGAgaXNu4oCZdCBldmVuIGludm9rZWQuIFdoaWNoIGV4cGxhaW5zIHdoeSBgaXVjdi0mZ3Q7cGF0aGAgcmVtYWlucyBOVUxMIGluIHRoYXQgc2NlbmFyaW8uIE1ha2VzIHNlbnNlLgoKQW5kIGJlY2F1c2UgYGl1Y3YtJmd0O3BhdGhgIGlzIE5VTEwgaW4gdGhpcyBISVBFUiBjYXNlLCBgaXVjdl9zZXZlcl9wYXRoYCBlZmZlY3RpdmVseSBkb2VzIG5vdGhpbmcg4oCTIGB4Y2hnKCZhbXA7aXVjdi0mZ3Q7cGF0aCwgTlVMTClgIGp1c3QgcmV0dXJucyBOVUxMLiBHb29kLCBzbyB3ZSYjMzk7cmUgYXZvaWRpbmcgYW55IHBvdGVudGlhbCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb24gYHByX2l1Y3ZgLCBhcyBsb25nIGFzIGl0JiMzOTtzIG51bGwgaW4gdGhpcyBjYXNlLgoKSG1tLCBidXQgaGVyZSYjMzk7cyBhIHRob3VnaHQuLi4gQ2FuIHdlIHZlcmlmeSB0aGUgYmVoYXZpb3Igb2YgYGl1Y3Zfc2V2ZXJfcGF0aGAgZGlyZWN0bHkgd2l0aCBgQUZfSVVDVl9UUkFOU19ISVBFUmA/IExldCBtZSBzZWUuIFNpbmNlIHRoZSBgaXVjdi0mZ3Q7cGF0aGAgcG9pbnRlciBpcyBuZXZlciBhbGxvY2F0ZWQgd2l0aCBgSElQRVJgLCBgaXVjdl9zZXZlcl9wYXRoYCAqc2hvdWxkKiBiZSBhIG5vLW9wLiBCdXQgd2FpdCwgaXMgdGhlcmUgYW55IHNpdHVhdGlvbiB3aGVyZSBgaXVjdi0mZ3Q7cGF0aGAgKmlzKiBhbGxvY2F0ZWQgZm9yIGBBRl9JVUNWX1RSQU5TX0hJUEVSYD8gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGlmIGl0JiMzOTtzIHVzZWQgYXQgYWxsIHdpdGggSElQRVIsIGp1c3QgdG8gYmUgc3VyZS4gSXQgd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLCB0byBlbnN1cmUgd2UgYXJlIGNvdmVyaW5nIGFsbCBjYXNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTU6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXVjdi1cdTAwM2VwYXRoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYz0xNjY9c3RhdGljIGlubGluZSBpbnQgaXVjdl9iZWxvd19tc2dsaW0oc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNzItXHRpZiAoaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKVxubmV0L2l1Y3YvYWZfaXVjdi5jOjE3MzpcdFx0cmV0dXJuIChhdG9taWNfcmVhZChcdTAwMjZpdWN2LVx1MDAzZXNrYnNfaW5feG1pdCkgXHUwMDNjIGl1Y3YtXHUwMDNlcGF0aC1cdTAwM2Vtc2dsaW0pO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE3NC1cdGVsc2Vcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MzM1PXN0YXRpYyB2b2lkIGl1Y3Zfc2V2ZXJfcGF0aChzdHJ1Y3Qgc29jayAqc2ssIGludCB3aXRoX3VzZXJfZGF0YSlcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzM4LVx0c3RydWN0IGl1Y3Zfc29jayAqaXVjdiA9IGl1Y3Zfc2soc2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjMzOTpcdHN0cnVjdCBpdWN2X3BhdGggKnBhdGggPSBpdWN2LVx1MDAzZXBhdGg7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMzQwLVx0c3RydWN0IHNvY2tfbXNnX3EgKnAsICpuO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNDItXHQvKiBXaG9ldmVyIHJlc2V0cyB0aGUgcGF0aCBwb2ludGVyLCBtdXN0IHNldmVyIGFuZCBmcmVlIGl0LiAqL1xubmV0L2l1Y3YvYWZfaXVjdi5jOjM0MzpcdGlmICh4Y2hnKFx1MDAyNml1Y3YtXHUwMDNlcGF0aCwgTlVMTCkpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNDQtXHRcdGlmICh3aXRoX3VzZXJfZGF0YSkge1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNDctXHRcdFx0QVNDRUJDKHVzZXJfZGF0YSwgc2l6ZW9mKHVzZXJfZGF0YSkpO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjM0ODpcdFx0XHRwcl9pdWN2LVx1MDAzZXBhdGhfc2V2ZXIocGF0aCwgdXNlcl9kYXRhKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNDktXHRcdH0gZWxzZVxubmV0L2l1Y3YvYWZfaXVjdi5jOjM1MDpcdFx0XHRwcl9pdWN2LVx1MDAzZXBhdGhfc2V2ZXIocGF0aCwgTlVMTCk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMzUxLVx0XHRpdWN2X3BhdGhfZnJlZShwYXRoKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9NDY2PXN0YXRpYyBzdHJ1Y3Qgc29jayAqaXVjdl9zb2NrX2FsbG9jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90bywgZ2ZwX3QgcHJpbywgaW50IGtlcm4pXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ4OS1cdGF0b21pY19zZXQoXHUwMDI2aXVjdi1cdTAwM2Vtc2dfcmVjdiwgMCk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6NDkwOlx0aXVjdi1cdTAwM2VwYXRoID0gTlVMTDtcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OTEtXHRpdWN2LVx1MDAzZXNrX3R4bm90aWZ5ID0gYWZpdWN2X2hzX2NhbGxiYWNrX3R4bm90aWZ5O1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz01ODI9c3RhdGljIGludCBpdWN2X3NvY2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjA5LVx0fVxubmV0L2l1Y3YvYWZfaXVjdi5jOjYxMDpcdGlmIChpdWN2LVx1MDAzZXBhdGgpXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjExLVx0XHRnb3RvIGRvbmVfdW5sb2NrO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz02ODc9c3RhdGljIGludCBhZml1Y3ZfcGF0aF9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy02OTktXHQvKiBDcmVhdGUgcGF0aC4gKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYzo3MDA6XHRpdWN2LVx1MDAzZXBhdGggPSBpdWN2X3BhdGhfYWxsb2MoaXVjdi1cdTAwM2Vtc2dsaW1pdCxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03MDEtXHRcdFx0XHQgICAgIElVQ1ZfSVBSTURBVEEsIEdGUF9LRVJORUwpO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjcwMjpcdGlmICghaXVjdi1cdTAwM2VwYXRoKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNzAzLVx0XHRlcnIgPSAtRU5PTUVNO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy03MDUtXHR9XG5uZXQvaXVjdi9hZl9pdWN2LmM6NzA2Olx0ZXJyID0gcHJfaXVjdi1cdTAwM2VwYXRoX2Nvbm5lY3QoaXVjdi1cdTAwM2VwYXRoLCBcdTAwMjZhZl9pdWN2X2hhbmRsZXIsXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzA3LVx0XHRcdFx0ICAgIHNhLVx1MDAzZXNpdWN2X3VzZXJfaWQsIE5VTEwsIHVzZXJfZGF0YSxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzA5LVx0aWYgKGVycikge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjcxMDpcdFx0aXVjdl9wYXRoX2ZyZWUoaXVjdi1cdTAwM2VwYXRoKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzo3MTE6XHRcdGl1Y3YtXHUwMDNlcGF0aCA9IE5VTEw7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNzEyLVx0XHRzd2l0Y2ggKGVycikge1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz05MTY9c3RhdGljIGludCBpdWN2X3NvY2tfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNTQtXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTA1NTpcdFx0aWYgKCgoaXVjdi1cdTAwM2VwYXRoLVx1MDAzZWZsYWdzIFx1MDAyNiBJVUNWX0lQUk1EQVRBKSBcdTAwMjYgaXVjdi1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA1Ni1cdFx0ICAgIHNrYi1cdTAwM2VsZW4gXHUwMDNjPSA3KSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTA1NzpcdFx0XHRlcnIgPSBpdWN2X3NlbmRfaXBybShpdWN2LVx1MDAzZXBhdGgsIFx1MDAyNnR4bXNnLCBza2IpO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNTgtXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNjktXHRcdFx0aWYgKGVyciA9PSAweDE1KSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTA3MDpcdFx0XHRcdHByX2l1Y3YtXHUwMDNlcGF0aF9zZXZlcihpdWN2LVx1MDAzZXBhdGgsIE5VTEwpO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNzEtXHRcdFx0XHRhdG9taWNfZGVjKFx1MDAyNml1Y3YtXHUwMDNlc2tic19pbl94bWl0KTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA4OC1cdFx0XHR9XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTA4OTpcdFx0XHRlcnIgPSBwcl9pdWN2LVx1MDAzZW1lc3NhZ2Vfc2VuZChpdWN2LVx1MDAzZXBhdGgsIFx1MDAyNnR4bXNnLFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwOTAtXHRcdFx0XHRcdFx0ICAgIElVQ1ZfSVBCVUZMU1QsIDAsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwOTItXHRcdH0gZWxzZSB7IC8qIG5vbi1JUFJNIExpbmVhciBza2IgKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMDkzOlx0XHRcdGVyciA9IHByX2l1Y3YtXHUwMDNlbWVzc2FnZV9zZW5kKGl1Y3YtXHUwMDNlcGF0aCwgXHUwMDI2dHhtc2csXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA5NC1cdFx0XHRcdFx0MCwgMCwgKHZvaWQgKilza2ItXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWxlbik7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTE0MTg9c3RhdGljIGludCBpdWN2X3NvY2tfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGhvdylcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ0Ni1cdFx0XHR0eG1zZy50YWcgPSAwO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE0NDc6XHRcdFx0ZXJyID0gcHJfaXVjdi1cdTAwM2VtZXNzYWdlX3NlbmQoaXVjdi1cdTAwM2VwYXRoLCBcdTAwMjZ0eG1zZyxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDQ4LVx0XHRcdFx0SVVDVl9JUFJNREFUQSwgMCwgKHZvaWQgKikgaXBybV9zaHV0ZG93biwgOCk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NjgtXHRcdGlmICgoaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKSBcdTAwMjZcdTAwMjZcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNDY5Olx0XHQgICAgaXVjdi1cdTAwM2VwYXRoKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ3MDpcdFx0XHRlcnIgPSBwcl9pdWN2LVx1MDAzZXBhdGhfcXVpZXNjZShpdWN2LVx1MDAzZXBhdGgsIE5VTEwpO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NzEtXHRcdFx0aWYgKGVycilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTU1Mj1zdGF0aWMgaW50IGl1Y3Zfc29ja19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE1NzYtXHRjYXNlIFNPX01TR0xJTUlUOlxubmV0L2l1Y3YvYWZfaXVjdi5jOjE1Nzc6XHRcdHZhbCA9IChpdWN2LVx1MDAzZXBhdGggIT0gTlVMTCkgPyBpdWN2LVx1MDAzZXBhdGgtXHUwMDNlbXNnbGltXHQvKiBjb25uZWN0ZWQgKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNTc4LVx0XHRcdFx0XHQgICA6IGl1Y3YtXHUwMDNlbXNnbGltaXQ7XHQvKiBkZWZhdWx0ICovXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTE2MDc9c3RhdGljIGludCBpdWN2X2NhbGxiYWNrX2Nvbm5yZXEoc3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY0NC1cdGlmIChzay1cdTAwM2Vza19zdGF0ZSAhPSBJVUNWX0xJU1RFTikge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE2NDU6XHRcdGVyciA9IHByX2l1Y3YtXHUwMDNlcGF0aF9zZXZlcihwYXRoLCB1c2VyX2RhdGEpO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NDYtXHRcdGl1Y3ZfcGF0aF9mcmVlKHBhdGgpO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjUxLVx0aWYgKHNrX2FjY2VwdHFfaXNfZnVsbChzaykpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjUyOlx0XHRlcnIgPSBwcl9pdWN2LVx1MDAzZXBhdGhfc2V2ZXIocGF0aCwgdXNlcl9kYXRhKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjUzLVx0XHRpdWN2X3BhdGhfZnJlZShwYXRoKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY1OS1cdGlmICghbnNrKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTY2MDpcdFx0ZXJyID0gcHJfaXVjdi1cdTAwM2VwYXRoX3NldmVyKHBhdGgsIHVzZXJfZGF0YSk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY2MS1cdFx0aXVjdl9wYXRoX2ZyZWUocGF0aCk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NzUtXHRtZW1jcHkobml1Y3YtXHUwMDNlc3JjX3VzZXJfaWQsIGl1Y3YtXHUwMDNlc3JjX3VzZXJfaWQsIDgpO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE2NzY6XHRuaXVjdi1cdTAwM2VwYXRoID0gcGF0aDtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjc3LVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjg1LVx0cGF0aC1cdTAwM2Vtc2dsaW0gPSBpdWN2LVx1MDAzZW1zZ2xpbWl0O1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE2ODY6XHRlcnIgPSBwcl9pdWN2LVx1MDAzZXBhdGhfYWNjZXB0KHBhdGgsIFx1MDAyNmFmX2l1Y3ZfaGFuZGxlciwgbnVzZXJfZGF0YSwgbnNrKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjg3LVx0aWYgKGVycikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODcyMgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDI1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElVQ1YgUGF0aCBMb2dpYyoqCgpPa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBpdWN2LSZndDtwYXRoYCBpcyAqb25seSogdXNlZCB3aGVuIHRoZSB0cmFuc3BvcnQgdHlwZSBpcyBgQUZfSVVDVl9UUkFOU19JVUNWYC4gVGhpcyBpcyB0aGUgY3J1eCBvZiB0aGUgaXNzdWUuIElmIHdlJiMzOTtyZSAqbm90KiBvbiB6L1ZNLCB0aGVuIHRoZSBwb2ludGVyIGBwcl9pdWN2YCBpcyBudWxsLCB0aGUgYGl1Y3YtJmd0O3RyYW5zcG9ydGAgaXMgc2V0IHRvIGBBRl9JVUNWX1RSQU5TX0hJUEVSYCwgYW5kIGBpdWN2LSZndDtwYXRoYCBuZXZlciBnZXRzIGFsbG9jYXRlZCBpbiB0aGUgZmlyc3QgcGxhY2UuCgpXYWl0IGEgc2Vjb25k4oCmIGlmIGBpdWN2LSZndDtwYXRoYCBpcyAqbmV2ZXIqIGFsbG9jYXRlZCB3aGVuIHRoZSB0cmFuc3BvcnQgaXMgSElQRVIsIHRoZW4gdGhlIGZ1bmN0aW9uIGBpdWN2X3NldmVyX3BhdGhgIHdvbuKAmXQgYWN0dWFsbHkgZG8gYW55dGhpbmcgYmVjYXVzZSB0aGUgYHhjaGcoJmFtcDtpdWN2LSZndDtwYXRoLCBOVUxMKWAgY2FsbCB3aWxsIGFsd2F5cyBqdXN0IHJldHVybiBgTlVMTGAuIFRoZXJlZm9yZSwgdGhhdCBtb2RpZmllZCBjb2RlIHdpdGhpbiBgaXVjdl9zZXZlcl9wYXRoYCB3aWxsICpuZXZlciogZ2V0IGV4ZWN1dGVkIHVubGVzcyB0aGUgc3lzdGVtIGlzIHJ1bm5pbmcgb24gei9WTS4KCklzIG15IGxpbmUgb2YgcmVhc29uaW5nIHNvdW5kPyBJIG5lZWQgdG8gY29uZmlybSB0aGlzLgoKQWxyaWdodCwgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayBpZiBgaXVjdi0mZ3Q7cGF0aGAgKmNhbiogYmUgc2V0IGZvciBgQUZfSVVDVl9UUkFOU19ISVBFUmAuIEnigJlsbCBsb29rIGF0IGBuZXQvaXVjdi9hZl9pdWN2LmNgLiBSaWdodCwgYGFmaXVjdl9wYXRoX2Nvbm5lY3RgIGlzIG9ubHkgY2FsbGVkIHdoZW4gYGl1Y3YtJmd0O3RyYW5zcG9ydGAgaXMgKm5vdCogYEFGX0lVQ1ZfVFJBTlNfSElQRVJgLiBTbyBpdCBzZWVtcyBoaWdobHkgdW5saWtlbHkuIE5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBpdWN2X3NlbmRfY3RybGAsIHNpbmNlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBISVBFUi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTU6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNjgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM2ODpcdC8qIFNlbmQgY29udHJvbGxpbmcgZmxhZ3MgdGhyb3VnaCBhbiBJVUNWIHNvY2tldCBmb3IgSElQRVIgdHJhbnNwb3J0ICovXG4gMzY5Olx0c3RhdGljIGludCBpdWN2X3NlbmRfY3RybChzdHJ1Y3Qgc29jayAqc2ssIHU4IGZsYWdzKVxuIDM3MDpcdHtcbiAzNzE6XHRcdHN0cnVjdCBpdWN2X3NvY2sgKml1Y3YgPSBpdWN2X3NrKHNrKTtcbiAzNzI6XHRcdGludCBlcnIgPSAwO1xuIDM3MzpcdFx0aW50IGJsZW47XG4gMzc0Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIDM3NTpcdFx0dTggc2h1dGRvd24gPSAwO1xuIDM3NjpcdFxuIDM3NzpcdFx0YmxlbiA9IHNpemVvZihzdHJ1Y3QgYWZfaXVjdl90cmFuc19oZHIpICYjNDM7XG4gMzc4Olx0XHQgICAgICAgTExfUkVTRVJWRURfU1BBQ0UoaXVjdi1cdTAwM2Voc19kZXYpO1xuIDM3OTpcdFx0aWYgKHNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNiBTRU5EX1NIVVRET1dOKSB7XG4gMzgwOlx0XHRcdC8qIGNvbnRyb2xsaW5nIGZsYWdzIHNob3VsZCBiZSBzZW50IGFueXdheSAqL1xuIDM4MTpcdFx0XHRzaHV0ZG93biA9IHNrLVx1MDAzZXNrX3NodXRkb3duO1xuIDM4MjpcdFx0XHRzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjY9IFJDVl9TSFVURE9XTjtcbiAzODM6XHRcdH1cbiAzODQ6XHRcdHNrYiA9IHNvY2tfYWxsb2Nfc2VuZF9za2Ioc2ssIGJsZW4sIDEsIFx1MDAyNmVycik7XG4gMzg1Olx0XHRpZiAoc2tiKSB7XG4gMzg2Olx0XHRcdHNrYl9yZXNlcnZlKHNrYiwgYmxlbik7XG4gMzg3Olx0XHRcdGVyciA9IGFmaXVjdl9oc19zZW5kKE5VTEwsIHNrLCBza2IsIGZsYWdzKTtcbiAzODg6XHRcdH1cbiAzODk6XHRcdGlmIChzaHV0ZG93bilcbiAzOTA6XHRcdFx0c2stXHUwMDNlc2tfc2h1dGRvd24gPSBzaHV0ZG93bjtcbiAzOTE6XHRcdHJldHVybiBlcnI7XG4gMzkyOlx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTc5NAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgSElQRVIgSXNzdWUqKgoKT2theSwgc28gSSBzZWUgYSBjYWxsIHRvIGBhZml1Y3ZfaHNfc2VuZGAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGFuZCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIEhJUEVSLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4gRmlyc3QsIEkgaGF2ZSBhIGh1bmNoLCBhIG5hZ2dpbmcgcXVlc3Rpb24sIHJlYWxseTogSXMgYGl1Y3YtJmd0O3BhdGhgIGFjdHVhbGx5IGJlaW5nIHNldCBjb3JyZWN0bHkgaW4gdGhlIGNvbnRleHQgb2YgSElQRVIgb3BlcmF0aW9ucz8gVGhhdCYjMzk7cyBhIGNsYXNzaWMgZ290Y2hhLiBUaGUgcGF0aCBpbml0aWFsaXphdGlvbiBpcyBjcnVjaWFsLiBJdOKAmXMgdGhlIG9idmlvdXMgZmlyc3Qgc3RlcCBvZiB0cm91Ymxlc2hvb3RpbmcgdGhpcy4KClRoZXJlZm9yZSwgSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgYGFmaXVjdl9oc19zZW5kYCBmdW5jdGlvbiBpdHNlbGYsIG9yIHBlcmhhcHMgcmVsYXRlZCBISVBFUiBmdW5jdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGRhdGEgZmxvdyBhbmQgaG93IGl0IGhhbmRsZXMgdGhlIElVQ1YgcGF0aCBzdHJ1Y3R1cmVzLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIG9yIG5vdCB0aGlzIGNyaXRpY2FsIGZpZWxkIGlzIGJlaW5nIHByb3Blcmx5IHBvcHVsYXRlZC4gVGhhdOKAmXMgd2hlcmUgSSYjMzk7bGwgYmVnaW4sIGxvb2tpbmcgZm9yIGluaXRpYWxpemF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpdWN2LVx1MDAzZXBhdGggPSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmM9NDY2PXN0YXRpYyBzdHJ1Y3Qgc29jayAqaXVjdl9zb2NrX2FsbG9jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90bywgZ2ZwX3QgcHJpbywgaW50IGtlcm4pXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ4OS1cdGF0b21pY19zZXQoXHUwMDI2aXVjdi1cdTAwM2Vtc2dfcmVjdiwgMCk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6NDkwOlx0aXVjdi1cdTAwM2VwYXRoID0gTlVMTDtcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OTEtXHRpdWN2LVx1MDAzZXNrX3R4bm90aWZ5ID0gYWZpdWN2X2hzX2NhbGxiYWNrX3R4bm90aWZ5O1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz02ODc9c3RhdGljIGludCBhZml1Y3ZfcGF0aF9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy02OTktXHQvKiBDcmVhdGUgcGF0aC4gKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYzo3MDA6XHRpdWN2LVx1MDAzZXBhdGggPSBpdWN2X3BhdGhfYWxsb2MoaXVjdi1cdTAwM2Vtc2dsaW1pdCxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03MDEtXHRcdFx0XHQgICAgIElVQ1ZfSVBSTURBVEEsIEdGUF9LRVJORUwpO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy03MTAtXHRcdGl1Y3ZfcGF0aF9mcmVlKGl1Y3YtXHUwMDNlcGF0aCk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6NzExOlx0XHRpdWN2LVx1MDAzZXBhdGggPSBOVUxMO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTcxMi1cdFx0c3dpdGNoIChlcnIpIHtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTYwNz1zdGF0aWMgaW50IGl1Y3ZfY2FsbGJhY2tfY29ubnJlcShzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjc1LVx0bWVtY3B5KG5pdWN2LVx1MDAzZXNyY191c2VyX2lkLCBpdWN2LVx1MDAzZXNyY191c2VyX2lkLCA4KTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjc2Olx0bml1Y3YtXHUwMDNlcGF0aCA9IHBhdGg7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY3Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTU6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2MjUKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJVUNWIFBhdGggSXNzdWUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IGBpdWN2LSZndDtwYXRoYCBpcyB0aGUgY3VscHJpdCwgYnV0IHdoZXJlIGlzIGl0IHNldD8gVGhlIGNvZGUgc2hvd3MgaXQmIzM5O3Mgb25seSBhc3NpZ25lZCB3aXRoaW4gYGFmaXVjdl9wYXRoX2Nvbm5lY3RgIGFuZCBgaXVjdl9jYWxsYmFja19jb25ucmVxYC4gQ3J1Y2lhbGx5LCBib3RoIGFyZSB0cmlnZ2VyZWQgb25seSB3aGVuIGRlYWxpbmcgd2l0aCBgQUZfSVVDVl9UUkFOU19JVUNWYCBjb25uZWN0aW9ucy4gTm93LCBgaXVjdl9jYWxsYmFja19jb25ucmVxYCBpcyByZWdpc3RlcmVkIGFzIGEgY2FsbGJhY2sgdmlhIGBwcl9pdWN2LSZndDtpdWN2X3JlZ2lzdGVyYC4gSWYgYHByX2l1Y3ZgIGlzIGBOVUxMYCwgdGhlbiBgaXVjdl9jYWxsYmFja19jb25ucmVxYCBpcyAqbmV2ZXIqIGludm9rZWQuIENvbnNlcXVlbnRseSwgYGl1Y3YtJmd0O3BhdGhgIGNhbiAqbmV2ZXIqIGJlIG5vbi1OVUxMIHdoZW4gYHByX2l1Y3ZgIGlzIGBOVUxMYC4KCkFoYSEgTm93LCB3aGVuIGlzIGBwcl9pdWN2YCBub24tTlVMTD8gVGhhdCBkZXBlbmRzIG9uIGBtYWNoaW5lX2lzX3ZtKClgLiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBvbmx5IGlmIHdlJiMzOTtyZSBydW5uaW5nIHVuZGVyIHRoZSB6L1ZNIGh5cGVydmlzb3IuIEJ1dCB3YWl0LCBJIG5lZWQgdG8gY29uZmlybTogZG9lcyBRRU1VIGVtdWxhdGUgei9WTT8gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IFFFTVUgdHlwaWNhbGx5IGVtdWxhdGVzIEtWTSBvciBUQ0csIGFuZCB0aGUgbWFjaGluZSB0eXBlIGlzIHVzdWFsbHkgcmVwb3J0ZWQgYXMgYHMzOTAtY2N3LXZpcnRpb2AuIE9rYXksIHNvIFFFTVUgZG9lcyAqbm90KiBlbXVsYXRlIHovVk0uIFRoZXJlZm9yZSwgYG1hY2hpbmVfaXNfdm0oKWAgd2lsbCByZXR1cm4gZmFsc2UuIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGF0IGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWNoaW5lX2lzX3ZtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9ib290L3N0YXJ0dXAuYz03MT1zdGF0aWMgdm9pZCBkZXRlY3RfZGlhZzI4OCh2b2lkKVxuLS1cbmFyY2gvczM5MC9ib290L3N0YXJ0dXAuYy03Ni1cbmFyY2gvczM5MC9ib290L3N0YXJ0dXAuYzo3NzpcdGFjdGlvbiA9IG1hY2hpbmVfaXNfdm0oKSA/ICh1bnNpZ25lZCBsb25nKWNtZCA6IExQQVJXRFRfUkVTVEFSVDtcbmFyY2gvczM5MC9ib290L3N0YXJ0dXAuYzo3ODpcdGxlbiA9IG1hY2hpbmVfaXNfdm0oKSA/IHNpemVvZihjbWQpIDogMDtcbmFyY2gvczM5MC9ib290L3N0YXJ0dXAuYy03OS1cdGlmIChfX2RpYWcyODgoV0RUX0ZVTkNfSU5JVCwgTUlOX0lOVEVSVkFMLCBhY3Rpb24sIGxlbikpXG4tLVxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcwYy5jPTEwOD1pbnQgX19pbml0IGh5cGZzX2RpYWcwY19pbml0KHZvaWQpXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmMtMTA5LXtcbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYzoxMTA6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYy0xMTEtXHRcdHJldHVybiAwO1xuLS1cbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYz0xMTk9dm9pZCBoeXBmc19kaWFnMGNfZXhpdCh2b2lkKVxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcwYy5jLTEyMC17XG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmM6MTIxOlx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZzBjLmMtMTIyLVx0XHRyZXR1cm47XG4tLVxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmM9MTIzPWludCBoeXBmc192bV9pbml0KHZvaWQpXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfdm0uYy0xMjQte1xuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmM6MTI1Olx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfdm0uYy0xMjYtXHRcdHJldHVybiAwO1xuLS1cbmFyY2gvczM5MC9oeXBmcy9oeXBmc192bS5jPTEzNz12b2lkIGh5cGZzX3ZtX2V4aXQodm9pZClcbmFyY2gvczM5MC9oeXBmcy9oeXBmc192bS5jLTEzOC17XG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfdm0uYzoxMzk6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9oeXBmcy9oeXBmc192bS5jLTE0MC1cdFx0cmV0dXJuO1xuLS1cbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jPTE0OD1zdGF0aWMgc3NpemVfdCBoeXBmc193cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuLS1cbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jLTE3MC1cdGh5cGZzX2RlbGV0ZV90cmVlKCk7XG5hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYzoxNzE6XHRpZiAobWFjaGluZV9pc192bSgpKVxuYXJjaC9zMzkwL2h5cGZzL2lub2RlLmMtMTcyLVx0XHRyYyA9IGh5cGZzX3ZtX2NyZWF0ZV9maWxlcyhzYi1cdTAwM2VzX3Jvb3QpO1xuLS1cbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jPTI0MD1zdGF0aWMgaW50IGh5cGZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jLTI1OS1cdFx0cmV0dXJuIC1FTk9NRU07XG5hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYzoyNjA6XHRpZiAobWFjaGluZV9pc192bSgpKVxuYXJjaC9zMzkwL2h5cGZzL2lub2RlLmMtMjYxLVx0XHRyYyA9IGh5cGZzX3ZtX2NyZWF0ZV9maWxlcyhyb290X2RlbnRyeSk7XG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwcGxkYXRhLmg9NDU9c3RhdGljIGlubGluZSBpbnQgYXBwbGRhdGFfYXNtKHN0cnVjdCBhcHBsZGF0YV9wYXJhbWV0ZXJfbGlzdCAqcGFybV9saXN0LFxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcHBsZGF0YS5oLTUxLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2FwcGxkYXRhLmg6NTI6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcHBsZGF0YS5oLTUzLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaD05Nz1ERUZJTkVfTUFDSElORV9IQVNfRkVBVFVSRShscGFyLCBNRkVBVFVSRV9MUEFSKVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaC05OC1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg6OTk6I2RlZmluZSBtYWNoaW5lX2lzX3ZtXHRtYWNoaW5lX2hhc192bVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaC0xMDAtI2RlZmluZSBtYWNoaW5lX2lzX2t2bVx0bWFjaGluZV9oYXNfa3ZtXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jPTExMD1zdGF0aWMgbm9pbmxpbmUgX19pbml0IHZvaWQgc2V0dXBfYXJjaF9zdHJpbmcodm9pZClcbi0tXG5hcmNoL3MzOTAva2VybmVsL2Vhcmx5LmMtMTMyLVx0XHRcdCAgbWFjaGluZV9pc19scGFyKCkgPyBcJiMzNDtMUEFSXCYjMzQ7IDpcbmFyY2gvczM5MC9rZXJuZWwvZWFybHkuYzoxMzM6XHRcdFx0ICBtYWNoaW5lX2lzX3ZtKCkgPyBcJiMzNDt6L1ZNXCYjMzQ7IDpcbmFyY2gvczM5MC9rZXJuZWwvZWFybHkuYy0xMzQtXHRcdFx0ICBtYWNoaW5lX2lzX2t2bSgpID8gXCYjMzQ7S1ZNXCYjMzQ7IDogXCYjMzQ7dW5rbm93blwmIzM0Oyk7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYz02OTQ9c3RhdGljIGludCBfX2luaXQgaXBsX2luaXQodm9pZClcbi0tXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTcwNy1cdGNhc2UgSVBMX1RZUEVfQ0NXOlxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYzo3MDg6XHRcdGlmIChtYWNoaW5lX2lzX3ZtKCkpXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTcwOS1cdFx0XHRyYyA9IHN5c2ZzX2NyZWF0ZV9ncm91cChcdTAwMjZpcGxfa3NldC1cdTAwM2Vrb2JqLFxuLS1cbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM9MTI4Nj1zdGF0aWMgdm9pZCByZWlwbF9ibG9ja19jY3dfZmlsbF9wYXJtcyhzdHJ1Y3QgaXBsX3BhcmFtZXRlcl9ibG9jayAqaXBiKVxuLS1cbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMTI5Ny1cdC8qIFZNIFBBUk0gKi9cbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM6MTI5ODpcdGlmIChtYWNoaW5lX2lzX3ZtKCkgXHUwMDI2XHUwMDI2IGlwbF9ibG9ja192YWxpZCBcdTAwMjZcdTAwMjZcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMTI5OS1cdCAgICAoaXBsX2Jsb2NrLmNjdy52bV9mbGFncyBcdTAwMjYgSVBMX1BCMF9DQ1dfVk1fRkxBR19WUCkpIHtcbi0tXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jPTEzMDg9c3RhdGljIGludCBfX2luaXQgcmVpcGxfbnNzX2luaXQodm9pZClcbi0tXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTEzMTEtXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jOjEzMTI6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMTMxMy1cdFx0cmV0dXJuIDA7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYz0xMzI4PXN0YXRpYyBpbnQgX19pbml0IHJlaXBsX2Njd19pbml0KHZvaWQpXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0xMzM2LVx0cmMgPSBzeXNmc19jcmVhdGVfZ3JvdXAoXHUwMDI2cmVpcGxfa3NldC1cdTAwM2Vrb2JqLFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYzoxMzM3Olx0XHRcdFx0bWFjaGluZV9pc192bSgpID8gXHUwMDI2cmVpcGxfY2N3X2F0dHJfZ3JvdXBfdm1cbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMTMzOC1cdFx0XHRcdFx0XHQ6IFx1MDAyNnJlaXBsX2Njd19hdHRyX2dyb3VwX2xwYXIpO1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM9MjAxND1zdGF0aWMgaW50IHZtY21kX2luaXQodm9pZClcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMjAxNS17XG5hcmNoL3MzOTAva2VybmVsL2lwbC5jOjIwMTY6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMjAxNy1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM9MjI5ND1zdGF0aWMgaW50IF9faW5pdCB2bWNtZF9vbl9yZWJvb3Rfc2V0dXAoY2hhciAqc3RyKVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0yMjk1LXtcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM6MjI5NjpcdGlmICghbWFjaGluZV9pc192bSgpKVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0yMjk3LVx0XHRyZXR1cm4gMTtcbi0tXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jPTIzMDQ9c3RhdGljIGludCBfX2luaXQgdm1jbWRfb25fcGFuaWNfc2V0dXAoY2hhciAqc3RyKVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0yMzA1LXtcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM6MjMwNjpcdGlmICghbWFjaGluZV9pc192bSgpKVxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0yMzA3LVx0XHRyZXR1cm4gMTtcbi0tXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jPTIzMTQ9c3RhdGljIGludCBfX2luaXQgdm1jbWRfb25faGFsdF9zZXR1cChjaGFyICpzdHIpXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTIzMTUte1xuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYzoyMzE2Olx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTIzMTctXHRcdHJldHVybiAxO1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM9MjMyND1zdGF0aWMgaW50IF9faW5pdCB2bWNtZF9vbl9wb2ZmX3NldHVwKGNoYXIgKnN0cilcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMjMyNS17XG5hcmNoL3MzOTAva2VybmVsL2lwbC5jOjIzMjY6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMjMyNy1cdFx0cmV0dXJuIDE7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9tYWNoaW5lX2tleGVjLmM9MTgwPXN0YXRpYyBpbnQgbWFjaGluZV9rZXhlY19wcmVwYXJlX2tkdW1wKHZvaWQpXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMtMTgyLSNpZmRlZiBDT05GSUdfQ1JBU0hfRFVNUFxuYXJjaC9zMzkwL2tlcm5lbC9tYWNoaW5lX2tleGVjLmM6MTgzOlx0aWYgKG1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jLTE4NC1cdFx0ZGlhZzEwX3JhbmdlKFBGTl9ET1dOKGNyYXNoa19yZXMuc3RhcnQpLFxuLS1cbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYz0yNDY9c3RhdGljIHZvaWQgX19pbml0IGNvbm1vZGVfZGVmYXVsdCh2b2lkKVxuLS1cbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYy0yNTAtXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmM6MjUxOlx0aWYgKG1hY2hpbmVfaXNfdm0oKSkge1xuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jLTI1Mi1cdFx0Y3BjbWQoXCYjMzQ7UVVFUlkgQ09OU09MRVwmIzM0OywgcXVlcnlfYnVmZmVyLCAxMDI0LCBOVUxMKTtcbi0tXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmM9NTk4PXN0YXRpYyB2b2lkIF9faW5pdCByZXNlcnZlX2NyYXNoa2VybmVsKHZvaWQpXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jLTY1MC1cbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYzo2NTE6XHRpZiAoIW9sZG1lbV9kYXRhLnN0YXJ0IFx1MDAyNlx1MDAyNiBtYWNoaW5lX2lzX3ZtKCkpXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmMtNjUyLVx0XHRkaWFnMTBfcmFuZ2UoUEZOX0RPV04oY3Jhc2hfYmFzZSksIFBGTl9ET1dOKGNyYXNoX3NpemUpKTtcbi0tXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmM9ODk3PXZvaWQgX19pbml0IHNldHVwX2FyY2goY2hhciAqKmNtZGxpbmVfcClcbi0tXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmMtOTAxLSAgICAgICAgICovXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmM6OTAyOlx0aWYgKG1hY2hpbmVfaXNfdm0oKSlcbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYy05MDMtXHRcdHByX2luZm8oXCYjMzQ7TGludXggaXMgcnVubmluZyBhcyBhIHovVk0gXCYjMzQ7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9zeXNpbmZvLmM9Mzc5PXN0YXRpYyBfX2luaXQgaW50IGNyZWF0ZV9wcm9jX3NlcnZpY2VfbGV2ZWwodm9pZClcbi0tXG5hcmNoL3MzOTAva2VybmVsL3N5c2luZm8uYy0zODEtXHRwcm9jX2NyZWF0ZV9zZXEoXCYjMzQ7c2VydmljZV9sZXZlbHNcJiMzNDssIDAsIE5VTEwsIFx1MDAyNnNlcnZpY2VfbGV2ZWxfc2VxX29wcyk7XG5hcmNoL3MzOTAva2VybmVsL3N5c2luZm8uYzozODI6XHRpZiAobWFjaGluZV9pc192bSgpKVxuYXJjaC9zMzkwL2tlcm5lbC9zeXNpbmZvLmMtMzgzLVx0XHRyZWdpc3Rlcl9zZXJ2aWNlX2xldmVsKFx1MDAyNnNlcnZpY2VfbGV2ZWxfdm0pO1xuLS1cbmFyY2gvczM5MC9tbS9leHRtZW0uYz0yNTM9c2VnbWVudF90eXBlIChjaGFyKiBuYW1lKVxuLS1cbmFyY2gvczM5MC9tbS9leHRtZW0uYy0yNTctXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmM6MjU4Olx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmMtMjU5LVx0XHRyZXR1cm4gLUVOT1NZUztcbi0tXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmM9NDE1PXNlZ21lbnRfbG9hZCAoY2hhciAqbmFtZSwgaW50IGRvX25vbnNoYXJlZCwgdW5zaWduZWQgbG9uZyAqYWRkcixcbi0tXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmMtNDIwLVxuYXJjaC9zMzkwL21tL2V4dG1lbS5jOjQyMTpcdGlmICghbWFjaGluZV9pc192bSgpKVxuYXJjaC9zMzkwL21tL2V4dG1lbS5jLTQyMi1cdFx0cmV0dXJuIC1FTk9TWVM7XG4tLVxuYXJjaC9zMzkwL21tL2V4dG1lbS5jPTU0Nj1zZWdtZW50X3VubG9hZChjaGFyICpuYW1lKVxuLS1cbmFyY2gvczM5MC9tbS9leHRtZW0uYy01NDktXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmM6NTUwOlx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmMtNTUxLVx0XHRyZXR1cm47XG4tLVxuYXJjaC9zMzkwL21tL2V4dG1lbS5jPTU4Mj1zZWdtZW50X3NhdmUoY2hhciAqbmFtZSlcbi0tXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmMtNTg4LVxuYXJjaC9zMzkwL21tL2V4dG1lbS5jOjU4OTpcdGlmICghbWFjaGluZV9pc192bSgpKVxuYXJjaC9zMzkwL21tL2V4dG1lbS5jLTU5MC1cdFx0cmV0dXJuO1xuLS1cbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkLmM9MzMzOT1pbnQgZGFzZF9kZXZpY2VfaXNfcm8oc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UpXG4tLVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYy0zMzQ0LVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYzozMzQ1Olx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jLTMzNDYtXHRcdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jPTIyND1zdGF0aWMgaW50IF9faW5pdCBkYXNkX3BhcnNlX2tleXdvcmQoY2hhciAqa2V5d29yZClcbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYy0yMzgtXHRpZiAoc3RybmNtcChcJiMzNDtub3BhdlwmIzM0Oywga2V5d29yZCwgbGVuZ3RoKSA9PSAwKSB7XG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYzoyMzk6XHRcdGlmIChtYWNoaW5lX2lzX3ZtKCkpXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYy0yNDAtXHRcdFx0cHJfaW5mbyhcJiMzNDsmIzM5O25vcGF2JiMzOTsgaXMgbm90IHN1cHBvcnRlZCBvbiB6L1ZNXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmM9NjU2PWRhc2RfZGlhZ19pbml0KHZvaWQpXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmMtNjU3LXtcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYzo2NTg6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSkge1xuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jLTY1OS1cdFx0cHJfaW5mbyhcJiMzNDtEaXNjaXBsaW5lICVzIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgei9WTVxcblwmIzM0Oyxcbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmM9MTk0Nz1zdGF0aWMgaW50IGRhc2RfZWNrZF92YWxpZGF0ZV9zZXJ2ZXIoc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UsXG4tLVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jLTE5NTUtXHRcdHJldHVybiAwO1xuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jOjE5NTY6XHRpZiAoZGFzZF9ub3BhdiB8fCBtYWNoaW5lX2lzX3ZtKCkpXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMtMTk1Ny1cdFx0ZW5hYmxlX3BhdiA9IDA7XG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jPTg5OT1zdGF0aWMgaW50IF9faW5pdCBjb24zMjE1X2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci9jb24zMjE1LmMtOTEwLVx0LyogU2V0IHRoZSBjb25zb2xlIG1vZGUgZm9yIFZNICovXG5kcml2ZXJzL3MzOTAvY2hhci9jb24zMjE1LmM6OTExOlx0aWYgKG1hY2hpbmVfaXNfdm0oKSkge1xuZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jLTkxMi1cdFx0Y3BjbWQoXCYjMzQ7VEVSTSBDT05NT0RFIDMyMTVcJiMzNDssIE5VTEwsIDAsIE5VTEwpO1xuLS1cbmRyaXZlcnMvczM5MC9jaGFyL2NvbjMyNzAuYz0yMTM0PWNvbjMyNzBfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jaGFyL2NvbjMyNzAuYy0yMTQ1LVx0LyogU2V0IHRoZSBjb25zb2xlIG1vZGUgZm9yIFZNICovXG5kcml2ZXJzL3MzOTAvY2hhci9jb24zMjcwLmM6MjE0NjpcdGlmIChtYWNoaW5lX2lzX3ZtKCkpIHtcbmRyaXZlcnMvczM5MC9jaGFyL2NvbjMyNzAuYy0yMTQ3LVx0XHRjcGNtZChcJiMzNDtURVJNIENPTk1PREUgMzI3MFwmIzM0OywgTlVMTCwgMCwgTlVMTCk7XG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvaG1jZHJ2X2Z0cC5jPTI5Mz1pbnQgaG1jZHJ2X2Z0cF9zdGFydHVwKHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvaG1jZHJ2X2Z0cC5jLTMxMS1cdGlmIChobWNkcnZfZnRwX3JlZmNudCA9PSAwKSB7XG5kcml2ZXJzL3MzOTAvY2hhci9obWNkcnZfZnRwLmM6MzEyOlx0XHRpZiAobWFjaGluZV9pc192bSgpKVxuZHJpdmVycy9zMzkwL2NoYXIvaG1jZHJ2X2Z0cC5jLTMxMy1cdFx0XHRobWNkcnZfZnRwX2Z1bmNzID0gXHUwMDI2aG1jZHJ2X2Z0cF96dm07XG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvbW9ucmVhZGVyLmM9NDU0PXN0YXRpYyBpbnQgX19pbml0IG1vbl9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvbW9ucmVhZGVyLmMtNDU3LVxuZHJpdmVycy9zMzkwL2NoYXIvbW9ucmVhZGVyLmM6NDU4Olx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpIHtcbmRyaXZlcnMvczM5MC9jaGFyL21vbnJlYWRlci5jLTQ1OS1cdFx0cHJfZXJyKFwmIzM0O1RoZSB6L1ZNICpNT05JVE9SIHJlY29yZCBkZXZpY2UgZHJpdmVyIGNhbm5vdCBiZSBcJiMzNDtcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci9tb253cml0ZXIuYz0yOTQ9c3RhdGljIGludCBfX2luaXQgbW9uX2luaXQodm9pZClcbmRyaXZlcnMvczM5MC9jaGFyL21vbndyaXRlci5jLTI5NS17XG5kcml2ZXJzL3MzOTAvY2hhci9tb253cml0ZXIuYzoyOTY6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcbmRyaXZlcnMvczM5MC9jaGFyL21vbndyaXRlci5jLTI5Ny1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvcmF3MzI3MC5jPTYxND1zdGF0aWMgdm9pZCByYXczMjcwX3Jlc2V0X2RldmljZV9jYihzdHJ1Y3QgcmF3MzI3MF9yZXF1ZXN0ICpycSwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci9yYXczMjcwLmMtNjIyLVx0XHRycC1cdTAwM2VzdGF0ZSA9IFJBVzMyNzBfU1RBVEVfSU5JVDtcbmRyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuYzo2MjM6XHR9IGVsc2UgaWYgKG1hY2hpbmVfaXNfdm0oKSkge1xuZHJpdmVycy9zMzkwL2NoYXIvcmF3MzI3MC5jLTYyNC1cdFx0cmF3MzI3MF9zaXplX2RldmljZV92bShycCk7XG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oPTM0ND1zY2xwX2FzY2ViYyh1bnNpZ25lZCBjaGFyIGNoKVxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oLTM0NS17XG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmg6MzQ2Olx0cmV0dXJuIChtYWNoaW5lX2lzX3ZtKCkpID8gX2FzY2ViY1tjaF0gOiBfYXNjZWJjXzUwMFtjaF07XG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmgtMzQ3LX1cbi0tXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmg9MzUxPXNjbHBfZWJjYXNjX3N0cihjaGFyICpzdHIsIGludCBucilcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHAuaC0zNTIte1xuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oOjM1MzpcdChtYWNoaW5lX2lzX3ZtKCkpID8gRUJDQVNDKHN0ciwgbnIpIDogRUJDQVNDXzUwMChzdHIsIG5yKTtcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHAuaC0zNTQtfVxuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3NjbHAuaD0zNTg9c2NscF9hc2NlYmNfc3RyKGNoYXIgKnN0ciwgaW50IG5yKVxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oLTM1OS17XG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmg6MzYwOlx0KG1hY2hpbmVfaXNfdm0oKSkgPyBBU0NFQkMoc3RyLCBucikgOiBBU0NFQkNfNTAwKHN0ciwgbnIpO1xuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oLTM2MS19XG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF9lYXJseS5jPTI2PXN0YXRpYyB2b2lkIF9faW5pdCBzY2xwX2Vhcmx5X2ZhY2lsaXRpZXNfZGV0ZWN0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF9lYXJseS5jLTc4LVx0aWYgKCFzY2NiLVx1MDAzZWhjcHVhKSB7XG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2Vhcmx5LmM6Nzk6XHRcdGlmIChtYWNoaW5lX2lzX3ZtKCkpXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2Vhcmx5LmMtODAtXHRcdFx0c2NscC5tYXhfY29yZXMgPSA2NDtcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3R0eS5jPTUwNT1zY2xwX3R0eV9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF90dHkuYy01MTItXHQvKiB6L1ZNIG11bHRpcGxleGVzIHRoZSBsaW5lIG1vZGUgb3V0cHV0IG9uIHRoZSAzMnh4IHNjcmVlbiAqL1xuZHJpdmVycy9zMzkwL2NoYXIvc2NscF90dHkuYzo1MTM6XHRpZiAobWFjaGluZV9pc192bSgpIFx1MDAyNlx1MDAyNiAhQ09OU09MRV9JU19TQ0xQKVxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF90dHkuYy01MTQtXHRcdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfdHR5LmMtNTM4LVx0c2NscF90dHlfYnVmZmVyX2NvdW50ID0gMDtcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfdHR5LmM6NTM5Olx0aWYgKG1hY2hpbmVfaXNfdm0oKSkge1xuZHJpdmVycy9zMzkwL2NoYXIvc2NscF90dHkuYy01NDAtXHRcdC8qIGNhc2UgaW5wdXQgbGluZXMgdG8gbG93ZXJjYXNlICovXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvdm1jcC5jPTUyPXZvaWQgX19pbml0IHZtY3BfY21hX3Jlc2VydmUodm9pZClcbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYy01My17XG5kcml2ZXJzL3MzOTAvY2hhci92bWNwLmM6NTQ6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYy01NS1cdFx0cmV0dXJuO1xuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYz0yNDg9c3RhdGljIGludCBfX2luaXQgdm1jcF9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvdm1jcC5jLTI1MS1cbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYzoyNTI6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYy0yNTMtXHRcdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3ZtbG9ncmRyLmM9ODA2PXN0YXRpYyBpbnQgX19pbml0IHZtbG9ncmRyX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci92bWxvZ3Jkci5jLTgxMS1cbmRyaXZlcnMvczM5MC9jaGFyL3ZtbG9ncmRyLmM6ODEyOlx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpIHtcbmRyaXZlcnMvczM5MC9jaGFyL3ZtbG9ncmRyLmMtODEzLVx0XHRwcl9lcnIoXCYjMzQ7bm90IHJ1bm5pbmcgdW5kZXIgVk0sIGRyaXZlciBub3QgbG9hZGVkLlxcblwmIzM0Oyk7XG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvdm11ci5jPTEwMDY9c3RhdGljIGludCBfX2luaXQgdXJfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3ZtdXIuYy0xMDEwLVxuZHJpdmVycy9zMzkwL2NoYXIvdm11ci5jOjEwMTE6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSkge1xuZHJpdmVycy9zMzkwL2NoYXIvdm11ci5jLTEwMTItXHRcdHByX2VycihcJiMzNDtUaGUgJXMgY2Fubm90IGJlIGxvYWRlZCB3aXRob3V0IHovVk1cXG5cJiMzNDssXG4tLVxuZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfaWQuYz0xNzM9c3RhdGljIHZvaWQgc25zaWRfY2FsbGJhY2soc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsIHZvaWQgKmRhdGEsIGludCByYylcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9pZC5jLTE3OC1cbmRyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2lkLmM6MTc5Olx0aWYgKHJjIFx1MDAyNlx1MDAyNiBtYWNoaW5lX2lzX3ZtKCkpIHtcbmRyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2lkLmMtMTgwLVx0XHQvKiBUcnkgZGlhZyAweDIxMCBmYWxsYmFjayBvbiB6L1ZNLiAqL1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmM9MjQ5ND1zdGF0aWMgaW5saW5lIGludCBfX2luaXQgYXBfYXN5bmNfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjUwNC1cdCAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYzoyNTA1Olx0aWYgKG1hY2hpbmVfaXNfdm0oKSlcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjUwNi1cdFx0cG9sbF9oaWdoX3RpbWVvdXQgPSAxNTAwMDAwO1xuLS1cbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmM9Mjk3PXN0YXRpYyBpbnQgcWV0aF9sMl9yZXF1ZXN0X2luaXRpYWxfbWFjKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpXG4tLVxuZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYy0zMDItXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jOjMwMzpcdGlmIChtYWNoaW5lX2lzX3ZtKCkpIHtcbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMtMzA0LVx0XHRyYyA9IHFldGhfdm1fcmVxdWVzdF9tYWMoY2FyZCk7XG4tLVxuZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jPTEzOT1zdGF0aWMgaW50IF9faW5pdCBzbXNnX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmMtMTQyLVxuZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jOjE0MzpcdGlmICghbWFjaGluZV9pc192bSgpKSB7XG5kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmMtMTQ0LVx0XHRyYyA9IC1FUFJPVE9OT1NVUFBPUlQ7XG4tLVxuZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdl9hcHAuYz0xNTI9c3RhdGljIGludCBfX2luaXQgc21zZ2l1Y3ZfYXBwX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2X2FwcC5jLTE1Ni1cbmRyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3ZfYXBwLmM6MTU3Olx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXG5kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2X2FwcC5jLTE1OC1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tLVxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmM9MTIzOT1zdGF0aWMgaW50IHBhcmFtX3NldF92bWlkZmlsdGVyKGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4tLVxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmMtMTI0Mi1cbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jOjEyNDM6XHRpZiAoIW1hY2hpbmVfaXNfdm0oKSB8fCAhaHZjX2l1Y3ZfZGV2aWNlcylcbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jLTEyNDQtXHRcdHJldHVybiAtRU5PREVWO1xuLS1cbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jPTEyNjY9c3RhdGljIGludCBwYXJhbV9nZXRfdm1pZGZpbHRlcihjaGFyICpidWZmZXIsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuLS1cbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jLTEyNzEtXG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYzoxMjcyOlx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkgfHwgIWh2Y19pdWN2X2RldmljZXMpXG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYy0xMjczLVx0XHRyZXR1cm4gLUVOT0RFVjtcbi0tXG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYz0xMzAxPXN0YXRpYyBpbnQgX19pbml0IGh2Y19pdWN2X2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYy0xMzA4LVxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmM6MTMwOTpcdGlmICghbWFjaGluZV9pc192bSgpKSB7XG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYy0xMzEwLVx0XHRwcl9ub3RpY2UoXCYjMzQ7VGhlIHovVk0gSVVDViBIVkMgZGV2aWNlIGRyaXZlciBjYW5ub3QgXCYjMzQ7XG4tLVxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jPTgxPXN0YXRpYyBpbnQgd2R0X3N0YXJ0KHN0cnVjdCB3YXRjaGRvZ19kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmMtODUtXG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmM6ODY6XHRpZiAobWFjaGluZV9pc192bSgpKSB7XG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmMtODctXHRcdGZ1bmMgPSBjb25jZWFsX29uID8gKFdEVF9GVU5DX0lOSVQgfCBXRFRfRlVOQ19DT05DRUFMKVxuLS1cbmRyaXZlcnMvd2F0Y2hkb2cvZGlhZzI4OF93ZHQuYz0xMDc9c3RhdGljIGludCB3ZHRfcGluZyhzdHJ1Y3Qgd2F0Y2hkb2dfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jLTExMS1cbmRyaXZlcnMvd2F0Y2hkb2cvZGlhZzI4OF93ZHQuYzoxMTI6XHRpZiAobWFjaGluZV9pc192bSgpKSB7XG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmMtMTEzLVx0XHQvKlxuLS1cbmRyaXZlcnMvd2F0Y2hkb2cvZGlhZzI4OF93ZHQuYz0xNjI9c3RhdGljIGludCBfX2luaXQgZGlhZzI4OF9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jLTE2NS1cbmRyaXZlcnMvd2F0Y2hkb2cvZGlhZzI4OF93ZHQuYzoxNjY6XHRpZiAobWFjaGluZV9pc192bSgpKSB7XG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmMtMTY3LVx0XHRjbWRfYnVmID0ga21hbGxvYyhNQVhfQ01ETEVOLCBHRlBfS0VSTkVMKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjI5ND1zdGF0aWMgaW50IF9faW5pdCBhZml1Y3ZfaW5pdCh2b2lkKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjk3LVxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyOTg6XHRpZiAobWFjaGluZV9pc192bSgpIFx1MDAyNlx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19JVUNWKSkge1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIyOTktXHRcdGNwY21kKFwmIzM0O1FVRVJZIFVTRVJJRFwmIzM0OywgaXVjdl91c2VyaWQsIHNpemVvZihpdWN2X3VzZXJpZCksIFx1MDAyNmVycik7XG4tLVxubmV0L2l1Y3YvaXVjdi5jPTE4NjI9c3RhdGljIGludCBfX2luaXQgaXVjdl9pbml0KHZvaWQpXG4tLVxubmV0L2l1Y3YvaXVjdi5jLTE4NjUtXG5uZXQvaXVjdi9pdWN2LmM6MTg2NjpcdGlmICghbWFjaGluZV9pc192bSgpKSB7XG5uZXQvaXVjdi9pdWN2LmMtMTg2Ny1cdFx0cmMgPSAtRVBST1RPTk9TVVBQT1JUO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODkzNQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDEzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBSZWFzb25pbmcgb24gdGhlIFZpcnR1YWwgTWFjaGluZSBEZXRlY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiBvdXIgZW52aXJvbm1lbnQgaXMgYSB2aXJ0dWFsIG1hY2hpbmUuIFNwZWNpZmljYWxseSwgSSBzZWUgYG1hY2hpbmVfaXNfdm1gIGlzIGRlZmluZWQgYXMgYG1hY2hpbmVfaGFzX3ZtYC4gTWFrZXMgc2Vuc2Ugc28gZmFyLiBUaGVuIGBtYWNoaW5lX2hhc192bWAgaXMgc2V0IGlmIHdlJiMzOTtyZSBydW5uaW5nIHVuZGVyIHovVk0uIEhtbSwgdGhhdCYjMzk7cyBhIGNsdWUuIE5vdywgSSBrbm93IFFFTVUgZW11bGF0ZXMgb3RoZXIgdmlydHVhbCBtYWNoaW5lcyDigJMgS1ZNIG9yIFRDRywgdXN1YWxseSDigJMgYnV0IGRvZXMgaXQgZW11bGF0ZSB6L1ZNPyBJIGRvbiYjMzk7dCAqdGhpbmsqIHNvLgoKV2FpdCBhIG1pbnV0ZS4uLiB3ZSYjMzk7cmUgZnV6emluZyBvbiBzMzkweCwgd2hpY2ggKmNvdWxkKiBiZSBydW5uaW5nIG9uIHJlYWwgei9WTSBoYXJkd2FyZS4gQnV0IFN5emthbGxlciB0eXBpY2FsbHkgdXNlcyBRRU1VLCBhbmQgUUVNVSB3b3VsZG4mIzM5O3QgYmUgZW11bGF0aW5nIHovVk0sIHJpZ2h0PyBTbywgZG9lcyBRRU1VIGVtdWxhdGUgei9WTT8KCk9rYXksIEkgbmVlZCB0byBnbyBiYWNrIGFuZCBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgbWFjaGluZV9pc192bWAuIEkgbmVlZCB0byBiZSBzdXJlLiBNeSBpbml0aWFsIGFzc3VtcHRpb25zIG1pZ2h0IGJlIGNvcnJlY3QsIGJ1dCBsZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEJhY2sgdG8gYmFzaWNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWNoaW5lX2hhc192bSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oPTk3PURFRklORV9NQUNISU5FX0hBU19GRUFUVVJFKGxwYXIsIE1GRUFUVVJFX0xQQVIpXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oLTk4LVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaDo5OTojZGVmaW5lIG1hY2hpbmVfaXNfdm1cdG1hY2hpbmVfaGFzX3ZtXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oLTEwMC0jZGVmaW5lIG1hY2hpbmVfaXNfa3ZtXHRtYWNoaW5lX2hhc19rdm1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTU6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk0NjIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlVucGFja2luZyBhIE1hY3JvOiBgbWFjaGluZV9oYXNfdm1gKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgc2VlIGBtYWNoaW5lX2hhc192bWAgaW4gdGhlIGNvZGUsIGFuZCBJJiMzOTttIHByZXR0eSBzdXJlIHRoYXQmIzM5O3MgYSBtYWNyby4gUmlnaHQsIGxldCYjMzk7cyBub3QgbWFrZSBhc3N1bXB0aW9ucyBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgbWFjcm8gaXMgKmFjdHVhbGx5KiBkb2luZyBiZWZvcmUgSSBnbyBhbnkgZnVydGhlci4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGp1bXAgdG8gaXRzIGRlZmluaXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBleHBhbnNpb24gdG8gYmUgY2VydGFpbiBvZiBpdHMgZWZmZWN0LCBlc3BlY2lhbGx5IGdpdmVuIGhvdyBjcml0aWNhbCBWTS1yZWxhdGVkIGxvZ2ljIG9mdGVuIGlzLiBJ4oCZbSBob3BpbmcgaXTigJlzIG5vdCBzb21ldGhpbmcgb3Zlcmx5IGNvbXBsZXgsIGJ1dCB5b3UgbmV2ZXIga25vdyB1bnRpbCB5b3UgbG9vay4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgZmlndXJlIG91dCBleGFjdGx5IHdoYXQgdGhlIHByZXByb2Nlc3NvciBpcyBnb2luZyB0byBzdWJzdGl0dXRlIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE1OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RFRklORV9NQUNISU5FX0hBU19GRUFUVVJFXFwodm0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaD05ND1ERUZJTkVfTUFDSElORV9IQVNfRkVBVFVSRShkaWFnOWMsIE1GRUFUVVJFX0RJQUc5QylcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg6OTU6REVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUodm0sIE1GRUFUVVJFX1ZNKVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaC05Ni1ERUZJTkVfTUFDSElORV9IQVNfRkVBVFVSRShrdm0sIE1GRUFUVVJFX0tWTSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTU6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk4MDMKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdDoKCioqVHJhY2luZyBEb3duIHRoZSBgTUZFQVRVUkVfVk1gIEZsYWcqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGBNRkVBVFVSRV9WTWAgc3ltYm9sIG9yIG1hY3JvIGlzIGRlZmluZWQgYW5kIHVzZWQuIEl0JiMzOTtzIHVzdWFsbHkgdGhlIGZpcnN0IHN0ZXAgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgcHVycG9zZSBvZiBzb21ldGhpbmcuIEkgbmVlZCB0byBrbm93OiBJcyB0aGlzIGEgZGVmaW5lIHN0YXRlbWVudD8gSXMgaXQgYSB2YXJpYWJsZT8gSXMgaXQgYmVpbmcgc2V0IGJhc2VkIG9uIGEgY29tcGlsZS10aW1lIGZsYWc/IEtub3dpbmcgdGhlIGRlZmluaXRpb24gd2lsbCB1bmxvY2sgc28gbXVjaCBpbmZvcm1hdGlvbi4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIHdoZXJlIHRoYXQgdmFyaWFibGUvbWFjcm8gaXMgKnVzZWQqIGFuZCB1bmRlcnN0YW5kIGl0cyBpbXBhY3Qgb24gdGhlIHN5c3RlbS4gSXMgaXQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24/IElzIGl0IGNvbnRyb2xsaW5nIHNvbWUgZXhlY3V0aW9uIHBhdGg/IFRoaXMgaXMgZ29pbmcgdG8gaW52b2x2ZSBzb21lIGNvZGUgc2VhcmNoaW5nIC0gbWF5YmUgZ3JlcCwgbWF5YmUgbXkgSURFJiMzOTtzIHN5bWJvbCBsb29rdXAsIGRlcGVuZGluZyBvbiB0aGUgY29kZWJhc2Ugc2l6ZSBhbmQgc3RydWN0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIHRoaW5rIGFib3V0IHBvdGVudGlhbCBoZWFkZXIgZmlsZXMsIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLCBhbmQgaWYgdGhpcyByZWxhdGVzIHRvIHNvbWUgcGxhdGZvcm0tc3BlY2lmaWMgZnVuY3Rpb25hbGl0eS4gQSBiaXQgb2YgZGV0ZWN0aXZlIHdvcmssIGJ1dCBmYWlybHkgcm91dGluZSB0byB1bmRlcnN0YW5kIHN5c3RlbSBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTU6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUZFQVRVUkVfVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2Jvb3Qvc3RhcnR1cC5jPTUyPXN0YXRpYyB2b2lkIGRldGVjdF9tYWNoaW5lX3R5cGUodm9pZClcbi0tXG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmMtNjctXHRlbHNlIGlmICghbWVtY21wKHZtbXMtXHUwMDNldm1bMF0uY3BpLCBcJiMzNDtcXHhhOVxceDYxXFx4ZTVcXHhkNFwmIzM0OywgNCkpXG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmM6Njg6XHRcdHNldF9tYWNoaW5lX2ZlYXR1cmUoTUZFQVRVUkVfVk0pO1xuYXJjaC9zMzkwL2Jvb3Qvc3RhcnR1cC5jLTY5LX1cbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oLTE3LSNkZWZpbmUgTUZFQVRVUkVfRElBRzlDXHRcdDZcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg6MTg6I2RlZmluZSBNRkVBVFVSRV9WTVx0XHQ3XG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oLTE5LSNkZWZpbmUgTUZFQVRVUkVfS1ZNXHRcdDhcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oPTk0PURFRklORV9NQUNISU5FX0hBU19GRUFUVVJFKGRpYWc5YywgTUZFQVRVUkVfRElBRzlDKVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaDo5NTpERUZJTkVfTUFDSElORV9IQVNfRkVBVFVSRSh2bSwgTUZFQVRVUkVfVk0pXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oLTk2LURFRklORV9NQUNISU5FX0hBU19GRUFUVVJFKGt2bSwgTUZFQVRVUkVfS1ZNKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDM4MgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEh5cGVydmlzb3IgQ2hlY2sqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQmIzM5O3MgY2hlY2tpbmcgYHZtbXMtJmd0O3ZtWzBdLmNwaWAgZm9yIGAmIzM0O1x4YTlceDYxXHhlNVx4ZDQmIzM0O2AsIHdoaWNoIEkgaW5zdGFudGx5IHJlY29nbml6ZSBhcyB0aGUgRUJDRElDIGVxdWl2YWxlbnQgb2YgJiMzNDt6L1ZNJiMzNDsuIFRoYXQmIzM5O3MgdGhlIGtleS4gVGhpcyB3aG9sZSBzZWN0aW9uIGlzIHNwZWNpZmljYWxseSBmb3IgaWRlbnRpZnlpbmcgaWYgdGhlIGNvZGUgaXMgcnVubmluZyBvbiB6L1ZNLiBRRU1VLCBvbiB0aGUgb3RoZXIgaGFuZCwgaWRlbnRpZmllcyBpdHNlbGYgYXMgS1ZNIG9yIFFFTVUsIGFzIGV4cGVjdGVkLiBUaHVzIGBtYWNoaW5lX2lzX3ZtKClgIHdpbGwgYmUgYGZhbHNlYCB1bmRlciBRRU1VLCByaWdodD8KCkFscmlnaHQsIGlmIGBtYWNoaW5lX2lzX3ZtKClgIGlzIGBmYWxzZWAsIHRoZW4gYHByX2l1Y3ZgIGlzIGBOVUxMYC4gQW5kIHdoZW4gYHByX2l1Y3ZgIGlzIGBOVUxMYCwgdGhlIGBpdWN2LSZndDt0cmFuc3BvcnRgIGlzIHNldCB0byBgQUZfSVVDVl9UUkFOU19ISVBFUmAsIGdvdCBpdC4gV2l0aCBgaXVjdi0mZ3Q7dHJhbnNwb3J0YCBhcyBgQUZfSVVDVl9UUkFOU19ISVBFUmAsIHRoZSBjb2RlIGVuc3VyZXMgdGhhdCBgaXVjdi0mZ3Q7cGF0aGAgaXMgbmV2ZXIgYWxsb2NhdGVkLgoKSGVyZSYjMzk7cyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nOiBiZWNhdXNlIGBpdWN2LSZndDtwYXRoYCBpcyBuZXZlciBhbGxvY2F0ZWQsIGBpdWN2X3NldmVyX3BhdGhgIGVmZmVjdGl2ZWx5IGRvZXMgbm90aGluZyBiZWNhdXNlIHRoZSBgeGNoZygmYW1wO2l1Y3YtJmd0O3BhdGgsIE5VTEwpYCBjYWxsIHdpbGwgYWx3YXlzIHJldHVybiBgTlVMTGAuIFRoYXQgbWVhbnMgdGhlIGNvZGUgYmxvY2sgKmluc2lkZSogdGhlIGBpZiAoeGNoZygmYW1wO2l1Y3YtJmd0O3BhdGgsIE5VTEwpKWAgY29uZGl0aW9uIGlzIE5FVkVSIGV4ZWN1dGVkIHdoZW4gcnVubmluZyB1bmRlciBRRU1VLiBUaGF0IGlzLCB1bmxlc3MgbXkgYXNzdW1wdGlvbnMgYXJlIGNvbXBsZXRlbHkgb2ZmLgoKV2FpdC4uLiBhbSBJIG1pc3Npbmcgc29tZXRoaW5nPyBJcyB0aGVyZSAqYW55KiB3YXkgYGl1Y3YtJmd0O3BhdGhgIGNvdWxkIGJlIG5vbi1OVUxMIHdoZW4gYHByX2l1Y3ZgIGlzIGFjdHVhbGx5IGBOVUxMYD8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjay4gSSYjMzk7bSBnb2luZyB0byBsb29rIHRocm91Z2ggdGhlIHN1cnJvdW5kaW5nIGNvZGUgY2FyZWZ1bGx5IGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBwYXRocyB0aGF0IGNvdWxkIHBvc3NpYmx5IHNldCBgaXVjdi0mZ3Q7cGF0aGAuIE5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG92ZXJsb29raW5nIGEgc3VidGxlIGRldGFpbCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpdWN2LVx1MDAzZXBhdGggPSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmM9NDY2PXN0YXRpYyBzdHJ1Y3Qgc29jayAqaXVjdl9zb2NrX2FsbG9jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90bywgZ2ZwX3QgcHJpbywgaW50IGtlcm4pXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ4OS1cdGF0b21pY19zZXQoXHUwMDI2aXVjdi1cdTAwM2Vtc2dfcmVjdiwgMCk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6NDkwOlx0aXVjdi1cdTAwM2VwYXRoID0gTlVMTDtcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OTEtXHRpdWN2LVx1MDAzZXNrX3R4bm90aWZ5ID0gYWZpdWN2X2hzX2NhbGxiYWNrX3R4bm90aWZ5O1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz02ODc9c3RhdGljIGludCBhZml1Y3ZfcGF0aF9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy02OTktXHQvKiBDcmVhdGUgcGF0aC4gKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYzo3MDA6XHRpdWN2LVx1MDAzZXBhdGggPSBpdWN2X3BhdGhfYWxsb2MoaXVjdi1cdTAwM2Vtc2dsaW1pdCxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03MDEtXHRcdFx0XHQgICAgIElVQ1ZfSVBSTURBVEEsIEdGUF9LRVJORUwpO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy03MTAtXHRcdGl1Y3ZfcGF0aF9mcmVlKGl1Y3YtXHUwMDNlcGF0aCk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6NzExOlx0XHRpdWN2LVx1MDAzZXBhdGggPSBOVUxMO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTcxMi1cdFx0c3dpdGNoIChlcnIpIHtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTYwNz1zdGF0aWMgaW50IGl1Y3ZfY2FsbGJhY2tfY29ubnJlcShzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjc1LVx0bWVtY3B5KG5pdWN2LVx1MDAzZXNyY191c2VyX2lkLCBpdWN2LVx1MDAzZXNyY191c2VyX2lkLCA4KTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjc2Olx0bml1Y3YtXHUwMDNlcGF0aCA9IHBhdGg7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY3Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTU6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE2ODgKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIElVQ1YgQ29ubmVjdGlvbiBFc3RhYmxpc2htZW50KioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb2RlIHNuaXBwZXQgaXMgcG9pbnRpbmcgdG8gYSBzcGVjaWZpYyBjb25uZWN0aW9uIHBhdGguIE15IGFuYWx5c2lzIHJldmVhbHMgdGhhdCB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24sIGBhZml1Y3ZfcGF0aF9jb25uZWN0YCwgYW5kIGl0cyBjb3JyZXNwb25kaW5nIGNhbGxiYWNrIGZ1bmN0aW9uLCBgaXVjdl9jYWxsYmFja19jb25ucmVxYCwgYXJlIHRoZSBvbmx5IHBvaW50cyB3aGVyZSBhIHBhcnRpY3VsYXIgY29ubmVjdGlvbiBwYXRod2F5IGlzIGluaXRpYWxpemVkLiBTcGVjaWZpY2FsbHksIGBhZml1Y3ZfcGF0aF9jb25uZWN0YCBpcyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgaXVjdl9zb2NrX2Nvbm5lY3RgLiBUaGlzIHN1Z2dlc3RzIGEgY2xlYXIgY29ubmVjdGlvbiBmbG93OiBhIHNvY2tldCBjb25uZWN0IGV2ZW50IHRyaWdnZXJpbmcgdGhlIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCB2aWEgdGhlIGBhZml1Y3ZfcGF0aF9jb25uZWN0YCBmdW5jdGlvbi4gSSB3aWxsIG5lZWQgdG8gZGVsdmUgZGVlcGVyIGludG8gdGhlc2UgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgdGhlIGludHJpY2FjaWVzIG9mIGhvdyBJVUNWIGNvbm5lY3Rpb25zIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGlzIGNvbnRleHQuIEZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBpbnRvIHRoZXNlIGtleSBmdW5jdGlvbnMgaXMgaW4gb3JkZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE1OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzY2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NjY6XHRcdGlmIChpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSKVxuIDc2NzpcdFx0XHRlcnIgPSBpdWN2X3NlbmRfY3RybChzb2NrLVx1MDAzZXNrLCBBRl9JVUNWX0ZMQUdfU1lOKTtcbiA3Njg6XHRcdGVsc2VcbiA3Njk6XHRcdFx0ZXJyID0gYWZpdWN2X3BhdGhfY29ubmVjdChzb2NrLCBhZGRyKTtcbiA3NzA6XHRcdGlmIChlcnIpXG4gNzcxOlx0XHRcdGdvdG8gZG9uZTtcbiA3NzI6XHRcbiA3NzM6XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSAhPSBJVUNWX0NPTk5FQ1RFRClcbiA3NzQ6XHRcdFx0ZXJyID0gaXVjdl9zb2NrX3dhaXQoc2ssIGl1Y3Zfc29ja19pbl9zdGF0ZShzaywgSVVDVl9DT05ORUNURUQsXG4gNzc1Olx0XHRcdFx0XHRcdFx0XHQgICAgSVVDVl9ESVNDT05OKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTU6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIxNTkKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IGxvZ2ljLCB0YWlsb3JlZCBmb3IgYSBmZWxsb3cgZXhwZXJ0OgoKKipVbmRlcnN0YW5kaW5nIHRoZSBJVUNWIFRyYW5zcG9ydCBGbG93KioKCkFscmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgSVVDViBjb2RlLCBhbmQgaXQmIzM5O3MgY3J5c3RhbCBjbGVhciB0aGF0IHdoZW4gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgYEFGX0lVQ1ZfVFJBTlNfSElQRVJgIHRyYW5zcG9ydCB0eXBlLCB0aGUgY29udHJvbCBmbG93IGRpdmVyZ2VzICpzaWduaWZpY2FudGx5Ki4gVGhlIGtleSBpcyB0aGlzIGNvbmRpdGlvbmFsIGNoZWNrOiBgaWYgKGl1Y3YtJmd0O3RyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSKWAuIElmIHRoYXQgZXZhbHVhdGVzIHRvIHRydWUsIHdlJiMzOTtyZSB0YWtpbmcgdGhlIGBpdWN2X3NlbmRfY3RybGAgcGF0aC4gVGhpcyBpcyBjcnVjaWFsIGJlY2F1c2UgaXQgbWVhbnMgd2UmIzM5O3JlICpieXBhc3NpbmcqIHRoZSB1c3VhbCBgYWZpdWN2X3BhdGhfY29ubmVjdGAgY2FsbCwgd2hpY2ggaXMgd2hhdCBJIHdvdWxkIGhhdmUgZXhwZWN0ZWQuIFRoYXQmIzM5O3MgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gZm9yIHN1cmUsIGJ1dCBpdCBhbHNvIG1lYW5zIHRoZSB3aG9sZSBoYW5kc2hha2UgcHJvY2VzcyBpcyBwcm9iYWJseSBkaWZmZXJlbnQuCgpUaGUgc2Vjb25kIHBhcnQgSSBzZWUgaXMgdGhhdCB0aGUgYGl1Y3YtJmd0O3RyYW5zcG9ydGAgZmllbGQgaXMgKmluaXRpYWxpemVkKiBkdXJpbmcgdGhlIGBpdWN2X3NvY2tfYWxsb2NgIGNhbGwuIFRoaXMgdGVsbHMgbWUgdGhhdCB0aGUgc3BlY2lmaWMgdHJhbnNwb3J0IG1ldGhvZCB3ZSBhcmUgdXNpbmcgZm9yIHRoaXMgc29ja2V0IGlzIGRldGVybWluZWQgKmJlZm9yZSogd2UgZXZlbiBnZXQgdG8gdGhhdCBgaWZgIHN0YXRlbWVudC4gSXQmIzM5O3Mgc2V0IHVwIGluIHRoYXQgaW5pdGlhbCBhbGxvY2F0aW9uIHBoYXNlLCBzbyB0aGF0IGluZm9ybWF0aW9uIGlzIHZpdGFsLCBhcyBpdCYjMzk7cyB0aGUgJiMzNDt0cmlnZ2VyJiMzNDsgZm9yIHRoZSBjb2RlIHRvIHRha2UgdGhlIEhpcGVyIHBhdGguIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBhbGxvY2F0aW9uIGxvZ2ljIHRvIHNlZSBleGFjdGx5IGhvdyBhbmQgd2hlbiBgaXVjdi0mZ3Q7dHJhbnNwb3J0YCBpcyBzZXQgYW5kIHdoYXQgdGhlIHBvc3NpYmxlIHZhbHVlcyBhcmUuIFRoaXMgaXMgYWxsIGFib3V0IGhvdyB3ZSYjMzk7cmUgaGFuZGxpbmcgdGhlIHVuZGVybHlpbmcgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGFuZCBkYXRhIHRyYW5zZmVyIGZvciBIaXBlciwgdmVyc3VzIHRoZSBzdGFuZGFyZCBJVUNWIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE1OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDkyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0OTI6XHRcdG1lbXNldChcdTAwMjZpdWN2LVx1MDAzZWluaXQsIDAsIHNpemVvZihpdWN2LVx1MDAzZWluaXQpKTtcbiA0OTM6XHRcdGlmIChwcl9pdWN2KVxuIDQ5NDpcdFx0XHRpdWN2LVx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcbiA0OTU6XHRcdGVsc2VcbiA0OTY6XHRcdFx0aXVjdi1cdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0hJUEVSO1xuIDQ5NzpcdFxuIDQ5ODpcdFx0c2stXHUwMDNlc2tfZGVzdHJ1Y3QgPSBpdWN2X3NvY2tfZGVzdHJ1Y3Q7XG4gNDk5Olx0XHRzay1cdTAwM2Vza19zbmR0aW1lbyA9IElVQ1ZfQ09OTl9USU1FT1VUO1xuIDUwMDpcdFxuIDUwMTpcdFx0c29ja19yZXNldF9mbGFnKHNrLCBTT0NLX1pBUFBFRCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE1OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNzk2CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCBsb2dpYywgYXMgaWYgaXQgd2VyZSBteSBvd24gdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgYSBzdW1tYXJ5IGZvciBhIGZlbGxvdyBleHBlcnQ6CgoqKlVuZGVyc3RhbmRpbmcgSVVDViBUcmFuc3BvcnQgSW5pdGlhbGl6YXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSWYgSSYjMzk7bSByZWFkaW5nIHRoaXMgY29ycmVjdGx5LCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBpbml0aWFsaXphdGlvbiBvZiBhbiBJVUNWIHRyYW5zcG9ydC4gVGhlIGNvcmUgY29uY2VwdCBoZXJlIGhpbmdlcyBvbiB0aGlzIGBwcl9pdWN2YCB2YXJpYWJsZS4gVGhlIHNuaXBwZXQgaW5kaWNhdGVzIHRoYXQgd2hlbiBgcHJfaXVjdmAgaXMgYE5VTExgLCB3aGljaCBsaWtlbHkgbWVhbnMgaXQgaGFzbiYjMzk7dCBiZWVuIGV4cGxpY2l0bHkgY29uZmlndXJlZCBvciBpcyBpbiBzb21lIGRlZmF1bHQgc3RhdGUsIHRoZW4gYGl1Y3YtJmd0O3RyYW5zcG9ydGAgaXMgYXV0b21hdGljYWxseSBzZXQgdG8gYEFGX0lVQ1ZfVFJBTlNfSElQRVJgLiBTbywgaWYgdGhhdCBwb2ludGVyIGlzIHVuaW5pdGlhbGl6ZWQgb3Igbm90IHBvaW50aW5nIHRvIGFueXRoaW5nIG1lYW5pbmdmdWwsIHRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0IHdlJiMzOTtyZSBmYWxsaW5nIGJhY2sgdG8gdGhlIEhpcGVyU29ja2V0cyBJVUNWIHRyYW5zcG9ydC4KCkNydWNpYWxseSwgaXQgaXMgc2F5aW5nIHRoYXQgYHByX2l1Y3ZgIGlzIGJlaW5nIGFzc2lnbmVkIGEgdmFsdWUgbGF0ZXIgb24gZHVyaW5nIHRoZSBgYWZpdWN2X2luaXRgIHBoYXNlLiBUaGlzIGZ1bmN0aW9uIGlzIG9idmlvdXNseSB3aGVyZSB0aGUgY3JpdGljYWwgY29uZmlndXJhdGlvbiBkZXRhaWxzIGFyZSBsb2FkZWQgb3IgZGV0ZXJtaW5lZC4gSSBjYW4gaW1hZ2luZSB0aGF0IGBhZml1Y3ZfaW5pdGAgbGlrZWx5IGNoZWNrcyBmb3Igc29tZXRoaW5nLCBwZXJoYXBzIGEgY29uZmlndXJhdGlvbiBmaWxlLCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgb3Igc29tZSBvdGhlciBzeXN0ZW0gc2V0dGluZyB0byBkZWNpZGUgd2hpY2ggc3BlY2lmaWMgSVVDViB0cmFuc3BvcnQgbW9kZSB0byB1c2UuIElmIHRoYXQgY29uZmlndXJhdGlvbiBpcyBhYnNlbnQsIG9yIGRvZXNuJiMzOTt0IHNwZWNpZnkgYSBwYXJ0aWN1bGFyIHRyYW5zcG9ydCwgdGhlbiBgcHJfaXVjdmAgd291bGQgbG9naWNhbGx5IHJlbWFpbiBgTlVMTGAsIGNhdXNpbmcgdGhlIGNvZGUgdG8gZGVmYXVsdCB0byBIaXBlclNvY2tldHMuIFRoaXMgbWlnaHQgYmUgYSBsZWdhY3kgc2V0dGluZyBvciBhIGZhaWxzYWZlIG1lY2hhbmlzbS4gSXQgaXMgY3JpdGljYWwgdG8gaW52ZXN0aWdhdGUgaG93IGBwcl9pdWN2YCBpcyBwb3B1bGF0ZWQgZHVyaW5nIGBhZml1Y3ZfaW5pdGAgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGRlY2lzaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxNToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyOTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTcKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjI5NDpcdHN0YXRpYyBpbnQgX19pbml0IGFmaXVjdl9pbml0KHZvaWQpXG4yMjk1Olx0e1xuMjI5NjpcdFx0aW50IGVycjtcbjIyOTc6XHRcbjIyOTg6XHRcdGlmIChtYWNoaW5lX2lzX3ZtKCkgXHUwMDI2XHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0lVQ1YpKSB7XG4yMjk5Olx0XHRcdGNwY21kKFwmIzM0O1FVRVJZIFVTRVJJRFwmIzM0OywgaXVjdl91c2VyaWQsIHNpemVvZihpdWN2X3VzZXJpZCksIFx1MDAyNmVycik7XG4yMzAwOlx0XHRcdGlmICh1bmxpa2VseShlcnIpKSB7XG4yMzAxOlx0XHRcdFx0V0FSTl9PTihlcnIpO1xuMjMwMjpcdFx0XHRcdGVyciA9IC1FUFJPVE9OT1NVUFBPUlQ7XG4yMzAzOlx0XHRcdFx0Z290byBvdXQ7XG4yMzA0Olx0XHRcdH1cbjIzMDU6XHRcbjIzMDY6XHRcdFx0cHJfaXVjdiA9IFx1MDAyNml1Y3ZfaWY7XG4yMzA3Olx0XHR9IGVsc2Uge1xuMjMwODpcdFx0XHRtZW1zZXQoXHUwMDI2aXVjdl91c2VyaWQsIDAsIHNpemVvZihpdWN2X3VzZXJpZCkpO1xuMjMwOTpcdFx0XHRwcl9pdWN2ID0gTlVMTDtcbjIzMTA6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTU6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM1MDIKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBpdWN2X3NldmVyX3BhdGggTG9naWMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSWYgYG1hY2hpbmVfaXNfdm0oKWAgcmV0dXJucyBmYWxzZSwgdGhlbiB0aGUgYHByX2l1Y3ZgIHBvaW50ZXIgaXMgbnVsbC4gQW5kIHdlIGtub3cgdGhhdCBgbWFjaGluZV9pc192bSgpYCBpcyBmYWxzZSB3aGVuIHdlJiMzOTtyZSBydW5uaW5nIHVuZGVyIFFFTVUuIFRoYXQgbWVhbnMgdGhlIHNwZWNpZmljIGNvZGUgbW9kaWZpY2F0aW9ucyBtYWRlIHdpdGhpbiBgaXVjdl9zZXZlcl9wYXRoYCBhcmUgKm5ldmVyKiByZWFjaGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiAKCkJ1dCBob2xkIG9uLi4uIGlzIHRoZXJlIGFueSBvdGhlciBwb3NzaWJsZSBwYXRoIHRvIGBpdWN2X3NldmVyX3BhdGhgIHRoYXQgY291bGQgc29tZWhvdyBzZXQgYGl1Y3YtJmd0O3BhdGhgPyBJIGRvbiYjMzk7dCB0aGluayBzbywgYmVjYXVzZSBhcyBmYXIgYXMgSSBjYW4gc2VlLCBgaXVjdi0mZ3Q7cGF0aGAgaXMgKm5ldmVyKiBpbml0aWFsaXplZCBhbnl3aGVyZSBpbiB0aGUgY29kZS4KCldhaXQsIGxldCYjMzk7cyBjb25zaWRlciBhIHNjZW5hcmlvOiB3aGF0IGlmIGB4Y2hnKCZhbXA7aXVjdi0mZ3Q7cGF0aCwgTlVMTClgIGlzIGNhbGxlZCB3aGVuIGBpdWN2LSZndDtwYXRoYCAqaXMqIGFscmVhZHkgTlVMTD8gVGhhdCB3b3VsZCBiZSBpbnRlcmVzdGluZy4gU2luY2UgaXQgcmV0dXJucyBOVUxMLCB0aGUgY29uZGl0aW9uYWwgYGlmICh4Y2hnKCZhbXA7aXVjdi0mZ3Q7cGF0aCwgTlVMTCkpYCBpcyBza2lwcGVkLCByaWdodD8gQW5kIHRoZSBwYXRjaCAqb25seSogbW9kaWZpZXMgY29kZSBpbnNpZGUgdGhhdCBgaWZgIGJsb2NrLCBtYWtpbmcgaXQgaW5hY2Nlc3NpYmxlLiBTbywgcmVnYXJkbGVzcyBvZiB0aGUgVk0gc3RhdGUsIHRoaXMgbW9kaWZpY2F0aW9uIGlzIG5ldmVyIHJlYWNoYWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTU6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMzNzpcdFx0dW5zaWduZWQgY2hhciB1c2VyX2RhdGFbMTZdO1xuIDMzODpcdFx0c3RydWN0IGl1Y3Zfc29jayAqaXVjdiA9IGl1Y3Zfc2soc2spO1xuIDMzOTpcdFx0c3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCA9IGl1Y3YtXHUwMDNlcGF0aDtcbiAzNDA6XHRcdHN0cnVjdCBzb2NrX21zZ19xICpwLCAqbjtcbiAzNDE6XHRcbiAzNDI6XHRcdC8qIFdob2V2ZXIgcmVzZXRzIHRoZSBwYXRoIHBvaW50ZXIsIG11c3Qgc2V2ZXIgYW5kIGZyZWUgaXQuICovXG4gMzQzOlx0XHRpZiAoeGNoZyhcdTAwMjZpdWN2LVx1MDAzZXBhdGgsIE5VTEwpKSB7XG4gMzQ0Olx0XHRcdGlmICh3aXRoX3VzZXJfZGF0YSkge1xuIDM0NTpcdFx0XHRcdGxvd19ubWNweSh1c2VyX2RhdGEsIGl1Y3YtXHUwMDNlc3JjX25hbWUpO1xuIDM0NjpcdFx0XHRcdGhpZ2hfbm1jcHkodXNlcl9kYXRhLCBpdWN2LVx1MDAzZWRzdF9uYW1lKTtcbiAzNDc6XHRcdFx0XHRBU0NFQkModXNlcl9kYXRhLCBzaXplb2YodXNlcl9kYXRhKSk7XG4gMzQ4Olx0XHRcdFx0cHJfaXVjdi1cdTAwM2VwYXRoX3NldmVyKHBhdGgsIHVzZXJfZGF0YSk7XG4gMzQ5Olx0XHRcdH0gZWxzZVxuIDM1MDpcdFx0XHRcdHByX2l1Y3YtXHUwMDNlcGF0aF9zZXZlcihwYXRoLCBOVUxMKTtcbiAzNTE6XHRcdFx0aXVjdl9wYXRoX2ZyZWUocGF0aCk7XG4gMzUyOlx0XG4gMzUzOlx0XHRcdC8qXG4gMzU0Olx0XHRcdCAqIE1lc3NhZ2Ugbm90aWZpY2F0aW9ucyBxdWV1ZWQgb24gbWVzc2FnZV9xIHN0aWxsIHJlZmVyZW5jZVxuIDM1NTpcdFx0XHQgKiB0aGUgbm93IGZyZWVkIHBhdGg7IGRyb3AgdGhlbSwgb3RoZXJ3aXNlIGEgbGF0ZXIgcmVjdm1zZygpXG4gMzU2Olx0XHRcdCAqIHdvdWxkIHBhc3MgdGhlIGZyZWVkIGl1Y3ZfcGF0aCB0byBtZXNzYWdlX3JlY2VpdmUoKSB2aWFcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTU6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQzOTcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1NjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBsaWNhdGlvbiBvZiB0aGlzIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYWRkcmVzcyBhIHBvdGVudGlhbCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZSB3aXRoaW4gdGhlIGBpdWN2YCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSB3aGVuIGEgcGF0aCBpcyBmcmVlZC4gVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGludm9sdmVzIGNsZWFyaW5nIGEgbWVzc2FnZSBxdWV1ZSAoYGl1Y3YtJmd0O21lc3NhZ2VfcWApIGFmdGVyIHRoZSBgaXVjdi0mZ3Q7cGF0aGAgaXMgc2V0IHRvIGBOVUxMYC4gVGhlIGNvZGUgc25pcHBldCBjbGVhcmx5IHNob3dzIHRoaXMgb3BlcmF0aW9uIHdpdGhpbiBhbiBgaWYgKHhjaGcoJmFtcDtpdWN2LSZndDtwYXRoLCBOVUxMKSlgIGJsb2NrLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIG5ldmVyIGV4ZWN1dGVkIGluIHRoZSBlbnZpcm9ubWVudHMgSSB0eXBpY2FsbHkgZGVhbCB3aXRoLCBsaWtlIFFFTVUgb3IgR0NFLCBiZWNhdXNlIHRoZSBgaXVjdi0mZ3Q7cGF0aGAgaXMgYWx3YXlzIE5VTEwgaW4gdGhvc2Ugc2NlbmFyaW9zLiBUaGlzIHN1Z2dlc3RzIHRoZSBwYXRjaCB0YXJnZXRzIGFuIHVucmVhY2hhYmxlIGNvZGUgcGF0aCBpbiB0aGVzZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuCgpOb3csIHdhaXQgYSBzZWNvbmQuIElzIHRoZXJlIGV2ZW4gYSB3YXkgdG8gcnVuIHovVk0gKmluc2lkZSogUUVNVT8gTm8sIHRoYXQmIzM5O3MgYSBwcm9wcmlldGFyeSBJQk0gaHlwZXJ2aXNvciwgYW5kIFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZSBpdC4gT2theSwgc28gd2Uga25vdyB0aGF0IHBhcnQuIENvdWxkIHdlIHNvbWVob3cgKmZha2UqIGBtYWNoaW5lX2lzX3ZtKClgIHRvIHRyaWdnZXIgdGhpcyBjb2RlPyBObywgdGhlIGNvZGUgY2hlY2tzIHRoZSBDUFUgSUQgaW5zdHJ1Y3Rpb24gKFNUU0kgb3Igc2ltaWxhcikgdG8gZGV0ZWN0IEtWTSBvciBRRU1VLCBzbyB0aGF0JiMzOTtzIGEgZGVhZCBlbmQuIEFoLCBidXQgd2FpdCwgYGRldGVjdF9tYWNoaW5lX3R5cGVgIHVzZXMgYHN0c2lgIHRvIGdldCB0aGUgVk0gaW5mb3JtYXRpb27igKYgU28sIGNvdWxkIHdlIHBvdGVudGlhbGx5IHBhc3MgYSBmbGFnIHRvIFFFTVUgdG8gKnNwb29mKiB0aGUgQ1BJIChDb250cm9sIFByb2dyYW0gSWRlbnRpZmljYXRpb24pIGFuZCBwcmV0ZW5kIHdlJiMzOTtyZSB6L1ZNPyBUaGF0ICptaWdodCogYmUgcG9zc2libGUsIGJ1dCBteSBzdGFuZGFyZCBzeXprYWxsZXIgZW52aXJvbm1lbnRzIGRvbiYjMzk7dCBkbyBhbnl0aGluZyBsaWtlIHRoYXQuCgpUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBtZW50aW9ucyAmIzM0O2ltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUmIzM0Oy4gU2luY2UgdGhpcyByZXF1aXJlcyB6L1ZNIGFuZCBjYW4mIzM5O3QgYmUgcmVhY2hlZCBpbiBzdGFuZGFyZCBRRU1VL0tWTSBlbnZpcm9ubWVudHMsIGl0ICpkb2VzKiBmYWxsIHVuZGVyIHRoZSAmIzM0O2ltcG9zc2libGUgdG8gcmVhY2gmIzM0OyBjYXRlZ29yeSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgY29udGV4dC4KCkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBvbmUgdGhpbmcuIENhbiBgQUZfSVVDVmAgZXZlbiBiZSB1c2VkIG92ZXIgSGlwZXJTb2NrZXRzLCBhbmQgaWYgc28sIGRvZXMgaXQgdXNlIHRoZSBgbWVzc2FnZV9xYD8gSWYgYEFGX0lVQ1ZgIHVzZXMgSGlwZXJTb2NrZXRzLCBgaXVjdi0mZ3Q7dHJhbnNwb3J0YCBzaG91bGQgYmUgYEFGX0lVQ1ZfVFJBTlNfSElQRVJgLCBidXQgSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIGlmIHRoYXQgY29kZSBwYXRoIGV2ZW4gdG91Y2hlcyB0aGUgYG1lc3NhZ2VfcWAuIFRpbWUgdG8gZG91YmxlIGNoZWNrIHRoZSBjb2RlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE1OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lc3NhZ2VfcSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmM9MzM1PXN0YXRpYyB2b2lkIGl1Y3Zfc2V2ZXJfcGF0aChzdHJ1Y3Qgc29jayAqc2ssIGludCB3aXRoX3VzZXJfZGF0YSlcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzUzLVx0XHQvKlxubmV0L2l1Y3YvYWZfaXVjdi5jOjM1NDpcdFx0ICogTWVzc2FnZSBub3RpZmljYXRpb25zIHF1ZXVlZCBvbiBtZXNzYWdlX3Egc3RpbGwgcmVmZXJlbmNlXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzU1LVx0XHQgKiB0aGUgbm93IGZyZWVkIHBhdGg7IGRyb3AgdGhlbSwgb3RoZXJ3aXNlIGEgbGF0ZXIgcmVjdm1zZygpXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzU2LVx0XHQgKiB3b3VsZCBwYXNzIHRoZSBmcmVlZCBpdWN2X3BhdGggdG8gbWVzc2FnZV9yZWNlaXZlKCkgdmlhXG5uZXQvaXVjdi9hZl9pdWN2LmM6MzU3Olx0XHQgKiBpdWN2X3Byb2Nlc3NfbWVzc2FnZV9xKCkuXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzU4LVx0XHQgKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYzozNTk6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZpdWN2LVx1MDAzZW1lc3NhZ2VfcS5sb2NrKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzozNjA6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuLCBcdTAwMjZpdWN2LVx1MDAzZW1lc3NhZ2VfcS5saXN0LCBsaXN0KSB7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMzYxLVx0XHRcdGxpc3RfZGVsKFx1MDAyNnAtXHUwMDNlbGlzdCk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTM2My1cdFx0fVxubmV0L2l1Y3YvYWZfaXVjdi5jOjM2NDpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aXVjdi1cdTAwM2VtZXNzYWdlX3EubG9jayk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMzY1LVx0fVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz00NjY9c3RhdGljIHN0cnVjdCBzb2NrICppdWN2X3NvY2tfYWxsb2Moc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvLCBnZnBfdCBwcmlvLCBpbnQga2Vybilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDc5LVx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZpdWN2LVx1MDAzZXNlbmRfc2tiX3EpO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjQ4MDpcdElOSVRfTElTVF9IRUFEKFx1MDAyNml1Y3YtXHUwMDNlbWVzc2FnZV9xLmxpc3QpO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjQ4MTpcdHNwaW5fbG9ja19pbml0KFx1MDAyNml1Y3YtXHUwMDNlbWVzc2FnZV9xLmxvY2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTQ4Mi1cdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2aXVjdi1cdTAwM2ViYWNrbG9nX3NrYl9xKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTEyNj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmFsbG9jX2l1Y3ZfcmVjdl9za2IodW5zaWduZWQgbG9uZyBsZW4pXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTExNTUtICpcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMTU2OiAqIExvY2tpbmc6IG11c3QgYmUgY2FsbGVkIHdpdGggbWVzc2FnZV9xLmxvY2sgaGVsZFxubmV0L2l1Y3YvYWZfaXVjdi5jLTExNTctICovXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTE1OD1zdGF0aWMgdm9pZCBpdWN2X3Byb2Nlc3NfbWVzc2FnZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTEyMTQtXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTIxNTovKiBpdWN2X3Byb2Nlc3NfbWVzc2FnZV9xKCkgLSBQcm9jZXNzIG91dHN0YW5kaW5nIElVQ1YgbWVzc2FnZXNcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMjE2LSAqXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTIxNzogKiBMb2NraW5nOiBtdXN0IGJlIGNhbGxlZCB3aXRoIG1lc3NhZ2VfcS5sb2NrIGhlbGRcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMjE4LSAqL1xubmV0L2l1Y3YvYWZfaXVjdi5jOjEyMTk6c3RhdGljIHZvaWQgaXVjdl9wcm9jZXNzX21lc3NhZ2VfcShzdHJ1Y3Qgc29jayAqc2spXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTIyMC17XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTEyMjQtXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTIyNTpcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuLCBcdTAwMjZpdWN2LVx1MDAzZW1lc3NhZ2VfcS5saXN0LCBsaXN0KSB7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTIyNi1cdFx0c2tiID0gYWxsb2NfaXVjdl9yZWN2X3NrYihpdWN2X21zZ19sZW5ndGgoXHUwMDI2cC1cdTAwM2Vtc2cpKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTIzNz1zdGF0aWMgaW50IGl1Y3Zfc29ja19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTI0OS1cdCAgICBza2JfcXVldWVfZW1wdHkoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSkgXHUwMDI2XHUwMDI2XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTI1MDpcdCAgICBsaXN0X2VtcHR5KFx1MDAyNml1Y3YtXHUwMDNlbWVzc2FnZV9xLmxpc3QpKVxubmV0L2l1Y3YvYWZfaXVjdi5jLTEyNTEtXHRcdHJldHVybiAwO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMzE4LVx0XHQvKiBRdWV1ZSBiYWNrbG9nIHNrYnMgKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMzE5Olx0XHRzcGluX2xvY2tfYmgoXHUwMDI2aXVjdi1cdTAwM2VtZXNzYWdlX3EubG9jayk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTMyMC1cdFx0cnNrYiA9IHNrYl9kZXF1ZXVlKFx1MDAyNml1Y3YtXHUwMDNlYmFja2xvZ19za2JfcSk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTEzMzEtXHRcdGlmIChza2JfcXVldWVfZW1wdHkoXHUwMDI2aXVjdi1cdTAwM2ViYWNrbG9nX3NrYl9xKSkge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjEzMzI6XHRcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNml1Y3YtXHUwMDNlbWVzc2FnZV9xLmxpc3QpKVxubmV0L2l1Y3YvYWZfaXVjdi5jOjEzMzM6XHRcdFx0XHRpdWN2X3Byb2Nlc3NfbWVzc2FnZV9xKHNrKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMzM0LVx0XHRcdGlmIChhdG9taWNfcmVhZChcdTAwMjZpdWN2LVx1MDAzZW1zZ19yZWN2KSBcdTAwM2U9XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTEzNDItXHRcdH1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMzQzOlx0XHRzcGluX3VubG9ja19iaChcdTAwMjZpdWN2LVx1MDAzZW1lc3NhZ2VfcS5sb2NrKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMzQ0LVx0fVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNzEyPXN0YXRpYyB2b2lkIGl1Y3ZfY2FsbGJhY2tfcngoc3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCwgc3RydWN0IGl1Y3ZfbWVzc2FnZSAqbXNnKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNzI0LVxubmV0L2l1Y3YvYWZfaXVjdi5jOjE3MjU6XHRzcGluX2xvY2soXHUwMDI2aXVjdi1cdTAwM2VtZXNzYWdlX3EubG9jayk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTcyNi1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNzI3Olx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNml1Y3YtXHUwMDNlbWVzc2FnZV9xLmxpc3QpIHx8XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTcyOC1cdCAgICAhc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNml1Y3YtXHUwMDNlYmFja2xvZ19za2JfcSkpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE3NDktXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTc1MDpcdGxpc3RfYWRkX3RhaWwoXHUwMDI2c2F2ZV9tc2ctXHUwMDNlbGlzdCwgXHUwMDI2aXVjdi1cdTAwM2VtZXNzYWdlX3EubGlzdCk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTc1MS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNzUyLW91dF91bmxvY2s6XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTc1MzpcdHNwaW5fdW5sb2NrKFx1MDAyNml1Y3YtXHUwMDNlbWVzc2FnZV9xLmxvY2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE3NTQtfVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMDExPXN0YXRpYyBpbnQgYWZpdWN2X2hzX2NhbGxiYWNrX3J4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA0MC1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMDQxOlx0c3Bpbl9sb2NrKFx1MDAyNml1Y3YtXHUwMDNlbWVzc2FnZV9xLmxvY2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIwNDItXHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNml1Y3YtXHUwMDNlYmFja2xvZ19za2JfcSkpIHtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA0Ny1cdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2aXVjdl9zayhzayktXHUwMDNlYmFja2xvZ19za2JfcSwgc2tiKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMDQ4Olx0c3Bpbl91bmxvY2soXHUwMDI2aXVjdi1cdTAwM2VtZXNzYWdlX3EubG9jayk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA0OS1cdHJldHVybiBORVRfUlhfU1VDQ0VTUztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTU6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc3MjEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJVUNWIE1lc3NhZ2luZyBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGF0IGBtZXNzYWdlX3FgIGlzIHRoZSBjcml0aWNhbCBkYXRhIHN0cnVjdHVyZSwgYW5kIGl0JiMzOTtzIGJlaW5nIHVzZWQgZm9yIGJvdGggYEFGX0lVQ1ZfVFJBTlNfSVVDVmAgYW5kIGBBRl9JVUNWX1RSQU5TX0hJUEVSYCwgd2hpY2ggaXMgdGhlIGZpcnN0IHBvaW50IG9mIGludGVyZXN0LiBBIHF1aWNrIGdsYW5jZSBhdCBgYWZpdWN2X2hzX2NhbGxiYWNrX3J4YCByZXZlYWxzIGl0IHVzZXMgdGhlIGxvY2sgb24gYG1lc3NhZ2VfcWAgYW5kIGBiYWNrbG9nX3NrYl9xYCwgYnV0IG5vdCB0aGUgbGlzdCBpdHNlbGYuIEludGVyZXN0aW5nLiBUaGUgYG1lc3NhZ2VfcS5saXN0YCwgb24gdGhlIG90aGVyIGhhbmQsIHNlZW1zIHRvIGJlIGV4Y2x1c2l2ZWx5IHVzZWQgaW4gYGl1Y3ZfY2FsbGJhY2tfcnhgLCB3aGljaCBpcyB0aWVkIGRpcmVjdGx5IHRvIGBBRl9JVUNWX1RSQU5TX0lVQ1ZgLgoKVGhlbiBJIHNlZSB0aGlzIHBhdGNoLCBhbmQgaXQgZXhwbGljaXRseSBjbGVhcnMgYG1lc3NhZ2VfcS5saXN0YCwgdXNpbmcgYSBzcGlubG9jayB0byBwcm90ZWN0IGl0OgoKYGBgYwomIzQzOwkJc3Bpbl9sb2NrX2JoKCZhbXA7aXVjdi0mZ3Q7bWVzc2FnZV9xLmxvY2spOwomIzQzOwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG4sICZhbXA7aXVjdi0mZ3Q7bWVzc2FnZV9xLmxpc3QsIGxpc3QpIHsKJiM0MzsJCQlsaXN0X2RlbCgmYW1wO3AtJmd0O2xpc3QpOwomIzQzOwkJCWtmcmVlKHApOwomIzQzOwkJfQomIzQzOwkJc3Bpbl91bmxvY2tfYmgoJmFtcDtpdWN2LSZndDttZXNzYWdlX3EubG9jayk7CmBgYAoKT2theSwgc28gdGhlIHBhdGNoIGlzIGZvY3VzaW5nIG9uIGNsZWFyaW5nIHRoZSBsaXN0LCB3aGljaCBzdWdnZXN0cyBpdCYjMzk7cyBwcmltYXJpbHkgY29uY2VybmVkIHdpdGggdGhlIGBBRl9JVUNWX1RSQU5TX0lVQ1ZgIHBhdGguIEFuZCBub3cgSSBuZWVkIHRvIGFuYWx5emUgYGl1Y3Zfc2V2ZXJfcGF0aGAuIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgd2hlbiBgeGNoZygmYW1wO2l1Y3YtJmd0O3BhdGgsIE5VTEwpYCByZXR1cm5zIG5vbi1OVUxMLiBDcml0aWNhbGx5LCBgaXVjdi0mZ3Q7cGF0aGAgaXMgKm9ubHkqIHNldCBmb3IgYEFGX0lVQ1ZfVFJBTlNfSVVDVmAuIFNvLCBldmVuIGlmIGBtZXNzYWdlX3FgIHdlcmUgc29tZWhvdyB1c2VkIGZvciBISVBFUiwgd2hpY2ggaXQgaXNuJiMzOTt0IGNvbXBsZXRlbHksIGBpdWN2X3NldmVyX3BhdGhgIHdvdWxkIGRvIG5vdGhpbmcgaW4gdGhhdCBjYXNlIGJlY2F1c2UgYGl1Y3YtJmd0O3BhdGhgIGlzIE5VTEwuCgpUaGVyZWZvcmUsIHRoaXMgZW50aXJlIGNvZGUgbW9kaWZpY2F0aW9uIGlzICpzdHJpY3RseSogdGFyZ2V0ZWQgYXQgYEFGX0lVQ1ZfVFJBTlNfSVVDVmAsIGFuZCBieSBleHRlbnNpb24sIHRoYXQmIzM5O3Mgei9WTSBzcGVjaWZpYy4gTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgb25lIHRoaW5nLiBJcyB0aGVyZSBhbnkgc2NlbmFyaW8gd2hlcmUgYGl1Y3YtJmd0O3BhdGhgIGNvdWxkIGJlIHNldCB3aXRob3V0IGBwcl9pdWN2YCBiZWluZyBub24tTlVMTD8gSSBuZWVkIHRvIGxvb2sgYXQgYGl1Y3ZfcGF0aF9hbGxvY2AgdG8gYmUgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTU6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXVjdl9wYXRoX2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYz02ODc9c3RhdGljIGludCBhZml1Y3ZfcGF0aF9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy02OTktXHQvKiBDcmVhdGUgcGF0aC4gKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYzo3MDA6XHRpdWN2LVx1MDAzZXBhdGggPSBpdWN2X3BhdGhfYWxsb2MoaXVjdi1cdTAwM2Vtc2dsaW1pdCxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03MDEtXHRcdFx0XHQgICAgIElVQ1ZfSVBSTURBVEEsIEdGUF9LRVJORUwpO1xuLS1cbm5ldC9pdWN2L2l1Y3YuYz0xNDY4PXN0YXRpYyB2b2lkIGl1Y3ZfcGF0aF9wZW5kaW5nKHN0cnVjdCBpdWN2X2lycV9kYXRhICpkYXRhKVxuLS1cbm5ldC9pdWN2L2l1Y3YuYy0xNDc3LVx0ZXJyb3IgPSBpdWN2X2Vycm9yX25vX21lbW9yeTtcbm5ldC9pdWN2L2l1Y3YuYzoxNDc4Olx0cGF0aCA9IGl1Y3ZfcGF0aF9hbGxvYyhpcHAtXHUwMDNlaXBtc2dsaW0sIGlwcC1cdTAwM2VpcGZsYWdzMSwgR0ZQX0FUT01JQyk7XG5uZXQvaXVjdi9pdWN2LmMtMTQ3OS1cdGlmICghcGF0aClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTU6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg5OTgKCQkJCQkJCW91dHB1dDogMjA3CgkJCQkJCQl0aG91Z2h0czogMzYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVucmVhY2hhYmxlIENvZGUgQW5hbHlzaXMqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gYGl1Y3ZfcGF0aF9hbGxvY2AgaXMgZGVmaW5lZCBpbiBgbmV0L2l1Y3YvaXVjdi5jYC4gSG93ZXZlciwgdGhlIG9ubHkgY2FsbCBzaXRlIHdpdGhpbiBgYWZfaXVjdi5jYCBpcyBgYWZpdWN2X3BhdGhfY29ubmVjdGAuIE5vdywgYGFmaXVjdl9wYXRoX2Nvbm5lY3RgIGlzIG9ubHkgZW50ZXJlZCBpZiBgaXVjdi0mZ3Q7dHJhbnNwb3J0YCBpc24mIzM5O3QgYEFGX0lVQ1ZfVFJBTlNfSElQRVJgLiBBbmQgdGhhdCBzcGVjaWZpYyBjb25kaXRpb24gKGAhPSBBRl9JVUNWX1RSQU5TX0hJUEVSYCkgaXMgb25seSBtZXQgaWYgYHByX2l1Y3ZgIGhhcyBhIHZhbHVlLiBUaGVuLCBgcHJfaXVjdmAgZ2V0cyBhc3NpZ25lZCBhIHZhbHVlIG9ubHkgaWYgYG1hY2hpbmVfaXNfdm0oKWAgcmV0dXJucyB0cnVlLiBGaW5hbGx5LCBhbmQgdGhpcyBpcyBrZXksIGBtYWNoaW5lX2lzX3ZtKClgIGlzIG9ubHkgdHJ1ZSBpZiB3ZSYjMzk7cmUgcnVubmluZyB1bmRlciB6L1ZNLgoKTm93LCBob2xkIG9uLi4uIGNhbiBRRU1VIGVtdWxhdGUgei9WTT8gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4gV2hpbGUgUUVNVSYjMzk7cyBzMzkweCB0YXJnZXQgY2VydGFpbmx5IGVtdWxhdGVzIHovQXJjaGl0ZWN0dXJlLCBpdCB1dGlsaXplcyBlaXRoZXIgS1ZNIG9yIGl0cyBvd24gVENHIGZvciB0aGUgaHlwZXJ2aXNvci4gVGhlIGNydWNpYWwgcGllY2UgaXMgdGhhdCB0aGUgYG1hY2hpbmVfaXNfdm0oKWAgZnVuY3Rpb24gcmVsaWVzIG9uIHRoZSAmIzM0O3ovVk0mIzM0OyBzdHJpbmcgd2l0aGluIHRoZSBDb250cm9sIFByb2dyYW0gSWRlbnRpZmljYXRpb24gKENQSSkgb2J0YWluZWQgdmlhIHRoZSBTVFNJIGluc3RydWN0aW9uLiBCdXQgUUVNVSBhbmQgS1ZNIHJldHVybiAmIzM0O0tWTS8mIzM0OyBvciAmIzM0O1FFTVUmIzM0OyBpbiB0aGVpciBDUEkgcmVzcG9uc2VzLiBUaGVyZWZvcmUsIGBtYWNoaW5lX2lzX3ZtKClgIHdpbGwgcmV0dXJuIGZhbHNlLgoKVGhlcmVmb3JlLCB0aGlzIGNvZGUgcGF0aCB0aGF0IHdhcyBtb2RpZmllZCBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIGFueSBvZiBvdXIgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMsIG5hbWVseSBRRU1VL0tWTS4gTm8gcG9pbnQgaW4gdHJ5aW5nIHRvIGZ1enogY29kZSB0aGF0IHdvbiYjMzk7dCBydW4sIGFzIHRoZSBwYXRjaCBpcyBvbmx5IHRhcmdldGVkIGF0IHRoZSB6L1ZNIGh5cGVydmlzb3IuCkkgYW0gcmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGJhc2VkIG9uIHRoZSBhYm92ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTU6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaXVjdl9zZXZlcl9wYXRoYCBpbiBgYWZfaXVjdi5jYCB0byBjbGVhciB0aGUgYG1lc3NhZ2VfcWAgbGlzdC4gSG93ZXZlciwgdGhpcyBmdW5jdGlvbiBvbmx5IGV4ZWN1dGVzIGl0cyBsb2dpYyBpZiBgaXVjdi1cdTAwM2VwYXRoYCBpcyBub24tTlVMTC4gYGl1Y3YtXHUwMDNlcGF0aGAgaXMgb25seSBhbGxvY2F0ZWQgd2hlbiB0aGUgdHJhbnNwb3J0IGlzIGBBRl9JVUNWX1RSQU5TX0lVQ1ZgLCB3aGljaCBpbiB0dXJuIGlzIG9ubHkgc2VsZWN0ZWQgaWYgYHByX2l1Y3ZgIGlzIG5vbi1OVUxMLiBgcHJfaXVjdmAgaXMgaW5pdGlhbGl6ZWQgb25seSB3aGVuIGBtYWNoaW5lX2lzX3ZtKClgIGlzIHRydWUsIG1lYW5pbmcgdGhlIGtlcm5lbCBtdXN0IGJlIHJ1bm5pbmcgdW5kZXIgdGhlIHByb3ByaWV0YXJ5IElCTSB6L1ZNIGh5cGVydmlzb3IuIFNpbmNlIFFFTVUvS1ZNIGVudmlyb25tZW50cyBkbyBub3QgZW11bGF0ZSB6L1ZNICh0aGV5IGlkZW50aWZ5IGFzIEtWTSBvciBRRU1VKSwgdGhpcyBjb2RlIHBhdGggaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBpdWN2X3NldmVyX3BhdGhgIGluIGBhZl9pdWN2LmNgIHRvIGNsZWFyIHRoZSBgbWVzc2FnZV9xYCBsaXN0LiBIb3dldmVyLCB0aGlzIGZ1bmN0aW9uIG9ubHkgZXhlY3V0ZXMgaXRzIGxvZ2ljIGlmIGBpdWN2LVx1MDAzZXBhdGhgIGlzIG5vbi1OVUxMLiBgaXVjdi1cdTAwM2VwYXRoYCBpcyBvbmx5IGFsbG9jYXRlZCB3aGVuIHRoZSB0cmFuc3BvcnQgaXMgYEFGX0lVQ1ZfVFJBTlNfSVVDVmAsIHdoaWNoIGluIHR1cm4gaXMgb25seSBzZWxlY3RlZCBpZiBgcHJfaXVjdmAgaXMgbm9uLU5VTEwuIGBwcl9pdWN2YCBpcyBpbml0aWFsaXplZCBvbmx5IHdoZW4gYG1hY2hpbmVfaXNfdm0oKWAgaXMgdHJ1ZSwgbWVhbmluZyB0aGUga2VybmVsIG11c3QgYmUgcnVubmluZyB1bmRlciB0aGUgcHJvcHJpZXRhcnkgSUJNIHovVk0gaHlwZXJ2aXNvci4gU2luY2UgUUVNVS9LVk0gZW52aXJvbm1lbnRzIGRvIG5vdCBlbXVsYXRlIHovVk0gKHRoZXkgaWRlbnRpZnkgYXMgS1ZNIG9yIFFFTVUpLCB0aGlzIGNvZGUgcGF0aCBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE1OjA4OjMxLjU5OTE1MTM4NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzI4Njc1ODYxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGl1Y3Zfc2V2ZXJfcGF0aGAgaW4gYGFmX2l1Y3YuY2AgdG8gY2xlYXIgdGhlIGBtZXNzYWdlX3FgIGxpc3QuIEhvd2V2ZXIsIHRoaXMgZnVuY3Rpb24gb25seSBleGVjdXRlcyBpdHMgbG9naWMgaWYgYGl1Y3YtXFx1MDAzZXBhdGhgIGlzIG5vbi1OVUxMLiBgaXVjdi1cXHUwMDNlcGF0aGAgaXMgb25seSBhbGxvY2F0ZWQgd2hlbiB0aGUgdHJhbnNwb3J0IGlzIGBBRl9JVUNWX1RSQU5TX0lVQ1ZgLCB3aGljaCBpbiB0dXJuIGlzIG9ubHkgc2VsZWN0ZWQgaWYgYHByX2l1Y3ZgIGlzIG5vbi1OVUxMLiBgcHJfaXVjdmAgaXMgaW5pdGlhbGl6ZWQgb25seSB3aGVuIGBtYWNoaW5lX2lzX3ZtKClgIGlzIHRydWUsIG1lYW5pbmcgdGhlIGtlcm5lbCBtdXN0IGJlIHJ1bm5pbmcgdW5kZXIgdGhlIHByb3ByaWV0YXJ5IElCTSB6L1ZNIGh5cGVydmlzb3IuIFNpbmNlIFFFTVUvS1ZNIGVudmlyb25tZW50cyBkbyBub3QgZW11bGF0ZSB6L1ZNICh0aGV5IGlkZW50aWZ5IGFzIEtWTSBvciBRRU1VKSwgdGhpcyBjb2RlIHBhdGggaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE1OjA4OjMxLjU5OTE1NjkwNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI5MDYzMDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgN2ViMTI5MzRjNTJhMjkxNGUxNzUwYjFmMmVjODFkMzg4NjJkNDk2NlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1bCA3IDE1OjA4OjI5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pdWN2L2FmX2l1Y3YuYyBiL25ldC9pdWN2L2FmX2l1Y3YuY1xcbmluZGV4IGZlZDI0MGI0NTNiZDliLi4yODY5YTEwM2Y3ZmEyYSAxMDA2NDRcXG4tLS0gYS9uZXQvaXVjdi9hZl9pdWN2LmNcXG4rKysgYi9uZXQvaXVjdi9hZl9pdWN2LmNcXG5AQCAtMzM3LDYgKzMzNyw3IEBAIHN0YXRpYyB2b2lkIGl1Y3Zfc2V2ZXJfcGF0aChzdHJ1Y3Qgc29jayAqc2ssIGludCB3aXRoX3VzZXJfZGF0YSlcXG4gXFx0dW5zaWduZWQgY2hhciB1c2VyX2RhdGFbMTZdO1xcbiBcXHRzdHJ1Y3QgaXVjdl9zb2NrICppdWN2ID0gaXVjdl9zayhzayk7XFxuIFxcdHN0cnVjdCBpdWN2X3BhdGggKnBhdGggPSBpdWN2LVxcdTAwM2VwYXRoO1xcbitcXHRzdHJ1Y3Qgc29ja19tc2dfcSAqcCwgKm47XFxuIFxcbiBcXHQvKiBXaG9ldmVyIHJlc2V0cyB0aGUgcGF0aCBwb2ludGVyLCBtdXN0IHNldmVyIGFuZCBmcmVlIGl0LiAqL1xcbiBcXHRpZiAoeGNoZyhcXHUwMDI2aXVjdi1cXHUwMDNlcGF0aCwgTlVMTCkpIHtcXG5AQCAtMzQ4LDYgKzM0OSwxOSBAQCBzdGF0aWMgdm9pZCBpdWN2X3NldmVyX3BhdGgoc3RydWN0IHNvY2sgKnNrLCBpbnQgd2l0aF91c2VyX2RhdGEpXFxuIFxcdFxcdH0gZWxzZVxcbiBcXHRcXHRcXHRwcl9pdWN2LVxcdTAwM2VwYXRoX3NldmVyKHBhdGgsIE5VTEwpO1xcbiBcXHRcXHRpdWN2X3BhdGhfZnJlZShwYXRoKTtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIE1lc3NhZ2Ugbm90aWZpY2F0aW9ucyBxdWV1ZWQgb24gbWVzc2FnZV9xIHN0aWxsIHJlZmVyZW5jZVxcbitcXHRcXHQgKiB0aGUgbm93IGZyZWVkIHBhdGg7IGRyb3AgdGhlbSwgb3RoZXJ3aXNlIGEgbGF0ZXIgcmVjdm1zZygpXFxuK1xcdFxcdCAqIHdvdWxkIHBhc3MgdGhlIGZyZWVkIGl1Y3ZfcGF0aCB0byBtZXNzYWdlX3JlY2VpdmUoKSB2aWFcXG4rXFx0XFx0ICogaXVjdl9wcm9jZXNzX21lc3NhZ2VfcSgpLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZpdWN2LVxcdTAwM2VtZXNzYWdlX3EubG9jayk7XFxuK1xcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuLCBcXHUwMDI2aXVjdi1cXHUwMDNlbWVzc2FnZV9xLmxpc3QsIGxpc3QpIHtcXG4rXFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNnAtXFx1MDAzZWxpc3QpO1xcbitcXHRcXHRcXHRrZnJlZShwKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aXVjdi1cXHUwMDNlbWVzc2FnZV9xLmxvY2spO1xcbiBcXHR9XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE1OjA4OjMyLjIyOTIwMTk1M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjEyNjU2NzAwNzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaXVjdl9zZXZlcl9wYXRoYCBpbiBgYWZfaXVjdi5jYCB0byBjbGVhciB0aGUgYG1lc3NhZ2VfcWAgbGlzdC4gSG93ZXZlciwgdGhpcyBmdW5jdGlvbiBvbmx5IGV4ZWN1dGVzIGl0cyBsb2dpYyBpZiBgaXVjdi1cXHUwMDNlcGF0aGAgaXMgbm9uLU5VTEwuIGBpdWN2LVxcdTAwM2VwYXRoYCBpcyBvbmx5IGFsbG9jYXRlZCB3aGVuIHRoZSB0cmFuc3BvcnQgaXMgYEFGX0lVQ1ZfVFJBTlNfSVVDVmAsIHdoaWNoIGluIHR1cm4gaXMgb25seSBzZWxlY3RlZCBpZiBgcHJfaXVjdmAgaXMgbm9uLU5VTEwuIGBwcl9pdWN2YCBpcyBpbml0aWFsaXplZCBvbmx5IHdoZW4gYG1hY2hpbmVfaXNfdm0oKWAgaXMgdHJ1ZSwgbWVhbmluZyB0aGUga2VybmVsIG11c3QgYmUgcnVubmluZyB1bmRlciB0aGUgcHJvcHJpZXRhcnkgSUJNIHovVk0gaHlwZXJ2aXNvci4gU2luY2UgUUVNVS9LVk0gZW52aXJvbm1lbnRzIGRvIG5vdCBlbXVsYXRlIHovVk0gKHRoZXkgaWRlbnRpZnkgYXMgS1ZNIG9yIFFFTVUpLCB0aGlzIGNvZGUgcGF0aCBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3ZWIxMjkzNGM1MmEyOTE0ZTE3NTBiMWYyZWM4MWQzODg2MmQ0OTY2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgNyAxNTowODoyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pdWN2L2FmX2l1Y3YuYyBiL25ldC9pdWN2L2FmX2l1Y3YuY1xuaW5kZXggZmVkMjQwYjQ1M2JkOWIuLjI4NjlhMTAzZjdmYTJhIDEwMDY0NFxuLS0tIGEvbmV0L2l1Y3YvYWZfaXVjdi5jXG4rKysgYi9uZXQvaXVjdi9hZl9pdWN2LmNcbkBAIC0zMzcsNiArMzM3LDcgQEAgc3RhdGljIHZvaWQgaXVjdl9zZXZlcl9wYXRoKHN0cnVjdCBzb2NrICpzaywgaW50IHdpdGhfdXNlcl9kYXRhKVxuIFx0dW5zaWduZWQgY2hhciB1c2VyX2RhdGFbMTZdO1xuIFx0c3RydWN0IGl1Y3Zfc29jayAqaXVjdiA9IGl1Y3Zfc2soc2spO1xuIFx0c3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCA9IGl1Y3YtXHUwMDNlcGF0aDtcbitcdHN0cnVjdCBzb2NrX21zZ19xICpwLCAqbjtcbiBcbiBcdC8qIFdob2V2ZXIgcmVzZXRzIHRoZSBwYXRoIHBvaW50ZXIsIG11c3Qgc2V2ZXIgYW5kIGZyZWUgaXQuICovXG4gXHRpZiAoeGNoZyhcdTAwMjZpdWN2LVx1MDAzZXBhdGgsIE5VTEwpKSB7XG5AQCAtMzQ4LDYgKzM0OSwxOSBAQCBzdGF0aWMgdm9pZCBpdWN2X3NldmVyX3BhdGgoc3RydWN0IHNvY2sgKnNrLCBpbnQgd2l0aF91c2VyX2RhdGEpXG4gXHRcdH0gZWxzZVxuIFx0XHRcdHByX2l1Y3YtXHUwMDNlcGF0aF9zZXZlcihwYXRoLCBOVUxMKTtcbiBcdFx0aXVjdl9wYXRoX2ZyZWUocGF0aCk7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIE1lc3NhZ2Ugbm90aWZpY2F0aW9ucyBxdWV1ZWQgb24gbWVzc2FnZV9xIHN0aWxsIHJlZmVyZW5jZVxuK1x0XHQgKiB0aGUgbm93IGZyZWVkIHBhdGg7IGRyb3AgdGhlbSwgb3RoZXJ3aXNlIGEgbGF0ZXIgcmVjdm1zZygpXG4rXHRcdCAqIHdvdWxkIHBhc3MgdGhlIGZyZWVkIGl1Y3ZfcGF0aCB0byBtZXNzYWdlX3JlY2VpdmUoKSB2aWFcbitcdFx0ICogaXVjdl9wcm9jZXNzX21lc3NhZ2VfcSgpLlxuK1x0XHQgKi9cbitcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNml1Y3YtXHUwMDNlbWVzc2FnZV9xLmxvY2spO1xuK1x0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbiwgXHUwMDI2aXVjdi1cdTAwM2VtZXNzYWdlX3EubGlzdCwgbGlzdCkge1xuK1x0XHRcdGxpc3RfZGVsKFx1MDAyNnAtXHUwMDNlbGlzdCk7XG4rXHRcdFx0a2ZyZWUocCk7XG4rXHRcdH1cbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aXVjdi1cdTAwM2VtZXNzYWdlX3EubG9jayk7XG4gXHR9XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTU6MDg6MzIuMjI5MjA0NTEzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkzMzcyNjk5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCB0byBgbmV0L2l1Y3YvYWZfaXVjdi5jYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCdzIHR3ZWFraW5nIGBpdWN2X3NldmVyX3BhdGhgIGluIGBuZXQvaXVjdi9hZl9pdWN2LmNgLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgdGhlIGNoYW5nZSBpcyBjbGVhcmluZyB0aGUgYG1lc3NhZ2VfcWAgbGlzdC4gVGhhdCdzIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24sIGZvciBzdXJlLiBCZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGNvZGUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBlbnZpcm9ubWVudCB0aGlzIGNvZGUgcnVucyBpbi5cblxuRmlyc3QgdGhvdWdodDogSVVDViAtIGxldCBtZSByZW1pbmQgbXlzZWxmIHdoYXQgdGhhdCBpcy4uLiByaWdodCwgXCJJbnRyYS1Vc2VyIENvbW11bmljYXRpb24gVmVoaWNsZS5cIiBJdCdzIGFuIElCTSB6L1ZNLXNwZWNpZmljIHByb3RvY29sLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBjb2RlIGlzIGdvaW5nIHRvIGJlIHMzOTAgc3BlY2lmaWMuIFNvIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgaG93IHRoaXMgaW50ZXJhY3RzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIElzIGBuZXQvaXVjdi9hZl9pdWN2LmNgIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nPyBJJ2QgYmV0dGVyIGNvbmZpcm0gd2hlcmUgdGhpcyBpcyB1c2VkLiBUbyBkbyB0aGF0IEknbGwgcXVpY2tseSBsb29rIGF0IGBuZXQvaXVjdi9LY29uZmlnYCBvciBldmVuIGBuZXQvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGlzIGFueSBjb25kaXRpb25hbCBjb21waWxpbmcgYXJvdW5kIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTE1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTU6MDg6MzcuMTYyOTM0MTc1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDA4Nzk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVVDVlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXVjdi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pdWN2L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvaXVjdi9LY29uZmlnOjI6Y29uZmlnIElVQ1ZcXG5uZXQvaXVjdi9LY29uZmlnLTMtXFx0ZGVwZW5kcyBvbiBTMzkwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE1OjA4OjM3LjI4NzAyOTYwNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyMDIzMDcxMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uc2lkZXJpbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBTMzkwIENvZGUgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyB0aGUgcHJvbXB0IG1lbnRpb25zIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJBaCwgdGhpcyAqZGVwZW5kcyogb24gUzM5MC5cIiBDYW4gd2UgZXZlbiBmdXp6IFMzOTAgY29kZSBlZmZlY3RpdmVseT8gU3l6a2FsbGVyICpkb2VzKiBzdXBwb3J0IHMzOTB4LCB3aGljaCBpcyBwcm9taXNpbmcuIEhvd2V2ZXIsIHR5cGljYWxseSwgd2UncmUgcnVubmluZyB4ODZfNjQgb3IgYXJtNjQgaW4gb3VyIHVzdWFsIGZ1enppbmcgc2V0dXBzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoZSBwcm9tcHQgYW5kIHRoZSBzcGVjaWZpYyB0YXJnZXQuIFRoZSBwcm9tcHQgdGhlbiBzdHJlc3NlcyB0aGUgaXNzdWUgb2YgZW11bGF0ZWQgaGFyZHdhcmUgc3VjaCBhcyB1c2IgZ2FkZ2V0cyBvciBtYWM4MDIxMV9od3NpbSBiZWluZyB1bnJlYWNoYWJsZS5cblxuQnV0IHdhaXQsIFFFTVUgY2FuIGVtdWxhdGUgczM5MHgsIGFuZCB0aGF0IHNob3VsZCBiZSBlbm91Z2ggZm9yIGJhc2ljIG9wZXJhdGlvbiwgcmlnaHQ/IFRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IElzIHRoZSAqc3BlY2lmaWMqIGNvZGUgdGhleSdyZSB0YWxraW5nIGFib3V0IHJlYWNoYWJsZSAqd2l0aG91dCogcmVseWluZyBvbiBhIGRlZGljYXRlZCB6L1ZNIGh5cGVydmlzb3I/IEkgY2FuIHByb2JhYmx5IGdldCB0aGUgYmFzaWMgQ1BVLCBhbmQgc29tZSBkZXZpY2VzLCBidXQgaXQgY291bGQgYmUgdGhlIGNhc2UgdGhhdCBhIHNwZWNpZmljIGVtdWxhdGVkIGRldmljZSBoYXMgYW4gaXNzdWUgdGhhdCByZXF1aXJlcyBhIHNwZWNpZmljIGh5cGVydmlzb3IgZmVhdHVyZS5cblxuSSdkIGJldHRlciBjaGVjayBgbmV0L2l1Y3YvS2NvbmZpZ2AgYWdhaW4gdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgcG90ZW50aWFsIGRlcGVuZGVuY2llcy4gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTU6MDg6NDYuNDg5MzM4NzMyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2l1Y3YvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIElVQ1ZcXG4gICAzOlxcdFxcdGRlcGVuZHMgb24gUzM5MFxcbiAgIDQ6XFx0XFx0ZGVmX3RyaXN0YXRlIHkgaWYgUzM5MFxcbiAgIDU6XFx0XFx0cHJvbXB0IFxcXCJJVUNWIHN1cHBvcnQgKFMzOTAgLSB6L1ZNIG9ubHkpXFxcIlxcbiAgIDY6XFx0XFx0aGVscFxcbiAgIDc6XFx0XFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gdXNlIGludGVyLXVzZXIgY29tbXVuaWNhdGlvblxcbiAgIDg6XFx0XFx0ICB1bmRlciBWTSBvciBWSUYuIElmIHlvdSBydW4gb24gei9WTSwgc2F5IFxcXCJZXFxcIiB0byBlbmFibGUgYSBmYXN0XFxuICAgOTpcXHRcXHQgIGNvbW11bmljYXRpb24gbGluayBiZXR3ZWVuIFZNIGd1ZXN0cy5cXG4gIDEwOlxcdFxcbiAgMTE6XFx0Y29uZmlnIEFGSVVDVlxcbiAgMTI6XFx0XFx0ZGVwZW5kcyBvbiBTMzkwXFxuICAxMzpcXHRcXHRkZWZfdHJpc3RhdGUgbSBpZiBRRVRIX0wzIHx8IElVQ1ZcXG4gIDE0OlxcdFxcdHByb21wdCBcXFwiQUZfSVVDViBTb2NrZXQgc3VwcG9ydCAoUzM5MCAtIHovVk0gYW5kIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQpXFxcIlxcbiAgMTU6XFx0XFx0aGVscFxcbiAgMTY6XFx0XFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gdXNlIEFGX0lVQ1Ygc29ja2V0IGFwcGxpY2F0aW9uc1xcbiAgMTc6XFx0XFx0ICBiYXNlZCBvbiB6L1ZNIGludGVyLXVzZXIgY29tbXVuaWNhdGlvbiB2ZWhpY2xlIG9yIGJhc2VkIG9uXFxuICAxODpcXHRcXHQgIEhpcGVyU29ja2V0cy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTU6MDg6NDYuNDg5NDAxMzUyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjcwODgzMTU5MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgSVVDViBhbmQgQUZJVUNWIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2Ugbm90ZXMgYW5kIEkgc2VlIHRoYXQgSVVDViBpcyBzcGVjaWZpY2FsbHkgZm9yIHovVk0sIGJ1dCBBRklVQ1Ygc3VwcG9ydHMgSGlwZXJTb2NrZXRzICphbmQqIHovVk0uIEhtbSwgdGhlIHF1ZXN0aW9uIHRoYXQgaW1tZWRpYXRlbHkgcG9wcyBpbnRvIG15IGhlYWQgaXM6IGNhbiB0aGlzIGV2ZW4gcnVuIHVuZGVyIFFFTVU/IE5vdywgSSBrbm93IHRoZSBRRU1VIHMzOTB4IGVtdWxhdGlvbiwgYnV0IEknbSBwcmV0dHkgc3VyZSBpdCBkb2Vzbid0IGVtdWxhdGUgei9WTSBJVUNWIGRpcmVjdGx5OyBpdCdzIG1vcmUgZ2VhcmVkIHRvd2FyZHMgS1ZNL1FFTVUsIG9mIGNvdXJzZS5cblxuV2FpdCBhIHNlY29uZCwgdGhlIG5vdGVzIHNheSBBRklVQ1YgKmNhbiogdXNlIEhpcGVyU29ja2V0cy4gVGhhdCdzIGEga2V5IGRldGFpbC4gQnV0IHRoZSB1bmRlcmx5aW5nIGRlcGVuZGVuY3kgaXMgc3RpbGwgb24gdGhlIFMzOTAgYXJjaGl0ZWN0dXJlLiBTbywgaWYgSSdtIGZ1enppbmcgYW4geDg2XzY0IG9yIGFybTY0IHRhcmdldCwgSSdtIHByZXR0eSBtdWNoIGRlYWQgaW4gdGhlIHdhdGVyOyBJIHdvbid0IGJlIGFibGUgdG8gYnVpbGQgdGhpcyBjb2RlLiBIb3dldmVyLCBpZiBJJ20gb24gczM5MHgsIHRoZW4gaXQncyBhIHBvc3NpYmlsaXR5LlxuXG5Ob3csIGRpZCB0aGUgcHJvbXB0IHNheSBhbnl0aGluZyBhYm91dCBleGNsdWRpbmcgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGU/IExldCBtZSByZXJlYWQgaXQuLi4gXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuXCIgT2theSwgd2FpdCwgUUVNVSAqY2FuKiBlbXVsYXRlIHMzOTB4ISBTbywgdGhhdCBjb2RlICpzaG91bGQqIGJlIHJlYWNoYWJsZSBpbiBhIFFFTVUgKHMzOTB4KSBlbnZpcm9ubWVudC5cblxuSGFuZyBvbi4uLiBpcyBpdCAqaW1wb3NzaWJsZSogdG8gcmVhY2ggaXQgaW4gUUVNVT8gSSBuZWVkIHRvIHRoaW5rIHRoaXMgdGhyb3VnaC4gQ2FuIEkgY3JlYXRlIGBBRl9JVUNWYCBzb2NrZXRzICp3aXRob3V0KiB6L1ZNPyBUaGF0J3MgdGhlIHJlYWwgcXVlc3Rpb24uIElmIEkgKmNhbiogY3JlYXRlIHRob3NlIHNvY2tldHMsIGFuZCBpZiB0aGUgY29kZSBwYXRocyBsZWFkaW5nIHRvIGBpdWN2X3NlcnZlcl9wYXRoYCBjYW4gYmUgcmVhY2hlZC4uLiB0aGVuIHdlIGFyZSBnb2xkZW4uIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzgzLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTU6MDk6MTMuNTc3NzE5MjQ1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDg2NjU0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpdWN2X3NldmVyX3BhdGhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2l1Y3YvYWZfaXVjdi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuYz0zMjQ9c3RhdGljIHZvaWQgaXVjdl9zb2NrX2tpbGwoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTMzNC0vKiBUZXJtaW5hdGUgYW4gSVVDViBwYXRoICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjMzNTpzdGF0aWMgdm9pZCBpdWN2X3NldmVyX3BhdGgoc3RydWN0IHNvY2sgKnNrLCBpbnQgd2l0aF91c2VyX2RhdGEpXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTMzNi17XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9Mzk1PXN0YXRpYyB2b2lkIGl1Y3Zfc29ja19jbG9zZShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDQyLVxcdGRlZmF1bHQ6XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjQ0MzpcXHRcXHRpdWN2X3NldmVyX3BhdGgoc2ssIDEpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy00NDQtXFx0fVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTczMz1zdGF0aWMgaW50IGl1Y3Zfc29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTc4MS1cXHRpZiAoZXJyIFxcdTAwMjZcXHUwMDI2IGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1YpXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjc4MjpcXHRcXHRpdWN2X3NldmVyX3BhdGgoc2ssIDApO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy03ODMtXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTYwNz1zdGF0aWMgaW50IGl1Y3ZfY2FsbGJhY2tfY29ubnJlcShzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2ODctXFx0aWYgKGVycikge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjg4OlxcdFxcdGl1Y3Zfc2V2ZXJfcGF0aChuc2ssIDEpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjg5LVxcdFxcdGl1Y3Zfc29ja19raWxsKG5zayk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTgwMT1zdGF0aWMgdm9pZCBpdWN2X2NhbGxiYWNrX2Nvbm5yZWooc3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCwgdTggaXB1c2VyWzE2XSlcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODA4LVxcdGJoX2xvY2tfc29jayhzayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE4MDk6XFx0aXVjdl9zZXZlcl9wYXRoKHNrLCAxKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTgxMC1cXHRzay1cXHUwMDNlc2tfc3RhdGUgPSBJVUNWX0RJU0NPTk47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE1OjA5OjEzLjY5MjU5MDk0NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3NTU0NzU3ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGBpdWN2X3NldmVyX3BhdGhgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYGl1Y3Zfc2V2ZXJfcGF0aGAgaXMgYWN0dWFsbHkgcmVhY2hhYmxlIGZyb20gd2hlcmUgaXQncyBiZWluZyBjYWxsZWQuIEkgc2VlIGl0J3MgYmVpbmcgaW52b2tlZCBmcm9tIGEgZmV3IGtleSBwbGFjZXMgaW4gdGhlIElVQ1Ygc29ja2V0IGNvZGU6IGBpdWN2X3NvY2tfY2xvc2VgLCBgaXVjdl9zb2NrX2Nvbm5lY3RgLCBgaXVjdl9jYWxsYmFja19jb25ucmVxYCwgYW5kIGBpdWN2X2NhbGxiYWNrX2Nvbm5yZWpgLiBUaGF0J3MgdGhlIGNvcmUgb2YgY29ubmVjdGlvbiBtYW5hZ2VtZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2UncmUgcmVhY2hpbmcgdGhvc2UgZnVuY3Rpb25zLlxuXG5TbywgbGV0J3Mgc3RhcnQgd2l0aCB0aGUgYmFzaWNzLiBDYW4gd2UgZXZlbiBpbnN0YW50aWF0ZSBhbiBBRl9JVUNWIHNvY2tldD8gVGhhdCBtZWFucyBleGFtaW5pbmcgdGhlIGBzb2NrZXQoKWAgY2FsbCB3aXRoIGBBRl9JVUNWYCwgYFNPQ0tfU1RSRUFNYCwgYW5kIDAgZm9yIHRoZSBwcm90b2NvbC4gSWYgd2UgY2FuJ3QgY3JlYXRlIHRoZSBzb2NrZXQgaW4gdGhlIGZpcnN0IHBsYWNlLCB0aGVuIHRoaXMgd2hvbGUgcGF0aCBpcyBtb290LlxuXG5UaGF0IGJyaW5ncyBtZSB0byBgaXVjdl9zb2NrX2NyZWF0ZWAuIEknbGwgbmVlZCB0byBkaXZlIGludG8gdGhhdCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3Mgb2YgdGhlIElVQ1Ygc29ja2V0IGNyZWF0aW9uIHByb2Nlc3MgYW5kIHdoZXJlIGBpdWN2X3NldmVyX3BhdGhgIG1pZ2h0IGJlIHJlbGV2YW50LiBJdCdzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgZmlndXJpbmcgb3V0IHdoYXQgY29uZGl0aW9ucyBjYW4gYWxsb3cgZm9yIGl0cyB1c2UuIEkgbmVlZCB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIGFuZCBhbnkgYXNzb2NpYXRlZCBlcnJvciBjb25kaXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzgyLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE1OjA5OjE5LjQ0ODA2OTAwNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ0NzY0Mjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIml1Y3Zfc29ja19jcmVhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2l1Y3YvYWZfaXVjdi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuYz0yMjM0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGl1Y3Zfc29ja19vcHMgPSB7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI1My1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjI1NDpzdGF0aWMgaW50IGl1Y3Zfc29ja19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyNTUtXFx0XFx0XFx0ICAgIGludCBrZXJuKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTIyODM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfcHJvdG9fZmFtaWx5IGl1Y3Zfc29ja19mYW1pbHlfb3BzID0ge1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyODUtXFx0Lm93bmVyXFx0PSBUSElTX01PRFVMRSxcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjI4NjpcXHQuY3JlYXRlXFx0PSBpdWN2X3NvY2tfY3JlYXRlLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjg3LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE1OjA5OjE5Ljc5MjgzODk0M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDYzMzQyNjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgaXVjdl9zb2NrX2NyZWF0ZWAncyBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkcmlsbCBkb3duIG9uIHRoaXMgYGl1Y3Zfc29ja19jcmVhdGVgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgdGhpcyBpcyBkZWVwbHkgdGllZCB0byB0aGUgei9WTSBlbnZpcm9ubWVudCwgZ2l2ZW4gaXRzIGxpa2VseSBpbnRlcmFjdGlvbiB3aXRoIElVQ1YuIEJ1dCwgYmVmb3JlIEkganVtcCB0byBhbnkgY29uY2x1c2lvbnMsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBhc3N1bXB0aW9uLiBUaGUgY29yZSBxdWVzdGlvbiBpczogZG9lcyB0aGlzIGZ1bmN0aW9uICptYW5kYXRvcmlseSogcmVxdWlyZSB0aGUgei9WTSBoeXBlcnZpc29yIHRvIGZ1bmN0aW9uLCBvciBoYXMgaXQgYmVlbiBkZXNpZ25lZCBpbiBhIHdheSB0aGF0IGFsbG93cyBpdCB0byBvcGVyYXRlLCBhbGJlaXQgcGVyaGFwcyB3aXRoIHJlZHVjZWQgZnVuY3Rpb25hbGl0eSBvciB1bmRlciBzcGVjaWZpYyBjb25kaXRpb25zLCBvbiBhIGJhcmUgczM5MHggc3lzdGVtPyBLbm93aW5nIHRoaXMgd2lsbCBzaWduaWZpY2FudGx5IGluZmx1ZW5jZSBob3cgcG9ydGFibGUgYW55IGNvZGUgdXNpbmcgdGhpcyBpcy4gVGltZSB0byBkaWcgaW50byB0aGUgc291cmNlIGFuZCBjcm9zcy1yZWZlcmVuY2UgdGhlIGRvY3VtZW50YXRpb24gdG8gY29uZmlybSBpdHMgZW52aXJvbm1lbnRhbCByZXF1aXJlbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NjcsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNTowOToyMy4yNTYxODQzOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODcxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2l1Y3YvYWZfaXVjdi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyNTQsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyNTQ6XFx0c3RhdGljIGludCBpdWN2X3NvY2tfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxcbjIyNTU6XFx0XFx0XFx0XFx0ICAgIGludCBrZXJuKVxcbjIyNTY6XFx0e1xcbjIyNTc6XFx0XFx0c3RydWN0IHNvY2sgKnNrO1xcbjIyNTg6XFx0XFxuMjI1OTpcXHRcXHRpZiAocHJvdG9jb2wgXFx1MDAyNlxcdTAwMjYgcHJvdG9jb2wgIT0gUEZfSVVDVilcXG4yMjYwOlxcdFxcdFxcdHJldHVybiAtRVBST1RPTk9TVVBQT1JUO1xcbjIyNjE6XFx0XFxuMjI2MjpcXHRcXHRzb2NrLVxcdTAwM2VzdGF0ZSA9IFNTX1VOQ09OTkVDVEVEO1xcbjIyNjM6XFx0XFxuMjI2NDpcXHRcXHRzd2l0Y2ggKHNvY2stXFx1MDAzZXR5cGUpIHtcXG4yMjY1OlxcdFxcdGNhc2UgU09DS19TVFJFQU06XFxuMjI2NjpcXHRcXHRjYXNlIFNPQ0tfU0VRUEFDS0VUOlxcbjIyNjc6XFx0XFx0XFx0LyogY3VycmVudGx5LCBwcm90byBvcHMgY2FuIGhhbmRsZSBib3RoIHNrIHR5cGVzICovXFxuMjI2ODpcXHRcXHRcXHRzb2NrLVxcdTAwM2VvcHMgPSBcXHUwMDI2aXVjdl9zb2NrX29wcztcXG4yMjY5OlxcdFxcdFxcdGJyZWFrO1xcbjIyNzA6XFx0XFx0ZGVmYXVsdDpcXG4yMjcxOlxcdFxcdFxcdHJldHVybiAtRVNPQ0tUTk9TVVBQT1JUO1xcbjIyNzI6XFx0XFx0fVxcbjIyNzM6XFx0XFxuMjI3NDpcXHRcXHRzayA9IGl1Y3Zfc29ja19hbGxvYyhzb2NrLCBwcm90b2NvbCwgR0ZQX0tFUk5FTCwga2Vybik7XFxuMjI3NTpcXHRcXHRpZiAoIXNrKVxcbjIyNzY6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjI3NzpcXHRcXG4yMjc4OlxcdFxcdGl1Y3Zfc29ja19pbml0KHNrLCBOVUxMKTtcXG4yMjc5OlxcdFxcbjIyODA6XFx0XFx0cmV0dXJuIDA7XFxuMjI4MTpcXHR9XFxuMjI4MjpcXHRcXG4yMjgzOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSBpdWN2X3NvY2tfZmFtaWx5X29wcyA9IHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTU6MDk6MjMuMjU2Mzc0MjFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE0OTkzNTYyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIENyZWF0aW9uIFByb2Nlc3MqKlxuXG5JIHNlZSB0aGUgcG9zc2liaWxpdHkgb2Ygc29tZXRoaW5nIGJlaW5nIGNyZWF0ZWQuIEJ1dCB0aGVuIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYGl1Y3Zfc2V2ZXJfcGF0aGAuIFdoeT8gQmVjYXVzZSBpdCdzIHRoZSBjcml0aWNhbCBqdW5jdHVyZSBpbiB0aGlzIHByb2Nlc3MuIEknbSBmb2N1c2luZyBpbiBvbiB0aGUgbGluZSB0aGF0IHJlYWRzIGBpZiAoeGNoZyhcdTAwMjZpdWN2LVx1MDAzZXBhdGgsIE5VTEwpKWAuIFRoaXMgaXMgYSBjcnVjaWFsIGNoZWNrLiBJdCdzIHVzaW5nIGB4Y2hnYCB3aGljaCwgaWYgSSByZW1lbWJlciBjb3JyZWN0bHksIGlzIGFuIGF0b21pYyBleGNoYW5nZSBvcGVyYXRpb24uIEl0J3MgZXNzZW50aWFsbHkgYXNraW5nLCBcIkhhcyBzb21ldGhpbmcgYmVlbiBzZXQgaW4gYGl1Y3YtXHUwMDNlcGF0aGAgYWxyZWFkeT8gSXMgdGhlcmUgYWxyZWFkeSBhIHBhdGh3YXkgY3JlYXRlZD9cblxuTXkgbmV4dCB0aG91Z2h0LCBpbnN0aW5jdGl2ZWx5LCBpcyB0byB0cmFjZSBiYWNrOiAqV2hlbiogZXhhY3RseSBpcyBgaXVjdi1cdTAwM2VwYXRoYCBpbml0aWFsaXplZD8gQmVmb3JlIGl0J3MgZXZlbiBjcmVhdGVkLCBvciByaWdodCBhZnRlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNlcXVlbmNlIG9mIGV2ZW50cyBsZWFkaW5nIHVwIHRvIHRoaXMgcG9pbnQuIEtub3dpbmcgd2hlbiBgaXVjdi1cdTAwM2VwYXRoYCBpcyBwb3B1bGF0ZWQgaXMgYWJzb2x1dGVseSBmdW5kYW1lbnRhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBsb2dpYyBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgb3IsIG1vcmUgaW1wb3J0YW50bHksIHRoZSBpbnRlbmRlZCBkZXNpZ24gaGVyZS4gVGhlIHdob2xlIHBpY3R1cmUgbmVlZHMgdG8gYmUgcHV0IHRvZ2V0aGVyIGFuZCBpdHMgZnVuY3Rpb25hbGl0eSBuZWVkcyB0byBiZSBncmFzcGVkIGNvbXBsZXRlbHkgdG8gcHJvcGVybHkgY3JlYXRlIG9yIGltcGxlbWVudCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjEzNiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTU6MDk6MjcuNDA2MzEzMjc2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM3NTYxMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXVjdi1cXHUwMDNlcGF0aCA9XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmM9NDY2PXN0YXRpYyBzdHJ1Y3Qgc29jayAqaXVjdl9zb2NrX2FsbG9jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90bywgZ2ZwX3QgcHJpbywgaW50IGtlcm4pXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDg5LVxcdGF0b21pY19zZXQoXFx1MDAyNml1Y3YtXFx1MDAzZW1zZ19yZWN2LCAwKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6NDkwOlxcdGl1Y3YtXFx1MDAzZXBhdGggPSBOVUxMO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OTEtXFx0aXVjdi1cXHUwMDNlc2tfdHhub3RpZnkgPSBhZml1Y3ZfaHNfY2FsbGJhY2tfdHhub3RpZnk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9Njg3PXN0YXRpYyBpbnQgYWZpdWN2X3BhdGhfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy02OTktXFx0LyogQ3JlYXRlIHBhdGguICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjcwMDpcXHRpdWN2LVxcdTAwM2VwYXRoID0gaXVjdl9wYXRoX2FsbG9jKGl1Y3YtXFx1MDAzZW1zZ2xpbWl0LFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03MDEtXFx0XFx0XFx0XFx0ICAgICBJVUNWX0lQUk1EQVRBLCBHRlBfS0VSTkVMKTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03MTAtXFx0XFx0aXVjdl9wYXRoX2ZyZWUoaXVjdi1cXHUwMDNlcGF0aCk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjcxMTpcXHRcXHRpdWN2LVxcdTAwM2VwYXRoID0gTlVMTDtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzEyLVxcdFxcdHN3aXRjaCAoZXJyKSB7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTYwNz1zdGF0aWMgaW50IGl1Y3ZfY2FsbGJhY2tfY29ubnJlcShzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NzUtXFx0bWVtY3B5KG5pdWN2LVxcdTAwM2VzcmNfdXNlcl9pZCwgaXVjdi1cXHUwMDNlc3JjX3VzZXJfaWQsIDgpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjc2OlxcdG5pdWN2LVxcdTAwM2VwYXRoID0gcGF0aDtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY3Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTU6MDk6MjcuNTEwMDc2NDI1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDk0NzQ2OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIHByZXNlbnRlZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydDpcblxuKipVbmRlcnN0YW5kaW5nIHRoZSBBbGxvY2F0aW9uIG9mIGBpdWN2LVx1MDAzZXBhdGhgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgYWZpdWN2X3BhdGhfY29ubmVjdGAgZnVuY3Rpb24gYW5kIHRoZSBrZXkgdGhpbmcgaGVyZSBpcyB0aGUgYWxsb2NhdGlvbiBvZiBgaXVjdi1cdTAwM2VwYXRoYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgdGhlIG1lbW9yeSBpcyBzZXQgYXNpZGUgZm9yIHRoZSBwYXRoIHN0cnVjdHVyZSBpdHNlbGYuIFRoaXMgaXMgY3JpdGljYWwgYmVjYXVzZSB0aGlzIHN0cnVjdHVyZSBwcmVzdW1hYmx5IGhvbGRzIHRoZSBkZXRhaWxzIG9mIHRoZSBJVUNWIGNvbm5lY3Rpb24sIHRoZSByb3V0ZSwgZW5kcG9pbnRzLCBldmVyeXRoaW5nIG5lZWRlZCBmb3IgdGhlIGFjdHVhbCBjb21tdW5pY2F0aW9uIHRvIG9jY3VyLiBVbmRlcnN0YW5kaW5nICp3aGVyZSogdGhpcyBoYXBwZW5zIGhlbHBzIG1lIGltbWVkaWF0ZWx5IHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgYWxsb2NhdGlvbiwgYW5kIGxpa2VseSwgd2hlbiB0aGUgc3RydWN0dXJlIGJlY29tZXMgdmFsaWQuIFRoaXMgYWxzbyB0ZWxscyBtZSB3aGF0IHRvIGxvb2sgZm9yIHdoZW4gZGVidWdnaW5nIGNvbm5lY3Rpb24gZmFpbHVyZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwMTMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNTowOTozMC45NTk1NTM0NjNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTU0MzI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZml1Y3ZfcGF0aF9jb25uZWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmM9NjY1PXN0YXRpYyBpbnQgaXVjdl9zb2NrX2F1dG9iaW5kKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy02ODYtXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjY4NzpzdGF0aWMgaW50IGFmaXVjdl9wYXRoX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIpXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTY4OC17XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9NzMzPXN0YXRpYyBpbnQgaXVjdl9zb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzY4LVxcdGVsc2VcXG5uZXQvaXVjdi9hZl9pdWN2LmM6NzY5OlxcdFxcdGVyciA9IGFmaXVjdl9wYXRoX2Nvbm5lY3Qoc29jaywgYWRkcik7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTc3MC1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNTowOTozMS4xMDExMDM0MTJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQwNTUzOTU2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgY29kZSBzbmlwcGV0LCBwcmVzZW50ZWQgYXMgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgdGhlIGBhZml1Y3ZfcGF0aF9jb25uZWN0YCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gYGFmaXVjdl9wYXRoX2Nvbm5lY3RgLi4uIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIEl0IGFwcGVhcnMgdG8gYmUgYSBmdW5jdGlvbiBkZWFsaW5nIHdpdGggc29tZSBraW5kIG9mIHBhdGggY29ubmVjdGlvbiwgbGlrZWx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBhbiBBRl9JVUNWIChJbnRlci1Vc2VyIENvbW11bmljYXRpb24gVmVoaWNsZSkgZW52aXJvbm1lbnQsIHdoaWNoIEknbSBmYW1pbGlhciB3aXRoLlxuXG5UaGUgZmlyc3QgdGhpbmcgaXQgZG9lcyBpcyBjYWxsIGBpdWN2X3BhdGhfYWxsb2NgLiBTbywgY2xlYXJseSwgYmVmb3JlIGFueXRoaW5nIGVsc2UsIGEgcGF0aCBpcyBiZWluZyBhbGxvY2F0ZWQuIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZTsgeW91IGNhbid0IGNvbm5lY3QgdG8gc29tZXRoaW5nIHRoYXQgZG9lc24ndCBleGlzdC4gVGhpcyBhbGxvY2F0aW9uIGxpa2VseSBzZXRzIHVwIHRoZSBiYXNpYyBkYXRhIHN0cnVjdHVyZXMgbmVlZGVkIHRvIG1hbmFnZSB0aGUgY29tbXVuaWNhdGlvbiBwYXRoLlxuXG5UaGVuLCB0aGVyZSdzIGEgY2FsbCB0byBgcHJfaXVjdi1cdTAwM2VwYXRoX2Nvbm5lY3RgLiBBaCwgbm93IHdlIGdldCB0byB0aGUgY29yZSBjb25uZWN0aW9uIGxvZ2ljLiBCdXQsIGFuZCB0aGlzIGlzIHdoZXJlIEkgbmVlZCB0byB0YWtlIGEgcGF1c2UuLi53aGF0ICppcyogYHByX2l1Y3ZgPyBUaGlzIGxvb2tzIGxpa2UgYSBwb2ludGVyIHRvIHNvbWUgc29ydCBvZiBJVUNWLXJlbGF0ZWQgc3RydWN0dXJlLCBwcm9iYWJseSBhIHBlci1JVUNWIGRhdGEgc3RydWN0dXJlLiBJdCdzIGxpa2VseSB3aXRoaW4gdGhpcyBzdHJ1Y3R1cmUgdGhhdCB0aGUgYHBhdGhfY29ubmVjdGAgbWV0aG9kIGlzIGRlZmluZWQuIFVuZGVyc3RhbmRpbmcgd2hhdCBgcHJfaXVjdmAgcmVwcmVzZW50cyBpcyBjcnVjaWFsIHRvIGNvbXByZWhlbmRpbmcgdGhlIGVudGlyZSBwcm9jZXNzLCBpbmNsdWRpbmcgYW55IGNvbnRleHQgaXQgcmVxdWlyZXMuIEknZCBiZXR0ZXIgZm9sbG93IHRoaXMgcG9pbnRlciBhbmQgZmlndXJlIG91dCB3aGVyZSB0aGlzIGdldHMgaW5pdGlhbGl6ZWQsIGFuZCB3aGF0IGNvbnRleHQgaXQgcHJvdmlkZXMgdG8gdGhlIGNhbGwgdG8gYHBhdGhfY29ubmVjdGAuIFRoZSBkZXRhaWxzIG9mIHRoaXMgc3RydWN0dXJlIGFyZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29ubmVjdGlvbiBwcm9jZXNzLCBhbmQgdGhlIGxvZ2ljIHdpdGhpbiB0aGUgYHBhdGhfY29ubmVjdGAgbWV0aG9kIGl0c2VsZi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ4NSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE1OjA5OjM1LjUwNjY0NTMxNloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODUyMjU4ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJfaXVjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2l1Y3YvYWZfaXVjdi5jPTQyPXN0YXRpYyBzdHJ1Y3QgcHJvdG8gaXVjdl9wcm90byA9IHtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy00Ny1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6NDg6c3RhdGljIHN0cnVjdCBpdWN2X2ludGVyZmFjZSAqcHJfaXVjdjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDktc3RhdGljIHN0cnVjdCBpdWN2X2hhbmRsZXIgYWZfaXVjdl9oYW5kbGVyO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTMzNT1zdGF0aWMgdm9pZCBpdWN2X3NldmVyX3BhdGgoc3RydWN0IHNvY2sgKnNrLCBpbnQgd2l0aF91c2VyX2RhdGEpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzQ3LVxcdFxcdFxcdEFTQ0VCQyh1c2VyX2RhdGEsIHNpemVvZih1c2VyX2RhdGEpKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MzQ4OlxcdFxcdFxcdHByX2l1Y3YtXFx1MDAzZXBhdGhfc2V2ZXIocGF0aCwgdXNlcl9kYXRhKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzQ5LVxcdFxcdH0gZWxzZVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzozNTA6XFx0XFx0XFx0cHJfaXVjdi1cXHUwMDNlcGF0aF9zZXZlcihwYXRoLCBOVUxMKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzUxLVxcdFxcdGl1Y3ZfcGF0aF9mcmVlKHBhdGgpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTQ2Nj1zdGF0aWMgc3RydWN0IHNvY2sgKml1Y3Zfc29ja19hbGxvYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG8sIGdmcF90IHByaW8sIGludCBrZXJuKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ5Mi1cXHRtZW1zZXQoXFx1MDAyNml1Y3YtXFx1MDAzZWluaXQsIDAsIHNpemVvZihpdWN2LVxcdTAwM2Vpbml0KSk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjQ5MzpcXHRpZiAocHJfaXVjdilcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDk0LVxcdFxcdGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz01ODI9c3RhdGljIGludCBpdWN2X3NvY2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy02MTMtXFx0LyogQmluZCB0aGUgc29ja2V0ICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjYxNDpcXHRpZiAocHJfaXVjdilcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjE1LVxcdFxcdGlmICghbWVtY21wKHNhLVxcdTAwM2VzaXVjdl91c2VyX2lkLCBpdWN2X3VzZXJpZCwgOCkpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjQyLXZtX2JpbmQ6XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjY0MzpcXHRpZiAocHJfaXVjdikge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NDQtXFx0XFx0LyogdXNlIGxvY2FsIHVzZXJpZCBmb3IgYmFja3dhcmQgY29tcGF0ICovXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9NjY1PXN0YXRpYyBpbnQgaXVjdl9zb2NrX2F1dG9iaW5kKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NjktXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjY3MDpcXHRpZiAodW5saWtlbHkoIXByX2l1Y3YpKVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NzEtXFx0XFx0cmV0dXJuIC1FUFJPVE87XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9Njg3PXN0YXRpYyBpbnQgYWZpdWN2X3BhdGhfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03MDUtXFx0fVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo3MDY6XFx0ZXJyID0gcHJfaXVjdi1cXHUwMDNlcGF0aF9jb25uZWN0KGl1Y3YtXFx1MDAzZXBhdGgsIFxcdTAwMjZhZl9pdWN2X2hhbmRsZXIsXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTcwNy1cXHRcXHRcXHRcXHQgICAgc2EtXFx1MDAzZXNpdWN2X3VzZXJfaWQsIE5VTEwsIHVzZXJfZGF0YSxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz05MDU9c3RhdGljIGludCBpdWN2X3NlbmRfaXBybShzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLCBzdHJ1Y3QgaXVjdl9tZXNzYWdlICptc2csXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtOTExLVxcdHBybWRhdGFbN10gPSAweGZmIC0gKHU4KSBza2ItXFx1MDAzZWxlbjtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6OTEyOlxcdHJldHVybiBwcl9pdWN2LVxcdTAwM2VtZXNzYWdlX3NlbmQocGF0aCwgbXNnLCBJVUNWX0lQUk1EQVRBLCAwLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy05MTMtXFx0XFx0XFx0XFx0ICh2b2lkICopIHBybWRhdGEsIDgpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTkxNj1zdGF0aWMgaW50IGl1Y3Zfc29ja19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDY5LVxcdFxcdFxcdGlmIChlcnIgPT0gMHgxNSkge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMDcwOlxcdFxcdFxcdFxcdHByX2l1Y3YtXFx1MDAzZXBhdGhfc2V2ZXIoaXVjdi1cXHUwMDNlcGF0aCwgTlVMTCk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNzEtXFx0XFx0XFx0XFx0YXRvbWljX2RlYyhcXHUwMDI2aXVjdi1cXHUwMDNlc2tic19pbl94bWl0KTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDg4LVxcdFxcdFxcdH1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTA4OTpcXHRcXHRcXHRlcnIgPSBwcl9pdWN2LVxcdTAwM2VtZXNzYWdlX3NlbmQoaXVjdi1cXHUwMDNlcGF0aCwgXFx1MDAyNnR4bXNnLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDkwLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBJVUNWX0lQQlVGTFNULCAwLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwOTItXFx0XFx0fSBlbHNlIHsgLyogbm9uLUlQUk0gTGluZWFyIHNrYiAqL1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMDkzOlxcdFxcdFxcdGVyciA9IHByX2l1Y3YtXFx1MDAzZW1lc3NhZ2Vfc2VuZChpdWN2LVxcdTAwM2VwYXRoLCBcXHUwMDI2dHhtc2csXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwOTQtXFx0XFx0XFx0XFx0XFx0MCwgMCwgKHZvaWQgKilza2ItXFx1MDAzZWRhdGEsIHNrYi1cXHUwMDNlbGVuKTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0xMTU4PXN0YXRpYyB2b2lkIGl1Y3ZfcHJvY2Vzc19tZXNzYWdlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMTg5LVxcdFxcdFxcdH1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTE5MDpcXHRcXHRcXHRyYyA9IHByX2l1Y3YtXFx1MDAzZW1lc3NhZ2VfcmVjZWl2ZShwYXRoLCBtc2csXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTExOTEtXFx0XFx0XFx0XFx0XFx0ICAgICAgSVVDVl9JUEJVRkxTVCxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMTkzLVxcdFxcdH0gZWxzZSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjExOTQ6XFx0XFx0XFx0cmMgPSBwcl9pdWN2LVxcdTAwM2VtZXNzYWdlX3JlY2VpdmUocGF0aCwgbXNnLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMTk1LVxcdFxcdFxcdFxcdFxcdCAgICAgIG1zZy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJVUNWX0lQUk1EQVRBLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTE0MTg9c3RhdGljIGludCBpdWN2X3NvY2tfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGhvdylcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDQ2LVxcdFxcdFxcdHR4bXNnLnRhZyA9IDA7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE0NDc6XFx0XFx0XFx0ZXJyID0gcHJfaXVjdi1cXHUwMDNlbWVzc2FnZV9zZW5kKGl1Y3YtXFx1MDAzZXBhdGgsIFxcdTAwMjZ0eG1zZyxcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ0OC1cXHRcXHRcXHRcXHRJVUNWX0lQUk1EQVRBLCAwLCAodm9pZCAqKSBpcHJtX3NodXRkb3duLCA4KTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDY5LVxcdFxcdCAgICBpdWN2LVxcdTAwM2VwYXRoKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE0NzA6XFx0XFx0XFx0ZXJyID0gcHJfaXVjdi1cXHUwMDNlcGF0aF9xdWllc2NlKGl1Y3YtXFx1MDAzZXBhdGgsIE5VTEwpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDcxLVxcdFxcdFxcdGlmIChlcnIpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTYwNz1zdGF0aWMgaW50IGl1Y3ZfY2FsbGJhY2tfY29ubnJlcShzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NDQtXFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSAhPSBJVUNWX0xJU1RFTikge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjQ1OlxcdFxcdGVyciA9IHByX2l1Y3YtXFx1MDAzZXBhdGhfc2V2ZXIocGF0aCwgdXNlcl9kYXRhKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY0Ni1cXHRcXHRpdWN2X3BhdGhfZnJlZShwYXRoKTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjUxLVxcdGlmIChza19hY2NlcHRxX2lzX2Z1bGwoc2spKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE2NTI6XFx0XFx0ZXJyID0gcHJfaXVjdi1cXHUwMDNlcGF0aF9zZXZlcihwYXRoLCB1c2VyX2RhdGEpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjUzLVxcdFxcdGl1Y3ZfcGF0aF9mcmVlKHBhdGgpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NTktXFx0aWYgKCFuc2spIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTY2MDpcXHRcXHRlcnIgPSBwcl9pdWN2LVxcdTAwM2VwYXRoX3NldmVyKHBhdGgsIHVzZXJfZGF0YSk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NjEtXFx0XFx0aXVjdl9wYXRoX2ZyZWUocGF0aCk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY4NS1cXHRwYXRoLVxcdTAwM2Vtc2dsaW0gPSBpdWN2LVxcdTAwM2Vtc2dsaW1pdDtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTY4NjpcXHRlcnIgPSBwcl9pdWN2LVxcdTAwM2VwYXRoX2FjY2VwdChwYXRoLCBcXHUwMDI2YWZfaXVjdl9oYW5kbGVyLCBudXNlcl9kYXRhLCBuc2spO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjg3LVxcdGlmIChlcnIpIHtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNzEyPXN0YXRpYyB2b2lkIGl1Y3ZfY2FsbGJhY2tfcngoc3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCwgc3RydWN0IGl1Y3ZfbWVzc2FnZSAqbXNnKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE3MjAtXFx0aWYgKHNrLVxcdTAwM2Vza19zaHV0ZG93biBcXHUwMDI2IFJDVl9TSFVURE9XTikge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNzIxOlxcdFxcdHByX2l1Y3YtXFx1MDAzZW1lc3NhZ2VfcmVqZWN0KHBhdGgsIG1zZyk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE3MjItXFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTIyOTQ9c3RhdGljIGludCBfX2luaXQgYWZpdWN2X2luaXQodm9pZClcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzA1LVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzA2OlxcdFxcdHByX2l1Y3YgPSBcXHUwMDI2aXVjdl9pZjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMwNy1cXHR9IGVsc2Uge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzA4LVxcdFxcdG1lbXNldChcXHUwMDI2aXVjdl91c2VyaWQsIDAsIHNpemVvZihpdWN2X3VzZXJpZCkpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzA5OlxcdFxcdHByX2l1Y3YgPSBOVUxMO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzEwLVxcdH1cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzE4LVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzE5OlxcdGlmIChwcl9pdWN2KSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMjA6XFx0XFx0ZXJyID0gcHJfaXVjdi1cXHUwMDNlaXVjdl9yZWdpc3RlcihcXHUwMDI2YWZfaXVjdl9oYW5kbGVyLCAwKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMyMS1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMzItb3V0X25vdGlmaWVyOlxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzMzOlxcdGlmIChwcl9pdWN2KVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzM0OlxcdFxcdHByX2l1Y3YtXFx1MDAzZWl1Y3ZfdW5yZWdpc3RlcihcXHUwMDI2YWZfaXVjdl9oYW5kbGVyLCAwKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMzNS1vdXRfc29jazpcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMzQzPXN0YXRpYyB2b2lkIF9fZXhpdCBhZml1Y3ZfZXhpdCh2b2lkKVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzQ0LXtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjM0NTpcXHRpZiAocHJfaXVjdilcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjM0NjpcXHRcXHRwcl9pdWN2LVxcdTAwM2VpdWN2X3VucmVnaXN0ZXIoXFx1MDAyNmFmX2l1Y3ZfaGFuZGxlciwgMCk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzNDctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE1OjA5OjM1LjU5MTg3NjcwNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjMwNTg3Nzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdCBteXNlbGYsIHdpdGggYSBmb2N1cyB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLlxuXG4qKkludmVzdGlnYXRpbmcgVmFyaWFibGUgSW5pdGlhbGl6YXRpb24gaW4gQUZJVUNWKipcblxuQWxyaWdodCwgc28gYHByX2l1Y3ZgIGlzIGJlaW5nIGluaXRpYWxpemVkIHNvbWV3aGVyZSB3aXRoaW4gdGhlIGBhZml1Y3ZfaW5pdGAgZnVuY3Rpb24uIFRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgZHJpbGwgZG93biBpbnRvIGBhZml1Y3ZfaW5pdGAgdG8gdW5kZXJzdGFuZCBob3cgYHByX2l1Y3ZgIGlzIGJlaW5nIGhhbmRsZWQuIEknbSBnb2luZyB0byBxdWlja2x5IGp1bXAgaW50byB0aGF0IGZ1bmN0aW9uIGRlZmluaXRpb24gdG8gZXhhbWluZSB0aGUgY29kZSBwYXRoIGRpcmVjdGx5IHJlc3BvbnNpYmxlIGZvciB0aGF0IGluaXRpYWxpemF0aW9uLiBLbm93aW5nIHRoZSBjb250ZXh0LCBJJ2xsIGJlIGFibGUgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIGluaXRpYWxpemF0aW9uIGxvZ2ljLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgYHByX2l1Y3ZgIHZhcmlhYmxlLCB3aGljaCBoZWxwcyBtZSBkZXRlcm1pbmUgaWYgdGhlIGN1cnJlbnQgaW5pdGlhbGl6YXRpb24gaXMgY2F1c2luZyBhbiBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExNDIsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNTowOTo0Mi4yMjI0NjY5MDNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyNTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjk0LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMjk0OlxcdHN0YXRpYyBpbnQgX19pbml0IGFmaXVjdl9pbml0KHZvaWQpXFxuMjI5NTpcXHR7XFxuMjI5NjpcXHRcXHRpbnQgZXJyO1xcbjIyOTc6XFx0XFxuMjI5ODpcXHRcXHRpZiAobWFjaGluZV9pc192bSgpIFxcdTAwMjZcXHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0lVQ1YpKSB7XFxuMjI5OTpcXHRcXHRcXHRjcGNtZChcXFwiUVVFUlkgVVNFUklEXFxcIiwgaXVjdl91c2VyaWQsIHNpemVvZihpdWN2X3VzZXJpZCksIFxcdTAwMjZlcnIpO1xcbjIzMDA6XFx0XFx0XFx0aWYgKHVubGlrZWx5KGVycikpIHtcXG4yMzAxOlxcdFxcdFxcdFxcdFdBUk5fT04oZXJyKTtcXG4yMzAyOlxcdFxcdFxcdFxcdGVyciA9IC1FUFJPVE9OT1NVUFBPUlQ7XFxuMjMwMzpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4yMzA0OlxcdFxcdFxcdH1cXG4yMzA1OlxcdFxcbjIzMDY6XFx0XFx0XFx0cHJfaXVjdiA9IFxcdTAwMjZpdWN2X2lmO1xcbjIzMDc6XFx0XFx0fSBlbHNlIHtcXG4yMzA4OlxcdFxcdFxcdG1lbXNldChcXHUwMDI2aXVjdl91c2VyaWQsIDAsIHNpemVvZihpdWN2X3VzZXJpZCkpO1xcbjIzMDk6XFx0XFx0XFx0cHJfaXVjdiA9IE5VTEw7XFxuMjMxMDpcXHRcXHR9XFxuMjMxMTpcXHRcXG4yMzEyOlxcdFxcdGVyciA9IHByb3RvX3JlZ2lzdGVyKFxcdTAwMjZpdWN2X3Byb3RvLCAwKTtcXG4yMzEzOlxcdFxcdGlmIChlcnIpXFxuMjMxNDpcXHRcXHRcXHRnb3RvIG91dDtcXG4yMzE1OlxcdFxcdGVyciA9IHNvY2tfcmVnaXN0ZXIoXFx1MDAyNml1Y3Zfc29ja19mYW1pbHlfb3BzKTtcXG4yMzE2OlxcdFxcdGlmIChlcnIpXFxuMjMxNzpcXHRcXHRcXHRnb3RvIG91dF9wcm90bztcXG4yMzE4OlxcdFxcbjIzMTk6XFx0XFx0aWYgKHByX2l1Y3YpIHtcXG4yMzIwOlxcdFxcdFxcdGVyciA9IHByX2l1Y3YtXFx1MDAzZWl1Y3ZfcmVnaXN0ZXIoXFx1MDAyNmFmX2l1Y3ZfaGFuZGxlciwgMCk7XFxuMjMyMTpcXHRcXHRcXHRpZiAoZXJyKVxcbjIzMjI6XFx0XFx0XFx0XFx0Z290byBvdXRfc29jaztcXG4yMzIzOlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTU6MDk6NDIuMjIyNzExNzczWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MjA5ODg0MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgYHByX2l1Y3ZgIFZhcmlhYmxlKipcblxuT2theSwgc28gaXQgbG9va3MgbGlrZSBgcHJfaXVjdmAgaXMgb25seSBwb3B1bGF0ZWQgaWYgdGhlIHN5c3RlbSdzIGEgVk0gKmFuZCogdGhlIElVQ1YgY29uZmlndXJhdGlvbiBpcyBlbmFibGVkLiBSaWdodCwgc28gYG1hY2hpbmVfaXNfdm0oKWAgd2lsbCB0ZWxsIG1lIGlmIHdlJ3JlIHJ1bm5pbmcgdW5kZXIgei9WTS4gSWYgd2UncmUgKm5vdCogdW5kZXIgei9WTSwgdGhlbiBgcHJfaXVjdmAgZ2V0cyBzZXQgdG8gYE5VTExgLlxuXG5UaGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZSBpczogaWYgYHByX2l1Y3ZgIGVuZHMgdXAgYmVpbmcgYE5VTExgLCBjYW4gYGl1Y3Zfc2V2ZXJfcGF0aGAgc3RpbGwgYmUgY2FsbGVkIGFuZCwgeW91IGtub3csIGFjdHVhbGx5ICpkbyogc29tZXRoaW5nPyBUaGlzIHNlZW1zIGxpa2UgYSBwb3RlbnRpYWwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIGlmIGl0IGlzbid0IGhhbmRsZWQgY29ycmVjdGx5LiBJIHNob3VsZCByZWFsbHkgZ28gYmFjayBhbmQgY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYGl1Y3Zfc2V2ZXJfcGF0aGAgYWdhaW4sIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBJdCB3b3VsZCBiZSBhbiBhbm5veWluZyBidWcsIG90aGVyd2lzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4MjcsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNTowOTo0Ni44NDM3MDQxMjdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxMTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzUsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMzU6XFx0c3RhdGljIHZvaWQgaXVjdl9zZXZlcl9wYXRoKHN0cnVjdCBzb2NrICpzaywgaW50IHdpdGhfdXNlcl9kYXRhKVxcbiAzMzY6XFx0e1xcbiAzMzc6XFx0XFx0dW5zaWduZWQgY2hhciB1c2VyX2RhdGFbMTZdO1xcbiAzMzg6XFx0XFx0c3RydWN0IGl1Y3Zfc29jayAqaXVjdiA9IGl1Y3Zfc2soc2spO1xcbiAzMzk6XFx0XFx0c3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCA9IGl1Y3YtXFx1MDAzZXBhdGg7XFxuIDM0MDpcXHRcXHRzdHJ1Y3Qgc29ja19tc2dfcSAqcCwgKm47XFxuIDM0MTpcXHRcXG4gMzQyOlxcdFxcdC8qIFdob2V2ZXIgcmVzZXRzIHRoZSBwYXRoIHBvaW50ZXIsIG11c3Qgc2V2ZXIgYW5kIGZyZWUgaXQuICovXFxuIDM0MzpcXHRcXHRpZiAoeGNoZyhcXHUwMDI2aXVjdi1cXHUwMDNlcGF0aCwgTlVMTCkpIHtcXG4gMzQ0OlxcdFxcdFxcdGlmICh3aXRoX3VzZXJfZGF0YSkge1xcbiAzNDU6XFx0XFx0XFx0XFx0bG93X25tY3B5KHVzZXJfZGF0YSwgaXVjdi1cXHUwMDNlc3JjX25hbWUpO1xcbiAzNDY6XFx0XFx0XFx0XFx0aGlnaF9ubWNweSh1c2VyX2RhdGEsIGl1Y3YtXFx1MDAzZWRzdF9uYW1lKTtcXG4gMzQ3OlxcdFxcdFxcdFxcdEFTQ0VCQyh1c2VyX2RhdGEsIHNpemVvZih1c2VyX2RhdGEpKTtcXG4gMzQ4OlxcdFxcdFxcdFxcdHByX2l1Y3YtXFx1MDAzZXBhdGhfc2V2ZXIocGF0aCwgdXNlcl9kYXRhKTtcXG4gMzQ5OlxcdFxcdFxcdH0gZWxzZVxcbiAzNTA6XFx0XFx0XFx0XFx0cHJfaXVjdi1cXHUwMDNlcGF0aF9zZXZlcihwYXRoLCBOVUxMKTtcXG4gMzUxOlxcdFxcdFxcdGl1Y3ZfcGF0aF9mcmVlKHBhdGgpO1xcbiAzNTI6XFx0XFxuIDM1MzpcXHRcXHRcXHQvKlxcbiAzNTQ6XFx0XFx0XFx0ICogTWVzc2FnZSBub3RpZmljYXRpb25zIHF1ZXVlZCBvbiBtZXNzYWdlX3Egc3RpbGwgcmVmZXJlbmNlXFxuIDM1NTpcXHRcXHRcXHQgKiB0aGUgbm93IGZyZWVkIHBhdGg7IGRyb3AgdGhlbSwgb3RoZXJ3aXNlIGEgbGF0ZXIgcmVjdm1zZygpXFxuIDM1NjpcXHRcXHRcXHQgKiB3b3VsZCBwYXNzIHRoZSBmcmVlZCBpdWN2X3BhdGggdG8gbWVzc2FnZV9yZWNlaXZlKCkgdmlhXFxuIDM1NzpcXHRcXHRcXHQgKiBpdWN2X3Byb2Nlc3NfbWVzc2FnZV9xKCkuXFxuIDM1ODpcXHRcXHRcXHQgKi9cXG4gMzU5OlxcdFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2aXVjdi1cXHUwMDNlbWVzc2FnZV9xLmxvY2spO1xcbiAzNjA6XFx0XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG4sIFxcdTAwMjZpdWN2LVxcdTAwM2VtZXNzYWdlX3EubGlzdCwgbGlzdCkge1xcbiAzNjE6XFx0XFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNnAtXFx1MDAzZWxpc3QpO1xcbiAzNjI6XFx0XFx0XFx0XFx0a2ZyZWUocCk7XFxuIDM2MzpcXHRcXHRcXHR9XFxuIDM2NDpcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aXVjdi1cXHUwMDNlbWVzc2FnZV9xLmxvY2spO1xcbiAzNjU6XFx0XFx0fVxcbiAzNjY6XFx0fVxcbiAzNjc6XFx0XFxuIDM2ODpcXHQvKiBTZW5kIGNvbnRyb2xsaW5nIGZsYWdzIHRocm91Z2ggYW4gSVVDViBzb2NrZXQgZm9yIEhJUEVSIHRyYW5zcG9ydCAqL1xcbiAzNjk6XFx0c3RhdGljIGludCBpdWN2X3NlbmRfY3RybChzdHJ1Y3Qgc29jayAqc2ssIHU4IGZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNTowOTo0Ni44NDM4OTc4MzdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDExNDEzNzQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBZGRyZXNzaW5nIGEgUG90ZW50aWFsIE51bGwgUG9pbnRlciBEZXJlZmVyZW5jZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgc2VlIGEgcG90ZW50aWFsIHByb2JsZW0uIElmIGBwcl9pdWN2YCBpcyBOVUxMLCB0aGVuIHRoZSBjb2RlIGlzIGdvaW5nIHRvIHRyeSBhbmQgZGVyZWZlcmVuY2UgYHByX2l1Y3YtXHUwMDNlcGF0aF9zZXZlcmAsIHdoaWNoIGlzIGEgY2xhc3NpYyByZWNpcGUgZm9yIGEgc2VnbWVudGF0aW9uIGZhdWx0LiBUaGF0J3MgYSBodWdlIHJlZCBmbGFnIVxuXG5Ib2xkIG9uLCBJIG5lZWQgdG8gdGhpbmsgdGhpcyB0aHJvdWdoIG1vcmUgY2FyZWZ1bGx5LiBJZiBgcHJfaXVjdmAgKmlzKiBOVUxMLCBjb3VsZCBgaXVjdi1cdTAwM2VwYXRoYCBzb21laG93IHN0aWxsIGJlIG5vbi1OVUxMPyBUaGF0J3MgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGhlcmUuIEkgbmVlZCB0byB0cmFjZSBiYWNrIHdoZXJlIGBpdWN2LVx1MDAzZXBhdGhgIGdldHMgc2V0LlxuXG5BbHJpZ2h0LCBhIHF1aWNrIHNjYW4gcmV2ZWFscyB0aGF0IGBpdWN2LVx1MDAzZXBhdGhgIGdldHMgc2V0IGluIGBhZml1Y3ZfcGF0aF9jb25uZWN0YCBhbmQgYWxzbyBpbiBgaXVjdl9jYWxsYmFja19jb25ucmVxYC4gT2theSwgZ29vZC4gTm93LCBJIHJlbWVtYmVyIHRoYXQgYGFmaXVjdl9wYXRoX2Nvbm5lY3RgIGdldHMgY2FsbGVkIGZyb20gYGl1Y3Zfc29ja19jb25uZWN0YC4gU28sIHRoZSBudWxsIGNoZWNrIG9mIGBwcl9pdWN2YCBuZWVkcyB0byBiZSB3YXRlcnRpZ2h0LCBhbmQgYWNjb3VudCBmb3IgdGhlc2UgcG9zc2libGUgY29kZSBwYXRocy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBgcHJfaXVjdmAgcG9pbnRlciBpcyBub3QgbnVsbCBiZWZvcmUgaXQgaXMgZGVyZWZlcmVuY2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjgwNSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE1OjA5OjUwLjk1ODAzOTc3MloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTI3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2l1Y3YvYWZfaXVjdi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDczMyxcbiAgXCJMaW5lQ291bnRcIjogNTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDczMzpcXHRzdGF0aWMgaW50IGl1Y3Zfc29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxcbiA3MzQ6XFx0XFx0XFx0XFx0ICAgICBpbnQgYWxlbiwgaW50IGZsYWdzKVxcbiA3MzU6XFx0e1xcbiA3MzY6XFx0XFx0REVDTEFSRV9TT0NLQUREUihzdHJ1Y3Qgc29ja2FkZHJfaXVjdiAqLCBzYSwgYWRkcik7XFxuIDczNzpcXHRcXHRzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLVxcdTAwM2VzaztcXG4gNzM4OlxcdFxcdHN0cnVjdCBpdWN2X3NvY2sgKml1Y3YgPSBpdWN2X3NrKHNrKTtcXG4gNzM5OlxcdFxcdGludCBlcnI7XFxuIDc0MDpcXHRcXG4gNzQxOlxcdFxcdGlmIChhbGVuIFxcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pdWN2KSB8fCBhZGRyLVxcdTAwM2VzYV9mYW1pbHkgIT0gQUZfSVVDVilcXG4gNzQyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA3NDM6XFx0XFxuIDc0NDpcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlICE9IElVQ1ZfT1BFTiBcXHUwMDI2XFx1MDAyNiBzay1cXHUwMDNlc2tfc3RhdGUgIT0gSVVDVl9CT1VORClcXG4gNzQ1OlxcdFxcdFxcdHJldHVybiAtRUJBREZEO1xcbiA3NDY6XFx0XFxuIDc0NzpcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IElVQ1ZfT1BFTiBcXHUwMDI2XFx1MDAyNlxcbiA3NDg6XFx0XFx0ICAgIGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSKVxcbiA3NDk6XFx0XFx0XFx0cmV0dXJuIC1FQkFERkQ7IC8qIGV4cGxpY2l0IGJpbmQgcmVxdWlyZWQgKi9cXG4gNzUwOlxcdFxcbiA3NTE6XFx0XFx0aWYgKHNrLVxcdTAwM2Vza190eXBlICE9IFNPQ0tfU1RSRUFNIFxcdTAwMjZcXHUwMDI2IHNrLVxcdTAwM2Vza190eXBlICE9IFNPQ0tfU0VRUEFDS0VUKVxcbiA3NTI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDc1MzpcXHRcXG4gNzU0OlxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gSVVDVl9PUEVOKSB7XFxuIDc1NTpcXHRcXHRcXHRlcnIgPSBpdWN2X3NvY2tfYXV0b2JpbmQoc2spO1xcbiA3NTY6XFx0XFx0XFx0aWYgKHVubGlrZWx5KGVycikpXFxuIDc1NzpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA3NTg6XFx0XFx0fVxcbiA3NTk6XFx0XFxuIDc2MDpcXHRcXHRsb2NrX3NvY2soc2spO1xcbiA3NjE6XFx0XFxuIDc2MjpcXHRcXHQvKiBTZXQgdGhlIGRlc3RpbmF0aW9uIGluZm9ybWF0aW9uICovXFxuIDc2MzpcXHRcXHRtZW1jcHkoaXVjdi1cXHUwMDNlZHN0X3VzZXJfaWQsIHNhLVxcdTAwM2VzaXVjdl91c2VyX2lkLCA4KTtcXG4gNzY0OlxcdFxcdG1lbWNweShpdWN2LVxcdTAwM2Vkc3RfbmFtZSwgc2EtXFx1MDAzZXNpdWN2X25hbWUsIDgpO1xcbiA3NjU6XFx0XFxuIDc2NjpcXHRcXHRpZiAoaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIpXFxuIDc2NzpcXHRcXHRcXHRlcnIgPSBpdWN2X3NlbmRfY3RybChzb2NrLVxcdTAwM2VzaywgQUZfSVVDVl9GTEFHX1NZTik7XFxuIDc2ODpcXHRcXHRlbHNlXFxuIDc2OTpcXHRcXHRcXHRlcnIgPSBhZml1Y3ZfcGF0aF9jb25uZWN0KHNvY2ssIGFkZHIpO1xcbiA3NzA6XFx0XFx0aWYgKGVycilcXG4gNzcxOlxcdFxcdFxcdGdvdG8gZG9uZTtcXG4gNzcyOlxcdFxcbiA3NzM6XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSAhPSBJVUNWX0NPTk5FQ1RFRClcXG4gNzc0OlxcdFxcdFxcdGVyciA9IGl1Y3Zfc29ja193YWl0KHNrLCBpdWN2X3NvY2tfaW5fc3RhdGUoc2ssIElVQ1ZfQ09OTkVDVEVELFxcbiA3NzU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIElVQ1ZfRElTQ09OTiksXFxuIDc3NjpcXHRcXHRcXHRcXHRcXHQgICAgIHNvY2tfc25kdGltZW8oc2ssIGZsYWdzIFxcdTAwMjYgT19OT05CTE9DSykpO1xcbiA3Nzc6XFx0XFxuIDc3ODpcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IElVQ1ZfRElTQ09OTiB8fCBzay1cXHUwMDNlc2tfc3RhdGUgPT0gSVVDVl9DTE9TRUQpXFxuIDc3OTpcXHRcXHRcXHRlcnIgPSAtRUNPTk5SRUZVU0VEO1xcbiA3ODA6XFx0XFxuIDc4MTpcXHRcXHRpZiAoZXJyIFxcdTAwMjZcXHUwMDI2IGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1YpXFxuIDc4MjpcXHRcXHRcXHRpdWN2X3NldmVyX3BhdGgoc2ssIDApO1xcbiA3ODM6XFx0XFxuIDc4NDpcXHRkb25lOlxcbiA3ODU6XFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4gNzg2OlxcdFxcdHJldHVybiBlcnI7XFxuIDc4NzpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE1OjA5OjUwLjk1ODIzNDg0MloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjczNjA4MDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCBjb2RlIHNuaXBwZXQsIGRlbGl2ZXJlZCBhcyBpZiBpdCdzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGVjb2RpbmcgdGhlIElVQ1YgVHJhbnNwb3J0IExvZ2ljKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgc2VjdGlvbiwgYW5kIG15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYGl1Y3YtXHUwMDNldHJhbnNwb3J0YCB2YXJpYWJsZS4gSSBzZWUgdGhhdCBpZiB0aGlzIHBhcnRpY3VsYXIgdmFsdWUgaXMgZXF1YWwgdG8gYEFGX0lVQ1ZfVFJBTlNfSVVDVmAsIGl0IHRyaWdnZXJzIGEgY2FsbCB0byBgYWZpdWN2X3BhdGhfY29ubmVjdGAgKmFuZCogYGl1Y3Zfc2V2ZXJfcGF0aGAuIFRoYXQncyBpbnRlcmVzdGluZywgdGhlcmUgaXMgY29ubmVjdGlvbiwgYW5kIHRoZW4gc2V2ZXJpbmcuIENsZWFybHksIHRoaXMgaXMgdGllZCB0byB0aGUgSVVDViB0cmFuc3BvcnQgcGF0aC5cblxuVGhlIGNydWNpYWwgcXVlc3Rpb24gYmVjb21lczogKldoZW4qIGlzIGBpdWN2LVx1MDAzZXRyYW5zcG9ydGAgYWN0dWFsbHkgc2V0IHRvIGBBRl9JVUNWX1RSQU5TX0lVQ1ZgPyBXaGF0IGFyZSB0aGUgY29uZGl0aW9ucyB0aGF0IGxlYWQgdG8gdGhpcyBzcGVjaWZpYyB0cmFuc3BvcnQgbWV0aG9kIGJlaW5nIHNlbGVjdGVkPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcHJlY2VkaW5nIGxvZ2ljLCB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZSBgaXVjdmAgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIGFuZCBoYW5kbGluZywgdG8gc2VlIHdoYXQgZGljdGF0ZXMgdGhpcyBjaG9pY2UuIFRoaXMgaXMgdGhlIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbiB0aGF0IHVubG9ja3MgaG93IHRoaXMgcGFydGljdWxhciBjb25uZWN0aW9uIGN5Y2xlIG9wZXJhdGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDE1NiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTU6MDk6NTYuNjMxODQ2NDkyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODMzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDY2LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDY2OlxcdHN0YXRpYyBzdHJ1Y3Qgc29jayAqaXVjdl9zb2NrX2FsbG9jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90bywgZ2ZwX3QgcHJpbywgaW50IGtlcm4pXFxuIDQ2NzpcXHR7XFxuIDQ2ODpcXHRcXHRzdHJ1Y3Qgc29jayAqc2s7XFxuIDQ2OTpcXHRcXHRzdHJ1Y3QgaXVjdl9zb2NrICppdWN2O1xcbiA0NzA6XFx0XFxuIDQ3MTpcXHRcXHRzayA9IHNrX2FsbG9jKFxcdTAwMjZpbml0X25ldCwgUEZfSVVDViwgcHJpbywgXFx1MDAyNml1Y3ZfcHJvdG8sIGtlcm4pO1xcbiA0NzI6XFx0XFx0aWYgKCFzaylcXG4gNDczOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA0NzQ6XFx0XFx0aXVjdiA9IGl1Y3Zfc2soc2spO1xcbiA0NzU6XFx0XFxuIDQ3NjpcXHRcXHRzb2NrX2luaXRfZGF0YShzb2NrLCBzayk7XFxuIDQ3NzpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2aXVjdi1cXHUwMDNlYWNjZXB0X3EpO1xcbiA0Nzg6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNml1Y3YtXFx1MDAzZWFjY2VwdF9xX2xvY2spO1xcbiA0Nzk6XFx0XFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2aXVjdi1cXHUwMDNlc2VuZF9za2JfcSk7XFxuIDQ4MDpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2aXVjdi1cXHUwMDNlbWVzc2FnZV9xLmxpc3QpO1xcbiA0ODE6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNml1Y3YtXFx1MDAzZW1lc3NhZ2VfcS5sb2NrKTtcXG4gNDgyOlxcdFxcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNml1Y3YtXFx1MDAzZWJhY2tsb2dfc2tiX3EpO1xcbiA0ODM6XFx0XFx0aXVjdi1cXHUwMDNlc2VuZF90YWcgPSAwO1xcbiA0ODQ6XFx0XFx0YXRvbWljX3NldChcXHUwMDI2aXVjdi1cXHUwMDNlcGVuZGluZ3MsIDApO1xcbiA0ODU6XFx0XFx0aXVjdi1cXHUwMDNlZmxhZ3MgPSAwO1xcbiA0ODY6XFx0XFx0aXVjdi1cXHUwMDNlbXNnbGltaXQgPSAwO1xcbiA0ODc6XFx0XFx0YXRvbWljX3NldChcXHUwMDI2aXVjdi1cXHUwMDNlc2tic19pbl94bWl0LCAwKTtcXG4gNDg4OlxcdFxcdGF0b21pY19zZXQoXFx1MDAyNml1Y3YtXFx1MDAzZW1zZ19zZW50LCAwKTtcXG4gNDg5OlxcdFxcdGF0b21pY19zZXQoXFx1MDAyNml1Y3YtXFx1MDAzZW1zZ19yZWN2LCAwKTtcXG4gNDkwOlxcdFxcdGl1Y3YtXFx1MDAzZXBhdGggPSBOVUxMO1xcbiA0OTE6XFx0XFx0aXVjdi1cXHUwMDNlc2tfdHhub3RpZnkgPSBhZml1Y3ZfaHNfY2FsbGJhY2tfdHhub3RpZnk7XFxuIDQ5MjpcXHRcXHRtZW1zZXQoXFx1MDAyNml1Y3YtXFx1MDAzZWluaXQsIDAsIHNpemVvZihpdWN2LVxcdTAwM2Vpbml0KSk7XFxuIDQ5MzpcXHRcXHRpZiAocHJfaXVjdilcXG4gNDk0OlxcdFxcdFxcdGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcXG4gNDk1OlxcdFxcdGVsc2VcXG4gNDk2OlxcdFxcdFxcdGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSElQRVI7XFxuIDQ5NzpcXHRcXG4gNDk4OlxcdFxcdHNrLVxcdTAwM2Vza19kZXN0cnVjdCA9IGl1Y3Zfc29ja19kZXN0cnVjdDtcXG4gNDk5OlxcdFxcdHNrLVxcdTAwM2Vza19zbmR0aW1lbyA9IElVQ1ZfQ09OTl9USU1FT1VUO1xcbiA1MDA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE1OjA5OjU2LjYzMjA0NzEwMVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjMzOTE1OTQxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSVVDViBUcmFuc3BvcnQgYW5kIFBhdGggTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgaXQncyBiZWNvbWluZyBjbGVhciBob3cgdGhlIGBpdWN2LVx1MDAzZXRyYW5zcG9ydGAgZmllbGQgYmVoYXZlcyBpbiByZWxhdGlvbiB0byBgcHJfaXVjdmAuIFJpZ2h0LCBzbyBpZiBgcHJfaXVjdmAgKmlzbid0KiBzZXQsIHRoZW4gYGl1Y3YtXHUwMDNldHJhbnNwb3J0YCBkZWZhdWx0cyB0byBgQUZfSVVDVl9UUkFOU19ISVBFUmAsIGFuZCBub3QgYEFGX0lVQ1ZfVFJBTlNfSVVDVmAuIFRoYXQncyB0aGUgY3J1eCBvZiBpdC4gV2hlbiBpdOKAmXMgYEhJUEVSYCwgYGFmaXVjdl9wYXRoX2Nvbm5lY3RgIGlzbuKAmXQgZXZlbiBpbnZva2VkLiBXaGljaCBleHBsYWlucyB3aHkgYGl1Y3YtXHUwMDNlcGF0aGAgcmVtYWlucyBOVUxMIGluIHRoYXQgc2NlbmFyaW8uIE1ha2VzIHNlbnNlLlxuXG5BbmQgYmVjYXVzZSBgaXVjdi1cdTAwM2VwYXRoYCBpcyBOVUxMIGluIHRoaXMgSElQRVIgY2FzZSwgYGl1Y3Zfc2V2ZXJfcGF0aGAgZWZmZWN0aXZlbHkgZG9lcyBub3RoaW5nIOKAkyBgeGNoZyhcdTAwMjZpdWN2LVx1MDAzZXBhdGgsIE5VTEwpYCBqdXN0IHJldHVybnMgTlVMTC4gR29vZCwgc28gd2UncmUgYXZvaWRpbmcgYW55IHBvdGVudGlhbCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb24gYHByX2l1Y3ZgLCBhcyBsb25nIGFzIGl0J3MgbnVsbCBpbiB0aGlzIGNhc2UuXG5cbkhtbSwgYnV0IGhlcmUncyBhIHRob3VnaHQuLi4gQ2FuIHdlIHZlcmlmeSB0aGUgYmVoYXZpb3Igb2YgYGl1Y3Zfc2V2ZXJfcGF0aGAgZGlyZWN0bHkgd2l0aCBgQUZfSVVDVl9UUkFOU19ISVBFUmA/IExldCBtZSBzZWUuIFNpbmNlIHRoZSBgaXVjdi1cdTAwM2VwYXRoYCBwb2ludGVyIGlzIG5ldmVyIGFsbG9jYXRlZCB3aXRoIGBISVBFUmAsIGBpdWN2X3NldmVyX3BhdGhgICpzaG91bGQqIGJlIGEgbm8tb3AuIEJ1dCB3YWl0LCBpcyB0aGVyZSBhbnkgc2l0dWF0aW9uIHdoZXJlIGBpdWN2LVx1MDAzZXBhdGhgICppcyogYWxsb2NhdGVkIGZvciBgQUZfSVVDVl9UUkFOU19ISVBFUmA/IEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayBpZiBpdCdzIHVzZWQgYXQgYWxsIHdpdGggSElQRVIsIGp1c3QgdG8gYmUgc3VyZS4gSXQgd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLCB0byBlbnN1cmUgd2UgYXJlIGNvdmVyaW5nIGFsbCBjYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxNzksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNToxMDoxMi45NzEyMDg3NTNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNTUxNTMxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpdWN2LVxcdTAwM2VwYXRoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmM9MTY2PXN0YXRpYyBpbmxpbmUgaW50IGl1Y3ZfYmVsb3dfbXNnbGltKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNzItXFx0aWYgKGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1YpXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE3MzpcXHRcXHRyZXR1cm4gKGF0b21pY19yZWFkKFxcdTAwMjZpdWN2LVxcdTAwM2Vza2JzX2luX3htaXQpIFxcdTAwM2MgaXVjdi1cXHUwMDNlcGF0aC1cXHUwMDNlbXNnbGltKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTc0LVxcdGVsc2VcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0zMzU9c3RhdGljIHZvaWQgaXVjdl9zZXZlcl9wYXRoKHN0cnVjdCBzb2NrICpzaywgaW50IHdpdGhfdXNlcl9kYXRhKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTMzOC1cXHRzdHJ1Y3QgaXVjdl9zb2NrICppdWN2ID0gaXVjdl9zayhzayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjMzOTpcXHRzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoID0gaXVjdi1cXHUwMDNlcGF0aDtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzQwLVxcdHN0cnVjdCBzb2NrX21zZ19xICpwLCAqbjtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNDItXFx0LyogV2hvZXZlciByZXNldHMgdGhlIHBhdGggcG9pbnRlciwgbXVzdCBzZXZlciBhbmQgZnJlZSBpdC4gKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MzQzOlxcdGlmICh4Y2hnKFxcdTAwMjZpdWN2LVxcdTAwM2VwYXRoLCBOVUxMKSkge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNDQtXFx0XFx0aWYgKHdpdGhfdXNlcl9kYXRhKSB7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzQ3LVxcdFxcdFxcdEFTQ0VCQyh1c2VyX2RhdGEsIHNpemVvZih1c2VyX2RhdGEpKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MzQ4OlxcdFxcdFxcdHByX2l1Y3YtXFx1MDAzZXBhdGhfc2V2ZXIocGF0aCwgdXNlcl9kYXRhKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzQ5LVxcdFxcdH0gZWxzZVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzozNTA6XFx0XFx0XFx0cHJfaXVjdi1cXHUwMDNlcGF0aF9zZXZlcihwYXRoLCBOVUxMKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzUxLVxcdFxcdGl1Y3ZfcGF0aF9mcmVlKHBhdGgpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTQ2Nj1zdGF0aWMgc3RydWN0IHNvY2sgKml1Y3Zfc29ja19hbGxvYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG8sIGdmcF90IHByaW8sIGludCBrZXJuKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ4OS1cXHRhdG9taWNfc2V0KFxcdTAwMjZpdWN2LVxcdTAwM2Vtc2dfcmVjdiwgMCk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjQ5MDpcXHRpdWN2LVxcdTAwM2VwYXRoID0gTlVMTDtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDkxLVxcdGl1Y3YtXFx1MDAzZXNrX3R4bm90aWZ5ID0gYWZpdWN2X2hzX2NhbGxiYWNrX3R4bm90aWZ5O1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTU4Mj1zdGF0aWMgaW50IGl1Y3Zfc29ja19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTYwOS1cXHR9XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjYxMDpcXHRpZiAoaXVjdi1cXHUwMDNlcGF0aClcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjExLVxcdFxcdGdvdG8gZG9uZV91bmxvY2s7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9Njg3PXN0YXRpYyBpbnQgYWZpdWN2X3BhdGhfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy02OTktXFx0LyogQ3JlYXRlIHBhdGguICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjcwMDpcXHRpdWN2LVxcdTAwM2VwYXRoID0gaXVjdl9wYXRoX2FsbG9jKGl1Y3YtXFx1MDAzZW1zZ2xpbWl0LFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03MDEtXFx0XFx0XFx0XFx0ICAgICBJVUNWX0lQUk1EQVRBLCBHRlBfS0VSTkVMKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6NzAyOlxcdGlmICghaXVjdi1cXHUwMDNlcGF0aCkge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy03MDMtXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03MDUtXFx0fVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo3MDY6XFx0ZXJyID0gcHJfaXVjdi1cXHUwMDNlcGF0aF9jb25uZWN0KGl1Y3YtXFx1MDAzZXBhdGgsIFxcdTAwMjZhZl9pdWN2X2hhbmRsZXIsXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTcwNy1cXHRcXHRcXHRcXHQgICAgc2EtXFx1MDAzZXNpdWN2X3VzZXJfaWQsIE5VTEwsIHVzZXJfZGF0YSxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03MDktXFx0aWYgKGVycikge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzo3MTA6XFx0XFx0aXVjdl9wYXRoX2ZyZWUoaXVjdi1cXHUwMDNlcGF0aCk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjcxMTpcXHRcXHRpdWN2LVxcdTAwM2VwYXRoID0gTlVMTDtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzEyLVxcdFxcdHN3aXRjaCAoZXJyKSB7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9OTE2PXN0YXRpYyBpbnQgaXVjdl9zb2NrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNTQtXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjEwNTU6XFx0XFx0aWYgKCgoaXVjdi1cXHUwMDNlcGF0aC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJVUNWX0lQUk1EQVRBKSBcXHUwMDI2IGl1Y3YtXFx1MDAzZWZsYWdzKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDU2LVxcdFxcdCAgICBza2ItXFx1MDAzZWxlbiBcXHUwMDNjPSA3KSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjEwNTc6XFx0XFx0XFx0ZXJyID0gaXVjdl9zZW5kX2lwcm0oaXVjdi1cXHUwMDNlcGF0aCwgXFx1MDAyNnR4bXNnLCBza2IpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDU4LVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNjktXFx0XFx0XFx0aWYgKGVyciA9PSAweDE1KSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjEwNzA6XFx0XFx0XFx0XFx0cHJfaXVjdi1cXHUwMDNlcGF0aF9zZXZlcihpdWN2LVxcdTAwM2VwYXRoLCBOVUxMKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA3MS1cXHRcXHRcXHRcXHRhdG9taWNfZGVjKFxcdTAwMjZpdWN2LVxcdTAwM2Vza2JzX2luX3htaXQpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwODgtXFx0XFx0XFx0fVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMDg5OlxcdFxcdFxcdGVyciA9IHByX2l1Y3YtXFx1MDAzZW1lc3NhZ2Vfc2VuZChpdWN2LVxcdTAwM2VwYXRoLCBcXHUwMDI2dHhtc2csXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwOTAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIElVQ1ZfSVBCVUZMU1QsIDAsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA5Mi1cXHRcXHR9IGVsc2UgeyAvKiBub24tSVBSTSBMaW5lYXIgc2tiICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjEwOTM6XFx0XFx0XFx0ZXJyID0gcHJfaXVjdi1cXHUwMDNlbWVzc2FnZV9zZW5kKGl1Y3YtXFx1MDAzZXBhdGgsIFxcdTAwMjZ0eG1zZyxcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA5NC1cXHRcXHRcXHRcXHRcXHQwLCAwLCAodm9pZCAqKXNrYi1cXHUwMDNlZGF0YSwgc2tiLVxcdTAwM2VsZW4pO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTE0MTg9c3RhdGljIGludCBpdWN2X3NvY2tfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGhvdylcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDQ2LVxcdFxcdFxcdHR4bXNnLnRhZyA9IDA7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE0NDc6XFx0XFx0XFx0ZXJyID0gcHJfaXVjdi1cXHUwMDNlbWVzc2FnZV9zZW5kKGl1Y3YtXFx1MDAzZXBhdGgsIFxcdTAwMjZ0eG1zZyxcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ0OC1cXHRcXHRcXHRcXHRJVUNWX0lQUk1EQVRBLCAwLCAodm9pZCAqKSBpcHJtX3NodXRkb3duLCA4KTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDY4LVxcdFxcdGlmICgoaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVikgXFx1MDAyNlxcdTAwMjZcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ2OTpcXHRcXHQgICAgaXVjdi1cXHUwMDNlcGF0aCkge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNDcwOlxcdFxcdFxcdGVyciA9IHByX2l1Y3YtXFx1MDAzZXBhdGhfcXVpZXNjZShpdWN2LVxcdTAwM2VwYXRoLCBOVUxMKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ3MS1cXHRcXHRcXHRpZiAoZXJyKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTE1NTI9c3RhdGljIGludCBpdWN2X3NvY2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE1NzYtXFx0Y2FzZSBTT19NU0dMSU1JVDpcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTU3NzpcXHRcXHR2YWwgPSAoaXVjdi1cXHUwMDNlcGF0aCAhPSBOVUxMKSA/IGl1Y3YtXFx1MDAzZXBhdGgtXFx1MDAzZW1zZ2xpbVxcdC8qIGNvbm5lY3RlZCAqL1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNTc4LVxcdFxcdFxcdFxcdFxcdCAgIDogaXVjdi1cXHUwMDNlbXNnbGltaXQ7XFx0LyogZGVmYXVsdCAqL1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTE2MDc9c3RhdGljIGludCBpdWN2X2NhbGxiYWNrX2Nvbm5yZXEoc3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjQ0LVxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgIT0gSVVDVl9MSVNURU4pIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTY0NTpcXHRcXHRlcnIgPSBwcl9pdWN2LVxcdTAwM2VwYXRoX3NldmVyKHBhdGgsIHVzZXJfZGF0YSk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NDYtXFx0XFx0aXVjdl9wYXRoX2ZyZWUocGF0aCk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY1MS1cXHRpZiAoc2tfYWNjZXB0cV9pc19mdWxsKHNrKSkge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjUyOlxcdFxcdGVyciA9IHByX2l1Y3YtXFx1MDAzZXBhdGhfc2V2ZXIocGF0aCwgdXNlcl9kYXRhKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY1My1cXHRcXHRpdWN2X3BhdGhfZnJlZShwYXRoKTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjU5LVxcdGlmICghbnNrKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE2NjA6XFx0XFx0ZXJyID0gcHJfaXVjdi1cXHUwMDNlcGF0aF9zZXZlcihwYXRoLCB1c2VyX2RhdGEpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjYxLVxcdFxcdGl1Y3ZfcGF0aF9mcmVlKHBhdGgpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NzUtXFx0bWVtY3B5KG5pdWN2LVxcdTAwM2VzcmNfdXNlcl9pZCwgaXVjdi1cXHUwMDNlc3JjX3VzZXJfaWQsIDgpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjc2OlxcdG5pdWN2LVxcdTAwM2VwYXRoID0gcGF0aDtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY3Ny1cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjg1LVxcdHBhdGgtXFx1MDAzZW1zZ2xpbSA9IGl1Y3YtXFx1MDAzZW1zZ2xpbWl0O1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjg2OlxcdGVyciA9IHByX2l1Y3YtXFx1MDAzZXBhdGhfYWNjZXB0KHBhdGgsIFxcdTAwMjZhZl9pdWN2X2hhbmRsZXIsIG51c2VyX2RhdGEsIG5zayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2ODctXFx0aWYgKGVycikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNToxMDoxMy4yNzY3MjkxODJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA2OTE2ODQ0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElVQ1YgUGF0aCBMb2dpYyoqXG5cbk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYGl1Y3YtXHUwMDNlcGF0aGAgaXMgKm9ubHkqIHVzZWQgd2hlbiB0aGUgdHJhbnNwb3J0IHR5cGUgaXMgYEFGX0lVQ1ZfVFJBTlNfSVVDVmAuIFRoaXMgaXMgdGhlIGNydXggb2YgdGhlIGlzc3VlLiBJZiB3ZSdyZSAqbm90KiBvbiB6L1ZNLCB0aGVuIHRoZSBwb2ludGVyIGBwcl9pdWN2YCBpcyBudWxsLCB0aGUgYGl1Y3YtXHUwMDNldHJhbnNwb3J0YCBpcyBzZXQgdG8gYEFGX0lVQ1ZfVFJBTlNfSElQRVJgLCBhbmQgYGl1Y3YtXHUwMDNlcGF0aGAgbmV2ZXIgZ2V0cyBhbGxvY2F0ZWQgaW4gdGhlIGZpcnN0IHBsYWNlLlxuXG5XYWl0IGEgc2Vjb25k4oCmIGlmIGBpdWN2LVx1MDAzZXBhdGhgIGlzICpuZXZlciogYWxsb2NhdGVkIHdoZW4gdGhlIHRyYW5zcG9ydCBpcyBISVBFUiwgdGhlbiB0aGUgZnVuY3Rpb24gYGl1Y3Zfc2V2ZXJfcGF0aGAgd29u4oCZdCBhY3R1YWxseSBkbyBhbnl0aGluZyBiZWNhdXNlIHRoZSBgeGNoZyhcdTAwMjZpdWN2LVx1MDAzZXBhdGgsIE5VTEwpYCBjYWxsIHdpbGwgYWx3YXlzIGp1c3QgcmV0dXJuIGBOVUxMYC4gVGhlcmVmb3JlLCB0aGF0IG1vZGlmaWVkIGNvZGUgd2l0aGluIGBpdWN2X3NldmVyX3BhdGhgIHdpbGwgKm5ldmVyKiBnZXQgZXhlY3V0ZWQgdW5sZXNzIHRoZSBzeXN0ZW0gaXMgcnVubmluZyBvbiB6L1ZNLlxuXG5JcyBteSBsaW5lIG9mIHJlYXNvbmluZyBzb3VuZD8gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy5cblxuQWxyaWdodCwgbGV0J3MgZG91YmxlLWNoZWNrIGlmIGBpdWN2LVx1MDAzZXBhdGhgICpjYW4qIGJlIHNldCBmb3IgYEFGX0lVQ1ZfVFJBTlNfSElQRVJgLiBJ4oCZbGwgbG9vayBhdCBgbmV0L2l1Y3YvYWZfaXVjdi5jYC4gUmlnaHQsIGBhZml1Y3ZfcGF0aF9jb25uZWN0YCBpcyBvbmx5IGNhbGxlZCB3aGVuIGBpdWN2LVx1MDAzZXRyYW5zcG9ydGAgaXMgKm5vdCogYEFGX0lVQ1ZfVFJBTlNfSElQRVJgLiBTbyBpdCBzZWVtcyBoaWdobHkgdW5saWtlbHkuIE5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBpdWN2X3NlbmRfY3RybGAsIHNpbmNlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBISVBFUi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3MjIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTU6MTA6MjAuMzQ1OTAwNTA3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMTExMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzY4LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzY4OlxcdC8qIFNlbmQgY29udHJvbGxpbmcgZmxhZ3MgdGhyb3VnaCBhbiBJVUNWIHNvY2tldCBmb3IgSElQRVIgdHJhbnNwb3J0ICovXFxuIDM2OTpcXHRzdGF0aWMgaW50IGl1Y3Zfc2VuZF9jdHJsKHN0cnVjdCBzb2NrICpzaywgdTggZmxhZ3MpXFxuIDM3MDpcXHR7XFxuIDM3MTpcXHRcXHRzdHJ1Y3QgaXVjdl9zb2NrICppdWN2ID0gaXVjdl9zayhzayk7XFxuIDM3MjpcXHRcXHRpbnQgZXJyID0gMDtcXG4gMzczOlxcdFxcdGludCBibGVuO1xcbiAzNzQ6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gMzc1OlxcdFxcdHU4IHNodXRkb3duID0gMDtcXG4gMzc2OlxcdFxcbiAzNzc6XFx0XFx0YmxlbiA9IHNpemVvZihzdHJ1Y3QgYWZfaXVjdl90cmFuc19oZHIpICtcXG4gMzc4OlxcdFxcdCAgICAgICBMTF9SRVNFUlZFRF9TUEFDRShpdWN2LVxcdTAwM2Voc19kZXYpO1xcbiAzNzk6XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19zaHV0ZG93biBcXHUwMDI2IFNFTkRfU0hVVERPV04pIHtcXG4gMzgwOlxcdFxcdFxcdC8qIGNvbnRyb2xsaW5nIGZsYWdzIHNob3VsZCBiZSBzZW50IGFueXdheSAqL1xcbiAzODE6XFx0XFx0XFx0c2h1dGRvd24gPSBzay1cXHUwMDNlc2tfc2h1dGRvd247XFxuIDM4MjpcXHRcXHRcXHRzay1cXHUwMDNlc2tfc2h1dGRvd24gXFx1MDAyNj0gUkNWX1NIVVRET1dOO1xcbiAzODM6XFx0XFx0fVxcbiAzODQ6XFx0XFx0c2tiID0gc29ja19hbGxvY19zZW5kX3NrYihzaywgYmxlbiwgMSwgXFx1MDAyNmVycik7XFxuIDM4NTpcXHRcXHRpZiAoc2tiKSB7XFxuIDM4NjpcXHRcXHRcXHRza2JfcmVzZXJ2ZShza2IsIGJsZW4pO1xcbiAzODc6XFx0XFx0XFx0ZXJyID0gYWZpdWN2X2hzX3NlbmQoTlVMTCwgc2ssIHNrYiwgZmxhZ3MpO1xcbiAzODg6XFx0XFx0fVxcbiAzODk6XFx0XFx0aWYgKHNodXRkb3duKVxcbiAzOTA6XFx0XFx0XFx0c2stXFx1MDAzZXNrX3NodXRkb3duID0gc2h1dGRvd247XFxuIDM5MTpcXHRcXHRyZXR1cm4gZXJyO1xcbiAzOTI6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNToxMDoyMC4zNDYyMjQyMTdaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDExMzAyNjU2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBISVBFUiBJc3N1ZSoqXG5cbk9rYXksIHNvIEkgc2VlIGEgY2FsbCB0byBgYWZpdWN2X2hzX3NlbmRgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIEhJUEVSLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4gRmlyc3QsIEkgaGF2ZSBhIGh1bmNoLCBhIG5hZ2dpbmcgcXVlc3Rpb24sIHJlYWxseTogSXMgYGl1Y3YtXHUwMDNlcGF0aGAgYWN0dWFsbHkgYmVpbmcgc2V0IGNvcnJlY3RseSBpbiB0aGUgY29udGV4dCBvZiBISVBFUiBvcGVyYXRpb25zPyBUaGF0J3MgYSBjbGFzc2ljIGdvdGNoYS4gVGhlIHBhdGggaW5pdGlhbGl6YXRpb24gaXMgY3J1Y2lhbC4gSXTigJlzIHRoZSBvYnZpb3VzIGZpcnN0IHN0ZXAgb2YgdHJvdWJsZXNob290aW5nIHRoaXMuXG5cblRoZXJlZm9yZSwgSSdtIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBgYWZpdWN2X2hzX3NlbmRgIGZ1bmN0aW9uIGl0c2VsZiwgb3IgcGVyaGFwcyByZWxhdGVkIEhJUEVSIGZ1bmN0aW9ucy4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgYW5kIGhvdyBpdCBoYW5kbGVzIHRoZSBJVUNWIHBhdGggc3RydWN0dXJlcy4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBvciBub3QgdGhpcyBjcml0aWNhbCBmaWVsZCBpcyBiZWluZyBwcm9wZXJseSBwb3B1bGF0ZWQuIFRoYXTigJlzIHdoZXJlIEknbGwgYmVnaW4sIGxvb2tpbmcgZm9yIGluaXRpYWxpemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTc5NCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTU6MTA6MjQuNDU5MjU0NTIzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTE1MjYwOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXVjdi1cXHUwMDNlcGF0aCA9XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmM9NDY2PXN0YXRpYyBzdHJ1Y3Qgc29jayAqaXVjdl9zb2NrX2FsbG9jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90bywgZ2ZwX3QgcHJpbywgaW50IGtlcm4pXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDg5LVxcdGF0b21pY19zZXQoXFx1MDAyNml1Y3YtXFx1MDAzZW1zZ19yZWN2LCAwKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6NDkwOlxcdGl1Y3YtXFx1MDAzZXBhdGggPSBOVUxMO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OTEtXFx0aXVjdi1cXHUwMDNlc2tfdHhub3RpZnkgPSBhZml1Y3ZfaHNfY2FsbGJhY2tfdHhub3RpZnk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9Njg3PXN0YXRpYyBpbnQgYWZpdWN2X3BhdGhfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy02OTktXFx0LyogQ3JlYXRlIHBhdGguICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjcwMDpcXHRpdWN2LVxcdTAwM2VwYXRoID0gaXVjdl9wYXRoX2FsbG9jKGl1Y3YtXFx1MDAzZW1zZ2xpbWl0LFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03MDEtXFx0XFx0XFx0XFx0ICAgICBJVUNWX0lQUk1EQVRBLCBHRlBfS0VSTkVMKTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03MTAtXFx0XFx0aXVjdl9wYXRoX2ZyZWUoaXVjdi1cXHUwMDNlcGF0aCk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjcxMTpcXHRcXHRpdWN2LVxcdTAwM2VwYXRoID0gTlVMTDtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzEyLVxcdFxcdHN3aXRjaCAoZXJyKSB7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTYwNz1zdGF0aWMgaW50IGl1Y3ZfY2FsbGJhY2tfY29ubnJlcShzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NzUtXFx0bWVtY3B5KG5pdWN2LVxcdTAwM2VzcmNfdXNlcl9pZCwgaXVjdi1cXHUwMDNlc3JjX3VzZXJfaWQsIDgpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjc2OlxcdG5pdWN2LVxcdTAwM2VwYXRoID0gcGF0aDtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY3Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTU6MTA6MjQuNzcwNzg1NjUyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExOTkzODI4MTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSVVDViBQYXRoIElzc3VlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgYGl1Y3YtXHUwMDNlcGF0aGAgaXMgdGhlIGN1bHByaXQsIGJ1dCB3aGVyZSBpcyBpdCBzZXQ/IFRoZSBjb2RlIHNob3dzIGl0J3Mgb25seSBhc3NpZ25lZCB3aXRoaW4gYGFmaXVjdl9wYXRoX2Nvbm5lY3RgIGFuZCBgaXVjdl9jYWxsYmFja19jb25ucmVxYC4gQ3J1Y2lhbGx5LCBib3RoIGFyZSB0cmlnZ2VyZWQgb25seSB3aGVuIGRlYWxpbmcgd2l0aCBgQUZfSVVDVl9UUkFOU19JVUNWYCBjb25uZWN0aW9ucy4gTm93LCBgaXVjdl9jYWxsYmFja19jb25ucmVxYCBpcyByZWdpc3RlcmVkIGFzIGEgY2FsbGJhY2sgdmlhIGBwcl9pdWN2LVx1MDAzZWl1Y3ZfcmVnaXN0ZXJgLiBJZiBgcHJfaXVjdmAgaXMgYE5VTExgLCB0aGVuIGBpdWN2X2NhbGxiYWNrX2Nvbm5yZXFgIGlzICpuZXZlciogaW52b2tlZC4gQ29uc2VxdWVudGx5LCBgaXVjdi1cdTAwM2VwYXRoYCBjYW4gKm5ldmVyKiBiZSBub24tTlVMTCB3aGVuIGBwcl9pdWN2YCBpcyBgTlVMTGAuXG5cbkFoYSEgTm93LCB3aGVuIGlzIGBwcl9pdWN2YCBub24tTlVMTD8gVGhhdCBkZXBlbmRzIG9uIGBtYWNoaW5lX2lzX3ZtKClgLiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBvbmx5IGlmIHdlJ3JlIHJ1bm5pbmcgdW5kZXIgdGhlIHovVk0gaHlwZXJ2aXNvci4gQnV0IHdhaXQsIEkgbmVlZCB0byBjb25maXJtOiBkb2VzIFFFTVUgZW11bGF0ZSB6L1ZNPyBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgUUVNVSB0eXBpY2FsbHkgZW11bGF0ZXMgS1ZNIG9yIFRDRywgYW5kIHRoZSBtYWNoaW5lIHR5cGUgaXMgdXN1YWxseSByZXBvcnRlZCBhcyBgczM5MC1jY3ctdmlydGlvYC4gT2theSwgc28gUUVNVSBkb2VzICpub3QqIGVtdWxhdGUgei9WTS4gVGhlcmVmb3JlLCBgbWFjaGluZV9pc192bSgpYCB3aWxsIHJldHVybiBmYWxzZS4gSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoYXQgbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjI1LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE1OjEwOjM2Ljc2NDYxNTk4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDI2ODE5NjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hY2hpbmVfaXNfdm1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9ib290L3N0YXJ0dXAuYz03MT1zdGF0aWMgdm9pZCBkZXRlY3RfZGlhZzI4OCh2b2lkKVxcbi0tXFxuYXJjaC9zMzkwL2Jvb3Qvc3RhcnR1cC5jLTc2LVxcbmFyY2gvczM5MC9ib290L3N0YXJ0dXAuYzo3NzpcXHRhY3Rpb24gPSBtYWNoaW5lX2lzX3ZtKCkgPyAodW5zaWduZWQgbG9uZyljbWQgOiBMUEFSV0RUX1JFU1RBUlQ7XFxuYXJjaC9zMzkwL2Jvb3Qvc3RhcnR1cC5jOjc4OlxcdGxlbiA9IG1hY2hpbmVfaXNfdm0oKSA/IHNpemVvZihjbWQpIDogMDtcXG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmMtNzktXFx0aWYgKF9fZGlhZzI4OChXRFRfRlVOQ19JTklULCBNSU5fSU5URVJWQUwsIGFjdGlvbiwgbGVuKSlcXG4tLVxcbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYz0xMDg9aW50IF9faW5pdCBoeXBmc19kaWFnMGNfaW5pdCh2b2lkKVxcbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYy0xMDkte1xcbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYzoxMTA6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXFxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcwYy5jLTExMS1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYz0xMTk9dm9pZCBoeXBmc19kaWFnMGNfZXhpdCh2b2lkKVxcbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYy0xMjAte1xcbmFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYzoxMjE6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXFxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcwYy5jLTEyMi1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfdm0uYz0xMjM9aW50IGh5cGZzX3ZtX2luaXQodm9pZClcXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfdm0uYy0xMjQte1xcbmFyY2gvczM5MC9oeXBmcy9oeXBmc192bS5jOjEyNTpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfdm0uYy0xMjYtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfdm0uYz0xMzc9dm9pZCBoeXBmc192bV9leGl0KHZvaWQpXFxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmMtMTM4LXtcXG5hcmNoL3MzOTAvaHlwZnMvaHlwZnNfdm0uYzoxMzk6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXFxuYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmMtMTQwLVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gvczM5MC9oeXBmcy9pbm9kZS5jPTE0OD1zdGF0aWMgc3NpemVfdCBoeXBmc193cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbi0tXFxuYXJjaC9zMzkwL2h5cGZzL2lub2RlLmMtMTcwLVxcdGh5cGZzX2RlbGV0ZV90cmVlKCk7XFxuYXJjaC9zMzkwL2h5cGZzL2lub2RlLmM6MTcxOlxcdGlmIChtYWNoaW5lX2lzX3ZtKCkpXFxuYXJjaC9zMzkwL2h5cGZzL2lub2RlLmMtMTcyLVxcdFxcdHJjID0gaHlwZnNfdm1fY3JlYXRlX2ZpbGVzKHNiLVxcdTAwM2VzX3Jvb3QpO1xcbi0tXFxuYXJjaC9zMzkwL2h5cGZzL2lub2RlLmM9MjQwPXN0YXRpYyBpbnQgaHlwZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYy0yNTktXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuYXJjaC9zMzkwL2h5cGZzL2lub2RlLmM6MjYwOlxcdGlmIChtYWNoaW5lX2lzX3ZtKCkpXFxuYXJjaC9zMzkwL2h5cGZzL2lub2RlLmMtMjYxLVxcdFxcdHJjID0gaHlwZnNfdm1fY3JlYXRlX2ZpbGVzKHJvb3RfZGVudHJ5KTtcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcHBsZGF0YS5oPTQ1PXN0YXRpYyBpbmxpbmUgaW50IGFwcGxkYXRhX2FzbShzdHJ1Y3QgYXBwbGRhdGFfcGFyYW1ldGVyX2xpc3QgKnBhcm1fbGlzdCxcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcHBsZGF0YS5oLTUxLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcHBsZGF0YS5oOjUyOlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9hcHBsZGF0YS5oLTUzLVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg9OTc9REVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUobHBhciwgTUZFQVRVUkVfTFBBUilcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oLTk4LVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg6OTk6I2RlZmluZSBtYWNoaW5lX2lzX3ZtXFx0bWFjaGluZV9oYXNfdm1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oLTEwMC0jZGVmaW5lIG1hY2hpbmVfaXNfa3ZtXFx0bWFjaGluZV9oYXNfa3ZtXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2Vhcmx5LmM9MTEwPXN0YXRpYyBub2lubGluZSBfX2luaXQgdm9pZCBzZXR1cF9hcmNoX3N0cmluZyh2b2lkKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jLTEzMi1cXHRcXHRcXHQgIG1hY2hpbmVfaXNfbHBhcigpID8gXFxcIkxQQVJcXFwiIDpcXG5hcmNoL3MzOTAva2VybmVsL2Vhcmx5LmM6MTMzOlxcdFxcdFxcdCAgbWFjaGluZV9pc192bSgpID8gXFxcInovVk1cXFwiIDpcXG5hcmNoL3MzOTAva2VybmVsL2Vhcmx5LmMtMTM0LVxcdFxcdFxcdCAgbWFjaGluZV9pc19rdm0oKSA/IFxcXCJLVk1cXFwiIDogXFxcInVua25vd25cXFwiKTtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM9Njk0PXN0YXRpYyBpbnQgX19pbml0IGlwbF9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTcwNy1cXHRjYXNlIElQTF9UWVBFX0NDVzpcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jOjcwODpcXHRcXHRpZiAobWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtNzA5LVxcdFxcdFxcdHJjID0gc3lzZnNfY3JlYXRlX2dyb3VwKFxcdTAwMjZpcGxfa3NldC1cXHUwMDNla29iaixcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM9MTI4Nj1zdGF0aWMgdm9pZCByZWlwbF9ibG9ja19jY3dfZmlsbF9wYXJtcyhzdHJ1Y3QgaXBsX3BhcmFtZXRlcl9ibG9jayAqaXBiKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0xMjk3LVxcdC8qIFZNIFBBUk0gKi9cXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jOjEyOTg6XFx0aWYgKG1hY2hpbmVfaXNfdm0oKSBcXHUwMDI2XFx1MDAyNiBpcGxfYmxvY2tfdmFsaWQgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTEyOTktXFx0ICAgIChpcGxfYmxvY2suY2N3LnZtX2ZsYWdzIFxcdTAwMjYgSVBMX1BCMF9DQ1dfVk1fRkxBR19WUCkpIHtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM9MTMwOD1zdGF0aWMgaW50IF9faW5pdCByZWlwbF9uc3NfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0xMzExLVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM6MTMxMjpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTEzMTMtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jPTEzMjg9c3RhdGljIGludCBfX2luaXQgcmVpcGxfY2N3X2luaXQodm9pZClcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMTMzNi1cXHRyYyA9IHN5c2ZzX2NyZWF0ZV9ncm91cChcXHUwMDI2cmVpcGxfa3NldC1cXHUwMDNla29iaixcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jOjEzMzc6XFx0XFx0XFx0XFx0bWFjaGluZV9pc192bSgpID8gXFx1MDAyNnJlaXBsX2Njd19hdHRyX2dyb3VwX3ZtXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0xMzM4LVxcdFxcdFxcdFxcdFxcdFxcdDogXFx1MDAyNnJlaXBsX2Njd19hdHRyX2dyb3VwX2xwYXIpO1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYz0yMDE0PXN0YXRpYyBpbnQgdm1jbWRfaW5pdCh2b2lkKVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMjAxNS17XFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYzoyMDE2OlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMjAxNy1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jPTIyOTQ9c3RhdGljIGludCBfX2luaXQgdm1jbWRfb25fcmVib290X3NldHVwKGNoYXIgKnN0cilcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTIyOTUte1xcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM6MjI5NjpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTIyOTctXFx0XFx0cmV0dXJuIDE7XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jPTIzMDQ9c3RhdGljIGludCBfX2luaXQgdm1jbWRfb25fcGFuaWNfc2V0dXAoY2hhciAqc3RyKVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMjMwNS17XFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYzoyMzA2OlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmMtMjMwNy1cXHRcXHRyZXR1cm4gMTtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM9MjMxND1zdGF0aWMgaW50IF9faW5pdCB2bWNtZF9vbl9oYWx0X3NldHVwKGNoYXIgKnN0cilcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTIzMTUte1xcbmFyY2gvczM5MC9rZXJuZWwvaXBsLmM6MjMxNjpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSlcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jLTIzMTctXFx0XFx0cmV0dXJuIDE7XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jPTIzMjQ9c3RhdGljIGludCBfX2luaXQgdm1jbWRfb25fcG9mZl9zZXR1cChjaGFyICpzdHIpXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0yMzI1LXtcXG5hcmNoL3MzOTAva2VybmVsL2lwbC5jOjIzMjY6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXFxuYXJjaC9zMzkwL2tlcm5lbC9pcGwuYy0yMzI3LVxcdFxcdHJldHVybiAxO1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9tYWNoaW5lX2tleGVjLmM9MTgwPXN0YXRpYyBpbnQgbWFjaGluZV9rZXhlY19wcmVwYXJlX2tkdW1wKHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL21hY2hpbmVfa2V4ZWMuYy0xODItI2lmZGVmIENPTkZJR19DUkFTSF9EVU1QXFxuYXJjaC9zMzkwL2tlcm5lbC9tYWNoaW5lX2tleGVjLmM6MTgzOlxcdGlmIChtYWNoaW5lX2lzX3ZtKCkpXFxuYXJjaC9zMzkwL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMtMTg0LVxcdFxcdGRpYWcxMF9yYW5nZShQRk5fRE9XTihjcmFzaGtfcmVzLnN0YXJ0KSxcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYz0yNDY9c3RhdGljIHZvaWQgX19pbml0IGNvbm1vZGVfZGVmYXVsdCh2b2lkKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jLTI1MC1cXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmM6MjUxOlxcdGlmIChtYWNoaW5lX2lzX3ZtKCkpIHtcXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmMtMjUyLVxcdFxcdGNwY21kKFxcXCJRVUVSWSBDT05TT0xFXFxcIiwgcXVlcnlfYnVmZmVyLCAxMDI0LCBOVUxMKTtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYz01OTg9c3RhdGljIHZvaWQgX19pbml0IHJlc2VydmVfY3Jhc2hrZXJuZWwodm9pZClcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYy02NTAtXFxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jOjY1MTpcXHRpZiAoIW9sZG1lbV9kYXRhLnN0YXJ0IFxcdTAwMjZcXHUwMDI2IG1hY2hpbmVfaXNfdm0oKSlcXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmMtNjUyLVxcdFxcdGRpYWcxMF9yYW5nZShQRk5fRE9XTihjcmFzaF9iYXNlKSwgUEZOX0RPV04oY3Jhc2hfc2l6ZSkpO1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jPTg5Nz12b2lkIF9faW5pdCBzZXR1cF9hcmNoKGNoYXIgKipjbWRsaW5lX3ApXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3NldHVwLmMtOTAxLSAgICAgICAgICovXFxuYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jOjkwMjpcXHRpZiAobWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9rZXJuZWwvc2V0dXAuYy05MDMtXFx0XFx0cHJfaW5mbyhcXFwiTGludXggaXMgcnVubmluZyBhcyBhIHovVk0gXFxcIlxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9zeXNpbmZvLmM9Mzc5PXN0YXRpYyBfX2luaXQgaW50IGNyZWF0ZV9wcm9jX3NlcnZpY2VfbGV2ZWwodm9pZClcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvc3lzaW5mby5jLTM4MS1cXHRwcm9jX2NyZWF0ZV9zZXEoXFxcInNlcnZpY2VfbGV2ZWxzXFxcIiwgMCwgTlVMTCwgXFx1MDAyNnNlcnZpY2VfbGV2ZWxfc2VxX29wcyk7XFxuYXJjaC9zMzkwL2tlcm5lbC9zeXNpbmZvLmM6MzgyOlxcdGlmIChtYWNoaW5lX2lzX3ZtKCkpXFxuYXJjaC9zMzkwL2tlcm5lbC9zeXNpbmZvLmMtMzgzLVxcdFxcdHJlZ2lzdGVyX3NlcnZpY2VfbGV2ZWwoXFx1MDAyNnNlcnZpY2VfbGV2ZWxfdm0pO1xcbi0tXFxuYXJjaC9zMzkwL21tL2V4dG1lbS5jPTI1Mz1zZWdtZW50X3R5cGUgKGNoYXIqIG5hbWUpXFxuLS1cXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmMtMjU3LVxcbmFyY2gvczM5MC9tbS9leHRtZW0uYzoyNTg6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXFxuYXJjaC9zMzkwL21tL2V4dG1lbS5jLTI1OS1cXHRcXHRyZXR1cm4gLUVOT1NZUztcXG4tLVxcbmFyY2gvczM5MC9tbS9leHRtZW0uYz00MTU9c2VnbWVudF9sb2FkIChjaGFyICpuYW1lLCBpbnQgZG9fbm9uc2hhcmVkLCB1bnNpZ25lZCBsb25nICphZGRyLFxcbi0tXFxuYXJjaC9zMzkwL21tL2V4dG1lbS5jLTQyMC1cXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmM6NDIxOlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9tbS9leHRtZW0uYy00MjItXFx0XFx0cmV0dXJuIC1FTk9TWVM7XFxuLS1cXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmM9NTQ2PXNlZ21lbnRfdW5sb2FkKGNoYXIgKm5hbWUpXFxuLS1cXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmMtNTQ5LVxcbmFyY2gvczM5MC9tbS9leHRtZW0uYzo1NTA6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXFxuYXJjaC9zMzkwL21tL2V4dG1lbS5jLTU1MS1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmM9NTgyPXNlZ21lbnRfc2F2ZShjaGFyICpuYW1lKVxcbi0tXFxuYXJjaC9zMzkwL21tL2V4dG1lbS5jLTU4OC1cXG5hcmNoL3MzOTAvbW0vZXh0bWVtLmM6NTg5OlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmFyY2gvczM5MC9tbS9leHRtZW0uYy01OTAtXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYz0zMzM5PWludCBkYXNkX2RldmljZV9pc19ybyhzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSlcXG4tLVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMtMzM0NC1cXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jOjMzNDU6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYy0zMzQ2LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGV2bWFwLmM9MjI0PXN0YXRpYyBpbnQgX19pbml0IGRhc2RfcGFyc2Vfa2V5d29yZChjaGFyICprZXl3b3JkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGV2bWFwLmMtMjM4LVxcdGlmIChzdHJuY21wKFxcXCJub3BhdlxcXCIsIGtleXdvcmQsIGxlbmd0aCkgPT0gMCkge1xcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jOjIzOTpcXHRcXHRpZiAobWFjaGluZV9pc192bSgpKVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jLTI0MC1cXHRcXHRcXHRwcl9pbmZvKFxcXCInbm9wYXYnIGlzIG5vdCBzdXBwb3J0ZWQgb24gei9WTVxcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmM9NjU2PWRhc2RfZGlhZ19pbml0KHZvaWQpXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jLTY1Ny17XFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jOjY1ODpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSkge1xcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYy02NTktXFx0XFx0cHJfaW5mbyhcXFwiRGlzY2lwbGluZSAlcyBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IHovVk1cXFxcblxcXCIsXFxuLS1cXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmM9MTk0Nz1zdGF0aWMgaW50IGRhc2RfZWNrZF92YWxpZGF0ZV9zZXJ2ZXIoc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UsXFxuLS1cXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMtMTk1NS1cXHRcXHRyZXR1cm4gMDtcXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmM6MTk1NjpcXHRpZiAoZGFzZF9ub3BhdiB8fCBtYWNoaW5lX2lzX3ZtKCkpXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jLTE5NTctXFx0XFx0ZW5hYmxlX3BhdiA9IDA7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci9jb24zMjE1LmM9ODk5PXN0YXRpYyBpbnQgX19pbml0IGNvbjMyMTVfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jLTkxMC1cXHQvKiBTZXQgdGhlIGNvbnNvbGUgbW9kZSBmb3IgVk0gKi9cXG5kcml2ZXJzL3MzOTAvY2hhci9jb24zMjE1LmM6OTExOlxcdGlmIChtYWNoaW5lX2lzX3ZtKCkpIHtcXG5kcml2ZXJzL3MzOTAvY2hhci9jb24zMjE1LmMtOTEyLVxcdFxcdGNwY21kKFxcXCJURVJNIENPTk1PREUgMzIxNVxcXCIsIE5VTEwsIDAsIE5VTEwpO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzI3MC5jPTIxMzQ9Y29uMzI3MF9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci9jb24zMjcwLmMtMjE0NS1cXHQvKiBTZXQgdGhlIGNvbnNvbGUgbW9kZSBmb3IgVk0gKi9cXG5kcml2ZXJzL3MzOTAvY2hhci9jb24zMjcwLmM6MjE0NjpcXHRpZiAobWFjaGluZV9pc192bSgpKSB7XFxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzI3MC5jLTIxNDctXFx0XFx0Y3BjbWQoXFxcIlRFUk0gQ09OTU9ERSAzMjcwXFxcIiwgTlVMTCwgMCwgTlVMTCk7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci9obWNkcnZfZnRwLmM9MjkzPWludCBobWNkcnZfZnRwX3N0YXJ0dXAodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL2htY2Rydl9mdHAuYy0zMTEtXFx0aWYgKGhtY2Rydl9mdHBfcmVmY250ID09IDApIHtcXG5kcml2ZXJzL3MzOTAvY2hhci9obWNkcnZfZnRwLmM6MzEyOlxcdFxcdGlmIChtYWNoaW5lX2lzX3ZtKCkpXFxuZHJpdmVycy9zMzkwL2NoYXIvaG1jZHJ2X2Z0cC5jLTMxMy1cXHRcXHRcXHRobWNkcnZfZnRwX2Z1bmNzID0gXFx1MDAyNmhtY2Rydl9mdHBfenZtO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvbW9ucmVhZGVyLmM9NDU0PXN0YXRpYyBpbnQgX19pbml0IG1vbl9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci9tb25yZWFkZXIuYy00NTctXFxuZHJpdmVycy9zMzkwL2NoYXIvbW9ucmVhZGVyLmM6NDU4OlxcdGlmICghbWFjaGluZV9pc192bSgpKSB7XFxuZHJpdmVycy9zMzkwL2NoYXIvbW9ucmVhZGVyLmMtNDU5LVxcdFxcdHByX2VycihcXFwiVGhlIHovVk0gKk1PTklUT1IgcmVjb3JkIGRldmljZSBkcml2ZXIgY2Fubm90IGJlIFxcXCJcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL21vbndyaXRlci5jPTI5ND1zdGF0aWMgaW50IF9faW5pdCBtb25faW5pdCh2b2lkKVxcbmRyaXZlcnMvczM5MC9jaGFyL21vbndyaXRlci5jLTI5NS17XFxuZHJpdmVycy9zMzkwL2NoYXIvbW9ud3JpdGVyLmM6Mjk2OlxcdGlmICghbWFjaGluZV9pc192bSgpKVxcbmRyaXZlcnMvczM5MC9jaGFyL21vbndyaXRlci5jLTI5Ny1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuYz02MTQ9c3RhdGljIHZvaWQgcmF3MzI3MF9yZXNldF9kZXZpY2VfY2Ioc3RydWN0IHJhdzMyNzBfcmVxdWVzdCAqcnEsIHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci9yYXczMjcwLmMtNjIyLVxcdFxcdHJwLVxcdTAwM2VzdGF0ZSA9IFJBVzMyNzBfU1RBVEVfSU5JVDtcXG5kcml2ZXJzL3MzOTAvY2hhci9yYXczMjcwLmM6NjIzOlxcdH0gZWxzZSBpZiAobWFjaGluZV9pc192bSgpKSB7XFxuZHJpdmVycy9zMzkwL2NoYXIvcmF3MzI3MC5jLTYyNC1cXHRcXHRyYXczMjcwX3NpemVfZGV2aWNlX3ZtKHJwKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHAuaD0zNDQ9c2NscF9hc2NlYmModW5zaWduZWQgY2hhciBjaClcXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmgtMzQ1LXtcXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmg6MzQ2OlxcdHJldHVybiAobWFjaGluZV9pc192bSgpKSA/IF9hc2NlYmNbY2hdIDogX2FzY2ViY181MDBbY2hdO1xcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHAuaC0zNDctfVxcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oPTM1MT1zY2xwX2ViY2FzY19zdHIoY2hhciAqc3RyLCBpbnQgbnIpXFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oLTM1Mi17XFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oOjM1MzpcXHQobWFjaGluZV9pc192bSgpKSA/IEVCQ0FTQyhzdHIsIG5yKSA6IEVCQ0FTQ181MDAoc3RyLCBucik7XFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oLTM1NC19XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmg9MzU4PXNjbHBfYXNjZWJjX3N0cihjaGFyICpzdHIsIGludCBucilcXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmgtMzU5LXtcXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmg6MzYwOlxcdChtYWNoaW5lX2lzX3ZtKCkpID8gQVNDRUJDKHN0ciwgbnIpIDogQVNDRUJDXzUwMChzdHIsIG5yKTtcXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmgtMzYxLX1cXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfZWFybHkuYz0yNj1zdGF0aWMgdm9pZCBfX2luaXQgc2NscF9lYXJseV9mYWNpbGl0aWVzX2RldGVjdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF9lYXJseS5jLTc4LVxcdGlmICghc2NjYi1cXHUwMDNlaGNwdWEpIHtcXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2Vhcmx5LmM6Nzk6XFx0XFx0aWYgKG1hY2hpbmVfaXNfdm0oKSlcXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2Vhcmx5LmMtODAtXFx0XFx0XFx0c2NscC5tYXhfY29yZXMgPSA2NDtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfdHR5LmM9NTA1PXNjbHBfdHR5X2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfdHR5LmMtNTEyLVxcdC8qIHovVk0gbXVsdGlwbGV4ZXMgdGhlIGxpbmUgbW9kZSBvdXRwdXQgb24gdGhlIDMyeHggc2NyZWVuICovXFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF90dHkuYzo1MTM6XFx0aWYgKG1hY2hpbmVfaXNfdm0oKSBcXHUwMDI2XFx1MDAyNiAhQ09OU09MRV9JU19TQ0xQKVxcbmRyaXZlcnMvczM5MC9jaGFyL3NjbHBfdHR5LmMtNTE0LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF90dHkuYy01MzgtXFx0c2NscF90dHlfYnVmZmVyX2NvdW50ID0gMDtcXG5kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3R0eS5jOjUzOTpcXHRpZiAobWFjaGluZV9pc192bSgpKSB7XFxuZHJpdmVycy9zMzkwL2NoYXIvc2NscF90dHkuYy01NDAtXFx0XFx0LyogY2FzZSBpbnB1dCBsaW5lcyB0byBsb3dlcmNhc2UgKi9cXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYz01Mj12b2lkIF9faW5pdCB2bWNwX2NtYV9yZXNlcnZlKHZvaWQpXFxuZHJpdmVycy9zMzkwL2NoYXIvdm1jcC5jLTUzLXtcXG5kcml2ZXJzL3MzOTAvY2hhci92bWNwLmM6NTQ6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXFxuZHJpdmVycy9zMzkwL2NoYXIvdm1jcC5jLTU1LVxcdFxcdHJldHVybjtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYz0yNDg9c3RhdGljIGludCBfX2luaXQgdm1jcF9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci92bWNwLmMtMjUxLVxcbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYzoyNTI6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXFxuZHJpdmVycy9zMzkwL2NoYXIvdm1jcC5jLTI1My1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3ZtbG9ncmRyLmM9ODA2PXN0YXRpYyBpbnQgX19pbml0IHZtbG9ncmRyX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3ZtbG9ncmRyLmMtODExLVxcbmRyaXZlcnMvczM5MC9jaGFyL3ZtbG9ncmRyLmM6ODEyOlxcdGlmICghbWFjaGluZV9pc192bSgpKSB7XFxuZHJpdmVycy9zMzkwL2NoYXIvdm1sb2dyZHIuYy04MTMtXFx0XFx0cHJfZXJyKFxcXCJub3QgcnVubmluZyB1bmRlciBWTSwgZHJpdmVyIG5vdCBsb2FkZWQuXFxcXG5cXFwiKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3ZtdXIuYz0xMDA2PXN0YXRpYyBpbnQgX19pbml0IHVyX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3ZtdXIuYy0xMDEwLVxcbmRyaXZlcnMvczM5MC9jaGFyL3ZtdXIuYzoxMDExOlxcdGlmICghbWFjaGluZV9pc192bSgpKSB7XFxuZHJpdmVycy9zMzkwL2NoYXIvdm11ci5jLTEwMTItXFx0XFx0cHJfZXJyKFxcXCJUaGUgJXMgY2Fubm90IGJlIGxvYWRlZCB3aXRob3V0IHovVk1cXFxcblxcXCIsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9pZC5jPTE3Mz1zdGF0aWMgdm9pZCBzbnNpZF9jYWxsYmFjayhzdHJ1Y3QgY2N3X2RldmljZSAqY2Rldiwgdm9pZCAqZGF0YSwgaW50IHJjKVxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfaWQuYy0xNzgtXFxuZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfaWQuYzoxNzk6XFx0aWYgKHJjIFxcdTAwMjZcXHUwMDI2IG1hY2hpbmVfaXNfdm0oKSkge1xcbmRyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2lkLmMtMTgwLVxcdFxcdC8qIFRyeSBkaWFnIDB4MjEwIGZhbGxiYWNrIG9uIHovVk0uICovXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jPTI0OTQ9c3RhdGljIGlubGluZSBpbnQgX19pbml0IGFwX2FzeW5jX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMtMjUwNC1cXHQgKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jOjI1MDU6XFx0aWYgKG1hY2hpbmVfaXNfdm0oKSlcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jLTI1MDYtXFx0XFx0cG9sbF9oaWdoX3RpbWVvdXQgPSAxNTAwMDAwO1xcbi0tXFxuZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYz0yOTc9c3RhdGljIGludCBxZXRoX2wyX3JlcXVlc3RfaW5pdGlhbF9tYWMoc3RydWN0IHFldGhfY2FyZCAqY2FyZClcXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMtMzAyLVxcbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmM6MzAzOlxcdGlmIChtYWNoaW5lX2lzX3ZtKCkpIHtcXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jLTMwNC1cXHRcXHRyYyA9IHFldGhfdm1fcmVxdWVzdF9tYWMoY2FyZCk7XFxuLS1cXG5kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmM9MTM5PXN0YXRpYyBpbnQgX19pbml0IHNtc2dfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jLTE0Mi1cXG5kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmM6MTQzOlxcdGlmICghbWFjaGluZV9pc192bSgpKSB7XFxuZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jLTE0NC1cXHRcXHRyYyA9IC1FUFJPVE9OT1NVUFBPUlQ7XFxuLS1cXG5kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2X2FwcC5jPTE1Mj1zdGF0aWMgaW50IF9faW5pdCBzbXNnaXVjdl9hcHBfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdl9hcHAuYy0xNTYtXFxuZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdl9hcHAuYzoxNTc6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkpXFxuZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdl9hcHAuYy0xNTgtXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuLS1cXG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYz0xMjM5PXN0YXRpYyBpbnQgcGFyYW1fc2V0X3ZtaWRmaWx0ZXIoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jLTEyNDItXFxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmM6MTI0MzpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSB8fCAhaHZjX2l1Y3ZfZGV2aWNlcylcXG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYy0xMjQ0LVxcdFxcdHJldHVybiAtRU5PREVWO1xcbi0tXFxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmM9MTI2Nj1zdGF0aWMgaW50IHBhcmFtX2dldF92bWlkZmlsdGVyKGNoYXIgKmJ1ZmZlciwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuLS1cXG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYy0xMjcxLVxcbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jOjEyNzI6XFx0aWYgKCFtYWNoaW5lX2lzX3ZtKCkgfHwgIWh2Y19pdWN2X2RldmljZXMpXFxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmMtMTI3My1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4tLVxcbmRyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jPTEzMDE9c3RhdGljIGludCBfX2luaXQgaHZjX2l1Y3ZfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmMtMTMwOC1cXG5kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYzoxMzA5OlxcdGlmICghbWFjaGluZV9pc192bSgpKSB7XFxuZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmMtMTMxMC1cXHRcXHRwcl9ub3RpY2UoXFxcIlRoZSB6L1ZNIElVQ1YgSFZDIGRldmljZSBkcml2ZXIgY2Fubm90IFxcXCJcXG4tLVxcbmRyaXZlcnMvd2F0Y2hkb2cvZGlhZzI4OF93ZHQuYz04MT1zdGF0aWMgaW50IHdkdF9zdGFydChzdHJ1Y3Qgd2F0Y2hkb2dfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmMtODUtXFxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jOjg2OlxcdGlmIChtYWNoaW5lX2lzX3ZtKCkpIHtcXG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmMtODctXFx0XFx0ZnVuYyA9IGNvbmNlYWxfb24gPyAoV0RUX0ZVTkNfSU5JVCB8IFdEVF9GVU5DX0NPTkNFQUwpXFxuLS1cXG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmM9MTA3PXN0YXRpYyBpbnQgd2R0X3Bpbmcoc3RydWN0IHdhdGNoZG9nX2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jLTExMS1cXG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmM6MTEyOlxcdGlmIChtYWNoaW5lX2lzX3ZtKCkpIHtcXG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmMtMTEzLVxcdFxcdC8qXFxuLS1cXG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmM9MTYyPXN0YXRpYyBpbnQgX19pbml0IGRpYWcyODhfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jLTE2NS1cXG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmM6MTY2OlxcdGlmIChtYWNoaW5lX2lzX3ZtKCkpIHtcXG5kcml2ZXJzL3dhdGNoZG9nL2RpYWcyODhfd2R0LmMtMTY3LVxcdFxcdGNtZF9idWYgPSBrbWFsbG9jKE1BWF9DTURMRU4sIEdGUF9LRVJORUwpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTIyOTQ9c3RhdGljIGludCBfX2luaXQgYWZpdWN2X2luaXQodm9pZClcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjk3LVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjk4OlxcdGlmIChtYWNoaW5lX2lzX3ZtKCkgXFx1MDAyNlxcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfSVVDVikpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI5OS1cXHRcXHRjcGNtZChcXFwiUVVFUlkgVVNFUklEXFxcIiwgaXVjdl91c2VyaWQsIHNpemVvZihpdWN2X3VzZXJpZCksIFxcdTAwMjZlcnIpO1xcbi0tXFxubmV0L2l1Y3YvaXVjdi5jPTE4NjI9c3RhdGljIGludCBfX2luaXQgaXVjdl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXVjdi9pdWN2LmMtMTg2NS1cXG5uZXQvaXVjdi9pdWN2LmM6MTg2NjpcXHRpZiAoIW1hY2hpbmVfaXNfdm0oKSkge1xcbm5ldC9pdWN2L2l1Y3YuYy0xODY3LVxcdFxcdHJjID0gLUVQUk9UT05PU1VQUE9SVDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTU6MTA6NDMuMTkxNDQ1MTk3WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3Nzg2NDQ3OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgUmVhc29uaW5nIG9uIHRoZSBWaXJ0dWFsIE1hY2hpbmUgRGV0ZWN0aW9uKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIG91ciBlbnZpcm9ubWVudCBpcyBhIHZpcnR1YWwgbWFjaGluZS4gU3BlY2lmaWNhbGx5LCBJIHNlZSBgbWFjaGluZV9pc192bWAgaXMgZGVmaW5lZCBhcyBgbWFjaGluZV9oYXNfdm1gLiBNYWtlcyBzZW5zZSBzbyBmYXIuIFRoZW4gYG1hY2hpbmVfaGFzX3ZtYCBpcyBzZXQgaWYgd2UncmUgcnVubmluZyB1bmRlciB6L1ZNLiBIbW0sIHRoYXQncyBhIGNsdWUuIE5vdywgSSBrbm93IFFFTVUgZW11bGF0ZXMgb3RoZXIgdmlydHVhbCBtYWNoaW5lcyDigJMgS1ZNIG9yIFRDRywgdXN1YWxseSDigJMgYnV0IGRvZXMgaXQgZW11bGF0ZSB6L1ZNPyBJIGRvbid0ICp0aGluayogc28uXG5cbldhaXQgYSBtaW51dGUuLi4gd2UncmUgZnV6emluZyBvbiBzMzkweCwgd2hpY2ggKmNvdWxkKiBiZSBydW5uaW5nIG9uIHJlYWwgei9WTSBoYXJkd2FyZS4gQnV0IFN5emthbGxlciB0eXBpY2FsbHkgdXNlcyBRRU1VLCBhbmQgUUVNVSB3b3VsZG4ndCBiZSBlbXVsYXRpbmcgei9WTSwgcmlnaHQ/IFNvLCBkb2VzIFFFTVUgZW11bGF0ZSB6L1ZNP1xuXG5Pa2F5LCBJIG5lZWQgdG8gZ28gYmFjayBhbmQgY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYG1hY2hpbmVfaXNfdm1gLiBJIG5lZWQgdG8gYmUgc3VyZS4gTXkgaW5pdGlhbCBhc3N1bXB0aW9ucyBtaWdodCBiZSBjb3JyZWN0LCBidXQgbGV0J3MgbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy4gQmFjayB0byBiYXNpY3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4OTM1LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE1OjEwOjQ3Ljk3MDA5MjQyM1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcyMTE1NTU4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWNoaW5lX2hhc192bVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaD05Nz1ERUZJTkVfTUFDSElORV9IQVNfRkVBVFVSRShscGFyLCBNRkVBVFVSRV9MUEFSKVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmgtOTgtXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaDo5OTojZGVmaW5lIG1hY2hpbmVfaXNfdm1cXHRtYWNoaW5lX2hhc192bVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmgtMTAwLSNkZWZpbmUgbWFjaGluZV9pc19rdm1cXHRtYWNoaW5lX2hhc19rdm1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTU6MTA6NTAuNjkxMjUzMDE0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MjQxNTQyMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVW5wYWNraW5nIGEgTWFjcm86IGBtYWNoaW5lX2hhc192bWAqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHNlZSBgbWFjaGluZV9oYXNfdm1gIGluIHRoZSBjb2RlLCBhbmQgSSdtIHByZXR0eSBzdXJlIHRoYXQncyBhIG1hY3JvLiBSaWdodCwgbGV0J3Mgbm90IG1ha2UgYXNzdW1wdGlvbnMgaGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIG1hY3JvIGlzICphY3R1YWxseSogZG9pbmcgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIuIEknbSBnb2luZyB0byBxdWlja2x5IGp1bXAgdG8gaXRzIGRlZmluaXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBleHBhbnNpb24gdG8gYmUgY2VydGFpbiBvZiBpdHMgZWZmZWN0LCBlc3BlY2lhbGx5IGdpdmVuIGhvdyBjcml0aWNhbCBWTS1yZWxhdGVkIGxvZ2ljIG9mdGVuIGlzLiBJ4oCZbSBob3BpbmcgaXTigJlzIG5vdCBzb21ldGhpbmcgb3Zlcmx5IGNvbXBsZXgsIGJ1dCB5b3UgbmV2ZXIga25vdyB1bnRpbCB5b3UgbG9vay4gTGV0J3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCB0aGUgcHJlcHJvY2Vzc29yIGlzIGdvaW5nIHRvIHN1YnN0aXR1dGUgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk0NjIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNToxMDo1NS41MTU0MDk5MzlaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNzQ2MzI5MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiREVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkVcXFxcKHZtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oPTk0PURFRklORV9NQUNISU5FX0hBU19GRUFUVVJFKGRpYWc5YywgTUZFQVRVUkVfRElBRzlDKVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg6OTU6REVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUodm0sIE1GRUFUVVJFX1ZNKVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmgtOTYtREVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUoa3ZtLCBNRkVBVFVSRV9LVk0pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE1OjEwOjU4LjY5MDA0NzU5MloiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTcxNDMyNjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQ6XG5cbioqVHJhY2luZyBEb3duIHRoZSBgTUZFQVRVUkVfVk1gIEZsYWcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgYE1GRUFUVVJFX1ZNYCBzeW1ib2wgb3IgbWFjcm8gaXMgZGVmaW5lZCBhbmQgdXNlZC4gSXQncyB1c3VhbGx5IHRoZSBmaXJzdCBzdGVwIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHB1cnBvc2Ugb2Ygc29tZXRoaW5nLiBJIG5lZWQgdG8ga25vdzogSXMgdGhpcyBhIGRlZmluZSBzdGF0ZW1lbnQ/IElzIGl0IGEgdmFyaWFibGU/IElzIGl0IGJlaW5nIHNldCBiYXNlZCBvbiBhIGNvbXBpbGUtdGltZSBmbGFnPyBLbm93aW5nIHRoZSBkZWZpbml0aW9uIHdpbGwgdW5sb2NrIHNvIG11Y2ggaW5mb3JtYXRpb24uIEZyb20gdGhlcmUsIEkgY2FuIGRldGVybWluZSB3aGVyZSB0aGF0IHZhcmlhYmxlL21hY3JvIGlzICp1c2VkKiBhbmQgdW5kZXJzdGFuZCBpdHMgaW1wYWN0IG9uIHRoZSBzeXN0ZW0uIElzIGl0IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uPyBJcyBpdCBjb250cm9sbGluZyBzb21lIGV4ZWN1dGlvbiBwYXRoPyBUaGlzIGlzIGdvaW5nIHRvIGludm9sdmUgc29tZSBjb2RlIHNlYXJjaGluZyAtIG1heWJlIGdyZXAsIG1heWJlIG15IElERSdzIHN5bWJvbCBsb29rdXAsIGRlcGVuZGluZyBvbiB0aGUgY29kZWJhc2Ugc2l6ZSBhbmQgc3RydWN0dXJlLiBJJ2xsIG5lZWQgdG8gdGhpbmsgYWJvdXQgcG90ZW50aWFsIGhlYWRlciBmaWxlcywgYnVpbGQgY29uZmlndXJhdGlvbnMsIGFuZCBpZiB0aGlzIHJlbGF0ZXMgdG8gc29tZSBwbGF0Zm9ybS1zcGVjaWZpYyBmdW5jdGlvbmFsaXR5LiBBIGJpdCBvZiBkZXRlY3RpdmUgd29yaywgYnV0IGZhaXJseSByb3V0aW5lIHRvIHVuZGVyc3RhbmQgc3lzdGVtIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTgwMywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE1OjExOjAyLjY2MTQ4MzcxMVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcyNzMyNDU4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNRkVBVFVSRV9WTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2Jvb3Qvc3RhcnR1cC5jPTUyPXN0YXRpYyB2b2lkIGRldGVjdF9tYWNoaW5lX3R5cGUodm9pZClcXG4tLVxcbmFyY2gvczM5MC9ib290L3N0YXJ0dXAuYy02Ny1cXHRlbHNlIGlmICghbWVtY21wKHZtbXMtXFx1MDAzZXZtWzBdLmNwaSwgXFxcIlxcXFx4YTlcXFxceDYxXFxcXHhlNVxcXFx4ZDRcXFwiLCA0KSlcXG5hcmNoL3MzOTAvYm9vdC9zdGFydHVwLmM6Njg6XFx0XFx0c2V0X21hY2hpbmVfZmVhdHVyZShNRkVBVFVSRV9WTSk7XFxuYXJjaC9zMzkwL2Jvb3Qvc3RhcnR1cC5jLTY5LX1cXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmgtMTctI2RlZmluZSBNRkVBVFVSRV9ESUFHOUNcXHRcXHQ2XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21hY2hpbmUuaDoxODojZGVmaW5lIE1GRUFUVVJFX1ZNXFx0XFx0N1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmgtMTktI2RlZmluZSBNRkVBVFVSRV9LVk1cXHRcXHQ4XFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vbWFjaGluZS5oPTk0PURFRklORV9NQUNISU5FX0hBU19GRUFUVVJFKGRpYWc5YywgTUZFQVRVUkVfRElBRzlDKVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmg6OTU6REVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUodm0sIE1GRUFUVVJFX1ZNKVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9tYWNoaW5lLmgtOTYtREVGSU5FX01BQ0hJTkVfSEFTX0ZFQVRVUkUoa3ZtLCBNRkVBVFVSRV9LVk0pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE1OjExOjA1LjM4ODgxNTM2NloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTgxMDY0NzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHlwZXJ2aXNvciBDaGVjayoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQncyBjaGVja2luZyBgdm1tcy1cdTAwM2V2bVswXS5jcGlgIGZvciBgXCJcXHhhOVxceDYxXFx4ZTVcXHhkNFwiYCwgd2hpY2ggSSBpbnN0YW50bHkgcmVjb2duaXplIGFzIHRoZSBFQkNESUMgZXF1aXZhbGVudCBvZiBcInovVk1cIi4gVGhhdCdzIHRoZSBrZXkuIFRoaXMgd2hvbGUgc2VjdGlvbiBpcyBzcGVjaWZpY2FsbHkgZm9yIGlkZW50aWZ5aW5nIGlmIHRoZSBjb2RlIGlzIHJ1bm5pbmcgb24gei9WTS4gUUVNVSwgb24gdGhlIG90aGVyIGhhbmQsIGlkZW50aWZpZXMgaXRzZWxmIGFzIEtWTSBvciBRRU1VLCBhcyBleHBlY3RlZC4gVGh1cyBgbWFjaGluZV9pc192bSgpYCB3aWxsIGJlIGBmYWxzZWAgdW5kZXIgUUVNVSwgcmlnaHQ/XG5cbkFscmlnaHQsIGlmIGBtYWNoaW5lX2lzX3ZtKClgIGlzIGBmYWxzZWAsIHRoZW4gYHByX2l1Y3ZgIGlzIGBOVUxMYC4gQW5kIHdoZW4gYHByX2l1Y3ZgIGlzIGBOVUxMYCwgdGhlIGBpdWN2LVx1MDAzZXRyYW5zcG9ydGAgaXMgc2V0IHRvIGBBRl9JVUNWX1RSQU5TX0hJUEVSYCwgZ290IGl0LiBXaXRoIGBpdWN2LVx1MDAzZXRyYW5zcG9ydGAgYXMgYEFGX0lVQ1ZfVFJBTlNfSElQRVJgLCB0aGUgY29kZSBlbnN1cmVzIHRoYXQgYGl1Y3YtXHUwMDNlcGF0aGAgaXMgbmV2ZXIgYWxsb2NhdGVkLlxuXG5IZXJlJ3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZzogYmVjYXVzZSBgaXVjdi1cdTAwM2VwYXRoYCBpcyBuZXZlciBhbGxvY2F0ZWQsIGBpdWN2X3NldmVyX3BhdGhgIGVmZmVjdGl2ZWx5IGRvZXMgbm90aGluZyBiZWNhdXNlIHRoZSBgeGNoZyhcdTAwMjZpdWN2LVx1MDAzZXBhdGgsIE5VTEwpYCBjYWxsIHdpbGwgYWx3YXlzIHJldHVybiBgTlVMTGAuIFRoYXQgbWVhbnMgdGhlIGNvZGUgYmxvY2sgKmluc2lkZSogdGhlIGBpZiAoeGNoZyhcdTAwMjZpdWN2LVx1MDAzZXBhdGgsIE5VTEwpKWAgY29uZGl0aW9uIGlzIE5FVkVSIGV4ZWN1dGVkIHdoZW4gcnVubmluZyB1bmRlciBRRU1VLiBUaGF0IGlzLCB1bmxlc3MgbXkgYXNzdW1wdGlvbnMgYXJlIGNvbXBsZXRlbHkgb2ZmLlxuXG5XYWl0Li4uIGFtIEkgbWlzc2luZyBzb21ldGhpbmc/IElzIHRoZXJlICphbnkqIHdheSBgaXVjdi1cdTAwM2VwYXRoYCBjb3VsZCBiZSBub24tTlVMTCB3aGVuIGBwcl9pdWN2YCBpcyBhY3R1YWxseSBgTlVMTGA/IEkgbmVlZCB0byBkb3VibGUtY2hlY2suIEknbSBnb2luZyB0byBsb29rIHRocm91Z2ggdGhlIHN1cnJvdW5kaW5nIGNvZGUgY2FyZWZ1bGx5IGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBwYXRocyB0aGF0IGNvdWxkIHBvc3NpYmx5IHNldCBgaXVjdi1cdTAwM2VwYXRoYC4gTmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBvdmVybG9va2luZyBhIHN1YnRsZSBkZXRhaWwgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAzODIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTU6MTE6MTMuNTY5ODgyMzY0WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjcyMjYyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXVjdi1cXHUwMDNlcGF0aCA9XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmM9NDY2PXN0YXRpYyBzdHJ1Y3Qgc29jayAqaXVjdl9zb2NrX2FsbG9jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90bywgZ2ZwX3QgcHJpbywgaW50IGtlcm4pXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDg5LVxcdGF0b21pY19zZXQoXFx1MDAyNml1Y3YtXFx1MDAzZW1zZ19yZWN2LCAwKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6NDkwOlxcdGl1Y3YtXFx1MDAzZXBhdGggPSBOVUxMO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OTEtXFx0aXVjdi1cXHUwMDNlc2tfdHhub3RpZnkgPSBhZml1Y3ZfaHNfY2FsbGJhY2tfdHhub3RpZnk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9Njg3PXN0YXRpYyBpbnQgYWZpdWN2X3BhdGhfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy02OTktXFx0LyogQ3JlYXRlIHBhdGguICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjcwMDpcXHRpdWN2LVxcdTAwM2VwYXRoID0gaXVjdl9wYXRoX2FsbG9jKGl1Y3YtXFx1MDAzZW1zZ2xpbWl0LFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03MDEtXFx0XFx0XFx0XFx0ICAgICBJVUNWX0lQUk1EQVRBLCBHRlBfS0VSTkVMKTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03MTAtXFx0XFx0aXVjdl9wYXRoX2ZyZWUoaXVjdi1cXHUwMDNlcGF0aCk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjcxMTpcXHRcXHRpdWN2LVxcdTAwM2VwYXRoID0gTlVMTDtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzEyLVxcdFxcdHN3aXRjaCAoZXJyKSB7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTYwNz1zdGF0aWMgaW50IGl1Y3ZfY2FsbGJhY2tfY29ubnJlcShzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NzUtXFx0bWVtY3B5KG5pdWN2LVxcdTAwM2VzcmNfdXNlcl9pZCwgaXVjdi1cXHUwMDNlc3JjX3VzZXJfaWQsIDgpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjc2OlxcdG5pdWN2LVxcdTAwM2VwYXRoID0gcGF0aDtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY3Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTU6MTE6MTMuNzk3MTE3MjMzWiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNzUyNzgzMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgSVVDViBDb25uZWN0aW9uIEVzdGFibGlzaG1lbnQqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBjb2RlIHNuaXBwZXQgaXMgcG9pbnRpbmcgdG8gYSBzcGVjaWZpYyBjb25uZWN0aW9uIHBhdGguIE15IGFuYWx5c2lzIHJldmVhbHMgdGhhdCB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24sIGBhZml1Y3ZfcGF0aF9jb25uZWN0YCwgYW5kIGl0cyBjb3JyZXNwb25kaW5nIGNhbGxiYWNrIGZ1bmN0aW9uLCBgaXVjdl9jYWxsYmFja19jb25ucmVxYCwgYXJlIHRoZSBvbmx5IHBvaW50cyB3aGVyZSBhIHBhcnRpY3VsYXIgY29ubmVjdGlvbiBwYXRod2F5IGlzIGluaXRpYWxpemVkLiBTcGVjaWZpY2FsbHksIGBhZml1Y3ZfcGF0aF9jb25uZWN0YCBpcyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgaXVjdl9zb2NrX2Nvbm5lY3RgLiBUaGlzIHN1Z2dlc3RzIGEgY2xlYXIgY29ubmVjdGlvbiBmbG93OiBhIHNvY2tldCBjb25uZWN0IGV2ZW50IHRyaWdnZXJpbmcgdGhlIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCB2aWEgdGhlIGBhZml1Y3ZfcGF0aF9jb25uZWN0YCBmdW5jdGlvbi4gSSB3aWxsIG5lZWQgdG8gZGVsdmUgZGVlcGVyIGludG8gdGhlc2UgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgdGhlIGludHJpY2FjaWVzIG9mIGhvdyBJVUNWIGNvbm5lY3Rpb25zIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGlzIGNvbnRleHQuIEZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBpbnRvIHRoZXNlIGtleSBmdW5jdGlvbnMgaXMgaW4gb3JkZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNjg4LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTU6MTE6MTkuMTcyMzk3NTA5WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzY2LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzY2OlxcdFxcdGlmIChpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19ISVBFUilcXG4gNzY3OlxcdFxcdFxcdGVyciA9IGl1Y3Zfc2VuZF9jdHJsKHNvY2stXFx1MDAzZXNrLCBBRl9JVUNWX0ZMQUdfU1lOKTtcXG4gNzY4OlxcdFxcdGVsc2VcXG4gNzY5OlxcdFxcdFxcdGVyciA9IGFmaXVjdl9wYXRoX2Nvbm5lY3Qoc29jaywgYWRkcik7XFxuIDc3MDpcXHRcXHRpZiAoZXJyKVxcbiA3NzE6XFx0XFx0XFx0Z290byBkb25lO1xcbiA3NzI6XFx0XFxuIDc3MzpcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlICE9IElVQ1ZfQ09OTkVDVEVEKVxcbiA3NzQ6XFx0XFx0XFx0ZXJyID0gaXVjdl9zb2NrX3dhaXQoc2ssIGl1Y3Zfc29ja19pbl9zdGF0ZShzaywgSVVDVl9DT05ORUNURUQsXFxuIDc3NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgSVVDVl9ESVNDT05OKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTU6MTE6MTkuMTcyNTIyNzE5WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxOTczMDg3NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IGxvZ2ljLCB0YWlsb3JlZCBmb3IgYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKlVuZGVyc3RhbmRpbmcgdGhlIElVQ1YgVHJhbnNwb3J0IEZsb3cqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgSVVDViBjb2RlLCBhbmQgaXQncyBjcnlzdGFsIGNsZWFyIHRoYXQgd2hlbiB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGBBRl9JVUNWX1RSQU5TX0hJUEVSYCB0cmFuc3BvcnQgdHlwZSwgdGhlIGNvbnRyb2wgZmxvdyBkaXZlcmdlcyAqc2lnbmlmaWNhbnRseSouIFRoZSBrZXkgaXMgdGhpcyBjb25kaXRpb25hbCBjaGVjazogYGlmIChpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSKWAuIElmIHRoYXQgZXZhbHVhdGVzIHRvIHRydWUsIHdlJ3JlIHRha2luZyB0aGUgYGl1Y3Zfc2VuZF9jdHJsYCBwYXRoLiBUaGlzIGlzIGNydWNpYWwgYmVjYXVzZSBpdCBtZWFucyB3ZSdyZSAqYnlwYXNzaW5nKiB0aGUgdXN1YWwgYGFmaXVjdl9wYXRoX2Nvbm5lY3RgIGNhbGwsIHdoaWNoIGlzIHdoYXQgSSB3b3VsZCBoYXZlIGV4cGVjdGVkLiBUaGF0J3MgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gZm9yIHN1cmUsIGJ1dCBpdCBhbHNvIG1lYW5zIHRoZSB3aG9sZSBoYW5kc2hha2UgcHJvY2VzcyBpcyBwcm9iYWJseSBkaWZmZXJlbnQuXG5cblRoZSBzZWNvbmQgcGFydCBJIHNlZSBpcyB0aGF0IHRoZSBgaXVjdi1cdTAwM2V0cmFuc3BvcnRgIGZpZWxkIGlzICppbml0aWFsaXplZCogZHVyaW5nIHRoZSBgaXVjdl9zb2NrX2FsbG9jYCBjYWxsLiBUaGlzIHRlbGxzIG1lIHRoYXQgdGhlIHNwZWNpZmljIHRyYW5zcG9ydCBtZXRob2Qgd2UgYXJlIHVzaW5nIGZvciB0aGlzIHNvY2tldCBpcyBkZXRlcm1pbmVkICpiZWZvcmUqIHdlIGV2ZW4gZ2V0IHRvIHRoYXQgYGlmYCBzdGF0ZW1lbnQuIEl0J3Mgc2V0IHVwIGluIHRoYXQgaW5pdGlhbCBhbGxvY2F0aW9uIHBoYXNlLCBzbyB0aGF0IGluZm9ybWF0aW9uIGlzIHZpdGFsLCBhcyBpdCdzIHRoZSBcInRyaWdnZXJcIiBmb3IgdGhlIGNvZGUgdG8gdGFrZSB0aGUgSGlwZXIgcGF0aC4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgYWxsb2NhdGlvbiBsb2dpYyB0byBzZWUgZXhhY3RseSBob3cgYW5kIHdoZW4gYGl1Y3YtXHUwMDNldHJhbnNwb3J0YCBpcyBzZXQgYW5kIHdoYXQgdGhlIHBvc3NpYmxlIHZhbHVlcyBhcmUuIFRoaXMgaXMgYWxsIGFib3V0IGhvdyB3ZSdyZSBoYW5kbGluZyB0aGUgdW5kZXJseWluZyBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYW5kIGRhdGEgdHJhbnNmZXIgZm9yIEhpcGVyLCB2ZXJzdXMgdGhlIHN0YW5kYXJkIElVQ1YgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIxNTksIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE1OjExOjI1LjM2OTgzNTA3WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDY3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDkyLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDkyOlxcdFxcdG1lbXNldChcXHUwMDI2aXVjdi1cXHUwMDNlaW5pdCwgMCwgc2l6ZW9mKGl1Y3YtXFx1MDAzZWluaXQpKTtcXG4gNDkzOlxcdFxcdGlmIChwcl9pdWN2KVxcbiA0OTQ6XFx0XFx0XFx0aXVjdi1cXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xcbiA0OTU6XFx0XFx0ZWxzZVxcbiA0OTY6XFx0XFx0XFx0aXVjdi1cXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19ISVBFUjtcXG4gNDk3OlxcdFxcbiA0OTg6XFx0XFx0c2stXFx1MDAzZXNrX2Rlc3RydWN0ID0gaXVjdl9zb2NrX2Rlc3RydWN0O1xcbiA0OTk6XFx0XFx0c2stXFx1MDAzZXNrX3NuZHRpbWVvID0gSVVDVl9DT05OX1RJTUVPVVQ7XFxuIDUwMDpcXHRcXG4gNTAxOlxcdFxcdHNvY2tfcmVzZXRfZmxhZyhzaywgU09DS19aQVBQRUQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNToxMToyNS4zNzAwMzc4OFoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzcyMzU0ODcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCBsb2dpYywgYXMgaWYgaXQgd2VyZSBteSBvd24gdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgYSBzdW1tYXJ5IGZvciBhIGZlbGxvdyBleHBlcnQ6XG5cbioqVW5kZXJzdGFuZGluZyBJVUNWIFRyYW5zcG9ydCBJbml0aWFsaXphdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSWYgSSdtIHJlYWRpbmcgdGhpcyBjb3JyZWN0bHksIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYW4gSVVDViB0cmFuc3BvcnQuIFRoZSBjb3JlIGNvbmNlcHQgaGVyZSBoaW5nZXMgb24gdGhpcyBgcHJfaXVjdmAgdmFyaWFibGUuIFRoZSBzbmlwcGV0IGluZGljYXRlcyB0aGF0IHdoZW4gYHByX2l1Y3ZgIGlzIGBOVUxMYCwgd2hpY2ggbGlrZWx5IG1lYW5zIGl0IGhhc24ndCBiZWVuIGV4cGxpY2l0bHkgY29uZmlndXJlZCBvciBpcyBpbiBzb21lIGRlZmF1bHQgc3RhdGUsIHRoZW4gYGl1Y3YtXHUwMDNldHJhbnNwb3J0YCBpcyBhdXRvbWF0aWNhbGx5IHNldCB0byBgQUZfSVVDVl9UUkFOU19ISVBFUmAuIFNvLCBpZiB0aGF0IHBvaW50ZXIgaXMgdW5pbml0aWFsaXplZCBvciBub3QgcG9pbnRpbmcgdG8gYW55dGhpbmcgbWVhbmluZ2Z1bCwgdGhlIGltcGxpY2F0aW9uIGlzIHRoYXQgd2UncmUgZmFsbGluZyBiYWNrIHRvIHRoZSBIaXBlclNvY2tldHMgSVVDViB0cmFuc3BvcnQuXG5cbkNydWNpYWxseSwgaXQgaXMgc2F5aW5nIHRoYXQgYHByX2l1Y3ZgIGlzIGJlaW5nIGFzc2lnbmVkIGEgdmFsdWUgbGF0ZXIgb24gZHVyaW5nIHRoZSBgYWZpdWN2X2luaXRgIHBoYXNlLiBUaGlzIGZ1bmN0aW9uIGlzIG9idmlvdXNseSB3aGVyZSB0aGUgY3JpdGljYWwgY29uZmlndXJhdGlvbiBkZXRhaWxzIGFyZSBsb2FkZWQgb3IgZGV0ZXJtaW5lZC4gSSBjYW4gaW1hZ2luZSB0aGF0IGBhZml1Y3ZfaW5pdGAgbGlrZWx5IGNoZWNrcyBmb3Igc29tZXRoaW5nLCBwZXJoYXBzIGEgY29uZmlndXJhdGlvbiBmaWxlLCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgb3Igc29tZSBvdGhlciBzeXN0ZW0gc2V0dGluZyB0byBkZWNpZGUgd2hpY2ggc3BlY2lmaWMgSVVDViB0cmFuc3BvcnQgbW9kZSB0byB1c2UuIElmIHRoYXQgY29uZmlndXJhdGlvbiBpcyBhYnNlbnQsIG9yIGRvZXNuJ3Qgc3BlY2lmeSBhIHBhcnRpY3VsYXIgdHJhbnNwb3J0LCB0aGVuIGBwcl9pdWN2YCB3b3VsZCBsb2dpY2FsbHkgcmVtYWluIGBOVUxMYCwgY2F1c2luZyB0aGUgY29kZSB0byBkZWZhdWx0IHRvIEhpcGVyU29ja2V0cy4gVGhpcyBtaWdodCBiZSBhIGxlZ2FjeSBzZXR0aW5nIG9yIGEgZmFpbHNhZmUgbWVjaGFuaXNtLiBJdCBpcyBjcml0aWNhbCB0byBpbnZlc3RpZ2F0ZSBob3cgYHByX2l1Y3ZgIGlzIHBvcHVsYXRlZCBkdXJpbmcgYGFmaXVjdl9pbml0YCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgZGVjaXNpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNzk2LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNToxMTozMS4xNDIzOTU5ODJaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk5NjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjk0LFxuICBcIkxpbmVDb3VudFwiOiAxN1xufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMjk0OlxcdHN0YXRpYyBpbnQgX19pbml0IGFmaXVjdl9pbml0KHZvaWQpXFxuMjI5NTpcXHR7XFxuMjI5NjpcXHRcXHRpbnQgZXJyO1xcbjIyOTc6XFx0XFxuMjI5ODpcXHRcXHRpZiAobWFjaGluZV9pc192bSgpIFxcdTAwMjZcXHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0lVQ1YpKSB7XFxuMjI5OTpcXHRcXHRcXHRjcGNtZChcXFwiUVVFUlkgVVNFUklEXFxcIiwgaXVjdl91c2VyaWQsIHNpemVvZihpdWN2X3VzZXJpZCksIFxcdTAwMjZlcnIpO1xcbjIzMDA6XFx0XFx0XFx0aWYgKHVubGlrZWx5KGVycikpIHtcXG4yMzAxOlxcdFxcdFxcdFxcdFdBUk5fT04oZXJyKTtcXG4yMzAyOlxcdFxcdFxcdFxcdGVyciA9IC1FUFJPVE9OT1NVUFBPUlQ7XFxuMjMwMzpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4yMzA0OlxcdFxcdFxcdH1cXG4yMzA1OlxcdFxcbjIzMDY6XFx0XFx0XFx0cHJfaXVjdiA9IFxcdTAwMjZpdWN2X2lmO1xcbjIzMDc6XFx0XFx0fSBlbHNlIHtcXG4yMzA4OlxcdFxcdFxcdG1lbXNldChcXHUwMDI2aXVjdl91c2VyaWQsIDAsIHNpemVvZihpdWN2X3VzZXJpZCkpO1xcbjIzMDk6XFx0XFx0XFx0cHJfaXVjdiA9IE5VTEw7XFxuMjMxMDpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE1OjExOjMxLjE0Mjg5OTI2MloiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjMyMzA0NTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaXVjdl9zZXZlcl9wYXRoIExvZ2ljKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJZiBgbWFjaGluZV9pc192bSgpYCByZXR1cm5zIGZhbHNlLCB0aGVuIHRoZSBgcHJfaXVjdmAgcG9pbnRlciBpcyBudWxsLiBBbmQgd2Uga25vdyB0aGF0IGBtYWNoaW5lX2lzX3ZtKClgIGlzIGZhbHNlIHdoZW4gd2UncmUgcnVubmluZyB1bmRlciBRRU1VLiBUaGF0IG1lYW5zIHRoZSBzcGVjaWZpYyBjb2RlIG1vZGlmaWNhdGlvbnMgbWFkZSB3aXRoaW4gYGl1Y3Zfc2V2ZXJfcGF0aGAgYXJlICpuZXZlciogcmVhY2hlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4gXG5cbkJ1dCBob2xkIG9uLi4uIGlzIHRoZXJlIGFueSBvdGhlciBwb3NzaWJsZSBwYXRoIHRvIGBpdWN2X3NldmVyX3BhdGhgIHRoYXQgY291bGQgc29tZWhvdyBzZXQgYGl1Y3YtXHUwMDNlcGF0aGA/IEkgZG9uJ3QgdGhpbmsgc28sIGJlY2F1c2UgYXMgZmFyIGFzIEkgY2FuIHNlZSwgYGl1Y3YtXHUwMDNlcGF0aGAgaXMgKm5ldmVyKiBpbml0aWFsaXplZCBhbnl3aGVyZSBpbiB0aGUgY29kZS5cblxuV2FpdCwgbGV0J3MgY29uc2lkZXIgYSBzY2VuYXJpbzogd2hhdCBpZiBgeGNoZyhcdTAwMjZpdWN2LVx1MDAzZXBhdGgsIE5VTEwpYCBpcyBjYWxsZWQgd2hlbiBgaXVjdi1cdTAwM2VwYXRoYCAqaXMqIGFscmVhZHkgTlVMTD8gVGhhdCB3b3VsZCBiZSBpbnRlcmVzdGluZy4gU2luY2UgaXQgcmV0dXJucyBOVUxMLCB0aGUgY29uZGl0aW9uYWwgYGlmICh4Y2hnKFx1MDAyNml1Y3YtXHUwMDNlcGF0aCwgTlVMTCkpYCBpcyBza2lwcGVkLCByaWdodD8gQW5kIHRoZSBwYXRjaCAqb25seSogbW9kaWZpZXMgY29kZSBpbnNpZGUgdGhhdCBgaWZgIGJsb2NrLCBtYWtpbmcgaXQgaW5hY2Nlc3NpYmxlLiBTbywgcmVnYXJkbGVzcyBvZiB0aGUgVk0gc3RhdGUsIHRoaXMgbW9kaWZpY2F0aW9uIGlzIG5ldmVyIHJlYWNoYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM1MDIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNToxMTozNi4zNzUyMDU5NTRaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzMTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzcsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMzc6XFx0XFx0dW5zaWduZWQgY2hhciB1c2VyX2RhdGFbMTZdO1xcbiAzMzg6XFx0XFx0c3RydWN0IGl1Y3Zfc29jayAqaXVjdiA9IGl1Y3Zfc2soc2spO1xcbiAzMzk6XFx0XFx0c3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCA9IGl1Y3YtXFx1MDAzZXBhdGg7XFxuIDM0MDpcXHRcXHRzdHJ1Y3Qgc29ja19tc2dfcSAqcCwgKm47XFxuIDM0MTpcXHRcXG4gMzQyOlxcdFxcdC8qIFdob2V2ZXIgcmVzZXRzIHRoZSBwYXRoIHBvaW50ZXIsIG11c3Qgc2V2ZXIgYW5kIGZyZWUgaXQuICovXFxuIDM0MzpcXHRcXHRpZiAoeGNoZyhcXHUwMDI2aXVjdi1cXHUwMDNlcGF0aCwgTlVMTCkpIHtcXG4gMzQ0OlxcdFxcdFxcdGlmICh3aXRoX3VzZXJfZGF0YSkge1xcbiAzNDU6XFx0XFx0XFx0XFx0bG93X25tY3B5KHVzZXJfZGF0YSwgaXVjdi1cXHUwMDNlc3JjX25hbWUpO1xcbiAzNDY6XFx0XFx0XFx0XFx0aGlnaF9ubWNweSh1c2VyX2RhdGEsIGl1Y3YtXFx1MDAzZWRzdF9uYW1lKTtcXG4gMzQ3OlxcdFxcdFxcdFxcdEFTQ0VCQyh1c2VyX2RhdGEsIHNpemVvZih1c2VyX2RhdGEpKTtcXG4gMzQ4OlxcdFxcdFxcdFxcdHByX2l1Y3YtXFx1MDAzZXBhdGhfc2V2ZXIocGF0aCwgdXNlcl9kYXRhKTtcXG4gMzQ5OlxcdFxcdFxcdH0gZWxzZVxcbiAzNTA6XFx0XFx0XFx0XFx0cHJfaXVjdi1cXHUwMDNlcGF0aF9zZXZlcihwYXRoLCBOVUxMKTtcXG4gMzUxOlxcdFxcdFxcdGl1Y3ZfcGF0aF9mcmVlKHBhdGgpO1xcbiAzNTI6XFx0XFxuIDM1MzpcXHRcXHRcXHQvKlxcbiAzNTQ6XFx0XFx0XFx0ICogTWVzc2FnZSBub3RpZmljYXRpb25zIHF1ZXVlZCBvbiBtZXNzYWdlX3Egc3RpbGwgcmVmZXJlbmNlXFxuIDM1NTpcXHRcXHRcXHQgKiB0aGUgbm93IGZyZWVkIHBhdGg7IGRyb3AgdGhlbSwgb3RoZXJ3aXNlIGEgbGF0ZXIgcmVjdm1zZygpXFxuIDM1NjpcXHRcXHRcXHQgKiB3b3VsZCBwYXNzIHRoZSBmcmVlZCBpdWN2X3BhdGggdG8gbWVzc2FnZV9yZWNlaXZlKCkgdmlhXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE1OjExOjM2LjM3NTM0MTE2NFoiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MzM1NzQ1NDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb24gb2YgdGhpcyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYWRkcmVzcyBhIHBvdGVudGlhbCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZSB3aXRoaW4gdGhlIGBpdWN2YCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSB3aGVuIGEgcGF0aCBpcyBmcmVlZC4gVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGludm9sdmVzIGNsZWFyaW5nIGEgbWVzc2FnZSBxdWV1ZSAoYGl1Y3YtXHUwMDNlbWVzc2FnZV9xYCkgYWZ0ZXIgdGhlIGBpdWN2LVx1MDAzZXBhdGhgIGlzIHNldCB0byBgTlVMTGAuIFRoZSBjb2RlIHNuaXBwZXQgY2xlYXJseSBzaG93cyB0aGlzIG9wZXJhdGlvbiB3aXRoaW4gYW4gYGlmICh4Y2hnKFx1MDAyNml1Y3YtXHUwMDNlcGF0aCwgTlVMTCkpYCBibG9jay4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBuZXZlciBleGVjdXRlZCBpbiB0aGUgZW52aXJvbm1lbnRzIEkgdHlwaWNhbGx5IGRlYWwgd2l0aCwgbGlrZSBRRU1VIG9yIEdDRSwgYmVjYXVzZSB0aGUgYGl1Y3YtXHUwMDNlcGF0aGAgaXMgYWx3YXlzIE5VTEwgaW4gdGhvc2Ugc2NlbmFyaW9zLiBUaGlzIHN1Z2dlc3RzIHRoZSBwYXRjaCB0YXJnZXRzIGFuIHVucmVhY2hhYmxlIGNvZGUgcGF0aCBpbiB0aGVzZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXG5cbk5vdywgd2FpdCBhIHNlY29uZC4gSXMgdGhlcmUgZXZlbiBhIHdheSB0byBydW4gei9WTSAqaW5zaWRlKiBRRU1VPyBObywgdGhhdCdzIGEgcHJvcHJpZXRhcnkgSUJNIGh5cGVydmlzb3IsIGFuZCBRRU1VIGRvZXNuJ3QgZW11bGF0ZSBpdC4gT2theSwgc28gd2Uga25vdyB0aGF0IHBhcnQuIENvdWxkIHdlIHNvbWVob3cgKmZha2UqIGBtYWNoaW5lX2lzX3ZtKClgIHRvIHRyaWdnZXIgdGhpcyBjb2RlPyBObywgdGhlIGNvZGUgY2hlY2tzIHRoZSBDUFUgSUQgaW5zdHJ1Y3Rpb24gKFNUU0kgb3Igc2ltaWxhcikgdG8gZGV0ZWN0IEtWTSBvciBRRU1VLCBzbyB0aGF0J3MgYSBkZWFkIGVuZC4gQWgsIGJ1dCB3YWl0LCBgZGV0ZWN0X21hY2hpbmVfdHlwZWAgdXNlcyBgc3RzaWAgdG8gZ2V0IHRoZSBWTSBpbmZvcm1hdGlvbuKApiBTbywgY291bGQgd2UgcG90ZW50aWFsbHkgcGFzcyBhIGZsYWcgdG8gUUVNVSB0byAqc3Bvb2YqIHRoZSBDUEkgKENvbnRyb2wgUHJvZ3JhbSBJZGVudGlmaWNhdGlvbikgYW5kIHByZXRlbmQgd2UncmUgei9WTT8gVGhhdCAqbWlnaHQqIGJlIHBvc3NpYmxlLCBidXQgbXkgc3RhbmRhcmQgc3l6a2FsbGVyIGVudmlyb25tZW50cyBkb24ndCBkbyBhbnl0aGluZyBsaWtlIHRoYXQuXG5cblRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IG1lbnRpb25zIFwiaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZVwiLiBTaW5jZSB0aGlzIHJlcXVpcmVzIHovVk0gYW5kIGNhbid0IGJlIHJlYWNoZWQgaW4gc3RhbmRhcmQgUUVNVS9LVk0gZW52aXJvbm1lbnRzLCBpdCAqZG9lcyogZmFsbCB1bmRlciB0aGUgXCJpbXBvc3NpYmxlIHRvIHJlYWNoXCIgY2F0ZWdvcnkgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGNvbnRleHQuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBvbmUgdGhpbmcuIENhbiBgQUZfSVVDVmAgZXZlbiBiZSB1c2VkIG92ZXIgSGlwZXJTb2NrZXRzLCBhbmQgaWYgc28sIGRvZXMgaXQgdXNlIHRoZSBgbWVzc2FnZV9xYD8gSWYgYEFGX0lVQ1ZgIHVzZXMgSGlwZXJTb2NrZXRzLCBgaXVjdi1cdTAwM2V0cmFuc3BvcnRgIHNob3VsZCBiZSBgQUZfSVVDVl9UUkFOU19ISVBFUmAsIGJ1dCBJJ2xsIG5lZWQgdG8gY29uZmlybSBpZiB0aGF0IGNvZGUgcGF0aCBldmVuIHRvdWNoZXMgdGhlIGBtZXNzYWdlX3FgLiBUaW1lIHRvIGRvdWJsZSBjaGVjayB0aGUgY29kZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDM5NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE1OjExOjQ1LjcxMTA5MDUxWiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDUzMzg0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVzc2FnZV9xXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmM9MzM1PXN0YXRpYyB2b2lkIGl1Y3Zfc2V2ZXJfcGF0aChzdHJ1Y3Qgc29jayAqc2ssIGludCB3aXRoX3VzZXJfZGF0YSlcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNTMtXFx0XFx0LypcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MzU0OlxcdFxcdCAqIE1lc3NhZ2Ugbm90aWZpY2F0aW9ucyBxdWV1ZWQgb24gbWVzc2FnZV9xIHN0aWxsIHJlZmVyZW5jZVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNTUtXFx0XFx0ICogdGhlIG5vdyBmcmVlZCBwYXRoOyBkcm9wIHRoZW0sIG90aGVyd2lzZSBhIGxhdGVyIHJlY3Ztc2coKVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNTYtXFx0XFx0ICogd291bGQgcGFzcyB0aGUgZnJlZWQgaXVjdl9wYXRoIHRvIG1lc3NhZ2VfcmVjZWl2ZSgpIHZpYVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzozNTc6XFx0XFx0ICogaXVjdl9wcm9jZXNzX21lc3NhZ2VfcSgpLlxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNTgtXFx0XFx0ICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjM1OTpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNml1Y3YtXFx1MDAzZW1lc3NhZ2VfcS5sb2NrKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MzYwOlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuLCBcXHUwMDI2aXVjdi1cXHUwMDNlbWVzc2FnZV9xLmxpc3QsIGxpc3QpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzYxLVxcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZwLVxcdTAwM2VsaXN0KTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zNjMtXFx0XFx0fVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzozNjQ6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNml1Y3YtXFx1MDAzZW1lc3NhZ2VfcS5sb2NrKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzY1LVxcdH1cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz00NjY9c3RhdGljIHN0cnVjdCBzb2NrICppdWN2X3NvY2tfYWxsb2Moc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvLCBnZnBfdCBwcmlvLCBpbnQga2VybilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy00NzktXFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2aXVjdi1cXHUwMDNlc2VuZF9za2JfcSk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjQ4MDpcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2aXVjdi1cXHUwMDNlbWVzc2FnZV9xLmxpc3QpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzo0ODE6XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNml1Y3YtXFx1MDAzZW1lc3NhZ2VfcS5sb2NrKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDgyLVxcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNml1Y3YtXFx1MDAzZWJhY2tsb2dfc2tiX3EpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTExMjY9c3RhdGljIHN0cnVjdCBza19idWZmICphbGxvY19pdWN2X3JlY3Zfc2tiKHVuc2lnbmVkIGxvbmcgbGVuKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTExNTUtICpcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTE1NjogKiBMb2NraW5nOiBtdXN0IGJlIGNhbGxlZCB3aXRoIG1lc3NhZ2VfcS5sb2NrIGhlbGRcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTE1Ny0gKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTE1OD1zdGF0aWMgdm9pZCBpdWN2X3Byb2Nlc3NfbWVzc2FnZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTIxNC1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTIxNTovKiBpdWN2X3Byb2Nlc3NfbWVzc2FnZV9xKCkgLSBQcm9jZXNzIG91dHN0YW5kaW5nIElVQ1YgbWVzc2FnZXNcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTIxNi0gKlxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMjE3OiAqIExvY2tpbmc6IG11c3QgYmUgY2FsbGVkIHdpdGggbWVzc2FnZV9xLmxvY2sgaGVsZFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMjE4LSAqL1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMjE5OnN0YXRpYyB2b2lkIGl1Y3ZfcHJvY2Vzc19tZXNzYWdlX3Eoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMjIwLXtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMjI0LVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMjI1OlxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuLCBcXHUwMDI2aXVjdi1cXHUwMDNlbWVzc2FnZV9xLmxpc3QsIGxpc3QpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTIyNi1cXHRcXHRza2IgPSBhbGxvY19pdWN2X3JlY3Zfc2tiKGl1Y3ZfbXNnX2xlbmd0aChcXHUwMDI2cC1cXHUwMDNlbXNnKSk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTIzNz1zdGF0aWMgaW50IGl1Y3Zfc29ja19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMjQ5LVxcdCAgICBza2JfcXVldWVfZW1wdHkoXFx1MDAyNnNrLVxcdTAwM2Vza19yZWNlaXZlX3F1ZXVlKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMjUwOlxcdCAgICBsaXN0X2VtcHR5KFxcdTAwMjZpdWN2LVxcdTAwM2VtZXNzYWdlX3EubGlzdCkpXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEyNTEtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTMxOC1cXHRcXHQvKiBRdWV1ZSBiYWNrbG9nIHNrYnMgKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTMxOTpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNml1Y3YtXFx1MDAzZW1lc3NhZ2VfcS5sb2NrKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTMyMC1cXHRcXHRyc2tiID0gc2tiX2RlcXVldWUoXFx1MDAyNml1Y3YtXFx1MDAzZWJhY2tsb2dfc2tiX3EpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEzMzEtXFx0XFx0aWYgKHNrYl9xdWV1ZV9lbXB0eShcXHUwMDI2aXVjdi1cXHUwMDNlYmFja2xvZ19za2JfcSkpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTMzMjpcXHRcXHRcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNml1Y3YtXFx1MDAzZW1lc3NhZ2VfcS5saXN0KSlcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTMzMzpcXHRcXHRcXHRcXHRpdWN2X3Byb2Nlc3NfbWVzc2FnZV9xKHNrKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTMzNC1cXHRcXHRcXHRpZiAoYXRvbWljX3JlYWQoXFx1MDAyNml1Y3YtXFx1MDAzZW1zZ19yZWN2KSBcXHUwMDNlPVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEzNDItXFx0XFx0fVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMzQzOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZpdWN2LVxcdTAwM2VtZXNzYWdlX3EubG9jayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEzNDQtXFx0fVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTE3MTI9c3RhdGljIHZvaWQgaXVjdl9jYWxsYmFja19yeChzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLCBzdHJ1Y3QgaXVjdl9tZXNzYWdlICptc2cpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTcyNC1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTcyNTpcXHRzcGluX2xvY2soXFx1MDAyNml1Y3YtXFx1MDAzZW1lc3NhZ2VfcS5sb2NrKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTcyNi1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTcyNzpcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNml1Y3YtXFx1MDAzZW1lc3NhZ2VfcS5saXN0KSB8fFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNzI4LVxcdCAgICAhc2tiX3F1ZXVlX2VtcHR5KFxcdTAwMjZpdWN2LVxcdTAwM2ViYWNrbG9nX3NrYl9xKSlcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNzQ5LVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNzUwOlxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnNhdmVfbXNnLVxcdTAwM2VsaXN0LCBcXHUwMDI2aXVjdi1cXHUwMDNlbWVzc2FnZV9xLmxpc3QpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNzUxLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNzUyLW91dF91bmxvY2s6XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE3NTM6XFx0c3Bpbl91bmxvY2soXFx1MDAyNml1Y3YtXFx1MDAzZW1lc3NhZ2VfcS5sb2NrKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTc1NC19XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjAxMT1zdGF0aWMgaW50IGFmaXVjdl9oc19jYWxsYmFja19yeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA0MC1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjA0MTpcXHRzcGluX2xvY2soXFx1MDAyNml1Y3YtXFx1MDAzZW1lc3NhZ2VfcS5sb2NrKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA0Mi1cXHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFxcdTAwMjZpdWN2LVxcdTAwM2ViYWNrbG9nX3NrYl9xKSkge1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwNDctXFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNml1Y3Zfc2soc2spLVxcdTAwM2ViYWNrbG9nX3NrYl9xLCBza2IpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMDQ4OlxcdHNwaW5fdW5sb2NrKFxcdTAwMjZpdWN2LVxcdTAwM2VtZXNzYWdlX3EubG9jayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwNDktXFx0cmV0dXJuIE5FVF9SWF9TVUNDRVNTO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNToxMTo0NS44MTY0MzUxOVoiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NjI5NDQ0OTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSVVDViBNZXNzYWdpbmcgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIHRoYXQgYG1lc3NhZ2VfcWAgaXMgdGhlIGNyaXRpY2FsIGRhdGEgc3RydWN0dXJlLCBhbmQgaXQncyBiZWluZyB1c2VkIGZvciBib3RoIGBBRl9JVUNWX1RSQU5TX0lVQ1ZgIGFuZCBgQUZfSVVDVl9UUkFOU19ISVBFUmAsIHdoaWNoIGlzIHRoZSBmaXJzdCBwb2ludCBvZiBpbnRlcmVzdC4gQSBxdWljayBnbGFuY2UgYXQgYGFmaXVjdl9oc19jYWxsYmFja19yeGAgcmV2ZWFscyBpdCB1c2VzIHRoZSBsb2NrIG9uIGBtZXNzYWdlX3FgIGFuZCBgYmFja2xvZ19za2JfcWAsIGJ1dCBub3QgdGhlIGxpc3QgaXRzZWxmLiBJbnRlcmVzdGluZy4gVGhlIGBtZXNzYWdlX3EubGlzdGAsIG9uIHRoZSBvdGhlciBoYW5kLCBzZWVtcyB0byBiZSBleGNsdXNpdmVseSB1c2VkIGluIGBpdWN2X2NhbGxiYWNrX3J4YCwgd2hpY2ggaXMgdGllZCBkaXJlY3RseSB0byBgQUZfSVVDVl9UUkFOU19JVUNWYC5cblxuVGhlbiBJIHNlZSB0aGlzIHBhdGNoLCBhbmQgaXQgZXhwbGljaXRseSBjbGVhcnMgYG1lc3NhZ2VfcS5saXN0YCwgdXNpbmcgYSBzcGlubG9jayB0byBwcm90ZWN0IGl0OlxuXG5gYGBjXG4rXHRcdHNwaW5fbG9ja19iaChcdTAwMjZpdWN2LVx1MDAzZW1lc3NhZ2VfcS5sb2NrKTtcbitcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG4sIFx1MDAyNml1Y3YtXHUwMDNlbWVzc2FnZV9xLmxpc3QsIGxpc3QpIHtcbitcdFx0XHRsaXN0X2RlbChcdTAwMjZwLVx1MDAzZWxpc3QpO1xuK1x0XHRcdGtmcmVlKHApO1xuK1x0XHR9XG4rXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNml1Y3YtXHUwMDNlbWVzc2FnZV9xLmxvY2spO1xuYGBgXG5cbk9rYXksIHNvIHRoZSBwYXRjaCBpcyBmb2N1c2luZyBvbiBjbGVhcmluZyB0aGUgbGlzdCwgd2hpY2ggc3VnZ2VzdHMgaXQncyBwcmltYXJpbHkgY29uY2VybmVkIHdpdGggdGhlIGBBRl9JVUNWX1RSQU5TX0lVQ1ZgIHBhdGguIEFuZCBub3cgSSBuZWVkIHRvIGFuYWx5emUgYGl1Y3Zfc2V2ZXJfcGF0aGAuIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgd2hlbiBgeGNoZyhcdTAwMjZpdWN2LVx1MDAzZXBhdGgsIE5VTEwpYCByZXR1cm5zIG5vbi1OVUxMLiBDcml0aWNhbGx5LCBgaXVjdi1cdTAwM2VwYXRoYCBpcyAqb25seSogc2V0IGZvciBgQUZfSVVDVl9UUkFOU19JVUNWYC4gU28sIGV2ZW4gaWYgYG1lc3NhZ2VfcWAgd2VyZSBzb21laG93IHVzZWQgZm9yIEhJUEVSLCB3aGljaCBpdCBpc24ndCBjb21wbGV0ZWx5LCBgaXVjdl9zZXZlcl9wYXRoYCB3b3VsZCBkbyBub3RoaW5nIGluIHRoYXQgY2FzZSBiZWNhdXNlIGBpdWN2LVx1MDAzZXBhdGhgIGlzIE5VTEwuXG5cblRoZXJlZm9yZSwgdGhpcyBlbnRpcmUgY29kZSBtb2RpZmljYXRpb24gaXMgKnN0cmljdGx5KiB0YXJnZXRlZCBhdCBgQUZfSVVDVl9UUkFOU19JVUNWYCwgYW5kIGJ5IGV4dGVuc2lvbiwgdGhhdCdzIHovVk0gc3BlY2lmaWMuIE5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIG9uZSB0aGluZy4gSXMgdGhlcmUgYW55IHNjZW5hcmlvIHdoZXJlIGBpdWN2LVx1MDAzZXBhdGhgIGNvdWxkIGJlIHNldCB3aXRob3V0IGBwcl9pdWN2YCBiZWluZyBub24tTlVMTD8gSSBuZWVkIHRvIGxvb2sgYXQgYGl1Y3ZfcGF0aF9hbGxvY2AgdG8gYmUgY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc3MjEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTU6MTE6NTUuNDQ1ODg0OTM1WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTIzNzA3NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXVjdl9wYXRoX2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmM9Njg3PXN0YXRpYyBpbnQgYWZpdWN2X3BhdGhfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy02OTktXFx0LyogQ3JlYXRlIHBhdGguICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjcwMDpcXHRpdWN2LVxcdTAwM2VwYXRoID0gaXVjdl9wYXRoX2FsbG9jKGl1Y3YtXFx1MDAzZW1zZ2xpbWl0LFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03MDEtXFx0XFx0XFx0XFx0ICAgICBJVUNWX0lQUk1EQVRBLCBHRlBfS0VSTkVMKTtcXG4tLVxcbm5ldC9pdWN2L2l1Y3YuYz0xNDY4PXN0YXRpYyB2b2lkIGl1Y3ZfcGF0aF9wZW5kaW5nKHN0cnVjdCBpdWN2X2lycV9kYXRhICpkYXRhKVxcbi0tXFxubmV0L2l1Y3YvaXVjdi5jLTE0NzctXFx0ZXJyb3IgPSBpdWN2X2Vycm9yX25vX21lbW9yeTtcXG5uZXQvaXVjdi9pdWN2LmM6MTQ3ODpcXHRwYXRoID0gaXVjdl9wYXRoX2FsbG9jKGlwcC1cXHUwMDNlaXBtc2dsaW0sIGlwcC1cXHUwMDNlaXBmbGFnczEsIEdGUF9BVE9NSUMpO1xcbm5ldC9pdWN2L2l1Y3YuYy0xNDc5LVxcdGlmICghcGF0aClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTU6MTE6NTUuNTU4MjYyNTM1WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkzMjc2MTEzNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5yZWFjaGFibGUgQ29kZSBBbmFseXNpcyoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIGBpdWN2X3BhdGhfYWxsb2NgIGlzIGRlZmluZWQgaW4gYG5ldC9pdWN2L2l1Y3YuY2AuIEhvd2V2ZXIsIHRoZSBvbmx5IGNhbGwgc2l0ZSB3aXRoaW4gYGFmX2l1Y3YuY2AgaXMgYGFmaXVjdl9wYXRoX2Nvbm5lY3RgLiBOb3csIGBhZml1Y3ZfcGF0aF9jb25uZWN0YCBpcyBvbmx5IGVudGVyZWQgaWYgYGl1Y3YtXHUwMDNldHJhbnNwb3J0YCBpc24ndCBgQUZfSVVDVl9UUkFOU19ISVBFUmAuIEFuZCB0aGF0IHNwZWNpZmljIGNvbmRpdGlvbiAoYCE9IEFGX0lVQ1ZfVFJBTlNfSElQRVJgKSBpcyBvbmx5IG1ldCBpZiBgcHJfaXVjdmAgaGFzIGEgdmFsdWUuIFRoZW4sIGBwcl9pdWN2YCBnZXRzIGFzc2lnbmVkIGEgdmFsdWUgb25seSBpZiBgbWFjaGluZV9pc192bSgpYCByZXR1cm5zIHRydWUuIEZpbmFsbHksIGFuZCB0aGlzIGlzIGtleSwgYG1hY2hpbmVfaXNfdm0oKWAgaXMgb25seSB0cnVlIGlmIHdlJ3JlIHJ1bm5pbmcgdW5kZXIgei9WTS5cblxuTm93LCBob2xkIG9uLi4uIGNhbiBRRU1VIGVtdWxhdGUgei9WTT8gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4gV2hpbGUgUUVNVSdzIHMzOTB4IHRhcmdldCBjZXJ0YWlubHkgZW11bGF0ZXMgei9BcmNoaXRlY3R1cmUsIGl0IHV0aWxpemVzIGVpdGhlciBLVk0gb3IgaXRzIG93biBUQ0cgZm9yIHRoZSBoeXBlcnZpc29yLiBUaGUgY3J1Y2lhbCBwaWVjZSBpcyB0aGF0IHRoZSBgbWFjaGluZV9pc192bSgpYCBmdW5jdGlvbiByZWxpZXMgb24gdGhlIFwiei9WTVwiIHN0cmluZyB3aXRoaW4gdGhlIENvbnRyb2wgUHJvZ3JhbSBJZGVudGlmaWNhdGlvbiAoQ1BJKSBvYnRhaW5lZCB2aWEgdGhlIFNUU0kgaW5zdHJ1Y3Rpb24uIEJ1dCBRRU1VIGFuZCBLVk0gcmV0dXJuIFwiS1ZNL1wiIG9yIFwiUUVNVVwiIGluIHRoZWlyIENQSSByZXNwb25zZXMuIFRoZXJlZm9yZSwgYG1hY2hpbmVfaXNfdm0oKWAgd2lsbCByZXR1cm4gZmFsc2UuXG5cblRoZXJlZm9yZSwgdGhpcyBjb2RlIHBhdGggdGhhdCB3YXMgbW9kaWZpZWQgaXMgY29tcGxldGVseSB1bnJlYWNoYWJsZSBpbiBhbnkgb2Ygb3VyIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLCBuYW1lbHkgUUVNVS9LVk0uIE5vIHBvaW50IGluIHRyeWluZyB0byBmdXp6IGNvZGUgdGhhdCB3b24ndCBydW4sIGFzIHRoZSBwYXRjaCBpcyBvbmx5IHRhcmdldGVkIGF0IHRoZSB6L1ZNIGh5cGVydmlzb3IuXG5JIGFtIHJldHVybmluZyBgV29ydGhGdXp6aW5nPWZhbHNlYCBiYXNlZCBvbiB0aGUgYWJvdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4OTk4LCJPdXRwdXRUb2tlbnMiOjIwNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxNToxMjowNC44ODU4NzY3NjJaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaXVjdl9zZXZlcl9wYXRoYCBpbiBgYWZfaXVjdi5jYCB0byBjbGVhciB0aGUgYG1lc3NhZ2VfcWAgbGlzdC4gSG93ZXZlciwgdGhpcyBmdW5jdGlvbiBvbmx5IGV4ZWN1dGVzIGl0cyBsb2dpYyBpZiBgaXVjdi1cXHUwMDNlcGF0aGAgaXMgbm9uLU5VTEwuIGBpdWN2LVxcdTAwM2VwYXRoYCBpcyBvbmx5IGFsbG9jYXRlZCB3aGVuIHRoZSB0cmFuc3BvcnQgaXMgYEFGX0lVQ1ZfVFJBTlNfSVVDVmAsIHdoaWNoIGluIHR1cm4gaXMgb25seSBzZWxlY3RlZCBpZiBgcHJfaXVjdmAgaXMgbm9uLU5VTEwuIGBwcl9pdWN2YCBpcyBpbml0aWFsaXplZCBvbmx5IHdoZW4gYG1hY2hpbmVfaXNfdm0oKWAgaXMgdHJ1ZSwgbWVhbmluZyB0aGUga2VybmVsIG11c3QgYmUgcnVubmluZyB1bmRlciB0aGUgcHJvcHJpZXRhcnkgSUJNIHovVk0gaHlwZXJ2aXNvci4gU2luY2UgUUVNVS9LVk0gZW52aXJvbm1lbnRzIGRvIG5vdCBlbXVsYXRlIHovVk0gKHRoZXkgaWRlbnRpZnkgYXMgS1ZNIG9yIFFFTVUpLCB0aGlzIGNvZGUgcGF0aCBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGl1Y3Zfc2V2ZXJfcGF0aGAgaW4gYGFmX2l1Y3YuY2AgdG8gY2xlYXIgdGhlIGBtZXNzYWdlX3FgIGxpc3QuIEhvd2V2ZXIsIHRoaXMgZnVuY3Rpb24gb25seSBleGVjdXRlcyBpdHMgbG9naWMgaWYgYGl1Y3YtXFx1MDAzZXBhdGhgIGlzIG5vbi1OVUxMLiBgaXVjdi1cXHUwMDNlcGF0aGAgaXMgb25seSBhbGxvY2F0ZWQgd2hlbiB0aGUgdHJhbnNwb3J0IGlzIGBBRl9JVUNWX1RSQU5TX0lVQ1ZgLCB3aGljaCBpbiB0dXJuIGlzIG9ubHkgc2VsZWN0ZWQgaWYgYHByX2l1Y3ZgIGlzIG5vbi1OVUxMLiBgcHJfaXVjdmAgaXMgaW5pdGlhbGl6ZWQgb25seSB3aGVuIGBtYWNoaW5lX2lzX3ZtKClgIGlzIHRydWUsIG1lYW5pbmcgdGhlIGtlcm5lbCBtdXN0IGJlIHJ1bm5pbmcgdW5kZXIgdGhlIHByb3ByaWV0YXJ5IElCTSB6L1ZNIGh5cGVydmlzb3IuIFNpbmNlIFFFTVUvS1ZNIGVudmlyb25tZW50cyBkbyBub3QgZW11bGF0ZSB6L1ZNICh0aGV5IGlkZW50aWZ5IGFzIEtWTSBvciBRRU1VKSwgdGhpcyBjb2RlIHBhdGggaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd9rq8[1] Phase: Running StartedAt: 2026-07-07 15:12:59 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd9rq8[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-07 15:12:59 +0000 UTC FinishedAt: 2026-07-07 15:13:11 +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,}