Name: series-workflow9f9tg Phase: Succeeded StartedAt: 2026-08-04 22:07:35 +0000 UTC FinishedAt: 2026-08-05 02:35:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9f9tg[0] Phase: Succeeded StartedAt: 2026-08-04 22:07:35 +0000 UTC FinishedAt: 2026-08-04 22:46:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9f9tg[0].run-triage Phase: Succeeded StartedAt: 2026-08-04 22:07:35 +0000 UTC FinishedAt: 2026-08-04 22:46:53 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "fe6568ca989d7625447625db8562bebbe5be054a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "XFS_FS", "BTRFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "fe6568ca989d7625447625db8562bebbe5be054a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "XFS_FS", "BTRFS_FS" ], "series_id": "a9bada05-945c-42a8-b7e0-1c0619574dbe" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "__iomap_dio_rw", "iomap_dio_rw" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": { "findings": [ "c9f79a18-3316-44ec-b805-b805b1c49325", "8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536" ] } } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7WEZTX0ZTJiMzNDssCiAgICAmIzM0O0JUUkZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19pb21hcF9kaW9fcncmIzM0OywKICAgICYjMzQ7aW9tYXBfZGlvX3J3JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBiZWhhdmlvciBvZiBgaW9tYXBfZGlvX2hvbGVfaXRlcmAgdG8gY29ycmVjdGx5IGFsaWduIHRoZSBjb3BpZWQgbGVuZ3RoIHRvIHRoZSBmaWxlc3lzdGVtIGJsb2NrIHNpemUgd2hlbiByZWFkaW5nIGZyb20gYSBob2xlIG9yIHVud3JpdHRlbiBleHRlbnQgdXNpbmcgZGlyZWN0IEkvTy4gVGhpcyBwcmV2ZW50cyBpc3N1ZXMgd2hlcmUgcGFnZSBmYXVsdCBmYWlsdXJlcyBjb3VsZCByZXN1bHQgaW4gbGVuZ3RocyB0aGF0IGFyZSBwYWdlLWFsaWduZWQgYnV0IG5vdCBibG9jay1hbGlnbmVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgaW9tYXAgZGlyZWN0IEkvTyBwYXRoLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjQ1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYmRkMzI3MTM3MjRiMzU3NDZiNGEzOTUxMmQ0NTBmYjIyM2NlZTMzZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDQgMjI6NDU6MzcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvaW9tYXAvZGlyZWN0LWlvLmMgYi9mcy9pb21hcC9kaXJlY3QtaW8uY1xuaW5kZXggYjMzNjhkNjRlODFiYi4uMDFmMjZmYjNiM2IyYyAxMDA2NDRcbi0tLSBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9pb21hcC9kaXJlY3QtaW8uY1xuQEAgLTU5NCwxMiAmIzQzOzU5NCwxOSBAQCBzdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuIFxuIHN0YXRpYyBpbnQgaW9tYXBfZGlvX2hvbGVfaXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuIHtcbi1cdGxvZmZfdCBsZW5ndGggPSBpb3ZfaXRlcl96ZXJvKGlvbWFwX2xlbmd0aChpdGVyKSwgZGlvLVx1MDAzZXN1Ym1pdC5pdGVyKTtcbiYjNDM7XHRsb2ZmX3QgY29waWVkID0gaW92X2l0ZXJfemVybyhpb21hcF9sZW5ndGgoaXRlciksIGRpby1cdTAwM2VzdWJtaXQuaXRlcik7XG4mIzQzO1x0dW5zaWduZWQgaW50IGJzID0gaV9ibG9ja3NpemUoaXRlci1cdTAwM2Vpbm9kZSk7XG4mIzQzO1x0bG9mZl90IGFsaWduZWRfY29waWVkID0gcm91bmRfZG93bihjb3BpZWQsIGJzKTtcbiBcbi1cdGRpby1cdTAwM2VzaXplICYjNDM7PSBsZW5ndGg7XG4tXHRpZiAoIWxlbmd0aClcbiYjNDM7XHQvKlxuJiM0MztcdCAqIElmIGZzIGJsb2NrIHNpemUgaXMgbGFyZ2VyIHRoYW4gcGFnZSBzaXplLCBwYWdlIGZhdWx0IGZhaWx1cmVcbiYjNDM7XHQgKiBjYW4gY2F1c2UgQGNvcGllZCB0byBiZSBwYWdlIGFsaWduZWQgYnV0IG5vdCBmcyBibG9jayBhbGlnbmVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGlvdl9pdGVyX3JldmVydChkaW8tXHUwMDNlc3VibWl0Lml0ZXIsIGNvcGllZCAtIGFsaWduZWRfY29waWVkKTtcbiYjNDM7XHRkaW8tXHUwMDNlc2l6ZSAmIzQzOz0gYWxpZ25lZF9jb3BpZWQ7XG4mIzQzO1x0aWYgKCFhbGlnbmVkX2NvcGllZClcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4tXHRyZXR1cm4gaW9tYXBfaXRlcl9hZHZhbmNlKGl0ZXIsIGxlbmd0aCk7XG4mIzQzO1x0cmV0dXJuIGlvbWFwX2l0ZXJfYWR2YW5jZShpdGVyLCBhbGlnbmVkX2NvcGllZCk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgaW9tYXBfZGlvX2lubGluZV9pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppb21pLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjI6NDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7WEZTX0ZTJiMzNDssCiAgICAmIzM0O0JUUkZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19pb21hcF9kaW9fcncmIzM0OywKICAgICYjMzQ7aW9tYXBfZGlvX3J3JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBiZWhhdmlvciBvZiBgaW9tYXBfZGlvX2hvbGVfaXRlcmAgdG8gY29ycmVjdGx5IGFsaWduIHRoZSBjb3BpZWQgbGVuZ3RoIHRvIHRoZSBmaWxlc3lzdGVtIGJsb2NrIHNpemUgd2hlbiByZWFkaW5nIGZyb20gYSBob2xlIG9yIHVud3JpdHRlbiBleHRlbnQgdXNpbmcgZGlyZWN0IEkvTy4gVGhpcyBwcmV2ZW50cyBpc3N1ZXMgd2hlcmUgcGFnZSBmYXVsdCBmYWlsdXJlcyBjb3VsZCByZXN1bHQgaW4gbGVuZ3RocyB0aGF0IGFyZSBwYWdlLWFsaWduZWQgYnV0IG5vdCBibG9jay1hbGlnbmVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgaW9tYXAgZGlyZWN0IEkvTyBwYXRoLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmRkMzI3MTM3MjRiMzU3NDZiNGEzOTUxMmQ0NTBmYjIyM2NlZTMzZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDQgMjI6NDU6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9pb21hcC9kaXJlY3QtaW8uYyBiL2ZzL2lvbWFwL2RpcmVjdC1pby5jCmluZGV4IGIzMzY4ZDY0ZTgxYmIuLjAxZjI2ZmIzYjNiMmMgMTAwNjQ0Ci0tLSBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2lvbWFwL2RpcmVjdC1pby5jCkBAIC01OTQsMTIgJiM0Mzs1OTQsMTkgQEAgc3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbykKIAogc3RhdGljIGludCBpb21hcF9kaW9faG9sZV9pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pCiB7Ci0JbG9mZl90IGxlbmd0aCA9IGlvdl9pdGVyX3plcm8oaW9tYXBfbGVuZ3RoKGl0ZXIpLCBkaW8tJmd0O3N1Ym1pdC5pdGVyKTsKJiM0MzsJbG9mZl90IGNvcGllZCA9IGlvdl9pdGVyX3plcm8oaW9tYXBfbGVuZ3RoKGl0ZXIpLCBkaW8tJmd0O3N1Ym1pdC5pdGVyKTsKJiM0MzsJdW5zaWduZWQgaW50IGJzID0gaV9ibG9ja3NpemUoaXRlci0mZ3Q7aW5vZGUpOwomIzQzOwlsb2ZmX3QgYWxpZ25lZF9jb3BpZWQgPSByb3VuZF9kb3duKGNvcGllZCwgYnMpOwogCi0JZGlvLSZndDtzaXplICYjNDM7PSBsZW5ndGg7Ci0JaWYgKCFsZW5ndGgpCiYjNDM7CS8qCiYjNDM7CSAqIElmIGZzIGJsb2NrIHNpemUgaXMgbGFyZ2VyIHRoYW4gcGFnZSBzaXplLCBwYWdlIGZhdWx0IGZhaWx1cmUKJiM0MzsJICogY2FuIGNhdXNlIEBjb3BpZWQgdG8gYmUgcGFnZSBhbGlnbmVkIGJ1dCBub3QgZnMgYmxvY2sgYWxpZ25lZC4KJiM0MzsJICovCiYjNDM7CWlvdl9pdGVyX3JldmVydChkaW8tJmd0O3N1Ym1pdC5pdGVyLCBjb3BpZWQgLSBhbGlnbmVkX2NvcGllZCk7CiYjNDM7CWRpby0mZ3Q7c2l6ZSAmIzQzOz0gYWxpZ25lZF9jb3BpZWQ7CiYjNDM7CWlmICghYWxpZ25lZF9jb3BpZWQpCiAJCXJldHVybiAtRUZBVUxUOwotCXJldHVybiBpb21hcF9pdGVyX2FkdmFuY2UoaXRlciwgbGVuZ3RoKTsKJiM0MzsJcmV0dXJuIGlvbWFwX2l0ZXJfYWR2YW5jZShpdGVyLCBhbGlnbmVkX2NvcGllZCk7CiB9CiAKIHN0YXRpYyBpbnQgaW9tYXBfZGlvX2lubGluZV9pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppb21pLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyOTMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEaXJlY3QgSU8gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGZzL2lvbWFwL2RpcmVjdC1pby5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgaW9tYXBfZGlvX2hvbGVfaXRlcmAgZnVuY3Rpb24uIEZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGUgY29yZSBjaGFuZ2UgZm9jdXNlcyBvbiBob3cgYGlvdl9pdGVyX3plcm9gIGlzIGhhbmRsZWQsIGFkanVzdGluZyB0aGUgY29waWVkIGxlbmd0aCB0byBtYXRjaCB0aGUgYmxvY2sgc2l6ZS4gU2VlbXMgZnVuY3Rpb25hbCwgYW5kIGRlZmluaXRlbHkgYWZmZWN0cyBkaXJlY3QgSU8gd2l0aGluIHRoZSBpb21hcCBmcmFtZXdvcmsuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBlbmFibGVzIGFuZCBjb250cm9scyB0aGlzIGJlaGF2aW9yLgoKTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uJiMzOTtzIGltbWVkaWF0ZSBjb250ZXh0LiBUaW1lIHRvIHB1bGwgb3V0IGBncmVwYCBhbmQgc2VlIHdoZXJlIGBpb21hcF9kaW9faG9sZV9pdGVyYCBpcyBhY3R1YWxseSAqdXNlZCouIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb25zIHRoYXQgYXJlIGltcGFjdGVkIGFuZCB0aGUgb3ZlcmFsbCBzY29wZSBvZiB0aGlzIGNoYW5nZS4gT25jZSBJIHNlZSB0aGUgY29udGV4dHMsIEkgY2FuIGRldGVybWluZSB0aGUgaW1wYWN0IG9mIHRoZSBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb21hcF9kaW9faG9sZV9pdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmM9NDE1PXN0YXRpYyBpbnQgaW9tYXBfZGlvX2Jpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNTk0LVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NTk1OnN0YXRpYyBpbnQgaW9tYXBfZGlvX2hvbGVfaXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNTk2LXtcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYz02NDQ9c3RhdGljIGludCBpb21hcF9kaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY0OS1cdFx0XHRyZXR1cm4gLUVJTztcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjY1MDpcdFx0cmV0dXJuIGlvbWFwX2Rpb19ob2xlX2l0ZXIoaXRlciwgZGlvKTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY1MS1cdGNhc2UgSU9NQVBfVU5XUklUVEVOOlxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjUyLVx0XHRpZiAoIShkaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IElPTUFQX0RJT19XUklURSkpXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo2NTM6XHRcdFx0cmV0dXJuIGlvbWFwX2Rpb19ob2xlX2l0ZXIoaXRlciwgZGlvKTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY1NC1cdFx0cmV0dXJuIGlvbWFwX2Rpb19iaW9faXRlcihpdGVyLCBkaW8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMjAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbHJlYWR5IHF1aXRlIGZhbWlsaWFyIHdpdGggSS9PIG1hcHBpbmcgYW5kIGRpcmVjdCBJL08gd2l0aGluIGEga2VybmVsIGNvbnRleHQ6CgoqKkFuYWx5emluZyB0aGUgQ2FsbCBTdHJ1Y3R1cmUgb2YgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgKioKCkFscmlnaHQsIHNvIGBpb21hcF9kaW9faG9sZV9pdGVyYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQmIzM5O3MgaW50ZXJuYWwgdG8gdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gTm8gZXh0ZXJuYWwgZnVuY3Rpb25zIGNhbiBkaXJlY3RseSBjYWxsIGl0LiBJdCYjMzk7cyBlc3NlbnRpYWxseSBhIGhlbHBlciBmdW5jdGlvbiwgbGlrZWx5IGVuY2Fwc3VsYXRlZCB3aXRoaW4gYSBsYXJnZXIgbW9kdWxlLiBJIGtub3cgYGlvbWFwX2Rpb19pdGVyYCBpcyB0aGUgcHVibGljLWZhY2luZyBlbnRyeSBwb2ludCwgYW5kIHRoYXQgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIHdpdGhpbiBpdC4KCk15IHByaW1hcnkgZm9jdXMgbm93IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBmcm9tIHRoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGNvbnRleHQuIEkgbmVlZCB0byBrbm93IHdoZXJlIGBpb21hcF9kaW9faXRlcmAgaXMgYmVpbmcgY2FsbGVkIGZyb20uIFdoYXQgcm91dGluZXMgYXJlIGRlcGVuZGVudCB1cG9uIHRoZSBmdW5jdGlvbmFsaXR5IHRoYXQgaW5jbHVkZXMgYGlvbWFwX2Rpb19pdGVyYD8gS25vd2luZyB0aGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHdoeSB0aGlzIGl0ZXJhdGlvbiBvdmVyIGhvbGVzIGlzIGhhcHBlbmluZy4gSXMgaXQgdXNlZCBmb3IgcmVhZCBvcGVyYXRpb25zLCB3cml0ZSBvcGVyYXRpb25zLCBvciBib3RoPyBBcmUgd2UgZGVhbGluZyB3aXRoIHNwYXJzZSBmaWxlcywgb3Igd2hhdD8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGVycyBvZiBgaW9tYXBfZGlvX2l0ZXJgIHdpbGwgc2hlZCBsaWdodCBvbiB0aGUgcHVycG9zZSBhbmQgdGhlIG92ZXJhbGwgZGVzaWduIHN0cmF0ZWd5IG9mIHRoaXMgZnVuY3Rpb24gYW5kIGl0cyBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcy4gSSB3aWxsIGFsc28gaGF2ZSB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgd2hlbiBJIHVuZGVyc3RhbmQgdGhlIGNhbGxpbmcgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb21hcF9kaW9faXRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2lvbWFwL2RpcmVjdC1pby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2lvbWFwL2RpcmVjdC1pby5jPTYxMj1zdGF0aWMgaW50IGlvbWFwX2Rpb19pbmxpbmVfaXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaW9taSwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY0My1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjY0NDpzdGF0aWMgaW50IGlvbWFwX2Rpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NDUte1xuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTY5Nj1fX2lvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy04MjEtXHR3aGlsZSAoKHJldCA9IGlvbWFwX2l0ZXIoXHUwMDI2aW9taSwgb3BzKSkgXHUwMDNlIDApIHtcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjgyMjpcdFx0aW9taS5zdGF0dXMgPSBpb21hcF9kaW9faXRlcihcdTAwMjZpb21pLCBkaW8pO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtODIzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2ODIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbHJlYWR5IHF1aXRlIGZhbWlsaWFyIHdpdGggdGhlIGtlcm5lbCYjMzk7cyBJL08gbGF5ZXI6CgoqKkRpZ2dpbmcgaW50byBpb21hcCBEaXJlY3QgSS9PKioKCkFscmlnaHQsIHNvIGBfX2lvbWFwX2Rpb19yd2AuLi4gdGhhdCYjMzk7cyB0aGUgYmlnIG9uZSwgdGhlIGNlbnRyYWwgaHViIGZvciBJL08gb3BlcmF0aW9ucyB1c2luZyB0aGUgaW9tYXAgZnJhbWV3b3JrIGluIGRpcmVjdCBJL08gbW9kZS4gSXQmIzM5O3MgdGhlIHBvaW50IG9mIGVudHJ5LCB0aGUgJiMzNDtnbyYjMzQ7IGJ1dHRvbiwgYXMgaXQgd2VyZS4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhpcyBmdW5jdGlvbi4KCkxldCBtZSBzZWUsIGlzIHRoaXMgY29yZSBmdW5jdGlvbiBhY3R1YWxseSB2aXNpYmxlIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWw/IE9yLCBpcyBpdCBwZXJoYXBzIG9ubHkgdXNlZCBpbnRlcm5hbGx5PyBDaGVja2luZyB0aGUgZXhwb3J0IHN0YXR1cyBvciBjcm9zcy1yZWZlcmVuY2luZyBhbGwgdXNlcyBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyByb2xlIGluIHRoZSBsYXJnZXIgc3lzdGVtLiBJdCYjMzk7cyBhbGwgYWJvdXQgdW5kZXJzdGFuZGluZyB0aGUgYm91bmRhcnkgY29uZGl0aW9ucyBhbmQgaW50ZXJhY3Rpb25zIG9mIHRoZSBEaXJlY3QgSS9PIHN5c3RlbSwgYW5kIGRldGVybWluaW5nIHdoYXQgdGhlIGltcGFjdCBvZiBtb2RpZnlpbmcgdGhpcyBmdW5jdGlvbiB3aWxsIGJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19faW9tYXBfZGlvX3J3JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmM9NDE1PXN0YXRpYyBpbnQgaW9tYXBfZGlvX2Jpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNTEwLVx0XHQgKiBXcml0ZXMgdGhhdCBleHRlbmQgaV9zaXplIGFyZSBhbHNvIG5vdCBzdXBwb3J0ZWQsIGJ1dCB0aGlzIGlzXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo1MTE6XHRcdCAqIGhhbmRsZWQgaW4gX19pb21hcF9kaW9fcncoKS5cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTUxMi1cdFx0ICovXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9NjQ0PXN0YXRpYyBpbnQgaW9tYXBfZGlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02ODQtICogV2hlbiBwYWdlIGZhdWx0cyBhcmUgZGlzYWJsZWQgYW5kIEBkaW9fZmxhZ3MgaW5jbHVkZXMgSU9NQVBfRElPX1BBUlRJQUwsXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo2ODU6ICogX19pb21hcF9kaW9fcncgY2FuIHJldHVybiBhIHBhcnRpYWwgcmVzdWx0IGlmIGl0IGVuY291bnRlcnMgYSBub24tcmVzaWRlbnRcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY4Ni0gKiBwYWdlIGluIEBpdGVyIGFmdGVyIHByZXBhcmluZyBhIHRyYW5zZmVyLiAgSW4gdGhhdCBjYXNlLCB0aGUgbm9uLXJlc2lkZW50XG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9Njk1PXN0cnVjdCBpb21hcF9kaW8gKlxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6Njk2Ol9faW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjk3LVx0XHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzICpkb3BzLFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkwNi19XG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5MDc6RVhQT1JUX1NZTUJPTF9HUEwoX19pb21hcF9kaW9fcncpO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTA4LVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTkxMD1pb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTE1LVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTE2Olx0ZGlvID0gX19pb21hcF9kaW9fcncoaW9jYiwgaXRlciwgb3BzLCBkb3BzLCBkaW9fZmxhZ3MsIHByaXZhdGUsXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTctXHRcdFx0ICAgICBkb25lX2JlZm9yZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjI6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU3MwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkRpZ2dpbmcgaW50byB0aGUgRGlyZWN0IEkvTyBJbXBsZW1lbnRhdGlvbioqCgpSaWdodCwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgZGlyZWN0IEkvTyBpcyByZWFsbHkgb3BlcmF0aW5nLiBTZWVtcyBsaWtlIG15IHN0YXJ0aW5nIHBvaW50IGlzIHRvIHVuZGVyc3RhbmQgYF9faW9tYXBfZGlvX3J3YCBhbmQgYGlvbWFwX2Rpb19yd2AuIFRob3NlIGFyZSB0aGUgY29yZSBmdW5jdGlvbnMsIHRoZSByZWFsIGhlYXJ0IG9mIHRoZSBkaXJlY3QgSS9PIHByb2Nlc3MsIEkgYmV0LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSBjcml0aWNhbCB0byBlbmFibGUgdGhlIGBmcy9pb21hcC9kaXJlY3QtaW8uY2AgbW9kdWxlIGluIHRoZSBmaXJzdCBwbGFjZS4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHQsIHRoZSBmb3VuZGF0aW9uLCBmb3IgdHJ1bHkgZ3Jhc3Bpbmcgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIEl0JiMzOTtzIHRpbWUgdG8gdHJhY2sgZG93biB0aG9zZSBkZXBlbmRlbmNpZXMgYW5kIHNlZSB3aGF0IHRyaWdnZXJzIHRoZSBpbmNsdXNpb24gb2YgdGhhdCBmaWxlLiBLbm93aW5nIHRoZSBwcmVyZXF1aXNpdGVzIHdpbGwgaGVscCBpbW1lbnNlbHkgaW4gbXkgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RpcmVjdC1pby5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2lvbWFwL01ha2VmaWxlPTExPWlvbWFwLXlcdFx0XHRcdCYjNDM7PSB0cmFjZS5vIFxcXG4tLVxuZnMvaW9tYXAvTWFrZWZpbGUtMTMtXHRcdFx0XHQgICBidWZmZXJlZC1pby5vXG5mcy9pb21hcC9NYWtlZmlsZToxNDppb21hcC0kKENPTkZJR19CTE9DSylcdFx0JiM0Mzs9IGRpcmVjdC1pby5vIFxcXG5mcy9pb21hcC9NYWtlZmlsZS0xNS1cdFx0XHRcdCAgIGlvZW5kLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjI6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkzMgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgS2VybmVsJiMzOTtzIERpcmVjdCBJL08gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBgQ09ORklHX0JMT0NLYCBpcyB0dXJuaW5nIG9uIGBkaXJlY3QtaW8ub2AsIHdoaWNoIGlzIGluIHRoZSBgZnMvaW9tYXAvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIGltbWVkaWF0ZWx5IHdvbmRlciBob3cgdGhhdCBhbGwgZml0cyB0b2dldGhlciwgc3BlY2lmaWNhbGx5IGlmIGBmcy9pb21hcC9NYWtlZmlsZWAgY29uZGl0aW9uYWxseSBpbmNsdWRlcyBgaW9tYXAub2AgYmFzZWQgb24gYENPTkZJR19GU19JT01BUGAgb3Igc29tZXRoaW5nIGxpa2UgdGhhdC4gSSBuZWVkIHRvIHZlcmlmeSBob3cgYGZzL2lvbWFwL01ha2VmaWxlYCBoYW5kbGVzIGBpb21hcC5vYC4gVGltZSB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhhdCBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2lvbWFwL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuICAgMjpcdCNcbiAgIDM6XHQjIENvcHlyaWdodCAoYykgMjAxOSBPcmFjbGUuXG4gICA0Olx0IyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICAgNTpcdCNcbiAgIDY6XHRcbiAgIDc6XHRjY2ZsYWdzLXkgJiM0Mzs9IC1JICQoc3JjKVx0XHQjIG5lZWRlZCBmb3IgdHJhY2UgZXZlbnRzXG4gICA4Olx0XG4gICA5Olx0b2JqLSQoQ09ORklHX0ZTX0lPTUFQKVx0XHQmIzQzOz0gaW9tYXAub1xuICAxMDpcdFxuICAxMTpcdGlvbWFwLXlcdFx0XHRcdCYjNDM7PSB0cmFjZS5vIFxcXG4gIDEyOlx0XHRcdFx0XHQgICBpdGVyLm8gXFxcbiAgMTM6XHRcdFx0XHRcdCAgIGJ1ZmZlcmVkLWlvLm9cbiAgMTQ6XHRpb21hcC0kKENPTkZJR19CTE9DSylcdFx0JiM0Mzs9IGRpcmVjdC1pby5vIFxcXG4gIDE1Olx0XHRcdFx0XHQgICBpb2VuZC5vIFxcXG4gIDE2Olx0XHRcdFx0XHQgICBmaWVtYXAubyBcXFxuICAxNzpcdFx0XHRcdFx0ICAgc2Vlay5vIFxcXG4gIDE4Olx0XHRcdFx0XHQgICBiaW8ub1xuICAxOTpcdGlvbWFwLSQoQ09ORklHX1NXQVApXHRcdCYjNDM7PSBzd2FwZmlsZS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MjcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW5pdGlhbCBDb25maWd1cmF0aW9uIENoZWNrKioKClJpZ2h0LCBzbyB0byBnZXQgdGhpcyBmdW5jdGlvbmFsaXR5IHVwIGFuZCBydW5uaW5nLCBJJiMzOTttIGdvaW5nIHRvIG5lZWQgdG8gbWFrZSBzdXJlIGBDT05GSUdfRlNfSU9NQVBgIGlzIGVuYWJsZWQsIGFuZCBgQ09ORklHX0JMT0NLYCBpcyBhcyB3ZWxsLiBUaGF0IG1ha2VzIHNlbnNlLCBgQ09ORklHX0JMT0NLYCBpcyBhIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrLiBBbmQgYENPTkZJR19GU19JT01BUGA/IEFoIHllcywgdGhhdOKAmXMgcmlnaHQsIHRoYXQmIzM5O3MgdGhlIGlvbWFwIGluZnJhc3RydWN0dXJlLCBhbmQgaXTigJlzIHV0aWxpemVkIGJ5IGEgd2hvbGUgcmFuZ2Ugb2YgZmlsZXN5c3RlbXMg4oCTIGV4dDQsIHhmcywgYnRyZnMsIGFsbCB0aGUgdXN1YWwgc3VzcGVjdHMuIEkmIzM5O2QgYmV0dGVyIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBlbnRyeSBmb3IgYEZTX0lPTUFQYCBpbiBgZnMvS2NvbmZpZ2AgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb250ZXh0LiBHb3R0YSBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZTX0lPTUFQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9MTI9Y29uZmlnIFZBTElEQVRFX0ZTX1BBUlNFUlxuLS1cbmZzL0tjb25maWctMTctXG5mcy9LY29uZmlnOjE4OmNvbmZpZyBGU19JT01BUFxuZnMvS2NvbmZpZy0xOS1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjI6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc1NQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGVjb2RpbmcgVGhpcyBCb29sZWFuIEVuaWdtYSoqCgpBbHJpZ2h0LCBzbyB0aGVyZSYjMzk7cyB0aGlzIGhpZGRlbiBCb29sZWFuIHNldHRpbmcsIGFuZCBpdCYjMzk7cyBiZWluZyBzZWxlY3RlZCBieSB0aGUgZmlsZXN5c3RlbXMgdGhlbXNlbHZlcy4gSW50ZXJlc3RpbmcuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkaWcgZGVlcGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2VsZWN0aW9uIGNyaXRlcmlhLiBXaGF0IHRyaWdnZXJzIHRoaXMgcGFydGljdWxhciBmbGFnPyBUaGUgJiMzNDt3aGF0JiMzNDsgaXMgdGhlIG1vc3QgaW1wb3J0YW50IHF1ZXN0aW9uLiBJcyBpdCBiYXNlZCBvbiBzcGVjaWZpYyBmaWxlc3lzdGVtIGZlYXR1cmVzPyBIYXJkd2FyZSBkZXRlY3Rpb24/IENvbmZpZ3VyYXRpb24gcGFyYW1ldGVycz8gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGNvZGUgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgaXQuIExldCYjMzk7cyBzZWUgaWYgSSBjYW4gdHJhY2UgdGhlIHNlbGVjdGlvbiBsb2dpYyBhbmQgZ2V0IGEgaGFuZGxlIG9uIHRoZSB3aHkgYW5kIGhvdy4gVGltZSB0byBkaXNzZWN0IHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgRlNfSU9NQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz01OD1jb25maWcgRlNfREFYXG4tLVxuZnMvS2NvbmZpZy02MS1cdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcbmZzL0tjb25maWc6NjI6XHRzZWxlY3QgRlNfSU9NQVBcbmZzL0tjb25maWctNjMtXHRzZWxlY3QgREFYXG4tLVxuZnMvYnRyZnMvS2NvbmZpZz0zPWNvbmZpZyBCVFJGU19GU1xuLS1cbmZzL2J0cmZzL0tjb25maWctMTQtXHRzZWxlY3QgWlNURF9ERUNPTVBSRVNTXG5mcy9idHJmcy9LY29uZmlnOjE1Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9idHJmcy9LY29uZmlnLTE2LVx0c2VsZWN0IFJBSUQ2X1BRXG4tLVxuZnMvZXJvZnMvS2NvbmZpZz0zPWNvbmZpZyBFUk9GU19GU1xuLS1cbmZzL2Vyb2ZzL0tjb25maWctOC1cdHNlbGVjdCBDUllQVE9fREVGTEFURSBpZiBFUk9GU19GU19aSVBfQUNDRUxcbmZzL2Vyb2ZzL0tjb25maWc6OTpcdHNlbGVjdCBGU19JT01BUFxuZnMvZXJvZnMvS2NvbmZpZy0xMC1cdHNlbGVjdCBMWjRfREVDT01QUkVTUyBpZiBFUk9GU19GU19aSVBcbi0tXG5mcy9leGZhdC9LY29uZmlnPTM9Y29uZmlnIEVYRkFUX0ZTXG4tLVxuZnMvZXhmYXQvS2NvbmZpZy02LVx0c2VsZWN0IE5MU1xuZnMvZXhmYXQvS2NvbmZpZzo3Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9leGZhdC9LY29uZmlnLTgtXHRoZWxwXG4tLVxuZnMvZXh0Mi9LY29uZmlnPTI9Y29uZmlnIEVYVDJfRlNcbi0tXG5mcy9leHQyL0tjb25maWctNC1cdHNlbGVjdCBCVUZGRVJfSEVBRFxuZnMvZXh0Mi9LY29uZmlnOjU6XHRzZWxlY3QgRlNfSU9NQVBcbmZzL2V4dDIvS2NvbmZpZy02LVx0aGVscFxuLS1cbmZzL2V4dDQvS2NvbmZpZz0yPWNvbmZpZyBFWFQ0X0ZTXG4tLVxuZnMvZXh0NC9LY29uZmlnLTctXHRzZWxlY3QgQ1JDMzJcbmZzL2V4dDQvS2NvbmZpZzo4Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9leHQ0L0tjb25maWctOS1cdHNlbGVjdCBGU19FTkNSWVBUSU9OX0FMR1MgaWYgRlNfRU5DUllQVElPTlxuLS1cbmZzL2YyZnMvS2NvbmZpZz0yPWNvbmZpZyBGMkZTX0ZTXG4tLVxuZnMvZjJmcy9LY29uZmlnLTktXHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cbmZzL2YyZnMvS2NvbmZpZzoxMDpcdHNlbGVjdCBGU19JT01BUFxuZnMvZjJmcy9LY29uZmlnLTExLVx0c2VsZWN0IExaNF9DT01QUkVTUyBpZiBGMkZTX0ZTX0xaNFxuLS1cbmZzL2Z1c2UvS2NvbmZpZz0yPWNvbmZpZyBGVVNFX0ZTXG4tLVxuZnMvZnVzZS9LY29uZmlnLTQtXHRzZWxlY3QgRlNfUE9TSVhfQUNMXG5mcy9mdXNlL0tjb25maWc6NTpcdHNlbGVjdCBGU19JT01BUFxuZnMvZnVzZS9LY29uZmlnLTYtXHRoZWxwXG4tLVxuZnMvZ2ZzMi9LY29uZmlnPTI9Y29uZmlnIEdGUzJfRlNcbi0tXG5mcy9nZnMyL0tjb25maWctNy1cdHNlbGVjdCBRVU9UQUNUTFxuZnMvZ2ZzMi9LY29uZmlnOjg6XHRzZWxlY3QgRlNfSU9NQVBcbmZzL2dmczIvS2NvbmZpZy05LVx0aGVscFxuLS1cbmZzL2hwZnMvS2NvbmZpZz0yPWNvbmZpZyBIUEZTX0ZTXG4tLVxuZnMvaHBmcy9LY29uZmlnLTUtXHRzZWxlY3QgQlVGRkVSX0hFQURcbmZzL2hwZnMvS2NvbmZpZzo2Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9ocGZzL0tjb25maWctNy1cdGhlbHBcbi0tXG5mcy9uaWxmczIvS2NvbmZpZz0yPWNvbmZpZyBOSUxGUzJfRlNcbi0tXG5mcy9uaWxmczIvS2NvbmZpZy01LVx0c2VsZWN0IENSQzMyXG5mcy9uaWxmczIvS2NvbmZpZzo2Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9uaWxmczIvS2NvbmZpZy03LVx0aGVscFxuLS1cbmZzL250ZnMvS2NvbmZpZz0yPWNvbmZpZyBOVEZTX0ZTXG4tLVxuZnMvbnRmcy9LY29uZmlnLTQtXHRzZWxlY3QgTkxTXG5mcy9udGZzL0tjb25maWc6NTpcdHNlbGVjdCBGU19JT01BUFxuZnMvbnRmcy9LY29uZmlnLTYtXHRoZWxwXG4tLVxuZnMveGZzL0tjb25maWc9Mj1jb25maWcgWEZTX0ZTXG4tLVxuZnMveGZzL0tjb25maWctNi1cdHNlbGVjdCBDUkMzMlxuZnMveGZzL0tjb25maWc6NzpcdHNlbGVjdCBGU19JT01BUFxuZnMveGZzL0tjb25maWctOC1cdGhlbHBcbi0tXG5mcy96b25lZnMvS2NvbmZpZz0xPWNvbmZpZyBaT05FRlNfRlNcbi0tXG5mcy96b25lZnMvS2NvbmZpZy00LVx0ZGVwZW5kcyBvbiBCTEtfREVWX1pPTkVEXG5mcy96b25lZnMvS2NvbmZpZzo1Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy96b25lZnMvS2NvbmZpZy02LVx0c2VsZWN0IENSQzMyXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5OTYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGlyZWN0IElPIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSB3ZSYjMzk7cmUgZW5hYmxpbmcgYEZTX0lPTUFQYCDigJMgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFdlJiMzOTtyZSBnZXR0aW5nIGl0IHRocm91Z2ggZWl0aGVyIGBFWFQ0X0ZTYCwgYFhGU19GU2AsIG9yIGBCVFJGU19GU2AuIFJpZ2h0LCBtYWtlcyBzZW5zZSwgdGhhdCBtYWtlcyB0aGUgbW9zdCBjb21tb24gZmlsZXN5c3RlbSBjaG9pY2VzIEkgd291bGQgZXhwZWN0LiBBbmQsIG9mIGNvdXJzZSwgd2UmIzM5O2xsIG5lZWQgYENPTkZJR19CTE9DS2AgZW5hYmxlZCBhcyB3ZWxsLCB0aGF0IGdvZXMgd2l0aG91dCBzYXlpbmcuCgpUaGUgcmVhbCBtZWF0IG9mIHRoaXMgc2VlbXMgdG8gYmUgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYGlvbWFwX2Rpb19ob2xlX2l0ZXJgLiBUaGF0JiMzOTtzIGNyaXRpY2FsLCBiZWNhdXNlIHRoYXQmIzM5O3Mgd2hhdCBnZXRzIGNhbGxlZCBzcGVjaWZpY2FsbHkgZHVyaW5nIGRpcmVjdCBJL08gd2hlbiB3ZSYjMzk7cmUgaGl0dGluZyBhIGhvbGUgaW4gdGhlIGZpbGUuIFNvLCB0aGlzIGlzIGRlZmluaXRlbHkgdG91Y2hpbmcgZnVuY3Rpb25hbCBjb2RlIHRoYXQgaXMgYmVpbmcgdXNlZCwgc28gdGhpcyBtYWtlcyBzZW5zZSB0byBiZSBkb2luZy4KCkxldCYjMzk7cyBzZWUsIHdoYXQgZnVuY3Rpb25zIHNob3VsZCBJIHplcm8gaW4gb24/IExvb2tzIGxpa2UgYF9faW9tYXBfZGlvX3J3YCBhbmQgYGlvbWFwX2Rpb19yd2AgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGV4YW1pbmUuIFRoZXkgbXVzdCBiZSB0aGUgY29yZSBvZiB0aGUgZGlyZWN0IEkvTyByZWFkL3dyaXRlIGltcGxlbWVudGF0aW9uLiBJIHNob3VsZCBhbHNvIGNoZWNrIGFuZCBzZWUgd2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkIGZyb20gYGZzL2lvbWFwL2RpcmVjdC1pby5jYC4gR290dGEgZ2V0IHRoZSB3aG9sZSBwaWN0dXJlLCByaWdodD8gTmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnkgZGVwZW5kZW5jaWVzIG9yIHJlbGF0ZWQgZnVuY3Rpb25zIGluIHRoYXQgc291cmNlIGZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYz0xMDU9c3NpemVfdCBpb21hcF9kaW9fY29tcGxldGUoc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTE2MC19XG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxNjE6RVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfZGlvX2NvbXBsZXRlKTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTE2Mi1cbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYz0yNzI9dm9pZCBpb21hcF9kaW9fYmlvX2VuZF9pbyhzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMjc5LX1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjI4MDpFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9kaW9fYmlvX2VuZF9pbyk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy0yODEtXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9Njk2PV9faW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkwNi19XG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5MDc6RVhQT1JUX1NZTUJPTF9HUEwoX19pb21hcF9kaW9fcncpO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTA4LVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTkxMD1pb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTIxLX1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjkyMjpFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9kaW9fcncpO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTIzLVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTk5OD1zc2l6ZV90IF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwODMtfVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTA4NDpFWFBPUlRfU1lNQk9MX0dQTChfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZSk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDg1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDE3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBEaXJlY3QgSS9PIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIHdpdGhpbiB0aGUgRGlyZWN0IEkvTyBwYXRoLiBNeSBpbml0aWFsIHRob3VnaHRzIGFyZSB0aGF0IGBfX2lvbWFwX2Rpb19yd2AsIGBpb21hcF9kaW9fcndgLCBhbmQgYF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlYCBsb29rIGxpa2Ugc3Ryb25nIGNvbnRlbmRlcnMgZm9yIGludmVzdGlnYXRpb24uIFRoZXkgc2VlbSBsaWtlIGxvZ2ljYWwgcGxhY2VzIHRvIHN0YXJ0IGdpdmVuIHRoZSBjb250ZXh0LgoKSG9sZCBvbi4uLiBJJiMzOTttIGp1c3QgcmVjYWxsaW5nIHRoYXQgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgIGlzIHNwZWNpZmljYWxseSB1c2VkIGR1cmluZyB3cml0ZXMuIFRoYXQmIzM5O3MgYSBoZWxwZnVsIGZpbHRlcmluZyBpbnNpZ2h0LiBJIHNob3VsZCBlbnN1cmUgSSYjMzk7bSBrZWVwaW5nIHRoYXQgZGlzdGluY3Rpb24gY2xlYXIgaW4gbXkgbWluZC4KCkFscmlnaHQsIGEgbW9yZSBnZW5lcmFsLCBwcm9iYWJseSBlbmNvbXBhc3NpbmcgY2FuZGlkYXRlIHdvdWxkIGJlIGBpb21hcF9kaW9faXRlcmAuIExldCYjMzk7cyBmb2N1cyBvdXIgYXR0ZW50aW9uIHRoZXJlIGZvciBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvbWFwX2Rpb19pdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmM9NjEyPXN0YXRpYyBpbnQgaW9tYXBfZGlvX2lubGluZV9pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppb21pLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjQzLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NjQ0OnN0YXRpYyBpbnQgaW9tYXBfZGlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY0NS17XG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9Njk2PV9faW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTgyMS1cdHdoaWxlICgocmV0ID0gaW9tYXBfaXRlcihcdTAwMjZpb21pLCBvcHMpKSBcdTAwM2UgMCkge1xuZnMvaW9tYXAvZGlyZWN0LWlvLmM6ODIyOlx0XHRpb21pLnN0YXR1cyA9IGlvbWFwX2Rpb19pdGVyKFx1MDAyNmlvbWksIGRpbyk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy04MjMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1ODUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBpb21hcF9kaW9faXRlcmAgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gY3VyaW91cyB0byBzZWUgaG93IHRoaXMgaGFuZGxlcyBEaXJlY3QgSS9PIGl0ZXJhdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhlIG51YW5jZXMgb2YgdGhpcyBpdGVyYXRvciBpcyBrZXkgdG8gb3B0aW1pemluZyBhbnkgSS9PLWludGVuc2l2ZSBjb2RlIEkmIzM5O20gd29ya2luZyBvbi4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGNsZXZlciBoYW5kbGluZyBvZiB0aGUgYmxvY2sgc2l6ZSBhbmQgYWxpZ25tZW50LCBhbmQgaG93IGl0IGRlYWxzIHdpdGggcGFydGlhbCBibG9ja3MuIEkmIzM5O20gYWxzbyBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIG9wdGltaXphdGlvbnMgYXJvdW5kIGRhdGEgcHJlZmV0Y2hpbmcgb3IgbWVyZ2luZyB0byBtaW5pbWl6ZSBzeXN0ZW0gY2FsbHMuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgaXRlcmF0b3IgZXhwb3NlcyB0aGUgdW5kZXJseWluZyBJL08gb3BlcmF0aW9ucyBhbmQgd2hldGhlciBpdCBlZmZpY2llbnRseSBhYnN0cmFjdHMgYXdheSB0aGUgY29tcGxleGl0aWVzLiBLbm93aW5nIHRoaXMgaXMgY3JpdGljYWwgZm9yIGRlYnVnZ2luZyBwZXJmb3JtYW5jZSBpc3N1ZXMuIEkgYWxzbyBleHBlY3QgdGhhdCB0aGVyZSYjMzk7bGwgYmUgc29tZSB0cmlja3kgZWRnZSBjYXNlcyB3aXRoIGhhbmRsaW5nIG9mIGVycm9ycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY0NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjQ0Olx0c3RhdGljIGludCBpb21hcF9kaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuIDY0NTpcdHtcbiA2NDY6XHRcdHN3aXRjaCAoaXRlci1cdTAwM2Vpb21hcC50eXBlKSB7XG4gNjQ3Olx0XHRjYXNlIElPTUFQX0hPTEU6XG4gNjQ4Olx0XHRcdGlmIChXQVJOX09OX09OQ0UoZGlvLVx1MDAzZWZsYWdzIFx1MDAyNiBJT01BUF9ESU9fV1JJVEUpKVxuIDY0OTpcdFx0XHRcdHJldHVybiAtRUlPO1xuIDY1MDpcdFx0XHRyZXR1cm4gaW9tYXBfZGlvX2hvbGVfaXRlcihpdGVyLCBkaW8pO1xuIDY1MTpcdFx0Y2FzZSBJT01BUF9VTldSSVRURU46XG4gNjUyOlx0XHRcdGlmICghKGRpby1cdTAwM2VmbGFncyBcdTAwMjYgSU9NQVBfRElPX1dSSVRFKSlcbiA2NTM6XHRcdFx0XHRyZXR1cm4gaW9tYXBfZGlvX2hvbGVfaXRlcihpdGVyLCBkaW8pO1xuIDY1NDpcdFx0XHRyZXR1cm4gaW9tYXBfZGlvX2Jpb19pdGVyKGl0ZXIsIGRpbyk7XG4gNjU1Olx0XHRjYXNlIElPTUFQX01BUFBFRDpcbiA2NTY6XHRcdFx0cmV0dXJuIGlvbWFwX2Rpb19iaW9faXRlcihpdGVyLCBkaW8pO1xuIDY1NzpcdFx0Y2FzZSBJT01BUF9JTkxJTkU6XG4gNjU4Olx0XHRcdHJldHVybiBpb21hcF9kaW9faW5saW5lX2l0ZXIoaXRlciwgZGlvKTtcbiA2NTk6XHRcdGNhc2UgSU9NQVBfREVMQUxMT0M6XG4gNjYwOlx0XHRcdC8qXG4gNjYxOlx0XHRcdCAqIERJTyBpcyBub3Qgc2VyaWFsaXNlZCBhZ2FpbnN0IG1tYXAoKSBhY2Nlc3MgYXQgYWxsLCBhbmQgc29cbiA2NjI6XHRcdFx0ICogaWYgdGhlIHBhZ2VfbWt3cml0ZSBvY2N1cnMgYmV0d2VlbiB0aGUgd3JpdGViYWNrIGFuZCB0aGVcbiA2NjM6XHRcdFx0ICogaW9tYXBfaXRlcigpIGNhbGwgaW4gdGhlIERJTyBwYXRoLCB0aGVuIGl0IHdpbGwgc2VlIHRoZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTg4CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSU9NQVAgSG9sZSBJdGVyYXRpb24gRml4KioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgIGlzIHNwZWNpZmljYWxseSB1c2VkIGZvciBoYW5kbGluZyBgSU9NQVBfSE9MRWAgYW5kIGBJT01BUF9VTldSSVRURU5gIHNjZW5hcmlvcywgd2hpY2gsIGFzIEkgdW5kZXJzdGFuZCwgYXJlIGJvdGggcmVhZC1vbmx5IG9wZXJhdGlvbnMgZGVhbGluZyB3aXRoIGVpdGhlciBhY3R1YWwgaG9sZXMgaW4gdGhlIGZpbGUgb3IgYXJlYXMgdGhhdCBoYXZlbiYjMzk7dCBiZWVuIHdyaXR0ZW4gdG8geWV0LiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGFkZHJlc3MgYSBwb3RlbnRpYWwgbWlzYWxpZ25tZW50IGlzc3VlIHJlbGF0ZWQgdG8gYGlvdl9pdGVyX3plcm9gLiBBcHBhcmVudGx5LCB0aGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb24sIHdoZW4gY29weWluZyB6ZXJvZWQgZGF0YSwgd2FzIHBhZ2UtYWxpZ25lZCBidXQgKm5vdCogbmVjZXNzYXJpbHkgYWxpZ25lZCB0byB0aGUgZmlsZXN5c3RlbSYjMzk7cyBibG9jayBzaXplLCB3aGljaCBjb3VsZCBsZWFkIHRvIGluZWZmaWNpZW5jaWVzIG9yIGV2ZW4gaW5jb3JyZWN0IGJlaGF2aW9yIGluIHNvbWUgY29udGV4dHMuIFRoZSBmaXggaXMgYSByZXZlcnNpb24gdG8gZW5zdXJlIGJsb2NrLXNpemUgYWxpZ25tZW50LCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlIGZyb20gYSBmdW5jdGlvbmFsIHBlcnNwZWN0aXZlLgoKRnJvbSBhbiBpbXBsZW1lbnRhdGlvbiBwZXJzcGVjdGl2ZSwgc2V0dGluZyB1cCBFWFQ0X0ZTIG9yIFhGU19GUyBvciBCVFJGU19GUyB3aWxsIGVuYWJsZSBGU19JT01BUC4KCkkgd2FudCB0byBkaXZlIGRlZXBlciBpbnRvIHRoaXMsIHBhcnRpY3VsYXJseSB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4ga2V5IGZ1bmN0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBvbjogYF9faW9tYXBfZGlvX3J3YCwgYGlvbWFwX2Rpb19yd2AsIGFuZCBgX19pb21hcF9kaW9fcmVhZF9zaW1wbGVgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIHRoYXQgYF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlYCBwcm9wZXJseSBpbnZva2VzIGBpb21hcF9kaW9faXRlcmAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGUgb3BlcmF0aW9uIHdpbGwgYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19faW9tYXBfZGlvX3JlYWRfc2ltcGxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmM9OTgwPXN0YXRpYyB2b2lkIGlvbWFwX2Rpb19zaW1wbGVfZW5kX2lvKHN0cnVjdCBiaW8gKmJpbylcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05OTctXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5OTg6c3NpemVfdCBfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk5OS1cdFx0c3RydWN0IGlvbWFwX2l0ZXIgKmlvbWkpXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTA4My19XG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMDg0OkVYUE9SVF9TWU1CT0xfR1BMKF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlKTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwODUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5OTAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBhcyBJIGFwcHJvYWNoIHJlYWRpbmcgdGhpcyBmdW5jdGlvbiwgYF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlYDoKCioqQW5hbHl6aW5nIGBfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZWAqKgoKQWxyaWdodCwgdGhlIG5hbWUgaXRzZWxmIGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludC4gYF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlYC4gVGhlIGRvdWJsZSB1bmRlcnNjb3JlIHN1Z2dlc3RzIGl0JiMzOTtzIGxpa2VseSBhbiBpbnRlcm5hbCBvciBoZWxwZXIgZnVuY3Rpb24sIG5vdCBkaXJlY3RseSBleHBvc2VkIHRvIHVzZXJzLiAmIzM0O0lPTUFQJiMzNDsgaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgcmVsYXRlZCB0byBJL08gbWFwcGluZywgd2hpY2ggdHlwaWNhbGx5IG1lYW5zIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBzb21lIGZvcm0gb2YgZGlyZWN0IEkvTy4gVGhlICYjMzQ7RElPJiMzNDsgcmVpbmZvcmNlcyB0aGF0OiBEaXJlY3QgSS9PLiBBbmQgJiMzNDtyZWFkX3NpbXBsZSYjMzQ7IGltcGxpZXMgdGhpcyBpcyBhIGNvcmUgcmVhZCBmdW5jdGlvbi4gUGVyaGFwcyBpdCBoYW5kbGVzIHRoZSBtb3N0IGJhc2ljLCBzdHJlYW1saW5lZCByZWFkIG9wZXJhdGlvbnMuIFRoZSBzaW1wbGljaXR5IGlzIGludHJpZ3Vpbmc7IGl0IHByb2JhYmx5IG1lYW5zIGxlc3MgZXJyb3IgaGFuZGxpbmcgb3Igc29tZSBhc3N1bWVkIGNvbmRpdGlvbnMgYXJlIGluIHBsYWNlLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBwYXJ0IG9mIHRoZSBkaXJlY3QgSS9PIHBhdGguCgpJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIGEgbG93LWxldmVsIGZ1bmN0aW9uIHRoYXQgZGVhbHMgd2l0aCB0cmFuc2ZlcnJpbmcgZGF0YSBkaXJlY3RseSBmcm9tIHN0b3JhZ2UgdG8gbWVtb3J5LCBsaWtlbHkgYnlwYXNzaW5nIHRoZSBwYWdlIGNhY2hlIGZvciBvcHRpbWl6ZWQgcGVyZm9ybWFuY2UsIGFuZCB0YWtpbmcgYWR2YW50YWdlIG9mIHdoYXRldmVyIHRoZSBJT01BUCBsYXllciBpcyBkb2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgb3RoZXIgbGF5ZXJzLiBEb2VzIGl0IGRpcmVjdGx5IGhhbmRsZSB0aGUgYmlvIHN0cnVjdHVyZT8gRG9lcyBpdCBpbnRlcmFjdCB3aXRoIGJsb2NrIGRldmljZXM/IERvZXMgaXQgdXNlIHRoZSBkZXZpY2UgbWFwcGVyPyBPciBpcyBpdCBtb3JlIG9mIGEgaGVscGVyIGluIHRoZSBwcm9jZXNzPyBJJiMzOTtsbCBwcm9iYWJseSBiZSBsb29raW5nIGZvciBob3cgaXQgaGFuZGxlcyBidWZmZXIgYWxsb2NhdGlvbiwgYWRkcmVzc2luZywgYW5kIGVycm9yIGNoZWNraW5nLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpdCB1c2VzLCBwYXJ0aWN1bGFybHkgaWYgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBibG9jayBsYXllci4gTGV0JiMzOTtzIHNlZSBob3cgaXQgaGFuZGxlcyB0aGUgZGlmZmVyZW50IHBvc3NpYmxlIHNjZW5hcmlvcy4gSSYjMzk7bSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgbG93ZXIgbGF5ZXJzIGFuZCBoYW5kbGUgdGhvc2UgZWRnZSBjYXNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk5OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTk4Olx0c3NpemVfdCBfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiA5OTk6XHRcdFx0c3RydWN0IGlvbWFwX2l0ZXIgKmlvbWkpXG4xMDAwOlx0e1xuMTAwMTpcdFx0Z2ZwX3QgZ2ZwID0gKGlvbWktXHUwMDNlZmxhZ3MgXHUwMDI2IElPTUFQX05PV0FJVCkgPyBHRlBfTk9XQUlUIDogR0ZQX0tFUk5FTDtcbjEwMDI6XHRcdHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlICpzcjtcbjEwMDM6XHRcdHVuc2lnbmVkIGludCBhbGlnbm1lbnQ7XG4xMDA0Olx0XHRzdHJ1Y3QgYmlvICpiaW87XG4xMDA1Olx0XHRzc2l6ZV90IHJldDtcbjEwMDY6XHRcbjEwMDc6XHRcdGlmIChpb21pLVx1MDAzZWlvbWFwLnR5cGUgIT0gSU9NQVBfTUFQUEVEIHx8XG4xMDA4Olx0XHQgICAgaW9taS1cdTAwM2Vpb21hcC5vZmZzZXQgJiM0MzsgaW9taS1cdTAwM2Vpb21hcC5sZW5ndGggXHUwMDNjIGlvbWktXHUwMDNlcG9zICYjNDM7IGlvbWktXHUwMDNlbGVuIHx8XG4xMDA5Olx0XHQgICAgKGlvbWktXHUwMDNlaW9tYXAuZmxhZ3MgXHUwMDI2IElPTUFQX0ZfSU5URUdSSVRZKSkge1xuMTAxMDpcdFx0XHRyZXQgPSAtRU5PVEJMSztcbjEwMTE6XHRcdFx0Z290byBvdXRfZGlvX2VuZDtcbjEwMTI6XHRcdH1cbjEwMTM6XHRcbjEwMTQ6XHRcdGFsaWdubWVudCA9IGlvbWFwX2Rpb19hbGlnbm1lbnQoaW9taS1cdTAwM2Vpbm9kZSwgaW9taS1cdTAwM2Vpb21hcC5iZGV2LCAwKTtcbjEwMTU6XHRcdGlmICgoaW9taS1cdTAwM2Vwb3MgfCBpb21pLVx1MDAzZWxlbikgXHUwMDI2IChhbGlnbm1lbnQgLSAxKSkge1xuMTAxNjpcdFx0XHRyZXQgPSAtRUlOVkFMO1xuMTAxNzpcdFx0XHRnb3RvIG91dF9kaW9fZW5kO1xuMTAxODpcdFx0fVxuMTAxOTpcdFxuMTAyMDpcdFx0aWYgKHVubGlrZWx5KCFpb21pLVx1MDAzZWlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19kaW9fZG9uZV93cSBcdTAwMjZcdTAwMjZcbjEwMjE6XHRcdFx0XHQhaXNfc3luY19raW9jYihpb2NiKSkpIHtcbjEwMjI6XHRcdFx0cmV0ID0gc2JfaW5pdF9kaW9fZG9uZV93cShpb21pLVx1MDAzZWlub2RlLVx1MDAzZWlfc2IpO1xuMTAyMzpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTAyNDpcdFx0XHRcdGdvdG8gb3V0X2Rpb19lbmQ7XG4xMDI1Olx0XHR9XG4xMDI2Olx0XG4xMDI3Olx0XHR0cmFjZV9pb21hcF9kaW9fcndfYmVnaW4oaW9jYiwgaXRlciwgMCwgMCk7XG4xMDI4Olx0XG4xMDI5Olx0XHRiaW8gPSBiaW9fYWxsb2NfYmlvc2V0KGlvbWktXHUwMDNlaW9tYXAuYmRldixcbjEwMzA6XHRcdFx0XHQgICAgICAgYmlvX2lvdl92ZWNzX3RvX2FsbG9jKGl0ZXIsIEJJT19NQVhfVkVDUyksXG4xMDMxOlx0XHRcdFx0ICAgICAgIFJFUV9PUF9SRUFELCBnZnAsIFx1MDAyNmlvbWFwX2Rpb19zaW1wbGVfcG9vbCk7XG4xMDMyOlx0XHRpZiAoIWJpbykge1xuMTAzMzpcdFx0XHRyZXQgPSAtRUFHQUlOO1xuMTAzNDpcdFx0XHRnb3RvIG91dF9kaW9fZW5kO1xuMTAzNTpcdFx0fVxuMTAzNjpcdFx0c3IgPSBjb250YWluZXJfb2YoYmlvLCBzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSwgYmlvKTtcbjEwMzc6XHRcdHNyLVx1MDAzZWlvY2IgPSBpb2NiO1xuMTAzODpcdFx0c3ItXHUwMDNlZGlvX2ZsYWdzID0gMDtcbjEwMzk6XHRcbjEwNDA6XHRcdGJpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IGlvbWFwX3NlY3RvcihcdTAwMjZpb21pLVx1MDAzZWlvbWFwLCBpb21pLVx1MDAzZXBvcyk7XG4xMDQxOlx0XHRiaW8tXHUwMDNlYmlfaW9wcmlvID0gaW9jYi1cdTAwM2VraV9pb3ByaW87XG4xMDQyOlx0XG4xMDQzOlx0XHRyZXQgPSBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgaXRlciwgYWxpZ25tZW50IC0gMSk7XG4xMDQ0Olx0XHRpZiAodW5saWtlbHkocmV0KSlcbjEwNDU6XHRcdFx0Z290byBvdXRfYmlvX3B1dDtcbjEwNDY6XHRcbjEwNDc6XHRcdGlmIChiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplICE9IGlvbWktXHUwMDNlbGVuKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzI0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IExpbmUgb2YgSW5xdWlyeSoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSwgbXkgaW5pdGlhbCBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB0aGUgYF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlYCBmdW5jdGlvbi4gSXQgc2VlbXMgaXQmIzM5O3Mgb25seSBkZXNpZ25lZCB0byBoYW5kbGUgdGhlIGBJT01BUF9NQVBQRURgIGNhc2UuIElmIGl0IGVuY291bnRlcnMgYW55dGhpbmcgZWxzZSwgbGlrZSBhIGhvbGUsIGl0JiMzOTtzIGltbWVkaWF0ZWx5IHJldHVybmluZyBgLUVOT1RCTEtgLiBUaGlzIHN1Z2dlc3RzIGl0ICpkb2VzbiYjMzk7dCogY2FsbCBgaW9tYXBfZGlvX2hvbGVfaXRlcmAsIHdoaWNoIGlzIGdvb2QgdG8ga25vdywgYW5kIHNpbXBsaWZpZXMgdGhpbmdzIGEgYml0IGluIHRoaXMgcGFydGljdWxhciBwYXRoLgoKVGhlcmVmb3JlLCB0aGUgZnVuY3Rpb25zIEkgbmVlZCB0byByZWFsbHkgZGl2ZSBpbnRvIGFyZSBgX19pb21hcF9kaW9fcndgIGFuZCBgaW9tYXBfZGlvX3J3YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRob3NlIGFyZSBzdHJ1Y3R1cmVkIGFuZCB1c2VkLgoKQWxyaWdodCwgYSBxdWljayBjaGVja+KApiB5ZXAsIGBpb21hcF9kaW9fcndgICppcyogZXhwb3J0ZWQsIGFzIGNvbmZpcm1lZCBieSBgRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfZGlvX3J3KWAuIE5vdywgSSBzaG91bGQgbWFrZSBzdXJlIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGV4cG9ydGVkIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIGNhbGxpbmcgYGlvbWFwX2Rpb19pdGVyYC4gSXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gZm9yIG15IHVzZS1jYXNlLCBzbyBmaW5kaW5nIGFsbCBjYWxsIHBhdGhzIGlzIGVzc2VudGlhbCB0byBteSB1bmRlcnN0YW5kaW5nIGFuZCBkZWJ1Z2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvbWFwX2Rpb19pdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmM9NjEyPXN0YXRpYyBpbnQgaW9tYXBfZGlvX2lubGluZV9pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppb21pLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjQzLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NjQ0OnN0YXRpYyBpbnQgaW9tYXBfZGlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY0NS17XG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9Njk2PV9faW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTgyMS1cdHdoaWxlICgocmV0ID0gaW9tYXBfaXRlcihcdTAwMjZpb21pLCBvcHMpKSBcdTAwM2UgMCkge1xuZnMvaW9tYXAvZGlyZWN0LWlvLmM6ODIyOlx0XHRpb21pLnN0YXR1cyA9IGlvbWFwX2Rpb19pdGVyKFx1MDAyNmlvbWksIGRpbyk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy04MjMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDQzCgkJCQkJCQlvdXRwdXQ6IDE1NAoJCQkJCQkJdGhvdWdodHM6IDU0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIGNhbiB0ZWxsLCBvbmx5IGBfX2lvbWFwX2Rpb19yd2AgY2FsbHMgYGlvbWFwX2Rpb19pdGVyYCwgbWFraW5nIHRob3NlIHRoZSBrZXkgZnVuY3Rpb25zIHRvIHdhdGNoLiBTbywgYF9faW9tYXBfZGlvX3J3YCBhbmQgYGlvbWFwX2Rpb19yd2AgYXJlIHRoZSBkaXJlY3QgZW50cnkgcG9pbnRzLiBJIHNob3VsZCBmb2N1cyBvbiB0aG9zZS4KCk5vdywgbGV0JiMzOTtzIGdldCB0aGUgY29uZmlndXJhdGlvbnMgc3RyYWlnaHQuIGBDT05GSUdfRlNfSU9NQVBgIGlzIHNlbGVjdGVkIGJ5IGEgcmFuZ2Ugb2YgZmlsZXN5c3RlbXMgaW5jbHVkaW5nIGBFWFQ0X0ZTYCwgYFhGU19GU2AsIGFuZCBgQlRSRlNfRlNgLCBhbW9uZyBvdGhlcnMuIFNpbmNlIEkgd2FudCB0byBtYWtlIHRoZSBmdXp6aW5nIGVmZmVjdGl2ZSwgSSBzaG91bGQganVzdCBzcGVjaWZ5IGBFWFQ0X0ZTYCwgYFhGU19GU2AsIGFuZCBgQlRSRlNfRlNgLiBUaGlzIGxvb2tzIGxpa2UgdGhlIG1vc3Qgc3RyYWlnaHRmb3J3YXJkIGFwcHJvYWNoLgoKTGV0JiMzOTtzIGRpdmUgaW50byB0aGF0IGBpb21hcF9kaW9faG9sZV9pdGVyYCBjb2RlIGFnYWluLgpgYGBjCnN0YXRpYyBpbnQgaW9tYXBfZGlvX2hvbGVfaXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKQp7Cglsb2ZmX3QgY29waWVkID0gaW92X2l0ZXJfemVybyhpb21hcF9sZW5ndGgoaXRlciksIGRpby0mZ3Q7c3VibWl0Lml0ZXIpOwoJdW5zaWduZWQgaW50IGJzID0gaV9ibG9ja3NpemUoaXRlci0mZ3Q7aW5vZGUpOwoJbG9mZl90IGFsaWduZWRfY29waWVkID0gcm91bmRfZG93bihjb3BpZWQsIGJzKTsKCgkvKgoJICogSWYgZnMgYmxvY2sgc2l6ZSBpcyBsYXJnZXIgdGhhbiBwYWdlIHNpemUsIHBhZ2UgZmF1bHQgZmFpbHVyZQoJICogY2FuIGNhdXNlIEBjb3BpZWQgdG8gYmUgcGFnZSBhbGlnbmVkIGJ1dCBub3QgZnMgYmxvY2sgYWxpZ25lZC4KCSAqLwoJaW92X2l0ZXJfcmV2ZXJ0KGRpby0mZ3Q7c3VibWl0Lml0ZXIsIGNvcGllZCAtIGFsaWduZWRfY29waWVkKTsKCWRpby0mZ3Q7c2l6ZSAmIzQzOz0gYWxpZ25lZF9jb3BpZWQ7CglpZiAoIWFsaWduZWRfY29waWVkKQoJCXJldHVybiAtRUZBVUxUOwoJcmV0dXJuIGlvbWFwX2l0ZXJfYWR2YW5jZShpdGVyLCBhbGlnbmVkX2NvcGllZCk7Cn0KYGBgClllcywgdGhpcyBjb2RlIGlzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vaywgZXNwZWNpYWxseSBmb3IgZnV6emluZy4gVGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgaG93IHdlIGhhbmRsZSAmIzM0O2hvbGVzJiMzNDsgb3IgdW53cml0dGVuIGV4dGVudHMgaW4gZGlyZWN0IEkvTy4gVGhlIGdvYWwgaXMgdG8gZW5zdXJlIHRoZSBjb3BpZWQgbGVuZ3RoIGlzIGFsaWduZWQgdG8gdGhlIGZpbGVzeXN0ZW0gYmxvY2sgc2l6ZSBhZnRlciBwb3NzaWJsZSBwYWdlIGZhdWx0IGZhaWx1cmVzLiBJdCBsb29rcyBsaWtlIGl0IGFkZHJlc3NlcyBhIGNyaXRpY2FsIGlzc3VlIHRoYXQgY291bGQgbGVhZCB0byBtaXNhbGlnbm1lbnQgYmV0d2VlbiBwYWdlIGFuZCBibG9jayBzaXplcywgd2hpY2ggd291bGQgY2F1c2UgYW4gZXJyb3IuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBkZWVwIHdpdGhpbiB0aGUgY29yZSBpb21hcCBkaXJlY3QgSS9PIHBhdGguCgpNeSBmb2N1cyBzaG91bGQgYmUgb24gZnV6emluZyB0aGUgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgIHNwZWNpZmljYWxseS4gSSB0aGluayBJJiMzOTt2ZSBnb3QgYSBnb29kIGhhbmRsZSBvbiB3aGVyZSB0byBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7WEZTX0ZTJiMzNDssCiAgICAmIzM0O0JUUkZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19pb21hcF9kaW9fcncmIzM0OywKICAgICYjMzQ7aW9tYXBfZGlvX3J3JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBiZWhhdmlvciBvZiBgaW9tYXBfZGlvX2hvbGVfaXRlcmAgdG8gY29ycmVjdGx5IGFsaWduIHRoZSBjb3BpZWQgbGVuZ3RoIHRvIHRoZSBmaWxlc3lzdGVtIGJsb2NrIHNpemUgd2hlbiByZWFkaW5nIGZyb20gYSBob2xlIG9yIHVud3JpdHRlbiBleHRlbnQgdXNpbmcgZGlyZWN0IEkvTy4gVGhpcyBwcmV2ZW50cyBpc3N1ZXMgd2hlcmUgcGFnZSBmYXVsdCBmYWlsdXJlcyBjb3VsZCByZXN1bHQgaW4gbGVuZ3RocyB0aGF0IGFyZSBwYWdlLWFsaWduZWQgYnV0IG5vdCBibG9jay1hbGlnbmVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgaW9tYXAgZGlyZWN0IEkvTyBwYXRoLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDssCiAgICAmIzM0O1hGU19GUyYjMzQ7LAogICAgJiMzNDtCVFJGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19faW9tYXBfZGlvX3J3JiMzNDssCiAgICAmIzM0O2lvbWFwX2Rpb19ydyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgIHRvIGNvcnJlY3RseSBhbGlnbiB0aGUgY29waWVkIGxlbmd0aCB0byB0aGUgZmlsZXN5c3RlbSBibG9jayBzaXplIHdoZW4gcmVhZGluZyBmcm9tIGEgaG9sZSBvciB1bndyaXR0ZW4gZXh0ZW50IHVzaW5nIGRpcmVjdCBJL08uIFRoaXMgcHJldmVudHMgaXNzdWVzIHdoZXJlIHBhZ2UgZmF1bHQgZmFpbHVyZXMgY291bGQgcmVzdWx0IGluIGxlbmd0aHMgdGhhdCBhcmUgcGFnZS1hbGlnbmVkIGJ1dCBub3QgYmxvY2stYWxpZ25lZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGlvbWFwIGRpcmVjdCBJL08gcGF0aC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIyOjQ1OjM4Ljc2OTkyMTM3N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzNDk5NjcwODI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIixcbiAgICBcIlhGU19GU1wiLFxuICAgIFwiQlRSRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2lvbWFwX2Rpb19yd1wiLFxuICAgIFwiaW9tYXBfZGlvX3J3XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJlaGF2aW9yIG9mIGBpb21hcF9kaW9faG9sZV9pdGVyYCB0byBjb3JyZWN0bHkgYWxpZ24gdGhlIGNvcGllZCBsZW5ndGggdG8gdGhlIGZpbGVzeXN0ZW0gYmxvY2sgc2l6ZSB3aGVuIHJlYWRpbmcgZnJvbSBhIGhvbGUgb3IgdW53cml0dGVuIGV4dGVudCB1c2luZyBkaXJlY3QgSS9PLiBUaGlzIHByZXZlbnRzIGlzc3VlcyB3aGVyZSBwYWdlIGZhdWx0IGZhaWx1cmVzIGNvdWxkIHJlc3VsdCBpbiBsZW5ndGhzIHRoYXQgYXJlIHBhZ2UtYWxpZ25lZCBidXQgbm90IGJsb2NrLWFsaWduZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBpb21hcCBkaXJlY3QgSS9PIHBhdGguXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIyOjQ1OjM4Ljc2OTkyNzE4N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwMDAxNDk4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGJkZDMyNzEzNzI0YjM1NzQ2YjRhMzk1MTJkNDUwZmIyMjNjZWUzM2RcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgNCAyMjo0NTozNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9pb21hcC9kaXJlY3QtaW8uYyBiL2ZzL2lvbWFwL2RpcmVjdC1pby5jXFxuaW5kZXggYjMzNjhkNjRlODFiYi4uMDFmMjZmYjNiM2IyYyAxMDA2NDRcXG4tLS0gYS9mcy9pb21hcC9kaXJlY3QtaW8uY1xcbisrKyBiL2ZzL2lvbWFwL2RpcmVjdC1pby5jXFxuQEAgLTU5NCwxMiArNTk0LDE5IEBAIHN0YXRpYyBpbnQgaW9tYXBfZGlvX2Jpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXFxuIFxcbiBzdGF0aWMgaW50IGlvbWFwX2Rpb19ob2xlX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG4ge1xcbi1cXHRsb2ZmX3QgbGVuZ3RoID0gaW92X2l0ZXJfemVybyhpb21hcF9sZW5ndGgoaXRlciksIGRpby1cXHUwMDNlc3VibWl0Lml0ZXIpO1xcbitcXHRsb2ZmX3QgY29waWVkID0gaW92X2l0ZXJfemVybyhpb21hcF9sZW5ndGgoaXRlciksIGRpby1cXHUwMDNlc3VibWl0Lml0ZXIpO1xcbitcXHR1bnNpZ25lZCBpbnQgYnMgPSBpX2Jsb2Nrc2l6ZShpdGVyLVxcdTAwM2Vpbm9kZSk7XFxuK1xcdGxvZmZfdCBhbGlnbmVkX2NvcGllZCA9IHJvdW5kX2Rvd24oY29waWVkLCBicyk7XFxuIFxcbi1cXHRkaW8tXFx1MDAzZXNpemUgKz0gbGVuZ3RoO1xcbi1cXHRpZiAoIWxlbmd0aClcXG4rXFx0LypcXG4rXFx0ICogSWYgZnMgYmxvY2sgc2l6ZSBpcyBsYXJnZXIgdGhhbiBwYWdlIHNpemUsIHBhZ2UgZmF1bHQgZmFpbHVyZVxcbitcXHQgKiBjYW4gY2F1c2UgQGNvcGllZCB0byBiZSBwYWdlIGFsaWduZWQgYnV0IG5vdCBmcyBibG9jayBhbGlnbmVkLlxcbitcXHQgKi9cXG4rXFx0aW92X2l0ZXJfcmV2ZXJ0KGRpby1cXHUwMDNlc3VibWl0Lml0ZXIsIGNvcGllZCAtIGFsaWduZWRfY29waWVkKTtcXG4rXFx0ZGlvLVxcdTAwM2VzaXplICs9IGFsaWduZWRfY29waWVkO1xcbitcXHRpZiAoIWFsaWduZWRfY29waWVkKVxcbiBcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4tXFx0cmV0dXJuIGlvbWFwX2l0ZXJfYWR2YW5jZShpdGVyLCBsZW5ndGgpO1xcbitcXHRyZXR1cm4gaW9tYXBfaXRlcl9hZHZhbmNlKGl0ZXIsIGFsaWduZWRfY29waWVkKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBpb21hcF9kaW9faW5saW5lX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKmlvbWksIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjI6NDU6NDAuMDcwNTM1MjUzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjIxOTkwNDg0MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiLFxuICAgIFwiWEZTX0ZTXCIsXG4gICAgXCJCVFJGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9faW9tYXBfZGlvX3J3XCIsXG4gICAgXCJpb21hcF9kaW9fcndcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgIHRvIGNvcnJlY3RseSBhbGlnbiB0aGUgY29waWVkIGxlbmd0aCB0byB0aGUgZmlsZXN5c3RlbSBibG9jayBzaXplIHdoZW4gcmVhZGluZyBmcm9tIGEgaG9sZSBvciB1bndyaXR0ZW4gZXh0ZW50IHVzaW5nIGRpcmVjdCBJL08uIFRoaXMgcHJldmVudHMgaXNzdWVzIHdoZXJlIHBhZ2UgZmF1bHQgZmFpbHVyZXMgY291bGQgcmVzdWx0IGluIGxlbmd0aHMgdGhhdCBhcmUgcGFnZS1hbGlnbmVkIGJ1dCBub3QgYmxvY2stYWxpZ25lZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGlvbWFwIGRpcmVjdCBJL08gcGF0aC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYmRkMzI3MTM3MjRiMzU3NDZiNGEzOTUxMmQ0NTBmYjIyM2NlZTMzZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDQgMjI6NDU6MzcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9pb21hcC9kaXJlY3QtaW8uYyBiL2ZzL2lvbWFwL2RpcmVjdC1pby5jXG5pbmRleCBiMzM2OGQ2NGU4MWJiLi4wMWYyNmZiM2IzYjJjIDEwMDY0NFxuLS0tIGEvZnMvaW9tYXAvZGlyZWN0LWlvLmNcbisrKyBiL2ZzL2lvbWFwL2RpcmVjdC1pby5jXG5AQCAtNTk0LDEyICs1OTQsMTkgQEAgc3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbiBcbiBzdGF0aWMgaW50IGlvbWFwX2Rpb19ob2xlX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbiB7XG4tXHRsb2ZmX3QgbGVuZ3RoID0gaW92X2l0ZXJfemVybyhpb21hcF9sZW5ndGgoaXRlciksIGRpby1cdTAwM2VzdWJtaXQuaXRlcik7XG4rXHRsb2ZmX3QgY29waWVkID0gaW92X2l0ZXJfemVybyhpb21hcF9sZW5ndGgoaXRlciksIGRpby1cdTAwM2VzdWJtaXQuaXRlcik7XG4rXHR1bnNpZ25lZCBpbnQgYnMgPSBpX2Jsb2Nrc2l6ZShpdGVyLVx1MDAzZWlub2RlKTtcbitcdGxvZmZfdCBhbGlnbmVkX2NvcGllZCA9IHJvdW5kX2Rvd24oY29waWVkLCBicyk7XG4gXG4tXHRkaW8tXHUwMDNlc2l6ZSArPSBsZW5ndGg7XG4tXHRpZiAoIWxlbmd0aClcbitcdC8qXG4rXHQgKiBJZiBmcyBibG9jayBzaXplIGlzIGxhcmdlciB0aGFuIHBhZ2Ugc2l6ZSwgcGFnZSBmYXVsdCBmYWlsdXJlXG4rXHQgKiBjYW4gY2F1c2UgQGNvcGllZCB0byBiZSBwYWdlIGFsaWduZWQgYnV0IG5vdCBmcyBibG9jayBhbGlnbmVkLlxuK1x0ICovXG4rXHRpb3ZfaXRlcl9yZXZlcnQoZGlvLVx1MDAzZXN1Ym1pdC5pdGVyLCBjb3BpZWQgLSBhbGlnbmVkX2NvcGllZCk7XG4rXHRkaW8tXHUwMDNlc2l6ZSArPSBhbGlnbmVkX2NvcGllZDtcbitcdGlmICghYWxpZ25lZF9jb3BpZWQpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuLVx0cmV0dXJuIGlvbWFwX2l0ZXJfYWR2YW5jZShpdGVyLCBsZW5ndGgpO1xuK1x0cmV0dXJuIGlvbWFwX2l0ZXJfYWR2YW5jZShpdGVyLCBhbGlnbmVkX2NvcGllZCk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgaW9tYXBfZGlvX2lubGluZV9pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppb21pLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMjo0NTo0MC4wNzA1MzY1MDNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODI4ODQ1MDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRGlyZWN0IElPIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgZnMvaW9tYXAvZGlyZWN0LWlvLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBpb21hcF9kaW9faG9sZV9pdGVyYCBmdW5jdGlvbi4gRnJvbSB3aGF0IEkgY2FuIHRlbGwsIHRoZSBjb3JlIGNoYW5nZSBmb2N1c2VzIG9uIGhvdyBgaW92X2l0ZXJfemVyb2AgaXMgaGFuZGxlZCwgYWRqdXN0aW5nIHRoZSBjb3BpZWQgbGVuZ3RoIHRvIG1hdGNoIHRoZSBibG9jayBzaXplLiBTZWVtcyBmdW5jdGlvbmFsLCBhbmQgZGVmaW5pdGVseSBhZmZlY3RzIGRpcmVjdCBJTyB3aXRoaW4gdGhlIGlvbWFwIGZyYW1ld29yay4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCdzIG5haWwgZG93biB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgZW5hYmxlcyBhbmQgY29udHJvbHMgdGhpcyBiZWhhdmlvci5cblxuTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uJ3MgaW1tZWRpYXRlIGNvbnRleHQuIFRpbWUgdG8gcHVsbCBvdXQgYGdyZXBgIGFuZCBzZWUgd2hlcmUgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgIGlzIGFjdHVhbGx5ICp1c2VkKi4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBzdXJyb3VuZGluZyBmdW5jdGlvbnMgdGhhdCBhcmUgaW1wYWN0ZWQgYW5kIHRoZSBvdmVyYWxsIHNjb3BlIG9mIHRoaXMgY2hhbmdlLiBPbmNlIEkgc2VlIHRoZSBjb250ZXh0cywgSSBjYW4gZGV0ZXJtaW5lIHRoZSBpbXBhY3Qgb2YgdGhlIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjkzLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjI6NDU6NDMuODk5MzgzNzQ2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyNTg3NzEzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb21hcF9kaW9faG9sZV9pdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2lvbWFwL2RpcmVjdC1pby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2lvbWFwL2RpcmVjdC1pby5jPTQxNT1zdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNTk0LVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjU5NTpzdGF0aWMgaW50IGlvbWFwX2Rpb19ob2xlX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy01OTYte1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9NjQ0PXN0YXRpYyBpbnQgaW9tYXBfZGlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY0OS1cXHRcXHRcXHRyZXR1cm4gLUVJTztcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo2NTA6XFx0XFx0cmV0dXJuIGlvbWFwX2Rpb19ob2xlX2l0ZXIoaXRlciwgZGlvKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NTEtXFx0Y2FzZSBJT01BUF9VTldSSVRURU46XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjUyLVxcdFxcdGlmICghKGRpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT01BUF9ESU9fV1JJVEUpKVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjY1MzpcXHRcXHRcXHRyZXR1cm4gaW9tYXBfZGlvX2hvbGVfaXRlcihpdGVyLCBkaW8pO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY1NC1cXHRcXHRyZXR1cm4gaW9tYXBfZGlvX2Jpb19pdGVyKGl0ZXIsIGRpbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIyOjQ1OjQ0LjIyNTI3NDg5MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NzQwNDAxMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFscmVhZHkgcXVpdGUgZmFtaWxpYXIgd2l0aCBJL08gbWFwcGluZyBhbmQgZGlyZWN0IEkvTyB3aXRoaW4gYSBrZXJuZWwgY29udGV4dDpcblxuKipBbmFseXppbmcgdGhlIENhbGwgU3RydWN0dXJlIG9mIGBpb21hcF9kaW9faG9sZV9pdGVyYCoqXG5cbkFscmlnaHQsIHNvIGBpb21hcF9kaW9faG9sZV9pdGVyYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQncyBpbnRlcm5hbCB0byB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LiBObyBleHRlcm5hbCBmdW5jdGlvbnMgY2FuIGRpcmVjdGx5IGNhbGwgaXQuIEl0J3MgZXNzZW50aWFsbHkgYSBoZWxwZXIgZnVuY3Rpb24sIGxpa2VseSBlbmNhcHN1bGF0ZWQgd2l0aGluIGEgbGFyZ2VyIG1vZHVsZS4gSSBrbm93IGBpb21hcF9kaW9faXRlcmAgaXMgdGhlIHB1YmxpYy1mYWNpbmcgZW50cnkgcG9pbnQsIGFuZCB0aGF0IGBpb21hcF9kaW9faG9sZV9pdGVyYCBpcyBiZWluZyBjYWxsZWQgZnJvbSB3aXRoaW4gaXQuXG5cbk15IHByaW1hcnkgZm9jdXMgbm93IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBmcm9tIHRoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGNvbnRleHQuIEkgbmVlZCB0byBrbm93IHdoZXJlIGBpb21hcF9kaW9faXRlcmAgaXMgYmVpbmcgY2FsbGVkIGZyb20uIFdoYXQgcm91dGluZXMgYXJlIGRlcGVuZGVudCB1cG9uIHRoZSBmdW5jdGlvbmFsaXR5IHRoYXQgaW5jbHVkZXMgYGlvbWFwX2Rpb19pdGVyYD8gS25vd2luZyB0aGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHdoeSB0aGlzIGl0ZXJhdGlvbiBvdmVyIGhvbGVzIGlzIGhhcHBlbmluZy4gSXMgaXQgdXNlZCBmb3IgcmVhZCBvcGVyYXRpb25zLCB3cml0ZSBvcGVyYXRpb25zLCBvciBib3RoPyBBcmUgd2UgZGVhbGluZyB3aXRoIHNwYXJzZSBmaWxlcywgb3Igd2hhdD8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGVycyBvZiBgaW9tYXBfZGlvX2l0ZXJgIHdpbGwgc2hlZCBsaWdodCBvbiB0aGUgcHVycG9zZSBhbmQgdGhlIG92ZXJhbGwgZGVzaWduIHN0cmF0ZWd5IG9mIHRoaXMgZnVuY3Rpb24gYW5kIGl0cyBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcy4gSSB3aWxsIGFsc28gaGF2ZSB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgd2hlbiBJIHVuZGVyc3RhbmQgdGhlIGNhbGxpbmcgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAyMCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIyOjQ1OjQ3Ljg5OTMxODMwNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzQxOTQwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb21hcF9kaW9faXRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9pb21hcC9kaXJlY3QtaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9pb21hcC9kaXJlY3QtaW8uYz02MTI9c3RhdGljIGludCBpb21hcF9kaW9faW5saW5lX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKmlvbWksIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY0My1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo2NDQ6c3RhdGljIGludCBpb21hcF9kaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY0NS17XFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYz02OTY9X19pb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy04MjEtXFx0d2hpbGUgKChyZXQgPSBpb21hcF9pdGVyKFxcdTAwMjZpb21pLCBvcHMpKSBcXHUwMDNlIDApIHtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo4MjI6XFx0XFx0aW9taS5zdGF0dXMgPSBpb21hcF9kaW9faXRlcihcXHUwMDI2aW9taSwgZGlvKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy04MjMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIyOjQ1OjQ3Ljk0Mjc0MTk0M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNTk4ODcxNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFscmVhZHkgcXVpdGUgZmFtaWxpYXIgd2l0aCB0aGUga2VybmVsJ3MgSS9PIGxheWVyOlxuXG4qKkRpZ2dpbmcgaW50byBpb21hcCBEaXJlY3QgSS9PKipcblxuQWxyaWdodCwgc28gYF9faW9tYXBfZGlvX3J3YC4uLiB0aGF0J3MgdGhlIGJpZyBvbmUsIHRoZSBjZW50cmFsIGh1YiBmb3IgSS9PIG9wZXJhdGlvbnMgdXNpbmcgdGhlIGlvbWFwIGZyYW1ld29yayBpbiBkaXJlY3QgSS9PIG1vZGUuIEl0J3MgdGhlIHBvaW50IG9mIGVudHJ5LCB0aGUgXCJnb1wiIGJ1dHRvbiwgYXMgaXQgd2VyZS4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhpcyBmdW5jdGlvbi5cblxuTGV0IG1lIHNlZSwgaXMgdGhpcyBjb3JlIGZ1bmN0aW9uIGFjdHVhbGx5IHZpc2libGUgdG8gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbD8gT3IsIGlzIGl0IHBlcmhhcHMgb25seSB1c2VkIGludGVybmFsbHk/IENoZWNraW5nIHRoZSBleHBvcnQgc3RhdHVzIG9yIGNyb3NzLXJlZmVyZW5jaW5nIGFsbCB1c2VzIHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJvbGUgaW4gdGhlIGxhcmdlciBzeXN0ZW0uIEl0J3MgYWxsIGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlIGJvdW5kYXJ5IGNvbmRpdGlvbnMgYW5kIGludGVyYWN0aW9ucyBvZiB0aGUgRGlyZWN0IEkvTyBzeXN0ZW0sIGFuZCBkZXRlcm1pbmluZyB3aGF0IHRoZSBpbXBhY3Qgb2YgbW9kaWZ5aW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY4MiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIyOjQ1OjUxLjIwMjYzMDY5N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzI2MDM1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2lvbWFwX2Rpb19yd1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9pb21hcC9kaXJlY3QtaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9pb21hcC9kaXJlY3QtaW8uYz00MTU9c3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTUxMC1cXHRcXHQgKiBXcml0ZXMgdGhhdCBleHRlbmQgaV9zaXplIGFyZSBhbHNvIG5vdCBzdXBwb3J0ZWQsIGJ1dCB0aGlzIGlzXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NTExOlxcdFxcdCAqIGhhbmRsZWQgaW4gX19pb21hcF9kaW9fcncoKS5cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy01MTItXFx0XFx0ICovXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYz02NDQ9c3RhdGljIGludCBpb21hcF9kaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjg0LSAqIFdoZW4gcGFnZSBmYXVsdHMgYXJlIGRpc2FibGVkIGFuZCBAZGlvX2ZsYWdzIGluY2x1ZGVzIElPTUFQX0RJT19QQVJUSUFMLFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjY4NTogKiBfX2lvbWFwX2Rpb19ydyBjYW4gcmV0dXJuIGEgcGFydGlhbCByZXN1bHQgaWYgaXQgZW5jb3VudGVycyBhIG5vbi1yZXNpZGVudFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY4Ni0gKiBwYWdlIGluIEBpdGVyIGFmdGVyIHByZXBhcmluZyBhIHRyYW5zZmVyLiAgSW4gdGhhdCBjYXNlLCB0aGUgbm9uLXJlc2lkZW50XFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYz02OTU9c3RydWN0IGlvbWFwX2RpbyAqXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6Njk2Ol9faW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY5Ny1cXHRcXHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzICpkb3BzLFxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTA2LX1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5MDc6RVhQT1JUX1NZTUJPTF9HUEwoX19pb21hcF9kaW9fcncpO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkwOC1cXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTkxMD1pb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTUtXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTE2OlxcdGRpbyA9IF9faW9tYXBfZGlvX3J3KGlvY2IsIGl0ZXIsIG9wcywgZG9wcywgZGlvX2ZsYWdzLCBwcml2YXRlLFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkxNy1cXHRcXHRcXHQgICAgIGRvbmVfYmVmb3JlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjI6NDU6NTEuMjQ1ODkyOTM0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIyODY4MDgxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBEaXJlY3QgSS9PIEltcGxlbWVudGF0aW9uKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IGRpcmVjdCBJL08gaXMgcmVhbGx5IG9wZXJhdGluZy4gU2VlbXMgbGlrZSBteSBzdGFydGluZyBwb2ludCBpcyB0byB1bmRlcnN0YW5kIGBfX2lvbWFwX2Rpb19yd2AgYW5kIGBpb21hcF9kaW9fcndgLiBUaG9zZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zLCB0aGUgcmVhbCBoZWFydCBvZiB0aGUgZGlyZWN0IEkvTyBwcm9jZXNzLCBJIGJldC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgY3JpdGljYWwgdG8gZW5hYmxlIHRoZSBgZnMvaW9tYXAvZGlyZWN0LWlvLmNgIG1vZHVsZSBpbiB0aGUgZmlyc3QgcGxhY2UuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBjb250ZXh0LCB0aGUgZm91bmRhdGlvbiwgZm9yIHRydWx5IGdyYXNwaW5nIHdoYXQncyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIEl0J3MgdGltZSB0byB0cmFjayBkb3duIHRob3NlIGRlcGVuZGVuY2llcyBhbmQgc2VlIHdoYXQgdHJpZ2dlcnMgdGhlIGluY2x1c2lvbiBvZiB0aGF0IGZpbGUuIEtub3dpbmcgdGhlIHByZXJlcXVpc2l0ZXMgd2lsbCBoZWxwIGltbWVuc2VseSBpbiBteSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU3MywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIyOjQ1OjU0LjQ3NDU3NjMzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjY1ODQ5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkaXJlY3QtaW8ub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9pb21hcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW9tYXAvTWFrZWZpbGU9MTE9aW9tYXAteVxcdFxcdFxcdFxcdCs9IHRyYWNlLm8gXFxcXFxcbi0tXFxuZnMvaW9tYXAvTWFrZWZpbGUtMTMtXFx0XFx0XFx0XFx0ICAgYnVmZmVyZWQtaW8ub1xcbmZzL2lvbWFwL01ha2VmaWxlOjE0OmlvbWFwLSQoQ09ORklHX0JMT0NLKVxcdFxcdCs9IGRpcmVjdC1pby5vIFxcXFxcXG5mcy9pb21hcC9NYWtlZmlsZS0xNS1cXHRcXHRcXHRcXHQgICBpb2VuZC5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjI6NDU6NTQuNTE3MjM4NjI3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNDQzODc3ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBLZXJuZWwncyBEaXJlY3QgSS9PIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBgQ09ORklHX0JMT0NLYCBpcyB0dXJuaW5nIG9uIGBkaXJlY3QtaW8ub2AsIHdoaWNoIGlzIGluIHRoZSBgZnMvaW9tYXAvTWFrZWZpbGVgLiBUaGF0J3MgaW50ZXJlc3RpbmcuIEkgaW1tZWRpYXRlbHkgd29uZGVyIGhvdyB0aGF0IGFsbCBmaXRzIHRvZ2V0aGVyLCBzcGVjaWZpY2FsbHkgaWYgYGZzL2lvbWFwL01ha2VmaWxlYCBjb25kaXRpb25hbGx5IGluY2x1ZGVzIGBpb21hcC5vYCBiYXNlZCBvbiBgQ09ORklHX0ZTX0lPTUFQYCBvciBzb21ldGhpbmcgbGlrZSB0aGF0LiBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgZnMvaW9tYXAvTWFrZWZpbGVgIGhhbmRsZXMgYGlvbWFwLm9gLiBUaW1lIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGF0IGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5MzIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMjo0NTo1Ny42NjE2MjgzM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9pb21hcC9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgQ29weXJpZ2h0IChjKSAyMDE5IE9yYWNsZS5cXG4gICA0OlxcdCMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cXG4gICA1OlxcdCNcXG4gICA2OlxcdFxcbiAgIDc6XFx0Y2NmbGFncy15ICs9IC1JICQoc3JjKVxcdFxcdCMgbmVlZGVkIGZvciB0cmFjZSBldmVudHNcXG4gICA4OlxcdFxcbiAgIDk6XFx0b2JqLSQoQ09ORklHX0ZTX0lPTUFQKVxcdFxcdCs9IGlvbWFwLm9cXG4gIDEwOlxcdFxcbiAgMTE6XFx0aW9tYXAteVxcdFxcdFxcdFxcdCs9IHRyYWNlLm8gXFxcXFxcbiAgMTI6XFx0XFx0XFx0XFx0XFx0ICAgaXRlci5vIFxcXFxcXG4gIDEzOlxcdFxcdFxcdFxcdFxcdCAgIGJ1ZmZlcmVkLWlvLm9cXG4gIDE0OlxcdGlvbWFwLSQoQ09ORklHX0JMT0NLKVxcdFxcdCs9IGRpcmVjdC1pby5vIFxcXFxcXG4gIDE1OlxcdFxcdFxcdFxcdFxcdCAgIGlvZW5kLm8gXFxcXFxcbiAgMTY6XFx0XFx0XFx0XFx0XFx0ICAgZmllbWFwLm8gXFxcXFxcbiAgMTc6XFx0XFx0XFx0XFx0XFx0ICAgc2Vlay5vIFxcXFxcXG4gIDE4OlxcdFxcdFxcdFxcdFxcdCAgIGJpby5vXFxuICAxOTpcXHRpb21hcC0kKENPTkZJR19TV0FQKVxcdFxcdCs9IHN3YXBmaWxlLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjI6NDU6NTcuNjYxNjgzNTc5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMjk2MTgzNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbml0aWFsIENvbmZpZ3VyYXRpb24gQ2hlY2sqKlxuXG5SaWdodCwgc28gdG8gZ2V0IHRoaXMgZnVuY3Rpb25hbGl0eSB1cCBhbmQgcnVubmluZywgSSdtIGdvaW5nIHRvIG5lZWQgdG8gbWFrZSBzdXJlIGBDT05GSUdfRlNfSU9NQVBgIGlzIGVuYWJsZWQsIGFuZCBgQ09ORklHX0JMT0NLYCBpcyBhcyB3ZWxsLiBUaGF0IG1ha2VzIHNlbnNlLCBgQ09ORklHX0JMT0NLYCBpcyBhIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrLiBBbmQgYENPTkZJR19GU19JT01BUGA/IEFoIHllcywgdGhhdOKAmXMgcmlnaHQsIHRoYXQncyB0aGUgaW9tYXAgaW5mcmFzdHJ1Y3R1cmUsIGFuZCBpdOKAmXMgdXRpbGl6ZWQgYnkgYSB3aG9sZSByYW5nZSBvZiBmaWxlc3lzdGVtcyDigJMgZXh0NCwgeGZzLCBidHJmcywgYWxsIHRoZSB1c3VhbCBzdXNwZWN0cy4gSSdkIGJldHRlciBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZW50cnkgZm9yIGBGU19JT01BUGAgaW4gYGZzL0tjb25maWdgIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyBhbmQgY29udGV4dC4gR290dGEgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MjcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIyOjQ2OjAwLjc5MTMwNDQyM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM1NTU3MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZTX0lPTUFQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTEyPWNvbmZpZyBWQUxJREFURV9GU19QQVJTRVJcXG4tLVxcbmZzL0tjb25maWctMTctXFxuZnMvS2NvbmZpZzoxODpjb25maWcgRlNfSU9NQVBcXG5mcy9LY29uZmlnLTE5LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjI6NDY6MDAuODY0ODgzMjg4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MTY4OTkwNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGVjb2RpbmcgVGhpcyBCb29sZWFuIEVuaWdtYSoqXG5cbkFscmlnaHQsIHNvIHRoZXJlJ3MgdGhpcyBoaWRkZW4gQm9vbGVhbiBzZXR0aW5nLCBhbmQgaXQncyBiZWluZyBzZWxlY3RlZCBieSB0aGUgZmlsZXN5c3RlbXMgdGhlbXNlbHZlcy4gSW50ZXJlc3RpbmcuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkaWcgZGVlcGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2VsZWN0aW9uIGNyaXRlcmlhLiBXaGF0IHRyaWdnZXJzIHRoaXMgcGFydGljdWxhciBmbGFnPyBUaGUgXCJ3aGF0XCIgaXMgdGhlIG1vc3QgaW1wb3J0YW50IHF1ZXN0aW9uLiBJcyBpdCBiYXNlZCBvbiBzcGVjaWZpYyBmaWxlc3lzdGVtIGZlYXR1cmVzPyBIYXJkd2FyZSBkZXRlY3Rpb24/IENvbmZpZ3VyYXRpb24gcGFyYW1ldGVycz8gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGNvZGUgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgaXQuIExldCdzIHNlZSBpZiBJIGNhbiB0cmFjZSB0aGUgc2VsZWN0aW9uIGxvZ2ljIGFuZCBnZXQgYSBoYW5kbGUgb24gdGhlIHdoeSBhbmQgaG93LiBUaW1lIHRvIGRpc3NlY3QgdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NTUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMjo0NjowMy43ODE3ODU1NTZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyNTY0NjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBGU19JT01BUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZz01OD1jb25maWcgRlNfREFYXFxuLS1cXG5mcy9LY29uZmlnLTYxLVxcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcXG5mcy9LY29uZmlnOjYyOlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL0tjb25maWctNjMtXFx0c2VsZWN0IERBWFxcbi0tXFxuZnMvYnRyZnMvS2NvbmZpZz0zPWNvbmZpZyBCVFJGU19GU1xcbi0tXFxuZnMvYnRyZnMvS2NvbmZpZy0xNC1cXHRzZWxlY3QgWlNURF9ERUNPTVBSRVNTXFxuZnMvYnRyZnMvS2NvbmZpZzoxNTpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9idHJmcy9LY29uZmlnLTE2LVxcdHNlbGVjdCBSQUlENl9QUVxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZz0zPWNvbmZpZyBFUk9GU19GU1xcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy04LVxcdHNlbGVjdCBDUllQVE9fREVGTEFURSBpZiBFUk9GU19GU19aSVBfQUNDRUxcXG5mcy9lcm9mcy9LY29uZmlnOjk6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMvZXJvZnMvS2NvbmZpZy0xMC1cXHRzZWxlY3QgTFo0X0RFQ09NUFJFU1MgaWYgRVJPRlNfRlNfWklQXFxuLS1cXG5mcy9leGZhdC9LY29uZmlnPTM9Y29uZmlnIEVYRkFUX0ZTXFxuLS1cXG5mcy9leGZhdC9LY29uZmlnLTYtXFx0c2VsZWN0IE5MU1xcbmZzL2V4ZmF0L0tjb25maWc6NzpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9leGZhdC9LY29uZmlnLTgtXFx0aGVscFxcbi0tXFxuZnMvZXh0Mi9LY29uZmlnPTI9Y29uZmlnIEVYVDJfRlNcXG4tLVxcbmZzL2V4dDIvS2NvbmZpZy00LVxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbmZzL2V4dDIvS2NvbmZpZzo1OlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL2V4dDIvS2NvbmZpZy02LVxcdGhlbHBcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZz0yPWNvbmZpZyBFWFQ0X0ZTXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNy1cXHRzZWxlY3QgQ1JDMzJcXG5mcy9leHQ0L0tjb25maWc6ODpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9leHQ0L0tjb25maWctOS1cXHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cXG4tLVxcbmZzL2YyZnMvS2NvbmZpZz0yPWNvbmZpZyBGMkZTX0ZTXFxuLS1cXG5mcy9mMmZzL0tjb25maWctOS1cXHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cXG5mcy9mMmZzL0tjb25maWc6MTA6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMvZjJmcy9LY29uZmlnLTExLVxcdHNlbGVjdCBMWjRfQ09NUFJFU1MgaWYgRjJGU19GU19MWjRcXG4tLVxcbmZzL2Z1c2UvS2NvbmZpZz0yPWNvbmZpZyBGVVNFX0ZTXFxuLS1cXG5mcy9mdXNlL0tjb25maWctNC1cXHRzZWxlY3QgRlNfUE9TSVhfQUNMXFxuZnMvZnVzZS9LY29uZmlnOjU6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMvZnVzZS9LY29uZmlnLTYtXFx0aGVscFxcbi0tXFxuZnMvZ2ZzMi9LY29uZmlnPTI9Y29uZmlnIEdGUzJfRlNcXG4tLVxcbmZzL2dmczIvS2NvbmZpZy03LVxcdHNlbGVjdCBRVU9UQUNUTFxcbmZzL2dmczIvS2NvbmZpZzo4OlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL2dmczIvS2NvbmZpZy05LVxcdGhlbHBcXG4tLVxcbmZzL2hwZnMvS2NvbmZpZz0yPWNvbmZpZyBIUEZTX0ZTXFxuLS1cXG5mcy9ocGZzL0tjb25maWctNS1cXHRzZWxlY3QgQlVGRkVSX0hFQURcXG5mcy9ocGZzL0tjb25maWc6NjpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9ocGZzL0tjb25maWctNy1cXHRoZWxwXFxuLS1cXG5mcy9uaWxmczIvS2NvbmZpZz0yPWNvbmZpZyBOSUxGUzJfRlNcXG4tLVxcbmZzL25pbGZzMi9LY29uZmlnLTUtXFx0c2VsZWN0IENSQzMyXFxuZnMvbmlsZnMyL0tjb25maWc6NjpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9uaWxmczIvS2NvbmZpZy03LVxcdGhlbHBcXG4tLVxcbmZzL250ZnMvS2NvbmZpZz0yPWNvbmZpZyBOVEZTX0ZTXFxuLS1cXG5mcy9udGZzL0tjb25maWctNC1cXHRzZWxlY3QgTkxTXFxuZnMvbnRmcy9LY29uZmlnOjU6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMvbnRmcy9LY29uZmlnLTYtXFx0aGVscFxcbi0tXFxuZnMveGZzL0tjb25maWc9Mj1jb25maWcgWEZTX0ZTXFxuLS1cXG5mcy94ZnMvS2NvbmZpZy02LVxcdHNlbGVjdCBDUkMzMlxcbmZzL3hmcy9LY29uZmlnOjc6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMveGZzL0tjb25maWctOC1cXHRoZWxwXFxuLS1cXG5mcy96b25lZnMvS2NvbmZpZz0xPWNvbmZpZyBaT05FRlNfRlNcXG4tLVxcbmZzL3pvbmVmcy9LY29uZmlnLTQtXFx0ZGVwZW5kcyBvbiBCTEtfREVWX1pPTkVEXFxuZnMvem9uZWZzL0tjb25maWc6NTpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy96b25lZnMvS2NvbmZpZy02LVxcdHNlbGVjdCBDUkMzMlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMjo0NjowMy44NTQzNTQ4MjFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMwNDg5MjE4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXJlY3QgSU8gRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSB3ZSdyZSBlbmFibGluZyBgRlNfSU9NQVBgIOKAkyB3aGljaCBpcyBpbnRlcmVzdGluZy4gV2UncmUgZ2V0dGluZyBpdCB0aHJvdWdoIGVpdGhlciBgRVhUNF9GU2AsIGBYRlNfRlNgLCBvciBgQlRSRlNfRlNgLiBSaWdodCwgbWFrZXMgc2Vuc2UsIHRoYXQgbWFrZXMgdGhlIG1vc3QgY29tbW9uIGZpbGVzeXN0ZW0gY2hvaWNlcyBJIHdvdWxkIGV4cGVjdC4gQW5kLCBvZiBjb3Vyc2UsIHdlJ2xsIG5lZWQgYENPTkZJR19CTE9DS2AgZW5hYmxlZCBhcyB3ZWxsLCB0aGF0IGdvZXMgd2l0aG91dCBzYXlpbmcuXG5cblRoZSByZWFsIG1lYXQgb2YgdGhpcyBzZWVtcyB0byBiZSB0aGUgbW9kaWZpY2F0aW9ucyB0byBgaW9tYXBfZGlvX2hvbGVfaXRlcmAuIFRoYXQncyBjcml0aWNhbCwgYmVjYXVzZSB0aGF0J3Mgd2hhdCBnZXRzIGNhbGxlZCBzcGVjaWZpY2FsbHkgZHVyaW5nIGRpcmVjdCBJL08gd2hlbiB3ZSdyZSBoaXR0aW5nIGEgaG9sZSBpbiB0aGUgZmlsZS4gU28sIHRoaXMgaXMgZGVmaW5pdGVseSB0b3VjaGluZyBmdW5jdGlvbmFsIGNvZGUgdGhhdCBpcyBiZWluZyB1c2VkLCBzbyB0aGlzIG1ha2VzIHNlbnNlIHRvIGJlIGRvaW5nLlxuXG5MZXQncyBzZWUsIHdoYXQgZnVuY3Rpb25zIHNob3VsZCBJIHplcm8gaW4gb24/IExvb2tzIGxpa2UgYF9faW9tYXBfZGlvX3J3YCBhbmQgYGlvbWFwX2Rpb19yd2AgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGV4YW1pbmUuIFRoZXkgbXVzdCBiZSB0aGUgY29yZSBvZiB0aGUgZGlyZWN0IEkvTyByZWFkL3dyaXRlIGltcGxlbWVudGF0aW9uLiBJIHNob3VsZCBhbHNvIGNoZWNrIGFuZCBzZWUgd2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkIGZyb20gYGZzL2lvbWFwL2RpcmVjdC1pby5jYC4gR290dGEgZ2V0IHRoZSB3aG9sZSBwaWN0dXJlLCByaWdodD8gTmVlZCB0byBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIGFueSBkZXBlbmRlbmNpZXMgb3IgcmVsYXRlZCBmdW5jdGlvbnMgaW4gdGhhdCBzb3VyY2UgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk5NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMjo0NjowOC4xNTkyNDkzOFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI3MjMyNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9pb21hcC9kaXJlY3QtaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9pb21hcC9kaXJlY3QtaW8uYz0xMDU9c3NpemVfdCBpb21hcF9kaW9fY29tcGxldGUoc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTYwLX1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxNjE6RVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfZGlvX2NvbXBsZXRlKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xNjItXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYz0yNzI9dm9pZCBpb21hcF9kaW9fYmlvX2VuZF9pbyhzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0yNzktfVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjI4MDpFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9kaW9fYmlvX2VuZF9pbyk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMjgxLVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9Njk2PV9faW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTA2LX1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5MDc6RVhQT1JUX1NZTUJPTF9HUEwoX19pb21hcF9kaW9fcncpO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkwOC1cXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTkxMD1pb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MjEtfVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjkyMjpFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9kaW9fcncpO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkyMy1cXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTk5OD1zc2l6ZV90IF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTA4My19XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTA4NDpFWFBPUlRfU1lNQk9MX0dQTChfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZSk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTA4NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjI6NDY6MDguMjAxOTc4OTQ3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNzI2NjU0NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBEaXJlY3QgSS9PIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSByZWxldmFudCBmdW5jdGlvbnMgd2l0aGluIHRoZSBEaXJlY3QgSS9PIHBhdGguIE15IGluaXRpYWwgdGhvdWdodHMgYXJlIHRoYXQgYF9faW9tYXBfZGlvX3J3YCwgYGlvbWFwX2Rpb19yd2AsIGFuZCBgX19pb21hcF9kaW9fcmVhZF9zaW1wbGVgIGxvb2sgbGlrZSBzdHJvbmcgY29udGVuZGVycyBmb3IgaW52ZXN0aWdhdGlvbi4gVGhleSBzZWVtIGxpa2UgbG9naWNhbCBwbGFjZXMgdG8gc3RhcnQgZ2l2ZW4gdGhlIGNvbnRleHQuXG5cbkhvbGQgb24uLi4gSSdtIGp1c3QgcmVjYWxsaW5nIHRoYXQgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgIGlzIHNwZWNpZmljYWxseSB1c2VkIGR1cmluZyB3cml0ZXMuIFRoYXQncyBhIGhlbHBmdWwgZmlsdGVyaW5nIGluc2lnaHQuIEkgc2hvdWxkIGVuc3VyZSBJJ20ga2VlcGluZyB0aGF0IGRpc3RpbmN0aW9uIGNsZWFyIGluIG15IG1pbmQuXG5cbkFscmlnaHQsIGEgbW9yZSBnZW5lcmFsLCBwcm9iYWJseSBlbmNvbXBhc3NpbmcgY2FuZGlkYXRlIHdvdWxkIGJlIGBpb21hcF9kaW9faXRlcmAuIExldCdzIGZvY3VzIG91ciBhdHRlbnRpb24gdGhlcmUgZm9yIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAxNywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIyOjQ2OjExLjU3NDY0NjI0M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU4MTAxODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9tYXBfZGlvX2l0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaW9tYXAvZGlyZWN0LWlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW9tYXAvZGlyZWN0LWlvLmM9NjEyPXN0YXRpYyBpbnQgaW9tYXBfZGlvX2lubGluZV9pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppb21pLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NDMtXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NjQ0OnN0YXRpYyBpbnQgaW9tYXBfZGlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NDUte1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9Njk2PV9faW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtODIxLVxcdHdoaWxlICgocmV0ID0gaW9tYXBfaXRlcihcXHUwMDI2aW9taSwgb3BzKSkgXFx1MDAzZSAwKSB7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6ODIyOlxcdFxcdGlvbWkuc3RhdHVzID0gaW9tYXBfZGlvX2l0ZXIoXFx1MDAyNmlvbWksIGRpbyk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtODIzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMjo0NjoxMS42MzA0NjA2MjhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY1ODYwODI5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGlvbWFwX2Rpb19pdGVyYCBpbXBsZW1lbnRhdGlvbi4gSSdtIGN1cmlvdXMgdG8gc2VlIGhvdyB0aGlzIGhhbmRsZXMgRGlyZWN0IEkvTyBpdGVyYXRpb25zLiBVbmRlcnN0YW5kaW5nIHRoZSBudWFuY2VzIG9mIHRoaXMgaXRlcmF0b3IgaXMga2V5IHRvIG9wdGltaXppbmcgYW55IEkvTy1pbnRlbnNpdmUgY29kZSBJJ20gd29ya2luZyBvbi4gSSdtIGV4cGVjdGluZyB0byBzZWUgY2xldmVyIGhhbmRsaW5nIG9mIHRoZSBibG9jayBzaXplIGFuZCBhbGlnbm1lbnQsIGFuZCBob3cgaXQgZGVhbHMgd2l0aCBwYXJ0aWFsIGJsb2Nrcy4gSSdtIGFsc28gbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBvcHRpbWl6YXRpb25zIGFyb3VuZCBkYXRhIHByZWZldGNoaW5nIG9yIG1lcmdpbmcgdG8gbWluaW1pemUgc3lzdGVtIGNhbGxzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGl0ZXJhdG9yIGV4cG9zZXMgdGhlIHVuZGVybHlpbmcgSS9PIG9wZXJhdGlvbnMgYW5kIHdoZXRoZXIgaXQgZWZmaWNpZW50bHkgYWJzdHJhY3RzIGF3YXkgdGhlIGNvbXBsZXhpdGllcy4gS25vd2luZyB0aGlzIGlzIGNyaXRpY2FsIGZvciBkZWJ1Z2dpbmcgcGVyZm9ybWFuY2UgaXNzdWVzLiBJIGFsc28gZXhwZWN0IHRoYXQgdGhlcmUnbGwgYmUgc29tZSB0cmlja3kgZWRnZSBjYXNlcyB3aXRoIGhhbmRsaW5nIG9mIGVycm9ycy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODU4NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIyOjQ2OjE4LjI4OTA3NTU0NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvaW9tYXAvZGlyZWN0LWlvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjQ0LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjQ0OlxcdHN0YXRpYyBpbnQgaW9tYXBfZGlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG4gNjQ1OlxcdHtcXG4gNjQ2OlxcdFxcdHN3aXRjaCAoaXRlci1cXHUwMDNlaW9tYXAudHlwZSkge1xcbiA2NDc6XFx0XFx0Y2FzZSBJT01BUF9IT0xFOlxcbiA2NDg6XFx0XFx0XFx0aWYgKFdBUk5fT05fT05DRShkaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9NQVBfRElPX1dSSVRFKSlcXG4gNjQ5OlxcdFxcdFxcdFxcdHJldHVybiAtRUlPO1xcbiA2NTA6XFx0XFx0XFx0cmV0dXJuIGlvbWFwX2Rpb19ob2xlX2l0ZXIoaXRlciwgZGlvKTtcXG4gNjUxOlxcdFxcdGNhc2UgSU9NQVBfVU5XUklUVEVOOlxcbiA2NTI6XFx0XFx0XFx0aWYgKCEoZGlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPTUFQX0RJT19XUklURSkpXFxuIDY1MzpcXHRcXHRcXHRcXHRyZXR1cm4gaW9tYXBfZGlvX2hvbGVfaXRlcihpdGVyLCBkaW8pO1xcbiA2NTQ6XFx0XFx0XFx0cmV0dXJuIGlvbWFwX2Rpb19iaW9faXRlcihpdGVyLCBkaW8pO1xcbiA2NTU6XFx0XFx0Y2FzZSBJT01BUF9NQVBQRUQ6XFxuIDY1NjpcXHRcXHRcXHRyZXR1cm4gaW9tYXBfZGlvX2Jpb19pdGVyKGl0ZXIsIGRpbyk7XFxuIDY1NzpcXHRcXHRjYXNlIElPTUFQX0lOTElORTpcXG4gNjU4OlxcdFxcdFxcdHJldHVybiBpb21hcF9kaW9faW5saW5lX2l0ZXIoaXRlciwgZGlvKTtcXG4gNjU5OlxcdFxcdGNhc2UgSU9NQVBfREVMQUxMT0M6XFxuIDY2MDpcXHRcXHRcXHQvKlxcbiA2NjE6XFx0XFx0XFx0ICogRElPIGlzIG5vdCBzZXJpYWxpc2VkIGFnYWluc3QgbW1hcCgpIGFjY2VzcyBhdCBhbGwsIGFuZCBzb1xcbiA2NjI6XFx0XFx0XFx0ICogaWYgdGhlIHBhZ2VfbWt3cml0ZSBvY2N1cnMgYmV0d2VlbiB0aGUgd3JpdGViYWNrIGFuZCB0aGVcXG4gNjYzOlxcdFxcdFxcdCAqIGlvbWFwX2l0ZXIoKSBjYWxsIGluIHRoZSBESU8gcGF0aCwgdGhlbiBpdCB3aWxsIHNlZSB0aGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjI6NDY6MTguMjg5MTg2NjQ2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MjcyMDg4MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJT01BUCBIb2xlIEl0ZXJhdGlvbiBGaXgqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBpb21hcF9kaW9faG9sZV9pdGVyYCBpcyBzcGVjaWZpY2FsbHkgdXNlZCBmb3IgaGFuZGxpbmcgYElPTUFQX0hPTEVgIGFuZCBgSU9NQVBfVU5XUklUVEVOYCBzY2VuYXJpb3MsIHdoaWNoLCBhcyBJIHVuZGVyc3RhbmQsIGFyZSBib3RoIHJlYWQtb25seSBvcGVyYXRpb25zIGRlYWxpbmcgd2l0aCBlaXRoZXIgYWN0dWFsIGhvbGVzIGluIHRoZSBmaWxlIG9yIGFyZWFzIHRoYXQgaGF2ZW4ndCBiZWVuIHdyaXR0ZW4gdG8geWV0LiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGFkZHJlc3MgYSBwb3RlbnRpYWwgbWlzYWxpZ25tZW50IGlzc3VlIHJlbGF0ZWQgdG8gYGlvdl9pdGVyX3plcm9gLiBBcHBhcmVudGx5LCB0aGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb24sIHdoZW4gY29weWluZyB6ZXJvZWQgZGF0YSwgd2FzIHBhZ2UtYWxpZ25lZCBidXQgKm5vdCogbmVjZXNzYXJpbHkgYWxpZ25lZCB0byB0aGUgZmlsZXN5c3RlbSdzIGJsb2NrIHNpemUsIHdoaWNoIGNvdWxkIGxlYWQgdG8gaW5lZmZpY2llbmNpZXMgb3IgZXZlbiBpbmNvcnJlY3QgYmVoYXZpb3IgaW4gc29tZSBjb250ZXh0cy4gVGhlIGZpeCBpcyBhIHJldmVyc2lvbiB0byBlbnN1cmUgYmxvY2stc2l6ZSBhbGlnbm1lbnQsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgZnJvbSBhIGZ1bmN0aW9uYWwgcGVyc3BlY3RpdmUuXG5cbkZyb20gYW4gaW1wbGVtZW50YXRpb24gcGVyc3BlY3RpdmUsIHNldHRpbmcgdXAgRVhUNF9GUyBvciBYRlNfRlMgb3IgQlRSRlNfRlMgd2lsbCBlbmFibGUgRlNfSU9NQVAuXG5cbkkgd2FudCB0byBkaXZlIGRlZXBlciBpbnRvIHRoaXMsIHBhcnRpY3VsYXJseSB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4ga2V5IGZ1bmN0aW9ucy4gSSdsbCBuZWVkIHRvIGZvY3VzIG9uOiBgX19pb21hcF9kaW9fcndgLCBgaW9tYXBfZGlvX3J3YCwgYW5kIGBfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZWAuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZWAgcHJvcGVybHkgaW52b2tlcyBgaW9tYXBfZGlvX2l0ZXJgLiBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGUgb3BlcmF0aW9uIHdpbGwgYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxODgsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMjo0NjoyMy4yMTYzOTc0MloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2NDQxNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19pb21hcF9kaW9fcmVhZF9zaW1wbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaW9tYXAvZGlyZWN0LWlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW9tYXAvZGlyZWN0LWlvLmM9OTgwPXN0YXRpYyB2b2lkIGlvbWFwX2Rpb19zaW1wbGVfZW5kX2lvKHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk5Ny1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5OTg6c3NpemVfdCBfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05OTktXFx0XFx0c3RydWN0IGlvbWFwX2l0ZXIgKmlvbWkpXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDgzLX1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMDg0OkVYUE9SVF9TWU1CT0xfR1BMKF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDg1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMjo0NjoyMy4yNjMwNDQxMTdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE4MDY2Nzg5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MgYXMgSSBhcHByb2FjaCByZWFkaW5nIHRoaXMgZnVuY3Rpb24sIGBfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZWA6XG5cbioqQW5hbHl6aW5nIGBfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZWAqKlxuXG5BbHJpZ2h0LCB0aGUgbmFtZSBpdHNlbGYgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBgX19pb21hcF9kaW9fcmVhZF9zaW1wbGVgLiBUaGUgZG91YmxlIHVuZGVyc2NvcmUgc3VnZ2VzdHMgaXQncyBsaWtlbHkgYW4gaW50ZXJuYWwgb3IgaGVscGVyIGZ1bmN0aW9uLCBub3QgZGlyZWN0bHkgZXhwb3NlZCB0byB1c2Vycy4gXCJJT01BUFwiIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIHJlbGF0ZWQgdG8gSS9PIG1hcHBpbmcsIHdoaWNoIHR5cGljYWxseSBtZWFucyBpdCdzIGRlYWxpbmcgd2l0aCBzb21lIGZvcm0gb2YgZGlyZWN0IEkvTy4gVGhlIFwiRElPXCIgcmVpbmZvcmNlcyB0aGF0OiBEaXJlY3QgSS9PLiBBbmQgXCJyZWFkX3NpbXBsZVwiIGltcGxpZXMgdGhpcyBpcyBhIGNvcmUgcmVhZCBmdW5jdGlvbi4gUGVyaGFwcyBpdCBoYW5kbGVzIHRoZSBtb3N0IGJhc2ljLCBzdHJlYW1saW5lZCByZWFkIG9wZXJhdGlvbnMuIFRoZSBzaW1wbGljaXR5IGlzIGludHJpZ3Vpbmc7IGl0IHByb2JhYmx5IG1lYW5zIGxlc3MgZXJyb3IgaGFuZGxpbmcgb3Igc29tZSBhc3N1bWVkIGNvbmRpdGlvbnMgYXJlIGluIHBsYWNlLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBwYXJ0IG9mIHRoZSBkaXJlY3QgSS9PIHBhdGguXG5cbkknbSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIGxvdy1sZXZlbCBmdW5jdGlvbiB0aGF0IGRlYWxzIHdpdGggdHJhbnNmZXJyaW5nIGRhdGEgZGlyZWN0bHkgZnJvbSBzdG9yYWdlIHRvIG1lbW9yeSwgbGlrZWx5IGJ5cGFzc2luZyB0aGUgcGFnZSBjYWNoZSBmb3Igb3B0aW1pemVkIHBlcmZvcm1hbmNlLCBhbmQgdGFraW5nIGFkdmFudGFnZSBvZiB3aGF0ZXZlciB0aGUgSU9NQVAgbGF5ZXIgaXMgZG9pbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIG90aGVyIGxheWVycy4gRG9lcyBpdCBkaXJlY3RseSBoYW5kbGUgdGhlIGJpbyBzdHJ1Y3R1cmU/IERvZXMgaXQgaW50ZXJhY3Qgd2l0aCBibG9jayBkZXZpY2VzPyBEb2VzIGl0IHVzZSB0aGUgZGV2aWNlIG1hcHBlcj8gT3IgaXMgaXQgbW9yZSBvZiBhIGhlbHBlciBpbiB0aGUgcHJvY2Vzcz8gSSdsbCBwcm9iYWJseSBiZSBsb29raW5nIGZvciBob3cgaXQgaGFuZGxlcyBidWZmZXIgYWxsb2NhdGlvbiwgYWRkcmVzc2luZywgYW5kIGVycm9yIGNoZWNraW5nLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IHVzZXMsIHBhcnRpY3VsYXJseSBpZiBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIGJsb2NrIGxheWVyLiBMZXQncyBzZWUgaG93IGl0IGhhbmRsZXMgdGhlIGRpZmZlcmVudCBwb3NzaWJsZSBzY2VuYXJpb3MuIEknbSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgbG93ZXIgbGF5ZXJzIGFuZCBoYW5kbGUgdGhvc2UgZWRnZSBjYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTk5MCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIyOjQ2OjI3LjQ0MzcxNDcyNFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9pb21hcC9kaXJlY3QtaW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5OTgsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5OTg6XFx0c3NpemVfdCBfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4gOTk5OlxcdFxcdFxcdHN0cnVjdCBpb21hcF9pdGVyICppb21pKVxcbjEwMDA6XFx0e1xcbjEwMDE6XFx0XFx0Z2ZwX3QgZ2ZwID0gKGlvbWktXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9NQVBfTk9XQUlUKSA/IEdGUF9OT1dBSVQgOiBHRlBfS0VSTkVMO1xcbjEwMDI6XFx0XFx0c3RydWN0IGlvbWFwX2Rpb19zaW1wbGUgKnNyO1xcbjEwMDM6XFx0XFx0dW5zaWduZWQgaW50IGFsaWdubWVudDtcXG4xMDA0OlxcdFxcdHN0cnVjdCBiaW8gKmJpbztcXG4xMDA1OlxcdFxcdHNzaXplX3QgcmV0O1xcbjEwMDY6XFx0XFxuMTAwNzpcXHRcXHRpZiAoaW9taS1cXHUwMDNlaW9tYXAudHlwZSAhPSBJT01BUF9NQVBQRUQgfHxcXG4xMDA4OlxcdFxcdCAgICBpb21pLVxcdTAwM2Vpb21hcC5vZmZzZXQgKyBpb21pLVxcdTAwM2Vpb21hcC5sZW5ndGggXFx1MDAzYyBpb21pLVxcdTAwM2Vwb3MgKyBpb21pLVxcdTAwM2VsZW4gfHxcXG4xMDA5OlxcdFxcdCAgICAoaW9taS1cXHUwMDNlaW9tYXAuZmxhZ3MgXFx1MDAyNiBJT01BUF9GX0lOVEVHUklUWSkpIHtcXG4xMDEwOlxcdFxcdFxcdHJldCA9IC1FTk9UQkxLO1xcbjEwMTE6XFx0XFx0XFx0Z290byBvdXRfZGlvX2VuZDtcXG4xMDEyOlxcdFxcdH1cXG4xMDEzOlxcdFxcbjEwMTQ6XFx0XFx0YWxpZ25tZW50ID0gaW9tYXBfZGlvX2FsaWdubWVudChpb21pLVxcdTAwM2Vpbm9kZSwgaW9taS1cXHUwMDNlaW9tYXAuYmRldiwgMCk7XFxuMTAxNTpcXHRcXHRpZiAoKGlvbWktXFx1MDAzZXBvcyB8IGlvbWktXFx1MDAzZWxlbikgXFx1MDAyNiAoYWxpZ25tZW50IC0gMSkpIHtcXG4xMDE2OlxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuMTAxNzpcXHRcXHRcXHRnb3RvIG91dF9kaW9fZW5kO1xcbjEwMTg6XFx0XFx0fVxcbjEwMTk6XFx0XFxuMTAyMDpcXHRcXHRpZiAodW5saWtlbHkoIWlvbWktXFx1MDAzZWlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Rpb19kb25lX3dxIFxcdTAwMjZcXHUwMDI2XFxuMTAyMTpcXHRcXHRcXHRcXHQhaXNfc3luY19raW9jYihpb2NiKSkpIHtcXG4xMDIyOlxcdFxcdFxcdHJldCA9IHNiX2luaXRfZGlvX2RvbmVfd3EoaW9taS1cXHUwMDNlaW5vZGUtXFx1MDAzZWlfc2IpO1xcbjEwMjM6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTAyNDpcXHRcXHRcXHRcXHRnb3RvIG91dF9kaW9fZW5kO1xcbjEwMjU6XFx0XFx0fVxcbjEwMjY6XFx0XFxuMTAyNzpcXHRcXHR0cmFjZV9pb21hcF9kaW9fcndfYmVnaW4oaW9jYiwgaXRlciwgMCwgMCk7XFxuMTAyODpcXHRcXG4xMDI5OlxcdFxcdGJpbyA9IGJpb19hbGxvY19iaW9zZXQoaW9taS1cXHUwMDNlaW9tYXAuYmRldixcXG4xMDMwOlxcdFxcdFxcdFxcdCAgICAgICBiaW9faW92X3ZlY3NfdG9fYWxsb2MoaXRlciwgQklPX01BWF9WRUNTKSxcXG4xMDMxOlxcdFxcdFxcdFxcdCAgICAgICBSRVFfT1BfUkVBRCwgZ2ZwLCBcXHUwMDI2aW9tYXBfZGlvX3NpbXBsZV9wb29sKTtcXG4xMDMyOlxcdFxcdGlmICghYmlvKSB7XFxuMTAzMzpcXHRcXHRcXHRyZXQgPSAtRUFHQUlOO1xcbjEwMzQ6XFx0XFx0XFx0Z290byBvdXRfZGlvX2VuZDtcXG4xMDM1OlxcdFxcdH1cXG4xMDM2OlxcdFxcdHNyID0gY29udGFpbmVyX29mKGJpbywgc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUsIGJpbyk7XFxuMTAzNzpcXHRcXHRzci1cXHUwMDNlaW9jYiA9IGlvY2I7XFxuMTAzODpcXHRcXHRzci1cXHUwMDNlZGlvX2ZsYWdzID0gMDtcXG4xMDM5OlxcdFxcbjEwNDA6XFx0XFx0YmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IGlvbWFwX3NlY3RvcihcXHUwMDI2aW9taS1cXHUwMDNlaW9tYXAsIGlvbWktXFx1MDAzZXBvcyk7XFxuMTA0MTpcXHRcXHRiaW8tXFx1MDAzZWJpX2lvcHJpbyA9IGlvY2ItXFx1MDAzZWtpX2lvcHJpbztcXG4xMDQyOlxcdFxcbjEwNDM6XFx0XFx0cmV0ID0gYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhiaW8sIGl0ZXIsIGFsaWdubWVudCAtIDEpO1xcbjEwNDQ6XFx0XFx0aWYgKHVubGlrZWx5KHJldCkpXFxuMTA0NTpcXHRcXHRcXHRnb3RvIG91dF9iaW9fcHV0O1xcbjEwNDY6XFx0XFxuMTA0NzpcXHRcXHRpZiAoYmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NpemUgIT0gaW9taS1cXHUwMDNlbGVuKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIyOjQ2OjI3LjQ0MzgxMzA2NFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDIyODQ1MDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IExpbmUgb2YgSW5xdWlyeSoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBteSBpbml0aWFsIGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRoZSBgX19pb21hcF9kaW9fcmVhZF9zaW1wbGVgIGZ1bmN0aW9uLiBJdCBzZWVtcyBpdCdzIG9ubHkgZGVzaWduZWQgdG8gaGFuZGxlIHRoZSBgSU9NQVBfTUFQUEVEYCBjYXNlLiBJZiBpdCBlbmNvdW50ZXJzIGFueXRoaW5nIGVsc2UsIGxpa2UgYSBob2xlLCBpdCdzIGltbWVkaWF0ZWx5IHJldHVybmluZyBgLUVOT1RCTEtgLiBUaGlzIHN1Z2dlc3RzIGl0ICpkb2Vzbid0KiBjYWxsIGBpb21hcF9kaW9faG9sZV9pdGVyYCwgd2hpY2ggaXMgZ29vZCB0byBrbm93LCBhbmQgc2ltcGxpZmllcyB0aGluZ3MgYSBiaXQgaW4gdGhpcyBwYXJ0aWN1bGFyIHBhdGguXG5cblRoZXJlZm9yZSwgdGhlIGZ1bmN0aW9ucyBJIG5lZWQgdG8gcmVhbGx5IGRpdmUgaW50byBhcmUgYF9faW9tYXBfZGlvX3J3YCBhbmQgYGlvbWFwX2Rpb19yd2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aG9zZSBhcmUgc3RydWN0dXJlZCBhbmQgdXNlZC5cblxuQWxyaWdodCwgYSBxdWljayBjaGVja+KApiB5ZXAsIGBpb21hcF9kaW9fcndgICppcyogZXhwb3J0ZWQsIGFzIGNvbmZpcm1lZCBieSBgRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfZGlvX3J3KWAuIE5vdywgSSBzaG91bGQgbWFrZSBzdXJlIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGV4cG9ydGVkIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIGNhbGxpbmcgYGlvbWFwX2Rpb19pdGVyYC4gSXQncyBhIGtleSBmdW5jdGlvbiBmb3IgbXkgdXNlLWNhc2UsIHNvIGZpbmRpbmcgYWxsIGNhbGwgcGF0aHMgaXMgZXNzZW50aWFsIHRvIG15IHVuZGVyc3RhbmRpbmcgYW5kIGRlYnVnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzMjQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMjo0NjozMi40NjY2NjA0MTFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNDYzODg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvbWFwX2Rpb19pdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2lvbWFwL2RpcmVjdC1pby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2lvbWFwL2RpcmVjdC1pby5jPTYxMj1zdGF0aWMgaW50IGlvbWFwX2Rpb19pbmxpbmVfaXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaW9taSwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjQzLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjY0NDpzdGF0aWMgaW50IGlvbWFwX2Rpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjQ1LXtcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTY5Nj1fX2lvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTgyMS1cXHR3aGlsZSAoKHJldCA9IGlvbWFwX2l0ZXIoXFx1MDAyNmlvbWksIG9wcykpIFxcdTAwM2UgMCkge1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjgyMjpcXHRcXHRpb21pLnN0YXR1cyA9IGlvbWFwX2Rpb19pdGVyKFxcdTAwMjZpb21pLCBkaW8pO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTgyMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjI6NDY6MzIuNTEwMTI3MTU3WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk2ODM0NjM5NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBpb21hcF9kaW9faG9sZV9pdGVyYCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgY2FuIHRlbGwsIG9ubHkgYF9faW9tYXBfZGlvX3J3YCBjYWxscyBgaW9tYXBfZGlvX2l0ZXJgLCBtYWtpbmcgdGhvc2UgdGhlIGtleSBmdW5jdGlvbnMgdG8gd2F0Y2guIFNvLCBgX19pb21hcF9kaW9fcndgIGFuZCBgaW9tYXBfZGlvX3J3YCBhcmUgdGhlIGRpcmVjdCBlbnRyeSBwb2ludHMuIEkgc2hvdWxkIGZvY3VzIG9uIHRob3NlLlxuXG5Ob3csIGxldCdzIGdldCB0aGUgY29uZmlndXJhdGlvbnMgc3RyYWlnaHQuIGBDT05GSUdfRlNfSU9NQVBgIGlzIHNlbGVjdGVkIGJ5IGEgcmFuZ2Ugb2YgZmlsZXN5c3RlbXMgaW5jbHVkaW5nIGBFWFQ0X0ZTYCwgYFhGU19GU2AsIGFuZCBgQlRSRlNfRlNgLCBhbW9uZyBvdGhlcnMuIFNpbmNlIEkgd2FudCB0byBtYWtlIHRoZSBmdXp6aW5nIGVmZmVjdGl2ZSwgSSBzaG91bGQganVzdCBzcGVjaWZ5IGBFWFQ0X0ZTYCwgYFhGU19GU2AsIGFuZCBgQlRSRlNfRlNgLiBUaGlzIGxvb2tzIGxpa2UgdGhlIG1vc3Qgc3RyYWlnaHRmb3J3YXJkIGFwcHJvYWNoLlxuXG5MZXQncyBkaXZlIGludG8gdGhhdCBgaW9tYXBfZGlvX2hvbGVfaXRlcmAgY29kZSBhZ2Fpbi5cbmBgYGNcbnN0YXRpYyBpbnQgaW9tYXBfZGlvX2hvbGVfaXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxue1xuXHRsb2ZmX3QgY29waWVkID0gaW92X2l0ZXJfemVybyhpb21hcF9sZW5ndGgoaXRlciksIGRpby1cdTAwM2VzdWJtaXQuaXRlcik7XG5cdHVuc2lnbmVkIGludCBicyA9IGlfYmxvY2tzaXplKGl0ZXItXHUwMDNlaW5vZGUpO1xuXHRsb2ZmX3QgYWxpZ25lZF9jb3BpZWQgPSByb3VuZF9kb3duKGNvcGllZCwgYnMpO1xuXG5cdC8qXG5cdCAqIElmIGZzIGJsb2NrIHNpemUgaXMgbGFyZ2VyIHRoYW4gcGFnZSBzaXplLCBwYWdlIGZhdWx0IGZhaWx1cmVcblx0ICogY2FuIGNhdXNlIEBjb3BpZWQgdG8gYmUgcGFnZSBhbGlnbmVkIGJ1dCBub3QgZnMgYmxvY2sgYWxpZ25lZC5cblx0ICovXG5cdGlvdl9pdGVyX3JldmVydChkaW8tXHUwMDNlc3VibWl0Lml0ZXIsIGNvcGllZCAtIGFsaWduZWRfY29waWVkKTtcblx0ZGlvLVx1MDAzZXNpemUgKz0gYWxpZ25lZF9jb3BpZWQ7XG5cdGlmICghYWxpZ25lZF9jb3BpZWQpXG5cdFx0cmV0dXJuIC1FRkFVTFQ7XG5cdHJldHVybiBpb21hcF9pdGVyX2FkdmFuY2UoaXRlciwgYWxpZ25lZF9jb3BpZWQpO1xufVxuYGBgXG5ZZXMsIHRoaXMgY29kZSBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgY2xvc2VyIGxvb2ssIGVzcGVjaWFsbHkgZm9yIGZ1enppbmcuIFRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGhvdyB3ZSBoYW5kbGUgXCJob2xlc1wiIG9yIHVud3JpdHRlbiBleHRlbnRzIGluIGRpcmVjdCBJL08uIFRoZSBnb2FsIGlzIHRvIGVuc3VyZSB0aGUgY29waWVkIGxlbmd0aCBpcyBhbGlnbmVkIHRvIHRoZSBmaWxlc3lzdGVtIGJsb2NrIHNpemUgYWZ0ZXIgcG9zc2libGUgcGFnZSBmYXVsdCBmYWlsdXJlcy4gSXQgbG9va3MgbGlrZSBpdCBhZGRyZXNzZXMgYSBjcml0aWNhbCBpc3N1ZSB0aGF0IGNvdWxkIGxlYWQgdG8gbWlzYWxpZ25tZW50IGJldHdlZW4gcGFnZSBhbmQgYmxvY2sgc2l6ZXMsIHdoaWNoIHdvdWxkIGNhdXNlIGFuIGVycm9yLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZGVlcCB3aXRoaW4gdGhlIGNvcmUgaW9tYXAgZGlyZWN0IEkvTyBwYXRoLlxuXG5NeSBmb2N1cyBzaG91bGQgYmUgb24gZnV6emluZyB0aGUgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgIHNwZWNpZmljYWxseS4gSSB0aGluayBJJ3ZlIGdvdCBhIGdvb2QgaGFuZGxlIG9uIHdoZXJlIHRvIHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA0MywiT3V0cHV0VG9rZW5zIjoxNTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjI6NDY6NDIuMTkzNTkzODQ2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU5ODcxODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIixcbiAgICBcIlhGU19GU1wiLFxuICAgIFwiQlRSRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2lvbWFwX2Rpb19yd1wiLFxuICAgIFwiaW9tYXBfZGlvX3J3XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJlaGF2aW9yIG9mIGBpb21hcF9kaW9faG9sZV9pdGVyYCB0byBjb3JyZWN0bHkgYWxpZ24gdGhlIGNvcGllZCBsZW5ndGggdG8gdGhlIGZpbGVzeXN0ZW0gYmxvY2sgc2l6ZSB3aGVuIHJlYWRpbmcgZnJvbSBhIGhvbGUgb3IgdW53cml0dGVuIGV4dGVudCB1c2luZyBkaXJlY3QgSS9PLiBUaGlzIHByZXZlbnRzIGlzc3VlcyB3aGVyZSBwYWdlIGZhdWx0IGZhaWx1cmVzIGNvdWxkIHJlc3VsdCBpbiBsZW5ndGhzIHRoYXQgYXJlIHBhZ2UtYWxpZ25lZCBidXQgbm90IGJsb2NrLWFsaWduZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBpb21hcCBkaXJlY3QgSS9PIHBhdGguXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiLFxuICAgIFwiWEZTX0ZTXCIsXG4gICAgXCJCVFJGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9faW9tYXBfZGlvX3J3XCIsXG4gICAgXCJpb21hcF9kaW9fcndcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgIHRvIGNvcnJlY3RseSBhbGlnbiB0aGUgY29waWVkIGxlbmd0aCB0byB0aGUgZmlsZXN5c3RlbSBibG9jayBzaXplIHdoZW4gcmVhZGluZyBmcm9tIGEgaG9sZSBvciB1bndyaXR0ZW4gZXh0ZW50IHVzaW5nIGRpcmVjdCBJL08uIFRoaXMgcHJldmVudHMgaXNzdWVzIHdoZXJlIHBhZ2UgZmF1bHQgZmFpbHVyZXMgY291bGQgcmVzdWx0IGluIGxlbmd0aHMgdGhhdCBhcmUgcGFnZS1hbGlnbmVkIGJ1dCBub3QgYmxvY2stYWxpZ25lZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGlvbWFwIGRpcmVjdCBJL08gcGF0aC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9f9tg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-04 22:07:35 +0000 UTC FinishedAt: 2026-08-04 22:46:43 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "fe6568ca989d7625447625db8562bebbe5be054a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "XFS_FS", "BTRFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "fe6568ca989d7625447625db8562bebbe5be054a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "XFS_FS", "BTRFS_FS" ], "series_id": "a9bada05-945c-42a8-b7e0-1c0619574dbe" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "__iomap_dio_rw", "iomap_dio_rw" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": { "findings": [ "c9f79a18-3316-44ec-b805-b805b1c49325", "8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536" ] } } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7WEZTX0ZTJiMzNDssCiAgICAmIzM0O0JUUkZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19pb21hcF9kaW9fcncmIzM0OywKICAgICYjMzQ7aW9tYXBfZGlvX3J3JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBiZWhhdmlvciBvZiBgaW9tYXBfZGlvX2hvbGVfaXRlcmAgdG8gY29ycmVjdGx5IGFsaWduIHRoZSBjb3BpZWQgbGVuZ3RoIHRvIHRoZSBmaWxlc3lzdGVtIGJsb2NrIHNpemUgd2hlbiByZWFkaW5nIGZyb20gYSBob2xlIG9yIHVud3JpdHRlbiBleHRlbnQgdXNpbmcgZGlyZWN0IEkvTy4gVGhpcyBwcmV2ZW50cyBpc3N1ZXMgd2hlcmUgcGFnZSBmYXVsdCBmYWlsdXJlcyBjb3VsZCByZXN1bHQgaW4gbGVuZ3RocyB0aGF0IGFyZSBwYWdlLWFsaWduZWQgYnV0IG5vdCBibG9jay1hbGlnbmVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgaW9tYXAgZGlyZWN0IEkvTyBwYXRoLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjQ1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYmRkMzI3MTM3MjRiMzU3NDZiNGEzOTUxMmQ0NTBmYjIyM2NlZTMzZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDQgMjI6NDU6MzcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvaW9tYXAvZGlyZWN0LWlvLmMgYi9mcy9pb21hcC9kaXJlY3QtaW8uY1xuaW5kZXggYjMzNjhkNjRlODFiYi4uMDFmMjZmYjNiM2IyYyAxMDA2NDRcbi0tLSBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9pb21hcC9kaXJlY3QtaW8uY1xuQEAgLTU5NCwxMiAmIzQzOzU5NCwxOSBAQCBzdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuIFxuIHN0YXRpYyBpbnQgaW9tYXBfZGlvX2hvbGVfaXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuIHtcbi1cdGxvZmZfdCBsZW5ndGggPSBpb3ZfaXRlcl96ZXJvKGlvbWFwX2xlbmd0aChpdGVyKSwgZGlvLVx1MDAzZXN1Ym1pdC5pdGVyKTtcbiYjNDM7XHRsb2ZmX3QgY29waWVkID0gaW92X2l0ZXJfemVybyhpb21hcF9sZW5ndGgoaXRlciksIGRpby1cdTAwM2VzdWJtaXQuaXRlcik7XG4mIzQzO1x0dW5zaWduZWQgaW50IGJzID0gaV9ibG9ja3NpemUoaXRlci1cdTAwM2Vpbm9kZSk7XG4mIzQzO1x0bG9mZl90IGFsaWduZWRfY29waWVkID0gcm91bmRfZG93bihjb3BpZWQsIGJzKTtcbiBcbi1cdGRpby1cdTAwM2VzaXplICYjNDM7PSBsZW5ndGg7XG4tXHRpZiAoIWxlbmd0aClcbiYjNDM7XHQvKlxuJiM0MztcdCAqIElmIGZzIGJsb2NrIHNpemUgaXMgbGFyZ2VyIHRoYW4gcGFnZSBzaXplLCBwYWdlIGZhdWx0IGZhaWx1cmVcbiYjNDM7XHQgKiBjYW4gY2F1c2UgQGNvcGllZCB0byBiZSBwYWdlIGFsaWduZWQgYnV0IG5vdCBmcyBibG9jayBhbGlnbmVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGlvdl9pdGVyX3JldmVydChkaW8tXHUwMDNlc3VibWl0Lml0ZXIsIGNvcGllZCAtIGFsaWduZWRfY29waWVkKTtcbiYjNDM7XHRkaW8tXHUwMDNlc2l6ZSAmIzQzOz0gYWxpZ25lZF9jb3BpZWQ7XG4mIzQzO1x0aWYgKCFhbGlnbmVkX2NvcGllZClcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4tXHRyZXR1cm4gaW9tYXBfaXRlcl9hZHZhbmNlKGl0ZXIsIGxlbmd0aCk7XG4mIzQzO1x0cmV0dXJuIGlvbWFwX2l0ZXJfYWR2YW5jZShpdGVyLCBhbGlnbmVkX2NvcGllZCk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgaW9tYXBfZGlvX2lubGluZV9pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppb21pLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjI6NDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7WEZTX0ZTJiMzNDssCiAgICAmIzM0O0JUUkZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19pb21hcF9kaW9fcncmIzM0OywKICAgICYjMzQ7aW9tYXBfZGlvX3J3JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBiZWhhdmlvciBvZiBgaW9tYXBfZGlvX2hvbGVfaXRlcmAgdG8gY29ycmVjdGx5IGFsaWduIHRoZSBjb3BpZWQgbGVuZ3RoIHRvIHRoZSBmaWxlc3lzdGVtIGJsb2NrIHNpemUgd2hlbiByZWFkaW5nIGZyb20gYSBob2xlIG9yIHVud3JpdHRlbiBleHRlbnQgdXNpbmcgZGlyZWN0IEkvTy4gVGhpcyBwcmV2ZW50cyBpc3N1ZXMgd2hlcmUgcGFnZSBmYXVsdCBmYWlsdXJlcyBjb3VsZCByZXN1bHQgaW4gbGVuZ3RocyB0aGF0IGFyZSBwYWdlLWFsaWduZWQgYnV0IG5vdCBibG9jay1hbGlnbmVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgaW9tYXAgZGlyZWN0IEkvTyBwYXRoLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmRkMzI3MTM3MjRiMzU3NDZiNGEzOTUxMmQ0NTBmYjIyM2NlZTMzZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDQgMjI6NDU6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9pb21hcC9kaXJlY3QtaW8uYyBiL2ZzL2lvbWFwL2RpcmVjdC1pby5jCmluZGV4IGIzMzY4ZDY0ZTgxYmIuLjAxZjI2ZmIzYjNiMmMgMTAwNjQ0Ci0tLSBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2lvbWFwL2RpcmVjdC1pby5jCkBAIC01OTQsMTIgJiM0Mzs1OTQsMTkgQEAgc3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbykKIAogc3RhdGljIGludCBpb21hcF9kaW9faG9sZV9pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pCiB7Ci0JbG9mZl90IGxlbmd0aCA9IGlvdl9pdGVyX3plcm8oaW9tYXBfbGVuZ3RoKGl0ZXIpLCBkaW8tJmd0O3N1Ym1pdC5pdGVyKTsKJiM0MzsJbG9mZl90IGNvcGllZCA9IGlvdl9pdGVyX3plcm8oaW9tYXBfbGVuZ3RoKGl0ZXIpLCBkaW8tJmd0O3N1Ym1pdC5pdGVyKTsKJiM0MzsJdW5zaWduZWQgaW50IGJzID0gaV9ibG9ja3NpemUoaXRlci0mZ3Q7aW5vZGUpOwomIzQzOwlsb2ZmX3QgYWxpZ25lZF9jb3BpZWQgPSByb3VuZF9kb3duKGNvcGllZCwgYnMpOwogCi0JZGlvLSZndDtzaXplICYjNDM7PSBsZW5ndGg7Ci0JaWYgKCFsZW5ndGgpCiYjNDM7CS8qCiYjNDM7CSAqIElmIGZzIGJsb2NrIHNpemUgaXMgbGFyZ2VyIHRoYW4gcGFnZSBzaXplLCBwYWdlIGZhdWx0IGZhaWx1cmUKJiM0MzsJICogY2FuIGNhdXNlIEBjb3BpZWQgdG8gYmUgcGFnZSBhbGlnbmVkIGJ1dCBub3QgZnMgYmxvY2sgYWxpZ25lZC4KJiM0MzsJICovCiYjNDM7CWlvdl9pdGVyX3JldmVydChkaW8tJmd0O3N1Ym1pdC5pdGVyLCBjb3BpZWQgLSBhbGlnbmVkX2NvcGllZCk7CiYjNDM7CWRpby0mZ3Q7c2l6ZSAmIzQzOz0gYWxpZ25lZF9jb3BpZWQ7CiYjNDM7CWlmICghYWxpZ25lZF9jb3BpZWQpCiAJCXJldHVybiAtRUZBVUxUOwotCXJldHVybiBpb21hcF9pdGVyX2FkdmFuY2UoaXRlciwgbGVuZ3RoKTsKJiM0MzsJcmV0dXJuIGlvbWFwX2l0ZXJfYWR2YW5jZShpdGVyLCBhbGlnbmVkX2NvcGllZCk7CiB9CiAKIHN0YXRpYyBpbnQgaW9tYXBfZGlvX2lubGluZV9pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppb21pLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyOTMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEaXJlY3QgSU8gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGZzL2lvbWFwL2RpcmVjdC1pby5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgaW9tYXBfZGlvX2hvbGVfaXRlcmAgZnVuY3Rpb24uIEZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGUgY29yZSBjaGFuZ2UgZm9jdXNlcyBvbiBob3cgYGlvdl9pdGVyX3plcm9gIGlzIGhhbmRsZWQsIGFkanVzdGluZyB0aGUgY29waWVkIGxlbmd0aCB0byBtYXRjaCB0aGUgYmxvY2sgc2l6ZS4gU2VlbXMgZnVuY3Rpb25hbCwgYW5kIGRlZmluaXRlbHkgYWZmZWN0cyBkaXJlY3QgSU8gd2l0aGluIHRoZSBpb21hcCBmcmFtZXdvcmsuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBlbmFibGVzIGFuZCBjb250cm9scyB0aGlzIGJlaGF2aW9yLgoKTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uJiMzOTtzIGltbWVkaWF0ZSBjb250ZXh0LiBUaW1lIHRvIHB1bGwgb3V0IGBncmVwYCBhbmQgc2VlIHdoZXJlIGBpb21hcF9kaW9faG9sZV9pdGVyYCBpcyBhY3R1YWxseSAqdXNlZCouIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb25zIHRoYXQgYXJlIGltcGFjdGVkIGFuZCB0aGUgb3ZlcmFsbCBzY29wZSBvZiB0aGlzIGNoYW5nZS4gT25jZSBJIHNlZSB0aGUgY29udGV4dHMsIEkgY2FuIGRldGVybWluZSB0aGUgaW1wYWN0IG9mIHRoZSBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb21hcF9kaW9faG9sZV9pdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmM9NDE1PXN0YXRpYyBpbnQgaW9tYXBfZGlvX2Jpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNTk0LVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NTk1OnN0YXRpYyBpbnQgaW9tYXBfZGlvX2hvbGVfaXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNTk2LXtcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYz02NDQ9c3RhdGljIGludCBpb21hcF9kaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY0OS1cdFx0XHRyZXR1cm4gLUVJTztcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjY1MDpcdFx0cmV0dXJuIGlvbWFwX2Rpb19ob2xlX2l0ZXIoaXRlciwgZGlvKTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY1MS1cdGNhc2UgSU9NQVBfVU5XUklUVEVOOlxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjUyLVx0XHRpZiAoIShkaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IElPTUFQX0RJT19XUklURSkpXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo2NTM6XHRcdFx0cmV0dXJuIGlvbWFwX2Rpb19ob2xlX2l0ZXIoaXRlciwgZGlvKTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY1NC1cdFx0cmV0dXJuIGlvbWFwX2Rpb19iaW9faXRlcihpdGVyLCBkaW8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMjAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbHJlYWR5IHF1aXRlIGZhbWlsaWFyIHdpdGggSS9PIG1hcHBpbmcgYW5kIGRpcmVjdCBJL08gd2l0aGluIGEga2VybmVsIGNvbnRleHQ6CgoqKkFuYWx5emluZyB0aGUgQ2FsbCBTdHJ1Y3R1cmUgb2YgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgKioKCkFscmlnaHQsIHNvIGBpb21hcF9kaW9faG9sZV9pdGVyYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQmIzM5O3MgaW50ZXJuYWwgdG8gdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gTm8gZXh0ZXJuYWwgZnVuY3Rpb25zIGNhbiBkaXJlY3RseSBjYWxsIGl0LiBJdCYjMzk7cyBlc3NlbnRpYWxseSBhIGhlbHBlciBmdW5jdGlvbiwgbGlrZWx5IGVuY2Fwc3VsYXRlZCB3aXRoaW4gYSBsYXJnZXIgbW9kdWxlLiBJIGtub3cgYGlvbWFwX2Rpb19pdGVyYCBpcyB0aGUgcHVibGljLWZhY2luZyBlbnRyeSBwb2ludCwgYW5kIHRoYXQgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIHdpdGhpbiBpdC4KCk15IHByaW1hcnkgZm9jdXMgbm93IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBmcm9tIHRoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGNvbnRleHQuIEkgbmVlZCB0byBrbm93IHdoZXJlIGBpb21hcF9kaW9faXRlcmAgaXMgYmVpbmcgY2FsbGVkIGZyb20uIFdoYXQgcm91dGluZXMgYXJlIGRlcGVuZGVudCB1cG9uIHRoZSBmdW5jdGlvbmFsaXR5IHRoYXQgaW5jbHVkZXMgYGlvbWFwX2Rpb19pdGVyYD8gS25vd2luZyB0aGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHdoeSB0aGlzIGl0ZXJhdGlvbiBvdmVyIGhvbGVzIGlzIGhhcHBlbmluZy4gSXMgaXQgdXNlZCBmb3IgcmVhZCBvcGVyYXRpb25zLCB3cml0ZSBvcGVyYXRpb25zLCBvciBib3RoPyBBcmUgd2UgZGVhbGluZyB3aXRoIHNwYXJzZSBmaWxlcywgb3Igd2hhdD8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGVycyBvZiBgaW9tYXBfZGlvX2l0ZXJgIHdpbGwgc2hlZCBsaWdodCBvbiB0aGUgcHVycG9zZSBhbmQgdGhlIG92ZXJhbGwgZGVzaWduIHN0cmF0ZWd5IG9mIHRoaXMgZnVuY3Rpb24gYW5kIGl0cyBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcy4gSSB3aWxsIGFsc28gaGF2ZSB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgd2hlbiBJIHVuZGVyc3RhbmQgdGhlIGNhbGxpbmcgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb21hcF9kaW9faXRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2lvbWFwL2RpcmVjdC1pby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2lvbWFwL2RpcmVjdC1pby5jPTYxMj1zdGF0aWMgaW50IGlvbWFwX2Rpb19pbmxpbmVfaXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaW9taSwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY0My1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjY0NDpzdGF0aWMgaW50IGlvbWFwX2Rpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NDUte1xuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTY5Nj1fX2lvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy04MjEtXHR3aGlsZSAoKHJldCA9IGlvbWFwX2l0ZXIoXHUwMDI2aW9taSwgb3BzKSkgXHUwMDNlIDApIHtcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjgyMjpcdFx0aW9taS5zdGF0dXMgPSBpb21hcF9kaW9faXRlcihcdTAwMjZpb21pLCBkaW8pO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtODIzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2ODIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbHJlYWR5IHF1aXRlIGZhbWlsaWFyIHdpdGggdGhlIGtlcm5lbCYjMzk7cyBJL08gbGF5ZXI6CgoqKkRpZ2dpbmcgaW50byBpb21hcCBEaXJlY3QgSS9PKioKCkFscmlnaHQsIHNvIGBfX2lvbWFwX2Rpb19yd2AuLi4gdGhhdCYjMzk7cyB0aGUgYmlnIG9uZSwgdGhlIGNlbnRyYWwgaHViIGZvciBJL08gb3BlcmF0aW9ucyB1c2luZyB0aGUgaW9tYXAgZnJhbWV3b3JrIGluIGRpcmVjdCBJL08gbW9kZS4gSXQmIzM5O3MgdGhlIHBvaW50IG9mIGVudHJ5LCB0aGUgJiMzNDtnbyYjMzQ7IGJ1dHRvbiwgYXMgaXQgd2VyZS4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhpcyBmdW5jdGlvbi4KCkxldCBtZSBzZWUsIGlzIHRoaXMgY29yZSBmdW5jdGlvbiBhY3R1YWxseSB2aXNpYmxlIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWw/IE9yLCBpcyBpdCBwZXJoYXBzIG9ubHkgdXNlZCBpbnRlcm5hbGx5PyBDaGVja2luZyB0aGUgZXhwb3J0IHN0YXR1cyBvciBjcm9zcy1yZWZlcmVuY2luZyBhbGwgdXNlcyBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyByb2xlIGluIHRoZSBsYXJnZXIgc3lzdGVtLiBJdCYjMzk7cyBhbGwgYWJvdXQgdW5kZXJzdGFuZGluZyB0aGUgYm91bmRhcnkgY29uZGl0aW9ucyBhbmQgaW50ZXJhY3Rpb25zIG9mIHRoZSBEaXJlY3QgSS9PIHN5c3RlbSwgYW5kIGRldGVybWluaW5nIHdoYXQgdGhlIGltcGFjdCBvZiBtb2RpZnlpbmcgdGhpcyBmdW5jdGlvbiB3aWxsIGJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19faW9tYXBfZGlvX3J3JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmM9NDE1PXN0YXRpYyBpbnQgaW9tYXBfZGlvX2Jpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNTEwLVx0XHQgKiBXcml0ZXMgdGhhdCBleHRlbmQgaV9zaXplIGFyZSBhbHNvIG5vdCBzdXBwb3J0ZWQsIGJ1dCB0aGlzIGlzXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo1MTE6XHRcdCAqIGhhbmRsZWQgaW4gX19pb21hcF9kaW9fcncoKS5cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTUxMi1cdFx0ICovXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9NjQ0PXN0YXRpYyBpbnQgaW9tYXBfZGlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02ODQtICogV2hlbiBwYWdlIGZhdWx0cyBhcmUgZGlzYWJsZWQgYW5kIEBkaW9fZmxhZ3MgaW5jbHVkZXMgSU9NQVBfRElPX1BBUlRJQUwsXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo2ODU6ICogX19pb21hcF9kaW9fcncgY2FuIHJldHVybiBhIHBhcnRpYWwgcmVzdWx0IGlmIGl0IGVuY291bnRlcnMgYSBub24tcmVzaWRlbnRcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY4Ni0gKiBwYWdlIGluIEBpdGVyIGFmdGVyIHByZXBhcmluZyBhIHRyYW5zZmVyLiAgSW4gdGhhdCBjYXNlLCB0aGUgbm9uLXJlc2lkZW50XG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9Njk1PXN0cnVjdCBpb21hcF9kaW8gKlxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6Njk2Ol9faW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjk3LVx0XHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzICpkb3BzLFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkwNi19XG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5MDc6RVhQT1JUX1NZTUJPTF9HUEwoX19pb21hcF9kaW9fcncpO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTA4LVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTkxMD1pb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTE1LVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTE2Olx0ZGlvID0gX19pb21hcF9kaW9fcncoaW9jYiwgaXRlciwgb3BzLCBkb3BzLCBkaW9fZmxhZ3MsIHByaXZhdGUsXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTctXHRcdFx0ICAgICBkb25lX2JlZm9yZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjI6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU3MwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkRpZ2dpbmcgaW50byB0aGUgRGlyZWN0IEkvTyBJbXBsZW1lbnRhdGlvbioqCgpSaWdodCwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgZGlyZWN0IEkvTyBpcyByZWFsbHkgb3BlcmF0aW5nLiBTZWVtcyBsaWtlIG15IHN0YXJ0aW5nIHBvaW50IGlzIHRvIHVuZGVyc3RhbmQgYF9faW9tYXBfZGlvX3J3YCBhbmQgYGlvbWFwX2Rpb19yd2AuIFRob3NlIGFyZSB0aGUgY29yZSBmdW5jdGlvbnMsIHRoZSByZWFsIGhlYXJ0IG9mIHRoZSBkaXJlY3QgSS9PIHByb2Nlc3MsIEkgYmV0LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSBjcml0aWNhbCB0byBlbmFibGUgdGhlIGBmcy9pb21hcC9kaXJlY3QtaW8uY2AgbW9kdWxlIGluIHRoZSBmaXJzdCBwbGFjZS4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHQsIHRoZSBmb3VuZGF0aW9uLCBmb3IgdHJ1bHkgZ3Jhc3Bpbmcgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIEl0JiMzOTtzIHRpbWUgdG8gdHJhY2sgZG93biB0aG9zZSBkZXBlbmRlbmNpZXMgYW5kIHNlZSB3aGF0IHRyaWdnZXJzIHRoZSBpbmNsdXNpb24gb2YgdGhhdCBmaWxlLiBLbm93aW5nIHRoZSBwcmVyZXF1aXNpdGVzIHdpbGwgaGVscCBpbW1lbnNlbHkgaW4gbXkgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RpcmVjdC1pby5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2lvbWFwL01ha2VmaWxlPTExPWlvbWFwLXlcdFx0XHRcdCYjNDM7PSB0cmFjZS5vIFxcXG4tLVxuZnMvaW9tYXAvTWFrZWZpbGUtMTMtXHRcdFx0XHQgICBidWZmZXJlZC1pby5vXG5mcy9pb21hcC9NYWtlZmlsZToxNDppb21hcC0kKENPTkZJR19CTE9DSylcdFx0JiM0Mzs9IGRpcmVjdC1pby5vIFxcXG5mcy9pb21hcC9NYWtlZmlsZS0xNS1cdFx0XHRcdCAgIGlvZW5kLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjI6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkzMgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgS2VybmVsJiMzOTtzIERpcmVjdCBJL08gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBgQ09ORklHX0JMT0NLYCBpcyB0dXJuaW5nIG9uIGBkaXJlY3QtaW8ub2AsIHdoaWNoIGlzIGluIHRoZSBgZnMvaW9tYXAvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIGltbWVkaWF0ZWx5IHdvbmRlciBob3cgdGhhdCBhbGwgZml0cyB0b2dldGhlciwgc3BlY2lmaWNhbGx5IGlmIGBmcy9pb21hcC9NYWtlZmlsZWAgY29uZGl0aW9uYWxseSBpbmNsdWRlcyBgaW9tYXAub2AgYmFzZWQgb24gYENPTkZJR19GU19JT01BUGAgb3Igc29tZXRoaW5nIGxpa2UgdGhhdC4gSSBuZWVkIHRvIHZlcmlmeSBob3cgYGZzL2lvbWFwL01ha2VmaWxlYCBoYW5kbGVzIGBpb21hcC5vYC4gVGltZSB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhhdCBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2lvbWFwL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuICAgMjpcdCNcbiAgIDM6XHQjIENvcHlyaWdodCAoYykgMjAxOSBPcmFjbGUuXG4gICA0Olx0IyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICAgNTpcdCNcbiAgIDY6XHRcbiAgIDc6XHRjY2ZsYWdzLXkgJiM0Mzs9IC1JICQoc3JjKVx0XHQjIG5lZWRlZCBmb3IgdHJhY2UgZXZlbnRzXG4gICA4Olx0XG4gICA5Olx0b2JqLSQoQ09ORklHX0ZTX0lPTUFQKVx0XHQmIzQzOz0gaW9tYXAub1xuICAxMDpcdFxuICAxMTpcdGlvbWFwLXlcdFx0XHRcdCYjNDM7PSB0cmFjZS5vIFxcXG4gIDEyOlx0XHRcdFx0XHQgICBpdGVyLm8gXFxcbiAgMTM6XHRcdFx0XHRcdCAgIGJ1ZmZlcmVkLWlvLm9cbiAgMTQ6XHRpb21hcC0kKENPTkZJR19CTE9DSylcdFx0JiM0Mzs9IGRpcmVjdC1pby5vIFxcXG4gIDE1Olx0XHRcdFx0XHQgICBpb2VuZC5vIFxcXG4gIDE2Olx0XHRcdFx0XHQgICBmaWVtYXAubyBcXFxuICAxNzpcdFx0XHRcdFx0ICAgc2Vlay5vIFxcXG4gIDE4Olx0XHRcdFx0XHQgICBiaW8ub1xuICAxOTpcdGlvbWFwLSQoQ09ORklHX1NXQVApXHRcdCYjNDM7PSBzd2FwZmlsZS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MjcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW5pdGlhbCBDb25maWd1cmF0aW9uIENoZWNrKioKClJpZ2h0LCBzbyB0byBnZXQgdGhpcyBmdW5jdGlvbmFsaXR5IHVwIGFuZCBydW5uaW5nLCBJJiMzOTttIGdvaW5nIHRvIG5lZWQgdG8gbWFrZSBzdXJlIGBDT05GSUdfRlNfSU9NQVBgIGlzIGVuYWJsZWQsIGFuZCBgQ09ORklHX0JMT0NLYCBpcyBhcyB3ZWxsLiBUaGF0IG1ha2VzIHNlbnNlLCBgQ09ORklHX0JMT0NLYCBpcyBhIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrLiBBbmQgYENPTkZJR19GU19JT01BUGA/IEFoIHllcywgdGhhdOKAmXMgcmlnaHQsIHRoYXQmIzM5O3MgdGhlIGlvbWFwIGluZnJhc3RydWN0dXJlLCBhbmQgaXTigJlzIHV0aWxpemVkIGJ5IGEgd2hvbGUgcmFuZ2Ugb2YgZmlsZXN5c3RlbXMg4oCTIGV4dDQsIHhmcywgYnRyZnMsIGFsbCB0aGUgdXN1YWwgc3VzcGVjdHMuIEkmIzM5O2QgYmV0dGVyIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBlbnRyeSBmb3IgYEZTX0lPTUFQYCBpbiBgZnMvS2NvbmZpZ2AgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb250ZXh0LiBHb3R0YSBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZTX0lPTUFQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9MTI9Y29uZmlnIFZBTElEQVRFX0ZTX1BBUlNFUlxuLS1cbmZzL0tjb25maWctMTctXG5mcy9LY29uZmlnOjE4OmNvbmZpZyBGU19JT01BUFxuZnMvS2NvbmZpZy0xOS1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjI6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc1NQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGVjb2RpbmcgVGhpcyBCb29sZWFuIEVuaWdtYSoqCgpBbHJpZ2h0LCBzbyB0aGVyZSYjMzk7cyB0aGlzIGhpZGRlbiBCb29sZWFuIHNldHRpbmcsIGFuZCBpdCYjMzk7cyBiZWluZyBzZWxlY3RlZCBieSB0aGUgZmlsZXN5c3RlbXMgdGhlbXNlbHZlcy4gSW50ZXJlc3RpbmcuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkaWcgZGVlcGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2VsZWN0aW9uIGNyaXRlcmlhLiBXaGF0IHRyaWdnZXJzIHRoaXMgcGFydGljdWxhciBmbGFnPyBUaGUgJiMzNDt3aGF0JiMzNDsgaXMgdGhlIG1vc3QgaW1wb3J0YW50IHF1ZXN0aW9uLiBJcyBpdCBiYXNlZCBvbiBzcGVjaWZpYyBmaWxlc3lzdGVtIGZlYXR1cmVzPyBIYXJkd2FyZSBkZXRlY3Rpb24/IENvbmZpZ3VyYXRpb24gcGFyYW1ldGVycz8gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGNvZGUgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgaXQuIExldCYjMzk7cyBzZWUgaWYgSSBjYW4gdHJhY2UgdGhlIHNlbGVjdGlvbiBsb2dpYyBhbmQgZ2V0IGEgaGFuZGxlIG9uIHRoZSB3aHkgYW5kIGhvdy4gVGltZSB0byBkaXNzZWN0IHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgRlNfSU9NQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz01OD1jb25maWcgRlNfREFYXG4tLVxuZnMvS2NvbmZpZy02MS1cdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcbmZzL0tjb25maWc6NjI6XHRzZWxlY3QgRlNfSU9NQVBcbmZzL0tjb25maWctNjMtXHRzZWxlY3QgREFYXG4tLVxuZnMvYnRyZnMvS2NvbmZpZz0zPWNvbmZpZyBCVFJGU19GU1xuLS1cbmZzL2J0cmZzL0tjb25maWctMTQtXHRzZWxlY3QgWlNURF9ERUNPTVBSRVNTXG5mcy9idHJmcy9LY29uZmlnOjE1Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9idHJmcy9LY29uZmlnLTE2LVx0c2VsZWN0IFJBSUQ2X1BRXG4tLVxuZnMvZXJvZnMvS2NvbmZpZz0zPWNvbmZpZyBFUk9GU19GU1xuLS1cbmZzL2Vyb2ZzL0tjb25maWctOC1cdHNlbGVjdCBDUllQVE9fREVGTEFURSBpZiBFUk9GU19GU19aSVBfQUNDRUxcbmZzL2Vyb2ZzL0tjb25maWc6OTpcdHNlbGVjdCBGU19JT01BUFxuZnMvZXJvZnMvS2NvbmZpZy0xMC1cdHNlbGVjdCBMWjRfREVDT01QUkVTUyBpZiBFUk9GU19GU19aSVBcbi0tXG5mcy9leGZhdC9LY29uZmlnPTM9Y29uZmlnIEVYRkFUX0ZTXG4tLVxuZnMvZXhmYXQvS2NvbmZpZy02LVx0c2VsZWN0IE5MU1xuZnMvZXhmYXQvS2NvbmZpZzo3Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9leGZhdC9LY29uZmlnLTgtXHRoZWxwXG4tLVxuZnMvZXh0Mi9LY29uZmlnPTI9Y29uZmlnIEVYVDJfRlNcbi0tXG5mcy9leHQyL0tjb25maWctNC1cdHNlbGVjdCBCVUZGRVJfSEVBRFxuZnMvZXh0Mi9LY29uZmlnOjU6XHRzZWxlY3QgRlNfSU9NQVBcbmZzL2V4dDIvS2NvbmZpZy02LVx0aGVscFxuLS1cbmZzL2V4dDQvS2NvbmZpZz0yPWNvbmZpZyBFWFQ0X0ZTXG4tLVxuZnMvZXh0NC9LY29uZmlnLTctXHRzZWxlY3QgQ1JDMzJcbmZzL2V4dDQvS2NvbmZpZzo4Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9leHQ0L0tjb25maWctOS1cdHNlbGVjdCBGU19FTkNSWVBUSU9OX0FMR1MgaWYgRlNfRU5DUllQVElPTlxuLS1cbmZzL2YyZnMvS2NvbmZpZz0yPWNvbmZpZyBGMkZTX0ZTXG4tLVxuZnMvZjJmcy9LY29uZmlnLTktXHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cbmZzL2YyZnMvS2NvbmZpZzoxMDpcdHNlbGVjdCBGU19JT01BUFxuZnMvZjJmcy9LY29uZmlnLTExLVx0c2VsZWN0IExaNF9DT01QUkVTUyBpZiBGMkZTX0ZTX0xaNFxuLS1cbmZzL2Z1c2UvS2NvbmZpZz0yPWNvbmZpZyBGVVNFX0ZTXG4tLVxuZnMvZnVzZS9LY29uZmlnLTQtXHRzZWxlY3QgRlNfUE9TSVhfQUNMXG5mcy9mdXNlL0tjb25maWc6NTpcdHNlbGVjdCBGU19JT01BUFxuZnMvZnVzZS9LY29uZmlnLTYtXHRoZWxwXG4tLVxuZnMvZ2ZzMi9LY29uZmlnPTI9Y29uZmlnIEdGUzJfRlNcbi0tXG5mcy9nZnMyL0tjb25maWctNy1cdHNlbGVjdCBRVU9UQUNUTFxuZnMvZ2ZzMi9LY29uZmlnOjg6XHRzZWxlY3QgRlNfSU9NQVBcbmZzL2dmczIvS2NvbmZpZy05LVx0aGVscFxuLS1cbmZzL2hwZnMvS2NvbmZpZz0yPWNvbmZpZyBIUEZTX0ZTXG4tLVxuZnMvaHBmcy9LY29uZmlnLTUtXHRzZWxlY3QgQlVGRkVSX0hFQURcbmZzL2hwZnMvS2NvbmZpZzo2Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9ocGZzL0tjb25maWctNy1cdGhlbHBcbi0tXG5mcy9uaWxmczIvS2NvbmZpZz0yPWNvbmZpZyBOSUxGUzJfRlNcbi0tXG5mcy9uaWxmczIvS2NvbmZpZy01LVx0c2VsZWN0IENSQzMyXG5mcy9uaWxmczIvS2NvbmZpZzo2Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9uaWxmczIvS2NvbmZpZy03LVx0aGVscFxuLS1cbmZzL250ZnMvS2NvbmZpZz0yPWNvbmZpZyBOVEZTX0ZTXG4tLVxuZnMvbnRmcy9LY29uZmlnLTQtXHRzZWxlY3QgTkxTXG5mcy9udGZzL0tjb25maWc6NTpcdHNlbGVjdCBGU19JT01BUFxuZnMvbnRmcy9LY29uZmlnLTYtXHRoZWxwXG4tLVxuZnMveGZzL0tjb25maWc9Mj1jb25maWcgWEZTX0ZTXG4tLVxuZnMveGZzL0tjb25maWctNi1cdHNlbGVjdCBDUkMzMlxuZnMveGZzL0tjb25maWc6NzpcdHNlbGVjdCBGU19JT01BUFxuZnMveGZzL0tjb25maWctOC1cdGhlbHBcbi0tXG5mcy96b25lZnMvS2NvbmZpZz0xPWNvbmZpZyBaT05FRlNfRlNcbi0tXG5mcy96b25lZnMvS2NvbmZpZy00LVx0ZGVwZW5kcyBvbiBCTEtfREVWX1pPTkVEXG5mcy96b25lZnMvS2NvbmZpZzo1Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy96b25lZnMvS2NvbmZpZy02LVx0c2VsZWN0IENSQzMyXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5OTYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGlyZWN0IElPIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSB3ZSYjMzk7cmUgZW5hYmxpbmcgYEZTX0lPTUFQYCDigJMgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFdlJiMzOTtyZSBnZXR0aW5nIGl0IHRocm91Z2ggZWl0aGVyIGBFWFQ0X0ZTYCwgYFhGU19GU2AsIG9yIGBCVFJGU19GU2AuIFJpZ2h0LCBtYWtlcyBzZW5zZSwgdGhhdCBtYWtlcyB0aGUgbW9zdCBjb21tb24gZmlsZXN5c3RlbSBjaG9pY2VzIEkgd291bGQgZXhwZWN0LiBBbmQsIG9mIGNvdXJzZSwgd2UmIzM5O2xsIG5lZWQgYENPTkZJR19CTE9DS2AgZW5hYmxlZCBhcyB3ZWxsLCB0aGF0IGdvZXMgd2l0aG91dCBzYXlpbmcuCgpUaGUgcmVhbCBtZWF0IG9mIHRoaXMgc2VlbXMgdG8gYmUgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYGlvbWFwX2Rpb19ob2xlX2l0ZXJgLiBUaGF0JiMzOTtzIGNyaXRpY2FsLCBiZWNhdXNlIHRoYXQmIzM5O3Mgd2hhdCBnZXRzIGNhbGxlZCBzcGVjaWZpY2FsbHkgZHVyaW5nIGRpcmVjdCBJL08gd2hlbiB3ZSYjMzk7cmUgaGl0dGluZyBhIGhvbGUgaW4gdGhlIGZpbGUuIFNvLCB0aGlzIGlzIGRlZmluaXRlbHkgdG91Y2hpbmcgZnVuY3Rpb25hbCBjb2RlIHRoYXQgaXMgYmVpbmcgdXNlZCwgc28gdGhpcyBtYWtlcyBzZW5zZSB0byBiZSBkb2luZy4KCkxldCYjMzk7cyBzZWUsIHdoYXQgZnVuY3Rpb25zIHNob3VsZCBJIHplcm8gaW4gb24/IExvb2tzIGxpa2UgYF9faW9tYXBfZGlvX3J3YCBhbmQgYGlvbWFwX2Rpb19yd2AgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGV4YW1pbmUuIFRoZXkgbXVzdCBiZSB0aGUgY29yZSBvZiB0aGUgZGlyZWN0IEkvTyByZWFkL3dyaXRlIGltcGxlbWVudGF0aW9uLiBJIHNob3VsZCBhbHNvIGNoZWNrIGFuZCBzZWUgd2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkIGZyb20gYGZzL2lvbWFwL2RpcmVjdC1pby5jYC4gR290dGEgZ2V0IHRoZSB3aG9sZSBwaWN0dXJlLCByaWdodD8gTmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnkgZGVwZW5kZW5jaWVzIG9yIHJlbGF0ZWQgZnVuY3Rpb25zIGluIHRoYXQgc291cmNlIGZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYz0xMDU9c3NpemVfdCBpb21hcF9kaW9fY29tcGxldGUoc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTE2MC19XG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxNjE6RVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfZGlvX2NvbXBsZXRlKTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTE2Mi1cbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYz0yNzI9dm9pZCBpb21hcF9kaW9fYmlvX2VuZF9pbyhzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMjc5LX1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjI4MDpFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9kaW9fYmlvX2VuZF9pbyk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy0yODEtXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9Njk2PV9faW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkwNi19XG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5MDc6RVhQT1JUX1NZTUJPTF9HUEwoX19pb21hcF9kaW9fcncpO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTA4LVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTkxMD1pb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTIxLX1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjkyMjpFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9kaW9fcncpO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTIzLVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTk5OD1zc2l6ZV90IF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwODMtfVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTA4NDpFWFBPUlRfU1lNQk9MX0dQTChfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZSk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDg1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDE3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBEaXJlY3QgSS9PIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIHdpdGhpbiB0aGUgRGlyZWN0IEkvTyBwYXRoLiBNeSBpbml0aWFsIHRob3VnaHRzIGFyZSB0aGF0IGBfX2lvbWFwX2Rpb19yd2AsIGBpb21hcF9kaW9fcndgLCBhbmQgYF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlYCBsb29rIGxpa2Ugc3Ryb25nIGNvbnRlbmRlcnMgZm9yIGludmVzdGlnYXRpb24uIFRoZXkgc2VlbSBsaWtlIGxvZ2ljYWwgcGxhY2VzIHRvIHN0YXJ0IGdpdmVuIHRoZSBjb250ZXh0LgoKSG9sZCBvbi4uLiBJJiMzOTttIGp1c3QgcmVjYWxsaW5nIHRoYXQgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgIGlzIHNwZWNpZmljYWxseSB1c2VkIGR1cmluZyB3cml0ZXMuIFRoYXQmIzM5O3MgYSBoZWxwZnVsIGZpbHRlcmluZyBpbnNpZ2h0LiBJIHNob3VsZCBlbnN1cmUgSSYjMzk7bSBrZWVwaW5nIHRoYXQgZGlzdGluY3Rpb24gY2xlYXIgaW4gbXkgbWluZC4KCkFscmlnaHQsIGEgbW9yZSBnZW5lcmFsLCBwcm9iYWJseSBlbmNvbXBhc3NpbmcgY2FuZGlkYXRlIHdvdWxkIGJlIGBpb21hcF9kaW9faXRlcmAuIExldCYjMzk7cyBmb2N1cyBvdXIgYXR0ZW50aW9uIHRoZXJlIGZvciBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvbWFwX2Rpb19pdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmM9NjEyPXN0YXRpYyBpbnQgaW9tYXBfZGlvX2lubGluZV9pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppb21pLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjQzLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NjQ0OnN0YXRpYyBpbnQgaW9tYXBfZGlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY0NS17XG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9Njk2PV9faW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTgyMS1cdHdoaWxlICgocmV0ID0gaW9tYXBfaXRlcihcdTAwMjZpb21pLCBvcHMpKSBcdTAwM2UgMCkge1xuZnMvaW9tYXAvZGlyZWN0LWlvLmM6ODIyOlx0XHRpb21pLnN0YXR1cyA9IGlvbWFwX2Rpb19pdGVyKFx1MDAyNmlvbWksIGRpbyk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy04MjMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1ODUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBpb21hcF9kaW9faXRlcmAgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gY3VyaW91cyB0byBzZWUgaG93IHRoaXMgaGFuZGxlcyBEaXJlY3QgSS9PIGl0ZXJhdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhlIG51YW5jZXMgb2YgdGhpcyBpdGVyYXRvciBpcyBrZXkgdG8gb3B0aW1pemluZyBhbnkgSS9PLWludGVuc2l2ZSBjb2RlIEkmIzM5O20gd29ya2luZyBvbi4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGNsZXZlciBoYW5kbGluZyBvZiB0aGUgYmxvY2sgc2l6ZSBhbmQgYWxpZ25tZW50LCBhbmQgaG93IGl0IGRlYWxzIHdpdGggcGFydGlhbCBibG9ja3MuIEkmIzM5O20gYWxzbyBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIG9wdGltaXphdGlvbnMgYXJvdW5kIGRhdGEgcHJlZmV0Y2hpbmcgb3IgbWVyZ2luZyB0byBtaW5pbWl6ZSBzeXN0ZW0gY2FsbHMuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgaXRlcmF0b3IgZXhwb3NlcyB0aGUgdW5kZXJseWluZyBJL08gb3BlcmF0aW9ucyBhbmQgd2hldGhlciBpdCBlZmZpY2llbnRseSBhYnN0cmFjdHMgYXdheSB0aGUgY29tcGxleGl0aWVzLiBLbm93aW5nIHRoaXMgaXMgY3JpdGljYWwgZm9yIGRlYnVnZ2luZyBwZXJmb3JtYW5jZSBpc3N1ZXMuIEkgYWxzbyBleHBlY3QgdGhhdCB0aGVyZSYjMzk7bGwgYmUgc29tZSB0cmlja3kgZWRnZSBjYXNlcyB3aXRoIGhhbmRsaW5nIG9mIGVycm9ycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY0NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjQ0Olx0c3RhdGljIGludCBpb21hcF9kaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuIDY0NTpcdHtcbiA2NDY6XHRcdHN3aXRjaCAoaXRlci1cdTAwM2Vpb21hcC50eXBlKSB7XG4gNjQ3Olx0XHRjYXNlIElPTUFQX0hPTEU6XG4gNjQ4Olx0XHRcdGlmIChXQVJOX09OX09OQ0UoZGlvLVx1MDAzZWZsYWdzIFx1MDAyNiBJT01BUF9ESU9fV1JJVEUpKVxuIDY0OTpcdFx0XHRcdHJldHVybiAtRUlPO1xuIDY1MDpcdFx0XHRyZXR1cm4gaW9tYXBfZGlvX2hvbGVfaXRlcihpdGVyLCBkaW8pO1xuIDY1MTpcdFx0Y2FzZSBJT01BUF9VTldSSVRURU46XG4gNjUyOlx0XHRcdGlmICghKGRpby1cdTAwM2VmbGFncyBcdTAwMjYgSU9NQVBfRElPX1dSSVRFKSlcbiA2NTM6XHRcdFx0XHRyZXR1cm4gaW9tYXBfZGlvX2hvbGVfaXRlcihpdGVyLCBkaW8pO1xuIDY1NDpcdFx0XHRyZXR1cm4gaW9tYXBfZGlvX2Jpb19pdGVyKGl0ZXIsIGRpbyk7XG4gNjU1Olx0XHRjYXNlIElPTUFQX01BUFBFRDpcbiA2NTY6XHRcdFx0cmV0dXJuIGlvbWFwX2Rpb19iaW9faXRlcihpdGVyLCBkaW8pO1xuIDY1NzpcdFx0Y2FzZSBJT01BUF9JTkxJTkU6XG4gNjU4Olx0XHRcdHJldHVybiBpb21hcF9kaW9faW5saW5lX2l0ZXIoaXRlciwgZGlvKTtcbiA2NTk6XHRcdGNhc2UgSU9NQVBfREVMQUxMT0M6XG4gNjYwOlx0XHRcdC8qXG4gNjYxOlx0XHRcdCAqIERJTyBpcyBub3Qgc2VyaWFsaXNlZCBhZ2FpbnN0IG1tYXAoKSBhY2Nlc3MgYXQgYWxsLCBhbmQgc29cbiA2NjI6XHRcdFx0ICogaWYgdGhlIHBhZ2VfbWt3cml0ZSBvY2N1cnMgYmV0d2VlbiB0aGUgd3JpdGViYWNrIGFuZCB0aGVcbiA2NjM6XHRcdFx0ICogaW9tYXBfaXRlcigpIGNhbGwgaW4gdGhlIERJTyBwYXRoLCB0aGVuIGl0IHdpbGwgc2VlIHRoZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTg4CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSU9NQVAgSG9sZSBJdGVyYXRpb24gRml4KioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgIGlzIHNwZWNpZmljYWxseSB1c2VkIGZvciBoYW5kbGluZyBgSU9NQVBfSE9MRWAgYW5kIGBJT01BUF9VTldSSVRURU5gIHNjZW5hcmlvcywgd2hpY2gsIGFzIEkgdW5kZXJzdGFuZCwgYXJlIGJvdGggcmVhZC1vbmx5IG9wZXJhdGlvbnMgZGVhbGluZyB3aXRoIGVpdGhlciBhY3R1YWwgaG9sZXMgaW4gdGhlIGZpbGUgb3IgYXJlYXMgdGhhdCBoYXZlbiYjMzk7dCBiZWVuIHdyaXR0ZW4gdG8geWV0LiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGFkZHJlc3MgYSBwb3RlbnRpYWwgbWlzYWxpZ25tZW50IGlzc3VlIHJlbGF0ZWQgdG8gYGlvdl9pdGVyX3plcm9gLiBBcHBhcmVudGx5LCB0aGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb24sIHdoZW4gY29weWluZyB6ZXJvZWQgZGF0YSwgd2FzIHBhZ2UtYWxpZ25lZCBidXQgKm5vdCogbmVjZXNzYXJpbHkgYWxpZ25lZCB0byB0aGUgZmlsZXN5c3RlbSYjMzk7cyBibG9jayBzaXplLCB3aGljaCBjb3VsZCBsZWFkIHRvIGluZWZmaWNpZW5jaWVzIG9yIGV2ZW4gaW5jb3JyZWN0IGJlaGF2aW9yIGluIHNvbWUgY29udGV4dHMuIFRoZSBmaXggaXMgYSByZXZlcnNpb24gdG8gZW5zdXJlIGJsb2NrLXNpemUgYWxpZ25tZW50LCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlIGZyb20gYSBmdW5jdGlvbmFsIHBlcnNwZWN0aXZlLgoKRnJvbSBhbiBpbXBsZW1lbnRhdGlvbiBwZXJzcGVjdGl2ZSwgc2V0dGluZyB1cCBFWFQ0X0ZTIG9yIFhGU19GUyBvciBCVFJGU19GUyB3aWxsIGVuYWJsZSBGU19JT01BUC4KCkkgd2FudCB0byBkaXZlIGRlZXBlciBpbnRvIHRoaXMsIHBhcnRpY3VsYXJseSB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4ga2V5IGZ1bmN0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBvbjogYF9faW9tYXBfZGlvX3J3YCwgYGlvbWFwX2Rpb19yd2AsIGFuZCBgX19pb21hcF9kaW9fcmVhZF9zaW1wbGVgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIHRoYXQgYF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlYCBwcm9wZXJseSBpbnZva2VzIGBpb21hcF9kaW9faXRlcmAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGUgb3BlcmF0aW9uIHdpbGwgYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19faW9tYXBfZGlvX3JlYWRfc2ltcGxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmM9OTgwPXN0YXRpYyB2b2lkIGlvbWFwX2Rpb19zaW1wbGVfZW5kX2lvKHN0cnVjdCBiaW8gKmJpbylcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05OTctXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5OTg6c3NpemVfdCBfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk5OS1cdFx0c3RydWN0IGlvbWFwX2l0ZXIgKmlvbWkpXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTA4My19XG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMDg0OkVYUE9SVF9TWU1CT0xfR1BMKF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlKTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwODUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5OTAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBhcyBJIGFwcHJvYWNoIHJlYWRpbmcgdGhpcyBmdW5jdGlvbiwgYF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlYDoKCioqQW5hbHl6aW5nIGBfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZWAqKgoKQWxyaWdodCwgdGhlIG5hbWUgaXRzZWxmIGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludC4gYF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlYC4gVGhlIGRvdWJsZSB1bmRlcnNjb3JlIHN1Z2dlc3RzIGl0JiMzOTtzIGxpa2VseSBhbiBpbnRlcm5hbCBvciBoZWxwZXIgZnVuY3Rpb24sIG5vdCBkaXJlY3RseSBleHBvc2VkIHRvIHVzZXJzLiAmIzM0O0lPTUFQJiMzNDsgaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgcmVsYXRlZCB0byBJL08gbWFwcGluZywgd2hpY2ggdHlwaWNhbGx5IG1lYW5zIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBzb21lIGZvcm0gb2YgZGlyZWN0IEkvTy4gVGhlICYjMzQ7RElPJiMzNDsgcmVpbmZvcmNlcyB0aGF0OiBEaXJlY3QgSS9PLiBBbmQgJiMzNDtyZWFkX3NpbXBsZSYjMzQ7IGltcGxpZXMgdGhpcyBpcyBhIGNvcmUgcmVhZCBmdW5jdGlvbi4gUGVyaGFwcyBpdCBoYW5kbGVzIHRoZSBtb3N0IGJhc2ljLCBzdHJlYW1saW5lZCByZWFkIG9wZXJhdGlvbnMuIFRoZSBzaW1wbGljaXR5IGlzIGludHJpZ3Vpbmc7IGl0IHByb2JhYmx5IG1lYW5zIGxlc3MgZXJyb3IgaGFuZGxpbmcgb3Igc29tZSBhc3N1bWVkIGNvbmRpdGlvbnMgYXJlIGluIHBsYWNlLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBwYXJ0IG9mIHRoZSBkaXJlY3QgSS9PIHBhdGguCgpJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIGEgbG93LWxldmVsIGZ1bmN0aW9uIHRoYXQgZGVhbHMgd2l0aCB0cmFuc2ZlcnJpbmcgZGF0YSBkaXJlY3RseSBmcm9tIHN0b3JhZ2UgdG8gbWVtb3J5LCBsaWtlbHkgYnlwYXNzaW5nIHRoZSBwYWdlIGNhY2hlIGZvciBvcHRpbWl6ZWQgcGVyZm9ybWFuY2UsIGFuZCB0YWtpbmcgYWR2YW50YWdlIG9mIHdoYXRldmVyIHRoZSBJT01BUCBsYXllciBpcyBkb2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgb3RoZXIgbGF5ZXJzLiBEb2VzIGl0IGRpcmVjdGx5IGhhbmRsZSB0aGUgYmlvIHN0cnVjdHVyZT8gRG9lcyBpdCBpbnRlcmFjdCB3aXRoIGJsb2NrIGRldmljZXM/IERvZXMgaXQgdXNlIHRoZSBkZXZpY2UgbWFwcGVyPyBPciBpcyBpdCBtb3JlIG9mIGEgaGVscGVyIGluIHRoZSBwcm9jZXNzPyBJJiMzOTtsbCBwcm9iYWJseSBiZSBsb29raW5nIGZvciBob3cgaXQgaGFuZGxlcyBidWZmZXIgYWxsb2NhdGlvbiwgYWRkcmVzc2luZywgYW5kIGVycm9yIGNoZWNraW5nLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpdCB1c2VzLCBwYXJ0aWN1bGFybHkgaWYgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBibG9jayBsYXllci4gTGV0JiMzOTtzIHNlZSBob3cgaXQgaGFuZGxlcyB0aGUgZGlmZmVyZW50IHBvc3NpYmxlIHNjZW5hcmlvcy4gSSYjMzk7bSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgbG93ZXIgbGF5ZXJzIGFuZCBoYW5kbGUgdGhvc2UgZWRnZSBjYXNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk5OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTk4Olx0c3NpemVfdCBfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiA5OTk6XHRcdFx0c3RydWN0IGlvbWFwX2l0ZXIgKmlvbWkpXG4xMDAwOlx0e1xuMTAwMTpcdFx0Z2ZwX3QgZ2ZwID0gKGlvbWktXHUwMDNlZmxhZ3MgXHUwMDI2IElPTUFQX05PV0FJVCkgPyBHRlBfTk9XQUlUIDogR0ZQX0tFUk5FTDtcbjEwMDI6XHRcdHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlICpzcjtcbjEwMDM6XHRcdHVuc2lnbmVkIGludCBhbGlnbm1lbnQ7XG4xMDA0Olx0XHRzdHJ1Y3QgYmlvICpiaW87XG4xMDA1Olx0XHRzc2l6ZV90IHJldDtcbjEwMDY6XHRcbjEwMDc6XHRcdGlmIChpb21pLVx1MDAzZWlvbWFwLnR5cGUgIT0gSU9NQVBfTUFQUEVEIHx8XG4xMDA4Olx0XHQgICAgaW9taS1cdTAwM2Vpb21hcC5vZmZzZXQgJiM0MzsgaW9taS1cdTAwM2Vpb21hcC5sZW5ndGggXHUwMDNjIGlvbWktXHUwMDNlcG9zICYjNDM7IGlvbWktXHUwMDNlbGVuIHx8XG4xMDA5Olx0XHQgICAgKGlvbWktXHUwMDNlaW9tYXAuZmxhZ3MgXHUwMDI2IElPTUFQX0ZfSU5URUdSSVRZKSkge1xuMTAxMDpcdFx0XHRyZXQgPSAtRU5PVEJMSztcbjEwMTE6XHRcdFx0Z290byBvdXRfZGlvX2VuZDtcbjEwMTI6XHRcdH1cbjEwMTM6XHRcbjEwMTQ6XHRcdGFsaWdubWVudCA9IGlvbWFwX2Rpb19hbGlnbm1lbnQoaW9taS1cdTAwM2Vpbm9kZSwgaW9taS1cdTAwM2Vpb21hcC5iZGV2LCAwKTtcbjEwMTU6XHRcdGlmICgoaW9taS1cdTAwM2Vwb3MgfCBpb21pLVx1MDAzZWxlbikgXHUwMDI2IChhbGlnbm1lbnQgLSAxKSkge1xuMTAxNjpcdFx0XHRyZXQgPSAtRUlOVkFMO1xuMTAxNzpcdFx0XHRnb3RvIG91dF9kaW9fZW5kO1xuMTAxODpcdFx0fVxuMTAxOTpcdFxuMTAyMDpcdFx0aWYgKHVubGlrZWx5KCFpb21pLVx1MDAzZWlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19kaW9fZG9uZV93cSBcdTAwMjZcdTAwMjZcbjEwMjE6XHRcdFx0XHQhaXNfc3luY19raW9jYihpb2NiKSkpIHtcbjEwMjI6XHRcdFx0cmV0ID0gc2JfaW5pdF9kaW9fZG9uZV93cShpb21pLVx1MDAzZWlub2RlLVx1MDAzZWlfc2IpO1xuMTAyMzpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTAyNDpcdFx0XHRcdGdvdG8gb3V0X2Rpb19lbmQ7XG4xMDI1Olx0XHR9XG4xMDI2Olx0XG4xMDI3Olx0XHR0cmFjZV9pb21hcF9kaW9fcndfYmVnaW4oaW9jYiwgaXRlciwgMCwgMCk7XG4xMDI4Olx0XG4xMDI5Olx0XHRiaW8gPSBiaW9fYWxsb2NfYmlvc2V0KGlvbWktXHUwMDNlaW9tYXAuYmRldixcbjEwMzA6XHRcdFx0XHQgICAgICAgYmlvX2lvdl92ZWNzX3RvX2FsbG9jKGl0ZXIsIEJJT19NQVhfVkVDUyksXG4xMDMxOlx0XHRcdFx0ICAgICAgIFJFUV9PUF9SRUFELCBnZnAsIFx1MDAyNmlvbWFwX2Rpb19zaW1wbGVfcG9vbCk7XG4xMDMyOlx0XHRpZiAoIWJpbykge1xuMTAzMzpcdFx0XHRyZXQgPSAtRUFHQUlOO1xuMTAzNDpcdFx0XHRnb3RvIG91dF9kaW9fZW5kO1xuMTAzNTpcdFx0fVxuMTAzNjpcdFx0c3IgPSBjb250YWluZXJfb2YoYmlvLCBzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSwgYmlvKTtcbjEwMzc6XHRcdHNyLVx1MDAzZWlvY2IgPSBpb2NiO1xuMTAzODpcdFx0c3ItXHUwMDNlZGlvX2ZsYWdzID0gMDtcbjEwMzk6XHRcbjEwNDA6XHRcdGJpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IGlvbWFwX3NlY3RvcihcdTAwMjZpb21pLVx1MDAzZWlvbWFwLCBpb21pLVx1MDAzZXBvcyk7XG4xMDQxOlx0XHRiaW8tXHUwMDNlYmlfaW9wcmlvID0gaW9jYi1cdTAwM2VraV9pb3ByaW87XG4xMDQyOlx0XG4xMDQzOlx0XHRyZXQgPSBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgaXRlciwgYWxpZ25tZW50IC0gMSk7XG4xMDQ0Olx0XHRpZiAodW5saWtlbHkocmV0KSlcbjEwNDU6XHRcdFx0Z290byBvdXRfYmlvX3B1dDtcbjEwNDY6XHRcbjEwNDc6XHRcdGlmIChiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplICE9IGlvbWktXHUwMDNlbGVuKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzI0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IExpbmUgb2YgSW5xdWlyeSoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSwgbXkgaW5pdGlhbCBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB0aGUgYF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlYCBmdW5jdGlvbi4gSXQgc2VlbXMgaXQmIzM5O3Mgb25seSBkZXNpZ25lZCB0byBoYW5kbGUgdGhlIGBJT01BUF9NQVBQRURgIGNhc2UuIElmIGl0IGVuY291bnRlcnMgYW55dGhpbmcgZWxzZSwgbGlrZSBhIGhvbGUsIGl0JiMzOTtzIGltbWVkaWF0ZWx5IHJldHVybmluZyBgLUVOT1RCTEtgLiBUaGlzIHN1Z2dlc3RzIGl0ICpkb2VzbiYjMzk7dCogY2FsbCBgaW9tYXBfZGlvX2hvbGVfaXRlcmAsIHdoaWNoIGlzIGdvb2QgdG8ga25vdywgYW5kIHNpbXBsaWZpZXMgdGhpbmdzIGEgYml0IGluIHRoaXMgcGFydGljdWxhciBwYXRoLgoKVGhlcmVmb3JlLCB0aGUgZnVuY3Rpb25zIEkgbmVlZCB0byByZWFsbHkgZGl2ZSBpbnRvIGFyZSBgX19pb21hcF9kaW9fcndgIGFuZCBgaW9tYXBfZGlvX3J3YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRob3NlIGFyZSBzdHJ1Y3R1cmVkIGFuZCB1c2VkLgoKQWxyaWdodCwgYSBxdWljayBjaGVja+KApiB5ZXAsIGBpb21hcF9kaW9fcndgICppcyogZXhwb3J0ZWQsIGFzIGNvbmZpcm1lZCBieSBgRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfZGlvX3J3KWAuIE5vdywgSSBzaG91bGQgbWFrZSBzdXJlIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGV4cG9ydGVkIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIGNhbGxpbmcgYGlvbWFwX2Rpb19pdGVyYC4gSXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gZm9yIG15IHVzZS1jYXNlLCBzbyBmaW5kaW5nIGFsbCBjYWxsIHBhdGhzIGlzIGVzc2VudGlhbCB0byBteSB1bmRlcnN0YW5kaW5nIGFuZCBkZWJ1Z2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvbWFwX2Rpb19pdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmM9NjEyPXN0YXRpYyBpbnQgaW9tYXBfZGlvX2lubGluZV9pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppb21pLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjQzLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NjQ0OnN0YXRpYyBpbnQgaW9tYXBfZGlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY0NS17XG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9Njk2PV9faW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTgyMS1cdHdoaWxlICgocmV0ID0gaW9tYXBfaXRlcihcdTAwMjZpb21pLCBvcHMpKSBcdTAwM2UgMCkge1xuZnMvaW9tYXAvZGlyZWN0LWlvLmM6ODIyOlx0XHRpb21pLnN0YXR1cyA9IGlvbWFwX2Rpb19pdGVyKFx1MDAyNmlvbWksIGRpbyk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy04MjMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDQzCgkJCQkJCQlvdXRwdXQ6IDE1NAoJCQkJCQkJdGhvdWdodHM6IDU0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIGNhbiB0ZWxsLCBvbmx5IGBfX2lvbWFwX2Rpb19yd2AgY2FsbHMgYGlvbWFwX2Rpb19pdGVyYCwgbWFraW5nIHRob3NlIHRoZSBrZXkgZnVuY3Rpb25zIHRvIHdhdGNoLiBTbywgYF9faW9tYXBfZGlvX3J3YCBhbmQgYGlvbWFwX2Rpb19yd2AgYXJlIHRoZSBkaXJlY3QgZW50cnkgcG9pbnRzLiBJIHNob3VsZCBmb2N1cyBvbiB0aG9zZS4KCk5vdywgbGV0JiMzOTtzIGdldCB0aGUgY29uZmlndXJhdGlvbnMgc3RyYWlnaHQuIGBDT05GSUdfRlNfSU9NQVBgIGlzIHNlbGVjdGVkIGJ5IGEgcmFuZ2Ugb2YgZmlsZXN5c3RlbXMgaW5jbHVkaW5nIGBFWFQ0X0ZTYCwgYFhGU19GU2AsIGFuZCBgQlRSRlNfRlNgLCBhbW9uZyBvdGhlcnMuIFNpbmNlIEkgd2FudCB0byBtYWtlIHRoZSBmdXp6aW5nIGVmZmVjdGl2ZSwgSSBzaG91bGQganVzdCBzcGVjaWZ5IGBFWFQ0X0ZTYCwgYFhGU19GU2AsIGFuZCBgQlRSRlNfRlNgLiBUaGlzIGxvb2tzIGxpa2UgdGhlIG1vc3Qgc3RyYWlnaHRmb3J3YXJkIGFwcHJvYWNoLgoKTGV0JiMzOTtzIGRpdmUgaW50byB0aGF0IGBpb21hcF9kaW9faG9sZV9pdGVyYCBjb2RlIGFnYWluLgpgYGBjCnN0YXRpYyBpbnQgaW9tYXBfZGlvX2hvbGVfaXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKQp7Cglsb2ZmX3QgY29waWVkID0gaW92X2l0ZXJfemVybyhpb21hcF9sZW5ndGgoaXRlciksIGRpby0mZ3Q7c3VibWl0Lml0ZXIpOwoJdW5zaWduZWQgaW50IGJzID0gaV9ibG9ja3NpemUoaXRlci0mZ3Q7aW5vZGUpOwoJbG9mZl90IGFsaWduZWRfY29waWVkID0gcm91bmRfZG93bihjb3BpZWQsIGJzKTsKCgkvKgoJICogSWYgZnMgYmxvY2sgc2l6ZSBpcyBsYXJnZXIgdGhhbiBwYWdlIHNpemUsIHBhZ2UgZmF1bHQgZmFpbHVyZQoJICogY2FuIGNhdXNlIEBjb3BpZWQgdG8gYmUgcGFnZSBhbGlnbmVkIGJ1dCBub3QgZnMgYmxvY2sgYWxpZ25lZC4KCSAqLwoJaW92X2l0ZXJfcmV2ZXJ0KGRpby0mZ3Q7c3VibWl0Lml0ZXIsIGNvcGllZCAtIGFsaWduZWRfY29waWVkKTsKCWRpby0mZ3Q7c2l6ZSAmIzQzOz0gYWxpZ25lZF9jb3BpZWQ7CglpZiAoIWFsaWduZWRfY29waWVkKQoJCXJldHVybiAtRUZBVUxUOwoJcmV0dXJuIGlvbWFwX2l0ZXJfYWR2YW5jZShpdGVyLCBhbGlnbmVkX2NvcGllZCk7Cn0KYGBgClllcywgdGhpcyBjb2RlIGlzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vaywgZXNwZWNpYWxseSBmb3IgZnV6emluZy4gVGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgaG93IHdlIGhhbmRsZSAmIzM0O2hvbGVzJiMzNDsgb3IgdW53cml0dGVuIGV4dGVudHMgaW4gZGlyZWN0IEkvTy4gVGhlIGdvYWwgaXMgdG8gZW5zdXJlIHRoZSBjb3BpZWQgbGVuZ3RoIGlzIGFsaWduZWQgdG8gdGhlIGZpbGVzeXN0ZW0gYmxvY2sgc2l6ZSBhZnRlciBwb3NzaWJsZSBwYWdlIGZhdWx0IGZhaWx1cmVzLiBJdCBsb29rcyBsaWtlIGl0IGFkZHJlc3NlcyBhIGNyaXRpY2FsIGlzc3VlIHRoYXQgY291bGQgbGVhZCB0byBtaXNhbGlnbm1lbnQgYmV0d2VlbiBwYWdlIGFuZCBibG9jayBzaXplcywgd2hpY2ggd291bGQgY2F1c2UgYW4gZXJyb3IuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBkZWVwIHdpdGhpbiB0aGUgY29yZSBpb21hcCBkaXJlY3QgSS9PIHBhdGguCgpNeSBmb2N1cyBzaG91bGQgYmUgb24gZnV6emluZyB0aGUgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgIHNwZWNpZmljYWxseS4gSSB0aGluayBJJiMzOTt2ZSBnb3QgYSBnb29kIGhhbmRsZSBvbiB3aGVyZSB0byBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7WEZTX0ZTJiMzNDssCiAgICAmIzM0O0JUUkZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19pb21hcF9kaW9fcncmIzM0OywKICAgICYjMzQ7aW9tYXBfZGlvX3J3JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBiZWhhdmlvciBvZiBgaW9tYXBfZGlvX2hvbGVfaXRlcmAgdG8gY29ycmVjdGx5IGFsaWduIHRoZSBjb3BpZWQgbGVuZ3RoIHRvIHRoZSBmaWxlc3lzdGVtIGJsb2NrIHNpemUgd2hlbiByZWFkaW5nIGZyb20gYSBob2xlIG9yIHVud3JpdHRlbiBleHRlbnQgdXNpbmcgZGlyZWN0IEkvTy4gVGhpcyBwcmV2ZW50cyBpc3N1ZXMgd2hlcmUgcGFnZSBmYXVsdCBmYWlsdXJlcyBjb3VsZCByZXN1bHQgaW4gbGVuZ3RocyB0aGF0IGFyZSBwYWdlLWFsaWduZWQgYnV0IG5vdCBibG9jay1hbGlnbmVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgaW9tYXAgZGlyZWN0IEkvTyBwYXRoLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDssCiAgICAmIzM0O1hGU19GUyYjMzQ7LAogICAgJiMzNDtCVFJGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19faW9tYXBfZGlvX3J3JiMzNDssCiAgICAmIzM0O2lvbWFwX2Rpb19ydyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgIHRvIGNvcnJlY3RseSBhbGlnbiB0aGUgY29waWVkIGxlbmd0aCB0byB0aGUgZmlsZXN5c3RlbSBibG9jayBzaXplIHdoZW4gcmVhZGluZyBmcm9tIGEgaG9sZSBvciB1bndyaXR0ZW4gZXh0ZW50IHVzaW5nIGRpcmVjdCBJL08uIFRoaXMgcHJldmVudHMgaXNzdWVzIHdoZXJlIHBhZ2UgZmF1bHQgZmFpbHVyZXMgY291bGQgcmVzdWx0IGluIGxlbmd0aHMgdGhhdCBhcmUgcGFnZS1hbGlnbmVkIGJ1dCBub3QgYmxvY2stYWxpZ25lZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGlvbWFwIGRpcmVjdCBJL08gcGF0aC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIyOjQ1OjM4Ljc2OTkyMTM3N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzNDk5NjcwODI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIixcbiAgICBcIlhGU19GU1wiLFxuICAgIFwiQlRSRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2lvbWFwX2Rpb19yd1wiLFxuICAgIFwiaW9tYXBfZGlvX3J3XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJlaGF2aW9yIG9mIGBpb21hcF9kaW9faG9sZV9pdGVyYCB0byBjb3JyZWN0bHkgYWxpZ24gdGhlIGNvcGllZCBsZW5ndGggdG8gdGhlIGZpbGVzeXN0ZW0gYmxvY2sgc2l6ZSB3aGVuIHJlYWRpbmcgZnJvbSBhIGhvbGUgb3IgdW53cml0dGVuIGV4dGVudCB1c2luZyBkaXJlY3QgSS9PLiBUaGlzIHByZXZlbnRzIGlzc3VlcyB3aGVyZSBwYWdlIGZhdWx0IGZhaWx1cmVzIGNvdWxkIHJlc3VsdCBpbiBsZW5ndGhzIHRoYXQgYXJlIHBhZ2UtYWxpZ25lZCBidXQgbm90IGJsb2NrLWFsaWduZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBpb21hcCBkaXJlY3QgSS9PIHBhdGguXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIyOjQ1OjM4Ljc2OTkyNzE4N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwMDAxNDk4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGJkZDMyNzEzNzI0YjM1NzQ2YjRhMzk1MTJkNDUwZmIyMjNjZWUzM2RcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgNCAyMjo0NTozNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9pb21hcC9kaXJlY3QtaW8uYyBiL2ZzL2lvbWFwL2RpcmVjdC1pby5jXFxuaW5kZXggYjMzNjhkNjRlODFiYi4uMDFmMjZmYjNiM2IyYyAxMDA2NDRcXG4tLS0gYS9mcy9pb21hcC9kaXJlY3QtaW8uY1xcbisrKyBiL2ZzL2lvbWFwL2RpcmVjdC1pby5jXFxuQEAgLTU5NCwxMiArNTk0LDE5IEBAIHN0YXRpYyBpbnQgaW9tYXBfZGlvX2Jpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXFxuIFxcbiBzdGF0aWMgaW50IGlvbWFwX2Rpb19ob2xlX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG4ge1xcbi1cXHRsb2ZmX3QgbGVuZ3RoID0gaW92X2l0ZXJfemVybyhpb21hcF9sZW5ndGgoaXRlciksIGRpby1cXHUwMDNlc3VibWl0Lml0ZXIpO1xcbitcXHRsb2ZmX3QgY29waWVkID0gaW92X2l0ZXJfemVybyhpb21hcF9sZW5ndGgoaXRlciksIGRpby1cXHUwMDNlc3VibWl0Lml0ZXIpO1xcbitcXHR1bnNpZ25lZCBpbnQgYnMgPSBpX2Jsb2Nrc2l6ZShpdGVyLVxcdTAwM2Vpbm9kZSk7XFxuK1xcdGxvZmZfdCBhbGlnbmVkX2NvcGllZCA9IHJvdW5kX2Rvd24oY29waWVkLCBicyk7XFxuIFxcbi1cXHRkaW8tXFx1MDAzZXNpemUgKz0gbGVuZ3RoO1xcbi1cXHRpZiAoIWxlbmd0aClcXG4rXFx0LypcXG4rXFx0ICogSWYgZnMgYmxvY2sgc2l6ZSBpcyBsYXJnZXIgdGhhbiBwYWdlIHNpemUsIHBhZ2UgZmF1bHQgZmFpbHVyZVxcbitcXHQgKiBjYW4gY2F1c2UgQGNvcGllZCB0byBiZSBwYWdlIGFsaWduZWQgYnV0IG5vdCBmcyBibG9jayBhbGlnbmVkLlxcbitcXHQgKi9cXG4rXFx0aW92X2l0ZXJfcmV2ZXJ0KGRpby1cXHUwMDNlc3VibWl0Lml0ZXIsIGNvcGllZCAtIGFsaWduZWRfY29waWVkKTtcXG4rXFx0ZGlvLVxcdTAwM2VzaXplICs9IGFsaWduZWRfY29waWVkO1xcbitcXHRpZiAoIWFsaWduZWRfY29waWVkKVxcbiBcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4tXFx0cmV0dXJuIGlvbWFwX2l0ZXJfYWR2YW5jZShpdGVyLCBsZW5ndGgpO1xcbitcXHRyZXR1cm4gaW9tYXBfaXRlcl9hZHZhbmNlKGl0ZXIsIGFsaWduZWRfY29waWVkKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBpb21hcF9kaW9faW5saW5lX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKmlvbWksIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjI6NDU6NDAuMDcwNTM1MjUzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjIxOTkwNDg0MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiLFxuICAgIFwiWEZTX0ZTXCIsXG4gICAgXCJCVFJGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9faW9tYXBfZGlvX3J3XCIsXG4gICAgXCJpb21hcF9kaW9fcndcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgIHRvIGNvcnJlY3RseSBhbGlnbiB0aGUgY29waWVkIGxlbmd0aCB0byB0aGUgZmlsZXN5c3RlbSBibG9jayBzaXplIHdoZW4gcmVhZGluZyBmcm9tIGEgaG9sZSBvciB1bndyaXR0ZW4gZXh0ZW50IHVzaW5nIGRpcmVjdCBJL08uIFRoaXMgcHJldmVudHMgaXNzdWVzIHdoZXJlIHBhZ2UgZmF1bHQgZmFpbHVyZXMgY291bGQgcmVzdWx0IGluIGxlbmd0aHMgdGhhdCBhcmUgcGFnZS1hbGlnbmVkIGJ1dCBub3QgYmxvY2stYWxpZ25lZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGlvbWFwIGRpcmVjdCBJL08gcGF0aC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYmRkMzI3MTM3MjRiMzU3NDZiNGEzOTUxMmQ0NTBmYjIyM2NlZTMzZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDQgMjI6NDU6MzcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9pb21hcC9kaXJlY3QtaW8uYyBiL2ZzL2lvbWFwL2RpcmVjdC1pby5jXG5pbmRleCBiMzM2OGQ2NGU4MWJiLi4wMWYyNmZiM2IzYjJjIDEwMDY0NFxuLS0tIGEvZnMvaW9tYXAvZGlyZWN0LWlvLmNcbisrKyBiL2ZzL2lvbWFwL2RpcmVjdC1pby5jXG5AQCAtNTk0LDEyICs1OTQsMTkgQEAgc3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbiBcbiBzdGF0aWMgaW50IGlvbWFwX2Rpb19ob2xlX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbiB7XG4tXHRsb2ZmX3QgbGVuZ3RoID0gaW92X2l0ZXJfemVybyhpb21hcF9sZW5ndGgoaXRlciksIGRpby1cdTAwM2VzdWJtaXQuaXRlcik7XG4rXHRsb2ZmX3QgY29waWVkID0gaW92X2l0ZXJfemVybyhpb21hcF9sZW5ndGgoaXRlciksIGRpby1cdTAwM2VzdWJtaXQuaXRlcik7XG4rXHR1bnNpZ25lZCBpbnQgYnMgPSBpX2Jsb2Nrc2l6ZShpdGVyLVx1MDAzZWlub2RlKTtcbitcdGxvZmZfdCBhbGlnbmVkX2NvcGllZCA9IHJvdW5kX2Rvd24oY29waWVkLCBicyk7XG4gXG4tXHRkaW8tXHUwMDNlc2l6ZSArPSBsZW5ndGg7XG4tXHRpZiAoIWxlbmd0aClcbitcdC8qXG4rXHQgKiBJZiBmcyBibG9jayBzaXplIGlzIGxhcmdlciB0aGFuIHBhZ2Ugc2l6ZSwgcGFnZSBmYXVsdCBmYWlsdXJlXG4rXHQgKiBjYW4gY2F1c2UgQGNvcGllZCB0byBiZSBwYWdlIGFsaWduZWQgYnV0IG5vdCBmcyBibG9jayBhbGlnbmVkLlxuK1x0ICovXG4rXHRpb3ZfaXRlcl9yZXZlcnQoZGlvLVx1MDAzZXN1Ym1pdC5pdGVyLCBjb3BpZWQgLSBhbGlnbmVkX2NvcGllZCk7XG4rXHRkaW8tXHUwMDNlc2l6ZSArPSBhbGlnbmVkX2NvcGllZDtcbitcdGlmICghYWxpZ25lZF9jb3BpZWQpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuLVx0cmV0dXJuIGlvbWFwX2l0ZXJfYWR2YW5jZShpdGVyLCBsZW5ndGgpO1xuK1x0cmV0dXJuIGlvbWFwX2l0ZXJfYWR2YW5jZShpdGVyLCBhbGlnbmVkX2NvcGllZCk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgaW9tYXBfZGlvX2lubGluZV9pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppb21pLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMjo0NTo0MC4wNzA1MzY1MDNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODI4ODQ1MDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRGlyZWN0IElPIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgZnMvaW9tYXAvZGlyZWN0LWlvLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBpb21hcF9kaW9faG9sZV9pdGVyYCBmdW5jdGlvbi4gRnJvbSB3aGF0IEkgY2FuIHRlbGwsIHRoZSBjb3JlIGNoYW5nZSBmb2N1c2VzIG9uIGhvdyBgaW92X2l0ZXJfemVyb2AgaXMgaGFuZGxlZCwgYWRqdXN0aW5nIHRoZSBjb3BpZWQgbGVuZ3RoIHRvIG1hdGNoIHRoZSBibG9jayBzaXplLiBTZWVtcyBmdW5jdGlvbmFsLCBhbmQgZGVmaW5pdGVseSBhZmZlY3RzIGRpcmVjdCBJTyB3aXRoaW4gdGhlIGlvbWFwIGZyYW1ld29yay4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCdzIG5haWwgZG93biB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgZW5hYmxlcyBhbmQgY29udHJvbHMgdGhpcyBiZWhhdmlvci5cblxuTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uJ3MgaW1tZWRpYXRlIGNvbnRleHQuIFRpbWUgdG8gcHVsbCBvdXQgYGdyZXBgIGFuZCBzZWUgd2hlcmUgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgIGlzIGFjdHVhbGx5ICp1c2VkKi4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBzdXJyb3VuZGluZyBmdW5jdGlvbnMgdGhhdCBhcmUgaW1wYWN0ZWQgYW5kIHRoZSBvdmVyYWxsIHNjb3BlIG9mIHRoaXMgY2hhbmdlLiBPbmNlIEkgc2VlIHRoZSBjb250ZXh0cywgSSBjYW4gZGV0ZXJtaW5lIHRoZSBpbXBhY3Qgb2YgdGhlIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjkzLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjI6NDU6NDMuODk5MzgzNzQ2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyNTg3NzEzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb21hcF9kaW9faG9sZV9pdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2lvbWFwL2RpcmVjdC1pby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2lvbWFwL2RpcmVjdC1pby5jPTQxNT1zdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNTk0LVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjU5NTpzdGF0aWMgaW50IGlvbWFwX2Rpb19ob2xlX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy01OTYte1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9NjQ0PXN0YXRpYyBpbnQgaW9tYXBfZGlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY0OS1cXHRcXHRcXHRyZXR1cm4gLUVJTztcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo2NTA6XFx0XFx0cmV0dXJuIGlvbWFwX2Rpb19ob2xlX2l0ZXIoaXRlciwgZGlvKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NTEtXFx0Y2FzZSBJT01BUF9VTldSSVRURU46XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjUyLVxcdFxcdGlmICghKGRpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT01BUF9ESU9fV1JJVEUpKVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjY1MzpcXHRcXHRcXHRyZXR1cm4gaW9tYXBfZGlvX2hvbGVfaXRlcihpdGVyLCBkaW8pO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY1NC1cXHRcXHRyZXR1cm4gaW9tYXBfZGlvX2Jpb19pdGVyKGl0ZXIsIGRpbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIyOjQ1OjQ0LjIyNTI3NDg5MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NzQwNDAxMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFscmVhZHkgcXVpdGUgZmFtaWxpYXIgd2l0aCBJL08gbWFwcGluZyBhbmQgZGlyZWN0IEkvTyB3aXRoaW4gYSBrZXJuZWwgY29udGV4dDpcblxuKipBbmFseXppbmcgdGhlIENhbGwgU3RydWN0dXJlIG9mIGBpb21hcF9kaW9faG9sZV9pdGVyYCoqXG5cbkFscmlnaHQsIHNvIGBpb21hcF9kaW9faG9sZV9pdGVyYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQncyBpbnRlcm5hbCB0byB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LiBObyBleHRlcm5hbCBmdW5jdGlvbnMgY2FuIGRpcmVjdGx5IGNhbGwgaXQuIEl0J3MgZXNzZW50aWFsbHkgYSBoZWxwZXIgZnVuY3Rpb24sIGxpa2VseSBlbmNhcHN1bGF0ZWQgd2l0aGluIGEgbGFyZ2VyIG1vZHVsZS4gSSBrbm93IGBpb21hcF9kaW9faXRlcmAgaXMgdGhlIHB1YmxpYy1mYWNpbmcgZW50cnkgcG9pbnQsIGFuZCB0aGF0IGBpb21hcF9kaW9faG9sZV9pdGVyYCBpcyBiZWluZyBjYWxsZWQgZnJvbSB3aXRoaW4gaXQuXG5cbk15IHByaW1hcnkgZm9jdXMgbm93IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBmcm9tIHRoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGNvbnRleHQuIEkgbmVlZCB0byBrbm93IHdoZXJlIGBpb21hcF9kaW9faXRlcmAgaXMgYmVpbmcgY2FsbGVkIGZyb20uIFdoYXQgcm91dGluZXMgYXJlIGRlcGVuZGVudCB1cG9uIHRoZSBmdW5jdGlvbmFsaXR5IHRoYXQgaW5jbHVkZXMgYGlvbWFwX2Rpb19pdGVyYD8gS25vd2luZyB0aGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHdoeSB0aGlzIGl0ZXJhdGlvbiBvdmVyIGhvbGVzIGlzIGhhcHBlbmluZy4gSXMgaXQgdXNlZCBmb3IgcmVhZCBvcGVyYXRpb25zLCB3cml0ZSBvcGVyYXRpb25zLCBvciBib3RoPyBBcmUgd2UgZGVhbGluZyB3aXRoIHNwYXJzZSBmaWxlcywgb3Igd2hhdD8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGVycyBvZiBgaW9tYXBfZGlvX2l0ZXJgIHdpbGwgc2hlZCBsaWdodCBvbiB0aGUgcHVycG9zZSBhbmQgdGhlIG92ZXJhbGwgZGVzaWduIHN0cmF0ZWd5IG9mIHRoaXMgZnVuY3Rpb24gYW5kIGl0cyBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcy4gSSB3aWxsIGFsc28gaGF2ZSB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgd2hlbiBJIHVuZGVyc3RhbmQgdGhlIGNhbGxpbmcgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAyMCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIyOjQ1OjQ3Ljg5OTMxODMwNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzQxOTQwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb21hcF9kaW9faXRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9pb21hcC9kaXJlY3QtaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9pb21hcC9kaXJlY3QtaW8uYz02MTI9c3RhdGljIGludCBpb21hcF9kaW9faW5saW5lX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKmlvbWksIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY0My1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo2NDQ6c3RhdGljIGludCBpb21hcF9kaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY0NS17XFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYz02OTY9X19pb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy04MjEtXFx0d2hpbGUgKChyZXQgPSBpb21hcF9pdGVyKFxcdTAwMjZpb21pLCBvcHMpKSBcXHUwMDNlIDApIHtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo4MjI6XFx0XFx0aW9taS5zdGF0dXMgPSBpb21hcF9kaW9faXRlcihcXHUwMDI2aW9taSwgZGlvKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy04MjMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIyOjQ1OjQ3Ljk0Mjc0MTk0M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNTk4ODcxNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFscmVhZHkgcXVpdGUgZmFtaWxpYXIgd2l0aCB0aGUga2VybmVsJ3MgSS9PIGxheWVyOlxuXG4qKkRpZ2dpbmcgaW50byBpb21hcCBEaXJlY3QgSS9PKipcblxuQWxyaWdodCwgc28gYF9faW9tYXBfZGlvX3J3YC4uLiB0aGF0J3MgdGhlIGJpZyBvbmUsIHRoZSBjZW50cmFsIGh1YiBmb3IgSS9PIG9wZXJhdGlvbnMgdXNpbmcgdGhlIGlvbWFwIGZyYW1ld29yayBpbiBkaXJlY3QgSS9PIG1vZGUuIEl0J3MgdGhlIHBvaW50IG9mIGVudHJ5LCB0aGUgXCJnb1wiIGJ1dHRvbiwgYXMgaXQgd2VyZS4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhpcyBmdW5jdGlvbi5cblxuTGV0IG1lIHNlZSwgaXMgdGhpcyBjb3JlIGZ1bmN0aW9uIGFjdHVhbGx5IHZpc2libGUgdG8gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbD8gT3IsIGlzIGl0IHBlcmhhcHMgb25seSB1c2VkIGludGVybmFsbHk/IENoZWNraW5nIHRoZSBleHBvcnQgc3RhdHVzIG9yIGNyb3NzLXJlZmVyZW5jaW5nIGFsbCB1c2VzIHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJvbGUgaW4gdGhlIGxhcmdlciBzeXN0ZW0uIEl0J3MgYWxsIGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlIGJvdW5kYXJ5IGNvbmRpdGlvbnMgYW5kIGludGVyYWN0aW9ucyBvZiB0aGUgRGlyZWN0IEkvTyBzeXN0ZW0sIGFuZCBkZXRlcm1pbmluZyB3aGF0IHRoZSBpbXBhY3Qgb2YgbW9kaWZ5aW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY4MiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIyOjQ1OjUxLjIwMjYzMDY5N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzI2MDM1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2lvbWFwX2Rpb19yd1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9pb21hcC9kaXJlY3QtaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9pb21hcC9kaXJlY3QtaW8uYz00MTU9c3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTUxMC1cXHRcXHQgKiBXcml0ZXMgdGhhdCBleHRlbmQgaV9zaXplIGFyZSBhbHNvIG5vdCBzdXBwb3J0ZWQsIGJ1dCB0aGlzIGlzXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NTExOlxcdFxcdCAqIGhhbmRsZWQgaW4gX19pb21hcF9kaW9fcncoKS5cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy01MTItXFx0XFx0ICovXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYz02NDQ9c3RhdGljIGludCBpb21hcF9kaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjg0LSAqIFdoZW4gcGFnZSBmYXVsdHMgYXJlIGRpc2FibGVkIGFuZCBAZGlvX2ZsYWdzIGluY2x1ZGVzIElPTUFQX0RJT19QQVJUSUFMLFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjY4NTogKiBfX2lvbWFwX2Rpb19ydyBjYW4gcmV0dXJuIGEgcGFydGlhbCByZXN1bHQgaWYgaXQgZW5jb3VudGVycyBhIG5vbi1yZXNpZGVudFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY4Ni0gKiBwYWdlIGluIEBpdGVyIGFmdGVyIHByZXBhcmluZyBhIHRyYW5zZmVyLiAgSW4gdGhhdCBjYXNlLCB0aGUgbm9uLXJlc2lkZW50XFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYz02OTU9c3RydWN0IGlvbWFwX2RpbyAqXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6Njk2Ol9faW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY5Ny1cXHRcXHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzICpkb3BzLFxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTA2LX1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5MDc6RVhQT1JUX1NZTUJPTF9HUEwoX19pb21hcF9kaW9fcncpO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkwOC1cXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTkxMD1pb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTUtXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTE2OlxcdGRpbyA9IF9faW9tYXBfZGlvX3J3KGlvY2IsIGl0ZXIsIG9wcywgZG9wcywgZGlvX2ZsYWdzLCBwcml2YXRlLFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkxNy1cXHRcXHRcXHQgICAgIGRvbmVfYmVmb3JlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjI6NDU6NTEuMjQ1ODkyOTM0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIyODY4MDgxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBEaXJlY3QgSS9PIEltcGxlbWVudGF0aW9uKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IGRpcmVjdCBJL08gaXMgcmVhbGx5IG9wZXJhdGluZy4gU2VlbXMgbGlrZSBteSBzdGFydGluZyBwb2ludCBpcyB0byB1bmRlcnN0YW5kIGBfX2lvbWFwX2Rpb19yd2AgYW5kIGBpb21hcF9kaW9fcndgLiBUaG9zZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zLCB0aGUgcmVhbCBoZWFydCBvZiB0aGUgZGlyZWN0IEkvTyBwcm9jZXNzLCBJIGJldC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgY3JpdGljYWwgdG8gZW5hYmxlIHRoZSBgZnMvaW9tYXAvZGlyZWN0LWlvLmNgIG1vZHVsZSBpbiB0aGUgZmlyc3QgcGxhY2UuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBjb250ZXh0LCB0aGUgZm91bmRhdGlvbiwgZm9yIHRydWx5IGdyYXNwaW5nIHdoYXQncyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIEl0J3MgdGltZSB0byB0cmFjayBkb3duIHRob3NlIGRlcGVuZGVuY2llcyBhbmQgc2VlIHdoYXQgdHJpZ2dlcnMgdGhlIGluY2x1c2lvbiBvZiB0aGF0IGZpbGUuIEtub3dpbmcgdGhlIHByZXJlcXVpc2l0ZXMgd2lsbCBoZWxwIGltbWVuc2VseSBpbiBteSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU3MywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIyOjQ1OjU0LjQ3NDU3NjMzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjY1ODQ5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkaXJlY3QtaW8ub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9pb21hcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW9tYXAvTWFrZWZpbGU9MTE9aW9tYXAteVxcdFxcdFxcdFxcdCs9IHRyYWNlLm8gXFxcXFxcbi0tXFxuZnMvaW9tYXAvTWFrZWZpbGUtMTMtXFx0XFx0XFx0XFx0ICAgYnVmZmVyZWQtaW8ub1xcbmZzL2lvbWFwL01ha2VmaWxlOjE0OmlvbWFwLSQoQ09ORklHX0JMT0NLKVxcdFxcdCs9IGRpcmVjdC1pby5vIFxcXFxcXG5mcy9pb21hcC9NYWtlZmlsZS0xNS1cXHRcXHRcXHRcXHQgICBpb2VuZC5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjI6NDU6NTQuNTE3MjM4NjI3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNDQzODc3ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBLZXJuZWwncyBEaXJlY3QgSS9PIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBgQ09ORklHX0JMT0NLYCBpcyB0dXJuaW5nIG9uIGBkaXJlY3QtaW8ub2AsIHdoaWNoIGlzIGluIHRoZSBgZnMvaW9tYXAvTWFrZWZpbGVgLiBUaGF0J3MgaW50ZXJlc3RpbmcuIEkgaW1tZWRpYXRlbHkgd29uZGVyIGhvdyB0aGF0IGFsbCBmaXRzIHRvZ2V0aGVyLCBzcGVjaWZpY2FsbHkgaWYgYGZzL2lvbWFwL01ha2VmaWxlYCBjb25kaXRpb25hbGx5IGluY2x1ZGVzIGBpb21hcC5vYCBiYXNlZCBvbiBgQ09ORklHX0ZTX0lPTUFQYCBvciBzb21ldGhpbmcgbGlrZSB0aGF0LiBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgZnMvaW9tYXAvTWFrZWZpbGVgIGhhbmRsZXMgYGlvbWFwLm9gLiBUaW1lIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGF0IGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5MzIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMjo0NTo1Ny42NjE2MjgzM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9pb21hcC9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgQ29weXJpZ2h0IChjKSAyMDE5IE9yYWNsZS5cXG4gICA0OlxcdCMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cXG4gICA1OlxcdCNcXG4gICA2OlxcdFxcbiAgIDc6XFx0Y2NmbGFncy15ICs9IC1JICQoc3JjKVxcdFxcdCMgbmVlZGVkIGZvciB0cmFjZSBldmVudHNcXG4gICA4OlxcdFxcbiAgIDk6XFx0b2JqLSQoQ09ORklHX0ZTX0lPTUFQKVxcdFxcdCs9IGlvbWFwLm9cXG4gIDEwOlxcdFxcbiAgMTE6XFx0aW9tYXAteVxcdFxcdFxcdFxcdCs9IHRyYWNlLm8gXFxcXFxcbiAgMTI6XFx0XFx0XFx0XFx0XFx0ICAgaXRlci5vIFxcXFxcXG4gIDEzOlxcdFxcdFxcdFxcdFxcdCAgIGJ1ZmZlcmVkLWlvLm9cXG4gIDE0OlxcdGlvbWFwLSQoQ09ORklHX0JMT0NLKVxcdFxcdCs9IGRpcmVjdC1pby5vIFxcXFxcXG4gIDE1OlxcdFxcdFxcdFxcdFxcdCAgIGlvZW5kLm8gXFxcXFxcbiAgMTY6XFx0XFx0XFx0XFx0XFx0ICAgZmllbWFwLm8gXFxcXFxcbiAgMTc6XFx0XFx0XFx0XFx0XFx0ICAgc2Vlay5vIFxcXFxcXG4gIDE4OlxcdFxcdFxcdFxcdFxcdCAgIGJpby5vXFxuICAxOTpcXHRpb21hcC0kKENPTkZJR19TV0FQKVxcdFxcdCs9IHN3YXBmaWxlLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjI6NDU6NTcuNjYxNjgzNTc5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMjk2MTgzNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbml0aWFsIENvbmZpZ3VyYXRpb24gQ2hlY2sqKlxuXG5SaWdodCwgc28gdG8gZ2V0IHRoaXMgZnVuY3Rpb25hbGl0eSB1cCBhbmQgcnVubmluZywgSSdtIGdvaW5nIHRvIG5lZWQgdG8gbWFrZSBzdXJlIGBDT05GSUdfRlNfSU9NQVBgIGlzIGVuYWJsZWQsIGFuZCBgQ09ORklHX0JMT0NLYCBpcyBhcyB3ZWxsLiBUaGF0IG1ha2VzIHNlbnNlLCBgQ09ORklHX0JMT0NLYCBpcyBhIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrLiBBbmQgYENPTkZJR19GU19JT01BUGA/IEFoIHllcywgdGhhdOKAmXMgcmlnaHQsIHRoYXQncyB0aGUgaW9tYXAgaW5mcmFzdHJ1Y3R1cmUsIGFuZCBpdOKAmXMgdXRpbGl6ZWQgYnkgYSB3aG9sZSByYW5nZSBvZiBmaWxlc3lzdGVtcyDigJMgZXh0NCwgeGZzLCBidHJmcywgYWxsIHRoZSB1c3VhbCBzdXNwZWN0cy4gSSdkIGJldHRlciBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZW50cnkgZm9yIGBGU19JT01BUGAgaW4gYGZzL0tjb25maWdgIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyBhbmQgY29udGV4dC4gR290dGEgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MjcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIyOjQ2OjAwLjc5MTMwNDQyM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM1NTU3MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZTX0lPTUFQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTEyPWNvbmZpZyBWQUxJREFURV9GU19QQVJTRVJcXG4tLVxcbmZzL0tjb25maWctMTctXFxuZnMvS2NvbmZpZzoxODpjb25maWcgRlNfSU9NQVBcXG5mcy9LY29uZmlnLTE5LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjI6NDY6MDAuODY0ODgzMjg4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MTY4OTkwNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGVjb2RpbmcgVGhpcyBCb29sZWFuIEVuaWdtYSoqXG5cbkFscmlnaHQsIHNvIHRoZXJlJ3MgdGhpcyBoaWRkZW4gQm9vbGVhbiBzZXR0aW5nLCBhbmQgaXQncyBiZWluZyBzZWxlY3RlZCBieSB0aGUgZmlsZXN5c3RlbXMgdGhlbXNlbHZlcy4gSW50ZXJlc3RpbmcuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkaWcgZGVlcGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2VsZWN0aW9uIGNyaXRlcmlhLiBXaGF0IHRyaWdnZXJzIHRoaXMgcGFydGljdWxhciBmbGFnPyBUaGUgXCJ3aGF0XCIgaXMgdGhlIG1vc3QgaW1wb3J0YW50IHF1ZXN0aW9uLiBJcyBpdCBiYXNlZCBvbiBzcGVjaWZpYyBmaWxlc3lzdGVtIGZlYXR1cmVzPyBIYXJkd2FyZSBkZXRlY3Rpb24/IENvbmZpZ3VyYXRpb24gcGFyYW1ldGVycz8gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGNvZGUgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgaXQuIExldCdzIHNlZSBpZiBJIGNhbiB0cmFjZSB0aGUgc2VsZWN0aW9uIGxvZ2ljIGFuZCBnZXQgYSBoYW5kbGUgb24gdGhlIHdoeSBhbmQgaG93LiBUaW1lIHRvIGRpc3NlY3QgdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NTUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMjo0NjowMy43ODE3ODU1NTZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyNTY0NjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBGU19JT01BUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZz01OD1jb25maWcgRlNfREFYXFxuLS1cXG5mcy9LY29uZmlnLTYxLVxcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcXG5mcy9LY29uZmlnOjYyOlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL0tjb25maWctNjMtXFx0c2VsZWN0IERBWFxcbi0tXFxuZnMvYnRyZnMvS2NvbmZpZz0zPWNvbmZpZyBCVFJGU19GU1xcbi0tXFxuZnMvYnRyZnMvS2NvbmZpZy0xNC1cXHRzZWxlY3QgWlNURF9ERUNPTVBSRVNTXFxuZnMvYnRyZnMvS2NvbmZpZzoxNTpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9idHJmcy9LY29uZmlnLTE2LVxcdHNlbGVjdCBSQUlENl9QUVxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZz0zPWNvbmZpZyBFUk9GU19GU1xcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy04LVxcdHNlbGVjdCBDUllQVE9fREVGTEFURSBpZiBFUk9GU19GU19aSVBfQUNDRUxcXG5mcy9lcm9mcy9LY29uZmlnOjk6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMvZXJvZnMvS2NvbmZpZy0xMC1cXHRzZWxlY3QgTFo0X0RFQ09NUFJFU1MgaWYgRVJPRlNfRlNfWklQXFxuLS1cXG5mcy9leGZhdC9LY29uZmlnPTM9Y29uZmlnIEVYRkFUX0ZTXFxuLS1cXG5mcy9leGZhdC9LY29uZmlnLTYtXFx0c2VsZWN0IE5MU1xcbmZzL2V4ZmF0L0tjb25maWc6NzpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9leGZhdC9LY29uZmlnLTgtXFx0aGVscFxcbi0tXFxuZnMvZXh0Mi9LY29uZmlnPTI9Y29uZmlnIEVYVDJfRlNcXG4tLVxcbmZzL2V4dDIvS2NvbmZpZy00LVxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbmZzL2V4dDIvS2NvbmZpZzo1OlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL2V4dDIvS2NvbmZpZy02LVxcdGhlbHBcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZz0yPWNvbmZpZyBFWFQ0X0ZTXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNy1cXHRzZWxlY3QgQ1JDMzJcXG5mcy9leHQ0L0tjb25maWc6ODpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9leHQ0L0tjb25maWctOS1cXHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cXG4tLVxcbmZzL2YyZnMvS2NvbmZpZz0yPWNvbmZpZyBGMkZTX0ZTXFxuLS1cXG5mcy9mMmZzL0tjb25maWctOS1cXHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cXG5mcy9mMmZzL0tjb25maWc6MTA6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMvZjJmcy9LY29uZmlnLTExLVxcdHNlbGVjdCBMWjRfQ09NUFJFU1MgaWYgRjJGU19GU19MWjRcXG4tLVxcbmZzL2Z1c2UvS2NvbmZpZz0yPWNvbmZpZyBGVVNFX0ZTXFxuLS1cXG5mcy9mdXNlL0tjb25maWctNC1cXHRzZWxlY3QgRlNfUE9TSVhfQUNMXFxuZnMvZnVzZS9LY29uZmlnOjU6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMvZnVzZS9LY29uZmlnLTYtXFx0aGVscFxcbi0tXFxuZnMvZ2ZzMi9LY29uZmlnPTI9Y29uZmlnIEdGUzJfRlNcXG4tLVxcbmZzL2dmczIvS2NvbmZpZy03LVxcdHNlbGVjdCBRVU9UQUNUTFxcbmZzL2dmczIvS2NvbmZpZzo4OlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL2dmczIvS2NvbmZpZy05LVxcdGhlbHBcXG4tLVxcbmZzL2hwZnMvS2NvbmZpZz0yPWNvbmZpZyBIUEZTX0ZTXFxuLS1cXG5mcy9ocGZzL0tjb25maWctNS1cXHRzZWxlY3QgQlVGRkVSX0hFQURcXG5mcy9ocGZzL0tjb25maWc6NjpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9ocGZzL0tjb25maWctNy1cXHRoZWxwXFxuLS1cXG5mcy9uaWxmczIvS2NvbmZpZz0yPWNvbmZpZyBOSUxGUzJfRlNcXG4tLVxcbmZzL25pbGZzMi9LY29uZmlnLTUtXFx0c2VsZWN0IENSQzMyXFxuZnMvbmlsZnMyL0tjb25maWc6NjpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9uaWxmczIvS2NvbmZpZy03LVxcdGhlbHBcXG4tLVxcbmZzL250ZnMvS2NvbmZpZz0yPWNvbmZpZyBOVEZTX0ZTXFxuLS1cXG5mcy9udGZzL0tjb25maWctNC1cXHRzZWxlY3QgTkxTXFxuZnMvbnRmcy9LY29uZmlnOjU6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMvbnRmcy9LY29uZmlnLTYtXFx0aGVscFxcbi0tXFxuZnMveGZzL0tjb25maWc9Mj1jb25maWcgWEZTX0ZTXFxuLS1cXG5mcy94ZnMvS2NvbmZpZy02LVxcdHNlbGVjdCBDUkMzMlxcbmZzL3hmcy9LY29uZmlnOjc6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMveGZzL0tjb25maWctOC1cXHRoZWxwXFxuLS1cXG5mcy96b25lZnMvS2NvbmZpZz0xPWNvbmZpZyBaT05FRlNfRlNcXG4tLVxcbmZzL3pvbmVmcy9LY29uZmlnLTQtXFx0ZGVwZW5kcyBvbiBCTEtfREVWX1pPTkVEXFxuZnMvem9uZWZzL0tjb25maWc6NTpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy96b25lZnMvS2NvbmZpZy02LVxcdHNlbGVjdCBDUkMzMlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMjo0NjowMy44NTQzNTQ4MjFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMwNDg5MjE4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXJlY3QgSU8gRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSB3ZSdyZSBlbmFibGluZyBgRlNfSU9NQVBgIOKAkyB3aGljaCBpcyBpbnRlcmVzdGluZy4gV2UncmUgZ2V0dGluZyBpdCB0aHJvdWdoIGVpdGhlciBgRVhUNF9GU2AsIGBYRlNfRlNgLCBvciBgQlRSRlNfRlNgLiBSaWdodCwgbWFrZXMgc2Vuc2UsIHRoYXQgbWFrZXMgdGhlIG1vc3QgY29tbW9uIGZpbGVzeXN0ZW0gY2hvaWNlcyBJIHdvdWxkIGV4cGVjdC4gQW5kLCBvZiBjb3Vyc2UsIHdlJ2xsIG5lZWQgYENPTkZJR19CTE9DS2AgZW5hYmxlZCBhcyB3ZWxsLCB0aGF0IGdvZXMgd2l0aG91dCBzYXlpbmcuXG5cblRoZSByZWFsIG1lYXQgb2YgdGhpcyBzZWVtcyB0byBiZSB0aGUgbW9kaWZpY2F0aW9ucyB0byBgaW9tYXBfZGlvX2hvbGVfaXRlcmAuIFRoYXQncyBjcml0aWNhbCwgYmVjYXVzZSB0aGF0J3Mgd2hhdCBnZXRzIGNhbGxlZCBzcGVjaWZpY2FsbHkgZHVyaW5nIGRpcmVjdCBJL08gd2hlbiB3ZSdyZSBoaXR0aW5nIGEgaG9sZSBpbiB0aGUgZmlsZS4gU28sIHRoaXMgaXMgZGVmaW5pdGVseSB0b3VjaGluZyBmdW5jdGlvbmFsIGNvZGUgdGhhdCBpcyBiZWluZyB1c2VkLCBzbyB0aGlzIG1ha2VzIHNlbnNlIHRvIGJlIGRvaW5nLlxuXG5MZXQncyBzZWUsIHdoYXQgZnVuY3Rpb25zIHNob3VsZCBJIHplcm8gaW4gb24/IExvb2tzIGxpa2UgYF9faW9tYXBfZGlvX3J3YCBhbmQgYGlvbWFwX2Rpb19yd2AgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGV4YW1pbmUuIFRoZXkgbXVzdCBiZSB0aGUgY29yZSBvZiB0aGUgZGlyZWN0IEkvTyByZWFkL3dyaXRlIGltcGxlbWVudGF0aW9uLiBJIHNob3VsZCBhbHNvIGNoZWNrIGFuZCBzZWUgd2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkIGZyb20gYGZzL2lvbWFwL2RpcmVjdC1pby5jYC4gR290dGEgZ2V0IHRoZSB3aG9sZSBwaWN0dXJlLCByaWdodD8gTmVlZCB0byBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIGFueSBkZXBlbmRlbmNpZXMgb3IgcmVsYXRlZCBmdW5jdGlvbnMgaW4gdGhhdCBzb3VyY2UgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk5NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMjo0NjowOC4xNTkyNDkzOFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI3MjMyNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9pb21hcC9kaXJlY3QtaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9pb21hcC9kaXJlY3QtaW8uYz0xMDU9c3NpemVfdCBpb21hcF9kaW9fY29tcGxldGUoc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTYwLX1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxNjE6RVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfZGlvX2NvbXBsZXRlKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xNjItXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYz0yNzI9dm9pZCBpb21hcF9kaW9fYmlvX2VuZF9pbyhzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0yNzktfVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjI4MDpFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9kaW9fYmlvX2VuZF9pbyk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMjgxLVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9Njk2PV9faW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTA2LX1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5MDc6RVhQT1JUX1NZTUJPTF9HUEwoX19pb21hcF9kaW9fcncpO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkwOC1cXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTkxMD1pb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MjEtfVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjkyMjpFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9kaW9fcncpO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkyMy1cXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTk5OD1zc2l6ZV90IF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTA4My19XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTA4NDpFWFBPUlRfU1lNQk9MX0dQTChfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZSk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTA4NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjI6NDY6MDguMjAxOTc4OTQ3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNzI2NjU0NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBEaXJlY3QgSS9PIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSByZWxldmFudCBmdW5jdGlvbnMgd2l0aGluIHRoZSBEaXJlY3QgSS9PIHBhdGguIE15IGluaXRpYWwgdGhvdWdodHMgYXJlIHRoYXQgYF9faW9tYXBfZGlvX3J3YCwgYGlvbWFwX2Rpb19yd2AsIGFuZCBgX19pb21hcF9kaW9fcmVhZF9zaW1wbGVgIGxvb2sgbGlrZSBzdHJvbmcgY29udGVuZGVycyBmb3IgaW52ZXN0aWdhdGlvbi4gVGhleSBzZWVtIGxpa2UgbG9naWNhbCBwbGFjZXMgdG8gc3RhcnQgZ2l2ZW4gdGhlIGNvbnRleHQuXG5cbkhvbGQgb24uLi4gSSdtIGp1c3QgcmVjYWxsaW5nIHRoYXQgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgIGlzIHNwZWNpZmljYWxseSB1c2VkIGR1cmluZyB3cml0ZXMuIFRoYXQncyBhIGhlbHBmdWwgZmlsdGVyaW5nIGluc2lnaHQuIEkgc2hvdWxkIGVuc3VyZSBJJ20ga2VlcGluZyB0aGF0IGRpc3RpbmN0aW9uIGNsZWFyIGluIG15IG1pbmQuXG5cbkFscmlnaHQsIGEgbW9yZSBnZW5lcmFsLCBwcm9iYWJseSBlbmNvbXBhc3NpbmcgY2FuZGlkYXRlIHdvdWxkIGJlIGBpb21hcF9kaW9faXRlcmAuIExldCdzIGZvY3VzIG91ciBhdHRlbnRpb24gdGhlcmUgZm9yIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAxNywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIyOjQ2OjExLjU3NDY0NjI0M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU4MTAxODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9tYXBfZGlvX2l0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaW9tYXAvZGlyZWN0LWlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW9tYXAvZGlyZWN0LWlvLmM9NjEyPXN0YXRpYyBpbnQgaW9tYXBfZGlvX2lubGluZV9pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppb21pLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NDMtXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NjQ0OnN0YXRpYyBpbnQgaW9tYXBfZGlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NDUte1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9Njk2PV9faW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtODIxLVxcdHdoaWxlICgocmV0ID0gaW9tYXBfaXRlcihcXHUwMDI2aW9taSwgb3BzKSkgXFx1MDAzZSAwKSB7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6ODIyOlxcdFxcdGlvbWkuc3RhdHVzID0gaW9tYXBfZGlvX2l0ZXIoXFx1MDAyNmlvbWksIGRpbyk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtODIzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMjo0NjoxMS42MzA0NjA2MjhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY1ODYwODI5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGlvbWFwX2Rpb19pdGVyYCBpbXBsZW1lbnRhdGlvbi4gSSdtIGN1cmlvdXMgdG8gc2VlIGhvdyB0aGlzIGhhbmRsZXMgRGlyZWN0IEkvTyBpdGVyYXRpb25zLiBVbmRlcnN0YW5kaW5nIHRoZSBudWFuY2VzIG9mIHRoaXMgaXRlcmF0b3IgaXMga2V5IHRvIG9wdGltaXppbmcgYW55IEkvTy1pbnRlbnNpdmUgY29kZSBJJ20gd29ya2luZyBvbi4gSSdtIGV4cGVjdGluZyB0byBzZWUgY2xldmVyIGhhbmRsaW5nIG9mIHRoZSBibG9jayBzaXplIGFuZCBhbGlnbm1lbnQsIGFuZCBob3cgaXQgZGVhbHMgd2l0aCBwYXJ0aWFsIGJsb2Nrcy4gSSdtIGFsc28gbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBvcHRpbWl6YXRpb25zIGFyb3VuZCBkYXRhIHByZWZldGNoaW5nIG9yIG1lcmdpbmcgdG8gbWluaW1pemUgc3lzdGVtIGNhbGxzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGl0ZXJhdG9yIGV4cG9zZXMgdGhlIHVuZGVybHlpbmcgSS9PIG9wZXJhdGlvbnMgYW5kIHdoZXRoZXIgaXQgZWZmaWNpZW50bHkgYWJzdHJhY3RzIGF3YXkgdGhlIGNvbXBsZXhpdGllcy4gS25vd2luZyB0aGlzIGlzIGNyaXRpY2FsIGZvciBkZWJ1Z2dpbmcgcGVyZm9ybWFuY2UgaXNzdWVzLiBJIGFsc28gZXhwZWN0IHRoYXQgdGhlcmUnbGwgYmUgc29tZSB0cmlja3kgZWRnZSBjYXNlcyB3aXRoIGhhbmRsaW5nIG9mIGVycm9ycy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODU4NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIyOjQ2OjE4LjI4OTA3NTU0NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvaW9tYXAvZGlyZWN0LWlvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjQ0LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjQ0OlxcdHN0YXRpYyBpbnQgaW9tYXBfZGlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG4gNjQ1OlxcdHtcXG4gNjQ2OlxcdFxcdHN3aXRjaCAoaXRlci1cXHUwMDNlaW9tYXAudHlwZSkge1xcbiA2NDc6XFx0XFx0Y2FzZSBJT01BUF9IT0xFOlxcbiA2NDg6XFx0XFx0XFx0aWYgKFdBUk5fT05fT05DRShkaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9NQVBfRElPX1dSSVRFKSlcXG4gNjQ5OlxcdFxcdFxcdFxcdHJldHVybiAtRUlPO1xcbiA2NTA6XFx0XFx0XFx0cmV0dXJuIGlvbWFwX2Rpb19ob2xlX2l0ZXIoaXRlciwgZGlvKTtcXG4gNjUxOlxcdFxcdGNhc2UgSU9NQVBfVU5XUklUVEVOOlxcbiA2NTI6XFx0XFx0XFx0aWYgKCEoZGlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPTUFQX0RJT19XUklURSkpXFxuIDY1MzpcXHRcXHRcXHRcXHRyZXR1cm4gaW9tYXBfZGlvX2hvbGVfaXRlcihpdGVyLCBkaW8pO1xcbiA2NTQ6XFx0XFx0XFx0cmV0dXJuIGlvbWFwX2Rpb19iaW9faXRlcihpdGVyLCBkaW8pO1xcbiA2NTU6XFx0XFx0Y2FzZSBJT01BUF9NQVBQRUQ6XFxuIDY1NjpcXHRcXHRcXHRyZXR1cm4gaW9tYXBfZGlvX2Jpb19pdGVyKGl0ZXIsIGRpbyk7XFxuIDY1NzpcXHRcXHRjYXNlIElPTUFQX0lOTElORTpcXG4gNjU4OlxcdFxcdFxcdHJldHVybiBpb21hcF9kaW9faW5saW5lX2l0ZXIoaXRlciwgZGlvKTtcXG4gNjU5OlxcdFxcdGNhc2UgSU9NQVBfREVMQUxMT0M6XFxuIDY2MDpcXHRcXHRcXHQvKlxcbiA2NjE6XFx0XFx0XFx0ICogRElPIGlzIG5vdCBzZXJpYWxpc2VkIGFnYWluc3QgbW1hcCgpIGFjY2VzcyBhdCBhbGwsIGFuZCBzb1xcbiA2NjI6XFx0XFx0XFx0ICogaWYgdGhlIHBhZ2VfbWt3cml0ZSBvY2N1cnMgYmV0d2VlbiB0aGUgd3JpdGViYWNrIGFuZCB0aGVcXG4gNjYzOlxcdFxcdFxcdCAqIGlvbWFwX2l0ZXIoKSBjYWxsIGluIHRoZSBESU8gcGF0aCwgdGhlbiBpdCB3aWxsIHNlZSB0aGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjI6NDY6MTguMjg5MTg2NjQ2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MjcyMDg4MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJT01BUCBIb2xlIEl0ZXJhdGlvbiBGaXgqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBpb21hcF9kaW9faG9sZV9pdGVyYCBpcyBzcGVjaWZpY2FsbHkgdXNlZCBmb3IgaGFuZGxpbmcgYElPTUFQX0hPTEVgIGFuZCBgSU9NQVBfVU5XUklUVEVOYCBzY2VuYXJpb3MsIHdoaWNoLCBhcyBJIHVuZGVyc3RhbmQsIGFyZSBib3RoIHJlYWQtb25seSBvcGVyYXRpb25zIGRlYWxpbmcgd2l0aCBlaXRoZXIgYWN0dWFsIGhvbGVzIGluIHRoZSBmaWxlIG9yIGFyZWFzIHRoYXQgaGF2ZW4ndCBiZWVuIHdyaXR0ZW4gdG8geWV0LiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGFkZHJlc3MgYSBwb3RlbnRpYWwgbWlzYWxpZ25tZW50IGlzc3VlIHJlbGF0ZWQgdG8gYGlvdl9pdGVyX3plcm9gLiBBcHBhcmVudGx5LCB0aGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb24sIHdoZW4gY29weWluZyB6ZXJvZWQgZGF0YSwgd2FzIHBhZ2UtYWxpZ25lZCBidXQgKm5vdCogbmVjZXNzYXJpbHkgYWxpZ25lZCB0byB0aGUgZmlsZXN5c3RlbSdzIGJsb2NrIHNpemUsIHdoaWNoIGNvdWxkIGxlYWQgdG8gaW5lZmZpY2llbmNpZXMgb3IgZXZlbiBpbmNvcnJlY3QgYmVoYXZpb3IgaW4gc29tZSBjb250ZXh0cy4gVGhlIGZpeCBpcyBhIHJldmVyc2lvbiB0byBlbnN1cmUgYmxvY2stc2l6ZSBhbGlnbm1lbnQsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgZnJvbSBhIGZ1bmN0aW9uYWwgcGVyc3BlY3RpdmUuXG5cbkZyb20gYW4gaW1wbGVtZW50YXRpb24gcGVyc3BlY3RpdmUsIHNldHRpbmcgdXAgRVhUNF9GUyBvciBYRlNfRlMgb3IgQlRSRlNfRlMgd2lsbCBlbmFibGUgRlNfSU9NQVAuXG5cbkkgd2FudCB0byBkaXZlIGRlZXBlciBpbnRvIHRoaXMsIHBhcnRpY3VsYXJseSB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4ga2V5IGZ1bmN0aW9ucy4gSSdsbCBuZWVkIHRvIGZvY3VzIG9uOiBgX19pb21hcF9kaW9fcndgLCBgaW9tYXBfZGlvX3J3YCwgYW5kIGBfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZWAuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZWAgcHJvcGVybHkgaW52b2tlcyBgaW9tYXBfZGlvX2l0ZXJgLiBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGUgb3BlcmF0aW9uIHdpbGwgYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxODgsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMjo0NjoyMy4yMTYzOTc0MloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2NDQxNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19pb21hcF9kaW9fcmVhZF9zaW1wbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaW9tYXAvZGlyZWN0LWlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW9tYXAvZGlyZWN0LWlvLmM9OTgwPXN0YXRpYyB2b2lkIGlvbWFwX2Rpb19zaW1wbGVfZW5kX2lvKHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk5Ny1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5OTg6c3NpemVfdCBfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05OTktXFx0XFx0c3RydWN0IGlvbWFwX2l0ZXIgKmlvbWkpXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDgzLX1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMDg0OkVYUE9SVF9TWU1CT0xfR1BMKF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDg1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMjo0NjoyMy4yNjMwNDQxMTdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE4MDY2Nzg5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MgYXMgSSBhcHByb2FjaCByZWFkaW5nIHRoaXMgZnVuY3Rpb24sIGBfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZWA6XG5cbioqQW5hbHl6aW5nIGBfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZWAqKlxuXG5BbHJpZ2h0LCB0aGUgbmFtZSBpdHNlbGYgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBgX19pb21hcF9kaW9fcmVhZF9zaW1wbGVgLiBUaGUgZG91YmxlIHVuZGVyc2NvcmUgc3VnZ2VzdHMgaXQncyBsaWtlbHkgYW4gaW50ZXJuYWwgb3IgaGVscGVyIGZ1bmN0aW9uLCBub3QgZGlyZWN0bHkgZXhwb3NlZCB0byB1c2Vycy4gXCJJT01BUFwiIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIHJlbGF0ZWQgdG8gSS9PIG1hcHBpbmcsIHdoaWNoIHR5cGljYWxseSBtZWFucyBpdCdzIGRlYWxpbmcgd2l0aCBzb21lIGZvcm0gb2YgZGlyZWN0IEkvTy4gVGhlIFwiRElPXCIgcmVpbmZvcmNlcyB0aGF0OiBEaXJlY3QgSS9PLiBBbmQgXCJyZWFkX3NpbXBsZVwiIGltcGxpZXMgdGhpcyBpcyBhIGNvcmUgcmVhZCBmdW5jdGlvbi4gUGVyaGFwcyBpdCBoYW5kbGVzIHRoZSBtb3N0IGJhc2ljLCBzdHJlYW1saW5lZCByZWFkIG9wZXJhdGlvbnMuIFRoZSBzaW1wbGljaXR5IGlzIGludHJpZ3Vpbmc7IGl0IHByb2JhYmx5IG1lYW5zIGxlc3MgZXJyb3IgaGFuZGxpbmcgb3Igc29tZSBhc3N1bWVkIGNvbmRpdGlvbnMgYXJlIGluIHBsYWNlLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBwYXJ0IG9mIHRoZSBkaXJlY3QgSS9PIHBhdGguXG5cbkknbSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIGxvdy1sZXZlbCBmdW5jdGlvbiB0aGF0IGRlYWxzIHdpdGggdHJhbnNmZXJyaW5nIGRhdGEgZGlyZWN0bHkgZnJvbSBzdG9yYWdlIHRvIG1lbW9yeSwgbGlrZWx5IGJ5cGFzc2luZyB0aGUgcGFnZSBjYWNoZSBmb3Igb3B0aW1pemVkIHBlcmZvcm1hbmNlLCBhbmQgdGFraW5nIGFkdmFudGFnZSBvZiB3aGF0ZXZlciB0aGUgSU9NQVAgbGF5ZXIgaXMgZG9pbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIG90aGVyIGxheWVycy4gRG9lcyBpdCBkaXJlY3RseSBoYW5kbGUgdGhlIGJpbyBzdHJ1Y3R1cmU/IERvZXMgaXQgaW50ZXJhY3Qgd2l0aCBibG9jayBkZXZpY2VzPyBEb2VzIGl0IHVzZSB0aGUgZGV2aWNlIG1hcHBlcj8gT3IgaXMgaXQgbW9yZSBvZiBhIGhlbHBlciBpbiB0aGUgcHJvY2Vzcz8gSSdsbCBwcm9iYWJseSBiZSBsb29raW5nIGZvciBob3cgaXQgaGFuZGxlcyBidWZmZXIgYWxsb2NhdGlvbiwgYWRkcmVzc2luZywgYW5kIGVycm9yIGNoZWNraW5nLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IHVzZXMsIHBhcnRpY3VsYXJseSBpZiBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIGJsb2NrIGxheWVyLiBMZXQncyBzZWUgaG93IGl0IGhhbmRsZXMgdGhlIGRpZmZlcmVudCBwb3NzaWJsZSBzY2VuYXJpb3MuIEknbSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgbG93ZXIgbGF5ZXJzIGFuZCBoYW5kbGUgdGhvc2UgZWRnZSBjYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTk5MCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIyOjQ2OjI3LjQ0MzcxNDcyNFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9pb21hcC9kaXJlY3QtaW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5OTgsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5OTg6XFx0c3NpemVfdCBfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4gOTk5OlxcdFxcdFxcdHN0cnVjdCBpb21hcF9pdGVyICppb21pKVxcbjEwMDA6XFx0e1xcbjEwMDE6XFx0XFx0Z2ZwX3QgZ2ZwID0gKGlvbWktXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9NQVBfTk9XQUlUKSA/IEdGUF9OT1dBSVQgOiBHRlBfS0VSTkVMO1xcbjEwMDI6XFx0XFx0c3RydWN0IGlvbWFwX2Rpb19zaW1wbGUgKnNyO1xcbjEwMDM6XFx0XFx0dW5zaWduZWQgaW50IGFsaWdubWVudDtcXG4xMDA0OlxcdFxcdHN0cnVjdCBiaW8gKmJpbztcXG4xMDA1OlxcdFxcdHNzaXplX3QgcmV0O1xcbjEwMDY6XFx0XFxuMTAwNzpcXHRcXHRpZiAoaW9taS1cXHUwMDNlaW9tYXAudHlwZSAhPSBJT01BUF9NQVBQRUQgfHxcXG4xMDA4OlxcdFxcdCAgICBpb21pLVxcdTAwM2Vpb21hcC5vZmZzZXQgKyBpb21pLVxcdTAwM2Vpb21hcC5sZW5ndGggXFx1MDAzYyBpb21pLVxcdTAwM2Vwb3MgKyBpb21pLVxcdTAwM2VsZW4gfHxcXG4xMDA5OlxcdFxcdCAgICAoaW9taS1cXHUwMDNlaW9tYXAuZmxhZ3MgXFx1MDAyNiBJT01BUF9GX0lOVEVHUklUWSkpIHtcXG4xMDEwOlxcdFxcdFxcdHJldCA9IC1FTk9UQkxLO1xcbjEwMTE6XFx0XFx0XFx0Z290byBvdXRfZGlvX2VuZDtcXG4xMDEyOlxcdFxcdH1cXG4xMDEzOlxcdFxcbjEwMTQ6XFx0XFx0YWxpZ25tZW50ID0gaW9tYXBfZGlvX2FsaWdubWVudChpb21pLVxcdTAwM2Vpbm9kZSwgaW9taS1cXHUwMDNlaW9tYXAuYmRldiwgMCk7XFxuMTAxNTpcXHRcXHRpZiAoKGlvbWktXFx1MDAzZXBvcyB8IGlvbWktXFx1MDAzZWxlbikgXFx1MDAyNiAoYWxpZ25tZW50IC0gMSkpIHtcXG4xMDE2OlxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuMTAxNzpcXHRcXHRcXHRnb3RvIG91dF9kaW9fZW5kO1xcbjEwMTg6XFx0XFx0fVxcbjEwMTk6XFx0XFxuMTAyMDpcXHRcXHRpZiAodW5saWtlbHkoIWlvbWktXFx1MDAzZWlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Rpb19kb25lX3dxIFxcdTAwMjZcXHUwMDI2XFxuMTAyMTpcXHRcXHRcXHRcXHQhaXNfc3luY19raW9jYihpb2NiKSkpIHtcXG4xMDIyOlxcdFxcdFxcdHJldCA9IHNiX2luaXRfZGlvX2RvbmVfd3EoaW9taS1cXHUwMDNlaW5vZGUtXFx1MDAzZWlfc2IpO1xcbjEwMjM6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTAyNDpcXHRcXHRcXHRcXHRnb3RvIG91dF9kaW9fZW5kO1xcbjEwMjU6XFx0XFx0fVxcbjEwMjY6XFx0XFxuMTAyNzpcXHRcXHR0cmFjZV9pb21hcF9kaW9fcndfYmVnaW4oaW9jYiwgaXRlciwgMCwgMCk7XFxuMTAyODpcXHRcXG4xMDI5OlxcdFxcdGJpbyA9IGJpb19hbGxvY19iaW9zZXQoaW9taS1cXHUwMDNlaW9tYXAuYmRldixcXG4xMDMwOlxcdFxcdFxcdFxcdCAgICAgICBiaW9faW92X3ZlY3NfdG9fYWxsb2MoaXRlciwgQklPX01BWF9WRUNTKSxcXG4xMDMxOlxcdFxcdFxcdFxcdCAgICAgICBSRVFfT1BfUkVBRCwgZ2ZwLCBcXHUwMDI2aW9tYXBfZGlvX3NpbXBsZV9wb29sKTtcXG4xMDMyOlxcdFxcdGlmICghYmlvKSB7XFxuMTAzMzpcXHRcXHRcXHRyZXQgPSAtRUFHQUlOO1xcbjEwMzQ6XFx0XFx0XFx0Z290byBvdXRfZGlvX2VuZDtcXG4xMDM1OlxcdFxcdH1cXG4xMDM2OlxcdFxcdHNyID0gY29udGFpbmVyX29mKGJpbywgc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUsIGJpbyk7XFxuMTAzNzpcXHRcXHRzci1cXHUwMDNlaW9jYiA9IGlvY2I7XFxuMTAzODpcXHRcXHRzci1cXHUwMDNlZGlvX2ZsYWdzID0gMDtcXG4xMDM5OlxcdFxcbjEwNDA6XFx0XFx0YmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IGlvbWFwX3NlY3RvcihcXHUwMDI2aW9taS1cXHUwMDNlaW9tYXAsIGlvbWktXFx1MDAzZXBvcyk7XFxuMTA0MTpcXHRcXHRiaW8tXFx1MDAzZWJpX2lvcHJpbyA9IGlvY2ItXFx1MDAzZWtpX2lvcHJpbztcXG4xMDQyOlxcdFxcbjEwNDM6XFx0XFx0cmV0ID0gYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhiaW8sIGl0ZXIsIGFsaWdubWVudCAtIDEpO1xcbjEwNDQ6XFx0XFx0aWYgKHVubGlrZWx5KHJldCkpXFxuMTA0NTpcXHRcXHRcXHRnb3RvIG91dF9iaW9fcHV0O1xcbjEwNDY6XFx0XFxuMTA0NzpcXHRcXHRpZiAoYmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NpemUgIT0gaW9taS1cXHUwMDNlbGVuKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIyOjQ2OjI3LjQ0MzgxMzA2NFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDIyODQ1MDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IExpbmUgb2YgSW5xdWlyeSoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBteSBpbml0aWFsIGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRoZSBgX19pb21hcF9kaW9fcmVhZF9zaW1wbGVgIGZ1bmN0aW9uLiBJdCBzZWVtcyBpdCdzIG9ubHkgZGVzaWduZWQgdG8gaGFuZGxlIHRoZSBgSU9NQVBfTUFQUEVEYCBjYXNlLiBJZiBpdCBlbmNvdW50ZXJzIGFueXRoaW5nIGVsc2UsIGxpa2UgYSBob2xlLCBpdCdzIGltbWVkaWF0ZWx5IHJldHVybmluZyBgLUVOT1RCTEtgLiBUaGlzIHN1Z2dlc3RzIGl0ICpkb2Vzbid0KiBjYWxsIGBpb21hcF9kaW9faG9sZV9pdGVyYCwgd2hpY2ggaXMgZ29vZCB0byBrbm93LCBhbmQgc2ltcGxpZmllcyB0aGluZ3MgYSBiaXQgaW4gdGhpcyBwYXJ0aWN1bGFyIHBhdGguXG5cblRoZXJlZm9yZSwgdGhlIGZ1bmN0aW9ucyBJIG5lZWQgdG8gcmVhbGx5IGRpdmUgaW50byBhcmUgYF9faW9tYXBfZGlvX3J3YCBhbmQgYGlvbWFwX2Rpb19yd2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aG9zZSBhcmUgc3RydWN0dXJlZCBhbmQgdXNlZC5cblxuQWxyaWdodCwgYSBxdWljayBjaGVja+KApiB5ZXAsIGBpb21hcF9kaW9fcndgICppcyogZXhwb3J0ZWQsIGFzIGNvbmZpcm1lZCBieSBgRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfZGlvX3J3KWAuIE5vdywgSSBzaG91bGQgbWFrZSBzdXJlIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGV4cG9ydGVkIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIGNhbGxpbmcgYGlvbWFwX2Rpb19pdGVyYC4gSXQncyBhIGtleSBmdW5jdGlvbiBmb3IgbXkgdXNlLWNhc2UsIHNvIGZpbmRpbmcgYWxsIGNhbGwgcGF0aHMgaXMgZXNzZW50aWFsIHRvIG15IHVuZGVyc3RhbmRpbmcgYW5kIGRlYnVnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzMjQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMjo0NjozMi40NjY2NjA0MTFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNDYzODg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvbWFwX2Rpb19pdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2lvbWFwL2RpcmVjdC1pby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2lvbWFwL2RpcmVjdC1pby5jPTYxMj1zdGF0aWMgaW50IGlvbWFwX2Rpb19pbmxpbmVfaXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaW9taSwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjQzLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjY0NDpzdGF0aWMgaW50IGlvbWFwX2Rpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjQ1LXtcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTY5Nj1fX2lvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTgyMS1cXHR3aGlsZSAoKHJldCA9IGlvbWFwX2l0ZXIoXFx1MDAyNmlvbWksIG9wcykpIFxcdTAwM2UgMCkge1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjgyMjpcXHRcXHRpb21pLnN0YXR1cyA9IGlvbWFwX2Rpb19pdGVyKFxcdTAwMjZpb21pLCBkaW8pO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTgyMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjI6NDY6MzIuNTEwMTI3MTU3WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk2ODM0NjM5NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBpb21hcF9kaW9faG9sZV9pdGVyYCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgY2FuIHRlbGwsIG9ubHkgYF9faW9tYXBfZGlvX3J3YCBjYWxscyBgaW9tYXBfZGlvX2l0ZXJgLCBtYWtpbmcgdGhvc2UgdGhlIGtleSBmdW5jdGlvbnMgdG8gd2F0Y2guIFNvLCBgX19pb21hcF9kaW9fcndgIGFuZCBgaW9tYXBfZGlvX3J3YCBhcmUgdGhlIGRpcmVjdCBlbnRyeSBwb2ludHMuIEkgc2hvdWxkIGZvY3VzIG9uIHRob3NlLlxuXG5Ob3csIGxldCdzIGdldCB0aGUgY29uZmlndXJhdGlvbnMgc3RyYWlnaHQuIGBDT05GSUdfRlNfSU9NQVBgIGlzIHNlbGVjdGVkIGJ5IGEgcmFuZ2Ugb2YgZmlsZXN5c3RlbXMgaW5jbHVkaW5nIGBFWFQ0X0ZTYCwgYFhGU19GU2AsIGFuZCBgQlRSRlNfRlNgLCBhbW9uZyBvdGhlcnMuIFNpbmNlIEkgd2FudCB0byBtYWtlIHRoZSBmdXp6aW5nIGVmZmVjdGl2ZSwgSSBzaG91bGQganVzdCBzcGVjaWZ5IGBFWFQ0X0ZTYCwgYFhGU19GU2AsIGFuZCBgQlRSRlNfRlNgLiBUaGlzIGxvb2tzIGxpa2UgdGhlIG1vc3Qgc3RyYWlnaHRmb3J3YXJkIGFwcHJvYWNoLlxuXG5MZXQncyBkaXZlIGludG8gdGhhdCBgaW9tYXBfZGlvX2hvbGVfaXRlcmAgY29kZSBhZ2Fpbi5cbmBgYGNcbnN0YXRpYyBpbnQgaW9tYXBfZGlvX2hvbGVfaXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxue1xuXHRsb2ZmX3QgY29waWVkID0gaW92X2l0ZXJfemVybyhpb21hcF9sZW5ndGgoaXRlciksIGRpby1cdTAwM2VzdWJtaXQuaXRlcik7XG5cdHVuc2lnbmVkIGludCBicyA9IGlfYmxvY2tzaXplKGl0ZXItXHUwMDNlaW5vZGUpO1xuXHRsb2ZmX3QgYWxpZ25lZF9jb3BpZWQgPSByb3VuZF9kb3duKGNvcGllZCwgYnMpO1xuXG5cdC8qXG5cdCAqIElmIGZzIGJsb2NrIHNpemUgaXMgbGFyZ2VyIHRoYW4gcGFnZSBzaXplLCBwYWdlIGZhdWx0IGZhaWx1cmVcblx0ICogY2FuIGNhdXNlIEBjb3BpZWQgdG8gYmUgcGFnZSBhbGlnbmVkIGJ1dCBub3QgZnMgYmxvY2sgYWxpZ25lZC5cblx0ICovXG5cdGlvdl9pdGVyX3JldmVydChkaW8tXHUwMDNlc3VibWl0Lml0ZXIsIGNvcGllZCAtIGFsaWduZWRfY29waWVkKTtcblx0ZGlvLVx1MDAzZXNpemUgKz0gYWxpZ25lZF9jb3BpZWQ7XG5cdGlmICghYWxpZ25lZF9jb3BpZWQpXG5cdFx0cmV0dXJuIC1FRkFVTFQ7XG5cdHJldHVybiBpb21hcF9pdGVyX2FkdmFuY2UoaXRlciwgYWxpZ25lZF9jb3BpZWQpO1xufVxuYGBgXG5ZZXMsIHRoaXMgY29kZSBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgY2xvc2VyIGxvb2ssIGVzcGVjaWFsbHkgZm9yIGZ1enppbmcuIFRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGhvdyB3ZSBoYW5kbGUgXCJob2xlc1wiIG9yIHVud3JpdHRlbiBleHRlbnRzIGluIGRpcmVjdCBJL08uIFRoZSBnb2FsIGlzIHRvIGVuc3VyZSB0aGUgY29waWVkIGxlbmd0aCBpcyBhbGlnbmVkIHRvIHRoZSBmaWxlc3lzdGVtIGJsb2NrIHNpemUgYWZ0ZXIgcG9zc2libGUgcGFnZSBmYXVsdCBmYWlsdXJlcy4gSXQgbG9va3MgbGlrZSBpdCBhZGRyZXNzZXMgYSBjcml0aWNhbCBpc3N1ZSB0aGF0IGNvdWxkIGxlYWQgdG8gbWlzYWxpZ25tZW50IGJldHdlZW4gcGFnZSBhbmQgYmxvY2sgc2l6ZXMsIHdoaWNoIHdvdWxkIGNhdXNlIGFuIGVycm9yLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZGVlcCB3aXRoaW4gdGhlIGNvcmUgaW9tYXAgZGlyZWN0IEkvTyBwYXRoLlxuXG5NeSBmb2N1cyBzaG91bGQgYmUgb24gZnV6emluZyB0aGUgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgIHNwZWNpZmljYWxseS4gSSB0aGluayBJJ3ZlIGdvdCBhIGdvb2QgaGFuZGxlIG9uIHdoZXJlIHRvIHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA0MywiT3V0cHV0VG9rZW5zIjoxNTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjI6NDY6NDIuMTkzNTkzODQ2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU5ODcxODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIixcbiAgICBcIlhGU19GU1wiLFxuICAgIFwiQlRSRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2lvbWFwX2Rpb19yd1wiLFxuICAgIFwiaW9tYXBfZGlvX3J3XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJlaGF2aW9yIG9mIGBpb21hcF9kaW9faG9sZV9pdGVyYCB0byBjb3JyZWN0bHkgYWxpZ24gdGhlIGNvcGllZCBsZW5ndGggdG8gdGhlIGZpbGVzeXN0ZW0gYmxvY2sgc2l6ZSB3aGVuIHJlYWRpbmcgZnJvbSBhIGhvbGUgb3IgdW53cml0dGVuIGV4dGVudCB1c2luZyBkaXJlY3QgSS9PLiBUaGlzIHByZXZlbnRzIGlzc3VlcyB3aGVyZSBwYWdlIGZhdWx0IGZhaWx1cmVzIGNvdWxkIHJlc3VsdCBpbiBsZW5ndGhzIHRoYXQgYXJlIHBhZ2UtYWxpZ25lZCBidXQgbm90IGJsb2NrLWFsaWduZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBpb21hcCBkaXJlY3QgSS9PIHBhdGguXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiLFxuICAgIFwiWEZTX0ZTXCIsXG4gICAgXCJCVFJGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9faW9tYXBfZGlvX3J3XCIsXG4gICAgXCJpb21hcF9kaW9fcndcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgIHRvIGNvcnJlY3RseSBhbGlnbiB0aGUgY29waWVkIGxlbmd0aCB0byB0aGUgZmlsZXN5c3RlbSBibG9jayBzaXplIHdoZW4gcmVhZGluZyBmcm9tIGEgaG9sZSBvciB1bndyaXR0ZW4gZXh0ZW50IHVzaW5nIGRpcmVjdCBJL08uIFRoaXMgcHJldmVudHMgaXNzdWVzIHdoZXJlIHBhZ2UgZmF1bHQgZmFpbHVyZXMgY291bGQgcmVzdWx0IGluIGxlbmd0aHMgdGhhdCBhcmUgcGFnZS1hbGlnbmVkIGJ1dCBub3QgYmxvY2stYWxpZ25lZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGlvbWFwIGRpcmVjdCBJL08gcGF0aC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9f9tg[1] Phase: Succeeded StartedAt: 2026-08-04 22:46:53 +0000 UTC FinishedAt: 2026-08-04 22:46:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9f9tg[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-04 22:46:53 +0000 UTC FinishedAt: 2026-08-04 22:46:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9f9tg[2] Phase: Succeeded StartedAt: 2026-08-04 22:46:53 +0000 UTC FinishedAt: 2026-08-05 02:35:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9f9tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"a9bada05-945c-42a8-b7e0-1c0619574dbe","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN) Phase: Succeeded StartedAt: 2026-08-04 22:46:53 +0000 UTC FinishedAt: 2026-08-05 02:35:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"a9bada05-945c-42a8-b7e0-1c0619574dbe","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow9f9tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"a9bada05-945c-42a8-b7e0-1c0619574dbe","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-04 22:46:53 +0000 UTC FinishedAt: 2026-08-04 22:47:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9f9tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"a9bada05-945c-42a8-b7e0-1c0619574dbe","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-04 22:46:53 +0000 UTC FinishedAt: 2026-08-04 22:46:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9f9tg/series-workflow9f9tg-convert-artifact-2783384814/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9f9tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"a9bada05-945c-42a8-b7e0-1c0619574dbe","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-04 22:47:03 +0000 UTC FinishedAt: 2026-08-04 23:03:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9f9tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"a9bada05-945c-42a8-b7e0-1c0619574dbe","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-04 22:47:03 +0000 UTC FinishedAt: 2026-08-04 23:03:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*06d4220b-619a-40e0-abcb-c7faba7633ad,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9f9tg/series-workflow9f9tg-convert-artifact-2783384814/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "32d0bd43-fa46-4bd9-bee1-a53a87e813ef", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9f9tg/series-workflow9f9tg-build-action-640113748/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9f9tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"a9bada05-945c-42a8-b7e0-1c0619574dbe","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-04 22:47:03 +0000 UTC FinishedAt: 2026-08-04 23:02:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*06d4220b-619a-40e0-abcb-c7faba7633ad,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9f9tg/series-workflow9f9tg-convert-artifact-2783384814/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "32d0bd43-fa46-4bd9-bee1-a53a87e813ef", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9f9tg/series-workflow9f9tg-build-action-640113748/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9f9tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"a9bada05-945c-42a8-b7e0-1c0619574dbe","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-04 23:03:08 +0000 UTC FinishedAt: 2026-08-04 23:03:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9f9tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"a9bada05-945c-42a8-b7e0-1c0619574dbe","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-04 23:03:08 +0000 UTC FinishedAt: 2026-08-04 23:03:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9f9tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"a9bada05-945c-42a8-b7e0-1c0619574dbe","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-04 23:03:08 +0000 UTC FinishedAt: 2026-08-04 23:03:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9f9tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"a9bada05-945c-42a8-b7e0-1c0619574dbe","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-04 23:03:08 +0000 UTC FinishedAt: 2026-08-04 23:03:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"a9bada05-945c-42a8-b7e0-1c0619574dbe","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9f9tg/series-workflow9f9tg-convert-artifact-2513674465/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9f9tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"a9bada05-945c-42a8-b7e0-1c0619574dbe","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-04 23:03:18 +0000 UTC FinishedAt: 2026-08-04 23:05:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9f9tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"a9bada05-945c-42a8-b7e0-1c0619574dbe","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-04 23:03:18 +0000 UTC FinishedAt: 2026-08-04 23:05:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*32d0bd43-fa46-4bd9-bee1-a53a87e813ef,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9f9tg/series-workflow9f9tg-build-action-640113748/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9f9tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"a9bada05-945c-42a8-b7e0-1c0619574dbe","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-04 23:05:15 +0000 UTC FinishedAt: 2026-08-04 23:05:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9f9tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"a9bada05-945c-42a8-b7e0-1c0619574dbe","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-04 23:05:15 +0000 UTC FinishedAt: 2026-08-04 23:05:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9f9tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"a9bada05-945c-42a8-b7e0-1c0619574dbe","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-04 23:05:15 +0000 UTC FinishedAt: 2026-08-04 23:22:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9f9tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"a9bada05-945c-42a8-b7e0-1c0619574dbe","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-04 23:05:15 +0000 UTC FinishedAt: 2026-08-04 23:22:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*06d4220b-619a-40e0-abcb-c7faba7633ad,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9f9tg/series-workflow9f9tg-convert-artifact-2513674465/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "297b9fdf-d714-43d3-9923-3312c0dcec8b", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9f9tg/series-workflow9f9tg-build-action-3064668653/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9f9tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"a9bada05-945c-42a8-b7e0-1c0619574dbe","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-04 23:05:15 +0000 UTC FinishedAt: 2026-08-04 23:22:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*06d4220b-619a-40e0-abcb-c7faba7633ad,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9f9tg/series-workflow9f9tg-convert-artifact-2513674465/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "297b9fdf-d714-43d3-9923-3312c0dcec8b", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9f9tg/series-workflow9f9tg-build-action-3064668653/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9f9tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"a9bada05-945c-42a8-b7e0-1c0619574dbe","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-04 23:22:15 +0000 UTC FinishedAt: 2026-08-04 23:22:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9f9tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"a9bada05-945c-42a8-b7e0-1c0619574dbe","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-04 23:22:15 +0000 UTC FinishedAt: 2026-08-04 23:22:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9f9tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"a9bada05-945c-42a8-b7e0-1c0619574dbe","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-04 23:22:15 +0000 UTC FinishedAt: 2026-08-04 23:24:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9f9tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"a9bada05-945c-42a8-b7e0-1c0619574dbe","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-04 23:22:15 +0000 UTC FinishedAt: 2026-08-04 23:24:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*297b9fdf-d714-43d3-9923-3312c0dcec8b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9f9tg/series-workflow9f9tg-build-action-3064668653/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9f9tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"a9bada05-945c-42a8-b7e0-1c0619574dbe","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-04 23:24:11 +0000 UTC FinishedAt: 2026-08-05 02:35:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9f9tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"a9bada05-945c-42a8-b7e0-1c0619574dbe","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-04 23:24:11 +0000 UTC FinishedAt: 2026-08-05 02:35:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*32d0bd43-fa46-4bd9-bee1-a53a87e813ef,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*297b9fdf-d714-43d3-9923-3312c0dcec8b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9f9tg/series-workflow9f9tg-build-action-640113748/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9f9tg/series-workflow9f9tg-build-action-3064668653/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow9f9tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"a9bada05-945c-42a8-b7e0-1c0619574dbe","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-04 23:24:11 +0000 UTC FinishedAt: 2026-08-04 23:24:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9f9tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"a9bada05-945c-42a8-b7e0-1c0619574dbe","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-04 23:24:11 +0000 UTC FinishedAt: 2026-08-04 23:24:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9f9tg/series-workflow9f9tg-convert-artifact-392244086/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9f9tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"a9bada05-945c-42a8-b7e0-1c0619574dbe","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[10].run-retest Phase: Succeeded StartedAt: 2026-08-04 23:24:11 +0000 UTC FinishedAt: 2026-08-04 23:55:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:retest-data,Default:nil,Value:*{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*32d0bd43-fa46-4bd9-bee1-a53a87e813ef,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*297b9fdf-d714-43d3-9923-3312c0dcec8b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9f9tg/series-workflow9f9tg-build-action-640113748/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9f9tg/series-workflow9f9tg-build-action-3064668653/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow9f9tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"a9bada05-945c-42a8-b7e0-1c0619574dbe","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[10].run-retest[0] Phase: Succeeded StartedAt: 2026-08-04 23:24:11 +0000 UTC FinishedAt: 2026-08-04 23:24:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9f9tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"a9bada05-945c-42a8-b7e0-1c0619574dbe","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[10].run-retest[0].save-retest-task Phase: Succeeded StartedAt: 2026-08-04 23:24:11 +0000 UTC FinishedAt: 2026-08-04 23:24:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9f9tg/series-workflow9f9tg-convert-artifact-2292159421/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9f9tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"a9bada05-945c-42a8-b7e0-1c0619574dbe","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-04 23:24:11 +0000 UTC FinishedAt: 2026-08-04 23:24:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9f9tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"a9bada05-945c-42a8-b7e0-1c0619574dbe","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-04 23:24:11 +0000 UTC FinishedAt: 2026-08-04 23:24:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9f9tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"a9bada05-945c-42a8-b7e0-1c0619574dbe","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-04 23:24:21 +0000 UTC FinishedAt: 2026-08-05 02:35:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9f9tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"a9bada05-945c-42a8-b7e0-1c0619574dbe","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-04 23:24:21 +0000 UTC FinishedAt: 2026-08-05 02:34:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*32d0bd43-fa46-4bd9-bee1-a53a87e813ef,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*297b9fdf-d714-43d3-9923-3312c0dcec8b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9f9tg/series-workflow9f9tg-build-action-640113748/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9f9tg/series-workflow9f9tg-build-action-3064668653/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9f9tg/series-workflow9f9tg-convert-artifact-392244086/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9f9tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"a9bada05-945c-42a8-b7e0-1c0619574dbe","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[10].run-retest[1] Phase: Succeeded StartedAt: 2026-08-04 23:24:21 +0000 UTC FinishedAt: 2026-08-04 23:55:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9f9tg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe6568ca989d7625447625db8562bebbe5be054a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"a9bada05-945c-42a8-b7e0-1c0619574dbe","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325","8ed3b1e3-7e4e-4c2c-b0f6-934cfea6e536"]},track:KASAN)[10].run-retest[1].retest Phase: Succeeded StartedAt: 2026-08-04 23:24:21 +0000 UTC FinishedAt: 2026-08-04 23:55:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*32d0bd43-fa46-4bd9-bee1-a53a87e813ef,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*297b9fdf-d714-43d3-9923-3312c0dcec8b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Previous reproducers,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9f9tg/series-workflow9f9tg-build-action-640113748/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9f9tg/series-workflow9f9tg-build-action-3064668653/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:retest-task,Path:/data/retest.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9f9tg/series-workflow9f9tg-convert-artifact-2292159421/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}