LyogY29udHJvbHZtX2RpcmVjdC5jCiAqCiAqIENvcHlyaWdodCCpIDIwMTAgLSAyMDEzIFVOSVNZUyBDT1JQT1JBVElPTgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKICogeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CiAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCiAqIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlCiAqIGRldGFpbHMuCiAqLwoKLyogVGhpcyBpcyBhIGNvbnRyb2x2bS1yZWxhdGVkIGNvZGUgdGhhdCBpcyBkZXBlbmRlbnQgdXBvbiBmaXJtd2FyZSBydW5uaW5nCiAqIG9uIGEgdmlydHVhbCBwYXJ0aXRpb24uCiAqLwoKI2luY2x1ZGUgImdsb2JhbHMuaCIKI2luY2x1ZGUgInVpc3V0aWxzLmgiCiNpbmNsdWRlICJjb250cm9sdm0uaCIKI2RlZmluZSBDVVJSRU5UX0ZJTEVfUEMgVklTT1JfQ0hJUFNFVF9QQ19jb250cm9sdm1fZGlyZWN0X2MKCgovKiBXZSBjYW4gZmlsbCBpbiB0aGlzIGNvZGUgd2hlbiB3ZSBsZWFybiBob3cgdG8gbWFrZSB2bWNhbGxzLi4uICovCgoKCmludCBjb250cm9sdm1faW5pdCh2b2lkKQp7CglyZXR1cm4gMDsKfQoKCgp2b2lkIGNvbnRyb2x2bV9kZWluaXQodm9pZCkKewp9CgoKCkhPU1RBRERSRVNTIGNvbnRyb2x2bV9nZXRfY2hhbm5lbF9hZGRyZXNzKHZvaWQpCnsKCXN0YXRpYyBCT09MIHdhcm5lZCA9IEZBTFNFOwoJVTY0IGFkZHIgPSAwOwoKCVUzMiBzaXplID0gMDsKCglpZiAoIVZNQ0FMTF9TVUNDRVNTRlVMKElzc3VlX1ZNQ0FMTF9JT19DT05UUk9MVk1fQUREUigmYWRkciwgJnNpemUpKSkgewoJCWlmICghd2FybmVkKSB7CgkJCUVSUkRSVigiJXMgLSB2bWNhbGwgdG8gZGV0ZXJtaW5lIGNvbnRyb2x2bSBjaGFubmVsIGFkZHIgZmFpbGVkIiwKCQkJICAgICAgIF9fZnVuY19fKTsKCQkJd2FybmVkID0gVFJVRTsKCQl9CgkJcmV0dXJuIDA7Cgl9CglJTkZPRFJWKCJjb250cm9sdm0gYWRkcj0lTHgiLCBhZGRyKTsKCXJldHVybiBhZGRyOwp9Cg==