ZGlmZiAtLWdpdCBhL2FwZXgvQW5kcm9pZC5icCBiL2FwZXgvQW5kcm9pZC5icAppbmRleCBhOWZhZDU1Li5mYWRlNmM1IDEwMDY0NAotLS0gYS9hcGV4L0FuZHJvaWQuYnAKKysrIGIvYXBleC9BbmRyb2lkLmJwCkBAIC0xMDIsMTEgKzEwMiw3IEBACiAgICAgICAgICJzaWduX3ZpcnRfYXBleC5weSIsCiAgICAgXSwKICAgICB2ZXJzaW9uOiB7Ci0gICAgICAgIHB5MjogewotICAgICAgICAgICAgZW5hYmxlZDogZmFsc2UsCi0gICAgICAgIH0sCiAgICAgICAgIHB5MzogewotICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSwKICAgICAgICAgICAgIGVtYmVkZGVkX2xhdW5jaGVyOiB0cnVlLAogICAgICAgICB9LAogICAgIH0sCkBAIC0xNzAsMTEgKzE2Niw3IEBACiAgICAgICAgICJyZXBsYWNlX2J5dGVzLnB5IiwKICAgICBdLAogICAgIHZlcnNpb246IHsKLSAgICAgICAgcHkyOiB7Ci0gICAgICAgICAgICBlbmFibGVkOiBmYWxzZSwKLSAgICAgICAgfSwKICAgICAgICAgcHkzOiB7Ci0gICAgICAgICAgICBlbmFibGVkOiB0cnVlLAogICAgICAgICAgICAgZW1iZWRkZWRfbGF1bmNoZXI6IHRydWUsCiAgICAgICAgIH0sCiAgICAgfSwKZGlmZiAtLWdpdCBhL2F1dGhmcy9mZF9zZXJ2ZXIvc3JjL21haW4ucnMgYi9hdXRoZnMvZmRfc2VydmVyL3NyYy9tYWluLnJzCmluZGV4IDViN2E0ZjQuLjkzYTc4OGIgMTAwNjQ0Ci0tLSBhL2F1dGhmcy9mZF9zZXJ2ZXIvc3JjL21haW4ucnMKKysrIGIvYXV0aGZzL2ZkX3NlcnZlci9zcmMvbWFpbi5ycwpAQCAtMjYsMTIgKzI2LDEzIEBACiBtb2QgZnN2ZXJpdHk7CiAKIHVzZSBhbnlob3c6OntiYWlsLCBSZXN1bHR9OwordXNlIGNsYXA6OlBhcnNlcjsKIHVzZSBsb2c6OmRlYnVnOwogdXNlIG5peDo6c3lzOjpzdGF0Ojp7dW1hc2ssIE1vZGV9OwogdXNlIHJwY2JpbmRlcjo6cnVuX3JwY19zZXJ2ZXI7CiB1c2Ugc3RkOjpjb2xsZWN0aW9uczo6QlRyZWVNYXA7CiB1c2Ugc3RkOjpmczo6RmlsZTsKLXVzZSBzdGQ6Om9zOjp1bml4Ojppbzo6RnJvbVJhd0ZkOwordXNlIHN0ZDo6b3M6OnVuaXg6OmlvOjp7RnJvbVJhd0ZkLCBPd25lZEZkfTsKIAogdXNlIGFpZGw6OntGZENvbmZpZywgRmRTZXJ2aWNlfTsKIHVzZSBhdXRoZnNfZnN2ZXJpdHlfbWV0YWRhdGE6OnBhcnNlX2ZzdmVyaXR5X21ldGFkYXRhOwpAQCAtNzIsODYgKzczLDUyIEBACiAgICAgKSkKIH0KIAotZm4gcGFyc2VfYXJnX3J3X2Zkcyhhcmc6ICZzdHIpIC0+IFJlc3VsdDwoaTMyLCBGZENvbmZpZyk+IHsKLSAgICBsZXQgZmQgPSBhcmcucGFyc2U6OjxpMzI+KCk/OwotICAgIGxldCBmaWxlID0gZmRfdG9fb3duZWQ6OjxGaWxlPihmZCk/OwotICAgIGlmIGZpbGUubWV0YWRhdGEoKT8ubGVuKCkgPiAwIHsKLSAgICAgICAgYmFpbCEoIkZpbGUgaXMgZXhwZWN0ZWQgdG8gYmUgZW1wdHkiKTsKLSAgICB9Ci0gICAgT2soKGZkLCBGZENvbmZpZzo6UmVhZFdyaXRlKGZpbGUpKSkKLX0KLQotZm4gcGFyc2VfYXJnX3JvX2RpcnMoYXJnOiAmc3RyKSAtPiBSZXN1bHQ8KGkzMiwgRmRDb25maWcpPiB7Ci0gICAgbGV0IGZkID0gYXJnLnBhcnNlOjo8aTMyPigpPzsKLSAgICBPaygoZmQsIEZkQ29uZmlnOjpJbnB1dERpcihmZF90b19vd25lZChmZCk/KSkpCi19Ci0KLWZuIHBhcnNlX2FyZ19yd19kaXJzKGFyZzogJnN0cikgLT4gUmVzdWx0PChpMzIsIEZkQ29uZmlnKT4gewotICAgIGxldCBmZCA9IGFyZy5wYXJzZTo6PGkzMj4oKT87Ci0gICAgT2soKGZkLCBGZENvbmZpZzo6T3V0cHV0RGlyKGZkX3RvX293bmVkKGZkKT8pKSkKLX0KLQorI1tkZXJpdmUoUGFyc2VyKV0KIHN0cnVjdCBBcmdzIHsKLSAgICBmZF9wb29sOiBCVHJlZU1hcDxpMzIsIEZkQ29uZmlnPiwKLSAgICByZWFkeV9mZDogT3B0aW9uPEZpbGU+LAorICAgIC8vLyBSZWFkLW9ubHkgRkQgb2YgZmlsZSwgd2l0aCBvcHRpb25hbCBGRCBvZiBjb3JyZXNwb25kaW5nIC5mc3ZfbWV0YSwgam9pbmVkIHdpdGggYSAnOicuCisgICAgLy8vIEV4YW1wbGU6ICIxOjIiLCAiMyIuCisgICAgI1tjbGFwKGxvbmcpXQorICAgIHJvX2ZkczogVmVjPFN0cmluZz4sCisKKyAgICAvLy8gUmVhZC13cml0YWJsZSBGRCBvZiBmaWxlCisgICAgI1tjbGFwKGxvbmcpXQorICAgIHJ3X2ZkczogVmVjPGkzMj4sCisKKyAgICAvLy8gUmVhZC1vbmx5IEZEIG9mIGRpcmVjdG9yeQorICAgICNbY2xhcChsb25nKV0KKyAgICByb19kaXJzOiBWZWM8aTMyPiwKKworICAgIC8vLyBSZWFkLXdyaXRhYmxlIEZEIG9mIGRpcmVjdG9yeQorICAgICNbY2xhcChsb25nKV0KKyAgICByd19kaXJzOiBWZWM8aTMyPiwKKworICAgIC8vLyBBIHBpcGUgRkQgZm9yIHNpZ25hbGluZyB0aGUgb3RoZXIgZW5kIG9uY2UgcmVhZHkKKyAgICAjW2NsYXAobG9uZyldCisgICAgcmVhZHlfZmQ6IE9wdGlvbjxpMzI+LAogfQogCi1mbiBwYXJzZV9hcmdzKCkgLT4gUmVzdWx0PEFyZ3M+IHsKLSAgICAjW3J1c3RmbXQ6OnNraXBdCi0gICAgbGV0IG1hdGNoZXMgPSBjbGFwOjpBcHA6Om5ldygiZmRfc2VydmVyIikKLSAgICAgICAgLmFyZyhjbGFwOjpBcmc6OndpdGhfbmFtZSgicm8tZmRzIikKLSAgICAgICAgICAgICAubG9uZygicm8tZmRzIikKLSAgICAgICAgICAgICAubXVsdGlwbGUodHJ1ZSkKLSAgICAgICAgICAgICAubnVtYmVyX29mX3ZhbHVlcygxKSkKLSAgICAgICAgLmFyZyhjbGFwOjpBcmc6OndpdGhfbmFtZSgicnctZmRzIikKLSAgICAgICAgICAgICAubG9uZygicnctZmRzIikKLSAgICAgICAgICAgICAubXVsdGlwbGUodHJ1ZSkKLSAgICAgICAgICAgICAubnVtYmVyX29mX3ZhbHVlcygxKSkKLSAgICAgICAgLmFyZyhjbGFwOjpBcmc6OndpdGhfbmFtZSgicm8tZGlycyIpCi0gICAgICAgICAgICAgLmxvbmcoInJvLWRpcnMiKQotICAgICAgICAgICAgIC5tdWx0aXBsZSh0cnVlKQotICAgICAgICAgICAgIC5udW1iZXJfb2ZfdmFsdWVzKDEpKQotICAgICAgICAuYXJnKGNsYXA6OkFyZzo6d2l0aF9uYW1lKCJydy1kaXJzIikKLSAgICAgICAgICAgICAubG9uZygicnctZGlycyIpCi0gICAgICAgICAgICAgLm11bHRpcGxlKHRydWUpCi0gICAgICAgICAgICAgLm51bWJlcl9vZl92YWx1ZXMoMSkpCi0gICAgICAgIC5hcmcoY2xhcDo6QXJnOjp3aXRoX25hbWUoInJlYWR5LWZkIikKLSAgICAgICAgICAgIC5sb25nKCJyZWFkeS1mZCIpCi0gICAgICAgICAgICAudGFrZXNfdmFsdWUodHJ1ZSkpCi0gICAgICAgIC5nZXRfbWF0Y2hlcygpOwotCisvLy8gQ29udmVydCBhcmd1bWVudCBzdHJpbmdzIGFuZCBpbnRlZ2VycyB0byBhIGZvcm0gdGhhdCBpcyBlYXNpZXIgdG8gdXNlIGFuZCBoYW5kbGVzIG93bmVyc2hpcC4KK2ZuIGNvbnZlcnRfYXJncyhhcmdzOiBBcmdzKSAtPiBSZXN1bHQ8KEJUcmVlTWFwPGkzMiwgRmRDb25maWc+LCBPcHRpb248T3duZWRGZD4pPiB7CiAgICAgbGV0IG11dCBmZF9wb29sID0gQlRyZWVNYXA6Om5ldygpOwotICAgIGlmIGxldCBTb21lKGFyZ3MpID0gbWF0Y2hlcy52YWx1ZXNfb2YoInJvLWZkcyIpIHsKLSAgICAgICAgZm9yIGFyZyBpbiBhcmdzIHsKLSAgICAgICAgICAgIGxldCAoZmQsIGNvbmZpZykgPSBwYXJzZV9hcmdfcm9fZmRzKGFyZyk/OwotICAgICAgICAgICAgZmRfcG9vbC5pbnNlcnQoZmQsIGNvbmZpZyk7Ci0gICAgICAgIH0KKyAgICBmb3IgYXJnIGluIGFyZ3Mucm9fZmRzIHsKKyAgICAgICAgbGV0IChmZCwgY29uZmlnKSA9IHBhcnNlX2FyZ19yb19mZHMoJmFyZyk/OworICAgICAgICBmZF9wb29sLmluc2VydChmZCwgY29uZmlnKTsKICAgICB9Ci0gICAgaWYgbGV0IFNvbWUoYXJncykgPSBtYXRjaGVzLnZhbHVlc19vZigicnctZmRzIikgewotICAgICAgICBmb3IgYXJnIGluIGFyZ3MgewotICAgICAgICAgICAgbGV0IChmZCwgY29uZmlnKSA9IHBhcnNlX2FyZ19yd19mZHMoYXJnKT87Ci0gICAgICAgICAgICBmZF9wb29sLmluc2VydChmZCwgY29uZmlnKTsKKyAgICBmb3IgZmQgaW4gYXJncy5yd19mZHMgeworICAgICAgICBsZXQgZmlsZSA9IGZkX3RvX293bmVkOjo8RmlsZT4oZmQpPzsKKyAgICAgICAgaWYgZmlsZS5tZXRhZGF0YSgpPy5sZW4oKSA+IDAgeworICAgICAgICAgICAgYmFpbCEoIkZpbGUgaXMgZXhwZWN0ZWQgdG8gYmUgZW1wdHkiKTsKICAgICAgICAgfQorICAgICAgICBmZF9wb29sLmluc2VydChmZCwgRmRDb25maWc6OlJlYWRXcml0ZShmaWxlKSk7CiAgICAgfQotICAgIGlmIGxldCBTb21lKGFyZ3MpID0gbWF0Y2hlcy52YWx1ZXNfb2YoInJvLWRpcnMiKSB7Ci0gICAgICAgIGZvciBhcmcgaW4gYXJncyB7Ci0gICAgICAgICAgICBsZXQgKGZkLCBjb25maWcpID0gcGFyc2VfYXJnX3JvX2RpcnMoYXJnKT87Ci0gICAgICAgICAgICBmZF9wb29sLmluc2VydChmZCwgY29uZmlnKTsKLSAgICAgICAgfQorICAgIGZvciBmZCBpbiBhcmdzLnJvX2RpcnMgeworICAgICAgICBmZF9wb29sLmluc2VydChmZCwgRmRDb25maWc6OklucHV0RGlyKGZkX3RvX293bmVkKGZkKT8pKTsKICAgICB9Ci0gICAgaWYgbGV0IFNvbWUoYXJncykgPSBtYXRjaGVzLnZhbHVlc19vZigicnctZGlycyIpIHsKLSAgICAgICAgZm9yIGFyZyBpbiBhcmdzIHsKLSAgICAgICAgICAgIGxldCAoZmQsIGNvbmZpZykgPSBwYXJzZV9hcmdfcndfZGlycyhhcmcpPzsKLSAgICAgICAgICAgIGZkX3Bvb2wuaW5zZXJ0KGZkLCBjb25maWcpOwotICAgICAgICB9CisgICAgZm9yIGZkIGluIGFyZ3MucndfZGlycyB7CisgICAgICAgIGZkX3Bvb2wuaW5zZXJ0KGZkLCBGZENvbmZpZzo6T3V0cHV0RGlyKGZkX3RvX293bmVkKGZkKT8pKTsKICAgICB9Ci0gICAgbGV0IHJlYWR5X2ZkID0gaWYgbGV0IFNvbWUoYXJnKSA9IG1hdGNoZXMudmFsdWVfb2YoInJlYWR5LWZkIikgewotICAgICAgICBsZXQgZmQgPSBhcmcucGFyc2U6OjxpMzI+KCk/OwotICAgICAgICBTb21lKGZkX3RvX293bmVkKGZkKT8pCi0gICAgfSBlbHNlIHsKLSAgICAgICAgTm9uZQotICAgIH07Ci0gICAgT2soQXJncyB7IGZkX3Bvb2wsIHJlYWR5X2ZkIH0pCisgICAgbGV0IHJlYWR5X2ZkID0gYXJncy5yZWFkeV9mZC5tYXAoZmRfdG9fb3duZWQpLnRyYW5zcG9zZSgpPzsKKyAgICBPaygoZmRfcG9vbCwgcmVhZHlfZmQpKQogfQogCiBmbiBtYWluKCkgLT4gUmVzdWx0PCgpPiB7CkBAIC0xNTksNyArMTI2LDggQEAKICAgICAgICAgYW5kcm9pZF9sb2dnZXI6OkNvbmZpZzo6ZGVmYXVsdCgpLndpdGhfdGFnKCJmZF9zZXJ2ZXIiKS53aXRoX21pbl9sZXZlbChsb2c6OkxldmVsOjpEZWJ1ZyksCiAgICAgKTsKIAotICAgIGxldCBhcmdzID0gcGFyc2VfYXJncygpPzsKKyAgICBsZXQgYXJncyA9IEFyZ3M6OnBhcnNlKCk7CisgICAgbGV0IChmZF9wb29sLCBtdXQgcmVhZHlfZmQpID0gY29udmVydF9hcmdzKGFyZ3MpPzsKIAogICAgIC8vIEFsbG93IG9wZW4vY3JlYXRlL21rZGlyIGZyb20gYXV0aGZzIHRvIGNyZWF0ZSB3aXRoIGV4cGVjdGluZyBtb2RlLiBJdCdzIHBvc3NpYmxlIHRvIHN0aWxsCiAgICAgLy8gdXNlIGEgY3VzdG9tIG1hc2sgb24gY3JlYXRpb24sIHRoZW4gcmVwb3J0IHRoZSBhY3R1YWwgZmlsZSBtb2RlIGJhY2sgdG8gYXV0aGZzLiBCdXQgdGhlcmUKQEAgLTE2Nyw5ICsxMzUsOCBAQAogICAgIGxldCBvbGRfdW1hc2sgPSB1bWFzayhNb2RlOjplbXB0eSgpKTsKICAgICBkZWJ1ZyEoIlNldHRpbmcgdW1hc2sgdG8gMCAob2xkOiB7OjAzb30pIiwgb2xkX3VtYXNrLmJpdHMoKSk7CiAKLSAgICBsZXQgc2VydmljZSA9IEZkU2VydmljZTo6bmV3X2JpbmRlcihhcmdzLmZkX3Bvb2wpLmFzX2JpbmRlcigpOworICAgIGxldCBzZXJ2aWNlID0gRmRTZXJ2aWNlOjpuZXdfYmluZGVyKGZkX3Bvb2wpLmFzX2JpbmRlcigpOwogICAgIGRlYnVnISgiZmRfc2VydmVyIGlzIHN0YXJ0aW5nIGFzIGEgcnBjIHNlcnZpY2UuIik7Ci0gICAgbGV0IG11dCByZWFkeV9mZCA9IGFyZ3MucmVhZHlfZmQ7CiAgICAgbGV0IHJldHZhbCA9IHJ1bl9ycGNfc2VydmVyKHNlcnZpY2UsIFJQQ19TRVJWSUNFX1BPUlQsIHx8IHsKICAgICAgICAgZGVidWchKCJmZF9zZXJ2ZXIgaXMgcmVhZHkiKTsKICAgICAgICAgLy8gQ2xvc2UgdGhlIHJlYWR5LWZkIGlmIHdlIHdlcmUgZ2l2ZW4gb25lIHRvIHNpZ25hbCBvdXIgcmVhZGluZXNzLgpkaWZmIC0tZ2l0IGEvYXZtZC9BbmRyb2lkLmJwIGIvYXZtZC9BbmRyb2lkLmJwCmluZGV4IDcyMzdmNWYuLjZkOTFiNTkgMTAwNjQ0Ci0tLSBhL2F2bWQvQW5kcm9pZC5icAorKysgYi9hdm1kL0FuZHJvaWQuYnAKQEAgLTExLDYgKzExLDcgQEAKICAgICBydXN0bGliczogWwogICAgICAgICAibGlic2VyZGUiLAogICAgICAgICAibGliYXBleHV0aWxfcnVzdCIsIC8vIFRPRE8oYi8yMzk0MTM0MTYpOiBSZW1vdmUgdGhpcyBhZnRlciBhZGRpbmcgaGV4CisgICAgICAgICJsaWJhcGt2ZXJpZnkiLAogICAgIF0sCiB9CiAKZGlmZiAtLWdpdCBhL2F2bWQvc3JjL2F2bWQucnMgYi9hdm1kL3NyYy9hdm1kLnJzCmluZGV4IDUwY2RmZGYuLjA1ZmMyMDEgMTAwNjQ0Ci0tLSBhL2F2bWQvc3JjL2F2bWQucnMKKysrIGIvYXZtZC9zcmMvYXZtZC5ycwpAQCAtMTksNiArMTksNyBAQAogICAgIHZlYzo6VmVjLAogfTsKIHVzZSBhcGV4dXRpbDo6dG9faGV4X3N0cmluZzsKK3VzZSBhcGt2ZXJpZnk6OlNpZ25hdHVyZUFsZ29yaXRobUlEOwogdXNlIGNvcmU6OmZtdDsKIHVzZSBzZXJkZTo6e0Rlc2VyaWFsaXplLCBTZXJpYWxpemV9OwogCkBAIC0xMjAsNyArMTIxLDcgQEAKICAgICAvLy8gSXQgc2hvdWxkIGJlIG9uZSBvZiB0aGUgYWxnb3JpdGhtcyBpbiB0aGUgW2xpc3RdW10uCiAgICAgLy8vCiAgICAgLy8vIFtsaXN0XTogaHR0cHM6Ly9zb3VyY2UuYW5kcm9pZC5jb20vc2VjdXJpdHkvYXBrc2lnbmluZy92MiNzaWduYXR1cmUtYWxnb3JpdGhtLWlkcwotICAgIHB1YiBzaWduYXR1cmVfYWxnb3JpdGhtX2lkOiB1MzIsCisgICAgcHViIHNpZ25hdHVyZV9hbGdvcml0aG1faWQ6IFNpZ25hdHVyZUFsZ29yaXRobUlELAogICAgIC8vLyBEaWdlc3Qgb2YgdGhlIEFQSydzIHYzIHNpZ25pbmcgYmxvY2suIFRPRE86IGZpeAogICAgIHB1YiBhcGtfZGlnZXN0OiBWZWM8dTg+LAogfQpAQCAtMTMwLDcgKzEzMSw3IEBACiAgICAgICAgIHdyaXRlbG4hKGYsICIgIEFQSyBkZXNjcmlwdG9yOiIpPzsKICAgICAgICAgd3JpdGVsbiEoZiwgIiAgICBuYW1lc3BhY2U6ICAgICAgICAgICAgIHt9Iiwgc2VsZi5yZXNvdXJjZS5uYW1lc3BhY2UpPzsKICAgICAgICAgd3JpdGVsbiEoZiwgIiAgICBuYW1lOiAgICAgICAgICAgICAgICAgIHt9Iiwgc2VsZi5yZXNvdXJjZS5uYW1lKT87Ci0gICAgICAgIHdyaXRlbG4hKGYsICIgICAgU2lnbmluZyBhbGdvcml0aG0gSUQ6ICB7OiN4fSIsIHNlbGYuc2lnbmF0dXJlX2FsZ29yaXRobV9pZCk/OworICAgICAgICB3cml0ZWxuIShmLCAiICAgIFNpZ25pbmcgYWxnb3JpdGhtIElEOiAgezojMDR4fSIsIHNlbGYuc2lnbmF0dXJlX2FsZ29yaXRobV9pZC50b191MzIoKSk/OwogICAgICAgICB3cml0ZWxuIShmLCAiICAgIEFQSyBkaWdlc3Q6ICAgICAgICAgICAge30iLCB0b19oZXhfc3RyaW5nKCZzZWxmLmFwa19kaWdlc3QpKT87CiAgICAgICAgIE9rKCgpKQogICAgIH0KZGlmZiAtLWdpdCBhL2F2bWQvdGVzdHMvZGF0YS90ZXN0LmF2bWQgYi9hdm1kL3Rlc3RzL2RhdGEvdGVzdC5hdm1kCmluZGV4IDUyZTYzNGYuLmU1NjcxMjUgMTAwNjQ0Ci0tLSBhL2F2bWQvdGVzdHMvZGF0YS90ZXN0LmF2bWQKKysrIGIvYXZtZC90ZXN0cy9kYXRhL3Rlc3QuYXZtZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS9BbmRyb2lkLmJwIGIvbGlicy9hcGt2ZXJpZnkvQW5kcm9pZC5icAppbmRleCA5YmI4ZjhlLi43ODE5MmQyIDEwMDY0NAotLS0gYS9saWJzL2Fwa3ZlcmlmeS9BbmRyb2lkLmJwCisrKyBiL2xpYnMvYXBrdmVyaWZ5L0FuZHJvaWQuYnAKQEAgLTE1LDYgKzE1LDcgQEAKICAgICAgICAgImxpYmxvZ19ydXN0IiwKICAgICAgICAgImxpYm51bV90cmFpdHMiLAogICAgICAgICAibGlib3BlbnNzbCIsCisgICAgICAgICJsaWJzZXJkZSIsCiAgICAgICAgICJsaWJ6aXAiLAogICAgIF0sCiAgICAgcHJvY19tYWNyb3M6IFsibGlibnVtX2Rlcml2ZSJdLApkaWZmIC0tZ2l0IGEvbGlicy9hcGt2ZXJpZnkvc3JjL2FsZ29yaXRobXMucnMgYi9saWJzL2Fwa3ZlcmlmeS9zcmMvYWxnb3JpdGhtcy5ycwppbmRleCBlZGZhOTQ2Li5hMWNmMzY4IDEwMDY0NAotLS0gYS9saWJzL2Fwa3ZlcmlmeS9zcmMvYWxnb3JpdGhtcy5ycworKysgYi9saWJzL2Fwa3ZlcmlmeS9zcmMvYWxnb3JpdGhtcy5ycwpAQCAtMTcsNTIgKzE3LDgyIEBACiAvLyEgQWxnb3JpdGhtcyB1c2VkIGZvciBBUEsgU2lnbmF0dXJlIFNjaGVtZS4KIAogdXNlIGFueWhvdzo6e2Vuc3VyZSwgUmVzdWx0fTsKLXVzZSBudW1fZGVyaXZlOjpGcm9tUHJpbWl0aXZlOwordXNlIGJ5dGVzOjp7QnVmLCBCeXRlc307Cit1c2UgbnVtX2Rlcml2ZTo6e0Zyb21QcmltaXRpdmUsIFRvUHJpbWl0aXZlfTsKK3VzZSBudW1fdHJhaXRzOjp7RnJvbVByaW1pdGl2ZSwgVG9QcmltaXRpdmV9OwogdXNlIG9wZW5zc2w6Omhhc2g6Ok1lc3NhZ2VEaWdlc3Q7CiB1c2Ugb3BlbnNzbDo6cGtleTo6e3NlbGYsIFBLZXl9OwogdXNlIG9wZW5zc2w6OnJzYTo6UGFkZGluZzsKIHVzZSBvcGVuc3NsOjpzaWduOjpWZXJpZmllcjsKLXVzZSBzdGQ6OmNtcDo6T3JkZXJpbmc7Cit1c2Ugc2VyZGU6OntEZXNlcmlhbGl6ZSwgU2VyaWFsaXplfTsKKwordXNlIGNyYXRlOjpieXRlc19leHQ6OlJlYWRGcm9tQnl0ZXM7CiAKIC8vLyBbU2lnbmF0dXJlIEFsZ29yaXRobSBJRHNdOiBodHRwczovL3NvdXJjZS5hbmRyb2lkLmNvbS9kb2NzL3NlY3VyaXR5L2Fwa3NpZ25pbmcvdjIjc2lnbmF0dXJlLWFsZ29yaXRobS1pZHMKKy8vLyBbU2lnbmF0dXJlQWxnb3JpdGhtLmphdmFdOiAodG9vbHMvYXBrc2lnL3NyYy9tYWluL2phdmEvY29tL2FuZHJvaWQvYXBrc2lnL2ludGVybmFsL2Fway9TaWduYXR1cmVBbGdvcml0aG0uamF2YSkKIC8vLwogLy8vIFNvbWUgb2YgdGhlIGFsZ29yaXRobXMgYXJlIG5vdCBpbXBsZW1lbnRlZC4gU2VlIGIvMTk3MDUyOTgxLgotI1tkZXJpdmUoQ2xvbmUsIERlYnVnLCBFcSwgRnJvbVByaW1pdGl2ZSldCisjW2Rlcml2ZShTZXJpYWxpemUsIERlc2VyaWFsaXplLCBDbG9uZSwgQ29weSwgRGVidWcsIEVxLCBQYXJ0aWFsRXEsIEZyb21QcmltaXRpdmUsIFRvUHJpbWl0aXZlKV0KICNbcmVwcih1MzIpXQogcHViIGVudW0gU2lnbmF0dXJlQWxnb3JpdGhtSUQgeworICAgIC8vLyBSU0FTU0EtUFNTIHdpdGggU0hBMi0yNTYgZGlnZXN0LCBTSEEyLTI1NiBNR0YxLCAzMiBieXRlcyBvZiBzYWx0LCB0cmFpbGVyOiAweGJjLCBjb250ZW50CisgICAgLy8vIGRpZ2VzdGVkIHVzaW5nIFNIQTItMjU2IGluIDEgTUIgY2h1bmtzLgogICAgIFJzYVBzc1dpdGhTaGEyNTYgPSAweDAxMDEsCisKKyAgICAvLy8gUlNBU1NBLVBTUyB3aXRoIFNIQTItNTEyIGRpZ2VzdCwgU0hBMi01MTIgTUdGMSwgNjQgYnl0ZXMgb2Ygc2FsdCwgdHJhaWxlcjogMHhiYywgY29udGVudAorICAgIC8vLyBkaWdlc3RlZCB1c2luZyBTSEEyLTUxMiBpbiAxIE1CIGNodW5rcy4KICAgICBSc2FQc3NXaXRoU2hhNTEyID0gMHgwMTAyLAorCisgICAgLy8vIFJTQVNTQS1QS0NTMS12MV81IHdpdGggU0hBMi0yNTYgZGlnZXN0LCBjb250ZW50IGRpZ2VzdGVkIHVzaW5nIFNIQTItMjU2IGluIDEgTUIgY2h1bmtzLgogICAgIFJzYVBrY3MxVjE1V2l0aFNoYTI1NiA9IDB4MDEwMywKKworICAgIC8vLyBSU0FTU0EtUEtDUzEtdjFfNSB3aXRoIFNIQTItNTEyIGRpZ2VzdCwgY29udGVudCBkaWdlc3RlZCB1c2luZyBTSEEyLTUxMiBpbiAxIE1CIGNodW5rcy4KICAgICBSc2FQa2NzMVYxNVdpdGhTaGE1MTIgPSAweDAxMDQsCisKKyAgICAvLy8gRUNEU0Egd2l0aCBTSEEyLTI1NiBkaWdlc3QsIGNvbnRlbnQgZGlnZXN0ZWQgdXNpbmcgU0hBMi0yNTYgaW4gMSBNQiBjaHVua3MuCiAgICAgRWNkc2FXaXRoU2hhMjU2ID0gMHgwMjAxLAorCisgICAgLy8vIEVDRFNBIHdpdGggU0hBMi01MTIgZGlnZXN0LCBjb250ZW50IGRpZ2VzdGVkIHVzaW5nIFNIQTItNTEyIGluIDEgTUIgY2h1bmtzLgogICAgIEVjZHNhV2l0aFNoYTUxMiA9IDB4MDIwMiwKKworICAgIC8vLyBEU0Egd2l0aCBTSEEyLTI1NiBkaWdlc3QsIGNvbnRlbnQgZGlnZXN0ZWQgdXNpbmcgU0hBMi0yNTYgaW4gMSBNQiBjaHVua3MuCisgICAgLy8vIFNpZ25pbmcgaXMgZG9uZSBkZXRlcm1pbmlzdGljYWxseSBhY2NvcmRpbmcgdG8gUkZDIDY5NzkuCiAgICAgRHNhV2l0aFNoYTI1NiA9IDB4MDMwMSwKKworICAgIC8vLyBSU0FTU0EtUEtDUzEtdjFfNSB3aXRoIFNIQTItMjU2IGRpZ2VzdCwgY29udGVudCBkaWdlc3RlZCB1c2luZyBTSEEyLTI1NiBpbiA0IEtCCisgICAgLy8vIGNodW5rcywgaW4gdGhlIHNhbWUgd2F5IGZzdmVyaXR5IG9wZXJhdGVzLiBUaGlzIGRpZ2VzdCBhbmQgdGhlIGNvbnRlbnQgbGVuZ3RoCisgICAgLy8vIChiZWZvcmUgZGlnZXN0aW9uLCA4IGJ5dGVzIGluIGxpdHRsZSBlbmRpYW4pIGNvbnN0cnVjdCB0aGUgZmluYWwgZGlnZXN0LgogICAgIFZlcml0eVJzYVBrY3MxVjE1V2l0aFNoYTI1NiA9IDB4MDQyMSwKKworICAgIC8vLyBFQ0RTQSB3aXRoIFNIQTItMjU2IGRpZ2VzdCwgY29udGVudCBkaWdlc3RlZCB1c2luZyBTSEEyLTI1NiBpbiA0IEtCIGNodW5rcywgaW4gdGhlCisgICAgLy8vIHNhbWUgd2F5IGZzdmVyaXR5IG9wZXJhdGVzLiBUaGlzIGRpZ2VzdCBhbmQgdGhlIGNvbnRlbnQgbGVuZ3RoIChiZWZvcmUgZGlnZXN0aW9uLAorICAgIC8vLyA4IGJ5dGVzIGluIGxpdHRsZSBlbmRpYW4pIGNvbnN0cnVjdCB0aGUgZmluYWwgZGlnZXN0LgogICAgIFZlcml0eUVjZHNhV2l0aFNoYTI1NiA9IDB4MDQyMywKKworICAgIC8vLyBEU0Egd2l0aCBTSEEyLTI1NiBkaWdlc3QsIGNvbnRlbnQgZGlnZXN0ZWQgdXNpbmcgU0hBMi0yNTYgaW4gNCBLQiBjaHVua3MsIGluIHRoZQorICAgIC8vLyBzYW1lIHdheSBmc3Zlcml0eSBvcGVyYXRlcy4gVGhpcyBkaWdlc3QgYW5kIHRoZSBjb250ZW50IGxlbmd0aCAoYmVmb3JlIGRpZ2VzdGlvbiwKKyAgICAvLy8gOCBieXRlcyBpbiBsaXR0bGUgZW5kaWFuKSBjb25zdHJ1Y3QgdGhlIGZpbmFsIGRpZ2VzdC4KICAgICBWZXJpdHlEc2FXaXRoU2hhMjU2ID0gMHgwNDI1LAogfQogCi1pbXBsIE9yZCBmb3IgU2lnbmF0dXJlQWxnb3JpdGhtSUQgewotICAgIC8vLyBSYW5rcyB0aGUgc2lnbmF0dXJlIGFsZ29yaXRobSBhY2NvcmRpbmcgdG8gdGhlIGNvcnJlc3BvbmRpbmcgY29udGVudAotICAgIC8vLyBkaWdlc3QgYWxnb3JpdGhtJ3MgcmFuay4KLSAgICBmbiBjbXAoJnNlbGYsIG90aGVyOiAmU2VsZikgLT4gT3JkZXJpbmcgewotICAgICAgICBzZWxmLnRvX2NvbnRlbnRfZGlnZXN0X2FsZ29yaXRobSgpLmNtcCgmb3RoZXIudG9fY29udGVudF9kaWdlc3RfYWxnb3JpdGhtKCkpCitpbXBsIERlZmF1bHQgZm9yIFNpZ25hdHVyZUFsZ29yaXRobUlEIHsKKyAgICBmbiBkZWZhdWx0KCkgLT4gU2VsZiB7CisgICAgICAgIFNpZ25hdHVyZUFsZ29yaXRobUlEOjpEc2FXaXRoU2hhMjU2CiAgICAgfQogfQogCi1pbXBsIFBhcnRpYWxPcmQgZm9yIFNpZ25hdHVyZUFsZ29yaXRobUlEIHsKLSAgICBmbiBwYXJ0aWFsX2NtcCgmc2VsZiwgb3RoZXI6ICZTZWxmKSAtPiBPcHRpb248T3JkZXJpbmc+IHsKLSAgICAgICAgU29tZShzZWxmLmNtcChvdGhlcikpCi0gICAgfQotfQotCi1pbXBsIFBhcnRpYWxFcSBmb3IgU2lnbmF0dXJlQWxnb3JpdGhtSUQgewotICAgIGZuIGVxKCZzZWxmLCBvdGhlcjogJlNlbGYpIC0+IGJvb2wgewotICAgICAgICBzZWxmLmNtcChvdGhlcikgPT0gT3JkZXJpbmc6OkVxdWFsCitpbXBsIFJlYWRGcm9tQnl0ZXMgZm9yIE9wdGlvbjxTaWduYXR1cmVBbGdvcml0aG1JRD4geworICAgIGZuIHJlYWRfZnJvbV9ieXRlcyhidWY6ICZtdXQgQnl0ZXMpIC0+IFJlc3VsdDxTZWxmPiB7CisgICAgICAgIE9rKFNpZ25hdHVyZUFsZ29yaXRobUlEOjpmcm9tX3UzMihidWYuZ2V0X3UzMl9sZSgpKSkKICAgICB9CiB9CiAKIGltcGwgU2lnbmF0dXJlQWxnb3JpdGhtSUQgeworICAgIC8vLyBDb252ZXJ0cyB0aGUgc2lnbmF0dXJlIGFsZ29yaXRobSBJRCB0byB0aGUgY29ycmVzcG9uZGluZyB1MzIuCisgICAgcHViIGZuIHRvX3UzMigmc2VsZikgLT4gdTMyIHsKKyAgICAgICAgVG9QcmltaXRpdmU6OnRvX3UzMihzZWxmKS5leHBlY3QoIlVuc3VwcG9ydGVkIGFsZ29yaXRobSBmb3IgdG9fdTMyLiIpCisgICAgfQorCiAgICAgcHViKGNyYXRlKSBmbiBuZXdfdmVyaWZpZXI8J2E+KAogICAgICAgICAmc2VsZiwKICAgICAgICAgcHVibGljX2tleTogJidhIFBLZXk8cGtleTo6UHVibGljPiwKQEAgLTcyLDcgKzEwMiw3IEBACiAgICAgICAgICAgICAgICAgc2VsZiwKICAgICAgICAgICAgICAgICBTaWduYXR1cmVBbGdvcml0aG1JRDo6RHNhV2l0aFNoYTI1NiB8IFNpZ25hdHVyZUFsZ29yaXRobUlEOjpWZXJpdHlEc2FXaXRoU2hhMjU2CiAgICAgICAgICAgICApLAotICAgICAgICAgICAgIlRPRE8oYi8xOTcwNTI5ODEpOiBBbGdvcml0aG0gJ3s6Iz99JyBpcyBub3QgaW1wbGVtZW50ZWQuIiwKKyAgICAgICAgICAgICJUT0RPKGIvMTk3MDUyOTgxKTogQWxnb3JpdGhtICd7Oj99JyBpcyBub3QgaW1wbGVtZW50ZWQuIiwKICAgICAgICAgICAgIHNlbGYKICAgICAgICAgKTsKICAgICAgICAgZW5zdXJlIShwdWJsaWNfa2V5LmlkKCkgPT0gc2VsZi5wa2V5X2lkKCksICJQdWJsaWMga2V5IGhhcyB0aGUgd3JvbmcgSUQiKTsKQEAgLTEzMiw3ICsxNjIsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgZm4gdG9fY29udGVudF9kaWdlc3RfYWxnb3JpdGhtKCZzZWxmKSAtPiBDb250ZW50RGlnZXN0QWxnb3JpdGhtIHsKKyAgICBwdWIoY3JhdGUpIGZuIGNvbnRlbnRfZGlnZXN0X2FsZ29yaXRobSgmc2VsZikgLT4gQ29udGVudERpZ2VzdEFsZ29yaXRobSB7CiAgICAgICAgIG1hdGNoIHNlbGYgewogICAgICAgICAgICAgU2lnbmF0dXJlQWxnb3JpdGhtSUQ6OlJzYVBzc1dpdGhTaGEyNTYKICAgICAgICAgICAgIHwgU2lnbmF0dXJlQWxnb3JpdGhtSUQ6OlJzYVBrY3MxVjE1V2l0aFNoYTI1NgpAQCAtMTYwLDcgKzE5MCw3IEBACiAvLy8gW2FwayBkaWdlc3RdOiBodHRwczovL3NvdXJjZS5hbmRyb2lkLmNvbS9kb2NzL3NlY3VyaXR5L2ZlYXR1cmVzL2Fwa3NpZ25pbmcvdjQjYXBrLWRpZ2VzdAogLy8vIFt2MyB2ZXJpZmljYXRpb25dOiBodHRwczovL3NvdXJjZS5hbmRyb2lkLmNvbS9kb2NzL3NlY3VyaXR5L2Fwa3NpZ25pbmcvdjMjdjMtdmVyaWZpY2F0aW9uCiAjW2Rlcml2ZShDbG9uZSwgRGVidWcsIFBhcnRpYWxFcSwgRXEsIFBhcnRpYWxPcmQsIE9yZCldCi1lbnVtIENvbnRlbnREaWdlc3RBbGdvcml0aG0geworcHViKGNyYXRlKSBlbnVtIENvbnRlbnREaWdlc3RBbGdvcml0aG0gewogICAgIENodW5rZWRTaGEyNTYgPSAxLAogICAgIFZlcml0eUNodW5rZWRTaGEyNTYsCiAgICAgQ2h1bmtlZFNoYTUxMiwKZGlmZiAtLWdpdCBhL2xpYnMvYXBrdmVyaWZ5L3NyYy9saWIucnMgYi9saWJzL2Fwa3ZlcmlmeS9zcmMvbGliLnJzCmluZGV4IDA0MGMzMDQuLjA4NGE5MTAgMTAwNjQ0Ci0tLSBhL2xpYnMvYXBrdmVyaWZ5L3NyYy9saWIucnMKKysrIGIvbGlicy9hcGt2ZXJpZnkvc3JjL2xpYi5ycwpAQCAtMjUsNCArMjUsNSBAQAogbW9kIHppcHV0aWw7CiAKIC8vIFRPRE8oYi8xOTcwNTI5ODEpIGZhbGxiYWNrIHRvIHYyIHdoZW4gdjMgbm90IGZvdW5kCitwdWIgdXNlIGFsZ29yaXRobXM6OlNpZ25hdHVyZUFsZ29yaXRobUlEOwogcHViIHVzZSB2Mzo6e2dldF9wdWJsaWNfa2V5X2RlciwgcGlja192NF9hcGtfZGlnZXN0LCB2ZXJpZnl9OwpkaWZmIC0tZ2l0IGEvbGlicy9hcGt2ZXJpZnkvc3JjL3NpZ3V0aWwucnMgYi9saWJzL2Fwa3ZlcmlmeS9zcmMvc2lndXRpbC5ycwppbmRleCAzODMyYzA5Li5iZmE1MWMxIDEwMDY0NAotLS0gYS9saWJzL2Fwa3ZlcmlmeS9zcmMvc2lndXRpbC5ycworKysgYi9saWJzL2Fwa3ZlcmlmeS9zcmMvc2lndXRpbC5ycwpAQCAtMTYsMTQgKzE2LDkgQEAKIAogLy8hIFV0aWxpdGllcyBmb3IgU2lnbmF0dXJlIFZlcmlmaWNhdGlvbgogCi0vLyBUT0RPKGIvMjQ2MjU0MzU1KTogUmVtb3ZlIHRoaXMgb25jZSB3ZSBtaWdyYXRlIGFsbCB0aGUgdXNhZ2VzIG9mCi0vLyByYXcgc2lnbmF0dXJlIGFsZ29yaXRobSBpZCB0byB0aGUgZW51bS4KLSMhW2FsbG93KGRlYWRfY29kZSldCi0KIHVzZSBhbnlob3c6Onthbnlob3csIGVuc3VyZSwgRXJyb3IsIFJlc3VsdH07CiB1c2UgYnl0ZW9yZGVyOjp7TGl0dGxlRW5kaWFuLCBSZWFkQnl0ZXNFeHR9OwogdXNlIGJ5dGVzOjp7QnVmLCBCdWZNdXQsIEJ5dGVzLCBCeXRlc011dH07Ci11c2UgbnVtX3RyYWl0czo6RnJvbVByaW1pdGl2ZTsKIHVzZSBvcGVuc3NsOjpoYXNoOjp7RGlnZXN0Qnl0ZXMsIEhhc2hlciwgTWVzc2FnZURpZ2VzdH07CiB1c2Ugc3RkOjpjbXA6Om1pbjsKIHVzZSBzdGQ6OmlvOjp7c2VsZiwgQ3Vyc29yLCBFcnJvcktpbmQsIFJlYWQsIFNlZWssIFNlZWtGcm9tLCBUYWtlfTsKQEAgLTM0LDE5ICsyOSw5IEBACiBjb25zdCBBUEtfU0lHX0JMT0NLX01JTl9TSVpFOiB1MzIgPSAzMjsKIGNvbnN0IEFQS19TSUdfQkxPQ0tfTUFHSUM6IHUxMjggPSAweDMyMzQyMDZiNjM2ZjZjNDIyMDY3Njk1MzIwNGI1MDQxOwogCi0vLyBUT0RPKGIvMjQ2MjU0MzU1KTogTWlncmF0ZXMgdXNhZ2VzIG9mIHJhdyBzaWduYXR1cmUgYWxnb3JpdGhtIGlkIHRvIHRoZSBlbnVtLgotcHViIGNvbnN0IFNJR05BVFVSRV9SU0FfUFNTX1dJVEhfU0hBMjU2OiB1MzIgPSAweDAxMDE7Ci1wdWIgY29uc3QgU0lHTkFUVVJFX1JTQV9QU1NfV0lUSF9TSEE1MTI6IHUzMiA9IDB4MDEwMjsKLXB1YiBjb25zdCBTSUdOQVRVUkVfUlNBX1BLQ1MxX1YxXzVfV0lUSF9TSEEyNTY6IHUzMiA9IDB4MDEwMzsKLXB1YiBjb25zdCBTSUdOQVRVUkVfUlNBX1BLQ1MxX1YxXzVfV0lUSF9TSEE1MTI6IHUzMiA9IDB4MDEwNDsKLXB1YiBjb25zdCBTSUdOQVRVUkVfRUNEU0FfV0lUSF9TSEEyNTY6IHUzMiA9IDB4MDIwMTsKLXB1YiBjb25zdCBTSUdOQVRVUkVfRUNEU0FfV0lUSF9TSEE1MTI6IHUzMiA9IDB4MDIwMjsKLXB1YiBjb25zdCBTSUdOQVRVUkVfRFNBX1dJVEhfU0hBMjU2OiB1MzIgPSAweDAzMDE7Ci1wdWIgY29uc3QgU0lHTkFUVVJFX1ZFUklUWV9SU0FfUEtDUzFfVjFfNV9XSVRIX1NIQTI1NjogdTMyID0gMHgwNDIxOwotcHViIGNvbnN0IFNJR05BVFVSRV9WRVJJVFlfRUNEU0FfV0lUSF9TSEEyNTY6IHUzMiA9IDB4MDQyMzsKLXB1YiBjb25zdCBTSUdOQVRVUkVfVkVSSVRZX0RTQV9XSVRIX1NIQTI1NjogdTMyID0gMHgwNDI1OwotCiBjb25zdCBDSFVOS19TSVpFX0JZVEVTOiB1NjQgPSAxMDI0ICogMTAyNDsKK2NvbnN0IENIVU5LX0hFQURFUl9UT1A6ICZbdThdID0gJlsweDVhXTsKK2NvbnN0IENIVU5LX0hFQURFUl9NSUQ6ICZbdThdID0gJlsweGE1XTsKIAogLy8vIFRoZSBbQVBLIHN0cnVjdHVyZV0gaGFzIGZvdXIgbWFqb3Igc2VjdGlvbnM6CiAvLy8KQEAgLTk1LDEyICs4MCwxMSBAQAogICAgIC8vLyAgICBjaHVua3MgKGxpdHRsZS1lbmRpYW4gdWludDMyKSwgYW5kIHRoZSBjb25jYXRlbmF0aW9uIG9mIGRpZ2VzdHMgb2YgdGhlIGNodW5rcyBpbiB0aGUKICAgICAvLy8gICAgb3JkZXIgdGhlIGNodW5rcyBhcHBlYXIgaW4gdGhlIEFQSy4KICAgICAvLy8gKHNlZSBodHRwczovL3NvdXJjZS5hbmRyb2lkLmNvbS9zZWN1cml0eS9hcGtzaWduaW5nL3YyI2ludGVncml0eS1wcm90ZWN0ZWQtY29udGVudHMpCi0gICAgcHViIGZuIGNvbXB1dGVfZGlnZXN0KCZtdXQgc2VsZiwgc2lnbmF0dXJlX2FsZ29yaXRobV9pZDogdTMyKSAtPiBSZXN1bHQ8VmVjPHU4Pj4gewotICAgICAgICAvLyBUT0RPKGIvMjQ2MjU0MzU1KTogUGFzc2VzIHRoZSBlbnVtIFNpZ25hdHVyZUFsZ29yaXRobUlEIGRpcmVjdGx5IHRvIHRoaXMgbWV0aG9kLgotICAgICAgICBsZXQgc2lnbmF0dXJlX2FsZ29yaXRobV9pZCA9IFNpZ25hdHVyZUFsZ29yaXRobUlEOjpmcm9tX3UzMihzaWduYXR1cmVfYWxnb3JpdGhtX2lkKQotICAgICAgICAgICAgLm9rX29yX2Vsc2UofHwgYW55aG93ISgiVW5zdXBwb3J0ZWQgYWxnb3JpdGhtIElEOiB7fSIsIHNpZ25hdHVyZV9hbGdvcml0aG1faWQpKT87CisgICAgcHViKGNyYXRlKSBmbiBjb21wdXRlX2RpZ2VzdCgKKyAgICAgICAgJm11dCBzZWxmLAorICAgICAgICBzaWduYXR1cmVfYWxnb3JpdGhtX2lkOiBTaWduYXR1cmVBbGdvcml0aG1JRCwKKyAgICApIC0+IFJlc3VsdDxWZWM8dTg+PiB7CiAgICAgICAgIGxldCBkaWdlc3RlciA9IERpZ2VzdGVyIHsgbWVzc2FnZV9kaWdlc3Q6IHNpZ25hdHVyZV9hbGdvcml0aG1faWQubmV3X21lc3NhZ2VfZGlnZXN0KCkgfTsKLQogICAgICAgICBsZXQgbXV0IGRpZ2VzdHNfb2ZfY2h1bmtzID0gQnl0ZXNNdXQ6Om5ldygpOwogICAgICAgICBsZXQgbXV0IGNodW5rX2NvdW50ID0gMHUzMjsKICAgICAgICAgbGV0IG11dCBjaHVuayA9IHZlYyFbMHU4OyBDSFVOS19TSVpFX0JZVEVTIGFzIHVzaXplXTsKQEAgLTE2OCw5ICsxNTIsNiBAQAogICAgIG1lc3NhZ2VfZGlnZXN0OiBNZXNzYWdlRGlnZXN0LAogfQogCi1jb25zdCBDSFVOS19IRUFERVJfVE9QOiAmW3U4XSA9ICZbMHg1YV07Ci1jb25zdCBDSFVOS19IRUFERVJfTUlEOiAmW3U4XSA9ICZbMHhhNV07Ci0KIGltcGwgRGlnZXN0ZXIgewogICAgIC8vIHYyL3YzIGRpZ2VzdHMgYXJlIGNvbXB1dGVkIGFmdGVyIHByZXBlbmRpbmcgImhlYWRlciIgYnl0ZSBhbmQgInNpemUiIGluZm8uCiAgICAgZm4gZGlnZXN0KCZzZWxmLCBkYXRhOiAmW3U4XSwgaGVhZGVyOiAmW3U4XSwgc2l6ZTogdTMyKSAtPiBSZXN1bHQ8RGlnZXN0Qnl0ZXM+IHsKQEAgLTI5Myw3ICsyNzQsNyBAQAogICAgIGZuIHRlc3RfYXBrX2RpZ2VzdCgpIHsKICAgICAgICAgbGV0IGFwa19maWxlID0gRmlsZTo6b3BlbigidGVzdHMvZGF0YS92My1vbmx5LXdpdGgtZHNhLXNoYTI1Ni0xMDI0LmFwayIpLnVud3JhcCgpOwogICAgICAgICBsZXQgbXV0IGFwa19zZWN0aW9ucyA9IEFwa1NlY3Rpb25zOjpuZXcoYXBrX2ZpbGUpLnVud3JhcCgpOwotICAgICAgICBsZXQgZGlnZXN0ID0gYXBrX3NlY3Rpb25zLmNvbXB1dGVfZGlnZXN0KFNJR05BVFVSRV9EU0FfV0lUSF9TSEEyNTYpLnVud3JhcCgpOworICAgICAgICBsZXQgZGlnZXN0ID0gYXBrX3NlY3Rpb25zLmNvbXB1dGVfZGlnZXN0KFNpZ25hdHVyZUFsZ29yaXRobUlEOjpEc2FXaXRoU2hhMjU2KS51bndyYXAoKTsKICAgICAgICAgYXNzZXJ0X2VxISgKICAgICAgICAgICAgICIwREYyNDI2RUEzM0FFREFGNDk1RDg4RTVCRTBDNkExNjYzRkYwQTgxQzVFRDEyRDVCMjkyOUFFNEI0MzAwRjJGIiwKICAgICAgICAgICAgIHRvX2hleF9zdHJpbmcoJmRpZ2VzdFsuLl0pCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS9zcmMvdjMucnMgYi9saWJzL2Fwa3ZlcmlmeS9zcmMvdjMucnMKaW5kZXggNTMxM2E5Yi4uYTNlNzM4YiAxMDA2NDQKLS0tIGEvbGlicy9hcGt2ZXJpZnkvc3JjL3YzLnJzCisrKyBiL2xpYnMvYXBrdmVyaWZ5L3NyYy92My5ycwpAQCAtMjAsNyArMjAsNiBAQAogCiB1c2UgYW55aG93Ojp7ZW5zdXJlLCBDb250ZXh0LCBSZXN1bHR9OwogdXNlIGJ5dGVzOjpCeXRlczsKLXVzZSBudW1fdHJhaXRzOjpGcm9tUHJpbWl0aXZlOwogdXNlIG9wZW5zc2w6OnBrZXk6OntzZWxmLCBQS2V5fTsKIHVzZSBvcGVuc3NsOjp4NTA5OjpYNTA5OwogdXNlIHN0ZDo6ZnM6OkZpbGU7CkBAIC03MCwxMyArNjksMTMgQEAKIAogI1tkZXJpdmUoRGVidWcpXQogc3RydWN0IFNpZ25hdHVyZSB7Ci0gICAgLy8vIFRPRE8oYi8yNDYyNTQzNTUpOiBDaGFuZ2UgdGhlIHR5cGUgb2Ygc2lnbmF0dXJlX2FsZ29yaXRobV9pZCB0byBTaWduYXR1cmVBbGdvcml0aG1JRAotICAgIHNpZ25hdHVyZV9hbGdvcml0aG1faWQ6IHUzMiwKKyAgICAvLy8gT3B0aW9uIGlzIHVzZWQgaGVyZSB0byBhbGxvdyB1cyB0byBpZ25vcmUgdW5zdXBwb3J0ZWQgYWxnb3JpdGhtLgorICAgIHNpZ25hdHVyZV9hbGdvcml0aG1faWQ6IE9wdGlvbjxTaWduYXR1cmVBbGdvcml0aG1JRD4sCiAgICAgc2lnbmF0dXJlOiBMZW5ndGhQcmVmaXhlZDxCeXRlcz4sCiB9CiAKIHN0cnVjdCBEaWdlc3QgewotICAgIHNpZ25hdHVyZV9hbGdvcml0aG1faWQ6IHUzMiwKKyAgICBzaWduYXR1cmVfYWxnb3JpdGhtX2lkOiBPcHRpb248U2lnbmF0dXJlQWxnb3JpdGhtSUQ+LAogICAgIGRpZ2VzdDogTGVuZ3RoUHJlZml4ZWQ8Qnl0ZXM+LAogfQogCkBAIC04NSw5ICs4NCw5IEBACiAKIC8vLyBWZXJpZmllcyBBUEsgU2lnbmF0dXJlIFNjaGVtZSB2MyBzaWduYXR1cmVzIG9mIHRoZSBwcm92aWRlZCBBUEsgYW5kIHJldHVybnMgdGhlIHB1YmxpYyBrZXkKIC8vLyBhc3NvY2lhdGVkIHdpdGggdGhlIHNpZ25lciBpbiBERVIgZm9ybWF0LgotcHViIGZuIHZlcmlmeTxQOiBBc1JlZjxQYXRoPj4ocGF0aDogUCkgLT4gUmVzdWx0PEJveDxbdThdPj4gewotICAgIGxldCBmID0gRmlsZTo6b3BlbihwYXRoLmFzX3JlZigpKT87Ci0gICAgbGV0IG11dCBzZWN0aW9ucyA9IEFwa1NlY3Rpb25zOjpuZXcoZik/OworcHViIGZuIHZlcmlmeTxQOiBBc1JlZjxQYXRoPj4oYXBrX3BhdGg6IFApIC0+IFJlc3VsdDxCb3g8W3U4XT4+IHsKKyAgICBsZXQgYXBrID0gRmlsZTo6b3BlbihhcGtfcGF0aC5hc19yZWYoKSk/OworICAgIGxldCBtdXQgc2VjdGlvbnMgPSBBcGtTZWN0aW9uczo6bmV3KGFwayk/OwogICAgIGZpbmRfc2lnbmVyX2FuZF90aGVuKCZtdXQgc2VjdGlvbnMsIHwoc2lnbmVyLCBzZWN0aW9ucyl8IHNpZ25lci52ZXJpZnkoc2VjdGlvbnMpKQogfQogCkBAIC0xMTYsOSArMTE1LDkgQEAKIH0KIAogLy8vIEdldHMgdGhlIHB1YmxpYyBrZXkgKGluIERFUiBmb3JtYXQpIHRoYXQgd2FzIHVzZWQgdG8gc2lnbiB0aGUgZ2l2ZW4gQVBLL0FQRVggZmlsZQotcHViIGZuIGdldF9wdWJsaWNfa2V5X2RlcjxQOiBBc1JlZjxQYXRoPj4ocGF0aDogUCkgLT4gUmVzdWx0PEJveDxbdThdPj4gewotICAgIGxldCBmID0gRmlsZTo6b3BlbihwYXRoLmFzX3JlZigpKT87Ci0gICAgbGV0IG11dCBzZWN0aW9ucyA9IEFwa1NlY3Rpb25zOjpuZXcoZik/OworcHViIGZuIGdldF9wdWJsaWNfa2V5X2RlcjxQOiBBc1JlZjxQYXRoPj4oYXBrX3BhdGg6IFApIC0+IFJlc3VsdDxCb3g8W3U4XT4+IHsKKyAgICBsZXQgYXBrID0gRmlsZTo6b3BlbihhcGtfcGF0aC5hc19yZWYoKSk/OworICAgIGxldCBtdXQgc2VjdGlvbnMgPSBBcGtTZWN0aW9uczo6bmV3KGFwayk/OwogICAgIGZpbmRfc2lnbmVyX2FuZF90aGVuKCZtdXQgc2VjdGlvbnMsIHwoc2lnbmVyLCBfKXwgewogICAgICAgICBPayhzaWduZXIucHVibGljX2tleS50b192ZWMoKS5pbnRvX2JveGVkX3NsaWNlKCkpCiAgICAgfSkKQEAgLTEyNyw3ICsxMjYsNyBAQAogLy8vIEdldHMgdGhlIHY0IFthcGtfZGlnZXN0XS4KIC8vLwogLy8vIFthcGtfZGlnZXN0XTogaHR0cHM6Ly9zb3VyY2UuYW5kcm9pZC5jb20vZG9jcy9zZWN1cml0eS9hcGtzaWduaW5nL3Y0I2Fway1kaWdlc3QKLXB1YiBmbiBwaWNrX3Y0X2Fwa19kaWdlc3Q8UjogUmVhZCArIFNlZWs+KGFwazogUikgLT4gUmVzdWx0PCh1MzIsIEJveDxbdThdPik+IHsKK3B1YiBmbiBwaWNrX3Y0X2Fwa19kaWdlc3Q8UjogUmVhZCArIFNlZWs+KGFwazogUikgLT4gUmVzdWx0PChTaWduYXR1cmVBbGdvcml0aG1JRCwgQm94PFt1OF0+KT4gewogICAgIGxldCBtdXQgc2VjdGlvbnMgPSBBcGtTZWN0aW9uczo6bmV3KGFwayk/OwogICAgIGxldCBtdXQgYmxvY2sgPSBzZWN0aW9ucy5maW5kX3NpZ25hdHVyZShBUEtfU0lHTkFUVVJFX1NDSEVNRV9WM19CTE9DS19JRCk/OwogICAgIGxldCBzaWduZXJzID0gYmxvY2sucmVhZDo6PFNpZ25lcnM+KCk/OwpAQCAtMTQyLDEyICsxNDEsMTIgQEAKICAgICAgICAgT2soc2VsZgogICAgICAgICAgICAgLnNpZ25hdHVyZXMKICAgICAgICAgICAgIC5pdGVyKCkKLSAgICAgICAgICAgIC5maWx0ZXIofHNpZ3wgU2lnbmF0dXJlQWxnb3JpdGhtSUQ6OmZyb21fdTMyKHNpZy5zaWduYXR1cmVfYWxnb3JpdGhtX2lkKS5pc19zb21lKCkpCi0gICAgICAgICAgICAubWF4X2J5X2tleSh8c2lnfCBTaWduYXR1cmVBbGdvcml0aG1JRDo6ZnJvbV91MzIoc2lnLnNpZ25hdHVyZV9hbGdvcml0aG1faWQpLnVud3JhcCgpKQorICAgICAgICAgICAgLmZpbHRlcih8c2lnfCBzaWcuc2lnbmF0dXJlX2FsZ29yaXRobV9pZC5pc19zb21lKCkpCisgICAgICAgICAgICAubWF4X2J5X2tleSh8c2lnfCBzaWcuc2lnbmF0dXJlX2FsZ29yaXRobV9pZC51bndyYXAoKS5jb250ZW50X2RpZ2VzdF9hbGdvcml0aG0oKSkKICAgICAgICAgICAgIC5jb250ZXh0KCJObyBzdXBwb3J0ZWQgc2lnbmF0dXJlcyBmb3VuZCIpPykKICAgICB9CiAKLSAgICBmbiBwaWNrX3Y0X2Fwa19kaWdlc3QoJnNlbGYpIC0+IFJlc3VsdDwodTMyLCBCb3g8W3U4XT4pPiB7CisgICAgZm4gcGlja192NF9hcGtfZGlnZXN0KCZzZWxmKSAtPiBSZXN1bHQ8KFNpZ25hdHVyZUFsZ29yaXRobUlELCBCb3g8W3U4XT4pPiB7CiAgICAgICAgIGxldCBzdHJvbmdlc3QgPSBzZWxmLnN0cm9uZ2VzdF9zaWduYXR1cmUoKT87CiAgICAgICAgIGxldCBzaWduZWRfZGF0YTogU2lnbmVkRGF0YSA9IHNlbGYuc2lnbmVkX2RhdGEuc2xpY2UoLi4pLnJlYWQoKT87CiAgICAgICAgIGxldCBkaWdlc3QgPSBzaWduZWRfZGF0YQpAQCAtMTU1LDcgKzE1NCwxMCBAQAogICAgICAgICAgICAgLml0ZXIoKQogICAgICAgICAgICAgLmZpbmQofCZkaWd8IGRpZy5zaWduYXR1cmVfYWxnb3JpdGhtX2lkID09IHN0cm9uZ2VzdC5zaWduYXR1cmVfYWxnb3JpdGhtX2lkKQogICAgICAgICAgICAgLmNvbnRleHQoIkRpZ2VzdCBub3QgZm91bmQiKT87Ci0gICAgICAgIE9rKChkaWdlc3Quc2lnbmF0dXJlX2FsZ29yaXRobV9pZCwgZGlnZXN0LmRpZ2VzdC5hc19yZWYoKS50b192ZWMoKS5pbnRvX2JveGVkX3NsaWNlKCkpKQorICAgICAgICBPaygoCisgICAgICAgICAgICBkaWdlc3Quc2lnbmF0dXJlX2FsZ29yaXRobV9pZC5jb250ZXh0KCJVbnN1cHBvcnRlZCBhbGdvcml0aG0iKT8sCisgICAgICAgICAgICBkaWdlc3QuZGlnZXN0LmFzX3JlZigpLnRvX3ZlYygpLmludG9fYm94ZWRfc2xpY2UoKSwKKyAgICAgICAgKSkKICAgICB9CiAKICAgICAvLy8gVGhlIHN0ZXBzIGluIHRoaXMgbWV0aG9kIGltcGxlbWVudHMgQVBLIFNpZ25hdHVyZSBTY2hlbWUgdjMgdmVyaWZpY2F0aW9uIHN0ZXAgMy4KQEAgLTE5NSw3ICsxOTcsOCBAQAogICAgICAgICAgICAgLml0ZXIoKQogICAgICAgICAgICAgLmZpbmQofCZkaWd8IGRpZy5zaWduYXR1cmVfYWxnb3JpdGhtX2lkID09IHN0cm9uZ2VzdC5zaWduYXR1cmVfYWxnb3JpdGhtX2lkKQogICAgICAgICAgICAgLnVud3JhcCgpOyAvLyBvayB0byB1bndyYXAgc2luY2Ugd2UgY2hlY2sgaWYgdHdvIGxpc3RzIGFyZSB0aGUgc2FtZSBhYm92ZQotICAgICAgICBsZXQgY29tcHV0ZWQgPSBzZWN0aW9ucy5jb21wdXRlX2RpZ2VzdChkaWdlc3Quc2lnbmF0dXJlX2FsZ29yaXRobV9pZCk/OworICAgICAgICBsZXQgY29tcHV0ZWQgPSBzZWN0aW9ucworICAgICAgICAgICAgLmNvbXB1dGVfZGlnZXN0KGRpZ2VzdC5zaWduYXR1cmVfYWxnb3JpdGhtX2lkLmNvbnRleHQoIlVuc3VwcG9ydGVkIGFsZ29yaXRobSIpPyk/OwogCiAgICAgICAgIC8vIDYuIFZlcmlmeSB0aGF0IHRoZSBjb21wdXRlZCBkaWdlc3QgaXMgaWRlbnRpY2FsIHRvIHRoZSBjb3JyZXNwb25kaW5nIGRpZ2VzdCBmcm9tIGRpZ2VzdHMuCiAgICAgICAgIGVuc3VyZSEoCkBAIC0yMjYsNyArMjI5LDggQEAKICAgICBzaWduYXR1cmU6ICZTaWduYXR1cmUsCiAgICAgcHVibGljX2tleTogJlBLZXk8cGtleTo6UHVibGljPiwKICkgLT4gUmVzdWx0PCgpPiB7Ci0gICAgbGV0IG11dCB2ZXJpZmllciA9IFNpZ25hdHVyZUFsZ29yaXRobUlEOjpmcm9tX3UzMihzaWduYXR1cmUuc2lnbmF0dXJlX2FsZ29yaXRobV9pZCkKKyAgICBsZXQgbXV0IHZlcmlmaWVyID0gc2lnbmF0dXJlCisgICAgICAgIC5zaWduYXR1cmVfYWxnb3JpdGhtX2lkCiAgICAgICAgIC5jb250ZXh0KCJVbnN1cHBvcnRlZCBhbGdvcml0aG0iKT8KICAgICAgICAgLm5ld192ZXJpZmllcihwdWJsaWNfa2V5KT87CiAgICAgdmVyaWZpZXIudXBkYXRlKGRhdGEpPzsKQEAgLTI3OCwzNiArMjgyLDMgQEAKIHB1YihjcmF0ZSkgZm4gdG9faGV4X3N0cmluZyhidWY6ICZbdThdKSAtPiBTdHJpbmcgewogICAgIGJ1Zi5pdGVyKCkubWFwKHxifCBmb3JtYXQhKCJ7OjAyWH0iLCBiKSkuY29sbGVjdCgpCiB9Ci0KLSNbY2ZnKHRlc3QpXQotbW9kIHRlc3RzIHsKLSAgICB1c2Ugc3VwZXI6Oio7Ci0gICAgdXNlIHN0ZDo6ZnM6OkZpbGU7Ci0KLSAgICAjW3Rlc3RdCi0gICAgZm4gdGVzdF9waWNrX3Y0X2Fwa19kaWdlc3Rfb25seV93aXRoX3YzX2RzYV9zaGEyNTYoKSB7Ci0gICAgICAgIGNoZWNrX3Y0X2Fwa19kaWdlc3QoCi0gICAgICAgICAgICAidGVzdHMvZGF0YS92My1vbmx5LXdpdGgtZHNhLXNoYTI1Ni0xMDI0LmFwayIsCi0gICAgICAgICAgICBTSUdOQVRVUkVfRFNBX1dJVEhfU0hBMjU2LAotICAgICAgICAgICAgIjBERjI0MjZFQTMzQUVEQUY0OTVEODhFNUJFMEM2QTE2NjNGRjBBODFDNUVEMTJENUIyOTI5QUU0QjQzMDBGMkYiLAotICAgICAgICApOwotICAgIH0KLQotICAgICNbdGVzdF0KLSAgICBmbiB0ZXN0X3BpY2tfdjRfYXBrX2RpZ2VzdF9vbmx5X3dpdGhfdjNfcGtjczFfc2hhNTEyKCkgewotICAgICAgICBjaGVja192NF9hcGtfZGlnZXN0KAotICAgICAgICAgICAgInRlc3RzL2RhdGEvdjMtb25seS13aXRoLXJzYS1wa2NzMS1zaGE1MTItMTAyNC5hcGsiLAotICAgICAgICAgICAgU0lHTkFUVVJFX1JTQV9QS0NTMV9WMV81X1dJVEhfU0hBNTEyLAotICAgICAgICAgICAgIjlCOUFFMDJEQTYwQjE4OTk5QkY1NDE3OTBGMDBEMzgwMDA2RkRGMDY1NUMzQzQ4MkFBMEJCMEFGMTdDRjdBNDJcCi0gICAgICAgICAgICAgRUNGNTZCOTczNTE4NTQ2QzkwODBCMkZFRjgzMDI3RTg5NUVEMjg4MkJGQzg4RUExOTc5MEJCQUIyOUFGNTNCMyIsCi0gICAgICAgICk7Ci0gICAgfQotCi0gICAgZm4gY2hlY2tfdjRfYXBrX2RpZ2VzdChhcGtfZmlsZW5hbWU6ICZzdHIsIGV4cGVjdGVkX2FsZ29yaXRobTogdTMyLCBleHBlY3RlZF9kaWdlc3Q6ICZzdHIpIHsKLSAgICAgICAgbGV0IGFwa19maWxlID0gRmlsZTo6b3BlbihhcGtfZmlsZW5hbWUpLnVud3JhcCgpOwotICAgICAgICBsZXQgKHNpZ25hdHVyZV9hbGdvcml0aG1faWQsIGFwa19kaWdlc3QpID0gcGlja192NF9hcGtfZGlnZXN0KGFwa19maWxlKS51bndyYXAoKTsKLQotICAgICAgICBhc3NlcnRfZXEhKGV4cGVjdGVkX2FsZ29yaXRobSwgc2lnbmF0dXJlX2FsZ29yaXRobV9pZCk7Ci0gICAgICAgIGFzc2VydF9lcSEoZXhwZWN0ZWRfZGlnZXN0LCB0b19oZXhfc3RyaW5nKGFwa19kaWdlc3QuYXNfcmVmKCkpKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9hcGt2ZXJpZnlfdGVzdC5ycyBiL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2Fwa3ZlcmlmeV90ZXN0LnJzCmluZGV4IDM4MTgyNTkuLjViZDkwMWQgMTAwNjQ0Ci0tLSBhL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2Fwa3ZlcmlmeV90ZXN0LnJzCisrKyBiL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2Fwa3ZlcmlmeV90ZXN0LnJzCkBAIC0xNCw4ICsxNCwxMCBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIAotdXNlIGFwa3ZlcmlmeTo6e3Rlc3Rpbmc6OmFzc2VydF9jb250YWlucywgdmVyaWZ5fTsKLXVzZSBzdGQ6Om1hdGNoZXM7Cit1c2UgYXBrdmVyaWZ5Ojp7CisgICAgZ2V0X3B1YmxpY19rZXlfZGVyLCBwaWNrX3Y0X2Fwa19kaWdlc3QsIHRlc3Rpbmc6OmFzc2VydF9jb250YWlucywgdmVyaWZ5LCBTaWduYXR1cmVBbGdvcml0aG1JRCwKK307Cit1c2Ugc3RkOjp7ZnMsIG1hdGNoZXMsIHBhdGg6OlBhdGh9OwogCiBjb25zdCBLRVlfTkFNRVNfRFNBOiAmWyZzdHJdID0gJlsiMTAyNCIsICIyMDQ4IiwgIjMwNzIiXTsKIGNvbnN0IEtFWV9OQU1FU19FQ0RTQTogJlsmc3RyXSA9ICZbInAyNTYiLCAicDM4NCIsICJwNTIxIl07CkBAIC0zMyw4ICszNSw4IEBACiB9CiAKICNbdGVzdF0KLWZuIHRlc3RfdmVyaWZ5X3YzKCkgewotICAgIGFzc2VydCEodmVyaWZ5KCJ0ZXN0cy9kYXRhL3Rlc3QuYXBleCIpLmlzX29rKCkpOworZm4gYXBleF9zaWduZWRfd2l0aF92M19yc2FfcGtjczFfc2hhNTEyX2lzX3ZhbGlkKCkgeworICAgIHZhbGlkYXRlX2FwaygidGVzdHMvZGF0YS90ZXN0LmFwZXgiLCBTaWduYXR1cmVBbGdvcml0aG1JRDo6UnNhUGtjczFWMTVXaXRoU2hhNTEyKTsKIH0KIAogI1t0ZXN0XQpAQCAtNDYsMzQgKzQ4LDUzIEBACiAgICAgfQogfQogCisvLy8gVE9ETyhiLzE5NzA1Mjk4MSk6IERTQSBhbGdvcml0aG0gaXMgbm90IHlldCBzdXBwb3J0ZWQuCiAjW3Rlc3RdCi1mbiB0ZXN0X3ZlcmlmeV92M19lY2RzYV9zaGEyNTYoKSB7Ci0gICAgZm9yIGtleV9uYW1lIGluIEtFWV9OQU1FU19FQ0RTQS5pdGVyKCkgewotICAgICAgICBhc3NlcnQhKHZlcmlmeShmb3JtYXQhKCJ0ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1lY2RzYS1zaGEyNTYte30uYXBrIiwga2V5X25hbWUpKS5pc19vaygpKTsKLSAgICB9Ci19Ci0KLSNbdGVzdF0KLWZuIHRlc3RfdmVyaWZ5X3YzX2VjZHNhX3NoYTUxMigpIHsKLSAgICBmb3Iga2V5X25hbWUgaW4gS0VZX05BTUVTX0VDRFNBLml0ZXIoKSB7Ci0gICAgICAgIGFzc2VydCEodmVyaWZ5KGZvcm1hdCEoInRlc3RzL2RhdGEvdjMtb25seS13aXRoLWVjZHNhLXNoYTUxMi17fS5hcGsiLCBrZXlfbmFtZSkpLmlzX29rKCkpOwotICAgIH0KLX0KLQotI1t0ZXN0XQotZm4gdGVzdF92ZXJpZnlfdjNfcnNhX3NoYTI1NigpIHsKLSAgICBmb3Iga2V5X25hbWUgaW4gS0VZX05BTUVTX1JTQS5pdGVyKCkgewotICAgICAgICBhc3NlcnQhKAotICAgICAgICAgICAgdmVyaWZ5KGZvcm1hdCEoInRlc3RzL2RhdGEvdjMtb25seS13aXRoLXJzYS1wa2NzMS1zaGEyNTYte30uYXBrIiwga2V5X25hbWUpKS5pc19vaygpCitmbiBhcGtzX3NpZ25lZF93aXRoX3YzX2RzYV9zaGEyNTZfaGF2ZV92YWxpZF9hcGtfZGlnZXN0KCkgeworICAgIGZvciBrZXlfbmFtZSBpbiBLRVlfTkFNRVNfRFNBLml0ZXIoKSB7CisgICAgICAgIHZhbGlkYXRlX2Fwa19kaWdlc3QoCisgICAgICAgICAgICBmb3JtYXQhKCJ0ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1kc2Etc2hhMjU2LXt9LmFwayIsIGtleV9uYW1lKSwKKyAgICAgICAgICAgIFNpZ25hdHVyZUFsZ29yaXRobUlEOjpEc2FXaXRoU2hhMjU2LAogICAgICAgICApOwogICAgIH0KIH0KIAogI1t0ZXN0XQotZm4gdGVzdF92ZXJpZnlfdjNfcnNhX3NoYTUxMigpIHsKK2ZuIGFwa3Nfc2lnbmVkX3dpdGhfdjNfZWNkc2Ffc2hhMjU2X2FyZV92YWxpZCgpIHsKKyAgICBmb3Iga2V5X25hbWUgaW4gS0VZX05BTUVTX0VDRFNBLml0ZXIoKSB7CisgICAgICAgIHZhbGlkYXRlX2FwaygKKyAgICAgICAgICAgIGZvcm1hdCEoInRlc3RzL2RhdGEvdjMtb25seS13aXRoLWVjZHNhLXNoYTI1Ni17fS5hcGsiLCBrZXlfbmFtZSksCisgICAgICAgICAgICBTaWduYXR1cmVBbGdvcml0aG1JRDo6RWNkc2FXaXRoU2hhMjU2LAorICAgICAgICApOworICAgIH0KK30KKworI1t0ZXN0XQorZm4gYXBrc19zaWduZWRfd2l0aF92M19lY2RzYV9zaGE1MTJfYXJlX3ZhbGlkKCkgeworICAgIGZvciBrZXlfbmFtZSBpbiBLRVlfTkFNRVNfRUNEU0EuaXRlcigpIHsKKyAgICAgICAgdmFsaWRhdGVfYXBrKAorICAgICAgICAgICAgZm9ybWF0ISgidGVzdHMvZGF0YS92My1vbmx5LXdpdGgtZWNkc2Etc2hhNTEyLXt9LmFwayIsIGtleV9uYW1lKSwKKyAgICAgICAgICAgIFNpZ25hdHVyZUFsZ29yaXRobUlEOjpFY2RzYVdpdGhTaGE1MTIsCisgICAgICAgICk7CisgICAgfQorfQorCisjW3Rlc3RdCitmbiBhcGtzX3NpZ25lZF93aXRoX3YzX3JzYV9wa2NzMV9zaGEyNTZfYXJlX3ZhbGlkKCkgewogICAgIGZvciBrZXlfbmFtZSBpbiBLRVlfTkFNRVNfUlNBLml0ZXIoKSB7Ci0gICAgICAgIGFzc2VydCEoCi0gICAgICAgICAgICB2ZXJpZnkoZm9ybWF0ISgidGVzdHMvZGF0YS92My1vbmx5LXdpdGgtcnNhLXBrY3MxLXNoYTUxMi17fS5hcGsiLCBrZXlfbmFtZSkpLmlzX29rKCkKKyAgICAgICAgdmFsaWRhdGVfYXBrKAorICAgICAgICAgICAgZm9ybWF0ISgidGVzdHMvZGF0YS92My1vbmx5LXdpdGgtcnNhLXBrY3MxLXNoYTI1Ni17fS5hcGsiLCBrZXlfbmFtZSksCisgICAgICAgICAgICBTaWduYXR1cmVBbGdvcml0aG1JRDo6UnNhUGtjczFWMTVXaXRoU2hhMjU2LAorICAgICAgICApOworICAgIH0KK30KKworI1t0ZXN0XQorZm4gYXBrc19zaWduZWRfd2l0aF92M19yc2FfcGtjczFfc2hhNTEyX2FyZV92YWxpZCgpIHsKKyAgICBmb3Iga2V5X25hbWUgaW4gS0VZX05BTUVTX1JTQS5pdGVyKCkgeworICAgICAgICB2YWxpZGF0ZV9hcGsoCisgICAgICAgICAgICBmb3JtYXQhKCJ0ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhNTEyLXt9LmFwayIsIGtleV9uYW1lKSwKKyAgICAgICAgICAgIFNpZ25hdHVyZUFsZ29yaXRobUlEOjpSc2FQa2NzMVYxNVdpdGhTaGE1MTIsCiAgICAgICAgICk7CiAgICAgfQogfQpAQCAtMTY2LDIxICsxODcsODggQEAKIH0KIAogI1t0ZXN0XQotZm4gdGVzdF92ZXJpZnlfdjNfdW5rbm93bl9hZGRpdGlvbmFsX2F0dHIoKSB7Ci0gICAgYXNzZXJ0ISh2ZXJpZnkoInRlc3RzL2RhdGEvdjMtb25seS11bmtub3duLWFkZGl0aW9uYWwtYXR0ci5hcGsiKS5pc19vaygpKTsKK2ZuIGFwa19zaWduZWRfd2l0aF92M191bmtub3duX2FkZGl0aW9uYWxfYXR0cl9pc192YWxpZCgpIHsKKyAgICB2YWxpZGF0ZV9hcGsoCisgICAgICAgICJ0ZXN0cy9kYXRhL3YzLW9ubHktdW5rbm93bi1hZGRpdGlvbmFsLWF0dHIuYXBrIiwKKyAgICAgICAgU2lnbmF0dXJlQWxnb3JpdGhtSUQ6OlJzYVBrY3MxVjE1V2l0aFNoYTI1NiwKKyAgICApOwogfQogCiAjW3Rlc3RdCi1mbiB0ZXN0X3ZlcmlmeV92M191bmtub3duX3BhaXJfaW5fYXBrX3NpZ19ibG9jaygpIHsKLSAgICBhc3NlcnQhKHZlcmlmeSgidGVzdHMvZGF0YS92My1vbmx5LXVua25vd24tcGFpci1pbi1hcGstc2lnLWJsb2NrLmFwayIpLmlzX29rKCkpOworZm4gYXBrX3NpZ25lZF93aXRoX3YzX3Vua25vd25fcGFpcl9pbl9hcGtfc2lnX2Jsb2NrX2lzX3ZhbGlkKCkgeworICAgIHZhbGlkYXRlX2FwaygKKyAgICAgICAgInRlc3RzL2RhdGEvdjMtb25seS11bmtub3duLXBhaXItaW4tYXBrLXNpZy1ibG9jay5hcGsiLAorICAgICAgICBTaWduYXR1cmVBbGdvcml0aG1JRDo6UnNhUGtjczFWMTVXaXRoU2hhMjU2LAorICAgICk7CiB9CiAKICNbdGVzdF0KLWZuIHRlc3RfdmVyaWZ5X3YzX2lnbm9yYWJsZV91bnN1cHBvcnRlZF9zaWdfYWxncygpIHsKLSAgICBhc3NlcnQhKHZlcmlmeSgidGVzdHMvZGF0YS92My1vbmx5LXdpdGgtaWdub3JhYmxlLXVuc3VwcG9ydGVkLXNpZy1hbGdzLmFwayIpLmlzX29rKCkpOworZm4gYXBrX3NpZ25lZF93aXRoX3YzX2lnbm9yYWJsZV91bnN1cHBvcnRlZF9zaWdfYWxnc19pc192YWxpZCgpIHsKKyAgICB2YWxpZGF0ZV9hcGsoCisgICAgICAgICJ0ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1pZ25vcmFibGUtdW5zdXBwb3J0ZWQtc2lnLWFsZ3MuYXBrIiwKKyAgICAgICAgU2lnbmF0dXJlQWxnb3JpdGhtSUQ6OlJzYVBrY3MxVjE1V2l0aFNoYTI1NiwKKyAgICApOwogfQogCiAjW3Rlc3RdCi1mbiB0ZXN0X3ZlcmlmeV92M19zdGFtcCgpIHsKLSAgICBhc3NlcnQhKHZlcmlmeSgidGVzdHMvZGF0YS92My1vbmx5LXdpdGgtc3RhbXAuYXBrIikuaXNfb2soKSk7CitmbiBhcGtfc2lnbmVkX3dpdGhfdjNfc3RhbXBfaXNfdmFsaWQoKSB7CisgICAgdmFsaWRhdGVfYXBrKCJ0ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1zdGFtcC5hcGsiLCBTaWduYXR1cmVBbGdvcml0aG1JRDo6RWNkc2FXaXRoU2hhMjU2KTsKK30KKworZm4gdmFsaWRhdGVfYXBrPFA6IEFzUmVmPFBhdGg+PihhcGtfcGF0aDogUCwgZXhwZWN0ZWRfYWxnb3JpdGhtX2lkOiBTaWduYXR1cmVBbGdvcml0aG1JRCkgeworICAgIHZhbGlkYXRlX2Fwa19wdWJsaWNfa2V5KCZhcGtfcGF0aCk7CisgICAgdmFsaWRhdGVfYXBrX2RpZ2VzdCgmYXBrX3BhdGgsIGV4cGVjdGVkX2FsZ29yaXRobV9pZCk7Cit9CisKKy8vLyBWYWxpZGF0ZXMgdGhhdCB0aGUgZm9sbG93aW5nIHB1YmxpYyBrZXlzIGFyZSBlcXVhbDoKKy8vLyAqIHB1YmxpYyBrZXkgZnJvbSB2ZXJpZmljYXRpb24KKy8vLyAqIHB1YmxpYyBrZXkgZXh0cmFjdGVkIGZyb20gYXBrIHdpdGhvdXQgdmVyaWZpY2F0aW9uCisvLy8gKiBleHBlY3RlZCBwdWJsaWMga2V5IGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgLmRlciBmaWxlCitmbiB2YWxpZGF0ZV9hcGtfcHVibGljX2tleTxQOiBBc1JlZjxQYXRoPj4oYXBrX3BhdGg6IFApIHsKKyAgICBsZXQgcHVibGljX2tleV9mcm9tX3ZlcmlmaWNhdGlvbiA9IHZlcmlmeSgmYXBrX3BhdGgpOworICAgIGxldCBwdWJsaWNfa2V5X2Zyb21fdmVyaWZpY2F0aW9uID0KKyAgICAgICAgcHVibGljX2tleV9mcm9tX3ZlcmlmaWNhdGlvbi5leHBlY3QoIkVycm9yIGluIHZlcmlmaWNhdGlvbiByZXN1bHQiKTsKKworICAgIGxldCBleHBlY3RlZF9wdWJsaWNfa2V5X3BhdGggPSBmb3JtYXQhKCJ7fS5kZXIiLCBhcGtfcGF0aC5hc19yZWYoKS50b19zdHIoKS51bndyYXAoKSk7CisgICAgYXNzZXJ0X2J5dGVzX2VxX3RvX2RhdGFfaW5fZmlsZSgmcHVibGljX2tleV9mcm9tX3ZlcmlmaWNhdGlvbiwgZXhwZWN0ZWRfcHVibGljX2tleV9wYXRoKTsKKworICAgIGxldCBwdWJsaWNfa2V5X2Zyb21fYXBrID0gZ2V0X3B1YmxpY19rZXlfZGVyKCZhcGtfcGF0aCk7CisgICAgbGV0IHB1YmxpY19rZXlfZnJvbV9hcGsgPQorICAgICAgICBwdWJsaWNfa2V5X2Zyb21fYXBrLmV4cGVjdCgiRXJyb3Igd2hlbiBleHRyYWN0aW5nIHB1YmxpYyBrZXkgZnJvbSBhcGsiKTsKKyAgICBhc3NlcnRfZXEhKAorICAgICAgICBwdWJsaWNfa2V5X2Zyb21fdmVyaWZpY2F0aW9uLCBwdWJsaWNfa2V5X2Zyb21fYXBrLAorICAgICAgICAiUHVibGljIGtleSBleHRyYWN0ZWQgZGlyZWN0bHkgZnJvbSBhcGsgZG9lcyBub3QgbWF0Y2ggdGhlIHB1YmxpYyBrZXkgZnJvbSB2ZXJpZmljYXRpb24uIgorICAgICk7Cit9CisKKy8vLyBWYWxpZGF0ZXMgdGhhdCB0aGUgZm9sbG93aW5nIGFwa19kaWdlc3QgYXJlIGVxdWFsOgorLy8vICogYXBrX2RpZ2VzdCBkaXJlY3RseSBleHRyYWN0ZWQgZnJvbSBhcGsgd2l0aG91dCBjb21wdXRhdGlvbgorLy8vICogZXhwZWN0ZWQgYXBrIGRpZ2VzdCBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIC5hcGtfZGlnZXN0IGZpbGUKK2ZuIHZhbGlkYXRlX2Fwa19kaWdlc3Q8UDogQXNSZWY8UGF0aD4+KGFwa19wYXRoOiBQLCBleHBlY3RlZF9hbGdvcml0aG1faWQ6IFNpZ25hdHVyZUFsZ29yaXRobUlEKSB7CisgICAgbGV0IGFwayA9IGZzOjpGaWxlOjpvcGVuKCZhcGtfcGF0aCkuZXhwZWN0KCJVbmFibGVkIHRvIG9wZW4gYXBrIGZpbGUiKTsKKworICAgIGxldCAoc2lnbmF0dXJlX2FsZ29yaXRobV9pZCwgZGlnZXN0X2Zyb21fYXBrKSA9CisgICAgICAgIHBpY2tfdjRfYXBrX2RpZ2VzdChhcGspLmV4cGVjdCgiRXJyb3Igd2hlbiBleHRyYWN0aW5nIGFwayBkaWdlc3QuIik7CisKKyAgICBhc3NlcnRfZXEhKGV4cGVjdGVkX2FsZ29yaXRobV9pZCwgc2lnbmF0dXJlX2FsZ29yaXRobV9pZCk7CisgICAgbGV0IGV4cGVjdGVkX2RpZ2VzdF9wYXRoID0gZm9ybWF0ISgie30uYXBrX2RpZ2VzdCIsIGFwa19wYXRoLmFzX3JlZigpLnRvX3N0cigpLnVud3JhcCgpKTsKKyAgICBhc3NlcnRfYnl0ZXNfZXFfdG9fZGF0YV9pbl9maWxlKCZkaWdlc3RfZnJvbV9hcGssIGV4cGVjdGVkX2RpZ2VzdF9wYXRoKTsKK30KKworZm4gYXNzZXJ0X2J5dGVzX2VxX3RvX2RhdGFfaW5fZmlsZTxQOiBBc1JlZjxQYXRoPiArIHN0ZDo6Zm10OjpEaXNwbGF5PigKKyAgICBieXRlc19kYXRhOiAmW3U4XSwKKyAgICBleHBlY3RlZF9kYXRhX3BhdGg6IFAsCispIHsKKyAgICBhc3NlcnQhKAorICAgICAgICBmczo6bWV0YWRhdGEoJmV4cGVjdGVkX2RhdGFfcGF0aCkuaXNfb2soKSwKKyAgICAgICAgIkZpbGUgZG9lcyBub3QgZXhpc3QuIFlvdSBjYW4gcmUtY3JlYXRlIGl0IHdpdGg6XG4kIGVjaG8gLWVuIHt9ID4ge31cbiIsCisgICAgICAgIGJ5dGVzX2RhdGEuaXRlcigpLm1hcCh8YnwgZm9ybWF0ISgiXFxcXHh7OjAyeH0iLCBiKSkuY29sbGVjdDo6PFN0cmluZz4oKSwKKyAgICAgICAgZXhwZWN0ZWRfZGF0YV9wYXRoCisgICAgKTsKKyAgICBsZXQgZXhwZWN0ZWRfZGF0YSA9IGZzOjpyZWFkKCZleHBlY3RlZF9kYXRhX3BhdGgpLnVud3JhcCgpOworICAgIGFzc2VydF9lcSEoCisgICAgICAgIGV4cGVjdGVkX2RhdGEsIGJ5dGVzX2RhdGEsCisgICAgICAgICJBY3R1YWwgZGF0YSBkb2VzIG5vdCBtYXRjaCB0aGUgZGF0YSBmcm9tOiB7fSIsCisgICAgICAgIGV4cGVjdGVkX2RhdGFfcGF0aAorICAgICk7CiB9CmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL1JFQURNRS5tZCBiL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2RhdGEvUkVBRE1FLm1kCmluZGV4IDc1NTY5MjEuLjdiYTVkOGUgMTAwNjQ0Ci0tLSBhL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2RhdGEvUkVBRE1FLm1kCisrKyBiL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2RhdGEvUkVBRE1FLm1kCkBAIC0xLDYgKzEsMTAgQEAKKyMgQWJvdXQgdGVzdCBkYXRhCisKKyMjIC5hcGsKKwogdGVzdC5hcGV4IGlzIGNvcGllZCBmcm9tIEFEQkQgYXBleCBidWlsdCBpbiBBT1NQLgogCi1gYGBzaAorYGBgYmFzaAogJCBhcGtzaWduZXIgdmVyaWZ5IC12IHRlc3QuYXBleAogVmVyaWZpZXMKIFZlcmlmaWVkIHVzaW5nIHYxIHNjaGVtZSAoSkFSIHNpZ25pbmcpOiBmYWxzZQpAQCAtMTEsNCArMTUsMjAgQEAKIE51bWJlciBvZiBzaWduZXJzOiAxCiBgYGAKIAotQVBLIGZpbGVzIGFyZSBjb3BpZWQgZnJvbSB0b29scy9hcGtzaWcvc3JjL3Rlc3QvcmVzb3VyY2VzL2NvbS9hbmRyb2lkL2Fwa3NpZy8uCitBUEsgZmlsZXMgYXJlIGNvcGllZCBmcm9tIFt0b29scy9hcGtzaWcvc3JjL3Rlc3QvcmVzb3VyY2VzL2NvbS9hbmRyb2lkL2Fwa3NpZy9dKGh0dHBzOi8vY3MuYW5kcm9pZC5jb20vYW5kcm9pZC9wbGF0Zm9ybS9zdXBlcnByb2plY3QvKy9tYXN0ZXI6dG9vbHMvYXBrc2lnL3NyYy90ZXN0L3Jlc291cmNlcy9jb20vYW5kcm9pZC9hcGtzaWcvO2w9MTtkcmM9YzJhOGRhMTkxM2Q3ZmIzNTliMDIzYmYyMDBlMzFkNzVmZjIyYTVjMykuCisKKyMjIC5kZXIKKworYC5kZXJgIGZpbGVzIGNvbnRhaW4gdGhlIGV4cGVjdGVkIHB1YmxpYyBrZXlzLiBXaGVuIHZhbGlkYXRpbmcgdGhlIHB1YmxpYyBrZXlzIGluIHRlc3RzLCBpZiB0aGUgY29ycmVzcG9uZGluZyBgLmRlcmAgZmlsZSBpcyBtaXNzaW5nLCB0aGVyZSB3aWxsIGJlIHNvbWUgdGV4dCBhcyBmb2xsb3dzIGluIHRoZSBmYWlsdXJlIG1lc3NhZ2U6CisKK2BgYGJhc2gKKyQgZWNobyAtZW4gXFx4MzBcXHg1OVxceDMwXFx4MTNcXHgwNlxceDA3XFx4MmFcXHg4NlxceDQ4XFx4Y2VcXHgzZFxceDAyXFx4MDFcXHgwNlxceDA4XFx4MmFcXHg4NlxceDQ4XFx4Y2VcXHgzZFxceDAzXFx4MDFcXHgwN1xceDAzXFx4NDJcXHgwMFxceDA0XFx4YTZcXHg1ZlxceDExXFx4M2RcXHgyMlxceGNiXFx4NDlcXHgxM1xceDkwXFx4ODNcXHgwN1xceGFjXFx4MzFcXHhlZVxceDJiXFx4YTBcXHhlOVxceDEzXFx4OGJcXHg3OFxceDVmXFx4YWNcXHg2NVxceDM2XFx4ZDFcXHg0ZVxceGEyXFx4Y2VcXHg5MFxceGQyXFx4YjRcXHhiZlxceGUxXFx4OTRcXHhiNVxceDBjXFx4ZGNcXHg4ZVxceDE2XFx4OWZcXHg1NFxceGE3XFx4M2FcXHg5OVxceDFlXFx4ZjBcXHhmYVxceDc2XFx4MzJcXHg5OFxceDI1XFx4YmVcXHgwN1xceDhjXFx4YzdcXHg4MlxceDc0XFx4MDdcXHgwM1xceGRhXFx4NDRcXHhiNFxceGQ3XFx4ZWIgPiB0ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1zdGFtcC5hcGsuZGVyCitgYGAKKworWW91IGp1c3QgbmVlZCB0byBleGVjdXRlIHRoaXMgY29tbWFuZCBpbiB0aGUgZm9sZGVyIGBsaWJzL2Fwa3ZlcmlmeWAgdG8gZ2VuZXJhdGUgdGhlIGNvcnJlc3BvbmRpbmcgYC5kZXJgIGZpbGUuIEFmdGVyIGl0LCB5b3UgY2FuIHJ1biB0aGUgdGVzdCBhZ2FpbiwgYW5kIHRoZSB0ZXN0IHdpbGwgcGFzcy4KKworT3RoZXJ3aXNlLCB5b3UgY2FuIGFsc28gdXNlIHRoZSBjb21tYW5kIGBhcGtzaWduZXIgdmVyaWZ5IC0tbWluLXNkay12ZXJzaW9uIDI0IC0tcHJpbnQtY2VydHMtcGVtIHRlc3RzL2RhdGEvdjMtb25seS13aXRoLXN0YW1wLmFwa2AgdG8gZ2V0IHRoZSBwdWJsaWMga2V5IGluIGAucGVtYCBmb3JtYXQgYW5kIHRoZW4gY29udmVydCBpdCB0byBgLmRlcmAgd2l0aCBvcGVuc3NsLgorCisjIyAuYXBrX2RpZ2VzdAorCitgLmFwa19kaWdlc3RgIGZpbGVzIGNvbnRhaW4gdGhlIGV4cGVjdGVkIFthcGtfZGlnZXN0XShodHRwczovL3NvdXJjZS5hbmRyb2lkLmNvbS9kb2NzL3NlY3VyaXR5L2ZlYXR1cmVzL2Fwa3NpZ25pbmcvdjQjYXBrLWRpZ2VzdCkuIFRoZXkgYXJlIGdlbmVyYXRlZCB0aGUgc2FtZSB3YXkgYXMgYC5kZXJgIHdoZW4gdmFsaWRhdGluZyB0aGUgYXBrX2RpZ2VzdC4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3Rlc3QuYXBleC5hcGtfZGlnZXN0IGIvbGlicy9hcGt2ZXJpZnkvdGVzdHMvZGF0YS90ZXN0LmFwZXguYXBrX2RpZ2VzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWE3MzQwCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9hcGt2ZXJpZnkvdGVzdHMvZGF0YS90ZXN0LmFwZXguYXBrX2RpZ2VzdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3Rlc3QuYXBleC5kZXIgYi9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3Rlc3QuYXBleC5kZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJlYjFlYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2RhdGEvdGVzdC5hcGV4LmRlcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktdW5rbm93bi1hZGRpdGlvbmFsLWF0dHIuYXBrLmFwa19kaWdlc3QgYi9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktdW5rbm93bi1hZGRpdGlvbmFsLWF0dHIuYXBrLmFwa19kaWdlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVhZWMxOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2RhdGEvdjMtb25seS11bmtub3duLWFkZGl0aW9uYWwtYXR0ci5hcGsuYXBrX2RpZ2VzdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktdW5rbm93bi1hZGRpdGlvbmFsLWF0dHIuYXBrLmRlciBiL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2RhdGEvdjMtb25seS11bmtub3duLWFkZGl0aW9uYWwtYXR0ci5hcGsuZGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3NTM1Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktdW5rbm93bi1hZGRpdGlvbmFsLWF0dHIuYXBrLmRlcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktdW5rbm93bi1wYWlyLWluLWFway1zaWctYmxvY2suYXBrLmFwa19kaWdlc3QgYi9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktdW5rbm93bi1wYWlyLWluLWFway1zaWctYmxvY2suYXBrLmFwa19kaWdlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVhZWMxOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2RhdGEvdjMtb25seS11bmtub3duLXBhaXItaW4tYXBrLXNpZy1ibG9jay5hcGsuYXBrX2RpZ2VzdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktdW5rbm93bi1wYWlyLWluLWFway1zaWctYmxvY2suYXBrLmRlciBiL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2RhdGEvdjMtb25seS11bmtub3duLXBhaXItaW4tYXBrLXNpZy1ibG9jay5hcGsuZGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhYWZkMDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktdW5rbm93bi1wYWlyLWluLWFway1zaWctYmxvY2suYXBrLmRlcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1kc2Etc2hhMjU2LTEwMjQuYXBrLmFwa19kaWdlc3QgYi9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1kc2Etc2hhMjU2LTEwMjQuYXBrLmFwa19kaWdlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVhZWMxOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2RhdGEvdjMtb25seS13aXRoLWRzYS1zaGEyNTYtMTAyNC5hcGsuYXBrX2RpZ2VzdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1kc2Etc2hhMjU2LTIwNDguYXBrLmFwa19kaWdlc3QgYi9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1kc2Etc2hhMjU2LTIwNDguYXBrLmFwa19kaWdlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVhZWMxOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2RhdGEvdjMtb25seS13aXRoLWRzYS1zaGEyNTYtMjA0OC5hcGsuYXBrX2RpZ2VzdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1kc2Etc2hhMjU2LTMwNzIuYXBrLmFwa19kaWdlc3QgYi9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1kc2Etc2hhMjU2LTMwNzIuYXBrLmFwa19kaWdlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVhZWMxOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2RhdGEvdjMtb25seS13aXRoLWRzYS1zaGEyNTYtMzA3Mi5hcGsuYXBrX2RpZ2VzdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1lY2RzYS1zaGEyNTYtcDI1Ni5hcGsuYXBrX2RpZ2VzdCBiL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2RhdGEvdjMtb25seS13aXRoLWVjZHNhLXNoYTI1Ni1wMjU2LmFway5hcGtfZGlnZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1YWVjMTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1lY2RzYS1zaGEyNTYtcDI1Ni5hcGsuYXBrX2RpZ2VzdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1lY2RzYS1zaGEyNTYtcDI1Ni5hcGsuZGVyIGIvbGlicy9hcGt2ZXJpZnkvdGVzdHMvZGF0YS92My1vbmx5LXdpdGgtZWNkc2Etc2hhMjU2LXAyNTYuYXBrLmRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTkyN2FmCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9hcGt2ZXJpZnkvdGVzdHMvZGF0YS92My1vbmx5LXdpdGgtZWNkc2Etc2hhMjU2LXAyNTYuYXBrLmRlcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1lY2RzYS1zaGEyNTYtcDM4NC5hcGsuYXBrX2RpZ2VzdCBiL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2RhdGEvdjMtb25seS13aXRoLWVjZHNhLXNoYTI1Ni1wMzg0LmFway5hcGtfZGlnZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1YWVjMTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1lY2RzYS1zaGEyNTYtcDM4NC5hcGsuYXBrX2RpZ2VzdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1lY2RzYS1zaGEyNTYtcDM4NC5hcGsuZGVyIGIvbGlicy9hcGt2ZXJpZnkvdGVzdHMvZGF0YS92My1vbmx5LXdpdGgtZWNkc2Etc2hhMjU2LXAzODQuYXBrLmRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWJhZjQwCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9hcGt2ZXJpZnkvdGVzdHMvZGF0YS92My1vbmx5LXdpdGgtZWNkc2Etc2hhMjU2LXAzODQuYXBrLmRlcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1lY2RzYS1zaGEyNTYtcDUyMS5hcGsuYXBrX2RpZ2VzdCBiL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2RhdGEvdjMtb25seS13aXRoLWVjZHNhLXNoYTI1Ni1wNTIxLmFway5hcGtfZGlnZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1YWVjMTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1lY2RzYS1zaGEyNTYtcDUyMS5hcGsuYXBrX2RpZ2VzdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1lY2RzYS1zaGEyNTYtcDUyMS5hcGsuZGVyIGIvbGlicy9hcGt2ZXJpZnkvdGVzdHMvZGF0YS92My1vbmx5LXdpdGgtZWNkc2Etc2hhMjU2LXA1MjEuYXBrLmRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjhmOTI1Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9hcGt2ZXJpZnkvdGVzdHMvZGF0YS92My1vbmx5LXdpdGgtZWNkc2Etc2hhMjU2LXA1MjEuYXBrLmRlcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1lY2RzYS1zaGE1MTItcDI1Ni5hcGsuYXBrX2RpZ2VzdCBiL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2RhdGEvdjMtb25seS13aXRoLWVjZHNhLXNoYTUxMi1wMjU2LmFway5hcGtfZGlnZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmZTFiNjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1lY2RzYS1zaGE1MTItcDI1Ni5hcGsuYXBrX2RpZ2VzdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1lY2RzYS1zaGE1MTItcDI1Ni5hcGsuZGVyIGIvbGlicy9hcGt2ZXJpZnkvdGVzdHMvZGF0YS92My1vbmx5LXdpdGgtZWNkc2Etc2hhNTEyLXAyNTYuYXBrLmRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTkyN2FmCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9hcGt2ZXJpZnkvdGVzdHMvZGF0YS92My1vbmx5LXdpdGgtZWNkc2Etc2hhNTEyLXAyNTYuYXBrLmRlcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1lY2RzYS1zaGE1MTItcDM4NC5hcGsuYXBrX2RpZ2VzdCBiL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2RhdGEvdjMtb25seS13aXRoLWVjZHNhLXNoYTUxMi1wMzg0LmFway5hcGtfZGlnZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmZTFiNjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1lY2RzYS1zaGE1MTItcDM4NC5hcGsuYXBrX2RpZ2VzdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1lY2RzYS1zaGE1MTItcDM4NC5hcGsuZGVyIGIvbGlicy9hcGt2ZXJpZnkvdGVzdHMvZGF0YS92My1vbmx5LXdpdGgtZWNkc2Etc2hhNTEyLXAzODQuYXBrLmRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWJhZjQwCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9hcGt2ZXJpZnkvdGVzdHMvZGF0YS92My1vbmx5LXdpdGgtZWNkc2Etc2hhNTEyLXAzODQuYXBrLmRlcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1lY2RzYS1zaGE1MTItcDUyMS5hcGsuYXBrX2RpZ2VzdCBiL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2RhdGEvdjMtb25seS13aXRoLWVjZHNhLXNoYTUxMi1wNTIxLmFway5hcGtfZGlnZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmZTFiNjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1lY2RzYS1zaGE1MTItcDUyMS5hcGsuYXBrX2RpZ2VzdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1lY2RzYS1zaGE1MTItcDUyMS5hcGsuZGVyIGIvbGlicy9hcGt2ZXJpZnkvdGVzdHMvZGF0YS92My1vbmx5LXdpdGgtZWNkc2Etc2hhNTEyLXA1MjEuYXBrLmRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjhmOTI1Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9hcGt2ZXJpZnkvdGVzdHMvZGF0YS92My1vbmx5LXdpdGgtZWNkc2Etc2hhNTEyLXA1MjEuYXBrLmRlcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1pZ25vcmFibGUtdW5zdXBwb3J0ZWQtc2lnLWFsZ3MuYXBrLmFwa19kaWdlc3QgYi9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1pZ25vcmFibGUtdW5zdXBwb3J0ZWQtc2lnLWFsZ3MuYXBrLmFwa19kaWdlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVhZWMxOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2RhdGEvdjMtb25seS13aXRoLWlnbm9yYWJsZS11bnN1cHBvcnRlZC1zaWctYWxncy5hcGsuYXBrX2RpZ2VzdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1pZ25vcmFibGUtdW5zdXBwb3J0ZWQtc2lnLWFsZ3MuYXBrLmRlciBiL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2RhdGEvdjMtb25seS13aXRoLWlnbm9yYWJsZS11bnN1cHBvcnRlZC1zaWctYWxncy5hcGsuZGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZGM1NDMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1pZ25vcmFibGUtdW5zdXBwb3J0ZWQtc2lnLWFsZ3MuYXBrLmRlcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhMjU2LTEwMjQuYXBrLmFwa19kaWdlc3QgYi9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhMjU2LTEwMjQuYXBrLmFwa19kaWdlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVhZWMxOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2RhdGEvdjMtb25seS13aXRoLXJzYS1wa2NzMS1zaGEyNTYtMTAyNC5hcGsuYXBrX2RpZ2VzdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhMjU2LTEwMjQuYXBrLmRlciBiL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2RhdGEvdjMtb25seS13aXRoLXJzYS1wa2NzMS1zaGEyNTYtMTAyNC5hcGsuZGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhYWZkMDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhMjU2LTEwMjQuYXBrLmRlcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhMjU2LTE2Mzg0LmFway5hcGtfZGlnZXN0IGIvbGlicy9hcGt2ZXJpZnkvdGVzdHMvZGF0YS92My1vbmx5LXdpdGgtcnNhLXBrY3MxLXNoYTI1Ni0xNjM4NC5hcGsuYXBrX2RpZ2VzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWFlYzE4Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9hcGt2ZXJpZnkvdGVzdHMvZGF0YS92My1vbmx5LXdpdGgtcnNhLXBrY3MxLXNoYTI1Ni0xNjM4NC5hcGsuYXBrX2RpZ2VzdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhMjU2LTE2Mzg0LmFway5kZXIgYi9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhMjU2LTE2Mzg0LmFway5kZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFhYmRjNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2RhdGEvdjMtb25seS13aXRoLXJzYS1wa2NzMS1zaGEyNTYtMTYzODQuYXBrLmRlcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhMjU2LTIwNDguYXBrLmFwa19kaWdlc3QgYi9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhMjU2LTIwNDguYXBrLmFwa19kaWdlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVhZWMxOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2RhdGEvdjMtb25seS13aXRoLXJzYS1wa2NzMS1zaGEyNTYtMjA0OC5hcGsuYXBrX2RpZ2VzdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhMjU2LTIwNDguYXBrLmRlciBiL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2RhdGEvdjMtb25seS13aXRoLXJzYS1wa2NzMS1zaGEyNTYtMjA0OC5hcGsuZGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZGM1NDMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhMjU2LTIwNDguYXBrLmRlcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhMjU2LTMwNzIuYXBrLmFwa19kaWdlc3QgYi9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhMjU2LTMwNzIuYXBrLmFwa19kaWdlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVhZWMxOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2RhdGEvdjMtb25seS13aXRoLXJzYS1wa2NzMS1zaGEyNTYtMzA3Mi5hcGsuYXBrX2RpZ2VzdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhMjU2LTMwNzIuYXBrLmRlciBiL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2RhdGEvdjMtb25seS13aXRoLXJzYS1wa2NzMS1zaGEyNTYtMzA3Mi5hcGsuZGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNzBmNWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhMjU2LTMwNzIuYXBrLmRlcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhMjU2LTQwOTYuYXBrLmFwa19kaWdlc3QgYi9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhMjU2LTQwOTYuYXBrLmFwa19kaWdlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVhZWMxOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2RhdGEvdjMtb25seS13aXRoLXJzYS1wa2NzMS1zaGEyNTYtNDA5Ni5hcGsuYXBrX2RpZ2VzdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhMjU2LTQwOTYuYXBrLmRlciBiL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2RhdGEvdjMtb25seS13aXRoLXJzYS1wa2NzMS1zaGEyNTYtNDA5Ni5hcGsuZGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1MTY0OGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhMjU2LTQwOTYuYXBrLmRlcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhMjU2LTgxOTIuYXBrLmFwa19kaWdlc3QgYi9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhMjU2LTgxOTIuYXBrLmFwa19kaWdlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVhZWMxOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2RhdGEvdjMtb25seS13aXRoLXJzYS1wa2NzMS1zaGEyNTYtODE5Mi5hcGsuYXBrX2RpZ2VzdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhMjU2LTgxOTIuYXBrLmRlciBiL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2RhdGEvdjMtb25seS13aXRoLXJzYS1wa2NzMS1zaGEyNTYtODE5Mi5hcGsuZGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1ZTVlZGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhMjU2LTgxOTIuYXBrLmRlcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhNTEyLTEwMjQuYXBrLmFwa19kaWdlc3QgYi9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhNTEyLTEwMjQuYXBrLmFwa19kaWdlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZlMWI2NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2RhdGEvdjMtb25seS13aXRoLXJzYS1wa2NzMS1zaGE1MTItMTAyNC5hcGsuYXBrX2RpZ2VzdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhNTEyLTEwMjQuYXBrLmRlciBiL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2RhdGEvdjMtb25seS13aXRoLXJzYS1wa2NzMS1zaGE1MTItMTAyNC5hcGsuZGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhYWZkMDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhNTEyLTEwMjQuYXBrLmRlcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhNTEyLTE2Mzg0LmFway5hcGtfZGlnZXN0IGIvbGlicy9hcGt2ZXJpZnkvdGVzdHMvZGF0YS92My1vbmx5LXdpdGgtcnNhLXBrY3MxLXNoYTUxMi0xNjM4NC5hcGsuYXBrX2RpZ2VzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmUxYjY1Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9hcGt2ZXJpZnkvdGVzdHMvZGF0YS92My1vbmx5LXdpdGgtcnNhLXBrY3MxLXNoYTUxMi0xNjM4NC5hcGsuYXBrX2RpZ2VzdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhNTEyLTE2Mzg0LmFway5kZXIgYi9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhNTEyLTE2Mzg0LmFway5kZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFhYmRjNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2RhdGEvdjMtb25seS13aXRoLXJzYS1wa2NzMS1zaGE1MTItMTYzODQuYXBrLmRlcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhNTEyLTIwNDguYXBrLmFwa19kaWdlc3QgYi9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhNTEyLTIwNDguYXBrLmFwa19kaWdlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZlMWI2NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2RhdGEvdjMtb25seS13aXRoLXJzYS1wa2NzMS1zaGE1MTItMjA0OC5hcGsuYXBrX2RpZ2VzdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhNTEyLTIwNDguYXBrLmRlciBiL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2RhdGEvdjMtb25seS13aXRoLXJzYS1wa2NzMS1zaGE1MTItMjA0OC5hcGsuZGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZGM1NDMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhNTEyLTIwNDguYXBrLmRlcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhNTEyLTMwNzIuYXBrLmFwa19kaWdlc3QgYi9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhNTEyLTMwNzIuYXBrLmFwa19kaWdlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZlMWI2NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2RhdGEvdjMtb25seS13aXRoLXJzYS1wa2NzMS1zaGE1MTItMzA3Mi5hcGsuYXBrX2RpZ2VzdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhNTEyLTMwNzIuYXBrLmRlciBiL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2RhdGEvdjMtb25seS13aXRoLXJzYS1wa2NzMS1zaGE1MTItMzA3Mi5hcGsuZGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNzBmNWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhNTEyLTMwNzIuYXBrLmRlcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhNTEyLTQwOTYuYXBrLmFwa19kaWdlc3QgYi9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhNTEyLTQwOTYuYXBrLmFwa19kaWdlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZlMWI2NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2RhdGEvdjMtb25seS13aXRoLXJzYS1wa2NzMS1zaGE1MTItNDA5Ni5hcGsuYXBrX2RpZ2VzdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhNTEyLTQwOTYuYXBrLmRlciBiL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2RhdGEvdjMtb25seS13aXRoLXJzYS1wa2NzMS1zaGE1MTItNDA5Ni5hcGsuZGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1MTY0OGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhNTEyLTQwOTYuYXBrLmRlcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhNTEyLTgxOTIuYXBrLmFwa19kaWdlc3QgYi9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhNTEyLTgxOTIuYXBrLmFwa19kaWdlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZlMWI2NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2RhdGEvdjMtb25seS13aXRoLXJzYS1wa2NzMS1zaGE1MTItODE5Mi5hcGsuYXBrX2RpZ2VzdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhNTEyLTgxOTIuYXBrLmRlciBiL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2RhdGEvdjMtb25seS13aXRoLXJzYS1wa2NzMS1zaGE1MTItODE5Mi5hcGsuZGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1ZTVlZGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1yc2EtcGtjczEtc2hhNTEyLTgxOTIuYXBrLmRlcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1zdGFtcC5hcGsuYXBrX2RpZ2VzdCBiL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2RhdGEvdjMtb25seS13aXRoLXN0YW1wLmFway5hcGtfZGlnZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyOWMyYTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1zdGFtcC5hcGsuYXBrX2RpZ2VzdApAQCAtMCwwICsxIEBACitia7ZHwAiXF6f/pS/Y6EX5QD1eJ/elqHUuR7M0X7gvXApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpYnMvYXBrdmVyaWZ5L3Rlc3RzL2RhdGEvdjMtb25seS13aXRoLXN0YW1wLmFway5kZXIgYi9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1zdGFtcC5hcGsuZGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxOTI3YWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Fwa3ZlcmlmeS90ZXN0cy9kYXRhL3YzLW9ubHktd2l0aC1zdGFtcC5hcGsuZGVyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpYnMvaWRzaWcvc3JjL2Fwa3NpZ3Y0LnJzIGIvbGlicy9pZHNpZy9zcmMvYXBrc2lndjQucnMKaW5kZXggZjhjYTE4NC4uYzFiNjQ5NSAxMDA2NDQKLS0tIGEvbGlicy9pZHNpZy9zcmMvYXBrc2lndjQucnMKKysrIGIvbGlicy9pZHNpZy9zcmMvYXBrc2lndjQucnMKQEAgLTE1LDcgKzE1LDcgQEAKICAqLwogCiB1c2UgYW55aG93Ojp7YW55aG93LCBiYWlsLCBDb250ZXh0LCBSZXN1bHR9OwotdXNlIGFwa3ZlcmlmeTo6cGlja192NF9hcGtfZGlnZXN0OwordXNlIGFwa3ZlcmlmeTo6e3BpY2tfdjRfYXBrX2RpZ2VzdCwgU2lnbmF0dXJlQWxnb3JpdGhtSUR9OwogdXNlIGJ5dGVvcmRlcjo6e0xpdHRsZUVuZGlhbiwgUmVhZEJ5dGVzRXh0LCBXcml0ZUJ5dGVzRXh0fTsKIHVzZSBudW1fZGVyaXZlOjp7RnJvbVByaW1pdGl2ZSwgVG9QcmltaXRpdmV9OwogdXNlIG51bV90cmFpdHM6OntGcm9tUHJpbWl0aXZlLCBUb1ByaW1pdGl2ZX07CkBAIC02OSw3ICs2OSw3IEBACiAgICAgLy8vIFB1YmxpYyBrZXkgb2YgdGhlIHNpZ25lciBpbiBBU04uMSBERVIgZm9ybS4gVGhpcyBtdXN0IG1hdGNoIHRoZSBgeDUwOV9jZXJ0aWZpY2F0ZWAgZmllbGQuCiAgICAgcHViIHB1YmxpY19rZXk6IEJveDxbdThdPiwKICAgICAvLy8gU2lnbmF0dXJlIGFsZ29yaXRobSB1c2VkIHRvIHNpZ24gdGhpcyBmaWxlLgotICAgIHB1YiBzaWduYXR1cmVfYWxnb3JpdGhtX2lkOiBTaWduYXR1cmVBbGdvcml0aG1JZCwKKyAgICBwdWIgc2lnbmF0dXJlX2FsZ29yaXRobV9pZDogU2lnbmF0dXJlQWxnb3JpdGhtSUQsCiAgICAgLy8vIFRoZSBzaWduYXR1cmUgb2YgdGhpcyBmaWxlLgogICAgIHB1YiBzaWduYXR1cmU6IEJveDxbdThdPiwKIH0KQEAgLTExNCw0MCArMTE0LDYgQEAKICAgICB9CiB9CiAKLS8vLyBTaWduYXR1cmUgYWxnb3JpdGhtIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGlkc2lnIGZpbGUKLSNbZGVyaXZlKERlYnVnLCBQYXJ0aWFsRXEsIEVxLCBGcm9tUHJpbWl0aXZlLCBUb1ByaW1pdGl2ZSldCi0jW2FsbG93KG5vbl9jYW1lbF9jYXNlX3R5cGVzKV0KLSNbcmVwcih1MzIpXQotcHViIGVudW0gU2lnbmF0dXJlQWxnb3JpdGhtSWQgewotICAgIC8vLyBSU0FTU0EtUFNTIHdpdGggU0hBMi0yNTYgZGlnZXN0LCBTSEEyLTI1NiBNR0YxLCAzMiBieXRlcyBvZiBzYWx0LCB0cmFpbGVyOiAweGJjCi0gICAgUlNBU1NBX1BTU19TSEEyXzI1NiA9IDB4MDEwMSwKLSAgICAvLy8gUlNBU1NBLVBTUyB3aXRoIFNIQTItNTEyIGRpZ2VzdCwgU0hBMi01MTIgTUdGMSwgNjQgYnl0ZXMgb2Ygc2FsdCwgdHJhaWxlcjogMHhiYwotICAgIFJTQVNTQV9QU1NfU0hBMl81MTIgPSAweDAxMDIsCi0gICAgLy8vIFJTQVNTQS1QS0NTMS12MV81IHdpdGggU0hBMi0yNTYgZGlnZXN0LgotICAgIFJTQVNTQV9QS0NTMV9TSEEyXzI1NiA9IDB4MDEwMywKLSAgICAvLy8gUlNBU1NBLVBLQ1MxLXYxXzUgd2l0aCBTSEEyLTUxMiBkaWdlc3QuCi0gICAgUlNBU1NBX1BLQ1MxX1NIQTJfNTEyID0gMHgwMTA0LAotICAgIC8vLyBFQ0RTQSB3aXRoIFNIQTItMjU2IGRpZ2VzdC4KLSAgICBFQ0RTQV9TSEEyXzI1NiA9IDB4MDIwMSwKLSAgICAvLy8gRUNEU0Egd2l0aCBTSEEyLTUxMiBkaWdlc3QuCi0gICAgRUNEU0FfU0hBMl81MTIgPSAweDAyMDIsCi0gICAgLy8vIERTQSB3aXRoIFNIQTItMjU2IGRpZ2VzdAotICAgIERTQV9TSEEyXzI1NiA9IDB4MDMwMSwKLX0KLQotaW1wbCBTaWduYXR1cmVBbGdvcml0aG1JZCB7Ci0gICAgZm4gZnJvbSh2YWw6IHUzMikgLT4gUmVzdWx0PFNpZ25hdHVyZUFsZ29yaXRobUlkPiB7Ci0gICAgICAgIFNlbGY6OmZyb21fdTMyKHZhbCkKLSAgICAgICAgICAgIC53aXRoX2NvbnRleHQofHwgZm9ybWF0ISgiezojMDZ4fSBpcyBhbiB1bnN1cHBvcnRlZCBzaWduYXR1cmUgYWxnb3JpdGhtIiwgdmFsKSkKLSAgICB9Ci19Ci0KLWltcGwgRGVmYXVsdCBmb3IgU2lnbmF0dXJlQWxnb3JpdGhtSWQgewotICAgIGZuIGRlZmF1bHQoKSAtPiBTZWxmIHsKLSAgICAgICAgU2lnbmF0dXJlQWxnb3JpdGhtSWQ6OkRTQV9TSEEyXzI1NgotICAgIH0KLX0KLQogaW1wbDxSOiBSZWFkICsgU2Vlaz4gVjRTaWduYXR1cmU8Uj4gewogICAgIC8vLyBDb25zdW1lcyBhIHN0cmVhbSBmb3IgYW4gaWRzaWcgZmlsZSBpbnRvIGEgYFY0U2lnbmF0dXJlYCBzdHJ1Y3QuCiAgICAgcHViIGZuIGZyb20obXV0IHI6IFIpIC0+IFJlc3VsdDxWNFNpZ25hdHVyZTxSPj4gewpAQCAtMTkzLDggKzE1OSw3IEBACiAKICAgICAgICAgYXBrLnNlZWsoU2Vla0Zyb206OlN0YXJ0KHN0YXJ0KSk/OwogICAgICAgICBsZXQgKHNpZ25hdHVyZV9hbGdvcml0aG1faWQsIGFwa19kaWdlc3QpID0gcGlja192NF9hcGtfZGlnZXN0KGFwayk/OwotICAgICAgICByZXQuc2lnbmluZ19pbmZvLnNpZ25hdHVyZV9hbGdvcml0aG1faWQgPQotICAgICAgICAgICAgU2lnbmF0dXJlQWxnb3JpdGhtSWQ6OmZyb20oc2lnbmF0dXJlX2FsZ29yaXRobV9pZCk/OworICAgICAgICByZXQuc2lnbmluZ19pbmZvLnNpZ25hdHVyZV9hbGdvcml0aG1faWQgPSBzaWduYXR1cmVfYWxnb3JpdGhtX2lkOwogICAgICAgICByZXQuc2lnbmluZ19pbmZvLmFwa19kaWdlc3QgPSBhcGtfZGlnZXN0OwogICAgICAgICAvLyBUT0RPKGppeW9uZyk6IGFkZCBhIHNpZ25hdHVyZSB0byB0aGUgc2lnbmluZ19pbmZvIHN0cnVjdAogCkBAIC0yNzYsNyArMjQxLDggQEAKICAgICAgICAgICAgIHg1MDlfY2VydGlmaWNhdGU6IHJlYWRfc2l6ZWRfYXJyYXkoJm11dCByKT8sCiAgICAgICAgICAgICBhZGRpdGlvbmFsX2RhdGE6IHJlYWRfc2l6ZWRfYXJyYXkoJm11dCByKT8sCiAgICAgICAgICAgICBwdWJsaWNfa2V5OiByZWFkX3NpemVkX2FycmF5KCZtdXQgcik/LAotICAgICAgICAgICAgc2lnbmF0dXJlX2FsZ29yaXRobV9pZDogU2lnbmF0dXJlQWxnb3JpdGhtSWQ6OmZyb20oci5yZWFkX3UzMjo6PExpdHRsZUVuZGlhbj4oKT8pPywKKyAgICAgICAgICAgIHNpZ25hdHVyZV9hbGdvcml0aG1faWQ6IFNpZ25hdHVyZUFsZ29yaXRobUlEOjpmcm9tX3UzMihyLnJlYWRfdTMyOjo8TGl0dGxlRW5kaWFuPigpPykKKyAgICAgICAgICAgICAgICAuY29udGV4dCgiVW5zdXBwb3J0ZWQgc2lnbmF0dXJlIGFsZ29yaXRobSIpPywKICAgICAgICAgICAgIHNpZ25hdHVyZTogcmVhZF9zaXplZF9hcnJheSgmbXV0IHIpPywKICAgICAgICAgfSkKICAgICB9CkBAIC0yOTEsNyArMjU3LDcgQEAKICAgICAgICAgd3JpdGVfc2l6ZWRfYXJyYXkoJm11dCB3LCAmc2VsZi54NTA5X2NlcnRpZmljYXRlKT87CiAgICAgICAgIHdyaXRlX3NpemVkX2FycmF5KCZtdXQgdywgJnNlbGYuYWRkaXRpb25hbF9kYXRhKT87CiAgICAgICAgIHdyaXRlX3NpemVkX2FycmF5KCZtdXQgdywgJnNlbGYucHVibGljX2tleSk/OwotICAgICAgICB3LndyaXRlX3UzMjo6PExpdHRsZUVuZGlhbj4oc2VsZi5zaWduYXR1cmVfYWxnb3JpdGhtX2lkLnRvX3UzMigpLnVud3JhcCgpKT87CisgICAgICAgIHcud3JpdGVfdTMyOjo8TGl0dGxlRW5kaWFuPihzZWxmLnNpZ25hdHVyZV9hbGdvcml0aG1faWQudG9fdTMyKCkpPzsKICAgICAgICAgd3JpdGVfc2l6ZWRfYXJyYXkoJm11dCB3LCAmc2VsZi5zaWduYXR1cmUpPzsKIAogICAgICAgICAvLyBEZXRlcm1pbmUgdGhlIHNpemUgb2Ygc2lnbmluZ19pbmZvLCBhbmQgd3JpdGUgaXQgaW4gZnJvbnQgb2YgdGhlIHN0cnVjdCB3aGVyZSB0aGUgdmFsdWUKQEAgLTM1OCw3ICszMjQsNyBAQAogICAgICAgICAgICAgICAgICAgIGE4NTg1YzM4ZDdmNjU0ODM1ZWIyMTlhZTllMTc2YjQ0ZTg2ZGNiMjMxNTNlM2Q5ZDYiLAogICAgICAgICAgICAgaGV4c3RyaW5nX2Zyb20oc2kuc2lnbmF0dXJlLmFzX3JlZigpKQogICAgICAgICApOwotICAgICAgICBhc3NlcnRfZXEhKFNpZ25hdHVyZUFsZ29yaXRobUlkOjpEU0FfU0hBMl8yNTYsIHNpLnNpZ25hdHVyZV9hbGdvcml0aG1faWQpOworICAgICAgICBhc3NlcnRfZXEhKFNpZ25hdHVyZUFsZ29yaXRobUlEOjpEc2FXaXRoU2hhMjU2LCBzaS5zaWduYXR1cmVfYWxnb3JpdGhtX2lkKTsKIAogICAgICAgICBhc3NlcnRfZXEhKDM2ODY0LCBwYXJzZWQubWVya2xlX3RyZWVfc2l6ZSk7CiAgICAgICAgIGFzc2VydF9lcSEoMjI1MSwgcGFyc2VkLm1lcmtsZV90cmVlX29mZnNldCk7CmRpZmYgLS1naXQgYS90ZXN0cy9iZW5jaG1hcmtfaG9zdHNpZGUvamF2YS9hbmRyb2lkL2F2Zi90ZXN0L0FWRkhvc3RUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvYmVuY2htYXJrX2hvc3RzaWRlL2phdmEvYW5kcm9pZC9hdmYvdGVzdC9BVkZIb3N0VGVzdENhc2UuamF2YQppbmRleCBlZWFkYWUxLi5lNWVlZTI3IDEwMDY0NAotLS0gYS90ZXN0cy9iZW5jaG1hcmtfaG9zdHNpZGUvamF2YS9hbmRyb2lkL2F2Zi90ZXN0L0FWRkhvc3RUZXN0Q2FzZS5qYXZhCisrKyBiL3Rlc3RzL2JlbmNobWFya19ob3N0c2lkZS9qYXZhL2FuZHJvaWQvYXZmL3Rlc3QvQVZGSG9zdFRlc3RDYXNlLmphdmEKQEAgLTM5LDYgKzM5LDcgQEAKIGltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7CiAKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogaW1wb3J0IGphdmEudXRpbC5NYXA7CiBpbXBvcnQgamF2YS51dGlsLnJlZ2V4Lk1hdGNoZXI7CkBAIC01Niw2ICs1NywxMSBAQAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTWVNURU1fU0VSVkVSX0NPTVBJTEVSX0ZJTFRFUl9QUk9QX05BTUUgPQogICAgICAgICAgICAgImRhbHZpay52bS5zeXN0ZW1zZXJ2ZXJjb21waWxlcmZpbHRlciI7CiAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQk9PVExPQURFUl9USU1FX1BST1BfTkFNRSA9ICJyby5ib290LmJvb3R0aW1lIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQk9PVExPQURFUl9QUkVGSVggPSAiYm9vdGxvYWRlci0iOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCT09UTE9BREVSX1RJTUUgPSAiYm9vdGxvYWRlcl90aW1lIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQk9PVExPQURFUl9QSEFTRV9TVyA9ICJTVyI7CisKICAgICAvKiogQm9vdCB0aW1lIHRlc3QgcmVsYXRlZCB2YXJpYWJsZXMgKi8KICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUkVJTlNUQUxMX0FQRVhfUkVUUllfSU5URVJWQUxfTVMgPSA1ICogMTAwMDsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUkVJTlNUQUxMX0FQRVhfVElNRU9VVF9TRUMgPSAxNTsKQEAgLTg5LDcyICs5NSwxMjQgQEAKICAgICB9CiAKICAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3RCb290RW5hYmxlQW5kRGlzYWJsZVBLVk0oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgc2tpcElmUEtWTVN0YXR1c1N3aXRjaE5vdFN1cHBvcnRlZCgpOwotCi0gICAgICAgIExpc3Q8RG91YmxlPiBib290V2l0aFBLVk1FbmFibGVUaW1lID0gbmV3IEFycmF5TGlzdDw+KFJPVU5EX0NPVU5UKTsKLSAgICAgICAgTGlzdDxEb3VibGU+IGJvb3RXaXRob3V0UEtWTUVuYWJsZVRpbWUgPSBuZXcgQXJyYXlMaXN0PD4oUk9VTkRfQ09VTlQpOwotCi0gICAgICAgIGZvciAoaW50IHJvdW5kID0gMDsgcm91bmQgPCBST1VORF9DT1VOVDsgKytyb3VuZCkgewotCi0gICAgICAgICAgICBzZXRQS1ZNU3RhdHVzV2l0aFJlYm9vdFRvQm9vdGxvYWRlcih0cnVlKTsKLSAgICAgICAgICAgIGxvbmcgc3RhcnQgPSBTeXN0ZW0ubmFub1RpbWUoKTsKLSAgICAgICAgICAgIHJlYm9vdEZyb21Cb290bG9hZGVyQW5kV2FpdEJvb3RDb21wbGV0ZWQoKTsKLSAgICAgICAgICAgIGxvbmcgZWxhcHNlZFdpdGhQS1ZNRW5hYmxlID0gU3lzdGVtLm5hbm9UaW1lKCkgLSBzdGFydDsKLSAgICAgICAgICAgIGRvdWJsZSBlbGFwc2VkU2VjID0gZWxhcHNlZFdpdGhQS1ZNRW5hYmxlIC8gTkFOT1NfSU5fU0VDOwotICAgICAgICAgICAgYm9vdFdpdGhQS1ZNRW5hYmxlVGltZS5hZGQoZWxhcHNlZFNlYyk7Ci0gICAgICAgICAgICBDTG9nLmkoIkJvb3QgdGltZSB3aXRoIFBLVk0gZW5hYmxlIHRvb2sgIiArIGVsYXBzZWRTZWMgKyAicyIpOwotCi0gICAgICAgICAgICBzZXRQS1ZNU3RhdHVzV2l0aFJlYm9vdFRvQm9vdGxvYWRlcihmYWxzZSk7Ci0gICAgICAgICAgICBzdGFydCA9IFN5c3RlbS5uYW5vVGltZSgpOwotICAgICAgICAgICAgcmVib290RnJvbUJvb3Rsb2FkZXJBbmRXYWl0Qm9vdENvbXBsZXRlZCgpOwotICAgICAgICAgICAgbG9uZyBlbGFwc2VkV2l0aG91dFBLVk1FbmFibGUgPSBTeXN0ZW0ubmFub1RpbWUoKSAtIHN0YXJ0OwotICAgICAgICAgICAgZWxhcHNlZFNlYyA9IGVsYXBzZWRXaXRob3V0UEtWTUVuYWJsZSAvIE5BTk9TX0lOX1NFQzsKLSAgICAgICAgICAgIGJvb3RXaXRob3V0UEtWTUVuYWJsZVRpbWUuYWRkKGVsYXBzZWRTZWMpOwotICAgICAgICAgICAgQ0xvZy5pKCJCb290IHRpbWUgd2l0aCBQS1ZNIGRpc2FibGUgdG9vayAiICsgZWxhcHNlZFNlYyArICJzIik7Ci0gICAgICAgIH0KLQotICAgICAgICByZXBvcnRNZXRyaWMoYm9vdFdpdGhQS1ZNRW5hYmxlVGltZSwgImJvb3RfdGltZV93aXRoX3Brdm1fZW5hYmxlIiwgInMiKTsKLSAgICAgICAgcmVwb3J0TWV0cmljKGJvb3RXaXRob3V0UEtWTUVuYWJsZVRpbWUsICJib290X3RpbWVfd2l0aF9wa3ZtX2Rpc2FibGUiLCAicyIpOworICAgIHB1YmxpYyB2b2lkIHRlc3RCb290RW5hYmxlUEtWTSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBlbmFibGVEaXNhYmxlUEtWTVRlc3RIZWxwZXIodHJ1ZSk7CiAgICAgfQogCiAgICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCB0ZXN0Qm9vdFdpdGhBbmRXaXRob3V0Q29tcE9TKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGFzc3VtZUZhbHNlKGlzQ3V0dGxlZmlzaCgpKTsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0Qm9vdERpc2FibGVQS1ZNKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGVuYWJsZURpc2FibGVQS1ZNVGVzdEhlbHBlcihmYWxzZSk7CisgICAgfQogCi0gICAgICAgIExpc3Q8RG91YmxlPiBib290V2l0aENvbXBPc1RpbWUgPSBuZXcgQXJyYXlMaXN0PD4oUk9VTkRfQ09VTlQpOwotICAgICAgICBMaXN0PERvdWJsZT4gYm9vdFdpdGhvdXRDb21wT3NUaW1lID0gbmV3IEFycmF5TGlzdDw+KFJPVU5EX0NPVU5UKTsKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RCb290V2l0aENvbXBPUygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBjb21wb3NUZXN0SGVscGVyKHRydWUpOworICAgIH0KIAorICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEJvb3RXaXRob3V0Q29tcE9TKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGNvbXBvc1Rlc3RIZWxwZXIoZmFsc2UpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCB1cGRhdGVCb290bG9hZGVyVGltZUluZm8oTWFwPFN0cmluZywgTGlzdDxEb3VibGU+PiBib290bG9hZGVyVGltZSkKKyAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb24geworCisgICAgICAgIFN0cmluZyBib290TG9hZGVyVmFsID0gZ2V0RGV2aWNlKCkuZ2V0UHJvcGVydHkoQk9PVExPQURFUl9USU1FX1BST1BfTkFNRSk7CisgICAgICAgIC8vIFNhbXBsZSBPdXRwdXQgOiAxQkxMOjg5LDFCTEU6NTkwLDJCTEw6MCwyQkxFOjEzNDQsU1c6NjczNCxLTDoxMTkzCisgICAgICAgIGlmIChib290TG9hZGVyVmFsICE9IG51bGwpIHsKKyAgICAgICAgICAgIFN0cmluZ1tdIGJvb3RMb2FkZXJQaGFzZXMgPSBib290TG9hZGVyVmFsLnNwbGl0KCIsIik7CisgICAgICAgICAgICBkb3VibGUgYm9vdExvYWRlclRvdGFsVGltZSA9IDBkOworICAgICAgICAgICAgZm9yIChTdHJpbmcgYm9vdExvYWRlclBoYXNlIDogYm9vdExvYWRlclBoYXNlcykgeworICAgICAgICAgICAgICAgIFN0cmluZ1tdIGJvb3RLZXlWYWwgPSBib290TG9hZGVyUGhhc2Uuc3BsaXQoIjoiKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcga2V5ID0gU3RyaW5nLmZvcm1hdCgiJXMlcyIsIEJPT1RMT0FERVJfUFJFRklYLCBib290S2V5VmFsWzBdKTsKKworICAgICAgICAgICAgICAgIGJvb3Rsb2FkZXJUaW1lLmNvbXB1dGVJZkFic2VudChrZXksCisgICAgICAgICAgICAgICAgICAgICAgICBrIC0+IG5ldyBBcnJheUxpc3Q8PigpKS5hZGQoRG91YmxlLnBhcnNlRG91YmxlKGJvb3RLZXlWYWxbMV0pKTsKKyAgICAgICAgICAgICAgICAvLyBTVyBpcyB0aGUgdGltZSBzcGVudCBvbiB0aGUgd2FybmluZyBzY3JlZW4uIFNvIGlnbm9yZSBpdCBpbgorICAgICAgICAgICAgICAgIC8vIGZpbmFsIGJvb3QgdGltZSBjYWxjdWxhdGlvbi4KKyAgICAgICAgICAgICAgICBpZiAoQk9PVExPQURFUl9QSEFTRV9TVy5lcXVhbHNJZ25vcmVDYXNlKGJvb3RLZXlWYWxbMF0pKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBib290TG9hZGVyVG90YWxUaW1lICs9IERvdWJsZS5wYXJzZURvdWJsZShib290S2V5VmFsWzFdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJvb3Rsb2FkZXJUaW1lLmNvbXB1dGVJZkFic2VudChCT09UTE9BREVSX1RJTUUsCisgICAgICAgICAgICAgICAgICAgIGsgLT4gbmV3IEFycmF5TGlzdDw+KCkpLmFkZChib290TG9hZGVyVG90YWxUaW1lKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgRG91YmxlIGdldERtZXNnQm9vdFRpbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKworICAgICAgICBDb21tYW5kUnVubmVyIGFuZHJvaWQgPSBuZXcgQ29tbWFuZFJ1bm5lcihnZXREZXZpY2UoKSk7CisgICAgICAgIFN0cmluZyByZXN1bHQgPSBhbmRyb2lkLnJ1bigiZG1lc2ciKTsKKyAgICAgICAgUGF0dGVybiBwYXR0ZXJuID0gUGF0dGVybi5jb21waWxlKCJcXFsoLiopXFxdLipzeXMuYm9vdF9jb21wbGV0ZWQ9MS4qIik7CisgICAgICAgIGZvciAoU3RyaW5nIGxpbmUgOiByZXN1bHQuc3BsaXQoIltcclxuXSsiKSkgeworICAgICAgICAgICAgTWF0Y2hlciBtYXRjaGVyID0gcGF0dGVybi5tYXRjaGVyKGxpbmUpOworICAgICAgICAgICAgaWYgKG1hdGNoZXIuZmluZCgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIERvdWJsZS52YWx1ZU9mKG1hdGNoZXIuZ3JvdXAoMSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkZhaWxlZCB0byBnZXQgYm9vdCB0aW1lIGluZm8uIik7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGVuYWJsZURpc2FibGVQS1ZNVGVzdEhlbHBlcihib29sZWFuIGlzRW5hYmxlKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgc2tpcElmUEtWTVN0YXR1c1N3aXRjaE5vdFN1cHBvcnRlZCgpOworCisgICAgICAgIExpc3Q8RG91YmxlPiBib290RG1lc2dUaW1lID0gbmV3IEFycmF5TGlzdDw+KFJPVU5EX0NPVU5UKTsKKyAgICAgICAgTWFwPFN0cmluZywgTGlzdDxEb3VibGU+PiBib290bG9hZGVyVGltZSA9IG5ldyBIYXNoTWFwPD4oKTsKKworICAgICAgICBzZXRQS1ZNU3RhdHVzV2l0aFJlYm9vdFRvQm9vdGxvYWRlcihpc0VuYWJsZSk7CisgICAgICAgIHJlYm9vdEZyb21Cb290bG9hZGVyQW5kV2FpdEJvb3RDb21wbGV0ZWQoKTsKICAgICAgICAgZm9yIChpbnQgcm91bmQgPSAwOyByb3VuZCA8IFJPVU5EX0NPVU5UOyArK3JvdW5kKSB7Ci0KLSAgICAgICAgICAgIC8vIEJvb3QgdGltZSB3aXRoIGNvbXBpbGF0aW9uIE9TIHRlc3QuCi0gICAgICAgICAgICByZUluc3RhbGxBcGV4KFJFSU5TVEFMTF9BUEVYX1RJTUVPVVRfU0VDKTsKLSAgICAgICAgICAgIGNvbXBpbGVTdGFnZWRBcGV4KENPTVBJTEVfU1RBR0VEX0FQRVhfVElNRU9VVF9TRUMpOwogICAgICAgICAgICAgZ2V0RGV2aWNlKCkubm9uQmxvY2tpbmdSZWJvb3QoKTsKLSAgICAgICAgICAgIGxvbmcgc3RhcnQgPSBTeXN0ZW0ubmFub1RpbWUoKTsKICAgICAgICAgICAgIHdhaXRGb3JCb290Q29tcGxldGVkKCk7Ci0gICAgICAgICAgICBsb25nIGVsYXBzZWRXaXRoQ29tcE9TID0gU3lzdGVtLm5hbm9UaW1lKCkgLSBzdGFydDsKLSAgICAgICAgICAgIGRvdWJsZSBlbGFwc2VkU2VjID0gZWxhcHNlZFdpdGhDb21wT1MgLyBOQU5PU19JTl9TRUM7Ci0gICAgICAgICAgICBib290V2l0aENvbXBPc1RpbWUuYWRkKGVsYXBzZWRTZWMpOwotICAgICAgICAgICAgQ0xvZy5pKCJCb290IHRpbWUgd2l0aCBjb21waWxhdGlvbiBPUyB0b29rICIgKyBlbGFwc2VkU2VjICsgInMiKTsKIAotICAgICAgICAgICAgLy8gQm9vdCB0aW1lIHdpdGhvdXQgY29tcGlsYXRpb24gT1MgdGVzdC4KLSAgICAgICAgICAgIHJlSW5zdGFsbEFwZXgoUkVJTlNUQUxMX0FQRVhfVElNRU9VVF9TRUMpOwotICAgICAgICAgICAgZ2V0RGV2aWNlKCkubm9uQmxvY2tpbmdSZWJvb3QoKTsKLSAgICAgICAgICAgIHN0YXJ0ID0gU3lzdGVtLm5hbm9UaW1lKCk7Ci0gICAgICAgICAgICB3YWl0Rm9yQm9vdENvbXBsZXRlZCgpOwotICAgICAgICAgICAgbG9uZyBlbGFwc2VkV2l0aG91dENvbXBPUyA9IFN5c3RlbS5uYW5vVGltZSgpIC0gc3RhcnQ7Ci0gICAgICAgICAgICBlbGFwc2VkU2VjID0gZWxhcHNlZFdpdGhvdXRDb21wT1MgLyBOQU5PU19JTl9TRUM7Ci0gICAgICAgICAgICBib290V2l0aG91dENvbXBPc1RpbWUuYWRkKGVsYXBzZWRTZWMpOwotICAgICAgICAgICAgQ0xvZy5pKCJCb290IHRpbWUgd2l0aG91dCBjb21waWxhdGlvbiBPUyB0b29rICIgKyBlbGFwc2VkU2VjICsgInMiKTsKKyAgICAgICAgICAgIHVwZGF0ZUJvb3Rsb2FkZXJUaW1lSW5mbyhib290bG9hZGVyVGltZSk7CisKKyAgICAgICAgICAgIGRvdWJsZSBlbGFwc2VkU2VjID0gZ2V0RG1lc2dCb290VGltZSgpOworICAgICAgICAgICAgYm9vdERtZXNnVGltZS5hZGQoZWxhcHNlZFNlYyk7CiAgICAgICAgIH0KIAotICAgICAgICByZXBvcnRNZXRyaWMoYm9vdFdpdGhDb21wT3NUaW1lLCAiYm9vdF90aW1lX3dpdGhfY29tcG9zIiwgInMiKTsKLSAgICAgICAgcmVwb3J0TWV0cmljKGJvb3RXaXRob3V0Q29tcE9zVGltZSwgImJvb3RfdGltZV93aXRob3V0X2NvbXBvcyIsICJzIik7CisgICAgICAgIFN0cmluZyBzdWZmaXggPSAiIjsKKyAgICAgICAgaWYgKGlzRW5hYmxlKSB7CisgICAgICAgICAgICBzdWZmaXggPSAiZW5hYmxlIjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN1ZmZpeCA9ICJkaXNhYmxlIjsKKyAgICAgICAgfQorCisgICAgICAgIHJlcG9ydE1ldHJpYyhib290RG1lc2dUaW1lLCAiZG1lc2dfYm9vdF90aW1lX3dpdGhfcGt2bV8iICsgc3VmZml4LCAicyIpOworICAgICAgICByZXBvcnRBZ2dyZWdhdGVkTWV0cmljcyhib290bG9hZGVyVGltZSwKKyAgICAgICAgICAgICAgICAiYm9vdGxvYWRlcl90aW1lX3dpdGhfcGt2bV8iICsgc3VmZml4LCAibXMiKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgY29tcG9zVGVzdEhlbHBlcihib29sZWFuIGlzV2l0aENvbXBvcykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGFzc3VtZUZhbHNlKCJTa2lwIG9uIENGOyB0b28gc2xvdyIsIGlzQ3V0dGxlZmlzaCgpKTsKKworICAgICAgICBMaXN0PERvdWJsZT4gYm9vdERtZXNnVGltZSA9IG5ldyBBcnJheUxpc3Q8PihST1VORF9DT1VOVCk7CisKKyAgICAgICAgZm9yIChpbnQgcm91bmQgPSAwOyByb3VuZCA8IFJPVU5EX0NPVU5UOyArK3JvdW5kKSB7CisgICAgICAgICAgICByZUluc3RhbGxBcGV4KFJFSU5TVEFMTF9BUEVYX1RJTUVPVVRfU0VDKTsKKyAgICAgICAgICAgIGlmIChpc1dpdGhDb21wb3MpIHsKKyAgICAgICAgICAgICAgICBjb21waWxlU3RhZ2VkQXBleChDT01QSUxFX1NUQUdFRF9BUEVYX1RJTUVPVVRfU0VDKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdldERldmljZSgpLm5vbkJsb2NraW5nUmVib290KCk7CisgICAgICAgICAgICB3YWl0Rm9yQm9vdENvbXBsZXRlZCgpOworCisgICAgICAgICAgICBkb3VibGUgZWxhcHNlZFNlYyA9IGdldERtZXNnQm9vdFRpbWUoKTsKKyAgICAgICAgICAgIGJvb3REbWVzZ1RpbWUuYWRkKGVsYXBzZWRTZWMpOworICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nIHN1ZmZpeCA9ICIiOworICAgICAgICBpZiAoaXNXaXRoQ29tcG9zKSB7CisgICAgICAgICAgICBzdWZmaXggPSAid2l0aF9jb21wb3MiOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3VmZml4ID0gIndpdGhvdXRfY29tcG9zIjsKKyAgICAgICAgfQorCisgICAgICAgIHJlcG9ydE1ldHJpYyhib290RG1lc2dUaW1lLCAiZG1lc2dfYm9vdF90aW1lXyIgKyBzdWZmaXgsICJzIik7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHNraXBJZlBLVk1TdGF0dXNTd2l0Y2hOb3RTdXBwb3J0ZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgYXNzdW1lRmFsc2UoaXNDdXR0bGVmaXNoKCkpOworICAgICAgICBhc3N1bWVGYWxzZSgiU2tpcCBvbiBDRjsgY2FuJ3QgcmVib290IHRvIGJvb3Rsb2FkZXIiLCBpc0N1dHRsZWZpc2goKSk7CiAKICAgICAgICAgaWYgKCFnZXREZXZpY2UoKS5pc1N0YXRlQm9vdGxvYWRlck9yRmFzdGJvb3RkKCkpIHsKICAgICAgICAgICAgIGdldERldmljZSgpLnJlYm9vdEludG9Cb290bG9hZGVyKCk7CkBAIC0xNzEsMTIgKzIyOSwyMiBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCByZXBvcnRNZXRyaWMoTGlzdDxEb3VibGU+IGRhdGEsIFN0cmluZyBuYW1lLCBTdHJpbmcgdW5pdCkgeworICAgICAgICBDTG9nLmQoIlJlcG9ydCBtZXRyaWMgIiArIG5hbWUgKyAiKCIgKyB1bml0ICsgIikgOiAiICsgZGF0YS50b1N0cmluZygpKTsKICAgICAgICAgTWFwPFN0cmluZywgRG91YmxlPiBzdGF0cyA9IG1NZXRyaWNzUHJvY2Vzc29yLmNvbXB1dGVTdGF0cyhkYXRhLCBuYW1lLCB1bml0KTsKICAgICAgICAgZm9yIChNYXAuRW50cnk8U3RyaW5nLCBEb3VibGU+IGVudHJ5IDogc3RhdHMuZW50cnlTZXQoKSkgeworICAgICAgICAgICAgQ0xvZy5kKCJBZGQgdGVzdCBtZXRyaWNzICIgKyBlbnRyeS5nZXRLZXkoKSArICIgOiAiICsgZW50cnkuZ2V0VmFsdWUoKS50b1N0cmluZygpKTsKICAgICAgICAgICAgIG1NZXRyaWNzLmFkZFRlc3RNZXRyaWMoZW50cnkuZ2V0S2V5KCksIGVudHJ5LmdldFZhbHVlKCkudG9TdHJpbmcoKSk7CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBwcml2YXRlIHZvaWQgcmVwb3J0QWdncmVnYXRlZE1ldHJpY3MoTWFwPFN0cmluZywgTGlzdDxEb3VibGU+PiBib290bG9hZGVyVGltZSwKKyAgICAgICAgICAgIFN0cmluZyBwcmVmaXgsIFN0cmluZyB1bml0KSB7CisKKyAgICAgICAgZm9yIChNYXAuRW50cnk8U3RyaW5nLCBMaXN0PERvdWJsZT4+IGVudHJ5IDogYm9vdGxvYWRlclRpbWUuZW50cnlTZXQoKSkgeworICAgICAgICAgICAgcmVwb3J0TWV0cmljKGVudHJ5LmdldFZhbHVlKCksIHByZWZpeCArICJfIiArIGVudHJ5LmdldEtleSgpLCB1bml0KTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHByaXZhdGUgdm9pZCBzZXRQS1ZNU3RhdHVzV2l0aFJlYm9vdFRvQm9vdGxvYWRlcihib29sZWFuIGlzRW5hYmxlKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICBpZiAoIWdldERldmljZSgpLmlzU3RhdGVCb290bG9hZGVyT3JGYXN0Ym9vdGQoKSkgewo=