LyoKICogQ29weXJpZ2h0IChjKSAyMDA4IFRoZSBLaHJvbm9zIEdyb3VwIEluYy4KICoKICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCiAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQogKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCiAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCiAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdAogKiB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCiAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgogKgogKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUwogKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCiAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKICogQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKICogVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKICogU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAqCiAqLwoKLyoqIEBmaWxlIE9NWF9PdGhlci5oIC0gT3Blbk1heCBJTCB2ZXJzaW9uIDEuMS4yCiAqICBUaGUgc3RydWN0dXJlcyBuZWVkZWQgYnkgT3RoZXIgY29tcG9uZW50cyB0byBleGNoYW5nZQogKiAgcGFyYW1ldGVycyBhbmQgY29uZmlndXJhdGlvbiBkYXRhIHdpdGggdGhlIGNvbXBvbmVudHMuCiAqLwoKI2lmbmRlZiBPTVhfT3RoZXJfaAojZGVmaW5lIE9NWF9PdGhlcl9oCgojaWZkZWYgX19jcGx1c3BsdXMKZXh0ZXJuICJDIiB7CiNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLwoKCi8qIEVhY2ggT01YIGhlYWRlciBtdXN0IGluY2x1ZGUgYWxsIHJlcXVpcmVkIGhlYWRlciBmaWxlcyB0byBhbGxvdyB0aGUKICogIGhlYWRlciB0byBjb21waWxlIHdpdGhvdXQgZXJyb3JzLiAgVGhlIGluY2x1ZGVzIGJlbG93IGFyZSByZXF1aXJlZAogKiAgZm9yIHRoaXMgaGVhZGVyIGZpbGUgdG8gY29tcGlsZSBzdWNjZXNzZnVsbHkKICovCgojaW5jbHVkZSA8T01YX0NvcmUuaD4KCgovKioKICogRW51bWVyYXRpb24gb2YgcG9zc2libGUgZGF0YSB0eXBlcyB3aGljaCBtYXRjaCB0byBtdWx0aXBsZSBkb21haW5zIG9yIG5vCiAqIGRvbWFpbiBhdCBhbGwuICBGb3IgdHlwZXMgd2hpY2ggYXJlIHZlbmRvciBzcGVjaWZpYywgYSB2YWx1ZSBhYm92ZQogKiBPTVhfT1RIRVJfVkVORE9SVFNUQVJUIHNob3VsZCBiZSB1c2VkLgogKi8KdHlwZWRlZiBlbnVtIE9NWF9PVEhFUl9GT1JNQVRUWVBFIHsKICAgIE9NWF9PVEhFUl9Gb3JtYXRUaW1lID0gMCwgLyoqPCBUcmFuc21pc3Npb24gb2YgdmFyaW91cyB0aW1lc3RhbXBzLCBlbGFwc2VkIHRpbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZSBkZWx0YXMsIGV0YyAqLwogICAgT01YX09USEVSX0Zvcm1hdFBvd2VyLCAgICAvKio8IFBlcmhhcHMgdXNlZCBmb3IgZW5hYmxpbmcvZGlzYWJsaW5nIHBvd2VyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFuYWdlbWVudCwgc2V0dGluZyBjbG9ja3M/ICovCiAgICBPTVhfT1RIRVJfRm9ybWF0U3RhdHMsICAgIC8qKjwgQ291bGQgYmUgdGhpbmdzIHN1Y2ggYXMgZnJhbWUgcmF0ZSwgZnJhbWVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJvcHBlZCwgZXRjICovCiAgICBPTVhfT1RIRVJfRm9ybWF0QmluYXJ5LCAgIC8qKjwgQXJiaXRyYXJ5IGJpbmFyeSBkYXRhICovCiAgICBPTVhfT1RIRVJfRm9ybWF0VmVuZG9yUmVzZXJ2ZWQgPSAxMDAwLCAvKio8IFN0YXJ0aW5nIHZhbHVlIGZvciB2ZW5kb3Igc3BlY2lmaWMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0cyAqLwoKICAgIE9NWF9PVEhFUl9Gb3JtYXRLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8KICAgIE9NWF9PVEhFUl9Gb3JtYXRWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgT01YX09USEVSX0Zvcm1hdE1heCA9IDB4N0ZGRkZGRkYKfSBPTVhfT1RIRVJfRk9STUFUVFlQRTsKCi8qKgogKiBFbnVtZXJhdGlvbiBvZiBzZWVrIG1vZGVzLgogKi8KdHlwZWRlZiBlbnVtIE9NWF9USU1FX1NFRUtNT0RFVFlQRSB7CiAgICBPTVhfVElNRV9TZWVrTW9kZUZhc3QgPSAwLCAvKio8IFByZWZlciBzZWVraW5nIHRvIGFuIGFwcHJveGltYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIG9mIHRoZSByZXF1ZXN0ZWQgc2VlayBwb3NpdGlvbiBvdmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGUgYWN0dWFsIHNlZWsgcG9zaXRpb24gaWYgaXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJlc3VsdHMgaW4gYSBmYXN0ZXIgc2Vlay4gKi8KICAgIE9NWF9USU1FX1NlZWtNb2RlQWNjdXJhdGUsIC8qKjwgUHJlZmVyIHNlZWtpbmcgdG8gdGhlIGFjdHVhbCBzZWVrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBwb3NpdGlvbiBvdmVyIGFuIGFwcHJveGltYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIG9mIHRoZSByZXF1ZXN0ZWQgc2VlayBwb3NpdGlvbiBldmVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpZiBpdCByZXN1bHRzIGluIGEgc2xvd2VyIHNlZWsuICovCiAgICBPTVhfVElNRV9TZWVrTW9kZUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLwogICAgT01YX1RJTUVfU2Vla01vZGVWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgT01YX1RJTUVfU2Vla01vZGVNYXggPSAweDdGRkZGRkZGCn0gT01YX1RJTUVfU0VFS01PREVUWVBFOwoKLyogU3RydWN0dXJlIHJlcHJlc2VudGluZyB0aGUgc2Vla21vZGUgb2YgdGhlIGNvbXBvbmVudCAqLwp0eXBlZGVmIHN0cnVjdCBPTVhfVElNRV9DT05GSUdfU0VFS01PREVUWVBFIHsKICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAgICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCiAgICBPTVhfVElNRV9TRUVLTU9ERVRZUEUgZVR5cGU7ICAgIC8qKjwgVGhlIHNlZWsgbW9kZSAqLwp9IE9NWF9USU1FX0NPTkZJR19TRUVLTU9ERVRZUEU7CgovKiogU3RydWN0dXJlIHJlcHJlc2VudGluZyBhIHRpbWUgc3RhbXAgdXNlZCB3aXRoIHRoZSBmb2xsb3dpbmcgY29uZmlncwogKiBvbiB0aGUgQ2xvY2sgQ29tcG9uZW50IChDQyk6CiAqCiAqIE9NWF9JbmRleENvbmZpZ1RpbWVDdXJyZW50V2FsbFRpbWU6IHF1ZXJ5IG9mIHRoZSBDQ5JzIGN1cnJlbnQgd2FsbAogKiAgICAgdGltZQogKiBPTVhfSW5kZXhDb25maWdUaW1lQ3VycmVudE1lZGlhVGltZTogcXVlcnkgb2YgdGhlIENDknMgY3VycmVudCBtZWRpYQogKiAgICAgdGltZQogKiBPTVhfSW5kZXhDb25maWdUaW1lQ3VycmVudEF1ZGlvUmVmZXJlbmNlIGFuZAogKiBPTVhfSW5kZXhDb25maWdUaW1lQ3VycmVudFZpZGVvUmVmZXJlbmNlOiBhdWRpby92aWRlbyByZWZlcmVuY2UKICogICAgIGNsb2NrIHNlbmRpbmcgU0MgaXRzIHJlZmVyZW5jZSB0aW1lCiAqIE9NWF9JbmRleENvbmZpZ1RpbWVDbGllbnRTdGFydFRpbWU6IGEgQ2xvY2sgQ29tcG9uZW50IGNsaWVudCBzZW5kcwogKiAgICAgdGhpcyBzdHJ1Y3R1cmUgdG8gdGhlIENsb2NrIENvbXBvbmVudCB2aWEgYSBTZXRDb25maWcgb24gaXRzCiAqICAgICBjbGllbnQgcG9ydCB3aGVuIGl0IHJlY2VpdmVzIGEgYnVmZmVyIHdpdGgKICogICAgIE9NWF9CVUZGRVJGTEFHX1NUQVJUVElNRSBzZXQuIEl0IG11c3QgdXNlIHRoZSB0aW1lc3RhbXAKICogICAgIHNwZWNpZmllZCBieSB0aGF0IGJ1ZmZlciBmb3IgblN0YXJ0VGltZXN0YW1wLgogKgogKiBJdJJzIGFsc28gdXNlZCB3aXRoIHRoZSBmb2xsb3dpbmcgY29uZmlnIG9uIGNvbXBvbmVudHMgaW4gZ2VuZXJhbDoKICoKICogT01YX0luZGV4Q29uZmlnVGltZVBvc2l0aW9uOiBJTCBjbGllbnQgcXVlcnlpbmcgY29tcG9uZW50IHBvc2l0aW9uCiAqIChHZXRDb25maWcpIG9yIGNvbW1hbmRpbmcgYSBjb21wb25lbnQgdG8gc2VlayB0byB0aGUgZ2l2ZW4gbG9jYXRpb24KICogKFNldENvbmZpZykKICovCnR5cGVkZWYgc3RydWN0IE9NWF9USU1FX0NPTkZJR19USU1FU1RBTVBUWVBFIHsKICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgaW5mb3JtYXRpb24gKi8KICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgIC8qKjwgcG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIGFwcGxpZXMgdG8gKi8KICAgIE9NWF9USUNLUyBuVGltZXN0YW1wOyAgCSAgICAgLyoqPCB0aW1lc3RhbXAgLiovCn0gT01YX1RJTUVfQ09ORklHX1RJTUVTVEFNUFRZUEU7CgovKiogRW51bWVyYXRpb24gb2YgcG9zc2libGUgcmVmZXJlbmNlIGNsb2NrcyB0byB0aGUgbWVkaWEgdGltZS4gKi8KdHlwZWRlZiBlbnVtIE9NWF9USU1FX1VQREFURVRZUEUgewogICAgICBPTVhfVElNRV9VcGRhdGVSZXF1ZXN0RnVsZmlsbG1lbnQsICAgIC8qKjwgVXBkYXRlIGlzIHRoZSBmdWxmaWxsbWVudCBvZiBhIG1lZGlhIHRpbWUgcmVxdWVzdC4gKi8KICAgICAgT01YX1RJTUVfVXBkYXRlU2NhbGVDaGFuZ2VkLAkgICAgICAgIC8qKjwgVXBkYXRlIHdhcyBnZW5lcmF0ZWQgYmVjYXVzZSB0aGUgc2NhbGUgY2hhZ25lZC4gKi8KICAgICAgT01YX1RJTUVfVXBkYXRlQ2xvY2tTdGF0ZUNoYW5nZWQsICAgICAvKio8IFVwZGF0ZSB3YXMgZ2VuZXJhdGVkIGJlY2F1c2UgdGhlIGNsb2NrIHN0YXRlIGNoYW5nZWQuICovCiAgICAgIE9NWF9USU1FX1VwZGF0ZUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLwogICAgICBPTVhfVElNRV9VcGRhdGVWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgICBPTVhfVElNRV9VcGRhdGVNYXggPSAweDdGRkZGRkZGCn0gT01YX1RJTUVfVVBEQVRFVFlQRTsKCi8qKiBFbnVtZXJhdGlvbiBvZiBwb3NzaWJsZSByZWZlcmVuY2UgY2xvY2tzIHRvIHRoZSBtZWRpYSB0aW1lLiAqLwp0eXBlZGVmIGVudW0gT01YX1RJTUVfUkVGQ0xPQ0tUWVBFIHsKICAgICAgT01YX1RJTUVfUmVmQ2xvY2tOb25lLCAgICAvKio8IFVzZSBubyByZWZlcmVuY2VzLiAqLwogICAgICBPTVhfVElNRV9SZWZDbG9ja0F1ZGlvLAkvKio8IFVzZSByZWZlcmVuY2VzIHNlbnQgdGhyb3VnaCBPTVhfSW5kZXhDb25maWdUaW1lQ3VycmVudEF1ZGlvUmVmZXJlbmNlICovCiAgICAgIE9NWF9USU1FX1JlZkNsb2NrVmlkZW8sICAgLyoqPCBVc2UgcmVmZXJlbmNlcyBzZW50IHRocm91Z2ggT01YX0luZGV4Q29uZmlnVGltZUN1cnJlbnRWaWRlb1JlZmVyZW5jZSAqLwogICAgICBPTVhfVElNRV9SZWZDbG9ja0tocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLwogICAgICBPTVhfVElNRV9SZWZDbG9ja1ZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCiAgICAgIE9NWF9USU1FX1JlZkNsb2NrTWF4ID0gMHg3RkZGRkZGRgp9IE9NWF9USU1FX1JFRkNMT0NLVFlQRTsKCi8qKiBFbnVtZXJhdGlvbiBvZiBjbG9jayBzdGF0ZXMuICovCnR5cGVkZWYgZW51bSBPTVhfVElNRV9DTE9DS1NUQVRFIHsKICAgICAgT01YX1RJTUVfQ2xvY2tTdGF0ZVJ1bm5pbmcsICAgICAgICAgICAgIC8qKjwgQ2xvY2sgcnVubmluZy4gKi8KICAgICAgT01YX1RJTUVfQ2xvY2tTdGF0ZVdhaXRpbmdGb3JTdGFydFRpbWUsIC8qKjwgQ2xvY2sgd2FpdGluZyB1bnRpbCB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgcHJlc2NyaWJlZCBjbGllbnRzIGVtaXQgdGhlaXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgc3RhcnQgdGltZS4gKi8KICAgICAgT01YX1RJTUVfQ2xvY2tTdGF0ZVN0b3BwZWQsICAgICAgICAgICAgIC8qKjwgQ2xvY2sgc3RvcHBlZC4gKi8KICAgICAgT01YX1RJTUVfQ2xvY2tTdGF0ZUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLwogICAgICBPTVhfVElNRV9DbG9ja1N0YXRlVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KICAgICAgT01YX1RJTUVfQ2xvY2tTdGF0ZU1heCA9IDB4N0ZGRkZGRkYKfSBPTVhfVElNRV9DTE9DS1NUQVRFOwoKLyoqIFN0cnVjdHVyZSByZXByZXNlbnRpbmcgYSBtZWRpYSB0aW1lIHJlcXVlc3QgdG8gdGhlIGNsb2NrIGNvbXBvbmVudC4KICoKICogIEEgY2xpZW50IGNvbXBvbmVudCBzZW5kcyB0aGlzIHN0cnVjdHVyZSB0byB0aGUgQ2xvY2sgQ29tcG9uZW50IHZpYSBhIFNldENvbmZpZwogKiAgb24gaXRzIGNsaWVudCBwb3J0IHRvIHNwZWNpZnkgYSBtZWRpYSB0aW1lc3RhbXAgdGhlIENsb2NrIENvbXBvbmVudAogKiAgc2hvdWxkIGVtaXQuICBUaGUgQ2xvY2sgQ29tcG9uZW50IHNob3VsZCBmdWxmaWxsIHRoZSByZXF1ZXN0IGJ5IHNlbmRpbmcgYQogKiAgT01YX1RJTUVfTUVESUFUSU1FVFlQRSB3aGVuIGl0cyBtZWRpYSBjbG9jayBtYXRjaGVzIHRoZSByZXF1ZXN0ZWQKICogIHRpbWVzdGFtcC4KICoKICogIFRoZSBjbGllbnQgbWF5IHJlcXVpcmUgYSBtZWRpYSB0aW1lIHJlcXVlc3QgYmUgZnVsZmlsbGVkIHNsaWdodGx5CiAqICBlYXJsaWVyIHRoYW4gdGhlIG1lZGlhIHRpbWUgc3BlY2lmaWVkLiBJbiB0aGlzIGNhc2UgdGhlIGNsaWVudCBzcGVjaWZpZXMKICogIGFuIG9mZnNldCB3aGljaCBpcyBlcXVhbCB0byB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHdhbGwgdGltZSBjb3JyZXNwb25kaW5nCiAqICB0byB0aGUgcmVxdWVzdGVkIG1lZGlhIHRpbWUgYW5kIHRoZSB3YWxsIHRpbWUgd2hlbiBpdCB3aWxsIGJlCiAqICBmdWxmaWxsZWQuCiAqCiAqICBBIGNsaWVudCBjb21wb25lbnQgbWF5IHVzZXMgdGhlc2UgcmVxdWVzdHMgYW5kIHRoZSBPTVhfVElNRV9NRURJQVRJTUVUWVBFIHRvCiAqICB0aW1lIGV2ZW50cyBhY2NvcmRpbmcgdG8gdGltZXN0YW1wcy4gSWYgYSBjbGllbnQgbXVzdCBwZXJmb3JtIGFuIG9wZXJhdGlvbiBPIGF0CiAqICBhIHRpbWUgVCAoZS5nLiBkZWxpdmVyIGEgdmlkZW8gZnJhbWUgYXQgaXRzIGNvcnJlc3BvbmRpbmcgdGltZXN0YW1wKSwgaXQgbWFrZXMgYQogKiAgbWVkaWEgdGltZSByZXF1ZXN0IGF0IFQgKHBlcmhhcHMgc3BlY2lmeWluZyBhbiBvZmZzZXQgdG8gZW5zdXJlIHRoZSByZXF1ZXN0IGZ1bGZpbGxtZW50CiAqICBpcyBhIGxpdHRsZSBlYXJseSkuIFdoZW4gdGhlIGNsb2NrIGNvbXBvbmVudCBwYXNzZXMgdGhlIHJlc3VsdGluZyBPTVhfVElNRV9NRURJQVRJTUVUWVBFCiAqICBzdHJ1Y3R1cmUgYmFjayB0byB0aGUgY2xpZW50IGNvbXBvbmVudCwgdGhlIGNsaWVudCBtYXkgcGVyZm9ybSBvcGVyYXRpb24gTyAocGVyaGFwcyBoYXZpbmcKICogIHRvIHdhaXQgYSBzbGlnaHQgYW1vdW50IG1vcmUgdGltZSBpdHNlbGYgYXMgc3BlY2lmaWVkIGJ5IHRoZSByZXR1cm4gdmFsdWVzKS4KICovCgp0eXBlZGVmIHN0cnVjdCBPTVhfVElNRV9DT05GSUdfTUVESUFUSU1FUkVRVUVTVFRZUEUgewogICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCiAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCiAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAgICAgLyoqPCBwb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0byAqLwogICAgT01YX1BUUiBwQ2xpZW50UHJpdmF0ZTsgICAgIC8qKjwgQ2xpZW50IHByaXZhdGUgZGF0YSB0byBkaXNhYmlndWF0ZSB0aGlzIG1lZGlhIHRpbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIGZyb20gb3RoZXJzIChlLmcuIHRoZSBudW1iZXIgb2YgdGhlIGZyYW1lIHRvIGRlbGl2ZXIpLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgRHVwbGljYXRlZCBpbiB0aGUgbWVkaWEgdGltZSBzdHJ1Y3R1cmUgdGhhdCBmdWxmaWxscwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgdGhpcyByZXF1ZXN0LiBBIHZhbHVlIG9mIHplcm8gaXMgcmVzZXJ2ZWQgZm9yIHRpbWUgc2NhbGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHVwZGF0ZXMuICovCiAgICBPTVhfVElDS1Mgbk1lZGlhVGltZXN0YW1wOyAgLyoqPCBNZWRpYSB0aW1lc3RhbXAgcmVxdWVzdGVkLiovCiAgICBPTVhfVElDS1Mgbk9mZnNldDsgICAgICAgICAgLyoqPCBBbW91bnQgb2Ygd2FsbCBjbG9jayB0aW1lIGJ5IHdoaWNoIHRoaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHJlcXVlc3Qgc2hvdWxkIGJlIGZ1bGZpbGxlZCBlYXJseSAqLwp9IE9NWF9USU1FX0NPTkZJR19NRURJQVRJTUVSRVFVRVNUVFlQRTsKCi8qKjwgU3RydWN0dXJlIHNlbnQgZnJvbSB0aGUgY2xvY2sgY29tcG9uZW50IGNsaWVudCBlaXRoZXIgd2hlbiBmdWxmaWxsaW5nCiAqICAgYSBtZWRpYSB0aW1lIHJlcXVlc3Qgb3Igd2hlbiB0aGUgdGltZSBzY2FsZSBoYXMgY2hhbmdlZC4KICoKICogICBJbiB0aGUgZm9ybWVyIGNhc2UgdGhlIENsb2NrIENvbXBvbmVudCBmaWxscyB0aGlzIHN0cnVjdHVyZSBhbmQgdGltZXMgaXRzIGVtaXNzaW9uCiAqICAgdG8gYSBjbGllbnQgY29tcG9uZW50ICh2aWEgdGhlIGNsaWVudCBwb3J0KSBhY2NvcmRpbmcgdG8gdGhlIGNvcnJlc3BvbmRpbmcgbWVkaWEKICogICB0aW1lIHJlcXVlc3Qgc2VudCBieSB0aGUgY2xpZW50LiBUaGUgQ2xvY2sgQ29tcG9uZW50IHNob3VsZCB0aW1lIHRoZSBlbWlzc2lvbiB0byBvY2N1cgogKiAgIHdoZW4gdGhlIHJlcXVlc3RlZCB0aW1lc3RhbXAgbWF0Y2hlcyB0aGUgQ2xvY2sgQ29tcG9uZW50J3MgbWVkaWEgdGltZSBidXQgYWxzbyB0aGUKICogICBwcmVzY3JpYmVkIG9mZnNldCBlYXJseS4KICoKICogICBVcG9uIHNjYWxlIGNoYW5nZXMgdGhlIGNsb2NrIGNvbXBvbmVudCBjbGVhcnMgdGhlIG5DbGllbnRQcml2YXRlIGRhdGEsIHNlbmRzIHRoZSBjdXJyZW50CiAqICAgbWVkaWEgdGltZSBhbmQgc2V0cyB0aGUgblNjYWxlIHRvIHRoZSBuZXcgc2NhbGUgdmlhIHRoZSBjbGllbnQgcG9ydC4gSXQgZW1pdHMgYQogKiAgIE9NWF9USU1FX01FRElBVElNRVRZUEUgdG8gYWxsIGNsaWVudHMgaW5kZXBlbmRlbnQgb2YgYW55IHJlcXVlc3RzLiBUaGlzIGFsbG93cyBjbGllbnRzIHRvCiAqICAgYWx0ZXIgcHJvY2Vzc2luZyB0byBhY2NvbW9kYXRlIHNjYWxpbmcuIEZvciBpbnN0YW5jZSBhIHZpZGVvIGNvbXBvbmVudCBtaWdodCBza2lwIGludGVyLWZyYW1lcwogKiAgIGluIHRoZSBjYXNlIG9mIGV4dHJlbWUgZmFzdGZvcndhcmQuIExpa2V3aXNlIGFuIGF1ZGlvIGNvbXBvbmVudCBtaWdodCBhZGQgb3IgcmVtb3ZlIHNhbXBsZXMKICogICBmcm9tIGFuIGF1ZGlvIGZyYW1lIHRvIHNjYWxlIGF1ZGlvIGRhdGEuCiAqCiAqICAgSXQgaXMgZXhwZWN0ZWQgdGhhdCBzb21lIGNsb2NrIGNvbXBvbmVudHMgbWF5IG5vdCBiZSBhYmxlIHRvIGZ1bGZpbGwgcmVxdWVzdHMKICogICBhdCBleGFjdGx5IHRoZSBwcmVzY3JpYmVkIHRpbWUuIFRoaXMgaXMgYWNjZXB0YWJsZSBzbyBsb25nIGFzIHRoZSByZXF1ZXN0IGlzCiAqICAgZnVsZmlsbGVkIGF0IGxlYXN0IGFzIGVhcmx5IGFzIGRlc2NyaWJlZCBhbmQgbm90IGxhdGVyLiBUaGlzIHN0cnVjdHVyZSBwcm92aWRlcwogKiAgIGZpZWxkcyB0aGUgY2xpZW50IG1heSB1c2UgdG8gd2FpdCBmb3IgdGhlIHJlbWFpbmluZyB0aW1lLgogKgogKiAgIFRoZSBjbGllbnQgbWF5IHVzZSBlaXRoZXIgdGhlIG5PZmZzZXQgb3IgbldhbGxUaW1lQXRNZWRpYSBmaWVsZHMgdG8gZGV0ZXJtaW5lIHRoZQogKiAgIHdhbGwgdGltZSB1bnRpbCB0aGUgbk1lZGlhVGltZXN0YW1wIGFjdHVhbGx5IG9jY3Vycy4gSW4gdGhlIGxhdHRlciBjYXNlIHRoZQogKiAgIGNsaWVudCBjYW4gZ2V0IGEgbW9yZSBhY2N1cmF0ZSB2YWx1ZSBmb3Igb2Zmc2V0IGJ5IGdldHRpbmcgdGhlIGN1cnJlbnQgd2FsbAogKiAgIGZyb20gdGhlIGNsb2MgY29tcG9uZW50IGFuZCBzdWJ0cmFjdGluZyBpdCBmcm9tIG5XYWxsVGltZUF0TWVkaWEuCiAqLwoKdHlwZWRlZiBzdHJ1Y3QgT01YX1RJTUVfTUVESUFUSU1FVFlQRSB7CiAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCiAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgICAgIC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLwogICAgT01YX1UzMiBuQ2xpZW50UHJpdmF0ZTsgICAgICAgICAvKio8IENsaWVudCBwcml2YXRlIGRhdGEgdG8gZGlzYWJpZ3VhdGUgdGhpcyBtZWRpYSB0aW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgZnJvbSBvdGhlcnMuIENvcGllZCBmcm9tIHRoZSBtZWRpYSB0aW1lIHJlcXVlc3QuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgQSB2YWx1ZSBvZiB6ZXJvIGlzIHJlc2VydmVkIGZvciB0aW1lIHNjYWxlIHVwZGF0ZXMuICovCiAgICBPTVhfVElNRV9VUERBVEVUWVBFIGVVcGRhdGVUeXBlOyAvKio8IFJlYXNvbiBmb3IgdGhlIHVwZGF0ZSAqLwogICAgT01YX1RJQ0tTIG5NZWRpYVRpbWVzdGFtcDsgICAgICAvKio8IE1lZGlhIHRpbWUgcmVxdWVzdGVkLiBJZiBubyBtZWRpYSB0aW1lIHdhcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHJlcXVlc3RlZCB0aGVuIHRoaXMgaXMgdGhlIGN1cnJlbnQgbWVkaWEgdGltZS4gKi8KICAgIE9NWF9USUNLUyBuT2Zmc2V0OyAgICAgICAgICAgICAgLyoqPCBBbW91bnQgb2Ygd2FsbCBjbG9jayB0aW1lIGJ5IHdoaWNoIHRoaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICByZXF1ZXN0IHdhcyBhY3R1YWxseSBmdWxmaWxsZWQgZWFybHkgKi8KCiAgICBPTVhfVElDS1MgbldhbGxUaW1lQXRNZWRpYVRpbWU7IC8qKjwgV2FsbCB0aW1lIGNvcnJlc3BvbmRpbmcgdG8gbk1lZGlhVGltZVN0YW1wLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIEEgY2xpZW50IG1heSBjb21wYXJlIHRoaXMgdmFsdWUgdG8gY3VycmVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIG1lZGlhIHRpbWUgb2J0YWluZWQgZnJvbSB0aGUgQ2xvY2sgQ29tcG9uZW50IHRvIGRldGVybWluZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHRoZSB3YWxsIHRpbWUgdW50aWwgdGhlIG1lZGlhIHRpbWVzdGFtcCBpcyByZWFsbHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICBjdXJyZW50LiAqLwogICAgT01YX1MzMiB4U2NhbGU7ICAgICAgICAgICAgICAgICAvKio8IEN1cnJlbnQgbWVkaWEgdGltZSBzY2FsZSBpbiBRMTYgZm9ybWF0LiAqLwogICAgT01YX1RJTUVfQ0xPQ0tTVEFURSBlU3RhdGU7ICAgICAvKiBTZWVraW5nIENoYW5nZS4gQWRkZWQgNy8xMi4qLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFN0YXRlIG9mIHRoZSBtZWRpYSB0aW1lLiAqLwp9IE9NWF9USU1FX01FRElBVElNRVRZUEU7CgovKiogU3RydWN0dXJlIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBtZWRpYSB0aW1lIHNjYWxlIGZhY3Rvci4gQXBwbGljYWJsZSBvbmx5IHRvIGNsb2NrCiAqICBjb21wb25lbnQsIG90aGVyIGNvbXBvbmVudHMgc2VlIHNjYWxlIGNoYW5nZXMgdmlhIE9NWF9USU1FX01FRElBVElNRVRZUEUgYnVmZmVycyBzZW50IHZpYQogKiAgdGhlIGNsb2NrIGNvbXBvbmVudCBjbGllbnQgcG9ydHMuIFVwb24gcmVjaWV2aW5nIHRoaXMgY29uZmlnIHRoZSBjbG9jayBjb21wb25lbnQgY2hhbmdlcwogKiAgdGhlIHJhdGUgYnkgd2hpY2ggdGhlIG1lZGlhIHRpbWUgaW5jcmVhc2VzIG9yIGRlY3JlYXNlcyBlZmZlY3RpdmVseSBpbXBsZW1lbnRpbmcgdHJpY2sgbW9kZXMuCiAqLwp0eXBlZGVmIHN0cnVjdCBPTVhfVElNRV9DT05GSUdfU0NBTEVUWVBFIHsKICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAgICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCiAgICBPTVhfUzMyIHhTY2FsZTsgICAgICAgICAgICAgICAgIC8qKjwgVGhpcyBpcyBhIHZhbHVlIGluIFExNiBmb3JtYXQgd2hpY2ggaXMgdXNlZCBmb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc2NhbGluZyB0aGUgbWVkaWEgdGltZSAqLwp9IE9NWF9USU1FX0NPTkZJR19TQ0FMRVRZUEU7CgovKiogQml0cyB1c2VkIHRvIGlkZW50aWZ5IGEgY2xvY2sgcG9ydC4gVXNlZCBpbiBPTVhfVElNRV9DT05GSUdfQ0xPQ0tTVEFURVRZUEWScyBuV2FpdE1hc2sgZmllbGQgKi8KI2RlZmluZSBPTVhfQ0xPQ0tQT1JUMCAweDAwMDAwMDAxCiNkZWZpbmUgT01YX0NMT0NLUE9SVDEgMHgwMDAwMDAwMgojZGVmaW5lIE9NWF9DTE9DS1BPUlQyIDB4MDAwMDAwMDQKI2RlZmluZSBPTVhfQ0xPQ0tQT1JUMyAweDAwMDAwMDA4CiNkZWZpbmUgT01YX0NMT0NLUE9SVDQgMHgwMDAwMDAxMAojZGVmaW5lIE9NWF9DTE9DS1BPUlQ1IDB4MDAwMDAwMjAKI2RlZmluZSBPTVhfQ0xPQ0tQT1JUNiAweDAwMDAwMDQwCiNkZWZpbmUgT01YX0NMT0NLUE9SVDcgMHgwMDAwMDA4MAoKLyoqIFN0cnVjdHVyZSByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgbW9kZSBvZiB0aGUgbWVkaWEgY2xvY2suCiAqICBJTCBDbGllbnQgdXNlcyB0aGlzIGNvbmZpZyB0byBjaGFuZ2Ugb3IgcXVlcnkgdGhlIG1vZGUgb2YgdGhlCiAqICBtZWRpYSBjbG9jayBvZiB0aGUgY2xvY2sgY29tcG9uZW50LiBBcHBsaWNhYmxlIG9ubHkgdG8gY2xvY2sKICogIGNvbXBvbmVudC4KICoKICogIE9uIGEgU2V0Q29uZmlnIGlmIGVTdGF0ZSBpcyBPTVhfVElNRV9DbG9ja1N0YXRlUnVubmluZyBtZWRpYSB0aW1lCiAqICBzdGFydHMgaW1tZWRpYXRlbHkgYXQgdGhlIHByZXNjcmliZWQgc3RhcnQgdGltZS4gSWYKICogIE9NWF9USU1FX0Nsb2NrU3RhdGVXYWl0aW5nRm9yU3RhcnRUaW1lIHRoZSBDbG9jayBDb21wb25lbnQgaWdub3JlcwogKiAgdGhlIGdpdmVuIG5TdGFydFRpbWUgYW5kIHdhaXRzIGZvciBhbGwgY2xpZW50cyBzcGVjaWZpZWQgaW4gdGhlCiAqICBuV2FpdE1hc2sgdG8gc2VuZCBzdGFydHRpbWVzICh2aWEKICogIE9NWF9JbmRleENvbmZpZ1RpbWVDbGllbnRTdGFydFRpbWUpLiBUaGUgQ2xvY2sgQ29tcG9uZW50IHRoZW4gc3RhcnRzCiAqICB0aGUgbWVkaWEgY2xvY2sgdXNpbmcgdGhlIGVhcmxpZXN0IHN0YXJ0IHRpbWUgc3VwcGxpZWQuICovCnR5cGVkZWYgc3RydWN0IE9NWF9USU1FX0NPTkZJR19DTE9DS1NUQVRFVFlQRSB7CiAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIGluZm9ybWF0aW9uICovCiAgICBPTVhfVElNRV9DTE9DS1NUQVRFIGVTdGF0ZTsgLyoqPCBTdGF0ZSBvZiB0aGUgbWVkaWEgdGltZS4gKi8KICAgIE9NWF9USUNLUyBuU3RhcnRUaW1lOyAgICAgICAvKio8IFN0YXJ0IHRpbWUgb2YgdGhlIG1lZGlhIHRpbWUuICovCiAgICBPTVhfVElDS1Mgbk9mZnNldDsgICAgICAgICAgLyoqPCBUaW1lIHRvIG9mZnNldCB0aGUgbWVkaWEgdGltZSBieQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIChlLmcuIHByZXJvbGwpLiBNZWRpYSB0aW1lIHdpbGwgYmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByZXBvcnRlZCB0byBiZSBuT2Zmc2V0IHRpY2tzIGVhcmxpZXIuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICBPTVhfVTMyIG5XYWl0TWFzazsgICAgICAgICAgLyoqPCBNYXNrIG9mIE9NWF9DTE9DS1BPUlQgdmFsdWVzLiAqLwp9IE9NWF9USU1FX0NPTkZJR19DTE9DS1NUQVRFVFlQRTsKCi8qKiBTdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIHRoZSByZWZlcmVuY2UgY2xvY2sgY3VycmVudGx5IGJlaW5nIHVzZWQgdG8KICogIGNvbXB1dGUgbWVkaWEgdGltZS4gSUwgY2xpZW50IHVzZXMgdGhpcyBjb25maWcgdG8gY2hhbmdlIG9yIHF1ZXJ5IHRoZQogKiAgY2xvY2sgY29tcG9uZW50J3MgYWN0aXZlIHJlZmVyZW5jZSBjbG9jayAqLwp0eXBlZGVmIHN0cnVjdCBPTVhfVElNRV9DT05GSUdfQUNUSVZFUkVGQ0xPQ0tUWVBFIHsKICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAgICAgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCiAgICBPTVhfVElNRV9SRUZDTE9DS1RZUEUgZUNsb2NrOyAgIC8qKjwgUmVmZXJlbmNlIGNsb2NrIHVzZWQgdG8gY29tcHV0ZSBtZWRpYSB0aW1lICovCn0gT01YX1RJTUVfQ09ORklHX0FDVElWRVJFRkNMT0NLVFlQRTsKCi8qKiBEZXNjcmlwdG9yIGZvciBzZXR0aW5nIHNwZWNpZmljcyBvZiBwb3dlciB0eXBlLgogKiAgTm90ZTogdGhpcyBzdHJ1Y3R1cmUgaXMgbGlzdGVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gKi8KdHlwZWRlZiBzdHJ1Y3QgT01YX09USEVSX0NPTkZJR19QT1dFUlRZUEUgewogICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLwogICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KICAgIE9NWF9CT09MIGJFbmFibGVQTTsgICAgICAgLyoqPCBGbGFnIHRvIGVuYWJsZSBQb3dlciBNYW5hZ2VtZW50ICovCn0gT01YX09USEVSX0NPTkZJR19QT1dFUlRZUEU7CgoKLyoqIERlc2NyaXB0b3IgZm9yIHNldHRpbmcgc3BlY2lmaWNzIG9mIHN0YXRzIHR5cGUuCiAqICBOb3RlOiB0aGlzIHN0cnVjdHVyZSBpcyBsaXN0ZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiAqLwp0eXBlZGVmIHN0cnVjdCBPTVhfT1RIRVJfQ09ORklHX1NUQVRTVFlQRSB7CiAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCiAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247IC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLwogICAgLyogd2hhdCBnb2VzIGhlcmUgKi8KfSBPTVhfT1RIRVJfQ09ORklHX1NUQVRTVFlQRTsKCgovKioKICogVGhlIFBvcnREZWZpbml0aW9uIHN0cnVjdHVyZSBpcyB1c2VkIHRvIGRlZmluZSBhbGwgb2YgdGhlIHBhcmFtZXRlcnMKICogbmVjZXNzYXJ5IGZvciB0aGUgY29tcGxpYW50IGNvbXBvbmVudCB0byBzZXR1cCBhbiBpbnB1dCBvciBhbiBvdXRwdXQgb3RoZXIKICogcGF0aC4KICovCnR5cGVkZWYgc3RydWN0IE9NWF9PVEhFUl9QT1JUREVGSU5JVElPTlRZUEUgewogICAgT01YX09USEVSX0ZPUk1BVFRZUEUgZUZvcm1hdDsgIC8qKjwgVHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZvciB0aGlzIGNoYW5uZWwgKi8KfSBPTVhfT1RIRVJfUE9SVERFRklOSVRJT05UWVBFOwoKLyoqICBQb3J0IGZvcm1hdCBwYXJhbWV0ZXIuICBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvIGVudW1lcmF0ZQogICogIHRoZSB2YXJpb3VzIGRhdGEgaW5wdXQvb3V0cHV0IGZvcm1hdCBzdXBwb3J0ZWQgYnkgdGhlIHBvcnQuCiAgKi8KdHlwZWRlZiBzdHJ1Y3QgT01YX09USEVSX1BBUkFNX1BPUlRGT1JNQVRUWVBFIHsKICAgIE9NWF9VMzIgblNpemU7IC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCiAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247IC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLwogICAgT01YX1UzMiBuUG9ydEluZGV4OyAvKio8IEluZGljYXRlcyB3aGljaCBwb3J0IHRvIHNldCAqLwogICAgT01YX1UzMiBuSW5kZXg7IC8qKjwgSW5kaWNhdGVzIHRoZSBlbnVtZXJhdGlvbiBpbmRleCBmb3IgdGhlIGZvcm1hdCBmcm9tIDB4MCB0byBOLTEgKi8KICAgIE9NWF9PVEhFUl9GT1JNQVRUWVBFIGVGb3JtYXQ7IC8qKjwgVHlwZSBvZiBkYXRhIGV4cGVjdGVkIGZvciB0aGlzIGNoYW5uZWwgKi8KfSBPTVhfT1RIRVJfUEFSQU1fUE9SVEZPUk1BVFRZUEU7CgojaWZkZWYgX19jcGx1c3BsdXMKfQojZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KCiNlbmRpZgovKiBGaWxlIEVPRiAqLwo=