LyogcGVyaW9kaWNfd29yay5oCiAqCiAqIENvcHlyaWdodCCpIDIwMTAgLSAyMDEzIFVOSVNZUyBDT1JQT1JBVElPTgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKICogeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CiAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCiAqIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlCiAqIGRldGFpbHMuCiAqLwoKI2lmbmRlZiBfX1BFUklPRElDX1dPUktfSF9fCiNkZWZpbmUgX19QRVJJT0RJQ19XT1JLX0hfXwoKI2luY2x1ZGUgInRpbXNrbW9kLmgiCgoKCi8qIFBFUklPRElDX1dPUksgYW4gb3BhcXVlIHN0cnVjdHVyZSB0byB1c2Vycy4KICogRmllbGRzIGFyZSBkZWNsYXJlZCBvbmx5IGluIHRoZSBpbXBsZW1lbnRhdGlvbiAuYyBmaWxlcy4KICovCnR5cGVkZWYgc3RydWN0IFBFUklPRElDX1dPUktfVGFnIFBFUklPRElDX1dPUks7CgpQRVJJT0RJQ19XT1JLICp2aXNvcl9wZXJpb2RpY193b3JrX2NyZWF0ZSh1bG9uZyBqaWZmeV9pbnRlcnZhbCwKCQkJCQkgIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrcXVldWUsCgkJCQkJICB2b2lkICgqd29ya2Z1bmMpKHZvaWQgKiksCgkJCQkJICB2b2lkICp3b3JrZnVuY2FyZywKCQkJCQkgIGNvbnN0IGNoYXIgKmRldm5hbSk7CnZvaWQgICAgICAgICAgICB2aXNvcl9wZXJpb2RpY193b3JrX2Rlc3Ryb3koUEVSSU9ESUNfV09SSyAqcGVyaW9kaWNfd29yayk7CkJPT0wgICAgICAgICAgICB2aXNvcl9wZXJpb2RpY193b3JrX25leHRwZXJpb2QoUEVSSU9ESUNfV09SSyAqcGVyaW9kaWNfd29yayk7CkJPT0wgICAgICAgICAgICB2aXNvcl9wZXJpb2RpY193b3JrX3N0YXJ0KFBFUklPRElDX1dPUksgKnBlcmlvZGljX3dvcmspOwpCT09MICAgICAgICAgICAgdmlzb3JfcGVyaW9kaWNfd29ya19zdG9wKFBFUklPRElDX1dPUksgKnBlcmlvZGljX3dvcmspOwoKI2VuZGlmCg==