LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTIgQnJvYWRjb20gQ29ycG9yYXRpb24KICoKICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogKiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgogKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0OgogKgogKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiAqCiAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogKiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKICogIFRoaXMgaXMgdGhlIHB1YmxpYyBpbnRlcmZhY2UgZmlsZSBmb3IgdGhlIGF1ZGlvIGdhdGV3YXkgKEFHKSBzdWJzeXN0ZW0KICogIG9mIEJUQSwgQnJvYWRjb20ncyBCbHVldG9vdGggYXBwbGljYXRpb24gbGF5ZXIgZm9yIG1vYmlsZSBwaG9uZXMuCiAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiNpZm5kZWYgQlRBX0FHX0FQSV9ICiNkZWZpbmUgQlRBX0FHX0FQSV9ICgojaW5jbHVkZSAiYnRhX2FwaS5oIgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioqICBDb25zdGFudHMgYW5kIGRhdGEgdHlwZXMKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiNkZWZpbmUgSEZQX1ZFUlNJT05fMV8xICAgICAgICAgMHgwMTAxCiNkZWZpbmUgSEZQX1ZFUlNJT05fMV81ICAgICAgICAgMHgwMTA1CiNkZWZpbmUgSEZQX1ZFUlNJT05fMV82ICAgICAgICAgMHgwMTA2CiNkZWZpbmUgSEZQX1ZFUlNJT05fMV83ICAgICAgICAgMHgwMTA3CgojZGVmaW5lIEhTUF9WRVJTSU9OXzFfMCAgICAgICAgIDB4MDEwMAojZGVmaW5lIEhTUF9WRVJTSU9OXzFfMiAgICAgICAgIDB4MDEwMgoKLyogTm90ZSwgaWYgeW91IGNoYW5nZSB0aGUgZGVmYXVsdCB2ZXJzaW9uIGhlcmUsIHBsZWFzZSBhbHNvIGNoYW5nZSB0aGUgb25lIGluCiAqIGJ0YV9oc19hcGkuaCwgdGhleSBhcmUgbWVhbnQgdG8gYmUgdGhlIHNhbWUuCiAqLwojaWZuZGVmIEJUQV9IRlBfVkVSU0lPTgojZGVmaW5lIEJUQV9IRlBfVkVSU0lPTiAgICAgICAgIEhGUF9WRVJTSU9OXzFfNwojZW5kaWYKCiNpZm5kZWYgQlRBX0hGUF9IRl9JTkRfU1VQUE9SVEVECiNkZWZpbmUgQlRBX0hGUF9IRl9JTkRfU1VQUE9SVEVEICAgIFRSVUUKI2VuZGlmCgovKiBBRyBmZWF0dXJlIG1hc2tzICovCiNkZWZpbmUgQlRBX0FHX0ZFQVRfM1dBWSAgICAweDAwMDAwMDAxICAgLyogVGhyZWUtd2F5IGNhbGxpbmcgKi8KI2RlZmluZSBCVEFfQUdfRkVBVF9FQ05SICAgIDB4MDAwMDAwMDIgICAvKiBFY2hvIGNhbmNlbGxhdGlvbiBhbmQvb3Igbm9pc2UgcmVkdWN0aW9uICovCiNkZWZpbmUgQlRBX0FHX0ZFQVRfVlJFQyAgICAweDAwMDAwMDA0ICAgLyogVm9pY2UgcmVjb2duaXRpb24gKi8KI2RlZmluZSBCVEFfQUdfRkVBVF9JTkJBTkQgIDB4MDAwMDAwMDggICAvKiBJbi1iYW5kIHJpbmcgdG9uZSAqLwojZGVmaW5lIEJUQV9BR19GRUFUX1ZUQUcgICAgMHgwMDAwMDAxMCAgIC8qIEF0dGFjaCBhIHBob25lIG51bWJlciB0byBhIHZvaWNlIHRhZyAqLwojZGVmaW5lIEJUQV9BR19GRUFUX1JFSkVDVCAgMHgwMDAwMDAyMCAgIC8qIEFiaWxpdHkgdG8gcmVqZWN0IGluY29taW5nIGNhbGwgKi8KI2RlZmluZSBCVEFfQUdfRkVBVF9FQ1MgICAgIDB4MDAwMDAwNDAgICAvKiBFbmhhbmNlZCBDYWxsIFN0YXR1cyAqLwojZGVmaW5lIEJUQV9BR19GRUFUX0VDQyAgICAgMHgwMDAwMDA4MCAgIC8qIEVuaGFuY2VkIENhbGwgQ29udHJvbCAqLwojZGVmaW5lIEJUQV9BR19GRUFUX0VYVEVSUiAgMHgwMDAwMDEwMCAgIC8qIEV4dGVuZGVkIGVycm9yIGNvZGVzICovCiNkZWZpbmUgQlRBX0FHX0ZFQVRfQ09ERUMgICAweDAwMDAwMjAwICAgLyogQ29kZWMgTmVnb3RpYXRpb24gKi8KI2RlZmluZSBCVEFfQUdfRkVBVF9IRl9JTkQgIDB4MDAwMDA0MDAgICAvKiBIRiBJbmRpY2F0b3JzICovCiNkZWZpbmUgQlRBX0FHX0ZFQVRfRVNDTyAgICAweDAwMDAwODAwICAgLyogZVNDTyBTNCAoYW5kIFQyKSBzZXR0aW5nIHN1cHBvcnRlZCAqLwoKLyogUHJvcHJpZXRhcnkgZmVhdHVyZXM6IHVzaW5nIDMxIH4gMTYgYml0cyAqLwojZGVmaW5lIEJUQV9BR19GRUFUX0JUUkggICAgMHgwMDAxMDAwMCAgIC8qIENDQVAgaW5jb21pbmcgY2FsbCBob2xkICovCiNkZWZpbmUgQlRBX0FHX0ZFQVRfVU5BVCAgICAweDAwMDIwMDAwICAgLyogUGFzcyB1bmtub3duIEFUIGNvbW1hbmRzIHRvIGFwcGxpY2F0aW9uICovCiNkZWZpbmUgQlRBX0FHX0ZFQVRfTk9TQ08gICAweDAwMDQwMDAwICAgLyogTm8gU0NPIGNvbnRyb2wgcGVyZm9ybWVkIGJ5IEJUQSBBRyAqLwojZGVmaW5lIEJUQV9BR19GRUFUX05PX0VTQ08gMHgwMDA4MDAwMCAgIC8qIERvIG5vdCBhbGxvdyBvciB1c2UgZVNDTyAqLwojZGVmaW5lIEJUQV9BR19GRUFUX1ZPSVAgICAgMHgwMDEwMDAwMCAgIC8qIFZvSVAgY2FsbCAqLwoKdHlwZWRlZiBVSU5UMzIgdEJUQV9BR19GRUFUOwoKLyogQUcgcGFyc2UgbW9kZSAqLwojZGVmaW5lIEJUQV9BR19QQVJTRSAgICAgICAgICAgIDAgLyogUGVyZm9ybSBBVCBjb21tYW5kIHBhcnNpbmcgaW4gQUcgKi8KI2RlZmluZSBCVEFfQUdfUEFTU19USFJPVUdIICAgICAxIC8qIFBhc3MgZGF0YSBkaXJlY3RseSB0byBwaG9uZZJzIEFUIGNvbW1hbmQgaW50ZXJwcmV0ZXIgKi8KCnR5cGVkZWYgVUlOVDggdEJUQV9BR19QQVJTRV9NT0RFOwoKLyogQUcgb3BlbiBzdGF0dXMgKi8KI2RlZmluZSBCVEFfQUdfU1VDQ0VTUyAgICAgICAgICAwIC8qIENvbm5lY3Rpb24gc3VjY2Vzc2Z1bGx5IG9wZW5lZCAqLwojZGVmaW5lIEJUQV9BR19GQUlMX1NEUCAgICAgICAgIDEgLyogT3BlbiBmYWlsZWQgZHVlIHRvIFNEUCAqLwojZGVmaW5lIEJUQV9BR19GQUlMX1JGQ09NTSAgICAgIDIgLyogT3BlbiBmYWlsZWQgZHVlIHRvIFJGQ09NTSAqLwojZGVmaW5lIEJUQV9BR19GQUlMX1JFU09VUkNFUyAgIDMgLyogb3V0IG9mIHJlc291cmNlcyBmYWlsdXJlICAqLwoKLypTdGF0dXMgdG8gZGlzYWxsb3cgcGFzc2luZyBBVCBFdmVudHMgYWZ0ZXIgQlRJRiAqLwoKI2RlZmluZSBCVEFfQUdfRElTQUxMT1dfQVQgICAgICA1CnR5cGVkZWYgVUlOVDggdEJUQV9BR19TVEFUVVM7CgovKiBoYW5kbGUgdmFsdWVzIHVzZWQgd2l0aCBCVEFfQWdSZXN1bHQgKi8KI2RlZmluZSBCVEFfQUdfSEFORExFX05PTkUgICAgICAwCiNkZWZpbmUgQlRBX0FHX0hBTkRMRV9BTEwgICAgICAgMHhGRkZGCi8qIEl0IGlzIHNhZmUgdG8gdXNlIHRoZSBzYW1lIHZhbHVlIGFzIEJUQV9BR19IQU5ETEVfQUxMCiAqIEhBTkRMRV9BTEwgaXMgdXNlZCBmb3IgZGVsaXZlcmluZyBpbmRpY2F0aW9uCiAqIFNDT19OT19DSEFOR0UgaXMgdXNlZCBmb3IgY2hhbmdpbmcgc2NvIGJlaGF2aW9yCiAqIFRoZXkgZG9ub3QgaW50ZXJmZXJlIHdpdGggZWFjaCBvdGhlcgogKi8KCi8qIE51bWJlciBvZiBzdXBwb3J0ZWQgSEYgaW5kaWNhdG9ycywgdGhlcmUgaXMgb25lIEhGIGluZGljYXRvciBzbyBmYXIgaS5lLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmhhbmNlZCBkcml2ZXIgc3RhdHVzLiAqLwovKiBOdW1iZXIgb2Ygc3VwcG9ydGVkIEhGIGluZGljYXRvcnMsCiAgIDEgZm9yIEVuaGFuY2VkIFNhZmV0eSBTdGF0dXMKICAgMiBmb3IgQmF0dGVyeSBMZXZlbCBTdGF0dXMgKi8KI2lmbmRlZiBCVEFfQUdfTlVNX0xPQ0FMX0hGX0lORAojZGVmaW5lIEJUQV9BR19OVU1fTE9DQUxfSEZfSU5EICAgICAyCiNlbmRpZgoKCgojZGVmaW5lIEJUQV9BR19IQU5ETEVfU0NPX05PX0NIQU5HRSAweEZGRkYKCi8qIEFHIHJlc3VsdCBjb2RlcyB1c2VkIHdpdGggQlRBX0FnUmVzdWx0ICovCiNkZWZpbmUgQlRBX0FHX1NQS19SRVMgICAgICAgICAgICAgIDAgICAvKiBVcGRhdGUgc3BlYWtlciB2b2x1bWUgKi8KI2RlZmluZSBCVEFfQUdfTUlDX1JFUyAgICAgICAgICAgICAgMSAgIC8qIFVwZGF0ZSBtaWNyb3Bob25lIHZvbHVtZSAqLwojZGVmaW5lIEJUQV9BR19JTkJBTkRfUklOR19SRVMgICAgICAyICAgLyogVXBkYXRlIGluYmFuZCByaW5nIHN0YXRlICovCiNkZWZpbmUgQlRBX0FHX0NJTkRfUkVTICAgICAgICAgICAgIDMgICAvKiBTZW5kIGluZGljYXRvciByZXNwb25zZSBmb3IgQVQrQ0lORCAqLwojZGVmaW5lIEJUQV9BR19CSU5QX1JFUyAgICAgICAgICAgICA0ICAgLyogU2VuZCBwaG9uZSBudW1iZXIgZm9yIHZvaWNlIHRhZyBmb3IgQVQrQklOUCAqLwojZGVmaW5lIEJUQV9BR19JTkRfUkVTICAgICAgICAgICAgICA1ICAgLyogVXBkYXRlIGFuIGluZGljYXRvciB2YWx1ZSAqLwojZGVmaW5lIEJUQV9BR19CVlJBX1JFUyAgICAgICAgICAgICA2ICAgLyogVXBkYXRlIHZvaWNlIHJlY29nbml0aW9uIHN0YXRlICovCiNkZWZpbmUgQlRBX0FHX0NOVU1fUkVTICAgICAgICAgICAgIDcgICAvKiBTZW5kIHN1YnNjcmliZXIgbnVtYmVyIHJlc3BvbnNlIGZvciBBVCtDTlVNICovCiNkZWZpbmUgQlRBX0FHX0JUUkhfUkVTICAgICAgICAgICAgIDggICAvKiBTZW5kIENDQVAgaW5jb21pbmcgY2FsbCBob2xkICovCiNkZWZpbmUgQlRBX0FHX0NMQ0NfUkVTICAgICAgICAgICAgIDkgICAvKiBRdWVyeSBsaXN0IG9mIGNhbGxzICovCiNkZWZpbmUgQlRBX0FHX0NPUFNfUkVTICAgICAgICAgICAgIDEwICAvKiBSZWFkIG5ldHdvcmsgb3BlcmF0b3IgKi8KI2RlZmluZSBCVEFfQUdfSU5fQ0FMTF9SRVMgICAgICAgICAgMTEgIC8qIEluZGljYXRlIGluY29taW5nIHBob25lIGNhbGwgKi8KI2RlZmluZSBCVEFfQUdfSU5fQ0FMTF9DT05OX1JFUyAgICAgMTIgIC8qIEluY29taW5nIHBob25lIGNhbGwgY29ubmVjdGVkICovCiNkZWZpbmUgQlRBX0FHX0NBTExfV0FJVF9SRVMgICAgICAgIDEzICAvKiBDYWxsIHdhaXRpbmcgbm90aWZpY2F0aW9uICovCiNkZWZpbmUgQlRBX0FHX09VVF9DQUxMX09SSUdfUkVTICAgIDE0ICAvKiBPdXRnb2luZyBwaG9uZSBjYWxsIG9yaWdpbmF0aW9uICovCiNkZWZpbmUgQlRBX0FHX09VVF9DQUxMX0FMRVJUX1JFUyAgIDE1ICAvKiBPdXRnb2luZyBwaG9uZSBjYWxsIGFsZXJ0aW5nIHJlbW90ZSBwYXJ0eSAqLwojZGVmaW5lIEJUQV9BR19PVVRfQ0FMTF9DT05OX1JFUyAgICAxNiAgLyogT3V0Z29pbmcgcGhvbmUgY2FsbCBjb25uZWN0ZWQgKi8KI2RlZmluZSBCVEFfQUdfQ0FMTF9DQU5DRUxfUkVTICAgICAgMTcgIC8qIEluY29taW5nL291dGdvaW5nIDMtd2F5IGNhbmNlbGVkIGJlZm9yZSBjb25uZWN0ZWQgKi8KI2RlZmluZSBCVEFfQUdfRU5EX0NBTExfUkVTICAgICAgICAgMTggIC8qIEVuZCBjYWxsICovCiNkZWZpbmUgQlRBX0FHX0lOX0NBTExfSEVMRF9SRVMgICAgIDE5ICAvKiBJbmNvbWluZyBjYWxsIGhlbGQgKi8KI2RlZmluZSBCVEFfQUdfVU5BVF9SRVMgICAgICAgICAgICAgMjAgIC8qIFJlc3BvbnNlIHRvIHVua25vd24gQVQgY29tbWFuZCBldmVudCAqLwojZGVmaW5lIEJUQV9BR19NVUxUSV9DQUxMX1JFUyAgICAgICAyMSAgLyogU0xDIGF0IHRocmVlIHdheSBjYWxsICovCiNkZWZpbmUgQlRBX0FHX0JJTkRfUkVTICAgICAgICAgICAgIDIyICAvKiBBY3RpdmF0ZS9EZWFjdGl2YXRlIEhGIGluZGljYXRvciAqLwoKdHlwZWRlZiBVSU5UOCB0QlRBX0FHX1JFUzsKCi8qIEhGUCBwZWVyIGZlYXR1cmVzICovCiNkZWZpbmUgQlRBX0FHX1BFRVJfRkVBVF9FQ05SICAgICAgIDB4MDAwMSAgLyogRWNobyBjYW5jZWxsYXRpb24gYW5kL29yIG5vaXNlIHJlZHVjdGlvbiAqLwojZGVmaW5lIEJUQV9BR19QRUVSX0ZFQVRfM1dBWSAgICAgICAweDAwMDIgIC8qIENhbGwgd2FpdGluZyBhbmQgdGhyZWUtd2F5IGNhbGxpbmcgKi8KI2RlZmluZSBCVEFfQUdfUEVFUl9GRUFUX0NMSSAgICAgICAgMHgwMDA0ICAvKiBDYWxsZXIgSUQgcHJlc2VudGF0aW9uIGNhcGFiaWxpdHkgKi8KI2RlZmluZSBCVEFfQUdfUEVFUl9GRUFUX1ZSRUMgICAgICAgMHgwMDA4ICAvKiBWb2ljZSByZWNvZ25pdGlvbiBhY3RpdmF0aW9uICovCiNkZWZpbmUgQlRBX0FHX1BFRVJfRkVBVF9WT0wgICAgICAgIDB4MDAxMCAgLyogUmVtb3RlIHZvbHVtZSBjb250cm9sICovCiNkZWZpbmUgQlRBX0FHX1BFRVJfRkVBVF9FQ1MgICAgICAgIDB4MDAyMCAgLyogRW5oYW5jZWQgQ2FsbCBTdGF0dXMgKi8KI2RlZmluZSBCVEFfQUdfUEVFUl9GRUFUX0VDQyAgICAgICAgMHgwMDQwICAvKiBFbmhhbmNlZCBDYWxsIENvbnRyb2wgKi8KI2RlZmluZSBCVEFfQUdfUEVFUl9GRUFUX0NPREVDICAgICAgMHgwMDgwICAvKiBDb2RlYyBOZWdvdGlhdGlvbiAqLwojZGVmaW5lIEJUQV9BR19QRUVSX0ZFQVRfSEZfSU5EICAgICAweDAxMDAgICAvKiBIRiBJbmRpY2F0b3JzICovCiNkZWZpbmUgQlRBX0FHX1BFRVJfRkVBVF9FU0NPICAgICAgIDB4MDIwMCAgIC8qIGVTQ08gUzQgKGFuZCBUMikgc2V0dGluZyBzdXBwb3J0ZWQgKi8KCi8qIFByb3ByaWV0YXJ5IGZlYXR1cmVzOiB1c2luZyBiaXRzIGFmdGVyIDEyICovCiNkZWZpbmUgQlRBX0FHX1BFRVJfRkVBVF9VTkFUICAgICAgIDB4MTAwMCAgIC8qIFBhc3MgdW5rbm93biBBVCBjb21tYW5kIHJlc3BvbnNlcyB0byBhcHBsaWNhdGlvbiAqLwojZGVmaW5lIEJUQV9BR19QRUVSX0ZFQVRfVk9JUCAgICAgICAweDIwMDAgIC8qIFZvSVAgY2FsbCAqLwoKdHlwZWRlZiB1aW50MTZfdCB0QlRBX0FHX1BFRVJfRkVBVDsKCi8qIEhGUCBwZWVyIHN1cHBvcnRlZCBjb2RlYyBtYXNrcyAqLwovLyBUT0RPKGdvb2dsZSkgVGhpcyBzaG91bGQgdXNlIGNvbW1vbiBkZWZpbml0aW9ucwovLyBpbiBoY2kvaW5jbHVkZS9oY2lfYXVkaW8uaAojZGVmaW5lIEJUQV9BR19DT0RFQ19OT05FICAgICAgICAgICBCVE1fU0NPX0NPREVDX05PTkUKI2RlZmluZSBCVEFfQUdfQ09ERUNfQ1ZTRCAgICAgICAgICAgQlRNX1NDT19DT0RFQ19DVlNEICAgICAgLyogQ1ZTRCAqLwojZGVmaW5lIEJUQV9BR19DT0RFQ19NU0JDICAgICAgICAgICBCVE1fU0NPX0NPREVDX01TQkMgICAgICAvKiBtU0JDICovCnR5cGVkZWYgVUlOVDE2IHRCVEFfQUdfUEVFUl9DT0RFQzsKCi8qIEhGUCBlcnJjb2RlIC0gU2V0IHdoZW4gQlRBX0FHX09LX0VSUk9SIGlzIHJldHVybmVkIGluICdva19mbGFnJyAqLwojZGVmaW5lIEJUQV9BR19FUlJfUEhPTkVfRkFJTFVSRSAgICAwICAgICAgIC8qIFBob25lIEZhaWx1cmUgKi8KI2RlZmluZSBCVEFfQUdfRVJSX05PX0NPTk5fUEhPTkUgICAgMSAgICAgICAvKiBObyBjb25uZWN0aW9uIHRvIHBob25lICovCiNkZWZpbmUgQlRBX0FHX0VSUl9PUF9OT1RfQUxMT1dFRCAgIDMgICAgICAgLyogT3BlcmF0aW9uIG5vdCBhbGxvd2VkICovCiNkZWZpbmUgQlRBX0FHX0VSUl9PUF9OT1RfU1VQUE9SVEVEIDQgICAgICAgLyogT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgKi8KI2RlZmluZSBCVEFfQUdfRVJSX1BIU0lNX1BJTl9SRVEgICAgNSAgICAgICAvKiBQSC1TSU0gUElOIHJlcXVpcmVkICovCiNkZWZpbmUgQlRBX0FHX0VSUl9TSU1fTk9UX0lOU0VSVEVEIDEwICAgICAgLyogU0lNIG5vdCBpbnNlcnRlZCAqLwojZGVmaW5lIEJUQV9BR19FUlJfU0lNX1BJTl9SRVEgICAgICAxMSAgICAgIC8qIFNJTSBQSU4gcmVxdWlyZWQgKi8KI2RlZmluZSBCVEFfQUdfRVJSX1NJTV9QVUtfUkVRICAgICAgMTIgICAgICAvKiBTSU0gUFVLIHJlcXVpcmVkICovCiNkZWZpbmUgQlRBX0FHX0VSUl9TSU1fRkFJTFVSRSAgICAgIDEzICAgICAgLyogU0lNIGZhaWx1cmUgKi8KI2RlZmluZSBCVEFfQUdfRVJSX1NJTV9CVVNZICAgICAgICAgMTQgICAgICAvKiBTSU0gYnVzeSAqLwojZGVmaW5lIEJUQV9BR19FUlJfSU5DT1JSRUNUX1BXRCAgICAxNiAgICAgIC8qIEluY29ycmVjdCBwYXNzd29yZCAqLwojZGVmaW5lIEJUQV9BR19FUlJfU0lNX1BJTjJfUkVRICAgICAxNyAgICAgIC8qIFNJTSBQSU4yIHJlcXVpcmVkICovCiNkZWZpbmUgQlRBX0FHX0VSUl9TSU1fUFVLMl9SRVEgICAgIDE4ICAgICAgLyogU0lNIFBVSzIgcmVxdWlyZWQgKi8KI2RlZmluZSBCVEFfQUdfRVJSX01FTU9SWV9GVUxMICAgICAgMjAgICAgICAvKiBNZW1vcnkgZnVsbCAqLwojZGVmaW5lIEJUQV9BR19FUlJfSU5WQUxJRF9JTkRFWCAgICAyMSAgICAgIC8qIEludmFsaWQgaW5kZXggKi8KI2RlZmluZSBCVEFfQUdfRVJSX01FTU9SWV9GQUlMVVJFICAgMjMgICAgICAvKiBNZW1vcnkgZmFpbHVyZSAqLwojZGVmaW5lIEJUQV9BR19FUlJfVEVYVF9UT09fTE9ORyAgICAyNCAgICAgIC8qIFRleHQgc3RyaW5nIHRvbyBsb25nICovCiNkZWZpbmUgQlRBX0FHX0VSUl9JTlZfQ0hBUl9JTl9UU1RSIDI1ICAgICAgLyogSW52YWxpZCBjaGFyYWN0ZXJzIGluIHRleHQgc3RyaW5nICovCiNkZWZpbmUgQlRBX0FHX0VSUl9EU1RSX1RPT19MT05HICAgIDI2ICAgICAgLyogRGlhbCBzdHJpbmcgdG9vIGxvbmcgKi8KI2RlZmluZSBCVEFfQUdfRVJSX0lOVl9DSEFSX0lOX0RTVFIgMjcgICAgICAvKiBJbnZhbGlkIGNoYXJhY3RlcnMgaW4gZGlhbCBzdHJpbmcgKi8KI2RlZmluZSBCVEFfQUdfRVJSX05PX05FVFdPUktfU0VSViAgMzAgICAgICAvKiBObyBuZXR3b3JrIHNlcnZpY2UgKi8KI2RlZmluZSBCVEFfQUdfRVJSX05FVFdPUktfVElNRV9PVVQgMzEgICAgICAvKiBOZXR3b3JrIHRpbWVvdXQgKi8KI2RlZmluZSBCVEFfQUdfRVJSX05PX05FVF9FTUdfT05MWSAgMzIgICAgICAvKiBOZXR3b3JrIG5vdCBhbGxvd2VkIC0gZW1lcmdlbmN5IHNlcnZpY2Ugb25seSAqLwojZGVmaW5lIEJUQV9BR19FUlJfVk9JUF9DU19DQUxMUyAgICAzMyAgICAgIC8qIEFHIGNhbm5vdCBjcmVhdGUgc2ltdWx0YW5lb3VzIFZvSVAgYW5kIENTIGNhbGxzICovCiNkZWZpbmUgQlRBX0FHX0VSUl9OT1RfRk9SX1ZPSVAgICAgIDM0ICAgICAgLyogTm90IHN1cHBvcnRlZCBvbiB0aGlzIGNhbGwgdHlwZShWb0lQKSAqLwojZGVmaW5lIEJUQV9BR19FUlJfU0lQX1JFU1BfQ09ERSAgICAzNSAgICAgIC8qIFNJUCAzIGRpZ2l0IHJlc3BvbnNlIGNvZGUgKi8KCiNpZiAwICAgLyogTm90IFVzZWQgaW4gQmx1ZXRvb3RoIEhGUCAxLjUgU3BlY2lmaWNhdGlvbiAqLwojZGVmaW5lIEJUQV9BR19FUlJfUEhBREFQX0xOS19SRVMgICAyICAgICAgIC8qIFBob25lLWFkYXB0ZXIgbGluayByZXNlcnZlZCAqLwojZGVmaW5lIEJUQV9BR19FUlJfUEhGU0lNX1BJTl9SRVEgICA2ICAgICAgIC8qIFBILUZTSU0gUElOIHJlcXVpcmVkICovCiNkZWZpbmUgQlRBX0FHX0VSUl9QSEZTSU1fUFVLX1JFUSAgIDcgICAgICAgLyogUEgtRlNJTSBQVUsgcmVxdWlyZWQgKi8KI2RlZmluZSBCVEFfQUdfRVJSX1NJTV9XUk9ORyAgICAgICAgMTUgICAgICAvKiBTSU0gd3JvbmcgKi8KI2RlZmluZSBCVEFfQUdfRVJSX05PVF9GT1VORCAgICAgICAgMjIgICAgICAvKiBOb3QgZm91bmQgKi8KI2RlZmluZSBCVEFfQUdfRVJSX05FVFdPUktfVElNRU9VVCAgMzEgICAgICAvKiBOZXR3b3JrIHRpbWVvdXQgKi8KI2RlZmluZSBCVEFfQUdfRVJSX05FVF9QSU5fUkVRICAgICAgNDAgICAgICAvKiBOZXR3b3JrIHBlcnNvbmFsaXphdGlvbiBQSU4gcmVxdWlyZWQgKi8KI2RlZmluZSBCVEFfQUdfRVJSX05FVF9QVUtfUkVRICAgICAgNDEgICAgICAvKiBOZXR3b3JrIHBlcnNvbmFsaXphdGlvbiBQVUsgcmVxdWlyZWQgKi8KI2RlZmluZSBCVEFfQUdfRVJSX1NVQlNFVF9QSU5fUkVRICAgNDIgICAgICAvKiBOZXR3b3JrIHN1YnNldCBwZXJzb25hbGl6YXRpb24gUElOIHJlcXVpcmVkICovCiNkZWZpbmUgQlRBX0FHX0VSUl9TVUJTRVRfUFVLX1JFUSAgIDQzICAgICAgLyogTmV0d29yayBzdWJzZXQgcGVyc29uYWxpemF0aW9uIFBVSyByZXF1aXJlZCAqLwojZGVmaW5lIEJUQV9BR19FUlJfU0VSVlBST19QSU5fUkVRICA0NCAgICAgIC8qIFNlcnZpY2UgcHJvdmlkZXIgcGVyc29uYWxpemF0aW9uIFBJTiByZXF1aXJlZCAqLwojZGVmaW5lIEJUQV9BR19FUlJfU0VSVlBST19QVUtfUkVRICA0NSAgICAgIC8qIFNlcnZpY2UgcHJvdmlkZXIgcGVyc29uYWxpemF0aW9uIFBVSyByZXF1aXJlZCAqLwojZGVmaW5lIEJUQV9BR19FUlJfQ09SUF9QSU5fUkVRICAgICA0NiAgICAgIC8qIENvcnBvcmF0ZSBwZXJzb25hbGl6YXRpb24gUElOIHJlcXVpcmVkICovCiNkZWZpbmUgQlRBX0FHX0VSUl9DT1JQX1BVS19SRVEgICAgIDQ3ICAgICAgLyogQ29ycG9yYXRlIHBlcnNvbmFsaXphdGlvbiBQVUsgcmVxdWlyZWQgKi8KI2RlZmluZSBCVEFfQUdfRVJSX1VOS05PV04gICAgICAgICAgMTAwICAgIC8qIFVua25vd24gZXJyb3IgKi8KLyogR1BSUy1yZWxhdGVkIGVycm9ycyAqLwojZGVmaW5lIEJUQV9BR19FUlJfSUxMX01TICAgICAgICAgICAxMDMgICAgLyogSWxsZWdhbCBNUyAoIzMpICovCiNkZWZpbmUgQlRBX0FHX0VSUl9JTExfTUUgICAgICAgICAgIDEwNiAgICAvKiBJbGxlZ2FsIE1FICgjNikgKi8KI2RlZmluZSBCVEFfQUdfRVJSX0dQUlNfTk9UX0FMTE9XRUQgMTA3ICAgIC8qIEdQUlMgc2VydmljZXMgbm90IGFsbG93ZWQgKCM3KSAqLwojZGVmaW5lIEJUQV9BR19FUlJfUExNTl9OT1RfQUxMT1dFRCAxMTEgICAgLyogUExNTiBzZXJ2aWNlcyBub3QgYWxsb3dlZCAoIzExKSAqLwojZGVmaW5lIEJUQV9BR19FUlJfTE9DX05PVF9BTExPV0VEICAxMTIgICAgLyogTG9jYXRpb24gYXJlYSBub3QgYWxsb3dlZCAoIzEyKSAqLwojZGVmaW5lIEJUQV9BR19FUlJfUk9BTV9OT1RfQUxMT1dFRCAxMTMgICAgLyogUm9hbWluZyBub3QgYWxsb3dlZCBpbiB0aGlzIGxvY2F0aW9uIGFyZWEgKCMxMykgKi8KLyogRXJyb3JzIHJlbGF0ZWQgdG8gYSBmYWlsdXJlIHRvIEFjdGl2YXRlIGEgQ29udGV4dCAqLwojZGVmaW5lIEJUQV9BR19FUlJfT1BUX05PVF9TVVBQICAgICAxMzIgICAgLyogU2VydmljZSBvcHRpb24gbm90IHN1cHBvcnRlZCAoIzMyKSAqLwojZGVmaW5lIEJUQV9BR19FUlJfT1BUX05PVF9TVUJTQ1IgICAxMzMgICAgLyogUmVxdWVzdGVkIHNlcnZpY2Ugb3B0aW9uIG5vdCBzdWJzY3JpYmVkICgjMzMpICovCiNkZWZpbmUgQlRBX0FHX0VSUl9PUFRfT1VUX09GX09SREVSIDEzNCAgICAvKiBTZXJ2aWNlIG9wdGlvbiB0ZW1wb3JhcmlseSBvdXQgb2Ygb3JkZXIgKCMzNCkgKi8KI2RlZmluZSBCVEFfQUdfRVJSX1BEUF9BVVRIX0ZBSUxVUkUgMTQ5ICAgIC8qIFBEUCBhdXRoZW50aWNhdGlvbiBmYWlsdXJlICovCi8qIE90aGVyIEdQUlMgZXJyb3JzICovCiNkZWZpbmUgQlRBX0FHX0VSUl9JTlZfTU9CSUxFX0NMQVNTIDE1MCAgICAvKiBJbnZhbGlkIG1vYmlsZSBjbGFzcyAqLwojZGVmaW5lIEJUQV9BR19FUlJfVU5TUEVDX0dQUlNfRVJSICAxNDggICAgLyogVW5zcGVjaWZpZWQgR1BSUyBlcnJvciAqLwojZW5kaWYgIC8qIFVudXNlZCBlcnJvciBjb2RlcyAqLwoKCi8qIEhGUCByZXN1bHQgZGF0YSAnb2tfZmxhZycgKi8KI2RlZmluZSBCVEFfQUdfT0tfQ09OVElOVUUgICAgICAgICAgMCAgICAgICAvKiBTZW5kIG91dCByZXNwb25zZSAobW9yZSByZXNwb25zZXMgY29taW5nKSAqLwojZGVmaW5lIEJUQV9BR19PS19ET05FICAgICAgICAgICAgICAxICAgICAgIC8qIFNlbmQgb3V0IHJlc3BvbnNlIGZvbGxvd2VkIGJ5IE9LIChmaW5pc2hlZCkgKi8KI2RlZmluZSBCVEFfQUdfT0tfRVJST1IgICAgICAgICAgICAgMiAgICAgICAvKiBFcnJvciByZXNwb25zZSAqLwoKLyogQlRSSCB2YWx1ZXMgKi8KI2RlZmluZSBCVEFfQUdfQlRSSF9TRVRfSE9MRCAgICAgICAgMCAgICAgICAvKiBQdXQgaW5jb21pbmcgY2FsbCBvbiBob2xkICovCiNkZWZpbmUgQlRBX0FHX0JUUkhfU0VUX0FDQyAgICAgICAgIDEgICAgICAgLyogQWNjZXB0IGluY29taW5nIGNhbGwgb24gaG9sZCAqLwojZGVmaW5lIEJUQV9BR19CVFJIX1NFVF9SRUogICAgICAgICAyICAgICAgIC8qIFJlamVjdCBpbmNvbWluZyBjYWxsIG9uIGhvbGQgKi8KI2RlZmluZSBCVEFfQUdfQlRSSF9SRUFEICAgICAgICAgICAgMyAgICAgICAvKiBSZWFkIHRoZSBjdXJyZW50IHZhbHVlICovCiNkZWZpbmUgQlRBX0FHX0JUUkhfTk9fUkVTUCAgICAgICAgIDQgICAgICAgLyogTm90IGluIFJIIFN0YXRlcyAocmVwbHkgdG8gcmVhZCkgKi8KCi8qIEFTQ0lJIGNoYXJhY3RlciBzdHJpbmcgb2YgYXJndW1lbnRzIHRvIHRoZSBBVCBjb21tYW5kIG9yIHJlc3VsdCAqLwojaWZuZGVmIEJUQV9BR19BVF9NQVhfTEVOCiNkZWZpbmUgQlRBX0FHX0FUX01BWF9MRU4gICAgICAgICAgIDI1NgojZW5kaWYKCi8qIGRhdGEgYXNzb2NpYXRlZCB3aXRoIEJUQV9BR19JTkRfUkVTICovCnR5cGVkZWYgc3RydWN0CnsKICAgIHVpbnQxNl90ICAgICAgICAgIGlkOwogICAgdWludDE2X3QgICAgICAgICAgdmFsdWU7CiAgICBib29sICAgICAgICAgICAgICBvbl9kZW1hbmQ7Cn0gdEJUQV9BR19JTkQ7CgovKiBkYXRhIHR5cGUgZm9yIEJUQV9BZ1Jlc3VsdCgpICovCnR5cGVkZWYgc3RydWN0CnsKICAgIGNoYXIgICAgICAgICAgICBzdHJbQlRBX0FHX0FUX01BWF9MRU4rMV07CiAgICB0QlRBX0FHX0lORCAgICAgaW5kOwogICAgVUlOVDE2ICAgICAgICAgIG51bTsKICAgIFVJTlQxNiAgICAgICAgICBhdWRpb19oYW5kbGU7CiAgICBVSU5UMTYgICAgICAgICAgZXJyY29kZTsgICAgICAgIC8qIFZhbGlkIG9ubHkgaWYgJ29rX2ZsYWcnIGlzIHNldCB0byBCVEFfQUdfT0tfRVJST1IgKi8KICAgIFVJTlQ4ICAgICAgICAgICBva19mbGFnOyAgICAgICAgLyogSW5kaWNhdGVzIGlmIHJlc3BvbnNlIGlzIGZpbmlzaGVkLCBhbmQgaWYgZXJyb3Igb2NjdXJyZWQgKi8KICAgIEJPT0xFQU4gICAgICAgICBzdGF0ZTsKfSB0QlRBX0FHX1JFU19EQVRBOwoKLyogQUcgY2FsbGJhY2sgZXZlbnRzICovCiNkZWZpbmUgQlRBX0FHX0VOQUJMRV9FVlQgICAgICAgMCAgLyogQUcgZW5hYmxlZCAqLwojZGVmaW5lIEJUQV9BR19SRUdJU1RFUl9FVlQgICAgIDEgIC8qIEFHIHJlZ2lzdGVyZWQgKi8KI2RlZmluZSBCVEFfQUdfT1BFTl9FVlQgICAgICAgICAyICAvKiBBRyBjb25uZWN0aW9uIG9wZW4gKi8KI2RlZmluZSBCVEFfQUdfQ0xPU0VfRVZUICAgICAgICAzICAvKiBBRyBjb25uZWN0aW9uIGNsb3NlZCAqLwojZGVmaW5lIEJUQV9BR19DT05OX0VWVCAgICAgICAgIDQgIC8qIFNlcnZpY2UgbGV2ZWwgY29ubmVjdGlvbiBvcGVuZWQgKi8KI2RlZmluZSBCVEFfQUdfQVVESU9fT1BFTl9FVlQgICA1ICAvKiBBdWRpbyBjb25uZWN0aW9uIG9wZW4gKi8KI2RlZmluZSBCVEFfQUdfQVVESU9fQ0xPU0VfRVZUICA2ICAvKiBBdWRpbyBjb25uZWN0aW9uIGNsb3NlZCAqLwojZGVmaW5lIEJUQV9BR19TUEtfRVZUICAgICAgICAgIDcgIC8qIFNwZWFrZXIgdm9sdW1lIGNoYW5nZWQgKi8KI2RlZmluZSBCVEFfQUdfTUlDX0VWVCAgICAgICAgICA4ICAvKiBNaWNyb3Bob25lIHZvbHVtZSBjaGFuZ2VkICovCiNkZWZpbmUgQlRBX0FHX0FUX0NLUERfRVZUICAgICAgOSAgLyogQ0tQRCBmcm9tIHRoZSBIUyAqLwojZGVmaW5lIEJUQV9BR19ESVNBQkxFX0VWVCAgICAgIDMwIC8qIEFHIGRpc2FibGVkICAgICAgICovCiNpZiAoQlRNX1dCU19JTkNMVURFRCA9PSBUUlVFICkKI2RlZmluZSBCVEFfQUdfV0JTX0VWVCAgICAgICAgICAzMSAvKiBTQ08gY29kZWMgaW5mbyAqLwojZW5kaWYKLyogVmFsdWVzIGJlbG93IGFyZSBmb3IgSEZQIG9ubHkgKi8KI2RlZmluZSBCVEFfQUdfQVRfQV9FVlQgICAgICAgICAxMCAvKiBBbnN3ZXIgYSBjYWxsICovCiNkZWZpbmUgQlRBX0FHX0FUX0RfRVZUICAgICAgICAgMTEgLyogUGxhY2UgYSBjYWxsIHVzaW5nIG51bWJlciBvciBtZW1vcnkgZGlhbCAqLwojZGVmaW5lIEJUQV9BR19BVF9DSExEX0VWVCAgICAgIDEyIC8qIENhbGwgaG9sZCAqLwojZGVmaW5lIEJUQV9BR19BVF9DSFVQX0VWVCAgICAgIDEzIC8qIEhhbmcgdXAgYSBjYWxsICovCiNkZWZpbmUgQlRBX0FHX0FUX0NJTkRfRVZUICAgICAgMTQgLyogUmVhZCBpbmRpY2F0b3Igc2V0dGluZ3MgKi8KI2RlZmluZSBCVEFfQUdfQVRfVlRTX0VWVCAgICAgICAxNSAvKiBUcmFuc21pdCBEVE1GIHRvbmUgKi8KI2RlZmluZSBCVEFfQUdfQVRfQklOUF9FVlQgICAgICAxNiAvKiBSZXRyaWV2ZSBudW1iZXIgZnJvbSB2b2ljZSB0YWcgKi8KI2RlZmluZSBCVEFfQUdfQVRfQkxETl9FVlQgICAgICAxNyAvKiBQbGFjZSBjYWxsIHRvIGxhc3QgZGlhbGVkIG51bWJlciAqLwojZGVmaW5lIEJUQV9BR19BVF9CVlJBX0VWVCAgICAgIDE4IC8qIEVuYWJsZS9kaXNhYmxlIHZvaWNlIHJlY29nbml0aW9uICovCiNkZWZpbmUgQlRBX0FHX0FUX05SRUNfRVZUICAgICAgMTkgLyogRGlzYWJsZSBlY2hvIGNhbmNlbGluZyAqLwojZGVmaW5lIEJUQV9BR19BVF9DTlVNX0VWVCAgICAgIDIwIC8qIFJldHJpZXZlIHN1YnNjcmliZXIgbnVtYmVyICovCiNkZWZpbmUgQlRBX0FHX0FUX0JUUkhfRVZUICAgICAgMjEgLyogQ0NBUC1zdHlsZSBpbmNvbWluZyBjYWxsIGhvbGQgKi8KI2RlZmluZSBCVEFfQUdfQVRfQ0xDQ19FVlQgICAgICAyMiAvKiBRdWVyeSBsaXN0IG9mIGN1cnJlbnQgY2FsbHMgKi8KI2RlZmluZSBCVEFfQUdfQVRfQ09QU19FVlQgICAgICAyMyAvKiBRdWVyeSBsaXN0IG9mIGN1cnJlbnQgY2FsbHMgKi8KI2RlZmluZSBCVEFfQUdfQVRfVU5BVF9FVlQgICAgICAyNCAvKiBVbmtub3duIEFUIGNvbW1hbmQgKi8KI2RlZmluZSBCVEFfQUdfQVRfQ0JDX0VWVCAgICAgICAyNSAvKiBCYXR0ZXJ5IExldmVsIHJlcG9ydCBmcm9tIEhGICovCiNkZWZpbmUgQlRBX0FHX0FUX0JBQ19FVlQgICAgICAgMjYgLyogYXZhYmxhYmxlIGNvZGVjICovCiNkZWZpbmUgQlRBX0FHX0FUX0JDU19FVlQgICAgICAgMjcgLyogQ29kZWMgc2VsZWN0ICovCiNkZWZpbmUgQlRBX0FHX0FUX0JJTkRfRVZUICAgICAgMjggLyogSEYgaW5kaWNhdG9yICovCiNkZWZpbmUgQlRBX0FHX0FUX0JJRVZfRVZUICAgICAgMjkgLyogSEYgaW5kaWNhdG9yIHVwZGF0ZXMgZnJvbSBwZWVyICovCgp0eXBlZGVmIFVJTlQ4IHRCVEFfQUdfRVZUOwoKLyogZGF0YSBhc3NvY2lhdGVkIHdpdGggbW9zdCBub24tQVQgZXZlbnRzICovCnR5cGVkZWYgc3RydWN0CnsKICAgIFVJTlQxNiAgICAgICAgICAgICAgaGFuZGxlOwogICAgVUlOVDggICAgICAgICAgICAgICBhcHBfaWQ7CiAgICB0QlRBX0FHX1NUQVRVUyAgICAgIHN0YXR1czsKfSB0QlRBX0FHX0hEUjsKCi8qIGRhdGEgYXNzb2NpYXRlZCB3aXRoIEJUQV9BR19SRUdJU1RFUl9FVlQgKi8KdHlwZWRlZiBzdHJ1Y3QKewogICAgdEJUQV9BR19IRFIgICAgICAgICBoZHI7CiAgICB0QlRBX0FHX1NUQVRVUyAgICAgIHN0YXR1czsKfSB0QlRBX0FHX1JFR0lTVEVSOwoKLyogZGF0YSBhc3NvY2lhdGVkIHdpdGggQlRBX0FHX09QRU5fRVZUICovCnR5cGVkZWYgc3RydWN0CnsKICAgIHRCVEFfQUdfSERSICAgICAgICAgaGRyOwogICAgQkRfQUREUiAgICAgICAgICAgICBiZF9hZGRyOwogICAgdEJUQV9TRVJWSUNFX0lEICAgICBzZXJ2aWNlX2lkOwogICAgdEJUQV9BR19TVEFUVVMgICAgICBzdGF0dXM7Cn0gdEJUQV9BR19PUEVOOwoKLyogZGF0YSBhc3NvY2lhdGVkIHdpdGggQlRBX0FHX0NMT1NFX0VWVCAqLwp0eXBlZGVmIHN0cnVjdAp7CiAgICB0QlRBX0FHX0hEUiAgICAgICAgIGhkcjsKICAgIEJEX0FERFIgICAgICAgICAgICAgYmRfYWRkcjsKfSB0QlRBX0FHX0NMT1NFOwoKLyogZGF0YSBhc3NvY2lhdGVkIHdpdGggQlRBX0FHX0NPTk5fRVZUICovCnR5cGVkZWYgc3RydWN0CnsKICAgIHRCVEFfQUdfSERSICAgICAgICAgaGRyOwogICAgdEJUQV9BR19QRUVSX0ZFQVQgICBwZWVyX2ZlYXQ7CiAgICBCRF9BRERSICAgICAgICAgICAgIGJkX2FkZHI7CiAgICB0QlRBX0FHX1BFRVJfQ09ERUMgIHBlZXJfY29kZWM7Cn0gdEJUQV9BR19DT05OOwoKLyogZGF0YSBhc3NvY2lhdGVkIHdpdGggQVQgY29tbWFuZCBldmVudCAqLwp0eXBlZGVmIHN0cnVjdAp7CiAgICB0QlRBX0FHX0hEUiAgICAgICAgIGhkcjsKICAgIEJEX0FERFIgICAgICAgICAgICAgYmRfYWRkcjsKICAgIGNoYXIgICAgICAgICAgICAgICAgc3RyW0JUQV9BR19BVF9NQVhfTEVOKzFdOwogICAgVUlOVDE2ICAgICAgICAgICAgICBudW07CiAgICBVSU5UOCAgICAgICAgICAgICAgIGlkeDsgICAgLyogY2FsbCBudW1iZXIgdXNlZCBieSBDTENDIGFuZCBDSExEICovCiAgICBVSU5UMTYgICAgICAgICAgICAgIGxpZHg7ICAgIC8qIGxvbmcgaW5kZXgsIGV4LCBIRiBpbmRpY2F0b3IgKi8KfSB0QlRBX0FHX1ZBTDsKCi8qIHVuaW9uIG9mIGRhdGEgYXNzb2NpYXRlZCB3aXRoIEFHIGNhbGxiYWNrICovCnR5cGVkZWYgdW5pb24KewogICAgdEJUQV9BR19IRFIgICAgICAgICBoZHI7CiAgICB0QlRBX0FHX1JFR0lTVEVSICAgIHJlZzsKICAgIHRCVEFfQUdfT1BFTiAgICAgICAgb3BlbjsKICAgIHRCVEFfQUdfQ0xPU0UgICAgICAgY2xvc2U7CiAgICB0QlRBX0FHX0NPTk4gICAgICAgIGNvbm47CiAgICB0QlRBX0FHX1ZBTCAgICAgICAgIHZhbDsKfSB0QlRBX0FHOwoKLyogQUcgY2FsbGJhY2sgKi8KdHlwZWRlZiB2b2lkICh0QlRBX0FHX0NCQUNLKSh0QlRBX0FHX0VWVCBldmVudCwgdEJUQV9BRyAqcF9kYXRhKTsKCi8qIGluZGljYXRvciBjb25zdGFudHMgSEZQIDEuMSBhbmQgbGF0ZXIgKi8KI2RlZmluZSBCVEFfQUdfSU5EX0NBTEwgICAgICAgICAgICAgMSAgIC8qIHBvc2l0aW9uIG9mIGNhbGwgaW5kaWNhdG9yICovCiNkZWZpbmUgQlRBX0FHX0lORF9DQUxMU0VUVVAgICAgICAgIDIgICAvKiBwb3NpdGlvbiBvZiBjYWxsc2V0dXAgaW5kaWNhdG9yICovCiNkZWZpbmUgQlRBX0FHX0lORF9TRVJWSUNFICAgICAgICAgIDMgICAvKiBwb3NpdGlvbiBvZiBzZXJ2aWNlIGluZGljYXRvciAqLwoKLyogaW5kaWNhdG9yIGNvbnN0YW50cyBIRlAgMS41IGFuZCBsYXRlciAqLwojZGVmaW5lIEJUQV9BR19JTkRfU0lHTkFMICAgICAgICAgICA0ICAgLyogcG9zaXRpb24gb2Ygc2lnbmFsIHN0cmVuZ3RoIGluZGljYXRvciAqLwojZGVmaW5lIEJUQV9BR19JTkRfUk9BTSAgICAgICAgICAgICA1ICAgLyogcG9zaXRpb24gb2Ygcm9hbWluZyBpbmRpY2F0b3IgKi8KI2RlZmluZSBCVEFfQUdfSU5EX0JBVFRDSEcgICAgICAgICAgNiAgIC8qIHBvc2l0aW9uIG9mIGJhdHRlcnkgY2hhcmdlIGluZGljYXRvciAqLwojZGVmaW5lIEJUQV9BR19JTkRfQ0FMTEhFTEQgICAgICAgICA3ICAgLyogcG9zaXRpb24gb2YgY2FsbGhlbGQgaW5kaWNhdG9yICovCiNkZWZpbmUgQlRBX0FHX0lORF9CRUFSRVIgICAgICAgICAgIDggICAvKiBwb3NpdGlvbiBvZiBiZWFyZXIgaW5kaWNhdG9yICovCgovKiBjYWxsIGluZGljYXRvciB2YWx1ZXMgKi8KI2RlZmluZSBCVEFfQUdfQ0FMTF9JTkFDVElWRSAgICAgICAgMCAgIC8qIFBob25lIGNhbGwgaW5hY3RpdmUgKi8KI2RlZmluZSBCVEFfQUdfQ0FMTF9BQ1RJVkUgICAgICAgICAgMSAgIC8qIFBob25lIGNhbGwgYWN0aXZlICovCgovKiBjYWxsc2V0dXAgaW5kaWNhdG9yIHZhbHVlcyAqLwojZGVmaW5lIEJUQV9BR19DQUxMU0VUVVBfTk9ORSAgICAgICAwICAgLyogTm90IGN1cnJlbnRseSBpbiBjYWxsIHNldCB1cCAqLwojZGVmaW5lIEJUQV9BR19DQUxMU0VUVVBfSU5DT01JTkcgICAxICAgLyogSW5jb21pbmcgY2FsbCBwcm9jZXNzIG9uZ29pbmcgKi8KI2RlZmluZSBCVEFfQUdfQ0FMTFNFVFVQX09VVEdPSU5HICAgMiAgIC8qIE91dGdvaW5nIGNhbGwgc2V0IHVwIGlzIG9uZ29pbmcgKi8KI2RlZmluZSBCVEFfQUdfQ0FMTFNFVFVQX0FMRVJUSU5HICAgMyAgIC8qIFJlbW90ZSBwYXJ0eSBiZWluZyBhbGVydGVkIGluIGFuIG91dGdvaW5nIGNhbGwgKi8KCi8qIHNlcnZpY2UgaW5kaWNhdG9yIHZhbHVlcyAqLwojZGVmaW5lIEJUQV9BR19TRVJWSUNFX05PTkUgICAgICAgICAwICAgLyogTmVpdGhlciBDUyBub3IgVm9JUCBzZXJ2aWNlIGlzIGF2YWlsYWJsZSAgICAgKi8KI2RlZmluZSBCVEFfQUdfU0VSVklDRV9DUyAgICAgICAgICAgMSAgIC8qIE9ubHkgQ1Mgc2VydmljZSBpcyBhdmFpbGFibGUgICAgICAgICAgICAgICAgICovCiNkZWZpbmUgQlRBX0FHX1NFUlZJQ0VfVk9JUCAgICAgICAgIDIgICAvKiBPbmx5IFZvSVAgc2VydmljZSBpcyBhdmFpbGFibGUgICAgICAgICAgICAgICAqLwojZGVmaW5lIEJUQV9BR19TRVJWSUNFX0NTX1ZPSVAgICAgICAzICAgLyogQm90aCBDUyBhbmQgVm9JUCBzZXJ2aWNlcyBhdmFpbGFibGUgICAgICAgICAgKi8KCi8qIGNhbGxoZWxkIGluZGljYXRvciB2YWx1ZXMgKi8KI2RlZmluZSBCVEFfQUdfQ0FMTEhFTERfSU5BQ1RJVkUgICAgMCAgIC8qIE5vIGhlbGQgY2FsbHMgKi8KI2RlZmluZSBCVEFfQUdfQ0FMTEhFTERfQUNUSVZFICAgICAgMSAgIC8qIENhbGwgaGVsZCBhbmQgY2FsbCBhY3RpdmUgKi8KI2RlZmluZSBCVEFfQUdfQ0FMTEhFTERfTk9BQ1RJVkUgICAgMiAgIC8qIENhbGwgaGVsZCBhbmQgbm8gY2FsbCBhY3RpdmUgKi8KCi8qIHNpZ25hbCBzdHJlbmd0aCBpbmRpY2F0b3IgdmFsdWVzICovCiNkZWZpbmUgQlRBX0FHX1JPQU1JTkdfSU5BQ1RJVkUgICAgIDAgICAvKiBQaG9uZSBjYWxsIGluYWN0aXZlICovCiNkZWZpbmUgQlRBX0FHX1JPQU1JTkdfQUNUSVZFICAgICAgIDEgICAvKiBQaG9uZSBjYWxsIGFjdGl2ZSAqLwoKLyogYmVhcmVyIGluZGljYXRvciB2YWx1ZXMgKi8KI2RlZmluZSBCVEFfQUdfQkVBUkVSX1dMQU4gICAgICAgICAgMCAgIC8qIFdMQU4gICAgICAgICAqLwojZGVmaW5lIEJUQV9BR19CRUFSRVJfQkxVRVRPT1RIICAgICAxICAgLyogQmx1ZXRvb3RoICAgICovCiNkZWZpbmUgQlRBX0FHX0JFQVJFUl9XSVJFRCAgICAgICAgIDIgICAvKiBXaXJlZCAgICAgICAgKi8KI2RlZmluZSBCVEFfQUdfQkVBUkVSXzJHM0cgICAgICAgICAgMyAgIC8qIDJHIDNHICAgICAgICAqLwojZGVmaW5lIEJUQV9BR19CRUFSRVJfV0lNQVggICAgICAgICA0ICAgLyogV0lNQVggICAgICAgICovCiNkZWZpbmUgQlRBX0FHX0JFQVJFUl9SRVMxICAgICAgICAgIDUgICAvKiBSZXNlcnZlZCAgICAgKi8KI2RlZmluZSBCVEFfQUdfQkVBUkVSX1JFUzIgICAgICAgICAgNiAgIC8qIFJlc2VydmVkICAgICAqLwojZGVmaW5lIEJUQV9BR19CRUFSRVJfUkVTMyAgICAgICAgICA3ICAgLyogUmVzZXJ2ZWQgICAgICovCgovKiB0eXBlIGZvciBIRiBpbmRpY2F0b3IgKi8KdHlwZWRlZiBzdHJ1Y3QKewogICAgVUlOVDE2ICAgICAgICAgIGluZF9pZDsKICAgIEJPT0xFQU4gICAgICAgICBpc19zdXBwb3J0ZWQ7CiAgICBCT09MRUFOICAgICAgICAgaXNfZW5hYmxlOwogICAgVUlOVDMyICAgICAgICAgIGluZF9taW5fdmFsOwogICAgVUlOVDMyICAgICAgICAgIGluZF9tYXhfdmFsOwp9IHRCVEFfQUdfSEZfSU5EOwoKLyogQUcgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8KdHlwZWRlZiBzdHJ1Y3QKewogICAgY2hhciAgICAgICAgICpjaW5kX2luZm87CiAgICBjaGFyICAgICAgICAgKmJpbmRfaW5mbzsKICAgIHVpbnQ4X3QgICAgICAgIG51bV9sb2NhbF9oZl9pbmQ7CiAgICBpbnQzMl90ICAgICAgICBjb25uX3RvdXQ7CiAgICB1aW50MTZfdCAgICAgICBzY29fcGt0X3R5cGVzOwogICAgY2hhciAgICAgICAgICpjaGxkX3ZhbF9lY2M7CiAgICBjaGFyICAgICAgICAgKmNobGRfdmFsOwp9IHRCVEFfQUdfQ0ZHOwoKI2lmZGVmIF9fY3BsdXNwbHVzCmV4dGVybiAiQyIKewojZW5kaWYKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqKiAgRXh0ZXJuYWwgRnVuY3Rpb24gRGVjbGFyYXRpb25zCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKioKKiogRnVuY3Rpb24gICAgICAgICBCVEFfQWdFbmFibGUKKioKKiogRGVzY3JpcHRpb24gICAgICBFbmFibGUgdGhlIGF1ZGlvIGdhdGV3YXkgc2VydmljZS4gV2hlbiB0aGUgZW5hYmxlCioqICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uIGlzIGNvbXBsZXRlIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aWxsIGJlCioqICAgICAgICAgICAgICAgICAgY2FsbGVkIHdpdGggYSBCVEFfQUdfRU5BQkxFX0VWVC4gVGhpcyBmdW5jdGlvbiBtdXN0CioqICAgICAgICAgICAgICAgICAgYmUgY2FsbGVkIGJlZm9yZSBvdGhlciBmdW5jdGlvbiBpbiB0aGUgQUcgQVBJIGFyZQoqKiAgICAgICAgICAgICAgICAgIGNhbGxlZC4KKioKKiogUmV0dXJucyAgICAgICAgICBCVEFfU1VDQ0VTUyBpZiBPSywgQlRBX0ZBSUxVUkUgb3RoZXJ3aXNlLgoqKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp0QlRBX1NUQVRVUyBCVEFfQWdFbmFibGUodEJUQV9BR19QQVJTRV9NT0RFIHBhcnNlX21vZGUsIHRCVEFfQUdfQ0JBQ0sgKnBfY2JhY2spOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKioKKiogRnVuY3Rpb24gICAgICAgICBCVEFfQWdEaXNhYmxlCioqCioqIERlc2NyaXB0aW9uICAgICAgRGlzYWJsZSB0aGUgYXVkaW8gZ2F0ZXdheSBzZXJ2aWNlCioqCioqCioqIFJldHVybnMgICAgICAgICAgdm9pZAoqKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp2b2lkIEJUQV9BZ0Rpc2FibGUodm9pZCk7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqKgoqKiBGdW5jdGlvbiAgICAgICAgIEJUQV9BZ1JlZ2lzdGVyCioqCioqIERlc2NyaXB0aW9uICAgICAgUmVnaXN0ZXIgYW4gQXVkaW8gR2F0ZXdheSBzZXJ2aWNlLgoqKgoqKgoqKiBSZXR1cm5zICAgICAgICAgIHZvaWQKKioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8Kdm9pZCBCVEFfQWdSZWdpc3Rlcih0QlRBX1NFUlZJQ0VfTUFTSyBzZXJ2aWNlcywgdEJUQV9TRUMgc2VjX21hc2ssCiAgICAgICAgICAgICAgICAgICAgdEJUQV9BR19GRUFUIGZlYXR1cmVzLCBjaGFyICpwX3NlcnZpY2VfbmFtZXNbXSwgVUlOVDggYXBwX2lkKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioqCioqIEZ1bmN0aW9uICAgICAgICAgQlRBX0FnRGVyZWdpc3RlcgoqKgoqKiBEZXNjcmlwdGlvbiAgICAgIERlcmVnaXN0ZXIgYW4gYXVkaW8gZ2F0ZXdheSBzZXJ2aWNlLgoqKgoqKgoqKiBSZXR1cm5zICAgICAgICAgIHZvaWQKKioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8Kdm9pZCBCVEFfQWdEZXJlZ2lzdGVyKFVJTlQxNiBoYW5kbGUpOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKioKKiogRnVuY3Rpb24gICAgICAgICBCVEFfQWdPcGVuCioqCioqIERlc2NyaXB0aW9uICAgICAgT3BlbnMgYSBjb25uZWN0aW9uIHRvIGEgaGVhZHNldCBvciBoYW5kcy1mcmVlIGRldmljZS4KKiogICAgICAgICAgICAgICAgICBXaGVuIGNvbm5lY3Rpb24gaXMgb3BlbiBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQKKiogICAgICAgICAgICAgICAgICB3aXRoIGEgQlRBX0FHX09QRU5fRVZULiBPbmx5IHRoZSBkYXRhIGNvbm5lY3Rpb24gaXMKKiogICAgICAgICAgICAgICAgICBvcGVuZWQuIFRoZSBhdWRpbyBjb25uZWN0aW9uIGlzIG5vdCBvcGVuZWQuCioqCioqCioqIFJldHVybnMgICAgICAgICAgdm9pZAoqKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp2b2lkIEJUQV9BZ09wZW4oVUlOVDE2IGhhbmRsZSwgQkRfQUREUiBiZF9hZGRyLCB0QlRBX1NFQyBzZWNfbWFzaywgdEJUQV9TRVJWSUNFX01BU0sgc2VydmljZXMpOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKioKKiogRnVuY3Rpb24gICAgICAgICBCVEFfQWdDbG9zZQoqKgoqKiBEZXNjcmlwdGlvbiAgICAgIENsb3NlIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24gdG8gYSBoZWFkc2V0IG9yIGEgaGFuZHNmcmVlCioqICAgICAgICAgICAgICAgICAgQW55IGN1cnJlbnQgYXVkaW8gY29ubmVjdGlvbiB3aWxsIGFsc28gYmUgY2xvc2VkCioqCioqCioqIFJldHVybnMgICAgICAgICAgdm9pZAoqKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp2b2lkIEJUQV9BZ0Nsb3NlKFVJTlQxNiBoYW5kbGUpOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKioKKiogRnVuY3Rpb24gICAgICAgICBCVEFfQWdBdWRpb09wZW4KKioKKiogRGVzY3JpcHRpb24gICAgICBPcGVucyBhbiBhdWRpbyBjb25uZWN0aW9uIHRvIHRoZSBjdXJyZW50bHkgY29ubmVjdGVkCioqICAgICAgICAgICAgICAgICAgaGVhZHNldCBvciBobmFkc2ZyZWUKKioKKioKKiogUmV0dXJucyAgICAgICAgICB2b2lkCioqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnZvaWQgQlRBX0FnQXVkaW9PcGVuKFVJTlQxNiBoYW5kbGUpOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKioKKiogRnVuY3Rpb24gICAgICAgICBCVEFfQWdBdWRpb0Nsb3NlCioqCioqIERlc2NyaXB0aW9uICAgICAgQ2xvc2UgdGhlIGN1cnJlbnRseSBhY3RpdmUgYXVkaW8gY29ubmVjdGlvbiB0byBhIGhlYWRzZXQKKiogICAgICAgICAgICAgICAgICBvciBobmFkc2ZyZWUuIFRoZSBkYXRhIGNvbm5lY3Rpb24gcmVtYWlucyBvcGVuCioqCioqCioqIFJldHVybnMgICAgICAgICAgdm9pZAoqKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp2b2lkIEJUQV9BZ0F1ZGlvQ2xvc2UoVUlOVDE2IGhhbmRsZSk7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqKgoqKiBGdW5jdGlvbiAgICAgICAgIEJUQV9BZ1Jlc3VsdAoqKgoqKiBEZXNjcmlwdGlvbiAgICAgIFNlbmQgYW4gQVQgcmVzdWx0IGNvZGUgdG8gYSBoZWFkc2V0IG9yIGhhbmRzLWZyZWUgZGV2aWNlLgoqKiAgICAgICAgICAgICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgb25seSB1c2VkIHdoZW4gdGhlIEFHIHBhcnNlIG1vZGUgaXMgc2V0CioqICAgICAgICAgICAgICAgICAgdG8gQlRBX0FHX1BBUlNFLgoqKgoqKgoqKiBSZXR1cm5zICAgICAgICAgIHZvaWQKKioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8Kdm9pZCBCVEFfQWdSZXN1bHQoVUlOVDE2IGhhbmRsZSwgdEJUQV9BR19SRVMgcmVzdWx0LCB0QlRBX0FHX1JFU19EQVRBICpwX2RhdGEpOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKioKKiogRnVuY3Rpb24gICAgICAgICBCVEFfQWdTZXRDb2RlYwoqKgoqKiBEZXNjcmlwdGlvbiAgICAgIFNwZWNpZnkgdGhlIGNvZGVjIHR5cGUgdG8gYmUgdXNlZCBmb3IgdGhlIHN1YnNlcXVlbnQKKiogICAgICAgICAgICAgICAgICBhdWRpbyBjb25uZWN0aW9uLgoqKgoqKgoqKgoqKiBSZXR1cm5zICAgICAgICAgIHZvaWQKKioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8Kdm9pZCBCVEFfQWdTZXRDb2RlYyhVSU5UMTYgaGFuZGxlLCB0QlRBX0FHX1BFRVJfQ09ERUMgY29kZWMpOwoKI2lmZGVmIF9fY3BsdXNwbHVzCn0KI2VuZGlmCgojZW5kaWYgLyogQlRBX0FHX0FQSV9IICovCg==