ZGlmZiAtLWdpdCBhL25ldC9pcmRhL3RpbWVyLmMgYi9uZXQvaXJkYS90aW1lci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMTdmOTcKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvaXJkYS90aW1lci5jCkBAIC0wLDAgKzEsMjMzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAKKyAqIEZpbGVuYW1lOiAgICAgIHRpbWVyLmMKKyAqIFZlcnNpb246ICAgICAgIAorICogRGVzY3JpcHRpb246ICAgCisgKiBTdGF0dXM6ICAgICAgICBFeHBlcmltZW50YWwuCisgKiBBdXRob3I6ICAgICAgICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CisgKiBDcmVhdGVkIGF0OiAgICBTYXQgQXVnIDE2IDAwOjU5OjI5IDE5OTcKKyAqIE1vZGlmaWVkIGF0OiAgIFdlZCBEZWMgIDggMTI6NTA6MzQgMTk5OQorICogTW9kaWZpZWQgYnk6ICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgorICogCisgKiAgICAgQ29weXJpZ2h0IChjKSAxOTk3LCAxOTk5IERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4sIAorICogICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgICAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDIgSmVhbiBUb3VycmlsaGVzIDxqdEBocGwuaHAuY29tPgorICogICAgIAorICogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgCisgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCisgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXP4IGFkbWl0IGxpYWJpbGl0eSBub3IKKyAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyAKKyAqICAgICBwcm92aWRlZCAiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlIDxuZXQvaXJkYS90aW1lci5oPgorI2luY2x1ZGUgPG5ldC9pcmRhL2lyZGEuaD4KKyNpbmNsdWRlIDxuZXQvaXJkYS9pcmRhX2RldmljZS5oPgorI2luY2x1ZGUgPG5ldC9pcmRhL2lybGFwLmg+CisjaW5jbHVkZSA8bmV0L2lyZGEvaXJsbXAuaD4KKworZXh0ZXJuIGludCAgc3lzY3RsX3Nsb3RfdGltZW91dDsKKworc3RhdGljIHZvaWQgaXJsYXBfc2xvdF90aW1lcl9leHBpcmVkKHZvaWQqIGRhdGEpOworc3RhdGljIHZvaWQgaXJsYXBfcXVlcnlfdGltZXJfZXhwaXJlZCh2b2lkKiBkYXRhKTsKK3N0YXRpYyB2b2lkIGlybGFwX2ZpbmFsX3RpbWVyX2V4cGlyZWQodm9pZCogZGF0YSk7CitzdGF0aWMgdm9pZCBpcmxhcF93ZF90aW1lcl9leHBpcmVkKHZvaWQqIGRhdGEpOworc3RhdGljIHZvaWQgaXJsYXBfYmFja29mZl90aW1lcl9leHBpcmVkKHZvaWQqIGRhdGEpOworc3RhdGljIHZvaWQgaXJsYXBfbWVkaWFfYnVzeV9leHBpcmVkKHZvaWQqIGRhdGEpOyAKKwordm9pZCBpcmxhcF9zdGFydF9zbG90X3RpbWVyKHN0cnVjdCBpcmxhcF9jYiAqc2VsZiwgaW50IHRpbWVvdXQpCit7CisJaXJkYV9zdGFydF90aW1lcigmc2VsZi0+c2xvdF90aW1lciwgdGltZW91dCwgKHZvaWQgKikgc2VsZiwgCisJCQkgaXJsYXBfc2xvdF90aW1lcl9leHBpcmVkKTsKK30KKwordm9pZCBpcmxhcF9zdGFydF9xdWVyeV90aW1lcihzdHJ1Y3QgaXJsYXBfY2IgKnNlbGYsIGludCBTLCBpbnQgcykKK3sKKwlpbnQgdGltZW91dDsKKworCS8qIENhbGN1bGF0ZSB3aGVuIHRoZSBwZWVyIGRpc2NvdmVyeSBzaG91bGQgZW5kLiBOb3JtYWxseSwgd2UKKwkgKiBnZXQgdGhlIGVuZC1vZi1kaXNjb3ZlcnkgZnJhbWUsIHNvIHRoaXMgaXMganVzdCBpbiBjYXNlCisJICogd2UgbWlzcyBpdC4KKwkgKiBCYXNpY2FsbHksIHdlIG11bHRpcGx5IHRoZSBudW1iZXIgb2YgcmVtYWluaW5nIHNsb3RzIGJ5IG91cgorCSAqIHNsb3QgdGltZSwgcGx1cyBhZGQgc29tZSBleHRyYSB0aW1lIHRvIHByb3Blcmx5IHJlY2VpdmUgdGhlIGxhc3QKKwkgKiBkaXNjb3ZlcnkgcGFja2V0ICh3aGljaCBpcyBsb25nZXIgZHVlIHRvIGV4dHJhIGRpc2NvdmVyeSBpbmZvKSwKKwkgKiB0byBhdm9pZCBtZXNzaW5nIHdpdGggZm9yIGluY29tbWluZyBjb25uZWN0aW9ucyByZXF1ZXN0cyBhbmQKKwkgKiB0byBhY2NvbW9kYXRlIGRldmljZXMgdGhhdCBwZXJmb3JtIGRpc2NvdmVyeSBzbG93ZXIgdGhhbiB1cy4KKwkgKiBKZWFuIElJICovCisJdGltZW91dCA9ICgoc3lzY3RsX3Nsb3RfdGltZW91dCAqIEhaIC8gMTAwMCkgKiAoUyAtIHMpCisJCSAgICsgWElERVhUUkFfVElNRU9VVCArIFNNQUxMQlVTWV9USU1FT1VUKTsKKworCS8qIFNldCBvciByZS1zZXQgdGhlIHRpbWVyLiBXZSByZXNldCB0aGUgdGltZXIgZm9yIGVhY2ggcmVjZWl2ZWQKKwkgKiBkaXNjb3ZlcnkgcXVlcnksIHdoaWNoIGFsbG93IHVzIHRvIGF1dG9tYXRpY2FsbHkgYWRqdXN0IHRvCisJICogdGhlIHNwZWVkIG9mIHRoZSBwZWVyIGRpc2NvdmVyeSAoZmFzdGVyIG9yIHNsb3dlcikuIEplYW4gSUkgKi8KKwlpcmRhX3N0YXJ0X3RpbWVyKCAmc2VsZi0+cXVlcnlfdGltZXIsIHRpbWVvdXQsICh2b2lkICopIHNlbGYsIAorCQkJICBpcmxhcF9xdWVyeV90aW1lcl9leHBpcmVkKTsKK30KKwordm9pZCBpcmxhcF9zdGFydF9maW5hbF90aW1lcihzdHJ1Y3QgaXJsYXBfY2IgKnNlbGYsIGludCB0aW1lb3V0KQoreworCWlyZGFfc3RhcnRfdGltZXIoJnNlbGYtPmZpbmFsX3RpbWVyLCB0aW1lb3V0LCAodm9pZCAqKSBzZWxmLCAKKwkJCSBpcmxhcF9maW5hbF90aW1lcl9leHBpcmVkKTsKK30KKwordm9pZCBpcmxhcF9zdGFydF93ZF90aW1lcihzdHJ1Y3QgaXJsYXBfY2IgKnNlbGYsIGludCB0aW1lb3V0KQoreworCWlyZGFfc3RhcnRfdGltZXIoJnNlbGYtPndkX3RpbWVyLCB0aW1lb3V0LCAodm9pZCAqKSBzZWxmLCAKKwkJCSBpcmxhcF93ZF90aW1lcl9leHBpcmVkKTsKK30KKwordm9pZCBpcmxhcF9zdGFydF9iYWNrb2ZmX3RpbWVyKHN0cnVjdCBpcmxhcF9jYiAqc2VsZiwgaW50IHRpbWVvdXQpCit7CisJaXJkYV9zdGFydF90aW1lcigmc2VsZi0+YmFja29mZl90aW1lciwgdGltZW91dCwgKHZvaWQgKikgc2VsZiwgCisJCQkgaXJsYXBfYmFja29mZl90aW1lcl9leHBpcmVkKTsKK30KKwordm9pZCBpcmxhcF9zdGFydF9tYnVzeV90aW1lcihzdHJ1Y3QgaXJsYXBfY2IgKnNlbGYsIGludCB0aW1lb3V0KQoreworCWlyZGFfc3RhcnRfdGltZXIoJnNlbGYtPm1lZGlhX2J1c3lfdGltZXIsIHRpbWVvdXQsIAorCQkJICh2b2lkICopIHNlbGYsIGlybGFwX21lZGlhX2J1c3lfZXhwaXJlZCk7Cit9CisKK3ZvaWQgaXJsYXBfc3RvcF9tYnVzeV90aW1lcihzdHJ1Y3QgaXJsYXBfY2IgKnNlbGYpCit7CisJLyogSWYgdGltZXIgaXMgYWN0aXZhdGVkLCBraWxsIGl0ISAqLworCWRlbF90aW1lcigmc2VsZi0+bWVkaWFfYnVzeV90aW1lcik7CisKKwkvKiBJZiB3ZSBhcmUgaW4gTkRNLCB0aGVyZSBpcyBhIGJ1bmNoIG9mIGV2ZW50cyBpbiBMQVAgdGhhdAorCSAqIHRoYXQgYmUgcGVuZGluZyBkdWUgdG8gdGhlIG1lZGlhX2J1c3kgY29uZGl0aW9uLCBzdWNoIGFzCisJICogQ09OTkVDVF9SRVFVRVNUIGFuZCBTRU5EX1VJX0ZSQU1FLiBJZiB3ZSBkb24ndCBnZW5lcmF0ZQorCSAqIGFuIGV2ZW50LCB0aGV5IHdpbGwgd2FpdCBmb3JldmVyLi4uCisJICogSmVhbiBJSSAqLworCWlmIChzZWxmLT5zdGF0ZSA9PSBMQVBfTkRNKQorCQlpcmxhcF9kb19ldmVudChzZWxmLCBNRURJQV9CVVNZX1RJTUVSX0VYUElSRUQsIE5VTEwsIE5VTEwpOworfQorCit2b2lkIGlybG1wX3N0YXJ0X3dhdGNoZG9nX3RpbWVyKHN0cnVjdCBsc2FwX2NiICpzZWxmLCBpbnQgdGltZW91dCkgCit7CisJaXJkYV9zdGFydF90aW1lcigmc2VsZi0+d2F0Y2hkb2dfdGltZXIsIHRpbWVvdXQsICh2b2lkICopIHNlbGYsCisJCQkgaXJsbXBfd2F0Y2hkb2dfdGltZXJfZXhwaXJlZCk7Cit9CisKK3ZvaWQgaXJsbXBfc3RhcnRfZGlzY292ZXJ5X3RpbWVyKHN0cnVjdCBpcmxtcF9jYiAqc2VsZiwgaW50IHRpbWVvdXQpIAoreworCWlyZGFfc3RhcnRfdGltZXIoJnNlbGYtPmRpc2NvdmVyeV90aW1lciwgdGltZW91dCwgKHZvaWQgKikgc2VsZiwKKwkJCSBpcmxtcF9kaXNjb3ZlcnlfdGltZXJfZXhwaXJlZCk7Cit9CisKK3ZvaWQgaXJsbXBfc3RhcnRfaWRsZV90aW1lcihzdHJ1Y3QgbGFwX2NiICpzZWxmLCBpbnQgdGltZW91dCkgCit7CisJaXJkYV9zdGFydF90aW1lcigmc2VsZi0+aWRsZV90aW1lciwgdGltZW91dCwgKHZvaWQgKikgc2VsZiwKKwkJCSBpcmxtcF9pZGxlX3RpbWVyX2V4cGlyZWQpOworfQorCit2b2lkIGlybG1wX3N0b3BfaWRsZV90aW1lcihzdHJ1Y3QgbGFwX2NiICpzZWxmKSAKK3sKKwkvKiBJZiB0aW1lciBpcyBhY3RpdmF0ZWQsIGtpbGwgaXQhICovCisJZGVsX3RpbWVyKCZzZWxmLT5pZGxlX3RpbWVyKTsKK30KKworLyoKKyAqIEZ1bmN0aW9uIGlybGFwX3Nsb3RfdGltZXJfZXhwaXJlZCAoZGF0YSkKKyAqCisgKiAgICBJckxBUCBzbG90IHRpbWVyIGhhcyBleHBpcmVkCisgKgorICovCitzdGF0aWMgdm9pZCBpcmxhcF9zbG90X3RpbWVyX2V4cGlyZWQodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaXJsYXBfY2IgKnNlbGYgPSAoc3RydWN0IGlybGFwX2NiICopIGRhdGE7CisKKwlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybjspOworCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IExBUF9NQUdJQywgcmV0dXJuOyk7CisKKwlpcmxhcF9kb19ldmVudChzZWxmLCBTTE9UX1RJTUVSX0VYUElSRUQsIE5VTEwsIE5VTEwpOworfSAKKworLyoKKyAqIEZ1bmN0aW9uIGlybGFwX3F1ZXJ5X3RpbWVyX2V4cGlyZWQgKGRhdGEpCisgKgorICogICAgSXJMQVAgcXVlcnkgdGltZXIgaGFzIGV4cGlyZWQKKyAqCisgKi8KK3N0YXRpYyB2b2lkIGlybGFwX3F1ZXJ5X3RpbWVyX2V4cGlyZWQodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaXJsYXBfY2IgKnNlbGYgPSAoc3RydWN0IGlybGFwX2NiICopIGRhdGE7CisKKwlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybjspOworCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IExBUF9NQUdJQywgcmV0dXJuOyk7CisKKwlpcmxhcF9kb19ldmVudChzZWxmLCBRVUVSWV9USU1FUl9FWFBJUkVELCBOVUxMLCBOVUxMKTsKK30gCisKKy8qCisgKiBGdW5jdGlvbiBpcmRhX2ZpbmFsX3RpbWVyX2V4cGlyZWQgKGRhdGEpCisgKgorICogICAgCisgKgorICovCitzdGF0aWMgdm9pZCBpcmxhcF9maW5hbF90aW1lcl9leHBpcmVkKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGlybGFwX2NiICpzZWxmID0gKHN0cnVjdCBpcmxhcF9jYiAqKSBkYXRhOworCisJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKKwlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBMQVBfTUFHSUMsIHJldHVybjspOworCisJaXJsYXBfZG9fZXZlbnQoc2VsZiwgRklOQUxfVElNRVJfRVhQSVJFRCwgTlVMTCwgTlVMTCk7Cit9CisKKy8qCisgKiBGdW5jdGlvbiBpcmRhX3dkX3RpbWVyX2V4cGlyZWQgKGRhdGEpCisgKgorICogICAgCisgKgorICovCitzdGF0aWMgdm9pZCBpcmxhcF93ZF90aW1lcl9leHBpcmVkKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGlybGFwX2NiICpzZWxmID0gKHN0cnVjdCBpcmxhcF9jYiAqKSBkYXRhOworCQorCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CisJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gTEFQX01BR0lDLCByZXR1cm47KTsKKwkKKwlpcmxhcF9kb19ldmVudChzZWxmLCBXRF9USU1FUl9FWFBJUkVELCBOVUxMLCBOVUxMKTsKK30KKworLyoKKyAqIEZ1bmN0aW9uIGlyZGFfYmFja29mZl90aW1lcl9leHBpcmVkIChkYXRhKQorICoKKyAqICAgIAorICoKKyAqLworc3RhdGljIHZvaWQgaXJsYXBfYmFja29mZl90aW1lcl9leHBpcmVkKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGlybGFwX2NiICpzZWxmID0gKHN0cnVjdCBpcmxhcF9jYiAqKSBkYXRhOworCQorCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CisJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gTEFQX01BR0lDLCByZXR1cm47KTsKKwkKKwlpcmxhcF9kb19ldmVudChzZWxmLCBCQUNLT0ZGX1RJTUVSX0VYUElSRUQsIE5VTEwsIE5VTEwpOworfQorCisKKy8qCisgKiBGdW5jdGlvbiBpcnR0eV9tZWRpYV9idXN5X2V4cGlyZWQgKGRhdGEpCisgKgorICogICAgCisgKi8KK3ZvaWQgaXJsYXBfbWVkaWFfYnVzeV9leHBpcmVkKHZvaWQqIGRhdGEpCit7CisJc3RydWN0IGlybGFwX2NiICpzZWxmID0gKHN0cnVjdCBpcmxhcF9jYiAqKSBkYXRhOworCisJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKKworCWlyZGFfZGV2aWNlX3NldF9tZWRpYV9idXN5KHNlbGYtPm5ldGRldiwgRkFMU0UpOworCS8qIE5vdGUgOiB0aGUgTEFQIGV2ZW50IHdpbGwgYmUgc2VuZCBpbiBpcmxhcF9zdG9wX21idXN5X3RpbWVyKCksCisJKiB0byBjYXRjaCBvdGhlciBjYXNlcyB3aGVyZSB0aGUgZmxhZyBpcyBjbGVhcmVkIChmb3IgZXhhbXBsZQorCSogYWZ0ZXIgYSBkaXNjb3ZlcnkpIC0gSmVhbiBJSSAqLworfQo=