LyoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIENvcHlyaWdodCAoQykgMjAwNCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQKKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKi8KCiNpZm5kZWYgVVRNU0NBTEVfSAojZGVmaW5lIFVUTVNDQUxFX0gKCiNpbmNsdWRlICJ1bmljb2RlL3V0eXBlcy5oIgoKI2lmICFVQ09ORklHX05PX0ZPUk1BVFRJTkcKCi8qKiAKICogXGZpbGUKICogXGJyaWVmIEMgQVBJOiBVbml2ZXJzYWwgVGltZSBTY2FsZQogKgogKiBUaGVyZSBhcmUgcXVpdGUgYSBmZXcgZGlmZmVyZW50IGNvbnZlbnRpb25zIGZvciBiaW5hcnkgZGF0ZXRpbWUsIGRlcGVuZGluZyBvbiBkaWZmZXJlbnQKICogcGxhdGZvcm1zIGFuZCBwcm90b2NvbHMuIFNvbWUgb2YgdGhlc2UgaGF2ZSBzZXZlcmUgZHJhd2JhY2tzLiBGb3IgZXhhbXBsZSwgcGVvcGxlIHVzaW5nCiAqIFVuaXggdGltZSAoc2Vjb25kcyBzaW5jZSBKYW4gMSwgMTk3MCkgdGhpbmsgdGhhdCB0aGV5IGFyZSBzYWZlIHVudGlsIG5lYXIgdGhlIHllYXIgMjAzOC4KICogQnV0IGNhc2VzIGNhbiBhbmQgZG8gYXJpc2Ugd2hlcmUgYXJpdGhtZXRpYyBtYW5pcHVsYXRpb25zIGNhdXNlcyBzZXJpb3VzIHByb2JsZW1zLiBDb25zaWRlcgogKiB0aGUgY29tcHV0YXRpb24gb2YgdGhlIGF2ZXJhZ2Ugb2YgdHdvIGRhdGV0aW1lcywgZm9yIGV4YW1wbGU6IGlmIG9uZSBjYWxjdWxhdGVzIHRoZW0gd2l0aAogKiA8Y29kZT5hdmVyYWdlVGltZSA9ICh0aW1lMSArIHRpbWUyKS8yPC9jb2RlPiwgdGhlcmUgd2lsbCBiZSBvdmVyZmxvdyBldmVuIHdpdGggZGF0ZXMKICogYXJvdW5kIHRoZSBwcmVzZW50LiBNb3Jlb3ZlciwgZXZlbiBpZiB0aGVzZSBwcm9ibGVtcyBkb24ndCBvY2N1ciwgdGhlcmUgaXMgdGhlIGlzc3VlIG9mCiAqIGNvbnZlcnNpb24gYmFjayBhbmQgZm9ydGggYmV0d2VlbiBkaWZmZXJlbnQgc3lzdGVtcy4KICoKICogPHA+CiAqIEJpbmFyeSBkYXRldGltZXMgZGlmZmVyIGluIGEgbnVtYmVyIG9mIHdheXM6IHRoZSBkYXRhdHlwZSwgdGhlIHVuaXQsCiAqIGFuZCB0aGUgZXBvY2ggKG9yaWdpbikuIFdlJ2xsIHJlZmVyIHRvIHRoZXNlIGFzIHRpbWUgc2NhbGVzLiBGb3IgZXhhbXBsZToKICoKICogPHRhYmxlIGJvcmRlcj0iMSIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSI0Ij4KICogIDxjYXB0aW9uPgogKiAgICA8aDM+VGFibGUgMTogQmluYXJ5IFRpbWUgU2NhbGVzPC9oMz4KICoKICogIDwvY2FwdGlvbj4KICogIDx0cj4KICogICAgPHRoIGFsaWduPSJsZWZ0Ij5Tb3VyY2U8L3RoPgogKiAgICA8dGggYWxpZ249ImxlZnQiPkRhdGF0eXBlPC90aD4KICogICAgPHRoIGFsaWduPSJsZWZ0Ij5Vbml0PC90aD4KICogICAgPHRoIGFsaWduPSJsZWZ0Ij5FcG9jaDwvdGg+CiAqICA8L3RyPgogKgogKiAgPHRyPgogKiAgICA8dGQ+SkFWQV9USU1FPC90ZD4KICogICAgPHRkPmludDY0X3Q8L3RkPgogKiAgICA8dGQ+bWlsbGlzZWNvbmRzPC90ZD4KICogICAgPHRkPkphbiAxLCAxOTcwPC90ZD4KICogIDwvdHI+CiAqICA8dHI+CiAqCiAqICAgIDx0ZD5VTklYX1RJTUU8L3RkPgogKiAgICA8dGQ+aW50MzJfdCBvciBpbnQ2NF90PC90ZD4KICogICAgPHRkPnNlY29uZHM8L3RkPgogKiAgICA8dGQ+SmFuIDEsIDE5NzA8L3RkPgogKiAgPC90cj4KICogIDx0cj4KICogICAgPHRkPklDVTRDX1RJTUU8L3RkPgogKgogKiAgICA8dGQ+ZG91YmxlPC90ZD4KICogICAgPHRkPm1pbGxpc2Vjb25kczwvdGQ+CiAqICAgIDx0ZD5KYW4gMSwgMTk3MDwvdGQ+CiAqICA8L3RyPgogKiAgPHRyPgogKiAgICA8dGQ+V0lORE9XU19GSUxFX1RJTUU8L3RkPgogKiAgICA8dGQ+aW50NjRfdDwvdGQ+CiAqCiAqICAgIDx0ZD50aWNrcyAoMTAwIG5hbm9zZWNvbmRzKTwvdGQ+CiAqICAgIDx0ZD5KYW4gMSwgMTYwMTwvdGQ+CiAqICA8L3RyPgogKiAgPHRyPgogKiAgICA8dGQ+V0lORE9XU19EQVRFX1RJTUU8L3RkPgogKiAgICA8dGQ+aW50NjRfdDwvdGQ+CiAqICAgIDx0ZD50aWNrcyAoMTAwIG5hbm9zZWNvbmRzKTwvdGQ+CiAqCiAqICAgIDx0ZD5KYW4gMSwgMDAwMTwvdGQ+CiAqICA8L3RyPgogKiAgPHRyPgogKiAgICA8dGQ+TUFDX09MRF9USU1FPC90ZD4KICogICAgPHRkPmludDMyX3Q8L3RkPgogKiAgICA8dGQ+c2Vjb25kczwvdGQ+CiAqICAgIDx0ZD5KYW4gMSwgMTkwNDwvdGQ+CiAqCiAqICA8L3RyPgogKiAgPHRyPgogKiAgICA8dGQ+TUFDX1RJTUU8L3RkPgogKiAgICA8dGQ+ZG91YmxlPC90ZD4KICogICAgPHRkPnNlY29uZHM8L3RkPgogKiAgICA8dGQ+SmFuIDEsIDIwMDE8L3RkPgogKiAgPC90cj4KICoKICogIDx0cj4KICogICAgPHRkPkVYQ0VMX1RJTUU8L3RkPgogKiAgICA8dGQ+PzwvdGQ+CiAqICAgIDx0ZD5kYXlzPC90ZD4KICogICAgPHRkPkRlYyAzMSwgMTg5OTwvdGQ+CiAqICA8L3RyPgogKiAgPHRyPgogKgogKiAgICA8dGQ+REIyX1RJTUU8L3RkPgogKiAgICA8dGQ+PzwvdGQ+CiAqICAgIDx0ZD5kYXlzPC90ZD4KICogICAgPHRkPkRlYyAzMSwgMTg5OTwvdGQ+CiAqICA8L3RyPgogKiA8L3RhYmxlPgogKgogKiA8cD4KICogQWxsIG9mIHRoZSBlcG9jaHMgc3RhcnQgYXQgMDA6MDAgYW0gKHRoZSBlYXJsaWVzdCBwb3NzaWJsZSB0aW1lIG9uIHRoZSBkYXkgaW4gcXVlc3Rpb24pLAogKiBhbmQgYXJlIGFzc3VtZWQgdG8gYmUgVVRDLgogKgogKiA8cD4KICogVGhlIHJhbmdlcyBmb3IgZGlmZmVyZW50IGRhdGF0eXBlcyBhcmUgZ2l2ZW4gaW4gdGhlIGZvbGxvd2luZyB0YWJsZSAoYWxsIHZhbHVlcyBpbiB5ZWFycykuCiAqIFRoZSByYW5nZSBvZiB5ZWFycyBpbmNsdWRlcyB0aGUgZW50aXJlIHJhbmdlIGV4cHJlc3NpYmxlIHdpdGggcG9zaXRpdmUgYW5kIG5lZ2F0aXZlCiAqIHZhbHVlcyBvZiB0aGUgZGF0YXR5cGUuIFRoZSByYW5nZSBvZiB5ZWFycyBmb3IgZG91YmxlIGlzIHRoZSByYW5nZSB0aGF0IHdvdWxkIGJlIGFsbG93ZWQKICogd2l0aG91dCBsb3NpbmcgcHJlY2lzaW9uIHRvIHRoZSBjb3JyZXNwb25kaW5nIHVuaXQuCiAqCiAqIDx0YWJsZSBib3JkZXI9IjEiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iNCI+CiAqICA8dHI+CiAqICAgIDx0aCBhbGlnbj0ibGVmdCI+VW5pdHM8L3RoPgogKiAgICA8dGggYWxpZ249ImxlZnQiPmludDY0X3Q8L3RoPgogKiAgICA8dGggYWxpZ249ImxlZnQiPmRvdWJsZTwvdGg+CiAqICAgIDx0aCBhbGlnbj0ibGVmdCI+aW50MzJfdDwvdGg+CiAqICA8L3RyPgogKgogKiAgPHRyPgogKiAgICA8dGQ+MSBzZWM8L3RkPgogKiAgICA8dGQgYWxpZ249InJpZ2h0Ij41Ljg0NTQy1zEwubk8L3RkPgogKiAgICA8dGQgYWxpZ249InJpZ2h0Ij4yODUsNDIwLDkyMC45NDwvdGQ+CiAqICAgIDx0ZCBhbGlnbj0icmlnaHQiPjEzNi4xMDwvdGQ+CiAqICA8L3RyPgogKiAgPHRyPgogKgogKiAgICA8dGQ+MSBtaWxsaXNlY29uZDwvdGQ+CiAqICAgIDx0ZCBhbGlnbj0icmlnaHQiPjU4NCw1NDIsMDQ2LjA5PC90ZD4KICogICAgPHRkIGFsaWduPSJyaWdodCI+Mjg1LDQyMC45MjwvdGQ+CiAqICAgIDx0ZCBhbGlnbj0icmlnaHQiPjAuMTQ8L3RkPgogKiAgPC90cj4KICogIDx0cj4KICogICAgPHRkPjEgbWljcm9zZWNvbmQ8L3RkPgogKgogKiAgICA8dGQgYWxpZ249InJpZ2h0Ij41ODQsNTQyLjA1PC90ZD4KICogICAgPHRkIGFsaWduPSJyaWdodCI+Mjg1LjQyPC90ZD4KICogICAgPHRkIGFsaWduPSJyaWdodCI+MC4wMDwvdGQ+CiAqICA8L3RyPgogKiAgPHRyPgogKiAgICA8dGQ+MTAwIG5hbm9zZWNvbmRzICh0aWNrKTwvdGQ+CiAqICAgIDx0ZCBhbGlnbj0icmlnaHQiPjU4LDQ1NC4yMDwvdGQ+CiAqICAgIDx0ZCBhbGlnbj0icmlnaHQiPjI4LjU0PC90ZD4KICogICAgPHRkIGFsaWduPSJyaWdodCI+MC4wMDwvdGQ+CiAqICA8L3RyPgogKiAgPHRyPgogKiAgICA8dGQ+MSBuYW5vc2Vjb25kPC90ZD4KICogICAgPHRkIGFsaWduPSJyaWdodCI+NTg0LjU0MjA0NjE8L3RkPgogKiAgICA8dGQgYWxpZ249InJpZ2h0Ij4wLjI4NTQ8L3RkPgogKiAgICA8dGQgYWxpZ249InJpZ2h0Ij4wLjAwPC90ZD4KICogIDwvdHI+CiAqIDwvdGFibGU+CiAqCiAqIDxwPgogKiBUaGVzZSBmdW5jdGlvbnMgaW1wbGVtZW50IGEgdW5pdmVyc2FsIHRpbWUgc2NhbGUgd2hpY2ggY2FuIGJlIHVzZWQgYXMgYSAncGl2b3QnLAogKiBhbmQgcHJvdmlkZSBjb252ZXJzaW9uIGZ1bmN0aW9ucyB0byBhbmQgZnJvbSBhbGwgb3RoZXIgbWFqb3IgdGltZSBzY2FsZXMuCiAqIFRoaXMgZGF0ZXRpbWVzIHRvIGJlIGNvbnZlcnRlZCB0byB0aGUgcGl2b3QgdGltZSwgc2FmZWx5IG1hbmlwdWxhdGVkLAogKiBhbmQgY29udmVydGVkIGJhY2sgdG8gYW55IG90aGVyIGRhdGV0aW1lIHRpbWUgc2NhbGUuCiAqCiAqPHA+CiAqIFNvIHdoYXQgdG8gdXNlIGZvciB0aGlzIHBpdm90PyBKYXZhIHRpbWUgaGFzIHBsZW50eSBvZiByYW5nZSwgYnV0IGNhbm5vdCByZXByZXNlbnQKICogV2luZG93cyBkYXRldGltZXMgd2l0aG91dCBzZXZlcmUgbG9zcyBvZiBwcmVjaXNpb24uIElDVTRDIHRpbWUgYWRkcmVzc2VzIHRoaXMgYnkgdXNpbmcgYQogKiA8Y29kZT5kb3VibGU8L2NvZGU+IHRoYXQgaXMgb3RoZXJ3aXNlIGVxdWl2YWxlbnQgdG8gdGhlIEphdmEgdGltZS4gSG93ZXZlciwgdGhlcmUgYXJlIGRpc2FkdmFudGFnZXMKICogd2l0aCA8Y29kZT5kb3VibGVzPC9jb2RlPi4gVGhleSBwcm92aWRlIGZvciBtdWNoIG1vcmUgZ3JhY2VmdWwgZGVncmFkYXRpb24gaW4gYXJpdGhtZXRpYyBvcGVyYXRpb25zLgogKiBCdXQgdGhleSBvbmx5IGhhdmUgNTMgYml0cyBvZiBhY2N1cmFjeSwgd2hpY2ggbWVhbnMgdGhhdCB0aGV5IHdpbGwgbG9zZSBwcmVjaXNpb24gd2hlbgogKiBjb252ZXJ0aW5nIGJhY2sgYW5kIGZvcnRoIHRvIHRpY2tzLiBXaGF0IHdvdWxkIHJlYWxseSBiZSBuaWNlIHdvdWxkIGJlIGEKICogbG9uZyBkb3VibGUgKDgwIGJpdHMgLS0gNjQgYml0IG1hbnRpc3NhKSwgYnV0IHRoYXQgaXMgbm90IHN1cHBvcnRlZCBvbiBtb3N0IHN5c3RlbXMuCiAqCiAqPHA+CiAqIFRoZSBVbml4IGV4dGVuZGVkIHRpbWUgdXNlcyBhIHN0cnVjdHVyZSB3aXRoIHR3byBjb21wb25lbnRzOiB0aW1lIGluIHNlY29uZHMgYW5kIGEKICogZnJhY3Rpb25hbCBmaWVsZCAobWljcm9zZWNvbmRzKS4gSG93ZXZlciwgdGhpcyBpcyBjbHVtc3ksIHNsb3csIGFuZAogKiBwcm9uZSB0byBlcnJvciAoeW91IGFsd2F5cyBoYXZlIHRvIGtlZXAgdHJhY2sgb2Ygb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyBpbiB0aGUKICogZnJhY3Rpb25hbCBmaWVsZCkuIDxjb2RlPkJpZ0RlY2ltYWw8L2NvZGU+IHdvdWxkIGFsbG93IGZvciBhcmJpdHJhcnkgcHJlY2lzaW9uIGFuZCBhcmJpdHJhcnkgcmFuZ2UsCiAqIGJ1dCB3ZSBkbyBub3Qgd2FudCB0byB1c2UgdGhpcyBhcyB0aGUgbm9ybWFsIHR5cGUsIGJlY2F1c2UgaXQgaXMgc2xvdyBhbmQgZG9lcyBub3QKICogaGF2ZSBhIGZpeGVkIHNpemUuCiAqCiAqPHA+CiAqIEJlY2F1c2Ugb2YgdGhlc2UgaXNzdWVzLCB3ZSBlbmRlZCB1cCBjb25jbHVkaW5nIHRoYXQgdGhlIFdpbmRvd3MgZGF0ZXRpbWUgd291bGQgYmUgdGhlCiAqIGJlc3QgcGl2b3QuIEhvd2V2ZXIsIHdlIHVzZSB0aGUgZnVsbCByYW5nZSBhbGxvd2VkIGJ5IHRoZSBkYXRhdHlwZSwgYWxsb3dpbmcgZm9yCiAqIGRhdGV0aW1lcyBiYWNrIHRvIDI5LDAwMCBCQyBhbmQgdXAgdG8gMjksMDAwIEFELiBUaGlzIHRpbWUgc2NhbGUgaXMgdmVyeSBmaW5lIGdyYWluZWQsCiAqIGRvZXMgbm90IGxvc2UgcHJlY2lzaW9uLCBhbmQgY292ZXJzIGEgcmFuZ2UgdGhhdCB3aWxsIG1lZXQgYWxtb3N0IGFsbCByZXF1aXJlbWVudHMuCiAqIEl0IHdpbGwgbm90IGhhbmRsZSB0aGUgcmFuZ2UgdGhhdCBKYXZhIHRpbWVzIGRvLCBidXQgZnJhbmtseSwgYmVpbmcgYWJsZSB0byBoYW5kbGUgZGF0ZXMKICogYmVmb3JlIDI5LDAwMCBCQyBvciBhZnRlciAyOSwwMDAgQUQgaXMgb2YgdmVyeSBsaW1pdGVkIGludGVyZXN0LgogKgogKi8KCi8qKgogKiA8Y29kZT5VRGF0ZVRpbWVTY2FsZTwvY29kZT4gdmFsdWVzIGFyZSB1c2VkIHRvIHNwZWNpZnkgdGhlIHRpbWUgc2NhbGUgdXNlZCBmb3IKICogY29udmVyc2lvbiBpbnRvIG9yIG91dCBpZiB0aGUgdW5pdmVyc2FsIHRpbWUgc2NhbGUuCiAqCiAqIEBkcmFmdCBJQ1UgMy4yCiAqLwp0eXBlZGVmIGVudW0gVURhdGVUaW1lU2NhbGUgewogICAgLyoqCiAgICAgKiBVc2VkIGluIHRoZSBKREsuIERhdGEgaXMgYSBKYXZhIDxjb2RlPmxvbmc8L2NvZGU+ICg8Y29kZT5pbnQ2NF90PC9jb2RlPikuIFZhbHVlCiAgICAgKiBpcyBtaWxsaXNlY29uZHMgc2luY2UgSmFudWFyeSAxLCAxOTcwLgogICAgICoKICAgICAqIEBkcmFmdCBJQ1UgMy4yCiAgICAgKi8KICAgIFVEVFNfSkFWQV9USU1FID0gMCwKCiAgICAvKioKICAgICAqIFVzZWQgb24gVW5peCBzeXN0ZW1zLiBEYXRhIGlzIDxjb2RlPmludDMyX3Q8L2NvZGU+IG9yIDxjb2RlPmludDY0X3Q8L2NvZGU+LiBWYWx1ZQogICAgICogaXMgc2Vjb25kcyBzaW5jZSBKYW51YXJ5IDEsIDE5NzAuCiAgICAgKgogICAgICogQGRyYWZ0IElDVSAzLjIKICAgICAqLwogICAgVURUU19VTklYX1RJTUUsCiAgICAKICAgIC8qKgogICAgICogVXNlZCBpbiBJVUM0Qy4gRGF0YSBpcyBhIDxjb2RlPmRvdWJsZTwvY29kZT4uIFZhbHVlCiAgICAgKiBpcyBtaWxsaXNlY29uZHMgc2luY2UgSmFudWFyeSAxLCAxOTcwLgogICAgICoKICAgICAqIEBkcmFmdCBJQ1UgMy4yCiAgICAgKi8KICAgIFVEVFNfSUNVNENfVElNRSwKICAgIAogICAgLyoqCiAgICAgKiBVc2VkIGluIFdpbmRvd3MgZm9yIGZpbGUgdGltZXMuIERhdGEgaXMgYW4gPGNvZGU+aW50NjRfdDwvY29kZT4uIFZhbHVlCiAgICAgKiBpcyB0aWNrcyAoMSB0aWNrID09IDEwMCBuYW5vc2Vjb25kcykgc2luY2UgSmFudWFyeSAxLCAxNjAxLgogICAgICoKICAgICAqIEBkcmFmdCBJQ1UgMy4yCiAgICAgKi8KICAgIFVEVFNfV0lORE9XU19GSUxFX1RJTUUsCiAgICAKICAgIC8qKgogICAgICogVXNlZCBpbiBXaW5kb3dzIGZvciBkYXRlcyBhbmQgdGltZXMgKD8pLiBEYXRhIGlzIGFuIDxjb2RlPmludDY0X3Q8L2NvZGU+LiBWYWx1ZQogICAgICogaXMgdGlja3MgKDEgdGljayA9PSAxMDAgbmFub3NlY29uZHMpIHNpbmNlIEphbnVhcnkgMSwgMDAwMS4KICAgICAqCiAgICAgKiBAZHJhZnQgSUNVIDMuMgogICAgICovCiAgICBVRFRTX1dJTkRPV1NfREFURV9USU1FLAogICAgCiAgICAvKioKICAgICAqIFVzZWQgaW4gb2xkZXIgTWFjaW50b3NoIHN5c3RlbXMuIERhdGEgaXMgYW4gPGNvZGU+aW50MzJfdDwvY29kZT4uIFZhbHVlCiAgICAgKiBpcyBzZWNvbmRzIHNpbmNlIEphbnVhcnkgMSwgMTkwNC4KICAgICAqCiAgICAgKiBAZHJhZnQgSUNVIDMuMgogICAgICovCiAgICBVRFRTX01BQ19PTERfVElNRSwKICAgIAogICAgLyoqCiAgICAgKiBVc2VkIGluIG5ld2VyIE1hY2ludG9zaCBzeXN0ZW1zLiBEYXRhIGlzIGEgPGNvZGU+ZG91YmxlPC9jb2RlPi4gVmFsdWUKICAgICAqIGlzIHNlY29uZHMgc2luY2UgSmFudWFyeSAxLCAyMDAxLgogICAgICoKICAgICAqIEBkcmFmdCBJQ1UgMy4yCiAgICAgKi8KICAgIFVEVFNfTUFDX1RJTUUsCiAgICAKICAgIC8qKgogICAgICogVXNlZCBpbiBFeGNlbC4gRGF0YSBpcyBhbiA8Y29kZT4/dW5rbm93bj88L2NvZGU+LiBWYWx1ZQogICAgICogaXMgZGF5cyBzaW5jZSBEZWNlbWJlciAzMSwgMTg5OS4KICAgICAqCiAgICAgKiBAZHJhZnQgSUNVIDMuMgogICAgICovCiAgICBVRFRTX0VYQ0VMX1RJTUUsCiAgICAKICAgIC8qKgogICAgICogVXNlZCBpbiBEQjIuIERhdGEgaXMgYW4gPGNvZGU+P3Vua25vd24/PC9jb2RlPi4gVmFsdWUKICAgICAqIGlzIGRheXMgc2luY2UgRGVjZW1iZXIgMzEsIDE4OTkuCiAgICAgKgogICAgICogQGRyYWZ0IElDVSAzLjIKICAgICAqLwogICAgVURUU19EQjJfVElNRSwKCiAgICAvKioKICAgICAqIFRoZSBmaXJzdCB1bnVzZWQgdGltZSBzY2FsZSB2YWx1ZS4KICAgICAqCiAgICAgKiBAZHJhZnQgSUNVIDMuMgogICAgICovCiAgICBVRFRTX01BWF9TQ0FMRQp9IFVEYXRlVGltZVNjYWxlOwoKdHlwZWRlZiBlbnVtIFVUaW1lU2NhbGVWYWx1ZSB7CiAgICAvKioKICAgICAqIFRoZSBjb25zdGFudCB1c2VkIHRvIHNlbGVjdCB0aGUgdW5pdHMgdmFsZQogICAgICogZm9yIGEgdGltZSBzY2FsZS4KICAgICAqIAogICAgICogQHNlZSB1dG1zX2dldFRpbWVTY2FsZVZhbHVlCiAgICAgKgogICAgICogQGRyYWZ0IElDVSAzLjIKICAgICAqLwogICAgVVRTVl9VTklUU19WQUxVRSA9IDAsCgogICAgLyoqCiAgICAgKiBUaGUgY29uc3RhbnQgdXNlZCB0byBzZWxlY3QgdGhlIGVwb2NoIG9mZnNldCB2YWx1ZQogICAgICogZm9yIGEgdGltZSBzY2FsZS4KICAgICAqIAogICAgICogQHNlZSB1dG1zX2dldFRpbWVTY2FsZVZhbHVlCiAgICAgKgogICAgICogQGRyYWZ0IElDVSAzLjIKICAgICAqLwogICAgVVRTVl9FUE9DSF9PRkZTRVRfVkFMVUUsCgogICAgLyoqCiAgICAgKiBUaGUgY29uc3RhbnQgdXNlZCB0byBzZWxlY3QgdGhlIG1pbmltdW0gZnJvbSB2YWx1ZQogICAgICogZm9yIGEgdGltZSBzY2FsZS4KICAgICAqIAogICAgICogQHNlZSB1dG1zX2dldFRpbWVTY2FsZVZhbHVlCiAgICAgKgogICAgICogQGRyYWZ0IElDVSAzLjIKICAgICAqLwogICAgVVRTVl9GUk9NX01JTl9WQUxVRSwKCiAgICAvKioKICAgICAqIFRoZSBjb25zdGFudCB1c2VkIHRvIHNlbGVjdCB0aGUgbWF4aW11bSBmcm9tIHZhbHVlCiAgICAgKiBmb3IgYSB0aW1lIHNjYWxlLgogICAgICogCiAgICAgKiBAc2VlIHV0bXNfZ2V0VGltZVNjYWxlVmFsdWUKICAgICAqCiAgICAgKiBAZHJhZnQgSUNVIDMuMgogICAgICovCiAgICBVVFNWX0ZST01fTUFYX1ZBTFVFLAoKICAgIC8qKgogICAgICogVGhlIGNvbnN0YW50IHVzZWQgdG8gc2VsZWN0IHRoZSBtaW5pbXVtIHRvIHZhbHVlCiAgICAgKiBmb3IgYSB0aW1lIHNjYWxlLgogICAgICogCiAgICAgKiBAc2VlIHV0bXNfZ2V0VGltZVNjYWxlVmFsdWUKICAgICAqCiAgICAgKiBAZHJhZnQgSUNVIDMuMgogICAgICovCiAgICBVVFNWX1RPX01JTl9WQUxVRSwKCiAgICAvKioKICAgICAqIFRoZSBjb25zdGFudCB1c2VkIHRvIHNlbGVjdCB0aGUgbWF4aW11bSB0byB2YWx1ZQogICAgICogZm9yIGEgdGltZSBzY2FsZS4KICAgICAqIAogICAgICogQHNlZSB1dG1zX2dldFRpbWVTY2FsZVZhbHVlCiAgICAgKgogICAgICogQGRyYWZ0IElDVSAzLjIKICAgICAqLwogICAgVVRTVl9UT19NQVhfVkFMVUUsCgogICAgLyoqCiAgICAgKiBUaGUgY29uc3RhbnQgdXNlZCB0byBzZWxlY3QgdGhlIGVwb2NoIHBsdXMgb25lIHZhbHVlCiAgICAgKiBmb3IgYSB0aW1lIHNjYWxlLgogICAgICogCiAgICAgKiBOT1RFOiBUaGlzIGlzIGFuIGludGVybmFsIHZhbHVlLiBETyBOT1QgVVNFIElULiBNYXkgbm90CiAgICAgKiBhY3R1YWxseSBiZSBlcXVhbCB0byB0aGUgZXBvY2ggb2Zmc2V0IHZhbHVlIHBsdXMgb25lLgogICAgICogCiAgICAgKiBAc2VlIHV0bXNfZ2V0VGltZVNjYWxlVmFsdWUKICAgICAqCiAgICAgKiBAZHJhZnQgSUNVIDMuMgogICAgICovCiAgICBVVFNWX0VQT0NIX09GRlNFVF9QTFVTXzFfVkFMVUUsCgogICAgLyoqCiAgICAgKiBUaGUgY29uc3RhbnQgdXNlZCB0byBzZWxlY3QgdGhlIGVwb2NoIHBsdXMgb25lIHZhbHVlCiAgICAgKiBmb3IgYSB0aW1lIHNjYWxlLgogICAgICogCiAgICAgKiBOT1RFOiBUaGlzIGlzIGFuIGludGVybmFsIHZhbHVlLiBETyBOT1QgVVNFIElULiBNYXkgbm90CiAgICAgKiBhY3R1YWxseSBiZSBlcXVhbCB0byB0aGUgZXBvY2ggb2Zmc2V0IHZhbHVlIHBsdXMgb25lLgogICAgICogCiAgICAgKiBAc2VlIHV0bXNfZ2V0VGltZVNjYWxlVmFsdWUKICAgICAqCiAgICAgKiBAZHJhZnQgSUNVIDMuMgogICAgICovCiAgICBVVFNWX0VQT0NIX09GRlNFVF9NSU5VU18xX1ZBTFVFLAoKICAgIC8qKgogICAgICogVGhlIGNvbnN0YW50IHVzZWQgdG8gc2VsZWN0IHRoZSB1bml0cyByb3VuZCB2YWx1ZQogICAgICogZm9yIGEgdGltZSBzY2FsZS4KICAgICAqIAogICAgICogTk9URTogVGhpcyBpcyBhbiBpbnRlcm5hbCB2YWx1ZS4gRE8gTk9UIFVTRSBJVC4KICAgICAqIAogICAgICogQHNlZSB1dG1zX2dldFRpbWVTY2FsZVZhbHVlCiAgICAgKgogICAgICogQGludGVybmFsCiAgICAgKi8KICAgIFVUU1ZfVU5JVFNfUk9VTkRfVkFMVUUsCgogICAgLyoqCiAgICAgKiBUaGUgY29uc3RhbnQgdXNlZCB0byBzZWxlY3QgdGhlIG1pbmltdW0gc2FmZSByb3VuZGluZyB2YWx1ZQogICAgICogZm9yIGEgdGltZSBzY2FsZS4KICAgICAqIAogICAgICogTk9URTogVGhpcyBpcyBhbiBpbnRlcm5hbCB2YWx1ZS4gRE8gTk9UIFVTRSBJVC4KICAgICAqIAogICAgICogQHNlZSB1dG1zX2dldFRpbWVTY2FsZVZhbHVlCiAgICAgKgogICAgICogQGludGVybmFsCiAgICAgKi8KICAgIFVUU1ZfTUlOX1JPVU5EX1ZBTFVFLAoKICAgIC8qKgogICAgICogVGhlIGNvbnN0YW50IHVzZWQgdG8gc2VsZWN0IHRoZSBtYXhpbXVtIHNhZmUgcm91bmRpbmcgdmFsdWUKICAgICAqIGZvciBhIHRpbWUgc2NhbGUuCiAgICAgKiAKICAgICAqIE5PVEU6IFRoaXMgaXMgYW4gaW50ZXJuYWwgdmFsdWUuIERPIE5PVCBVU0UgSVQuCiAgICAgKiAKICAgICAqIEBzZWUgdXRtc19nZXRUaW1lU2NhbGVWYWx1ZQogICAgICoKICAgICAqIEBpbnRlcm5hbAogICAgICovCiAgICBVVFNWX01BWF9ST1VORF9WQUxVRSwKCiAgICAvKioKICAgICAqIFRoZSBudW1iZXIgb2YgdGltZSBzY2FsZSB2YWx1ZXMuCiAgICAgKiAKICAgICAqIE5PVEU6IFRoaXMgaXMgYW4gaW50ZXJuYWwgdmFsdWUuIERPIE5PVCBVU0UgSVQuCiAgICAgKiAKICAgICAqIEBzZWUgdXRtc19nZXRUaW1lU2NhbGVWYWx1ZQogICAgICoKICAgICAqIEBpbnRlcm5hbAogICAgICovCiAgICBVVFNWX01BWF9TQ0FMRV9WQUxVRQp9IFVUaW1lU2NhbGVWYWx1ZTsKCi8qKgogKiBHZXQgYSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIHRpbWUgc2NhbGUuCiAqIAogKiBAcGFyYW0gdGltZVNjYWxlIFRoZSB0aW1lIHNjYWxlCiAqIEBwYXJhbSB2YWx1ZSBBIGNvbnN0YW50IHJlcHJlc2VudGluZyB0aGUgdmFsdWUgdG8gZ2V0CiAqIAogKiBAcmV0dXJuIC0gdGhlIHZhbHVlLgogKiAKICogQGRyYWZ0IElDVSAzLjIKICovClVfRFJBRlQgaW50NjRfdCBVX0VYUE9SVDIKICAgIHV0bXNjYWxlX2dldFRpbWVTY2FsZVZhbHVlKFVEYXRlVGltZVNjYWxlIHRpbWVTY2FsZSwgVVRpbWVTY2FsZVZhbHVlIHZhbHVlLCBVRXJyb3JDb2RlICpzdGF0dXMpOwoKLyogQ29udmVyc2lvbiB0byAndW5pdmVyc2FsIHRpbWUgc2NhbGUnICovCgovKioKICogQ29udmVydCBhIDxjb2RlPmRvdWJsZTwvY29kZT4gZGF0ZXRpbWUgZnJvbSB0aGUgZ2l2ZW4gdGltZSBzY2FsZSB0byB0aGUgdW5pdmVyc2FsIHRpbWUgc2NhbGUuCiAqCiAqIEBwYXJhbSBvdGhlclRpbWUgVGhlIDxjb2RlPmRvdWJsZTwvY29kZT4gZGF0ZXRpbWUKICogQHBhcmFtIHRpbWVTY2FsZSBUaGUgdGltZSBzY2FsZSB0byBjb252ZXJ0IGZyb20KICogQHBhcmFtIHN0YXR1cyBUaGUgc3RhdHVzIGNvZGUuIFNldCB0byA8Y29kZT5VX0lMTEVHQUxfQVJHVU1FTlRfRVJST1I8L2NvZGU+IGlmIHRoZSBjb252ZXJzaW9uIGlzIG91dCBvZiByYW5nZS4KICogCiAqIEByZXR1cm4gVGhlIGRhdGV0aW1lIGNvbnZlcnRlZCB0byB0aGUgdW5pdmVyc2FsIHRpbWUgc2NhbGUKICoKICogQGRyYWZ0IElDVSAzLjIKICovClVfRFJBRlQgaW50NjRfdCBVX0VYUE9SVDIKICAgIHV0bXNjYWxlX2Zyb21Eb3VibGUoZG91YmxlIG90aGVyVGltZSwgVURhdGVUaW1lU2NhbGUgdGltZVNjYWxlLCBVRXJyb3JDb2RlICpzdGF0dXMpOwoKLyoqCiAqIENvbnZlcnQgYSA8Y29kZT5pbnQ2NF90PC9jb2RlPiBkYXRldGltZSBmcm9tIHRoZSBnaXZlbiB0aW1lIHNjYWxlIHRvIHRoZSB1bml2ZXJzYWwgdGltZSBzY2FsZS4KICoKICogQHBhcmFtIG90aGVyVGltZSBUaGUgPGNvZGU+aW50NjRfdDwvY29kZT4gZGF0ZXRpbWUKICogQHBhcmFtIHRpbWVTY2FsZSBUaGUgdGltZSBzY2FsZSB0byBjb252ZXJ0IGZyb20KICogQHBhcmFtIHN0YXR1cyBUaGUgc3RhdHVzIGNvZGUuIFNldCB0byA8Y29kZT5VX0lMTEVHQUxfQVJHVU1FTlRfRVJST1I8L2NvZGU+IGlmIHRoZSBjb252ZXJzaW9uIGlzIG91dCBvZiByYW5nZS4KICogCiAqIEByZXR1cm4gVGhlIGRhdGV0aW1lIGNvbnZlcnRlZCB0byB0aGUgdW5pdmVyc2FsIHRpbWUgc2NhbGUKICoKICogQGRyYWZ0IElDVSAzLjIKICovClVfRFJBRlQgaW50NjRfdCBVX0VYUE9SVDIKICAgIHV0bXNjYWxlX2Zyb21JbnQ2NChpbnQ2NF90IG90aGVyVGltZSwgVURhdGVUaW1lU2NhbGUgdGltZVNjYWxlLCBVRXJyb3JDb2RlICpzdGF0dXMpOwoKLyogQ29udmVyc2lvbiBmcm9tICd1bml2ZXJzYWwgdGltZSBzY2FsZScgKi8KCi8qKgogKiBDb252ZXJ0IGEgZGF0ZXRpbWUgZnJvbSB0aGUgdW5pdmVyc2FsIHRpbWUgc2NhbGUgdG8gYSA8Y29kZT5kb3VibGU8L2NvZGU+IGluIHRoZSBnaXZlbiB0aW1lIHNjYWxlLgogKgogKiBAcGFyYW0gdW5pdmVyc2FsIFRoZSBkYXRldGltZSBpbiB0aGUgdW5pdmVyc2FsIHRpbWUgc2NhbGUKICogQHBhcmFtIHRpbWVTY2FsZSBUaGUgdGltZSBzY2FsZSB0byBjb252ZXJ0IHRvCiAqIEBwYXJhbSBzdGF0dXMgVGhlIHN0YXR1cyBjb2RlLiBTZXQgdG8gPGNvZGU+VV9JTExFR0FMX0FSR1VNRU5UX0VSUk9SPC9jb2RlPiBpZiB0aGUgY29udmVyc2lvbiBpcyBvdXQgb2YgcmFuZ2UuCiAqIAogKiBAcmV0dXJuIFRoZSBkYXRldGltZSBjb252ZXJ0ZWQgdG8gdGhlIGdpdmVuIHRpbWUgc2NhbGUKICoKICogQGRyYWZ0IElDVSAzLjIKICovClVfRFJBRlQgZG91YmxlIFVfRVhQT1JUMgogICAgdXRtc2NhbGVfdG9Eb3VibGUoaW50NjRfdCB1bml2ZXJzYWxUaW1lLCBVRGF0ZVRpbWVTY2FsZSB0aW1lU2NhbGUsIFVFcnJvckNvZGUgKnN0YXR1cyk7CgovKioKICogQ29udmVydCBhIGRhdGV0aW1lIGZyb20gdGhlIHVuaXZlcnNhbCB0aW1lIHNjYWxlIHRvIGEgPGNvZGU+aW50NjRfdDwvY29kZT4gaW4gdGhlIGdpdmVuIHRpbWUgc2NhbGUuCiAqCiAqIEBwYXJhbSB1bml2ZXJzYWwgVGhlIGRhdGV0aW1lIGluIHRoZSB1bml2ZXJzYWwgdGltZSBzY2FsZQogKiBAcGFyYW0gdGltZVNjYWxlIFRoZSB0aW1lIHNjYWxlIHRvIGNvbnZlcnQgdG8KICogQHBhcmFtIHN0YXR1cyBUaGUgc3RhdHVzIGNvZGUuIFNldCB0byA8Y29kZT5VX0lMTEVHQUxfQVJHVU1FTlRfRVJST1I8L2NvZGU+IGlmIHRoZSBjb252ZXJzaW9uIGlzIG91dCBvZiByYW5nZS4KICogCiAqIEByZXR1cm4gVGhlIGRhdGV0aW1lIGNvbnZlcnRlZCB0byB0aGUgZ2l2ZW4gdGltZSBzY2FsZQogKgogKiBAZHJhZnQgSUNVIDMuMgogKi8KVV9EUkFGVCBpbnQ2NF90IFVfRVhQT1JUMgogICAgdXRtc2NhbGVfdG9JbnQ2NChpbnQ2NF90IHVuaXZlcnNhbFRpbWUsIFVEYXRlVGltZVNjYWxlIHRpbWVTY2FsZSwgVUVycm9yQ29kZSAqc3RhdHVzKTsKCiNlbmRpZiAvKiAjaWYgIVVDT05GSUdfTk9fRk9STUFUVElORyAqLwoKI2VuZGlmCgo=