ZGlmZiAtLWdpdCBhL0FuZHJvaWQubWsgYi9BbmRyb2lkLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNTNlN2QKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkLm1rCkBAIC0wLDAgKzEgQEAKK2luY2x1ZGUgJChjYWxsIGFsbC1zdWJkaXItbWFrZWZpbGVzKQpkaWZmIC0tZ2l0IGEvQ0hBTkdFTE9HIGIvQ0hBTkdFTE9HCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA3NWZlMWEKLS0tIC9kZXYvbnVsbAorKysgYi9DSEFOR0VMT0cKQEAgLTAsMCArMSwyMjgyIEBACit2ZXJzaW9uIDIuNzgKKyAgICAgICAgRml4IGxvZ2ljIG9mIGFwcGVuZGluZyAiLjxsYXllcj4iIHRvIFBYRSBiYXNlbmFtZS4gVGhhbmtzIHRvIENocmlzCisJTm92YWtvdmljIGZvciB0aGUgcGF0Y2guCisKKwlSZXZlcnQgcGluZy1jaGVjayBvZiBhZGRyZXNzIGluIERIQ1BESVNDT1ZFUiBpZiB0aGVyZQorCWFscmVhZHkgZXhpc3RzIGEgbGVhc2UgZm9yIHRoZSBhZGRyZXNzLiBVbmRlciBzb21lCisJY2lyY3Vtc3RhbmNlcywgYW5kIG5ldGJvb3RlZCB3aW5kb3dzIGluc3RhbGxhdGlvbiBjYW4gcmVwbHkKKwl0byBwaW5ncyBiZWZvcmUgaWYgaGFzIGEgREhDUCBsZWFzZSBhbmQgYmxvY2sgYWxsb2NhdGlvbgorCW9mIHRoZSBhZGRyZXNzIGl0IGFscmVhZHkgdXNlZCBkdXJpbmcgbmV0Ym9vdC4gVGhhbmtzIHRvCisJSmFuIFBzb3RhIGZvciBzcG90dGluZyB0aGlzLgorCisJRml4IERIQ1AgcmVsYXlpbmcsIGJyb2tlbiBpbiAyLjc2IGFuZCAyLjc3IGJ5IGNvbW1pdAorCWZmMzI1NjQ0YzdhZmFlMjU4ODU4M2Y5MzVmNGVhOWI5Njk0ZWI1MmUuIFRoYW5rcyB0bworCUpvaG4gRml0emdpYmJvbiBmb3IgdGhlIGRpYWdub3NpcyBhbmQgcGF0Y2guCisKKyAgICAgICAgVHJ5IG90aGVyIHNlcnZlcnMgaWYgZmlyc3QgcmV0dXJucyBSRUZVU0VEIHdoZW4KKwktLXN0cmljdC1vcmRlciBhY3RpdmUuIFRoYW5rcyB0byBIYW5zIERlZGVja2VyCisJZm9yIHRoZSBwYXRjaAorCisJRml4IHJlZ3Jlc3Npb24gaW4gMi43NywgaXJvbmljYWxseSBhZGRlZCBhcyBhIHNlY3VyaXR5CisJaW1wcm92ZW1lbnQsIHdoaWNoIHJlc3VsdGVkIGluIGEgY3Jhc2ggd2hlbiBhIEROUworCXF1ZXJ5IGV4Y2VlZGVkIDUxMiBieXRlcyAob3IgdGhlIEVETlMwIHBhY2tldCBzaXplLAorCWlmIGRpZmZlcmVudC4pIFRoYW5rcyB0byBDaHJpc3RpYW4gS3VqYXUsIEFybmUgV29lcm5lcgorCUp1YW4gTWFudWVsIEZlcm5hbmRleiBhbmQgS2V2aW4gRGFyYnlzaGlyZS1CcnlhbnQgZm9yCisJY2hhc2luZyB0aGlzIG9uZSBkb3duLiAgQ1ZFLTIwMTctMTM3MDQgYXBwbGllcy4KKworCUZpeCBoZWFwIG92ZXJmbG93IGluIEROUyBjb2RlLiBUaGlzIGlzIGEgcG90ZW50aWFsbHkgc2VyaW91cworCXNlY3VyaXR5IGhvbGUuIEl0IGFsbG93cyBhbiBhdHRhY2tlciB3aG8gY2FuIG1ha2UgRE5TCisJcmVxdWVzdHMgdG8gZG5zbWFzcSwgYW5kIHdobyBjb250cm9scyB0aGUgY29udGVudHMgb2YKKwlhIGRvbWFpbiwgd2hpY2ggaXMgdGhlcmVieSBxdWVyaWVkLCB0byBvdmVyZmxvdworCShieSAyIGJ5dGVzKSBhIGhlYXAgYnVmZmVyIGFuZCBlaXRoZXIgY3Jhc2gsIG9yCisJZXZlbiB0YWtlIGNvbnRyb2wgb2YsIGRuc21hc3EuCisJQ1ZFLTIwMTctMTQ0OTEgYXBwbGllcy4KKwlDcmVkaXQgdG8gRmVsaXggV2lsaGVsbSwgRmVybWluIEouIFNlcm5hLCBHYWJyaWVsIENhbXBhbmEKKwlLZXZpbiBIYW1hY2hlciBhbmQgUm9uIEJvd2VzIG9mIHRoZSBHb29nbGUgU2VjdXJpdHkgVGVhbSBmb3IKKwlmaW5kaW5nIHRoaXMuCisKKwlGaXggaGVhcCBvdmVyZmxvdyBpbiBJUHY2IHJvdXRlciBhZHZlcnRpc2VtZW50IGNvZGUuCisJVGhpcyBpcyBhIHBvdGVudGlhbGx5IHNlcmlvdXMgc2VjdXJpdHkgaG9sZSwgYXMgYQorCWNyYWZ0ZWQgUkEgcmVxdWVzdCBjYW4gb3ZlcmZsb3cgYSBidWZmZXIgYW5kIGNyYXNoIG9yCisJY29udHJvbCBkbnNtYXNxLiBBdHRhY2tlciBtdXN0IGJlIG9uIHRoZSBsb2NhbCBuZXR3b3JrLgorCUNWRS0yMDE3LTE0NDkyIGFwcGxpZXMuCisgICAgICAgIENyZWRpdCB0byBGZWxpeCBXaWxoZWxtLCBGZXJtaW4gSi4gU2VybmEsIEdhYnJpZWwgQ2FtcGFuYQorCWFuZCBLZXZpbiBIYW1hY2hlciBvZiB0aGUgR29vZ2xlIFNlY3VyaXR5IFRlYW0gZm9yCisJZmluZGluZyB0aGlzLgorCisJRml4IHN0YWNrIG92ZXJmbG93IGluIERIQ1B2NiBjb2RlLiBBbiBhdHRhY2tlciB3aG8gY2FuIHNlbmQKKwlhIERIQ1B2NiByZXF1ZXN0IHRvIGRuc21hc3EgY2FuIG92ZXJmbG93IHRoZSBzdGFjayBmcmFtZSBhbmQKKwljcmFzaCBvciBjb250cm9sIGRuc21hc3EuCisJQ1ZFLTIwMTctMTQ0OTMgYXBwbGllcy4KKwlDcmVkaXQgdG8gRmVsaXggV2lsaGVsbSwgRmVybWluIEouIFNlcm5hLCBHYWJyaWVsIENhbXBhbmEKKwlLZXZpbiBIYW1hY2hlciBhbmQgUm9uIEJvd2VzIG9mIHRoZSBHb29nbGUgU2VjdXJpdHkgVGVhbSBmb3IKKwlmaW5kaW5nIHRoaXMuCisKKwlGaXggaW5mb3JtYXRpb24gbGVhayBpbiBESENQdjYuIEEgY3JhZnRlZCBESENQdjYgcGFja2V0IGNhbgorCWNhdXNlIGRuc21hc3EgdG8gZm9yd2FyZCBtZW1vcnkgZnJvbSBvdXRzaWRlIHRoZSBwYWNrZXQKKwlidWZmZXIgdG8gYSBESENQdjYgc2VydmVyIHdoZW4gYWN0aW5nIGFzIGEgcmVsYXkuCisJQ1ZFLTIwMTctMTQ0OTQgYXBwbGllcy4KKwlDcmVkaXQgdG8gRmVsaXggV2lsaGVsbSwgRmVybWluIEouIFNlcm5hLCBHYWJyaWVsIENhbXBhbmEKKwlLZXZpbiBIYW1hY2hlciBhbmQgUm9uIEJvd2VzIG9mIHRoZSBHb29nbGUgU2VjdXJpdHkgVGVhbSBmb3IKKwlmaW5kaW5nIHRoaXMuCisKKwlGaXggRG9TIGluIEROUy4gSW52YWxpZCBib3VuZGFyeSBjaGVja3MgaW4gdGhlCisJYWRkX3BzZXVkb2hlYWRlciBmdW5jdGlvbiBhbGxvd3MgYSBtZW1jcHkgY2FsbCB3aXRoIG5lZ2F0aXZlCisJc2l6ZSBBbiBhdHRhY2tlciB3aGljaCBjYW4gc2VuZCBtYWxpY2lvdXMgRE5TIHF1ZXJpZXMKKwl0byBkbnNtYXNxIGNhbiB0cmlnZ2VyIGEgRG9TIHJlbW90ZWx5LgorCWRuc21hc3EgaXMgdnVsbmVyYWJsZSBvbmx5IGlmIG9uZSBvZiB0aGUgZm9sbG93aW5nIG9wdGlvbiBpcworCXNwZWNpZmllZDogLS1hZGQtbWFjLCAtLWFkZC1jcGUtaWQgb3IgLS1hZGQtc3VibmV0LgorCUNWRS0yMDE3LTE0NDk2IGFwcGxpZXMuCisJQ3JlZGl0IHRvIEZlbGl4IFdpbGhlbG0sIEZlcm1pbiBKLiBTZXJuYSwgR2FicmllbCBDYW1wYW5hCisJS2V2aW4gSGFtYWNoZXIgYW5kIFJvbiBCb3dlcyBvZiB0aGUgR29vZ2xlIFNlY3VyaXR5IFRlYW0gZm9yCisJZmluZGluZyB0aGlzLgorCisJRml4IG91dC1vZi1tZW1vcnkgRG9zIHZ1bG5lcmFiaWxpdHkuIEFuIGF0dGFja2VyIHdoaWNoIGNhbgorCXNlbmQgbWFsaWNpb3VzIEROUyBxdWVyaWVzIHRvIGRuc21hc3EgY2FuIHRyaWdnZXIgbWVtb3J5CisJYWxsb2NhdGlvbnMgaW4gdGhlIGFkZF9wc2V1ZG9oZWFkZXIgZnVuY3Rpb24KKwlUaGUgYWxsb2NhdGVkIG1lbW9yeSBpcyBuZXZlciBmcmVlZCB3aGljaCBsZWFkcyB0byBhIERvUworCXRocm91Z2ggbWVtb3J5IGV4aGF1c3Rpb24uIGRuc21hc3EgaXMgdnVsbmVyYWJsZSBvbmx5CisJaWYgb25lIG9mIHRoZSBmb2xsb3dpbmcgb3B0aW9uIGlzIHNwZWNpZmllZDoKKwktLWFkZC1tYWMsIC0tYWRkLWNwZS1pZCBvciAtLWFkZC1zdWJuZXQuCisJQ1ZFLTIwMTctMTQ0OTUgYXBwbGllcy4KKwlDcmVkaXQgdG8gRmVsaXggV2lsaGVsbSwgRmVybWluIEouIFNlcm5hLCBHYWJyaWVsIENhbXBhbmEKKwlLZXZpbiBIYW1hY2hlciBhbmQgUm9uIEJvd2VzIG9mIHRoZSBHb29nbGUgU2VjdXJpdHkgVGVhbSBmb3IKKwlmaW5kaW5nIHRoaXMuCisKKwordmVyc2lvbiAyLjc3CisJR2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBjb25maWd1cmVkIHdpdGggYSBDTkFNRSBsb29wLAorCXJhdGhlciB0aGFuIGEgY3Jhc2guIFRoYW5rcyB0byBHZW9yZ2UgTWV0eiBmb3IKKwlzcG90dGluZyB0aGlzIHByb2JsZW0uCisKKwlDYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiBURlRQIGVycm9yIHJlcGx5IHBhY2tldCAKKwljb3JyZWN0bHkuIFRoaXMgZml4ZXMgYSBwcm9ibGVtIHdoZW4gdGhlIGVycm9yIAorCW1lc3NhZ2UgaW4gYSBURlRQIHBhY2tldCBleGNlZWRzIHRoZSBhcmJpdHJhcnkgCisJbGltaXQgb2YgNTAwIGNoYXJhY3RlcnMuIFRoZSBtZXNzYWdlIHdhcyBjb3JyZWN0bHkKKwl0cnVuY2F0ZWQsIGJ1dCBub3QgdGhlIHBhY2tldCBsZW5ndGgsIHNvIAorCWV4dHJhIGRhdGEgd2FzIGFwcGVuZGVkLiBUaGlzIGlzIGEgcG9zc2libGUKKwlzZWN1cml0eSByaXNrLCBzaW5jZSB0aGUgZXh0cmEgZGF0YSBjb21lcyBmcm9tCisJYSBidWZmZXIgd2hpY2ggaXMgYWxzbyB1c2VkIGZvciBETlMsIHNvIHRoYXQKKwlwcmV2aW91cyBETlMgcXVlcmllcyBvciByZXBsaWVzIG1heSBiZSBsZWFrZWQuCisJVGhhbmtzIHRvIE1vemlsbGEgZm9yIGZ1bmRpbmcgdGhlIHNlY3VyaXR5IGF1ZGl0IAorCXdoaWNoIHNwb3R0ZWQgdGhpcyBidWcuCisKKwlGaXggbG9naWMgZXJyb3IgaW4gTGludXggbmV0bGluayBjb2RlLiBUaGlzIGNvdWxkCisJY2F1c2UgZG5zbWFzcSB0byBlbnRlciBhIHRpZ2h0IGxvb3Agb24gc3lzdGVtcworCXdpdGggYSB2ZXJ5IGxhcmdlIG51bWJlciBvZiBuZXR3b3JrIGludGVyZmFjZXMuCisJVGhhbmtzIHRvIEl2YW4gS29rc2hheXNreSBmb3IgdGhlIGRpYWdub3NpcyBhbmQKKwlwYXRjaC4KKworCUZpeCBwcm9ibGVtIHdpdGggLS1kbnNzZWMtdGltZXN0YW1wIHdoZXJlYnkgcmVjZWlwdAorCW9mIFNJR0hVUCB3b3VsZCBlcnJvbmVvdXNseSBlbmdhZ2UgdGltZXN0YW1wIGNoZWNraW5nLgorCVRoYW5rcyB0byBLZXZpbiBEYXJieXNoaXJlLUJyeWFudCBmb3IgdGhpcyB3b3JrLgorCisJQnVtcCB6b25lIHNlcmlhbCBvbiByZWxvYWRpbmcgL2V0Yy9ob3N0cyBhbmQgZnJpZW5kcworCXdoZW4gcHJvdmlkaW5nIGF1dGhvcml0YXRpdmUgRE5TLiBUaGFua3MgdG8gSGFycmFsZAorCUR1bmtlbCBmb3Igc3BvdHRpbmcgdGhpcy4KKworCUhhbmRsZSB2NC1tYXBwZWQgSVB2NiBhZGRyZXNzZXMgc2FuZWx5IGluIC0tc3ludGgtZG9tYWluLgorCVRoZXNlIGhhdmUgc3RhbmRhcmQgcmVwcmVzZW50YXRpb24gbGlrZSA6OmZmZmY6MS4yLjMuNAorCWFuZCBhcmUgbm93IGNvbnZlcnRlZCB0byBuYW1lcyBsaWtlCisJPHByZWZpeD4tLWZmZmYtMS0yLTMtNC48ZG9tYWluPgorCisJSGFuZGxlIGJpbmRpbmcgdXBzdHJlYW0gc2VydmVycyB0byBhbiBpbnRlcmZhY2UgCisJKC0tc2VydmVyPTEuMi4zLjRAZXRoMCkgd2hlbiB0aGUgbmFtZWQgaW50ZXJmYWNlCisJaXMgZGVzdHJveWVkIGFuZCByZWNyZWF0ZWQgaW4gdGhlIGtlcm5lbC4gVGhhbmtzIHRvIAorCUJlbmlhbWlubyBHYWx2YW5pIGZvciB0aGUgcGF0Y2guCisKKwlBbGxvdyB3aWxkY2FyZCBDTkFNRSByZWNvcmRzIGluIGF1dGhvcml0YXRpdmUgem9uZXMuCisJRm9yIGV4YW1wbGUgLS1jbmFtZT0qLmV4YW1wbGUuY29tLGRlZmF1bHQuZXhhbXBsZS5jb20KKwlUaGFua3MgdG8gUHJvIEJhY2t1cCBmb3Igc3BvbnNvcmluZyB0aGlzIGRldmVsb3BtZW50LgorCisJQnVtcCB0aGUgYWxsb3dlZCBiYWNrbG9nIG9mIFRDUCBjb25uZWN0aW9ucyBmcm9tIDUgdG8gMzIsCisJYW5kIG1ha2UgdGhpcyBhIGNvbXBpbGUtdGltZSBjb25maWd1cmFibGUgb3B0aW9uLiBUaGFua3MKKwl0byBEb25hdGFzIEFicmFpdGlzIGZvciBkaWFnbm9zaW5nIHRoaXMgYXMgYSBwb3RlbnRpYWwKKwlwcm9ibGVtLgorCisJQWRkIEROU01BU1FfUkVRVUVTVEVEX09QVElPTlMgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIAorCWxlYXNlLWNoYW5nZSBzY3JpcHQuIFRoYW5rcyB0byBaSEFPIFl1IGZvciB0aGUgcGF0Y2guCisKKwlGaXggZm9vYmFyIGluIHJyZmlsdGVyIGNvZGUsIHRoYXQgY291bGQgY2F1c2UgbWFsZm9ybWVkIAorCXJlcGxpZXMsIGVzcGVjaWFsbHkgd2hlbiBETlNTRUMgdmFsaWRhdGlvbiBvbiwgYW5kIAorCXRoZSB1cHN0cmVhbSBzZXJ2ZXIgcmV0dXJucyBhbnN3ZXIgd2l0aCB0aGUgUlJzIGluIGEgCisJcGFydGljdWxhciBvcmRlci4gVGhlIG9ubHkgRE5TIHNlcnZlciBrbm93biB0byB0aWNrbGUKKwl0aGlzIGlzIE5vbWludW0ncy4gVGhhbmtzIHRvIERhdmUgVMOkaHQgZm9yIHNwb3R0aW5nIHRoZQorCWJ1ZyBhbmQgYXNzaXN0aW5nIGluIHRoZSBmaXguCisKKwlGaXggdGhlIG1hbnBhZ2Ugd2hpY2ggbGllZCB0aGF0IG9ubHkgdGhlIHByaW1hcnkgYWRkcmVzcworCW9mIGFuIGludGVyZmFjZSBpcyB1c2VkIGJ5IC0taW50ZXJmYWNlLW5hbWUuCisKKwlNYWtlIC0tbG9jYWxpc2UtcXVlcmllcyBhcHBseSB0byBuYW1lcyBmcm9tIC0taW50ZXJmYWNlLW5hbWUuCisJVGhhbmtzIHRvIEtldmluIERhcmJ5c2hpcmUtQnJ5YW50IGFuZCBFcmljIEx1ZWhyc2VuCisJZm9yIHB1c2hpbmcgdGhpcy4KKworCUltcHJvdmUgY29ubmVjdGlvbiBoYW5kbGluZyB3aGVuIHRhbGtpbmcgdG8gVENQIHVwc3RyZWFtIAorCXNlcnZlcnMuIFNwZWNpZmljYWxseSwgYmUgcHJlcGFyZWQgdG8gb3BlbiBhIG5ldyBUQ1AKKwljb25uZWN0aW9uIHdoZW4gd2Ugd2FudCB0byBtYWtlIG11bHRpcGxlIHF1ZXJpZXMKKwlidXQgdGhlIHVwc3RyZWFtIHNlcnZlciBhY2NlcHRzIGZld2VyIHF1ZXJpZXMgcGVyIGNvbm5lY3Rpb24uCisKKwlJbXByb3ZlIGxvZ2dpbmcgb2YgdXBzdHJlYW0gc2VydmVycyB3aGVuIHRoZXJlIGFyZSBhIGxvdAorCW9mICJsb2NhbCBhZGRyZXNzZXMgb25seSIgZW50cmllcy4gVGhhbmtzIHRvIEhhbm51IE55bWFuIGZvcgorCXRoZSBwYXRjaC4KKworCU1ha2UgLS1ib2d1cy1wcml2IGFwcGx5IHRvIElQdjYsIGZvciB0aGUgcHJlZml4ZXMgc3BlY2lmaWVkCisJaW4gUkZDNjMwMy4gVGhhbmtzIHRvIEtldmluIERhcmJ5c2hpcmUtQnJ5YW50IGZvciB3b3JrIG9uIHRoaXMuCisKKwlBbGxvdyB1c2Ugb2YgTUFDIGFkZHJlc3NlcyB3aXRoIC0tdGZ0cC11bmlxdWUtcm9vdC4gVGhhbmtzCisJdG8gRmxvcmlzIEJvcyBmb3IgdGhlIHBhdGNoLgorCisJQWRkIC0tZGhjcC1yZXBseS1kZWxheSBvcHRpb24uIFRoYW5rcyB0byBGbG9yaXMgQm9zCisJZm9yIHRoZSBwYXRjaC4KKworCUFkZCBtdHUgc2V0dGluZyBmYWNpbGl0eSB0byAtLXJhLXBhcmFtLiBUaGFua3MgdG8gRGF2aWQKKwlGbGFtYW5kIGZvciB0aGUgcGF0Y2guCisKKwlDYXB0dXJlIFNURE9VVCBhbmQgU1RERVJSIG91dHB1dCBmcm9tIGRoY3Atc2NyaXB0IGFuZCBsb2cKKwlpdCBhcyBwYXJ0IG9mIHRoZSBkbnNtYXNxIGxvZyBzdHJlYW0uIE1ha2VzIGxpZmUgZWFzaWVyCisJZm9yIGRpYWdub3NpbmcgdW5leHBlY3RlZCBwcm9ibGVtcyBpbiBzY3JpcHRzLgorCVRoYW5rcyB0byBQZXRyIE1lbnNpayBmb3IgdGhlIHBhdGNoLgorCisJR2VuZXJhdGUgZmF0YWwgZXJyb3JzIHdoZW4gZmFpbGluZyB0byBwYXJzZSB0aGUgb3V0cHV0CisJb2YgdGhlIGRoY3Atc2NyaXB0IGluICJpbml0IiBtb2RlLiBBdm9pZHMgc3RyYW5nZSBlcnJvcnMKKwl3aGVuIHRoZSBzY3JpcHQgYWNjaWRlbnRhbGx5IGVtaXRzIGVycm9yIG1lc3NhZ2VzLgorCVRoYW5rcyB0byBQZXRyIE1lbnNpayBmb3IgdGhlIHBhdGNoLgorCisJTWFrZSAtLXJldi1zZXJ2ZXIgZm9yIGFuIFJGQzE5MTggc3VibmV0IHdvcmsgZXZlbiBpbiB0aGUKKwlwcmVzZW5jZSBvZiB0aGUgLS1ib2d1cy1wcml2IGZsYWcuIFRoYW5rcyB0bworCVZsYWRpc2xhdiBHcmlzaGVua28gZm9yIHRoZSBwYXRjaC4KKworCUV4dGVuZCAtLXJhLXBhcmFtIG10dTogZmllbGQgdG8gYWxsb3cgYW4gaW50ZXJmYWNlIG5hbWUuCisJVGhpcyBhbGxvd3MgdGhlIE1UVSBvZiBhIFdBTiBpbnRlcmZhY2UgdG8gYmUgYWR2ZXJ0aXNlZCBvbgorCXRoZSBpbnRlcm5hbCBpbnRlcmZhY2VzIG9mIGEgcm91dGVyLiBUaGFua3MgdG8KKwlWbGFkaXNsYXYgR3Jpc2hlbmtvIGZvciB0aGUgcGF0Y2guCisKKwlEbyBJQ01QLXBpbmcgY2hlY2sgZm9yIGFkZHJlc3MtaW4tdXNlIGZvciBESENQdjQgd2hlbgorCXRoZSBjbGllbnQgc3BlY2lmaWVzIGFuIGFkZHJlc3MgaW4gREhDUERJU0NPVkVSLCBhbmQgd2hlbgorCWFuIGFkZHJlc3MgaW4gY29uZmlndXJlZCBsb2NhbGx5LiBUaGFua3MgdG8gQWxpbiBOxINzdGFjCisJZm9yIHNwb3R0aW5nIHRoZSBwcm9ibGVtLgorCisJQWRkIG5ldyBESENQIHRhZyAia25vd24tb3RoZXJuZXQiIHdoaWNoIGlzIHNldCB3aGVuIG9ubHkgYQorCWRoY3AtaG9zdCBleGlzdHMgZm9yIGFub3RoZXIgc3VibmV0LiBDYW4gYmUgdXNlZCB0byBlbnN1cmUKKwl0aGF0IHByaXZpbGVnZWQgaG9zdHMgYXJlIG5vdCBnaXZlbiAiZ3Vlc3QiIGFkZHJlc3NlcyBieQorCWFjY2lkZW50LiBUaGFua3MgdG8gVG9kZCBTYW5rZXQgZm9yIHRoZSBzdWdnZXN0aW9uLgorCisJUmVtb3ZlIGhpc3RvcmljIGF1dG9tYXRpYyBpbmNsdXNpb24gb2YgSUROIHN1cHBvcnQgd2hlbgorCWJ1aWxkaW5nIGludGVybmF0aW9uYWxpc2F0aW9uIHN1cHBvcnQuIFRoaXMgZG9lc24ndAorCWZpdCBub3cgdGhlcmUgaXMgYSBjaG9pY2Ugb2YgSUROIGxpYnJhcmllcy4gQmUgc3VyZQorCXRvIGluY2x1ZGUgZWl0aGVyIC1ESEFWRV9JRE4gb3IgLURIQVZFX0xJQklETjIgZm9yCisJSUROIHN1cHBvcnQuCisKKwordmVyc2lvbiAyLjc2CisJSW5jbHVkZSAwLjAuMC4wLzggaW4gRE5TIHJlYmluZCBjaGVja3MuIFRoaXMgcmFuZ2UgCisJdHJhbnNsYXRlcyB0byBob3N0cyBvbiAgdGhlIGxvY2FsIG5ldHdvcmssIG9yLCBhdCAKKwlsZWFzdCwgMC4wLjAuMCBhY2Nlc3NlcyB0aGUgbG9jYWwgaG9zdCwgc28gY291bGQKKwliZSB0YXJnZXRzIGZvciBETlMgcmViaW5kaW5nLiBTZWUgUkZDIDU3MzUgc2VjdGlvbiAzIAorCWZvciBkZXRhaWxzLiBUaGFua3MgdG8gU3RlcGhlbiBSw7Z0dGdlciBmb3IgdGhlIGJ1ZyByZXBvcnQuCisKKwlFbmhhbmNlIC0tYWRkLXN1Ym5ldCB0byBhbGxvdyBhcmJpdHJhcnkgc3VibmV0IGFkZHJlc3Nlcy4KKwlUaGFua3MgdG8gRWQgQmFyc2xleSBmb3IgdGhlIHBhdGNoLgorCisJUmVzcGVjdCB0aGUgLS1uby1yZXNvbHYgZmxhZyBpbiBpbm90aWZ5IGNvZGUuIEZpeGVzIGJ1ZworCXdoaWNoIGNhdXNlZCBkbnNtYXNxIHRvIGZhaWwgdG8gc3RhcnQgaWYgYSByZXNvbHYtZmlsZSAKKwl3YXMgYSBkYW5nbGluZyBzeW1ib2xpYyBsaW5rLCBldmVuIG9mIC0tbm8tcmVzb2x2IHNldC4KKwlUaGFua3MgdG8gQWxleGFuZGVyIEt1cnR6IGZvciBzcG90dGluZyB0aGUgcHJvYmxlbS4KKworCUZpeCBjcmFzaCB3aGVuIGFuIEEgb3IgQUFBQSByZWNvcmQgaXMgZGVmaW5lZCBsb2NhbGx5LAorCWluIGEgaG9zdHMgZmlsZSwgYW5kIGFuIHVwc3RyZWFtIHNlcnZlciBzZW5kcyBhIHJlcGx5CisJdGhhdCB0aGUgc2FtZSBuYW1lIGlzIGVtcHR5LiBUaGFua3MgdG8gRWR3aW4gVMO2csO2ayBmb3IKKwl0aGUgcGF0Y2guCisKKwlGaXggZmFpbHVyZSB0byBjb3JyZWN0bHkgY2FsY3VsYXRlIGNhY2hlLXNpemUgd2hlbiAKKwlyZWFkaW5nIGEgaG9zdHMtZmlsZSBmYWlscy4gVGhhbmtzIHRvIEFuZHLDqSBHbMO8cGtlciAKKwlmb3IgdGhlIHBhdGNoLgorCisJRml4IHdyb25nIGFuc3dlciB0byBzaW1wbGUgbmFtZSBxdWVyeSB3aGVuIC0tZG9tYWluLW5lZWRlZAorCXNldCwgYnV0IG5vIHVwc3RyZWFtIHNlcnZlcnMgY29uZmlndXJlZC4gRG5zbWFzcSByZXR1cm5lZAorCVJFRlVTRUQsIGluIHRoaXMgY2FzZSwgd2hlbiBpdCBzaG91bGQgYmUgdGhlIHNhbWUgYXMgd2hlbgorCXVwc3RyZWFtIHNlcnZlcnMgYXJlIGNvbmZpZ3VyZWQgLSBOT0VSUk9SLiBUaGFua3MgdG8gCisJQWxsYWluIExlZ2FjeSBmb3Igc3BvdHRpbmcgdGhlIHByb2JsZW0uCisKKwlSZXR1cm4gUkVGVVNFRCB3aGVuIHJ1bm5pbmcgb3V0IG9mIGZvcndhcmRpbmcgdGFibGUgc2xvdHMsCisJbm90IFNFUlZGQUlMLgorCisJQWRkIC0tbWF4LXBvcnQgY29uZmlndXJhdGlvbi4gVGhhbmtzIHRvIEhhbnMgRGVkZWNrZXIgZm9yCisJdGhlIHBhdGNoLgorCisJQWRkIC0tc2NyaXB0LWFycCBhbmQgdHdvIG5ldyBmdW5jdGlvbnMgZm9yIHRoZSBkaGNwLXNjcmlwdC4KKwlUaGVzZSBhcmUgImFycCIgYW5kICJhcnAtb2xkIiB3aGljaCBhbm5vdW5jZSB0aGUgYXJyaXZhbCBhbmQKKwlyZW1vdmFsIG9mIGVudHJpZXMgaW4gdGhlIEFSUCBvciBuZWlnaGJvdXIgdGFibGVzLgorCisJRXh0ZW5kIC0tYWRkLW1hYyB0byBhbGxvdyBhIG5ldyBlbmNvZGluZyBvZiB0aGUgTUFDIGFkZHJlc3MgCisJYXMgYmFzZTY0LCBieSBjb25maWd1cmluZyAtLWFkZC1tYWM9YmFzZTY0CisKKwlBZGQgLS1hZGQtY3BlLWlkIG9wdGlvbi4KKworCURvbid0IGNyYXNoIHdpdGggZGl2aWRlLWJ5LXplcm8gaWYgYW4gSVB2NiBkaGNwLXJhbmdlCisJaXMgZGVjbGFyZWQgYXMgYSB3aG9sZSAvNjQuCisJKGllIHh4OjowIHRvIHh4OjpmZmZmOmZmZmY6ZmZmZjpmZmZmKSAKKwlUaGFua3MgdG8gTGF1cmVudCBCZW5kZWwgZm9yIHNwb3R0aW5nIHRoaXMgcHJvYmxlbS4KKworCUFkZCBzdXBwb3J0IGZvciBhIFRUTCBwYXJhbWV0ZXIgaW4gLS1ob3N0LXJlY29yZCBhbmQKKwktLWNuYW1lLgorCisJQWRkIC0tZGhjcC10dGwgb3B0aW9uLgorCisJQWRkIC0tdGZ0cC1tdHUgb3B0aW9uLiBUaGFua3MgdG8gUGF0cmljayBNY0xlYW4gZm9yIHRoZSAKKwlpbml0aWFsIHBhdGNoLgorCisJQ2hlY2sgcmV0dXJuLWNvZGUgb2YgaW5ldF9wdG9uKCkgd2hlbiBwYXJzaW5nIGRoY3Atb3B0aW9uLgorCUJhZCBhZGRyZXNzZXMgY291bGQgZmFpbCB0byBnZW5lcmF0ZSBlcnJvcnMgYW5kIHJlc3VsdCBpbgorCWdhcmJhZ2UgZGhjcC1vcHRpb25zIGJlaW5nIHNlbnQuIFRoYW5rcyB0byBNYXJjIEJyYW5jaGF1ZCAKKwlmb3Igc3BvdHRpbmcgdGhpcy4KKworCUZpeCB3cm9uZyB2YWx1ZSBmb3IgRUROUyBVRFAgcGFja2V0IHNpemUgd2hlbiB1c2luZyAKKwktLXNlcnZlcnMtZmlsZSB0byBkZWZpbmUgdXBzdHJlYW0gRE5TIHNlcnZlcnMuIFRoYW5rcyB0bworCVNjb3R0IEJvbmFyIGZvciB0aGUgYnVnIHJlcG9ydC4KKworCU1vdmUgdGhlIGRoY3BfcmVsZWFzZSBhbmQgZGhjcF9sZWFzZV90aW1lIHRvb2xzIGZyb20gCisJY29udHJpYi93cnQgdG8gY29udHJpYi9sZWFzZS10b29scy4KKworCUFkZCBkaGNwX3JlbGVhc2U2IHRvIGNvbnRyaWIvbGVhc2UtdG9vbHMuIE1hbnkgdGhhbmtzIAorCXRvIFNlcmdleSBOZWNoYWV2IGZvciB0aGlzIGNvZGUuCisKKwlUbyBhdm9pZCBmaWxsaW5nIGxvZ3MgaW4gY29uZmlndXJhdGlvbnMgd2hpY2ggZGVmaW5lCisJbWFueSB1cHN0cmVhbSBuYW1lc2VydmVycywgZG9uJ3QgbG9nIG1vcmUgdGhhdCAzMCBzZXJ2ZXJzLgorCVRoZSBudW1iZXIgdG8gYmUgbG9nZ2VkIGNhbiBiZSBjaGFuZ2VkIGFzIFNFUlZFUlNfTE9HR0VECisJaW4gc3JjL2NvbmZpZy5oLgorCisJU3dhcCB0aGUgdmFsdWVzIGlmIEJDX0VGSSBhbmQgeDg2LTY0X0VGSSBpbiAtLXB4ZS1zZXJ2aWNlLiAKKwlUaGVzZSB3ZXJlIHByZXZpb3VzbHkgd3JvbmcgZHVlIHRvIGFuIGVycm9yIGluIFJGQyA0NTc4LgorCUlmIHlvdSdyZSB1c2luZyBCQ19FRkkgdG8gYm9vdCA2NC1iaXQgRUZJIG1hY2hpbmVzLCB5b3UKKwl3aWxsIG5lZWQgdG8gdXBkYXRlIHlvdXIgY29uZmlnLgorCisJQWRkIEFSTTMyX0VGSSBhbmQgQVJNNjRfRUZJIGFzIHZhbGlkIGFyY2hpdGVjdHVyZXMgaW4KKwktLXB4ZS1zZXJ2aWNlLgorCisJRml4IFBYRSBib290aW5nIGZvciBVRUZJIGFyY2hpdGVjdHVyZXMuIE1vZGlmeSBQWEUgYm9vdAorCXNlcXVlbmNlIGluIHRoaXMgY2FzZSB0byBmb3JjZSB0aGUgY2xpZW50IHRvIHRhbGsgdG8gZG5zbWFzcQorCW92ZXIgcG9ydCA0MDExLiBUaGlzIG1ha2VzIFBYRSBhbmQgZXNwZWNpYWxseSBwcm94eS1ESENQIFBYRQorCXdvcmsgd2l0aCB0aGVzZSBhcmNoaXRlY3R1cmVzLgorCisJV29ya2Fyb3VuZCBwcm9ibGVtcyB3aXRoIFVFRkkgUFhFIGNsaWVudHMuIFRoZXJlIGV4aXN0CisJaW4gdGhlIHdpbGQgUFhFIGNsaWVudHMgd2hpY2ggaGF2ZSBwcm9ibGVtcyB3aXRoIFBYRQorCWJvb3QgbWVudXMuIFRvIHdvcmsgYXJvdW5kIHRoaXMsIHdoZW4gdGhlcmUncyBhIHNpbmdsZQorCS0tcHhlLXNlcnZpY2Ugd2hpY2ggYXBwbGllcyB0byBjbGllbnQsIHRoZW4gdGhhdCB0YXJnZXQKKwl3aWxsIGJlIGJvb3RlZCBkaXJlY3RseSwgcmF0aGVyIHRoZW4gc2VuZGluZyBhCisJc2luZ2xlLWl0ZW0gYm9vdCBtZW51LgorCisJTWFueSB0aGFua3MgdG8gSmFyZWsgUG9sb2ssIE1pY2hhZWwgS3Vyb24gYW5kIERyZWFtY2F0NCAKKwlmb3IgdGhlaXIgd29yayBvbiB0aGUgbG9uZy1zdGFuZGluZyBVRUZJIFBYRSBwcm9ibGVtLgorCisJU3VidGxlIGNoYW5nZSBpbiB0aGUgc2VtYW50aWNzIG9mICJiYXNlbmFtZSIgaW4KKwktLXB4ZS1zZXJ2aWNlLiBUaGUgaGlzdG9yaWNhbCBiZWhhdmlvdXIgaGFzIGFsd2F5cyBiZWVuCisJdGhhdCB0aGUgYWN0dWFsIGZpbGVuYW1lIGRvd25sb2FkZWQgZnJvbSB0aGUgVEZUUCBzZXJ2ZXIKKwlpcyA8YmFzZW5hbWU+LjxsYXllcj4gd2hlcmUgPGxheWVyPiBpcyBhbiBpbnRlZ2VyIHdoaWNoCisJY29ycmVzcG9uZHMgdG8gdGhlIGxheWVyIHBhcmFtZXRlciBzdXBwbGllZCBieSB0aGUgY2xpZW50LgorCUl0J3Mgbm90IGNsZWFyIHdoYXQgdGhlIGZ1bmN0aW9uIG9mIHRoZSAibGF5ZXIiIAorCWFjdHVhbGx5IGlzIGluIHRoZSBQWEUgcHJvdG9jb2wsIGFuZCBpbiBwcmFjdGlzZSBsYXllciAKKwlpcyBhbHdheXMgemVybywgc28gdGhlIGZpbGVuYW1lIGlzIDxiYXNlbmFtZT4uMAorCVRoZSBuZXcgYmVoYXZpb3VyIGlzIHRoZSBzYW1lIGFzIHRoZSBvbGQsIGV4Y2VwdCB3aGVuCisJPGJhc2VuYW1lPiBpbmNsdWRlcyBhIGZpbGUgc3VmZml4LCBpbiB3aGljaCBjYXNlCisJdGhlIGxheWVyIHN1ZmZpeCBpcyBubyBsb25nZXIgYWRkZWQuIFRoaXMgYWxsb3dzCisJc2Vuc2libGUgc3VmZmljZXMgdG8gYmUgdXNlZCwgcmF0aGVyIHRoZW4gdGhlCisJbWVhbmluZ2xlc3MgIi4wIi4gT25seSBpbiB0aGUgdW5saWtlbHkgZXZlbnQgdGhhdCB5b3UKKwloYXZlIGEgY29uZmlnIHdpdGggYSBiYXNlbmFtZSB3aGljaCBhbHJlYWR5IGhhcyBhCisJc3VmZml4LCBpcyB0aGlzIGFuIGluY29tcGF0aWJsZSBjaGFuZ2UsIHNpbmNlIHRoZSBmaWxlCisJZG93bmxvYWRlZCB3aWxsIGNoYW5nZSBmcm9tIG5hbWUuc3VmZml4LjAgdG8ganVzdCAKKwluYW1lLnN1ZmZpeAorCisKK3ZlcnNpb24gMi43NQorCUZpeCByZXZlcnNpb24gb24gMi43NCB3aGljaCBjYXVzZWQgMTAwJSBDUFUgdXNlIHdoZW4gYSAKKwlkaGNwLXNjcmlwdCBpcyBjb25maWd1cmVkLiBUaGFua3MgdG8gQWRyaWFuIERhdmV5IGZvcgorCXJlcG9ydGluZyB0aGUgYnVnIGFuZCB0ZXN0aW5nIHRoZSBmaXguCisKKwordmVyc2lvbiAyLjc0CisJRml4IHJldmVyc2lvbiBpbiAyLjczIHdoZXJlIC0tY29uZi1maWxlIHdvdWxkIGF0dGVtcHQgdG8KKwlyZWFkIHRoZSBkZWZhdWx0IGZpbGUsIHJhdGhlciB0aGFuIG5vIGZpbGUuCisKKwlGaXggaW5vdGlmeSBjb2RlIHRvIGhhbmRsZSBkYW5nbGluZyBzeW1saW5rcyBiZXR0ZXIgYW5kCisJbm90IFNFR1YgaW4gc29tZSBjaXJjdW1zdGFuY2VzLgorCisJRE5TU0VDIGZpeC4gSW4gdGhlIGNhc2Ugb2YgYSBzaWduZWQgQ05BTUUgZ2VuZXJhdGVkIGJ5IGEKKwl3aWxkY2FyZCB3aGljaCBwb2ludGVkIHRvIGFuIHVuc2lnbmVkIGRvbWFpbiwgdGhlIHdyb25nCisJc3RhdHVzIHdvdWxkIGJlIGxvZ2dlZCwgYW5kIHNvbWUgbmVjZXNzYXJ5IGNoZWNrcyBvbWl0dGVkLgorCisKK3ZlcnNpb24gMi43MworCUZpeCBjcmFzaCBhdCBzdGFydHVwIHdoZW4gYW4gZW1wdHkgc3VmZml4IGlzIHN1cHBsaWVkIHRvCisJLS1jb25mLWRpciwgYWxzbyB0cml2aWFsIG1lbW9yeSBsZWFrLiBUaGFua3MgdG8gCisJVG9tYXMgSG96emEgZm9yIHNwb3R0aW5nIHRoaXMuCisKKwlSZW1vdmUgZmxvb3Igb2YgNDA5NiBvbiBhZHZlcnRpc2VkIEVETlMwIHBhY2tldCBzaXplIHdoZW4gCisJRE5TU0VDIGluIHVzZSwgdGhlIG9yaWdpbmFsIHJhdGlvbmFsZSBmb3IgdGhpcyBoYXMgbG9uZyBnb25lLgorCVRoYW5rcyB0byBBbmRlcnMgS2FzZW9yZyBmb3Igc3BvdHRpbmcgdGhpcy4KKworCVVzZSBpbm90aWZ5IGZvciBjaGVja2luZyBvbiB1cGRhdGVzIHRvIC9ldGMvcmVzb2x2LmNvbmYgYW5kCisJZnJpZW5kcyB1bmRlciBMaW51eC4gVGhpcyBmaXhlcyByYWNlIGNvbmRpdGlvbnMgd2hlbiB0aGUgZmlsZXMgYXJlIAorCXVwZGF0ZWQgcmFwaWRseSBhbmQgc2F2ZXMgQ1BVIGJ5IG5veSBwb2xsaW5nLiBUbyBidWlsZAorCWEgYmluYXJ5IHRoYXQgcnVucyBvbiBvbGQgTGludXgga2VybmVscyB3aXRob3V0IGlub3RpZnksCisJdXNlIG1ha2UgQ09QVFM9LUROT19JTk9USUZZCisKKwlGaXggYnJlYWthZ2Ugb2YgLS1kb21haW49PGRvbWFpbj4sPHN1Ym5ldD4sbG9jYWwgLSBvbmx5IHJldmVyc2UKKwlxdWVyaWVzIHdlcmUgaW50ZXJjZXB0ZWQuIFRIaXMgYXBwZWFycyB0byBoYXZlIGJlZW4gYnJva2VuIAorCXNpbmNlIDIuNjkuIFRoYW5rcyB0byBKb3NoIFN0b25lIGZvciBmaW5kaW5nIHRoZSBidWcuCisKKwlFbGltaW5hdGUgSVB2NiBwcml2YWN5IGFkZHJlc3NlcyBhbmQgZGVwcmVjYXRlZCBhZGRyZXNzZXMgZnJvbQorCXRoZSBhbnN3ZXJzIGdpdmVuIGJ5IC0taW50ZXJmYWNlLW5hbWUuIE5vdGUgdGhhdCByZXZlcnNlIHF1ZXJpZXMKKwkoaWUgbG9va2luZyBmb3IgbmFtZXMsIGdpdmVuIGFkZHJlc3NlcykgYXJlIG5vdCBhZmZlY3RlZC4gCisJVGhhbmtzIHRvIE1pY2hhZWwgR29yYmFjaCBmb3IgdGhlIHN1Z2dlc3Rpb24uCisKKwlGaXggY3Jhc2ggaW4gRE5TU0VDIGNvZGUgd2l0aCBsb25nIFJScy4gVGhhbmtzIHRvIE1hcmNvIERhdmlkcworCWZvciB0aGUgYnVnIHJlcG9ydC4KKworCUFkZCAtLWlnbm9yZS1hZGRyZXNzIG9wdGlvbi4gSWdub3JlIHJlcGxpZXMgdG8gQS1yZWNvcmQgCisJcXVlcmllcyB3aGljaCBpbmNsdWRlIHRoZSBzcGVjaWZpZWQgYWRkcmVzcy4gTm8gZXJyb3IgaXMKKwlnZW5lcmF0ZWQsIGRuc21hc3Egc2ltcGx5IGNvbnRpbnVlcyB0byBsaXN0ZW4gZm9yIGFub3RoZXIgCisJcmVwbHkuIFRoaXMgaXMgdXNlZnVsIHRvIGRlZmVhdCBibG9ja2luZyBzdHJhdGVnaWVzIHdoaWNoCisJcmVseSBvbiBxdWlja2x5IHN1cHBseWluZyBhIGZvcmdlZCBhbnN3ZXIgdG8gYSBETlMgCisJcmVxdWVzdCBmb3IgY2VydGFpbiBkb21haW5zLCBiZWZvcmUgdGhlIGNvcnJlY3QgYW5zd2VyIGNhbgorCWFycml2ZS4gVGhhbmtzIHRvIEdsZW4gSHVhbmcgZm9yIHRoZSBwYXRjaC4KKworCVJldmlzaXQgdGhlIHBhcnQgb2YgRE5TU0VDIHZhbGlkYXRpb24gd2hpY2ggZGV0ZXJtaW5lcyBpZiBhbiAKKwl1bnNpZ25lZCBhbnN3ZXIgaXMgbGVnaXQsIG9yIGlzIGluIHNvbWUgcGFydCBvZiB0aGUgRE5TIAorCXRyZWUgd2hpY2ggc2hvdWxkIGJlIHNpZ25lZC4gRG5zbWFzcSBub3cgd29ya3MgZnJvbSB0aGUgCisJRE5TIHJvb3QgZG93bndhcmQgbG9va2luZyBmb3IgdGhlIGxpbWl0IG9mIHNpZ25lZCAKKwlkZWxlZ2F0aW9ucywgcmF0aGVyIHRoYW4gd29ya2luZyBib3R0b20gdXAuIFRoaXMgaXMgCisJYm90aCBtb3JlIGNvcnJlY3QsIGFuZCBsZXNzIGxpa2VseSB0byB0cmlwIG92ZXIgYnJva2VuIAorCW5hbWVzZXJ2ZXJzIGluIHRoZSB1bnNpZ25lZCBwYXJ0cyBvZiB0aGUgRE5TIHRyZWUgCisJd2hpY2ggZG9uJ3QgcmVzcG9uZCB3ZWxsIHRvIEROU1NFQyBxdWVyaWVzLgorCisJQWRkIC0tbG9nLXF1ZXJpZXM9ZXh0cmEgb3B0aW9uLCB3aGljaCBtYWtlcyBsb2dzIGVhc2llcgorCXRvIHNlYXJjaCBhdXRvbWF0aWNhbGx5LgorCisJQWRkIC0tbWluLWNhY2hlLXR0bCBvcHRpb24uIEkndmUgcmVzaXN0ZWQgdGhpcyBmb3IgYSBsb25nIAorCXRpbWUsIG9uIHRoZSBncm91bmRzIHRoYXQgZGlzYmVsaWV2aW5nIFRUTHMgaXMgbmV2ZXIgYSAKKwlnb29kIGlkZWEsIGJ1dCBJJ3ZlIGJlZW4gcGVyc3VhZGVkIHRoYXQgdGhlcmUgYXJlIAorCXNvbWV0aW1lcyByZWFzb25zIHRvIGRvIGl0LiAoU3RlcCBmb3J3YXJkLCBHRlcpLgorCVRvIGF2b2lkIG1pc3VzZSwgdGhlcmUncyBhIGhhcmQgbGltaXQgb24gdGhlIFRUTCAKKwlmbG9vciBvZiBvbmUgaG91ci4gVGhhbmtzIHRvIFJpblNhdHN1a2kgZm9yIHRoZSBwYXRjaC4KKworCUNvcGUgd2l0aCBtdWx0aXBsZSBpbnRlcmZhY2VzIHdpdGggdGhlIHNhbWUgbGluay1sb2NhbCAKKwlhZGRyZXNzLiAoSVB2NiBhZGRyZXNzZXMgYXJlIHNjb3BlZCwgc28gdGhpcyBpcyBhbGxvd2VkLikKKwlUaGFua3MgdG8gQ29yeSBCZW5maWVsZCBmb3IgaGVscCB3aXRoIHRoaXMuCisKKwlBZGQgLS1kaGNwLWhvc3RzZGlyLiBUaGlzIGFsbG93cyBhZGRpdGlvbiBvZiBuZXcgaG9zdAorCWNvbmZpZ3VyYXRpb25zIHRvIGEgcnVubmluZyBkbnNtYXNxIGluc3RhbmNlIG11Y2ggbW9yZSAKKwljaGVhcGx5IHRoYW4gaGF2aW5nIGRuc21hc3EgcmUtcmVhZCBhbGwgaXRzIGV4aXN0aW5nCisJY29uZmlndXJhdGlvbiBlYWNoIHRpbWUuIAorCisJRG9uJ3QgcmVwbHkgdG8gREhDUHY2IFNPTElDSVQgbWVzc2FnZXMgaWYgd2UncmUgbm90IAorCWNvbmZpZ3VyZWQgdG8gZG8gc3RhdGVmdWwgREhDUHY2LiBUaGFua3MgdG8gV2luIEtpbmcgV2FuIAorCWZvciB0aGUgcGF0Y2guCisKKwlGaXggYnJva2VuIEROU1NFQyB2YWxpZGF0aW9uIG9mIEVDRFNBIHNpZ25hdHVyZXMuCisKKwlBZGQgLS1kbnNzZWMtdGltZXN0YW1wIG9wdGlvbiwgd2hpY2ggcHJvdmlkZXMgYW4gYXV0b21hdGljCisJd2F5IHRvIGRldGVjdCB3aGVuIHRoZSBzeXN0ZW0gdGltZSBiZWNvbWVzIHZhbGlkIGFmdGVyIAorCWJvb3Qgb24gc3lzdGVtcyB3aXRob3V0IGFuIFJUQywgd2hpbHN0IGFsbG93aW5nIEROUyAKKwlxdWVyaWVzIGJlZm9yZSB0aGUgY2xvY2sgaXMgdmFsaWQgc28gdGhhdCBOVFAgY2FuIHJ1bi4gCisJVGhhbmtzIHRvIEtldmluIERhcmJ5c2hpcmUtQnJ5YW50IGZvciBkZXZlbG9waW5nIHRoaXMgaWRlYS4KKworCUFkZCAtLXRmdHAtbm8tZmFpbCBvcHRpb24uIFRoYW5rcyB0byBTdGVmYW4gVG9tYW5layBmb3IKKwl0aGUgcGF0Y2guCisKKwlGaXggY3Jhc2ggY2F1c2VkIGJ5IGxvb2tpbmcgdXAgc2VydmVycy5iaW5kLCBDSEFPUyB0ZXh0IAorCXJlY29yZCwgd2hlbiBtb3JlIHRoYW4gYWJvdXQgZml2ZSAtLXNlcnZlcnM9IGxpbmVzIGFyZSAKKwlpbiB0aGUgZG5zbWFzcSBjb25maWcuIFRoaXMgY2F1c2VzIG1lbW9yeSBjb3JydXB0aW9uIAorCXdoaWNoIGNhdXNlcyBhIGNyYXNoIGxhdGVyLiBUaGFua3MgdG8gTWF0dCBDb2RkaW5ndG9uIGZvciAKKwlzdGVybGluZyB3b3JrIGNoYXNpbmcgdGhpcyBkb3duLgorCisJRml4IGNyYXNoIG9uIHJlY2VpcHQgb2YgY2VydGFpbiBtYWxmb3JtZWQgRE5TIHJlcXVlc3RzLgorCVRoYW5rcyB0byBOaWNrIFNhbXBhbmlzIGZvciBzcG90dGluZyB0aGUgcHJvYmxlbS4KKwlOb3RlIHRoYXQgdGhpcyBpcyBjb3VsZCBhbGxvdyB0aGUgZG5zbWFzcSBwcm9jZXNzJ3MKKwltZW1vcnkgdG8gYmUgcmVhZCBieSBhbiBhdHRhY2tlciB1bmRlciBjZXJ0YWluCisJY2lyY3Vtc3RhbmNlcywgc28gaXQgaGFzIGEgQ1ZFLCBDVkUtMjAxNS0zMjk0IAorCisJRml4IGNyYXNoIGluIGF1dGhvcml0YXRpdmUgRE5TIGNvZGUsIGlmIGEgLmFycGEgem9uZSAKKwlpcyBkZWNsYXJlZCBhcyBhdXRob3JpdGF0aXZlLCBhbmQgdGhlbiBhIFBUUiBxdWVyeSB3aGljaAorCWlzIG5vdCB0byBiZSB0cmVhdGVkIGFzIGF1dGhvcml0YXRpdmUgYXJyaXZlZC4gTm9ybWFsbHksIAorCWRpcmVjdGx5IGRlY2xhcmluZyAuYXJwYSB6b25lIGFzIGF1dGhvcml0YXRpdmUgaXMgbm90IAorCWRvbmUsIHNvIHRoaXMgY3Jhc2ggd291bGRuJ3QgYmUgc2Vlbi4gSW5zdGVhZCB0aGUgCisJcmVsZXZhbnQgLmFycGEgem9uZSBzaG91bGQgYmUgc3BlY2lmaWVkIGFzIGEgc3VibmV0CisJaW4gdGhlIGF1dGgtem9uZSBkZWNsYXJhdGlvbi4gVGhhbmtzIHRvIEpvaG5ueSBTLiBMZWUKKwlmb3IgdGhlIGJ1Z3JlcG9ydCBhbmQgaW5pdGlhbCBwYXRjaC4KKworCUZpeCBhdXRob3JpdGF0aXZlIEROUyBjb2RlIHRvIGNvcnJlY3RseSByZXBseSB0byBOUyAKKwlhbmQgU09BIHF1ZXJpZXMgZm9yIC5hcnBhIHpvbmVzIGZvciB3aGljaCB3ZSBhcmUgCisJZGVjbGFyZWQgYXV0aG9yaXRhdGl2ZSBieSBtZWFucyBvZiBhIHN1Ym5ldCBpbiBhdXRoLXpvbmUuCisJUHJldmlvdXNseSB3ZSBwcm92aWRlZCBjb3JyZWN0IGFuc3dlcnMgdG8gUFRSIHF1ZXJpZXMKKwlpbiBzdWNoIHpvbmVzIChpbmNsdWRpbmcgTlMgYW5kIFNPQSkgYnV0IG5vdCBkaXJlY3QKKwlOUyBhbmQgU09BIHF1ZXJpZXMuIFRoYW5rcyB0byBKb2hubnkgUy4gTGVlIGZvciAKKwlwb2ludGluZyBvdXQgdGhlIHByb2JsZW0uCisKKwlGaXggbG9nZ2luZyBvZiBESENQUkVQTFkgd2hpY2ggc2hvdWxkIGJlIHN1cHByZXNzZWQgCisJYnkgcXVpZXQtZGhjcDYuIFRoYW5rcyB0byBKLiBQYWJsbyBBYm9uaWEgZm9yIAorCXNwb3R0aW5nIHRoZSBwcm9ibGVtLgorCisJVHJ5IGFuZCBoYW5kbGUgbmV0IGNvbm5lY3Rpb25zIHdpdGggYnJva2VuIGZyYWdtZW50YXRpb24gCisJdGhhdCBsb3NlIGxhcmdlIFVEUCBwYWNrZXRzLiBJZiBhIHNlcnZlciB0aW1lcyBvdXQsIAorCXJlZHVjZSB0aGUgbWF4aW11bSBVRFAgcGFja2V0IHNpemUgZmllbGQgaW4gdGhlIEVETlMwCisJaGVhZGVyIHRvIDEyODAgYnl0ZXMuIElmIGl0IHRoZW4gYW5zd2VycywgbWFrZSB0aGF0CisJY2hhbmdlIHBlcm1hbmVudC4KKworCUNoZWNrIElQdjQtbWFwcGVkIElQdjYgYWRkcmVzc2VzIHdoZW4gLS1zdG9wLXJlYmluZAorCWlzIGFjdGl2ZS4gVGhhbmtzIHRvIEpvcmRhbiBNaWxuZSBmb3Igc3BvdHRpbmcgdGhpcy4KKworCUFsbG93IERIQ1B2NCBvcHRpb25zIFQxIGFuZCBUMiB0byBiZSBzZXQgdXNpbmcgLS1kaGNwLW9wdGlvbi4KKwlUaGFua3MgdG8gS2V2aW4gQmVudG9uIGZvciBwYXRjaGVzIGFuZCB3b3JrIG9uIHRoaXMuCisKKwlGaXggY29kZSBmb3IgREhDUENPTkZJUk0gREhDUHY2IG1lc3NhZ2VzIHRvIGNvbmZpcm0gYWRkcmVzc2VzCisJaW4gdGhlIGNvcnJlY3Qgc3VibmV0LCBldmVuIG9mIG5vdCBpbiBkeW5hbWljIGFkZHJlc3MgCisJYWxsb2NhdGlvbiByYW5nZS4gVGhhbmtzIHRvIFN0ZXZlIEhpcnNjaCBmb3Igc3BvdHRpbmcKKwl0aGUgcHJvYmxlbS4KKworCUFkZCBBZGREaGNwTGVhc2UgYW5kIERlbGV0ZURoY3BMZWFzZSBEQnVzIG1ldGhvZHMuIFRoYW5rcworCXRvIE5pY29sYXMgQ2F2YWxsYXJpIGZvciB0aGUgcGF0Y2guCisKKwlBbGxvdyBjb25maWd1cmF0aW9uIG9mIHJvdXRlciBhZHZlcnRpc2VtZW50cyB3aXRob3V0IHRoZSAKKwkib24tbGluayIgYml0IHNldC4gVGhhbmtzIHRvIE5laWwgSmVycmFtIGZvciB0aGUgcGF0Y2guCisKKwlFeHRlbmQgLS1icmlkZ2UtaW50ZXJmYWNlIHRvIERIQ1B2NiBhbmQgcm91dGVyIAorCWFkdmVydGlzZW1lbnRzLiBUaGFua3MgdG8gTmVpbCBKZXJyYW0gZm9yIHRoZSBwYXRjaC4KKworCit2ZXJzaW9uIDIuNzIKKwlBZGQgcmEtYWR2cm91dGVyIG1vZGUsIGZvciBSRkMtMzc3NSBtb2JpbGUgSVB2NiBzdXBwb3J0LgorCisJQWRkIHN1cHBvcnQgZm9yICJpcHNldHMiIGluICpCU0QsIHVzaW5nIHBmLiBUaGFua3MgdG8gCisJU3ZlbiBGYWxlbXBpbiBmb3IgdGhlIHBhdGNoLgorCisJRml4IHJhY2UgY29uZGl0aW9uIHdoaWNoIGNvdWxkIGxvY2sgdXAgZG5zbWFzcSB3aGVuIGFuIAorCWludGVyZmFjZSBnb2VzIGRvd24gYW5kIHVwIHJhcGlkbHkuIFRoYW5rcyB0byBDb25yYWQgCisJS29zdGVja2kgZm9yIGhlbHBpbmcgdG8gY2hhc2UgdGhpcyBkb3duLgorCisJQWRkIERCdXMgbWV0aG9kcyBTZXRGaWx0ZXJXaW4yS09wdGlvbiBhbmQgU2V0Qm9ndXNQcml2T3B0aW9uCisJVGhhbmtzIHRvIHRoZSBTbW9vdGh3YWxsIHByb2plY3QgZm9yIHRoZSBwYXRjaC4KKworCUZpeCBmYWlsdXJlIHRvIGJ1aWxkIGFnYWluc3QgTmV0dGxlLTMuMC4gVGhhbmtzIHRvIFN0ZXZlbiAKKwlCYXJ0aCBmb3Igc3BvdHRpbmcgdGhpcyBhbmQgZmluZGluZyB0aGUgZml4LiAKKworCVdoZW4gYXNzaWduaW5nIGV4aXN0aW5nIERIQ1AgbGVhc2VzIHRvIGludGVyZmFjZXMgYnkgY29tcGFyaW5nIAorCW5ldHdvcmtzLCBoYW5kbGUgdGhlIGNhc2UgdGhhdCB0d28gb3IgbW9yZSBpbnRlcmZhY2VzIGhhdmUgdGhlCisJc2FtZSBuZXR3b3JrIHBhcnQsIGJ1dCBkaWZmZXJlbnQgcHJlZml4IGxlbmd0aHMgKGZhdm91ciB0aGUKKwlsb25nZXIgcHJlZml4IGxlbmd0aC4pIFRoYW5rcyB0byBMdW5nLVBpbiBDaGFuZyBmb3IgdGhlIAorCXBhdGNoLgorCisJQWRkIGEgbW9kZSB3aGljaCBkZXRlY3RzIGFuZCByZW1vdmVzIEROUyBmb3J3YXJkaW5nIGxvb3BzLCBpZSAKKwlhIHF1ZXJ5IHNlbnQgdG8gYW4gdXBzdHJlYW0gc2VydmVyIHJldHVybnMgYXMgYSBuZXcgcXVlcnkgdG8gCisJZG5zbWFzcSwgYW5kIHdvdWxkIHRoZXJlZm9yZSBiZSBmb3J3YXJkZWQgYWdhaW4sIHJlc3VsdGluZyBpbiAKKwlhIHF1ZXJ5IHdoaWNoIGxvb3BzIG1hbnkgdGltZXMgYmVmb3JlIGJlaW5nIGRyb3BwZWQuIFVwc3RyZWFtCisJc2VydmVycyB3aGljaCBsb29wIGJhY2sgYXJlIGRpc2FibGVkIGFuZCB0aGlzIGV2ZW50IGlzIGxvZ2dlZC4KKwlUaGFua3MgdG8gU21vb3Rod2FsbCBmb3IgdGhlaXIgc3BvbnNvcnNoaXAgb2YgdGhpcyBmZWF0dXJlLgorCisJRXh0ZW5kIC0tY29uZi1kaXIgdG8gYWxsb3cgZmlsdGVyaW5nIG9mIGZpbGVzLiBTbworCS0tY29uZi1kaXI9L2V0Yy9kbnNtYXNxLmQsXCouY29uZgorCXdpbGwgbG9hZCBhbGwgdGhlIGZpbGVzIGluIC9ldGMvZG5zbWFzcS5kIHdoaWNoIGVuZCBpbiAuY29uZgorCisJRml4IGJ1ZyB3aGVuIHJlc3VsdGVkIGluIE5YRE9NQUlOIGFuc3dlcnMgaW5zdGVhZCBvZiBOT0RBVEEgaW4KKwlzb21lIGNpcmN1bXN0YW5jZXMuCisKKwlGaXggYnVnIHdoaWNoIGNhdXNlZCBkbnNtYXNxIHRvIGJlY29tZSB1bnJlc3BvbnNpdmUgaWYgaXQgCisJZmFpbGVkIHRvIHNlbmQgcGFja2V0cyBkdWUgdG8gYSBuZXR3b3JrIGludGVyZmFjZSBkaXNhcHBlYXJpbmcuCisJVGhhbmtzIHRvIE5pZWxzIFBlZW4gZm9yIHNwb3R0aW5nIHRoaXMuCisKKwlGaXggcHJvYmxlbSB3aXRoIC0tbG9jYWwtc2VydmljZSBvcHRpb24gb24gYmlnLWVuZGlhbiBwbGF0Zm9ybXMKKwlUaGFua3MgdG8gUmljaGFyZCBHZW5vdWQgZm9yIHRoZSBwYXRjaC4KKworCit2ZXJzaW9uIDIuNzEKKwlTdWJ0bGUgY2hhbmdlIHRvIGVycm9yIGhhbmRsaW5nIHRvIGhlbHAgRE5TU0VDIHZhbGlkYXRpb24gCisJd2hlbiBzZXJ2ZXJzIGZhaWwgdG8gcHJvdmlkZSBOT0RBVEEgYW5zd2VycyBmb3IgCisJbm9uLWV4aXN0ZW50IERTIHJlY29yZHMuCisKKwlUd2VhayBjb2RlIHdoaWNoIHJlbW92ZXMgRE5TU0VDIHJlY29yZHMgZnJvbSBhbnN3ZXJzIHdoZW4KKwlub3QgcmVxdWlyZWQuIEZpeGVzIGJyb2tlbiBhbnN3ZXJzIHdoZW4gYWRkaXRpb25hbCBzZWN0aW9uCisJaGFzIHJlYWwgcmVjb3JkcyBpbiBpdC4gVGhhbmtzIHRvIE1hcmNvIERhdmlkcyBmb3IgdGhlIGJ1ZyAKKwlyZXBvcnQuCisKKwlGaXggRE5TU0VDIHZhbGlkYXRpb24gb2YgQU5ZIHF1ZXJpZXMuIFRoYW5rcyB0byBNYXJjbyBEYXZpZHMKKwlmb3Igc3BvdHRpbmcgdGhhdCB0b28uCisKKwlGaXggdG90YWwgRE5TIGZhaWx1cmUgYW5kIDEwMCUgQ1BVIHVzZSBpZiBjYWNoZXNpemUgc2V0IHRvIHplcm8sCisJcmVncmVzc2lvbiBpbnRyb2R1Y2VkIGluIDIuNjkuIFRoYW5rcyB0byBKYW1lcyBIdW50IGFuZAorCXRoZSBVYnVudHUgY3Jvd2QgZm9yIGFzc2lzdGFuY2UgaW4gZml4aW5nIHRoaXMuCisKKwordmVyc2lvbiAyLjcwCisJRml4IGNyYXNoLCBpbnRyb2R1Y2VkIGluIDIuNjksIG9uIFRDUCByZXF1ZXN0IHdoZW4gZG5zbWFzcQorCWNvbXBpbGVkIHdpdGggRE5TU0VDIHN1cHBvcnQsIGJ1dCBydW5uaW5nIHdpdGhvdXQgRE5TU0VDCisJZW5hYmxlZC4gVGhhbmtzIHRvIE1hbmlzaCBTaW5nIGZvciBzcG90dGluZyB0aGF0IG9uZS4KKworCUZpeCByZWdyZXNzaW9uIHdoaWNoIGJyb2tlIGlwc2V0IGZ1bmN0aW9uYWxpdHkuIFRoYW5rcyB0byAKKwlXYW5nIEppYW4gZm9yIHRoZSBidWcgcmVwb3J0LgorCisKK3ZlcnNpb24gMi42OQorCUltcGxlbWVudCBkeW5hbWljIGludGVyZmFjZSBkaXNjb3Zlcnkgb24gKkJTRC4gVGhpcyBhbGxvd3MKKwl0aGUgY29uc3RydWN0b3I6IHN5bnRheCB0byBiZSB1c2VkIGluIGRoY3AtcmFuZ2UgZm9yIERIQ1B2NgorCW9uIHRoZSBCU0QgcGxhdGZvcm0uIFRoYW5rcyB0byBNYXR0aGlhcyBBbmRyZWUgZm9yCisJdmFsdWFibGUgcmVzZWFyY2ggb24gaG93IHRvIGltcGxlbWVudCB0aGlzLgorCisJRml4IGluZmluaXRlIGxvb3AgYXNzb2NpYXRlZCB3aXRoIHNvbWUgLS1ib2d1cy1ueGRvbWFpbgorCWNvbmZpZ3MuIFRoYW5rcyBmb2dvYm9nbyBmb3IgdGhlIGJ1ZyByZXBvcnQuCisKKwlGaXggbWlzc2luZyBSQSBSRE5TIG9wdGlvbiB3aXRoIGNvbmZpZ3VyYXRpb24gbGlrZQorCS0tZGhjcC1vcHRpb249b3B0aW9uNjoyMyxbOjpdIFRoYW5rcyB0byBUc2FjaGkgS2ltZWxkb3JmZXIKKwlmb3Igc3BvdHRpbmcgdGhlIHByb2JsZW0uCisKKwlBZGQgW2ZkMDA6Ol0gYW5kIFtmZTgwOjpdIGFzIHNwZWNpYWwgYWRkcmVzc2VzIGluIERIQ1B2NgorCW9wdGlvbnMsIGFuYWxvZ291cyB0byBbOjpdLiBbZmQwMDo6XSBpcyByZXBsYWNlZCB3aXRoIHRoZQorCWFjdHVhbCBVTEEgb2YgdGhlIGludGVyZmFjZSBvbiB0aGUgbWFjaGluZSBydW5uaW5nCisJZG5zbWFzcSwgW2ZlODA6Ol0gd2l0aCB0aGUgbGluay1sb2NhbCBhZGRyZXNzLiAKKwlUaGFua3MgdG8gVHNhY2hpIEtpbWVsZG9yZmVyIGZvciBjaGFtcGlvbmluZyB0aGlzLgorCisJRE5TU0VDIHZhbGlkYXRpb24gYW5kIGNhY2hpbmcuIERuc21hc3EgbmVlZHMgdG8gYmUKKwljb21waWxlZCB3aXRoIHRoaXMgZW5hYmxlZCwgd2l0aCAKKworCW1ha2UgZG5zbWFzcSBDT1BUUz0tREhBVkVfRE5TU0VDCisKKwl0aGlzIGFkZHMgZGVwZW5kZW5jaWVzIG9uIHRoZSBuZXR0bGUgY3J5cHRvIGxpYnJhcnkgYW5kIHRoZSAKKwlnbXAgbWF0aHMgbGlicmFyeS4gSXQncyBwb3NzaWJsZSB0byBoYXZlIHRoZXNlIGxpbmtlZAorCXN0YXRpY2FsbHkgd2l0aAorCisJbWFrZSBkbnNtYXNxIENPUFRTPSctREhBVkVfRE5TU0VDIC1ESEFWRV9ETlNTRUNfU1RBVElDJworCisJd2hpY2ggYmxvYXRzIHRoZSBkbnNtYXNxIGJpbmFyeSwgYnV0IHNhdmVzIHRoZSBzaXplIG9mIAorCXRoZSBzaGFyZWQgbGlicmFyaWVzIHdoaWNoIGFyZSBtdWNoIGJpZ2dlci4KKworCVRvIGVuYWJsZSwgRE5TU0VDLCB5b3Ugd2lsbCBuZWVkIGEgc2V0IG9mCisJdHJ1c3QtYW5jaG9ycy4gTm93IHRoYXQgdGhlIFRMRHMgYXJlIHNpZ25lZCwgdGhpcyBjYW4gYmUKKwl0aGUga2V5cyBmb3IgdGhlIHJvb3Qgem9uZSwgYW5kIGZvciBjb252ZW5pZW5jZSB0aGV5IGFyZQorCWluY2x1ZGVkIGluIHRydXN0LWFuY2hvcnMuY29uZiBpbiB0aGUgZG5zbWFzcQorCWRpc3RyaWJ1dGlvbi4gWW91IHNob3VsZCBvZiBjb3Vyc2UgY2hlY2sgdGhhdCB0aGVzZSBhcmUKKwlsZWdpdGltYXRlIGFuZCB1cC10by1kYXRlLiBTbywgYWRkaW5nCisKKwljb25mLWZpbGU9L3BhdGgvdG8vdHJ1c3QtYW5jaG9ycy5jb25mCisJZG5zc2VjCisKKwl0byB5b3VyIGNvbmZpZyBpcyBhbGwgdGhhdCdzIG5lZWRlZCB0byBnZXQgdGhpbmdzCisJd29ya2luZy4gVGhlIHVwc3RyZWFtIG5hbWVzZXJ2ZXJzIGhhdmUgdG8gYmUgRE5TU0VDLWNhcGFibGUKKwl0b28sIG9mIGNvdXJzZS4gTWFueSBJU1AgbmFtZXNlcnZlcnMgYXJlbid0LCBidXQgdGhlCisJR29vZ2xlIHB1YmxpYyBuYW1lc2VydmVycyAoOC44LjguOCBhbmQgOC44LjQuNCkgYXJlLgorCVdoZW4gRE5TU0VDIGlzIGNvbmZpZ3VyZWQsIGRuc21hc3EgdmFsaWRhdGVzIGFueSBxdWVyaWVzIAorCWZvciBkb21haW5zIHdoaWNoIGFyZSBzaWduZWQuIFF1ZXJ5IHJlc3VsdHMgd2hpY2ggYXJlIAorCWJvZ3VzIGFyZSByZXBsYWNlZCB3aXRoIFNFUlZGQUlMIHJlcGxpZXMsIGFuZCByZXN1bHRzIAorCXdoaWNoIGFyZSBjb3JyZWN0bHkgc2lnbmVkIGhhdmUgdGhlIEFEIGJpdCBzZXQuIEluIAorCWFkZGl0aW9uLCBhbmQganVzdCBhcyBpbXBvcnRhbnRseSwgZG5zbWFzcSBzdXBwbGllcyAKKwljb3JyZWN0IEROU1NFQyBpbmZvcm1hdGlvbiB0byBjbGllbnRzIHdoaWNoIGFyZSBkb2luZyAKKwl0aGVpciBvd24gdmFsaWRhdGlvbiwgYW5kIGNhY2hlcyBETlNLRVksIERTIGFuZCBSUlNJRworCXJlY29yZHMsIHdoaWNoIHNpZ25pZmljYW50bHkgaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2Ugb2YgCisJZG93bnN0cmVhbSB2YWxpZGF0b3JzLiBTZXR0aW5nIC0tbG9nLXF1ZXJpZXMgd2lsbCBzaG93IAorCUROU1NFQyBpbiBhY3Rpb24uCisKKwlJZiBhIGRvbWFpbiBpcyByZXR1cm5lZCBmcm9tIGFuIHVwc3RyZWFtIG5hbWVzZXJ2ZXIgd2l0aG91dCAKKwlETlNTRUMgc2lnbmF0dXJlLCBkbnNtYXNxIGJ5IGRlZmF1bHQgdHJ1c3RzIHRoaXMuIFRoaXMgCisJbWVhbnMgdGhhdCBmb3IgdW5zaWduZWQgem9uZSAoc3RpbGwgdGhlIG1ham9yaXR5KSB0aGVyZSAKKwlpcyBlZmZlY3RpdmVseSBubyBjb3N0IGZvciBoYXZpbmcgRE5TU0VDIGVuYWJsZWQuIE9mIGNvdXJzZQorCXRoaXMgYWxsb3dzIGFuIGF0dGFja2VyIHRvIHJlcGxhY2UgYSBzaWduZWQgcmVjb3JkIHdpdGggYSAKKwlmYWxzZSB1bnNpZ25lZCByZWNvcmQuIFRoaXMgaXMgYWRkcmVzc2VkIGJ5IHRoZSAKKwktLWRuc3NlYy1jaGVjay11bnNpZ25lZCBmbGFnLCB3aGljaCBpbnN0cnVjdHMgZG5zbWFzcQorCXRvIHByb3ZlIHRoYXQgYW4gdW5zaWduZWQgcmVjb3JkIGlzIGxlZ2l0aW1hdGUsIGJ5IGZpbmRpbmcgIAorCWEgc2VjdXJlIHByb29mIHRoYXQgdGhlIHpvbmUgY29udGFpbmluZyB0aGUgcmVjb3JkIGlzIG5vdAorCXNpZ25lZC4gRG9pbmcgdGhpcyBoYXMgY29zdHMgKHR5cGljYWxseSBvbmUgb3IgdHdvIGV4dHJhCisJdXBzdHJlYW0gcXVlcmllcykuIEl0IGFsc28gaGFzIGEgbmFzdHkgZmFpbHVyZSBtb2RlIGlmCisJZG5zbWFzcSdzIHVwc3RyZWFtIG5hbWVzZXJ2ZXJzIGFyZSBub3QgRE5TU0VDIGNhcGFibGUuIAorCVdpdGhvdXQgLS1kbnNzZWMtY2hlY2stdW5zaWduZWQgdXNpbmcgc3VjaCBhbiB1cHN0cmVhbQorCXNlcnZlciB3aWxsIHNpbXBseSByZXN1bHQgaW4gbm90IHF1ZXJpZXMgYmVpbmcgdmFsaWRhdGVkOyAKKwl3aXRoIC0tZG5zc2VjLWNoZWNrLXVuc2lnbmVkIGVuYWJsZWQgYW5kIGEgCisJRE5TU0VDLWlnbm9yYW50IHVwc3RyZWFtIHNlcnZlciwgX2FsbF8gcXVlcmllcyB3aWxsIGZhaWwuCisKKwlOb3RlIHRoYXQgRE5TU0VDIHJlcXVpcmVzIHRoYXQgdGhlIGxvY2FsIHRpbWUgaXMgdmFsaWQgYW5kIAorCWFjY3VyYXRlLCBpZiBub3QgdGhlbiBETlNTRUMgdmFsaWRhdGlvbiB3aWxsIGZhaWwuIE5UUCAKKwlzaG91bGQgYmUgcnVubmluZy4gVGhpcyBwcmVzZW50cyBhIHByb2JsZW0gZm9yIHJvdXRlcnMKKwl3aXRob3V0IGEgYmF0dGVyeS1iYWNrZWQgY2xvY2suIFRvIHNldCB0aGUgdGltZSBuZWVkcyBOVFAgCisJdG8gZG8gRE5TIGxvb2t1cHMsIGJ1dCBsb29rdXBzIHdpbGwgZmFpbCB1bnRpbCBOVFAgaGFzIHJ1bi4KKwlUbyBhZGRyZXNzIHRoaXMsIHRoZXJlJ3MgYSBmbGFnLCAtLWRuc3NlYy1uby10aW1lY2hlY2sgCisJd2hpY2ggZGlzYWJsZXMgdGhlIHRpbWUgY2hlY2tzIChvbmx5KSBpbiBETlNTRUMuIFdoZW4gZG5zbWFzcQorCWlzIHN0YXJ0ZWQgYW5kIHRoZSBjbG9jayBpcyBub3Qgc3luY2VkLCB0aGlzIGZsYWcgc2hvdWxkCisJYmUgdXNlZC4gQXMgc29vbiBhcyB0aGUgY2xvY2sgaXMgc3luY2VkLCBTSUdIVVAgZG5zbWFzcS4gCisJVGhlIFNJR0hVUCBjbGVhcnMgdGhlIGNhY2hlIG9mIHBhcnRpYWxseS12YWxpZGF0ZWQgZGF0YSBhbmQKKwlyZXNldHMgdGhlIG5vLXRpbWVjaGVjayBmbGFnLCBzbyB0aGF0IGFsbCBETlNTRUMgY2hlY2tzIAorCWhlbmNlZm9yd2FyZCB3aWxsIGJlIGNvbXBsZXRlLgorCisJVGhlIGRldmVsb3BtZW50IG9mIEROU1NFQyBpbiBkbnNtYXNxIHdhcyBzdGFydGVkIGJ5IAorCUdpb3Zhbm5pIEJham8sIHRvIHdob20gaHVnZSB0aGFua3MgYXJlIG93ZWQuIEl0IGhhcyBiZWVuCisJc3VwcG9ydGVkIGJ5IENvbWNhc3QsIHdob3NlIHRlY2hmdW5kIGdyYW50IGhhcyBhbGxvd2VkIGZvciAKKwlhbiBpbnZhbHVhYmxlIHBlcmlvZCBvZiBmdWxsLXRpbWUgd29yayB0byBnZXQgaXQgdG8gCisJYSB3b3JrYWJsZSBzdGF0ZS4KKworCUFkZCAtLXJldi1zZXJ2ZXIuIFRoYW5rcyB0byBEYXZlIFRhaHQgZm9yIHN1Z2dlc3RpbmcgdGhpcy4KKworCUFkZCAtLXNlcnZlcnMtZmlsZS4gQWxsb3dzIGR5bmFtaWMgdXBkYXRlIG9mIHVwc3RyZWFtIHNlcnZlcnMgCisJZnVsbCBhY2Nlc3MgdG8gY29uZmlndXJhdGlvbi4gCisKKwlBZGQgLS1sb2NhbC1zZXJ2aWNlLiBBY2NlcHQgRE5TIHF1ZXJpZXMgb25seSBmcm9tIGhvc3RzIAorCXdob3NlIGFkZHJlc3MgaXMgb24gYSBsb2NhbCBzdWJuZXQsIGllIGEgc3VibmV0IGZvciB3aGljaCAKKwlhbiBpbnRlcmZhY2UgZXhpc3RzIG9uIHRoZSBzZXJ2ZXIuIFRoaXMgb3B0aW9uCisJb25seSBoYXMgZWZmZWN0IGlmIHRoZXJlIGFyZSBubyAtLWludGVyZmFjZSAtLWV4Y2VwdC1pbnRlcmZhY2UsCisJLS1saXN0ZW4tYWRkcmVzcyBvciAtLWF1dGgtc2VydmVyIG9wdGlvbnMuIEl0IGlzIGludGVuZGVkIAorCXRvIGJlIHNldCBhcyBhIGRlZmF1bHQgb24gaW5zdGFsbGF0aW9uLCB0byBhbGxvdworCXVuY29uZmlndXJlZCBpbnN0YWxsYXRpb25zIHRvIGJlIHVzZWZ1bCBidXQgYWxzbyBzYWZlIGZyb20gCisJYmVpbmcgdXNlZCBmb3IgRE5TIGFtcGxpZmljYXRpb24gYXR0YWNrcy4KKworCUZpeCBjcmFzaGVzIGluIGNhY2hlX2dldF9jbmFtZV90YXJnZXQoKSB3aGVuIGRhbmdsaW5nIENOQU1FcworCWVuY291bnRlcmVkLiBUaGFua3MgdG8gQW5keSBhbmQgdGhlIHJ0LW41NnUgcHJvamVjdCBmb3IKKwlmaW5kIHRoaXMgYW5kIGhlbHBpbmcgdG8gY2hhc2UgaXQgZG93bi4KKworCUZpeCB3cm9uZyBSQ09ERSBpbiBhdXRob3JpdGF0aXZlIEROUyByZXBsaWVzIHRvIFBUUiBxdWVyaWVzLiBUaGUKKwljb3JyZWN0IGFuc3dlciB3YXMgaW5jbHVkZWQsIGJ1dCB0aGUgUkNPREUgd2FzIHNldCB0byBOWERPTUFJTi4KKwlUaGFua3MgdG8gQ3JhaWcgTWNRdWVlbiBmb3Igc3BvdHRpbmcgdGhpcy4KKworCU1ha2Ugc3RhdGlzdGljcyBhdmFpbGFibGUgYXMgRE5TIHF1ZXJpZXMgaW4gdGhlIC5iaW5kIFRMRCBhcyAKKwl3ZWxsIGFzIGxvZ2dpbmcgdGhlbS4KKworCit2ZXJzaW9uIDIuNjgKKwlVc2UgcmFuZG9tIGFkZHJlc3NlcyBmb3IgREhDUHY2IHRlbXBvcmFyeSBhZGRyZXNzCisJYWxsb2NhdGlvbnMsIGluc3RlYWQgb2YgYWxnb3JpdGhtaWNhbGx5IGRldGVybWluZWQgc3RhYmxlCisJYWRkcmVzc2VzLgorCisJRml4IGJ1ZyB3aGljaCBtZWFudCB0aGF0IHRoZSBESENQdjYgRFVJRCB3YXMgbm90IGF2YWlsYWJsZQorCWluIERIQ1Agc2NyaXB0IHJ1bnMgZHVyaW5nIHRoZSBsaWZldGltZSBvZiB0aGUgZG5zbWFzcQorCXByb2Nlc3Mgd2hpY2ggY3JlYXRlZCB0aGUgRFVJRCBkZS1ub3ZvLiBPbmNlIHRoZSBEVUlEIHdhcworCWNyZWF0ZWQgYW5kIHN0b3JlZCBpbiB0aGUgbGVhc2UgZmlsZSBhbmQgZG5zbWFzcQorCXJlc3RhcnRlZCwgdGhpcyBidWcgZGlzYXBwZWFyZWQuCisKKwlGaXggYnVnIGludHJvZHVjZWQgaW4gMi42NyB3aGljaCBjb3VsZCByZXN1bHQgaW4gZXJyb25lb3VzCisJTlhET01BSU4gcmV0dXJucyB0byBDTkFNRSBxdWVyaWVzLgorCisJRml4IGJ1aWxkIGZhaWx1cmVzIG9uIE1hY09TIFggYW5kIG9wZW5CU0QuCisKKwlBbGxvdyBzdWJuZXQgc3BlY2lmaWNhdGlvbnMgaW4gLS1hdXRoLXpvbmUgdG8gYmUgaW50ZXJmYWNlIAorCW5hbWVzIGFzIHdlbGwgYXMgYWRkcmVzcyBsaXRlcmFscy4gVGhpcyBtYWtlcyBpdCBwb3NzaWJsZQorCXRvIGNvbmZpZ3VyZSBhdXRob3JpdGF0aXZlIEROUyB3aGVuIGxvY2FsIGFkZHJlc3MgcmFuZ2VzCisJYXJlIGR5bmFtaWMgYW5kIHdvcmtzIG11Y2ggYmV0dGVyIHRoYW4gdGhlIHByZXZpb3VzCisJd29yay1hcm91bmQgd2hpY2ggZXhlbXB0ZWQgY29uc3RydWN0ZWQgREhDUCByYW5nZXMgZnJvbSB0aGUKKwlJUCBhZGRyZXNzIGZpbHRlcmluZy4gQXMgYSBjb25zZXF1ZW5jZSwgdGhhdCB3b3JrLWFyb3VuZAorCWlzIHJlbW92ZWQuIFVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcywgdGhpcyBjaGFuZ2Ugd2lsCisJYnJlYWsgZXhpc3RpbmcgY29uZmlndXJhdGlvbjogaWYgeW91J3JlIHJlbHlpbmcgb24gdGhlCisJY29uc3RydWN0ZWQtcmFuZ2UgZXhjZXB0aW9uLCB5b3UgbmVlZCB0byBjaGFuZ2UgLS1hdXRoLXpvbmUKKwl0byBzcGVjaWZ5IHRoZSBzYW1lIGludGVyZmFjZSBhcyBpcyB1c2VkIHRvIGNvbnN0cnVjdCB5b3VyCisJREhDUCByYW5nZXMsIHByb2JhYmx5IHdpdGggYSB0cmFpbGluZyAiLzYiIGxpa2UgdGhpczogCisJLS1hdXRoLXpvbmU9ZXhhbXBsZS5jb20sZXRoMC82IHRvIGxpbWl0IHRoZSBhZGRyZXNzZXMgdG8KKwlJUHY2IGFkZHJlc3NlcyBvZiBldGgwLgorCisJRml4IHByb2JsZW1zIHdoZW4gYWR2ZXJ0aXNpbmcgZGVsZXRlZCBJUHY2IHByZWZpeGVzLiBJZgorCXRoZSBwcmVmaXggaXMgZGVsZXRlZCAocmF0aGVyIHRoYW4gcmVwbGFjZWQpLCBpdCBkb2Vzbid0CisJZ2V0IGFkdmVydGlzZWQgd2l0aCB6ZXJvIHByZWZlcnJlZCB0aW1lLiBUaGFua3MgdG8gVHNhY2hpCisJZm9yIHRoZSBidWcgcmVwb3J0LiAKKworCUZpeCBzZWdmYXVsdCB3aXRoIHNvbWUgbG9jYWxseSBjb25maWd1cmVkIENOQU1Fcy4gVGhhbmtzCisJdG8gQW5kcmV3IENoaWxkcyBmb3Igc3BvdHRpbmcgdGhlIHByb2JsZW0uCisKKwlGaXggbWVtb3J5IGxlYWsgb24gcmUtcmVhZGluZyAvZXRjL2hvc3RzIGFuZCBmcmllbmRzLAorCWludHJvZHVjZWQgaW4gMi42Ny4KKworCUNoZWNrIHRoZSBhcnJpdmFsIGludGVyZmFjZSBvZiBpbmNvbWluZyBETlMgYW5kIFRGVFAKKwlyZXF1ZXN0cyB2aWEgSVB2NiwgZXZlbiBpbiAtLWJpbmQtaW50ZXJmYWNlcyBtb2RlLiBUaGlzCisJaXNuJ3QgcG9zc2libGUgZm9yIElQdjQgYW5kIGNhbiBnZW5lcmF0ZSBzY2FyeSB3YXJuaW5ncywKKwlidXQgYXMgaXQncyBhbHdheXMgcG9zc2libGUgZm9yIElQdjYgKHRoZSBBUEkgYWx3YXlzCisJZXhpc3RzKSB0aGVuIHdlIHNob3VsZCBkbyBpdCBhbHdheXMuIAorCisJVHdlYWsgdGhlIHJ1bGVzIG9uIHByZWZpeC1sZW5ndGhzIGluIC0tZGhjcC1yYW5nZSBmb3IKKwlJUHY2LiBUaGUgbmV3IHJ1bGUgaXMgdGhhdCB0aGUgc3BlY2lmaWVkIHByZWZpeCBsZW5ndGgKKwltdXN0IGJlIGxhcmdlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwcmVmaXggbGVuZ3RoIG9mIHRoZQorCWNvcnJlc3BvbmRpbmcgYWRkcmVzcyBvbiB0aGUgbG9jYWwgaW50ZXJmYWNlLiAKKworCit2ZXJzaW9uIDIuNjcKKwlGaXggY3Jhc2ggaWYgdXBzdHJlYW0gc2VydmVyIHJldHVybnMgU0VSVkZBSUwgd2hlbgorCS0tY29ubnRyYWNrIGluIHVzZS4gVGhhbmtzIHRvIEdpYWNvbW8gVGF6emFyaSBmb3IgZmluZGluZworCXRoaXMgYW5kIHN1cHBseWluZyB0aGUgcGF0Y2guIAorCisJUmVwYWlyIHJlZ3Jlc3Npb24gaW4gMi42NC4gVGhhdCByZWxlYXNlIHN0b3BwZWQgc2VuZGluZworCWxlYXNlLXRpbWUgaW5mb3JtYXRpb24gaW4gdGhlIHJlcGx5IHRvIERIQ1BJTkZPUk0KKwlyZXF1ZXN0cywgb24gdGhlIGNvcnJlY3QgZ3JvdW5kcyB0aGF0IGl0IHdhcyBhIHN0YW5kYXJkcworCXZpb2xhdGlvbi4gSG93ZXZlciwgdGhpcyBicm9rZSB0aGUgZG5zbWFzcS1zcGVjaWZpYworCWRoY3BfbGVhc2VfdGltZSB1dGlsaXR5LiBOb3csIERIQ1BJTkZPUk0gcmV0dXJucworCWxlYXNlLXRpbWUgb25seSBpZiBpdCdzIHNwZWNpZmljYWxseSByZXF1ZXN0ZWQKKwkobWFpbnRhaW5pbmcgc3RhbmRhcmRzKSBhbmQgdGhlIGRoY3BfbGVhc2VfdGltZSB1dGlsaXR5CisJaGFzIGJlZW4gdGF1Z2h0IHRvIGFzayBmb3IgaXQgKHJlc3RvcmluZyBmdW5jdGlvbmFsaXR5KS4gCisKKwlGaXggLS1kaGNwLW1hdGNoLCAtLWRoY3AtdmVuZG9yY2xhc3MgYW5kIC0tZGhjcC11c2VyY2xhc3MKKwl0byB3b3JrIHdpdGggQk9PVFAgYW5kIHdlbGwgYXMgREhDUC4gVGhhbmtzIHRvIFBldGVyCisJS29yc2dhYXJkIGZvciBzcG90dGluZyB0aGUgcHJvYmxlbS4gCisKKwlBZGQgLS1zeW50aC1kb21haW4uIFRoYW5rcyB0byBWaXNodmFuYW5kYSBJc2hheWEgZm9yCisJc3VnZ2VzdGluZyB0aGlzLgorCisJRml4IGZhaWx1cmUgdG8gY29tcGlsZSBpcHNldC5jIGlmIG9sZCBrZXJuZWwgaGVhZGVycyBhcmUKKwlpbiB1c2UuIFRoYW5rcyB0byBFdWdlbmUgUnVkb3kgZm9yIHBvaW50aW5nIHRoaXMgb3V0LgorCisJSGFuZGxlIElQdjQgaW50ZXJmYWNlLWFkZHJlc3MgbGFiZWxzIGluIExpbnV4LiBUaGVzZSBhcmUKKwlvZnRlbiB1c2VkIHRvIGVtdWxhdGUgdGhlIG9sZCBJUC1hbGlhcyBhZGRyZXNzZXMuIEJlZm9yZSwKKwl1c2luZyAtLWludGVyZmFjZT1ldGgwIHdvdWxkIHNlcnZpY2UgYWxsIHRoZSBhZGRyZXNzZXMgb2YKKwlldGgwLCBpbmNsdWRpbmcgb25lcyBjb25maWd1cmVkIGFzIGFsaWFzZXMsIHdoaWNoIGFwcGVhcgorCWluIGlmY29uZmlnIGFzIGV0aDA6MC4gTm93LCBvbmx5IGFkZHJlc3NlcyB3aXRoIHRoZSBsYWJlbAorCWV0aDAgYXJlIGFjdGl2ZS4gVGhpcyBpcyBub3QgYmFja3dhcmRzIGNvbXBhdGlibGU6IGlmIHlvdQorCXdhbnQgdG8gY29udGludWUgdG8gYmluZCB0aGUgYWxpYXNlcyB0b28sIHlvdSBuZWVkIHRvIGFkZAorCWVnLiAtLWludGVyZmFjZT1ldGgwOjAgdG8gdGhlIGNvbmZpZy4gCisKKwlGaXggImZhaWxlZCB0byBzZXQgU09fQklORFRPREVWSUNFIG9uIERIQ1Agc29ja2V0OiBTb2NrZXQgCisJb3BlcmF0aW9uIG9uIG5vbi1zb2NrZXQiIGVycm9yIG9uIHN0YXJ0dXAgd2l0aAorCWNvbmZpZ3VyYXRpb25zIHdoaWNoIGhhdmUgZXhhY3RseSBvbmUgLS1pbnRlcmZhY2Ugb3B0aW9uCisJYW5kIGRvIFJBIGJ1dCBfbm90XyBESENQdjYuIFRoYW5rcyB0byBUcmV2ZXIgQWRhbXMgZm9yIHRoZQorCWJ1ZyByZXBvcnQuCisKKwlHZW5lcmFsaXNlIC0taW50ZXJmYWNlLW5hbWUgdG8gY29wZSB3aXRoIElQdjYgYWRkcmVzc2VzCisJYW5kIG11bHRpcGxlIGFkZHJlc3NlcyBwZXIgaW50ZXJmYWNlIHBlciBhZGRyZXNzIGZhbWlseS4KKworCUZpeCBvcHRpb24gcGFyc2luZyBmb3IgLS1kaGNwLWhvc3QsIHdoaWNoIHdhcyBnZW5lcmF0aW5nIGEKKwlzcHVyaW91cyBlcnJvciB3aGVuIGFsbCBzZXZlbiBwb3NzaWJsZSBpdGVtcyB3ZXJlCisJaW5jbHVkZWQuIFRoYW5rcyB0byBaaGlxaWFuZyBXYW5nIGZvciB0aGUgYnVnIHJlcG9ydC4KKworCVJlbW92ZSByZXN0cmljdGlvbiBvbiBwcmVmaXgtbGVuZ3RoIGluIC0tYXV0aC16b25lLiBUaGFua3MKKwl0byBUb2tlIEhvaWxhbmQtSm9yZ2Vuc2VuIGZvciBzdWdnZXN0aW5nIHRoaXMuCisKKwlMb2cgd2hlbiB0aGUgbWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCBETlMgcXVlcmllcyBpcworCXJlYWNoZWQuIFRoYW5rcyB0byBNYXJjZWxvIFNhbGhhYiBCcm9nbGlhdG8gZm9yIHRoZSBwYXRjaC4KKworCUlmIHdpbGRjYXJkcyBhcmUgdXNlZCBpbiAtLWludGVyZmFjZSwgZG9uJ3QgYXNzdW1lIHRoYXQgCisJdGhlcmUgd2lsbCBvbmx5IGV2ZXIgYmUgb25lIGF2YWlsYWJsZSBpbnRlcmZhY2UgZm9yIERIQ1AKKwlqdXN0IGJlY2F1c2UgdGhlcmUgaXMgb25lIGF0IHN0YXJ0LXVwLiBNb3JlIG1heSBhcHBlYXIsIHNvCisJd2UgY2FuJ3QgdXNlIFNPX0JJTkRUT0RFVklDRS4gVGhhbmtzIHRvIE5hdHJpbyBmb3IgdGhlIGJ1ZworCXJlcG9ydC4gCisKKwlJbmNyZWFzZSB0aW1lb3V0L251bWJlciBvZiByZXRyaWVzIGluIFRGVFAgdG8gYWNjb21tb2RhdGUKKwlBdWRpb0NvZGVzIFZvaWNlIEdhdGV3YXlzIGRvaW5nIHN0cmVhbWluZyB3cml0ZXMgdG8gZmxhc2guCisJVGhhbmtzIHRvIERhbWlhbiBLYWN6a293c2tpIGZvciBzcG90dGluZyB0aGUgcHJvYmxlbS4KKworCUZpeCBjcmFzaCB3aXRoIGVtcHR5IERIQ1Agc3RyaW5nIG9wdGlvbnMgd2hlbiBhZGRpbmcgemVybworCXRlcm1pbmF0b3IuIFRoYW5rcyB0byBQYXRyaWNrIE1jTGVhbiBmb3IgdGhlIGJ1ZyByZXBvcnQuCisKKwlBbGxvdyBob3N0bmFtZXMgdG8gc3RhcnQgd2l0aCBhIG51bWJlciwgYXMgYWxsb3dlZCBpbgorCVJGQy0xMTIzLiBUaGFua3MgdG8gS3lsZSBNZXN0ZXJ5IGZvciB0aGUgcGF0Y2guIAorCisJRml4ZXMgdG8gREhDUCBGUUROIG9wdGlvbiBoYW5kbGluZzogZG9uJ3QgdGVybWluYXRlIEZRRE4KKwlpZiBkb21haW4gbm90IGtub3duIGFuZCBhbGxvdyBhIEZRRE4gb3B0aW9uIHdpdGggYmxhbmsKKwluYW1lIHRvIHJlcXVlc3QgdGhhdCBhIEZRRE4gb3B0aW9uIGlzIHJldHVybmVkIGluIHRoZQorCXJlcGx5LiBUaGFua3MgdG8gUm95IE1hcnBsZXMgZm9yIHRoZSBwYXRjaC4KKworCU1ha2UgLS1jbGVhci1vbi1yZWxvYWQgYXBwbHkgdG8gc2V0dGluZyB1cHN0cmVhbSBzZXJ2ZXJzCisJdmlhIERCdXMgdG9vLgorCisJV2hlbiB0aGUgYWRkcmVzcyB3aGljaCB0cmlnZ2VyZWQgdGhlIGNvbnN0cnVjdGlvbiBvZiBhbgorCWFkdmVydGlzZWQgSVB2NiBwcmVmaXggZGlzYXBwZWFycywgY29udGludWUgdG8gYWR2ZXJ0aXNlIAorCXRoZSBwcmVmaXggZm9yIHVwIHRvIDIgaG91cnMsIHdpdGggdGhlIHByZWZlcnJlZCBsaWZldGltZQorCXNldCB0byB6ZXJvLiBUaGlzIHNhdGlzZmllcyBSRkMgNjIwNCA0LjMgTC0xMyBhbmQgbWFrZXMKKwl0aGluZ3Mgd29yayBiZXR0ZXIgaWYgYSBwcmVmaXggZGlzYXBwZWFycyB3aXRob3V0IGJlaW5nCisJZGVwcmVjYXRlZCBmaXJzdC4gVGhhbmtzIHRvIFV3ZSBTY2hpbmRsZXIgZm9yIHBlcnN1YXNpdmVseQorCWFyZ3VpbmcgZm9yIHRoaXMuCisKKwlGaXggTUFDIGFkZHJlc3MgZW51bWVyYXRpb24gb24gKkJTRC4gVGhhbmtzIHRvIEJyYWQgU21pdGgKKwlmb3IgdGhlIGJ1ZyByZXBvcnQuCisKKwlTdXBwb3J0IFJGQy00MjQyIGluZm9ybWF0aW9uLXJlZnJlc2gtdGltZSBvcHRpb25zIGluIHRoZSAKKwlyZXBseSB0byBESENQdjYgaW5mb3JtYXRpb24tcmVxdWVzdC4gVGhlIGxlYXNlIHRpbWUgb2YgdGhlCisJc21hbGxlc3QgdmFsaWQgZGhjcC1yYW5nZSBpcyBzZW50LiBUaGFua3MgdG8gVXdlIFNjaGluZGxlciAKKwlmb3Igc3VnZ2VzdGluZyB0aGlzLgorCisJTWFrZSAtLWxpc3Rlbi1hZGRyZXNzIGhpZ2hlciBwcmlvcml0eSB0aGFuIC0tZXhjZXB0LWludGVyZmFjZQorCWluIGFsbCBjaXJjdW1zdGFuY2VzLiBUaGFua3MgdG8gVGhvbWFzIEhvb2QgZm9yIHRoZSBidWdyZXBvcnQuCisKKwlQcm92aWRlIGluZGVwZW5kZW50IGNvbnRyb2wgb3ZlciB3aGljaCBpbnRlcmZhY2VzIGdldCBURlRQIAorCXNlcnZpY2UuIElmIGVuYWJsZS10ZnRwIGlzIGdpdmVuIGEgbGlzdCBvZiBpbnRlcmZhY2VzLCB0aGVuIFRGVFAgCisJaXMgcHJvdmlkZWQgb24gdGhvc2UuIFdpdGhvdXQgdGhlIGxpc3QsIHRoZSBwcmV2aW91cyBiZWhhdmlvdXIKKwkocHJvdmlkZSBURlRQIHRvIHRoZSBzYW1lIGludGVyZmFjZXMgd2UgcHJvdmlkZSBESENQIHRvKSAKKwlpcyByZXRhaW5lZC4gVGhhbmtzIHRvIExvbm5pZSBBYmVsYmVjayBmb3IgdGhlIHN1Z2dlc3Rpb24uCisKKwlBZGQgLS1kaGNwLXJlbGF5IGNvbmZpZyBvcHRpb24uIE1hbnkgdGhhbmtzIHRvIHZ0c2wubmV0CisJZm9yIHNwb25zb3JpbmcgdGhpcyBkZXZlbG9wbWVudC4KKworCUZpeCBjcmFzaCB3aXRoIGVtcHR5IHRhZzogaW4gLS1kaGNwLXJhbmdlLiBUaGFua3MgdG8KKwlLYXNwYXIgU2NobGVpc2VyIGZvciB0aGUgYnVnIHJlcG9ydC4KKworCUFkZCAiYmFzZWxpbmUiIGFuZCAiYmxvYXRjaGVjayIgbWFrZWZpbGUgdGFyZ2V0cywgZm9yIAorCXJldmVhbGluZyBzaXplIGNoYW5nZXMgZHVyaW5nIGRldmVsb3BtZW50LiBUaGFua3MgdG8KKwlWbGFkaXNsYXYgR3Jpc2hlbmtvIGZvciB0aGUgcGF0Y2guIAorCisJQ29wZSB3aXRoIERIQ1B2NiBjbGllbnRzIHdoaWNoIHNlbmQgUkVRVUVTVHMgd2l0aG91dAorCWFkZHJlc3Mgb3B0aW9ucyAtIHRyZWF0IHRoZW0gYXMgU09MSUNJVCB3aXRoIHJhcGlkIGNvbW1pdC4KKworCVN1cHBvcnQgaWRlbnRpZmljYXRpb24gb2YgY2xpZW50cyBieSBNQUMgYWRkcmVzcyBpbgorCURIQ1B2Ni4gV2hlbiB1c2luZyBhIHJlbGF5LCB0aGUgcmVsYXkgbXVzdCBzdXBwb3J0IFJGQworCTY5MzkgZm9yIHRoaXMgdG8gd29yay4gSXQgYWx3YXlzIHdvcmtzIGZvciBkaXJlY3RseQorCWNvbm5lY3RlZCBjbGllbnRzLiBUaGFua3MgdG8gVmxhZGlzbGF2IEdyaXNoZW5rbworCWZvciBwcm9tcHRpbmcgdGhpcyBmZWF0dXJlLgorCisJUmVtb3ZlIHRoZSBydWxlIGZvciBjb25zdHJ1Y3RlZCBESENQIHJhbmdlcyB0aGF0IHRoZSBsb2NhbAorCWFkZHJlc3MgbXVzdCBiZSBlaXRoZXIgdGhlIGZpcnN0IG9yIGxhc3QgYWRkcmVzcyBpbiB0aGUKKwlyYW5nZS4gVGhpcyB3YXMgb3JpZ2luYWxseSB0byBhdm9pZCBTTEFBQyBhZGRyZXNzZXMsIGJ1dAorCXdlIG5vdyBleHBsaWNpdGx5IGF1dG9jb25maWcgYW5kIHByaXZhY3kgYWRkcmVzc2VzIGluc3RlYWQuICAKKworCVVwZGF0ZSBQb2xpc2ggdHJhbnNsYXRpb24uIFRoYW5rcyB0byBKYW4gUHNvdGEuCisKKwlGaXggcHJvYmxlbSBpbiBESENQdjYgdmVuZG9yY2xhc3MvdXNlcmNsYXNzIG1hdGNoaW5nCisJY29kZS4gVGhhbmtzIHRvIFRhbmd1eSBCb3V6ZWxvYyBmb3IgdGhlIHBhdGNoLgorCisJVXBkYXRlIFNwYW5pc2ggdHJhbnNsYXRpb24uIFRoYW5rcyB0byBWaWNlbnRlIFNvcmlhbm8uCisKKwlBZGQgLS1yYS1wYXJhbSBvcHRpb24uIFRoYW5rcyB0byBWbGFkaXNsYXYgR3Jpc2hlbmtvIGZvcgorCWluc3BpcmF0aW9uIG9uIHRoaXMuCisKKwlBZGQgLS1hZGQtc3VibmV0IGNvbmZpZ3VyYXRpb24sIHRvIHRlbGwgdXBzdHJlYW0gRE5TCisJc2VydmVycyB3aGVyZSB0aGUgb3JpZ2luYWwgY2xpZW50IGlzLiBUaGFua3MgdG8gRE5TdGhpbmd5CisJZm9yIHNwb25zb3JpbmcgdGhpcyBmZWF0dXJlLgorCisJQWRkIC0tcXVpZXQtZGhjcCwgLS1xdWlldC1kaGNwNiBhbmQgLS1xdWlldC1yYS4gVGhhbmtzIHRvCisJS2V2aW4gRGFyYnlzaGlyZS1CcnlhbnQgZm9yIHRoZSBpbml0aWFsIHBhdGNoLgorCisJQWxsb3cgQS9BQUFBIHJlY29yZHMgY3JlYXRlZCBieSAtLWludGVyZmFjZS1uYW1lIHRvIGJlIHRoZQorCXRhcmdldCBvZiAtLWNuYW1lLiBUaGFua3MgdG8gSGFkbXV0IERhbmlzY2ggZm9yIHRoZQorCXN1Z2dlc3Rpb24uIAorCisJQXZvaWQgdHJlYXRpbmcgYSAtLWRoY3AtaG9zdCB3aGljaCBoYXMgYW4gSVB2NiBhZGRyZXNzCisJYXMgZWxpZ2libGUgZm9yIHVzZSB3aXRoIERIQ1B2NCBvbiB0aGUgZ3JvdW5kcyB0aGF0IGl0IGhhcworCW5vIGFkZHJlc3MsIGFuZCB2aWNlLXZlcnNhLiBUaGFua3MgdG8gWXVyeSBLb25vdmFsb3YgZm9yCisJc3BvdHRpbmcgdGhlIHByb2JsZW0uCisKKwlEbyBhIGJldHRlciBqb2IgY2FjaGluZyBkYW5nbGluZyBDTkFNRXMuIFRoYW5rcyB0byBZdmVzCisJRG9yZnNtYW4gZm9yIHNwb3R0aW5nIHRoZSBwcm9ibGVtLgorCisKK3ZlcnNpb24gMi42NgorCUFkZCB0aGUgYWJpbGl0eSB0byBhY3QgYXMgYW4gYXV0aG9yaXRhdGl2ZSBETlMKKwlzZXJ2ZXIuIERuc21hc3EgY2FuIG5vdyBhbnN3ZXIgcXVlcmllcyBmcm9tIHRoZSB3aWRlciAnbmV0CisJd2l0aCBsb2NhbCBkYXRhLCBhcyBsb25nIGFzIHRoZSBjb3JyZWN0IE5TIHJlY29yZHMgYXJlIHNldAorCXVwLiBPbmx5IGxvY2FsIGRhdGEgaXMgcHJvdmlkZWQsIHRvIGF2b2lkIGNyZWF0aW5nIGFuIG9wZW4KKwlETlMgcmVsYXkuIFpvbmUgdHJhbnNmZXIgaXMgc3VwcG9ydGVkLCB0byBhbGxvdyBzZWNvbmRhcnkKKwlzZXJ2ZXJzIHRvIGJlIGNvbmZpZ3VyZWQuCisKKwlBZGQgImNvbnN0cnVjdGVkIERIQ1AgcmFuZ2VzIiBmb3IgREhDUHY2LiBUaGlzIGlzIGludGVuZGVkCisJZm9yIElQdjYgcm91dGVycyB3aGljaCBnZXQgcHJlZml4ZXMgZHluYW1pY2FsbHkgdmlhIHByZWZpeAorCWRlbGVnYXRpb24uIFdpdGggc3VpdGFibGUgY29uZmlndXJhdGlvbiwgc3RhdGVmdWwgREhDUHY2CisJYW5kIFJBIGNhbiBoYXBwZW4gYXV0b21hdGljYWxseSBhcyBwcmVmaXhlcyBhcmUgZGVsZWdhdGVkCisJYW5kIHRoZW4gZGVwcmVjYXRlZCwgd2l0aG91dCBoYXZpbmcgIHRvIHJlLXdyaXRlIHRoZQorCWRuc21hc3EgY29uZmlndXJhdGlvbiBmaWxlIG9yIHJlc3RhcnQgdGhlIGRhZW1vbi4gVGhhbmtzIHRvCisJU3RldmVuIEJhcnRoIGZvciBleHRlbnNpdmUgdGVzdGluZyBhbmQgZGV2ZWxvcG1lbnQgd29yayBvbgorCXRoaXMgaWRlYS4KKworCUZpeCBjcmFzaCBvbiBzdGFydHVwIG9uIFNvbGFyaXMgMTEuIFJlZ3Jlc3Npb24gcHJvYmFibHkKKwlpbnRyb2R1Y2VkIGluIDIuNjEuICBUaGFua3MgdG8gR2VvZmYgSm9obnN0b25lIGZvciB0aGUKKwlwYXRjaC4KKworCUFkZCBjb2RlIHRvIG1ha2UgYmVoYXZpb3VyIGZvciBUQ1AgRE5TIHJlcXVlc3RzIHRoYXQgc2FtZQorCWFzIGZvciBVRFAgcmVxdWVzdHMsIHdoZW4gYSByZXF1ZXN0IGFycml2ZXMgZm9yIGFuIGFsbG93ZWQgCisJYWRkcmVzcywgYnV0IHZpYSBhIGJhbm5lZCBpbnRlcmZhY2UuIFRoaXMgY2hhbmdlIGlzIG9ubHkKKwlhY3RpdmUgb24gTGludXgsIHNpbmNlIHRoZSByZWxldmFudCBBUEkgaXMgbWlzc2luZyAoQUZBSUspCisJb24gb3RoZXIgcGxhdGZvcm1zLiBNYW55IHRoYW5rcyB0byBUb21hcyBIb3p6YSBmb3IKKwlzcG90dGluZyB0aGUgcHJvYmxlbSwgYW5kIGRvaW5nIGludmFsdWFibGUgZGlzY292ZXJ5IG9mCisJdGhlIG9ic2N1cmUgYW5kIHVuZG9jdW1lbnRlZCBBUEkgcmVxdWlyZWQgZm9yIHRoZSBzb2x1dGlvbi4KKworCURvbid0IHNlbmQgdGhlIGRlZmF1bHQgREhDUCBvcHRpb24gYWR2ZXJ0aXNpbmcgZG5zbWFzcSBhcworCXRoZSBsb2NhbCBETlMgc2VydmVyIGlmIGRuc21hc3EgaXMgY29uZmlndXJlZCB0byBub3QgYWN0CisJYXMgRE5TIHNlcnZlciwgb3IgaXQncyBjb25maWd1cmVkIHRvIGEgbm9uLXN0YW5kYXJkIHBvcnQuCisKKwlBZGQgRE5TTUFTUV9DSVJDVUlUX0lELCBETlNNQVNRX1NVQlNDUklCRVJfSUQsCisJRE5TTUFTUV9SRU1PVEVfSUQgdmFyaWFibGVzIHRvIHRoZSBlbnZpcm9ubWVudCBvZiB0aGUKKwlsZWFzZS1jaGFuZ2Ugc2NyaXB0IChhbmQgdGhlIGNvcnJlc3BvbmRpbmcgTHVhKS4gVGhlc2UgaG9sZAorCWluZm9ybWF0aW9uIGluc2VydGVkIGludG8gdGhlIERIQ1AgcmVxdWVzdCBieSBhIERIQ1AgcmVsYXkKKwlhZ2VudC4gVGhhbmtzIHRvIExha2VmaWVsZCBDb21tdW5pY2F0aW9ucyBmb3IgcHJvdmlkaW5nIGEKKwlib3VudHkgZm9yIHRoaXMgYWRkaXRpb24uCisKKwlGaXhlZCBjcmFzaCwgaW50cm9kdWNlZCBpbiAyLjY0LCB3aGlsc3QgaGFuZGxpbmcgREhDUHY2CisJaW5mb3JtYXRpb24tcmVxdWVzdHMgd2l0aCBzb21lIGNvbW1vbiBjb25maWd1cmF0aW9ucy4KKwlUaGFua3MgdG8gUm9iZXJ0IE0uIEFsYnJlY2h0IGZvciB0aGUgYnVnIHJlcG9ydCBhbmQgCisJY2hhc2luZyB0aGUgcHJvYmxlbS4KKworCUFkZCAtLWlwc2V0IG9wdGlvbi4gVGhhbmtzIHRvIEphc29uIEEuIERvbmVuZmVsZCBmb3IgdGhlIAorCXBhdGNoLgorCisJRG9uJ3QgZXJyb25lb3VzbHkgcmVqZWN0IHNvbWUgb3B0aW9uIG5hbWVzIGluIC0tZGhjcC1tYXRjaAorCW9wdGlvbnMuIFRoYW5rcyB0byBCZW5lZGlrdCBIb2Noc3RyYXNzZXIgZm9yIHRoZSBidWcgcmVwb3J0LgorCisJQWxsb3cgYSB0cmFpbGluZyAnKicgd2lsZGNhcmQgaW4gYWxsIGludGVyZmFjZS1uYW1lCisJY29uZmlndXJhdGlvbnMuIFRoYW5rcyB0byBDaHJpc3RpYW4gUGFycGFydCBmb3IgdGhlIHBhdGNoLgorCisJSGFuZGxlIHRoZSBzaXR1YXRpb24gd2hlcmUgbGliYyBoZWFkZXJzIGRlZmluZQorCVNPX1JFVVNFUE9SVCwgYnV0IHRoZSBrZXJuZWwgaW4gdXNlIGRvZXNuJ3QsIHRvIGNvcGUgd2l0aAorCXRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhpcyBvcHRpb24gdG8gTGludXguIFRoYW5rcyB0byBSaWNoCisJRmVsa2VyIGZvciB0aGUgYnVnIHJlcG9ydC4KKworCVVwZGF0ZSBQb2xpc2ggdHJhbnNsYXRpb24uIFRoYW5rcyB0byBKYW4gUHNvdGEuCisKKwlGaXggY3Jhc2ggaWYgdGhlIGNvbmZpZ3VyZWQgREhDUCBsZWFzZSBsaW1pdCBpcworCXJlYWNoZWQuIFJlZ3Jlc3Npb24gb2NjdXJyZWQgaW4gMi42MS4gVGhhbmtzIHRvIFRzYWNoaSBmb3IKKwl0aGUgYnVnIHJlcG9ydC4gCisKKwlVcGRhdGUgdGhlIEZyZW5jaCB0cmFuc2xhdGlvbi4gVGhhbmtzIHRvIEdpbGRhcyBsZSBOYWRhbi4KKworCit2ZXJzaW9uIDIuNjUKKwlGaXggcmVncmVzc2lvbiB3aGljaCBicm9rZSBmb3J3YXJkaW5nIG9mIHF1ZXJpZXMgc2VudCB2aWEKKwlUQ1Agd2hpY2ggYXJlIG5vdCBmb3IgQSBhbmQgQUFBQSBhbmQgd2hpY2ggd2VyZSBkaXJlY3RlZCB0bworCW5vbi1kZWZhdWx0IHNlcnZlcnMuIFRoYW5rcyB0byBOaWF4IGZvciB0aGUgYnVnIHJlcG9ydC4KKworCUZpeCBmYWlsdXJlIHRvIGJ1aWxkIHdpdGggREhDUCBzdXBwb3J0IGV4Y2x1ZGVkLiBUaGFua3MgdG8gCisJR3VzdGF2byBaYWNhcmlhcyBmb3IgdGhlIHBhdGNoLgorCisJRml4IG5hc3R5IHJlZ3Jlc3Npb24gaW4gMi42NCB3aGljaCBjb21wbGV0ZWx5IGJyb2tlIGNhY2hpbmcuCisKKwordmVyc2lvbiAyLjY0CisJSGFuZGxlIERIQ1AgRlFETiBvcHRpb25zIHdpdGggYWxsIGZsYWcgYml0cyB6ZXJvIGFuZAorCS0tZGhjcC1jbGllbnQtdXBkYXRlIHNldC4gVGhhbmtzIHRvIEJlcm5kIEtydW1icm9lY2sgZm9yCisJc3BvdHRpbmcgdGhlIHByb2JsZW0uCisKKwlGaW5lc3NlIHRoZSBjaGVjayBmb3IgL2V0Yy9ob3N0cyBuYW1lcyB3aGljaCBjb25mbGljdCB3aXRoCisJREhDUCBuYW1lcy4gUHJldmlvdXNseSBhIG5hbWUvYWRkcmVzcyBwYWlyIGluIC9ldGMvaG9zdHMKKwl3aGljaCBkaWRuJ3QgbWF0Y2ggdGhlIG5hbWUvYWRkcmVzcyBvZiBhIERIQ1AgbGVhc2Ugd291bGQKKwlnZW5lcmF0ZSBhIHdhcm5pbmcuIE5vdyB0aGF0IG9ubHkgaGFwcGVucyBpZiB0aGVyZSBpcyBub3QKKwlhbHNvIGEgbWF0Y2guIFRoaXMgYWxsb3dzIG11bHRpcGxlIGFkZHJlc3NlcyBmb3IgYSBuYW1lIGluIAorCS9ldGMvaG9zdHMgd2l0aCBvbmUgb2YgdGhlbSBhc3NpZ25lZCB2aWEgREhDUC4KKworCUZpeCBicm9rZW4gdmVuZG9yLW9wdGlvbiBwcm9jZXNzaW5nIGZvciBCT09UUC4gVGhhbmtzIHRvCisJSGFucy1Kb2FjaGltIEJhYWRlciBmb3IgdGhlIGJ1ZyByZXBvcnQuCisKKwlEb24ndCByZXBvcnQgc3B1cmlvdXMgbmV0bGluayBlcnJvcnMsIHJlZ3Jlc3Npb24gaW4KKwkyLjYzLiBUaGFua3MgdG8gVmxhZGlzbGF2IEdyaXNoZW5rbyBmb3IgdGhlIHBhdGNoLgorCisJRmxhZyBESENQIG9yIERIQ1B2NiBpbiBzdGFydHVwIGxvZ2dpbmcuIFRoYW5rcyB0byAKKwlWbGFkaXNsYXYgR3Jpc2hlbmtvIGZvciB0aGUgcGF0Y2guCisKKwlBZGQgU2V0U2VydmVyc0V4IG1ldGhvZCBpbiBEQnVzIGludGVyZmFjZS4gVGhhbmtzIHRvIERhbgorCVdpbGxpYW1zIGZvciB0aGUgcGF0Y2guCisKKwlBZGQgU2V0RG9tYWluU2VydmVycyBtZXRob2QgaW4gREJ1cyBpbnRlcmZhY2UuIFRoYW5rcyB0bworCVJveSBNYXJwbGVzIGZvciB0aGUgcGF0Y2guCisKKwlGaXggYnVpbGQgd2l0aCBsYXRlciBMdWEgbGlicmFyaWVzLiBUaGFua3MgdG8gQ3Jpc3RpYW4KKwlSb2RyaWd1ZXogZm9yIHRoZSBwYXRjaC4KKworCUFkZCAtLW1heC1jYWNoZS10dGwgb3B0aW9uLiBUaGFua3MgdG8gRGVubmlzIEthYXJzZW1ha2VyCisJZm9yIHRoZSBwYXRjaC4KKworCUZpeCBicmVha2FnZSBvZiAtLWhvc3QtcmVjb3JkIHBhcnNpbmcsIHJlc3VsdGluZyBpbgorCWluZmluaXRlIGxvb3AgYXQgc3RhcnR1cC4gUmVncmVzc2lvbiBpbiAyLjYzLiBUaGFua3MgdG8KKwlIYWltIEdlbGZlbmJleW4gZm9yIHNwb3R0aW5nIHRoaXMuCisKKwlTZXQgU09fUkVVU0VBRERSRVNTIGFuZCBTT19WNk9OTFkgb3B0aW9ucyBvbiB0aGUgREhDUHY2CisJc29ja2V0LCB0aGlzIGFsbG93cyBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgZG5zbWFzcSBvbiBhCisJc2luZ2xlIG1hY2hpbmUsIGluIHRoZSBzYW1lIHdheSBhcyBmb3IgREhDUHY0LiBUaGFua3MgdG8KKwlHZW5lIEN6YXJjaW5za2kgYW5kIFZsYWRpc2xhdiBHcmlzaGVua28gZm9yIHdvcmsgb24gdGhpcy4KKworCUZpeCBESENQdjYgdG8gZG8gYWNjZXNzIGNvbnRyb2wgY29ycmVjdGx5IHdoZW4gaXQncyAKKwljb25maWd1cmVkIHdpdGggLS1saXN0ZW4tYWRkcmVzcy4gVGhhbmtzIHRvCisJR2VuZSBDemFyY2luc2tpIGZvciBzb3J0aW5nIHRoaXMgb3V0LiAKKworCUFkZCBhICJ3aWxkY2FyZCIgZGhjcC1yYW5nZSB3aGljaCB3b3JrcyBmb3IgYW55IElQdjYKKwlzdWJuZXQsIC0tZGhjcC1yYW5nZT06OixzdGF0aWMgVXNlZnVsIGZvciBTdGF0ZWxlc3MgCisJREhDUHY2LiBUaGFua3MgdG8gVmxhZGlzbGF2IEdyaXNoZW5rbyBmb3IgdGhlIHBhdGNoLgorCisJRG9uJ3QgaW5jbHVkZSBsZWFzZS10aW1lIGluIERIQ1BBQ0sgcmVwbGllcyB0byBESENQSU5GT1JNCisJcXVlcmllcywgc2luY2UgUkZDLTIxMzEgc2F5cyB3ZSBzaG91bGRuJ3QuIFRoYW5rcyB0bworCVdvdXRlciBJYmVucyBmb3IgcG9pbnRpbmcgdGhpcyBvdXQuICAKKworCU1ha2VmaWxlIHR3ZWFrIHRvIGRvIGRlcGVuZGVuY3kgY2hlY2tpbmcgb24gaGVhZGVyIGZpbGVzLgorCVRoYW5rcyB0byBKb2hhbiBQZWV0ZXJzIGZvciB0aGUgcGF0Y2guCisKKwlDaGVjayBpbnRlcmZhY2UgZm9yIG91dGdvaW5nIHVuc29saWNpdGVkIHJvdXRlciAKKwlhZHZlcnRpc2VtZW50cywgcmF0aGVyIHRoYW4gcmVseWluZyBvbiBpbnRlcmZhY2UgYWRkcmVzcyAKKwljb25maWd1cmF0aW9uLiBUaGFua3MgdG8gR2VuZSBDemFyaW5za2kgZm9yIHRoZSBwYXRjaC4KKworCUhhbmRsZSBiZXR0ZXIgYXR0ZW1wdHMgdG8gdHJhbnNtaXQgb24gaW50ZXJmYWNlcyB3aGljaCBhcmUKKwlzdGlsbCBkb2luZyBEQUQsIGFuZCBzcGVjaWZpY2FsbHkgZG8gbm90IGp1c3QgdHJhbnNtaXQKKwl3aXRob3V0IHNldHRpbmcgc291cmNlIGFkZHJlc3MgYW5kIGludGVyZmFjZSwgc2luY2UgdGhpcworCWNhbiBjYXVzZSB2ZXJ5IHB1enpsaW5nIGVmZmVjdHMgd2hlbiBhIHJvdXRlcgorCWFkdmVydGlzZW1lbnQgZ29lcyBhc3RyYXkuIFRoYW5rcyBhZ2FpbiB0byBHZW5lIEN6YXJpbnNraS4KKworCUdldCBSQSB0aW1lcnMgcmlnaHQgd2hlbiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lCisJZGhjcC1yYW5nZSBvbiBhIHN1Ym5ldC4KKworCit2ZXJzaW9uIDIuNjMKKwlEbyBkdXBsaWNhdGUgZGhjcC1ob3N0IGFkZHJlc3MgY2hlY2sgaW4gLS10ZXN0IG1vZGUuCisKKwlDaGVjayB0aGF0IHRmdHAtcm9vdCBkaXJlY3RvcmllcyBhcmUgYWNjZXNzaWJsZSBiZWZvcmUKKwlzdGFydC11cC4gVGhhbmtzIHRvIERhbmllbCBWZWlsbGFyZCBmb3IgdGhlIGluaXRpYWwgcGF0Y2guCisKKwlBbGxvdyBtb3JlIHRoYW4gb25lIC0tdGZwLXJvb3QgZmxhZy4gVGhlIHBlci1pbnRlcmZhY2UKKwlzdHVmZiBpcyBwb2ludGxlc3Mgd2l0aG91dCB0aGF0LgorCisJQWRkIC0tYmluZC1keW5hbWljLiBBIGh5YnJpZCBtb2RlIGJldHdlZW4gdGhlIGRlZmF1bHQgYW5kCisJLS1iaW5kLWludGVyZmFjZXMgd2hpY2ggY29wZXMgd2l0aCBkeW5hbWljYWxseSBjcmVhdGVkCisJaW50ZXJmYWNlcy4gCisKKwlBIGNvdXBsZSBvZiBmaXhlcyB0byB0aGUgYnVpbGQgc3lzdGVtIGZvciBBbmRyb2lkLiBUaGFua3MKKwl0byBNZXRpbiBLYXlhIGZvciB0aGUgcGF0Y2hlcy4KKworCVJlbW92ZSB0aGUgaW50ZXJmYWNlOjxpbnRlcmZhY2U+IGFyZ3VtZW50IGluIC0tZGhjcC1yYW5nZSwgYW5kCisJdGhlIGludGVyZmFjZSBhcmd1bWVudCB0byAtLWVuYWJsZS10ZnRwLiBUaGVzZSB3ZXJlIGEKKwlzdGlsbC1ib3JuIGF0dGVtcHQgdG8gYWxsb3cgYXV0b21hdGljIGlzb2xhdGVkCisJY29uZmlndXJhdGlvbiBieSBsaWJ2aXJ0LCBidXQgaGF2ZSBuZXZlciAodG8gbXkga25vd2xlZGdlKQorCWJlZW4gdXNlZCwgaGFkIHZlcnkgc3RyYW5nZSBzZW1hbnRpY3MsIGFuZCBoYXZlIGJlZW4KKwlzdXBlcnNlZGVkIGJ5IG90aGVyIG1lY2hhbmlzbXMuIAorCisJRml4ZWQgYnVnIGxvZ2dpbmcgZmlsZW5hbWVzIHdoZW4gZHVwbGljYXRlIGRoY3AtaG9zdAorCWFkZHJlc3NlcyBhcmUgZm91bmQuIFRoYW5rcyB0byBKb2huIEhhbmtzIGZvciB0aGUgcGF0Y2guCisKKwlGaXggcmVncmVzc2lvbiBpbiAyLjYxIHdoaWNoIGJyb2tlIGNhY2hpbmcgb2YgQ05BTUUKKwljaGFpbnMuIFRoYW5rcyB0byBBdHVsIEd1cHRhIGZvciB0aGUgYnVnIHJlcG9ydC4KKworCUFsbG93IHRoZSB0YXJnZXQgb2YgYSAtLWNuYW1lIGZsYWcgdG8gYmUgYW5vdGhlciAtLWNuYW1lLgorCisJVGVhY2ggREhDUHY2IGFib3V0IHRoZSBSRkMgNDI0MiBpbmZvcm1hdGlvbi1yZWZyZXNoLXRpbWUKKwlvcHRpb24sIGFuZCBhZGQgcGFyc2luZyBpZiB0aGUgbWludXRlcywgaG91cnMgYW5kIGRheXMKKwlmb3JtYXQgZm9yIG9wdGlvbnMuIFRoYW5rcyB0byBGcmFuY29pcy1YYXZpZXIgTGUgQmFpbCBmb3IKKwl0aGUgc3VnZ2VzdGlvbi4KKworCUFsbG93ICJ3IiAoZm9yIHdlZWspIGFzIG11bHRpcGxpZXIgaW4gbGVhc2UgdGltZXMsIGFzIHdlbGwKKwlhcyBzZWNvbmRzLCBtaW51dGVzLCBob3VycyBhbmQgZGF5cy4gIMOBbHZhcm8gR8OhbWV6IE1hY2hhZG8gCisJc3BvdHRlZCB0aGUgb21pc3Npb24uCisKKwlVcGRhdGUgRnJlbmNoIHRyYW5zbGF0aW9uLiBUaGFua3MgdG8gR2lsZGFzIExlIE5hZGFuLgorCisJQWxsb3cgYSBEQnVzIHNlcnZpY2UgbmFtZSB0byBiZSBnaXZlbiB3aXRoIC0tZW5hYmxlLWRidXMKKwl3aGljaCBvdmVycmlkZXMgdGhlIGRlZmF1bHQsCisJdWsub3JnLnRoZWtlbGxleXMuZG5zbWFzcS4gVGhhbmtzIHRvIE1hdGhpZXUKKwlUcnVkZWwtTGFwaWVycmUgZm9yIHRoZSBwYXRjaC4gCisKKwlTZXQgdGhlICJwcmVmaXggb24tbGluayIgYml0IGluIFJvdXRlcgorCUFkdmVydGlzZW1lbnRzLiBUaGFua3MgdG8gR3VpIElyaWJhcnJlbiBmb3IgdGhlIHBhdGNoLgorCisKK3ZlcnNpb24gMi42MgorCVVwZGF0ZSBHZXJtYW4gdHJhbnNsYXRpb24uIFRoYW5rcyB0byBDb25yYWQgS29zdGVja2kuCisKKwlDb3BlIHdpdGggcm91dGVyLXNvbGljdCBwYWNrZXRzIHdoaWNoIGRvbid0IGhhdmUgYSB2YWxpZCAKKwlzb3VyY2UgYWRkcmVzcy4gVGhhbmtzIHRvIFZsYWRpc2xhdiBHcmlzaGVua28gZm9yIHRoZSBwYXRjaC4KKworCUZpeGVkIGJ1ZyB3aGljaCBjYXVzZWQgbWlzc2luZyBwZXJpb2RpYyByb3V0ZXIKKwlhZHZlcnRpc2VtZW50cyB3aXRoIHNvbWUgY29uZmlndXJhdGlvbnMuIFRoYW5rcyB0bworCVZsYWRpc2xhdiBHcmlzaGVua28gZm9yIHRoZSBwYXRjaC4KKworCUZpeGVkIGJ1ZyB3aGljaCBicm9rZSBESENQdjYvUkEgd2l0aCBwcmVmaXggbGVuZ3RocyAKKwl3aGljaCBhcmUgbm90IGRpdmlzaWJsZSBieSA4LiBUaGFua3MgdG8gQW5kcmUgQ29ldHplZSAKKwlmb3Igc3BvdHRpbmcgdGhpcy4KKworCUZpeCBub24tcmVzcG9uc2UgdG8gcm91dGVyLXNvbGljaXRhdGlvbnMgd2hlbgorCXJvdXRlci1hZHZlcnRpc2VtZW50IGNvbmZpZ3VyZWQsIGJ1dCBESENQdjYgbm90CisJY29uZmlndXJlZC4gVGhhbmtzIHRvIE1hcmllbiBad2FydCBmb3IgdGhlIHBhdGNoLgorCisJQWRkIC0tZG5zLXJyLCB0byBhbGxvdyBhcmJpdHJhcnkgRE5TIHJlc291cmNlIHJlY29yZHMuCisKKwlGaXhlZCBidWcgd2hpY2ggYnJva2UgUkEgc2NoZWR1bGluZyB3aGVuIGFuIGludGVyZmFjZSBoYWQKKwl0d28gYWRkcmVzc2VzIGluIHRoZSBzYW1lIG5ldHdvcmsuIFRoYW5rcyB0byBKaW0gQm9zIGZvcgorCWhpcyBoZWxwIG5haWxpbmcgdGhpcy4KKwordmVyc2lvbiAyLjYxCisJUmUtd3JpdGUgaW50ZXJmYWNlIGRpc2NvdmVyeSBjb2RlIG9uICpCU0QgdG8gdXNlCisJZ2V0aWZhZGRycy4gVGhpcyBpcyBtb3JlIHBvcnRhYmxlLCBtb3JlIHN0cmFpZ2h0Zm9yd2FyZCwKKwlhbmQgYWxsb3dzIHVzIHRvIGZpbmQgdGhlIHByZWZpeCBsZW5ndGggZm9yIElQdjYKKwlhZGRyZXNzZXMuCisKKwlBZGQgcmEtbmFtZXMsIHJhLXN0YXRlbGVzcyBhbmQgc2xhYWMga2V5d29yZHMgZm9yIERIQ1B2Ni4KKwlEbnNtYXNxIGNhbiBub3cgc3ludGhlc2lzZSBBQUFBIHJlY29yZHMgZm9yIGR1YWwtc3RhY2sgCisJaG9zdHMgd2hpY2ggZ2V0IElQdjYgYWRkcmVzc2VzIHZpYSBTTEFBQy4gSXQgaXMgYWxzbyBub3cgCisJcG9zc2libGUgdG8gdXNlIFNMQUFDIGFuZCBzdGF0ZWxlc3MgREhDUHY2LCBhbmQgdG8gCisJdGVsbCBjbGllbnRzIHRvIHVzZSBTTEFBQyBhZGRyZXNzZXMgYXMgd2VsbCBhcyBESENQIG9uZXMuCisJVGhhbmtzIHRvIERhdmUgVGFodCBmb3IgaGVscCB3aXRoIHRoaXMuCisKKwlBZGQgLS1kaGNwLWR1aWQgdG8gYWxsb3cgRFVJRC1FTiB1aWRzIHRvIGJlIHVzZWQuCisKKwlFeHBsaWNpdGx5IHNlbmQgREhDUHY2IHJlcGxpZXMgdG8gdGhlIGNvcnJlY3QgcG9ydCwgaW5zdGVhZAorCW9mIHJlbHlpbmcgb24gY2xpZW50cyB0byBzZW5kIHJlcXVlc3RzIHdpdGggdGhlIGNvcnJlY3QKKwlzb3VyY2UgYWRkcmVzcywgc2luY2UgYXQgbGVhc3Qgb25lIGNsaWVudCBpbiB0aGUgd2lsZCBnZXRzCisJdGhpcyB3cm9uZy4gVGhhbmtzIHRvIENvbnJhZCBLb3N0ZWNraSBmb3IgaGVscCB0cmFja2luZworCXRoaXMgZG93bi4KKworCVNlbmQgYSBwcmVmZXJlbmNlIHZhbHVlIG9mIDI1NSBpbiBESENQdjYgcmVwbGllcyB3aGVuIAorCS0tZGhjcC1hdXRob3JpdGF0aXZlIGlzIGluIGVmZmVjdC4gVGhpcyB0ZWxscyBjbGllbnRzIG5vdAorCXRvIHdhaXQgYXJvdW5kIGZvciBvdGhlciBESENQIHNlcnZlcnMuCisKKwlCZXR0ZXIgbG9nZ2luZyBvZiBESENQdjYgb3B0aW9ucy4KKworCUFkZCAtLWhvc3QtcmVjb3JkLiBUaGFua3MgdG8gUm9iIFp3aXNzbGVyIGZvciB0aGUKKwlzdWdnZXN0aW9uLgorCisJSW52b2tlIHRoZSBESENQIHNjcmlwdCB3aXRoIGFjdGlvbiAidGZ0cCIgd2hlbiBhIFRGVFAgZmlsZQorCXRyYW5zZmVyIGNvbXBsZXRlcy4gVGhlIHNpemUgb2YgdGhlIGZpbGUsIGFkZHJlc3MgdG8gd2hpY2gKKwlpdCB3YXMgc2VudCBhbmQgY29tcGxldGUgcGF0aG5hbWUgYXJlIHN1cHBsaWVkLiBOb3RlIHRoYXQKKwl2ZXJzaW9uIDIuNjAgaW50cm9kdWNlZCBzb21lIHNjcmlwdCBpbmNvbXBhdGliaWxpdGllcworCWFzc29jaWF0ZWQgd2l0aCBESENQdjYsIGFuZCB0aGlzIGlzIGEgZnVydGhlciBjaGFuZ2UuIFRvCisJYmUgc2FmZSwgc2NyaXB0cyBzaG91bGQgaWdub3JlIHVua25vd24gYWN0aW9ucywgYW5kIGlmCisJbm90IElQdjYtYXdhcmUsIHNob3VsZCBleGl0IGlmIHRoZSBlbnZpcm9ubWVudAorCXZhcmlhYmxlIEROU01BU1FfSUFJRCBpcyBzZXQuIFRoZSB1c2UtY2FzZSBmb3IgdGhpcyBpcworCXRvIHRyYWNrIG5ldGJvb3QvaW5zdGFsbC4gIFN1Z2dlc3Rpb24gZnJvbSBTaGFudGFudQorCUdhZGdpbC4KKworCVVwZGF0ZSBjb250cmliL3BvcnQtZm9yd2FyZC9kbnNtYXNxLXBvcnRmb3J3YXJkIHRvIHJlZmxlY3QKKwl0aGUgYWJvdmUuCisKKwlTZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEROU01BU1FfTE9HX0RIQ1Agd2hlbiBydW5uaW5nCisJdGhlIHNjcmlwdCBpZCAtLWxvZy1kaGNwIGlzIGluIGVmZmVjdCwgc28gdGhhdCBzY3JpcHQgY2FuCisJdGF5bG9yIHRoZWlyIGxvZ2dpbmcgdmVyYm9zaXR5LiBTdWdnZXN0aW9uIGZyb20gTWFsdGUKKwlGb3JrZWwuCisKKwlBcnJhbmdlIHRoYXQgYWRkcmVzc2VzIHNwZWNpZmllZCB3aXRoIC0tbGlzdGVuLWFkZHJlc3MKKwl3b3JrIGV2ZW4gaWYgdGhlcmUgaXMgbm8gaW50ZXJmYWNlIGNhcnJ5aW5nIHRoZQorCWFkZHJlc3MuIFRoaXMgaXMgY2hpZWZseSB1c2VmdWwgZm9yIElQdjQgbG9vcGJhY2sKKwlhZGRyZXNzZXMsIHdoZXJlIGFueSBhZGRyZXNzIGluIDEyNy4wLjAuMC84IGlzIGEgdmFsaWQKKwlsb29wYmFjayBhZGRyZXNzLCBidXQgbm9ybWFsbHkgb25seSAxMjcuMC4wLjEgYXBwZWFycyBvbgorCXRoZSBsbyBpbnRlcmZhY2UuIFRoYW5rcyB0byBNYXRoaWV1IFRydWRlbC1MYXBpZXJyZSBmb3IKKwl0aGUgaWRlYSBhbmQgaW5pdGlhbCBwYXRjaC4gCisKKwlGaXggY3Jhc2gsIGludHJvZHVjZWQgaW4gMi42MCwgd2hlbiBhIERIQ1BJTkZPUk0gaXMKKwlyZWNlaXZlZCBmcm9tIGEgbmV0d29yayB3aGljaCBoYXMgbm8gdmFsaWQgZGhjcC1yYW5nZS4KKwlUaGFua3MgdG8gU3RlcGhhbmUgR2xvbmR1IGZvciB0aGUgYnVnIHJlcG9ydC4KKworCUFkZCBhIG5ldyBESENQIGxlYXNlIHRpbWUga2V5d29yZCwgImRlcHJlY2F0ZWQiIGZvcgorCS0tZGhjcC1yYW5nZS4gVGhpcyBpcyBvbmx5IHZhbGlkIGZvciBJUHY2LCBhbmQgc2V0cyB0aGUKKwlwcmVmZXJyZWQgbGVhc2UgdGltZSBmb3IgYm90aCBESENQIGFuZCBSQSB0byB6ZXJvLiBUaGUKKwllZmZlY3QgaXMgdGhhdCBjbGllbnRzIGNhbiBjb250aW51ZSB0byB1c2UgdGhlIGFkZHJlc3MgCisJZm9yIGV4aXN0aW5nIGNvbm5lY3Rpb25zLCBidXQgbmV3IGNvbm5lY3Rpb25zIHdpbGwgdXNlCisJb3RoZXIgYWRkcmVzc2VzLCBpZiB0aGV5IGV4aXN0LiBUaGlzIG1ha2VzIGhpdGxlc3MKKwlyZW51bWJlcmluZyBhdCBsZWFzdCBwb3NzaWJsZS4KKworCUZpeCBidWcgaW4gYWRkcmVzczZfYXZhaWxhYmxlKCkgd2hpY2ggY2F1c2VkIERIQ1B2NiBsZWFzZQorCWFjcXVpc2l0aW9uIHRvIGZhaWwgaWYgbW9yZSB0aGFuIG9uZSBkaGNwLXJhbmdlIGluIHVzZS4KKworCVByb3ZpZGUgUkROU1MgYW5kIEROU1NMIGRhdGEgaW4gcm91dGVyIGFkdmVydGlzZW1lbnRzLAorCXVzaW5nIHRoZSBzZXR0aW5ncyBwcm92aWRlZCBmb3IgREhDUCBvcHRpb25zCisJb3B0aW9uNjpkb21haW4tc2VhcmNoIGFuZCBvcHRpb242OmRucy1zZXJ2ZXIuCisKKwlUd2VhayBsb2dvL2Zhdmljb24uaWNvIHRvIGFkZCBzb21lIHRyYW5zcGFyZW5jeS4gVGhhbmtzIHRvCisJU2FtTFQgZm9yIHdvcmsgb24gdGhpcy4KKworCURvbid0IGNhY2hlIGRhdGEgZnJvbSBub24tcmVjdXJzaXZlIG5hbWVzZXJ2ZXJzLCBzaW5jZSBpdAorCW1heSBlcnJvbmVvdXNseSBsb29rIGxpa2UgYSB2YWxpZCBDTkFNRSB0byBhIG5vbi1leGlzdGVudAorCW5hbWUuIFRoYW5rcyB0byBCZW4gV2luc2xvdyBmb3IgZmluZGluZyB0aGlzLgorCisJQ2FsbCBTT19CSU5EVE9ERVZJQ0Ugb24gdGhlIERIQ1Agc29ja2V0KHMpIHdoZW4gZG9pbmcgREhDUAorCW9uIGV4YWN0bHkgb25lIGludGVyZmFjZSBhbmQgLS1iaW5kLWludGVyZmFjZXMgaXMgc2V0LiBUaGlzIAorCW1ha2VzIHRoZSBPcGVuU3RhY2sgdXNlLWNhc2Ugb2Ygb25lIGRuc21hc3EgcGVyIHZpcnR1YWwKKwlpbnRlcmZhY2Ugd29yay4gVGhpcyBpcyBvbmx5IGF2YWlsYWJsZSBvbiBMaW51eDsgaXQncyBub3QKKwlzdXBwb3J0ZWQgb24gb3RoZXIgcGxhdGZvcm1zLiBUaGFua3MgdG8gVmlzaHZhbmFuZGEgSXNoYXlhCisJYW5kIHRoZSBPcGVuU3RhY2sgdGVhbSBmb3IgdGhlIHN1Z2dlc3Rpb24uCisKKwlVcGRhdGVkIEZyZW5jaCB0cmFuc2xhdGlvbi4gVGhhbmtzIHRvIEdpbGRhcyBMZSBOYWRhbi4KKworCUdpdmUgY29ycmVjdCBmcm9tLWNhY2hlIGFuc3dlcnMgdG8gZXhwbGljaXQgQ05BTUUgcXVlcmllcy4KKwlUaGFua3MgdG8gUm9iIFp3aXNzbGVyIGZvciBzcG90dGluZyB0aGlzLgorCisJQWRkIC0tdGZ0cC1sb3dlcmNhc2Ugb3B0aW9uLiBUaGFua3MgdG8gT2xpdmVyIFJhdGggZm9yIHRoZQorCXBhdGNoLiAKKworCUVuc3VyZSB0aGF0IHRoZSBEQnVzIERoY3BMZWFzZVVwZGF0ZWQgZXZlbnRzIGFyZSBnZW5lcmF0ZWQKKwl3aGVuIGEgbGVhc2UgZ29lcyB0aHJvdWdoIElOSVRfUkVCT09UIHN0YXRlLCBldmVuIGlmIHRoZQorCWRoY3Atc2NyaXB0IGlzIG5vdCBpbiB1c2UuIFRoYW5rcyB0byBBbnRvYW5ldGEtRWNhdGVyaW5hCisJRW5lIGZvciB0aGUgcGF0Y2guCisKKwlGaXggZmFpbHVyZSBvZiBURlRQIG92ZXIgSVB2NCBvbiBPcGVuQlNEIHBsYXRmb3JtLiBUaGFua3MKKwl0byBCcmFkIFNtaXRoIGZvciBzcG90dGluZyB0aGlzLgorCisKK3ZlcnNpb24gMi42MAorCUZpeCBjb21waWxhdGlvbiBwcm9ibGVtIGluIE1hYyBPUyBYIExpb24uIFRoYW5rcyB0byBPbGFmCisJRmxlYmJlIGZvciB0aGUgcGF0Y2guCisKKwlGaXggREhDUCB3aGVuIHVzaW5nIC0tbGlzdGVuLWFkZHJlc3Mgd2l0aCBhbiBJUCBhZGRyZXNzCisJd2hpY2ggaXMgbm90IHRoZSBwcmltYXJ5IGFkZHJlc3Mgb2YgYW4gaW50ZXJmYWNlLgorCisJQWRkIC0tZGhjcC1jbGllbnQtdXBkYXRlIG9wdGlvbi4KKworCUFkZCBMdWEgaW50ZWdyYXRpb24uIERuc21hc3EgY2FuIG5vdyBleGVjdXRlIGEgREhDUAorCWxlYXNlLWNoYW5nZSBzY3JpcHQgd3JpdHRlbiBpbiBMdWEuIFRoaXMgbmVlZHMgdG8gYmUKKwllbmFibGVkIGF0IGNvbXBpbGUgdGltZSBieSBzZXR0aW5nIEhBVkVfTFVBU0NSSVBUIGluIAorCXNyYy9jb25maWcuaCBvciBydW5uaW5nICJtYWtlIENPUFRTPS1ESEFWRV9MVUFTQ1JJUFQiCisJVGhhbmtzIHRvIEphbi1QaWV0IE1lbnMgZm9yIHRoZSBpZGVhIGFuZCBwcm9vZi1vZi1jb25jZXB0IAorCWltcGxlbWVudGF0aW9uLgorCisJVGlkaWVkIHNyYy9jb25maWcuaCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuCisJcGxhdGZvcm0tZGVwZW5kZW50IGNvbXBpbGUtdGltZSBvcHRpb25zIHdoaWNoIGFyZSBzZWxlY3RlZAorCWF1dG9tYXRpY2FsbHksIGFuZCBidWlsZGVyLXNlbGVjdGFibGUgY29tcGlsZSB0aW1lCisJb3B0aW9ucy4gRG9jdW1lbnQgdGhlIGxhdHRlciBiZXR0ZXIsIGFuZCBkZXNjcmliZSBob3cgdG8KKwlzZXQgdGhlbSBmcm9tIHRoZSBtYWtlIGNvbW1hbmQgbGluZS4KKworCVRpZGllZCB1cCBJUFBST1RPX0lQL1NPTF9JUCAoYW5kIElQdjYgZXF1aXZhbGVudCkKKwljb25mdXNpb24uIElQUFJPVE9fSVAgd29ya3MgZXZlcnl3aGVyZSBub3cuCisKKwlTZXQgVE9TIG9uIERIQ1Agc29ja2V0cywgdGhpcyBpbXByb3ZlcyB0aGluZ3Mgb24gYnVzeQorCXdpcmVsZXNzIG5ldHdvcmtzLiBUaGFua3MgdG8gRGF2ZSBUYWh0IGZvciB0aGUgcGF0Y2guCisKKwlEZXRlcm1pbmUgVkVSU0lPTiBhdXRvbWF0aWNhbGx5IGJhc2VkIG9uIGdpdCBtYWdpYzoKKwlyZWxlYXNlIHRhZ3Mgb3IgaGFzaCB2YWx1ZXMuCisKKwlJbXByb3ZlIHN0YXJ0LXVwIHNwZWVkIHdoZW4gcmVhZGluZyBsYXJnZSBob3N0cyBmaWxlcyAKKwljb250YWluaW5nIG1hbnkgZGlzdGluY3QgYWRkcmVzc2VzLgorCisJRml4IHByb2JsZW0gaWYgZG5zbWFzcSBpcyBzdGFydGVkIHdpdGhvdXQgdGhlIHN0ZGluLAorCXN0ZG91dCBhbmQgc3RkZXJyIGZpbGUgZGVzY3JpcHRvcnMgb3Blbi4gVGhpcyBjYW4gbWFuaWZlc3QKKwlpdHNlbGYgYXMgMTAwJSBDUFUgdXNlLiBUaGFua3MgdG8gQ2hyaXMgTW9vcmUgZm9yIGZpbmRpbmcKKwl0aGlzLgorCisJRml4IHNoZWxsLXNjcmlwdGluZyBidWcgaW4gYmxkL3BrZy13cmFwcGVyLiBUaGFua3MgdG8gCisJTWFyayBNaXRjaGVsbCBmb3IgdGhlIHBhdGNoLgorCisJQWxsb3cgdGhlIFRGUCBzZXJ2ZXIgb3IgYm9vdCBzZXJ2ZXIgaW4gLS1weGUtc2VydmljZSwgdG8KKwliZSBhIGRvbWFpbiBuYW1lIGluc3RlYWQgb2YgYW4gSVAgYWRkcmVzcy4gVGhpcyBhbGxvd3MgZm9yCisJcm91bmQtcm9iaW4gdG8gbXVsdGlwbGUgc2VydmVycywgaW4gdGhlIHNhbWUgd2F5IGFzCisJLS1kaGNwLWJvb3QuIEEgZ29vZCBzdWdnZXN0aW9uIGZyb20gQ3Jpc3RpYW5vIEN1bWVyLgorCisJU3VwcG9ydCBCVUlMRERJUiB2YXJpYWJsZSBpbiB0aGUgTWFrZWZpbGUuIEFsbG93cyBidWlsZHMgCisJZm9yIG11bHRpcGxlIGFyY2hzIGZyb20gdGhlIHNhbWUgc291cmNlIHRyZWUgd2l0aCBlZy4KKwltYWtlIEJVSUxERElSPWxpbnV4ICAgICAgICAgICAgIChyZWxhdGl2ZSB0byBkbnNtYXNxIHRyZWUpCisJbWFrZSBCVUlMRERJUj0vdG1wL29wZW5ic2QgICAgICAoYWJzb2x1dGUgcGF0aCkKKwlJZiBCVUlMRERJUiBpcyBub3Qgc2V0LCBjb21waWxhdGlvbiBoYXBwZW5zIGluIHRoZSBzcmMKKwlkaXJlY3RvcnksIGFzIGJlZm9yZS4gU3VnZ2VzdGlvbiBmcm9tIE1hcmsgTWl0Y2hlbGwuCisKKwlTdXBwb3J0IERIQ1B2Ni4gU3VwcG9ydCBpcyB0aGVyZSBmb3IgdGhlIHNvcnQgb2YgdGhpbmdzCisJdGhlIGV4aXN0aW5nIHY0IHNlcnZlciBkb2VzLCBpbmNsdWRpbmcgdGFncywgb3B0aW9ucywgCisJc3RhdGljIGFkZHJlc3NlcyBhbmQgcmVsYXkgc3VwcG9ydC4gTWlzc2luZyBpcyBwcmVmaXggCisJZGVsZWdhdGlvbiwgd2hpY2ggaXMgcHJvYmFibHkgbm90IHJlcXVpcmVkIGluIHRoZSBkbnNtYXNxCisJbmljaGUsIGFuZCBhbiBlYXN5IHdheSB0byBhY2NlcHQgcHJlZml4IGRlbGVnYXRpb25zIGZyb20KKwlhbiB1cHN0cmVhbSBESENQdjYgc2VydmVyLCB3aGljaCBpcy4gRnV0dXJlIHBsYW5zIGluY2x1ZGUKKwlzdXBwb3J0IGZvciBESENQdjYgcm91dGVyIG9wdGlvbiBhbmQgTUFDIGFkZHJlc3Mgb3B0aW9uCisJKHRvIG1ha2Ugc2VsZWN0aW5nIGNsaWVudHMgYnkgTUFDIGFkZHJlc3Mgd29yayBsaWtlIElQdjQpLgorCVRoZXNlIHdpbGwgYmUgYWRkZWQgYXMgdGhlIHN0YW5kYXJkcyBtYXR1cmUuCisJVGhpcyBjb2RlIGhhcyBiZWVuIHRlc3RlZCwgYnV0IHRoaXMgaXMgdGhlIGZpcnN0IHJlbGVhc2UsCisJc28gZG9uJ3QgYmV0IHRoZSBmYXJtIG9uIGl0IGp1c3QgeWV0LiBNYW55IHRoYW5rcyB0byBhbGwgCisJdGVzdGVycyB3aG8gaGF2ZSBnb3QgaXQgdGhpcyBmYXIuCisKKwlTdXBwb3J0IElQdjYgcm91dGVyIGFkdmVydGlzZW1lbnRzLiBUaGlzIGlzIGEKKwlzaW1wbGUtbWluZGVkIGltcGxlbWVudGF0aW9uLCBhaW1lZCBhdCBwcm92aWRpbmcgdGhlCisJdmVzdGlnaWFsIFJBIG5lZWRlZCB0byBnbyBhbG9uZ3NpZGUgSVB2Ni4gSXMgcGlja3MgdXAKKwljb25maWd1cmF0aW9uIGZyb20gdGhlIERIQ1B2NiBjb25mLCBhbmQgc2hvdWxkIGp1c3QgbmVlZAorCWVuYWJsaW5nIHdpdGggLS1lbmFibGUtcmEuICAgCisKKwlGaXggbG9uZy1zdGFuZGluZyB3cmlua2xlIHdpdGggLS1sb2NhbGlzZS1xdWVyaWVzIHRoYXQKKwljb3VsZCByZXN1bHQgaW4gd3JvbmcgYW5zd2VycyB3aGVuIEROUyBwYWNrZXRzIGFycml2ZQorCXZpYSBhbiBpbnRlcmZhY2Ugb3RoZXIgdGhhbiB0aGUgZXhwZWN0ZWQgb25lLiBUaGFua3MgdG8gCisJTG9yZW56byBNaWxlc2kgYW5kIEpvaG4gSGFua3MgZm9yIHNwb3R0aW5nIHRoaXMgb25lLgorCisJVXBkYXRlIEZyZW5jaCB0cmFuc2xhdGlvbi4gVGhhbmtzIHRvIEdpbGRhcyBMZSBOYWRhbi4KKworCVVwZGF0ZSBQb2xpc2ggdHJhbnNsYXRpb24uIFRoYW5rcyB0byBKYW4gUHNvdGEuCisKKwordmVyc2lvbiAyLjU5CisJRml4IHJlZ3Jlc3Npb24gaW4gMi41OCB3aGljaCBjYXVzZWQgZmFpbHVyZSB0byBzdGFydCB1cAorCXdpdGggc29tZSBjb21iaW5hdGlvbnMgb2YgZG5zbWFzcSBjb25maWcgYW5kIElQdjYga2VybmVsCisJbmV0d29yayBjb25maWcuIFRoYW5rcyB0byBCcmllbGxlIEJydW5zIGZvciB0aGUgYnVnCisJcmVwb3J0LgorCisJSW1wcm92ZSBkbnNtYXNxJ3MgYmVoYXZpb3VyIHdoZW4gbmV0d29yayBpbnRlcmZhY2VzIGFyZQorCXN0aWxsIGRvaW5nIGR1cGxpY2F0ZSBhZGRyZXNzIGRldGVjdGlvbiAoREFEKS4gUHJldmlvdXNseSwKKwlkbnNtYXNxIHdvdWxkIHdhaXQgdXAgdG8gMjAgc2Vjb25kcyBhdCBzdGFydC11cCBmb3IgdGhlCisJREFEIHN0YXRlIHRvIHRlcm1pbmF0ZS4gVGhpcyBpcyBicm9rZW4gZm9yIGJyaWRnZQorCWludGVyZmFjZXMgb24gcmVjZW50IExpbnV4IGtlcm5lbHMsIHdoaWNoIGRvbid0IHN0YXJ0IERBRAorCXVudGlsIHRoZSBicmlkZ2UgY29tZXMgdXAsIGFuZCBzbyBjYW4gdGFrZSBhcmJpdHJhcnkKKwl0aW1lLiBUaGUgbmV3IGJlaGF2aW91ciBsZXRzIGRuc21hc3EgcG9sbCBmb3IgYW4gYXJiaXRyYXJ5CisJdGltZSB3aGlsc3QgcHJvdmlkaW5nIHNlcnZpY2Ugb24gb3RoZXIgaW50ZXJmYWNlcy4gVGhhbmtzCisJdG8gU3RlcGhlbiBIZW1taW5nZXIgZm9yIHBvaW50aW5nIG91dCB0aGUgcHJvYmxlbS4KKworCit2ZXJzaW9uIDIuNTgKKwlQcm92aWRlIGEgZGVmaW5pdGlvbiBvZiB0aGUgU0FfU0laRSBtYWNybyB3aGVyZSBpdCdzIAorCW1pc3NpbmcuIEZpeGVzIGJ1aWxkIGZhaWx1cmUgb24gb3BlbkJTRC4KKworCURvbid0IGluY2x1ZGUgYSB6ZXJvIHRlcm1pbmF0b3IgYXQgdGhlIGVuZCBvZiBtZXNzYWdlcworCXNlbnQgdG8gL2Rldi9sb2cgd2hlbiAvZGV2L2xvZyBpcyBhIGRhdGFncmFtIHNvY2tldC4KKwlUaGFua3MgdG8gRGlkaWVyIFJhYm91bmQgZm9yIHNwb3R0aW5nIHRoZSBwcm9ibGVtLgorCisJQWRkIC0tZGhjcC1zZXF1ZW50aWFsLWlwIGZsYWcsIHRvIGZvcmNlIGFsbG9jYXRpb24gb2YgSVAKKwlhZGRyZXNzZXMgaW4gYXNjZW5kaW5nIG9yZGVyLiBOb3RlIHRoYXQgdGhlIGRlZmF1bHQKKwlwc2V1ZG8tcmFuZG9tIG1vZGUgaXMgaW4gZ2VuZXJhbCBiZXR0ZXIgYnV0IHNvbWUKKwlzZXJ2ZXItZGVwbG95bWVudCBhcHBsaWNhdGlvbnMgbmVlZCB0aGlzLgorCisJRml4IHByb2JsZW0gd2hlcmUgYSBzZXJ2ZXItaWQgb2YgMC4wLjAuMCBpcyBzZW50IHRvIGEKKwljbGllbnQgd2hlbiBhIGRoY3AtcmVsYXkgaXMgaW4gdXNlIGlmIGEgY2xpZW50IHJlbmV3cyBhCisJbGVhc2UgYWZ0ZXIgZG5zbWFzcSByZXN0YXJ0IGFuZCBiZWZvcmUgYW55IGNsaWVudHMgb24gdGhlCisJc3VibmV0IGdldCBhIG5ldyBsZWFzZS4gVGhhbmtzIHRvIE1pa2UgUnVpeiBmb3IgYXNzaXN0YW5jZQorCWluIGNoYXNpbmcgdGhpcyBvbmUgZG93bi4gCisKKwlEb24ndCByZXR1cm4gTlhET01BSU4gdG8gYW4gQUFBQSBxdWVyeSBpZiB3ZSBoYXZlIENOQU1FCisJd2hpY2ggcG9pbnRzIHRvIGFuIEEgcmVjb3JkIG9ubHk6IE5PREFUQSBpcyB0aGUgY29ycmVjdAorCXJlcGx5IGluIHRoaXMgY2FzZS4gVGhhbmtzIHRvIFRvbSBGZXJuYW5kZXMgZm9yIHNwb3R0aW5nCisJdGhlIHByb2JsZW0uCisKKwlSZWxheCB0aGUgbmVlZCB0byBzdXBwbHkgYSBuZXRtYXNrIGluIC0tZGhjcC1yYW5nZSBmb3IKKwluZXR3b3JrcyB3aGljaCB1c2UgYSBESENQIHJlbGF5LiBXaGlsc3QgdGhpcyBpcyBzdGlsbAorCWRlc2lyYWJsZSwgaW4gdGhlIGFic2VuY2Ugb2YgYSBuZXRtYXNrIGRuc21hc3Egd2lsbCB1c2UKKwlhIGRlZmF1bHQgYmFzZWQgb24gdGhlIGNsYXNzIChBLCBCLCBvciBDKSBvZiB0aGUgYWRkcmVzcy4gCisJVGhpcyBzaG91bGQgYXQgbGVhc3QgcmVtb3ZlIGEgY2F1c2Ugb2YgbXlzdGVyaW91cyBmYWlsdXJlIAorCWZvciBwZW9wbGUgdXNpbmcgUkZDMTkxOCBhZGRyZXNzZXMgYW5kIHJlbGF5cy4KKworCUFkZCBzdXBwb3J0IGZvciBMaW51eCBjb25udHJhY2sgY29ubmVjdGlvbiBtYXJraW5nLiBJZiAKKwllbmFibGVkIHdpdGggLS1jb25udHJhY2ssIHRoZSBjb25uZWN0aW9uIG1hcmsgZm9yIGluY29taW5nCisJRE5TIHF1ZXJpZXMgd2lsbCBiZSBjb3BpZWQgIHRvIHRoZSBvdXRnb2luZyBjb25uZWN0aW9ucworCXVzZWQgdG8gYW5zd2VyIHRob3NlIHF1ZXJpZXMuIFRoaXMgYWxsb3dzIGNsZXZlciBmaXJld2FsbAorCWFuZCBhY2NvdW50aW5nIHN0dWZmLiBPbmx5IGF2YWlsYWJsZSBpZiBkbnNtYXNxIGlzCisJY29tcGlsZWQgd2l0aCBIQVZFX0NPTk5UUkFDSyBhbmQgYWRkcyBhIGRlcGVuZGVuY3kgb24gCisJbGlibmV0ZmlsdGVyLWNvbm50cmFjay4gVGhhbmtzIHRvIEVkIFdpbGRnb29zZSBmb3IgdGhlCisJaW5pdGlhbCBpZGVhLCB0ZXN0aW5nIGFuZCBzcG9uc29yc2hpcCBvZiB0aGlzIGZ1bmN0aW9uLgorCisJUHJvdmlkZSBhIHNhbmUgZXJyb3IgbWVzc2FnZSB3aGVuIHNvbWVvbmUgYXR0ZW1wdHMgdG8gCisJbWF0Y2ggYSB0YWcgaW4gLS1kaGNwLWhvc3QuCisKKwlUd2VhayB0aGUgYmVoYXZpb3VyIG9mIC0tZG9tYWluLW5lZWRlZCwgdG8gYXZvaWQgcHJvYmxlbXMKKwl3aXRoIHJlY3Vyc2l2ZSBuYW1lc2VydmVycyBkb3duc3RyZWFtIG9mIGRuc21hc3EuIFRoZSBuZXcKKwliZWhhdmlvdXIgb25seSBzdG9wcyBBIGFuZCBBQUFBIHF1ZXJpZXMsIGFuZCByZXR1cm5zCisJTk9EQVRBIHJhdGhlciB0aGFuIE5YRE9NQUlOIHJlcGxpZXMuIAorCisJRWZmaWNpZW5jeSBmaXggZm9yIHZlcnkgbGFyZ2UgREhDUCBjb25maWd1cmF0aW9ucywgdGhhbmtzCisJdG8gSmFtZXMgR2FydHJlbGwgYW5kIE1pa2UgUnVpeiBmb3IgaGVscCB3aXRoIHRoaXMuIAorCisJQWxsb3cgdGhlIFRGVFAtc2VydmVyIGFkZHJlc3MgaW4gLS1kaGNwLWJvb3QgdG8gYmUgYQorCWRvbWFpbi1uYW1lIHdoaWNoIGlzIGxvb2tlZCB1cCBpbiAvZXRjL2hvc3RzLiBUaGlzIGNhbiAKKwlnaXZlIG11bHRpcGxlIElQIGFkZHJlc3NlcyB3aGljaCBhcmUgdXNlZCByb3VuZC1yb2JpbiwKKwl0aHVzIGRvaW5nIFRGVFAgc2VydmVyIGxvYWQtYmFsYW5jaW5nLiBUaGFua3MgdG8gU3VzaGlsCisJQWdyYXdhbCBmb3IgdGhlIHBhdGNoLgorCisJV2hlbiB0d28gdGFnZ2VkIGRoY3Atb3B0aW9ucyBmb3IgYSBwYXJ0aWN1bGFyIG9wdGlvbgorCW51bWJlciBhcmUgYm90aCB2YWxpZCwgdXNlIHRoZSBvbmUgd2hpY2ggaXMgdmFsaWQgd2l0aG91dAorCWEgdGFnIGZyb20gdGhlIGRoY3AtcmFuZ2UuIEFsbG93cyBvdmVycmlkaW5nIG9mIHRoZSB2YWx1ZQorCW9mIGEgREhDUCBvcHRpb24gZm9yIGEgcGFydGljdWxhciBob3N0IGFzIHdlbGwgYXMKKwlwZXItbmV0d29yayB2YWx1ZXMuICBTbyAKKwktLWRoY3AtcmFuZ2U9c2V0OmludGVyZmFjZTEsLi4uLi4uCisJLS1kaGNwLWhvc3Q9c2V0Om15aG9zdCwuLi4uLiAgCisJLS1kaGNwLW9wdGlvbj10YWc6aW50ZXJmYWNlMSxvcHRpb246bmlzLWRvbWFpbiwiZG9tYWluMSIgCisJLS1kaGNwLW9wdGlvbj10YWc6bXlob3N0LG9wdGlvbjpuaXMtZG9tYWluLCJkb21haW4yIiAKKwl3aWxsIHNldCB0aGUgTklTLWRvbWFpbiB0byBkb21haW4xIGZvciBob3N0cyBpbiB0aGUgcmFuZ2UsIGJ1dAorCW92ZXJyaWRlIHRoYXQgdG8gZG9tYWluMiBmb3IgYSBwYXJ0aWN1bGFyIGhvc3QuCisKKwlGaXggYnVnIHdoaWNoIHJlc3VsdGVkIGluIHRydW5jYXRlZCBmaWxlcyBhbmQgdGltZW91dHMgZm9yCisJc29tZSBURlRQIHRyYW5zZmVycy4gVGhlIGJ1ZyBvbmx5IG9jY3VycyB3aXRoIG5ldGFzY2lpCisJdHJhbnNmZXJzIGFuZCBuZWVkcyBhbiB1bmZvcnR1bmF0ZSByZWxhdGlvbnNoaXAgYmV0d2VlbgorCWZpbGUgc2l6ZSwgYmxvY2tzaXplIGFuZCB0aGUgbnVtYmVyIG9mIG5ld2xpbmVzIGluIHRoZQorCWxhc3QgYmxvY2sgYmVmb3JlIGl0IG1hbmlmZXN0cyBpdHNlbGYuIE1hbnkgdGhhbmtzIHRvIAorCUFsa2lzIEdlb3Jnb3BvdWxvcyBmb3Igc3BvdHRpbmcgdGhlIHByb2JsZW0gYW5kIHByb3ZpZGluZworCWEgY29tcHJlaGVuc2l2ZSB0ZXN0LWNhc2UuIAorCisJRml4IHJlZ3Jlc3Npb24gaW4gVEZUUCBzZXJ2ZXIgb24gKkJTRCBwbGF0Zm9ybXMgaW50cm9kdWNlZAorCWluIHZlcnNpb24gMi41NiwgZHVlIHRvIGNvbmZ1c2lvbiB3aXRoIHNvY2thZGRyCisJbGVuZ3RoLiBNYW55IHRoYW5rcyB0byBMb2ljIFBlZmZlcmtvcm4gZm9yIGZpbmRpbmcgdGhpcy4KKworCVN1cHBvcnQgc2NvcGUtaWRzIGluIElQdjYgYWRkcmVzc2VzIG9mIG5hbWVzZXJ2ZXJzIGZyb20KKwkvZXRjL3Jlc29sdi5jb25mIGFuZCBpbiAtLXNlcnZlciBvcHRpb25zLiBFZworCW5hbWVzZXJ2ZXIgZmU4MDo6MjAyOmE0MTI6NDUxMjo3YmJmJWV0aDAgb3IKKwlzZXJ2ZXI9ZmU4MDo6MjAyOmE0MTI6NDUxMjo3YmJmJWV0aDAuIFRoYW5rcyB0byAKKwlNaWNoYWVsIFN0YXBlbGJlcmcgZm9yIHRoZSBzdWdnZXN0aW9uLgorCisJVXBkYXRlIFBvbGlzaCB0cmFuc2xhdGlvbiwgdGhhbmtzIHRvIEphbiBQc290YS4KKworCVVwZGF0ZSBGcmVuY2ggdHJhbnNsYXRpb24uIFRoYW5rcyB0byBHaWxkYXMgTGUgTmFkYW4uCisKKwordmVyc2lvbiAyLjU3CisJQWRkIHBhdGNoZXMgdG8gYWxsb3cgYnVpbGQgdW5kZXIgQW5kcm9pZC4KKworCVByb3ZpZGUgb3VyIG93biBoZWFkZXIgZm9yIHRoZSBETlMgcHJvdG9jb2wsIHJhdGhlciB0aGFuCisJcmVseWluZyBvbiBhcnBhL25hbWVzZXIuaC4gVGhpcyBoYXMgcHJvdmVkIG1vcmUgb3IgbGVzcworCWRlZmVjdGl2ZSBvdmVyIHRoZSB5ZWFycyBhbmQgdGhlIGZpbmFsIHN0cmF3IGlzIHRoYXQgaXQncworCWVmZmVjdGl2ZWx5IGVtcHR5IG9uIEFuZHJvaWQuCisKKwlGaXggcmVncmVzc2lvbiBpbiAyLjU2IHdoaWNoIGNhdXNlZCBoZXggY29uc3RhbnRzIGluCisJY29uZmlndXJhdGlvbiB0byBiZSByZWplY3RlZCBpZiB0aGV5IGNvbnRhaW4gdGhlICcqJworCXdpbGRjYXJkLgorCisJQ29ycmVjdCB3cm9uZyBjYXN0cyBvZiBhcmd1bWVudHMgdG8gY3R5cGUuaCBmdW5jdGlvbnMsCisJaXNkaWdpdCgpLCBpc3hkaWdpdCgpIGV0Yy4gVGhhbmtzIHRvIE1hdHRoaWFzIEFuZHJlZSBmb3IKKwlzcG90dGluZyB0aGlzLgorCisJQWxsb3cgYnVpbGQgd2l0aCBJRE4gc3VwcG9ydCBpbmRlcGVuZGVudGx5IGZyb20gaTE4bi4gCisJSUROIHN1cHBvcnQgY29udGludWVzIHRvIGJlIGluY2x1ZGVkIGF1dG9tYXRpY2FsbHkgCisJd2hlbiBpMThuIGlzIGluY2x1ZGVkLiAKKwknbWFrZSBDT1BUUz0tREhBVkVfSUROJyBpcyB0aGUgbWFnaWMgaW5jYW50YXRpb24uIAorCisJTW9kaWZ5IGNoZWNrIG9uIGV4dHJhbmVvdXMgY29tbWFuZCBsaW5lIGp1bmsgKGFkZGVkIGluCisJMi41Nikgc28gdGhhdCBpdCBkb2Vzbid0IGNvbXBsYWluIGFib3V0IGV4dHJhIF9lbXB0eV8gCisJYXJndW1lbnRzLiBPdGhlcndpc2UgdGhpcyBicmVha3MgbGlidmlydC4KKworCit2ZXJzaW9uIDIuNTYKKwlBZGQgYSBwYXRjaCB0byBhbGxvdyBkbnNtYXNxIHRvIGdldCBpbnRlcmZhY2UgbmFtZXMgcmlnaHQgaW4gYQorCVNvbGFyaXMgem9uZS4gVGhhbmtzIHRvIERqIFBhZHplbnNreSBmb3IgdGhpcy4KKworCUltcHJvdmUgZGF0YS10eXBlIHBhcnNpbmcgaGV1cmlzdGljcyBzbyB0aGF0CisJLS1kaGNwLW9wdGlvbj1vcHRpb246ZG9tYWluLXNlYXJjaCwuIAorCXRyZWF0cyB0aGUgdmFsdWUgYXMgYSBzdHJpbmcgYW5kIG5vdCBhbiBJUCBhZGRyZXNzLgorCVRoYW5rcyB0byBDbGVtZW5zIEZpc2NoZXIgZm9yIHNwb3R0aW5nIHRoYXQuCisKKwlBZGQgSVB2NiBzdXBwb3J0IHRvIHRoZSBURlRQIHNlcnZlci4gTWFueSB0aGFua3MgdG8gSmFuIAorCSdSZWRCdWxseScgU2VpZmZlcnQgZm9yIHRoZSBwYXRjaGVzLgorCisJTG9nIEROUyBxdWVyaWVzIGF0IGxldmVsIExPR19JTkZPLCByYXRoZXIgdGhlbgorCUxPR19ERUJVRy4gVGhpcyBtYWtlcyB0aGluZ3MgY29uc2lzdGVudCB3aXRoIERIQ1AKKwlsb2dnaW5nLiBUaGFua3MgdG8gQWRhbSBQcmlieWwgZm9yIHNwb3R0aW5nIHRoZSBwcm9ibGVtLgorCisJRW5zdXJlIHRoYXQgZG5zbWFzcSB0ZXJtaW5hdGVzIGNsZWFubHkgd2hlbiB1c2luZworCS0tc3lzbG9nLWFzeW5jIGV2ZW4gaWYgaXQgY2Fubm90IG1ha2UgYSBjb25uZWN0aW9uIHRvIHRoZQorCXN5c2xvZ2QuCisKKwlBZGQgLS1hZGQtbWFjIG9wdGlvbi4gVGhpcyBpcyB0byBzdXBwb3J0IGN1cnJlbnRseSAKKwlleHBlcmltZW50YWwgRE5TIGZpbHRlcmluZyBmYWNpbGl0aWVzLiBUaGFua3MgdG8gQmVuamFtaW4KKwlQZXRyaW4gZm9yIHRoZSBvcmlnaW5hbCBwYXRjaC4gCisKKwlGaXggYnVnIHdoaWNoIG1lYW50IHRoYXQgdGFncyB3ZXJlIGlnbm9yZWQgaW4gZGhjcC1yYW5nZQorCWNvbmZpZ3VyYXRpb24gc3BlY2lmeWluZyBQWEUtcHJveHkgc2VydmljZS4gVGhhbmtzIHRvCisJQ3Jpc3RpYW5vIEN1bWVyIGZvciBzcG90dGluZyB0aGlzLgorCisJUmFpc2UgYW4gZXJyb3IgaWYgdGhlcmUgaXMgZXh0cmEganVuaywgbm90IHBhcnQgb2YgYW4KKwlvcHRpb24sIG9uIHRoZSBjb21tYW5kIGxpbmUuCisKKwlGbGFnIGEgY291cGxlIG9mIGxvZyBtZXNzYWdlcyBpbiBjYWNoZS5jIGFzIGNvbWluZyBmcm9tCisJdGhlIERIQ1Agc3Vic3lzdGVtLiBUaGFua3MgdG8gT2xhZiBXZXN0cmlrIGZvciB0aGUgcGF0Y2guCisKKwlPbWl0IHRpbWVzdGFtcHMgZnJvbSBsb2dzIHdoZW4gYSkgbG9nZ2luZyB0byBzdGRlcnIgYW5kIAorCWIpIC0ta2VlcC1pbi1mb3JlZ3JvdW5kIGlzIHNldC4gVGhlIGxvZ2dpbmcgZmFjaWxpdHkgb24gdGhlCisJb3RoZXIgZW5kIG9mIHN0ZGVyciBjYW4gYmUgYXNzdW1lZCB0byBzdXBwbHkgdGhlbS4gVGhhbmtzCisJdG8gSm9obiBIYWxsYW0gZm9yIHRoZSBwYXRjaC4KKworCURvbid0IGNvbXBsYWluIGFib3V0IHN0cmluZ3MgbG9uZ2VyIHRoYW4gMjU1IGNoYXJhY3RlcnMgaW4KKwktLXR4dC1yZWNvcmQsIGp1c3Qgc3BsaXQgdGhlIGxvbmcgc3RyaW5ncyBpbnRvIDI1NQorCWNoYXJhY3RlciBjaHVua3MgaW5zdGVhZC4KKworCUZpeCBjcmFzaCBvbiBkb3VibGUtZnJlZS4gVGhpcyBidWcgY2FuIG9ubHkgaGFwcGVuIHdoZW4KKwlkaGNwLXNjcmlwdCBpcyBpbiB1c2UgYW5kIHRoZW4gb25seSBpbiByYXJlIGNpcmN1bXN0YW5jZXMKKwl0cmlnZ2VyZWQgYnkgaGlnaCBESENQIHRyYW5zYWN0aW9uIHJhdGUgYW5kIGEgc2xvdworCXNjcmlwdC4gVGhhbmtzIHRvIEZlcmVuYyBXYWduZXIgZm9yIGZpbmRpbmcgdGhlIHByb2JsZW0uCisKKwlPbmx5IGxvZyB0aGF0IGEgZmlsZSBoYXMgYmVlbiBzZW50IGJ5IFRGVFAgYWZ0ZXIgdGhlCisJdHJhbnNmZXIgaGFzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuIAorCisJQSBnb29kIHN1Z2dlc3Rpb24gZnJvbSBGZXJlbmMgV2FnbmVyOiBleHRlbmQKKwl0aGUgLS1kb21haW4gb3B0aW9uIHRvIGFsbG93IHRoaXMgc29ydCBvZiB0aGluZzoKKwktLWRvbWFpbj10aGVrZWxsZXlzLm9yZy51aywxOTIuMTY4LjAuMC8yNCxsb2NhbAorCXdoaWNoIGF1dG9tYXRpY2FsbHkgY3JlYXRlcworCS0tbG9jYWw9L3RoZWtlbGxleXMub3JnLnVrLworCS0tbG9jYWw9LzAuMTY4LjE5Mi5pbi1hZGRyLmFycGEvIAorCisJVGlnaHRlbiB1cCBzeW50YXggY2hlY2tpbmcgb2YgaGV4IGNvbnN0YW50cyBpbiB0aGUgY29uZmlnCisJZmlsZS4gIFRoYW5rcyB0byBGcmVkIERhbWVuIGZvciBzcG90dGluZyB0aGlzLgorCisJQWRkIGRuc21hc3EgbG9nby9pY29uLCBjb250cmlidXRlZCBieSBKdXN0aW4gU3dpZnQuIE1hbnkKKwl0aGFua3MgZm9yIHRoYXQuCisKKwlOZXZlciBjYWNoZSBETlMgcmVwbGllcyB3aGljaCBoYXZlIHRoZSAnY2QnIGJpdCBzZXQsIG9yCisJd2hpY2ggcmVzdWx0IGZyb20gcXVlcmllcyBmb3J3YXJkZWQgd2l0aCB0aGUgJ2NkJyBiaXQKKwlzZXQuIFRoZSAnY2QnIGJpdCBpbnN0cnVjdHMgYSBETlNTRUMgdmFsaWRhdGluZyBzZXJ2ZXIKKwl1cHN0cmVhbSB0byBpZ25vcmUgc2lnbmF0dXJlIGZhaWx1cmVzIGFuZCByZXR1cm4gcmVwbGllcworCWFueXdheS4gV2l0aG91dCB0aGlzIGNoYW5nZSBpdCdzIHBvc3NpYmxlIHRvIHBvbGx1dGUgdGhlCisJZG5zbWFzcSBjYWNoZSB3aXRoIGJhZCBkYXRhIGJ5IG1ha2luZyBhIHF1ZXJ5IHdpdGggdGhlCisJJ2NkJyBiaXQgc2V0IGFuZCBzdWJzZXF1ZW50IHF1ZXJpZXMgd291bGQgcmV0dXJuIHRoaXMgZGF0YQorCXdpdGhvdXQgaXRzIGJlaW5nIG1hcmtlZCBhcyBzdXNwZWN0LiBUaGFua3MgdG8gQW5kZXJzCisJS2FzZW9yZyBmb3IgcG9pbnRpbmcgb3V0IHRoaXMgcHJvYmxlbS4KKworCUFkZCAtLXByb3h5LWRuc3NlYyBmbGFnLCBmb3IgY29tcGxpYW5jZSB3aXRoIFJGQworCTQwMzUuIERuc21hc3Egd2lsbCBub3cgY2xlYXIgdGhlICdhZCcgYml0IGluIGFuc3dlcnMgcmV0dXJuZWQKKwlmcm9tIHVwc3RyZWFtIHZhbGlkYXRpbmcgbmFtZXNlcnZlcnMgdW5sZXNzIHRoaXMgb3B0aW9uIGlzCisJc2V0LgorCisJQWxsb3cgYSBmaWxlbmFtZSBvZiAiLSIgZm9yIC0tY29uZi1maWxlIHRvIHJlYWQKKwlzdGRpbi4gU3VnZ2VzdGlvbiBmcm9tIFRpbW90aHkgUmVkYWVsbGkuCisKKwlSb3RhdGUgdGhlIG9yZGVyIG9mIFNSViByZWNvcmRzIGluIHJlcGxpZXMsIHRvIHByb3ZpZGUKKwlyb3VuZC1yb2JpbiBsb2FkIGJhbGFuY2luZyB3aGVuIGFsbCB0aGUgcHJpb3JpdGllcyBhcmUKKwllcXVhbC4gVGhhbmtzIHRvIFBldGVyIE1jS2lubmV5IGZvciB0aGUgc3VnZ2VzdGlvbi4gCisKKwlFZGl0CisJY29udHJpYi9NYWNPU1gtbGF1bmNoZC91ay5vcmcudGhla2VsbGV5cy5kbnNtYXNxLnBsaXN0IAorCXNvIHRoYXQgaXQgZG9lc24ndCBsb2cgYWxsIHF1ZXJpZXMgdG8gYSBmaWxlIGJ5CisJZGVmYXVsdC4gVGhhbmtzIGFnYWluIHRvIFBldGVyIE1jS2lubmV5LiAgICAKKworCUJ5IGRlZmF1bHQsIHNldHRpbmcgYW4gSVB2NCBhZGRyZXNzIGZvciBhIGRvbWFpbiBidXQgbm90CisJYW4gSVB2NiBhZGRyZXNzIGNhdXNlcyBkbnNtYXNxIHRvIHJldHVybgorCWFuIE5PREFUQSByZXBseSBmb3IgSVB2NiAob3IgdmljZS12ZXJzYSkuIFNvCisJLS1hZGRyZXNzPS9nb29nbGUuY29tLzEuMi4zLjQgc3RvcHMgSVB2NiBxdWVyaWVzIGZvcgorCSpnb29nbGUuY29tIGZyb20gYmVpbmcgZm9yd2FyZGVkLiBNYWtlIGl0IHBvc3NpYmxlIHRvCisJb3ZlcnJpZGUgdGhpcyBiZWhhdmlvdXIgYnkgZGVmaW5pbmcgdGhlIHNlbWFudGljcyBpZiB0aGUKKwlzYW1lIGRvbWFpbiBhcHBlYXJzIGluICBib3RoIC0tc2VydmVyIGFuZCAtLWFkZHJlc3MuCisJSW4gdGhhdCBjYXNlLCB0aGUgLS1hZGRyZXNzIGhhcyBwcmlvcml0eSBmb3IgdGhlIGFkZHJlc3MKKwlmYW1pbHkgaW4gd2hpY2ggaXMgYXBwZWFycywgYnV0IHRoZSAtLXNlcnZlciBoYXMgcHJpb3JpdHkKKwlvZiB0aGUgYWRkcmVzcyBmYW1pbHkgd2hpY2ggZG9lc24ndCBhcHBlYXIgaW4gLS1hZGRyZXNzICAKKwlTbzoKKwktLWFkZHJlc3M9L2dvb2dsZS5jb20vMS4yLjMuNAorCS0tc2VydmVyPS9nb29nbGUuY29tLyMKKwl3aWxsIHJldHVybiAxLjIuMy40IGZvciBJUHY0IHF1ZXJpZXMgZm9yICouZ29vZ2xlLmNvbSBidXQKKwlmb3J3YXJkIElQdjYgcXVlcmllcyB0byB0aGUgbm9ybWFsIHVwc3RyZWFtIG5hbWVzZXJ2ZXIuCisJU2ltaWxhcmx5IHdoZW4gc2V0dGluZyBhbiBJUHY2IGFkZHJlc3MKKwlvbmx5IHRoaXMgd2lsbCBhbGxvdyBmb3J3YXJkaW5nIG9mIElQdjQgcXVlcmllcy4gVGhhbmtzIHRvCisJV2lsbGlhbSBmb3IgcG9pbnRpbmcgb3V0IHRoZSBuZWVkIGZvciB0aGlzLgorCisJQWxsb3cgbW9yZSB0aGFuIG9uZSAtLWRoY3Atb3B0c2ZpbGUgYW5kIC0tZGhjcC1ob3N0c2ZpbGUKKwlhbmQgbWFrZSB0aGVtIHVuZGVyc3RhbmQgZGlyZWN0b3JpZXMgYXMgYXJndW1lbnRzIGluIHRoZQorCXNhbWUgd2F5IGFzIC0tYWRkbi1ob3N0cy4gU3VnZ2VzdGlvbiBmcm9tIEpvaG4gSGFua3MuIAorCisJSWdub3JlIHJlYmluZGluZyByZXF1ZXN0cyBmb3IgbGVhc2VzIHdlIGRvbid0IGtub3cKKwlhYm91dC4gUmViaW5kIGlzIGJyb2FkY2FzdCwgc28gd2UgbWlnaHQgZ2V0IHRvIG92ZXJoZWFyIGEKKwlyZXF1ZXN0IG1lYW50IGZvciBhbm90aGVyIERIQ1Agc2VydmVyLiBOQUtpbmcgdGhpcyBpcworCXdyb25nLiBUaGFua3MgdG8gQnJhZCBEJ0hvbmR0IGZvciBhc3Npc3RhbmNlIHdpdGggdGhpcy4KKworCUZpeCBjb3NtZXRpYyBidWcgd2hpY2ggcHJvZHVjZWQgc3RyYW5nZSBvdXRwdXQgd2hlbgorCWR1bXBpbmcgY2FjaGUgc3RhdGlzdGljcyB3aXRoIHNvbWUgY29uZmlndXJhdGlvbnMuIFRoYW5rcworCXRvIEZlZG9yIEtvemhldm5pa292IGZvciBzcG90dGluZyB0aGlzLgorCisKK3ZlcnNpb24gMi41NQorCUZpeCBjcmFzaCB3aGVuIC9ldGMvZXRoZXJzIGlzIGluIHVzZS4gVGhhbmtzIHRvIAorCUdpYW5sdWlnaSBUaWVzaSBmb3IgZmluZGluZyB0aGlzLgorCisJRml4IGNyYXNoIGluIG5ldGxpbmtfbXVsdGljYXN0KCkuIFRoYW5rcyB0byBBcm5vIFdhbGQgZm9yCisJZmluZGluZyB0aGlzIG9uZS4KKworCUFsbG93IHRoZSBlbXB0eSBkb21haW4gIi4iIGluIGRoY3AgZG9tYWluLXNlYXJjaCAoMTE5KQorCW9wdGlvbnMuIAorCisKK3ZlcnNpb24gMi41NAorCVRoZXJlIGlzIG5vIHZlcnNpb24gMi41NCB0byBhdm9pZCBjb25mdXNpb24gd2l0aCAyLjUzLAorCXdoaWNoIGluY29ycmVjdGx5IGlkZW50aWZpZXMgaXRzZWxmIGFzIDIuNTQuCisKKwordmVyc2lvbiAyLjUzCisJRml4IGZhaWx1cmUgdG8gY29tcGlsZSBvbiBEZWJpYW4va0ZyZWVCU0QuIFRoYW5rcyB0byAKKwlBeGVsIEJlY2tlcnQgYW5kIFBldHIgU2FsaW5nZXIuCisKKwlGaXggY29kZSB0byBhdm9pZCBzY2FyeSBzdHJpY3QtYWxpYXNpbmcgd2FybmluZ3MKKwlnZW5lcmF0ZWQgYnkgZ2NjIDQuNC4KKwkKKwlBZGRlZCBGQVEgZW50cnkgd2FybmluZyBhYm91dCBESENQIGZhaWx1cmVzIHdpdGggVmlzdGEKKwl3aGVuIGZpcmV3YWxscyBibG9jayAyNTUuMjU1LjI1NS4yNTUuCisJCisJRml4ZWQgYnVnIHdoaWNoIGNhdXNlZCBiYWQgdGhpbmdzIHRvIGhhcHBlbiBpZiBhIAorCXJlc29sdi5jb25mIGZpbGUgd2hpY2ggZXhpc3RzIGlzIHN1YnNlcXVlbnRseSByZW1vdmVkLgorCVRoYW5rcyB0byBOaWtvbGFpIFNhb3VraCBmb3IgdGhlIHBhdGNoLgorCisJUmF0aW9uYWxpc2VkIHRoZSBESENQIHRhZyBzeXN0ZW0uIEV2ZXJ5IGNvbmZpZ3VyYXRpb24gaXRlbQorCXdoaWNoIGNhbiBzZXQgYSB0YWcgZG9lcyBzbyBieSBhZGRpbmcgInNldDo8dGFnPiIgYW5kCisJZXZlcnkgY29uZmlndXJhdGlvbiBpdGVtIHdoaWNoIGlzIGNvbmRpdGlvbmFsIG9uIGEgdGFnIGlzCisJbWFkZSBzbyBieSAidGFnOjx0YWc+Ii4gVGhlIE5PVCBvcGVyYXRvciBjaGFuZ2VzIHRvICchJywKKwl3aGljaCBpcyBhIGJpdCBtb3JlIGludHVpdGl2ZSB0b28uIERoY3AtaG9zdCBkaXJlY3RpdmVzCisJY2FuIHNldCBtb3JlIHRoYW4gb25lIHRhZyBub3cuIFRoZSBvbGQgJyMnIE5PVCwgCisJIm5ldDoiIHByZWZpeCBhbmQgbm8tcHJlZml4ZXMgYXJlIHN0aWxsIGhvbm91cmVkLCBzbyAKKwlubyBleGlzdGluZyBjb25maWcgZmlsZSBuZWVkcyB0byBiZSBjaGFuZ2VkLCBidXQgCisJdGhlIGRvY3VtZW50YXRpb24gYW5kIG5ldy1zdHlsZSBjb25maWcgZmlsZXMgc2hvdWxkIGJlIAorCW11Y2ggbGVzcyBjb25mdXNpbmcuIAorCisJQWRkZWQgLS10YWctaWYgdG8gYWxsb3cgYm9vbGVhbiBvcGVyYXRpb25zIG9uIHRhZ3MuIAorCVRoaXMgYWxsb3dzIGNvbXBsaWNhdGVkIGxvZ2ljIHRvIGJlIGNsZWFyZXIgYW5kIG1vcmUgCisJZ2VuZXJhbC4gQSBncmVhdCBzdWdnZXN0aW9uIGZyb20gUmljaGFyZCBWb2lndC4gCisKKwlBZGQgYnJvYWRjYXN0L3VuaWNhc3QgaW5mb3JtYXRpb24gdG8gREhDUCBsb2dnaW5nLgorCisJQWxsb3cgLS1kaGNwLWJyb2FkY2FzdCB0byBiZSB1bmNvbmRpdGlvbmFsLgorCisJRml4ZWQgaW5jb3JyZWN0IGJlaGF2aW91ciB3aXRoIE5PVCA8dGFnPiBjb25kaXRpb25hbHMgaW4KKwlkaGNwLW9wdGlvbnMuIFRoYW5rcyB0byBNYXggVHVya2V3aXR6IGZvciBhc3Npc3RhbmNlCisJZmluZGluZyB0aGlzLgorCisJSWYgd2Ugc2VuZCB2ZW5kb3ItY2xhc3MgZW5jYXBzdWxhdGVkIG9wdGlvbnMgYmFzZWQgb24gdGhlCisJdmVuZG9yLWNsYXNzIHN1cHBsaWVkIGJ5IHRoZSBjbGllbnQsIGFuZCBubyBleHBsaWNpdCAKKwl2ZW5kb3ItY2xhc3Mgb3B0aW9uIGlzIGdpdmVuLCBlY2hvIGJhY2sgdGhlIHZlbmRvci1jbGFzcworCWZyb20gdGhlIGNsaWVudC4KKwkKKwlGaXggYnVnIHdoaWNoIHN0b3BwZWQgZG5zbWFzcSBmcm9tIG1hdGNoaW5nIGJvdGggYQorCWNpcmN1aXRpZCBhbmQgYSByZW1vdGVpZC4gVGhhbmtzIHRvIElnbmFjaW8gQnJhdm8gZm9yCisJZmluZGluZyB0aGlzLgorCisJQWRkIC0tZGhjcC1wcm94eSwgd2hpY2ggbWFrZXMgaXQgcG9zc2libGUgdG8gY29uZmlndXJlCisJZG5zbWFzcSB0byB1c2UgYSBESENQIHJlbGF5IGFnZW50IGFzIGEgZnVsbCBwcm94eSwgd2l0aAorCWFsbCBESENQIG1lc3NhZ2VzIHBhc3NpbmcgdGhyb3VnaCB0aGUgcHJveHkuIFRoaXMgaXMKKwl1c2VmdWwgaWYgdGhlIHJlbGF5IGFkZHMgZXh0cmEgaW5mb3JtYXRpb24gdG8gdGhlIHBhY2tldHMKKwlpdCBmb3J3YXJkcywgYnV0IGNhbm5vdCBiZSBjb25maWd1cmVkIHdpdGggdGhlIFJGQyA1MTA3IAorCXNlcnZlci1vdmVycmlkZSBvcHRpb24uCisKKwlBZGRlZCBpbnRlcmZhY2U6PGlmYWNlIG5hbWU+IHBhcnQgdG8gZGhjcC1yYW5nZS4gVGhlCisJc2VtYW50aWNzIG9mIHRoaXMgYXJlIHZlcnkgb2RkIGF0IGZpcnN0IHNpZ2h0LCBidXQgaXQKKwlhbGxvd3MgYSBzaW5nbGUgbGluZSAgb2YgdGhlIGZvcm0KKwlkaGNwLXJhbmdlPWludGVyZmFjZTp2aXJ0MCwxOTIuMTY4LjAuNCwxOTIuMTY4LjAuMjAwCisJdG8gYmUgYWRkZWQgdG8gZG5zbWFzcSBjb25maWd1cmF0aW9uIHdoaWNoIHRoZW4gc3VwcGxpZXMKKwlESENQIGFuZCBETlMgc2VydmljZXMgdG8gdGhhdCBpbnRlcmZhY2UsIHdpdGhvdXQgYWZmZWN0aW5nCisJd2hhdCBzZXJ2aWNlcyBhcmUgc3VwcGxpZWQgdG8gb3RoZXIgaW50ZXJmYWNlcyBhbmQgCisJaXJyZXNwZWN0aXZlIG9mIHRoZSBleGlzdGVuY2Ugb3IgbGFjayBvZiAKKwlpbnRlcmZhY2U9PGludGVyZmFjZT4gCisJbGluZXMgZWxzZXdoZXJlIGluIHRoZSBkbnNtYXNxIGNvbmZpZ3VyYXRpb24uIFRoZSBpZGVhIGlzCisJdGhhdCBzdWNoIGEgbGluZSBjYW4gYmUgYWRkZWQgYXV0b21hdGljYWxseSBieSBsaWJ2aXJ0CisJb3IgZXF1aXZhbGVudCBzeXN0ZW1zLCB3aXRob3V0IGRpc3R1cmJpbmcgYW55IG1hbnVhbAorCWNvbmZpZ3VyYXRpb24uCisKKwlTaW1pbGFybHkgdG8gdGhlIGFib3ZlLCBhbGxvdyAtLWVuYWJsZS10ZnRwPTxpbnRlcmZhY2U+CisKKwlBbGxvdyBhIFRGVFAgcm9vdCB0byBiZSBzZXQgc2VwYXJhdGVseSBmb3IgcmVxdWVzdHMgdmlhCisJZGlmZmVyZW50IGludGVyZmFjZXMsIC0tdGZ0cC1yb290PTxwYXRoPiw8aW50ZXJmYWNlPiAgICAgICAgICAgICAKKworCUNvcnJlY3RseSBoYW5kbGUgYW5kIGxvZyBjbGFzaGVzIGJldHdlZW4gQ05BTUVTIGFuZCAKKwlETlMgbmFtZXMgYmVpbmcgZ2l2ZW4gdG8gREhDUCBsZWFzZXMuIFRoaXMgZml4ZXMgYSBidWcgCisJd2hpY2ggY2F1c2VkIG5vbnNlbnNlIElQIGFkZHJlc3NlcyB0byBiZSBsb2dnZWQuIFRoYW5rcyB0byAKKwlTZXJnZWkgWmhpcmlrb3YgZm9yIGZpbmRpbmcgYW5kIGFuYWx5c2luZyB0aGUgcHJvYmxlbS4KKworCVR3ZWFrIGZsdXNoX2xvZyBzbyBhcyB0byBhdm9pZCBsZWF2aW5nIHRoZSBsb2cKKwlmaWxlIGluIG5vbi1ibG9ja2luZyBtb2RlLiBPX05PTkJMT0NLIGlzIGEgcHJvcGVydHkgb2YgdGhlCisJZmlsZSwgbm90IHRoZSBwcm9jZXNzL2Rlc2NyaXB0b3IuCisKKwlGaXggY29udHJpYi9Tb2xhcmlzMTAvY3JlYXRlX3BhY2thZ2UKKwkoL3Vzci9tYW4gLT4gL3Vzci9zaGFyZS9tYW4pIFRoYW5rcyB0byBWaXRhIEJhdHJsYS4KKworCUZpeCBhIHByb2JsZW0gd2hlcmUsIGlmIGEgY2xpZW50IGdvdCBhIGxlYXNlLCB0aGVuIHdlbnQKKwl0byBhbm90aGVyIHN1Ym5ldCBhbmQgZ290IGFub3RoZXIgbGVhc2UsIHRoZW4gbW92ZWQgYmFjaywKKwlpdCBjb3VsZG4ndCByZXN1bWUgdGhlIG9sZCBsZWFzZSwgYnV0IHdvdWxkIGluc3RlYWQgZ2V0IAorCWEgbmV3IGFkZHJlc3MuIFRoYW5rcyB0byBMZW9uYXJkbyBSb2RyaWd1ZXMgZm9yIHNwb3R0aW5nCisJdGhpcyBhbmQgdGVzdGluZyB0aGUgZml4LgorCisJRml4IHdlaXJkIGJ1ZyB3aGljaCBzb21ldGltZXMgb21pdHRlZCBjZXJ0YWluIGNoYXJhY3RlcnMKKwlmcm9tIHRoZSBzdGFydCBvZiBxdW90ZWQgc3RyaW5ncyBpbiBkaGNwLW9wdGlvbnMuIFRoYW5rcworCXRvIERheXRvbiBUdXJuZXIgZm9yIHNwb3R0aW5nIHRoZSBwcm9ibGVtLgorCisJQWRkIGZhY2lsaXR5IHRvIHJlZGlyZWN0IHNvbWUgZG9tYWlucyB0byB0aGUgc3RhbmRhcmQKKwl1cHN0cmVhbSBzZXJ2ZXJzOiB0aGlzIGFsbG93cyBzb21ldGhpbmcgbGlrZSAKKwktLXNlcnZlcj0vZ29vZ2xlLmNvbS8xLjIuMy40IC0tc2VydmVyPS93d3cuZ29vZ2xlLmNvbS8jCisJd2hpY2ggd2lsbCBzZW5kIHF1ZXJpZXMgZm9yICouZ29vZ2xlLmNvbSB0byAxLjIuMy40LAorCWV4Y2VwdCAqd3d3Lmdvb2dsZS5jb20gd2hpY2ggd2lsbCBiZSBmb3J3YXJkZWQgYXMgdXN1YWwuCisJVGhhbmtzIHRvIEFKIFdlYmVyIGZvciBwcm9tcHRpbmcgdGhpcyBhZGRpdGlvbi4KKworCUltcHJvdmUgdGhlIGhhc2gtYWxnb3JpdGhtIHVzZWQgdG8gZ2VuZXJhdGUgSVAgYWRkcmVzc2VzCisJZnJvbSBNQUMgYWRkcmVzc2VzIGR1cmluZyBpbml0aWFsIERIQ1AgYWRkcmVzcworCWFsbG9jYXRpb24uIFRoaXMgaW1wcm92ZXMgcGVyZm9ybWFuY2Ugd2hlbiBsYXJnZSBudW1iZXJzCisJb2YgaG9zdHMgd2l0aCBzaW1pbGFyIE1BQyBhZGRyZXNzZXMgYWxsIHRyeSBhbmQgZ2V0IGFuIElQCisJYWRkcmVzcyBhdCB0aGUgc2FtZSB0aW1lLiBUaGFua3MgdG8gUGF1bCBTbWl0aCBmb3IgaGlzCisJd29yayBvbiB0aGlzLgorCisJVHdlYWsgREhDUCBjb2RlIHNvIHRoYXQgLS1icmlkZ2UtaW50ZXJmYWNlIGNhbiBiZSB1c2VkIHRvCisJc2VsZWN0IHdoaWNoIElQIGFsaWFzIG9mIGFuIGludGVyZmFjZSBzaG91bGQgYmUgdXNlZCBmb3IKKwlESENQIHB1cnBvc2VzIG9uIExpbnV4LiBJZiBldGgwIGhhcyBhbiBhbGlhcyBldGgwOmRoY3AKKwl0aGVuIGFkZGluZyAgLS1icmlkZ2UtaW50ZXJmYWNlPWV0aDA6ZGhjcCxldGgwIHdpbGwgdXNlIAorCXRoZSBhZGRyZXNzIG9mIGV0aDA6ZGhjcCB0byBkZXRlcm1pbmUgdGhlIGNvcnJlY3Qgc3VibmV0IAorCWZvciBESENQIGFkZHJlc3MgYWxsb2NhdGlvbi4gVGhhbmtzIHRvIFBhd2VsIEdvbGFzemV3c2tpIAorCWZvciBwcm9tcHRpbmcgdGhpcyBhbmQgRXJpYyBDb29wZXIgZm9yIGZ1cnRoZXIgdGVzdGluZy4KKworCUFkZCAtLWRoY3AtZ2VuZXJhdGUtbmFtZXMuIFN1Z2dlc3Rpb24gYnkgRmVyZW5jIFdhZ25lci4KKworCVR3ZWFrIEROUyBzZXJ2ZXIgc2VsZWN0aW9uIGFsZ29yaXRobSB3aGVuIHRoZXJlIGlzIG1vcmUKKwl0aGFuIG9uZSBzZXJ2ZXIgYXZhaWxhYmxlIGZvciBhIGRvbWFpbiwgZWcuCisJLS1zZXJ2ZXI9L215ZG9tYWluLzEuMS4xLjEKKwktLXNlcnZlcj0vbXlkb21haW4vMi4yLjIuMgorCVRoYW5rcyB0byBBbGJlcnRvIEN1ZXN0YS1DYW5hZGEgZm9yIHNwb3R0aW5nIGEgd2Vha25lc3MKKwloZXJlLgorCisJQWRkIC0tbWF4LXR0bC4gVGhhbmtzIHRvIEZyZWRyaWsgUmluZ2VydHogZm9yIHRoZSBwYXRjaC4KKworCUFsbG93IC0tbG9nLWZhY2lsaXR5PS0gdG8gZm9yY2UgYWxsIGxvZ2dpbmcgdG8KKwlzdGRlcnIuIFN1Z2dlc3Rpb24gZnJvbSBDbGVtZW5zIEZpc2NoZXIuCisKKwlGaXggcmVncmVzc2lvbiB3aGljaCBjYXVzZWQgY29uZmlndXJhdGlvbiBsaWtlCisJLS1hZGRyZXNzPS8uZG9tYWluLmNvbS8xLjIuMy40IHRvIGJlIHJlamVjdGVkLiBUaGUgZG90IHRvIHRoZSAKKwlsZWZ0IG9mIHRoZSBkb21haW4gaGFzIGJlZW4gaW1wbGllZCBhbmQgbm90IHJlcXVpcmVkIGZvciBhCisJbG9uZyB0aW1lLCBidXQgaXQgc2hvdWxkIGJlIGFjY2VwdGVkIGZvciBiYWNrd2FyZAorCWNvbXBhdGliaWxpdHkuIFRoYW5rcyB0byBBbmRyZXcgQnVyY2luIGZvciBzcG90dGluZyB0aGlzLgorCisJQWRkIC0tcmViaW5kLWRvbWFpbi1vayBhbmQgLS1yZWJpbmQtbG9jYWxob3N0LW9rLgorCVN1Z2dlc3Rpb24gZnJvbSBDbGVtZW5zIEZpc2NoZXIuCisKKwlMb2cgcmVwbGllcyB0byBxdWVyaWVzIG9mIHR5cGUgVFhULCB3aGVuIC0tbG9nLXF1ZXJpZXMgCisJaXMgc2V0LgorCisJRml4IGNvbXBpbGVyIHdhcm5pbmdzIHdoZW4gY29tcGlsZWQgd2l0aCAtRE5PX0RIQ1AuIFRoYW5rcworCXRvIFNoYW50YW51IEdhZGdpbCBmb3IgdGhlIHBhdGNoLgorCisJVXBkYXRlZCBGcmVuY2ggdHJhbnNsYXRpb24uIFRoYW5rcyB0byBHaWxkYXMgTGUgTmFkYW4uCisKKwlVcGRhdGVkIFBvbGlzaCB0cmFuc2xhdGlvbi4gVGhhbmtzIHRvIEphbiBQc290YS4KKworCVVwZGF0ZWQgR2VybWFuIHRyYW5zbGF0aW9uLiBUaGFua3MgdG8gTWF0dGhpYXMgQW5kcmVlLgorCisJQWRkZWQgY29udHJpYi9zdGF0aWMtYXJwLCB0aGFua3MgdG8gRGFycmVuIEhvby4KKworCUZpeCBjb3JydXB0aW9uIG9mIHRoZSBkb21haW4gd2hlbiBhIG5hbWUgZnJvbSAvZXRjL2hvc3RzCisJb3ZlcnJpZGVzIG9uZSBzdXBwbGllZCBieSBhIERIQ1AgY2xpZW50LiBUaGFua3MgdG8gRmVkb3IKKwlLb3poZXZuaWtvdiBmb3Igc3BvdHRpbmcgdGhlIHByb2JsZW0uCisKKwlVcGRhdGVkIFNwYW5pc2ggdHJhbnNsYXRpb24uIFRoYW5rcyB0byBDaHJpcyBDaGF0aGFtLgorCisKK3ZlcnNpb24gMi41MgorCVdvcmsgYXJvdW5kIGEgTGludXgga2VybmVsIGJ1ZyB3aGljaCBpbnNpc3RzIHRoYXQgdGhlIAorCWxlbmd0aCBvZiB0aGUgb3B0aW9uIHBhc3NlZCB0byBzZXRzb2Nrb3B0IG11c3QgYmUgYXQgbGVhc3QKKwlzaXplb2YoaW50KSBieXRlcywgZXZlbiBpZiB3ZSdyZSBjYWxsaW5nIFNPX0JJTkRUT0RFVklDRQorCWFuZCB0aGUgZGV2aWNlIG5hbWUgaXMgImxvIi4gIE5vdGUgdGhhdCB0aGlzIGlzIGZpeGVkIAorCWluIGtlcm5lbCAyLjYuMzEsIGJ1dCB0aGUgd29ya2Fyb3VuZCBpcyBoYXJtbGVzcyBhbmQgCisJYWxsb3dzIGVhcmxpZXIga2VybmVscyB0byBiZSB1c2VkLiBBbHNvIGZpeCBkbnNtYXNxIAorCWJ1ZyB3aGljaCByZXBvcnRlZCB0aGUgd3JvbmcgYWRkcmVzcyB3aGVuIHRoaXMgZmFpbGVkLiAKKwlUaGFua3MgdG8gRmVkb3IgZm9yIGZpbmRpbmcgdGhpcy4KKworCVRoZSBBUEkgZm9yIElQdjYgUEtUSU5GTyBjaGFuZ2VkIGFyb3VuZCBMaW51eCBrZXJuZWwKKwkyLjYuMTQuIFdvcmthcm91bmQgdGhlIGNhc2Ugd2hlcmUgZG5zbWFzcSBpcyBjb21waWxlZAorCWFnYWluc3QgbmV3ZXIgaGVhZGVycywgYnV0IHRoZW4gcnVuIG9uIGFuIG9sZCBrZXJuZWw6CisJbmVjZXNzYXJ5IGZvciBzb21lICpXUlQgZGlzdHJvcy4KKworCVJlLXJlYWQgdGhlIHNldCBvZiBuZXR3b3JrIGludGVyZmFjZXMgd2hlbiByZS1sb2FkaW5nCisJL2V0Yy9yZXNvbHYuY29uZiBpZiAtLWJpbmQtaW50ZXJmYWNlcyBpcyBub3Qgc2V0LiBUaGlzCisJaGFuZGxlcyB0aGUgY2FzZSB0aGF0IGxvb3BiYWNrIGludGVyZmFjZXMgZG8gbm90IGV4aXN0CisJd2hlbiBkbnNtYXNxIGlzIGZpcnN0IHN0YXJ0ZWQuCisKKwlUd2VhayB0aGUgUFhFIGNvZGUgdG8gc3VwcG9ydCBwb3J0IDQwMTEuIFRoaXMgc2hvdWxkCisJcmVkdWNlIGJyb2FkY2FzdHMgYW5kIG1ha2UgdGhpbmdzIG1vcmUgcmVsaWFibGUgd2hlbiBvdGhlcgorCXNlcnZlcnMgYXJlIGFyb3VuZC4gSXQgYWxzbyBpbXByb3ZlcyBpbnRlci1vcGVyYWJpbGl0eQorCXdpdGggY2VydGFpbiBjbGllbnRzLgorCisJTWFrZSBhIHB4ZS1zZXJ2aWNlIGNvbmZpZ3VyYXRpb24gd2l0aCBubyBmaWxlbmFtZSBvciBib290IAorCXNlcnZpY2UgdHlwZSBsZWdhbDogdGhpcyBkb2VzIGEgbG9jYWwgYm9vdC4gZWcuCisJcHhlLXNlcnZpY2U9eDg2UEMsICJMb2NhbCBib290IiAKKworCUJlIG1vcmUgY29uc2VydmF0aXZlIGluIGRldGVjdGluZyAiQSBmb3IgQSIKKwlxdWVyaWVzLiBEbnNtYXNxIGNoZWNrcyBpZiB0aGUgbmFtZSBpbiBhIHR5cGU9QSBxdWVyeSBsb29rcworCWxpa2UgYSBkb3R0ZWQtcXVhZCBJUCBhZGRyZXNzIGFuZCBhbnN3ZXJzIHRoZSBxdWVyeSBpdHNlbGYKKwlpZiBzbywgcmF0aGVyIHRoYW4gZm9yd2FyZGluZyBpdC4gUHJldmlvdXNseSBkbnNtYXNxCisJcmVsaWVkIGluIHRoZSBsaWJyYXJ5IGZ1bmN0aW9uIGluZXRfYWRkcigpIHRvIGNvbnZlcnQKKwlhZGRyZXNzZXMsIGFuZCB0aGF0IHdpbGwgYWNjZXB0IHNvbWUgdGhpbmdzIHdoaWNoIGFyZQorCWNvbmZ1c2luZyBpbiB0aGlzIGNvbnRleHQsIGxpa2UgMS4yLjMgb3IgZXZlbiBqdXN0CisJMTIzNC4gTm93IHdlIG9ubHkgZG8gQSBmb3IgQSBwcm9jZXNzaW5nIGZvciBmb3VyIGRlY2ltYWwKKwludW1iZXJzIGRlbGltaXRlZCBieSBkb3RzLgorCisJQSBjb3VwbGUgb2YgdHdlYWtzIHRvIGZpeCBjb21waWxhdGlvbiBvbiBTb2xhcmlzLiBUaGFua3MKKwl0byBKb2VsIE1hY2tsb3cgZm9yIGhlbHAgd2l0aCB0aGlzLgorCisJQW5vdGhlciBTb2xhcmlzIGNvbXBpbGF0aW9uIHR3ZWFrLCBuZWVkZWQgZm9yIFNvbGFyaXMKKwkyMDA5LjA2LiBUaGFua3MgdG8gTGVlIEVzc2VuIGZvciB0aGF0LgorCisJQWRkZWQgZXh0cmFjdCBwYWNrYWdpbmcgc3R1ZmYgZnJvbSBMZWUgRXNzZW4gdG8gCisJY29udHJpYi9Tb2xhcmlzMTAuCisKKwlJbmNyZWFzZWQgdGhlIGRlZmF1bHQgbGltaXQgb24gbnVtYmVyIG9mIGxlYXNlcyB0byAxMDAwCisJKGZyb20gMTUwKS4gVGhpcyBpcyBtYWlubHkgYSBkZWZlbmNlIGFnYWluc3QgRG9TIGF0dGFja3MsCisJYW5kIGZvciB0aGUgYXZlcmFnZSAib25lIGZvciB0d28gY2xhc3MgQyBuZXR3b3JrcyIKKwlpbnN0YWxsYXRpb24sIElQIGFkZHJlc3MgZXhoYXVzdGlvbiBkb2VzIHRoYXQganVzdCBhcworCXdlbGwuIE1ha2luZyB0aGUgbGltaXQgZ3JlYXRlciB0aGFuIHRoZSBudW1iZXIgb2YgSVAKKwlhZGRyZXNzZXMgYXZhaWxhYmxlIGluIHN1Y2ggYW4gaW5zdGFsbGF0aW9uIHJlbW92ZXMgYQorCXN1cnByaXNlIHdoaWNoIG90aGVyd2lzZSBjYW4gY2F0Y2ggcGVvcGxlIG91dC4KKworCVJlbW92ZWQgZXh0cmFuZW91cyB0cmFpbGluZyBzcGFjZSBpbiB0aGUgdmFsdWUgb2YgdGhlCisJRE5TTUFTUV9USU1FX1JFTUFJTklORyBETlNNQVNRX0xFQVNFX0xFTkdUSCBhbmQKKwlETlNNQVNRX0xFQVNFX0VYUElSRVMgZW52aXJvbm1lbnQgdmFyaWFibGVzLiBUaGFua3MgdG8KKwlHaWxkYXMgTGUgTmFkYW4gZm9yIHNwb3R0aW5nIHRoaXMuCisKKwlQcm92aWRlIHRoZSBuZXR3b3JrLWlkIHRhZ3MgZm9yIGEgREhDUCB0cmFuc2FjdGlvbiB0byAKKwl0aGUgbGVhc2UtY2hhbmdlIHNjcmlwdCBpbiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUKKwlETlNNQVNRX1RBR1MuIEEgZ29vZCBzdWdnZXN0aW9uIGZyb20gR2lsZGFzIExlIE5hZGFuLiAgCisKKwlBZGQgc3VwcG9ydCBmb3IgUkZDMzkyNSAiVmVuZG9yLUlkZW50aWZ5aW5nIFZlbmRvcgorCU9wdGlvbnMiLiBUaGUgc3ludGF4IGxvb2tzIGxpa2UgdGhpczogIAorCS0tZGhjcC1vcHRpb249dmktZW5jYXA6PGVudGVycHJpc2UgbnVtYmVyPiwgLi4uLi4uLi4uCisKKwlBZGQgc3VwcG9ydCB0byAtLWRoY3AtbWF0Y2ggdG8gYWxsb3cgbWF0Y2hpbmcgYWdhaW5zdAorCVJGQzM5MjUgIlZlbmRvci1JZGVudGlmeWluZyBWZW5kb3IgQ2xhc3NlcyIuIFRoZSBzeW50YXgKKwlsb29rcyBsaWtlIHRoaXM6CisJLS1kaGNwLW1hdGNoPXRhZyx2aS1lbmNhcDxlbnRlcnByaXNlIG51bWJlcj4sIDx2YWx1ZT4KKworCUFkZCBzb21lIGFwcGxpY2F0aW9uIHNwZWNpZmljIGNvZGUgdG8gYXNzaXN0IGluCisJaW1wbGVtZW50aW5nIHRoZSBCcm9hZGJhbmQgZm9ydW0gVFIwNjkgQ1BFLVdBTgorCXNwZWNpZmljYXRpb24uIFRoZSBkZXRhaWxzIGFyZSBpbiBjb250cmliL0NQRS1XQU4vUkVBRE1FCisKKwlJbmNyZWFzZSB0aGUgZGVmYXVsdCBETlMgcGFja2V0IHNpemUgbGltaXQgdG8gNDA5NiwgYXMKKwlyZWNvbW1lbmRlZCBieSBSRkM1NjI1IHNlY3Rpb24gNC40LjMuIFRoaXMgY2FuIGJlCisJcmVjb25maWd1cmVkIHVzaW5nIC0tZWRucy1wYWNrZXQtbWF4IGlmIG5lZWRlZC4gVGhhbmtzIHRvCisJRnJhbmNpcyBEdXBvbnQgZm9yIHBvaW50aW5nIHRoaXMgb3V0LgorCisJUmV3cml0ZSBxdWVyeS1pZHMgZXZlbiBmb3IgVFNJRyBzaWduZWQgcGFja2V0cywgc2luY2UKKwl0aGlzIGlzIGFsbG93ZWQgYnkgUkZDNTYyNSBzZWN0aW9uIDQuNS4KKworCVVzZSBnZXRvcHRfbG9uZyBieSBkZWZhdWx0IG9uIE9TIFguIEl0IGhhcyBiZWVuIHN1cHBvcnRlZAorCXNpbmNlIHZlcnNpb24gMTAuMy4wLiBUaGFua3MgdG8gQXJlayBEcmV5ZXIgZm9yIHNwb3R0aW5nCisJdGhpcy4KKworCUFkZGVkIHVwLXRvLWRhdGUgc3RhcnR1cCBjb25maWd1cmF0aW9uIGZvciBNYWNPU1gvbGF1bmNoZAorCWluIGNvbnRyaWIvTWFjT1NYLWxhdW5jaGQuIFRoYW5rcyB0byBBcmVrIERyZXllciBmb3IKKwlwcm92aWRpbmcgdGhpcy4KKworCUZpeCBsaW5rIGVycm9yIHdoZW4gaW5jbHVkaW5nIERidXMgYnV0IGV4Y2x1ZGluZyBESENQLiAKKwlUaGFua3MgdG8gT3NjaHRhbiBmb3IgdGhlIGJ1ZyByZXBvcnQuCisKKwlVcGRhdGVkIEZyZW5jaCB0cmFuc2xhdGlvbi4gVGhhbmtzIHRvIEdpbGRhcyBMZSBOYWRhbi4KKworCVVwZGF0ZWQgUG9saXNoIHRyYW5zbGF0aW9uLiBUaGFua3MgdG8gSmFuIFBzb3RhLgorCisJVXBkYXRlZCBTcGFuaXNoIHRyYW5zbGF0aW9uLiBUaGFua3MgdG8gQ2hyaXMgQ2hhdGhhbS4KKworCUZpeGVkIGNvbmZ1c2lvbiBhYm91dCBkb21haW5zLCB3aGVuIGxvb2tpbmcgdXAgREhDUCBob3N0cworCWluIC9ldGMvaG9zdHMuIFRoaXMgY291bGQgY2F1c2Ugc3B1cmlvdXMgIklnbm9yaW5nCisJZG9tYWluLi4uIiBtZXNzYWdlcy4gVGhhbmtzIHRvIEZlZG9yIEtvemhldm5pa292IGZvcgorCWZpbmRpbmcgYW5kIGFuYWx5c2luZyB0aGUgcHJvYmxlbS4KKworCit2ZXJzaW9uIDIuNTEKKwlBZGQgc3VwcG9ydCBmb3IgaW50ZXJuYXRpb25hbGlzZWQgRE5TLiBOb24tQVNDSUkgY2hhcmFjdGVycworCWluIGRvbWFpbiBuYW1lcyBmb3VuZCBpbiAvZXRjL2hvc3RzLCAvZXRjL2V0aGVycyBhbmQgCisJL2V0Yy9kbnNtYXNxLmNvbmYgd2lsbCBiZSBjb3JyZWN0bHkgaGFuZGxlZCBieSB0cmFuc2xhdGlvbiB0bworCXB1bnljb2RlLCBhcyBzcGVjaWZpZWQgaW4gUkZDMzQ5MC4gVGhpcyBmdW5jdGlvbiBpcyBvbmx5CisJYXZhaWxhYmxlIGlmIGRuc21hc3EgaXMgY29tcGlsZWQgd2l0aCBpbnRlcm5hdGlvbmFsaXNhdGlvbgorCXN1cHBvcnQsIGFuZCBhZGRzIGEgZGVwZW5kZW5jeSBvbiBHTlUgbGliaWRuLiBXaXRob3V0IGkxOG4KKwlzdXBwb3J0LCBkbnNtYXNxIGNvbnRpbnVlcyB0byBiZSBjb21waWxhYmxlIHdpdGgganVzdAorCXN0YW5kYXJkIHRvb2xzLiBUaGFua3MgdG8gWXZlcyBEb3Jmc21hbiBmb3IgdGhlCisJc3VnZ2VzdGlvbi4gCisKKwlBZGQgdHdvIG1vcmUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBsZWFzZS1jaGFuZ2Ugc2NyaXB0czoKKwlGaXJzdCwgRE5TTUFTUV9TVVBQTElFRF9IT1NUTkFNRTsgdGhpcyBpcyBzZXQgdG8gdGhlIGhvc3RuYW1lCisJc3VwcGxpZWQgYnkgYSBjbGllbnQsIGV2ZW4gaWYgdGhlIGFjdHVhbCBob3N0bmFtZSB1c2VkIGlzCisJb3Zlci1yaWRkZW4gYnkgZGhjcC1ob3N0IG9yIGRoY3AtaWdub3JlLW5hbWVzIGRpcmVjdGl2ZXMuCisJQWxzbyBETlNNQVNRX1JFTEFZX0FERFJFU1Mgd2hpY2ggZ2l2ZXMgdGhlIGFkZHJlc3Mgb2YgCisJYSBESENQIHJlbGF5LCBpZiB1c2VkLgorCVN1Z2dlc3Rpb25zIGZyb20gTWljaGFlbCBSYWNrLgorCisJRml4IHJlZ3Jlc3Npb24gd2hpY2ggYnJva2UgZWNobyBvZiByZWxheS1hZ2VudAorCW9wdGlvbnMuIFRoYW5rcyB0byBNaWNoYWVsIFJhY2sgZm9yIHNwb3R0aW5nIHRoaXMuCisKKwlEb24ndCB0cmVhdCBvcHRpb24gNjcgYXMgYmVpbmcgaW50ZXJjaGFuZ2VhYmxlIHdpdGgKKwlkaGNwLWJvb3QgcGFyYW1ldGVycyBpZiBpdCdzIHNwZWNpZmllZCBhcworCWRoY3Atb3B0aW9uLWZvcmNlLgorCisJTWFrZSB0aGUgY29kZSB0byBjYWxsIHNjcmlwdHMgb24gbGVhc2UtY2hhbmdlIGNvbXBpbGUtdGltZQorCW9wdGlvbmFsLiBJdCBjYW4gYmUgc3dpdGNoZWQgb2ZmIGJ5IGVkaXRpbmcgc3JjL2NvbmZpZy5oCisJb3IgYnVpbGRpbmcgd2l0aCAibWFrZSBDT1BUUz0tRE5PX1NDUklQVCIuCisKKwlNYWtlIHRoZSBURlRQIHNlcnZlciBjb3BlIHdpdGggZmlsZW5hbWVzIGZyb20gV2luZG93cy9ET1MKKwl3aGljaCB1c2UgJ1wnIGFzIHBhdGhuYW1lIHNlcGFyYXRvci4gVGhhbmtzIHRvIFJhbGYgZm9yCisJdGhlIHBhdGNoLgorCisJVXBkYXRlZCBQb2xpc2ggdHJhbnNsYXRpb24uIFRoYW5rcyB0byBKYW4gUHNvdGEuCisKKwlXYXJuIGlmIGFuIElQIGFkZHJlc3MgaXMgZHVwbGljYXRlZCBpbiAvZXRjL2V0aGVycy4gVGhhbmtzCisJdG8gRmVsaXggU2Nod2FyeiBmb3IgcG9pbnRpbmcgdGhpcyBvdXQuCisKKwlUZWFjaCAtLWNvbmYtZGlyIHRvIHRha2UgYW4gb3B0aW9uIGxpc3Qgb2YgZmlsZSBzdWZmaWNlcworCXdoaWNoIHdpbGwgYmUgaWdub3JlZCB3aGVuIHNjYW5uaW5nIHRoZSBkaXJlY3RvcnkuIFVzZWZ1bAorCWZvciBiYWNrdXAgZmlsZXMgZXRjLiBUaGFua3MgdG8gSGVsbXV0IEh1bGxlbiBmb3IgdGhlCisJc3VnZ2VzdGlvbi4gCisKKwlBZGQgbmV3IERIQ1Agb3B0aW9uIG5hbWVkIHRmdHBzZXJ2ZXItYWRkcmVzcywgd2hpY2gKKwljb3JyZXNwb25kcyB0byB0aGUgdGhpcmQgYXJndW1lbnQgb2YgZGhjcC1ib290LiBUaGlzCisJYWxsb3dzIHRoZSBjb21wbGV0ZSBmdW5jdGlvbmFsaXR5IG9mIGRoY3AtYm9vdCB0byBiZQorCXJlcGxpY2F0ZWQgd2l0aCBkaGNwLW9wdGlvbi4gVXNlZnVsIHdoZW4gdXNpbmcgCisJZGhjcC1vcHRzZmlsZS4KKworCVRlc3Qgd2hpY2ggdXBzdHJlYW0gbmFtZXNlcnZlciB0byB1c2UgZXZlcnkgMTAgc2Vjb25kcworCW9yIDUwIHF1ZXJpZXMgYW5kIG5vdCBqdXN0IHdoZW4gYSBxdWVyeSB0aW1lcyBvdXQgYW5kIAorCWlzIHJldHJpZWQuIFRoaXMgc2hvdWxkIGltcHJvdmUgcGVyZm9ybWFuY2Ugd2hlbiB0aGVyZQorCWlzIGEgc2xvdyBuYW1lc2VydmVyIGluIHRoZSBsaXN0LiBUaGFua3MgdG8gSm9lIGZvciB0aGUKKwlzdWdnZXN0aW9uLiAKKworCURvbid0IGRvIGFueSBQWEUgcHJvY2Vzc2luZywgZXZlbiBmb3IgY2xpZW50cyB3aXRoIHRoZSAKKwljb3JyZWN0IHZlbmRvcmNsYXNzLCB1bmxlc3MgYXQgbGVhc3Qgb25lIHB4ZS1wcm9tcHQgb3IgCisJcHhlLXNlcnZpY2Ugb3B0aW9uIGlzIGdpdmVuLiBUaGlzIHN0b3BzIGRuc21hc3EgCisJaW50ZXJmZXJpbmcgd2l0aCBwcm94eSBQWEUgc3Vic3lzdGVtcyB3aGVuIGl0IGlzIGp1c3QgCisJdGhlIERIQ1Agc2VydmVyLiBUaGFua3MgdG8gU3BlbmNlciBDbGFyayBmb3Igc3BvdHRpbmcgdGhpcy4KKworCUxpbWl0IHRoZSBibG9ja3NpemUgdXNlZCBmb3IgVEZUUCB0cmFuc2ZlcnMgdG8gYSB2YWx1ZQorCXdoaWNoIGF2b2lkcyBwYWNrZXQgZnJhZ21lbnRhdGlvbiwgYmFzZWQgb24gdGhlIE1UVSBvZiB0aGUKKwlsb2NhbCBpbnRlcmZhY2UuIE1hbnkgbmV0Ym9vdCBST01zIGNhbid0IGNvcGUgd2l0aAorCWZyYWdtZW50ZWQgcGFja2V0cy4KKworCUhvbm91ciBkaGNwLWlnbm9yZSBjb25maWd1cmF0aW9uIGZvciBQWEUgYW5kIHByb3h5LVBYRSAKKwlyZXF1ZXN0cy4gVGhhbmtzIHRvIE5pZWxzIEJhc2plcyBmb3IgdGhlIGJ1ZyByZXBvcnQuCisKKwlVcGRhdGVkIEZyZW5jaCB0cmFuc2xhdGlvbi4gVGhhbmtzIHRvIEdpbGRhcyBMZSBOYWRhbi4KKworCit2ZXJzaW9uIDIuNTAKKwlGaXggc2VjdXJpdHkgcHJvYmxlbSB3aGljaCBhbGxvd2VkIGFueSBob3N0IHBlcm1pdHRlZCB0byAKKwlkbyBURlRQIHRvIHBvc3NpYmx5IGNvbXByb21pc2UgZG5zbWFzcSBieSByZW1vdGUgYnVmZmVyIAorCW92ZXJmbG93IHdoZW4gVEZUUCBlbmFibGVkLiBUaGFua3MgdG8gQ29yZSBTZWN1cml0eSAKKwlUZWNobm9sb2dpZXMgYW5kIEl2w6FuIEFyY2UsIFBhYmxvIEhlcm7DoW4gSm9yZ2UsIEFsZWphbmRybyAKKwlQYWJsbyBSb2RyaWd1ZXosIE1hcnTDrW4gQ29jbywgQWxiZXJ0byBTb2xpw7FvIFRlc3RhIGFuZAorCVBhYmxvIEFubmV0dGEuIFRoaXMgcHJvYmxlbSBoYXMgQnVndHJhcSBpZDogMzYxMjEgCisJYW5kIENWRTogMjAwOS0yOTU3CisKKwlGaXggYSBwcm9ibGVtIHdoaWNoIGFsbG93ZWQgYSBtYWxpY2lvdXMgVEZUUCBjbGllbnQgdG8gCisJY3Jhc2ggZG5zbWFzcS4gVGhhbmtzIHRvIFN0ZXZlIEdydWJiIGF0IFJlZCBIYXQgZm9yIAorCXNwb3R0aW5nIHRoaXMuIFRoaXMgcHJvYmxlbSBoYXMgQnVndHJhcSBpZDogMzYxMjAgYW5kIAorCUNWRTogMjAwOS0yOTU4CisKKwordmVyc2lvbiAyLjQ5CisJRml4IHJlZ3Jlc3Npb24gaW4gMi40OCB3aGljaCBkaXNhYmxlcyB0aGUgbGVhc2UtY2hhbmdlCisJc2NyaXB0LiBUaGFua3MgdG8gSm9zZSBMdWlzIER1cmFuIGZvciBzcG90dGluZyB0aGlzLgorCisJTG9nIFRGVFAgImZpbGUgbm90IGZvdW5kIiBlcnJvcnMuIFRoZXNlIHdlcmUgbm90IGxvZ2dlZCwKKwlzaW5jZSBhIG5vcm1hbCBQWEVMaW51eCBib290IGdlbmVyYXRlcyBtYW55IG9mIHRoZW0sIGJ1dAorCXRoZSBsYWNrIG9mIHRoZSBtZXNzYWdlcyBzZWVtcyB0byBiZSBtb3JlIGNvbmZ1c2luZyB0aGFuCisJcm91dGluZWx5IHNlZWluZyB0aGVtIHdoZW4gdGhlcmUgaXMgbm8gcmVhbCBlcnJvci4KKworCVVwZGF0ZSBTcGFuaXNoIHRyYW5zbGF0aW9uLiBUaGFua3MgdG8gQ2hyaXMgQ2hhdGhhbS4KKworCit2ZXJzaW9uIDIuNDgKKwlBcmNoaXZlZCB0aGUgZXh0ZW5zaXZlLCBiYWNrd2FyZHMsIGNoYW5nZWxvZyB0bworCUNIQU5HRUxPRy5hcmNoaXZlLiBUaGUgY3VycmVudCBjaGFuZ2Vsb2cgbm93IHJ1bnMgZnJvbQorCXZlcnNpb24gMi40MyBhbmQgcnVucyBjb252ZW50aW9uYWxseS4KKworCUZpeGVkIGJ1ZyB3aGljaCBicm9rZSBiaW5kaW5nIG9mIHNlcnZlcnMgdG8gcGh5c2ljYWwKKwlpbnRlcmZhY2VzIHdoZW4gaW50ZXJmYWNlIG5hbWVzIHdlcmUgbG9uZ2VyIHRoYW4gZm91cgorCWNoYXJhY3RlcnMuIFRoYW5rcyB0byBNVVJBU0UgS2F0c3Vub3JpIGZvciB0aGUgcGF0Y2guCisKKwlGaXhlZCBuZXRsaW5rIGNvZGUgdG8gY2hlY2sgdGhhdCBtZXNzYWdlcyBjb21lIGZyb20gdGhlCisJY29ycmVjdCBzb3VyY2UsIGFuZCBub3QgYW5vdGhlciB1c2Vyc3BhY2UgcHJvY2Vzcy4gVGhhbmtzCisJdG8gU3RldmUgR3J1YmIgZm9yIHRoZSBwYXRjaC4KKworCU1haW50YWluYWJpbGl0eSBkcml2ZTogcmVtb3ZlZCBidWcgYW5kIG1pc3NpbmcgZmVhdHVyZQorCXdvcmthcm91bmRzIGZvciBzb21lIG9sZCBwbGF0Zm9ybXMuIFNvbGFyaXMgOSwgT3BlbkJTRAorCW9sZGVyIHRoYW4gNC4xLCBHbGliYyBvbGRlciB0aGFuIDIuMiwgTGludXggMi4yLnggYW5kIAorCURCdXMgb2xkZXIgdGhhbiAxLjEueCBhcmUgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gCisKKwlEb24ndCByZWFkIGluY2x1ZGVkIGNvbmZpZ3VyYXRpb24gZmlsZXMgbW9yZSB0aGFuIG9uY2U6CisJYWxsb3dzIGNvbXBsZXggY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmVzIHdpdGhvdXQgcHJvYmxlbXMuCisKKwlNYXJrIGxvZyBtZXNzYWdlcyBmcm9tIHRoZSB2YXJpb3VzIHN1YnN5c3RlbXMgaW4gZG5zbWFzcToKKwltZXNzYWdlcyBmcm9tIHRoZSBESENQIHN1YnN5c3RlbSBub3cgaGF2ZSB0aGUgaWRlbnQgc3RyaW5nCisJImRuc21hc3EtZGhjcCIgYW5kIG1lc3NhZ2VzIGZyb20gVEZUUCBoYXZlIGlkZW50CisJImRuc21hc3EtdGZ0cCIuIFRoYW5rcyB0byBPbGFmIFdlc3RyaWsgZm9yIHRoZSBwYXRjaC4KKworCUZpeCBwb3NzaWJsZSBpbmZpbml0ZSBESENQIHByb3RvY29sIGxvb3Agd2hlbiBhbiBJUAorCWFkZHJlc3MgbmFpbGVkIHRvIGEgaG9zdG5hbWUgKG5vdCBhIE1BQyBhZGRyZXNzKSAgYW5kIGEgCisJaG9zdCBzb21ldGltZXMgcHJvdmlkZXMgdGhlIG5hbWUsIHNvbWV0aW1lcyBub3QuCisKKwlBbGxvdyAtLWFkZG4taG9zdHMgdG8gdGFrZSBhIGRpcmVjdG9yeTogYWxsIHRoZSBmaWxlcyAKKwlpbiB0aGUgZGlyZWN0b3J5IGFyZSByZWFkLiBUaGFua3MgdG8gUGhpbCBDb3JuZWxpdXMgZm9yIAorCXRoZSBzdWdnZXN0aW9uLiAKKworCVN1cHBvcnQgLS1icmlkZ2UtaW50ZXJmYWNlIG9uIGFsbCBwbGF0Zm9ybXMsIG5vdCBqdXN0IEJTRC4KKworCUFkZGVkIHN1cHBvcnQgZm9yIGFkdmFuY2VkIFBYRSBmdW5jdGlvbnMuIEl0J3Mgbm93CisJcG9zc2libGUgdG8gZGVmaW5lIGEgcHJvbXB0IGFuZCBtZW51IG9wdGlvbnMgd2hpY2ggd2lsbAorCWJlIGRpc3BsYXllZCB3aGVuIGEgY2xpZW50IFBYRSBib290cy4gSXQncyBhbHNvIHBvc3NpYmxlIHRvCisJaGFuZC1vZmYgYm9vdGluZyB0byBvdGhlciBib290IHNlcnZlcnMuIFByb3h5LURIQ1AsIHdoZXJlCisJZG5zbWFzcSBqdXN0IHN1cHBsaWVzIHRoZSBQWEUgaW5mb3JtYXRpb24gYW5kIGFub3RoZXIgREhDUAorCXNlcnZlciBkb2VzIGFkZHJlc3MgYWxsb2NhdGlvbiwgaXMgYWxzbyBhbGxvd2VkLiBTZWUgdGhlCisJLS1weGUtcHJvbXB0IGFuZCAtLXB4ZS1zZXJ2aWNlIGtleXdvcmRzLiBUaGFua3MgdG8gCisJQWxraXMgR2VvcmdvcG91bG9zIGZvciB0aGUgc3VnZ2VzdGlvbiBhbmQgR3VpbGhlcm1lIE1vcm8KKwlhbmQgTWljaGFlbCBCcm93biBmb3IgYXNzaXN0YW5jZS4KKworCUltcHJvdmVtZW50cyB0byBESENQIGxvZ2dpbmcuIFRoYW5rcyB0byBUb20gTWV0cm8gZm9yCisJdXNlZnVsIHN1Z2dlc3Rpb25zLgorCisJQWRkIGFiaWxpdHkgdG8gYnVpbGQgZG5zbWFzcSB3aXRob3V0IERIQ1Agc3VwcG9ydC4gVG8gZG8KKwl0aGlzLCBlZGl0IHNyYy9jb25maWcuaCBvciBidWlsZCB3aXRoCisJIm1ha2UgQ09QVFM9LUROT19ESENQIi4gVGhhbmtzIHRvIE1haGF2aXIgSmFpbiBmb3IgdGhlIHBhdGNoLiAKKworCUFkZGVkIC0tdGVzdCBjb21tYW5kLWxpbmUgc3dpdGNoIC0gc3ludGF4IGNoZWNrCisJY29uZmlndXJhdGlvbiBmaWxlcyBvbmx5LgorCisJVXBkYXRlZCBGcmVuY2ggdHJhbnNsYXRpb24uIFRoYW5rcyB0byBHaWxkYXMgTGUgTmFkYW4uCisKKwordmVyc2lvbiAyLjQ3CisJVXBkYXRlZCBGcmVuY2ggdHJhbnNsYXRpb24uIFRoYW5rcyB0byBHaWxkYXMgTGUgTmFkYW4uCisKKwlGaXhlZCBpbnRlcmZhY2UgZW51bWVyYXRpb24gY29kZSB0byB3b3JrIG9uIE5ldEJTRAorCTUuMC4gVGhhbmtzIHRvIFJveSBNYXJwbGVzIGZvciB0aGUgcGF0Y2guIAorCisJVXBkYXRlZCBjb25maWcuaCB0byB1c2UgdGhlIHNhbWUgbG9jYXRpb24gZm9yIHRoZSBsZWFzZQorCWZpbGUgb24gTmV0QlNEIGFzIHRoZSBvdGhlciAqQlNEIHZhcmlhbnRzLiBBbHNvIGFsbG93CisJTEVBU0VGSUxFIGFuZCBDT05GRklMRSBzeW1ib2xzIHRvIGJlIG92ZXJyaWRkZW4gaW4gQ0ZMQUdTLiAgCisKKwlIYW5kbGUgZHVwbGljYXRlIGFkZHJlc3MgZGV0ZWN0aW9uIG9uIElQdjYgbW9yZQorCWludGVsbGlnZW50bHkuIEluIElQdjYsIGFuIGludGVyZmFjZSBjYW4gaGF2ZSBhbiBhZGRyZXNzCisJd2hpY2ggaXMgbm90IHVzYWJsZSwgYmVjYXVzZSBpdCBpcyBzdGlsbCB1bmRlcmdvaW5nIERBRAorCShzdWNoIGFkZHJlc3NlcyBhcmUgbWFya2VkICJ0ZW50YXRpdmUiKS4gQXR0ZW1wdGluZyB0bworCWJpbmQgdG8gYW4gYWRkcmVzcyBpbiB0aGlzIHN0YXRlIHJldHVybnMgYW4gZXJyb3IsCisJRUFERFJOT1RBVkFJTC4gUHJldmlvdXNseSwgb24gZ2V0dGluZyBzdWNoIGFuIGVycm9yLAorCWRuc21hc3Egd291bGQgc2lsZW50bHkgYWJhbmRvbiB0aGUgYWRkcmVzcywgYW5kIG5ldmVyCisJbGlzdGVuIG9uIGl0LiBOb3csIGl0IHJldHJpZXMgb25jZSBwZXIgc2Vjb25kIGZvciAyMAorCXNlY29uZHMgYmVmb3JlIGdlbmVyYXRpbmcgYSBmYXRhbCBlcnJvci4gMjAgc2Vjb25kcyBzaG91bGQKKwliZSBsb25nIGVub3VnaCBmb3IgYW55IERBRCBwcm9jZXNzIHRvIGNvbXBsZXRlLCBidXQgY2FuIGJlCisJYWRqdXN0ZWQgaW4gc3JjL2NvbmZpZy5oIGlmIG5lY2Vzc2FyeS4gVGhhbmtzIHRvIE1hcnRpbgorCUtyYWZmdCBmb3IgdGhlIGJ1ZyByZXBvcnQuCisKKwlBZGQgREJ1cyBpbnRyb3NwZWN0aW9uLiBQYXRjaCBmcm9tIEplcmVteSBMYWluZS4KKworCVVwZGF0ZSBEYnVzIGNvbmZpZ3VyYXRpb24gZmlsZS4gUGF0Y2ggZnJvbSBDb2xpbiBXYWx0ZXJzLgorCUZpeCBmb3IgdGhpcyBidWc6CisJaHR0cDovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL3Nob3dfYnVnLmNnaT9pZD0xODk2MQorCisJU3VwcG9ydCBhcmJpdHJhcmlseSBlbmNhcHN1bGF0ZWQgREhDUCBvcHRpb25zLCBzdWdnZXN0aW9uCisJYW5kIGluaXRpYWwgcGF0Y2ggZnJvbSBTYW1pdW0gR3JvbW9mZi4gVGhpcyBpcyB1c2VmdWwgZm9yCisJKGVnKSBnUFhFLCB3aGljaCBleHBlY3QgYWxsIGl0cyBwcml2YXRlIG9wdGlvbnMgdG8gYmUKKwllbmNhcHN1bGF0ZWQgaW5zaWRlIGEgc2luZ2xlIG9wdGlvbiAxNzUuIFNvLCBlZywgCisKKwlkaGNwLW9wdGlvbiA9IGVuY2FwOjE3NSwgMTkwLCAiaXNjc2ktY2xpZW50MCIKKwlkaGNwLW9wdGlvbiA9IGVuY2FwOjE3NSwgMTkxLCAiaXNjc2ktY2xpZW50MC1zZWNyZXQiCisKKwl3aWxsIHByb3ZpZGUgaVNDU0kgcGFyYW1ldGVycyB0byBnUFhFLgorCisJRW5oYW5jZSAtLWRoY3AtbWF0Y2ggdG8gYWxsb3cgdGVzdGluZyBvZiB0aGUgY29udGVudHMgb2YgYQorCWNsaWVudC1zZW50IG9wdGlvbiwgYXMgd2VsbCBhcyBpdHMgcHJlc2VuY2UuIFRoaXMKKwlhcHBsaWNhdGlvbiBpbiBtaW5kIGZvciB0aGlzIGlzIFJGQyA0NTc4CisJY2xpZW50LWFyY2hpdGVjdHVyZSBzcGVjaWZpZXJzLCBidXQgaXQncyBnZW5lcmFsbHkgdXNlZnVsLgorCUpvZXkgS29ya2FtZXMgc3VnZ2VzdGVkIHRoZSBlbmhhbmNlbWVudC4gCisKKwlNb3ZlIGZyb20gdXNpbmcgdGhlIElQX1hNSVRfSUYgaW9jdGwgdG8gSVBfQk9VTkRfSUYgb24KKwlPcGVuU29sYXJpcy4gVGhhbmtzIHRvIEJhc3RpYW4gTWFjaGVrIGZvciB0aGUgaGVhZHMtdXAuCisKKwlObyBsb25nZXIgY29tcGxhaW4gYWJvdXQgYmxhbmsgbGluZXMgaW4KKwkvZXRjL2V0aGVycy4gVGhhbmtzIHRvIEpvbiBOZWxzb24gZm9yIHRoZSBwYXRjaC4KKworCUZpeCBiaW5kaW5nIG9mIHNlcnZlcnMgdG8gcGh5c2ljYWwgZGV2aWNlcywgZWcKKwktLXNlcnZlcj0vZG9tYWluLzEuMi4zLjRAZXRoMCB3aGljaCB3YXMgYnJva2VuIGZyb20gMi40MworCW9ud2FyZHMgdW5sZXNzIC0tcXVlcnktcG9ydD0wIHNldC4gVGhhbmtzIHRvIFBldGVyIE5hdWxscworCWZvciB0aGUgYnVnIHJlcG9ydC4KKworCVJlcGx5IHRvIERIQ1BJTkZPUk0gcmVxdWVzdHMgZXZlbiB3aGVuIHRoZSBzdXBwbGllZCBjaWFkZHIKKwlkb2Vzbid0IGZhbGwgaW4gYW55IGRoY3AtcmFuZ2UuIEluIHRoaXMgY2FzZSBpdCdzIG5vdAorCXBvc3NpYmxlIHRvIHN1cHBseSBhIGNvbXBsZXRlIGNvbmZpZ3VyYXRpb24sIGJ1dAorCWluZGl2aWR1YWxseS1jb25maWd1cmVkIG9wdGlvbnMgKGVnIFBBQykgbWF5IGJlIHVzZWZ1bC4KKworCUFsbG93IHRoZSBzb3VyY2UgYWRkcmVzcyBvZiBhbiBhbGlhcyB0byBiZSBhIHJhbmdlOgorCS0tYWxpYXM9MTkyLjE2OC4wLjAsMTAuMC4wLjAsMjU1LjI1NS4yNTUuMCBtYXBzIHRoZSB3aG9sZQorCXN1Ym5ldCAxOTIuMTY4LjAuMC0+MTkyLjE2OC4wLjI1NSB0byAxMC4wLjAuMC0+MTAuMC4wLjI1NSwKKwlhcyBiZWZvcmUuCisJLS1hbGlhcz0xOTIuMTY4LjAuMTAtMTkyLjE2OC4wLjQwLDEwLjAuMC4wLDI1NS4yNTUuMjU1LjAKKwltYXBzIG9ubHkgdGhlIDE5Mi4xNjguMC4xMC0+MTkyLjE2OC4wLjQwIHJlZ2lvbi4gVGhhbmtzIHRvCisJSWIgVWhyc2tvdiBmb3IgdGhlIHN1Z2dlc3Rpb24uCisKKwlEb24ndCBkeW5hbWljYWxseSBhbGxvY2F0ZSBESENQIGFkZHJlc3NlcyB3aGljaCBtYXkgYnJlYWsKKwlXaW5kb3dzLiAgQWRkcmVzc2VzIHdoaWNoIGVuZCBpbiAuMjU1IG9yIC4wIGFyZSBicm9rZW4gaW4KKwlXaW5kb3dzIGV2ZW4gd2hlbiB1c2luZyBzdXBlcm5ldHRpbmcuCisJLS1kaGNwLXJhbmdlPTE5Mi4xNjguMC4xLDE5Mi4xNjguMS4yNTQsMjU1LDI1NSwyNTQuMCBtZWFucyAKKwkxOTIuMTY4LjAuMjU1IGlzIGEgdmFsaWQgSVAgYWRkcmVzcywgYnV0IG5vdCBmb3IgV2luZG93cy4gCisJU2VlIE1pY3Jvc29mdCBLQjI4MTU3OS4gV2UgdGhlcmVmb3JlIG5vIGxvbmdlciBhbGxvY2F0ZSAKKwl0aGVzZSBhZGRyZXNzZXMgdG8gYXZvaWQgaGFyZC10by1kaWFnbm9zZSBwcm9ibGVtcy4gCisKKwlVcGRhdGUgUG9saXNoIHRyYW5zbGF0aW9uLiBUaGFua3MgdG8gSmFuIFBzb3RhLgorCisJRGVsZXRlIHRoZSBQSUQtZmlsZSB3aGVuIGRuc21hc3Egc2h1dHMgZG93bi4gTm90ZSB0aGF0IGJ5CisJdGhpcyB0aW1lLCBkbnNtYXNxIGlzIG5vcm1hbGx5IG5vdCBydW5uaW5nIGFzIHJvb3QsIHNvCisJdGhpcyB3aWxsIGZhaWwgaWYgdGhlIFBJRC1maWxlIGlzIHN0b3JlZCBpbiBhIHJvb3Qtb3duZWQKKwlkaXJlY3Rvcnk7IHN1Y2ggZmFpbHVyZSBpcyBzaWxlbnRseSBpZ25vcmVkLiBUbyB0YWtlCisJYWR2YW50YWdlIG9mIHRoaXMgZmVhdHVyZSwgdGhlIFBJRC1maWxlIG11c3QgYmUgc3RvcmVkIGluIGEKKwlkaXJlY3Rvcnkgb3duZWQgYW5kIHdyaXRlLWFibGUgYnkgdGhlIHVzZXIgcnVubmluZworCWRuc21hc3EuCisKKwordmVyc2lvbiAyLjQ2CisJQWxsb3cgLS1ib290cC1keW5hbWljIHRvIHRha2UgYSBuZXRpZCB0YWcsIHNvIHRoYXQgaXQgbWF5CisJYmUgc2VsZWN0aXZlbHkgZW5hYmxlZC4gVGhhbmtzIHRvIE9sYWYgV2VzdHJpayBmb3IgdGhlCisJc3VnZ2VzdGlvbi4gCisKKwlSZW1vdmUgSVNDLWxlYXNlZmlsZSByZWFkaW5nIGNvZGUuIFRoaXMgaGFzIGJlZW4KKwlkZXByZWNhdGVkIGZvciBhIGxvbmcgdGltZSwgYW5kIGxhc3QgdGltZSBJIHJlbW92ZWQgaXQsIGl0CisJZW5kZWQgdXAgZ29pbmcgYmFjayBieSByZXF1ZXN0IG9mIG9uZSB1c2VyLiBUaGlzIHRpbWUsCisJaXQncyBnb25lIGZvciBnb29kOyBvdGhlcndpc2UgaXQgd291bGQgbmVlZCB0byBiZQorCXJlLXdvcmtlZCB0byBzdXBwb3J0IG11bHRpcGxlIGRvbWFpbnMgKHNlZSBiZWxvdykuCisKKwlTdXBwb3J0IERIQ1AgY2xpZW50cyBpbiBtdWx0aXBsZSBETlMgZG9tYWlucy4gVGhpcyBpcyBhCisJbG9uZy1zdGFuZGluZyByZXF1ZXN0LiBDbGllbnRzIGFyZSBhc3NpZ25lZCB0byBhIGRvbWFpbgorCWJhc2VkIGluIHRoZWlyIElQIGFkZHJlc3MuICAKKworCUFkZCAtLWRoY3AtZnFkbiBmbGFnLCB3aGljaCBjaGFuZ2VzIGJlaGF2aW91ciBpZiBETlMgbmFtZXMKKwlhc3NpZ25lZCB0byBESENQIGNsaWVudHMuIFdoZW4gdGhpcyBpcyBzZXQsIHRoZXJlIG11c3QgYmUKKwlhIGRvbWFpbiBhc3NvY2lhdGVkIHdpdGggZWFjaCBjbGllbnQsIGFuZCBvbmx5CisJZnVsbHktcXVhbGlmaWVkIGRvbWFpbiBuYW1lcyBhcmUgYWRkZWQgdG8gdGhlIEROUy4gVGhlCisJYWR2YW50YWdlIGlzIHRoYXQgdGhlIG9ubHkgdGhlIEZRRE4gbmVlZHMgdG8gYmUgdW5pcXVlLAorCXNvIHRoYXQgdHdvIG9yIG1vcmUgREhDUCBjbGllbnRzIGNhbiBzaGFyZSBhIGhvc3RuYW1lLCBhcworCWxvbmcgYXMgdGhleSBhcmUgaW4gZGlmZmVyZW50IGRvbWFpbnMuCisKKwlTZXQgZW52aXJvbm1lbnQgdmFyaWFibGUgRE5TTUFTUV9ET01BSU4gd2hlbiBpbnZva2luZworCWxlYXNlLWNoYW5nZSBzY3JpcHQuIFRoaXMgbWF5IGJlIHVzZWZ1bCBpbmZvcm1hdGlvbiB0bworCWhhdmUgbm93IHRoYXQgaXQncyB2YXJpYWJsZS4KKworCVRpZ2h0ZW4gdXAgZGF0YS1jaGVja2luZyBjb2RlIGZvciBETlMgcGFja2V0CisJaGFuZGxpbmcuIFRoYW5rcyB0byBTdGV2ZSBEb2RkIHdobyBmb3VuZCBjZXJ0YWluIGlsbGVnYWwKKwlwYWNrZXRzIHdoaWNoIGNvdWxkIGNyYXNoIGRuc21hc3EuIE5vIG1lbW9yeSBvdmVyd3JpdGUgd2FzCisJcG9zc2libGUsIHNvIHRoaXMgaXMgbm90IGEgc2VjdXJpdHkgaXNzdWUgYmV5b25kIHRoZSBEb1MKKwlwb3RlbnRpYWwuICAKKworCVVwZGF0ZSBleGFtcGxlIGNvbmZpZyBkaGNwIG9wdGlvbiA0NywgdGhlIHByZXZpb3VzCisJc3VnZ2VzdGlvbiBnZW5lcmF0ZWQgYW4gaWxsZWdhbCwgemVyby1sZW5ndGgsCisJb3B0aW9uLiBUaGFua3MgdG8gTWF0dGhpYXMgQW5kcmVlIGZvciBmaW5kaW5nIHRoaXMuCisKKwlSZXdyaXRlIGhvc3RzLWZpbGUgcmVhZGluZyBjb2RlIHRvIHJlbW92ZSB0aGUgbGltaXQgb2YKKwkxMDI0IGNoYXJhY3RlcnMgcGVyIGxpbmUuIEpvaG4gQyBNZXVzZXIgZm91bmQgdGhpcy4KKworCUNyZWF0ZSBhIG5ldC1pZCB0YWcgd2l0aCB0aGUgbmFtZSBvZiB0aGUgaW50ZXJmYWNlIG9uCisJd2hpY2ggdGhlIERIQ1AgcmVxdWVzdCB3YXMgcmVjZWl2ZWQuCisKKwlGaXhlZCBtaW5vciBtZW1vcnkgbGVhayBpbiBEQnVzIGNvZGUsIHRoYW5rcyB0byBKZXJlbXkKKwlMYWluZSBmb3IgdGhlIHBhdGNoLgorCisJRW1pdCBEQnVzIHNpZ25hbHMgYXMgdGhlIERIQ1AgbGVhc2UgZGF0YWJhc2UKKwljaGFuZ2VzLiBUaGFua3MgdG8gSmVyZW15IExhaW5lIGZvciB0aGUgcGF0Y2guCisKKwlBbGxvdyBmb3IgbW9yZSB0aGF0IG9uZSBNQUMgYWRkcmVzcyBpbiBhIGRoY3AtaG9zdAorCWxpbmUuIFRoaXMgY29uZmlndXJhdGlvbiB0ZWxscyBkbnNtYXNxIHRoYXQgaXQncyBPSyB0bworCWFiYW5kb24gYSBESENQIGxlYXNlIG9mIHRoZSBmaXhlZCBhZGRyZXNzIHRvIG9uZSBNQUMKKwlhZGRyZXNzLCBpZiBhbm90aGVyIE1BQyBhZGRyZXNzIGluIHRoZSBkaGNwLWhvc3Qgc3RhdGVtZW50IAorCWFza3MgZm9yIGFuIGFkZHJlc3MuIFRoaXMgaXMgdXNlZnVsIHRvIGdpdmUgYSBmaXhlZAorCWFkZHJlc3MgdG8gYSBob3N0IHdoaWNoIGhhcyB0d28gbmV0d29yayBpbnRlcmZhY2VzCisJKHNheSwgYSBsYXB0b3Agd2l0aCB3aXJlZCBhbmQgd2lyZWxlc3MgaW50ZXJmYWNlcy4pIAorCUl0J3MgdmVyeSBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoYXQgb25seSBvbmUgaW50ZXJmYWNlIAorCWF0IGEgdGltZSBpcyB1cCwgc2luY2UgZG5zbWFzcSBhYmFuZG9ucyB0aGUgZmlyc3QgbGVhc2UgCisJYW5kIHJlLXVzZXMgdGhlIGFkZHJlc3MgYmVmb3JlIHRoZSBsZWFzZWQgdGltZSBoYXMKKwllbGFwc2VkLiBKb2huIEdyYXkgc3VnZ2VzdGVkIHRoaXMuCisKKwlUd2VhayB0aGUgcmVzcG9uc2UgdG8gYSBESENQIHJlcXVlc3QgcGFja2V0IHdpdGggYSB3cm9uZworCXNlcnZlci1pZCB3aGVuIC0tZGhjcC1hdXRob3JpdGF0aXZlIGlzIHNldDsgZG5zbWFzcSBub3cKKwlyZXR1cm5zIGEgREhDUE5BSywgcmF0aGVyIHRoYW4gc2lsZW50bHkgaWdub3JpbmcgdGhlCisJcGFja2V0LiBUaGFua3MgdG8gQ2hyaXMgTWFyZ2V0IGZvciBzcG90dGluZyB0aGlzCisJaW1wcm92ZW1lbnQuCisKKwlBZGQgLS1jbmFtZSBvcHRpb24uIFRoaXMgcHJvdmlkZXMgYSBsaW1pdGVkIGFsaWFzCisJZnVuY3Rpb24sIHVzYWJsZSBmb3IgREhDUCBuYW1lcy4gVGhhbmtzIHRvIEFKIFdlYmVyIGZvcgorCXN1Z2dlc3Rpb25zIG9uIHRoaXMuCisKKwlVcGRhdGVkIGNvbnRyaWIvd2VibWluIHdpdGggbGF0ZXN0IHZlcnNpb24gZnJvbSBOZWlsCisJRmlzaGVyLgorCisJVXBkYXRlZCBQb2xpc2ggdHJhbnNsYXRpb24uIFRoYW5rcyB0byBKYW4gUHNvdGEuCisKKwlDb3JyZWN0IHRoZSB0ZXh0IG5hbWVzIGZvciBESENQIG9wdGlvbnMgNjQgYW5kIDY1IHRvIGJlCisJIm5pcystZG9tYWluIiBhbmQgIm5pcystc2VydmVycyIuCisKKwlVcGRhdGVkIFNwYW5pc2ggdHJhbnNsYXRpb24uIFRoYW5rcyB0byBDaHJpcyBDaGF0aGFtLgorCisJRm9yY2UgcmUtcmVhZGluZyBvZiAvZXRjL3Jlc29sdi5jb25mIHdoZW4gYW4gImludGVyZmFjZQorCXVwIiBldmVudCBvY2N1cnMuCisKKwordmVyc2lvbiAyLjQ1CisJRml4IHRvdGFsIEROUyBmYWlsdXJlIGluIHJlbGVhc2UgMi40NCB1bmxlc3MgLS1taW4tcG9ydCAKKwlzcGVjaWZpZWQuIFRoYW5rcyB0byBTdGV2ZW4gQmFydGggYW5kIEdyYW50IENvYWR5IGZvcgorCWJ1Z3JlcG9ydC4gQWxzbyByZWplY3Qgb3V0LW9mLXJhbmdlIHBvcnQgc3BlYywgd2hpY2ggY291bGQKKwlicmVhayB0aGluZ3MgdG9vOiBzdWdnZXN0aW9uIGZyb20gR2lsbGVzIEVzcGluYXNzZS4KKworCit2ZXJzaW9uIDIuNDQKKwlGaXggIGNyYXNoIHdoZW4gdW5rbm93biBjbGllbnQgYXR0ZW1wdHMgdG8gcmVuZXcgYSBESENQCisJbGVhc2UsIHByb2JsZW0gaW50cm9kdWNlZCBpbiB2ZXJzaW9uIDIuNDMuIFRoYW5rcyB0bworCUNhcmxvcyBDYXJ2YWxobyBmb3IgaGVscCBjaGFzaW5nIHRoaXMgZG93bi4KKworCUZpeCBwb3RlbnRpYWwgY3Jhc2ggd2hlbiBhIGhvc3Qgd2hpY2ggZG9lc24ndCBoYXZlIGEgbGVhc2UKKwlkb2VzIERIQ1BJTkZPUk0uIEFnYWluIGludHJvZHVjZWQgaW4gMi40My4gVGhpcyBidWcgaGFzCisJbmV2ZXIgYmVlbiByZXBvcnRlZCBpbiB0aGUgd2lsZC4KKworCUZpeCBjcmFzaCBpbiBuZXRsaW5rIGNvZGUgaW50cm9kdWNlZCBpbiAyLjQzLiBUaGFua3MgdG8KKwlKZWFuIFdvbHRlciBmb3IgZmluZGluZyB0aGlzLgorCisJQ2hhbmdlIGltcGxlbWVudGF0aW9uIG9mIG1pbl9wb3J0IHRvIHdvcmsgZXZlbiBpZiBtaW4tcG9ydAorCWlzIGxhcmdlLgorCisJUGF0Y2ggdG8gZW5hYmxlIGNvbXBpbGF0aW9uIG9mIGxhdGVzdCBNYWMgT1MgWC4gVGhhbmtzIHRvCisJRGF2aWQgR2lsbWFuLgorCisJVXBkYXRlIFNwYW5pc2ggdHJhbnNsYXRpb24uIFRoYW5rcyB0byBDaHJpc3RvcGhlciBDaGF0aGFtLgorCisKK3ZlcnNpb24gMi40MworCVVwZGF0ZWQgUG9saXNoIHRyYW5zbGF0aW9uLiBUaGFua3MgdG8gSmFuIFBzb3RhLgorCisJRmxhZyBlcnJvcnMgd2hlbiBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHJlcGVhdGVkCisJaWxsZWdhbGx5LgorCisJRnVydGhlciB0d2Vha3MgZm9yIEdOVS9rRnJlZUJTRAorCisJQWRkIC0tbm8td3JhcCB0byBtc2dtZXJnZSBjYWxsIC0gcHJvdmlkZXMgbmljZXIgLnBvIGZpbGUKKwlmb3JtYXQuCisKKwlIb25vdXIgbGVhc2UtdGltZSBzcGVjIGluIGRoY3AtaG9zdCBsaW5lcyBldmVuIGZvcgorCUJPT1RQLiBUaGUgdXNlciBpcyBhc3N1bWVkIHRvIGtub3duIHdoYXQgdGhleSBhcmUgZG9pbmcgaW4KKwl0aGlzIGNhc2UuIChIb3N0cyB3aXRob3V0IHRoZSB0aW1lIHNwZWMgc3RpbGwgZ2V0IGluZmluaXRlCisJbGVhc2VzIGZvciBCT09UUCwgb3Zlci1yaWRpbmcgdGhlIGRlZmF1bHQgaW4gdGhlCisJZGhjcC1yYW5nZS4pIFRoYW5rcyB0byBQZXRlciBLYXR6bWFubiBmb3IgdW5jb3ZlcmluZyB0aGlzLgorCisJRml4IHByb2JsZW0gbWF0Y2hpbmcgcmVsYXktYWdlbnQgaWRzLiBUaGFua3MgdG8gTWljaGFlbAorCVJhY2sgZm9yIHRoZSBidWcgcmVwb3J0LgorCisJQWRkIC0tbmFwdHItcmVjb3JkIG9wdGlvbi4gU3VnZ2VzdGlvbiBmcm9tIEpvaGFuCisJQmVyZ3F1aXN0LgorCisJSW1wbGVtZW50IFJGQyA1MTA3IHNlcnZlci1pZC1vdmVycmlkZSBESENQIHJlbGF5IGFnZW50CisJb3B0aW9uLgorCisJQXBwbHkgcGF0Y2hlcyBmcm9tIFN0ZWZhbiBLcnVnZXIgZm9yIGNvbXBpbGF0aW9uIG9uCisJU29sYXJpcyAxMCB1bmRlciBTdW4gc3R1ZGlvLgorCisJWWV0IG1vcmUgdHdlYWtpbmcgb2YgTGludXggY2FwYWJpbGl0eSBjb2RlLCB0byBzdXBwcmVzcworCXBvaW50bGVzcyB3aW5nZWluZyBmcm9tIGtlcm5lbCAyLjYuMjUgYW5kIGFib3ZlLgorCisJSW1wcm92ZSBlcnJvciBjaGVja2luZyBkdXJpbmcgc3RhcnR1cC4gUHJldmlvdXNseSwgc29tZQorCWVycm9ycyB3aGljaCBvY2N1cnJlZCBkdXJpbmcgc3RhcnR1cCB3b3VsZCBiZSB3b3JrZWQKKwlhcm91bmQsIHdpdGggZG5zbWFzcSBzdGlsbCBzdGFydGluZyB1cC4gU29tZSB3ZXJlIGxvZ2dlZCwKKwlzb21lIHNpbGVudC4gTm93LCB0aGV5IGFsbCBjYXVzZSBhIGZhdGFsIGVycm9yIGFuZCBkbnNtYXNxIAorCXRlcm1pbmF0ZXMgd2l0aCBhIG5vbi16ZXJvIGV4aXQgY29kZS4gVGhlIGVycm9ycyBhcmUgdGhvc2UKKwlhc3NvY2lhdGVkIHdpdGggY2hhbmdpbmcgdWlkIGFuZCBnaWQsIHNldHRpbmcgcHJvY2VzcyAKKwljYXBhYmlsaXRpZXMgYW5kIHdyaXRpbmcgdGhlIHBpZGZpbGUuIFRoYW5rcyB0byBVd2UKKwlHYW5zZXJ0IGFuZCB0aGUgU3VzZSBzZWN1cml0eSB0ZWFtIGZvciBwb2ludGluZyBvdXQgCisJdGhpcyBpbXByb3ZlbWVudCwgYW5kIEJpbGwgUmVpbWVycyBmb3IgZ29vZCBpbXBsZW1lbnRhdGlvbgorCXN1Z2dlc3Rpb25zLgorCisJUHJvdmlkZSBOT19MQVJHRUZJTEUgY29tcGlsZSBvcHRpb24gdG8gc3dpdGNoIG9mZiBsYXJnZWZpbGUKKwlzdXBwb3J0IHdoZW4gY29tcGlsaW5nIGFnYWluc3QgdmVyc2lvbnMgb2YgdWNsaWJjIHdoaWNoCisJZG9uJ3Qgc3VwcG9ydCBpdC4gVGhhbmtzIHRvIFN0ZXBoYW5lIEJpbGxpYXJ0IGZvciB0aGUgcGF0Y2guCisKKwlJbXBsZW1lbnQgcmFuZG9tIHNvdXJjZSBwb3J0cyBmb3IgaW50ZXJhY3Rpb25zIHdpdGgKKwl1cHN0cmVhbSBuYW1lc2VydmVycy4gTmV3IHNwb29maW5nIGF0dGFja3MgaGF2ZSBiZWVuIGZvdW5kCisJYWdhaW5zdCBuYW1lc2VydmVycyB3aGljaCBkbyBub3QgZG8gdGhpcywgdGhvdWdoIGl0IGlzIG5vdAorCWNsZWFyIGlmIGRuc21hc3EgaXMgdnVsbmVyYWJsZSwgc2luY2UgdG8gZG9lc24ndCBpbXBsZW1lbnQKKwlyZWN1cnNpb24uIEJ5IGRlZmF1bHQgZG5zbWFzcSB3aWxsIG5vdyB1c2UgYSBkaWZmZXJlbnQKKwlzb3VyY2UgcG9ydCAoYW5kIHNvY2tldCkgZm9yIGVhY2ggcXVlcnkgaXQgc2VuZHMKKwl1cHN0cmVhbS4gVGhpcyBiZWhhdmlvdXIgY2FuIHN1cHByZXNzZWQgdXNpbmcgdGhlCisJLS1xdWVyeS1wb3J0IG9wdGlvbiwgYW5kIHRoZSBvbGQgZGVmYXVsdCBiZWhhdmlvdXIKKwlyZXN0b3JlZCB1c2luZyAtLXF1ZXJ5LXBvcnQ9MC4gRXhwbGljaXQgc291cmNlLXBvcnQKKwlzcGVjaWZpY2F0aW9ucyBpbiAtLXNlcnZlciBjb25maWdzIGFyZSBzdGlsbCBob25vdXJlZC4KKworCVJlcGxhY2UgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLCBmb3IgYmV0dGVyCisJc2VjdXJpdHkuIE9uIG1vc3QgQlNEIHN5c3RlbXMsIGRuc21hc3EgdXNlcyB0aGUKKwlhcmM0cmFuZG9tKCkgUk5HLCB3aGljaCBpcyBzZWN1cmUsIGJ1dCBvbiBvdGhlciBwbGF0Zm9ybXMsCisJaXQgcmVsaWVkIG9uIHRoZSBDLWxpYnJhcnkgUk5HLCB3aGljaCBtYXkgYmUKKwlndWVzc2FibGUgYW5kIHRoZXJlZm9yZSBhbGxvdyBzcG9vZmluZy4gVGhpcyByZWxlYXNlCisJcmVwbGFjZXMgdGhlIGxpYmMgUk5HIHdpdGggdGhlIFNVUkYgUk5HLCBmcm9tIERhbmllbAorCUouIEJlcnN0ZWluJ3MgREpCRE5TIHBhY2thZ2UuICAKKworCURvbid0IGF0dGVtcHQgdG8gY2hhbmdlIHVzZXIgb3IgZ3JvdXAgb3Igc2V0IGNhcGFiaWxpdGllcworCWlmIGRuc21hc3EgaXMgcnVuIGFzIGEgbm9uLXJvb3QgdXNlci4gV2l0aG91dCB0aGlzLCB0aGUKKwljaGFuZ2UgZnJvbSBzb2Z0IHRvIGhhcmQgZXJyb3JzIHdoZW4gdGhlc2UgZmFpbCBjYXVzZXMKKwlwcm9ibGVtcyBmb3Igbm9uLXJvb3QgZGFlbW9ucyBsaXN0ZW5pbmcgb24gaGlnaAorCXBvcnRzLiBUaGFua3MgdG8gUGF0cmljayBNY0xlYW4gZm9yIHNwb3R0aW5nIHRoaXMuCisKKwlVcGRhdGVkIEZyZW5jaCB0cmFuc2xhdGlvbi4gVGhhbmtzIHRvIEdpbGRhcyBMZSBOYWRhbi4KKworCit2ZXJzaW9uIDIuNDIKKwlUaGUgY2hhbmdlbG9nIGZvciB2ZXJzaW9uIDIuNDIgYW5kIGVhcmxpZXIgaXMgCisJYXZhaWxhYmxlIGluIENIQU5HRUxPRy5hcmNoaXZlLgpkaWZmIC0tZ2l0IGEvQ0hBTkdFTE9HLmFyY2hpdmUgYi9DSEFOR0VMT0cuYXJjaGl2ZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yZGY0OTViCi0tLSAvZGV2L251bGwKKysrIGIvQ0hBTkdFTE9HLmFyY2hpdmUKQEAgLTAsMCArMSwyNTA5IEBACityZWxlYXNlIDAuNCAtIGluaXRpYWwgcHVibGljIHJlbGVhc2UKKworcmVsZWFzZSAwLjUgLSBhZGRlZCBjYWNoaW5nLCByZW1vdmVkIGNvbXBpbGVyIHdhcm5pbmcgb24gbGludXggUFBDCisKK3JlbGVhc2UgMC42IC0gVENQIGhhbmRsaW5nOiBjbG9zZSBzb2NrZXQgYW5kIHJldHVybiB0byBjb25uZWN0IHN0YXRlIGlmIHdlIAorICAgICAgICAgICAgICBjYW4ndCByZWFkIHRoZSBmaXJzdCBieXRlLiBUaGlzIGNvcnJlY3RzIGEgcHJvYmxlbSBzZWVuIHZlcnkgCisgICAgICAgICAgICAgIG9jY2FzaW9uYWxseSB3aGVyZSBkbnNtYXNxIHdvdWxkIGxvb3AgdXNpbmcgYWxsIGF2YWlsYWJsZSBDUFUuCisKKwkgICAgICBBZGRlZCBhIHBhdGNoIGZyb20gQ3JpcyBCYWlsaWZmIDxjLmJhaWxpZmZAZS1zZWN1cmUuY29tLmF1PgorCSAgICAgIHRvIHNldCBTT19SRVVTRUFERFIgb24gdGhlIHRjcCBzb2NrZXQgd2hpY2ggc3RvcHMgcHJvYmxlbXMgd2hlbgorICAgICAgICAgICAgICBkbnNtYXNxIGlzIHJlc3RhcnRlZCBhbmQgb2xkIGNvbm5lY3Rpb25zIHN0aWxsIGV4aXN0LgorCisJICAgICAgU3RvcHBlZCBjbGFpbWluZyBpbiBkb2MuaHRtbCB0aGF0IHNtYWlsIGlzIHRoZSBkZWZhdWx0IERlYmlhbgorCSAgICAgIG1haWxlciwgc2luY2UgaXQgaXNuJ3QgYW55IGxvbmdlci4gKFBvaW50ZWQgb3V0IGJ5CisJICAgICAgRGF2aWQgS2FybGluIDxka2FybGluQGNvbG9yYWRvbXRuLmVkdT4pCisKK3JlbGVhc2UgMC43ICAgQ3JlYXRlIGEgcGlkZmlsZSBhdCAvdmFyL3J1bi9kbnNtYXNxLnBpZAorCisJICAgICAgRXh0ZW5zaXZlIGFybW91cmluZyBhZ2FpbnN0ICJwb2lzb24gcGFja2V0cyIgY291cnRlc3kgb2YKKyAgICAgICAgICAgICAgVGhvbWFzIE1vZXN0bCA8dG1vZXN0bEBnbXgubmV0PgorCisJICAgICAgU2V0IHNvY2thZGRyLnNhX2ZhbWlseSBvbiBvdXRnb2luZyBhZGRyZXNzLCBwYXRjaCBmcm9tCisJICAgICAgRGF2aWQgU3ltb25kcyA8eG94dXNAdXNhLm5ldD4KKworICAgICAgICAgICAgICBQYXRjaCB0byBjbGVhciBjYWNoZSBvbiBTSUdIVVAgCisJICAgICAgZnJvbSBKYXNvbiBMLiBXYWduZXIgPG5pYWxzY29ydmFAeWFob28uY29tPiAKKworCSAgICAgIEZpeCBiYWQgYnVnIHJlc3VsdGluZyBmcm9tIG5vdCBpbml0aWFsaXNpbmcgdmFsdWUtcmVzdWx0CQorCSAgICAgIGFkZHJlc3MtbGVuZ3RoIHBhcmFtZXRlciB0byByZWN2ZnJvbSgpIGFuZCBhY2NlcHQoKSAtIGl0CisJICAgICAgd29ya2VkIGJ5IGx1Y2sgYmVmb3JlIQorCityZWxlYXNlIDAuOTUgIE1ham9yIHJld3JpdGU6IHJlbW92ZSBjYWxscyB0byBnZXRob3N0YnluYW1lKCkgYW5kIHRhbGsKKyAgICAgICAgICAgICAgZGlyZWN0bHkgdG8gdGhlIHVwc3RyZWFtIHNlcnZlcihzKSBpbnN0ZWFkLgorICAgICAgICAgICAgICBUaGlzIGhhcyBtYW55IGFkdmFudGFnZXMuCisgICAgICAgICAgICAgICgxKSBEbnNtYXNxIG5vIGxvbmdlciBibG9ja3MgZHVyaW5nIGxvbmcgbG9va3Vwcy4KKyAgICAgICAgICAgICAgKDIpIEFsbCBxdWVyeSB0eXBlcyBhcmUgaGFuZGxlZCBub3csIChlZyBNWCkgbm90IGp1c3QgaW50ZXJuZXQKKyAgICAgICAgICAgICAgICAgIGFkZHJlc3MgcXVlcmllcy4gQWRkcmVzc2VzIGFyZSBjYWNoZWQsIGFsbCBvdGhlcgorICAgICAgICAgICAgICAgICAgcXVlcmllcyBhcmUgZm9yd2FyZGVkIGRpcmVjdGx5LgorICAgICAgICAgICAgICAoMykgVGltZS10by1saXZlIGRhdGEgZnJvbSB1cHN0cmVhbSBzZXJ2ZXIgaXMgcmVhZCBhbmQKKyAgICAgICAgICAgICAgICAgIHVzZWQgYnkgZG5zbWFzcSB0byBwdXJnZSBlbnRyaWVzIGZyb20gdGhlIGNhY2hlLgorICAgICAgICAgICAgICAoNCkgL2V0Yy9ob3N0cyBpcyBzdGlsbCByZWFkIGFuZCBpdHMgY29udGVudHMgc2VydmVkICh1bmxlc3MgCisJICAgICAgICAgIHRoZSAtaCBvcHRpb24gaXMgZ2l2ZW4pLgorICAgICAgICAgICAgICAoNSkgRG5zbWFzcSBjYW4gZ2V0IGl0cyB1cHN0cmVhbSBzZXJ2ZXJzIGZyb20KKyAgICAgICAgICAgICAgICAgIGEgZmlsZSBvdGhlciB0aGFuIC9ldGMvcmVzb2x2LmNvbmYgKC1yIG9wdGlvbikgdGhpcyBhbGxvd3MKKyAgICAgICAgICAgICAgICAgIGRuc21hc3EgdG8gc2VydmUgbmFtZXMgdG8gdGhlIG1hY2hpbmUgaXQgaXMgcnVubmluZworICAgICAgICAgICAgICAgICAgb24gKHB1dCBuYW1lc2VydmVyIDEyNy4wLjAuMSBpbiAvZXRjL3Jlc29sdi5jb25mIGFuZAorICAgICAgICAgICAgICAgICAgZ2l2ZSBkbnNtYXNxIHRoZSBvcHRpb24gLXIgL2V0Yy9yZXNvbHYuZG5zbWFzcSkKKyAgICAgICAgICAgICAgKDYpIERuc21hc3Egd2lsbCByZS1yZWFkIGl0cyBzZXJ2ZXJzIGlmIHRoZQorICAgICAgICAgICAgICAgICAgbW9kaWZpY2F0aW9uIHRpbWUgb2YgcmVzb2x2LmNvbmYgY2hhbmdlcy4gQWxvbmcgd2l0aAorICAgICAgICAgICAgICAgICAgNCBhYm92ZSB0aGlzIGFsbG93cyBuYW1lc2VydmVycyB0byBiZSBzZXQKKwkJICBhdXRvbWF0aWNhbGx5IGJ5IHBwcCBvciBkaGNwLgkgCisKKyAgICAgICAgICAgICAgQSByZWFsbHkgY2xldmVyIE5BVC1saWtlIHRlY2huaXF1ZSBhbGxvd3MgdGhlIGRhZW1vbiB0byBoYXZlIGxvdHMKKyAgICAgICAgICAgICAgb2YgcXVlcmllcyBpbiBwcm9ncmVzcywgYnV0IHN0aWxsIHJlbWFpbiB2ZXJ5IGxpZ2h0d2VpZ2h0LgorCSAgICAgIERuc21hc3EgaGFzIGEgc21hbGwgZm9vdHByaW50IGFuZCBub3JtYWxseSBkb2Vzbid0IGFsbG9jYXRlCisgICAgICAgICAgICAgIGFueSBtb3JlIG1lbW9yeSBhZnRlciBzdGFydC11cC4gVGhlIE5BVC1saWtlIGZvcndhcmRpbmcgd2FzCisgICAgICAgICAgICAgIGluc3BpcmVkIGJ5IGEgc3VnZ2VzdGlvbiBmcm9tIEVsaSBDaGVuIDxlbGlAcm91dGVmcmVlLmNvbT4KKworcmVsZWFzZSAwLjk2ICBGaXhlZCBlbWJhcnJhc3NpbmcgdGhpbmtvIGluIGNhY2hlIGxpbmtlZC1saXN0IGNvZGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorcmVsZWFzZSAwLjk4ICBTb21lIGVuaGFuY2VtZW50cyBhbmQgYnVnLWZpeGVzLiAKKyAgICAgICAgICAgICAgVGhhbmtzIHRvICJEZW5pcyBDYXJyZSIgPGRlbmlzLmNhcnJlQGxhcG9zdGUubmV0PiBhbmQgTWFydGluIAorICAgICAgICAgICAgICBPdHRlIDxvdHRlQGVzc2MucHN1LmVkdT4JCisgICAgICAgICAgICAgIAorCSAgICAgICgxKSBEbnNtYXNxIG5vdyBhbHdheXMgc2V0cyB0aGUgSVAgc291cmNlIGFkZHJlc3MKKyAgICAgICAgICAgICAgICAgIG9mIGl0cyByZXBsaWVzIGNvcnJlY3RseS4gT2xkZXIgdmVyc2lvbnMgd291bGQgbm90IGFsd2F5cworICAgICAgICAgICAgICAgICAgZG8gdGhpcyBvbiBtdWx0aS1ob21lZCBhbmQgSVAgYWxpYXNlZCBob3N0cywgd2hpY2ggdmlvbGF0ZXMgCisgICAgICAgICAgICAgICAgICB0aGUgUkZDLgorICAgICAgICAgICAgICAoMikgRG5zbWFzcSBubyBsb25nZXIgY3Jhc2hlcyBpZiBhIHNlcnZlciBsb29wIGlzIGNyZWF0ZWQKKwkgICAgICAgICAgKGllIGRuc21hc3EgaXMgdG9sZCB0byB1c2UgaXRzZWxmIGFzIGFuIHVwc3RyZWFtIHNlcnZlci4pCisgICAgICAgICAgICAgICAgICBOb3cgaXQganVzdCBsb2dzIHRoZSBwcm9ibGVtIGFuZCBkb2Vzbid0IHVzZSB0aGUgYmFkIAorICAgICAgICAgICAgICAgICAgc2VydmVyIGFkZHJlc3MuCisgICAgICAgICAgICAgICgzKSBEbnNtYXNxIHNob3VsZCBub3cgZm9yd2FyZCAoYnV0IG5vdCBjYWNoZSkgaW52ZXJzZSBxdWVyaWVzIAorICAgICAgICAgICAgICAgICAgYW5kIHNlcnZlciBzdGF0dXMgcXVlcmllczsgdGhpcyBmZWF0dXJlIGhhcyBub3QgYmVlbiB0ZXN0ZWQuCisgICAgICAgICAgICAgICg0KSBEb24ndCB3cml0ZSB0aGUgcGlkIGZpbGUgd2hlbiBpbiBub24tZGFlbW9uIG1vZGUuCisJICAgICAgKDUpIENyZWF0ZSB0aGUgcGlkIGZpbGUgbW9kZSA2NDQsIHJhdGhlciB0aGVuIDY2NiAoISkuCisgICAgICAgICAgICAgICg2KSBHZW5lcmF0ZSBxdWVyaWVzIHRvIHVwc3RyZWFtIG5hbWVzZXJ2ZXJzIHdpdGggdW5wcmVkaWN0YWJsZQorICAgICAgICAgICAgICAgICAgaWRzLCB0byB0aHdhcnQgRE5TIHNwb29mZXJzLgorICAgICAgICAgICAgICAoNykgRG5zbWFzcSBubyBsb25nZXIgZm9yd2FyZHMgcXVlcmllcyB3aGVuIHRoZSAKKwkgICAgICAgICAgInJlY3Vyc2lvbiBkZXNpcmVkIiBiaXQgaXMgbm90IHNldCBpbiB0aGUgaGVhZGVyLgorCSAgICAgICg4KSBGaXhlZCBnZXRvcHQgY29kZSB0byB3b3JrIG9uIGNvbXBpbGVycyB3aXRoIHVuc2lnbmVkIGNoYXIuCisgICAgICAgICAgICAgIAorcmVsZWFzZSAwLjk5MSBBZGRlZCAtYiBmbGFnOiB3aGVuIHNldCBjYXVzZXMgZG5zbWFzcSB0byBhbHdheXMgYW5zd2VyCisJICAgICAgcmV2ZXJzZSBxdWVyaWVzIG9uIHRoZSBSRkMgMTkxOCBwcml2YXRlIElQIHNwYWNlIGl0c2VsZiBhbmQKKyAgICAgICAgICAgICAgbmV2ZXIgZm9yd2FyZCB0aGVtIHRvIGFuIHVwc3RyZWFtIHNlcnZlci4gSWYgdGhlIG5hbWUgaXMgbm90IGluCisJICAgICAgL2V0Yy9ob3N0cywgZG5zbWFzcSByZXBsaWVzIHdpdGggdGhlIGRvdHRlZC1xdWFkIGFkZHJlc3MuCisgICAgICAgICAgICAgIAorICAgICAgICAgICAgICBGaXhlZCBhIGJ1ZyB3aGljaCBzdG9wcGVkIGRuc21hc3Egd29ya2luZyBvbiBhIGJveCB3aXRoCisgICAgICAgICAgICAgIHR3byBvciBtb3JlIGludGVyZmFjZXMgd2l0aCB0aGUgc2FtZSBJUCBhZGRyZXNzLiAKKworICAgICAgICAgICAgICBGaXhlZCBjYWNoaW5nIG9mIENOQU1Fcy4gUHJldmlvdXNseSwgYSBDTkFNRSB3aGljaCBwb2ludGVkCisgICAgICAgICAgICAgIHRvICBhIG5hbWUgd2l0aCBtYW55IEEgcmVjb3JkcyB3b3VsZCBub3QgaGF2ZSBhbGwgdGhlIGFkZHJlc3NlcworICAgICAgICAgICAgICByZXR1cm5lZCB3aGVuIGJlaW5nIGFuc3dlcmVkIGZyb20gdGhlIGNhY2hlLgorCisJICAgICAgVGhhbmtzIHRvICJTdGV2ZSBIYXJkeSIgPHMuYS5oYXJkeUBjb25uZWN0dXguY29tPiBmb3IgaGlzIGlucHV0IAorICAgICAgICAgICAgICBvbiB0aGVzZSBmaXhlcy4KKworICAgICAgICAgICAgICBGaXhlZCByYWNlIHdoaWNoIGNvdWxkIGNhdXNlIGRuc21hc3EgdG8gbWlzcyB0aGUgc2Vjb25kIG9mCisgICAgICAgICAgICAgIHR3byBjbG9zZWx5LXNwYWNlZCB1cGRhdGVzIG9mIHJlc29sdi5jb25mIChUaGFua3MgdG8gRWxpIENoZW4KKyAgICAgICAgICAgICAgZm9yIHBvaW50aW5nIHRoaXMgb3V0LikKKworCSAgICAgIEZpeGVkIGEgYnVnIHdoaWNoIGNvdWxkIGNhdXNlIGRuc21hc3EgdG8gZmFpbCB0byBjYWNoZSBzb21lCisgICAgICAgICAgICAgIGRucyBuYW1lcy4KKworcmVsZWFzZSAwLjk5MiBTbWFsbCBjaGFuZ2UgdG8gbWVtb3J5IGFsbG9jYXRpb24gc28gdGhhdCBuYW1lcyBpbiAvZXRjL2hvc3RzCisgICAgICAgICAgICAgIGRvbid0IHVzZSBjYWNoZSBzbG90cy4gQWxzbyBtYWtlICItYyAwIiBmbGFnIG1lYW5pbmdmdWxseSAKKyAgICAgICAgICAgICAgZGlzYWJsZSBjYWNoaW5nIGNvbXBsZXRlbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCityZWxlYXNlIDAuOTkzIFJldHVybiBvbmx5IHRoZSBmaXJzdCAoY2Fub25pY2FsKSBuYW1lIGZyb20gYW4gZW50cnkgaW4KKwkgICAgICAvZXRjL2hvc3RzIGFzIHJlcGx5IHRvIHJldmVyc2UgcXVlcnkuCisgICAgICAgICAgICAgIAorICAgICAgICAgICAgICBIYW5kbGUgd2lsZGNhcmQgcXVlcmllcyBmb3IgbmFtZXMvYWRkcmVzc2VzIGluIC9ldGMvaG9zdHMKKwkgICAgICB0aGlzIGlzIG1haW5seSB0byBhbGxvdyByZXZlcnNlIGxvb2t1cHMgYnkgZGlnIHRvIHN1Y2NlZWQuCisJICAgICAgKEJ1ZyByZXBvcnRlZCBieSBTaW1vbiBKLiBSb3dlIiA8c3Jvd2VAbW9zZS5vcmcudWs+KSAgCisgICAgICAgICAgICAgIAorICAgICAgICAgICAgICBTdWJ0bGUgY2hhbmdlIHRvIHRoZSBsb2dpYyB3aGljaCBzZWxlY3RzIHdoaWNoIG9mIG11bHRpcGxlCisJICAgICAgdXBzdHJlYW0gc2VydmVycyB3ZSBzZW5kIHF1ZXJpZXMgdG8uIFRoaXMgZml4ZXMgYSBwcm9ibGVtIAorICAgICAgICAgICAgICB3aGVyZSBkbnNtYXNxIGNvbnRpbnVvdXNseSBzZW5kcyBxdWVyaWVzIHRvIGEgc2VydmVyIHdoaWNoCisJICAgICAgaXMgcmV0dXJuaW5nIGVycm9yIGNvZGVzIGFuZCBpZ25vcmVzIG9uZSB3aGljaCBpcyB3b3JraW5nLgorICAgICAgICAgICAgICAKK3JlbGVhc2UgMC45OTQgRml4ZWQgYnVnIHdoaWNoIGJyb2tlIGxvb2t1cCBvZiBuYW1lcyBpbiAvZXRjL2hvc3RzCisgICAgICAgICAgICAgIHdoaWNoIGhhdmUgdXBwZXItY2FzZSBsZXR0ZXJzIGluIHRoZW0uIFRoYW5rcyBmb3IgSm9hbyBDbGVtZW50ZQorICAgICAgICAgICAgICBmb3Igc3BvdHRpbmcgdGhhdCBvbmUuIAorCisJICAgICAgT3V0cHV0IGNhY2hlIHN0YXRpc3RpY3Mgb24gcmVjZWlwdCBvZiBTSUdVU1IxLiBUaGVzZSBnbworICAgICAgICAgICAgICB0byBzeXNsb2cgZXhjZXB0IGluIGRlYnVnICgtZCkgbW9kZSwgd2hlbiBhIGNvbXBsZXRlIGNhY2hlCisJICAgICAgZHVtcCBnb2VzIHRvIHN0ZG91dC4gU3VnZ2VzdGlvbiBmcm9tIEpvYW8gQ2xlbWVudGUsIGNvZGUKKyAgICAgICAgICAgICAgYmFzZWQgaW4gSm9obiBWb2xwZSdzLgorICAgICAgICAgICAgICAKKwkgICAgICBBY2NlcHQgR05VIGxvbmcgb3B0aW9ucyBvbiB0aGUgY29tbWFuZCBsaW5lLiBDb2RlIGZyb20gCisJICAgICAgSm9obiBWb2xwZSBmb3IgdGhpcy4gCisKKyAgICAgICAgICAgICAgU3BsaXQgc291cmNlIGNvZGUgaW50byBtdWx0aXBsZSBmaWxlcyBhbmQgcHJvZHVjZWQgCisJICAgICAgYSBwcm9wZXIgbWFrZWZpbGUuIAorICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgSW5jbHVkZWQgY29kZSBmcm9tIEpvaG4gVm9scGUgdG8gcGFyc2UgZGhjcC5sZWFzZXMgZmlsZQorICAgICAgICAgICAgICB3cml0dGVuIGJ5IElTQyBkaGNwZC4gVGhlIGhvc3RuYW1lcyBpbiB0aGUgbGVhc2VzIGZpbGUgYXJlCisgICAgICAgICAgICAgIGFkZGVkIHRvIHRoZSBjYWNoZSBhbmQgdXBkYXRlZCBhcyBkaGNwZCB1cGRhdGVzIHRoZSAKKyAgICAgICAgICAgICAgbGVhc2VzIGZpbGUuIFRoZSBjb2RlIGhhcyBiZWVuIGhlYXZpbHkgcmUtd29ya2VkIGJ5IG1lLAorICAgICAgICAgICAgICBzbyBhbnkgYnVncyBhcmUgcHJvYmFibHkgbWluZS4KKworcmVsZWFzZSAwLjk5NSBTbWFsbCB0aWR5LXVwcyB0byBzaWduYWwgaGFuZGxpbmcgYW5kIGNhY2hlIGNvZGUuCisKK3JlbGVhc2UgMC45OTYgQWRkZWQgbmVnYXRpdmUgY2FjaGluZzogSWYgZG5zbWFzcSBnZXRzIGEgIm5vIHN1Y2ggZG9tYWluIiByZXBseQorICAgICAgICAgICAgICBmcm9tIGFuIHVwc3RyZWFtIG5hbWVzZXJ2ZXIsIGl0IHdpbGwgY2FjaGUgdGhhdCBpbmZvcm1hdGlvbgorICAgICAgICAgICAgICBmb3IgYSB0aW1lIHNwZWNpZmllZCBieSB0aGUgU09BIFJSIGluIHRoZSByZXBseS4gU2VlIFJGQyAyMzA4CisgICAgICAgICAgICAgIGZvciBkZXRhaWxzLiBUaGlzIGlzIHVzZWZ1bCB3aXRoICByZXNvbHZlciBsaWJyYXJpZXMKKyAgICAgICAgICAgICAgd2hpY2ggYXBwZW5kIGFzc29ydGVkIHN1ZmZpY2VzIHRvIG5vbi1GUUROIGluIGFuIGF0dGVtcHQgdG8gCisgICAgICAgICAgICAgIHJlc29sdmUgdGhlbSwgY2F1c2luZyB1c2VsZXNzIGNhY2hlIG1pc3Nlcy4KKworICAgICAgICAgICAgICBBZGRlZCAtaSBmbGFnLCB3aGljaCByZXN0cmljdHMgZG5zbWFzcSB0byBvZmZlcmluZyBuYW1lIHNlcnZpY2UKKyAgICAgICAgICAgICAgb25seSBvbiBzcGVjaWZpZWQgaW50ZXJmYWNlcy4KKworcmVsZWFzZSAwLjk5NyBEZWxldGVkIElOU1RBTEwgc2NyaXB0IGFuZCBhZGRlZCAiaW5zdGFsbCIgdGFyZ2V0IHRvIG1ha2VmaWxlLgorCisgICAgICAgICAgICAgIFN0b3BwZWQgZGlzdHJpYnV0aW5nIGJpbmFyaWVzIGluIHRoZSB0YXJiYWxsIHRvIGF2b2lkIAorICAgICAgICAgICAgICBsaWJjIHZlcnNpb24gY2xhc2hlcy4KKworICAgICAgICAgICAgICBGaXhlZCAgaW50ZXJmYWNlIGRldGVjdGlvbiBjb2RlIHRvCisgICAgICAgICAgICAgIHJlbW92ZSBzcHVyaW91cyBzdGFydHVwIGVycm9ycyBpbiByYXJlIGNpcmN1bXN0YW5jZXMuCisKKyAgICAgICAgICAgICAgRG5zbWFzcSBub3cgY2hhbmdlcyBpdHMgdWlkLCBpcnJldm9jYWJseSwgdG8gbm9ib2R5IGFmdGVyCisgICAgICAgICAgICAgIHN0YXJ0dXAgZm9yIHNlY3VyaXR5IHJlYXNvbnMuIFRoYW5rcyB0byBQZXRlciBCYWlsZXkgZm9yCisgICAgICAgICAgICAgIHRoaXMgcGF0Y2guCisKKwkgICAgICBDb3BlIHdpdGggaW5maW5pdGUgREhDUCBsZWFzZXMuIFBhdGNoIHRoYW5rcyB0byAKKwkgICAgICBZYWFjb3YgQWtpYmEgU2xhbWEuCisKKwkgICAgICBBZGRlZCBycG0gY29udHJvbCBmaWxlcyB0byAudGFyLmd6IGRpc3RyaWJ1dGlvbi4gVGhhbmtzIHRvCisgICAgICAgICAgICAgIFBldGVyIEJhbGR3aW4gYXQgQ2xhcmtDb25uZWN0IGZvciB0aG9zZS4KKworICAgICAgICAgICAgICBJbXByb3ZlZCBzdGFydHVwIHNjcmlwdCBmb3IgcnBtcy4gVGhhbmtzIHRvIFlhYWNvdiBBa2liYSBTbGFtYS4KKworcmVsZWFzZSAxLjAgICBTdGFibGUgcmVsZWFzZTogZG5zbWFzcSBpcyBub3cgY29uc2lkZXJlZCBmZWF0dXJlLWNvbXBsZXRlCisgICAgICAgICAgICAgIGFuZCBzdGFibGUuCisgICAgICAgICAgICAgIAorcmVsZWFzZSAxLjEgICBBZGRlZCAtLXVzZXIgYXJndW1lbnQgdG8gYWxsb3cgdXNlciB0byBjaGFuZ2UgdG8KKyAgICAgICAgICAgICAgYSBkaWZmZXJlbnQgdXNlcmlkLgorCisgICAgICAgICAgICAgIEFkZGVkIC0tbXgtdGFyZ2V0IGFyZ3VtZW50IHRvIGFsbG93IG1haWwgdG8gYmUgZGVsaXZlcmVkCisgICAgICAgICAgICAgIGF3YXkgZnJvbSB0aGUgZ2F0ZXdheSBtYWNoaW5lIHJ1bm5pbmcgZG5zbWFzcS4KKworICAgICAgICAgICAgICBGaXhlZCBoaWdobHkgIG9ic2N1cmUgYnVnIHdpdGggd2lsZGNhcmQgcXVlcmllcyBmb3IKKyAgICAgICAgICAgICAgREhDUCBsZWFzZSBkZXJpdmVkIG5hbWVzLgorCisgICAgICAgICAgICAgIE1vdmVkIG1hbnBhZ2UgZnJvbSBzZWN0aW9uIDEgdG8gc2VjdGlvbiA4LgorCisgICAgICAgICAgICAgIEFkZGVkIC0tbm8tcG9sbCBvcHRpb24uCisgICAgICAgICAgICAgIEFkZGVkIFN1c2UtcnBtIHN1cHBvcnQuCisgICAgICAgICAgICAgIFRoYW5rcyB0byBKb2VyZyBNYXllciBmb3IgdGhlIGxhc3QgdHdvLgorCityZWxlYXNlIDEuMiAgIEFkZGVkIElQdjYgRE5TIHJlY29yZCBzdXBwb3J0LiBBQUFBIHJlY29yZHMgYXJlIGNhY2hlZAorICAgICAgICAgICAgICBhbmQgcmVhZCBmcm9tIC9ldGMvaG9zdHMuIFJldmVyc2UtbG9va3VwcyBpbiB0aGUKKwkgICAgICBpcDYuaW50IGFuZCBpcDYuYXJwYSBkb21haW5zIGFyZSBzdXBwb3J0ZWQuIERuc21hc3EgY2FuCisgICAgICAgICAgICAgIHRhbGsgdG8gdXBzdHJlYW0gc2VydmVycyB2aWEgSVB2NiBpZiBpdCBmaW5kcyBJUDYgYWRkcmVzc2VzCisgICAgICAgICAgICAgIGluIC9ldGMvcmVzb2x2LmNvbmYgYW5kIGl0IG9mZmVycyBETlMgc2VydmljZSBhdXRvbWF0aWNhbGx5CisgICAgICAgICAgICAgIGlmIElQdjYgc3VwcG9ydCBpcyBwcmVzZW50IGluIHRoZSBrZXJuZWwuCisKKyAgICAgICAgICAgICAgRXh0ZW5kZWQgbmVnYXRpdmUgY2FjaGluZyB0byBOT0RBVEEgcmVwbGllcy4KKworICAgICAgICAgICAgICBSZS12YW1wZWQgQ05BTUUgcHJvY2Vzc2luZyB0byBjb3BlIHdpdGggUkZDIDIzMTcncyB1c2Ugb2YKKyAgICAgICAgICAgICAgQ05BTUVTIHRvIFBUUiBSUnMgaW4gQ0lEUi4KKworICAgICAgICAgICAgICBBZGRlZCBjb25maWcuaCBhbmQgYSBjb3VwbGUgb2Ygc3ltYm9scyB0byBhaWQKKyAgICAgICAgICAgICAgY29tcGlsYXRpb24gb24gbm9uLWxpbnV4IHN5c3RlbXMuCisKK3JlbGVhc2UgMS4zICAgU29tZSB2ZXJzaW9ucyBvZiB0aGUgTGludXgga2VybmVsIHJldHVybiBFSU5WQUwgcmF0aGVyCisgICAgICAgICAgICAgIHRoZW4gRU5QUk9UT05PU1VQUE9SVCB3aGVuIElQdjYgaXMgbm90IGF2YWlsYWJsZSwgCisgICAgICAgICAgICAgIGNhdXNpbmcgZG5zbWFzcSB0byBib21iIG91dC4gVGhpcyByZWxlYXNlIGZpeGVzIHRoYXQuCisgICAgICAgICAgICAgIFRoYW5rcyB0byBTdGV2ZSBEYXZpcyBmb3IgcG9pbnRpbmcgdGhpcyBvbmUgb3V0LgorCisgICAgICAgICAgICAgIFRyaXZpYWwgY2hhbmdlIHRvIHN0YXJ0dXAgbG9naWMgc28gdGhhdCBkbnNtYXNxIGxvZ3MKKyAgICAgICAgICAgICAgaXRzIHN0dWZmIGFuZCByZWFkcyBjb25maWcgZmlsZXMgc3RyYWlnaHQgYXdheSBvbgorICAgICAgICAgICAgICBzdGFydGluZywgcmF0aGVyIHRoYW4gYWZ0ZXIgdGhlIGZpcnN0IHF1ZXJ5IC0gcHJpbmNpcGxlIAorICAgICAgICAgICAgICBvZiBsZWFzdCBzdXJwcmlzZSBhcHBsaWVzIGhlcmUuICAgICAKKworcmVsZWFzZSAxLjQgICBGaXggYSBidWcgd2l0aCBESENQIGxlYXNlIHBhcnNpbmcgd2hpY2ggYnJva2UgaW4KKyAgICAgICAgICAgICAgbm9uLVVUQyB0aW1lem9uZXMuIFRoYW5rcyB0byBNYXJrIFdvcm1nb29yIGZvcgorICAgICAgICAgICAgICBzcG90dGluZyBhbmQgZGlhZ25vc2luZyB0aGlzLiBGaXhlZCB2ZXJzaW9ucyBpbgorICAgICAgICAgICAgICB0aGUgLnNwZWMgZmlsZXMgdGhpcyB0aW1lLiBGaXhlZCBidWcgaW4gU3VzZSBzdGFydHVwCisgICAgICAgICAgICAgIHNjcmlwdC4gVGhhbmtzIHRvIERpZGkgTmlrbGF1cyBmb3IgcG9pbnRpbmcgdGhpcyBvdXQuCisKK3JlbGVhc2UgMS41ICAgQWRkZWQgLS1maWx0ZXJ3aW4yayBvcHRpb24gd2hpY2ggc3RvcHMgZG5zbWFzcSBmcm9tIGZvcndhcmRpbmcKKwkgICAgICAic3BhbSIgcXVlcmllcyBmcm9tIHdpbjJrIGJveGVzLiBUaGlzIGlzIHVzZWZ1bCB0byBzdG9wIHNwdXJpb3VzCisgICAgICAgICAgICAgIGNvbm5lY3Rpb25zIG92ZXIgZGlhbC1vbi1kZW1hbmQgbGlua3MuIFRoYW5rcyB0byBTdGV2ZSBIYXJkeSAKKyAgICAgICAgICAgICAgZm9yIHRoaXMgY29kZS4KKworICAgICAgICAgICAgICBDbGVhciAidHJ1bmNhdGVkIiBiaXQgaW4gcmVwbGllcyB3ZSByZXR1cm4gZnJvbSB1cHN0cmVhbS4gVGhpcworICAgICAgICAgICAgICBzdG9wcyByZXNvbHZlcnMgZnJvbSBzd2l0Y2hpbmcgdG8gVENQLCB3aGljaCBpcyBwb2ludGxlc3Mgc2luY2UKKyAgICAgICAgICAgICAgZG5zbWFzcSBkb2Vzbid0IHN1cHBvcnQgVENQLiBUaGlzIHNob3VsZCBzb2x2ZSBwcm9ibGVtcworICAgICAgICAgICAgICBpbiByZXNvbHZpbmcgaG90bWFpbC5jb20gZG9tYWlucy4KKworICAgICAgICAgICAgICBEb24ndCBpbmNsdWRlIGdldG9wdC5oIHdoZW4gR251LWxvbmctb3B0aW9ucyBhcmUgZGlzYWJsZWQgLQorICAgICAgICAgICAgICBob3BlZnVsbHkgdGhpcyB3aWxsIGFsbG93IGNvbXBpbGF0aW9uIG9uIEZyZWVCU0QuCisKKwkgICAgICBBZGRlZCB0aGUgLS1saXN0ZW4tYWRkcmVzcyBhbmQgLS1waWQtZmlsZSBmbGFncy4KKworICAgICAgICAgICAgICBGaXhlZCBhIGJ1ZyB3aGljaCBjYXVzZWQgb2xkIGVudHJpZXMgaW4gdGhlIERIQ1AgbGVhc2VzIGZpbGUKKyAgICAgICAgICAgICAgdG8gYmUgdXNlZCBpbiBwcmVmZXJlbmNlIHRvIGN1cnJlbnQgb25lcyB1bmRlciBjZXJ0YWluCisgICAgICAgICAgICAgIGNpcmN1bXN0YW5jZXMuCisKK3JlbGVhc2UgMS42ICAgSWYgYSBtYWNoaW5lIGdldHMgbmFtZWQgdmlhIERIQ1AgYW5kIHRoZSBESENQIG5hbWUgZG9lc24ndCBoYXZlCisgICAgICAgICAgICAgIGEgZG9tYWluIHBhcnQgYW5kIGRvbWFpbiBzdWZmaXggaXMgc2V0IHVzaW5nIHRoZSAtcyBmbGFnLCB0aGVuCisgICAgICAgICAgICAgIHRoYXQgbWFjaGluZSBoYXMgdHdvIG5hbWVzIHdpdGggdGhlIHNhbWUgYWRkcmVzcywgd2l0aCBhbmQgCisgICAgICAgICAgICAgIHdpdGhvdXQgdGhlIGRvbWFpbiBzdWZmaXguIFdoZW4gZG9pbmcgYSBfcmV2ZXJzZV8gbG9va3VwIHRvCisgICAgICAgICAgICAgIGdldCB0aGUgbmFtZSwgdGhlICJ3aXRob3V0IHN1ZmZpeCIgbmFtZSB1c2VkIHRvIGJlIHJldHVybmVkLAorICAgICAgICAgICAgICBub3cgdGhlICJ3aXRoIHN1ZmZpeCIgb25lIGdldHMgcmV0dXJuZWQgaW5zdGVhZC4gVGhpcyBjaGFuZ2UKKwkgICAgICBzdWdnZXN0ZWQgYnkgQXJub2xkIFNjaHVsei4KKworICAgICAgICAgICAgICBGaXhlZCBhc3NvcnRlZCB0eXBvcyBpbiB0aGUgZG9jdW1lbnRhdGlvbi4gVGhhbmtzIAorICAgICAgICAgICAgICB0byBEYXZpZCBLaW1kb24uCisKKyAgICAgICAgICAgICAgU3VidGxlIHJlYXJyYW5nZW1lbnQgdG8gdGhlIGRvd25sb2FkYWJsZSB0YXJiYWxsLCBhbmQgc3RvcHBlZAorICAgICAgICAgICAgICBkaXN0cmlidXRpbmcgLmRlYnMsIHNpbmNlIGRuc21hc3EgaXMgbm93IGFuIG9mZmljaWFsIERlYmlhbgorICAgICAgICAgICAgICBwYWNrYWdlLgorCityZWxlYXNlIDEuNyAgIEZpeCBhIHByb2JsZW0gd2l0aCBjYWNoZSBub3QgY2xlYXJpbmcgcHJvcGVybHkKKyAgICAgICAgICAgICAgb24gcmVjZWlwdCBvZiBTSUdIVVAuIEJ1ZyBzcG90dGVkIGJ5IFNhdCBEZXNocGFuZGUuCisKKyAgICAgICAgICAgICAgSW4gZ3JvdXAtaWQgY2hhbmdpbmcgY29kZToKKwkgICAgICAxKSBEcm9wIHN1cHBsZW1lbnRhcnkgZ3JvdXBzLgorICAgICAgICAgICAgICAyKSBDaGFuZ2UgZ2lkIGJlZm9yZSBkcm9wcGluZyByb290IChwYXRjaCBmcm9tIFNvZXdvbm8gRWZmZW5kaS4pCisgICAgICAgICAgICAgIDMpIENoYW5nZSBncm91cCB0byAiZGlwIiBpZiBpdCBleGlzdHMsIHRvIGFsbG93IGFjY2VzcworICAgICAgICAgICAgICAgICB0byAvZXRjL3BwcC9yZXNvbHYuY29uZiAoc3VnZ2VzdGlvbiBmcm9tIEpvcmcgU29tbWVyLikKKyAgICAgICAgICAgICAgVXBkYXRlIGRvY3MgdG8gcmVmbGVjdCBhYm92ZSBjaGFuZ2VzLgorCisgICAgICAgICAgICAgIE90aGVyIGRvY3VtZW50YXRpb24gY2hhbmdlcyBmcm9tIERhdmlkIE1pbGxlci4KKyAgICAgICAgICAgICAgQWRkZWQgc3VnZ2VzdGVkIHNjcmlwdCBmcmFnbWVudCBmb3IgZGhjcGNkLmV4ZS4KKworcmVsZWFzZSAxLjggICBGaXggdW5zYWZlIHVzZSBvZiB0b2xvd2VyKCkgbWFjcm8gLSBhbGxvd3MgbGlua2luZyBhZ2FpbnN0IAorICAgICAgICAgICAgICB1bGliYy4gKFBhdGNoZXMgZnJvbSBTb2V3b25vIEVmZmVuZGkgYW5kIEJqb3JuIEFuZGVyc3Nvbi4pCisKKyAgICAgICAgICAgICAgRml4IHR5cG8gaW4gdXNhZ2Ugc3RyaW5nLgorCisJICAgICAgQWRkZWQgYWR2aWNlIGFib3V0IFJlZEhhdCBQUFAgY29uZmlndXJhdGlvbiB0bworICAgICAgICAgICAgICBkb2N1bWVudGF0aW9uLiAoVGhhbmtzIHRvIEMuIExlZSBUYXlsb3IuKQorCisJICAgICAgUGF0Y2hlcyB0byBmaXggcHJvYmxlbXMgb24gQlNEIHN5c3RlbXMgZnJvbSBNYXJjIEh1YmVyCisgICAgICAgICAgICAgIGFuZCBDYW4gRXJraW4gQWNhci4gVGhlc2UgYWRkIHRoZSBvcHRpb25zCisgICAgICAgICAgICAgIEhBVkVfQVJDNFJBTkRPTSBhbmQgSEFWRV9TT0NLQUREUl9TQV9MRU4gdG8gY29uZmlnLmguCisJICAgICAgRWxhYm9yYXRlZCBjb25maWcuaCAtIHNob3VsZCByZWFsbHkgdXNlIGF1dG9jb25mLgorCisJICAgICAgRml4IHRpbWUtdG8tbGl2ZSBjYWxjdWxhdGlvbiB3aGVuIGNoYXNpbmcgQ05BTUVzLgorCisJICAgICAgRml4IHVzZS1hZnRlci1mcmVlIGFuZCBtaXNzaW5nIGluaXRpYWxpc2F0aW9uIGJ1Z3MgaW4KKyAgICAgICAgICAgICAgdGhlIGNhY2hlIGNvZGUuIChUaGFua3MgdG8gTWFyYyBIdWJlci4pCisKKyAgICAgICAgICAgICAgQnVpbGRzIG9uIFNvbGFyaXMgOS4gKFRoYW5rcyB0byBNYXJjIEh1YmVyLikgICAgICAgICAgIAorCityZWxlYXNlIDEuOSAgIEZpeGVzIHRvIHJwbSAuc3BlYyBmaWxlcy4KKworICAgICAgICAgICAgICBEb24ndCBwdXQgZXhwaXJlZCBESENQIGVudHJpZXMgaW50byB0aGUgY2FjaGUgb25seSB0byAKKwkgICAgICB0aHJvdyB0aGVtIGF3YXkgYWdhaW4uCisKKyAgICAgICAgICAgICAgUHV0IGRuc21hc3Egb24gYSBzZXZlcmUgbWVtb3J5IGRpZXQ6IHRoaXMgcmVkdWNlcyBib3RoCisgICAgICAgICAgICAgIHRoZSBhbW91bnQgb2YgaGVhcCBzcGFjZSB1c2VkIGFuZCB0aGUgc3RhY2sgc2l6ZQorICAgICAgICAgICAgICByZXF1aXJlZC4gVGhlIGRpZmZlcmVuY2UgaXMgbm90IHJlYWxseSB2aXNpYmxlIHdpdGgKKyAgICAgICAgICAgICAgYmxvYXRlZCBsaWJjcyBsaWtlIGdsaWJjLCBidXQgc2hvdWxkIGRyYW1hdGljYWxseSByZWR1Y2UKKyAgICAgICAgICAgICAgbWVtb3J5IHJlcXVpcmVtZW50cyB3aGVuIGxpbmtlZCBhZ2FpbnN0IHVsaWJjIGZvciB1c2Ugb24KKyAgICAgICAgICAgICAgZW1iZWRkZWQgcm91dGVycywgYW5kIHRoYXQncyB0aGUgcG9pbnQgcmVhbGx5LiBUaGFua3MgdG8KKyAgICAgICAgICAgICAgTWF0dGhldyBOYXRhbGllciBmb3IgcHJvbXB0aW5nIHRoaXMuICAgCisKKwkgICAgICBDaGFuZ2VkIGRlYnVnIG1vZGUgKC1kKSBzbyB0aGF0IGFsbCBsb2dnaW5nIGFwcGVhcnMgb24KKyAgICAgICAgICAgICAgc3RkZXJyIGFzIHdlbGwgYXMgZ29pbmcgdG8gc3lzbG9nZC4gCisKKwkgICAgICBBZGRlZCBIQVZFX0lQVjYgY29uZmlnIHN5bWJvbCB0byBhbGxvdyBjb21waWxhdGlvbgorICAgICAgICAgICAgICBhZ2FpbnN0IGEgbGliYyB3aGljaCBkb2Vzbid0IGhhdmUgSVB2NiBzdXBwb3J0LgorCisJICAgICAgQWRkZWQgYSBmYWNpbGl0eSB0byBsb2cgYWxsIHF1ZXJpZXMsIGVuYWJsZWQgd2l0aCAtcSBmbGFnLgorCisJICAgICAgRml4ZWQgcGFja2V0IHNpemUgY2hlY2tpbmcgYnVnIGluIGFkZHJlc3MgZXh0cmFjdGlvbiBjb2RlLgorCisJICAgICAgSGFsdmVkIGRlZmF1bHQgY2FjaGUgc2l6ZSAtIDMwMCB3YXMgd2F5IE9UVCBpbiB0eXBpY2FsIHVzZS4KKworCSAgICAgIEFkZGVkIHNlbGYtTVggZnVuY3Rpb24sIGVuYWJsZWQgYnkgLWUgZmxhZy4gVGhhbmtzIHRvCisgICAgICAgICAgICAgIEx5b25lbCBWaW5jZW50IGZvciB0aGUgcGF0Y2guCisKKwkgICAgICBBZGRlZCBIQVZFX0ZPUksgY29uZmlnIHN5bWJvbCBhbmQgc3R1ZmYgdG8gc3VwcG9ydAorICAgICAgICAgICAgICB1Q2xpbnV4LiBUaGFua3MgdG8gTWF0dGhldyBOYXRhbGllciBmb3IgdUNsaW51eCBzdHVmZi4gCisKK3JlbGVhc2UgMS4xMCAgTG9nIHdhcm5pbmdzIGlmIHJlc29sdi5jb25mIG9yIGRoY3AubGVhc2VzIGFyZSBub3QKKyAgICAgICAgICAgICAgYWNjZXNzaWJsZSBmb3IgYW55IHJlYXNvbiwgYXMgc3VnZ2VzdGVkIGJ5IEhpbnJpY2ggRWlsdHMuCisKKwkgICAgICBGaXhlZCB3cm9uZyBhZGRyZXNzIHByaW50aW5nIGluIGVycm9yIG1lc3NhZ2UgYWJvdXQKKwkgICAgICBubyBpbnRlcmZhY2Ugd2l0aCBhZGRyZXNzLgorCisJICAgICAgVXBkYXRlZCBkb2NzIGFuZCBzcGxpdCBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zIGludG8gc2V0dXAuaHRtbC4KKworCSAgICAgIEZpeCBidWcgaW4gQ05BTUUgY2hhc2luZyBjb2RlOiBPbmUgQ05BTUUgcG9pbnRpbmcKKwkgICAgICB0byBtYW55IEEgcmVjb3JkcyB3b3VsZCBsb3NlIEEgcmVjb3JkcyBhZnRlciB0aGUgCisJICAgICAgZmlyc3QuIFRoaXMgYnVnIHdhcyBpbnRyb2R1Y2VkIGluIHZlcnNpb24gMS45LgorCisJICAgICAgTG9nIHN0YXJ0dXAgZmFpbHVyZXMgYXQgbGV2ZWwgQ3JpdGljYWwgYXMgd2VsbCBhcyAKKwkgICAgICBwcmludGluZyB0aGVtIHRvIHN0YW5kYXJkIGVycm9yLgorCSAgICAgIEV4aXQgd2l0aCByZXR1cm4gY29kZSAxIHdoZW4gZ2l2ZW4gYmFkIG9wdGlvbnMuCisKKwkgICAgICBDbGVhbmVkIHVwIGNvZGUgZm9yIG5vLWNhY2hlIG9wZXJhdGlvbi4KKworICAgICAgICAgICAgICBBZGRlZCAtbyBvcHRpb24gd2hpY2ggZm9yY2VzIGRuc21hc3EgdG8gdXNlIHRvCisgICAgICAgICAgICAgIHVwc3RyZWFtIHNlcnZlcnMgaW4gdGhlIG9yZGVyIHRoZXkgYXBwZWFyIGluIC9ldGMvcmVzb2x2LmNvbmYuCisKKyAgICAgICAgICAgICAgQWRkZWQgdXBzdHJlYW0gc2VydmVyIHVzZSBsb2dnaW5nLgorCisgICAgICAgICAgICAgIExvZyBmdWxsIGNhY2hlIGR1bXAgb24gcmVjZWlwdCBvZiBTSUdVU1IxIHdoZW4gcXVlcnkgCisgICAgICAgICAgICAgIGxvZ2dpbmcgaXMgZW5hYmxlZCAoLXEgc3dpdGNoKS4KKworCSAgICAgIEFkZGVkIC1TIG9wdGlvbiB0byBkaXJlY3RseSBzcGVjaWZ5IHVwc3RyZWFtIHNlcnZlcnMgYW5kCisgICAgICAgICAgICAgIGFkZGVkIGFiaWxpdHkgdG8gZGlyZWN0IHF1ZXJpZXMgZm9yIHNwZWNpZmljIGRvbWFpbnMgdG8KKyAgICAgICAgICAgICAgc3BlY2lmaWMgc2VydmVycy4gU3VnZ2VzdGVkIGJ5IEplbnMgVm9uZGVyaGVpZGUuCisKKwkgICAgICBVcGdyYWRlZCByYW5kb20gSUQgZ2VuZXJhdGlvbiAtIHBhdGNoIGZyb20gUm9iIEZ1bmsuCSAgICAgIAorCisJICAgICAgRml4ZWQgcmVhZGluZyBvZiBkb21haW5zIGluIGFyZ3VtZW50cyB3aXRoIGNhcGl0YWwKKyAgICAgICAgICAgICAgbGV0dGVycyBvciB0cmFpbGluZyBwZXJpb2RzLgorCisJICAgICAgRml4ZWQgcG90ZW50aWFsIFNFR1Ygd2hlbiBnaXZlbiBiYWQgb3B0aW9ucy4KKworCSAgICAgIFJlYWQgb3B0aW9ucyBmcm9tIC9ldGMvZG5zbWFzcS5jb25mIGlmIGl0IGV4aXN0cy4KKyAgICAgICAgICAgICAgRG8gc2Vuc2libGUgdGhpbmdzIHdpdGggbWlzc2luZyBwYXJhbWV0ZXJzLCBlZyAKKyAgICAgICAgICAgICAgIi0tcmVzb2x2LWZpbGU9IiB0dXJucyBvZmYgcmVhZGluZyAvZXRjL3Jlc29sdi5jb25mLgorCityZWxlYXNlIDEuMTEgIEFjdHVhbGx5IGltcGxlbWVudCB0aGUgLVIgZmxhZyBwcm9taXNlZCBpbiB0aGUgMS4xMCBtYW4gcGFnZS4KKworICAgICAgICAgICAgICBJbXByb3ZlIGFuZCByYXRpb25hbGlzZSB0aGUgcmV0dXJuIGNvZGVzIGluIGFuc3dlcnMgdG8KKyAgICAgICAgICAgICAgcXVlcmllcy4gSW4gdGhlIGNhc2UgdGhhdCB0aGVyZSBhcmUgbm8gYXZhaWxhYmxlCisgICAgICAgICAgICAgIHVwc3RyZWFtIHNlcnZlcnMgdG8gZm9yd2FyZCBhIHF1ZXJ5IHRvLCByZXR1cm4gUkVGVVNFRC4KKyAgICAgICAgICAgICAgVGhpcyBtYWtlcyBzZW5kbWFpbCB3b3JrIGJldHRlciBvbiBtb2RlbSBjb25uZWN0ZWQKKyAgICAgICAgICAgICAgc3lzdGVtcyB3aGVuIHRoZSBtb2RlbSBsaW5rIGlzIGRvd24gKFRoYW5rcyB0byBSb2dlciBQbGFudCkuCisJICAgICAgQ2FjaGUgYW5kIHJldHVybiB0aGUgTlhET01BSU4gc3RhdHVzIG9mIGZhaWxlZCBxdWVyaWVzOgorICAgICAgICAgICAgICB0aGlzIG1ha2VzIHRoZSBgaG9zdGAgY29tbWFuZCB3b3JrIHdoZW4gdHJhdmVyc2luZyBzZWFyY2gKKyAgICAgICAgICAgICAgcGF0aHMgKFRoYW5rcyB0byBQZXRlciBCYWlsZXkpLiBTZXQgdGhlICJhdXRob3JpdGF0aXZlIgorICAgICAgICAgICAgICBiaXQgaW4gcmVwbGllcyBjb250YWluaW5nIG5hbWVzIGZyb20gL2V0Yy9ob3N0cyBvciBESENQLgorCisgICAgICAgICAgICAgIFRvbGVyYXRlIE1TLURPUyBzdHlsZSBsaW5lIGVuZGluZyBjb2RlcyBpbiAvZXRjL2hvc3RzCisJICAgICAgYW5kIC9ldGMvcmVzb2x2LmNvbmYsIGZvciBwZW9wbGUgd2hvIGNvcHkgZnJvbSB3aW5zb2NrCisgICAgICAgICAgICAgIGluc3RhbGxhdGlvbnMuCisKKwkgICAgICBBbGxvdyBzcGVjaWZpY2F0aW9uIG9mIG1vcmUgdGhhbiBvbmUgcmVzb2x2LmNvbmYgZmlsZS4gVGhpcyBpcyAKKyAgICAgICAgICAgICAgaW50ZW5kZWQgZm9yIGxhcHRvcHMgd2hpY2ggY29ubmVjdCB2aWEgREhDUCBvcgorICAgICAgICAgICAgICBQUFAuIFdoaWNoZXZlciByZXNvbHYuY29uZiB3YXMgdXBkYXRlZCBsYXN0IGlzIHVzZWQuCisKKyAgICAgICAgICAgICAgQWxsb3cgLVMgZmxhZ3Mgd2hpY2ggc3BlY2lmeSBhIGRvbWFpbiBidXQgbm8gc2VydmVyCisgICAgICAgICAgICAgIGFkZHJlc3MuIFRoaXMgZ2l2ZXMgbG9jYWwgZG9tYWlucyB3aGljaCBhcmUgbmV2ZXIgZm9yd2FyZGVkLgorCisJICAgICAgQWRkIC1FIGZsYWcgdG8gYXV0b21hdGljYWxseSBhZGQgdGhlIGRvbWFpbiBzdWZmaXggdG8KKyAgICAgICAgICAgICAgbmFtZXMgaW4gL2V0Yy9ob3N0cyAtc3VnZ2VzdGlvbiBmcm9tIFBoaWwgSGFybWFuLgorCisJICAgICAgQWx3YXlzIHJldHVybiBhIHplcm8gdGltZS10by1saXZlIGZvciBuYW1lcyBkZXJpdmVkIGZyb20gCisJICAgICAgREhDUCB3aGljaCBzdG9wcyBhbnl0aGluZyBlbHNlIGNhY2hpbmcgdGhlc2UKKyAgICAgICAgICAgICAgbmFtZXMuIFByZXZpb3VzbHkgdGhlIFRUTCB3YXMgZGVyaXZlZCBmcm9tIHRoZSBsZWFzZQorICAgICAgICAgICAgICB0aW1lIGJ1dCB0aGF0IGlzIGluY29ycmVjdCBzaW5jZSBhIGxlYXNlIGNhbiBiZSBnaXZlbgorICAgICAgICAgICAgICB1cCBlYXJseTogZG5zbWFzcSB3b3VsZCBrbm93IHRoaXMgYnV0IGFueXRoaW5nIHdpdGggdGhlCisgICAgICAgICAgICAgIG5hbWUgY2FjaGVkIHdpdGggbG9uZyBUVEwgd291bGQgbm90IGJlIHVwZGF0ZWQuCisKKwkgICAgICBFeHRlbmRlZCBIQVZFX0lQVjYgY29uZmlnIGZsYWcgdG8gYWxsb3cgY29tcGlsYXRpb24gb24KKwkgICAgICBvbGQgc3lzdGVtcyB3aGljaCBkb24ndCBoYXZlIG1vZGVybiBsaWJyYXJ5IHJvdXRpbmVzCisJICAgICAgbGlrZSBpbmV0X250b3AoKS4gVGhhbmtzIHRvIFBoaWwgSGFybWFuIGZvciB0aGUgcGF0Y2guCisKK3JlbGVhc2UgMS4xMiAgQWxsb3cgbW9yZSB0aGFuIG9uZSBkb21haW4gaW4gc2VydmVyIGNvbmZpZyBsaW5lcyBhbmQKKwkgICAgICBtYWtlICJsb2NhbCIgYSBzeW5vbnltIGZvciAic2VydmVyIi4gVGhpcyBtYWtlcyB0aGluZ3MKKwkgICAgICBsaWtlICJsb2NhbD0vbG9jYWxuZXQvdGhla2VsbGV5cy5vcmcudWsvIiBsZWdhbC4gQWxsb3cKKyAgICAgICAgICAgICAgcG9ydCB0byBzcGVjaWZpZWQgYXMgcGFydCBvZiBzZXJ2ZXIgYWRkcmVzcy4KKworCSAgICAgIEFsbG93IHdob2xlIGRvbWFpbnMgdG8gaGF2ZSBhbiBJUCBhZGRyZXNzIHNwZWNpZmllZAorICAgICAgICAgICAgICBpbiAvZXRjL2Ruc21hc3EuY29uZi4gKC9ldGMvaG9zdHMgZG9lc24ndCB3b3JrIGRvbWFpbnMpLgorICAgICAgICAgICAgICBhZGRyZXNzPS9kb3VibGVjbGljay5uZXQvMTI3LjAuMC4xIHNob3VsZCBjYXRjaCBhbGwKKyAgICAgICAgICAgICAgdGhvc2UgbmFzdHkgYmFubmVyIGFkcy4gSW5zcGlyZWQgYnkgYSBwYXRjaCAKKwkgICAgICBmcm9tIERhbmllbCBHcnluaWV3aWN6CisKKwkgICAgICBMb2cgdGhlIHNvdXJjZSBvZiBlYWNoIHF1ZXJ5IHdoZW4gbG9nZ2luZyBzd2l0Y2hlZCBvbi4gCisKKwkgICAgICBGaXggYnVnIGluIHNjcmlwdCBmcmFnbWVudCBmb3IgZGhjcGNkIC0gdGhhbmtzIHRvIEJhcnJ5IFN0ZXdhcnQuCisJICAgICAgCisJICAgICAgRml4IGJ1ZyB3aGljaCBtZWFudCB0aGF0IHN0cmljdC1vcmRlciBhbmQgc2VsZi1teCB3ZXJlCisJICAgICAgYWx3YXlzIGVuYWJsZWQuCisKKwkgICAgICBCdWlsZHMgd2l0aCBMaW51eCBsaWJjNSBub3cgLSBmb3IgdGhlIEZyZWVzY28gcHJvamVjdC4KKworCSAgICAgIEZpeGVkIE1ha2VmaWxlIGluc3RhbGxhdGlvbiBzY3JpcHQgKHBhdGNoIGZyb20gU2lsdmFuCisJICAgICAgTWluZ2hldHRpKSBhbmQgYWRkZWQgQ0MgYW5kIENGTEFHUyB2YXJpYWJsZXMuCisKKwkgICAgICBJbXByb3ZlIHJlc291cmNlIGFsbG9jYXRpb24gdG8gcmVkdWNlIHZ1bG5lcmFiaWxpdHkgdG8KKwkgICAgICBET1MgYXR0YWNrcyAtIHRoZSBvbGQgdmVyc2lvbiBjb3VsZCBoYXZlIGFsbCBxdWVyaWVzCisJICAgICAgYmxvY2tlZCBieSBhIGNvbnRpbnVvdXMgaGlnaC1zcGVlZCBzdHJlYW0gb2YKKwkgICAgICBxdWVyaWVzLiBOb3cgc29tZSBxdWVyaWVzIHdpbGwgc3VjY2VlZCwgYW5kIHRoZSBleGNlc3MKKwkgICAgICB3aWxsIGJlIHJlamVjdGVkIHdpdGggYSBzZXJ2ZXIgZmFpbCBlcnJvci4gVGhpcyBjaGFuZ2UgYWxzbworCSAgICAgIHByb3RlY3RzIGFnYWluc3Qgc2VydmVyLWxvb3BzOyBzZXR0aW5nIHVwIGEgcmVzb2x2aW5nCisgICAgICAgICAgICAgIGxvb3AgYmV0d2VlbiB0d28gaW5zdGFuY2VzIG9mIGRuc21hc3EgaXMgbm8gbG9uZ2VyCisJICAgICAgY2F0YXN0cm9waGljLiBUaGUgc2VydmVycyB3aWxsIGNvbnRpbnVlIHRvIHJ1biwgbG9vcGVkCisJICAgICAgcXVlcmllcyBmYWlsIGFuZCBhIHdhcm5pbmcgaXMgbG9nZ2VkLiBUaGFua3MgdG8gQy4gTGVlCisJICAgICAgVGF5bG9yIGZvciBoZWxwIHdpdGggdGhpcy4KKwkgICAgICAKK3JlbGVhc2UgMS4xMyAgQWRkZWQgc3VwcG9ydCBmb3IgYnVpbGRpbmcgcnBtcyBzdWl0YWJsZSBmb3IgbW9kZXJuIFN1c2UgCisJICAgICAgc3lzdGVtcy4gKHBhdGNoIGZyb20gQW5kaSA8Y2FtYmVpc0BuZXRwbGFjZS5kZT4pCisJICAgICAgCisJICAgICAgQWRkZWQgb3B0aW9ucyAtLWdyb3VwLCAtLWxvY2FsbXgsIC0tbG9jYWwtdHRsLAorCSAgICAgIC0tbm8tbmVnY2FjaGUsIC0tYWRkbi1ob3N0LgorCSAgICAgIAorCSAgICAgIE1vdmVkIGFsbCB0aGUgdmFyaW91cyBycG0tYnVpbGRpbmcgYml0cyBpbnRvIC9ycG0uCisJICAgICAgCisJICAgICAgRml4IGJ1aWxkcyB3aXRoIGdsaWJjIDIuMSAodGhhbmtzIHRvIENyaXN0aWFuCisJICAgICAgSW9uZXNjdS1JZGJvaHJuKQorCSAgICAgIAorCSAgICAgIFByZXNlcnZlIGNhc2UgaW4gZG9tYWluIG5hbWVzLCBhcyBwZXIgUkZDMTAzNS4KKwkgICAgICAKKwkgICAgICBGaXhlZCBBTlkgcXVlcmllcyB0byBkb21haW5zIHdpdGggLS1hZGRyZXNzIHNwZWNpZmljYXRpb24uCisJICAgICAgCisJICAgICAgRml4ZWQgRnJlZUJTRCBidWlsZC4gKHRoYW5rcyB0byBTdGV2ZW4gSG9uc29uKQorCSAgICAgIAorCSAgICAgIEFkZGVkIC1RIG9wdGlvbiB3aGljaCBhbGxvd3MgYSBzcGVjaWZpZWQgcG9ydCB0byBiZSB1c2VkCisJICAgICAgdG8gdGFsayB0byB1cHN0cmVhbSBzZXJ2ZXJzLiBVc2VmdWwgZm9yIHBlb3BsZSB3aG8gd2FudAorCSAgICAgIHZlcnkgcGFyYW5vaWQgZmlyZXdhbGxzIHdoaWNoIG9wZW4gaW5kaXZpZHVhbCBVRFAgcG9ydC4KKwkgICAgICAodGhhbmtzIHRvIERhdmlkIENvZSBmb3IgdGhlIHBhdGNoKQorCSAgICAgIAkgICAgICAKK3JlbGVhc2UgMS4xNCAgRml4ZWQgbWFuIHBhZ2UgZGVzY3JpcHRpb24gb2YgLWIgb3B0aW9uIHdoaWNoIGNvbmZ1c2VkIAorCSAgICAgIC9ldGMvaG9zdHMgd2l0aCAvZXRjL3Jlc29sdi5jb25mLiAodGhhbmtzIHRvIENocmlzdG9waGVyCisJICAgICAgV2VpbWFubikKKwkgICAgICAKKwkgICAgICBGaXhlZCBjb25maWcuaCB0byBhbGxvdyBidWlsZGluZyB1bmRlciBNQUNPUyBYIGFuZCBnbGliYworCSAgICAgIDIuMC54LiAodGhhbmtzIHRvIE1hdHRoZXcgR3JlZ2FuIGFuZCBTZXJnZSBDYXJvbikKKwkgICAgICAKKwkgICAgICBBZGRlZCAtLWV4Y2VwdC1pbnRlcmZhY2Ugb3B0aW9uLiAoU3VnZ2VzdGVkIGJ5IFNlcmdlIENhcm9uKQorCisJICAgICAgQWRkZWQgU0lHVVNSMiBmYWNpbGl0eSB0byByZS1zY2FuIGZvciBuZXcKKwkgICAgICBpbnRlcmZhY2VzLiAoU3VnZ2VzdGVkIGJ5IFNlcmdlIENhcm9uKQorCisJICAgICAgRml4ZWQgU0VHViBpbiBvcHRpb24tcmVhZGluZyBjb2RlIGZvciBpbnZhbGlkIG9wdGlvbnMuCisJICAgICAgKFRoYW5rcyB0byBLbGFhcyBUZXNjaGF1ZXIpCisKKyAgICAgICAgICAgICAgRml4ZWQgbWFuIHBhZ2UgdG8gY2xhcmlmeSBlZmZlY3Qgb2YgU0lHVVNSMSBvbgorCSAgICAgIC9ldGMvcmVzb2x2LmNvbmYuCisJICAgICAgKFRoYW5rcyB0byBLbGFhcyBUZXNjaGF1ZXIpCisJICAgICAgCisJICAgICAgQ2hlY2sgdGhhdCByZWNlaXZlZCBxdWVyaWVzIGhhdmUgb25seSByZmMxMDM1LWxlZ2FsIGNoYXJhY3RlcnMKKwkgICAgICBpbiB0aGVtLiBUaGlzIGNoZWNrIGlzIG1haW5seSB0byBhdm9pZCBiYWQgc3RyaW5ncyBiZWluZworCSAgICAgIHNlbnQgdG8gc3lzbG9nLgorCisJICAgICAgRml4ZWQgJiYvJiBjb25mdXNpb24gaW4gb3B0aW9uLmMgYW5kIGFkZGVkIERFU1RESVIKKwkgICAgICB2YXJpYWJsZSBmb3IgIm1ha2UgaW5zdGFsbCIgKFRoYW5rcyB0byBPc3ZhbGRvIAorICAgICAgICAgICAgICBNYXJxdWVzIGZvciB0aGUgcGF0Y2guKQorCisJICAgICAgRml4ZWQgL2V0Yy9ob3N0cyBwYXJzaW5nIGNvZGUgdG8gY29wZSB3aXRoIE1TLURPUworCSAgICAgIGxpbmUtZW5kcyBpbiB0aGUgZmlsZS4gVGhpcyB3YXMgc3VwcG9zZWQgdG8gYmUgZG9uZSBpbgorCSAgICAgIHZlcnNpb24gMS4xMSwgYnV0IHNvbWV0aGluZyBnb3QgbWlzc2VkLiAoVGhhbmtzIHRvIERvdWcKKwkgICAgICBDb3Blc3Rha2UgZm9yIGhlbHBpbmcgdG8gZmluZCB0aGlzLikKKworCSAgICAgIFNxdWFzaCByZXBlYXRlZCBuYW1lL2FkZHJlc3MgcGFpcnMgcmVhZCBmcm9tIGhvc3RzCisJICAgICAgZmlsZXMuCisKKwkgICAgICBUaWRpZWQgdXAgcmVzb3VyY2UgaGFuZGxpbmcgaW4gdXRpbC5jIChUaGFua3MgdG8KKwkgICAgICBDcmlzdGlhbiBJb25lc2N1LUlkYm9ocm4pLgorCisJICAgICAgQWRkZWQgaGFzaGVkIHNlYXJjaGluZyBvZiBkb21haW4gbmFtZXMuIFBlb3BsZSBhcmUgc3RhcnRpbmcKKwkgICAgICB0byB1c2UgZG5zbWFzcSB3aXRoIGxhcmdlciBsb2FkcyBub3csIGFuZCBiaWdnZXIgY2FjaGVzLAorCSAgICAgIGFuZCBsYXJnZSBsaXN0cyBvZiBhZC1ibG9jayBhZGRyZXNzZXMuIFRoaXMgbWVhbnMgZG9pbmcKKwkgICAgICBsaW5lYXIgc2VhcmNoZXMgY2FuIHN0YXJ0IHRvIHVzZSBsb3RzIG9mIENQVSBzbyBJIGFkZGVkIGhhc2hlZAorCSAgICAgIHNlYXJjaGluZyBhbmQgc2VyaW91c2x5IG9wdGltaXNlZCB0aGUgY2FjaGUgY29kZSBmb3IgCisJICAgICAgYWxnb3JpdGhtaWMgZWZmaWNpZW5jeS4gQWxzbyB1cHBlZCB0aGUgbGltaXQgb24gY2FjaGUgCisJICAgICAgc2l6ZSB0byAxMDAwMC4KKworCSAgICAgIEZpeGVkIGxvZ2dpbmcgb2YgdGhlIHNvdXJjZSBvZiBuYW1lcyBmcm9tIHRoZSBhZGRpdGlvbmFsCisJICAgICAgaG9zdHMgZmlsZSBhbmQgZnJvbSB0aGUgImJvZ3VzIHByaXZhdGUgYWRkcmVzcyIgb3B0aW9uLgorCisJICAgICAgRml4ZWQgc3B1cmlvdXMgcmUtcmVhZGluZyBvZiBlbXB0eSBsZWFzZSBmaWxlcy4gKFRoYW5rcworCSAgICAgIHRvIExld2lzIEJhdWdobWFuIGZvciBzcG90dGluZyB0aGlzLikKKworCSAgICAgIEZpeGVkIGJ1aWxkaW5nIHVuZGVyIHVjbGliYyAocGF0Y2ggZnJvbSBDcmlzdGlhbiBJb25lc2N1LUlkYm9ocm4pCisJICAgICAgCisJICAgICAgRG8gc29tZSBzb2NrZXQgdHdlYWtpbmcgdG8gYWxsb3cgZG5zbWFzcSB0byBjby1leGlzdAorCSAgICAgIHdpdGggQklORC4gVGhhbmtzIHRvIFN0ZWZhbiAnU2VjJyBaZWhsIGZvciB0aGUgcGF0Y2guCisKK3JlbGVhc2UgMS4xNSAgQWRkZWQgLS1ib2d1cy1ueGRvbWFpbiBvcHRpb24uCisKKyAgICAgICAgICAgICAgUmVzdHJpY3QgY2hlY2tpbmcgb2YgcmVzb2x2LmNvbmYgYW5kIERIQ1AgbGVhc2VzIGZpbGVzCisgICAgICAgICAgICAgIHRvIG9uY2UgcGVyIHNlY29uZC4gVGhpcyBpcyBpbnRlbmRlZCB0byBpbXByb3ZlCisgICAgICAgICAgICAgIHBlcmZvcm1hbmNlIHVuZGVyIGhlYXZ5IGxvYWRzLiBBbHNvIG1ha2UgYSBzeXN0ZW0gY2FsbAorCSAgICAgIHRvIGdldCB0aGUgY3VycmVudCB0aW1lIG9uY2UgcGVyIHF1ZXJ5LCByYXRoZXIgdGhhbiBmb3VyCisgICAgICAgICAgICAgIHRpbWVzLgorCisJICAgICAgSW5jcmVhc2VkIG51bWJlciBvZiBvdXRzdGFuZGluZyBxdWVyaWVzIHRvIDE1MCBpbgorCSAgICAgIGNvbmZpZy5oCisKK3JlbGVhc2UgMS4xNiAgQWxsb3cgIi8iIGNoYXJhY3RlcnMgaW4gZG9tYWluIG5hbWVzIC0gdGhpcyBmaXhlcworICAgICAgICAgICAgICBjYWNoaW5nIG9mIFJGQyAyMzE3IENOQU1FLVBUUiByZWNvcmRzLgorCisJICAgICAgRml4ZWQgYnJhaW4tZmFydCBpbiAtQiBvcHRpb24gd2hlbiBHRVRPUFRfTE9ORyBub3QKKwkgICAgICBlbmFibGVkIC0gdGhhbmtzIHRvIFN0ZXZlbiBZb3VuZyBhbmQgSmFzb24gTWlsbGVyIAorCSAgICAgIGZvciBwb2ludGluZyB0aGlzIG91dC4KKworCSAgICAgIEdlbmVyYWxpc2VkIGJvZ3VzLW54ZG9tYWluIGNvZGU6IGFsbG93IG1vcmUgdGhhbiBvbmUKKwkgICAgICBhZGRyZXNzIHRvIGNoZWNrLCBhbmQgZGVhbCB3aXRoIHJlcGxpZXMgd2l0aCBtdWx0aXBsZQorCSAgICAgIGFuc3dlciByZWNvcmRzLiAoQmFzZWQgb24gY29udHJpYnV0aW9uIGZyb20gSHVtYmVydG8KKwkgICAgICBNYXNzYS4pCisKKwkgICAgICBVcGRhdGVkIHRoZSBkb2N1bWVudGF0aW9uIHRvIGluY2x1ZGUgaW5mb3JtYXRpb24gYWJvdXQKKwkgICAgICBib2d1cy1ueGRvbWFpbiBhbmQgdGhlIFZlcmlzaWduIHRyYWdlZHkuCisKKwkgICAgICBBZGRlZCBsaWJyYXJpZXMgbmVlZGVkIG9uIFNvbGFyaXMgdG8gTWFrZWZpbGUuCisKKwkgICAgICBBZGRlZCBmYWNpbGl0eSB0byBzZXQgc291cmNlIGFkZHJlc3MgaW4gcXVlcmllcyB0bworCSAgICAgIHVwc3RyZWFtIG5hbWVzZXJ2ZXJzLiBUaGlzIGlzIHVzZWZ1bCB3aXRoIG11bHRpaG9tZWQKKwkgICAgICBob3N0cywgZXNwZWNpYWxseSB3aGVuIHVzaW5nIFZQTnMuIFRoYW5rcyB0byBUb20gRmFubmluZworCSAgICAgIGZvciBzdWdnZXN0aW5nIHRoaXMgZmVhdHVyZS4KKworCSAgICAgIFR3ZWFrZWQgbG9nZ2luZzogbG9nIHRvIGZhY2lsaXR5IExPQ0FMMCB3aGVuIGluCisJICAgICAgZGVidWcvbm8tZGFlbW9uIG1vZGUgYW5kIGNoYW5nZWQgbGV2ZWwgb2YgcXVlcnkgbG9nZ2luZworCSAgICAgIGZyb20gSU5GTyB0byBERUJVRy4gTWFrZSBsb2cgb3B0aW9ucyBjb250cm9sbGFibGUgaW4KKwkgICAgICBjb25maWcuaAorCityZWxlYXNlIDEuMTcgIEZpeGVkIGNyYXNoIHdpdGggREhDUCBob3N0bmFtZXMgPiA0MCBjaGFyYWN0ZXJzLgorCisgICAgICAgICAgICAgIEZpeGVkIG5hbWUtY29tcGFyaXNvbiByb3V0aW5lcyB0byBub3QgZGVwZW5kIG9uIExvY2FsZSwKKyAgICAgICAgICAgICAgaW4gdGhlb3J5IHRoaXMgdmVyc2lvbnMgc2luY2UgMS4xNSBjb3VsZCBsb2NrIHVwIG9yIGdpdmUKKyAgICAgICAgICAgICAgd3JvbmcgcmVzdWx0cyB3aGVuIHJ1biB3aXRoIGxvY2FsZSAhPSAnQycuCisKKwkgICAgICBGaXggcG90ZW50aWFsIGxvY2t1cCBpbiBjYWNoZSBjb2RlLiAodGhhbmtzIHRvIEhlbm5pbmcKKwkgICAgICBHbGF3ZSBmb3IgaGVscCBjaGFzaW5nIHRoaXMgZG93bi4pCisKKwkgICAgICBNYWRlIGxlYXNlLWZpbGUgcmVhZGVyIGJ1bGxldC1wcm9vZi4KKworCSAgICAgIEFkZGVkIC1EIG9wdGlvbiwgc3VnZ2VzdGVkIGJ5IFBldGVyIEZpY2h0bmVyLgorCityZWxlYXNlIDEuMTggIEFkZGVkIHJvdW5kLXJvYmluIEROUyBmb3IgbmFtZXMgd2hpY2ggaGF2ZSBtb3JlIHRoYW4gb25lCisgICAgICAgICAgICAgIGFkZHJlc3MuIEluIHRoaXMgY2FzZSBhbGwgdGhlIGFkZHJlc3NlcyB3aWxsIGJlCisgICAgICAgICAgICAgIHJldHVybmVkLCBhcyBiZWZvcmUsIGJ1dCB0aGUgb3JkZXIgd2lsbCBjaGFuZ2Ugb24gZWFjaAorICAgICAgICAgICAgICBxdWVyeS4KKworCSAgICAgIFJlbW92ZSBzdHJheSB0b2xvd2VyKCkgYW5kIGlzYWxudW0oKSBjYWxscyBtaXNzZWQgaW4gCisJICAgICAgbGFzdCByZWxlYXNlIHRvIGNvbXBsZXRlIExPQ0FMRSBpbmRlcGVuZGVuY2UuCisKKwkgICAgICBBbGxvdyBwb3J0IG51bWJlcnMgaW4gc291cmNlLWFkZHJlc3Mgc3BlY2lmaWNhdGlvbnMuCisKKwkgICAgICBGb3IgaG9zdG5hbWVzIHdpdGhvdXQgYSBkb21haW4gcGFydCB3aGljaCBkb24ndCBnZXQKKwkgICAgICBmb3J3YXJkZWQgYmVjYXVzZSAtRCBpcyBpbiBlZmZlY3QsIHJldHVybiBOWERPTUFJTiBub3QKKwkgICAgICBhbiBlbXB0eSByZXBseS4KKworCSAgICAgIEFkZCBjb2RlIHRvIHJldHVybiB0aGUgc29mdHdhcmUgdmVyc2lvbiBpbiByZXNwb25zZSB0byB0aGUKKwkgICAgICBjb3JyZWN0IG1hZ2ljIHF1ZXJ5IGluIHRoZSBzYW1lIHdheSBhcyBCSU5ELiBVc2UgIAorCSAgICAgICJkaWcgdmVyc2lvbi5iaW5kIGNoYW9zIHR4dCIgdG8gbWFrZSB0aGUgcXVlcnkuCisKKwkgICAgICBBZGRlZCBuZWdhdGl2ZSBjYWNoaW5nIGZvciBQVFIgKGFkZHJlc3MgdG8gbmFtZSkgcmVjb3Jkcy4KKworCSAgICAgICBFbnN1cmUgdGhhdCBuYW1lcyBvZiB0aGUgZm9ybSB0eXBpY2FsbHkgdXNlZCBpbiBQVFIgcXVlcmllcworICAgICAgICAgICAgICAoaWUgdy54Lnl6LmluLWFkZHIuYXJwYSBhbmQgSVB2NiBlcXVpdmFsZW50cykgZ2V0CisgICAgICAgICAgICAgIGNvcnJlY3QgYW5zd2VycyB3aGVuIHF1ZXJpZWQgYXMgb3RoZXIgdHlwZXMuIEl0J3MKKyAgICAgICAgICAgICAgdW5saWtlbHkgdGhhdCBhbnlvbmUgd291bGQgZG8gdGhpcywgYnV0IHRoZSBjaGFuZ2UgbWFrZXMKKyAgICAgICAgICAgICAgdGhpbmdzIHBlZGFudGljYWxseSBjb3JyZWN0LgorCisJICAgICAgVGF1Z2h0IGRuc21hc3EgdG8gdW5kZXJzdGFuZCAiYml0c3RyaW5nIiBuYW1lcywgYXMgdGhlc2UKKwkgICAgICBhcmUgdXNlZCBmb3IgUFRSIGxvb2t1cHMgb2YgSVB2NiBhZGRyZXNzZXMgYnkgc29tZSAKKwkgICAgICByZXNvbHZlcnMgYW5kIGxvb2t1cCB0b29scy4gRG5zbWFzcSBub3cgdW5kZXJzdGFuZHMgYm90aAorCSAgICAgIHRoZSBpcDYuaW50IGRvbWFpbiBhbmQgdGhlIGlwNi5hcnBhIGRvbWFpbiBhbmQgYm90aAorCSAgICAgIG5pYmJsZSBhbmQgYml0c3RyaW5nIGZvcm1hdHMgc28gaXQgc2hvdWxkIHdvcmsgd2l0aCBhbnkKKwkgICAgICBjbGllbnQgY29kZS4gU3RhbmRhcmRzIGZvciB0aGlzIHN0dWZmIGhhdmUgZmxpcC1mbG9wcGVkCisJICAgICAgb3ZlciB0aGUgbGFzdCBmZXcgeWVhcnMsIGxlYXZpbmcgbWFueSBkaWZmZXJlbnQgY2xpZW50cworCSAgICAgIGluIHRoZWlyIHdha2UuIFNlZSBSRkMyNjczIGZvciBkZXRhaWxzIG9mIGJpdHN0cmluZ3MuCisJICAgICAgCisJICAgICAgQWxsb3cgJ18nIGNoYXJhY3RlcnMgaW4gZG9tYWluIG5hbWVzOiBMZWdhbCBjaGFyYWN0ZXJzCisJICAgICAgYXJlIG5vdyBbYS16XVtBLVpdLi1fIENoZWNrIG5hbWVzIHJlYWQgZnJvbSBob3N0cyBmaWxlcworCSAgICAgIGFuZCBsZWFzZXMgZmlsZXMgYW5kIHJlamVjdCBpbGxlZ2FsIG9uZXMgd2l0aCBhIG1lc3NhZ2UKKwkgICAgICBpbiBzeXNsb2cuIAorCisJICAgICAgTWFrZSBlbXB0eSBkb21haW4gbmFtZXMgaW4gc2VydmVyIGFuZCBhZGRyZXNzIG9wdGlvbnMgCisJICAgICAgaGF2ZSB0aGUgc3BlY2lhbCBtZWFuaW5nICJ1bnF1YWxpZmllZAorCSAgICAgIG5hbWVzIi4gKHVucXVhbGlmaWVkIG5hbWVzIGFyZSBuYW1lcyB3aXRob3V0IGFueSBkb3RzIGluCisJICAgICAgdGhlbSkuIEl0J3Mgbm93IHBvc3NpYmxlIHRvIGRvIHNlcnZlcj0vLzEuMi4zLjQgYW5kIGhhdmUgCisJICAgICAgdW5xdWFsaWZpZWQgbmFtZXMgc2VudCB0byBhIHNwZWNpYWwgbmFtZXNlcnZlci4KKworcmVsZWFzZSAyLjByYzEgIAorICAgICAgICAgICAgICBNb3ZlZCBzb3VyY2UgY29kZSBpbnRvIHNyYy8gZGlyZWN0b3J5LgorCisJICAgICAgRml4ZXMgdG8gY3VyZSBjb21waWxhdGlvbiBicmVha2FnZSB3aGVuIEhBVkVfSVBWNiBub3QKKwkgICAgICBzZXQsIHRoYW5rcyB0byBDbGFhcyBIaWxicmVjaHQuCisKKwkgICAgICBCSUcgQ0hBTkdFOiBhZGRlZCBhbiBpbnRlZ3JhdGVkIERIQ1Agc2VydmVyIGFuZCByZW1vdmVkCisJICAgICAgdGhlIGNvZGUgdG8gcmVhZCBJU0MgZGhjcC5sZWFzZXMuIFRoaXMgd2lucyBpbiB0ZXJtcyAKKwkgICAgICBvZiBlYXNlIG9mIHNldHVwIGFuZCBjb25maWd1cmF0aW9uIGZsZXhpYmlsaXR5IGFuZCAKKwkgICAgICB0b3RhbCBtYWNoaW5lIHJlc291cmNlcyBjb25zdW1lZC4gCisKKwkgICAgICBSZS1qaWdlZCB0aGUgc2lnbmFsIGhhbmRsaW5nIGNvZGUgdG8gcmVtb3ZlIGEgcmFjZQorCSAgICAgIGNvbmRpdGlvbiBhbmQgdG8gYmUgbW9yZSBwb3J0YWJsZS4KKworcmVsZWFzZSAyLjAKKwkgICAgIFRoYW5rcyB0byBEYXZpZCBBc2h3b3J0aCBmb3IgZmVlZGJhY2sgd2hpY2ggaW5mb3JtZWQgbWFueSAKKwkgICAgIG9mIHRoZSBmaXhlcyBiZWxvdy4KKworICAgICAgICAgICAgIEFsbG93IGhvc3RzIHRvIGJlIHNwZWNpZmllZCBieSBjbGllbnQgSUQgaW4gZGhjcC1ob3N0cworICAgICAgICAgICAgIG9wdGlvbnMuIFRoZXNlIGFyZSBub3cgb25lIG9mIAorICAgICAgICAgICAgIGRoY3AtaG9zdD08aGFyZHdhcmUgYWRkcj4sLi4uLiAKKyAgICAgICAgICAgICBkaGNwLWhvc3Q9aWQ6PGhleCBjbGllbnQgaWQ+LC4uLi4uIAorICAgICAgICAgICAgIGRoY3AtaG9zdD1pZDo8YXNjaWkgY2xpZW50IGlkPiwuLi4uLgorCSAgICAgCisJICAgICBBbGxvdyBkaGNwLWhvc3Qgb3B0aW9ucyB0byBzcGVjaWZ5IGFueSBJUCBhZGRyZXNzIG9uIHRoZQorICAgICAgICAgICAgIERIQ1Atc2VydmVkIG5ldHdvcmssIG5vdCBqdXN0IHRoZSByYW5nZSBhdmFpbGFibGUgZm9yCisgICAgICAgICAgICAgZHluYW1pYyBhbGxvY2F0aW9uLgorCisJICAgICBBbGxvdyBkaGNwLWhvc3Qgb3B0aW9ucyBmb3IgdGhlIHNhbWUgaG9zdCB3aXRoIGRpZmZlcmVudAorCSAgICAgSVAgYWRkcmVzc2VzIHdoZXJlIHRoZSBjb3JyZWN0IG9uZSB3aWxsIGJlIHNlbGVjdGVkIGZvcgorCSAgICAgdGhlIG5ldHdvcmsgdGhlIGhvc3QgYXBwZWFycyBvbi4KKworCSAgICAgRml4IHBhcnNpbmcgb2YgLS1kaGNwLW9wdGlvbiB0byBhbGxvdyBtb3JlIHRoYW4gb25lCisJICAgICBJUCBhZGRyZXNzIGFuZCB0byBhbGxvdyB0ZXh0LXR5cGUgb3B0aW9ucy4JICAgICAKKworCSAgICAgSW5oaWJpdCB1c2Ugb2YgLS1kaGNwLW9wdGlvbiB0byBzZW5kIGhvc3RuYW1lIERIQ1Agb3B0aW9ucy4KKwkgICAgIAorCSAgICAgVXBkYXRlIHRoZSBETlMgd2l0aCBESENQIGluZm9ybWF0aW9uIGFmdGVyIHJlLXJlYWRpbmcKKwkgICAgIC9ldGMvaG9zdHMgc28gdGhhdCBhbnkgREhDUCBkZXJpdmVkIG5hbWVzIHdoaWNoIGhhdmUgYmVlbgorCSAgICAgc2hhZG93ZWQgYnkgbm93LWRlbGV0ZWQgaG9zdHMgZW50cmllcyBiZWNvbWUgdmlzaWJsZS4KKworCSAgICAgRml4IHR5cG9zIGluIGRuc21hc3EuY29uZi5leGFtcGxlCisKKwkgICAgIEZpeGVzIHRvIE1ha2VmaWxlKHMpIHRvIGhlbHAgcGtnc3JjIHBhY2thZ2luZyAtIHBhdGNoIAorCSAgICAgZnJvbSAicGFuY2FrZSIuCisKKwkgICAgIEFkZCBkaGNwLWJvb3Qgb3B0aW9uIHRvIHN1cHBvcnQgbmV0d29yayBib290LgorCisJICAgICBDaGVjayBmb3IgZHVwbGljYXRlIElQIGFkZHJlc3NlcyBpbiBkaGNwLWhvc3RzIGxpbmVzCisJICAgICBhbmQgcmVmdXNlIHRvIHJ1biBpZiBmb3VuZC4gSWYgYWxsb3dlZCB0byByZW1haW4gdGhlc2UgCisJICAgICBjYW4gcHJvdm9rZSBhbiBpbmZpbml0ZSBsb29wIGluIHRoZSBESENQIHByb3RvY29sLgorCisJICAgICBBdHRlbXB0ZWQgdG8gcmF0aW9uYWxpc2UgdGhlIC5zcGVjIGZpbGVzIGZvciBycG0KKwkgICAgIGJ1aWxkaW5nLiBUaGVyZSBhcmUgbm93IGZpbGVzIGZvciBSZWRoYXQsIFN1c2UgYW5kCisJICAgICBNYW5kcmFrZS4gSSBob3BlIHRoZXkgd29yayBPSy4KKworCSAgICAgRml4ZWQgaGFyZC10by1yZXByb2R1Y2UgY3Jhc2ggaW52b2x2aW5nIHVzZSBvZiBsb2NhbAorCSAgICAgZG9tYWlucyBhbmQgSVB2NiBxdWVyaWVzLiBUaGFua3MgdG8gUm95IE1hcnBsZXMgZm9yCisJICAgICBoZWxwaW5nIHRvIHRyYWNrIHRoYXQgb25lIGRvd24uCisKK3JlbGVhc2UgMi4xICAKKyAgICAgICAgICAgICBUaGFua3MgdG8gTWF0dCBTd2lmdCBhbmQgRGFnIFdpZWVycyBmb3IgbWFueSBzdWdnZXN0aW9ucyAKKwkgICAgIHdoaWNoIHdlbnQgaW50byB0aGlzIHJlbGVhc2UuCisJICAgIAorCSAgICAgVHdlYWsgaW5jbHVkZSBmaWxlcyB0byBhbGxvdyBjb21waWxhdGlvbiBvbiBGcmVlQlNEIDUKKyAgICAgICAgICAgICAKKyAgICAgICAgICAgICBGaXggdW5hbGlnbmVkIGFjY2VzcyB3YXJuaW5ncyBvbiBCU0QvQWxwaGEuCisKKwkgICAgIEFsbG93IGVtcHR5IERIQ1Agb3B0aW9ucywgbGlrZSBzbzogZGhjcC1vcHRpb249NDQKKyAKKyAgICAgICAgICAgICBBbGxvdyBzaW5nbGUtYnl0ZSBESENQIG9wdGlvbnMgbGlrZSBzbzogZGhjcC1vcHRpb249MjAsMQorCisJICAgICBBbGxvdyBjb21tZW50cyBvbiB0aGUgc2FtZSBsaW5lIGFzIG9wdGlvbnMgaW4KKwkgICAgIC9ldGMvZG5zbWFzcS5jb25mCisKKwkgICAgIERvbid0IGNvbXBsYWluIHdoZW4gdGhlIHNhbWUgbmFtZSBhbmQgYWRkcmVzcyBpcworCSAgICAgYWxsb2NhdGVkIHRvIGEgaG9zdCB1c2luZyBESENQIGFuZCAvZXRjL2hvc3RzLgorCSAgICAgCisJICAgICBBZGRlZCB0byB0aGUgZXhhbXBsZSBjb25maWd1cmF0aW9uIHRoZSBkbnNtYXNxIGVxdWl2YWxlbnQKKwkgICAgIG9mIHRoZSBJU0MgZGhjcGQgc2V0dGluZ3MgZ2l2ZW4gaW4gCisgICAgICAgICAgICAgaHR0cDovL3d3dy5zYW1iYS5vcmcvc2FtYmEvZnRwL2RvY3MvdGV4dGRvY3MvREhDUC1TZXJ2ZXItQ29uZmlndXJhdGlvbi50eHQKKworCSAgICAgRml4ZWQgbG9uZy1leGlzdGluZyBzdHJhbmdlbmVzcyBpbiBMaW51eCBJUHY2IGludGVyZmFjZQorCSAgICAgZGlzY292ZXJ5IGNvZGUuIFRoZSBmbGFncyBmaWVsZCBpbiAvcHJvYy9uZXQvaWZfaW5ldDYgaXMKKwkgICAgIF9ub3RfIHRoZSBpbnRlcmZhY2UgZmxhZ3MuIAorCisJICAgICBGYWlsIGdyYWNlZnVsbHkgd2hlbiBnZXR0aW5nIGFuIEVOT0RFViBlcnJvciB3aGVuIHRyeWluZworCSAgICAgdG8gYmluZCBhbiBJUHY2IHNvY2tldCwgcmF0aGVyIHRoYW4gYmFpbGluZyBvdXQuIFRoYW5rcworCSAgICAgdG8gSmFuIElzY2hlYmVjayBmb3IgZmVlZGJhY2sgb24gdGhhdC4KKworCSAgICAgQWxsb3cgdGhlIG5hbWUtPmFkZHJlc3MgbWFwcGluZyBmb3Igc3RhdGljIERIQ1AgbGVhc2VzIHRvCisJICAgICBiZSBzZXQgYnkgL2V0Yy9ob3N0cy4gSXQncyBub3cgcG9zc2libGUgdG8gaGF2ZQorICAgICAJICAgICAgICBkaGNwLWhvc3Q9PG1hYyBhZGRyPix3aWJibGUKKwkgICAgIG9yIGV2ZW4KKyAgICAgICAgICAgICAgICBkaGNwLWhvc3Q9d2liYmxlCisJICAgICBhbmQgaW4gL2V0Yy9ob3N0cyBoYXZlCisJICAgICAgICB3aWJibGUgMS4yLjMuNAorCSAgICAgYW5kIGZvciB0aGUgY29ycmVjdCB0aGluZyB0byBoYXBwZW4uIE5vdGUgdGhhdCBzb21lIHNvcnQKKwkgICAgIG9mIGRoY3AtaG9zdCBsaW5lIGlzIHN0aWxsIG5lZWRlZCwgaXQncyBub3QgcG9zc2libGUgZm9yCisJICAgICByYW5kb20gaG9zdCB0byBjbGFpbSBhbiBhZGRyZXNzIGluIC9ldGMvaG9zdHMgd2l0aG91dAorCSAgICAgc29tZSBleHBsaWNpdCBjb25maWd1cmF0aW9uLgorCisJICAgICBNYWtlIDAuMC4wLjAgaW4gYSBkaGNwLW9wdGlvbiB0byBtZWFuICJ0aGUgbWFjaGluZQorCSAgICAgcnVubmluZyBkbnNtYXNxIi4KKyAgICAJCSAgICAKKyAgICAgICAgICAgICBGaXggbGVhc2UgdGltZSBzcGVjIHdoZW4gc3BlY2lmaWVkIGluIGRoY3AtcmFuZ2UgYW5kIG5vdAorCSAgICAgaW4gZGhjcC1ob3N0LCBwcmV2aW91c2x5IHRoaXMgd2FzIGFsd2F5cyBvbmUgaG91ci4KKworICAgICAgICAgICAgIEZpeCBwcm9ibGVtIHdpdGggc2V0dGluZyBkb21haW5zIGFzICJsb2NhbCBvbmx5Ii4gLQorICAgICAgICAgICAgIHRoYW5rcyB0byBDaHJpcyBTY2hhbmsuCisKKwkgICAgIEFkZGVkIHN1cHBvcnQgZm9yIG1heCBtZXNzYWdlIHNpemUgREhDUCBvcHRpb24uCisKK3JlbGVhc2UgMi4yCisgICAgICAgICAgICAgRml4IHRvdGFsIGxhY2sgZm9yIERIQ1AgZnVuY3Rpb25hbGl0eSBvbgorCSAgICAgTGludXggc3lzdGVtcyB3aXRoIElQdjYgZW5hYmxlZC4gLSB0aGFua3MgdG8KKwkgICAgIEpvbmF0aG9uIEh1ZHNvbiBmb3Igc3BvdHRpbmcgdGhhdC4KKworCSAgICAgTW92ZSBkZWZhdWx0IGNvbmZpZyBmaWxlIHVuZGVyIEZyZWVCU0QgLSBwYXRjaCBmcm9tCisJICAgICBTdGV2ZW4gSG9uc29uIAorCityZWxlYXNlIDIuMworICAgICAgICAgICAgIEZpeCAiaW5zdGFsbCIgbWFrZWZpbGUgdGFyZ2V0LiAocmVwb3J0ZWQgYnkgUm9iIFN0ZXZlbnMpCisKKwkgICAgIEVuc3VyZSB0aGF0ICJsb2NhbD0vZG9tYWluLyIgZmxhZyBpcyBvYmV5ZWQgZm9yIGFsbAorCSAgICAgcXVlcmllcyBvbiBhIGRvbWFpbiwgbm90IGp1c3QgQSBhbmQgQUFBQS4gKFJlcG9ydGVkIGJ5CisJICAgICBQZXRlciBGaWNodG5lci4pCisKKwkgICAgIEhhbmRsZSBESENQREVDTElORSBtZXNzYWdlcyBhbmQgcHJvdmlkZSBhbiBlcnJvciBtZXNzYWdlCisJICAgICBpbiBESENQTkFLIG1lc3NhZ2VzLgorCSAgICAgCisJICAgICBBZGQgImRvbWFpbiIgc2V0dGluZyBleGFtcGxlIHRvCisJICAgICBkbnNtYXNxLmNvbmYuZXhhbXBsZS4gVGhhbmtzIHRvIEsgUCBLaXJjaGRvcmZlciBmb3IKKwkgICAgIHNwb3R0aW5nIHRoYXQgaXQgd2FzIG1pc3NpbmcuCisKKwkgICAgIFN1YnRsZSBjaGFuZ2UgdG8gdGhlIERIQ1BSRVFVRVNUIGhhbmRsaW5nIGNvZGUgdG8gd29yaworCSAgICAgYXJvdW5kIGEgYnVnIGluIHRoZSBESENQIGNsaWVudCBpbiBIUCBKZXRkaXJlY3QgcHJpbnRlcnMuCisJICAgICBUaGFua3MgdG8gTWFya28gU3RvbGxlIGZvciBmaW5kaW5nIHRoaXMgcHJvYmxlbS4KKworCSAgICAgUmV0dXJuIERIQ1AgVDEgYW5kIFQyIHRpbWVzLCB3aXRoICJmdXp6IiB0byBkZXN5bmNocm9uaXNlIGxlYXNlCisJICAgICByZW5ld2FscywgYXMgc3BlY2lmaWVkIGluIHRoZSBSRkMuCisJICAgICAKKwkgICAgIEVuc3VyZSB0aGF0IHRoZSBFTkQgb3B0aW9uIGlzIGFsd2F5cyBwcmVzZW50IGluIERIQ1AKKwkgICAgIHBhY2tldHMgLCBldmVuIGlmIHRoZSBwYWNrZXQgaXMgdG9vIHNtYWxsIHRvIGZpdCBhbGwgCisJICAgICB0aGUgcmVxdWVzdGVkIG9wdGlvbnMuCisKKwkgICAgIEhhbmRsZSBsYXJnZXItdGhhbi1kZWZhdWx0IERIQ1AgcGFja2V0cyBpZiByZXF1aXJlZCwgdXAKKwkgICAgIHRvIHRoZSBldGhlcm5ldCBNVFUuCisKKwkgICAgIEZpeCBhIGNvdXBsZSBvZiBwbGFjZXMgd2hlcmUgdGhlIHJldHVybiBjb2RlIGZyb20KKwkgICAgIG1hbGxvYygpIHdhcyBub3QgY2hlY2tlZC4KKworCSAgICAgQ29wZSB3aXRoIGEgbWFjaGluZSB0YWtpbmcgYSBESENQIGxlYXNlIGFuZCB0aGVuIG1vdmluZworCSAgICAgbmV0d29yayBzbyB0aGF0IHRoZSBsZWFzZSBhZGRyZXNzIGlzIG5vIGxvbmdlciB2YWxpZC4KKworCSAgICAgVGhlIERIQ1Agc2VydmVyIHdpbGwgbm93IHdvcmsgdmlhIGEgQk9PVFAgcmVsYXkgLSByZW1vdGUKKwkgICAgIG5ldHdvcmtzIGFyZSBjb25maWd1cmVkIHdpdGggdGhlIGRoY3AtcmFuZ2Ugb3B0aW9uIHRoZQorCSAgICAgc2FtZSBhcyBkaXJlY3RseSBjb25uZWN0ZWQgb25lcywgYnV0IHRoZXkgbmVlZCBhbgorCSAgICAgYWRkaXRpb25hbCBuZXRtYXNrIHBhcmFtZXRlci4gRWcKKwkgICAgIC0tZGhjcC1yYW5nZT0xOTIuMTY4LjQuMTAsMTkyLjE2OC40LjUwLDI1NS4yNTUsMjU1LjAKKyAgICAgICAgICAgICB3aWxsIGVuYWJsZSBESENQIHNlcnZpY2UgdmlhIGEgQk9PVFAgcmVsYXkgb24gdGhlCisJICAgICAxOTIuMTY4LjQuMCBuZXR3b3JrLiAKKworCSAgICAgQWRkIGEgbGltaXQgb24gdGhlIG51bWJlciBvZiBhdmFpbGFibGUgREhDUCBsZWFzZXMsCisJICAgICBvdGhlcndpc2UgdGhlIGRhZW1vbiBjb3VsZCBiZSBET1NlZCBieSBhIG1hbGljaW91cworCSAgICAgaG9zdC4gVGhlIGRlZmF1bHQgaXMgMTUwLCBidXQgaXQgY2FuIGJlIGNoYW5nZWQgYnkgdGhlIAorCSAgICAgZGhjcC1sZWFzZS1tYXggb3B0aW9uLgorCisJICAgICBGaXhlZCBjb21waWxhdGlvbiBvbiBPcGVuQlNEICh0aGFua3MgdG8gRnJlZGVyaWMgQnJvZGJlY2sKKwkgICAgIGZvciBoZWxwIHdpdGggdGhhdC4pCisJICAgICAKKwkgICAgIFJld29ya2VkIHRoZSBESENQIG5ldHdvcmsgaGFuZGxpbmcgY29kZSBmb3IgdHdvIGdvb2QKKwkgICAgIGVmZmVjdHM6ICgxKSBUaGUgbGltaXQgb2Ygb25lIG5ldHdvcmsgb25seSBmb3IgREhDUCBvbgorCSAgICAgRnJlZUJTRCBpcyBub3cgZ29uZSwgKDIpIFRoZSBESENQIHNlcnZlciBjb3BlcyB3aXRoCisJICAgICBkeW5hbWljYWxseSBjcmVhdGVkIGludGVyZmFjZXMuIFRoZSBvbmUtaW50ZXJmYWNlCisJICAgICBsaW1pdGF0aW9uIHJlbWFpbnMgZm9yIE9wZW5CU0QsIHdoaWNoIGlzIG1pc3NpbmcKKwkgICAgIGV4dGVuc2lvbnMgdG8gdGhlIHNvY2tldCBBUEkgd2hpY2ggaGF2ZSBiZWVuIGluIExpbnV4CisJICAgICBzaW5jZSB2ZXJzaW9uIDIuMiBhbmQgRnJlZUJTRCBzaW5jZSB2ZXJzaW9uIDQuOC4KKworCSAgICAgUmV3b3JrZWQgdGhlIEROUyBuZXR3b3JrIGNvZGUgdG8gYWxzbyBjb3BlIHdpdGgKKwkgICAgIGR5bmFtaWNhbGx5IGNyZWF0ZWQgaW50ZXJmYWNlcy4gZG5zbWFzcSB3aWxsIG5vdyBsaXN0ZW4KKwkgICAgIHRvIHRoZSB3aWxkY2FyZCBhZGRyZXNzIGFuZCBwb3J0IDUzIGJ5IGRlZmF1bHQsIHNvIGlmIG5vCisJICAgICAtLWludGVyZmFjZSBvciAtLWFkZHJlc3Mgb3B0aW9ucyBhcmUgZ2l2ZW4gaXQgd2lsbCBoYW5kbGUKKwkgICAgIGR5bmFtaWNhbGx5IGNyZWF0ZWQgaW50ZXJmYWNlcy4gVGhlIG9sZCBiZWhhdmlvdXIgY2FuIGJlCisJICAgICByZXN0b3JlZCB3aXRoIC0tYmluZC1pbnRlcmZhY2VzIGZvciBwZW9wbGUgcnVubmluZyBCSU5ECisJICAgICBvbiBvbmUgaW50ZXJmYWNlIGFuZCBkbnNtYXNxIG9uIGFub3RoZXIuIE5vdGUgdGhhdAorCSAgICAgLS1pbnRlcmZhY2UgYW5kIC0tYWRkcmVzcyBvcHRpb25zIHN0aWxsIHdvcmssIGJ1dCB0aGUKKwkgICAgIGZpbHRlcmluZyBpcyBkb25lIGJ5IGRuc21hc3EsIHJhdGhlciB0aGVuIHRoZSBrZXJuZWwuCisJICAgICBUaGlzIHdvcmtzIG9uIExpbnV4LCBhbmQgRnJlZUJTRD49NS4wLiBPbiBzeXN0ZW1zIHdoaWNoCisJICAgICBkb24ndCBzdXBwb3J0IHRoZSByZXF1aXJlZCBBUEkgZXh0ZW5zaW9ucywgdGhlIG9sZCAKKwkgICAgIGJlaGF2aW91ciBpcyB1c2VkLCBqdXN0IGFzIGlmIC0tYmluZC1pbnRlcmZhY2VzIGhhZCBiZWVuIHNldC4KKworCSAgICAgQWxsb3cgSVB2NiBzdXBwb3J0IHRvIGJlIGRpc2FibGVkIGF0IGNvbXBpbGUgdGltZS4gVG8gZG8KKwkgICAgIHRoYXQsIGFkZCAtRE5PX0lQVjYgdG8gdGhlIENGTEFHUy4gVGhhbmtzIHRvIE9sZWcKKwkgICAgIEkuIFZkb3Zpa2luIGZvciB0aGUgc3VnZ2VzdGlvbiB0byBkbyB0aGF0LgorCisJICAgICBBZGQgYWJpbGl0eSB0byBzZXQgREhDUCBvcHRpb25zIHBlciBuZXR3b3JrLiBUaGlzIGlzIGRvbmUKKwkgICAgIGJ5IGdpdmluZyBhIG5ldHdvcmsgYW4gaWRlbnRpZmllciBsaWtlIHRoaXM6CisJICAgICBkaGNwLXJhbmdlPXJlZC1uZXQsMTkyLjE2OC4wLjEwLDE5Mi4xNjguMC41MAorCSAgICAgYW5kIHRoZW4gbGFiZWxpbmcgb3B0aW9ucyBpbnRlbmRlZCBmb3IgdGhhdCBuZXR3b3JrIG9ubHkKKwkgICAgIGxpa2UgdGhpczoKKwkgICAgIGRoY3Atb3B0aW9uPXJlZC1uZXQsNiwxLjEuMS4xCisJICAgICBUaGFua3MgdG8gT2xlZyBWZG92aWtpbiBmb3IgYXJndWluZyB0aGF0IG9uZSB0aHJvdWdoLgorCisJICAgICBNYWRlIGVycm9ycyBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIG5vbi1mYXRhbDogZG5zbWFzcQorCSAgICAgd2lsbCBub3cgY29tcGxhaW4gYml0dGVybHksIGJ1dCBjb250aW51ZS4KKworCSAgICAgQWRkZWQgLS1yZWFkLWV0aGVycyBvcHRpb24sIHRvIGFsbG93IGRuc21hc3EgdG8gcHVsbAorCSAgICAgc3RhdGljIERIQ1AgaW5mb3JtYXRpb24gZnJvbSB0aGF0IGZpbGUuIAorCSAgICAgVGhhbmtzIHRvIEFuZGkgQ2FtYmVpcyBmb3IgdGhhdCBzdWdnZXN0aW9uLgorCisJICAgICBBZGRlZCBIQVZFX0JST0tFTl9SVEMgY29tcGlsYXRpb24gb3B0aW9uIHRvIHN1cHBvcnQKKwkgICAgIGVtYmVkZGVkIHN5c3RlbXMgd2l0aG91dCBhIHN0YWJsZSBSVEMuIE9sZWcgVmRvdmlraW4KKwkgICAgIGhlbHBlZCB3b3JrIG91dCBob3cgdG8gbWFrZSB0aGF0IHdvcmsuCisKK3JlbGVhc2UgMi40CisJICAgICBGaXhlZCBpbmFiaWxpdHkgdG8gc3RhcnQgd2hlbiB0aGUgbGVhc2UgZmlsZSBkb2Vzbid0CisJICAgICBhbHJlYWR5IGV4aXN0LiBUaGFua3MgdG8gRGFnIFdpZWVycyBmb3IgcmVwb3J0aW5nIHRoYXQuCisKKwkgICAgIEZpeGVkIHByb2JsZW0gd2VyZSBkaGNwLWhvc3QgY29uZmlndXJhdGlvbiBvcHRpb25zIGRpZAorCSAgICAgbm90IHBsYXkgd2VsbCB3aXRoIGVudHJpZXMgaW4gL2V0Yy9ldGhlcnMgZm9yIHRoZSBzYW1lCisJICAgICBob3N0LiBUaGFua3MgYWdhaW4gdG8gRGFnIFdpZWVycy4KKworCSAgICAgVHdlYWtlZCBESENQIGNvZGUgdG8gZmF2b3VyIG1vdmluZyB0byBhIG5ld2x5LWNvbmZpZ3VyZWQKKwkgICAgIHN0YXRpYyBJUCBhZGRyZXNzIHJhdGhlciB0aGFuIGFuIG9sZCBsZWFzZSB3aGVuIGRvaW5nCisJICAgICBESENQIGFsbG9jYXRpb24uCisKKwkgICAgIEFkZGVkIC0tYWxpYXMgY29uZmlndXJhdGlvbiBvcHRpb24uIFRoaXMgcHJvdmlkZXMgSVB2NAorCSAgICAgcmV3cml0ZSBmYWNpbGl0aWVzIGxpa2UgQ2lzY28gIkROUyBkb2N0b3JpbmciLiBTdWdnZXN0ZWQKKwkgICAgIGJ5IENoYWQgU2tlZXRlcnMuCisKKwkgICAgIEZpeGVkIGJ1ZyBpbiAvZXRjL2V0aGVycyBwYXJzaW5nIGNvZGUgdHJpZ2dlcmVkIGJ5IHRhYgorCSAgICAgY2hhcmFjdGVycy4gS3Vkb3MgdG8gRGFnIFdpZWVycyBmb3IgaGVscGluZyB0byBuYWlsIHRoYXQKKwkgICAgIG9uZS4KKyAJICAgICAKKwkgICAgIEFkZGVkICJiaW5kLWludGVyZmFjZXMiIG9wdGlvbiBjb3JyZWN0bHkuCSAgICAgCisKK3JlbGVhc2UgMi41CisJICAgICBNYWRlICJ3aGVyZSBhcmUgd2UgYWxsb2NhdGluZyBhZGRyZXNzZXM/IiBjb2RlIGluIERIQ1AKKwkgICAgIHNlcnZlciBjb3BlIHdpdGggcmVxdWVzdHMgdmlhIGEgcmVsYXkgd2hpY2ggaXMgb24gYQorCSAgICAgZGlyZWN0bHkgY29ubmVjdGVkIG5ldHdvcmsgZm9yIHdoaWNoIHRoZXJlIGlzIG5vdCBhCisJICAgICBjb25maWd1cmVkIG5ldG1hc2suIFRoaXMgc3RyYW5nZSBzdGF0ZSBvZiBhZmZhaXJzIG9jY3VycworCSAgICAgd2l0aCB3aW40bGluLiBUaGFua3MgdG8gQWxleCBNZWx0IGFuZCBKaW0gSG9ybmVyIGZvciBidWcKKwkgICAgIHJlcG9ydHMgYW5kIHRlc3Rpbmcgd2l0aCB0aGlzLiAKKworCSAgICAgRml4ZWQgdHJpdmlhbC1idXQtaXJyaXRhdGluZyBtaXNzaW5nICNpbmNsdWRlIHdoaWNoIGJyb2tlCisJICAgICBjb21waWxhdGlvbiBvbiAqQlNELgorCisJICAgICBGb3JjZSAtLWJpbmQtaW50ZXJmYWNlcyBpZiBJUC1hbGlhc2VkIGludGVyZmFjZQorCSAgICAgc3BlY2lmaWNhdGlvbnMgYXJlIHVzZWQsIHNpbmNlIHRoZSBzb2NrZXRzIEFQSSBwcm92aWRlcworCSAgICAgbm8gb3RoZXIgc2FuZSB3YXkgdG8gZGV0ZXJtaW5lIHdoaWNoIGFsaWFzIG9mIGFuCisJICAgICBpbnRlcmZhY2UgYSBwYWNrZXQgd2FzIHNlbnQgdG8uIFRoYW5rcyB0byBKYXZpZXIgS29oZW4KKwkgICAgIGZvciB0aGUgYnVnIHJlcG9ydC4KKworcmVsZWFzZSAyLjYgCisJICAgICBTdXBwb3J0IFRva2VuIFJpbmcgREhDUC4gVGhhbmtzIHRvIERhZyBXaWVlcnMgZm9yIGhlbHAKKwkgICAgIHRlc3RpbmcuIE5vdGUgdGhhdCBUb2tlbiByaW5nIHN1cHBvcnQgb25seSB3b3JrcyBvbiBMaW51eCAKKwkgICAgIGN1cnJlbnRseS4KKworCSAgICAgRml4IGNvbXBpbGF0aW9uIG9uIE1hY09TIFguIFRoYW5rcyB0byBCZXJuaGFyZCBFaGxlcnMgZm9yCisJICAgICB0aGUgcGF0Y2guCisKKwkgICAgIEFkZGVkIG5ldyAiaWdub3JlIiBrZXl3b3JkIGZvcgorCSAgICAgZGhjcC1ob3N0LiAiZGhjcC1ob3N0PTExOjIyOjMzOjQ0OjU1OjY2LGlnbm9yZSIgd2lsbAorCSAgICAgY2F1c2UgdGhlIERIQ1Agc2VydmVyIHRvIGlnbm9yZSBhbnkgaG9zdCB3aXRoIHRoZSBnaXZlbgorCSAgICAgTUFDIGFkZHJlc3MsIGxlYXZpbmcgaXQgdG8gb3RoZXIgc2VydmVycyBvbiB0aGUKKwkgICAgIG5ldHdvcmsuIFRoaXMgYWxzbyB3b3JrcyB3aXRoIGNsaWVudC1pZCBhbmQgaG9zdG5hbWVzLgorCSAgICAgU3VnZ2VzdGlvbiBieSBBbGV4IE1lbHQuCisKKwkgICAgIEZpeGVkIHBhcnNpbmcgb2YgaGV4IGNsaWVudCBJRHMuIFByb2JsZW0gc3BvdHRlZCBieSBQZXRlcgorCSAgICAgRmljaHRuZXIuCisKKwkgICAgIEFsbG93IGNvbmYtZmlsZSBvcHRpb25zIGluIGNvbmZpZ3VyYXRpb24gZmlsZSwgdG8KKwkgICAgIHByb3ZpZGUgYW4gaW5jbHVkZSBmdW5jdGlvbi4KKwkgICAgIAorCSAgICAgUmUtcmVhZCAvZXRjL2V0aGVycyBvbiByZWNlaXB0IG9mIFNJR0hVUC4KKworCSAgICAgQWRkZWQgYmFjayB0aGUgYWJpbGl0eSB0byByZWFkIElTQyBkaGNwZCBsZWFzZSBmaWxlcywgYnkKKwkgICAgIHBvcHVsYXIgZGVtYW5kLiBOb3RlIHRoYXQgdGhpcyBpcyBkZXByZWNhdGVkIGFuZCBmb3IKKwkgICAgIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IG9ubHkuIFlvdSBjYW4gZ2V0IGJhY2sgdGhlIDRLIG9mCisJICAgICBtZW1vcnkgdGhhdCB0aGUgY29kZSBvY2N1cGllcyBieSB1bmRlZmluaW5nCisJICAgICAiSEFWRV9JU0NfUkVBREVSIiBpbiBzcmMvY29uZmlnLmgKKworCSAgICAgQWRkZWQgYWJpbGl0eSB0byBkaXNhYmxlICJwb29sIiBESENQIGFkZHJlc3MgYWxsb2NhdGlvbgorCSAgICAgd2hpbHN0IGxlYXZpbmcgc3RhdGljIGxlYXNlcyB3b3JraW5nLiBUaGUgc3ludGF4IGlzCisJICAgICAiZGhjcC1yYW5nZT0xOTIuMTY4LjAuMCxzdGF0aWMiCisJICAgICBUaGFua3MgdG8gR3J6ZWdvcnogTm9zZWsgZm9yIHRoZSBzdWdnZXN0aW9uLgorCisJICAgICBHZW5lcmFsaXplZCBkbnNtYXNxLXJoLnNwZWMgZmlsZSB0byB3b3JrIG9uIE1hbmRyYWtlIHRvbywKKwkgICAgIGFuZCByZW1vdmVkIGRuc21hc3EtbWRrLnNwZWMuIFRoYW5rcyB0byBEb3VnIEtlbGxlci4KKworCSAgICAgQWxsb3cgREhDUCBvcHRpb25zIHdoaWNoIGFyZSB0aWVkIHRvIHNwZWNpZmljIHN0YXRpYworCSAgICAgbGVhc2VzIGluIHRoZSBzYW1lIHdheSBhcyB0byBzcGVjaWZpYyBuZXR3b3Jrcy4KKworCSAgICAgR2VuZXJhbGlzZWQgdGhlIGRoY3Atb3B0aW9uIHBhcnNlciBhIGJpdCB0byBhbGxvdyBoZXgKKwkgICAgIHN0cmluZ3MgYXMgcGFyYW1ldGVycy4gVGhpcyBpcyBub3cgbGVnYWw6CisJICAgICBkaGNwLW9wdGlvbj0xMjgsZTQ6NDU6NzQ6Njg6MDA6MDAKKwkgICAgIEluc3BpcmVkIGJ5IGEgcGF0Y2ggZnJvbSBKb2VsIE5vcmRlbGwuCisKKwkgICAgIENoYW5nZWQgdGhlIHNlbWFudGljcyBvZiBhcmd1bWVudC1sZXNzIGRoY3Atb3B0aW9ucyBmb3IKKwkgICAgIHRoZSBkZWZhdWx0LXNldHRpbmcgb25lcywgaWUgMSwgMywgNiBhbmQgMjguIE5vdywgZG9pbmcKKwkgICAgIGVnLCBkaGNwLW9wdGlvbj0zIHN0b3BzIGRuc21hc3EgZnJvbSBzZW5kaW5nIGEgZGVmYXVsdAorCSAgICAgcm91dGVyIG9wdGlvbiBhdCBhbGwuIFRoYW5rcyB0byBTY290dCBFbW1vbnMgZm9yIHBvaW50aW5nCisJICAgICBvdXQgdGhhdCB0aGlzIGlzIHVzZWZ1bC4KKworCSAgICAgRml4ZWQgZG5zbWFzcS5jb25mIHBhcnNpbmcgYnVnIHdoaWNoIGludGVycHJldGVkIHBvcnQKKwkgICAgIG51bWJlcnMgaW4gc2VydmVyPSBsaW5lcyBhcyBhIGNvbW1lbnQuIFRvIHN0YXJ0IGEKKwkgICAgIGNvbW1lbnQsIGEgJyMnIGNoYXJhY3RlciBtdXN0IG5vdyBiZSBhIHRoZSBzdGFydCBvZiBhCisJICAgICBsaW5lIG9yIHByZWNlZGVkIGJ5IHdoaXRlc3BhY2UuIFRoYW5rcyB0byBDaHJpc3RpYW4KKwkgICAgIEhhZ2dzdHJvbSBmb3IgdGhlIGJ1ZyByZXBvcnQuCisKK3JlbGVhc2UgMi43ICAKKyAgICAgICAgICAgICBBbGxvdyB0aGUgZGhjcC1ob3N0IHNwZWNpZmljYXRpb24gb2YgaWQ6KiB3aGljaCBtYWtlcyAKKwkgICAgIGRuc21hc3EgaWdub3JlIGFueSBjbGllbnQtaWQuIFRoaXMgaXMgdXNlZnVsIHRvIGVuc3VyZSAKKwkgICAgIHRoYXQgYSBkdWFsLWJvb3QgbWFjaGluZSBzZWVzIHRoZSBzYW1lIGxlYXNlIHdoZW4gb25lIE9TIAorCSAgICAgZ2l2ZXMgYSBjbGllbnQtaWQgYW5kIHRoZSBvdGhlciBkb2Vzbid0LiBJdCdzIGFsc28gdXNlZnVsCisJICAgICB3aGVuIFBYRSBib290IERIQ1AgZG9lcyBub3QgdXNlIGNsaWVudCBJRHMgYnV0IHRoZSBPUyBpdCBib290cyAKKyAgICAgICAgICAgICBkb2VzLiBUaGFua3MgdG8gR3J6ZWdvcnogTm9zZWsgZm9yIHN1Z2dlc3RpbmcgdGhpcyBlbmhhbmNlbWVudC4KKworCSAgICAgTm8gbG9uZ2VyIGFzc3VtZSB0aGF0IGNpYWRkciBpcyB6ZXJvIGluIHJlY2VpdmVkIERIQ1BESVNDT1ZFUiAKKwkgICAgIG1lc3NhZ2VzLCBqdXN0IGZvciBzZWN1cml0eSBhZ2FpbnN0IGJyb2tlbiBjbGllbnRzLgorCisJICAgICBTZXQgZGVmYXVsdCBvZiBzaWFkZHIgZmllbGQgdG8gdGhlIGFkZHJlc3Mgb2YgdGhlIG1hY2hpbmUgcnVubmluZyAKKyAgICAgICAgICAgICBkbnNtYXNxIHdoZW4gbm90IGV4cGxpY2l0bHkgc2V0IHVzaW5nIGRoY3AtYm9vdAorICAgICAgICAgICAgIG9wdGlvbi4gVGhpcyBpcyB0aGUgSVNDIGRoY3BkIGJlaGF2aW91ci4gIAorCisgICAgICAgICAgICAgU2VuZCBUMSBhbmQgVDIgb3B0aW9ucyBpbiBESENQT0ZGRVIgcGFja2V0cy4gVGhpcyBpcyByZXF1aXJlZAorCSAgICAgYnkgdGhlIERIQ1AgY2xpZW50IGluIHNvbWUgSmV0RGlyZWN0IHByaW50ZXJzLiBUaGFua3MgCisgICAgICAgICAgICAgdG8gUGF1bCBNYXR0YWwgZm9yIHdvcmsgb24gdGhpcy4KKworCSAgICAgRml4ZWQgYnVnIHdpdGggREhDUCBvbiBPcGVuQlNEIHJlcG9ydGVkIGJ5IERvbWluaXF1ZSBKYWNxdWVsLgorCSAgICAgVGhlIGNvZGUgd2hpY2ggYWRkZWQgbG9vcGJhY2sgaW50ZXJmYWNlcyB0byB0aGUgbGlzdAorCSAgICAgd2FzIGNvbmZ1c2luZyB0aGUgREhDUCBjb2RlLCB3aGljaCBleHBlY3RlZCBvbmUgaW50ZXJmYWNlIG9ubHkuCisJICAgICBTb2x2ZWQgYnkgYWRkaW5nIGxvb3BiYWNrIGludGVyZmFjZXMgdG8gYWRkcmVzcyBsaXN0IGluc3RlYWQuCisKKwkgICAgIEFkZCBkaGNwLXZlbmRvcmNsYXNzIG9wdGlvbiB0byBhbGxvdyBvcHRpb25zIHRvIGJlIHNlbnQgb25seQorCSAgICAgdG8gY2VydGFpbiBjbGFzc2VzIG9mIGNsaWVudHMuCisKKwkgICAgIFR3ZWFrZWQgb3B0aW9uIHNlYXJjaCBjb2RlIHNvIHRoYXQgaWYgYSBuZXRpZC1xdWFsaWZpZWQKKwkgICAgIG9wdGlvbiBpcyB1c2VkLCBhbnkgdW5xdWFsaWZpZWQgb3B0aW9uIGlzIGlnbm9yZWQuCisJICAgICAKKwkgICAgIENoYW5nZWQgdGhlIG1ldGhvZCBvZiBwaWNraW5nIG5ldyBkeW5hbWljIElQCisJICAgICBhZGRyZXNzZXMuIFRoaXMgdXNlZCB0byB1c2UgdGhlIG5leHQgY29uc2VjdXRpdmUKKwkgICAgIGFkZHJlc3MgYXMgbG9uZyBpdCB3YXMgZnJlZSwgbm93IGl0IHVzZXMgYSBoYXNoCisJICAgICBmcm9tIHRoZSBjbGllbnQgaGFyZHdhcmUgYWRkcmVzcy4gVGhpcyByZWR1Y2VzIHRoZSBhbW91bnQKKwkgICAgIG9mIGFkZHJlc3MgbW92ZW1lbnQgZm9yIGNsaWVudHMgd2hpY2ggbGV0IHRoZWlyIGxlYXNlCisJICAgICBleHBpcmUgYW5kIGFsbG93cyBjb25zZWN1dGl2ZSBESENQT0ZGRVJTIHRvIHRoZSBzYW1lIGhvc3QKKwkgICAgIHRvIChhbG1vc3QgYWx3YXlzKSBiZSBmb3IgdGhlIHNhbWUgYWRkcmVzcywgd2l0aG91dAorCSAgICAgc3RvcmluZyBzdGF0ZSBiZWZvcmUgYSBsZWFzZSBpcyBncmFudGVkLgorIAorCSAgICAgVHdlYWtlZCBvcHRpb24gaGFuZGxpbmcgY29kZSB0byByZXR1cm4gYWxsIHBvc3NpYmxlCisJICAgICBvcHRpb25zIHJhdGhlciB0aGFuIG5vbmUgd2hlbiBESENQICJyZXF1ZXN0ZWQgb3B0aW9ucyIKKwkgICAgIGZpZWxkIGlzIG1pc3NpbmcuIFRoaXMgZml4ZXMgaW50ZXJvcGVyYWJpbGl0eSB3aXRoCisJICAgICBhbmNpZW50IElCTSBMQU5NQU4gREhDUCBjbGllbnRzLiBUaGFua3MgdG8gSmltIExvdXZhdSBmb3IKKwkgICAgIGhlbHAgd2l0aCB0aGlzLgorCityZWxlYXNlIDIuOAorCSAgICAgUGFkIERIQ1AgcGFja2V0cyB0byBhIG1pbmltdW0gc2l6ZSBvZiAzMDAgYnl0ZXMuIFRoaXMKKwkgICAgIGZpeGVzIGludGVyb3BlcmFiaWxpdHkgcHJvYmxlbXMgd2l0aCB0aGUgTGludXggaW4ta2VybmVsCisJICAgICBESENQL0JPT1RQIGNsaWVudC4gVGhhbmtzIHRvIFJpY2hhcmQgTXVzaWwgZm9yCisJICAgICBkaWFnbm9zaW5nIHRoaXMgYW5kIHN1cHBseWluZyBhIHBhdGNoLgorCisJICAgICBGaXhlZCBvcHRpb24tcGFyc2luZyBidWcgYW5kIHBvdGVudGlhbCBtZW1vcnkgbGVhay4gUGF0Y2gKKwkgICAgIGZyb20gUmljaGFyZCBNdXNpbC4KKworCSAgICAgSW1wcm92ZWQgdmVuZG9yIGNsYXNzIGNvbmZpZ3VyYXRpb24gYW5kIGFkZGVkIHVzZXIgY2xhc3MKKwkgICAgIGNvbmZpZ3VyYXRpb24uIFNwZWNpZmljYWxseTogKDEpIG9wdGlvbnMgYXJlIG1hdGNoZWQgb24KKwkgICAgIHRoZSBuZXRpZHMgZnJvbSBkaGNwLXJhbmdlLCBkaGNwLWhvc3QsIHZlbmRvciBjbGFzcyBhbmQKKwkgICAgIHVzZXIgY2xhc3MoZXMpLiBNdWx0aXBsZSBuZXQtaWRzIGFyZSBhbGxvd2VkIGFuZCBvcHRpb25zCisJICAgICBhcmUgc2VhcmNoZWQgb24gdGhlbSBhbGwuICgyKSBtYXRjaGVzIGFnYWluc3QgdmVuZG9yIGNsYXNzCisJICAgICBhbmQgdXNlciBjbGFzcyBhcmUgbm93IG9uIGEgc3Vic3RyaW5nLCBpZiB0aGUgZ2l2ZW4KKwkgICAgIHN0cmluZyBpcyBhIHN1YnN0cmluZyBvZiB0aGUgdmVuZG9yL3VzZXIgY2xhc3MsIHRoZW4gYQorCSAgICAgbWF0Y2ggb2NjdXJzLiBUaGFua3MgYWdhaW4gdG8gUmljaGFyZCBNdXNpbCBmb3IgcHJvbXB0aW5nCisJICAgICB0aGlzLgorCisJICAgICBNYWtlICIjIiBtYXRjaCBhbnkgZG9tYWluIG9uIC0tYWRkcmVzcyBhbmQgLS1zZXJ2ZXIKKwkgICAgIGZsYWdzLiAtLWFkZHJlc3M9LyMvMS4yLjMuNCB3aWxsIHJldHVybiAxLjIuMy40IGZvciBfYW55XworCSAgICAgZG9tYWluIG5vdCBvdGhlcndpc2UgbWF0Y2hlZC4gT2YgY291cnNlCisJICAgICAtLXNlcnZlcj0vIy8xLjIuMy40IGlzIGV4YWN0bHkgZXF1aXZhbGVudCB0bworCSAgICAgLS1zZXJ2ZXI9MS4yLjMuNC4gU3BlY2lhbCByZXF1ZXN0IGZyb20gSm9zaCBIb3dsZXR0LgorCQorCSAgICAgRml4ZWQgYSBuYXN0eSBidWcgd2hpY2ggd291bGQgY2F1c2UgZG5zbWFzcSB0byBsb3NlIHRyYWNrCisJICAgICBvZiBsZWFzZXMgZm9yIGhvc3RzIHdoaWNoIGhhZCBhIC0tZGhjcC1ob3N0IGZsYWcgd2l0aG91dAorCSAgICAgYSBuYW1lIHNwZWNpZmljYXRpb24uIFRoZSBtZWNoYW5pc20gZm9yIHRoaXMgd2FzIHRoYXQKKwkgICAgIHRoZSBob3N0bmFtZSBjb3VsZCBnZXQgZXJyb25lb3VzbHkgc2V0IGFzIGEgemVyby1sZW5ndGgKKwkgICAgIHN0cmluZyBhbmQgdGhlbiB3cml0dGVuIHRvIHRoZSBsZWFzZXMgZmlsZSBhcyBhCisJICAgICBtYWwtZm9ybWVkIGxpbmUuIFJlc3RhcnRpbmcgZG5zbWFzcSB3b3VsZCB0aGVuIGxvc2UgdGhlIGxlYXNlLgorCSAgICAgQWxleCBIZXJtYW5uJ3Mgd29yayBoZWxwZWQgY2hhc2UgZG93biB0aGlzIHByb2JsZW0uCisKKwkgICAgIEFkZCBjaGVja3MgYWdhaW5zdCBESENQIGNsaWVudHMgd2hpY2ggcmV0dXJuIHplcm8tbGVuZ3RoCisJICAgICBob3N0bmFtZXMuIFRoaXMgYXZvaWRzIHRoZSBwb3RlbnRpYWwgbGVhc2UtbG9zcyBwcm9ibGVtcworCSAgICAgcmVmZXJyZWQgdG8gYWJvdmUuIEFsc28sIGlmIGEgY2xpZW50IHNlbmRzIGEgaG9zdG5hbWUgd2hlbgorCSAgICAgaXQgY3JlYXRlcyBhIGxlYXNlIGJ1dCBzdWJzZXF1ZW50bHkgc2VuZHMgbm8gb3IgYQorCSAgICAgemVyby1sZW5ndGggaG9zdG5hbWUgd2hpbHN0IHJlbmV3aW5nLCBjb250aW51ZSB0byB1c2UgdGhlCisJICAgICBleGlzdGluZyBob3N0bmFtZSwgZG9uJ3Qgd2lwZSBpdCBvdXQuIAorCSAgICAgCisJICAgICBUd2Vha2VkIG9wdGlvbiBwYXJzaW5nIHRvIGZsYWcgc29tZSBwYXJhbWV0ZXIgZXJyb3JzLgorCityZWxlYXNlIDIuOQorCSAgICAgRml4ZWQgaW50ZXJmYWNlIGZpbHRlciBjb2RlIGZvciB0d28gZWZmZWN0czogMSkgRml4ZWQgYnVnCisJICAgICB3aGVyZSBxdWVyaWVzIHNlbnQgdmlhIGxvb3BiYWNrIGludGVyZmFjZQorCSAgICAgYnV0IHRvIHRoZSBhZGRyZXNzIG9mIGFub3RoZXIgaW50ZXJmYWNlIHdlcmUgaWdub3JlZAorCSAgICAgdW5sZXNzIHRoZSBsb29wYmFjayBpbnRlcmZhY2Ugd2FzIGV4cGxpY2l0bHkgY29uZmlndXJlZC4KKwkgICAgIDIpIG9uIE9wZW5CU0QgZmFpbHVyZSB0byBjb25maWd1cmUgb25lIGludGVyZmFjZSBub3cKKwkgICAgIGNhdXNlcyBhIGZhdGFsIGVycm9yIG9uIHN0YXJ0dXAgcmF0aGVyIHRoYW4gYW4gaHVnZQorCSAgICAgc3RyZWFtIG9mIGxvZyBtZXNzYWdlcy4gVGhhbmtzIHRvIEVyaWsgSmFuIFRyb21wIGZvciAKKwkgICAgIGZpbmRpbmcgdGhhdCBidWcuCisKKwkgICAgIENoYW5nZWQgc2VydmVyIHNlbGVjdGlvbiBzdHJhdGVneSB0byBpbXByb3ZlIHBlcmZvcm1hbmNlCisJICAgICB3aGVuIHRoZXJlIGFyZSBtYW55IGF2YWlsYWJsZSBzZXJ2ZXJzIGFuZCBzb21lIGFyZQorCSAgICAgYnJva2VuLiBUaGUgbmV3IGFsZ29yaXRobSBpcyB0byBwaWNrIGFzIGJlZm9yZSBmb3IgdGhlCisJICAgICBmaXJzdCB0cnksIGJ1dCBpZiBhIHF1ZXJ5IGlzIHJldHJpZWQsIHRvIHNlbmQgdG8gYWxsCisJICAgICBhdmFpbGFibGUgc2VydmVycyBpbiBwYXJhbGxlbC4gVGhlIGZpcnN0IG9uZSB0byByZXBseQorCSAgICAgdGhlbiBiZWNvbWVzIHByZWZlcnJlZCBmb3IgdGhlIG5leHQgcXVlcnkuIFRoaXMgc2hvdWxkIAorCSAgICAgaW1wcm92ZSByZWxpYWJpbGl0eSB3aXRob3V0IGdlbmVyYXRpbmcgc2lnbmlmaWNhbnQgZXh0cmEKKwkgICAgIHVwc3RyZWFtIGxvYWQuCisKKwkgICAgIEZpeGVkIGJyZWFrYWdlIG9mIHNwZWNpYWwgc2VydmVycy9hZGRyZXNzZXMgZm9yCisJICAgICB1bnF1YWxpZmllZCBkb21haW5zIGludHJvZHVjZWQgaW4gdmVyc2lvbiAyLjggCisJICAgICAgCisJICAgICBBbGxvdyBmYWxsYmFjayB0byAiYmluZC1pbnRlcmZhY2VzIiBhdCBydW50aW1lOiBTb21lCisJICAgICB2ZXJzaW9ucyBvZiAqQlNEIHNlZW0gdG8gaGF2ZSBlbm91Z2ggc3R1ZmYgaW4gdGhlIGhlYWRlcgorCSAgICAgZmlsZXMgdG8gYnVpbGQgYnV0IG5vIGtlcm5lbCBzdXBwb3J0LiBBbHNvIG5vdyBsb2cgaWYKKwkgICAgICJiaW5kLWludGVyZmFjZXMiIGlzIGZvcmNlZCBvbi4KKworCSAgICAgTG9nIHJlcGxpZXMgZnJvbSB1cHN0cmVhbSBzZXJ2ZXJzIHdoaWNoIHJlZnVzZSB0byBkbworCSAgICAgcmVjdXJzaW9uIC0gZG5zbWFzcSBpcyBub3QgYSByZWN1cnNpdmUgbmFtZXNlcnZlciBhbmQKKwkgICAgIHJlbGllcyBvbiB1cHN0cmVhbSBzZXJ2ZXJzIHRvIGRvIHRoZSByZWN1cnNpb24sIHRoaXMKKwkgICAgIGZsYWdzIGEgY29uZmlndXJhdGlvbiBlcnJvci4KKworCSAgICAgRGlzYWJsZSBjbGllbnQtaWQgbWF0Y2hpbmcgZm9yIGhvc3RzIHdob3NlIE1BQyBhZGRyZXNzIGlzCisJICAgICByZWFkIGZyb20gL2V0Yy9ldGhlcnMuIFBhdGNoIGZyb20gT2xlZyBJLiBWZG92aWtpbi4KKworCSAgICAgRXh0ZW5kZWQgLS1teC1ob3N0IGZsYWcgdG8gYWxsb3cgYXJiaXRyYXJ5IHRhcmdldHMgZm9yIE1YCisJICAgICByZWNvcmRzLCBzdWdnZXN0ZWQgYnkgTW9yaXR6IEJ1bmt1cy4KKworCSAgICAgRml4ZWQgYnVpbGQgdW5kZXIgTmV0QlNEIDIuMCAtIHRoYW5rcyB0byBGZWxpeCBEZWljaG1hbm4KKwkgICAgIGZvciB0aGUgcGF0Y2guCisJICAgICAKKwkgICAgIERlYWwgY29ycmVjdGx5IHdpdGggcmVwZWF0ZWQgYWRkcmVzc2VzIGluIC9ldGMvaG9zdHMuIFRoZQorCSAgICAgZmlyc3QgbmFtZSBmb3VuZCBpcyBub3cgcmV0dXJuZWQgZm9yIHJldmVyc2UgbG9va3VwcywKKwkgICAgIHJhdGhlciB0aGFuIGFsbCBvZiB0aGVtLgorCisJICAgICBBZGQgYmFjayBmYXRhbCBlcnJvcnMgd2hlbiBub25leGlzdGVudCAKKwkgICAgIGludGVyZmFjZXMgb3IgaW50ZXJmYWNlIGFkZHJlc3NlcyBhcmUgZ2l2ZW4gYnV0IG9ubHkgaW4KKwkgICAgICJiaW5kLWludGVyZmFjZXMiIG1vZGUuIFByaW5jaXBsZSBvZiBsZWFzdCBzdXJwcmlzZSBhcHBsaWVzLgorCSAgICAgCisJICAgICBBbGxvdyAjIGFzIHRoZSBhcmd1bWVudCB0byAtLWRvbWFpbiwgbWVhbmluZyAicmVhZCB0aGUKKwkgICAgIGRvbWFpbiBmcm9tIHRoZSBmaXJzdCBzZWFyY2ggZGlyZWN0aXZlIGluCisJICAgICAvZXRjLnJlc29sdi5jb25mIi4gRmVhdHVyZSBzdWdnZXN0ZWQgYnkgRXZhbiBKb25lcy4KKworcmVsZWFzZSAyLjEwCisJICAgIEFsbG93IC0tcXVlcnktcG9ydCB0byBiZSBzZXQgdG8gYSBsb3cgcG9ydCBieSBjcmVhdGluZyBhbmQKKwkgICAgYmluZGluZyB0aGUgc29ja2V0IGJlZm9yZSBkcm9wcGluZyByb290LiAoU3VnZ2VzdGlvbiBmcm9tCisJICAgIEphbWllIExva2llcikgCisKKwkgICAgU3VwcG9ydCBUQ1AgcXVlcmllcy4gSXQgdHVybmVkIG91dCB0byBiZSBwb3NzaWJsZSB0byBkbworCSAgICB0aGlzIHdpdGggYSBjb3VwbGUgb2YgaHVuZHJlZCBsaW5lcyBvZiBjb2RlLCBvbmNlIEkga25ldworCSAgICBob3cuIFRoZSBleGVjdXRhYmxlIHNpemUgd2VudCB1cCBieSBhIGZldyBLIG9uIGkzODYuCisJICAgIFRoZXJlIGFyZSBhIGZldyBsaW1pdGF0aW9uczogZGF0YSBvYnRhaW5lZCB2aWEgVENQIGlzIG5vdAorCSAgICBjYWNoZWQsIGFuZCBkeW5hbWljYWxseS1jcmVhdGVkIGludGVyZmFjZXMgbWF5IGJyZWFrIHVuZGVyCisJICAgIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcy4gU291cmNlLWFkZHJlc3Mgb3IgcXVlcnktcG9ydAorCSAgICBzcGVjaWZpY2F0aW9ucyBhcmUgaWdub3JlZCBmb3IgVENQLgorCisJICAgIE5BSyBhdHRlbXB0cyB0byByZW5ldyBhIERIQ1AgbGVhc2Ugd2hlcmUgdGhlIERIQ1AgcmFuZ2UKKwkgICAgaGFzIGNoYW5nZWQgYW5kIHRoZSBsZWFzZSBpcyBubyBsb25nZXIgaW4gdGhlIGFsbG93ZWQKKwkgICAgcmFuZ2UuIEphbWllIExva2llciBwb2ludGVkIG91dCB0aGlzIGJ1Zy4KKworCSAgICBOQUsgYXR0ZW1wdHMgdG8gcmVuZXcgYSBwb29sIERIQ1AgbGVhc2Ugd2hlbiBhIHN0YXRpY2FsbHkKKwkgICAgYWxsb2NhdGVkIGFkZHJlc3MgaGFzIGJlY29tZSBhdmFpbGFibGUsIGZvcmNpbmcgYSBob3N0IHRvCisJICAgIG1vdmUgdG8gaXRzIGFsbG9jYXRlZCBhZGRyZXNzLiBMb3RzIG9mIHBlb3BsZSBoYXZlCisJICAgIHN1Z2dlc3RlZCB0aGlzIGNoYW5nZSBhbmQgYmVlbiByZWJ1ZmZlZCAodGhleSBrbm93IHdobworCSAgICB0aGV5IGFyZSkgdGhlIHN0cmF3cyB0aGF0IGJyb2tlIHRoZSBjYW1lbCdzIGJhY2sgd2VyZSBUaW0KKwkgICAgQ3V0dHMgYW5kIEphbWllIExva2llci4KKworCSAgICBSZW1vdmUgYW55IG5hbWVzZXJ2ZXIgcmVjb3JkcyBmcm9tIGFuc3dlcnMgd2hpY2ggYXJlCisJICAgIG1vZGlmaWVkIGJ5IC0tYWxpYXMgZmxhZ3MuIElmIHRoZSBhbnN3ZXIgaXMgbW9kaWZpZWQsIGl0CisJICAgIGNhbm5vdCBhbnkgbG9uZ2VyIGJlIGF1dGhvcml0YXRpdmUuCisKKwkgICAgQ2hhbmdlIGJlaGF2aW91ciBvZiAiYm9ndXMtcHJpdiIgb3B0aW9uIHRvIHJldHVybiBOWERPTUFJTgorCSAgICByYXRoZXIgdGhhbiBhIFBUUiByZWNvcmQgd2l0aCB0aGUgZG90dGVkLXF1YWQgYWRkcmVzcyBhcworCSAgICBuYW1lLiBUaGUgbmV3IGJlaGF2aW91ciBkb2Vzbid0IHByb3Zva2UgdGNwd3JhcHBlcnMgbGlrZQorCSAgICB0aGUgb2xkIGJlaGF2aW9yIGRpZC4KKworCSAgICBBZGRlZCBhIHBhdGNoIGZvciB0aGUgU3VzZSBycG0uIFRoYXQgY2hhbmdlcyB0aGUgZGVmYXVsdAorCSAgICBncm91cCB0byBvbmUgc3VpdGFibGUgZm9yIFN1c2UgYW5kIGRpc2FibGVzIGluY2x1c2lvbiBvZgorCSAgICB0aGUgSVNDIGxlYXNlLWZpbGUgcmVhZGVyIGNvZGUuIFRoYW5rcyB0byBBbmR5IENhbWJlaXMgZm9yCisJICAgIGhpcyBvbmdvaW5nIHdvcmsgb24gU3VzZSBwYWNrYWdpbmcuCisKKwkgICAgU3VwcG9ydCBmb3J3YXJkaW5nIG9mIEVETlMuMCBUaGUgbWF4aW11bSBVRFAgcGFja2V0IHNpemUgCisJICAgIGRlZmF1bHRzIHRvIDEyODAsIGJ1dCBtYXkgYmUgY2hhbmdlZCB3aXRoIHRoZQorCSAgICAtLWVkbnMtcGFja2V0LW1heCBvcHRpb24uIERldGVjdCBxdWVyaWVzIHdpdGggdGhlIGRvIGJpdAorCSAgICBzZXQgYW5kIGFsd2F5cyBmb3J3YXJkIHRoZW0sIHNpbmNlIEROU1NFQyByZWNvcmRzIGFyZSAKKwkgICAgbm90IGNhY2hlZC4gVGhpcyBiZWhhdmlvdXIgaXMgcmVxdWlyZWQgdG8gbWFrZQorCSAgICBETlNTRUNiaXMgd29yayBwcm9wZXJseSB0aG91Z2ggZG5zbWFzcS4gVGhhbmtzIHRvIFNpbW9uCisJICAgIEpvc2Vmc3NvbiBmb3IgaGVscCB3aXRoIHRoaXMuCisKKwkgICAgTW92ZSBkZWZhdWx0IGNvbmZpZyBmaWxlIGxvY2F0aW9uIHVuZGVyIE9wZW5CU0QgZnJvbQorCSAgICAvdXNyL2xvY2FsL2V0Yy9kbnNtYXNxLmNvbmYgdG8gL2V0Yy9kbnNtYXNxLmNvbmYuIEJ1ZworCSAgICByZXBvcnQgZnJvbSBKb25hdGhhbiBXZWlzcy4KKworCSAgICBVc2UgYSBsZWFzZSB3aXRoIG1hdGNoaW5nIE1BQyBhZGRyZXNzIGZvciBhIGhvc3Qgd2hpY2gKKwkgICAgZG9lc24ndCBwcmVzZW50IGEgY2xpZW50LWlkLCBldmVuIGlmIHRoZXJlIHdhcyBhIGNsaWVudCBJRCAKKwkgICAgYXQgc29tZSBwb2ludCBpbiB0aGUgcGFzdC4gVGhpcyByZWR1Y2VzIHN1cnByaXNlcyB3aGVuCisJICAgIGNoYW5naW5nIERIQ1AgY2xpZW50cywgYWRkaW5nIGlkOiogdG8gYSBob3N0LCBhbmQgZnJvbSB0aGUKKwkgICAgc2VtYW50aWNzIGNoYW5nZSBvZiAvZXRjL2V0aGVycyBpbiAyLjkuIFRoYW5rcyB0byBCZXJuYXJkCisJICAgIFNhbW1lciBmb3IgZmluZGluZyB0aGF0LgorCisJICAgIEFkZGVkIGEgImNvbnRyaWIiIGRpcmVjdG9yeSBhbmQgaW4gaXQgdGhlIGRuc2xpc3QgdXRpbGl0eSwKKwkgICAgZnJvbSBUaG9tYXMgVHV0dGxlLgorCisJICAgIEZpeGVkICJmYWlsIHRvIHN0YXJ0IHVwIiBwcm9ibGVtcyB1bmRlciBMaW51eCB3aXRoIElQdjYKKwkgICAgZW5hYmxlZC4gSXQncyBub3QgY2xlYXIgdGhhdCB0aGVzZSB3ZXJlIGFuIGlzc3VlIGluCisJICAgIHJlbGVhc2VkIHZlcnNpb25zLCBidXQgdGhleSBtYW5pZmVzdGVkIHRoZW1zZWx2ZXMgd2hlbiBUQ1AKKwkgICAgc3VwcG9ydCB3YXMgYWRkZWQuIFRoYW5rcyB0byBNaWNoYWVsIEhhbWlsdG9uIGZvcgorCSAgICBhc3Npc3RhbmNlIHdpdGggdGhpcy4KKwordmVyc2lvbiAyLjExCisJICAgIEZpeGVkIERIQ1AgcHJvYmxlbSB3aGljaCBjb3VsZCByZXN1bHQgaW4gdHdvIGxlYXNlcyBpbiB0aGUKKyAgICAgICAgICAgIGRhdGFiYXNlIHdpdGggdGhlIHNhbWUgYWRkcmVzcy4gVGhpcyBsb29rZWQgbXVjaCBtb3JlCisgICAgICAgICAgICBhbGFybWluZyB0aGVuIGl0IHdhcywgc2luY2UgaXQgY291bGQgb25seSBoYXBwZW4gd2hlbiBhCisgICAgICAgICAgICBtYWNoaW5lIGNoYW5nZXMgTUFDIGFkZHJlc3MgYnV0IGtlcHQgdGhlIHNhbWUgbmFtZS4gVGhlCisgICAgICAgICAgICBvbGQgbGVhc2Ugd291bGQgcGVyc2lzdCB1bnRpbCBpdCB0aW1lZCBvdXQgYnV0IHRoaW5ncworICAgICAgICAgICAgd291bGQgc3RpbGwgd29yayBPSy4gCisKKwkgICAgQ2hlY2sgdGhhdCBJUCBhZGRyZXNzZXMgaW4gYWxsIGRoY3AtaG9zdCBkaXJlY3RpdmVzIGFyZQorCSAgICB1bmlxdWUgYW5kIGRpZSBob3JyaWJseSBpZiB0aGV5IGFyZSBub3QsIHNpbmNlIG90aGVyd2lzZQorCSAgICBlbmRsZXNzIHByb3RvY29sIGxvb3BzIGNhbiBvY2N1ci4gCisJICAgIAorCSAgICBVc2UgSVBWNl9SRUNWUEtUSU5GTyBhcyBzb2NrZXQgb3B0aW9uIHJhdGhlciB0aGFuCisJICAgIElQVjZfUEtUSU5GTyB3aGVyZSBhdmFpbGFibGUuIFRoaXMga2VlcHMgbGF0ZS1tb2RlbCBGcmVlQlNECisJICAgIGhhcHB5LgorCisJICAgIFNldCBzb3VyY2UgaW50ZXJmYWNlIHdoZW4gcmVwbHlpbmcgdG8gSVB2NiBVRFAKKwkgICAgcXVlcmllcy4gVGhpcyBpcyBuZWVkZWQgdG8gY29wZSB3aXRoIGxpbmstbG9jYWwgYWRkcmVzc2VzLgorCit2ZXJzaW9uIDIuMTIKKyAgICAgICAgICAgIEFkZGVkIGV4dHJhIGNoZWNrcyB0byBlbnN1cmUgdGhhdCBESENQIGNyZWF0ZWQgRE5TIGVudHJpZXMgCisJICAgIGNhbm5vdCBnZW5lcmF0ZSBtdWx0aXBsZSBETlMgYWRkcmVzcy0+bmFtZSBlbnRyaWVzLiBUaGFua3MgdG8gCisJICAgIFN0ZWZhbiBNb25uaWVyIGZvciBmaW5kaW5nIHRoZSBleGFjdCBzZXQgb2YgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgb3B0aW9ucyB3aGljaCBjb3VsZCBjcmVhdGUgdGhpcy4KKworCSAgICBEb24ndCBzZXQgdGhlIHRoZSBmaWx0ZXJ3aW4yayBvcHRpb24gaW4gdGhlIGV4YW1wbGUgY29uZmlnCisJICAgIGZpbGUgYW5kIGFkZCB3YXJuaW5ncyB0aGF0IGlzIGJyZWFrcyBLZXJiZXJvcy4gVGhhbmtzIHRvCisJICAgIFNpbW9uIEpvc2Vmc3NvbiBhbmQgVGltb3RoeSBGb2xrcyBmb3IgcG9pbnRpbmcgdGhhdCBvdXQuCisJICAgIAorCSAgICBMb2cgdHlwZXMgb2YgaW5jb21pbmcgcXVlcmllcyBhcyB3ZWxsIGFzIHNvdXJjZSBhbmQgZG9tYWluLgorCisJICAgIExvZyBOT0RBVEEgcmVwbGllcyBnZW5lcmF0ZWQgYXMgYSByZXN1bHQgb2YgdGhlCisJICAgIGZpbHRlcndpbjJrIG9wdGlvbi4KKwordmVyc2lvbiAyLjEzCisJICAgIEZpeGVkIGNyYXNoIHdpdGggdW4tbmFtZWQgREhDUCBob3N0cyBpbnRyb2R1Y2VkIGluIDIuMTIuCisJICAgIFRoYW5rcyB0byBOaWNvbG8gV29qZXdvZGEgYW5kIEdyZWdvcnkgR2F0aHkgZm9yIGJ1ZyByZXBvcnRzLgorCit2ZXJzaW9uIDIuMTQKKwkgICAgRml4IERIQ1AgbmV0d29yayBkZXRlY3Rpb24gZm9yIGhvc3RzIHdoaWNoIHRhbGsgdmlhIGEKKwkgICAgcmVsYXkuIFRoaXMgbWFrZXMgbGVhc2UgcmVuZXdhbCBmb3Igc3VjaCBob3N0cyB3b3JrCisJICAgIGNvcnJlY3RseS4KKworCSAgICBTdXBwb3J0IFJGQzMwMTEgc3VibmV0IHNlbGVjdG9ycyBpbiB0aGUgREhDUCBzZXJ2ZXIuCisKKwkgICAgRml4IERIQ1AgY29kZSB0byBnZW5lcmF0ZSBSRkMtY29tcGxpYW50IHJlc3BvbnNlcworICAgICAgICAgICAgdG8gaG9zdHMgaW4gdGhlIElOSVQtUkVCT09UIHN0YXRlLgorCisJICAgIEluIHRoZSBESENQIHNlcnZlciwgc2V0IHRoZSByZWNlaXZlIGJ1ZmZlciBzaXplIG9uIAorCSAgICB0aGUgdHJhbnNtaXQtb25seSBwYWNrZXQgc29ja2V0IHRvIHplcm8sIHRvIGF2b2lkIAorCSAgICB3YXN0ZSBvZiBrZXJuZWwgYnVmZmVycy4KKworCSAgICBGaXggREhDUCBhZGRyZXNzIGFsbG9jYXRpb24gY29kZSB0byB1c2UgdGhlIHdob2xlIG9mCisJICAgIHRoZSBESENQIHJhbmdlLCBpbmNsdWRpbmcgdGhlIHN0YXJ0IGFuZCBlbmQgYWRkcmVzc2VzLgorCSAgICAKKwkgICAgQXR0ZW1wdCBhbiBJQ01QICJwaW5nIiBvbiBuZXcgYWRkcmVzc2VzIGJlZm9yZSBhbGxvY2F0aW5nIAorCSAgICB0aGVtIHRvIGxlYXNlcywgdG8gYXZvaWQgYWxsb2NhdGluZyBhZGRyZXNzZXMgd2hpY2ggYXJlIGluIHVzZS4KKworCSAgICBIYW5kbGUgcmZjOTUxIEJPT1RQIGFzIHdlbGwgYXMgREhDUCBmb3IgaG9zdHMgd2hpY2ggaGF2ZQorCSAgICBNQUMgYWRkcmVzcyB0byBJUCBhZGRyZXNzIG1hcHBpbmcgZGVmaW5lZC4KKworCSAgICBGaXggY29tcGlsYXRpb24gdW5kZXIgTWFjT1MgWC4gVGhhbmtzIHRvIENocmlzIFRvbWxpbnNvbi4KKworCSAgICBGaXggY29tcGlsYXRpb24gdW5kZXIgTmV0QlNELiBUaGFua3MgdG8gRmVsaXggRGVpY2htYW5uLgorCisJICAgIEFkZGVkICJrZWVwLWluLWZvcmVncm91bmQiIG9wdGlvbi4gVGhhbmtzIHRvIFNlYW4KKwkgICAgTWFjTGVubmFuIGZvciB0aGUgcGF0Y2guCisKK3ZlcnNpb24gMi4xNQorICAgICAgICAgICAgRml4ZWQgTlhET01BSU4vTk9EQVRBIGNvbmZ1c2lvbiBmb3IgbG9jYWxseSBrbm93bgorICAgICAgICAgICAgbmFtZXMuIFdlIG5vdyByZXR1cm4gYSBOT0RBVEEgcmVzcG9uc2UgZm9yIG5hbWVzIHdoaWNoIGFyZQorICAgICAgICAgICAgbG9jYWxseSBrbm93bi4gTm93IGEgcXVlcnkgZm9yIChlZyBBQUFBIG9yIE1YKSBmb3IgYSBuYW1lCisJICAgIHdpdGggYW4gSVB2NCBhZGRyZXNzIGluIC9ldGMvaG9zdHMgd2hpY2ggZmFpbHMgdXBzdHJlYW0KKyAgICAgICAgICAgIHdpbGwgZ2VuZXJhdGUgYSBOT0RBVEEgcmVzcG9uc2UuIE5vdGUgdGhhdCB0aGUgcXVlcnkgCisJICAgIGlzIHN0aWxsIHRyaWVkIHVwc3RyZWFtLCBidXQgYSBOWERPTUFJTiByZXBseSBnZXRzCisgICAgICAgICAgICBjb252ZXJ0ZWQgdG8gTk9EQVRBLiBUaGFua3MgdG8gRXJpYyBkZSBUaG91YXJzLCBFcmljCisgICAgICAgICAgICBTcGFrbWFuIGFuZCBNaWtlIE1lc3RuaWsgZm9yIGJ1ZyByZXBvcnRzL3Rlc3RpbmcuCisKKwkgICAgQWxsb3cgbXVsdGlwbGUgZGhjcC1yYW5nZXMgd2l0aGluIHRoZSBzYW1lIG5ldHdvcmsuIFRoZQorCSAgICBvcmlnaW5hbCBpbnRlbnRpb24gd2FzIHRoYXQgdGhlcmUgd291bGQgYmUgYSBkaGNwLXJhbmdlCisJICAgIG9wdGlvbiBmb3IgZWFjaCBuZXR3b3JrIHNlcnZlZCwgYnV0IHRoZXJlJ3Mgbm8gcmVhbCByZWFzb24KKwkgICAgbm90IHRvIGFsbG93IGRpc2NvbnRpbnVvdXMgcmFuZ2VzIHdpdGhpbiBhIG5ldHdvcmsgc28gdGhpcworCSAgICByZWxlYXNlIGFkZHMgc3VwcG9ydCBmb3IgdGhhdC4KKworCSAgICBDaGVjayBmb3IgZGhjcC1yYW5nZXMgd2hpY2ggYXJlIGluY29uc2lzdGVudCB3aXRoIHRoZWlyIAorCSAgICBuZXRtYXNrLCBhbmQgZ2VuZXJhdGUgZXJyb3JzIG9yIHdhcm5pbmdzLgorCSAgICAKKwkgICAgSW1wcm92ZSBlcnJvciBtZXNzYWdlcyB3aGVuIHRoZXJlIGFyZSBwcm9ibGVtcyB3aXRoCisJICAgIGNvbmZpZ3VyYXRpb24uCisKK3ZlcnNpb24gMi4xNgorCSAgICBGaXhlZCB0eXBvIGluIE9wZW5CU0Qtb25seSBjb2RlIHdoaWNoIHN0b3BwZWQgY29tcGlsYXRpb24KKyAgICAgICAgICAgIHVuZGVyIHRoYXQgT1MuIENocmlzIFdlaW5oYXVwbCBnZXRzIGNyZWRpdCBmb3IgcmVwb3J0aW5nIAorICAgICAgICAgICAgdGhpcy4KKworCSAgICBBZGRlZCBkaGNwLWF1dGhvcml0YXRpdmUgb3B0aW9uIHdoaWNoIHJlc3RvcmVzIG5vbi1SRkMgCisJICAgIGNvbXBsaWFudCBidXQgZGVzaXJhYmxlIGJlaGF2aW91ciBvZiBwcmUtMi4xNCB2ZXJzaW9ucyBhbmQKKyAgICAgICAgICAgIGF2b2lkcyBsb25nIHRpbWVvdXRzIHdoaWxlIERIQ1AgY2xpZW50cyB0cnkgdG8gcmVuZXcgbGVhc2VzCisgICAgICAgICAgICB3aGljaCBhcmUgdW5rbm93biB0byBkbnNtYXNxLiBUaGFua3MgdG8gSm9obiBNYXN0d2lqayBmb3IgCisJICAgIGhlbHAgd2l0aCB0aGlzLgkgCisKKwkgICAgQWRkZWQgc3VwcG9ydCB0byB0aGUgREhDUCBvcHRpb24gY29kZSB0byBhbGxvdyBSRkMtMzM5NyAKKwkgICAgZG9tYWluIHNlYXJjaCBESENQIG9wdGlvbiAoMTE5KSB0byBiZSBzZW50LgorCisgICAgICAgICAgICBTZXQgTk9OQkxPQ0sgb24gYWxsIGxpc3RlbmluZyBzb2NrZXRzIHRvIHdvcmthcm91bmQgbm9uLVBPU0lYCisgICAgICAgICAgICBjb21wbGlhbmNlIGluIExpbnV4IDIuNCBhbmQgMi42LiBUaGlzIGZpeGVzIHJhcmUgaGFuZ3Mgd2hpY2gKKyAgICAgICAgICAgIG9jY3VycmVkIHdoZW4gY29ycnVwdGVkIHBhY2tldHMgd2VyZSByZWNlaXZlZC4gVGhhbmtzIHRvCisJICAgIEpvcmlzIHZhbiBSYW50d2lqayBmb3IgY2hhc2luZyB0aGF0IGRvd24uCisgCisJICAgIFVwZGF0ZWQgY29uZmlnLmggZm9yIE5ldEJTRC4gVGhhbmtzIHRvIE1hcnRpbiBMYW1iZXJzLgorCisgICAgICAgICAgICBEbyBhIGJldHRlciBqb2Igb2YgZGlzdGluZ3Vpc2hpbmcgYmV0d2VlbiByZXRyYW5zbWlzc2lvbnMKKwkgICAgYW5kIG5ldyBxdWVyaWVzIHdoZW4gZm9yd2FyZGluZy4gVGhpcyBmaXhlcyBhIGJ1ZworCSAgICB0cmlnZ2VyZWQgYnkgdGhlIHBvbGlwbyB3ZWIgY2FjaGUgd2hpY2ggc2VuZHMgQSBhbmQgQUFBQQorCSAgICBxdWVyaWVzIGJvdGggd2l0aCB0aGUgc2FtZSB0cmFuc2FjdGlvbi1JRC4gVGhhbmtzIHRvIAorCSAgICBKb2FjaGltIEJlcmRhbCBIYWdhIGFuZCBKdWxpdXN6IENocm9ib2N6ZWsgZm9yIGhlbHAgd2l0aCB0aGlzLgorCisJICAgIFJld3JvdGUgY2FjaGUgY29kZSB0byBzdG9yZSBDTkFNRVMsIHJhdGhlciB0aGVuIGNoYXNpbmcKKwkgICAgdGhlbSBiZWZvcmUgc3RvcmFnZS4gVGhpcyBlbGltaW5hdGVzIGJhZCBzaXR1YXRpb25zIHdoZW4KKwkgICAgY2xpZW50cyBnZXQgaW5jb25zaXN0ZW50IHZpZXdzIGRlcGVuZGluZyBvbiBpZiBkYXRhIGNvbWVzCisJICAgIGZyb20gdGhlIGNhY2hlLgorCisJICAgIEFsbG93IGZvciBtb3JlIHRoYW4gb25lIC0tYWRkbi1ob3N0cyBmbGFnLgorCisJICAgIENsYXJpZnkgbG9nZ2VkIG1lc3NhZ2Ugd2hlbiBhIERIQ1AgbGVhc2UgY2xhc2hlcyB3aXRoIGFuCisJICAgIC9ldGMvaG9zdHMgZW50cnkuIFRoYW5rcyB0byBNYXQgU3dpZnQgZm9yIHRoZSBzdWdnZXN0aW9uLgorCisJICAgIEFkZGVkIGR5bmFtaWMtZG5zbWFzcSBmcm9tIFBldGVyIFdpbGxpcyB0byB0aGUgY29udHJpYgorCSAgICBzZWN0aW9uLgorCit2ZXJzaW9uIDIuMTcKKwkgICAgQ29ycmVjdGx5IGRlZHVjZSB0aGUgc2l6ZSBvZiBudW1lcmljIGRoY3Atb3B0aW9ucywgcmF0aGVyCisJICAgIHRoYW4gbWFraW5nIHdpbGQgZ3Vlc3Nlcy4gQWxzbyBjb3BlIHdpdGggbmVnYXRpdmUgdmFsdWVzLgorCisJICAgIEZpeGVkIHVzZSBvZiBDIGxpYnJhcnkgcmVzZXJ2ZWQgc3ltYm9sICJpbmRleCIgd2hpY2ggYnJva2UKKwkgICAgdW5kZXIgY2VydGFpbiBjb21iaW5hdGlvbnMgb2YgbGlicmFyeSBhbmQgY29tcGlsZXIuCisKKwkgICAgTWFrZSBiaW5kLWludGVyZmFjZXMgd29yayBmb3IgSVB2NiBpbnRlcmZhY2VzIHRvby4KKworCSAgICBXYXJuIGlmIGFuIGludGVyZmFjZSBpcyBnaXZlbiBmb3IgbGlzdGVuaW5nIHdoaWNoIGRvZXNuJ3QKKwkgICAgY3VycmVudGx5IGV4aXN0IHdoZW4gbm90IGluIGJpbmQtaW50ZXJmYWNlcyBtb2RlLiAoVGhpcyBpcworCSAgICBhbHJlYWR5IGEgZmF0YWwgZXJyb3Igd2hlbiBiaW5kLWludGVyZmFjZXMgaXMgc2V0LikKKworCSAgICBBbGxvdyB0aGUgLS1pbnRlcmZhY2UgYW5kIC0tZXhjZXB0LWludGVyZmFjZSBvcHRpb25zIHRvCisJICAgIHRha2UgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBpbnRlcmZhY2VzLgorCisJICAgIFR3ZWFrIC0tZGhjcC11c2VyY2xhc3MgbWF0Y2hpbmcgY29kZSB0byB3b3JrIHdpdGggdGhlCisJICAgIElTQyBkaGNsaWVudCB3aGljaCB2aW9sYXRlcyBSRkMzMDA0IHVubGVzcyBpdHMKKwkgICAgY29uZmlndXJhdGlvbiBpcyB2ZXJ5IHdhcnBlZC4gVGhhbmtzIHRvIENlZHJpYyBEdXZhbCBmb3IKKwkgICAgdGhlIGJ1ZyByZXBvcnQuIAorCisJICAgIEFsbG93IG1vcmUgdGhhbiBvbmUgbmV0d29yay1pZCB0YWcgaW4gYSBkaGNwLW9wdGlvbi4gQWxsCisJICAgIHRoZSB0YWdzIG11c3QgbWF0Y2ggdG8gZW5hYmxlIHRoZSBvcHRpb24uCisKKwkgICAgQWRkZWQgZGhjcC1pZ25vcmUgb3B0aW9uIHRvIGRpc2FibGUgY2xhc3NlcyBvZiBob3N0cyBiYXNlZAorCSAgICBvbiBuZXR3b3JrLWlkIHRhZ3MuIEFsc28gYWxsb3cgQk9PVFAgb3B0aW9ucyB0byBiZQorCSAgICBjb250cm9sbGVkIGJ5IG5ldHdvcmsgdGFncy4KKworCSAgICBGaWxsIGluIHNuYW1lLCBmaWxlIGFuZCBzaWFkZHIgZmllbGRzIGluIHJlcGxpZXMgdG8KKwkgICAgREhDUElORk9STSBtZXNzYWdlcy4KKworCSAgICBEb24ndCBzZW5kIE5BSyByZXBsaWVzIHRvIERIQ1BSRVFVRVNUIHBhY2tldHMgZm9yIGRpc2FibGVkCisJICAgIGNsaWVudHMuIENyZWRpdCB0byBDZWRyaWMgRHV2YWwgZm9yIHNwb3R0aW5nIHRoaXMuCisKKwkgICAgRml4IHJhcmUgY3Jhc2ggYXNzb2NpYXRlZCB3aXRoIGxvbmcgRE5TIG5hbWVzIGFuZCBDTkFNRQorCSAgICByZWNvcmRzLiBUaGFua3MgdG8gSG9sZ2VyIEhvZmZzdGF0dGUgYW5kIGVzcGVjaWFsbHkgU3RldmUKKwkgICAgR3JlY25pIGZvciBoZWxwIGNoYXNpbmcgdGhhdCBvbmUgZG93bi4KKwordmVyc2lvbiAyLjE4CisgICAgICAgICAgICBSZXdvcmtlZCB0aGUgTGludXggaW50ZXJmYWNlIGRpc2NvdmVyeSBjb2RlIChhZ2FpbikgdG8KKwkgICAgY29wZSB3aXRoIGludGVyZmFjZXMgd2hpY2ggaGF2ZSBvbmx5IElQdjYgYWRkcmVzc2VzIGFuZCAKKwkgICAgaW50ZXJmYWNlcyB3aXRoIG1vcmUgdGhhbiBvbmUgSVB2NiBhZGRyZXNzLiBUaGFua3MgdG8KKyAgICAgICAgICAgIE1hcnRpbiBQZWxzIGZvciBoZWxwIHdpdGggdGhhdC4KKworCSAgICBGaXggcHJvYmxlbXMgd2hpY2ggb2NjdXJyZWQgd2hlbiBtb3JlIHRoYW4gb25lIGRoY3AtcmFuZ2UKKwkgICAgd2FzIHNwZWNpZmllZCBpbiB0aGUgc2FtZSBzdWJuZXQ6IHNvbWV0aW1lcyBwYXJhbWV0ZXJzCisJICAgIChsZWFzZSB0aW1lLCBuZXR3b3JrLWlkIHRhZykgZnJvbSB0aGUgd3Jvbmcgb25lIHdvdWxkIGJlCisJICAgIHVzZWQuIFRoYW5rcyB0byBSb3J5IENhbXBiZWxsLUxhbmdlIGZvciB0aGUgYnVnIHJlcG9ydC4KKworCSAgICBSZXNldCBjYWNoZSBzdGF0aXN0aWNzIHdoZW4gY2xlYXJpbmcgdGhlIGNhY2hlLgorCisJICAgIEVuYWJsZSBsb25nIGNvbW1hbmQgbGluZSBvcHRpb25zIG9uIEZyZWVCU0Qgd2hlbiB0aGUKKwkgICAgQyBsaWJyYXJ5IHN1cHBvcnRzIHRoZW0uCisKK3ZlcnNpb24gMi4xOSAKKyAgICAgICAgICAgIFR3ZWFrZWQgdGhlIExpbnV4LW9ubHkgaW50ZXJmYWNlIGRpc2NvdmVyeSBjb2RlIHRvIGNvcGUgCisJICAgIHdpdGggaW50ZXJmYWNlLWluZGV4ZXMgbGFyZ2VyIHRoYW4gOCBiaXRzIGluCisgICAgICAgICAgICAvcHJvYy9uZXQvaWZfaW5ldDYuIFRoaXMgb25seSBhZmZlY3RzIExpbnV4LCBvYnZpb3VzbHkuICAKKwkgICAgVGhhbmtzIHRvIFJpY2hhcmQgQXR0ZXJlciBmb3IgdGhlIGJ1ZyByZXBvcnQuCisKKwkgICAgQ2hlY2sgZm9yIHVuZGVyLWxlbmd0aCBvcHRpb24gZmllbGRzIGluIERIQ1AgcGFja2V0cywgYQorCSAgICB6ZXJvIGxlbmd0aCBjbGllbnQtaWQsIGluIHBhcnRpY3VsYXIsIGNvdWxkIHNlcmlvdXNseQorCSAgICBjb25mdXNlIGRuc21hc3EgJ3RpbGwgbm93LiBUaGFua3MgdG8gV2lsbCBNdXJuYW1lIGZvciBoZWxwCisJICAgIHdpdGggdGhhdC4KKworCSAgICBJZiBhIERIQ1AtYWxsb2NhdGVkIGFkZHJlc3MgaGFzIGFuIGFzc29jaWF0ZWQgbmFtZSBpbgorCSAgICAvZXRjL2hvc3RzLCBhbmQgdGhlIGNsaWVudCBkb2VzIG5vdCBwcm92aWRlIGEgaG9zdG5hbWUKKwkgICAgcGFyYW1ldGVyIGFuZCB0aGVyZSBpcyBubyBob3N0bmFtZSBpbiBhIG1hdGNoaW5nIGRoY3AtaG9zdAorCSAgICBvcHRpb24sIHNlbmQgdGhlIC9ldGMvaG9zdHMgbmFtZSBhcyB0aGUgaG9zdG5hbWUgaW4gCisJICAgIHRoZSBESENQIGxlYXNlLiBUaGFua3MgdG8gV2lsbCBNdXJuYW1lIGZvciB0aGUgc3VnZ2VzdGlvbi4KKwordmVyc2lvbiAyLjIwCisJICAgIEFsbG93IG1vcmUgdGhhbiBvbmUgaW5zdGFuY2Ugb2YgZG5zbWFzcSB0byBydW4gb24gYQorCSAgICBtYWNoaW5lLCBlYWNoIHByb3ZpZGluZyBESENQIHNlcnZpY2Ugb24gYSBkaWZmZXJlbnQKKwkgICAgaW50ZXJmYWNlLCBwcm92aWRlZCB0aGF0IC0tYmluZC1pbnRlcmZhY2VzIGlzIHNldC4gVGhpcworCSAgICBjb25maWd1cmF0aW9uIHVzZWQgdG8gd29yaywgYnV0IHJlZ3Jlc3NlZCBpbiB2ZXJzaW9uIDIuMTQKKworCSAgICBGaXggY29tcGlsYXRpb24gb24gTWFjIE9TIFguIFRoYW5rcyB0byBLZXZpbiBCdWxsb2NrLgorCQorCSAgICBQcm90ZWN0IGFnYWluc3Qgb3ZlcmxvbmcgbmFtZXMgYW5kIG92ZXJsb25nCisJICAgIGxhYmVscyBpbiBjb25maWd1cmF0aW9uIGFuZCBmcm9tIERIQ1AuCisKKwkgICAgRml4IGludGVyZXN0aW5nIGNvcm5lciBjYXNlIGluIENOQU1FIGhhbmRsaW5nLiBUaGlzIG9jY3VycworCSAgICB3aGVuIGEgQ05BTUUgaGFzIGEgdGFyZ2V0IHdoaWNoICJzaGFkb3dlZCIgYnkgYSBuYW1lIGluCisJICAgIC9ldGMvaG9zdHMgb3IgZnJvbSBESENQLiBSZXNvbHZpbmcgdGhlIENOQU1FIHdvdWxkIHNuZWFrCisJICAgIHRoZSB1cHN0cmVhbSB2YWx1ZSBvZiB0aGUgQ05BTUUncyB0YXJnZXQgaW50byB0aGUgY2FjaGUsCisJICAgIGFsb25nc2lkZSB0aGUgbG9jYWwgdmFsdWUuIE5vdyB0aGF0IGRvZXNuJ3QgaGFwcGVuLCB0aG91Z2gKKwkgICAgcmVzb2x2aW5nIHRoZSBDTkFNRSBzdGlsbCBnaXZlcyB0aGUgdW5zaGFkb3dlZCB2YWx1ZS4gVGhpcworCSAgICBpcyBhcmd1YWJseSB3cm9uZyBidXQgcmF0aGVyIGRpZmZpY3VsdCB0byBmaXguIFRoZSBtYWluCisJICAgIHRoaW5nIGlzIHRvIGF2b2lkIGdldHRpbmcgc3RyYW5nZSByZXN1bHRzIGZvciB0aGUgdGFyZ2V0CisJICAgIGR1ZSB0byB0aGUgY2FjaGUgcG9sbHV0aW9uIHdoZW4gcmVzb2x2aW5nIHRoZQorCSAgICBDTkFNRS4gVGhhbmtzIHRvIFBpZXJyZSBIYWJvdXppdCBmb3IgZXhwbG9yaW5nIHRoZSBjb3JuZXIKKwkgICAgYW5kIHN1Ym1pdHRpbmcgYSB2ZXJ5IGNsZWFyIGJ1ZyByZXBvcnQuCisKKwkgICAgRml4IHN1YnRsZSBidWcgaW4gdGhlIEROUyBwYWNrZXQgcGFyc2luZyBjb2RlLiBJdCdzIGFsbW9zdAorCSAgICBpbXBvc3NpYmxlIHRvIGRlc2NyaWJlIHRoaXMgc3VjY2luY3RseSwgYnV0IHRoZSBvbmUga25vd24KKwkgICAgbWFuaWZlc3RhdGlvbiBpcyB0aGUgaW5hYmlsaXR5IHRvIGNhY2hlIHRoZSBBIHJlY29yZCBmb3IKKwkgICAgd3d3LmFwcGxlLmNvbS4gVGhhbmtzIHRvIEJvYiBBbGV4YW5kZXIgZm9yIHNwb3R0aW5nIHRoYXQuCisKKwkgICAgU3VwcG9ydCBTUlYgcmVjb3Jkcy4gVGhhbmtzIHRvIFJvYmVydCBLZWFuIGZvciB0aGUgcGF0Y2hlcworCSAgICBmb3IgdGhpcy4KKworCSAgICBGaXhlZCBzaWduIGNvbmZ1c2lvbiBpbiB0aGUgdmVuZG9yLWlkIG1hdGNoaW5nIGNvZGUgd2hpY2gKKwkgICAgY291bGQgY2F1c2UgY3Jhc2hlcyBzb21ldGltZXMuIChDcmVkaXQgdG8gTWFyayBXaWF0ZXIgZm9yCisJICAgIGhlbHAgZmluZGluZyB0aGlzLikKKworCSAgICBBZGRlZCB0aGUgYWJpbGl0eSB0byBtYXRjaCB0aGUgbmV0aWQgdGFnIGluIGEKKwkgICAgZGhjcC1yYW5nZS4gQ29tYmluZWQgd2l0aCB0aGUgYWJpbGl0eSB0byBoYXZlIG11bHRpcGxlCisJICAgIHJhbmdlcyBpbiBhIHNpbmdsZSBzdWJuZXQsIHRoaXMgcHJvdmlkZXMgYSBtZWFucyB0bworCSAgICBzZWdyZWdhdGUgaG9zdHMgb24gZGlmZmVyZW50IGFkZHJlc3MgcmFuZ2VzIGJhc2VkIG9uCisJICAgIHZlbmRvcmNsYXNzIG9yIHVzZXJjbGFzcy4gVGhhbmtzIHRvIE1hcmsgV2lhdGVyIGZvcgorCSAgICBwcm9tcHRpbmcgdGhpcyBlbmhhbmNlbWVudC4gICAgCisKKwkgICAgQWRkZWQgcHJlZmVyZW5jZSB2YWx1ZXMgZm9yIE1YIHJlY29yZHMuCisKKwkgICAgQWRkZWQgdGhlIC0tbG9jYWxpc2UtcXVlcmllcyBvcHRpb24uCisKK3ZlcnNpb24gMi4yMQorICAgICAgICAgICAgSW1wcm92ZSBoYW5kbGluZyBvZiBTRVJWRkFJTCBhbmQgUkVGVVNFRCBlcnJvcnMuIFJlY2VpdmluZworCSAgICB0aGVzZSBub3cgaW5pdGlhdGVzIHNlYXJjaCBmb3IgYSBuZXcgZ29vZCBzZXJ2ZXIsIGFuZCBhIAorCSAgICBzZXJ2ZXIgd2hpY2ggcmV0dXJucyB0aGVtIGlzIG5vdCBhIGNhbmRpZGF0ZSBhcyBhIGdvb2QKKyAgICAgICAgICAgIHNlcnZlci4gVGhhbmtzIHRvIElzdHZhbiBWYXJhZGkgZm9yIHBvaW50aW5nIG91dCB0aGUKKyAgICAgICAgICAgIHByb2JsZW0uCisKKwkgICAgVHdlYWsgdGhlIHRpbWUgY29kZSBpbiBCUk9LRU5fUlRDIG1vZGUuCisKKwkgICAgU2FuaXR5IGNoZWNrIGxlYXNlIHRpbWVzIGluIGRoY3AtcmFuZ2UgYW5kIGRoY3AtaG9zdAorCSAgICBjb25maWd1cmF0aW9ucyBhbmQgZm9yY2UgdGhlbSB0byBiZSBhdCBsZWFzdCB0d28gbWludXRlcworCSAgICAoMTIwcykgbGVhc2VzIHNob3J0ZXIgdGhhbiBhIG1pbnV0ZSBjb25mdXNlIHNvbWUgY2xpZW50cywKKwkgICAgbm90YWJseSBBcHBsZSBNYWNPUyBYLiBSb3J5IENhbXBiZWxsLUxhbmdlIGZvdW5kIHRoaXMKKwkgICAgcHJvYmxlbS4KKworCSAgICBPbmx5IHdhcm4gb25jZSBhYm91dCBhbiB1cHN0cmVhbSBzZXJ2ZXIgd2hpY2ggaXMgcmVmdXNpbmcgdG8gZG8KKwkgICAgcmVjdXJzaXZlIHF1ZXJpZXMuCisKKwkgICAgRml4IERIQ1AgYWRkcmVzcyBhbGxvY2F0aW9uIHByb2JsZW0gd2hlbiBuZXRpZCB0YWdzIGFyZSBpbgorCSAgICB1c2UuIFRoYW5rcyB0byBXaWxsIE11cm5hbWUgZm9yIHRoZSBidWcgcmVwb3J0IGFuZAorCSAgICBzdWJzZXF1ZW50IHRlc3RpbmcuCisKKwkgICAgQWRkIGFuIGFkZGl0aW9uYWwgZGF0YSBzZWN0aW9uIHRvIHRoZSByZXBseSBmb3IgTVggYW5kIFNSVgorCSAgICBxdWVyaWVzLiBBZGQgc3VwcG9ydCBmb3IgRE5TIFRYVCByZWNvcmRzLiBUaGFua3MgdG8gUm9iZXJ0IAorCSAgICBLZWFuIGFuZCBKb2huIEhhbXB0b24gZm9yIHByb21wdHMgYW5kIHRlc3Rpbmcgb2YgdGhlc2UuCisKKwkgICAgQXBwbHkgYWRkcmVzcyByZXdyaXRpbmcgdG8gcmVjb3JkcyBpbiB0aGUgYWRkaXRpb25hbCBkYXRhIHNlY3Rpb24KKwkgICAgb2YgRE5TIHBhY2tldHMuIFRoaXMgbWFrZXMgdGhpbmdzIGxpa2UgTVggcmVjb3JkcyB3b3JrCisJICAgIHdpdGggdGhlIGFsaWFzIGZ1bmN0aW9uLiBUaGFua3MgdG8gQ2hhZCBTa2VldGVycyBmb3IKKwkgICAgcG9pbnRpbmcgb3V0IHRoZSBuZWVkIGZvciB0aGlzLgorCisJICAgIEFkZGVkIHN1cHBvcnQgZm9yIHF1b3RlZCBzdHJpbmdzIGluIGNvbmZpZyBmaWxlLgorCisJICAgIERldGVjdCBhbmQgZGVmZWF0IGNhY2hlLXBvaXNvbmluZyBhdHRhY2tzIHdoaWNoIGF0dGVtcHQgdG8KKwkgICAgc2VuZCAobWFsaWNpb3VzKSBhbnN3ZXJzIHRvIHF1ZXN0aW9ucyB3ZSBkaWRuJ3QKKwkgICAgc2VuZC4gVGhlc2UgYXJlIGlnbm9yZWQgbm93IGV2ZW4gaWYgdGhlIGF0dGFja2VyIG1hbmFnZXMKKwkgICAgdG8gZ3Vlc3MgYSByYW5kb20gcXVlcnktaWQuCisKKwkgICAgUHJvdmlkZSBESENQIHN1cHBvcnQgZm9yIGludGVyZmFjZXMgd2l0aCBtdWx0aXBsZSBJUAorCSAgICBhZGRyZXNzZXMgb3IgYWxpYXNlcy4gVGhpcyBpbiBvbmx5IGVuYWJsZWQgdW5kZXIgTGludXguCisJICAgIFNlZSB0aGUgRkFRIGVudHJ5IGZvciBkZXRhaWxzLgorCisJICAgIFJldmlzaXQgdGhlIE1BQy1hZGRyZXNzIGFuZCBjbGllbnQtaWQgbWF0Y2hpbmcgY29kZSB0bworCSAgICBwcm92aWRlIHNhbmVyIGJlaGF2aW91ciB3aXRoIFBYRSBib290cywgd2hlcmUgc29tZQorCSAgICByZXF1ZXN0cyBoYXZlIGEgY2xpZW50LWlkIGFuZCBzb21lIGRvbid0LgorCisJICAgIEZpeGVkIG9mZi1ieS1vbmUgYnVmZmVyIG92ZXJmbG93IGluIGxlYXNlIGZpbGUgcmVhZGluZworCSAgICBjb2RlLiBUaGFua3MgdG8gUm9iIEhvbGxhbmQgZm9yIHRoZSBidWcgcmVwb3J0LgorCisJICAgIEFkZGVkIHdpbGRjYXJkIG1hdGNoaW5nIGZvciBNQUMgYWRkcmVzc2VzIGluIGRoY3AtaG9zdAorCSAgICBvcHRpb25zLiBBIHNlbnNpYmxlIHN1Z2dlc3Rpb24gYnkgTmF0aGFuaWVsIE1jQ2FsbHVtLgorCit2ZXJzaW9uIDIuMjIKKyAgICAgICAgICAgIEZpeGVkIGJ1aWxkIHByb2JsZW1zIG9uIChtYW55KSBzeXN0ZW1zIHdpdGggb2xkZXIgbGliYworICAgICAgICAgICAgaGVhZGVycyB3aGVyZSA8bGludXgvdHlwZXMuaD4gaXMgcmVxdWlyZWQgYmVmb3JlCisgICAgICAgICAgICA8bGludXgvbmV0bGluay5oPi4gRW5hYmxlZCBIQVZFX1JUTkVUTElOSyB1bmRlciB1Y2xpYmMgbm93CisgICAgICAgICAgICB0aGF0IHRoaXMgZml4IGlzIGluIHBsYWNlLgorCisJICAgIEFkZGVkIHN1cHBvcnQgZm9yIGVuY2Fwc3VsYXRlZCB2ZW5kb3ItY2xhc3Mtc3BlY2lmaWMgREhDUAorCSAgICBvcHRpb25zLiBUaGFua3MgdG8gRXJpYyBTaGF0dG93IGZvciBoZWxwIHdpdGggdGhpcy4KKworCSAgICBGaXggcmVncmVzc2lvbiBpbiAyLjIxIHdoaWNoIGJyb2tlIGNvbW1hcyBpbiBmaWxlbmFtZXMgYW5kCisJICAgIGNvcnJ1cHRlZCBhcmd2LiBUaGFua3MgdG8gRXJpYyBTY290dCBmb3IgdGhlIGJ1Z3JlcG9ydC4KKworCSAgICBGaXhlZCBzdHVwaWQgdGhpbmtvIHdoaWNoIGNhdXNlZCBkbnNtYXNxIHRvIHdlZGdlIGR1cmluZworCSAgICBzdGFydHVwIHdpdGggY2VydGFpbiBNWC1yZWNvcmQgb3B0aW9ucy4gQW5vdGhlciAyLjIxIHJlZ3Jlc3Npb24uCisKKwkgICAgRml4ZWQgYnJva2VuLW5lc3Mgd2hlbiByZWFkaW5nIC9ldGMvZXRoZXJzLiAyLjIxIGJyb2tlCisJICAgIHRoaXMgdG9vLgorCisJICAgIEZpeGVkIHdlZGdlIHdpdGggY2VydGFpbiBESENQIG9wdGlvbnMuIFlldCBhbm90aGVyIDIuMjEKKwkgICAgcmVncmVzc2lvbi4gUm9iIEhvbGxhbmQgYW5kIFJveSBNYXJwbGVzIGNoYXNlZCB0aGlzIG9uZQorCSAgICBkb3duLgorCit2ZXJzaW9uIDIuMjMKKwkgICAgQWRkZWQgYSBjaGVjayB0byBlbnN1cmUgdGhhdCB0aGVyZSBjYW5ub3QgYmUgbW9yZSB0aGFuIG9uZQorCSAgICBkaGNwLWhvc3Qgb3B0aW9uIGZvciBhbnkgb25lIElQIGFkZHJlc3MsIGV2ZW4gaWYgdGhlCisJICAgIGFkZHJlc3NlcyBhcmUgYXNzaWduZWQgaW5kaXJlY3RseSB2aWEgYSBob3N0bmFtZSBhbmQKKwkgICAgL2V0Yy9ob3N0cy4KKworCSAgICBJbmNsdWRlIGEgInNlcnZlciBpZGVudGlmaWVyIiBpbiBESENQTkFLIHJlcGxpZXMsIGFzCisJICAgIHJlcXVpcmVkIGJ5IFJGQzIxMzEuCisKKwkgICAgQWRkZWQgbWV0aG9kICBzdXBwb3J0IGZvciBEQnVzCisJICAgIChodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9Tb2Z0d2FyZS9kYnVzKQorCSAgICBUaGlzIGlzIGEgc3VwZXJpb3Igd2F5IHRvIHJlLWNvbmZpZ3VyZSBkbnNtYXNxIG9uLXRoZS1mbHkKKwkgICAgd2l0aCBkaWZmZXJlbnQgdXBzdHJlYW0gbmFtZXNlcnZlcnMsIGFzIHRoZSBob3N0IG1vdmVzCisJICAgIGJldHdlZW4gbmV0d29ya3MuIERCdXMgc3VwcG9ydCBtdXN0IGJlIGVuYWJsZWQgaW4KKwkgICAgc3JjL2NvbmZpZy5oIGFuZCBzaG91bGQgYmUgY29uc2lkZXJlZCBleHBlcmltZW50YWwgYXQgdGhpcworCSAgICBwb2ludC4gU2VlIERCdXMtaW50ZXJmYWNlIGZvciB0aGUgc3BlY2lmaWNhdGlvbiBvZiB0aGUKKwkgICAgREJ1cyBtZXRob2QgY2FsbHMgc3VwcG9ydGVkLgorCisJICAgIEFkZGVkIGluZm9ybWF0aW9uIHRvIHRoZSBGQVEgYWJvdXQgc2V0dGluZyB0aGUgRE5TIGRvbWFpbgorCSAgICBpbiB3aW5kb3dzIFhQIGFuZCBNYWMgT1MgWCwgdGhhbmtzIHRvIFJpY2sgSHVsbC4KKworCSAgICBBZGRlZCBzYW5pdHkgY2hlY2sgdG8gcmVzb2x2LmNvbmYgcG9sbGluZyBjb2RlIHRvIGNvcGUKKwkgICAgd2l0aCBiYWNrd2FyZHMtbW92aW5nIGNsb2Nrcy4gVGhhbmtzIHRvIExlb25hcmRvIENhbmR1Y2NpCisJICAgIGZvcgloZWxwIHdpdGggdGhpcy4KKworCSAgICBIYW5kbGUgc28tY2FsbGVkICJBLWZvci1BIiBxdWVyaWVzLCB3aGljaCBhcmUgcXVlcmllcyBmb3IKKwkgICAgdGhlIGFkZHJlc3MgYXNzb2NpYXRlZCB3aXRoIGEgbmFtZSB3aGljaCBpcyBhbHJlYWR5IGEKKwkgICAgZG90dGVkLXF1YWQgYWRkcmVzcy4gVGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhlCisJICAgIHJlc29sdmVyIGNvZGUsIGJ1dCBzb21ldGltZXMgYXJlbid0IGFuZCB0aGVyZSdzIG5vIHBvaW50CisJICAgIGluIGZvcndhcmRpbmcgdGhlbS4KKworCSAgICBBZGRlZCAibm8tZGhjcC1pbnRlcmZhY2UiIG9wdGlvbiB0byBkaXNhYmxlIERIQ1Agc2VydmljZQorICAgICAgICAgICAgb24gYW4gaW50ZXJmYWNlLCB3aGlsc3Qgc3RpbGwgcHJvdmlkaW5nIEROUy4KKworCSAgICBGaXggZm9ybWF0LXN0cmluZyBwcm9ibGVtIC0gY29uZmlnIGZpbGUgbmFtZXMgZ2V0IHBhc3NlZAorCSAgICB0byBmcHJpbnRmIGFzIGEgZm9ybWF0IHN0cmluZywgc28gJSBjaGFyYWN0ZXJzIGNvdWxkIGNhdXNlCisJICAgIGNyYXNoZXMuIFRoYW5rcyB0byBSb2IgSG9sbGFuZCBmb3Igc2xldXRoaW5nIHRoYXQgb25lLgorCisJICAgIEZpeGVkIG11bHRpcGxlIGNvbXBpbGVyIHdhcm5pbmdzIGZyb20gZ2NjIDQuIFRoYW5rcyB0byAKKwkgICAgVGltIEN1dHRzIGZvciB0aGUgcmVwb3J0LgorCisJICAgIFNlbmQgdGhlIGhvc3RuYW1lIG9wdGlvbiBvbiBESENQIG9mZmVyIG1lc3NhZ2VzIGFzIHdlbGwgYXMKKwkgICAgREhDUCBhY2sgbWVzc2FnZXMuIFRoaXMgaXMgcmVxdWlyZWQgYnkgdGhlIFJpbyBEaWdpdGFsIAorCSAgICBBdWRpbyBSZWNlaXZlci4gVGhhbmtzIHRvIFJvbiBGcmVkZXJpY2sgZm9yIHRoZSBwYXRjaC4KKyAKKyAgICAgICAgICAgIEFkZCAnZCcgKGZvciBkYXkpIGFzIGEgcG9zc2libGUgdGltZSBtdWx0aXBsaWVyIGluIGxlYXNlIAorCSAgICB0aW1lIHNwZWNpZmljYXRpb25zLiBUaGFua3MgdG8gTWljaGFlbCBEZWVnYW4uCisKKwkgICAgTWFrZSBxdW90aW5nIHN1cHByZXNzIHJlY29nbml0aW9uIG9mIElQIGFkZHJlc3Nlcywgc28KKwkgICAgZGhjcC1vcHRpb249NjYsMS4yLjMuNCBub3cgbWVhbnMgc29tZXRoaW5nIGRpZmZlcmVudCB0bworICAgICAgICAgICAgZGhjcC1vcHRpb249NjYsIjEuMi4zLjQiLCB3aGljaCBzZXRzIHRoZSBvcHRpb24gdG8gYQorCSAgICBzdHJpbmcgdmFsdWUuIFRoYW5rcyB0byBCcmlhbiBNYWNhdWxleSBmb3IgdGhlIGJ1ZyByZXBvcnQuCisKKwkgICAgRml4ZWQgdGhlIG9wdGlvbiBwYXJzaW5nIGNvZGUgdG8gYXZvaWQgc2VnZmF1bHRzIGZyb20gc29tZQorCSAgICBpbnZhbGlkIGNvbmZpZ3VyYXRpb25zLiBUaGFua3MgdG8gV29va2V5IGZvciBzcG90dGluZyB0aGF0IG9uZS4KKyAKKyAgICAgICAgICAgIFByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgd2hpY2ggY29tcGlsZS10aW1lIG9wdGlvbnMgd2VyZSAKKwkgICAgc2VsZWN0ZWQsIGJvdGggaW4gdGhlIGxvZyBhdCBzdGFydHVwIGFuZCBhcyBwYXJ0IG9mIHRoZSBvdXRwdXQgCisgICAgICAgICAgICBmcm9tIGRuc21hc3EgLS12ZXJzaW9uLiBUaGFua3MgdG8gRGlyayBTY2hlbmtld2l0eiBmb3IgCisgICAgICAgICAgICB0aGUgc3VnZ2VzdGlvbi4gCisKKwkgICAgRml4IHBhdGhvbG9naWNhbCBiZWhhdmlvdXIgd2hlbiBhIGJyb2tlbiBjbGllbnQga2VlcHMgc2VuZGluZworICAgICAgICAgICAgREhDUERJU0NPVkVSIG1lc3NhZ2VzIHJlcGVhdGVkbHkgYW5kIGZhc3QuIEJlY2F1c2UgZGVhbGluZyB3aXRoCisgICAgICAgICAgICBlYWNoIG9mIHRoZXNlIHRha2VzIGEgZmV3IHNlY29uZHMsIChiZWNhdXNlIG9mIHRoZSBwaW5nKSB0aGVuIGEgCisJICAgIHF1ZXVlIG9mIERIQ1AgcGFja2V0cyBjb3VsZCBidWlsZCB1cC4gTm93LCB0aGUgcmVzdWx0cyBvZiBhIHBpbmcgCisgICAgICAgICAgICB0ZXN0IGFyZSBhc3N1bWVkIHRvIGJlIHZhbGlkIGZvciAzMCBzZWNvbmRzLCBzbyByZXBlYXRlZCB3YWl0cyBhcmUKKyAgICAgICAgICAgIG5vdCByZXF1aXJlZC4gVGhhbmtzIHRvIEx1Y2EgTGFuZGkgZm9yIGZpbmRpbmcgdGhpcy4KKworCSAgICBBbGxvdyBESENQSU5GT1JNIHJlcXVlc3RzIHdpdGhvdXQgaGFyZHdhcmUgYWRkcmVzcworCSAgICBpbmZvcm1hdGlvbi4gVGhlc2UgYXJlIGdlbmVyYXRlZCBieSBzb21lIGJyb3dzZXJzLCBsb29raW5nCisJICAgIGZvciBwcm94eSBpbmZvcm1hdGlvbi4gVGhhbmtzIHRvIFN0YW5sZXkgSmFkZG9lIGZvciB0aGUKKwkgICAgYnVnIHJlcG9ydCBvbiB0aGF0LgorCisJICAgIEFkZCBzdXBwb3J0IG9mIHRoZSAiY2xpZW50IEZRRE4iIERIQ1Agb3B0aW9uLiBJZiBwcmVzZW50LAorCSAgICB0aGlzIGlzIHVzZWQgdG8gYWxsb3cgdGhlIGNsaWVudCB0byB0ZWxsIGRuc21hc3EgaXRzIG5hbWUsCisJICAgIGluIHByZWZlcmVuY2UgdG8gKG1pcyl1c2luZyB0aGUgaG9zdG5hbWUgb3B0aW9uLiBTZWUgCisgICAgICAgICAgICAgIGh0dHA6Ly90b29scy5pZXRmLm9yZy93Zy9kaGMvZHJhZnQtaWV0Zi1kaGMtZnFkbi1vcHRpb24vXAorICAgICAgICAgICAgICAgIGRyYWZ0LWlldGYtZGhjLWZxZG4tb3B0aW9uLTEwLnR4dAorICAgICAgICAgICAgZm9yIGRldGFpbHMgb2YgdGhlIGRyYWZ0IHNwZWMuCisKKwkgICAgQWRkZWQgc3RhcnR1cCBzY3JpcHRzIGZvciBNYWNPUyBYIFRpZ2VyL1BhbnRoZXIgdG8gdGhlIAorICAgICAgICAgICAgY29udHJpYiBjb2xsZWN0aW9uLiBUaGFua3MgdG8gVGltIEN1dHRzLgorCisJICAgIFR3ZWFrIERIQ1AgbmV0d29yayBzZWxlY3Rpb24gc28gdGhhdCBjbGllbnRzIHdoaWNoIHR1cm4gdXAKKwkgICAgb24gb3VyIG5ldHdvcmsgaW4gUkVCSU5ESU5HIHN0YXRlIGFuZCB3aXRoIGEgbGVhc2UgZm9yIGEKKwkgICAgZm9yZWlnbiBuZXR3b3JrIHdpbGwgZ2V0IGEgTkFLIHJlc3BvbnNlLiBUaGFua3MgdG8gRGFuCisJICAgIFNoZWNodGVyIGZvciB3b3JrIG9uIHRoaXMgYW5kIGFuIGluaXRpYWwgcGF0Y2ggYW5kIHRoYW5rcworCSAgICB0byBHeW9yZ3kgRmFya2FzIGZvciBmdXJ0aGVyIHRlc3RpbmcuCisKKwkgICAgRml4IEROUyBxdWVyeSBmb3J3YXJkaW5nIGZvciBlbXB0eSBxdWVyaWVzIGFuZCBmb3J3YXJkCisJICAgIHF1ZXJpZXMgZXZlbiB3aGVuIHRoZSByZWN1cnNpb24tZGVzaXJlZCBiaXQgaXMgY2xlYXIuIFRoaXMKKwkgICAgYWxsb3dzICJkaWcgK3RyYWNlIiB0byB3b3JrLiBQcm9ibGVtIHJlcG9ydCBmcm9tIFV3ZQorCSAgICBHYW5zZXJ0LgorCisJICAgIEFkZGVkICJjb25zdCIgZGVjbGFyYXRpb25zIHdoZXJlIGFwcHJvcHJpYXRlLCB0aGFua3MgdG8KKwkgICAgQW5kcmVhcyBNb2hyIGZvciB0aGUgcGF0Y2guCisKKwkgICAgQWRkZWQgLS1ib290cC1keW5hbWljIG9wdGlvbiBhbmQgYXNzb2NpYXRlZAorCSAgICBmdW5jdGlvbmFsaXR5LiBUaGFua3MgdG8gSm9zZWYgV29sZiBmb3IgdGhlIHN1Z2dlc3Rpb24uCisgCit2ZXJzaW9uIDIuMjQKKyAgICAgICAgICAgIFVwZGF0ZWQgY29udHJpYi9vcGVudnBuL2Ruc21hc3EucGF0Y2ggZnJvbSBKb3NlcGggVGF0ZS4KKworCSAgICBUd2Vha2VkIERIQ1AgTkFLIGNvZGUsIGEgREhDUCBOQUsgaXMgbm93IHVuaWNhc3QgYXMgYQorCSAgICBmYWxsYmFjayBpbiBjYXNlcyB3aGVyZSBhIGJyb2FkY2FzdCBpcyBmdXRpbGU6IG5hbWVseSBpbgorCSAgICByZXNwb25zZSB0byBhIHVuaWNhc3QgUkVRVUVTVCBmcm9tIGEgbm9uLWxvY2FsIG5ldHdvcmsKKwkgICAgd2hpY2ggd2FzIG5vdCBzZW50IHZpYSBhIHJlbGF5LgorCisJICAgIFNsaWdodGx5IGNoYW5nZWQgdGhlIHNlbWFudGljcyBvZiBkb21haW4gbWF0Y2hpbmcgaW4KKwkgICAgLS1zZXJ2ZXIgYW5kIC0tYWRkcmVzcyBjb25maWdzLiAtLXNlcnZlcj0vZG9tYWluLmNvbS8gc3RpbGwKKwkgICAgbWF0Y2hlcyBkb21haW4uY29tIGFuZCBzdWIuZG9tYWluLmNvbSBidXQgZG9lcyBub3QgCisJICAgIG5vdyBtYXRjaCBuZXdkb21haW4uY29tIFRoZSBzZW1hbnRpY3Mgb2YgCisgICAgICAgICAgICAtLXNlcnZlcj0vLmRvbWFpbi5jb20vIGFyZSB1bmNoYW5nZWQuIAorCSAgICBUaGFua3MgdG8gQ2hyaXMgQmxhaXNlIGZvciB0aGUgcGF0Y2guCisKKwkgICAgQWRkZWQgYmFja3dhcmRzLWNvbXBhdGlibGUgaW50ZXJuYXRpb25hbGlzYXRpb24gc3VwcG9ydC4KKwkgICAgVGhlIGV4aXN0aW5nIG1ha2UgdGFyZ2V0cywgKGFsbCwgZG5zbWFzcSwgaW5zdGFsbCkgd29yayBhcworCSAgICBiZWZvcmUuIE5ldyBvbmVzIChhbGwtaTE4biwgYW5kIGluc3RhbGwtaTE4bikgYWRkIGdldHRleHQuCisJICAgIFRoZSB0cmFuc2xhdGlvbnMgbGl2ZSBpbiBwby8gVGhlcmUgYXJlIG5vdCB0b28gbWFueQorCSAgICBzdHJpbmdzLCBzbyBpZiBhbnlib2R5IGNhbiBwcm92aWRlIHRyYW5zbGF0aW9ucyAoYW5kIGZvcgorCSAgICB0aGUgbWFucGFnZS4uLi4pIHBsZWFzZSBzZW5kIHRoZW0gaW4uCisKKwkgICAgVHdlYWsgYmVoYXZpb3VyIG9uIHJlY2VpcHQgb2YgUkVGVVNFRCBvciBTRVJWRkFJTCByY29kZXMsCisJICAgIG5vdyB0aGUgcXVlcnkgZ2V0cyByZXRyaWVkIG9uIGFsbCBzZXJ2ZXJzIGJlZm9yZSByZXR1cm5pbmcKKwkgICAgdGhlIGVycm9yIHRvIHRoZSBzb3VyY2Ugb2YgdGhlIHF1ZXJ5LiBUaGFua3MgdG8gSmF2aWVyCisJICAgIEtvaGVuIGZvciB0aGUgcmVwb3J0LgorIAorCSAgICBBZGRlZCBQb2xpc2ggdHJhbnNsYXRpb24gLSB0aGFua3MgdG8gVG9tYXN6IFNvY2hhbnNraS4KKworCSAgICBDaGFuZ2VkIGRlZmF1bHQgbWFucGFnZSBpbnN0YWxsIGxvY2F0aW9uIGZyb20gL3Vzci9tYW4gCisJICAgIHRvIC91c3Ivc2hhcmUvbWFuIAorCisJICAgIEFkZGVkIFNwYW5pc2ggdHJhbnNsYXRpb24gLSB0aGFua3MgdG8gQ2hyaXN0b3BoZXIgQ2hhdGhhbS4KKworCSAgICBMb2cgYSB3YXJuaW5nIHdoZW4gYSBESENQIHBhY2tldCBpcyB0cnVuY2F0ZWQgZHVlIHRvIGxhY2sKKwkgICAgb2Ygc3BhY2UuIChUaGFua3MgdG8gTWljaGFlbCBXZWxsZSBmb3IgdGhlIHByb21wdCB0byBkbworCSAgICB0aGlzLikKKwkgICAgCisJICAgIEFkZGVkIEZyZW5jaCB0cmFuc2xhdGlvbiAtIHRoYW5rcyB0byBMaW9uZWwgVHJpY29uLgorCisJICAgIEFkZGVkIEluZG9uZXNpYW4gdHJhbnNsYXRpb24gLSB0aGFua3MgdG8gU2FsbWFuIEFTLgorCisJICAgIFR3ZWFrZWQgdGhlIG5ldGxpbmsgY29kZSB0byBjb3BlIHdpdGggaW50ZXJmYWNlIGJyb2FkY2FzdAorCSAgICBhZGRyZXNzIG5vdCBzZXQsIG9yIHNldCB0byAwLjAuMC4wLgorCisJICAgIEZpeGVkIHByb2JsZW0gYXNzaWduaW5nIGZpeGVkIGFkZHJlc3NlcyB0byBob3N0cyB3aGVuIG1vcmUKKwkgICAgdGhhbiBvbmUgZGhjcC1yYW5nZSBpcyBhdmFpbGFibGUuIFRoYW5rcyB0byBTb3JpbiBQYW5jYQorCSAgICBmb3IgaGVscCBjaGFzaW5nIHRoaXMgZG93bi4KKworCSAgICBBZGRlZCBtb3JlIGV4cGxpY2l0IGVycm9yIG1lc3NhZ2VzIHRvIHRoZSBob3N0cyBmaWxlIGFuZAorCSAgICBldGhlcnMgZmlsZSByZWFkaW5nIGNvZGUuIE1hcmt1cyBLYWlzZXJzd2VydGggc3VmZmVyZWQgdG8KKwkgICAgbWFrZSB0aGlzIGhhcHBlbi4KKworCSAgICBFbnN1cmUgdGhhdCBhIGhvc3RuYW1lIHN1cHBsaWVkIGJ5IGEgREhDUCBjbGllbnQgY2FuIG5ldmVyCisJICAgIG92ZXJyaWRlIG9uZSBjb25maWd1cmVkIG9uIHRoZSBzZXJ2ZXIuIFByZXZpb3VzbHksIGFueQorCSAgICBob3N0IGNsYWltaW5nIGEgbmFtZSB3b3VsZCBiZSBnaXZlbiBpdCwgZXZlbiBpZiB0aGF0CisJICAgIG92ZXItcm9kZSBhIGRoY3AtaG9zdCBkZWNsYXJhdGlvbiwgbGVhZGluZyB0byBwb3RlbnRpYWxseSAKKyAgICAgICAgICAgIGNvbmZ1c2luZyBzaXR1YXRpb25zLgorCisJICAgIEFkZGVkIFNsYWNrd2FyZSBwYWNrYWdlLWJ1aWxkIHN0dWZmIGludG8gY29udHJpYi8gVGhlIGkxOG4KKwkgICAgZWZmb3J0IGJyb2tlIHRoZSBjdXJyZW50IHNjcmlwdHMsIGFuZCB3b3JraW5nIG9uZXMgd2VyZQorCSAgICBuZWVkZWQgZm9yIHRlc3RpbmcsIHNvIHRoZXkgZW5kZWQgdXAgaGVyZSByYXRoZXIgdGhhbiBtYWtlCisJICAgIFBhdCByZS1pbnZlbnQgdGhlIHdoZWVsLgorCSAgICAKKwkgICAgQWRkZWQgUm9tYW5pYW4gdHJhbnNsYXRpb24sIHRoYW5rcyB0byBTb3JpbiBQYW5jYSBmb3IKKwkgICAgdGhhdC4KKwordmVyc2lvbiAyLjI1CisgICAgICAgICAgICBGaXhlZCBSZWRIYXQgc3BlYyBmaWxlIGZvciBGQzQgLSB0aGFua3MgdG8gV2VybmVyIEhvZWx6bAorICAgICAgICAgICAgYW5kIEFuZHJldyBCaXJkLgorCisgICAgICAgICAgICBGaXhlZCBTdXNlIHNwZWMgZmlsZSAtIHRoYW5rcyB0byBTdGV2ZW4gU3ByaW5nbC4KKworCSAgICBGaXhlZCBESENQIGJ1ZyB3aGVuIHR3byBkaXN0aW5jdCBzdWJuZXRzIGFyZSBvbiB0aGUgc2FtZQorCSAgICBwaHlzaWNhbCBpbnRlcmZhY2UuIFRoYW5rcyB0byBQYXdlbCBaYXdvcmEgZm9yIGZpbmRpbmcKKwkgICAgdGhpcyBhbmQgc3VnZ2VzdGluZyB0aGUgZml4LgorCisJICAgIEFkZGVkIGxvZ2dpbmcgdG8gbWFrZSBpdCBleHBsaWNpdCB3aGVuIGRuc21hc3EgZmFsbHMgYmFjaworCSAgICBmcm9tIHVzaW5nIFJULW5ldGxpbmsgc29ja2V0cyB0byB0aGUgb2xkIGlvY3RsIEFQSSBmb3IKKwkgICAgZ2V0dGluZyBpbmZvcm1hdGlvbiBhYm91dCBpbnRlcmZhY2VzLiBEb2luZyB0aGlzCisJICAgIGNvbXBsZXRlbHkgc2lsZW50bHkgbWFkZSByZW1vdGUgZGVidWdnaW5nIGhhcmQuCisKKwkgICAgTWVyZ2VkIHVjbGliYyBidWlsZCBmaXhlcyBmcm9tIHRoZSBPcGVuV1JUIHBhY2thZ2UgaW50bworCSAgICBzcmMvY29uZmlnLmggCisKKwkgICAgQWRkZWQgTm9yd2VnaWFuIHRyYW5zbGF0aW9uIC0gdGhhbmtzIHRvIEphbiBFcmlrIEFza2lsZHQuCisKK3ZlcnNpb24gMi4yNgorCSAgICBGaXhlZCBTdVNlIHJwbSBwYXRjaCBwcm9ibGVtIC0gdGhhbmtzIHRvIFN0ZXZlbiBTcHJpbmdsLgorCisJICAgIEZpeGVkIGNyYXNoIHdoZW4gYXR0ZW1wdGluZyB0byBzZW5kIGEgREhDUCBOQUsgdG8gYSBob3N0CisJICAgIHdoaWNoIGJlbGlldmVzIGl0IGhhcyBhIGxlYXNlIG9uIGFuIHVua25vd24KKwkgICAgbmV0d29yay4gVGhhbmtzIHRvIEx1dHogUHJlc3NsZXIgZm9yIHRoZSBidWcgcmVwb3J0IGFuZAorCSAgICBwYXRjaC4KKwordmVyc2lvbiAyLjI3CisJICAgIFR3ZWFrZWQgREhDUCBiZWhhdmlvdXIgd2hlbiBhIGNsaWVudCBhdHRlbXB0cyB0byByZW5ldyBhIGxlYXNlCisgICAgICAgICAgICB3aGljaCBkbnNtYXNxIGRvZXNuJ3Qga25vdyBhYm91dC4gUHJldmlvdXNseSB0aGF0IHdvdWxkIGFsd2F5cworICAgICAgICAgICAgcmVzdWx0IGluIGEgREhDUE5BSy4gTm93LCBpbiBkaGNwLWF1dGhvcml0YXRpdmUgbW9kZSwgdGhlCisgICAgICAgICAgICBsZWFzZSB3aWxsIGJlIGNyZWF0ZWQsIGlmIGl0J3MgbGVnYWwuIFRoaXMgbWFrZXMgZG5zbWFzcSB3b3JrCisgICAgICAgICAgICBiZXR0ZXIgaWYgdGhlIGxlYXNlIGRhdGFiYXNlIGlzIGxvc3QsIGZvciBleGFtcGxlIG9uIGFuIE9wZW5XUlQKKwkgICAgc3lzdGVtIHdoaWNoIHJlYm9vdHMuIFRoYW5rcyB0byBTdGVwaGVuIFJvc2UgZm9yIHdvcmsgb24KKwkgICAgdGhpcy4KKworCSAgICBBZGRlZCB0aGUgYWJpbGl0eSB0byBzdXBwb3J0IFJGQy0zNDQyIHN0eWxlIGRlc3RpbmF0aW9uCisJICAgIGRlc2NyaXB0b3JzIGluIGRoY3Atb3B0aW9ucy4gVGhpcyBtYWtlcyBjbGFzc2xlc3Mgc3RhdGljCisJICAgIHJvdXRlcyBlYXN5IHRvIGRvLCBlZyBkaGNwLW9wdGlvbj0xMjEsMTkyLjE2OC4xLjAvMjQsMS4yLjMuNAorCisJICAgIEFkZGVkIGVycm9yLWNoZWNraW5nIHRvIHRoZSBjb2RlIHdoaWNoIHdyaXRlcyB0aGUgbGVhc2UKKwkgICAgZmlsZS4gSWYgdGhpcyBmYWlscyBmb3IgYW55IHJlYXNvbiwgYW4gZXJyb3IgaXMgbG9nZ2VkLAorCSAgICBhbmQgYSByZXRyeSBvY2N1cnMgYWZ0ZXIgb25lIG1pbnV0ZS4gVGhpcyBzaG91bGQgaW1wcm92ZQorCSAgICB0aGluZ3MgZWcgd2hlbiBhIGZpbGVzeXN0ZW0gaXMgZnVsbC4gVGhhbmtzIHRvIEplbnMgSG9semUKKwkgICAgZm9yIHRoZSBidWcgcmVwb3J0LgorCisJICAgIEZpeGVkIGJyZWFrYWdlIG9mIHRoZSAiLyMvIG1hdGNoZXMgYW55IGRvbWFpbiIgZmFjaWxpdHkKKwkgICAgd2hpY2ggaGFwcGVuZWQgaW4gMi4yNC4gVGhhbmtzIHRvIFBldGVyIFN1cmRhIGZvciB0aGUgYnVnCisJICAgIHJlcG9ydC4KKworCSAgICBVc2UgInNpemVfdCIgYW5kICJzc2l6ZV90IiB0eXBlcyB3aGVyZSBhcHByb3ByaWF0ZSBpbiB0aGUKKwkgICAgY29kZS4KKworCSAgICBGaXggYnVnZ3kgQ05BTUUgaGFuZGxpbmcgaW4gbWl4ZWQgSVB2NCBhbmQgSVB2NgorCSAgICBxdWVyaWVzLiBUaGFua3MgdG8gQW5kcmVhcyBQZWxtZSBmb3IgaGVscCBmaW5kaW5nIHRoYXQuCisKKwkgICAgQWRkZWQgc29tZSBjb2RlIHRvIGF0dGVtcHQgdG8gcmUtdHJhbnNtaXQgRE5TIHF1ZXJpZXMgd2hlbiAKKwkgICAgYSBuZXR3b3JrIGludGVyZmFjZSBjb21lcyB1cC4gIFRoaXMgaGVscHMgb24gRG9EIGxpbmtzLCAKKwkgICAgd2hlcmUgZnJlcXVlbnRseSB0aGUgcGFja2V0IHdoaWNoIHRyaWdnZXJzIGRpYWxsaW5nIGlzCisgICAgICAgICAgICBhIEROUyBxdWVyeSwgd2hpY2ggdGhlbiBnZXRzIGxvc3QuIEJ5IHJlLXNlbmRpbmcsIHdlIGNhbiAKKwkgICAgYXZvaWQgdGhlIGxvb2t1cCBmYWlsaW5nLiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYWN0aXZlCisJICAgIHdoZW4gbmV0bGluayBzdXBwb3J0IGlzIGNvbXBpbGVkIGluLCBhbmQgdGhlcmVmb3JlIG9ubHkKKwkgICAgdW5kZXIgTGludXguIFRoYW5rcyB0byBKZWFuIFdvbHRlciBmb3IgaGVscCB3aXRoIHRoaXMuCisKKwkgICAgVHdlYWtlZCB0aGUgREhDUCB0YWctbWF0Y2hpbmcgY29kZSB0byB3b3JrIGNvcnJlY3RseSB3aXRoCisJICAgIE5PVC10YWcgY29uZGl0aW9ucy4gVGhhbmtzIHRvIEx1dHogUHJlc3NsZXIgZm9yIGZpbmRpbmcKKwkgICAgdGhlIGJ1Zy4KKworCSAgICBHZW5lcmFsaXNlZCBuZXRpZC10YWcgbWF0Y2hpbmcgaW4gZGhjcC1yYW5nZSBzdGF0ZW1lbnRzIHRvCisJICAgIGFsbG93IG1vcmUgdGhhbiBvbmUgdGFnLgorCisJICAgIEFkZGVkIC0tZGhjcC1tYWMgdG8gZG8gTUFDIGFkZHJlc3MgbWF0Y2hpbmcgaW4gdGhlIHNhbWUKKwkgICAgd2F5IGFzIHZlbmRvcmNsYXNzIGFuZCB1c2VyY2xhc3MgbWF0Y2hpbmcuIEEgZ29vZAorCSAgICBzdWdnZXN0aW9uIGZyb20gTHV0eiBQcmVzc2xlci4KKworCSAgICBBZGQgd29ya2Fyb3VuZCBmb3IgYnVnZ3kgZWFybHkgTWljcm9zb2Z0IERIQ1AgY2xpZW50cworCSAgICB3aGljaCBuZWVkIHplcm8tdGVybWluYXRpb24gaW4gc3RyaW5nIG9wdGlvbnMuCisJICAgIFRoYW5rcyB0byBGYWJpYW5vIFBpcmVzIGZvciBoZWxwIHdpdGggdGhpcy4KKworCSAgICBHZW5lcmFsaXNlZCB0aGUgREhDUCBjb2RlIHRvIGNvcGUgd2l0aCBhbnkgaGFyZHdhcmUKKwkgICAgYWRkcmVzcyB0eXBlLCBhdCBsZWFzdCBvbiBMaW51eC4gKkJTRCBpcyBzdGlsbCBsaW1pdGVkIHRvCisJICAgIGV0aGVybmV0IG9ubHkuCisKK3ZlcnNpb24gMi4yOAorICAgICAgICAgICAgRWxpbWluYXRlZCBhbGwgcmF3IG5ldHdvcmsgYWNjZXNzIHdoZW4gcnVubmluZyBvbgorICAgICAgICAgICAgTGludXguIEFsbCBESENQIG5ldHdvcmsgYWN0aXZpdHkgbm93IGdvZXMgdGhyb3VnaCB0aGUgSVAKKyAgICAgICAgICAgIHN0YWNrLiBQYWNrZXQgc29ja2V0cyBhcmUgbm8gbG9uZ2VyIHJlcXVpcmVkLiBBcGFydCBmcm9tCisgICAgICAgICAgICBiZWluZyBhIG5lYXQgaGFjaywgdGhpcyBzaG91bGQgYWxzbyBhbGxvdyBESENQIG92ZXIgSVBzZWMKKyAgICAgICAgICAgIHRvIHdvcmsgYmV0dGVyLiBPbiAqQlNEIGFuZCBPUyBYLCB0aGUgb2xkIG1ldGhvZCBvZiByYXcgbmV0CisgICAgICAgICAgICBhY2Nlc3MgdGhyb3VnaCBCUEYgaXMgcmV0YWluZWQuCisKKwkgICAgU2ltcGxpZmllZCBidWlsZCBvcHRpb25zLiBOZXR3b3JraW5nIGlzIG5vdyBzbGltbWVkIGRvd24KKwkgICAgdG8gYSBjaG9pY2Ugb2YgImxpbnV4IiBvciAib3RoZXIiLiBOZXRsaW5rIGlzIGFsd2F5cyB1c2VkCisJICAgIHVuZGVyIExpbnV4LiBTaW5jZSBuZXRsaW5rIGhhcyBiZWVuIGF2YWlsYWJsZSBzaW5jZSAyLjIKKwkgICAgYW5kIG5vbi1vcHRpb25hbCBpbiBhbiBJUHY0LWNvbmZpZ3VyZWQgIGtlcm5lbCBzaW5jZSAyLjQsCisJICAgIGFuZCB0aGUgZG5zbWFzcSBuZXRsaW5rIGNvZGUgaXMgbm93IHdlbGwgdGVzdGVkLCB0aGlzIAorCSAgICBzaG91bGQgd29yayBvdXQgZmluZS4gCisKKwkgICAgUmVtb3ZlZCBkZWNheWVkIGJ1aWxkIHN1cHBvcnQgZm9yIGxpYmM1IGFuZCBTb2xhcmlzLgorCSAgICAKKwkgICAgUmVtb3ZlZCBwc2VsZWN0IGNvZGU6IHVzZSBhIHBpcGUgZm9yIHJhY2UtZnJlZSBzaWduYWwKKwkgICAgaGFuZGxpbmcgaW5zdGVhZCwgYXMgdGhpcyB3b3JrcyBldmVyeXdoZXJlLgorCisJICAgIE5vIGxvbmdlciBlbmFibGUgdGhlIElTQyBsZWFzZWZpbGUgcmVhZGluZyBjb2RlIGluIHRoZQorCSAgICBkaXN0cmlidXRlZCBzb3VyY2VzLiBJIGRvdWJ0IHRoZXJlIGFyZSBtYW55IHBlb3BsZSBsZWZ0CisJICAgIHVzaW5nIHRoaXMgMS54IGNvbXBhdGliaWxpdHkgY29kZS4gVGhvc2UgdGhhdCBhcmUgd2lsbAorCSAgICBoYXZlIHRvIGV4cGxpY2l0bHkgZW5hYmxlIGl0IGluIHNyYy9jb25maWcuaC4KKworCSAgICBEb24ndCBzZW5kIHRoZSAiREhDUCBtYXhpbXVtIG1lc3NhZ2Ugc2l6ZSIgb3B0aW9uLCBldmVuIGlmIAorCSAgICByZXF1ZXN0ZWQuIFJGQzIxMzEgc2F5cyB0aGlzIGlzIGEgIk1VU1QgTk9UIi4KKworCSAgICBTdXBwb3J0IGxhcmdlci10aGFuLW1pbmltdW0gREhDUCBtZXNzYWdlLiBEbnNtYXNxIGlzIG5vdworCSAgICBoYXBweSB0byBnZXQgbGFyZ2VyIHRoYW4gNTc2LWJ5dGUgREhDUCBtZXNzYWdlcywgYW5kIHdpbGwKKwkgICAgcmV0dXJuIGxhcmdlIG1lc3NhZ2VzLCBpZiBwZXJtaXR0ZWQgYnkgdGhlICJtYXhpbXVtCisJICAgIG1lc3NhZ2Ugc2l6ZSIgb3B0aW9uIG9mIHRoZSBtZXNzYWdlIHRvIHdoaWNoIGl0IGlzCisJICAgIHJlcGx5aW5nLiBUaGVyZSdzIG5vdyBhbiBhcmJpdHJhcnkgc2FuaXR5IGxpbWl0IG9mIDE2Mzg0CisJICAgIGJ5dGVzLgorCisJICAgIEFkZGVkIC0tbm8tcGluZyBvcHRpb24uIFRoaXMgZml4ZXMgYW4gUkZDMjEzMSAiU0hPVUxEIi4KKworCSAgICBCdWlsZGluZyBvbiB0aGUgMi4yNyBNQUMtYWRkcmVzcyBjaGFuZ2VzLCBhbGxvdyBjbGllbnRzIHRvIAorCSAgICBwcm92aWRlIG5vIE1BQyBhZGRyZXNzIGF0IGFsbCwgcmVseWluZyBvbiB0aGUgY2xpZW50LWlkIGFzCisJICAgIGEgdW5pcXVlIGlkZW50aWZpZXIuIFRoaXMgc2hvdWxkIG1ha2UgdGhpbmdzIGxpa2UgREhDUCBmb3IKKwkgICAgVVNCIGNvbWUgZWFzaWVyLgorCisJICAgIEZpeGVkIHJlZ3Jlc3Npb24gaW4gbmV0bGluayBjb2RlIHVuZGVyIDIuMi54IGtlcm5lbHMgd2hpY2ggCisJICAgIG9jY3VycmVkIGluIDIuMjcuIEVyaWsgSmFuIFRyb21wIGlzIHRoZSB2aW50YWdlIGtlcm5lbCBmYW4gCisJICAgIHdobyBmb3VuZCB0aGlzLiBQLlMuIEl0IGxvb2tzIGxpa2UgdGhpcyAibmV0bGluayBiaW5kOgorCSAgICBwZXJtaXNzaW9uIGRlbmllZCIgcHJvYmxlbSBvY2N1cnJlZCBpbiBrZXJuZWxzIGF0IGxlYXN0IGFzCisJICAgIGxhdGUgYSAyLjQuMTguIEdvb2QgaW5mb3JtYXRpb24gZnJvbSBBbGFpbiBSaWNob3V4LgorCisJICAgIEFkZGVkIGEgd2FybmluZyB3aGVuIGl0J3MgaW1wb3NzaWJsZSB0byBnaXZlIGEgaG9zdCBpdHMKKwkgICAgY29uZmlndXJlZCBhZGRyZXNzIGJlY2F1c2UgdGhlIGFkZHJlc3MgaXMgbGVhc2VkCisJICAgIGVsc2V3aGVyZS4gIEEgc2Vuc2libGUgc3VnZ2VzdGlvbiBmcm9tIE1pcmNlYSBCYXJkYWMuCisKKwkgICAgQWRkZWQgbWluaW1hbCBzdXBwb3J0IGZvciBSRkMgMzA0NiBESENQIHJlbGF5IGFnZW50LWlkCisJICAgIG9wdGlvbnMuIFRoZSBESENQIHNlcnZlciBub3cgZWNob2VzIHRoZXNlIGJhY2sgdG8gdGhlCisJICAgIHJlbGF5LCBhcyByZXF1aXJlZCBieSB0aGUgUkZDLiBBbHNvLCBSRkMgMzUyNyBsaW5rIHNlbGVjdGlvbiAKKwkgICAgc3ViLW9wdGlvbnMgYXJlIGhvbm91cmVkLgorCisJICAgIFNldCB0aGUgcHJvY2VzcyAiZHVtcGFibGUiIGZsYWcgd2hlbiBydW5uaW5nIGluIGRlYnVnCisJICAgIG1vZGU6IHRoaXMgbWFrZXMgZ2V0dGluZyBjb3JlIGR1bXBzIGZyb20gcm9vdCBwcm9jZXNzZXMKKwkgICAgbXVjaCBlYXNpZXIuCisJICAgIAorCSAgICBGaXhlZCBvbmUtYnl0ZSBidWZmZXIgb3ZlcmZsb3cgd2hpY2ggc2VlbXMgdG8gb25seSBjYXVzZQorCSAgICBwcm9ibGVtcyB3aGVuIGRuc21hc3EgaXMgbGlua2VkIHdpdGggdWNsaWJjLiBUaGFua3MgdG8KKwkgICAgRXJpYyBIb3VzZSBhbmQgRXJpYyBTcGFrbWFuIGZvciBoZWxwIGluIGNoYXNpbmcgdGhpcyBkb3duLgorCisJICAgIFRvbGVyYXRlIGNvbmZpZ3VyYXRpb24gc2NyZXd1cHMgd2hpY2ggbGVhZCB0byB0aGUgREhDUAorCSAgICBzZXJ2ZXIgYXR0ZW1wdGluZyB0byBhbGxvY2F0ZSBpdHMgb3duIGFkZHJlc3MgdG8gYQorCSAgICBjbGllbnQ7IGVnIHNldHRpbmcgdGhlIHdob2xlIHN1Ym5ldCByYW5nZSBhcyBhIERIQ1AKKwkgICAgcmFuZ2UuIEFkZHJlc3NlcyBpbiB1c2UgYnkgdGhlIHNlcnZlciBhcmUgbm93IGV4Y2x1ZGVkCisJICAgIGZyb20gdXNlIGJ5IGNsaWVudHMuCisKKwkgICAgRGlkIHNvbWUgdGhpbmtpbmcgYWJvdXQgSEFWRV9CUk9LRU5fUlRDIG1vZGUsIGFuZCBtYWRlIGl0CisJICAgIG11Y2ggc2ltcGxlciBhbmQgYmV0dGVyLiBUaGUga2V5IGlzIHRvIGp1c3Qga2VlcCBsZWFzZQorCSAgICBsZW5ndGhzIGluIHRoZSBsZWFzZSBmaWxlLiBTaW5jZSB0aGVzZSBub3JtYWxseSBuZXZlcgorCSAgICBjaGFuZ2UsIGV2ZW4gYXMgdGhlIGxlYXNlIGlzIHJlbmV3ZWQsIHRoZSBsZWFzZSBmaWxlIG5ldmVyCisJICAgIG5lZWRzIHRvIGNoYW5nZSBleGNlcHQgd2hlbiBtYWNoaW5lcyBhcnJpdmUgb24gdGhlIG5ldHdvcmsKKwkgICAgb3IgbGVhdmUuIFRoaXMgZWxpbWluYXRlcyB0aGUgY29kZSBmb3IgdGltZWQgd3JpdGVzLCBhbmQKKwkgICAgcmVkdWNlcyB0aGUgYW1vdW50IG9mIHdlYXIgb24gYSBmbGFzaCBmaWxlc3lzdGVtIHRvIHRoZQorCSAgICBhYnNvbHV0ZSBtaW5pbXVtLiBBbHNvIHJlLWRpZCB0aGUgYmFzaWMgdGltZSBmdW5jdGlvbiBpbgorCSAgICB0aGlzIG1vZGUgdG8gdXNlIHRoZSBwb3J0YWJsZSB0aW1lcygpLCByYXRoZXIgdGhhbiBwYXJzaW5nCisJICAgIC9wcm9jL3VwdGltZS4KKworCSAgICBCZWxpZXZlIHRoZSBzb3VyY2UgcG9ydCBudW1iZXIgd2hlbiByZXBseWluZyB0byB1bmljYXN0IAorCSAgICBESENQIHJlcXVlc3RzIGFuZCBESENQIHJlcXVlc3RzIHZpYSBhIHJlbGF5LCBpbnN0ZWFkIG9mIGFsd2F5cyAKKyAgICAgICAgICAgIHVzaW5nIHRoZSBzdGFuZGFyZCBwb3J0cy4gIFRoaXMgd2lsbCBhbGxvdyByZWxheXMgb24gCisgICAgICAgICAgICBub24tc3RhbmRhcmQgcG9ydHMgYW5kIERIQ1BJTkZPUk0gZnJvbSB1bnByaXZpbGVnZWQgcG9ydHMKKyAgICAgICAgICAgIHRvIHdvcmsuIFRoZSBzb3VyY2UgcG9ydCBzZW50IGJ5IHVuY29uZmlndXJlZCBjbGllbnRzIGlzIHN0aWxsIAorICAgICAgICAgICAgaWdub3JlZCwgc2luY2UgdGhpcyBtYXkgYmUgdW5yZWxpYWJsZS4gVGhpcyBtZWFucyB0aGF0IGEgREhDUCAKKyAgICAgICAgICAgIGNsaWVudCBtdXN0IHVzZSB0aGUgc3RhbmRhcmQgcG9ydCB0byBkbyBmdWxsIGNvbmZpZ3VyYXRpb24uCisgCit2ZXJzaW9uIDIuMjkKKwkgICAgRml4ZWQgY29tcGlsYXRpb24gb24gT3BlbkJTRCAodGhhbmtzIHRvIFRvbSBIZW5zZWwgZm9yIHRoZQorCSAgICByZXBvcnQpLiAKKworCSAgICBGaXhlZCBmYWxzZSAibm8gaW50ZXJmYWNlIiBlcnJvcnMgd2hlbiAtLWJpbmQtaW50ZXJmYWNlcyBpcworCSAgICBzZXQgYWxvbmcgd2l0aCAtLWludGVyZmFjZT1sbyBvciAtLWxpc3Rlbi1hZGRyZXNzLiBUaGFua3MKKwkgICAgdG8gUGF1bCBXaXNlIGZvciB0aGUgcmVwb3J0LgorCisJICAgIFVwZGF0ZWQgcGF0Y2ggZm9yIFN1U0UgcnBtLiBUaGFua3MgdG8gU3RldmVuIFNwcmluZ2wuCisKKwkgICAgSXQgdHVybnMgb3V0IHRoYXQgdGhlcmUgYXJlIHNvbWUgTGludXgga2VybmVsCisJICAgIGNvbmZpZ3VyYXRpb25zIHdoaWNoIG1ha2UgdXNpbmcgdGhlIGNhcGFiaWxpdHkgc3lzdGVtCisJICAgIGltcG9zc2libGUuIElmIHRoaXMgc2l0dWF0aW9uIG9jY3VycyB0aGVuIGNvbnRpbnVlLCBydW5uaW5nCisJICAgIGFzIHJvb3QsIGFuZCBsb2cgYSB3YXJuaW5nLiBUaGFua3MgdG8gU2NvdHQgV2VocmVuYmVyZworCSAgICBmb3IgaGVscCB0cmFja2luZyB0aGlzIGRvd24uCisKK3ZlcnNpb24gMi4zMAorICAgICAgICAgICAgRml4ZWQgY3Jhc2ggd2hlbiBhIERIQ1AgY2xpZW50IHJlcXVlc3RlZCBhIGJyb2FkY2FzdAorICAgICAgICAgICAgcmVwbHkuIFRoaXMgcHJvYmxlbSB3YXMgaW50cm9kdWNlZCBpbiB2ZXJzaW9uIDIuMjguCisJICAgIFRoYW5rcyB0byBTYW5kcmEgRGVra2VycyBmb3IgdGhlIGJ1ZyByZXBvcnQuCisKK3ZlcnNpb24gMi4zMQorCSAgICBBZGRlZCAtLWRoY3Atc2NyaXB0IG9wdGlvbi4gVGhlcmUgaGF2ZSBiZWVuIGNhbGxzIGZvciB0aGlzCisJICAgIGZvciBhIGxvbmcgdGltZSBmcm9tIG1hbnkgZ29vZCBwZW9wbGUuIEZhYmlvIE11enppIGdldHMKKwkgICAgdGhlIHByaXplIGZvciBmaW5hbGx5IGNvbnZpbmNpbmcgbWUuCisKKwkgICAgQWRkZWQgZXhhbXBsZSBkYnVzIGNvbmZpZyBmaWxlIGFuZCBtb3ZlZCBkYnVzIHN0dWZmIGludG8KKwkgICAgaXRzIG93biBkaXJlY3RvcnkuCisKKwkgICAgUmVtb3ZlZCBob3JyaWJseSBvdXRkYXRlZCBSZWRoYXQgUlBNIGJ1aWxkIGZpbGVzLiBUaGVzZQorCSAgICBhcmUgb2Jzb2xldGUgbm93IHRoYXQgZG5zbWFzcSBpbiBpbiBGZWRvcmEgZXh0cmFzLiBUaGFua3MKKwkgICAgdG8gUGF0cmljayAiSmltYSIgTGF1Z2h0b24sIHRoZSBGZWRvcmEgcGFja2FnZQorCSAgICBtYWludGFpbmVyLgorCisJICAgIEFkZGVkIHdvcmthcm91bmQgZm9yIExpbnV4IGtlcm5lbCBidWcuIFRoaXMgbWFuaWZlc3RzCisJICAgIGl0c2VsZiBhcyBmYWlsdXJlIG9mIERIQ1Agb24ga2VybmVscyB3aXRoICJzdXBwb3J0IGZvcgorCSAgICBjbGFzc2ljYWwgSVAgb3ZlciBBVE0iIGNvbmZpZ3VyZWQuIFRoYXQgaW5jbHVkZXMgbW9zdAorCSAgICBEZWJpYW4ga2VybmVsIHBhY2thZ2VzLiBNYW55IHRoYW5rcyB0byBBLiBDb3N0YSBhbmQKKwkgICAgQmVuamFtaW4gS3VkcmlhIGZvciB0aGVpciBodWdlIGVmZm9ydHMgaW4gY2hhc2luZyB0aGlzCisJICAgIGRvd24uCisKKwkgICAgRm9yY2Uta2lsbCBjaGlsZCBwcm9jZXNzZXMgd2hlbiBkbnNtYXNxIGlzIHNlbnQgYSBzaWd0ZXJtLAorCSAgICBvdGhlcndpc2UgYW4gdW5jbG9zZWQgVENQIGNvbm5lY3Rpb24gY291bGQga2VlcCBkbnNtYXNxCisJICAgIGhhbmdpbmcgcm91bmQgZm9yIGEgZmV3IG1pbnV0ZXMuCisKKwkgICAgVHdlYWtlZCBjb25maWcuaCBsb2dpYyBmb3IgdWNsaWJjIGJ1aWxkLiBJdCB3aWxsIG5vdyBwaWNrCisJICAgIHVwIE1NVSBhbmQgSVBWNiBzdGF0dXMgY29ycmVjdGx5IG9uIGV2ZXJ5IHN5c3RlbSBJIHRlc3RlZC4KKwordmVyc2lvbiAyLjMyIAorCSAgICBBdHRlbXB0IGEgYmV0dGVyIGpvYiBvZiByZXBsYWNpbmcgcHJldmlvdXMgY29uZmlndXJhdGlvbgorCSAgICB3aGVuIHJlLXJlYWRpbmcgL2V0Yy9ob3N0cyBhbmQgL2V0Yy9ldGhlcnMuIFNJR0hVUCBpcworCSAgICBzdGlsbCBub3QgaWRlbnRpY2FsIHRvIGEgcmVzdGFydCB1bmRlciBhbGwgY2lyY3Vtc3RhbmNlcywKKwkgICAgYnV0IGl0IGlzIGZvciB0aGUgY29tbW9uIGNhc2Ugb2YgbmFtZS0+TUFDIGFkZHJlc3MgaW4KKwkgICAgL2V0Yy9ldGhlcnMgYW5kIG5hbWUtPklQIGFkZHJlc3MgaW4gL2V0Yy9ob3N0cy4KKworCSAgICBGYWxsIGJhY2sgdG8gYnJvYWRjYXN0IGZvciBESENQIHRvIGFuIHVuY29uZmlndXJlZCBjbGllbnQKKwkgICAgd2hlbiB0aGUgTUFDIGFkZHJlc3Mgc2l6ZSBpcyBncmVhdGVyIHRoYW4gMTQgYnl0ZXMuCisKKwkgICAgRml4IHByb2JsZW0gaW4gMi4yOC1vbndhcmRzIHJlbGVhc2VzIHdoaWNoIGJyZWFrcyBETlMgb24KKwkgICAgTWFjIE9TIFguIFRoYW5rcyB0byBEb3VnIEZpZWxkcyBmb3IgdGhlIGJ1ZyByZXBvcnQgYW5kCisJICAgIHRlc3RpbmcuCisKKwkgICAgQWRkZWQgZml4IHRvIGFsbG93IGNvbXBpbGF0aW9uIG9uIGM4OS1vbmx5IGNvbXBpbGVycy4KKwkgICAgVGhhbmtzIHRvIEpvaG4gTWFzdHdpamsgZm9yIHRoZSBwYXRjaC4KKwkgICAKKwkgICAgVHdlYWsgcmVzb2x2IGZpbGUgcG9sbGluZyBjb2RlIHRvIHdvcmsgYmV0dGVyIGlmIHRoZXJlIGlzCisJICAgIGEgcmFjZSBiZXR3ZWVuIHVwZGF0aW5nIHRoZSBtdGltZSBhbmQgZmlsZSBjb250ZW50cy4gVGhpcworCSAgICBpcyBub3Qgbm9ybWFsbHkgYSBwcm9ibGVtLCBidXQgaXQgY2FuIGJlIG9uIHN5c3RlbXMgd2hpY2gKKwkgICAgcmVwbGFjZSBuYW1lc2VydmVycyB3aGlsc3QgYWN0aXZlLiBUaGUgY29kZSBub3cgY29udGludWVzCisJICAgIHRvIHJlYWQgcmVzb2x2LmNvbmYgdW50aWwgaXQgZ2V0cyBhdCBsZWFzdCBvbmUgdXNhYmxlCisJICAgIHNlcnZlci4gVGhhbmtzIHRvIEhvbGdlciBNYXVlcm1hbm4gZm9yIGhlbHAgd2l0aCB0aGlzLgorCisJICAgIElmIGEgY2xpZW50IERFQ0xJTkVzIGFuIGFkZHJlc3Mgd2hpY2ggaXMgYWxsb2NhdGVkIHRvIGl0CisJICAgIHZpYSBkaGNwLWhvc3Qgb3IgL2V0Yy9ob3N0cywgbG9jayB0aGF0IGFkZHJlc3Mgb3V0IG9mIHVzZQorCSAgICBmb3IgdGVuIG1pbnV0ZXMsIGluc3RlYWQgb2YgZm9yZXZlciwgYW5kIGxvZyB3aGVuIGl0J3Mgbm90CisJICAgIGJlaW5nIHVzZWQgYmVjYXVzZSBvZiB0aGUgbG9jay1vdXQuIFRoaXMgc2hvdWxkIHByb3ZpZGUKKwkgICAgbGVzcyBzdXJwcmlzaW5nIGJlaGF2aW91ciB3aGVuIGEgY29uZmlndXJlZCBhZGRyZXNzIGNhbid0IGJlCisJICAgIHVzZWQuIFRoYW5rcyB0byBQZXRlciBTdXJkYSBhbmQgSGVpbnogRGVpbmhhcnQgZm9yIGlucHV0CisJICAgIG9uIHRoaXMuCisKKwkgICAgRml4ZWQgKkJTRCBESENQIGJyZWFrYWdlIHdpdGggb25seSBzb21lCisJICAgIGFyY2hlcy9jb21waWxlcnMsIGRlcGVuZGluZyBvbiBzdHJ1Y3R1cmUgcGFkZGluZyBydWxlcy4KKwkgICAgVGhhbmtzIHRvIEplYiBDYW1wYmVsbCBhbmQgVG9tIEhlbnNlbCBmb3IgaGVscCB3aXRoIHRoaXMuCisKKwkgICAgQWRkZWQgLS1jb25mLWRpciBvcHRpb24uIFN1Z2dlc3Rpb24gZnJvbSBBYXJvbiBUeWdhcnQuCisKKwkgICAgQXBwbGllZCBwYXRjaCBmcm9tIEJyZW50IENvb2sgd2hpY2ggYWxsb3dzIG5ldGlkcyBpbgorCSAgICBkaGNwLW9wdGlvbiBjb25maWd1cmF0aW9uIGxpbmVzIHRvIGJlIHByZWZpeGVkIGJ5CisJICAgICJuZXQ6Ii4gVGhpcyBpcyBub3QgcmVxdWlyZWQgYnkgdGhlIHN5bnRheCwgYnV0IGl0IGlzCisJICAgIGNvbnNpc3RlbnQgd2l0aCBvdGhlciBjb25maWd1cmF0aW9uIGl0ZW1zLgorCisJICAgIEFkZGVkIC0tbG9nLWZhY2lsaXR5IG9wdGlvbi4gU3VnZ2VzdGlvbiBmcm9tIEZhYmlvIE11enppLgorCisJICAgIE1ham9yIHVwZGF0ZSB0byBTcGFuaXNoIHRyYW5zbGF0aW9uLiBNYW55IHRoYW5rcyB0byBDaHJpcworCSAgICBDaGF0aGFtLiAKKworCSAgICBGaXhlZCBnY2MtNC4xIHN0cmljdC1hbGlhcyBjb21waWxhdGlvbiB3YXJuaW5nLgorCit2ZXJzaW9uIDIuMzMKKyAgICAgICAgICAgIFJlbW92ZSBiYXNoLXNwZWNpZmljIHNoZWxsY29kZSBmcm9tIHRoZSBNYWtlZmlsZS4KKworCSAgICBGaXggYnJlYWthZ2Ugd2l0aCBzb21lIERIQ1AgcmVsYXkgaW1wbGVtZW50YXRpb25zIHdoaWNoCisJICAgIHdhcyBpbnRyb2R1Y2VkIGluIDIuMjguIEJlbGlldmluZyB0aGUgc291cmNlIHBvcnQgaW4KKwkgICAgREhDUCByZXF1ZXN0cyBhbmQgc2VuZGluZyB0aGUgcmVwbHkgdGhlcmUgaXMgc29tZXRpbWVzIGEKKwkgICAgYmFkIHRoaW5nIHRvIGRvLCBzbyBJJ3ZlIHJldmVydGVkIHRvIGFsd2F5cyBzZW5kaW5nIHRvCisJICAgIHRoZSByZWxheSBvbiBwb3J0IDY4LiBUaGFua3MgdG8gRGFuaWVsIEhhbWxpbiBhbmQgQWxleAorCSAgICAoYWxkZSkgZm9yIGJ1ZyByZXBvcnRzIG9uIHRoaXMuCisKKwkgICAgTW92ZWQgdGhlIFN1U2UgcGFja2FnaW5nIGZpbGVzIHRvIGNvbnRyaWIuIEkgd2lsbCBubworCSAgICBsb25nZXIgYXR0ZW1wdCB0byBtYWludGFpbiB0aGlzIGluIHRoZSBzb3VyY2UgdGFyYmFsbC4gSXQKKwkgICAgd2lsbCBiZSBkb25lIGV4dGVybmFsbHksIGluIHRoZSBzYW1lIHdheSBhcyBwYWNrYWdpbmcgZm9yCisJICAgIG90aGVyIGRpc3Ryb3MuIFN1c2UgcGFja2FnZXMgYXJlIGF2YWlsYWJsZSBmcm9tIAorCSAgICBmdHA6Ly9mdHAuc3VzZS5jb20vcHViL3Blb3BsZS91Zy8KKwkgICAgCisJICAgIE1lcmdlZCBwYXRjaCBmcm9tIEdlbnRvbyB0byBob25vdXIgJExERkxBR1MgZW52aXJvbm1lbnQuCisKKwkgICAgRml4IGJ1ZyBpbiByZXNvbHYuY29uZiBwcm9jZXNzaW5nIHdoZW4gbW9yZSB0aGFuIG9uZSBmaWxlCisJICAgIGlzIGJlaW5nIGNoZWNrZWQuCisKKwkgICAgQWRkIC0tZG5zLWZvcndhcmQtbWF4IG9wdGlvbi4KKworCSAgICBXYXJuIGlmIC0tcmVzb2x2LWZpbGUgZmxhZ3MgYXJlIGlnbm9yZWQgYmVjYXVzZSBvZgorCSAgICAtLW5vLXJlc29sdi4gVGhhbmtzIHRvIE1hcnRpbiBGIEtyYWZmdCBmb3Igc3BvdHRpbmcgdGhpcworCSAgICBvbmUuCisKKyAgICAgICAgICAgIEFkZCAtLWxlYXNlZmlsZS1ybyBvcHRpb24gd2hpY2ggYWxsb3dzIHRoZSB1c2Ugb2YgYW4gCisgICAgICAgICAgICBleHRlcm5hbCBsZWFzZSBkYXRhYmFzZS4gTWFueSB0aGFua3MgdG8gU3RldmUgSG9yYmFjaHVrIAorCSAgICBmb3IgYXNzaXN0YW5jZSBkZXZlbG9waW5nIHRoaXMgZmVhdHVyZS4KKworCSAgICBQcm92aWRlIGV4dHJhIGluZm9ybWF0aW9uIHRvIGxlYXNlLWNoYW5nZSBzY3JpcHQgdmlhIGl0cworCSAgICBlbnZpcm9ubWVudC4gSWYgdGhlIGhvc3QgaGFzIGEgY2xpZW50LWlkLCB0aGVuCisJICAgIEROU01BU1FfQ0xJRU5UX0lEIHdpbGwgYmUgc2V0LiBFaXRoZXIgdGhlIGxlYXNlIGxlbmd0aCAoaW4KKwkgICAgRE5TTUFTUV9MRUFTRV9MRU5HVEgpIG9yIGxlYXNlIGV4cGlyeSB0aW1lIChpbgorCSAgICBETlNNQVNRX0xFQVNFX0VYUElSRVMpIHdpbGwgYmUgc2V0LCBkZXBlbmRpbmcgb24gdGhlCisJICAgIEhBVkVfQlJPS0VOX1JUQyBjb21waWxlLXRpbWUgb3B0aW9uLiBUaGlzIGV4dHJhCisJICAgIGluZm9ybWF0aW9uIHNob3VsZCBtYWtlIGl0IHBvc3NpYmxlIHRvIG1haW50YWluIHRoZSBsZWFzZQorCSAgICBkYXRhYmFzZSBpbiBleHRlcm5hbCBzdG9yYWdlIHN1Y2ggYXMgTERBUCBvciBhIHJlbGF0aW9uYWwKKwkgICAgZGF0YWJhc2UuIE5vdGUgdGhhdCB3aGlsZSBsZWFzZWZpbGUtcm8gaXMgc2V0LCB0aGUgc2NyaXB0CisgICAgICAgICAgICB3aWxsIGJlIGNhbGxlZCB3aXRoICJvbGQiICBldmVudHMgbW9yZSBvZnRlbiwgc2luY2UgCisJICAgIGNoYW5nZXMgdG8gdGhlIGNsaWVudC1pZCBhbmQgbGVhc2UgbGVuZ3RoCisJICAgIChIQVZFX0JST0tFTl9SVEMpIG9yIGxlYXNlIGV4cGlyeSB0aW1lIChvdGhlcndpc2UpIAorCSAgICBhcmUgbm93IGZsYWdnZWQuIAorCisJICAgIEFkZCBjb250cmliL3dydC8qIHdoaWNoIGlzIGFuIGV4YW1wbGUgaW1wbGVtZW50YXRpb24gb2YgYW4KKwkgICAgZXh0ZXJuYWwgcGVyc2lzdGVudCBsZWFzZSBkYXRhYmFzZSBmb3IgKldSVCBkaXN0cm9zIHdpdGggCisJICAgIHRoZSBudnJhbSBjb21tYW5kLgorCisJICAgIEFkZCBjb250cmliL3dydC9kaGNwX3JlbGVhc2UuYyB3aGljaCBpcyBhIHNtYWxsIHV0aWxpdHkgCisJICAgIHdoaWNoIHJlbW92ZXMgREhDUCBsZWFzZXMgdXNpbmcgREhDUFJFTEVBU0Ugb3BlcmF0aW9uIGluCisJICAgIHRoZSBESENQIHByb3RvY29sLgorCit2ZXJzaW9uIDIuMzQKKwkgICAgVHdlYWsgbmV0d29yay1kZXRlcm1pbmF0aW9uIGNvZGUgZm9yIGFub3RoZXIgY29ybmVyIGNhc2U6CisJICAgIGluIHRoaXMgY2FzZSBhIGhvc3QgZm9yY2VkIHRvIG1vdmUgYmV0d2VlbiBkaGNwLXJhbmdlcyBvbgorCSAgICB0aGUgc2FtZSBwaHlzaWNhbCBpbnRlcmZhY2UuIFRoYW5rcyB0byBNYXR0aGlhcyBBbmRyZWUuCisJICAgIAorCSAgICBJbXByb3ZlIGhhbmRsaW5nIG9mIGhpZ2ggRE5TIGxvYWRzIGJ5IHRocm90dGxpbmcgYWNjZXB0YW5jZSBvZgorCSAgICBuZXcgcXVlcmllcyB3aGVuIHJlc291cmNlcyBhcmUgdGlnaHQuIFRoaXMgc2hvdWxkIGJlIGEKKwkgICAgYmV0dGVyIHJlc3BvbnNlIHRoYW4gdGhlICJmb3J3YXJkaW5nIHRhYmxlIGZ1bGwuLi4iCisJICAgIG1lc3NhZ2Ugd2hpY2ggd2FzIGxvZ2dlZCBiZWZvcmUuCisKKwkgICAgRml4ZWQgaW50ZXJtaXR0ZW50IGluZmluaXRlIGxvb3Agd2hlbiByZS1yZWFkaW5nCisJICAgIC9ldGMvZXRoZXJzIGFmdGVyIFNJR0hVUC4gVGhhbmtzIHRvIEVsZG9uIFppZWdsZXIgZm9yIHRoZQorCSAgICBidWcgcmVwb3J0LgorCisJICAgIFByb3ZpZGUgZXh0cmEgaW5mb3JtYXRpb24gdG8gdGhlIGxlYXNlLWNoYW5nZSBzY3JpcHQ6IHdoZW4KKwkgICAgYSBsZWFzZSBsb3NlcyBpdHMgaG9zdG5hbWUgKGJlY2F1c2UgYSBuZXcgbGVhc2UgY29tZXMKKwkgICAgYWxvbmcgYW5kIGNsYWltcyB0aGUgc2FtZSBuZXcpLCB0aGUgIm9sZCIgYWN0aW9uIGlzIGNhbGxlZCAKKwkgICAgd2l0aCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgbGVhc2UsIGllIG5vIG5hbWUuIFRoZQorCSAgICBjaGFuZ2UgaXMgdG8gcHJvdmlkZSB0aGUgZm9ybWVyIG5hbWUgd2hpY2ggdGhlIGxlYXNlIGhhZAorCSAgICBpbiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgRE5TTUFTUV9PTERfSE9TVE5BTUUuIFRoaXMKKwkgICAgaGVscHMgc2NyaXB0cyB3aGljaCBkbyBzdHVmZiBiYXNlZCBvbiBob3N0bmFtZSwgcmF0aGVyCisJICAgIHRoYW4gSVAgYWRkcmVzcy4gQWxzbyBwcm92aWRlIHZlbmRvci1jbGFzcyBhbmQgdXNlci1jbGFzcworCSAgICBpbmZvcm1hdGlvbiB0byB0aGUgbGVhc2UtY2hhbmdlIHNjcmlwdCB3aGVuIGEgbmV3IGxlYXNlIGlzCisJICAgIGNyZWF0ZWQgaW4gdGhlIEROU01BU1FfVkVORE9SX0NMQVNTIGFuZAorCSAgICBETlNNQVNRX1VTRVJfQ0xBU1M8bj4gZW52aXJvbm1lbnQgdmFyaWFibGVzLiBTdWdnZXN0aW9uIAorICAgICAgICAgICAgZnJvbSBGcmFuY29pcy1YYXZpZXIgTGUgQmFpbC4KKworCSAgICBSdW4gdGhlIGxlYXNlIGNoYW5nZSBzY3JpcHQgYXMgcm9vdCwgZXZlbiB3aGVuIGRuc21hc3EgaXMKKwkgICAgY29uZmlndXJlZCB0byBjaGFuZ2UgVUlEIHRvIGFuIHVucHJpdmlsZWdlZCB1c2VyLiBTaW5jZQorCSAgICBtb3N0IHVzZXMgb2YgdGhlIGxlYXNlIGNoYW5nZSBzY3JpcHQgbmVlZCByb290LCB0aGlzCisJICAgIGFsbG93cyBpdHMgdXNlIHdoaWxzdCBrZWVwaW5nIHRoZSBzZWN1cml0eSBhZHZhbnRhZ2VzIG9mCisJICAgIHJ1bm5pbmcgdGhlIGRhZW1vbiB3aXRob3V0IHByaXZzLiBUaGUgc2NyaXB0IGlzIGludm9rZWQKKwkgICAgdmlhIGEgc21hbGwgaGVscGVyIHByb2Nlc3Mgd2hpY2gga2VlcHMgcm9vdCBVSUQsIGFuZAorCSAgICB2YWxpZGF0ZXMgYWxsIGRhdGEgcmVjZWl2ZWQgZnJvbSB0aGUgbWFpbiBwcm9jZXNzLiBUbyBnZXQKKwkgICAgcm9vdCwgYW4gYXR0YWNrZXIgd291bGQgaGF2ZSB0byBicmVhayBkbnNtYXNxIGFuZCB0aGVuCisJICAgIGJyZWFrIHRoZSBoZWxwZXIgdGhyb3VnaCB0aGUgcmVzdHJpY3RlZCBjb21tcyBjaGFubmVsIAorCSAgICBsaW5raW5nIHRoZSB0d28uCisJICAgIAorCSAgICBBZGQgY29udHJpYi9wb3J0LWZvcndhcmQvKiB3aGljaCBpcyBhIHNjcmlwdCB0byBzZXQgdXAgCisJICAgIHBvcnQtZm9yd2FyZHMgdXNpbmcgdGhlIERIQ1AgbGVhc2UtY2hhbmdlIHNjcmlwdC4gSXQncworCSAgICBwb3NzaWJsZSB0byBhZGQgYSBob3N0IHRvIGEgY29uZmlnIGZpbGUgYnkgbmFtZSwgYW5kIHdoZW4KKwkgICAgdGhhdCBob3N0IGdldHMgYSBESENQIGxlYXNlLCB0aGUgc2NyaXB0IHdpbGwgdXNlIGlwdGFibGVzCisJICAgIHRvIHNldCB1cCBwb3J0LWZvcndhcmRzIHRvIGNvbmZpZ3VyZWQgcG9ydHMgYXQgdGhlIGFkZHJlc3MKKwkgICAgd2hpY2ggdGhlIGhvc3QgaXMgYWxsb2NhdGVkLiBUaGUgc2NyaXB0IGFsc28gaGFuZGxlcworCSAgICBzZXR0aW5nIHVwIHRoZSBwb3J0LWZvcndhcmQgaXB0YWJsZXMgZW50cmllcyBhZnRlciByZWJvb3QsCisJICAgIHVzaW5nIHRoZSBwZXJzaXN0ZW50IGxlYXNlIGRhdGFiYXNlLCBhbmQgcmVtb3ZpbmcgdGhlbQorCSAgICB3aGVuIGEgaG9zdCBsZWF2ZXMgYW5kIGl0cyBESENQIGxlYXNlIGV4cGlyZXMuCisKKwkgICAgRml4IHVuYWxpZ25lZCBhY2Nlc3MgcHJvYmxlbSB3aGljaCBjYXVzZWQgd3JvbmcgbG9nCisJICAgIG1lc3NhZ2VzIHdpdGggc29tZSBjbGllbnRzIG9uIHNvbWUgYXJjaGl0ZWN0dXJlcy4gVGhhbmtzCisJICAgIHRvIEZyYW5jb2lzLVhhdmllciBMZSBCYWlsIGZvciB0aGUgYnVncmVwb3J0LgorCisJICAgIEZpeGVkIHByb2JsZW0gd2l0aCBESENQUkVMRUFTRSBhbmQgbXVsdGktYWRkcmVzcworCSAgICBpbnRlcmZhY2VzLiBFbmhhbmNlZCBjb250cmliL3dydC9kaGNwX3JlbGVhc2UgdG8gY29wZQorCSAgICB1bmRlciB0aGVzZSBjaXJjdW1zdGFuY2VzIHRvby4gVGhhbmtzIHRvIEVsZG9uIFppZWdsZXIgZm9yCisJICAgIGlucHV0IG9uIHRoaXMuCisKKwkgICAgVXBkYXRlZCBGcmVuY2ggdHJhbnNsYXRpb246IHRoYW5rcyB0byBHaWxkYXMgTGUgTmFkYW4uCisKKwkgICAgVXBncmFkZWQgdGhlIG5hbWUgaGFzaCBmdW5jdGlvbiBpbiB0aGUgRE5TIGNhY2hlLiBUaGFua3MKKwkgICAgdG8gT2xlZyBLaG92YXlrbyBmb3IgZ29vZCB3b3JrIG9uIHRoaXMuCisKKwkgICAgQWRkZWQgLS1jbGVhci1vbi1yZWxvYWQgZmxhZy4gIFN1Z2dlc3Rpb24gZnJvbSBKb2hhbm5lcworCSAgICBTdGV6ZW5iYWNoLgorCisJICAgIFRyZWF0IGEgbmFtZXNlcnZlciBhZGRyZXNzIG9mIDAuMC4wLjAgYXMgIm5vdGhpbmciLiBFcndpbiAKKyAgICAgICAgICAgIENhYnJlcmEgc3BvdHRlZCB0aGF0IHNwZWNpZnlpbmcgYSBuYW1lc2VydmVyIGFzIDAuMC4wLjAgCisJICAgIGJyZWFrcyB0aGluZ3MgYmFkbHk7IHRoaXMgaXMgYmVjYXVzZSB0aGUgbmV0d29yayBzdGFjaworCSAgICB0cmVhdHMgaXMgYXMgInRoaXMgaG9zdCIgYW5kIGFuIGVuZGxlc3MgbG9vcCBlbnN1ZXMuCisJCSAgIAorICAgICAgICAgICAgQWRkZWQgV2VibWluIG1vZHVsZSBpbiBjb250cmliL3dlYm1pbi4gVGhhbmtzIHRvIE5laWwKKyAgICAgICAgICAgIEZpc2hlciBmb3IgdGhhdC4KKwordmVyc2lvbiAyLjM1CisJICAgIEdlbmVyYXRlIGFuICJvbGQiIHNjcmlwdCBldmVudCB3aGVuIGEgY2xpZW50IGRvZXMgYSBESENQUkVRVUVTVAorCSAgICBpbiBJTklULVJFQk9PVCBvciBTRUxFQ1RJTkcgc3RhdGUgYW5kIHRoZSBsZWFzZSBhbHJlYWR5CisJICAgIGV4aXN0cy4gU3VwcGx5IHZlbmRvciBhbmQgdXNlciBjbGFzcyBpbmZvcm1hdGlvbiB0byB0aGVzZQorCSAgICBzY3JpcHQgY2FsbHMuCisKKwkgICAgQWRkZWQgc3VwcG9ydCBmb3IgRHJhZ29uZmx5IEJTRCB0byBzcmMvY29uZmlnLmgKKworCSAgICBSZW1vdmVkICJVcGdyYWRpbmcgdG8gMi4wIiBkb2N1bWVudCwgd2hpY2ggaXMgYW5jaWVudAorCSAgICBoaXN0b3J5IG5vdy4KKworCSAgICBUd2VhayBESENQIG5ldHdvcmtpbmcgY29kZSBmb3IgQlNELCBlc3AgT3BlbkJTRC4gQWRkZWQgYSAKKwkgICAgd29ya2Fyb3VuZCBmb3IgYSBidWcgaW4gT3BlbkJTRCA0LjA6IHRoZXJlIHNob3VsZCBmaW5hbGx5CisgICAgICAgICAgICBiZSBzdXBwb3J0IGZvciBtdWx0aXBsZSBpbnRlcmZhY2VzIHVuZGVyIE9wZW5CU0Qgbm93LgorCSAgICBOb3RlIHRoYXQgbm8gdmVyc2lvbiBvZiBkbnNtYXNxIGJlZm9yZSAyLjM1IHdpbGwgd29yayBmb3IgCisJICAgIERIQ1AgdW5kZXIgT3BlbkJTRCA0LjAgYmVjYXVzZSBvZiBhIGtlcm5lbCBidWcuCisJICAgIFRoYW5rcyB0byBDbGF1ZGlvIEpla2VyLCBKZWIgQ2FtcGJlbGwgYW5kIENyaXN0b2JhbCAKKwkgICAgUGFsbWVyIGZvciBoZWxwIHdpdGggdGhpcy4KKworCSAgICBPcHRpbWlzZWQgdGhlIGNhY2hlIGNvZGUgZm9yIHRoZSBjYXNlIG9mIGxhcmdlCisJICAgIC9ldGMvaG9zdHMuIFRoaXMgaXMgbWFpbmx5IHRvIHJlbW92ZSB0aGUgTyhuLXNxdWFyZWQpCisJICAgIGFsZ29yaXRobSB3aGljaCBtYWRlIHJlYWRpbmcgbGFyZ2UgKDUwMDAwIGxpbmVzKSBmaWxlcyAKKwkgICAgc2xvdywgYnV0IGl0IGFsc28gdGFrZXMgaW50byBhY2NvdW50IHRoZSBzaXplIG9mIAorCSAgICAvZXRjL2hvc3RzIHdoZW4gYnVpbGRpbmcgaGFzaCB0YWJsZXMsIHNvIG92ZXJhbGwgCisJICAgIHBlcmZvcm1hbmNlIHNob3VsZCBiZSBiZXR0ZXIuIFRoYW5rcyB0byAia29rbyIgZm9yIAorCSAgICBwb2ludGluZyBvdXQgdGhlIHByb2JsZW0uCisKK3ZlcnNpb24gMi4zNgorCSAgICBBZGRlZCAtLWRoY3AtaWdub3JlLW5hbWVzIGZsYWcgd2hpY2ggdGVsbHMgZG5zbWFzcSBub3QgdG8KKwkgICAgdXNlIG5hbWVzIHByb3ZpZGVkIGJ5IERIQ1AgY2xpZW50cy4gU3VnZ2VzdGlvbiBmcm9tIAorCSAgICBUaG9tYXMgTSBTdGVlbmhvbGR0LgorCisJICAgIFNlbmQgbmV0bWFzayBhbmQgYnJvYWRjYXN0IGFkZHJlc3MgREhDUCBvcHRpb25zIGFsd2F5cywKKwkgICAgZXZlbiBpZiB0aGUgY2xpZW50IGRvZXNuJ3QgcmVxdWVzdCB0aGVtLiBUaGlzIG1ha2VzIGEgZmV3CisJICAgIG9kZCBjbGllbnRzIHdvcmsgYmV0dGVyLgorCisJICAgIEFkZGVkIHNpbXBsZSBURlRQIGZ1bmN0aW9uLCBvcHRpbWlzZWQgZm9yIG5ldC1ib290LiBJdCBpcworCSAgICBub3cgcG9zc2libGUgdG8gbmV0IGJvb3QgaG9zdHMgdXNpbmcgb25seSBkbnNtYXNxLiBUaGUKKwkgICAgVEZUUCBzZXJ2ZXIgaXMgcmVhZC1vbmx5LCBiaW5hcnktbW9kZSBvbmx5LCBhbmQgZGVzaWduZWQgdG8gYmUKKwkgICAgc2VjdXJlOyBpdCBhZGRzIGFib3V0IDRLIHRvIHRoZSBkbnNtYXNxIGJpbmFyeS4gCisgCisJICAgIFN1cHBvcnQgREhDUCBvcHRpb24gMTIwLCBTSVAgc2VydmVycywgKFJGQyAzMzYxKS4gQm90aAorICAgICAgICAgICAgZW5jb2RpbmdzIGFyZSBzdXBwb3J0ZWQsIHNvIGJvdGggLS1kaGNwLW9wdGlvbj0xMjAsMTkyLjE2OC4yLjMKKyAgICAgICAgICAgIGFuZAktLWRoY3Atb3B0aW9uPTEyMCxzaXAuZXhhbXBsZS5uZXQgd2lsbCB3b3JrLiBCcmlhbgorICAgICAgICAgICAgQ2FuZGxlciBwb2ludGVkIG91dCB0aGUgbmVlZCBmb3IgdGhpcy4KKworCSAgICBBbGxvdyBzcGFjZXMgaW4gZG9tYWluIG5hbWVzLCB0byBzdXBwb3J0IEROUy1TRC4KKworCSAgICBBZGQgLS1wdHItcmVjb3JkIGZsYWcsIGFnYWluIGZvciBETlMtU0QuIFRoYW5rcyB0byBTdGVwaGFuIAorCSAgICBTb2tvbG93IGZvciB0aGUgc3VnZ2VzdGlvbi4KKwkgICAgCisJICAgIFRvbGVyYXRlIGxlYWRpbmcgc3BhY2Ugb24gbGluZXMgaW4gdGhlIGNvbmZpZyBmaWxlLiBUaGFua3MKKwkgICAgdG8gTHVpZ2kgUml6em8gZm9yIHBvaW50aW5nIHRoaXMgb3V0LgorCisJICAgIEZpeGVkIG5ldGxpbmsuYyB0byBjb3BlIHdpdGggaGVhZGVycyBmcm9tIHRoZSBMaW51eCAyLjYuMTkKKwkgICAga2VybmVsLiBUaGFua3MgdG8gUGhpbGlwIFdhbGwgZm9yIHRoZSBidWcgcmVwb3J0LgorCisJICAgIEFkZGVkIC0tZGhjcC1icmlkZ2Ugb3B0aW9uLCBidXQgb25seSB0byB0aGUgRnJlZUJTRAorCSAgICBidWlsZC4gVGhpcyBmaXhlcyBhbiBvZGRpdHkgd2l0aCBhIGEgcGFydGljdWxhciBicmlkZ2VkCisJICAgIG5ldHdvcmsgY29uZmlndXJhdGlvbiBvbiBGcmVlQlNELiBUaGFua3MgdG8gTHVpZ2kgUml6em8KKwkgICAgZm9yIHRoZSBwYXRjaC4KKworCSAgICBBZGRlZCBGQVEgZW50cnkgYWJvdXQgcnVubmluZyBkbnNtYXNxIGluIGEgTGludXgKKwkgICAgdnNlcnZlci4gVGhhbmtzIHRvIEdpbGRhcyBsZSBOYWRhbiBmb3IgdGhlIGluZm9ybWF0aW9uLiAgCisKKwkgICAgRml4ZWQgcHJvYmxlbSB3aXRoIG9wdGlvbiBwYXJzaW5nIHdoaWNoIGludGVycHJldGVkICIvIiBhcworCSAgICBhbiBhZGRyZXNzIGFuZCBub3QgYSBzdHJpbmcuIFRoYW5rcyB0byBMdWlnaSBSaXp6bworCSAgICBmb3IgdGhlIHBhdGNoLgorCisJICAgIElnbm9yZSB0aGUgLS1kb21haW4tbmVlZGVkIGZsYWcgd2hlbiBmb3J3YXJkaW5nIE5TCisJICAgIGFuZCBTT0EgcXVlcmllcywgc2luY2UgTlMgcXVlcmllcyBvZiBUTERzIGFyZSBhbHdheXMgbGVnaXQuCisJICAgIE1hcmN1cyBCZXR0ZXIgcG9pbnRlZCBvdXQgdGhpcyBwcm9ibGVtLgorCisJICAgIFRha2UgY2FyZSB0byBmb3J3YXJkIHNpZ25lZCBETlMgcmVxdWVzdHMgYml0LXBlcmZlY3QsIHNvCisJICAgIGFzIG5vdCB0byBhZmZlY3QgdGhlIHZhbGlkaXR5IG9mIHRoZSBzaWduYXR1cmUuIFRoaXMKKwkgICAgc2hvdWxkIGFsbG93IERETlMgdXBkYXRlcyB0byBiZSBmb3J3YXJkZWQuCisKK3ZlcnNpb24gMi4zNworICAgICAgICAgICAgQWRkIGJldHRlciBzdXBwb3J0IGZvciBSRkMtMjg1NSBESENQLW92ZXItZmlyZXdpcmUgYW5kIFJGQworICAgICAgICAgICAtNDM5MCBESENQLW92ZXItSW5maW5pQmFuZC4gQSBnb29kIHN1Z2dlc3Rpb24gZnJvbSBLYXJsIFN2ZWMuCisKKwkgICAgU29tZSBlZmZpY2llbmN5IHR3ZWFrcyB0byB0aGUgY2FjaGUgY29kZSBmb3IgdmVyeSBsYXJnZQorCSAgICAvZXRjL2hvc3RzIGZpbGVzLiBTaG91bGQgaW1wcm92ZSByZXZlcnNlIChhZGRyZXNzLT5uYW1lKQorCSAgICBsb29rdXBzIGFuZCBnYXJiYWdlIGNvbGxlY3Rpb24uIFRoYW5rcyB0byBKYW4gJ1JlZEJ1bGx5JworCSAgICBTZWlmZmVydCBmb3IgaW5wdXQgb24gdGhpcy4KKworCSAgICBGaXggcmVncmVzc2lvbiBpbiAyLjM2IHdoaWNoIG1hZGUgYm9ndXMtbnhkb21haW4KKwkgICAgYW5kIEROUyBjYWNoaW5nIHVucmVsaWFibGUuIFRoYW5rcyB0byBEZW5uaXMgRGVEb25hdGlzCisJICAgIGFuZCBKYW4gU2VpZmZlcnQgZm9yIGJ1ZyByZXBvcnRzLgorCisJICAgIE1ha2UgREhDUCBlbmNhcHN1bGF0ZWQgdmVuZG9yLWNsYXNzCW9wdGlvbnMgc2FuZS4gQmUKKwkgICAgd2FybmVkIHRoYXQgc29tZSBjb25jZWl2YWJsZSBleGlzdGluZyBjb25maWd1cmF0aW9ucyAKKwkgICAgdXNpbmcgdGhlc2UgbWF5IGJyZWFrLCBidXQgdGhleSB3b3JrIGluIGEgbXVjaCAKKwkgICAgc2ltcGxlciBhbmQgbW9yZSBsb2dpY2FsIHdheSBub3cuIFByZXBlbmRpbmcKKwkgICAgInZlbmRvcjo8Y2xpZW50LWlkPiIgdG8gYW4gb3B0aW9uIGVuY2Fwc3VsYXRlcyBpdCAKKwkgICAgaW4gb3B0aW9uIDQzLCBhbmQgdGhlIG9wdGlvbiBpcyBzZW50IG9ubHkgaWYgdGhlIAorCSAgICBjbGllbnQtc3VwcGxpZWQgdmVuZG9yLWNsYXNzIHN1YnN0cmluZy1tYXRjaGVzIHdpdGggCisJICAgIHRoZSBnaXZlbiBjbGllbnQtaWQuIFRoYW5rcyB0byBEZW5uaXMgRGVEb25hdGlzIGZvciAKKwkgICAgaGVscCB3aXRoIHRoaXMuCisKKwkgICAgQXBwbHkgcGF0Y2ggZnJvbSBKYW4gU2VpZmZlcnQgdG8gdGlkeSB1cCB0ZnRwLmMKKworCSAgICBBZGQgc3VwcG9ydCBmb3Igb3ZlcmxvYWRpbmcgdGhlIGZpbGVuYW1lIGFuZCBzZXJ2ZXJuYW1lIAorCSAgICBmaWVsZHMgaW4gREhDUCBwYWNrZXQuIFRoaXMgZ2l2ZXMgZXh0cmEgb3B0aW9uLXNwYWNlIHdoZW4KKwkgICAgdGhlc2UgZmllbGRzIGFyZSBub3QgYmVpbmcgdXNlZCBvciB3aXRoIGEgbW9kZXJuIGNsaWVudAorCSAgICB3aGljaCBzdXBwb3J0cyBtb3ZpbmcgdGhlbSBpbnRvIG9wdGlvbnMuCisKKwkgICAgQWRkZWQgYSBMSU1JVFMgc2VjdGlvbiB0byB0aGUgbWFuLXBhZ2UsIHdpdGggZ3VpZGFuY2Ugb24KKwkgICAgbWF4aW11bSBudW1iZXJzIG9mIGNsaWVudHMsIGZpbGUgc2l6ZXMgYW5kIHR1bmluZy4KKworcmVsZWFzZSAyLjM4CisJICAgIEZpeCBjb21waWxhdGlvbiBvbiAqQlNELiBUaGFua3MgdG8gVG9tIEhlbnNlbC4KKworCSAgICBEb24ndCBzZW5kIGxlbmd0aCB6ZXJvIERIQ1Agb3B0aW9uIDQzIGFuZCBjb3BlIHdpdGggCisJICAgIGVuY2Fwc3VsYXRlZCBvcHRpb25zIHdob3NlIHRvdGFsIGxlbmd0aCBleGNlZWRzIDI1NSBvY3RldHMKKwkgICAgYnkgc3BsaXR0aW5nIHRoZW0gaW50byBtdWx0aXBsZSBvcHRpb24gNDMgcGllY2VzLgorCisJICAgIEF2b2lkIHF1ZXJpZXMgYmVpbmcgcmV0cmllZCBmb3JldmVyIHdoZW4gLS1zdHJpY3Qtb3JkZXIgaXMKKwkgICAgc2V0IGFuZCBhbiB1cHN0cmVhbSBzZXJ2ZXIgcmV0dXJucyBhIFNFUlZGQUlMCisJICAgIGVycm9yLiBUaGFua3MgdG8gSm9oYW5uZXMgU3RlemVuYmFjaCBmb3Igc3BvdHRpbmcgdGhpcy4KKworCSAgICBGaXggQk9PVFAgc3VwcG9ydCwgYnJva2VuIGluIHZlcnNpb24gMi4zNy4KKworCSAgICBBZGQgZXhhbXBsZSBkaGNwLW9wdGlvbnMgZm9yIEV0aGVyYm9vdC4KKworCSAgICBBZGQgXGUgKGZvciBBU0NJSSBFU0NhcGUpIHRvIHRoZSBzZXQgb2YgdmFsaWQgZXNjYXBlcworCSAgICBpbiBjb25maWctZmlsZSBzdHJpbmdzLgorCisJICAgIEFkZGVkIC0tZGhjcC1vcHRpb24tZm9yY2UgZmxhZyBhbmQgZXhhbXBsZXMgaW4gdGhlCisJICAgIGNvbmZpZ3VyYXRpb24gZmlsZSB3aGljaCB1c2UgdGhpcyB0byBjb250cm9sIFBYRUxpbnV4LgorCisJICAgIEFkZGVkIC0tdGZ0cC1uby1ibG9ja3NpemUgb3B0aW9uLgorCisJICAgIFNldCBuZXRpZCB0YWcgImJvb3RwIiB3aGVuIEJPT1RQIChyYXRoZXIgdGhhbiBESENQKSBpcyBpbgorCSAgICB1c2UuIFRoaXMgbWFrZXMgaXQgZWFzeSB0byBjdXN0b21pc2Ugd2hpY2ggb3B0aW9ucyBhcmUKKwkgICAgc2VudCB0byBCT09UUCBjbGllbnRzLiAoQk9PVFAgYWxsb3dzIG9ubHkgNjQgb2N0ZXRzIGZvcgorCSAgICBvcHRpb25zLCBzbyBpdCBjYW4gYmUgbmVjZXNzYXJ5IHRvIHRyaW0gdGhpbmdzLikKKworCSAgICBGaXggcmFyZSBoYW5nIGluIGNhY2hlIGNvZGUsIGEgMi4zNyByZWdyZXNzaW9uLiBUaGlzCisJICAgIHByb2JhYmx5IG5lZWRzIGFuIGluZmluaXRlIERIQ1AgbGVhc2UgYW5kIHNvbWUgYmFkIGx1Y2sgdG8KKwkgICAgdHJpZ2dlci4gVGhhbmtzIHRvIERldGxlZiBSZWljaGVsdCBmb3IgYnVnIHJlcG9ydHMgYW5kIHRlc3RpbmcuCisKK3JlbGVhc2UgMi4zOQorCSAgICBBcHBseSBwYXRjaCBmcm9tIE1pa2UgQmFrZXIvT3BlbldSVCB0byBlbnN1cmUgdGhhdCBuYW1lcworCSAgICBsaWtlICJsb2NhbGhvc3QuIiBpbiAvZXRjL2hvc3RzIHdpdGggdHJhaWxpbmcgcGVyaW9kIAorCSAgICBhcmUgdHJlYXRlZCBhcyBmdWxseS1xdWFsaWZpZWQuCisKKwkgICAgVG9sZXJhdGUgYW5kIGlnbm9yZSBzcGFjZXMgYXJvdW5kIGNvbW1hcyBpbiB0aGUKKwkgICAgY29uZmlndXJhdGlvbiBmaWxlIGluIGFsbCBjaXJjdW1zdGFuY2VzLiBOb3RlIHRoYXQgdGhpcworCSAgICBtYXkgY2hhbmdlIHRoZSBtZWFuaW5nIG9mIGEgZmV3IGV4aXN0aW5nIGNvbmZpZyBmaWxlcywgZm9yCisJICAgIGluc3RhbmNlCisJICAgIHR4dC1yZWNvcmQ9bXlkb21haW4uY29tLCBzdHJpbmcKKwkgICAgd291bGQgaGF2ZSBhIGxlYWRpbmcgc3BhY2UgaW4gdGhlIHN0cmluZyBiZWZvcmUsIGFuZCBub3cKKwkgICAgd2lsbCBub3QuIFRvIGdldCB0aGUgb2xkIGJlaGF2aW91ciBiYWNrLCB1c2UgcXVvdGVzOgorCSAgICB0eHQtcmVjb3JkPW15ZG9tYWluLmNvbSwiIHN0cmluZyIKKworCSAgICAvYSBpcyBubyBsb25nZXIgYSB2YWxpZCBlc2NhcGUgaW4gcXVvdGVkIHN0cmluZ3MuCisKKwkgICAgQWRkZWQgc3ltYm9saWMgREhDUCBvcHRpb24gbmFtZXMuIEluc3RlYWQgb2YKKwkgICAgZGhjcC1vcHRpb24gPSAzLCAxLjIuMy40IAorCSAgICBpdCBpcyBub3cgcG9zc2libGUgdG8gZG8KKwkgICAgZGhjcC1vcHRpb24gPSBvcHRpb246cm91dGVyLCAxLjIuMy40CisJICAgIFRvIHNlZSB0aGUgbGlzdCBvZiBrbm93biBESENQIG9wdGlvbnMsIHVzZSB0aGUgCisgICAgICAgICAgICBjb21tYW5kICJkbnNtYXNxIC0taGVscCBkaGNwIgorCSAgICBUaGFua3MgdG8gTHVpZ2kgUml6em8gZm9yIGEgcGF0Y2ggYW5kIGdvb2Qgd29yayBvbiB0aGlzLgorCisJICAgIE92ZXJoYXVsZWQgdGhlIGxvZyBjb2RlIHNvIHRoYXQgbG9nZ2luZyBjYW4gYmUgYXN5bmNocm9ub3VzOyAKKwkgICAgZG5zbWFzcSB0aGVuIG5vIGxvbmdlciBibG9ja3Mgd2FpdGluZyBmb3IgdGhlIHN5c2xvZygpIGxpYnJhcnkKKwkgICAgY2FsbC4gVGhpcyBpcyBpbXBvcnRhbnQgb24gc3lzdGVtcyB3aGVyZSBzeXNsb2cKKwkgICAgaXMgYmVpbmcgdXNlZCB0byBsb2cgb3ZlciB0aGUgbmV0d29yayAoYW5kIHRoZXJlZm9yZSBkb2luZworCSAgICBETlMgbG9va3VwcykgYW5kIHN5c2xvZyBpcyB1c2luZyBkbnNtYXNxIGFzIGl0cyBETlMKKwkgICAgc2VydmVyLiBIYXZpbmcgZG5zbWFzcSBibG9jayBhd2FpdGluZyBzeXNsb2cgdW5kZXIgCisJICAgIHN1Y2ggY2lyY3Vtc3RhbmNlcyBjYW4gbGVhZCB0byBzeXNsb2cgYW5kIGRuc21hc3EgCisJICAgIGRlYWRsb2NraW5nLiBUaGUgbmV3IGJlaGF2aW91ciBpcyBlbmFibGVkIHdpdGggYSBuZXcKKwkgICAgIC0tbG9nLWFzeW5jIGZsYWcsIHdoaWNoIGNhbiBhbHNvIGJlIHVzZWQgdG8gdHVuZSB0aGUKKwkgICAgcXVldWUgbGVuZ3RoLiBQYXVsIENoYW1iZXJzIGZvdW5kIGFuZCBkaWFnbm9zZWQgCisJICAgIHRoaXMgdHJhcCBmb3IgdGhlIHVud2FyeS4gSGUgYWxzbyBkaWQgbXVjaCB0ZXN0aW5nIG9mIAorCSAgICB0aGUgc29sdXRpb24gYWxvbmcgd2l0aCBDYXJsb3MgQ2FydmFsaG8uCisKKwkgICAgLS1sb2ctZmFjaWxpdHkgY2FuIG5vdyB0YWtlIGEgZmlsZS1uYW1lIGluc3RlYWQgb2YgYSAKKwkgICAgZmFjaWxpdHkgbmFtZS4gV2hlbiB0aGlzIGlzIGRvbmUsIGRuc21hc3EgbG9ncyB0byB0aGUgCisJICAgIGZpbGUgYW5kIG5vdCB2aWEgc3lzbG9nLiAoRmFpbHVyZXMgZWFybHkgaW4gc3RhcnR1cCwgCisJICAgIHdoaWxzdCByZWFkaW5nIGNvbmZpZ3VyYXRpb24sIHdpbGwgc3RpbGwgZ28gdG8gc3lzbG9nLCAKKwkgICAgYW5kIHN5c2xvZyBpcyB1c2VkIGFzIGEgbG9nLW9mLWxhc3QtcmVzb3J0IGlmIHRoZSBmaWxlCisJICAgIGNhbm5vdCBiZSB3cml0dGVuLikKKworCSAgICBBZGRlZCAtLWxvZy1kaGNwIGZsYWcuIFN1Z2dlc3Rpb24gZnJvbSBDYXJsb3MgQ2FydmFsaG8uCisKKwkgICAgTWFkZSBCSU5ESVIsIE1BTkRJUiBhbmQgTE9DQUxFRElSIGluZGVwZW5kZW50bHkKKwkgICAgb3Zlci1yaWRlYWJsZSBpbiB0aGUgbWFrZWZpbGUuIFN1Z2dlc3Rpb24gZnJvbSBUaG9tYXMKKwkgICAgS2xhdXNuZXIuCisKKwkgICAgQWRkZWQgMTI3LjAuMC4wLzggYW5kIDE2OS4yNTQuMC4wLzE2IHRvIHRoZSBhZGRyZXNzCisJICAgIHJhbmdlcyBhZmZlY3RlZCBieSAtLWJvZ3VzLXByaXYuIFRoYW5rcyB0byAgUGF1bCAKKwkgICAgQ2hhbWJlcnMgZm9yIHRoZSBwYXRjaC4KKworCSAgICBGaXhlZCBmYWlsdXJlIG9mIFRGVFAgc2VydmVyIHdpdGggLS1saXN0ZW4tYWRkcmVzcy4gVGhhbmtzCisJICAgIHRvIFdpbGxpYW0gRGlua2VsIGZvciB0aGUgYnVnIHJlcG9ydC4KKworCSAgICBBZGRlZCAtLWRoY3AtY2lyY3VpdGlkIGFuZCAtLWRoY3AtcmVtb3RlaWQgZm9yIFJGQzMwNDYKKwkgICAgcmVsYXkgYWdlbnQgZGF0YSBtYXRjaGluZy4KKyAKKwkgICAgQWRkZWQgLS1kaGNwLXN1YnNjcmlkIGZvciBSRkMzOTkzIHN1YnNjcmliZXItaWQgcmVsYXkKKwkgICAgYWdlbnQgZGF0YSBtYXRjaGluZy4KKworCSAgICBDb3JyZWN0bHkgZ2FyYmFnZS1jb2xsZWN0IGNvbm5lY3Rpb25zIHdoZW4gdXBzdHJlYW0KKwkgICAgc2VydmVycyBnbyBhd2F5IGFzIGEgcmVzdWx0IG9mIERCdXMgdHJhbnNhY3Rpb25zLgorCisJICAgIEFsbG93IGFic29sdXRlIHBhdGhzIGZvciBURlRQIHRyYW5zZmVycyBldmVuIHdoZW4KKwkgICAgLS10ZnRwLXJvb3QgaXMgc2V0LCBhcyBsb25nIGFzIHRoZSBwYXRoIG1hdGNoZXMgdGhlIHJvb3QsCisJICAgIHNvIC92YXIvZnRwL215ZmlsZSBpcyBPSyB3aXRoIHRmdHAtcm9vdD0vdmFyL2Z0cC4KKwkgICAgVGhhbmtzIGZvciBUaG9tYXMgTWl6emkgZm9yIHRoZSBwYXRjaC4KKworCSAgICBVcGRhdGVkIFNwYW5pc2ggdHJhbnNsYXRpb24gLSB0aGFua3MgdG8gQ2hyaXMgQ2hhdGhhbS4KKworCSAgICBVcGRhdGVkIEZyZW5jaCB0cmFuc2xhdGlvbiAtIHRoYW5rcyB0byBHaWxkYXMgTGUgTmFkYW4uCisKKwkgICAgQWRkZWQgdG8gZXhhbXBsZSBjb25mIGZpbGUgZXhhbXBsZSBvZiByb3V0aW5nIFBUUiBxdWVyaWVzCisJICAgIGZvciBhIHN1Ym5ldCB0byBhIGRpZmZlcmVudCBuYW1lc2VydmVyLiBTdWdnZXN0aW9uIGZyb20KKwkgICAgSm9uIE5pY2hvbHNvbi4KKworCSAgICBBZGRlZCAtLWludGVyZmFjZS1uYW1lIG9wdGlvbi4gVGhpcyBwcm92aWRlcyBhIGZhY2lsaXR5IAorCSAgICB0byBhZGQgYSBkb21haW4gbmFtZSB3aXRoIGEgZHluYW1pYyBJUCBhZGRyZXNzIHRha2VuIGZyb20KKwkgICAgdGhlIGFkZHJlc3Mgb2YgYSBsb2NhbCBuZXR3b3JrIGludGVyZmFjZS4gVXNlZnVsIGZvcgorCSAgICBuZXR3b3JrcyB3aXRoIGR5bmFtaWMgSVBzLgorCit2ZXJzaW9uIDIuNDAKKyAgICAgICAgICAgIE1ha2UgU0lHVVNSMiBjbG9zZS1hbmQtcmVvcGVuIHRoZSBsb2dmaWxlIHdoZW4gbG9nZ2luZyAKKwkgICAgZGlyZWN0IHRvIGEgZmlsZS4gVGhhbmtzIHRvIENhcmxvcyBDYXJ2YWxobyBmb3IgCisJICAgIHN1Z2dlc3RpbmcgdGhpcy4gV2hlbiBhIGxvZ2ZpbGUgaXMgY3JlYXRlZCwgY2hhbmdlCisJICAgIGl0cyBvd25lcnNoaXAgdG8gdGhlIHVzZXIgZG5zbWFzcSB3aWxsIHJ1biBhcywgZG9uJ3QKKwkgICAgbGVhdmUgaXQgb3duZWQgYnkgcm9vdC4KKworCSAgICBTZXQgYSBzcGVjaWFsIHRhZywgImtub3duIiBmb3IgaG9zdHMgd2hpY2ggYXJlIG1hdGNoZWQgYnkKKwkgICAgYSBkaGNwLWhvc3Qgb3IgL2V0Yy9ldGhlcnMgbGluZS4gVGhpcyBpcyBlc3BlY2lhbGx5CisJICAgIHVzZWZ1bCB0byBiZSBhYmxlIHRvIGRvIC0tZGhjcC1pZ25vcmU9I2tub3duLCBsaWtlIElTQ3MKKwkgICAgImRlbnkgdW5rbm93bi1jbGllbnRzIi4KKworCSAgICBFeHBsaWNpdGx5IHNldCBhIHVtYXNrIGJlZm9yZSBjcmVhdGluZyB0aGUgbGVhc2VzIGZpbGUsCisJICAgIHJhdGhlciB0aGFuIHJlbHlpbmcgb24gd2hhdGV2ZXIgd2UgaW5oZXJpdGVkLiBUaGUKKwkgICAgcGVybWlzc2lvbnMJYXJlIHNldCB0byA2NDQuCisKKwkgICAgRml4IGhhbmRsaW5nIG9mIGZ1bGx5LXF1YWxpZmllZCBuYW1lcyBpbiAtLWRoY3AtaG9zdAorCSAgICBkaXJlY3RpdmVzIGFuZCBpbiAvZXRjL2V0aGVycy4gVGhlc2UgYXJlIG5vdyByZWplY3RlZCAKKwkgICAgaWYgdGhlIGRvbWFpbiBkb2Vzbid0IG1hdGNoIHRoYXQgZ2l2ZW4gYnkgLS1kb21haW4sCSAgCisJICAgIGFuZCB1c2VkIGNvcnJlY3RseSBvdGhlcndpc2UuIEJlZm9yZSwgcHV0dGluZworCSAgICBhIEZRRE4gaGVyZSBjb3VsZCBjYXVzZSB0aGUgd2hvbGUgRlFETiB0byBiZSB1c2VkIGFzCisJICAgIGhvc3RuYW1lLiBUaGFua3MgdG8gTWljaGFlbCBIZWltcG9sZCBmb3IgdGhlIGJ1ZyByZXBvcnQuCisKKwkgICAgTWFzc2l2ZSBidXQgdHJpdmlhbCBlZGl0IHRvIG1ha2UgdGhlICJkYWVtb24iIHZhcmlhYmxlIAorCSAgICBnbG9iYWwsIGluc3RlYWQgb2YgY29weWluZyB0aGUgc2FtZSB2YWx1ZSBhcm91bmQgYXMgdGhlCisJICAgIGZpcnN0IGFyZ3VtZW50IHRvIGhhbGYgdGhlIGZ1bmN0aW9ucyBpbiB0aGUgcHJvZ3JhbS4KKwkgICAgCisJICAgIFVwZGF0ZWQgU3BhbmlzaCBtYW5wYWdlIGFuZCBtZXNzYWdlIGNhdGFsb2cuIFRoYW5rcyAKKwkgICAgdG8gQ2hyaXMgQ2hhdGhhbS4KKwkgICAgCisJICAgIEFkZGVkIHBhdGNoIGZvciBzdXBwb3J0IG9mIEROUyBMT0MgcmVjb3JkcyBpbgorCSAgICBjb250cmliL2Rucy1sb2MuIFRoYW5rcyB0byBMb3JlbnogU2Nob3JpLgorCisJICAgIEZpeGVkIGVycm9yIGluIG1hbnBhZ2U6IGRoY3AtaWdub3JlLW5hbWUgLT4KKwkgICAgZGhjcC1pZ25vcmUtbmFtZXMuIFRoYW5rcyB0byBEYW5pZWwgTWVudHogZm9yIHNwb3R0aW5nCisJICAgIHRoaXMuCisKKwkgICAgVXNlIGNsaWVudC1pZCBhcyBoYXNoLXNlZWQgZm9yIERIQ1AgYWRkcmVzcyBhbGxvY2F0aW9uCisJICAgIHdpdGggRmlyZXdpcmUgYW5kIEluZmluaUJhbmQsIGFzIHRoZXNlIGRvbid0IHN1cHBseSBhbiBNQUMKKwkgICAgYWRkcmVzcy4gCisKKwkgICAgVHdlYWtlZCBURlRQIGZpbGUtb3BlbiBjb2RlIHRvIG1ha2UgaXQgYmVoYXZlIHNlbnNpYmx5CisJICAgIHdoZW4gdGhlIGZpbGVzeXN0ZW0gY2hhbmdlcyB1bmRlciBpdHMgZmVldC4KKworCSAgICBBZGRlZCBETlNNQVNRX1RJTUVfUkVNQUlOSU5HIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSAKKwkgICAgbGVhc2Utc2NyaXB0LgorCisJICAgIEFsd2F5cyBzZW5kIHJlcGxpZXMgdG8gREhDUElORk9STSByZXF1ZXN0cyB0byB0aGUgc291cmNlCisJICAgIG9mIHRoZSByZXF1ZXN0IGFuZCBub3QgdG8gdGhlIGFkZHJlc3MgaW4gY2lhZGRyLiBUaGlzCisJICAgIGFsbG93cyB0aGlyZC1wYXJ0eSBxdWVyaWVzLgorCSAgICAKKwkgICAgUmV0dXJuICJsZWFzZSB0aW1lIHJlbWFpbmluZyIgaW4gdGhlIHJlcGx5IHRvIGEgREhDUElORk9STQorCSAgICByZXF1ZXN0IGlmIHRoZXJlIGV4aXN0cyBhIGxlYXNlIGZvciB0aGUgaG9zdCBzZW5kaW5nIHRoZQorCSAgICByZXF1ZXN0LgorCisJICAgIEFkZGVkIC0tZGhjcC1ob3N0c2ZpbGUgb3B0aW9uLiBUaGlzIGdpdmVzIGEgc3VwZXJzZXQgb2YKKwkgICAgdGhlIGZ1bmN0aW9uYWxpdHkgcHJvdmlkZWQgYnkgL2V0Yy9ldGhlcnMuIFRoYW5rcyB0byAKKwkgICAgR3JlZyBLdXJ0emVyIGZvciB0aGUgc3VnZ2VzdGlvbi4KKworCSAgICBBY2NlcHQga2V5d29yZCAic2VydmVyIiBhcyBhIHN5bm9ueW0gZm9yICJuYW1lc2VydmVyIiBpbiAKKwkgICAgcmVzb2x2LmNvbmYuIFRoYW5rcyB0byBBbmRyZXcgQmFydGxldHQgZm9yIHRoZSByZXBvcnQuCisKKwkgICAgQWRkIC0tdGZ0cC11bmlxdWUtcm9vdCBvcHRpb24uIFN1Z2dlc3Rpb24gZnJvbSBEZXJtb3QKKwkgICAgQnJhZGxleS4KKworCSAgICBUd2VhayBURlRQIHJldHJ5IHRpbWVyIHRvIGF2b2lkIHByb2JsZW1zIHdpdGggZGlmZmljdWx0CisJICAgIGNsaWVudHMuIFRoYW5rcyB0byBEZXJtb3QgQnJhZGxleSBmb3IgYXNzaXN0YW5jZSB3aXRoCisJICAgIHRoaXMuIAorCSAgICAKKwkgICAgQ29udGludWUgdG8gdXNlIHVucXVhbGlmaWVkIGhvc3RuYW1lcyBwcm92aWRlZCBieSBESENQCisJICAgIGNsaWVudHMsIGV2ZW4gaWYgdGhlIGRvbWFpbiBwYXJ0IGlzIGlsbGVnYWwuIChUaGUgZG9tYWluCisJICAgIGlzCWlnbm9yZWQsIGFuZCBhbiBlcnJvciBsb2dnZWQuKSBQcmV2aW91c2x5IGluIHRoaXMKKwkgICAgc2l0dWF0aW9uLCB0aGUgd2hvbGUgbmFtZSB3b3VsZCBoYXZlIGJlZW4KKwkgICAgcmVqZWN0ZWQuIFRoYW5rcyB0byBKaW1hIGZvciB0aGUgcGF0Y2guCisJICAgIAorCSAgICBIYW5kbGUgRUlOVFIgcmV0dXJucyBmcm9tIHdhaXQoKSBjb3JyZWN0bHkgYW5kIHJlYXAKKwkgICAgb3VyIGNoaWxkcmVuJ3MgY2hpbGRyZW4gaWYgbmVjZXNzYXJ5LiBUaGlzIGZpeGVzIAorCSAgICBhIHByb2JsZW0gd2l0aCB6b21iaWUtY3JlYXRpb24gdW5kZXIgKkJTRCB3aGVuIHVzaW5nCisJICAgIC0tZGhjcC1zY3JpcHQuCisKKwkgICAgRXNjYXBlIHNwYWNlcyBpbiBob3N0bmFtZXMgd2hlbiB0aGV5IGFyZSBzdG9yZWQgaW4gdGhlCisJICAgIGxlYXNlcyBmaWxlIGFuZCBwYXNzZWQgdG8gdGhlIGxlYXNlLWNoYW5nZQorCSAgICBzY3JpcHQuIFN1Z2dlc3Rpb24gZnJvbSBCZW4gVm9pZ3QuCisKKwkgICAgUmUtcnVuIHRoZSBsZWFzZSBjaGFuZ2Ugc2NyaXB0IHdpdGggYW4gIm9sZCIgZXZlbnQgZm9yCisJICAgIGVhY2ggbGVhc2Ugd2hlbiBkbnNtYXNxIHJlY2VpdmVzIGEgU0lHSFVQLgorCisJICAgIEFkZGVkIG1vcmUgdXNlZnVsIGV4aXQgY29kZXMsIGluY2x1ZGluZyBwYXNzaW5nIG9uIGEKKwkgICAgbm9uLXplcm8gZXhpdCBjb2RlIGZyb20gdGhlIGxlYXNlLXNjcmlwdCAiaW5pdCIgY2FsbCB3aGVuCisJICAgIC0tbGVhc2VmaWxlLXJvIGlzIHNldC4KKworCSAgICBMb2cgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSB3aGlsc3QgdGhlIGRhZW1vbiBpcworCSAgICBydW5uaW5nLiBBbGxvY2F0aW9uIGZhaWx1cmVzIGR1cmluZyBzdGFydHVwIGFyZSBmYXRhbCwgCisJICAgIGJ1dCBsYWNrIG9mIG1lbW9yeSB3aGlsc3QgcnVubmluZyBpcyB3b3JrZWQgYXJvdW5kLgorCSAgICBUaGlzIHVzZWQgdG8gYmUgc2lsZW50LCBidXQgbm93IGlzIGxvZ2dlZC4KKworCSAgICBGaXhlZCBtaXNhbGlnbmVkIG1lbW9yeSBhY2Nlc3Mgd2hpY2ggY2F1c2VkIHByb2JsZW1zIG9uCisJICAgIEJsYWNrZmluIENQVXMuIFRoYW5rcyB0byBBbGV4IExhbmRhdSBmb3IgdGhlIHBhdGNoLgorCisJICAgIERvbid0IGluY2x1ZGUgKHVzZWxlc3MpIHNjcmlwdC1jYWxsaW5nIGNvZGUgd2hlbiBOT19GT1JLCisJICAgIGlzIHNldC4gU2luY2UgdGhpcyB0ZW5kcyB0byBiZSB1c2VkIG9uIHZlcnkgc21hbGwgdWNsaW51eCAKKwkgICAgc3lzdGVtcywgaXQncyB3b3J0aC13aGlsZSB0byBzYXZlIHNvbWUgY29kZS1zaXplLgorCisJICAgIERvbid0IHNldCBSRVVTRUFERFIgb24gVEZUUCBsaXN0ZW5pbmcgc29ja2V0LiBUaGVyZSdzIG5vCisJICAgIG5lZWQgdG8gZG8gc28sIGFuZCBpdCBjcmVhdGVzIGNvbmZ1c2luZyBiZWhhdmlvdXIgd2hlbgorCSAgICBpbmV0ZCBpcyBhbHNvIGxpc3RlbmluZyBvbiB0aGUgc2FtZSBwb3J0LiBUaGFua3MgdG8gRXJpaworCSAgICBCcm93biBmb3Igc3BvdHRpbmcgdGhlIHByb2JsZW0uCisKK3ZlcnNpb24gMi40MQorICAgICAgICAgICAgUmVtb3ZlIGRlcHJlY2F0ZWQgY2FsbHMgd2hlbiBjb21waWxlZCBhZ2FpbnN0IGxpYmRidXMgMS4xLgorCSAgICAKKwkgICAgRml4ICJzdHJpY3QtYWxpYXMiIHdhcm5pbmcgaW4gYnBmLmMKKworCSAgICBSZWR1Y2UgZGVwZW5kZW5jeSBvbiBHbnUtbWFrZSBpbiBidWlsZCBzeXN0ZW06IGRuc21hc3Egbm93CisJICAgIGJ1aWxkcyB3aXRoIHN5c3RlbSBtYWtlIHVuZGVyIE9wZW5CU0QuCisKKwkgICAgUG9ydCB0byBTb2xhcmlzLiBEbnNtYXNxIDEueCB1c2VkIHRvIHJ1biB1bmRlciBTb2xhcmlzLAorCSAgICBhbmQgdGhpcyByZWxlYXNlIGRvZXMgc28gYWdhaW4sIGZvciBTb2xhcmlzIDkgb3IgYmV0dGVyLgorCisJICAgIEFsbG93IHRoZSBETlMgZnVuY3Rpb24gdG8gYmUgY29tcGxldGVseSBkaXNhYmxlZCwgYnkKKwkgICAgc2V0dGluZyB0aGUgcG9ydCB0byB6ZXJvICItLXBvcnQ9MCIuIFRoZSBhbGxvd3MgZG5zbWFzcSB0bworCSAgICBiZSB1c2VkIGFzIGEgc2ltcGxlIERIQ1Agc2VydmVyLCBzaW1wbGUgVEZUUCBzZXJ2ZXIsIG9yCisJICAgIGJvdGgsIGJ1dCB3aXRob3V0IHRoZSBETlMgc2VydmVyIGdldHRpbmcgaW4gdGhlIHdheS4KKworCSAgICBGaXggYSBidWcgd2hlcmUgTlhET01BSU4gY291bGQgYmUgcmV0dXJuZWQgZm9yIGEgcXVlcnkKKwkgICAgZXZlbiBpZiB0aGUgbmFtZSdzIHZhbHVlIHdhcyBrbm93biBmb3IgYSBkaWZmZXJlbnQgcXVlcnkKKwkgICAgdHlwZS4gVGhpcyBidWcgY291bGQgYmUgcHJvZGRlZCB3aXRoIAorICAgICAgICAgICAgLS1sb2NhbD0vZG9tYWluLyAtLWFkZHJlc3M9L25hbWUuZG9tYWluLzEuMi4zLjQgCisJICAgIEFuIElQdjYgcXVlcnkgZm9yIG5hbWUuZG9tYWluIHdvdWxkIHJldHVybiBOWERPTUFJTiwgYW5kCisJICAgIG5vdCB0aGUgY29ycmVjdCBOT0VSUk9SLiBUaGFua3MgdG8gTGFycyBOb29kZW4gZm9yCisJICAgIHNwb3R0aW5nIHRoZSBidWcgYW5kIEppbWEgZm9yIGRpYWdub3NpcyBvZiB0aGUgcHJvYmxlbS4KKworCSAgICBBZGRlZCBwZXItc2VydmVyIHN0YXRzIHRvIHRoZSBpbmZvcm1hdGlvbiBsb2dnZWQgd2hlbgorCSAgICBkbnNtYXNxIGdldHMgU0lHVVNSMS4KKworCSAgICBBZGRlZCBjb3VudHMgb2YgcXVlcmllcyBmb3J3YXJkZWQgYW5kIHF1ZXJpZXMgYW5zd2VyZWQKKwkgICAgbG9jYWxseSAoZnJvbSB0aGUgY2FjaGUsIC9ldGMvaG9zdHMgb3IgY29uZmlnKS4KKworCSAgICBGaXhlZCBwb3NzaWJsZSBjcmFzaCBidWcgaW4gREJ1cyBJUHY2IGNvZGUuIFRoYW5rcyB0byBNYXR0CisJICAgIERvbXNjaCBhbmQgSmltYS4KKworCSAgICBUaWdodGVuIGNoZWNrcyBmb3IgY2xhc2hlcyBiZXR3ZWVuIGhvc3RzLWZpbGUgYW5kCisJICAgIERIQ1AtZGVyaXZlZCBuYW1lcy4gTXVsdGlwbGUgYWRkcmVzc2VzIGFzc29jaWF0ZWQgd2l0aCBhCisJICAgIG5hbWUgaW4gaG9zdHMtZmlsZSBubyBsb25nZXIgY29uZnVzZXMgdGhlIGNoZWNrLgorCisJICAgIEFkZCAtLWRoY3Atbm8tb3ZlcnJpZGUgb3B0aW9uIHRvIGZpeCBwcm9ibGVtcyB3aXRoIHNvbWUKKwkgICAgY29tYmluYXRpb25zIG9mIHN0YWdlIHplcm8gYW5kIHN0YWdlIG9uZQorCSAgICBib290bG9hZGVycy4gVGhhbmtzIHRvIFN0ZXZlIEFsZXhhbmRlciBmb3IgdGhlIGJ1ZyByZXBvcnQuCisgIAorCSAgICBBZGQgLS10ZnRwLXBvcnQtcmFuZ2Ugb3B0aW9uLiBUaGFua3MgdG8gRGFuaWVsIE1pZXJzd2EgZm9yCisJICAgIHRoZSBzdWdnZXN0aW9uLgorIAorCSAgICBBZGQgLS1zdG9wLWRucy1yZWJpbmQgb3B0aW9uLiBUaGFua3MgdG8gQ29sbGluIE11bGxpbmVyCisJICAgIGZvciB0aGUgcGF0Y2guCisKKwkgICAgQWRkZWQgR1BMIHZlcnNpb24gMyBhcyBhIGxpY2Vuc2Ugb3B0aW9uLgorIAorCSAgICBBZGRlZCAtLWFsbC1zZXJ2ZXJzIG9wdGlvbi4gVGhhbmtzIHRvIFBldGVyIE5hdWxscyBmb3IgdGhlCisJICAgIHBhdGNoLgorCisJICAgIEV4dGVuZCBzb3VyY2UgYWRkcmVzcyBtZWNoYW5pc20gc28gdGhhdCB0aGUgaW50ZXJmYWNlIHVzZWQKKwkgICAgdG8gY29udGFjdCBhbiB1cHN0cmVhbSBETlMgc2VydmVyIGNhbiBiZSBuYWlsZWQKKwkgICAgZG93bi4gU29tZXRoaW5nIGxpa2UgIi0tc2VydmVyPTEuMi4zLjRAZXRoMSIgd2lsbCBmb3JjZQorCSAgICB0aGUgdXNlIG9mIGV0aDEgZm9yIHRyYWZmaWMgdG8gRE5TLXNlcnZlciAxLjIuMy40LiBUaGlzCisJICAgIGZhY2lsaXR5IGlzIG9ubHkgYXZhaWxhYmxlIG9uIExpbnV4IGFuZCBTb2xhcmlzLiBUaGFua3MgdG8KKwkgICAgUGV0ZXIgTmF1bGxzIGZvciBwcm9tcHRpbmcgdGhpcy4JICAgICAKKwkKKwkgICAgQWRkIC0tZGhjcC1vcHRzZmlsZSBvcHRpb24uIFRoYW5rcyB0byBDYXJsb3MgQ2FydmFsaG8gZm9yCisgICAgICAgICAgICB0aGUgc3VnZ2VzdGlvbi4KKworCSAgICBGaXhlZCBmYWlsdXJlIHRvIHNldCBzb3VyY2UgYWRkcmVzcyBmb3Igc2VydmVyIGNvbm5lY3Rpb25zCisJICAgIHdoZW4gdXNpbmcgVENQLiBUaGFua3MgdG8gU2ltb24gQ2FwcGVyIGZvciBmaW5kaW5nIHRoaXMKKwkgICAgYnVnLgorCisJICAgIFJlZnVzZSB0byBnaXZlIGEgREhDUCBjbGllbnQgdGhlIGFkZHJlc3MgaXQgYXNrcyBmb3IgaWYKKwkgICAgdGhlIGFkZHJlc3MgcmFuZ2UgaW4gcXVlc3Rpb24gaXMgbm90IGF2YWlsYWJsZSB0byB0aGF0CisJICAgIHBhcnRpY3VsYXIgaG9zdC4gVGhhbmtzIHRvIENlZHJpYyBEdXZhbCBmb3IgdGhlIGJ1ZworCSAgICByZXBvcnQuIAorCisJICAgIENoYW5nZWQgYmVoYXZpb3Igb2YgREhDUCBzZXJ2ZXIgdG8gYWx3YXlzIHJldHVybiB0b3RhbCBsZW5ndGggb2YKKwkgICAgYSBuZXcgbGVhc2UgaW4gREhDUE9GRkVSLCBldmVuIGlmIGFuIGV4aXN0aW5nIGxlYXNlCisJICAgIGV4aXN0cy4gKEl0IHVzZWQgdG8gcmV0dXJuIHRoZSB0aW1lIHJlbWFpbmluZyBvbiB0aGUgbGVhc2UKKwkgICAgd2hlbiBvbmUgZXhpc3RlZC4pIFRoaXMgZml4ZXMgcHJvYmxlbXMgd2l0aCB0aGUgU29ueSBFcmljc3NvbgorCSAgICBLNjEwaSBwaG9uZS4gVGhhbmtzIHRvIEhha29uIFN0b3JkYWhsIGZvciBmaW5kaW5nIGFuZAorCSAgICBmaXhpbmcgdGhpcy4KKworCSAgICBBZGQgRE5TTUFTUV9JTlRFUkZBQ0UgdG8gdGhlIGVudmlyb25tZW50IG9mIHRoZQorCSAgICBsZWFzZS1jaGFuZ2Ugc2NyaXB0LiBUaGFua3MgdG8gTmlrb3MgTWF2cm9naWFubm9wb3Vsb3MgZm9yCisJICAgIHRoZSBwYXRjaC4KKworCSAgICBGaXhlZCBicm9rZW4gLS1hbGlhcyBmdW5jdGlvbmFsaXR5LiBUaGFua3MgdG8gTWljaGFlbAorCSAgICBNZWVsaXMgZm9yIHRoZSBidWcgcmVwb3J0LgorCisJICAgIEFkZGVkIEZyZW5jaCB0cmFuc2xhdGlvbiBvZiB0aGUgbWFuIHBhZ2UuIFRoYW5rIHRvIEdpbGRhcworCSAgICBMZSBOYWRhbiBmb3IgdGhhdC4KKworCSAgICBBZGQgLS1kaGNwLW1hdGNoIGZsYWcsIHRvIGNoZWNrIGZvciBhcmJpdHJhcnkgb3B0aW9ucyBpbgorCSAgICBESENQIG1lc3NhZ2VzIGZyb20gY2xpZW50cy4gVGhpcyBlbmFibGVzIHVzZSBvZiBkbnNtYXNxCisJICAgIHdpdGggZ1BYRS4gVGhhbmtzIHRvIFJhbmNlIEhhbGwgZm9yIHRoZSBzdWdnZXN0aW9uLgorCisJICAgIEFkZGVkIC0tZGhjcC1icm9hZGNhc3QsIHRvIGZvcmNlIGJyb2FkY2FzdCByZXBsaWVzIHRvIERIQ1AKKwkgICAgY2xpZW50cyB3aGljaCBuZWVkIHRoZW0gYnV0IGFyZSB0b28gZHVtYiBvciB0b28gb2xkIHRvCisJICAgIGFzay4gVGhhbmtzIHRvIEJvZG8gQmVsbHV0IGZvciB0aGUgc3VnZ2VzdGlvbi4KKworCSAgICBEaXNhYmxlIHBhdGgtTVRVIGRpc2NvdmVyeSBvbiBESENQIGFuZCBURlRQIHNvY2tldHMuIFRoaXMKKwkgICAgaXMgbmV2ZXIgbmVlZGVkLCBhbmQgdGhlIHByZXNlbmNlIG9mIERGIGZsYWdzIGluIHRoZSBJUAorCSAgICBoZWFkZXIgY29uZnVzZXMgc29tZSBicm9rZW4gUFhFIFJPTVMuIFRoYW5rcyBhZ2FpbiB0byBCb2RvCisJICAgIEJlbGx1dCBmb3Igc3BvdHRpbmcgdGhpcy4KKworCSAgICBGaXggcHJvYmxlbXMgd2l0aCBhZGRyZXNzZXMgd2hpY2ggaGF2ZSBtdWx0aXBsZSBQVFIKKwkgICAgcmVjb3JkcyAtIGFsbCBidXQgb25lIG9mIHRoZXNlIGNvdWxkIGdldCBsb3N0LiAKKworCSAgICBGaXggYnVnIHdpdGggLS1hZGRyZXNzIGFuZCBBTlkgcXVlcnkgdHlwZSBzZWVpbmcgUkVGVVNFRAorCSAgICByZXR1cm4gY29kZSBpbiByZXBsaWVzLiBUaGFua3MgdG8gTWlrZSBXcmlnaHQgZm9yIHNwb3R0aW5nCisJICAgIHRoZSBwcm9ibGVtLgorCisJICAgIFVwZGF0ZSBTcGFuaXNoIHRyYW5zbGF0aW9uLiBUaGFua3MgdG8gQ2hyaXMgQ2hhdGhhbS4KKworCSAgICBBZGQgLS1uZWctdHRsIG9wdGlvbi4KKwkgICAgCisJICAgIEFkZCB3YXJuaW5ncyBhYm91dCB0aGUgYmFkIGVmZmVjdHMgb2YgLS1maWx0ZXJ3aW4yayBvbgorCSAgICBTSVAsIFhNUFAgYW5kIEdvb2dsZS10YWxrIHRvIHRoZSBleGFtcGxlIGNvbmZpZyBmaWxlLgorCSAgICAKKwkgICAgRml4IHZhX2xpc3QgYWJ1c2UgaW4gbG9nLmMuIFRoaXMgZml4ZXMgY3Jhc2hlcyBvbiBwb3dlcnBjCisJICAgIHdoZW4gZGVidWcgbW9kZSBpcyBzZXQuIFRoYW5rcyB0byBDZWRyaWMgRHV2YWwgZm9yIHRoZQorCSAgICBwYXRjaC4gCisKK3ZlcnNpb24gMi40MgorICAgICAgICAgICAgRGVmaW5lIF9HTlVfU09VUkNFIHRvIGF2b2lkIHByb2JsZW1zIHdpdGggbGF0ZXIgZ2xpYmMKKyAgICAgICAgICAgIGhlYWRlcnMuIFRoYW5rcyB0byBKaW1hIGZvciBzcG90dGluZyB0aGUgcHJvYmxlbS4KKworCSAgICBBZGQgLS1kaGNwLWFsdGVybmF0ZS1wb3J0IG9wdGlvbi4gVGhhbmtzIHRvIEphbiBQc290YSBmb3IKKwkgICAgdGhlIHN1Z2dlc3Rpb24uCisKKwkgICAgRml4IHR5cG8gaW4gY29kZSB3aGljaCBpcyBvbmx5IHVzZWQgb24gQlNELCB3aGVuIERidXMgYW5kCisJICAgIElQdjYgc3VwcG9ydCBpcyBlbmFibGVkLiBUaGFua3MgdG8gUm95IE1hcnBsZXMuCisJICAgIAorCSAgICBVcGRhdGVkIFBvbGlzaCB0cmFuc2xhdGlvbnMgLSB0aGFuayB0byBKYW4gUHNvdGEuCisKKwkgICAgRml4IE9TIGRldGVjdGlvbiBsb2dpYyB0byBjb3BlIHdpdGggR05VL0ZyZWVCU0QuCisKKwkgICAgRml4IHVuaW5pdGlhbGlzZWQgdmFyaWFibGUgaW4gREJ1cyBjb2RlIC0gdGhhbmtzIHRvIFJveQorCSAgICBNYXJwbGVzLgorCisJICAgIEZpeCBuZXR3b3JrIGVudW1lcmF0aW9uIGNvZGUgdG8gd29yayBvbiBsYXRlciBOZXRCU0QgLQorCSAgICB0aGFua3MgdG8gUm95IE1hcnBsZXMuCisJICAgIAorCSAgICBQcm92aWRlIC0tZGhjcC1icmlkZ2Ugb24gYWxsIEJTRCB2YXJpYW50cy4KKworCSAgICBEZWZpbmUgX0xBUkdFRklMRV9TT1VSQ0Ugd2hpY2ggcmVtb3ZlcyBhbiBhcmJpdHJhcnkgMkdCCisgICAgICAgICAgICBsaW1pdCBvbiBsb2dmaWxlcy4gVGhhbmtzIHRvIFBhdWwgQ2hhbWJlcnMgZm9yIHNwb3R0aW5nIAorICAgICAgICAgICAgdGhlIHByb2JsZW0uCisKKwkgICAgRml4IFJGQzMwNDYgYWdlbnQtaWQgZWNobyBjb2RlLCBicm9rZW4gZm9yIG1hbnkKKwkgICAgcmVsZWFzZXMuIFRoYW5rcyB0byBKZXJlbXkgTGFpbmUgZm9yIHNwb3R0aW5nIHRoZSBwcm9ibGVtCisJICAgIGFuZCBwcm92aWRpbmcgYSBwYXRjaC4KKworCSAgICBBZGRlZCBTb2xhcmlzIDEwIHNlcnZpY2UgbWFuaWZlc3QgZnJvbSBEYXZpZCBDb25uZWxseSBpbgorCSAgICBjb250cmliL1NvbGFyaXMxMAorIAkgICAgCSAgICAgCisJICAgIEFkZCAtLWRoY3Atc2NyaXB0dXNlciBvcHRpb24uCSAgICAKKworCSAgICBTdXBwb3J0IG5ldyBjYXBhYmlsaXR5IGludGVyZmFjZSBvbiBzdWl0YWJsZSBMaW51eCAKKwkgICAga2VybmVscywgcmVtb3ZlcyAibGVnYWN5IHN1cHBvcnQgaW4gdXNlIiBtZXNzYWdlcy4gVGhhbmtzIAorICAgICAgICAgICAgdG8gSm9yZ2UgQmFzdG9zIGZvciBwb2ludGluZyB0aGlzIG91dC4gCisKKwkgICAgRml4IHN1YnRsZSBidWcgaW4gY2FjaGUgY29kZSB3aGljaCBjb3VsZCBjYXVzZSBkbnNtYXNxIHRvCisJICAgIGxvY2sgc3Bpbm5pbmcgQ1BVIGluIHJhcmUgY2lyY3Vtc3RhbmNlcy4gVGhhbmtzIHRvIEFsZXgKKwkgICAgQ2hla2hvbGtvIGZvciBidWcgcmVwb3J0cyBhbmQgaGVscCBkZWJ1Z2dpbmcuIAorCisJICAgIFN1cHBvcnQgbmV0YXNjaWkgdHJhbnNmZXIgbW9kZSBmb3IgVEZUUC4KKwpkaWZmIC0tZ2l0IGEvQ09QWUlORyBiL0NPUFlJTkcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjA1NDliZQotLS0gL2Rldi9udWxsCisrKyBiL0NPUFlJTkcKQEAgLTAsMCArMSwzNDAgQEAKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisJCSAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQorCisgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgICAgICAgICAgICAgICAgICAgICA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKwkJCSAgICBQcmVhbWJsZQorCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCitzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhpcworR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KK3VzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkKK3RoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworeW91ciBwcm9ncmFtcywgdG9vLgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAoreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKK3JpZ2h0cy4KKworICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKworICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQord2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCithdXRob3JzJyByZXB1dGF0aW9ucy4KKworICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CitwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorDAorCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6Cit0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQoraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCitXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKworWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCit5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorDAorVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgoraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwKK2FuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgordGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CitkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKK29uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKK2VudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Cit5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQord2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mCithIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgordGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwKK3VuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucworICAgIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKyAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91cgorICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKKyAgICBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0KKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBjKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBvZmZlcgorICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKyAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoCisgICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCisKK1RoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCitjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQorYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvCitjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCitzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUKK2FueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5Citmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQorb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQKK2l0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKworSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZworYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudAorYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCitkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKK2NvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisMCisgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCit2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCitIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCitkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCit0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KK3RoaXMgTGljZW5zZS4KKworICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCithbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCithcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisMCisgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwordGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCit0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24uCisKKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgordG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCitvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCitvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworCQkJICAgIE5PIFdBUlJBTlRZCisKKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCitGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECitPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCitSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCitSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCitPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECitUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCitQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworDAorCSAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKworICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0Citwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CitmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKworICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAordG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QKK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDE5eXkgIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKworCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcword2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKworICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgMTl5eSBuYW1lIG9mIGF1dGhvcgorICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkKK2JlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZQorbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4KKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKK3NjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmCituZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisKKyAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbQorICBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KKworICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5ODkKKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKworVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvCitwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQorY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlCitsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwKK1B1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvQ09QWUlORy12MyBiL0NPUFlJTkctdjMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTRhOWVkMAotLS0gL2Rldi9udWxsCisrKyBiL0NPUFlJTkctdjMKQEAgLTAsMCArMSw2NzQgQEAKKyAgICAgICAgICAgICAgICAgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAzLCAyOSBKdW5lIDIwMDcKKworIENvcHlyaWdodCAoQykgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gPGh0dHA6Ly9mc2Yub3JnLz4KKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZWFtYmxlCisKKyAgVGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGEgZnJlZSwgY29weWxlZnQgbGljZW5zZSBmb3IKK3NvZnR3YXJlIGFuZCBvdGhlciBraW5kcyBvZiB3b3Jrcy4KKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYW5kIG90aGVyIHByYWN0aWNhbCB3b3JrcyBhcmUgZGVzaWduZWQKK3RvIHRha2UgYXdheSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSB0aGUgd29ya3MuICBCeSBjb250cmFzdCwKK3RoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvCitzaGFyZSBhbmQgY2hhbmdlIGFsbCB2ZXJzaW9ucyBvZiBhIHByb2dyYW0tLXRvIG1ha2Ugc3VyZSBpdCByZW1haW5zIGZyZWUKK3NvZnR3YXJlIGZvciBhbGwgaXRzIHVzZXJzLiAgV2UsIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHVzZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3N0IG9mIG91ciBzb2Z0d2FyZTsgaXQgYXBwbGllcyBhbHNvIHRvCithbnkgb3RoZXIgd29yayByZWxlYXNlZCB0aGlzIHdheSBieSBpdHMgYXV0aG9ycy4gIFlvdSBjYW4gYXBwbHkgaXQgdG8KK3lvdXIgcHJvZ3JhbXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGVtIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0IGlmIHlvdQord2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdCBpbiBuZXcKK2ZyZWUgcHJvZ3JhbXMsIGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gcHJldmVudCBvdGhlcnMgZnJvbSBkZW55aW5nIHlvdQordGhlc2UgcmlnaHRzIG9yIGFza2luZyB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuICBUaGVyZWZvcmUsIHlvdSBoYXZlCitjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYKK3lvdSBtb2RpZnkgaXQ6IHJlc3BvbnNpYmlsaXRpZXMgdG8gcmVzcGVjdCB0aGUgZnJlZWRvbSBvZiBvdGhlcnMuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgcGFzcyBvbiB0byB0aGUgcmVjaXBpZW50cyB0aGUgc2FtZQorZnJlZWRvbXMgdGhhdCB5b3UgcmVjZWl2ZWQuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUKK29yIGNhbiBnZXQgdGhlIHNvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5Citrbm93IHRoZWlyIHJpZ2h0cy4KKworICBEZXZlbG9wZXJzIHRoYXQgdXNlIHRoZSBHTlUgR1BMIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6CisoMSkgYXNzZXJ0IGNvcHlyaWdodCBvbiB0aGUgc29mdHdhcmUsIGFuZCAoMikgb2ZmZXIgeW91IHRoaXMgTGljZW5zZQorZ2l2aW5nIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSBpdC4KKworICBGb3IgdGhlIGRldmVsb3BlcnMnIGFuZCBhdXRob3JzJyBwcm90ZWN0aW9uLCB0aGUgR1BMIGNsZWFybHkgZXhwbGFpbnMKK3RoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZSBzb2Z0d2FyZS4gIEZvciBib3RoIHVzZXJzJyBhbmQKK2F1dGhvcnMnIHNha2UsIHRoZSBHUEwgcmVxdWlyZXMgdGhhdCBtb2RpZmllZCB2ZXJzaW9ucyBiZSBtYXJrZWQgYXMKK2NoYW5nZWQsIHNvIHRoYXQgdGhlaXIgcHJvYmxlbXMgd2lsbCBub3QgYmUgYXR0cmlidXRlZCBlcnJvbmVvdXNseSB0bworYXV0aG9ycyBvZiBwcmV2aW91cyB2ZXJzaW9ucy4KKworICBTb21lIGRldmljZXMgYXJlIGRlc2lnbmVkIHRvIGRlbnkgdXNlcnMgYWNjZXNzIHRvIGluc3RhbGwgb3IgcnVuCittb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgc29mdHdhcmUgaW5zaWRlIHRoZW0sIGFsdGhvdWdoIHRoZSBtYW51ZmFjdHVyZXIKK2NhbiBkbyBzby4gIFRoaXMgaXMgZnVuZGFtZW50YWxseSBpbmNvbXBhdGlibGUgd2l0aCB0aGUgYWltIG9mCitwcm90ZWN0aW5nIHVzZXJzJyBmcmVlZG9tIHRvIGNoYW5nZSB0aGUgc29mdHdhcmUuICBUaGUgc3lzdGVtYXRpYworcGF0dGVybiBvZiBzdWNoIGFidXNlIG9jY3VycyBpbiB0aGUgYXJlYSBvZiBwcm9kdWN0cyBmb3IgaW5kaXZpZHVhbHMgdG8KK3VzZSwgd2hpY2ggaXMgcHJlY2lzZWx5IHdoZXJlIGl0IGlzIG1vc3QgdW5hY2NlcHRhYmxlLiAgVGhlcmVmb3JlLCB3ZQoraGF2ZSBkZXNpZ25lZCB0aGlzIHZlcnNpb24gb2YgdGhlIEdQTCB0byBwcm9oaWJpdCB0aGUgcHJhY3RpY2UgZm9yIHRob3NlCitwcm9kdWN0cy4gIElmIHN1Y2ggcHJvYmxlbXMgYXJpc2Ugc3Vic3RhbnRpYWxseSBpbiBvdGhlciBkb21haW5zLCB3ZQorc3RhbmQgcmVhZHkgdG8gZXh0ZW5kIHRoaXMgcHJvdmlzaW9uIHRvIHRob3NlIGRvbWFpbnMgaW4gZnV0dXJlIHZlcnNpb25zCitvZiB0aGUgR1BMLCBhcyBuZWVkZWQgdG8gcHJvdGVjdCB0aGUgZnJlZWRvbSBvZiB1c2Vycy4KKworICBGaW5hbGx5LCBldmVyeSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZSBwYXRlbnRzLgorU3RhdGVzIHNob3VsZCBub3QgYWxsb3cgcGF0ZW50cyB0byByZXN0cmljdCBkZXZlbG9wbWVudCBhbmQgdXNlIG9mCitzb2Z0d2FyZSBvbiBnZW5lcmFsLXB1cnBvc2UgY29tcHV0ZXJzLCBidXQgaW4gdGhvc2UgdGhhdCBkbywgd2Ugd2lzaCB0bworYXZvaWQgdGhlIHNwZWNpYWwgZGFuZ2VyIHRoYXQgcGF0ZW50cyBhcHBsaWVkIHRvIGEgZnJlZSBwcm9ncmFtIGNvdWxkCittYWtlIGl0IGVmZmVjdGl2ZWx5IHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB0aGUgR1BMIGFzc3VyZXMgdGhhdAorcGF0ZW50cyBjYW5ub3QgYmUgdXNlZCB0byByZW5kZXIgdGhlIHByb2dyYW0gbm9uLWZyZWUuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuCisKKyAgICAgICAgICAgICAgICAgICAgICAgVEVSTVMgQU5EIENPTkRJVElPTlMKKworICAwLiBEZWZpbml0aW9ucy4KKworICAiVGhpcyBMaWNlbnNlIiByZWZlcnMgdG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKworICAiQ29weXJpZ2h0IiBhbHNvIG1lYW5zIGNvcHlyaWdodC1saWtlIGxhd3MgdGhhdCBhcHBseSB0byBvdGhlciBraW5kcyBvZgord29ya3MsIHN1Y2ggYXMgc2VtaWNvbmR1Y3RvciBtYXNrcy4KKworICAiVGhlIFByb2dyYW0iIHJlZmVycyB0byBhbnkgY29weXJpZ2h0YWJsZSB3b3JrIGxpY2Vuc2VkIHVuZGVyIHRoaXMKK0xpY2Vuc2UuICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4gICJMaWNlbnNlZXMiIGFuZAorInJlY2lwaWVudHMiIG1heSBiZSBpbmRpdmlkdWFscyBvciBvcmdhbml6YXRpb25zLgorCisgIFRvICJtb2RpZnkiIGEgd29yayBtZWFucyB0byBjb3B5IGZyb20gb3IgYWRhcHQgYWxsIG9yIHBhcnQgb2YgdGhlIHdvcmsKK2luIGEgZmFzaGlvbiByZXF1aXJpbmcgY29weXJpZ2h0IHBlcm1pc3Npb24sIG90aGVyIHRoYW4gdGhlIG1ha2luZyBvZiBhbgorZXhhY3QgY29weS4gIFRoZSByZXN1bHRpbmcgd29yayBpcyBjYWxsZWQgYSAibW9kaWZpZWQgdmVyc2lvbiIgb2YgdGhlCitlYXJsaWVyIHdvcmsgb3IgYSB3b3JrICJiYXNlZCBvbiIgdGhlIGVhcmxpZXIgd29yay4KKworICBBICJjb3ZlcmVkIHdvcmsiIG1lYW5zIGVpdGhlciB0aGUgdW5tb2RpZmllZCBQcm9ncmFtIG9yIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0uCisKKyAgVG8gInByb3BhZ2F0ZSIgYSB3b3JrIG1lYW5zIHRvIGRvIGFueXRoaW5nIHdpdGggaXQgdGhhdCwgd2l0aG91dAorcGVybWlzc2lvbiwgd291bGQgbWFrZSB5b3UgZGlyZWN0bHkgb3Igc2Vjb25kYXJpbHkgbGlhYmxlIGZvcgoraW5mcmluZ2VtZW50IHVuZGVyIGFwcGxpY2FibGUgY29weXJpZ2h0IGxhdywgZXhjZXB0IGV4ZWN1dGluZyBpdCBvbiBhCitjb21wdXRlciBvciBtb2RpZnlpbmcgYSBwcml2YXRlIGNvcHkuICBQcm9wYWdhdGlvbiBpbmNsdWRlcyBjb3B5aW5nLAorZGlzdHJpYnV0aW9uICh3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uKSwgbWFraW5nIGF2YWlsYWJsZSB0byB0aGUKK3B1YmxpYywgYW5kIGluIHNvbWUgY291bnRyaWVzIG90aGVyIGFjdGl2aXRpZXMgYXMgd2VsbC4KKworICBUbyAiY29udmV5IiBhIHdvcmsgbWVhbnMgYW55IGtpbmQgb2YgcHJvcGFnYXRpb24gdGhhdCBlbmFibGVzIG90aGVyCitwYXJ0aWVzIHRvIG1ha2Ugb3IgcmVjZWl2ZSBjb3BpZXMuICBNZXJlIGludGVyYWN0aW9uIHdpdGggYSB1c2VyIHRocm91Z2gKK2EgY29tcHV0ZXIgbmV0d29yaywgd2l0aCBubyB0cmFuc2ZlciBvZiBhIGNvcHksIGlzIG5vdCBjb252ZXlpbmcuCisKKyAgQW4gaW50ZXJhY3RpdmUgdXNlciBpbnRlcmZhY2UgZGlzcGxheXMgIkFwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXMiCit0byB0aGUgZXh0ZW50IHRoYXQgaXQgaW5jbHVkZXMgYSBjb252ZW5pZW50IGFuZCBwcm9taW5lbnRseSB2aXNpYmxlCitmZWF0dXJlIHRoYXQgKDEpIGRpc3BsYXlzIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UsIGFuZCAoMikKK3RlbGxzIHRoZSB1c2VyIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoZSB3b3JrIChleGNlcHQgdG8gdGhlCitleHRlbnQgdGhhdCB3YXJyYW50aWVzIGFyZSBwcm92aWRlZCksIHRoYXQgbGljZW5zZWVzIG1heSBjb252ZXkgdGhlCit3b3JrIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuICBJZgordGhlIGludGVyZmFjZSBwcmVzZW50cyBhIGxpc3Qgb2YgdXNlciBjb21tYW5kcyBvciBvcHRpb25zLCBzdWNoIGFzIGEKK21lbnUsIGEgcHJvbWluZW50IGl0ZW0gaW4gdGhlIGxpc3QgbWVldHMgdGhpcyBjcml0ZXJpb24uCisKKyAgMS4gU291cmNlIENvZGUuCisKKyAgVGhlICJzb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsKK2ZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gICJPYmplY3QgY29kZSIgbWVhbnMgYW55IG5vbi1zb3VyY2UKK2Zvcm0gb2YgYSB3b3JrLgorCisgIEEgIlN0YW5kYXJkIEludGVyZmFjZSIgbWVhbnMgYW4gaW50ZXJmYWNlIHRoYXQgZWl0aGVyIGlzIGFuIG9mZmljaWFsCitzdGFuZGFyZCBkZWZpbmVkIGJ5IGEgcmVjb2duaXplZCBzdGFuZGFyZHMgYm9keSwgb3IsIGluIHRoZSBjYXNlIG9mCitpbnRlcmZhY2VzIHNwZWNpZmllZCBmb3IgYSBwYXJ0aWN1bGFyIHByb2dyYW1taW5nIGxhbmd1YWdlLCBvbmUgdGhhdAoraXMgd2lkZWx5IHVzZWQgYW1vbmcgZGV2ZWxvcGVycyB3b3JraW5nIGluIHRoYXQgbGFuZ3VhZ2UuCisKKyAgVGhlICJTeXN0ZW0gTGlicmFyaWVzIiBvZiBhbiBleGVjdXRhYmxlIHdvcmsgaW5jbHVkZSBhbnl0aGluZywgb3RoZXIKK3RoYW4gdGhlIHdvcmsgYXMgYSB3aG9sZSwgdGhhdCAoYSkgaXMgaW5jbHVkZWQgaW4gdGhlIG5vcm1hbCBmb3JtIG9mCitwYWNrYWdpbmcgYSBNYWpvciBDb21wb25lbnQsIGJ1dCB3aGljaCBpcyBub3QgcGFydCBvZiB0aGF0IE1ham9yCitDb21wb25lbnQsIGFuZCAoYikgc2VydmVzIG9ubHkgdG8gZW5hYmxlIHVzZSBvZiB0aGUgd29yayB3aXRoIHRoYXQKK01ham9yIENvbXBvbmVudCwgb3IgdG8gaW1wbGVtZW50IGEgU3RhbmRhcmQgSW50ZXJmYWNlIGZvciB3aGljaCBhbgoraW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgaW4gc291cmNlIGNvZGUgZm9ybS4gIEEKKyJNYWpvciBDb21wb25lbnQiLCBpbiB0aGlzIGNvbnRleHQsIG1lYW5zIGEgbWFqb3IgZXNzZW50aWFsIGNvbXBvbmVudAorKGtlcm5lbCwgd2luZG93IHN5c3RlbSwgYW5kIHNvIG9uKSBvZiB0aGUgc3BlY2lmaWMgb3BlcmF0aW5nIHN5c3RlbQorKGlmIGFueSkgb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgd29yayBydW5zLCBvciBhIGNvbXBpbGVyIHVzZWQgdG8KK3Byb2R1Y2UgdGhlIHdvcmssIG9yIGFuIG9iamVjdCBjb2RlIGludGVycHJldGVyIHVzZWQgdG8gcnVuIGl0LgorCisgIFRoZSAiQ29ycmVzcG9uZGluZyBTb3VyY2UiIGZvciBhIHdvcmsgaW4gb2JqZWN0IGNvZGUgZm9ybSBtZWFucyBhbGwKK3RoZSBzb3VyY2UgY29kZSBuZWVkZWQgdG8gZ2VuZXJhdGUsIGluc3RhbGwsIGFuZCAoZm9yIGFuIGV4ZWN1dGFibGUKK3dvcmspIHJ1biB0aGUgb2JqZWN0IGNvZGUgYW5kIHRvIG1vZGlmeSB0aGUgd29yaywgaW5jbHVkaW5nIHNjcmlwdHMgdG8KK2NvbnRyb2wgdGhvc2UgYWN0aXZpdGllcy4gIEhvd2V2ZXIsIGl0IGRvZXMgbm90IGluY2x1ZGUgdGhlIHdvcmsncworU3lzdGVtIExpYnJhcmllcywgb3IgZ2VuZXJhbC1wdXJwb3NlIHRvb2xzIG9yIGdlbmVyYWxseSBhdmFpbGFibGUgZnJlZQorcHJvZ3JhbXMgd2hpY2ggYXJlIHVzZWQgdW5tb2RpZmllZCBpbiBwZXJmb3JtaW5nIHRob3NlIGFjdGl2aXRpZXMgYnV0Cit3aGljaCBhcmUgbm90IHBhcnQgb2YgdGhlIHdvcmsuICBGb3IgZXhhbXBsZSwgQ29ycmVzcG9uZGluZyBTb3VyY2UKK2luY2x1ZGVzIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBzb3VyY2UgZmlsZXMgZm9yCit0aGUgd29yaywgYW5kIHRoZSBzb3VyY2UgY29kZSBmb3Igc2hhcmVkIGxpYnJhcmllcyBhbmQgZHluYW1pY2FsbHkKK2xpbmtlZCBzdWJwcm9ncmFtcyB0aGF0IHRoZSB3b3JrIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byByZXF1aXJlLAorc3VjaCBhcyBieSBpbnRpbWF0ZSBkYXRhIGNvbW11bmljYXRpb24gb3IgY29udHJvbCBmbG93IGJldHdlZW4gdGhvc2UKK3N1YnByb2dyYW1zIGFuZCBvdGhlciBwYXJ0cyBvZiB0aGUgd29yay4KKworICBUaGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IHVzZXJzCitjYW4gcmVnZW5lcmF0ZSBhdXRvbWF0aWNhbGx5IGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIENvcnJlc3BvbmRpbmcKK1NvdXJjZS4KKworICBUaGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIGEgd29yayBpbiBzb3VyY2UgY29kZSBmb3JtIGlzIHRoYXQKK3NhbWUgd29yay4KKworICAyLiBCYXNpYyBQZXJtaXNzaW9ucy4KKworICBBbGwgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGFyZSBncmFudGVkIGZvciB0aGUgdGVybSBvZgorY29weXJpZ2h0IG9uIHRoZSBQcm9ncmFtLCBhbmQgYXJlIGlycmV2b2NhYmxlIHByb3ZpZGVkIHRoZSBzdGF0ZWQKK2NvbmRpdGlvbnMgYXJlIG1ldC4gIFRoaXMgTGljZW5zZSBleHBsaWNpdGx5IGFmZmlybXMgeW91ciB1bmxpbWl0ZWQKK3Blcm1pc3Npb24gdG8gcnVuIHRoZSB1bm1vZGlmaWVkIFByb2dyYW0uICBUaGUgb3V0cHV0IGZyb20gcnVubmluZyBhCitjb3ZlcmVkIHdvcmsgaXMgY292ZXJlZCBieSB0aGlzIExpY2Vuc2Ugb25seSBpZiB0aGUgb3V0cHV0LCBnaXZlbiBpdHMKK2NvbnRlbnQsIGNvbnN0aXR1dGVzIGEgY292ZXJlZCB3b3JrLiAgVGhpcyBMaWNlbnNlIGFja25vd2xlZGdlcyB5b3VyCityaWdodHMgb2YgZmFpciB1c2Ugb3Igb3RoZXIgZXF1aXZhbGVudCwgYXMgcHJvdmlkZWQgYnkgY29weXJpZ2h0IGxhdy4KKworICBZb3UgbWF5IG1ha2UsIHJ1biBhbmQgcHJvcGFnYXRlIGNvdmVyZWQgd29ya3MgdGhhdCB5b3UgZG8gbm90Citjb252ZXksIHdpdGhvdXQgY29uZGl0aW9ucyBzbyBsb25nIGFzIHlvdXIgbGljZW5zZSBvdGhlcndpc2UgcmVtYWlucworaW4gZm9yY2UuICBZb3UgbWF5IGNvbnZleSBjb3ZlcmVkIHdvcmtzIHRvIG90aGVycyBmb3IgdGhlIHNvbGUgcHVycG9zZQorb2YgaGF2aW5nIHRoZW0gbWFrZSBtb2RpZmljYXRpb25zIGV4Y2x1c2l2ZWx5IGZvciB5b3UsIG9yIHByb3ZpZGUgeW91Cit3aXRoIGZhY2lsaXRpZXMgZm9yIHJ1bm5pbmcgdGhvc2Ugd29ya3MsIHByb3ZpZGVkIHRoYXQgeW91IGNvbXBseSB3aXRoCit0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGluIGNvbnZleWluZyBhbGwgbWF0ZXJpYWwgZm9yIHdoaWNoIHlvdSBkbworbm90IGNvbnRyb2wgY29weXJpZ2h0LiAgVGhvc2UgdGh1cyBtYWtpbmcgb3IgcnVubmluZyB0aGUgY292ZXJlZCB3b3JrcworZm9yIHlvdSBtdXN0IGRvIHNvIGV4Y2x1c2l2ZWx5IG9uIHlvdXIgYmVoYWxmLCB1bmRlciB5b3VyIGRpcmVjdGlvbgorYW5kIGNvbnRyb2wsIG9uIHRlcm1zIHRoYXQgcHJvaGliaXQgdGhlbSBmcm9tIG1ha2luZyBhbnkgY29waWVzIG9mCit5b3VyIGNvcHlyaWdodGVkIG1hdGVyaWFsIG91dHNpZGUgdGhlaXIgcmVsYXRpb25zaGlwIHdpdGggeW91LgorCisgIENvbnZleWluZyB1bmRlciBhbnkgb3RoZXIgY2lyY3Vtc3RhbmNlcyBpcyBwZXJtaXR0ZWQgc29sZWx5IHVuZGVyCit0aGUgY29uZGl0aW9ucyBzdGF0ZWQgYmVsb3cuICBTdWJsaWNlbnNpbmcgaXMgbm90IGFsbG93ZWQ7IHNlY3Rpb24gMTAKK21ha2VzIGl0IHVubmVjZXNzYXJ5LgorCisgIDMuIFByb3RlY3RpbmcgVXNlcnMnIExlZ2FsIFJpZ2h0cyBGcm9tIEFudGktQ2lyY3VtdmVudGlvbiBMYXcuCisKKyAgTm8gY292ZXJlZCB3b3JrIHNoYWxsIGJlIGRlZW1lZCBwYXJ0IG9mIGFuIGVmZmVjdGl2ZSB0ZWNobm9sb2dpY2FsCittZWFzdXJlIHVuZGVyIGFueSBhcHBsaWNhYmxlIGxhdyBmdWxmaWxsaW5nIG9ibGlnYXRpb25zIHVuZGVyIGFydGljbGUKKzExIG9mIHRoZSBXSVBPIGNvcHlyaWdodCB0cmVhdHkgYWRvcHRlZCBvbiAyMCBEZWNlbWJlciAxOTk2LCBvcgorc2ltaWxhciBsYXdzIHByb2hpYml0aW5nIG9yIHJlc3RyaWN0aW5nIGNpcmN1bXZlbnRpb24gb2Ygc3VjaAorbWVhc3VyZXMuCisKKyAgV2hlbiB5b3UgY29udmV5IGEgY292ZXJlZCB3b3JrLCB5b3Ugd2FpdmUgYW55IGxlZ2FsIHBvd2VyIHRvIGZvcmJpZAorY2lyY3VtdmVudGlvbiBvZiB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRvIHRoZSBleHRlbnQgc3VjaCBjaXJjdW12ZW50aW9uCitpcyBlZmZlY3RlZCBieSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvCit0aGUgY292ZXJlZCB3b3JrLCBhbmQgeW91IGRpc2NsYWltIGFueSBpbnRlbnRpb24gdG8gbGltaXQgb3BlcmF0aW9uIG9yCittb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgYXMgYSBtZWFucyBvZiBlbmZvcmNpbmcsIGFnYWluc3QgdGhlIHdvcmsncwordXNlcnMsIHlvdXIgb3IgdGhpcmQgcGFydGllcycgbGVnYWwgcmlnaHRzIHRvIGZvcmJpZCBjaXJjdW12ZW50aW9uIG9mCit0ZWNobm9sb2dpY2FsIG1lYXN1cmVzLgorCisgIDQuIENvbnZleWluZyBWZXJiYXRpbSBDb3BpZXMuCisKKyAgWW91IG1heSBjb252ZXkgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3Mgc291cmNlIGNvZGUgYXMgeW91CityZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZAorYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlOwora2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgc3RhdGluZyB0aGF0IHRoaXMgTGljZW5zZSBhbmQgYW55Citub24tcGVybWlzc2l2ZSB0ZXJtcyBhZGRlZCBpbiBhY2NvcmQgd2l0aCBzZWN0aW9uIDcgYXBwbHkgdG8gdGhlIGNvZGU7CitrZWVwIGludGFjdCBhbGwgbm90aWNlcyBvZiB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7IGFuZCBnaXZlIGFsbAorcmVjaXBpZW50cyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIFByb2dyYW0uCisKKyAgWW91IG1heSBjaGFyZ2UgYW55IHByaWNlIG9yIG5vIHByaWNlIGZvciBlYWNoIGNvcHkgdGhhdCB5b3UgY29udmV5LAorYW5kIHlvdSBtYXkgb2ZmZXIgc3VwcG9ydCBvciB3YXJyYW50eSBwcm90ZWN0aW9uIGZvciBhIGZlZS4KKworICA1LiBDb252ZXlpbmcgTW9kaWZpZWQgU291cmNlIFZlcnNpb25zLgorCisgIFlvdSBtYXkgY29udmV5IGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgb3IgdGhlIG1vZGlmaWNhdGlvbnMgdG8KK3Byb2R1Y2UgaXQgZnJvbSB0aGUgUHJvZ3JhbSwgaW4gdGhlIGZvcm0gb2Ygc291cmNlIGNvZGUgdW5kZXIgdGhlCit0ZXJtcyBvZiBzZWN0aW9uIDQsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFRoZSB3b3JrIG11c3QgY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IHlvdSBtb2RpZmllZAorICAgIGl0LCBhbmQgZ2l2aW5nIGEgcmVsZXZhbnQgZGF0ZS4KKworICAgIGIpIFRoZSB3b3JrIG11c3QgY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IGl0IGlzCisgICAgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBhbnkgY29uZGl0aW9ucyBhZGRlZCB1bmRlciBzZWN0aW9uCisgICAgNy4gIFRoaXMgcmVxdWlyZW1lbnQgbW9kaWZpZXMgdGhlIHJlcXVpcmVtZW50IGluIHNlY3Rpb24gNCB0bworICAgICJrZWVwIGludGFjdCBhbGwgbm90aWNlcyIuCisKKyAgICBjKSBZb3UgbXVzdCBsaWNlbnNlIHRoZSBlbnRpcmUgd29yaywgYXMgYSB3aG9sZSwgdW5kZXIgdGhpcworICAgIExpY2Vuc2UgdG8gYW55b25lIHdobyBjb21lcyBpbnRvIHBvc3Nlc3Npb24gb2YgYSBjb3B5LiAgVGhpcworICAgIExpY2Vuc2Ugd2lsbCB0aGVyZWZvcmUgYXBwbHksIGFsb25nIHdpdGggYW55IGFwcGxpY2FibGUgc2VjdGlvbiA3CisgICAgYWRkaXRpb25hbCB0ZXJtcywgdG8gdGhlIHdob2xlIG9mIHRoZSB3b3JrLCBhbmQgYWxsIGl0cyBwYXJ0cywKKyAgICByZWdhcmRsZXNzIG9mIGhvdyB0aGV5IGFyZSBwYWNrYWdlZC4gIFRoaXMgTGljZW5zZSBnaXZlcyBubworICAgIHBlcm1pc3Npb24gdG8gbGljZW5zZSB0aGUgd29yayBpbiBhbnkgb3RoZXIgd2F5LCBidXQgaXQgZG9lcyBub3QKKyAgICBpbnZhbGlkYXRlIHN1Y2ggcGVybWlzc2lvbiBpZiB5b3UgaGF2ZSBzZXBhcmF0ZWx5IHJlY2VpdmVkIGl0LgorCisgICAgZCkgSWYgdGhlIHdvcmsgaGFzIGludGVyYWN0aXZlIHVzZXIgaW50ZXJmYWNlcywgZWFjaCBtdXN0IGRpc3BsYXkKKyAgICBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzOyBob3dldmVyLCBpZiB0aGUgUHJvZ3JhbSBoYXMgaW50ZXJhY3RpdmUKKyAgICBpbnRlcmZhY2VzIHRoYXQgZG8gbm90IGRpc3BsYXkgQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlcywgeW91cgorICAgIHdvcmsgbmVlZCBub3QgbWFrZSB0aGVtIGRvIHNvLgorCisgIEEgY29tcGlsYXRpb24gb2YgYSBjb3ZlcmVkIHdvcmsgd2l0aCBvdGhlciBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQKK3dvcmtzLCB3aGljaCBhcmUgbm90IGJ5IHRoZWlyIG5hdHVyZSBleHRlbnNpb25zIG9mIHRoZSBjb3ZlcmVkIHdvcmssCithbmQgd2hpY2ggYXJlIG5vdCBjb21iaW5lZCB3aXRoIGl0IHN1Y2ggYXMgdG8gZm9ybSBhIGxhcmdlciBwcm9ncmFtLAoraW4gb3Igb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0sIGlzIGNhbGxlZCBhbgorImFnZ3JlZ2F0ZSIgaWYgdGhlIGNvbXBpbGF0aW9uIGFuZCBpdHMgcmVzdWx0aW5nIGNvcHlyaWdodCBhcmUgbm90Cit1c2VkIHRvIGxpbWl0IHRoZSBhY2Nlc3Mgb3IgbGVnYWwgcmlnaHRzIG9mIHRoZSBjb21waWxhdGlvbidzIHVzZXJzCitiZXlvbmQgd2hhdCB0aGUgaW5kaXZpZHVhbCB3b3JrcyBwZXJtaXQuICBJbmNsdXNpb24gb2YgYSBjb3ZlcmVkIHdvcmsKK2luIGFuIGFnZ3JlZ2F0ZSBkb2VzIG5vdCBjYXVzZSB0aGlzIExpY2Vuc2UgdG8gYXBwbHkgdG8gdGhlIG90aGVyCitwYXJ0cyBvZiB0aGUgYWdncmVnYXRlLgorCisgIDYuIENvbnZleWluZyBOb24tU291cmNlIEZvcm1zLgorCisgIFlvdSBtYXkgY29udmV5IGEgY292ZXJlZCB3b3JrIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgdGhlIHRlcm1zCitvZiBzZWN0aW9ucyA0IGFuZCA1LCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGNvbnZleSB0aGUKK21hY2hpbmUtcmVhZGFibGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwKK2luIG9uZSBvZiB0aGVzZSB3YXlzOgorCisgICAgYSkgQ29udmV5IHRoZSBvYmplY3QgY29kZSBpbiwgb3IgZW1ib2RpZWQgaW4sIGEgcGh5c2ljYWwgcHJvZHVjdAorICAgIChpbmNsdWRpbmcgYSBwaHlzaWNhbCBkaXN0cmlidXRpb24gbWVkaXVtKSwgYWNjb21wYW5pZWQgYnkgdGhlCisgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UgZml4ZWQgb24gYSBkdXJhYmxlIHBoeXNpY2FsIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgorCisgICAgYikgQ29udmV5IHRoZSBvYmplY3QgY29kZSBpbiwgb3IgZW1ib2RpZWQgaW4sIGEgcGh5c2ljYWwgcHJvZHVjdAorICAgIChpbmNsdWRpbmcgYSBwaHlzaWNhbCBkaXN0cmlidXRpb24gbWVkaXVtKSwgYWNjb21wYW5pZWQgYnkgYQorICAgIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZSB5ZWFycyBhbmQgdmFsaWQgZm9yIGFzCisgICAgbG9uZyBhcyB5b3Ugb2ZmZXIgc3BhcmUgcGFydHMgb3IgY3VzdG9tZXIgc3VwcG9ydCBmb3IgdGhhdCBwcm9kdWN0CisgICAgbW9kZWwsIHRvIGdpdmUgYW55b25lIHdobyBwb3NzZXNzZXMgdGhlIG9iamVjdCBjb2RlIGVpdGhlciAoMSkgYQorICAgIGNvcHkgb2YgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGZvciBhbGwgdGhlIHNvZnR3YXJlIGluIHRoZQorICAgIHByb2R1Y3QgdGhhdCBpcyBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSwgb24gYSBkdXJhYmxlIHBoeXNpY2FsCisgICAgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLCBmb3IgYSBwcmljZSBubworICAgIG1vcmUgdGhhbiB5b3VyIHJlYXNvbmFibGUgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgdGhpcworICAgIGNvbnZleWluZyBvZiBzb3VyY2UsIG9yICgyKSBhY2Nlc3MgdG8gY29weSB0aGUKKyAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBmcm9tIGEgbmV0d29yayBzZXJ2ZXIgYXQgbm8gY2hhcmdlLgorCisgICAgYykgQ29udmV5IGluZGl2aWR1YWwgY29waWVzIG9mIHRoZSBvYmplY3QgY29kZSB3aXRoIGEgY29weSBvZiB0aGUKKyAgICB3cml0dGVuIG9mZmVyIHRvIHByb3ZpZGUgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlLiAgVGhpcworICAgIGFsdGVybmF0aXZlIGlzIGFsbG93ZWQgb25seSBvY2Nhc2lvbmFsbHkgYW5kIG5vbmNvbW1lcmNpYWxseSwgYW5kCisgICAgb25seSBpZiB5b3UgcmVjZWl2ZWQgdGhlIG9iamVjdCBjb2RlIHdpdGggc3VjaCBhbiBvZmZlciwgaW4gYWNjb3JkCisgICAgd2l0aCBzdWJzZWN0aW9uIDZiLgorCisgICAgZCkgQ29udmV5IHRoZSBvYmplY3QgY29kZSBieSBvZmZlcmluZyBhY2Nlc3MgZnJvbSBhIGRlc2lnbmF0ZWQKKyAgICBwbGFjZSAoZ3JhdGlzIG9yIGZvciBhIGNoYXJnZSksIGFuZCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byB0aGUKKyAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBpbiB0aGUgc2FtZSB3YXkgdGhyb3VnaCB0aGUgc2FtZSBwbGFjZSBhdCBubworICAgIGZ1cnRoZXIgY2hhcmdlLiAgWW91IG5lZWQgbm90IHJlcXVpcmUgcmVjaXBpZW50cyB0byBjb3B5IHRoZQorICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLiAgSWYgdGhlIHBsYWNlIHRvCisgICAgY29weSB0aGUgb2JqZWN0IGNvZGUgaXMgYSBuZXR3b3JrIHNlcnZlciwgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlCisgICAgbWF5IGJlIG9uIGEgZGlmZmVyZW50IHNlcnZlciAob3BlcmF0ZWQgYnkgeW91IG9yIGEgdGhpcmQgcGFydHkpCisgICAgdGhhdCBzdXBwb3J0cyBlcXVpdmFsZW50IGNvcHlpbmcgZmFjaWxpdGllcywgcHJvdmlkZWQgeW91IG1haW50YWluCisgICAgY2xlYXIgZGlyZWN0aW9ucyBuZXh0IHRvIHRoZSBvYmplY3QgY29kZSBzYXlpbmcgd2hlcmUgdG8gZmluZCB0aGUKKyAgICBDb3JyZXNwb25kaW5nIFNvdXJjZS4gIFJlZ2FyZGxlc3Mgb2Ygd2hhdCBzZXJ2ZXIgaG9zdHMgdGhlCisgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UsIHlvdSByZW1haW4gb2JsaWdhdGVkIHRvIGVuc3VyZSB0aGF0IGl0IGlzCisgICAgYXZhaWxhYmxlIGZvciBhcyBsb25nIGFzIG5lZWRlZCB0byBzYXRpc2Z5IHRoZXNlIHJlcXVpcmVtZW50cy4KKworICAgIGUpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgdXNpbmcgcGVlci10by1wZWVyIHRyYW5zbWlzc2lvbiwgcHJvdmlkZWQKKyAgICB5b3UgaW5mb3JtIG90aGVyIHBlZXJzIHdoZXJlIHRoZSBvYmplY3QgY29kZSBhbmQgQ29ycmVzcG9uZGluZworICAgIFNvdXJjZSBvZiB0aGUgd29yayBhcmUgYmVpbmcgb2ZmZXJlZCB0byB0aGUgZ2VuZXJhbCBwdWJsaWMgYXQgbm8KKyAgICBjaGFyZ2UgdW5kZXIgc3Vic2VjdGlvbiA2ZC4KKworICBBIHNlcGFyYWJsZSBwb3J0aW9uIG9mIHRoZSBvYmplY3QgY29kZSwgd2hvc2Ugc291cmNlIGNvZGUgaXMgZXhjbHVkZWQKK2Zyb20gdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGFzIGEgU3lzdGVtIExpYnJhcnksIG5lZWQgbm90IGJlCitpbmNsdWRlZCBpbiBjb252ZXlpbmcgdGhlIG9iamVjdCBjb2RlIHdvcmsuCisKKyAgQSAiVXNlciBQcm9kdWN0IiBpcyBlaXRoZXIgKDEpIGEgImNvbnN1bWVyIHByb2R1Y3QiLCB3aGljaCBtZWFucyBhbnkKK3RhbmdpYmxlIHBlcnNvbmFsIHByb3BlcnR5IHdoaWNoIGlzIG5vcm1hbGx5IHVzZWQgZm9yIHBlcnNvbmFsLCBmYW1pbHksCitvciBob3VzZWhvbGQgcHVycG9zZXMsIG9yICgyKSBhbnl0aGluZyBkZXNpZ25lZCBvciBzb2xkIGZvciBpbmNvcnBvcmF0aW9uCitpbnRvIGEgZHdlbGxpbmcuICBJbiBkZXRlcm1pbmluZyB3aGV0aGVyIGEgcHJvZHVjdCBpcyBhIGNvbnN1bWVyIHByb2R1Y3QsCitkb3VidGZ1bCBjYXNlcyBzaGFsbCBiZSByZXNvbHZlZCBpbiBmYXZvciBvZiBjb3ZlcmFnZS4gIEZvciBhIHBhcnRpY3VsYXIKK3Byb2R1Y3QgcmVjZWl2ZWQgYnkgYSBwYXJ0aWN1bGFyIHVzZXIsICJub3JtYWxseSB1c2VkIiByZWZlcnMgdG8gYQordHlwaWNhbCBvciBjb21tb24gdXNlIG9mIHRoYXQgY2xhc3Mgb2YgcHJvZHVjdCwgcmVnYXJkbGVzcyBvZiB0aGUgc3RhdHVzCitvZiB0aGUgcGFydGljdWxhciB1c2VyIG9yIG9mIHRoZSB3YXkgaW4gd2hpY2ggdGhlIHBhcnRpY3VsYXIgdXNlcgorYWN0dWFsbHkgdXNlcywgb3IgZXhwZWN0cyBvciBpcyBleHBlY3RlZCB0byB1c2UsIHRoZSBwcm9kdWN0LiAgQSBwcm9kdWN0CitpcyBhIGNvbnN1bWVyIHByb2R1Y3QgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBwcm9kdWN0IGhhcyBzdWJzdGFudGlhbAorY29tbWVyY2lhbCwgaW5kdXN0cmlhbCBvciBub24tY29uc3VtZXIgdXNlcywgdW5sZXNzIHN1Y2ggdXNlcyByZXByZXNlbnQKK3RoZSBvbmx5IHNpZ25pZmljYW50IG1vZGUgb2YgdXNlIG9mIHRoZSBwcm9kdWN0LgorCisgICJJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24iIGZvciBhIFVzZXIgUHJvZHVjdCBtZWFucyBhbnkgbWV0aG9kcywKK3Byb2NlZHVyZXMsIGF1dGhvcml6YXRpb24ga2V5cywgb3Igb3RoZXIgaW5mb3JtYXRpb24gcmVxdWlyZWQgdG8gaW5zdGFsbAorYW5kIGV4ZWN1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgYSBjb3ZlcmVkIHdvcmsgaW4gdGhhdCBVc2VyIFByb2R1Y3QgZnJvbQorYSBtb2RpZmllZCB2ZXJzaW9uIG9mIGl0cyBDb3JyZXNwb25kaW5nIFNvdXJjZS4gIFRoZSBpbmZvcm1hdGlvbiBtdXN0CitzdWZmaWNlIHRvIGVuc3VyZSB0aGF0IHRoZSBjb250aW51ZWQgZnVuY3Rpb25pbmcgb2YgdGhlIG1vZGlmaWVkIG9iamVjdAorY29kZSBpcyBpbiBubyBjYXNlIHByZXZlbnRlZCBvciBpbnRlcmZlcmVkIHdpdGggc29sZWx5IGJlY2F1c2UKK21vZGlmaWNhdGlvbiBoYXMgYmVlbiBtYWRlLgorCisgIElmIHlvdSBjb252ZXkgYW4gb2JqZWN0IGNvZGUgd29yayB1bmRlciB0aGlzIHNlY3Rpb24gaW4sIG9yIHdpdGgsIG9yCitzcGVjaWZpY2FsbHkgZm9yIHVzZSBpbiwgYSBVc2VyIFByb2R1Y3QsIGFuZCB0aGUgY29udmV5aW5nIG9jY3VycyBhcworcGFydCBvZiBhIHRyYW5zYWN0aW9uIGluIHdoaWNoIHRoZSByaWdodCBvZiBwb3NzZXNzaW9uIGFuZCB1c2Ugb2YgdGhlCitVc2VyIFByb2R1Y3QgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIHJlY2lwaWVudCBpbiBwZXJwZXR1aXR5IG9yIGZvciBhCitmaXhlZCB0ZXJtIChyZWdhcmRsZXNzIG9mIGhvdyB0aGUgdHJhbnNhY3Rpb24gaXMgY2hhcmFjdGVyaXplZCksIHRoZQorQ29ycmVzcG9uZGluZyBTb3VyY2UgY29udmV5ZWQgdW5kZXIgdGhpcyBzZWN0aW9uIG11c3QgYmUgYWNjb21wYW5pZWQKK2J5IHRoZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24uICBCdXQgdGhpcyByZXF1aXJlbWVudCBkb2VzIG5vdCBhcHBseQoraWYgbmVpdGhlciB5b3Ugbm9yIGFueSB0aGlyZCBwYXJ0eSByZXRhaW5zIHRoZSBhYmlsaXR5IHRvIGluc3RhbGwKK21vZGlmaWVkIG9iamVjdCBjb2RlIG9uIHRoZSBVc2VyIFByb2R1Y3QgKGZvciBleGFtcGxlLCB0aGUgd29yayBoYXMKK2JlZW4gaW5zdGFsbGVkIGluIFJPTSkuCisKKyAgVGhlIHJlcXVpcmVtZW50IHRvIHByb3ZpZGUgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIGRvZXMgbm90IGluY2x1ZGUgYQorcmVxdWlyZW1lbnQgdG8gY29udGludWUgdG8gcHJvdmlkZSBzdXBwb3J0IHNlcnZpY2UsIHdhcnJhbnR5LCBvciB1cGRhdGVzCitmb3IgYSB3b3JrIHRoYXQgaGFzIGJlZW4gbW9kaWZpZWQgb3IgaW5zdGFsbGVkIGJ5IHRoZSByZWNpcGllbnQsIG9yIGZvcgordGhlIFVzZXIgUHJvZHVjdCBpbiB3aGljaCBpdCBoYXMgYmVlbiBtb2RpZmllZCBvciBpbnN0YWxsZWQuICBBY2Nlc3MgdG8gYQorbmV0d29yayBtYXkgYmUgZGVuaWVkIHdoZW4gdGhlIG1vZGlmaWNhdGlvbiBpdHNlbGYgbWF0ZXJpYWxseSBhbmQKK2FkdmVyc2VseSBhZmZlY3RzIHRoZSBvcGVyYXRpb24gb2YgdGhlIG5ldHdvcmsgb3IgdmlvbGF0ZXMgdGhlIHJ1bGVzIGFuZAorcHJvdG9jb2xzIGZvciBjb21tdW5pY2F0aW9uIGFjcm9zcyB0aGUgbmV0d29yay4KKworICBDb3JyZXNwb25kaW5nIFNvdXJjZSBjb252ZXllZCwgYW5kIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiBwcm92aWRlZCwKK2luIGFjY29yZCB3aXRoIHRoaXMgc2VjdGlvbiBtdXN0IGJlIGluIGEgZm9ybWF0IHRoYXQgaXMgcHVibGljbHkKK2RvY3VtZW50ZWQgKGFuZCB3aXRoIGFuIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluCitzb3VyY2UgY29kZSBmb3JtKSwgYW5kIG11c3QgcmVxdWlyZSBubyBzcGVjaWFsIHBhc3N3b3JkIG9yIGtleSBmb3IKK3VucGFja2luZywgcmVhZGluZyBvciBjb3B5aW5nLgorCisgIDcuIEFkZGl0aW9uYWwgVGVybXMuCisKKyAgIkFkZGl0aW9uYWwgcGVybWlzc2lvbnMiIGFyZSB0ZXJtcyB0aGF0IHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMKK0xpY2Vuc2UgYnkgbWFraW5nIGV4Y2VwdGlvbnMgZnJvbSBvbmUgb3IgbW9yZSBvZiBpdHMgY29uZGl0aW9ucy4KK0FkZGl0aW9uYWwgcGVybWlzc2lvbnMgdGhhdCBhcmUgYXBwbGljYWJsZSB0byB0aGUgZW50aXJlIFByb2dyYW0gc2hhbGwKK2JlIHRyZWF0ZWQgYXMgdGhvdWdoIHRoZXkgd2VyZSBpbmNsdWRlZCBpbiB0aGlzIExpY2Vuc2UsIHRvIHRoZSBleHRlbnQKK3RoYXQgdGhleSBhcmUgdmFsaWQgdW5kZXIgYXBwbGljYWJsZSBsYXcuICBJZiBhZGRpdGlvbmFsIHBlcm1pc3Npb25zCithcHBseSBvbmx5IHRvIHBhcnQgb2YgdGhlIFByb2dyYW0sIHRoYXQgcGFydCBtYXkgYmUgdXNlZCBzZXBhcmF0ZWx5Cit1bmRlciB0aG9zZSBwZXJtaXNzaW9ucywgYnV0IHRoZSBlbnRpcmUgUHJvZ3JhbSByZW1haW5zIGdvdmVybmVkIGJ5Cit0aGlzIExpY2Vuc2Ugd2l0aG91dCByZWdhcmQgdG8gdGhlIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMuCisKKyAgV2hlbiB5b3UgY29udmV5IGEgY29weSBvZiBhIGNvdmVyZWQgd29yaywgeW91IG1heSBhdCB5b3VyIG9wdGlvbgorcmVtb3ZlIGFueSBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIGZyb20gdGhhdCBjb3B5LCBvciBmcm9tIGFueSBwYXJ0IG9mCitpdC4gIChBZGRpdGlvbmFsIHBlcm1pc3Npb25zIG1heSBiZSB3cml0dGVuIHRvIHJlcXVpcmUgdGhlaXIgb3duCityZW1vdmFsIGluIGNlcnRhaW4gY2FzZXMgd2hlbiB5b3UgbW9kaWZ5IHRoZSB3b3JrLikgIFlvdSBtYXkgcGxhY2UKK2FkZGl0aW9uYWwgcGVybWlzc2lvbnMgb24gbWF0ZXJpYWwsIGFkZGVkIGJ5IHlvdSB0byBhIGNvdmVyZWQgd29yaywKK2ZvciB3aGljaCB5b3UgaGF2ZSBvciBjYW4gZ2l2ZSBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgcGVybWlzc2lvbi4KKworICBOb3R3aXRoc3RhbmRpbmcgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIGZvciBtYXRlcmlhbCB5b3UKK2FkZCB0byBhIGNvdmVyZWQgd29yaywgeW91IG1heSAoaWYgYXV0aG9yaXplZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlcnMgb2YKK3RoYXQgbWF0ZXJpYWwpIHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRlcm1zOgorCisgICAgYSkgRGlzY2xhaW1pbmcgd2FycmFudHkgb3IgbGltaXRpbmcgbGlhYmlsaXR5IGRpZmZlcmVudGx5IGZyb20gdGhlCisgICAgdGVybXMgb2Ygc2VjdGlvbnMgMTUgYW5kIDE2IG9mIHRoaXMgTGljZW5zZTsgb3IKKworICAgIGIpIFJlcXVpcmluZyBwcmVzZXJ2YXRpb24gb2Ygc3BlY2lmaWVkIHJlYXNvbmFibGUgbGVnYWwgbm90aWNlcyBvcgorICAgIGF1dGhvciBhdHRyaWJ1dGlvbnMgaW4gdGhhdCBtYXRlcmlhbCBvciBpbiB0aGUgQXBwcm9wcmlhdGUgTGVnYWwKKyAgICBOb3RpY2VzIGRpc3BsYXllZCBieSB3b3JrcyBjb250YWluaW5nIGl0OyBvcgorCisgICAgYykgUHJvaGliaXRpbmcgbWlzcmVwcmVzZW50YXRpb24gb2YgdGhlIG9yaWdpbiBvZiB0aGF0IG1hdGVyaWFsLCBvcgorICAgIHJlcXVpcmluZyB0aGF0IG1vZGlmaWVkIHZlcnNpb25zIG9mIHN1Y2ggbWF0ZXJpYWwgYmUgbWFya2VkIGluCisgICAgcmVhc29uYWJsZSB3YXlzIGFzIGRpZmZlcmVudCBmcm9tIHRoZSBvcmlnaW5hbCB2ZXJzaW9uOyBvcgorCisgICAgZCkgTGltaXRpbmcgdGhlIHVzZSBmb3IgcHVibGljaXR5IHB1cnBvc2VzIG9mIG5hbWVzIG9mIGxpY2Vuc29ycyBvcgorICAgIGF1dGhvcnMgb2YgdGhlIG1hdGVyaWFsOyBvcgorCisgICAgZSkgRGVjbGluaW5nIHRvIGdyYW50IHJpZ2h0cyB1bmRlciB0cmFkZW1hcmsgbGF3IGZvciB1c2Ugb2Ygc29tZQorICAgIHRyYWRlIG5hbWVzLCB0cmFkZW1hcmtzLCBvciBzZXJ2aWNlIG1hcmtzOyBvcgorCisgICAgZikgUmVxdWlyaW5nIGluZGVtbmlmaWNhdGlvbiBvZiBsaWNlbnNvcnMgYW5kIGF1dGhvcnMgb2YgdGhhdAorICAgIG1hdGVyaWFsIGJ5IGFueW9uZSB3aG8gY29udmV5cyB0aGUgbWF0ZXJpYWwgKG9yIG1vZGlmaWVkIHZlcnNpb25zIG9mCisgICAgaXQpIHdpdGggY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgb2YgbGlhYmlsaXR5IHRvIHRoZSByZWNpcGllbnQsIGZvcgorICAgIGFueSBsaWFiaWxpdHkgdGhhdCB0aGVzZSBjb250cmFjdHVhbCBhc3N1bXB0aW9ucyBkaXJlY3RseSBpbXBvc2Ugb24KKyAgICB0aG9zZSBsaWNlbnNvcnMgYW5kIGF1dGhvcnMuCisKKyAgQWxsIG90aGVyIG5vbi1wZXJtaXNzaXZlIGFkZGl0aW9uYWwgdGVybXMgYXJlIGNvbnNpZGVyZWQgImZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyIgd2l0aGluIHRoZSBtZWFuaW5nIG9mIHNlY3Rpb24gMTAuICBJZiB0aGUgUHJvZ3JhbSBhcyB5b3UKK3JlY2VpdmVkIGl0LCBvciBhbnkgcGFydCBvZiBpdCwgY29udGFpbnMgYSBub3RpY2Ugc3RhdGluZyB0aGF0IGl0IGlzCitnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCBhIHRlcm0gdGhhdCBpcyBhIGZ1cnRoZXIKK3Jlc3RyaWN0aW9uLCB5b3UgbWF5IHJlbW92ZSB0aGF0IHRlcm0uICBJZiBhIGxpY2Vuc2UgZG9jdW1lbnQgY29udGFpbnMKK2EgZnVydGhlciByZXN0cmljdGlvbiBidXQgcGVybWl0cyByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcgdW5kZXIgdGhpcworTGljZW5zZSwgeW91IG1heSBhZGQgdG8gYSBjb3ZlcmVkIHdvcmsgbWF0ZXJpYWwgZ292ZXJuZWQgYnkgdGhlIHRlcm1zCitvZiB0aGF0IGxpY2Vuc2UgZG9jdW1lbnQsIHByb3ZpZGVkIHRoYXQgdGhlIGZ1cnRoZXIgcmVzdHJpY3Rpb24gZG9lcworbm90IHN1cnZpdmUgc3VjaCByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcuCisKKyAgSWYgeW91IGFkZCB0ZXJtcyB0byBhIGNvdmVyZWQgd29yayBpbiBhY2NvcmQgd2l0aCB0aGlzIHNlY3Rpb24sIHlvdQorbXVzdCBwbGFjZSwgaW4gdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcywgYSBzdGF0ZW1lbnQgb2YgdGhlCithZGRpdGlvbmFsIHRlcm1zIHRoYXQgYXBwbHkgdG8gdGhvc2UgZmlsZXMsIG9yIGEgbm90aWNlIGluZGljYXRpbmcKK3doZXJlIHRvIGZpbmQgdGhlIGFwcGxpY2FibGUgdGVybXMuCisKKyAgQWRkaXRpb25hbCB0ZXJtcywgcGVybWlzc2l2ZSBvciBub24tcGVybWlzc2l2ZSwgbWF5IGJlIHN0YXRlZCBpbiB0aGUKK2Zvcm0gb2YgYSBzZXBhcmF0ZWx5IHdyaXR0ZW4gbGljZW5zZSwgb3Igc3RhdGVkIGFzIGV4Y2VwdGlvbnM7Cit0aGUgYWJvdmUgcmVxdWlyZW1lbnRzIGFwcGx5IGVpdGhlciB3YXkuCisKKyAgOC4gVGVybWluYXRpb24uCisKKyAgWW91IG1heSBub3QgcHJvcGFnYXRlIG9yIG1vZGlmeSBhIGNvdmVyZWQgd29yayBleGNlcHQgYXMgZXhwcmVzc2x5Citwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdCBvdGhlcndpc2UgdG8gcHJvcGFnYXRlIG9yCittb2RpZnkgaXQgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIKK3RoaXMgTGljZW5zZSAoaW5jbHVkaW5nIGFueSBwYXRlbnQgbGljZW5zZXMgZ3JhbnRlZCB1bmRlciB0aGUgdGhpcmQKK3BhcmFncmFwaCBvZiBzZWN0aW9uIDExKS4KKworICBIb3dldmVyLCBpZiB5b3UgY2Vhc2UgYWxsIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UsIHRoZW4geW91cgorbGljZW5zZSBmcm9tIGEgcGFydGljdWxhciBjb3B5cmlnaHQgaG9sZGVyIGlzIHJlaW5zdGF0ZWQgKGEpCitwcm92aXNpb25hbGx5LCB1bmxlc3MgYW5kIHVudGlsIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGV4cGxpY2l0bHkgYW5kCitmaW5hbGx5IHRlcm1pbmF0ZXMgeW91ciBsaWNlbnNlLCBhbmQgKGIpIHBlcm1hbmVudGx5LCBpZiB0aGUgY29weXJpZ2h0Citob2xkZXIgZmFpbHMgdG8gbm90aWZ5IHlvdSBvZiB0aGUgdmlvbGF0aW9uIGJ5IHNvbWUgcmVhc29uYWJsZSBtZWFucworcHJpb3IgdG8gNjAgZGF5cyBhZnRlciB0aGUgY2Vzc2F0aW9uLgorCisgIE1vcmVvdmVyLCB5b3VyIGxpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcworcmVpbnN0YXRlZCBwZXJtYW5lbnRseSBpZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3RpZmllcyB5b3Ugb2YgdGhlCit2aW9sYXRpb24gYnkgc29tZSByZWFzb25hYmxlIG1lYW5zLCB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHlvdSBoYXZlCityZWNlaXZlZCBub3RpY2Ugb2YgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSAoZm9yIGFueSB3b3JrKSBmcm9tIHRoYXQKK2NvcHlyaWdodCBob2xkZXIsIGFuZCB5b3UgY3VyZSB0aGUgdmlvbGF0aW9uIHByaW9yIHRvIDMwIGRheXMgYWZ0ZXIKK3lvdXIgcmVjZWlwdCBvZiB0aGUgbm90aWNlLgorCisgIFRlcm1pbmF0aW9uIG9mIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgc2VjdGlvbiBkb2VzIG5vdCB0ZXJtaW5hdGUgdGhlCitsaWNlbnNlcyBvZiBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcyBvciByaWdodHMgZnJvbSB5b3UgdW5kZXIKK3RoaXMgTGljZW5zZS4gIElmIHlvdXIgcmlnaHRzIGhhdmUgYmVlbiB0ZXJtaW5hdGVkIGFuZCBub3QgcGVybWFuZW50bHkKK3JlaW5zdGF0ZWQsIHlvdSBkbyBub3QgcXVhbGlmeSB0byByZWNlaXZlIG5ldyBsaWNlbnNlcyBmb3IgdGhlIHNhbWUKK21hdGVyaWFsIHVuZGVyIHNlY3Rpb24gMTAuCisKKyAgOS4gQWNjZXB0YW5jZSBOb3QgUmVxdWlyZWQgZm9yIEhhdmluZyBDb3BpZXMuCisKKyAgWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSBpbiBvcmRlciB0byByZWNlaXZlIG9yCitydW4gYSBjb3B5IG9mIHRoZSBQcm9ncmFtLiAgQW5jaWxsYXJ5IHByb3BhZ2F0aW9uIG9mIGEgY292ZXJlZCB3b3JrCitvY2N1cnJpbmcgc29sZWx5IGFzIGEgY29uc2VxdWVuY2Ugb2YgdXNpbmcgcGVlci10by1wZWVyIHRyYW5zbWlzc2lvbgordG8gcmVjZWl2ZSBhIGNvcHkgbGlrZXdpc2UgZG9lcyBub3QgcmVxdWlyZSBhY2NlcHRhbmNlLiAgSG93ZXZlciwKK25vdGhpbmcgb3RoZXIgdGhhbiB0aGlzIExpY2Vuc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIHByb3BhZ2F0ZSBvcgorbW9kaWZ5IGFueSBjb3ZlcmVkIHdvcmsuICBUaGVzZSBhY3Rpb25zIGluZnJpbmdlIGNvcHlyaWdodCBpZiB5b3UgZG8KK25vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieSBtb2RpZnlpbmcgb3IgcHJvcGFnYXRpbmcgYQorY292ZXJlZCB3b3JrLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzby4KKworICAxMC4gQXV0b21hdGljIExpY2Vuc2luZyBvZiBEb3duc3RyZWFtIFJlY2lwaWVudHMuCisKKyAgRWFjaCB0aW1lIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseQorcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlIG9yaWdpbmFsIGxpY2Vuc29ycywgdG8gcnVuLCBtb2RpZnkgYW5kCitwcm9wYWdhdGUgdGhhdCB3b3JrLCBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gIFlvdSBhcmUgbm90IHJlc3BvbnNpYmxlCitmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB3aXRoIHRoaXMgTGljZW5zZS4KKworICBBbiAiZW50aXR5IHRyYW5zYWN0aW9uIiBpcyBhIHRyYW5zYWN0aW9uIHRyYW5zZmVycmluZyBjb250cm9sIG9mIGFuCitvcmdhbml6YXRpb24sIG9yIHN1YnN0YW50aWFsbHkgYWxsIGFzc2V0cyBvZiBvbmUsIG9yIHN1YmRpdmlkaW5nIGFuCitvcmdhbml6YXRpb24sIG9yIG1lcmdpbmcgb3JnYW5pemF0aW9ucy4gIElmIHByb3BhZ2F0aW9uIG9mIGEgY292ZXJlZAord29yayByZXN1bHRzIGZyb20gYW4gZW50aXR5IHRyYW5zYWN0aW9uLCBlYWNoIHBhcnR5IHRvIHRoYXQKK3RyYW5zYWN0aW9uIHdobyByZWNlaXZlcyBhIGNvcHkgb2YgdGhlIHdvcmsgYWxzbyByZWNlaXZlcyB3aGF0ZXZlcgorbGljZW5zZXMgdG8gdGhlIHdvcmsgdGhlIHBhcnR5J3MgcHJlZGVjZXNzb3IgaW4gaW50ZXJlc3QgaGFkIG9yIGNvdWxkCitnaXZlIHVuZGVyIHRoZSBwcmV2aW91cyBwYXJhZ3JhcGgsIHBsdXMgYSByaWdodCB0byBwb3NzZXNzaW9uIG9mIHRoZQorQ29ycmVzcG9uZGluZyBTb3VyY2Ugb2YgdGhlIHdvcmsgZnJvbSB0aGUgcHJlZGVjZXNzb3IgaW4gaW50ZXJlc3QsIGlmCit0aGUgcHJlZGVjZXNzb3IgaGFzIGl0IG9yIGNhbiBnZXQgaXQgd2l0aCByZWFzb25hYmxlIGVmZm9ydHMuCisKKyAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUgZXhlcmNpc2Ugb2YgdGhlCityaWdodHMgZ3JhbnRlZCBvciBhZmZpcm1lZCB1bmRlciB0aGlzIExpY2Vuc2UuICBGb3IgZXhhbXBsZSwgeW91IG1heQorbm90IGltcG9zZSBhIGxpY2Vuc2UgZmVlLCByb3lhbHR5LCBvciBvdGhlciBjaGFyZ2UgZm9yIGV4ZXJjaXNlIG9mCityaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCB5b3UgbWF5IG5vdCBpbml0aWF0ZSBsaXRpZ2F0aW9uCisoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdAorYW55IHBhdGVudCBjbGFpbSBpcyBpbmZyaW5nZWQgYnkgbWFraW5nLCB1c2luZywgc2VsbGluZywgb2ZmZXJpbmcgZm9yCitzYWxlLCBvciBpbXBvcnRpbmcgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24gb2YgaXQuCisKKyAgMTEuIFBhdGVudHMuCisKKyAgQSAiY29udHJpYnV0b3IiIGlzIGEgY29weXJpZ2h0IGhvbGRlciB3aG8gYXV0aG9yaXplcyB1c2UgdW5kZXIgdGhpcworTGljZW5zZSBvZiB0aGUgUHJvZ3JhbSBvciBhIHdvcmsgb24gd2hpY2ggdGhlIFByb2dyYW0gaXMgYmFzZWQuICBUaGUKK3dvcmsgdGh1cyBsaWNlbnNlZCBpcyBjYWxsZWQgdGhlIGNvbnRyaWJ1dG9yJ3MgImNvbnRyaWJ1dG9yIHZlcnNpb24iLgorCisgIEEgY29udHJpYnV0b3IncyAiZXNzZW50aWFsIHBhdGVudCBjbGFpbXMiIGFyZSBhbGwgcGF0ZW50IGNsYWltcworb3duZWQgb3IgY29udHJvbGxlZCBieSB0aGUgY29udHJpYnV0b3IsIHdoZXRoZXIgYWxyZWFkeSBhY3F1aXJlZCBvcgoraGVyZWFmdGVyIGFjcXVpcmVkLCB0aGF0IHdvdWxkIGJlIGluZnJpbmdlZCBieSBzb21lIG1hbm5lciwgcGVybWl0dGVkCitieSB0aGlzIExpY2Vuc2UsIG9mIG1ha2luZywgdXNpbmcsIG9yIHNlbGxpbmcgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24sCitidXQgZG8gbm90IGluY2x1ZGUgY2xhaW1zIHRoYXQgd291bGQgYmUgaW5mcmluZ2VkIG9ubHkgYXMgYQorY29uc2VxdWVuY2Ugb2YgZnVydGhlciBtb2RpZmljYXRpb24gb2YgdGhlIGNvbnRyaWJ1dG9yIHZlcnNpb24uICBGb3IKK3B1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIGluY2x1ZGVzIHRoZSByaWdodCB0byBncmFudAorcGF0ZW50IHN1YmxpY2Vuc2VzIGluIGEgbWFubmVyIGNvbnNpc3RlbnQgd2l0aCB0aGUgcmVxdWlyZW1lbnRzIG9mCit0aGlzIExpY2Vuc2UuCisKKyAgRWFjaCBjb250cmlidXRvciBncmFudHMgeW91IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUKK3BhdGVudCBsaWNlbnNlIHVuZGVyIHRoZSBjb250cmlidXRvcidzIGVzc2VudGlhbCBwYXRlbnQgY2xhaW1zLCB0bworbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0IGFuZCBvdGhlcndpc2UgcnVuLCBtb2RpZnkgYW5kCitwcm9wYWdhdGUgdGhlIGNvbnRlbnRzIG9mIGl0cyBjb250cmlidXRvciB2ZXJzaW9uLgorCisgIEluIHRoZSBmb2xsb3dpbmcgdGhyZWUgcGFyYWdyYXBocywgYSAicGF0ZW50IGxpY2Vuc2UiIGlzIGFueSBleHByZXNzCithZ3JlZW1lbnQgb3IgY29tbWl0bWVudCwgaG93ZXZlciBkZW5vbWluYXRlZCwgbm90IHRvIGVuZm9yY2UgYSBwYXRlbnQKKyhzdWNoIGFzIGFuIGV4cHJlc3MgcGVybWlzc2lvbiB0byBwcmFjdGljZSBhIHBhdGVudCBvciBjb3ZlbmFudCBub3QgdG8KK3N1ZSBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCkuICBUbyAiZ3JhbnQiIHN1Y2ggYSBwYXRlbnQgbGljZW5zZSB0byBhCitwYXJ0eSBtZWFucyB0byBtYWtlIHN1Y2ggYW4gYWdyZWVtZW50IG9yIGNvbW1pdG1lbnQgbm90IHRvIGVuZm9yY2UgYQorcGF0ZW50IGFnYWluc3QgdGhlIHBhcnR5LgorCisgIElmIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIGtub3dpbmdseSByZWx5aW5nIG9uIGEgcGF0ZW50IGxpY2Vuc2UsCithbmQgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIG9mIHRoZSB3b3JrIGlzIG5vdCBhdmFpbGFibGUgZm9yIGFueW9uZQordG8gY29weSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHRocm91Z2ggYQorcHVibGljbHkgYXZhaWxhYmxlIG5ldHdvcmsgc2VydmVyIG9yIG90aGVyIHJlYWRpbHkgYWNjZXNzaWJsZSBtZWFucywKK3RoZW4geW91IG11c3QgZWl0aGVyICgxKSBjYXVzZSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgdG8gYmUgc28KK2F2YWlsYWJsZSwgb3IgKDIpIGFycmFuZ2UgdG8gZGVwcml2ZSB5b3Vyc2VsZiBvZiB0aGUgYmVuZWZpdCBvZiB0aGUKK3BhdGVudCBsaWNlbnNlIGZvciB0aGlzIHBhcnRpY3VsYXIgd29yaywgb3IgKDMpIGFycmFuZ2UsIGluIGEgbWFubmVyCitjb25zaXN0ZW50IHdpdGggdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UsIHRvIGV4dGVuZCB0aGUgcGF0ZW50CitsaWNlbnNlIHRvIGRvd25zdHJlYW0gcmVjaXBpZW50cy4gICJLbm93aW5nbHkgcmVseWluZyIgbWVhbnMgeW91IGhhdmUKK2FjdHVhbCBrbm93bGVkZ2UgdGhhdCwgYnV0IGZvciB0aGUgcGF0ZW50IGxpY2Vuc2UsIHlvdXIgY29udmV5aW5nIHRoZQorY292ZXJlZCB3b3JrIGluIGEgY291bnRyeSwgb3IgeW91ciByZWNpcGllbnQncyB1c2Ugb2YgdGhlIGNvdmVyZWQgd29yaworaW4gYSBjb3VudHJ5LCB3b3VsZCBpbmZyaW5nZSBvbmUgb3IgbW9yZSBpZGVudGlmaWFibGUgcGF0ZW50cyBpbiB0aGF0Citjb3VudHJ5IHRoYXQgeW91IGhhdmUgcmVhc29uIHRvIGJlbGlldmUgYXJlIHZhbGlkLgorCisgIElmLCBwdXJzdWFudCB0byBvciBpbiBjb25uZWN0aW9uIHdpdGggYSBzaW5nbGUgdHJhbnNhY3Rpb24gb3IKK2FycmFuZ2VtZW50LCB5b3UgY29udmV5LCBvciBwcm9wYWdhdGUgYnkgcHJvY3VyaW5nIGNvbnZleWFuY2Ugb2YsIGEKK2NvdmVyZWQgd29yaywgYW5kIGdyYW50IGEgcGF0ZW50IGxpY2Vuc2UgdG8gc29tZSBvZiB0aGUgcGFydGllcworcmVjZWl2aW5nIHRoZSBjb3ZlcmVkIHdvcmsgYXV0aG9yaXppbmcgdGhlbSB0byB1c2UsIHByb3BhZ2F0ZSwgbW9kaWZ5CitvciBjb252ZXkgYSBzcGVjaWZpYyBjb3B5IG9mIHRoZSBjb3ZlcmVkIHdvcmssIHRoZW4gdGhlIHBhdGVudCBsaWNlbnNlCit5b3UgZ3JhbnQgaXMgYXV0b21hdGljYWxseSBleHRlbmRlZCB0byBhbGwgcmVjaXBpZW50cyBvZiB0aGUgY292ZXJlZAord29yayBhbmQgd29ya3MgYmFzZWQgb24gaXQuCisKKyAgQSBwYXRlbnQgbGljZW5zZSBpcyAiZGlzY3JpbWluYXRvcnkiIGlmIGl0IGRvZXMgbm90IGluY2x1ZGUgd2l0aGluCit0aGUgc2NvcGUgb2YgaXRzIGNvdmVyYWdlLCBwcm9oaWJpdHMgdGhlIGV4ZXJjaXNlIG9mLCBvciBpcworY29uZGl0aW9uZWQgb24gdGhlIG5vbi1leGVyY2lzZSBvZiBvbmUgb3IgbW9yZSBvZiB0aGUgcmlnaHRzIHRoYXQgYXJlCitzcGVjaWZpY2FsbHkgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBZb3UgbWF5IG5vdCBjb252ZXkgYSBjb3ZlcmVkCit3b3JrIGlmIHlvdSBhcmUgYSBwYXJ0eSB0byBhbiBhcnJhbmdlbWVudCB3aXRoIGEgdGhpcmQgcGFydHkgdGhhdCBpcworaW4gdGhlIGJ1c2luZXNzIG9mIGRpc3RyaWJ1dGluZyBzb2Z0d2FyZSwgdW5kZXIgd2hpY2ggeW91IG1ha2UgcGF5bWVudAordG8gdGhlIHRoaXJkIHBhcnR5IGJhc2VkIG9uIHRoZSBleHRlbnQgb2YgeW91ciBhY3Rpdml0eSBvZiBjb252ZXlpbmcKK3RoZSB3b3JrLCBhbmQgdW5kZXIgd2hpY2ggdGhlIHRoaXJkIHBhcnR5IGdyYW50cywgdG8gYW55IG9mIHRoZQorcGFydGllcyB3aG8gd291bGQgcmVjZWl2ZSB0aGUgY292ZXJlZCB3b3JrIGZyb20geW91LCBhIGRpc2NyaW1pbmF0b3J5CitwYXRlbnQgbGljZW5zZSAoYSkgaW4gY29ubmVjdGlvbiB3aXRoIGNvcGllcyBvZiB0aGUgY292ZXJlZCB3b3JrCitjb252ZXllZCBieSB5b3UgKG9yIGNvcGllcyBtYWRlIGZyb20gdGhvc2UgY29waWVzKSwgb3IgKGIpIHByaW1hcmlseQorZm9yIGFuZCBpbiBjb25uZWN0aW9uIHdpdGggc3BlY2lmaWMgcHJvZHVjdHMgb3IgY29tcGlsYXRpb25zIHRoYXQKK2NvbnRhaW4gdGhlIGNvdmVyZWQgd29yaywgdW5sZXNzIHlvdSBlbnRlcmVkIGludG8gdGhhdCBhcnJhbmdlbWVudCwKK29yIHRoYXQgcGF0ZW50IGxpY2Vuc2Ugd2FzIGdyYW50ZWQsIHByaW9yIHRvIDI4IE1hcmNoIDIwMDcuCisKKyAgTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgY29uc3RydWVkIGFzIGV4Y2x1ZGluZyBvciBsaW1pdGluZworYW55IGltcGxpZWQgbGljZW5zZSBvciBvdGhlciBkZWZlbnNlcyB0byBpbmZyaW5nZW1lbnQgdGhhdCBtYXkKK290aGVyd2lzZSBiZSBhdmFpbGFibGUgdG8geW91IHVuZGVyIGFwcGxpY2FibGUgcGF0ZW50IGxhdy4KKworICAxMi4gTm8gU3VycmVuZGVyIG9mIE90aGVycycgRnJlZWRvbS4KKworICBJZiBjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdCBjb252ZXkgYQorY292ZXJlZCB3b3JrIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91IG1heQorbm90IGNvbnZleSBpdCBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgeW91IGFncmVlIHRvIHRlcm1zIHRoYXQgb2JsaWdhdGUgeW91Cit0byBjb2xsZWN0IGEgcm95YWx0eSBmb3IgZnVydGhlciBjb252ZXlpbmcgZnJvbSB0aG9zZSB0byB3aG9tIHlvdSBjb252ZXkKK3RoZSBQcm9ncmFtLCB0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCB0aG9zZSB0ZXJtcyBhbmQgdGhpcworTGljZW5zZSB3b3VsZCBiZSB0byByZWZyYWluIGVudGlyZWx5IGZyb20gY29udmV5aW5nIHRoZSBQcm9ncmFtLgorCisgIDEzLiBVc2Ugd2l0aCB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorCisgIE5vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgeW91IGhhdmUKK3Blcm1pc3Npb24gdG8gbGluayBvciBjb21iaW5lIGFueSBjb3ZlcmVkIHdvcmsgd2l0aCBhIHdvcmsgbGljZW5zZWQKK3VuZGVyIHZlcnNpb24gMyBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGludG8gYSBzaW5nbGUKK2NvbWJpbmVkIHdvcmssIGFuZCB0byBjb252ZXkgdGhlIHJlc3VsdGluZyB3b3JrLiAgVGhlIHRlcm1zIG9mIHRoaXMKK0xpY2Vuc2Ugd2lsbCBjb250aW51ZSB0byBhcHBseSB0byB0aGUgcGFydCB3aGljaCBpcyB0aGUgY292ZXJlZCB3b3JrLAorYnV0IHRoZSBzcGVjaWFsIHJlcXVpcmVtZW50cyBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorc2VjdGlvbiAxMywgY29uY2VybmluZyBpbnRlcmFjdGlvbiB0aHJvdWdoIGEgbmV0d29yayB3aWxsIGFwcGx5IHRvIHRoZQorY29tYmluYXRpb24gYXMgc3VjaC4KKworICAxNC4gUmV2aXNlZCBWZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YKK3RoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKKyAgRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUKK1Byb2dyYW0gc3BlY2lmaWVzIHRoYXQgYSBjZXJ0YWluIG51bWJlcmVkIHZlcnNpb24gb2YgdGhlIEdOVSBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSAib3IgYW55IGxhdGVyIHZlcnNpb24iIGFwcGxpZXMgdG8gaXQsIHlvdSBoYXZlIHRoZQorb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgbnVtYmVyZWQKK3ZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkCitieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIElmIHRoZSBQcm9ncmFtIHNwZWNpZmllcyB0aGF0IGEgcHJveHkgY2FuIGRlY2lkZSB3aGljaCBmdXR1cmUKK3ZlcnNpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBjYW4gYmUgdXNlZCwgdGhhdCBwcm94eSdzCitwdWJsaWMgc3RhdGVtZW50IG9mIGFjY2VwdGFuY2Ugb2YgYSB2ZXJzaW9uIHBlcm1hbmVudGx5IGF1dGhvcml6ZXMgeW91Cit0byBjaG9vc2UgdGhhdCB2ZXJzaW9uIGZvciB0aGUgUHJvZ3JhbS4KKworICBMYXRlciBsaWNlbnNlIHZlcnNpb25zIG1heSBnaXZlIHlvdSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudAorcGVybWlzc2lvbnMuICBIb3dldmVyLCBubyBhZGRpdGlvbmFsIG9ibGlnYXRpb25zIGFyZSBpbXBvc2VkIG9uIGFueQorYXV0aG9yIG9yIGNvcHlyaWdodCBob2xkZXIgYXMgYSByZXN1bHQgb2YgeW91ciBjaG9vc2luZyB0byBmb2xsb3cgYQorbGF0ZXIgdmVyc2lvbi4KKworICAxNS4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4KKworICBUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZCitBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUCitIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZCitPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKK1RIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK1BVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNCitJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YKK0FMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxNi4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuCisKKyAgSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1PRElGSUVTIEFORC9PUiBDT05WRVlTCitUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkKK0dFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRQorVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRgorREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQKK1BBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIgUFJPR1JBTVMpLAorRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0VTLgorCisgIDE3LiBJbnRlcnByZXRhdGlvbiBvZiBTZWN0aW9ucyAxNSBhbmQgMTYuCisKKyAgSWYgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudHkgYW5kIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHByb3ZpZGVkCithYm92ZSBjYW5ub3QgYmUgZ2l2ZW4gbG9jYWwgbGVnYWwgZWZmZWN0IGFjY29yZGluZyB0byB0aGVpciB0ZXJtcywKK3Jldmlld2luZyBjb3VydHMgc2hhbGwgYXBwbHkgbG9jYWwgbGF3IHRoYXQgbW9zdCBjbG9zZWx5IGFwcHJveGltYXRlcworYW4gYWJzb2x1dGUgd2FpdmVyIG9mIGFsbCBjaXZpbCBsaWFiaWxpdHkgaW4gY29ubmVjdGlvbiB3aXRoIHRoZQorUHJvZ3JhbSwgdW5sZXNzIGEgd2FycmFudHkgb3IgYXNzdW1wdGlvbiBvZiBsaWFiaWxpdHkgYWNjb21wYW5pZXMgYQorY29weSBvZiB0aGUgUHJvZ3JhbSBpbiByZXR1cm4gZm9yIGEgZmVlLgorCisgICAgICAgICAgICAgICAgICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworICAgICAgICAgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisKKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKK3N0YXRlIHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QKK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworICBJZiB0aGUgcHJvZ3JhbSBkb2VzIHRlcm1pbmFsIGludGVyYWN0aW9uLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0Citub3RpY2UgbGlrZSB0aGlzIHdoZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisKKyAgICA8cHJvZ3JhbT4gIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisgICAgVGhpcyBwcm9ncmFtIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB5b3VyIHByb2dyYW0ncyBjb21tYW5kcworbWlnaHQgYmUgZGlmZmVyZW50OyBmb3IgYSBHVUkgaW50ZXJmYWNlLCB5b3Ugd291bGQgdXNlIGFuICJhYm91dCBib3giLgorCisgIFlvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciBzY2hvb2wsCitpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYgbmVjZXNzYXJ5LgorRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcywgYW5kIGhvdyB0byBhcHBseSBhbmQgZm9sbG93IHRoZSBHTlUgR1BMLCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworICBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtCitpbnRvIHByb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UKK21heSBjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aAordGhlIGxpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4gIEJ1dCBmaXJzdCwgcGxlYXNlIHJlYWQKKzxodHRwOi8vd3d3LmdudS5vcmcvcGhpbG9zb3BoeS93aHktbm90LWxncGwuaHRtbD4uCmRpZmYgLS1naXQgYS9DbGVhblNwZWMubWsgYi9DbGVhblNwZWMubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg0ZTFiNgotLS0gL2Rldi9udWxsCisrKyBiL0NsZWFuU3BlYy5tawpAQCAtMCwwICsxLDQ5IEBACisjIENvcHlyaWdodCAoQykgMjAwNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCisjIElmIHlvdSBkb24ndCBuZWVkIHRvIGRvIGEgZnVsbCBjbGVhbiBidWlsZCBidXQgd291bGQgbGlrZSB0byB0b3VjaAorIyBhIGZpbGUgb3IgZGVsZXRlIHNvbWUgaW50ZXJtZWRpYXRlIGZpbGVzLCBhZGQgYSBjbGVhbiBzdGVwIHRvIHRoZSBlbmQKKyMgb2YgdGhlIGxpc3QuICBUaGVzZSBzdGVwcyB3aWxsIG9ubHkgYmUgcnVuIG9uY2UsIGlmIHRoZXkgaGF2ZW4ndCBiZWVuCisjIHJ1biBiZWZvcmUuCisjCisjIEUuZy46CisjICAgICAkKGNhbGwgYWRkLWNsZWFuLXN0ZXAsIHRvdWNoIC1jIGV4dGVybmFsL3NxbGl0ZS9zcWxpdGUzLmgpCisjICAgICAkKGNhbGwgYWRkLWNsZWFuLXN0ZXAsIHJtIC1yZiAkKFBST0RVQ1RfT1VUKS9vYmovU1RBVElDX0xJQlJBUklFUy9saWJ6X2ludGVybWVkaWF0ZXMpCisjCisjIEFsd2F5cyB1c2UgInRvdWNoIC1jIiBhbmQgInJtIC1mIiBvciAicm0gLXJmIiB0byBncmFjZWZ1bGx5IGRlYWwgd2l0aAorIyBmaWxlcyB0aGF0IGFyZSBtaXNzaW5nIG9yIGhhdmUgYmVlbiBtb3ZlZC4KKyMKKyMgVXNlICQoUFJPRFVDVF9PVVQpIHRvIGdldCB0byB0aGUgIm91dC90YXJnZXQvcHJvZHVjdC9ibGFoLyIgZGlyZWN0b3J5LgorIyBVc2UgJChPVVRfRElSKSB0byByZWZlciB0byB0aGUgIm91dCIgZGlyZWN0b3J5LgorIworIyBJZiB5b3UgbmVlZCB0byByZS1kbyBzb21ldGhpbmcgdGhhdCdzIGFscmVhZHkgbWVudGlvbmVkLCBqdXN0IGNvcHkKKyMgdGhlIGNvbW1hbmQgYW5kIGFkZCBpdCB0byB0aGUgYm90dG9tIG9mIHRoZSBsaXN0LiAgRS5nLiwgaWYgYSBjaGFuZ2UKKyMgdGhhdCB5b3UgbWFkZSBsYXN0IHdlZWsgcmVxdWlyZWQgdG91Y2hpbmcgYSBmaWxlIGFuZCBhIGNoYW5nZSB5b3UKKyMgbWFkZSB0b2RheSByZXF1aXJlcyB0b3VjaGluZyB0aGUgc2FtZSBmaWxlLCBqdXN0IGNvcHkgdGhlIG9sZAorIyB0b3VjaCBzdGVwIGFuZCBhZGQgaXQgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC4KKyMKKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIE5FV0VSIENMRUFOIFNURVBTIE1VU1QgQkUgQVQgVEhFIEVORCBPRiBUSEUgTElTVAorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworIyBGb3IgZXhhbXBsZToKKyMkKGNhbGwgYWRkLWNsZWFuLXN0ZXAsIHJtIC1yZiAkKE9VVF9ESVIpL3RhcmdldC9jb21tb24vb2JqL0FQUFMvQW5kcm9pZFRlc3RzX2ludGVybWVkaWF0ZXMpCisjJChjYWxsIGFkZC1jbGVhbi1zdGVwLCBybSAtcmYgJChPVVRfRElSKS90YXJnZXQvY29tbW9uL29iai9KQVZBX0xJQlJBUklFUy9jb3JlX2ludGVybWVkaWF0ZXMpCisjJChjYWxsIGFkZC1jbGVhbi1zdGVwLCBmaW5kICQoT1VUX0RJUikgLXR5cGUgZiAtbmFtZSAiSUdUYWxrU2Vzc2lvbioiIC1wcmludDAgfCB4YXJncyAtMCBybSAtZikKKyMkKGNhbGwgYWRkLWNsZWFuLXN0ZXAsIHJtIC1yZiAkKFBST0RVQ1RfT1VUKS9kYXRhLyopCisKKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIE5FV0VSIENMRUFOIFNURVBTIE1VU1QgQkUgQVQgVEhFIEVORCBPRiBUSEUgTElTVAorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL0ZBUSBiL0ZBUQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NjdhZDJjCi0tLSAvZGV2L251bGwKKysrIGIvRkFRCkBAIC0wLDAgKzEsNTY1IEBACitROiBXaHkgZG9lcyBkbnNtYXNxIG9wZW4gVURQIHBvcnRzID4xMDI0IGFzIHdlbGwgYXMgcG9ydCA1My4KKyAgIElzIHRoaXMgYSBzZWN1cml0eSBwcm9ibGVtL3Ryb2phbi9iYWNrZG9vcj8KKworQTogVGhlIGhpZ2ggcG9ydHMgdGhhdCBkbnNtYXNxIG9wZW5zIGFyZSBmb3IgcmVwbGllcyBmcm9tIHRoZSB1cHN0cmVhbQorICAgbmFtZXNlcnZlcihzKS4gUXVlcmllcyBmcm9tIGRuc21hc3EgdG8gdXBzdHJlYW0gbmFtZXNlcnZlcnMgYXJlIHNlbnQKKyAgIGZyb20gdGhlc2UgcG9ydHMgYW5kIHJlcGxpZXMgcmVjZWl2ZWQgdG8gdGhlbS4gVGhlIHJlYXNvbiBmb3IgZG9pbmcgdGhpcyBpcworICAgdGhhdCBtb3N0IGZpcmV3YWxsIHNldHVwcyBibG9jayBpbmNvbWluZyBwYWNrZXRzIF90b18gcG9ydCA1MywgaW4gb3JkZXIKKyAgIHRvIHN0b3AgRE5TIHF1ZXJpZXMgZnJvbSB0aGUgb3V0c2lkZSB3b3JsZC4gSWYgZG5zbWFzcSBzZW50IGl0cyBxdWVyaWVzCisgICBmcm9tIHBvcnQgNTMgdGhlIHJlcGxpZXMgd291bGQgYmUgX3RvXyBwb3J0IDUzIGFuZCBnZXQgYmxvY2tlZC4KKworICAgVGhpcyBpcyBub3QgYSBzZWN1cml0eSBob2xlIHNpbmNlIGRuc21hc3Egd2lsbCBvbmx5IGFjY2VwdCByZXBsaWVzIHRvIHRoYXQKKyAgIHBvcnQ6IHF1ZXJpZXMgYXJlICBkcm9wcGVkLiBUaGUgcmVwbGllcyBtdXN0IGJlIHRvIG91c3RhbmRpbmcgcXVlcmllcworICAgd2hpY2ggZG5zbWFzcSBoYXMgZm9yd2FyZGVkLCBvdGhlcndpc2UgdGhleSBhcmUgZHJvcHBlZCB0b28uCisgCisgICBBZGRlbmR1bTogZG5zbWFzcSBub3cgaGFzIHRoZSBvcHRpb24gInF1ZXJ5LXBvcnQiICgtUSksIHdoaWNoIGFsbG93cworICAgeW91IHRvIHNwZWNpZnkgdGhlIFVEUCBwb3J0IHRvIGJlIHVzZWQgZm9yIHRoaXMgcHVycG9zZS4gIElmIG5vdAorICAgc3BlY2lmaWVkLCB0aGUgb3BlcmF0aW5nIHN5c3RlbSB3aWxsIHNlbGVjdCBhbiBhdmFpbGFibGUgcG9ydCBudW1iZXIKKyAgIGp1c3QgYXMgaXQgZGlkIGJlZm9yZS4KKworICAgU2Vjb25kIGFkZGVuZHVtOiBmb2xsb3dpbmcgdGhlIGRpc2NvdmVyeSBvZiBhIHNlY3VyaXR5IGZsYXcgaW4gdGhlCisgICBETlMgcHJvdG9jb2wsIGRuc21hc3EgZnJvbSB2ZXJzaW9uIDIuNDMgaGFzIGNoYW5nZWQgYmVoYXZpb3IuIEl0CisgICBub3cgdXNlcyBhIG5ldywgcmFuZG9tbHkgc2VsZWN0ZWQsIHBvcnQgZm9yIGVhY2ggcXVlcnkuIFRoZSBvbGQKKyAgIGRlZmF1bHQgYmVoYXZpb3VyICh1c2Ugb25lIHBvcnQgYWxsb2NhdGVkIGJ5IHRoZSBPUykgaXMgYXZhaWxhYmxlIGJ5CisgICBzZXR0aW5nIC0tcXVlcnktcG9ydD0wLCBhbmQgc2V0dGluZyB0aGUgcXVlcnkgcG9ydCB0byBhIHBvc2l0aXZlCisgICB2YWx1ZSBzdGlsbCB3b3Jrcy4gWW91IHNob3VsZCB0aGluayBoYXJkIGFuZCBrbm93IHdoYXQgeW91IGFyZQorICAgZG9pbmcgYmVmb3JlIHVzaW5nIGVpdGhlciBvZiB0aGVzZSBvcHRpb25zLgorIAorUTogV2h5IGRvZXNuJ3QgZG5zbWFzcSBzdXBwb3J0IEROUyBxdWVyaWVzIG92ZXIgVENQPyBEb24ndCB0aGUgUkZDJ3Mgc3BlY2lmeQorICAgdGhhdD8KKworQTogVXBkYXRlOiBmcm9tIHZlcnNpb24gMi4xMCwgaXQgZG9lcy4gVGhlcmUgYXJlIGEgZmV3IGxpbWl0YXRpb25zOgorICAgZGF0YSBvYnRhaW5lZCB2aWEgVENQIGlzIG5vdCBjYWNoZWQsIGFuZCBzb3VyY2UtYWRkcmVzcworICAgb3IgcXVlcnktcG9ydCBzcGVjaWZpY2F0aW9ucyBhcmUgaWdub3JlZCBmb3IgVENQLgorCitROiBXaGVuIEkgc2VuZCBTSUdVU1IxIHRvIGR1bXAgdGhlIGNvbnRlbnRzIG9mIHRoZSBjYWNoZSwgc29tZSBlbnRyaWVzIGhhdmUKKyAgIG5vIElQIGFkZHJlc3MgYW5kIGFyZSBmb3IgbmFtZXMgbGlrZSBteW1hY2hpbmUubXlkb21haW4uY29tLm15ZG9tYWluLmNvbS4KKyAgIFdoYXQgYXJlIHRoZXNlPworCitBOiBUaGV5IGFyZSBuZWdhdGl2ZSBlbnRyaWVzOiB0aGF0J3Mgd2hhdCB0aGUgTiBmbGFnIG1lYW5zLiBEbnNtYXNxIGFza2VkIAorICAgYW4gdXBzdHJlYW0gbmFtZXNlcnZlciB0byByZXNvbHZlIHRoYXQgYWRkcmVzcyBhbmQgaXQgcmVwbGllZCAiZG9lc24ndCAKKyAgIGV4aXN0LCBhbmQgd29uJ3QgZXhpc3QgZm9yIDxuPiBob3VycyIgc28gZG5zbWFzcSBzYXZlZCB0aGF0IGluZm9ybWF0aW9uIHNvCisgICB0aGF0IGlmIF9pdF8gZ2V0cyBhc2tlZCB0aGUgc2FtZSBxdWVzdGlvbiBpdCBjYW4gYW5zd2VyIGRpcmVjdGx5IHdpdGhvdXQKKyAgIGhhdmluZyB0byBnbyBiYWNrIHRvIHRoZSB1cHN0cmVhbSBzZXJ2ZXIgYWdhaW4uIFRoZSBzdHJhbmdlIHJlcGVhdGVkIGRvbWFpbnMKKyAgIHJlc3VsdCBmcm9tIHRoZSB3YXkgcmVzb2x2ZXJzIHNlYXJjaCBzaG9ydCBuYW1lcy4gU2VlICJtYW4gcmVzb2x2LmNvbmYiIGZvcgorICAgZGV0YWlscy4KKworCitROiBXaWxsIGRuc21hc3EgY29tcGlsZS9ydW4gb24gbm9uLUxpbnV4IHN5c3RlbXM/CisKK0E6IFllcywgdGhlcmUgaXMgZXhwbGljaXQgc3VwcG9ydCBmb3IgKkJTRCBhbmQgTWFjT1MgWCBhbmQgU29sYXJpcy4gCisgICBUaGVyZSBhcmUgc3RhcnQtdXAgc2NyaXB0cyBmb3IgTWFjT1MgWCBUaWdlciBhbmQgUGFudGhlciAKKyAgIGluIC9jb250cmliLiBEbnNtYXNxIHdpbGwgbGluayB3aXRoIHVjbGliYyB0byBwcm92aWRlIHNtYWxsCisgICBiaW5hcmllcyBzdWl0YWJsZSBmb3IgdXNlIGluIGVtYmVkZGVkIHN5c3RlbXMgc3VjaCBhcworICAgcm91dGVycy4gKFRoZXJlJ3Mgc3BlY2lhbCBjb2RlIHRvIHN1cHBvcnQgbWFjaGluZXMgd2l0aCBmbGFzaAorICAgZmlsZXN5c3RlbXMgYW5kIG5vIGJhdHRlcnktYmFja2VkIFJUQy4pCisgICBJZiB5b3UgZW5jb3VudGVyIG1ha2UgZXJyb3JzIHdpdGggKkJTRCwgdHJ5IGluc3RhbGxpbmcgZ21ha2UgZnJvbQorICAgcG9ydHMgYW5kIGJ1aWxkaW5nIGRuc21hc3Egd2l0aCAibWFrZSBNQUtFPWdtYWtlIiAKKyAgIEZvciBvdGhlciBzeXN0ZW1zLCB0cnkgYWx0ZXJpbmcgdGhlIHNldHRpbmdzIGluIGNvbmZpZy5oLgorIAorUTogTXkgY29tcGFueSdzIG5hbWVzZXJ2ZXIga25vd3MgYWJvdXQgc29tZSBuYW1lcyB3aGljaCBhcmVuJ3QgaW4gdGhlCisgICBwdWJsaWMgRE5TLiBFdmVuIHRob3VnaCBJIHB1dCBpdCBmaXJzdCBpbiAvZXRjL3Jlc29sdi5jb25mLCBpdAorICAgZG9lc24ndCB3b3JrOiBkbnNtYXNxIHNlZW1zIG5vdCB0byB1c2UgdGhlIG5hbWVzZXJ2ZXJzIGluIHRoZSBvcmRlcgorICAgZ2l2ZW4uIFdoYXQgYW0gSSBkb2luZyB3cm9uZz8KKworQTogQnkgZGVmYXVsdCwgZG5zbWFzcSB0cmVhdHMgYWxsIHRoZSBuYW1lc2VydmVycyBpdCBrbm93cyBhYm91dCBhcworICAgZXF1YWw6IGl0IHBpY2tzIHRoZSBvbmUgdG8gdXNlIHVzaW5nIGFuIGFsZ29yaXRobSBkZXNpZ25lZCB0byBhdm9pZCAKKyAgIG5hbWVzZXJ2ZXJzIHdoaWNoIGFyZW4ndCByZXNwb25kaW5nLiBUbyBtYWtlIGRuc21hc3EgdXNlIHRoZQorICAgc2VydmVycyBpbiBvcmRlciwgZ2l2ZSBpdCB0aGUgLW8gZmxhZy4gSWYgeW91IHdhbnQgc29tZSBxdWVyaWVzCisgICBzZW50IHRvIGEgc3BlY2lhbCBzZXJ2ZXIsIHRoaW5rIGFib3V0IHVzaW5nIHRoZSAtUyBmbGFnIHRvIGdpdmUgdGhlCisgICBJUCBhZGRyZXNzIG9mIHRoYXQgc2VydmVyLCBhbmQgdGVsbGluZyBkbnNtYXNxIGV4YWN0bHkgd2hpY2gKKyAgIGRvbWFpbnMgdG8gdXNlIHRoZSBzZXJ2ZXIgZm9yLgorCitROiBPSywgSSd2ZSBnb3QgcXVlcmllcyB0byBhIHByaXZhdGUgbmFtZXNlcnZlciB3b3JraW5nLCBub3cgaG93IGFib3V0IAorICAgcmV2ZXJzZSBxdWVyaWVzIGZvciBhIHJhbmdlIG9mIElQIGFkZHJlc3Nlcz8KKworQTogVXNlIHRoZSBzdGFuZGFyZCBETlMgY29udmVudGlvbiBvZiA8cmV2ZXJzZWQgYWRkcmVzcz4uaW4tYWRkci5hcnBhLgorICAgRm9yIGluc3RhbmNlIHRvIHNlbmQgcmV2ZXJzZSBxdWVyaWVzIG9uIHRoZSByYW5nZSAxOTIuMTY4LjAuMCB0byAKKyAgIDE5Mi4xNjguMC4yNTUgdG8gYSBuYW1lc2VydmVyIGF0IDEwLjAuMC4xIGRvCisgICBzZXJ2ZXI9LzAuMTY4LjE5Mi5pbi1hZGRyLmFycGEvMTAuMC4wLjEKKyAgIE5vdGUgdGhhdCB0aGUgImJvZ3VzLXByaXYiIG9wdGlvbiB0YWtlIHByaW9yaXR5IG92ZXIgdGhpcyBvcHRpb24sCisgICBzbyB0aGUgYWJvdmUgd2lsbCBub3Qgd29yayB3aGVuIHRoZSBib2d1cy1wcml2IG9wdGlvbiBpcyBzZXQuCisKK1E6IERuc21hc3EgZmFpbHMgdG8gc3RhcnQgd2l0aCBhbiBlcnJvciBsaWtlIHRoaXM6ICJkbnNtYXNxOiBiaW5kCisgICBmYWlsZWQ6IENhbm5vdCBhc3NpZ24gcmVxdWVzdGVkIGFkZHJlc3MiLiBXaGF0J3MgdGhlIHByb2JsZW0/CisKK0E6IFRoaXMgaGFzIGJlZW4gc2VlbiB3aGVuIGEgc3lzdGVtIGlzIGJyaW5naW5nIHVwIGEgUFBQIGludGVyZmFjZSBhdAorICAgYm9vdCB0aW1lOiBieSB0aGUgdGltZSBkbnNtYXNxIHN0YXJ0IHRoZSBpbnRlcmZhY2UgaGFzIGJlZW4KKyAgIGNyZWF0ZWQsIGJ1dCBub3QgYnJvdWdodCB1cCBhbmQgYXNzaWduZWQgYW4gYWRkcmVzcy4gVGhlIGVhc2llc3QKKyAgIHNvbHV0aW9uIGlzIHRvIHVzZSAtLWludGVyZmFjZSBmbGFncyB0byBzcGVjaWZ5IHdoaWNoIGludGVyZmFjZXMKKyAgIGRuc21hc3Egc2hvdWxkIGxpc3RlbiBvbi4gU2luY2UgeW91IGFyZSB1bmxpa2VseSB0byB3YW50IGRuc21hc3EgdG8KKyAgIGxpc3RlbiBvbiBhIFBQUCBpbnRlcmZhY2UgYW5kIG9mZmVyIEROUyBzZXJ2aWNlIHRvIHRoZSB3b3JsZCwgdGhlCisgICBwcm9ibGVtIGlzIHNvbHZlZC4KKworUTogSSdtIHJ1bm5pbmcgb24gQlNEIGFuZCBkbnNtYXNxIHdvbid0IGFjY2VwdCBsb25nIG9wdGlvbnMgb24gdGhlCisgICBjb21tYW5kIGxpbmUuIAorCitBOiBEbnNtYXNxIHdoZW4gYnVpbHQgb24gc29tZSBCU0Qgc3lzdGVtcyBkb2Vzbid0IHVzZSBHTlUgZ2V0b3B0IGJ5CisgICBkZWZhdWx0LiBZb3UgY2FuIGVpdGhlciBqdXN0IHVzZSB0aGUgc2luZ2xlLWxldHRlciBvcHRpb25zIG9yCisgICBjaGFuZ2UgY29uZmlnLmggYW5kIHRoZSBNYWtlZmlsZSB0byB1c2UgZ2V0b3B0LWxvbmcuIE5vdGUgdGhhdAorICAgb3B0aW9ucyBpbiAvZXRjL2Ruc21hc3EuY29uZiBtdXN0IGFsd2F5cyBiZSB0aGUgbG9uZyBmb3JtLAorICAgb24gYWxsIHBsYXRmb3Jtcy4KKworUTogTmFtZXMgb24gdGhlIGludGVybmV0IGFyZSB3b3JraW5nIGZpbmUsIGJ1dCBsb29raW5nIHVwIGxvY2FsIG5hbWVzIAorICAgZnJvbSAvZXRjL2hvc3RzIG9yIERIQ1AgZG9lc24ndCBzZWVtIHRvIHdvcmsuCisKK0E6IFJlc29sdmVyIGNvZGUgc29tZXRpbWUgZG9lcyBzdHJhbmdlIHRoaW5ncyB3aGVuIGdpdmVuIG5hbWVzIHdpdGhvdXQKKyAgIGFueSBkb3RzIGluLiBXaW4yayBhbmQgV2luWFAgbWF5IG5vdCB1c2UgdGhlIEROUyBhdCBhbGwgYW5kIGp1c3QKKyAgIHRyeSBhbmQgbG9vayB1cCB0aGUgbmFtZSB1c2luZyBXSU5TLiBPbiB1bml4IGxvb2sgYXQgIm9wdGlvbnMgbmRvdHM6IgorICAgaW4gIm1hbiByZXNvbHYuY29uZiIgZm9yIGRldGFpbHMgb24gdGhpcyB0b3BpYy4gVGVzdGluZyBsb29rdXBzCisgICB1c2luZyAibnNsb29rdXAiIG9yICJkaWciIHdpbGwgd29yaywgYnV0IHRoZW4gYXR0ZW1wdGluZyB0byBydW4KKyAgICJwaW5nIiB3aWxsIGdldCBhIGxvb2t1cCBmYWlsdXJlLCBhcHBlbmRpbmcgYSBkb3QgdG8gdGhlIGVuZCBvZiB0aGUKKyAgIGhvc3RuYW1lICB3aWxsIGZpeCB0aGluZ3MuIChpZSAicGluZyBteWhvc3QiIGZhaWxzLCBidXQgInBpbmcKKyAgIG15aG9zdC4iIHdvcmtzLiBUaGUgc29sdXRpb24gaXMgdG8gbWFrZSBzdXJlIHRoYXQgYWxsIHlvdXIgaG9zdHMKKyAgIGhhdmUgYSBkb21haW4gc2V0ICgiZG9tYWluIiBpbiByZXNvbHYuY29uZiwgb3Igc2V0IGEgZG9tYWluIGluIAorICAgeW91ciBESENQIHNlcnZlciwgc2VlIGJlbG93IGZvciBXaW5kb3dzIFhQIGFuZCBNYWMgT1MgWCkuIAorICAgQW55IGRvbWFpbiAgd2lsbCBkbywgYnV0ICJsb2NhbG5ldCIgaXMgdHJhZGl0aW9uYWwuIE5vdyB3aGVuIHlvdQorICAgcmVzb2x2ZSAibXlob3N0IiB0aGUgcmVzb2x2ZXIgd2lsbCBhdHRlbXB0IHRvIGxvb2sgdXAgCisgICAibXlob3N0LmxvY2FsbmV0IiBzbyB5b3UgbmVlZCB0byBoYXZlIGRuc21hc3EgcmVwbHkgdG8gdGhhdCBuYW1lLiAKKyAgIFRoZSB3YXkgdG8gZG8gdGhhdCBpcyB0byBpbmNsdWRlIHRoZSBkb21haW4gaW4gZWFjaCBuYW1lIG9uCisgICAvZXRjL2hvc3RzICBhbmQvb3IgdG8gdXNlIHRoZSAtLWV4cGFuZC1ob3N0cyBhbmQgLS1kb21haW4gb3B0aW9ucy4KKworUTogSG93IGRvIEkgc2V0IHRoZSBETlMgZG9tYWluIGluIFdpbmRvd3MgWFAgb3IgTWFjT1MgWCAocmVmOiBwcmV2aW91cworICAgcXVlc3Rpb24pPworCitBOiBmb3IgWFAsIENvbnRyb2wgUGFuZWwgPiBOZXR3b3JrIENvbm5lY3Rpb25zID4geyBDb25uZWN0aW9uIHRvIGdhdGV3YXkgLworICAgRE5TIH0gPiBQcm9wZXJ0aWVzID4geyBIaWdobGlnaHQgVENQL0lQIH0gPiBQcm9wZXJ0aWVzID4gQWR2YW5jZWQgPgorICAgRE5TIFRhYiA+IEROUyBzdWZmaXggZm9yIHRoaXMgY29ubmVjdGlvbjogCisKK0E6IGZvciBPUyBYLCBTeXN0ZW0gUHJlZmVyZW5jZXMgPiBOZXR3b3JrID4ge0Nvbm5lY3Rpb24gdG8gZ2F0ZXdheSAvIEROUyB9ID4KKyAgIFNlYXJjaCBkb21haW5zOgorCitROiBDYW4gSSBnZXQgZG5zbWFzcSB0byBzYXZlIHRoZSBjb250ZW50cyBvZiBpdHMgY2FjaGUgdG8gZGlzayB3aGVuCisgICBJIHNodXQgbXkgbWFjaGluZSBkb3duIGFuZCByZS1sb2FkIHdoZW4gaXQgc3RhcnRzIGFnYWluPworCitBOiBObywgdGhhdCBmYWNpbGl0eSBpcyBub3QgcHJvdmlkZWQuIFZlcnkgZmV3IG5hbWVzIGluIHRoZSBETlMgaGF2ZQorICAgdGhlaXIgdGltZS10by1saXZlIHNldCBmb3IgbG9uZ2VyIHRoYW4gYSBmZXcgaG91cnMgc28gbW9zdCBvZiB0aGUKKyAgIGNhY2hlIGVudHJpZXMgd291bGQgaGF2ZSBleHBpcmVkIGFmdGVyIGEgc2h1dGRvd24uIEZvciBsb25nZXItbGl2ZWQKKyAgIG5hbWVzIGl0J3MgbXVjaCBjaGVhcGVyIHRvIGp1c3QgcmVsb2FkIHRoZW0gZnJvbSB0aGUgdXBzdHJlYW0KKyAgIHNlcnZlci4gTm90ZSB0aGF0IGRuc21hc3EgaXMgbm90IHNodXQgZG93biBiZXR3ZWVuIFBQUCBzZXNzaW9ucyBzbworICAgZ28gb2ZmLWxpbmUgYW5kIHRoZW4gb24tbGluZSBhZ2FpbiB3aWxsIG5vdCBsb3NlIHRoZSBjb250ZW50cyBvZgorICAgdGhlIGNhY2hlLgorCitROiBXaG8gYXJlIFZlcmlzaWduLCB3aGF0IGRvIHRoZXkgaGF2ZSB0byBkbyB3aXRoIHRoZSBib2d1cy1ueGRvbWFpbgorICAgb3B0aW9uIGluIGRuc21hc3EgYW5kIHdoeSBzaG91bGQgSSB3b3J5IGFib3V0IGl0PworCitBOiBbbm90ZTogdGhpcyB3YXMgd3JpdHRlbiBpbiBTZXB0ZW1iZXIgMjAwMywgdGhpbmdzIG1heSB3ZWxsIGNoYW5nZS5dCisgICBWZXJpc2lnbiBydW4gdGhlIC5jb20gYW5kIC5uZXQgdG9wLWxldmVsLWRvbWFpbnMuIFRoZXkgaGF2ZSBqdXN0CisgICBjaGFuZ2VkIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZWlyIHNlcnZlcnMgc28gdGhhdCB1bmtub3duIC5jb20gYW5kCisgICAubmV0IGRvbWFpbnMsIGluc3RlYWQgb2YgcmV0dXJuaW5nIGFuIGVycm9yIGNvZGUgTlhET01BSU4sIChubyBzdWNoCisgICBkb21haW4pIHJldHVybiB0aGUgYWRkcmVzcyBvZiBhIGhvc3QgYXQgVmVyaXNpZ24gd2hpY2ggcnVucyBhIHdlYgorICAgc2VydmVyIHNob3dpbmcgYSBzZWFyY2ggcGFnZS4gTW9zdCByaWdodC10aGlua2luZyBwZW9wbGUgcmVnYXJkCisgICB0aGlzIG5ldyBiZWhhdmlvdXIgYXMgYnJva2VuIDotKS4gIFlvdSBjYW4gdGVzdCB0byBzZWUgaWYgeW91IGFyZQorICAgc3VmZmVyaW5nIFZlcmlzaWduIGJyb2tlbm5lc3MgYnkgcnVuIGEgY29tbWFuZCBsaWtlIAorICAgCisgICBob3N0IGpsc2RhamtkYWxsZC5jb20KKworICAgSWYgeW91IGdldCAiamxzZGFqa2RhbGxkLmNvbSIgZG9lcyBub3QgZXhpc3QsIHRoZW4gYWxsIGlzIGZpbmUsIGlmCisgICBob3N0IHJldHVybnMgYW4gSVAgYWRkcmVzcywgdGhlbiB0aGUgRE5TIGlzIGJyb2tlbi4gKFRyeSBhIGZldworICAgZGlmZmVyZW50IHVubGlrZWx5IGRvbWFpbnMsIGp1c3QgaW4gY2FzZSB5b3UgcGlja2VkIGEgd2VpcmQgb25lCisgICB3aGljaCByZWFsbHkgX2lzXyByZWdpc3RlcmVkLikKKworICAgQXNzdW1pbmcgdGhhdCB5b3VyIEROUyBpcyBicm9rZW4sIGFuZCB5b3Ugd2FudCB0byBmaXggaXQsIHNpbXBseQorICAgbm90ZSB0aGUgSVAgYWRkcmVzcyBiZWluZyByZXR1cm5lZCBhbmQgcGFzcyBpdCB0byBkbnNtYXNxIHVzaW5nIHRoZQorICAgLS1ib2d1cy1ueGRvbWFpbiBmbGFnLiBEbnNtYXNxIHdpbGwgY2hlY2sgZm9yIHJlc3VsdHMgcmV0dXJuaW5nCisgICB0aGF0IGFkZHJlc3MgYW5kIHN1YnN0aXR1dGUgYW4gTlhET01BSU4gaW5zdGVhZC4gCisKKyAgIEFzIG9mIHdyaXRpbmcsIHRoZSBJUCBhZGRyZXNzIGluIHF1ZXN0aW9uIGZvciB0aGUgLmNvbSBhbmQgLm5ldAorICAgZG9tYWlucyBpcyBpcyA2NC45NC4xMTAuMTEuIFZhcmlvdXMgb3RoZXIsIGxlc3MgcHJvbWluZW50LAorICAgcmVnaXN0cmllcyBwdWxsIHRoZSBzYW1lIHN0dW50OyB0aGVyZSBpcyBhIGxpc3Qgb2YgdGhlbSBhbGwsIGFuZAorICAgdGhlIGFkZHJlc3NlcyB0byBibG9jaywgYXQgaHR0cDovL3dpbndhcmUub3JnL2JvZ3VzLWRvbWFpbnMudHh0CisKK1E6IFRoaXMgbmV3IERIQ1Agc2VydmVyIGlzIHdlbGwgYW5kIGdvb2QsIGJ1dCBpdCBkb2Vzbid0IHdvcmsgZm9yIG1lLgorICAgV2hhdCdzIHRoZSBwcm9ibGVtPworCitBOiBUaGVyZSBhcmUgYSBjb3VwbGUgb2YgY29uZmlndXJhdGlvbiBnb3RjaGFzIHdoaWNoIGhhdmUgYmVlbgorICAgZW5jb3VudGVyZWQgYnkgcGVvcGxlIG1vdmluZyBmcm9tIHRoZSBJU0MgZGhjcGQgdG8gdGhlIGRuc21hc3EKKyAgIGludGVncmF0ZWQgREhDUCBkYWVtb24uIEJvdGggYXJlIHJlbGF0ZWQgdG8gZGlmZmVyZW5jZXMgaW4gCisgICBpbiB0aGUgd2F5IHRoZSB0d28gZGFlbW9ucyBieXBhc3MgdGhlIElQIHN0YWNrIHRvIGRvICJncm91bmQgdXAiCisgICBJUCBjb25maWd1cmF0aW9uIGFuZCBjYW4gbGVhZCB0byB0aGUgZG5zbWFzcSBkYWVtb24gZmFpbGluZworICAgd2hpbHN0IHRoZSBJU0Mgb25lIHdvcmtzLgorCisgICBUaGUgZmlyc3QgdGhpbmcgdG8gY2hlY2sgaXMgdGhlIGJyb2FkY2FzdCBhZGRyZXNzIHNldCBmb3IgdGhlCisgICBldGhlcm5ldCBpbnRlcmZhY2UuIFRoaXMgaXMgbm9ybWFsbHkgdGhlIGFkZHJlc3Mgb24gdGhlIGNvbm5lY3RlZAorICAgbmV0d29yayB3aXRoIGFsbCBvbmVzIGluIHRoZSBob3N0IHBhcnQuIEZvciBpbnN0YW5jZSBpZiB0aGUgCisgICBhZGRyZXNzIG9mIHRoZSBldGhlcm5ldCBpbnRlcmZhY2UgaXMgMTkyLjE2OC41NS43IGFuZCB0aGUgbmV0bWFzaworICAgaXMgMjU1LjI1NS4yNTUuMCB0aGVuIHRoZSBicm9hZGNhc3QgYWRkcmVzcyBzaG91bGQgYmUKKyAgIDE5Mi4xNjguNTUuMjU1LiBIYXZpbmcgYSBicm9hZGNhc3QgYWRkcmVzcyB3aGljaCBpcyBub3Qgb24gdGhlCisgICBuZXR3b3JrIHRvIHdoaWNoIHRoZSBpbnRlcmZhY2UgaXMgY29ubmVjdGVkIGtpbGxzIHRoaW5ncyBzdG9uZQorICAgZGVhZC4KKworICAgVGhlIHNlY29uZCBwb3RlbnRpYWwgcHJvYmxlbSByZWxhdGVzIHRvIGZpcmV3YWxsIHJ1bGVzOiBzaW5jZSB0aGUgSVNDIAorICAgZGFlbW9uIGluIHNvbWUgY29uZmlndXJhdGlvbnMgYnlwYXNzZXMgdGhlIGtlcm5lbCBmaXJld2FsbCBydWxlcyAKKyAgIGVudGlyZWx5LCB0aGUgYWJpbGl0eSB0byBydW4gdGhlIElTQyBkYWVtb24gZG9lcyBub3QgaW5kaWNhdGUgCisgICB0aGF0IHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gaXMgT0sgZm9yIHRoZSBkbnNtYXNxIGRhZW1vbi4KKyAgIEZvciB0aGUgZG5zbWFzcSBkYWVtb24gdG8gb3BlcmF0ZSBpdCdzIHZpdGFsIHRoYXQgVURQIHBhY2tldHMgdG8gCisgICBhbmQgZnJvbSBwb3J0cyA2NyBhbmQgNjggYW5kIGJyb2FkY2FzdCBwYWNrZXRzIHdpdGggc291cmNlIAorICAgYWRkcmVzcyAwLjAuMC4wIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzIDI1NS4yNTUuMjU1LjI1NSBhcmUgbm90IAorICAgZHJvcHBlZCBieSBpcHRhYmxlcy9pcGNoYWlucy4KKworUTogSSdtIHJ1bm5pbmcgRGViaWFuLCBhbmQgbXkgbWFjaGluZXMgZ2V0IGFuIGFkZHJlc3MgZmluZSB3aXRoIERIQ1AsCisgICBidXQgdGhlaXIgbmFtZXMgYXJlIG5vdCBhcHBlYXJpbmcgaW4gdGhlIEROUy4KKworQTogQnkgZGVmYXVsdCwgbm9uZSBvZiB0aGUgREhDUCBjbGllbnRzIHNlbmQgdGhlIGhvc3QtbmFtZSB3aGVuIGFza2luZworICAgZm9yIGEgbGVhc2UuIEZvciBtb3N0IG9mIHRoZSBjbGllbnRzLCB5b3UgY2FuIHNldCB0aGUgaG9zdC1uYW1lIHRvCisgICBzZW5kIHdpdGggdGhlICJob3N0bmFtZSIga2V5d29yZCBpbiAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcy4gKFNlZQorICAgIm1hbiBpbnRlcmZhY2VzIiBmb3IgZGV0YWlscy4pIFRoYXQgZG9lc24ndCB3b3JrIGZvciBkaGNsaWVudCwgd2VyZQorICAgeW91IGhhdmUgdG8gYWRkIHNvbWV0aGluZyBsaWtlICJzZW5kIGhvc3QtbmFtZSBkYWlzeSIgdG8KKyAgIC9ldGMvZGhjbGllbnQuY29uZiBbVXBkYXRlOiB0aGUgbGF0ZXN0IGRoY3BjZCBwYWNrYWdlcyBfZG9fIHNlbmQKKyAgIHRoZSBob3N0bmFtZSBieSBkZWZhdWx0LgorCitROiBJJ20gbmV0d29yayBib290aW5nIG15IG1hY2hpbmVzLCBhbmQgdHJ5aW5nIHRvIGdpdmUgdGhlbSBzdGF0aWMKKyAgIERIQ1AtYXNzaWduZWQgYWRkcmVzc2VzLiBUaGUgbWFjaGluZSBnZXRzIGl0cyBjb3JyZWN0IGFkZHJlc3MKKyAgIHdoaWxzdCBib290aW5nLCBidXQgdGhlbiB0aGUgT1Mgc3RhcnRzIGFuZCBpdCBzZWVtcyB0byBnZXQKKyAgIGFsbG9jYXRlZCBhIGRpZmZlcmVudCBhZGRyZXNzLgorCitBOiBXaGF0IGlzIGhhcHBlbmluZyBpcyB0aGlzOiBUaGUgYm9vdCBwcm9jZXNzIHNlbmRzIGEgREhDUAorICAgcmVxdWVzdCBhbmQgZ2V0cyBhbGxvY2F0ZWQgdGhlIHN0YXRpYyBhZGRyZXNzIGNvcnJlc3BvbmRpbmcgdG8gaXRzCisgICBNQUMgYWRkcmVzcy4gVGhlIGJvb3QgbG9hZGVyIGRvZXMgbm90IHNlbmQgYSBjbGllbnQtaWQuIFRoZW4gdGhlIE9TCisgICBzdGFydHMgYW5kIHJlcGVhdHMgdGhlIERIQ1AgcHJvY2VzcywgYnV0IGl0IGl0IGRvZXMgc2VuZCBhCisgICBjbGllbnQtaWQuIERuc21hc3EgY2Fubm90IGFzc3VtZSB0aGF0IHRoZSB0d28gcmVxdWVzdHMgYXJlIGZyb20gdGhlCisgICBzYW1lIG1hY2hpbmUgKHNpbmNlIHRoZSBjbGllbnQgSUQncyBkb24ndCBtYXRjaCkgYW5kIGV2ZW4gdGhvdWdoCisgICB0aGUgTUFDIGFkZHJlc3MgaGFzIGEgc3RhdGljIGFsbG9jYXRpb24sIHRoYXQgYWRkcmVzcyBpcyBzdGlsbCBpbgorICAgdXNlIGJ5IHRoZSBmaXJzdCBpbmNhcm5hdGlvbiBvZiB0aGUgbWFjaGluZSAodGhlIG9uZSBmcm9tIHRoZSBib290LAorICAgd2l0aG91dCBhIGNsaWVudCBJRC4pIGRuc21hc3EgdGhlcmVmb3JlIGhhcyB0byBnaXZlIHRoZSBtYWNoaW5lIGEKKyAgIGR5bmFtaWMgYWRkcmVzcyBmcm9tIGl0cyBwb29sLiBUaGVyZSBhcmUgdGhyZWUgd2F5cyB0byBzb2x2ZSB0aGlzOgorICAgKDEpIHBlcnN1YWRlIHlvdXIgREhDUCBjbGllbnQgbm90IHRvIHNlbmQgYSBjbGllbnQgSUQsIG9yICgyKSBzZXQgdXAKKyAgIHRoZSBzdGF0aWMgYXNzaWdubWVudCB0byB0aGUgY2xpZW50IElELCBub3QgdGhlIE1BQyBhZGRyZXNzLiBUaGUKKyAgIGRlZmF1bHQgY2xpZW50LWlkIHdpbGwgYmUgMDE6PE1BQyBhZGRyZXNzPiwgc28gY2hhbmdlIHRoZSBkaGNwLWhvc3QKKyAgIGxpbmUgZnJvbSAiZGhjcC1ob3N0PTExOjIyOjMzOjQ0OjU1OjY2LDEuMi4zLjQiIHRvCisgICAiZGhjcC1ob3N0PWlkOjAxOjExOjIyOjMzOjQ0OjU1OjY2LDEuMi4zLjQiIG9yICgzKSB0ZWxsIGRuc21hc3EgdG8KKyAgIGlnbm9yZSBjbGllbnQgSURzIGZvciBhIHBhcnRpY3VsYXIgTUFDIGFkZHJlc3MsIGxpa2UgdGhpczoKKyAgIGRoY3AtaG9zdD0xMToyMjozMzo0NDo1NTo2NixpZDoqCisKK1E6IFdoYXQgbmV0d29yayB0eXBlcyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBESENQIHNlcnZlcj8KKyAgCitBOiBFdGhlcm5ldCAoYW5kIDgwMi4xMSB3aXJlbGVzcykgYXJlIHN1cHBvcnRlZCBvbiBhbGwgcGxhdGZvcm1zLiBPbgorICAgTGludXggYWxsIG5ldHdvcmsgdHlwZXMgKGluY2x1ZGluZyBGaXJlV2lyZSkgYXJlIHN1cHBvcnRlZC4KKworUTogV2hhdCBhcmUgdGhlc2Ugc3RyYW5nZSAiYmluZC1pbnRlcmZhY2UiIGFuZCAiYmluZC1keW5hbWljIiBvcHRpb25zPworCitBOiBEbnNtYXNxIGZyb20gdjIuNjMgY2FuIG9wZXJhdGUgaW4gb25lIG9mIHRocmVlIGRpZmZlcmVudCAibmV0d29ya2luZworICAgbW9kZXMiLiBUaGlzIGlzIHVuZm9ydHVuYXRlIGFzIGl0IHJlcXVpcmVzIHVzZXJzIGNvbmZpZ3VyaW5nIGRuc21hc3EKKyAgIHRvIHRha2UgaW50byBhY2NvdW50IHNvbWUgcmF0aGVyIGJpemFycmUgY29uc3RyYWludHMgYW5kIHNlbGVjdCB0aGUKKyAgIG1vZGUgd2hpY2ggYmVzdCBmaXRzIHRoZSByZXF1aXJlbWVudHMgb2YgYSBwYXJ0aWN1bGFyIGluc3RhbGxhdGlvbi4KKyAgIFRoZSBvcmlnaW4gb2YgdGhlc2UgYXJlIGRlZmljaWVuY2llcyBpbiB0aGUgVW5peCBuZXR3b3JraW5nCisgICBtb2RlbCBhbmQgQVBJcyBhbmQgZWFjaCBtb2RlIGhhcyBkaWZmZXJlbnQgYWR2YW50YWdlcyBhbmQKKyAgIHByb2JsZW1zLiBKdXN0IHRvIGFkZCB0byB0aGUgY29uZnVzaW9uLCBub3QgYWxsIG1vZGVzIGFyZSBhdmFpbGFibGUgb24KKyAgIGFsbCBwbGF0Zm9ybXMgKGR1ZSB0aGUgdG8gbGFjayBvZiBzdXBwb3J0aW5nIG5ldHdvcmsgQVBJcykuVG8gZnVydGhlcgorICAgYWRkIHRvIHRoZSBjb25mdXNpb24sIHRoZSBydWxlcyBmb3IgdGhlIERIQ1Agc3Vic3lzdGVtIG9uIGRuc21hc3EgYXJlCisgICBkaWZmZXJlbnQgdG8gdGhlIHJ1bGVzIGZvciB0aGUgRE5TIGFuZCBURlRQIHN1YnN5c3RlbXMuCisKKyAgIFRoZSB0aHJlZSBtb2RlcyBhcmUgIndpbGRjYXJkIiwgImJpbmQtaW50ZXJmYWNlcyIgYW5kICJiaW5kLWR5bmFtaWMiLgorCisgICBJbiAid2lsZGNhcmQiIG1vZGUsIGRuc21hc3EgYmluZHMgdGhlIHdpbGRjYXJkIElQIGFkZHJlc3MgKDAuMC4wLjAgb3IKKyAgIDo6KS4gVGhpcyBhbGxvd3MgaXQgdG8gcmVjZWl2ZSBhbGwgdGhlIHBhY2tldHMgc2VudCB0byB0aGUgc2VydmVyIG9uCisgICB0aGUgcmVsZXZhbnQgcG9ydC4gQWNjZXNzIGNvbnRyb2wgKC0taW50ZXJmYWNlLCAtLWV4Y2VwdC1pbnRlcmZhY2UsCisgICAtLWxpc3Rlbi1hZGRyZXNzLCBldGMpIGlzIGltcGxlbWVudGVkIGJ5IGRuc21hc3E6IGl0IHF1ZXJpZXMgdGhlCisgICBrZXJuZWwgdG8gZGV0ZXJtaW5lIHRoZSBpbnRlcmZhY2Ugb24gd2hpY2ggYSBwYWNrZXQgd2FzIHJlY2VpdmVkIGFuZAorICAgdGhlIGFkZHJlc3MgdG8gd2hpY2ggaXQgd2FzIHNlbnQsIGFuZCBhcHBsaWVzIHRoZSBjb25maWd1cmVkCisgICBydWxlcy4gV2lsZGNhcmQgbW9kZSBpcyB0aGUgZGVmYXVsdCBpZiBuZWl0aGVyIG9mIHRoZSBvdGhlciBtb2RlcyBhcmUKKyAgIHNwZWNpZmllZC4gCisKKyAgIEluICJiaW5kLWludGVyZmFjZXMiIG1vZGUsIGRuc21hc3EgcnVucyB0aHJvdWdoIGFsbCB0aGUgbmV0d29yaworICAgaW50ZXJmYWNlcyBhdmFpbGFibGUgd2hlbiBpdCBzdGFydHMsIGZpbmRzIHRoZSBzZXQgb2YgSVAgYWRkcmVzc2VzIG9uCisgICB0aG9zZSBpbnRlcmZhY2VzLCBmaWx0ZXJzIHRoYXQgc2V0IHVzaW5nIHRoZSBhY2Nlc3MgY29udHJvbAorICAgY29uZmlndXJhdGlvbiwgYW5kIHRoZW4gYmluZHMgdGhlIHNldCBvZiBJUCBhZGRyZXNzZXMuIE9ubHkgcGFja2V0cworICAgc2VudCB0byB0aGUgYWxsb3dlZCBhZGRyZXNzZXMgYXJlIGRlbGl2ZXJlZCBieSB0aGUga2VybmVsIHRvIGRuc21hc3EuCisKKyAgIEluICJiaW5kLWR5bmFtaWMiIG1vZGUsIGFjY2VzcyBjb250cm9sIGZpbHRlcmluZyBpcyBkb25lIGJvdGggYnkKKyAgIGJpbmRpbmcgaW5kaXZpZHVhbCBJUCBhZGRyZXNzZXMsIGFzIGZvciBiaW5kLWludGVyZmFjZXMsIGFuZCBieQorICAgaW5zcGVjdGluZyBpbmRpdmlkdWFsIHBhY2tldHMgb24gYXJyaXZhbCBhcyBmb3Igd2lsZGNhcmQgbW9kZS4gSW4KKyAgIGFkZGl0aW9uLCBkbnNtYXNxIG5vdGljZXMgd2hlbiBuZXcgaW50ZXJmYWNlcyBhcHBlYXIgb3IgbmV3IGFkZHJlc3NlcworICAgYXBwZWFyIG9uIGV4aXN0aW5nIGludGVyZmFjZXMsIGFuZCB0aGUgcmVzdWx0aW5nIElQIGFkZHJlc3NlcyBhcmUKKyAgIGJvdW5kIGF1dG9tYXRpY2FsbHkgd2l0aG91dCBoYXZpbmcgdG8gcmVzdGFydCBkbnNtYXNxLgorCisgICBUaGUgbW9kZSBjaG9zZW4gaGFzIGZvdXIgZGlmZmVyZW50IGVmZmVjdHM6IGNvLWV4aXN0ZW5jZSB3aXRoIG90aGVyCisgICBzZXJ2ZXJzLCBzZW1hbnRpY3Mgb2YgLS1pbnRlcmZhY2UgYWNjZXNzIGNvbnRyb2wsIGVmZmVjdCBvZiBuZXcKKyAgIGludGVyZmFjZXMsIGFuZCBsZWdhbGl0eSBvZiAtLWludGVyZmFjZSBzcGVjaWZpY2F0aW9ucyBmb3IKKyAgIG5vbi1leGlzdGVudCBpbnRlcmZhY2VzLiBXZSB3aWxsIGRlYWwgd2l0aCB0aGVzZSBpbiBvcmRlci4KKworICAgQSBkbnNtYXNxIGluc3RhbmNlIHJ1bm5pbmcgaW4gd2lsZGNhcmQgbW9kZSBwcmVjbHVkZXMgYSBtYWNoaW5lIGZyb20KKyAgIHJ1bm5pbmcgYSBzZWNvbmQgaW5zdGFuY2Ugb2YgZG5zbWFzcSBvciBhbnkgb3RoZXIgRE5TLCBURlRQIG9yIERIQ1AKKyAgIHNlcnZlci4gQXR0ZW1wdHMgdG8gZG8gc28gd2lsbCBmYWlsIHdpdGggYW4gImFkZHJlc3MgaW4gdXNlIiBlcnJvci4gCisgICBEbnNtYXNxIHJ1bm5pbmcgaW4gLS1iaW5kLWludGVyZmFjZXMgb3IgYmluZC1keW5hbWljIG1vZGUgYWxsb3cgb3RoZXIKKyAgIGluc3RhbmNlcyBvZiBkbnNtYXNxIG9yIG90aGVyIHNlcnZlcnMsIGFzIGxvbmcgYXMgbm8gdHdvIHNlcnZlcnMgYXJlCisgICBjb25maWd1cmVkIHRvIGxpc3RlbiBvbiB0aGUgc2FtZSBpbnRlcmZhY2UgYWRkcmVzcy4gCisKKyAgIFRoZSBzZW1hbnRpY3Mgb2YgLS1pbnRlcmZhY2UgdmFyaWVzIHN1YnRseSBiZXR3ZWVuIHdpbGRjYXJkIG9yCisgICBiaW5kLWR5bmFtaWMgbW9kZSBhbmQgYmluZC1pbnRlcmZhY2VzIG1vZGUuIFRoZSBzaXR1YXRpb24gd2hlcmUgdGhpcworICAgbWF0dGVycyBpcyBhIHJlcXVlc3Qgd2hpY2ggYXJyaXZlcyB2aWEgb25lIGludGVyZmFjZSAoQSksIGJ1dCB3aXRoIGEKKyAgIGRlc3RpbmF0aW9uIGFkZHJlc3Mgb2YgYSBzZWNvbmQgaW50ZXJmYWNlIChCKSBhbmQgd2hlbiBkbnNtYXNxIGlzCisgICBjb25maWd1cmVkIHRvIGxpc3RlbiBvbmx5IG9uIEIuIEluIHdpbGRjYXJkIG9yIGJpbmQtZHluYW1pYyBtb2RlLCBzdWNoCisgICBhIHJlcXVlc3Qgd2lsbCBiZSBpZ25vcmVkLCBpbiBiaW5kLWludGVyZmFjZXMgbW9kZSwgaXQgd2lsbCBiZQorICAgYWNjZXB0ZWQuCisKKyAgIFRoZSBjcmVhdGlvbiBvZiBuZXcgbmV0d29yayBpbnRlcmZhY2VzIGFmdGVyIGRuc21hc3Egc3RhcnRzIGlzIGlnbm9yZWQKKyAgIGJ5IGRuc21hc3Egd2hlbiBpbiAtLWJpbmQtaW50ZXJmYWNlcyBtb2RlLiBJbiB3aWxkY2FyZCBvciBiaW5kLWR5bmFtaWMKKyAgIG1vZGUsIHN1Y2ggaW50ZXJmYWNlcyBhcmUgaGFuZGxlZCBub3JtYWxseS4KKworICAgQSAtLWludGVyZmFjZSBzcGVjaWZpY2F0aW9uIGZvciBhIG5vbi1leGlzdGVudCBpbnRlcmZhY2UgaXMgYSBmYXRhbAorICAgZXJyb3IgYXQgc3RhcnQtdXAgd2hlbiBpbiAtLWJpbmQtaW50ZXJmYWNlcyBtb2RlLCBieSBqdXN0IGdlbmVyYXRlcyBhCisgICB3YXJuaW5nIGluIHdpbGRjYXJkIG9yIGJpbmQtZHluYW1pYyBtb2RlLgorCitROiBXaHkgZG9lc24ndCBLZXJiZXJvcyB3b3JrL3doeSBjYW4ndCBJIGdldCBzZW5zaWJsZSBhbnN3ZXJzIHRvCisgICBxdWVyaWVzIGZvciBTUlYgcmVjb3Jkcy4KKworQTogUHJvYmFibHkgYmVjYXVzZSB5b3UgaGF2ZSB0aGUgImZpbHRlcndpbjJrIiBvcHRpb24gc2V0LiBOb3RlIHRoYXQKKyAgIGl0IHdhcyBvbiBieSBkZWZhdWx0IGluIGV4YW1wbGUgY29uZmlndXJhdGlvbiBmaWxlcyBpbmNsdWRlZCBpbiAKKyAgIHZlcnNpb25zIGJlZm9yZSAyLjEyLCBzbyB5b3UgbWlnaHQgaGF2ZSBpdCBzZXQgb24gd2l0aG91dAorICAgcmVhbGlzaW5nLgorCitROiBDYW4gSSBnZXQgZW1haWwgbm90aWZpY2F0aW9uIHdoZW4gYSBuZXcgdmVyc2lvbiBvZiBkbnNtYXNxIGlzCisgICByZWxlYXNlZD8KKworQTogWWVzLCBuZXcgcmVsZWFzZXMgb2YgZG5zbWFzcSBhcmUgYWx3YXlzIGFubm91bmNlZCB0aHJvdWdoCisgICBmcmVzaG1lYXQubmV0LCBhbmQgdGhleSBhbGxvdyB5b3UgdG8gc3Vic2NyaWJlIHRvIGVtYWlsIGFsZXJ0cyB3aGVuCisgICBuZXcgdmVyc2lvbnMgb2YgcGFydGljdWxhciBwcm9qZWN0cyBhcmUgcmVsZWFzZWQuIE5ldyByZWxlYXNlcyBhcmUKKyAgIGFsc28gYW5ub3VuY2VkIGluIHRoZSBkbnNtYXNxLWRpc2N1c3MgbWFpbGluZyBsaXN0LCBzdWJzY3JpYmUgYXQgCisgICBodHRwOi8vbGlzdHMudGhla2VsbGV5cy5vcmcudWsvbWFpbG1hbi9saXN0aW5mby9kbnNtYXNxLWRpc2N1c3MKKworUTogV2hhdCBkb2VzIHRoZSBkaGNwLWF1dGhvcml0YXRpdmUgb3B0aW9uIGRvPyAKKworQTogVGhlIERIQ1Agc3BlYyBzYXlzIHRoYXQgd2hlbiBhIERIQ1Agc2VydmVyIHJlY2lldmVzIGEgcmVuZXdhbCByZXF1ZXN0CisgICBmcm9tIGEgY2xpZW50IGl0IGhhcyBubyBrbm93bGVkZ2Ugb2YsIGl0IHNob3VsZCBqdXN0IGlnbm9yZSBpdC4KKyAgIFRoaXMgaXMgYmVjYXVzZSBpdCdzIHN1cHBvcnRlZCB0byBoYXZlIG1vcmUgdGhhbiBvbmUgREhDUCBzZXJ2ZXIKKyAgIG9uIGEgbmV0d29yaywgYW5kIGFub3RoZXIgREhDUCBzZXJ2ZXIgbWF5IGJlIGRlYWxpbmcgd2l0aCB0aGUgY2xpZW50LgorICAgVGhpcyBoYXMgdGhlIHVuZm9ydHVuYXRlIGVmZmVjdCB0aGF0IHdoZW4gX25vXyBESENQIHJlcGxpZXMgdG8gCisgICB0aGUgY2xpZW50LCBpdCB0YWtlcyBzb21lIHRpbWUgZm9yIHRoZSBjbGllbnQgdG8gdGltZS1vdXQgYW5kIHN0YXJ0IAorICAgdG8gZ2V0IGEgbmV3IGxlYXNlLiBTZXR0aW5nIHRoaXMgb3B0aW9uIG1ha2VzIGRuc21hc3EgdmlvbGF0ZSB0aGUKKyAgIHN0YW5kYXJkIHRvIHRoZSBleHRlbnQgdGhhdCBpdCB3aWxsIHNlbmQgYSBOQUsgcmVwbHkgdG8gdGhlIGNsaWVudCwgCisgICBjYXVzaW5nIGl0IHRvIGltbWVkaWF0ZWx5IHN0YXJ0IHRvIGdldCBhIG5ldyBsZWFzZS4gVGhpcyBpbXByb3ZlcyAKKyAgIGJlaGF2aW91ciB3aGVuIG1hY2hpbmVzIG1vdmUgbmV0d29ya3MsIGFuZCBpbiB0aGUgY2FzZSB0aGF0IHRoZSBESENQCisgICBsZWFzZSBkYXRhYmFzZSBpcyBsb3N0LiBBcyBsb25nIGFzIHRoZXJlIGFyZSBub3QgbW9yZSB0aGEgb25lIERIQ1AKKyAgIHNlcnZlciBvbiB0aGUgbmV0d29yaywgaXQncyBzYWZlIHRvIGVuYWJsZSB0aGUgb3B0aW9uLgorCitROiBXaHkgZG9lcyBteSBHZW50b28gYm94IHBhdXNlIGZvciBhIG1pbnV0ZSBiZWZvcmUgZ2V0dGluZyBhIG5ldworICAgbGVhc2U/CisKK0E6IEJlY2F1c2Ugd2hlbiBhIEdlbnRvbyBib3ggc2h1dHMgZG93biwgaXQgcmVsZWFzZXMgaXRzIGxlYXNlIHdpdGgKKyAgIHRoZSBzZXJ2ZXIgYnV0IHJlbWVtYmVycyBpdCBvbiB0aGUgY2xpZW50OyB0aGlzIHNlZW1zIHRvIGJlIGEgCisgICBHZW50b28tc3BlY2lmaWMgcGF0Y2ggdG8gZGhjcGNkLiBPbiByZXN0YXJ0IGl0IHRyaWVzIHRvIHJlbmV3CisgICBhIGxlYXNlIHdoaWNoIGlzIGxvbmcgZ29uZSwgYXMgZmFyIGFzIGRuc21hc3EgaXMgY29uY2VybmVkLCBhbmQKKyAgIGRuc21hc3EgaWdub3JlcyBpdCB1bnRpbCBpcyB0aW1lcyBvdXQgYW5kIHJlc3RhcnRzIHRoZSBwcm9jZXNzLgorICAgVG8gZml4IHRoaXMsIHNldCB0aGUgZGhjcC1hdXRob3JpdGF0aXZlIGZsYWcgaW4gZG5zbWFzcS4KKworUTogTXkgbGFwdG9wIGhhcyB0d28gbmV0d29yayBpbnRlcmZhY2VzLCBhIHdpcmVkIG9uZSBhbmQgYSB3aXJlbGVzcworICAgb25lLiBJIG5ldmVyIHVzZSBib3RoIGludGVyZmFjZXMgYXQgdGhlIHNhbWUgdGltZSwgYW5kIEknZCBsaWtlIHRoZQorICAgc2FtZSBJUCBhbmQgY29uZmlndXJhdGlvbiB0byBiZSB1c2VkIGlycmVzcGVjdGl2ZSBvZiB3aGljaAorICAgaW50ZXJmYWNlIGlzIGluIHVzZS4gSG93IGNhbiBJIGRvIHRoYXQ/CisKK0E6IEJ5IGRlZmF1bHQsIHRoZSBpZGVudGl0eSBvZiBhIG1hY2hpbmUgaXMgZGV0ZXJtaW5lZCBieSB1c2luZyB0aGUKKyAgIE1BQyBhZGRyZXNzLCB3aGljaCBpcyBhc3NvY2lhdGVkIHdpdGggaW50ZXJmYWNlIGhhcmR3YXJlLiBPbmNlIGFuCisgICBJUCBpcyBib3VuZCB0byB0aGUgTUFDIGFkZHJlc3Mgb2Ygb25lIGludGVyZmFjZSwgaXQgY2Fubm90IGJlCisgICBhc3NvY2lhdGVkIHdpdGggYW5vdGhlciBNQUMgYWRkcmVzcyB1bnRpbCBhZnRlciB0aGUgREhDUCBsZWFzZQorICAgZXhwaXJlcy4gVGhlIHNvbHV0aW9uIHRvIHRoaXMgaXMgdG8gdXNlIGEgY2xpZW50LWlkIGFzIHRoZSBtYWNoaW5lCisgICBpZGVudGl0eSByYXRoZXIgdGhhbiB0aGUgTUFDIGFkZHJlc3MuIElmIHlvdSBhcnJhbmdlIGZvciB0aGUgc2FtZQorICAgY2xpZW50LWlkIHRvIHNlbnQgd2hlbiBlaXRoZXIgaW50ZXJmYWNlIGlzIGluIHVzZSwgdGhlIERIQ1Agc2VydmVyCisgICB3aWxsIHJlY29nbmlzZSB0aGUgc2FtZSBtYWNoaW5lLCBhbmQgdXNlIHRoZSBzYW1lIGFkZHJlc3MuIFRoZQorICAgbWV0aG9kIGZvciBzZXR0aW5nIHRoZSBjbGllbnQtaWQgdmFyaWVzIHdpdGggREhDUCBjbGllbnQgc29mdHdhcmUsCisgICBkaGNwY2QgdXNlcyB0aGUgIi1JIiBmbGFnLiBXaW5kb3dzIHVzZXMgYSByZWdpc3RyeSBzZXR0aW5nLAorICAgc2VlIGh0dHA6Ly93d3cuanNpaW5jLmNvbS9TVUJGL1RJUDI4MDAvcmgyODQ1Lmh0bQorCitBZGRlbmR1bToKKyAgIEZyb20gdmVyc2lvbiAyLjQ2LCBkbnNtYXNxIGhhcyBhIHNvbHV0aW9uIHRvIHRoaXMgd2hpY2ggZG9lc24ndAorICAgaW52b2x2ZSBzZXR0aW5nIGNsaWVudC1JRHMuIEl0J3MgcG9zc2libGUgdG8gcHV0IG1vcmUgdGhhbiBvbmUgTUFDCisgICBhZGRyZXNzIGluIGEgLS1kaGNwLWhvc3QgY29uZmlndXJhdGlvbi4gVGhpcyB0ZWxscyBkbnNtYXNxIHRoYXQgaXQKKyAgIHNob3VsZCB1c2UgdGhlIHNwZWNpZmllZCBJUCBmb3IgYW55IG9mIHRoZSBzcGVjaWZpZWQgTUFDIGFkZHJlc3NlcywKKyAgIGFuZCBmdXJ0aGVybW9yZSBpdCBnaXZlcyBkbnNtYXNxIHBlcm1pc3Npb24gdG8gc3VtbWFyaWx5IGFiYW5kb24gYQorICAgbGVhc2UgdG8gb25lIG9mIHRoZSBNQUMgYWRkcmVzc2VzIGlmIGFub3RoZXIgb25lIGNvbWVzIGFsb25nLiBOb3RlCisgICB0aGF0IHRoaXMgd2lsbCB3b3JrIGZpbmUgb25seSBhcyBsb25nZXIgYXMgb25seSBvbmUgaW50ZXJmYWNlIGlzCisgICB1cCBhdCBhbnkgdGltZS4gVGhlcmUgaXMgbm8gd2F5IGZvciBkbnNtYXNxIHRvIGVuZm9yY2UgdGhpcworICAgY29uc3RyYWludDogaWYgeW91IGNvbmZpZ3VyZSBtdWx0aXBsZSBNQUMgYWRkcmVzc2VzIGFuZCB2aW9sYXRlIAorICAgdGhpcyBydWxlLCBiYWQgdGhpbmdzIHdpbGwgaGFwcGVuLgorCitBZGRlbmR1bS1JSTogVGhlIGxpbmsgYWJvdmUgaXMgZGVhZCwgdGhlIGZvcm1lciBjb250ZW50cyBvZiB0aGUgbGluayBhcmU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSG93IGNhbiBJIGtlZXAgdGhlIHNhbWUgREhDUCBjbGllbnQgcmVzZXJ2YXRpb24sIGlmIHRoZSBNQUMgYWRkcmVzcyBjaGFuZ2VzPworCitXaGVuIHlvdSByZXNlcnZlIGFuIElQIGFkZHJlc3MgZm9yIGEgREhDUCBjbGllbnQsIHlvdSBwcm92aWRlIHRoZQorTUFDIGFkZHJlc3Mgb2YgdGhlIGNsaWVudCdzIE5JQy4KKworSXQgaXMgcG9zc2libGUgdG8gdXNlIGEgY3VzdG9tIGlkZW50aWZpZXIsIHdoaWNoIGlzIHNlbnQgYXMgCitvcHRpb24gNjEgaW4gdGhlIGNsaWVudCdzIERIQ1AgRGlzY292ZXIgYW5kIFJlcXVlc3QgcGFja2V0LgorCitUaGUgRGhjcENsaWVudElkZW50aWZpZXIgaXMgYSBSRUdfRFdPUkQgdmFsdWUgdGhhdCBpcyBsb2NhdGVkIGF0OgorCitXaW5kb3dzIE5UIDQuMCBTUDIrCisKK0hLRVlfTE9DQUxfTUFDSElORVxTWVNURU1cQ3VycmVudENvbnRyb2xTZXRcU2VydmljZXNcPEFkYXB0ZXIgTmFtZT4nWCdcUGFyYW1ldGVyc1xUY3BpcAorCit3aGVyZSA8QWRhcHRlciBOYW1lPiBpcyB0aGUgTklDIGRyaXZlciBuYW1lIGFuZCAnWCcgaXMgdGhlIG51bWJlciBvZiB0aGUgTklDLgorCitXaW5kb3dzIDIwMDAKKworSEtFWV9MT0NBTF9NQUNISU5FXFN5c3RlbVxDdXJyZW50Q29udHJvbFNldFxTZXJ2aWNlc1xUY3BJcFxQYXJhbWV0ZXJzXEludGVyZmFjZXNcPE5JQyBHVUlEPgorCit3aGVyZSA8TklDIEdVSUQ+IGlzIHRoZSBHVUlEIG9mIHRoZSBOSUMuCisKK1RoZSB2YWxpZCByYW5nZSBvZiBkYXRhIGlzIDB4MCAtIDB4RkZGRkZGRkYuIFRoZSBjdXN0b20gaWRlbnRpZmllciBpcyBzZW5kIGFzIDQgYnl0ZXMsIAorOCBoZXhhZGVjaW1hbCBjaGFyYWN0ZXIsIGluIGdyb3VwcyBvZiAyIGhleGFkZWNpbWFsIGNoYXJhY3RlcnMsIHdpdGggdGhlIGdyb3VwcyBiZWluZyAKK3NlbnQgaW4gcmV2ZXJzZSBvcmRlci4gSWYgdGhlIGN1c3RvbSBpZGVudGlmaWVyIGlzIGxlc3MgdGhhbiA4IGhleGFkZWNpYW1sIGNoYXJhY3RlcnMsIAoraXQgaXMgemVybyBwYWRkZWQgYXQgdGhlIGVuZC4gRXhhbXBsZXM6CisKK0N1c3RvbSBDbGllbnQgICAgICAgICAgICAgICAgIENsaWVudCBSZXNlcnZhdGlvbgorSWRlbnRpZmllciAgICAgICAgICAgICAgICAgICAgb24gREhDUCBTZXJ2ZXIKKzEyMzQ1Njc4ICAgICAgICAgICAgICAgICAgICAgIDc4NTYzNDEyCisxMjM0NTYgICAgICAgICAgICAgICAgICAgICAgICA1NjM0MTIwMAorMTIzNCAgICAgICAgICAgICAgICAgICAgICAgICAgMzQxMjAwMDAKKzEyMzQ1NjcgICAgICAgICAgICAgICAgICAgICAgIDY3NDUyMzAxCisxMjM0NSAgICAgICAgICAgICAgICAgICAgICAgICA0NTIzMDEwMAorMTIzICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMwMTAwMDAKK0ExOEY0MiAgICAgICAgICAgICAgICAgICAgICAgIDQyOEZBMTAwCitDRjQzMiAgICAgICAgICAgICAgICAgICAgICAgICAzMkY0MEMwMAorQzMyRDFCRSAgICAgICAgICAgICAgICAgICAgICAgQkVEMTMyMEMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK1E6IENhbiBkbnNtYXNxIGRvIERIQ1Agb24gSVAtYWxpYXMgaW50ZXJmYWNlcz8KKworQTogWWVzLCBmcm9tIHZlcnNpb24tMi4yMS4gVGhlIHN1cHBvcnQgaXMgb25seSBhdmFpbGFibGUgcnVubmluZyB1bmRlcgorICAgTGludXgsIG9uIGEga2VybmVsIHdoaWNoIHByb3ZpZGVzIHRoZSBSVC1uZXRsaW5rIGZhY2lsaXR5LiBBbGwgMi40IAorICAgYW5kIDIuNiBrZXJuZWxzIHByb3ZpZGUgUlQtbmV0bGluayBhbmQgaXQncyBhbiBvcHRpb24gaW4gMi4yCisgICBrZXJuZWxzLiAKKyAgIAorICAgSWYgYSBwaHlzaWNhbCBpbnRlcmZhY2UgaGFzIG1vcmUgdGhhbiBvbmUgSVAgYWRkcmVzcyBvciBhbGlhc2VzCisgICB3aXRoIGV4dHJhIElQIGFkZHJlc3NlcywgdGhlbiBhbnkgZGhjcC1yYW5nZXMgY29ycmVzcG9uZGluZyB0bworICAgdGhlc2UgYWRkcmVzc2VzIGNhbiBiZSB1c2VkIGZvciBhZGRyZXNzIGFsbG9jYXRpb24uIFNvIGlmIGFuCisgICBpbnRlcmZhY2UgaGFzIGFkZHJlc3NlcyAxOTIuMTY4LjEuMC8yNCBhbmQgMTkyLjE2OC4yLjAvMjQgYW5kIHRoZXJlCisgICBhcmUgREhDUCByYW5nZXMgMTkyLjE2OC4xLjEwMC0xOTIuMTY4LjEuMjAwIGFuZAorICAgMTkyLjE2OC4yLjEwMC0xOTIuMTY4LjIuMjAwIHRoZW4gYm90aCByYW5nZXMgd291bGQgYmUgdXNlZCBmb3IgaG9zdAorICAgY29ubmVjdGVkIHRvIHRoZSBwaHlzaWNhbCBpbnRlcmZhY2UuIEEgbW9yZSB0eXBpY2FsIHVzZSBtaWdodCBiZSB0bworICAgaGF2ZSBvbmUgb2YgdGhlIGFkZHJlc3MtcmFuZ2VzIGFzIHN0YXRpYy1vbmx5LCBhbmQgaGF2ZSBrbm93bgorICAgaG9zdHMgYWxsb2NhdGVkIGFkZHJlc3NlcyBvbiB0aGF0IHN1Ym5ldCB1c2luZyBkaGNwLWhvc3Qgb3B0aW9ucywKKyAgIHdoaWxlICBhbm9ueW1vdXMgaG9zdHMgZ28gb24gdGhlIG90aGVyLgorCisKK1E6IERuc21hc3Egc29tZXRpbWVzIGxvZ3MgIm5hbWVzZXJ2ZXIgeHh4Lnh4eC54eHgueHh4IHJlZnVzZWQKKyAgIHRvIGRvIGEgcmVjdXJzaXZlIHF1ZXJ5IiBhbmQgRE5TIHN0b3BzIHdvcmtpbmcuIFdoYXQncyBnb2luZyBvbj8KKworQTogUHJvYmFibHkgdGhlIG5hbWVzZXJ2ZXIgaXMgYW4gYXV0aG9yaXRhdGl2ZSBuYW1lc2VydmVyIGZvciBhCisgICBwYXJ0aWN1bGFyIGRvbWFpbiwgYnV0IGlzIG5vdCBjb25maWd1cmVkIHRvIGFuc3dlciBnZW5lcmFsIEROUworICAgcXVlcmllcyBmb3IgYW4gYXJiaXRyYXJ5IGRvbWFpbi4gSXQgaXMgbm90IHN1aXRhYmxlIGZvciB1c2UgYnkKKyAgIGRuc21hc3EgYXMgYW4gdXBzdHJlYW0gc2VydmVyIGFuZCBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIHRoZQorICAgY29uZmlndXJhdGlvbi4gTm90ZSB0aGF0IGlmIHlvdSBoYXZlIG1vcmUgdGhhbiBvbmUgdXBzdHJlYW0KKyAgIG5hbWVzZXJ2ZXIgY29uZmlndXJlZCBkbnNtYXNxIHdpbGwgbG9hZC1iYWxhbmNlIGFjcm9zcyB0aGVtIGFuZAorICAgaXQgbWF5IGJlIHNvbWUgdGltZSBiZWZvcmUgZG5zbWFzcSBnZXRzIGFyb3VuZCB0byB1c2luZyBhIAorICAgcGFydGljdWxhciBuYW1lc2VydmVyLiBUaGlzIG1lYW5zIHRoYXQgYSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24KKyAgIG1heSB3b3JrIGZvciBzb21ldGltZSB3aXRoIGEgYnJva2VuIHVwc3RyZWFtIG5hbWVzZXJ2ZXIKKyAgIGNvbmZpZ3VyYXRpb24uCisKKworUTogRG9lcyB0aGUgZG5zbWFzcSBESENQIHNlcnZlciBwcm9iZSBhZGRyZXNzZXMgYmVmb3JlIGFsbG9jYXRpbmcKKyAgIHRoZW0sIGFzIHJlY29tbWVuZGVkIGluIFJGQzIxMzE/CisKK0E6IFllcywgZHluYW1pY2FsbHkgYWxsb2NhdGVkIElQIGFkZHJlc3NlcyBhcmUgY2hlY2tlZCBieSBzZW5kaW5nIGFuCisgICBJQ01QIGVjaG8gcmVxdWVzdCAocGluZykuIElmIGEgcmVwbHkgaXMgcmVjZWl2ZWQsIHRoZW4gZG5zbWFzcQorICAgYXNzdW1lcyB0aGF0IHRoZSBhZGRyZXNzIGlzIGluIHVzZSwgYW5kIGF0dGVtcHRzIHRvIGFsbG9jYXRlIGFuCisgICBkaWZmZXJlbnQgYWRkcmVzcy4gVGhlIHdhaXQgZm9yIGEgcmVwbHkgaXMgYmV0d2VlbiB0d28gYW5kIHRocmVlCisgICBzZWNvbmRzLiBCZWNhdXNlIHRoZSBESENQIHNlcnZlciBpcyBub3QgcmUtZW50cmFudCwgaXQgY2Fubm90IHNlcnZlCisgICBvdGhlciBESENQIHJlcXVlc3RzIGR1cmluZyB0aGlzIHRpbWUuIFRvIGF2b2lkIGRyb3BwaW5nIHJlcXVlc3RzLAorICAgdGhlIGFkZHJlc3MgcHJvYmUgbWF5IGJlIHNraXBwZWQgd2hlbiBkbnNtYXNxIGlzIHVuZGVyIGhlYXZ5IGxvYWQuCisKKworUTogSSdtIHVzaW5nIGRuc21hc3Egb24gYSBtYWNoaW5lIHdpdGggdGhlIEZpcmVzdGFydGVyIGZpcmV3YWxsLCBhbmQKKyAgIERIQ1AgZG9lc24ndCB3b3JrLiBXaGF0J3MgdGhlIHByb2JsZW0/CisKK0E6IFRoaXMgYSB2YXJpYW50IG9uIHRoZSBpcHRhYmxlcyBwcm9ibGVtLiBFeHBsaWNpdCBkZXRhaWxzIG9uIGhvdyB0bworICAgcHJvY2VlZCBjYW4gYmUgZm91bmQgYXQgCisgICBodHRwOi8vbGlzdHMudGhla2VsbGV5cy5vcmcudWsvcGlwZXJtYWlsL2Ruc21hc3EtZGlzY3Vzcy8yMDA1cTMvMDAwNDMxLmh0bWwKKyAKKworUTogSSdtIHVzaW5nIGRuc21hc3Egb24gYSBtYWNoaW5lIHdpdGggdGhlIHNob3Jld2FsbCBmaXJld2FsbCwgYW5kCisgICBESENQIGRvZXNuJ3Qgd29yay4gV2hhdCdzIHRoZSBwcm9ibGVtPworCitBOiBUaGlzIGEgdmFyaWFudCBvbiB0aGUgaXB0YWJsZXMgcHJvYmxlbS4gRXhwbGljaXQgZGV0YWlscyBvbiBob3cgdG8KKyAgIHByb2NlZWQgY2FuIGJlIGZvdW5kIGF0IAorICAgaHR0cDovL2xpc3RzLnRoZWtlbGxleXMub3JnLnVrL3BpcGVybWFpbC9kbnNtYXNxLWRpc2N1c3MvMjAwN3E0LzAwMTc2NC5odG1sCisKKworUTogRG5zbWFzcSBmYWlscyB0byBzdGFydCB1cCB3aXRoIGEgbWVzc2FnZSBhYm91dCBjYXBhYmlsaXRpZXMuCisgICBXaHkgZGlkIHRoYXQgaGFwcGVuIGFuZCB3aGF0IGNhbiBkbyB0byBmaXggaXQ/CisKK0E6IENoYW5nZSB5b3VyIGtlcm5lbCBjb25maWd1cmF0aW9uOiBlaXRoZXIgZGVzZWxlY3QgQ09ORklHX1NFQ1VSSVRZCisgICBfb3JfIHNlbGVjdCBDT05GSUdfU0VDVVJJVFlfQ0FQQUJJTElUSUVTLiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIAorICAgcmVtb3ZlIHRoZSBuZWVkIHRvIHNldCBjYXBhYmlsaXRpZXMgYnkgcnVubmluZyBkbnNtYXNxIGFzIHJvb3QuCisKKworUTogV2hlcmUgY2FuIEkgZ2V0IC5ycG1zIFN1aXRhYmxlIGZvciBvcGVuU1VTRS9TTEVTPworCitBOiBEbnNtYXNxIGlzIGluIG9wZW5TVVNFIGl0c2VsZiwgYW5kIHRoZSBsYXRlc3QgcmVsZWFzZXMgYXJlIGFsc28KKyAgIGF2YWlsYWJsZSBhdCBodHRwOi8vZG93bmxvYWQub3BlbnN1c2Uub3JnL3JlcG9zaXRvcmllcy9uZXR3b3JrLworCisKK1E6IENhbiBJIHJ1biBkbnNtYXNxIGluIGEgTGludXggdnNlcnZlcj8KKworQTogWWVzLCBhcyBhIEROUyBzZXJ2ZXIsIGRuc21hc3Egd2lsbCBqdXN0IHdvcmsgaW4gYSB2c2VydmVyLgorICAgVG8gdXNlIGRuc21hc3EncyBESENQIGZ1bmN0aW9uIHlvdSBuZWVkIHRvIGdpdmUgdGhlIHZzZXJ2ZXIKKyAgIGV4dHJhIHN5c3RlbSBjYXBhYmlsaXRpZXMuIFBsZWFzZSBub3RlIHRoYXQgZG9pbmcgc28gd2lsbCBsZXNzZXIgCisgICB0aGUgb3ZlcmFsbCBzZWN1cml0eSBvZiB5b3VyIHN5c3RlbS4gVGhlIGNhcGFiaWxpdGllcyAKKyAgIHJlcXVpcmVkIGFyZSBORVRfQURNSU4gYW5kIE5FVF9SQVcuIE5FVF9BRE1JTiBpcyBlc3NlbnRpYWwsIE5FVF9SQVcKKyAgIGlzIHJlcXVpcmVkIHRvIGRvIGFuIElDTVAgInBpbmciIGNoZWNrIG9uIG5ld2x5IGFsbG9jYXRlZAorICAgYWRkcmVzc2VzLiBJZiB5b3UgZG9uJ3QgbmVlZCB0aGlzIGNoZWNrLCB5b3UgY2FuIGRpc2FibGUgaXQgd2l0aAorICAgLS1uby1waW5nIGFuZCBvbWl0IHRoZSBORVRfUkFXIGNhcGFiaWxpdHkuIAorICAgQWRkaW5nIHRoZSBjYXBhYmlsaXRpZXMgaXMgZG9uZSBieSBhZGRpbmcgdGhlbSwgb25lIHBlciBsaW5lLCB0bworICAgZWl0aGVyIC9ldGMvdnNlcnZlcnMvPHZzZXJ2ZXJuYW1lPi9jY2FwYWJpbGl0aWVzIGZvciBhIDIuNCBrZXJuZWwgb3IKKyAgIC9ldGMvdnNlcnZlcnMvPHZzZXJ2ZXJuYW1lPi9iY2FwYWJpbGl0aWVzIGZvciBhIDIuNiBrZXJuZWwgKHBsZWFzZQorICAgcmVmZXIgdG8gdGhlIHZzZXJ2ZXIgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbikuCisKKworUTogV2hhdCdzIHRoZSBwcm9ibGVtIHdpdGggc3lzbG9nIGFuZCBkbnNtYXNxPworCitBOiBJbiBhbG1vc3QgYWxsIGNhc2VzOiBub25lLiBJZiB5b3UgaGF2ZSB0aGUgbm9ybWFsIGFycmFuZ2VtZW50IHdpdGgKKyAgIGxvY2FsIGRhZW1vbnMgbG9nZ2luZyB0byBhIGxvY2FsIHN5c2xvZywgd2hpY2ggdGhlbiB3cml0ZXMgdG8gZGlzaywKKyAgIHRoZW4gdGhlcmUncyBuZXZlciBhIHByb2JsZW0uIElmIHlvdSB1c2UgbmV0d29yayBsb2dnaW5nLCB0aGVuCisgICB0aGVyZSdzIGEgcG90ZW50aWFsIHByb2JsZW0gd2l0aCBkZWFkbG9jazogdGhlIHN5c2xvZyBkYWVtb24gd2lsbAorICAgZG8gRE5TIGxvb2t1cHMgc28gdGhhdCBpdCBjYW4gbG9nIHRoZSBzb3VyY2Ugb2YgbG9nIG1lc3NhZ2VzLAorICAgdGhlc2UgbG9va3VwcyB3aWxsIChkZXBlbmRpbmcgb24gZXhhY3QgY29uZmlndXJhdGlvbikgZ28gdGhyb3VnaAorICAgZG5zbWFzcSwgd2hpY2ggYWxzbyBzZW5kcyBsb2cgbWVzc2FnZXMuIFdpdGggYmFkIHRpbWluZywgeW91IGNhbiAKKyAgIGFycml2ZSBhdCBhIHNpdHVhdGlvbiB3aGVyZSBzeXNsb2cgaXMgd2FpdGluZyBmb3IgZG5zbWFzcSwgYW5kCisgICBkbnNtYXNxIGlzIHdhaXRpbmcgZm9yIHN5c2xvZzsgdGhleSB3aWxsIGJvdGggd2FpdCBmb3JldmVyLiBUaGlzCisgICBwcm9ibGVtIGlzIGZpeGVkIGZyb20gZG5zbWFzcS0yLjM5LCB3aGljaCBpbnRyb2R1Y2VzIGFzeW5jaHJvbm91cworICAgbG9nZ2luZzogZG5zbWFzcSBubyBsb25nZXIgd2FpdHMgZm9yIHN5c2xvZyBhbmQgdGhlIGRlYWRsb2NrIGlzCisgICBicm9rZW4uIFRoZXJlIGlzIGEgcmVtYWluaW5nIHByb2JsZW0gaW4gMi4zOSwgd2hlcmUgImxvZy1xdWVyaWVzIgorICAgaXMgaW4gdXNlLiBJbiB0aGlzIGNhc2UgbW9zdCBETlMgcXVlcmllcyBnZW5lcmF0ZSB0d28gbG9nIGxpbmVzLCBpZgorICAgdGhlc2UgZ28gdG8gYSBzeXNsb2cgd2hpY2ggaXMgZG9pbmcgYSBETlMgbG9va3VwIGZvciBlYWNoIGxvZyBsaW5lLAorICAgdGhlbiB0aG9zZSBxdWVyaWVzIHdpbGwgaW4gdHVybiBnZW5lcmF0ZSB0d28gbW9yZSBsb2cgbGluZXMsIGFuZCBhIAorICAgY2hhaW4gcmVhY3Rpb24gcnVuYXdheSB3aWxsIG9jY3VyLiBUbyBhdm9pZCB0aGlzLCB1c2Ugc3lzbG9nLW5nCisgICBhbmQgdHVybiBvbiBzeXNsb2ctbmcncyBkbnMtY2FjaGUgZnVuY3Rpb24uCisKKworUTogREhDUCBkb2Vzbid0IHdvcmsgd2l0aCB3aW5kb3dzIFZpc3RhLCBidXQgZXZlcnl0aGluZyBlbHNlIGlzIGZpbmUuCisKK0E6IFRoZSBESENQIGNsaWVudCBvbiB3aW5kb3dzIFZpc3RhIChhbmQgcG9zc2libHkgbGF0ZXIgdmVyc2lvbnMpCisgICBkZW1hbmRzIHRoYXQgdGhlIERIQ1Agc2VydmVyIHNlbmQgcmVwbGllcyBhcyBicm9hZGNhc3RzLiBNb3N0IG90aGVyCisgICBjbGllbnRzIGRvbid0IGRvIHRoaXMuIFRoZSBicm9hZGNhc3RzIGFyZSBzZW5kIHRvCisgICAyNTUuMjU1LjI1NS4yNTUuIEEgYmFkbHkgY29uZmlndXJlZCBmaXJld2FsbCB3aGljaCBibG9ja3Mgc3VjaAorICAgcGFja2V0cyB3aWxsIHNob3cgZXhhY3RseSB0aGVzZSBzeW1wdG9tcyAoVmlzdGEgZmFpbHMsIG90aGVycworICAgd29yaykuCisKKyAgCitROiBESENQIGRvZXNuJ3Qgd29yayB3aXRoIHdpbmRvd3MgNyBidXQgZXZlcnl0aGluZyBlbHNlIGlzIGZpbmUuCisKK0E6IFRoZXJlIHNlZW1zIHRvIGJlIGEgcHJvYmxlbSBpZiBXaW5kb3dzIDcgZG9lc24ndCBnZXQgYSB2YWx1ZSBmb3IKKyAgIERIQ1Agb3B0aW9uIDI1MiBpbiBESENQIHBhY2tldHMgaXQgZ2V0cyBmcm9tIHRoZSBzZXJ2ZXIuIFRoZQorICAgc3ltcHRvbXMgaGF2ZSBiZWVuIHZhcmlvdXNseSByZXBvcnRlZCBhcyBjb250aW51YWwgREhDUElORk9STQorICAgcmVxdWVzdHMgaW4gYW4gYXR0ZW1wdCB0byBnZXQgYW4gb3B0aW9uLTI1Miwgb3IgZXZlbiBpZ25vcmluZyBESENQCisgICBvZmZlcnMgY29tcGxldGVseSAoYW5kIGZhaWxpbmcgdG8gZ2V0IGFuIElQIGFkZHJlc3MpIGlmIHRoZXJlIGlzIG5vCisgICBvcHRpb24tMjUyIHN1cHBsaWVkLiBESENQIG9wdGlvbiAyNTIgaXMgZm9yIFdQQUQsIFdXVyBQcm94eSAKKyAgIEF1dG8gRGV0ZWN0aW9uIGFuZCBpZiB5b3UgZG9uJ3Qgd2FudCBvciBuZWVkIHRvIHVzZSB0aGF0LCB0aGVuIAorICAgc2ltcGxlc3QgZml4IHNlZW1zIHRvIGJlIHRvIHN1cHBseSBhbiBlbXB0eSBvcHRpb24gd2l0aDoKKworICAgZGhjcC1vcHRpb249MjUyLCJcbiIKKworCisKKyAKKworCisKKworICAgCisKKwkgICAgICAKZGlmZiAtLWdpdCBhL01PRFVMRV9MSUNFTlNFX0dQTCBiL01PRFVMRV9MSUNFTlNFX0dQTApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvTU9EVUxFX0xJQ0VOU0VfR1BMCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjczZWEyM2UKLS0tIC9kZXYvbnVsbAorKysgYi9NYWtlZmlsZQpAQCAtMCwwICsxLDE3MCBAQAorIyBkbnNtYXNxIGlzIENvcHlyaWdodCAoYykgMjAwMC0yMDE2IFNpbW9uIEtlbGxleQorIworIyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgZGF0ZWQgSnVuZSwgMTk5MSwgb3IKKyMgIChhdCB5b3VyIG9wdGlvbikgdmVyc2lvbiAzIGRhdGVkIDI5IEp1bmUsIDIwMDcuCisjCisjICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIyAgICAKKyMgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBOT1RFOiBCdWlsZGluZyB0aGUgaTE4biB0YXJnZXRzIHJlcXVpcmVzIEdOVS1tYWtlIAorCisKKyMgVmFyaWFibGVzIHlvdSBtYXkgd2VsbCB3YW50IHRvIG92ZXJyaWRlLgorCitQUkVGSVggICAgICAgID0gL3Vzci9sb2NhbAorQklORElSICAgICAgICA9ICQoUFJFRklYKS9zYmluCitNQU5ESVIgICAgICAgID0gJChQUkVGSVgpL3NoYXJlL21hbgorTE9DQUxFRElSICAgICA9ICQoUFJFRklYKS9zaGFyZS9sb2NhbGUKK0JVSUxERElSICAgICAgPSAkKFNSQykKK0RFU1RESVIgICAgICAgPSAKK0NGTEFHUyAgICAgICAgPSAtV2FsbCAtVyAtTzIKK0xERkxBR1MgICAgICAgPSAKK0NPUFRTICAgICAgICAgPSAKK1JQTV9PUFRfRkxBR1MgPSAKK0xJQlMgICAgICAgICAgPSAKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBWYXJpYWJsZXMgeW91IG1pZ2h0IHdhbnQgdG8gb3ZlcnJpZGUuCisKK1BLR19DT05GSUcgPSBwa2ctY29uZmlnCitJTlNUQUxMICAgID0gaW5zdGFsbAorTVNHTUVSR0UgICA9IG1zZ21lcmdlCitNU0dGTVQgICAgID0gbXNnZm10CitYR0VUVEVYVCAgID0geGdldHRleHQKKworU1JDID0gc3JjCitQTyAgPSBwbworTUFOID0gbWFuCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgcG1ha2Ugd2F5LiAoTkIgbm8gc3BhY2VzIHRvIGtlZXAgZ21ha2UgMy44MiBoYXBweSkKK3RvcCE9cHdkCisjIEdOVSBtYWtlIHdheS4KK3RvcD89JChDVVJESVIpCisKK2RidXNfY2ZsYWdzID0gICBgZWNobyAkKENPUFRTKSB8ICQodG9wKS9ibGQvcGtnLXdyYXBwZXIgSEFWRV9EQlVTICQoUEtHX0NPTkZJRykgLS1jZmxhZ3MgZGJ1cy0xYCAKK2RidXNfbGlicyA9ICAgICBgZWNobyAkKENPUFRTKSB8ICQodG9wKS9ibGQvcGtnLXdyYXBwZXIgSEFWRV9EQlVTICQoUEtHX0NPTkZJRykgLS1saWJzIGRidXMtMWAgCitpZG5fY2ZsYWdzID0gICAgYGVjaG8gJChDT1BUUykgfCAkKHRvcCkvYmxkL3BrZy13cmFwcGVyIEhBVkVfSUROICQoUEtHX0NPTkZJRykgLS1jZmxhZ3MgbGliaWRuYCAKK2lkbl9saWJzID0gICAgICBgZWNobyAkKENPUFRTKSB8ICQodG9wKS9ibGQvcGtnLXdyYXBwZXIgSEFWRV9JRE4gJChQS0dfQ09ORklHKSAtLWxpYnMgbGliaWRuYCAKK2lkbjJfY2ZsYWdzID0gICBgZWNobyAkKENPUFRTKSB8ICQodG9wKS9ibGQvcGtnLXdyYXBwZXIgSEFWRV9MSUJJRE4yICQoUEtHX0NPTkZJRykgLS1jZmxhZ3MgbGliaWRuMmAKK2lkbjJfbGlicyA9ICAgICBgZWNobyAkKENPUFRTKSB8ICQodG9wKS9ibGQvcGtnLXdyYXBwZXIgSEFWRV9MSUJJRE4yICQoUEtHX0NPTkZJRykgLS1saWJzIGxpYmlkbjJgCitjdF9jZmxhZ3MgPSAgICAgYGVjaG8gJChDT1BUUykgfCAkKHRvcCkvYmxkL3BrZy13cmFwcGVyIEhBVkVfQ09OTlRSQUNLICQoUEtHX0NPTkZJRykgLS1jZmxhZ3MgbGlibmV0ZmlsdGVyX2Nvbm50cmFja2AKK2N0X2xpYnMgPSAgICAgICBgZWNobyAkKENPUFRTKSB8ICQodG9wKS9ibGQvcGtnLXdyYXBwZXIgSEFWRV9DT05OVFJBQ0sgJChQS0dfQ09ORklHKSAtLWxpYnMgbGlibmV0ZmlsdGVyX2Nvbm50cmFja2AKK2x1YV9jZmxhZ3MgPSAgICBgZWNobyAkKENPUFRTKSB8ICQodG9wKS9ibGQvcGtnLXdyYXBwZXIgSEFWRV9MVUFTQ1JJUFQgJChQS0dfQ09ORklHKSAtLWNmbGFncyBsdWE1LjJgIAorbHVhX2xpYnMgPSAgICAgIGBlY2hvICQoQ09QVFMpIHwgJCh0b3ApL2JsZC9wa2ctd3JhcHBlciBIQVZFX0xVQVNDUklQVCAkKFBLR19DT05GSUcpIC0tbGlicyBsdWE1LjJgIAorbmV0dGxlX2NmbGFncyA9IGBlY2hvICQoQ09QVFMpIHwgJCh0b3ApL2JsZC9wa2ctd3JhcHBlciBIQVZFX0ROU1NFQyAkKFBLR19DT05GSUcpIC0tY2ZsYWdzIG5ldHRsZSBob2d3ZWVkYAorbmV0dGxlX2xpYnMgPSAgIGBlY2hvICQoQ09QVFMpIHwgJCh0b3ApL2JsZC9wa2ctd3JhcHBlciBIQVZFX0ROU1NFQyAkKFBLR19DT05GSUcpIC0tbGlicyBuZXR0bGUgaG9nd2VlZGAKK2dtcF9saWJzID0gICAgICBgZWNobyAkKENPUFRTKSB8ICQodG9wKS9ibGQvcGtnLXdyYXBwZXIgSEFWRV9ETlNTRUMgTk9fR01QIC0tY29weSAtbGdtcGAKK3N1bm9zX2xpYnMgPSAgICBgaWYgdW5hbWUgfCBncmVwIFN1bk9TID4vZGV2L251bGwgMj4mMTsgdGhlbiBlY2hvIC1sc29ja2V0IC1sbnNsIC1scG9zaXg0OyBmaWAKK3ZlcnNpb24gPSAgICAgLURWRVJTSU9OPSdcImAkKHRvcCkvYmxkL2dldC12ZXJzaW9uICQodG9wKWBcIicKKworc3VtPz0kKHNoZWxsICQoQ0MpIC1ERE5TTUFTUV9DT01QSUxFX09QVFMgJChDT1BUUykgLUUgJCh0b3ApLyQoU1JDKS9kbnNtYXNxLmggfCAoIG1kNXN1bSAyPi9kZXYvbnVsbCB8fCBtZDUgKSB8IGN1dCAtZiAxIC1kICcgJykKK3N1bSE9JChDQykgLURETlNNQVNRX0NPTVBJTEVfT1BUUyAkKENPUFRTKSAtRSAkKHRvcCkvJChTUkMpL2Ruc21hc3EuaCB8ICggbWQ1c3VtIDI+L2Rldi9udWxsIHx8IG1kNSApIHwgY3V0IC1mIDEgLWQgJyAnCitjb3B0c19jb25mID0gLmNvcHRzXyQoc3VtKQorCitvYmpzID0gY2FjaGUubyByZmMxMDM1Lm8gdXRpbC5vIG9wdGlvbi5vIGZvcndhcmQubyBuZXR3b3JrLm8gXAorICAgICAgIGRuc21hc3EubyBkaGNwLm8gbGVhc2UubyByZmMyMTMxLm8gbmV0bGluay5vIGRidXMubyBicGYubyBcCisgICAgICAgaGVscGVyLm8gdGZ0cC5vIGxvZy5vIGNvbm50cmFjay5vIGRoY3A2Lm8gcmZjMzMxNS5vIFwKKyAgICAgICBkaGNwLWNvbW1vbi5vIG91dHBhY2tldC5vIHJhZHYubyBzbGFhYy5vIGF1dGgubyBpcHNldC5vIFwKKyAgICAgICBkb21haW4ubyBkbnNzZWMubyBibG9ja2RhdGEubyB0YWJsZXMubyBsb29wLm8gaW5vdGlmeS5vIFwKKyAgICAgICBwb2xsLm8gcnJmaWx0ZXIubyBlZG5zMC5vIGFycC5vCisKK2hkcnMgPSBkbnNtYXNxLmggY29uZmlnLmggZGhjcC1wcm90b2NvbC5oIGRoY3A2LXByb3RvY29sLmggXAorICAgICAgIGRucy1wcm90b2NvbC5oIHJhZHYtcHJvdG9jb2wuaCBpcDZhZGRyLmgKKworYWxsIDogJChCVUlMRERJUikKKwlAY2QgJChCVUlMRERJUikgJiYgJChNQUtFKSBcCisgdG9wPSIkKHRvcCkiIFwKKyBidWlsZF9jZmxhZ3M9IiQodmVyc2lvbikgJChkYnVzX2NmbGFncykgJChpZG4yX2NmbGFncykgJChpZG5fY2ZsYWdzKSAkKGN0X2NmbGFncykgJChsdWFfY2ZsYWdzKSAkKG5ldHRsZV9jZmxhZ3MpIiBcCisgYnVpbGRfbGlicz0iJChkYnVzX2xpYnMpICQoaWRuMl9saWJzKSAkKGlkbl9saWJzKSAkKGN0X2xpYnMpICQobHVhX2xpYnMpICQoc3Vub3NfbGlicykgJChuZXR0bGVfbGlicykgJChnbXBfbGlicykiIFwKKyAtZiAkKHRvcCkvTWFrZWZpbGUgZG5zbWFzcSAKKworbW9zdGx5X2NsZWFuIDoKKwlybSAtZiAkKEJVSUxERElSKS8qLm1vICQoQlVJTERESVIpLyoucG90IAorCXJtIC1mICQoQlVJTERESVIpLy5jb3B0c18qICQoQlVJTERESVIpLyoubyAkKEJVSUxERElSKS9kbnNtYXNxLmEgJChCVUlMRERJUikvZG5zbWFzcQorCitjbGVhbiA6IG1vc3RseV9jbGVhbgorCXJtIC1mICQoQlVJTERESVIpL2Ruc21hc3FfYmFzZWxpbmUKKwlybSAtZiBjb3JlICovY29yZQorCXJtIC1mICp+IGNvbnRyaWIvKi8qfiAqLyp+CisKK2luc3RhbGwgOiBhbGwgaW5zdGFsbC1jb21tb24KKworaW5zdGFsbC1jb21tb24gOgorCSQoSU5TVEFMTCkgLWQgJChERVNURElSKSQoQklORElSKSAtZCAkKERFU1RESVIpJChNQU5ESVIpL21hbjgKKwkkKElOU1RBTEwpIC1tIDY0NCAkKE1BTikvZG5zbWFzcS44ICQoREVTVERJUikkKE1BTkRJUikvbWFuOCAKKwkkKElOU1RBTEwpIC1tIDc1NSAkKEJVSUxERElSKS9kbnNtYXNxICQoREVTVERJUikkKEJJTkRJUikKKworYWxsLWkxOG4gOiAkKEJVSUxERElSKQorCUBjZCAkKEJVSUxERElSKSAmJiAkKE1BS0UpIFwKKyB0b3A9IiQodG9wKSIgXAorIGkxOG49LURMT0NBTEVESVI9XCdcIiQoTE9DQUxFRElSKVwiXCcgXAorIGJ1aWxkX2NmbGFncz0iJCh2ZXJzaW9uKSAkKGRidXNfY2ZsYWdzKSAkKGlkbjJfY2ZsYWdzKSAkKGlkbl9jZmxhZ3MpICQoY3RfY2ZsYWdzKSAkKGx1YV9jZmxhZ3MpICQobmV0dGxlX2NmbGFncykiIFwKKyBidWlsZF9saWJzPSIkKGRidXNfbGlicykgJChpZG4yX2xpYnMpICQoaWRuX2xpYnMpICQoY3RfbGlicykgJChsdWFfbGlicykgJChzdW5vc19saWJzKSAkKG5ldHRsZV9saWJzKSAkKGdtcF9saWJzKSIgIFwKKyAtZiAkKHRvcCkvTWFrZWZpbGUgZG5zbWFzcQorCWZvciBmIGluIGBjZCAkKFBPKTsgZWNobyAqLnBvYDsgZG8gXAorCQljZCAkKHRvcCkgJiYgY2QgJChCVUlMRERJUikgJiYgJChNQUtFKSB0b3A9IiQodG9wKSIgLWYgJCh0b3ApL01ha2VmaWxlICQke2YlLnBvfS5tbzsgXAorCWRvbmUKKworaW5zdGFsbC1pMThuIDogYWxsLWkxOG4gaW5zdGFsbC1jb21tb24KKwljZCAkKEJVSUxERElSKTsgJCh0b3ApL2JsZC9pbnN0YWxsLW1vICQoREVTVERJUikkKExPQ0FMRURJUikgJChJTlNUQUxMKQorCWNkICQoTUFOKTsgLi4vYmxkL2luc3RhbGwtbWFuICQoREVTVERJUikkKE1BTkRJUikgJChJTlNUQUxMKQorCittZXJnZSA6IAorCUBjZCAkKEJVSUxERElSKSAmJiAkKE1BS0UpIHRvcD0iJCh0b3ApIiAtZiAkKHRvcCkvTWFrZWZpbGUgZG5zbWFzcS5wb3QKKwlmb3IgZiBpbiBgY2QgJChQTyk7IGVjaG8gKi5wb2A7IGRvIFwKKwkJZWNobyAtbiBtc2dtZXJnZSAkKFBPKS8kJGYgJiYgJChNU0dNRVJHRSkgLS1uby13cmFwIC1VICQoUE8pLyQkZiAkKEJVSUxERElSKS9kbnNtYXNxLnBvdDsgXAorCWRvbmUKKworIyBDYW5vbmljYWxpc2UgLnBvIGZpbGUuCislLnBvIDogCisJQGNkICQoQlVJTERESVIpICYmICQoTUFLRSkgLWYgJCh0b3ApL01ha2VmaWxlIGRuc21hc3EucG90CisJbXYgJChQTykvJCoucG8gJChQTykvJCoucG8ub3JpZyAmJiAkKE1TR01FUkdFKSAtLW5vLXdyYXAgJChQTykvJCoucG8ub3JpZyAkKEJVSUxERElSKS9kbnNtYXNxLnBvdCA+JChQTykvJCoucG87IAorCiskKEJVSUxERElSKToKKwlta2RpciAtcCAkKEJVSUxERElSKQorCisjIHJ1bGVzIGJlbG93IGFyZSBoZWxwZXJzIGZvciBzaXplIHRyYWNraW5nCisKK2Jhc2VsaW5lIDogbW9zdGx5X2NsZWFuIGFsbAorCUBjZCAkKEJVSUxERElSKSAmJiBcCisJICAgbXYgZG5zbWFzcSBkbnNtYXNxX2Jhc2VsaW5lCisKK2Jsb2F0Y2hlY2sgOiAkKEJVSUxERElSKS9kbnNtYXNxX2Jhc2VsaW5lIG1vc3RseV9jbGVhbiBhbGwKKwlAY2QgJChCVUlMRERJUikgJiYgXAorICAgICAgICAgICAkKHRvcCkvYmxkL2Jsb2F0LW8tbWV0ZXIgZG5zbWFzcV9iYXNlbGluZSBkbnNtYXNxOyBcCisgICAgICAgICAgIHNpemUgZG5zbWFzcV9iYXNlbGluZSBkbnNtYXNxCisKKyMgcnVsZXMgYmVsb3cgYXJlIHRhcmdldHMgaW4gcmVjdXJzaXZlIG1ha2VzIHdpdGggY3dkPSQoQlVJTERESVIpCisKKyQoY29wdHNfY29uZik6ICQoaGRycykKKwlAcm0gLWYgKi5vIC5jb3B0c18qCisJQHRvdWNoICRACisKKyQob2Jqczoubz0uYykgJChoZHJzKToKKwlsbiAtcyAkKHRvcCkvJChTUkMpLyRAIC4KKworJChvYmpzKTogJChjb3B0c19jb25mKSAkKGhkcnMpCisKKy5jLm86CisJJChDQykgJChDRkxBR1MpICQoQ09QVFMpICQoaTE4bikgJChidWlsZF9jZmxhZ3MpICQoUlBNX09QVF9GTEFHUykgLWMgJDwJCisKK2Ruc21hc3EgOiAkKG9ianMpCisJJChDQykgJChMREZMQUdTKSAtbyAkQCAkKG9ianMpICQoYnVpbGRfbGlicykgJChMSUJTKSAKKworZG5zbWFzcS5wb3QgOiAkKG9ianM6Lm89LmMpICQoaGRycykKKwkkKFhHRVRURVhUKSAtZCBkbnNtYXNxIC0tZm9yZWlnbi11c2VyIC0tb21pdC1oZWFkZXIgLS1rZXl3b3JkPV8gLW8gJEAgLWkgJChvYmpzOi5vPS5jKQorCislLm1vIDogJCh0b3ApLyQoUE8pLyUucG8gZG5zbWFzcS5wb3QKKwkkKE1TR01FUkdFKSAtbyAtICQodG9wKS8kKFBPKS8kKi5wbyBkbnNtYXNxLnBvdCB8ICQoTVNHRk1UKSAtbyAkKi5tbyAtCisKKy5QSE9OWSA6IGFsbCBjbGVhbiBtb3N0bHlfY2xlYW4gaW5zdGFsbCBpbnN0YWxsLWNvbW1vbiBhbGwtaTE4biBpbnN0YWxsLWkxOG4gbWVyZ2UgYmFzZWxpbmUgYmxvYXRjaGVjawpkaWZmIC0tZ2l0IGEvTk9USUNFIGIvTk9USUNFCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYwNTQ5YmUKLS0tIC9kZXYvbnVsbAorKysgYi9OT1RJQ0UKQEAgLTAsMCArMSwzNDAgQEAKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisJCSAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQorCisgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgICAgICAgICAgICAgICAgICAgICA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKwkJCSAgICBQcmVhbWJsZQorCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCitzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhpcworR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KK3VzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkKK3RoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworeW91ciBwcm9ncmFtcywgdG9vLgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAoreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKK3JpZ2h0cy4KKworICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKworICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQord2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCithdXRob3JzJyByZXB1dGF0aW9ucy4KKworICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CitwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorDAorCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6Cit0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQoraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCitXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKworWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCit5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorDAorVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgoraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwKK2FuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgordGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CitkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKK29uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKK2VudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Cit5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQord2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mCithIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgordGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwKK3VuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucworICAgIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKyAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91cgorICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKKyAgICBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0KKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBjKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBvZmZlcgorICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKyAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoCisgICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCisKK1RoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCitjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQorYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvCitjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCitzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUKK2FueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5Citmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQorb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQKK2l0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKworSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZworYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudAorYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCitkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKK2NvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisMCisgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCit2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCitIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCitkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCit0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KK3RoaXMgTGljZW5zZS4KKworICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCithbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCithcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisMCisgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwordGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCit0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24uCisKKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgordG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCitvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCitvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworCQkJICAgIE5PIFdBUlJBTlRZCisKKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCitGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECitPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCitSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCitSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCitPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECitUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCitQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworDAorCSAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKworICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0Citwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CitmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKworICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAordG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QKK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDE5eXkgIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKworCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcword2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKworICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgMTl5eSBuYW1lIG9mIGF1dGhvcgorICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkKK2JlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZQorbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4KKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKK3NjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmCituZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisKKyAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbQorICBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KKworICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5ODkKKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKworVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvCitwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQorY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlCitsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwKK1B1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvVGhpcmRQYXJ0eVByb2plY3QucHJvcCBiL1RoaXJkUGFydHlQcm9qZWN0LnByb3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhhNDlhZgotLS0gL2Rldi9udWxsCisrKyBiL1RoaXJkUGFydHlQcm9qZWN0LnByb3AKQEAgLTAsMCArMSw5IEBACisjIENvcHlyaWdodCAyMDEwIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjRnJpIEp1bCAxNiAxMDowMzowOCBQRFQgMjAxMAorY3VycmVudFZlcnNpb249Mi41MgordmVyc2lvbj0yLjUxCitpc05hdGl2ZT10cnVlCituYW1lPWRuc21hc3EKK2tleXdvcmRzPWRuc21hc3EKK29uRGV2aWNlPXRydWUKK2hvbWVwYWdlPWh0dHBcOi8vd3d3LnRoZWtlbGxleXMub3JnLnVrL2Ruc21hc3EvZG9jLmh0bWwKZGlmZiAtLWdpdCBhL1ZFUlNJT04gYi9WRVJTSU9OCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwMTI0NTgKLS0tIC9kZXYvbnVsbAorKysgYi9WRVJTSU9OCkBAIC0wLDAgKzEgQEAKKyAoSEVBRCAtPiBtYXN0ZXIsIHRhZzogdjIuNzgsIG9yaWdpbi9tYXN0ZXIsIG9yaWdpbi9IRUFEKQpkaWZmIC0tZ2l0IGEvYmxkL01ha2VmaWxlIGIvYmxkL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUzZGFiMzQKLS0tIC9kZXYvbnVsbAorKysgYi9ibGQvTWFrZWZpbGUKQEAgLTAsMCArMSwxNyBAQAorQ0ZMQUdTID0gLVdhbGwgLVcgLU8yCisKK09CSlMgPSBjYWNoZS5vIHJmYzEwMzUubyB1dGlsLm8gb3B0aW9uLm8gZm9yd2FyZC5vIG5ldHdvcmsubyBcCisgICAgICAgZG5zbWFzcS5vIGRoY3AubyBsZWFzZS5vIHJmYzIxMzEubyBuZXRsaW5rLm8gZGJ1cy5vIGJwZi5vIFwKKyAgICAgICBoZWxwZXIubyB0ZnRwLm8gbG9nLm8KKworLmMubzoKKwkkKENDKSAkKENGTEFHUykgJChDT1BUUykgJChJMThOKSAkKEROU01BU1FfQ0ZMQUdTKSAkKFJQTV9PUFRfRkxBR1MpIC1jICQ8CisKK2Ruc21hc3EgOiAkKE9CSlMpCisJJChDQykgJChMREZMQUdTKSAtbyAkQCAgJChPQkpTKSAkKEROU01BU1FfTElCUykgJChMSUJTKSAKKyAKK2Ruc21hc3EucG90IDogJChPQkpTOi5vPS5jKSBkbnNtYXNxLmggY29uZmlnLmgKKwkkKFhHRVRURVhUKSAtZCBkbnNtYXNxIC0tZm9yZWlnbi11c2VyIC0tb21pdC1oZWFkZXIgLS1rZXl3b3JkPV8gLW8gJEAgLWkgJChPQkpTOi5vPS5jKQorCislLm1vIDogLi4vcG8vJS5wbyBkbnNtYXNxLnBvdAorCSQoTVNHTUVSR0UpIC1vIC0gLi4vcG8vJCoucG8gZG5zbWFzcS5wb3QgfCAkKE1TR0ZNVCkgLW8gJCoubW8gLQpkaWZmIC0tZ2l0IGEvYmxkL2Jsb2F0LW8tbWV0ZXIgYi9ibGQvYmxvYXQtby1tZXRlcgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ZGIyYTVlCi0tLSAvZGV2L251bGwKKysrIGIvYmxkL2Jsb2F0LW8tbWV0ZXIKQEAgLTAsMCArMSwxMzAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgMjAwNCBNYXR0IE1hY2thbGwgPG1wbUBzZWxlbmljLmNvbT4KKyMKKyMgSW5zcGlyZWQgYnkgcGVybCBCbG9hdC1PLU1ldGVyIChjKSAxOTk3IGJ5IEFuZGkgS2xlZW4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcworIyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgorCitpbXBvcnQgc3lzLCBvcyMsIHJlCisKK2RlZiB1c2FnZSgpOgorICAgIHN5cy5zdGRlcnIud3JpdGUoInVzYWdlOiAlcyBbLXRdIGZpbGUxIGZpbGUyXG4iICUgc3lzLmFyZ3ZbMF0pCisgICAgc3lzLmV4aXQoLTEpCisKK2YxLCBmMiA9IChOb25lLCBOb25lKQorZmxhZ190aW1pbmcsIGRhc2hlcyA9IChGYWxzZSwgRmFsc2UpCisKK2ZvciBmIGluIHN5cy5hcmd2WzE6XToKKyAgICBpZiBmLnN0YXJ0c3dpdGgoIi0iKToKKyAgICAgICAgaWYgZiA9PSAiLS0iOiAjIHN5bV9hcmdzCisgICAgICAgICAgICBkYXNoZXMgPSBUcnVlCisgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBmID09ICItdCI6ICMgdGltaW5ncworICAgICAgICAgICAgZmxhZ190aW1pbmcgPSBUcnVlCisgICAgZWxzZToKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGYpOgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiRXJyb3I6IGZpbGUgJyVzJyBkb2VzIG5vdCBleGlzdFxuIiAlIGYpCisgICAgICAgICAgICB1c2FnZSgpCisgICAgICAgIGlmIGYxIGlzIE5vbmU6CisgICAgICAgICAgICBmMSA9IGYKKyAgICAgICAgZWxpZiBmMiBpcyBOb25lOgorICAgICAgICAgICAgZjIgPSBmCitpZiBmbGFnX3RpbWluZzoKKyAgICBpbXBvcnQgdGltZQoraWYgZjEgaXMgTm9uZSBvciBmMiBpcyBOb25lOgorICAgIHVzYWdlKCkKKworc3ltX2FyZ3MgPSAiICIuam9pbihzeXMuYXJndlszICsgZmxhZ190aW1pbmcgKyBkYXNoZXM6XSkKK2RlZiBnZXRzaXplcyhmaWxlKToKKyAgICBzeW0sIGFsaWFzLCBsdXQgPSB7fSwge30sIHt9CisgICAgZm9yIGwgaW4gb3MucG9wZW4oInJlYWRlbGYgLVcgLXMgJXMgJXMiICUgKHN5bV9hcmdzLCBmaWxlKSkucmVhZGxpbmVzKCk6CisgICAgICAgIGwgPSBsLnN0cmlwKCkKKyAgICAgICAgaWYgbm90IChsZW4obCkgYW5kIGxbMF0uaXNkaWdpdCgpIGFuZCBsZW4obC5zcGxpdCgpKSA9PSA4KToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIG51bSwgdmFsdWUsIHNpemUsIHR5cCwgYmluZCwgdmlzLCBuZHgsIG5hbWUgPSBsLnNwbGl0KCkKKyAgICAgICAgaWYgbmR4ID09ICJVTkQiOiBjb250aW51ZSAjIHNraXAgdW5kZWZpbmVkCisgICAgICAgIGlmIHR5cCBpbiBbIlNFQ1RJT04iLCAiRklMRVMiXTogY29udGludWUgIyBza2lwIHNlY3Rpb25zIGFuZCBmaWxlcworICAgICAgICBpZiAiLiIgaW4gbmFtZTogbmFtZSA9ICJzdGF0aWMuIiArIG5hbWUuc3BsaXQoIi4iKVswXQorICAgICAgICB2YWx1ZSA9IGludCh2YWx1ZSwgMTYpCisgICAgICAgIHNpemUgPSBpbnQoc2l6ZSwgMTYpIGlmIHNpemUuc3RhcnRzd2l0aCgnMHgnKSBlbHNlIGludChzaXplKQorICAgICAgICBpZiB2aXMgIT0gIkRFRkFVTFQiIGFuZCBiaW5kICE9ICJHTE9CQUwiOiAjIHNlZSBpZiBpdCBpcyBhbiBhbGlhcworICAgICAgICAgICAgYWxpYXNbKHZhbHVlLCBzaXplKV0gPSB7Im5hbWUiIDogbmFtZX0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN5bVtuYW1lXSA9IHsiYWRkciIgOiB2YWx1ZSwgInNpemUiOiAgc2l6ZX0KKyAgICAgICAgICAgIGx1dFsodmFsdWUsIHNpemUpXSA9IDAKKyAgICBmb3IgYWRkciwgc3ogaW4gaXRlcihhbGlhcy5rZXlzKCkpOgorICAgICAgICAjIElmIHRoZSBub24tR0xPQkFMIHN5bSBoYXMgYW4gaW1wbGVtZW50YXRpb24gZWxzZXdoZXJlIHRoZW4KKyAgICAgICAgIyBpdCdzIGFuIGFsaWFzLCBkaXNyZWdhcmQgaXQuCisgICAgICAgIGlmIG5vdCAoYWRkciwgc3opIGluIGx1dDoKKyAgICAgICAgICAgICMgSWYgdGhpcyBub24tR0xPQkFMIHN5bSBkb2VzIG5vdCBoYXZlIGFuIGltcGxlbWVudGF0aW9uIGF0CisgICAgICAgICAgICAjIGFub3RoZXIgYWRkcmVzcywgdGhlbiB0cmVhdCBpdCBhcyBhIG5vcm1hbCBzeW1ib2wuCisgICAgICAgICAgICBzeW1bYWxpYXNbKGFkZHIsIHN6KV1bIm5hbWUiXV0gPSB7ImFkZHIiIDogYWRkciwgInNpemUiOiBzen0KKyAgICBmb3IgbCBpbiBvcy5wb3BlbigicmVhZGVsZiAtVyAtUyAiICsgZmlsZSkucmVhZGxpbmVzKCk6CisgICAgICAgIHggPSBsLnNwbGl0KCkKKyAgICAgICAgaWYgbGVuKHgpPDY6IGNvbnRpbnVlCisgICAgICAgICMgU2hvdWxkIHRha2UgdGhlc2UgaW50byBhY2NvdW50IHRvbyEKKyAgICAgICAgI2lmIHhbMV0gbm90IGluIFsiLnRleHQiLCAiLnJvZGF0YSIsICIuc3ltdGFiIiwgIi5zdHJ0YWIiXTogY29udGludWUKKyAgICAgICAgaWYgeFsxXSBub3QgaW4gWyIucm9kYXRhIl06IGNvbnRpbnVlCisgICAgICAgIHN5bVt4WzFdXSA9IHsiYWRkciIgOiBpbnQoeFszXSwgMTYpLCAic2l6ZSIgOiBpbnQoeFs1XSwgMTYpfQorICAgIHJldHVybiBzeW0KKworaWYgZmxhZ190aW1pbmc6CisgICAgc3RhcnRfdDEgPSBpbnQodGltZS50aW1lKCkgKiAxZTkpCitvbGQgPSBnZXRzaXplcyhmMSkKK2lmIGZsYWdfdGltaW5nOgorICAgIGVuZF90MSA9IGludCh0aW1lLnRpbWUoKSAqIDFlOSkKKyAgICBzdGFydF90MiA9IGludCh0aW1lLnRpbWUoKSAqIDFlOSkKK25ldyA9IGdldHNpemVzKGYyKQoraWYgZmxhZ190aW1pbmc6CisgICAgZW5kX3QyID0gaW50KHRpbWUudGltZSgpICogMWU5KQorICAgIHN0YXJ0X3QzID0gaW50KHRpbWUudGltZSgpICogMWU5KQorZ3Jvdywgc2hyaW5rLCBhZGQsIHJlbW92ZSwgdXAsIGRvd24gPSAwLCAwLCAwLCAwLCAwLCAwCitkZWx0YSwgY29tbW9uID0gW10sIHt9CisKK2ZvciBuYW1lIGluIGl0ZXIob2xkLmtleXMoKSk6CisgICAgaWYgbmFtZSBpbiBuZXc6CisgICAgICAgIGNvbW1vbltuYW1lXSA9IDEKKworZm9yIG5hbWUgaW4gb2xkOgorICAgIGlmIG5hbWUgbm90IGluIGNvbW1vbjoKKyAgICAgICAgcmVtb3ZlICs9IDEKKyAgICAgICAgc3ogPSBvbGRbbmFtZV1bInNpemUiXQorICAgICAgICBkb3duICs9IHN6CisgICAgICAgIGRlbHRhLmFwcGVuZCgoLXN6LCBuYW1lKSkKKworZm9yIG5hbWUgaW4gbmV3OgorICAgIGlmIG5hbWUgbm90IGluIGNvbW1vbjoKKyAgICAgICAgYWRkICs9IDEKKyAgICAgICAgc3ogPSBuZXdbbmFtZV1bInNpemUiXQorICAgICAgICB1cCArPSBzegorICAgICAgICBkZWx0YS5hcHBlbmQoKHN6LCBuYW1lKSkKKworZm9yIG5hbWUgaW4gY29tbW9uOgorICAgICAgICBkID0gbmV3W25hbWVdLmdldCgic2l6ZSIsIDApIC0gb2xkW25hbWVdLmdldCgic2l6ZSIsIDApCisgICAgICAgIGlmIGQ+MDogZ3JvdywgdXAgPSBncm93KzEsIHVwK2QKKyAgICAgICAgZWxpZiBkPDA6IHNocmluaywgZG93biA9IHNocmluaysxLCBkb3duLWQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGRlbHRhLmFwcGVuZCgoZCwgbmFtZSkpCisKK2RlbHRhLnNvcnQoKQorZGVsdGEucmV2ZXJzZSgpCitpZiBmbGFnX3RpbWluZzoKKyAgICBlbmRfdDMgPSBpbnQodGltZS50aW1lKCkgKiAxZTkpCisKK3ByaW50KCIlLTQ4cyAlN3MgJTdzICUrN3MiICUgKCJmdW5jdGlvbiIsICJvbGQiLCAibmV3IiwgImRlbHRhIikpCitmb3IgZCwgbiBpbiBkZWx0YToKKyAgICBpZiBkOgorICAgICAgICBvbGRfc3ogPSBvbGQuZ2V0KG4sIHt9KS5nZXQoInNpemUiLCAiLSIpCisgICAgICAgIG5ld19zeiA9IG5ldy5nZXQobiwge30pLmdldCgic2l6ZSIsICItIikKKyAgICAgICAgcHJpbnQoIiUtNDhzICU3cyAlN3MgJSs3ZCIgJSAobiwgb2xkX3N6LCBuZXdfc3osIGQpKQorcHJpbnQoIi0iKjc4KQordG90YWw9IihhZGQvcmVtb3ZlOiAlcy8lcyBncm93L3NocmluazogJXMvJXMgdXAvZG93bjogJXMvJXMpJSVzVG90YWw6ICVzIGJ5dGVzIlwKKyAgICAlIChhZGQsIHJlbW92ZSwgZ3Jvdywgc2hyaW5rLCB1cCwgLWRvd24sIHVwLWRvd24pCitwcmludCh0b3RhbCAlICgiICIqKDgwLWxlbih0b3RhbCkpKSkKK2lmIGZsYWdfdGltaW5nOgorICAgIHByaW50KCJcbiVkLyVkOyAlZCBQYXJzZSBvcmlnaW4vbmV3OyBwcm9jZXNzaW5nIG5zZWNzIiAlCisgICAgICAgIChlbmRfdDEtc3RhcnRfdDEsIGVuZF90Mi1zdGFydF90MiwgZW5kX3QzLXN0YXJ0X3QzKSkKKyAgICBwcmludCgidG90YWwgbnNlY3M6ICVkIiAlIChlbmRfdDMtc3RhcnRfdDEpKQpkaWZmIC0tZ2l0IGEvYmxkL2dldC12ZXJzaW9uIGIvYmxkL2dldC12ZXJzaW9uCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU0NzJhYWIKLS0tIC9kZXYvbnVsbAorKysgYi9ibGQvZ2V0LXZlcnNpb24KQEAgLTAsMCArMSwzOCBAQAorIyEvYmluL3NoCisKKyMgRGV0ZXJtaW5lIHRoZSB2ZXJzaW9uIHN0cmluZyB0byBidWlsZCBpbnRvIGEgYmluYXJ5LgorIyBXaGVuIGJ1aWxkaW5nIGluIHRoZSBnaXQgcmVwb3NpdG9yeSwgd2UgY2FuIHVzZSB0aGUgb3V0cHV0IAorIyBvZiAiZ2l0IGRlc2NyaWJlIiB3aGljaCBnaXZlcyBhbiB1bmVxdWl2b2NhbCBhbnN3ZXIuCisjCisjIEZhaWxpbmcgdGhhdCwgd2UgdXNlIHRoZSBjb250ZW50cyBvZiB0aGUgVkVSU0lPTiBmaWxlCisjIHdoaWNoIGhhcyBhIHNldCBvZiByZWZlcmVuY2VzIHN1YnN0aXR1dGVkIGludG8gaXQgYnkgZ2l0LgorIyBJZiB3ZSBjYW4gZmluZCBvbmUgd2hpY2ggbWF0Y2hlcyAkdlswLTldLiogdGhlbiB3ZSBhc3N1bWUgaXQncworIyBhIHZlcnNpb24tbnVtYmVyIHRhZywgZWxzZSB3ZSBqdXN0IHVzZSB0aGUgd2hvbGUgc3RyaW5nLgorIyBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHZbMC05XS4qIHRhZywgc29ydCB0aGVtIGFuZCB1c2UgdGhlCisjIGZpcnN0LiBUaGlzIGZhdm91cnMsIGVnIHYyLjYzIG92ZXIgMi42M3JjNi4KKworIyBDaGFuZ2UgZGlyZWN0b3J5IHRvIHRoZSB0b3BsZXZlbCBzb3VyY2UgZGlyZWN0b3J5LgoraWYgdGVzdCAteiAiJDEiIHx8ICEgdGVzdCAtZCAiJDEiIHx8ICEgY2QgIiQxIjsgdGhlbgorICAgIGVjaG8gIiQwOiBGaXJzdCBhcmd1bWVudCAkMSBtdXN0IGJlIHRvcGxldmVsIGRpci4iID4mMgorICAgIGV4aXQgMQorZmkKKworaWYgd2hpY2ggZ2l0ID4vZGV2L251bGwgMj4mMSAmJiBcCisgICAgKFsgLWQgLmdpdCBdIHx8IGdyZXAgJ15naXRkaXI6JyAuZ2l0ID4vZGV2L251bGwgMj4mMSkgJiYgXAorICAgIGdpdCBkZXNjcmliZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gCisgICAgZ2l0IGRlc2NyaWJlIHwgc2VkICdzL152Ly8nCitlbGlmIGdyZXAgJ1wkRm9ybWF0OiVkXCQnICQxL1ZFUlNJT04gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgIyB1bnN1YnN0aXR1dGVkIFZFUlNJT04sIGJ1dCBubyBnaXQgYXZhaWxhYmxlLgorICAgIGVjaG8gVU5LTk9XTgorZWxzZQorICAgICB2ZXJzPWBjYXQgJDEvVkVSU0lPTiB8IHNlZCAncy9bKCksIF0vLC8gZycgfCB0ciAnLCcgJ1xuJyB8IGdyZXAgXnZbMC05XWAKKworICAgICBpZiBbICQ/IC1lcSAwIF07IHRoZW4KKyAgICAgICAgIGVjaG8gIiR7dmVyc30iIHwgc29ydCAtciB8IGhlYWQgLW4gMSB8IHNlZCAncy9edi8vJworICAgICBlbHNlCisgICAgICAgICBjYXQgJDEvVkVSU0lPTgorICAgICBmaQorZmkKKworZXhpdCAwCisKZGlmZiAtLWdpdCBhL2JsZC9pbnN0YWxsLW1hbiBiL2JsZC9pbnN0YWxsLW1hbgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40MjBjOWIxCi0tLSAvZGV2L251bGwKKysrIGIvYmxkL2luc3RhbGwtbWFuCkBAIC0wLDAgKzEsOSBAQAorIyEvYmluL3NoCisKK2ZvciBmIGluICo7IGRvCisgIGlmIFsgLWQgJGYgXTsgdGhlbgorICAgICAkMiAtbSA3NTUgLWQgJDEvJGYvbWFuOCAKKyAgICAgJDIgLW0gNjQ0ICRmL2Ruc21hc3EuOCAkMS8kZi9tYW44CisgICAgIGVjaG8gaW5zdGFsbGluZyAkZi9tYW44L2Ruc21hc3EuOAorICBmaQorZG9uZQpkaWZmIC0tZ2l0IGEvYmxkL2luc3RhbGwtbW8gYi9ibGQvaW5zdGFsbC1tbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hYjU0MzAxCi0tLSAvZGV2L251bGwKKysrIGIvYmxkL2luc3RhbGwtbW8KQEAgLTAsMCArMSw5IEBACisjIS9iaW4vc2gKKworZm9yIGYgaW4gKi5tbzsgZG8KKyAgJDIgLW0gNzU1IC1kICQxLyR7ZiUubW99L0xDX01FU1NBR0VTCisgICQyIC1tIDY0NCAkZiAkMS8ke2YlLm1vfS9MQ19NRVNTQUdFUy9kbnNtYXNxLm1vCisgIGVjaG8gaW5zdGFsbGluZyAke2YlLm1vfS9MQ19NRVNTQUdFUy9kbnNtYXNxLm1vCitkb25lCisKKwpkaWZmIC0tZ2l0IGEvYmxkL3BrZy13cmFwcGVyIGIvYmxkL3BrZy13cmFwcGVyCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBkZGI2NzgKLS0tIC9kZXYvbnVsbAorKysgYi9ibGQvcGtnLXdyYXBwZXIKQEAgLTAsMCArMSw0MCBAQAorIyEvYmluL3NoCisKK3NlYXJjaD0kMQorc2hpZnQKK3BrZz0kMQorc2hpZnQKK29wPSQxCitzaGlmdAorCitpbj1gY2F0YAorCitpZiBncmVwICJeXCNbWzpzcGFjZTpdXSpkZWZpbmVbWzpzcGFjZTpdXSokc2VhcmNoIiBjb25maWcuaCA+L2Rldi9udWxsIDI+JjEgfHwgXAorICAgIGVjaG8gJGluIHwgZ3JlcCAkc2VhcmNoID4vZGV2L251bGwgMj4mMTsgdGhlbgorIyBOYXN0eSwgbmFzdHksIGluIC0tY29weSwgYXJnIDIgaXMgYW5vdGhlciBjb25maWcgdG8gc2VhcmNoIGZvciwgdXNlIHdpdGggTk9fR01QCisgICAgaWYgWyAkb3AgPSAiLS1jb3B5IiBdOyB0aGVuCisJaWYgZ3JlcCAiXlwjW1s6c3BhY2U6XV0qZGVmaW5lW1s6c3BhY2U6XV0qJHBrZyIgY29uZmlnLmggPi9kZXYvbnVsbCAyPiYxIHx8IFwKKyAgICAgICAgICAgIGVjaG8gJGluIHwgZ3JlcCAkcGtnID4vZGV2L251bGwgMj4mMTsgdGhlbgorCSAgICBwa2c9IiIKKwllbHNlIAorCSAgICBwa2c9IiQqIgorCWZpCisgICAgZWxpZiBncmVwICJeXCNbWzpzcGFjZTpdXSpkZWZpbmVbWzpzcGFjZTpdXSoke3NlYXJjaH1fU1RBVElDIiBjb25maWcuaCA+L2Rldi9udWxsIDI+JjEgfHwgXAorCSAgICAgIGVjaG8gJGluIHwgZ3JlcCAke3NlYXJjaH1fU1RBVElDID4vZGV2L251bGwgMj4mMTsgdGhlbgorCXBrZz1gJHBrZyAgLS1zdGF0aWMgJG9wICQqYAorICAgIGVsc2UKKwlwa2c9YCRwa2cgJG9wICQqYAorICAgIGZpCisKKyAgICBpZiBncmVwICJeXCNbWzpzcGFjZTpdXSpkZWZpbmVbWzpzcGFjZTpdXSoke3NlYXJjaH1fU1RBVElDIiBjb25maWcuaCA+L2Rldi9udWxsIDI+JjEgfHwgXAorCWVjaG8gJGluIHwgZ3JlcCAke3NlYXJjaH1fU1RBVElDID4vZGV2L251bGwgMj4mMTsgdGhlbgorCWlmIFsgJG9wID0gIi0tbGlicyIgXSB8fCBbICRvcCA9ICItLWNvcHkiIF07IHRoZW4KKwkgICAgZWNobyAiLVdsLC1Cc3RhdGljICRwa2cgLVdsLC1CZHluYW1pYyIKKwllbHNlCisJICAgIGVjaG8gIiRwa2ciIAorCWZpCisgICAgZWxzZQorCWVjaG8gIiRwa2ciCisgICAgZmkKK2ZpCisKZGlmZiAtLWdpdCBhL2NvbnRyaWIvQ1BFLVdBTi9SRUFETUUgYi9jb250cmliL0NQRS1XQU4vUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNTYzNDcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL0NQRS1XQU4vUkVBRE1FCkBAIC0wLDAgKzEsMzYgQEAKK0Ruc21hc3EgZnJvbSB2ZXJzaW9uIDIuNTIgaGFzIGEgY291cGxlIG9mIHJhdGhlciBhcHBsaWNhdGlvbi1zcGVjaWZpYworZmVhdHVyZXMgZGVzaWduZWQgdG8gYWxsb3cgZm9yIGltcGxlbWVudGF0aW9uIG9mIHRoZSBESENQIHBhcnQgb2YgQ1BFCitXQU4gbWFuYWdlbWVudCBwcm90b2NvbC4KKworaHR0cDovL3d3dy5icm9hZGJhbmQtZm9ydW0ub3JnL3RlY2huaWNhbC9kb3dubG9hZC9UUi0wNjlfQW1lbmRtZW50LTIucGRmCitodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1RSLTA2OQorCitUaGUgcmVsZXZhbnQgc2VjdGlvbnMgYXJlIEYuMi4xICJHYXRld2F5IFJlcXVpcmVtZW50cyIgYW5kIEYuMi41ICJESENQCitWZW5kb3IgT3B0aW9ucyIuCisKK0ZpcnN0LCBkbnNtYXNxIGNoZWNrcyBmb3IgREhDUCByZXF1ZXN0cyB3aGljaCBjb250YWluIGFuIG9wdGlvbi0xMjUKK3ZlbmRvci1jbGFzcyBvcHRpb24gd2hpY2ggaW4gdHVybiBob2xkcyBhIHZlbmRvciBzZWN0aW9uIGZvciBJQU5BCitlbnRlcnByaXNlIG51bWJlciAzNTYxIHdoaWNoIGNvbnRhaW5zIHN1Yi1vcHRpb25zIGNvZGVzIDEgYW5kIDIuIElmCit0aGlzIGlzIHByZXNlbnQgIHRoZW4gdGhlIG5ldHdvcmstdGFnICJjcGV3YW4taWQiIGlzIHNldC4gCitUaGlzIGFsbG93cyBkbnNtYXNxIHRvIGJlIGNvbmZpZ3VyZWQgdG8gcmVwbHkgd2l0aCB0aGUgY29ycmVjdCAKK0dhdGV3YXlNYW51ZmFjdHVyZXJPVUksIEdhdGV3YXlTZXJpYWxOdW1iZXIgYW5kIEdhdGV3YXlQcm9kdWN0Q2xhc3MgbGlrZSB0aGlzOgorCitkaGNwLW9wdGlvbj1jcGV3YW4taWQsdmktZW5jYXA6MzU2MSw0LCI8R2F0ZXdheU1hbnVmYWN0dXJlck9VST4iCitkaGNwLW9wdGlvbj1jcGV3YW4taWQsdmktZW5jYXA6MzU2MSw1LCI8U2VyaWFsTnVtYmVyPiIKK2RoY3Atb3B0aW9uPWNwZXdhbi1pZCx2aS1lbmNhcDozNTYxLDYsIjxQcm9kdWN0Q2xhc3M+IgorCitTZWNvbmQsIHRoZSByZWNlaXZlZCBzdWItb3B0aW9ucyAxLCAyLCBhbmQgMyBhcmUgcGFzc2VkIHRvIHRoZSBESENQCitsZWFzZS1jaGFuZ2Ugc2NyaXB0IGFzIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgRE5TTUFTUV9DUEVXQU5fT1VJLAorRE5TTUFTUV9DUEVXQU5fU0VSSUFMLCBhbmQgRE5TTUFTUV9DUEVXQU5fQ0xBU1MgcmVzcGVjdGl2ZWx5LiBUaGlzIGFsbG93cwordGhlIHNjcmlwdCB0byBiZSB1c2VkIHRvIG1haW50YWluIGEgTWFuYWdlYWJsZURldmljZSB0YWJsZSBhcworc3BlY2lmaWVkIGluIEYuMi4xLiBOb3RlIHRoYXQgdGhpcyBkYXRhIGlzIG5vdCByZXRhaW5lZCBpbiBkbnNtYXNxJ3MKK2ludGVybmFsIERIQ1AgbGVhc2UgZGF0YWJhc2UsIHNvIGl0IGlzIG5vdCBhdmFpbGFibGUgb24gZXZlcnkgY2FsbCB0byAKK3RoZSBzY3JpcHQgKHRoaXMgaXMgdGhlIHNhbWUgYXMgc29tZSBvdGhlciBkYXRhIHN1Y2ggYXMgdmVuZG9yIGFuZAordXNlciBjbGFzc2VzKS4gSXQgd2lsbCBob3dldmVyIGJlIGF2YWlsYWJsZSBmb3IgYXQgbGVhc3QgdGhlICJhZGQiCitjYWxsLCBhbmQgc2hvdWxkIGJlIHN0b3JlZCB0aGVuIGFnYWluc3QgdGhlIElQIGFkZHJlc3MgYXMgcHJpbWFyeSAKK2tleSBmb3IgZnV0dXJlIHVzZS4KKworCitUaGlzIGZlYXR1cmUgd2FzIGFkZGVkIHRvIGRuc21hc3EgdW5kZXIgc3BvbnNvcnNoaXAgZnJvbSBFcmljc3Nvbi4KKworCmRpZmYgLS1naXQgYS9jb250cmliL01hY09TWC1sYXVuY2hkL2xhdW5jaGQtUkVBRE1FLnR4dCBiL2NvbnRyaWIvTWFjT1NYLWxhdW5jaGQvbGF1bmNoZC1SRUFETUUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmMjQ1ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL01hY09TWC1sYXVuY2hkL2xhdW5jaGQtUkVBRE1FLnR4dApAQCAtMCwwICsxLDM4IEBACitUaGlzIGlzIGEgbGF1bmNoZCBpdGVtIGZvciBNYWMgT1MgWCBhbmQgTWFjIE9TIFggU2VydmVyLgorRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgbGF1bmNoZCwgdGhlCisiU3lzdGVtIHdpZGUgYW5kIHBlci11c2VyIGRhZW1vbi9hZ2VudCBtYW5hZ2VyIiwgc2VlIHRoZSBsYXVuY2hkCittYW4gcGFnZSwgb3IgdGhlIHdpa2lwZWRpYSBwYWdlOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xhdW5jaGQKKworVGhpcyBsYXVuY2hkIGl0ZW0gdXNlcyB0aGUgZm9sbG93aW5nIGZsYWdzOgorLS1rZWVwLWluLWZvcmVncm91bmQgLSB0aGlzIGlzIGNydWNpYWwgZm9yIHVzZSB3aXRoIGxhdW5jaGQKKy0tbG9nLXF1ZXJpZXMgLSB0aGlzIGlzIG9wdGlvbmFsIGFuZCB5b3UgY2FuIHJlbW92ZSBpdAorLS1sb2ctZmFjaWxpdHk9L3Zhci9sb2cvZG5zbWFzcS5sb2cgLSBhZ2FpbiBvcHRpb25hbCBpbnN0ZWFkIG9mIHN5c3RlbS5sb2cKKworVG8gdXNlIHRoaXMgbGF1bmNoZCBpdGVtIGZvciBkbnNtYXNxOgorCitJZiB5b3UgZG9uJ3QgYWxyZWFkeSBoYXZlIGEgZm9sZGVyIC9MaWJyYXJ5L0xhdW5jaERhZW1vbnMsIHRoZW4gY3JlYXRlIG9uZToKK3N1ZG8gbWtkaXIgL0xpYnJhcnkvTGF1bmNoRGFlbW9ucworc3VkbyBjaG93biByb290OmFkbWluIC9MaWJyYXJ5L0xhdW5jaERhZW1vbnMKK3N1ZG8gY2htb2QgNzc1IC9MaWJyYXJ5L0xhdW5jaERhZW1vbnMgCisKK0NvcHkgdWsub3JnLnRoZWtlbGxleXMuZG5zbWFzcS5wbGlzdCB0aGVyZSBhbmQgdGhlbiBzZXQgb3duZXJzaGlwL3Blcm1pc3Npb25zOgorc3VkbyBjcCB1ay5vcmcudGhla2VsbGV5cy5kbnNtYXNxLnBsaXN0IC9MaWJyYXJ5L0xhdW5jaERhZW1vbnMvCitzdWRvIGNob3duIHJvb3Q6YWRtaW4gL0xpYnJhcnkvTGF1bmNoRGFlbW9ucy91ay5vcmcudGhla2VsbGV5cy5kbnNtYXNxLnBsaXN0CitzdWRvIGNobW9kIDY0NCAvTGlicmFyeS9MYXVuY2hEYWVtb25zL3VrLm9yZy50aGVrZWxsZXlzLmRuc21hc3EucGxpc3QKKworT3B0aW9uYWxseSwgZWRpdCB5b3VyIGRuc21hc3EgY29uZmlndXJhdGlvbiBmaWxlIHRvIHlvdXIgbGlraW5nLgorCitUbyBzdGFydCB0aGUgbGF1bmNoZCBqb2IsIHdoaWNoIHN0YXJ0cyBkbnNtYXNxLCByZWJvb3Qgb3IgdXNlIHRoZSBjb21tYW5kOgorc3VkbyBsYXVuY2hjdGwgbG9hZCAvTGlicmFyeS9MYXVuY2hEYWVtb25zL3VrLm9yZy50aGVrZWxsZXlzLmRuc21hc3EucGxpc3QKKworVG8gc3RvcCB0aGUgbGF1bmNoZCBqb2IsIHdoaWNoIHN0b3BzIGRuc21hc3EsIHVzZSB0aGUgY29tbWFuZDoKK3N1ZG8gbGF1bmNoY3RsIHVubG9hZCAvTGlicmFyeS9MYXVuY2hEYWVtb25zL3VrLm9yZy50aGVrZWxsZXlzLmRuc21hc3EucGxpc3QKKworSWYgeW91IHdhbnQgdG8gcGVybWFuZW50bHkgc3RvcCB0aGUgbGF1bmNoZCBqb2IsIHNvIGl0IGRvZXNuJ3Qgc3RhcnQgdGhlIGpvYiBldmVuIGFmdGVyIGEgcmVib290LCB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kOgorc3VkbyBsYXVuY2hjdGwgdW5sb2FkIC13IC9MaWJyYXJ5L0xhdW5jaERhZW1vbnMvdWsub3JnLnRoZWtlbGxleXMuZG5zbWFzcS5wbGlzdAorCitJZiB5b3UgbWFrZSBhIGNoYW5nZSB0byB0aGUgY29uZmlndXJhdGlvbiBmaWxlLCB5b3Ugc2hvdWxkIHJlbGF1bmNoIGRuc21hc3E7Cit0byBkbyB0aGlzIHVubG9hZCBhbmQgdGhlbiBsb2FkIGFnYWluOgorCitzdWRvIGxhdW5jaGN0bCB1bmxvYWQgL0xpYnJhcnkvTGF1bmNoRGFlbW9ucy91ay5vcmcudGhla2VsbGV5cy5kbnNtYXNxLnBsaXN0CitzdWRvIGxhdW5jaGN0bCBsb2FkIC9MaWJyYXJ5L0xhdW5jaERhZW1vbnMvdWsub3JnLnRoZWtlbGxleXMuZG5zbWFzcS5wbGlzdApkaWZmIC0tZ2l0IGEvY29udHJpYi9NYWNPU1gtbGF1bmNoZC91ay5vcmcudGhla2VsbGV5cy5kbnNtYXNxLnBsaXN0IGIvY29udHJpYi9NYWNPU1gtbGF1bmNoZC91ay5vcmcudGhla2VsbGV5cy5kbnNtYXNxLnBsaXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NzI1YjEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL01hY09TWC1sYXVuY2hkL3VrLm9yZy50aGVrZWxsZXlzLmRuc21hc3EucGxpc3QKQEAgLTAsMCArMSwxNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgorPHBsaXN0IHZlcnNpb249IjEuMCI+Cis8ZGljdD4KKwk8a2V5PkxhYmVsPC9rZXk+CisJPHN0cmluZz51ay5vcmcudGhla2VsbGV5cy5kbnNtYXNxPC9zdHJpbmc+CisJPGtleT5Qcm9ncmFtQXJndW1lbnRzPC9rZXk+CisJPGFycmF5PgorCQk8c3RyaW5nPi91c3IvbG9jYWwvc2Jpbi9kbnNtYXNxPC9zdHJpbmc+CisJCTxzdHJpbmc+LS1rZWVwLWluLWZvcmVncm91bmQ8L3N0cmluZz4KKwk8L2FycmF5PgorCTxrZXk+UnVuQXRMb2FkPC9rZXk+CisJPHRydWUvPgorPC9kaWN0PgorPC9wbGlzdD4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvU29sYXJpczEwL1JFQURNRSBiL2NvbnRyaWIvU29sYXJpczEwL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hMDM1ODc1Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9Tb2xhcmlzMTAvUkVBRE1FCkBAIC0wLDAgKzEsMjggQEAKK0Zyb206IERhdmlkIENvbm5lbGx5IDxkY29ubmVsbHlAZ21haWwuY29tPgorRGF0ZTogTW9uLCBBcHIgNywgMjAwOCBhdCAzOjMxIEFNCitTdWJqZWN0OiBTb2xhcmlzIDEwIHNlcnZpY2UgbWFuaWZlc3QKK1RvOiBkbnNtYXNxLWRpc2N1c3NAbGlzdHMudGhla2VsbGV5cy5vcmcudWsKKworCitJJ3ZlIGZvdW5kIGRuc21hc3EgbXVjaCBlYXNpZXIgdG8gc2V0IHVwIG9uIG15IGhvbWUgc2VydmVyIHJ1bm5pbmcgU29sYXJpcworMTAgdGhhbiB0aGUgc3RvY2sgZGhjcC9kbnMgc2VydmVyLCB3aGljaCBpcyBwcm9iYWJseSBvdmVya2lsbCBhbnl3YXkgZm9yIG15CitzaW1wbGUgaG9tZSBuZXR3b3JrIG5lZWRzLiBTaW5jZSBTb2xhcmlzIG5vdyB1c2VzIFNNRiAoU2VydmljZSBNYW5hZ2VtZW50CitGYWNpbGl0eSkgdG8gbWFuYWdlIHNlcnZpY2VzIEkgdGhvdWdodCBJJ2QgY3JlYXRlIGEgc2ltcGxlIHNlcnZpY2UgbWFuaWZlc3QKK2ZvciB0aGUgZG5zbWFzcSBzZXJ2aWNlLiBUaGUgbWFuaWZlc3QgY3VycmVudGx5IGFzc3VtZXMgdGhhdCBkbnNtYXNxIGhhcworYmVlbiBpbnN0YWxsZWQgaW4gJy91c3IvbG9jYWwvc2Jpbi9kbnNtYXNxJyBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBpbgorJy91c3IvbG9jYWwvZXRjL2Ruc21hc3EuY29uZicsIHNvIHlvdSBtYXkgaGF2ZSB0byBhZGp1c3QgdGhlc2UgcGF0aHMgZm9yCit5b3VyIGxvY2FsIGluc3RhbGxhdGlvbi4gSGVyZSBhcmUgdGhlIHN0ZXBzIEkgZm9sbG93ZWQgdG8gaW5zdGFsbCBhbmQgZW5hYmxlCit0aGUgZG5zbWFzcSBzZXJ2aWNlOgorICAjIHN2Y2NmZyBpbXBvcnQgZG5zbWFzcS54bWwKKyAgIyBzdmNhZG0gZW5hYmxlIGRuc21hc3EKKworVG8gY29uZmlybSB0aGF0IHRoZSBzZXJ2aWNlIGlzIGVuYWJsZWQgYW5kIG9ubGluZToKKworICAjIHN2Y3MgLWwgZG5zbWFzcQorCitJJ3ZlIGp1c3Qgc3RhcnRlZCBsZWFybmluZyBhYm91dCBTTUYgc28gaWYgYW55b25lIGhhcyBhbnkKK2NvcnJlY3Rpb25zL2ZlZWRiYWNrIHRoZXkgYXJlIG1vcmUgdGhhbiB3ZWxjb21lLgorCitUaGFua3MsCitEYXZpZAorCmRpZmYgLS1naXQgYS9jb250cmliL1NvbGFyaXMxMC9SRUFETUUtc3BhcmMgYi9jb250cmliL1NvbGFyaXMxMC9SRUFETUUtc3BhcmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI3YjY1YwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvU29sYXJpczEwL1JFQURNRS1zcGFyYwpAQCAtMCwwICsxLDggQEAKK0hpIFNpbW9uLAorCitJIGp1c3Qgd2FudGVkIHRvIGxldCB5b3Uga25vdyB0aGF0IEkgaGF2ZSBidWlsdCBhIFNvbGFyaXMgLnBrZyBpbnN0YWxsIHBhY2thZ2Ugb2YgeW91ciBkbnNtYXNxIHV0aWxpdHkgZm9yIHBlb3BsZSB0byB1c2UuICBGZWVsIGZyZWUgdG8gcG9pbnQgdGhlbSBpbiBteSBkaXJlY3Rpb24gaWYgeW91IGhhdmUgcGVvcGxlIHdobyB3YW50IHRoaXMgc29ydCBvZiB0aGluZy4KKworaHR0cDovL2VqZXNjb25zdWx0aW5nLndvcmRwcmVzcy5jb20vMjAxMC8wNS8xMi9nbnUtZG5zbWFzcS1mb3Itb3BlbnNvbGFyaXMtc3BhcmMvCisKK1RoYW5rcworLWV2YW4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvU29sYXJpczEwL1JFQURNRS5jcmVhdGVfcGFja2FnZSBiL2NvbnRyaWIvU29sYXJpczEwL1JFQURNRS5jcmVhdGVfcGFja2FnZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzY4OTlhCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9Tb2xhcmlzMTAvUkVBRE1FLmNyZWF0ZV9wYWNrYWdlCkBAIC0wLDAgKzEsMjUgQEAKK09rLCBzY3JpcHQgYXR0YWNoZWQgLi4uIHNlZW1zIHRvIGJlIHdvcmtpbmcgb2sgZm9yIG1lLCAKK3RyaWVkIHRvIGluc3RhbGwgYW5kIHJlbW92ZSBhIGZldyB0aW1lcy4gSXQgZG9lcyB0aGUKK3JpZ2h0IHRoaW5nIHdpdGggdGhlIHNtZiB3aGVuIGluc3RhbGxpbmcsIHlvdSBjYW4gdGhlbiAKK3NpbXBseSBlbmFibGUgdGhlIHNlcnZpY2UuIFVwb24gcmVtb3ZhbCBpdCBjbGVhbnMgdXAgdGhlCitmaWxlcyBidXQgd29uJ3QgY2xlYW4gdXAgdGhlIHNlcnZpY2VzIChJIHRoaW5rIHVudGlsCithIHJlYm9vdCkgLi4uIEkndmUgb25seSBzdGFydGVkIGxvb2tpbmcgYXQgdGhlIG5ldyAKK3BhY2thZ2VzIHN0dWZmIGluIHRoZSBsYXN0IGRheSBvciB0d28sIHNvIEkgY291bGQgYmUgCittaXNzaW5nIHNvbWV0aGluZywgYnV0IEkgY2FuJ3QgZmluZCBhbnkgd2F5IHRvIGZvcmNlCisgYSBwcm9wZXIgY2xlYW51cC4KKworSXQgcmVxdWlyZXMgdGhhdCB5b3UgaGF2ZSBhIHdyaXRhYmxlIHJlcG9zaXRvcnkgc2V0dXAgCithcyBwZXIgdGhlIGRvY3Mgb24gdGhlIG9wZW5zb2xhcmlzIHdlYnNpdGUgYW5kIGl0IHdpbGwKK2NyZWF0ZSBhIGRuc21hc3EgcGFja2FnZSAocGFja2FnZSBuYW1lIGlzIGEgdmFyaWFibGUgCitpbiB0aGUgc2NyaXB0KS4gVGhlIHNjcmlwdCB0YWtlcyBhIHZlcnNpb24gbnVtYmVyIGZvciAKK3RoZSBwYWNrYWdlIGFuZCBhc3N1bWVzIHRoYXQgaXQncyBpbiB0aGUgY29udHJpYi9Tb2xhcmlzMTAgCitkaXJlY3RvcnksIGl0IHRoZW4gd29ya3Mgb3V0IHRoZSBiYXNlIHRyZWUgZGlyZWN0b3J5IAorZnJvbSAkMC4KKworaS5lLiAgJCBjb250cmliL1NvbGFyaXMxMC9jcmVhdGVfcGFja2FnZSAyLjUyLTEKK29yICAgJCBjZCBjb250cmliL1NvbGFyaXMxMDsgLi9jcmVhdGVfcGFja2FnZSAyLjUyLTEKKworSXQncyBhIGJpdCBtb3JlIGNvbXBsZXggdGhhbiBpdCBjb3VsZCBiZSBiZWNhdXNlIEkgCitwcmVmZXIgcHV0dGluZyB0aGUgZGFlbW9uIGluIC91c3Ivc2JpbiBhbmQgdGhlIGNvbmZpZyAKK2luIC9ldGMsIHNvIHRoZSBzY3JpcHQgd2lsbCBhY3R1YWxseSBjcmVhdGUgYSBuZXcgCit2ZXJzaW9uIG9mIHRoZSBleGlzdGluZyBjb250cmliIGRuc21hc3EueG1sLgpkaWZmIC0tZ2l0IGEvY29udHJpYi9Tb2xhcmlzMTAvY3JlYXRlX3BhY2thZ2UgYi9jb250cmliL1NvbGFyaXMxMC9jcmVhdGVfcGFja2FnZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2ZhMmExCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9Tb2xhcmlzMTAvY3JlYXRlX3BhY2thZ2UKQEAgLTAsMCArMSw4NyBAQAorIyEvYmluL3NoCisKKyMKKyMgRm9yIG91ciBwYWNrYWdlLCBhbmQgZm9yIHRoZSBTTUYgc2NyaXB0LCB3ZSBuZWVkIHRvIGRlZmluZSB3aGVyZSB3ZQorIyB3YW50IHRoaW5ncyB0byBnby4uLgorIworQklOX0RJUj0iL3Vzci9zYmluIgorQ09ORl9ESVI9Ii9ldGMiCitNQU5fRElSPSIvdXNyL3NoYXJlL21hbi9tYW44IgorCitQQUNLQUdFX05BTUU9ImRuc21hc3EiCisKKyMKKyMgU2luY2Ugd2Uga25vdyB3ZSBhcmUgaW4gdGhlIGNvbnRyaWIgZGlyZWN0b3J5IHdlIGNhbiB3b3JrIG91dCB3aGVyZQorIyB0aGUgcmVzdCBvZiB0aGUgdHJlZSBpcy4uLgorIworQkFTRURJUj0iYGRpcm5hbWUgJDBgLy4uLy4uIgorCisjCisjIFdlIG5lZWQgYSB2ZXJzaW9uIG51bWJlciB0byB1c2UgZm9yIHRoZSBwYWNrYWdlIGNyZWF0aW9uLi4uCisjCitpZiBbICQjICE9IDEgXTsgdGhlbgorCWVjaG8gIlVzYWdlOiAkMCA8cGFja2FnZV92ZXJzaW9uX251bWJlcj4iID4mMgorCWV4aXQgMQorZmkKK1ZFUlNJT049IiQxIgorCisjCisjIEZpcnN0IHRoaW5nIHdlIGRvIGlzIGZpeC11cCB0aGUgc21mIGZpbGUgdG8gdXNlIHRoZSBwYXRocyB3ZSBwcmVmZXIuLi4KKyMKK2lmIFsgISAtZiAiJHtCQVNFRElSfS9jb250cmliL1NvbGFyaXMxMC9kbnNtYXNxLnhtbCIgXTsgdGhlbgorCWVjaG8gIiQwOiB1bmFibGUgdG8gZmluZCBjb250cmliL1NvbGFyaXMxMC9kbnNtYXNxLnhtbCIgPiYyCisJZXhpdCAxCitmaQorCitlY2hvICJGaXhpbmcgdXAgc21mIGZpbGUgLi4uIFxjIgorY2F0ICIke0JBU0VESVJ9L2NvbnRyaWIvU29sYXJpczEwL2Ruc21hc3EueG1sIiB8IFwKKwlzZWQgCS1lICJzJS91c3IvbG9jYWwvZXRjJSR7Q09ORl9ESVJ9JSIgXAorCQktZSAicyUvdXNyL2xvY2FsL3NiaW4lJHtCSU5fRElSfSUiIFwKKwkJLWUgInMlL3Vzci9sb2NhbC9tYW4lJHtNQU5fRElSfSUiID4gJHtCQVNFRElSfS9jb250cmliL1NvbGFyaXMxMC9kbnNtYXNxLXBrZy54bWwKK2VjaG8gImRvbmUuIgorCitlY2hvICJDcmVhdGluZyBwYWNrYWdpbmcgZmlsZSAuLi4gXGMiCitjYXQgPDxFT0YgPiR7QkFTRURJUn0vY29udHJpYi9Tb2xhcmlzMTAvZG5zbWFzcV9wYWNrYWdlLmluYworIworIyBoZWFkZXIKKyMKK3NldCBuYW1lPXBrZy5uYW1lCQl2YWx1ZT0iZG5zbWFzcSIKK3NldCBuYW1lPXBrZy5kZXNjcmlwdGlvbgl2YWx1ZT0iZG5zbWFzcSBkYWVtb24gLSBkbnMsIGRoY3AsIHRmdHAgZXRjIgorc2V0IG5hbWU9cGtnLmRldGFpbGVkX3VybAl2YWx1ZT0iaHR0cDovL3d3dy50aGVrZWxsZXlzLm9yZy51ay9kbnNtYXNxL2RvYy5odG1sIgorc2V0IG5hbWU9aW5mby5tYWludGFpbmVyCXZhbHVlPSJUQkQgKHRiZEB0YmQuY29tKSIKK3NldCBuYW1lPWluZm8udXBzdHJlYW0JCXZhbHVlPSJkbnNtYXNxLWRpc2N1c3NAbGlzdHMudGhla2VsbGV5cy5vcmcudWsiCitzZXQgbmFtZT1pbmZvLnVwc3RyZWFtX3VybAl2YWx1ZT0iaHR0cDovL3d3dy50aGVrZWxsZXlzLm9yZy51ay9kbnNtYXNxL2RvYy5odG1sIgorIworIyBkZXBlbmRlbmNpZXMgLi4uIG5vbmU/CisjCisKKyMKKyMgZGlyZWN0b3JpZXMKKyMKK2RpciBtb2RlPTA3NTUgb3duZXI9cm9vdCBncm91cD1iaW4gcGF0aD0ke0JJTl9ESVJ9LworZGlyIG1vZGU9MDc1NSBvd25lcj1yb290IGdyb3VwPXN5cyBwYXRoPSR7Q09ORl9ESVJ9LworZGlyIG1vZGU9MDc1NSBvd25lcj1yb290IGdyb3VwPXN5cyBwYXRoPSR7TUFOX0RJUn0vCitkaXIgbW9kZT0wNzU1IG93bmVyPXJvb3QgZ3JvdXA9c3lzIHBhdGg9L3Zhci8KK2RpciBtb2RlPTA3NTUgb3duZXI9cm9vdCBncm91cD1zeXMgcGF0aD0vdmFyL3N2YworZGlyIG1vZGU9MDc1NSBvd25lcj1yb290IGdyb3VwPXN5cyBwYXRoPS92YXIvc3ZjL21hbmlmZXN0CitkaXIgbW9kZT0wNzU1IG93bmVyPXJvb3QgZ3JvdXA9c3lzIHBhdGg9L3Zhci9zdmMvbWFuaWZlc3QvbmV0d29yaworCisjCisjIGZpbGVzCisjCitmaWxlICR7QkFTRURJUn0vc3JjL2Ruc21hc3EgbW9kZT0wNTU1IG93bmVyPXJvb3QgZ3JvdXA9YmluIHBhdGg9JHtCSU5fRElSfS9kbnNtYXNxCitmaWxlICR7QkFTRURJUn0vbWFuL2Ruc21hc3EuOCBtb2RlPTA1NTUgb3duZXI9cm9vdCBncm91cD1iaW4gcGF0aD0ke01BTl9ESVJ9L2Ruc21hc3EuOAorZmlsZSAke0JBU0VESVJ9L2Ruc21hc3EuY29uZi5leGFtcGxlIG1vZGU9MDY0NCBvd25lcj1yb290IGdyb3VwPXN5cyBwYXRoPSR7Q09ORl9ESVJ9L2Ruc21hc3EuY29uZiBwcmVzZXJ2ZT1zdHJhd2JlcnJ5CitmaWxlICR7QkFTRURJUn0vY29udHJpYi9Tb2xhcmlzMTAvZG5zbWFzcS1wa2cueG1sIG1vZGU9MDY0NCBvd25lcj1yb290IGdyb3VwPXN5cyBwYXRoPS92YXIvc3ZjL21hbmlmZXN0L25ldHdvcmsvZG5zbWFzcS54bWwgcmVzdGFydF9mbXJpPXN2Yzovc3lzdGVtL21hbmlmZXN0LWltcG9ydDpkZWZhdWx0CisKK0VPRgorZWNobyAiZG9uZS4iCisKK2VjaG8gIkNyZWF0aW5nIHBhY2thZ2UuLi4iCitldmFsIGBwa2dzZW5kIG9wZW4gJHtQQUNLQUdFX05BTUV9QCR7VkVSU0lPTn1gCitwa2dzZW5kIGluY2x1ZGUgJHtCQVNFRElSfS9jb250cmliL1NvbGFyaXMxMC9kbnNtYXNxX3BhY2thZ2UuaW5jCitpZiBbICIkPyIgPSAwIF07IHRoZW4KKwlwa2dzZW5kIGNsb3NlCitlbHNlCisJZWNobyAiRXJyb3JzIgorZmkKZGlmZiAtLWdpdCBhL2NvbnRyaWIvU29sYXJpczEwL2Ruc21hc3EueG1sIGIvY29udHJpYi9Tb2xhcmlzMTAvZG5zbWFzcS54bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2RhMDI1MwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvU29sYXJpczEwL2Ruc21hc3EueG1sCkBAIC0wLDAgKzEsNjUgQEAKKzw/eG1sIHZlcnNpb249JzEuMCc/PgorPCFET0NUWVBFIHNlcnZpY2VfYnVuZGxlIFNZU1RFTSAiL3Vzci9zaGFyZS9saWIveG1sL2R0ZC9zZXJ2aWNlX2J1bmRsZS5kdGQuMSI+CisKKzwhLS0gU2VydmljZSBtYW5pZmVzdCBmb3IgZG5zbWFzcSAtLT4KKworPHNlcnZpY2VfYnVuZGxlIHR5cGU9J21hbmlmZXN0JyBuYW1lPSdkbnNtYXNxJz4KKyAgPHNlcnZpY2UgbmFtZT0nbmV0d29yay9kbnNtYXNxJyB0eXBlPSdzZXJ2aWNlJyB2ZXJzaW9uPScxJz4KKworICAgIDxjcmVhdGVfZGVmYXVsdF9pbnN0YW5jZSBlbmFibGVkPSdmYWxzZScvPgorICAgIDxzaW5nbGVfaW5zdGFuY2UvPgorCisgICAgPGRlcGVuZGVuY3kgbmFtZT0nbXVsdGktdXNlcicKKyAgICAgICAgICAgICAgICBncm91cGluZz0ncmVxdWlyZV9hbGwnCisgICAgICAgICAgICAgICAgcmVzdGFydF9vbj0ncmVmcmVzaCcKKyAgICAgICAgICAgICAgICB0eXBlPSdzZXJ2aWNlJz4KKyAgICAgIDxzZXJ2aWNlX2ZtcmkgdmFsdWU9J3N2YzovbWlsZXN0b25lL211bHRpLXVzZXInLz4KKyAgICA8L2RlcGVuZGVuY3k+CisKKyAgICA8ZGVwZW5kZW5jeSBuYW1lPSdjb25maWcnCisJCWdyb3VwaW5nPSdyZXF1aXJlX2FsbCcKKwkJcmVzdGFydF9vbj0ncmVzdGFydCcKKwkJdHlwZT0ncGF0aCc+CisgICAgICA8c2VydmljZV9mbXJpIHZhbHVlPSdmaWxlOi8vL3Vzci9sb2NhbC9ldGMvZG5zbWFzcS5jb25mJy8+CisgICAgPC9kZXBlbmRlbmN5PgorCisgICAgPGRlcGVuZGVudCBuYW1lPSdkbnNtYXNxX211bHRpLXVzZXItc2VydmVyJworICAgICAgICAgICAgICAgZ3JvdXBpbmc9J29wdGlvbmFsX2FsbCcKKyAgICAgICAgICAgICAgIHJlc3RhcnRfb249J25vbmUnPgorICAgICAgPHNlcnZpY2VfZm1yaSB2YWx1ZT0nc3ZjOi9taWxlc3RvbmUvbXVsdGktdXNlci1zZXJ2ZXInIC8+CisgICAgPC9kZXBlbmRlbnQ+CisKKyAgICA8ZXhlY19tZXRob2QgdHlwZT0nbWV0aG9kJyBuYW1lPSdzdGFydCcKKyAgICAgICAgICAgICAgICAgZXhlYz0nL3Vzci9sb2NhbC9zYmluL2Ruc21hc3EgLUMgL3Vzci9sb2NhbC9ldGMvZG5zbWFzcS5jb25mJworICAgICAgICAgICAgICAgICB0aW1lb3V0X3NlY29uZHM9JzYwJyA+CisgICAgICA8bWV0aG9kX2NvbnRleHQ+CisgICAgICAgIDxtZXRob2RfY3JlZGVudGlhbCB1c2VyPSdyb290JyBncm91cD0ncm9vdCcgcHJpdmlsZWdlcz0nYWxsJy8+CisgICAgICA8L21ldGhvZF9jb250ZXh0PgorICAgIDwvZXhlY19tZXRob2Q+CisKKyAgICA8ZXhlY19tZXRob2QgdHlwZT0nbWV0aG9kJworICAgICAgICAgICAgICAgICBuYW1lPSdzdG9wJworICAgICAgICAgICAgICAgICBleGVjPSc6a2lsbCcKKyAgICAgICAgICAgICAgICAgdGltZW91dF9zZWNvbmRzPSc2MCcvPgorCisgICAgPGV4ZWNfbWV0aG9kIHR5cGU9J21ldGhvZCcKKyAgICAgICAgICAgICAgICAgbmFtZT0ncmVmcmVzaCcKKyAgICAgICAgICAgICAgICAgZXhlYz0nOmtpbGwgLUhVUCcKKyAgICAgICAgICAgICAgICAgdGltZW91dF9zZWNvbmRzPSc2MCcgLz4KKworICAgIDx0ZW1wbGF0ZT4KKyAgICAgIDxjb21tb25fbmFtZT4KKyAgICAgICAgPGxvY3RleHQgeG1sOmxhbmc9J0MnPmRuc21hc3Egc2VydmVyPC9sb2N0ZXh0PgorICAgICAgPC9jb21tb25fbmFtZT4KKyAgICAgIDxkZXNjcmlwdGlvbj4KKyAgICAgICAgPGxvY3RleHQgeG1sOmxhbmc9J0MnPgorZG5zbWFzcSAtIEEgbGlnaHR3ZWlnaHQgREhDUCBhbmQgY2FjaGluZyBETlMgc2VydmVyLgorICAgICAgICA8L2xvY3RleHQ+CisgICAgICA8L2Rlc2NyaXB0aW9uPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgIDxtYW5wYWdlIHRpdGxlPSdkbnNtYXNxJyBzZWN0aW9uPSc4JyBtYW5wYXRoPScvdXNyL2xvY2FsL21hbicvPgorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgIDwvdGVtcGxhdGU+CisKKyAgPC9zZXJ2aWNlPgorPC9zZXJ2aWNlX2J1bmRsZT4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvU3VzZS9SRUFETUUgYi9jb250cmliL1N1c2UvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNmZGMxODYKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL1N1c2UvUkVBRE1FCkBAIC0wLDAgKzEsNiBAQAorVGhpcyBwYWNrYWdpbmcgaXMgbm93IHVubWFpbnRhaW5lZCBpbiB0aGUgZG5zbWFzcSBzb3VyY2U6IGRuc21hc3EgaXMKK2luY2x1ZGVkIGluIFN1c2UgcHJvcGVyLCBhbmQgdXAtdG8tZGF0ZSBwYWNrYWdlcyBhcmUgbm93IGF2YWlsYWJsZQorZnJvbSAKKworZnRwOi8vZnRwLnN1c2UuY29tL3B1Yi9wZW9wbGUvdWcvCisKZGlmZiAtLWdpdCBhL2NvbnRyaWIvU3VzZS9SRUFETUUuc3VzZWZpcmV3YWxsIGIvY29udHJpYi9TdXNlL1JFQURNRS5zdXNlZmlyZXdhbGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGI5NDEwOAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvU3VzZS9SRUFETUUuc3VzZWZpcmV3YWxsCkBAIC0wLDAgKzEsMjcgQEAKK1RoaXMgaXMgYSBwYXRjaCBhZ2FpbnN0IFN1U0VmaXJld2FsbDItMy4xLTIwNiAoU3VTRSA5LnggYW5kIG9sZGVyKQorSXQgZml4ZXMgdGhlIGRlcGVuZGVuY3kgZnJvbSB0aGUgZG5zIGRhZW1vbiBuYW1lICduYW1lZCcKK0FmdGVyIGFwcGVuZGluZyB0aGUgcGF0Y2gsIHRoZSBTdVNFZmlyZXdhbGwgaXMgYWdhaW4gYWJsZSB0byBhdXRvZGV0ZWN0IAordGhlIGRuc21hc3EgbmFtZWQgc2VydmljZS4KK1RoaXMgaXMgYSB2ZXJ5IG9sZCBidWcgaW4gdGhlIFN1U0VmaXJld2FsbCBzY3JpcHQuCitUaGUgU3VTRSBwZW9wbGUgdGhpbmsgdGhlIG5hbWUgb2YgdGhlIGRucyBzZXJ2ZXIgd2lsbCBhbHdheXMgJ25hbWVkJworCisKKy0tLSAvc2Jpbi9TdVNFZmlyZXdhbGwyLm9yaWcJMjAwNC0wMS0yMyAxMzozMDowOS4wMDAwMDAwMDAgKzAxMDAKKysrKyAvc2Jpbi9TdVNFZmlyZXdhbGwyCTIwMDQtMDEtMjMgMTM6MzE6NTYuMDAwMDAwMDAwICswMTAwCitAQCAtNzY0LDcgKzc2NCw3IEBACisgICAgIGVjaG8gJ0ZXX0FMTE9XX0lOQ09NSU5HX0hJR0hQT1JUU19VRFAgc2hvdWxkIGJlIHNldCB0byB5ZXMsIGlmIHlvdSBhcmUgcnVubmluZyBhIEROUyBzZXJ2ZXIhJworIAorIHRlc3QgIiRGV19TRVJWSUNFX0FVVE9ERVRFQ1QiID0geWVzIC1vICIkRldfU0VSVklDRV9BVVRPREVURUNUIiA9IGRteiAtbyAiJEZXX1NFUlZJQ0VfQVVUT0RFVEVDVCIgPSBleHQgJiYgeworLSAgICB0ZXN0ICIkRldfU0VSVklDRV9ETlMiID0gbm8gLWEgJyEnICIkU1RBUlRfTkFNRUQiID0gbm8gJiYgY2hlY2tfc3J2IG5hbWVkICYmIHsKKysgICAgdGVzdCAiJEZXX1NFUlZJQ0VfRE5TIiA9IG5vIC1hICchJyAiJFNUQVJUX05BTUVEIiA9IG5vICYmIGNoZWNrX3NydiBkbnNtYXNxICYmIHsKKyAJZWNobyAtZSAnV2FybmluZzogZGV0ZWN0ZWQgYWN0aXZhdGVkIG5hbWVkLCBlbmFibGluZyBGV19TRVJWSUNFX0ROUyEKKyBZb3Ugc3RpbGwgaGF2ZSB0byBhbGxvdyB0Y3AvdWRwIHBvcnQgNTMgb24gaW50ZXJuYWwsIGRteiBhbmQvb3IgZXh0ZXJuYWwuJworIAlGV19TRVJWSUNFX0ROUz0kRldfU0VSVklDRV9BVVRPREVURUNUCitAQCAtODc4LDcgKzg3OCw3IEBACisgdGVzdCAtZSAvZXRjL3Jlc29sdi5jb25mIHx8IGVjaG8gIldhcm5pbmc6IC9ldGMvcmVzb2x2LmNvbmYgbm90IGZvdW5kIgorICMgR2V0IHBvcnRzL0lQIGJpbmRpbmdzIG9mIE5BTUVEL1NRVUlECisgdGVzdCAiJEZXX1NFUlZJQ0VfRE5TIiA9IHllcyAtbyAiJEZXX1NFUlZJQ0VfRE5TIiA9IGRteiAtbyAiJEZXX1NFUlZJQ0VfRE5TIiA9IGV4dCAtbyAiJFNUQVJUX05BTUVEIiA9IHllcyAmJiBETlNfUE9SVD1gJExTT0YgLWkgLW4gLVAgfCBcCistICAgICRBV0sgLUY6ICcvXm5hbWVkIC4qIFVEUCAvIHtwcmludCAkMn0nfCAkR1JFUCAtdncgNTMgfCAkU09SVCAtdW5gCisrICAgICRBV0sgLUY6ICcvXmRuc21hc3EgLiogVURQIC8ge3ByaW50ICQyfSd8ICRHUkVQIC12dyA1MyB8ICRTT1JUIC11bmAKKyB0ZXN0ICIkRldfU0VSVklDRV9TUVVJRCIgPSB5ZXMgLW8gIiRGV19TRVJWSUNFX1NRVUlEIiA9IGRteiAtbyAiJEZXX1NFUlZJQ0VfU1FVSUQiID0gZXh0IC1vICIkU1RBUlRfU1FVSUQiID0geWVzICYmIFNRVUlEX1BPUlQ9YCRMU09GIC1pIC1uIC1QIHwgXAorICAgICAkQVdLIC1GOiAnL15zcXVpZCAuKiBVRFAvIHtwcmludCAkMn0nfCAkU09SVCAtdW5gCmRpZmYgLS1naXQgYS9jb250cmliL1N1c2UvZG5zbWFzcS1TdVNFLnBhdGNoIGIvY29udHJpYi9TdXNlL2Ruc21hc3EtU3VTRS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42MjYyNDVmCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9TdXNlL2Ruc21hc3EtU3VTRS5wYXRjaApAQCAtMCwwICsxLDIzIEBACistLS0gbWFuL2Ruc21hc3EuOAkyMDA0LTA4LTA4IDIwOjU3OjU2LjAwMDAwMDAwMCArMDIwMAorKysrIG1hbi9kbnNtYXNxLjgJMjAwNC0wOC0xMiAwMDo0MDowMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC02OSw3ICs2OSw3IEBACisgLlRQCisgLkIgXC1nLCAtLWdyb3VwPTxncm91cG5hbWU+IAorIFNwZWNpZnkgdGhlIGdyb3VwIHdoaWNoIGRuc21hc3Egd2lsbCBydW4KKy1hcy4gVGhlIGRlZmF1bHRzIHRvICJkaXAiLCBpZiBhdmFpbGFibGUsIHRvIGZhY2lsaXRhdGUgYWNjZXNzIHRvCisrYXMuIFRoZSBkZWZhdWx0cyB0byAiZGlhbG91dCIsIGlmIGF2YWlsYWJsZSwgdG8gZmFjaWxpdGF0ZSBhY2Nlc3MgdG8KKyAvZXRjL3BwcC9yZXNvbHYuY29uZiB3aGljaCBpcyBub3Qgbm9ybWFsbHkgd29ybGQgcmVhZGFibGUuCisgLlRQCisgLkIgXC12LCAtLXZlcnNpb24KKy0tLSBzcmMvY29uZmlnLmgJMjAwNC0wOC0xMSAxMTozOToxOC4wMDAwMDAwMDAgKzAyMDAKKysrKyBzcmMvY29uZmlnLmgJMjAwNC0wOC0xMiAwMDo0MDowMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC00NCw3ICs0NCw3IEBACisgI2VuZGlmCisgI2RlZmluZSBERUZMRUFTRSAzNjAwIC8qIGRlZmF1bHQgbGVhc2UgdGltZSwgMSBob3VyICovCisgI2RlZmluZSBDSFVTRVIgIm5vYm9keSIKKy0jZGVmaW5lIENIR1JQICJkaXAiCisrI2RlZmluZSBDSEdSUCAiZGlhbG91dCIKKyAjZGVmaW5lIERIQ1BfU0VSVkVSX1BPUlQgNjcKKyAjZGVmaW5lIERIQ1BfQ0xJRU5UX1BPUlQgNjgKKyAKKwpkaWZmIC0tZ2l0IGEvY29udHJpYi9TdXNlL2Ruc21hc3Etc3VzZS5zcGVjIGIvY29udHJpYi9TdXNlL2Ruc21hc3Etc3VzZS5zcGVjCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZmOGJhOGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL1N1c2UvZG5zbWFzcS1zdXNlLnNwZWMKQEAgLTAsMCArMSwxMTEgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgR2VuZXJhbAorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitOYW1lOiBkbnNtYXNxCitWZXJzaW9uOiAyLjMzCitSZWxlYXNlOiAxCitDb3B5cmlnaHQ6IEdQTAorR3JvdXA6IFByb2R1Y3Rpdml0eS9OZXR3b3JraW5nL0ROUy9TZXJ2ZXJzCitWZW5kb3I6IFNpbW9uIEtlbGxleQorUGFja2FnZXI6IFNpbW9uIEtlbGxleQorVVJMOiBodHRwOi8vd3d3LnRoZWtlbGxleXMub3JnLnVrL2Ruc21hc3EKK1Byb3ZpZGVzOiBkbnNfZGFlbW9uCitDb25mbGljdHM6IGJpbmQgYmluZDggYmluZDkKK1ByZVJlcTogJWZpbGx1cF9wcmVyZXEgJWluc3NlcnZfcHJlcmVxCitBdXRvcmVxcHJvdjogb24KK1NvdXJjZTA6ICV7bmFtZX0tJXt2ZXJzaW9ufS50YXIuYnoyCitCdWlsZFJvb3Q6IC92YXIvdG1wLyV7bmFtZX0tJXt2ZXJzaW9ufQorU3VtbWFyeTogQSBsaWdodHdlaWdodCBjYWNoaW5nIG5hbWVzZXJ2ZXIKKworJWRlc2NyaXB0aW9uCitEbnNtYXNxIGlzIGxpZ2h0d2VpZ2h0LCBlYXN5IHRvIGNvbmZpZ3VyZSBETlMgZm9yd2FyZGVyIGFuZCBESENQIHNlcnZlci4gSXQgCitpcyBkZXNpZ25lZCB0byBwcm92aWRlIEROUyBhbmQsIG9wdGlvbmFsbHksIERIQ1AsIHRvIGEgc21hbGwgbmV0d29yay4gSXQgY2FuCitzZXJ2ZSB0aGUgbmFtZXMgb2YgbG9jYWwgbWFjaGluZXMgd2hpY2ggYXJlIG5vdCBpbiB0aGUgZ2xvYmFsIEROUy4gVGhlIERIQ1AgCitzZXJ2ZXIgaW50ZWdyYXRlcyB3aXRoIHRoZSBETlMgc2VydmVyIGFuZCBhbGxvd3MgbWFjaGluZXMgd2l0aCBESENQLWFsbG9jYXRlZAorYWRkcmVzc2VzIHRvIGFwcGVhciBpbiB0aGUgRE5TIHdpdGggbmFtZXMgY29uZmlndXJlZCBlaXRoZXIgaW4gZWFjaCBob3N0IG9yIAoraW4gYSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gZmlsZS4gRG5zbWFzcSBzdXBwb3J0cyBzdGF0aWMgYW5kIGR5bmFtaWMgREhDUCAKK2xlYXNlcyBhbmQgQk9PVFAgZm9yIG5ldHdvcmsgYm9vdGluZyBvZiBkaXNrbGVzcyBtYWNoaW5lcy4KKworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgQnVpbGQKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworJXByZXAKKyVzZXR1cCAtcQorcGF0Y2ggLXAwIDxycG0vJXtuYW1lfS1TdVNFLnBhdGNoCisKKyVidWlsZAorJXs/c3VzZV91cGRhdGVfY29uZmlnOiV7c3VzZV91cGRhdGVfY29uZmlnIC1mfX0KK21ha2UgYWxsLWkxOG4gREVTVERJUj0kUlBNX0JVSUxEX1JPT1QgUFJFRklYPS91c3IKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBJbnN0YWxsCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyVpbnN0YWxsCitybSAtcmYgJFJQTV9CVUlMRF9ST09UCitta2RpciAtcCAke1JQTV9CVUlMRF9ST09UfS9ldGMvaW5pdC5kCittYWtlIGluc3RhbGwtaTE4biBERVNURElSPSRSUE1fQlVJTERfUk9PVCBQUkVGSVg9L3VzcgoraW5zdGFsbCAtbyByb290IC1nIHJvb3QgLW0gNzU1IHJwbS9yYy5kbnNtYXNxLXN1c2UgJFJQTV9CVUlMRF9ST09UL2V0Yy9pbml0LmQvZG5zbWFzcQoraW5zdGFsbCAtbyByb290IC1nIHJvb3QgLW0gNjQ0IGRuc21hc3EuY29uZi5leGFtcGxlICRSUE1fQlVJTERfUk9PVC9ldGMvZG5zbWFzcS5jb25mCitzdHJpcCAkUlBNX0JVSUxEX1JPT1QvdXNyL3NiaW4vZG5zbWFzcQorbG4gLXNmIC4uLy4uL2V0Yy9pbml0LmQvZG5zbWFzcSAkUlBNX0JVSUxEX1JPT1QvdXNyL3NiaW4vcmNkbnNtYXNxCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgQ2xlYW4gdXAKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworJWNsZWFuCitybSAtcmYgJFJQTV9CVUlMRF9ST09UCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgUG9zdC1pbnN0YWxsIHNjcmlwdGxldAorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCislcG9zdAorJXtmaWxsdXBfYW5kX2luc3NlcnYgZG5zbWFzcX0KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBQb3N0LXVuaW5zdGFsbCBzY3JpcHRsZXQKKyMKKyMgVGhlICVwb3N0dW4gc2NyaXB0IGV4ZWN1dGVzIGFmdGVyIHRoZSBwYWNrYWdlIGhhcyBiZWVuIHJlbW92ZWQuIEl0IGlzIHRoZQorIyBsYXN0IGNoYW5jZSBmb3IgYSBwYWNrYWdlIHRvIGNsZWFuIHVwIGFmdGVyIGl0c2VsZi4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworJXBvc3R1bgorJXtpbnNzZXJ2X2NsZWFudXB9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgRmlsZSBsaXN0CisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyVmaWxlcworJWRlZmF0dHIoLSxyb290LHJvb3QpCislZG9jIENIQU5HRUxPRyBDT1BZSU5HIEZBUSBkb2MuaHRtbCBzZXR1cC5odG1sIFVQR1JBRElOR190b18yLjAgcnBtL1JFQURNRS5zdXNlZmlyZXdhbGwKKyVkb2MgY29udHJpYgorJWNvbmZpZyAvZXRjL2luaXQuZC9kbnNtYXNxCislY29uZmlnIC9ldGMvZG5zbWFzcS5jb25mCisvdXNyL3NiaW4vcmNkbnNtYXNxCisvdXNyL3NiaW4vZG5zbWFzcQorL3Vzci9zaGFyZS9sb2NhbGUvKi9MQ19NRVNTQUdFUy8qCislZG9jICV7X21hbmRpcn0vbWFuOC9kbnNtYXNxLjguZ3oKKyVkb2MgJXtfbWFuZGlyfS8qL21hbjgvZG5zbWFzcS44Lmd6CisKKwpkaWZmIC0tZ2l0IGEvY29udHJpYi9TdXNlL3JjLmRuc21hc3Etc3VzZSBiL2NvbnRyaWIvU3VzZS9yYy5kbnNtYXNxLXN1c2UKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzFmNGM3MgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvU3VzZS9yYy5kbnNtYXNxLXN1c2UKQEAgLTAsMCArMSw3OSBAQAorIyEgL2Jpbi9zaAorIworIyBpbml0LmQvZG5zbWFzcQorIworIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgZG5zbWFzcQorIyBSZXF1aXJlZC1TdGFydDogJG5ldHdvcmsgJHJlbW90ZV9mcyAkc3lzbG9nCisjIFJlcXVpcmVkLVN0b3A6CisjIERlZmF1bHQtU3RhcnQ6ICAzIDUKKyMgRGVmYXVsdC1TdG9wOgorIyBEZXNjcmlwdGlvbjogICAgU3RhcnRzIGludGVybmV0IG5hbWUgc2VydmljZSBtYXNxIGNhY2hpbmcgc2VydmVyIChETlMpCisjIyMgRU5EIElOSVQgSU5GTworCitOQU1FRF9CSU49L3Vzci9zYmluL2Ruc21hc3EKK05BTUVEX1BJRD0vdmFyL3J1bi9kbnNtYXNxLnBpZAorTkFNRURfQ09ORj0vZXRjL2Ruc21hc3EuY29uZgorCitpZiBbICEgLXggJE5BTUVEX0JJTiBdIDsgdGhlbgorCWVjaG8gLW4gImRuc21hc3Egbm90IGluc3RhbGxlZCAhICIKKwlleGl0IDUKK2ZpCisKKy4gL2V0Yy9yYy5zdGF0dXMKK3JjX3Jlc2V0CisKK2Nhc2UgIiQxIiBpbgorICAgIHN0YXJ0KQorCWVjaG8gLW4gIlN0YXJ0aW5nIG5hbWUgc2VydmljZSBtYXNxIGNhY2hpbmcgc2VydmVyICIKKyAgICAgICAgY2hlY2twcm9jIC1wICROQU1FRF9QSUQgJE5BTUVEX0JJTgorICAgICAgICBpZiBbICQ/IC1lcSAwIF0gOyB0aGVuCisgICAgICAgICAgIGVjaG8gLW4gIi0gV2FybmluZzogZG5zbWFzcSBhbHJlYWR5IHJ1bm5pbmcgISAiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgWyAtZSAkTkFNRURfUElEIF0gJiYgZWNobyAtbiAiLSBXYXJuaW5nOiAkTkFNRURfUElEIGV4aXN0cyAhICIKKwlmaQorCXN0YXJ0cHJvYyAtcCAkTkFNRURfUElEICROQU1FRF9CSU4gLXUgbm9ib2R5CisJcmNfc3RhdHVzIC12CisJOzsKKyAgICBzdG9wKQorCWVjaG8gLW4gIlNodXR0aW5nIG5hbWUgc2VydmljZSBtYXNxIGNhY2hpbmcgc2VydmVyICIKKwljaGVja3Byb2MgLXAgJE5BTUVEX1BJRCAkTkFNRURfQklOCisJWyAkPyAtbmUgMCBdICYmIGVjaG8gLW4gIi0gV2FybmluZzogZG5zbWFzcSBub3QgcnVubmluZyAhICIKKwlraWxscHJvYyAtcCAkTkFNRURfUElEIC1URVJNICROQU1FRF9CSU4KKwlyY19zdGF0dXMgLXYKKwk7OworICAgIHRyeS1yZXN0YXJ0KQorCSQwIHN0b3AgICYmICAkMCBzdGFydAorCXJjX3N0YXR1cworCTs7CisgICAgcmVzdGFydCkKKwkkMCBzdG9wCisJJDAgc3RhcnQKKwlyY19zdGF0dXMKKwk7OworICAgIGZvcmNlLXJlbG9hZCkKKwkkMCByZWxvYWQKKwlyY19zdGF0dXMKKwk7OworICAgIHJlbG9hZCkKKwllY2hvIC1uICJSZWxvYWRpbmcgbmFtZSBzZXJ2aWNlIG1hc3EgY2FjaGluZyBzZXJ2ZXIgIgorCWNoZWNrcHJvYyAtcCAkTkFNRURfUElEICROQU1FRF9CSU4KKwlbICQ/IC1uZSAwIF0gJiYgZWNobyAtbiAiLSBXYXJuaW5nOiBkbnNtYXNxIG5vdCBydW5uaW5nICEgIgorCWtpbGxwcm9jIC1wICROQU1FRF9QSUQgLUhVUCAkTkFNRURfQklOCisJcmNfc3RhdHVzIC12CisJOzsKKyAgICBzdGF0dXMpCisJZWNobyAtbiAiQ2hlY2tpbmcgZm9yIG5hbWUgc2VydmljZSBtYXNxIGNhY2hpbmcgc2VydmVyICIKKwljaGVja3Byb2MgLXAgJE5BTUVEX1BJRCAkTkFNRURfQklOCisJcmNfc3RhdHVzIC12CisJOzsKKyAgICBwcm9iZSkKKwl0ZXN0ICROQU1FRF9DT05GIC1udCAkTkFNRURfUElEICYmIGVjaG8gcmVsb2FkCisJOzsKKyAgICAqKQorCWVjaG8gIlVzYWdlOiAkMCB7c3RhcnR8c3RvcHxzdGF0dXN8dHJ5LXJlc3RhcnR8cmVzdGFydHxmb3JjZS1yZWxvYWR8cmVsb2FkfHByb2JlfSIKKwlleGl0IDEKKwk7OworZXNhYworcmNfZXhpdAorCmRpZmYgLS1naXQgYS9jb250cmliL2Nvbm50cmFjay9SRUFETUUgYi9jb250cmliL2Nvbm50cmFjay9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg4MzQ0NwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvY29ubnRyYWNrL1JFQURNRQpAQCAtMCwwICsxLDU0IEBACitMaW51eCBpcHRhYmxlcyBpbmNsdWRlcyB0aGF0IGFiaWxpdHkgdG8gbWFyayBpbmRpdmlkdWFsIG5ldHdvcmsgcGFja2V0cword2l0aCBhICJmaXJld2FsbCBtYXJrIi4gIEFkZGl0aW9uYWxseSB0aGVyZSBpcyBhIGNvbXBvbmVudCBjYWxsZWQKKyJjb25udHJhY2siIHdoaWNoIHRyaWVzIHRvIHN0cmluZyBzZXF1ZW5jZXMgb2YgcmVsYXRlZCBwYWNrZXRzIHRvZ2V0aGVyCitpbnRvIGEgImNvbm5lY3Rpb24iIChpdCBldmVuIHJlbGF0ZXMgc2VxdWVuY2VzIG9mIFVEUCBhbmQgSUNNUCBwYWNrZXRzKS4KKyBUaGVyZSBpcyBhIHJlbGF0ZWQgbWFyayBmb3IgYSBjb25uZWN0aW9uIGNhbGxlZCBhICJjb25uZWN0aW9uIG1hcmsiLgorTWFya3MgY2FuIGJlIGNvcGllZCBmcmVlbHkgYmV0d2VlbiB0aGUgZmlyZXdhbGwgYW5kIGNvbm5lY3Rpb24gbWFya3MKKworVXNpbmcgdGhlc2UgdHdvIGZlYXR1cmVzIGl0IGJlY29tZSBwb3NzaWJsZSB0byB0YWcgYWxsIHJlbGF0ZWQgdHJhZmZpYworaW4gYXJiaXRyYXJ5IHdheXMsIGVnIGF1dGhlbnRpY2F0ZWQgdXNlcnMsIHRyYWZmaWMgZnJvbSBhIHBhcnRpY3VsYXIgSVAsCitwb3J0LCBldGMuIFVuZm9ydHVuYXRlbHkgYW55IGtpbmQgb2YgInByb3h5IiBicmVha3MgdGhpcyByZWxhdGlvbnNoaXAKK2JlY2F1c2UgbmV0d29yayBwYWNrZXRzIGdvIGluIG9uZSBzaWRlIG9mIHRoZSBwcm94eSBhbmQgYSBjb21wbGV0ZWx5IG5ldworY29ubmVjdGlvbiBjb21lcyBvdXQgb2YgdGhlIG90aGVyIHNpZGUuICBIb3dldmVyLCBzb21ldGltZXMsIHdlIHdhbnQgdG8KK21haW50YWluIHRoYXQgcmVsYXRpb25zaGlwIHRocm91Z2ggdGhlIHByb3h5IGFuZCBjb250aW51ZSB0aGUgY29ubmVjdGlvbgorbWFyayBvbiBwYWNrZXRzIHVwc3RyZWFtIG9mIG91ciBwcm94eQorCitEbnNtYXNxIGluY2x1ZGVzIHN1Y2ggYSBmZWF0dXJlIGVuYWJsZWQgYnkgdGhlIC0tY29ubnRyYWNrCitvcHRpb24uIFRoaXMgYWxsb3dzLCBmb3IgZXhhbXBsZSwgdXNpbmcgaXB0YWJsZXMgdG8gbWFyayB0cmFmZmljIGZyb20KK2EgcGFydGljdWxhciBJUCwgYW5kIHRoYXQgbWFyayB0byBiZSBwZXJzaXN0ZWQgdG8gcmVxdWVzdHMgbWFkZSAqYnkqCitEbnNtYXNxLiBTdWNoIGEgZmVhdHVyZSBjb3VsZCBiZSB1c2VmdWwgZm9yIGJhbmR3aWR0aCBhY2NvdW50aW5nLAorY2FwdGl2ZSBwb3J0YWxzIGFuZCB0aGUgbGlrZS4gTm90ZSBhIHNpbWlsYXIgZmVhdHVyZSBoYXMgYmVlbiAKK2ltcGxlbWVudGVkIGluIFNxdWlkIDIuMgorCisKK0FzIGFuIGV4YW1wbGUgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBpcHRhYmxlcyBydWxlczoKKworCisxKSBpcHRhYmxlcyAtdCBtYW5nbGUgLUEgUFJFUk9VVElORyAtaiBDT05OTUFSSyAtLXJlc3RvcmUtbWFyaworMikgaXB0YWJsZXMgLXQgbWFuZ2xlIC1BIFBSRVJPVVRJTkcgLW0gbWFyayAtLW1hcmsgMCAtcyAxOTIuMTY4LjExMS4xMzcKKy1qIE1BUksgLS1zZXQtbWFyayAxMzcKKzMpIGlwdGFibGVzIC10IG1hbmdsZSAtQSBQUkVST1VUSU5HIC1qIENPTk5NQVJLIC0tc2F2ZS1tYXJrCisKKzQpIGlwdGFibGVzIC10IG1hbmdsZSAtQSBPVVRQVVQgLW0gbWFyayAhIC0tbWFyayAwIC1qIENPTk5NQVJLIC0tc2F2ZS1tYXJrCisKKzEtMykgYXJlIGFsbCBhcHBsaWVkIHRvIHRoZSBQUkVST1VUSU5HIHRhYmxlIGFuZCBhZmZlY3QgYWxsIHBhY2tldHMKK2VudGVyaW5nIHRoZSBmaXJld2FsbC4KKworMSkgY29waWVzIGFueSBleGlzdGluZyBjb25uZWN0aW9uIG1hcmsgaW50byB0aGUgZmlyZXdhbGwgbWFyay4gMikgQ2hlY2tzCit0aGUgcGFja2V0IG5vdCBhbHJlYWR5IG1hcmtlZCBhbmQgaWYgbm90IGFwcGxpZXMgYW4gYXJiaXRyYXJ5IG1hcmsgYmFzZWQKK29uIElQIGFkZHJlc3MuIDMpIFNhdmVzIHRoZSBmaXJld2FsbCBtYXJrIGJhY2sgdG8gdGhlIGNvbm5lY3Rpb24gbWFyaworKHdoaWNoIHdpbGwgcGVyc2lzdCBpdCBhY3Jvc3MgcmVsYXRlZCBwYWNrZXRzKQorCis0KSBpcyBhcHBsaWVkIHRvIHRoZSBPVVRQVVQgdGFibGUsIHdoaWNoIGlzIHdoZXJlIHdlIGZpcnN0IHNlZSBwYWNrZXRzCitnZW5lcmF0ZWQgbG9jYWxseS4gRG5zbWFzcSB3aWxsIGhhdmUgYWxyZWFkeSBjb3BpZWQgdGhlIGZpcmV3YWxsIG1hcmsKK2Zyb20gdGhlIHJlcXVlc3QsIGFjcm9zcyB0byB0aGUgbmV3IHBhY2tldCwgYW5kIHNvIGFsbCB0aGF0IHJlbWFpbnMgaXMKK2ZvciBpcHRhYmxlcyB0byBjb3B5IGl0IHRvIHRoZSBjb25uZWN0aW9uIG1hcmsgc28gaXQncyBwZXJzaXN0ZWQgYWNyb3NzCitwYWNrZXRzLgorCitOb3RlOiBpcHRhYmxlcyBjYW4gYmUgcXVpdGUgY29uZnVzaW5nIHRvIHRoZSBiZWdpbm5lci4gVGhlIGZvbGxvd2luZworZGlhZ3JhbSBpcyBleHRyZW1lbHkgaGVscGZ1bCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBmbG93cworCWh0dHA6Ly9saW51eC1pcC5uZXQvbmYvbmZrLXRyYXZlcnNhbC5wbmcKK0FkZGl0aW9uYWxseSB0aGUgZm9sbG93aW5nIFVSTCBjb250YWlucyBhIHVzZWZ1bCAic3RhcnRpbmcgZ3VpZGUiIG9uCitsaW51eCBjb25uZWN0aW9uIHRyYWNraW5nL21hcmtpbmcKKwlodHRwOi8vaG9tZS5yZWdpdC5vcmcvbmV0ZmlsdGVyLWVuL25ldGZpbHRlci1jb25ubWFyay8KKwpkaWZmIC0tZ2l0IGEvY29udHJpYi9kYnVzLXRlc3QvZGJ1cy10ZXN0LnB5IGIvY29udHJpYi9kYnVzLXRlc3QvZGJ1cy10ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI1ZDg4ODEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2RidXMtdGVzdC9kYnVzLXRlc3QucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9weXRob24KK2ltcG9ydCBkYnVzCisKK2J1cyA9IGRidXMuU3lzdGVtQnVzKCkKK3AgPSBidXMuZ2V0X29iamVjdCgidWsub3JnLnRoZWtlbGxleXMuZG5zbWFzcSIsICIvdWsvb3JnL3RoZWtlbGxleXMvZG5zbWFzcSIpCitsID0gZGJ1cy5JbnRlcmZhY2UocCwgZGJ1c19pbnRlcmZhY2U9InVrLm9yZy50aGVrZWxsZXlzLmRuc21hc3EiKQorCisjIFRoZSBuZXcgbW9yZSBmbGV4aWJsZSBTZXRTZXJ2ZXJzRXggbWV0aG9kCithcnJheSA9IGRidXMuQXJyYXkoKQorYXJyYXkuYXBwZW5kKFsiMS4yLjMuNSJdKQorYXJyYXkuYXBwZW5kKFsiMS4yLjMuNCM2NjQiLCAiZm9vYmFyLmNvbSJdKQorYXJyYXkuYXBwZW5kKFsiMTAwMzoxMjM0OmFiY2Q6OjElZXRoMCIsICJlbmcubXljb3JwLmNvbSIsICJsYWIubXljb3JwLmNvbSJdKQorcHJpbnQgbC5TZXRTZXJ2ZXJzRXgoYXJyYXkpCisKKyMgTXVzdCBjcmVhdGUgYSBuZXcgb2JqZWN0IGZvciBkbnNtYXNxIGFzIHRoZSBpbnRyb3NwZWN0aW9uIGdpdmVzIHRoZSB3cm9uZworIyBzaWduYXR1cmUgZm9yIFNldFNlcnZlcnMgKGF2KSB3aGlsZSB0aGUgY29kZSBvbmx5IGV4cGVjdHMgYSBidW5jaCBvZiBhcmd1bWVudHMKKyMgaW5zdGVhZCBvZiBhbiBhcnJheSBvZiB2YXJpYW50cworcCA9IGJ1cy5nZXRfb2JqZWN0KCJ1ay5vcmcudGhla2VsbGV5cy5kbnNtYXNxIiwgIi91ay9vcmcvdGhla2VsbGV5cy9kbnNtYXNxIiwgaW50cm9zcGVjdD1GYWxzZSkKK2wgPSBkYnVzLkludGVyZmFjZShwLCBkYnVzX2ludGVyZmFjZT0idWsub3JnLnRoZWtlbGxleXMuZG5zbWFzcSIpCisKKyMgVGhlIHByZXZpb3VzIG1ldGhvZDsgYWxsIGFkZHJlc3NlcyBpbiBtYWNoaW5lIGJ5dGUgb3JkZXIKK3ByaW50IGwuU2V0U2VydmVycyhkYnVzLlVJbnQzMigxNjkwOTA2MCksICMgMS4yLjMuNQorICAgICAgICAgICAgICAgICAgIGRidXMuVUludDMyKDE2OTA5MDYxKSwgIyAxLjIuMy40CisgICAgICAgICAgICAgICAgICAgImZvb2Jhci5jb20iLAorICAgICAgICAgICAgICAgICAgIGRidXMuQnl0ZSgweDEwKSwgICAgICAgIyAxMDAzOjEyMzQ6YWJjZDo6MQorICAgICAgICAgICAgICAgICAgIGRidXMuQnl0ZSgweDAzKSwKKyAgICAgICAgICAgICAgICAgICBkYnVzLkJ5dGUoMHgxMiksCisgICAgICAgICAgICAgICAgICAgZGJ1cy5CeXRlKDB4MzQpLAorICAgICAgICAgICAgICAgICAgIGRidXMuQnl0ZSgweGFiKSwKKyAgICAgICAgICAgICAgICAgICBkYnVzLkJ5dGUoMHhjZCksCisgICAgICAgICAgICAgICAgICAgZGJ1cy5CeXRlKDB4MDApLAorICAgICAgICAgICAgICAgICAgIGRidXMuQnl0ZSgweDAwKSwKKyAgICAgICAgICAgICAgICAgICBkYnVzLkJ5dGUoMHgwMCksCisgICAgICAgICAgICAgICAgICAgZGJ1cy5CeXRlKDB4MDApLAorICAgICAgICAgICAgICAgICAgIGRidXMuQnl0ZSgweDAwKSwKKyAgICAgICAgICAgICAgICAgICBkYnVzLkJ5dGUoMHgwMCksCisgICAgICAgICAgICAgICAgICAgZGJ1cy5CeXRlKDB4MDApLAorICAgICAgICAgICAgICAgICAgIGRidXMuQnl0ZSgweDAwKSwKKyAgICAgICAgICAgICAgICAgICBkYnVzLkJ5dGUoMHgwMCksCisgICAgICAgICAgICAgICAgICAgZGJ1cy5CeXRlKDB4MDEpLAorICAgICAgICAgICAgICAgICAgICJlbmcubXljb3JwLmNvbSIsCisgICAgICAgICAgICAgICAgICAgImxhYi5teWNvcnAuY29tIikKKwpkaWZmIC0tZ2l0IGEvY29udHJpYi9kbnMtbG9jL1JFQURNRSBiL2NvbnRyaWIvZG5zLWxvYy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmY0M2E4ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZG5zLWxvYy9SRUFETUUKQEAgLTAsMCArMSwxMiBAQAorSGkgU2ltb24KKworSGVyZSBpcyBhIHBhdGNoIGFnYWluc3QgZG5zbWFzcSAyLjM5IHdoaWNoIHByb3ZpZGVzIHN1cHBvcnQgZm9yIExPQyAgCitlbnRyaWVzIGluIG9yZGVyIHRvIGFzc2lnbiBsb2NhdGlvbiBpbmZvcm1hdGlvbiB0byBkbnMgcmVjb3JkcyAgCisocmZjMTg3NikuIEkgdGVzdGVkIGl0IG9uIE9TWCBhbmQgb24gT3BlbldSVC4KKworQ2hlZXJzCitMb3JlbnoKKworTW9yZSBpbmZvOgoraHR0cDovL3d3dy5ja2Roci5jb20vZG5zLWxvYy8KK2h0dHA6Ly93d3cuZmFxcy5vcmcvcmZjcy9yZmMxODc2Lmh0bWwKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZG5zLWxvYy9kbnNtYXNxMi1sb2MtcmZjMTg3Ni5wYXRjaCBiL2NvbnRyaWIvZG5zLWxvYy9kbnNtYXNxMi1sb2MtcmZjMTg3Ni5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kOTUwMzIxCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9kbnMtbG9jL2Ruc21hc3EyLWxvYy1yZmMxODc2LnBhdGNoCkBAIC0wLDAgKzEsNTIyIEBACitkaWZmIC1OdXIgZG5zbWFzcS0yLjM5LW9yaWcvYmxkL01ha2VmaWxlIGRuc21hc3EtMi4zOS9ibGQvTWFrZWZpbGUKKy0tLSBkbnNtYXNxLTIuMzktb3JpZy9ibGQvTWFrZWZpbGUJMjAwNy0wMi0xNyAxNDozNzowNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBkbnNtYXNxLTIuMzkvYmxkL01ha2VmaWxlCTIwMDctMDUtMjAgMTg6MjM6NDQuMDAwMDAwMDAwICswMjAwCitAQCAtMiw3ICsyLDcgQEAKKyBQS0dfQ09ORklHID89IHBrZy1jb25maWcKKyAKKyAKKy1PQkpTID0gY2FjaGUubyByZmMxMDM1Lm8gdXRpbC5vIG9wdGlvbi5vIGZvcndhcmQubyBpc2MubyBuZXR3b3JrLm8gXAorK09CSlMgPSBjYWNoZS5vIHJmYzEwMzUubyByZmMxODc2Lm8gdXRpbC5vIG9wdGlvbi5vIGZvcndhcmQubyBpc2MubyBuZXR3b3JrLm8gXAorICAgICAgICBkbnNtYXNxLm8gZGhjcC5vIGxlYXNlLm8gcmZjMjEzMS5vIG5ldGxpbmsubyBkYnVzLm8gYnBmLm8gXAorICAgICAgICBoZWxwZXIubyB0ZnRwLm8gbG9nLm8KKyAKK2RpZmYgLU51ciBkbnNtYXNxLTIuMzktb3JpZy9zcmMvZG5zbWFzcS5oIGRuc21hc3EtMi4zOS9zcmMvZG5zbWFzcS5oCistLS0gZG5zbWFzcS0yLjM5LW9yaWcvc3JjL2Ruc21hc3EuaAkyMDA3LTA0LTIwIDEyOjUzOjM4LjAwMDAwMDAwMCArMDIwMAorKysrIGRuc21hc3EtMi4zOS9zcmMvZG5zbWFzcS5oCTIwMDctMDUtMjAgMTk6NTA6MzcuMDAwMDAwMDAwICswMjAwCitAQCAtMTYyLDYgKzE2MiwxMiBAQAorICAgc3RydWN0IGludGVyZmFjZV9uYW1lICpuZXh0OworIH07CisgCisrc3RydWN0IGxvY19yZWNvcmQgeworKyAgY2hhciAqbmFtZSwgbG9jWzE2XTsKKysgIHVuc2lnbmVkIHNob3J0IGNsYXNzOworKyAgc3RydWN0IGxvY19yZWNvcmQgKm5leHQ7CisrfTsKKysKKyB1bmlvbiBiaWduYW1lIHsKKyAgIGNoYXIgbmFtZVtNQVhETkFNRV07CisgICB1bmlvbiBiaWduYW1lICpuZXh0OyAvKiBmcmVlbGlzdCAqLworQEAgLTQ3Niw2ICs0ODIsNyBAQAorICAgc3RydWN0IG14X3Nydl9yZWNvcmQgKm14bmFtZXM7CisgICBzdHJ1Y3QgdHh0X3JlY29yZCAqdHh0OworICAgc3RydWN0IHB0cl9yZWNvcmQgKnB0cjsKKysJc3RydWN0IGxvY19yZWNvcmQgKmxvYzsKKyAgIHN0cnVjdCBpbnRlcmZhY2VfbmFtZSAqaW50X25hbWVzOworICAgY2hhciAqbXh0YXJnZXQ7CisgICBjaGFyICpsZWFzZV9maWxlOyAKK0BAIC03MjUsMyArNzMyLDYgQEAKKyB2b2lkIHRmdHBfcmVxdWVzdChzdHJ1Y3QgbGlzdGVuZXIgKmxpc3Rlbiwgc3RydWN0IGRhZW1vbiAqZGFlbW9uLCB0aW1lX3Qgbm93KTsKKyB2b2lkIGNoZWNrX3RmdHBfbGlzdGVuZXJzKHN0cnVjdCBkYWVtb24gKmRhZW1vbiwgZmRfc2V0ICpyc2V0LCB0aW1lX3Qgbm93KTsKKyAjZW5kaWYKKysKKysvKiByZmMxODc2ICovCisrdV9pbnQzMl90IGxvY19hdG9uKGNvbnN0IGNoYXIgKmFzY2lpLCB1X2NoYXIgKmJpbmFyeSk7CitkaWZmIC1OdXIgZG5zbWFzcS0yLjM5LW9yaWcvc3JjL29wdGlvbi5jIGRuc21hc3EtMi4zOS9zcmMvb3B0aW9uLmMKKy0tLSBkbnNtYXNxLTIuMzktb3JpZy9zcmMvb3B0aW9uLmMJMjAwNy0wNC0xOSAyMzozNDo0OS4wMDAwMDAwMDAgKzAyMDAKKysrKyBkbnNtYXNxLTIuMzkvc3JjL29wdGlvbi5jCTIwMDctMDUtMjAgMjA6MTU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtNDMsNiArNDMsNyBAQAorICNkZWZpbmUgTE9QVF9SRU1PVEUgICAgMjY5CisgI2RlZmluZSBMT1BUX1NVQlNDUiAgICAyNzAKKyAjZGVmaW5lIExPUFRfSU5UTkFNRSAgIDI3MQorKyNkZWZpbmUgTE9QVF9MT0MgICAgICAgMjcyCisgCisgI2lmZGVmIEhBVkVfR0VUT1BUX0xPTkcKKyBzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBvcHRzW10gPSAgCitAQCAtMTIyLDYgKzEyMyw3IEBACisgICAgIHsidGZ0cC1yb290IiwgMSwgMCwgTE9QVF9QUkVGSVggfSwKKyAgICAgeyJ0ZnRwLW1heCIsIDEsIDAsIExPUFRfVEZUUF9NQVggfSwKKyAgICAgeyJwdHItcmVjb3JkIiwgMSwgMCwgTE9QVF9QVFIgfSwKKysgICAgeyJsb2MtcmVjb3JkIiwgMSwgMCwgTE9QVF9MT0MgfSwKKyAjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0RyYWdvbkZseV9fKQorICAgICB7ImJyaWRnZS1pbnRlcmZhY2UiLCAxLCAwICwgTE9QVF9CUklER0UgfSwKKyAjZW5kaWYKK0BAIC0yMzUsNiArMjM3LDcgQEAKKyAgIHsgIi15LCAtLWxvY2FsaXNlLXF1ZXJpZXMiLCBnZXR0ZXh0X25vb3AoIkFuc3dlciBETlMgcXVlcmllcyBiYXNlZCBvbiB0aGUgaW50ZXJmYWNlIGEgcXVlcnkgd2FzIHNlbnQgdG8uIiksIE5VTEwgfSwKKyAgIHsgIi1ZICAtLXR4dC1yZWNvcmQ9bmFtZSx0eHQuLi4uIiwgZ2V0dGV4dF9ub29wKCJTcGVjaWZ5IFRYVCBETlMgcmVjb3JkLiIpLCBOVUxMIH0sCisgICB7ICIgICAgLS1wdHItcmVjb3JkPW5hbWUsdGFyZ2V0IiwgZ2V0dGV4dF9ub29wKCJTcGVjaWZ5IFBUUiBETlMgcmVjb3JkLiIpLCBOVUxMIH0sCisrICB7ICIgICAgLS1sb2MtcmVjb3JkPW5hbWUsbGF0IGxvbiBhbHQiLCBnZXR0ZXh0X25vb3AoIlNwZWNpZnkgTE9DIEROUyByZWNvcmQuIiksIE5VTEwgfSwKKyAgIHsgIiAgICAtLWludGVyZmFjZS1uYW1lPW5hbWUsaW50ZXJmYWNlIiwgZ2V0dGV4dF9ub29wKCJHaXZlIEROUyBuYW1lIHRvIElQdjQgYWRkcmVzcyBvZiBpbnRlcmZhY2UuIiksIE5VTEwgfSwKKyAgIHsgIi16LCAtLWJpbmQtaW50ZXJmYWNlcyIsIGdldHRleHRfbm9vcCgiQmluZCBvbmx5IHRvIGludGVyZmFjZXMgaW4gdXNlLiIpLCBOVUxMIH0sCisgICB7ICItWiwgLS1yZWFkLWV0aGVycyIsIGdldHRleHRfbm9vcCgiUmVhZCBESENQIHN0YXRpYyBob3N0IGluZm9ybWF0aW9uIGZyb20gJXMuIiksIEVUSEVSU0ZJTEUgfSwKK0BAIC0xODM1LDYgKzE4MzgsMzcgQEAKKyAJbmV3LT5pbnRyID0gc2FmZV9zdHJpbmdfYWxsb2MoY29tbWEpOworIAlicmVhazsKKyAgICAgICB9CisrICAgICAgCisrICAgIGNhc2UgTE9QVF9MT0M6CisrICAgICAgeworKwlzdHJ1Y3QgbG9jX3JlY29yZCAqbmV3OworKwl1bnNpZ25lZCBjaGFyICpwLCAqcTsKKysJCisrCWNvbW1hID0gc3BsaXQoYXJnKTsKKysJCisrCWlmICghY2Fub25pY2FsaXNlX29wdChhcmcpKQorKwkgIHsKKysJICAgIG9wdGlvbiA9ICc/JzsKKysJICAgIHByb2JsZW0gPSBfKCJiYWQgTE9DIHJlY29yZCIpOworKwkgICAgYnJlYWs7CisrCSAgfQorKwkKKysJbmV3ID0gc2FmZV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBsb2NfcmVjb3JkKSk7CisrCW5ldy0+bmV4dCA9IGRhZW1vbi0+bG9jOworKwlkYWVtb24tPmxvYyA9IG5ldzsKKysJbmV3LT5jbGFzcyA9IENfSU47CisrCWlmICghY29tbWEgfHwgbG9jX2F0b24oY29tbWEsbmV3LT5sb2MpIT0xNikKKysJICB7CisrCSAgICBvcHRpb24gPSAnPyc7CisrCSAgICBwcm9ibGVtID0gXygiYmFkIExPQyByZWNvcmQiKTsKKysJICAgIGJyZWFrOworKwkgIH0KKysKKysJaWYgKGNvbW1hKQorKwkgICpjb21tYSA9IDA7CisrCW5ldy0+bmFtZSA9IHNhZmVfc3RyaW5nX2FsbG9jKGFyZyk7CisrCWJyZWFrOworKyAgICAgIH0KKyAKKyAgICAgY2FzZSBMT1BUX1BUUjogIC8qIC0tcHRyLXJlY29yZCAqLworICAgICAgIHsKK2RpZmYgLU51ciBkbnNtYXNxLTIuMzktb3JpZy9zcmMvcmZjMTAzNS5jIGRuc21hc3EtMi4zOS9zcmMvcmZjMTAzNS5jCistLS0gZG5zbWFzcS0yLjM5LW9yaWcvc3JjL3JmYzEwMzUuYwkyMDA3LTA0LTIwIDEyOjU0OjI2LjAwMDAwMDAwMCArMDIwMAorKysrIGRuc21hc3EtMi4zOS9zcmMvcmZjMTAzNS5jCTIwMDctMDUtMjAgMTg6MjI6NDYuMDAwMDAwMDAwICswMjAwCitAQCAtMTExMiw2ICsxMTEyLDI3IEBACisgCSAgICB9CisgCX0KKyAKKysgICAgICBpZiAocXR5cGUgPT0gVF9MT0MgfHwgcXR5cGUgPT0gVF9BTlkpCisrCXsKKysJICBzdHJ1Y3QgbG9jX3JlY29yZCAqdDsKKysJICBmb3IodCA9IGRhZW1vbi0+bG9jOyB0IDsgdCA9IHQtPm5leHQpCisrCSAgICB7CisrCSAgICAgIGlmICh0LT5jbGFzcyA9PSBxY2xhc3MgJiYgaG9zdG5hbWVfaXNlcXVhbChuYW1lLCB0LT5uYW1lKSkKKysJCXsKKysJCSAgYW5zID0gMTsKKysJCSAgaWYgKCFkcnlydW4pCisrCQkgICAgeworKwkJICAgICAgbG9nX3F1ZXJ5KEZfQ05BTUUgfCBGX0ZPUldBUkQgfCBGX0NPTkZJRyB8IEZfTlhET01BSU4sIG5hbWUsIE5VTEwsIDAsIE5VTEwsIDApOworKwkJICAgICAgaWYgKGFkZF9yZXNvdXJjZV9yZWNvcmQoaGVhZGVyLCBsaW1pdCwgJnRydW5jLCBuYW1lb2Zmc2V0LCAmYW5zcCwgCisrCQkJCQkgICAgICBkYWVtb24tPmxvY2FsX3R0bCwgTlVMTCwKKysJCQkJCSAgICAgIFRfTE9DLCB0LT5jbGFzcywgInQiLCAxNiwgdC0+bG9jKSkKKysJCQlhbnNjb3VudCsrOworKworKwkJICAgIH0KKysJCX0KKysJICAgIH0KKysJfQorKworICAgICAgIGlmIChxY2xhc3MgPT0gQ19JTikKKyAJeworIAkgIGlmIChxdHlwZSA9PSBUX1BUUiB8fCBxdHlwZSA9PSBUX0FOWSkKK2RpZmYgLU51ciBkbnNtYXNxLTIuMzktb3JpZy9zcmMvcmZjMTg3Ni5jIGRuc21hc3EtMi4zOS9zcmMvcmZjMTg3Ni5jCistLS0gZG5zbWFzcS0yLjM5LW9yaWcvc3JjL3JmYzE4NzYuYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGRuc21hc3EtMi4zOS9zcmMvcmZjMTg3Ni5jCTIwMDctMDUtMjAgMTk6NTA6MTAuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDM3OSBAQAorKy8qCisrICogcm91dGluZXMgdG8gY29udmVydCBiZXR3ZWVuIG9uLXRoZS13aXJlIFJSIGZvcm1hdCBhbmQgem9uZSBmaWxlCisrICogZm9ybWF0LiAgRG9lcyBub3QgY29udGFpbiBjb252ZXJzaW9uIHRvL2Zyb20gZGVjaW1hbCBkZWdyZWVzOworKyAqIGRpdmlkZSBvciBtdWx0aXBseSBieSA2MCo2MCoxMDAwIGZvciB0aGF0LgorKyAqLworKworKyNpbmNsdWRlICJkbnNtYXNxLmgiCisrCisrc3RhdGljIHVuc2lnbmVkIGludCBwb3dlcm9mdGVuWzEwXSA9IHsxLCAxMCwgMTAwLCAxMDAwLCAxMDAwMCwgMTAwMDAwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAsMTAwMDAwMDAsMTAwMDAwMDAwLDEwMDAwMDAwMDB9OworKworKy8qIHRha2VzIGFuIFhlWSBwcmVjaXNpb24vc2l6ZSB2YWx1ZSwgcmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbi4qLworK3N0YXRpYyBjb25zdCBjaGFyICoKKytwcmVjc2l6ZV9udG9hKHVfaW50OF90IHByZWMpCisreworKyAgICAgICAgc3RhdGljIGNoYXIgcmV0YnVmW3NpemVvZigiOTAwMDAwMDAuMDAiKV07CisrICAgICAgICB1bnNpZ25lZCBsb25nIHZhbDsKKysgICAgICAgIGludCBtYW50aXNzYSwgZXhwb25lbnQ7CisrCisrICAgICAgICBtYW50aXNzYSA9IChpbnQpKChwcmVjID4+IDQpICYgMHgwZikgJSAxMDsKKysgICAgICAgIGV4cG9uZW50ID0gKGludCkoKHByZWMgPj4gMCkgJiAweDBmKSAlIDEwOworKworKyAgICAgICAgdmFsID0gbWFudGlzc2EgKiBwb3dlcm9mdGVuW2V4cG9uZW50XTsKKysKKysgICAgICAgICh2b2lkKSBzcHJpbnRmKHJldGJ1ZiwiJWQuJS4yZCIsIHZhbC8xMDAsIHZhbCUxMDApOworKyAgICAgICAgcmV0dXJuIChyZXRidWYpOworK30KKysKKysvKiBjb252ZXJ0cyBhc2NpaSBzaXplL3ByZWNpc2lvbiBYICogMTAqKlkoY20pIHRvIDB4WFkuIG1vdmVzIHBvaW50ZXIuKi8KKytzdGF0aWMgdV9pbnQ4X3QKKytwcmVjc2l6ZV9hdG9uKGNoYXIgKipzdHJwdHIpCisreworKyAgICAgICAgdW5zaWduZWQgaW50IG12YWwgPSAwLCBjbXZhbCA9IDA7CisrICAgICAgICB1X2ludDhfdCByZXR2YWwgPSAwOworKyAgICAgICAgcmVnaXN0ZXIgY2hhciAqY3A7CisrICAgICAgICByZWdpc3RlciBpbnQgZXhwb25lbnQ7CisrICAgICAgICByZWdpc3RlciBpbnQgbWFudGlzc2E7CisrCisrICAgICAgICBjcCA9ICpzdHJwdHI7CisrCisrICAgICAgICB3aGlsZSAoaXNkaWdpdCgqY3ApKQorKyAgICAgICAgICAgICAgICBtdmFsID0gbXZhbCAqIDEwICsgKCpjcCsrIC0gJzAnKTsKKysKKysgICAgICAgIGlmICgqY3AgPT0gJy4nKSB7ICAgICAgICAgICAgICAgLyogY2VudGltZXRlcnMgKi8KKysgICAgICAgICAgICAgICAgY3ArKzsKKysgICAgICAgICAgICAgICAgaWYgKGlzZGlnaXQoKmNwKSkgeworKyAgICAgICAgICAgICAgICAgICAgICAgIGNtdmFsID0gKCpjcCsrIC0gJzAnKSAqIDEwOworKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc2RpZ2l0KCpjcCkpIHsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtdmFsICs9ICgqY3ArKyAtICcwJyk7CisrICAgICAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBjbXZhbCA9IChtdmFsICogMTAwKSArIGNtdmFsOworKworKyAgICAgICAgZm9yIChleHBvbmVudCA9IDA7IGV4cG9uZW50IDwgOTsgZXhwb25lbnQrKykKKysgICAgICAgICAgICAgICAgaWYgKGNtdmFsIDwgcG93ZXJvZnRlbltleHBvbmVudCsxXSkKKysgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIG1hbnRpc3NhID0gY212YWwgLyBwb3dlcm9mdGVuW2V4cG9uZW50XTsKKysgICAgICAgIGlmIChtYW50aXNzYSA+IDkpCisrICAgICAgICAgICAgICAgIG1hbnRpc3NhID0gOTsKKysKKysgICAgICAgIHJldHZhbCA9IChtYW50aXNzYSA8PCA0KSB8IGV4cG9uZW50OworKworKyAgICAgICAgKnN0cnB0ciA9IGNwOworKworKyAgICAgICAgcmV0dXJuIChyZXR2YWwpOworK30KKysKKysvKiBjb252ZXJ0cyBhc2NpaSBsYXQvbG9uIHRvIHVuc2lnbmVkIGVuY29kZWQgMzItYml0IG51bWJlci4KKysgKiAgbW92ZXMgcG9pbnRlci4gKi8KKytzdGF0aWMgdV9pbnQzMl90CisrbGF0bG9uMnVsKGNoYXIgKipsYXRsb25zdHJwdHIsaW50ICp3aGljaCkKKyt7CisrICAgICAgICByZWdpc3RlciBjaGFyICpjcDsKKysgICAgICAgIHVfaW50MzJfdCByZXR2YWw7CisrICAgICAgICBpbnQgZGVnID0gMCwgbWluID0gMCwgc2VjcyA9IDAsIHNlY3NmcmFjID0gMDsKKysKKysgICAgICAgIGNwID0gKmxhdGxvbnN0cnB0cjsKKysKKysgICAgICAgIHdoaWxlIChpc2RpZ2l0KCpjcCkpCisrICAgICAgICAgICAgICAgIGRlZyA9IGRlZyAqIDEwICsgKCpjcCsrIC0gJzAnKTsKKysKKysgICAgICAgIHdoaWxlIChpc3NwYWNlKCpjcCkpCisrICAgICAgICAgICAgICAgIGNwKys7CisrCisrICAgICAgICBpZiAoIShpc2RpZ2l0KCpjcCkpKQorKyAgICAgICAgICAgICAgICBnb3RvIGZuZGhlbWk7CisrCisrICAgICAgICB3aGlsZSAoaXNkaWdpdCgqY3ApKQorKyAgICAgICAgICAgICAgICBtaW4gPSBtaW4gKiAxMCArICgqY3ArKyAtICcwJyk7CisrICAgICAgICB3aGlsZSAoaXNzcGFjZSgqY3ApKQorKyAgICAgICAgICAgICAgICBjcCsrOworKworKyAgICAgICAgaWYgKCEoaXNkaWdpdCgqY3ApKSkKKysgICAgICAgICAgICAgICAgZ290byBmbmRoZW1pOworKworKyAgICAgICAgd2hpbGUgKGlzZGlnaXQoKmNwKSkKKysgICAgICAgICAgICAgICAgc2VjcyA9IHNlY3MgKiAxMCArICgqY3ArKyAtICcwJyk7CisrCisrICAgICAgICBpZiAoKmNwID09ICcuJykgeyAgICAgICAgICAgICAgIC8qIGRlY2ltYWwgc2Vjb25kcyAqLworKyAgICAgICAgICAgICAgICBjcCsrOworKyAgICAgICAgICAgICAgICBpZiAoaXNkaWdpdCgqY3ApKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgc2Vjc2ZyYWMgPSAoKmNwKysgLSAnMCcpICogMTAwOworKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc2RpZ2l0KCpjcCkpIHsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3NmcmFjICs9ICgqY3ArKyAtICcwJykgKiAxMDsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc2RpZ2l0KCpjcCkpIHsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjc2ZyYWMgKz0gKCpjcCsrIC0gJzAnKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysKKysgICAgICAgIHdoaWxlICghaXNzcGFjZSgqY3ApKSAgIC8qIGlmIGFueSB0cmFpbGluZyBnYXJiYWdlICovCisrICAgICAgICAgICAgICAgIGNwKys7CisrCisrICAgICAgICB3aGlsZSAoaXNzcGFjZSgqY3ApKQorKyAgICAgICAgICAgICAgICBjcCsrOworKworKyBmbmRoZW1pOgorKyAgICAgICAgc3dpdGNoICgqY3ApIHsKKysgICAgICAgIGNhc2UgJ04nOiBjYXNlICduJzoKKysgICAgICAgIGNhc2UgJ0UnOiBjYXNlICdlJzoKKysgICAgICAgICAgICAgICAgcmV0dmFsID0gKCh1bnNpZ25lZCkxPDwzMSkKKysgICAgICAgICAgICAgICAgICAgICAgICArICgoKCgoZGVnICogNjApICsgbWluKSAqIDYwKSArIHNlY3MpICogMTAwMCkKKysgICAgICAgICAgICAgICAgICAgICAgICArIHNlY3NmcmFjOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIGNhc2UgJ1MnOiBjYXNlICdzJzoKKysgICAgICAgIGNhc2UgJ1cnOiBjYXNlICd3JzoKKysgICAgICAgICAgICAgICAgcmV0dmFsID0gKCh1bnNpZ25lZCkxPDwzMSkKKysgICAgICAgICAgICAgICAgICAgICAgICAtICgoKCgoZGVnICogNjApICsgbWluKSAqIDYwKSArIHNlY3MpICogMTAwMCkKKysgICAgICAgICAgICAgICAgICAgICAgICAtIHNlY3NmcmFjOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgIHJldHZhbCA9IDA7ICAgICAvKiBpbnZhbGlkIHZhbHVlIC0tIGluZGljYXRlcyBlcnJvciAqLworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysKKysgICAgICAgIHN3aXRjaCAoKmNwKSB7CisrICAgICAgICBjYXNlICdOJzogY2FzZSAnbic6CisrICAgICAgICBjYXNlICdTJzogY2FzZSAncyc6CisrICAgICAgICAgICAgICAgICp3aGljaCA9IDE7ICAgICAvKiBsYXRpdHVkZSAqLworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIGNhc2UgJ0UnOiBjYXNlICdlJzoKKysgICAgICAgIGNhc2UgJ1cnOiBjYXNlICd3JzoKKysgICAgICAgICAgICAgICAgKndoaWNoID0gMjsgICAgIC8qIGxvbmdpdHVkZSAqLworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgICp3aGljaCA9IDA7ICAgICAvKiBlcnJvciAqLworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysKKysgICAgICAgIGNwKys7ICAgICAgICAgICAgICAgICAgIC8qIHNraXAgdGhlIGhlbWlzcGhlcmUgKi8KKysKKysgICAgICAgIHdoaWxlICghaXNzcGFjZSgqY3ApKSAgIC8qIGlmIGFueSB0cmFpbGluZyBnYXJiYWdlICovCisrICAgICAgICAgICAgICAgIGNwKys7CisrCisrICAgICAgICB3aGlsZSAoaXNzcGFjZSgqY3ApKSAgICAvKiBtb3ZlIHRvIG5leHQgZmllbGQgKi8KKysgICAgICAgICAgICAgICAgY3ArKzsKKysKKysgICAgICAgICpsYXRsb25zdHJwdHIgPSBjcDsKKysKKysgICAgICAgIHJldHVybiAocmV0dmFsKTsKKyt9CisrCisrLyogY29udmVydHMgYSB6b25lIGZpbGUgcmVwcmVzZW50YXRpb24gaW4gYSBzdHJpbmcgdG8gYW4gUkRBVEEKKysgKiBvbi10aGUtd2lyZSByZXByZXNlbnRhdGlvbi4gKi8KKyt1X2ludDMyX3QKKytsb2NfYXRvbihjb25zdCBjaGFyICphc2NpaSwgdV9jaGFyICpiaW5hcnkpCisreworKyAgICAgICAgY29uc3QgY2hhciAqY3AsICptYXhjcDsKKysgICAgICAgIHVfY2hhciAqYmNwOworKworKyAgICAgICAgdV9pbnQzMl90IGxhdGl0ID0gMCwgbG9uZ2l0ID0gMCwgYWx0ID0gMDsKKysgICAgICAgIHVfaW50MzJfdCBsbHRlbXAxID0gMCwgbGx0ZW1wMiA9IDA7CisrICAgICAgICBpbnQgYWx0bWV0ZXJzID0gMCwgYWx0ZnJhYyA9IDAsIGFsdHNpZ24gPSAxOworKyAgICAgICAgdV9pbnQ4X3QgaHAgPSAweDE2OyAgICAvKiBkZWZhdWx0ID0gMWU2IGNtID0gMTAwMDAuMDBtID0gMTBrbSAqLworKyAgICAgICAgdV9pbnQ4X3QgdnAgPSAweDEzOyAgICAvKiBkZWZhdWx0ID0gMWUzIGNtID0gMTAuMDBtICovCisrICAgICAgICB1X2ludDhfdCBzaXogPSAweDEyOyAgIC8qIGRlZmF1bHQgPSAxZTIgY20gPSAxLjAwbSAqLworKyAgICAgICAgaW50IHdoaWNoMSA9IDAsIHdoaWNoMiA9IDA7CisrCisrICAgICAgICBjcCA9IGFzY2lpOworKyAgICAgICAgbWF4Y3AgPSBjcCArIHN0cmxlbihhc2NpaSk7CisrCisrICAgICAgICBsbHRlbXAxID0gbGF0bG9uMnVsKCZjcCwgJndoaWNoMSk7CisrICAgICAgICBsbHRlbXAyID0gbGF0bG9uMnVsKCZjcCwgJndoaWNoMik7CisrCisrICAgICAgICBzd2l0Y2ggKHdoaWNoMSArIHdoaWNoMikgeworKyAgICAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgLyogMSArIDIsIHRoZSBvbmx5IHZhbGlkIGNvbWJpbmF0aW9uICovCisrICAgICAgICAgICAgICAgIGlmICgod2hpY2gxID09IDEpICYmICh3aGljaDIgPT0gMikpIHsgLyogbm9ybWFsIGNhc2UgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICBsYXRpdCA9IGxsdGVtcDE7CisrICAgICAgICAgICAgICAgICAgICAgICAgbG9uZ2l0ID0gbGx0ZW1wMjsKKysgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgod2hpY2gxID09IDIpICYmICh3aGljaDIgPT0gMSkpIHsvKnJldmVyc2VkKi8KKysgICAgICAgICAgICAgICAgICAgICAgICBsb25naXQgPSBsbHRlbXAxOworKyAgICAgICAgICAgICAgICAgICAgICAgIGxhdGl0ID0gbGx0ZW1wMjsKKysgICAgICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgIC8qIHNvbWUga2luZCBvZiBicm9rZW5uZXNzICovCisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAvKiB3ZSBkaWRuJ3QgZ2V0IG9uZSBvZiBlYWNoICovCisrICAgICAgICAgICAgICAgIHJldHVybiAwOworKyAgICAgICAgfQorKworKyAgICAgICAgLyogYWx0aXR1ZGUgKi8KKysgICAgICAgIGlmICgqY3AgPT0gJy0nKSB7CisrICAgICAgICAgICAgICAgIGFsdHNpZ24gPSAtMTsKKysgICAgICAgICAgICAgICAgY3ArKzsKKysgICAgICAgIH0KKysKKysgICAgICAgIGlmICgqY3AgPT0gJysnKQorKyAgICAgICAgICAgICAgICBjcCsrOworKworKyAgICAgICAgd2hpbGUgKGlzZGlnaXQoKmNwKSkKKysgICAgICAgICAgICAgICAgYWx0bWV0ZXJzID0gYWx0bWV0ZXJzICogMTAgKyAoKmNwKysgLSAnMCcpOworKworKyAgICAgICAgaWYgKCpjcCA9PSAnLicpIHsgICAgICAgICAgICAgICAvKiBkZWNpbWFsIG1ldGVycyAqLworKyAgICAgICAgICAgICAgICBjcCsrOworKyAgICAgICAgICAgICAgICBpZiAoaXNkaWdpdCgqY3ApKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgYWx0ZnJhYyA9ICgqY3ArKyAtICcwJykgKiAxMDsKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNkaWdpdCgqY3ApKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHRmcmFjICs9ICgqY3ArKyAtICcwJyk7CisrICAgICAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICB9CisrICAgICAgICB9CisrCisrICAgICAgICBhbHQgPSAoMTAwMDAwMDAgKyAoYWx0c2lnbiAqIChhbHRtZXRlcnMgKiAxMDAgKyBhbHRmcmFjKSkpOworKworKyAgICAgICAgd2hpbGUgKCFpc3NwYWNlKCpjcCkgJiYgKGNwIDwgbWF4Y3ApKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpZiB0cmFpbGluZyBnYXJiYWdlIG9yIG0gKi8KKysgICAgICAgICAgICAgICAgY3ArKzsKKysKKysgICAgICAgIHdoaWxlIChpc3NwYWNlKCpjcCkgJiYgKGNwIDwgbWF4Y3ApKQorKyAgICAgICAgICAgICAgICBjcCsrOworKyAgICAgICAgaWYgKGNwID49IG1heGNwKQorKyAgICAgICAgICAgICAgICBnb3RvIGRlZmF1bHRzOworKworKyAgICAgICAgc2l6ID0gcHJlY3NpemVfYXRvbigmY3ApOworKworKyAgICAgICAgd2hpbGUgKCFpc3NwYWNlKCpjcCkgJiYgKGNwIDwgbWF4Y3ApKS8qaWYgdHJhaWxpbmcgZ2FyYmFnZSBvciBtKi8KKysgICAgICAgICAgICAgICAgY3ArKzsKKysKKysgICAgICAgIHdoaWxlIChpc3NwYWNlKCpjcCkgJiYgKGNwIDwgbWF4Y3ApKQorKyAgICAgICAgICAgICAgICBjcCsrOworKworKyAgICAgICAgaWYgKGNwID49IG1heGNwKQorKyAgICAgICAgICAgICAgICBnb3RvIGRlZmF1bHRzOworKworKyAgICAgICAgaHAgPSBwcmVjc2l6ZV9hdG9uKCZjcCk7CisrCisrICAgICAgICB3aGlsZSAoIWlzc3BhY2UoKmNwKSAmJiAoY3AgPCBtYXhjcCkpLyppZiB0cmFpbGluZyBnYXJiYWdlIG9yIG0qLworKyAgICAgICAgICAgICAgICBjcCsrOworKworKyAgICAgICAgd2hpbGUgKGlzc3BhY2UoKmNwKSAmJiAoY3AgPCBtYXhjcCkpCisrICAgICAgICAgICAgICAgIGNwKys7CisrCisrICAgICAgICBpZiAoY3AgPj0gbWF4Y3ApCisrICAgICAgICAgICAgICAgIGdvdG8gZGVmYXVsdHM7CisrCisrICAgICAgICB2cCA9IHByZWNzaXplX2F0b24oJmNwKTsKKysKKysgZGVmYXVsdHM6CisrCisrICAgICAgICBiY3AgPSBiaW5hcnk7CisrICAgICAgICAqYmNwKysgPSAodV9pbnQ4X3QpIDA7ICAvKiB2ZXJzaW9uIGJ5dGUgKi8KKysgICAgICAgICpiY3ArKyA9IHNpejsKKysgICAgICAgICpiY3ArKyA9IGhwOworKyAgICAgICAgKmJjcCsrID0gdnA7CisrICAgICAgICBQVVRMT05HKGxhdGl0LGJjcCk7CisrICAgICAgICBQVVRMT05HKGxvbmdpdCxiY3ApOworKyAgICAgICAgUFVUTE9ORyhhbHQsYmNwKTsKKysKKysgICAgICAgIHJldHVybiAoMTYpOyAgICAgICAgICAgIC8qIHNpemUgb2YgUlIgaW4gb2N0ZXRzICovCisrfQorKworKy8qIHRha2VzIGFuIG9uLXRoZS13aXJlIExPQyBSUiBhbmQgcHJpbnRzIGl0IGluIHpvbmUgZmlsZQorKyAqIChodW1hbiByZWFkYWJsZSkgZm9ybWF0LiAqLworK2NoYXIgKgorK2xvY19udG9hKGNvbnN0IHVfY2hhciAqYmluYXJ5LGNoYXIgKmFzY2lpKQorK3sKKysgICAgICAgIHN0YXRpYyBjaGFyIHRtcGJ1ZlsyNTUqM107CisrCisrICAgICAgICByZWdpc3RlciBjaGFyICpjcDsKKysgICAgICAgIHJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqcmNwOworKworKyAgICAgICAgaW50IGxhdGRlZywgbGF0bWluLCBsYXRzZWMsIGxhdHNlY2ZyYWM7CisrICAgICAgICBpbnQgbG9uZ2RlZywgbG9uZ21pbiwgbG9uZ3NlYywgbG9uZ3NlY2ZyYWM7CisrICAgICAgICBjaGFyIG5vcnRoc291dGgsIGVhc3R3ZXN0OworKyAgICAgICAgaW50IGFsdG1ldGVycywgYWx0ZnJhYywgYWx0c2lnbjsKKysKKysgICAgICAgIGNvbnN0IGludCByZWZlcmVuY2VhbHQgPSAxMDAwMDAgKiAxMDA7CisrCisrICAgICAgICBpbnQzMl90IGxhdHZhbCwgbG9uZ3ZhbCwgYWx0dmFsOworKyAgICAgICAgdV9pbnQzMl90IHRlbXBsOworKyAgICAgICAgdV9pbnQ4X3Qgc2l6ZXZhbCwgaHB2YWwsIHZwdmFsLCB2ZXJzaW9udmFsOworKworKyAgICAgICAgY2hhciAqc2l6ZXN0ciwgKmhwc3RyLCAqdnBzdHI7CisrCisrICAgICAgICByY3AgPSBiaW5hcnk7CisrICAgICAgICBpZiAoYXNjaWkpCisrICAgICAgICAgICAgICAgIGNwID0gYXNjaWk7CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICAgICAgY3AgPSB0bXBidWY7CisrICAgICAgICB9CisrCisrICAgICAgICB2ZXJzaW9udmFsID0gKnJjcCsrOworKworKyAgICAgICAgaWYgKHZlcnNpb252YWwpIHsKKysgICAgICAgICAgICAgICAgc3ByaW50ZihjcCwiOyBlcnJvcjogdW5rbm93biBMT0MgUlIgdmVyc2lvbiIpOworKyAgICAgICAgICAgICAgICByZXR1cm4gKGNwKTsKKysgICAgICAgIH0KKysKKysgICAgICAgIHNpemV2YWwgPSAqcmNwKys7CisrCisrICAgICAgICBocHZhbCA9ICpyY3ArKzsKKysgICAgICAgIHZwdmFsID0gKnJjcCsrOworKworKyAgICAgICAgR0VUTE9ORyh0ZW1wbCxyY3ApOworKyAgICAgICAgbGF0dmFsID0gKHRlbXBsIC0gKCh1bnNpZ25lZCkxPDwzMSkpOworKworKyAgICAgICAgR0VUTE9ORyh0ZW1wbCxyY3ApOworKyAgICAgICAgbG9uZ3ZhbCA9ICh0ZW1wbCAtICgodW5zaWduZWQpMTw8MzEpKTsKKysKKysgICAgICAgIEdFVExPTkcodGVtcGwscmNwKTsKKysgICAgICAgIGlmICh0ZW1wbCA8IHJlZmVyZW5jZWFsdCkgeyAvKiBiZWxvdyBXR1MgODQgc3BoZXJvaWQgKi8KKysgICAgICAgICAgICAgICAgYWx0dmFsID0gcmVmZXJlbmNlYWx0IC0gdGVtcGw7CisrICAgICAgICAgICAgICAgIGFsdHNpZ24gPSAtMTsKKysgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgICAgIGFsdHZhbCA9IHRlbXBsIC0gcmVmZXJlbmNlYWx0OworKyAgICAgICAgICAgICAgICBhbHRzaWduID0gMTsKKysgICAgICAgIH0KKysKKysgICAgICAgIGlmIChsYXR2YWwgPCAwKSB7CisrICAgICAgICAgICAgICAgIG5vcnRoc291dGggPSAnUyc7CisrICAgICAgICAgICAgICAgIGxhdHZhbCA9IC1sYXR2YWw7CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgIG5vcnRoc291dGggPSAnTic7CisrCisrICAgICAgICBsYXRzZWNmcmFjID0gbGF0dmFsICUgMTAwMDsKKysgICAgICAgIGxhdHZhbCA9IGxhdHZhbCAvIDEwMDA7CisrICAgICAgICBsYXRzZWMgPSBsYXR2YWwgJSA2MDsKKysgICAgICAgIGxhdHZhbCA9IGxhdHZhbCAvIDYwOworKyAgICAgICAgbGF0bWluID0gbGF0dmFsICUgNjA7CisrICAgICAgICBsYXR2YWwgPSBsYXR2YWwgLyA2MDsKKysgICAgICAgIGxhdGRlZyA9IGxhdHZhbDsKKysKKysgICAgICAgIGlmIChsb25ndmFsIDwgMCkgeworKyAgICAgICAgICAgICAgICBlYXN0d2VzdCA9ICdXJzsKKysgICAgICAgICAgICAgICAgbG9uZ3ZhbCA9IC1sb25ndmFsOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICBlYXN0d2VzdCA9ICdFJzsKKysKKysgICAgICAgIGxvbmdzZWNmcmFjID0gbG9uZ3ZhbCAlIDEwMDA7CisrICAgICAgICBsb25ndmFsID0gbG9uZ3ZhbCAvIDEwMDA7CisrICAgICAgICBsb25nc2VjID0gbG9uZ3ZhbCAlIDYwOworKyAgICAgICAgbG9uZ3ZhbCA9IGxvbmd2YWwgLyA2MDsKKysgICAgICAgIGxvbmdtaW4gPSBsb25ndmFsICUgNjA7CisrICAgICAgICBsb25ndmFsID0gbG9uZ3ZhbCAvIDYwOworKyAgICAgICAgbG9uZ2RlZyA9IGxvbmd2YWw7CisrCisrICAgICAgICBhbHRmcmFjID0gYWx0dmFsICUgMTAwOworKyAgICAgICAgYWx0bWV0ZXJzID0gKGFsdHZhbCAvIDEwMCkgKiBhbHRzaWduOworKworKyAgICAgICAgc2l6ZXN0ciA9IHN0cmR1cChwcmVjc2l6ZV9udG9hKHNpemV2YWwpKTsKKysgICAgICAgIGhwc3RyID0gc3RyZHVwKHByZWNzaXplX250b2EoaHB2YWwpKTsKKysgICAgICAgIHZwc3RyID0gc3RyZHVwKHByZWNzaXplX250b2EodnB2YWwpKTsKKysKKysgICAgICAgIHNwcmludGYoY3AsCisrICAgICAgICAgICAgICAgICIlZCAlLjJkICUuMmQuJS4zZCAlYyAlZCAlLjJkICUuMmQuJS4zZCAlYyAlZC4lLjJkbSAlc20gJXNtICVzbSIsCisrICAgICAgICAgICAgICAgIGxhdGRlZywgbGF0bWluLCBsYXRzZWMsIGxhdHNlY2ZyYWMsIG5vcnRoc291dGgsCisrICAgICAgICAgICAgICAgIGxvbmdkZWcsIGxvbmdtaW4sIGxvbmdzZWMsIGxvbmdzZWNmcmFjLCBlYXN0d2VzdCwKKysgICAgICAgICAgICAgICAgYWx0bWV0ZXJzLCBhbHRmcmFjLCBzaXplc3RyLCBocHN0ciwgdnBzdHIpOworKyAgICAgICAgZnJlZShzaXplc3RyKTsKKysgICAgICAgIGZyZWUoaHBzdHIpOworKyAgICAgICAgZnJlZSh2cHN0cik7CisrCisrICAgICAgICByZXR1cm4gKGNwKTsKKyt9CmRpZmYgLS1naXQgYS9jb250cmliL2Ruc2xpc3QvZGhjcC5jc3MgYi9jb250cmliL2Ruc2xpc3QvZGhjcC5jc3MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzljZWEzOQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZG5zbGlzdC9kaGNwLmNzcwpAQCAtMCwwICsxLDU3IEBACitib2R5Cit7CisJZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7CisJY29sb3I6ICMwMDA7Cit9CisKK2gxCit7CisJZm9udC1zaXplOiBtZWRpdW07CisJZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2gxIC51cGRhdGVkCit7CisJY29sb3I6ICM5OTk7Cit9CisKK3RhYmxlCit7CisJYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKKwlib3JkZXItYm90dG9tOiAycHggc29saWQgIzAwMDsKK30KKwordGgKK3sKKwliYWNrZ3JvdW5kOiAjREREOworCWJvcmRlci10b3A6IDJweCBzb2xpZCAjMDAwOworCXRleHQtYWxpZ246IGxlZnQ7CisJZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKy8qIEFueSByb3cgKi8KKwordHIKK3sKKwlib3JkZXItdG9wOiAycHggc29saWQgIzAwMDsKK30KKworLyogQW55IHJvdyBidXQgdGhlIGZpcnN0IG9yIHNlY29uZCAob3ZlcnJpZGVzIGFib3ZlIHJ1bGUpICovCisKK3RyICsgdHIgKyB0cgoreworCWJvcmRlci10b3A6IDJweCBzb2xpZCAjOTk5OworfQorCit0ci5vZmZsaW5lIHRkLmhvc3RuYW1lCit7CisJY29sb3I6ICM5OTk7Cit9CisKKy5ob3N0bmFtZSAgIHsgd2lkdGg6IDEwZW07IH0KKy5pcF9hZGRyICAgIHsgd2lkdGg6IDEwZW07IGJhY2tncm91bmQ6ICNEREQ7IH0KKy5ldGhlcl9hZGRyIHsgd2lkdGg6IDE1ZW07IH0KKy5jbGllbnRfaWQgIHsgd2lkdGg6IDE1ZW07IGJhY2tncm91bmQ6ICNEREQ7IH0KKy5zdGF0dXMgICAgIHsgd2lkdGg6IDVlbTsgIH0KKy5zaW5jZSAgICAgIHsgd2lkdGg6IDEwZW07IGJhY2tncm91bmQ6ICNEREQ7IH0KKy5sZWFzZSAgICAgIHsgd2lkdGg6IDEwZW07IH0KZGlmZiAtLWdpdCBhL2NvbnRyaWIvZG5zbGlzdC9kbnNsaXN0LnBsIGIvY29udHJpYi9kbnNsaXN0L2Ruc2xpc3QucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2NlMjcyMAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZG5zbGlzdC9kbnNsaXN0LnBsCkBAIC0wLDAgKzEsNjA4IEBACisjIS91c3IvYmluL3BlcmwKKworIyBkbnNsaXN0IC0gUmVhZCBzdGF0ZSBmaWxlIGZyb20gZG5zbWFzcSBhbmQgY3JlYXRlIGEgbmljZSB3ZWIgcGFnZSB0byBkaXNwbGF5CisjICAgICAgICAgICBhIGxpc3Qgb2YgREhDUCBjbGllbnRzLgorIyAKKyMgQ29weXJpZ2h0IChDKSAyMDA0ICBUaG9tYXMgVHV0dGxlCisjIAorIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRJQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbSo7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorIyAKKyMgKiBUaGUgbGljZW5zZSBpcyBpbiBmYWN0IGluY2x1ZGVkIGF0IHRoZSBlbmQgb2YgdGhpcyBmaWxlLCBhbmQgY2FuCisjICAgZWl0aGVyIGJlIHZpZXdlZCBieSByZWFkaW5nIGV2ZXJ5dGhpbmcgYWZ0ZXIgIl9fREFUQV9fIiBvciBieQorIyAgIHJ1bm5pbmcgZG5zbGlzdCB3aXRoIHRoZSAnLWwnIG9wdGlvbi4KKyMgCisjIFZlcnNpb246IDAuMgorIyBBdXRob3I6ICBUaG9tYXMgVHV0dGxlCisjIEVtYWlsOiAgIGRuc2xpc3QuMjAudGhpbmtpbmdpbmJpbmFyeUBzcGFtZ291cm1ldC5vcmcKKyMgTGljZW5zZTogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4wCisjCisjIHYuIDAuMDogVG9vIHVnbHkgdG8gcHVibGlzaCwgdGhyb3duIG91dC4KKyMKKyMgdi4gMC4xOiBGaXJzdCByZXdyaXRlLgorIyAgICAgICAgIEFkZGVkIG1hc3RlciBob3N0IGxpc3Qgc28gb2ZmbGluZSBob3N0cyBjYW4gc3RpbGwgYmUgZGlzcGxheWVkLgorIyAgICAgICAgIEZpeGVkIG1vZGlmaWNhdGlvbiBkZXRlY3Rpb24gKGEgbmV3ZXIgbW9kaWZpY2F0aW9uIHRpbWUgaXMgbG93ZXIuKQorIworIyB2LiAwLjI6IEZpeGVkIENsaWVudCBJRCA9ICIqIiA9PiAiTm9uZSIKKyMgICAgICAgICBGaXhlZCBIVE1MIGVudGl0aWVzIChhIGNsaWVudCBJRCBvZiA/Pz8/PD8gc2NyZXdlZCBpdCB1cCkKKyMgICAgICAgICBGaXhlZCBjb21tYW5kLWxpbmUgYXJndW1lbnQgcHJvY2Vzc2luZyAoYXBwYXJlbnRseSwgInNoaWZ0IEBBUkdWIiAhPQorIyAgICAgICAgICAgICAiJF8gPSBzaGlmdCBAQVJHViIuLi4pCisjICAgICAgICAgQWRkZWQgbGljZW5zZSBpbmZvcm1hdGlvbi4KKwordXNlIFRlbXBsYXRlOworCisjIExvY2F0aW9uIG9mIHN0YXRlIGZpbGUuICAoVGhpcyBpcyB0aGUgZG5zbWFzcSBkZWZhdWx0LikKKyMgQ2hhbmdlIHdpdGggLXMgPGZpbGU+CitteSAkZG5zbWFzcV9zdGF0ZV9maWxlID0gJy92YXIvbGliL21pc2MvZG5zbWFzcS5sZWFzZXMnOworIyBMb2NhdGlvbiBvZiB0ZW1wbGF0ZS4gIChBc3N1bWVkIHRvIGJlIGluIGN1cnJlbnQgZGlyZWN0b3J5LikKKyMgQ2hhbmdlIHdpdGggLXQgPGZpbGU+CitteSAkaHRtbF90ZW1wbGF0ZV9maWxlID0gJ2Ruc2xpc3QudHQyJzsKKyMgRmlsZSB0byB3cml0ZSBIVE1MIHBhZ2UgdG8uICAoVGhpcyBpcyB3aGVyZSBTbGFja3dhcmUgcHV0cyBXV1cgcGFnZXMuICBJdCBtYXkKKyMgYmUgZGlmZmVyZW50IG9uIG90aGVyIHN5c3RlbXMuICBNYWtlIHN1cmUgdGhlIHBlcm1pc3Npb25zIGFyZSBzZXQgY29ycmVjdGx5CisjIGZvciBpdC4pCitteSAkaHRtbF9vdXRwdXRfZmlsZSA9ICcvdmFyL3d3dy9odGRvY3MvZGhjcC5odG1sJzsKKyMgVGltZSB0byB3YWl0IGFmdGVyIGVhY2ggcGFnZSB1cGRhdGUuICAoVGhlIHN0YXRlIGZpbGUgaXMgY2hlY2tlZCBmb3IgY2hhbmdlcworIyBiZWZvcmUgZWFjaCB1cGRhdGUgYnV0IGlzIG5vdCByZWFkIGluIGVhY2ggdGltZSwgaW4gY2FzZSBpdCBpcyB2ZXJ5IGJpZy4gIFRoZQorIyBwYWdlIGlzIHJld3JpdHRlbiBqdXN0IHNvIHRoZSAiKHVwZGF0ZWQgX18vX18gX186X186X18pIiB0ZXh0IGNoYW5nZXMgOy0pCitteSAkd2FpdF90aW1lID0gMjsKKworIyBSZWFkIGNvbW1hbmQtbGluZSBhcmd1bWVudHMuCit3aGlsZSAoJF8gPSBzaGlmdCBAQVJHVikgeworCWlmICgvLXMvKSB7ICRkbnNtYXNxX3N0YXRlX2ZpbGUgPSBzaGlmdDsgbmV4dDsgfQorCWlmICgvLXQvKSB7ICRodG1sX3RlbXBsYXRlX2ZpbGUgPSBzaGlmdDsgbmV4dDsgfQorCWlmICgvLW8vKSB7ICRodG1sX291dHB1dF9maWxlID0gc2hpZnQ7ICAgbmV4dDsgfQorCWlmICgvLWQvKSB7ICR3YWl0X3RpbWUgPSBzaGlmdDsgICAgICAgICAgbmV4dDsgfQorCWlmICgvLWwvKSB7IHNob3dfbGljZW5zZSgpOyAgICAgICAgICAgICAgZXhpdDsgfQorCWRpZSAidXNhZ2U6IGRuc2xpc3QgWy1zIHN0YXRlX2ZpbGVdIFstdCB0ZW1wbGF0ZV9maWxlXSBbLW8gb3V0cHV0X2ZpbGVdIFstZCBkZWxheV90aW1lXVxuIjsKK30KKworIyBNYXN0ZXIgbGlzdCBvZiBjbGllbnRzLCBvZmZsaW5lIGFuZCBvbmxpbmUuCitteSAkbGlzdCA9IHt9OworIyBTb3J0ZWQgaG9zdCBsaXN0LiAgKEl0J3MgYWN0dWFsbHkgc29ydGVkIGJ5IElQLS10aGUgc3ViICZieWlwKCkgY29tcGFyZXMgdHdvCisjIElQIGFkZHJlc3Nlcywgb2N0ZXQgYnkgb2N0ZXQsIGFuZCBmaWd1cmVzIG91dCB3aGljaCBpcyBoaWdoZXIuKQorbXkgQGhvc3RzID0gKCk7CisjIExhc3QgdGltZSB0aGUgc3RhdGUgZmlsZSB3YXMgY2hhbmdlZC4KK215ICRsYXN0X3N0YXRlX2NoYW5nZTsKKworIyBDaGVjayBmb3IgYSBjaGFuZ2UgdG8gdGhlIHN0YXRlIGZpbGUuCitzdWIgY2hlY2tfc3RhdGUgeworCWlmIChkZWZpbmVkICRsYXN0X3N0YXRlX2NoYW5nZSkgeworCQlpZiAoLU0gJGRuc21hc3Ffc3RhdGVfZmlsZSA8ICRsYXN0X3N0YXRlX2NoYW5nZSkgeworCQkJcHJpbnQgImNoZWNrX3N0YXRlOiBzdGF0ZSBmaWxlIGhhcyBiZWVuIGNoYW5nZWQuXG4iOworCQkJJGxhc3Rfc3RhdGVfY2hhbmdlID0gLU0gJGRuc21hc3Ffc3RhdGVfZmlsZTsKKwkJCXJldHVybiAxOworCQl9IGVsc2UgeworCQkJcmV0dXJuIDA7CisJCX0KKwl9IGVsc2UgeworCQkjIExhc3QgY2hhbmdlIHVuZGVmaW5lZCwgc28gd2UgYXJlIHJ1bm5pbmcgZm9yIHRoZSBmaXJzdCB0aW1lLgorCQlwcmludCAiY2hlY2tfc3RhdGU6IHJlYWRpbmcgc3RhdGUgZmlsZSBhdCBzdGFydHVwLlxuIjsKKwkJcmVhZF9zdGF0ZSgpOworCQkkbGFzdF9zdGF0ZV9jaGFuZ2UgPSAtTSAkZG5zbWFzcV9zdGF0ZV9maWxlOworCQlyZXR1cm4gMTsKKwl9Cit9CisKKyMgUmVhZCBkYXRhIGluIHN0YXRlIGZpbGUuCitzdWIgcmVhZF9zdGF0ZSB7CisJbXkgJG9sZDsKKwlteSAkbmV3OworCSMgT3BlbiBmaWxlLgorCXVubGVzcyAob3BlbiBTVEFURSwgJGRuc21hc3Ffc3RhdGVfZmlsZSkgeworCQl3YXJuICJyZWFkX3N0YXRlOiBjYW4ndCBvcGVuICRkbnNtYXNxX3N0YXRlX2ZpbGUhXG4iOworCQlyZXR1cm4gMDsKKwl9CisJIyBNYXJrIGFsbCBob3N0cyBhcyBvZmZsaW5lLCBzYXZpbmcgb2xkIHN0YXRlLgorCWZvcmVhY2ggJGV0aGVyIChrZXlzICV7JGxpc3R9KSB7CisJCSRsaXN0LT57JGV0aGVyfS0+eydvbGRfb25saW5lJ30gPSAkbGlzdC0+eyRldGhlcn0tPnsnb25saW5lJ307CisJCSRsaXN0LT57JGV0aGVyfS0+eydvbmxpbmUnfSA9IDA7CisJfQorCSMgUmVhZCBob3N0cy4KKwl3aGlsZSAoPFNUQVRFPikgeworCQljaG9tcDsKKwkJQGhvc3R7cXcvcmF3X2xlYXNlIGV0aGVyX2FkZHIgaXBfYWRkciBob3N0bmFtZSByYXdfY2xpZW50X2lkL30gPSBzcGxpdCAvXHMrLzsKKwkJJGV0aGVyID0gJGhvc3R7ZXRoZXJfYWRkcn07CisJCSMgTWFyayBlYWNoIG9ubGluZSBob3N0IGFzIG9ubGluZS4KKwkJJGxpc3QtPnskZXRoZXJ9LT57J29ubGluZSd9ID0gMTsKKwkJIyBDb3B5IGRhdGEgdG8gbWFzdGVyIGxpc3QuCisJCWZvcmVhY2ggJGtleSAoa2V5cyAlaG9zdCkgeworCQkJJGxpc3QtPnskZXRoZXJ9LT57JGtleX0gPSAkaG9zdHska2V5fTsKKwkJfQorCX0KKwljbG9zZSBTVEFURTsKKwkjIEhhbmRsZSBjaGFuZ2VzIGluIG9mZmxpbmUvb25saW5lIHN0YXRlLiAgKFRoZSBzdWIgJmRvX2hvc3QoKSBoYW5kbGVzCisJIyBhbGwgb2YgdGhlIGV4dHJhIHN0dWZmIHRvIGRvIHdpdGggYSBob3N0J3MgZGF0YSBvbmNlIGl0IGlzIHJlYWQuCisJZm9yZWFjaCAkZXRoZXIgKGtleXMgJXskbGlzdH0pIHsKKwkJJG9sZCA9ICRsaXN0LT57JGV0aGVyfS0+eydvbGRfb25saW5lJ307CisJCSRuZXcgPSAkbGlzdC0+eyRldGhlcn0tPnsnb25saW5lJ307CisJCWlmIChub3QgJG9sZCkgeworCQkJaWYgKG5vdCAkbmV3KSB7CisJCQkJZG9faG9zdCgkZXRoZXIsICdvZmZsaW5lJyk7CisJCQl9IGVsc2UgeworCQkJCWRvX2hvc3QoJGV0aGVyLCAnam9pbicpOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKG5vdCAkbmV3KSB7CisJCQkJZG9faG9zdCgkZXRoZXIsICdsZWF2ZScpOworCQkJfSBlbHNlIHsKKwkJCQlkb19ob3N0KCRldGhlciwgJ29ubGluZScpOworCQkJfQorCQl9CisJfQorCSMgU29ydCBob3N0cyBieSBJUCA7LSkKKwlAaG9zdHMgPSBzb3J0IGJ5aXAgdmFsdWVzICV7JGxpc3R9OworCSMgQ29weSBzb3J0ZWQgbGlzdCB0byB0ZW1wbGF0ZSBkYXRhIHN0b3JlLgorCSRkYXRhLT57J2hvc3RzJ30gPSBbIEBob3N0cyBdOworfQorCisjIERvIHN0dWZmIHBlciBob3N0Lgorc3ViIGRvX2hvc3QgeworCW15ICgkZXRoZXIsICRzdGF0dXMpID0gQF87CisJCisJIyBGaW5kIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgREhDUCBjbGllbnQgSUQuCisJaWYgKCRsaXN0LT57JGV0aGVyfS0+eydyYXdfY2xpZW50X2lkJ30gZXEgJyonKSB7CisJCSRsaXN0LT57JGV0aGVyfS0+eyd0ZXh0X2NsaWVudF9pZCd9ID0gJ05vbmUnOworCX0gZWxzZSB7CisJCW15ICR0ZXh0ID0gIiI7CisJCWZvcmVhY2ggJGNoYXIgKHNwbGl0IC86LywgJGxpc3QtPnskZXRoZXJ9LT57J3Jhd19jbGllbnRfaWQnfSkgeworCQkJJGNoYXIgPSBwYWNrKCdIMicsICRjaGFyKTsKKwkJCWlmIChvcmQoJGNoYXIpID49IDMyIGFuZCBvcmQoJGNoYXIpIDw9IDEyNykgeworCQkJCSR0ZXh0IC49ICRjaGFyOworCQkJfSBlbHNlIHsKKwkJCQkkdGV4dCAuPSAiPyI7CisJCQl9CisJCX0KKwkJJGxpc3QtPnskZXRoZXJ9LT57J3RleHRfY2xpZW50X2lkJ30gPSAkdGV4dDsKKwl9CisJCQorCSMgQ29udmVydCBsZWFzZSBleHBpcmF0aW9uIGRhdGUvdGltZSB0byB0ZXh0LgorCWlmICgkbGlzdC0+eyRldGhlcn0tPnsncmF3X2xlYXNlJ30gPT0gMCkgeworCQkkbGlzdC0+eyRldGhlcn0tPnsndGV4dF9sZWFzZSd9ID0gJ05ldmVyJzsKKwl9IGVsc2UgeworCQkkbGlzdC0+eyRldGhlcn0tPnsndGV4dF9sZWFzZSd9ID0gbmljZV90aW1lKCRsaXN0LT57JGV0aGVyfS0+eydyYXdfbGVhc2UnfSk7CisJfQorCQorCWlmICgkc3RhdHVzIGVxICdvZmZsaW5lJykgeworCQkjIE5vdGhpbmcgdG8gZG8uCisJfSBlbHNpZiAoJHN0YXR1cyBlcSAnb25saW5lJykgeworCQkjIE5vdGhpbmcgdG8gZG8uCisJfSBlbHNpZiAoJHN0YXR1cyBlcSAnam9pbicpIHsKKwkJIyBVcGRhdGUgdGltZXMgZm9yIGpvaW5pbmcgaG9zdC4KKwkJcHJpbnQgImRvX2hvc3Q6ICRldGhlciBqb2luZWQgdGhlIG5ldHdvcmsuXG4iOworCQkkbGlzdC0+eyRldGhlcn0tPnsnam9pbl90aW1lJ30gPSB0aW1lOworCQkkbGlzdC0+eyRldGhlcn0tPnsnc2luY2UnfSA9IG5pY2VfdGltZSh0aW1lKTsKKwl9IGVsc2lmICgkc3RhdHVzIGVxICdsZWF2ZScpIHsKKwkJIyBVcGRhdGUgdGltZXMgZm9yIGxlYXZpbmcgaG9zdC4KKwkJcHJpbnQgImRvX2hvc3Q6ICRldGhlciBsZWZ0IHRoZSBuZXR3b3JrLlxuIjsKKwkJJGxpc3QtPnskZXRoZXJ9LT57J2xlYXZlX3RpbWUnfSA9IHRpbWU7CisJCSRsaXN0LT57JGV0aGVyfS0+eydzaW5jZSd9ID0gbmljZV90aW1lKHRpbWUpOworCX0KKwkKK30KKworIyBDb252ZXJ0IHRpbWUgdG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24uCitzdWIgbmljZV90aW1lIHsKKwlteSAkdGltZSA9IHNoaWZ0OworCW15ICgkc2VjLCAkbWluLCAkaG91ciwgJG1kYXksICRtb24sICR5ZWFyLCAkd2RheSwgJHlkYXksICRkc3QpID0gbG9jYWx0aW1lKCR0aW1lKTsKKwkkc2VjID0gcGFkKCRzZWMsICcwJywgMik7CisJJG1pbiA9IHBhZCgkbWluLCAnMCcsIDIpOworCSRob3VyID0gcGFkKCRob3VyLCAnMCcsIDIpOworCSRtb24gPSBwYWQoJG1vbiwgJzAnLCAyKTsKKwkkbWRheSA9IHBhZCgkbWRheSwgJzAnLCAyKTsKKwlyZXR1cm4gIiRtb24vJG1kYXkgJGhvdXI6JG1pbjokc2VjIjsKK30KKworIyBQYWQgc3RyaW5nIHRvIGEgY2VydGFpbiBsZW5ndGggYnkgcmVwZWF0ZWRseSBwcmVwZW5kaW5nIGFub3RoZXIgc3RyaW5nLgorc3ViIHBhZCB7CisJbXkgKCR0ZXh0LCAkcGFkLCAkbGVuZ3RoKSA9IEBfOworCXdoaWxlIChsZW5ndGgoJHRleHQpIDwgJGxlbmd0aCkgeworCQkkdGV4dCA9ICIkcGFkJHRleHQiOworCX0KKwlyZXR1cm4gJHRleHQ7Cit9CisKKyMgQ29tcGFyZSB0d28gSVAgYWRkcmVzc2VzLiAgKFVzZXMgJGEgYW5kICRiIGZyb20gc29ydC4pCitzdWIgYnlpcCB7CisJIyBTcGxpdCBpbnRvIG9jdGV0cy4KKwlteSBAYSA9IHNwbGl0IC9cLi8sICRhLT57aXBfYWRkcn07CisJbXkgQGIgPSBzcGxpdCAvXC4vLCAkYi0+e2lwX2FkZHJ9OworCSMgQ29tcGFyZSBvY3RldHMuCisJZm9yZWFjaCAkbiAoMC4uMykgeworCQlyZXR1cm4gJGFbJG5dIDw9PiAkYlskbl0gaWYgKCRhWyRuXSAhPSAkYlskbl0pOworCX0KKwkjIElmIHdlIGdldCBoZXJlIHRoZXJlIGlzIG5vIGRpZmZlcmVuY2UuCisJcmV0dXJuIDA7Cit9CisJCQorIyBPdXRwdXQgSFRNTCBmaWxlLgorc3ViIHdyaXRlX291dHB1dCB7CisJIyBDcmVhdGUgbmV3IHRlbXBsYXRlIG9iamVjdC4KKwlteSAkdGVtcGxhdGUgPSBUZW1wbGF0ZS0+bmV3KAorCQl7CisJCQlBQlNPTFVURSA9PiAxLCAjIC92YXIvd3d3Ly4uLiBpcyBhbiBhYnNvbHV0ZSBwYXRoCisJCQlPVVRQVVQgPT4gJGh0bWxfb3V0cHV0X2ZpbGUgIyBwdXQgaXQgaGVyZSwgbm90IFNURE9VVAorCQl9CisJKTsKKwkkZGF0YS0+eyd1cGRhdGVkJ30gPSBuaWNlX3RpbWUodGltZSk7ICMgYWRkICIodXBkYXRlZCAuLi4pIiB0byBmaWxlCisJdW5sZXNzICgkdGVtcGxhdGUtPnByb2Nlc3MoJGh0bWxfdGVtcGxhdGVfZmlsZSwgJGRhdGEpKSB7ICMgZG8gaXQKKwkJd2FybiAid3JpdGVfb3V0cHV0OiBUZW1wbGF0ZSBUb29sa2l0IGVycm9yOiAiIC4gJHRlbXBsYXRlLT5lcnJvcigpIC4gIlxuIjsKKwkJcmV0dXJuIDA7CisJfQorCXByaW50ICJ3cml0ZV9vdXRwdXQ6IHBhZ2UgdXBkYXRlZC5cbiI7CisJcmV0dXJuIDE7Cit9CisKK3N1YiBzaG93X2xpY2Vuc2UgeworCXdoaWxlICg8REFUQT4pIHsKKwkJcHJpbnQ7CisJCSRsaW5lKys7CisJCWlmICgkbGluZSA9PSAyNCkgeyA8PjsgJGxpbmUgPSAxOyB9CisJfQorfQorCisjIE1haW4gbG9vcC4KK3doaWxlICgxKSB7CisJIyBDaGVjayBmb3Igc3RhdGUgY2hhbmdlLgorCWlmIChjaGVja19zdGF0ZSgpKSB7CisJCXJlYWRfc3RhdGUoKTsKKwkJc2xlZXAgMTsgIyBTbGVlcCBmb3IgYSBzZWNvbmQganVzdCBzbyB3ZSBkb24ndCB3ZWFyIGFueXRoaW5nCisJCSAgICAgICAgICMgb3V0LiAgKEJ5IG5vdCBzbGVlcGluZyB0aGUgd2hvbGUgdGltZSBhZnRlciBhIGNoYW5nZQorCQkJICMgd2UgY2FuIGRldGVjdCByYXBpZCBjaGFuZ2VzIG1vcmUgZWFzaWx5LS1saWtlIGlmIDMwMAorCQkJICMgaG9zdHMgYWxsIGNvbWUgYmFjayBvbmxpbmUsIHRoZXkgc2hvdyB1cCBxdWlja2VyLikKKwl9IGVsc2UgeworCQlzbGVlcCAkd2FpdF90aW1lOyAjIFRha2UgYSBuYXAuCisJfQorCXdyaXRlX291dHB1dCgpOyAjIFdyaXRlIHRoZSBmaWxlIGFueXdheS4KK30KK19fREFUQV9fCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICAgICAgICAgICAgICAgICAgICAgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisJCQkgICAgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCitmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCit1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5Cit0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KK3lvdXIgcHJvZ3JhbXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CitpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCitncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCitzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCityaWdodHMuCisKKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisKKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCitzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCit0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorYXV0aG9ycycgcmVwdXRhdGlvbnMuCisKKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKK3Byb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQorcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9kaWZpY2F0aW9uIGZvbGxvdy4KKworCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6Cit0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQoraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCitXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKworWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCit5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKworICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcwordm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCitwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCitwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCit0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bwordGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCit0aGlzIExpY2Vuc2UuCisKKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKK2NpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAordGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAoraW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorCisgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwordGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCit0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24uCisKKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgordG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCitvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCitvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworCQkJICAgIE5PIFdBUlJBTlRZCisKKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCitGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECitPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCitSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCitSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCitPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECitUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCitQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCisJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAordGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisKKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgbmFtZSBvZiBhdXRob3IKKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKworVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCitwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5CitiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKK21vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCitzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZgorbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCisgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0KKyAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCisKKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5CisgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisKK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50bworcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvZG5zbGlzdC9kbnNsaXN0LnR0MiBiL2NvbnRyaWIvZG5zbGlzdC9kbnNsaXN0LnR0MgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xOTk4ZTVmCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9kbnNsaXN0L2Ruc2xpc3QudHQyCkBAIC0wLDAgKzEsMzIgQEAKKzxodG1sPgorCTxoZWFkPgorCQk8dGl0bGU+REhDUCBDbGllbnRzPC90aXRsZT4KKwkJPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkaGNwLmNzcyIvPgorCQk8bWV0YSBodHRwLWVxdWl2PSJSZWZyZXNoIiBjb250ZW50PSIyIi8+CisJPC9oZWFkPgorCTxib2R5PgorCQk8aDE+REhDUCBDbGllbnRzIDxzcGFuIGNsYXNzPSJ1cGRhdGVkIj4odXBkYXRlZCBbJSB1cGRhdGVkICVdKTwvc3Bhbj48L2gxPgorCQk8dGFibGUgY29scz0iNyI+CisJCTx0cj4KKwkJCTx0aCBjbGFzcz0iaG9zdG5hbWUiPkhvc3RuYW1lPC90aD4KKwkJCTx0aCBjbGFzcz0iaXBfYWRkciI+SVAgQWRkcmVzczwvdGg+CisJCQk8dGggY2xhc3M9ImV0aGVyX2FkZHIiPkV0aGVybmV0IEFkZHJlc3M8L3RoPgorCQkJPHRoIGNsYXNzPSJjbGllbnRfaWQiPkRIQ1AgQ2xpZW50IElEPC90aD4KKwkJCTx0aCBjbGFzcz0ic3RhdHVzIj5TdGF0dXM8L3RoPgorCQkJPHRoIGNsYXNzPSJzaW5jZSI+U2luY2U8L3RoPgorCQkJPHRoIGNsYXNzPSJsZWFzZSI+TGVhc2UgRXhwaXJlczwvdGg+CisJCTwvdHI+CisJCVslIEZPUkVBQ0ggaG9zdCBJTiBob3N0cyAlXQorCQkJPHRyIGNsYXNzPSJbJSBJRiBob3N0Lm9ubGluZSAlXW9ubGluZVslIEVMU0UgJV1vZmZsaW5lWyUgRU5EICVdIj4KKwkJCQk8dGQgY2xhc3M9Imhvc3RuYW1lIj5bJSBob3N0Lmhvc3RuYW1lICVdPC90ZD4KKwkJCQk8dGQgY2xhc3M9ImlwX2FkZHIiPlslIGhvc3QuaXBfYWRkciAlXTwvdGQ+CisJCQkJPHRkIGNsYXNzPSJldGhlcl9hZGRyIj5bJSBob3N0LmV0aGVyX2FkZHIgJV08L3RkPgorCQkJCTx0ZCBjbGFzcz0iY2xpZW50X2lkIj5bJSBob3N0LnRleHRfY2xpZW50X2lkICVdIChbJSBob3N0LnJhd19jbGllbnRfaWQgJV0pPC90ZD4KKwkJCQk8dGQgY2xhc3M9InN0YXR1cyI+WyUgSUYgaG9zdC5vbmxpbmUgJV1PbmxpbmVbJSBFTFNFICVdT2ZmbGluZVslIEVORCAlXTwvdGQ+CisJCQkJPHRkIGNsYXNzPSJzaW5jZSI+WyUgaG9zdC5zaW5jZSAlXTwvdGQ+CisJCQkJPHRkIGNsYXNzPSJsZWFzZSI+WyUgaG9zdC50ZXh0X2xlYXNlICVdPC90ZD4KKwkJCTwvdHI+CisJCVslIEVORCAlXQorCQk8L3RhYmxlPgorCTwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvZG5zbWFzcV9NYWNPU1gtcHJlMTAuNC9ETlNtYXNxIGIvY29udHJpYi9kbnNtYXNxX01hY09TWC1wcmUxMC40L0ROU21hc3EKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmI2MjExOAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZG5zbWFzcV9NYWNPU1gtcHJlMTAuNC9ETlNtYXNxCkBAIC0wLDAgKzEsMjIgQEAKKyMhL2Jpbi9zaAorLiAvZXRjL3JjLmNvbW1vbgorCitTdGFydFNlcnZpY2UoKSB7CisgIGlmIFsgIiR7RE5TTUFTUTo9LU5PLX0iID0gIi1ZRVMtIiBdIDsgdGhlbgorICAgIC91c3IvbG9jYWwvc2Jpbi9kbnNtYXNxIC1xIC1uCisgIGZpCit9CisKK1N0b3BTZXJ2aWNlKCkgeworICBwaWQ9YEdldFBJRCBkbnNtYXNxYAorICBpZiBbICQ/IC1lcSAwIF07IHRoZW4KKyAgICBraWxsICRwaWQKKyAgZmkKK30KKworUmVzdGFydFNlcnZpY2UoKSB7CisgIFN0b3BTZXJ2aWNlICIkQCIKKyAgU3RhcnRTZXJ2aWNlICIkQCIKK30KKworUnVuU2VydmljZSAiJDEiCmRpZmYgLS1naXQgYS9jb250cmliL2Ruc21hc3FfTWFjT1NYLXByZTEwLjQvUkVBRE1FLnJ0ZiBiL2NvbnRyaWIvZG5zbWFzcV9NYWNPU1gtcHJlMTAuNC9SRUFETUUucnRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNDg0MTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2Ruc21hc3FfTWFjT1NYLXByZTEwLjQvUkVBRE1FLnJ0ZgpAQCAtMCwwICsxLDQyIEBACit7XHJ0ZjFcbWFjXGFuc2ljcGcxMDAwMFxjb2NvYXJ0ZjgyNFxjb2NvYXN1YnJ0ZjEwMAore1xmb250dGJsXGYwXGZzd2lzc1xmY2hhcnNldDc3IEhlbHZldGljYTtcZjFcZm5pbFxmY2hhcnNldDc3IE1vbmFjbzt9Cit7XGNvbG9ydGJsO1xyZWQyNTVcZ3JlZW4yNTVcYmx1ZTI1NTt9CitccGFwZXJ3MTE5MDBccGFwZXJoMTY4NDBcbWFyZ2wxNDQwXG1hcmdyMTQ0MFx2aWV3dzExMTIwXHZpZXdoMTAxMDBcdmlld2tpbmQwCitccGFyZFx0eDU2Nlx0eDExMzNcdHgxNzAwXHR4MjI2N1x0eDI4MzRcdHgzNDAxXHR4Mzk2OFx0eDQ1MzVcdHg1MTAyXHR4NTY2OVx0eDYyMzZcdHg2ODAzXHFsXHFuYXR1cmFsXHBhcmRpcm5hdHVyYWwKKworXGYwXGZzMjQgXGNmMCAxLiAJSWYgeW91J3ZlIHVzZWQgRE5TZW5hYmxlciwgb3IgaWYgeW91J3JlIHVzaW5nIE1hYyBPUyBYIFNlcnZlciwgb3IgaWYgeW91IGhhdmUgaW4gYW55IG90aGVyIHdheSBhY3RpdmF0ZWQgTWFjIE9TIFgncyBidWlsdC1pbiBESENQIGFuZC9vciBETlMgc2VydmVycywgZGlzYWJsZSB0aGVtLiAgVGhpcyB3b3VsZCB1c3VhbGx5IGludm9sdmUgY2hlY2tpbmcgdGhhdCB0aGV5IGFyZSBlaXRoZXIgc2V0IHRvIC1OTy0gb3IgYWJzZW50IGFsdG9nZXRoZXIgaW4gCitcZjEgL2V0Yy9ob3N0Y29uZmlnCitcZjAgLiAgSWYgeW91J3ZlIG5ldmVyIGRvbmUgYW55dGhpbmcgdG8gZG8gd2l0aCBETlMgb3IgREhDUCBzZXJ2ZXJzIG9uIGEgY2xpZW50IHZlcnNpb24gb2YgTWFjT1MgWCwgeW91IHdvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgdGhpczsgaXQgd2lsbCBhbHJlYWR5IGJlIGNvbmZpZ3VyZWQgZm9yIHlvdS5cCitcCisyLglBZGQgYSBjb25maWd1cmF0aW9uIGl0ZW0gdG8gCitcZjEgL2V0Yy9ob3N0Y29uZmlnCitcZjAgIGFzIGZvbGxvd3M6XAorXAorCitcZjEgRE5TTUFTUT0tWUVTLQorXGYwIFwKK1wKKzMuIAlDcmVhdGUgYSBzeXN0ZW0td2lkZSBTdGFydHVwSXRlbXMgZGlyZWN0b3J5IGZvciBkbnNtYXNxOlwKK1wKKworXGYxIHN1ZG8gbWtkaXIgLXAgL0xpYnJhcnkvU3RhcnR1cEl0ZW1zL0ROU21hc3FcCisKK1xmMCBcCis0LglDb3B5IHRoZSBmaWxlcyAKK1xmMSBETlNtYXNxCitcZjAgIGFuZCAKK1xmMSBTdGFydHVwUGFyYW1ldGVycy5wbGlzdAorXGYwICBpbnRvIHRoaXMgZGlyZWN0b3J5LCBhbmQgbWFrZSBzdXJlIHRoZSBmb3JtZXIgaXMgZXhlY3V0YWJsZTpcCitcCisKK1xmMSBzdWRvIGNwIEROU21hc3EgU3RhcnR1cFBhcmFtZXRlcnMucGxpc3QgL0xpYnJhcnkvU3RhcnR1cEl0ZW1zL0ROU21hc3FcCitzdWRvIGNobW9kIDc1NSAvTGlicmFyeS9TdGFydHVwSXRlbXMvRE5TbWFzcS9ETlNtYXNxXAorCitcZjAgXAorNS4JU3RhcnQgdGhlIHNlcnZpY2U6XAorXAorCitcZjEgc3VkbyAvTGlicmFyeS9TdGFydHVwSXRlbXMvRE5TbWFzcS9ETlNtYXNxIHN0YXJ0XAorCitcZjAgXGNmMCBcCitUaGF0IHNob3VsZCBiZSBhbGwuLi59ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9kbnNtYXNxX01hY09TWC1wcmUxMC40L1N0YXJ0dXBQYXJhbWV0ZXJzLnBsaXN0IGIvY29udHJpYi9kbnNtYXNxX01hY09TWC1wcmUxMC40L1N0YXJ0dXBQYXJhbWV0ZXJzLnBsaXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NGJkYTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2Ruc21hc3FfTWFjT1NYLXByZTEwLjQvU3RhcnR1cFBhcmFtZXRlcnMucGxpc3QKQEAgLTAsMCArMSwxOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlIENvbXB1dGVyLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgorPHBsaXN0IHZlcnNpb249IjEuMCI+Cis8ZGljdD4KKwk8a2V5PkRlc2NyaXB0aW9uPC9rZXk+CisJPHN0cmluZz5ETlNtYXNxPC9zdHJpbmc+CisJPGtleT5PcmRlclByZWZlcmVuY2U8L2tleT4KKwk8c3RyaW5nPk5vbmU8L3N0cmluZz4KKwk8a2V5PlByb3ZpZGVzPC9rZXk+CisJPGFycmF5PgorCQk8c3RyaW5nPkROU21hc3E8L3N0cmluZz4KKwk8L2FycmF5PgorCTxrZXk+VXNlczwva2V5PgorCTxhcnJheT4KKwkJPHN0cmluZz5OZXR3b3JrPC9zdHJpbmc+CisJPC9hcnJheT4KKwk8L2RpY3Q+Cis8L3BsaXN0PgpkaWZmIC0tZ2l0IGEvY29udHJpYi9kbnNtYXNxX01hY09TWC9ETlNtYXNxIGIvY29udHJpYi9kbnNtYXNxX01hY09TWC9ETlNtYXNxCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZiNjIxMTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2Ruc21hc3FfTWFjT1NYL0ROU21hc3EKQEAgLTAsMCArMSwyMiBAQAorIyEvYmluL3NoCisuIC9ldGMvcmMuY29tbW9uCisKK1N0YXJ0U2VydmljZSgpIHsKKyAgaWYgWyAiJHtETlNNQVNROj0tTk8tfSIgPSAiLVlFUy0iIF0gOyB0aGVuCisgICAgL3Vzci9sb2NhbC9zYmluL2Ruc21hc3EgLXEgLW4KKyAgZmkKK30KKworU3RvcFNlcnZpY2UoKSB7CisgIHBpZD1gR2V0UElEIGRuc21hc3FgCisgIGlmIFsgJD8gLWVxIDAgXTsgdGhlbgorICAgIGtpbGwgJHBpZAorICBmaQorfQorCitSZXN0YXJ0U2VydmljZSgpIHsKKyAgU3RvcFNlcnZpY2UgIiRAIgorICBTdGFydFNlcnZpY2UgIiRAIgorfQorCitSdW5TZXJ2aWNlICIkMSIKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZG5zbWFzcV9NYWNPU1gvUkVBRE1FLnJ0ZiBiL2NvbnRyaWIvZG5zbWFzcV9NYWNPU1gvUkVBRE1FLnJ0ZgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kYTQ4NDExCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9kbnNtYXNxX01hY09TWC9SRUFETUUucnRmCkBAIC0wLDAgKzEsNDIgQEAKK3tccnRmMVxtYWNcYW5zaWNwZzEwMDAwXGNvY29hcnRmODI0XGNvY29hc3VicnRmMTAwCit7XGZvbnR0YmxcZjBcZnN3aXNzXGZjaGFyc2V0NzcgSGVsdmV0aWNhO1xmMVxmbmlsXGZjaGFyc2V0NzcgTW9uYWNvO30KK3tcY29sb3J0Ymw7XHJlZDI1NVxncmVlbjI1NVxibHVlMjU1O30KK1xwYXBlcncxMTkwMFxwYXBlcmgxNjg0MFxtYXJnbDE0NDBcbWFyZ3IxNDQwXHZpZXd3MTExMjBcdmlld2gxMDEwMFx2aWV3a2luZDAKK1xwYXJkXHR4NTY2XHR4MTEzM1x0eDE3MDBcdHgyMjY3XHR4MjgzNFx0eDM0MDFcdHgzOTY4XHR4NDUzNVx0eDUxMDJcdHg1NjY5XHR4NjIzNlx0eDY4MDNccWxccW5hdHVyYWxccGFyZGlybmF0dXJhbAorCitcZjBcZnMyNCBcY2YwIDEuIAlJZiB5b3UndmUgdXNlZCBETlNlbmFibGVyLCBvciBpZiB5b3UncmUgdXNpbmcgTWFjIE9TIFggU2VydmVyLCBvciBpZiB5b3UgaGF2ZSBpbiBhbnkgb3RoZXIgd2F5IGFjdGl2YXRlZCBNYWMgT1MgWCdzIGJ1aWx0LWluIERIQ1AgYW5kL29yIEROUyBzZXJ2ZXJzLCBkaXNhYmxlIHRoZW0uICBUaGlzIHdvdWxkIHVzdWFsbHkgaW52b2x2ZSBjaGVja2luZyB0aGF0IHRoZXkgYXJlIGVpdGhlciBzZXQgdG8gLU5PLSBvciBhYnNlbnQgYWx0b2dldGhlciBpbiAKK1xmMSAvZXRjL2hvc3Rjb25maWcKK1xmMCAuICBJZiB5b3UndmUgbmV2ZXIgZG9uZSBhbnl0aGluZyB0byBkbyB3aXRoIEROUyBvciBESENQIHNlcnZlcnMgb24gYSBjbGllbnQgdmVyc2lvbiBvZiBNYWNPUyBYLCB5b3Ugd29uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCB0aGlzOyBpdCB3aWxsIGFscmVhZHkgYmUgY29uZmlndXJlZCBmb3IgeW91LlwKK1wKKzIuCUFkZCBhIGNvbmZpZ3VyYXRpb24gaXRlbSB0byAKK1xmMSAvZXRjL2hvc3Rjb25maWcKK1xmMCAgYXMgZm9sbG93czpcCitcCisKK1xmMSBETlNNQVNRPS1ZRVMtCitcZjAgXAorXAorMy4gCUNyZWF0ZSBhIHN5c3RlbS13aWRlIFN0YXJ0dXBJdGVtcyBkaXJlY3RvcnkgZm9yIGRuc21hc3E6XAorXAorCitcZjEgc3VkbyBta2RpciAtcCAvTGlicmFyeS9TdGFydHVwSXRlbXMvRE5TbWFzcVwKKworXGYwIFwKKzQuCUNvcHkgdGhlIGZpbGVzIAorXGYxIEROU21hc3EKK1xmMCAgYW5kIAorXGYxIFN0YXJ0dXBQYXJhbWV0ZXJzLnBsaXN0CitcZjAgIGludG8gdGhpcyBkaXJlY3RvcnksIGFuZCBtYWtlIHN1cmUgdGhlIGZvcm1lciBpcyBleGVjdXRhYmxlOlwKK1wKKworXGYxIHN1ZG8gY3AgRE5TbWFzcSBTdGFydHVwUGFyYW1ldGVycy5wbGlzdCAvTGlicmFyeS9TdGFydHVwSXRlbXMvRE5TbWFzcVwKK3N1ZG8gY2htb2QgNzU1IC9MaWJyYXJ5L1N0YXJ0dXBJdGVtcy9ETlNtYXNxL0ROU21hc3FcCisKK1xmMCBcCis1LglTdGFydCB0aGUgc2VydmljZTpcCitcCisKK1xmMSBzdWRvIC9MaWJyYXJ5L1N0YXJ0dXBJdGVtcy9ETlNtYXNxL0ROU21hc3Egc3RhcnRcCisKK1xmMCBcY2YwIFwKK1RoYXQgc2hvdWxkIGJlIGFsbC4uLn0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb250cmliL2Ruc21hc3FfTWFjT1NYL1N0YXJ0dXBQYXJhbWV0ZXJzLnBsaXN0IGIvY29udHJpYi9kbnNtYXNxX01hY09TWC9TdGFydHVwUGFyYW1ldGVycy5wbGlzdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40NTRiZGEwCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9kbnNtYXNxX01hY09TWC9TdGFydHVwUGFyYW1ldGVycy5wbGlzdApAQCAtMCwwICsxLDE4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUgQ29tcHV0ZXIvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+Cis8cGxpc3QgdmVyc2lvbj0iMS4wIj4KKzxkaWN0PgorCTxrZXk+RGVzY3JpcHRpb248L2tleT4KKwk8c3RyaW5nPkROU21hc3E8L3N0cmluZz4KKwk8a2V5Pk9yZGVyUHJlZmVyZW5jZTwva2V5PgorCTxzdHJpbmc+Tm9uZTwvc3RyaW5nPgorCTxrZXk+UHJvdmlkZXM8L2tleT4KKwk8YXJyYXk+CisJCTxzdHJpbmc+RE5TbWFzcTwvc3RyaW5nPgorCTwvYXJyYXk+CisJPGtleT5Vc2VzPC9rZXk+CisJPGFycmF5PgorCQk8c3RyaW5nPk5ldHdvcms8L3N0cmluZz4KKwk8L2FycmF5PgorCTwvZGljdD4KKzwvcGxpc3Q+CmRpZmYgLS1naXQgYS9jb250cmliL2R5bmFtaWMtZG5zbWFzcS9keW5hbWljLWRuc21hc3EucGwgYi9jb250cmliL2R5bmFtaWMtZG5zbWFzcS9keW5hbWljLWRuc21hc3EucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2M0YTFmMQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZHluYW1pYy1kbnNtYXNxL2R5bmFtaWMtZG5zbWFzcS5wbApAQCAtMCwwICsxLDI0OSBAQAorIyEvdXNyL2Jpbi9wZXJsCisjIGR5bmFtaWMtZG5zbWFzcS5wbCAtIHVwZGF0ZSBkbnNtYXNxJ3MgaW50ZXJuYWwgZG5zIGVudHJpZXMgZHluYW1pY2FsbHkKKyMgQ29weXJpZ2h0IChDKSAyMDA0ICBQZXRlciBXaWxsaXMKKyMgCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyMgCisjIHRoZSBwdXJwb3NlIG9mIHRoaXMgc2NyaXB0IGlzIHRvIGJlIGFibGUgdG8gdXBkYXRlIGRuc21hc3EncyBkbnMKKyMgcmVjb3JkcyBmcm9tIGEgcmVtb3RlIGR5bmFtaWMgZG5zIGNsaWVudC4KKyMgCisjIGJhc2ljIHVzZSBvZiB0aGlzIHNjcmlwdDoKKyMgZHluYW1pYy1kbnNtYXNxLnBsIGFkZCB0ZXN0YWNjb3VudCAxMjM0IHRlc3RhY2NvdW50Lm15ZG9tYWluLmNvbQorIyBkeW5hbWljLWRuc21hc3EucGwgbGlzdGVuICYKKyMgCisjIHRoaXMgc2NyaXB0IHRyaWVzIHRvIGVtdWxhdGUgRHluRE5TLm9yZydzIGR5bmFtaWMgZG5zIHNlcnZpY2UsIHNvCisjIHRlY2huaWNhbGx5IHlvdSBzaG91bGQgYmUgYWJsZSB0byB1c2UgYW55IER5bkROUy5vcmcgY2xpZW50IHRvCisjIHVwZGF0ZSB0aGUgcmVjb3JkcyBoZXJlLiB0ZXN0ZWQgYW5kIGNvbmZpcm1lZCB0byB3b3JrIHdpdGggZGRuc3UKKyMgMS4zLjEuIGp1c3QgcG9pbnQgdGhlIGNsaWVudCdzIGhvc3QgdG8gdGhlIElQIG9mIHRoaXMgbWFjaGluZSwKKyMgcG9ydCA5MDIwLCBhbmQgaW5jbHVkZSB0aGUgaG9zdG5hbWUsIHVzZXIgYW5kIHBhc3MsIGFuZCBpdCBzaG91bGQKKyMgd29yay4KKyMgCisjIG1ha2Ugc3VyZSAiYWRkbi1ob3N0cz0vZXRjL2R5bmRucy1ob3N0cyIgaXMgaW4geW91ciAvZXRjL2Ruc21hc3EuY29uZgorIyBmaWxlIGFuZCAibm9wb2xsIiBpcyBjb21tZW50ZWQgb3V0LgorCit1c2Ugc3RyaWN0OwordXNlIElPOjpTb2NrZXQ7Cit1c2UgTUlNRTo6QmFzZTY0OwordXNlIERCX0ZpbGU7Cit1c2UgRmNudGw7CisKK215ICRhY2NvdW50ZGIgPSAiYWNjb3VudHMuZGIiOworbXkgJHJlY29yZGZpbGUgPSAiL2V0Yy9keW5kbnMtaG9zdHMiOworbXkgJGRuc21hc3FwaWRmaWxlID0gIi92YXIvcnVuL2Ruc21hc3EucGlkIjsgIyBpZiB0aGlzIGRvZXNuJ3QgZXhpc3QsIHdpbGwgbG9vayBmb3IgcHJvY2VzcyBpbiAvcHJvYworbXkgJGxpc3RlbmFkZHJlc3MgPSAiMC4wLjAuMCI7CitteSAkbGlzdGVucG9ydCA9IDkwMjA7CisKKyMgbm8gZWRpdGluZyBwYXN0IHRoaXMgcG9pbnQgc2hvdWxkIGJlIG5lY2Vzc2FyeQorCitpZiAoIEBBUkdWIDwgMSApIHsKKwlkaWUgIlVzYWdlOiAkMCBBRER8REVMfExJU1RVU0VSU3xXUklURUhPU1RTRklMRXxMSVNURU5cbiI7Cit9IGVsc2lmICggbGMgJEFSR1ZbMF0gZXEgImFkZCIgKSB7CisJZGllICJVc2FnZTogJDAgQUREIFVTRVIgUEFTUyBIT1NUTkFNRVxuIiB1bmxlc3MgQEFSR1YgPT0gNDsKKwlhZGRfYWNjdCgkQVJHVlsxXSwgJEFSR1ZbMl0sICRBUkdWWzNdKTsKK30gZWxzaWYgKCBsYyAkQVJHVlswXSBlcSAiZGVsIiApIHsKKwlkaWUgIlVzYWdlOiAkMCBERUwgVVNFUlxuIiB1bmxlc3MgQEFSR1YgPT0gMjsKKwlwcmludCAiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB1c2VyIFwiJEFSR1ZbMV1cIj8gW04veV0gIjsKKwlteSAkcmVzcCA9IDxTVERJTj47CisJY2hvbXAgJHJlc3A7CisJaWYgKCBsYyBzdWJzdHIoJHJlc3AsMCwxKSBlcSAieSIgKSB7CisJCWRlbF9hY2N0KCRBUkdWWzFdKTsKKwl9Cit9IGVsc2lmICggbGMgJEFSR1ZbMF0gZXEgImxpc3R1c2VycyIgb3IgbGMgJEFSR1ZbMF0gZXEgIndyaXRlaG9zdHNmaWxlIiApIHsKKwlteSAkWCA9IHRpZSBteSAlaCwgIkRCX0ZpbGUiLCAkYWNjb3VudGRiLCBPX1JEV1J8T19DUkVBVCwgMDYwMCwgJERCX0hBU0g7CisJbXkgJGZoOworCWlmICggbGMgJEFSR1ZbMF0gZXEgIndyaXRlaG9zdHNmaWxlIiApIHsKKyAgICAgICAgCW9wZW4oJGZoLCAiPiRyZWNvcmRmaWxlIikgfHwgZGllICJDb3VsZG4ndCBvcGVuIHJlY29yZGZpbGUgXCIkcmVjb3JkZmlsZVwiOiAkIVxuIjsKKwkgICAgICAgCWZsb2NrKCRmaCwgMik7CisJICAgICAgIAlzZWVrKCRmaCwgMCwgMCk7CisJICAgICAgIAl0cnVuY2F0ZSgkZmgsIDApOworICAgICAgICB9CisJd2hpbGUgKCBteSAoJGtleSwgJHZhbCkgPSBlYWNoICVoICkgeworCQlteSAoJHBhc3MsICRkb21haW4sICRpcCkgPSBzcGxpdCgiXHQiLCR2YWwpOworCQlpZiAoIGxjICRBUkdWWzBdIGVxICJsaXN0dXNlcnMiICkgeworCQkJcHJpbnQgInVzZXIgJGtleSwgaG9zdG5hbWUgJGRvbWFpbiwgaXAgJGlwXG4iOworCQl9IGVsc2UgeworCQkJaWYgKCBkZWZpbmVkICRpcCApIHsKKwkJCQlwcmludCAkZmggIiRpcFx0JGRvbWFpblxuIjsKKwkJCX0KKwkJfQorCX0KKwlpZiAoIGxjICRBUkdWWzBdIGVxICJ3cml0ZWhvc3RzZmlsZSIgKSB7CisJCWZsb2NrKCRmaCwgOCk7CisJCWNsb3NlKCRmaCk7CisJCWRuc21hc3FfcmVzY2FuX2NvbmZpZ3MoKTsKKwl9CisJdW5kZWYgJFg7CisJdW50aWUgJWg7Cit9IGVsc2lmICggbGMgJEFSR1ZbMF0gZXEgImxpc3RlbiIgKSB7CisJbGlzdGVuX2Zvcl91cGRhdGVzKCk7Cit9CisKK3N1YiBsaXN0ZW5fZm9yX3VwZGF0ZXMgeworCW15ICRzb2NrID0gSU86OlNvY2tldDo6SU5FVC0+bmV3KExpc3RlbiAgICA9PiA1LAorCQlMb2NhbEFkZHIgPT4gJGxpc3RlbmFkZHJlc3MsIExvY2FsUG9ydCA9PiAkbGlzdGVucG9ydCwKKwkJUHJvdG8gICAgID0+ICd0Y3AnLCBSZXVzZUFkZHIgPT4gMSwKKwkJTXVsdGlIb21lZCA9PiAxKSB8fCBkaWUgIkNvdWxkIG5vdCBvcGVuIGxpc3RlbmluZyBzb2NrZXQ6ICQhXG4iOworCSRTSUd7J0NITEQnfSA9ICdJR05PUkUnOworCXdoaWxlICggbXkgJGNsaWVudCA9ICRzb2NrLT5hY2NlcHQoKSApIHsKKwkJbXkgJHAgPSBmb3JrKCk7CisJCWlmICggJHAgIT0gMCApIHsKKwkJCW5leHQ7CisJCX0KKwkJJFNJR3snQ0hMRCd9ID0gJ0RFRkFVTFQnOworCQlteSBAaGVhZGVyczsKKwkJbXkgJWNnaTsKKwkJd2hpbGUgKCA8JGNsaWVudD4gKSB7CisJCQlzLyhccnxcbikvL2c7CisJCQlsYXN0IGlmICRfIGVxICIiOworCQkJcHVzaCBAaGVhZGVycywgJF87CisJCX0KKwkJZm9yZWFjaCBteSAkaGVhZGVyIChAaGVhZGVycykgeworCQkJaWYgKCAkaGVhZGVyID1+IC9eR0VUIFwvbmljXC91cGRhdGVcPyhbXlxzXS4rKSBIVFRQXC8xXC5bMDFdJC8gKSB7CisJCQkJZm9yZWFjaCBteSAkZWxlbWVudCAoc3BsaXQoJyYnLCAkMSkpIHsKKwkJCQkJJGNnaXsoc3BsaXQgJz0nLCAkZWxlbWVudClbMF19ID0gKHNwbGl0ICc9JywgJGVsZW1lbnQpWzFdOworCQkJCX0KKwkJCX0gZWxzaWYgKCAkaGVhZGVyID1+IC9eQXV0aG9yaXphdGlvbjogYmFzaWMgKC4rKSQvICkgeworCQkJCXVubGVzcyAoIGRlZmluZWQgJGNnaXsnaG9zdG5hbWUnfSApIHsKKwkJCQkJcHJpbnRfaHR0cF9yZXNwb25zZSgkY2xpZW50LCB1bmRlZiwgImJhZHN5cyIpOworCQkJCQlleGl0KDEpOworCQkJCX0KKwkJCQlpZiAoICFleGlzdHMgJGNnaXsnbXlpcCd9ICkgeworCQkJCQkkY2dpeydteWlwJ30gPSAkY2xpZW50LT5wZWVyaG9zdCgpOworCQkJCX0KKwkJCQlteSAoJHVzZXIsJHBhc3MpID0gc3BsaXQgIjoiLCBNSU1FOjpCYXNlNjQ6OmRlY29kZSgkMSk7CisJCQkJaWYgKCBhdXRob3JpemUoJHVzZXIsICRwYXNzLCAkY2dpeydob3N0bmFtZSd9LCAkY2dpeydteWlwJ30pID09IDAgKSB7CisJCQkJCXByaW50X2h0dHBfcmVzcG9uc2UoJGNsaWVudCwgJGNnaXsnbXlpcCd9LCAiZ29vZCIpOworCQkJCQl1cGRhdGVfZG5zKFwlY2dpKTsKKwkJCQl9IGVsc2UgeworCQkJCQlwcmludF9odHRwX3Jlc3BvbnNlKCRjbGllbnQsIHVuZGVmLCAiYmFkYXV0aCIpOworCQkJCQlleGl0KDEpOworCQkJCX0KKwkJCQlsYXN0OworCQkJfQorCQl9CisJCWV4aXQoMCk7CisJfQorCXJldHVybigwKTsKK30KKworc3ViIGFkZF9hY2N0IHsKKwlteSAoJHVzZXIsICRwYXNzLCAkaG9zdG5hbWUpID0gQF87CisJbXkgJFggPSB0aWUgbXkgJWgsICJEQl9GaWxlIiwgJGFjY291bnRkYiwgT19SRFdSfE9fQ1JFQVQsIDA2MDAsICREQl9IQVNIOworCSRYLT5wdXQoJHVzZXIsIGpvaW4oIlx0IiwgKCRwYXNzLCAkaG9zdG5hbWUpKSk7CisJdW5kZWYgJFg7CisJdW50aWUgJWg7Cit9CisKK3N1YiBkZWxfYWNjdCB7CisgICAgICAgIG15ICgkdXNlciwgJHBhc3MsICRob3N0bmFtZSkgPSBAXzsKKyAgICAgICAgbXkgJFggPSB0aWUgbXkgJWgsICJEQl9GaWxlIiwgJGFjY291bnRkYiwgT19SRFdSfE9fQ1JFQVQsIDA2MDAsICREQl9IQVNIOworICAgICAgICAkWC0+ZGVsKCR1c2VyKTsKKyAgICAgICAgdW5kZWYgJFg7CisgICAgICAgIHVudGllICVoOworfQorCisKK3N1YiBhdXRob3JpemUgeworCW15ICR1c2VyID0gc2hpZnQ7CisJbXkgJHBhc3MgPSBzaGlmdDsKKwlteSAkaG9zdG5hbWUgPSBzaGlmdDsKKwlteSAkaXAgPSBzaGlmdDs7CisJbXkgJFggPSB0aWUgbXkgJWgsICJEQl9GaWxlIiwgJGFjY291bnRkYiwgT19SRFdSfE9fQ1JFQVQsIDA2MDAsICREQl9IQVNIOworCW15ICgkc3Bhc3MsICRzaG9zdCkgPSBzcGxpdCgiXHQiLCAkaHskdXNlcn0pOworCWlmICggZGVmaW5lZCAkaHskdXNlcn0gYW5kICgkc3Bhc3MgZXEgJHBhc3MpIGFuZCAoJHNob3N0IGVxICRob3N0bmFtZSkgKSB7CisJCSRYLT5wdXQoJHVzZXIsIGpvaW4oIlx0IiwgJHNwYXNzLCAkc2hvc3QsICRpcCkpOworCQl1bmRlZiAkWDsKKwkJdW50aWUgJWg7CisJCXJldHVybigwKTsKKwl9CisJdW5kZWYgJFg7CisJdW50aWUgJWg7CisJcmV0dXJuKDEpOworfQorCitzdWIgcHJpbnRfaHR0cF9yZXNwb25zZSB7CisJbXkgJHNvY2sgPSBzaGlmdDsKKwlteSAkaXAgPSBzaGlmdDsKKwlteSAkcmVzcG9uc2UgPSBzaGlmdDsKKwlwcmludCAkc29jayAiSFRUUC8xLjAgMjAwIE9LXG4iOworCW15IEB0bXAgPSBzcGxpdCAvXHMrLywgc2NhbGFyIGdtdGltZSgpOworCXByaW50ICRzb2NrICJEYXRlOiAkdG1wWzBdLCAkdG1wWzJdICR0bXBbMV0gJHRtcFs0XSAkdG1wWzNdIEdNVFxuIjsKKwlwcmludCAkc29jayAiU2VydmVyOiBQZXRlcidzIEZha2UgRHluRE5TLm9yZyBTZXJ2ZXIvMS4wXG4iOworCXByaW50ICRzb2NrICJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9SVNPLTg4NTktMVxuIjsKKwlwcmludCAkc29jayAiQ29ubmVjdGlvbjogY2xvc2VcbiI7CisJcHJpbnQgJHNvY2sgIlRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkXG4iOworCXByaW50ICRzb2NrICJcbiI7CisJI3ByaW50ICRzb2NrICIxMlxuIjsgIyB0aGlzIHdhcyBwYXJ0IG9mIHRoZSBkeW5kbnMgcmVzcG9uc2UgYnV0IGknbSBub3Qgc3VyZSB3aGF0IGl0IGlzCisJcHJpbnQgJHNvY2sgIiRyZXNwb25zZSIsIGRlZmluZWQoJGlwKT8gIiAkaXAiIDogIiIgLiAiXG4iOworfQorCitzdWIgdXBkYXRlX2RucyB7CisJbXkgJGhhc2hyZWYgPSBzaGlmdDsKKwlteSBAcmVjb3JkczsKKwlteSAkZm91bmQgPSAwOworCSMgdXBkYXRlIHRoZSBhZGRuLWhvc3RzIGZpbGUKKwlvcGVuKEZJTEUsICIrPCRyZWNvcmRmaWxlIikgfHwgZGllICJDb3VsZG4ndCBvcGVuIHJlY29yZGZpbGUgXCIkcmVjb3JkZmlsZVwiOiAkIVxuIjsKKwlmbG9jayhGSUxFLCAyKTsKKwl3aGlsZSAoIDxGSUxFPiApIHsKKwkJaWYgKCAvXihcZCtcLlxkK1wuXGQrXC5cZCspXHMrJCRoYXNocmVmeydob3N0bmFtZSd9XG4kL3NpICkgeworCQkJaWYgKCAkMSBuZSAkJGhhc2hyZWZ7J215aXAnfSApIHsKKwkJCQlwdXNoIEByZWNvcmRzLCAiJCRoYXNocmVmeydteWlwJ31cdCQkaGFzaHJlZnsnaG9zdG5hbWUnfVxuIjsKKwkJCQkkZm91bmQgPSAxOworCQkJfQorCQl9IGVsc2UgeworCQkJcHVzaCBAcmVjb3JkcywgJF87CisJCX0KKwl9CisJdW5sZXNzICggJGZvdW5kICkgeworCQlwdXNoIEByZWNvcmRzLCAiJCRoYXNocmVmeydteWlwJ31cdCQkaGFzaHJlZnsnaG9zdG5hbWUnfVxuIjsKKwl9CisJc3lzc2VlayhGSUxFLCAwLCAwKTsKKwl0cnVuY2F0ZShGSUxFLCAwKTsKKwlzeXN3cml0ZShGSUxFLCBqb2luKCIiLCBAcmVjb3JkcykpOworCWZsb2NrKEZJTEUsIDgpOworCWNsb3NlKEZJTEUpOworCWRuc21hc3FfcmVzY2FuX2NvbmZpZ3MoKTsKKwlyZXR1cm4oMCk7Cit9CisKK3N1YiBkbnNtYXNxX3Jlc2Nhbl9jb25maWdzIHsKKwkjIHNlbmQgdGhlIEhVUCBzaWduYWwgdG8gZG5zbWFzcQorCWlmICggLXIgJGRuc21hc3FwaWRmaWxlICkgeworCQlvcGVuKFBJRCwiPCRkbnNtYXNxcGlkZmlsZSIpIHx8IGRpZSAiQ291bGQgbm90IG9wZW4gUElEIGZpbGUgXCIkZG5zbWFzcXBpZGZpbGVcIjogJCFcbiI7CisJCW15ICRwaWQgPSA8UElEPjsKKwkJY2xvc2UoUElEKTsKKwkJY2hvbXAgJHBpZDsKKwkJaWYgKCBraWxsKDAsICRwaWQpICkgeworCQkJa2lsbCgxLCAkcGlkKTsKKwkJfSBlbHNlIHsKKwkJCWdvdG8gTE9PS0ZPUkROU01BU1E7CisJCX0KKwl9IGVsc2UgeworCQlMT09LRk9SRE5TTUFTUToKKwkJb3BlbmRpcihESVIsIi9wcm9jIikgfHwgZGllICJDb3VsZG4ndCBvcGVuZGlyIC9wcm9jOiAkIVxuIjsKKwkJbXkgQGRpcnMgPSBncmVwKC9eXGQrJC8sIHJlYWRkaXIoRElSKSk7CisJCWNsb3NlZGlyKERJUik7CisJCWZvcmVhY2ggbXkgJHByb2Nlc3MgKEBkaXJzKSB7CisJCQlpZiAoIG9wZW4oRklMRSwiPC9wcm9jLyRwcm9jZXNzL2NtZGxpbmUiKSApIHsKKwkJCQlteSAkY21kbGluZSA9IDxGSUxFPjsKKwkJCQljbG9zZShGSUxFKTsKKwkJCQlpZiAoIChzcGxpdCgvXDAvLCRjbWRsaW5lKSlbMF0gPX4gL2Ruc21hc3EvICkgeworCQkJCQlraWxsKDEsICRwcm9jZXNzKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJcmV0dXJuKDApOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9sZWFzZS1hY2Nlc3MvUkVBRE1FIGIvY29udHJpYi9sZWFzZS1hY2Nlc3MvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZjNjZiZGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2xlYXNlLWFjY2Vzcy9SRUFETUUKQEAgLTAsMCArMSwyMCBAQAorSGVsbG8sCisKK0ZvciBzb21lIHNwZWNpZmljIGFwcGxpY2F0aW9uIEkgbmVlZGVkIHRvIGRlbnkgYWNjZXNzIHRvIGEgTUFDIGFkZHJlc3MKK3RvIGEgbGVhc2UuIEZvciB0aGlzIHJlYXNvbiBJIG1vZGlmaWVkIHRoZSBkaGNwLXNjcmlwdCBiZWhhdmlvciBhbmQgaXMKK2NhbGxlZCB3aXRoIGFuIGV4dHJhIHBhcmFtZXRlciAiYWNjZXNzIiBvbmNlIGEgZGhjcCByZXF1ZXN0IG9yIGRpc2NvdmVyCitpcyByZWNlaXZlZC4gSW4gdGhhdCBjYXNlIGlmIHRoZSBleGl0IGNvZGUgb2YgdGhlIHNjcmlwdCBpcyB6ZXJvLAorZG5zbWFzcSBjb250aW51ZXMgbm9ybWFsbHksIGFuZCBpZiBub24temVybyB0aGUgcGFja2V0IGlzIGlnbm9yZWQuCisKK1RoaXMgd2FzIG5vdCBhZGRlZCBhcyBhIHNlY3VyaXR5IGZlYXR1cmUgYnV0IGFzIGEgbWVhbiB0byBoYW5kbGUKK2RpZmZlcmVudGx5IHNvbWUgYWRkcmVzc2VzLiBJdCBpcyBhbHNvIHF1aXRlIGludHJ1c2l2ZSBzaW5jZSBpdCByZXF1aXJlcworY2hhbmdlcyBpbiBzZXZlcmFsIG90aGVyIHN1YnN5c3RlbXMuCisKK0l0IGF0dGFjaCB0aGUgcGF0Y2ggaW4gY2FzZSBzb21lb25lIGlzIGludGVyZXN0ZWQuCisKK3JlZ2FyZHMsCitOaWtvcworCitubWF2QGdlbm5ldHNhLmNvbQorCisKZGlmZiAtLWdpdCBhL2NvbnRyaWIvbGVhc2UtYWNjZXNzL2xlYXNlLmFjY2Vzcy5wYXRjaCBiL2NvbnRyaWIvbGVhc2UtYWNjZXNzL2xlYXNlLmFjY2Vzcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45MTFlZTdlCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9sZWFzZS1hY2Nlc3MvbGVhc2UuYWNjZXNzLnBhdGNoCkBAIC0wLDAgKzEsNTc4IEBACitJbmRleDogc3JjL2Ruc21hc3EuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNyYy9kbnNtYXNxLmMJKHJldmlzaW9uIDY5NikKKysrKyBzcmMvZG5zbWFzcS5jCShyZXZpc2lvbiA4MjEpCitAQCAtNTksNyArNTksNiBAQAorIHN0YXRpYyBpbnQgc2V0X2Ruc19saXN0ZW5lcnModGltZV90IG5vdywgZmRfc2V0ICpzZXQsIGludCAqbWF4ZmRwKTsKKyBzdGF0aWMgdm9pZCBjaGVja19kbnNfbGlzdGVuZXJzKGZkX3NldCAqc2V0LCB0aW1lX3Qgbm93KTsKKyBzdGF0aWMgdm9pZCBzaWdfaGFuZGxlcihpbnQgc2lnKTsKKy1zdGF0aWMgdm9pZCBhc3luY19ldmVudChpbnQgcGlwZSwgdGltZV90IG5vdyk7Cisgc3RhdGljIHZvaWQgZmF0YWxfZXZlbnQoc3RydWN0IGV2ZW50X2Rlc2MgKmV2KTsKKyBzdGF0aWMgdm9pZCBwb2xsX3Jlc29sdih2b2lkKTsKKyAKK0BAIC0yNzUsNyArMjc0LDcgQEAKKyAgIHBpcGVyZWFkID0gcGlwZWZkWzBdOworICAgcGlwZXdyaXRlID0gcGlwZWZkWzFdOworICAgLyogcHJpbWUgdGhlIHBpcGUgdG8gbG9hZCBzdHVmZiBmaXJzdCB0aW1lLiAqLworLSAgc2VuZF9ldmVudChwaXBld3JpdGUsIEVWRU5UX1JFTE9BRCwgMCk7IAorKyAgc2VuZF9ldmVudChwaXBld3JpdGUsIEVWRU5UX1JFTE9BRCwgMCwgMCk7IAorIAorICAgZXJyX3BpcGVbMV0gPSAtMTsKKyAgIAorQEAgLTM0MCw3ICszMzksNyBAQAorIAkgICAgfQorIAkgIGVsc2UgaWYgKGdldHVpZCgpID09IDApCisgCSAgICB7CistCSAgICAgIHNlbmRfZXZlbnQoZXJyX3BpcGVbMV0sIEVWRU5UX1BJREZJTEUsIGVycm5vKTsKKysJICAgICAgc2VuZF9ldmVudChlcnJfcGlwZVsxXSwgRVZFTlRfUElERklMRSwgZXJybm8sIDApOworIAkgICAgICBfZXhpdCgwKTsKKyAJICAgIH0KKyAJfQorQEAgLTM3Miw3ICszNzEsNyBAQAorIAkgIChzZXRncm91cHMoMCwgJmR1bW15KSA9PSAtMSB8fAorIAkgICBzZXRnaWQoZ3AtPmdyX2dpZCkgPT0gLTEpKQorIAl7CistCSAgc2VuZF9ldmVudChlcnJfcGlwZVsxXSwgRVZFTlRfR1JPVVBfRVJSLCBlcnJubyk7CisrCSAgc2VuZF9ldmVudChlcnJfcGlwZVsxXSwgRVZFTlRfR1JPVVBfRVJSLCBlcnJubywgMCk7CisgCSAgX2V4aXQoMCk7CisgCX0KKyAgIAorQEAgLTQxNSwxNCArNDE0LDE0IEBACisgCisgCSAgaWYgKGJhZF9jYXBhYmlsaXRpZXMgIT0gMCkKKyAJICAgIHsKKy0JICAgICAgc2VuZF9ldmVudChlcnJfcGlwZVsxXSwgRVZFTlRfQ0FQX0VSUiwgYmFkX2NhcGFiaWxpdGllcyk7CisrCSAgICAgIHNlbmRfZXZlbnQoZXJyX3BpcGVbMV0sIEVWRU5UX0NBUF9FUlIsIGJhZF9jYXBhYmlsaXRpZXMsIDApOworIAkgICAgICBfZXhpdCgwKTsKKyAJICAgIH0KKyAJICAKKyAJICAvKiBmaW5hbGx5IGRyb3Agcm9vdCAqLworIAkgIGlmIChzZXR1aWQoZW50X3B3LT5wd191aWQpID09IC0xKQorIAkgICAgeworLQkgICAgICBzZW5kX2V2ZW50KGVycl9waXBlWzFdLCBFVkVOVF9VU0VSX0VSUiwgZXJybm8pOworKwkgICAgICBzZW5kX2V2ZW50KGVycl9waXBlWzFdLCBFVkVOVF9VU0VSX0VSUiwgZXJybm8sIDApOworIAkgICAgICBfZXhpdCgwKTsKKyAJICAgIH0gICAgIAorIAorQEAgLTQzNCw3ICs0MzMsNyBAQAorIAkgIC8qIGxvc2UgdGhlIHNldHVpZCBhbmQgc2V0Z2lkIGNhcGFiaWxpdGllcyAqLworIAkgIGlmIChjYXBzZXQoaGRyLCBkYXRhKSA9PSAtMSkKKyAJICAgIHsKKy0JICAgICAgc2VuZF9ldmVudChlcnJfcGlwZVsxXSwgRVZFTlRfQ0FQX0VSUiwgZXJybm8pOworKwkgICAgICBzZW5kX2V2ZW50KGVycl9waXBlWzFdLCBFVkVOVF9DQVBfRVJSLCBlcnJubywgMCk7CisgCSAgICAgIF9leGl0KDApOworIAkgICAgfQorICNlbmRpZgorQEAgLTY0Nyw3ICs2NDYsNyBAQAorIAl9CisgICAgICAgCisgICAgICAgaWYgKEZEX0lTU0VUKHBpcGVyZWFkLCAmcnNldCkpCistCWFzeW5jX2V2ZW50KHBpcGVyZWFkLCBub3cpOworKwlhc3luY19ldmVudChwaXBlcmVhZCwgbm93LCBOVUxMLCAwKTsKKyAgICAgICAKKyAjaWZkZWYgSEFWRV9MSU5VWF9ORVRXT1JLCisgICAgICAgaWYgKEZEX0lTU0VUKGRhZW1vbi0+bmV0bGlua2ZkLCAmcnNldCkpCitAQCAtNjc0LDcgKzY3Myw3IEBACisgI2VuZGlmICAgICAgCisgCisgICAgICAgaWYgKGRhZW1vbi0+ZGhjcCAmJiBGRF9JU1NFVChkYWVtb24tPmRoY3BmZCwgJnJzZXQpKQorLQlkaGNwX3BhY2tldChub3cpOworKwlkaGNwX3BhY2tldChwaXBlcmVhZCwgbm93KTsKKyAKKyAjaWZuZGVmIE5PX0ZPUksKKyAgICAgICBpZiAoZGFlbW9uLT5oZWxwZXJmZCAhPSAtMSAmJiBGRF9JU1NFVChkYWVtb24tPmhlbHBlcmZkLCAmd3NldCkpCitAQCAtNzE5LDE3ICs3MTgsMTggQEAKKyAgICAgICBlbHNlCisgCXJldHVybjsKKyAKKy0gICAgICBzZW5kX2V2ZW50KHBpcGV3cml0ZSwgZXZlbnQsIDApOyAKKysgICAgICBzZW5kX2V2ZW50KHBpcGV3cml0ZSwgZXZlbnQsIDAsIDApOyAKKyAgICAgICBlcnJubyA9IGVycnNhdmU7CisgICAgIH0KKyB9CisgCistdm9pZCBzZW5kX2V2ZW50KGludCBmZCwgaW50IGV2ZW50LCBpbnQgZGF0YSkKKyt2b2lkIHNlbmRfZXZlbnQoaW50IGZkLCBpbnQgZXZlbnQsIGludCBkYXRhLCBpbnQgcHJpdikKKyB7CisgICBzdHJ1Y3QgZXZlbnRfZGVzYyBldjsKKyAgIAorICAgZXYuZXZlbnQgPSBldmVudDsKKyAgIGV2LmRhdGEgPSBkYXRhOworKyAgZXYucHJpdiA9IHByaXY7CisgICAKKyAgIC8qIGVycm9yIHBpcGUsIGRlYnVnIG1vZGUuICovCisgICBpZiAoZmQgPT0gLTEpCitAQCAtNzcxLDE0ICs3NzEsMTcgQEAKKyAgICAgICBkaWUoXygiY2Fubm90IG9wZW4gJXM6ICVzIiksIGRhZW1vbi0+bG9nX2ZpbGUgPyBkYWVtb24tPmxvZ19maWxlIDogImxvZyIsIEVDX0ZJTEUpOworICAgICB9CisgfQkKKy0gICAgICAKKy1zdGF0aWMgdm9pZCBhc3luY19ldmVudChpbnQgcGlwZSwgdGltZV90IG5vdykKKysKKysvKiByZXR1cm5zIHRoZSBwcml2YXRlIGRhdGEgb2YgdGhlIGV2ZW50CisrICovCisraW50IGFzeW5jX2V2ZW50KGludCBwaXBlLCB0aW1lX3Qgbm93LCBzdHJ1Y3QgZXZlbnRfZGVzYyogZXZlbnQsIHVuc2lnbmVkIGludCBzZWNzKQorIHsKKyAgIHBpZF90IHA7CisgICBzdHJ1Y3QgZXZlbnRfZGVzYyBldjsKKyAgIGludCBpOworIAorLSAgaWYgKHJlYWRfd3JpdGUocGlwZSwgKHVuc2lnbmVkIGNoYXIgKikmZXYsIHNpemVvZihldiksIDEpKQorKyAgaWYgKHJlYWRfdGltZW91dChwaXBlLCAodW5zaWduZWQgY2hhciAqKSZldiwgc2l6ZW9mKGV2KSwgbm93LCBzZWNzKSA+IDApIAorKyAgICB7CisgICAgIHN3aXRjaCAoZXYuZXZlbnQpCisgICAgICAgeworICAgICAgIGNhc2UgRVZFTlRfUkVMT0FEOgorQEAgLTg3Miw2ICs4NzUsMTQgQEAKKyAJZmx1c2hfbG9nKCk7CisgCWV4aXQoRUNfR09PRCk7CisgICAgICAgfQorKyAgICB9CisrICBlbHNlCisrICAgIHJldHVybiAtMTsgLyogdGltZW91dCAqLworKworKyAgaWYgKGV2ZW50KQorKyAgICBtZW1jcHkoIGV2ZW50LCAmZXYsIHNpemVvZihldikpOworKyAgICAKKysgIHJldHVybiAwOworIH0KKyAKKyBzdGF0aWMgdm9pZCBwb2xsX3Jlc29sdigpCitJbmRleDogc3JjL2NvbmZpZy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc3JjL2NvbmZpZy5oCShyZXZpc2lvbiA2OTYpCisrKysgc3JjL2NvbmZpZy5oCShyZXZpc2lvbiA4MjEpCitAQCAtNTEsNiArNTEsOCBAQAorICNkZWZpbmUgVEZUUF9NQVhfQ09OTkVDVElPTlMgNTAgLyogbWF4IHNpbXVsdGFuZW91cyBjb25uZWN0aW9ucyAqLworICNkZWZpbmUgTE9HX01BWCA1IC8qIGxvZy1xdWV1ZSBsZW5ndGggKi8KKyAjZGVmaW5lIFJBTkRGSUxFICIvZGV2L3VyYW5kb20iCisrI2RlZmluZSBTQ1JJUFRfVElNRU9VVCA2CisrI2RlZmluZSBMRUFTRV9DSEVDS19USU1FT1VUIDEwCisgCisgLyogREJVUyBpbnRlcmZhY2Ugc3BlY2lmaWNzICovCisgI2RlZmluZSBETlNNQVNRX1NFUlZJQ0UgInVrLm9yZy50aGVrZWxsZXlzLmRuc21hc3EiCitJbmRleDogc3JjL2Ruc21hc3EuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNyYy9kbnNtYXNxLmgJKHJldmlzaW9uIDY5NikKKysrKyBzcmMvZG5zbWFzcS5oCShyZXZpc2lvbiA4MjEpCitAQCAtMTE2LDYgKzExNiw3IEBACisgLyogQXN5bmMgZXZlbnQgcXVldWUgKi8KKyBzdHJ1Y3QgZXZlbnRfZGVzYyB7CisgICBpbnQgZXZlbnQsIGRhdGE7CisrICB1bnNpZ25lZCBpbnQgcHJpdjsKKyB9OworIAorICNkZWZpbmUgRVZFTlRfUkVMT0FEICAgIDEKK0BAIC0zOTAsNiArMzkxLDcgQEAKKyAjZGVmaW5lIEFDVElPTl9PTERfSE9TVE5BTUUgIDIKKyAjZGVmaW5lIEFDVElPTl9PTEQgICAgICAgICAgIDMKKyAjZGVmaW5lIEFDVElPTl9BREQgICAgICAgICAgIDQKKysjZGVmaW5lIEFDVElPTl9BQ0NFU1MgICAgICAgIDUKKyAKKyAjZGVmaW5lIERIQ1BfQ0hBRERSX01BWCAxNgorIAorQEAgLTcwOSw2ICs3MTEsNyBAQAorIGNoYXIgKnByaW50X21hYyhjaGFyICpidWZmLCB1bnNpZ25lZCBjaGFyICptYWMsIGludCBsZW4pOworIHZvaWQgYnVtcF9tYXhmZChpbnQgZmQsIGludCAqbWF4KTsKKyBpbnQgcmVhZF93cml0ZShpbnQgZmQsIHVuc2lnbmVkIGNoYXIgKnBhY2tldCwgaW50IHNpemUsIGludCBydyk7CisraW50IHJlYWRfdGltZW91dChpbnQgZmQsIHVuc2lnbmVkIGNoYXIgKnBhY2tldCwgaW50IHNpemUsIHRpbWVfdCBub3csIGludCBzZWNzKTsKKyAKKyAvKiBsb2cuYyAqLworIHZvaWQgZGllKGNoYXIgKm1lc3NhZ2UsIGNoYXIgKmFyZzEsIGludCBleGl0X2NvZGUpOworQEAgLTc0OCw3ICs3NTEsNyBAQAorIAorIC8qIGRoY3AuYyAqLworIHZvaWQgZGhjcF9pbml0KHZvaWQpOworLXZvaWQgZGhjcF9wYWNrZXQodGltZV90IG5vdyk7Cisrdm9pZCBkaGNwX3BhY2tldChpbnQgcGlwZXJlYWQsIHRpbWVfdCBub3cpOworIAorIHN0cnVjdCBkaGNwX2NvbnRleHQgKmFkZHJlc3NfYXZhaWxhYmxlKHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQsIAorIAkJCQkgICAgICAgc3RydWN0IGluX2FkZHIgYWRkciwKK0BAIC03OTIsMTQgKzc5NSwxNiBAQAorIHZvaWQgcmVydW5fc2NyaXB0cyh2b2lkKTsKKyAKKyAvKiByZmMyMTMxLmMgKi8KKy1zaXplX3QgZGhjcF9yZXBseShzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0LCBjaGFyICppZmFjZV9uYW1lLCBpbnQgaW50X2luZGV4LAorK3NpemVfdCBkaGNwX3JlcGx5KGludCBwaXBlZmQsIHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQsIGNoYXIgKmlmYWNlX25hbWUsIGludCBpbnRfaW5kZXgsCisgCQkgIHNpemVfdCBzeiwgdGltZV90IG5vdywgaW50IHVuaWNhc3RfZGVzdCwgaW50ICppc19pbmZvcm0pOworIAorIC8qIGRuc21hc3EuYyAqLworIGludCBtYWtlX2ljbXBfc29jayh2b2lkKTsKKyBpbnQgaWNtcF9waW5nKHN0cnVjdCBpbl9hZGRyIGFkZHIpOworLXZvaWQgc2VuZF9ldmVudChpbnQgZmQsIGludCBldmVudCwgaW50IGRhdGEpOworK3ZvaWQgc2VuZF9ldmVudChpbnQgZmQsIGludCBldmVudCwgaW50IGRhdGEsIGludCBwcml2KTsKKyB2b2lkIGNsZWFyX2NhY2hlX2FuZF9yZWxvYWQodGltZV90IG5vdyk7CisraW50IHdhaXRfZm9yX2NoaWxkKGludCBwaXBlKTsKKytpbnQgYXN5bmNfZXZlbnQoaW50IHBpcGUsIHRpbWVfdCBub3csIHN0cnVjdCBldmVudF9kZXNjKiwgdW5zaWduZWQgaW50IHRpbWVvdXQpOworIAorIC8qIGlzYy5jICovCisgI2lmZGVmIEhBVkVfSVNDX1JFQURFUgorQEAgLTgzMiw5ICs4MzcsOSBAQAorIC8qIGhlbHBlci5jICovCisgI2lmbmRlZiBOT19GT1JLCisgaW50IGNyZWF0ZV9oZWxwZXIoaW50IGV2ZW50X2ZkLCBpbnQgZXJyX2ZkLCB1aWRfdCB1aWQsIGdpZF90IGdpZCwgbG9uZyBtYXhfZmQpOworLXZvaWQgaGVscGVyX3dyaXRlKHZvaWQpOworK2ludCBoZWxwZXJfd3JpdGUodm9pZCk7Cisgdm9pZCBxdWV1ZV9zY3JpcHQoaW50IGFjdGlvbiwgc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlLCAKKy0JCSAgY2hhciAqaG9zdG5hbWUsIHRpbWVfdCBub3cpOworKwkJICBjaGFyICpob3N0bmFtZSwgdGltZV90IG5vdywgdW5zaWduZWQgaW50IHVpZCk7CisgaW50IGhlbHBlcl9idWZfZW1wdHkodm9pZCk7CisgI2VuZGlmCisgCitJbmRleDogc3JjL3V0aWwuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNyYy91dGlsLmMJKHJldmlzaW9uIDY5NikKKysrKyBzcmMvdXRpbC5jCShyZXZpc2lvbiA4MjEpCitAQCAtNDQ0LDMgKzQ0NCwzOCBAQAorICAgcmV0dXJuIDE7CisgfQorIAorK2ludCByZWFkX3RpbWVvdXQoaW50IGZkLCB1bnNpZ25lZCBjaGFyICpwYWNrZXQsIGludCBzaXplLCB0aW1lX3Qgbm93LCBpbnQgc2VjcykKKyt7CisrICBzc2l6ZV90IG4sIGRvbmU7CisrICB0aW1lX3QgZXhwaXJlOworKyAgCisrICBleHBpcmUgPSBub3cgKyBzZWNzOworKyAgCisrICBmb3IgKGRvbmUgPSAwOyBkb25lIDwgc2l6ZTsgZG9uZSArPSBuKQorKyAgICB7CisrICAgIHJldHJ5OgorKyAgICAgIGlmIChzZWNzID4gMCkgYWxhcm0oc2Vjcyk7CisrICAgICAgbiA9IHJlYWQoZmQsICZwYWNrZXRbZG9uZV0sIChzaXplX3QpKHNpemUgLSBkb25lKSk7CisrCisrICAgICAgaWYgKG4gPT0gMCkKKysgICAgICAgIHJldHVybiAwOworKyAgICAgIGVsc2UgaWYgKG4gPT0gLTEpCisrICAgICAgICB7CisrICAgICAgICAgIGlmIChlcnJubyA9PSBFSU5UUikgeworKyAgICAgICAgICAgIG15X3N5c2xvZyhMT0dfSU5GTywgXygicmVhZCB0aW1lZCBvdXQgKGVycm5vICVkKSIpLCBlcnJubyk7CisrICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICAgIH0KKysKKysgICAgICAgICAgaWYgKHJldHJ5X3NlbmQoKSB8fCBlcnJubyA9PSBFTk9NRU0gfHwgZXJybm8gPT0gRU5PQlVGUyB8fCBlcnJubyA9PSBFQUdBSU4pCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgaWYgKHNlY3MgPT0gMCB8fCAoc2VjcyA+IDAgJiYgZG5zbWFzcV90aW1lKCkgPCBleHBpcmUpKQorKyAgICAgICAgICAgICAgICBnb3RvIHJldHJ5OworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgbXlfc3lzbG9nKExPR19JTkZPLCBfKCJlcnJvciBpbiByZWFkICh0aW1lb3V0ICVkLCBlcnJubyAlZCkiKSwgc2VjcywgZXJybm8pOworKyAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgIH0KKysgICAgfQorKyAgcmV0dXJuIDE7CisrfQorKworSW5kZXg6IHNyYy9kaGNwLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzcmMvZGhjcC5jCShyZXZpc2lvbiA2OTYpCisrKysgc3JjL2RoY3AuYwkocmV2aXNpb24gODIxKQorQEAgLTEwMyw3ICsxMDMsNyBAQAorICAgZGFlbW9uLT5kaGNwX3BhY2tldC5pb3ZfYmFzZSA9IHNhZmVfbWFsbG9jKGRhZW1vbi0+ZGhjcF9wYWNrZXQuaW92X2xlbik7CisgfQorICAgCistdm9pZCBkaGNwX3BhY2tldCh0aW1lX3Qgbm93KQorK3ZvaWQgZGhjcF9wYWNrZXQoaW50IHBpcGVyZWFkLCB0aW1lX3Qgbm93KQorIHsKKyAgIHN0cnVjdCBkaGNwX3BhY2tldCAqbWVzczsKKyAgIHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQ7CitAQCAtMjM5LDcgKzIzOSw4IEBACisgICBpZiAoIWlmYWNlX2VudW1lcmF0ZSgmcGFybSwgY29tcGxldGVfY29udGV4dCwgTlVMTCkpCisgICAgIHJldHVybjsKKyAgIGxlYXNlX3BydW5lKE5VTEwsIG5vdyk7IC8qIGxvc2UgYW55IGV4cGlyZWQgbGVhc2VzICovCistICBpb3YuaW92X2xlbiA9IGRoY3BfcmVwbHkocGFybS5jdXJyZW50LCBpZnIuaWZyX25hbWUsIGlmYWNlX2luZGV4LCAoc2l6ZV90KXN6LCAKKysKKysgIGlvdi5pb3ZfbGVuID0gZGhjcF9yZXBseShwaXBlcmVhZCwgcGFybS5jdXJyZW50LCBpZnIuaWZyX25hbWUsIGlmYWNlX2luZGV4LCAoc2l6ZV90KXN6LCAKKyAJCQkgICBub3csIHVuaWNhc3RfZGVzdCwgJmlzX2luZm9ybSk7CisgICBsZWFzZV91cGRhdGVfZmlsZShub3cpOworICAgbGVhc2VfdXBkYXRlX2RucygpOworSW5kZXg6IHNyYy9oZWxwZXIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNyYy9oZWxwZXIuYwkocmV2aXNpb24gNjk2KQorKysrIHNyYy9oZWxwZXIuYwkocmV2aXNpb24gODIxKQorQEAgLTQ1LDYgKzQ1LDcgQEAKKyAjZW5kaWYKKyAgIHVuc2lnbmVkIGNoYXIgaHdhZGRyW0RIQ1BfQ0hBRERSX01BWF07CisgICBjaGFyIGludGVyZmFjZVtJRl9OQU1FU0laRV07CisrICB1bnNpZ25lZCBpbnQgdWlkOworIH07CisgCisgc3RhdGljIHN0cnVjdCBzY3JpcHRfZGF0YSAqYnVmID0gTlVMTDsKK0BAIC02MCw3ICs2MSw3IEBACisgICAgICB0aGVuIGZvcmsgb3VyIHByb2Nlc3MuICovCisgICBpZiAocGlwZShwaXBlZmQpID09IC0xIHx8ICFmaXhfZmQocGlwZWZkWzFdKSB8fCAocGlkID0gZm9yaygpKSA9PSAtMSkKKyAgICAgeworLSAgICAgIHNlbmRfZXZlbnQoZXJyX2ZkLCBFVkVOVF9QSVBFX0VSUiwgZXJybm8pOworKyAgICAgIHNlbmRfZXZlbnQoZXJyX2ZkLCBFVkVOVF9QSVBFX0VSUiwgZXJybm8sIDApOworICAgICAgIF9leGl0KDApOworICAgICB9CisgCitAQCAtODcsMTMgKzg4LDEzIEBACisgCXsKKyAJICBpZiAoZGFlbW9uLT5vcHRpb25zICYgT1BUX05PX0ZPUkspCisgCSAgICAvKiBzZW5kIGVycm9yIHRvIGRhZW1vbiBwcm9jZXNzIGlmIG5vLWZvcmsgKi8KKy0JICAgIHNlbmRfZXZlbnQoZXZlbnRfZmQsIEVWRU5UX0hVU0VSX0VSUiwgZXJybm8pOworKwkgICAgc2VuZF9ldmVudChldmVudF9mZCwgRVZFTlRfSFVTRVJfRVJSLCBlcnJubywgMCk7CisgCSAgZWxzZQorIAkgICAgeworIAkgICAgICAvKiBraWxsIGRhZW1vbiAqLworLQkgICAgICBzZW5kX2V2ZW50KGV2ZW50X2ZkLCBFVkVOVF9ESUUsIDApOworKwkgICAgICBzZW5kX2V2ZW50KGV2ZW50X2ZkLCBFVkVOVF9ESUUsIDAsIDApOworIAkgICAgICAvKiByZXR1cm4gZXJyb3IgKi8KKy0JICAgICAgc2VuZF9ldmVudChlcnJfZmQsIEVWRU5UX0hVU0VSX0VSUiwgZXJybm8pOzsKKysJICAgICAgc2VuZF9ldmVudChlcnJfZmQsIEVWRU5UX0hVU0VSX0VSUiwgZXJybm8sIDApOworIAkgICAgfQorIAkgIF9leGl0KDApOworIAl9CitAQCAtMTIyLDYgKzEyMyw4IEBACisgCWFjdGlvbl9zdHIgPSAiZGVsIjsKKyAgICAgICBlbHNlIGlmIChkYXRhLmFjdGlvbiA9PSBBQ1RJT05fQUREKQorIAlhY3Rpb25fc3RyID0gImFkZCI7CisrICAgICAgZWxzZSBpZiAoZGF0YS5hY3Rpb24gPT0gQUNUSU9OX0FDQ0VTUykKKysJYWN0aW9uX3N0ciA9ICJhY2Nlc3MiOworICAgICAgIGVsc2UgaWYgKGRhdGEuYWN0aW9uID09IEFDVElPTl9PTEQgfHwgZGF0YS5hY3Rpb24gPT0gQUNUSU9OX09MRF9IT1NUTkFNRSkKKyAJYWN0aW9uX3N0ciA9ICJvbGQiOworICAgICAgIGVsc2UKK0BAIC0xNzgsOSArMTgxLDExIEBACisgCQl7CisgCQkgIC8qIE9uIGVycm9yIHNlbmQgZXZlbnQgYmFjayB0byBtYWluIHByb2Nlc3MgZm9yIGxvZ2dpbmcgKi8KKyAJCSAgaWYgKFdJRlNJR05BTEVEKHN0YXR1cykpCistCQkgICAgc2VuZF9ldmVudChldmVudF9mZCwgRVZFTlRfS0lMTEVELCBXVEVSTVNJRyhzdGF0dXMpKTsKKy0JCSAgZWxzZSBpZiAoV0lGRVhJVEVEKHN0YXR1cykgJiYgV0VYSVRTVEFUVVMoc3RhdHVzKSAhPSAwKQorLQkJICAgIHNlbmRfZXZlbnQoZXZlbnRfZmQsIEVWRU5UX0VYSVRFRCwgV0VYSVRTVEFUVVMoc3RhdHVzKSk7CisrCQkgICAgc2VuZF9ldmVudChldmVudF9mZCwgRVZFTlRfS0lMTEVELCBXVEVSTVNJRyhzdGF0dXMpLCBkYXRhLnVpZCk7CisrCQkgIGVsc2UgaWYgKFdJRkVYSVRFRChzdGF0dXMpKQorKwkJICAgIHNlbmRfZXZlbnQoZXZlbnRfZmQsIEVWRU5UX0VYSVRFRCwgV0VYSVRTVEFUVVMoc3RhdHVzKSwgZGF0YS51aWQpOworKyAgICAgICAgICAgICAgICAgIGVsc2UKKysJCSAgICBzZW5kX2V2ZW50KGV2ZW50X2ZkLCBFVkVOVF9FWElURUQsIC0xLCBkYXRhLnVpZCk7CisgCQkgIGJyZWFrOworIAkJfQorIAkgICAgICAKK0BAIC0yNjMsNyArMjY4LDcgQEAKKyAJICBlcnIgPSBlcnJubzsKKyAJfQorICAgICAgIC8qIGZhaWxlZCwgc2VuZCBldmVudCBzbyB0aGUgbWFpbiBwcm9jZXNzIGxvZ3MgdGhlIHByb2JsZW0gKi8KKy0gICAgICBzZW5kX2V2ZW50KGV2ZW50X2ZkLCBFVkVOVF9FWEVDX0VSUiwgZXJyKTsKKysgICAgICBzZW5kX2V2ZW50KGV2ZW50X2ZkLCBFVkVOVF9FWEVDX0VSUiwgZXJyLCBkYXRhLnVpZCk7CisgICAgICAgX2V4aXQoMCk7IAorICAgICB9CisgfQorQEAgLTI5NSw3ICszMDAsNyBAQAorIH0KKyAgCisgLyogcGFjayB1cCBsZWFzZSBkYXRhIGludG8gYSBidWZmZXIgKi8gICAgCistdm9pZCBxdWV1ZV9zY3JpcHQoaW50IGFjdGlvbiwgc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlLCBjaGFyICpob3N0bmFtZSwgdGltZV90IG5vdykKKyt2b2lkIHF1ZXVlX3NjcmlwdChpbnQgYWN0aW9uLCBzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2UsIGNoYXIgKmhvc3RuYW1lLCB0aW1lX3Qgbm93LCB1bnNpZ25lZCBpbnQgdWlkKQorIHsKKyAgIHVuc2lnbmVkIGNoYXIgKnA7CisgICBzaXplX3Qgc2l6ZTsKK0BAIC0zMzIsNiArMzM3LDcgQEAKKyAgICAgICBidWZfc2l6ZSA9IHNpemU7CisgICAgIH0KKyAKKysgIGJ1Zi0+dWlkID0gdWlkOworICAgYnVmLT5hY3Rpb24gPSBhY3Rpb247CisgICBidWYtPmh3YWRkcl9sZW4gPSBsZWFzZS0+aHdhZGRyX2xlbjsKKyAgIGJ1Zi0+aHdhZGRyX3R5cGUgPSBsZWFzZS0+aHdhZGRyX3R5cGU7CitAQCAtMzkzLDEyICszOTksMTUgQEAKKyAgIHJldHVybiBieXRlc19pbl9idWYgPT0gMDsKKyB9CisgCistdm9pZCBoZWxwZXJfd3JpdGUodm9pZCkKKysvKiByZXR1cm5zIC0xIGlmIHdyaXRlIGZhaWxlZCBmb3IgYSByZWFzb24sIDEgaWYgbm8gZGF0YSBleGlzdAorKyAqIGFuZCAwIGlmIGV2ZXJ5dGhpbmcgd2FzIG9rLgorKyAqLworK2ludCBoZWxwZXJfd3JpdGUodm9pZCkKKyB7CisgICBzc2l6ZV90IHJjOworIAorICAgaWYgKGJ5dGVzX2luX2J1ZiA9PSAwKQorLSAgICByZXR1cm47CisrICAgIHJldHVybiAxOworICAgCisgICBpZiAoKHJjID0gd3JpdGUoZGFlbW9uLT5oZWxwZXJmZCwgYnVmLCBieXRlc19pbl9idWYpKSAhPSAtMSkKKyAgICAgeworQEAgLTQwOSw5ICs0MTgsMTEgQEAKKyAgIGVsc2UKKyAgICAgeworICAgICAgIGlmIChlcnJubyA9PSBFQUdBSU4gfHwgZXJybm8gPT0gRUlOVFIpCistCXJldHVybjsKKysJcmV0dXJuIC0xOworICAgICAgIGJ5dGVzX2luX2J1ZiA9IDA7CisgICAgIH0KKysgICAgCisrICByZXR1cm4gMDsKKyB9CisgCisgI2VuZGlmCitJbmRleDogc3JjL3JmYzIxMzEuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNyYy9yZmMyMTMxLmMJKHJldmlzaW9uIDY5NikKKysrKyBzcmMvcmZjMjEzMS5jCShyZXZpc2lvbiA4MjEpCitAQCAtMTAwLDggKzEwMCw0OSBAQAorIAkJCQkgICAgICBpbnQgY2xpZF9sZW4sIHVuc2lnbmVkIGNoYXIgKmNsaWQsIGludCAqbGVuX291dCk7Cisgc3RhdGljIHZvaWQgbWF0Y2hfdmVuZG9yX29wdHModW5zaWduZWQgY2hhciAqb3B0LCBzdHJ1Y3QgZGhjcF9vcHQgKmRvcHQpOyAKKyAKKytzdGF0aWMgaW50IGNoZWNrX2FjY2Vzc19zY3JpcHQoIGludCBwaXBlcmVhZCwgc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlLCBzdHJ1Y3QgZGhjcF9wYWNrZXQgKm1lc3MsIHRpbWVfdCBub3cpCisreworKyNpZm5kZWYgTk9fRk9SSworK3Vuc2lnbmVkIGludCB1aWQ7Cisrc3RydWN0IGV2ZW50X2Rlc2MgZXY7CisraW50IHJldDsKKytzdHJ1Y3QgZGhjcF9sZWFzZSBfbGVhc2U7CisrCisrICBpZiAoZGFlbW9uLT5sZWFzZV9jaGFuZ2VfY29tbWFuZCA9PSBOVUxMKSByZXR1cm4gMDsgLyogb2sgKi8KKysKKysgIGlmICghbGVhc2UpIHsgLyogaWYgaG9zdCBoYXMgbm90IGJlZW4gc2VlbiBiZWZvcmUgbGVhc2UgaXMgTlVMTCAqLworKyAgICAgIG1lbXNldCgmX2xlYXNlLCAwLCBzaXplb2YoX2xlYXNlKSk7CisrICAgICAgbGVhc2UgPSAmX2xlYXNlOworKyAgICAgIGxlYXNlX3NldF9od2FkZHIobGVhc2UsIG1lc3MtPmNoYWRkciwgTlVMTCwgbWVzcy0+aGxlbiwgbWVzcy0+aHR5cGUsIDApOworKyAgfQorKworKyAgdWlkID0gcmFuZDE2KCk7CisrICBxdWV1ZV9zY3JpcHQoQUNUSU9OX0FDQ0VTUywgbGVhc2UsIE5VTEwsIG5vdywgdWlkKTsKKysKKysgIC8qIHNlbmQgYWxsIGRhdGEgdG8gaGVscGVyIHByb2Nlc3MgKi8KKysgIGRvIAorKyAgICB7CisrICAgICAgaGVscGVyX3dyaXRlKCk7CisrICAgIH0gd2hpbGUgKGhlbHBlcl9idWZfZW1wdHkoKSA9PSAwKTsKKysKKysgIC8qIHdhaXQgZm9yIG91ciBldmVudCAqLworKyAgcmV0ID0gMDsKKysgIGRvIAorKyAgICB7CisrICAgICAgcmV0ID0gYXN5bmNfZXZlbnQoIHBpcGVyZWFkLCBub3csICZldiwgU0NSSVBUX1RJTUVPVVQpOworKyAgICB9CisrICB3aGlsZShldi5wcml2ICE9IHVpZCAmJiByZXQgPj0gMCk7CisrCisrICBpZiAocmV0IDwgMCB8fCBldi5kYXRhICE9IDApIC8qIHRpbWVvdXQgb3IgZXJyb3IgKi8KKysgICAgeworKyAgICAgIHJldHVybiAtMTsKKysgICAgfQorKworKyNlbmRpZgorKyAgcmV0dXJuIDA7IC8qIG9rICovCisrfQorIAkgIAorLXNpemVfdCBkaGNwX3JlcGx5KHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQsIGNoYXIgKmlmYWNlX25hbWUsIGludCBpbnRfaW5kZXgsCisrc2l6ZV90IGRoY3BfcmVwbHkoaW50IHBpcGVyZWFkLCBzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0LCBjaGFyICppZmFjZV9uYW1lLCBpbnQgaW50X2luZGV4LAorIAkJICBzaXplX3Qgc3osIHRpbWVfdCBub3csIGludCB1bmljYXN0X2Rlc3QsIGludCAqaXNfaW5mb3JtKQorIHsKKyAgIHVuc2lnbmVkIGNoYXIgKm9wdCwgKmNsaWQgPSBOVUxMOworQEAgLTI1Miw3ICsyOTMsNyBAQAorIAltYWMtPm5ldGlkLm5leHQgPSBuZXRpZDsKKyAJbmV0aWQgPSAmbWFjLT5uZXRpZDsKKyAgICAgICB9CistICAKKysKKyAgIC8qIERldGVybWluZSBuZXR3b3JrIGZvciB0aGlzIHBhY2tldC4gT3VyIGNhbGxlciB3aWxsIGhhdmUgYWxyZWFkeSBsaW5rZWQgYWxsIHRoZSAKKyAgICAgIGNvbnRleHRzIHdoaWNoIG1hdGNoIHRoZSBhZGRyZXNzZXMgb2YgdGhlIHJlY2VpdmluZyBpbnRlcmZhY2UgYnV0IGlmIHRoZSAKKyAgICAgIG1hY2hpbmUgaGFzIGFuIGFkZHJlc3MgYWxyZWFkeSwgb3IgY2FtZSB2aWEgYSByZWxheSwgb3Igd2UgaGF2ZSBhIHN1Ym5ldCBzZWxlY3RvciwgCitAQCAtMzI5LDcgKzM3MCw3IEBACisgCSAgICBteV9zeXNsb2coTE9HX0lORk8sIF8oIkF2YWlsYWJsZSBESENQIHJhbmdlOiAlcyAtLSAlcyIpLCBkYWVtb24tPm5hbWVidWZmLCBpbmV0X250b2EoY29udGV4dF90bXAtPmVuZCkpOworIAl9CisgICAgIH0KKy0KKysgICAgCisgICBtZXNzLT5vcCA9IEJPT1RSRVBMWTsKKyAgIAorICAgY29uZmlnID0gZmluZF9jb25maWcoZGFlbW9uLT5kaGNwX2NvbmYsIGNvbnRleHQsIGNsaWQsIGNsaWRfbGVuLCAKK0BAIC00MTgsNyArNDU5LDcgQEAKKyAJICAgICAgZWxzZQorIAkJbWVzcy0+eWlhZGRyID0gbGVhc2UtPmFkZHI7CisgCSAgICB9CistCSAgCisrCisgCSAgaWYgKCFtZXNzYWdlICYmIAorIAkgICAgICAhbGVhc2UgJiYgCisgCSAgICAgICghKGxlYXNlID0gbGVhc2VfYWxsb2NhdGUobWVzcy0+eWlhZGRyKSkpKQorQEAgLTY0MSw3ICs2ODIsMTQgQEAKKyAgICAgICBtZW1jcHkocmVxX29wdGlvbnMsIG9wdGlvbl9wdHIob3B0LCAwKSwgb3B0aW9uX2xlbihvcHQpKTsKKyAgICAgICByZXFfb3B0aW9uc1tvcHRpb25fbGVuKG9wdCldID0gT1BUSU9OX0VORDsKKyAgICAgfQorLSAgCisrCisrICBpZiAobWVzc190eXBlID09IERIQ1BSRVFVRVNUIHx8IG1lc3NfdHlwZSA9PSBESENQRElTQ09WRVIpCisrICAgIGlmIChjaGVja19hY2Nlc3Nfc2NyaXB0KHBpcGVyZWFkLCBsZWFzZSwgbWVzcywgbm93KSA8IDApCisrICAgICAgeworKyAgICAgICAgbXlfc3lzbG9nKExPR19JTkZPLCBfKCJJZ25vcmluZyBjbGllbnQgZHVlIHRvIGFjY2VzcyBzY3JpcHQiKSk7CisrICAgICAgICByZXR1cm4gMDsKKysgICAgICB9CisrCisgICBzd2l0Y2ggKG1lc3NfdHlwZSkKKyAgICAgeworICAgICBjYXNlIERIQ1BERUNMSU5FOgorSW5kZXg6IHNyYy9sb2cuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNyYy9sb2cuYwkocmV2aXNpb24gNjk2KQorKysrIHNyYy9sb2cuYwkocmV2aXNpb24gODIxKQorQEAgLTczLDcgKzczLDcgQEAKKyAKKyAgIGlmICghbG9nX3Jlb3BlbihkYWVtb24tPmxvZ19maWxlKSkKKyAgICAgeworLSAgICAgIHNlbmRfZXZlbnQoZXJyZmQsIEVWRU5UX0xPR19FUlIsIGVycm5vKTsKKysgICAgICBzZW5kX2V2ZW50KGVycmZkLCBFVkVOVF9MT0dfRVJSLCBlcnJubywgMCk7CisgICAgICAgX2V4aXQoMCk7CisgICAgIH0KKyAKK0luZGV4OiBzcmMvbGVhc2UuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNyYy9sZWFzZS5jCShyZXZpc2lvbiA2OTYpCisrKysgc3JjL2xlYXNlLmMJKHJldmlzaW9uIDgyMSkKK0BAIC01MTEsNyArNTExLDcgQEAKKyAgICAgICBpZiAobGVhc2UtPm9sZF9ob3N0bmFtZSkKKyAJeworICNpZm5kZWYgTk9fRk9SSworLQkgIHF1ZXVlX3NjcmlwdChBQ1RJT05fT0xEX0hPU1ROQU1FLCBsZWFzZSwgbGVhc2UtPm9sZF9ob3N0bmFtZSwgbm93KTsKKysJICBxdWV1ZV9zY3JpcHQoQUNUSU9OX09MRF9IT1NUTkFNRSwgbGVhc2UsIGxlYXNlLT5vbGRfaG9zdG5hbWUsIG5vdywgMCk7CisgI2VuZGlmCisgCSAgZnJlZShsZWFzZS0+b2xkX2hvc3RuYW1lKTsKKyAJICBsZWFzZS0+b2xkX2hvc3RuYW1lID0gTlVMTDsKK0BAIC01MjAsNyArNTIwLDcgQEAKKyAgICAgICBlbHNlIAorIAl7CisgI2lmbmRlZiBOT19GT1JLCistCSAgcXVldWVfc2NyaXB0KEFDVElPTl9ERUwsIGxlYXNlLCBsZWFzZS0+aG9zdG5hbWUsIG5vdyk7CisrCSAgcXVldWVfc2NyaXB0KEFDVElPTl9ERUwsIGxlYXNlLCBsZWFzZS0+aG9zdG5hbWUsIG5vdywgMCk7CisgI2VuZGlmCisgCSAgb2xkX2xlYXNlcyA9IGxlYXNlLT5uZXh0OworIAkgIAorQEAgLTU0MCw3ICs1NDAsNyBAQAorICAgICBpZiAobGVhc2UtPm9sZF9ob3N0bmFtZSkKKyAgICAgICB7CQorICNpZm5kZWYgTk9fRk9SSworLQlxdWV1ZV9zY3JpcHQoQUNUSU9OX09MRF9IT1NUTkFNRSwgbGVhc2UsIGxlYXNlLT5vbGRfaG9zdG5hbWUsIG5vdyk7CisrCXF1ZXVlX3NjcmlwdChBQ1RJT05fT0xEX0hPU1ROQU1FLCBsZWFzZSwgbGVhc2UtPm9sZF9ob3N0bmFtZSwgbm93LCAwKTsKKyAjZW5kaWYKKyAJZnJlZShsZWFzZS0+b2xkX2hvc3RuYW1lKTsKKyAJbGVhc2UtPm9sZF9ob3N0bmFtZSA9IE5VTEw7CitAQCAtNTUyLDcgKzU1Miw3IEBACisgCShsZWFzZS0+YXV4X2NoYW5nZWQgJiYgKGRhZW1vbi0+b3B0aW9ucyAmIE9QVF9MRUFTRV9STykpKQorICAgICAgIHsKKyAjaWZuZGVmIE5PX0ZPUksKKy0JcXVldWVfc2NyaXB0KGxlYXNlLT5uZXcgPyBBQ1RJT05fQUREIDogQUNUSU9OX09MRCwgbGVhc2UsIGxlYXNlLT5ob3N0bmFtZSwgbm93KTsKKysJcXVldWVfc2NyaXB0KGxlYXNlLT5uZXcgPyBBQ1RJT05fQUREIDogQUNUSU9OX09MRCwgbGVhc2UsIGxlYXNlLT5ob3N0bmFtZSwgbm93LCAwKTsKKyAjZW5kaWYKKyAJbGVhc2UtPm5ldyA9IGxlYXNlLT5jaGFuZ2VkID0gbGVhc2UtPmF1eF9jaGFuZ2VkID0gMDsKKyAJCitJbmRleDogbWFuL2Ruc21hc3EuOAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG1hbi9kbnNtYXNxLjgJKHJldmlzaW9uIDY5NikKKysrKyBtYW4vZG5zbWFzcS44CShyZXZpc2lvbiA4MjEpCitAQCAtNzI0LDEyICs3MjQsMTUgQEAKKyAuQiBcLTYgLS1kaGNwLXNjcmlwdD08cGF0aD4KKyBXaGVuZXZlciBhIG5ldyBESENQIGxlYXNlIGlzIGNyZWF0ZWQsIG9yIGFuIG9sZCBvbmUgZGVzdHJveWVkLCB0aGUKKyBiaW5hcnkgc3BlY2lmaWVkIGJ5IHRoaXMgb3B0aW9uIGlzIHJ1bi4gVGhlIGFyZ3VtZW50cyB0byB0aGUgcHJvY2VzcworLWFyZSAiYWRkIiwgIm9sZCIgb3IgImRlbCIsIHRoZSBNQUMKKythcmUgImFkZCIsICJvbGQiLCAiYWNjZXNzIiBvciAiZGVsIiwgdGhlIE1BQworIGFkZHJlc3Mgb2YgdGhlIGhvc3QgKG9yICI8bnVsbD4iKSwgdGhlIElQIGFkZHJlc3MsIGFuZCB0aGUgaG9zdG5hbWUsCisgaWYga25vd24uICJhZGQiIG1lYW5zIGEgbGVhc2UgaGFzIGJlZW4gY3JlYXRlZCwgImRlbCIgbWVhbnMgaXQgaGFzCisgYmVlbiBkZXN0cm95ZWQsICJvbGQiIGlzIGEgbm90aWZpY2F0aW9uIG9mIGFuIGV4aXN0aW5nIGxlYXNlIHdoZW4KKyBkbnNtYXNxIHN0YXJ0cyBvciBhIGNoYW5nZSB0byBNQUMgYWRkcmVzcyBvciBob3N0bmFtZSBvZiBhbiBleGlzdGluZworIGxlYXNlIChhbHNvLCBsZWFzZSBsZW5ndGggb3IgZXhwaXJ5IGFuZCBjbGllbnQtaWQsIGlmIGxlYXNlZmlsZS1ybyBpcyBzZXQpLgorK1RoZSAiYWNjZXNzIiBrZXl3b3JkIG1lYW5zIHRoYXQgYSByZXF1ZXN0IHdhcyBqdXN0IHJlY2VpdmVkIGFuZCBkZXBlbmRpbmcKKytvbiB0aGUgc2NyaXB0IGV4aXQgc3RhdHVzIHJlcXVlc3QgZm9yIGFkZHJlc3Mgd2lsbCBiZSBncmFudGVkLCBpZiBleGl0IHN0YXR1cworK2lzIHplcm8gb3Igbm90IGlmIGl0IGlzIG5vbi16ZXJvLgorIFRoZSBwcm9jZXNzIGlzIHJ1biBhcyByb290IChhc3N1bWluZyB0aGF0IGRuc21hc3Egd2FzIG9yaWdpbmFsbHkgcnVuIGFzCisgcm9vdCkgZXZlbiBpZiBkbnNtYXNxIGlzIGNvbmZpZ3VyZWQgdG8gY2hhbmdlIFVJRCB0byBhbiB1bnByaXZpbGVnZWQgdXNlci4KKyBUaGUgZW52aXJvbm1lbnQgaXMgaW5oZXJpdGVkIGZyb20gdGhlIGludm9rZXIgb2YgZG5zbWFzcSwgYW5kIGlmIHRoZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9sZWFzZS10b29scy9NYWtlZmlsZSBiL2NvbnRyaWIvbGVhc2UtdG9vbHMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM4ZjJlZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvbGVhc2UtdG9vbHMvTWFrZWZpbGUKQEAgLTAsMCArMSw2IEBACitDRkxBR1M/PSAtTzIgLVdhbGwgLVcKKworYWxsOiBkaGNwX3JlbGVhc2UgZGhjcF9yZWxlYXNlNiBkaGNwX2xlYXNlX3RpbWUKKworY2xlYW46CisJcm0gLWYgKn4gKi5vIGNvcmUgZGhjcF9yZWxlYXNlIGRoY3BfcmVsZWFzZTYgZGhjcF9sZWFzZV90aW1lCmRpZmYgLS1naXQgYS9jb250cmliL2xlYXNlLXRvb2xzL2RoY3BfbGVhc2VfdGltZS4xIGIvY29udHJpYi9sZWFzZS10b29scy9kaGNwX2xlYXNlX3RpbWUuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmE3OGQzCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9sZWFzZS10b29scy9kaGNwX2xlYXNlX3RpbWUuMQpAQCAtMCwwICsxLDI1IEBACisuVEggREhDUF9MRUFTRV9USU1FIDEKKy5TSCBOQU1FCitkaGNwX2xlYXNlX3RpbWUgXC0gUXVlcnkgcmVtYWluaW5nIHRpbWUgb2YgYSBsZWFzZSBvbiBhIHRoZSBsb2NhbCBkbnNtYXNxIERIQ1Agc2VydmVyLgorLlNIIFNZTk9QU0lTCisuQiAgZGhjcF9sZWFzZV90aW1lIDxhZGRyZXNzPgorLlNIICJERVNDUklQVElPTiIKK1NlbmQgYSBESENQSU5GT1JNIG1lc3NhZ2UgdG8gYSBkbnNtYXNxIHNlcnZlciBydW5uaW5nIG9uIHRoZSBsb2NhbCBob3N0CithbmQgcHJpbnQgKHRvIHN0ZG91dCkgdGhlIHRpbWUgcmVtYWluaW5nIGluIGFueSBsZWFzZSBmb3IgdGhlIGdpdmVuCithZGRyZXNzLiBUaGUgdGltZSBpcyBnaXZlbiBhcyBzdHJpbmcgcHJpbnRlZCB0byBzdGRvdXQuCisKK0lmIGFuIGVycm9yIG9jY3VycyBvciBubyBsZWFzZSBleGlzdHMgZm9yIHRoZSBnaXZlbiBhZGRyZXNzLCAKK25vdGhpbmcgaXMgc2VudCB0byBzdGRvdXQgYSBtZXNzYWdlIGlzIHNlbnQgdG8gc3RkZXJyIGFuZCBhCitub24temVybyBlcnJvciBjb2RlIGlzIHJldHVybmVkLgorCitSZXF1aXJlcyBkbnNtYXNxIDIuNjcgb3IgbGF0ZXIgYW5kIG1heSBub3Qgd29yayB3aXRoIG90aGVyIERIQ1Agc2VydmVycy4KKworVGhlIGFkZHJlc3MgYXJndW1lbnQgaXMgYSBkb3R0ZWQtcXVhZCBJUCBhZGRyZXNzZXMgYW5kIG1hbmRhdG9yeS4KKy5TSCBMSU1JVEFUSU9OUworT25seSB3b3JrcyB3aXRoIElQdjQgYWRkcmVzc2VzIGFuZCBESENQIGxlYXNlcy4gCisuU0ggU0VFIEFMU08KKy5CUiBkbnNtYXNxICg4KQorLlNIIEFVVEhPUgorVGhpcyBtYW51YWwgcGFnZSB3YXMgd3JpdHRlbiBieSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPi4KKworCmRpZmYgLS1naXQgYS9jb250cmliL2xlYXNlLXRvb2xzL2RoY3BfbGVhc2VfdGltZS5jIGIvY29udHJpYi9sZWFzZS10b29scy9kaGNwX2xlYXNlX3RpbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWQ3YTg1Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9sZWFzZS10b29scy9kaGNwX2xlYXNlX3RpbWUuYwpAQCAtMCwwICsxLDIyMSBAQAorLyogQ29weXJpZ2h0IChjKSAyMDA3IFNpbW9uIEtlbGxleQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKi8KKworLyogZGhjcF9sZWFzZV90aW1lIDxhZGRyZXNzPiAqLworCisvKiBTZW5kIGEgREhDUElORk9STSBtZXNzYWdlIHRvIGEgZG5zbWFzcSBzZXJ2ZXIgcnVubmluZyBvbiB0aGUgbG9jYWwgaG9zdAorICAgYW5kIHByaW50ICh0byBzdGRvdXQpIHRoZSB0aW1lIHJlbWFpbmluZyBpbiBhbnkgbGVhc2UgZm9yIHRoZSBnaXZlbgorICAgYWRkcmVzcy4gVGhlIHRpbWUgaXMgZ2l2ZW4gYXMgc3RyaW5nIHByaW50ZWQgdG8gc3Rkb3V0LgorCisgICBJZiBhbiBlcnJvciBvY2N1cnMgb3Igbm8gbGVhc2UgZXhpc3RzIGZvciB0aGUgZ2l2ZW4gYWRkcmVzcywgCisgICBub3RoaW5nIGlzIHNlbnQgdG8gc3Rkb3V0IGEgbWVzc2FnZSBpcyBzZW50IHRvIHN0ZGVyciBhbmQgYQorICAgbm9uLXplcm8gZXJyb3IgY29kZSBpcyByZXR1cm5lZC4KKworICAgVGhpcyB2ZXJzaW9uIHJlcXVpcmVzIGRuc21hc3EgMi42NyBvciBsYXRlci4gCisqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+IAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxuZXQvaWZfYXJwLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CisjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2RlZmluZSBESENQX0NIQUREUl9NQVggICAgICAgICAgMTYKKyNkZWZpbmUgQk9PVFJFUVVFU1QgICAgICAgICAgICAgIDEKKyNkZWZpbmUgREhDUF9DT09LSUUgICAgICAgICAgICAgIDB4NjM4MjUzNjMKKyNkZWZpbmUgT1BUSU9OX1BBRCAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgT1BUSU9OX0xFQVNFX1RJTUUgICAgICAgIDUxCisjZGVmaW5lIE9QVElPTl9PVkVSTE9BRCAgICAgICAgICA1MgorI2RlZmluZSBPUFRJT05fTUVTU0FHRV9UWVBFICAgICAgNTMKKyNkZWZpbmUgT1BUSU9OX1JFUVVFU1RFRF9PUFRJT05TIDU1CisjZGVmaW5lIE9QVElPTl9FTkQgICAgICAgICAgICAgICAyNTUKKyNkZWZpbmUgREhDUElORk9STSAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgREhDUF9TRVJWRVJfUE9SVCAgICAgICAgIDY3CisKKyNkZWZpbmUgb3B0aW9uX2xlbihvcHQpICgoaW50KSgoKHVuc2lnbmVkIGNoYXIgKikob3B0KSlbMV0pKQorI2RlZmluZSBvcHRpb25fcHRyKG9wdCkgKCh2b2lkICopJigoKHVuc2lnbmVkIGNoYXIgKikob3B0KSlbMl0pKQorCisKK3R5cGVkZWYgdW5zaWduZWQgY2hhciB1ODsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgdTE2OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgdTMyOworCitzdHJ1Y3QgZGhjcF9wYWNrZXQgeworICB1OCBvcCwgaHR5cGUsIGhsZW4sIGhvcHM7CisgIHUzMiB4aWQ7CisgIHUxNiBzZWNzLCBmbGFnczsKKyAgc3RydWN0IGluX2FkZHIgY2lhZGRyLCB5aWFkZHIsIHNpYWRkciwgZ2lhZGRyOworICB1OCBjaGFkZHJbREhDUF9DSEFERFJfTUFYXSwgc25hbWVbNjRdLCBmaWxlWzEyOF07CisgIHUzMiBjb29raWU7CisgIHVuc2lnbmVkIGNoYXIgb3B0aW9uc1szMDhdOworfTsKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgKm9wdGlvbl9maW5kMSh1bnNpZ25lZCBjaGFyICpwLCB1bnNpZ25lZCBjaGFyICplbmQsIGludCBvcHQsIGludCBtaW5zaXplKQoreworICB3aGlsZSAoKnAgIT0gT1BUSU9OX0VORCkgCisgICAgeworICAgICAgaWYgKHAgPj0gZW5kKQorICAgICAgICByZXR1cm4gTlVMTDsgLyogbWFsZm9ybWVkIHBhY2tldCAqLworICAgICAgZWxzZSBpZiAoKnAgPT0gT1BUSU9OX1BBRCkKKyAgICAgICAgcCsrOworICAgICAgZWxzZSAKKyAgICAgICAgeyAKKyAgICAgICAgICBpbnQgb3B0X2xlbjsKKyAgICAgICAgICBpZiAocCA+PSBlbmQgLSAyKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7IC8qIG1hbGZvcm1lZCBwYWNrZXQgKi8KKyAgICAgICAgICBvcHRfbGVuID0gb3B0aW9uX2xlbihwKTsKKyAgICAgICAgICBpZiAocCA+PSBlbmQgLSAoMiArIG9wdF9sZW4pKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7IC8qIG1hbGZvcm1lZCBwYWNrZXQgKi8KKyAgICAgICAgICBpZiAoKnAgPT0gb3B0ICYmIG9wdF9sZW4gPj0gbWluc2l6ZSkKKyAgICAgICAgICAgIHJldHVybiBwOworICAgICAgICAgIHAgKz0gb3B0X2xlbiArIDI7CisgICAgICAgIH0KKyAgICB9CisgIAorICByZXR1cm4gb3B0ID09IE9QVElPTl9FTkQgPyBwIDogTlVMTDsKK30KKyAKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICpvcHRpb25fZmluZChzdHJ1Y3QgZGhjcF9wYWNrZXQgKm1lc3MsIHNpemVfdCBzaXplLCBpbnQgb3B0X3R5cGUsIGludCBtaW5zaXplKQoreworICB1bnNpZ25lZCBjaGFyICpyZXQsICpvdmVybG9hZDsKKyAgCisgIC8qIHNraXAgb3ZlciBESENQIGNvb2tpZTsgKi8KKyAgaWYgKChyZXQgPSBvcHRpb25fZmluZDEoJm1lc3MtPm9wdGlvbnNbMF0sICgodW5zaWduZWQgY2hhciAqKW1lc3MpICsgc2l6ZSwgb3B0X3R5cGUsIG1pbnNpemUpKSkKKyAgICByZXR1cm4gcmV0OworCisgIC8qIGxvb2sgZm9yIG92ZXJsb2FkIG9wdGlvbi4gKi8KKyAgaWYgKCEob3ZlcmxvYWQgPSBvcHRpb25fZmluZDEoJm1lc3MtPm9wdGlvbnNbMF0sICgodW5zaWduZWQgY2hhciAqKW1lc3MpICsgc2l6ZSwgT1BUSU9OX09WRVJMT0FELCAxKSkpCisgICAgcmV0dXJuIE5VTEw7CisgIAorICAvKiBDYW4gd2UgbG9vayBpbiBmaWxlbmFtZSBhcmVhID8gKi8KKyAgaWYgKChvdmVybG9hZFsyXSAmIDEpICYmCisgICAgICAocmV0ID0gb3B0aW9uX2ZpbmQxKCZtZXNzLT5maWxlWzBdLCAmbWVzcy0+ZmlsZVsxMjhdLCBvcHRfdHlwZSwgbWluc2l6ZSkpKQorICAgIHJldHVybiByZXQ7CisKKyAgLyogZmluYWxseSB0cnkgc25hbWUgYXJlYSAqLworICBpZiAoKG92ZXJsb2FkWzJdICYgMikgJiYKKyAgICAgIChyZXQgPSBvcHRpb25fZmluZDEoJm1lc3MtPnNuYW1lWzBdLCAmbWVzcy0+c25hbWVbNjRdLCBvcHRfdHlwZSwgbWluc2l6ZSkpKQorICAgIHJldHVybiByZXQ7CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgb3B0aW9uX3VpbnQodW5zaWduZWQgY2hhciAqb3B0LCBpbnQgc2l6ZSkKK3sKKyAgLyogdGhpcyB3b3JyaWVzIGFib3V0IHVuYWxpZ25lZCBkYXRhIGFuZCBieXRlIG9yZGVyICovCisgIHVuc2lnbmVkIGludCByZXQgPSAwOworICBpbnQgaTsKKyAgdW5zaWduZWQgY2hhciAqcCA9IG9wdGlvbl9wdHIob3B0KTsKKyAgCisgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCisgICAgcmV0ID0gKHJldCA8PCA4KSB8ICpwKys7CisKKyAgcmV0dXJuIHJldDsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreyAKKyAgc3RydWN0IGluX2FkZHIgbGVhc2U7CisgIHN0cnVjdCBkaGNwX3BhY2tldCBwYWNrZXQ7CisgIHVuc2lnbmVkIGNoYXIgKnAgPSBwYWNrZXQub3B0aW9uczsKKyAgc3RydWN0IHNvY2thZGRyX2luIGRlc3Q7CisgIGludCBmZCA9IHNvY2tldChQRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCk7CisgIHNzaXplX3QgcmM7CisgIAorICBpZiAoYXJnYyA8IDIpCisgICAgeyAKKyAgICAgIGZwcmludGYoc3RkZXJyLCAidXNhZ2U6IGRoY3BfbGVhc2VfdGltZSA8YWRkcmVzcz5cbiIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisKKyAgaWYgKGZkID09IC0xKQorICAgIHsKKyAgICAgIHBlcnJvcigiY2Fubm90IGNyZWF0ZSBzb2NrZXQiKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorIAorICBsZWFzZS5zX2FkZHIgPSBpbmV0X2FkZHIoYXJndlsxXSk7CisgICAKKyAgbWVtc2V0KCZwYWNrZXQsIDAsIHNpemVvZihwYWNrZXQpKTsKKyAKKyAgcGFja2V0LmhsZW4gPSAwOworICBwYWNrZXQuaHR5cGUgPSAwOworCisgIHBhY2tldC5vcCA9IEJPT1RSRVFVRVNUOworICBwYWNrZXQuY2lhZGRyID0gbGVhc2U7CisgIHBhY2tldC5jb29raWUgPSBodG9ubChESENQX0NPT0tJRSk7CisKKyAgKihwKyspID0gT1BUSU9OX01FU1NBR0VfVFlQRTsKKyAgKihwKyspID0gMTsKKyAgKihwKyspID0gREhDUElORk9STTsKKworICAvKiBFeHBsaWNpdGx5IHJlcXVlc3QgdGhlIGxlYXNlIHRpbWUsIGl0IHdvbid0IGJlIHNlbnQgb3RoZXJ3aXNlOgorICAgICB0aGlzIGlzIGEgZG5zbWFzcSBleHRlbnNpb24sIG5vdCBzdGFuZGFyZC4gKi8KKyAgKihwKyspID0gT1BUSU9OX1JFUVVFU1RFRF9PUFRJT05TOworICAqKHArKykgPSAxOworICAqKHArKykgPSBPUFRJT05fTEVBU0VfVElNRTsKKyAgCisgICoocCsrKSA9IE9QVElPTl9FTkQ7CisgCisgIGRlc3Quc2luX2ZhbWlseSA9IEFGX0lORVQ7IAorICBkZXN0LnNpbl9hZGRyLnNfYWRkciA9IGluZXRfYWRkcigiMTI3LjAuMC4xIik7CisgIGRlc3Quc2luX3BvcnQgPSBudG9ocyhESENQX1NFUlZFUl9QT1JUKTsKKyAgCisgIGlmIChzZW5kdG8oZmQsICZwYWNrZXQsIHNpemVvZihwYWNrZXQpLCAwLCAKKwkgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmZGVzdCwgc2l6ZW9mKGRlc3QpKSA9PSAtMSkKKyAgICB7CisgICAgICBwZXJyb3IoInNlbmR0byBmYWlsZWQiKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorCisgIGFsYXJtKDMpOyAvKiBub2RkeSB0aW1lb3V0LiAqLworCisgIHJjID0gcmVjdihmZCwgJnBhY2tldCwgc2l6ZW9mKHBhY2tldCksIDApOworICAKKyAgaWYgKHJjIDwgKHNzaXplX3QpKHNpemVvZihwYWNrZXQpIC0gc2l6ZW9mKHBhY2tldC5vcHRpb25zKSkpCisgICAgeworICAgICAgcGVycm9yKCJyZWN2IGZhaWxlZCIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisKKyAgaWYgKChwID0gb3B0aW9uX2ZpbmQoJnBhY2tldCwgKHNpemVfdClyYywgT1BUSU9OX0xFQVNFX1RJTUUsIDQpKSkKKyAgICB7CisgICAgICB1bnNpZ25lZCBpbnQgdCA9IG9wdGlvbl91aW50KHAsIDQpOworICAgICAgaWYgKHQgPT0gMHhmZmZmZmZmZikKKwlwcmludGYoImluZmluaXRlIik7CisgICAgICBlbHNlCisJeworCSAgdW5zaWduZWQgaW50IHg7CisJICBpZiAoKHggPSB0Lzg2NDAwKSkKKwkgICAgcHJpbnRmKCIldWQiLCB4KTsKKwkgIGlmICgoeCA9ICh0LzM2MDApJTI0KSkKKwkgICAgcHJpbnRmKCIldWgiLCB4KTsKKwkgIGlmICgoeCA9ICh0LzYwKSU2MCkpCisJICAgIHByaW50ZigiJXVtIiwgeCk7CisJICBpZiAoKHggPSB0JTYwKSkKKwkgICAgcHJpbnRmKCIldXMiLCB4KTsKKwl9CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgcmV0dXJuIDE7IC8qIG5vIGxlYXNlICovCit9CmRpZmYgLS1naXQgYS9jb250cmliL2xlYXNlLXRvb2xzL2RoY3BfcmVsZWFzZS4xIGIvY29udHJpYi9sZWFzZS10b29scy9kaGNwX3JlbGVhc2UuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzFhYmEwCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9sZWFzZS10b29scy9kaGNwX3JlbGVhc2UuMQpAQCAtMCwwICsxLDM3IEBACisuVEggREhDUF9SRUxFQVNFIDEKKy5TSCBOQU1FCitkaGNwX3JlbGVhc2UgXC0gUmVsZWFzZSBhIERIQ1AgbGVhc2Ugb24gYSB0aGUgbG9jYWwgZG5zbWFzcSBESENQIHNlcnZlci4KKy5TSCBTWU5PUFNJUworLkIgZGhjcF9yZWxlYXNlIDxpbnRlcmZhY2U+IDxhZGRyZXNzPiA8TUFDIGFkZHJlc3M+IDxjbGllbnRfaWQ+CisuU0ggIkRFU0NSSVBUSU9OIgorQSB1dGlsaXR5IHdoaWNoIGZvcmNlcyB0aGUgREhDUCBzZXJ2ZXIgcnVubmluZyBvbiB0aGlzIG1hY2hpbmUgdG8gcmVsZWFzZSBhIAorREhDUCBsZWFzZS4KKy5QUAorU2VuZCBhIERIQ1BSRUxFQVNFIG1lc3NhZ2UgdmlhIHRoZSBzcGVjaWZpZWQgaW50ZXJmYWNlIHRvIHRlbGwgdGhlCitsb2NhbCBESENQIHNlcnZlciB0byBkZWxldGUgYSBwYXJ0aWN1bGFyIGxlYXNlLiAKKworVGhlIGludGVyZmFjZSBhcmd1bWVudCBpcyB0aGUgaW50ZXJmYWNlIGluIHdoaWNoIGEgREhDUAorcmVxdWVzdCBfd291bGRfIGJlIHJlY2VpdmVkIGlmIGl0IHdhcyBjb21pbmcgZnJvbSB0aGUgY2xpZW50LCAKK3JhdGhlciB0aGFuIGJlaW5nIGZha2VkIHVwIGhlcmUuCisgICAKK1RoZSBhZGRyZXNzIGFyZ3VtZW50IGlzIGEgZG90dGVkLXF1YWQgSVAgYWRkcmVzc2VzIGFuZCBtYW5kYXRvcnkuIAorICAgCitUaGUgTUFDIGFkZHJlc3MgaXMgY29sb24gc2VwYXJhdGVkIGhleCwgYW5kIGlzIG1hbmRhdG9yeS4gSXQgbWF5IGJlIAorcHJlZml4ZWQgYnkgYW4gYWRkcmVzcy10eXBlIGJ5dGUgZm9sbG93ZWQgYnkgLSwgZWcKKworMTAtMTE6MjI6MzM6NDQ6NTU6NjYKKworYnV0IGlmIHRoZSBhZGRyZXNzLXR5cGUgYnl0ZSBpcyBtaXNzaW5nIGl0IGlzIGFzc3VtZWQgdG8gYmUgMSwgdGhlIHR5cGUgCitmb3IgZXRoZXJuZXQuIFRoaXMgZW5jb2RpbmcgaXMgdGhlIG9uZSB1c2VkIGluIGRuc21hc3EgbGVhc2UgZmlsZXMuCisKK1RoZSBjbGllbnQtaWQgaXMgb3B0aW9uYWwuIElmIGl0IGlzICIqIiB0aGVuIGl0IHRyZWF0ZWQgYXMgYmVpbmcgbWlzc2luZy4KKy5TSCBOT1RFUworTVVTVCBiZSBydW4gYXMgcm9vdCAtIHdpbGwgZmFpbCBvdGhlcndpc2UuCisuU0ggTElNSVRBVElPTlMKK09ubHkgdXNhYmxlIG9uIElQdjQgREhDUCBsZWFzZXMuCisuU0ggU0VFIEFMU08KKy5CUiBkbnNtYXNxICg4KQorLlNIIEFVVEhPUgorVGhpcyBtYW51YWwgcGFnZSB3YXMgd3JpdHRlbiBieSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPi4KKworCmRpZmYgLS1naXQgYS9jb250cmliL2xlYXNlLXRvb2xzL2RoY3BfcmVsZWFzZS5jIGIvY29udHJpYi9sZWFzZS10b29scy9kaGNwX3JlbGVhc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDFmY2QzCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9sZWFzZS10b29scy9kaGNwX3JlbGVhc2UuYwpAQCAtMCwwICsxLDMzMiBAQAorLyogQ29weXJpZ2h0IChjKSAyMDA2IFNpbW9uIEtlbGxleQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKi8KKworLyogZGhjcF9yZWxlYXNlIDxpbnRlcmZhY2U+IDxhZGRyZXNzPiA8TUFDIGFkZHJlc3M+IDxjbGllbnRfaWQ+CisgICBNVVNUIGJlIHJ1biBhcyByb290IC0gd2lsbCBmYWlsIG90aGVyd2lzZS4gKi8KKworLyogU2VuZCBhIERIQ1BSRUxFQVNFIG1lc3NhZ2UgdmlhIHRoZSBzcGVjaWZpZWQgaW50ZXJmYWNlIAorICAgdG8gdGVsbCB0aGUgbG9jYWwgREhDUCBzZXJ2ZXIgdG8gZGVsZXRlIGEgcGFydGljdWxhciBsZWFzZS4gCisgICAKKyAgIFRoZSBpbnRlcmZhY2UgYXJndW1lbnQgaXMgdGhlIGludGVyZmFjZSBpbiB3aGljaCBhIERIQ1AKKyAgIHJlcXVlc3QgX3dvdWxkXyBiZSByZWNlaXZlZCBpZiBpdCB3YXMgY29taW5nIGZyb20gdGhlIGNsaWVudCwgCisgICByYXRoZXIgdGhhbiBiZWluZyBmYWtlZCB1cCBoZXJlLgorICAgCisgICBUaGUgYWRkcmVzcyBhcmd1bWVudCBpcyBhIGRvdHRlZC1xdWFkIElQIGFkZHJlc3NlcyBhbmQgbWFuZGF0b3J5LiAKKyAgIAorICAgVGhlIE1BQyBhZGRyZXNzIGlzIGNvbG9uIHNlcGFyYXRlZCBoZXgsIGFuZCBpcyBtYW5kYXRvcnkuIEl0IG1heSBiZSAKKyAgIHByZWZpeGVkIGJ5IGFuIGFkZHJlc3MtdHlwZSBieXRlIGZvbGxvd2VkIGJ5IC0sIGVnCisKKyAgIDEwLTExOjIyOjMzOjQ0OjU1OjY2CisKKyAgIGJ1dCBpZiB0aGUgYWRkcmVzcy10eXBlIGJ5dGUgaXMgbWlzc2luZyBpdCBpcyBhc3N1bWVkIHRvIGJlIDEsIHRoZSB0eXBlIAorICAgZm9yIGV0aGVybmV0LiBUaGlzIGVuY29kaW5nIGlzIHRoZSBvbmUgdXNlZCBpbiBkbnNtYXNxIGxlYXNlIGZpbGVzLgorCisgICBUaGUgY2xpZW50LWlkIGlzIG9wdGlvbmFsLiBJZiBpdCBpcyAiKiIgdGhlbiBpdCB0cmVhdGVkIGFzIGJlaW5nIG1pc3NpbmcuCisqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+IAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxuZXQvaWZfYXJwLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CisjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2RlZmluZSBESENQX0NIQUREUl9NQVggICAgICAgICAgMTYKKyNkZWZpbmUgQk9PVFJFUVVFU1QgICAgICAgICAgICAgIDEKKyNkZWZpbmUgREhDUF9DT09LSUUgICAgICAgICAgICAgIDB4NjM4MjUzNjMKKyNkZWZpbmUgT1BUSU9OX1NFUlZFUl9JREVOVElGSUVSIDU0CisjZGVmaW5lIE9QVElPTl9DTElFTlRfSUQgICAgICAgICA2MQorI2RlZmluZSBPUFRJT05fTUVTU0FHRV9UWVBFICAgICAgNTMKKyNkZWZpbmUgT1BUSU9OX0VORCAgICAgICAgICAgICAgIDI1NQorI2RlZmluZSBESENQUkVMRUFTRSAgICAgICAgICAgICAgNworI2RlZmluZSBESENQX1NFUlZFUl9QT1JUICAgICAgICAgNjcKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHU4OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1MTY7Cit0eXBlZGVmIHVuc2lnbmVkIGludCB1MzI7CisKK3N0cnVjdCBkaGNwX3BhY2tldCB7CisgIHU4IG9wLCBodHlwZSwgaGxlbiwgaG9wczsKKyAgdTMyIHhpZDsKKyAgdTE2IHNlY3MsIGZsYWdzOworICBzdHJ1Y3QgaW5fYWRkciBjaWFkZHIsIHlpYWRkciwgc2lhZGRyLCBnaWFkZHI7CisgIHU4IGNoYWRkcltESENQX0NIQUREUl9NQVhdLCBzbmFtZVs2NF0sIGZpbGVbMTI4XTsKKyAgdTMyIGNvb2tpZTsKKyAgdW5zaWduZWQgY2hhciBvcHRpb25zWzMwOF07Cit9OworCitzdGF0aWMgc3RydWN0IGlvdmVjIGlvdjsKKworc3RhdGljIGludCBleHBhbmRfYnVmKHN0cnVjdCBpb3ZlYyAqaW92LCBzaXplX3Qgc2l6ZSkKK3sKKyAgdm9pZCAqbmV3OworCisgIGlmIChzaXplIDw9IGlvdi0+aW92X2xlbikKKyAgICByZXR1cm4gMTsKKworICBpZiAoIShuZXcgPSBtYWxsb2Moc2l6ZSkpKQorICAgIHsKKyAgICAgIGVycm5vID0gRU5PTUVNOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgIGlmIChpb3YtPmlvdl9iYXNlKQorICAgIHsKKyAgICAgIG1lbWNweShuZXcsIGlvdi0+aW92X2Jhc2UsIGlvdi0+aW92X2xlbik7CisgICAgICBmcmVlKGlvdi0+aW92X2Jhc2UpOworICAgIH0KKworICBpb3YtPmlvdl9iYXNlID0gbmV3OworICBpb3YtPmlvdl9sZW4gPSBzaXplOworCisgIHJldHVybiAxOworfQorCitzdGF0aWMgc3NpemVfdCBuZXRsaW5rX3JlY3YoaW50IGZkKQoreworICBzdHJ1Y3QgbXNnaGRyIG1zZzsKKyAgc3NpemVfdCByYzsKKworICBtc2cubXNnX2NvbnRyb2wgPSBOVUxMOworICBtc2cubXNnX2NvbnRyb2xsZW4gPSAwOworICBtc2cubXNnX25hbWUgPSBOVUxMOworICBtc2cubXNnX25hbWVsZW4gPSAwOworICBtc2cubXNnX2lvdiA9ICZpb3Y7CisgIG1zZy5tc2dfaW92bGVuID0gMTsKKyAgICAKKyAgd2hpbGUgKDEpCisgICAgeworICAgICAgbXNnLm1zZ19mbGFncyA9IDA7CisgICAgICB3aGlsZSAoKHJjID0gcmVjdm1zZyhmZCwgJm1zZywgTVNHX1BFRUspKSA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUik7CisgICAgICAKKyAgICAgIC8qIDIuMi54IGRvZXNuJ3Qgc3VwcG9ydCBNU0dfUEVFSyBhdCBhbGwsIHJldHVybmluZyBFT1BOT1RTVVBQLCBzbyB3ZSBqdXN0IGdyYWIgYSAKKyAgICAgICAgIGJpZyBidWZmZXIgYW5kIHByYXkgaW4gdGhhdCBjYXNlLiAqLworICAgICAgaWYgKHJjID09IC0xICYmIGVycm5vID09IEVPUE5PVFNVUFApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoIWV4cGFuZF9idWYoJmlvdiwgMjAwMCkpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIAorICAgICAgaWYgKHJjID09IC0xIHx8ICEobXNnLm1zZ19mbGFncyAmIE1TR19UUlVOQykpCisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICBpZiAoIWV4cGFuZF9idWYoJmlvdiwgaW92Lmlvdl9sZW4gKyAxMDApKQorICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgIC8qIGZpbmFsbHksIHJlYWQgaXQgZm9yIHJlYWwgKi8KKyAgd2hpbGUgKChyYyA9IHJlY3Ztc2coZmQsICZtc2csIDApKSA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUik7CisgIAorICByZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfaGV4KGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsIGludCBtYXhsZW4sIGludCAqbWFjX3R5cGUpCit7CisgIGludCBpID0gMDsKKyAgY2hhciAqcjsKKyAgICAKKyAgaWYgKG1hY190eXBlKQorICAgICptYWNfdHlwZSA9IDA7CisgIAorICB3aGlsZSAobWF4bGVuID09IC0xIHx8IGkgPCBtYXhsZW4pCisgICAgeworICAgICAgZm9yIChyID0gaW47ICpyICE9IDAgJiYgKnIgIT0gJzonICYmICpyICE9ICctJzsgcisrKTsKKyAgICAgIGlmICgqciA9PSAwKQorICAgICAgICBtYXhsZW4gPSBpOworICAgICAgCisgICAgICBpZiAociAhPSBpbiApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoKnIgPT0gJy0nICYmIGkgPT0gMCAmJiBtYWNfdHlwZSkKKyAgICAgICAgICAgeworICAgICAgICAgICAgICAqciA9IDA7CisgICAgICAgICAgICAgICptYWNfdHlwZSA9IHN0cnRvbChpbiwgTlVMTCwgMTYpOworICAgICAgICAgICAgICBtYWNfdHlwZSA9IE5VTEw7CisgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICpyID0gMDsKKwkgICAgICBvdXRbaV0gPSBzdHJ0b2woaW4sIE5VTEwsIDE2KTsKKyAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBpbiA9IHIrMTsKKyAgICB9CisgICAgcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgaXNfc2FtZV9uZXQoc3RydWN0IGluX2FkZHIgYSwgc3RydWN0IGluX2FkZHIgYiwgc3RydWN0IGluX2FkZHIgbWFzaykKK3sKKyAgcmV0dXJuIChhLnNfYWRkciAmIG1hc2suc19hZGRyKSA9PSAoYi5zX2FkZHIgJiBtYXNrLnNfYWRkcik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaW5fYWRkciBmaW5kX2ludGVyZmFjZShzdHJ1Y3QgaW5fYWRkciBjbGllbnQsIGludCBmZCwgdW5zaWduZWQgaW50IGluZGV4KQoreworICBzdHJ1Y3Qgc29ja2FkZHJfbmwgYWRkcjsKKyAgc3RydWN0IG5sbXNnaGRyICpoOworICBzc2l6ZV90IGxlbjsKKyAKKyAgc3RydWN0IHsKKyAgICBzdHJ1Y3Qgbmxtc2doZHIgbmxoOworICAgIHN0cnVjdCBydGdlbm1zZyBnOyAKKyAgfSByZXE7CisKKyAgYWRkci5ubF9mYW1pbHkgPSBBRl9ORVRMSU5LOworICBhZGRyLm5sX3BhZCA9IDA7CisgIGFkZHIubmxfZ3JvdXBzID0gMDsKKyAgYWRkci5ubF9waWQgPSAwOyAvKiBhZGRyZXNzIHRvIGtlcm5lbCAqLworCisgIHJlcS5ubGgubmxtc2dfbGVuID0gc2l6ZW9mKHJlcSk7CisgIHJlcS5ubGgubmxtc2dfdHlwZSA9IFJUTV9HRVRBRERSOworICByZXEubmxoLm5sbXNnX2ZsYWdzID0gTkxNX0ZfUk9PVCB8IE5MTV9GX01BVENIIHwgTkxNX0ZfUkVRVUVTVCB8IE5MTV9GX0FDSzsgCisgIHJlcS5ubGgubmxtc2dfcGlkID0gMDsKKyAgcmVxLm5saC5ubG1zZ19zZXEgPSAxOworICByZXEuZy5ydGdlbl9mYW1pbHkgPSBBRl9JTkVUOyAKKworICBpZiAoc2VuZHRvKGZkLCAodm9pZCAqKSZyZXEsIHNpemVvZihyZXEpLCAwLCAKKwkgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkciwgc2l6ZW9mKGFkZHIpKSA9PSAtMSkKKyAgICB7CisgICAgICBwZXJyb3IoInNlbmR0byBmYWlsZWQiKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorICAKKyAgd2hpbGUgKDEpCisgICAgeworICAgICAgaWYgKChsZW4gPSBuZXRsaW5rX3JlY3YoZmQpKSA9PSAtMSkKKwl7CisJICBwZXJyb3IoIm5ldGxpbmsiKTsKKwkgIGV4aXQoMSk7CisJfQorCisgICAgICBmb3IgKGggPSAoc3RydWN0IG5sbXNnaGRyICopaW92Lmlvdl9iYXNlOyBOTE1TR19PSyhoLCAoc2l6ZV90KWxlbik7IGggPSBOTE1TR19ORVhUKGgsIGxlbikpCisJaWYgKGgtPm5sbXNnX3R5cGUgPT0gTkxNU0dfRE9ORSkKKwkgIGV4aXQoMCk7CisJZWxzZSBpZiAoaC0+bmxtc2dfdHlwZSA9PSBSVE1fTkVXQUREUikKKyAgICAgICAgICB7CisgICAgICAgICAgICBzdHJ1Y3QgaWZhZGRybXNnICppZmEgPSBOTE1TR19EQVRBKGgpOyAgCisgICAgICAgICAgICBzdHJ1Y3QgcnRhdHRyICpydGE7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGVuMSA9IGgtPm5sbXNnX2xlbiAtIE5MTVNHX0xFTkdUSChzaXplb2YoKmlmYSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaWZhLT5pZmFfaW5kZXggPT0gaW5kZXggJiYgaWZhLT5pZmFfZmFtaWx5ID09IEFGX0lORVQpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgaW5fYWRkciBuZXRtYXNrLCBhZGRyOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG5ldG1hc2suc19hZGRyID0gaHRvbmwoMHhmZmZmZmZmZiA8PCAoMzIgLSBpZmEtPmlmYV9wcmVmaXhsZW4pKTsKKyAgICAgICAgICAgICAgICBhZGRyLnNfYWRkciA9IDA7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yIChydGEgPSBJRkFfUlRBKGlmYSk7IFJUQV9PSyhydGEsIGxlbjEpOyBydGEgPSBSVEFfTkVYVChydGEsIGxlbjEpKQorCQkgIGlmIChydGEtPnJ0YV90eXBlID09IElGQV9MT0NBTCkKKwkJICAgIGFkZHIgPSAqKChzdHJ1Y3QgaW5fYWRkciAqKShydGErMSkpOworCQkKKyAgICAgICAgICAgICAgICBpZiAoYWRkci5zX2FkZHIgJiYgaXNfc2FtZV9uZXQoYWRkciwgY2xpZW50LCBuZXRtYXNrKSkKKwkJICByZXR1cm4gYWRkcjsKKwkgICAgICB9CisJICB9CisgICAgfQorIAorICBleGl0KDApOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7IAorICBzdHJ1Y3QgaW5fYWRkciBzZXJ2ZXIsIGxlYXNlOworICBpbnQgbWFjX3R5cGU7CisgIHN0cnVjdCBkaGNwX3BhY2tldCBwYWNrZXQ7CisgIHVuc2lnbmVkIGNoYXIgKnAgPSBwYWNrZXQub3B0aW9uczsKKyAgc3RydWN0IHNvY2thZGRyX2luIGRlc3Q7CisgIHN0cnVjdCBpZnJlcSBpZnI7CisgIGludCBmZCA9IHNvY2tldChQRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCk7CisgIGludCBubCA9IHNvY2tldChBRl9ORVRMSU5LLCBTT0NLX1JBVywgTkVUTElOS19ST1VURSk7CisKKyAgaWYgKGFyZ2MgPCA0IHx8IGFyZ2MgPiA1KQorICAgIHsgCisgICAgICBmcHJpbnRmKHN0ZGVyciwgInVzYWdlOiBkaGNwX3JlbGVhc2UgPGludGVyZmFjZT4gPGFkZHI+IDxtYWM+IFs8Y2xpZW50X2lkPl1cbiIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisKKyAgaWYgKGZkID09IC0xIHx8IG5sID09IC0xKQorICAgIHsKKyAgICAgIHBlcnJvcigiY2Fubm90IGNyZWF0ZSBzb2NrZXQiKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorICAKKyAgLyogVGhpcyB2b29kb28gZmFrZXMgdXAgYSBwYWNrZXQgY29taW5nIGZyb20gdGhlIGNvcnJlY3QgaW50ZXJmYWNlLCB3aGljaCByZWFsbHkgbWF0dGVycyBmb3IgCisgICAgIGEgREhDUCBzZXJ2ZXIgKi8KKyAgc3RyY3B5KGlmci5pZnJfbmFtZSwgYXJndlsxXSk7CisgIGlmIChzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19CSU5EVE9ERVZJQ0UsICZpZnIsIHNpemVvZihpZnIpKSA9PSAtMSkKKyAgICB7CisgICAgICBwZXJyb3IoImNhbm5vdCBzZXR1cCBpbnRlcmZhY2UiKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorICAKKyAgaWYgKGluZXRfYWRkcihhcmd2WzJdKSA9PSBJTkFERFJfTk9ORSkKKyAgICB7CisgICAgICBwZXJyb3IoImludmFsaWQgaXAgYWRkcmVzcyIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgIAorICBsZWFzZS5zX2FkZHIgPSBpbmV0X2FkZHIoYXJndlsyXSk7CisgIHNlcnZlciA9IGZpbmRfaW50ZXJmYWNlKGxlYXNlLCBubCwgaWZfbmFtZXRvaW5kZXgoYXJndlsxXSkpOworICAKKyAgbWVtc2V0KCZwYWNrZXQsIDAsIHNpemVvZihwYWNrZXQpKTsKKyAKKyAgcGFja2V0LmhsZW4gPSBwYXJzZV9oZXgoYXJndlszXSwgcGFja2V0LmNoYWRkciwgREhDUF9DSEFERFJfTUFYLCAmbWFjX3R5cGUpOworICBpZiAobWFjX3R5cGUgPT0gMCkKKyAgICBwYWNrZXQuaHR5cGUgPSBBUlBIUkRfRVRIRVI7CisgIGVsc2UKKyAgICBwYWNrZXQuaHR5cGUgPSBtYWNfdHlwZTsKKworICBwYWNrZXQub3AgPSBCT09UUkVRVUVTVDsKKyAgcGFja2V0LmNpYWRkciA9IGxlYXNlOworICBwYWNrZXQuY29va2llID0gaHRvbmwoREhDUF9DT09LSUUpOworCisgICoocCsrKSA9IE9QVElPTl9NRVNTQUdFX1RZUEU7CisgICoocCsrKSA9IDE7CisgICoocCsrKSA9IERIQ1BSRUxFQVNFOworCisgICoocCsrKSA9IE9QVElPTl9TRVJWRVJfSURFTlRJRklFUjsKKyAgKihwKyspID0gc2l6ZW9mKHNlcnZlcik7CisgIG1lbWNweShwLCAmc2VydmVyLCBzaXplb2Yoc2VydmVyKSk7CisgIHAgKz0gc2l6ZW9mKHNlcnZlcik7CisKKyAgaWYgKGFyZ2MgPT0gNSAmJiBzdHJjbXAoYXJndls0XSwgIioiKSAhPSAwKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGludCBjbGlkX2xlbiA9IHBhcnNlX2hleChhcmd2WzRdLCBwKzIsIDI1NSwgTlVMTCk7CisgICAgICAqKHArKykgPSBPUFRJT05fQ0xJRU5UX0lEOworICAgICAgKihwKyspID0gY2xpZF9sZW47CisgICAgICBwICs9IGNsaWRfbGVuOworICAgIH0KKyAgCisgICoocCsrKSA9IE9QVElPTl9FTkQ7CisgCisgIGRlc3Quc2luX2ZhbWlseSA9IEFGX0lORVQ7CisgIGRlc3Quc2luX3BvcnQgPSBudG9ocyhESENQX1NFUlZFUl9QT1JUKTsKKyAgZGVzdC5zaW5fYWRkciA9IHNlcnZlcjsKKworICBpZiAoc2VuZHRvKGZkLCAmcGFja2V0LCBzaXplb2YocGFja2V0KSwgMCwgCisJICAgICAoc3RydWN0IHNvY2thZGRyICopJmRlc3QsIHNpemVvZihkZXN0KSkgPT0gLTEpCisgICAgeworICAgICAgcGVycm9yKCJzZW5kdG8gZmFpbGVkIik7CisgICAgICBleGl0KDEpOworICAgIH0KKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvbGVhc2UtdG9vbHMvZGhjcF9yZWxlYXNlNi4xIGIvY29udHJpYi9sZWFzZS10b29scy9kaGNwX3JlbGVhc2U2LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzYzZTAxYwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvbGVhc2UtdG9vbHMvZGhjcF9yZWxlYXNlNi4xCkBAIC0wLDAgKzEsMzggQEAKKy5USCBESENQX1JFTEVBU0UgMQorLlNIIE5BTUUKK2RoY3BfcmVsZWFzZTYgXC0gUmVsZWFzZSBhIERIQ1B2NiBsZWFzZSBvbiBhIHRoZSBsb2NhbCBkbnNtYXNxIERIQ1Agc2VydmVyLgorLlNIIFNZTk9QU0lTCisuQiBkaGNwX3JlbGVhc2U2IC0taWZhY2UgPGludGVyZmFjZT4gLS1jbGllbnQtaWQgPGNsaWVudC1pZD4gLS1zZXJ2ZXItaWQKK3NlcnZlci1pZCAtLWlhaWQgPGlhaWQ+ICAtLWlwIDxJUD4gIFstLWRyeS1ydW5dIFstLWhlbHBdCisuU0ggIkRFU0NSSVBUSU9OIgorQSB1dGlsaXR5IHdoaWNoIGZvcmNlcyB0aGUgREhDUCBzZXJ2ZXIgcnVubmluZyBvbiB0aGlzIG1hY2hpbmUgdG8gcmVsZWFzZSBhIAorREhDUHY2IGxlYXNlLgorLlNTIE9QVElPTlMKKy5JUCAiLWEsIC0taXAiCitJUHY2IGFkZHJlc3MgdG8gcmVsZWFzZS4KKy5JUCAiLWMsIC0tY2xpZW50LWlkIgorQ29sb24tc2VwYXJhdGVkIGhleCBzdHJpbmcgcmVwcmVzZW50aW5nIERIQ1B2NiBjbGllbnQgaWQuIE5vcm1hbGx5CitpdCBjYW4gYmUgZm91bmQgaW4gbGVhc2VzIGZpbGUgYm90aCBvbiBjbGllbnQgYW5kIHNlcnZlci4KKy5JUCAiLWQsIC0tZHJ5LXJ1biIKK1ByaW50IGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIGdlbmVyYXRlZCBESENQdjYgcmVsZWFzZSBwYWNrZXQgdG8gc3RhbmRhcmQKK291dHB1dCBhbmQgZXhpdC4KKy5JUCAiLWgsIC0taGVscCIKK3ByaW50IHVzYWdlIGluZm9ybWF0aW9uIHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdC4KKy5JUCAiLWksIC0taWFpZCIKK0RlY2ltYWwgcmVwcmVzZW50YXRpb24gb2YgREhDUHY2IElBSUQuIE5vcm1hbGx5IGl0IGNhbiBiZSBmb3VuZCBpbiBsZWFzZXMgZmlsZQorYm90aCBvbiBjbGllbnQgYW5kIHNlcnZlci4KKy5JUCAiLW4sIC0taWZhY2UiCitOZXR3b3JrIGludGVyZmFjZSB0byBzZW5kIGEgREhDUHY2IHJlbGVhc2UgcGFja2V0IGZyb20uCisuSVAgIi1zLCAtLXNlcnZlci1pZCIKK0NvbG9uLXNlcGFyYXRlZCBoZXggc3RyaW5nIHJlcHJlc2VudGluZyBESENQdjYgc2VydmVyIGlkLiBOb3JtYWxseQoraXQgY2FuIGJlIGZvdW5kIGluIGxlYXNlcyBmaWxlIGJvdGggb24gY2xpZW50IGFuZCBzZXJ2ZXIuCisuU0ggTk9URVMKK01VU1QgYmUgcnVuIGFzIHJvb3QgLSB3aWxsIGZhaWwgb3RoZXJ3aXNlLgorLlNIIExJTUlUQVRJT05TCitPbmx5IHVzYWJsZSBvbiBJUHY2IERIQ1AgbGVhc2VzLgorLlNIIFNFRSBBTFNPCisuQlIgZG5zbWFzcSAoOCkKKy5TSCBBVVRIT1IKK1RoaXMgbWFudWFsIHBhZ2Ugd2FzIHdyaXR0ZW4gYnkgU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4uCisKKwpkaWZmIC0tZ2l0IGEvY29udHJpYi9sZWFzZS10b29scy9kaGNwX3JlbGVhc2U2LmMgYi9jb250cmliL2xlYXNlLXRvb2xzL2RoY3BfcmVsZWFzZTYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTBiZWZmCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9sZWFzZS10b29scy9kaGNwX3JlbGVhc2U2LmMKQEAgLTAsMCArMSw0NDUgQEAKKy8qCisgZGhjcF9yZWxlYXNlNiAtLWlmYWNlIDxpbnRlcmZhY2U+IC0tY2xpZW50LWlkIDxjbGllbnQtaWQ+IC0tc2VydmVyLWlkCisgc2VydmVyLWlkIC0taWFpZCA8aWFpZD4gIC0taXAgPElQPiAgWy0tZHJ5LXJ1bl0gWy0taGVscF0KKyBNVVNUIGJlIHJ1biBhcyByb290IC0gd2lsbCBmYWlsIG90aGVyd2lzZQorICovCisKKy8qIFNlbmQgYSBESENQUkVMRUFTRSBtZXNzYWdlICB0byBJUHY2IG11bHRpY2FzdCBhZGRyZXNzICB2aWEgdGhlIHNwZWNpZmllZCBpbnRlcmZhY2UKKyB0byB0ZWxsIHRoZSBsb2NhbCBESENQIHNlcnZlciB0byBkZWxldGUgYSBwYXJ0aWN1bGFyIGxlYXNlLgorIAorIFRoZSBpbnRlcmZhY2UgYXJndW1lbnQgaXMgdGhlIGludGVyZmFjZSBpbiB3aGljaCBhIERIQ1AKKyByZXF1ZXN0IF93b3VsZF8gYmUgcmVjZWl2ZWQgaWYgaXQgd2FzIGNvbWluZyBmcm9tIHRoZSBjbGllbnQsCisgcmF0aGVyIHRoYW4gYmVpbmcgZmFrZWQgdXAgaGVyZS4KKyAKKyBUaGUgY2xpZW50LWlkIGFyZ3VtZW50IGlzIGNvbG9uLXNlcGFyYXRlZCBoZXggc3RyaW5nIGFuZCBtYW5kYXRvcnkuIE5vcm1hbGx5CisgaXQgY2FuIGJlIGZvdW5kIGluIGxlYXNlcyBmaWxlIGJvdGggb24gY2xpZW50IGFuZCBzZXJ2ZXIKKworIFRoZSBzZXJ2ZXItaWQgYXJndW1lbnQgaXMgY29sb24tc2VwYXJhdGVkIGhleCBzdHJpbmcgYW5kIG1hbmRhdG9yeS4gTm9ybWFsbHkKKyBpdCBjYW4gYmUgZm91bmQgaW4gbGVhc2VzIGZpbGUgYm90aCBvbiBjbGllbnQgYW5kIHNlcnZlci4KKyAKKyBUaGUgaWFpZCBhcmd1bWVudCBpcyBudW1lcmljIHN0cmluZyBhbmQgbWFuZGF0b3J5LiBOb3JtYWxseQorIGl0IGNhbiBiZSBmb3VuZCBpbiBsZWFzZXMgZmlsZSBib3RoIG9uIGNsaWVudCBhbmQgc2VydmVyLgorIAorIElQIGlzIGFuIElQdjYgYWRkcmVzcyB0byByZWxlYXNlCisgCisgSWYgLS1kcnktcnVuIGlzIHNwZWNpZmllZCwgZGhjcF9yZWxlYXNlNiBqdXN0IHByaW50cyBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZgorIHBhY2tldCB0byBzZW5kIHRvIHN0ZG91dCBhbmQgZXhpdHMuCisgCisgSWYgLS1oZWxwIGlzIHNwZWNpZmllZCwgZGhjcF9yZWxlYXNlNiBwcmludCB1c2FnZSBpbmZvcm1hdGlvbiB0byBzdGRvdXQgYW5kIGV4aXRzCisgCisgCisgCisgKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2RlZmluZSBOT1RfUkVQTFlfQ09ERSAxMTUKK3R5cGVkZWYgdW5zaWduZWQgY2hhciB1ODsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgdTE2OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgdTMyOworCitlbnVtIERIQ1A2X1RZUEVTeworICAgIFNPTElDSVQgPSAxLAorICAgIEFEVkVSVElTRSA9IDIsCisgICAgUkVRVUVTVCA9IDMsCisgICAgQ09ORklSTSA9IDQsCisgICAgUkVORVcgPSA1LAorICAgIFJFQklORCA9IDYsCisgICAgUkVQTFkgPSA3LAorICAgIFJFTEVBU0UgPSA4LAorICAgIERFQ0xJTkUgPSA5LAorICAgIFJFQ09ORklHVVJFID0gMTAsCisgICAgSU5GT1JNQVRJT05fUkVRVUVTVCA9IDExLAorICAgIFJFTEFZX0ZPUlcgPSAxMiwKKyAgICBSRUxBWV9SRVBMID0gMTMKKyAgICAKK307CitlbnVtIERIQ1A2X09QVElPTlN7CisgICAgQ0xJRU5USUQgPSAxLAorICAgIFNFUlZFUklEID0gMiwKKyAgICBJQV9OQSA9IDMsCisgICAgSUFfVEEgPSA0LAorICAgIElBQUREUiA9IDUsCisgICAgT1JPID0gNiwKKyAgICBQUkVGRVJFTkNFID0gNywKKyAgICBFTEFQU0VEX1RJTUUgPSA4LAorICAgIFJFTEFZX01TRyA9IDksCisgICAgQVVUSCA9IDExLAorICAgIFVOSUNBU1QgPSAxMiwKKyAgICBTVEFUVVNfQ09ERSA9IDEzLAorICAgIFJBUElEX0NPTU1JVCA9IDE0LAorICAgIFVTRVJfQ0xBU1MgPSAxNSwKKyAgICBWRU5ET1JfQ0xBU1MgPSAxNiwKKyAgICBWRU5ET1JfT1BUUyA9IDE3LAorICAgIElOVEVSRkFDRV9JRCA9IDE4LAorICAgIFJFQ09ORl9NU0cgPSAxOSwKKyAgICBSRUNPTkZfQUNDRVBUID0gMjAsCit9OworCitlbnVtIERIQ1A2X1NUQVRVU0VTeworICAgIFNVQ0NFU1MgPSAwLAorICAgIFVOU1BFQ19GQUlMID0gMSwKKyAgICBOT0FERFJfQVZBSUw9MiwKKyAgICBOT19CSU5ESU5HICA9IDMsCisgICAgTk9UX09OX0xJTksgPSA0LAorICAgIFVTRV9NVUxUSUNBU1QgPTUKK307CitzdGF0aWMgc3RydWN0IG9wdGlvbiBsb25nb3B0c1tdID0geworICAgIHsiaXAiLCByZXF1aXJlZF9hcmd1bWVudCwgMCwgJ2EnfSwKKyAgICB7InNlcnZlci1pZCIsIHJlcXVpcmVkX2FyZ3VtZW50LCAwLCAncyd9LAorICAgIHsiY2xpZW50LWlkIiwgcmVxdWlyZWRfYXJndW1lbnQsIDAsICdjJ30sCisgICAgeyJpZmFjZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCAwLCAnbid9LAorICAgIHsiaWFpZCIsIHJlcXVpcmVkX2FyZ3VtZW50LCAwLCAnaSd9LAorICAgIHsiZHJ5LXJ1biIsIG5vX2FyZ3VtZW50LCAwLCAnZCd9LAorICAgIHsiaGVscCIsIG5vX2FyZ3VtZW50LCAwLCAnaCd9LAorICAgIHswLCAgICAgMCwgICAgICAgICAgIDAsICAgMH0KK307CisKK2NvbnN0IHNob3J0IERIQ1A2X0NMSUVOVF9QT1JUID0gNTQ2OworY29uc3Qgc2hvcnQgREhDUDZfU0VSVkVSX1BPUlQgPSA1NDc7CisKK2NvbnN0IGNoYXIqICBESENQNl9NVUxUSUNBU1RfQUREUkVTUyA9ICJmZjAyOjoxOjIiOworCitzdHJ1Y3QgZGhjcDZfb3B0aW9ueworICAgIHVpbnQxNl90IHR5cGU7CisgICAgdWludDE2X3QgbGVuOworICAgIGNoYXIgIHZhbHVlWzEwMjRdOworfTsKKworc3RydWN0IGRoY3A2X2lhYWRkcl9vcHRpb257CisgICAgdWludDE2X3QgdHlwZTsKKyAgICB1aW50MTZfdCBsZW47CisgICAgc3RydWN0IGluNl9hZGRyIGlwOworICAgIHVpbnQzMl90IHByZWZlcnJlZF9saWZldGltZTsKKyAgICB1aW50MzJfdCB2YWxpZF9saWZldGltZTsKKyAgICAKKyAgICAKK307CisKK3N0cnVjdCBkaGNwNl9pYW5hX29wdGlvbnsKKyAgICB1aW50MTZfdCB0eXBlOworICAgIHVpbnQxNl90IGxlbjsKKyAgICB1aW50MzJfdCBpYWlkOworICAgIHVpbnQzMl90IHQxOworICAgIHVpbnQzMl90IHQyOworICAgIGNoYXIgb3B0aW9uc1sxMDI0XTsKK307CisKKworc3RydWN0IGRoY3A2X3BhY2tldHsKKyAgICBzaXplX3QgbGVuOworICAgIGNoYXIgYnVmWzIwNDhdOworICAgIAorfSA7CisKK3NpemVfdCBwYWNrX2R1aWQoY29uc3QgY2hhciogc3RyLCBjaGFyKiBkc3QpeworICAgIAorICAgIGNoYXIqIHRtcCA9IHN0cmR1cChzdHIpOworICAgIGNoYXIqIHRtcF90b19mcmVlID0gdG1wOworICAgIGNoYXIgKnB0cjsKKyAgICB1aW50OF90IHdyaXRlX3BvcyA9IDA7CisgICAgd2hpbGUgKChwdHIgPSBzdHJ0b2sgKHRtcCwgIjoiKSkpIHsKKyAgICAgICAgZHN0W3dyaXRlX3Bvc10gPSAodWludDhfdCkgc3RydG9sKHB0ciwgTlVMTCwgMTYpOworICAgICAgICB3cml0ZV9wb3MgKz0gMTsKKyAgICAgICAgdG1wID0gTlVMTDsKKyAgICAgICAgCisgICAgfQorICAgIGZyZWUodG1wX3RvX2ZyZWUpOworICAgIHJldHVybiB3cml0ZV9wb3M7Cit9CisKK3N0cnVjdCBkaGNwNl9vcHRpb24gY3JlYXRlX2NsaWVudF9pZF9vcHRpb24oY29uc3QgY2hhciogZHVpZCl7CisgICAgc3RydWN0IGRoY3A2X29wdGlvbiBvcHRpb247CisgICAgb3B0aW9uLnR5cGUgPSBodG9ucyhDTElFTlRJRCk7CisgICAgYnplcm8ob3B0aW9uLnZhbHVlLCBzaXplb2Yob3B0aW9uLnZhbHVlKSk7CisgICAgb3B0aW9uLmxlbiAgPSBodG9ucyhwYWNrX2R1aWQoZHVpZCwgb3B0aW9uLnZhbHVlKSk7CisgICAgcmV0dXJuIG9wdGlvbjsKK30KKworc3RydWN0IGRoY3A2X29wdGlvbiBjcmVhdGVfc2VydmVyX2lkX29wdGlvbihjb25zdCBjaGFyKiBkdWlkKXsKKyAgICBzdHJ1Y3QgZGhjcDZfb3B0aW9uICAgb3B0aW9uOworICAgIG9wdGlvbi50eXBlID0gaHRvbnMoU0VSVkVSSUQpOworICAgIGJ6ZXJvKG9wdGlvbi52YWx1ZSwgc2l6ZW9mKG9wdGlvbi52YWx1ZSkpOworICAgIG9wdGlvbi5sZW4gID0gaHRvbnMocGFja19kdWlkKGR1aWQsIG9wdGlvbi52YWx1ZSkpOworICAgIHJldHVybiBvcHRpb247Cit9CisKK3N0cnVjdCBkaGNwNl9pYWFkZHJfb3B0aW9uIGNyZWF0ZV9pYWFkcl9vcHRpb24oY29uc3QgY2hhciogaXApeworICAgIHN0cnVjdCBkaGNwNl9pYWFkZHJfb3B0aW9uIHJlc3VsdDsKKyAgICByZXN1bHQudHlwZSA9aHRvbnMoSUFBRERSKTsKKyAgICAvKiBubyBzdWJvcHRpb25zIG5lZWRlZCBoZXJlLCBzbyBsZW5ndGggaXMgMjQgICovCisgICAgcmVzdWx0LmxlbiA9IGh0b25zKDI0KTsKKyAgICByZXN1bHQucHJlZmVycmVkX2xpZmV0aW1lID0gMDsKKyAgICByZXN1bHQudmFsaWRfbGlmZXRpbWUgPSAwOworICAgIGludCBzID0gaW5ldF9wdG9uKEFGX0lORVQ2LCBpcCwgJihyZXN1bHQuaXApKTsKKyAgICBpZiAocyA8PSAwKSB7CisgICAgICAgIGlmIChzID09IDApCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk5vdCBpbiBwcmVzZW50YXRpb24gZm9ybWF0Iik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBlcnJvcigiaW5ldF9wdG9uIik7CisgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KK3N0cnVjdCBkaGNwNl9pYW5hX29wdGlvbiAgY3JlYXRlX2lhbmFfb3B0aW9uKGNvbnN0IGNoYXIgKiBpYWlkLCBzdHJ1Y3QgZGhjcDZfaWFhZGRyX29wdGlvbiAgaWFfYWRkcil7CisgICAgc3RydWN0IGRoY3A2X2lhbmFfb3B0aW9uICByZXN1bHQ7CisgICAgcmVzdWx0LnR5cGUgPSBodG9ucyhJQV9OQSk7CisgICAgcmVzdWx0LmlhaWQgPSBodG9ubChhdG9pKGlhaWQpKTsKKyAgICByZXN1bHQudDEgPSAwOworICAgIHJlc3VsdC50MiA9IDA7CisgICAgcmVzdWx0LmxlbiA9IGh0b25zKDEyICsgbnRvaHMoaWFfYWRkci5sZW4pICsgMiAqIHNpemVvZih1aW50MTZfdCkpOworICAgIG1lbWNweShyZXN1bHQub3B0aW9ucywgJmlhX2FkZHIsIG50b2hzKGlhX2FkZHIubGVuKSArIDIgKiBzaXplb2YodWludDE2X3QpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdHJ1Y3QgZGhjcDZfcGFja2V0IGNyZWF0ZV9yZWxlYXNlX3BhY2tldChjb25zdCBjaGFyKiBpYWlkLCBjb25zdCBjaGFyKiBpcCwgY29uc3QgY2hhciogY2xpZW50X2lkLCBjb25zdCBjaGFyKiBzZXJ2ZXJfaWQpeworICAgIHN0cnVjdCBkaGNwNl9wYWNrZXQgcmVzdWx0OworICAgIGJ6ZXJvKHJlc3VsdC5idWYsIHNpemVvZihyZXN1bHQuYnVmKSk7CisgICAgLyogbWVzc2FnZV90eXBlICovCisgICAgcmVzdWx0LmJ1ZlswXSA9IFJFTEVBU0U7CisgICAgLyogdHhfaWQgKi8KKyAgICBiemVybyhyZXN1bHQuYnVmKzEsIDMpOworICAgIAorICAgIHN0cnVjdCBkaGNwNl9vcHRpb24gY2xpZW50X29wdGlvbiA9IGNyZWF0ZV9jbGllbnRfaWRfb3B0aW9uKGNsaWVudF9pZCk7CisgICAgc3RydWN0IGRoY3A2X29wdGlvbiBzZXJ2ZXJfb3B0aW9uID0gY3JlYXRlX3NlcnZlcl9pZF9vcHRpb24oc2VydmVyX2lkKTsKKyAgICBzdHJ1Y3QgZGhjcDZfaWFhZGRyX29wdGlvbiBpYWFkZHJfb3B0aW9uID0gY3JlYXRlX2lhYWRyX29wdGlvbihpcCk7CisgICAgc3RydWN0IGRoY3A2X2lhbmFfb3B0aW9uIGlhbmFfb3B0aW9uID0gY3JlYXRlX2lhbmFfb3B0aW9uKGlhaWQsIGlhYWRkcl9vcHRpb24pOworICAgIGludCBvZmZzZXQgPSA0OworICAgIG1lbWNweShyZXN1bHQuYnVmICsgb2Zmc2V0LCAmY2xpZW50X29wdGlvbiwgbnRvaHMoY2xpZW50X29wdGlvbi5sZW4pICsgMipzaXplb2YodWludDE2X3QpKTsKKyAgICBvZmZzZXQgKz0gKG50b2hzKGNsaWVudF9vcHRpb24ubGVuKSsgMiAqc2l6ZW9mKHVpbnQxNl90KSApOworICAgIG1lbWNweShyZXN1bHQuYnVmICsgb2Zmc2V0LCAmc2VydmVyX29wdGlvbiwgbnRvaHMoc2VydmVyX29wdGlvbi5sZW4pICsgMipzaXplb2YodWludDE2X3QpICk7CisgICAgb2Zmc2V0ICs9IChudG9ocyhzZXJ2ZXJfb3B0aW9uLmxlbikrIDIqIHNpemVvZih1aW50MTZfdCkpOworICAgIG1lbWNweShyZXN1bHQuYnVmICsgb2Zmc2V0LCAmaWFuYV9vcHRpb24sIG50b2hzKGlhbmFfb3B0aW9uLmxlbikgKyAyKnNpemVvZih1aW50MTZfdCkgKTsKKyAgICBvZmZzZXQgKz0gKG50b2hzKGlhbmFfb3B0aW9uLmxlbikrIDIqIHNpemVvZih1aW50MTZfdCkpOworICAgIHJlc3VsdC5sZW4gPSBvZmZzZXQ7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordWludDE2X3QgcGFyc2VfaWFuYV9zdWJvcHRpb24oY2hhciogYnVmLCBzaXplX3QgbGVuKXsKKyAgICBzaXplX3QgY3VycmVudF9wb3MgPSAwOworICAgIGNoYXIgb3B0aW9uX3ZhbHVlWzEwMjRdOworICAgIHdoaWxlIChjdXJyZW50X3BvcyA8IGxlbikgeworICAgICAgICB1aW50MTZfdCBvcHRpb25fdHlwZSwgb3B0aW9uX2xlbjsKKyAgICAgICAgbWVtY3B5KCZvcHRpb25fdHlwZSxidWYgKyBjdXJyZW50X3Bvcywgc2l6ZW9mKHVpbnQxNl90KSk7CisgICAgICAgIG1lbWNweSgmb3B0aW9uX2xlbixidWYgKyBjdXJyZW50X3BvcyArIHNpemVvZih1aW50MTZfdCksIHNpemVvZih1aW50MTZfdCkpOworICAgICAgICBvcHRpb25fdHlwZSA9IG50b2hzKG9wdGlvbl90eXBlKTsKKyAgICAgICAgb3B0aW9uX2xlbiA9IG50b2hzKG9wdGlvbl9sZW4pOworICAgICAgICBjdXJyZW50X3BvcyArPSAyICogc2l6ZW9mKHVpbnQxNl90KTsKKyAgICAgICAgaWYgKG9wdGlvbl90eXBlID09IFNUQVRVU19DT0RFKXsKKyAgICAgICAgICAgIHVpbnQxNl90IHN0YXR1czsKKyAgICAgICAgICAgIG1lbWNweSgmc3RhdHVzLCBidWYgKyBjdXJyZW50X3Bvcywgc2l6ZW9mKHVpbnQxNl90KSk7CisgICAgICAgICAgICBzdGF0dXMgPSBudG9ocyhzdGF0dXMpOworICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSBTVUNDRVNTKXsKKyAgICAgICAgICAgICAgICBtZW1jcHkob3B0aW9uX3ZhbHVlLCBidWYgKyBjdXJyZW50X3BvcyArIHNpemVvZih1aW50MTZfdCkgLCBvcHRpb25fbGVuIC0gc2l6ZW9mKHVpbnQxNl90KSk7CisgICAgICAgICAgICAgICAgb3B0aW9uX3ZhbHVlW29wdGlvbl9sZW4tc2l6ZW9mKHVpbnQxNl90KV0gPSdcMCc7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvcjogJXNcbiIsIG9wdGlvbl92YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAtMjsKK30KKworaW50MTZfdCBwYXJzZV9wYWNrZXQoY2hhciogYnVmLCBzaXplX3QgbGVuKXsKKyAgICB1aW50OF90IHR5cGUgID0gYnVmWzBdOworICAgIC8qc2tpcHBpbmcgdHggaWQuIHlvdSBuZWVkIGl0LCB1bmNvbW1lbnQgZm9sbG93aW5nIGxpbmUKKyAgICAgICAgdWludDE2X3QgdHhfaWQgPSBudG9ocygoYnVmWzFdIDw8MTYpICsgKGJ1ZlsyXSA8PDgpICsgYnVmWzNdKTsKKyAgICAgKi8KKyAgICBzaXplX3QgY3VycmVudF9wb3MgPSA0OworICAgIGlmICh0eXBlICE9IFJFUExZICl7CisgICAgICAgIHJldHVybiBOT1RfUkVQTFlfQ09ERTsKKyAgICB9CisgICAgY2hhciBvcHRpb25fdmFsdWVbMTAyNF07CisgICAgd2hpbGUgKGN1cnJlbnRfcG9zIDwgbGVuKSB7CisgICAgICAgIHVpbnQxNl90IG9wdGlvbl90eXBlLCBvcHRpb25fbGVuOworICAgICAgICBtZW1jcHkoJm9wdGlvbl90eXBlLGJ1ZiArIGN1cnJlbnRfcG9zLCBzaXplb2YodWludDE2X3QpKTsKKyAgICAgICAgbWVtY3B5KCZvcHRpb25fbGVuLGJ1ZiArIGN1cnJlbnRfcG9zICsgc2l6ZW9mKHVpbnQxNl90KSwgc2l6ZW9mKHVpbnQxNl90KSk7CisgICAgICAgIG9wdGlvbl90eXBlID0gbnRvaHMob3B0aW9uX3R5cGUpOworICAgICAgICBvcHRpb25fbGVuID0gbnRvaHMob3B0aW9uX2xlbik7CisgICAgICAgIGN1cnJlbnRfcG9zICs9IDIgKiBzaXplb2YodWludDE2X3QpOworICAgICAgICBpZiAob3B0aW9uX3R5cGUgPT0gU1RBVFVTX0NPREUpeworICAgICAgICAgICAgdWludDE2X3Qgc3RhdHVzOworICAgICAgICAgICAgbWVtY3B5KCZzdGF0dXMsIGJ1ZiArIGN1cnJlbnRfcG9zLCBzaXplb2YodWludDE2X3QpKTsKKyAgICAgICAgICAgIHN0YXR1cyA9IG50b2hzKHN0YXR1cyk7CisgICAgICAgICAgICBpZiAoc3RhdHVzICE9IFNVQ0NFU1MpeworICAgICAgICAgICAgICAgIG1lbWNweShvcHRpb25fdmFsdWUsIGJ1ZiArIGN1cnJlbnRfcG9zICtzaXplb2YodWludDE2X3QpICwgb3B0aW9uX2xlbiAtc2l6ZW9mKHVpbnQxNl90KSk7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvcjogJWQgJXNcbiIsIHN0YXR1cywgb3B0aW9uX3ZhbHVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIH0KKyAgICAgICAgaWYgKG9wdGlvbl90eXBlID09IElBX05BICl7CisgICAgICAgICAgICB1aW50MTZfdCByZXN1bHQgPSBwYXJzZV9pYW5hX3N1Ym9wdGlvbihidWYgKyBjdXJyZW50X3BvcyArMjQsIG9wdGlvbl9sZW4gLTI0KTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQpeworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY3VycmVudF9wb3MgKz0gb3B0aW9uX2xlbjsKKworICAgIH0KKyAgICByZXR1cm4gLTE7Cit9CisKK3ZvaWQgdXNhZ2UoY29uc3QgY2hhciogYXJnLCBGSUxFKiBzdHJlYW0peworICAgIGNvbnN0IGNoYXIqIHVzYWdlX3N0cmluZyA9Ii0taXAgSVB2NiAtLWlmYWNlIElGQUNFIC0tc2VydmVyLWlkIFNFUlZFUl9JRCAtLWNsaWVudC1pZCBDTElFTlRfSUQgLS1pYWlkIElBSUQgWy0tZHJ5LXJ1bl0gfCAtLWhlbHAiOworICAgIGZwcmludGYgKHN0cmVhbSwgIlVzYWdlOiAlcyAlc1xuIiwgYXJnLCB1c2FnZV9zdHJpbmcpOworICAgIAorfQorCitpbnQgc2VuZF9yZWxlYXNlX3BhY2tldChjb25zdCBjaGFyKiBpZmFjZSwgc3RydWN0IGRoY3A2X3BhY2tldCogcGFja2V0KXsKKyAgICAKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42IHNlcnZlcl9hZGRyLCBjbGllbnRfYWRkcjsKKyAgICBjaGFyIHJlc3BvbnNlWzE0MDBdOworICAgIGludCBzb2NrID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTsKKyAgICBpbnQgaSA9IDA7CisgICAgaWYgKHNvY2sgPCAwKSB7CisgICAgICAgIHBlcnJvcigiY3JlYXRpbmcgc29ja2V0Iik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKHNldHNvY2tvcHQoc29jaywgU09MX1NPQ0tFVCwgMjUsIGlmYWNlLCBzdHJsZW4oaWZhY2UpKSA9PSAtMSkgIHsKKyAgICAgICAgcGVycm9yKCJTT19CSU5EVE9ERVZJQ0UiKTsKKyAgICAgICAgY2xvc2Uoc29jayk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgbWVtc2V0KCZzZXJ2ZXJfYWRkciwgMCwgc2l6ZW9mKHNlcnZlcl9hZGRyKSk7CisgICAgc2VydmVyX2FkZHIuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICBjbGllbnRfYWRkci5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworICAgIGNsaWVudF9hZGRyLnNpbjZfcG9ydCA9IGh0b25zKERIQ1A2X0NMSUVOVF9QT1JUKTsKKyAgICBjbGllbnRfYWRkci5zaW42X2Zsb3dpbmZvID0gMDsKKyAgICBjbGllbnRfYWRkci5zaW42X3Njb3BlX2lkID0wOworICAgIGluZXRfcHRvbihBRl9JTkVUNiwgIjo6IiwgJmNsaWVudF9hZGRyLnNpbjZfYWRkcik7CisgICAgYmluZChzb2NrLCAoc3RydWN0IHNvY2thZGRyKikmY2xpZW50X2FkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisgICAgaW5ldF9wdG9uKEFGX0lORVQ2LCBESENQNl9NVUxUSUNBU1RfQUREUkVTUywgJnNlcnZlcl9hZGRyLnNpbjZfYWRkcik7CisgICAgc2VydmVyX2FkZHIuc2luNl9wb3J0ID0gaHRvbnMoREhDUDZfU0VSVkVSX1BPUlQpOworICAgIGludDE2X3QgcmVjdl9zaXplID0gMDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7CisgICAgICAgIGlmIChzZW5kdG8oc29jaywgcGFja2V0LT5idWYsIHBhY2tldC0+bGVuLCAwLAorICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZzZXJ2ZXJfYWRkciwKKyAgICAgICAgICAgICAgIHNpemVvZihzZXJ2ZXJfYWRkcikpIDwgMCkgeworICAgICAgICAgICAgcGVycm9yKCJzZW5kdG8gZmFpbGVkIik7CisgICAgICAgICAgICBleGl0KDQpOworICAgICAgICB9CisgICAgICAgIHJlY3Zfc2l6ZSA9IHJlY3Zmcm9tKHNvY2ssIHJlc3BvbnNlLCBzaXplb2YocmVzcG9uc2UpLCBNU0dfRE9OVFdBSVQsIE5VTEwsIDApOworICAgICAgICBpZiAocmVjdl9zaXplID09IC0xKXsKKyAgICAgICAgICAgIGlmIChlcnJubyA9PSBFQUdBSU4peworICAgICAgICAgICAgICAgIHNsZWVwKDEpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfWVsc2UgeworICAgICAgICAgICAgICAgIHBlcnJvcigicmVjdmZyb20iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpbnQxNl90IHJlc3VsdCA9IHBhcnNlX3BhY2tldChyZXNwb25zZSwgcmVjdl9zaXplKTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBOT1RfUkVQTFlfQ09ERSl7CisgICAgICAgICAgICBzbGVlcCgxKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIGZwcmludGYoc3RkZXJyLCAiUmVzcG9uc2UgdGltZWQgb3V0XG4iKTsKKyAgICByZXR1cm4gLTE7CisgICAgCit9CisKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiAgY29uc3QgYXJndltdKSB7CisgICAgY29uc3QgY2hhciogVU5JTklUSUFMSVpFRCA9ICIiOworICAgIGNvbnN0IGNoYXIqIGlmYWNlID0gVU5JTklUSUFMSVpFRDsKKyAgICBjb25zdCBjaGFyKiBpcCA9IFVOSU5JVElBTElaRUQ7CisgICAgY29uc3QgY2hhciogY2xpZW50X2lkID0gVU5JTklUSUFMSVpFRDsKKyAgICBjb25zdCBjaGFyKiBzZXJ2ZXJfaWQgPSBVTklOSVRJQUxJWkVEOworICAgIGNvbnN0IGNoYXIqIGlhaWQgPSBVTklOSVRJQUxJWkVEOworICAgIGludCBkcnlfcnVuID0gMDsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBpbnQgb3B0aW9uX2luZGV4ID0gMDsKKyAgICAgICAgaW50IGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiYTpzOmM6bjppOmhkIiwgbG9uZ29wdHMsICZvcHRpb25faW5kZXgpOworICAgICAgICBpZiAoYyA9PSAtMSl7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBzd2l0Y2goYyl7CisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgaWYgKGxvbmdvcHRzW29wdGlvbl9pbmRleF0uZmxhZyAhPTApeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHJpbnRmICgib3B0aW9uICVzIiwgbG9uZ29wdHNbb3B0aW9uX2luZGV4XS5uYW1lKTsKKyAgICAgICAgICAgICAgICBpZiAob3B0YXJnKQorICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIgd2l0aCBhcmcgJXMiLCBvcHRhcmcpOworICAgICAgICAgICAgICAgIHByaW50ZiAoIlxuIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdpJzoKKyAgICAgICAgICAgICAgICBpYWlkID0gb3B0YXJnOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnbic6CisgICAgICAgICAgICAgICAgaWZhY2UgPSBvcHRhcmc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdhJzoKKyAgICAgICAgICAgICAgICBpcCA9IG9wdGFyZzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ2MnOgorICAgICAgICAgICAgICAgIGNsaWVudF9pZCA9IG9wdGFyZzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ2QnOgorICAgICAgICAgICAgICAgIGRyeV9ydW4gPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAncyc6CisgICAgICAgICAgICAgICAgc2VydmVyX2lkID0gb3B0YXJnOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnaCc6CisgICAgICAgICAgICAgICAgdXNhZ2UoYXJndlswXSwgc3Rkb3V0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGNhc2UgJz8nOgorICAgICAgICAgICAgICAgIHVzYWdlKGFyZ3ZbMF0sIHN0ZGVycik7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYWJvcnQoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgfQorICAgICAgICAKKyAgICB9CisgICAgaWYgKGlhaWQgPT0gVU5JTklUSUFMSVpFRCl7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiTWlzc2luZyByZXF1aXJlZCBpYWlkIHBhcmFtZXRlclxuIik7CisgICAgICAgIHVzYWdlKGFyZ3ZbMF0sIHN0ZGVycik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKHNlcnZlcl9pZCA9PSBVTklOSVRJQUxJWkVEKXsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJNaXNzaW5nIHJlcXVpcmVkIHNlcnZlci1pZCBwYXJhbWV0ZXJcbiIpOworICAgICAgICB1c2FnZShhcmd2WzBdLCBzdGRlcnIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlmIChjbGllbnRfaWQgPT0gVU5JTklUSUFMSVpFRCl7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiTWlzc2luZyByZXF1aXJlZCBjbGllbnQtaWQgcGFyYW1ldGVyXG4iKTsKKyAgICAgICAgdXNhZ2UoYXJndlswXSwgc3RkZXJyKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpZiAoaXAgPT0gVU5JTklUSUFMSVpFRCl7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiTWlzc2luZyByZXF1aXJlZCBpcCBwYXJhbWV0ZXJcbiIpOworICAgICAgICB1c2FnZShhcmd2WzBdLCBzdGRlcnIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlmIChpZmFjZSA9PSBVTklOSVRJQUxJWkVEKXsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJNaXNzaW5nIHJlcXVpcmVkIGlmYWNlIHBhcmFtZXRlclxuIik7CisgICAgICAgIHVzYWdlKGFyZ3ZbMF0sIHN0ZGVycik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKworCisgICAgc3RydWN0IGRoY3A2X3BhY2tldCBwYWNrZXQgPSBjcmVhdGVfcmVsZWFzZV9wYWNrZXQoaWFpZCwgaXAsIGNsaWVudF9pZCwgc2VydmVyX2lkKTsKKyAgICBpZiAoZHJ5X3J1bil7CisgICAgICAgIHVpbnQxNl90IGk7CisgICAgICAgIGZvcihpPTA7aTxwYWNrZXQubGVuO2krKyl7CisgICAgICAgICAgICBwcmludGYoIiVoaHgiLCBwYWNrZXQuYnVmW2ldKTsKKyAgICAgICAgfQorICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gc2VuZF9yZWxlYXNlX3BhY2tldChpZmFjZSwgJnBhY2tldCk7CisgICAgCit9CmRpZmYgLS1naXQgYS9jb250cmliL21hY3RhYmxlL21hY3NjcmlwdCBiL2NvbnRyaWIvbWFjdGFibGUvbWFjc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ0YTQ0NzcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL21hY3RhYmxlL21hY3NjcmlwdApAQCAtMCwwICsxLDM2IEBACisjIS9iaW4vYmFzaAorCitTVEFUVVNfRklMRT0iL3RtcC9kbnNtYXNxLWlwLW1hYy5zdGF0dXMiCisKKyMgU2NyaXB0IGZvciBkbnNtYXNxIGxlYXNlLWNoYW5nZSBob29rLgorIyBNYWludGFpbnMgdGhlIGFib3ZlIGZpbGUgd2l0aCBhIElQIGFkZHJlc3MvTUFDIGFkZHJlc3MgcGFpcnMsCisjIG9uZSBsZWFzZSBwZXIgbGluZS4gV29ya3Mgd2l0aCBJUHY0IGFuZCBJUHY2IGxlYXNlcywgZmlsZSBpcworIyBhdG9taWNhbGx5IHVwZGF0ZWQsIHNvIG5vIHJhY2VzIGZvciB1c2VycyBvZiB0aGUgZGF0YS4KKworYWN0aW9uPSIkMSIKK21hYz0iJDIiICAgIyBJUHY0CitpcD0iJDMiCisKKyMgZW5zdXJlIGl0IGFsd2F5cyBleGlzdHMuCisKK2lmIFsgISAtZiAiJFNUQVRVU19GSUxFIiBdOyB0aGVuCisgIHRvdWNoICIkU1RBVFVTX0ZJTEUiCitmaQorCitpZiBbICAtbiAiJEROU01BU1FfSUFJRCIgXTsgdGhlbgorICAgIG1hYz0iJEROU01BU1FfTUFDIiAgICMgSVB2NgorZmkKKworIyB3b3JyeSBhYm91dCBhbiBhZGQgb3Igb2xkIGFjdGlvbiB3aGVuIHRoZSBNQUMgYWRkcmVzcyBpcyBub3Qga25vd246CisjIGxlYXZlIGFueSBvbGQgb25lIGluIHBsYWNlIGluIHRoYXQgY2FzZS4KKworaWYgWyAiJGFjdGlvbiIgPSAiYWRkIiAtbyAiJGFjdGlvbiIgPSAib2xkIiAtbyAiJGFjdGlvbiIgPSAiZGVsIiBdOyB0aGVuCisgIGlmIFsgLW4gIiRtYWMiIC1vICIkYWN0aW9uIiA9ICJkZWwiIF07IHRoZW4KKyAgICBzZWQgIi9eJHtpcC8vLi9cLn0gLyBkIiAiJFNUQVRVU19GSUxFIiA+ICIkU1RBVFVTX0ZJTEUiLm5ldworICAKKyAgICBpZiBbICIkYWN0aW9uIiA9ICJhZGQiIC1vICIkYWN0aW9uIiA9ICJvbGQiIF07IHRoZW4KKyAgICAgICBlY2hvICIkaXAgJG1hYyIgPj4gIiRTVEFUVVNfRklMRSIubmV3CisgICAgZmkKKyAgICBtdiAgIiRTVEFUVVNfRklMRSIubmV3ICIkU1RBVFVTX0ZJTEUiICMgYXRvbWljIHVwZGF0ZS4KKyAgZmkKK2ZpCmRpZmYgLS1naXQgYS9jb250cmliL29wZW52cG4vUkVBRE1FIGIvY29udHJpYi9vcGVudnBuL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZDk5NjAwCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9vcGVudnBuL1JFQURNRQpAQCAtMCwwICsxLDQ0IEBACitUaGUgcGF0Y2ggSSBoYXZlIGF0dGFjaGVkIGxldHMgbWUgZ2V0IHRoZSBiZWhhdmlvciBJIHdpc2ggb3V0IG9mCitkbnNtYXNxLiAgSSBhbHNvIGluY2x1ZGUgbXkgdmVyc2lvbiBvZiBkaGNsaWVudC1lbnRlci1ob29rcyBhcworcmVxdWlyZWQgZm9yIHRoZSBzd2l0Y2hvdmVyIGZyb20gcHJlLWRuc21hc3EgYW5kIGRoY2xpZW50LgorCitPbiA4LzE2LzA1LCBKb3NlcGggVGF0ZSA8ZHJhZ29uc3RyaWRlckBnbWFpbC5jb20+IHdyb3RlOgorPiBJJ20gdHJ5aW5nIHRvIHVzZSBkbnNtYXNxIG9uIGEgbGFwdG9wIGluIG9yZGVyIHRvIGZhY2lsaXRhdGUgb3BlbnZwbgorPiBjb25uZWN0aW9ucy4gIEFzIHN1Y2gsIHRoZSBvbmx5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIEknbSBjb25jZXJuZWQKKz4gYWJvdXQgaXMgYSBzaW5nbGUgc2VydmVyPTNEL2V4YW1wbGUuY29tLzE5Mi4xNjguMC4xIGxpbmUuCis+Cis+IFRoZSB3YXkgSSBjdXJyZW50bHkgaGF2ZSBpdCBzZXQgdXAgaXMgSSBtb2RpZmllZCBkaGNsaWVudCB0byB3cml0ZSBpdHMKKz4gcmVzb2x2LmNvbmYgZGF0YSB0byAvZXRjL3Jlc29sdi5jb25mLmRoY2xpZW50IGFuZCBjb25maWd1cmVkCis+IC9ldGMvZG5zbWFzcS5jb25mIHRvIGxvb2sgdGhlcmUgZm9yIGl0cyB1cHN0cmVhbSBkbnMgc2VydmVycy4KKz4gL2V0Yy9yZXNvbHYuY29uZiBpcyBzZXQgdG8gbmFtZXNlcnZlciAxMjcuMC4wLjEKKz4KKz4gQWxsIG9mIHRoaXMgd29ya3MgZ3JlYXQuICBXaGVuIEkgc3RhcnQgdGhlIG9wZW52cG4gc2VydmljZSwgaXQgdGhlCis+IHJvdXRlcywgYW5kIHF1ZXJpZXMgdG8gdGhlIGRvbWFpbiBpbiB0aGUgc2VydmVyPTNEIGxpbmUgd29yayBqdXN0IGZpbmUuCis+Cis+IFRoZSBvbmx5IHByb2JsZW0gaXMgdGhhdCB0aGUgaG9zdG5hbWUgZm9yIG15IHN5c3RlbSBkb2Vzbid0IGdldCBzZXQKKz4gY29ycmVjdGx5LiAgV2l0aCB0aGUgcmVzb2x2LmNvbmYgZGF0YSB3cml0dGVuIHRvIHNvbWV0aGluZyBvdGhlciB0aGFuCis+IC9ldGMvcmVzb2x2LmNvbmYsIHRoZSBpZnVwIHNjcmlwdHMgZG9uJ3QgaGF2ZSBhIHZhbGlkIGRucyBzZXJ2ZXIgdG8gZG8KKz4gdGhlIGlwY2FsYyBjYWxsIHRvIHNldCB0aGUgbGFwdG9wJ3MgaG9zdG5hbWUuICBJZiBJIHN0YXJ0IGRuc21hc3EKKz4gYmVmb3JlIHRoZSBuZXR3b3JrIGNvbWVzIHVwLCBzb21ldGhpbmcgZ2V0cyBmdWJhcidkLiAgSSdtIG5vdCBzdXJlIGhvdworPiB0byBkZXNjcmliZSBpdCBleGFjdGx5LCBidXQgbmV0d29yayBzZXJ2aWNlcyBhcmUgc2xvdyB0byBsb2FkLCBhbmQKKz4gcmVzdGFydGluZyBuZXR3b3JraW5nIGFuZCBkbnNtYXNxIGRvZXNuJ3Qgc29sdmUgdGhlIHByb2JsZW0uICBQZXJoYXBzCis+IGRuc21hc3EgaXMgYW5zd2VyaW5nIHRoZSBkaGNwIHJlcXVlc3Qgd2hlbiB0aGUgbmV0d29yayBzdGFydHM/Cis+IENlcnRhaW5seSBub3QgZGVzaXJlZCBiZWhhdmlvci4KKz4KKz4gQW55d2F5LCBteSBxdWVzdGlvbjogaXMgdGhlcmUgYSB3YXkgdG8gaGF2ZSB0aGUgYmVzdCBvZiBib3RoIHdvcmxkcz8KKz4gREhDUCByZXF1ZXN0cyB0byBhbm90aGVyIHNlcnZlciwgYW5kIEROUyBsb29rdXBzIHRoYXQgd29yayBhdCBhbGwKKz4gdGltZXM/Cis+Cis+IE15IGN1cnJlbnQgYmVzdCBpZGVhIG9uIGhvdyB0byBzb2x2ZSB0aGlzIHByb2JsZW0gaXMgbW9kaWZ5aW5nIHRoZQorPiBkbnNtYXNxIGluaXRzY3JpcHQgdG8gdHdlYWsgL2V0Yy9kaGNsaWVudC1lbnRlci1ob29rcyB0byBjaGFuZ2Ugd2hlcmUKKz4gZGhjbGllbnQgd3JpdGVzIHJlc29sdi5jb25mIGRhdGEsIGFuZCBmaXhpbmcgdXAgL2V0Yy9yZXNvbHYuY29uZiBvbgorPiB0aGUgZmx5IHRvIHNldCAxMjcuMC4wLjEgdG8gdGhlIG5hbWVzZXJ2ZXIgKGFuZCBzb21laG93IGtlZXAgdGhlCis+IHNlYXJjaCBkb21haW5zIGludGFjdCksIGJ1dCBJJ20gaG9waW5nIHRoYXQgSSdtIGp1c3QgbWlzc2luZyBzb21lIGtleQorPiBwaWVjZSBvZiB0aGUgcHV6emxlIGFuZCB0aGF0IHRoaXMgcHJvYmxlbSBoYXMgYmVlbiBzb2x2ZWQgYmVmb3JlLiAgQW55Cis+IGluc2lnaHRzPworPgorPiAtLQorPiBKb3NlcGggVGF0ZQorPiBQZXJzb25hbCBlLW1haWw6IGp0YXRlIEFUIGRyYWdvbnN0cmlkZXIgRE9UIGNvbQorPiBXZWI6IGh0dHA6Ly93d3cuZHJhZ29uc3RyaWRlci5jb20KKz4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvb3BlbnZwbi9kaGNsaWVudC1lbnRlci1ob29rcyBiL2NvbnRyaWIvb3BlbnZwbi9kaGNsaWVudC1lbnRlci1ob29rcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jYjc4ZTJhCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9vcGVudnBuL2RoY2xpZW50LWVudGVyLWhvb2tzCkBAIC0wLDAgKzEsMzAgQEAKKyMhL2Jpbi9iYXNoCisKK2Z1bmN0aW9uIHNhdmVfcHJldmlvdXMoKSB7CisgIGlmIFsgLWUgJDEgLWEgISAtZSAkMS5wcmVkaGNsaWVudCBdOyB0aGVuCisgICAgbXYgJDEgJDEucHJlZGhjbGllbnQgCisgIGZpCit9CisKK2Z1bmN0aW9uIHdyaXRlX3Jlc29sdl9jb25mKCkgeworICBSRVNPTFZDT05GPSQxCisgIGlmIFsgLW4gIiRuZXdfZG9tYWluX25hbWUiIF0gfHwgWyAtbiAiJG5ld19kb21haW5fbmFtZV9zZXJ2ZXJzIiBdOyB0aGVuCisgICAgc2F2ZV9wcmV2aW91cyAkUkVTT0xWQ09ORgorICAgIGVjaG8gJzsgZ2VuZXJhdGVkIGJ5IC9ldGMvZGhjbGllbnQtZW50ZXItaG9va3MnID4gJFJFU09MVkNPTkYKKyAgICBpZiBbIC1uICIkU0VBUkNIIiBdOyB0aGVuCisgCWVjaG8gc2VhcmNoICRTRUFSQ0ggPj4gJFJFU09MVkNPTkYKKyAgICBlbHNlCisJaWYgWyAtbiAiJG5ld19kb21haW5fbmFtZSIgXTsgdGhlbgorIAkgICAgZWNobyBzZWFyY2ggJG5ld19kb21haW5fbmFtZSA+PiAkUkVTT0xWQ09ORgorIAlmaQorICAgIGZpCisgICAgY2htb2QgNjQ0ICRSRVNPTFZDT05GCisgICAgZm9yIG5hbWVzZXJ2ZXIgaW4gJG5ld19kb21haW5fbmFtZV9zZXJ2ZXJzOyBkbworICAgICAgZWNobyBuYW1lc2VydmVyICRuYW1lc2VydmVyID4+JFJFU09MVkNPTkYKKyAgICBkb25lCisgIGZpCit9CisKK21ha2VfcmVzb2x2X2NvbmYoKSB7CisgIHdyaXRlX3Jlc29sdl9jb25mIC9ldGMvcmVzb2x2LmNvbmYKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvb3BlbnZwbi9kbnNtYXNxLnBhdGNoIGIvY29udHJpYi9vcGVudnBuL2Ruc21hc3EucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWMxMTg4MQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvb3BlbnZwbi9kbnNtYXNxLnBhdGNoCkBAIC0wLDAgKzEsNjEgQEAKKy0tLSBkbnNtYXNxLTIuMjIvcnBtL2Ruc21hc3EucmgJMjAwNS0wMy0yNCAwOTo1MToxOC4wMDAwMDAwMDAgLTA1MDAKKysrKyBkbnNtYXNxLTIuMjIvcnBtL2Ruc21hc3EucmgubmV3CTIwMDUtMDgtMjUgMTA6NTI6MDQuMzEwNTY4Nzg0IC0wNDAwCitAQCAtMiw3ICsyLDcgQEAKKyAjCisgIyBTdGFydHVwIHNjcmlwdCBmb3IgdGhlIEROUyBjYWNoaW5nIHNlcnZlcgorICMKKy0jIGNoa2NvbmZpZzogMjM0NSA5OSAwMQorKyMgY2hrY29uZmlnOiAyMzQ1IDA3IDg5CisgIyBkZXNjcmlwdGlvbjogVGhpcyBzY3JpcHQgc3RhcnRzIHlvdXIgRE5TIGNhY2hpbmcgc2VydmVyCisgIyBwcm9jZXNzbmFtZTogZG5zbWFzcQorICMgcGlkZmlsZTogL3Zhci9ydW4vZG5zbWFzcS5waWQKK0BAIC0xMCw2ICsxMCwyNSBAQAorICMgU291cmNlIGZ1bmN0aW9uIGxpYnJhcnkuCisgLiAvZXRjL3JjLmQvaW5pdC5kL2Z1bmN0aW9ucworIAorK2Z1bmN0aW9uIHNldHVwX2RoY2xpZW50X2VudGVyX2hvb2tzKCkgeworKyAgICBpZiBbIC1mIC9ldGMvZGhjbGllbnQtZW50ZXItaG9va3MgXTsgdGhlbgorKyAgICAgICAgLiAvZXRjL2RoY2xpZW50LWVudGVyLWhvb2tzCisrICAgICAgICBjcCAvZXRjL3Jlc29sdi5jb25mIC9ldGMvcmVzb2x2LmNvbmYuZG5zbWFzcQorKyAgICAgICAgY3AgL2V0Yy9kaGNsaWVudC1lbnRlci1ob29rcyAvZXRjL2RoY2xpZW50LWVudGVyLWhvb2tzLmRuc21hc3EKKysgICAgICAgIHNlZCAtZSAncy9yZXNvbHZcLmNvbmYkL3Jlc29sdi5jb25mLmRuc21hc3EvJyAvZXRjL2RoY2xpZW50LWVudGVyLWhvb2tzLmRuc21hc3EgPiAvZXRjL2RoY2xpZW50LWVudGVyLWhvb2tzCisrICAgICAgICBzZWQgLWUgJ3MvXChuYW1lc2VydmVyWyB0YWJdXCtcKVswLTldXCtcLlswLTldXCtcLlswLTldXCtcLlswLTldXCskL1wxMTI3LjAuMC4xLycgL2V0Yy9yZXNvbHYuY29uZi5kbnNtYXNxID4gL2V0Yy9yZXNvbHYuY29uZgorKyAgICBmaQorK30KKysKKytmdW5jdGlvbiB0ZWFyZG93bl9kaGNsaWVudF9lbnRlcl9ob29rcygpIHsKKysgICAgaWYgWyAtZiAvZXRjL2RoY2xpZW50LWVudGVyLWhvb2tzIC1hIC1mIC9ldGMvZGhjbGllbnQtZW50ZXItaG9va3MuZG5zbWFzcSBdOyB0aGVuCisrICAgICAgICBpZiBbIC1mIC9ldGMvcmVzb2x2LmNvbmYuZG5zbWFzcSBdOyB0aGVuCisrICAgICAgICAgICAgbXYgL2V0Yy9yZXNvbHYuY29uZi5kbnNtYXNxIC9ldGMvcmVzb2x2LmNvbmYKKysgICAgICAgIGZpCisrICAgICAgICBtdiAvZXRjL2RoY2xpZW50LWVudGVyLWhvb2tzLmRuc21hc3EgL2V0Yy9kaGNsaWVudC1lbnRlci1ob29rcworKyAgICBmaQorK30KKysKKyAjIFNvdXJjZSBuZXR3b3JraW5nIGNvbmZpZ3VyYXRpb24uCisgLiAvZXRjL3N5c2NvbmZpZy9uZXR3b3JrCisgCitAQCAtMjQsNyArNDMsNyBAQAorIE1BSUxIT1NUTkFNRT0iIgorICMgY2hhbmdlIHRoaXMgbGluZSBpZiB5b3Ugd2FudCBkbnMgdG8gZ2V0IGl0cyB1cHN0cmVhbSBzZXJ2ZXJzIGZyb20KKyAjIHNvbWV3aGVyZSBvdGhlciB0aGF0IC9ldGMvcmVzb2x2LmNvbmYgCistUkVTT0xWX0NPTkY9IiIKKytSRVNPTFZfQ09ORj0iL2V0Yy9yZXNvbHYuY29uZi5kbnNtYXNxIgorICMgY2hhbmdlIHRoaXMgaWYgeW91IHdhbnQgZG5zbWFzcSB0byBjYWNoZSBhbnkgImhvc3RuYW1lIiBvciAiY2xpZW50LWhvc3RuYW1lIiBmcm9tCisgIyBhIGRoY3BkJ3MgbGVhc2UgZmlsZQorQEAgLTU0LDYgKzczLDcgQEAKKyBjYXNlICIkMSIgaW4KKyAgIHN0YXJ0KQorICAgICAgICAgZWNobyAtbiAiU3RhcnRpbmcgZG5zbWFzcTogIgorKyAgICAgICAgc2V0dXBfZGhjbGllbnRfZW50ZXJfaG9va3MKKyAgICAgICAgIGRhZW1vbiAkZG5zbWFzcSAkT1BUSU9OUworIAlSRVRWQUw9JD8KKyAgICAgICAgIGVjaG8KK0BAIC02Miw2ICs4Miw3IEBACisgICBzdG9wKQorICAgICAgICAgaWYgdGVzdCAieGBwaWRvZiBkbnNtYXNxYCIgIT0geDsgdGhlbgorICAgICAgICAgICAgIGVjaG8gLW4gIlNodXR0aW5nIGRvd24gZG5zbWFzcTogIgorKyAgICAgICAgICAgIHRlYXJkb3duX2RoY2xpZW50X2VudGVyX2hvb2tzCisgICAgICAgICAgICAga2lsbHByb2MgZG5zbWFzcQorICAgICAgICAgZmkKKyAJUkVUVkFMPSQ/CmRpZmYgLS1naXQgYS9jb250cmliL3BvcnQtZm9yd2FyZC9kbnNtYXNxLXBvcnRmb3J3YXJkIGIvY29udHJpYi9wb3J0LWZvcndhcmQvZG5zbWFzcS1wb3J0Zm9yd2FyZApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMmM2MzRmCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wb3J0LWZvcndhcmQvZG5zbWFzcS1wb3J0Zm9yd2FyZApAQCAtMCwwICsxLDc4IEBACisjIS9iaW4vYmFzaAorIyAKKyMgL3Vzci9zYmluL2Ruc21hc3EtcG9ydGZvcndhcmQKKyMKKyMgQSBzY3JpcHQgd2hpY2ggZ2V0cyBydW4gd2hlbiB0aGUgZG5zbWFzcSBESENQIGxlYXNlIGRhdGFiYXNlIGNoYW5nZXMuCisjIEl0IGxvZ3MgdG8gJExPR0ZJTEUsIGlmIGl0IGV4aXN0cywgYW5kIG1haW50YWlucyBwb3J0LWZvcndhcmRzIHVzaW5nCisjIElQLXRhYmxlcyBzbyB0aGF0IHRoZXkgYWx3YXlzIHBvaW50IHRvIHRoZSBjb3JyZWN0IGhvc3QuIFNlZQorIyAkUE9SVFNGSUxFIGZvciBkZXRhaWxzIG9uIGNvbmZpZ3VyaW5nIHRoaXMuIGRuc21hc3EgbXVzdCBiZSB2ZXJzaW9uIDIuMzQgCisjIG9yIGxhdGVyLgorIworIyBUbyBlbmFibGUgdGhpcyBzY3JpcHQsIGFkZCAKKyMgICAgZGhjcC1zY3JpcHQ9L3Vzci9zYmluL2Ruc21hc3EtcG9ydGZvcndhcmQKKyMgdG8gL2V0Yy9kbnNtYXNxLmNvbmYKKyMKKyMgVG8gZW5hYmxlIGxvZ2dpbmcsIHRvdWNoICRMT0dGSUxFCisjCisKK1BPUlRTRklMRT0vZXRjL3BvcnRmb3J3YXJkCitMT0dGSUxFPS92YXIvbG9nL2RoY3AubG9nCitJUFRBQkxFUz0vc2Jpbi9pcHRhYmxlcworCithY3Rpb249JHsxOi0wfQoraG9zdG5hbWU9JHs0fQorCisjIGxvZyB3aGF0J3MgZ29pbmcgb24uCitpZiBbIC1mICR7TE9HRklMRX0gXSA7IHRoZW4KKyAgICBkYXRlICsiJUQgJVQgJCoiID4+JHtMT0dGSUxFfQorZmkKKworIyBJZiBhIGxlYXNlIGdldHMgc3RyaXBwZWQgb2YgYSBuYW1lLCB3ZSBzZWUgdGhhdCBhcyBhbiAib2xkIiBhY3Rpb24KKyMgd2l0aCBETlNNQVNRX09MRF9IT1NUTkFNRSBzZXQsIGNvbnZlcnQgaXQgaW50byBhICJkZWwiIAoraWYgWyAke0ROU01BU1FfT0xEX0hPU1ROQU1FfSBdICYmIFsgJHthY3Rpb259ID0gb2xkIF0gOyB0aGVuCisgICAgYWN0aW9uPWRlbAorICAgIGhvc3RuYW1lPSR7RE5TTUFTUV9PTERfSE9TVE5BTUV9CitmaQorCisjIElQdjYgbGVhc2VzIGFyZSBub3Qgb3VyIGNvbmNlcm4uIG5vIE5BVCB0aGVyZSEKK2lmIFsgJHtETlNNQVNRX0lBSUR9IF0gOyB0aGVuCisgICBleGl0IDAKK2ZpCisKKyMgYWN0aW9uIGluaXQgaXMgbm90IHJlbGV2YW50LCBhbmQgd2lsbCBvbmx5IGJlIHNlZW4gd2hlbiBsZWFzZWZpbGUtcm8gaXMgc2V0LgoraWYgWyAke2FjdGlvbn0gPSBpbml0IF0gOyB0aGVuCisgICAgZXhpdCAwCitmaQorCisjIGFjdGlvbiB0ZnRwIGlzIG5vdCByZWxldmFudC4KK2lmIFsgJHthY3Rpb259ID0gdGZ0cCBdIDsgdGhlbgorICAgIGV4aXQgMAorZmkKKworaWYgWyAke2hvc3RuYW1lfSBdOyB0aGVuCisgICAgcG9ydHM9JChzZWQgLW4gLWUgIi9eJHtob3N0bmFtZX1cIC4qLyBzL14uKiAvL3AiICR7UE9SVFNGSUxFfSkKKworICAgIGZvciBwb3J0IGluICRwb3J0czsgZG8KKwl2ZXJiPXJlbW92ZWQKKwlwcm90b2NvbD10Y3AKKwlpZiBbICR7cG9ydDowOjF9ID0gdSBdIDsgdGhlbgorCSAgICBwcm90b2NvbD11ZHAgCisJICAgIHBvcnQ9JHtwb3J0L3UvfQorCWZpCisJc3JjPSR7cG9ydC86Ki99CisJZHN0PSR7cG9ydC8qOi99CisjIGRlbGV0ZSBmaXJzdCwgdG8gYXZvaWQgbXVsdGlwbGUgY29waWVzIG9mIHJ1bGVzLgorCSR7SVBUQUJMRVN9IC10IG5hdCAtRCBQUkVST1VUSU5HIC1wICRwcm90b2NvbCAtLWRlc3RpbmF0aW9uLXBvcnQgJHNyYyAtaiBETkFUIC0tdG8tZGVzdGluYXRpb24gJHszfTokZHN0CisgICAgICAgIGlmIFsgJHthY3Rpb259ICE9IGRlbCBdIDsgdGhlbgorCSAgICAke0lQVEFCTEVTfSAtdCBuYXQgLUEgUFJFUk9VVElORyAtcCAkcHJvdG9jb2wgLS1kZXN0aW5hdGlvbi1wb3J0ICRzcmMgLWogRE5BVCAtLXRvLWRlc3RpbmF0aW9uICR7M306JGRzdAorCSAgICB2ZXJiPWFkZGVkCisJZmkKKwlpZiBbIC1mICR7TE9HRklMRX0gXSA7IHRoZW4KKwkgICAgZWNobyAiICAgICBETkFUICRwcm90b2NvbCAkc3JjIHRvICR7M306JGRzdCAke3ZlcmJ9LiIgPj4ke0xPR0ZJTEV9CisJZmkKKyAgICBkb25lCitmaQorICAgIAorZXhpdCAwCisKKwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wb3J0LWZvcndhcmQvcG9ydGZvcndhcmQgYi9jb250cmliL3BvcnQtZm9yd2FyZC9wb3J0Zm9yd2FyZApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yMWZkY2ExCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wb3J0LWZvcndhcmQvcG9ydGZvcndhcmQKQEAgLTAsMCArMSwyOCBAQAorIyBUaGlzIGZpbGUgaXMgcmVhZCBieSAvdXNyL3NiaW4vZG5zbWFzcS1wb3J0Zm9yd2FyZCBhbmQgdXNlZCB0byBzZXQgdXAgcG9ydCAKKyMgZm9yd2FyZGluZyB0byBob3N0bmFtZXMuIElmIHRoZSBkbnNtYXNxLWRldGVybWluZWQgaG9zdG5hbWUgbWF0Y2hlcyB0aGUKKyMgZmlyc3QgY29sdW1uIG9mIHRoaXMgZmlsZSwgdGhlbiBhIEROQVQgcG9ydC1mb3J3YXJkIHdpbGwgYmUgc2V0IHVwIAorIyB0byB0aGUgYWRkcmVzcyB3aGljaCBoYXMganVzdCBiZWVuIGFsbG9jYXRlZCBieSBESENQIC4gVGhlIHNlY29uZCBmaWVsZCAKKyMgaXMgcG9ydCBudW1iZXIocykuIElmIHRoZXJlIGlzIG9ubHkgb25lLCB0aGVuIHRoZSBwb3J0LWZvcndhcmQgZ29lcyB0byAKKyMgdGhlIHNhbWUgcG9ydCBvbiB0aGUgREhDUC1jbGllbnQsIGlmIHRoZXJlIGFyZSB0d28gc2VwYXJhdGVkIHdpdGggYSAKKyMgY29sb24sIHRoZW4gdGhlIHNlY29uZCBudW1iZXIgaXMgdGhlIHBvcnQgdG8gd2hpY2ggdGhlIGNvbm5lY3Rpb24gCisjIGlzIGZvcndhcmRlZCBvbiB0aGUgREhDUC1jbGllbnQuIEJ5IGRlZmF1bHQsIGZvcndhcmRpbmcgaXMgc2V0IHVwIAorIyBmb3IgVENQLCBidXQgaXQgY2FuIGRvbmUgZm9yIFVEUCBpbnN0ZWFkIGJ5IHByZWZpeGluZyB0aGUgcG9ydCB0byAidSIuIAorIyBUbyBmb3J3YXJkIGJvdGggVENQIGFuZCBVRFAsIHR3byBsaW5lcyBhcmUgcmVxdWlyZWQuIAorIworIyBlZy4KKyMgd3d3c2VydmVyIDgwCisjIHdpbGwgc2V0IHVwIGEgcG9ydCBmb3J3YXJkIGZyb20gcG9ydCA4MCBvbiB0aGlzIGhvc3QgdG8gcG9ydCA4MCAKKyMgYXQgdGhlIGFkZHJlc3MgYWxsb2NhdGVkIHRvIHd3d3NlcnZlciB3aGVuZXZlciB3d3dzZXJ2ZXIgZ2V0cyBhIERIQ1AgbGVhc2UuCisjCisjIHd3d3NlcnZlciA4MDgwOjgwCisjIHdpbGwgc2V0IHVwIGEgcG9ydCBmb3J3YXJkIGZyb20gcG9ydCA4MDgwIG9uIHRoaXMgaG9zdCB0byBwb3J0IDgwCisjIG9uIHRoZSBESENQLWNsaWVudC4KKyMKKyMgZG5zc2VydmVyIDUzCisjIGRuc3NlcnZlciB1NTMKKyMgd2lsbCBwb3J0IGZvcndhcmQgcG9ydCA1MyBVRFAgYW5kIFRDUCBmcm9tIHRoaXMgaG9zdCB0byBwb3J0IDUzIG9uIGRuc3NlcnZlci4KKyMKKyMgUG9ydCBmb3J3YXJkcyB3aWxsIHJlY3JlYXRlZCB3aGVuIGRuc21hc3EgcmVzdGFydHMgYWZ0ZXIgYSByZWJvb3QsIGFuZAorIyByZW1vdmVkIHdoZW4gREhDUCBsZWFzZXMgZXhwaXJlLiBBZnRlciBlZGl0aW5nIHRoaXMgZmlsZSwgc2VuZAorIyBTSUdIVVAgdG8gZG5zbWFzcSB0byBpbnN0YWxsIG5ldyBpcHRhYmxlcyBlbnRyaWVzIGluIHRoZSBrZXJuZWwuCisKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcmV2ZXJzZS1kbnMvUkVBRE1FIGIvY29udHJpYi9yZXZlcnNlLWRucy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZkNGVmYgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcmV2ZXJzZS1kbnMvUkVBRE1FCkBAIC0wLDAgKzEsMTggQEAKK1RoZSBzY3JpcHQgcmVhZHMgc3RkaW4gYW5kIHJlcGxhY2VzIGFsbCBJUCBhZGRyZXNzZXMgd2l0aCBuYW1lcyBiZWZvcmUNCitvdXRwdXR0aW5nIGl0IGFnYWluLiBJUHMgZnJvbSBwcml2YXRlIG5ldHdvcmtzIGFyZSByZXZlcnNlIGxvb2tlZCAgdXANCit2aWEgZG5zLiBPdGhlciBJUCBhZGRyZXNzZXMgYXJlIHNlYXJjaGVkIGZvciBpbiB0aGUgZG5zbWFzcSBxdWVyeSBsb2cuDQorVGhpcyBnaXZlcyBuYW1lcyAoQ05BTUVzIGlmIEkgdW5kZXJzdGFuZCBETlMgY29ycmVjdGx5KSB0aGF0IGFyZSBjbG9zZXINCit0byB0aGUgbmFtZSB0aGUgY2xpZW50IG9yaWdpbmFsbHkgYXNrZWQgZm9yIHRoZW4gdGhlIG5hbWVzIG9idGFpbmVkIGJ5DQorcmV2ZXJzZSBsb29rdXAuIEp1c3QgcnVuDQorDQorbmV0c3RhdCAtbiAtNCB8IC4vcmV2ZXJzZV9yZXBsYWNlLnNoIA0KKw0KK3RvIHNlZSB3aGF0IGl0IGRvZXMuIEl0IG5lZWRzIA0KKw0KK2xvZy1xdWVyaWVzDQorbG9nLWZhY2lsaXR5PS92YXIvbG9nL2Ruc21hc3EubG9nDQorDQoraW4gdGhlIGRuc21hc3EgY29uZmlndXJhdGlvbi4NCisNCitUaGUgc2NyaXB0IHJ1bnMgb24gZGViaWFuICh3aXRoIGFzaCBpbnN0YWxsZWQpIGFuZCBvbiBidXN5Ym94Lg0KKw0KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcmV2ZXJzZS1kbnMvcmV2ZXJzZV9yZXBsYWNlLnNoIGIvY29udHJpYi9yZXZlcnNlLWRucy9yZXZlcnNlX3JlcGxhY2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY0MDFmYgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcmV2ZXJzZS1kbnMvcmV2ZXJzZV9yZXBsYWNlLnNoCkBAIC0wLDAgKzEsMTI1IEBACisjIS9iaW4vYXNoCisjICRJZDogcmV2ZXJzZV9yZXBsYWNlLnNoIDE4IDIwMTUtMDMtMDEgMTY6MTI6MzVaIGpvICQKKyMKKyMgVXNhZ2UgZS5nLjogbmV0c3RhdCAtbiAtNCB8IHJldmVyc2VfcmVwbGFjZS5zaCAKKyMgUGFyc2VzIHN0ZGluIGZvciBJUDQgYWRkcmVzc2VzIGFuZCByZXBsYWNlcyB0aGVtIAorIyB3aXRoIG5hbWVzIHJldHJpZXZlZCBieSBwYXJzaW5nIHRoZSBkbnNtYXNxIGxvZy4KKyMgVGhpcyBjdXJyZW50bHkgb25seSBnaXZlcyBDTkFNRXMuIEJ1dCB0aGVzZSAKKyMgdXN1YWxseSB0ZWxsIHlvdSBtb3JlIHRoYW4gdGhlIG9uZXMgZnJvbSByZXZlcnNlIAorIyBsb29rdXBzLiAKKyMKKyMgVGhpcyBoYXMgYmVlbiB0ZXN0ZWQgb24gZGViaWFuIGFuZCBhc3Vzd3J0LiBQbGVhc2UKKyMgcmVwb3J0IHN1Y2Nlc3NmdWwgdGVzdHMgb24gb3RoZXIgcGxhdGZvcm1zLgorIworIyBBdXRob3I6IEpvYWNoaW0gWm9iZWwgPGp6LTIwMTRAaGV1dGUtbW9yZ2VuLmRlPgorIyBMaWNlbnNlOiBDb25zaWRlciB0aGlzIE1JVCBzdHlsZSBsaWNlbnNlZC4gWW91IGNhbiAKKyMgICBkbyBhcyB5b3UgaWtlLCBidXQgeW91IG11c3Qgbm90IHJlbW92ZSBteSBuYW1lLgorIworCitMT0c9L3Zhci9sb2cvZG5zbWFzcS5sb2cKK01BWF9MSU5FUz0xNTAwMAorCisjIHNlZCByZWdleCBkbyBtYXRjaCBJUHMKK0lQX3JlZ2V4PSdbMC05XVx7MSwzXH1cLlswLTldXHsxLDNcfVwuWzAtOV1cezEsM1x9XC5bMC05XVx7MSwzXH0nCisjIHByaXZhdGUgSVAgcmFuZ2VzCitJUF9wcml2YXRlPSdcKF4xMjdcLlwpXHxcKF4xOTJcLjE2OFwuXClcfFwoXjEwXC5cKVx8XCheMTcyXC4xWzYtOV1cLlwpXHxcKF4xNzJcLjJbMC05XVwuXClcfFwoXjE3MlwuM1swLTFdXC5cKScKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRmluZCBDb21tYW5kcworICAKK0hPU1Q9bnNsb29rdXAKK2lmIHR5cGUgaG9zdCA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICMgZWNobyAiTm8gbmVlZCBmb3IgbnNsb29rdXAsIGhvc3QgaXMgdGhlcmUiCisgIEhPU1Q9aG9zdAorZmkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRnVuY3Rpb25zCisKKyMgVXNlIHNoZWxsIHZhcmlhYmxlcyBmb3IgYW4gKElQKSBsb29rdXAgdGFibGUKK2NyZWF0ZV9sb29rdXBfdGFibGUoKQoreworICAjIFBhcnNlIGxvZyBpbnRvIGxvb2t1cCB0YWJsZQorICBsb2NhbCBDTURTPSIkKCB0YWlsIC0iJE1BWF9MSU5FUyIgIiRMT0ciIHwgXAorICAgIGdyZXAgIiBpcyAkSVBfcmVnZXgiIHwgXAorICAgIHNlZCAicyMuKiBcKFteIF0qXCkgaXMgXCgkSVBfcmVnZXhcKS4qI3NldF92YWwgXDIgXDE7IyIgKSIKKworICBsb2NhbCBJRlM9JworJworICBmb3IgQ01EIGluICRDTURTCisgIGRvCisgICAgZXZhbCAkQ01ECisgIGRvbmUKK30KKworc2V0X3ZhbCgpCit7CisgIGxvY2FsIF9JUD0kKGVjaG8gJDEgfCB0ciAuIF8pCisgIGxvY2FsIEtFWT0iX19JUF9fJF9JUCIKKyAgZXZhbCAiJEtFWSI9JDIKK30KKworZ2V0X3ZhbCgpCit7CisgIGxvY2FsIF9JUD0kKGVjaG8gJDEgfCB0ciAuIF8pCisgIGxvY2FsIEtFWT0iX19JUF9fJF9JUCIKKyAgZXZhbCBlY2hvIC1uICckeyciJEtFWSInfScKK30KKworZG5zX2xvb2t1cCgpCit7CisgIGxvY2FsIElQPSQxCisKKyAgbG9jYWwgUlROPSIkKCRIT1NUICRJUCB8IFwKKyAgICAgICAgc2VkICdzI1xzXCsjXG4jZycgfCBcCisgICAgICAgIGdyZXAgLXYgJ14kJyB8IFwKKyAgICAgICAgdGFpbCAtMSB8IHRyIC1kICdcbicgfCBcCisgICAgICAgIHNlZCAncyNcLiQjIycpIgorICBpZiBlY2hvICRSVE4gfCBncmVwIC1xIE5YRE9NQUlOOyB0aGVuCisgICAgZWNobyAtbiAkSVAKKyAgZWxzZQorICAgIGVjaG8gLW4gIiRSVE4iCisgIGZpICAgICAKK30KKworcmV2ZXJzZV9kbnMoKQoreworICBsb2NhbCBJUD0kMQorCisgICMgU2tpcCBpZiBpdCBpcyBub3QgYW4gSVAKKyAgaWYgISBlY2hvICRJUCB8IGdyZXAgLXEgIl4kSVBfcmVnZXgkIjsgdGhlbgorICAgIGVjaG8gLW4gJElQCisgICAgcmV0dXJuIAorICBmaQorICAgIAorICAjIERvIGEgZG5zIGxvb2t1cCwgaWYgaXQgaXMgYSBsb2NhbCBJUAorICBpZiBlY2hvICRJUCB8IGdyZXAgLXEgJElQX3ByaXZhdGU7IHRoZW4KKyAgICBkbnNfbG9va3VwICRJUAorICAgIHJldHVybgorICBmaQorICAgIAorICBsb2NhbCBOQU1FPSIkKGdldF92YWwgJElQKSIKKyAgCisgIGlmIFsgLXogIiROQU1FIiBdOyB0aGVuCisgICAgZWNobyAtbiAkSVAKKyAgZWxzZQorICAgIGVjaG8gLW4gJE5BTUUKKyAgZmkKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTWFpbgorY3JlYXRlX2xvb2t1cF90YWJsZQorCit3aGlsZSByZWFkIExJTkU7IGRvCisgIGZvciBJUCBpbiAkKGVjaG8gIiRMSU5FIiB8IFwKKyAgICAgICAgICAgICAgc2VkICJzI1xiXCgkSVBfcmVnZXhcKVxiI1xuXDFcbiNnIiB8IFwKKyAgICAgICAgICAgICAgZ3JlcCAkSVBfcmVnZXgpIAorICBkbworICAgIE5BTUU9YHJldmVyc2VfZG5zICRJUCBgCisgICAgIyBlY2hvICIkTkFNRSAkSVAiCisgICAgTElORT1gZWNobyAiJExJTkUiIHwgc2VkICJzIyRJUCMkTkFNRSMiIGAgCisgIGRvbmUKKyAgZWNobyAkTElORQorZG9uZQorCmRpZmYgLS1naXQgYS9jb250cmliL3NsYWNrd2FyZS1kbnNtYXNxL2Ruc21hc3EuU2xhY2tCdWlsZCBiL2NvbnRyaWIvc2xhY2t3YXJlLWRuc21hc3EvZG5zbWFzcS5TbGFja0J1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM1YmEwODMKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3NsYWNrd2FyZS1kbnNtYXNxL2Ruc21hc3EuU2xhY2tCdWlsZApAQCAtMCwwICsxLDU2IEBACisjIS9iaW4vc2gKK0NXRD1gcHdkYAorUEtHPS90bXAvcGFja2FnZS1kbnNtYXNxCisKK1ZFUlNJT049Mi4yNAorQVJDSD0ke0FSQ0g6LWk0ODZ9CitCVUlMRD0ke0JVSUxEOi0xfQorCitpZiBbICIkQVJDSCIgPSAiaTM4NiIgXTsgdGhlbgorICBTTEtDRkxBR1M9Ii1PMiAtbWFyY2g9aTM4NiAtbWNwdT1pNjg2IgorZWxpZiBbICIkQVJDSCIgPSAiaTQ4NiIgXTsgdGhlbgorICBTTEtDRkxBR1M9Ii1PMiAtbWFyY2g9aTQ4NiAtbWNwdT1pNjg2IgorZWxpZiBbICIkQVJDSCIgPSAiczM5MCIgXTsgdGhlbgorICBTTEtDRkxBR1M9Ii1PMiIKK2VsaWYgWyAiJEFSQ0giID0gIng4Nl82NCIgXTsgdGhlbgorICBTTEtDRkxBR1M9Ii1PMiIKK2ZpCisKK3JtIC1yZiAkUEtHCitta2RpciAtcCAkUEtHCitjZCAvdG1wCitybSAtcmYgZG5zbWFzcS0kVkVSU0lPTgordGFyIHh6dmYgJENXRC9kbnNtYXNxLSRWRVJTSU9OLnRhci5negorY2QgZG5zbWFzcS0kVkVSU0lPTgoremNhdCAkQ1dEL2Ruc21hc3EubGVhc2VkaXIuZGlmZi5neiB8IHBhdGNoIC1wMSAtLXZlcmJvc2UgLS1iYWNrdXAgLS1zdWZmaXg9Lm9yaWcgfHwgZXhpdAorY2hvd24gLVIgcm9vdC5yb290IC4KK21ha2UgaW5zdGFsbC1pMThuIFBSRUZJWD0vdXNyIERFU1RESVI9JFBLRyBNQU5ESVI9L3Vzci9tYW4KK2NobW9kIDc1NSAkUEtHL3Vzci9zYmluL2Ruc21hc3EKK2Nob3duIC1SIHJvb3QuYmluICRQS0cvdXNyL3NiaW4KK2d6aXAgLTkgJFBLRy91c3IvbWFuL21hbjgvZG5zbWFzcS44Citmb3IgZiBpbiAkUEtHL3Vzci9zaGFyZS9tYW4vKjsgZG8gCisgICBpZiBbIC1mICQkZi9tYW44L2Ruc21hc3EuOCBdOyB0aGVuIAorICAgICAgICBnemlwIC05ICQkZi9tYW44L2Ruc21hc3EuOCA7IAorICAgZmkgCitkb25lCitnemlwIC05ICRQS0cvdXNyL21hbi8qL21hbjgvZG5zbWFzcS44Citta2RpciAtcCAkUEtHL3Zhci9zdGF0ZS9kbnNtYXNxCisoIGNkICRQS0cKKyAgZmluZCAuIHwgeGFyZ3MgZmlsZSB8IGdyZXAgImV4ZWN1dGFibGUiIHwgZ3JlcCBFTEYgfCBjdXQgLWYgMSAtZCA6IHwgeGFyZ3Mgc3RyaXAgLS1zdHJpcC11bm5lZWRlZCAyPiAvZGV2L251bGwKKyAgZmluZCAuIHwgeGFyZ3MgZmlsZSB8IGdyZXAgInNoYXJlZCBvYmplY3QiIHwgZ3JlcCBFTEYgfCBjdXQgLWYgMSAtZCA6IHwgeGFyZ3Mgc3RyaXAgLS1zdHJpcC11bm5lZWRlZCAyPiAvZGV2L251bGwKKykKK21rZGlyICRQS0cvZXRjCitjYXQgZG5zbWFzcS5jb25mLmV4YW1wbGUgPiAkUEtHL2V0Yy9kbnNtYXNxLmNvbmYubmV3Citta2RpciAkUEtHL2V0Yy9yYy5kCit6Y2F0ICRDV0QvcmMuZG5zbWFzcS5neiA+ICRQS0cvZXRjL3JjLmQvcmMuZG5zbWFzcS5uZXcKK21rZGlyIC1wICRQS0cvdXNyL2RvYy9kbnNtYXNxLSRWRVJTSU9OCitjcCAtYSBcCisgIENIQU5HRUxPRyBDT1BZSU5HIEZBUSBVUEdSQURJTkdfdG9fMi4wIGRvYy5odG1sIHNldHVwLmh0bWwgXAorICAkUEtHL3Vzci9kb2MvZG5zbWFzcS0kVkVSU0lPTgorbWtkaXIgLXAgJFBLRy9pbnN0YWxsCitjYXQgJENXRC9zbGFjay1kZXNjID4gJFBLRy9pbnN0YWxsL3NsYWNrLWRlc2MKK3pjYXQgJENXRC9kb2luc3Quc2guZ3ogPiAkUEtHL2luc3RhbGwvZG9pbnN0LnNoCisKK2NkICRQS0cKK21ha2Vwa2cgLWwgeSAtYyBuIC4uL2Ruc21hc3EtJFZFUlNJT04tJEFSQ0gtJEJVSUxELnRnegorCmRpZmYgLS1naXQgYS9jb250cmliL3NsYWNrd2FyZS1kbnNtYXNxL2Ruc21hc3EubGVhc2VkaXIuZGlmZi5neiBiL2NvbnRyaWIvc2xhY2t3YXJlLWRuc21hc3EvZG5zbWFzcS5sZWFzZWRpci5kaWZmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIyZmMzMmIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3NsYWNrd2FyZS1kbnNtYXNxL2Ruc21hc3EubGVhc2VkaXIuZGlmZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb250cmliL3NsYWNrd2FyZS1kbnNtYXNxL2RvaW5zdC5zaC5neiBiL2NvbnRyaWIvc2xhY2t3YXJlLWRuc21hc3EvZG9pbnN0LnNoLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNiNDQyMjcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3NsYWNrd2FyZS1kbnNtYXNxL2RvaW5zdC5zaC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb250cmliL3NsYWNrd2FyZS1kbnNtYXNxL3JjLmRuc21hc3EuZ3ogYi9jb250cmliL3NsYWNrd2FyZS1kbnNtYXNxL3JjLmRuc21hc3EuZ3oKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTg2YWJiYgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvc2xhY2t3YXJlLWRuc21hc3EvcmMuZG5zbWFzcS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb250cmliL3NsYWNrd2FyZS1kbnNtYXNxL3NsYWNrLWRlc2MgYi9jb250cmliL3NsYWNrd2FyZS1kbnNtYXNxL3NsYWNrLWRlc2MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGEwYzU3NwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvc2xhY2t3YXJlLWRuc21hc3Evc2xhY2stZGVzYwpAQCAtMCwwICsxLDE5IEBACisjIEhPVyBUTyBFRElUIFRISVMgRklMRToKKyMgVGhlICJoYW5keSBydWxlciIgYmVsb3cgbWFrZXMgaXQgZWFzaWVyIHRvIGVkaXQgYSBwYWNrYWdlIGRlc2NyaXB0aW9uLiAgTGluZQorIyB1cCB0aGUgZmlyc3QgJ3wnIGFib3ZlIHRoZSAnOicgZm9sbG93aW5nIHRoZSBiYXNlIHBhY2thZ2UgbmFtZSwgYW5kIHRoZSAnfCcgb24KKyMgdGhlIHJpZ2h0IHNpZGUgbWFya3MgdGhlIGxhc3QgY29sdW1uIHlvdSBjYW4gcHV0IGEgY2hhcmFjdGVyIGluLiAgWW91IG11c3QgbWFrZQorIyBleGFjdGx5IDExIGxpbmVzIGZvciB0aGUgZm9ybWF0dGluZyB0byBiZSBjb3JyZWN0LiAgSXQncyBhbHNvIGN1c3RvbWFyeSB0bworIyBsZWF2ZSBvbmUgc3BhY2UgYWZ0ZXIgdGhlICc6Jy4KKworICAgICAgIHwtLS0tLWhhbmR5LXJ1bGVyLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorZG5zbWFzcTogZG5zbWFzcSAoc21hbGwgRE5TIGFuZCBESENQIHNlcnZlcikKK2Ruc21hc3E6CitkbnNtYXNxOiBEbnNtYXNxIGlzIGEgbGlnaHR3ZWlnaHQsIGVhc3kgdG8gY29uZmlndXJlIEROUyBmb3J3YXJkZXIgYW5kIERIQ1AKK2Ruc21hc3E6IHNlcnZlci4gIEl0IGlzIGRlc2lnbmVkIHRvIHByb3ZpZGUgRE5TIChhbmQgb3B0aW9uYWxseSBESENQKSB0byBhCitkbnNtYXNxOiBzbWFsbCBuZXR3b3JrLCBhbmQgY2FuIHNlcnZlIHRoZSBuYW1lcyBvZiBsb2NhbCBtYWNoaW5lcyB3aGljaCBhcmUgbm90CitkbnNtYXNxOiBpbiB0aGUgZ2xvYmFsIEROUy4gCitkbnNtYXNxOgorZG5zbWFzcTogRG5zbWFzcSB3YXMgd3JpdHRlbiBieSBTaW1vbiBLZWxsZXkuCitkbnNtYXNxOgorZG5zbWFzcToKK2Ruc21hc3E6CmRpZmYgLS1naXQgYS9jb250cmliL3N0YXRpYy1hcnAvc3RhdGljLWFycCBiL2NvbnRyaWIvc3RhdGljLWFycC9zdGF0aWMtYXJwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMTE1YjcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3N0YXRpYy1hcnAvc3RhdGljLWFycApAQCAtMCwwICsxLDM1IEBACisjIS9iaW4vc2gKKworIyBDb250cmlidXRlZCBieSBEYXJyZW4gSG9vIDxkYXJyZW4uaG9vQGdtYWlsLmNvbT4KKworIyBJZiB5b3UgdXNlIGRuc21hc3EgYXMgREhDUCBzZXJ2ZXIgb24gYSByb3V0ZXIsIHlvdSBtYXkgaGF2ZQorIyBtZXQgd2l0aCBhdHRhY2tlcnMgdHJ5aW5nIEFSUCBQb2lzb24gUm91dGluZyAoQVBSKSBvbiB5b3VyCisjIGxvY2FsIGFyZWEgbmV0d29yay4gVGhpcyBzY3JpcHQgd2lsbCBzZXR1cCBhICdwZXJtYW5lbnQnIGVudHJ5CisjIGluIHRoZSByb3V0ZXIncyBBUlAgdGFibGUgdXBvbiBlYWNoIERIQ1AgdHJhbnNhY3Rpb24gc28gYXMgdG8KKyMgbWFrZSB0aGUgYXR0YWNrZXIncyBlZmZvcnRzIGxlc3Mgc3VjY2Vzc2Z1bC4KKworIyBVc2FnZToKKyMgZWRpdCAvZXRjL2Ruc21hc3EuY29uZiBhbmQgc3BlY2lmeSB0aGUgcGF0aCBvZiB0aGlzIHNjcmlwdAorIyB0byAgZGhjcC1zY3JpcHQsIGZvciBleGFtcGxlOgorIyAgZGhjcC1zY3JpcHQ9L3Vzci9zYmluL3N0YXRpYy1hcnAKKworIyBpZiAkMSBpcyBhZGQgb3Igb2xkLCB1cGRhdGUgdGhlIHN0YXRpYyBhcnAgdGFibGUgZW50cnkuCisjIGlmICQxIGlzIGRlbCwgdGhlbiBkZWxldGUgdGhlIGVudHJ5IGZyb20gdGhlIHRhYmxlCisjIGlmICQxIGlzIGluaXQgd2hpY2ggaXMgY2FsbGVkIGJ5IGRuc21hc3EgYXQgc3RhcnR1cCwgaXQncyBpZ25vcmVkCisKK0FSUD0vdXNyL3NiaW4vYXJwCisKKyMgQXJndW1lbnRzLgorIyAkMSBpcyBhY3Rpb24gKGFkZCwgZGVsLCBvbGQpCisjICQyIGlzIE1BQworIyAkMyBpcyBhZGRyZXNzCisjICQ0IGlzIGhvc3RuYW1lIChvcHRpb25hbCwgbWF5IGJlIHVuc2V0KQorCitpZiBbICR7MX0gPSBkZWwgXSA7IHRoZW4KKyAgICAgICAgICR7QVJQfSAtZCAkMworZmkKKworaWYgWyAkezF9ID0gb2xkIF0gfHwgWyAkezF9ID0gYWRkIF0gOyB0aGVuCisgICAgICAgICAke0FSUH0gLXMgJDMgJDIKK2ZpCisKZGlmZiAtLWdpdCBhL2NvbnRyaWIvc3lzdGVtZC9SRUFETUUgYi9jb250cmliL3N5c3RlbWQvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MDQ2YzIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3N5c3RlbWQvUkVBRE1FCkBAIC0wLDAgKzEsMTYgQEAKK0hlbGxvLAorCitJIGNyZWF0ZWQgYSBzeXN0ZW1kIHNlcnZpY2UgZmlsZSBmb3IgZG5zbWFzcS4KK3N5c3RlbWQgaXMgYSBzeXN2aW5pdCByZXBsYWNlbWVudCAoc2VlIFsxXSBmb3IgbW9yZSBpbmZvcm1hdGlvbikuCitPbmUgb2YgdGhlIGdvYWxzIG9mIHN5c3RlbWQgaXMgdG8gZW5jb3VyYWdlIHN0YW5kYXJkaXphdGlvbiBiZXR3ZWVuIGRpZmZlcmVudAorZGlzdHJpYnV0aW9ucy4gVGhpcyBtZWFucywgd2hpbGUgSSBhbHNvIHN1Ym1pdHRlZCBhIHRpY2tldCBpbiBEZWJpYW4gR05VL0xpbnV4LAorSSB3b3VsZCBsaWtlIHRvIGFzayB5b3UgdG8gYWNjZXB0IHRoaXMgc2VydmljZSBmaWxlIGFzIHRoZSB1cHN0cmVhbQorZGlzdHJpYnV0b3IsIHNvIHRoYXQgb3RoZXIgZGlzdHJpYnV0aW9ucyBjYW4gdXNlIHRoZSBzYW1lIHNlcnZpY2UgZmlsZSBhbmQKK2RvbuKAmXQgaGF2ZSB0byBzaGlwIHRoZWlyIG93bi4KKworUGxlYXNlIGluY2x1ZGUgdGhpcyBmaWxlIGluIHlvdXIgbmV4dCByZWxlYXNlIChqdXN0IGxpa2UgaW4gaW5pdCBzY3JpcHQpLgorCisKK1sxXSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1N5c3RlbWQKKworCmRpZmYgLS1naXQgYS9jb250cmliL3N5c3RlbWQvZGJ1c19hY3RpdmF0aW9uIGIvY29udHJpYi9zeXN0ZW1kL2RidXNfYWN0aXZhdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGYwODIyCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9zeXN0ZW1kL2RidXNfYWN0aXZhdGlvbgpAQCAtMCwwICsxLDU3IEBACitUbzogZG5zbWFzcS1kaXNjdXNzQGxpc3RzLnRoZWtlbGxleXMub3JnLnVrDQorRnJvbTogQWxleCBFbHNheWVkIDxldGVybmFsZXllK3VzZW5ldEBnbWFpbC5jb20+DQorRGF0ZTogVHVlLCAxNSBNYXkgMjAxMiAwMTo1Mzo1NCAtMDcwMA0KK1N1YmplY3Q6IFtEbnNtYXNxLWRpc2N1c3NdIFtQQVRDSF0gU3VwcG9ydCBkYnVzIGFjdGl2YXRpb24NCisNCitJbnRyb2R1Y2UgZGJ1cyBzZXJ2aWNlIGZpbGUgYW5kIHR1cm4gZGJ1cyBvbiBpbiB0aGUgc3lzdGVtZA0KK3VuaXQuDQorDQorTm90ZSB0byBwYWNrYWdlcnM6DQorVG8gYWRkIHN1cHBvcnQgZm9yIGRidXMgYWN0aXZhdGlvbiwgeW91IG11c3QgaW5zdGFsbCB0aGUgZGJ1cw0KK3NlcnZpY2UgZmlsZSAoZGJ1cy91ay5vcmcudGhla2VsbGV5cy5kbnNtYXNxLnNlcnZpY2UpIGludG8NCiskREFUQURJUi9kYnVzLTEvc3lzdGVtLXNlcnZpY2VzLg0KKw0KKy0tLQ0KKyBjb250cmliL3N5c3RlbWQvZG5zbWFzcS5zZXJ2aWNlICAgICAgICB8ICAgIDIgKy0NCisgZGJ1cy91ay5vcmcudGhla2VsbGV5cy5kbnNtYXNxLnNlcnZpY2UgfCAgICA3ICsrKysrKysNCisgMiBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkNCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGRidXMvdWsub3JnLnRoZWtlbGxleXMuZG5zbWFzcS5zZXJ2aWNlDQorDQorZGlmZiAtLWdpdCBhL2NvbnRyaWIvc3lzdGVtZC9kbnNtYXNxLnNlcnZpY2UgDQorYi9jb250cmliL3N5c3RlbWQvZG5zbWFzcS5zZXJ2aWNlDQoraW5kZXggYTI3ZmU2ZC4uNGE3ODRkMyAxMDA2NDQNCistLS0gYS9jb250cmliL3N5c3RlbWQvZG5zbWFzcS5zZXJ2aWNlDQorKysrIGIvY29udHJpYi9zeXN0ZW1kL2Ruc21hc3Euc2VydmljZQ0KK0BAIC01LDcgKzUsNyBAQCBEZXNjcmlwdGlvbj1BIGxpZ2h0d2VpZ2h0IERIQ1AgYW5kIGNhY2hpbmcgRE5TIHNlcnZlcg0KKyBUeXBlPWRidXMNCisgQnVzTmFtZT11ay5vcmcudGhla2VsbGV5cy5kbnNtYXNxDQorIEV4ZWNTdGFydFByZT0vdXNyL3NiaW4vZG5zbWFzcSAtLXRlc3QNCistRXhlY1N0YXJ0PS91c3Ivc2Jpbi9kbnNtYXNxIC1rDQorK0V4ZWNTdGFydD0vdXNyL3NiaW4vZG5zbWFzcSAtayAtMQ0KKyBFeGVjUmVsb2FkPS9iaW4va2lsbCAtSFVQICRNQUlOUElEDQorIA0KKyBbSW5zdGFsbF0NCitkaWZmIC0tZ2l0IGEvZGJ1cy91ay5vcmcudGhla2VsbGV5cy5kbnNtYXNxLnNlcnZpY2UgDQorYi9kYnVzL3VrLm9yZy50aGVrZWxsZXlzLmRuc21hc3Euc2VydmljZQ0KK25ldyBmaWxlIG1vZGUgMTAwNjQ0DQoraW5kZXggMDAwMDAwMC4uZjVmZTk4ZA0KKy0tLSAvZGV2L251bGwNCisrKysgYi9kYnVzL3VrLm9yZy50aGVrZWxsZXlzLmRuc21hc3Euc2VydmljZQ0KK0BAIC0wLDAgKzEsNyBAQA0KKytbRC1CVVMgU2VydmljZV0NCisrTmFtZT11ay5vcmcudGhla2VsbGV5cy5kbnNtYXNxDQorK0V4ZWM9L3Vzci9zYmluL2Ruc21hc3EgLWsgLTENCisrVXNlcj1yb290DQorK1N5c3RlbWRTZXJ2aWNlPWRuc21hc3Euc2VydmljZQ0KKysNCisrDQorLS0gDQorMS43LjEwLjINCisNCisNCisNCitfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KK0Ruc21hc3EtZGlzY3VzcyBtYWlsaW5nIGxpc3QNCitEbnNtYXNxLWRpc2N1c3NAbGlzdHMudGhla2VsbGV5cy5vcmcudWsNCitodHRwOi8vbGlzdHMudGhla2VsbGV5cy5vcmcudWsvbWFpbG1hbi9saXN0aW5mby9kbnNtYXNxLWRpc2N1c3MNCisNCmRpZmYgLS1naXQgYS9jb250cmliL3N5c3RlbWQvZG5zbWFzcS5zZXJ2aWNlIGIvY29udHJpYi9zeXN0ZW1kL2Ruc21hc3Euc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzBiMTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9zeXN0ZW1kL2Ruc21hc3Euc2VydmljZQpAQCAtMCwwICsxLDEyIEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPWRuc21hc3EgLSBBIGxpZ2h0d2VpZ2h0IERIQ1AgYW5kIGNhY2hpbmcgRE5TIHNlcnZlcgorCitbU2VydmljZV0KK1R5cGU9ZGJ1cworQnVzTmFtZT11ay5vcmcudGhla2VsbGV5cy5kbnNtYXNxCitFeGVjU3RhcnRQcmU9L3Vzci9zYmluL2Ruc21hc3EgLS10ZXN0CitFeGVjU3RhcnQ9L3Vzci9zYmluL2Ruc21hc3EgLWsKK0V4ZWNSZWxvYWQ9L2Jpbi9raWxsIC1IVVAgJE1BSU5QSUQKKworW0luc3RhbGxdCitXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldApkaWZmIC0tZ2l0IGEvY29udHJpYi90cnktYWxsLW5zL1JFQURNRSBiL2NvbnRyaWIvdHJ5LWFsbC1ucy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjI0ZDU1NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvdHJ5LWFsbC1ucy9SRUFETUUKQEAgLTAsMCArMSwxOSBAQAorRGF0ZTogVGh1LCAwNyBEZWMgMjAwNiAwMDo0MTo0MyAtMDUwMAorRnJvbTogQm9iIENhcnJvbGwgPGJvYi5jYXJyb2xsQHJpdC5lZHU+CitTdWJqZWN0OiBkbnNtYXNxIHN1Z2dlc3Rpb24KK1RvOiBzaW1vbkB0aGVrZWxsZXlzLm9yZy51aworCisKK0hlbGxvLAorCitJIHJlY2VudGx5IG5lZWRlZCBhIGZlYXR1cmUgaW4gZG5zbWFzcSBmb3IgYSB2ZXJ5IGJpemFycmUgc2l0dWF0aW9uLiBJIAorcGxhY2VkIGEgbGlzdCBvZiBuYW1lIHNlcnZlcnMgaW4gYSBzcGVjaWFsIHJlc29sdmUgZmlsZSBhbmQgdG9sZCBkbnNtYXNxIAordG8gdXNlIHRoYXQuIEJ1dCBJIHdhbnRlZCBpdCB0byB0cnkgcmVxdWVzdHMgaW4gb3JkZXIgYW5kIHRyZWF0IE5YRE9NQUlOIAorcmVxdWVzdHMgYXMgYSBmYWlsZWQgdGNwIGNvbm5lY3Rpb24uIEkgd3JvdGUgdGhlIGZlYXR1cmUgaW50byBkbnNtYXNxIAorYW5kIGl0IHNlZW1zIHRvIHdvcmsuIEkgcHJlcGFyZWQgYSBwYXRjaCBpbiB0aGUgZXZlbnQgdGhhdCBvdGhlcnMgbWlnaHQgCitmaW5kIGl0IHVzZWZ1bCBhcyB3ZWxsLgorCitUaGFua3MgYW5kIGtlZXAgdXAgdGhlIGdvb2Qgd29yay4KKworLS1Cb2IKKwpkaWZmIC0tZ2l0IGEvY29udHJpYi90cnktYWxsLW5zL1JFQURNRS0yLjQ3IGIvY29udHJpYi90cnktYWxsLW5zL1JFQURNRS0yLjQ3Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJmZTRlYzcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3RyeS1hbGwtbnMvUkVBRE1FLTIuNDcKQEAgLTAsMCArMSwxMSBAQAorQSByZW1ha2Ugb2YgcGF0Y2ggQm9iIENhcnJvbGwgaGFkIHBvc3RlZCB0byBkbnNtYXNxLAorbm93IGNvbXBhdGlibGUgd2l0aCB2ZXJzaW9uIDIuNDcuIEhvcGVmdWxseSBoZSBkb2Vzbid0IAorbWluZCAoc2VuZGluZyBhIGNvcHkgb2YgdGhpcyBtYWlsIHRvIGhpbSB0b28pLgorCitNYXliZSB0aGUgcGF0Y2ggaW4gcXVlc3Rpb24gaXMgbm90IGFjY2VwdGFibGUKK2FzIGl0IGRvZXNuJ3QgYWRkIG5ldyBzd2l0Y2gsIHJhdGhlciBpdCBiaW5kcyBpdHNlbGYgdG8gInN0cmljdC1vcmRlciIuCisKK1doYXQgaXQgZG9lcyBpczogaWYgeW91IGhhdmUgc3RyaWN0LW9yZGVyIGluIHRoZSAKK2Ruc21hc3EgY29uZmlnIGZpbGUgYW5kIHF1ZXJ5IGEgZG9tYWluIHRoYXQgd291bGQgcmVzdWx0IAoraW4gTlhET01BSU4sIGl0IGl0ZXJhdGVzIHRoZSB3aG9sZSBnaXZlbiBuYW1lc2VydmVyIGxpc3QgCit1bnRpbCB0aGUgbGFzdCBvbmUgc2F5cyBOWERPTUFJTi4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvdHJ5LWFsbC1ucy9SRUFETUUtMi43OCBiL2NvbnRyaWIvdHJ5LWFsbC1ucy9SRUFETUUtMi43OApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGZkMjAwCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi90cnktYWxsLW5zL1JFQURNRS0yLjc4CkBAIC0wLDAgKzEsMTAgQEAKK0hpLAorSSB1cGRhdGVkIHRoZSB0cnktYWxsLW5zIHBhdGNoIHRvIHdvcmsgd2l0aCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgZ2l0LiBFbmRlZCB1cCBpbXBsZW1lbnRpbmcgaXQgb24gdG9wIG9mIG1hc3RlciwgMi43OHRlc3QyLTctZzYzNDM3ZmYuIEFzIHRoYXQgc3BlY2lmaWMgaWYtY2xhdXNlIGhhcyBiZWVuIGNoYW5nZWQgaW4gdGhlIGxhc3QgZmV3IGNvbW1pdHMsIGl0J3Mgbm90IGNvbXBhdGlibGUgZm9yIDIuNzcsIHNhZGx5LgorCitGaW5kIHRoZSBwYXRjaCBhdHRhY2hlZC4KKworUmVnYXJkcywKKworUmFzbXVzIEFobGJlcmcKK1NvZnR3YXJlIERldmVsb3BlciwgUiZECitFbGVjdHJvbHV4IFNtYWxsIEFwcGxpYW5jZXMKZGlmZiAtLWdpdCBhL2NvbnRyaWIvdHJ5LWFsbC1ucy9kbnNtYXNxLTIuMzUtdHJ5LWFsbC1ucy5wYXRjaCBiL2NvbnRyaWIvdHJ5LWFsbC1ucy9kbnNtYXNxLTIuMzUtdHJ5LWFsbC1ucy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lYzNmM2UwCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi90cnktYWxsLW5zL2Ruc21hc3EtMi4zNS10cnktYWxsLW5zLnBhdGNoCkBAIC0wLDAgKzEsNjEgQEAKK2RpZmYgLU5hdSBkbnNtYXNxLTIuMzUvc3JjL2Ruc21hc3EuaCBkbnNtYXNxL3NyYy9kbnNtYXNxLmgKKy0tLSBkbnNtYXNxLTIuMzUvc3JjL2Ruc21hc3EuaAkyMDA2LTEwLTE4IDE2OjI0OjUwLjAwMDAwMDAwMCAtMDQwMAorKysrIGRuc21hc3Evc3JjL2Ruc21hc3EuaAkyMDA2LTExLTE2IDIyOjA2OjMxLjAwMDAwMDAwMCAtMDUwMAorQEAgLTExMiw2ICsxMTIsNyBAQAorICNkZWZpbmUgT1BUX05PX1BJTkcgICAgICAgIDIwOTcxNTIKKyAjZGVmaW5lIE9QVF9MRUFTRV9STyAgICAgICA0MTk0MzA0CisgI2RlZmluZSBPUFRfUkVMT0FEICAgICAgICAgODM4ODYwOAorKyNkZWZpbmUgT1BUX1RSWV9BTExfTlMgICAgIDE2Nzc3MjE2CisgCisgc3RydWN0IGFsbF9hZGRyIHsKKyAgIHVuaW9uIHsKK2RpZmYgLU5hdSBkbnNtYXNxLTIuMzUvc3JjL2ZvcndhcmQuYyBkbnNtYXNxL3NyYy9mb3J3YXJkLmMKKy0tLSBkbnNtYXNxLTIuMzUvc3JjL2ZvcndhcmQuYwkyMDA2LTEwLTE4IDE2OjI0OjUwLjAwMDAwMDAwMCAtMDQwMAorKysrIGRuc21hc3Evc3JjL2ZvcndhcmQuYwkyMDA2LTExLTE2IDIyOjA4OjE5LjAwMDAwMDAwMCAtMDUwMAorQEAgLTQ0NSw2ICs0NDUsMTAgQEAKKyAgICAgeworICAgICAgICBzdHJ1Y3Qgc2VydmVyICpzZXJ2ZXIgPSBmb3J3YXJkLT5zZW50dG87CisgICAgICAgIAorKyAgICAgICAvLyBJZiBzdHJpY3Qtb3JkZXIgYW5kIHRyeS1hbGwtbnMgYXJlIHNldCwgdHJlYXQgTlhET01BSU4gYXMgYSBmYWlsZWQgcmVxdWVzdAorKyAgICAgICBpZiggKGRhZW1vbi0+b3B0aW9ucyAmIE9QVF9PUkRFUikgJiYgKGRhZW1vbi0+b3B0aW9ucyAmJiBPUFRfVFJZX0FMTF9OUykKKysgICAgICAgICAgICYmIGhlYWRlci0+cmNvZGUgPT0gTlhET01BSU4gKSBoZWFkZXItPnJjb2RlID0gU0VSVkZBSUw7CisrCisgICAgICAgIGlmICgoaGVhZGVyLT5yY29kZSA9PSBTRVJWRkFJTCB8fCBoZWFkZXItPnJjb2RlID09IFJFRlVTRUQpICYmIGZvcndhcmQtPmZvcndhcmRhbGwgPT0gMCkKKyAJIC8qIGZvciBicm9rZW4gc2VydmVycywgYXR0ZW1wdCB0byBzZW5kIHRvIGFub3RoZXIgb25lLiAqLworIAkgeworZGlmZiAtTmF1IGRuc21hc3EtMi4zNS9zcmMvb3B0aW9uLmMgZG5zbWFzcS9zcmMvb3B0aW9uLmMKKy0tLSBkbnNtYXNxLTIuMzUvc3JjL29wdGlvbi5jCTIwMDYtMTAtMTggMTY6MjQ6NTAuMDAwMDAwMDAwIC0wNDAwCisrKysgZG5zbWFzcS9zcmMvb3B0aW9uLmMJMjAwNi0xMS0xNiAyMjoxMDozNi4wMDAwMDAwMDAgLTA1MDAKK0BAIC0yOCw3ICsyOCw3IEBACisgCisgLyogb3B0aW9ucyB3aGljaCBkb24ndCBoYXZlIGEgb25lLWNoYXIgdmVyc2lvbiAqLworICNkZWZpbmUgTE9QVF9SRUxPQUQgMjU2CistCisrI2RlZmluZSBMT1BUX1RSWV9BTExfTlMgMjU3CisgCisgI2lmZGVmIEhBVkVfR0VUT1BUX0xPTkcKKyBzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBvcHRzW10gPSAgCitAQCAtMTAyLDYgKzEwMiw3IEBACisgICAgIHsibGVhc2VmaWxlLXJvIiwgMCwgMCwgJzknfSwKKyAgICAgeyJkbnMtZm9yd2FyZC1tYXgiLCAxLCAwLCAnMCd9LAorICAgICB7ImNsZWFyLW9uLXJlbG9hZCIsIDAsIDAsIExPUFRfUkVMT0FEIH0sCisrICAgIHsidHJ5LWFsbC1ucyIsIDAsIDAsIExPUFRfVFJZX0FMTF9OUyB9LAorICAgICB7IE5VTEwsIDAsIDAsIDAgfQorICAgfTsKKyAKK0BAIC0xMzQsNiArMTM1LDcgQEAKKyAgIHsgJzUnLCAgICAgICAgICAgIE9QVF9OT19QSU5HIH0sCisgICB7ICc5JywgICAgICAgICAgICBPUFRfTEVBU0VfUk8gfSwKKyAgIHsgTE9QVF9SRUxPQUQsICAgIE9QVF9SRUxPQUQgfSwKKysgIHsgTE9QVF9UUllfQUxMX05TLE9QVF9UUllfQUxMX05TIH0sCisgICB7ICd2JywgICAgICAgICAgICAwfSwKKyAgIHsgJ3cnLCAgICAgICAgICAgIDB9LAorICAgeyAwLCAwIH0KK0BAIC0yMDgsNiArMjEwLDcgQEAKKyAgIHsgIi05LCAtLWxlYXNlZmlsZS1ybyIsIGdldHRleHRfbm9vcCgiUmVhZCBsZWFzZXMgYXQgc3RhcnR1cCwgYnV0IG5ldmVyIHdyaXRlIHRoZSBsZWFzZSBmaWxlLiIpLCBOVUxMIH0sCisgICB7ICItMCwgLS1kbnMtZm9yd2FyZC1tYXg9PHF1ZXJpZXM+IiwgZ2V0dGV4dF9ub29wKCJNYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IEROUyBxdWVyaWVzLiAoZGVmYXVsdHMgdG8gJXMpIiksICIhIiB9LCAKKyAgIHsgIiAgICAtLWNsZWFyLW9uLXJlbG9hZCIsIGdldHRleHRfbm9vcCgiQ2xlYXIgRE5TIGNhY2hlIHdoZW4gcmVsb2FkaW5nICVzLiIpLCBSRVNPTFZGSUxFIH0sCisrICB7ICIgICAgLS10cnktYWxsLW5zIiwgZ2V0dGV4dF9ub29wKCJUcnkgYWxsIG5hbWUgc2VydmVycyBpbiB0YW5kZW0gb24gTlhET01BSU4gcmVwbGllcyAodXNlIHdpdGggc3RyaWN0LW9yZGVyKS4iKSwgTlVMTCB9LAorICAgeyBOVUxMLCBOVUxMLCBOVUxMIH0KKyB9OyAKKyAKZGlmZiAtLWdpdCBhL2NvbnRyaWIvdHJ5LWFsbC1ucy9kbnNtYXNxLTIuNDdfbm9fbnhkb21haW5fdW50aWxfZW5kLnBhdGNoIGIvY29udHJpYi90cnktYWxsLW5zL2Ruc21hc3EtMi40N19ub19ueGRvbWFpbl91bnRpbF9lbmQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzU4NjAwMwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvdHJ5LWFsbC1ucy9kbnNtYXNxLTIuNDdfbm9fbnhkb21haW5fdW50aWxfZW5kLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK2RpZmYgLXVyIGRuc21hc3EtMi40Ny9zcmMvZm9yd2FyZC5jIGRuc21hc3EtMi40Ny1wYXRjaGVkL3NyYy9mb3J3YXJkLmMKKy0tLSBkbnNtYXNxLTIuNDcvc3JjL2ZvcndhcmQuYwkyMDA5LTAyLTAxIDE3OjU5OjQ4LjAwMDAwMDAwMCArMDIwMAorKysrIGRuc21hc3EtMi40Ny1wYXRjaGVkL3NyYy9mb3J3YXJkLmMJMjAwOS0wMy0xOCAxOToxMDoyMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC00ODgsOSArNDg4LDEyIEBACisgICAgIHJldHVybjsKKyAgICAKKyAgIHNlcnZlciA9IGZvcndhcmQtPnNlbnR0bzsKKysKKysgIGlmICggKGhlYWRlci0+cmNvZGUgPT0gTlhET01BSU4pICYmICgoZGFlbW9uLT5vcHRpb25zICYgT1BUX09SREVSKSAhPSAwKSAmJiAoc2VydmVyLT5uZXh0ICE9IE5VTEwpICkKKysgICAgaGVhZGVyLT5yY29kZSA9IFNFUlZGQUlMOworICAgCisgICBpZiAoKGhlYWRlci0+cmNvZGUgPT0gU0VSVkZBSUwgfHwgaGVhZGVyLT5yY29kZSA9PSBSRUZVU0VEKSAmJgorLSAgICAgICEoZGFlbW9uLT5vcHRpb25zICYgT1BUX09SREVSKSAmJgorKyAgICAgICgoZGFlbW9uLT5vcHRpb25zICYgT1BUX09SREVSKSAhPSAwKSAmJgorICAgICAgIGZvcndhcmQtPmZvcndhcmRhbGwgPT0gMCkKKyAgICAgLyogZm9yIGJyb2tlbiBzZXJ2ZXJzLCBhdHRlbXB0IHRvIHNlbmQgdG8gYW5vdGhlciBvbmUuICovCisgICAgIHsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvdHJ5LWFsbC1ucy9kbnNtYXNxLTIuNjgtdHJ5LWFsbC1ucyBiL2NvbnRyaWIvdHJ5LWFsbC1ucy9kbnNtYXNxLTIuNjgtdHJ5LWFsbC1ucwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmE0MWY2Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi90cnktYWxsLW5zL2Ruc21hc3EtMi42OC10cnktYWxsLW5zCkBAIC0wLDAgKzEsMjkgQEAKK0Zyb206IEplc3NlIEdsaWNrIDxqZ2xpY2tAY2xvdWRiZWVzLmNvbT4KK1RvOiBkbnNtYXNxLWRpc2N1c3NAbGlzdHMudGhla2VsbGV5cy5vcmcudWsKK1N1YmplY3Q6IFJlOiBbRG5zbWFzcS1kaXNjdXNzXSBBYmlsaXR5IHRvIGRlbGVnYXRlIHRvIG9uZSBzZXJ2ZXIgYnV0IGZhbGwKKyBiYWNrIHRvIGFub3RoZXIgYWZ0ZXIgTlhET01BSU4/CisKKworT24gV2VkLCBKYW4gMTUsIDIwMTQgYXQgMTI6MzAgUE0sIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+IHdyb3RlOgorPiA+IFRoZXJlJ3MgYSAodmVyeSBvbGQpIHBhdGNoIGluIGNvbnRyaWIvdHJ5LWFsbC1ucyB0aGF0IHdvdWxkIG1ha2UgYSBzdGFydGluZyBwb2ludAorVGhpcyBkb2VzIG5vdCBhcHBseSBhZ2FpbnN0IHRydW5rLCBzbyBJIHRyaWVkIHRvIHJld29yayBpdC4gVGhlCitmb2xsb3dpbmcgYXBwZWFycyB0byBkbyB3aGF0IEkgZXhwZWN0OgorCitkaWZmIC0tZ2l0IGEvc3JjL2ZvcndhcmQuYyBiL3NyYy9mb3J3YXJkLmMKK2luZGV4IDgxNjcyMjkuLjc2MDcwYjUgMTAwNjQ0CistLS0gYS9zcmMvZm9yd2FyZC5jCisrKysgYi9zcmMvZm9yd2FyZC5jCitAQCAtNjEwLDcgKzYxMCwxMSBAQCB2b2lkIHJlcGx5X3F1ZXJ5KGludCBmZCwgaW50IGZhbWlseSwgdGltZV90IG5vdykKKworICAgaWYgKChSQ09ERShoZWFkZXIpID09IFNFUlZGQUlMIHx8IFJDT0RFKGhlYWRlcikgPT0gUkVGVVNFRCkgJiYKKyAgICAgICAhb3B0aW9uX2Jvb2woT1BUX09SREVSKSAmJgorLSAgICAgIGZvcndhcmQtPmZvcndhcmRhbGwgPT0gMCkKKysgICAgICBmb3J3YXJkLT5mb3J3YXJkYWxsID09IDAgfHwKKysgICAgICAvKiB0cnkgZWFjaCBpbiB0dXJuICovCisrICAgICAgUkNPREUoaGVhZGVyKSA9PSBOWERPTUFJTiAmJgorKyAgICAgIG9wdGlvbl9ib29sKE9QVF9PUkRFUikgJiYKKysgICAgICBzZXJ2ZXItPm5leHQgIT0gTlVMTCkKKyAgICAgLyogZm9yIGJyb2tlbiBzZXJ2ZXJzLCBhdHRlbXB0IHRvIHNlbmQgdG8gYW5vdGhlciBvbmUuICovCisgICAgIHsKKyAgICAgICB1bnNpZ25lZCBjaGFyICpwaGVhZGVyOworCmRpZmYgLS1naXQgYS9jb250cmliL3RyeS1hbGwtbnMvZG5zbWFzcS0yLjc4eHgtdHJ5LWFsbC1ucy5wYXRjaCBiL2NvbnRyaWIvdHJ5LWFsbC1ucy9kbnNtYXNxLTIuNzh4eC10cnktYWxsLW5zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMDQzOWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3RyeS1hbGwtbnMvZG5zbWFzcS0yLjc4eHgtdHJ5LWFsbC1ucy5wYXRjaApAQCAtMCwwICsxLDIwIEBACitkaWZmIC0tZ2l0IGEvc3JjL2ZvcndhcmQuYyBiL3NyYy9mb3J3YXJkLmMKK2luZGV4IGUzZmE5NGIuLmVjZjNiOTggMTAwNjQ0CistLS0gYS9zcmMvZm9yd2FyZC5jCisrKysgYi9zcmMvZm9yd2FyZC5jCitAQCAtNzg5LDkgKzc4OSwxMiBAQCB2b2lkIHJlcGx5X3F1ZXJ5KGludCBmZCwgaW50IGZhbWlseSwgdGltZV90IG5vdykKKyAKKyAgIC8qIE5vdGU6IGlmIHdlIHNlbmQgZXh0cmEgb3B0aW9ucyBpbiB0aGUgRUROUzAgaGVhZGVyLCB3ZSBjYW4ndCByZWNyZWF0ZQorICAgICAgdGhlIHF1ZXJ5IGZyb20gdGhlIHJlcGx5LiAqLworLSAgaWYgKFJDT0RFKGhlYWRlcikgPT0gUkVGVVNFRCAmJgorLSAgICAgIGZvcndhcmQtPmZvcndhcmRhbGwgPT0gMCAmJgorLSAgICAgICEoZm9yd2FyZC0+ZmxhZ3MgJiBGUkVDX0hBU19FWFRSQURBVEEpKQorKyAgaWYgKChSQ09ERShoZWFkZXIpID09IFJFRlVTRUQgJiYKKysgICAgICAgIGZvcndhcmQtPmZvcndhcmRhbGwgPT0gMCAmJgorKyAgICAgICAhKGZvcndhcmQtPmZsYWdzICYgRlJFQ19IQVNfRVhUUkFEQVRBKSkgfHwKKysgICAgICAvKiBJZiBzdHJpY3Qtb3JkZXIgaXMgc2V0LCB0cnkgbmV4dCBzZXJ2ZXIgb24gTlhET01BSU4gcmVwbHkgKi8KKysgICAgICAoUkNPREUoaGVhZGVyKSA9PSBOWERPTUFJTiAmJiBvcHRpb25fYm9vbChPUFRfT1JERVIpICYmCisrICAgICAgIHNlcnZlci0+bmV4dCAhPSBOVUxMKSkKKyAgICAgLyogZm9yIGJyb2tlbiBzZXJ2ZXJzLCBhdHRlbXB0IHRvIHNlbmQgdG8gYW5vdGhlciBvbmUuICovCisgICAgIHsKKyAgICAgICB1bnNpZ25lZCBjaGFyICpwaGVhZGVyOwpkaWZmIC0tZ2l0IGEvY29udHJpYi93ZWJtaW4vUkVBRE1FIGIvY29udHJpYi93ZWJtaW4vUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIyNzg4NzEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3dlYm1pbi9SRUFETUUKQEAgLTAsMCArMSw1NCBAQAorCitUaGlzIGlzIHRoZSBSRUFETUUgZm9yIHRoZSBEbnNtYXNxIHdlYm1pbiBtb2R1bGUuCisKK1Byb2JsZW1zOgorCisxKSBUaGVyZSdzIG9ubHkgYmFzaWMgZXJyb3IgY2hlY2tpbmcgLSBpZiB5b3UgZW50ZXIgc29tZSBiYWQKK2FkZHJlc3NlcyBvciBuYW1lcywgdGhleSB3aWxsIGdvIHN0cmFpZ2h0IGludG8gdGhlIGNvbmZpZyBmaWxlCithbHRob3VnaCB3ZSBkbyBjaGVjayBmb3IgdGhpbmdzIGxpa2UgSVAgYWRkcmVzc2VzIGJlaW5nIG9mCit0aGUgY29ycmVjdCBmb3JtIChubyBsZXR0ZXJzLCA0IGdyb3VwcyBvZiB1cCB0byAzIGRpZ2l0cworc2VwYXJhdGVkIGJ5IGRvdHMgZXRjKS4gT25lIHRoaW5nIHRoYXQgSVNOJ1QgQ0hFQ0tFRCBGT1IgaXMKK3RoYXQgSVAgZG90dGVkIHF1YWRzIGFyZSBhbGwgbnVtYmVycyA8IDI1Ni4gQW5vdGhlciBpcyB0aGF0CituZXRtYXNrcyBhcmUgbG9naWNhbCAoeW91IGNvdWxkIGVudGVyIGEgbmV0bWFzayBvZiAyNTUuMC4yNTUuMCAKK2ZvciBleGFtcGxlKS4gRXNzZW50aWFsbHksIGlmIGl0J2xsIHBhc3MgdGhlIGNvbmZpZyBmaWxlCityZWdleCBzY2FubmVyIChhbmQgdGhlIGFib3ZlIGV4YW1wbGVzIHdpbGwpLCBpdCB3b24ndCBiZSAKK2ZsYWdnZWQgYXMgImJhZCIgZXZlbiBpZiBpdCBpcyBhIGJpZyBuby1ubyBmb3IgZG5zbWFzcSBpdHNlbGYuIAorCisyKSBDb2RlIGlzIHVnbHkgYW5kIGEga2x1ZGdlIC0gSSBhaW4ndCBhIHByb2dyYW1tZXIhIFRoZXJlIGFyZSBwcm9iYWJseSAKK2EgbG90IG9mIHRoaW5ncyB0aGF0IGNvdWxkIGJlIGRvbmUgdG8gdGlkeSB1cCB0aGUgY29kZSAtIGVnLCAKK2l0IHByb2JhYmx5IHdvdWxkbid0IGh1cnQgdG8gbW92ZSBzb21lIGNvbW1vbiBzdHVmZiBpbnRvIHRoZSBsaWIgZmlsZS4KKworMykgSSd2ZSB1c2VkIHRoZSAldGV4dCBoYXNoIGFuZCB3cml0dGVuIGFuIGVuZ2xpc2ggbGFuZyBmaWxlLCBidXQKK0kgYW0gbW9uby1saW5ndWFsIHNvIG5vIG90aGVyIGxhbmd1YWdlIHN1cHBvcnQgYXMgeWV0LgorCis0KSBmb3IgcmVhc29ucyB1bmtub3duIHRvIG1lLCB0aGUgaWNvbiBkb2VzIG5vdCBhcHBlYXIgcHJvcGVybHkKK29uIHRoZSBzZXJ2ZXJzIHBhZ2Ugb2Ygd2VibWluIChhdCBsZWFzdCBpdCBkb2Vzbid0IGZvciBtZSEpCisKKzUpIGljb25zIGhhdmUgYmVlbiBzaGFtZWxlc3NseSBzdG9sZW4gZnJvbSB0aGUgaXBmaWx0ZXIgbW9kdWxlLAorc3BlY2lmaWNhbGx5IHRoZSB1cCBhbmQgZG93biBhcnJvd3MuCisKKzYpIGlmIHlvdSBkZWxldGUgYW4gaXRlbSwgdGhlIGNvbmZpZyBmaWxlIHdpbGwgY29udGFpbgorYW4gb3RoZXJ3aXNlIGVtcHR5LCBidXQgY29tbWVudGVkIGxpbmUuIFRoaXMgbWVhbnMgdGhhdCBpZgoreW91IGFkZCBzb21lIG5ldyBzdHVmZiwgdGhlbiBkZWxldGUgaXQsIHRoZSBjb25maWcgZmlsZQord2lsbCBoYXZlIGEgbnVtYmVyIG9mIGxpbmVzIGF0IHRoZSBlbmQgdGhhdCBhcmUganVzdCBjb21tZW50cy4KK1RoZXJlZm9yZSwgdGhlIGNvbmZpZyBmaWxlIGNvdWxkIHBvc3NpYmx5IGdyb3cgcXVpdGUgbGFyZ2UuCisKKzcpIE5PIElOQ0xVREUgRklMRVMhCitpZiB5b3UgdXNlIGFuIGluY2x1ZGUgZmlsZSwgaXQnbGwgYmUgZmxhZ2dlZCBhcyBhbiBlcnJvci4gCitPSyBpZiB0aGUgaW5jbHVkZSBmaWxlIGxpbmUgaXMgY29tbWVudGVkIG91dCB0aG91Z2guCisKKzgpIGRlcHJlY2F0ZWQgbGluZXMgbm90IHN1cHBvcnRlZCAoZWcgdXNlciBhbmQgZ3JvdXApIC0gdGhleQorbWF5IHByb2R1Y2UgYW4gZXJyb3IhICh1c2VyIGFuZCBncm91cCBkb24ndCwgYnV0IHlvdSBjYW4ndCBjaGFuZ2UKK3RoZW0pCisKK0lPVywgaXQgd29ya3MsIGl0J3MganVzdCBub3QgdmVyeSBlbGVnYW50IGFuZCBub3QgdmVyeSByb2J1c3QuCisKK0hvcGUgeW91IGZpbmQgaXQgdXNlZnVsIHRob3VnaCAtIEkgZG8sIGFzIEkgcHJldmVudHMgbWUgaGF2aW5nIHRvIGV2ZXIKK3dhZGUgdGhyb3VnaCB0aGUgY29uZmlnIGZpbGUgYW5kIG1hbiBwYWdlcyBhZ2Fpbi4KKworSWYgeW91IG1vZGlmeSBpdCwgb3IgYWRkIGEgbGFuZ3VhZ2UgZmlsZSwgYW5kIHlvdSBoYXZlIGEgc3BhcmUgbW9tZW50LAorcGxlYXNlIGUtbWFpbCBtZSAtIEkgd29uJ3QgYmUgdXBzZXQgYXQgYWxsIGlmIHlvdSBmaXggbXkgcG9vciBjb2RpbmchCisocmF0aGVyIHRoZSBvcHBvc2l0ZSAtIEknZCBiZSBwbGVhc2VkIHNvbWVvbmUgZm91bmQgaXQgdXNlZnVsKQorCitDaGVlcnMsCisJTmVpbCBGaXNoZXIgPG5laWxAbWFnbmVjb3IuY29tLmF1PgpkaWZmIC0tZ2l0IGEvY29udHJpYi93ZWJtaW4vZG5zbWFzcS53Ym0gYi9jb250cmliL3dlYm1pbi9kbnNtYXNxLndibQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43MzA3ZTIzCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi93ZWJtaW4vZG5zbWFzcS53Ym0KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29udHJpYi93cnQvTWFrZWZpbGUgYi9jb250cmliL3dydC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42OGU4ZDMyCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi93cnQvTWFrZWZpbGUKQEAgLTAsMCArMSw2IEBACitDRkxBR1M/PSAtTzIgLVdhbGwgLVcKKworYWxsOiBkaGNwX3JlbGVhc2UgZGhjcF9sZWFzZV90aW1lCisKK2NsZWFuOgorCXJtIC1mICp+ICoubyBjb3JlIGRoY3BfcmVsZWFzZSBkaGNwX2xlYXNlX3RpbWUKZGlmZiAtLWdpdCBhL2NvbnRyaWIvd3J0L1JFQURNRSBiL2NvbnRyaWIvd3J0L1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ODFkYjlmCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi93cnQvUkVBRE1FCkBAIC0wLDAgKzEsODEgQEAKK1RoaXMgc2NyaXB0IGNhbiBiZSB1c2VkIHRvIGltcGxlbWVudCBwZXJzaXN0ZW50IGxlYXNlcyBvbiBvcGVuV1JULCBERC1XUlQKK2V0Yy4gUGVyc2lzdGVudCBsZWFzZXMgYXJlIGdvb2Q6IGlmIHRoZSBsZWFzZSBkYXRhYmFzZSBpcyBsb3N0IG9uIGEKK3JlYm9vdCwgdGhlbiBpdCB3aWxsIGV2ZW50dWFsbHkgYmUgcmVzdG9yZWQgYXMgaG9zdHMgcmVuZXcgdGhlaXIKK2xlYXNlcy4gVW50aWwgYSBob3N0IHJlbmV3cyAod2hpY2ggbWF5IHRha2UgaG91cnMvZGF5cykgaXQgd2lsbAorbm90IGV4aXN0IGluIHRoZSBETlMgaWYgZG5zbWFzcSdzIERETlMgZnVuY3Rpb24gaXMgaW4gdXNlLgorCisqV1JUIHN5c3RlbXMgcmVtb3VudCBhbGwgbm9uLXZvbGF0aWxlIGZpbGVzeXN0ZW1zIHJlYWQtb25seSBhZnRlciBib290LAorc28gdGhlIG5vcm1hbCBsZWFzZWZpbGUgd2lsbCBub3Qgd29yay4gVGhleSBkbywgaG93ZXZlciBoYXZlIE5WCitzdG9yYWdlLCBhY2Nlc3NlZCB3aXRoIHRoZSBudnJhbSBjb21tYW5kOgorCisvdXNyL2xpYiAjICBudnJhbQordXNhZ2U6IG52cmFtIFtnZXQgbmFtZV0gW3NldCBuYW1lPXZhbHVlXSBbdW5zZXQgbmFtZV0gW3Nob3ddCisKK1RoZSBwcmluY2lwbGUgaXMgdGhhdCBsZWFzZXMgYXJlIGtlcHQgaW4gTlYgdmFyaWFibGUgd2l0aCBkYXRhCitjb3JyZXNwb25kaW5nIHRvIHRoZSBsaW5lIGluIGEgbGVhc2VmaWxlOgorCitkbnNtYXNxX2xlYXNlXzE5Mi4xNjguMS41Nj0zNjAwIDAwOjQxOjRhOjA1OjgwOjc0IDE5Mi4xNjguMS41NiAqICoKKworQnkgZ2l2aW5nIGRuc21hc3EgdGhlIGxlYXNlZmlsZS1ybyBjb21tYW5kLCBpdCBubyBsb25nZXIgY3JlYXRlcyBvciB3cml0ZXMgYQorbGVhc2VmaWxlOyByZXNwb25zaWJpbGl0eSBmb3IgbWFpbnRhaW5pbmcgdGhlIGxlYXNlIGRhdGFiYXNlIHRyYW5zZmVycwordG8gdGhlIGxlYXNlIGNoYW5nZSBzY3JpcHQuIEF0IHN0YXJ0dXAsIGluIGxlYXNlZmlsZS1ybyBtb2RlLAorZG5zbWFzcSB3aWxsIHJ1bgorCisiPGxlYXNlX2NoYW5nZV9zY3JpcHQ+IGluaXQiIAorCithbmQgcmVhZCB3aGF0ZXZlciB0aGF0IGNvbW1hbmQgc3BpdHMgb3V0LCBleHBlY3RpbmcgaXQgdG8KK2JlIGluIGRuc21hc3EgbGVhc2VmaWxlIGZvcm1hdC4KKworU28gdGhlIGxlYXNlIGNoYW5nZSBzY3JpcHQsIGdpdmVuICJpbml0IiBhcyBhcmd2WzFdIHdpbGwgCitzdWNrIGV4aXN0aW5nIGxlYXNlcyBvdXQgb2YgdGhlIE5WUkFNIGFuZCBlbWl0IHRoZW0gZnJvbQorc3Rkb3V0IGluIHRoZSBjb3JyZWN0IGZvcm1hdC4KKworVGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBwcm9ibGVtIGlzIGtlZXBpbmcgdGhlIE5WUkFNIHVwLXRvLWRhdGU6IHRoaXMKK2lzIGRvbmUgYnkgdGhlIGxlYXNlLWNoYW5nZSBzY3JpcHQgd2hpY2ggZG5zbWFzcSBydW5zIHdoZW4gYSBsZWFzZSBpcwordXBkYXRlZC4gV2hlbiBpdCBpcyBjYWxsZWQgd2l0aCBhcmd2WzFdIGFzICJvbGQiLCAiYWRkIiwgb3IgImRlbCIKK2l0IHVwZGF0ZXMgdGhlIHJlbGV2YW50IG52cmFtIGVudHJ5LgorCitTbywgZG5zbWFzcSBzaG91bGQgYmUgcnVuIGFzIDoKKworZG5zbWFzcSAtLWxlYXNlZmlsZS1ybyAtLWRoY3Atc2NyaXB0PS9wYXRoL3RvL2xlYXNlX3VwZGF0ZS5zaAorCitvciB0aGUgc2FtZSBmbGFncyBhZGRlZCB0byAvZXRjL2Ruc21hc3EuY29uZgorCisKKworTm90ZXM6IAorCitUaGlzIG5lZWRzIGRuc21hc3EtMi4zMyBvciBsYXRlciB0byB3b3JrLgorCitUaGlzIHRlY2huaXF1ZSB3aWxsIHdvcmsgd2l0aCwgb3Igd2l0aG91dCwgY29tcGlsYXRpb24gd2l0aAorSEFWRV9CUk9LRU5fUlRDLiBDb21waWxpbmcgd2l0aCBIQVZFX0JST0tFTl9SVEMgaXMKK19oaWdobHlfcmVjb21tZW5kZWRfIGZvciB0aGlzIGFwcGxpY2F0aW9uIHNpbmNlIGlzIGF2b2lkcyBwcm9ibGVtcword2l0aCB0aGUgc3lzdGVtIGNsb2NrIGJlaW5nIHdhcnBlZCBieSBOVFAsIGFuZCBpdCB2YXN0bHkgcmVkdWNlcyB0aGUKK251bWJlciBvZiB3cml0ZXMgdG8gdGhlIE5WUkFNLiBXaXRoIEhBVkVfQlJPS0VOX1JUQywgTlZSQU0gaXMgdXBkYXRlZAorb25seSB3aGVuIGEgbGVhc2UgaXMgY3JlYXRlZCBvciBkZXN0cm95ZWQ7IHdpdGhvdXQgaXQsIGEgd3JpdGUgb2NjdXJzCitldmVyeSB0aW1lIGEgbGVhc2UgaXMgcmVuZXdlZC4KKworSXQgcHJvYmFibHkgbWFrZXMgc2Vuc2UgdG8gcmVzdHJpY3QgdGhlIG51bWJlciBvZiBhY3RpdmUgREhDUCBsZWFzZXMKK3RvIGFuIGFwcHJvcHJpYXRlIG51bWJlciB1c2luZyBkaGNwLWxlYXNlLW1heC4gT24gYSBuZXcgRERfV1JUIHN5c3RlbSwKK3RoZXJlIGFyZSBhYm91dCAxMEsgYnl0ZXMgZnJlZSBpbiB0aGUgTlZSQU0uIEVhY2ggbGVhc2UgcmVjb3JkIGlzCithYm91dCAxMDAgYnl0ZXMsIHNvIHJlc3RyaWN0aW5nIHRoZSBudW1iZXIgb2YgbGVhc2VzIHRvIDUwIHdpbGwgbGltaXQKK3VzZSB0byBoYWxmIHRoYXQuIChUaGUgZGVmYXVsdCBsaW1pdCBpbiB0aGUgZGlzdHJpYnV0ZWQgc291cmNlIGlzIDE1MCkKKworQW55IFVJIHNjcmlwdCB3aGljaCByZWFkcyB0aGUgZG5zbWFzcSBsZWFzZWZpbGUgd2lsbCBoYXZlIHRvIGJlCithbWVuZGVkLCBwcm9iYWJseSBieSBjaGFuZ2luZyBpdCB0byByZWFkIHRoZSBvdXRwdXQgb2YgCitgbGVhc2VfdXBkYXRlIGluaXRgIGluc3RlYWQuCisgCisKK1RoYW5rczoKKworVG8gU3RldmUgSG9yYmFjaHVrIGZvciBjaGVja3Mgb24gdGhlIHNjcmlwdCBhbmQgZGVidWdnaW5nIGJleW9uZCB0aGUgCitjYWxsIG9mIGR1dHkuCisKKworU2ltb24gS2VsbGV5CitGcmkgSnVsIDI4IDExOjUxOjEzIEJTVCAyMDA2CisKKworCisKKwpkaWZmIC0tZ2l0IGEvY29udHJpYi93cnQvZGhjcF9sZWFzZV90aW1lLmMgYi9jb250cmliL3dydC9kaGNwX2xlYXNlX3RpbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yODY2YmI1Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi93cnQvZGhjcF9sZWFzZV90aW1lLmMKQEAgLTAsMCArMSwyMTQgQEAKKy8qIENvcHlyaWdodCAoYykgMjAwNyBTaW1vbiBLZWxsZXkKKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgZGF0ZWQgSnVuZSwgMTk5MS4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyovCisKKy8qIGRoY3BfbGVhc2VfdGltZSA8YWRkcmVzcz4gKi8KKworLyogU2VuZCBhIERIQ1BJTkZPUk0gbWVzc2FnZSB0byBhIGRuc21hc3Egc2VydmVyIHJ1bm5pbmcgb24gdGhlIGxvY2FsIGhvc3QKKyAgIGFuZCBwcmludCAodG8gc3Rkb3V0KSB0aGUgdGltZSByZW1haW5pbmcgaW4gYW55IGxlYXNlIGZvciB0aGUgZ2l2ZW4KKyAgIGFkZHJlc3MuIFRoZSB0aW1lIGlzIGdpdmVuIGFzIHN0cmluZyBwcmludGVkIHRvIHN0ZG91dC4KKworICAgSWYgYW4gZXJyb3Igb2NjdXJzIG9yIG5vIGxlYXNlIGV4aXN0cyBmb3IgdGhlIGdpdmVuIGFkZHJlc3MsIAorICAgbm90aGluZyBpcyBzZW50IHRvIHN0ZG91dCBhIG1lc3NhZ2UgaXMgc2VudCB0byBzdGRlcnIgYW5kIGEKKyAgIG5vbi16ZXJvIGVycm9yIGNvZGUgaXMgcmV0dXJuZWQuCisKKyAgIFJlcXVpcmVzIGRuc21hc3EgMi40MCBvciBsYXRlci4gCisqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+IAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxuZXQvaWZfYXJwLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CisjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2RlZmluZSBESENQX0NIQUREUl9NQVggICAgICAgICAgMTYKKyNkZWZpbmUgQk9PVFJFUVVFU1QgICAgICAgICAgICAgIDEKKyNkZWZpbmUgREhDUF9DT09LSUUgICAgICAgICAgICAgIDB4NjM4MjUzNjMKKyNkZWZpbmUgT1BUSU9OX1BBRCAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgT1BUSU9OX0xFQVNFX1RJTUUgICAgICAgIDUxCisjZGVmaW5lIE9QVElPTl9PVkVSTE9BRCAgICAgICAgICA1MgorI2RlZmluZSBPUFRJT05fTUVTU0FHRV9UWVBFICAgICAgNTMKKyNkZWZpbmUgT1BUSU9OX0VORCAgICAgICAgICAgICAgIDI1NQorI2RlZmluZSBESENQSU5GT1JNICAgICAgICAgICAgICAgOAorI2RlZmluZSBESENQX1NFUlZFUl9QT1JUICAgICAgICAgNjcKKworI2RlZmluZSBvcHRpb25fbGVuKG9wdCkgKChpbnQpKCgodW5zaWduZWQgY2hhciAqKShvcHQpKVsxXSkpCisjZGVmaW5lIG9wdGlvbl9wdHIob3B0KSAoKHZvaWQgKikmKCgodW5zaWduZWQgY2hhciAqKShvcHQpKVsyXSkpCisKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHU4OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1MTY7Cit0eXBlZGVmIHVuc2lnbmVkIGludCB1MzI7CisKK3N0cnVjdCBkaGNwX3BhY2tldCB7CisgIHU4IG9wLCBodHlwZSwgaGxlbiwgaG9wczsKKyAgdTMyIHhpZDsKKyAgdTE2IHNlY3MsIGZsYWdzOworICBzdHJ1Y3QgaW5fYWRkciBjaWFkZHIsIHlpYWRkciwgc2lhZGRyLCBnaWFkZHI7CisgIHU4IGNoYWRkcltESENQX0NIQUREUl9NQVhdLCBzbmFtZVs2NF0sIGZpbGVbMTI4XTsKKyAgdTMyIGNvb2tpZTsKKyAgdW5zaWduZWQgY2hhciBvcHRpb25zWzMwOF07Cit9OworCitzdGF0aWMgdW5zaWduZWQgY2hhciAqb3B0aW9uX2ZpbmQxKHVuc2lnbmVkIGNoYXIgKnAsIHVuc2lnbmVkIGNoYXIgKmVuZCwgaW50IG9wdCwgaW50IG1pbnNpemUpCit7CisgIHdoaWxlICgqcCAhPSBPUFRJT05fRU5EKSAKKyAgICB7CisgICAgICBpZiAocCA+PSBlbmQpCisgICAgICAgIHJldHVybiBOVUxMOyAvKiBtYWxmb3JtZWQgcGFja2V0ICovCisgICAgICBlbHNlIGlmICgqcCA9PSBPUFRJT05fUEFEKQorICAgICAgICBwKys7CisgICAgICBlbHNlIAorICAgICAgICB7IAorICAgICAgICAgIGludCBvcHRfbGVuOworICAgICAgICAgIGlmIChwID49IGVuZCAtIDIpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsgLyogbWFsZm9ybWVkIHBhY2tldCAqLworICAgICAgICAgIG9wdF9sZW4gPSBvcHRpb25fbGVuKHApOworICAgICAgICAgIGlmIChwID49IGVuZCAtICgyICsgb3B0X2xlbikpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsgLyogbWFsZm9ybWVkIHBhY2tldCAqLworICAgICAgICAgIGlmICgqcCA9PSBvcHQgJiYgb3B0X2xlbiA+PSBtaW5zaXplKQorICAgICAgICAgICAgcmV0dXJuIHA7CisgICAgICAgICAgcCArPSBvcHRfbGVuICsgMjsKKyAgICAgICAgfQorICAgIH0KKyAgCisgIHJldHVybiBvcHQgPT0gT1BUSU9OX0VORCA/IHAgOiBOVUxMOworfQorIAorc3RhdGljIHVuc2lnbmVkIGNoYXIgKm9wdGlvbl9maW5kKHN0cnVjdCBkaGNwX3BhY2tldCAqbWVzcywgc2l6ZV90IHNpemUsIGludCBvcHRfdHlwZSwgaW50IG1pbnNpemUpCit7CisgIHVuc2lnbmVkIGNoYXIgKnJldCwgKm92ZXJsb2FkOworICAKKyAgLyogc2tpcCBvdmVyIERIQ1AgY29va2llOyAqLworICBpZiAoKHJldCA9IG9wdGlvbl9maW5kMSgmbWVzcy0+b3B0aW9uc1swXSwgKCh1bnNpZ25lZCBjaGFyICopbWVzcykgKyBzaXplLCBvcHRfdHlwZSwgbWluc2l6ZSkpKQorICAgIHJldHVybiByZXQ7CisKKyAgLyogbG9vayBmb3Igb3ZlcmxvYWQgb3B0aW9uLiAqLworICBpZiAoIShvdmVybG9hZCA9IG9wdGlvbl9maW5kMSgmbWVzcy0+b3B0aW9uc1swXSwgKCh1bnNpZ25lZCBjaGFyICopbWVzcykgKyBzaXplLCBPUFRJT05fT1ZFUkxPQUQsIDEpKSkKKyAgICByZXR1cm4gTlVMTDsKKyAgCisgIC8qIENhbiB3ZSBsb29rIGluIGZpbGVuYW1lIGFyZWEgPyAqLworICBpZiAoKG92ZXJsb2FkWzJdICYgMSkgJiYKKyAgICAgIChyZXQgPSBvcHRpb25fZmluZDEoJm1lc3MtPmZpbGVbMF0sICZtZXNzLT5maWxlWzEyOF0sIG9wdF90eXBlLCBtaW5zaXplKSkpCisgICAgcmV0dXJuIHJldDsKKworICAvKiBmaW5hbGx5IHRyeSBzbmFtZSBhcmVhICovCisgIGlmICgob3ZlcmxvYWRbMl0gJiAyKSAmJgorICAgICAgKHJldCA9IG9wdGlvbl9maW5kMSgmbWVzcy0+c25hbWVbMF0sICZtZXNzLT5zbmFtZVs2NF0sIG9wdF90eXBlLCBtaW5zaXplKSkpCisgICAgcmV0dXJuIHJldDsKKworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBvcHRpb25fdWludCh1bnNpZ25lZCBjaGFyICpvcHQsIGludCBzaXplKQoreworICAvKiB0aGlzIHdvcnJpZXMgYWJvdXQgdW5hbGlnbmVkIGRhdGEgYW5kIGJ5dGUgb3JkZXIgKi8KKyAgdW5zaWduZWQgaW50IHJldCA9IDA7CisgIGludCBpOworICB1bnNpZ25lZCBjaGFyICpwID0gb3B0aW9uX3B0cihvcHQpOworICAKKyAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKKyAgICByZXQgPSAocmV0IDw8IDgpIHwgKnArKzsKKworICByZXR1cm4gcmV0OworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7IAorICBzdHJ1Y3QgaW5fYWRkciBsZWFzZTsKKyAgc3RydWN0IGRoY3BfcGFja2V0IHBhY2tldDsKKyAgdW5zaWduZWQgY2hhciAqcCA9IHBhY2tldC5vcHRpb25zOworICBzdHJ1Y3Qgc29ja2FkZHJfaW4gZGVzdDsKKyAgaW50IGZkID0gc29ja2V0KFBGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKTsKKyAgc3NpemVfdCByYzsKKyAgCisgIGlmIChhcmdjIDwgMikKKyAgICB7IAorICAgICAgZnByaW50ZihzdGRlcnIsICJ1c2FnZTogZGhjcF9sZWFzZV90aW1lIDxhZGRyZXNzPlxuIik7CisgICAgICBleGl0KDEpOworICAgIH0KKworICBpZiAoZmQgPT0gLTEpCisgICAgeworICAgICAgcGVycm9yKCJjYW5ub3QgY3JlYXRlIHNvY2tldCIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgCisgIGxlYXNlLnNfYWRkciA9IGluZXRfYWRkcihhcmd2WzFdKTsKKyAgIAorICBtZW1zZXQoJnBhY2tldCwgMCwgc2l6ZW9mKHBhY2tldCkpOworIAorICBwYWNrZXQuaGxlbiA9IDA7CisgIHBhY2tldC5odHlwZSA9IDA7CisKKyAgcGFja2V0Lm9wID0gQk9PVFJFUVVFU1Q7CisgIHBhY2tldC5jaWFkZHIgPSBsZWFzZTsKKyAgcGFja2V0LmNvb2tpZSA9IGh0b25sKERIQ1BfQ09PS0lFKTsKKworICAqKHArKykgPSBPUFRJT05fTUVTU0FHRV9UWVBFOworICAqKHArKykgPSAxOworICAqKHArKykgPSBESENQSU5GT1JNOworCisgICoocCsrKSA9IE9QVElPTl9FTkQ7CisgCisgIGRlc3Quc2luX2ZhbWlseSA9IEFGX0lORVQ7IAorICBkZXN0LnNpbl9hZGRyLnNfYWRkciA9IGluZXRfYWRkcigiMTI3LjAuMC4xIik7CisgIGRlc3Quc2luX3BvcnQgPSBudG9ocyhESENQX1NFUlZFUl9QT1JUKTsKKyAgCisgIGlmIChzZW5kdG8oZmQsICZwYWNrZXQsIHNpemVvZihwYWNrZXQpLCAwLCAKKwkgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmZGVzdCwgc2l6ZW9mKGRlc3QpKSA9PSAtMSkKKyAgICB7CisgICAgICBwZXJyb3IoInNlbmR0byBmYWlsZWQiKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorCisgIGFsYXJtKDMpOyAvKiBub2RkeSB0aW1lb3V0LiAqLworCisgIHJjID0gcmVjdihmZCwgJnBhY2tldCwgc2l6ZW9mKHBhY2tldCksIDApOworICAKKyAgaWYgKHJjIDwgKHNzaXplX3QpKHNpemVvZihwYWNrZXQpIC0gc2l6ZW9mKHBhY2tldC5vcHRpb25zKSkpCisgICAgeworICAgICAgcGVycm9yKCJyZWN2IGZhaWxlZCIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisKKyAgaWYgKChwID0gb3B0aW9uX2ZpbmQoJnBhY2tldCwgKHNpemVfdClyYywgT1BUSU9OX0xFQVNFX1RJTUUsIDQpKSkKKyAgICB7CisgICAgICB1bnNpZ25lZCBpbnQgdCA9IG9wdGlvbl91aW50KHAsIDQpOworICAgICAgaWYgKHQgPT0gMHhmZmZmZmZmZikKKwlwcmludGYoImluZmluaXRlIik7CisgICAgICBlbHNlCisJeworCSAgdW5zaWduZWQgaW50IHg7CisJICBpZiAoKHggPSB0Lzg2NDAwKSkKKwkgICAgcHJpbnRmKCIlZGQiLCB4KTsKKwkgIGlmICgoeCA9ICh0LzM2MDApJTI0KSkKKwkgICAgcHJpbnRmKCIlZGgiLCB4KTsKKwkgIGlmICgoeCA9ICh0LzYwKSU2MCkpCisJICAgIHByaW50ZigiJWRtIiwgeCk7CisJICBpZiAoKHggPSB0JTYwKSkKKwkgICAgcHJpbnRmKCIlZHMiLCB4KTsKKwl9CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgcmV0dXJuIDE7IC8qIG5vIGxlYXNlICovCit9CmRpZmYgLS1naXQgYS9jb250cmliL3dydC9kaGNwX3JlbGVhc2UuYyBiL2NvbnRyaWIvd3J0L2RoY3BfcmVsZWFzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM2NmQzYTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3dydC9kaGNwX3JlbGVhc2UuYwpAQCAtMCwwICsxLDMzMSBAQAorLyogQ29weXJpZ2h0IChjKSAyMDA2IFNpbW9uIEtlbGxleQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKi8KKworLyogZGhjcF9yZWxlYXNlIDxpbnRlcmZhY2U+IDxhZGRyZXNzPiA8TUFDIGFkZHJlc3M+IDxjbGllbnRfaWQ+CisgICBNVVNUIGJlIHJ1biBhcyByb290IC0gd2lsbCBmYWlsIG90aGVyd2lzZS4gKi8KKworLyogU2VuZCBhIERIQ1BSRUxFQVNFIG1lc3NhZ2UgdmlhIHRoZSBzcGVjaWZpZWQgaW50ZXJmYWNlIAorICAgdG8gdGVsbCB0aGUgbG9jYWwgREhDUCBzZXJ2ZXIgdG8gZGVsZXRlIGEgcGFydGljdWxhciBsZWFzZS4gCisgICAKKyAgIFRoZSBpbnRlcmZhY2UgYXJndW1lbnQgaXMgdGhlIGludGVyZmFjZSBpbiB3aGljaCBhIERIQ1AKKyAgIHJlcXVlc3QgX3dvdWxkXyBiZSByZWNlaXZlZCBpZiBpdCB3YXMgY29taW5nIGZyb20gdGhlIGNsaWVudCwgCisgICByYXRoZXIgdGhhbiBiZWluZyBmYWtlZCB1cCBoZXJlLgorICAgCisgICBUaGUgYWRkcmVzcyBhcmd1bWVudCBpcyBhIGRvdHRlZC1xdWFkIElQIGFkZHJlc3NlcyBhbmQgbWFuZGF0b3J5LiAKKyAgIAorICAgVGhlIE1BQyBhZGRyZXNzIGlzIGNvbG9uIHNlcGFyYXRlZCBoZXgsIGFuZCBpcyBtYW5kYXRvcnkuIEl0IG1heSBiZSAKKyAgIHByZWZpeGVkIGJ5IGFuIGFkZHJlc3MtdHlwZSBieXRlIGZvbGxvd2VkIGJ5IC0sIGVnCisKKyAgIDEwLTExOjIyOjMzOjQ0OjU1OjY2CisKKyAgIGJ1dCBpZiB0aGUgYWRkcmVzcy10eXBlIGJ5dGUgaXMgbWlzc2luZyBpdCBpcyBhc3N1bWVkIHRvIGJlIDEsIHRoZSB0eXBlIAorICAgZm9yIGV0aGVybmV0LiBUaGlzIGVuY29kaW5nIGlzIHRoZSBvbmUgdXNlZCBpbiBkbnNtYXNxIGxlYXNlIGZpbGVzLgorCisgICBUaGUgY2xpZW50LWlkIGlzIG9wdGlvbmFsLiBJZiBpdCBpcyAiKiIgdGhlbiBpdCB0cmVhdGVkIGFzIGJlaW5nIG1pc3NpbmcuCisqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+IAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxuZXQvaWZfYXJwLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CisjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2RlZmluZSBESENQX0NIQUREUl9NQVggICAgICAgICAgMTYKKyNkZWZpbmUgQk9PVFJFUVVFU1QgICAgICAgICAgICAgIDEKKyNkZWZpbmUgREhDUF9DT09LSUUgICAgICAgICAgICAgIDB4NjM4MjUzNjMKKyNkZWZpbmUgT1BUSU9OX1NFUlZFUl9JREVOVElGSUVSIDU0CisjZGVmaW5lIE9QVElPTl9DTElFTlRfSUQgICAgICAgICA2MQorI2RlZmluZSBPUFRJT05fTUVTU0FHRV9UWVBFICAgICAgNTMKKyNkZWZpbmUgT1BUSU9OX0VORCAgICAgICAgICAgICAgIDI1NQorI2RlZmluZSBESENQUkVMRUFTRSAgICAgICAgICAgICAgNworI2RlZmluZSBESENQX1NFUlZFUl9QT1JUICAgICAgICAgNjcKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHU4OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1MTY7Cit0eXBlZGVmIHVuc2lnbmVkIGludCB1MzI7CisKK3N0cnVjdCBkaGNwX3BhY2tldCB7CisgIHU4IG9wLCBodHlwZSwgaGxlbiwgaG9wczsKKyAgdTMyIHhpZDsKKyAgdTE2IHNlY3MsIGZsYWdzOworICBzdHJ1Y3QgaW5fYWRkciBjaWFkZHIsIHlpYWRkciwgc2lhZGRyLCBnaWFkZHI7CisgIHU4IGNoYWRkcltESENQX0NIQUREUl9NQVhdLCBzbmFtZVs2NF0sIGZpbGVbMTI4XTsKKyAgdTMyIGNvb2tpZTsKKyAgdW5zaWduZWQgY2hhciBvcHRpb25zWzMwOF07Cit9OworCitzdGF0aWMgc3RydWN0IGlvdmVjIGlvdjsKKworc3RhdGljIGludCBleHBhbmRfYnVmKHN0cnVjdCBpb3ZlYyAqaW92LCBzaXplX3Qgc2l6ZSkKK3sKKyAgdm9pZCAqbmV3OworCisgIGlmIChzaXplIDw9IGlvdi0+aW92X2xlbikKKyAgICByZXR1cm4gMTsKKworICBpZiAoIShuZXcgPSBtYWxsb2Moc2l6ZSkpKQorICAgIHsKKyAgICAgIGVycm5vID0gRU5PTUVNOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgIGlmIChpb3YtPmlvdl9iYXNlKQorICAgIHsKKyAgICAgIG1lbWNweShuZXcsIGlvdi0+aW92X2Jhc2UsIGlvdi0+aW92X2xlbik7CisgICAgICBmcmVlKGlvdi0+aW92X2Jhc2UpOworICAgIH0KKworICBpb3YtPmlvdl9iYXNlID0gbmV3OworICBpb3YtPmlvdl9sZW4gPSBzaXplOworCisgIHJldHVybiAxOworfQorCitzdGF0aWMgc3NpemVfdCBuZXRsaW5rX3JlY3YoaW50IGZkKQoreworICBzdHJ1Y3QgbXNnaGRyIG1zZzsKKyAgc3NpemVfdCByYzsKKworICBtc2cubXNnX2NvbnRyb2wgPSBOVUxMOworICBtc2cubXNnX2NvbnRyb2xsZW4gPSAwOworICBtc2cubXNnX25hbWUgPSBOVUxMOworICBtc2cubXNnX25hbWVsZW4gPSAwOworICBtc2cubXNnX2lvdiA9ICZpb3Y7CisgIG1zZy5tc2dfaW92bGVuID0gMTsKKyAgICAKKyAgd2hpbGUgKDEpCisgICAgeworICAgICAgbXNnLm1zZ19mbGFncyA9IDA7CisgICAgICB3aGlsZSAoKHJjID0gcmVjdm1zZyhmZCwgJm1zZywgTVNHX1BFRUspKSA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUik7CisgICAgICAKKyAgICAgIC8qIDIuMi54IGRvZXNuJ3Qgc3Vwb3J0IE1TR19QRUVLIGF0IGFsbCwgcmV0dXJuaW5nIEVPUE5PVFNVUFAsIHNvIHdlIGp1c3QgZ3JhYiBhIAorICAgICAgICAgYmlnIGJ1ZmZlciBhbmQgcHJheSBpbiB0aGF0IGNhc2UuICovCisgICAgICBpZiAocmMgPT0gLTEgJiYgZXJybm8gPT0gRU9QTk9UU1VQUCkKKyAgICAgICAgeworICAgICAgICAgIGlmICghZXhwYW5kX2J1ZigmaW92LCAyMDAwKSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgCisgICAgICBpZiAocmMgPT0gLTEgfHwgIShtc2cubXNnX2ZsYWdzICYgTVNHX1RSVU5DKSkKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgIGlmICghZXhwYW5kX2J1ZigmaW92LCBpb3YuaW92X2xlbiArIDEwMCkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgLyogZmluYWxseSwgcmVhZCBpdCBmb3IgcmVhbCAqLworICB3aGlsZSAoKHJjID0gcmVjdm1zZyhmZCwgJm1zZywgMCkpID09IC0xICYmIGVycm5vID09IEVJTlRSKTsKKyAgCisgIHJldHVybiByYzsKK30KKworc3RhdGljIGludCBwYXJzZV9oZXgoY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwgaW50IG1heGxlbiwgaW50ICptYWNfdHlwZSkKK3sKKyAgaW50IGkgPSAwOworICBjaGFyICpyOworICAgIAorICBpZiAobWFjX3R5cGUpCisgICAgKm1hY190eXBlID0gMDsKKyAgCisgIHdoaWxlIChtYXhsZW4gPT0gLTEgfHwgaSA8IG1heGxlbikKKyAgICB7CisgICAgICBmb3IgKHIgPSBpbjsgKnIgIT0gMCAmJiAqciAhPSAnOicgJiYgKnIgIT0gJy0nOyByKyspOworICAgICAgaWYgKCpyID09IDApCisgICAgICAgIG1heGxlbiA9IGk7CisgICAgICAKKyAgICAgIGlmIChyICE9IGluICkKKyAgICAgICAgeworICAgICAgICAgIGlmICgqciA9PSAnLScgJiYgaSA9PSAwICYmIG1hY190eXBlKQorICAgICAgICAgICB7CisgICAgICAgICAgICAgICpyID0gMDsKKyAgICAgICAgICAgICAgKm1hY190eXBlID0gc3RydG9sKGluLCBOVUxMLCAxNik7CisgICAgICAgICAgICAgIG1hY190eXBlID0gTlVMTDsKKyAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgKnIgPSAwOworCSAgICAgIG91dFtpXSA9IHN0cnRvbChpbiwgTlVMTCwgMTYpOworICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGluID0gcisxOworICAgIH0KKyAgICByZXR1cm4gaTsKK30KKworc3RhdGljIGludCBpc19zYW1lX25ldChzdHJ1Y3QgaW5fYWRkciBhLCBzdHJ1Y3QgaW5fYWRkciBiLCBzdHJ1Y3QgaW5fYWRkciBtYXNrKQoreworICByZXR1cm4gKGEuc19hZGRyICYgbWFzay5zX2FkZHIpID09IChiLnNfYWRkciAmIG1hc2suc19hZGRyKTsKK30KKworc3RhdGljIHN0cnVjdCBpbl9hZGRyIGZpbmRfaW50ZXJmYWNlKHN0cnVjdCBpbl9hZGRyIGNsaWVudCwgaW50IGZkLCBpbnQgaW5kZXgpCit7CisgIHN0cnVjdCBzb2NrYWRkcl9ubCBhZGRyOworICBzdHJ1Y3Qgbmxtc2doZHIgKmg7CisgIHNzaXplX3QgbGVuOworIAorICBzdHJ1Y3QgeworICAgIHN0cnVjdCBubG1zZ2hkciBubGg7CisgICAgc3RydWN0IHJ0Z2VubXNnIGc7IAorICB9IHJlcTsKKworICBhZGRyLm5sX2ZhbWlseSA9IEFGX05FVExJTks7CisgIGFkZHIubmxfcGFkID0gMDsKKyAgYWRkci5ubF9ncm91cHMgPSAwOworICBhZGRyLm5sX3BpZCA9IDA7IC8qIGFkZHJlc3MgdG8ga2VybmVsICovCisKKyAgcmVxLm5saC5ubG1zZ19sZW4gPSBzaXplb2YocmVxKTsKKyAgcmVxLm5saC5ubG1zZ190eXBlID0gUlRNX0dFVEFERFI7CisgIHJlcS5ubGgubmxtc2dfZmxhZ3MgPSBOTE1fRl9ST09UIHwgTkxNX0ZfTUFUQ0ggfCBOTE1fRl9SRVFVRVNUIHwgTkxNX0ZfQUNLOyAKKyAgcmVxLm5saC5ubG1zZ19waWQgPSAwOworICByZXEubmxoLm5sbXNnX3NlcSA9IDE7CisgIHJlcS5nLnJ0Z2VuX2ZhbWlseSA9IEFGX0lORVQ7IAorCisgIGlmIChzZW5kdG8oZmQsICh2b2lkICopJnJlcSwgc2l6ZW9mKHJlcSksIDAsIAorCSAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLCBzaXplb2YoYWRkcikpID09IC0xKQorICAgIHsKKyAgICAgIHBlcnJvcigic2VuZHRvIGZhaWxlZCIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgIAorICB3aGlsZSAoMSkKKyAgICB7CisgICAgICBpZiAoKGxlbiA9IG5ldGxpbmtfcmVjdihmZCkpID09IC0xKQorCXsKKwkgIHBlcnJvcigibmV0bGluayIpOworCSAgZXhpdCgxKTsKKwl9CisKKyAgICAgIGZvciAoaCA9IChzdHJ1Y3Qgbmxtc2doZHIgKilpb3YuaW92X2Jhc2U7IE5MTVNHX09LKGgsIChzaXplX3QpbGVuKTsgaCA9IE5MTVNHX05FWFQoaCwgbGVuKSkKKwlpZiAoaC0+bmxtc2dfdHlwZSA9PSBOTE1TR19ET05FKQorCSAgZXhpdCgwKTsKKwllbHNlIGlmIChoLT5ubG1zZ190eXBlID09IFJUTV9ORVdBRERSKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHN0cnVjdCBpZmFkZHJtc2cgKmlmYSA9IE5MTVNHX0RBVEEoaCk7ICAKKyAgICAgICAgICAgIHN0cnVjdCBydGF0dHIgKnJ0YTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBsZW4xID0gaC0+bmxtc2dfbGVuIC0gTkxNU0dfTEVOR1RIKHNpemVvZigqaWZhKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpZmEtPmlmYV9pbmRleCA9PSBpbmRleCAmJiBpZmEtPmlmYV9mYW1pbHkgPT0gQUZfSU5FVCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0cnVjdCBpbl9hZGRyIG5ldG1hc2ssIGFkZHI7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbmV0bWFzay5zX2FkZHIgPSBodG9ubCgweGZmZmZmZmZmIDw8ICgzMiAtIGlmYS0+aWZhX3ByZWZpeGxlbikpOworICAgICAgICAgICAgICAgIGFkZHIuc19hZGRyID0gMDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKHJ0YSA9IElGQV9SVEEoaWZhKTsgUlRBX09LKHJ0YSwgbGVuMSk7IHJ0YSA9IFJUQV9ORVhUKHJ0YSwgbGVuMSkpCisJCSAgaWYgKHJ0YS0+cnRhX3R5cGUgPT0gSUZBX0xPQ0FMKQorCQkgICAgYWRkciA9ICooKHN0cnVjdCBpbl9hZGRyICopKHJ0YSsxKSk7CisJCQorICAgICAgICAgICAgICAgIGlmIChhZGRyLnNfYWRkciAmJiBpc19zYW1lX25ldChhZGRyLCBjbGllbnQsIG5ldG1hc2spKQorCQkgIHJldHVybiBhZGRyOworCSAgICAgIH0KKwkgIH0KKyAgICB9CisgCisgIGV4aXQoMCk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sgCisgIHN0cnVjdCBpbl9hZGRyIHNlcnZlciwgbGVhc2U7CisgIGludCBtYWNfdHlwZTsKKyAgc3RydWN0IGRoY3BfcGFja2V0IHBhY2tldDsKKyAgdW5zaWduZWQgY2hhciAqcCA9IHBhY2tldC5vcHRpb25zOworICBzdHJ1Y3Qgc29ja2FkZHJfaW4gZGVzdDsKKyAgc3RydWN0IGlmcmVxIGlmcjsKKyAgaW50IGZkID0gc29ja2V0KFBGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKTsKKyAgaW50IG5sID0gc29ja2V0KEFGX05FVExJTkssIFNPQ0tfUkFXLCBORVRMSU5LX1JPVVRFKTsKKyAgc3RydWN0IGlvdmVjIGlvdjsKKyAKKyAgaW92Lmlvdl9sZW4gPSAyMDA7CisgIGlvdi5pb3ZfYmFzZSA9IG1hbGxvYyhpb3YuaW92X2xlbik7CisKKyAgaWYgKGFyZ2MgPCA0IHx8IGFyZ2MgPiA1KQorICAgIHsgCisgICAgICBmcHJpbnRmKHN0ZGVyciwgInVzYWdlOiBkaGNwX3JlbGVhc2UgPGludGVyZmFjZT4gPGFkZHI+IDxtYWM+IFs8Y2xpZW50X2lkPl1cbiIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisKKyAgaWYgKGZkID09IC0xIHx8IG5sID09IC0xKQorICAgIHsKKyAgICAgIHBlcnJvcigiY2Fubm90IGNyZWF0ZSBzb2NrZXQiKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorICAKKyAgLyogVGhpcyB2b29kb28gZmFrZXMgdXAgYSBwYWNrZXQgY29taW5nIGZyb20gdGhlIGNvcnJlY3QgaW50ZXJmYWNlLCB3aGljaCByZWFsbHkgbWF0dGVycyBmb3IgCisgICAgIGEgREhDUCBzZXJ2ZXIgKi8KKyAgc3RyY3B5KGlmci5pZnJfbmFtZSwgYXJndlsxXSk7CisgIGlmIChzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19CSU5EVE9ERVZJQ0UsICZpZnIsIHNpemVvZihpZnIpKSA9PSAtMSkKKyAgICB7CisgICAgICBwZXJyb3IoImNhbm5vdCBzZXR1cCBpbnRlcmZhY2UiKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorICAKKyAgCisgIGxlYXNlLnNfYWRkciA9IGluZXRfYWRkcihhcmd2WzJdKTsKKyAgc2VydmVyID0gZmluZF9pbnRlcmZhY2UobGVhc2UsIG5sLCBpZl9uYW1ldG9pbmRleChhcmd2WzFdKSk7CisgIAorICBtZW1zZXQoJnBhY2tldCwgMCwgc2l6ZW9mKHBhY2tldCkpOworIAorICBwYWNrZXQuaGxlbiA9IHBhcnNlX2hleChhcmd2WzNdLCBwYWNrZXQuY2hhZGRyLCBESENQX0NIQUREUl9NQVgsICZtYWNfdHlwZSk7CisgIGlmIChtYWNfdHlwZSA9PSAwKQorICAgIHBhY2tldC5odHlwZSA9IEFSUEhSRF9FVEhFUjsKKyAgZWxzZQorICAgIHBhY2tldC5odHlwZSA9IG1hY190eXBlOworCisgIHBhY2tldC5vcCA9IEJPT1RSRVFVRVNUOworICBwYWNrZXQuY2lhZGRyID0gbGVhc2U7CisgIHBhY2tldC5jb29raWUgPSBodG9ubChESENQX0NPT0tJRSk7CisKKyAgKihwKyspID0gT1BUSU9OX01FU1NBR0VfVFlQRTsKKyAgKihwKyspID0gMTsKKyAgKihwKyspID0gREhDUFJFTEVBU0U7CisKKyAgKihwKyspID0gT1BUSU9OX1NFUlZFUl9JREVOVElGSUVSOworICAqKHArKykgPSBzaXplb2Yoc2VydmVyKTsKKyAgbWVtY3B5KHAsICZzZXJ2ZXIsIHNpemVvZihzZXJ2ZXIpKTsKKyAgcCArPSBzaXplb2Yoc2VydmVyKTsKKworICBpZiAoYXJnYyA9PSA1ICYmIHN0cmNtcChhcmd2WzRdLCAiKiIpICE9IDApCisgICAgeworICAgICAgdW5zaWduZWQgaW50IGNsaWRfbGVuID0gcGFyc2VfaGV4KGFyZ3ZbNF0sIHArMiwgMjU1LCBOVUxMKTsKKyAgICAgICoocCsrKSA9IE9QVElPTl9DTElFTlRfSUQ7CisgICAgICAqKHArKykgPSBjbGlkX2xlbjsKKyAgICAgIHAgKz0gY2xpZF9sZW47CisgICAgfQorICAKKyAgKihwKyspID0gT1BUSU9OX0VORDsKKyAKKyAgZGVzdC5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgZGVzdC5zaW5fcG9ydCA9IG50b2hzKERIQ1BfU0VSVkVSX1BPUlQpOworICBkZXN0LnNpbl9hZGRyID0gc2VydmVyOworCisgIGlmIChzZW5kdG8oZmQsICZwYWNrZXQsIHNpemVvZihwYWNrZXQpLCAwLCAKKwkgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmZGVzdCwgc2l6ZW9mKGRlc3QpKSA9PSAtMSkKKyAgICB7CisgICAgICBwZXJyb3IoInNlbmR0byBmYWlsZWQiKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi93cnQvbGVhc2VfdXBkYXRlLnNoIGIvY29udHJpYi93cnQvbGVhc2VfdXBkYXRlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ2NTA5YjMKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3dydC9sZWFzZV91cGRhdGUuc2gKQEAgLTAsMCArMSw1NCBAQAorIyEvYmluL3NoCisKKyMgQ29weXJpZ2h0IChjKSAyMDA2IFNpbW9uIEtlbGxleQorIworIyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgZGF0ZWQgSnVuZSwgMTk5MS4KKyMKKyMgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKworIyBpZiAkMSBpcyBhZGQgZGVsIG9yIG9sZCwgdGhpcyBpcyBhIGRuc21hc3EtY2FsbGVkIGxlYXNlLWNoYW5nZQorIyBzY3JpcHQsIHVwZGF0ZSB0aGUgbnZyYW0gZGF0YWJhc2UuIGlmICQxIGlzIGluaXQsIGVtaXQgYSAKKyMgZG5zbWFzcS1mb3JtYXQgbGVhc2UgZmlsZSB0byBzdGRvdXQgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSAKKyMgZGF0YWJhc2UsIHRoaXMgaXMgY2FsbGVkIGJ5IGRuc21hc3EgYXQgc3RhcnR1cC4KKworTlZSQU09L3Vzci9zYmluL252cmFtCitQUkVGSVg9ZG5zbWFzcV9sZWFzZV8KKworIyBBcmd1bWVudHMuCisjICQxIGlzIGFjdGlvbiAoYWRkLCBkZWwsIG9sZCkKKyMgJDIgaXMgTUFDIAorIyAkMyBpcyBhZGRyZXNzCisjICQ0IGlzIGhvc3RuYW1lIChvcHRpb25hbCwgbWF5IGJlIHVuc2V0KQorCisjIGVudi4KKyMgRE5TTUFTUV9MRUFTRV9MRU5HVEggb3IgRE5TTUFTUV9MRUFTRV9FWFBJUkVTICh3aGljaCBkZXBlbmRzIG9uIEhBVkVfQlJPS0VOX1JUQykKKyMgRE5TTUFTUV9DTElFTlRfSUQgKG9wdGlvbmFsLCBtYXkgYmUgdW5zZXQpCisKKyMgRmlsZS4KKyMgbGVuZ3RofGV4cGlyZXMgTUFDIGFkZHIgaG9zdG5hbWV8KiBDTElEfCogCisKKyMgUHJpbWFyeSBrZXkgaXMgYWRkcmVzcy4KKworaWYgWyAkezF9ID0gaW5pdCBdIDsgdGhlbgorICAgICAke05WUkFNfSBzaG93IHwgc2VkIC1uIC1lICIvXiR7UFJFRklYfS4qLyBzL14uKj0vL3AiCitlbHNlCisgICAgIGlmIFsgJHsxfSA9IGRlbCBdIDsgdGhlbgorICAgICAgICAgICR7TlZSQU19IHVuc2V0ICR7UFJFRklYfSR7M30KKyAgICAgZmkKKworICAgICBpZiBbICR7MX0gPSBvbGQgXSB8fCBbICR7MX0gPSBhZGQgXSA7IHRoZW4KKyAgICAgICAgICAke05WUkFNfSBzZXQgJHtQUkVGSVh9JHszfT0iJHtETlNNQVNRX0xFQVNFX0xFTkdUSDotfSR7RE5TTUFTUV9MRUFTRV9FWFBJUkVTOi19ICR7Mn0gJHszfSAkezQ6LSp9ICR7RE5TTUFTUV9DTElFTlRfSUQ6LSp9IgorICAgICBmaQorICAgICAke05WUkFNfSBjb21taXQKK2ZpCisKKworCisKKyAKZGlmZiAtLWdpdCBhL2RidXMvREJ1cy1pbnRlcmZhY2UgYi9kYnVzL0RCdXMtaW50ZXJmYWNlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJkYjVjMzAKLS0tIC9kZXYvbnVsbAorKysgYi9kYnVzL0RCdXMtaW50ZXJmYWNlCkBAIC0wLDAgKzEsMjgyIEBACitEQnVzIHN1cHBvcnQgbXVzdCBiZSBlbmFibGVkIGF0IGNvbXBpbGUtdGltZSBhbmQgcnVuLXRpbWUuIEVuc3VyZSAKK3RoYXQgc3JjL2NvbmZpZy5oIGNvbnRhaW5zIHRoZSBsaW5lCisKKyNkZWZpbmUgSEFWRV9EQlVTLgorCithbmQgdGhhdCAvZXRjL2Ruc21hc3EuY29uZiBjb250YWlucyB0aGUgbGluZQorCitlbmFibGUtZGJ1cworCitCZWNhdXNlIGRuc21hc3EgY2FuIG9wZXJhdGUgc3RhbmQtYWxvbmUgZnJvbSB0aGUgREJ1cywgYW5kIG1heSBuZWVkIHRvIHByb3ZpZGUKK3NlcnZpY2UgYmVmb3JlIHRoZSBkYnVzIGRhZW1vbiBpcyBhdmFpbGFibGUsIGl0IHdpbGwgY29udGludWUgdG8gcnVuCitpZiB0aGUgREJ1cyBjb25uZWN0aW9uIGlzIG5vdCBhdmFpbGFibGUgYXQgc3RhcnR1cC4gVGhlIERCdXMgd2lsbCBiZSBwb2xsZWQgCitldmVyeSAyNTBtcyB1bnRpbCBhIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQuIFN0YXJ0IG9mIHBvbGxpbmcgYW5kIGZpbmFsCitjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYXJlIGJvdGggbG9nZ2VkLiBXaGVuIGRuc21hc3EgZXN0YWJsaXNoZXMgYQorY29ubmVjdGlvbiB0byB0aGUgZGJ1cywgaXQgc2VuZHMgdGhlIHNpZ25hbCAiVXAiLiBBbnl0aGluZyBjb250cm9sbGluZwordGhlIHNlcnZlciBzZXR0aW5ncyBpbiBkbnNtYXNxIHNob3VsZCByZS1pbnZva2UgdGhlIFNldFNlcnZlcnMgbWV0aG9kCisocS52Likgd2hlbiBpdCBzZWVzIHRoaXMgc2lnbmFsLiBUaGlzIGFsbG93cyBkbnNtYXNxIHRvIGJlIHJlc3RhcnRlZAorYW5kIGF2b2lkcyBzdGFydHVwIHJhY2VzIHdpdGggdGhlIHByb3ZpZGVyIG9mIG5hbWVzZXJ2ZXIgaW5mb3JtYXRpb24uCisKKworRG5zbWFzcSBwcm92aWRlcyBvbmUgc2VydmljZSBvbiB0aGUgREJ1czogdWsub3JnLnRoZWtlbGxleXMuZG5zbWFzcQorYW5kIGEgc2luZ2xlIG9iamVjdDogL3VrL29yZy90aGVrZWxsZXlzL2Ruc21hc3EgCitUaGUgbmFtZSBvZiB0aGUgc2VydmljZSBtYXkgYmUgY2hhbmdlZCBieSBnaXZpbmcgYW4gYXJndW1lbnQgdG8gLS1lbmFibGUtZGJ1cy4KKworMS4gTUVUSE9EUworLS0tLS0tLS0tLQorCitNZXRob2RzIGFyZSBvZiB0aGUgZm9ybQorCit1ay5vcmcudGhla2VsbGV5cy48bWV0aG9kPgorCitBdmFpbGFibGUgbWV0aG9kcyBhcmU6CisKK0dldFZlcnNpb24KKy0tLS0tLS0tLS0KK1JldHVybnMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgdmVyc2lvbiBvZiBkbnNtYXNxIHJ1bm5pbmcuCisKK0NsZWFyQ2FjaGUKKy0tLS0tLS0tLS0KK1JldHVybnMgbm90aGluZy4gQ2xlYXJzIHRoZSBkb21haW4gbmFtZSBjYWNoZSBhbmQgcmUtcmVhZHMKKy9ldGMvaG9zdHMuIFRoZSBzYW1lIGFzIHNlbmRpbmcgZG5zbWFzcSBhIEhVUCBzaWduYWwuCisKK1NldEZpbHRlcldpbjJLT3B0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLQorVGFrZXMgYm9vbGVhbiwgc2V0cyBvciByZXNldHMgdGhlIC0tZmlsdGVyd2luMmsgb3B0aW9uLgorCitTZXRCb2d1c1ByaXZPcHRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLQorVGFrZXMgYm9vbGVhbiwgc2V0cyBvciByZXNldHMgdGhlIC0tYm9ndXMtcHJpdiBvcHRpb24uCisKK1NldFNlcnZlcnMKKy0tLS0tLS0tLS0KK1JldHVybnMgbm90aGluZy4gVGFrZXMgYSBzZXQgb2YgYXJndW1lbnRzIHJlcHJlc2VudGluZyB0aGUgbmV3Cit1cHN0cmVhbSBETlMgc2VydmVycyB0byBiZSB1c2VkIGJ5IGRuc21hc3EuIElQdjQgYWRkcmVzc2VzIGFyZQorcmVwcmVzZW50ZWQgYXMgYSBVSU5UMzIgKGluIG5ldHdvcmsgYnl0ZSBvcmRlcikgYW5kIElQdjYgYWRkcmVzc2VzCithcmUgcmVwcmVzZW50ZWQgYXMgc2l4dGVlbiBCWVRFcyAoc2luY2UgdGhlcmUgaXMgbm8gVUlOVDEyOCB0eXBlKS4KK0VhY2ggc2VydmVyIGFkZHJlc3MgbWF5IGJlIGZvbGxvd2VkIGJ5IG9uZSBvciBtb3JlIFNUUklOR1MsIHdoaWNoIGFyZQordGhlIGRvbWFpbnMgZm9yIHdoaWNoIHRoZSBwcmVjZWRpbmcgc2VydmVyIHNob3VsZCBiZSB1c2VkLgorCitFeGFtcGxlcy4KKworVUlOVDMyOiA8YWRkcmVzczE+CitVTklUMzI6IDxhZGRyZXNzMj4KKworaXMgZXF1aXZhbGVudCB0bworCistLXNlcnZlcj08YWRkcmVzczE+IC0tc2VydmVyPTxhZGRyZXNzMj4KKworCitVSU5UMzIgPGFkZHJlc3MxPgorVUlOVDMyIDxhZGRyZXNzMj4KK1NUUklORyAic29tZWRvbWFpbi5jb20iCisKK2lzIGVxdWl2YWxlbnQgdG8KKworLS1zZXJ2ZXI9PGFkZHJlc3MxPiAtLXNlcnZlcj0vc29tZWRvbWFpbi5jb20vPGFkZHJlc3MyPiAKKworVUlOVDMyIDxhZGRyZXNzMT4KK1VJTlQzMiA8YWRkcmVzczI+CitTVFJJTkcgInNvbWVkb21haW4uY29tIgorVUlOVDMyIDxhZGRyZXNzMz4KK1NUUklORyAiYW5vdGhlcmRvbWFpbi5jb20iCitTVFJJTkcgInRoaXJkZG9tYWluLmNvbSIKKworaXMgZXF1aXZhbGVudCB0bworCistLXNlcnZlcj08YWRkcmVzczE+IAorLS1zZXJ2ZXI9L3NvbWVkb21haW4uY29tLzxhZGRyZXNzMj4gCistLXNlcnZlcj0vYW5vdGhlcmRvbWFpbi5jb20vdGhpcmRkb21haW4uY29tLzxhZGRyZXNzMz4KKworQW0gSVB2NCBhZGRyZXNzIG9mIDAuMC4wLjAgaXMgaW50ZXJwcmV0ZWQgYXMgIm5vIGFkZHJlc3MsIGxvY2FsIG9ubHkiLAorc28KKworVUlOVDMyOiA8MC4wLjAuMD4KK1NUUklORyAgImxvY2FsLmRvbWFpbiIKKworaXMgZXF1aXZhbGVudCB0bworCistLWxvY2FsPS9sb2NhbC5kb21haW4vCisKKworRWFjaCBjYWxsIHRvIFNldFNlcnZlcnMgY29tcGxldGVseSByZXBsYWNlcyB0aGUgc2V0IG9mIHNlcnZlcnMKK3NwZWNpZmllZCBieSB2aWEgdGhlIERCdXMsIGJ1dCBpdCBsZWF2ZXMgYW55IHNlcnZlcnMgc3BlY2lmaWVkIHZpYSB0aGUKK2NvbW1hbmQgbGluZSBvciAvZXRjL2Ruc21hc3EuY29uZiBvciAvZXRjL3Jlc29sdi5jb25mIGFsb25lLgorCitTZXRTZXJ2ZXJzRXgKKy0tLS0tLS0tLS0tLQorCitUaGlzIGZ1bmN0aW9uIGlzIG1vcmUgZmxleGlibGUgYW5kIHRoZSBTZXRTZXJ2ZXJzIGZ1bmN0aW9uLCBpbiB0aGF0IGl0IGNhbgoraGFuZGxlIGFkZHJlc3Mgc2NvcGluZywgcG9ydCBudW1iZXJzLCBhbmQgaXMgZWFzaWVyIGZvciBjbGllbnRzIHRvIHVzZS4KKworUmV0dXJucyBub3RoaW5nLiBUYWtlcyBhIHNldCBvZiBhcmd1bWVudHMgcmVwcmVzZW50aW5nIHRoZSBuZXcKK3Vwc3RyZWFtIEROUyBzZXJ2ZXJzIHRvIGJlIHVzZWQgYnkgZG5zbWFzcS4gQWxsIGFkZHJlc3NlcyAoYm90aCBJUHY0IGFuZCBJUHY2KQorYXJlIHJlcHJlc2VudGVkIGFzIFNUUklOR1MuICBFYWNoIHNlcnZlciBhZGRyZXNzIG1heSBiZSBmb2xsb3dlZCBieSBvbmUgb3IgbW9yZQorU1RSSU5HUywgd2hpY2ggYXJlIHRoZSBkb21haW5zIGZvciB3aGljaCB0aGUgcHJlY2VkaW5nIHNlcnZlciBzaG91bGQgYmUgdXNlZC4KKworVGhpcyBmdW5jdGlvbiB0YWtlcyBhbiBhcnJheSBvZiBTVFJJTkcgYXJyYXlzLCB3aGVyZSBlYWNoIGlubmVyIGFycmF5IHJlcHJlc2VudHMKK2Egc2V0IG9mIEROUyBzZXJ2ZXJzIGFuZCBkb21haW5zIGZvciB3aGljaCB0aG9zZSBzZXJ2ZXJzIG1heSBiZSB1c2VkLiAgRWFjaAorc3RyaW5nIHJlcHJlc2VudHMgYSBsaXN0IG9mIHVwc3RyZWFtIEROUyBzZXJ2ZXJzIGZpcnN0LCBhbmQgZG9tYWlucyBzZWNvbmQuCitNaXhpbmcgb2YgZG9tYWlucyBhbmQgc2VydmVycyB3aXRoaW4gYSB0aGUgc3RyaW5nIGFycmF5IGlzIG5vdCBhbGxvd2VkLgorCitFeGFtcGxlcy4KKworWworICBbIjEuMi4zLjQiLCAiZm9vYmFyLmNvbSJdLAorICBbIjEwMDM6MTIzNDphYmNkOjoxJWV0aDAiLCAiZW5nLm15Y29ycC5jb20iLCAibGFiLm15Y29ycC5jb20iXQorXQorCitpcyBlcXVpdmFsZW50IHRvCisKKy0tc2VydmVyPS9mb29iYXIuY29tLzEuMi4zLjQgXAorICAtLXNlcnZlcj0vZW5nLm15Y29ycC5jb20vbGFiLm15Y29ycC5jb20vMTAwMzoxMjM0OmFiY2Q6OjElZXRoMAorCitBbiBJUHY0IGFkZHJlc3Mgb2YgMC4wLjAuMCBpcyBpbnRlcnByZXRlZCBhcyAibm8gYWRkcmVzcywgbG9jYWwgb25seSIsCitzbworCitbIFsiMC4wLjAuMCIsICJsb2NhbC5kb21haW4iXSBdCisKK2lzIGVxdWl2YWxlbnQgdG8KKworLS1sb2NhbD0vbG9jYWwuZG9tYWluLworCisKK0VhY2ggY2FsbCB0byBTZXRTZXJ2ZXJzRXggY29tcGxldGVseSByZXBsYWNlcyB0aGUgc2V0IG9mIHNlcnZlcnMKK3NwZWNpZmllZCBieSB2aWEgdGhlIERCdXMsIGJ1dCBpdCBsZWF2ZXMgYW55IHNlcnZlcnMgc3BlY2lmaWVkIHZpYSB0aGUKK2NvbW1hbmQgbGluZSBvciAvZXRjL2Ruc21hc3EuY29uZiBvciAvZXRjL3Jlc29sdi5jb25mIGFsb25lLgorCisKK1NldERvbWFpblNlcnZlcnMKKy0tLS0tLS0tLS0tLS0tLS0KKworWWVzIGFub3RoZXIgdmFyaWF0aW9uIGZvciBzZXR0aW5nIEROUyBzZXJ2ZXJzLCB3aXRoIHRoZSBjYXBhYmlsaXR5IG9mCitTZXRTZXJ2ZXJzRXgsIGJ1dCB3aXRob3V0IHVzaW5nIGFycmF5cyBvZiBhcnJheXMsIHdoaWNoIGFyZSBub3QKK3NlbmRhYmxlIHdpdGggZGJ1cy1zZW5kLiBUaGUgYXJndW1lbnRzIGFyZSBhbiBhcnJheSBvZiBzdHJpbmdzIHdoaWNoCithcmUgaWRlbnRpY2FsIHRvIHRoZSBlcXVpdmFsZW50IGFyZ3VtZW50cyAtLXNlcnZlciwgc28gdGhlIGV4YW1wbGUKK2ZvciBTZXRTZXJ2ZXJzRXggaXMgcmVwcmVzZW50ZWQgYXMKKworWworICAiL2Zvb2Jhci5jb20vMS4yLjMuNCIKKyAgIi9lbmcubXljb3JwLmNvbS9sYWIubXljb3JwLmNvbS8xMDAzOjEyMzQ6YWJjZDo6MSVldGgwIgorXQorCitHZXRMb29wU2VydmVycworLS0tLS0tLS0tLS0tLS0KKworKE9ubHkgYXZhaWxhYmxlIGlmIGRuc21hc3EgY29tcGlsZWQgd2l0aCBIQVZFX0xPT1ApCisKK1JldHVybiBhbiBhcnJheSBvZiBzdHJpbmdzLCBlYWNoIHN0cmluZyBpcyB0aGUgSVAgYWRkcmVzcyBvZiBhbiB1cHN0cmVhbQorc2VydmVyIHdoaWNoIGhhcyBiZWVuIGZvdW5kIHRvIGxvb3AgcXVlcmllcyBiYWNrIHRvIHRoaXMgZG5zbWFzcSBpbnN0YW5jZSwgYW5kIAoraXQgdGhlcmVmb3JlIG5vdCBiZWluZyB1c2VkLgorCitBZGREaGNwTGVhc2UKKy0tLS0tLS0tLS0tLQorCitSZXR1cm5zIG5vdGhpbmcuIEFkZHMgb3IgdXBkYXRlcyBhIERIQ1Agb3IgREhDUHY2IGxlYXNlIHRvIHRoZSBpbnRlcm5hbCBsZWFzZQorZGF0YWJhc2UsIGFzIGlmIGEgY2xpZW50IHJlcXVlc3RlZCBhbmQgb2J0YWluZWQgYSBsZWFzZS4KKworSWYgYSBsZWFzZSBmb3IgdGhlIElQdjQgb3IgSVB2NiBhZGRyZXNzIGFscmVhZHkgZXhpc3QsIGl0IGlzIG92ZXJ3cml0dGVuLgorCitOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiB3aWxsIHRyaWdnZXIgdGhlIERoY3BMZWFzZUFkZGVkIG9yIERoY3BMZWFzZVVwZGF0ZWQKK0QtQnVzIHNpZ25hbCBhbmQgd2lsbCBydW4gdGhlIGNvbmZpZ3VyZWQgREhDUCBsZWFzZSBzY3JpcHQgYWNjb3JkaW5nbHkuCisKK1RoaXMgZnVuY3Rpb24gdGFrZXMgbWFueSBhcmd1bWVudHMgd2hpY2ggYXJlIHRoZSBsZWFzZSBwYXJhbWV0ZXJzOgorLSBBIHN0cmluZyB3aXRoIHRoZSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBJUHY0IG9yIElQdjYgYWRkcmVzcyBvZiB0aGUKKyAgY2xpZW50LgorCisgIEV4YW1wbGVzOgorICAiMTkyLjE2OC4xLjExNSIKKyAgIjEwMDM6MTIzNDphYmNkOjoxJWV0aDAiCisgICIyMDAxOmRiODphYmNkOjoxIgorCistIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgaGFyZHdhcmUgYWRkcmVzcyBvZiB0aGUgY2xpZW50LCB1c2luZyB0aGUgc2FtZQorICBmb3JtYXQgYXMgdGhlIG9uZSB1c2VkIGluIHRoZSBsZWFzZSBkYXRhYmFzZS4KKworICBFeGFtcGxlczoKKworICAiMDA6MjM6NDU6Njc6ODk6YWIiCisgICIwNi0wMDoyMDplMDozYjoxMzphZiIgKHRva2VuIHJpbmcpCisKKy0gVGhlIGhvc3RuYW1lIG9mIHRoZSBjbGllbnQsIGFzIGFuIGFycmF5IG9mIGJ5dGVzIChzbyB0aGVyZSBpcyBubyBwcm9ibGVtCisgIHdpdGggbm9uLUFTQ0lJIGNoYXJhY3RlciBlbmNvZGluZykuIE1heSBiZSBlbXB0eS4KKworICBFeGFtcGxlIChmb3IgImhvc3RuYW1lLm9yLmZxZG4iKToKKyAgWzEwNCwgMTExLCAxMTUsIDExNiwgMTEwLCA5NywgMTA5LCAxMDEsIDQ2LCAxMTEsIDExNCwgNDYsIDEwMiwgMTEzLCAxMDAsIDExMF0KKworLSBUaGUgY2xpZW50IGlkZW50aWZpZXIgKElQdjQpIG9yIERVSUQgKElQdjYpIGFzIGFuIGFycmF5IG9mIGJ5dGVzLiBNYXkgYmUKKyAgZW1wdHkuCisKKyAgRXhhbXBsZXM6CisKKyAgREhDUHY2IERVSUQ6CisgIFswLCAzLCAwLCAxLCAwLCAzNSwgNjksIDEwMywgMTM3LCAxNzFdCisgIERIQ1B2NCBjbGllbnQgaWRlbnRpZmllcjoKKyAgWzI1NSwgMTIsIDM0LCA1NiwgNzgsIDAsIDEsIDAsIDEsIDI5LCA5LCA5OSwgMTkwLCAzNSwgNjksIDEwMywgMTM3LCAxNzFdCisKKy0gVGhlIGR1cmF0aW9uIG9mIHRoZSBsZWFzZSwgaW4gc2Vjb25kcy4gSWYgdGhlIGxlYXNlIGlzIHVwZGF0ZWQsIHRoZW4KKyAgdGhlIGR1cmF0aW9uIHJlcGxhY2VzIHRoZSBwcmV2aW91cyBkdXJhdGlvbi4KKworICBFeGFtcGxlOgorCisgIDcyMDAKKworLSBUaGUgSUFJRCAoSWRlbnRpdHkgYXNzb2NpYXRpb24gaWRlbnRpZmllcikgb2YgdGhlIERIQ1B2NiBsZWFzZSwgYXMgYSBuZXR3b3JrCisgIGJ5dGUtb3JkZXIgdW5zaWduZWQgaW50ZWdlci4gRm9yIERIQ1B2NCBsZWFzZXMsIHRoaXMgbXVzdCBiZSBzZXQgdG8gMC4KKworICBFeGFtcGxlIChmb3IgSVB2Nik6CisKKyAgMjAzNTY5MjMwCisKKy0gQSBib29sZWFuIHdoaWNoLCBpZiB0cnVlLCBpbmRpY2F0ZXMgdGhhdCB0aGUgREhDUHY2IGxlYXNlIGlzIGZvciBhIHRlbXBvcmFyeQorICBhZGRyZXNzIChJQV9UQSkuIElmIGZhbHNlLCB0aGUgREhDUHY2IGxlYXNlIGlzIGZvciBhIG5vbi10ZW1wb3JhcnkgYWRkcmVzcworICAoSUFfTkEpLiBGb3IgREhDUHY0IGxlYXNlcywgdGhpcyBtdXN0IGJlIHNldCB0byBmYWxzZS4KKworUmVtb3ZlRGhjcExlYXNlCistLS0tLS0tLS0tLS0tLS0KKworUmV0dXJucyBub3RoaW5nLiBSZW1vdmVzIGEgREhDUCBvciBESENQdjYgbGVhc2UgdG8gdGhlIGludGVybmFsIGxlYXNlCitkYXRhYmFzZSwgYXMgaWYgYSBjbGllbnQgc2VudCBhIHJlbGVhc2UgbWVzc2FnZSB0byBhYmFuZG9uIGEgbGVhc2UuCisKK1RoaXMgZnVuY3Rpb24gdGFrZXMgb25seSBvbmUgcGFyYW1ldGVyOiB0aGUgdGV4dCByZXByZXNlbnRhdGlvbiBvZiB0aGUKK0lQdjQgb3IgSVB2NiBhZGRyZXNzIG9mIHRoZSBsZWFzZSB0byByZW1vdmUuCisKK05vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIHdpbGwgdHJpZ2dlciB0aGUgRGhjcExlYXNlUmVtb3ZlZCBzaWduYWwgYW5kIHRoZQorY29uZmlndXJlZCBESENQIGxlYXNlIHNjcmlwdCB3aWxsIGJlIHJ1biB3aXRoIHRoZSAiZGVsIiBhY3Rpb24uCisKKworCisyLiBTSUdOQUxTCistLS0tLS0tLS0tCisKK0lmIGRuc21hc3EncyBESENQIHNlcnZlciBpcyBhY3RpdmUsIGl0IHdpbGwgc2VuZCBzaWduYWxzIG92ZXIgREJVUyB3aGVuZXZlcgordGhlIERIQ1AgbGVhc2UgZGF0YWJhc2UgY2hhbmdlcy4gVGhpbmsgb2YgdGhlc2Ugc2lnbmFscyBhcyB0cmFuc2FjdGlvbnMgb24KK2EgZGF0YWJhc2Ugd2l0aCB0aGUgSVAgYWRkcmVzcyBhY3RpbmcgYXMgdGhlIHByaW1hcnkga2V5LgorCitTaWduYWxzIGFyZSBvZiB0aGUgZm9ybToKKwordWsub3JnLnRoZWtlbGxleXMuPHNpZ25hbD4KKworYW5kIHRoZWlyIHBhcmFtZXRlcnMgYXJlOgorCitTVFJJTkcgIjE5Mi4xNjguMS4xMTUiCitTVFJJTkcgIjAxOjIzOjQ1OjY3Ojg5OmFiIgorU1RSSU5HICJob3N0bmFtZS5vci5mcWRuIgorCisKK0F2YWlsYWJsZSBzaWduYWxzIGFyZToKKworRGhjcExlYXNlQWRkZWQKKy0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4gYSBESENQIGxlYXNlIGZvciBhIGdpdmVuIElQIGFkZHJlc3MgaXMgY3JlYXRlZC4KKworRGhjcExlYXNlRGVsZXRlZAorLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4gYSBESENQIGxlYXNlIGZvciBhIGdpdmVuIElQIGFkZHJlc3MgaXMgZGVsZXRlZC4KKworRGhjcExlYXNlVXBkYXRlZAorLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4gYSBESENQIGxlYXNlIGZvciBhIGdpdmVuIElQIGFkZHJlc3MgaXMgdXBkYXRlZC4KKyAKZGlmZiAtLWdpdCBhL2RidXMvZG5zbWFzcS5jb25mIGIvZGJ1cy9kbnNtYXNxLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODJiMWM3NgotLS0gL2Rldi9udWxsCisrKyBiL2RidXMvZG5zbWFzcS5jb25mCkBAIC0wLDAgKzEsMTQgQEAKKzwhRE9DVFlQRSBidXNjb25maWcgUFVCTElDCisgIi0vL2ZyZWVkZXNrdG9wLy9EVEQgRC1CVVMgQnVzIENvbmZpZ3VyYXRpb24gMS4wLy9FTiIKKyAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvc3RhbmRhcmRzL2RidXMvMS4wL2J1c2NvbmZpZy5kdGQiPgorPGJ1c2NvbmZpZz4KKwk8cG9saWN5IHVzZXI9InJvb3QiPgorCQk8YWxsb3cgb3duPSJ1ay5vcmcudGhla2VsbGV5cy5kbnNtYXNxIi8+CisJCTxhbGxvdyBzZW5kX2Rlc3RpbmF0aW9uPSJ1ay5vcmcudGhla2VsbGV5cy5kbnNtYXNxIi8+CisJPC9wb2xpY3k+CisJPHBvbGljeSBjb250ZXh0PSJkZWZhdWx0Ij4KKyAgICAgICAgICAgICAgICA8ZGVueSBvd249InVrLm9yZy50aGVrZWxsZXlzLmRuc21hc3EiLz4KKyAgICAgICAgICAgICAgICA8ZGVueSBzZW5kX2Rlc3RpbmF0aW9uPSJ1ay5vcmcudGhla2VsbGV5cy5kbnNtYXNxIi8+CisgICAgICAgIDwvcG9saWN5PgorPC9idXNjb25maWc+CisKZGlmZiAtLWdpdCBhL2Ruc21hc3EuY29uZi5leGFtcGxlIGIvZG5zbWFzcS5jb25mLmV4YW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzkwZWFmNQotLS0gL2Rldi9udWxsCisrKyBiL2Ruc21hc3EuY29uZi5leGFtcGxlCkBAIC0wLDAgKzEsNjY2IEBACisjIENvbmZpZ3VyYXRpb24gZmlsZSBmb3IgZG5zbWFzcS4KKyMKKyMgRm9ybWF0IGlzIG9uZSBvcHRpb24gcGVyIGxpbmUsIGxlZ2FsIG9wdGlvbnMgYXJlIHRoZSBzYW1lCisjIGFzIHRoZSBsb25nIG9wdGlvbnMgbGVnYWwgb24gdGhlIGNvbW1hbmQgbGluZS4gU2VlCisjICIvdXNyL3NiaW4vZG5zbWFzcSAtLWhlbHAiIG9yICJtYW4gOCBkbnNtYXNxIiBmb3IgZGV0YWlscy4KKworIyBMaXN0ZW4gb24gdGhpcyBzcGVjaWZpYyBwb3J0IGluc3RlYWQgb2YgdGhlIHN0YW5kYXJkIEROUyBwb3J0CisjICg1MykuIFNldHRpbmcgdGhpcyB0byB6ZXJvIGNvbXBsZXRlbHkgZGlzYWJsZXMgRE5TIGZ1bmN0aW9uLAorIyBsZWF2aW5nIG9ubHkgREhDUCBhbmQvb3IgVEZUUC4KKyNwb3J0PTUzNTMKKworIyBUaGUgZm9sbG93aW5nIHR3byBvcHRpb25zIG1ha2UgeW91IGEgYmV0dGVyIG5ldGl6ZW4sIHNpbmNlIHRoZXkKKyMgdGVsbCBkbnNtYXNxIHRvIGZpbHRlciBvdXQgcXVlcmllcyB3aGljaCB0aGUgcHVibGljIEROUyBjYW5ub3QKKyMgYW5zd2VyLCBhbmQgd2hpY2ggbG9hZCB0aGUgc2VydmVycyAoZXNwZWNpYWxseSB0aGUgcm9vdCBzZXJ2ZXJzKQorIyB1bm5lY2Vzc2FyaWx5LiBJZiB5b3UgaGF2ZSBhIGRpYWwtb24tZGVtYW5kIGxpbmsgdGhleSBhbHNvIHN0b3AKKyMgdGhlc2UgcmVxdWVzdHMgZnJvbSBicmluZ2luZyB1cCB0aGUgbGluayB1bm5lY2Vzc2FyaWx5LgorCisjIE5ldmVyIGZvcndhcmQgcGxhaW4gbmFtZXMgKHdpdGhvdXQgYSBkb3Qgb3IgZG9tYWluIHBhcnQpCisjZG9tYWluLW5lZWRlZAorIyBOZXZlciBmb3J3YXJkIGFkZHJlc3NlcyBpbiB0aGUgbm9uLXJvdXRlZCBhZGRyZXNzIHNwYWNlcy4KKyNib2d1cy1wcml2CisKKyMgVW5jb21tZW50IHRoZXNlIHRvIGVuYWJsZSBETlNTRUMgdmFsaWRhdGlvbiBhbmQgY2FjaGluZzoKKyMgKFJlcXVpcmVzIGRuc21hc3EgdG8gYmUgYnVpbHQgd2l0aCBETlNTRUMgb3B0aW9uLikKKyNjb25mLWZpbGU9JSVQUkVGSVglJS9zaGFyZS9kbnNtYXNxL3RydXN0LWFuY2hvcnMuY29uZgorI2Ruc3NlYworCisjIFJlcGxpZXMgd2hpY2ggYXJlIG5vdCBETlNTRUMgc2lnbmVkIG1heSBiZSBsZWdpdGltYXRlLCBiZWNhdXNlIHRoZSBkb21haW4KKyMgaXMgdW5zaWduZWQsIG9yIG1heSBiZSBmb3JnZXJpZXMuIFNldHRpbmcgdGhpcyBvcHRpb24gdGVsbHMgZG5zbWFzcSB0bworIyBjaGVjayB0aGF0IGFuIHVuc2lnbmVkIHJlcGx5IGlzIE9LLCBieSBmaW5kaW5nIGEgc2VjdXJlIHByb29mIHRoYXQgYSBEUyAKKyMgcmVjb3JkIHNvbWV3aGVyZSBiZXR3ZWVuIHRoZSByb290IGFuZCB0aGUgZG9tYWluIGRvZXMgbm90IGV4aXN0LiAKKyMgVGhlIGNvc3Qgb2Ygc2V0dGluZyB0aGlzIGlzIHRoYXQgZXZlbiBxdWVyaWVzIGluIHVuc2lnbmVkIGRvbWFpbnMgd2lsbCBuZWVkCisjIG9uZSBvciBtb3JlIGV4dHJhIEROUyBxdWVyaWVzIHRvIHZlcmlmeS4KKyNkbnNzZWMtY2hlY2stdW5zaWduZWQKKworIyBVbmNvbW1lbnQgdGhpcyB0byBmaWx0ZXIgdXNlbGVzcyB3aW5kb3dzLW9yaWdpbmF0ZWQgRE5TIHJlcXVlc3RzCisjIHdoaWNoIGNhbiB0cmlnZ2VyIGRpYWwtb24tZGVtYW5kIGxpbmtzIG5lZWRsZXNzbHkuCisjIE5vdGUgdGhhdCAoYW1vbmdzdCBvdGhlciB0aGluZ3MpIHRoaXMgYmxvY2tzIGFsbCBTUlYgcmVxdWVzdHMsCisjIHNvIGRvbid0IHVzZSBpdCBpZiB5b3UgdXNlIGVnIEtlcmJlcm9zLCBTSVAsIFhNTVAgb3IgR29vZ2xlLXRhbGsuCisjIFRoaXMgb3B0aW9uIG9ubHkgYWZmZWN0cyBmb3J3YXJkaW5nLCBTUlYgcmVjb3JkcyBvcmlnaW5hdGluZyBmb3IKKyMgZG5zbWFzcSAodmlhIHNydi1ob3N0PSBsaW5lcykgYXJlIG5vdCBzdXBwcmVzc2VkIGJ5IGl0LgorI2ZpbHRlcndpbjJrCisKKyMgQ2hhbmdlIHRoaXMgbGluZSBpZiB5b3Ugd2FudCBkbnMgdG8gZ2V0IGl0cyB1cHN0cmVhbSBzZXJ2ZXJzIGZyb20KKyMgc29tZXdoZXJlIG90aGVyIHRoYXQgL2V0Yy9yZXNvbHYuY29uZgorI3Jlc29sdi1maWxlPQorCisjIEJ5ICBkZWZhdWx0LCAgZG5zbWFzcSAgd2lsbCAgc2VuZCBxdWVyaWVzIHRvIGFueSBvZiB0aGUgdXBzdHJlYW0KKyMgc2VydmVycyBpdCBrbm93cyBhYm91dCBhbmQgdHJpZXMgdG8gZmF2b3VyIHNlcnZlcnMgdG8gYXJlICBrbm93bgorIyB0byAgYmUgIHVwLiAgVW5jb21tZW50aW5nIHRoaXMgZm9yY2VzIGRuc21hc3EgdG8gdHJ5IGVhY2ggcXVlcnkKKyMgd2l0aCAgZWFjaCAgc2VydmVyICBzdHJpY3RseSAgaW4gIHRoZSAgb3JkZXIgIHRoZXkgICBhcHBlYXIgICBpbgorIyAvZXRjL3Jlc29sdi5jb25mCisjc3RyaWN0LW9yZGVyCisKKyMgSWYgeW91IGRvbid0IHdhbnQgZG5zbWFzcSB0byByZWFkIC9ldGMvcmVzb2x2LmNvbmYgb3IgYW55IG90aGVyCisjIGZpbGUsIGdldHRpbmcgaXRzIHNlcnZlcnMgZnJvbSB0aGlzIGZpbGUgaW5zdGVhZCAoc2VlIGJlbG93KSwgdGhlbgorIyB1bmNvbW1lbnQgdGhpcy4KKyNuby1yZXNvbHYKKworIyBJZiB5b3UgZG9uJ3Qgd2FudCBkbnNtYXNxIHRvIHBvbGwgL2V0Yy9yZXNvbHYuY29uZiBvciBvdGhlciByZXNvbHYKKyMgZmlsZXMgZm9yIGNoYW5nZXMgYW5kIHJlLXJlYWQgdGhlbSB0aGVuIHVuY29tbWVudCB0aGlzLgorI25vLXBvbGwKKworIyBBZGQgb3RoZXIgbmFtZSBzZXJ2ZXJzIGhlcmUsIHdpdGggZG9tYWluIHNwZWNzIGlmIHRoZXkgYXJlIGZvcgorIyBub24tcHVibGljIGRvbWFpbnMuCisjc2VydmVyPS9sb2NhbG5ldC8xOTIuMTY4LjAuMQorCisjIEV4YW1wbGUgb2Ygcm91dGluZyBQVFIgcXVlcmllcyB0byBuYW1lc2VydmVyczogdGhpcyB3aWxsIHNlbmQgYWxsCisjIGFkZHJlc3MtPm5hbWUgcXVlcmllcyBmb3IgMTkyLjE2OC4zLzI0IHRvIG5hbWVzZXJ2ZXIgMTAuMS4yLjMKKyNzZXJ2ZXI9LzMuMTY4LjE5Mi5pbi1hZGRyLmFycGEvMTAuMS4yLjMKKworIyBBZGQgbG9jYWwtb25seSBkb21haW5zIGhlcmUsIHF1ZXJpZXMgaW4gdGhlc2UgZG9tYWlucyBhcmUgYW5zd2VyZWQKKyMgZnJvbSAvZXRjL2hvc3RzIG9yIERIQ1Agb25seS4KKyNsb2NhbD0vbG9jYWxuZXQvCisKKyMgQWRkIGRvbWFpbnMgd2hpY2ggeW91IHdhbnQgdG8gZm9yY2UgdG8gYW4gSVAgYWRkcmVzcyBoZXJlLgorIyBUaGUgZXhhbXBsZSBiZWxvdyBzZW5kIGFueSBob3N0IGluIGRvdWJsZS1jbGljay5uZXQgdG8gYSBsb2NhbAorIyB3ZWItc2VydmVyLgorI2FkZHJlc3M9L2RvdWJsZS1jbGljay5uZXQvMTI3LjAuMC4xCisKKyMgLS1hZGRyZXNzIChhbmQgLS1zZXJ2ZXIpIHdvcmsgd2l0aCBJUHY2IGFkZHJlc3NlcyB0b28uCisjYWRkcmVzcz0vd3d3LnRoZWtlbGxleXMub3JnLnVrL2ZlODA6OjIwZDo2MGZmOmZlMzY6ZjgzCisKKyMgQWRkIHRoZSBJUHMgb2YgYWxsIHF1ZXJpZXMgdG8geWFob28uY29tLCBnb29nbGUuY29tLCBhbmQgdGhlaXIKKyMgc3ViZG9tYWlucyB0byB0aGUgdnBuIGFuZCBzZWFyY2ggaXBzZXRzOgorI2lwc2V0PS95YWhvby5jb20vZ29vZ2xlLmNvbS92cG4sc2VhcmNoCisKKyMgWW91IGNhbiBjb250cm9sIGhvdyBkbnNtYXNxIHRhbGtzIHRvIGEgc2VydmVyOiB0aGlzIGZvcmNlcworIyBxdWVyaWVzIHRvIDEwLjEuMi4zIHRvIGJlIHJvdXRlZCB2aWEgZXRoMQorIyBzZXJ2ZXI9MTAuMS4yLjNAZXRoMQorCisjIGFuZCB0aGlzIHNldHMgdGhlIHNvdXJjZSAoaWUgbG9jYWwpIGFkZHJlc3MgdXNlZCB0byB0YWxrIHRvCisjIDEwLjEuMi4zIHRvIDE5Mi4xNjguMS4xIHBvcnQgNTUgKHRoZXJlIG11c3QgYmUgYSBpbnRlcmZhY2Ugd2l0aCB0aGF0CisjIElQIG9uIHRoZSBtYWNoaW5lLCBvYnZpb3VzbHkpLgorIyBzZXJ2ZXI9MTAuMS4yLjNAMTkyLjE2OC4xLjEjNTUKKworIyBJZiB5b3Ugd2FudCBkbnNtYXNxIHRvIGNoYW5nZSB1aWQgYW5kIGdpZCB0byBzb21ldGhpbmcgb3RoZXIKKyMgdGhhbiB0aGUgZGVmYXVsdCwgZWRpdCB0aGUgZm9sbG93aW5nIGxpbmVzLgorI3VzZXI9CisjZ3JvdXA9CisKKyMgSWYgeW91IHdhbnQgZG5zbWFzcSB0byBsaXN0ZW4gZm9yIERIQ1AgYW5kIEROUyByZXF1ZXN0cyBvbmx5IG9uCisjIHNwZWNpZmllZCBpbnRlcmZhY2VzIChhbmQgdGhlIGxvb3BiYWNrKSBnaXZlIHRoZSBuYW1lIG9mIHRoZQorIyBpbnRlcmZhY2UgKGVnIGV0aDApIGhlcmUuCisjIFJlcGVhdCB0aGUgbGluZSBmb3IgbW9yZSB0aGFuIG9uZSBpbnRlcmZhY2UuCisjaW50ZXJmYWNlPQorIyBPciB5b3UgY2FuIHNwZWNpZnkgd2hpY2ggaW50ZXJmYWNlIF9ub3RfIHRvIGxpc3RlbiBvbgorI2V4Y2VwdC1pbnRlcmZhY2U9CisjIE9yIHdoaWNoIHRvIGxpc3RlbiBvbiBieSBhZGRyZXNzIChyZW1lbWJlciB0byBpbmNsdWRlIDEyNy4wLjAuMSBpZgorIyB5b3UgdXNlIHRoaXMuKQorI2xpc3Rlbi1hZGRyZXNzPQorIyBJZiB5b3Ugd2FudCBkbnNtYXNxIHRvIHByb3ZpZGUgb25seSBETlMgc2VydmljZSBvbiBhbiBpbnRlcmZhY2UsCisjIGNvbmZpZ3VyZSBpdCBhcyBzaG93biBhYm92ZSwgYW5kIHRoZW4gdXNlIHRoZSBmb2xsb3dpbmcgbGluZSB0bworIyBkaXNhYmxlIERIQ1AgYW5kIFRGVFAgb24gaXQuCisjbm8tZGhjcC1pbnRlcmZhY2U9CisKKyMgT24gc3lzdGVtcyB3aGljaCBzdXBwb3J0IGl0LCBkbnNtYXNxIGJpbmRzIHRoZSB3aWxkY2FyZCBhZGRyZXNzLAorIyBldmVuIHdoZW4gaXQgaXMgbGlzdGVuaW5nIG9uIG9ubHkgc29tZSBpbnRlcmZhY2VzLiBJdCB0aGVuIGRpc2NhcmRzCisjIHJlcXVlc3RzIHRoYXQgaXQgc2hvdWxkbid0IHJlcGx5IHRvLiBUaGlzIGhhcyB0aGUgYWR2YW50YWdlIG9mCisjIHdvcmtpbmcgZXZlbiB3aGVuIGludGVyZmFjZXMgY29tZSBhbmQgZ28gYW5kIGNoYW5nZSBhZGRyZXNzLiBJZiB5b3UKKyMgd2FudCBkbnNtYXNxIHRvIHJlYWxseSBiaW5kIG9ubHkgdGhlIGludGVyZmFjZXMgaXQgaXMgbGlzdGVuaW5nIG9uLAorIyB1bmNvbW1lbnQgdGhpcyBvcHRpb24uIEFib3V0IHRoZSBvbmx5IHRpbWUgeW91IG1heSBuZWVkIHRoaXMgaXMgd2hlbgorIyBydW5uaW5nIGFub3RoZXIgbmFtZXNlcnZlciBvbiB0aGUgc2FtZSBtYWNoaW5lLgorI2JpbmQtaW50ZXJmYWNlcworCisjIElmIHlvdSBkb24ndCB3YW50IGRuc21hc3EgdG8gcmVhZCAvZXRjL2hvc3RzLCB1bmNvbW1lbnQgdGhlCisjIGZvbGxvd2luZyBsaW5lLgorI25vLWhvc3RzCisjIG9yIGlmIHlvdSB3YW50IGl0IHRvIHJlYWQgYW5vdGhlciBmaWxlLCBhcyB3ZWxsIGFzIC9ldGMvaG9zdHMsIHVzZQorIyB0aGlzLgorI2FkZG4taG9zdHM9L2V0Yy9iYW5uZXJfYWRkX2hvc3RzCisKKyMgU2V0IHRoaXMgKGFuZCBkb21haW46IHNlZSBiZWxvdykgaWYgeW91IHdhbnQgdG8gaGF2ZSBhIGRvbWFpbgorIyBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvIHNpbXBsZSBuYW1lcyBpbiBhIGhvc3RzLWZpbGUuCisjZXhwYW5kLWhvc3RzCisKKyMgU2V0IHRoZSBkb21haW4gZm9yIGRuc21hc3EuIHRoaXMgaXMgb3B0aW9uYWwsIGJ1dCBpZiBpdCBpcyBzZXQsIGl0CisjIGRvZXMgdGhlIGZvbGxvd2luZyB0aGluZ3MuCisjIDEpIEFsbG93cyBESENQIGhvc3RzIHRvIGhhdmUgZnVsbHkgcXVhbGlmaWVkIGRvbWFpbiBuYW1lcywgYXMgbG9uZworIyAgICAgYXMgdGhlIGRvbWFpbiBwYXJ0IG1hdGNoZXMgdGhpcyBzZXR0aW5nLgorIyAyKSBTZXRzIHRoZSAiZG9tYWluIiBESENQIG9wdGlvbiB0aGVyZWJ5IHBvdGVudGlhbGx5IHNldHRpbmcgdGhlCisjICAgIGRvbWFpbiBvZiBhbGwgc3lzdGVtcyBjb25maWd1cmVkIGJ5IERIQ1AKKyMgMykgUHJvdmlkZXMgdGhlIGRvbWFpbiBwYXJ0IGZvciAiZXhwYW5kLWhvc3RzIgorI2RvbWFpbj10aGVrZWxsZXlzLm9yZy51aworCisjIFNldCBhIGRpZmZlcmVudCBkb21haW4gZm9yIGEgcGFydGljdWxhciBzdWJuZXQKKyNkb21haW49d2lyZWxlc3MudGhla2VsbGV5cy5vcmcudWssMTkyLjE2OC4yLjAvMjQKKworIyBTYW1lIGlkZWEsIGJ1dCByYW5nZSByYXRoZXIgdGhlbiBzdWJuZXQKKyNkb21haW49cmVzZXJ2ZWQudGhla2VsbGV5cy5vcmcudWssMTkyLjY4LjMuMTAwLDE5Mi4xNjguMy4yMDAKKworIyBVbmNvbW1lbnQgdGhpcyB0byBlbmFibGUgdGhlIGludGVncmF0ZWQgREhDUCBzZXJ2ZXIsIHlvdSBuZWVkCisjIHRvIHN1cHBseSB0aGUgcmFuZ2Ugb2YgYWRkcmVzc2VzIGF2YWlsYWJsZSBmb3IgbGVhc2UgYW5kIG9wdGlvbmFsbHkKKyMgYSBsZWFzZSB0aW1lLiBJZiB5b3UgaGF2ZSBtb3JlIHRoYW4gb25lIG5ldHdvcmssIHlvdSB3aWxsIG5lZWQgdG8KKyMgcmVwZWF0IHRoaXMgZm9yIGVhY2ggbmV0d29yayBvbiB3aGljaCB5b3Ugd2FudCB0byBzdXBwbHkgREhDUAorIyBzZXJ2aWNlLgorI2RoY3AtcmFuZ2U9MTkyLjE2OC4wLjUwLDE5Mi4xNjguMC4xNTAsMTJoCisKKyMgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgREhDUCByYW5nZSB3aGVyZSB0aGUgbmV0bWFzayBpcyBnaXZlbi4gVGhpcworIyBpcyBuZWVkZWQgZm9yIG5ldHdvcmtzIHdlIHJlYWNoIHRoZSBkbnNtYXNxIERIQ1Agc2VydmVyIHZpYSBhIHJlbGF5CisjIGFnZW50LiBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IGEgREhDUCByZWxheSBhZ2VudCBpcywgeW91IHByb2JhYmx5CisjIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgdGhpcy4KKyNkaGNwLXJhbmdlPTE5Mi4xNjguMC41MCwxOTIuMTY4LjAuMTUwLDI1NS4yNTUuMjU1LjAsMTJoCisKKyMgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgREhDUCByYW5nZSB3aGljaCBzZXRzIGEgdGFnLCBzbyB0aGF0CisjIHNvbWUgREhDUCBvcHRpb25zIG1heSBiZSBzZXQgb25seSBmb3IgdGhpcyBuZXR3b3JrLgorI2RoY3AtcmFuZ2U9c2V0OnJlZCwxOTIuMTY4LjAuNTAsMTkyLjE2OC4wLjE1MAorCisjIFVzZSB0aGlzIERIQ1AgcmFuZ2Ugb25seSB3aGVuIHRoZSB0YWcgImdyZWVuIiBpcyBzZXQuCisjZGhjcC1yYW5nZT10YWc6Z3JlZW4sMTkyLjE2OC4wLjUwLDE5Mi4xNjguMC4xNTAsMTJoCisKKyMgU3BlY2lmeSBhIHN1Ym5ldCB3aGljaCBjYW4ndCBiZSB1c2VkIGZvciBkeW5hbWljIGFkZHJlc3MgYWxsb2NhdGlvbiwKKyMgaXMgYXZhaWxhYmxlIGZvciBob3N0cyB3aXRoIG1hdGNoaW5nIC0tZGhjcC1ob3N0IGxpbmVzLiBOb3RlIHRoYXQKKyMgZGhjcC1ob3N0IGRlY2xhcmF0aW9ucyB3aWxsIGJlIGlnbm9yZWQgdW5sZXNzIHRoZXJlIGlzIGEgZGhjcC1yYW5nZQorIyBvZiBzb21lIHR5cGUgZm9yIHRoZSBzdWJuZXQgaW4gcXVlc3Rpb24uCisjIEluIHRoaXMgY2FzZSB0aGUgbmV0bWFzayBpcyBpbXBsaWVkIChpdCBjb21lcyBmcm9tIHRoZSBuZXR3b3JrCisjIGNvbmZpZ3VyYXRpb24gb24gdGhlIG1hY2hpbmUgcnVubmluZyBkbnNtYXNxKSBpdCBpcyBwb3NzaWJsZSB0byBnaXZlCisjIGFuIGV4cGxpY2l0IG5ldG1hc2sgaW5zdGVhZC4KKyNkaGNwLXJhbmdlPTE5Mi4xNjguMC4wLHN0YXRpYworCisjIEVuYWJsZSBESENQdjYuIE5vdGUgdGhhdCB0aGUgcHJlZml4LWxlbmd0aCBkb2VzIG5vdCBuZWVkIHRvIGJlIHNwZWNpZmllZAorIyBhbmQgZGVmYXVsdHMgdG8gNjQgaWYgbWlzc2luZy8KKyNkaGNwLXJhbmdlPTEyMzQ6OjIsIDEyMzQ6OjUwMCwgNjQsIDEyaAorCisjIERvIFJvdXRlciBBZHZlcnRpc2VtZW50cywgQlVUIE5PVCBESENQIGZvciB0aGlzIHN1Ym5ldC4KKyNkaGNwLXJhbmdlPTEyMzQ6OiwgcmEtb25seSAKKworIyBEbyBSb3V0ZXIgQWR2ZXJ0aXNlbWVudHMsIEJVVCBOT1QgREhDUCBmb3IgdGhpcyBzdWJuZXQsIGFsc28gdHJ5IGFuZAorIyBhZGQgbmFtZXMgdG8gdGhlIEROUyBmb3IgdGhlIElQdjYgYWRkcmVzcyBvZiBTTEFBQy1jb25maWd1cmVkIGR1YWwtc3RhY2sgCisjIGhvc3RzLiBVc2UgdGhlIERIQ1B2NCBsZWFzZSB0byBkZXJpdmUgdGhlIG5hbWUsIG5ldHdvcmsgc2VnbWVudCBhbmQgCisjIE1BQyBhZGRyZXNzIGFuZCBhc3N1bWUgdGhhdCB0aGUgaG9zdCB3aWxsIGFsc28gaGF2ZSBhbgorIyBJUHY2IGFkZHJlc3MgY2FsY3VsYXRlZCB1c2luZyB0aGUgU0xBQUMgYWxnb3JpdGhtLgorI2RoY3AtcmFuZ2U9MTIzNDo6LCByYS1uYW1lcworCisjIERvIFJvdXRlciBBZHZlcnRpc2VtZW50cywgQlVUIE5PVCBESENQIGZvciB0aGlzIHN1Ym5ldC4KKyMgU2V0IHRoZSBsaWZldGltZSB0byA0NiBob3Vycy4gKE5vdGU6IG1pbmltdW0gbGlmZXRpbWUgaXMgMiBob3Vycy4pCisjZGhjcC1yYW5nZT0xMjM0OjosIHJhLW9ubHksIDQ4aAorCisjIERvIERIQ1AgYW5kIFJvdXRlciBBZHZlcnRpc2VtZW50cyBmb3IgdGhpcyBzdWJuZXQuIFNldCB0aGUgQSBiaXQgaW4gdGhlIFJBCisjIHNvIHRoYXQgY2xpZW50cyBjYW4gdXNlIFNMQUFDIGFkZHJlc3NlcyBhcyB3ZWxsIGFzIERIQ1Agb25lcy4KKyNkaGNwLXJhbmdlPTEyMzQ6OjIsIDEyMzQ6OjUwMCwgc2xhYWMKKworIyBEbyBSb3V0ZXIgQWR2ZXJ0aXNlbWVudHMgYW5kIHN0YXRlbGVzcyBESENQIGZvciB0aGlzIHN1Ym5ldC4gQ2xpZW50cyB3aWxsCisjIG5vdCBnZXQgYWRkcmVzc2VzIGZyb20gREhDUCwgYnV0IHRoZXkgd2lsbCBnZXQgb3RoZXIgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4KKyMgVGhleSB3aWxsIHVzZSBTTEFBQyBmb3IgYWRkcmVzc2VzLgorI2RoY3AtcmFuZ2U9MTIzNDo6LCByYS1zdGF0ZWxlc3MKKworIyBEbyBzdGF0ZWxlc3MgREhDUCwgU0xBQUMsIGFuZCBnZW5lcmF0ZSBETlMgbmFtZXMgZm9yIFNMQUFDIGFkZHJlc3NlcworIyBmcm9tIERIQ1B2NCBsZWFzZXMuCisjZGhjcC1yYW5nZT0xMjM0OjosIHJhLXN0YXRlbGVzcywgcmEtbmFtZXMKKworIyBEbyByb3V0ZXIgYWR2ZXJ0aXNlbWVudHMgZm9yIGFsbCBzdWJuZXRzIHdoZXJlIHdlJ3JlIGRvaW5nIERIQ1B2NgorIyBVbmxlc3Mgb3ZlcnJpZGRlbiBieSByYS1zdGF0ZWxlc3MsIHJhLW5hbWVzLCBldCBhbCwgdGhlIHJvdXRlciAKKyMgYWR2ZXJ0aXNlbWVudHMgd2lsbCBoYXZlIHRoZSBNIGFuZCBPIGJpdHMgc2V0LCBzbyB0aGF0IHRoZSBjbGllbnRzCisjIGdldCBhZGRyZXNzZXMgYW5kIGNvbmZpZ3VyYXRpb24gZnJvbSBESENQdjYsIGFuZCB0aGUgQSBiaXQgcmVzZXQsIHNvIHRoZSAKKyMgY2xpZW50cyBkb24ndCB1c2UgU0xBQUMgYWRkcmVzc2VzLgorI2VuYWJsZS1yYQorCisjIFN1cHBseSBwYXJhbWV0ZXJzIGZvciBzcGVjaWZpZWQgaG9zdHMgdXNpbmcgREhDUC4gVGhlcmUgYXJlIGxvdHMKKyMgb2YgdmFsaWQgYWx0ZXJuYXRpdmVzLCBzbyB3ZSB3aWxsIGdpdmUgZXhhbXBsZXMgb2YgZWFjaC4gTm90ZSB0aGF0CisjIElQIGFkZHJlc3NlcyBETyBOT1QgaGF2ZSB0byBiZSBpbiB0aGUgcmFuZ2UgZ2l2ZW4gYWJvdmUsIHRoZXkganVzdAorIyBuZWVkIHRvIGJlIG9uIHRoZSBzYW1lIG5ldHdvcmsuIFRoZSBvcmRlciBvZiB0aGUgcGFyYW1ldGVycyBpbiB0aGVzZQorIyBkbyBub3QgbWF0dGVyLCBpdCdzIHBlcm1pc3NpYmxlIHRvIGdpdmUgbmFtZSwgYWRkcmVzcyBhbmQgTUFDIGluIGFueQorIyBvcmRlci4KKworIyBBbHdheXMgYWxsb2NhdGUgdGhlIGhvc3Qgd2l0aCBFdGhlcm5ldCBhZGRyZXNzIDExOjIyOjMzOjQ0OjU1OjY2CisjIFRoZSBJUCBhZGRyZXNzIDE5Mi4xNjguMC42MAorI2RoY3AtaG9zdD0xMToyMjozMzo0NDo1NTo2NiwxOTIuMTY4LjAuNjAKKworIyBBbHdheXMgc2V0IHRoZSBuYW1lIG9mIHRoZSBob3N0IHdpdGggaGFyZHdhcmUgYWRkcmVzcworIyAxMToyMjozMzo0NDo1NTo2NiB0byBiZSAiZnJlZCIKKyNkaGNwLWhvc3Q9MTE6MjI6MzM6NDQ6NTU6NjYsZnJlZAorCisjIEFsd2F5cyBnaXZlIHRoZSBob3N0IHdpdGggRXRoZXJuZXQgYWRkcmVzcyAxMToyMjozMzo0NDo1NTo2NgorIyB0aGUgbmFtZSBmcmVkIGFuZCBJUCBhZGRyZXNzIDE5Mi4xNjguMC42MCBhbmQgbGVhc2UgdGltZSA0NSBtaW51dGVzCisjZGhjcC1ob3N0PTExOjIyOjMzOjQ0OjU1OjY2LGZyZWQsMTkyLjE2OC4wLjYwLDQ1bQorCisjIEdpdmUgYSBob3N0IHdpdGggRXRoZXJuZXQgYWRkcmVzcyAxMToyMjozMzo0NDo1NTo2NiBvcgorIyAxMjozNDo1Njo3ODo5MDoxMiB0aGUgSVAgYWRkcmVzcyAxOTIuMTY4LjAuNjAuIERuc21hc3Egd2lsbCBhc3N1bWUKKyMgdGhhdCB0aGVzZSB0d28gRXRoZXJuZXQgaW50ZXJmYWNlcyB3aWxsIG5ldmVyIGJlIGluIHVzZSBhdCB0aGUgc2FtZQorIyB0aW1lLCBhbmQgZ2l2ZSB0aGUgSVAgYWRkcmVzcyB0byB0aGUgc2Vjb25kLCBldmVuIGlmIGl0IGlzIGFscmVhZHkKKyMgaW4gdXNlIGJ5IHRoZSBmaXJzdC4gVXNlZnVsIGZvciBsYXB0b3BzIHdpdGggd2lyZWQgYW5kIHdpcmVsZXNzCisjIGFkZHJlc3Nlcy4KKyNkaGNwLWhvc3Q9MTE6MjI6MzM6NDQ6NTU6NjYsMTI6MzQ6NTY6Nzg6OTA6MTIsMTkyLjE2OC4wLjYwCisKKyMgR2l2ZSB0aGUgbWFjaGluZSB3aGljaCBzYXlzIGl0cyBuYW1lIGlzICJiZXJ0IiBJUCBhZGRyZXNzCisjIDE5Mi4xNjguMC43MCBhbmQgYW4gaW5maW5pdGUgbGVhc2UKKyNkaGNwLWhvc3Q9YmVydCwxOTIuMTY4LjAuNzAsaW5maW5pdGUKKworIyBBbHdheXMgZ2l2ZSB0aGUgaG9zdCB3aXRoIGNsaWVudCBpZGVudGlmaWVyIDAxOjAyOjAyOjA0CisjIHRoZSBJUCBhZGRyZXNzIDE5Mi4xNjguMC42MAorI2RoY3AtaG9zdD1pZDowMTowMjowMjowNCwxOTIuMTY4LjAuNjAKKworIyBBbHdheXMgZ2l2ZSB0aGUgSW5maW5pQmFuZCBpbnRlcmZhY2Ugd2l0aCBoYXJkd2FyZSBhZGRyZXNzCisjIDgwOjAwOjAwOjQ4OmZlOjgwOjAwOjAwOjAwOjAwOjAwOjAwOmY0OjUyOjE0OjAzOjAwOjI4OjA1OjgxIHRoZQorIyBpcCBhZGRyZXNzIDE5Mi4xNjguMC42MS4gVGhlIGNsaWVudCBpZCBpcyBkZXJpdmVkIGZyb20gdGhlIHByZWZpeAorIyBmZjowMDowMDowMDowMDowMDowMjowMDowMDowMjpjOTowMCBhbmQgdGhlIGxhc3QgOCBwYWlycyBvZgorIyBoZXggZGlnaXRzIG9mIHRoZSBoYXJkd2FyZSBhZGRyZXNzLgorI2RoY3AtaG9zdD1pZDpmZjowMDowMDowMDowMDowMDowMjowMDowMDowMjpjOTowMDpmNDo1MjoxNDowMzowMDoyODowNTo4MSwxOTIuMTY4LjAuNjEKKworIyBBbHdheXMgZ2l2ZSB0aGUgaG9zdCB3aXRoIGNsaWVudCBpZGVudGlmaWVyICJtYXJqb3JpZSIKKyMgdGhlIElQIGFkZHJlc3MgMTkyLjE2OC4wLjYwCisjZGhjcC1ob3N0PWlkOm1hcmpvcmllLDE5Mi4xNjguMC42MAorCisjIEVuYWJsZSB0aGUgYWRkcmVzcyBnaXZlbiBmb3IgImp1ZGdlIiBpbiAvZXRjL2hvc3RzCisjIHRvIGJlIGdpdmVuIHRvIGEgbWFjaGluZSBwcmVzZW50aW5nIHRoZSBuYW1lICJqdWRnZSIgd2hlbgorIyBpdCBhc2tzIGZvciBhIERIQ1AgbGVhc2UuCisjZGhjcC1ob3N0PWp1ZGdlCisKKyMgTmV2ZXIgb2ZmZXIgREhDUCBzZXJ2aWNlIHRvIGEgbWFjaGluZSB3aG9zZSBFdGhlcm5ldAorIyBhZGRyZXNzIGlzIDExOjIyOjMzOjQ0OjU1OjY2CisjZGhjcC1ob3N0PTExOjIyOjMzOjQ0OjU1OjY2LGlnbm9yZQorCisjIElnbm9yZSBhbnkgY2xpZW50LWlkIHByZXNlbnRlZCBieSB0aGUgbWFjaGluZSB3aXRoIEV0aGVybmV0CisjIGFkZHJlc3MgMTE6MjI6MzM6NDQ6NTU6NjYuIFRoaXMgaXMgdXNlZnVsIHRvIHByZXZlbnQgYSBtYWNoaW5lCisjIGJlaW5nIHRyZWF0ZWQgZGlmZmVyZW50bHkgd2hlbiBydW5uaW5nIHVuZGVyIGRpZmZlcmVudCBPUydzIG9yCisjIGJldHdlZW4gUFhFIGJvb3QgYW5kIE9TIGJvb3QuCisjZGhjcC1ob3N0PTExOjIyOjMzOjQ0OjU1OjY2LGlkOioKKworIyBTZW5kIGV4dHJhIG9wdGlvbnMgd2hpY2ggYXJlIHRhZ2dlZCBhcyAicmVkIiB0bworIyB0aGUgbWFjaGluZSB3aXRoIEV0aGVybmV0IGFkZHJlc3MgMTE6MjI6MzM6NDQ6NTU6NjYKKyNkaGNwLWhvc3Q9MTE6MjI6MzM6NDQ6NTU6NjYsc2V0OnJlZAorCisjIFNlbmQgZXh0cmEgb3B0aW9ucyB3aGljaCBhcmUgdGFnZ2VkIGFzICJyZWQiIHRvCisjIGFueSBtYWNoaW5lIHdpdGggRXRoZXJuZXQgYWRkcmVzcyBzdGFydGluZyAxMToyMjozMzoKKyNkaGNwLWhvc3Q9MTE6MjI6MzM6KjoqOiosc2V0OnJlZAorCisjIEdpdmUgYSBmaXhlZCBJUHY2IGFkZHJlc3MgYW5kIG5hbWUgdG8gY2xpZW50IHdpdGggCisjIERVSUQgMDA6MDE6MDA6MDE6MTY6ZDI6ODM6ZmM6OTI6ZDQ6MTk6ZTI6ZDg6YjIKKyMgTm90ZSB0aGUgTUFDIGFkZHJlc3NlcyBDQU5OT1QgYmUgdXNlZCB0byBpZGVudGlmeSBESENQdjYgY2xpZW50cy4KKyMgTm90ZSBhbHNvIHRoZSB0aGV5IFtdIGFyb3VuZCB0aGUgSVB2NiBhZGRyZXNzIGFyZSBvYmxpZ2F0b3J5LgorI2RoY3AtaG9zdD1pZDowMDowMTowMDowMToxNjpkMjo4MzpmYzo5MjpkNDoxOTplMjpkODpiMiwgZnJlZCwgWzEyMzQ6OjVdIAorCisjIElnbm9yZSBhbnkgY2xpZW50cyB3aGljaCBhcmUgbm90IHNwZWNpZmllZCBpbiBkaGNwLWhvc3QgbGluZXMKKyMgb3IgL2V0Yy9ldGhlcnMuIEVxdWl2YWxlbnQgdG8gSVNDICJkZW55IHVua25vd24tY2xpZW50cyIuCisjIFRoaXMgcmVsaWVzIG9uIHRoZSBzcGVjaWFsICJrbm93biIgdGFnIHdoaWNoIGlzIHNldCB3aGVuCisjIGEgaG9zdCBpcyBtYXRjaGVkLgorI2RoY3AtaWdub3JlPXRhZzoha25vd24KKworIyBTZW5kIGV4dHJhIG9wdGlvbnMgd2hpY2ggYXJlIHRhZ2dlZCBhcyAicmVkIiB0byBhbnkgbWFjaGluZSB3aG9zZQorIyBESENQIHZlbmRvcmNsYXNzIHN0cmluZyBpbmNsdWRlcyB0aGUgc3Vic3RyaW5nICJMaW51eCIKKyNkaGNwLXZlbmRvcmNsYXNzPXNldDpyZWQsTGludXgKKworIyBTZW5kIGV4dHJhIG9wdGlvbnMgd2hpY2ggYXJlIHRhZ2dlZCBhcyAicmVkIiB0byBhbnkgbWFjaGluZSBvbmUKKyMgb2Ygd2hvc2UgREhDUCB1c2VyY2xhc3Mgc3RyaW5ncyBpbmNsdWRlcyB0aGUgc3Vic3RyaW5nICJhY2NvdW50cyIKKyNkaGNwLXVzZXJjbGFzcz1zZXQ6cmVkLGFjY291bnRzCisKKyMgU2VuZCBleHRyYSBvcHRpb25zIHdoaWNoIGFyZSB0YWdnZWQgYXMgInJlZCIgdG8gYW55IG1hY2hpbmUgd2hvc2UKKyMgTUFDIGFkZHJlc3MgbWF0Y2hlcyB0aGUgcGF0dGVybi4KKyNkaGNwLW1hYz1zZXQ6cmVkLDAwOjYwOjhDOio6KjoqCisKKyMgSWYgdGhpcyBsaW5lIGlzIHVuY29tbWVudGVkLCBkbnNtYXNxIHdpbGwgcmVhZCAvZXRjL2V0aGVycyBhbmQgYWN0CisjIG9uIHRoZSBldGhlcm5ldC1hZGRyZXNzL0lQIHBhaXJzIGZvdW5kIHRoZXJlIGp1c3QgYXMgaWYgdGhleSBoYWQKKyMgYmVlbiBnaXZlbiBhcyAtLWRoY3AtaG9zdCBvcHRpb25zLiBVc2VmdWwgaWYgeW91IGtlZXAKKyMgTUFDLWFkZHJlc3MvaG9zdCBtYXBwaW5ncyB0aGVyZSBmb3Igb3RoZXIgcHVycG9zZXMuCisjcmVhZC1ldGhlcnMKKworIyBTZW5kIG9wdGlvbnMgdG8gaG9zdHMgd2hpY2ggYXNrIGZvciBhIERIQ1AgbGVhc2UuCisjIFNlZSBSRkMgMjEzMiBmb3IgZGV0YWlscyBvZiBhdmFpbGFibGUgb3B0aW9ucy4KKyMgQ29tbW9uIG9wdGlvbnMgY2FuIGJlIGdpdmVuIHRvIGRuc21hc3EgYnkgbmFtZToKKyMgcnVuICJkbnNtYXNxIC0taGVscCBkaGNwIiB0byBnZXQgYSBsaXN0LgorIyBOb3RlIHRoYXQgYWxsIHRoZSBjb21tb24gc2V0dGluZ3MsIHN1Y2ggYXMgbmV0bWFzayBhbmQKKyMgYnJvYWRjYXN0IGFkZHJlc3MsIEROUyBzZXJ2ZXIgYW5kIGRlZmF1bHQgcm91dGUsIGFyZSBnaXZlbgorIyBzYW5lIGRlZmF1bHRzIGJ5IGRuc21hc3EuIFlvdSB2ZXJ5IGxpa2VseSB3aWxsIG5vdCBuZWVkCisjIGFueSBkaGNwLW9wdGlvbnMuIElmIHlvdSB1c2UgV2luZG93cyBjbGllbnRzIGFuZCBTYW1iYSwgdGhlcmUKKyMgYXJlIHNvbWUgb3B0aW9ucyB3aGljaCBhcmUgcmVjb21tZW5kZWQsIHRoZXkgYXJlIGRldGFpbGVkIGF0IHRoZQorIyBlbmQgb2YgdGhpcyBzZWN0aW9uLgorCisjIE92ZXJyaWRlIHRoZSBkZWZhdWx0IHJvdXRlIHN1cHBsaWVkIGJ5IGRuc21hc3EsIHdoaWNoIGFzc3VtZXMgdGhlCisjIHJvdXRlciBpcyB0aGUgc2FtZSBtYWNoaW5lIGFzIHRoZSBvbmUgcnVubmluZyBkbnNtYXNxLgorI2RoY3Atb3B0aW9uPTMsMS4yLjMuNAorCisjIERvIHRoZSBzYW1lIHRoaW5nLCBidXQgdXNpbmcgdGhlIG9wdGlvbiBuYW1lCisjZGhjcC1vcHRpb249b3B0aW9uOnJvdXRlciwxLjIuMy40CisKKyMgT3ZlcnJpZGUgdGhlIGRlZmF1bHQgcm91dGUgc3VwcGxpZWQgYnkgZG5zbWFzcSBhbmQgc2VuZCBubyBkZWZhdWx0CisjIHJvdXRlIGF0IGFsbC4gTm90ZSB0aGF0IHRoaXMgb25seSB3b3JrcyBmb3IgdGhlIG9wdGlvbnMgc2VudCBieQorIyBkZWZhdWx0ICgxLCAzLCA2LCAxMiwgMjgpIHRoZSBzYW1lIGxpbmUgd2lsbCBzZW5kIGEgemVyby1sZW5ndGggb3B0aW9uCisjIGZvciBhbGwgb3RoZXIgb3B0aW9uIG51bWJlcnMuCisjZGhjcC1vcHRpb249MworCisjIFNldCB0aGUgTlRQIHRpbWUgc2VydmVyIGFkZHJlc3NlcyB0byAxOTIuMTY4LjAuNCBhbmQgMTAuMTAuMC41CisjZGhjcC1vcHRpb249b3B0aW9uOm50cC1zZXJ2ZXIsMTkyLjE2OC4wLjQsMTAuMTAuMC41CisKKyMgU2VuZCBESENQdjYgb3B0aW9uLiBOb3RlIFtdIGFyb3VuZCBJUHY2IGFkZHJlc3Nlcy4KKyNkaGNwLW9wdGlvbj1vcHRpb242OmRucy1zZXJ2ZXIsWzEyMzQ6Ojc3XSxbMTIzNDo6ODhdCisKKyMgU2VuZCBESENQdjYgb3B0aW9uIGZvciBuYW1zZXJ2ZXJzIGFzIHRoZSBtYWNoaW5lIHJ1bm5pbmcgCisjIGRuc21hc3EgYW5kIGFub3RoZXIuCisjZGhjcC1vcHRpb249b3B0aW9uNjpkbnMtc2VydmVyLFs6Ol0sWzEyMzQ6Ojg4XQorCisjIEFzayBjbGllbnQgdG8gcG9sbCBmb3Igb3B0aW9uIGNoYW5nZXMgZXZlcnkgc2l4IGhvdXJzLiAoUkZDNDI0MikKKyNkaGNwLW9wdGlvbj1vcHRpb242OmluZm9ybWF0aW9uLXJlZnJlc2gtdGltZSw2aAorCisjIFNldCBvcHRpb24gNTggY2xpZW50IHJlbmV3YWwgdGltZSAoVDEpLiBEZWZhdWx0cyB0byBoYWxmIG9mIHRoZQorIyBsZWFzZSB0aW1lIGlmIG5vdCBzcGVjaWZpZWQuIChSRkMyMTMyKQorI2RoY3Atb3B0aW9uPW9wdGlvbjpUMToxbQorCisjIFNldCBvcHRpb24gNTkgcmViaW5kaW5nIHRpbWUgKFQyKS4gRGVmYXVsdHMgdG8gNy84IG9mIHRoZQorIyBsZWFzZSB0aW1lIGlmIG5vdCBzcGVjaWZpZWQuIChSRkMyMTMyKQorI2RoY3Atb3B0aW9uPW9wdGlvbjpUMjoybQorCisjIFNldCB0aGUgTlRQIHRpbWUgc2VydmVyIGFkZHJlc3MgdG8gYmUgdGhlIHNhbWUgbWFjaGluZSBhcworIyBpcyBydW5uaW5nIGRuc21hc3EKKyNkaGNwLW9wdGlvbj00MiwwLjAuMC4wCisKKyMgU2V0IHRoZSBOSVMgZG9tYWluIG5hbWUgdG8gIndlbGx5IgorI2RoY3Atb3B0aW9uPTQwLHdlbGx5CisKKyMgU2V0IHRoZSBkZWZhdWx0IHRpbWUtdG8tbGl2ZSB0byA1MAorI2RoY3Atb3B0aW9uPTIzLDUwCisKKyMgU2V0IHRoZSAiYWxsIHN1Ym5ldHMgYXJlIGxvY2FsIiBmbGFnCisjZGhjcC1vcHRpb249MjcsMQorCisjIFNlbmQgdGhlIGV0aGVyYm9vdCBtYWdpYyBmbGFnIGFuZCB0aGVuIGV0aGVyYm9vdCBvcHRpb25zIChhIHN0cmluZykuCisjZGhjcC1vcHRpb249MTI4LGU0OjQ1Ojc0OjY4OjAwOjAwCisjZGhjcC1vcHRpb249MTI5LE5JQz1lZXBybzEwMAorCisjIFNwZWNpZnkgYW4gb3B0aW9uIHdoaWNoIHdpbGwgb25seSBiZSBzZW50IHRvIHRoZSAicmVkIiBuZXR3b3JrCisjIChzZWUgZGhjcC1yYW5nZSBmb3IgdGhlIGRlY2xhcmF0aW9uIG9mIHRoZSAicmVkIiBuZXR3b3JrKQorIyBOb3RlIHRoYXQgdGhlIHRhZzogcGFydCBtdXN0IHByZWNlZGUgdGhlIG9wdGlvbjogcGFydC4KKyNkaGNwLW9wdGlvbiA9IHRhZzpyZWQsIG9wdGlvbjpudHAtc2VydmVyLCAxOTIuMTY4LjEuMQorCisjIFRoZSBmb2xsb3dpbmcgREhDUCBvcHRpb25zIHNldCB1cCBkbnNtYXNxIGluIHRoZSBzYW1lIHdheSBhcyBpcyBzcGVjaWZpZWQKKyMgZm9yIHRoZSBJU0MgZGhjcGNkIGluCisjIGh0dHA6Ly93d3cuc2FtYmEub3JnL3NhbWJhL2Z0cC9kb2NzL3RleHRkb2NzL0RIQ1AtU2VydmVyLUNvbmZpZ3VyYXRpb24udHh0CisjIGFkYXB0ZWQgZm9yIGEgdHlwaWNhbCBkbnNtYXNxIGluc3RhbGxhdGlvbiB3aGVyZSB0aGUgaG9zdCBydW5uaW5nCisjIGRuc21hc3EgaXMgYWxzbyB0aGUgaG9zdCBydW5uaW5nIHNhbWJhLgorIyB5b3UgbWF5IHdhbnQgdG8gdW5jb21tZW50IHNvbWUgb3IgYWxsIG9mIHRoZW0gaWYgeW91IHVzZQorIyBXaW5kb3dzIGNsaWVudHMgYW5kIFNhbWJhLgorI2RoY3Atb3B0aW9uPTE5LDAgICAgICAgICAgICMgb3B0aW9uIGlwLWZvcndhcmRpbmcgb2ZmCisjZGhjcC1vcHRpb249NDQsMC4wLjAuMCAgICAgIyBzZXQgbmV0Ymlvcy1vdmVyLVRDUC9JUCBuYW1lc2VydmVyKHMpIGFrYSBXSU5TIHNlcnZlcihzKQorI2RoY3Atb3B0aW9uPTQ1LDAuMC4wLjAgICAgICMgbmV0YmlvcyBkYXRhZ3JhbSBkaXN0cmlidXRpb24gc2VydmVyCisjZGhjcC1vcHRpb249NDYsOCAgICAgICAgICAgIyBuZXRiaW9zIG5vZGUgdHlwZQorCisjIFNlbmQgYW4gZW1wdHkgV1BBRCBvcHRpb24uIFRoaXMgbWF5IGJlIFJFUVVJUkVEIHRvIGdldCB3aW5kb3dzIDcgdG8gYmVoYXZlLgorI2RoY3Atb3B0aW9uPTI1MiwiXG4iCisKKyMgU2VuZCBSRkMtMzM5NyBETlMgZG9tYWluIHNlYXJjaCBESENQIG9wdGlvbi4gV0FSTklORzogWW91ciBESENQIGNsaWVudAorIyBwcm9iYWJseSBkb2Vzbid0IHN1cHBvcnQgdGhpcy4uLi4uLgorI2RoY3Atb3B0aW9uPW9wdGlvbjpkb21haW4tc2VhcmNoLGVuZy5hcHBsZS5jb20sbWFya2V0aW5nLmFwcGxlLmNvbQorCisjIFNlbmQgUkZDLTM0NDIgY2xhc3NsZXNzIHN0YXRpYyByb3V0ZXMgKG5vdGUgdGhlIG5ldG1hc2sgZW5jb2RpbmcpCisjZGhjcC1vcHRpb249MTIxLDE5Mi4xNjguMS4wLzI0LDEuMi4zLjQsMTAuMC4wLjAvOCw1LjYuNy44CisKKyMgU2VuZCB2ZW5kb3ItY2xhc3Mgc3BlY2lmaWMgb3B0aW9ucyBlbmNhcHN1bGF0ZWQgaW4gREhDUCBvcHRpb24gNDMuCisjIFRoZSBtZWFuaW5nIG9mIHRoZSBvcHRpb25zIGlzIGRlZmluZWQgYnkgdGhlIHZlbmRvci1jbGFzcyBzbworIyBvcHRpb25zIGFyZSBzZW50IG9ubHkgd2hlbiB0aGUgY2xpZW50IHN1cHBsaWVkIHZlbmRvciBjbGFzcworIyBtYXRjaGVzIHRoZSBjbGFzcyBnaXZlbiBoZXJlLiAoQSBzdWJzdHJpbmcgbWF0Y2ggaXMgT0ssIHNvICJNU0ZUIgorIyBtYXRjaGVzICJNU0ZUIiBhbmQgIk1TRlQgNS4wIikuIFRoaXMgZXhhbXBsZSBzZXRzIHRoZQorIyBtdGZ0cCBhZGRyZXNzIHRvIDAuMC4wLjAgZm9yIFBYRUNsaWVudHMuCisjZGhjcC1vcHRpb249dmVuZG9yOlBYRUNsaWVudCwxLDAuMC4wLjAKKworIyBTZW5kIG1pY3Jvc29mdC1zcGVjaWZpYyBvcHRpb24gdG8gdGVsbCB3aW5kb3dzIHRvIHJlbGVhc2UgdGhlIERIQ1AgbGVhc2UKKyMgd2hlbiBpdCBzaHV0cyBkb3duLiBOb3RlIHRoZSAiaSIgZmxhZywgdG8gdGVsbCBkbnNtYXNxIHRvIHNlbmQgdGhlCisjIHZhbHVlIGFzIGEgZm91ci1ieXRlIGludGVnZXIgLSB0aGF0J3Mgd2hhdCBtaWNyb3NvZnQgd2FudHMuIFNlZQorIyBodHRwOi8vdGVjaG5ldDIubWljcm9zb2Z0LmNvbS9XaW5kb3dzU2VydmVyL2VuL2xpYnJhcnkvYTcwZjFiYjctZDJkNC00OWYwLTk2ZDYtNGI3NDE0ZWNmYWFlMTAzMy5tc3B4P21mcj10cnVlCisjZGhjcC1vcHRpb249dmVuZG9yOk1TRlQsMiwxaQorCisjIFNlbmQgdGhlIEVuY2Fwc3VsYXRlZC12ZW5kb3ItY2xhc3MgSUQgbmVlZGVkIGJ5IHNvbWUgY29uZmlndXJhdGlvbnMgb2YKKyMgRXRoZXJib290IHRvIGFsbG93IGlzIHRvIHJlY29nbmlzZSB0aGUgREhDUCBzZXJ2ZXIuCisjZGhjcC1vcHRpb249dmVuZG9yOkV0aGVyYm9vdCw2MCwiRXRoZXJib290IgorCisjIFNlbmQgb3B0aW9ucyB0byBQWEVMaW51eC4gTm90ZSB0aGF0IHdlIG5lZWQgdG8gc2VuZCB0aGUgb3B0aW9ucyBldmVuCisjIHRob3VnaCB0aGV5IGRvbid0IGFwcGVhciBpbiB0aGUgcGFyYW1ldGVyIHJlcXVlc3QgbGlzdCwgc28gd2UgbmVlZAorIyB0byB1c2UgZGhjcC1vcHRpb24tZm9yY2UgaGVyZS4KKyMgU2VlIGh0dHA6Ly9zeXNsaW51eC56eXRvci5jb20vcHhlLnBocCNzcGVjaWFsIGZvciBkZXRhaWxzLgorIyBNYWdpYyBudW1iZXIgLSBuZWVkZWQgYmVmb3JlIGFueXRoaW5nIGVsc2UgaXMgcmVjb2duaXNlZAorI2RoY3Atb3B0aW9uLWZvcmNlPTIwOCxmMTowMDo3NDo3ZQorIyBDb25maWd1cmF0aW9uIGZpbGUgbmFtZQorI2RoY3Atb3B0aW9uLWZvcmNlPTIwOSxjb25maWdzL2NvbW1vbgorIyBQYXRoIHByZWZpeAorI2RoY3Atb3B0aW9uLWZvcmNlPTIxMCwvdGZ0cGJvb3QvcHhlbGludXgvZmlsZXMvCisjIFJlYm9vdCB0aW1lLiAoTm90ZSAnaScgdG8gc2VuZCAzMi1iaXQgdmFsdWUpCisjZGhjcC1vcHRpb24tZm9yY2U9MjExLDMwaQorCisjIFNldCB0aGUgYm9vdCBmaWxlbmFtZSBmb3IgbmV0Ym9vdC9QWEUuIFlvdSB3aWxsIG9ubHkgbmVlZAorIyB0aGlzIGlzIHlvdSB3YW50IHRvIGJvb3QgbWFjaGluZXMgb3ZlciB0aGUgbmV0d29yayBhbmQgeW91IHdpbGwgbmVlZAorIyBhIFRGVFAgc2VydmVyOyBlaXRoZXIgZG5zbWFzcSdzIGJ1aWx0IGluIFRGVFAgc2VydmVyIG9yIGFuCisjIGV4dGVybmFsIG9uZS4gKFNlZSBiZWxvdyBmb3IgaG93IHRvIGVuYWJsZSB0aGUgVEZUUCBzZXJ2ZXIuKQorI2RoY3AtYm9vdD1weGVsaW51eC4wCisKKyMgVGhlIHNhbWUgYXMgYWJvdmUsIGJ1dCB1c2UgY3VzdG9tIHRmdHAtc2VydmVyIGluc3RlYWQgbWFjaGluZSBydW5uaW5nIGRuc21hc3EKKyNkaGNwLWJvb3Q9cHhlbGludXgsc2VydmVyLm5hbWUsMTkyLjE2OC4xLjEwMAorCisjIEJvb3QgZm9yIEV0aGVyYm9vdCBnUFhFLiBUaGUgaWRlYSBpcyB0byBzZW5kIHR3byBkaWZmZXJlbnQKKyMgZmlsZW5hbWVzLCB0aGUgZmlyc3QgbG9hZHMgZ1BYRSwgYW5kIHRoZSBzZWNvbmQgdGVsbHMgZ1BYRSB3aGF0IHRvCisjIGxvYWQuIFRoZSBkaGNwLW1hdGNoIHNldHMgdGhlIGdweGUgdGFnIGZvciByZXF1ZXN0cyBmcm9tIGdQWEUuCisjZGhjcC1tYXRjaD1zZXQ6Z3B4ZSwxNzUgIyBnUFhFIHNlbmRzIGEgMTc1IG9wdGlvbi4KKyNkaGNwLWJvb3Q9dGFnOiFncHhlLHVuZGlvbmx5LmtweGUKKyNkaGNwLWJvb3Q9bXlib290aW1hZ2UKKworIyBFbmNhcHN1bGF0ZWQgb3B0aW9ucyBmb3IgRXRoZXJib290IGdQWEUuIEFsbCB0aGUgb3B0aW9ucyBhcmUKKyMgZW5jYXBzdWxhdGVkIHdpdGhpbiBvcHRpb24gMTc1CisjZGhjcC1vcHRpb249ZW5jYXA6MTc1LCAxLCA1YiAgICAgICAgICMgcHJpb3JpdHkgY29kZQorI2RoY3Atb3B0aW9uPWVuY2FwOjE3NSwgMTc2LCAxYiAgICAgICAjIG5vLXByb3h5ZGhjcAorI2RoY3Atb3B0aW9uPWVuY2FwOjE3NSwgMTc3LCBzdHJpbmcgICAjIGJ1cy1pZAorI2RoY3Atb3B0aW9uPWVuY2FwOjE3NSwgMTg5LCAxYiAgICAgICAjIEJJT1MgZHJpdmUgY29kZQorI2RoY3Atb3B0aW9uPWVuY2FwOjE3NSwgMTkwLCB1c2VyICAgICAjIGlTQ1NJIHVzZXJuYW1lCisjZGhjcC1vcHRpb249ZW5jYXA6MTc1LCAxOTEsIHBhc3MgICAgICMgaVNDU0kgcGFzc3dvcmQKKworIyBUZXN0IGZvciB0aGUgYXJjaGl0ZWN0dXJlIG9mIGEgbmV0Ym9vdCBjbGllbnQuIFBYRSBjbGllbnRzIGFyZQorIyBzdXBwb3NlZCB0byBzZW5kIHRoZWlyIGFyY2hpdGVjdHVyZSBhcyBvcHRpb24gOTMuIChTZWUgUkZDIDQ1NzgpCisjZGhjcC1tYXRjaD1wZWVjZWVzLCBvcHRpb246Y2xpZW50LWFyY2gsIDAgI3g4Ni0zMgorI2RoY3AtbWF0Y2g9aXRhbmljcywgb3B0aW9uOmNsaWVudC1hcmNoLCAyICNJQTY0CisjZGhjcC1tYXRjaD1oYW1tZXJzLCBvcHRpb246Y2xpZW50LWFyY2gsIDYgI3g4Ni02NAorI2RoY3AtbWF0Y2g9bWFjdGVscywgb3B0aW9uOmNsaWVudC1hcmNoLCA3ICNFRkkgeDg2LTY0CisKKyMgRG8gcmVhbCBQWEUsIHJhdGhlciB0aGFuIGp1c3QgYm9vdGluZyBhIHNpbmdsZSBmaWxlLCB0aGlzIGlzIGFuCisjIGFsdGVybmF0aXZlIHRvIGRoY3AtYm9vdC4KKyNweGUtcHJvbXB0PSJXaGF0IHN5c3RlbSBzaGFsbCBJIG5ldGJvb3Q/IgorIyBvciB3aXRoIHRpbWVvdXQgYmVmb3JlIGZpcnN0IGF2YWlsYWJsZSBhY3Rpb24gaXMgdGFrZW46CisjcHhlLXByb21wdD0iUHJlc3MgRjggZm9yIG1lbnUuIiwgNjAKKworIyBBdmFpbGFibGUgYm9vdCBzZXJ2aWNlcy4gZm9yIFBYRS4KKyNweGUtc2VydmljZT14ODZQQywgIkJvb3QgZnJvbSBsb2NhbCBkaXNrIgorCisjIExvYWRzIDx0ZnRwLXJvb3Q+L3B4ZWxpbnV4LjAgZnJvbSBkbnNtYXNxIFRGVFAgc2VydmVyLgorI3B4ZS1zZXJ2aWNlPXg4NlBDLCAiSW5zdGFsbCBMaW51eCIsIHB4ZWxpbnV4CisKKyMgTG9hZHMgPHRmdHAtcm9vdD4vcHhlbGludXguMCBmcm9tIFRGVFAgc2VydmVyIGF0IDEuMi4zLjQuCisjIEJld2FyZSB0aGlzIGZhaWxzIG9uIG9sZCBQWEUgUk9NUy4KKyNweGUtc2VydmljZT14ODZQQywgIkluc3RhbGwgTGludXgiLCBweGVsaW51eCwgMS4yLjMuNAorCisjIFVzZSBib290c2VydmVyIG9uIG5ldHdvcmssIGZvdW5kIG15IG11bHRpY2FzdCBvciBicm9hZGNhc3QuCisjcHhlLXNlcnZpY2U9eDg2UEMsICJJbnN0YWxsIHdpbmRvd3MgZnJvbSBSSVMgc2VydmVyIiwgMQorCisjIFVzZSBib290c2VydmVyIGF0IGEga25vd24gSVAgYWRkcmVzcy4KKyNweGUtc2VydmljZT14ODZQQywgIkluc3RhbGwgd2luZG93cyBmcm9tIFJJUyBzZXJ2ZXIiLCAxLCAxLjIuMy40CisKKyMgSWYgeW91IGhhdmUgbXVsdGljYXN0LUZUUCBhdmFpbGFibGUsCisjIGluZm9ybWF0aW9uIGZvciB0aGF0IGNhbiBiZSBwYXNzZWQgaW4gYSBzaW1pbGFyIHdheSB1c2luZyBvcHRpb25zIDEKKyMgdG8gNS4gU2VlIHBhZ2UgMTkgb2YKKyMgaHR0cDovL2Rvd25sb2FkLmludGVsLmNvbS9kZXNpZ24vYXJjaGl2ZXMvd2ZtL2Rvd25sb2Fkcy9weGVzcGVjLnBkZgorCisKKyMgRW5hYmxlIGRuc21hc3EncyBidWlsdC1pbiBURlRQIHNlcnZlcgorI2VuYWJsZS10ZnRwCisKKyMgU2V0IHRoZSByb290IGRpcmVjdG9yeSBmb3IgZmlsZXMgYXZhaWxhYmxlIHZpYSBGVFAuCisjdGZ0cC1yb290PS92YXIvZnRwZAorCisjIERvIG5vdCBhYm9ydCBpZiB0aGUgdGZ0cC1yb290IGlzIHVuYXZhaWxhYmxlCisjdGZ0cC1uby1mYWlsCisKKyMgTWFrZSB0aGUgVEZUUCBzZXJ2ZXIgbW9yZSBzZWN1cmU6IHdpdGggdGhpcyBzZXQsIG9ubHkgZmlsZXMgb3duZWQgYnkKKyMgdGhlIHVzZXIgZG5zbWFzcSBpcyBydW5uaW5nIGFzIHdpbGwgYmUgc2VuZCBvdmVyIHRoZSBuZXQuCisjdGZ0cC1zZWN1cmUKKworIyBUaGlzIG9wdGlvbiBzdG9wcyBkbnNtYXNxIGZyb20gbmVnb3RpYXRpbmcgYSBsYXJnZXIgYmxvY2tzaXplIGZvciBURlRQCisjIHRyYW5zZmVycy4gSXQgd2lsbCBzbG93IHRoaW5ncyBkb3duLCBidXQgbWF5IHJlc2N1ZSBzb21lIGJyb2tlbiBURlRQCisjIGNsaWVudHMuCisjdGZ0cC1uby1ibG9ja3NpemUKKworIyBTZXQgdGhlIGJvb3QgZmlsZSBuYW1lIG9ubHkgd2hlbiB0aGUgInJlZCIgdGFnIGlzIHNldC4KKyNkaGNwLWJvb3Q9dGFnOnJlZCxweGVsaW51eC5yZWQtbmV0CisKKyMgQW4gZXhhbXBsZSBvZiBkaGNwLWJvb3Qgd2l0aCBhbiBleHRlcm5hbCBURlRQIHNlcnZlcjogdGhlIG5hbWUgYW5kIElQCisjIGFkZHJlc3Mgb2YgdGhlIHNlcnZlciBhcmUgZ2l2ZW4gYWZ0ZXIgdGhlIGZpbGVuYW1lLgorIyBDYW4gZmFpbCB3aXRoIG9sZCBQWEUgUk9NUy4gT3ZlcnJpZGRlbiBieSAtLXB4ZS1zZXJ2aWNlLgorI2RoY3AtYm9vdD0vdmFyL2Z0cGQvcHhlbGludXguMCxib290aG9zdCwxOTIuMTY4LjAuMworCisjIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBleHRlcm5hbCB0ZnRwIHNlcnZlcnMgaGF2aW5nIGEgc2FtZSBuYW1lCisjICh1c2luZyAvZXRjL2hvc3RzKSB0aGVuIHRoYXQgbmFtZSBjYW4gYmUgc3BlY2lmaWVkIGFzIHRoZQorIyB0ZnRwX3NlcnZlcm5hbWUgKHRoZSB0aGlyZCBvcHRpb24gdG8gZGhjcC1ib290KSBhbmQgaW4gdGhhdAorIyBjYXNlIGRuc21hc3EgcmVzb2x2ZXMgdGhpcyBuYW1lIGFuZCByZXR1cm5zIHRoZSByZXN1bHRhbnQgSVAKKyMgYWRkcmVzc2VzIGluIHJvdW5kIHJvYmluIGZhc2hpb24uIFRoaXMgZmFjaWxpdHkgY2FuIGJlIHVzZWQgdG8KKyMgbG9hZCBiYWxhbmNlIHRoZSB0ZnRwIGxvYWQgYW1vbmcgYSBzZXQgb2Ygc2VydmVycy4KKyNkaGNwLWJvb3Q9L3Zhci9mdHBkL3B4ZWxpbnV4LjAsYm9vdGhvc3QsdGZ0cF9zZXJ2ZXJfbmFtZQorCisjIFNldCB0aGUgbGltaXQgb24gREhDUCBsZWFzZXMsIHRoZSBkZWZhdWx0IGlzIDE1MAorI2RoY3AtbGVhc2UtbWF4PTE1MAorCisjIFRoZSBESENQIHNlcnZlciBuZWVkcyBzb21ld2hlcmUgb24gZGlzayB0byBrZWVwIGl0cyBsZWFzZSBkYXRhYmFzZS4KKyMgVGhpcyBkZWZhdWx0cyB0byBhIHNhbmUgbG9jYXRpb24sIGJ1dCBpZiB5b3Ugd2FudCB0byBjaGFuZ2UgaXQsIHVzZQorIyB0aGUgbGluZSBiZWxvdy4KKyNkaGNwLWxlYXNlZmlsZT0vdmFyL2xpYi9taXNjL2Ruc21hc3EubGVhc2VzCisKKyMgU2V0IHRoZSBESENQIHNlcnZlciB0byBhdXRob3JpdGF0aXZlIG1vZGUuIEluIHRoaXMgbW9kZSBpdCB3aWxsIGJhcmdlIGluCisjIGFuZCB0YWtlIG92ZXIgdGhlIGxlYXNlIGZvciBhbnkgY2xpZW50IHdoaWNoIGJyb2FkY2FzdHMgb24gdGhlIG5ldHdvcmssCisjIHdoZXRoZXIgaXQgaGFzIGEgcmVjb3JkIG9mIHRoZSBsZWFzZSBvciBub3QuIFRoaXMgYXZvaWRzIGxvbmcgdGltZW91dHMKKyMgd2hlbiBhIG1hY2hpbmUgd2FrZXMgdXAgb24gYSBuZXcgbmV0d29yay4gRE8gTk9UIGVuYWJsZSB0aGlzIGlmIHRoZXJlJ3MKKyMgdGhlIHNsaWdodGVzdCBjaGFuY2UgdGhhdCB5b3UgbWlnaHQgZW5kIHVwIGFjY2lkZW50YWxseSBjb25maWd1cmluZyBhIERIQ1AKKyMgc2VydmVyIGZvciB5b3VyIGNhbXB1cy9jb21wYW55IGFjY2lkZW50YWxseS4gVGhlIElTQyBzZXJ2ZXIgdXNlcworIyB0aGUgc2FtZSBvcHRpb24sIGFuZCB0aGlzIFVSTCBwcm92aWRlcyBtb3JlIGluZm9ybWF0aW9uOgorIyBodHRwOi8vd3d3LmlzYy5vcmcvZmlsZXMvYXV0aC5odG1sCisjZGhjcC1hdXRob3JpdGF0aXZlCisKKyMgUnVuIGFuIGV4ZWN1dGFibGUgd2hlbiBhIERIQ1AgbGVhc2UgaXMgY3JlYXRlZCBvciBkZXN0cm95ZWQuCisjIFRoZSBhcmd1bWVudHMgc2VudCB0byB0aGUgc2NyaXB0IGFyZSAiYWRkIiBvciAiZGVsIiwKKyMgdGhlbiB0aGUgTUFDIGFkZHJlc3MsIHRoZSBJUCBhZGRyZXNzIGFuZCBmaW5hbGx5IHRoZSBob3N0bmFtZQorIyBpZiB0aGVyZSBpcyBvbmUuCisjZGhjcC1zY3JpcHQ9L2Jpbi9lY2hvCisKKyMgU2V0IHRoZSBjYWNoZXNpemUgaGVyZS4KKyNjYWNoZS1zaXplPTE1MAorCisjIElmIHlvdSB3YW50IHRvIGRpc2FibGUgbmVnYXRpdmUgY2FjaGluZywgdW5jb21tZW50IHRoaXMuCisjbm8tbmVnY2FjaGUKKworIyBOb3JtYWxseSByZXNwb25zZXMgd2hpY2ggY29tZSBmcm9tIC9ldGMvaG9zdHMgYW5kIHRoZSBESENQIGxlYXNlCisjIGZpbGUgaGF2ZSBUaW1lLVRvLUxpdmUgc2V0IGFzIHplcm8sIHdoaWNoIGNvbnZlbnRpb25hbGx5IG1lYW5zCisjIGRvIG5vdCBjYWNoZSBmdXJ0aGVyLiBJZiB5b3UgYXJlIGhhcHB5IHRvIHRyYWRlIGxvd2VyIGxvYWQgb24gdGhlCisjIHNlcnZlciBmb3IgcG90ZW50aWFsbHkgc3RhbGUgZGF0ZSwgeW91IGNhbiBzZXQgYSB0aW1lLXRvLWxpdmUgKGluCisjIHNlY29uZHMpIGhlcmUuCisjbG9jYWwtdHRsPQorCisjIElmIHlvdSB3YW50IGRuc21hc3EgdG8gZGV0ZWN0IGF0dGVtcHRzIGJ5IFZlcmlzaWduIHRvIHNlbmQgcXVlcmllcworIyB0byB1bnJlZ2lzdGVyZWQgLmNvbSBhbmQgLm5ldCBob3N0cyB0byBpdHMgc2l0ZWZpbmRlciBzZXJ2aWNlIGFuZAorIyBoYXZlIGRuc21hc3EgaW5zdGVhZCByZXR1cm4gdGhlIGNvcnJlY3QgTlhET01BSU4gcmVzcG9uc2UsIHVuY29tbWVudAorIyB0aGlzIGxpbmUuIFlvdSBjYW4gYWRkIHNpbWlsYXIgbGluZXMgdG8gZG8gdGhlIHNhbWUgZm9yIG90aGVyCisjIHJlZ2lzdHJpZXMgd2hpY2ggaGF2ZSBpbXBsZW1lbnRlZCB3aWxkY2FyZCBBIHJlY29yZHMuCisjYm9ndXMtbnhkb21haW49NjQuOTQuMTEwLjExCisKKyMgSWYgeW91IHdhbnQgdG8gZml4IHVwIEROUyByZXN1bHRzIGZyb20gdXBzdHJlYW0gc2VydmVycywgdXNlIHRoZQorIyBhbGlhcyBvcHRpb24uIFRoaXMgb25seSB3b3JrcyBmb3IgSVB2NC4KKyMgVGhpcyBhbGlhcyBtYWtlcyBhIHJlc3VsdCBvZiAxLjIuMy40IGFwcGVhciBhcyA1LjYuNy44CisjYWxpYXM9MS4yLjMuNCw1LjYuNy44CisjIGFuZCB0aGlzIG1hcHMgMS4yLjMueCB0byA1LjYuNy54CisjYWxpYXM9MS4yLjMuMCw1LjYuNy4wLDI1NS4yNTUuMjU1LjAKKyMgYW5kIHRoaXMgbWFwcyAxOTIuMTY4LjAuMTAtPjE5Mi4xNjguMC40MCB0byAxMC4wLjAuMTAtPjEwLjAuMC40MAorI2FsaWFzPTE5Mi4xNjguMC4xMC0xOTIuMTY4LjAuNDAsMTAuMC4wLjAsMjU1LjI1NS4yNTUuMAorCisjIENoYW5nZSB0aGVzZSBsaW5lcyBpZiB5b3Ugd2FudCBkbnNtYXNxIHRvIHNlcnZlIE1YIHJlY29yZHMuCisKKyMgUmV0dXJuIGFuIE1YIHJlY29yZCBuYW1lZCAibWFpbGRvbWFpbi5jb20iIHdpdGggdGFyZ2V0CisjIHNlcnZlcm1hY2hpbmUuY29tIGFuZCBwcmVmZXJlbmNlIDUwCisjbXgtaG9zdD1tYWlsZG9tYWluLmNvbSxzZXJ2ZXJtYWNoaW5lLmNvbSw1MAorCisjIFNldCB0aGUgZGVmYXVsdCB0YXJnZXQgZm9yIE1YIHJlY29yZHMgY3JlYXRlZCB1c2luZyB0aGUgbG9jYWxteCBvcHRpb24uCisjbXgtdGFyZ2V0PXNlcnZlcm1hY2hpbmUuY29tCisKKyMgUmV0dXJuIGFuIE1YIHJlY29yZCBwb2ludGluZyB0byB0aGUgbXgtdGFyZ2V0IGZvciBhbGwgbG9jYWwKKyMgbWFjaGluZXMuCisjbG9jYWxteAorCisjIFJldHVybiBhbiBNWCByZWNvcmQgcG9pbnRpbmcgdG8gaXRzZWxmIGZvciBhbGwgbG9jYWwgbWFjaGluZXMuCisjc2VsZm14CisKKyMgQ2hhbmdlIHRoZSBmb2xsb3dpbmcgbGluZXMgaWYgeW91IHdhbnQgZG5zbWFzcSB0byBzZXJ2ZSBTUlYKKyMgcmVjb3Jkcy4gIFRoZXNlIGFyZSB1c2VmdWwgaWYgeW91IHdhbnQgdG8gc2VydmUgbGRhcCByZXF1ZXN0cyBmb3IKKyMgQWN0aXZlIERpcmVjdG9yeSBhbmQgb3RoZXIgd2luZG93cy1vcmlnaW5hdGVkIEROUyByZXF1ZXN0cy4KKyMgU2VlIFJGQyAyNzgyLgorIyBZb3UgbWF5IGFkZCBtdWx0aXBsZSBzcnYtaG9zdCBsaW5lcy4KKyMgVGhlIGZpZWxkcyBhcmUgPG5hbWU+LDx0YXJnZXQ+LDxwb3J0Piw8cHJpb3JpdHk+LDx3ZWlnaHQ+CisjIElmIHRoZSBkb21haW4gcGFydCBpZiBtaXNzaW5nIGZyb20gdGhlIG5hbWUgKHNvIHRoYXQgaXMganVzdCBoYXMgdGhlCisjIHNlcnZpY2UgYW5kIHByb3RvY29sIHNlY3Rpb25zKSB0aGVuIHRoZSBkb21haW4gZ2l2ZW4gYnkgdGhlIGRvbWFpbj0KKyMgY29uZmlnIG9wdGlvbiBpcyB1c2VkLiAoTm90ZSB0aGF0IGV4cGFuZC1ob3N0cyBkb2VzIG5vdCBuZWVkIHRvIGJlCisjIHNldCBmb3IgdGhpcyB0byB3b3JrLikKKworIyBBIFNSViByZWNvcmQgc2VuZGluZyBMREFQIGZvciB0aGUgZXhhbXBsZS5jb20gZG9tYWluIHRvCisjIGxkYXBzZXJ2ZXIuZXhhbXBsZS5jb20gcG9ydCAzODkKKyNzcnYtaG9zdD1fbGRhcC5fdGNwLmV4YW1wbGUuY29tLGxkYXBzZXJ2ZXIuZXhhbXBsZS5jb20sMzg5CisKKyMgQSBTUlYgcmVjb3JkIHNlbmRpbmcgTERBUCBmb3IgdGhlIGV4YW1wbGUuY29tIGRvbWFpbiB0bworIyBsZGFwc2VydmVyLmV4YW1wbGUuY29tIHBvcnQgMzg5ICh1c2luZyBkb21haW49KQorI2RvbWFpbj1leGFtcGxlLmNvbQorI3Nydi1ob3N0PV9sZGFwLl90Y3AsbGRhcHNlcnZlci5leGFtcGxlLmNvbSwzODkKKworIyBUd28gU1JWIHJlY29yZHMgZm9yIExEQVAsIGVhY2ggd2l0aCBkaWZmZXJlbnQgcHJpb3JpdGllcworI3Nydi1ob3N0PV9sZGFwLl90Y3AuZXhhbXBsZS5jb20sbGRhcHNlcnZlci5leGFtcGxlLmNvbSwzODksMQorI3Nydi1ob3N0PV9sZGFwLl90Y3AuZXhhbXBsZS5jb20sbGRhcHNlcnZlci5leGFtcGxlLmNvbSwzODksMgorCisjIEEgU1JWIHJlY29yZCBpbmRpY2F0aW5nIHRoYXQgdGhlcmUgaXMgbm8gTERBUCBzZXJ2ZXIgZm9yIHRoZSBkb21haW4KKyMgZXhhbXBsZS5jb20KKyNzcnYtaG9zdD1fbGRhcC5fdGNwLmV4YW1wbGUuY29tCisKKyMgVGhlIGZvbGxvd2luZyBsaW5lIHNob3dzIGhvdyB0byBtYWtlIGRuc21hc3Egc2VydmUgYW4gYXJiaXRyYXJ5IFBUUgorIyByZWNvcmQuIFRoaXMgaXMgdXNlZnVsIGZvciBETlMtU0QuIChOb3RlIHRoYXQgdGhlCisjIGRvbWFpbi1uYW1lIGV4cGFuc2lvbiBkb25lIGZvciBTUlYgcmVjb3JkcyBfZG9lc19ub3QKKyMgb2NjdXIgZm9yIFBUUiByZWNvcmRzLikKKyNwdHItcmVjb3JkPV9odHRwLl90Y3AuZG5zLXNkLXNlcnZpY2VzLCJOZXcgRW1wbG95ZWUgUGFnZS5faHR0cC5fdGNwLmRucy1zZC1zZXJ2aWNlcyIKKworIyBDaGFuZ2UgdGhlIGZvbGxvd2luZyBsaW5lcyB0byBlbmFibGUgZG5zbWFzcSB0byBzZXJ2ZSBUWFQgcmVjb3Jkcy4KKyMgVGhlc2UgYXJlIHVzZWQgZm9yIHRoaW5ncyBsaWtlIFNQRiBhbmQgemVyb2NvbmYuIChOb3RlIHRoYXQgdGhlCisjIGRvbWFpbi1uYW1lIGV4cGFuc2lvbiBkb25lIGZvciBTUlYgcmVjb3JkcyBfZG9lc19ub3QKKyMgb2NjdXIgZm9yIFRYVCByZWNvcmRzLikKKworI0V4YW1wbGUgU1BGLgorI3R4dC1yZWNvcmQ9ZXhhbXBsZS5jb20sInY9c3BmMSBhIC1hbGwiCisKKyNFeGFtcGxlIHplcm9jb25mCisjdHh0LXJlY29yZD1faHR0cC5fdGNwLmV4YW1wbGUuY29tLG5hbWU9dmFsdWUscGFwZXI9QTQKKworIyBQcm92aWRlIGFuIGFsaWFzIGZvciBhICJsb2NhbCIgRE5TIG5hbWUuIE5vdGUgdGhhdCB0aGlzIF9vbmx5XyB3b3JrcworIyBmb3IgdGFyZ2V0cyB3aGljaCBhcmUgbmFtZXMgZnJvbSBESENQIG9yIC9ldGMvaG9zdHMuIEdpdmUgaG9zdAorIyAiYmVydCIgYW5vdGhlciBuYW1lLCBiZXJ0cmFuZAorI2NuYW1lPWJlcnRhbmQsYmVydAorCisjIEZvciBkZWJ1Z2dpbmcgcHVycG9zZXMsIGxvZyBlYWNoIEROUyBxdWVyeSBhcyBpdCBwYXNzZXMgdGhyb3VnaAorIyBkbnNtYXNxLgorI2xvZy1xdWVyaWVzCisKKyMgTG9nIGxvdHMgb2YgZXh0cmEgaW5mb3JtYXRpb24gYWJvdXQgREhDUCB0cmFuc2FjdGlvbnMuCisjbG9nLWRoY3AKKworIyBJbmNsdWRlIGFub3RoZXIgbG90IG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KKyNjb25mLWZpbGU9L2V0Yy9kbnNtYXNxLm1vcmUuY29uZgorI2NvbmYtZGlyPS9ldGMvZG5zbWFzcS5kCisKKyMgSW5jbHVkZSBhbGwgdGhlIGZpbGVzIGluIGEgZGlyZWN0b3J5IGV4Y2VwdCB0aG9zZSBlbmRpbmcgaW4gLmJhaworI2NvbmYtZGlyPS9ldGMvZG5zbWFzcS5kLC5iYWsKKworIyBJbmNsdWRlIGFsbCBmaWxlcyBpbiBhIGRpcmVjdG9yeSB3aGljaCBlbmQgaW4gLmNvbmYKKyNjb25mLWRpcj0vZXRjL2Ruc21hc3EuZC8sKi5jb25mCmRpZmYgLS1naXQgYS9kb2MuaHRtbCBiL2RvYy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI2YWU3MzEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MuaHRtbApAQCAtMCwwICsxLDk3IEBACis8SFRNTD4KKzxIRUFEPgorPFRJVExFPiBEbnNtYXNxIC0gbmV0d29yayBzZXJ2aWNlcyBmb3Igc21hbGwgbmV0d29ya3MuPC9USVRMRT4KKzxsaW5rIHJlbD0iaWNvbiIgaHJlZj0iaHR0cDovL3d3dy50aGVrZWxsZXlzLm9yZy51ay9kbnNtYXNxL2ltYWdlcy9mYXZpY29uLmljbyI+Cis8L0hFQUQ+Cis8Qk9EWSBCR0NPTE9SPSJXSElURSI+IAorPHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Cis8dHI+Cis8dGQgYWxpZ249ImxlZnQiIHZhbGlnbj0ibWlkZGxlIj48aW1nIGJvcmRlcj0iMCIgc3JjPSJodHRwOi8vd3d3LnRoZWtlbGxleXMub3JnLnVrL2Ruc21hc3EvaW1hZ2VzL2ljb24ucG5nIiAvPjwvdGQ+Cis8dGQgYWxpZ249Im1pZGRsZSIgdmFsaWduPSJtaWRkbGUiPjxoMT5EbnNtYXNxPC9oMT48L3RkPgorPHRkIGFsaWduPSJyaWdodCIgdmFsaWduPSJtaWRkbGUiPjxpbWcgYm9yZGVyPSIwIiBzcmM9Imh0dHA6Ly93d3cudGhla2VsbGV5cy5vcmcudWsvZG5zbWFzcS9pbWFnZXMvaWNvbi5wbmciIC8+PC90ZD48L3RyPgorPC90YWJsZT4KK0Ruc21hc3EgcHJvdmlkZXMgbmV0d29yayBpbmZyYXN0cnVjdHVyZSBmb3Igc21hbGwgbmV0d29ya3M6IEROUywgREhDUCwgcm91dGVyIGFkdmVydGlzZW1lbnQgYW5kIG5ldHdvcmsgYm9vdC4gSXQgaXMgZGVzaWduZWQgdG8gYmUgCitsaWdodHdlaWdodCBhbmQgaGF2ZSBhIHNtYWxsIGZvb3RwcmludCwgc3VpdGFibGUgZm9yIHJlc291cmNlIGNvbnN0cmFpbmVkIHJvdXRlcnMgYW5kIGZpcmV3YWxscy4gSXQgaGFzIGFsc28gYmVlbiB3aWRlbHkgdXNlZCAKK2ZvciB0ZXRoZXJpbmcgb24gc21hcnRwaG9uZXMgYW5kIHBvcnRhYmxlIGhvdHNwb3RzLCBhbmQgdG8gc3VwcG9ydCB2aXJ0dWFsIG5ldHdvcmtpbmcgaW4gdmlydHVhbGlzYXRpb24gZnJhbWV3b3Jrcy4KK1N1cHBvcnRlZCBwbGF0Zm9ybXMgaW5jbHVkZSBMaW51eCAod2l0aCBnbGliYyBhbmQgdWNsaWJjKSwgQW5kcm9pZCwgKkJTRCwgYW5kIE1hYyBPUyBYLiBEbnNtYXNxIGlzIGluY2x1ZGVkIGluIG1vc3QKK0xpbnV4IGRpc3RyaWJ1dGlvbnMgYW5kIHRoZSBwb3J0cyBzeXN0ZW1zIG9mIEZyZWVCU0QsIE9wZW5CU0QgYW5kIE5ldEJTRC4gRG5zbWFzcSBwcm92aWRlcyBmdWxsIElQdjYgc3VwcG9ydC4KKworPFA+CitUaGUgRE5TIHN1YnN5c3RlbSBwcm92aWRlcyBhIGxvY2FsIEROUyBzZXJ2ZXIgZm9yIHRoZSBuZXR3b3JrLCB3aXRoIGZvcndhcmRpbmcgb2YgYWxsIHF1ZXJ5IHR5cGVzIHRvIHVwc3RyZWFtIHJlY3Vyc2l2ZSBETlMgc2VydmVycyBhbmQKK2NhY2hpbmcgb2YgY29tbW9uIHJlY29yZCB0eXBlcyAoQSwgQUFBQSwgQ05BTUUgYW5kIFBUUiwgYWxzbyBETlNLRVkgYW5kIERTIHdoZW4gRE5TU0VDIGlzIGVuYWJsZWQpLiAKKzxESVI+Cis8TEk+TG9jYWwgRE5TIG5hbWVzIGNhbiBiZSBkZWZpbmVkIGJ5IHJlYWRpbmcgL2V0Yy9ob3N0cywgYnkgaW1wb3J0aW5nIG5hbWVzIGZyb20gdGhlIERIQ1Agc3Vic3lzdGVtLCBvciBieSBjb25maWd1cmF0aW9uIG9mIGEgd2lkZSByYW5nZSBvZiB1c2VmdWwgcmVjb3JkIHR5cGVzLjwvTEk+Cis8TEk+VXBzdHJlYW0gc2VydmVycyBjYW4gYmUgY29uZmlndXJlZCBpbiBhIHZhcmlldHkgb2YgY29udmVuaWVudCB3YXlzLCBpbmNsdWRpbmcgIGR5bmFtaWMgY29uZmlndXJhdGlvbiBhcyB0aGVzZSBjaGFuZ2Ugb24gbW92aW5nIHVwc3RyZWFtIG5ldHdvcmsuCis8TEk+QXV0aG9yaXRhdGl2ZSBETlMgbW9kZSBhbGxvd3MgbG9jYWwgRE5TIG5hbWVzIG1heSBiZSBleHBvcnRlZCB0byB6b25lIGluIHRoZSBnbG9iYWwgRE5TLiBEbnNtYXNxIGFjdHMgYXMgYXV0aG9yaXRhdGl2ZSBzZXJ2ZXIgZm9yIHRoaXMgem9uZSwgYW5kIGFsc28gcHJvdmlkZXMgCit6b25lIHRyYW5zZmVyIHRvIHNlY29uZGFyaWVzIGZvciB0aGUgem9uZSwgaWYgcmVxdWlyZWQuPC9MST4KKzxMST5ETlNTRUMgdmFsaWRhdGlvbiBtYXkgYmUgcGVyZm9ybWVkIG9uIEROUyByZXBsaWVzIGZyb20gdXBzdHJlYW0gbmFtZXNlcnZlcnMsIHByb3ZpZGluZyBzZWN1cml0eSBhZ2FpbnN0IHNwb29maW5nIGFuZCBjYWNoZSBwb2lzb25pbmcuPC9MST4KKzxMST5TcGVjaWZpZWQgc3ViLWRvbWFpbnMgY2FuIGJlIGRpcmVjdGVkIHRvIHRoZWlyIG93biB1cHN0cmVhbSBETlMgc2VydmVycywgbWFraW5nIFZQTiBjb25maWd1cmF0aW9uIGVhc3kuPC9MST4KKzxMST5JbnRlcm5hdGlvbmFsaXNlZCBkb21haW4gbmFtZXMgYXJlIHN1cHBvcnRlZC4KKzwvRElSPgorPFA+CitUaGUgREhDUCBzdWJzeXN0ZW0gc3VwcG9ydHMgREhDUHY0LCBESENQdjYsIEJPT1RQIGFuZCBQWEUuCis8RElSPgorPExJPiBCb3RoIHN0YXRpYyBhbmQgZHluYW1pYyBESENQIGxlYXNlcyBhcmUgc3VwcG9ydGVkLCBhbG9uZyB3aXRoIHN0YXRlbGVzcyBtb2RlIGluIERIQ1B2Ni48L0xJPgorPExJPiBUaGUgUFhFIHN5c3RlbSBpcyBhIGZ1bGwgUFhFIHNlcnZlciwgc3VwcG9ydGluZyBuZXRib290IG1lbnVzIGFuZCBtdWx0aXBsZSBhcmNoaXRlY3R1cmUgc3VwcG9ydC4gSXQKK2luY2x1ZGVzIHByb3h5LW1vZGUsIHdoZXJlIHRoZSBQWEUgc3lzdGVtIGNvLW9wZXJhdGVzIHdpdGggYW5vdGhlciBESENQIHNlcnZlci48L0xJPgorPExJPiBUaGVyZSBpcyBhIGJ1aWx0IGluIHJlYWQtb25seSBURlRQIHNlcnZlciB0byBzdXBwb3J0IG5ldGJvb3QuPC9MST4KKzxMST4gTWFjaGluZXMgd2hpY2ggYXJlIGNvbmZpZ3VyZWQgYnkgREhDUCBoYXZlIHRoZWlyIG5hbWVzIGF1dG9tYXRpY2FsbHkgCitpbmNsdWRlZCBpbiB0aGUgRE5TIGFuZCB0aGUgbmFtZXMgY2FuIHNwZWNpZmllZCBieSBlYWNoIG1hY2hpbmUgb3IKK2NlbnRyYWxseSBieSBhc3NvY2lhdGluZyBhIG5hbWUgd2l0aCBhIE1BQyBhZGRyZXNzIG9yIFVJRCBpbiB0aGUgZG5zbWFzcQorY29uZmlndXJhdGlvbiBmaWxlLjwvTEk+Cis8L0RJUj4KKzxQPgorVGhlIFJvdXRlciBBZHZlcnRpc2VtZW50IHN1YnN5c3RlbSBwcm92aWRlcyBiYXNpYyBhdXRvY29uZmlndXJhdGlvbiBmb3IgSVB2NiBob3N0cy4gSXQgY2FuIGJlIHVzZWQgc3RhbmQtYWxvbmUgb3IgaW4gY29uanVuY3Rpb24gd2l0aCBESENQdjYuCis8RElSPgorPExJPiBUaGUgTSBhbmQgTyBiaXRzIGFyZSBjb25maWd1cmFibGUsIHRvIGNvbnRyb2wgaG9zdHMnIHVzZSBvZiBESENQdjYuPC9MST4KKzxMST4gUm91dGVyIGFkdmVydGlzZW1lbnRzIGNhbiBpbmNsdWRlIHRoZSBSRE5TUyBvcHRpb24uPC9MST4KKzxMST4gVGhlcmUgaXMgYSBtb2RlIHdoaWNoIHVzZXMgbmFtZSBpbmZvcm1hdGlvbiBmcm9tIERIQ1B2NCBjb25maWd1cmF0aW9uIHRvIHByb3ZpZGUgRE5TIGVudHJpZXMKKyBmb3IgYXV0b2NvbmZpZ3VyZWQgSVB2NiBhZGRyZXNzZXMgd2hpY2ggd291bGQgb3RoZXJ3aXNlIGJlIGFub255bW91cy48L0xJPgorPC9ESVI+Cis8UD4KKyAKK0ZvciBleHRyYSBjb21wYWN0bmVzcywgdW51c2VkIGZlYXR1cmVzIG1heSBiZSBvbWl0dGVkIGF0IGNvbXBpbGUgdGltZS4KKworCis8SDI+R2V0IGNvZGUuPC9IMj4KKworPEEgSFJFRj0iaHR0cDovL3d3dy50aGVrZWxsZXlzLm9yZy51ay9kbnNtYXNxLyI+RG93bmxvYWQ8L0E+IGRuc21hc3EgaGVyZS4gCitUaGUgdGFyYmFsbCBpbmNsdWRlcyB0aGlzIGRvY3VtZW50YXRpb24sIHNvdXJjZSwgYW5kIG1hbnBhZ2UuCitUaGVyZSBpcyBhbHNvIGEgPEEgSFJFRj0iQ0hBTkdFTE9HIj4gQ0hBTkdFTE9HPC9BPiBhbmQgYSA8QSBIUkVGPSJGQVEiPkZBUTwvQT4uCisKK0Ruc21hc3EgaGFzIGEgZ2l0IHJlcG9zaXRvcnkgd2hpY2ggY29udGFpbnMgdGhlIGNvbXBsZXRlIHJlbGVhc2UKK2hpc3Rvcnkgb2YgdmVyc2lvbiAyIGFuZCBkZXZlbG9wbWVudCBoaXN0b3J5IGZyb20gMi42MC4gWW91IGNhbiAKKzxBIEhSRUY9Imh0dHA6Ly90aGVrZWxsZXlzLm9yZy51ay9naXR3ZWIvP3A9ZG5zbWFzcS5naXQ7YT1zdW1tYXJ5Ij5icm93c2U8L0E+Cit0aGUgcmVwbywgb3IgZ2V0IGEgY29weSB1c2luZyBnaXQgcHJvdG9jb2wgd2l0aCB0aGUgY29tbWFuZAorCis8UFJFPjxUVD5naXQgY2xvbmUgZ2l0Oi8vdGhla2VsbGV5cy5vcmcudWsvZG5zbWFzcS5naXQgPC9UVD48L1BSRT4KKworPEgyPkxpY2Vuc2UuPC9IMj4KK0Ruc21hc3EgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEdQTCwgdmVyc2lvbiAyIG9yIHZlcnNpb24gMyBhdCB5b3VyIGRpc2NyZXRpb24uIFNlZSB0aGUgZmlsZXMgQ09QWUlORyBhbmQgQ09QWUlORy12MyBpbiB0aGUgZGlzdHJpYnV0aW9uIAorZm9yIGRldGFpbHMuCisKKzxIMj5Db250YWN0LjwvSDI+CitUaGVyZSBpcyBhIGRuc21hc3EgbWFpbGluZyBsaXN0IGF0IDxBCitIUkVGPSJodHRwOi8vbGlzdHMudGhla2VsbGV5cy5vcmcudWsvbWFpbG1hbi9saXN0aW5mby9kbnNtYXNxLWRpc2N1c3MiPgoraHR0cDovL2xpc3RzLnRoZWtlbGxleXMub3JnLnVrL21haWxtYW4vbGlzdGluZm8vZG5zbWFzcS1kaXNjdXNzPC9BPiB3aGljaCBzaG91bGQgYmUgdGhlCitmaXJzdCBsb2NhdGlvbiBmb3IgcXVlcmllcywgYnVncmVwb3J0cywgc3VnZ2VzdGlvbnMgZXRjLiBUaGUgbGlzdCBpcyBtaXJyb3JlZCwgd2l0aCBhCitzZWFyY2ggZmFjaWxpdHksIGF0IDxBIEhSRUY9Imh0dHBzOi8vd3d3Lm1haWwtYXJjaGl2ZS5jb20vZG5zbWFzcS1kaXNjdXNzQGxpc3RzLnRoZWtlbGxleXMub3JnLnVrLyI+CitodHRwczovL3d3dy5tYWlsLWFyY2hpdmUuY29tL2Ruc21hc3EtZGlzY3Vzc0BsaXN0cy50aGVrZWxsZXlzLm9yZy51ay88L0E+LgorWW91IGNhbiBjb250YWN0IG1lIGF0IDxBCitIUkVGPSJtYWlsdG86c2ltb25AdGhla2VsbGV5cy5vcmcudWsiPnNpbW9uQHRoZWtlbGxleXMub3JnLnVrPC9BPi4KKworPEgyPkRvbmF0aW9ucy48L0gyPgorRG5zbWFzcSBpcyBtYWlubHkgd3JpdHRlbiBhbmQgbWFpbnRhaW5lZCBieSBTaW1vbiBLZWxsZXkuIEZvciBtb3N0IG9mIGl0cyBsaWZlLCBkbnNtYXNxIGhhcyBiZWVuIGEgc3BhcmUtdGltZSBwcm9qZWN0LiAKK1RoZXNlIGRheXMgSSdtIHdvcmtpbmcgb24gaXQgYXMgbXkgbWFpbiBhY3Rpdml0eS4gCitJIGRvbid0IGhhdmUgYW4gZW1wbG95ZXIgb3IgYW55b25lIHdobyBwYXlzIG1lIHJlZ3VsYXJseSB0byB3b3JrIG9uIGRuc21hc3EuIElmIHlvdSdkIGxpa2UgdG8gbWFrZSAKK2EgY29udHJpYnV0aW9uIHRvd2FyZHMgbXkgZXhwZW5zZXMsIHBsZWFzZSB1c2UgdGhlIGRvbmF0aW9uIGJ1dHRvbiBiZWxvdy4KKzxmb3JtIGFjdGlvbj0iaHR0cHM6Ly93d3cucGF5cGFsLmNvbS9jZ2ktYmluL3dlYnNjciIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9Il90b3AiPgorPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iY21kIiB2YWx1ZT0iX3MteGNsaWNrIj4KKzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Imhvc3RlZF9idXR0b25faWQiIHZhbHVlPSJWM1g5R1ZXNUdYNkRBIj4KKzxpbnB1dCB0eXBlPSJpbWFnZSIgc3JjPSJodHRwczovL3d3dy5wYXlwYWxvYmplY3RzLmNvbS9lbl9VUy9HQi9pL2J0bi9idG5fZG9uYXRlQ0NfTEcuZ2lmIiBib3JkZXI9IjAiIG5hbWU9InN1Ym1pdCIgYWx0PSJQYXlQYWwg4oCTIFRoZSBzYWZlciwgZWFzaWVyIHdheSB0byBwYXkgb25saW5lLiI+Cis8aW1nIGFsdD0iIiBib3JkZXI9IjAiIHNyYz0iaHR0cHM6Ly93d3cucGF5cGFsb2JqZWN0cy5jb20vZW5fR0IvaS9zY3IvcGl4ZWwuZ2lmIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIj4KKzwvZm9ybT4KKworCis8L0JPRFk+CisKZGlmZiAtLWdpdCBhL2xvZ28vUkVBRE1FIGIvbG9nby9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVhODI1MAotLS0gL2Rldi9udWxsCisrKyBiL2xvZ28vUkVBRE1FCkBAIC0wLDAgKzEsMTIgQEAKK0Ruc21hc3EgbG9nbywgY29udHJpYnV0ZWQgYnkgSnVzdGluIENsaWZ0LgorCitUaGUgc291cmNlIGZvcm1hdCBpcyBJbmtzY2FwZSBTVkcgdmVjdG9yIGZvcm1hdCwgd2hpY2ggaXMgc2NhbGFibGUgYW5kCitlYXN5IHRvIGV4cG9ydCB0byBvdGhlciBmb3JtYXRzLiBGb3IgY29udmVuaWVuY2UgSSd2ZSBpbmNsdWRlZCBhIDU2eDMxCitwbmcgZXhwb3J0IGFuZCBhIDE2eDE2IGljbyBzdWl0YWJsZSBmb3IgdXNlIGFzIGEgd2ViIGZhdmljb24uCisKK1NpbW9uIEtlbGxleSwgMjIvMTAvMjAxMAorCisKKworCisgCmRpZmYgLS1naXQgYS9sb2dvL2Zhdmljb24uaWNvIGIvbG9nby9mYXZpY29uLmljbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWJjOTM0Ci0tLSAvZGV2L251bGwKKysrIGIvbG9nby9mYXZpY29uLmljbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9sb2dvL2ljb24ucG5nIGIvbG9nby9pY29uLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjQ4NDYxCi0tLSAvZGV2L251bGwKKysrIGIvbG9nby9pY29uLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9sb2dvL2ljb24uc3ZnIGIvbG9nby9pY29uLnN2ZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmY3NTIxCi0tLSAvZGV2L251bGwKKysrIGIvbG9nby9pY29uLnN2ZwpAQCAtMCwwICsxLDE1NyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8c3ZnCisgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCisgICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgorICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgorICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKKyAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKKyAgIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgorICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgorICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCisgICB2ZXJzaW9uPSIxLjEiCisgICB4PSIwcHgiCisgICB5PSIwcHgiCisgICB3aWR0aD0iNTYiCisgICBoZWlnaHQ9IjMxIgorICAgdmlld0JveD0iMCAwIDU2IDMxIgorICAgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgNzIuODMzIDQ2LjY2NyIKKyAgIHhtbDpzcGFjZT0icHJlc2VydmUiCisgICBpZD0ic3ZnMiIKKyAgIGlua3NjYXBlOnZlcnNpb249IjAuNDcgcjIyNTgzIgorICAgc29kaXBvZGk6ZG9jbmFtZT0iZG5zbWFzcV9pY29uLnN2ZyIKKyAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iL3gvY2VudG9zX2hvbWUvamMvd29ya3NwYWNlL2dpdF9yZXBvcy9saWJ2aXJ0LW1lZGlhL2xpYnZpcnQtbWVkaWEvcG5nL2Ruc21hc3FfaWNvbi5wbmciCisgICBpbmtzY2FwZTpleHBvcnQteGRwaT0iOTAiCisgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iOTAiPjxtZXRhZGF0YQorICAgaWQ9Im1ldGFkYXRhMjciPjxyZGY6UkRGPjxjYzpXb3JrCisgICAgICAgcmRmOmFib3V0PSIiPjxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PjxkYzp0eXBlCisgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPjxkYzp0aXRsZT48L2RjOnRpdGxlPjwvY2M6V29yaz48L3JkZjpSREY+PC9tZXRhZGF0YT48ZGVmcworICAgaWQ9ImRlZnMyNSI+PGlua3NjYXBlOnBlcnNwZWN0aXZlCisgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIgorICAgaW5rc2NhcGU6dnBfeD0iMCA6IDIzLjMzMzUgOiAxIgorICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgorICAgaW5rc2NhcGU6dnBfej0iNzIuODMzIDogMjMuMzMzNSA6IDEiCisgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMzYuNDE2NSA6IDE1LjU1NTY2NyA6IDEiCisgICBpZD0icGVyc3BlY3RpdmU0ODU3IiAvPgorCTxmaWx0ZXIKKyAgIGlkPSJmaWx0ZXIzODAyIgorICAgaW5rc2NhcGU6bGFiZWw9ImZpbHRlcjEiCisgICBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiIC8+PGxpbmVhckdyYWRpZW50CisgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICB4bGluazpocmVmPSIjU1ZHSURfM18iCisgICBpZD0ibGluZWFyR3JhZGllbnQ0OTI5IgorICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCisgICB4MT0iMzAuNTY0NTAxIgorICAgeTE9Ii04LjgxNDQ5OTkiCisgICB4Mj0iMzIuOTM3IgorICAgeTI9IjMyLjcxNTU5OSIgLz4KKwkJPGxpbmVhckdyYWRpZW50CisgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICB4bGluazpocmVmPSIjU1ZHSURfM18iCisgICBpZD0ibGluZWFyR3JhZGllbnQ1Nzk4IgorICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCisgICB4MT0iMzAuNTY0NTAxIgorICAgeTE9Ii04LjgxNDQ5OTkiCisgICB4Mj0iMzIuOTM3IgorICAgeTI9IjMyLjcxNTU5OSIgLz48bGluZWFyR3JhZGllbnQKKyAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKKyAgIHhsaW5rOmhyZWY9IiNTVkdJRF8zXyIKKyAgIGlkPSJsaW5lYXJHcmFkaWVudDU4MTIiCisgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgIHgxPSIzMC41NjQ1MDEiCisgICB5MT0iLTguODE0NDk5OSIKKyAgIHgyPSIzMi45MzciCisgICB5Mj0iMzIuNzE1NTk5IiAvPjxmaWx0ZXIKKyAgIGlkPSJmaWx0ZXI2MjYyIgorICAgaW5rc2NhcGU6bGFiZWw9IkRyb3Agc2hhZG93IgorICAgd2lkdGg9IjEuNSIKKyAgIGhlaWdodD0iMS41IgorICAgeD0iLTAuMjUiCisgICB5PSItMC4yNSIKKyAgIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+PGZlR2F1c3NpYW5CbHVyCisgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjYyNjQiCisgICAgIGluPSJTb3VyY2VBbHBoYSIKKyAgICAgc3RkRGV2aWF0aW9uPSIyLjUwMDAwMCIKKyAgICAgcmVzdWx0PSJibHVyIiAvPjxmZUNvbG9yTWF0cml4CisgICAgIGlkPSJmZUNvbG9yTWF0cml4NjI2NiIKKyAgICAgcmVzdWx0PSJibHVyYWxwaGEiCisgICAgIHR5cGU9Im1hdHJpeCIKKyAgICAgdmFsdWVzPSIxIDAgMCAwIDAgMCAxIDAgMCAwIDAgMCAxIDAgMCAwIDAgMCAwLjUwMDAwMCAwICIgLz48ZmVPZmZzZXQKKyAgICAgaWQ9ImZlT2Zmc2V0NjI2OCIKKyAgICAgaW49ImJsdXJhbHBoYSIKKyAgICAgZHg9IjIuNzAwMDAwIgorICAgICBkeT0iMi42MDAwMDAiCisgICAgIHJlc3VsdD0ib2Zmc2V0Qmx1ciIgLz48ZmVNZXJnZQorICAgICBpZD0iZmVNZXJnZTYyNzAiPjxmZU1lcmdlTm9kZQorICAgICAgIGlkPSJmZU1lcmdlTm9kZTYyNzIiCisgICAgICAgaW49Im9mZnNldEJsdXIiIC8+PGZlTWVyZ2VOb2RlCisgICAgICAgaWQ9ImZlTWVyZ2VOb2RlNjI3NCIKKyAgICAgICBpbj0iU291cmNlR3JhcGhpYyIgLz48L2ZlTWVyZ2U+PC9maWx0ZXI+PC9kZWZzPjxzb2RpcG9kaTpuYW1lZHZpZXcKKyAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKKyAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgorICAgYm9yZGVyb3BhY2l0eT0iMSIKKyAgIG9iamVjdHRvbGVyYW5jZT0iMTAiCisgICBncmlkdG9sZXJhbmNlPSIxMCIKKyAgIGd1aWRldG9sZXJhbmNlPSIxMCIKKyAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIgorICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKKyAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTU2OCIKKyAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwNzYiCisgICBpZD0ibmFtZWR2aWV3MjMiCisgICBzaG93Z3JpZD0iZmFsc2UiCisgICBpbmtzY2FwZTp6b29tPSI4IgorICAgaW5rc2NhcGU6Y3g9IjMxLjk2Njc2OCIKKyAgIGlua3NjYXBlOmN5PSIyMS4yMTE4NjkiCisgICBpbmtzY2FwZTp3aW5kb3cteD0iNTY3IgorICAgaW5rc2NhcGU6d2luZG93LXk9IjMyOCIKKyAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjAiCisgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCisgICBpbmtzY2FwZTpzaG93cGFnZXNoYWRvdz0iZmFsc2UiCisgICBzaG93Ym9yZGVyPSJ0cnVlIiAvPgorPGcKKyAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCisgICBpZD0ibGF5ZXIxIgorICAgaW5rc2NhcGU6bGFiZWw9ImRuc21hc3EiCisgICBzdHlsZT0iZGlzcGxheTppbmxpbmUiCisgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1LjI4MzgwNTcsLTE1LjU0NTM3MSkiPjxnCisgICAgIGlkPSJnMzc5MCIKKyAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC44MTgzODMyLDAsMCwwLjgxODM4MzIsNjUuMzA0ODk3LDkuODc0NzY3OCkiCisgICAgIHN0eWxlPSJmaWx0ZXI6dXJsKCNmaWx0ZXI2MjYyKSIKKyAgICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjkwIgorICAgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iOTAiPjxnCisgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTkxLjAxODQ2MiwxLjA2ODcwOTkpIgorICAgICAgIGlkPSJnOSI+CisJCQk8cGF0aAorICAgc3R5bGU9ImZpbGw6IzY3MDBhZCIKKyAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCisgICBpZD0icGF0aDExIgorICAgZD0iTSA1NC45OTcsMTIuMTUxIEMgNTAuMDgzLDkuMTMyIDQzLjI5LDcuMjY2IDM1Ljc5MSw3LjI2NiBjIC03LjUsMCAtMTQuMjksMS44NjYgLTE5LjIwNCw0Ljg4NSAtNC45MTUsMy4wMTYgLTcuOTU2LDcuMTg0IC03Ljk1NiwxMS43ODkgMCw0LjYwNCAzLjA0MSw4Ljc3MiA3Ljk1NiwxMS43ODggNC45MTQsMy4wMiAxMS43MDQsLTQuMjcxIDE5LjIwNCwtNC4yNzEgNy40OTksMCAxNC4yOTIsNy4yOTEgMTkuMjA2LDQuMjcxIDQuOTE0LC0zLjAxNiA3Ljk1NSwtNy4xODUgNy45NTUsLTExLjc4OCAwLC00LjYwNiAtMy4wNDEsLTguNzczIC03Ljk1NSwtMTEuNzg5IHogTSAyNC45OTYsMjQuMzE4IGMgLTIuNjk4LDAgLTQuODg1LC0wLjkyMiAtNC44ODUsLTIuMDYxIDAsLTEuMTQgMi4xODcsLTIuMDYzIDQuODg1LC0yLjA2MyAyLjY5NywwIDQuODg1LDAuOTI0IDQuODg1LDIuMDYzIDAsMS4xMzkgLTIuMTg4LDIuMDYxIC00Ljg4NSwyLjA2MSB6IG0gMjEuNTAxLDAuMTkxIGMgLTIuNjg2LDAgLTQuODYxLC0wLjg1NiAtNC44NjEsLTEuOTEyIDAsLTEuMDU0IDIuMTc2LC0xLjkxMSA0Ljg2MSwtMS45MTEgMi42ODUsMCA0Ljg2MywwLjg1NyA0Ljg2MywxLjkxMSAwLDEuMDU2IC0yLjE3OCwxLjkxMiAtNC44NjMsMS45MTIgeiIgLz4KKwkJCTxwYXRoCisgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZmZiNjE2O3N0cm9rZS13aWR0aDoxLjg1MzUzMjU1IgorICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKKyAgIGlkPSJwYXRoMTMiCisgICBkPSJNIDU0Ljk5NywxMi4xNTEgQyA1MC4wODMsOS4xMzIgNDMuMjksNy4yNjYgMzUuNzkxLDcuMjY2IGMgLTcuNSwwIC0xNC4yOSwxLjg2NiAtMTkuMjA0LDQuODg1IC00LjkxNSwzLjAxNiAtNy45NTYsNy4xODQgLTcuOTU2LDExLjc4OSAwLDQuNjA0IDMuMDQxLDguNzcyIDcuOTU2LDExLjc4OCA0LjkxNCwzLjAyIDExLjcwNCwtNC4yNzEgMTkuMjA0LC00LjI3MSA3LjQ5OSwwIDE0LjI5Miw3LjI5MSAxOS4yMDYsNC4yNzEgNC45MTQsLTMuMDE2IDcuOTU1LC03LjE4NSA3Ljk1NSwtMTEuNzg4IDAsLTQuNjA2IC0zLjA0MSwtOC43NzMgLTcuOTU1LC0xMS43ODkgeiBNIDI0Ljk5NiwyNC4zMTggYyAtMi42OTgsMCAtNC44ODUsLTAuOTIyIC00Ljg4NSwtMi4wNjEgMCwtMS4xNCAyLjE4NywtMi4wNjMgNC44ODUsLTIuMDYzIDIuNjk3LDAgNC44ODUsMC45MjQgNC44ODUsMi4wNjMgMCwxLjEzOSAtMi4xODgsMi4wNjEgLTQuODg1LDIuMDYxIHogbSAyMS41MDEsMC4xOTEgYyAtMi42ODYsMCAtNC44NjEsLTAuODU2IC00Ljg2MSwtMS45MTIgMCwtMS4wNTQgMi4xNzYsLTEuOTExIDQuODYxLC0xLjkxMSAyLjY4NSwwIDQuODYzLDAuODU3IDQuODYzLDEuOTExIDAsMS4wNTYgLTIuMTc4LDEuOTEyIC00Ljg2MywxLjkxMiB6IiAvPgorCQk8L2c+PGcKKyAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtOTEuMDE4NDYyLDEuMDY4NzA5OSkiCisgICAgICAgaWQ9IkxheWVyXzIiPgorCTxsaW5lYXJHcmFkaWVudAorICAgeTI9IjMyLjcxNTU5OSIKKyAgIHgyPSIzMi45MzciCisgICB5MT0iLTguODE0NDk5OSIKKyAgIHgxPSIzMC41NjQ1MDEiCisgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKKyAgIGlkPSJTVkdJRF8zXyI+CisJCTxzdG9wCisgICBpZD0ic3RvcDE3IgorICAgc3R5bGU9InN0b3AtY29sb3I6I0ZGRkZGRjtzdG9wLW9wYWNpdHk6MC43MyIKKyAgIG9mZnNldD0iMCIgLz4KKwkJPHN0b3AKKyAgIGlkPSJzdG9wMTkiCisgICBzdHlsZT0ic3RvcC1jb2xvcjojRkZGRkZGO3N0b3Atb3BhY2l0eTowIgorICAgb2Zmc2V0PSIxIiAvPgorCTwvbGluZWFyR3JhZGllbnQ+CisJPHBhdGgKKyAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCisgICBzdHlsZT0iZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NTgxMikiCisgICBpZD0icGF0aDIxIgorICAgZD0ibSA1NC4xLDE1LjM2MSBjIC0wLjkyNCwxLjA3OCAtMi43ODIsMS4yNjUgLTMuODU3LDEuMDYgQyAzOCwxNC4wODMgMjIuNzUsMTIuNzUgMTYuMDI3LDIzLjAzMSAxNC44NTgsMjQuODE5IDExLjk5MiwyNS4zOSAxMC4yOTMsMjMuODg3IDguNjMxLDIyLjQxNyAxMy4xMDUsMTUuODA0IDE3LjY0NiwxMy4wMzMgMjIuMTk0LDEwLjI1MiAyOC40NzQsOC41MyAzNS40MSw4LjUzIGMgNi45MzYsMCAxMy4yMTUsMS43MjIgMTcuNzU2LDQuNTAyIDAuNzMxLDAuNDQyIDEuNjI3LDEuNTIgMC45MzQsMi4zMjkgeiIgLz4KKzwvZz48L2c+PC9nPjwvc3ZnPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21hbi9kbnNtYXNxLjggYi9tYW4vZG5zbWFzcS44Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjEwNDZhMmUKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vZG5zbWFzcS44CkBAIC0wLDAgKzEsMjM4MiBAQAorLlRIIEROU01BU1EgOAorLlNIIE5BTUUKK2Ruc21hc3EgXC0gQSBsaWdodHdlaWdodCBESENQIGFuZCBjYWNoaW5nIEROUyBzZXJ2ZXIuCisuU0ggU1lOT1BTSVMKKy5CIGRuc21hc3EKKy5JIFtPUFRJT05dLi4uCisuU0ggIkRFU0NSSVBUSU9OIgorLkJSIGRuc21hc3EKK2lzIGEgbGlnaHR3ZWlnaHQgRE5TLCBURlRQLCBQWEUsIHJvdXRlciBhZHZlcnRpc2VtZW50IGFuZCBESENQIHNlcnZlci4gSXQgaXMgaW50ZW5kZWQgdG8gcHJvdmlkZSAKK2NvdXBsZWQgRE5TIGFuZCBESENQIHNlcnZpY2UgdG8gYSBMQU4uCisuUFAKK0Ruc21hc3EgYWNjZXB0cyBETlMgcXVlcmllcyBhbmQgZWl0aGVyIGFuc3dlcnMgdGhlbSBmcm9tIGEgc21hbGwsIGxvY2FsLAorY2FjaGUgb3IgZm9yd2FyZHMgdGhlbSB0byBhIHJlYWwsIHJlY3Vyc2l2ZSwgRE5TIHNlcnZlci4gSXQgbG9hZHMgdGhlCitjb250ZW50cyBvZiAvZXRjL2hvc3RzIHNvIHRoYXQgbG9jYWwgaG9zdG5hbWVzCit3aGljaCBkbyBub3QgYXBwZWFyIGluIHRoZSBnbG9iYWwgRE5TIGNhbiBiZSByZXNvbHZlZCBhbmQgYWxzbyBhbnN3ZXJzCitETlMgcXVlcmllcyBmb3IgREhDUCBjb25maWd1cmVkIGhvc3RzLiBJdCBjYW4gYWxzbyBhY3QgYXMgdGhlCithdXRob3JpdGF0aXZlIEROUyBzZXJ2ZXIgZm9yIG9uZSBvciBtb3JlIGRvbWFpbnMsIGFsbG93aW5nIGxvY2FsIG5hbWVzCit0byBhcHBlYXIgaW4gdGhlIGdsb2JhbCBETlMuIEl0IGNhbiBiZSBjb25maWd1cmVkIHRvIGRvIEROU1NFQwordmFsaWRhdGlvbi4KKy5QUAorVGhlIGRuc21hc3EgREhDUCBzZXJ2ZXIgc3VwcG9ydHMgc3RhdGljIGFkZHJlc3MgYXNzaWdubWVudHMgYW5kIG11bHRpcGxlCituZXR3b3Jrcy4gSXQgYXV0b21hdGljYWxseQorc2VuZHMgYSBzZW5zaWJsZSBkZWZhdWx0IHNldCBvZiBESENQIG9wdGlvbnMsIGFuZCBjYW4gYmUgY29uZmlndXJlZCB0bworc2VuZCBhbnkgZGVzaXJlZCBzZXQgb2YgREhDUCBvcHRpb25zLCBpbmNsdWRpbmcgdmVuZG9yLWVuY2Fwc3VsYXRlZAorb3B0aW9ucy4gSXQgaW5jbHVkZXMgYSBzZWN1cmUsIHJlYWQtb25seSwKK1RGVFAgc2VydmVyIHRvIGFsbG93IG5ldC9QWEUgYm9vdCBvZiBESENQIGhvc3RzIGFuZCBhbHNvIHN1cHBvcnRzIEJPT1RQLiBUaGUgUFhFIHN1cHBvcnQgaXMgZnVsbCBmZWF0dXJlZCwgYW5kIGluY2x1ZGVzIGEgcHJveHkgbW9kZSB3aGljaCBzdXBwbGllcyBQWEUgaW5mb3JtYXRpb24gdG8gY2xpZW50cyB3aGlsc3QgREhDUCBhZGRyZXNzIGFsbG9jYXRpb24gaXMgZG9uZSBieSBhbm90aGVyIHNlcnZlci4KKy5QUAorVGhlIGRuc21hc3EgREhDUHY2IHNlcnZlciBwcm92aWRlcyB0aGUgc2FtZSBzZXQgb2YgZmVhdHVyZXMgYXMgdGhlCitESENQdjQgc2VydmVyLCBhbmQgaW4gYWRkaXRpb24sIGl0IGluY2x1ZGVzIHJvdXRlciBhZHZlcnRpc2VtZW50cyBhbmQKK2EgbmVhdCBmZWF0dXJlIHdoaWNoIGFsbG93cyBuYW1laW5nIGZvciBjbGllbnRzIHdoaWNoIHVzZSBESENQdjQgYW5kCitzdGF0ZWxlc3MgYXV0b2NvbmZpZ3VyYXRpb24gb25seSBmb3IgSVB2NiBjb25maWd1cmF0aW9uLiBUaGVyZSBpcyBzdXBwb3J0IGZvciBkb2luZyBhZGRyZXNzIGFsbG9jYXRpb24gKGJvdGggREhDUHY2IGFuZCBSQSkgZnJvbSBzdWJuZXRzIHdoaWNoIGFyZSBkeW5hbWljYWxseSBkZWxlZ2F0ZWQgdmlhIERIQ1B2NiBwcmVmaXggZGVsZWdhdGlvbi4KKy5QUAorRG5zbWFzcSBpcyBjb2RlZCB3aXRoIHNtYWxsIGVtYmVkZGVkIHN5c3RlbXMgaW4gbWluZC4gSXQgYWltcyBmb3IgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIG1lbW9yeSBmb290cHJpbnQgY29tcGF0aWJsZSB3aXRoIHRoZSBzdXBwb3J0ZWQgZnVuY3Rpb25zLCAgYW5kIGFsbG93cyB1bm5lZWRlZCBmdW5jdGlvbnMgdG8gYmUgb21pdHRlZCBmcm9tIHRoZSBjb21waWxlZCBiaW5hcnkuICAKKy5TSCBPUFRJT05TCitOb3RlIHRoYXQgaW4gZ2VuZXJhbCBtaXNzaW5nIHBhcmFtZXRlcnMgYXJlIGFsbG93ZWQgYW5kIHN3aXRjaCBvZmYKK2Z1bmN0aW9ucywgZm9yIGluc3RhbmNlICItLXBpZC1maWxlIiBkaXNhYmxlcyB3cml0aW5nIGEgUElEIGZpbGUuIE9uCitCU0QsIHVubGVzcyB0aGUgR05VIGdldG9wdCBsaWJyYXJ5IGlzIGxpbmtlZCwgdGhlIGxvbmcgZm9ybSBvZiB0aGUKK29wdGlvbnMgZG9lcyBub3Qgd29yayBvbiB0aGUgY29tbWFuZCBsaW5lOyBpdCBpcyBzdGlsbCByZWNvZ25pc2VkIGluCit0aGUgY29uZmlndXJhdGlvbiBmaWxlLgorLlRQCisuQiAtLXRlc3QKK1JlYWQgYW5kIHN5bnRheCBjaGVjayBjb25maWd1cmF0aW9uIGZpbGUocykuIEV4aXQgd2l0aCBjb2RlIDAgaWYgYWxsCitpcyBPSywgb3IgYSBub24temVybyBjb2RlIG90aGVyd2lzZS4gRG8gbm90IHN0YXJ0IHVwIGRuc21hc3EuCisuVFAKKy5CIFwtdywgLS1oZWxwCitEaXNwbGF5IGFsbCBjb21tYW5kLWxpbmUgb3B0aW9ucy4gCisuQiAtLWhlbHAgZGhjcCAKK3dpbGwgZGlzcGxheSBrbm93biBESENQdjQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgCisuQiAtLWhlbHAgZGhjcDYgCit3aWxsIGRpc3BsYXkgREhDUHY2IG9wdGlvbnMuCisuVFAKKy5CIFwtaCwgLS1uby1ob3N0cworRG9uJ3QgcmVhZCB0aGUgaG9zdG5hbWVzIGluIC9ldGMvaG9zdHMuCisuVFAKKy5CIFwtSCwgLS1hZGRuLWhvc3RzPTxmaWxlPgorQWRkaXRpb25hbCBob3N0cyBmaWxlLiBSZWFkIHRoZSBzcGVjaWZpZWQgZmlsZSBhcyB3ZWxsIGFzIC9ldGMvaG9zdHMuIElmIC1oIGlzIGdpdmVuLCByZWFkCitvbmx5IHRoZSBzcGVjaWZpZWQgZmlsZS4gVGhpcyBvcHRpb24gbWF5IGJlIHJlcGVhdGVkIGZvciBtb3JlIHRoYW4gb25lCithZGRpdGlvbmFsIGhvc3RzIGZpbGUuIElmIGEgZGlyZWN0b3J5IGlzIGdpdmVuLCB0aGVuIHJlYWQgYWxsIHRoZSBmaWxlcyBjb250YWluZWQgaW4gdGhhdCBkaXJlY3RvcnkuIAorLlRQCisuQiAtLWhvc3RzZGlyPTxwYXRoPgorUmVhZCBhbGwgdGhlIGhvc3RzIGZpbGVzIGNvbnRhaW5lZCBpbiB0aGUgZGlyZWN0b3J5LiBOZXcgb3IgY2hhbmdlZCBmaWxlcworYXJlIHJlYWQgYXV0b21hdGljYWxseS4gU2VlIC0tZGhjcC1ob3N0c2RpciBmb3IgZGV0YWlscy4KKy5UUAorLkIgXC1FLCAtLWV4cGFuZC1ob3N0cworQWRkIHRoZSBkb21haW4gdG8gc2ltcGxlIG5hbWVzICh3aXRob3V0IGEgcGVyaW9kKSBpbiAvZXRjL2hvc3RzCitpbiB0aGUgc2FtZSB3YXkgYXMgZm9yIERIQ1AtZGVyaXZlZCBuYW1lcy4gTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QKK2FwcGx5IHRvIGRvbWFpbiBuYW1lcyBpbiBjbmFtZXMsIFBUUiByZWNvcmRzLCBUWFQgcmVjb3JkcyBldGMuCisuVFAKKy5CIFwtVCwgLS1sb2NhbC10dGw9PHRpbWU+CitXaGVuIHJlcGx5aW5nIHdpdGggaW5mb3JtYXRpb24gZnJvbSAvZXRjL2hvc3RzIG9yIGNvbmZpZ3VyYXRpb24gb3IgdGhlIERIQ1AgbGVhc2VzCitmaWxlIGRuc21hc3EgYnkgZGVmYXVsdCBzZXRzIHRoZSB0aW1lLXRvLWxpdmUgZmllbGQgdG8gemVybywgbWVhbmluZwordGhhdCB0aGUgcmVxdWVzdGVyIHNob3VsZCBub3QgaXRzZWxmIGNhY2hlIHRoZSBpbmZvcm1hdGlvbi4gVGhpcyBpcwordGhlIGNvcnJlY3QgdGhpbmcgdG8gZG8gaW4gYWxtb3N0IGFsbCBzaXR1YXRpb25zLiBUaGlzIG9wdGlvbiBhbGxvd3MgYQordGltZS10by1saXZlIChpbiBzZWNvbmRzKSB0byBiZSBnaXZlbiBmb3IgdGhlc2UgcmVwbGllcy4gVGhpcyB3aWxsCityZWR1Y2UgdGhlIGxvYWQgb24gdGhlIHNlcnZlciBhdCB0aGUgZXhwZW5zZSBvZiBjbGllbnRzIHVzaW5nIHN0YWxlCitkYXRhIHVuZGVyIHNvbWUgY2lyY3Vtc3RhbmNlcy4KKy5UUAorLkIgLS1kaGNwLXR0bD08dGltZT4KK0FzIGZvciAtLWxvY2FsLXR0bCwgYnV0IGFmZmVjdHMgb25seSByZXBsaWVzIHdpdGggaW5mb3JtYXRpb24gZnJvbSBESENQIGxlYXNlcy4gSWYgYm90aCBhcmUgZ2l2ZW4sIC0tZGhjcC10dGwgYXBwbGllcyBmb3IgREhDUCBpbmZvcm1hdGlvbiwgYW5kIC0tbG9jYWwtdHRsIGZvciBvdGhlcnMuIFNldHRpbmcgdGhpcyB0byB6ZXJvIGVsaW1pbmF0ZXMgdGhlIGVmZmVjdCBvZiAtLWxvY2FsLXR0bCBmb3IgREhDUC4KKy5UUAorLkIgLS1uZWctdHRsPTx0aW1lPgorTmVnYXRpdmUgcmVwbGllcyBmcm9tIHVwc3RyZWFtIHNlcnZlcnMgbm9ybWFsbHkgY29udGFpbiB0aW1lLXRvLWxpdmUKK2luZm9ybWF0aW9uIGluIFNPQSByZWNvcmRzIHdoaWNoIGRuc21hc3EgdXNlcyBmb3IgY2FjaGluZy4gSWYgdGhlCityZXBsaWVzIGZyb20gdXBzdHJlYW0gc2VydmVycyBvbWl0IHRoaXMgaW5mb3JtYXRpb24sIGRuc21hc3EgZG9lcyBub3QKK2NhY2hlIHRoZSByZXBseS4gVGhpcyBvcHRpb24gZ2l2ZXMgYSBkZWZhdWx0IHZhbHVlIGZvciB0aW1lLXRvLWxpdmUKKyhpbiBzZWNvbmRzKSB3aGljaCBkbnNtYXNxIHVzZXMgdG8gY2FjaGUgbmVnYXRpdmUgcmVwbGllcyBldmVuIGluIAordGhlIGFic2VuY2Ugb2YgYW4gU09BIHJlY29yZC4gCisuVFAKKy5CIC0tbWF4LXR0bD08dGltZT4KK1NldCBhIG1heGltdW0gVFRMIHZhbHVlIHRoYXQgd2lsbCBiZSBoYW5kZWQgb3V0IHRvIGNsaWVudHMuIFRoZSBzcGVjaWZpZWQKK21heGltdW0gVFRMIHdpbGwgYmUgZ2l2ZW4gdG8gY2xpZW50cyBpbnN0ZWFkIG9mIHRoZSB0cnVlIFRUTCB2YWx1ZSBpZiBpdCBpcyAKK2xvd2VyLiBUaGUgdHJ1ZSBUVEwgdmFsdWUgaXMgaG93ZXZlciBrZXB0IGluIHRoZSBjYWNoZSB0byBhdm9pZCBmbG9vZGluZyAKK3RoZSB1cHN0cmVhbSBETlMgc2VydmVycy4KKy5UUAorLkIgLS1tYXgtY2FjaGUtdHRsPTx0aW1lPgorU2V0IGEgbWF4aW11bSBUVEwgdmFsdWUgZm9yIGVudHJpZXMgaW4gdGhlIGNhY2hlLgorLlRQCisuQiAtLW1pbi1jYWNoZS10dGw9PHRpbWU+CitFeHRlbmQgc2hvcnQgVFRMIHZhbHVlcyB0byB0aGUgdGltZSBnaXZlbiB3aGVuIGNhY2hpbmcgdGhlbS4gTm90ZSB0aGF0CithcnRpZmljaWFsbHkgZXh0ZW5kaW5nIFRUTCB2YWx1ZXMgaXMgaW4gZ2VuZXJhbCBhIGJhZCBpZGVhLCBkbyBub3QgZG8gaXQgCit1bmxlc3MgeW91IGhhdmUgYSBnb29kIHJlYXNvbiwgYW5kIHVuZGVyc3RhbmQgd2hhdCB5b3UgYXJlIGRvaW5nLiAKK0Ruc21hc3EgbGltaXRzIHRoZSB2YWx1ZSBvZiB0aGlzIG9wdGlvbiB0byBvbmUgaG91ciwgdW5sZXNzIHJlY29tcGlsZWQuCisuVFAKKy5CIC0tYXV0aC10dGw9PHRpbWU+CitTZXQgdGhlIFRUTCB2YWx1ZSByZXR1cm5lZCBpbiBhbnN3ZXJzIGZyb20gdGhlIGF1dGhvcml0YXRpdmUgc2VydmVyLgorLlRQCisuQiBcLWssIC0ta2VlcC1pbi1mb3JlZ3JvdW5kCitEbyBub3QgZ28gaW50byB0aGUgYmFja2dyb3VuZCBhdCBzdGFydHVwIGJ1dCBvdGhlcndpc2UgcnVuIGFzCitub3JtYWwuIFRoaXMgaXMgaW50ZW5kZWQgZm9yIHVzZSB3aGVuIGRuc21hc3EgaXMgcnVuIHVuZGVyIGRhZW1vbnRvb2xzCitvciBsYXVuY2hkLgorLlRQCisuQiBcLWQsIC0tbm8tZGFlbW9uCitEZWJ1ZyBtb2RlOiBkb24ndCBmb3JrIHRvIHRoZSBiYWNrZ3JvdW5kLCBkb24ndCB3cml0ZSBhIHBpZCBmaWxlLAorZG9uJ3QgY2hhbmdlIHVzZXIgaWQsIGdlbmVyYXRlIGEgY29tcGxldGUgY2FjaGUgZHVtcCBvbiByZWNlaXB0IG9uCitTSUdVU1IxLCBsb2cgdG8gc3RkZXJyIGFzIHdlbGwgYXMgc3lzbG9nLCBkb24ndCBmb3JrIG5ldyBwcm9jZXNzZXMKK3RvIGhhbmRsZSBUQ1AgcXVlcmllcy4gTm90ZSB0aGF0IHRoaXMgb3B0aW9uIGlzIGZvciB1c2UgaW4gZGVidWdnaW5nCitvbmx5LCB0byBzdG9wIGRuc21hc3EgZGFlbW9uaXNpbmcgaW4gcHJvZHVjdGlvbiwgdXNlIAorLkIgLWsuCisuVFAKKy5CIFwtcSwgLS1sb2ctcXVlcmllcworTG9nIHRoZSByZXN1bHRzIG9mIEROUyBxdWVyaWVzIGhhbmRsZWQgYnkgZG5zbWFzcS4gRW5hYmxlIGEgZnVsbCBjYWNoZSBkdW1wIG9uIHJlY2VpcHQgb2YgU0lHVVNSMS4gSWYgdGhlIGFyZ3VtZW50ICJleHRyYSIgaXMgc3VwcGxpZWQsIGllCisuQiAtLWxvZy1xdWVyaWVzPWV4dHJhCit0aGVuIHRoZSBsb2cgaGFzIGV4dHJhIGluZm9ybWF0aW9uIGF0IHRoZSBzdGFydCBvZiBlYWNoIGxpbmUuCitUaGlzIGNvbnNpc3RzIG9mIGEgc2VyaWFsIG51bWJlciB3aGljaCB0aWVzIHRvZ2V0aGVyIHRoZSBsb2cgbGluZXMgYXNzb2NpYXRlZCB3aXRoIGFuIGluZGl2aWR1YWwgcXVlcnksIGFuZCB0aGUgSVAgYWRkcmVzcyBvZiB0aGUgcmVxdWVzdG9yLgorLlRQCisuQiBcLTgsIC0tbG9nLWZhY2lsaXR5PTxmYWNpbGl0eT4KK1NldCB0aGUgZmFjaWxpdHkgdG8gd2hpY2ggZG5zbWFzcSB3aWxsIHNlbmQgc3lzbG9nIGVudHJpZXMsIHRoaXMKK2RlZmF1bHRzIHRvIERBRU1PTiwgYW5kIHRvIExPQ0FMMCB3aGVuIGRlYnVnIG1vZGUgaXMgaW4gb3BlcmF0aW9uLiBJZgordGhlIGZhY2lsaXR5IGdpdmVuIGNvbnRhaW5zIGF0IGxlYXN0IG9uZSAnLycgY2hhcmFjdGVyLCBpdCBpcyB0YWtlbiB0bworYmUgYSBmaWxlbmFtZSwgYW5kIGRuc21hc3EgbG9ncyB0byB0aGUgZ2l2ZW4gZmlsZSwgaW5zdGVhZCBvZgorc3lzbG9nLiBJZiB0aGUgZmFjaWxpdHkgaXMgJy0nIHRoZW4gZG5zbWFzcSBsb2dzIHRvIHN0ZGVyci4KKyhFcnJvcnMgd2hpbHN0IHJlYWRpbmcgY29uZmlndXJhdGlvbiB3aWxsIHN0aWxsIGdvIHRvIHN5c2xvZywKK2J1dCBhbGwgb3V0cHV0IGZyb20gYSBzdWNjZXNzZnVsIHN0YXJ0dXAsIGFuZCBhbGwgb3V0cHV0IHdoaWxzdAorcnVubmluZywgd2lsbCBnbyBleGNsdXNpdmVseSB0byB0aGUgZmlsZS4pIFdoZW4gbG9nZ2luZyB0byBhIGZpbGUsCitkbnNtYXNxIHdpbGwgY2xvc2UgYW5kIHJlb3BlbiB0aGUgZmlsZSB3aGVuIGl0IHJlY2VpdmVzIFNJR1VTUjIuIFRoaXMgCithbGxvd3MgdGhlIGxvZyBmaWxlIHRvIGJlIHJvdGF0ZWQgd2l0aG91dCBzdG9wcGluZyBkbnNtYXNxLgorLlRQCisuQiAtLWxvZy1hc3luY1s9PGxpbmVzPl0KK0VuYWJsZSBhc3luY2hyb25vdXMgbG9nZ2luZyBhbmQgb3B0aW9uYWxseSBzZXQgdGhlIGxpbWl0IG9uIHRoZQorbnVtYmVyIG9mIGxpbmVzCit3aGljaCB3aWxsIGJlIHF1ZXVlZCBieSBkbnNtYXNxIHdoZW4gd3JpdGluZyB0byB0aGUgc3lzbG9nIGlzIHNsb3cuIAorRG5zbWFzcSBjYW4gbG9nIGFzeW5jaHJvbm91c2x5OiB0aGlzCithbGxvd3MgaXQgdG8gY29udGludWUgZnVuY3Rpb25pbmcgd2l0aG91dCBiZWluZyBibG9ja2VkIGJ5IHN5c2xvZywgYW5kCithbGxvd3Mgc3lzbG9nIHRvIHVzZSBkbnNtYXNxIGZvciBETlMgcXVlcmllcyB3aXRob3V0IHJpc2tpbmcgZGVhZGxvY2suCitJZiB0aGUgcXVldWUgb2YgbG9nLWxpbmVzIGJlY29tZXMgZnVsbCwgZG5zbWFzcSB3aWxsIGxvZyB0aGUKK292ZXJmbG93LCBhbmQgdGhlIG51bWJlciBvZiBtZXNzYWdlcyAgbG9zdC4gVGhlIGRlZmF1bHQgcXVldWUgbGVuZ3RoIGlzCis1LCBhIHNhbmUgdmFsdWUgd291bGQgYmUgNS0yNSwgYW5kIGEgbWF4aW11bSBsaW1pdCBvZiAxMDAgaXMgaW1wb3NlZC4KKy5UUAorLkIgXC14LCAtLXBpZC1maWxlPTxwYXRoPgorU3BlY2lmeSBhbiBhbHRlcm5hdGUgcGF0aCBmb3IgZG5zbWFzcSB0byByZWNvcmQgaXRzIHByb2Nlc3MtaWQgaW4uIE5vcm1hbGx5IC92YXIvcnVuL2Ruc21hc3EucGlkLgorLlRQCisuQiBcLXUsIC0tdXNlcj08dXNlcm5hbWU+CitTcGVjaWZ5IHRoZSB1c2VyaWQgdG8gd2hpY2ggZG5zbWFzcSB3aWxsIGNoYW5nZSBhZnRlciBzdGFydHVwLiBEbnNtYXNxIG11c3Qgbm9ybWFsbHkgYmUgc3RhcnRlZCBhcyByb290LCBidXQgaXQgd2lsbCBkcm9wIHJvb3QgCitwcml2aWxlZ2VzIGFmdGVyIHN0YXJ0dXAgYnkgY2hhbmdpbmcgaWQgdG8gYW5vdGhlciB1c2VyLiBOb3JtYWxseSB0aGlzIHVzZXIgaXMgIm5vYm9keSIgYnV0IHRoYXQgCitjYW4gYmUgb3Zlci1yaWRkZW4gd2l0aCB0aGlzIHN3aXRjaC4KKy5UUAorLkIgXC1nLCAtLWdyb3VwPTxncm91cG5hbWU+IAorU3BlY2lmeSB0aGUgZ3JvdXAgd2hpY2ggZG5zbWFzcSB3aWxsIHJ1bgorYXMuIFRoZSBkZWZhdWx0cyB0byAiZGlwIiwgaWYgYXZhaWxhYmxlLCB0byBmYWNpbGl0YXRlIGFjY2VzcyB0bworL2V0Yy9wcHAvcmVzb2x2LmNvbmYgd2hpY2ggaXMgbm90IG5vcm1hbGx5IHdvcmxkIHJlYWRhYmxlLgorLlRQCisuQiBcLXYsIC0tdmVyc2lvbgorUHJpbnQgdGhlIHZlcnNpb24gbnVtYmVyLgorLlRQCisuQiBcLXAsIC0tcG9ydD08cG9ydD4KK0xpc3RlbiBvbiA8cG9ydD4gaW5zdGVhZCBvZiB0aGUgc3RhbmRhcmQgRE5TIHBvcnQgKDUzKS4gU2V0dGluZyB0aGlzCit0byB6ZXJvIGNvbXBsZXRlbHkgZGlzYWJsZXMgRE5TIGZ1bmN0aW9uLCBsZWF2aW5nIG9ubHkgREhDUCBhbmQvb3IgVEZUUC4KKy5UUAorLkIgXC1QLCAtLWVkbnMtcGFja2V0LW1heD08c2l6ZT4KK1NwZWNpZnkgdGhlIGxhcmdlc3QgRUROUy4wIFVEUCBwYWNrZXQgd2hpY2ggaXMgc3VwcG9ydGVkIGJ5IHRoZSBETlMKK2ZvcndhcmRlci4gRGVmYXVsdHMgdG8gNDA5Niwgd2hpY2ggaXMgdGhlIFJGQzU2MjUtcmVjb21tZW5kZWQgc2l6ZS4KKy5UUAorLkIgXC1RLCAtLXF1ZXJ5LXBvcnQ9PHF1ZXJ5X3BvcnQ+CitTZW5kIG91dGJvdW5kIEROUyBxdWVyaWVzIGZyb20sIGFuZCBsaXN0ZW4gZm9yIHRoZWlyIHJlcGxpZXMgb24sIHRoZQorc3BlY2lmaWMgVURQIHBvcnQgPHF1ZXJ5X3BvcnQ+IGluc3RlYWQgb2YgdXNpbmcgcmFuZG9tIHBvcnRzLiBOT1RFCit0aGF0IHVzaW5nIHRoaXMgb3B0aW9uIHdpbGwgbWFrZSBkbnNtYXNxIGxlc3Mgc2VjdXJlIGFnYWluc3QgRE5TCitzcG9vZmluZyBhdHRhY2tzIGJ1dCBpdCBtYXkgYmUgZmFzdGVyIGFuZCB1c2UgbGVzcyByZXNvdXJjZXMuICBTZXR0aW5nIHRoaXMgb3B0aW9uCit0byB6ZXJvIG1ha2VzIGRuc21hc3EgdXNlIGEgc2luZ2xlIHBvcnQgYWxsb2NhdGVkIHRvIGl0IGJ5IHRoZQorT1M6IHRoaXMgd2FzIHRoZSBkZWZhdWx0IGJlaGF2aW91ciBpbiB2ZXJzaW9ucyBwcmlvciB0byAyLjQzLiAKKy5UUAorLkIgLS1taW4tcG9ydD08cG9ydD4KK0RvIG5vdCB1c2UgcG9ydHMgbGVzcyB0aGFuIHRoYXQgZ2l2ZW4gYXMgc291cmNlIGZvciBvdXRib3VuZCBETlMKK3F1ZXJpZXMuIERuc21hc3EgcGlja3MgcmFuZG9tIHBvcnRzIGFzIHNvdXJjZSBmb3Igb3V0Ym91bmQgcXVlcmllczoKK3doZW4gdGhpcyBvcHRpb24gaXMgZ2l2ZW4sIHRoZSBwb3J0cyB1c2VkIHdpbGwgYWx3YXlzIHRvIGxhcmdlcgordGhhbiB0aGF0IHNwZWNpZmllZC4gVXNlZnVsIGZvciBzeXN0ZW1zIGJlaGluZCBmaXJld2FsbHMuIAorLlRQCisuQiAtLW1heC1wb3J0PTxwb3J0PgorVXNlIHBvcnRzIGxvd2VyIHRoYW4gdGhhdCBnaXZlbiBhcyBzb3VyY2UgZm9yIG91dGJvdW5kIEROUyBxdWVyaWVzLgorRG5zbWFzcSBwaWNrcyByYW5kb20gcG9ydHMgYXMgc291cmNlIGZvciBvdXRib3VuZCBxdWVyaWVzOgord2hlbiB0aGlzIG9wdGlvbiBpcyBnaXZlbiwgdGhlIHBvcnRzIHVzZWQgd2lsbCBhbHdheXMgYmUgbG93ZXIKK3RoYW4gdGhhdCBzcGVjaWZpZWQuIFVzZWZ1bCBmb3Igc3lzdGVtcyBiZWhpbmQgZmlyZXdhbGxzLgorLlRQCisKKy5CIFwtaSwgLS1pbnRlcmZhY2U9PGludGVyZmFjZSBuYW1lPgorTGlzdGVuIG9ubHkgb24gdGhlIHNwZWNpZmllZCBpbnRlcmZhY2UocykuIERuc21hc3EgYXV0b21hdGljYWxseSBhZGRzCit0aGUgbG9vcGJhY2sgKGxvY2FsKSBpbnRlcmZhY2UgdG8gdGhlIGxpc3Qgb2YgaW50ZXJmYWNlcyB0byB1c2Ugd2hlbgordGhlCisuQiBcLS1pbnRlcmZhY2UKK29wdGlvbiAgaXMgdXNlZC4gSWYgbm8KKy5CIFwtLWludGVyZmFjZQorb3IKKy5CIFwtLWxpc3Rlbi1hZGRyZXNzCitvcHRpb25zIGFyZSBnaXZlbiBkbnNtYXNxIGxpc3RlbnMgb24gYWxsIGF2YWlsYWJsZSBpbnRlcmZhY2VzIGV4Y2VwdCBhbnkKK2dpdmVuIGluCisuQiBcLS1leGNlcHQtaW50ZXJmYWNlCitvcHRpb25zLiBPbiBMaW51eCwgd2hlbgorLkIgXC0tYmluZC1pbnRlcmZhY2VzCitvcgorLkIgXC0tYmluZC1keW5hbWljCithcmUgaW4gZWZmZWN0LCBJUCBhbGlhcyBpbnRlcmZhY2UgbGFiZWxzIChlZyAiZXRoMTowIikgYXJlIGNoZWNrZWQsIHJhdGhlciB0aGFuCitpbnRlcmZhY2UgbmFtZXMuIEluIHRoZSBkZWdlbmVyYXRlIGNhc2Ugd2hlbiBhbiBpbnRlcmZhY2UgaGFzIG9uZSBhZGRyZXNzLCB0aGlzIGFtb3VudHMgdG8gdGhlIHNhbWUgdGhpbmcgYnV0IHdoZW4gYW4gaW50ZXJmYWNlIGhhcyBtdWx0aXBsZSBhZGRyZXNzZXMgaXQKK2FsbG93cyBjb250cm9sIG92ZXIgd2hpY2ggb2YgdGhvc2UgYWRkcmVzc2VzIGFyZSBhY2NlcHRlZC4KK1RoZSBzYW1lIGVmZmVjdCBpcyBhY2hpZXZhYmxlIGluIGRlZmF1bHQgbW9kZSBieSB1c2luZworLkIgXC0tbGlzdGVuLWFkZHJlc3MuCitBIHNpbXBsZSB3aWxkY2FyZCwgY29uc2lzdGluZyBvZiBhIHRyYWlsaW5nICcqJywKK2NhbiBiZSB1c2VkIGluCisuQiBcLS1pbnRlcmZhY2UgCithbmQKKy5CIFwtLWV4Y2VwdC1pbnRlcmZhY2UKK29wdGlvbnMuIAorLlRQCisuQiBcLUksIC0tZXhjZXB0LWludGVyZmFjZT08aW50ZXJmYWNlIG5hbWU+CitEbyBub3QgbGlzdGVuIG9uIHRoZSBzcGVjaWZpZWQgaW50ZXJmYWNlLiBOb3RlIHRoYXQgdGhlIG9yZGVyIG9mCisuQiBcLS1saXN0ZW4tYWRkcmVzcworLkIgLS1pbnRlcmZhY2UKK2FuZAorLkIgLS1leGNlcHQtaW50ZXJmYWNlCitvcHRpb25zIGRvZXMgbm90IG1hdHRlciBhbmQgdGhhdCAKKy5CIC0tZXhjZXB0LWludGVyZmFjZQorb3B0aW9ucyBhbHdheXMgb3ZlcnJpZGUgdGhlIG90aGVycy4gVGhlIGNvbW1lbnRzIGFib3V0IGludGVyZmFjZSBsYWJlbHMgZm9yCisuQiAtLWxpc3Rlbi1hZGRyZXNzCithcHBseSBoZXJlLgorLlRQCisuQiAtLWF1dGgtc2VydmVyPTxkb21haW4+LDxpbnRlcmZhY2U+fDxpcC1hZGRyZXNzPgorRW5hYmxlIEROUyBhdXRob3JpdGF0aXZlIG1vZGUgZm9yIHF1ZXJpZXMgYXJyaXZpbmcgYXQgYW4gaW50ZXJmYWNlIG9yIGFkZHJlc3MuIE5vdGUgdGhhdCB0aGUgaW50ZXJmYWNlIG9yIGFkZHJlc3MKK25lZWQgbm90IGJlIG1lbnRpb25lZCBpbiAKKy5CIC0taW50ZXJmYWNlCitvciAKKy5CIC0tbGlzdGVuLWFkZHJlc3MKK2NvbmZpZ3VyYXRpb24sIGluZGVlZAorLkIgLS1hdXRoLXNlcnZlcgord2lsbCBvdmVycmlkZSB0aGVzZSBhbmQgcHJvdmlkZSBhIGRpZmZlcmVudCBETlMgc2VydmljZSBvbiB0aGUKK3NwZWNpZmllZCBpbnRlcmZhY2UuIFRoZSA8ZG9tYWluPiBpcyB0aGUgImdsdWUgcmVjb3JkIi4gSXQgc2hvdWxkCityZXNvbHZlIGluIHRoZSBnbG9iYWwgRE5TIHRvIGEgQSBhbmQvb3IgQUFBQSByZWNvcmQgd2hpY2ggcG9pbnRzIHRvCit0aGUgYWRkcmVzcyBkbnNtYXNxIGlzIGxpc3RlbmluZyBvbi4gV2hlbiBhbiBpbnRlcmZhY2UgaXMgc3BlY2lmaWVkLAoraXQgbWF5IGJlIHF1YWxpZmllZCB3aXRoICIvNCIgb3IgIi82IiB0byBzcGVjaWZ5IG9ubHkgdGhlIElQdjQgb3IgSVB2NgorYWRkcmVzc2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW50ZXJmYWNlLgorLlRQCisuQiAtLWxvY2FsLXNlcnZpY2UKK0FjY2VwdCBETlMgcXVlcmllcyBvbmx5IGZyb20gaG9zdHMgd2hvc2UgYWRkcmVzcyBpcyBvbiBhIGxvY2FsIHN1Ym5ldCwKK2llIGEgc3VibmV0IGZvciB3aGljaCBhbiBpbnRlcmZhY2UgZXhpc3RzIG9uIHRoZSBzZXJ2ZXIuIFRoaXMgb3B0aW9uCitvbmx5IGhhcyBlZmZlY3QgaWYgdGhlcmUgYXJlIG5vIC0taW50ZXJmYWNlIC0tZXhjZXB0LWludGVyZmFjZSwKKy0tbGlzdGVuLWFkZHJlc3Mgb3IgLS1hdXRoLXNlcnZlciBvcHRpb25zLiBJdCBpcyBpbnRlbmRlZCB0byBiZSBzZXQgYXMKK2EgZGVmYXVsdCBvbiBpbnN0YWxsYXRpb24sIHRvIGFsbG93IHVuY29uZmlndXJlZCBpbnN0YWxsYXRpb25zIHRvIGJlCit1c2VmdWwgYnV0IGFsc28gc2FmZSBmcm9tIGJlaW5nIHVzZWQgZm9yIEROUyBhbXBsaWZpY2F0aW9uIGF0dGFja3MuCisuVFAgCisuQiBcLTIsIC0tbm8tZGhjcC1pbnRlcmZhY2U9PGludGVyZmFjZSBuYW1lPgorRG8gbm90IHByb3ZpZGUgREhDUCBvciBURlRQIG9uIHRoZSBzcGVjaWZpZWQgaW50ZXJmYWNlLCBidXQgZG8gcHJvdmlkZSBETlMgc2VydmljZS4KKy5UUAorLkIgXC1hLCAtLWxpc3Rlbi1hZGRyZXNzPTxpcGFkZHI+CitMaXN0ZW4gb24gdGhlIGdpdmVuIElQIGFkZHJlc3MoZXMpLiBCb3RoIAorLkIgXC0taW50ZXJmYWNlCithbmQKKy5CIFwtLWxpc3Rlbi1hZGRyZXNzCitvcHRpb25zIG1heSBiZSBnaXZlbiwgaW4gd2hpY2ggY2FzZSB0aGUgc2V0IG9mIGJvdGggaW50ZXJmYWNlcyBhbmQKK2FkZHJlc3NlcyBpcyB1c2VkLiBOb3RlIHRoYXQgaWYgbm8KKy5CIFwtLWludGVyZmFjZQorb3B0aW9uIGlzIGdpdmVuLCBidXQgCisuQiBcLS1saXN0ZW4tYWRkcmVzcworaXMsIGRuc21hc3Egd2lsbCBub3QgYXV0b21hdGljYWxseSBsaXN0ZW4gb24gdGhlIGxvb3BiYWNrCitpbnRlcmZhY2UuIFRvIGFjaGlldmUgdGhpcywgaXRzIElQIGFkZHJlc3MsIDEyNy4wLjAuMSwgbXVzdCBiZQorZXhwbGljaXRseSBnaXZlbiBhcyBhIAorLkIgXC0tbGlzdGVuLWFkZHJlc3MKK29wdGlvbi4KKy5UUAorLkIgXC16LCAtLWJpbmQtaW50ZXJmYWNlcworT24gc3lzdGVtcyB3aGljaCBzdXBwb3J0IGl0LCBkbnNtYXNxIGJpbmRzIHRoZSB3aWxkY2FyZCBhZGRyZXNzLAorZXZlbiB3aGVuIGl0IGlzIGxpc3RlbmluZyBvbiBvbmx5IHNvbWUgaW50ZXJmYWNlcy4gSXQgdGhlbiBkaXNjYXJkcworcmVxdWVzdHMgdGhhdCBpdCBzaG91bGRuJ3QgcmVwbHkgdG8uIFRoaXMgaGFzIHRoZSBhZHZhbnRhZ2Ugb2YgCit3b3JraW5nIGV2ZW4gd2hlbiBpbnRlcmZhY2VzIGNvbWUgYW5kIGdvIGFuZCBjaGFuZ2UgYWRkcmVzcy4gVGhpcworb3B0aW9uIGZvcmNlcyBkbnNtYXNxIHRvIHJlYWxseSBiaW5kIG9ubHkgdGhlIGludGVyZmFjZXMgaXQgaXMKK2xpc3RlbmluZyBvbi4gQWJvdXQgdGhlIG9ubHkgdGltZSB3aGVuIHRoaXMgaXMgdXNlZnVsIGlzIHdoZW4gCitydW5uaW5nIGFub3RoZXIgbmFtZXNlcnZlciAob3IgYW5vdGhlciBpbnN0YW5jZSBvZiBkbnNtYXNxKSBvbiB0aGUKK3NhbWUgbWFjaGluZS4gU2V0dGluZyB0aGlzIG9wdGlvbiBhbHNvIGVuYWJsZXMgbXVsdGlwbGUgaW5zdGFuY2VzIG9mCitkbnNtYXNxIHdoaWNoIHByb3ZpZGUgREhDUCBzZXJ2aWNlIHRvIHJ1biBpbiB0aGUgc2FtZSBtYWNoaW5lLgorLlRQCisuQiAtLWJpbmQtZHluYW1pYworRW5hYmxlIGEgbmV0d29yayBtb2RlIHdoaWNoIGlzIGEgaHlicmlkIGJldHdlZW4gCisuQiAtLWJpbmQtaW50ZXJmYWNlcworYW5kIHRoZSBkZWZhdWx0LiBEbnNtYXNxIGJpbmRzIHRoZSBhZGRyZXNzIG9mIGluZGl2aWR1YWwgaW50ZXJmYWNlcywKK2FsbG93aW5nIG11bHRpcGxlIGRuc21hc3EgaW5zdGFuY2VzLCBidXQgaWYgbmV3IGludGVyZmFjZXMgb3IKK2FkZHJlc3NlcyBhcHBlYXIsIGl0IGF1dG9tYXRpY2FsbHkgbGlzdGVucyBvbiB0aG9zZSAoc3ViamVjdCB0byBhbnkKK2FjY2Vzcy1jb250cm9sIGNvbmZpZ3VyYXRpb24pLiBUaGlzIG1ha2VzIGR5bmFtaWNhbGx5IGNyZWF0ZWQKK2ludGVyZmFjZXMgd29yayBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlIGRlZmF1bHQuIEltcGxlbWVudGluZyB0aGlzCitvcHRpb24gcmVxdWlyZXMgbm9uLXN0YW5kYXJkIG5ldHdvcmtpbmcgQVBJcyBhbmQgaXQgaXMgb25seSBhdmFpbGFibGUKK3VuZGVyIExpbnV4LiBPbiBvdGhlciBwbGF0Zm9ybXMgaXQgZmFsbHMtYmFjayB0byAtLWJpbmQtaW50ZXJmYWNlcyBtb2RlLgorLlRQCisuQiBcLXksIC0tbG9jYWxpc2UtcXVlcmllcworUmV0dXJuIGFuc3dlcnMgdG8gRE5TIHF1ZXJpZXMgZnJvbSAvZXRjL2hvc3RzIGFuZCAtLWludGVyZmFjZS1uYW1lIHdoaWNoIGRlcGVuZCBvbiB0aGUgaW50ZXJmYWNlIG92ZXIgd2hpY2ggdGhlIHF1ZXJ5IHdhcworcmVjZWl2ZWQuIElmIGEgbmFtZSBoYXMgbW9yZSB0aGFuIG9uZSBhZGRyZXNzIGFzc29jaWF0ZWQgd2l0aAoraXQsIGFuZCBhdCBsZWFzdCBvbmUgb2YgdGhvc2UgYWRkcmVzc2VzIGlzIG9uIHRoZSBzYW1lIHN1Ym5ldCBhcyB0aGUKK2ludGVyZmFjZSB0byB3aGljaCB0aGUgcXVlcnkgd2FzIHNlbnQsIHRoZW4gcmV0dXJuIG9ubHkgdGhlCithZGRyZXNzKGVzKSBvbiB0aGF0IHN1Ym5ldC4gVGhpcyBhbGxvd3MgZm9yIGEgc2VydmVyICB0byBoYXZlIG11bHRpcGxlCithZGRyZXNzZXMgaW4gL2V0Yy9ob3N0cyBjb3JyZXNwb25kaW5nIHRvIGVhY2ggb2YgaXRzIGludGVyZmFjZXMsIGFuZAoraG9zdHMgd2lsbCBnZXQgdGhlIGNvcnJlY3QgYWRkcmVzcyBiYXNlZCBvbiB3aGljaCBuZXR3b3JrIHRoZXkgYXJlCithdHRhY2hlZCB0by4gQ3VycmVudGx5IHRoaXMgZmFjaWxpdHkgaXMgbGltaXRlZCB0byBJUHY0LgorLlRQCisuQiBcLWIsIC0tYm9ndXMtcHJpdgorQm9ndXMgcHJpdmF0ZSByZXZlcnNlIGxvb2t1cHMuIEFsbCByZXZlcnNlIGxvb2t1cHMgZm9yIHByaXZhdGUgSVAgcmFuZ2VzIChpZSAxOTIuMTY4LngueCwgZXRjKQord2hpY2ggYXJlIG5vdCBmb3VuZCBpbiAvZXRjL2hvc3RzIG9yIHRoZSBESENQIGxlYXNlcyBmaWxlIGFyZSBhbnN3ZXJlZAord2l0aCAibm8gc3VjaCBkb21haW4iIHJhdGhlciB0aGFuIGJlaW5nIGZvcndhcmRlZCB1cHN0cmVhbS4gVGhlIAorc2V0IG9mIHByZWZpeGVzIGFmZmVjdGVkIGlzIHRoZSBsaXN0IGdpdmVuIGluIFJGQzYzMDMsIGZvciBJUHY0IGFuZCBJUHY2LgorLlRQCisuQiBcLVYsIC0tYWxpYXM9WzxvbGQtaXA+XXxbPHN0YXJ0LWlwPi08ZW5kLWlwPl0sPG5ldy1pcD5bLDxtYXNrPl0KK01vZGlmeSBJUHY0IGFkZHJlc3NlcyByZXR1cm5lZCBmcm9tIHVwc3RyZWFtIG5hbWVzZXJ2ZXJzOyBvbGQtaXAgaXMKK3JlcGxhY2VkIGJ5IG5ldy1pcC4gSWYgdGhlIG9wdGlvbmFsIG1hc2sgaXMgZ2l2ZW4gdGhlbiBhbnkgYWRkcmVzcword2hpY2ggbWF0Y2hlcyB0aGUgbWFza2VkIG9sZC1pcCB3aWxsIGJlIHJlLXdyaXR0ZW4uIFNvLCBmb3IgaW5zdGFuY2UKKy5CIC0tYWxpYXM9MS4yLjMuMCw2LjcuOC4wLDI1NS4yNTUuMjU1LjAgCit3aWxsIG1hcCAxLjIuMy41NiB0byA2LjcuOC41NiBhbmQgMS4yLjMuNjcgdG8gNi43LjguNjcuIFRoaXMgaXMgd2hhdAorQ2lzY28gUElYIHJvdXRlcnMgY2FsbCAiRE5TIGRvY3RvcmluZyIuIElmIHRoZSBvbGQgSVAgaXMgZ2l2ZW4gYXMKK3JhbmdlLCB0aGVuIG9ubHkgYWRkcmVzc2VzIGluIHRoZSByYW5nZSwgcmF0aGVyIHRoYW4gYSB3aG9sZSBzdWJuZXQsCithcmUgcmUtd3JpdHRlbi4gU28gCisuQiAtLWFsaWFzPTE5Mi4xNjguMC4xMC0xOTIuMTY4LjAuNDAsMTAuMC4wLjAsMjU1LjI1NS4yNTUuMAorbWFwcyAxOTIuMTY4LjAuMTAtPjE5Mi4xNjguMC40MCB0byAxMC4wLjAuMTAtPjEwLjAuMC40MAorLlRQIAorLkIgXC1CLCAtLWJvZ3VzLW54ZG9tYWluPTxpcGFkZHI+CitUcmFuc2Zvcm0gcmVwbGllcyB3aGljaCBjb250YWluIHRoZSBJUCBhZGRyZXNzIGdpdmVuIGludG8gIk5vIHN1Y2gKK2RvbWFpbiIgcmVwbGllcy4gVGhpcyBpcyBpbnRlbmRlZCB0byBjb3VudGVyYWN0IGEgZGV2aW91cyBtb3ZlIG1hZGUgYnkKK1ZlcmlzaWduIGluIFNlcHRlbWJlciAyMDAzIHdoZW4gdGhleSBzdGFydGVkIHJldHVybmluZyB0aGUgYWRkcmVzcyBvZgorYW4gYWR2ZXJ0aXNpbmcgd2ViIHBhZ2UgaW4gcmVzcG9uc2UgdG8gcXVlcmllcyBmb3IgdW5yZWdpc3RlcmVkIG5hbWVzLAoraW5zdGVhZCBvZiB0aGUgY29ycmVjdCBOWERPTUFJTiByZXNwb25zZS4gVGhpcyBvcHRpb24gdGVsbHMgZG5zbWFzcSB0bworZmFrZSB0aGUgY29ycmVjdCByZXNwb25zZSB3aGVuIGl0IHNlZXMgdGhpcyBiZWhhdmlvdXIuIEFzIGF0IFNlcHQgMjAwMwordGhlIElQIGFkZHJlc3MgYmVpbmcgcmV0dXJuZWQgYnkgVmVyaXNpZ24gaXMgNjQuOTQuMTEwLjExCisuVFAgCisuQiAtLWlnbm9yZS1hZGRyZXNzPTxpcGFkZHI+CitJZ25vcmUgcmVwbGllcyB0byBBLXJlY29yZCBxdWVyaWVzIHdoaWNoIGluY2x1ZGUgdGhlIHNwZWNpZmllZCBhZGRyZXNzLiAKK05vIGVycm9yIGlzIGdlbmVyYXRlZCwgZG5zbWFzcSBzaW1wbHkgY29udGludWVzIHRvIGxpc3RlbiBmb3IgYW5vdGhlciByZXBseS4gCitUaGlzIGlzIHVzZWZ1bCB0byBkZWZlYXQgYmxvY2tpbmcgc3RyYXRlZ2llcyB3aGljaCByZWx5IG9uIHF1aWNrbHkgc3VwcGx5aW5nIGEKK2ZvcmdlZCBhbnN3ZXIgdG8gYSBETlMgcmVxdWVzdCBmb3IgY2VydGFpbiBkb21haW4sIGJlZm9yZSB0aGUgY29ycmVjdCBhbnN3ZXIgY2FuIGFycml2ZS4KKy5UUAorLkIgXC1mLCAtLWZpbHRlcndpbjJrCitMYXRlciB2ZXJzaW9ucyBvZiB3aW5kb3dzIG1ha2UgcGVyaW9kaWMgRE5TIHJlcXVlc3RzIHdoaWNoIGRvbid0IGdldCBzZW5zaWJsZSBhbnN3ZXJzIGZyb20KK3RoZSBwdWJsaWMgRE5TIGFuZCBjYW4gY2F1c2UgcHJvYmxlbXMgYnkgdHJpZ2dlcmluZyBkaWFsLW9uLWRlbWFuZCBsaW5rcy4gVGhpcyBmbGFnIHR1cm5zIG9uIGFuIG9wdGlvbgordG8gZmlsdGVyIHN1Y2ggcmVxdWVzdHMuIFRoZSByZXF1ZXN0cyBibG9ja2VkIGFyZSBmb3IgcmVjb3JkcyBvZiB0eXBlcyBTT0EgYW5kIFNSViwgYW5kIHR5cGUgQU5ZIHdoZXJlIHRoZSAKK3JlcXVlc3RlZCBuYW1lIGhhcyB1bmRlcnNjb3JlcywgdG8gY2F0Y2ggTERBUCByZXF1ZXN0cy4KKy5UUAorLkIgXC1yLCAtLXJlc29sdi1maWxlPTxmaWxlPgorUmVhZCB0aGUgSVAgYWRkcmVzc2VzIG9mIHRoZSB1cHN0cmVhbSBuYW1lc2VydmVycyBmcm9tIDxmaWxlPiwgaW5zdGVhZCBvZgorL2V0Yy9yZXNvbHYuY29uZi4gRm9yIHRoZSBmb3JtYXQgb2YgdGhpcyBmaWxlIHNlZQorLkJSIHJlc29sdi5jb25mICg1KS4gCitUaGUgb25seSBsaW5lcyByZWxldmFudCB0byBkbnNtYXNxIGFyZSBuYW1lc2VydmVyIG9uZXMuIERuc21hc3EgY2FuCitiZSB0b2xkIHRvIHBvbGwgbW9yZSB0aGFuIG9uZSByZXNvbHYuY29uZiBmaWxlLCB0aGUgZmlyc3QgZmlsZSBuYW1lICBzcGVjaWZpZWQKK292ZXJyaWRlcyB0aGUgZGVmYXVsdCwgc3Vic2VxdWVudCBvbmVzIGFkZCB0byB0aGUgbGlzdC4gVGhpcyBpcyBvbmx5CithbGxvd2VkIHdoZW4gcG9sbGluZzsgdGhlIGZpbGUgd2l0aCB0aGUgY3VycmVudGx5IGxhdGVzdCBtb2RpZmljYXRpb24KK3RpbWUgaXMgdGhlIG9uZSB1c2VkLiAKKy5UUAorLkIgXC1SLCAtLW5vLXJlc29sdgorRG9uJ3QgcmVhZCAvZXRjL3Jlc29sdi5jb25mLiBHZXQgdXBzdHJlYW0gc2VydmVycyBvbmx5IGZyb20gdGhlIGNvbW1hbmQKK2xpbmUgb3IgdGhlIGRuc21hc3EgY29uZmlndXJhdGlvbiBmaWxlLgorLlRQCisuQiBcLTEsIC0tZW5hYmxlLWRidXNbPTxzZXJ2aWNlLW5hbWU+XQorQWxsb3cgZG5zbWFzcSBjb25maWd1cmF0aW9uIHRvIGJlIHVwZGF0ZWQgdmlhIERCdXMgbWV0aG9kIGNhbGxzLiBUaGUKK2NvbmZpZ3VyYXRpb24gd2hpY2ggY2FuIGJlIGNoYW5nZWQgaXMgdXBzdHJlYW0gRE5TIHNlcnZlcnMgKGFuZAorY29ycmVzcG9uZGluZyBkb21haW5zKSBhbmQgY2FjaGUgY2xlYXIuIFJlcXVpcmVzIHRoYXQgZG5zbWFzcSBoYXMKK2JlZW4gYnVpbHQgd2l0aCBEQnVzIHN1cHBvcnQuIElmIHRoZSBzZXJ2aWNlIG5hbWUgaXMgZ2l2ZW4sIGRuc21hc3EKK3Byb3ZpZGVzIHNlcnZpY2UgYXQgdGhhdCBuYW1lLCByYXRoZXIgdGhhbiB0aGUgZGVmYXVsdCB3aGljaCBpcyAKKy5CIHVrLm9yZy50aGVrZWxsZXlzLmRuc21hc3EKKy5UUCAKKy5CIFwtbywgLS1zdHJpY3Qtb3JkZXIKK0J5IGRlZmF1bHQsIGRuc21hc3Egd2lsbCBzZW5kIHF1ZXJpZXMgdG8gYW55IG9mIHRoZSB1cHN0cmVhbSBzZXJ2ZXJzCitpdCBrbm93cyBhYm91dCBhbmQgdHJpZXMgdG8gZmF2b3VyIHNlcnZlcnMgdGhhdCBhcmUga25vd24gdG8KK2JlIHVwLiBTZXR0aW5nIHRoaXMgZmxhZyBmb3JjZXMgZG5zbWFzcSB0byB0cnkgZWFjaCBxdWVyeSB3aXRoIGVhY2gKK3NlcnZlciBzdHJpY3RseSBpbiB0aGUgb3JkZXIgdGhleSBhcHBlYXIgaW4gL2V0Yy9yZXNvbHYuY29uZgorLlRQCisuQiAtLWFsbC1zZXJ2ZXJzCitCeSBkZWZhdWx0LCB3aGVuIGRuc21hc3EgaGFzIG1vcmUgdGhhbiBvbmUgdXBzdHJlYW0gc2VydmVyIGF2YWlsYWJsZSwKK2l0IHdpbGwgc2VuZCBxdWVyaWVzIHRvIGp1c3Qgb25lIHNlcnZlci4gU2V0dGluZyB0aGlzIGZsYWcgZm9yY2VzCitkbnNtYXNxIHRvIHNlbmQgYWxsIHF1ZXJpZXMgdG8gYWxsIGF2YWlsYWJsZSBzZXJ2ZXJzLiBUaGUgcmVwbHkgZnJvbQordGhlIHNlcnZlciB3aGljaCBhbnN3ZXJzIGZpcnN0IHdpbGwgYmUgcmV0dXJuZWQgdG8gdGhlIG9yaWdpbmFsIHJlcXVlc3Rlci4KKy5UUAorLkIgLS1kbnMtbG9vcC1kZXRlY3QKK0VuYWJsZSBjb2RlIHRvIGRldGVjdCBETlMgZm9yd2FyZGluZyBsb29wczsgaWUgdGhlIHNpdHVhdGlvbiB3aGVyZSBhIHF1ZXJ5IHNlbnQgdG8gb25lIAorb2YgdGhlIHVwc3RyZWFtIHNlcnZlciBldmVudHVhbGx5IHJldHVybnMgYXMgYSBuZXcgcXVlcnkgdG8gdGhlIGRuc21hc3EgaW5zdGFuY2UuIFRoZQorcHJvY2VzcyB3b3JrcyBieSBnZW5lcmF0aW5nIFRYVCBxdWVyaWVzIG9mIHRoZSBmb3JtIDxoZXg+LnRlc3QgYW5kIHNlbmRpbmcgdGhlbSB0bworZWFjaCB1cHN0cmVhbSBzZXJ2ZXIuIFRoZSBoZXggaXMgYSBVSUQgd2hpY2ggZW5jb2RlcyB0aGUgaW5zdGFuY2Ugb2YgZG5zbWFzcSBzZW5kaW5nIHRoZSBxdWVyeQorYW5kIHRoZSB1cHN0cmVhbSBzZXJ2ZXIgdG8gd2hpY2ggaXQgd2FzIHNlbnQuIElmIHRoZSBxdWVyeSByZXR1cm5zIHRvIHRoZSBzZXJ2ZXIgd2hpY2ggc2VudCBpdCwgdGhlbgordGhlIHVwc3RyZWFtIHNlcnZlciB0aHJvdWdoIHdoaWNoIGl0IHdhcyBzZW50IGlzIGRpc2FibGVkIGFuZCB0aGlzIGV2ZW50IGlzIGxvZ2dlZC4gRWFjaCB0aW1lIHRoZQorc2V0IG9mIHVwc3RyZWFtIHNlcnZlcnMgY2hhbmdlcywgdGhlIHRlc3QgaXMgcmUtcnVuIG9uIGFsbCBvZiB0aGVtLCBpbmNsdWRpbmcgb25lcyB3aGljaAord2VyZSBwcmV2aW91c2x5IGRpc2FibGVkLgorLlRQCisuQiAtLXN0b3AtZG5zLXJlYmluZAorUmVqZWN0IChhbmQgbG9nKSBhZGRyZXNzZXMgZnJvbSB1cHN0cmVhbSBuYW1lc2VydmVycyB3aGljaCBhcmUgaW4gdGhlCitwcml2YXRlIElQIHJhbmdlcy4gVGhpcyBibG9ja3MgYW4gYXR0YWNrIHdoZXJlIGEgYnJvd3NlciBiZWhpbmQgYQorZmlyZXdhbGwgaXMgdXNlZCB0byBwcm9iZSBtYWNoaW5lcyBvbiB0aGUgbG9jYWwgbmV0d29yay4KKy5UUAorLkIgLS1yZWJpbmQtbG9jYWxob3N0LW9rCitFeGVtcHQgMTI3LjAuMC4wLzggZnJvbSByZWJpbmRpbmcgY2hlY2tzLiBUaGlzIGFkZHJlc3MgcmFuZ2UgaXMKK3JldHVybmVkIGJ5IHJlYWx0aW1lIGJsYWNrIGhvbGUgc2VydmVycywgc28gYmxvY2tpbmcgaXQgbWF5IGRpc2FibGUKK3RoZXNlIHNlcnZpY2VzLgorLlRQIAorLkIgIC0tcmViaW5kLWRvbWFpbi1vaz1bPGRvbWFpbj5dfFtbLzxkb21haW4+L1s8ZG9tYWluPi9dCitEbyBub3QgZGV0ZWN0IGFuZCBibG9jayBkbnMtcmViaW5kIG9uIHF1ZXJpZXMgdG8gdGhlc2UgZG9tYWlucy4gVGhlCithcmd1bWVudCBtYXkgYmUgZWl0aGVyIGEgc2luZ2xlIGRvbWFpbiwgb3IgbXVsdGlwbGUgZG9tYWlucyBzdXJyb3VuZGVkCitieSAnLycsIGxpa2UgdGhlIC0tc2VydmVyIHN5bnRheCwgZWcuIAorLkIgIC0tcmViaW5kLWRvbWFpbi1vaz0vZG9tYWluMS9kb21haW4yL2RvbWFpbjMvCisuVFAKKy5CIFwtbiwgLS1uby1wb2xsCitEb24ndCBwb2xsIC9ldGMvcmVzb2x2LmNvbmYgZm9yIGNoYW5nZXMuCisuVFAKKy5CIC0tY2xlYXItb24tcmVsb2FkCitXaGVuZXZlciAvZXRjL3Jlc29sdi5jb25mIGlzIHJlLXJlYWQgb3IgdGhlIHVwc3RyZWFtIHNlcnZlcnMgYXJlIHNldAordmlhIERCdXMsIGNsZWFyIHRoZSBETlMgY2FjaGUuCitUaGlzIGlzIHVzZWZ1bCB3aGVuIG5ldyBuYW1lc2VydmVycyBtYXkgaGF2ZSBkaWZmZXJlbnQKK2RhdGEgdGhhbiB0aGF0IGhlbGQgaW4gY2FjaGUuCisuVFAKKy5CIFwtRCwgLS1kb21haW4tbmVlZGVkCitUZWxscyBkbnNtYXNxIHRvIG5ldmVyIGZvcndhcmQgQSBvciBBQUFBIHF1ZXJpZXMgZm9yIHBsYWluIG5hbWVzLCB3aXRob3V0IGRvdHMKK29yIGRvbWFpbiBwYXJ0cywgdG8gdXBzdHJlYW0gbmFtZXNlcnZlcnMuIElmIHRoZSBuYW1lIGlzIG5vdCBrbm93bgorZnJvbSAvZXRjL2hvc3RzIG9yIERIQ1AgdGhlbiBhICJub3QgZm91bmQiIGFuc3dlciBpcyByZXR1cm5lZC4KKy5UUAorLkIgXC1TLCAtLWxvY2FsLCAtLXNlcnZlcj1bL1s8ZG9tYWluPl0vW2RvbWFpbi9dXVs8aXBhZGRyPlsjPHBvcnQ+XVtAPHNvdXJjZS1pcD58PGludGVyZmFjZT5bIzxwb3J0Pl1dCitTcGVjaWZ5IElQIGFkZHJlc3Mgb2YgdXBzdHJlYW0gc2VydmVycyBkaXJlY3RseS4gU2V0dGluZyB0aGlzIGZsYWcgZG9lcworbm90IHN1cHByZXNzIHJlYWRpbmcgb2YgL2V0Yy9yZXNvbHYuY29uZiwgdXNlIC1SIHRvIGRvIHRoYXQuIElmIG9uZSBvcgorbW9yZSAKK29wdGlvbmFsIGRvbWFpbnMgYXJlIGdpdmVuLCB0aGF0IHNlcnZlciBpcyB1c2VkIG9ubHkgZm9yIHRob3NlIGRvbWFpbnMKK2FuZCB0aGV5IGFyZSBxdWVyaWVkIG9ubHkgdXNpbmcgdGhlIHNwZWNpZmllZCBzZXJ2ZXIuIFRoaXMgaXMKK2ludGVuZGVkIGZvciBwcml2YXRlIG5hbWVzZXJ2ZXJzOiBpZiB5b3UgaGF2ZSBhIG5hbWVzZXJ2ZXIgb24geW91cgorbmV0d29yayB3aGljaCBkZWFscyB3aXRoIG5hbWVzIG9mIHRoZSBmb3JtCit4eHguaW50ZXJuYWwudGhla2VsbGV5cy5vcmcudWsgYXQgMTkyLjE2OC4xLjEgdGhlbiBnaXZpbmcgIHRoZSBmbGFnIAorLkIgLVMgL2ludGVybmFsLnRoZWtlbGxleXMub3JnLnVrLzE5Mi4xNjguMS4xIAord2lsbCBzZW5kIGFsbCBxdWVyaWVzIGZvcgoraW50ZXJuYWwgbWFjaGluZXMgdG8gdGhhdCBuYW1lc2VydmVyLCBldmVyeXRoaW5nIGVsc2Ugd2lsbCBnbyB0byB0aGUKK3NlcnZlcnMgaW4gL2V0Yy9yZXNvbHYuY29uZi4gRE5TU0VDIHZhbGlkYXRpb24gaXMgdHVybmVkIG9mZiBmb3Igc3VjaAorcHJpdmF0ZSBuYW1lc2VydmVycywgVU5MRVNTIGEKKy5CIC0tdHJ1c3QtYW5jaG9yCitpcyBzcGVjaWZpZWQgZm9yIHRoZSBkb21haW4gaW4gcXVlc3Rpb24uIEFuIGVtcHR5IGRvbWFpbiBzcGVjaWZpY2F0aW9uLAorLkIgLy8gCitoYXMgdGhlIHNwZWNpYWwgbWVhbmluZyBvZiAidW5xdWFsaWZpZWQgbmFtZXMgb25seSIgaWUgbmFtZXMgd2l0aG91dCBhbnkKK2RvdHMgaW4gdGhlbS4gQSBub24tc3RhbmRhcmQgcG9ydCBtYXkgYmUgc3BlY2lmaWVkIGFzIAorcGFydCBvZiB0aGUgSVAKK2FkZHJlc3MgdXNpbmcgYSAjIGNoYXJhY3Rlci4KK01vcmUgdGhhbiBvbmUgLVMgZmxhZyBpcyBhbGxvd2VkLCB3aXRoCityZXBlYXRlZCBkb21haW4gb3IgaXBhZGRyIHBhcnRzIGFzIHJlcXVpcmVkLgorCitNb3JlIHNwZWNpZmljIGRvbWFpbnMgdGFrZSBwcmVjZWRlbmNlIG92ZXIgbGVzcyBzcGVjaWZpYyBkb21haW5zLCBzbzoKKy5CIC0tc2VydmVyPS9nb29nbGUuY29tLzEuMi4zLjQKKy5CIC0tc2VydmVyPS93d3cuZ29vZ2xlLmNvbS8yLjMuNC41Cit3aWxsIHNlbmQgcXVlcmllcyBmb3IgKi5nb29nbGUuY29tIHRvIDEuMi4zLjQsIGV4Y2VwdCAqd3d3Lmdvb2dsZS5jb20sCit3aGljaCB3aWxsIGdvIHRvIDIuMy40LjUKKworVGhlIHNwZWNpYWwgc2VydmVyIGFkZHJlc3MgJyMnIG1lYW5zLCAidXNlIHRoZSBzdGFuZGFyZCBzZXJ2ZXJzIiwgc28KKy5CIC0tc2VydmVyPS9nb29nbGUuY29tLzEuMi4zLjQKKy5CIC0tc2VydmVyPS93d3cuZ29vZ2xlLmNvbS8jCit3aWxsIHNlbmQgcXVlcmllcyBmb3IgKi5nb29nbGUuY29tIHRvIDEuMi4zLjQsIGV4Y2VwdCAqd3d3Lmdvb2dsZS5jb20gd2hpY2ggd2lsbAorYmUgZm9yd2FyZGVkIGFzIHVzdWFsLgorCitBbHNvIHBlcm1pdHRlZCBpcyBhIC1TCitmbGFnIHdoaWNoIGdpdmVzIGEgZG9tYWluIGJ1dCBubyBJUCBhZGRyZXNzOyB0aGlzIHRlbGxzIGRuc21hc3EgdGhhdAorYSBkb21haW4gaXMgbG9jYWwgYW5kIGl0IG1heSBhbnN3ZXIgcXVlcmllcyBmcm9tIC9ldGMvaG9zdHMgb3IgREhDUAorYnV0IHNob3VsZCBuZXZlciBmb3J3YXJkIHF1ZXJpZXMgb24gdGhhdCBkb21haW4gdG8gYW55IHVwc3RyZWFtCitzZXJ2ZXJzLgorLkIgbG9jYWwKK2lzIGEgc3lub255bSBmb3IKKy5CIHNlcnZlcgordG8gbWFrZSBjb25maWd1cmF0aW9uIGZpbGVzIGNsZWFyZXIgaW4gdGhpcyBjYXNlLgorCitJUHY2IGFkZHJlc3NlcyBtYXkgaW5jbHVkZSBhICVpbnRlcmZhY2Ugc2NvcGUtaWQsIGVnCitmZTgwOjoyMDI6YTQxMjo0NTEyOjdiYmYlZXRoMC4KKworVGhlIG9wdGlvbmFsIHN0cmluZyBhZnRlciB0aGUgQCBjaGFyYWN0ZXIgdGVsbHMgZG5zbWFzcSBob3cgdG8gc2V0IHRoZSBzb3VyY2Ugb2YKK3RoZSBxdWVyaWVzIHRvIHRoaXMgbmFtZXNlcnZlci4gSXQgY2FuIGVpdGhlciBiZSBhbiBpcC1hZGRyZXNzLCBhbiBpbnRlcmZhY2UKK25hbWUgb3IgYm90aC4gVGhlIGlwLWFkZHJlc3Mgc2hvdWxkIGJlbG9uZyB0byB0aGUgbWFjaGluZSBvbiB3aGljaCBkbnNtYXNxIGlzCitydW5uaW5nLCBvdGhlcndpc2UgdGhpcyBzZXJ2ZXIgbGluZSB3aWxsIGJlIGxvZ2dlZCBhbmQgdGhlbiBpZ25vcmVkLiBJZiBhbgoraW50ZXJmYWNlIG5hbWUgaXMgZ2l2ZW4sIHRoZW4gcXVlcmllcyB0byB0aGUgc2VydmVyIHdpbGwgYmUgZm9yY2VkIHZpYSB0aGF0CitpbnRlcmZhY2U7IGlmIGFuIGlwLWFkZHJlc3MgaXMgZ2l2ZW4gdGhlbiB0aGUgc291cmNlIGFkZHJlc3Mgb2YgdGhlIHF1ZXJpZXMgd2lsbAorYmUgc2V0IHRvIHRoYXQgYWRkcmVzczsgYW5kIGlmIGJvdGggYXJlIGdpdmVuIHRoZW4gYSBjb21iaW5hdGlvbiBvZiBpcC1hZGRyZXNzCithbmQgaW50ZXJmYWNlIG5hbWUgd2lsbCBiZSB1c2VkIHRvIHN0ZWVyIHJlcXVlc3RzIHRvIHRoZSBzZXJ2ZXIuCitUaGUgcXVlcnktcG9ydCBmbGFnIGlzIGlnbm9yZWQgZm9yIGFueSBzZXJ2ZXJzIHdoaWNoIGhhdmUgYQorc291cmNlIGFkZHJlc3Mgc3BlY2lmaWVkIGJ1dCB0aGUgcG9ydCBtYXkgYmUgc3BlY2lmaWVkIGRpcmVjdGx5IGFzCitwYXJ0IG9mIHRoZSBzb3VyY2UgYWRkcmVzcy4gRm9yY2luZyBxdWVyaWVzIHRvIGFuIGludGVyZmFjZSBpcyBub3QKK2ltcGxlbWVudGVkIG9uIGFsbCBwbGF0Zm9ybXMgc3VwcG9ydGVkIGJ5IGRuc21hc3EuCisuVFAKKy5CIC0tcmV2LXNlcnZlcj08aXAtYWRkcmVzcz4vPHByZWZpeC1sZW4+LDxpcGFkZHI+WyM8cG9ydD5dW0A8c291cmNlLWlwPnw8aW50ZXJmYWNlPlsjPHBvcnQ+XV0KK1RoaXMgaXMgZnVuY3Rpb25hbGx5IHRoZSBzYW1lIGFzIAorLkIgLS1zZXJ2ZXIsIAorYnV0IHByb3ZpZGVzIHNvbWUgc3ludGFjdGljIHN1Z2FyIHRvIG1ha2Ugc3BlY2lmeWluZyBhZGRyZXNzLXRvLW5hbWUgcXVlcmllcyBlYXNpZXIuIEZvciBleGFtcGxlCisuQiAtLXJldi1zZXJ2ZXI9MS4yLjMuMC8yNCwxOTIuMTY4LjAuMQoraXMgZXhhY3RseSBlcXVpdmFsZW50IHRvIAorLkIgLS1zZXJ2ZXI9LzMuMi4xLmluLWFkZHIuYXJwYS8xOTIuMTY4LjAuMQorLlRQCisuQiBcLUEsIC0tYWRkcmVzcz0vPGRvbWFpbj5bLzxkb21haW4+Li4uXS9bPGlwYWRkcj5dCitTcGVjaWZ5IGFuIElQIGFkZHJlc3MgdG8gcmV0dXJuIGZvciBhbnkgaG9zdCBpbiB0aGUgZ2l2ZW4gZG9tYWlucy4KK1F1ZXJpZXMgaW4gdGhlIGRvbWFpbnMgYXJlIG5ldmVyIGZvcndhcmRlZCBhbmQgYWx3YXlzIHJlcGxpZWQgdG8KK3dpdGggdGhlIHNwZWNpZmllZCBJUCBhZGRyZXNzIHdoaWNoIG1heSBiZSBJUHY0IG9yIElQdjYuIFRvIGdpdmUKK2JvdGggSVB2NCBhbmQgSVB2NiBhZGRyZXNzZXMgZm9yIGEgZG9tYWluLCB1c2UgcmVwZWF0ZWQgXGZCLUFcZlAgZmxhZ3MuCitUbyBpbmNsdWRlIG11bHRpcGxlIElQIGFkZHJlc3NlcyBmb3IgYSBzaW5nbGUgcXVlcnksIHVzZQorXGZCLS1hZGRuLWhvc3RzPTxwYXRoPlxmUCBpbnN0ZWFkLgorTm90ZSB0aGF0IC9ldGMvaG9zdHMgYW5kIERIQ1AgbGVhc2VzIG92ZXJyaWRlIHRoaXMgZm9yIGluZGl2aWR1YWwKK25hbWVzLiBBIGNvbW1vbiB1c2Ugb2YgdGhpcyBpcyB0byByZWRpcmVjdCB0aGUgZW50aXJlIGRvdWJsZWNsaWNrLm5ldAorZG9tYWluIHRvIHNvbWUgZnJpZW5kbHkgbG9jYWwgd2ViIHNlcnZlciB0byBhdm9pZCBiYW5uZXIgYWRzLiBUaGUKK2RvbWFpbiBzcGVjaWZpY2F0aW9uIHdvcmtzIGluIHRoZSBzYW1lIHdhcyBhcyBmb3IgXGZCLS1zZXJ2ZXJcZlAsIHdpdGgKK3RoZSBhZGRpdGlvbmFsIGZhY2lsaXR5IHRoYXQgXGZCLyMvXGZQIG1hdGNoZXMgYW55IGRvbWFpbi4gVGh1cworXGZCLS1hZGRyZXNzPS8jLzEuMi4zLjRcZlAgd2lsbCBhbHdheXMgcmV0dXJuIFxmQjEuMi4zLjRcZlAgZm9yIGFueQorcXVlcnkgbm90IGFuc3dlcmVkIGZyb20gXGZCL2V0Yy9ob3N0c1xmUCBvciBESENQIGFuZCBub3Qgc2VudCB0byBhbgordXBzdHJlYW0gbmFtZXNlcnZlciBieSBhIG1vcmUgc3BlY2lmaWMgXGZCLS1zZXJ2ZXJcZlAgZGlyZWN0aXZlLiBBcyBmb3IKK1xmQi0tc2VydmVyXGZQLCBvbmUgb3IgbW9yZSBkb21haW5zIHdpdGggbm8gYWRkcmVzcyByZXR1cm5zIGEKK25vLXN1Y2gtZG9tYWluIGFuc3dlciwgc28gXGZCLS1hZGRyZXNzPS9leGFtcGxlLmNvbS9cZlAgaXMgZXF1aXZhbGVudCB0bworXGZCLS1zZXJ2ZXI9L2V4YW1wbGUuY29tL1xmUCBhbmQgcmV0dXJucyBOWERPTUFJTiBmb3IgZXhhbXBsZS5jb20gYW5kCithbGwgaXRzIHN1YmRvbWFpbnMuCisuVFAKKy5CIC0taXBzZXQ9Lzxkb21haW4+Wy88ZG9tYWluPi4uLl0vPGlwc2V0PlssPGlwc2V0Pi4uLl0KK1BsYWNlcyB0aGUgcmVzb2x2ZWQgSVAgYWRkcmVzc2VzIG9mIHF1ZXJpZXMgZm9yIG9uZSBvciBtb3JlIGRvbWFpbnMgaW4KK3RoZSBzcGVjaWZpZWQgTmV0ZmlsdGVyIElQIHNldC4gSWYgbXVsdGlwbGUgc2V0bmFtZXMgYXJlIGdpdmVuLCB0aGVuIHRoZQorYWRkcmVzc2VzIGFyZSBwbGFjZWQgaW4gZWFjaCBvZiB0aGVtLCBzdWJqZWN0IHRvIHRoZSBsaW1pdGF0aW9ucyBvZiBhbgorSVAgc2V0IChJUHY0IGFkZHJlc3NlcyBjYW5ub3QgYmUgc3RvcmVkIGluIGFuIElQdjYgSVAgc2V0IGFuZCB2aWNlCit2ZXJzYSkuICBEb21haW5zIGFuZCBzdWJkb21haW5zIGFyZSBtYXRjaGVkIGluIHRoZSBzYW1lIHdheSBhcworXGZCLS1hZGRyZXNzXGZQLgorVGhlc2UgSVAgc2V0cyBtdXN0IGFscmVhZHkgZXhpc3QuIFNlZQorLkJSIGlwc2V0ICg4KQorZm9yIG1vcmUgZGV0YWlscy4KKy5UUAorLkIgXC1tLCAtLW14LWhvc3Q9PG14IG5hbWU+W1ssPGhvc3RuYW1lPl0sPHByZWZlcmVuY2U+XQorUmV0dXJuIGFuIE1YIHJlY29yZCBuYW1lZCA8bXggbmFtZT4gcG9pbnRpbmcgdG8gdGhlIGdpdmVuIGhvc3RuYW1lIChpZgorZ2l2ZW4pLCBvcgordGhlIGhvc3Qgc3BlY2lmaWVkIGluIHRoZSAtLW14LXRhcmdldCBzd2l0Y2gKK29yLCBpZiB0aGF0IHN3aXRjaCBpcyBub3QgZ2l2ZW4sIHRoZSBob3N0IG9uIHdoaWNoIGRuc21hc3EgCitpcyBydW5uaW5nLiBUaGUgZGVmYXVsdCBpcyB1c2VmdWwgZm9yIGRpcmVjdGluZyBtYWlsIGZyb20gc3lzdGVtcyBvbiBhIExBTgordG8gYSBjZW50cmFsIHNlcnZlci4gVGhlIHByZWZlcmVuY2UgdmFsdWUgaXMgb3B0aW9uYWwsIGFuZCBkZWZhdWx0cyB0bworMSBpZiBub3QgZ2l2ZW4uIE1vcmUgdGhhbiBvbmUgTVggcmVjb3JkIG1heSBiZSBnaXZlbiBmb3IgYSBob3N0LgorLlRQIAorLkIgXC10LCAtLW14LXRhcmdldD08aG9zdG5hbWU+CitTcGVjaWZ5IHRoZSBkZWZhdWx0IHRhcmdldCBmb3IgdGhlIE1YIHJlY29yZCByZXR1cm5lZCBieSBkbnNtYXNxLiBTZWUKKy0tbXgtaG9zdC4gIElmIC0tbXgtdGFyZ2V0IGlzIGdpdmVuLCBidXQgbm90IC0tbXgtaG9zdCwgdGhlbiBkbnNtYXNxCityZXR1cm5zIGEgTVggcmVjb3JkIGNvbnRhaW5pbmcgdGhlIE1YIHRhcmdldCBmb3IgTVggcXVlcmllcyBvbiB0aGUgCitob3N0bmFtZSBvZiB0aGUgbWFjaGluZSBvbiB3aGljaCBkbnNtYXNxIGlzIHJ1bm5pbmcuCisuVFAKKy5CIFwtZSwgLS1zZWxmbXgKK1JldHVybiBhbiBNWCByZWNvcmQgcG9pbnRpbmcgdG8gaXRzZWxmIGZvciBlYWNoIGxvY2FsCittYWNoaW5lLiBMb2NhbCBtYWNoaW5lcyBhcmUgdGhvc2UgaW4gL2V0Yy9ob3N0cyBvciB3aXRoIERIQ1AgbGVhc2VzLgorLlRQIAorLkIgXC1MLCAtLWxvY2FsbXgKK1JldHVybiBhbiBNWCByZWNvcmQgcG9pbnRpbmcgdG8gdGhlIGhvc3QgZ2l2ZW4gYnkgbXgtdGFyZ2V0IChvciB0aGUKK21hY2hpbmUgb24gd2hpY2ggZG5zbWFzcSBpcyBydW5uaW5nKSBmb3IgZWFjaAorbG9jYWwgbWFjaGluZS4gTG9jYWwgbWFjaGluZXMgYXJlIHRob3NlIGluIC9ldGMvaG9zdHMgb3Igd2l0aCBESENQCitsZWFzZXMuCisuVFAKKy5CIFwtVywgLS1zcnYtaG9zdD08X3NlcnZpY2U+LjxfcHJvdD4uWzxkb21haW4+XSxbPHRhcmdldD5bLDxwb3J0PlssPHByaW9yaXR5PlssPHdlaWdodD5dXV1dCitSZXR1cm4gYSBTUlYgRE5TIHJlY29yZC4gU2VlIFJGQzI3ODIgZm9yIGRldGFpbHMuIElmIG5vdCBzdXBwbGllZCwgdGhlCitkb21haW4gZGVmYXVsdHMgdG8gdGhhdCBnaXZlbiBieQorLkIgLS1kb21haW4uCitUaGUgZGVmYXVsdCBmb3IgdGhlIHRhcmdldCBkb21haW4gaXMgZW1wdHksIGFuZCB0aGUgZGVmYXVsdCBmb3IgcG9ydAoraXMgb25lIGFuZCB0aGUgZGVmYXVsdHMgZm9yIAord2VpZ2h0IGFuZCBwcmlvcml0eSBhcmUgemVyby4gQmUgY2FyZWZ1bCBpZiB0cmFuc3Bvc2luZyBkYXRhIGZyb20gQklORAorem9uZSBmaWxlczogdGhlIHBvcnQsIHdlaWdodCBhbmQgcHJpb3JpdHkgbnVtYmVycyBhcmUgaW4gYSBkaWZmZXJlbnQKK29yZGVyLiBNb3JlIHRoYW4gb25lIFNSViByZWNvcmQgZm9yIGEgZ2l2ZW4gc2VydmljZS9kb21haW4gaXMgYWxsb3dlZCwKK2FsbCB0aGF0IG1hdGNoIGFyZSByZXR1cm5lZC4KKy5UUAorLkIgLS1ob3N0LXJlY29yZD08bmFtZT5bLDxuYW1lPi4uLi5dLFs8SVB2NC1hZGRyZXNzPl0sWzxJUHY2LWFkZHJlc3M+XVssPFRUTD5dCitBZGQgQSwgQUFBQSBhbmQgUFRSIHJlY29yZHMgdG8gdGhlIEROUy4gVGhpcyBhZGRzIG9uZSBvciBtb3JlIG5hbWVzIHRvCit0aGUgRE5TIHdpdGggYXNzb2NpYXRlZCBJUHY0IChBKSBhbmQgSVB2NiAoQUFBQSkgcmVjb3Jkcy4gQSBuYW1lIG1heQorYXBwZWFyIGluIG1vcmUgdGhhbiBvbmUgCisuQiBob3N0LXJlY29yZAorYW5kIHRoZXJlZm9yZSBiZSBhc3NpZ25lZCBtb3JlIHRoYW4gb25lIGFkZHJlc3MuIE9ubHkgdGhlIGZpcnN0CithZGRyZXNzIGNyZWF0ZXMgYSBQVFIgcmVjb3JkIGxpbmtpbmcgdGhlIGFkZHJlc3MgdG8gdGhlIG5hbWUuIFRoaXMgaXMKK3RoZSBzYW1lIHJ1bGUgYXMgaXMgdXNlZCByZWFkaW5nIGhvc3RzLWZpbGVzLiAKKy5CIGhvc3QtcmVjb3JkCitvcHRpb25zIGFyZSBjb25zaWRlcmVkIHRvIGJlIHJlYWQgYmVmb3JlIGhvc3QtZmlsZXMsIHNvIGEgbmFtZQorYXBwZWFyaW5nIHRoZXJlIGluaGliaXRzIFBUUi1yZWNvcmQgY3JlYXRpb24gaWYgaXQgYXBwZWFycyBpbgoraG9zdHMtZmlsZSBhbHNvLiBVbmxpa2UgaG9zdHMtZmlsZXMsIG5hbWVzIGFyZSBub3QgZXhwYW5kZWQsIGV2ZW4gd2hlbgorLkIgZXhwYW5kLWhvc3RzCitpcyBpbiBlZmZlY3QuIFNob3J0IGFuZCBsb25nIG5hbWVzIG1heSBhcHBlYXIgaW4gdGhlIHNhbWUgCisuQiBob3N0LXJlY29yZCwKK2VnLiAKKy5CIC0taG9zdC1yZWNvcmQ9bGFwdG9wLGxhcHRvcC50aGVrZWxsZXlzLm9yZywxOTIuMTY4LjAuMSwxMjM0OjoxMDAKKworSWYgdGhlIHRpbWUtdG8tbGl2ZSBpcyBnaXZlbiwgaXQgb3ZlcnJpZGVzIHRoZSBkZWZhdWx0LCB3aGljaCBpcyB6ZXJvCitvciB0aGUgdmFsdWUgb2YgLS1sb2NhbC10dGwuIFRoZSB2YWx1ZSBpcyBhIHBvc2l0aXZlIGludGVnZXIgYW5kIGdpdmVzIAordGhlIHRpbWUtdG8tbGl2ZSBpbiBzZWNvbmRzLgorLlRQCisuQiBcLVksIC0tdHh0LXJlY29yZD08bmFtZT5bWyw8dGV4dD5dLDx0ZXh0Pl0KK1JldHVybiBhIFRYVCBETlMgcmVjb3JkLiBUaGUgdmFsdWUgb2YgVFhUIHJlY29yZCBpcyBhIHNldCBvZiBzdHJpbmdzLAorc28gIGFueSBudW1iZXIgbWF5IGJlIGluY2x1ZGVkLCBkZWxpbWl0ZWQgYnkgY29tbWFzOyB1c2UgcXVvdGVzIHRvIHB1dAorY29tbWFzIGludG8gYSBzdHJpbmcuIE5vdGUgdGhhdCB0aGUgbWF4aW11bSBsZW5ndGggb2YgYSBzaW5nbGUgc3RyaW5nCitpcyAyNTUgY2hhcmFjdGVycywgbG9uZ2VyIHN0cmluZ3MgYXJlIHNwbGl0IGludG8gMjU1IGNoYXJhY3RlciBjaHVua3MuCisuVFAKKy5CIC0tcHRyLXJlY29yZD08bmFtZT5bLDx0YXJnZXQ+XQorUmV0dXJuIGEgUFRSIEROUyByZWNvcmQuCisuVFAKKy5CIC0tbmFwdHItcmVjb3JkPTxuYW1lPiw8b3JkZXI+LDxwcmVmZXJlbmNlPiw8ZmxhZ3M+LDxzZXJ2aWNlPiw8cmVnZXhwPlssPHJlcGxhY2VtZW50Pl0KK1JldHVybiBhbiBOQVBUUiBETlMgcmVjb3JkLCBhcyBzcGVjaWZpZWQgaW4gUkZDMzQwMy4KKy5UUAorLkIgLS1jbmFtZT08Y25hbWU+LFs8Y25hbWU+LF08dGFyZ2V0PlssPFRUTD5dCitSZXR1cm4gYSBDTkFNRSByZWNvcmQgd2hpY2ggaW5kaWNhdGVzIHRoYXQgPGNuYW1lPiBpcyByZWFsbHkKKzx0YXJnZXQ+LiBUaGVyZSBhcmUgc2lnbmlmaWNhbnQgbGltaXRhdGlvbnMgb24gdGhlIHRhcmdldDsgaXQgbXVzdCBiZSBhCitETlMgbmFtZSB3aGljaCBpcyBrbm93biB0byBkbnNtYXNxIGZyb20gL2V0Yy9ob3N0cyAob3IgYWRkaXRpb25hbAoraG9zdHMgZmlsZXMpLCBmcm9tIERIQ1AsIGZyb20gLS1pbnRlcmZhY2UtbmFtZSBvciBmcm9tIGFub3RoZXIgCisuQiAtLWNuYW1lLgorSWYgdGhlIHRhcmdldCBkb2VzIG5vdCBzYXRpc2Z5IHRoaXMKK2NyaXRlcmlhLCB0aGUgd2hvbGUgY25hbWUgaXMgaWdub3JlZC4gVGhlIGNuYW1lIG11c3QgYmUgdW5pcXVlLCBidXQgaXQKK2lzIHBlcm1pc3NhYmxlIHRvIGhhdmUgbW9yZSB0aGFuIG9uZSBjbmFtZSBwb2ludGluZyB0byB0aGUgc2FtZSB0YXJnZXQuIEluZGVlZAoraXQncyBwb3NzaWJsZSB0byBkZWNsYXJlIG11bHRpcGxlIGNuYW1lcyB0byBhIHRhcmdldCBpbiBhIHNpbmdsZSBsaW5lLCBsaWtlIHNvOgorLkIgLS1jbmFtZT1jbmFtZTEsY25hbWUyLHRhcmdldAorCitJZiB0aGUgdGltZS10by1saXZlIGlzIGdpdmVuLCBpdCBvdmVycmlkZXMgdGhlIGRlZmF1bHQsIHdoaWNoIGlzIHplcm8KK29yIHRoZSB2YWx1ZSBvZiAtbG9jYWwtdHRsLiBUaGUgdmFsdWUgaXMgYSBwb3NpdGl2ZSBpbnRlZ2VyIGFuZCBnaXZlcyAKK3RoZSB0aW1lLXRvLWxpdmUgaW4gc2Vjb25kcy4KKy5UUAorLkIgLS1kbnMtcnI9PG5hbWU+LDxSUi1udW1iZXI+LFs8aGV4IGRhdGE+XQorUmV0dXJuIGFuIGFyYml0cmFyeSBETlMgUmVzb3VyY2UgUmVjb3JkLiBUaGUgbnVtYmVyIGlzIHRoZSB0eXBlIG9mIHRoZQorcmVjb3JkICh3aGljaCBpcyBhbHdheXMgaW4gdGhlIENfSU4gY2xhc3MpLiBUaGUgdmFsdWUgb2YgdGhlIHJlY29yZCBpcworZ2l2ZW4gYnkgdGhlIGhleCBkYXRhLCB3aGljaCBtYXkgYmUgb2YgdGhlIGZvcm0gMDE6MjM6NDUgb3IgMDEgMjMgNDUgb3IKKzAxMjM0NSBvciBhbnkgbWl4dHVyZSBvZiB0aGVzZS4KKy5UUAorLkIgLS1pbnRlcmZhY2UtbmFtZT08bmFtZT4sPGludGVyZmFjZT5bLzR8LzZdCitSZXR1cm4gRE5TIHJlY29yZHMgYXNzb2NpYXRpbmcgdGhlIG5hbWUgd2l0aCB0aGUgYWRkcmVzcyhlcykgb2YKK3RoZSBnaXZlbiBpbnRlcmZhY2UuIFRoaXMgZmxhZyBzcGVjaWZpZXMgYW4gQSBvciBBQUFBIHJlY29yZCBmb3IgdGhlIGdpdmVuCituYW1lIGluIHRoZSBzYW1lIHdheSBhcyBhbiAvZXRjL2hvc3RzIGxpbmUsIGV4Y2VwdCB0aGF0IHRoZSBhZGRyZXNzIGlzCitub3QgY29uc3RhbnQsIGJ1dCB0YWtlbiBmcm9tIHRoZSBnaXZlbiBpbnRlcmZhY2UuIFRoZSBpbnRlcmZhY2UgbWF5IGJlCitmb2xsb3dlZCBieSAiLzQiIG9yICIvNiIgdG8gc3BlY2lmeSB0aGF0IG9ubHkgSVB2NCBvciBJUHY2IGFkZHJlc3Nlcworb2YgdGhlIGludGVyZmFjZSBzaG91bGQgYmUgdXNlZC4gSWYgdGhlIGludGVyZmFjZSBpcworZG93biwgbm90IGNvbmZpZ3VyZWQgb3Igbm9uLWV4aXN0ZW50LCBhbiBlbXB0eSByZWNvcmQgaXMgcmV0dXJuZWQuIFRoZQorbWF0Y2hpbmcgUFRSIHJlY29yZCBpcyBhbHNvIGNyZWF0ZWQsIG1hcHBpbmcgdGhlIGludGVyZmFjZSBhZGRyZXNzIHRvCit0aGUgbmFtZS4gTW9yZSB0aGFuIG9uZSBuYW1lIG1heSBiZSBhc3NvY2lhdGVkIHdpdGggYW4gaW50ZXJmYWNlCithZGRyZXNzIGJ5IHJlcGVhdGluZyB0aGUgZmxhZzsgaW4gdGhhdCBjYXNlIHRoZSBmaXJzdCBpbnN0YW5jZSBpcyB1c2VkCitmb3IgdGhlIHJldmVyc2UgYWRkcmVzcy10by1uYW1lIG1hcHBpbmcuIE5vdGUgdGhhdCBhIG5hbWUgdXNlZCBpbiAKKy0taW50ZXJmYWNlLW5hbWUgbWF5IG5vdCBhcHBlYXIgaW4gL2V0Yy9ob3N0cy4KKy5UUAorLkIgLS1zeW50aC1kb21haW49PGRvbWFpbj4sPGFkZHJlc3MgcmFuZ2U+Wyw8cHJlZml4Pl0KK0NyZWF0ZSBhcnRpZmljaWFsIEEvQUFBQSBhbmQgUFRSIHJlY29yZHMgZm9yIGFuIGFkZHJlc3MgcmFuZ2UuIFRoZQorcmVjb3JkcyB1c2UgdGhlIGFkZHJlc3MsIHdpdGggcGVyaW9kcyAob3IgY29sb25zIGZvciBJUHY2KSByZXBsYWNlZAord2l0aCBkYXNoZXMuCisKK0FuIGV4YW1wbGUgc2hvdWxkIG1ha2UgdGhpcyBjbGVhcmVyLgorLkIgLS1zeW50aC1kb21haW49dGhla2VsbGV5cy5vcmcudWssMTkyLjE2OC4wLjAvMjQsaW50ZXJuYWwtCit3aWxsIHJlc3VsdCBpbiBhIHF1ZXJ5IGZvciBpbnRlcm5hbC0xOTItMTY4LTAtNTYudGhla2VsbGV5cy5vcmcudWsgcmV0dXJuaW5nCisxOTIuMTY4LjAuNTYgYW5kIGEgcmV2ZXJzZSBxdWVyeSB2aWNlIHZlcnNhLiBUaGUgc2FtZSBhcHBsaWVzIHRvIElQdjYsCitidXQgSVB2NiBhZGRyZXNzZXMgbWF5IHN0YXJ0IHdpdGggJzo6JworYnV0IEROUyBsYWJlbHMgbWF5IG5vdCBzdGFydCB3aXRoICctJyBzbyBpbiB0aGlzIGNhc2UgaWYgbm8gcHJlZml4IGlzCitjb25maWd1cmVkIGEgemVybyBpcyBhZGRlZCBpbiBmcm9udCBvZiB0aGUgbGFiZWwuIDo6MSBiZWNvbWVzIDAtLTEuCisKK1Y0IG1hcHBlZCBJUHY2IGFkZHJlc3Nlcywgd2hpY2ggaGF2ZSBhIHJlcHJlc2VudGF0aW9uIGxpa2UgOjpmZmZmOjEuMi4zLjQgYXJlIGhhbmRsZWQgc3BlY2lhbGx5LCBhbmQgYmVjb21lIGxpa2UgMC0tZmZmZi0xLTItMy00CisKK1RoZSBhZGRyZXNzIHJhbmdlIGNhbiBiZSBvZiB0aGUgZm9ybQorPGlwIGFkZHJlc3M+LDxpcCBhZGRyZXNzPiBvciA8aXAgYWRkcmVzcz4vPG5ldG1hc2s+CisuVFAKKy5CIC0tYWRkLW1hY1s9YmFzZTY0fHRleHRdCitBZGQgdGhlIE1BQyBhZGRyZXNzIG9mIHRoZSByZXF1ZXN0b3IgdG8gRE5TIHF1ZXJpZXMgd2hpY2ggYXJlCitmb3J3YXJkZWQgdXBzdHJlYW0uIFRoaXMgbWF5IGJlIHVzZWQgdG8gRE5TIGZpbHRlcmluZyBieSB0aGUgdXBzdHJlYW0KK3NlcnZlci4gVGhlIE1BQyBhZGRyZXNzIGNhbiBvbmx5IGJlIGFkZGVkIGlmIHRoZSByZXF1ZXN0b3IgaXMgb24gdGhlIHNhbWUKK3N1Ym5ldCBhcyB0aGUgZG5zbWFzcSBzZXJ2ZXIuIE5vdGUgdGhhdCB0aGUgbWVjaGFuaXNtIHVzZWQgdG8gYWNoaWV2ZSB0aGlzIChhbiBFRE5TMCBvcHRpb24pCitpcyBub3QgeWV0IHN0YW5kYXJkaXNlZCwgc28gdGhpcyBzaG91bGQgYmUgY29uc2lkZXJlZAorZXhwZXJpbWVudGFsLiBBbHNvIG5vdGUgdGhhdCBleHBvc2luZyBNQUMgYWRkcmVzc2VzIGluIHRoaXMgd2F5IG1heQoraGF2ZSBzZWN1cml0eSBhbmQgcHJpdmFjeSBpbXBsaWNhdGlvbnMuIFRoZSB3YXJuaW5nIGFib3V0IGNhY2hpbmcKK2dpdmVuIGZvciAtLWFkZC1zdWJuZXQgYXBwbGllcyB0byAtLWFkZC1tYWMgdG9vLiBBbiBhbHRlcm5hdGl2ZSBlbmNvZGluZyBvZiB0aGUgCitNQUMsIGFzIGJhc2U2NCwgaXMgZW5hYmxlZCBieSBhZGRpbmcgdGhlICJiYXNlNjQiIHBhcmFtZXRlciBhbmQgYSBodW1hbi1yZWFkYWJsZSBlbmNvZGluZyBvZiBoZXgtYW5kLWNvbG9ucyBpcyBlbmFibGVkIGJ5IGFkZGVkIHRoZSAidGV4dCIgcGFyYW1ldGVyLgorLlRQCisuQiAtLWFkZC1jcGUtaWQ9PHN0cmluZz4KK0FkZCBhIGFyYml0cmFyeSBpZGVudGlmeWluZyBzdHJpbmcgdG8gbyBETlMgcXVlcmllcyB3aGljaCBhcmUKK2ZvcndhcmRlZCB1cHN0cmVhbS4KKy5UUCAKKy5CIC0tYWRkLXN1Ym5ldFtbPVs8SVB2NCBhZGRyZXNzPi9dPElQdjQgcHJlZml4IGxlbmd0aD5dWyxbPElQdjYgYWRkcmVzcz4vXTxJUHY2IHByZWZpeCBsZW5ndGg+XV0KK0FkZCBhIHN1Ym5ldCBhZGRyZXNzIHRvIHRoZSBETlMgcXVlcmllcyB3aGljaCBhcmUgZm9yd2FyZGVkCit1cHN0cmVhbS4gSWYgYW4gYWRkcmVzcyBpcyBzcGVjaWZpZWQgaW4gdGhlIGZsYWcsIGl0IHdpbGwgYmUgdXNlZCwKK290aGVyd2lzZSwgdGhlIGFkZHJlc3Mgb2YgdGhlIHJlcXVlc3RvciB3aWxsIGJlIHVzZWQuIFRoZSBhbW91bnQgb2YKK3RoZSBhZGRyZXNzIGZvcndhcmRlZCBkZXBlbmRzIG9uIHRoZSBwcmVmaXggbGVuZ3RoIHBhcmFtZXRlcjogMzIgKDEyOAorZm9yIElQdjYpIGZvcndhcmRzIHRoZSB3aG9sZSBhZGRyZXNzLCB6ZXJvIGZvcndhcmRzIG5vbmUgb2YgaXQgYnV0CitzdGlsbCBtYXJrcyB0aGUgcmVxdWVzdCBzbyB0aGF0IG5vIHVwc3RyZWFtIG5hbWVzZXJ2ZXIgd2lsbCBhZGQgY2xpZW50CithZGRyZXNzIGluZm9ybWF0aW9uIGVpdGhlci4gVGhlIGRlZmF1bHQgaXMgemVybyBmb3IgYm90aCBJUHY0IGFuZAorSVB2Ni4gTm90ZSB0aGF0IHVwc3RyZWFtIG5hbWVzZXJ2ZXJzIG1heSBiZSBjb25maWd1cmVkIHRvIHJldHVybgorZGlmZmVyZW50IHJlc3VsdHMgYmFzZWQgb24gdGhpcyBpbmZvcm1hdGlvbiwgYnV0IHRoZSBkbnNtYXNxIGNhY2hlCitkb2VzIG5vdCB0YWtlIGFjY291bnQuIElmIGEgZG5zbWFzcSBpbnN0YW5jZSBpcyBjb25maWd1cmVkIHN1Y2ggdGhhdAorZGlmZmVyZW50IHJlc3VsdHMgbWF5IGJlIGVuY291bnRlcmVkLCBjYWNoaW5nIHNob3VsZCBiZSBkaXNhYmxlZC4KKworRm9yIGV4YW1wbGUsCisuQiAtLWFkZC1zdWJuZXQ9MjQsOTYKK3dpbGwgYWRkIHRoZSAvMjQgYW5kIC85NiBzdWJuZXRzIG9mIHRoZSByZXF1ZXN0b3IgZm9yIElQdjQgYW5kIElQdjYgcmVxdWVzdG9ycywgcmVzcGVjdGl2ZWx5LgorLkIgLS1hZGQtc3VibmV0PTEuMi4zLjQvMjQKK3dpbGwgYWRkIDEuMi4zLjAvMjQgZm9yIElQdjQgcmVxdWVzdG9ycyBhbmQgOjovMCBmb3IgSVB2NiByZXF1ZXN0b3JzLgorLkIgLS1hZGQtc3VibmV0PTEuMi4zLjQvMjQsMS4yLjMuNC8yNAord2lsbCBhZGQgMS4yLjMuMC8yNCBmb3IgYm90aCBJUHY0IGFuZCBJUHY2IHJlcXVlc3RvcnMuCisKKy5UUAorLkIgXC1jLCAtLWNhY2hlLXNpemU9PGNhY2hlc2l6ZT4KK1NldCB0aGUgc2l6ZSBvZiBkbnNtYXNxJ3MgY2FjaGUuIFRoZSBkZWZhdWx0IGlzIDE1MCBuYW1lcy4gU2V0dGluZyB0aGUgY2FjaGUgc2l6ZSB0byB6ZXJvIGRpc2FibGVzIGNhY2hpbmcuCisuVFAKKy5CIFwtTiwgLS1uby1uZWdjYWNoZQorRGlzYWJsZSBuZWdhdGl2ZSBjYWNoaW5nLiBOZWdhdGl2ZSBjYWNoaW5nIGFsbG93cyBkbnNtYXNxIHRvIHJlbWVtYmVyCisibm8gc3VjaCBkb21haW4iIGFuc3dlcnMgZnJvbSB1cHN0cmVhbSBuYW1lc2VydmVycyBhbmQgYW5zd2VyCitpZGVudGljYWwgcXVlcmllcyB3aXRob3V0IGZvcndhcmRpbmcgdGhlbSBhZ2Fpbi4gCisuVFAKKy5CIFwtMCwgLS1kbnMtZm9yd2FyZC1tYXg9PHF1ZXJpZXM+CitTZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgRE5TIHF1ZXJpZXMuIFRoZSBkZWZhdWx0IHZhbHVlIGlzCisxNTAsIHdoaWNoIHNob3VsZCBiZSBmaW5lIGZvciBtb3N0IHNldHVwcy4gVGhlIG9ubHkga25vd24gc2l0dWF0aW9uCit3aGVyZSB0aGlzIG5lZWRzIHRvIGJlIGluY3JlYXNlZCBpcyB3aGVuIHVzaW5nIHdlYi1zZXJ2ZXIgbG9nIGZpbGUKK3Jlc29sdmVycywgd2hpY2ggY2FuIGdlbmVyYXRlIGxhcmdlIG51bWJlcnMgb2YgY29uY3VycmVudCBxdWVyaWVzLgorLlRQCisuQiAtLWRuc3NlYworVmFsaWRhdGUgRE5TIHJlcGxpZXMgYW5kIGNhY2hlIEROU1NFQyBkYXRhLiBXaGVuIGZvcndhcmRpbmcgRE5TIHF1ZXJpZXMsIGRuc21hc3EgcmVxdWVzdHMgdGhlIAorRE5TU0VDIHJlY29yZHMgbmVlZGVkIHRvIHZhbGlkYXRlIHRoZSByZXBsaWVzLiBUaGUgcmVwbGllcyBhcmUgdmFsaWRhdGVkIGFuZCB0aGUgcmVzdWx0IHJldHVybmVkIGFzIAordGhlIEF1dGhlbnRpY2F0ZWQgRGF0YSBiaXQgaW4gdGhlIEROUyBwYWNrZXQuIEluIGFkZGl0aW9uIHRoZSBETlNTRUMgcmVjb3JkcyBhcmUgc3RvcmVkIGluIHRoZSBjYWNoZSwgbWFraW5nIAordmFsaWRhdGlvbiBieSBjbGllbnRzIG1vcmUgZWZmaWNpZW50LiBOb3RlIHRoYXQgdmFsaWRhdGlvbiBieSBjbGllbnRzIGlzIHRoZSBtb3N0IHNlY3VyZSBETlNTRUMgbW9kZSwgYnV0IGZvcgorY2xpZW50cyB1bmFibGUgdG8gZG8gdmFsaWRhdGlvbiwgdXNlIG9mIHRoZSBBRCBiaXQgc2V0IGJ5IGRuc21hc3EgaXMgdXNlZnVsLCBwcm92aWRlZCB0aGF0IHRoZSBuZXR3b3JrIGJldHdlZW4gCit0aGUgZG5zbWFzcSBzZXJ2ZXIgYW5kIHRoZSBjbGllbnQgaXMgdHJ1c3RlZC4gRG5zbWFzcSBtdXN0IGJlIGNvbXBpbGVkIHdpdGggSEFWRV9ETlNTRUMgZW5hYmxlZCwgYW5kIEROU1NFQwordHJ1c3QgYW5jaG9ycyBwcm92aWRlZCwgc2VlIAorLkIgLS10cnVzdC1hbmNob3IuCitCZWNhdXNlIHRoZSBETlNTRUMgdmFsaWRhdGlvbiBwcm9jZXNzIHVzZXMgdGhlIGNhY2hlLCBpdCBpcyBub3QKK3Blcm1pdHRlZCB0byByZWR1Y2UgdGhlIGNhY2hlIHNpemUgYmVsb3cgdGhlIGRlZmF1bHQgd2hlbiBETlNTRUMgaXMKK2VuYWJsZWQuIFRoZSBuYW1lc2VydmVycyB1cHN0cmVhbSBvZiBkbnNtYXNxIG11c3QgYmUgRE5TU0VDLWNhcGFibGUsCitpZSBjYXBhYmxlIG9mIHJldHVybmluZyBETlNTRUMgcmVjb3JkcyB3aXRoIGRhdGEuIElmIHRoZXkgYXJlIG5vdCwKK3RoZW4gZG5zbWFzcSB3aWxsIG5vdCBiZSBhYmxlIHRvIGRldGVybWluZSB0aGUgdHJ1c3RlZCBzdGF0dXMgb2YKK2Fuc3dlcnMuIEluIHRoZSBkZWZhdWx0IG1vZGUsIHRoaXMgbWVhbnMgdGhhdCBhbGwgcmVwbGllcyB3aWxsIGJlCittYXJrZWQgYXMgdW50cnVzdGVkLiBJZiAKKy5CIC0tZG5zc2VjLWNoZWNrLXVuc2lnbmVkCitpcyBzZXQgYW5kIHRoZSB1cHN0cmVhbSBzZXJ2ZXJzIGRvbid0IHN1cHBvcnQgRE5TU0VDLCB0aGVuIEROUyBzZXJ2aWNlIHdpbGwgYmUgZW50aXJlbHkgYnJva2VuLgorLlRQCisuQiAtLXRydXN0LWFuY2hvcj1bPGNsYXNzPl0sPGRvbWFpbj4sPGtleS10YWc+LDxhbGdvcml0aG0+LDxkaWdlc3QtdHlwZT4sPGRpZ2VzdD4KK1Byb3ZpZGUgRFMgcmVjb3JkcyB0byBhY3QgYSB0cnVzdCBhbmNob3JzIGZvciBETlNTRUMKK3ZhbGlkYXRpb24uIFR5cGljYWxseSB0aGVzZSB3aWxsIGJlIHRoZSBEUyByZWNvcmQocykgZm9yIFpvbmUgU2lnbmluZwora2V5KHMpIG9mIHRoZSByb290IHpvbmUsCitidXQgdHJ1c3QgYW5jaG9ycyBmb3IgbGltaXRlZCBkb21haW5zIGFyZSBhbHNvIHBvc3NpYmxlLiBUaGUgY3VycmVudAorcm9vdC16b25lIHRydXN0IGFuY2hvcnMgbWF5IGJlIGRvd25sb2FkZWQgZnJvbSBodHRwczovL2RhdGEuaWFuYS5vcmcvcm9vdC1hbmNob3JzL3Jvb3QtYW5jaG9ycy54bWwgCisuVFAKKy5CIC0tZG5zc2VjLWNoZWNrLXVuc2lnbmVkCitBcyBhIGRlZmF1bHQsIGRuc21hc3EgZG9lcyBub3QgY2hlY2sgdGhhdCB1bnNpZ25lZCBETlMgcmVwbGllcyBhcmUKK2xlZ2l0aW1hdGU6IHRoZXkgYXJlIGFzc3VtZWQgdG8gYmUgdmFsaWQgYW5kIHBhc3NlZCBvbiAod2l0aG91dCB0aGUKKyJhdXRoZW50aWMgZGF0YSIgYml0IHNldCwgb2YgY291cnNlKS4gVGhpcyBkb2VzIG5vdCBwcm90ZWN0IGFnYWluc3QgYW4KK2F0dGFja2VyIGZvcmdpbmcgdW5zaWduZWQgcmVwbGllcyBmb3Igc2lnbmVkIEROUyB6b25lcywgYnV0IGl0IGlzCitmYXN0LiBJZiB0aGlzIGZsYWcgaXMgc2V0LCBkbnNtYXNxIHdpbGwgY2hlY2sgdGhlIHpvbmVzIG9mIHVuc2lnbmVkCityZXBsaWVzLCB0byBlbnN1cmUgdGhhdCB1bnNpZ25lZCByZXBsaWVzIGFyZSBhbGxvd2VkIGluIHRob3NlCit6b25lcy4gVGhlIGNvc3Qgb2YgdGhpcyBpcyBtb3JlIHVwc3RyZWFtIHF1ZXJpZXMgYW5kIHNsb3dlcgorcGVyZm9ybWFuY2UuIFNlZSBhbHNvIHRoZSB3YXJuaW5nIGFib3V0IHVwc3RyZWFtIHNlcnZlcnMgaW4gdGhlCitzZWN0aW9uIG9uIAorLkIgLS1kbnNzZWMKKy5UUAorLkIgLS1kbnNzZWMtbm8tdGltZWNoZWNrCitETlNTRUMgc2lnbmF0dXJlcyBhcmUgb25seSB2YWxpZCBmb3Igc3BlY2lmaWVkIHRpbWUgd2luZG93cywgYW5kIHNob3VsZCBiZSByZWplY3RlZCBvdXRzaWRlIHRob3NlIHdpbmRvd3MuIFRoaXMgZ2VuZXJhdGVzIGFuCitpbnRlcmVzdGluZyBjaGlja2VuLWFuZC1lZ2cgcHJvYmxlbSBmb3IgbWFjaGluZXMgd2hpY2ggZG9uJ3QgaGF2ZSBhIGhhcmR3YXJlIHJlYWwgdGltZSBjbG9jay4gRm9yIHRoZXNlIG1hY2hpbmVzIHRvIGRldGVybWluZSB0aGUgY29ycmVjdCAKK3RpbWUgdHlwaWNhbGx5IHJlcXVpcmVzIHVzZSBvZiBOVFAgYW5kIHRoZXJlZm9yZSBETlMsIGJ1dCB2YWxpZGF0aW5nIEROUyByZXF1aXJlcyB0aGF0IHRoZSBjb3JyZWN0IHRpbWUgaXMgYWxyZWFkeSBrbm93bi4gU2V0dGluZyB0aGlzIGZsYWcKK3JlbW92ZXMgdGhlIHRpbWUtd2luZG93IGNoZWNrcyAoYnV0IG5vdCBvdGhlciBETlNTRUMgdmFsaWRhdGlvbi4pIG9ubHkgdW50aWwgdGhlIGRuc21hc3EgcHJvY2VzcyByZWNlaXZlcyBTSUdIVVAuIFRoZSBpbnRlbnRpb24gaXMKK3RoYXQgZG5zbWFzcSBzaG91bGQgYmUgc3RhcnRlZCB3aXRoIHRoaXMgZmxhZyB3aGVuIHRoZSBwbGF0Zm9ybSBkZXRlcm1pbmVzIHRoYXQgcmVsaWFibGUgdGltZSBpcyBub3QgY3VycmVudGx5IGF2YWlsYWJsZS4gQXMgc29vbiBhcyAKK3JlbGlhYmxlIHRpbWUgaXMgZXN0YWJsaXNoZWQsIGEgU0lHSFVQIHNob3VsZCBiZSBzZW50IHRvIGRuc21hc3EsIHdoaWNoIGVuYWJsZXMgdGltZSBjaGVja2luZywgYW5kIHB1cmdlcyB0aGUgY2FjaGUgb2YgRE5TIHJlY29yZHMKK3doaWNoIGhhdmUgbm90IGJlZW4gdGhyb3VnaGx5IGNoZWNrZWQuCisuVFAKKy5CIC0tZG5zc2VjLXRpbWVzdGFtcD08cGF0aD4KK0VuYWJsZXMgYW4gYWx0ZXJuYXRpdmUgd2F5IG9mIGNoZWNraW5nIHRoZSB2YWxpZGl0eSBvZiB0aGUgc3lzdGVtIHRpbWUgZm9yIEROU1NFQyAoc2VlIC0tZG5zc2VjLW5vLXRpbWVjaGVjaykuIEluIHRoaXMgY2FzZSwgdGhlIAorc3lzdGVtIHRpbWUgaXMgY29uc2lkZXJlZCB0byBiZSB2YWxpZCBvbmNlIGl0IGJlY29tZXMgbGF0ZXIgdGhhbiB0aGUgdGltZXN0YW1wIG9uIHRoZSBzcGVjaWZpZWQgZmlsZS4gVGhlIGZpbGUgaXMgY3JlYXRlZCBhbmQgCitpdHMgdGltZXN0YW1wIHNldCBhdXRvbWF0aWNhbGx5IGJ5IGRuc21hc3EuIFRoZSBmaWxlIG11c3QgYmUgc3RvcmVkIG9uIGEgcGVyc2lzdGVudCBmaWxlc3lzdGVtLCBzbyB0aGF0IGl0IGFuZCBpdHMgbXRpbWUgYXJlIGNhcnJpZWQgCitvdmVyIHN5c3RlbSByZXN0YXJ0cy4gVGhlIHRpbWVzdGFtcCBmaWxlIGlzIGNyZWF0ZWQgYWZ0ZXIgZG5zbWFzcSBoYXMgZHJvcHBlZCByb290LCBzbyBpdCBtdXN0IGJlIGluIGEgbG9jYXRpb24gd3JpdGFibGUgYnkgdGhlIAordW5wcml2aWxlZ2VkIHVzZXIgdGhhdCBkbnNtYXNxIHJ1bnMgYXMuCisuVFAKKy5CIC0tcHJveHktZG5zc2VjCitDb3B5IHRoZSBETlNTRUMgQXV0aGVudGljYXRlZCBEYXRhIGJpdCBmcm9tIHVwc3RyZWFtIHNlcnZlcnMgdG8gZG93bnN0cmVhbSBjbGllbnRzIGFuZCBjYWNoZSBpdC4gIFRoaXMgaXMgYW4gCithbHRlcm5hdGl2ZSB0byBoYXZpbmcgZG5zbWFzcSB2YWxpZGF0ZSBETlNTRUMsIGJ1dCBpdCBkZXBlbmRzIG9uIHRoZSBzZWN1cml0eSBvZiB0aGUgbmV0d29yayBiZXR3ZWVuIAorZG5zbWFzcSBhbmQgdGhlIHVwc3RyZWFtIHNlcnZlcnMsIGFuZCB0aGUgdHJ1c3R3b3J0aGluZXNzIG9mIHRoZSB1cHN0cmVhbSBzZXJ2ZXJzLgorLlRQCisuQiAtLWRuc3NlYy1kZWJ1ZworU2V0IGRlYnVnZ2luZyBtb2RlIGZvciB0aGUgRE5TU0VDIHZhbGlkYXRpb24sIHNldCB0aGUgQ2hlY2tpbmcgRGlzYWJsZWQgYml0IG9uIHVwc3RyZWFtIHF1ZXJpZXMsIAorYW5kIGRvbid0IGNvbnZlcnQgcmVwbGllcyB3aGljaCBkbyBub3QgdmFsaWRhdGUgdG8gcmVzcG9uc2VzIHdpdGgKK2EgcmV0dXJuIGNvZGUgb2YgU0VSVkZBSUwuIE5vdGUgdGhhdAorc2V0dGluZyB0aGlzIG1heSBhZmZlY3QgRE5TIGJlaGF2aW91ciBpbiBiYWQgd2F5cywgaXQgaXMgbm90IGFuCitleHRyYS1sb2dnaW5nIGZsYWcgYW5kIHNob3VsZCBub3QgYmUgc2V0IGluIHByb2R1Y3Rpb24uCisuVFAKKy5CIC0tYXV0aC16b25lPTxkb21haW4+Wyw8c3VibmV0PlsvPHByZWZpeCBsZW5ndGg+XVssPHN1Ym5ldD5bLzxwcmVmaXggbGVuZ3RoPl0uLi4uLl1bLGV4Y2x1ZGU6PHN1Ym5ldD5bLzxwcmVmaXggbGVuZ3RoPl1dLi4uLi5dCitEZWZpbmUgYSBETlMgem9uZSBmb3Igd2hpY2ggZG5zbWFzcSBhY3RzIGFzIGF1dGhvcml0YXRpdmUgc2VydmVyLiBMb2NhbGx5IGRlZmluZWQgRE5TIHJlY29yZHMgd2hpY2ggYXJlIGluIHRoZSBkb21haW4KK3dpbGwgYmUgc2VydmVkLiBJZiBzdWJuZXQocykgYXJlIGdpdmVuLCBBIGFuZCBBQUFBIHJlY29yZHMgbXVzdCBiZSBpbiBvbmUgb2YgdGhlCitzcGVjaWZpZWQgc3VibmV0cy4KKworQXMgYWx0ZXJuYXRpdmUgdG8gZGlyZWN0bHkgc3BlY2lmeWluZyB0aGUgc3VibmV0cywgaXQncyBwb3NzaWJsZSB0bworZ2l2ZSB0aGUgbmFtZSBvZiBhbiBpbnRlcmZhY2UsIGluIHdoaWNoIGNhc2UgdGhlIHN1Ym5ldHMgaW1wbGllZCBieQordGhhdCBpbnRlcmZhY2UncyBjb25maWd1cmVkIGFkZHJlc3NlcyBhbmQgbmV0bWFzay9wcmVmaXgtbGVuZ3RoIGFyZQordXNlZDsgdGhpcyBpcyB1c2VmdWwgd2hlbiB1c2luZyBjb25zdHJ1Y3RlZCBESENQIHJhbmdlcyBhcyB0aGUgYWN0dWFsCithZGRyZXNzIGlzIGR5bmFtaWMgYW5kIG5vdCBrbm93biB3aGVuIGNvbmZpZ3VyaW5nIGRuc21hc3EuIFRoZQoraW50ZXJmYWNlIGFkZHJlc3NlcyBtYXkgYmUgY29uZmluZWQgdG8gb25seSBJUHY2IGFkZHJlc3NlcyB1c2luZworPGludGVyZmFjZT4vNiBvciB0byBvbmx5IElQdjQgdXNpbmcgPGludGVyZmFjZT4vNC4gVGhpcyBpcyB1c2VmdWwgd2hlbgorYW4gaW50ZXJmYWNlIGhhcyBkeW5hbWljYWxseSBkZXRlcm1pbmVkIGdsb2JhbCBJUHY2IGFkZHJlc3NlcyB3aGljaCBzaG91bGQKK2FwcGVhciBpbiB0aGUgem9uZSwgYnV0IFJGQzE5MTggSVB2NCBhZGRyZXNzZXMgd2hpY2ggc2hvdWxkIG5vdC4KK0ludGVyZmFjZS1uYW1lIGFuZCBhZGRyZXNzLWxpdGVyYWwgc3VibmV0IHNwZWNpZmljYXRpb25zIG1heSBiZSB1c2VkCitmcmVlbHkgaW4gdGhlIHNhbWUgLS1hdXRoLXpvbmUgZGVjbGFyYXRpb24uCisKK0l0J3MgcG9zc2libGUgdG8gZXhjbHVkZSBjZXJ0YWluIElQIGFkZHJlc3NlcyBmcm9tIHJlc3BvbnNlcy4gSXQgY2FuIGJlCit1c2VkLCB0byBtYWtlIHN1cmUgdGhhdCBhbnN3ZXJzIGNvbnRhaW4gb25seSBnbG9iYWwgcm91dGVhYmxlIElQCithZGRyZXNzZXMgKGJ5IGV4Y2x1ZGluZyBsb29wYmFjaywgUkZDMTkxOCBhbmQgVUxBIGFkZHJlc3NlcykuCisKK1RoZSBzdWJuZXQocykgYXJlIGFsc28gdXNlZCB0byBkZWZpbmUgaW4tYWRkci5hcnBhIGFuZAoraXA2LmFycGEgZG9tYWlucyB3aGljaCBhcmUgc2VydmVkIGZvciByZXZlcnNlLUROUyBxdWVyaWVzLiBJZiBub3QKK3NwZWNpZmllZCwgdGhlIHByZWZpeCBsZW5ndGggZGVmYXVsdHMgdG8gMjQgZm9yIElQdjQgYW5kIDY0IGZvciBJUHY2LgorRm9yIElQdjQgc3VibmV0cywgdGhlIHByZWZpeCBsZW5ndGggc2hvdWxkIGJlIGhhdmUgdGhlIHZhbHVlIDgsIDE2IG9yIDI0Cit1bmxlc3MgeW91IGFyZSBmYW1pbGlhciB3aXRoIFJGQyAyMzE3IGFuZCBoYXZlIGFycmFuZ2VkIHRoZQoraW4tYWRkci5hcnBhIGRlbGVnYXRpb24gYWNjb3JkaW5nbHkuIE5vdGUgdGhhdCBpZiBubyBzdWJuZXRzIGFyZQorc3BlY2lmaWVkLCB0aGVuIG5vIHJldmVyc2UgcXVlcmllcyBhcmUgYW5zd2VyZWQuCisuVFAKKy5CIC0tYXV0aC1zb2E9PHNlcmlhbD5bLDxob3N0bWFzdGVyPlssPHJlZnJlc2g+Wyw8cmV0cnk+Wyw8ZXhwaXJ5Pl1dXV0KK1NwZWNpZnkgZmllbGRzIGluIHRoZSBTT0EgcmVjb3JkIGFzc29jaWF0ZWQgd2l0aCBhdXRob3JpdGF0aXZlCit6b25lcy4gTm90ZSB0aGF0IHRoaXMgaXMgb3B0aW9uYWwsIGFsbCB0aGUgdmFsdWVzIGFyZSBzZXQgdG8gc2FuZSBkZWZhdWx0cy4KKy5UUAorLkIgLS1hdXRoLXNlYy1zZXJ2ZXJzPTxkb21haW4+Wyw8ZG9tYWluPlssPGRvbWFpbj4uLi5dXQorU3BlY2lmeSBhbnkgc2Vjb25kYXJ5IHNlcnZlcnMgZm9yIGEgem9uZSBmb3Igd2hpY2ggZG5zbWFzcSBpcworYXV0aG9yaXRhdGl2ZS4gVGhlc2Ugc2VydmVycyBtdXN0IGJlIGNvbmZpZ3VyZWQgdG8gZ2V0IHpvbmUgZGF0YSBmcm9tCitkbnNtYXNxIGJ5IHpvbmUgdHJhbnNmZXIsIGFuZCBhbnN3ZXIgcXVlcmllcyBmb3IgdGhlIHNhbWUKK2F1dGhvcml0YXRpdmUgem9uZXMgYXMgZG5zbWFzcS4KKy5UUAorLkIgLS1hdXRoLXBlZXI9PGlwLWFkZHJlc3M+Wyw8aXAtYWRkcmVzcz5bLDxpcC1hZGRyZXNzPi4uLl1dCitTcGVjaWZ5IHRoZSBhZGRyZXNzZXMgb2Ygc2Vjb25kYXJ5IHNlcnZlcnMgd2hpY2ggYXJlIGFsbG93ZWQgdG8KK2luaXRpYXRlIHpvbmUgdHJhbnNmZXIgKEFYRlIpIHJlcXVlc3RzIGZvciB6b25lcyBmb3Igd2hpY2ggZG5zbWFzcSBpcworYXV0aG9yaXRhdGl2ZS4gSWYgdGhpcyBvcHRpb24gaXMgbm90IGdpdmVuLCB0aGVuIEFYRlIgcmVxdWVzdHMgd2lsbCBiZQorYWNjZXB0ZWQgZnJvbSBhbnkgc2Vjb25kYXJ5LiAKKy5UUCAKKy5CIC0tY29ubnRyYWNrCitSZWFkIHRoZSBMaW51eCBjb25uZWN0aW9uIHRyYWNrIG1hcmsgYXNzb2NpYXRlZCB3aXRoIGluY29taW5nIEROUworcXVlcmllcyBhbmQgc2V0IHRoZSBzYW1lIG1hcmsgdmFsdWUgb24gdXBzdHJlYW0gdHJhZmZpYyB1c2VkIHRvIGFuc3dlcgordGhvc2UgcXVlcmllcy4gVGhpcyBhbGxvd3MgdHJhZmZpYyBnZW5lcmF0ZWQgYnkgZG5zbWFzcSB0byBiZQorYXNzb2NpYXRlZCB3aXRoIHRoZSBxdWVyaWVzIHdoaWNoIGNhdXNlIGl0LCB1c2VmdWwgZm9yIGJhbmR3aWR0aAorYWNjb3VudGluZyBhbmQgZmlyZXdhbGxpbmcuIERuc21hc3EgbXVzdCBoYXZlIGNvbm50cmFjayBzdXBwb3J0Citjb21waWxlZCBpbiBhbmQgdGhlIGtlcm5lbCBtdXN0IGhhdmUgY29ubnRyYWNrIHN1cHBvcnQKK2luY2x1ZGVkIGFuZCBjb25maWd1cmVkLiBUaGlzIG9wdGlvbiBjYW5ub3QgYmUgY29tYmluZWQgd2l0aAorLS1xdWVyeS1wb3J0LiAKKy5UUAorLkIgXC1GLCAtLWRoY3AtcmFuZ2U9W3RhZzo8dGFnPlssdGFnOjx0YWc+XSxdW3NldDo8dGFnPixdPHN0YXJ0LWFkZHI+Wyw8ZW5kLWFkZHI+fDxtb2RlPl1bLDxuZXRtYXNrPlssPGJyb2FkY2FzdD5dXVssPGxlYXNlIHRpbWU+XQorLlRQCisuQiBcLUYsIC0tZGhjcC1yYW5nZT1bdGFnOjx0YWc+Wyx0YWc6PHRhZz5dLF1bc2V0Ojx0YWc+LF08c3RhcnQtSVB2NmFkZHI+Wyw8ZW5kLUlQdjZhZGRyPnxjb25zdHJ1Y3Rvcjo8aW50ZXJmYWNlPl1bLDxtb2RlPl1bLDxwcmVmaXgtbGVuPl1bLDxsZWFzZSB0aW1lPl0KKworRW5hYmxlIHRoZSBESENQIHNlcnZlci4gQWRkcmVzc2VzIHdpbGwgYmUgZ2l2ZW4gb3V0IGZyb20gdGhlIHJhbmdlCis8c3RhcnQtYWRkcj4gdG8gPGVuZC1hZGRyPiBhbmQgZnJvbSBzdGF0aWNhbGx5IGRlZmluZWQgYWRkcmVzc2VzIGdpdmVuCitpbiAKKy5CIGRoY3AtaG9zdAorb3B0aW9ucy4gSWYgdGhlIGxlYXNlIHRpbWUgaXMgZ2l2ZW4sIHRoZW4gbGVhc2VzCit3aWxsIGJlIGdpdmVuIGZvciB0aGF0IGxlbmd0aCBvZiB0aW1lLiBUaGUgbGVhc2UgdGltZSBpcyBpbiBzZWNvbmRzLAorb3IgbWludXRlcyAoZWcgNDVtKSBvciBob3VycyAoZWcgMWgpIG9yICJpbmZpbml0ZSIuIElmIG5vdCBnaXZlbiwKK3RoZSBkZWZhdWx0IGxlYXNlIHRpbWUgaXMgb25lIGhvdXIuIFRoZQorbWluaW11bSBsZWFzZSB0aW1lIGlzIHR3byBtaW51dGVzLiBGb3IgSVB2NiByYW5nZXMsIHRoZSBsZWFzZSB0aW1lCittYXliZSAiZGVwcmVjYXRlZCI7IHRoaXMgc2V0cyB0aGUgcHJlZmVycmVkIGxpZmV0aW1lIHNlbnQgaW4gYSBESENQCitsZWFzZSBvciByb3V0ZXIgYWR2ZXJ0aXNlbWVudCB0byB6ZXJvLCB3aGljaCBjYXVzZXMgY2xpZW50cyB0byB1c2UKK290aGVyIGFkZHJlc3NlcywgaWYgYXZhaWxhYmxlLCBmb3IgbmV3IGNvbm5lY3Rpb25zIGFzIGEgcHJlbHVkZSB0byByZW51bWJlcmluZy4KKworVGhpcyBvcHRpb24gbWF5IGJlIHJlcGVhdGVkLCB3aXRoIGRpZmZlcmVudCBhZGRyZXNzZXMsIHRvIGVuYWJsZSBESENQCitzZXJ2aWNlIHRvIG1vcmUgdGhhbiBvbmUgbmV0d29yay4gRm9yIGRpcmVjdGx5IGNvbm5lY3RlZCBuZXR3b3JrcyAoaWUsCituZXR3b3JrcyBvbiB3aGljaCB0aGUgbWFjaGluZSBydW5uaW5nIGRuc21hc3EgaGFzIGFuIGludGVyZmFjZSkgdGhlCituZXRtYXNrIGlzIG9wdGlvbmFsOiBkbnNtYXNxIHdpbGwgZGV0ZXJtaW5lIGl0IGZyb20gdGhlIGludGVyZmFjZQorY29uZmlndXJhdGlvbi4gRm9yIG5ldHdvcmtzIHdoaWNoIHJlY2VpdmUgREhDUCBzZXJ2aWNlIHZpYSBhIHJlbGF5CithZ2VudCwgZG5zbWFzcSBjYW5ub3QgZGV0ZXJtaW5lIHRoZSBuZXRtYXNrIGl0c2VsZiwgc28gaXQgc2hvdWxkIGJlCitzcGVjaWZpZWQsIG90aGVyd2lzZSBkbnNtYXNxIHdpbGwgaGF2ZSB0byBndWVzcywgYmFzZWQgb24gdGhlIGNsYXNzIChBLCBCIG9yCitDKSBvZiB0aGUgbmV0d29yayBhZGRyZXNzLiBUaGUgYnJvYWRjYXN0IGFkZHJlc3MgaXMKK2Fsd2F5cyBvcHRpb25hbC4gSXQgaXMgYWx3YXlzCithbGxvd2VkIHRvIGhhdmUgbW9yZSB0aGFuIG9uZSBkaGNwLXJhbmdlIGluIGEgc2luZ2xlIHN1Ym5ldC4gCisKK0ZvciBJUHY2LCB0aGUgcGFyYW1ldGVycyBhcmUgc2xpZ2h0bHkgZGlmZmVyZW50OiBpbnN0ZWFkIG9mIG5ldG1hc2sKK2FuZCBicm9hZGNhc3QgYWRkcmVzcywgdGhlcmUgaXMgYW4gb3B0aW9uYWwgcHJlZml4IGxlbmd0aCB3aGljaCBtdXN0CitiZSBlcXVhbCB0byBvciBsYXJnZXIgdGhlbiB0aGUgcHJlZml4IGxlbmd0aCBvbiB0aGUgbG9jYWwgaW50ZXJmYWNlLiBJZiBub3QKK2dpdmVuLCB0aGlzIGRlZmF1bHRzIHRvIDY0LiBVbmxpa2UgdGhlIElQdjQgY2FzZSwgdGhlIHByZWZpeCBsZW5ndGggaXMgbm90CithdXRvbWF0aWNhbGx5IGRlcml2ZWQgZnJvbSB0aGUgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24uIFRoZSBtaW5pbXVtCitzaXplIG9mIHRoZSBwcmVmaXggbGVuZ3RoIGlzIDY0LgorCitJUHY2IChvbmx5KSBzdXBwb3J0cyBhbm90aGVyIHR5cGUgb2YgcmFuZ2UuIEluIHRoaXMsIHRoZSBzdGFydCBhZGRyZXNzIGFuZCBvcHRpb25hbCBlbmQgYWRkcmVzcyBjb250YWluIG9ubHkgdGhlIG5ldHdvcmsgcGFydCAoaWUgOjoxKSBhbmQgdGhleSBhcmUgZm9sbG93ZWQgYnkKKy5CIGNvbnN0cnVjdG9yOjxpbnRlcmZhY2U+LgorVGhpcyBmb3JtcyBhIHRlbXBsYXRlIHdoaWNoIGRlc2NyaWJlcyBob3cgdG8gY3JlYXRlIHJhbmdlcywgYmFzZWQgb24gdGhlIGFkZHJlc3NlcyBhc3NpZ25lZCB0byB0aGUgaW50ZXJmYWNlLiBGb3IgaW5zdGFuY2UKKworLkIgLS1kaGNwLXJhbmdlPTo6MSw6OjQwMCxjb25zdHJ1Y3RvcjpldGgwCisKK3dpbGwgbG9vayBmb3IgYWRkcmVzc2VzIG9uCitldGgwIGFuZCB0aGVuIGNyZWF0ZSBhIHJhbmdlIGZyb20gPG5ldHdvcms+OjoxIHRvIDxuZXR3b3JrPjo6NDAwLiBJZgordGhlIGludGVyZmFjZSBpcyBhc3NpZ25lZCBtb3JlIHRoYW4gb25lIG5ldHdvcmssIHRoZW4gdGhlCitjb3JyZXNwb25kaW5nIHJhbmdlcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCwgYW5kIHRoZW4KK2RlcHJlY2F0ZWQgYW5kIGZpbmFsbHkgcmVtb3ZlZCBhZ2FpbiBhcyB0aGUgYWRkcmVzcyBpcyBkZXByZWNhdGVkIGFuZAordGhlbiBkZWxldGVkLiBUaGUgaW50ZXJmYWNlIG5hbWUgbWF5IGhhdmUgYSBmaW5hbCAiKiIgd2lsZGNhcmQuIE5vdGUKK3RoYXQganVzdCBhbnkgYWRkcmVzcyBvbiBldGgwIHdpbGwgbm90IGRvOiBpdCBtdXN0IG5vdCBiZSBhbgorYXV0b2NvbmZpZ3VyZWQgb3IgcHJpdmFjeSBhZGRyZXNzLCBvciBiZSBkZXByZWNhdGVkLgorCitJZiBhIGRoY3AtcmFuZ2UgaXMgb25seSBiZWluZyB1c2VkIGZvciBzdGF0ZWxlc3MgREhDUCBhbmQvb3IgU0xBQUMsCit0aGVuIHRoZSBhZGRyZXNzIGNhbiBiZSBzaW1wbHkgOjoKKworLkIgLS1kaGNwLXJhbmdlPTo6LGNvbnN0cnVjdG9yOmV0aDAKKworCitUaGUgb3B0aW9uYWwgCisuQiBzZXQ6PHRhZz4gCitzZXRzIGFuIGFscGhhbnVtZXJpYyBsYWJlbCB3aGljaCBtYXJrcyB0aGlzIG5ldHdvcmsgc28gdGhhdAorZGhjcCBvcHRpb25zIG1heSBiZSBzcGVjaWZpZWQgb24gYSBwZXItbmV0d29yayBiYXNpcy4gCitXaGVuIGl0IGlzIHByZWZpeGVkIHdpdGggJ3RhZzonIGluc3RlYWQsIHRoZW4gaXRzIG1lYW5pbmcgY2hhbmdlcyBmcm9tIHNldHRpbmcKK2EgdGFnIHRvIG1hdGNoaW5nIGl0LiBPbmx5IG9uZSB0YWcgbWF5IGJlIHNldCwgYnV0IG1vcmUgdGhhbiBvbmUgdGFnCittYXkgYmUgbWF0Y2hlZC4KKworVGhlIG9wdGlvbmFsIDxtb2RlPiBrZXl3b3JkIG1heSBiZSAKKy5CIHN0YXRpYword2hpY2ggdGVsbHMgZG5zbWFzcSB0byBlbmFibGUgREhDUCBmb3IgdGhlIG5ldHdvcmsgc3BlY2lmaWVkLCBidXQgbm90Cit0byBkeW5hbWljYWxseSBhbGxvY2F0ZSBJUCBhZGRyZXNzZXM6IG9ubHkgaG9zdHMgd2hpY2ggaGF2ZSBzdGF0aWMKK2FkZHJlc3NlcyBnaXZlbiB2aWEgCisuQiBkaGNwLWhvc3QKK29yIGZyb20gL2V0Yy9ldGhlcnMgd2lsbCBiZSBzZXJ2ZWQuIEEgc3RhdGljLW9ubHkgc3VibmV0IHdpdGggYWRkcmVzcworYWxsIHplcm9zIG1heSBiZSB1c2VkIGFzIGEgImNhdGNoLWFsbCIgYWRkcmVzcyB0byBlbmFibGUgcmVwbGllcyB0byBhbGwKK0luZm9ybWF0aW9uLXJlcXVlc3QgcGFja2V0cyBvbiBhIHN1Ym5ldCB3aGljaCBpcyBwcm92aWRlZCB3aXRoCitzdGF0ZWxlc3MgREhDUHY2LCBpZQorLkIgLS1kaGNwLXJhbmdlPTo6LHN0YXRpYworCitGb3IgSVB2NCwgdGhlIDxtb2RlPiBtYXkgYmUgCisuQiBwcm94eQoraW4gd2hpY2ggY2FzZSBkbnNtYXNxIHdpbGwgcHJvdmlkZSBwcm94eS1ESENQIG9uIHRoZSBzcGVjaWZpZWQKK3N1Ym5ldC4gKFNlZSAKKy5CIHB4ZS1wcm9tcHQKK2FuZCAKKy5CIHB4ZS1zZXJ2aWNlCitmb3IgZGV0YWlscy4pCisKK0ZvciBJUHY2LCB0aGUgbW9kZSBtYXkgYmUgc29tZSBjb21iaW5hdGlvbiBvZgorLkIgcmEtb25seSwgc2xhYWMsIHJhLW5hbWVzLCByYS1zdGF0ZWxlc3MsIHJhLWFkdnJvdXRlciwgb2ZmLWxpbmsuCisKKy5CIHJhLW9ubHkKK3RlbGxzIGRuc21hc3EgdG8gb2ZmZXIgUm91dGVyIEFkdmVydGlzZW1lbnQgb25seSBvbiB0aGlzIHN1Ym5ldCwKK2FuZCBub3QgREhDUC4gCisKKy5CIHNsYWFjCit0ZWxscyBkbnNtYXNxIHRvIG9mZmVyIFJvdXRlciBBZHZlcnRpc2VtZW50IG9uIHRoaXMgc3VibmV0IGFuZCB0byBzZXQKK3RoZSBBIGJpdCBpbiB0aGUgcm91dGVyIGFkdmVydGlzZW1lbnQsIHNvIHRoYXQgdGhlIGNsaWVudCB3aWxsIHVzZQorU0xBQUMgYWRkcmVzc2VzLiBXaGVuIHVzZWQgd2l0aCBhIERIQ1AgcmFuZ2Ugb3Igc3RhdGljIERIQ1AgYWRkcmVzcwordGhpcyByZXN1bHRzIGluIHRoZSBjbGllbnQgaGF2aW5nIGJvdGggYSBESENQLWFzc2lnbmVkIGFuZCBhIFNMQUFDCithZGRyZXNzLgorCisuQiByYS1zdGF0ZWxlc3MKK3NlbmRzIHJvdXRlciBhZHZlcnRpc2VtZW50cyB3aXRoIHRoZSBPIGFuZCBBIGJpdHMgc2V0LCBhbmQgcHJvdmlkZXMgYQorc3RhdGVsZXNzIERIQ1Agc2VydmljZS4gVGhlIGNsaWVudCB3aWxsIHVzZSBhIFNMQUFDIGFkZHJlc3MsIGFuZCB1c2UKK0RIQ1AgZm9yIG90aGVyIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uCisKKy5CIHJhLW5hbWVzCitlbmFibGVzIGEgbW9kZQord2hpY2ggZ2l2ZXMgRE5TIG5hbWVzIHRvIGR1YWwtc3RhY2sgaG9zdHMgd2hpY2ggZG8gU0xBQUMgZm9yCitJUHY2LiBEbnNtYXNxIHVzZXMgdGhlIGhvc3QncyBJUHY0IGxlYXNlIHRvIGRlcml2ZSB0aGUgbmFtZSwgbmV0d29yaworc2VnbWVudCBhbmQgTUFDIGFkZHJlc3MgYW5kIGFzc3VtZXMgdGhhdCB0aGUgaG9zdCB3aWxsIGFsc28gaGF2ZSBhbgorSVB2NiBhZGRyZXNzIGNhbGN1bGF0ZWQgdXNpbmcgdGhlIFNMQUFDIGFsZ29yaXRobSwgb24gdGhlIHNhbWUgbmV0d29yaworc2VnbWVudC4gVGhlIGFkZHJlc3MgaXMgcGluZ2VkLCBhbmQgaWYgYSByZXBseSBpcyByZWNlaXZlZCwgYW4gQUFBQQorcmVjb3JkIGlzIGFkZGVkIHRvIHRoZSBETlMgZm9yIHRoaXMgSVB2NgorYWRkcmVzcy4gTm90ZSB0aGF0IHRoaXMgaXMgb25seSBoYXBwZW5zIGZvciBkaXJlY3RseS1jb25uZWN0ZWQKK25ldHdvcmtzLCAobm90IG9uZSBkb2luZyBESENQIHZpYSBhIHJlbGF5KSBhbmQgaXQgd2lsbCBub3Qgd29yayAKK2lmIGEgaG9zdCBpcyB1c2luZyBwcml2YWN5IGV4dGVuc2lvbnMuIAorLkIgcmEtbmFtZXMKK2NhbiBiZSBjb21iaW5lZCAgd2l0aCAKKy5CIHJhLXN0YXRlbGVzcworYW5kCisuQiBzbGFhYy4KKworLkIgcmEtYWR2cm91dGVyCitlbmFibGVzIGEgbW9kZSB3aGVyZSByb3V0ZXIgYWRkcmVzcyhlcykgcmF0aGVyIHRoYW4gcHJlZml4KGVzKSBhcmUgaW5jbHVkZWQgaW4gdGhlIGFkdmVydGlzZW1lbnRzLgorVGhpcyBpcyBkZXNjcmliZWQgaW4gUkZDLTM3NzUgc2VjdGlvbiA3LjIgYW5kIGlzIHVzZWQgaW4gbW9iaWxlIElQdjYuIEluIHRoaXMgbW9kZSB0aGUgaW50ZXJ2YWwgb3B0aW9uCitpcyBhbHNvIGluY2x1ZGVkLCBhcyBkZXNjcmliZWQgaW4gUkZDLTM3NzUgc2VjdGlvbiA3LjMuCisKKy5CIG9mZi1saW5rCit0ZWxscyBkbnNtYXNxIHRvIGFkdmVydGlzZSB0aGUgcHJlZml4IHdpdGhvdXQgdGhlIG9uLWxpbmsgKGFrYSBMKSBiaXQgc2V0LgorCisuVFAKKy5CIFwtRywgLS1kaGNwLWhvc3Q9Wzxod2FkZHI+XVssaWQ6PGNsaWVudF9pZD58Kl1bLHNldDo8dGFnPl1bLDxpcGFkZHI+XVssPGhvc3RuYW1lPl1bLDxsZWFzZV90aW1lPl1bLGlnbm9yZV0KK1NwZWNpZnkgcGVyIGhvc3QgcGFyYW1ldGVycyBmb3IgdGhlIERIQ1Agc2VydmVyLiBUaGlzIGFsbG93cyBhIG1hY2hpbmUKK3dpdGggYSBwYXJ0aWN1bGFyIGhhcmR3YXJlIGFkZHJlc3MgdG8gYmUgYWx3YXlzIGFsbG9jYXRlZCB0aGUgc2FtZQoraG9zdG5hbWUsIElQIGFkZHJlc3MgYW5kIGxlYXNlIHRpbWUuIEEgaG9zdG5hbWUgc3BlY2lmaWVkIGxpa2UgdGhpcworb3ZlcnJpZGVzIGFueSBzdXBwbGllZCBieSB0aGUgREhDUCBjbGllbnQgb24gdGhlIG1hY2hpbmUuIEl0IGlzIGFsc28KK2FsbG93YWJsZSB0byBvbWl0IHRoZSBoYXJkd2FyZSBhZGRyZXNzIGFuZCBpbmNsdWRlIHRoZSBob3N0bmFtZSwgaW4KK3doaWNoIGNhc2UgdGhlIElQIGFkZHJlc3MgYW5kIGxlYXNlIHRpbWVzIHdpbGwgYXBwbHkgdG8gYW55IG1hY2hpbmUKK2NsYWltaW5nIHRoYXQgbmFtZS4gRm9yIGV4YW1wbGUgCisuQiAtLWRoY3AtaG9zdD0wMDoyMDplMDozYjoxMzphZix3YXAsaW5maW5pdGUgCit0ZWxscyBkbnNtYXNxIHRvIGdpdmUKK3RoZSBtYWNoaW5lIHdpdGggaGFyZHdhcmUgYWRkcmVzcyAwMDoyMDplMDozYjoxMzphZiB0aGUgbmFtZSB3YXAsIGFuZAorYW4gaW5maW5pdGUgREhDUCBsZWFzZS4gCisuQiAtLWRoY3AtaG9zdD1sYXAsMTkyLjE2OC4wLjE5OSAKK3RlbGxzCitkbnNtYXNxIHRvIGFsd2F5cyBhbGxvY2F0ZSB0aGUgbWFjaGluZSBsYXAgdGhlIElQIGFkZHJlc3MKKzE5Mi4xNjguMC4xOTkuIAorCitBZGRyZXNzZXMgYWxsb2NhdGVkIGxpa2UgdGhpcyBhcmUgbm90IGNvbnN0cmFpbmVkIHRvIGJlCitpbiB0aGUgcmFuZ2UgZ2l2ZW4gYnkgdGhlIC0tZGhjcC1yYW5nZSBvcHRpb24sIGJ1dCB0aGV5IG11c3QgYmUgaW4KK3RoZSBzYW1lIHN1Ym5ldCBhcyBzb21lIHZhbGlkIGRoY3AtcmFuZ2UuICBGb3IKK3N1Ym5ldHMgd2hpY2ggZG9uJ3QgbmVlZCBhIHBvb2wgb2YgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFkZHJlc3NlcywKK3VzZSB0aGUgInN0YXRpYyIga2V5d29yZCBpbiB0aGUgZGhjcC1yYW5nZSBkZWNsYXJhdGlvbi4KKworSXQgaXMgYWxsb3dlZCB0byB1c2UgY2xpZW50IGlkZW50aWZpZXJzIChjYWxsZWQgY2xpZW50CitEVUlEIGluIElQdjYtbGFuZCkgcmF0aGVyIHRoYW4KK2hhcmR3YXJlIGFkZHJlc3NlcyB0byBpZGVudGlmeSBob3N0cyBieSBwcmVmaXhpbmcgd2l0aCAnaWQ6Jy4gVGh1czogCisuQiAtLWRoY3AtaG9zdD1pZDowMTowMjowMzowNCwuLi4uLiAKK3JlZmVycyB0byB0aGUgaG9zdCB3aXRoIGNsaWVudCBpZGVudGlmaWVyIDAxOjAyOjAzOjA0LiBJdCBpcyBhbHNvCithbGxvd2VkIHRvIHNwZWNpZnkgdGhlIGNsaWVudCBJRCBhcyB0ZXh0LCBsaWtlIHRoaXM6CisuQiAtLWRoY3AtaG9zdD1pZDpjbGllbnRpZGFzdGV4dCwuLi4uLiAKKworQSBzaW5nbGUKKy5CIGRoY3AtaG9zdCAKK21heSBjb250YWluIGFuIElQdjQgYWRkcmVzcyBvciBhbiBJUHY2IGFkZHJlc3MsIG9yIGJvdGguIElQdjYgYWRkcmVzc2VzIG11c3QgYmUgYnJhY2tldGVkIGJ5IHNxdWFyZSBicmFja2V0cyB0aHVzOgorLkIgLS1kaGNwLWhvc3Q9bGFwdG9wLFsxMjM0Ojo1Nl0KK0lQdjYgYWRkcmVzc2VzIG1heSBjb250YWluIG9ubHkgdGhlIGhvc3QtaWRlbnRpZmllciBwYXJ0OgorLkIgLS1kaGNwLWhvc3Q9bGFwdG9wLFs6OjU2XQoraW4gd2hpY2ggY2FzZSB0aGV5IGFjdCBhcyB3aWxkY2FyZHMgaW4gY29uc3RydWN0ZWQgZGhjcCByYW5nZXMsIHdpdGgKK3RoZSBhcHByb3ByaWF0ZSBuZXR3b3JrIHBhcnQgaW5zZXJ0ZWQuIAorTm90ZSB0aGF0IGluIElQdjYgREhDUCwgdGhlIGhhcmR3YXJlIGFkZHJlc3MgbWF5IG5vdCBiZQorYXZhaWxhYmxlLCB0aG91Z2ggaXQgbm9ybWFsbHkgaXMgZm9yIGRpcmVjdC1jb25uZWN0ZWQgY2xpZW50cywgb3IKK2NsaWVudHMgdXNpbmcgREhDUCByZWxheXMgd2hpY2ggc3VwcG9ydCBSRkMgNjkzOS4KKworCitGb3IgREhDUHY0LCB0aGUgIHNwZWNpYWwgb3B0aW9uIGlkOiogbWVhbnMgImlnbm9yZSBhbnkgY2xpZW50LWlkIAorYW5kIHVzZSBNQUMgYWRkcmVzc2VzIG9ubHkuIiBUaGlzIGlzIHVzZWZ1bCB3aGVuIGEgY2xpZW50IHByZXNlbnRzIGEgY2xpZW50LWlkIHNvbWV0aW1lcyAKK2J1dCBub3Qgb3RoZXJzLgorCitJZiBhIG5hbWUgYXBwZWFycyBpbiAvZXRjL2hvc3RzLCB0aGUgYXNzb2NpYXRlZCBhZGRyZXNzIGNhbiBiZQorYWxsb2NhdGVkIHRvIGEgREhDUCBsZWFzZSwgYnV0IG9ubHkgaWYgYSAKKy5CIC0tZGhjcC1ob3N0CitvcHRpb24gc3BlY2lmeWluZyB0aGUgbmFtZSBhbHNvIGV4aXN0cy4gT25seSBvbmUgaG9zdG5hbWUgY2FuIGJlCitnaXZlbiBpbiBhIAorLkIgZGhjcC1ob3N0CitvcHRpb24sIGJ1dCBhbGlhc2VzIGFyZSBwb3NzaWJsZSBieSB1c2luZyBDTkFNRXMuIChTZWUgCisuQiAtLWNuYW1lCispLgorCitUaGUgc3BlY2lhbCBrZXl3b3JkICJpZ25vcmUiCit0ZWxscyBkbnNtYXNxIHRvIG5ldmVyIG9mZmVyIGEgREhDUCBsZWFzZSB0byBhIG1hY2hpbmUuIFRoZSBtYWNoaW5lCitjYW4gYmUgc3BlY2lmaWVkIGJ5IGhhcmR3YXJlIGFkZHJlc3MsIGNsaWVudCBJRCBvciBob3N0bmFtZSwgZm9yCitpbnN0YW5jZQorLkIgLS1kaGNwLWhvc3Q9MDA6MjA6ZTA6M2I6MTM6YWYsaWdub3JlCitUaGlzIGlzCit1c2VmdWwgd2hlbiB0aGVyZSBpcyBhbm90aGVyIERIQ1Agc2VydmVyIG9uIHRoZSBuZXR3b3JrIHdoaWNoIHNob3VsZAorYmUgdXNlZCBieSBzb21lIG1hY2hpbmVzLgorCitUaGUgc2V0Ojx0YWc+IGNvbnN0cnVjdCBzZXRzIHRoZSB0YWcKK3doZW5ldmVyIHRoaXMgZGhjcC1ob3N0IGRpcmVjdGl2ZSBpcyBpbiB1c2UuIFRoaXMgY2FuIGJlIHVzZWQgdG8gCitzZWxlY3RpdmVseSBzZW5kIERIQ1Agb3B0aW9ucyBqdXN0IGZvciB0aGlzIGhvc3QuIE1vcmUgdGhhbiBvbmUgdGFnCitjYW4gYmUgc2V0IGluIGEgZGhjcC1ob3N0IGRpcmVjdGl2ZSAoYnV0IG5vdCBpbiBvdGhlciBwbGFjZXMgd2hlcmUKKyJzZXQ6PHRhZz4iIGlzIGFsbG93ZWQpLiBXaGVuIGEgaG9zdCBtYXRjaGVzIGFueQorZGhjcC1ob3N0IGRpcmVjdGl2ZSAob3Igb25lIGltcGxpZWQgYnkgL2V0Yy9ldGhlcnMpIHRoZW4gdGhlIHNwZWNpYWwKK3RhZyAia25vd24iIGlzIHNldC4gVGhpcyBhbGxvd3MgZG5zbWFzcSB0byBiZSBjb25maWd1cmVkIHRvCitpZ25vcmUgcmVxdWVzdHMgZnJvbSB1bmtub3duIG1hY2hpbmVzIHVzaW5nCisuQiAtLWRoY3AtaWdub3JlPXRhZzoha25vd24KK0lmIHRoZSBob3N0IG1hdGNoZXMgb25seSBhIGRoY3AtaG9zdCBkaXJlY3RpdmUgd2hpY2ggY2Fubm90CitiZSB1c2VkIGJlY2F1c2UgaXQgc3BlY2lmaWVzIGFuIGFkZHJlc3Mgb24gZGlmZmVyZW50IHN1Ym5ldCwgdGhlIHRhZyAia25vd24tb3RoZXJuZXQiIGlzIHNldC4KK0V0aGVybmV0IGFkZHJlc3NlcyAoYnV0IG5vdCBjbGllbnQtaWRzKSBtYXkgaGF2ZQord2lsZGNhcmQgYnl0ZXMsIHNvIGZvciBleGFtcGxlIAorLkIgLS1kaGNwLWhvc3Q9MDA6MjA6ZTA6M2I6MTM6KixpZ25vcmUgCit3aWxsIGNhdXNlIGRuc21hc3EgdG8gaWdub3JlIGEgcmFuZ2Ugb2YgaGFyZHdhcmUgYWRkcmVzc2VzLiBOb3RlIHRoYXQKK3RoZSAiKiIgd2lsbCBuZWVkIHRvIGJlIGVzY2FwZWQgb3IgcXVvdGVkIG9uIGEgY29tbWFuZCBsaW5lLCBidXQgbm90CitpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLgorCitIYXJkd2FyZSBhZGRyZXNzZXMgbm9ybWFsbHkgbWF0Y2ggYW55CituZXR3b3JrIChBUlApIHR5cGUsIGJ1dCBpdCBpcyBwb3NzaWJsZSB0byByZXN0cmljdCB0aGVtIHRvIGEgc2luZ2xlCitBUlAgdHlwZSBieSBwcmVjZWRpbmcgdGhlbSB3aXRoIHRoZSBBUlAtdHlwZSAoaW4gSEVYKSBhbmQgIi0iLiBzbyAKKy5CIC0tZGhjcC1ob3N0PTA2LTAwOjIwOmUwOjNiOjEzOmFmLDEuMi4zLjQgCit3aWxsIG9ubHkgbWF0Y2ggYQorVG9rZW4tUmluZyBoYXJkd2FyZSBhZGRyZXNzLCBzaW5jZSB0aGUgQVJQLWFkZHJlc3MgdHlwZSBmb3IgdG9rZW4gcmluZworaXMgNi4gCisKK0FzIGEgc3BlY2lhbCBjYXNlLCBpbiBESENQdjQsIGl0IGlzIHBvc3NpYmxlIHRvIGluY2x1ZGUgbW9yZSB0aGFuIG9uZQoraGFyZHdhcmUgYWRkcmVzcy4gZWc6CisuQiAtLWRoY3AtaG9zdD0xMToyMjozMzo0NDo1NTo2NiwxMjozNDo1Njo3ODo5MDoxMiwxOTIuMTY4LjAuMgorVGhpcyBhbGxvd3MgYW4gSVAgYWRkcmVzcyB0byBiZSBhc3NvY2lhdGVkIHdpdGgKK211bHRpcGxlIGhhcmR3YXJlIGFkZHJlc3NlcywgYW5kIGdpdmVzIGRuc21hc3EgcGVybWlzc2lvbiB0byBhYmFuZG9uIGEKK0RIQ1AgbGVhc2UgdG8gb25lIG9mIHRoZSBoYXJkd2FyZSBhZGRyZXNzZXMgd2hlbiBhbm90aGVyIG9uZSBhc2tzIGZvcgorYSBsZWFzZS4gQmV3YXJlIHRoYXQgdGhpcyBpcyBhIGRhbmdlcm91cyB0aGluZyB0byBkbywgaXQgd2lsbCBvbmx5Cit3b3JrIHJlbGlhYmx5IGlmIG9ubHkgb25lIG9mIHRoZSBoYXJkd2FyZSBhZGRyZXNzZXMgaXMgYWN0aXZlIGF0IGFueQordGltZSBhbmQgdGhlcmUgaXMgbm8gd2F5IGZvciBkbnNtYXNxIHRvIGVuZm9yY2UgdGhpcy4gSXQgaXMsIGZvciBpbnN0YW5jZSwKK3VzZWZ1bCB0byBhbGxvY2F0ZSBhIHN0YWJsZSBJUCBhZGRyZXNzIHRvIGEgbGFwdG9wIHdoaWNoCitoYXMgYm90aCB3aXJlZCBhbmQgd2lyZWxlc3MgaW50ZXJmYWNlcy4KKy5UUAorLkIgLS1kaGNwLWhvc3RzZmlsZT08cGF0aD4KK1JlYWQgREhDUCBob3N0IGluZm9ybWF0aW9uIGZyb20gdGhlIHNwZWNpZmllZCBmaWxlLiBJZiBhIGRpcmVjdG9yeQoraXMgZ2l2ZW4sIHRoZW4gcmVhZCBhbGwgdGhlIGZpbGVzIGNvbnRhaW5lZCBpbiB0aGF0IGRpcmVjdG9yeS4gVGhlIGZpbGUgY29udGFpbnMgCitpbmZvcm1hdGlvbiBhYm91dCBvbmUgaG9zdCBwZXIgbGluZS4gVGhlIGZvcm1hdCBvZiBhIGxpbmUgaXMgdGhlIHNhbWUKK2FzIHRleHQgdG8gdGhlIHJpZ2h0IG9mICc9JyBpbiAtLWRoY3AtaG9zdC4gVGhlIGFkdmFudGFnZSBvZiBzdG9yaW5nIERIQ1AgaG9zdCBpbmZvcm1hdGlvbgoraW4gdGhpcyBmaWxlIGlzIHRoYXQgaXQgY2FuIGJlIGNoYW5nZWQgd2l0aG91dCByZS1zdGFydGluZyBkbnNtYXNxOgordGhlIGZpbGUgd2lsbCBiZSByZS1yZWFkIHdoZW4gZG5zbWFzcSByZWNlaXZlcyBTSUdIVVAuCisuVFAKKy5CIC0tZGhjcC1vcHRzZmlsZT08cGF0aD4KK1JlYWQgREhDUCBvcHRpb24gaW5mb3JtYXRpb24gZnJvbSB0aGUgc3BlY2lmaWVkIGZpbGUuICBJZiBhIGRpcmVjdG9yeQoraXMgZ2l2ZW4sIHRoZW4gcmVhZCBhbGwgdGhlIGZpbGVzIGNvbnRhaW5lZCBpbiB0aGF0IGRpcmVjdG9yeS4gVGhlIGFkdmFudGFnZSBvZiAKK3VzaW5nIHRoaXMgb3B0aW9uIGlzIHRoZSBzYW1lIGFzIGZvciAtLWRoY3AtaG9zdHNmaWxlOiB0aGUKK2RoY3Atb3B0c2ZpbGUgd2lsbCBiZSByZS1yZWFkIHdoZW4gZG5zbWFzcSByZWNlaXZlcyBTSUdIVVAuIE5vdGUgdGhhdAoraXQgaXMgcG9zc2libGUgdG8gZW5jb2RlIHRoZSBpbmZvcm1hdGlvbiBpbiBhCisuQiAtLWRoY3AtYm9vdAorZmxhZyBhcyBESENQIG9wdGlvbnMsIHVzaW5nIHRoZSBvcHRpb25zIG5hbWVzIGJvb3RmaWxlLW5hbWUsCitzZXJ2ZXItaXAtYWRkcmVzcyBhbmQgdGZ0cC1zZXJ2ZXIuIFRoaXMgYWxsb3dzIHRoZXNlIHRvIGJlIGluY2x1ZGVkCitpbiBhIGRoY3Atb3B0c2ZpbGUuCisuVFAKKy5CIC0tZGhjcC1ob3N0c2Rpcj08cGF0aD4KK1RoaXMgaXMgZXF1aXZhbGVudCB0byBkaGNwLWhvc3RzZmlsZSwgZXhjZXB0IGZvciB0aGUgZm9sbG93aW5nLiBUaGUgcGF0aCBNVVNUIGJlIGEKK2RpcmVjdG9yeSwgYW5kIG5vdCBhbiBpbmRpdmlkdWFsIGZpbGUuIENoYW5nZWQgb3IgbmV3IGZpbGVzIHdpdGhpbgordGhlIGRpcmVjdG9yeSBhcmUgcmVhZCBhdXRvbWF0aWNhbGx5LCB3aXRob3V0IHRoZSBuZWVkIHRvIHNlbmQgU0lHSFVQLgorSWYgYSBmaWxlIGlzIGRlbGV0ZWQgZm9yIGNoYW5nZWQgYWZ0ZXIgaXQgaGFzIGJlZW4gcmVhZCBieSBkbnNtYXNxLCB0aGVuIHRoZQoraG9zdCByZWNvcmQgaXQgY29udGFpbmVkIHdpbGwgcmVtYWluIHVudGlsIGRuc21hc3EgcmVjZWl2ZXMgYSBTSUdIVVAsIG9yIAoraXMgcmVzdGFydGVkOyBpZSBob3N0IHJlY29yZHMgYXJlIG9ubHkgYWRkZWQgZHluYW1pY2FsbHkuCisuVFAKKy5CIC0tZGhjcC1vcHRzZGlyPTxwYXRoPgorVGhpcyBpcyBlcXVpdmFsZW50IHRvIGRoY3Atb3B0c2ZpbGUsIHdpdGggdGhlIGRpZmZlcmVuY2VzIG5vdGVkIGZvciAtLWRoY3AtaG9zdHNkaXIuCisuVFAgCisuQiBcLVosIC0tcmVhZC1ldGhlcnMKK1JlYWQgL2V0Yy9ldGhlcnMgZm9yIGluZm9ybWF0aW9uIGFib3V0IGhvc3RzIGZvciB0aGUgREhDUCBzZXJ2ZXIuIFRoZQorZm9ybWF0IG9mIC9ldGMvZXRoZXJzIGlzIGEgaGFyZHdhcmUgYWRkcmVzcywgZm9sbG93ZWQgYnkgZWl0aGVyIGEKK2hvc3RuYW1lIG9yIGRvdHRlZC1xdWFkIElQIGFkZHJlc3MuIFdoZW4gcmVhZCBieSBkbnNtYXNxIHRoZXNlIGxpbmVzCitoYXZlIGV4YWN0bHkgdGhlIHNhbWUgZWZmZWN0IGFzCisuQiAtLWRoY3AtaG9zdAorb3B0aW9ucyBjb250YWluaW5nIHRoZSBzYW1lIGluZm9ybWF0aW9uLiAvZXRjL2V0aGVycyBpcyByZS1yZWFkIHdoZW4gCitkbnNtYXNxIHJlY2VpdmVzIFNJR0hVUC4gSVB2NiBhZGRyZXNzZXMgYXJlIE5PVCByZWFkIGZyb20gL2V0Yy9ldGhlcnMuCisuVFAKKy5CIFwtTywgLS1kaGNwLW9wdGlvbj1bdGFnOjx0YWc+LFt0YWc6PHRhZz4sXV1bZW5jYXA6PG9wdD4sXVt2aS1lbmNhcDo8ZW50ZXJwcmlzZT4sXVt2ZW5kb3I6Wzx2ZW5kb3ItY2xhc3M+XSxdWzxvcHQ+fG9wdGlvbjo8b3B0LW5hbWU+fG9wdGlvbjY6PG9wdD58b3B0aW9uNjo8b3B0LW5hbWU+XSxbPHZhbHVlPlssPHZhbHVlPl1dCitTcGVjaWZ5IGRpZmZlcmVudCBvciBleHRyYSBvcHRpb25zIHRvIERIQ1AgY2xpZW50cy4gQnkgZGVmYXVsdCwKK2Ruc21hc3Egc2VuZHMgc29tZSBzdGFuZGFyZCBvcHRpb25zIHRvIERIQ1AgY2xpZW50cywgdGhlIG5ldG1hc2sgYW5kCiticm9hZGNhc3QgYWRkcmVzcyBhcmUgc2V0IHRvIHRoZSBzYW1lIGFzIHRoZSBob3N0IHJ1bm5pbmcgZG5zbWFzcSwgYW5kCit0aGUgRE5TIHNlcnZlciBhbmQgZGVmYXVsdCByb3V0ZSBhcmUgc2V0IHRvIHRoZSBhZGRyZXNzIG9mIHRoZSBtYWNoaW5lCitydW5uaW5nIGRuc21hc3EuIChFcXVpdmFsZW50IHJ1bGVzIGFwcGx5IGZvciBJUHY2LikgSWYgdGhlIGRvbWFpbiBuYW1lIG9wdGlvbiBoYXMgYmVlbiBzZXQsIHRoYXQgaXMgc2VudC4KK1RoaXMgY29uZmlndXJhdGlvbiBhbGxvd3MgdGhlc2UgZGVmYXVsdHMgdG8gYmUgb3ZlcnJpZGRlbiwKK29yIG90aGVyIG9wdGlvbnMgc3BlY2lmaWVkLiBUaGUgb3B0aW9uLCB0byBiZSBzZW50IG1heSBiZSBnaXZlbiBhcyBhCitkZWNpbWFsIG51bWJlciBvciBhcyAib3B0aW9uOjxvcHRpb24tbmFtZT4iIFRoZSBvcHRpb24gbnVtYmVycyBhcmUKK3NwZWNpZmllZCBpbiBSRkMyMTMyIGFuZCBzdWJzZXF1ZW50IFJGQ3MuIFRoZSBzZXQgb2Ygb3B0aW9uLW5hbWVzCitrbm93biBieSBkbnNtYXNxIGNhbiBiZSBkaXNjb3ZlcmVkIGJ5IHJ1bm5pbmcgImRuc21hc3EgLS1oZWxwIGRoY3AiLgorRm9yIGV4YW1wbGUsIHRvIHNldCB0aGUgZGVmYXVsdCByb3V0ZSBvcHRpb24gdG8gCisxOTIuMTY4LjQuNCwgZG8gCisuQiAtLWRoY3Atb3B0aW9uPTMsMTkyLjE2OC40LjQgCitvcgorLkIgLS1kaGNwLW9wdGlvbiA9IG9wdGlvbjpyb3V0ZXIsIDE5Mi4xNjguNC40CithbmQgdG8gc2V0IHRoZSB0aW1lLXNlcnZlciBhZGRyZXNzIHRvIDE5Mi4xNjguMC40LCBkbworLkIgLS1kaGNwLW9wdGlvbiA9IDQyLDE5Mi4xNjguMC40IAorb3IgCisuQiAtLWRoY3Atb3B0aW9uID0gb3B0aW9uOm50cC1zZXJ2ZXIsIDE5Mi4xNjguMC40CitUaGUgc3BlY2lhbCBhZGRyZXNzIDAuMC4wLjAgaXMgdGFrZW4gdG8gbWVhbiAidGhlIGFkZHJlc3Mgb2YgdGhlCittYWNoaW5lIHJ1bm5pbmcgZG5zbWFzcSIuIAorCitEYXRhIHR5cGVzIGFsbG93ZWQgYXJlIGNvbW1hIHNlcGFyYXRlZAorZG90dGVkLXF1YWQgSVB2NCBhZGRyZXNzZXMsIFtdLXdyYXBwZWQgSVB2NiBhZGRyZXNzZXMsIGEgZGVjaW1hbCBudW1iZXIsIGNvbG9uLXNlcGFyYXRlZCBoZXggZGlnaXRzCithbmQgYSB0ZXh0IHN0cmluZy4gSWYgdGhlIG9wdGlvbmFsIHRhZ3MgYXJlIGdpdmVuIHRoZW4KK3RoaXMgb3B0aW9uIGlzIG9ubHkgc2VudCB3aGVuIGFsbCB0aGUgdGFncyBhcmUgbWF0Y2hlZC4KKworU3BlY2lhbCBwcm9jZXNzaW5nIGlzIGRvbmUgb24gYSB0ZXh0IGFyZ3VtZW50IGZvciBvcHRpb24gMTE5LCB0bworY29uZm9ybSB3aXRoIFJGQyAzMzk3LiBUZXh0IG9yIGRvdHRlZC1xdWFkIElQIGFkZHJlc3NlcyBhcyBhcmd1bWVudHMKK3RvIG9wdGlvbiAxMjAgYXJlIGhhbmRsZWQgYXMgcGVyIFJGQyAzMzYxLiBEb3R0ZWQtcXVhZCBJUCBhZGRyZXNzZXMgCit3aGljaCBhcmUgZm9sbG93ZWQgYnkgYSBzbGFzaCBhbmQgdGhlbiBhIG5ldG1hc2sgc2l6ZSBhcmUgZW5jb2RlZCBhcworZGVzY3JpYmVkIGluIFJGQyAzNDQyLgorCitJUHY2IG9wdGlvbnMgYXJlIHNwZWNpZmllZCB1c2luZyB0aGUgCisuQiBvcHRpb242Ogora2V5d29yZCwgZm9sbG93ZWQgYnkgdGhlIG9wdGlvbiBudW1iZXIgb3Igb3B0aW9uIG5hbWUuIFRoZSBJUHY2IG9wdGlvbgorbmFtZSBzcGFjZSBpcyBkaXNqb2ludCBmcm9tIHRoZSBJUHY0IG9wdGlvbiBuYW1lIHNwYWNlLiBJUHY2IGFkZHJlc3NlcworaW4gb3B0aW9ucyBtdXN0IGJlIGJyYWNrZXRlZCB3aXRoIHNxdWFyZSBicmFja2V0cywgZWcuIAorLkIgLS1kaGNwLW9wdGlvbj1vcHRpb242Om50cC1zZXJ2ZXIsWzEyMzQ6OjU2XQorRm9yIElQdjYsIFs6Ol0gbWVhbnMgInRoZSBnbG9iYWwgYWRkcmVzcyBvZgordGhlIG1hY2hpbmUgcnVubmluZyBkbnNtYXNxIiwgd2hpbHN0IFtmZDAwOjpdIGlzIHJlcGxhY2VkIHdpdGggdGhlCitVTEEsIGlmIGl0IGV4aXN0cywgYW5kIFtmZTgwOjpdIHdpdGggdGhlIGxpbmstbG9jYWwgYWRkcmVzcy4KKworQmUgY2FyZWZ1bDogbm8gY2hlY2tpbmcgaXMgZG9uZSB0aGF0IHRoZSBjb3JyZWN0IHR5cGUgb2YgZGF0YSBmb3IgdGhlCitvcHRpb24gbnVtYmVyIGlzIHNlbnQsIGl0IGlzIHF1aXRlIHBvc3NpYmxlIHRvCitwZXJzdWFkZSBkbnNtYXNxIHRvIGdlbmVyYXRlIGlsbGVnYWwgREhDUCBwYWNrZXRzIHdpdGggaW5qdWRpY2lvdXMgdXNlCitvZiB0aGlzIGZsYWcuIFdoZW4gdGhlIHZhbHVlIGlzIGEgZGVjaW1hbCBudW1iZXIsIGRuc21hc3EgbXVzdCBkZXRlcm1pbmUgaG93IAorbGFyZ2UgdGhlIGRhdGEgaXRlbSBpcy4gSXQgZG9lcyB0aGlzIGJ5IGV4YW1pbmluZyB0aGUgb3B0aW9uIG51bWJlciBhbmQvb3IgdGhlCit2YWx1ZSwgYnV0IGNhbiBiZSBvdmVycmlkZGVuIGJ5IGFwcGVuZGluZyBhIHNpbmdsZSBsZXR0ZXIgZmxhZyBhcyBmb2xsb3dzOgorYiA9IG9uZSBieXRlLCBzID0gdHdvIGJ5dGVzLCBpID0gZm91ciBieXRlcy4gVGhpcyBpcyBtYWlubHkgdXNlZnVsIHdpdGggCitlbmNhcHN1bGF0ZWQgdmVuZG9yIGNsYXNzIG9wdGlvbnMgKHNlZSBiZWxvdykgd2hlcmUgZG5zbWFzcSBjYW5ub3QKK2RldGVybWluZSBkYXRhIHNpemUgZnJvbSB0aGUgIG9wdGlvbiBudW1iZXIuIE9wdGlvbiBkYXRhIHdoaWNoCitjb25zaXN0cyBzb2xlbHkgb2YgcGVyaW9kcyBhbmQgZGlnaXRzIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYnkgZG5zbWFzcQorYXMgYW4gSVAgYWRkcmVzcywgYW5kIGluc2VydGVkIGludG8gYW4gb3B0aW9uIGFzIHN1Y2guIFRvIGZvcmNlIGEKK2xpdGVyYWwgc3RyaW5nLCB1c2UgcXVvdGVzLiBGb3IgaW5zdGFuY2Ugd2hlbiB1c2luZyBvcHRpb24gNjYgdG8gc2VuZAorYSBsaXRlcmFsIElQIGFkZHJlc3MgYXMgVEZUUCBzZXJ2ZXIgbmFtZSwgaXQgaXMgbmVjZXNzYXJ5IHRvIGRvCisuQiAtLWRoY3Atb3B0aW9uPTY2LCIxLjIuMy40IgorCitFbmNhcHN1bGF0ZWQgVmVuZG9yLWNsYXNzIG9wdGlvbnMgbWF5IGFsc28gYmUgc3BlY2lmaWVkIChJUHY0IG9ubHkpIHVzaW5nCistLWRoY3Atb3B0aW9uOiBmb3IgaW5zdGFuY2UgCisuQiAtLWRoY3Atb3B0aW9uPXZlbmRvcjpQWEVDbGllbnQsMSwwLjAuMC4wIAorc2VuZHMgdGhlIGVuY2Fwc3VsYXRlZCB2ZW5kb3IKK2NsYXNzLXNwZWNpZmljIG9wdGlvbiAibWZ0cC1hZGRyZXNzPTAuMC4wLjAiIHRvIGFueSBjbGllbnQgd2hvc2UKK3ZlbmRvci1jbGFzcyBtYXRjaGVzICJQWEVDbGllbnQiLiBUaGUgdmVuZG9yLWNsYXNzIG1hdGNoaW5nIGlzCitzdWJzdHJpbmcgYmFzZWQgKHNlZSAtLWRoY3AtdmVuZG9yY2xhc3MgZm9yIGRldGFpbHMpLiBJZiBhCit2ZW5kb3ItY2xhc3Mgb3B0aW9uIChudW1iZXIgNjApIGlzIHNlbnQgYnkgZG5zbWFzcSwgdGhlbiB0aGF0IGlzIHVzZWQgCitmb3Igc2VsZWN0aW5nIGVuY2Fwc3VsYXRlZCBvcHRpb25zIGluIHByZWZlcmVuY2UgdG8gYW55IHNlbnQgYnkgdGhlCitjbGllbnQuIEl0IGlzCitwb3NzaWJsZSB0byBvbWl0IHRoZSB2ZW5kb3JjbGFzcyBjb21wbGV0ZWx5OworLkIgLS1kaGNwLW9wdGlvbj12ZW5kb3I6LDEsMC4wLjAuMAoraW4gd2hpY2ggY2FzZSB0aGUgZW5jYXBzdWxhdGVkIG9wdGlvbiBpcyBhbHdheXMgc2VudC4gCisKK09wdGlvbnMgbWF5IGJlIGVuY2Fwc3VsYXRlZCAoSVB2NCBvbmx5KSB3aXRoaW4gb3RoZXIgb3B0aW9uczogZm9yIGluc3RhbmNlCisuQiAtLWRoY3Atb3B0aW9uPWVuY2FwOjE3NSwgMTkwLCAiaXNjc2ktY2xpZW50MCIKK3dpbGwgc2VuZCBvcHRpb24gMTc1LCB3aXRoaW4gd2hpY2ggaXMgdGhlIG9wdGlvbiAxOTAuIElmIG11bHRpcGxlCitvcHRpb25zIGFyZSBnaXZlbiB3aGljaCBhcmUgZW5jYXBzdWxhdGVkIHdpdGggdGhlIHNhbWUgb3B0aW9uIG51bWJlcgordGhlbiB0aGV5IHdpbGwgYmUgY29ycmVjdGx5IGNvbWJpbmVkIGludG8gb25lIGVuY2Fwc3VsYXRlZCBvcHRpb24uCitlbmNhcDogYW5kIHZlbmRvcjogYXJlIG1heSBub3QgYm90aCBiZSBzZXQgaW4gdGhlIHNhbWUgZGhjcC1vcHRpb24uCisKK1RoZSBmaW5hbCB2YXJpYW50IG9uIGVuY2Fwc3VsYXRlZCBvcHRpb25zIGlzICJWZW5kb3ItSWRlbnRpZnlpbmcKK1ZlbmRvciBPcHRpb25zIiBhcyBzcGVjaWZpZWQgYnkgUkZDMzkyNS4gVGhlc2UgYXJlIGRlbm90ZWQgbGlrZSB0aGlzOiAKKy5CIC0tZGhjcC1vcHRpb249dmktZW5jYXA6MiwgMTAsICJ0ZXh0IgorVGhlIG51bWJlciBpbiB0aGUgdmktZW5jYXA6IHNlY3Rpb24gaXMgdGhlIElBTkEgZW50ZXJwcmlzZSBudW1iZXIKK3VzZWQgdG8gaWRlbnRpZnkgdGhpcyBvcHRpb24uIFRoaXMgZm9ybSBvZiBlbmNhcHN1bGF0aW9uIGlzIHN1cHBvcnRlZAoraW4gSVB2Ni4KKyAKK1RoZSBhZGRyZXNzIDAuMC4wLjAgaXMgbm90IHRyZWF0ZWQgc3BlY2lhbGx5IGluCitlbmNhcHN1bGF0ZWQgb3B0aW9ucy4KKy5UUAorLkIgLS1kaGNwLW9wdGlvbi1mb3JjZT1bdGFnOjx0YWc+LFt0YWc6PHRhZz4sXV1bZW5jYXA6PG9wdD4sXVt2aS1lbmNhcDo8ZW50ZXJwcmlzZT4sXVt2ZW5kb3I6Wzx2ZW5kb3ItY2xhc3M+XSxdPG9wdD4sWzx2YWx1ZT5bLDx2YWx1ZT5dXQorVGhpcyB3b3JrcyBpbiBleGFjdGx5IHRoZSBzYW1lIHdheSBhcworLkIgLS1kaGNwLW9wdGlvbgorZXhjZXB0IHRoYXQgdGhlIG9wdGlvbiB3aWxsIGFsd2F5cyBiZSBzZW50LCBldmVuIGlmIHRoZSBjbGllbnQgZG9lcworbm90IGFzayBmb3IgaXQgaW4gdGhlIHBhcmFtZXRlciByZXF1ZXN0IGxpc3QuIFRoaXMgaXMgc29tZXRpbWVzCituZWVkZWQsIGZvciBleGFtcGxlIHdoZW4gc2VuZGluZyBvcHRpb25zIHRvIFBYRUxpbnV4LgorLlRQCisuQiAtLWRoY3Atbm8tb3ZlcnJpZGUKKyhJUHY0IG9ubHkpIERpc2FibGUgcmUtdXNlIG9mIHRoZSBESENQIHNlcnZlcm5hbWUgYW5kIGZpbGVuYW1lIGZpZWxkcyBhcyBleHRyYQorb3B0aW9uIHNwYWNlLiBJZiBpdCBjYW4sIGRuc21hc3EgbW92ZXMgdGhlIGJvb3Qgc2VydmVyIGFuZCBmaWxlbmFtZQoraW5mb3JtYXRpb24gKGZyb20gZGhjcC1ib290KSBvdXQgb2YgdGhlaXIgZGVkaWNhdGVkIGZpZWxkcyBpbnRvCitESENQIG9wdGlvbnMuIFRoaXMgbWFrZSBleHRyYSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIERIQ1AgcGFja2V0IGZvcgorb3B0aW9ucyBidXQgY2FuLCByYXJlbHksIGNvbmZ1c2Ugb2xkIG9yIGJyb2tlbiBjbGllbnRzLiBUaGlzIGZsYWcKK2ZvcmNlcyAic2ltcGxlIGFuZCBzYWZlIiBiZWhhdmlvdXIgdG8gYXZvaWQgcHJvYmxlbXMgaW4gc3VjaCBhIGNhc2UuCisuVFAKKy5CIC0tZGhjcC1yZWxheT08bG9jYWwgYWRkcmVzcz4sPHNlcnZlciBhZGRyZXNzPlssPGludGVyZmFjZV0KK0NvbmZpZ3VyZSBkbnNtYXNxIHRvIGRvIERIQ1AgcmVsYXkuIFRoZSBsb2NhbCBhZGRyZXNzIGlzIGFuIGFkZHJlc3MKK2FsbG9jYXRlZCB0byBhbiBpbnRlcmZhY2Ugb24gdGhlIGhvc3QgcnVubmluZyBkbnNtYXNxLiBBbGwgREhDUAorcmVxdWVzdHMgYXJyaXZpbmcgb24gdGhhdCBpbnRlcmZhY2Ugd2lsbCB3ZSByZWxheWVkIHRvIGEgcmVtb3RlIERIQ1AKK3NlcnZlciBhdCB0aGUgc2VydmVyIGFkZHJlc3MuIEl0IGlzIHBvc3NpYmxlIHRvIHJlbGF5IGZyb20gYSBzaW5nbGUgbG9jYWwKK2FkZHJlc3MgdG8gbXVsdGlwbGUgcmVtb3RlIHNlcnZlcnMgYnkgdXNpbmcgbXVsdGlwbGUgZGhjcC1yZWxheQorY29uZmlncyB3aXRoIHRoZSBzYW1lIGxvY2FsIGFkZHJlc3MgYW5kIGRpZmZlcmVudCBzZXJ2ZXIKK2FkZHJlc3Nlcy4gQSBzZXJ2ZXIgYWRkcmVzcyBtdXN0IGJlIGFuIElQIGxpdGVyYWwgYWRkcmVzcywgbm90IGEKK2RvbWFpbiBuYW1lLiBJbiB0aGUgY2FzZSBvZiBESENQdjYsIHRoZSBzZXJ2ZXIgYWRkcmVzcyBtYXkgYmUgdGhlCitBTExfU0VSVkVSUyBtdWx0aWNhc3QgYWRkcmVzcywgZmYwNTo6MTozLiBJbiB0aGlzIGNhc2UgdGhlIGludGVyZmFjZQorbXVzdCBiZSBnaXZlbiwgbm90IGJlIHdpbGRjYXJkLCBhbmQgaXMgdXNlZCB0byBkaXJlY3QgdGhlIG11bHRpY2FzdCB0byB0aGUKK2NvcnJlY3QgaW50ZXJmYWNlIHRvIHJlYWNoIHRoZSBESENQIHNlcnZlci4gCisKK0FjY2VzcyBjb250cm9sIGZvciBESENQIGNsaWVudHMgaGFzIHRoZSBzYW1lIHJ1bGVzIGFzIGZvciB0aGUgREhDUAorc2VydmVyLCBzZWUgLS1pbnRlcmZhY2UsIC0tZXhjZXB0LWludGVyZmFjZSwgZXRjLiBUaGUgb3B0aW9uYWwKK2ludGVyZmFjZSBuYW1lIGluIHRoZSBkaGNwLXJlbGF5IGNvbmZpZyBoYXMgYSBkaWZmZXJlbnQgZnVuY3Rpb246IGl0Citjb250cm9scyBvbiB3aGljaCBpbnRlcmZhY2UgREhDUCByZXBsaWVzIGZyb20gdGhlIHNlcnZlciB3aWxsIGJlCithY2NlcHRlZC4gVGhpcyBpcyBpbnRlbmRlZCBmb3IgY29uZmlndXJhdGlvbnMgd2hpY2ggaGF2ZSB0aHJlZQoraW50ZXJmYWNlczogb25lIGJlaW5nIHJlbGF5ZWQgZnJvbSwgYSBzZWNvbmQgY29ubmVjdGluZyB0aGUgREhDUAorc2VydmVyLCBhbmQgYSB0aGlyZCB1bnRydXN0ZWQgbmV0d29yaywgdHlwaWNhbGx5IHRoZSB3aWRlcgoraW50ZXJuZXQuIEl0IGF2b2lkcyB0aGUgcG9zc2liaWxpdHkgb2Ygc3Bvb2YgcmVwbGllcyBhcnJpdmluZyB2aWEgdGhpcwordGhpcmQgaW50ZXJmYWNlLgorCitJdCBpcyBhbGxvd2VkIHRvIGhhdmUgZG5zbWFzcSBhY3QgYXMgYSBESENQIHNlcnZlciBvbiBvbmUgc2V0IG9mCitpbnRlcmZhY2VzIGFuZCByZWxheSBmcm9tIGEgZGlzam9pbnQgc2V0IG9mIGludGVyZmFjZXMuIE5vdGUgdGhhdAord2hpbHN0IGl0IGlzIHF1aXRlIHBvc3NpYmxlIHRvIHdyaXRlIGNvbmZpZ3VyYXRpb25zIHdoaWNoIGFwcGVhciB0bworYWN0IGFzIGEgc2VydmVyIGFuZCBhIHJlbGF5IG9uIHRoZSBzYW1lIGludGVyZmFjZSwgdGhpcyBpcyBub3QKK3N1cHBvcnRlZDogdGhlIHJlbGF5IGZ1bmN0aW9uIHdpbGwgdGFrZSBwcmVjZWRlbmNlLgorCitCb3RoIERIQ1B2NCBhbmQgREhDUHY2IHJlbGF5IGlzIHN1cHBvcnRlZC4gSXQncyBub3QgcG9zc2libGUgdG8gcmVsYXkKK0RIQ1B2NCB0byBhIERIQ1B2NiBzZXJ2ZXIgb3IgdmljZS12ZXJzYS4KKy5UUAorLkIgXC1VLCAtLWRoY3AtdmVuZG9yY2xhc3M9c2V0Ojx0YWc+LFtlbnRlcnByaXNlOjxJQU5BLWVudGVycHJpc2UgbnVtYmVyPixdPHZlbmRvci1jbGFzcz4KK01hcCBmcm9tIGEgdmVuZG9yLWNsYXNzIHN0cmluZyB0byBhIHRhZy4gTW9zdCBESENQIGNsaWVudHMgcHJvdmlkZSBhIAorInZlbmRvciBjbGFzcyIgd2hpY2ggcmVwcmVzZW50cywgaW4gc29tZSBzZW5zZSwgdGhlIHR5cGUgb2YgaG9zdC4gVGhpcyBvcHRpb24gCittYXBzIHZlbmRvciBjbGFzc2VzIHRvIHRhZ3MsIHNvIHRoYXQgREhDUCBvcHRpb25zIG1heSBiZSBzZWxlY3RpdmVseSBkZWxpdmVyZWQKK3RvIGRpZmZlcmVudCBjbGFzc2VzIG9mIGhvc3RzLiBGb3IgZXhhbXBsZSAKKy5CIGRoY3AtdmVuZG9yY2xhc3M9c2V0OnByaW50ZXJzLEhld2xldHQtUGFja2FyZCBKZXREaXJlY3QKK3dpbGwgYWxsb3cgb3B0aW9ucyB0byBiZSBzZXQgb25seSBmb3IgSFAgcHJpbnRlcnMgbGlrZSBzbzoKKy5CIC0tZGhjcC1vcHRpb249dGFnOnByaW50ZXJzLDMsMTkyLjE2OC40LjQgCitUaGUgdmVuZG9yLWNsYXNzIHN0cmluZyBpcworc3Vic3RyaW5nIG1hdGNoZWQgYWdhaW5zdCB0aGUgdmVuZG9yLWNsYXNzIHN1cHBsaWVkIGJ5IHRoZSBjbGllbnQsIHRvCithbGxvdyBmdXp6eSBtYXRjaGluZy4gVGhlIHNldDogcHJlZml4IGlzIG9wdGlvbmFsIGJ1dCBhbGxvd2VkIGZvcgorY29uc2lzdGVuY3kuIAorCitOb3RlIHRoYXQgaW4gSVB2NiBvbmx5LCB2ZW5kb3JjbGFzc2VzIGFyZSBuYW1lc3BhY2VkIHdpdGggYW4gCitJQU5BLWFsbG9jYXRlZCBlbnRlcnByaXNlIG51bWJlci4gVGhpcyBpcyBnaXZlbiB3aXRoIGVudGVycHJpc2U6CitrZXl3b3JkIGFuZCBzcGVjaWZpZXMgdGhhdCBvbmx5IHZlbmRvcmNsYXNzZXMgbWF0Y2hpbmcgdGhlIHNwZWNpZmllZAorbnVtYmVyIHNob3VsZCBiZSBzZWFyY2hlZC4KKy5UUAorLkIgXC1qLCAtLWRoY3AtdXNlcmNsYXNzPXNldDo8dGFnPiw8dXNlci1jbGFzcz4KK01hcCBmcm9tIGEgdXNlci1jbGFzcyBzdHJpbmcgdG8gYSB0YWcgKHdpdGggc3Vic3RyaW5nCittYXRjaGluZywgbGlrZSB2ZW5kb3IgY2xhc3NlcykuIE1vc3QgREhDUCBjbGllbnRzIHByb3ZpZGUgYSAKKyJ1c2VyIGNsYXNzIiB3aGljaCBpcyBjb25maWd1cmFibGUuIFRoaXMgb3B0aW9uCittYXBzIHVzZXIgY2xhc3NlcyB0byB0YWdzLCBzbyB0aGF0IERIQ1Agb3B0aW9ucyBtYXkgYmUgc2VsZWN0aXZlbHkgZGVsaXZlcmVkCit0byBkaWZmZXJlbnQgY2xhc3NlcyBvZiBob3N0cy4gSXQgaXMgcG9zc2libGUsIGZvciBpbnN0YW5jZSB0byB1c2UKK3RoaXMgdG8gc2V0IGEgZGlmZmVyZW50IHByaW50ZXIgc2VydmVyIGZvciBob3N0cyBpbiB0aGUgY2xhc3MKKyJhY2NvdW50cyIgdGhhbiBmb3IgaG9zdHMgaW4gdGhlIGNsYXNzICJlbmdpbmVlcmluZyIuCisuVFAKKy5CIFwtNCwgLS1kaGNwLW1hYz1zZXQ6PHRhZz4sPE1BQyBhZGRyZXNzPgorTWFwIGZyb20gYSBNQUMgYWRkcmVzcyB0byBhIHRhZy4gVGhlIE1BQyBhZGRyZXNzIG1heSBpbmNsdWRlCit3aWxkY2FyZHMuIEZvciBleGFtcGxlCisuQiAtLWRoY3AtbWFjPXNldDozY29tLDAxOjM0OjIzOio6KjoqCit3aWxsIHNldCB0aGUgdGFnICIzY29tIiBmb3IgYW55IGhvc3Qgd2hvc2UgTUFDIGFkZHJlc3MgbWF0Y2hlcyB0aGUgcGF0dGVybi4KKy5UUAorLkIgLS1kaGNwLWNpcmN1aXRpZD1zZXQ6PHRhZz4sPGNpcmN1aXQtaWQ+LCAtLWRoY3AtcmVtb3RlaWQ9c2V0Ojx0YWc+LDxyZW1vdGUtaWQ+CitNYXAgZnJvbSBSRkMzMDQ2IHJlbGF5IGFnZW50IG9wdGlvbnMgdG8gdGFncy4gVGhpcyBkYXRhIG1heQorYmUgcHJvdmlkZWQgYnkgREhDUCByZWxheSBhZ2VudHMuIFRoZSBjaXJjdWl0LWlkIG9yIHJlbW90ZS1pZCBpcworbm9ybWFsbHkgZ2l2ZW4gYXMgY29sb24tc2VwYXJhdGVkIGhleCwgYnV0IGlzIGFsc28gYWxsb3dlZCB0byBiZSBhCitzaW1wbGUgc3RyaW5nLiBJZiBhbiBleGFjdCBtYXRjaCBpcyBhY2hpZXZlZCBiZXR3ZWVuIHRoZSBjaXJjdWl0IG9yCithZ2VudCBJRCBhbmQgb25lIHByb3ZpZGVkIGJ5IGEgcmVsYXkgYWdlbnQsIHRoZSB0YWcgaXMgc2V0LiAKKworLkIgZGhjcC1yZW1vdGVpZAorKGJ1dCBub3QgZGhjcC1jaXJjdWl0aWQpIGlzIHN1cHBvcnRlZCBpbiBJUHY2LiAKKy5UUAorLkIgLS1kaGNwLXN1YnNjcmlkPXNldDo8dGFnPiw8c3Vic2NyaWJlci1pZD4KKyhJUHY0IGFuZCBJUHY2KSBNYXAgZnJvbSBSRkMzOTkzIHN1YnNjcmliZXItaWQgcmVsYXkgYWdlbnQgb3B0aW9ucyB0byB0YWdzLgorLlRQCisuQiAtLWRoY3AtcHJveHlbPTxpcCBhZGRyPl0uLi4uLi4KKyhJUHY0IG9ubHkpIEEgbm9ybWFsIERIQ1AgcmVsYXkgYWdlbnQgaXMgb25seSB1c2VkIHRvIGZvcndhcmQgdGhlIGluaXRpYWwgcGFydHMgb2YKK2EgREhDUCBpbnRlcmFjdGlvbiB0byB0aGUgREhDUCBzZXJ2ZXIuIE9uY2UgYSBjbGllbnQgaXMgY29uZmlndXJlZCwgaXQKK2NvbW11bmljYXRlcyBkaXJlY3RseSB3aXRoIHRoZSBzZXJ2ZXIuIFRoaXMgaXMgdW5kZXNpcmFibGUgaWYgdGhlCityZWxheSBhZ2VudCBpcyBhZGRpbmcgZXh0cmEgaW5mb3JtYXRpb24gdG8gdGhlIERIQ1AgcGFja2V0cywgc3VjaCBhcwordGhhdCB1c2VkIGJ5CisuQiBkaGNwLWNpcmN1aXRpZAorYW5kCisuQiBkaGNwLXJlbW90ZWlkLgorQSBmdWxsIHJlbGF5IGltcGxlbWVudGF0aW9uIGNhbiB1c2UgdGhlIFJGQyA1MTA3IHNlcnZlcmlkLW92ZXJyaWRlCitvcHRpb24gdG8gZm9yY2UgdGhlIERIQ1Agc2VydmVyIHRvIHVzZSB0aGUgcmVsYXkgYXMgYSBmdWxsIHByb3h5LCB3aXRoIGFsbAorcGFja2V0cyBwYXNzaW5nIHRocm91Z2ggaXQuIFRoaXMgZmxhZyBwcm92aWRlcyBhbiBhbHRlcm5hdGl2ZSBtZXRob2QKK29mIGRvaW5nIHRoZSBzYW1lIHRoaW5nLCBmb3IgcmVsYXlzIHdoaWNoIGRvbid0IHN1cHBvcnQgUkZDCis1MTA3LiBHaXZlbiBhbG9uZSwgaXQgbWFuaXB1bGF0ZXMgdGhlIHNlcnZlci1pZCBmb3IgYWxsIGludGVyYWN0aW9ucwordmlhIHJlbGF5cy4gSWYgYSBsaXN0IG9mIElQIGFkZHJlc3NlcyBpcyBnaXZlbiwgb25seSBpbnRlcmFjdGlvbnMgdmlhCityZWxheXMgYXQgdGhvc2UgYWRkcmVzc2VzIGFyZSBhZmZlY3RlZC4KKy5UUAorLkIgLS1kaGNwLW1hdGNoPXNldDo8dGFnPiw8b3B0aW9uIG51bWJlcj58b3B0aW9uOjxvcHRpb24gbmFtZT58dmktZW5jYXA6PGVudGVycHJpc2U+Wyw8dmFsdWU+XQorV2l0aG91dCBhIHZhbHVlLCBzZXQgdGhlIHRhZyBpZiB0aGUgY2xpZW50IHNlbmRzIGEgREhDUAorb3B0aW9uIG9mIHRoZSBnaXZlbiBudW1iZXIgb3IgbmFtZS4gV2hlbiBhIHZhbHVlIGlzIGdpdmVuLCBzZXQgdGhlIHRhZyBvbmx5IGlmCit0aGUgb3B0aW9uIGlzIHNlbnQgYW5kIG1hdGNoZXMgdGhlIHZhbHVlLiBUaGUgdmFsdWUgbWF5IGJlIG9mIHRoZSBmb3JtCisiMDE6ZmY6KjowMiIgaW4gd2hpY2ggY2FzZSB0aGUgdmFsdWUgbXVzdCBtYXRjaCAoYXBhcnQgZnJvbSB3aWxkY2FyZHMpCitidXQgdGhlIG9wdGlvbiBzZW50IG1heSBoYXZlIHVubWF0Y2hlZCBkYXRhIHBhc3QgdGhlIGVuZCBvZiB0aGUKK3ZhbHVlLiBUaGUgdmFsdWUgbWF5IGFsc28gYmUgb2YgdGhlIHNhbWUgZm9ybSBhcyBpbiAKKy5CIGRoY3Atb3B0aW9uCitpbiB3aGljaCBjYXNlIHRoZSBvcHRpb24gc2VudCBpcyB0cmVhdGVkIGFzIGFuIGFycmF5LCBhbmQgb25lIGVsZW1lbnQKK211c3QgbWF0Y2gsIHNvCisKKy0tZGhjcC1tYXRjaD1zZXQ6ZWZpLWlhMzIsb3B0aW9uOmNsaWVudC1hcmNoLDYKKword2lsbCBzZXQgdGhlIHRhZyAiZWZpLWlhMzIiIGlmIHRoZSB0aGUgbnVtYmVyIDYgYXBwZWFycyBpbiB0aGUgbGlzdCBvZgorYXJjaGl0ZWN0dXJlcyBzZW50IGJ5IHRoZSBjbGllbnQgaW4gb3B0aW9uIDkzLiAoU2VlIFJGQyA0NTc4IGZvcgorZGV0YWlscy4pICBJZiB0aGUgdmFsdWUgaXMgYSBzdHJpbmcsIHN1YnN0cmluZyBtYXRjaGluZyBpcyB1c2VkLgorCitUaGUgc3BlY2lhbCBmb3JtIHdpdGggdmktZW5jYXA6PGVudGVycHJpc2UgbnVtYmVyPiBtYXRjaGVzIGFnYWluc3QKK3ZlbmRvci1pZGVudGlmeWluZyB2ZW5kb3IgY2xhc3NlcyBmb3IgdGhlIHNwZWNpZmllZCBlbnRlcnByaXNlLiBQbGVhc2UKK3NlZSBSRkMgMzkyNSBmb3IgbW9yZSBkZXRhaWxzIG9mIHRoZXNlIHJhcmUgYW5kIGludGVyZXN0aW5nIGJlYXN0cy4KKy5UUAorLkIgLS10YWctaWY9c2V0Ojx0YWc+WyxzZXQ6PHRhZz5bLHRhZzo8dGFnPlssdGFnOjx0YWc+XV1dCitQZXJmb3JtIGJvb2xlYW4gb3BlcmF0aW9ucyBvbiB0YWdzLiBBbnkgdGFnIGFwcGVhcmluZyBhcyBzZXQ6PHRhZz4gaXMgc2V0IGlmCithbGwgdGhlIHRhZ3Mgd2hpY2ggYXBwZWFyIGFzIHRhZzo8dGFnPiBhcmUgc2V0LCAob3IgdW5zZXQgd2hlbiB0YWc6ITx0YWc+IGlzIHVzZWQpCitJZiBubyB0YWc6PHRhZz4gYXBwZWFycyBzZXQ6PHRhZz4gdGFncyBhcmUgc2V0IHVuY29uZGl0aW9uYWxseS4KK0FueSBudW1iZXIgb2Ygc2V0OiBhbmQgdGFnOiBmb3JtcyBtYXkgYXBwZWFyLCBpbiBhbnkgb3JkZXIuIAorVGFnLWlmIGxpbmVzIGFyZXMgZXhlY3V0ZWQgaW4gb3JkZXIsIHNvIGlmIHRoZSB0YWcgaW4gdGFnOjx0YWc+IGlzIGEKK3RhZyBzZXQgYnkgYW5vdGhlcgorLkIgdGFnLWlmLAordGhlIGxpbmUgd2hpY2ggc2V0cyB0aGUgdGFnIG11c3QgcHJlY2VkZSB0aGUgb25lIHdoaWNoIHRlc3RzIGl0LgorLlRQCisuQiBcLUosIC0tZGhjcC1pZ25vcmU9dGFnOjx0YWc+Wyx0YWc6PHRhZz5dCitXaGVuIGFsbCB0aGUgZ2l2ZW4gdGFncyBhcHBlYXIgaW4gdGhlIHRhZyBzZXQgaWdub3JlIHRoZSBob3N0IGFuZCBkbworbm90IGFsbG9jYXRlIGl0IGEgREhDUCBsZWFzZS4KKy5UUAorLkIgLS1kaGNwLWlnbm9yZS1uYW1lc1s9dGFnOjx0YWc+Wyx0YWc6PHRhZz5dXQorV2hlbiBhbGwgdGhlIGdpdmVuIHRhZ3MgYXBwZWFyIGluIHRoZSB0YWcgc2V0LCBpZ25vcmUgYW55IGhvc3RuYW1lCitwcm92aWRlZCBieSB0aGUgaG9zdC4gTm90ZSB0aGF0LCB1bmxpa2UgZGhjcC1pZ25vcmUsIGl0IGlzIHBlcm1pc3NpYmxlCit0byBzdXBwbHkgbm8gdGFncywgaW4gd2hpY2ggY2FzZSBESENQLWNsaWVudCBzdXBwbGllZCBob3N0bmFtZXMKK2FyZSBhbHdheXMgaWdub3JlZCwgYW5kIERIQ1AgaG9zdHMgYXJlIGFkZGVkIHRvIHRoZSBETlMgdXNpbmcgb25seQorZGhjcC1ob3N0IGNvbmZpZ3VyYXRpb24gaW4gZG5zbWFzcSBhbmQgdGhlIGNvbnRlbnRzIG9mIC9ldGMvaG9zdHMgYW5kCisvZXRjL2V0aGVycy4KKy5UUAorLkIgLS1kaGNwLWdlbmVyYXRlLW5hbWVzPXRhZzo8dGFnPlssdGFnOjx0YWc+XQorKElQdjQgb25seSkgR2VuZXJhdGUgYSBuYW1lIGZvciBESENQIGNsaWVudHMgd2hpY2ggZG8gbm90IG90aGVyd2lzZSBoYXZlIG9uZSwKK3VzaW5nIHRoZSBNQUMgYWRkcmVzcyBleHByZXNzZWQgaW4gaGV4LCBzZXBhcmF0ZWQgYnkgZGFzaGVzLiBOb3RlIHRoYXQKK2lmIGEgaG9zdCBwcm92aWRlcyBhIG5hbWUsIGl0IHdpbGwgYmUgdXNlZCBieSBwcmVmZXJlbmNlIHRvIHRoaXMsCit1bmxlc3MgCisuQiAtLWRoY3AtaWdub3JlLW5hbWVzIAoraXMgc2V0LgorLlRQCisuQiAtLWRoY3AtYnJvYWRjYXN0Wz10YWc6PHRhZz5bLHRhZzo8dGFnPl1dCisoSVB2NCBvbmx5KSBXaGVuIGFsbCB0aGUgZ2l2ZW4gdGFncyBhcHBlYXIgaW4gdGhlIHRhZyBzZXQsIGFsd2F5cyB1c2UgYnJvYWRjYXN0IHRvCitjb21tdW5pY2F0ZSB3aXRoIHRoZSBob3N0IHdoZW4gaXQgaXMgdW5jb25maWd1cmVkLiBJdCBpcyBwZXJtaXNzaWJsZQordG8gc3VwcGx5IG5vIHRhZ3MsIGluIHdoaWNoIGNhc2UgdGhpcyBpcyB1bmNvbmRpdGlvbmFsLiBNb3N0IERIQ1AgY2xpZW50cyB3aGljaAorbmVlZCBicm9hZGNhc3QgcmVwbGllcyBzZXQgYSBmbGFnIGluIHRoZWlyIHJlcXVlc3RzIHNvIHRoYXQgdGhpcworaGFwcGVucyBhdXRvbWF0aWNhbGx5LCBzb21lIG9sZCBCT09UUCBjbGllbnRzIGRvIG5vdC4KKy5UUAorLkIgXC1NLCAtLWRoY3AtYm9vdD1bdGFnOjx0YWc+LF08ZmlsZW5hbWU+LFs8c2VydmVybmFtZT5bLDxzZXJ2ZXIgYWRkcmVzcz58PHRmdHBfc2VydmVybmFtZT5dXQorKElQdjQgb25seSkgU2V0IEJPT1RQIG9wdGlvbnMgdG8gYmUgcmV0dXJuZWQgYnkgdGhlIERIQ1Agc2VydmVyLiBTZXJ2ZXIgbmFtZSBhbmQKK2FkZHJlc3MgYXJlIG9wdGlvbmFsOiBpZiBub3QgcHJvdmlkZWQsIHRoZSBuYW1lIGlzIGxlZnQgZW1wdHksIGFuZCB0aGUKK2FkZHJlc3Mgc2V0IHRvIHRoZSBhZGRyZXNzIG9mIHRoZSBtYWNoaW5lIHJ1bm5pbmcgZG5zbWFzcS4gSWYgZG5zbWFzcQoraXMgcHJvdmlkaW5nIGEgVEZUUCBzZXJ2aWNlIChzZWUgCisuQiAtLWVuYWJsZS10ZnRwCispIHRoZW4gb25seSB0aGUgZmlsZW5hbWUgaXMgcmVxdWlyZWQgaGVyZSB0byBlbmFibGUgbmV0d29yayBib290aW5nLgorSWYgdGhlIG9wdGlvbmFsIHRhZyhzKSBhcmUgZ2l2ZW4sCit0aGV5IG11c3QgbWF0Y2ggZm9yIHRoaXMgY29uZmlndXJhdGlvbiB0byBiZSBzZW50LiAKK0luc3RlYWQgb2YgYW4gSVAgYWRkcmVzcywgdGhlIFRGVFAgc2VydmVyIGFkZHJlc3MgY2FuIGJlIGdpdmVuIGFzIGEgZG9tYWluCituYW1lIHdoaWNoIGlzIGxvb2tlZCB1cCBpbiAvZXRjL2hvc3RzLiBUaGlzIG5hbWUgY2FuIGJlIGFzc29jaWF0ZWQgaW4KKy9ldGMvaG9zdHMgd2l0aCBtdWx0aXBsZSBJUCBhZGRyZXNzZXMsIHdoaWNoIGFyZSB1c2VkIHJvdW5kLXJvYmluLgorVGhpcyBmYWNpbGl0eSBjYW4gYmUgdXNlZCB0byBsb2FkIGJhbGFuY2UgdGhlIHRmdHAgbG9hZCBhbW9uZyBhIHNldCBvZiBzZXJ2ZXJzLgorLlRQCisuQiAtLWRoY3Atc2VxdWVudGlhbC1pcAorRG5zbWFzcSBpcyBkZXNpZ25lZCB0byBjaG9vc2UgSVAgYWRkcmVzc2VzIGZvciBESENQIGNsaWVudHMgdXNpbmcgYQoraGFzaCBvZiB0aGUgY2xpZW50J3MgTUFDIGFkZHJlc3MuIFRoaXMgbm9ybWFsbHkgYWxsb3dzIGEgY2xpZW50J3MKK2FkZHJlc3MgdG8gcmVtYWluIHN0YWJsZSBsb25nLXRlcm0sIGV2ZW4gaWYgdGhlIGNsaWVudCAgc29tZXRpbWVzIGFsbG93cyBpdHMgREhDUAorbGVhc2UgdG8gZXhwaXJlLiBJbiB0aGlzIGRlZmF1bHQgbW9kZSBJUCBhZGRyZXNzZXMgYXJlIGRpc3RyaWJ1dGVkCitwc2V1ZG8tcmFuZG9tbHkgb3ZlciB0aGUgZW50aXJlIGF2YWlsYWJsZSBhZGRyZXNzIHJhbmdlLiBUaGVyZSBhcmUKK3NvbWV0aW1lcyBjaXJjdW1zdGFuY2VzICh0eXBpY2FsbHkgc2VydmVyIGRlcGxveW1lbnQpIHdoZXJlIGl0IGlzIG1vcmUKK2NvbnZlbmllbnQgdG8gaGF2ZSBJUAorYWRkcmVzc2VzIGFsbG9jYXRlZCBzZXF1ZW50aWFsbHksIHN0YXJ0aW5nIGZyb20gdGhlIGxvd2VzdCBhdmFpbGFibGUKK2FkZHJlc3MsIGFuZCBzZXR0aW5nIHRoaXMgZmxhZyBlbmFibGVzIHRoaXMgbW9kZS4gTm90ZSB0aGF0IGluIHRoZQorc2VxdWVudGlhbCBtb2RlLCBjbGllbnRzIHdoaWNoIGFsbG93IGEgbGVhc2UgdG8gZXhwaXJlIGFyZSBtdWNoIG1vcmUKK2xpa2VseSB0byBtb3ZlIElQIGFkZHJlc3M7IGZvciB0aGlzIHJlYXNvbiBpdCBzaG91bGQgbm90IGJlIGdlbmVyYWxseSB1c2VkLgorLlRQCisuQiAtLXB4ZS1zZXJ2aWNlPVt0YWc6PHRhZz4sXTxDU0E+LDxtZW51IHRleHQ+Wyw8YmFzZW5hbWU+fDxib290c2VydmljZXR5cGU+XVssPHNlcnZlciBhZGRyZXNzPnw8c2VydmVyX25hbWU+XQorTW9zdCB1c2VzIG9mIFBYRSBib290LVJPTVMgc2ltcGx5IGFsbG93IHRoZSBQWEUKK3N5c3RlbSB0byBvYnRhaW4gYW4gSVAgYWRkcmVzcyBhbmQgdGhlbiBkb3dubG9hZCB0aGUgZmlsZSBzcGVjaWZpZWQgYnkKKy5CIGRoY3AtYm9vdAorYW5kIGV4ZWN1dGUgaXQuIEhvd2V2ZXIgdGhlIFBYRSBzeXN0ZW0gaXMgY2FwYWJsZSBvZiBtb3JlIGNvbXBsZXgKK2Z1bmN0aW9ucyB3aGVuIHN1cHBvcnRlZCBieSBhIHN1aXRhYmxlIERIQ1Agc2VydmVyLgorCitUaGlzIHNwZWNpZmllcyBhIGJvb3Qgb3B0aW9uIHdoaWNoIG1heSBhcHBlYXIgaW4gYSBQWEUgYm9vdCBtZW51LiA8Q1NBPiBpcworY2xpZW50IHN5c3RlbSB0eXBlLCBvbmx5IHNlcnZpY2VzIG9mIHRoZSBjb3JyZWN0IHR5cGUgd2lsbCBhcHBlYXIgaW4gYQorbWVudS4gVGhlIGtub3duIHR5cGVzIGFyZSB4ODZQQywgUEM5OCwgSUE2NF9FRkksIEFscGhhLCBBcmNfeDg2LAorSW50ZWxfTGVhbl9DbGllbnQsIElBMzJfRUZJLCAgWDg2LTY0X0VGSSwgWHNjYWxlX0VGSSwgQkNfRUZJLCBBUk0zMl9FRkkgYW5kIEFSTTY0X0VGSTsgYW4KK2ludGVnZXIgbWF5IGJlIHVzZWQgZm9yIG90aGVyIHR5cGVzLiBUaGUKK3BhcmFtZXRlciBhZnRlciB0aGUgbWVudSB0ZXh0IG1heSBiZSBhIGZpbGUgbmFtZSwgaW4gd2hpY2ggY2FzZSBkbnNtYXNxIGFjdHMgYXMgYQorYm9vdCBzZXJ2ZXIgYW5kIGRpcmVjdHMgdGhlIFBYRSBjbGllbnQgdG8gZG93bmxvYWQgdGhlIGZpbGUgYnkgVEZUUCwKK2VpdGhlciBmcm9tIGl0c2VsZiAoCisuQiBlbmFibGUtdGZ0cCAKK211c3QgYmUgc2V0IGZvciB0aGlzIHRvIHdvcmspIG9yIGFub3RoZXIgVEZUUCBzZXJ2ZXIgaWYgdGhlIGZpbmFsIHNlcnZlcgorYWRkcmVzcy9uYW1lIGlzIGdpdmVuLgorTm90ZSB0aGF0IHRoZSAibGF5ZXIiCitzdWZmaXggKG5vcm1hbGx5ICIuMCIpIGlzIHN1cHBsaWVkIGJ5IFBYRSwgYW5kIG5lZWQgbm90IGJlIGFkZGVkIHRvCit0aGUgYmFzZW5hbWUuIEFsdGVybmF0aXZlbHksIHRoZSBiYXNlbmFtZSBtYXkgYmUgYSBmaWxlbmFtZSwgY29tcGxldGUgd2l0aCBzdWZmaXgsIGluIHdoaWNoIGNhc2UKK25vIGxheWVyIHN1ZmZpeCBpcyBhZGRlZC4gSWYgYW4gaW50ZWdlciBib290IHNlcnZpY2UgdHlwZSwgcmF0aGVyIHRoYW4gYSBiYXNlbmFtZQoraXMgZ2l2ZW4sIHRoZW4gdGhlIFBYRSBjbGllbnQgd2lsbCBzZWFyY2ggZm9yIGEKK3N1aXRhYmxlIGJvb3Qgc2VydmljZSBmb3IgdGhhdCB0eXBlIG9uIHRoZSBuZXR3b3JrLiBUaGlzIHNlYXJjaCBtYXkgYmUgZG9uZQorYnkgYnJvYWRjYXN0LCBvciBkaXJlY3QgdG8gYSBzZXJ2ZXIgaWYgaXRzIElQIGFkZHJlc3MvbmFtZSBpcyBwcm92aWRlZC4gIAorSWYgbm8gYm9vdCBzZXJ2aWNlIHR5cGUgb3IgZmlsZW5hbWUgaXMgcHJvdmlkZWQgKG9yIGEgYm9vdCBzZXJ2aWNlIHR5cGUgb2YgMCBpcyBzcGVjaWZpZWQpCit0aGVuIHRoZSBtZW51IGVudHJ5IHdpbGwgYWJvcnQgdGhlIG5ldCBib290IHByb2NlZHVyZSBhbmQKK2NvbnRpbnVlIGJvb3RpbmcgZnJvbSBsb2NhbCBtZWRpYS4gVGhlIHNlcnZlciBhZGRyZXNzIGNhbiBiZSBnaXZlbiBhcyBhIGRvbWFpbgorbmFtZSB3aGljaCBpcyBsb29rZWQgdXAgaW4gL2V0Yy9ob3N0cy4gVGhpcyBuYW1lIGNhbiBiZSBhc3NvY2lhdGVkIGluCisvZXRjL2hvc3RzIHdpdGggbXVsdGlwbGUgSVAgYWRkcmVzc2VzLCB3aGljaCBhcmUgdXNlZCByb3VuZC1yb2Jpbi4KKy5UUAorLkIgLS1weGUtcHJvbXB0PVt0YWc6PHRhZz4sXTxwcm9tcHQ+Wyw8dGltZW91dD5dCitTZXR0aW5nIHRoaXMgcHJvdmlkZXMgYSBwcm9tcHQgdG8gYmUgZGlzcGxheWVkIGFmdGVyIFBYRSBib290LiBJZiB0aGUKK3RpbWVvdXQgaXMgZ2l2ZW4gdGhlbiBhZnRlciB0aGUKK3RpbWVvdXQgaGFzIGVsYXBzZWQgd2l0aCBubyBrZXlib2FyZCBpbnB1dCwgdGhlIGZpcnN0IGF2YWlsYWJsZSBtZW51CitvcHRpb24gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkLiBJZiB0aGUgdGltZW91dCBpcyB6ZXJvIHRoZW4gdGhlIGZpcnN0IGF2YWlsYWJsZSBtZW51CitpdGVtIHdpbGwgYmUgZXhlY3V0ZWQgaW1tZWRpYXRlbHkuIElmIAorLkIgcHhlLXByb21wdAoraXMgb21pdHRlZCB0aGUgc3lzdGVtIHdpbGwgd2FpdCBmb3IgdXNlciBpbnB1dCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUKK2l0ZW1zIGluIHRoZSBtZW51LCBidXQgYm9vdCBpbW1lZGlhdGVseSBpZgordGhlcmUgaXMgb25seSBvbmUuIFNlZQorLkIgcHhlLXNlcnZpY2UgCitmb3IgZGV0YWlscyBvZiBtZW51IGl0ZW1zLgorCitEbnNtYXNxIHN1cHBvcnRzIFBYRSAicHJveHktREhDUCIsIGluIHRoaXMgY2FzZSBhbm90aGVyIERIQ1Agc2VydmVyIG9uCit0aGUgbmV0d29yayBpcyByZXNwb25zaWJsZSBmb3IgYWxsb2NhdGluZyBJUCBhZGRyZXNzZXMsIGFuZCBkbnNtYXNxCitzaW1wbHkgcHJvdmlkZXMgdGhlIGluZm9ybWF0aW9uIGdpdmVuIGluIAorLkIgcHhlLXByb21wdAorYW5kCisuQiBweGUtc2VydmljZQordG8gYWxsb3cgbmV0Ym9vdGluZy4gVGhpcyBtb2RlIGlzIGVuYWJsZWQgdXNpbmcgdGhlCisuQiBwcm94eQora2V5d29yZCBpbgorLkIgZGhjcC1yYW5nZS4KKy5UUCAgCisuQiBcLVgsIC0tZGhjcC1sZWFzZS1tYXg9PG51bWJlcj4KK0xpbWl0cyBkbnNtYXNxIHRvIHRoZSBzcGVjaWZpZWQgbWF4aW11bSBudW1iZXIgb2YgREhDUCBsZWFzZXMuIFRoZQorZGVmYXVsdCBpcyAxMDAwLiBUaGlzIGxpbWl0IGlzIHRvIHByZXZlbnQgRG9TIGF0dGFja3MgZnJvbSBob3N0cyB3aGljaAorY3JlYXRlIHRob3VzYW5kcyBvZiBsZWFzZXMgYW5kIHVzZSBsb3RzIG9mIG1lbW9yeSBpbiB0aGUgZG5zbWFzcQorcHJvY2Vzcy4KKy5UUAorLkIgXC1LLCAtLWRoY3AtYXV0aG9yaXRhdGl2ZQorU2hvdWxkIGJlIHNldCB3aGVuIGRuc21hc3EgaXMgZGVmaW5pdGVseSB0aGUgb25seSBESENQIHNlcnZlciBvbiBhIG5ldHdvcmsuCitGb3IgREhDUHY0LCBpdCBjaGFuZ2VzIHRoZSBiZWhhdmlvdXIgZnJvbSBzdHJpY3QgUkZDIGNvbXBsaWFuY2Ugc28gdGhhdCBESENQIHJlcXVlc3RzIG9uCit1bmtub3duIGxlYXNlcyBmcm9tIHVua25vd24gaG9zdHMgYXJlIG5vdCBpZ25vcmVkLiBUaGlzIGFsbG93cyBuZXcgaG9zdHMKK3RvIGdldCBhIGxlYXNlIHdpdGhvdXQgYSB0ZWRpb3VzIHRpbWVvdXQgdW5kZXIgYWxsIGNpcmN1bXN0YW5jZXMuIEl0IGFsc28gCithbGxvd3MgZG5zbWFzcSB0byByZWJ1aWxkIGl0cyBsZWFzZSBkYXRhYmFzZSB3aXRob3V0IGVhY2ggY2xpZW50IG5lZWRpbmcgdG8gCityZWFjcXVpcmUgYSBsZWFzZSwgaWYgdGhlIGRhdGFiYXNlIGlzIGxvc3QuIEZvciBESENQdjYgaXQgc2V0cyB0aGUKK3ByaW9yaXR5IGluIHJlcGxpZXMgdG8gMjU1ICh0aGUgbWF4aW11bSkgaW5zdGVhZCBvZiAwICh0aGUgbWluaW11bSkuCisuVFAKKy5CIC0tZGhjcC1hbHRlcm5hdGUtcG9ydFs9PHNlcnZlciBwb3J0PlssPGNsaWVudCBwb3J0Pl1dCisoSVB2NCBvbmx5KSBDaGFuZ2UgdGhlIHBvcnRzIHVzZWQgZm9yIERIQ1AgZnJvbSB0aGUgZGVmYXVsdC4gSWYgdGhpcyBvcHRpb24gaXMKK2dpdmVuIGFsb25lLCB3aXRob3V0IGFyZ3VtZW50cywgaXQgY2hhbmdlcyB0aGUgcG9ydHMgdXNlZCBmb3IgREhDUAorZnJvbSA2NyBhbmQgNjggdG8gMTA2NyBhbmQgMTA2OC4gSWYgYSBzaW5nbGUgYXJndW1lbnQgaXMgZ2l2ZW4sIHRoYXQKK3BvcnQgbnVtYmVyIGlzIHVzZWQgZm9yIHRoZSBzZXJ2ZXIgYW5kIHRoZSBwb3J0IG51bWJlciBwbHVzIG9uZSB1c2VkCitmb3IgdGhlIGNsaWVudC4gRmluYWxseSwgdHdvIHBvcnQgbnVtYmVycyBhbGxvd3MgYXJiaXRyYXJ5CitzcGVjaWZpY2F0aW9uIG9mIGJvdGggc2VydmVyIGFuZCBjbGllbnQgcG9ydHMgZm9yIERIQ1AuCisuVFAKKy5CIFwtMywgLS1ib290cC1keW5hbWljWz08bmV0d29yay1pZD5bLDxuZXR3b3JrLWlkPl1dCisoSVB2NCBvbmx5KSBFbmFibGUgZHluYW1pYyBhbGxvY2F0aW9uIG9mIElQIGFkZHJlc3NlcyB0byBCT09UUCBjbGllbnRzLiBVc2UgdGhpcword2l0aCBjYXJlLCBzaW5jZSBlYWNoIGFkZHJlc3MgYWxsb2NhdGVkIHRvIGEgQk9PVFAgY2xpZW50IGlzIGxlYXNlZAorZm9yZXZlciwgYW5kIHRoZXJlZm9yZSBiZWNvbWVzIHBlcm1hbmVudGx5IHVuYXZhaWxhYmxlIGZvciByZS11c2UgYnkKK290aGVyIGhvc3RzLiBpZiB0aGlzIGlzIGdpdmVuIHdpdGhvdXQgdGFncywgdGhlbiBpdCB1bmNvbmRpdGlvbmFsbHkKK2VuYWJsZXMgZHluYW1pYyBhbGxvY2F0aW9uLiBXaXRoIHRhZ3MsIG9ubHkgd2hlbiB0aGUgdGFncyBhcmUgYWxsCitzZXQuIEl0IG1heSBiZSByZXBlYXRlZCB3aXRoIGRpZmZlcmVudCB0YWcgc2V0cy4gCisuVFAKKy5CIFwtNSwgLS1uby1waW5nCisoSVB2NCBvbmx5KSBCeSBkZWZhdWx0LCB0aGUgREhDUCBzZXJ2ZXIgd2lsbCBhdHRlbXB0IHRvIGVuc3VyZSB0aGF0IGFuIGFkZHJlc3MgaXMKK25vdCBpbiB1c2UgYmVmb3JlIGFsbG9jYXRpbmcgaXQgdG8gYSBob3N0LiBJdCBkb2VzIHRoaXMgYnkgc2VuZGluZyBhbgorSUNNUCBlY2hvIHJlcXVlc3QgKGFrYSAicGluZyIpIHRvIHRoZSBhZGRyZXNzIGluIHF1ZXN0aW9uLiBJZiBpdCBnZXRzCithIHJlcGx5LCB0aGVuIHRoZSBhZGRyZXNzIG11c3QgYWxyZWFkeSBiZSBpbiB1c2UsIGFuZCBhbm90aGVyIGlzCit0cmllZC4gVGhpcyBmbGFnIGRpc2FibGVzIHRoaXMgY2hlY2suIFVzZSB3aXRoIGNhdXRpb24uCisuVFAKKy5CIC0tbG9nLWRoY3AKK0V4dHJhIGxvZ2dpbmcgZm9yIERIQ1A6IGxvZyBhbGwgdGhlIG9wdGlvbnMgc2VudCB0byBESENQIGNsaWVudHMgYW5kCit0aGUgdGFncyB1c2VkIHRvIGRldGVybWluZSB0aGVtLgorLlRQCisuQiAtLXF1aWV0LWRoY3AsIC0tcXVpZXQtZGhjcDYsIC0tcXVpZXQtcmEKK1N1cHByZXNzIGxvZ2dpbmcgb2YgdGhlIHJvdXRpbmUgb3BlcmF0aW9uIG9mIHRoZXNlIHByb3RvY29scy4gRXJyb3JzIGFuZAorcHJvYmxlbXMgd2lsbCBzdGlsbCBiZSBsb2dnZWQuIC0tcXVpZXQtZGhjcCBhbmQgcXVpZXQtZGhjcDYgYXJlCitvdmVyLXJpZGRlbiBieSAtLWxvZy1kaGNwLgorLlRQCisuQiBcLWwsIC0tZGhjcC1sZWFzZWZpbGU9PHBhdGg+CitVc2UgdGhlIHNwZWNpZmllZCBmaWxlIHRvIHN0b3JlIERIQ1AgbGVhc2UgaW5mb3JtYXRpb24uCisuVFAgCisuQiAtLWRoY3AtZHVpZD08ZW50ZXJwcmlzZS1pZD4sPHVpZD4KKyhJUHY2IG9ubHkpIFNwZWNpZnkgdGhlIHNlcnZlciBwZXJzaXN0ZW50IFVJRCB3aGljaCB0aGUgREhDUHY2IHNlcnZlcgord2lsbCB1c2UuIFRoaXMgb3B0aW9uIGlzIG5vdCBub3JtYWxseSByZXF1aXJlZCBhcyBkbnNtYXNxIGNyZWF0ZXMgYQorRFVJRCBhdXRvbWF0aWNhbGx5IHdoZW4gaXQgaXMgZmlyc3QgbmVlZGVkLiBXaGVuIGdpdmVuLCB0aGlzIG9wdGlvbgorcHJvdmlkZXMgZG5zbWFzcSB0aGUgZGF0YSByZXF1aXJlZCB0byBjcmVhdGUgYSBEVUlELUVOIHR5cGUgRFVJRC4gTm90ZQordGhhdCBvbmNlIHNldCwgdGhlIERVSUQgaXMgc3RvcmVkIGluIHRoZSBsZWFzZSBkYXRhYmFzZSwgc28gdG8gY2hhbmdlIGJldHdlZW4gRFVJRC1FTiBhbmQKK2F1dG9tYXRpY2FsbHkgY3JlYXRlZCBEVUlEcyBvciB2aWNlLXZlcnNhLCB0aGUgbGVhc2UgZGF0YWJhc2UgbXVzdCBiZQorcmUtaW5pdGlhbGlzZWQuIFRoZSBlbnRlcnByaXNlLWlkIGlzIGFzc2lnbmVkIGJ5IElBTkEsIGFuZCB0aGUgdWlkIGlzIGEKK3N0cmluZyBvZiBoZXggb2N0ZXRzIHVuaXF1ZSB0byBhIHBhcnRpY3VsYXIgZGV2aWNlLgorLlRQCisuQiBcLTYgLS1kaGNwLXNjcmlwdD08cGF0aD4KK1doZW5ldmVyIGEgbmV3IERIQ1AgbGVhc2UgaXMgY3JlYXRlZCwgb3IgYW4gb2xkIG9uZSBkZXN0cm95ZWQsIG9yIGEKK1RGVFAgZmlsZSB0cmFuc2ZlciBjb21wbGV0ZXMsIHRoZQorZXhlY3V0YWJsZSBzcGVjaWZpZWQgYnkgdGhpcyBvcHRpb24gaXMgcnVuLiAgPHBhdGg+CittdXN0IGJlIGFuIGFic29sdXRlIHBhdGhuYW1lLCBubyBQQVRIIHNlYXJjaCBvY2N1cnMuIAorVGhlIGFyZ3VtZW50cyB0byB0aGUgcHJvY2VzcworYXJlICJhZGQiLCAib2xkIiBvciAiZGVsIiwgdGhlIE1BQworYWRkcmVzcyBvZiB0aGUgaG9zdCAob3IgRFVJRCBmb3IgSVB2NikgLCB0aGUgSVAgYWRkcmVzcywgYW5kIHRoZSBob3N0bmFtZSwKK2lmIGtub3duLiAiYWRkIiBtZWFucyBhIGxlYXNlIGhhcyBiZWVuIGNyZWF0ZWQsICJkZWwiIG1lYW5zIGl0IGhhcworYmVlbiBkZXN0cm95ZWQsICJvbGQiIGlzIGEgbm90aWZpY2F0aW9uIG9mIGFuIGV4aXN0aW5nIGxlYXNlIHdoZW4KK2Ruc21hc3Egc3RhcnRzIG9yIGEgY2hhbmdlIHRvIE1BQyBhZGRyZXNzIG9yIGhvc3RuYW1lIG9mIGFuIGV4aXN0aW5nCitsZWFzZSAoYWxzbywgbGVhc2UgbGVuZ3RoIG9yIGV4cGlyeSBhbmQgY2xpZW50LWlkLCBpZiBsZWFzZWZpbGUtcm8gaXMgc2V0KS4KK0lmIHRoZSBNQUMgYWRkcmVzcyBpcyBmcm9tIGEgbmV0d29yayB0eXBlIG90aGVyIHRoYW4gZXRoZXJuZXQsCitpdCB3aWxsIGhhdmUgdGhlIG5ldHdvcmsgdHlwZSBwcmVwZW5kZWQsIGVnICIwNi0wMToyMzo0NTo2Nzo4OTphYiIgZm9yCit0b2tlbiByaW5nLiBUaGUgcHJvY2VzcyBpcyBydW4gYXMgcm9vdCAoYXNzdW1pbmcgdGhhdCBkbnNtYXNxIHdhcyBvcmlnaW5hbGx5IHJ1biBhcworcm9vdCkgZXZlbiBpZiBkbnNtYXNxIGlzIGNvbmZpZ3VyZWQgdG8gY2hhbmdlIFVJRCB0byBhbiB1bnByaXZpbGVnZWQgdXNlci4KKworVGhlIGVudmlyb25tZW50IGlzIGluaGVyaXRlZCBmcm9tIHRoZSBpbnZva2VyIG9mIGRuc21hc3EsIHdpdGggc29tZSBvcgorYWxsIG9mIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGFkZGVkCisKK0ZvciBib3RoIElQdjQgYW5kIElQdjY6CisKK0ROU01BU1FfRE9NQUlOIGlmIHRoZSBmdWxseS1xdWFsaWZpZWQgZG9tYWluIG5hbWUgb2YgdGhlIGhvc3QgaXMKK2tub3duLCB0aGlzIGlzIHNldCB0byB0aGUgIGRvbWFpbiBwYXJ0LiAoTm90ZSB0aGF0IHRoZSBob3N0bmFtZSBwYXNzZWQKK3RvIHRoZSBzY3JpcHQgYXMgYW4gYXJndW1lbnQgaXMgbmV2ZXIgZnVsbHktcXVhbGlmaWVkLikKKworSWYgdGhlIGNsaWVudCBwcm92aWRlcyBhIGhvc3RuYW1lLCBETlNNQVNRX1NVUFBMSUVEX0hPU1ROQU1FCisKK0lmIHRoZSBjbGllbnQgcHJvdmlkZXMgdXNlci1jbGFzc2VzLCBETlNNQVNRX1VTRVJfQ0xBU1MwLi5ETlNNQVNRX1VTRVJfQ0xBU1NuIAorCitJZiBkbnNtYXNxIHdhcyBjb21waWxlZCB3aXRoIEhBVkVfQlJPS0VOX1JUQywgdGhlbgordGhlIGxlbmd0aCBvZiB0aGUgbGVhc2UgKGluIHNlY29uZHMpIGlzIHN0b3JlZCBpbgorRE5TTUFTUV9MRUFTRV9MRU5HVEgsIG90aGVyd2lzZSB0aGUgdGltZSBvZiBsZWFzZSBleHBpcnkgaXMgc3RvcmVkIGluCitETlNNQVNRX0xFQVNFX0VYUElSRVMuIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyB1bnRpbCBsZWFzZSBleHBpcnkgaXMKK2Fsd2F5cyBzdG9yZWQgaW4gRE5TTUFTUV9USU1FX1JFTUFJTklORy4gCisKK0lmIGEgbGVhc2UgdXNlZCB0byBoYXZlIGEgaG9zdG5hbWUsIHdoaWNoIGlzCityZW1vdmVkLCBhbiAib2xkIiBldmVudCBpcyBnZW5lcmF0ZWQgd2l0aCB0aGUgbmV3IHN0YXRlIG9mIHRoZSBsZWFzZSwgCitpZSBubyBuYW1lLCBhbmQgdGhlIGZvcm1lciBuYW1lIGlzIHByb3ZpZGVkIGluIHRoZSBlbnZpcm9ubWVudCAKK3ZhcmlhYmxlIEROU01BU1FfT0xEX0hPU1ROQU1FLiAKKworRE5TTUFTUV9JTlRFUkZBQ0Ugc3RvcmVzIHRoZSBuYW1lIG9mCit0aGUgaW50ZXJmYWNlIG9uIHdoaWNoIHRoZSByZXF1ZXN0IGFycml2ZWQ7IHRoaXMgaXMgbm90IHNldCBmb3IgIm9sZCIKK2FjdGlvbnMgd2hlbiBkbnNtYXNxIHJlc3RhcnRzLiAKKworRE5TTUFTUV9SRUxBWV9BRERSRVNTIGlzIHNldCBpZiB0aGUgY2xpZW50Cit1c2VkIGEgREhDUCByZWxheSB0byBjb250YWN0IGRuc21hc3EgYW5kIHRoZSBJUCBhZGRyZXNzIG9mIHRoZSByZWxheQoraXMga25vd24uIAorCitETlNNQVNRX1RBR1MgY29udGFpbnMgYWxsIHRoZSB0YWdzIHNldCBkdXJpbmcgdGhlCitESENQIHRyYW5zYWN0aW9uLCBzZXBhcmF0ZWQgYnkgc3BhY2VzLgorCitETlNNQVNRX0xPR19ESENQIGlzIHNldCBpZgorLkIgLS1sb2ctZGhjcAoraXMgaW4gZWZmZWN0LgorCitGb3IgSVB2NCBvbmx5OgorCitETlNNQVNRX0NMSUVOVF9JRCBpZiB0aGUgaG9zdCBwcm92aWRlZCBhIGNsaWVudC1pZC4KKworRE5TTUFTUV9DSVJDVUlUX0lELCBETlNNQVNRX1NVQlNDUklCRVJfSUQsIEROU01BU1FfUkVNT1RFX0lEIGlmIGEKK0RIQ1AgcmVsYXktYWdlbnQgYWRkZWQgYW55IG9mIHRoZXNlIG9wdGlvbnMuCisgCitJZiB0aGUgY2xpZW50IHByb3ZpZGVzIHZlbmRvci1jbGFzcywgRE5TTUFTUV9WRU5ET1JfQ0xBU1MuCisKK0ROU01BU1FfUkVRVUVTVEVEX09QVElPTlMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgZGVjaW1hbCB2YWx1ZXMgaW4gdGhlIFBhcmFtZXRlciBSZXF1ZXN0IExpc3Qgb3B0aW9uLCBjb21tYSBzZXBhcmF0ZWQsIGlmIHRoZSBwYXJhbWV0ZXIgcmVxdWVzdCBsaXN0IG9wdGlvbiBpcyBwcm92aWRlZCBieSB0aGUgY2xpZW50LgorCitGb3IgSVB2NiBvbmx5OgorCitJZiB0aGUgY2xpZW50IHByb3ZpZGVzIHZlbmRvci1jbGFzcywgRE5TTUFTUV9WRU5ET1JfQ0xBU1NfSUQsCitjb250YWluaW5nIHRoZSBJQU5BIGVudGVycHJpc2UgaWQgZm9yIHRoZSBjbGFzcywgYW5kCitETlNNQVNRX1ZFTkRPUl9DTEFTUzAuLkROU01BU1FfVkVORE9SX0NMQVNTbiBmb3IgdGhlIGRhdGEuCisKK0ROU01BU1FfU0VSVkVSX0RVSUQgY29udGFpbmluZyB0aGUgRFVJRCBvZiB0aGUgc2VydmVyOiB0aGlzIGlzIHRoZSBzYW1lIGZvcgorZXZlcnkgY2FsbCB0byB0aGUgc2NyaXB0LgorCitETlNNQVNRX0lBSUQgY29udGFpbmluZyB0aGUgSUFJRCBmb3IgdGhlIGxlYXNlLiBJZiB0aGUgbGVhc2UgaXMgYQordGVtcG9yYXJ5IGFsbG9jYXRpb24sIHRoaXMgaXMgcHJlZml4ZWQgdG8gJ1QnLgorCitETlNNQVNRX01BQyBjb250YWluaW5nIHRoZSBNQUMgYWRkcmVzcyBvZiB0aGUgY2xpZW50LCBpZiBrbm93bi4KKworTm90ZSB0aGF0IHRoZSBzdXBwbGllZCBob3N0bmFtZSwgdmVuZG9yY2xhc3MgYW5kIHVzZXJjbGFzcyBkYXRhIGlzCitvbmx5ICBzdXBwbGllZCBmb3IKKyJhZGQiIGFjdGlvbnMgb3IgIm9sZCIgYWN0aW9ucyB3aGVuIGEgaG9zdCByZXN1bWVzIGFuIGV4aXN0aW5nIGxlYXNlLAorc2luY2UgdGhlc2UgZGF0YSBhcmUgbm90IGhlbGQgaW4gZG5zbWFzcSdzIGxlYXNlCitkYXRhYmFzZS4KKworCisKK0FsbCBmaWxlIGRlc2NyaXB0b3JzIGFyZQorY2xvc2VkIGV4Y2VwdCBzdGRpbiwgd2hpY2ggaXMgb3BlbiB0byAvZGV2L251bGwsIGFuZCBzdGRvdXQgYW5kIHN0ZGVyciB3aGljaCBjYXB0dXJlIG91dHB1dCBmb3IgbG9nZ2luZyBieSBkbnNtYXNxLiAKKyhJbiBkZWJ1ZyBtb2RlLCBzdGRpbywgc3Rkb3V0IGFuZCBzdGRlcnIgZmlsZSBhcmUgbGVmdCBhcyB0aG9zZSBpbmhlcml0ZWQgZnJvbSB0aGUgaW52b2tlciBvZiBkbnNtYXNxKS4KKworVGhlIHNjcmlwdCBpcyBub3QgaW52b2tlZCBjb25jdXJyZW50bHk6IGF0IG1vc3Qgb25lIGluc3RhbmNlCitvZiB0aGUgc2NyaXB0IGlzIGV2ZXIgcnVubmluZyAoZG5zbWFzcSB3YWl0cyBmb3IgYW4gaW5zdGFuY2Ugb2Ygc2NyaXB0IHRvIGV4aXQKK2JlZm9yZSBydW5uaW5nIHRoZSBuZXh0KS4gQ2hhbmdlcyB0byB0aGUgbGVhc2UgZGF0YWJhc2UgYXJlIHdoaWNoCityZXF1aXJlIHRoZSBzY3JpcHQgdG8gYmUgaW52b2tlZCBhcmUgcXVldWVkIGF3YWl0aW5nIGV4aXQgb2YgYSBydW5uaW5nIGluc3RhbmNlLgorSWYgdGhpcyBxdWV1ZWluZyBhbGxvd3MgbXVsdGlwbGUgc3RhdGUgY2hhbmdlcyBvY2N1ciB0byBhIHNpbmdsZQorbGVhc2UgYmVmb3JlIHRoZSBzY3JpcHQgY2FuIGJlIHJ1biB0aGVuIAorZWFybGllciBzdGF0ZXMgYXJlIGRpc2NhcmRlZCBhbmQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhhdCBsZWFzZSBpcworcmVmbGVjdGVkIHdoZW4gdGhlIHNjcmlwdCBmaW5hbGx5IHJ1bnMuIAorCitBdCBkbnNtYXNxIHN0YXJ0dXAsIHRoZSBzY3JpcHQgd2lsbCBiZSBpbnZva2VkIGZvcgorYWxsIGV4aXN0aW5nIGxlYXNlcyBhcyB0aGV5IGFyZSByZWFkIGZyb20gdGhlIGxlYXNlIGZpbGUuIEV4cGlyZWQKK2xlYXNlcyB3aWxsIGJlIGNhbGxlZCB3aXRoICJkZWwiIGFuZCBvdGhlcnMgd2l0aCAib2xkIi4gV2hlbiBkbnNtYXNxCityZWNlaXZlcyBhIEhVUCBzaWduYWwsIHRoZSBzY3JpcHQgd2lsbCBiZSBpbnZva2VkIGZvciBleGlzdGluZyBsZWFzZXMKK3dpdGggYW4gIm9sZCIgZXZlbnQuCisKKworVGhlcmUgYXJlIGZvdXIgZnVydGhlciBhY3Rpb25zIHdoaWNoIG1heSBhcHBlYXIgYXMgdGhlIGZpcnN0IGFyZ3VtZW50Cit0byB0aGUgc2NyaXB0LCAiaW5pdCIsICJhcnAtYWRkIiwgImFycC1kZWwiIGFuZCAidGZ0cCIuIE1vcmUgbWF5IGJlIGFkZGVkIGluIHRoZSBmdXR1cmUsIHNvCitzY3JpcHRzIHNob3VsZCBiZSB3cml0dGVuIHRvIGlnbm9yZSB1bmtub3duIGFjdGlvbnMuICJpbml0IiBpcworZGVzY3JpYmVkIGJlbG93IGluIAorLkIgLS1sZWFzZWZpbGUtcm8KK1RoZSAidGZ0cCIgYWN0aW9uIGlzIGludm9rZWQgd2hlbiBhIFRGVFAgZmlsZSB0cmFuc2ZlciBjb21wbGV0ZXM6IHRoZQorYXJndW1lbnRzIGFyZSB0aGUgZmlsZSBzaXplIGluIGJ5dGVzLCB0aGUgYWRkcmVzcyB0byB3aGljaCB0aGUgZmlsZQord2FzIHNlbnQsIGFuZCB0aGUgY29tcGxldGUgcGF0aG5hbWUgb2YgdGhlIGZpbGUuCisgCitUaGUgImFycC1hZGQiIGFuZCAiYXJwLWRlbCIgYWN0aW9ucyBhcmUgb25seSBjYWxsZWQgaWYgZW5hYmxlZCB3aXRoCisuQiAtLXNjcmlwdC1hcnAKK1RoZXkgYXJlIGFyZSBzdXBwbGllZCB3aXRoIGEgTUFDIGFkZHJlc3MgYW5kIElQIGFkZHJlc3MgYXMgYXJndW1lbnRzLiAiYXJwLWFkZCIgaW5kaWNhdGVzCit0aGUgYXJyaXZhbCBvZiBhIG5ldyBlbnRyeSBpbiB0aGUgQVJQIG9yIG5laWdoYm91ciB0YWJsZSwgYW5kICJhcnAtZGVsIiBpbmRpY2F0ZXMgdGhlIGRlbGV0aW9uIG9mIHNhbWUuCisKKy5UUAorLkIgLS1kaGNwLWx1YXNjcmlwdD08cGF0aD4KK1NwZWNpZnkgYSBzY3JpcHQgd3JpdHRlbiBpbiBMdWEsIHRvIGJlIHJ1biB3aGVuIGxlYXNlcyBhcmUgY3JlYXRlZCwKK2Rlc3Ryb3llZCBvciBjaGFuZ2VkLiBUbyB1c2UgdGhpcyBvcHRpb24sIGRuc21hc3EgbXVzdCBiZSBjb21waWxlZAord2l0aCB0aGUgY29ycmVjdCBzdXBwb3J0LiBUaGUgTHVhIGludGVycHJldGVyIGlzIGluaXRpYWxpc2VkIG9uY2UsIHdoZW4KK2Ruc21hc3Egc3RhcnRzLCBzbyB0aGF0IGdsb2JhbCB2YXJpYWJsZXMgcGVyc2lzdCBiZXR3ZWVuIGxlYXNlCitldmVudHMuIFRoZSBMdWEgY29kZSBtdXN0IGRlZmluZSBhCisuQiBsZWFzZQorZnVuY3Rpb24sIGFuZCBtYXkgcHJvdmlkZQorLkIgaW5pdAorYW5kCisuQiBzaHV0ZG93bgorZnVuY3Rpb25zLCB3aGljaCBhcmUgY2FsbGVkLCB3aXRob3V0IGFyZ3VtZW50cyB3aGVuIGRuc21hc3Egc3RhcnRzIHVwCithbmQgdGVybWluYXRlcy4gSXQgbWF5IGFsc28gcHJvdmlkZSBhIAorLkIgdGZ0cAorZnVuY3Rpb24uCisKK1RoZSAKKy5CIGxlYXNlCitmdW5jdGlvbiByZWNlaXZlcyB0aGUgaW5mb3JtYXRpb24gZGV0YWlsZWQgaW4gCisuQiAtLWRoY3Atc2NyaXB0LiAKK0l0IGdldHMgdHdvIGFyZ3VtZW50cywgZmlyc3RseSB0aGUgYWN0aW9uLCB3aGljaCBpcyBhIHN0cmluZworY29udGFpbmluZywgImFkZCIsICJvbGQiIG9yICJkZWwiLCBhbmQgc2Vjb25kbHkgYSB0YWJsZSBvZiB0YWcgdmFsdWUKK3BhaXJzLiBUaGUgdGFncyBtb3N0bHkgY29ycmVzcG9uZCB0byB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzCitkZXRhaWxlZCBhYm92ZSwgZm9yIGluc3RhbmNlIHRoZSB0YWcgImRvbWFpbiIgaG9sZHMgdGhlIHNhbWUgZGF0YSBhcwordGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEROU01BU1FfRE9NQUlOLiBUaGVyZSBhcmUgYSBmZXcgZXh0cmEgdGFncword2hpY2ggaG9sZCB0aGUgZGF0YSBzdXBwbGllZCBhcyBhcmd1bWVudHMgdG8KKy5CIC0tZGhjcC1zY3JpcHQuIAorVGhlc2UgYXJlIAorLkIgbWFjX2FkZHJlc3MsIGlwX2FkZHJlc3MKK2FuZCAKKy5CIGhvc3RuYW1lCitmb3IgSVB2NCwgYW5kIAorLkIgY2xpZW50X2R1aWQsIGlwX2FkZHJlc3MKK2FuZCAKKy5CIGhvc3RuYW1lCitmb3IgSVB2Ni4KKworVGhlICAKKy5CIHRmdHAKK2Z1bmN0aW9uIGlzIGNhbGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlIGxlYXNlIGZ1bmN0aW9uLCBhbmQgdGhlCit0YWJsZSBob2xkcyB0aGUgdGFncyAKKy5CIGRlc3RpbmF0aW9uX2FkZHJlc3MsCisuQiBmaWxlX25hbWUKK2FuZCAKKy5CIGZpbGVfc2l6ZS4KKworVGhlIAorLkIgYXJwCithbmQKKy5CIGFycC1vbGQKK2Z1bmN0aW9ucyBhcmUgY2FsbGVkIG9ubHkgd2hlbiBlbmFibGVkIHdpdGgKKy5CIC0tc2NyaXB0LWFycAorYW5kIGhhdmUgYSB0YWJsZSB3aGljaCBob2xkcyB0aGUgdGFncworLkIgbWFjX2FkZHJlc3MKK2FuZAorLkIgY2xpZW50X2FkZHJlc3MuCisuVFAKKy5CIC0tZGhjcC1zY3JpcHR1c2VyCitTcGVjaWZ5IHRoZSB1c2VyIGFzIHdoaWNoIHRvIHJ1biB0aGUgbGVhc2UtY2hhbmdlIHNjcmlwdCBvciBMdWEgc2NyaXB0LiBUaGlzIGRlZmF1bHRzIHRvIHJvb3QsIGJ1dCBjYW4gYmUgY2hhbmdlZCB0byBhbm90aGVyIHVzZXIgdXNpbmcgdGhpcyBmbGFnLiAKKy5UUAorLkIgLS1zY3JpcHQtYXJwCitFbmFibGUgdGhlICJhcnAiIGFuZCAiYXJwLW9sZCIgZnVuY3Rpb25zIGluIHRoZSBkaGNwLXNjcmlwdCBhbmQgZGhjcC1sdWFzY3JpcHQuCisuVFAKKy5CIFwtOSwgLS1sZWFzZWZpbGUtcm8KK0NvbXBsZXRlbHkgc3VwcHJlc3MgdXNlIG9mIHRoZSBsZWFzZSBkYXRhYmFzZSBmaWxlLiBUaGUgZmlsZSB3aWxsIG5vdAorYmUgY3JlYXRlZCwgcmVhZCwgb3Igd3JpdHRlbi4gQ2hhbmdlIHRoZSB3YXkgdGhlIGxlYXNlLWNoYW5nZQorc2NyaXB0IChpZiBvbmUgaXMgcHJvdmlkZWQpIGlzIGNhbGxlZCwgc28gdGhhdCB0aGUgbGVhc2UgZGF0YWJhc2UgbWF5CitiZSBtYWludGFpbmVkIGluIGV4dGVybmFsIHN0b3JhZ2UgYnkgdGhlIHNjcmlwdC4gSW4gYWRkaXRpb24gdG8gdGhlCitpbnZvY2F0aW9ucyAgZ2l2ZW4gaW4gCisuQiAgLS1kaGNwLXNjcmlwdAordGhlIGxlYXNlLWNoYW5nZSBzY3JpcHQgaXMgY2FsbGVkIG9uY2UsIGF0IGRuc21hc3Egc3RhcnR1cCwgd2l0aCB0aGUKK3NpbmdsZSBhcmd1bWVudCAiaW5pdCIuIFdoZW4gY2FsbGVkIGxpa2UgdGhpcyB0aGUgc2NyaXB0IHNob3VsZCB3cml0ZQordGhlIHNhdmVkIHN0YXRlIG9mIHRoZSBsZWFzZSBkYXRhYmFzZSwgaW4gZG5zbWFzcSBsZWFzZWZpbGUgZm9ybWF0LCB0bworc3Rkb3V0IGFuZCBleGl0IHdpdGggemVybyBleGl0IGNvZGUuIFNldHRpbmcgdGhpcworb3B0aW9uIGFsc28gZm9yY2VzIHRoZSBsZWFzZWNoYW5nZSBzY3JpcHQgdG8gYmUgY2FsbGVkIG9uIGNoYW5nZXMKK3RvIHRoZSBjbGllbnQtaWQgYW5kIGxlYXNlIGxlbmd0aCBhbmQgZXhwaXJ5IHRpbWUuCisuVFAKKy5CIC0tYnJpZGdlLWludGVyZmFjZT08aW50ZXJmYWNlPiw8YWxpYXM+Wyw8YWxpYXM+XQorVHJlYXQgREhDUCAodjQgYW5kIHY2KSByZXF1ZXN0IGFuZCBJUHY2IFJvdXRlciBTb2xpY2l0IHBhY2tldHMKK2Fycml2aW5nIGF0IGFueSBvZiB0aGUgPGFsaWFzPiBpbnRlcmZhY2VzIGFzIGlmIHRoZXkgaGFkIGFycml2ZWQgYXQKKzxpbnRlcmZhY2U+LiAgVGhpcyBvcHRpb24gYWxsb3dzIGRuc21hc3EgdG8gcHJvdmlkZSBESENQIGFuZCBSQQorc2VydmljZSBvdmVyIHVuYWRkcmVzc2VkIGFuZCB1bmJyaWRnZWQgRXRoZXJuZXQgaW50ZXJmYWNlcywgZS5nLiBvbiBhbgorT3BlblN0YWNrIGNvbXB1dGUgaG9zdCB3aGVyZSBlYWNoIHN1Y2ggaW50ZXJmYWNlIGlzIGEgVEFQIGludGVyZmFjZSB0bworYSBWTSwgb3IgYXMgaW4gIm9sZCBzdHlsZSBicmlkZ2luZyIgb24gQlNEIHBsYXRmb3Jtcy4gIEEgdHJhaWxpbmcgJyonCit3aWxkY2FyZCBjYW4gYmUgdXNlZCBpbiBlYWNoIDxhbGlhcz4uCisuVFAKKy5CIFwtcywgLS1kb21haW49PGRvbWFpbj5bLDxhZGRyZXNzIHJhbmdlPlssbG9jYWxdXQorU3BlY2lmaWVzIEROUyBkb21haW5zIGZvciB0aGUgREhDUCBzZXJ2ZXIuIERvbWFpbnMgbWF5IGJlIGJlIGdpdmVuIAordW5jb25kaXRpb25hbGx5ICh3aXRob3V0IHRoZSBJUCByYW5nZSkgb3IgZm9yIGxpbWl0ZWQgSVAgcmFuZ2VzLiBUaGlzIGhhcyB0d28gZWZmZWN0czsKK2ZpcnN0bHkgaXQgY2F1c2VzIHRoZSBESENQIHNlcnZlciB0byByZXR1cm4gdGhlIGRvbWFpbiB0byBhbnkgaG9zdHMKK3doaWNoIHJlcXVlc3QgaXQsIGFuZCBzZWNvbmRseSBpdCBzZXRzIHRoZSBkb21haW4gd2hpY2ggaXQgaXMgbGVnYWwKK2ZvciBESENQLWNvbmZpZ3VyZWQgaG9zdHMgdG8gY2xhaW0uIFRoZSBpbnRlbnRpb24gaXMgdG8gY29uc3RyYWluCitob3N0bmFtZXMgc28gdGhhdCBhbiB1bnRydXN0ZWQgaG9zdCBvbiB0aGUgTEFOIGNhbm5vdCBhZHZlcnRpc2UgCitpdHMgbmFtZSB2aWEgZGhjcCBhcyBlLmcuICJtaWNyb3NvZnQuY29tIiBhbmQgY2FwdHVyZSB0cmFmZmljIG5vdCAKK21lYW50IGZvciBpdC4gSWYgbm8gZG9tYWluIHN1ZmZpeCBpcyBzcGVjaWZpZWQsIHRoZW4gYW55IERIQ1AKK2hvc3RuYW1lIHdpdGggYSBkb21haW4gcGFydCAoaWUgd2l0aCBhIHBlcmlvZCkgd2lsbCBiZSBkaXNhbGxvd2VkIAorYW5kIGxvZ2dlZC4gSWYgc3VmZml4IGlzIHNwZWNpZmllZCwgdGhlbiBob3N0bmFtZXMgd2l0aCBhIGRvbWFpbiAKK3BhcnQgYXJlIGFsbG93ZWQsIHByb3ZpZGVkIHRoZSBkb21haW4gcGFydCBtYXRjaGVzIHRoZSBzdWZmaXguIEluCithZGRpdGlvbiwgd2hlbiBhIHN1ZmZpeCBpcyBzZXQgdGhlbiBob3N0bmFtZXMgd2l0aG91dCBhIGRvbWFpbgorcGFydCBoYXZlIHRoZSBzdWZmaXggYWRkZWQgYXMgYW4gb3B0aW9uYWwgZG9tYWluIHBhcnQuIEVnIG9uIG15IG5ldHdvcmsgSSBjYW4gc2V0IAorLkIgLS1kb21haW49dGhla2VsbGV5cy5vcmcudWsKK2FuZCBoYXZlIGEgbWFjaGluZSB3aG9zZSBESENQIGhvc3RuYW1lIGlzICJsYXB0b3AiLiBUaGUgSVAgYWRkcmVzcyBmb3IgdGhhdCBtYWNoaW5lIGlzIGF2YWlsYWJsZSBmcm9tIAorLkIgZG5zbWFzcQorYm90aCBhcyAibGFwdG9wIiBhbmQgImxhcHRvcC50aGVrZWxsZXlzLm9yZy51ayIuIElmIHRoZSBkb21haW4gaXMKK2dpdmVuIGFzICIjIiB0aGVuIHRoZSBkb21haW4gaXMgcmVhZCBmcm9tIHRoZSBmaXJzdCAic2VhcmNoIiBkaXJlY3RpdmUKK2luIC9ldGMvcmVzb2x2LmNvbmYgKG9yIGVxdWl2YWxlbnQpLgorCitUaGUgYWRkcmVzcyByYW5nZSBjYW4gYmUgb2YgdGhlIGZvcm0KKzxpcCBhZGRyZXNzPiw8aXAgYWRkcmVzcz4gb3IgPGlwIGFkZHJlc3M+LzxuZXRtYXNrPiBvciBqdXN0IGEgc2luZ2xlCis8aXAgYWRkcmVzcz4uIFNlZSAKKy5CIC0tZGhjcC1mcWRuCit3aGljaCBjYW4gY2hhbmdlIHRoZSBiZWhhdmlvdXIgb2YgZG5zbWFzcSB3aXRoIGRvbWFpbnMuCisKK0lmIHRoZSBhZGRyZXNzIHJhbmdlIGlzIGdpdmVuIGFzIGlwLWFkZHJlc3MvbmV0d29yay1zaXplLCB0aGVuIGEKK2FkZGl0aW9uYWwgZmxhZyAibG9jYWwiIG1heSBiZSBzdXBwbGllZCB3aGljaCBoYXMgdGhlIGVmZmVjdCBvZiBhZGRpbmcKKy0tbG9jYWwgZGVjbGFyYXRpb25zIGZvciBmb3J3YXJkIGFuZCByZXZlcnNlIEROUyBxdWVyaWVzLiBFZy4KKy5CIC0tZG9tYWluPXRoZWtlbGxleXMub3JnLnVrLDE5Mi4xNjguMC4wLzI0LGxvY2FsCitpcyBpZGVudGljYWwgdG8KKy5CIC0tZG9tYWluPXRoZWtlbGxleXMub3JnLnVrLDE5Mi4xNjguMC4wLzI0CistLWxvY2FsPS90aGVrZWxsZXlzLm9yZy51ay8gLS1sb2NhbD0vMC4xNjguMTkyLmluLWFkZHIuYXJwYS8KK1RoZSBuZXR3b3JrIHNpemUgbXVzdCBiZSA4LCAxNiBvciAyNCBmb3IgdGhpcyB0byBiZSBsZWdhbC4KKy5UUAorLkIgLS1kaGNwLWZxZG4KK0luIHRoZSBkZWZhdWx0IG1vZGUsIGRuc21hc3EgaW5zZXJ0cyB0aGUgdW5xdWFsaWZpZWQgbmFtZXMgb2YKK0RIQ1AgY2xpZW50cyBpbnRvIHRoZSBETlMuIEZvciB0aGlzIHJlYXNvbiwgdGhlIG5hbWVzIG11c3QgYmUgdW5pcXVlLAorZXZlbiBpZiB0d28gY2xpZW50cyB3aGljaCBoYXZlIHRoZSBzYW1lIG5hbWUgYXJlIGluIGRpZmZlcmVudAorZG9tYWlucy4gSWYgYSBzZWNvbmQgREhDUCBjbGllbnQgYXBwZWFycyB3aGljaCBoYXMgdGhlIHNhbWUgbmFtZSBhcyBhbgorZXhpc3RpbmcgY2xpZW50LCB0aGUgbmFtZSBpcyB0cmFuc2ZlcnJlZCB0byB0aGUgbmV3IGNsaWVudC4gSWYgCisuQiAtLWRoY3AtZnFkbgoraXMgc2V0LCB0aGlzIGJlaGF2aW91ciBjaGFuZ2VzOiB0aGUgdW5xdWFsaWZpZWQgbmFtZSBpcyBubyBsb25nZXIKK3B1dCBpbiB0aGUgRE5TLCBvbmx5IHRoZSBxdWFsaWZpZWQgbmFtZS4gVHdvIERIQ1AgY2xpZW50cyB3aXRoIHRoZQorc2FtZSBuYW1lIG1heSBib3RoIGtlZXAgdGhlIG5hbWUsIHByb3ZpZGVkIHRoYXQgdGhlIGRvbWFpbiBwYXJ0IGlzCitkaWZmZXJlbnQgKGllIHRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZXMgZGlmZmVyLikgVG8gZW5zdXJlIHRoYXQgYWxsCituYW1lcyBoYXZlIGEgZG9tYWluIHBhcnQsIHRoZXJlIG11c3QgYmUgYXQgbGVhc3QgCisuQiAtLWRvbWFpbiAKK3dpdGhvdXQgYW4gYWRkcmVzcyBzcGVjaWZpZWQgd2hlbiAKKy5CIC0tZGhjcC1mcWRuIAoraXMgc2V0LgorLlRQCisuQiAtLWRoY3AtY2xpZW50LXVwZGF0ZQorTm9ybWFsbHksIHdoZW4gZ2l2aW5nIGEgREhDUCBsZWFzZSwgZG5zbWFzcSBzZXRzIGZsYWdzIGluIHRoZSBGUUROCitvcHRpb24gdG8gdGVsbCB0aGUgY2xpZW50IG5vdCB0byBhdHRlbXB0IGEgREROUyB1cGRhdGUgd2l0aCBpdHMgbmFtZQorYW5kIElQIGFkZHJlc3MuIFRoaXMgaXMgYmVjYXVzZSB0aGUgbmFtZS1JUCBwYWlyIGlzIGF1dG9tYXRpY2FsbHkKK2FkZGVkIGludG8gZG5zbWFzcSdzIEROUyB2aWV3LiBUaGlzIGZsYWcgc3VwcHJlc3NlcyB0aGF0IGJlaGF2aW91ciwKK3RoaXMgaXMgdXNlZnVsLCBmb3IgaW5zdGFuY2UsIHRvIGFsbG93IFdpbmRvd3MgY2xpZW50cyB0byB1cGRhdGUKK0FjdGl2ZSBEaXJlY3Rvcnkgc2VydmVycy4gU2VlIFJGQyA0NzAyIGZvciBkZXRhaWxzLiAKKy5UUAorLkIgLS1lbmFibGUtcmEKK0VuYWJsZSBkbnNtYXNxJ3MgSVB2NiBSb3V0ZXIgQWR2ZXJ0aXNlbWVudCBmZWF0dXJlLiBESENQdjYgZG9lc24ndAoraGFuZGxlIGNvbXBsZXRlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBpbiB0aGUgc2FtZSB3YXkgYXMgREhDUHY0LiBSb3V0ZXIKK2Rpc2NvdmVyeSBhbmQgKHBvc3NpYmx5KSBwcmVmaXggZGlzY292ZXJ5IGZvciBhdXRvbm9tb3VzIGFkZHJlc3MKK2NyZWF0aW9uIGFyZSBoYW5kbGVkIGJ5IGEgZGlmZmVyZW50IHByb3RvY29sLiBXaGVuIERIQ1AgaXMgaW4gdXNlLAorb25seSBhIHN1YnNldCBvZiB0aGlzIGlzIG5lZWRlZCwgYW5kIGRuc21hc3EgY2FuIGhhbmRsZSBpdCwgdXNpbmcKK2V4aXN0aW5nIERIQ1AgY29uZmlndXJhdGlvbiB0byBwcm92aWRlIG1vc3QgZGF0YS4gV2hlbiBSQSBpcyBlbmFibGVkLAorZG5zbWFzcSB3aWxsIGFkdmVydGlzZSBhIHByZWZpeCBmb3IgZWFjaCBkaGNwLXJhbmdlLCB3aXRoIGRlZmF1bHQKK3JvdXRlciAgYXMgdGhlIHJlbGV2YW50IGxpbmstbG9jYWwgYWRkcmVzcyBvbiAKK3RoZSBtYWNoaW5lIHJ1bm5pbmcgZG5zbWFzcS4gQnkgZGVmYXVsdCwgdGhlICJtYW5hZ2VkIGFkZHJlc3MiIGJpdHMgYXJlIHNldCwgYW5kCit0aGUgInVzZSBTTEFBQyIgYml0IGlzIHJlc2V0LiBUaGlzIGNhbiBiZSBjaGFuZ2VkIGZvciBpbmRpdmlkdWFsCitzdWJuZXRzIHdpdGggdGhlIG1vZGUga2V5d29yZHMgZGVzY3JpYmVkIGluCisuQiAtLWRoY3AtcmFuZ2UuCitSRkM2MTA2IEROUyBwYXJhbWV0ZXJzIGFyZSBpbmNsdWRlZCBpbiB0aGUgYWR2ZXJ0aXNlbWVudHMuIEJ5IGRlZmF1bHQsCit0aGUgcmVsZXZhbnQgbGluay1sb2NhbCBhZGRyZXNzIG9mIHRoZSBtYWNoaW5lIHJ1bm5pbmcgZG5zbWFzcSBpcyBzZW50CithcyByZWN1cnNpdmUgRE5TIHNlcnZlci4gSWYgcHJvdmlkZWQsIHRoZSBESENQdjYgb3B0aW9ucyBkbnMtc2VydmVyIGFuZAorZG9tYWluLXNlYXJjaCBhcmUgdXNlZCBmb3IgdGhlIEROUyBzZXJ2ZXIgKFJETlNTKSBhbmQgdGhlIGRvbWFpbiBzZWFyY2ggbGlzdCAoRE5TU0wpLgorLlRQCisuQiAtLXJhLXBhcmFtPTxpbnRlcmZhY2U+LFttdHU6PGludGVnZXI+fDxpbnRlcmZhY2U+fG9mZixdW2hpZ2gsfGxvdyxdPHJhLWludGVydmFsPlssPHJvdXRlciBsaWZldGltZT5dCitTZXQgbm9uLWRlZmF1bHQgdmFsdWVzIGZvciByb3V0ZXIgYWR2ZXJ0aXNlbWVudHMgc2VudCB2aWEgYW4KK2ludGVyZmFjZS4gVGhlIHByaW9yaXR5IGZpZWxkIGZvciB0aGUgcm91dGVyIG1heSBiZSBhbHRlcmVkIGZyb20gdGhlCitkZWZhdWx0IG9mIG1lZGl1bSB3aXRoIGVnCisuQiAtLXJhLXBhcmFtPWV0aDAsaGlnaC4KK1RoZSBpbnRlcnZhbCBiZXR3ZWVuIHJvdXRlciBhZHZlcnRpc2VtZW50cyBtYXkgYmUgc2V0IChpbiBzZWNvbmRzKSB3aXRoIAorLkIgLS1yYS1wYXJhbT1ldGgwLDYwLgorVGhlIGxpZmV0aW1lIG9mIHRoZSByb3V0ZSBtYXkgYmUgY2hhbmdlZCBvciBzZXQgdG8gemVybywgd2hpY2ggYWxsb3dzCithIHJvdXRlciB0byBhZHZlcnRpc2UgcHJlZml4ZXMgYnV0IG5vdCBhIHJvdXRlIHZpYSBpdHNlbGYuIAorLkIgLS1yYS1wYXJtPWV0aDAsMCwwCisoQSB2YWx1ZSBvZiB6ZXJvIGZvciB0aGUgaW50ZXJ2YWwgbWVhbnMgdGhlIGRlZmF1bHQgdmFsdWUuKSBBbGwgZm91ciBwYXJhbWV0ZXJzIG1heSBiZSBzZXQgYXQgb25jZS4KKy5CIC0tcmEtcGFyYW09ZXRoMCxtdHU6MTI4MCxsb3csNjAsMTIwMAorCitUaGUgaW50ZXJmYWNlIGZpZWxkIG1heSBpbmNsdWRlIGEgd2lsZGNhcmQuCisKK1RoZSBtdHU6IHBhcmFtZXRlciBtYXkgYmUgYW4gYXJiaXRyYXJ5IGludGVyZmFjZSBuYW1lLCBpbiB3aGljaCBjYXNlIHRoZSBNVFUgdmFsdWUgZm9yIHRoYXQgaW50ZXJmYWNlIGlzIHVzZWQuIFRoaXMgaXMgdXNlZnVsCitmb3IgKGVnKSBhZHZlcnRpc2luZyB0aGUgTVRVIG9mIGEgV0FOIGludGVyZmFjZSBvbiB0aGUgb3RoZXIgaW50ZXJmYWNlcyBvZiBhIHJvdXRlci4KKy5UUAorLkIgLS1kaGNwLXJlcGx5LWRlbGF5PVt0YWc6PHRhZz4sXTxpbnRlZ2VyPgorRGVsYXlzIHNlbmRpbmcgREhDUE9GRkVSIGFuZCBwcm94eWRoY3AgcmVwbGllcyBmb3IgYXQgbGVhc3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2Ygc2Vjb25kcy4KK1RoaXMgY2FuIGJlIHVzZWQgYXMgd29ya2Fyb3VuZCBmb3IgYnVncyBpbiBQWEUgYm9vdCBmaXJtd2FyZSB0aGF0IGRvZXMgbm90IGZ1bmN0aW9uIHByb3Blcmx5IHdoZW4KK3JlY2VpdmluZyBhbiBpbnN0YW50IHJlcGx5LgorVGhpcyBvcHRpb24gdGFrZXMgaW50byBhY2NvdW50IHRoZSB0aW1lIGFscmVhZHkgc3BlbnQgd2FpdGluZyAoZS5nLiBwZXJmb3JtaW5nIHBpbmcgY2hlY2spIGlmIGFueS4KKy5UUAorLkIgLS1lbmFibGUtdGZ0cFs9PGludGVyZmFjZT5bLDxpbnRlcmZhY2U+XV0KK0VuYWJsZSB0aGUgVEZUUCBzZXJ2ZXIgZnVuY3Rpb24uIFRoaXMgaXMgZGVsaWJlcmF0ZWx5IGxpbWl0ZWQgdG8gdGhhdAorbmVlZGVkIHRvIG5ldC1ib290IGEgY2xpZW50LiBPbmx5IHJlYWRpbmcgaXMgYWxsb3dlZDsgdGhlIHRzaXplIGFuZAorYmxrc2l6ZSBleHRlbnNpb25zIGFyZSBzdXBwb3J0ZWQgKHRzaXplIGlzIG9ubHkgc3VwcG9ydGVkIGluIG9jdGV0Cittb2RlKS4gV2l0aG91dCBhbiBhcmd1bWVudCwgdGhlIFRGVFAgc2VydmljZSBpcyBwcm92aWRlZCB0byB0aGUgc2FtZSBzZXQgb2YgaW50ZXJmYWNlcyBhcyBESENQIHNlcnZpY2UuIAorSWYgdGhlIGxpc3Qgb2YgaW50ZXJmYWNlcyBpcyBwcm92aWRlZCwgdGhhdCBkZWZpbmVzIHdoaWNoIGludGVyZmFjZXMgcmVjZWl2ZSBURlRQIHNlcnZpY2UuCisuVFAKKy5CIC0tdGZ0cC1yb290PTxkaXJlY3Rvcnk+Wyw8aW50ZXJmYWNlPl0KK0xvb2sgZm9yIGZpbGVzIHRvIHRyYW5zZmVyIHVzaW5nIFRGVFAgcmVsYXRpdmUgdG8gdGhlIGdpdmVuCitkaXJlY3RvcnkuIFdoZW4gdGhpcyBpcyBzZXQsIFRGVFAgcGF0aHMgd2hpY2ggaW5jbHVkZSAiLi4iIGFyZQorcmVqZWN0ZWQsIHRvIHN0b3AgY2xpZW50cyBnZXR0aW5nIG91dHNpZGUgdGhlIHNwZWNpZmllZCByb290LgorQWJzb2x1dGUgcGF0aHMgKHN0YXJ0aW5nIHdpdGggLykgYXJlIGFsbG93ZWQsIGJ1dCB0aGV5IG11c3QgYmUgd2l0aGluCit0aGUgdGZ0cC1yb290LiBJZiB0aGUgb3B0aW9uYWwgaW50ZXJmYWNlIGFyZ3VtZW50IGlzIGdpdmVuLCB0aGUKK2RpcmVjdG9yeSBpcyBvbmx5IHVzZWQgZm9yIFRGVFAgcmVxdWVzdHMgdmlhIHRoYXQgaW50ZXJmYWNlLgorLlRQCisuQiAtLXRmdHAtbm8tZmFpbAorRG8gbm90IGFib3J0IHN0YXJ0dXAgaWYgc3BlY2lmaWVkIHRmdHAgcm9vdCBkaXJlY3RvcmllcyBhcmUgaW5hY2Nlc3NpYmxlLgorLlRQCisuQiAtLXRmdHAtdW5pcXVlLXJvb3RbPWlwfG1hY10KK0FkZCB0aGUgSVAgb3IgaGFyZHdhcmUgYWRkcmVzcyBvZiB0aGUgVEZUUCBjbGllbnQgYXMgYSBwYXRoIGNvbXBvbmVudCBvbiB0aGUgZW5kCitvZiB0aGUgVEZUUC1yb290LiBPbmx5IHZhbGlkIGlmIGEgdGZ0cC1yb290IGlzIHNldCBhbmQgdGhlIGRpcmVjdG9yeSBleGlzdHMuCitEZWZhdWx0cyB0byBhZGRpbmcgSVAgYWRkcmVzcyAoaW4gc3RhbmRhcmQgZG90dGVkLXF1YWQgZm9ybWF0KS4KK0ZvciBpbnN0YW5jZSwgaWYgdGZ0cC1yb290IGlzICIvdGZ0cCIgYW5kIGNsaWVudCAxLjIuMy40IHJlcXVlc3RzIGZpbGUgIm15ZmlsZSIKK3RoZW4gdGhlIGVmZmVjdGl2ZSBwYXRoIHdpbGwgYmUgIi90ZnRwLzEuMi4zLjQvbXlmaWxlIiBpZiAvdGZ0cC8xLjIuMy40IGV4aXN0cyBvciAvdGZ0cC9teWZpbGUgb3RoZXJ3aXNlLgorV2hlbiAiPW1hYyIgaXMgc3BlY2lmaWVkIGl0IHdpbGwgYXBwZW5kIHRoZSBNQUMgYWRkcmVzcyBpbnN0ZWFkLCB1c2luZyBsb3dlcmNhc2UgemVybyBwYWRkZWQgZGlnaXRzCitzZXBhcmF0ZWQgYnkgZGFzaGVzLCBlLmcuOiAwMS0wMi0wMy0wNC1hYS1iYgorTm90ZSB0aGF0IHJlc29sdmluZyBNQUMgYWRkcmVzc2VzIGlzIG9ubHkgcG9zc2libGUgaWYgdGhlIGNsaWVudCBpcyBpbiB0aGUgbG9jYWwgbmV0d29yayBvciBvYnRhaW5lZAorYSBESENQIGxlYXNlIGZyb20gdXMuCisuVFAKKy5CIC0tdGZ0cC1zZWN1cmUKK0VuYWJsZSBURlRQIHNlY3VyZSBtb2RlOiB3aXRob3V0IHRoaXMsIGFueSBmaWxlIHdoaWNoIGlzIHJlYWRhYmxlIGJ5Cit0aGUgZG5zbWFzcSBwcm9jZXNzIHVuZGVyIG5vcm1hbCB1bml4IGFjY2Vzcy1jb250cm9sIHJ1bGVzIGlzCithdmFpbGFibGUgdmlhIFRGVFAuIFdoZW4gdGhlIC0tdGZ0cC1zZWN1cmUgZmxhZyBpcyBnaXZlbiwgb25seSBmaWxlcworb3duZWQgYnkgdGhlIHVzZXIgcnVubmluZyB0aGUgZG5zbWFzcSBwcm9jZXNzIGFyZSBhY2Nlc3NpYmxlLiBJZgorZG5zbWFzcSBpcyBiZWluZyBydW4gYXMgcm9vdCwgZGlmZmVyZW50IHJ1bGVzIGFwcGx5OiAtLXRmdHAtc2VjdXJlCitoYXMgbm8gZWZmZWN0LCBidXQgb25seSBmaWxlcyB3aGljaCBoYXZlIHRoZSB3b3JsZC1yZWFkYWJsZSBiaXQgc2V0CithcmUgYWNjZXNzaWJsZS4gSXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIHJ1biBkbnNtYXNxIGFzIHJvb3Qgd2l0aCBURlRQCitlbmFibGVkLCBhbmQgY2VydGFpbmx5IG5vdCB3aXRob3V0IHNwZWNpZnlpbmcgLS10ZnRwLXJvb3QuIERvaW5nIHNvCitjYW4gZXhwb3NlIGFueSB3b3JsZC1yZWFkYWJsZSBmaWxlIG9uIHRoZSBzZXJ2ZXIgdG8gYW55IGhvc3Qgb24gdGhlIG5ldC4gCisuVFAKKy5CIC0tdGZ0cC1sb3dlcmNhc2UKK0NvbnZlcnQgZmlsZW5hbWVzIGluIFRGVFAgcmVxdWVzdHMgdG8gYWxsIGxvd2VyY2FzZS4gVGhpcyBpcyB1c2VmdWwKK2ZvciByZXF1ZXN0cyBmcm9tIFdpbmRvd3MgbWFjaGluZXMsIHdoaWNoIGhhdmUgY2FzZS1pbnNlbnNpdGl2ZQorZmlsZXN5c3RlbXMgYW5kIHRlbmQgdG8gcGxheSBmYXN0LWFuZC1sb29zZSB3aXRoIGNhc2UgaW4gZmlsZW5hbWVzLgorTm90ZSB0aGF0IGRuc21hc3EncyB0ZnRwIHNlcnZlciBhbHdheXMgY29udmVydHMgIlxcIiB0byAiLyIgaW4gZmlsZW5hbWVzLgorLlRQCisuQiAtLXRmdHAtbWF4PTxjb25uZWN0aW9ucz4KK1NldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCBURlRQIGNvbm5lY3Rpb25zIGFsbG93ZWQuIFRoaXMKK2RlZmF1bHRzIHRvIDUwLiBXaGVuIHNlcnZpbmcgYSBsYXJnZSBudW1iZXIgb2YgVEZUUCBjb25uZWN0aW9ucywKK3Blci1wcm9jZXNzIGZpbGUgZGVzY3JpcHRvciBsaW1pdHMgbWF5IGJlIGVuY291bnRlcmVkLiBEbnNtYXNxIG5lZWRzCitvbmUgZmlsZSBkZXNjcmlwdG9yIGZvciBlYWNoIGNvbmN1cnJlbnQgVEZUUCBjb25uZWN0aW9uIGFuZCBvbmUKK2ZpbGUgZGVzY3JpcHRvciBwZXIgdW5pcXVlIGZpbGUgKHBsdXMgYSBmZXcgb3RoZXJzKS4gU28gc2VydmluZyB0aGUKK3NhbWUgZmlsZSBzaW11bHRhbmVvdXNseSB0byBuIGNsaWVudHMgd2lsbCB1c2UgcmVxdWlyZSBhYm91dCBuICsgMTAgZmlsZQorZGVzY3JpcHRvcnMsIHNlcnZpbmcgZGlmZmVyZW50IGZpbGVzIHNpbXVsdGFuZW91c2x5IHRvIG4gY2xpZW50cyB3aWxsCityZXF1aXJlIGFib3V0ICgyKm4pICsgMTAgZGVzY3JpcHRvcnMuIElmIAorLkIgLS10ZnRwLXBvcnQtcmFuZ2UKK2lzIGdpdmVuLCB0aGF0IGNhbiBhZmZlY3QgdGhlIG51bWJlciBvZiBjb25jdXJyZW50IGNvbm5lY3Rpb25zLgorLlRQCisuQiAtLXRmdHAtbXR1PTxtdHUgc2l6ZT4KK1VzZSBzaXplIGFzIHRoZSBjZWlsaW5nIG9mIHRoZSBNVFUgc3VwcG9ydGVkIGJ5IHRoZSBpbnRlcnZlbmluZyBuZXR3b3JrIHdoZW4gCituZWdvdGlhdGluZyBURlRQIGJsb2Nrc2l6ZSwgb3ZlcnJpZGluZyB0aGUgTVRVIHNldHRpbmcgb2YgdGhlIGxvY2FsIGludGVyZmFjZSAgaWYgaXQgaXMgbGFyZ2VyLgorLlRQCisuQiAtLXRmdHAtbm8tYmxvY2tzaXplCitTdG9wIHRoZSBURlRQIHNlcnZlciBmcm9tIG5lZ290aWF0aW5nIHRoZSAiYmxvY2tzaXplIiBvcHRpb24gd2l0aCBhCitjbGllbnQuIFNvbWUgYnVnZ3kgY2xpZW50cyByZXF1ZXN0IHRoaXMgb3B0aW9uIGJ1dCB0aGVuIGJlaGF2ZSBiYWRseQord2hlbiBpdCBpcyBncmFudGVkLgorLlRQCisuQiAtLXRmdHAtcG9ydC1yYW5nZT08c3RhcnQ+LDxlbmQ+CitBIFRGVFAgc2VydmVyIGxpc3RlbnMgb24gYSB3ZWxsLWtub3duIHBvcnQgKDY5KSBmb3IgY29ubmVjdGlvbiBpbml0aWF0aW9uLAorYnV0IGl0IGFsc28gdXNlcyBhIGR5bmFtaWNhbGx5LWFsbG9jYXRlZCBwb3J0IGZvciBlYWNoCitjb25uZWN0aW9uLiBOb3JtYWxseSB0aGVzZSBhcmUgYWxsb2NhdGVkIGJ5IHRoZSBPUywgYnV0IHRoaXMgb3B0aW9uCitzcGVjaWZpZXMgYSByYW5nZSBvZiBwb3J0cyBmb3IgdXNlIGJ5IFRGVFAgdHJhbnNmZXJzLiBUaGlzIGNhbiBiZQordXNlZnVsIHdoZW4gVEZUUCBoYXMgdG8gdHJhdmVyc2UgYSBmaXJld2FsbC4gVGhlIHN0YXJ0IG9mIHRoZSByYW5nZQorY2Fubm90IGJlIGxvd2VyIHRoYW4gMTAyNSB1bmxlc3MgZG5zbWFzcSBpcyBydW5uaW5nIGFzIHJvb3QuIFRoZSBudW1iZXIKK29mIGNvbmN1cnJlbnQgVEZUUCBjb25uZWN0aW9ucyBpcyBsaW1pdGVkIGJ5IHRoZSBzaXplIG9mIHRoZSBwb3J0IHJhbmdlLiAKKy5UUCAgCisuQiBcLUMsIC0tY29uZi1maWxlPTxmaWxlPgorU3BlY2lmeSBhIGRpZmZlcmVudCBjb25maWd1cmF0aW9uIGZpbGUuIFRoZSBjb25mLWZpbGUgb3B0aW9uIGlzIGFsc28gYWxsb3dlZCBpbgorY29uZmlndXJhdGlvbiBmaWxlcywgdG8gaW5jbHVkZSBtdWx0aXBsZSBjb25maWd1cmF0aW9uIGZpbGVzLiBBCitmaWxlbmFtZSBvZiAiLSIgY2F1c2VzIGRuc21hc3EgdG8gcmVhZCBjb25maWd1cmF0aW9uIGZyb20gc3RkaW4uCisuVFAKKy5CIFwtNywgLS1jb25mLWRpcj08ZGlyZWN0b3J5PlssPGZpbGUtZXh0ZW5zaW9uPi4uLi4uLl0sCitSZWFkIGFsbCB0aGUgZmlsZXMgaW4gdGhlIGdpdmVuIGRpcmVjdG9yeSBhcyBjb25maWd1cmF0aW9uCitmaWxlcy4gSWYgZXh0ZW5zaW9uKHMpIGFyZSBnaXZlbiwgYW55IGZpbGVzIHdoaWNoIGVuZCBpbiB0aG9zZQorZXh0ZW5zaW9ucyBhcmUgc2tpcHBlZC4gQW55IGZpbGVzIHdob3NlIG5hbWVzIGVuZCBpbiB+IG9yIHN0YXJ0IHdpdGggLiBvciBzdGFydCBhbmQgZW5kCit3aXRoICMgYXJlIGFsd2F5cyBza2lwcGVkLiBJZiB0aGUgZXh0ZW5zaW9uIHN0YXJ0cyB3aXRoICogdGhlbiBvbmx5IGZpbGVzIAord2hpY2ggaGF2ZSB0aGF0IGV4dGVuc2lvbiBhcmUgbG9hZGVkLiBTbworLkIgLS1jb25mLWRpcj0vcGF0aC90by9kaXIsKi5jb25mCitsb2FkcyBhbGwgZmlsZXMgd2l0aCB0aGUgc3VmZml4IC5jb25mIGluIC9wYXRoL3RvL2Rpci4gVGhpcyBmbGFnIG1heSBiZSBnaXZlbiBvbiB0aGUgY29tbWFuZAorbGluZSBvciBpbiBhIGNvbmZpZ3VyYXRpb24gZmlsZS4gSWYgZ2l2aW5nIGl0IG9uIHRoZSBjb21tYW5kIGxpbmUsIGJlIHN1cmUgdG8KK2VzY2FwZSAqIGNoYXJhY3RlcnMuCisuVFAKKy5CIC0tc2VydmVycy1maWxlPTxmaWxlPgorQSBzcGVjaWFsIGNhc2Ugb2YgCisuQiAtLWNvbmYtZmlsZQord2hpY2ggZGlmZmVycyBpbiB0d28gcmVzcGVjdHMuIEZpcnN0bHksIG9ubHkgLS1zZXJ2ZXIgYW5kIC0tcmV2LXNlcnZlciBhcmUgYWxsb3dlZCAKK2luIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgaW5jbHVkZWQuIFNlY29uZGx5LCB0aGUgZmlsZSBpcyByZS1yZWFkIGFuZCB0aGUgY29uZmlndXJhdGlvbgordGhlcmVpbiBpcyB1cGRhdGVkIHdoZW4gZG5zbWFzcSByZWNlaXZlcyBTSUdIVVAuCisuU0ggQ09ORklHIEZJTEUKK0F0IHN0YXJ0dXAsIGRuc21hc3EgcmVhZHMKKy5JIC9ldGMvZG5zbWFzcS5jb25mLAoraWYgaXQgZXhpc3RzLiAoT24KK0ZyZWVCU0QsIHRoZSBmaWxlIGlzIAorLkkgL3Vzci9sb2NhbC9ldGMvZG5zbWFzcS5jb25mCispIChidXQgc2VlIHRoZSAKKy5CIFwtQworYW5kCisuQiBcLTcKK29wdGlvbnMuKSBUaGUgZm9ybWF0IG9mIHRoaXMKK2ZpbGUgY29uc2lzdHMgb2Ygb25lIG9wdGlvbiBwZXIgbGluZSwgZXhhY3RseSBhcyB0aGUgbG9uZyBvcHRpb25zIGRldGFpbGVkIAoraW4gdGhlIE9QVElPTlMgc2VjdGlvbiBidXQgd2l0aG91dCB0aGUgbGVhZGluZyAiLS0iLiBMaW5lcyBzdGFydGluZyB3aXRoICMgYXJlIGNvbW1lbnRzIGFuZCBpZ25vcmVkLiBGb3IKK29wdGlvbnMgd2hpY2ggbWF5IG9ubHkgYmUgc3BlY2lmaWVkIG9uY2UsIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgb3ZlcnJpZGVzIAordGhlIGNvbW1hbmQgbGluZS4gIFF1b3RpbmcgaXMgYWxsb3dlZCBpbiBhIGNvbmZpZyBmaWxlOgorYmV0d2VlbiAiIHF1b3RlcyB0aGUgc3BlY2lhbCBtZWFuaW5ncyBvZiAsOi4gYW5kICMgYXJlIHJlbW92ZWQgYW5kIHRoZQorZm9sbG93aW5nIGVzY2FwZXMgYXJlIGFsbG93ZWQ6IFxcXFwgXFwiIFxcdCBcXGUgXFxiIFxcciBhbmQgXFxuLiBUaGUgbGF0ZXIgCitjb3JyZXNwb25kaW5nIHRvIHRhYiwgZXNjYXBlLCBiYWNrc3BhY2UsIHJldHVybiBhbmQgbmV3bGluZS4KKy5TSCBOT1RFUworV2hlbiBpdCByZWNlaXZlcyBhIFNJR0hVUCwgCisuQiBkbnNtYXNxIAorY2xlYXJzIGl0cyBjYWNoZSBhbmQgdGhlbiByZS1sb2FkcyAKKy5JIC9ldGMvaG9zdHMKK2FuZCAKKy5JIC9ldGMvZXRoZXJzIAorYW5kIGFueSBmaWxlIGdpdmVuIGJ5IC0tZGhjcC1ob3N0c2ZpbGUsIC0tZGhjcC1ob3N0c2RpciwgLS1kaGNwLW9wdHNmaWxlLCAKKy0tZGhjcC1vcHRzZGlyLCAtLWFkZG4taG9zdHMgb3IgLS1ob3N0c2Rpci4KK1RoZSBkaGNwIGxlYXNlIGNoYW5nZSBzY3JpcHQgaXMgY2FsbGVkIGZvciBhbGwKK2V4aXN0aW5nIERIQ1AgbGVhc2VzLiBJZiAKKy5CCistLW5vLXBvbGwKK2lzIHNldCBTSUdIVVAgYWxzbyByZS1yZWFkcworLkkgL2V0Yy9yZXNvbHYuY29uZi4KK1NJR0hVUAorZG9lcyBOT1QgcmUtcmVhZCB0aGUgY29uZmlndXJhdGlvbiBmaWxlLgorLlBQCitXaGVuIGl0IHJlY2VpdmVzIGEgU0lHVVNSMSwKKy5CIGRuc21hc3EgCit3cml0ZXMgc3RhdGlzdGljcyB0byB0aGUgc3lzdGVtIGxvZy4gSXQgd3JpdGVzIHRoZSBjYWNoZSBzaXplLAordGhlIG51bWJlciBvZiBuYW1lcyB3aGljaCBoYXZlIGhhZCB0byByZW1vdmVkIGZyb20gdGhlIGNhY2hlIGJlZm9yZQordGhleSBleHBpcmVkIGluIG9yZGVyIHRvIG1ha2Ugcm9vbSBmb3IgbmV3IG5hbWVzIGFuZCB0aGUgdG90YWwgbnVtYmVyCitvZiBuYW1lcyB0aGF0IGhhdmUgYmVlbiBpbnNlcnRlZCBpbnRvIHRoZSBjYWNoZS4gVGhlIG51bWJlciBvZiBjYWNoZSBoaXRzIGFuZCAKK21pc3NlcyBhbmQgdGhlIG51bWJlciBvZiBhdXRob3JpdGF0aXZlIHF1ZXJpZXMgYW5zd2VyZWQgYXJlIGFsc28gZ2l2ZW4uIEZvciBlYWNoIHVwc3RyZWFtCitzZXJ2ZXIgaXQgZ2l2ZXMgdGhlIG51bWJlciBvZiBxdWVyaWVzIHNlbnQsIGFuZCB0aGUgbnVtYmVyIHdoaWNoCityZXN1bHRlZCBpbiBhbiBlcnJvci4gSW4gCisuQiAtLW5vLWRhZW1vbgorbW9kZSBvciB3aGVuIGZ1bGwgbG9nZ2luZyBpcyBlbmFibGVkICgtcSksIGEgY29tcGxldGUgZHVtcCBvZiB0aGUKK2NvbnRlbnRzIG9mIHRoZSBjYWNoZSBpcyBtYWRlLiAKKworVGhlIGNhY2hlIHN0YXRpc3RpY3MgYXJlIGFsc28gYXZhaWxhYmxlIGluIHRoZSBETlMgYXMgYW5zd2VycyB0byAKK3F1ZXJpZXMgb2YgY2xhc3MgQ0hBT1MgYW5kIHR5cGUgVFhUIGluIGRvbWFpbiBiaW5kLiBUaGUgZG9tYWluIG5hbWVzIGFyZSBjYWNoZXNpemUuYmluZCwgaW5zZXJ0aW9ucy5iaW5kLCBldmljdGlvbnMuYmluZCwgCittaXNzZXMuYmluZCwgaGl0cy5iaW5kLCBhdXRoLmJpbmQgYW5kIHNlcnZlcnMuYmluZC4gQW4gZXhhbXBsZSBjb21tYW5kIHRvIHF1ZXJ5IHRoaXMsIHVzaW5nIHRoZSAKKy5CIGRpZwordXRpbGl0eSB3b3VsZCBiZQorCitkaWcgK3Nob3J0IGNoYW9zIHR4dCBjYWNoZXNpemUuYmluZAorCisuUFAgCitXaGVuIGl0IHJlY2VpdmVzIFNJR1VTUjIgYW5kIGl0IGlzIGxvZ2dpbmcgZGlyZWN0IHRvIGEgZmlsZSAoc2VlCisuQiAtLWxvZy1mYWNpbGl0eQorKSAKKy5CIGRuc21hc3EKK3dpbGwgY2xvc2UgYW5kIHJlb3BlbiB0aGUgbG9nIGZpbGUuIE5vdGUgdGhhdCBkdXJpbmcgdGhpcyBvcGVyYXRpb24sCitkbnNtYXNxIHdpbGwgbm90IGJlIHJ1bm5pbmcgYXMgcm9vdC4gV2hlbiBpdCBmaXJzdCBjcmVhdGVzIHRoZSBsb2dmaWxlCitkbnNtYXNxIGNoYW5nZXMgdGhlIG93bmVyc2hpcCBvZiB0aGUgZmlsZSB0byB0aGUgbm9uLXJvb3QgdXNlciBpdCB3aWxsIHJ1bgorYXMuIExvZ3JvdGF0ZSBzaG91bGQgYmUgY29uZmlndXJlZCB0byBjcmVhdGUgYSBuZXcgbG9nIGZpbGUgd2l0aAordGhlIG93bmVyc2hpcCB3aGljaCBtYXRjaGVzIHRoZSBleGlzdGluZyBvbmUgYmVmb3JlIHNlbmRpbmcgU0lHVVNSMi4KK0lmIFRDUCBETlMgcXVlcmllcyBhcmUgaW4gcHJvZ3Jlc3MsIHRoZSBvbGQgbG9nZmlsZSB3aWxsIHJlbWFpbiBvcGVuIGluCitjaGlsZCBwcm9jZXNzZXMgd2hpY2ggYXJlIGhhbmRsaW5nIFRDUCBxdWVyaWVzIGFuZCBtYXkgY29udGludWUgdG8gYmUKK3dyaXR0ZW4uIFRoZXJlIGlzIGEgbGltaXQgb2YgMTUwIHNlY29uZHMsIGFmdGVyIHdoaWNoIGFsbCBleGlzdGluZyBUQ1AKK3Byb2Nlc3NlcyB3aWxsIGhhdmUgZXhwaXJlZDogZm9yIHRoaXMgcmVhc29uLCBpdCBpcyBub3Qgd2lzZSB0bworY29uZmlndXJlIGxvZ2ZpbGUgY29tcHJlc3Npb24gZm9yIGxvZ2ZpbGVzIHdoaWNoIGhhdmUganVzdCBiZWVuCityb3RhdGVkLiBVc2luZyBsb2dyb3RhdGUsIHRoZSByZXF1aXJlZCBvcHRpb25zIGFyZSAKKy5CIGNyZWF0ZSAKK2FuZAorLkIgZGVsYXljb21wcmVzcy4KKworIAorLlBQCitEbnNtYXNxIGlzIGEgRE5TIHF1ZXJ5IGZvcndhcmRlcjogaXQgaXQgbm90IGNhcGFibGUgb2YgcmVjdXJzaXZlbHkKK2Fuc3dlcmluZyBhcmJpdHJhcnkgcXVlcmllcyBzdGFydGluZyBmcm9tIHRoZSByb290IHNlcnZlcnMgYnV0Citmb3J3YXJkcyBzdWNoIHF1ZXJpZXMgdG8gYSBmdWxseSByZWN1cnNpdmUgdXBzdHJlYW0gRE5TIHNlcnZlciB3aGljaCBpcwordHlwaWNhbGx5IHByb3ZpZGVkIGJ5IGFuIElTUC4gQnkgZGVmYXVsdCwgZG5zbWFzcSByZWFkcworLkkgL2V0Yy9yZXNvbHYuY29uZgordG8gZGlzY292ZXIgdGhlIElQCithZGRyZXNzZXMgb2YgdGhlIHVwc3RyZWFtIG5hbWVzZXJ2ZXJzIGl0IHNob3VsZCB1c2UsIHNpbmNlIHRoZQoraW5mb3JtYXRpb24gaXMgdHlwaWNhbGx5IHN0b3JlZCB0aGVyZS4gVW5sZXNzCisuQiAtLW5vLXBvbGwKK2lzIHVzZWQsCisuQiBkbnNtYXNxCitjaGVja3MgdGhlIG1vZGlmaWNhdGlvbiB0aW1lIG9mCisuSSAvZXRjL3Jlc29sdi5jb25mCisob3IgZXF1aXZhbGVudCBpZiAKKy5CIFwtLXJlc29sdi1maWxlIAoraXMgdXNlZCkgYW5kIHJlLXJlYWRzIGl0IGlmIGl0IGNoYW5nZXMuIFRoaXMgYWxsb3dzIHRoZSBETlMgc2VydmVycyB0bworYmUgc2V0IGR5bmFtaWNhbGx5IGJ5IFBQUCBvciBESENQIHNpbmNlIGJvdGggcHJvdG9jb2xzIHByb3ZpZGUgdGhlCitpbmZvcm1hdGlvbi4KK0Fic2VuY2Ugb2YKKy5JIC9ldGMvcmVzb2x2LmNvbmYKK2lzIG5vdCBhbiBlcnJvcgorc2luY2UgaXQgbWF5IG5vdCBoYXZlIGJlZW4gY3JlYXRlZCBiZWZvcmUgYSBQUFAgY29ubmVjdGlvbiBleGlzdHMuIERuc21hc3EgCitzaW1wbHkga2VlcHMgY2hlY2tpbmcgaW4gY2FzZQorLkkgL2V0Yy9yZXNvbHYuY29uZiAKK2lzIGNyZWF0ZWQgYXQgYW55Cit0aW1lLiBEbnNtYXNxIGNhbiBiZSB0b2xkIHRvIHBhcnNlIG1vcmUgdGhhbiBvbmUgcmVzb2x2LmNvbmYKK2ZpbGUuIFRoaXMgaXMgdXNlZnVsIG9uIGEgbGFwdG9wLCB3aGVyZSBib3RoIFBQUCBhbmQgREhDUCBtYXkgYmUgdXNlZDoKK2Ruc21hc3EgY2FuIGJlIHNldCB0byBwb2xsIGJvdGggCisuSSAvZXRjL3BwcC9yZXNvbHYuY29uZiAKK2FuZAorLkkgL2V0Yy9kaGNwYy9yZXNvbHYuY29uZiAKK2FuZCB3aWxsIHVzZSB0aGUgY29udGVudHMgb2Ygd2hpY2hldmVyIGNoYW5nZWQKK2xhc3QsIGdpdmluZyBhdXRvbWF0aWMgc3dpdGNoaW5nIGJldHdlZW4gRE5TIHNlcnZlcnMuCisuUFAKK1Vwc3RyZWFtIHNlcnZlcnMgbWF5IGFsc28gYmUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUgb3IgaW4KK3RoZSBjb25maWd1cmF0aW9uIGZpbGUuIFRoZXNlIHNlcnZlciBzcGVjaWZpY2F0aW9ucyBvcHRpb25hbGx5IHRha2UgYQorZG9tYWluIG5hbWUgd2hpY2ggdGVsbHMgZG5zbWFzcSB0byB1c2UgdGhhdCBzZXJ2ZXIgb25seSB0byBmaW5kIG5hbWVzCitpbiB0aGF0IHBhcnRpY3VsYXIgZG9tYWluLgorLlBQCitJbiBvcmRlciB0byBjb25maWd1cmUgZG5zbWFzcSB0byBhY3QgYXMgY2FjaGUgZm9yIHRoZSBob3N0IG9uIHdoaWNoIGl0IGlzIHJ1bm5pbmcsIHB1dCAibmFtZXNlcnZlciAxMjcuMC4wLjEiIGluCisuSSAvZXRjL3Jlc29sdi5jb25mCit0byBmb3JjZSBsb2NhbCBwcm9jZXNzZXMgdG8gc2VuZCBxdWVyaWVzIHRvCitkbnNtYXNxLiBUaGVuIGVpdGhlciBzcGVjaWZ5IHRoZSB1cHN0cmVhbSBzZXJ2ZXJzIGRpcmVjdGx5IHRvIGRuc21hc3EKK3VzaW5nIAorLkIgXC0tc2VydmVyCitvcHRpb25zIG9yIHB1dCB0aGVpciBhZGRyZXNzZXMgcmVhbCBpbiBhbm90aGVyIGZpbGUsIHNheQorLkkgL2V0Yy9yZXNvbHYuZG5zbWFzcQorYW5kIHJ1biBkbnNtYXNxIHdpdGggdGhlIAorLkIgXC1yIC9ldGMvcmVzb2x2LmRuc21hc3EKK29wdGlvbi4gVGhpcyBzZWNvbmQgdGVjaG5pcXVlIGFsbG93cyBmb3IgZHluYW1pYyB1cGRhdGUgb2YgdGhlIHNlcnZlcgorYWRkcmVzc2VzIGJ5IFBQUCBvciBESENQLgorLlBQCitBZGRyZXNzZXMgaW4gL2V0Yy9ob3N0cyB3aWxsICJzaGFkb3ciIGRpZmZlcmVudCBhZGRyZXNzZXMgZm9yIHRoZSBzYW1lCituYW1lcyBpbiB0aGUgdXBzdHJlYW0gRE5TLCBzbyAibXljb21wYW55LmNvbSAxLjIuMy40IiBpbiAvZXRjL2hvc3RzIHdpbGwgZW5zdXJlIHRoYXQKK3F1ZXJpZXMgZm9yICJteWNvbXBhbnkuY29tIiBhbHdheXMgcmV0dXJuIDEuMi4zLjQgZXZlbiBpZiBxdWVyaWVzIGluCit0aGUgdXBzdHJlYW0gRE5TIHdvdWxkIG90aGVyd2lzZSByZXR1cm4gYSBkaWZmZXJlbnQgYWRkcmVzcy4gVGhlcmUgaXMKK29uZSBleGNlcHRpb24gdG8gdGhpczogaWYgdGhlIHVwc3RyZWFtIEROUyBjb250YWlucyBhIENOQU1FIHdoaWNoCitwb2ludHMgdG8gYSBzaGFkb3dlZCBuYW1lLCB0aGVuIGxvb2tpbmcgdXAgdGhlIENOQU1FIHRocm91Z2ggZG5zbWFzcQord2lsbCByZXN1bHQgaW4gdGhlIHVuc2hhZG93ZWQgYWRkcmVzcyBhc3NvY2lhdGVkIHdpdGggdGhlIHRhcmdldCBvZgordGhlIENOQU1FLiBUbyB3b3JrIGFyb3VuZCB0aGlzLCBhZGQgdGhlIENOQU1FIHRvIC9ldGMvaG9zdHMgc28gdGhhdAordGhlIENOQU1FIGlzIHNoYWRvd2VkIHRvby4KKworLlBQCitUaGUgdGFnIHN5c3RlbSB3b3JrcyBhcyBmb2xsb3dzOiBGb3IgZWFjaCBESENQIHJlcXVlc3QsIGRuc21hc3EKK2NvbGxlY3RzIGEgc2V0IG9mIHZhbGlkIHRhZ3MgZnJvbSBhY3RpdmUgY29uZmlndXJhdGlvbiBsaW5lcyB3aGljaAoraW5jbHVkZSBzZXQ6PHRhZz4sIGluY2x1ZGluZyBvbmUgZnJvbSB0aGUgCisuQiBkaGNwLXJhbmdlCit1c2VkIHRvIGFsbG9jYXRlIHRoZSBhZGRyZXNzLCBvbmUgZnJvbSBhbnkgbWF0Y2hpbmcgCisuQiBkaGNwLWhvc3QKKyhhbmQgImtub3duIiBvciAia25vd24tb3RoZXJuZXQiIGlmIGEgZGhjcC1ob3N0IG1hdGNoZXMpIAorVGhlIHRhZyAiYm9vdHAiIGlzIHNldCBmb3IgQk9PVFAgcmVxdWVzdHMsIGFuZCBhIHRhZyB3aG9zZSBuYW1lIGlzIHRoZSAKK25hbWUgb2YgdGhlIGludGVyZmFjZSBvbiB3aGljaCB0aGUgcmVxdWVzdCBhcnJpdmVkIGlzIGFsc28gc2V0LgorCitBbnkgY29uZmlndXJhdGlvbiBsaW5lcyB3aGljaCBpbmNsdWRlIG9uZSBvciBtb3JlIHRhZzo8dGFnPiBjb25zdHJ1Y3RzCit3aWxsIG9ubHkgYmUgdmFsaWQgaWYgYWxsIHRoYXQgdGFncyBhcmUgbWF0Y2hlZCBpbiB0aGUgc2V0IGRlcml2ZWQKK2Fib3ZlLiBUeXBpY2FsbHkgdGhpcyBpcyBkaGNwLW9wdGlvbi4KKy5CIGRoY3Atb3B0aW9uIAord2hpY2ggaGFzIHRhZ3Mgd2lsbCBiZSB1c2VkIGluIHByZWZlcmVuY2UgIHRvIGFuIHVudGFnZ2VkIAorLkIgZGhjcC1vcHRpb24sCitwcm92aWRlZCB0aGF0IF9hbGxfIHRoZSB0YWdzIG1hdGNoIHNvbWV3aGVyZSBpbiB0aGUKK3NldCBjb2xsZWN0ZWQgYXMgZGVzY3JpYmVkIGFib3ZlLiBUaGUgcHJlZml4ICchJyBvbiBhIHRhZyBtZWFucyAnbm90Jworc28gLS1kaGNwLW9wdGlvbj10YWc6IXB1cnBsZSwzLDEuMi4zLjQgc2VuZHMgdGhlIG9wdGlvbiB3aGVuIHRoZQordGFnIHB1cnBsZSBpcyBub3QgaW4gdGhlIHNldCBvZiB2YWxpZCB0YWdzLiAoSWYgdXNpbmcgdGhpcyBpbiBhCitjb21tYW5kIGxpbmUgcmF0aGVyIHRoYW4gYSBjb25maWd1cmF0aW9uIGZpbGUsIGJlIHN1cmUgdG8gZXNjYXBlICEsCit3aGljaCBpcyBhIHNoZWxsIG1ldGFjaGFyYWN0ZXIpCisKK1doZW4gc2VsZWN0aW5nIGRoY3Atb3B0aW9ucywgYSB0YWcgZnJvbSBkaGNwLXJhbmdlIGlzIHNlY29uZCBjbGFzcworcmVsYXRpdmUgdG8gb3RoZXIgdGFncywgdG8gbWFrZSBpdCBlYXN5IHRvIG92ZXJyaWRlIG9wdGlvbnMgZm9yCitpbmRpdmlkdWFsIGhvc3RzLCBzbyAKKy5CIGRoY3AtcmFuZ2U9c2V0OmludGVyZmFjZTEsLi4uLi4uCisuQiBkaGNwLWhvc3Q9c2V0Om15aG9zdCwuLi4uLgorLkIgZGhjcC1vcHRpb249dGFnOmludGVyZmFjZTEsb3B0aW9uOm5pcy1kb21haW4sImRvbWFpbjEiCisuQiBkaGNwLW9wdGlvbj10YWc6bXlob3N0LG9wdGlvbjpuaXMtZG9tYWluLCJkb21haW4yIgord2lsbCBzZXQgdGhlIE5JUy1kb21haW4gdG8gZG9tYWluMSBmb3IgaG9zdHMgaW4gdGhlIHJhbmdlLCBidXQKK292ZXJyaWRlIHRoYXQgdG8gZG9tYWluMiBmb3IgYSBwYXJ0aWN1bGFyIGhvc3QuCisKKy5QUAorTm90ZSB0aGF0IGZvciAKKy5CIGRoY3AtcmFuZ2UgCitib3RoIHRhZzo8dGFnPiBhbmQgc2V0Ojx0YWc+IGFyZSBhbGxvd2VkLCB0byBib3RoIHNlbGVjdCB0aGUgcmFuZ2UgaW4KK3VzZSBiYXNlZCBvbiAoZWcpIGRoY3AtaG9zdCwgYW5kIHRvIGFmZmVjdCB0aGUgb3B0aW9ucyBzZW50LCBiYXNlZCBvbgordGhlIHJhbmdlIHNlbGVjdGVkLgorCitUaGlzIHN5c3RlbSBldm9sdmVkIGZyb20gYW4gZWFybGllciwgbW9yZSBsaW1pdGVkIG9uZSBhbmQgZm9yIGJhY2t3YXJkCitjb21wYXRpYmlsaXR5ICJuZXQ6IiBtYXkgYmUgdXNlZCBpbnN0ZWFkIG9mICJ0YWc6IiBhbmQgInNldDoiIG1heSBiZQorb21pdHRlZC4gKEV4Y2VwdCBpbiAKKy5CIGRoY3AtaG9zdCwKK3doZXJlICJuZXQ6IiBtYXkgYmUgdXNlZCBpbnN0ZWFkIG9mICJzZXQ6Ii4pIEZvciB0aGUgc2FtZSByZWFzb24sICcjJworbWF5IGJlIHVzZWQgaW5zdGVhZCBvZiAnIScgdG8gaW5kaWNhdGUgTk9ULgorLlBQIAorVGhlIERIQ1Agc2VydmVyIGluIGRuc21hc3Egd2lsbCBmdW5jdGlvbiBhcyBhIEJPT1RQIHNlcnZlciBhbHNvLAorcHJvdmlkZWQgdGhhdCB0aGUgTUFDIGFkZHJlc3MgYW5kIElQIGFkZHJlc3MgZm9yIGNsaWVudHMgYXJlIGdpdmVuLAorZWl0aGVyIHVzaW5nIAorLkIgZGhjcC1ob3N0IAorY29uZmlndXJhdGlvbnMgb3IgaW4KKy5JIC9ldGMvZXRoZXJzCissIGFuZCBhCisuQiBkaGNwLXJhbmdlIAorY29uZmlndXJhdGlvbiBvcHRpb24gaXMgcHJlc2VudCB0byBhY3RpdmF0ZSB0aGUgREhDUCBzZXJ2ZXIKK29uIGEgcGFydGljdWxhciBuZXR3b3JrLiAoU2V0dGluZyAtLWJvb3RwLWR5bmFtaWMgcmVtb3ZlcyB0aGUgbmVlZCBmb3IKK3N0YXRpYyBhZGRyZXNzIG1hcHBpbmdzLikgVGhlIGZpbGVuYW1lCitwYXJhbWV0ZXIgaW4gYSBCT09UUCByZXF1ZXN0IGlzIHVzZWQgYXMgYSB0YWcsCithcyBpcyB0aGUgdGFnICJib290cCIsIGFsbG93aW5nIHNvbWUgY29udHJvbCBvdmVyIHRoZSBvcHRpb25zIHJldHVybmVkIHRvCitkaWZmZXJlbnQgY2xhc3NlcyBvZiBob3N0cy4KKworLlNIIEFVVEhPUklUQVRJVkUgQ09ORklHVVJBVElPTgorLlBQIAorQ29uZmlndXJpbmcgZG5zbWFzcSB0byBhY3QgYXMgYW4gYXV0aG9yaXRhdGl2ZSBETlMgc2VydmVyIGlzCitjb21wbGljYXRlZCBieSB0aGUgZmFjdCB0aGF0IGl0IGludm9sdmVzIGNvbmZpZ3VyYXRpb24gb2YgZXh0ZXJuYWwgRE5TCitzZXJ2ZXJzIHRvIHByb3ZpZGUgZGVsZWdhdGlvbi4gV2Ugd2lsbCB3YWxrIHRocm91Z2ggdGhyZWUgc2NlbmFyaW9zIG9mCitpbmNyZWFzaW5nIGNvbXBsZXhpdHkuIFByZXJlcXVpc2l0ZXMgZm9yIGFsbCBvZiB0aGVzZSBzY2VuYXJpb3MKK2FyZSBhIGdsb2JhbGx5IGFjY2Vzc2libGUgSVAgYWRkcmVzcywgYW4gQSBvciBBQUFBIHJlY29yZCBwb2ludGluZyB0byB0aGF0IGFkZHJlc3MsCithbmQgYW4gZXh0ZXJuYWwgRE5TIHNlcnZlciBjYXBhYmxlIG9mIGRvaW5nIGRlbGVnYXRpb24gb2YgdGhlIHpvbmUgaW4KK3F1ZXN0aW9uLiBGb3IgdGhlIGZpcnN0IHBhcnQgb2YgdGhpcyBleHBsYW5hdGlvbiwgd2Ugd2lsbCBjYWxsIHRoZSBBIChvciBBQUFBKSByZWNvcmQKK2ZvciB0aGUgZ2xvYmFsbHkgYWNjZXNzaWJsZSBhZGRyZXNzIHNlcnZlci5leGFtcGxlLmNvbSwgYW5kIHRoZSB6b25lCitmb3Igd2hpY2ggZG5zbWFzcSBpcyBhdXRob3JpdGF0aXZlIG91ci56b25lLmNvbS4KKworVGhlIHNpbXBsZXN0IGNvbmZpZ3VyYXRpb24gY29uc2lzdHMgb2YgdHdvIGxpbmVzIG9mIGRuc21hc3EgY29uZmlndXJhdGlvbjsgc29tZXRoaW5nIGxpa2UKKworLm5mCisuQiBhdXRoLXNlcnZlcj1zZXJ2ZXIuZXhhbXBsZS5jb20sZXRoMAorLkIgYXV0aC16b25lPW91ci56b25lLmNvbSwxLjIuMy4wLzI0CisuZmkKKworYW5kIHR3byByZWNvcmRzIGluIHRoZSBleHRlcm5hbCBETlMKKworLm5mCitzZXJ2ZXIuZXhhbXBsZS5jb20gICAgICAgQSAgICAxOTIuMC40My4xMAorb3VyLnpvbmUuY29tICAgICAgICAgICAgTlMgICAgc2VydmVyLmV4YW1wbGUuY29tCisuZmkKKworZXRoMCBpcyB0aGUgZXh0ZXJuYWwgbmV0d29yayBpbnRlcmZhY2Ugb24gd2hpY2ggZG5zbWFzcSBpcyBsaXN0ZW5pbmcsCithbmQgaGFzIChnbG9iYWxseSBhY2Nlc3NpYmxlKSBhZGRyZXNzIDE5Mi4wLjQzLjEwLiAKKworTm90ZSB0aGF0IHRoZSBleHRlcm5hbCBJUCBhZGRyZXNzIG1heSB3ZWxsIGJlIGR5bmFtaWMgKGllIGFzc2lnbmVkCitmcm9tIGFuIElTUCBieSBESENQIG9yIFBQUCkgSWYgc28sIHRoZSBBIHJlY29yZCBtdXN0IGJlIGxpbmtlZCB0byB0aGlzCitkeW5hbWljIGFzc2lnbm1lbnQgYnkgb25lIG9mIHRoZSB1c3VhbCBkeW5hbWljLUROUyBzeXN0ZW1zLgorCitBIG1vcmUgY29tcGxleCwgYnV0IHByYWN0aWNhbGx5IHVzZWZ1bCBjb25maWd1cmF0aW9uIGhhcyB0aGUgYWRkcmVzcworcmVjb3JkIGZvciB0aGUgZ2xvYmFsbHkgYWNjZXNzaWJsZSBJUCBhZGRyZXNzIHJlc2lkaW5nIGluIHRoZQorYXV0aG9yaXRhdGl2ZSB6b25lIHdoaWNoIGRuc21hc3EgaXMgc2VydmluZywgdHlwaWNhbGx5IGF0IHRoZSByb290LiBOb3cKK3dlIGhhdmUKKworLm5mCisuQiBhdXRoLXNlcnZlcj1vdXIuem9uZS5jb20sZXRoMAorLkIgYXV0aC16b25lPW91ci56b25lLmNvbSwxLjIuMy4wLzI0CisuZmkKKworLm5mCitvdXIuem9uZS5jb20gICAgICAgICAgICAgQSAgICAxLjIuMy40CitvdXIuem9uZS5jb20gICAgICAgICAgICBOUyAgICBvdXIuem9uZS5jb20KKy5maQorCitUaGUgQSByZWNvcmQgZm9yIG91ci56b25lLmNvbSBoYXMgbm93IGJlY29tZSBhIGdsdWUgcmVjb3JkLCBpdCBzb2x2ZXMKK3RoZSBjaGlja2VuLWFuZC1lZ2cgcHJvYmxlbSBvZiBmaW5kaW5nIHRoZSBJUCBhZGRyZXNzIG9mIHRoZQorbmFtZXNlcnZlciBmb3Igb3VyLnpvbmUuY29tIHdoZW4gdGhlIEEgcmVjb3JkIGlzIHdpdGhpbiB0aGF0Cit6b25lLiBOb3RlIHRoYXQgdGhpcyBpcyB0aGUgb25seSByb2xlIG9mIHRoaXMgcmVjb3JkOiBhcyBkbnNtYXNxIGlzCitub3cgYXV0aG9yaXRhdGl2ZSBmcm9tIG91ci56b25lLmNvbSBpdCB0b28gbXVzdCBwcm92aWRlIHRoaXMKK3JlY29yZC4gSWYgdGhlIGV4dGVybmFsIGFkZHJlc3MgaXMgc3RhdGljLCB0aGlzIGNhbiBiZSBkb25lIHdpdGggYW4KKy5CIC9ldGMvaG9zdHMgCitlbnRyeSBvciAKKy5CIC0taG9zdC1yZWNvcmQuCisKKy5uZgorLkIgYXV0aC1zZXJ2ZXI9b3VyLnpvbmUuY29tLGV0aDAKKy5CIGhvc3QtcmVjb3JkPW91ci56b25lLmNvbSwxLjIuMy40CisuQiBhdXRoLXpvbmU9b3VyLnpvbmUuY29tLDEuMi4zLjAvMjQKKy5maQorCitJZiB0aGUgZXh0ZXJuYWwgYWRkcmVzcyBpcyBkeW5hbWljLCB0aGUgYWRkcmVzcworYXNzb2NpYXRlZCB3aXRoIG91ci56b25lLmNvbSBtdXN0IGJlIGRlcml2ZWQgZnJvbSB0aGUgYWRkcmVzcyBvZiB0aGUKK3JlbGV2YW50IGludGVyZmFjZS4gVGhpcyBpcyBkb25lIHVzaW5nIAorLkIgaW50ZXJmYWNlLW5hbWUKK1NvbWV0aGluZyBsaWtlOgorCisubmYKKy5CIGF1dGgtc2VydmVyPW91ci56b25lLmNvbSxldGgwCisuQiBpbnRlcmZhY2UtbmFtZT1vdXIuem9uZS5jb20sZXRoMAorLkIgYXV0aC16b25lPW91ci56b25lLmNvbSwxLjIuMy4wLzI0LGV0aDAKKy5maQorCisoVGhlICJldGgwIiBhcmd1bWVudCBpbiBhdXRoLXpvbmUgYWRkcyB0aGUgc3VibmV0IGNvbnRhaW5pbmcgZXRoMCdzCitkeW5hbWljIGFkZHJlc3MgdG8gdGhlIHpvbmUsIHNvIHRoYXQgdGhlIGludGVyZmFjZS1uYW1lIHJldHVybnMgdGhlCithZGRyZXNzIGluIG91dHNpZGUgcXVlcmllcy4pCisKK091ciBmaW5hbCBjb25maWd1cmF0aW9uIGJ1aWxkcyBvbiB0aGF0IGFib3ZlLCBidXQgYWxzbyBhZGRzIGEKK3NlY29uZGFyeSBETlMgc2VydmVyLiBUaGlzIGlzIGFub3RoZXIgRE5TIHNlcnZlciB3aGljaCBsZWFybnMgdGhlIEROUyBkYXRhCitmb3IgdGhlIHpvbmUgYnkgZG9pbmcgem9uZXMgdHJhbnNmZXIsIGFuZCBhY3RzIGFzIGEgYmFja3VwIHNob3VsZAordGhlIHByaW1hcnkgc2VydmVyIGJlY29tZSBpbmFjY2Vzc2libGUuIFRoZSBjb25maWd1cmF0aW9uIG9mIHRoZQorc2Vjb25kYXJ5IGlzIGJleW9uZCB0aGUgc2NvcGUgb2YgdGhpcyBtYW4tcGFnZSwgYnV0IHRoZSBleHRyYQorY29uZmlndXJhdGlvbiBvZiBkbnNtYXNxIGlzIHNpbXBsZToKKworLm5mCisuQiBhdXRoLXNlYy1zZXJ2ZXJzPXNlY29uZGFyeS5teWlzcC5jb20KKy5maQorCithbmQKKworLm5mCitvdXIuem9uZS5jb20gICAgICAgICAgIE5TICAgIHNlY29uZGFyeS5teWlzcC5jb20KKy5maQorCitBZGRpbmcgYXV0aC1zZWMtc2VydmVycyBlbmFibGVzIHpvbmUgdHJhbnNmZXIgaW4gZG5zbWFzcSwgdG8gYWxsb3cgdGhlCitzZWNvbmRhcnkgdG8gY29sbGVjdCB0aGUgRE5TIGRhdGEuIElmIHlvdSB3aXNoIHRvIHJlc3RyaWN0IHRoaXMgZGF0YQordG8gcGFydGljdWxhciBob3N0cyB0aGVuCisKKy5uZgorLkIgYXV0aC1wZWVyPTxJUCBhZGRyZXNzIG9mIHNlY29uZGFyeT4KKy5maQorCit3aWxsIGRvIHNvLgorCitEbnNtYXNxIGFjdHMgYXMgYW4gYXV0aG9yaXRhdGl2ZSBzZXJ2ZXIgZm9yICBpbi1hZGRyLmFycGEgYW5kCitpcDYuYXJwYSBkb21haW5zIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3VibmV0cyBnaXZlbiBpbiBhdXRoLXpvbmUKK2RlY2xhcmF0aW9ucywgc28gcmV2ZXJzZSAoYWRkcmVzcyB0byBuYW1lKSBsb29rdXBzIGNhbiBiZSBzaW1wbHkKK2NvbmZpZ3VyZWQgd2l0aCBhIHN1aXRhYmxlIE5TIHJlY29yZCwgZm9yIGluc3RhbmNlIGluIHRoaXMgZXhhbXBsZSwKK3doZXJlIHdlIGFsbG93IDEuMi4zLjAvMjQgYWRkcmVzc2VzLgorCisubmYKKyAzLjIuMS5pbi1hZGRyLmFycGEgIE5TICAgIG91ci56b25lLmNvbQorLmZpCisKK05vdGUgdGhhdCBhdCBwcmVzZW50LCByZXZlcnNlIChpbi1hZGRyLmFycGEgYW5kIGlwNi5hcnBhKSB6b25lcyBhcmUKK25vdCBhdmFpbGFibGUgaW4gem9uZSB0cmFuc2ZlcnMsIHNvIHRoZXJlIGlzIG5vIHBvaW50IGFycmFuZ2luZworc2Vjb25kYXJ5IHNlcnZlcnMgZm9yIHJldmVyc2UgbG9va3Vwcy4KKworLlBQCitXaGVuIGRuc21hc3EgaXMgY29uZmlndXJlZCB0byBhY3QgYXMgYW4gYXV0aG9yaXRhdGl2ZSBzZXJ2ZXIsIHRoZQorZm9sbG93aW5nIGRhdGEgaXMgdXNlZCB0byBwb3B1bGF0ZSB0aGUgYXV0aG9yaXRhdGl2ZSB6b25lLgorLlBQCisuQiAtLW14LWhvc3QsIC0tc3J2LWhvc3QsIC0tZG5zLXJyLCAtLXR4dC1yZWNvcmQsIC0tbmFwdHItcmVjb3JkCissIGFzIGxvbmcgYXMgdGhlIHJlY29yZCBuYW1lcyBhcmUgaW4gdGhlIGF1dGhvcml0YXRpdmUgZG9tYWluLgorLlBQCisuQiAtLWNuYW1lCithcyBsb25nIGFzIHRoZSByZWNvcmQgbmFtZSBpcyBpbiAgdGhlIGF1dGhvcml0YXRpdmUgZG9tYWluLiBJZiB0aGUKK3RhcmdldCBvZiB0aGUgQ05BTUUgaXMgdW5xdWFsaWZpZWQsIHRoZW4gaXQgIGlzIHF1YWxpZmllZCB3aXRoIHRoZQorYXV0aG9yaXRhdGl2ZSB6b25lIG5hbWUuIENOQU1FIHVzZWQgaW4gdGhpcyB3YXkgKG9ubHkpIG1heSBiZSB3aWxkY2FyZHMsIGFzIGluCisKKy5uZgorLkIgY25hbWU9Ki5leGFtcGxlLmNvbSxkZWZhdWx0LmV4YW1wbGUuY29tCisuZmkKKworLlBQCitJUHY0IGFuZCBJUHY2IGFkZHJlc3NlcyBmcm9tIC9ldGMvaG9zdHMgKGFuZCAKKy5CIC0tYWRkbi1ob3N0cworKSBhbmQKKy5CIC0taG9zdC1yZWNvcmQKK2FuZCAKKy5CIC0taW50ZXJmYWNlLW5hbWUKK3Byb3ZpZGVkIHRoZSBhZGRyZXNzIGZhbGxzIGludG8gb25lIG9mIHRoZSBzdWJuZXRzIHNwZWNpZmllZCBpbiB0aGUKKy5CIC0tYXV0aC16b25lLgorLlBQCitBZGRyZXNzZXMgb2YgREhDUCBsZWFzZXMsIHByb3ZpZGVkIHRoZSBhZGRyZXNzIGZhbGxzIGludG8gb25lIG9mIHRoZSBzdWJuZXRzIHNwZWNpZmllZCBpbiB0aGUKKy5CIC0tYXV0aC16b25lLgorKElmIGNvbnN0cnVjdGVkIERIQ1AgcmFuZ2VzIGFyZSBpcyB1c2UsIHdoaWNoIGRlcGVuZCBvbiB0aGUgYWRkcmVzcyBkeW5hbWljYWxseSAKK2Fzc2lnbmVkIHRvIGFuIGludGVyZmFjZSwgdGhlbiB0aGUgZm9ybSBvZgorLkIgLS1hdXRoLXpvbmUKK3doaWNoIGRlZmluZXMgc3VibmV0cyBieSB0aGUgZHluYW1pYyBhZGRyZXNzIG9mIGFuIGludGVyZmFjZSBzaG91bGQKK2JlIHVzZWQgdG8gZW5zdXJlIHRoaXMgY29uZGl0aW9uIGlzIG1ldC4pCisuUFAgCitJbiB0aGUgZGVmYXVsdCBtb2RlLCB3aGVyZSBhIERIQ1AgbGVhc2UKK2hhcyBhbiB1bnF1YWxpZmllZCBuYW1lLCBhbmQgcG9zc2libHkgYSBxdWFsaWZpZWQgbmFtZSBjb25zdHJ1Y3RlZAordXNpbmcgCisuQiAtLWRvbWFpbgordGhlbiB0aGUgbmFtZSBpbiB0aGUgYXV0aG9yaXRhdGl2ZSB6b25lIGlzIGNvbnN0cnVjdGVkIGZyb20gdGhlCit1bnF1YWxpZmllZCBuYW1lIGFuZCB0aGUgem9uZSdzIGRvbWFpbi4gVGhpcyBtYXkgb3IgbWF5IG5vdCBlcXVhbAordGhhdCBzcGVjaWZpZWQgYnkgCisuQiAtLWRvbWFpbi4KK0lmIAorLkIgLS1kaGNwLWZxZG4KK2lzIHNldCwgdGhlbiB0aGUgZnVsbHkgcXVhbGlmaWVkIG5hbWVzIGFzc29jaWF0ZWQgd2l0aCBESENQIGxlYXNlcyBhcmUKK3VzZWQsIGFuZCBtdXN0IG1hdGNoIHRoZSB6b25lJ3MgZG9tYWluLgorIAorCisKKy5TSCBFWElUIENPREVTCisuUFAKKzAgLSBEbnNtYXNxIHN1Y2Nlc3NmdWxseSBmb3JrZWQgaW50byB0aGUgYmFja2dyb3VuZCwgb3IgdGVybWluYXRlZAorbm9ybWFsbHkgaWYgYmFja2dyb3VuZGluZyBpcyBub3QgZW5hYmxlZC4KKy5QUAorMSAtIEEgcHJvYmxlbSB3aXRoIGNvbmZpZ3VyYXRpb24gd2FzIGRldGVjdGVkLgorLlBQCisyIC0gQSBwcm9ibGVtIHdpdGggbmV0d29yayBhY2Nlc3Mgb2NjdXJyZWQgKGFkZHJlc3MgaW4gdXNlLCBhdHRlbXB0Cit0byB1c2UgcHJpdmlsZWdlZCBwb3J0cyB3aXRob3V0IHBlcm1pc3Npb24pLgorLlBQCiszIC0gQSBwcm9ibGVtIG9jY3VycmVkIHdpdGggYSBmaWxlc3lzdGVtIG9wZXJhdGlvbiAobWlzc2luZworZmlsZS9kaXJlY3RvcnksIHBlcm1pc3Npb25zKS4KKy5QUAorNCAtIE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUuCisuUFAKKzUgLSBPdGhlciBtaXNjZWxsYW5lb3VzIHByb2JsZW0uCisuUFAKKzExIG9yIGdyZWF0ZXIgLSBhIG5vbiB6ZXJvIHJldHVybiBjb2RlIHdhcyByZWNlaXZlZCBmcm9tIHRoZQorbGVhc2Utc2NyaXB0IHByb2Nlc3MgImluaXQiIGNhbGwuIFRoZSBleGl0IGNvZGUgZnJvbSBkbnNtYXNxIGlzIHRoZQorc2NyaXB0J3MgZXhpdCBjb2RlIHdpdGggMTAgYWRkZWQuIAorCisuU0ggTElNSVRTCitUaGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHJlc291cmNlIGxpbWl0cyBpbiBkbnNtYXNxIGFyZSBnZW5lcmFsbHkKK2NvbnNlcnZhdGl2ZSwgYW5kIGFwcHJvcHJpYXRlIGZvciBlbWJlZGRlZCByb3V0ZXIgdHlwZSBkZXZpY2VzIHdpdGgKK3Nsb3cgcHJvY2Vzc29ycyBhbmQgbGltaXRlZCBtZW1vcnkuIE9uIG1vcmUgY2FwYWJsZSBoYXJkd2FyZSwgaXQgaXMKK3Bvc3NpYmxlIHRvIGluY3JlYXNlIHRoZSBsaW1pdHMsIGFuZCBoYW5kbGUgbWFueSBtb3JlIGNsaWVudHMuIFRoZQorZm9sbG93aW5nIGFwcGxpZXMgdG8gZG5zbWFzcS0yLjM3OiBlYXJsaWVyIHZlcnNpb25zIGRpZCBub3Qgc2NhbGUgYXMgd2VsbC4KKyAKKy5QUAorRG5zbWFzcSBpcyBjYXBhYmxlIG9mIGhhbmRsaW5nIEROUyBhbmQgREhDUCBmb3IgYXQgbGVhc3QgYSB0aG91c2FuZAorY2xpZW50cy4gVGhlIERIQ1AgbGVhc2UgdGltZXMgc2hvdWxkIG5vdCBiZSB2ZXJ5IHNob3J0IChsZXNzIHRoYW4gb25lIGhvdXIpLiBUaGUKK3ZhbHVlIG9mIAorLkIgLS1kbnMtZm9yd2FyZC1tYXggCitjYW4gYmUgaW5jcmVhc2VkOiBzdGFydCB3aXRoIGl0IGVxdWFsIHRvCit0aGUgbnVtYmVyIG9mIGNsaWVudHMgYW5kIGluY3JlYXNlIGlmIEROUyBzZWVtcyBzbG93LiBOb3RlIHRoYXQgRE5TCitwZXJmb3JtYW5jZSBkZXBlbmRzIHRvbyBvbiB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIHVwc3RyZWFtCituYW1lc2VydmVycy4gVGhlIHNpemUgb2YgdGhlIEROUyBjYWNoZSBtYXkgYmUgaW5jcmVhc2VkOiB0aGUgaGFyZAorbGltaXQgaXMgMTAwMDAgbmFtZXMgYW5kIHRoZSBkZWZhdWx0ICgxNTApIGlzIHZlcnkgbG93LiBTZW5kaW5nCitTSUdVU1IxIHRvIGRuc21hc3EgbWFrZXMgaXQgbG9nIGluZm9ybWF0aW9uIHdoaWNoIGlzIHVzZWZ1bCBmb3IgdHVuaW5nCit0aGUgY2FjaGUgc2l6ZS4gU2VlIHRoZSAKKy5CIE5PVEVTCitzZWN0aW9uIGZvciBkZXRhaWxzLgorCisuUFAKK1RoZSBidWlsdC1pbiBURlRQIHNlcnZlciBpcyBjYXBhYmxlIG9mIG1hbnkgc2ltdWx0YW5lb3VzIGZpbGUKK3RyYW5zZmVyczogdGhlIGFic29sdXRlIGxpbWl0IGlzIHJlbGF0ZWQgdG8gdGhlIG51bWJlciBvZiBmaWxlLWhhbmRsZXMKK2FsbG93ZWQgdG8gYSBwcm9jZXNzIGFuZCB0aGUgYWJpbGl0eSBvZiB0aGUgc2VsZWN0KCkgc3lzdGVtIGNhbGwgdG8KK2NvcGUgd2l0aCBsYXJnZSBudW1iZXJzIG9mIGZpbGUgaGFuZGxlcy4gSWYgdGhlIGxpbWl0IGlzIHNldCB0b28gaGlnaAordXNpbmcgCisuQiAtLXRmdHAtbWF4CitpdCB3aWxsIGJlIHNjYWxlZCBkb3duIGFuZCB0aGUgYWN0dWFsIGxpbWl0IGxvZ2dlZCBhdAorc3RhcnQtdXAuIE5vdGUgdGhhdCBtb3JlIHRyYW5zZmVycyBhcmUgcG9zc2libGUgd2hlbiB0aGUgc2FtZSBmaWxlIGlzCitiZWluZyBzZW50IHRoYW4gd2hlbiBlYWNoIHRyYW5zZmVyIHNlbmRzIGEgZGlmZmVyZW50IGZpbGUuCisKKy5QUAorSXQgaXMgcG9zc2libGUgdG8gdXNlIGRuc21hc3EgdG8gYmxvY2sgV2ViIGFkdmVydGlzaW5nIGJ5IHVzaW5nIGEgbGlzdAorb2Yga25vd24gYmFubmVyLWFkIHNlcnZlcnMsIGFsbCByZXNvbHZpbmcgdG8gMTI3LjAuMC4xIG9yIDAuMC4wLjAsIGluCisuQiAvZXRjL2hvc3RzIAorb3IgYW4gYWRkaXRpb25hbCBob3N0cyBmaWxlLiBUaGUgbGlzdCBjYW4gYmUgdmVyeSBsb25nLCAKK2Ruc21hc3EgaGFzIGJlZW4gdGVzdGVkIHN1Y2Nlc3NmdWxseSB3aXRoIG9uZSBtaWxsaW9uIG5hbWVzLiBUaGF0IHNpemUKK2ZpbGUgbmVlZHMgYSAxR0h6IHByb2Nlc3NvciBhbmQgYWJvdXQgNjBNYiBvZiBSQU0uCisKKy5TSCBJTlRFUk5BVElPTkFMSVNBVElPTgorRG5zbWFzcSBjYW4gYmUgY29tcGlsZWQgdG8gc3VwcG9ydCBpbnRlcm5hdGlvbmFsaXNhdGlvbi4gVG8gZG8gdGhpcywKK3RoZSBtYWtlIHRhcmdldHMgImFsbC1pMThuIiBhbmQgImluc3RhbGwtaTE4biIgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZgordGhlIHN0YW5kYXJkIHRhcmdldHMgImFsbCIgYW5kICJpbnN0YWxsIi4gV2hlbiBpbnRlcm5hdGlvbmFsaXNhdGlvbgoraXMgY29tcGlsZWQgaW4sIGRuc21hc3Egd2lsbCBwcm9kdWNlIGxvZyBtZXNzYWdlcyBpbiB0aGUgbG9jYWwKK2xhbmd1YWdlIGFuZCBzdXBwb3J0IGludGVybmF0aW9uYWxpc2VkIGRvbWFpbiBuYW1lcyAoSUROKS4gRG9tYWluCituYW1lcyBpbiAvZXRjL2hvc3RzLCAvZXRjL2V0aGVycyBhbmQgL2V0Yy9kbnNtYXNxLmNvbmYgd2hpY2ggY29udGFpbgorbm9uLUFTQ0lJIGNoYXJhY3RlcnMgd2lsbCBiZSB0cmFuc2xhdGVkIHRvIHRoZSBETlMtaW50ZXJuYWwgcHVueWNvZGUKK3JlcHJlc2VudGF0aW9uLiBOb3RlIHRoYXQKK2Ruc21hc3EgZGV0ZXJtaW5lcyBib3RoIHRoZSBsYW5ndWFnZSBmb3IgbWVzc2FnZXMgYW5kIHRoZSBhc3N1bWVkCitjaGFyc2V0IGZvciBjb25maWd1cmF0aW9uCitmaWxlcyBmcm9tIHRoZSBMQU5HIGVudmlyb25tZW50IHZhcmlhYmxlLiBUaGlzIHNob3VsZCBiZSBzZXQgdG8gdGhlIHN5c3RlbQorZGVmYXVsdCB2YWx1ZSBieSB0aGUgc2NyaXB0IHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciBzdGFydGluZworZG5zbWFzcS4gV2hlbiBlZGl0aW5nIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzLCBiZSBjYXJlZnVsIHRvIGRvIHNvCit1c2luZyBvbmx5IHRoZSBzeXN0ZW0tZGVmYXVsdCBsb2NhbGUgYW5kIG5vdCB1c2VyLXNwZWNpZmljIG9uZSwgc2luY2UKK2Ruc21hc3EgaGFzIG5vIGRpcmVjdCB3YXkgb2YgZGV0ZXJtaW5pbmcgdGhlIGNoYXJzZXQgaW4gdXNlLCBhbmQgbXVzdAorYXNzdW1lIHRoYXQgaXQgaXMgdGhlIHN5c3RlbSBkZWZhdWx0LiAKKyAKKy5TSCBGSUxFUworLklSIC9ldGMvZG5zbWFzcS5jb25mIAorCisuSVIgL3Vzci9sb2NhbC9ldGMvZG5zbWFzcS5jb25mCisKKy5JUiAvZXRjL3Jlc29sdi5jb25mCisuSVIgL3Zhci9ydW4vZG5zbWFzcS9yZXNvbHYuY29uZgorLklSIC9ldGMvcHBwL3Jlc29sdi5jb25mCisuSVIgL2V0Yy9kaGNwYy9yZXNvbHYuY29uZgorCisuSVIgL2V0Yy9ob3N0cworCisuSVIgL2V0Yy9ldGhlcnMKKworLklSIC92YXIvbGliL21pc2MvZG5zbWFzcS5sZWFzZXMgCisKKy5JUiAvdmFyL2RiL2Ruc21hc3EubGVhc2VzCisKKy5JUiAvdmFyL3J1bi9kbnNtYXNxLnBpZAorLlNIIFNFRSBBTFNPCisuQlIgaG9zdHMgKDUpLCAKKy5CUiByZXNvbHZlciAoNSkKKy5TSCBBVVRIT1IKK1RoaXMgbWFudWFsIHBhZ2Ugd2FzIHdyaXR0ZW4gYnkgU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4uCisKKwpkaWZmIC0tZ2l0IGEvbWFuL2VzL2Ruc21hc3EuOCBiL21hbi9lcy9kbnNtYXNxLjgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODFjNzQ1YQotLS0gL2Rldi9udWxsCisrKyBiL21hbi9lcy9kbnNtYXNxLjgKQEAgLTAsMCArMSwxNTIxIEBACisuVEggRE5TTUFTUSA4CisuU0ggTk9NQlJFCitkbnNtYXNxIFwtIFVuIGxpZ2VybyBzZXJ2aWRvciBESENQIHkgRE5TIGNvbiBjYWNo6S4KKy5TSCBTSU5PUFNJUworLkIgZG5zbWFzcQorLkkgW09QQ0lPTl0uLi4KKy5TSCAiREVTQ1JJUENJ004iCisuQlIgZG5zbWFzcQorZXMgdW4gbGlnZXJvIHNlcnZpZG9yIEROUywgVEZUUCB5IERIQ1AuIFN1IHByb3Dzc2l0byBlcyBwcm92ZWVyIHNlcnZpY2lvcyBETlMKK3kgREhDUCBhIHVuYSByZWQgZGUg4XJlYSBsb2NhbC4KKy5QUAorRG5zbWFzcSBhY2VwdGEgYvpzcXVlZGFzIEROUyB5IGxhcyByZXNwb25kZSBkZXNkZSB1biBwZXF1ZfFvCitjYWNo6SBsb2NhbCwgbyBsYXMgcmVlbnbtYSBoYWNpYSB1biBzZXJ2aWRvciBETlMgcmVhbCByZWN1cnNpdm8uCitDYXJnYSBlbCBjb250ZW5pZG8gZGUgL2V0Yy9ob3N0cywgZGUgdGFsIGZvcm1hIHF1ZSBub21icmVzIGRlCitob3N0cyBsb2NhbGVzIGxvcyBjdWFsZXMgbm8gYXBhcmVjZW4gZW4gZWwgRE5TIG11bmRpYWwgcHVlZGFuIHNlcgorcmVzdWVsdG9zLiBUYW1iaeluIHJlc3BvbmRlIGEgYvpzcXVlZGFzIEROUyBwYXJhIGhvc3RzIGNvbmZpZ3VyYWRvcwordu1hIERIQ1AuCisuUFAKK0VsIHNlcnZpZG9yIERIQ1AgZG5zbWFzcSBpbmNsdXllIHNvcG9ydGUgcGFyYSBhc2lnbmFjafNuIGRlIGRpcmVjY2lvbmVzCitlc3ThdGljYXMgeSByZWRlcyBt+mx0aXBsZXMuIEF1dG9t4XRpY2FtZW50ZSBlbnbtYSB1biBwcmVkZXRlcm1pbmFkbyBzZW5zaWJsZSBkZQorb3BjaW9uZXMgREhDUCwgeSBwdWVkZSBzZXIgY29uZmlndXJhZG8gcGFyYSBlbnZpYXIgY3VhbHF1aWVyIG9wY2lvbmVzIERIQ1AgZGVzZWFkYXMsCitpbmNsdXllbmRvIG9wY2lvbmVzIGVuY2Fwc3VsYWRhcyBwb3IgdmVuZGVkb3Jlcy4gSW5jbHV5ZSB1biBzZXJ2aWRvciBzZWd1cm8KK1RGVFAgc29sby1sZWN0dXJhIHBhcmEgcGVybWl0aXIgZWwgaW5pY2lvIHbtYSByZWQvUFhFIGRlIGhvc3RzIERIQ1AuIFRhbWLtZW4KK2luY2x1eWUgc29wb3J0ZSBwYXJhIEJPT1RQLgorLlBQCitEbnNtYXNxCitpbmNsdXllIHNvcG9ydGUgSVB2NiBwYXJhIEROUywgcGVybyBubyBwYXJhIERIQ1AuCisuU0ggT1BDSU9ORVMKK07zdGVzZSBxdWUgZW4gZ2VuZXJhbCBwYXLhbWV0cm9zIGF1c2VudGVzIHNvbiBwZXJtaXRpZG9zIHkgZGVzaGFiaWxpdGFuCitmdW5jaW9uZXMsIHBvciBlamVtcGxvICItLXBpZC1maWxlPSIgZGVzaGFiaWxpdGEgbGEgZXNjcml0dXJhIGRlIHVuCithcmNoaXZvIFBJRC4gRW4gQlNELCBhIG1lbm9zIHF1ZSBsYSBsaWJyZXLtYSBHTlUgZ2V0b3B0IGVzdOkgZW5sYXphZGEsCitsYSBmb3JtYSBsYXJnYSBkZSBsYXMgb3BjaW9uZXMgbm8gZnVuY2lvbmEgZW4gbGEgbO1uZWEgZGUgY29tYW5kb3MsCitwZXJvIHRvZGF27WEgZXMgcmVjb25vY2lkYSBlbiBlbCBhcmNoaXZvIGRlIGNvbmZpZ3VyYWNp824uCisuVFAKKy5CIC0tdGVzdAorTGVlciBhcmNoaXZvKHMpIGRlIGNvbmZpZ3VyYWNp824geSByZXZpc2FyIHN1IHNpbnRheGlzLiBTYWxpciBjb24gY/NkaWdvCiswIHNpIHRvZG8gZXN04SBiaWVuLCBvIHVuIGPzZGlnbyBuby1jZXJvIGVuIGN1YWxxdWllciBvdHJvIGNhc28uIE5vCitpbmljaWFyIGRuc21hc3EuCisuVFAKKy5CIFwtaCwgLS1uby1ob3N0cworTm8gbGVlciBsb3Mgbm9tYnJlcyBkZSBob3N0cyBlbiAvZXRjL2hvc3RzLgorLlRQCisuQiBcLUgsIC0tYWRkbi1ob3N0cz08YXJjaGl2bz4KK0FyY2hpdm8gZGUgaG9zdHMgYWRpY2lvbmFsLiBMZWVyIGVsIGFyY2hpdm8gZXNwZWNpZmljYWRvIGFkaWNpb25hbG1lbnRlCithIC9ldGMvaG9zdHMuIFNpIHNlIGJyaW5kYSAtaCwgbGVlciBzb2xvIGVsIGFyY2hpdm8gZXNwZWNpZmljYWRvLiBFc3RhCitvcGNp824gcHVlZGUgc2VyIHJlcGV0aWRhIHBhcmEgbeFzIGRlIHVuIGFyY2hpdm8gZGUgaG9zdHMgYWRpY2lvbmFsLiBTaQordW4gZGlyZWN0b3JpbyBlcyBicmluZGFkbywgZW50b25jZXMgbGVlciB0b2RvcyBsb3MgYXJjaGl2b3MgY29udGVuaWRvcyBlbgorZXNlIGRpcmVjdG9yaW8uCisuVFAKKy5CIFwtRSwgLS1leHBhbmQtaG9zdHMKK0FncmVnYXIgZWwgZG9taW5pbyBhIG5vbWJyZXMgc2VuY2lsbG9zIChzaW4gcHVudG8pIGVuIC9ldGMvaG9zdHMgZGUgbGEKK21pc21hIG1hbmVyYSBxdWUgY29uIG5vbWJyZXMgZGVyaXZhZG9zIGRlIERIQ1AuIE7zdGVzZSBxdWUgZXN0byBubworYXBsaWNhIGEgbm9tYnJlcyBkZSBkb21pbmlvIGVuIGNuYW1lcywgZXhwZWRpZW50ZXMgUFRSLCBUWFQsIGV0Yy4KKy5UUAorLkIgXC1ULCAtLWxvY2FsLXR0bD08dGllbXBvPgorQWwgcmVzcG9uZGVyIGNvbiBpbmZvcm1hY2nzbiBkZXNkZSAvZXRjL2hvc3RzIG8gZGVzZGUgZWwgYXJjaGl2bworZGUgYXJyaWVuZG9zIERIQ1AsIGRuc21hc3EgZmlqYSBlbCB0aWVtcG8gZGUgdmlkYSAoVFRMKSBhIGNlcm8gcG9yCitwcmVkZXRlcm1pbmFkbywgc2lnbmlmaWNhbmRvIHF1ZSBlbCByZW1pdGVudGUgbm8gZGVicuEgY2FjaGVhcgorbGEgaW5mb3JtYWNp824gcG9yIHPtIG1pc21vLiBFc3RvIGVzIGxvIGNvcnJlY3RvIGEgaGFjZXIgZW4gY2FzaQordG9kYXMgbGFzIHNpdHVhY2lvbmVzLiBFc3RhIG9wY2nzbiBwZXJtaXRlIHF1ZSBzZSBlc3BlY2lmaXF1ZQorY2llcnRvIHRpZW1wbyBkZSB2aWRhIChlbiBzZWd1bmRvcykgcGFyYSBlc3RhcyByZXNwdWVzdGFzLiBFc3RvCityZWR1Y2UgbGEgY2FyZ2Egc29icmUgZWwgc2Vydmlkb3IgYWwgY29zdG8gZGUgcXVlIGxvcyBjbGllbnRlcwordXNhcmFuIGRhdG9zIGHxZWpvcyBiYWpvIGFsZ3VuYXMgY2lyY3Vuc3RhbmNpYXMuCisuVFAKKy5CIC0tbmVnLXR0bD08dGllbXBvPgorUmVzcHVlc3RhcyBuZWdhdGl2YXMgZGVzZGUgc2Vydmlkb3JlcyB1cHN0cmVhbSBub3JtYWxtZW50ZSBjb250aWVuZW4KK2luZm9ybWFjafNuIHRpbWUtdG8tbGl2ZSAodGllbXBvIGRlIHZpZGEpIGVuIGV4cGVkaWVudGVzIFNPQSBxdWUKK2Ruc21hc3EgdXNhIHBhcmEgaGFjZXIgY2FjaOkuIFNpIGxhcyByZXNwdWVzdGFzIGRlIHNlcnZpZG9yZXMgdXBzdHJlYW0KK29taXRlbiBlc3RhIGluZm9ybWFjafNuLCBkbnNtYXNxIG5vIG1ldGUgbGEgcmVzcHVlc3RhIGVuIGVsIGNhY2jpLgorRXN0YSBvcGNp824gYnJpbmRhIHVuIHZhbG9yIHByZWRldGVybWluYWRvIHBhcmEgZWwgdGltZS10by1saXZlIHF1ZQorZG5zbWFzcSB1c2EgcGFyYSBtZXRlciByZXNwdWVzdGFzIG5lZ2F0aXZhcyBlbiBlbCBjYWNo6SBh+m4gZW4gbGEKK2F1c2VuY2lhIGRlIHVuIGV4cGVkaWVudGUgU09BLgorLlRQCisuQiAtLW1heC10dGw9PHRpZW1wbz4KK0ZpamFyIHVuIHZhbG9yIFRUTCAodGllbXBvIGRlIHZpZGEpIG3heGltbyBxdWUgc2Vy4SBlbnRyZWdhZG8gYQorY2xpZW50ZXMuIEVsIFRUTCBt4XhpbW8gZXNwZWNpZmljYWRvIHNlcuEgb3RvcmdhZG8gYSBjbGllbnRlcyBlbiB2ZXoKK2RlbCBUVEwgdmVyZGFkZXJvIHNpIGVzIG1lbm9yLiBFbCB2YWxvciBUVEwgcmVhbCBlcyBtYW50ZW5pZG8gZW4gZWwgY2FjaOkKK3BhcmEgcHJldmVuaXIgbGEgaW51bmRhY2nzbiBkZSBsb3Mgc2Vydmlkb3JlcyBETlMgdXBzdHJlYW0uCisuVFAKKy5CIFwtaywgLS1rZWVwLWluLWZvcmVncm91bmQKK05vIGlyIGhhY2lhIGVsIGZvbmRvIGFsIGluaWNpYXIsIHBlcm8gYXBhcnRlIGRlIGVzbyBlamVjdXRhciBjb21vCitub3JtYWwuIExhIGludGVuY2nzbiBkZSBlc3RvIGVzIHBhcmEgY3VhbmRvIGRuc21hc3EgZXMgZWplY3V0YWRvCitiYWpvIGRhZW1vbnRvb2xzIG8gbGF1bmNoZC4KKy5UUAorLkIgXC1kLCAtLW5vLWRhZW1vbgorTW9kbyBkZWJ1Zzogbm8gaGFjZXIgdW4gZm9yayBoYWNpYSBlbCBmb25kbywgbm8gY3JlYXIgdW4gYXJjaGl2byBQSUQsCitubyBjYW1iaWFyIGVsIElEIGRlbCB1c3VhcmlvLCBnZW5lcmFyIHVuIGNhY2hlIGR1bXAgY29tcGxldG8gYWwKK3JlY2liaXIgdW4gU0lHVVNSMSwgYml0YWNvcmVhciBhIHN0ZGVyciBhbCBpZ3VhbCBxdWUgYSBzeXNsb2csIG5vCitmb3JrZWFyIHByb2Nlc29zIG51ZXZvcyBwYXJhIG1hbmVqYXIgYvpzcXVlZGFzIFRDUC4KKy5UUAorLkIgXC1xLCAtLWxvZy1xdWVyaWVzCitCaXRhY29yZWFyIGxvcyByZXN1bHRhZG9zIGRlIGL6c3F1ZWRhcyBETlMgbWFuZWphZGFzIHBvciBkbnNtYXNxLgorSGFiaWxpdGFyIHVuIGR1bXAgZGUgY2FjaOkgY29tcGxldG8gYWwgcmVjaWJpciB1biBTSUdVU1IxLgorLlRQCisuQiBcLTgsIC0tbG9nLWZhY2lsaXR5PTxmYWNpbGlkYWQ+CitGaWphciBsYSBmYWNpbGlkYWQgYSBsYSBjdWFsIGRuc21hc3EgZGViZXLhIGVudmlhciBtZW5zYWplcyBzeXNsb2csCitlc3RvIGVzIERBRU1PTiBwb3IgcHJlZGV0ZXJtaW5hZG8sIHkgTE9DQUwwIGN1YW5kbyBlbCBtb2RvIGRlYnVnIGVzdOEKK2VuIG9wZXJhY2nzbi4gU2kgbGEgZmFjaWxpZGFkIGJyaW5kYWRhIGNvbnRpZW5lIHBvciBsbyBtZW5vcyB1biBjYXLhY3RlcgorIi8iLCBzZSB0cmF0YSBjb21vIHVuIG5vbWJyZSBkZSBhcmNoaXZvLCB5IGRuc21hc3EgYml0YWNvcmVhcuEgYSBkaWNobworYXJjaGl2bywgZW4gdmV6IGRlIHN5c2xvZy4gU2kgbGEgZmFjaWxpZGFkIGVzICctJyBlbnRvbmNlcyBkbnNtYXNxCitiaXRhY29yZWEgYSBzdGRlcnIuIChFcnJvcmVzIGR1cmFudGUgbGEgbGVjdHVyYSBkZSBsYSBjb25maWd1cmFjafNuCitpcuFuIGEgc3lzbG9nIHRvZGF27WEsIHBlcm8gdG9kbyBvdXRwdXQgZGVzZGUgdW4gaW5pY2lvIGV4aXRvc28sIHkgdG9kbworb3V0cHV0IG1pZW50cmFzIGVuIGVqZWN1Y2nzbiwgaXLhIGEgZXN0ZSBhcmNoaXZvIGV4Y2x1c2l2YW1lbnRlLikKK0FsIGJpdGFjb3JlYXIgYSB1biBhcmNoaXZvLCBkbnNtYXNxIGNlcnJhcuEgeSByZWFicmly4SBlbCBhcmNoaXZvIGFsCityZWNpYmlyIHVuIFNJR1VTUjIuIEVzdG8gcGVybWl0ZSBxdWUgZWwgYXJjaGl2byBkZSBiaXThY29yYSBzZWEgcm90YWRvCitzaW4gZGV0ZW5lciBhIGRuc21hc3EuCisuVFAKKy5CIC0tbG9nLWFzeW5jWz08bO1uZWFzPl0KK0hhYmlsaXRhciBiaXRhY29y6W8gYXNpbmNy825pY28geSBvcGNpb25hbG1lbnRlIGZpamFyIGVsIGztbWl0ZSBkZSBu+m1lcm8KK2RlIGztbmVhcyBxdWUgc2Vy4W4gZW52aWFkYXMgYSBsYSBjb2xldGEgcG9yIGRuc21hc3EgY3VhbmRvIHN5c2xvZyBlc3ThCitsZW50by4gRG5zbWFzcSBwdWVkZSBiaXRhY29yZWFyIGFzaW5jcvNuaWNhbWVudGU6IGVzdG8gbGUgcGVybWl0ZSBjb250aW51YXIKK2Z1bmNpb25hbmRvIHNpbiBzZXIgYmxvcXVlYWRvIHBvciBzeXNsb2csIHkgcGVybWl0ZSBhIHN5c2xvZyB1c2FyIGRuc21hc3EKK3BhcmEgYvpzcXVlZGFzIEROUyBzaW4gcmllc2dvIGRlIHRyYW5xdWUuIFNpIGxhIGNvbGV0YSBkZSBs7W5lYXMgZGUgYml04WNvcmEKK3NlIGxsZW5hLCBkbnNtYXNxIGJpdGFjb3JlYXLhIGVsIGRlc2JvcmRhbWllbnRvLCB5IGVsIG76bWVybyBkZSBtZW5zYWplcworcGVyZGlkb3MuIEVsIHRhbWHxbyBwcmVkZXRlcm1pbmFkbyBkZSBjb2xldGEgZXMgNSwgdW4gdmFsb3Igc2FubyBzZXLtYSA1LTI1LAoreSB1biBs7W1pdGUgZGUgMTAwIGVzIGltcHVlc3RvLgorLlRQCisuQiBcLXgsIC0tcGlkLWZpbGU9PHBhdGg+CitFc3BlY2lmaWNhciB1biBwYXRoIGFsdGVybm8gZG9uZGUgZG5zbWFzcSBkZWJlIGd1YXJkYXIgc3UgUElELgorTm9ybWFsbWVudGUgZXMgL3Zhci9ydW4vZG5zbWFzcS5waWQuCisuVFAKKy5CIFwtdSwgLS11c2VyPTx1c3VhcmlvPgorRXNwZWNpZmljYXIgZWwgdXNlcmlkIGFsIGN1YWwgZG5zbWFzcSBkZWJlIGNhbWJpYXJzZSBkZXNwdWVzIGRlIGluaWNpYXIuCitEbnNtYXNxIG5vcm1hbG1lbnRlIGRlYmUgc2VyIGluaWNpYWRvIGNvbW8gcm9vdCwgcGVybyBzb2x0YXLhIGxvcworcHJpdmlsZWdpb3Mgcm9vdCBkZXNwdWVzIGRlbCBpbmljaW8sIGNhbWJpYW5kbyBhIG90cm8gdXN1YXJpby4KK05vcm1hbG1lbnRlIGVzdGUgdXN1YXJpbyBlcyAibm9ib2R5IiwgcGVybyBlc28gc2UgcHVlZGUgY2FtYmlhcgorY29uIGVzdGEgb3BjafNuLgorLlRQCisuQiBcLWcsIC0tZ3JvdXA9PGdydXBvPiAKK0VzcGVjaWZpY2FyIGVsIGdydXBvIGNvbW8gZWwgY3VhbCBkbnNtYXNxIGNvcnJlcuEuIEVsIHByZWRldGVybWluYWRvCitlcyAiZGlwIiwgc2kgZXN04SBkaXNwb25pYmxlLCBwYXJhIGZhY2lsaXRhciBlbCBhY2Nlc28gYQorL2V0Yy9wcHAvcmVzb2x2LmNvbmYgZWwgY3XhbCBub3Jt4WxtZW50ZSBubyBlcyBnbG9iYWxtZW50ZSBsZe1ibGUuCisuVFAKKy5CIFwtdiwgLS12ZXJzaW9uCitNb3N0cmFyIGVsIG76bWVybyBkZSB2ZXJzafNuLgorLlRQCisuQiBcLXAsIC0tcG9ydD08cHVlcnRvPgorRXNjdWNoYXIgZW4gZWwgcHVlcnRvIDxwdWVydG8+IGVuIHZleiBkZWwgcHVlcnRvIGVzdOFuZGFyIEROUyAoNTMpLgorRmlqYXIgZXN0byBhIGNlcm8gZGVzaGFiaWxpdGEgY29tcGxldGFtZW50ZSBsYSBmdW5jafNuIEROUywgZGVqYW5kbworc29sbyBESENQIHkvbyBURlRQLgorLlRQCisuQiBcLVAsIC0tZWRucy1wYWNrZXQtbWF4PTx0YW1h8W8+CitFc3BlY2lmaWNhciBlbCBwYXF1ZXRlIFVEUCBFRE5TLjAgbeFzIGdyYW5kZSBxdWUgZXMgc29wb3J0YWRvIHBvcgorZWwgcmVlbnZpYWRvciBETlMuIFBvciBwcmVkZXRlcm1pbmFkbyBlcyA0MDk2LCBsbyBjdWFsIGVzIGVsCit0YW1h8W8gcmVjb21lbmRhZG8gZW4gUkZDNTYyNS4KKy5UUAorLkIgXC1RLCAtLXF1ZXJ5LXBvcnQ9PHB1ZXJ0bz4KK0VudmlhciBi+nNxdWVkYXMgb3V0Ym91bmQgZGVzZGUsIHkgZXNjdWNoYXIgcG9yIHJlc3B1ZXN0YXMgZW4sCitlbCBwdWVydG8gVURQIDxwdWVydG8+IGVuIHZleiBkZSB1c2FyIHB1ZXJ0b3MgYWxlYXRvcmlvcy4gTvN0ZXNlCitxdWUgdXNhciBlc3RhIG9wY2nzbiBoYWNlIHF1ZSBkbnNtYXNxIHNlYSBtZW5vcyBzZWd1cm8gY29udHJhCithdGFxdWVzIGRlIHNwb29maW5nIEROUywgcGVybyBwdWVkZSBzZXIgbeFzIHLhcGlkbyB5IHVzYXIgbWVub3MKK3JlY3Vyc29zLgorRmlqYXIgZXN0YSBvcGNp824gYSB6ZXJvIGhhY2UgcXVlIGRuc21hc3EgdXNlIHVuIHNvbG8gcHVlcnRvLAorYXNpZ25hZG8gcG9yIGVsIHNpc3RlbWEgb3BlcmF0aXZvIChlc3RvIGVyYSBlbCBjb21wb3J0YW1pZW50bworcHJlZGV0ZXJtaW5hZG8gZW4gdmVyc2lvbmVzIGFudGVyaW9yZXMgYSAyLjQzKS4KKy5UUAorLkIgLS1taW4tcG9ydD08cHVlcnRvPgorTm8gdXNhciBwdWVydG9zIG1lbm9yZXMgYSA8cHVlcnRvPiBjb21vIHJlbWl0ZW50ZXMgcGFyYSBi+nNxdWVkYXMKK0ROUyBvdXRib3VuZC4gRG5zbWFzcSBlc2NvamUgcHVlcnRvcyBhbGVhdG9yaW9zIGNvbW8gcmVtaXRlbnRlcworcGFyYSBi+nNxdWVkYXMgRE5TIG91dGJvdW5kLiBDdWFuZG8gZXN0YSBvcGNp824gZXMgYnJpbmRhZGEsIGxvcworcHVlcnRvcyB1c2Fkb3Mgc2llbXByZSBzZXLhbiBtYXlvcmVzIHF1ZSBlbCBlc3BlY2lmaWNhZG8uIEVzdG8gZXMKK/p0aWwgcGFyYSBzaXN0ZW1hcyBkZXRyYXMgZGUgZmlyZXdhbGxzLgorLlRQCisuQiBcLWksIC0taW50ZXJmYWNlPTxub21icmUgZGUgaW50ZXJmYWNlPgorRXNjdWNoYXIgc29sbyBlbiBsYXMgaW50ZXJmYWNlcyBlc3BlY2lmaWNhZGFzLiBEbnNtYXNxIGF1dG9t4XRpY2FtZW50ZQorYWdyZWdhIGxhIGludGVyZmFjZSBsb29wYmFjayBhIGxhIGxpc3RhIGRlIGludGVyZmFjZXMgcGFyYSB1c2FyIGN1YW5kbworbGEgb3BjafNuCisuQiBcLS1pbnRlcmZhY2UKK2VzIHVzYWRhLiBTaSBuaW5ndW5hIG9wY2nzbgorLkIgXC0taW50ZXJmYWNlCitvCisuQiBcLS1saXN0ZW4tYWRkcmVzcworZXMgYnJpbmRhZGEsIGRuc21hc3EgZXNjdWNoYSBlbiB0b2RhcyBsYXMgaW50ZXJmYWNlcyBkaXNwb25pYmxlcyBleGNlcHRvCitjdWFscXVpZXJhIGZpamFkYSBjb24gb3BjaW9uZXMKKy5CIFwtLWV4Y2VwdC1pbnRlcmZhY2UKK0ludGVyZmFjZXMgSVAgYWxpYXMgKHBvciBlamVtcGxvLCAiZXRoMTowIikgbm8gcHVlZGVuIHNlciB1dGlsaXphZGFzIGNvbgorLkIgLS1pbnRlcmZhY2UKK28KKy5CIC0tZXhjZXB0LWludGVyZmFjZQorLCB1c2FyIC0tbGlzdGVuLWFkZHJlc3MgZW4gdmV6LgorLlRQCisuQiBcLUksIC0tZXhjZXB0LWludGVyZmFjZT08bm9tYnJlIGRlIGludGVyZmFjZT4KK05vIGVzY3VjaGFyIGVuIGxhIGludGVyZmFjZSBlc3BlY2lmaWNhZGEuIE7zdGVzZSBxdWUgZWwgb3JkZW4gZGUKK2xhcyBvcGNpb25lcworLkIgXC0tbGlzdGVuLWFkZHJlc3MKKy5CIC0taW50ZXJmYWNlCit5CisuQiAtLWV4Y2VwdC1pbnRlcmZhY2UKK25vIGltcG9ydGEgeSBsYXMgb3BjaW9uZXMKKy5CIC0tZXhjZXB0LWludGVyZmFjZQorc2llbXByZSBpbnZhbGlkYW4gYSBsYXMgb3RyYXMuCisuVFAgCisuQiBcLTIsIC0tbm8tZGhjcC1pbnRlcmZhY2U9PG5vbWJyZSBkZSBpbnRlcmZhY2U+CitObyBwcm92ZWVyIERIQ1AgbmkgVEZUUCBlbiBsYSBpbnRlcmZhY2UgZXNwZWNpZmljYWRhLCBwZXJvIHPtCitwcm92ZWVyIHNlcnZpY2lvIEROUy4KKy5UUAorLkIgXC1hLCAtLWxpc3Rlbi1hZGRyZXNzPTxkaXJlY2Np824gSVA+CitFc2N1Y2hhciBlbiBsYShzKSBkaXJlY2Np824oZXMpIElQIGVzcGVjaWZpY2FkYShzKS4gTGFzIG9wY2lvbmVzCisuQiBcLS1pbnRlcmZhY2UKK3kKKy5CIFwtLWxpc3Rlbi1hZGRyZXNzCithbWJhcyBwdWVkZW4gc2VyIGJyaW5kYWRhcywgeSBlbiB0YWwgY2FzbyBlbCBqdWVnbyBkZSBhbWJhcworZGlyZWNjaW9uZXMgSVAgeSBpbnRlcmZhY2VzIGVzIHVzYWRhLiBO83Rlc2UgcXVlIHNpIG5pbmd1bmEgb3BjafNuCisuQiBcLS1pbnRlcmZhY2UKK2VzIGJyaW5kYWRhLCBwZXJvIHPtIHNlIGJyaW5kYSBsYSBvcGNp824KKy5CIFwtLWxpc3Rlbi1hZGRyZXNzCissIGVudG9uY2VzIGRuc21hc3Egbm8gZXNjdWNoYXLhIGF1dG9t4XRpY2FtZW50ZSBlbiBsYSBpbnRlcmZhY2UKK2xvb3BiYWNrLiBQYXJhIG9idGVuZXIgZXN0bywgc3UgZGlyZWNjafNuIElQLCAxMjcuMC4wLjEsIGRlYmUgc2VyCitleHBs7WNpdGFtZW50ZSBicmluZGFkYSBjb21vIHVuYSBvcGNp824KKy5CIFwtLWxpc3Rlbi1hZGRyZXNzCisuVFAKKy5CIFwteiwgLS1iaW5kLWludGVyZmFjZXMKK0VuIHNpc3RlbWFzIHF1ZSBpbmx1eWVuIGVsIHNvcG9ydGUsIGRuc21hc3EgYWNvcGxhIGxhIGRpcmVjY2nzbgorZGUgY29tb2TtbiwgYfpuIGN1YW5kbyBlc3ThIGVzY3VjaGFuZG8gc29sYW1lbnRlIGVuIGFsZ3VuYXMKK2ludGVyZmFjZXMuIEVudG9uY2VzIGRlc2NhcnRhIGL6c3F1ZWRhcyBhIGxhcyBjdWFsZXMgbm8gZGViZQorcmVzcG9uZGVyLiBFc3RvIHRpZW5lIGxhIHZlbnRhamEgZGUgZnVuY2lvbmFyIGH6biBjdWFuZG8KK2ludGVyZmFjZXMgdmFuIHkgdmllbmVuIHkgY2FtYmlhbiBkaXJlY2Npb25lcy4gRXN0YSBvcGNp824gZm9yemEKK2EgZG5zbWFzcSBhIGFjb3BsYXJzZSByZWFsbWVudGUgc29sbyBhIGxhcyBpbnRlcmZhY2VzIGVuCitsYXMgY3VhbGVzIGVzdOEgZXNjdWNoYW5kby4gQ2FzaSBsYSD6bmljYSB2ZXogcXVlIGVzdG8gZXMg+nRpbAorZXMgY3VhbmRvIHNlIGVzdOEgY29ycmllbmRvIG90cm8gc2Vydmlkb3IgRE5TIChvIG90cmEgaW5zdGFuY2lhCitkZSBkbnNtYXNxKSBlbiBsYSBtaXNtYSBt4XF1aW5hLiBGaWphciBlc3RhIG9wY2nzbiB0YW1iaWVuCitoYWJpbGl0YSBtdWx0aXBsZXMgaW5zdGFuY2lhcyBkZSBkbnNtYXNxLCBsYXMgY3VhbGVzIHByb3ZlZW4KK3NlcnZpY2lvIERIQ1AgZW4gbGEgbWlzbWEgbeFxdWluYS4KKy5UUAorLkIgXC15LCAtLWxvY2FsaXNlLXF1ZXJpZXMKK1JldG9ybmFyIHJlc3B1ZXN0YXMgYSBi+nNxdWVkYXMgRE5TIGRlc2RlIC9ldGMvaG9zdHMgbGFzIGN1YWxlcyBkZXBlbmRlbgorZGUgbGEgaW50ZXJmYWNlIGRvbmRlIGVudHLzIGxhIGL6c3F1ZWRhLiBTaSB1biBub21icmUgZW4gL2V0Yy9ob3N0cyB0aWVuZQorbWFzIGRlIHVuYSBkaXJlY2Np824gYXNvY2lhZGEgY29uIGVsLCB5IHBvciBsbyBtZW5vcyB1bmEgZGUgZXNhcyBkaXJlY2Npb25lcworZXN04SBlbiBsYSBtaXNtYSBzdWJyZWQgZGUgbGEgaW50ZXJmYWNlIGRvbmRlIGZ1ZSBlbnZpYWRhLCBlbnTzbmNlcworcmV0b3JuYXIgc29sbyBsYXMgZGlyZWNjaW9uZXMgZW4gZXNhIHN1YnJlZC4gRXN0byBwZXJtaXRlIGEgdW4gc2Vydmlkb3IKK3RlbmVyIGRpcmVjY2lvbmVzIG36bHRpcGxlcyBlbiAvZXRjL2hvc3RzIGNvcnJlc3BvbmRpZW50ZXMgYSBjYWRhIHVuYSBkZQorc3VzIGludGVyZmFjZXMgeSBjYWRhIGhvc3QgcmVjaWJpcuEgbGEgcmVzcHVlc3RhIGFkZWN1YWRhCitkZXBlbmRpZW5kbyBkZSBjdWFsIHJlZCB0ZW5nYW4gYWRqdW50YS4gUG9yIGVsIG1vbWVudG8sIGVzdGEgZmFjaWxpZGFkCitlc3ThIGxpbWl0YWRhIGEgSVB2NC4KKy5UUAorLkIgXC1iLCAtLWJvZ3VzLXByaXYKK0L6c3F1ZWRhcyBwcml2YWRhcyByZXZlcnNhcyByYXJhcy4gVG9kYSBi+nNxdWVkYSByZXZlcnNhIHBhcmEgcmFuZ29zIGRlIElQCitwcml2YWRvcyAoMTkyLjE2OC54LngsIGV0Yy4pIGxvcyBjdWFsZXMgbm8gc2UgZW5jdWVudHJlbiBlbgorL2V0Yy9ob3N0cyBvIGVuIGVsIGFyY2hpdm8gZGUgYXJyaWVuZG9zIERIQ1AgZXMgcmVzcG9uZGlkYSBjb24KKyJkb21pbmlvIG5vIGV4aXN0ZW50ZSIgZW4gdmV6IGRlIHNlciByZWVudmlhZGEgdXBzdHJlYW0uCisuVFAKKy5CIFwtViwgLS1hbGlhcz1bPElQIHZpZWpvPl18WzxJUCBpbmljaW8+LTxJUCBmaW5hbD5dLDxJUCBudWV2bz5bLDxt4XNjYXJhPl0KK01vZGlmaWNhciBkaXJlY2Npb25lcyBJUHY0IHJldG9ybmFkYXMgZGVzZGUgc2Vydmlkb3JlcyBETlMgdXBzdHJlYW07Cis8SVAgdmllam8+IGVzIHJlbXBsYXphZG8gY29uIDxJUCBudWV2bz4uIFNpIGxhIG3hc2NhcmEgb3BjaW9uYWwKK2VzIGJyaW5kYWRhLCBlbnRvbmNlcyBjdWFscXVpZXIgZGlyZWNjafNuIHF1ZSBjb2luY2lkYSBjb24gZWwKKzxJUCB2aWVqbz4gZW5tYXNjYXJhZG8gc2Vy4SByZS1lc2NyaXRhLiBBc+0gcXVlLCBwb3IgZWplbXBsbywKKy5CIC0tYWxpYXM9MS4yLjMuMCw2LjcuOC4wLDI1NS4yNTUuMjU1LjAgdHJhemFy4SAxLjIuMy41NiBhIDYuNy44LjU2Cit5IDEuMi4zLjY3IGEgNi43LjguNjcuIEVzdG8gZXMgbG8gcXVlCitydXRlYWRvcmVzIENpc2NvIFBJWCBsbGFtYW4gIkROUyBkb2N0b3JpbmciLiBTaSBsYSBkaXJlY2Np824gdmllamEgZXMKK2JyaW5kYWRhIGNvbW8gdW4gcmFuZ28sIGVudG9uY2VzIHNvbG8gZGlyZWNjaW9uZXMgZW4gZXNlIHJhbmdvLCB5IG5vCitsYSBzdWJyZWQgZW50ZXJhLCBzb24gcmUtZXNjcml0YXMuIERlIHRhbCBtYW5lcmEgcXVlCisuQiAtLWFsaWFzPTE5Mi4xNjguMC4xMC0xOTIuMTY4LjAuNDAsMTAuMC4wLjAsMjU1LjI1NS4yNTUuMAorcmVsYWNpb25hIDE5Mi4xNjguMC4xMC0+MTkyLjE2OC4wLjQwIGEgMTAuMC4wLjEwLT4xMC4wLjAuNDAKKy5UUAorLkIgXC1CLCAtLWJvZ3VzLW54ZG9tYWluPTxkaXJlY2Np824gSVA+CitUcmFuc2Zvcm1hciByZXNwdWVzdGFzIHF1ZSBjb250aWVuZW4gbGEgZGlyZWNjafNuIElQIGJyaW5kYWRhIGEKK3Jlc3B1ZXN0YXMgdGlwbyAiRG9taW5pbyBubyBleGlzdGUiLiBMYSBpbnRlbmNp824gZGUgZXN0byBlcyBhY3R1YXIKK2VuIGNvbnRyYSBkZSB1bmEgbW92aWRhIGRlc3ZpYWRhIGhlY2hhIHBvciBWZXJpc2lnbiBlbiBzZXB0aWVtYnJlCitkZWwgMjAwMywgY3VhbmRvIGNvbWVuemFyb24gYSByZXRvcm5hciBsYSBkaXJlY2Np824gZGUgdW4gc2Vydmlkb3IKK2RlIHB1YmxpY2lkYWQgZW4gcmVzcHVlc3RhIGEgYvpzcXVlZGFzIHBvciBub21icmVzIG5vIHJlZ2lzdHJhZG9zLAorZW4gdmV6IGRlIGxhIGNvcnJlY3RhIHJlc3B1ZXN0YSBOWERPTUFJTi4gRXN0YSBvcGNp824gbGUgZGljZSBhIGRuc21hc3EKK3F1ZSBkZWJlIGZvcmplYXIgbGEgcmVzcHVlc3RhIGNvcnJlY3RhIGN1YW5kbyB2ZSBlc3RlIGNvbXBvcnRhbWllbnRvLgorUGFyYSBzZXB0aWVtYnJlIDIwMDMgbGEgZGlyZWNjafNuIElQIHNpZW5kbyByZXRvcm5hZGEgcG9yIFZlcmlzaWduCitlcyA2NC45NC4xMTAuMTEKKy5UUAorLkIgXC1mLCAtLWZpbHRlcndpbjJrCitBbGd1bmFzIHZlcnNpb25lcyBkZSBXaW5kb3dzIGhhY2VuIGL6c3F1ZWRhcyBETlMgcGVyafNkaWNhcyBsYXMgY3VhbGVzIG5vCityZWNpYmVuIHJlc3B1ZXN0YXMgc2Vuc2libGVzIGRlc2RlIGVsIEROUyBw+mJsaWNvIHkgcHVlZGVuIGNhdXNhciBwcm9ibGVtYXMKK2FjdGl2YW5kbyBlbmxhY2VzIG1hcmNhY2nzbi1lbi1kZW1hbmRhLiBFc3RhIG9wY2nzbiBmaWx0cmEgZGljaGFzIGL6c3F1ZWRhcy4KK0xhcyBi+nNxdWVkYXMgZmlsdHJhZGFzIHNvbiBwYXJhIHJlZ2lzdHJvcyB0aXBvIFNPQSB5IFNSViwgYWwgaWd1YWwgcXVlCit0aXBvIEFOWSBkb25kZSBlbCBub21icmUgcGVkaWRvIGNvbnRpZW5lIF8sIHBhcmEgYXRyYXBhciBi+nNxdWVkYXMgTERBUC4KKy5UUAorLkIgXC1yLCAtLXJlc29sdi1maWxlPTxhcmNoaXZvPgorTGVlciBsYXMgZGlyZWNjaW9uZXMgSVAgZGUgc2Vydmlkb3JlcyBETlMgdXBzdHJlYW0gZGVzZGUgPGFyY2hpdm8+LAorZW4gdmV6IGRlIC9ldGMvcmVzb2x2LmNvbmYuIFBhcmEgZWwgZm9ybWF0byBkZSBlc3RlIGFyY2hpdm8sIHZlcgorLkJSIHJlc29sdi5jb25mICg1KQorTGFzIPpuaWNhcyBs7W5lYXMgcmVsZXZhbnRlcyBhIGRuc21hc3Egc29uIGxhcyBkZSBzZXJ2aWRvcmVzIEROUy4gQQorZG5zbWFzcSBzZSBsZSBwdWVkZSBkZWNpciBxdWUgcmV2aXNlIG3hcyBkZSB1biBhcmNoaXZvIHJlc29sdi5jb25mLAorZWwgcHJpbWVyIGFyY2hpdm8gZXNwZWNpZmljYWRvIHJlbXBsYXphIGFsIHByZWRldGVybWluYWRvLCB5IGxvcworc3Vic2lndWllbnRlcyBzb24gYWdyZWdhZG9zIGEgbGEgbGlzdGEuIEVzdG8gZXMgc29sbworcGVybWl0aWRvIGFsIGhhY2VyIHBvbGxpbmc7IGVsIGFyY2hpdm8gY29uIGxhIGFjdHVhbCBmZWNoYQorZGUgbW9kaWZpY2FjafNuIG3hcyBudWV2YSBlcyBlbCBxdWUgc2Vy4SB1c2Fkby4KKy5UUAorLkIgXC1SLCAtLW5vLXJlc29sdgorTm8gbGVlciAvZXRjL3Jlc29sdi5jb25mLiBPYnRlbmVyIGxvcyBzZXJ2aWRvcmVzIEROUyB1cHN0cmVhbSBzb2xvCitkZXNkZSBsYSBs7W5lYSBkZSBjb21hbmRvcyBvIGRlc2RlIGVsIGFyY2hpdm8gZGUgY29uZmlndXJhY2nzbiBkZQorZG5zbWFzcS4KKy5UUAorLkIgXC0xLCAtLWVuYWJsZS1kYnVzCitQZXJtaXRpciBxdWUgbGEgY29uZmlndXJhY2nzbiBkZSBkbnNtYXNxIHNlYSBhY3R1YWxpemFkYSB27WEgbGxhbWFkYXMKK2RlIG3pdG9kbyBEQnVzLiBMYSBjb25maWd1cmFjafNuIHF1ZSBwdWVkZSBzZXIgY2FtYmlhZGEgZXMgc2Vydmlkb3JlcworRE5TIHVwc3RyZWFtICh5IGRvbWluaW9zIGNvcnJlc3BvbmRpZW50ZXMpIHkgbGltcGllemEgZGUgY2FjaOkuIEVzdGEKK29wY2nzbiByZXF1aWVyZSBxdWUgZG5zbWFzcSBoYXlhIHNpZG8gY29tcGlsYWRvIGNvbiBzb3BvcnRlIHBhcmEgREJ1cy4KKy5UUCAKKy5CIFwtbywgLS1zdHJpY3Qtb3JkZXIKK1BvciBwcmVkZXRlcm1pbmFkbywgZG5zbWFzcSBlbnZpYXLhIGL6c3F1ZWRhcyBhIGN1YWxxdWllcmEgZGUgbG9zCitzZXJ2aWRvcmVzIHVwc3RyZWFtIHF1ZSBjb25vY2UsIHkgdHJhdGEgZGUgZmF2b3JlY2VyIHNlcnZpZG9yZXMgbG9zCitjdWFsZXMgc2FiZSBxdWUgZXN04W4gYWN0aXZvcy4gRmlqYXIgZXN0YSBvcGNp824gZm9yemEgYSBkbnNtYXNxIGEKK3Byb2JhciBjYWRhIGL6c3F1ZWRhIGNvbiBjYWRhIHNlcnZpZG9yIGVzdHJpY3RhbWVudGUgZW4gZWwgb3JkZW4KK3F1ZSBhcGFyZWNlbiBlbiAvZXRjL3Jlc29sdi5jb25mCisuVFAKKy5CIC0tYWxsLXNlcnZlcnMKK1BvciBwcmVkZXRlcm1pbmFkbywgY3VhbmRvIGRuc21hc3EgdGllbmUgbeFzIGRlIHVuIHNlcnZpZG9yIHVwc3RyZWFtCitkaXNwb25pYmxlLCBlbnZpYXLhIGL6c3F1ZWRhcyBhIHNvbG8gdW4gc2Vydmlkb3IuIEZpamFyIGVzdGEgb3BjafNuCitmb3J6YSBhIGRuc21hc3EgYSBlbnZpYXIgdG9kYXMgbGFzIGL6c3F1ZWRhcyBhIHRvZG9zIGxvcyBzZXJ2aWRvcmVzCitkaXNwb25pYmxlcy4gTGEgcmVzcHVlc3RhIGRlbCBzZXJ2aWRvciBxdWUgcmVzcG9uZGEgcHJpbWVybyBzZXLhCitkZXZ1ZWx0YSBhbCBzb2xpY2l0YW50ZSBvcmlnaW5hbC4KKy5UUAorLkIgLS1zdG9wLWRucy1yZWJpbmQKK0RlbmVnYXIgKHkgYml0YWNvcmVhcikgZGlyZWNjaW9uZXMgZGUgc2Vydmlkb3JlcyB1cHN0cmVhbSBxdWUgZXN04W4KK2RlbnRybyBkZSByYW5nb3MgSVAgcHJpdmFkb3MuIEVzdG8gYmxvcXVlYSB1biBhdGFxdWUgZG9uZGUgdW4gbmF2ZWdhZG9yCitkZXRy4XMgZGUgdW4gZmlyZXdhbGwgZXMgdXNhZG8gcGFyYSBhbmFsaXphciBt4XF1aW5hcyBlbiBsYSByZWQgbG9jYWwuCisuVFAKKy5CIC0tcmViaW5kLWxvY2FsaG9zdC1vaworRXhpbWlyIGEgMTI3LjAuMC4wLzggZGUgdmVyaWZpY2FjaW9uZXMgZGUgcmViaW5kaW5nLiBFc3RlIHJhbmdvIGRlCitkaXJlY2Npb25lcyBlcyByZXRvcm5hZG8gcG9yIHNlcnZpZG9yZXMgZGUgdGllbXBvIHJlYWwgdGlwbyBob3lvCituZWdybywgYXPtIHF1ZSBibG9xdWVhcmxvIHB1ZWRlIGRlc2hhYmlsaXRhciBlc3RvcyBzZXJ2aWNpb3MuCisuVFAKKy5CICAtLXJlYmluZC1kb21haW4tb2s9Wzxkb21haW4+XXxbWy88ZG9tYWluPi9bPGRvbWFpbj4vXQorTm8gZGV0ZWN0YXIgeSBibG9xdWVhciBkbnMtcmViaW5kIGVuIGL6c3F1ZWRhcyBhIGVzdG9zIGRvbWluaW9zLiBFbAorYXJndW1lbnRvIHB1ZWRlIHNlciBvIHVuIGRvbWluaW8gc2VuY2lsbG8sIG8gbfpsdGlwbGVzIGRvbWluaW9zCityb2RlYWRvcyBwb3IgJy8nLCBjb21vIGVsIHN5bnRheCBkZSAtLXNlcnZlciwgcG9yIGVqZW1wbG8KKy5CICAtLXJlYmluZC1kb21haW4tb2s9L2RvbWluaW8xL2RvbWluaW8yL2RvbWluaW8zLworLlRQCisuQiBcLW4sIC0tbm8tcG9sbAorTm8gcmV2aXNhciBwZXJpb2RpY2FtZW50ZSBhIC9ldGMvcmVzb2x2LmNvbmYgZW4gYnVzY2EgZGUgY2FtYmlvcy4KKy5UUAorLkIgLS1jbGVhci1vbi1yZWxvYWQKK0N1YW5kbyBzZWEgcXVlIC9ldGMvcmVzb2x2LmNvbmYgZXMgcmUtbGVpZGEsIGxpYmVyYXIgZWwgY2FjaOkgRE5TLgorRXN0byBlcyD6dGlsIGN1YW5kbyBzZXJ2aWRvcmVzIEROUyBudWV2b3MgcHVlZGFuIHRlbmVyIGRhdG9zIGRpZmVyZW50ZXMKK2EgbG9zIGNvbnRlbmlkb3MgZW4gZWwgY2FjaOkuCisuVFAKKy5CIFwtRCwgLS1kb21haW4tbmVlZGVkCitMZSBkaWNlIGEgZG5zbWFzcSBxdWUgbm8gZGViZSByZWVudmlhciBi+nNxdWVkYXMgcGFyYSBub21icmVzIHNlbmNpbGxvcywKK3NpbiBwdW50b3MgbyBwYXJ0ZXMgZGUgZG9taW5pb3MsIGEgc2Vydmlkb3JlcyB1cHN0cmVhbS4gU2kgZWwgbm9tYnJlCitubyBzZSBjb25vY2UgZGVzZGUgL2V0Yy9ob3N0cyBvIGRlc2RlIERIQ1AgZW50b25jZXMgdW5hIHJlc3B1ZXN0YQorIm5vIGVuY29udHJhZG8iIGVzIGRldnVlbHRhLgorLlRQCisuQiBcLVMsIC0tbG9jYWwsIC0tc2VydmVyPVsvWzxkb21pbmlvPl0vW2RvbWluaW8vXV1bPGRpcmVjY2nzbiBJUD5bIzxwdWVydG8+XVtAPElQIGRlIHJlbWl0ZW50ZT58PGludGVyZmFjZT5bIzxwdWVydG8+XV0KK0VzcGVjaWZpY2FyIGxhIGRpcmVjY2nzbiBJUCBkZSBzZXJ2aWRvcmVzIHVwc3RyZWFtIGRpcmVjdGFtZW50ZS4gRmlqYXIKK2VzdGEgb3BjafNuIG5vIHN1cHJpbWUgbGEgbGVjdHVyYSBkZSAvZXRjL3Jlc29sdi5jb25mLCB1c2UgLVIgcGFyYQoraGFjZXIgZXNvLiBTaSB1bm8gYSBt4XMgZG9taW5pb3Mgb3BjaW9uYWxlcyBzb24gYnJpbmRhZG9zLCBlc2Ugc2Vydmlkb3IKK2VzIHVzYWRvIHNvbG8gcGFyYSBlc29zIGRvbWluaW9zIHkgbGFzIGL6c3F1ZWRhcyBzb24gaGVjaGFzIHVzYW5kbworZWwgc2Vydmlkb3IgZXNwZWNpZmljYWRvIHNvbGFtZW50ZS4gTGEgaW50ZW5jafNuIGRlIGVzdG8gZXMgcGFyYSBlbAordXNvIGNvbiBzZXJ2aWRvcmVzIEROUyBwcml2YWRvczogc2kgdXN0ZWQgdGllbmUgdW4gc2Vydmlkb3IgRE5TIGVuIHN1CityZWQgZWwgY3VhbCBsaWRlYSBjb24gbm9tYnJlcyBkZSBsYSBmb3JtYQoreHh4LmludGVybmFsLnRoZWtlbGxleXMub3JnLnVrIGVuIDE5Mi4xNjguMS4xIGVudG9uY2VzIGJyaW5kYXIgbGEKK29wY2nzbgorLkIgLVMgL2ludGVybmFsLnRoZWtlbGxleXMub3JnLnVrLzE5Mi4xNjguMS4xCitlbnZpYXLhIHRvZGFzIGxhcyBi+nNxdWVkYXMgZGUgbeFxdWluYXMgaW50ZXJuYXMgYSBlc2Ugc2Vydmlkb3IgRE5TLAordG9kYXMgbGFzIGRlbeFzIGL6c3F1ZWRhcyBzZXLhbiBlbnZpYWRhcyBhIGxvcyBzZXJ2aWRvcmVzIGVuCisvZXRjL3Jlc29sdi5jb25mLiBVbmEgZXNwZWNpZmljYWNp824gZGUgZG9taW5pbyBlbiBibGFuY28sCisuQiAvLwordGllbmUgZWwgc2lnbmlmaWNhZG8gZXNwZWNpYWwgZGUgInNvbG8gbm9tYnJlcyBubyBjYWxpZmljYWRvcyIsIG8KK3NlYSBub21icmVzIHNpbiBuaW5n+m4gcHVudG8gZW4gZWxsb3MuIFVuIHB1ZXJ0byBuby1lc3ThbmRhciBwdWVkZQorc2VyIGVzcGVjaWZpY2FkbyBjb21vIHBhcnRlIGRlIGxhIGRpcmVjY2nzbiBJUCB1c2FuZG8gZWwgY2FyYWN0ZXIKKyMuIE3hcyBkZSB1bmEgb3BjafNuIC1TIGVzIHBlcm1pdGlkYSwgY29uIHBhcnRlcyBkZSBkb21pbmlvIG8KK2RpcmVjY2nzbiBJUCByZXBldGlkYXMgY29tbyBzZWEgbmVjZXNhcmlvLgorCitEb21pbmlvcyBt4XMgZXNwZWPtZmljb3MgdG9tYW4gcHJlY2VkZW5jaWEgc29icmUgbG9zIG1lbm9zIGVzcGVj7WZpY29zLAorYXPtIHF1ZToKKy5CIC0tc2VydmVyPS9nb29nbGUuY29tLzEuMi4zLjQKKy5CIC0tc2VydmVyPS93d3cuZ29vZ2xlLmNvbS8yLjMuNC41CitlbnZpYXLhIGL6c3F1ZWRhcyBwb3IgKi5nb29nbGUuY29tIGhhY2lhIDEuMi4zLjQsIGV4Y2VwdG8KKyp3d3cuZ29vZ2xlLmNvbSwgZWwgY3VhbCBpcuEgYSAyLjMuNC41LgorCitMYSBkaXJlY2Np824gZXNwZWNpYWwgZGUgc2Vydmlkb3IgJyMnIHNpZ25pZmljYSAidXNhciBsb3Mgc2Vydmlkb3JlcworZXN04W5kYXJlcyIsIGFz7SBxdWUKKy5CIC0tc2VydmVyPS9nb29nbGUuY29tLzEuMi4zLjQKKy5CIC0tc2VydmVyPS93d3cuZ29vZ2xlLmNvbS8jCitlbnZpYXLhIGL6c3F1ZWRhcyBwb3IgKi5nb29nbGUuY29tIGhhY2lhIDEuMi4zLjQsIGV4Y2VwdG8KKyp3d3cuZ29vZ2xlLmNvbSwgZWwgY3VhbCBzZXLhIHJlZW52aWFkbyBkZSBtYW5lcmEgdXN1YWwuCisKK1RhbWJp6W4gc2UgcGVybWl0ZSB1bmEgb3BjafNuIC1TIGxhIGN1YWwgYnJpbmRhIHVuIGRvbWluaW8gcGVybworbmluZ3VuYSBkaXJlY2Np824gSVA7IGVzdG8gbGUgZGljZSBhIGRuc21hc3EgcXVlIHVuIGRvbWluaW8gZXMgbG9jYWwKK3kgcHVlZGUgcmVzcG9uZGVyIGEgYvpzcXVlZGFzIGRlc2RlIC9ldGMvaG9zdHMgbyBESENQIHBlcm8gbnVuY2EKK2RlYmVy4SByZWVudmlhciBi+nNxdWVkYXMgZW4gZXNlIGRvbWluaW8gYSBuaW5n+m4gc2Vydmlkb3IgdXBzdHJlYW0uCisuQiBsb2NhbAorZXMgdW4gc2lu825pbW8gZGUKKy5CIHNlcnZlcgorcGFyYSBoYWNlciBsb3MgYXJjaGl2b3MgZGUgY29uZmlndXJhY2nzbiBtYXMgY2xhcm9zIGVuIGVzdGUgY2Fzby4KKworRWwgc3RyaW5nIG9wY2lvbmFsIGRlc3B1ZXMgZGVsIGNhcuFjdGVyIEAgbGUgZGljZSBhIGRuc21hc3EgY29tbyBmaWphcgorZWwgcmVtaXRlbnRlIGRlIGxhcyBi+nNxdWVkYXMgaGFjaWEgZXN0ZSBzZXJ2aWRvciBETlMuIERlYmUgc2VyIHVuYQorZGlyZWNjafNuIElQLCBsYSBjdWFsIGRlYmUgc2VyIHBlcnRlbmVjaWVudGUgYSBsYSBt4XF1aW5hIGVuIGxhIGN1YWwKK2NvcnJlIGRuc21hc3EsIGRlIGZvcm1hIGNvbnRyYXJpYSBlc3RhIGztbmVhIGRlIHNlcnZpZG9yIHNlcuEgYml0YWNvcmVhZGEKK3kgZGVzcHXpcyBpZ25vcmFkYSwgbyB1biBub21icmUgZGUgaW50ZXJmYWNlLiBTaSB1biBub21icmUgZGUgaW50ZXJmYWNlCitlcyBicmluZGFkbywgZW50b25jZXMgYvpzcXVlZGFzIGhhY2lhIGVsIHNlcnZpZG9yIHNlcuFuIGZvcnphZGFzIHbtYSBlc2EKK2ludGVyZmFjZTsgc2kgdW5hIGRpcmVjY2nzbiBJUCBlcyBicmluZGFkYSwgZW50b25jZXMgbGEgZGlyZWNjafNuIGRlCityZW1pdGVudGUgZGUgbGFzIGL6c3F1ZWRhcyBzZXLhIGZpamFkYSBhIGVzYSBkaXJlY2Np824uCitMYSBldGlxdWV0YSBxdWVyeS1wb3J0IGVzIGlnbm9yYWRhIHBhcmEgY3VhbHF1aWVyIHNlcnZpZG9yZXMgcXVlIHRlbmdhbgordW5hIGRpcmVjY2nzbiByZW1pdGVudGUgZXNwZWNpZmljYWRhLCBwZXJvIGVsIHB1ZXJ0byBwdWVkZSBzZXIKK2VzcGVjaWZpY2FkbyBkaXJlY3RhbWVudGUgY29tbyBwYXJ0ZSBkZSBsYSBkaXJlY2Np824gcmVtaXRlbnRlLiBGb3J6YXIKK2L6c3F1ZWRhcyBhIHVuYSBpbnRlcmZhY2Ugbm8gZXN04SBpbXBsZW1lbnRhZG8gZW4gdG9kYXMgbGFzIHBsYXRhZm9ybWFzCitzb3BvcnRhZGFzIHBvciBkbnNtYXNxLgorLlRQCisuQiBcLUEsIC0tYWRkcmVzcz0vPGRvbWluaW8+L1tkb21pbmlvL108ZGlyZWNjafNuIElQPgorRXNwZWNpZmljYXIgdW5hIGRpcmVjY2nzbiBJUCBwYXJhIHJldG9ybmFyIHBvciBjdWFscXVpZXIgaG9zdCBlbgorbG9zIGRvbWluaW9zIGJyaW5kYWRvcy4gQvpzcXVlZGFzIGVuIGVzdG9zIGRvbWluaW9zIG51bmNhIHNvbgorcmVlbnZpYWRhcywgeSBzaWVtcHJlIHNvbiByZXNwb25kaWRhcyBjb24gbGEgZGlyZWNjafNuIElQCitlc3BlY2lmaWNhZGEsIGxhIGN1YWwgcHVlZGUgc2VyIElQdjQgbyBJUHY2LiBQYXJhIGJyaW5kYXIgYW1iYXMKK2RpcmVjY2lvbmVzIElQdjQgeSBJUHY2IHBhcmEgdW4gZG9taW5pbywgdXNhciBvcGNpb25lcyAtQSByZXBldGlkYXMuCitO83Rlc2UgcXVlIC9ldGMvaG9zdHMgeSBhcnJpZW5kb3MgREhDUCBpbnZhbGlkYW4gZXN0byBwYXJhIG5vbWJyZXMKK2luZGl2aWR1YWxlcy4gVW4gdXNvIGNvbfpuIHBhcmEgZXN0byBlcyByZWRpcmVjY2lvbmFyIGVsIGRvbWluaW8KK2RvdWJsZWNsaWNrLm5ldCBlbnRlcm8gYSBhbGf6biBzZXJ2aWRvciB3ZWIgbG9jYWwgYW1pZ2FibGUgcGFyYQorZXZpdGFyIGJhbm5lcnMgZGUgcHVibGljaWRhZC4gTGEgZXNwZWNpZmljYWNp824gZnVuY2lvbmEgZGUgbGEgbWlzbWEKK2Zvcm1hIHF1ZSBjb24gLS1zZXJ2ZXIsIGNvbiBsYSBmYWNpbGlkYWQgYWRpY2lvbmFsIHF1ZSAvIy8gY29pbmNpZGUKK2NvbiBjdWFscXVpZXIgZG9taW5pby4gRGUgdGFsIGZvcm1hLCAtLWFkZHJlc3M9LyMvMS4yLjMuNCBzaWVtcHJlCityZXRvcm5hcuEgMS4yLjMuNCBwYXJhIGN1YWxxdWllciBi+nNxdWVkYSBubyByZXNwb25kaWRhIGRlc2RlCisvZXRjL2hvc3RzIG8gREhDUCB5IHF1ZSBubyBoYXlhIHNpZG8gZW52aWFkYSBhIHVuIHNlcnZpZG9yIEROUwordXBzdHJlYW0gcG9yIHVuYSBkaXJlY3RpdmEgLS1zZXJ2ZXIgbWFzIGVzcGVjaWZpY2EuCisuVFAKKy5CIFwtbSwgLS1teC1ob3N0PTxub21icmUgbXg+W1ssPG5vbWJyZSBkZSBob3N0Pl0sPHByZWZlcmVuY2lhPl0KK1JldG9ybmFyIHVuIHJlY29yZCBsbGFtYWRvIDxteCBuYW1lPiBhcHVudGFuZG8gaGFjaWEgZWwgbm9tYnJlIGRlCitob3N0IGJyaW5kYWRvIChvcGNpb25hbG1lbnRlKSwgbyBlbCBob3N0IGVzcGVjaWZpY2FkbyBlbiBsYSBvcGNp824KKy0tbXgtdGFyZ2V0LCBvIHNpIGVzYSBvcGNp824gbm8gZXMgYnJpbmRhZGEsIGVsIGhvc3QgZW4gZWwgY3VhbAorZG5zbWFzcSBlc3ThIGNvcnJpZW5kby4gRWwgcHJlZGV0ZXJtaW5hZG8gZXMg+nRpbCBwYXJhIHJlZGlyZWNjaW9uYXIKK2NvcnJlbyBkZSBzaXN0ZW1hcyBlbiBsYSByZWQgbG9jYWwgaGFjaWEgdW4gc2Vydmlkb3IgY2VudHJhbC4gTGEKK29wY2nzbiBkZSBwcmVmZXJlbmNpYSBlcyBvcGNpb25hbCwgeSBzdSBwcmVkZXRlcm1pbmFkbyBlcyAxIHNpIG5vCitlcyBicmluZGFkYS4gTeFzIGRlIHVuIHJlY29yZCBNWCBwdWVkZSBzZXIgYnJpbmRhZG8gcGFyYSB1biBob3N0LgorLlRQIAorLkIgXC10LCAtLW14LXRhcmdldD08bm9tYnJlIGRlIGhvc3Q+CitFc3BlY2lmaWNhciBlbCB0YXJnZXQgcHJlZGV0ZXJtaW5hZG8gcGFyYSBlbCByZWNvcmQgTVggZGV2dWVsdG8KK3BvciBkbnNtYXNxLiBWZXIgLS1teC1ob3N0LiBTaSAtLW14LXRhcmdldCBlcyBicmluZGFkbywgcGVybyBubworLS1teC1ob3N0LCBlbnRvbmNlcyBkbnNtYXNxIGRldnVlbHZlIHVuIHJlY29yZCBNWCBjb250ZW5pZW5kbworZWwgdGFyZ2V0IE1YIHBhcmEgYvpzcXVlZGFzIE1YIGVuIGVsIG5vbWJyZSBkZSBob3N0IGRlIGxhIG3hcXVpbmEgZG9uZGUKK2Ruc21hc3EgZXN04SBjb3JyaWVuZG8uCisuVFAKKy5CIFwtZSwgLS1zZWxmbXgKK1JldG9ybmFyIHVuIHJlY29yZCBNWCBhcHVudOFuZG9zZSBhIHPtIG1pc21vIHBhcmEgY2FkYSBt4XF1aW5hIGxvY2FsLgorTeFxdWluYXMgbG9jYWxlcyBzb24gYXF1ZWxsYXMgZW4gL2V0Yy9ob3N0cyBvIGNvbiBhcnJpZW5kb3MgREhDUC4KKy5UUCAKKy5CIFwtTCwgLS1sb2NhbG14CitSZXRvcm5hciB1biByZWNvcmQgTVggYXB1bnRhbmRvIGFsIGhvc3QgYnJpbmRhZG8gcG9yIG14LXRhcmdldCAobworbGEgbeFxdWluYSBkb25kZSBkbnNtYXNxIGVzdOEgY29ycmllbmRvKSBwYXJhIGNhZGEgbeFxdWluYSBsb2NhbC4KK03hcXVpbmFzIGxvY2FsZXMgc29uIGFxdWVsbGFzIGVuIC9ldGMvaG9zdHMgbyBjb24gYXJyaWVuZG9zIERIQ1AuCisuVFAKKy5CIFwtVywgLS1zcnYtaG9zdD08X3NlcnZpY2lvPi48X3Byb3Q+Lls8ZG9taW5pbz5dLFs8dGFyZ2V0PlssPHB1ZXJ0bz5bLDxwcmlvcmlkYWQ+Wyw8cGVzbz5dXV1dCitSZXRvcm5hciB1biByZWNvcmQgRE5TIFNSVi4gVmVyIFJGQzI3ODIgcGFyYSBkZXRhbGxlcy4gU2kgbm8gZXMKK2JyaW5kYWRhLCBlbCBkb21pbmlvIHNlIHByZWRldGVybWluYSBhIGVsIGJyaW5kYWRvIHBvcgorLkIgLS1kb21haW4uCitFbCBwcmVkZXRlcm1pbmFkbyBwYXJhIGVsIGRvbWluaW8gdGFyZ2V0IGVzdOEgdmFj7W8sIGVsIHByZWRldGVybWluYWRvCitwYXJhIHB1ZXJ0byBlcyB1bm8sIHkgbG9zIHByZWRldGVybWluYWRvcyBwYXJhIHBlc28geSBwcmlvcmlkYWQgc29uIGNlcm8uCitUZW5lciBjdWlkYWRvIGFsIHRyYW5zcG9uZXIgZGF0YSBkZXNkZSBhcmNoaXZvcyBkZSB6b25hIEJJTkQ6IGxvcworbvptZXJvcyBkZSBwdWVydG8sIHBlc28sIHkgcHJpb3JpZGFkIGVzdOFuIGVuIHVuIG9yZGVuIGRpZmVyZW50ZS4gTeFzCitkZSB1biByZWNvcmQgU1JWIHBhcmEgdW4gc2VydmljaW8vZG9taW5pbyBlcyBwZXJtaXRpZG8sIHRvZG9zIGxvcyBxdWUKK2NvaW5jaWRhbiBzb24gcmV0b3JuYWRvcy4KKy5UUAorLkIgXC1ZLCAtLXR4dC1yZWNvcmQ9PG5vbWJyZT5bWyw8dGV4dG8+XSw8dGV4dG8+XQorUmV0b3JuYXIgdW4gculjb3JkIEROUyBUWFQuIEVsIHZhbG9yIGRlbCBy6WNvcmQgVFhUIGVzIHVuYSBzZXJpZSBkZQorc3RyaW5ncywgYXPtIHF1ZSBjdWFscXVpZXIgbvptZXJvIHB1ZWRlIHNlciBpbmNsdWlkbywgZGl2aWRpZG8gcG9yCitjb21hcy4KKy5UUAorLkIgLS1wdHItcmVjb3JkPTxub21icmU+Wyw8dGFyZ2V0Pl0KK1JldG9ybmFyIHVuIHLpY29yZCBETlMgUFRSLgorLlRQCisuQiAtLW5hcHRyLXJlY29yZD08bm9tYnJlPiw8b3JkZW4+LDxwcmVmZXJlbmNpYT4sPG9wY2lvbmVzPiw8c2VydmljaW8+LDxyZWdleHA+Wyw8cmVtcGxhem8+XQorUmV0b3JuYXIgdW4gculjb3JkIEROUyBOQVBUUiwgY29tbyBlc3BlY2lmaWNhZG8gZW4gUkZDMzQwMy4KKy5UUAorLkIgLS1jbmFtZT08Y25hbWU+LDx0YXJnZXQ+CitSZXRvcm5hciB1biBleHBlZGllbnRlIENOQU1FIHF1ZSBpbmRpY2EgcXVlIDxjbmFtZT4gZXMgcmVhbG1lbnRlIDx0YXJnZXQ+LiBIYXkKK2xpbWl0YWNpb25lcyBzaWduaWZpY2F0aXZhcyBlbiBlbCB0YXJnZXQuIERlYmUgc2VyIHVuIG5vbWJyZSBETlMgcXVlIGxlIGVzIGNvbm9jaWRvCithIGRuc21hc3EgZGVzZGUgL2V0Yy9ob3N0cyAobyBhcmNoaXZvcyBob3N0cyBhZGljaW9uYWxlcykgbyBkZSBESENQLiBTaSBlbCB0YXJnZXQKK25vIHNhdGlzZmFjZSBlc3RlIGNyaXRlcmlvLCBlbCBjbmFtZSBlbnRlcm8gZXMgaWdub3JhZG8uIEVsIGNuYW1lIGRlYmUgc2VyIPpuaWNvLAorcGVybyBlcyBwZXJtaXNpYmxlIHRlbmVyIG3hcyBkZSB1biBjbmFtZSBpbmRpY2FuZG8gZWwgbWlzbW8gdGFyZ2V0LgorLlRQCisuQiAtLWludGVyZmFjZS1uYW1lPTxub21icmU+LDxpbnRlcmZhY2U+CitSZXRvcm5hciB1biBleHBlZGllbnRlIEROUywgYXNvY2lhbmRvIGVsIG5vbWJyZSBjb24gbGEgZGlyZWNjafNuIHByaW1hcmlhCitlbiBsYSBpbnRlcmZhY2UgYnJpbmRhZGEuIEVzdGEgb3BjafNuIGVzcGVjaWZpY2EgdW4gZXhwZWRpZW50ZSB0aXBvIEEKK3BhcmEgZWwgbm9tYnJlIGJyaW5kYWRvIGRlIGxhIG1pc21hIGZvcm1hIHF1ZSB1bmEgbO1uZWEgZGUgL2V0Yy9ob3N0cywKK2V4Y2VwdG8gcXVlIGxhIGRpcmVjY2nzbiBubyBlcyBjb25zdGFudGUgeSBlcyBlbiB2ZXogdG9tYWRhIGRlIGxhCitpbnRlcmZhY2UgYnJpbmRhZGEuIFNpIGxhIGludGVyZmFjZSBlc3ThIGRlc2hhYmlsaXRhZGEsIG7zIGNvbmZpZ3VyYWRhLAorbyBu8yBleGlzdGVudGUsIHVuIHLpY29yZCB2YWPtbyBlcyBkZXZ1ZWx0by4gRWwgculjb3JkIFBUUiByZWxldmFudGUKK3RhbWJpZW4gZXMgY3JlYWRvLCB0cmF6YW5kbyBsYSBkaXJlY2Np824gZGUgbGEgaW50ZXJmYWNlIGEgZWwgbm9tYnJlLgorTeFzIGRlIHVuIG5vbWJyZSBwdWVkZSBzZXIgYXNvY2lhZG8gY29uIHVuYSBkaXJlY2Np824gZGUgaW50ZXJmYWNlLAorcmVwaXRpZW5kbyBsYSBvcGNp824uIEVuIHRhbCBjYXNvLCBsYSBwcmltZXJhIGluc3RhbmNpYSBlcyB1c2FkYSBwYXJhCitsYSB0cmF6YSByZXZlcnNhIGRpcmVjY2nzbi1hLW5vbWJyZS4KKy5UUAorLkIgXC1jLCAtLWNhY2hlLXNpemU9PHRhbWHxbyBkZSBjYWNo6T4KK0ZpamFyIGVsIHRhbWHxbyBkZWwgY2FjaOkgZGUgZG5zbWFzcS4gRWwgcHJlZGV0ZXJtaW5hZG8gZXMgMTUwIG5vbWJyZXMuCitGaWphciBlbCB0YW1h8W8gYSBjZXJvIGRlc2hhYmlsaXRhIGVsIGNhY2jpLgorLlRQCisuQiBcLU4sIC0tbm8tbmVnY2FjaGUKK0Rlc2hhYmlsaXRhciBjYWNo6SBuZWdhdGl2by4gRWwgY2FjaOkgbmVnYXRpdm8gbGUgcGVybWl0ZSBhIGRuc21hc3EKK3JlY29yZGFyIHJlc3VsdGFkb3MgdGlwbyAiZG9taW5pbyBubyBleGlzdGUiIGRlc2RlIHNlcnZpZG9yZXMgRE5TCit1cHN0cmVhbSB5IHJlc3BvbmRlciBi+nNxdWVkYXMgaWTpbnRpY2FzIHNpbiByZWVudmlhcmxhcyBudWV2YW1lbnRlLgorLlRQCisuQiBcLTAsIC0tZG5zLWZvcndhcmQtbWF4PTxi+nNxdWVkYXM+CitGaWphciBlbCBu+m1lcm8gbeF4aW1vIGRlIGL6c3F1ZWRhcyBETlMgc2ltdWx04W5lYXMuIEVsIHZhbG9yCitwcmVkZXRlcm1pbmFkbyBlcyAxNTAsIGxvIGN14WwgZGViZXLtYSBlc3RhciBiaWVuIHBhcmEgbGEgbWF5b3LtYQorZGUgY2Fzb3MuIExhIPpuaWNhIHNpdHVhY2nzbiBjb25vY2lkYSBkb25kZSBlc3RvIGRlYmUgc2VyIGluY3JlbWVudGFkbworZXMgYWwgdXNhciByZXNvbHZlZG9yZXMgZGUgYml04WNvcmFzIGRlIHNlcnZpZG9yZXMgd2ViLCBsb3MgY3VhbGVzIHB1ZWRlbgorZ2VuZXJhciB1biBu+m1lcm8gaW5tZW5zbyBkZSBi+nNxdWVkYXMgc2ltdWx04W5lYXMuCisuVFAKKy5CIFwtRiwgLS1kaGNwLXJhbmdlPVtpbnRlcmZhY2U6PGludGVyZmFjZT4sXVt0YWc6PHRhZz5bLHRhZzo8dGFnPl0sXVtzZXQ6PHRhZ10sXTxkaXJlY2Np824taW5pY2lvPiw8ZGlyZWNjafNuLWZpbmFsPlssPG5ldG1hc2s+Wyw8YnJvYWRjYXN0Pl1dWyw8dGllbXBvIGRlIGFycmllbmRvPl0KK0hhYmlsaXRhciBlbCBzZXJ2aWRvciBESENQLiBEaXJlY2Npb25lcyBzZXLhbiBkaXN0cmlidWlkYXMgZGVzZGUgZWwKK3JhbmdvIDxkaXJlY2Np824taW5pY2lvPiBoYXN0YSA8ZGlyZWNjafNuLWZpbmFsPiB5IGRlc2RlIGRpcmVjY2lvbmVzIGRlZmluaWRhcworZXN04XRpY2FtZW50ZSBlbiBvcGNpb25lcworLkIgZGhjcC1ob3N0CitTaSBlbCB0aWVtcG8gZGUgYXJyaWVuZG8gZXMgZXNwZWNpZmljYWRvLCBlbnRvbmNlcyBhcnJpZW5kb3Mgc2Vy4W4KK290b3JnYWRvcyBwb3IgZXNhIGNhbnRpZGFkIGRlIHRpZW1wby4gRWwgdGllbXBvIGRlIGFycmllbmRvIGVzIGVuCitzZWd1bmRvcywgbyBtaW51dG9zIChwb3IgZWplbXBsbywgNDVtKSwgdSBob3JhcyAocG9yIGVqZW1wbG8sIDFoKSwgbworImluZmluaXRlIi4gU2kgbm8gZXMgYnJpbmRhZGEsIGVsIHRpZW1wbyBkZSBhcnJpZW5kbyBwcmVkZXRlcm1pbmFkbworZXMgZGUgdW5hIGhvcmEuIEVsIHRpZW1wbyBkZSBhcnJpZW5kbyBt7W5pbW8gZXMgZGUgZG9zIG1pbnV0b3MuCitFc3RhIG9wY2nzbiBwdWVkZSBzZXIgcmVwZXRpZGEsIGNvbiBkaWZlcmVudGVzCitkaXJlY2Npb25lcywgcGFyYSBoYWJpbGl0YXIgc2VydmljaW8gREhDUCBlbiBt4XMgZGUgdW5hIHJlZC4gUGFyYQorcmVkZXMgY29uZWN0YWRhcyBkaXLpY3RhbWVudGUgKGVuIG90cmFzIHBhbGFicmFzLCByZWRlcyBlbiBsYXMKK2N1YWxlcyBsYSBt4XF1aW5hIGNvcnJpZW5kbyBkbnNtYXNxIHRpZW5lIHVuYSBpbnRlcmZhY2UpIGxhCitt4XNjYXJhIGRlIHN1YnJlZCBlcyBvcGNpb25hbC4gUGVybywgZXMgcmVxdWVyaWRhIHBhcmEgcmVkZXMgcXVlCityZWNpYmVuIHNlcnZpY2lvIERIQ1Agdu1hIHVuIGFnZW50ZSBkZSByZWxheS4gTGEgZGlyZWNjafNuIGRlCiticm9hZGNhc3Qgc2llbXByZSBlcyBvcGNpb25hbC4gU2llbXByZSBzZSBwZXJtaXRlIHRlbmVyIG3hcyBkZQordW4gcmFuZ28gZGhjcCAoZGhjcC1yYW5nZSkgZW4gdW5hIHN1YnJlZC4KKworRWwgcGFy4W1ldHJvIG9wY2lvbmFsCisuQiBzZXQ6PHRhZz4KK2ZpamEgdW5hIGV0aXF1ZXRhIGFsZmFudW3pcmljYSBsYSBjdWFsIG1hcmNhIGVzdGEgcmVkIGRlCit0YWwgZm9ybWEgcXVlIG9wY2lvbmVzIGRoY3AgcHVlZGFuIHNlciBlc3BlY2lmaWNhZGFzIGVuIGJhc2UgYSBjYWRhIHJlZC4KK0N1YW5kbyBlcyBwcmVmaWphZGEgY29uICd0YWc6JyBlbiB2ZXosIGVudG9uY2VzIGVsIHNpZ25pZmljYWRvIGNhbWJpYQorZGUgImZpamFyIGV0aXF1ZXRhIiBhICJjb2luY2lkaXIgY29uIGV0aXF1ZXRhIi4gU29sbyB1bmEgZXRpcXVldGEgcHVlZGUKK3NlciBmaWphZGEsIHBlcm8gbeFzIGRlIHVuYSBwdWVkZSBzZXIgcmV2aXNhZGEgcG9yIGNvaW5jaWRlbmNpYXMuIExhCitkaXJlY2Np824gZmluYWwgcHVlZGUgc2VyIHJlbXBsYXphZGEgcG9yIGxhIHBhbGFicmEgY2xhdmUKKy5CIHN0YXRpYworbGEgY3VhbCBsZSBkaWNlIGEgZG5zbWFzcSBxdWUgZGViZSBoYWJpbGl0YXIgREhDUCBwYXJhIGxhIHJlZAorZXNwZWNpZmljYWRhLCBwZXJvIG5vIGFsb2NhciBkaW7hbWljYW1lbnRlIGRpcmVjY2lvbmVzIElQOgorU29sbyBob3N0cyBxdWUgdGllbmVuIGRpcmVjY2lvbmVzIGVzdOF0aWNhcyBicmluZGFkYXMgdu1hCisuQiBkaGNwLWhvc3QKK28gZGVzZGUgL2V0Yy9ldGhlcnMgc2Vy4W4gc2VydmlkYXMuIExhIGRpcmVjY2nzbiBmaW5hbCBwdWVkZSBzZXIKK3JlbXBsYXphZGEgcG9yIGxhIHBhbGFicmEgY2xhdmUKKy5CIHByb3h5CitjYXNvIGVuIGVsIGN1YWwgZG5zbWFzcSBwcm92ZWVy4SBwcm94eS1ESENQIGVuIGxhIHN1YnJlZCBlc3BlY2lmaWNhZGEuIChWZXIKKy5CIHB4ZS1wcm9tcHQKK3kKKy5CIHB4ZS1zZXJ2aWNlCitwYXJhIGRldGFsbGVzLikKKworTGEgc2VjY2nzbiBpbnRlcmZhY2U6PGludGVyZmFjZSBuYW1lPiBubyBlcyBub3JtYWxtZW50ZSB1c2FkYS4gVmVyIGxhCitzZWNjafNuIE5PVEFTIHBhcmEgZGV0YWxsZXMgc29icmUgZXN0by4KKy5UUAorLkIgXC1HLCAtLWRoY3AtaG9zdD1bPGh3YWRkcj5dWyxpZDo8Y2xpZW50X2lkPnwqXVssc2V0Ojx0YWc+XVssPGlwYWRkcj5dWyw8aG9zdG5hbWU+XVssPHRpZW1wb19kZV9hcnJpZW5kbz5dWyxpZ25vcmFyXQorRXNwZWNpZmljYXIgcGFy4W1ldHJvcyBwb3IgaG9zdCBwYXJhIGVsIHNlcnZpZG9yIERIQ1AuIEVzdG8gcGVybWl0ZQorcXVlIHVuYSBt4XF1aW5hIGNvbiB1bmEgZGlyZWNjafNuIGRlIGhhcmR3YXJlIHBhcnRpY3VsYXIgc2VhIHNpZW1wcmUKK2Fsb2NhZGEgZWwgbWlzbW8gbm9tYnJlIGRlIGhvc3QsIGRpcmVjY2nzbiBJUCwgeSB0aWVtcG8gZGUgYXJyaWVuZG8uCitVbiBub21icmUgZGUgaG9zdCBlc3BlY2lmaWNhZG8gZGUgZXN0YSBtYW5lcmEgdG9tYSBwcmVzZWRlbmNpYQorc29icmUgY3VhbHF1aWVyYSBzdW1pbmlzdHJhZG8gcG9yIGVsIGNsaWVudGUgREhDUCBlbiBsYSBt4XF1aW5hLgorVGFtYmnpbiBzZSBwZXJtaXRlIG9taXRpciBsYSBkaXJlY2Npb24gZGUgaGFyZHdhcmUgeSBpbmNsdWlyIGVsCitub21icmUgZGUgaG9zdDsgZW4gdGFsIGNhc28gbGEgZGlyZWNjafNuIElQIHkgbG9zIHRpZW1wb3MgZGUgYXJyaWVuZG8KK3NlcuFuIGFwbGljYWJsZXMgYSBjdWFscXVpZXIgbeFxdWluYSBxdWUgcmVjbGFtZSBlc2Ugbm9tYnJlLgorUG9yIGVqZW1wbG86CisuQiAtLWRoY3AtaG9zdD0wMDoyMDplMDozYjoxMzphZix3YXAsaW5maW5pdGUKK2xlIGRpY2UgYSBkbnNtYXNxIHF1ZSBkZWJlIGRhcmxlIGEgbGEgbeFxdWluYSBjb24gZGlyZWNjafNuCitldGhlcm5ldCAwMDoyMDplMDozYjoxMzphZiBlbCBub21icmUgd2FwLCB5IHVuIGFycmllbmRvIERIQ1AgaW5maW5pdG8uCisuQiAtLWRoY3AtaG9zdD1sYXAsMTkyLjE2OC4wLjE5OQorbGUgZGljZSBhIGRuc21hc3EgcXVlIHNpZW1wcmUgZGViZSBhbG9jYXJsZSBhIGxhIG1hcXVpbmEgbGFwCitsYSBkaXJlY2Np824gSVAgMTkyLjE2OC4wLjE5OS4KKworRGlyZWNjaW9uZXMgYWxvY2FkYXMgZGUgZXN0YSBtYW5lcmEgbm8gdGllbmVuIHF1ZSBlc3RhciBkZW50cm8KK2RlbCByYW5nbyBkYWRvIGNvbiBsYSBvcGNp824gLS1kaGNwLXJhbmdlLCBwZXJvIGRlYmVuIGVzdGFyIGVuIGxhIHN1YnJlZAorZGUgdW4gcmFuZ28gREhDUCAoZGhjcC1yYW5nZSkgduFsaWRvLiBQYXJhIHN1YnJlZGVzIHF1ZSBubyBuZWNlc2l0YW4KK3VuYSBjb2xsZWNjafNuIGRlIGRpcmVjY2lvbmVzIGRpbmFtaWNhbWVudGUgYWxvY2FkYXMsIHVzYXIgbGEgcGFsYWJyYQorY2xhdmUgInN0YXRpYyIgaW4gbGEgZGVjbGFyYWNp824gZGhjcC1yYW5nZS4KKworRXMgcGVybWl0aWRvIHVzYXIgaWRlbnRpZmljYWRvcmVzIGRlIGNsaWVudGUgZW4gdmV6IGRlIGRpcmVjY2lvbmVzIGRlCitoYXJkd2FyZSBwYXJhIGlkZW50aWZpY2FyIGhvc3RzIHByZWZpamFuZG8gJ2lkOicuIE8gc2VhIHF1ZToKKy5CIC0tZGhjcC1ob3N0PWlkOjAxOjAyOjAzOjA0LC4uLi4uCitzZSByZWZpZXJlIGFsIGhvc3QgY29uIGlkZW50aWZpY2Fkb3IgZGUgY2xpZW50ZSAwMTowMjowMzowNC4KK1RhbWJp6W4gc2UgcGVybWl0ZSBlc3BlY2lmaWNhciBlbCBJRCBkZSBjbGllbnRlIGNvbW8gdGV4dG8sIGFz7ToKKy5CIC0tZGhjcC1ob3N0PWlkOmlkZGVjbGllbnRlY29tb3RleHRvLC4uLi4uCisKK0xhIG9wY2nzbiBlc3BlY2lhbCBpZDoqIHNpZ25pZmljYSAiaWdub3JhciBjdWFscXVpZXIgSUQgZGUgY2xpZW50ZQoreSB1c2FyIHNvbGFtZW50ZSBkaXJlY2Npb25lcyBNQUMuIiBFc3RvIGVzIPp0aWwgY3VhbmRvIHVuIGNsaWVudGUKK3ByZXNlbnRhIHVuIElEIGRlIGNsaWVudGUgYWxndW5hcyB2ZWNlcyBwZXJvIG90cmFzIG5vLgorCitTaSB1biBub21icmUgYXBhcmVjZSBlbiAvZXRjL2hvc3RzLCBsYSBkaXJlY2Np824gYXNvY2lhZGEgcHVlZGUKK3NlciBhbG9jYWRhIGEgdW4gYXJyaWVuZG8gREhDUCwgcGVybyBzb2xvIHNpIGV4aXN0ZSB1bmEgb3BjafNuCisuQiAtLWRoY3AtaG9zdAorbGEgY3VhbCBlc3BlY2lmaWNhIGVsIG5vbWJyZSB0YW1iaeluLiBTb2xvIHVuIGhvc3RuYW1lIHB1ZWRlIHNlcgorYnJpbmRhZG8gZW4gdW5hIG9wY2nzbgorLkIgZGhjcC1ob3N0CitwZXJvIGFsaWFzZXMgc29uIHBvc2libGVzIHBvciBtZWRpbyBkZWwgdXNvIGRlIENOQU1Fcy4gKFZlcgorLkIgLS1jbmFtZQorKS4KKworTGEgcGFsYWJyYSBjbGF2ZSAiaWdub3JlIgorbGUgZGljZSBhIGRuc21hc3EgcXVlIG5vIGRlYmUgb2ZyZWNlciBqYW3hcyB1biBhcnJpZW5kbyBESENQIGEKK3VuYSBt4XF1aW5hLiBMYSBt4XF1aW5hIHB1ZWRlIHNlciBlc3BlY2lmaWNhZGEgcG9yIGRpcmVjY2nzbiBkZQoraGFyZHdhcmUsIElEIGRlIGNsaWVudGUsIG8gbm9tYnJlIGRlIGhvc3QsIHBvciBlamVtcGxvOgorLkIgLS1kaGNwLWhvc3Q9MDA6MjA6ZTA6M2I6MTM6YWYsaWdub3JlCitFc3RvIGVzIPp0aWwgY3VhbmRvIGhheSBvdHJvIHNlcnZpZG9yIERIQ1AgZW4gbGEgcmVkIHF1ZSBkZWJlIHNlcgordXNhZG8gcG9yIGFsZ/puYXMgbeFxdWluYXMuCisKK0VsIHNldDo8dGFnPiBmaWphIGxhIGV0aXF1ZXRhIGN1YW5kbyBzZWEgcXVlCitlc3RhIGRpcmVjdGl2YSBkaGNwLWhvc3QgZXN04SBlbiB1c28uIEVzdG8gcHVlZGUgc2VyIHVzYWRvIHBhcmEKK2VudmlhciBzZWxlY3RpdmFtZW50ZSBvcGNpb25lcyBESENQIGEgZXN0ZSBob3N0LiBN4XMgZGUgdW5hIGV0aXF1ZXRhCitwdWVkZSBzZXIgZmlqYWRhIGVuIHVuYSBkaXJlY3RpdmEgZGhjcC1ob3N0IChwZXJvIG5vIGVuIG90cm9zIGx1Z2FyZXMKK2RvbmRlICJzZXQ6PHRhZz4iIGVzIHBlcm1pdGlkbykuIEN1YW5kbyB1biBob3N0IGNvaW5jaWRlIGNvbiAKK2N1YWxxdWllciBkaXJlY3RpdmEgZGhjcC1ob3N0IChvIHVuYSBpbXBsaWNhZGEgcG9yCisvZXRjL2V0aGVycykgZW50b25jZXMgbGEgZXRpcXVldGEgZXNwZWNpYWwgImtub3duIiBlcworZmlqYWRhLiBFc3RvIHBlcm1pdGUgcXVlIGRuc21hc3Egc2VhIGNvbmZpZ3VyYWRvIHBhcmEgaWdub3JhcgorcGVkaWRvcyBkZXNkZSBt4XF1aW5hcyBkZXNjb25vY2lkYXMgdXNhbmRvCisuQiAtLWRoY3AtaWdub3JlPXRhZzoha25vd24KK0RpcmVjY2lvbmVzIGV0aGVybmV0IChwZXJvIG5vIGNsaWVudC1pZHMpIHB1ZWRlbiB0ZW5lciBieXRlcworY29tb2TtbmVzLCBhc+0gcXVlIHBvciBlamVtcGxvCisuQiAtLWRoY3AtaG9zdD0wMDoyMDplMDozYjoxMzoqLGlnbm9yZQorY2F1c2Fy4SBxdWUgZG5zbWFzcSBpZ25vcmUgdW4gcmFuZ28gZGUgZGlyZWNjaW9uZXMgZXRoZXJuZXQuIE7zdGVzZQorcXVlIGVsICIqIiBuZWNlc2l0YXLhIHNlciBlc2NhcGFkbyBvIGVzY3JpdG8gZW50cmUgY29taWxsYXMgZW4gbGEKK2ztbmVhIGRlIGNvbWFuZG9zLCBwZXJvIG5vIGVuIGVsIGFyY2hpdm8gZGUgY29uZmlndXJhY2nzbi4KKworRGlyZWNjaW9uZXMgZGUgaGFyZHdhcmUgbm9ybWFsbWVudGUgY29pbmNpZGVuIGNvbiBjdWFscXVpZXIKK3RpcG8gZGUgcmVkIChBUlApLCBwZXJvIGVzIHBvc2libGUgcmVzdHJpbmdpcmxhcyBhIHVuIHRpcG8gQVJQCitzaW5ndWxhciBwcmVjZWRpZW5kb2xvIGNvbiBlbCB0aXBvIEFSUCAoZW4gSEVYKSB5ICItIi4gQXPtIHF1ZQorLkIgLS1kaGNwLWhvc3Q9MDYtMDA6MjA6ZTA6M2I6MTM6YWYsMS4yLjMuNAorc29sbyBjb2luY2lkaXLtYSBjb24gdW5hIGRpcmVjY2nzbiBkZSBoYXJkd2FyZSBUb2tlbi1SaW5nLCBkYWRvIHF1ZQorZWwgdGlwbyBBUlAgcGFyYSBUb2tlbi1SaW5nIGVzIDYuCisKK0NvbW8gY2FzbyBlc3BlY2lhbCwgZXMgcG9zaWJsZSBpbmNsdWlyIG3hcyBkZSB1bmEgZGlyZWNjafNuIGRlCitoYXJkd2FyZS4gRWplbXBsbzoKKy5CIC0tZGhjcC1ob3N0PTExOjIyOjMzOjQ0OjU1OjY2LDEyOjM0OjU2Ojc4OjkwOjEyLDE5Mi4xNjguMC4yCitFc3RvIHBlcm1pdGUgcXVlIHVuYSBkaXJlY2Np824gSVAgc2VhIGFzb2NpYWRhIGNvbgorZGlyZWNjaW9uZXMgZGUgaGFyZHdhcmUgbfpsdGlwbGVzLCB5IGxlIGJyaW5kYSBhIGRuc21hc3EgcGVybWlzbworcGFyYSBhYmFuZG9uYXIgdW4gYXJyaWVuZG8gREhDUCBhIHVuYSBkZSBsYXMgZGlyZWNjaW9uZXMgZGUgaGFyZHdhcmUKK2N1YW5kbyBvdHJhIHBpZGUgdW4gYXJyaWVuZG8uIE7zdGVzZSBxdWUgZXN0byBlcyBhbGdvIHBlbGlncm9zbywKK3PzbG8gZnVuY2lvbmFy4SBkZXBlbmRpYmxlbWVudGUgc2kgdW5hIGRlIGxhcyBkaXJlY2Npb25lcyBkZSBoYXJkd2FyZQorZXN04SBhY3RpdmEgZW4gY3VhbHF1aWVyIG1vbWVudG8geSBkbnNtYXNxIG5vIHRpZW5lIGZvcm1hIGRlIGVuZm9yemFyCitlc3RvLiBQZXJvIGVzIPp0aWwsIHBvciBlamVtcGxvLCBwYXJhIGFsb2NhciB1bmEgZGlyZWNjafNuIElQIGVzdGFibGUKK2EgdW5hIGxhcHRvcCBxdWUgdGllbmUgaW50ZXJmYWNlIGFs4W1icmljYSBlIGluYWzhbWJyaWNhLgorLlRQCisuQiAtLWRoY3AtaG9zdHNmaWxlPTxhcmNoaXZvPgorTGVlciBpbmZvcm1hY2nzbiBob3N0IERIQ1AgZGVzZGUgZWwgYXJjaGl2byBlc3BlY2lmaWNhZG8uIEVsIGFyY2hpdm8gY29udGllbmUgaW5mb3JtYWNp824gZGUgdW4gaG9zdCBwb3IgbO1uZWEuIEVsIGZvcm1hdG8gZGUgdW5hIGztbmVhIGVzIGlndWFsIHF1ZSB0ZXh0byBoYWNpYSBsYSBkZXJlY2hhIGRlICc9JyBlbiAtLWRoY3AtaG9zdC4gTGEgdmVudGFqYSBkZSBhbG1hY2VuYXIgaW5mb3JtYWNp824gaG9zdCBESENQIGVuIGVzdGUgYXJjaGl2byBlcyBxdWUgcHVlZGUgc2VyIGNhbWJpYWRhIHNpbiB0ZW5lciBxdWUgcmVpbmljaWFyIGRuc21hc3EuIEVsIGFyY2hpdm8gc2Vy4SByZS1sZe1kbyBjdWFuZG8gZG5zbWFzcSByZWNpYmUgdW4gU0lHSFVQLgorLlRQCisuQiAtLWRoY3Atb3B0c2ZpbGU9PGFyY2hpdm8+CitMZWVyIGluZm9ybWFjafNuIHNvYnJlIG9wY2lvbmVzIERIQ1AgZGVzZGUgZWwgYXJjaGl2byBlc3BlY2lmaWNhZG8uIExhCit2ZW50YWphIGRlIHVzYXIgZXN0YSBvcGNp824gZXMgbGEgbWlzbWEgcXVlIGNvbiAtLWRoY3AtaG9zdHNmaWxlOiBlbAorYXJjaGl2byBkaGNwLW9wdHNmaWxlIHNlcuEgcmUtbGXtZG8gY3VhbmRvIGRuc21hc3EgcmVjaWJlIHVuIFNJR0hVUC4KK07zdGVzZSBxdWUgZXMgcG9zaWJsZSBjb2xvY2FyIGxhIGluZm9ybWFjafNuIG1lZGlhbnRlCisuQiAtLWRoY3AtYm9vdAorY29tbyBvcGNpb25lcyBESENQLCB1c2FuZG8gbG9zIG5vbWJyZXMgZGUgb3BjafNuIGJvb3RmaWxlLW5hbWUsCitzZXJ2ZXItaXAtYWRkcmVzcywgeSB0ZnRwLXNlcnZlci4gRXN0byBwZXJtaXRlIHF1ZSBzZWFuIGluY2x1aWRhcyBlbgordW4gYXJjaGl2byBkaGNwLW9wdHNmaWxlLgorLlRQCisuQiBcLVosIC0tcmVhZC1ldGhlcnMKK0xlZXIgL2V0Yy9ldGhlcnMgZW4gYnVzY2EgZGUgaW5mb3JtYWNp824gc29icmUgaG9zdHMgcGFyYSBlbCBzZXJ2aWRvcgorREhDUC4gRWwgZm9ybWF0byBkZSAvZXRjL2V0aGVycyBlcyB1bmEgZGlyZWNjafNuIGRlIGhhcmR3YXJlLCBzZWd1aWRhCitwb3IgeWEgc2VhIHVuIG5vbWJyZSBkZSBob3N0IG8gdW5hIGRpcmVjY2nzbiBJUC4gQWwgc2VyIGxlaWRhcyBwb3IKK2Ruc21hc3EsIGVzdGFzIGztbmVhcyB0aWVuZW4gZXjhY3RhbWVudGUgZWwgbWlzbW8gZWZlY3RvIHF1ZSBvcGNpb25lcworLkIgLS1kaGNwLWhvc3QKK3F1ZSBjb250aWVuZW4gbGEgbWlzbWEgaW5mb3JtYWNp824uIC9ldGMvZXRoZXJzIGVzIHJlLWxl7WRhIGN1YW5kbworZG5zbWFzcSByZWNpYmUgdW4gU0lHSFVQLgorLlRQCisuQiBcLU8sIC0tZGhjcC1vcHRpb249W3RhZzo8dGFnPixbdGFnOjx0YWc+LF1dW2VuY2FwOjxvcHQ+LF1bdmktZW5jYXA6PGVudGVycHJpc2U+LF1bdmVuZG9yOls8dmVuZG9yLWNsYXNzPl0sXVs8b3B0PnxvcHRpb246PG9wdC1uYW1lPl0sWzx2YWx1ZT5bLDx2YWx1ZT5dXQorRXNwZWNpZmljYXIgb3BjaW9uZXMgZGlmZXJlbnRlcyBvIGV4dHJhIGEgY2xpZW50ZXMgREhDUC4gUG9yCitwcmVkZXRlcm1pbmFkbywgZG5zbWFzcSBlbnbtYSBhbGd1bmFzIG9wY2lvbmVzIGVzdOFuZGFyIGEgY2xpZW50ZXMKK0RIQ1AuIExhIG3hc2NhcmEgZGUgc3VicmVkIHkgZGlyZWNjafNuIGJyb2FkY2FzdCBzb24gZmlqYWRhcyBpZ3VhbAorYSBsYXMgZGVsIGhvc3QgcXVlIGNvcnJlIGRuc21hc3EsIHkgZWwgc2Vydmlkb3IgRE5TIHkgcnV0ZWFkb3IKK2EgbGEgZGlyZWNjafNuIGRlIGxhIG3hcXVpbmEgcXVlIGNvcnJlIGRuc21hc3EuIFNpIGxhIG9wY2nzbiBkZQorbm9tYnJlIGRlIGRvbWluaW8gaGEgc2lkbyBmaWphZGEsIGVzIGVudmlhZGEuIEVzdGEgb3BjafNuIHBlcm1pdGUKK3F1ZSBlc29zIHByZWRldGVybWluYWRvcyBzZWFuIHNvYnJlc2NyaXRvcywgbyBxdWUgc2VhbiBlc3BlY2lmaWNhZGFzCitvdHJhcyBvcGNpb25lcy4gTGEgb3BjafNuIGEgc2VyIGVudmlhZGEgcHVlZGUgc2VyIGJyaW5kYWRhIGNvbW8gdW4KK276bWVybyBkZWNpbWFsIG8gY29tbyAib3B0aW9uOjxvcHRpb24tbmFtZT4iLiBMb3MgbvptZXJvcyBkZSBvcGNp824KK2VzdOFuIGVzcGVjaWZpY2Fkb3MgZW4gUkZDMjEzMiB5IFJGQ3Mgc3Vic2lndWllbnRlcy4gRWwganVlZ28gZGUKK29wdGlvbi1uYW1lcyBjb25vY2lkbyBwb3IgZG5zbWFzcSBwdWVkZSBzZXIgZGVzY3ViaWVydG8gZWplY3V0YW5kbworImRuc21hc3EgLS1oZWxwIGRoY3AiLiBQb3IgZWplbXBsbywgcGFyYSBmaWphciBsYSBydXRhIHByZWRldGVybWluYWRhIGEKKzE5Mi4xNjguNC40LCBo4Wdhc2UgdW4KKy5CIC0tZGhjcC1vcHRpb249MywxOTIuMTY4LjQuNAorbworLkIgLS1kaGNwLW9wdGlvbj1vcHRpb246cm91dGVyLCAxOTIuMTY4LjQuNAoreSBwYXJhIGZpamFyIGxhIGRpcmVjY2nzbiBkZSBzZXJ2aWRvciBkZSB0aWVtcG8gYSAxOTIuMTY4LjAuNCwKK2jhZ2FzZSB1bgorLkIgLS1kaGNwLW9wdGlvbj00MiwxOTIuMTY4LjAuNAorbworLkIgLS1kaGNwLW9wdGlvbj1vcHRpb246bnRwLXNlcnZlciwgMTkyLjE2OC4wLjQKK0xhIGRpcmVjY2nzbiBlc3BlY2lhbCAwLjAuMC4wIGVzIGVudGVuZGlkYSBxdWUgc2lnbmlmaWNhICJsYQorZGlyZWNjafNuIGRlIGxhIG3hcXVpbmEgcXVlIGNvcnJlIGRuc21hc3EiLiBUaXBvcyBkZSBkYXRhIHBlcm1pdGlkb3MKK3NvbiBkaXJlY2Npb25lcyBJUCBkZSBjdWF0cm8gc2VnbWVudG9zLCB1biBu+m1lcm8gZGVjaW1hbCwgZO1naXRvcyBoZXgKK3NlcGFyYWRvcyBwb3IgY29sb25lcywgeSB1biBzdHJpbmcgZGUgdGV4dG8uIFNpIGxhcyBldGlxdWV0YXMKK29wY2lvbmFsZXMgc29uIGJyaW5kYWRhcywgZW50b25jZXMgZXN0YSBvcGNp824gZXMgc29sbyBlbnZpYWRhIGN1YW5kbwordG9kYXMgbGFzIGV0aXF1ZXRhcyBjb2luY2lkZW4uCisKK1Byb2Nlc2FtaWVudG8gZXNwZWNpYWwgZXMgbGxldmFkbyBhIGNhYm8gZW4gdW4gYXJndW1lbnRvIGRlIHRleHRvIHBhcmEKK2xhIG9wY2nzbiAxMTksIGVuIGNvbmZvcm1lIGNvbiBSRkMzMzk3LiBEaXJlY2Npb25lcyBJUCB0ZXh0dWFsZXMgbyBkZQorY3VhdHJvIHNlZ21lbnRvcyBjb21vIGFyZ3VtZW50b3MgYSBsYSBvcGNp824gMTIwIHNvbiBtYW5lamFkb3MgbWVkaWFudGUKK1JGQzMzNjEuIERpcmVjY2lvbmVzIElQIGRlIGN1YXRybyBzZWdtZW50b3MgcXVlIHNvbiBzZWd1aWRhcyBwb3IgdW4gZGlhZ29uYWwKKyhzbGFzaCkgeSBkZXNwdelzIHVuYSBt4XNjYXJhIHNvbiBjb2RpZmljYWRvcyBtZWRpYW50ZSBSRkMzNDQyLgorCitUZW5lciBjdWlkYWRvOiBuaWd1bmEgdmVyaWZpY2FjafNuIGVzIGhlY2hhIHNvYnJlIHNpIGVsIG76bWVybyBkZSB0aXBvCitjb3JyZWN0byBlcyBlbnZpYWRvLCB5IGVzIG11eSBwb3NpYmxlIHBlcnN1YWRpciBhIGRuc21hc3EgcGFyYSBxdWUKK2dlbmVyZSBwYXF1ZXRlcyBESENQIGlsZWdhbGVzIG1lZGlhbnRlIHVzbyBpbmFkZWN1YWRvIGRlIGVzdGEgb3BjafNuLgorQ3VhbmRvIGVsIHZhbG9yIGVzIHVuIG76bWVybyBkZWNpbWFsLCBkbnNtYXNxIGRlYmUgZGV0ZXJtaW5hciBxdekgdGFuCitncmFuZGUgZXMgZWwgb2JqZXRvIGRlIGRhdGEuIEVzdG8gZXMgaGVjaG8gbWVkaWFudGUgdW5hIGV4YW1pbmFjafNuIGRlbAorbvptZXJvIGRlIG9wY2nzbiwgeS9vIGVsIHZhbG9yLCBwZXJvIHB1ZWRlIHNlciBpbnZhbGlkYWRvIGFncmVn4W5kb2xlCit1bmEgb3BjafNuIGRlIHVuYSBzb2xhIGxldHJhIGRlIGVzdGEgZm9ybWE6IGIgPSB1biBieXRlLCBzID0gZG9zIGJ5dGVzLAoraSA9IGN1YXRybyBieXRlcy4gRXN0byBlcyBwcmluY2lwYWxtZW50ZSD6dGlsIGNvbiBvcGNpb25lcyBlbmNhcHN1bGFkYXMKK3RpcG8gdmVuZGVkb3IgKHZlciBhYmFqbykgZG9uZGUgZG5zbWFzcSBubyBwdWVkZSBkZXRlcm1pbmFyIGVsIHRhbWHxbworZGUgZGF0YSB1c2FuZG8gZWwgbvptZXJvIGRlIG9wY2nzbi4gRGF0YSBkZSBvcGNp824gbGEgY3VhbCBjb25zaXN0ZQorc29sbyBkZSBwdW50b3MgeSBk7WdpdG9zIHNlcuEgaW50ZXJwcmV0YWRhIHBvciBkbnNtYXNxIGNvbW8gdW5hCitkaXJlY2Np824gSVAsIHkgc2Vy4SBpbnNlcnRhZGEgZGVudHJvIGRlIHVuYSBvcGNp824gZGUgZXNhIG1hbmVyYS4KK1BhcmEgZm9yemFyIHVuIHN0cmluZyBsaXRlcmFsLCB1c2FyIGNvbWlsbGFzLiBQb3IgZWplbXBsbywgY3VhbmRvIHNlCit1c2EgbGEgb3BjafNuIDY2IHBhcmEgZW52aWFyIHVuYSBJUCBsaXRlcmFsIGNvbW8gdW4gbm9tYnJlIGRlIHNlcnZpZG9yCitURlRQLCBlcyBuZWNlc2FyaW8gaGFjZXI6CisuQiAtLWRoY3Atb3B0aW9uPTY2LCIxLjIuMy40IgorCitPcGNpb25lcyBlbmNhcHN1bGFkYXMgdmVuZG9yLWNsYXNzIHRhbWJp6W4gcHVlZGVuIHNlciBlc3BlY2lmaWNhZGFzIHVzYW5kbworLS1kaGNwLW9wdGlvbjogcG9yIGVqZW1wbG8KKy5CIC0tZGhjcC1vcHRpb249dmVuZG9yOlBYRUNsaWVudCwxLDAuMC4wLjAKK2Vudu1hIGxhIG9wY2nzbiBlc3BlY+1maWNhIGRlIGNsYXNlIGRlIHZlbmRlZG9yICJtZnRwLWFkZHJlc3M9MC4wLjAuMCIgYQorY3VhbHF1aWVyIGNsaWVudGUgY3V5byB2ZW5kb3ItY2xhc3MKK2NvaW5jaWRhIGNvbiAiUFhFQ2xpZW50Ii4gRWwgcmV2aXNhZG8gZGUgY29pbmNpZGVuY2lhcyB2ZW5kb3ItY2xhc3MgZXN04QorYmFzYWRvIGVuIHN1YnN0cmluZ3MgKHZlciAtLWRoY3AtdmVuZG9yY2xhc3MgcGFyYSBkZXRhbGxlcykuIFNpIHVuYSBvcGNp824KK3ZlbmRvci1jbGFzcyAobvptZXJvIDYwKSBlcyBlbnZpYWRhIHBvciBkbnNtYXNxLCBlbnRvbmNlcyBlcyB1c2FkYSBwYXJhCitzZWxlY2Npb25hciBvcGNpb25lcyBlbmNhcHN1bGFkYXMgZW4gcHJlZmVyZW5jaWEgc29icmUgY3VhbHF1aWVyYSBlbnZpYWRhCitwb3IgZWwgY2xpZW50ZS4gRXMgcG9zaWJsZSBvbWl0aXIgZWwgdmVuZG9yY2xhc3MgY29tcGxldGFtZW50ZTsKKy5CIC0tZGhjcC1vcHRpb249dmVuZG9yOiwxLDAuMC4wLjAKK2Nhc28gZW4gZWwgY3XhbCBsYSBvcGNp824gZW5jYXBzdWxhZGEgc2llbXByZSBlcyBlbnZpYWRhLgorT3BjaW9uZXMgcHVlZGVuIHNlciBlbmNhcHN1bGFkYXMgZGVudHJvIGRlIG90cmFzIG9wY2lvbmVzLCBwb3IgZWplbXBsbzoKKy5CIC0tZGhjcC1vcHRpb249ZW5jYXA6MTc1LCAxOTAsICJpc2NzaS1jbGllbnQwIgorZW52aWFy4SBvcGNp824gMTc1LCBkZW50cm8gZGUgbGEgY3VhbCBlc3ThIG9wY2nzbiAxOTAuIFNpIG36bHRpcGxlcworb3BjaW9uZXMgc29uIGJyaW5kYWRhcyBxdWUgZXN04W4gZW5jYXBzdWxhZGFzIGNvbiBlbCBtaXNtbyBu+m1lcm8gZGUKK29wY2nzbiBlbnRvbmNlcyBzZXLhbiBjb3JyZWN0YW1lbnRlIGNvbWJpbmFkYXMgZW4gdW5hIG9wY2nzbiBlbmNhcHN1bGFkYS4KK2VuY2FwOiB5IHZlbmRvcjogbm8gcHVlZGVuIHNlciBmaWphZGFzIGFtYmFzIGRlbnRybyBkZSBsYSBtaXNtYSBvcGNp824gZGhjcC1vcHRpb24uCisKK0xhIHZhcmlhbnRlIGZpbmFsIGVuIG9wY2lvbmVzIGVuY2Fwc3VsYWRhcyBlcyAiVmVuZG9yLUlkZW50aWZ5aW5nIFZlbmRvciBPcHRpb25zIgorY29tbyBlc3BlY2lmaWNhZG8gZW4gUkZDMzkyNS4gRXN0b3Mgc29uIGRlbm90YWRvcyBhc+06CisuQiAtLWRoY3Atb3B0aW9uPXJmYzM5MjUtZW5jYXA6MiwgMTAsICJ0ZXh0IgorRWwgbvptZXJvIGVuIGxhIHNlY2Np824gcmZjMzkyNS1lbmNhcDogZXMgZWwgbvptZXJvIGVudGVycHJpc2UgdXNhZG8KK3BhcmEgaWRlbnRpZmljYXIgZXN0YSBvcGNp824uCisKK0xhIGRpcmVjY2nzbiAwLjAuMC4wIG5vIGVzIHRyYXRhZGEgZGUgZm9ybWEgZXNwZWNpYWwgZW4gb3BjaW9uZXMgZW5jYXBzdWxhZGFzLgorLlRQCisuQiAtLWRoY3Atb3B0aW9uLWZvcmNlPVt0YWc6PHRhZz4sW3RhZzo8dGFnPixdXVtlbmNhcDo8b3B0PixdW3ZpLWVuY2FwOjxlbnRlcnByaXNlPixdW3ZlbmRvcjpbPHZlbmRvci1jbGFzcz5dLF08b3B0PixbPHZhbHVlPlssPHZhbHVlPl1dCitFc3RvIGZ1bmNpb25hIGV44WN0YW1lbnRlIGRlIGxhIG1pc21hIGZvcm1hIHF1ZQorLkIgLS1kaGNwLW9wdGlvbgorZXhjZXB0byBxdWUgbGEgb3BjafNuIHNpZW1wcmUgc2Vy4SBlbnZpYWRhLCBh+m4gc2kgZWwgY2xpZW50ZSBubyBsYSBwaWRlIGVuCitsYSBsaXN0YSBkZSBwZWRpZG8gZGUgcGFy4W1ldHJvcy4gRXN0byBzZSBuZWNlc2l0YSBhdmVjZXMsIHBvciBlamVtcGxvIGN1YW5kbworZW52aWFuZG8gb3BjaW9uZXMgYSBQWEVMaW51eC4KKy5UUAorLkIgLS1kaGNwLW5vLW92ZXJyaWRlCitEZXNoYWJpbGl0YXIgbGEgcmV1dGlsaXphY2nzbiBkZSBsb3MgY2FtcG9zIERIQ1AgZGUgbm9tYnJlIGRlIHNlcnZpZG9yIHkKK2FyY2hpdm8gY29tbyBlc3BhY2lvIHBhcmEgb3BjaW9uZXMgZXh0cmEuIFNpIHB1ZWRlLCBkbnNtYXNxIG11ZXZlIGxhIGluZm9ybWFjafNuCitkZWwgc2Vydmlkb3IgYm9vdCB5IGRlbCBub21icmUgZGUgYXJjaGl2byAoZGUgZGhjcC1ib290KSBkZSBzdXMgY2FtcG9zIGRlZGljYWRvcworaGFjaWEgb3BjaW9uZXMgREhDUC4gRXN0byBjcmVhIGVzcGFjaW8gZXh0cmEgZW4gZWwgcGFxdWV0ZSBESENQIHBhcmEgb3BjaW9uZXMsCitwZXJvIHB1ZWRlIHJhcmFtZW50ZSBjb25mdW5kaXIgY2xpZW50ZXMgdmllam9zIG8gZGVmZWN0dW9zb3MuIEVzdGEgb3BjafNuIGZvcnphCitjb21wb3J0YW1pZW50byAic2ltcGxlIHkgc2VuY2lsbG8iIHBhcmEgcHJldmVuaXIgcHJvYmxlbWFzIGVuIHRhbGVzIGNhc29zLgorLlRQCisuQiBcLVUsIC0tZGhjcC12ZW5kb3JjbGFzcz1zZXQ6PHRhZz4sPHZlbmRvci1jbGFzcz4KK1RyYXphciBkZXNkZSB1biBzdHJpbmcgdmVuZG9yLWNsYXNzIGEgdW5hIGV0aXF1ZXRhLiBMYSBtYXlvcu1hIGRlIGxvcworY2xpZW50ZXMgREhDUCBwcm92ZWVuIHVuYSAidmVuZG9yIGNsYXNzIiBsYSBjdWFsIHJlcHJlc2VudGEsIGVuIGNpZXJ0bworc2VudGlkbywgZWwgdGlwbyBkZSBob3N0LiBFc3RhIG9wY2nzbiB0cmF6YSBjbGFzZXMgZGUgdmVuZGVkb3IgYSBuZXR3b3JrCitpZHMsIGRlIHRhbCBmb3JtYSBxdWUgb3BjaW9uZXMgREhDUCBwdWVkZW4gc2VyIHNlbGVjdGl2YW1lbnRlIGVudHJlZ2FkYXMKK2EgZGlmZXJlbnRlcyBjbGFzZXMgZGUgaG9zdHMuIFBvciBlamVtcGxvCisuQiBkaGNwLXZlbmRvcmNsYXNzPXNldDpwcmludGVycyxIZXdsZXR0LVBhY2thcmQgSmV0RGlyZWN0CitwZXJpdGly7WEgcXVlIG9wY2lvbmVzIHNlYW4gZmlqYWRhcyBzb2xvIHBhcmEgaW1wcmVzb3JhcyBIUCBhc+06CisuQiAtLWRoY3Atb3B0aW9uPXRhZzpwcmludGVycywzLDE5Mi4xNjguNC40CitFbCBzdHJpbmcgdmVuZG9yLWNsYXNzIGVzIGNvb3JkaW5hZG8gY29uIGVsIHZlbmRvci1jbGFzcyBwcm92ZWlkbyBwb3IKK2VsIGNsaWVudGUsIHBhcmEgcGVybWl0aXIgY29pbmNpZGVuY2lhcyBib3Jyb3Nhcy4gRWwgcHJlZmlqbyBzZXQ6IGVzCitvcGNpb25hbCwgcGVybyBwZXJtaXRpZG8gcG9yIHJhem9uZXMgZGUgY29uc2lzdGVuY2lhLgorLlRQCisuQiBcLWosIC0tZGhjcC11c2VyY2xhc3M9c2V0Ojx0YWc+LDx1c2VyLWNsYXNzPgorVHJhemFyIGRlc2RlIHVuIHN0cmluZyB1c2VyLWNsYXNzIGEgdW5hIGV0aXF1ZXRhIChjb24gY29vcmRpbmFjafNuCitzdWJzdHJpbmcsIGNvbW8gY29uIHZlbmRvci1jbGFzcykuIExhIG1heW9y7WEgZGUgbG9zIGNsaWVudGVzIERIQ1AKK3Byb3ZlZW4gdW4gInVzZXIgY2xhc3MiIGVsIGN1YWwgZXMgY29uZmlndXJhYmxlLiBFc3RhIG9wY2nzbiB0cmF6YQorY2xhc2VzIHVzZXIgYSBuZXR3b3JrIGlkcywgZGUgdGFsIG1hbmVyYSBxdWUgb3BjaW9uZXMgREhDUCBwdWVkYW4KK3NlciBzZWxlY3RpdmFtZW50ZSBlbnZpYWRhcyBhIGRpZmVyZW50ZXMgdGlwb3MgZGUgaG9zdHMuIEVzIHBvc2libGUsCitwb3IgZWplbXBsbywgdXNhciBlc3RvIHBhcmEgZXNwZWNpZmljYXIgdW5hIGltcHJlc29yYSBkaWZlcmVudGUgcGFyYQoraG9zdHMgZW4gbGEgY2xhc2UgImN1ZW50YXMiIHF1ZSBwYXJhIGxvcyBkZSBsYSBjbGFzZSAiaW5nZW5pZXJpYSIuCisuVFAKKy5CIFwtNCwgLS1kaGNwLW1hYz1zZXQ6PHRhZz4sPE1BQyBhZGRyZXNzPgorVHJhemFyIGRlc2RlIHVuYSBkaXJlY2Np824gTUFDIGEgdW5hIGV0aXF1ZXRhLiBMYSBkaXJlY2Np824gTUFDCitwdWVkZSBpbmNsdWlyIGNvbW9k7W5lcy4gUG9yIGVqZW1wbG86CisuQiAtLWRoY3AtbWFjPXNldDozY29tLDAxOjM0OjIzOio6KjoqCitmaWphcu1hIGVsIHRhZyAiM2NvbSIgYSBjdWFscXVpZXIgaG9zdCBlbCBjdWFsIHN1IE1BQyBjb2luY2lkYSBjb24KK2VsIHBhdHLzbi4KKy5UUAorLkIgLS1kaGNwLWNpcmN1aXRpZD08bmV0d29yay1pZD4sPGNpcmN1aXQtaWQ+LCAtLWRoY3AtcmVtb3RlaWQ9PG5ldHdvcmstaWQ+LDxyZW1vdGUtaWQ+CitUcmF6YXIgZGUgb3BjaW9uZXMgYWdlbnRlIGRlIHJlbGF5IFJGQzMwNDYgYSBldGlxdWV0YXMuIEVzdG9zCitkYXRvcyBwdWVkZW4gc2VyIHByb3Zl7WRvcyBwb3IgYWdlbnRlcyBkZSByZWxheSBESENQLiBFbCBjaXJjdWl0LWlkIG8KK3JlbW90ZS1pZCBlcyBub3JtbGFtZW50ZSBicmluZGFkbyBjb21vIGhleCBzZXBhcmFkbyBwb3IgZG9ibGVwdW50b3MsIHBlcm8KK3RhbWJp6W4gc2UgcGVybWl0ZSB1biBzdHJpbmcgc2ltcGxlLiBTaSBzZSBvYnRpZW5lIHVuYSBjb2luY2lkZW5jaWEgZXhhY3RhCitlbnRyZSBlbCBjaXJjdWl0IG8gYWdlbnQgSUQgeSB1bm8gcHJvdmXtZG8gcG9yIHVuIGFnZW50ZSBkZSByZWxheSwKK2xhIGV0aXF1ZXRhIGVzIGZpamFkYS4KKy5UUAorLkIgLS1kaGNwLXN1YnNjcmlkPXNldDo8dGFnPiw8c3Vic2NyaWJlci1pZD4KK1RyYXphciBkZSBvcGNpb25lcyByZWxheSBzdWJzY3JpYmVyLWlkIFJGQzM5OTMgYSBldGlxdWV0YXMuCisuVFAKKy5CIC0tZGhjcC1wcm94eVs9PGlwIGFkZHI+XS4uLi4uLgorVW4gYWdlbnRlIGRlIHJlbGF5IG5vcm1hbCBlcyB1c2FkbyBzb2xhbWVudGUgcGFyYSByZWVudmlhciBsYXMgcGFydGVzCitpbmljaWFsZXMgZGUgdW5hIGludGVyYWNjafNuIERIQ1AgY29uIGVsIHNlcnZpZG9yIERIQ1AuIFVuYSB2ZXogcXVlCit1biBjbGllbnRlIGVzIGNvbmZpZ3VyYWRvLCBzZSBjb211bmljYSBkaWVjdGFtZW50ZSBjb24gZWwgc2Vydmlkb3IuIEVzdG8KK2VzIGluZGVzZWFibGUgc2kgZWwgYWdlbnRlIGRlIHJlbGF5IGVzdOEgYWdyZWdhbmRvIGluZm9ybWFjafNuIGV4dHJhIGEKK2xvcyBwYXF1ZXRlcyBESENQLCB0YWwgY29tbyB1c2FkbyBwb3IKKy5CIGRoY3AtY2lyY3VpdGlkCit5CisuQiBkaGNwLXJlbW90ZWlkLgorVW5hIGltcGxlbWVudGFjafNuIHJlbGF5IGNvbXBsZXRhIHB1ZWRlIHVzYXIgbGEgb3BjafNuIHNlcnZlcmlkLW92ZXJyaWRlCitSRkMgNTEwNyBwYXJhIG9ibGlnYXIgYWwgc2Vydmlkb3IgREhDUCBhIHVzYXIgZWwgcmVsYXkgY29tbyB1biBwcm94eQorY29tcGxldG8sIGNvbiB0b2RvcyBsb3MgcGFxdWV0ZXMgcGFzYW5kbyBhIHRyYXZleiBkZSBlbC4gRXN0YSBvcGNp824KK3Byb3ZlZSB1bmEgbWFuZXJhIGFsdGVybmF0aXZhIGRlIGhhY2VyIGxhIG1pc21hIGNvc2EsIHBhcmEgcmVsYXlzIHF1ZQorbm8gdGllbmVuIHNvcG9ydGUgUkZDIDUxMDcuIEJyaW5kYWRhIHBvciBzaSBzb2xhLCBtYW5pcHVsYSBlbCBzZXJ2ZXItaWQKK3BhcmEgdG9kYXMgbGFzIGludGVyYWNjaW9uZXMgdmlhIHJlbGF5cy4gU2kgdW5hIGxpc3RhIGRlIElQcyBlcyBicmluZGFkYSwKK3NvbG8gaW50ZXJhY2Npb25lcyB2aWEgcmVsYXlzIGVuIGVzYXMgZGlyZWNjaW9uZXMgc29uIGFmZWN0YWRhcy4KKy5UUAorLkIgLS1kaGNwLW1hdGNoPXNldDo8dGFnPiw8b3B0aW9uIG51bWJlcj58b3B0aW9uOjxvcHRpb24gbmFtZT58dmktZW5jYXA6PGVudGVycHJpc2U+Wyw8dmFsdWU+XQorU2luIHVuIHZhbG9yLCBmaWphciBsYSBldGlxdWV0YSBzaSBlbCBjbGllbnRlIGVudu1hIHVuYSBvcGNp824KK0RIQ1AgZGVsIG76bWVybyBvIHZhbG9yIGJyaW5kYWRvLiBDdWFuZG8gdW4gdmFsb3IgZXMgYnJpbmRhZG8sIGZpamFyIGxhCitldGlxdWV0YSBzb2xvIHNpIGxhIG9wY2nzbiBlcyBlbnZpYWRhIHkgY29pbmNpZGUgY29uIGVsIHZhbG9yLiBFbCB2YWxvciBwdWVkZQorc2VyIGRlIGxhIGZvcm1hICIwMTpmZjoqOjAyIiwgY2FzbyBlbiBlbCBjdWFsIGVsIHZhbG9yIGRlYmUgY29pbmNpZGlyIChhcGFydGUKK2RlIGxvcyBjb21vZGluZXMpIHBlcm8gbGEgb3BjafNuIGVudmlhZGEgcHVlZGUgdGVuZXIgZGF0YSBxdWUgbm8gY29pbmNpZGUgZGVzcHVlcworZGVsIGZpbmFsIGRlbCB2YWxvci4gRWwgdmFsb3IgdGFtYmnpbiBwdWVkZSBzZXIgZGUgbGEgbWlzbWEgZm9ybWEgcXVlCisuQiBkaGNwLW9wdGlvbgorY2FzbyBlbiBlbCBjdWFsIGxhIG9wY2nzbiBlbnZpYWRhIGVzIHRyYXRhZGEgY29tbyB1biBhcnJheSwgeSB1biBlbGVtZW50byBkZWJlCitjb2luY2lkaXIsIGFz7SBxdWUKKworLS1kaGNwLW1hdGNoPXNldDplZmktaWEzMixvcHRpb246Y2xpZW50LWFyY2gsNgorCitmaWphcuEgbGEgZXRpcXVldGEgYSAiZWZpLWlhMzIiIHNpIGVsIG76bWVybyA2IGFwYXJlY2UgZW4gbGEgbGlzdGEgZGUKK2FyY2hpdGVjdHVyYXMgZW52aWFkYSBwb3IgbG9zIGNsaWVudGVzIGVuIG9wY2nzbiA5My4gKFZlciBSRkMgNDU3OCBwYXJhCitkZXRhbGxlcy4pIFNpIGVsIHZhbG9yIGVzIHVuIHN0cmluZywgY29pbmNpZGVuY2lhIHN1YnN0cmluZyBlcyB1c2FkYS4KKworTGEgZm9ybWEgZXNwZWNpYWwgY29uIHZpLWVuY2FwOjxlbnRlcnBpc2UgbnVtYmVyPiBidXNjYSBjb2luY2lkZW5jaWEgY29uCitjbGFzZXMgZGUgdmVuZGVkb3IgaWRlbnRpZmljYWRvcmFzIHBhcmEgZWwgZW50ZXJwcmlzZSBlc3BlY2lmaWNhZG8uIFBvcgorZmF2b3IgdmVyIFJGQyAzOTI1IHBhcmEgbWFzIGRldGFsbGVzIHNvYnJlIGVzdGFzIGJlc3RpYXMgcmFyYXMgZSBpbnRlcmVzYW50ZXMuCisuVFAKKy5CIC0tdGFnLWlmPXNldDo8dGFnPlssc2V0Ojx0YWc+Wyx0YWc6PHRhZz5bLHRhZzo8dGFnPl1dXQorTGxldmFyIGEgY2FibyBvcGVyYWNpb25lcyBib29sZWFuIGVuIGV0aXF1ZXRhcy4gQ3VhbHF1aWVyIGV0aXF1ZXRhCitxdWUgYXBhcmVjZSBjb21vIHNldDo8dGFnPiBlcyBmaWphZGEgc2kgdG9kYXMgbGFzIGV0aXF1ZXRhcyBxdWUgYXBhcmVjZW4KK2NvbW8gdGFnOjx0YWc+IGVzdGFuIGZpamFkYXMsIChvIGRlc2ZpamFkYXMgY3VhbmRvIHRhZzohPHRhZz4gZXMKK3VzYWRvKS4gU2kgbmluZ/puIHRhZzo8dGFnPiBhcGFyZWNlLCBldGlxdWV0YXMgc2V0Ojx0YWc+IHNvbiBmaWphZGFzCitpbmNvbmRpY2lvbmFsbWVudGUuIEN1YWxxdWllciBjYW50aWRhZCBkZSBmb3JtYXMgc2V0OiB5IHRhZzoKK3B1ZWRlbiBhcGFyZWNlciwgZW4gY3VhbHF1aWVyIG9yZGVuLiBM7W5lYXMgdGFnLWlmIHNvbiBlamVjdXRhZGFzCitlbiBvcmRlbiwgYXPtIHF1ZSBzaSBsYSBldGlxdWV0YSBlbiB0YWc6PHRhZz4gZXMgdW5hIGV0aXF1ZXRhIGZpamFkYQorcG9yIG90cmEKKy5CIHRhZy1pZiwKK2xhIGztbmVhIHF1ZSBmaWphIGxhIGV0aXF1ZXRhIGRlYmUgcHJlY2VkZXIgYSBsYSBxdWUgY29tcHJ1ZWJhLgorLlRQCisuQiBcLUosIC0tZGhjcC1pZ25vcmU9dGFnOjx0YWc+Wyx0YWc6PHRhZz5dCitDdWFuZG8gdG9kb2FzIGxhcyBldGlxdWV0YXMgYnJpbmRhZGFzIGFwYXJlY2VuIGVuIGVsIGp1ZWdvIGRlIGV0aXF1ZXRhcworaWdub3JhciBlbCBob3N0IHkgbm8gYnJpbmRhcmxlIHVuIGFycmllbmRvIERIQ1AuCisuVFAKKy5CIC0tZGhjcC1pZ25vcmUtbmFtZXNbPXRhZzo8dGFnPlssdGFnOjx0YWc+XV0KK0N1YW5kbyB0b2RvcyBsYXMgZXRpcXVldGFzIGJyaW5kYWRhcyBhcGFyZWNlbiBlbiBlbCBqdWVnbyBkZSBldGlxdWV0YXMsIGlnbm9yYXIgY3VhbHF1aWVyIG5vbWJyZSBkZSBob3N0IHByb3ZlaWRvIHBvciBlbCBob3N0LiBO83Rlc2UgcXVlLAorYSBkaWZlcmVuY2lhIGRlIGRoY3AtaWdub3JlLCBlcyBwZXJtaXNpYmxlIG5vIGJyaW5kYXIgbmluZ3VuYSBldGlxdWV0YSwKK3kgZW4gdGFsIGNhc28gbm9tYnJlcyBkZSBob3N0IHByb3ZlaWRvcyBwb3IgY2xpZW50ZXMgREhDUCBzaWVtcHJlIHNvbgoraWdub3JhZG9zLCB5IGhvc3RzIERIQ1Agc29uIGFncmVnYWRvcyBhbCBETlMgdXNhbmRvIHNvbG8gbGEgY29uZmlndXJhY2nzbgorZGhjcC1ob3N0IGVuIGRuc21hc3EgeSBlbCBjb250ZW5pZG8gZGUgL2V0Yy9ob3N0cyB5IC9ldGMvZXRoZXJzLgorLlRQCisuQiAtLWRoY3AtZ2VuZXJhdGUtbmFtZXM9dGFnOjx0YWc+Wyx0YWc6PHRhZz5dCitHZW5lcmFyIHVuIG5vbWJyZSBwYXJhIGNsaWVudGVzIERIQ1AgcXVlIGRlIG90cmEgZm9ybWEgbm8gdGllbmVuIHVubywKK3VzYW5kbyBsYSBkaXJlY2Np824gTUFDIGV4cHJlc2FkYSBlbiBoZXgsIHNlcGFyYWRhIHBvciBndWlvbmVzLiBO83Rlc2UKK3F1ZSBzaSB1biBob3N0IHByb3ZlZSB1biBub21icmUsIHNlcuEgdXNhZG8gcHJlZmVyaWJsZW1lbnRlIHNvYnJlIGVzdGUsCithIG1lbm9zIHF1ZQorLkIgLS1kaGNwLWlnbm9yZS1uYW1lcworZXN06SBmaWphZG8uCisuVFAKKy5CIC0tZGhjcC1icm9hZGNhc3RbPXRhZzo8dGFnPlssdGFnOjx0YWc+XV0KK0N1YW5kbyB0b2RhcyBsYXMgZXRpcXVldGFzIGFwYXJlY2VuIGVuIGVsIGp1ZWdvIGRlIGV0aXF1ZXRhcywgc2llbXByZQordXNhciBicm9hZGNhc3QgcGFyYSBjb211bmljYXIgY29uIGVsIGhvc3QgY3VhbmRvIG5vIGVzdOEgY29uZmlndXJhZG8uCitFcyBwZXJtaXNpYmxlIG9taXRpciBsYXMgZXRpcXVldGFzLCBjYXNvIGVuIGVsIGN1YWwgZXN0byBlcworaW5jb25kaWNpb25hbC4gTGEgbWF5b3LtYSBkZSBjbGllbnRlcyBESENQIHF1ZSBuZWNlc2l0YW4KK3Jlc3B1ZXN0YXMgYnJvYWRjYXN0IGZpamFuIHVuYSBvcGNp824gZW4gc3VzIHBlZGlkb3MgcGFyYSBxdWUgZXN0byBwYXNlIGF1dG9tYXRpY2FtZW50ZSwgYWxndW5vcyBjbGllbnRlcyBCT09UUCB2aWVqb3Mgbm8gbG8gaGFjZW4uCisuVFAKKy5CIFwtTSwgLS1kaGNwLWJvb3Q9W3RhZzo8dGFnPixdPGZpbGVuYW1lPixbPHNlcnZlcm5hbWU+Wyw8c2VydmVyIGFkZHJlc3M+XV0KK0ZpamFyIG9wY2lvbmVzIEJPT1RQIHF1ZSBoYW4gZGUgc2VyIGRldnVlbHRhcyBwb3IgZWwgc2Vydmlkb3IgREhDUC4gTm9tYnJlCit5IGRpcmVjY2nzbiBkZSBzZXJ2aWRvciBzb24gb3BjaW9uYWxlczogc2kgbm8gc29uIGJyaW5kYWRhcywgZWwgbm9tYnJlIGVzCitkZWphZG8gZW4gYmxhbmNvLCB5IGxhIGRpcmVjY2nzbiBlcyBmaWphZGEgYSBsYSBkZSBsYSBt4XF1aW5hIHF1ZSBjb3JyZQorZG5zbWFzcS4gU2kgZG5zbWFzcSBlc3ThIGJyaW5kYW5kbyBzZXJ2aWNpbyBURlRQICh2ZXIKKy5CIC0tZW5hYmxlLXRmdHAKKykgZW50b25jZXMgc29sbyBlbCBub21icmUgZGUgYXJjaGl2byBlcyByZXF1aXJpZG8gYXF17SBwYXJhIGhhYmlsaXRhcgorZWwgaW5pY2lvIGF0cmF26XogZGUgdW5hIHJlZC4gU2kgbGFzIG9wY2lvbmFsZXMgZXRpcXVldGFzIHNvbiBicmluZGFkYXMsCitlbGxhcyBkZWJlcuFuIGNvaW5jaWRpciBwYXJhIHF1ZSBlc3RhIGNvbmZpZ3VyYWNp824gc2VhIGVudmlhZGEuIE7zdGVzZQorcXVlIG5ldHdvcmstaWRzIGVzdOFuIHByZWZpamFkYXMgY29uICJuZXQ6IiBwYXJhIGRpc3Rpbmd1aXJsYXMuCisuVFAKKy5CIC0tcHhlLXNlcnZpY2U9W3RhZzo8dGFnPixdPENTQT4sPG1lbnUgdGV4dD5bLDxiYXNlbmFtZT58PGJvb3RzZXJ2aWNldHlwZT5dWyw8c2VydmVyIGFkZHJlc3M+XQorTGEgbWF5b3LtYSBkZSB1c29zIHBhcmEgYm9vdC1ST01TIFBYRSBzaW1wbGVtZW50ZSBwZXJtaXRlbiBhbCBzaXN0ZW1hIFBYRQorb2J0ZW5lciB1bmEgZGlyZWNjafNuIElQIHkgZW50b25jZXMgYmFqYXIgZWwgYXJjaGl2byBlc3BlY2lmaWNhZG8gcG9yCisuQiBkaGNwLWJvb3QKK3kgZWplY3V0YXJsby4gU2luIGVtYmFyZ28sIGVsIHNpc3RlbWEgUFhFIGVzIGNhcGF6IGRlIGxsZXZhcgorYSBjYWJvIGZ1bmNpb25lcyBt4XMgY29tcGxlamFzIGN1YW5kbyBlc3ThbiBzb3BvcnRhZGFzIHBvciB1bgorc2Vydmlkb3IgREhDUCBhZGVjdWFkby4KKworRXN0byBlc3BlY2lmaWNhIHVuYSBvcGNp824gYm9vdCBxdWUgcHVlZGUgYXBhcmVjZXIgZW4gdW4gbWVu+iBkZSBib290CitQWEUuIDxDU0E+IGVzIHRpcG8gZGUgc2lzdGVtYSBkZSBjbGllbnRlLCBzb2xvIHNlcnZpY2lvcyBkZWwgdGlwbyBjb3JyZWN0bworYXBhcmVjZXLhbiBlbiB1biBtZW76LiBMb3MgdGlwb3MgY29ub2NpZG9zIHNvbiB4ODZQQywgUEM5OCwgSUE2NF9FRkksCitBbHBoYSwgQXJjX3g4NiwgSW50ZWxfTGVhbl9DbGllbnQsIElBMzJfRUZJLCBCQ19FRkksIFhzY2FsZV9FRkkgeSBYODYtNjRfRUZJOwordW4gbvptZXJvIGVudGVybyBwdWVkZSBzZXIgdXRpbGl6YWRvIHBhcmEgb3Ryb3MgdGlwb3MuIEVsIHBhcuFtZXRybyBkZXNwdelzCitkZWwgdGV4dG8gZGUgbWVu+iBwdWVkZSBzZXIgdW4gbm9tYnJlIGRlIGFyY2hpdm8sIGNhc28gZW4gZWwgY3XhbCBkbnNtYXNxCithY3T6YSBjb21vIHVuIHNlcnZpZG9yIGJvb3QgeSBsZSBvcmRlbmEgYWwgY2xpZW50ZSBQWEUgYmFqYXIgZWwgYXJjaGl2bwordu1hIFRGVFAsIHlhIHNlYSBkZSBz7SBtaXNtbyAoCisuQiBlbmFibGUtdGZ0cAorZGViZSBlc3RhciBmaWphZG8gcGFyYSBxdWUgZXN0byBmdW5jaW9uZSkgbyBkZXNkZSBvdHJvIHNlcnZpZG9yIFRGVFAgc2kgbGEKK2RpcmVjY2nzbiBJUCBmaW5hbCBlcyBicmluZGFkYS4KK07zdGVzZSBxdWUgZWwgc3VmaWpvICJsYXllciIgKG5vcm1hbG1lbnRlICIuMCIpIGVzIGJyaW5kYWRvIHBvciBQWEUsIHkKK25vIGRlYmUgc2VyIGFncmVnYWRvIGFsIG5vbWJyZSBiYXNlLiBTaSB1biBu+m1lcm8gZW50ZXJvIGVzIGJyaW5kYWRvIGVuIHZlegorZGUgdW4gbm9tYnJlIGJhc2UsIGVudG9uY2VzIGVsIGNsaWVudGUgUFhFIGJ1c2NhcuEgdW4gc2VydmljaW8gYm9vdCBhZGVjdWFkbworcGFyYSBlc2UgdGlwbyBkZSByZWQuIEVzdGEgYvpzcXVlZGEgcHVlZGUgc2VyIGhlY2hhIG1lZGlhbnRlIGJyb2FkY2FzdCwKK28gZGlyZWN0YW1lbnRlIGEgdW4gc2Vydmlkb3Igc2kgbGEgZGlyZWNjafNuIElQIGVzIGJyaW5kYWRhLiBTaSBuaW5n+m4gdGlwbworZGUgc2VydmljaW8gYm9vdCBvIG5vbWJyZSBkZSBhcmNoaXZvIGVzIGJyaW5kYWRvIChvIHVuIHRpcG8gZGUgc2VydmljaW8gYm9vdAorZGUgMCBlcyBlc3BlY2lmaWNhZG8pLCBlbnRvbmNlcyBsYSBvcGNp824gZGUgbWVu+iBhYm9ydGFy4SBlbCBwcm9jZXNvIG5ldCBib290Cit5IGNvbnRpbnVhcuEgZGVzZGUgZWwgbWVkaW8gbG9jYWwuCisuVFAKKy5CIC0tcHhlLXByb21wdD1bdGFnOjx0YWc+LF08cHJvbXB0PlssPHRpbWVvdXQ+XQorRmlqYXIgZXN0byBoYWNlIHF1ZSB1biBhdmlzbyBzZWEgZXhwdWVzdG8gZGVzcHVlcyBkZWwgYm9vdCBQWEUuIFNpIGVsIHRpbWVvdXQKK2VzIGJyaW5kYWRvLCBlbnRvbmNlcyBkZXNwdWVzIHF1ZSBlbCB0aW1lb3V0IHNlIGhheWEgdmVuY2lkbyBzaW4gaW5wdXQgZGVsCit0ZWNsYWRvLCBsYSBwcmltZXJhIG9wY2nzbiBkZWwgbWVu+iBzZXJhIGF1dG9tYXRpY2FtZW50ZSBlamVjdXRhZGEuIFNpIGVsCit0aW1lb3V0IGVzIGNlcm8gZW50b25jZXMgbGEgcHJpbWVyYSBvcGNp824gZGVsIG1lbvogc2VyYSBhdXRvbWF0aWNhbWVudGUKK2VqZWN1dGFkYS4gU2kKKy5CIHB4ZS1wcm9tcHQKK2VzIG9taXRpZG8sIGVsIHNpc3RlbWEgZXNwZXJhcuEgcGFyYSBlbCBpbnB1dCBkZWwgdXN1YXJpbyBzaSBoYXkgbfpsdGlwbGVzCithcnTtY3Vsb3MgZW4gZWwgbWVu+iwgcGVybyBoYXLhIGJvb3QgaW1lZGlhdGFtZW50ZSBzaSBoYXkgc29sbyB1bm8uIFZlcgorLkIgcHhlLXNlcnZpY2UKK3BhcmEgZGV0YWxsZXMgc29icmUgYXJ07WN1bG9zIGRlIG1lbnUuCisKK0Ruc21hc3EgdGllbmUgc29wb3J0ZSBwYXJhICJwcm94eS1ESENQIiBQWEUsIGVuIGVzdGUgY2FzbyBvdHJvIHNlcnZpZG9yCitESENQIGVuIGxhIHJlZCBlcyByZXNwb25zYWJsZSBwb3IgYXNpZ25hciBkaXJlY2Npb25lcyBJUCwgeSBkbnNtYXNxCitzaW1wbGVtZW50ZSBwcm92ZWUgbGEgZGlyZWNjafNuIGJyaW5kYWRhIGVuCisuQiBweGUtcHJvbXB0Cit5CisuQiBweGUtc2VydmljZQorcGFyYSBwZXJtaXRpciBib290IGEgdHJhdmV6IGRlIGxhIHJlZC4gRXN0ZSBtb2RvIGVzIGhhYmlsaXRhZG8gdXNhbmRvCitsYSBwYWxhYnJhIGNsYXZlCisuQiBwcm94eQorZW4KKy5CIGRoY3AtcmFuZ2UuCisuVFAKKy5CIFwtWCwgLS1kaGNwLWxlYXNlLW1heD08bvptZXJvPgorTGltaXRhIGEgZG5zbWFzcSBhIGVsIG76bWVybyBlc3BlY2lmaWNhZG8gZGUgYXJyaWVuZG9zIERIQ1AuIEVsCitwcmVkZXRlcm1pbmFkbyBlcyAxMDAwLiBFbCBsaW1pdGUgZXMgcGFyYSBwcmV2ZW5pciBhdGFxdWVzIERvUyBkZXNkZQoraG9zdHMgcXVlIGNyZWFuIGNpZW50b3MgZGUgYXJyaWVuZG9zIHkgdXNhbiBtdWNoYSBkZSBsYSBtZW1vcmlhIGRlbAorcHJvY2VzbyBkbnNtYXNxLgorLlRQCisuQiBcLUssIC0tZGhjcC1hdXRob3JpdGF0aXZlCitFc3RhIG9wY2nzbiBkZWJlIHNlciBmaWphZGEgY3VhbmRvIGRuc21hc3EgZXMgZGVmaW5pdGl2YW1lbnRlIGVsIPpuaWNvCitzZXJ2aWRvciBESENQIGVuIGxhIHJlZC4gQ2FtYmlhIGVsIGNvbXBvcnRhbWllbnRvIGRlIFJGQyBkZSB0YWwgbWFuZXJhCitxdWUgcGVkaWRvcyBkZXNkZSBob3N0cyBubyBjb25vY2lkb3Mgbm8gc2Vy4W4gaWdub3JhZG9zLiBFc3RvIHBlcm1pdGUgcXVlCitob3N0cyBudWV2b3MgcHVlZGFuIGNvbnNlZ3VpciB1biBhcnJpZW5kbyBzaW4gc2luIHVuIHRpbWVvdXQgYmFqbyB0b2RhCitjaXJjdW5zdGFuY2lhLiBUYW1iaeluIHBlcm1pdGUgcXVlIGRuc21hc3EgcmVjb25zdHJ1eWEgc3UgYmFzZSBkZSBkYXRvcworZGUgYXJyaWVuZG9zIHNpbiBxdWUgY2FkYSBjbGllbnRlIG5lY2VzaXRlIHJlYWRxdWlyaXIgdW4gYXJyaWVuZG8KK3NpIGxhIGJhc2UgZGUgZGF0b3MgZXMgcGVyZGlkYS4KKy5UUAorLkIgLS1kaGNwLWFsdGVybmF0ZS1wb3J0Wz08cHVlcnRvIGRlIHNlcnZpZG9yPlssPHB1ZXJ0byBkZSBjbGllbnRlPl1dCitDYW1iaWFyIGRlbCBwcmVkZXRlcm1pbmFkbyBsb3MgcHVlcnRvcyB1c2Fkb3MgcGFyYSBESENQLiBTaSBlc3RhIG9wY2nzbgorZXMgYnJpbmRhZGEgc29sYSwgc2luIGFyZ3VtZW50b3MsIGNhbWJpYSBsb3MgcHVlcnRvcyB1c2Fkb3MgcGFyYSBESENQCitkZSA2NyB5IDY4IGEgMTA2NyB5IDEwNjguIFNpIHVuIHNvbG8gYXJndW1lbnRvIGVzIGJyaW5kYWRvLCBlc2UgcHVlcnRvCitlcyB1c2FkbyBwYXJhIGVsIHNlcnZpZG9yIHkgZWwgbvptZXJvIGRlIHB1ZXJ0byBtYXMgdW5vIGVzIHVzYWRvCitwYXJhIGVsIGNsaWVudGUuIEZpbmFsbWVudGUsIGRvcyBu+m1lcm9zIHBlcm1pdGVuIHF1ZSBzZSBlc3BlY2lmaXF1ZW4KK2FtYm9zIGxvcyBwdWVydG9zIGRlIHNlcnZpZG9yIHkgY2xpZW50ZSBwYXJhIERIQ1AuCisuVFAKKy5CIFwtMywgLS1ib290cC1keW5hbWljWz08bmV0d29yay1pZD5bLDxuZXR3b3JrLWlkPl1dCitIYWJpbGl0YXIgYWxvY2FjafNuIGRpbuFtaWNhIGRlIGRpcmVjY2lvbmVzIElQIGEgY2xpZW50ZXMgQk9PVFAuIFVzYXIKK2VzdG8gY29uIGN1aWRhZG8sIHlhIHF1ZSBjYWRhIGRpcmVjY2nzbiBhbG9jYWRhIGEgdW4gY2xpZW50ZSBCT09UUAorZXMgYXJyZW5kYWRhIHBhcmEgc2llbXByZSwgeSBjb25zZWN1ZW50ZW1lbnRlIHF1ZWRhIG5vLWRpc3BvbmlibGUKK3BhcmEgcmUtdXNvIHBvciBvdHJvcyBob3N0cy4gU2kgZXN0byBlcyBicmluZGFkbyBzaW4gZXRpcXVldGFzLAorZW50b25jZXMgaW5jb25kaWNpb25hbG1lbnRlIGhhYmlsaXRhIGFsb2NhY2nzbiBkaW7hbWljYS4gQ29uCitldGlxdWV0YXMsIHNvbG8gY3VhbmRvIHRvZGFzIGxhcyBldGlxdWV0YXMgZXN04W4gZmlqYWRhcy4gUHVlZGUKK3NlciByZXBldGlkbyBjb24gZGlmZXJlbnRlcyBqdWVnb3MgZGUgZXRpcXVldGFzLgorLlRQCisuQiBcLTUsIC0tbm8tcGluZworUG9yIHByZWRldGVybWluZGFkbywgZWwgc2Vydmlkb3IgREhDUCB0cmF0YXLhIGRlIGFzZWd1cmFyc2UgcXVlIHVuYQorZGlyZWNjafNuIG5vIGVzdOkgZW4gdXNvIGFudGVzIGRlIGFsb2NhcnNlbGEgYSB1biBob3N0LiBIYWNlIGVzdG8KK2VudmlhbmRvIHVuIGVjaG8gSUNNUCAocGluZykgYSBsYSBkaXJlY2Np824gcmVmZXJlbnRlLiBTaSByZWNpYmUgdW5hCityZXNwdWVzdGEsIGVudG9uY2VzIGxhIGRpcmVjY2nzbiBkZWJlIGVzdGFyIHNpZW5kbyB1c2FkYSwgeSBzZSByZXBpdGUKK2xhIHBydWViYSBjb24gb3RyYS4gRXN0YSBvcGNp824gZGVzaGFiaWxpdGEgZXN0YSBwcnVlYmEuIFVzYXIgY29uCitjdWlkYWRvLgorLlRQCisuQiAtLWxvZy1kaGNwCitCaXRhY29y6W8gZXh0cmEgcGFyYSBESENQOiBCaXRhY29yZWFyIHRvZGFzIGxhcyBvcGNpb25lcyBlbnZpYWRhcyBhCitjbGllbnRlcyBESENQIHkgbGFzIGV0aXF1ZXRhcyB1c2FkYXMgcGFyYSBkZXRlcm1pbmFybG9zLgorLlRQCisuQiBcLWwsIC0tZGhjcC1sZWFzZWZpbGU9PHBhdGg+CitVc2FyIGVsIGFyY2hpdm8gZXNwZWNpZmljYWRvIHBhcmEgYWxtYWNlbmFyIGluZm9ybWFjafNuIGRlIGFycmllbmRvcworREhDUC4KKy5UUAorLkIgXC02IC0tZGhjcC1zY3JpcHQ9PHBhdGg+CitDdWFuZG8gdW4gYXJyaWVuZG8gREhDUCBudWV2byBlcyBjcmVhZG8sIG8gdW5vIHZpZWpvIGVzCitkZXN0cnVpZG8sIGVsIGVqZWN1dGFibGUgZXNwZWNpZmljYWRvIHBvciBlc3RhIG9wY2nzbiBlcyBlamVjdXRhZG8uCis8cGF0aD4gZGViZSBzZXIgdW4gcGF0aG5hbWUgYWJzb2x1dG8sIG5pbmd1bmEgYvpzcXVlZGEgUEFUSCBvY3VycmUuCitMb3MgYXJndW1lbnRvcyBwYXJhIGVsIGJpbmFyaW8gc29uICJhZGQiLCAib2xkIiwgbyAiZGVsIiwgbGEgZGlyZWNjafNuCitNQUMgZGVsIGhvc3QsIGxhIGRpcmVjY2nzbiBJUCwgeSBlbCBob3N0bmFtZSwgc2kgZXMKK2Nvbm9jaWRvLiAiYWRkIiBzaWduaWZpY2EgcXVlIHVuIGFycmllbmRvIGhhIHNpZG8gY3JlYWRvLCAiZGVsIiBxdWUKK2hhIHNpZG8gZGVzdHJ1aWRvLCB5ICJvbGQiIGVzIHVuYSBub3RpZmljYWNp824gZGUgdW4gYXJyaWVuZG8gZXhpc3RlbnRlCitjdWFuZG8gZG5zbWFzcSBpbmljaWEgbyB1biBjYW1iaW8gYSB1bmEgTUFDIG8gbm9tYnJlIGhvc3QgZGUgdW4gYXJyaWVuZG8KK2V4aXN0ZW50ZSAodGFtYmnpbiwgdGllbXBvIGRlIGFycmllbmRvIG8gdmVuY2ltaWVudG8geSBjbGllbnQtaWQsIHNpCitsZWFzZWZpbGUtcm8gZXN04SBmaWphZG8pLiBTaSBsYSBkaXJlY2Np824gTUFDIGVzIGRlIHVuIHRpcG8gZGUgcmVkCitxdWUgbm8gZXMgZXRoZXJuZXQsIHRlbmRy4SBlbCB0aXBvIGRlIHJlZCBwcmVjb2xvY2FkbywgcG9yIGVqZW1wbG8KKyIwNi0wMToyMzo0NTo2Nzo4OTphYiIgcGFyYSB0b2tlbiByaW5nLiBFbCBwcm9jZXNvIGVzIGVqZWN1dGFkbyBjb21vIHJvb3QKKyhhc3VtaWVuZG8gcXVlIGRuc21hc3EgZnVlIG9yaWdpbmFsbWVudGUgZWplY3V0YWRvIGNvbW8gcm9vdCkgYfpuIHNpIGRuc21hc3EKK2VzdOEgY29uZmlndXJhZG8gcGFyYSBjYW1iaWFyIHN1IFVJRCBhIHVuIHVzdWFyaW8gc2luIHByaXZpbGVnaW9zLgorCisKK0VsIGFtYmllbnRlIGVzIGhlcmVkYWRvIGRlbCB1c3VhcmlvIHF1ZSBoYSBpbnZvY2FkbyBhIGRuc21hc3EsIGNvbiBhbGd1bmFzCitvIHRvZGFzIGRlIGxhcyBzaWd1aWVudGVzIHZhcmlhYmxlcyBhZ3JlZ2FkYXMuCisKK0ROU01BU1FfQ0xJRU5UX0lEIHNpIGVsIGhvc3QgYnJpbmRvIHVuIGNsaWVudC1pZC4KKworRE5TTUFTUV9ET01BSU4gc2kgZWwgbm9tYnJlIGRlIGRvbWluaW8gY29tcGxldGFtZW50ZSBjYWxpZmljYWRvIGRlbCBob3N0CitlcyBjb25vY2lkbywgZXN0byBlcyBmaWphZG8gYSBsYSBwYXJ0ZSBkZWwgZG9taW5pby4KKworU2kgZWwgY2xpZW50ZSBicmluZGEgdmVuZG9yLWNsYXNzLCBob3N0bmFtZSBvIHVzZXItY2xhc3MsIGVzdG9zIHNvbgorYnJpbmRhZG9zIGVuIGxhcyB2YXJpYWJsZXMKK0ROU01BU1FfVkVORE9SX0NMQVNTLCBETlNNQVNRX1NVUFBMSUVEX0hPU1ROQU1FLCB5CitETlNNQVNRX1VTRVJfQ0xBU1MwLi5ETlNNQVNRX1VTRVJfQ0xBU1NuLCBwZXJvIHNvbG8gcGFyYSBhY2Npb25lcyAiYWRkIgoreSAib2xkIiBjdWFuZG8gdW4gaG9zdCByZWFudWRhIHVuIGFycmllbmRvIGV4aXN0ZW50ZSwgZGFkbyBhIHF1ZSBlc3RvcworZGF0b3Mgbm8gc29uIGFsbWFjZW5hZG9zIGVuIGxhIGJhc2UgZGUgZGF0b3MgZGUgYXJyaWVuZG9zIGRlIGRuc21hc3EuCisKK1NpIGRuc21hc3EgZnVlIGNvbXBpbGFkbyBjb24gSEFWRV9CUk9LRU5fUlRDLCBlbnRvbmNlcyBsYSBkdXJhY2nzbiBkZWwKK2FycmllbmRvIChlbiBzZWd1bmRvcykgZXMgYWxtYWNlbmFkYSBlbiBETlNNQVNRX0xFQVNFX0xFTkdUSCwgZGUgb3RyYQorbWFuZXJhIGVsIHRpZW1wbyBkZSB2ZW5jaW1pZW50byBlcyBhbG1hY2VuYWRvIGVuIEROU01BU1FfTEVBU0VfRVhQSVJFUy4KK0VsIG76bWVybyBkZSBzZWd1bmRvcyBmYWx0YW50ZSBwYXJhIGVsIHZlbmNpbWllbnRvIGRlbCBhcnJpZW5kbyBzaWVtcHJlCitlcyBhbG1hY2VuYWRvIGVuIEROU01BU1FfVElNRV9SRU1BSU5JTkcuCisKK1NpIHVuIGFycmllbmRvIHNvbO1hIHRlbmVyIHVuIG5vbWJyZSBkZSBob3N0LCBlbCBjdWFsIGVzIHJlbW92aWRvLCB1bgorZXZlbnRvICJvbGQiIGVzIGdlbmVyYWRvIGNvbiBlbCBudWV2byBlc3RhZG8gZGVsIGFycmllbmRvLCAocG9yIGVqZW1wbG8sIHNpbgorbm9tYnJlKSwgeSBlbCBub21icmUgYW50ZXJpb3IgZXMgYnJpbmRhZG8gZW4gbGEgdmFyaWFibGUgZGUgYW1iaWVudGUKK0ROU01BU1FfT0xEX0hPU1ROQU1FLgorCitETlNNQVNRX0lOVEVSRkFDRSBhbG1hY2VuYSBlbCBub21icmUgZGUgbGEgaW50ZXJmYWNlCitlbiBsYSBjdWFsIGxsZWfzIGVsIHBlZGlkbzsgZXN0byBubyBlcyBmaWphZG8gcGFyYSBhY2Npb25lcyAidmllamFzIgorY3VhbmRvIGRuc21hc3EgcmUtaW5pY2lhLgorCitETlNNQVNRX1JFTEFZX0FERFJFU1MgZXMgZmlqYWRvIHNpIGVsIGNsaWVudGUKK3Vz8yB1biByZWxheSBESENQIHBhcmEgY29udGFjdGFyIGEgZG5zbWFzcSB5IGxhIGRpcmVjY2nzbiBJUCBkZWwgcmVsYXkKK2VzIGNvbm9jaWRhLgorCitETlNNQVNRX1RBR1MgY29udGllbmUgdG9kYXMgbGFzIGV0aXF1ZXRhcyBuZXR3b3JrLWlkIGZpamFkYXMKK2R1cmFudGUgbGEgdHJhbnNhY2Np824gREhDUCwgc2VwYXJhZGFzIHBvciBlc3BhY2lvcy4KKworVG9kb3MgbG9zIGRlc2NyaXB0b3JlcyBkZSBhcmNoaXZvIGVzdOFuIGNlcnJhZG9zCitleGNlcHRvIHN0ZGluLCBzdGRvdXQsIHkgc3RkZXJyIGxvcyBjdWFsZXMgZXN04W4gYWJpZXJ0b3MgYSAvZGV2L251bGwKKyhleGNlcHRvIGVuIG1vZG8gZGVidWcpLgorCitFc3RlIGd1afNuIG5vIGVzIGludm9jYWRvIGNvbmN1cnJlbnRlbWVudGU6IG3heGltbyB1bmEgaW5zdGFtY2lhIGRlbAorZ3Vp824gZXN04SBjb3JyaWVuZG8gYSBsYSB2ZXogKGRuc21hc3EgZXNwZXJhIGEgcXVlIHVuYSBpbnN0YW5jaWEgZGUKK2d1afNuIGhhZ2EgZXhpdCBhbnRlcyBkZSBjb3JyZXIgbGEgc2lndWllbnRlKS4gQ2FtYmlvcyBhIGxhIGJhc2UgZGUKK2RhdG9zIGRlIGFycmllbmRvcyBxdWUgcmVxdWllcmVuIHF1ZSBlbCBndWnzbiBzZWEgaW52b2NhZG8gc29uIHB1ZXN0b3MKK2VuIGNvbGEgZXNwZXJhbmRvIGVsIGV4aXQgZGUgdW5hIGluc3RhbmNpYSBjb3JyaWVudGUuIFNpIGVzdGEgY29sYSBwZXJtaXRlCitxdWUgY2FtYmlvcyBtdWx0aXBsZXMgZGUgZXN0YWRvIGxlIG9jdXJyYW4gYSB1biBhcnJpZW5kbyBpbmRpdmlkdWFsIGFudGVzCitkZSBxdWUgZWwgZ3Vp824gcHVlZGEgc2VyIGVqZWN1dGFkbyBlbnRvbmNlcyBlc3RhZG9zIGFudGVyaW9yZXMgc29uIGRlc2NhcnRhZG9zCit5IGVsIGVzdGFkbyBhY3R1YWwgZGVsIGFycmllbmRvIGVzIHJlZmxlamFkbyBjdWFuZG8gZWwgZ3Vp824gZmluYWxtZW50ZSBjb3JyZS4KKworQWwgaW5pY2lvIGRlIGRuc21hc3EsIGVsIGd1afNuCitzZXLhIGludm9jYWRvIHBhcmEgdG9kb3MgbG9zIGFycmllbmRvcyBleGlzdGVudGVzIG1pZW50cmFzIHZhbiBzaWVuZG8KK2xl7WRvcyBkZXNkZSBlbCBhcmNoaXZvIGRlIGFycmllbmRvcy4gQXJyaWVuZG9zIHZlbmNpZG9zIHNlcuFuIGxsYW1hZG9zCitjb24gImRlbCIgeSBvdHJvcyBjb24gIm9sZCIuIDxwYXRoPiBkZWJlIHNlciB1biBwYXRoIGFic29sdXRvLCBuaW5ndW5hCiti+nNxdWVkYSBQQVRIIG9jdXJyZSBjdWFuZG8gYXJyaWVuZG9zIGRuc21hc3Egc2Vy4W4gbGxhbWFkb3MgY29uICJkZWwiCit5IG90cm9zIGNvbiAib2xkIi4gQ3VhbmRvIGRuc21hc3EgcmVjaWJlIHVuYSBzZfFhbCBIVVAsIGVsIGd1afNuIHNlcuEKK2ludm9jYWRvIHBhcmEgYXJyaWVuZG9zIGV4aXN0ZW50ZXMgY29uIHVuIGV2ZW50byAib2xkIi4KKy5UUAorLkIgLS1kaGNwLXNjcmlwdHVzZXIKK0VzcGVjaWZpY2FyIGVsIHVzdWFyaW8gY29tbyBlbCBjdWFsIHNlIGRlYmUgY29ycmVyIGVsIGFyY2hpdm8KK2d1afNuIGRlIGNhbWJpbyBkZSBhcnJpZW5kb3MuIEVzdGUgZXMgcm9vdCBwb3IgcHJlZGV0ZXJtaW5hZG8sCitwZXJvIHB1ZWRlIHNlciBjYW1iaWFkbyBhIG90cm8gdXN1YXJpbyBtZWRpYW50ZSBlc3RhIG9wY2nzbi4KKy5UUAorLkIgXC05LCAtLWxlYXNlZmlsZS1ybworU3VwcmltaXIgY29tcGxldGFtZW50ZSBlbCB1c28gZGVsIGFyY2hpdm8gZGUgYXJyaWVuZG9zLiBFbCBhcmNoaXZvIG5vIHNlcuEKK2NyZWFkbywgbGXtZG8sIG5pIGVzY3JpdG8uIENhbWJpYXIgbGEgbWFuZXJhIGVuIGxhIGN14WwgZWwgYXJjaGl2byBndWnzbiBkZQorY2FtYmlvIGRlIGFycmllbmRvIChzaSBlcyBicmluZGFkbykgZXMgbGxhbWFkbywgZGUgdGFsIGZvcm1hIHF1ZSBsYSBiYXNlIGRlCitkYXRvcyBkZSBhcnJpZW5kb3NwdWVkYSBzZXIgbWFudGVuaWRhIGVuIGFsbWFjZW5hamUgZXh0ZXJubyBwb3IgZWwgYXJjaGl2bworZ3Vp824uIEFkaWNpb27hbG1lbnRlIGEgbGFzIGludm9jYWNpb25lcyBicmluZGFkYXMgZW4KKy5CIC0tZGhjcC1zY3JpcHQKK2VsIGFyY2hpdm8gZGUgY2FtYmlvIGRlIGFycmllbmRvcyBlcyBsbGFtYWRvIHVuYSB2ZXosIGFsIGluaWNpbyBkZSBkbnNtYXNxLAorY29uIGVsIPpuaWNvIGFyZ3VtZW50byAiaW5pdCIuIEN1YW5kbyBpbnZvY2FkbyBkZSBlc3RhIGZvcm1hLCBlbCBndWnzbiBkZWJlcu1hCitlc2NyaWJpciBlbCBlc3RhZG8gZ3VhcmRhZG8gZGUgbGEgYmFzZSBkZSBkYXRvcyBkZSBhcnJpZW5kb3MsIGVuIGZvcm1hdG8gZGUKK2FyY2hpdm8gZGUgYXJyaWVuZG9zIGRuc21hc3EsIGEgc3Rkb3V0IHkgaGFjZXIgZXhpdCBjb24gY/NkaWdvIGV4aXQgY2Vyby4gRmlqYXIKK2VzdGEgb3BjafNuIHRhbWJp6W4gZm9yemEgcXVlIGVsIGFyY2hpdm8gZGUgY2FtYmlvIGRlIGFycmllbmRvcyBzZWEgbGxhbWFkbworY3VhbmRvIGhheSBjYW1iaW9zIGhlY2hvcyBhIGVsIGNsaWVudC1pZCB5IHRpZW1wb3MgZGUgYXJyaWVuZG8geSB2ZW5jaW1pZW50by4KKy5UUAorLkIgLS1icmlkZ2UtaW50ZXJmYWNlPTxub21icmUgZGUgaW50ZXJmYWNlPiw8YWxpYXM+Wyw8YWxpYXM+XQorVHJhdGFyIHBhcXVldGVzIGRlIHBlZGlkb3MgREhDUCAodjQgeSB2NikgeSBkZSBJUHY2IFJvdXRlciBTb2xpY2l0IHF1ZQorbGxlZ2FuIGEgY3VhbHF1aWVyYSBkZSBsYXMgaW50ZXJmYWNlcyA8YWxpYXM+IGNvbW8gc2kgaHViaWVyYW4gbGxlZ2FkbworYSBsYSBpbnRlcmZhY2UgPG5vbWJyZSBkZSBpbnRlcmZhY2U+LiAgRXN0YSBvcGNp824gcGVybWl0ZSBxdWUgZG5zbWFzcQorcHVlZGUgcHJvcG9yY2lvbmFyIGxvcyBzZXJ2aWNpb3MgREhDUCB5IFJBIGEgdHJhdulzIGRlIGludGVyZmFjZXMKK2V0aGVybmV0IHNpbiBkaXJlY2Np824geSBzaW4gcHVlbnRlOyBwb3IgZWplbXBsbyBlbiB1biBub2RvIGRlIGPhbGN1bG8KK2RlIE9wZW5TdGFjaywgZG9uZGUgY2FkYSB1bmEgZGUgZXNhcyBpbnRlcmZhY2VzIGVzIHVuYSBpbnRlcmZheiBUQVAKK3BhcmEgdW5hIG3hcXVpbmEgdmlydHVhbCwgbyBhbCB1c2FyIGJyaWRnaW5nIGVzdGlsbyB2aWVqbyBlbgorcGxhdGFmb3JtYXMgQlNELgorLlRQCisuQiBcLXMsIC0tZG9tYWluPTxkb21pbmlvPlssPHJhbmdvIGRlIElQcz5dCitFc3BlY2lmaWNhIGxvcyBkb21pbmlvcyBETlMgcGFyYSBlbCBzZXJ2aWRvciBESENQLiBEb21pbmlvcyBwdWVkZW4gc2VyCiticmluZGFkb3MgaW5jb25kaWNpb25hbG1lbnRlIChzaW4gZWwgcmFuZ28gZGUgSVBzKSBvIHBhcmEgcmFuZ29zIGxpbWl0YWRvcy4gRXN0bwordGllbmUgZG9zIGVmZWN0b3M6IFByaW1lcmFtZW50ZSwgY2F1c2EgcXVlIGVsIHNlcnZpZG9yIERIQ1AgbGUgZGV2dWVsdmEgZWwKK2RvbWluaW8gYSBjdWFscXVpZXIgaG9zdCBxdWUgbG8gcGlkYS4gU2VndW5kYW1lbnRlLCBmaWphIGVsIGRvbWluaW8gcGFyYSBlbAorY3VhbCBlcyBsZWdhbCBwYXJhIGhvc3RzIGNvbmZpZ3VyYWRvcyBtZWRpYW50ZSBESENQIHJlY2xhbWFyLiBMYSBpbnRlbmNp824gZXMKK3Jlc3RyaW5naXIgbm9tYnJlcyBkZSBob3N0IHBhcmEgcXVlIHVuIGhvc3Qgbm8tY29uZmlhZG8gZW4gbGEgTEFOIG5vCitwdWVkYSBwcm9jbGFtYXIgc3Ugbm9tYnJlIHbtYSBESENQLCBjb21vIHBvciBlamVtcGxvICJtaWNyb3NvZnQuY29tIiB5CitjYXB0dXJhciB0cuFmaWNvIG5vIGRlc3RpbmFkbyBhIGVsbGEuIFNpIG5pbmf6biBzdWZpam8gZGUgZG9taW5pbyBlcworZXNwZWNpZmljYWRvLCBlbnRvbmNlcyBjdWFscXVpZXIgbm9tYnJlIGRlIGhvc3QgY29uIHVuYSBwYXJ0ZSBkZSBkb21pbmlvCisobyBzZWEgY29uIHVuIHB1bnRvKSBzZXLhIG5lZ2FkYSB5IGJpdGFjb3JhZGEuIFNpIHVuIHN1ZmlqbyBlcyBlc3BlY2lmaWNhZG8sCitlbnRvbmNlcyBub21icmVzIGRlIGhvc3QgY29uIHVuYSBwYXJ0ZSBkZSBkb21pbmlvIHNvbiBwZXJtaXRpZG9zLCBjb24gdGFsCitxdWUgbGEgcGFydGUgZGUgZG9taW5pbyBjb2luY2lkYSBjb24gZWwgc3VmaWpvLiBBZGljaW9uYWxtZW50ZSwgY3VhbmRvCit1biBzdWZpam8gZXMgZmlqYWRvLCBlbnRvbmNlcyBub21icmVzIGRlIGhvc3Qgc2luIHBhcnRlIGRlIGRvbWluaW8gdGllbmVuCitlbCBzdWZpam8gYWdyZWdhZG8gY29tbyB1bmEgcGFydGUgZGUgZG9taW5pbyBvcGNpb25hbC4gUG9yIGVqZW1wbG8sIGVuCittaSByZWQgcHVlZG8gZmlqYXIKKy5CIC0tZG9tYWluPXRoZWtlbGxleXMub3JnLnVrCit5IHRlbmVyIHVuYSBtYXF1aW5hIGN1eW8gbm9tYnJlIGhvc3QgREhDUCBlcyAibGFwdG9wIi4gTGEgZGlyZWNjafNuIElQCitkZSBlc2EgbeFxdWluYSBlcyBkaXNwb25pYmxlIGRlc2RlCisuQiBkbnNtYXNxCitjb21vICJsYXB0b3AiIHkgImxhcHRvcC50aGVrZWxsZXlzLm9yZy51ayIuIFNpIGVsIGRvbWluaW8gZXMgYnJpbmRhZG8KK2NvbW8gIiMiIGVudG9uY2VzIGVsIGRvbWluaW8gZXMgbGVpZG8gZGVzZGUgbGEgcHJpbWVyYSBkaXJlY3RpdmEgc2VhcmNoCitlbiAvZXRjL3Jlc29sdi5jb25mIChvIGVxdWl2YWxlbnRlKS4gRWwgcmFuZ28gZGUgZGlyZWNjaW9uZXMgcHVlZGUgc2VyCis8ZGlyZWNjafNuIElQPiw8ZGlyZWNjafNuIElQPiBvciA8ZGlyZWNjafNuIElQPi88beFzY2FyYSBkZSBzdWJyZWQ+LiBWZXIKKy5CIC0tZGhjcC1mcWRuIGVsIGN1YWwgcHVlZGUgY2FtYmlhciBlbCBjb21wb3J0YW1pZW50byBkZSBkbnNtYXNxIGNvbgorZG9taW5pb3MuCisuVFAKKy5CIC0tZGhjcC1mcWRuCitFbiBlbCBtb2RvIHByZWRldGVybWluYWRvLCBkbnNtYXNxIHBvbmUgbG9zIG5vbWJyZXMgbm8tY2FsaWZpY2Fkb3MKK2RlIGNsaWVudGVzIERIQ1AgZW4gZWwgRE5TLiBQb3IgZXN0YSByYXrzbiwgbG9zIG5vbWJyZXMgZGViZW4gc2VyIPpuaWNvcywKK2H6biBzaSBkb3MgY2xpZW50ZXMgcXVlIHRpZW5lbiBlbCBtaXNtbyBub21icmUgZXN04W4gZW4gZG9taW5pb3MKK2RpZmVyZW50ZXMuIFNpIHVuIHNlZ3VuZG8gY2xpZW50ZSBESENQIGFwYXJlY2UgZWwgY3VhbCB0aWVuZSBlbCBtaXNtbworbm9tYnJlIHF1ZSB1biBjbGllbnRlIGV4aXN0ZW50ZSwgZWwgbm9tYnJlIGVzIHRyYW5zZmVyaWRvIGFsIGNsaWVudGUgbnVldm8uIFNpCisuQiAtLWRoY3AtZnFkbgorZXN04SBmaWphZG8sIGVzdGUgY29tcG9ydGFtaWVudG8gY2FtYmlhOiBFbCBub21icmUgbm8tY2FsaWZpY2Fkbworbm8gZXMgcHVlc3RvIGVuIGVsIEROUywgc29sbyBlbCBub21icmUgY2FsaWZpY2Fkby4gRG9zIGNsaWVudGVzIERIQ1AgY29uCitlbCBtaXNtbyBub21icmUgcHVlZGVuIGFtYm9zIHF1ZWRhcnNlIGNvbiBlbCBub21icmUsIGNvbiB0YWwgcXVlIGxhIHBhcnRlCitkZSBkb21pbmlvIHNlYSBkaWZlcmVudGUgKG8gc2VhIHF1ZSBsb3Mgbm9tYnJlcyBjb21wbGV0YW1lbnRlIGNhbGlmaWNhZG9zCitkaWZpZXJhbikuIFBhcmEgYXNlZ3VyYXIgcXVlIHRvZG9zIGxvcyBub21icmVzIHRlbmdhbiB1bmEgcGFydGUgZGUgZG9taW5pbywKK2RlYmUgaGFiZXIgYWwgbWVub3MKKy5CIC0tZG9tYWluCitzaW4gdW5hIGRpcmVjY2nzbiBlc3BlY2lmaWNhZGEgY3VhbmRvCisuQiAtLWRoY3AtZnFkbgorZXN04SBmaWphZG8uCisuVFAKKy5CIC0tZW5hYmxlLXRmdHBbPTxpbnRlcmZhY2U+XQorSGFiaWxpdGFyIGxhIGZ1bmNp824gZGUgc2Vydmlkb3IgVEZUUC4gRXN0byBlc3ThIGRlbGliZXJhZGFtZW50ZSBsaW1pdGFkbworYSBsbyBuZWNlc2FyaW8gcGFyYSBoYWNlcmxlIGEgdW4gY2xpZW50ZSB1biBpbmljaW8gdu1hIHJlZC4gU29sbyBsZWN0dXJhIGVzCitwZXJtaXRpZGE7IGxhcyBleHRlbnNpb25lcyB0c2l6ZSB5IGJsa3NpemUgc29uIHNvcG9ydGFkYXMgKHRzaXplIHNvbG8gZXMKK3NvcG9ydGFkYSBlbiBtb2RvIG9jdGV0bykuIFZlciBzZWNjafNuIGRlIE5PVEFTIHBhcmEgZWwgdXNvIGRlIGVsIGFyZ3VtZW50bworZGUgaW50ZXJmYWNlLgorLlRQCisuQiAtLXRmdHAtcm9vdD08ZGlyZWN0b3J5PlssPGludGVyZmFjZT5dCitCdXNjYXIsIHJlbGF0aXZvIGFsIGRpcmVjdG9yaW8gYnJpbmRhZG8sIGFyY2hpdm9zIHBhcmEgdHJhbnNmZXJpciBtZWRpYW50ZSBlbAordXNvIGRlIFRGVFAuIEN1YW5kbyBlc3RhIG9wY2nzbiBlc3ThIGZpamFkYSwgcGF0aHMgVEZUUCBxdWUgaW5jbHV5ZW4gIi4uIiBzb24KK3JlY2hhemFkb3MsIHBhcmEgcHJldmVuaXIgcXVlIGNsaWVudGVzIHNhbGdhbiBkZSBsYSByYe16IGVzcGVjaWZpY2FkYS4gUGF0aHMKK2Fic29sdXRvcyAobG9zIHF1ZSBjb21pZW56YW4gY29uICIvIikgZXN04W4gcGVybWl0aWRvcywgcGVybyBkZWJlbiBlc3RhcgorZGVudHJvIGRlbCB0ZnRwLXJvb3QuIFNpIGVsIGFyZ3VtZW50byBvcGNpb25hbCBkZSBpbnRlcmZhY2UgZXMgYnJpbmRhZG8sIGVsCitkaXJlY3RvcmlvIGVzIHNvbG8gdXNhZG8gcGFyYSBwZWRpZG9zIFRGVFAgdu1hIGVzYSBpbnRlcmZhY2UuCisuVFAKKy5CIC0tdGZ0cC11bmlxdWUtcm9vdAorQWdyZWdhciBsYSBkaXJlY2Np824gSVAgZGVsIGNsaWVudGUgVEZUUCBjb21vIHVuIGNvbXBvbmVudGUgcGF0aCBkZWwgbGFkbyBkZWwKK1RGVFAtcm9vdCAoZW4gZm9ybWF0byBlc3ThbmRhciBkZSBjdWF0cm8gcHVudG9zKS4gU29sbyB24WxpZG8gc2kgdW4gdGZ0cC1yb290Citlc3ThIGZpamFkbyB5IGVsIGRpcmVjdG9yaW8gZXhpc3RlLiBQb3IgZWplbXBsbywgc2kgdGZ0cC1yb290IGVzICIvdGZ0cCIgeSBlbAorY2xpZW50ZSAxLjIuMy40IHBpZGUgZWwgYXJjaGl2byAibWlhcmNoaXZvIiBlbnRvbmNlcyBlbCBwYXRoIGVmZWN0aXZvIHNlcuEKKyIvdGZ0cC8xLjIuMy40L21pYXJjaGl2byIgc2kgL3RmdHAvMS4yLjMuNCBleGlzdGUgbyAvdGZ0cC9taWFyY2hpdm8gc2kgbm8uCisuVFAKKy5CIC0tdGZ0cC1zZWN1cmUKK0hhYmlsaXRhciBtb2RvIFRGVFAgc2VndXJvOiBzaW4gZXN0bywgY3VhbHF1aWVyIGFyY2hpdm8gcXVlIGVzIGxl7WJsZSBwb3IgZWwKK3Byb2Nlc28gZG5zbWFzcSBiYWpvIHJlZ2xhcyBub3JtYWxlcyBkZSBjb250cm9sIGRlIGFjY2VzbyBVTklYLCBlc3ThIGRpc3BvbmlibGUKK3btYSBURlRQLiBDdWFuZG8gbGEgb3BjafNuIC0tdGZ0cC1zZWN1cmUgZXMgZmlqYWRhLCBzb2xvIGFyY2hpdm9zCitwZXJ0ZW5lY2llbnRlcyBhbCB1c3VhcmlvIHF1ZSBjb3JyZSBlbCBwcm9jZXNvIGRuc21hc3EgZXN04W4gYWNjZXNpYmxlcy4gU2kKK2Ruc21hc3EgZXN04SBjb3JyaWVuZG8gY29tbyByb290LCByZWdsYXMgZGlmZXJlbnRlcyBhcGxpY2FuOiAtLXRmdHAtc2VjdXJlIG5vCit0aWVuZSBuaW5n+m4gZWZlY3RvLCBwZXJvIHNvbG8gYXJjaGl2b3MgcXVlIHRpZW5lbiBlbCBiaXQgZGUgbGVjdHVyYSBnbG9iYWwKK2ZpamFkb3MgZXN04W4gYWNjZXNpYmxlcy4gTm8gc2UgcmVjb21pZW5kYSBjb3JyZXIgZG5zbWFzcSBjb21vIHJvb3QgY29uIFRGVFAKK2hhYmlsaXRhZG8sIHkgbXVjaG8gbWVub3Mgc2luIGVzcGVjaWZpY2FyIC0tdGZ0cC1yb290LCB5YSBxdWUgc2UgcHVlZGUgZXhwb25lcgorY3VhbHF1aWVyIGFyY2hpdm8gZGUgbGVjdHVyYSBnbG9iYWwgZW4gZWwgc2Vydmlkb3IgYSBjdWFscXVpZXIgaG9zdCBkZSBsYSByZWQuCisuVFAKKy5CIC0tdGZ0cC1tYXg9PGNvbmVjY2lvbmVzPgorRmlqYXIgZWwgbvptZXJvIG3heGltbyBwZXJtaXRpZG8gZGUgY29uZWNjaW9uZXMgVEZUUCBzaW11bHThbmVhcy4gRXN0byBlcyA1MAorcG9yIHByZWRldGVybWluYWRvLiBBbCBzZXJ2aXIgdW4gbvptZXJvIGdyYW5kZSBkZSBjb25lY2Npb25lcyBURlRQLCBs7W1pdGVzCitkZSBkZXNjcmlwdG9yIGRlIGFyY2hpdm8gcG9yIHByb2Nlc28gcHVlZGVuIHNlciBlbmNvbnRyYWRvcy4gRG5zbWFzcSBuZWNlc2l0YQordW4gZGVzY3JpcHRvciBkZSBhcmNoaXZvIHBvciBjYWRhIGNvbmVjY2lvbiBURlRQIGNvbmN1cnJlbnRlLCB5IHBvciBhcmNoaXZvCiv6bmljbyAobWFzIGFsZ3Vub3Mgb3Ryb3MpLiBEZSB0YWwgbWFuZXJhIHF1ZSBzZXJ2aXJsZSBlbCBtaXNtbyBhcmNoaXZvCitzaW11bHThbmVvIGEgbiBjbGllbnRlcyByZXF1ZXJpcuEgZWwgdXNvIGRlIG4gKyAxMCBkZXNjcmlwdG9yZXMgZGUgYXJjaGl2bywKK3kgc2VydmlybGVzIGFyY2hpdm9zIGRpZmVyZW50ZXMgc2ltdWx04W5lYW1lbnRlIHJlcXVlcmly4SAoMipuKSArIDEwCitkZXNjcmlwdG9yZXMuIFNpCisuQiAtLXRmdHAtcG9ydC1yYW5nZQorZXMgYnJpbmRhZG8sIGVzbyBwdWVkZSBhZmVjdGFyIGVsIG76bWVybyBkZSBjb25leGlvbmVzIHNpbXVsdOFuZWFzLgorLlRQCisuQiAtLXRmdHAtbm8tYmxvY2tzaXplCitObyBwZXJtaXRpciBxdWUgZWwgc2Vydmlkb3IgbmVnb2NpZSBsYSBvcGNp824gImJsb2Nrc2l6ZSIgY29uIHVuIGNsaWVudGUuCitBbGd1bm9zIGNsaWVudGVzIGNvbiBlcnJvcmVzIHBpZGVuIGVzdGEgb3BjafNuIHBlcm8gc2UgcG9ydOFuIG1hbCBjdWFuZG8gc2UKK2xlcyBicmluZGEuCisuVFAKKy5CIC0tdGZ0cC1wb3J0LXJhbmdlPTxpbmljaW8+LDxmaW5hbD4KK1VuIHNlcnZpZG9yIFRGVFAgZXNjdWNoYSBwb3IgaW5pY2lvcyBkZSBjb25leGnzbiBlbiB1biBwdWVydG8gYmllbiBjb25vY2lkbworKDY5KSwgcGVybyB0YW1iaWVuIHVzYSB1biBwdWVydG8gZGluYW1pY2FtZW50ZSBzZWxlY2Npb25hZG8gcGFyYSBjYWRhCitjb25leGnzbi4gTm9ybWFsbWVudGUgZXN0b3Mgc29uIHNlbGVjY2lvbmFkb3MgcG9yIGVsIHNpc3RlbWEgb3BlcmF0aXZvLAorcGVybyBlc3RhIG9wY2nzbiBlc3BlY2lmaWNhIHVuIHJhbmdvIGRlIHB1ZXJ0b3MgcGFyYSBzZXIgdXNhZG8gcG9yIHRyYW5zZmVyZW5jaWFzCitURlRQLiBFc3RvIHB1ZWRlIHNlciD6dGlsIGN1YW5kbyBURlRQIHRpZW5lIHF1ZSBwYXNhciBhdHJhdmVzIGRlIHVuIGZpcmV3YWxsLgorRWwgY29taWVuem8gZGVsIHJhbmdvIG5vIHB1ZWRlIHNlciBtZW5vciBhIDEwMjUgYSBtZW5vcyBxdWUgZG5zbWFzcSBlc3TpIGNvcnJpZW5kbworY29tbyByb290LiBFbCBu+m1lcm8gZGUgY29uZXhpb25lcyBzaW11bHThbmVhcyBlc3ThIGxpbWl0YWRvIHBvciBlbCB0YW1h8W8gZGVsCityYW5nbyBkZSBwdWVydG9zLgorLlRQCisuQiBcLUMsIC0tY29uZi1maWxlPTxhcmNoaXZvPgorRXNwZWNpZmljYXIgdW4gYXJjaGl2byBkZSBjb25maWd1cmFjafNuIGRpZmVyZW50ZS4gTGEgb3BjafNuIGNvbmYtZmlsZQordGFtYmnpbiBlcyBwZXJtaXRpZGEgZW4gYXJjaGl2b3MgZGUgY29uZmlndXJhY2nzbiwgcGFyYSBpbmNsdWlyIG36bHRpcGxlcworYXJjaGl2b3MgZGUgY29uZmlndXJhY2nzbi4KKy5UUAorLkIgXC03LCAtLWNvbmYtZGlyPTxkaXJlY3RvcmlvPlssPGZpbGUtZXh0ZW5zaW9uPi4uLi4uLl0KK0xlZXIgdG9kb3MgbG9zIGFyY2hpdm9zIGRlbnRybyBkZWwgZGlyZWN0b3JpbyBicmluZGFkbyBjb21vIGFyY2hpdm9zCitkZSBjb25maWd1cmFjafNuLiBTaSBleHRlbnNpb25lcyBzb24gYnJpbmRhZGFzLCBjdWFscXVpZXIgYXJjaGl2byBxdWUKK3Rlcm1pbmUgZW4gZXNhcyBleHRlbnNpb25lcyBzb24gaWdub3JhZG9zLiBDdWFscXVpZXIgYXJjaGl2b3MgY3V5b3Mgbm9tYnJlcwordGVybWluZW4gY29uIH4gbyBjb21pZW56ZW4gY29uIC4gbyBjb21pZW56ZW4geSB0ZXJtaW5lbiBjb24gIyBzaWVtcHJlIHNvbgoraWdub3JhZG9zLiBFc3RhIG9wY2nzbiBwdWVkZSBzZXIgYnJpbmRhZGEgZW4gbGEgbO1uZWEgZGUgY29tYW5kb3MgbyBlbiB1bgorYXJjaGl2byBkZSBjb25maWd1cmFjafNuLgorLlNIIEFSQ0hJVk8gREUgQ09ORklHVVJBQ0lPTgorQWwgaW5pY2lvLCBkbnNtYXNxIGxlZQorLkkgL2V0Yy9kbnNtYXNxLmNvbmYsCitzaSBleGlzdGUuIChFbiBGcmVlQlNELCBlbCBhcmNoaXZvIGVzCisuSSAvdXNyL2xvY2FsL2V0Yy9kbnNtYXNxLmNvbmYKKykgKHBlcm8gdmVyIGxhcyBvcGNp825lcworLkIgXC1DCit5CisuQiBcLTcKK3BvcmZhdm9yLikgRWwgZm9ybWF0byBkZSBlc3RlIGFyY2hpdm8gY29uc2lzdGUgZGUgdW5hIG9wY2nzbiBwb3IgbO1uZWEsCitleOFjdGFtZW50ZSBjb21vIGxhcyBvcGNpb25lcyBsYXJnYXMgZGV0YWxsYWRhcyBlbiBsYSBzZWNjafNuIE9QQ0lPTkVTCitwZXJvIHNpbiBlbCAiLS0iIGFsIGZyZW50ZS4gTO1uZWFzIHF1ZSBjb21pZW56YW4gY29uICMgc29uIGNvbWVudGFyaW9zCit5IHNvbiBpZ25vcmFkYXMuIFBhcmEgb3BjaW9uZXMgcXVlIHNvbG8gcHVlZGVuIHNlciBlc3BlY2lmaWNhZGFzIHVuYQorc29sYSB2ZXosIGVsIGFyY2hpdm8gZGUgY29uZmlndXJhY2nzbiBpbnZhbGlkYSBsYSBs7W5lYSBkZSBjb21hbmRvcy4KK0xhcyBjb21pbGxhcyBzb24gcGVybWl0aWRhcyBlbiBlbCBhcmNoaXZvIGRlIGNvbmZpZ3VyYWNp8246IGVudHJlIGNvbWlsbGFzCit0aXBvICIgbG9zIHNpZ25pZmljYWRvcyBlc3BlY2lhbGVzIGRlICw6LiB5ICMgc29uIGVsaW1pbmFkb3MgeSBsb3MKK3NpZ3VpZW50ZXMgZXNjYXBlcyBzb24gcGVybWl0aWRvczogXFxcXCBcXCIgXFx0IFxcZSBcXGIgXFxyIHkgXFxuLgorQ29ycmVzcG9uZGVuIGEgdGFiLCBlc2NhcGUsIGJhY2tzcGFjZSwgcmV0dXJuIHkgbmV3bGluZS4KKy5TSCBOT1RBUworQWwgcmVjaWJpciB1biBTSUdIVVAKKy5CIGRuc21hc3EgCitsaWJlcmEgc3UgY2FjaGUgeSBlbnRvbmNlcyByZWNhcmdhCisuSSAvZXRjL2hvc3RzCit5CisuSSAvZXRjL2V0aGVycworYWwgaWd1YWwgcXVlIGN1YWxxdWllciBhcmNoaXZvIGJyaW5kYWRvIGNvbiAtLWRoY3AtaG9zdHNmaWxlLCAtLWRoY3Atb3B0c2ZpbGUsCitvIC0tYWRkbi1ob3N0cy4KK0VsIGFyY2hpdm8gZ3Vp824gZGUgY2FtYmlvIGRlIGFycmllbmRvcyBlcyBsbGFtYWRvIHBhcmEgdG9kb3MgbG9zIGFycmllbmRvcworREhDUCBleGlzdGVudGVzLiBTaQorLkIKKy0tbm8tcG9sbAorZXN04SBmaWphZG8gZW50b25jZXMgU0lHSFVQIHRhbWJp6W4gcmUtbGVlCisuSSAvZXRjL3Jlc29sdi5jb25mLgorU0lHSFVQCitOTyByZS1sZWUgZWwgYXJjaGl2byBkZSBjb25maWd1cmFjafNuLgorLlBQCitBbCByZWNpYmlyIHVuIFNJR1VTUjEsCisuQiBkbnNtYXNxIAorZXNjcmliZSBlc3RhZO1zdGljYXMgYSBsYSBiaXThY29yYSBkZWwgc2lzdGVtYS4gRXNjcmliZSBlbCB0YW1h8W8KK2RlbCBjYWNo6SwgZWwgbnVtZXJvIGRlIG5vbWJyZXMgcXVlIGhhbiB0ZW5pZG8gcXVlIHNlciByZW1vdmlkb3MgZGVsCitjYWNo6SBhbnRlcyBkZSBxdWUgdmVuY2llcmFuIHBhcmEgaGFjZXIgZXNwYWNpbyBwYXJhIG5vbWJyZXMgbnVldm9zLCB5IGVsCitu+m1lcm8gdG90YWwgZGUgbm9tYnJlcyBxdWUgaGFuIHNpZG8gaW5zZXJ0YWRvcyBlbiBlbCBjYWNo6S4gUGFyYSBjYWRhCitzZXJ2aWRvciB1cHN0cmVhbSBicmluZGEgZWwgbvptZXJvIGRlIGL6c3F1ZWRhcyBlbnZpYWRhcywgeSBlbAorbvptZXJvIHF1ZSByZXN1bHRhcm9uIGVuIGVycm9yLiBFbiBtb2RvCisuQiAtLW5vLWRhZW1vbgorbyBjdWFuZG8gYml0YWNvculvIGNvbXBsZXRvIGVzdOEgaGFiaWxpdGFkbyAoLXEpLCB1bmEgZGVzY2FyZ2EgY29tcGxldGEgZGUKK2VsIGNvbnRlbmlkbyBkZWwgY2FjaOkgZXMgaGVjaGEuCisuUFAKK0N1YW5kbyByZWNpYmUgdW4gU0lHVVNSMiB5IGVzdOEgYml0YWNvcmVhbmRvIGRpculjdGFtZW50ZSBhIHVuIGFyY2hpdm8gKHZlcgorLkIgLS1sb2ctZmFjaWxpdHkKKykKKy5CIGRuc21hc3EKK2NlcnJhcuEgeSByZWFicmly4SBlbCBhcmNoaXZvIGRlIGJpdOFjb3JhLiBO83Rlc2UgcXVlIGR1cmFudGUgZXN0YQorb3BlcmFjafNuLCBkbnNtYXNxIG5vIGVzdGFy4SBjb3JyaWVuZG8gY29tbyByb290LiBBbCBjcmVhciBlbCBhcmNoaXZvIGRlCitiaXThY29yYSwgZG5zbWFzcSBjYW1iaWEgZWwgZHVl8W8gZGVsIGFyY2hpdm8gYSBlbCB1c3VhcmlvIG5vcm1hbCBjb21vCitlbCBxdWUgY29ycmVy4S4gTG9ncm90YXRlIGRlYmUgc2VyIGNvbmZpZ3VyYWRvIHBhcmEgY3JlYXIgdW4gYXJjaGl2byBkZQorYml04WNvcmEgbnVldm8gY29uIHBlcm1pc29zIGlndWFsZXMgYWwgZXhpc3RlbnRlLCBhbnRlcyBkZSBlbnZpYXIKK1NJR1VTUjIuIFNpIGL6c3F1ZWRhcyBETlMgVENQIGVzdOFuIGVuIHByb2dyZXNvLCBlbCBhcmNoaXZvIGRlIGJpdOFjb3JhCit2aWVqbyBzZSBtYW50ZW5kcuEgYWJpZXJ0byBlbiBwcm9jZXNvcyBoaWpvcyBxdWUgZXN04W4gbWFuZWphbmRvCiti+nNxdWVkYXMgVENQLCB5IHB1ZWRlIGNvbnRpbnVhcnNlIGEgZXNjcmliaXJsZS4gSGF5IHVuIGztbWl0ZSBkZSAxNTAKK3NlZ3VuZG9zLCBkZXNwdelzIGRlIGxvIGN1YWwgdG9kb3MgbG9zIHByb2Nlc29zIFRDUCBleGlzdGVudGVzIHNlIGhhYnLhbgordmVuY2lkbzogcG9yIGVzdGEgcmF6824sIG5vIGVzIHNhYmlvIGNvbmZpZ3VyYXIgY29tcHJlc2nzbiBkZSBhcmNoaXZvcworZGUgYml04WNvcmEgcGFyYSBhcmNoaXZvcyBxdWUgYWNhYmFuIGRlIHNlciByb3RhZG9zLiBDb24gbG9ncm90YXRlLCBsYXMKK29wY2lvbmVzIHJlcXVlcmlkYXMgc29uCisuQiBjcmVhdGUKK3kKKy5CIGRlbGF5Y29tcHJlc3MuCisuUFAKK0Ruc21hc3EgZXMgdW4gcmVlbnZpYWRvciBkZSBi+nNxdWVkYXMgRE5TOiBubyBwdWVkZSByZXNwb25kZXIgYvpzcXVlZGFzCithcmJpdHJhcmlhcyBjb21lbnphbmRvIGRlc2RlIGxvcyBzZXJ2aWRvcmVzIHJvb3QgcGVybyByZWVudu1hIGRpY2hhcworYvpzcXVlZGFzIGEgdW4gc2Vydmlkb3IgRE5TIHJlY3Vyc2l2bywgZWwgY3VhbCBlcyB07XBpY2FtZW50ZSBwcm92Ze1kbworcG9yIGVsIHByb3ZlZWRvciBkZSBJbnRlcm5ldC4gUG9yIHByZWRldGVybWluYWRvLCBkbnNtYXNxIGxlZQorLkkgL2V0Yy9yZXNvbHYuY29uZgorcGFyYSBkZXNjdWJpciBsYXMgZGlyZWNjaW9uZXMgSVAgZGUgbG9zIHNlcnZpZG9yZXMgRE5TIHVwc3RyZWFtIHF1ZQorZGViZSB1c2FyLCBkYWRvIGEgcXVlIGVzdGEgaW5mb3JtYWNp824gZXMgbm9ybWFsbWVudGUgYWxtYWNlbmFkYSBhbGztLgorQW1lbm9zIHF1ZQorLkIgLS1uby1wb2xsCitzZWEgdXNhZG8sCisuQiBkbnNtYXNxCityZXZpc2EgZWwgdGllbXBvIGRlIG1vZGlmaWNhY2nzbiBkZQorLkkgL2V0Yy9yZXNvbHYuY29uZgorKG8gZXF1aXZhbGVudGUgc2kKKy5CIFwtLXJlc29sdi1maWxlIAorZXMgdXNhZG8pIHkgbG8gcmUtbGVlIHNpIGhhIGNhbWJpYWRvLiBFc3RvIHBlcm1pdGUgcXVlIHNlcnZpZG9yZXMgRE5TIHPpYW4KK2ZpamFkb3MgZGlu4W1pY2FtZW50ZSB27WEgUFBQIG8gREhDUCB5YSBxdWUgYW1ib3MgcHJvdG9jb2xvcyBicmluZGFuIGVzdGEKK2luZm9ybWFjafNuLgorTGEgYXVzZW5jaWEgZGUKKy5JIC9ldGMvcmVzb2x2LmNvbmYKK25vIGVzIHVuIGVycm9yIHlhIHF1ZSBwdWRvIGhhYmVyIHNpZG8gY3JlYWRhIGFudGVzIGRlIHF1ZSB1bmEgY29uZXhp824gUFBQCitoYXlhIGV4aXN0aWRvLiBEbnNtYXNxIHNpbXBsZW1lbnRlIHNpZ3VlIHJldmlzYW5kbyBlbiBjYXNvIGRlIHF1ZQorLkkgL2V0Yy9yZXNvbHYuY29uZiAKK3NlYSBjcmVhZG8gZW4gYWxn+m4gbW9tZW50by4gQSBkbnNtYXNxIHNlIGxlIHB1ZWRlIGRlY2lyIHF1ZSByZXZpc2UgbeFzCitkZSB1biBhcmNoaXZvIHJlc29sdi5jb25mLiBFc3RvIGVzIPp0aWwgZW4gdW5hIGxhcHRvcCwgZG9uZGUgYW1ib3MgUFBQIHkKK0RIQ1AgcG9kcu1hbiBlc3RhciBzaWVuZG8gdXNhZG9zOiBkbnNtYXNxIHB1ZWRlIHNlciBmaWphZG8gcGFyYSByZXZpc2FyIGFtYm9zCisuSSAvZXRjL3BwcC9yZXNvbHYuY29uZiAKK3kKKy5JIC9ldGMvZGhjcGMvcmVzb2x2LmNvbmYgCit5IHVzYXLhIGVsIGNvbnRlbmlkbyBkZWwgcXVlIGhheWEgY2FtYmlhZG8gbWFzIHJlY2llbnRlbWVudGUsCiticmluZGFuZG8gYXPtIGxhIGhhYmlsaWRhZCBkZSBjYW1iaW8gYXV0b23hdGljbyBlbnRyZSBzZXJ2aWRvcmVzIEROUy4KKy5QUAorU2Vydmlkb3JlcyB1cHN0cmVhbSB0YW1iaeluIHB1ZWRlbiBzZXIgZXNwZWNpZmljYWRvcyBlbiBsYSBs7W5lYSBkZQorY29tYW5kb3MgbyBlbiBlbCBhcmNoaXZvIGRlIGNvbmZpZ3VyYWNp824uIEVzdGFzIGVzcGVjaWZpY2FjaW9uZXMgZGUKK3NlcnZpZG9yIG9wY2lvbmFsbWVudGUgbGxldmFuIHVuIG5vbWJyZSBkZSBkb21pbmlvIGVsIGN1YWwgbGUgZGljZSBhCitkbnNtYXNxIHF1ZSBkZWJlIHVzYXIgZXNlIHNlcnZpZG9yIHNvbG8gcGFyYSBlbmNvbnRyYXIgbm9tYnJlcyBlbiBlc2UKK2RvbWluaW8gZW4gcGFydGljdWxhci4KKy5QUAorUGFyYSBjb25maWd1cmFyIGRuc21hc3EgY29tbyBjYWNo6SBwYXJhIGVsIGhvc3QgZG9uZGUgZXN04QorY29ycmllbmRvLCBwb25lciB1biAibmFtZXNlcnZlciAxMjcuMC4wLjEiIGVuCisuSSAvZXRjL3Jlc29sdi5jb25mCitwYXJhIGFz7SBmb3J6YXIgcHJvY2Vzb3MgbG9jYWxlcyBhIGVudmlhciBi+nNxdWVkYXMgYSBkbnNtYXNxLiBFbnRvbmNlcywKK28gZXNwZWNpZmljYXIgbG9zIHNlcnZpZG9yZXMgdXBzdHJlYW0gZGly6WN0YW1lbnRlIGEgZG5zbWFzcSB1c2FuZG8gb3BjaW9uZXMKKy5CIFwtLXNlcnZlcgorbyBwb25pZW5kbyBzdXMgZGlyZWNjaW9uZXMgcmVhbGVzIGVuIG90cm8gYXJjaGl2bywgZGlnYW1vcworLkkgL2V0Yy9yZXNvbHYuZG5zbWFzcQoreSBjb3JyZXIgZG5zbWFzcSBjb24gbGEgb3BjaW9uCisuQiBcLXIgL2V0Yy9yZXNvbHYuZG5zbWFzcQorRXN0YSBzZWd1bmRhIHTpY25pY2EgcGVybWl0ZSBsYSBhY3R1YWxpemFjafNuIGRpbuFtaWNhIGRlIGxhcyBkaXJlY2Npb25lcworZGUgc2Vydmlkb3IgbWVkaWFudGUgUFBQIG8gREhDUC4KKy5QUAorRGlyZWNjaW9uZXMgZW4gL2V0Yy9ob3N0cyAiaGFy4W4gc29tYnJhIiBhIGRpZmVyZW50ZXMgZGlyZWNjaW9uZXMgcGFyYQorbG9zIG1pc21vcyBub21icmVzIGVuIHNlcnZpZG9yZXMgRE5TIHVwc3RyZWFtLCBhc+0gcXVlCisibWllbXByZXNhLmNvbSAxLjIuMy40IiBlbiAvZXRjL2hvc3RzIHNlIGFzZWd1cmFy4SBxdWUgbGFzIGL6c3F1ZWRhcworcG9yICJtaWVtcHJlc2EuY29tIiBzaWVtcHJlIHJldG9ybmFy4W4gMS4yLjMuNCBh+m4gc2kgYvpzcXVlZGFzIGVuIGVsCitzZXJ2aWRvciBETlMgdXBzdHJlYW0gZGV2b2x2ZXLtYW4gdW5hIGRpcmVjY2nzbiBkaWZlcmVudGUuIEhheSB1bmEKK2V4Y2VwY2nzbiBhIGVzdG86IHNpIGVsIHNlcnZpZG9yIEROUyB1cHN0cmVhbSBjb250aWVuZSB1biBDTkFNRSBxdWUKK2FwdW50YSBhIHVuIG5vbWJyZSBzb21icmVhZG8sIGVudG9uY2VzIGJ1c2NhbmRvIGVsIENOQU1FIGEgdHJhdul6IGRlCitkbnNtYXNxIHJlc3VsdGFy4SBlbiBxdWUgbGEgZGlyZWNjafNuIG5vLXNvbWJyZWFkYSBzZXLhIGFzb2NpYWRhIGNvbgorZWwgZGVzdGlubyBkZWwgQ05BTUUuIFBhcmEgY2lyY3VtdmVudGFyIGVzdG8sIGFncmVnYXIgZWwgQ05BTUUgYQorL2V0Yy9ob3N0cyBkZSB0YWwgbWFuZXJhIHF1ZSBlbCBDTkFNRSBlcyBzb21icmVhZG8gdGFtYmnpbi4KKworLlBQCitFbCBzaXN0ZW1hIGRlIGV0aXF1ZXRhcyBmdW5jaW9uYSBkZSBsYSBzaWd1aWVudGUgbWFuZXJhOiBQYXJhIGNhZGEgcGVkaWRvCitESENQLCBkbnNtYXNxIGNvbGVjY2lvbmEgdW4ganVlZ28gZGUgZXRpcXVldGFzIHbhbGlkYXMgZGUgbO1uZWFzIGRlCitjb25maWd1cmFjafNuIGFjdGl2YXMgcXVlIGluY2x1eWVuIHNldDo8dGFnPiwgaW5jbHV5ZW5kbyB1bmEgZGVsCisuQiBkaGNwLXJhbmdlCit1c2FkbyBwYXJhIGFsb2NhciBsYSBkaXJlY2Np824sIHVuYSBkZSBjdWFscXVpZXIKKy5CIGRoY3AtaG9zdAorcXVlIGNvaW5jaWRhICh5ICJrbm93biIgc2kgdW4gZGhjcC1ob3N0IGNvaW5jaWRlKS4KK0xhIGV0aXF1ZXRhICJib290cCIgZXMgZmlqYWRhIHBhcmEgcGVkaWRvcyBCT09UUCwgeSB1bmEgZXRpcXVldGEgY3V5bworbm9tYnJlIGVzIGVsIG5vbWJyZSBkZSBsYSBpbnRlcmZhY2UgZG9uZGUgbGxlZ/MgZWwgcGVkaWRvIHRhbWJpZW4gZXMKK2ZpamFkYS4KKworQ3VhbHF1aWVyIGxpbmVhIGRlIGNvbmZpZ3VyYWNp824gcXVlIGluY2x1eWEgdW5vIG8gbWFzCitjb25zdHJ1Y2Npb25lcyB0YWc6PHRhZz4gc29sbyBzZXLhIHbhbGlkYSBzaSB0b2RhcyBsYXMgZXRpcXVldGFzCitjb2luY2lkZW4gZW4gZWwganVlZ28gZGVyaXZhZG8gYXJyaWJhLiBU7XBpY2FtZW50ZSBlc3RvIGVzIGRoY3Atb3B0aW9uLgorLkIgZGhjcC1vcHRpb24gCitxdWUgdGVuZ2EgZXRpcXVldGFzIHNlcuEgdXNhZGEgZW4gcHJlZmVyZW5jaWEgZGUgdW5hIG9wY2nzbgorLkIgZGhjcC1vcHRpb24sCitzaW4gZXRpcXVldGEsIGNvbiB0YWwgcXVlIF90b2Rhc18gbGFzIGV0aXF1ZXRhcyBjb2luY2lkYW4gZW4gYWxndW5hCitwYXJ0ZSBkZWwganVlZ28gY29sZWNjaW9uYWRvIGRlc2NyaWJpZG8gYXJyaWJhLiBFbCBwcmVmaWpvICchJyBlbiB1bmEKK2V0aXF1ZXRhIHNpZ25pZmljYSAibm8iIGFz7SBxdWUgLS1kaGNwPW9wdGlvbj10YWc6IXB1cnBsZSwzLDEuMi4zLjQgZW527WEKK2xhIG9wY2nzbiBjdWFuZG8gbGEgZXRpcXVldGEgInB1cnBsZSIgbm8gZXN04SBlbiBlbCBqdWVnbworZGUgZXRpcXVldGFzIHbhbGlkYXMuIChTaSBzZSBlc3ThIHVzYW5kbyBlc3RvIGVuIHVuYSBs7W5lYSBkZSBjb21hbmRvcworZW4gdmV6IGRlIHVuIGFyY2hpdm8gZGUgY29uZmlndXJhY2nzbiwgYXNlZ3VyZXNlIGRlIGVzY2FwYXIgISwgZWwgY3VhbAorZXMgdW4gbWV0YWNhcmFjdGVyIGRlIHNoZWxsLikKKy5QUAorTvN0ZXNlIHF1ZSBwYXJhCisuQiBkaGNwLXJhbmdlCithbWJvcyB0YWc6PHRhZz4geSBzZXQ6PHRhZz4gc29uIHBlcm1pdGlkb3MsIHBhcmEgc2VsZWNjaW9uYXIgZWwgcmFuZ28KK2VuIHVzbyBiYXNhZG8gZW4gKHBvciBlamVtcGxvKSBkaGNwLWhvc3QsIHkgcGFyYSBhZmVjdGFyIGxhcyBvcGNpb25lcworZW52aWFkYXMsIGJhc2FkYXMgZW4gZWwgcmFuZ28gc2VsZWNjaW9uYWRvLgorCitFc3RlIHNpc3RlbWEgZXZvbHVjaW9u8yBkZSB1bm8gYW50ZXJpb3IgbWFzIGxpbWl0YWRvIHkgcGFyYSBjb21wYXRpYmlsZGFkCityZXZlcnNhICJuZXQ6IiBwdWVkZSBzZXIgdXNhZGEgZW4gdmV6IGRlICJ0YWc6IiB5ICJzZXQ6IiBwdWVkZSBzZXIKK29taXRpZGEuIChFeGNlcHRvIGVuCisuQiBkaGNwLWhvc3QsCitkb25kZSAibmV0OiIgcHVlZGUgc2VyIHVzYWRvIGVuIHZleiBkZSAic2V0OiIuKSBQb3IgbGEgbWlzbWEgcmF6824sICcjJworcHVlZGUgc2VyIHVzYWRvIGVuIHZleiBkZSAnIScgcGFyYSBpbmRpY2FyIE5PLgorLlBQCitFbCBzZXJ2aWRvciBESENQIGRlIGRuc21hc3EgZnVuY2lvbmFy4SBjb21vIHNlcnZpZG9yIEJPT1RQIHRhbWJpZW4sCitjb24gdGFsIHF1ZSBsYXMgZGlyZWNjaW9uZXMgTUFDIHkgSVAgZGUgbG9zIGNsaWVudGVzIHNlYW4gYnJpbmRhZGFzLAoreWEgc2VhIHVzYW5kbyBjb25maWd1cmFjaW9uZXMKKy5CIGRoY3AtaG9zdCAKK28gZW4KKy5JIC9ldGMvZXRoZXJzCissIHkgdW5hIGNvbmZpZ3VyYWNp824KKy5CIGRoY3AtcmFuZ2UgCitlc3TpIHByZXNlbnRlIHBhcmEgYWN0aXZhciBlbCBzZXJ2aWRvciBESENQIGVuIHVuYSByZWQgcGFydGljdWxhci4KKyhGaWphciAtLWJvb3RwLWR5bmFtaWMgZWxpbWluYSBsYSBuZWNlc2lkYWQgZGUgdHJhemFkb3MgZXN04XRpY29zLikgRWwKK3BhcuFtZXRybyBkZSBub21icmUgZGUgYXJjaGl2b3MgZW4gdW4gcGVkaWRvIEJPT1RQIGVzIHVzYWRvIGNvbW8KK3VuYSBldGlxdWV0YSwgYWwgaWd1YWwgcXVlIGxhIGV0aXF1ZXRhICJib290cCIsIHBlcm1pdGllbmRvIGFz7SBhbGf6bgorY29udHJvbCBzb2JyZSBsYXMgb3BjaW9uZXMgZGV2dWVsdGFzIGEgZGlmZXJlbnRlcyBjbGFzZXMgZGUgaG9zdHMuCisKKy5CIGRoY3AtcmFuZ2UKK3B1ZWRlIHRlbmVyIHVuIG5vbWJyZSBkZSBpbnRlcmZhY2UgYnJpbmRhZG8gY29tbworImludGVyZmFjZTo8aW50ZXJmYWNlLW5hbWU+Ii4gTGEgc2Vt4W50aWNhIGRlIGVzdG8gZXMgYXPtOgorUGFyYSBESENQLCBzaSBjdWFscXVpZXIgb3RybyBkaGNwLXJhbmdlIGV4aXN0ZSBfc2luXyB1biBub21icmUgZGUKK2ludGVyZmFjZSwgZW50b25jZXMgZWwgbm9tYnJlIGRlIGludGVyZmFjZSBlcyBpZ25vcmFkbyB5IGRuc21hc3EKK3NlIGNvbXBvcnRhIGNvbW8gc2kgbGFzIHBhcnRlcyBkZSBpbnRlcmZhY2Ugbm8gZXhpc3RpZXJhbiwgZGUgb3RyYSBmb3JtYQorREhDUCBzb2xvIHNlIHByb3ZlZSBhIGludGVyZmFjZXMgbWVuY2lvbmFkYXMgZW4gZGVjbGFyYWNpb25lcworZGhjcC1yYW5nZS4gUGFyYSBETlMsIHNpIG5vIGhheSBvcGNpb25lcworLkIgLS1pbnRlcmZhY2UKK28KKy5CIC0tbGlzdGVuLWFkZHJlc3MKK2VsIGNvbXBvcnRhbWllbnRvIG5vIHNlIG1vZGlmaWNhIHBvciBsYSBwYXJ0ZSBkZSBpbnRlcmZhY2UuIFNpIGN1YWxxdWllcmEKK2RlIGVzdGFzIG9wY2lvbmVzIGVzdOEgcHJlc2VudGUsIGxhcyBpbnRlcmZhY2VzIG1lbmNpb25hZGFzIGVuIGRoY3AtcmFuZ2VzCitzb24gYWdyZWdhZGFzIGFsbCBqdWVnbyBxdWUgb2J0aWVuZW4gc2VydmljaW8gRE5TLgorCitTaW1pbGFybWVudGUsCisuQiBlbmFibGUtdGZ0cAorcHVlZGUgdG9tYXIgdW4gbm9tYnJlIGRlIGludGVyZmFjZSwgZWwgY3VhbCBoYWJpbGl0YSBURlRQIHNvbG8gcGFyYSB1bmEKK2ludGVyZmFjZSBlbiBwYXJ0aWN1bGFyLCBpZ25vcmFuZG8gb3BjaW9uZXMKKy5CIC0taW50ZXJmYWNlCitvCisuQiAtLWxpc3Rlbi1hZGRyZXNzLgorQWRpY2lvbmFsbWVudGUsIAorLkIgLS10ZnRwLXNlY3VyZQoreQorLkIgLS10ZnRwLXVuaXF1ZS1yb290Cit5CisuQiAtLXRmdHAtbm8tYmxvY2tzaXplCitzb24gaWdub3JhZG9zIHBvciBwZWRpZG9zIGRlc2RlIGRpY2hhcyBpbnRlcmZhY2VzLiAoVW5hIGRpcmVjdGl2YQorLkIgLS10ZnRwLXJvb3QKK2JyaW5kYW5kbyB1biBwYXRoIHJh7XogeSB1bmEgaW50ZXJmYWNlIGRlYmUgc2VyIGJyaW5kYWRhIHRhbWJpZW4uKQorCitFc3RhcyByZWdsYXMgcHVlZGVuIHBhcmVjZXIgcmFyYXMgYSBwcmltZXJhIHZpc3RhLCBwZXJvIHBlcm1pdGVuIHF1ZQordW5hIHNpbXBsZSBsaW5lYSBkZSBsYSBmb3JtYQorImRoY3AtcmFuZ2U9aW50ZXJmYWNlOnZpcnQwLDE5Mi4xNjguMC40LDE5Mi4xNjguMC4yMDAiIHNlYSBhZ3JlZ2FkYSBhCitjb25maWd1cmFjafNuIGRuc21hc3EsIGxvIGN1YWwgYnJpbmRhIHNlcnZpY2lvcyBESENQIHkgRE5TIGEgZXNhIGludGVyZmFjZSwKK3NpbiBhZmVjdGFyIGxvcyBzZXJ2aWNpb3MgZW4gb3RyYXMgaW50ZXJmYWNlcyB5IGlycmVzcGVjdGl2YW1lbnRlIGRlCitsYSBleGlzdGVuY2lhIG8gbm8gZGUgbGluZWFzICJpbnRlcmZhY2U9PGludGVyZmFjZT4iIGVuIGFsZ3VuYSBvdHJhIHBhcnRlCitkZSBsYSBjb25maWd1cmFjafNuIGRuc21hc3EuCisiZW5hYmxlLXRmdHA9dmlydDAiIHkgInRmdHAtcm9vdD08cm9vdD4sdmlydDAiIGhhY2VuIGVsIG1pc21vIHRyYWJham8KK3BhcmEgVEZUUC4KK0xhIGlkZWEgZXMgcXVlIHVuYSBsaW5lYSBhc+0gcHVlZGEgc2VyIGFncmVnYWRhIGF1dG9tYXRpY2FtZW50ZQorcG9yIGxpYnZpcnQgbyBzaXN0ZW1hcyBlcXVpdmFsZW50ZXMsIHNpbiBlc3RvcmJhciBhbGd1bmEKK2NvbmZpZ3VyYWNp824gbWFudWFsLgorCisuU0ggQ9NESUdPUyBFWElUCisuUFAKKzAgLSBEbnNtYXNxIGhpem8gZm9yayBoYWNpYSBlbCBmb25kbyBleGl0b3NhbWVudGUsIG8gdGVybWlu8yBkZSBtYW5lcmEKK25vcm1hbCBzaSBpciBhbCBmb25kbyBubyBlc3ThIGhhYmlsaXRhZG8uCisuUFAKKzEgLSBVbiBwcm9ibGVtYSBjb24gbGEgY29uZmlndXJhY2nzbiBoYSBzaWRvIGRldGVjdGFkby4KKy5QUAorMiAtIFVuIHByb2JsZW1hIGNvbiBhY2Nlc28gYSByZWRlcyBvY3VycmnzIChkaXJlY2Np824gZW4gdXNvLCBpbnRlbnRvCitkZSB1c2FyIHB1ZXJ0b3MgcHJpdmlsZWdpYWRvcyBzaW4gcGVybWlzbykuCisuUFAKKzMgLSBVbiBwcm9ibGVtYSBjb24gdW5hIG9wZXJhY2nzbiBkZSBzaXN0ZW1hIGRlIGFyY2hpdm9zIG9jdXJyafMgKGFyY2hpdm8KK28gZGlyZWN0b3JpbyBhdXNlbnRlLCBwZXJtaXNvcykuCisuUFAKKzQgLSBGYWxsYSBkZSBhbG9jYWNp824gZGUgbWVtb3JpYS4KKy5QUAorNSAtIE90cm8gcHJvYmxlbWEgbWlzY2Vs4W5lby4KKy5QUAorMTEgbyBtYXlvciAtIHVuIGNvZGlnbyBkZSByZXRvcm5vIG5vIGNlcm8gZnXpIHJlY2liaWRvIGRlbCBsbGFtYWRvICJpbml0IgorZGVsIHByb2Nlc28gZGUgYXJjaGl2byBndWnzbiBkZSBhcnJpZW5kb3MuIEVsIGPzZGlnbyBleGl0IGRlIGRuc21hc3EgZXMKK2VsIGPzZGlnbyBleGl0IGRlbCBhcmNoaXZvIGd1afNuIGNvbiAxMCBzdW1hZG8uCisKKy5TSCBMSU1JVEVTCitMb3MgdmFsb3JlcyBwcmVkZXRlcm1pbmFkb3MgcGFyYSBsaW1pdGVzIGRlIHJlY3Vyc29zIHNvbiBnZW5lcuFsbWVudGUKK2NvbnNlcnZhZG9yZXMsIHkgYXByb3BpYWRvcyBwYXJhIHVzbyBlbiBkaXNwb3NpdGl2b3MgdGlwbyBlbnJ1dGFkb3IKK2VuY3J1c3RyYWRvIGNvbiBwcm9jZXNhZG9yZXMgbGVudG9zIHkgcG9jYSBtZW1vcmlhLiBFbiBoYXJkd2FyZSBt4XMKK2NhcOF6LCBlcyBwb3NpYmxlIGluY3JlbWVudGFyIGxvcyBs7W1pdGVzLCB5IHNvcG9ydGFyIG11Y2hvcyBtYXMKK2NsaWVudGVzLiBMbyBzaWd1aWVudGUgc2UgYXBsaWNhIGEgZG5zbWFzcS0yLjM3OiB2ZXJzaW9uZXMgcHJldmlhcworbm8gZXNjYWxhYmFuIHRhbiBiaWVuLgorCisuUFAKK0Ruc21hc3EgZXMgY2FwYXogZGUgc29wb3J0YXIgY29uIEROUyB5IERIQ1AgYSBwb3IgbG8gbWVub3MgbWlsICgxLDAwMCkKK2NsaWVudGVzLiBMb3MgdGllbXBvcyBkZSBhcnJpZW5kbyBubyBkZWJlbiBzZXIgbXV5IGNvcnRvcyAobWVub3MKK2RlIHVuYSBob3JhKS4gRWwgdmFsb3IgZGUKKy5CIC0tZG5zLWZvcndhcmQtbWF4CitwdWVkZSBzZXIgYXVtZW50YWRvOiBjb21pZW56ZSBjb24gZWwgZXF1aXZhbGVudGUgYSBlbCBu+m1lcm8gZGUgY2xpZW50ZXMgeQorYXVt6W50ZWxvIHNpIHBhcmVjZSBsZW50byBlbCBETlMuIE7zdGVzZSBxdWUgZWwgcmVuZGltaWVudG8gRE5TIGRlcGVuZGUKK3RhbWJp6W4gZGUgbG9zIHNlcnZpZG9yZXMgRE5TIHVwc3RyZWFtLiBFbCB0YW1h8W8gZGVsIGNhY2jpIEROUyBwdWVkZSBzZXIKK2luY3JlbWVudGFkbzogZWwgbO1taXRlIG9ibGlnYXRvcmlvIGVzIDEwLDAwMCBub21icmVzIHkgZWwgcHJlZGV0ZXJtaW5hZG8KKygxNTApIGVzIG11eSBiYWpvLiBFbCBlbnZpYXJsZSB1biBTSUdVU1IxIGEgZG5zbWFzcSBoYWNlIHF1ZSBiaXRhY29y6WUKK2luZm9ybWFjafNuIHF1ZSBlcyD6dGlsIHBhcmEgYWZpbmFyIGVsIHRhbWHxbyBkZSBjYWNo6S4gVmVyIGxhIHNlY2Np824KKy5CIE5PVEFTCitwYXJhIGRldGFsbGVzLgorCisuUFAKK0VsIHNlcnZpZG9yIFRGVFAgaW5jb3Jwb3JhZG8gZXMgY2Fw4XogZGUgc29wb3J0YXIgdmFyaWFzIHRyYW5zZmVyZW5jaWFzCitzaW11bHThbmVhcyBkZSBhcmNoaXZvczogZWwgbO1taXRlIGFic29sdXRvIGVzdOEgcmVsYWNpb25hZG8gY29uIGVsIG76bWVybworZGUgZmlsZS1oYW5kbGVzIHBlcm1pdGlkb3MgYSB1biBwcm9jZXNvIHkgbGEgaGFiaWxpZGFkIGRlbCBzeXN0ZW0gY2FsbAorc2VsZWN0KCkgYSBzb3BvcnRhciBu+m1lcm9zIGdyYW5kZXMgZGUgZmlsZS1oYW5kbGVzLiBTaSBlbCBs7W1pdGUgZXMgZmlqYWRvCitkZW1hc2lhZG8gYWx0byBjb24KKy5CIC0tdGZ0cC1tYXgKK3NlcuEgZGUtZXNjYWxhZG8geSBlbCBs7W1pdGUgcmVhbCBzZXLhIGJpdGFjb3JlYWRvIGFsIGluaWNpby4gTvN0ZXNlIHF1ZSBt4XMKK3RyYW5zZmVyZW5jaWFzIHNvbiBwb3NpYmxlcyBjdWFuZG8gZWwgbWlzbW8gYXJjaGl2byBlcyBlbnZpYWRvIHF16SBjdWFuZG8KK2NhZGEgdHJhbnNmZXJlbmNpYSBlbnbtYSB1biBhcmNoaXZvIGRpZmVyZW50ZS4KKworLlBQCitFcyBwb3NpYmxlIHVzYXIgZG5zbWFzcSBwYXJhIG5lZ2FyIHB1YmxpY2lkYWQgV2ViIHVzYW5kbyB1bmEgbGlzdGEgZGUKK3NlcnZpZG9yZXMgZGUgYmFubmVycyBiaWVuIGNvbm9jaWRvcywgdG9kb3MgcmVzb2x2aWVuZG9zZSBhIDEyNy4wLjAuMSBvCiswLjAuMC4wIGVuCisuQiAvZXRjL2hvc3RzIAorbyBlbiB1biBhcmNoaXZvIGhvc3RzIGFkaWNpb25hbC4gTGEgbGlzdGEgcHVlZGUgc2VyIG11eSBsYXJnYS4gRG5zbWFzcSBoYSBzaWRvCitwcm9iYWRvIGV4aXTzc2FtZW50ZSBjb24gdW4gbWlsbPNuIGRlIG5vbWJyZXMuIEVzZSB0YW1h8W8gZGUgYXJjaGl2byBuZWNlc2l0YQordW4gQ1BVIGRlIDFHSHogeSBhcHJveGltYWRhbWVudGUgNjBNQiBkZSBSQU0uCisKKy5TSCBJTlRFUk5BQ0lPTkFMSVpBQ0lPTgorCitEbnNtYXNxIHB1ZWRlIHNlciBjb21waWxhZG8gY29uIHNvcG9ydGUgcGFyYSBpbnRlcm5hY2lvbmFsaXphY2nzbi4gUGFyYSBoYWNlciBlc3RvLAorbG9zIHRhcmdldHMgbWFrZSAiYWxsLWkxOG4iIHkgImluc3RhbGwtaTE4biIgZGViZXLhbiBzZXIgdXNhZG9zIGVuIHZleiBkZQorbG9zIHRhcmdldHMgZXN04W5kYXJlcyAiYWxsIiB5ICJpbnN0YWxsIi4gQ3VhbmRvIGludGVybmFjaW9uYWxpemFjafNuIGVzCitjb21waWxhZGEsIGRuc21hc3EgcHJvZHVjaXLhIG1lbnNhamVzIGRlIGJpdOFjb3JhIGVuIGVsIGxlbmd1YWplIGxvY2FsIHkgc29wb3J0YXLhCitkb21pbmlvcyBpbnRlcm5hY2lvbmFsaXphZG9zIChJRE4pLiBOb21icmVzIGRlIGRvbWluaW8gZW4gL2V0Yy9ob3N0cywgL2V0Yy9ldGhlcnMsCit5IC9ldGMvZG5zbWFzcS5jb25mIHF1ZSBjb250aWVuZW4gY2Fy4WN0ZXJlcyBuby1BU0NJSSBzZXLhbiB0cmFkdWNpZG9zIGEKK3JlcHJlc2VudGFjafNuIGludGVybmEgRE5TIHB1bnljb2RlLiBO83Rlc2UgcXVlIGRuc21hc3EgZGV0ZXJtaW5hIGFtYm9zIGVsCitsZW5ndWFqZSBwYXJhIG1lbnNhamVzIHkgZWwganVlZ28gZGUgY2Fy4WN0ZXJlcyBhc3VtaWRvIHBhcmEgYXJjaGl2b3MgZGUgY29uZmlndXJhY2nzbgorZGUgbGEgdmFyaWFibGUgYW1iaWVudGFsIExBTkcuIEVzdG8gZGViZSBlc3RhciBmaWphZG8gYWwgdmFsb3IgcHJlZGV0ZXJtaW5hZG8gZGVsIHNpc3RlbWEKK3BvciBlbCBndWnzbiByZXNwb25zYWJsZSBkZSBpbmljaWFyIGRuc21hc3EuIEFsIGVkaXRhciBhcmNoaXZvcyBkZSBjb25maWd1cmFjafNuLAordGVuZXIgY3VpZGFkbyBkZSBoYWNlcmxvIHVzYW5kbyBzb2xvIGVsIGxvY2FsZSBwcmVkZXRlcm1pbmFkbyBkZWwgc2lzdGVtYSB5IG5vCit1bm8gZXNwZWNpZmljbyBkZWwgdXN1YXJpbywgZGFkbyBhIHF1ZSBkbnNtYXNxIG5vIHRpZW5lIG5pbmd1bmEgbWFuZXJhIGRpcmVjdGEgZGUKK2RldGVybWluYXIgZWwganVlZ28gZGUgY2FyYWN0ZXJlcyBlbiB1c28sIHkgZGViZSBhc3VtaXIgcXVlIGVzIGVsIHByZWRldGVybWluYWRvCitkZWwgc2lzdGVtYS4KKworLlNIIEFSQ0hJVk9TCisuSVIgL2V0Yy9kbnNtYXNxLmNvbmYgCisKKy5JUiAvdXNyL2xvY2FsL2V0Yy9kbnNtYXNxLmNvbmYKKworLklSIC9ldGMvcmVzb2x2LmNvbmYKKworLklSIC9ldGMvaG9zdHMKKworLklSIC9ldGMvZXRoZXJzCisKKy5JUiAvdmFyL2xpYi9taXNjL2Ruc21hc3EubGVhc2VzIAorCisuSVIgL3Zhci9kYi9kbnNtYXNxLmxlYXNlcworCisuSVIgL3Zhci9ydW4vZG5zbWFzcS5waWQKKy5TSCBWRVIgVEFNQklFTgorLkJSIGhvc3RzICg1KSwgCisuQlIgcmVzb2x2ZXIgKDUpCisuU0ggQVVUT1IKK0VzdGUgbWFudWFsIGZ1ZSBlc2NyaXRvIHBvciBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPi4KKworVHJhZHVjaWRvIGEgZXNwYfFvbCBwb3IgQ2hyaXN0b3BoZXIgQ2hhdGhhbSA8Y2hyaXNsaW51eEBnbWFpbC5jb20+LgpkaWZmIC0tZ2l0IGEvbWFuL2ZyL2Ruc21hc3EuOCBiL21hbi9mci9kbnNtYXNxLjgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODBjZWYzOQotLS0gL2Rldi9udWxsCisrKyBiL21hbi9mci9kbnNtYXNxLjgKQEAgLTAsMCArMSwyMzYwIEBACisuVEggRE5TTUFTUSA4CisuU0ggTkFNRQorRG5zbWFzcSBcLSBVbiBzZXJ2ZXVyIERIQ1AgZXQgY2FjaGUgRE5TIHBvaWRzLXBsdW1lLgorLlNIIFNZTk9QU0lTCisuQiBkbnNtYXNxCisuSSBbT1BUSU9OXS4uLgorLlNIICJERVNDUklQVElPTiIKKy5CUiBkbnNtYXNxCitlc3QgdW4gc2VydmV1ciDDoCBmYWlibGUgZW1wcmVpbnRlIG3DqW1vaXJlIGZhaXNhbnQgRE5TLCBURlRQLCBQWEUsIGFubm9uY2VzIGRlCityb3V0ZXVycyBldCBESENQLiBJbCBvZmZyZSDDoCBsYSBmb2lzIGxlcyBzZXJ2aWNlcyBETlMgZXQgREhDUCBwb3VyIHVuIHLDqXNlYXUKK2xvY2FsIChMQU4pLgorLlBQCitEbnNtYXNxIGFjY2VwdGUgbGVzIHJlcXXDqnRlcyBETlMgZXQgeSByw6lwb25kcyBzb2l0IGVuIHV0aWxpc2FudCB1biBwZXRpdCBjYWNoZQorbG9jYWwsIHNvaXQgZW4gZWZmZWN0dWFudCB1bmUgcmVxdcOqdGUgw6AgdW4gc2VydmV1ciBETlMgcsOpY3Vyc2lmIGV4dGVybmUgKHBhcgorZXhlbXBsZSBjZWx1aSBkZSB2b3RyZSBmb3Vybmlzc2V1ciBkJ2FjY8OocyBpbnRlcm5ldCkuIElsIGNoYXJnZSBsZSBjb250ZW51IGR1CitmaWNoaWVyIC9ldGMvaG9zdHMgYWZpbiBxdWUgbGVzIG5vbXMgbG9jYXV4IG4nYXBwYXJhaXNzYW50IHBhcyBkYW5zIGxlcyBETlMKK2dsb2JhdXggc29pZW50IHRvdXQgZGUgbcOqbWUgcsOpc29sdXMsIGV0IGFzc3VyZSDDqWdhbGVtZW50IGxhIHLDqXNvbHV0aW9uIGRlIG5vbQorcG91ciBsZXMgaMO0dGVzIHByw6lzZW50cyBkYW5zIGxlIHNlcnZpY2UgREhDUC4gSWwgcGV1dCBhdXNzaSBhZ2lyIGVuIHRlbXBzIHF1ZQorc2VydmV1ciBETlMgZmFpc2FudCBhdXRvcml0w6kgcG91ciB1biBvdSBwbHVzaWV1cnMgZG9tYWluZXMsIHBlcm1ldHRhbnQgw6AgZGVzCitub21zIGxvY2F1eCBkJ2FwcGFyYWl0cmUgZGFucyBsZSBETlMgZ2xvYmFsLgorLlBQCitMZSBzZXJ2ZXVyIERIQ1AgRG5zbWFzcSBESENQIHN1cHBvcnRlIGxlcyBkw6lmaW5pdGlvbnMgZCdhZHJlc3NlcyBzdGF0aXF1ZXMgZXQgbGVzCityw6lzZWF1eCBtdWx0aXBsZXMuIElsIGZvdXJuaXQgcGFyIGTDqWZhdXQgdW4gamV1IHJhaXNvbm5hYmxlIGRlIHBhcmFtw6h0cmVzIERIQ1AsCitldCBwZXV0IMOqdHJlIGNvbmZpZ3Vyw6kgcG91ciBmb3VybmlyIG4naW1wb3J0ZSBxdWVsbGUgb3B0aW9uIERIQ1AuCitJbCBpbmNsdXQgdW4gc2VydmV1ciBURlRQIHPDqWN1cmlzw6kgZW4gbGVjdHVyZSBzZXVsZSBwZXJtZXR0YW50IGxlIGTDqW1hcnJhZ2UgdmlhCitsZSByw6lzZWF1L1BYRSBkZSBjbGllbnRzIERIQ1AgZXQgc3VwcG9ydGUgw6lnYWxlbWVudCBsZSBwcm90b2NvbGUgQk9PVFAuIExlCitzdXBwb3J0IFBYRSBlc3QgY29tcGxldCwgZXQgY29tcHJlbmQgdW4gbW9kZSBwcm94eSBwZXJtZXR0YW50IGRlIGZvdXJuaXIgZGVzCitpbmZvcm1hdGlvbnMgUFhFIGF1eCBjbGllbnRzIGFsb3JzIHF1ZSBsJ2FsbG9jYXRpb24gREhDUCBlc3QgZWZmZWN0dcOpZSBwYXIgdW4KK2F1dHJlIHNlcnZldXIuCisuUFAKK0xlIHNlcnZldXIgREhDUHY2IGRlIGRuc21hc3EgcG9zc8OoZGUgbm9uIHNldWxlbWVudCBsZXMgbcOqbWVzIGZvbmN0aW9uYWxpdMOpcworcXVlIGxlIHNlcnZldXIgREhDUHY0LCBtYWlzIGF1c3NpIGxlIHN1cHBvcnQgZGVzIGFubm9uY2VzIGRlIHJvdXRldXJzIGFpbnNpCitxdSd1bmUgZm9uY3Rpb25hbGl0w6kgcGVybWV0dGFudCBsJ2FkZGl0aW9uIGRlIHJlc3NvdXJjZXMgQUFBQSBwb3VyIGRlcworY2xpZW50cyB1dGlsaXNhbnQgREhDUHY0IGV0IGxhIGNvbmZpZ3VyYXRpb24gSVB2NiBzYW5zIMOpdGF0IChzdGF0ZWxlc3MKK2F1dG9jb25maWd1cmF0aW9uKS4KK0lsIGluY2x1dCBsZSBzdXBwb3J0IGQnYWxsb2NhdGlvbnMgZCdhZHJlc3NlcyAow6AgbGEgZm9pcyBlbiBESENQdjYgZXQgZW4KK2Fubm9uY2VzIGRlIHJvdXRldXJzIC0gUkEpIHBvdXIgZGVzIHNvdXMtcsOpc2VhdXggZHluYW1pcXVlbWVudCBkw6lsw6lndcOpcyB2aWEKK3VuZSBkw6lsw6lnYXRpb24gZGUgcHLDqWZpeGUgREhDUHY2LgorLlBQCitEbnNtYXNxIGVzdCBkZXZlbG9wcMOpIHBvdXIgZGUgcGV0aXRzIHN5c3TDqG1lcyBlbWJhcnF1w6lzLiBJdCB0ZW5kcyDDoCBhdm9pcgorbCdlbXByZWludGUgbcOpbW9pcmUgbGEgcGx1cyBmYWlibGUgcG9zc2libGUgcG91ciBsZXMgZm9uY3Rpb25zIHN1cHBvcnTDqWVzLAorZXQgcGVybWV0IGQnZXhjbHVyZSBsZXMgZm9uY3Rpb25zIGludXRpbGVzIGR1IGJpbmFpcmUgY29tcGlsw6kuCisuU0ggT1BUSU9OUworTm90ZXMgOiBJbCBlc3QgcG9zc2libGUgZCd1dGlsaXNlciBkZXMgb3B0aW9ucyBzYW5zIGxldXIgZG9ubmVyIGRlIHBhcmFtw6h0cmUuCitEYW5zIGNlIGNhcywgbGEgZm9uY3Rpb24gY29ycmVzcG9uZGFudGUgc2VyYSBkw6lzYWN0aXbDqWUuIFBhciBleGVtcGxlCisuQiAtLXBpZC1maWxlPQorKHNhbnMgcGFyYW3DqHRyZSBhcHLDqHMgbGUgPSkgZMOpc2FjdGl2ZSBsJ8OpY3JpdHVyZSBkdSBmaWNoaWVyIFBJRC4KK1N1ciBCU0QsIMOgIG1vaW5zIHF1ZSBsZSBsb2dpY2llbCBuZSBzb2l0IGNvbXBpbMOpIGF2ZWMgbGEgYmlibGlvdGjDqHF1ZSBHTlUKK2dldG9wdCwgbGEgZm9ybWUgbG9uZ3VlIGRlcyBvcHRpb25zIG5lIGZvbmN0aW9ubmUgcGFzIGVuIGxpZ25lIGRlIGNvbW1hbmRlOyBFbGxlCitlc3QgdG91am91cnMgc3VwcG9ydMOpZSBkYW5zIGxlIGZpY2hpZXIgZGUgY29uZmlndXJhdGlvbi4KKy5UUAorLkIgLS10ZXN0CitWw6lyaWZpZSBsYSBzeW50YXhlIGR1IG91IGRlcyBmaWNoaWVycyBkZSBjb25maWd1cmF0aW9ucy4gU2UgdGVybWluZSBhdmVjIGxlCitjb2RlIGRlIHJldG91ciAwIHNpIHRvdXQgZXN0IE9LLCBvdSB1biBjb2RlIGRpZmbDqXJlbnQgZGUgMCBkYW5zIGxlIGNhcworY29udHJhaXJlLiBOZSBkw6ltYXJyZSBwYXMgRG5zbWFzcS4KKy5UUAorLkIgXC1oLCAtLW5vLWhvc3RzCitOZSBwYXMgY2hhcmdlciBsZXMgbm9tcyBkdSBmaWNoaWVyIC9ldGMvaG9zdHMuCisuVFAKKy5CIFwtSCwgLS1hZGRuLWhvc3RzPTxmaWNoaWVyPgorRmljaGllcnMgZCdow7R0ZXMgYWRkaXRpb25uZWxzLiBMaXJlIGxlIGZpY2hpZXIgc3DDqWNpZmnDqSBlbiBwbHVzIGRlIC9ldGMvaG9zdHMuCitTaSAKKy5CIC1oCitlc3Qgc3DDqWNpZmnDqSwgbGlyZSB1bmlxdWVtZW50IGxlIGZpY2hpZXIgc3DDqWNpZmnDqS4gQ2V0dGUgb3B0aW9uIHBldXQgw6p0cmUKK3LDqXDDqXTDqWUgYWZpbiBkJ2Fqb3V0ZXIgZCdhdXRyZXMgZmljaGllcnMuIFNpIHVuIHLDqXBlcnRvaXJlIGVzdCBkb25uw6ksIGxpcyBsZXMKK2ZpY2hpZXJzIGNvbnRlbnVzIGRhbnMgY2UgcsOpcGVydG9pcmUuCisuVFAKKy5CIFwtRSwgLS1leHBhbmQtaG9zdHMKK0Fqb3V0ZSBsZSBub20gZGUgZG9tYWluZSBhdXggbm9tcyBzaW1wbGVzIChuZSBjb250ZW5hbnQgcGFzIGRlIHBvaW50IGRhbnMgbGUKK25vbSkgY29udGVudXMgZGFucyBsZSBmaWNoaWVyIC9ldGMvaG9zdHMsIGRlIGxhIG3Dqm1lIGZhw6dvbiBxdWUgcG91ciBsZSBzZXJ2aWNlCitESENQLiBOb3RleiBxdWUgY2VsYSBuZSBzJ2FwcGxpcXVlIHBhcyBhdSBub20gZGUgZG9tYWluZSBkYW5zIGxlcyBDTkFNRSwgbGVzCitlbnJlZ2lzdHJlbWVudHMgUFRSLCBUWFQsIGV0Yy4uLgorLlRQCisuQiBcLVQsIC0tbG9jYWwtdHRsPTxkdXLDqWU+CitMb3JzcXVlIERuc21hc3EgcsOpcG9uZCBhdmVjIHVuZSBpbmZvcm1hdGlvbiBwcm92ZW5hbnQgZHUgZmljaGllciAvZXRjL2hvc3RzIG91CithdmVjIHVuIGJhaWwgREhDUCwgaWwgZG9ubmUgdW4gdGVtcHMgZGUgdmllICh0aW1lLXRvLWxpdmUpIHBvc2l0aW9ubsOpIMOgIHrDqXJvLAorYWZpbiBkJ2luZGlxdWVyIMOgIGxhIG1hY2hpbmUgZmFpc2FudCBsYSByZXF1w6p0ZSBxdWUgY2VsbGUtY2kgIG5lIGRvaXQgcGFzIMOqdHJlCittaXNlIGRhbnMgdW4gY2FjaGUuIENlY2kgZXN0IGxlIGNvbXBvcnRlbWVudCBjb3JyZWN0IGRhbnMgcHJlc3F1ZSB0b3V0ZXMgbGVzCitzaXR1YXRpb25zLgorQ2V0dGUgb3B0aW9uIHBlcm1ldCBkZSBzcMOpY2lmaWVyIGxhIHZhbGV1ciBkZSB0aW1lLXRvLWxpdmUgw6AgcmV0b3VybmVyIChlbgorc2Vjb25kZXMpLiBDZWxhIHBlcm1ldCBkZSByw6lkdWlyZSBsYSBjaGFyZ2Ugc3VyIGxlIHNlcnZldXIsIG1haXMgbGVzIGNsaWVudHMKK3Jpc3F1ZW50IGQndXRpbGlzZXIgZGVzIGRvbm7DqWVzIHDDqXJpbcOpZXMgZGFucyBjZXJ0YWlucyBjYXMuCisuVFAKKy5CIC0tbmVnLXR0bD08ZHVyw6llPgorTGVzIHLDqXBvbnNlcyBuw6lnYXRpdmVzIHByb3ZlbmFudCBkZXMgc2VydmV1cnMgYW1vbnRzIGNvbnRpZW5uZW50IG5vcm1hbGVtZW50Cit1bmUgaW5mb3JtYXRpb24gZGUgZHVyw6llIGRlIHZpZSAodGltZS10by1saXZlKSBkYW5zIGxlcyBlbnJlZ2lzdHJlbWVudHMgU09BLAoraW5mb3JtYXRpb24gZG9udCBkbnNtYXNxIHNlIHNlcnQgcG91ciBtZXR0cmUgbGEgcsOpcG9uc2UgZW4gY2FjaGUuIFNpIGxhIHLDqXBvbnNlCitkdSBzZXJ2ZXVyIGFtb250IG9tZXQgY2V0dGUgaW5mb3JtYXRpb24sIGRuc21hc3EgbmUgY2FjaGUgcGFzIGxhIHLDqXBvbnNlLiBDZXR0ZQorb3B0aW9uIHBlcm1ldCBkZSBkb25lciB1bmUgdmFsZXVyIGRlIGR1csOpZSBkZSB2aWUgcGFyIGTDqWZhdXQgKGVuIHNlY29uZGVzKSBxdWUKK2Ruc21hc3EgdXRpbGlzZSBwb3VyIG1ldHRyZSBsZXMgcsOpcG9uc2VzIG7DqWdhdGl2ZXMgZGFucyBzb24gY2FjaGUsIG3Dqm1lIGVuCitsJ2Fic2VuY2UgZCdlbnJlZ2lzdHJlbWVudCBTT0EuCisuVFAKKy5CIC0tbWF4LXR0bD08ZHVyw6llPgorRMOpZmluaWUgbGEgdmFsZXVyIGRlIFRUTCBtYXhpbXVtIHF1aSBzZXJhIGZvdXJuaWUgYXV4IGNsaWVudHMuIExhIHZhbGV1ciBtYXhpbXVtCitkZSBUVEwgc3DDqWNpZmnDqWUgc2VyYSBmb3VybmllIGF1eCBjbGllbnRzIGVuIHJlbXBsYWNlbWVudCBkZSBsYSB2cmFpZSB2YWxldXIgZGUKK1RUTCBzaSBjZXR0ZSBkZXJuacOocmUgZXN0IHN1cMOpcmlldXJlLiBMYSB2YWxldXIgcsOpZWxsZSBkZSBUVEwgZXN0IGNlcGVuZGFudAorY29uc2VydsOpZSBkYW5zIGxlIGNhY2hlIGFmaW4gZCfDqXZpdGVyIGRlIHNhdHVyZXIgbGVzIHNlcnZldXJzIEROUyBlbiBhbW9udC4KKy5UUAorLkIgLS1tYXgtY2FjaGUtdHRsPTxkdXLDqWU+CitEw6lmaW5pZSBsYSB2YWxldXIgZGUgVFRMIG1heGltdW0gcG91ciBsZXMgZW50csOpZXMgZGFucyBsZSBjYWNoZQorLlRQCisuQiAtLWF1dGgtdHRsPTxkdXLDqWU+CitEw6lmaW5pZSBsYSB2YWxldXIgZGUgVFRMIHJldG91cm7DqWUgcG91ciBsZXMgcsOpcG9uc2VzIGR1IHNlcnZldXIgZmFpc2FudAorYXV0b3JpdMOpLgorLlRQCisuQiBcLWssIC0ta2VlcC1pbi1mb3JlZ3JvdW5kCitOZSBwYXMgYWxsZXIgZW4gdMOiY2hlIGRlIGZvbmQgYXUgbGFuY2VtZW50LCBtYWlzIGVuIGRlaG9ycyBkZSBjZWxhLCBmb25jdGlvbm5lcgorbm9ybWFsZW1lbnQuIENlIG1vZGUgZXN0IHByw6l2dSBwb3VyIGxlcyBjYXMgb8O5IERuc21hc3EgZXN0IGxhbmPDqSBwYXIgZGFlbW9udG9vbHMKK291IGxhdW5jaGQuCisuVFAKKy5CIFwtZCwgLS1uby1kYWVtb24KK01vZGUgZGVidWcgKGTDqXZlcm1pbmFnZSkgOiBuZSBwYXMgYWxsZXIgZW4gdMOiY2hlIGRlIGZvbmQsIG5lIHBhcyDDqWNyaXJlIGRlCitmaWNoaWVyIHBpZCwgbmUgcGFzIGNoYW5nZXIgZCdpZGVudGlmaWFudCB1dGlsaXNhdGV1ciwgZ8OpbsOpcmVyIHVuIMOpdGF0IGNvbXBsZXQKK2R1IGNhY2hlIGxvcnMgZGUgbGEgcsOpY2VwdGlvbiBkJ3VuIHNpZ25hbCBTSUdVU1IxLCBlbnZveWVyIGxlcyBsb2dzIHN1ciBsYQorc29ydGllIHN0YW5kYXJkIGQnZXJyZXVyICgic3RkZXJyIikgZGUgbcOqbWUgcXVlIGRhbnMgbGUgc3lzbG9nLCBuZSBwYXMgY3LDqWVyIGRlCitwcm9jZXNzdXMgZmlscyBwb3VyIHRyYWl0ZXIgbGVzIHJlcXXDqnRlcyBUQ1AuIEEgbm90ZXIgcXVlIGNldHRlIG9wdGlvbiBlc3Qgw6AKK3VzZXIgcG91ciBkdSBkw6l2ZXJtaW5hZ2Ugc2V1bGVtZW50IDogcG91ciBlbXDDqmNoZXIgZG5zbWFzcSBzZSBmb25jdGlvbm5lciBlbgorbW9kZSBkw6ltb24gZW4gcHJvZHVjdGlvbiwgdXRpbGlzZXIKKy5CIC1rLgorLlRQCisuQiBcLXEsIC0tbG9nLXF1ZXJpZXMKK0VucmVnaXN0cmVyIGxlcyByw6lzdWx0YXRzIGRlcyByZXF1w6p0ZXMgRE5TIHRyYWl0w6llcyBwYXIgRG5zbWFzcSBkYW5zIHVuIGZpY2hpZXIKK2RlIHRyYWNlcyAoImxvZ3MiKS4gQWN0aXZlIGxhIGfDqW7DqXJhdGlvbiBkJ3VuIMOpdGF0IGNvbXBsZXQgZHUgY2FjaGUgbG9ycyBkZSBsYQorcsOpY2VwdGlvbiBkJ3VuIHNpZ25hbCBTSUdVU1IxLgorLlRQCisuQiBcLTgsIC0tbG9nLWZhY2lsaXR5PTxmYWNpbGl0eT4KK0TDqWZpbml0IGxhICJmYWNpbGl0eSIgZGFucyBsYXF1ZWxsZSBEbnNtYXNxIGVudmVycmEgc2VzIGVudHLDqWVzIHN5c2xvZywgcGFyCitkw6lmYXV0IERBRU1PTiBvdSBMT0NBTDAgc2kgbGUgbW9kZSBkZWJ1ZyBlc3QgYWN0aXbDqS4gU2kgbGEgImZhY2lsaXR5IiBjb250aWVudAorYXUgbW9pbnMgdW4gY2FyYWN0w6hyZSAiLyIsIGFsb3JzIERuc21hc3EgY29uc2lkw6hyZSBxdSdpbCBzJ2FnaXQgZCd1biBmaWNoaWVyIGV0CitlbnZlcnJhIGxlcyBsb2dzIGRhbnMgbGUgZmljaGllciBjb3JyZXNwb25kYW50IMOgIGxhIHBsYWNlIGR1IHN5c2xvZy4gU2kgbGEKKyJmYWNpbGl0eSIgZXN0ICctJywgYWxvcnMgZG5zbWFzcSBlbnZvaWUgbGVzIGxvZ3Mgc3VyIGxhIHNvcnRpZSBkJ2VycmV1cgorc3RhbmRhcmQgc3RkZXJyLiAoTGVzIGVycmV1cnMgbG9ycyBkZSBsYSBsZWN0dXJlIGRlIGxhIGNvbmZpZ3VyYXRpb24gdm9udAordG91am91cnMgdmVycyBsZSBzeXNsb2csIG1haXMgdG91cyBsZXMgbWVzc2FnZXMgcG9zdMOpcmlldXJzIMOgIHVuIGTDqW1hcnJhZ2UKK3LDqXVzc2kgc2Vyb250IGV4Y2x1c2l2ZW1lbnQgZW52b3nDqXMgdmVycyBsZSBmaWNoaWVyIGRlIGxvZ3MpLgorTG9yc3F1ZSBEbnNtYXNxIGVzdCBjb25maWd1csOpIHBvdXIgZW52b3llcgorc2VzIHRyYWNlcyB2ZXJzIHVuIGZpY2hpZXIsIGxhIHLDqWNlcHRpb24gZCd1biBzaWduYWwgU0lHVVNSMiBlbnRyYWluZSBsYQorZmVybWV0dXJlIGV0IHLDqW91dmVydHVyZSBkdSBmaWNoaWVyLiBDZWxhIHBlcm1ldCBsYSByb3RhdGlvbiBkZSBmaWNoaWVycyBkZQordHJhY2VzIHNhbnMgbsOpY2Vzc2l0ZXIgbCdhcnLDqnQgZGUgRG5zbWFzcS4KKy5UUAorLkIgLS1sb2ctYXN5bmNbPTxsaWduZXM+XQorUGVybWV0IGwnZW52b2kgZGUgdHJhY2VzIGRlIG1hbmnDqHJlIGFzeW5jaHJvbmUsIGV0IGRlIG1hbmnDqHJlIG9wdGlvbm5lbGxlLCBsZQorbm9tYnJlIGRlIGxpZ25lcyBkZXZhbnQgw6p0cmUgbWlzZXMgZGFucyBsYSBmaWxlIGQnYXR0ZW50ZSBwYXIgRG5zbWFzcSBsb3JzcXVlCitsJ8OpY3JpdHVyZSB2ZXJzIGxlIHN5c2xvZyBlc3QgbGVudGUuCitEbnNtYXNxIHBldXQgZW52b3llciBzZXMgbG9ncyBkZSBtYW5pw6hyZSBhc3luY2hyb25lIDogY2VsYSBsdWkgcGVybWV0IGRlCitjb250aW51ZXIgw6AgZm9uY3Rpb25uZXIgc2FucyDDqnRyZSBibG9xdcOpIHBhciBsZSBzeXNsb2csIGV0IHBlcm1ldCDDoCBzeXNsb2cKK2QndXRpbGlzZXIgRG5zbWFzcSBwb3VyIGxlcyByw6lzb2x1dGlvbnMgRE5TIHNhbnMgcmlzcXVlIGQnaW50ZXJibG9jYWdlLgorU2kgbGEgZmlsZSBkJ2F0dGVudGUgZGV2aWVudCBwbGVpbmUsIERuc21hc3EgbG9nZ2VyYSBsZSBkw6lwYXNzZW1lbnQgZGUgZmlsZSBldAorbGUgbm9tYnJlIGRlIG1lc3NhZ2VzIHBlcmR1cy4gTGEgbG9uZ3VldXIgcGFyIGTDqWZhdXQgZGUgbGEgZmlsZSBkJ2F0dGVudGUgZXN0IGRlCis1IGV0IHVuZSB2YWxldXIgc2FpbmUgc2VyYSBjb21wcmlzZSBlbnRyZSA1IGV0IDI1LCBhdmVjIHVuZSBsaW1pdGUgbWF4aW11bQoraW1wb3PDqWUgZGUgMTAwLgorLlRQCisuQiBcLXgsIC0tcGlkLWZpbGU9PGNoZW1pbj4KK1Nww6ljaWZpZSB1biBmaWNoaWVyIGRhbnMgbGVxdWVsIHN0b2NrZXIgbGUgbnVtw6lybyBkZSBwcm9jZXNzdXMgKHBpZCkuIExhIHZhbGV1cgorcGFyIGTDqWZhdXQgZXN0IC92YXIvcnVuL2Ruc21hc3EucGlkLgorLlRQCisuQiBcLXUsIC0tdXNlcj08bm9tIGQndXRpbGlzYXRldXI+CitTcMOpY2lmaWUgbCdpZGVudGl0w6kgKG5vbSBkJ3V0aWxpc2F0ZXVyKSBwcmlzZSBwYXIgRG5zbWFzcSBhcHLDqHMgbGUgZMOpbWFycmFnZS4KK0Ruc21hc3EgZG9pdCBub3JtYWxlbWVudCDDqnRyZSBkw6ltYXJyw6kgZW4gdGVtcHMgcXVlIHJvb3QgKCJzdXBlci11dGlsaXNhdGV1ciIpLAorbWFpcyBhYmFuZG9ubmUgc2VzIHByaXZpbMOoZ2VzIGFwcsOocyBsZSBkw6ltYXJyYWdlIGVuIGNoYW5nZWFudCBkJ2lkZW50aXTDqS4KK05vcm1hbGVtZW50IGNldCB1dGlsaXNhdGV1ciBlc3QgbCd1dGlsaXNhdGV1ciBub2JvZHkgKCJwZXJzb25uZSIpLCBtYWlzIGlsIGVzdAorcG9zc2libGUgZCdlbiBkw6lmaW5pciB1biBhdXRyZSBwYXIgbGUgYmlhaXMgZGUgY2UgcGFyYW3DqHRyZS4KKy5UUAorLkIgXC1nLCAtLWdyb3VwPTxub20gZGUgZ3JvdXBlPiAKK1Nww6ljaWZpZSBsZSBncm91cGUgc291cyBsZXF1ZWwgRG5zbWFzcSBzJ2V4w6ljdXRlLiBQYXIgZMOpZmF1dCwgaWwgcydhZ2l0IGR1Citncm91cGUgImRpcCIsIGFmaW4gZGUgZmFjaWxpdGVyIGwnYWNjw6hzIGF1IGZpY2hpZXIgL2V0Yy9wcHAvcmVzb2x2LmNvbmYgcXVpCituJ2VzdCBlbiBnw6luw6lyYWwgcGFzIGVuIGxlY3R1cmUgcGFyIHRvdXQgbGUgbW9uZGUuCisuVFAKKy5CIFwtdiwgLS12ZXJzaW9uCitJbXByaW1lIGxlIG51bcOpcm8gZGUgdmVyc2lvbi4KKy5UUAorLkIgXC1wLCAtLXBvcnQ9PHBvcnQ+CitFY291dGUgc3VyIGxlIHBvcnQgbnVtw6lybyA8cG9ydD4gYXUgbGlldSBkdSBwb3J0IEROUyBzdGFuZGFyZCAoNTMpLiBQYXJhbcOpdHJlcgorY2V0dGUgdmFsZXVyIMOgIHrDqXJvIGTDqXNhY3RpdmUgY29tcGzDqHRlbWVudCBsYSBmb25jdGlvbiBETlMgcG91ciBuZSBsYWlzc2VyIGFjdGlmCitxdWUgbGUgREhDUCBvdSBsZSBURlRQLgorLlRQCisuQiBcLVAsIC0tZWRucy1wYWNrZXQtbWF4PTx0YWlsbGU+CitTcMOpY2lmaWUgbGEgdGFpbGxlIG1heGltdW0gZGUgcGFxdWV0IFVEUCBFRE5TLjAgc3VwcG9ydMOpIHBhciBsZSByZWxhaSBETlMuIExlCitkw6lmYXV0IGVzdCBkZSA0MDk2LCBxdWkgZXN0IGxhIHZhbGV1ciByZWNvbW1hbmTDqWUgZGFucyBsYSBSRkM1NjI1LgorLlRQCisuQiBcLVEsIC0tcXVlcnktcG9ydD08bnVtw6lybyBkZSBwb3J0PgorRW52b2llIGV0IMOpY291dGUgbGVzIHJlcXXDqnRlcyBETlMgc29ydGFudGVzIGRlcHVpcyBsZSBwb3J0IFVEUCBzcMOpY2lmacOpIHBhcgorPG51bcOpcm8gZGUgcG9ydD4sIGV0IG5vbiBzdXIgdW4gcG9ydCBhbMOpYXRvaXJlLiBOT1RFIDogQ2V0dGUgb3B0aW9uIHJlbmRzCitkbnNtYXNxIG1vaW5zIHPDu3IgY29udHJlIGxlcyBhdHRhcXVlcyBwYXIgdXN1cnBhdGlvbiBETlMgKCJETlMgc3Bvb2ZpbmciKSwgbWFpcworY2VsYSBwZXV0IHBlcm1ldHRyZSBkJ3V0aWxpc2VyIG1vaW5zIGRlIHJlc3NvdXJjZXMgZXQgZCfDqnRyZSBwbHVzIHJhcGlkZS4gRG9ubmVyCit1bmUgdmFsZXVyIGRlIHrDqXJvIMOgIGNldHRlIG9wdGlvbiByZXN0YXVyZSBsZSBjb21wb3J0ZW1lbnQgcGFyIGTDqWZhdXQgcHLDqXNlbnQgZGFucworbGVzIHZlcnNpb25zIGRlIGRuc21hc3EgaW5mw6lyaWV1cmVzIMOgIDIuNDMgcXVpIGNvbnNpc3RlIMOgIG4nYWxsb3VlciBxdSd1biBzZXVsIHBvcnQKK2FsbG91w6kgcGFyIGxlIHN5c3TDqG1lIGQnZXhwbG9pdGF0aW9uLgorLlRQCisuQiAtLW1pbi1wb3J0PTxwb3J0PgorTmUgcGFzIHV0aWxpc2VyIGRlIHBvcnQgZG9udCBsZSBudW3DqXJvIGVzdCBpbmbDqXJpZXVyIMOgIGxhIHZhbGV1ciBkb25uw6llIGVuIHBhcmFtw6h0cmUKK3BvdXIgbGVzIHJlcXXDqnRlcyBETlMgc29ydGFudGVzLiBEbnNtYXNxIGNob2lzaXMgdW4gcG9ydCBzb3VyY2UgYWzDqWF0b2lyZSBwb3VyIGxlcworcmVxdcOqdGVzIHNvcnRhbnRlcyA6IGxvcnNxdWUgY2V0dGUgb3B0aW9uIGVzdCBmb3VybmllLCBsZXMgcG9ydHMgdXRpbGlzw6lzIHNlcm9udCB0b3Vqb3VycworYXUgZGVzc3VzIGRlIGxhIHZhbGV1ciBzcMOpY2lmacOpZS4gVXRpbGUgcG91ciBkZXMgc3lzdMOobWVzIGRlcnJpw6hyZSBkZXMgZGlzcG9zaXRpZnMKK2dhcmRlLWJhcnJpw6hyZXMgKCJmaXJld2FsbHMiKS4KKy5UUAorLkIgXC1pLCAtLWludGVyZmFjZT08bm9tIGQnaW50ZXJmYWNlPgorTifDqWNvdXRlciBxdWUgc3VyIGwnaW50ZXJmYWNlIHLDqXNlYXUgc3DDqWNpZmnDqWUuIERuc21hc3EgYXVqb3V0ZSBhdXRvbWF0aXF1ZW1lbnQKK2wnaW50ZXJmYWNlIGxvY2FsZSAoImxvb3BiYWNrIikgw6AgbGEgbGlzdGUgZGVzIGludGVyZmFjZXMgbG9yc3F1ZSBsJ29wdGlvbgorLkIgLS1pbnRlcmZhY2UKK2VzdCB1dGlsaXPDqWUuCitTaSBhdWN1bmUgb3B0aW9uCisuQiAtLWludGVyZmFjZQorb3UKKy5CIC0tbGlzdGVuLWFkZHJlc3MKK24nZXN0IGRvbm7DqWUsIERuc21hc3Egw6ljb3V0ZXJhIHN1ciB0b3V0ZXMgbGVzIGludGVyZmFjZXMgZGlzcG9uaWJsZXMgc2F1ZgorY2VsbGUocykgc3DDqWNpZmnDqWUocykgcGFyIGwnb3B0aW9uCisuQiAtLWV4Y2VwdC1pbnRlcmZhY2UuCitMZXMgYWxpYXMgZCdpbnRlcmZhY2VzIElQIChlLWcgImV0aDE6MCIpIG5lIHBldXZlbnQgw6p0cmUgdXRpbGlzw6lzIG5pIGF2ZWMKKy5CIC0taW50ZXJmYWNlCituaQorLkIgXC0tZXhjZXB0LWludGVyZmFjZS4KK1V0aWxpc2VyIGwnb3B0aW9uIAorLkIgLS1saXN0ZW4tYWRkcmVzcworw6AgbGEgcGxhY2UuIFVuIHNpbXBsZSBqb2tlciwgY29uc2lzdGFudCBkJ3VuICcqJyBmaW5hbCwgcGV1dC3DqnRyZSB1dGlsaXPDqSBkYW5zCitsZXMgb3B0aW9ucworLkIgXC0taW50ZXJmYWNlIAorZXQKKy5CIFwtLWV4Y2VwdC1pbnRlcmZhY2UKKy5UUAorLkIgXC1JLCAtLWV4Y2VwdC1pbnRlcmZhY2U9PGludGVyZmFjZSBuYW1lPgorTmUgcGFzIMOpY291dGVyIHN1ciBsJ2ludGVyZmFjZSBzcMOpY2lmacOpZS4gTm90ZXogcXVlIGwnb3JkcmUgZGFucyBsZXNxdWVsbGVzIGxlcworb3B0aW9ucworLkIgXC0tbGlzdGVuLWFkZHJlc3MKKywKKy5CIC0taW50ZXJmYWNlCitldAorLkIgLS1leGNlcHQtaW50ZXJmYWNlCitzb250IGZvdXJuaWVzIG4naW1wb3J0ZSBwYXMsIGV0IHF1ZSBsJ29wdGlvbiAKKy5CIC0tZXhjZXB0LWludGVyZmFjZQorbCdlbXBvcnRlIHRvdWpvdXJzIHN1ciBsZXMgYXV0cmVzLgorLlRQCisuQiAtLWF1dGgtc2VydmVyPTxkb21haW5lPiw8aW50ZXJmYWNlPnw8YWRkcmVzc2UgSVA+CitBY3RpdmUgbGUgbW9kZSBETlMgZmFpc2FudCBhdXRvcml0w6kgcG91ciBsZXMgcmVxdcOqdGVzIGFycml2YW50IHN1ciBjZXR0ZQoraW50ZXJmYWNlIG91IHN1ciBjZXR0ZSBhZHJlc3NlLiBOb3RlciBxdWUgbCdpbnRlcmZhY2Ugb3UgbCdhZHJlc3NlIG4nb250CitwYXMgYmVzb2luIGQnw6p0cmUgbWVudGlvbsOpZXMgbmkgZGFucworLkIgLS1pbnRlcmZhY2UKK25pIGRhbnMKKy5CIC0tbGlzdGVuLWFkZHJlc3MKK0VuIGVmZmV0LAorLkIgLS1hdXRoLXNlcnZlcgordmEgcGFzc2VyIG91dHJlIGNldXgtY2kgZXQgZm91cm5pciB1biBzZXJ2aWNlIEROUyBkaWZmw6lyZW50IHN1ciBsJ2ludGVyZmFjZQorc3DDqWNpZmnDqWUuIExhIHZhbGV1ciBkZSA8ZG9tYWluZT4gZXN0IGwnZW5yZWdpc3RyZW1lbnQgZGUgdHlwZSAiY29sbGUiCisoImdsdWUgcmVjb3JkIikuIElsIGRvaXQgY29ycmVzcG9uZHJlIGRhbnMgbGUgc2VydmljZSBETlMgZ2xvYmFsIGF2ZWMgdW4KK2VucmVnaXN0cmVtZW50IGRlIHR5cGUgQSBldC9vdSBBQUFBIHBvaW50YW50IHN1ciBsJ2FkcmVzc2Ugc3VyIGxhcXVlbGxlIGRuc21hc3EKK8OpY291dGUgcG91ciBsZSBtb2RlIEROUyBmYWlzYW50IGF1dG9yaXTDqS4KKy5UUCAKKy5CIFwtMiwgLS1uby1kaGNwLWludGVyZmFjZT08bm9tIGQnaW50ZXJmYWNlPgorTmUgcGFzIGZvdXJuaXIgZGUgc2VydmljZSBESENQIHN1ciBsJ2ludGVyZmFjZSBzcMOpY2lmacOpZSwgbWFpcyBmb3VybmlyIHRvdXQgZGUKK23Dqm1lIGxlIHNlcnZpY2UgRE5TLgorLlRQCisuQiBcLWEsIC0tbGlzdGVuLWFkZHJlc3M9PGFkcmVzc2UgSVA+CitFY291dGVyIHN1ciBsYSBvdSBsZXMgYWRyZXNzZShzKSBJUCBzcMOpY2lmacOpZShzKS4gTGVzIG9wdGlvbnMgCisuQiBcLS1pbnRlcmZhY2UKK2V0CisuQiBcLS1saXN0ZW4tYWRkcmVzcworcGV1dmVudC3DqnRyZSBzcMOpY2lmacOpZXMgc2ltdWx0YW7DqW1lbnQsIGF1cXVlbCBjYXMgdW4gamV1IGQnaW50ZXJmYWNlcyBldAorZCdhZHJlc3NlcyBzZXJvbnQgdXRpbGlzw6llcy4gTm90ZXogcXVlIHNpCithdWN1bmUgb3B0aW9uCisuQiBcLS1pbnRlcmZhY2UKK24nZXN0IGRvbm7DqWUgYWxvcnMgcXUndW5lIG9wdGlvbiAKKy5CIFwtLWxpc3Rlbi1hZGRyZXNzCitsJ2VzdCwgRG5zbWFzcSBuJ8OpY291dGVyYSBwYXMgYXV0b21hdGlxdWVtZW50IHN1ciBsJ2ludGVyZmFjZSBsb2NhbGUKKygibG9vcGJhY2siKS4gUG91ciBhY3RpdmVyIGwnw6ljb3V0ZSBzdXIgbCdpbnRlcmZhY2UgbG9jYWxlLCBpbCBlc3QgYWxvcnMKK27DqWNlc3NhaXJlIGRlIGZvdXJuaXIgZXhwbGljaXRlbWVudCBzb24gYWRyZXNzZSBJUCwgMTI3LjAuMC4xIHZpYSBsJ29wdGlvbgorLkIgXC0tbGlzdGVuLWFkZHJlc3MuCisuVFAKKy5CIFwteiwgLS1iaW5kLWludGVyZmFjZXMKK1N1ciBsZXMgc3lzdMOobWVzIHF1aSBsZSBzdXBwb3J0ZSwgRG5zbWFzcSBzJ2Fzc29jaWUgYXZlYyBsJ2ludGVyZmFjZSBqb2tlcgorKCJ3aWxkY2FyZCIpLCBtw6ptZSBsb3JzcXUnaWwgbmUgZG9pdCDDqWNvdXRlciBxdWUgc3VyIGNlcnRhaW5lcyBpbnRlcmZhY2VzLiBQYXIKK2xhIHN1aXRlLCBpbCByZWpldHRlIGxlcyByZXF1w6p0ZXMgYXV4cXVlbGxlcyBpbCBuZSBkb2l0IHBhcyByw6lwb25kcmUuIENldHRlCitzaXR1YXRpb24gcHLDqXNlbnRlIGwnYXZhbnRhZ2UgZGUgZm9uY3Rpb25uZXIgbcOqbWUgbG9yc3F1ZSBsZXMgaW50ZXJmYWNlcyB2b250CitldCB2aWVubmVudCBvdSBjaGFuZ2VudCBkJ2FkcmVzc2VzLiBMJ29wdGlvbiAKKy5CIC0tYmluZC1pbnRlcmZhY2VzCitmb3JjZSBEbnNtYXNxIMOgIG5lIHLDqWVsbGVtZW50IHMnYXNzb2NpZXIgcXUnYXZlYyBsZXMgaW50ZXJmYWNlcyBzdXIgbGVzcXVlbGxlcworaWwgZG9pdCDDqWNvdXRlci4gTCd1biBkZXMgc2V1bHMgY2FzIG/DuSBjZXR0ZSBvcHRpb24gZXN0IHV0aWxlIGVzdCBjZWx1aSBvw7kgdW4KK2F1dHJlIHNlcnZldXIgZGUgbm9tIChvdSB1bmUgYXV0cmUgaW5zdGFuY2UgZGUgRG5zbWFzcSkgdG91cm5lIHN1ciBsYSBtw6ptZQorbWFjaGluZS4gVXRpbGlzZXIgY2V0dGUgb3B0aW9uIHBlcm1ldCDDqWdhbGVtZW50IGQnYXZvaXIgcGx1c2lldXJzIGluc3RhbmNlcyBkZQorRG5zbWFzcSBmb3Vybmlzc2FudCB1biBzZXJ2aWNlIERIQ1Agc3VyIGxhIG3Dqm1lIG1hY2hpbmUuCisuVFAKKy5CIC0tYmluZC1keW5hbWljCitBdXRvcmlzZSB1biBtb2RlIHLDqXNlYXUgaW50ZXJtw6lkaWFpcmUgZW50cmUKKy5CIC0tYmluZC1pbnRlcmZhY2VzCitldCBsZSBtb2RlIHBhciBkw6lmYXV0LiBEbnNtYXNxIHMnYXNzb2NpZSDDoCB1bmUgc2V1bGUgaW50ZXJmYWNlLCBjZSBxdWkgcGVybWV0CitwbHVzaWV1cnMgaW5zdGFuY2VzIGRlIGRuc21hc3EsIG1haXMgc2kgdW5lIGludGVyZmFjZSBvdSBhZHJlc3NlIGFwcGFyYWlzc2VudCwKK2lsIHNlIG1ldHRyYSBhdXRvbWF0aXF1ZW1lbnQgw6Agw6ljb3V0ZXIgc3VyIGNlbGxlcy1jaSAobGVzIHLDqGdsZXMgZGUgY29udHLDtGxlCitkJ2FjY8OocyBzJ2FwcGxpcXVlbnQpLgorRGUgZmFpdCwgbGVzIGludGVyZmFjZXMgY3LDqcOpZXMgZHluYW1pcXVlbWVudCBmb25jdGlvbm5lbnQgZGUgbGEgbcOqbWUgZmHDp29uIHF1ZQorZGFucyBsZSBjb21wb3J0ZW1lbnQgcGFyIGTDqWZhdXQuIENlIGZvbmN0aW9ubmVtZW50IG7DqWNlc3NpdGUgZGVzIEFQSXMgcsOpc2VhdQorbm9uIHN0YW5kYXJkIGV0IG4nZXN0IGRpc3BvbmlibGUgcXVlIHNvdXMgTGludXguIFN1ciBsZXMgYXV0cmVzIHBsYXRlZm9ybWVzLAorbGUgZm9uY3Rpb25uZW1lbnQgZXN0IGNlbHVpIGR1IG1vZGUgLS1iaW5kLWludGVyZmFjZXMuCisuVFAKKy5CIFwteSwgLS1sb2NhbGlzZS1xdWVyaWVzCitSZXRvdXJuZSBkZXMgcsOpcG9uc2VzIGF1eCByZXF1w6p0ZXMgRE5TIGTDqXBlbmRhbnRlcyBkZSBsJ2ludGVyZmFjZSBzdXIgbGFxdWVsbGUKK2xhIHJlcXXDqnRlIGEgw6l0w6kgcmXDp3VlLCDDoCBwYXJ0aXIgZHUgZmljaGllciAvZXRjL2hvc3RzLiBTaSB1biBub20gZGFucworL2V0Yy9ob3N0cyBhIHBsdXMgZCd1bmUgYWRyZXNzZSBhc3NvY2nDqWUgYXZlYyBsdWksIGV0IHF1J3VuZSBkZXMgYWRyZXNzZXMgYXUKK21vaW5zIGVzdCBkYW5zIGxlIG3Dqm1lIHNvdXMtcsOpc2VhdSBxdWUgbCdpbnRlcmZhY2Ugc3VyIGxhcXVlbGxlIGxhIHJlcXXDqnRlIGEgw6l0w6kKK3Jlw6d1ZSwgYWxvcnMgbmUgcmV0b3VybmUgcXVlIGxhKGxlcykgYWRyZXNzZShzKSBkdSBzb3VzLXLDqXNlYXUgY29uc2lkw6lyw6kuIENlbGEKK3Blcm1ldCBkJ2F2b2lyIGRhbnMgL2V0Yy9ob3N0cyB1biBzZXJ2ZXVyIGF2ZWMgZGUgbXVsdGlwbGVzIGFkcmVzc2VzLCB1bmUgcG91cgorY2hhY3VuZSBkZSBzZXMgaW50ZXJmYWNlcywgZXQgZGUgZm91cm5pciBhdXggaMO0dGVzIGwnYWRyZXNzZSBjb3JyZWN0ZSAoYmFzw6llIHN1cgorbGUgcsOpc2VhdSBhdXF1ZWwgaWxzIHNvbnQgYXR0YWNow6lzKS4gQ2V0dGUgcG9zc2liaWxpdMOpIGVzdCBhY3R1ZWxsZW1lbnQgbGltaXTDqWUKK8OgIElQdjQuCisuVFAKKy5CIFwtYiwgLS1ib2d1cy1wcml2CitGYXVzc2UgcsOpc29sdXRpb24gaW52ZXJzZSBwb3VyIGxlcyByw6lzZWF1eCBwcml2w6lzLiBUb3V0ZXMgbGVzIHJlcXXDqnRlcyBETlMKK2ludmVyc2VzIHBvdXIgZGVzIGFkcmVzc2VzIElQIHByaXbDqWVzIChpZSAxOTIuMTY4LngueCwgZXRjLi4uKSBxdWkgbmUgc29udCBwYXMKK3Ryb3V2w6llcyBkYW5zIC9ldGMvaG9zdHMgb3UgZGFucyBsZSBmaWNoaWVyIGRlIGJhdXggREhDUCBzZSB2b2llbnQgcmV0b3VybsOpZXMKK3VuZSByw6lwb25zZSAicGFzIGRlIHRlbCBkb21haW5lIiAoIm5vIHN1Y2ggZG9tYWluIikgYXUgbGlldSBkJ8OqdHJlIHRyYW5zbWlzZXMKK2F1eCBzZXJ2ZXVycyBkZSBub20gYW1vbnQgKCJ1cHN0cmVhbSBzZXJ2ZXIiKS4KKy5UUAorLkIgXC1WLCAtLWFsaWFzPVs8YW5jaWVubmUgSVA+XXxbPElQIGRlIGTDqWJ1dD4tPElQIGRlIGZpbj5dLDxub3V2ZWxsZSBJUD5bLDxtYXNxdWU+XQorTW9kaWZpZSBsZXMgYWRyZXNzZXMgSVB2NCByZXRvdXJuw6llcyBwYXIgbGVzIHNlcnZldXJzIGRlIG5vbSBhbW9udDsKKzxhbmNpZW5uZSBJUD4gZXN0IHJlbXBsYWPDqWUgcGFyIDxub3V2ZWxsZSBJUD4uIFNpIGxlIDxtYXNxdWU+IG9wdGlvbm5lbCBlc3QKK2ZvdXJuaSwgYWxvcnMgdG91dGUgYWRyZXNzZSBjb3JyZXNwb25kYW50IMOgIGwnYWRyZXNzZSA8YW5jaWVubmUgSVA+LzxtYXNxdWU+CitzZXJhIHLDqcOpY3JpdGUuIEFpbnNpIHBhciBleGVtcGxlCisuQiAtLWFsaWFzPTEuMi4zLjAsNi43LjguMCwyNTUuMjU1LjI1NS4wIAorbW9kaWZpZXJhIDEuMi4zLjU2IGVuIDYuNy44LjU2IGV0IDEuMi4zLjY3IGVuIDYuNy44LjY3LiAKK0NldHRlIGZvbmN0aW9ubmFsaXTDqSBjb3JyZXNwb25kIMOgIGNlIHF1ZSBsZXMgcm91dGV1cnMgQ2lzY28gUElYIGFwcGVsbGVudAorImJpZG91aWxsYWdlIEROUyIgKCJETlMgZG9jdG9yaW5nIikuIFNpIGwnYW5jaWVubmUgSVAgZXN0IGRvbm7DqWUgc291cyBsYSBmb3JtZQorZCd1bmUgZ2FtbWUgZCdhZHJlc3NlcywgYWxvcnMgc2V1bGVzIGxlcyBhZHJlc3NlcyBkYW5zIGNldHRlIGdhbW1lIHNlcm9udAorcsOpZWNyaXRlcywgZXQgbm9uIGxlIHNvdXMtcsOpc2VhdSBkYW5zIHNvbiBlbnNlbWJsZS4gQWluc2ksCisuQiAtLWFsaWFzPTE5Mi4xNjguMC4xMC0xOTIuMTY4LjAuNDAsMTAuMC4wLjAsMjU1LjI1NS4yNTUuMAorZmFpdCBjb3JyZXNwb25kcmUgMTkyLjE2OC4wLjEwLT4xOTIuMTY4LjAuNDAgw6AgMTAuMC4wLjEwLT4xMC4wLjAuNDAKKy5UUCAKKy5CIFwtQiwgLS1ib2d1cy1ueGRvbWFpbj08YWRyZXNzZSBJUD4KK1RyYW5zZm9ybWUgbGVzIHLDqXBvbnNlcyBjb250ZW5hbnQgbCdhZHJlc3NlIElQIGZvdXJuaWUgZW4gcsOpcG9uc2VzICJwYXMgZGUgdGVsCitkb21haW5lIiAoIm5vIHN1Y2ggZG9tYWluIikuIENlY2kgYSBwb3VyIGJ1dCBkZSBuZXV0cmFsaXNlciBsYSBtb2RpZmljYXRpb24KK3NvdXJub2lzZSBtaXNlIGVuIHBsYWNlIHBhciBWZXJpc2lnbiBlbiBzZXB0ZW1icmUgMjAwMywgbG9yc3F1J2lscyBvbnQgY29tbWVuY8OpCivDoCByZXRvdXJuZXIgbCdhZHJlc3NlIGQndW4gc2VydmV1ciB3ZWIgcHVibGljaXRhaXJlIGVuIHLDqXBvbnNlIGF1eCByZXF1w6p0ZXMgcG91cgorbGVzIG5vbXMgZGUgZG9tYWluZXMgbm9uIGVucmVnaXN0csOpcywgYXUgbGlldSBkZSBsYSByw6lwb25zZSBjb3JyZWN0ZSAiTlhET01BSU4iLgorQ2V0dGUgb3B0aW9uIGRlbWFuZGUgw6AgRG5zbWFzcSBkZSByZXRvdXJuZXIgbGEgcsOpcG9uc2UgY29ycmVjdGUgbG9yc3F1J2lsCitjb25zdGF0ZSBjZSBjb21wb3J0ZW1lbnQuIEwnYWRyZXNzZSByZXRvdXJuw6llIHBhciBWZXJpc2lnbiBlbiBzZXB0ZW1icmUgMjAwMworZXN0IDY0Ljk0LjExMC4xMS4KKy5UUAorLkIgXC1mLCAtLWZpbHRlcndpbjJrCitMZXMgZGVybmnDqHJlcyB2ZXJzaW9ucyBkZSB3aW5kb3dzIGZvbnQgZGVzIHJlcXXDqnRlcyBETlMgcMOpcmlvZGlxdWVzIGF1eHF1ZWxsZXMKK25vbiBzZXVsZW1lbnQgbGVzIHNlcnZldXJzIEROUyBwdWJsaWNzIG5lIHBldXZlbnQgZG9ubmVyIGRlIHLDqXBvbnNlLCBtYWlzIHF1aSwKK2RlIHN1cmNyb8OudCwgcGV1dmVudCBwb3NlciBkZXMgcHJvYmzDqG1lcyBlbiBkw6ljbGVuY2hhbnQgZGVzIGNvbm5leGlvbnMKK2ludGVtcGVzdGl2ZXMgcG91ciBkZXMgbGllbnMgcsOpc2VhdXggYXZlYyBkZXMgY29ubmV4aW9ucyAiw6AgbGEgZGVtYW5kZSIuIEZvdXJuaXIKK2NldHRlIG9wdGlvbiBhY3RpdmUgbGUgZmlsdHJhZ2UgZGVzIHJlcXXDqnRlcyBkZSBjZSB0eXBlLiBMZXMgcmVxdcOqdGVzIGJsb3F1w6llcworc29udCBsZXMgcmVxdcOqdGVzIHBvdXIgbGVzIGVudHLDqWVzIGRlIHR5cGUgU09BIG91IFNSViwgYWluc2kgcXVlIGxlcyByZXF1w6p0ZXMgZGUKK3R5cGUgQU5ZIGF2ZWMgZGVzIG5vbXMgcG9zc8OpZGFudCBkZXMgY2FyYWN0w6hyZXMgc291cy1saWduw6lzIChyZXF1w6p0ZXMgcG91ciBkZXMKK3NlcnZldXJzIExEQVApLgorLlRQCisuQiBcLXIsIC0tcmVzb2x2LWZpbGU9PGZpY2hpZXI+CitMaXMgbGVzIGFkcmVzc2VzIGRlcyBzZXJ2ZXVycyBkZSBub20gYW1vbnQgZGFucyBsZSBmaWNoaWVyIGRlIG5vbSA8ZmljaGllcj4sCithdSBsaWV1IGR1IGZpY2hpZXIgL2V0Yy9yZXNvbHYuY29uZi4gUG91ciBsZSBmb3JtYXQgZGUgY2UgZmljaGllciwgdm9pciBkYW5zIGxlCittYW51ZWwgcG91cgorLkJSIHJlc29sdi5jb25mICg1KSAKK2xlcyBlbnRyw6llcyBjb3JyZXNwb25kYW50IGF1eCBzZXJ2ZXVycyBkZSBub21zIChuYW1lc2VydmVyKS4gRG5zbWFzcSBwZXV0IGxpcmUKK3BsdXNpZXVycyBmaWNoaWVycyBkZSB0eXBlIHJlc29sdi5jb25mLCBsZSBwcmVtaWVyIGZpY2hpZXIgc3DDqWNpZmnDqSByZW1wbGFjZSBsZQorZmljaGllciBwYXIgZMOpZmF1dCwgbGUgY29udGVudSBkZXMgc3VpdmFudHMgZXN0IHJham91dMOpIGRhbnMgbGEgbGlzdGUgZGVzCitmaWNoaWVycyDDoCBjb25zdWx0ZXIuIFNldWwgbGUgZmljaGllciBheWFudCBsYSBkZXJuacOocmUgZGF0ZSBkZSBtb2RpZmljYXRpb24KK3NlcmEgY2hhcmfDqSBlbiBtw6ltb2lyZS4KKy5UUAorLkIgXC1SLCAtLW5vLXJlc29sdgorTmUgcGFzIGxpcmUgbGUgY29udGVudSBkdSBmaWNoaWVyIC9ldGMvcmVzb2x2LmNvbmYuIE4nb2J0ZW5pciBsJ2FkcmVzc2UgZGVzCitzZXJ2ZXVycyBkZSBub20gYW1vbnQgcXVlIGRlcHVpcyBsYSBsaWduZSBkZSBjb21tYW5kZSBvdSBsZSBmaWNoaWVyIGRlCitjb25maWd1cmF0aW9uIGRlIERuc21hc3EuCisuVFAKKy5CIFwtMSwgLS1lbmFibGUtZGJ1c1s9PG5vbSBkZSBzZXJ2aWNlPl0KK0F1dG9yaXNlciBsYSBtaXNlIMOgIGpvdXIgZGUgbGEgY29uZmlndXJhdGlvbiBkZSBEbnNtYXNxIHBhciBsZSBiaWFpcyBkJ2FwcGVsIGRlCittw6l0aG9kZXMgREJ1cy4gSWwgZXN0IHBvc3NpYmxlIHBhciBjZSBiaWFpcyBkZSBtZXR0cmUgw6Agam91ciBsJ2FkcmVzc2UgZGUKK3NlcnZldXJzIEROUyBhbW9udCAoZXQgbGVzIGRvbWFpbmVzIGNvcnJlc3BvbmRhbnRzKSBldCBkZSB2aWRlciBsZSBjYWNoZS4gQ2V0dGUKK29wdGlvbiBuw6ljZXNzaXRlIHF1ZSBEbnNtYXNxIHNvaXQgY29tcGlsw6kgYXZlYyBsZSBzdXBwb3J0IERCdXMuIFNpIHVuIG5vbSBkZQorc2VydmljZSBlc3QgZm91cm5pLCBkbnNtYXNxIGZvdXJuaSB1biBzZXJ2aWNlIMOgIGNlIG5vbSwgcGx1dMO0dCBxdSdhdmVjIGxhCit2YWxldXIgcGFyIGTDqWZhdXQgOgorLkIgdWsub3JnLnRoZWtlbGxleXMuZG5zbWFzcQorLlRQIAorLkIgXC1vLCAtLXN0cmljdC1vcmRlcgorUGFyIGTDqWZhdXQsIERuc21hc3EgZW52b2llIGxlcyByZXF1w6p0ZXMgw6AgbidpbXBvcnRlIGxlcXVlbCBkZXMgc2VydmV1cnMgYW1vbnRzCitkb250IGlsIGEgY29ubmFpc3NhbmNlIHRvdXQgZW4gZXNzYXlhbnQgZGUgZmF2b3Jpc2VyIGxlcyBzZXJ2ZXVycyBxdSdpbCBzYWl0Citmb25jdGlvbm5lci4gQ2V0dGUgb3B0aW9uIGZvcmNlIERuc21hc3Egw6AgZXNzYXllciBkJ2ludGVycm9nZXIsIHBvdXIgY2hhcXVlCityZXF1w6p0ZSwgbGVzIHNlcnZldXJzIEROUyBkYW5zIGxldXIgb3JkcmUgZCdhcHBhcml0aW9uIGRhbnMgbGUgZmljaGllcgorL2V0Yy9yZXNvbHYuY29uZi4KKy5UUAorLkIgLS1hbGwtc2VydmVycworUGFyIGTDqWZhdXQsIGxvcnNxdWUgZG5zbWFzcSBhIHBsdXMgZCd1biBzZXJ2ZXVyIGFtb250IGRpc3BvbmlibGUsIGlsIG4nZW52b2llCitsZXMgcmVxdcOqdGVzIHF1J8OgIHVuIHNldWwgc2VydmV1ci4gU3DDqWNpZmllciBjZXR0ZSBvcHRpb24gZm9yY2UgZG5zbWFzcSDDoAorZWZmZWN0dWVyIHNlcyByZXF1w6p0ZXMgw6AgdG91cyBsZXMgc2VydmV1cnMgZGlzcG9uaWJsZXMuIExlIHLDqXN1bHRhdCByZW52b3nDqQorYXUgY2xpZW50IHNlcmEgY2VsdWkgZm91cm5pdCBwYXIgbGUgcHJlbWllciBzZXJ2ZXVyIGF5YW50IHLDqXBvbmR1LgorLlRQCisuQiAtLXN0b3AtZG5zLXJlYmluZAorUmVqZXRlIChldCBlbnJlZ2lzdHJlIGRhbnMgbGUgam91cm5hbCBkJ2FjdGl2aXTDqSkgbGVzIGFkcmVzc2VzIGRhbnMgbGEgZ2FtbWUKK2QnYWRyZXNzZXMgSVAgcHJpdsOpZSAoYXUgc2VucyBSRkMxOTE4KSBxdWkgcG91cnJhaWVudCDDqnRyZSByZW52b3nDqWVzIHBhciBsZXMKK3NlcnZldXJzIGFtb250cyBzdWl0ZSDDoCB1bmUgcsOpc29sdXRpb24gZGUgbm9tLiBDZWxhIGJsb3F1ZSBsZXMgYXR0YXF1ZXMgY2hlcmNoYW50CivDoCBkw6l0b3VybmVyIGRlIGxldXIgdXNhZ2UgbGVzIGxvZ2ljaWVscyBkZSBuYXZpZ2F0aW9uIHdlYiAoJ2Jyb3dzZXInKSBlbiBzJ2VuCitzZXJ2YW50IHBvdXIgZMOpY291dnJpciBsZXMgbWFjaGluZXMgc2l0dcOpZXMgc3VyIGxlIHLDqXNlYXUgbG9jYWwuCisuVFAKKy5CIC0tcmViaW5kLWxvY2FsaG9zdC1vaworRXhjbHVlIDEyNy4wLjAvOCBkZXMgdsOpcmlmaWNhdGlvbnMgZGUgcsOpYXNzb2NpYXRpb24gRE5TLiBDZXR0ZSBnYW1tZSBkJ2FkcmVzc2VzCitlc3QgcmV0b3VybsOpZSBwYXIgbGVzIHNlcnZldXJzIFJlYWx0aW1lIEJsYWNraG9sZSAoUkJMLCB1dGlsaXPDqXMgZGFucyBsYQorbHV0dGUgY29udHJlIGxlIHNwYW0pLCBsYSBibG9xdWVyIHBldXQgZW50cmHDrm5lciBkZXMgZGlzZm9uY3Rpb25uZW1lbnRzIGRlIGNlcworc2VydmljZXMuCisuVFAgCisuQiAgLS1yZWJpbmQtZG9tYWluLW9rPVs8ZG9tYWluZT5dfFtbLzxkb21haW5lPi9bPGRvbWFpbmU+L10KK05lIHBhcyBkw6l0ZWN0ZXIgbmkgYmxvcXVlciBsZXMgYWN0aW9ucyBkZSB0eXBlIGRucy1yZWJpbmQgcG91ciBjZXMgZG9tYWluZXMuCitDZXR0ZSBvcHRpb24gcGV1dCBwcmVuZHJlIGNvbW1lIHZhbGV1ciBzb2l0IHVuIG5vbSBkZSBkb21haW5lIHNvaXQgcGx1c2lldXJzCitub21zIGRlIGRvbWFpbnMgZW50b3Vyw6lzIHBhciBkZXMgJy8nLCBzZWxvbiB1bmUgc3ludGF4ZSBzaW1pbGFpcmUgw6AgbCdvcHRpb24KKy0tc2VydmVyLCBjLcOgLWQgOgorLkIgIC0tcmViaW5kLWRvbWFpbi1vaz0vZG9tYWluZTEvZG9tYWluZTIvZG9tYWluZTMvCisuVFAKKy5CIFwtbiwgLS1uby1wb2xsCitOZSBwYXMgdsOpcmlmaWVyIHLDqWd1bGnDqHJlbWVudCBzaSBsZSBmaWNoaWVyIC9ldGMvcmVzb2x2LmNvbmYgYSDDqXTDqSBtb2RpZmnDqS4KKy5UUAorLkIgLS1jbGVhci1vbi1yZWxvYWQKK0xvcnNxdWUgbGUgZmljaGllciAvZXRjL3Jlc29sdi5jb25mIGVzdCByZWx1LCBvdSBzaSBsZXMgc2VydmV1cnMgYW1vbnRzIHNvbnQKK2NvbmZpZ3Vyw6lzIHZpYSBEQnVzLCB2aWRlciBsZSBjYWNoZSBETlMuCitDZWxhIGVzdCB1dGlsZSBzaSBsZXMgbm91dmVhdXggc2VydmV1cnMgc29udCBzdXNjZXB0aWJsZXMgZCdhdm9pciBkZXMgZG9ubsOpZXMKK2RpZmbDqXJlbnRlcyBkZSBjZWxsZXMgc3RvY2vDqWVzIGRhbnMgbGUgY2FjaGUuCisuVFAKKy5CIFwtRCwgLS1kb21haW4tbmVlZGVkCitJbmRpcXVlIMOgIERuc21hc3EgZGUgbmUgamFtYWlzIHRyYW5zbWV0dHJlIGVuIGFtb250IGRlIHJlcXXDqnRlcyBBIG91IEFBQUEgcG91cgorZGVzIG5vbXMgc2ltcGxlcywgYydlc3Qgw6AgZGlyZSBuZSBjb21wcmVuYW50IG5pIHBvaW50cyBuaSBub20gZGUgZG9tYWluZS4gU2kgdW4KK25vbSBuJ2VzdCBwYXMgZGFucyAvZXRjL2hvc3RzIG91IGRhbnMgbGEgbGlzdGUgZGVzIGJhdXggREhDUCwgYWxvcnMgdW5lIHLDqXBvbnNlCitkZSB0eXBlICJub24gdHJvdXbDqSIgZXN0IHJlbnZvecOpZS4KKy5UUAorLkIgXC1TLCAtLWxvY2FsLCAtLXNlcnZlcj1bL1s8ZG9tYWluZT5dL1tkb21haW5lL11dWzxBZHJlc3NlIElQPlsjPHBvcnQ+XVtAPEFkcmVzc2UgSVAgc291cmNlPnw8aW50ZXJmYWNlPlsjPHBvcnQ+XV1dCitTcMOpY2lmaWUgZGlyZWN0ZW1lbnQgbCdhZHJlc3NlIElQIGQndW4gc2VydmV1ciBkZSBub20gYW1vbnQuIENldHRlIG9wdGlvbiBuZQorc3VwcHJpbWUgcGFzIGxhIGxlY3R1cmUgZHUgZmljaGllciAvZXRjL3Jlc29sdi5jb25mIDogdXRpbGlzZXIgcG91ciBjZWxhCitsJ29wdGlvbgorLkIgLVIgLgorU2kgdW4gb3UgcGx1c2lldXJzIG5vbShzKSBkZSBkb21haW5lKHMpIG9wdGlvbm5lbChzKSBzb250IGZvdXJuaXMsIGNlCitzZXJ2ZXVyIHNlcmEgdW5pcXVlbWVudCB1dGlsaXPDqSB1bmlxdWVtZW50IHBvdXIgY2UocykgZG9tYWluZShzKSwgZXQgdG91dGUKK3JlcXXDqnRlIGNvbmNlcm5hbnQgY2UocykgZG9tYWluZShzKSBzZXJhIGFkcmVzc8OpZSB1bmlxdWVtZW50IMOgIGNlIHNlcnZldXIuCitDZXR0ZSBvcHRpb24gZXN0IGRlc3RpbsOpZSBhdXggc2VydmV1cnMgZGUgbm9tIHByaXbDqXMgOiBzaSB2b3VzIGF2ZXogdW4gc2VydmV1cgorZGUgbm9tIHN1ciB2b3RyZSByw6lzZWF1IGF5YW50IHBvdXIgYWRyZXNzZSBJUCAxOTIuMTY4LjEuMSBldCBlZmZlY3R1YW50IGxhCityw6lzb2x1dGlvbiBkZXMgbm9tcyBkZSBsYSBmb3JtZSB4eHguaW50ZXJuYWwudGhla2VsbGV5cy5vcmcudWssIGFsb3JzCisuQiAtUyAvaW50ZXJuYWwudGhla2VsbGV5cy5vcmcudWsvMTkyLjE2OC4xLjEgCitlbnZlcnJhIHRvdXRlcyBsZXMgcmVxdcOqdGVzIHBvdXIgbGVzIG1hY2hpbmVzIGludGVybmVzIHZlcnMgY2Ugc2VydmV1ciBkZSBub20sCithbG9ycyBxdWUgdG91dGVzIGxlcyBhdXRyZXMgcmVxdcOqdGVzIHNlcm9udCBhZHJlc3PDqWVzIGF1eCBzZXJ2ZXVycyBpbmRpcXXDqXMgZGFucworbGUgZmljaGllciAvZXRjL3Jlc29sdi5jb25mLiBVbmUgc3DDqWNpZmljYXRpb24gZGUgbm9tIGRlIGRvbWFpbmUgdmlkZSwKKy5CIC8vIAorcG9zc8OoZGUgbGUgc2VucyBwYXJ0aWN1bGllciBkZSAicG91ciBsZXMgbm9tcyBub24gcXVhbGlmacOpcyB1bmlxdWVtZW50IiwKK2MnZXN0LcOgLWRpcmUgbGVzIG5vbXMgbmUgcG9zc8OpZGFudCBwYXMgZGUgcG9pbnRzLiBVbiBwb3J0IG5vbiBzdGFuZGFyZCBwZXV0IMOqdHJlCityYWpvdXTDqSDDoCBsYSBzdWl0ZSBkZXMgYWRyZXNzZXMgSVAgZW4gdXRpbGlzYW50IGxlIGNhcmFjdMOocmUgIy4gUGx1cyBkJ3VuZQorb3B0aW9uCisuQiAtUworZXN0IGF1dG9yaXPDqWUsIGVuIHLDqXDDqXRhbnQgbGVzIGRvbWFpbmVzIGV0IGFkcmVzc2VzIElQIGNvbW1lIHJlcXVpcy4KKworTGUgZG9tYWluZSBsZSBwbHVzIHNww6ljaWZpcXVlIGwnZW1wb3J0ZSBzdXIgbGUgZG9tYWluZSBsZSBtb2lucyBzcMOpY2lmaXF1ZSwKK2FpbnNpIDoKKy5CIC0tc2VydmVyPS9nb29nbGUuY29tLzEuMi4zLjQKKy5CIC0tc2VydmVyPS93d3cuZ29vZ2xlLmNvbS8yLjMuNC41CitlbnZlcnJhIGxlcyByZXF1w6p0ZXMgcG91ciAqLmdvb2dsZS5jb20gw6AgMS4yLjMuNCwgw6AgbCdleGNlcHRpb24gZGVzIHJlcXXDqnRlcworKnd3dy5nb29nbGUuY29tLCBxdWkgc2Vyb250IGVudm95w6llcyDDoCAyLjMuNC41LgorCitMJ2FkcmVzc2Ugc3DDqWNpYWxlICcjJyBzaWduaWZpZSAidXRpbGlzZXIgbGVzIHNlcnZldXJzIHN0YW5kYXJkcyIsIGFpbnNpCisuQiAtLXNlcnZlcj0vZ29vZ2xlLmNvbS8xLjIuMy40CisuQiAtLXNlcnZlcj0vd3d3Lmdvb2dsZS5jb20vIworZW52ZXJyYSBsZXMgcmVxdcOqdGVzIHBvdXIgKi5nb29nbGUuY29tIMOgIDEuMi4zLjQsIMOgIGwnZXhjZXB0aW9uIGRlcyByZXF1w6p0ZXMKK3BvdXIgKnd3dy5nb29nbGUuY29tIHF1aSBzZXJvbnQgZW52b3nDqWVzIGNvbW1lIGQnaGFiaXR1ZGUgKGMtw6AtZCBhdXggc2VydmV1cnMKK2TDqWZpbmlzIHBhciBkw6lmYXV0KS4KKworSWwgZXN0IMOpZ2FsZW1lbnQgcGVybWlzIGRlIGRvbm5lciB1bmUgb3B0aW9uCisuQiAtUworYXZlYyB1biBub20gZGUgZG9tYWluZSBtYWlzIHNhbnMKK2FkcmVzc2UgSVA7IENlbGEgaW5mb3JtZSBEbnNtYXNxIHF1ZSBsZSBkb21haW5lIGVzdCBsb2NhbCBldCBxdSdpbCBkb2l0IHLDqXBvbmRyZQorYXV4IHJlcXXDqnRlcyBsZSBjb25jZXJuYW50IGRlcHVpcyBsZXMgZW50csOpZXMgY29udGVudWVzIGRhbnMgbGUgZmljaGllcgorL2V0Yy9ob3N0cyBvdSBsZXMgYmF1eCBESENQLCBldCBuZSBkb2l0IGVuIGF1Y3VuIGNhcyB0cmFuc21ldHRyZSBsZXMgcmVxdcOqdGVzCithdXggc2VydmV1cnMgYW1vbnRzLgorLkIgbG9jYWwKK2VzdCBzeW5vbnltZSBkZQorLkIgc2VydmVyCisoInNlcnZldXIiKSBhZmluIGRlIHJlbmRyZSBwbHVzIGNsYWlyZSBsJ3V0aWxpc2F0aW9uIGRlIGNldHRlIG9wdGlvbiBwb3VyIGNldAordXNhZ2UgcGFydGljdWxpZXIuCisKK0xlcyBhZHJlc3NlcyBJUHY2IHBldXZlbnQgaW5jbHVyZSB1biBpZGVudGlmaWFudCBkZSB6b25lIHNvdXMgbGEgZm9ybWUKKyVpbnRlcmZhY2UgdGVsIHF1ZSBwYXIgZXhlbXBsZQorZmU4MDo6MjAyOmE0MTI6NDUxMjo3YmJmJWV0aDAuCisKK0xhIGNoYcOubmUgZGUgY2FyYWN0w6hyZXMgb3B0aW9ubmVsbGUgc3VpdmFudCBsZSBjYXJhY3TDqHJlIEAgcGVybWV0IGRlIGTDqWZpbmlyCitsYSBzb3VyY2UgcXVlIERuc21hc3EgZG9pdCB1dGlsaXNlciBwb3VyIGxlcyByw6lwb25zZXMgw6AgY2UKK3NlcnZldXIgZGUgbm9tLiBJbCBkb2l0IHMnYWdpciBkJ3VuZSBkZXMgYWRyZXNzZXMgSVAgYXBwYXJ0ZW5hbnQgw6AgbGEgbWFjaGluZSBzdXIKK2xhcXVlbGxlIHRvdXJuZSBEbnNtYXNxIG91IHNpbm9uIGxhIGxpZ25lIHNlcmEgaWdub3LDqWUgZXQgdW5lIGVycmV1ciBzZXJhCitjb25zaWduw6llIGRhbnMgbGUgam91cm5hbCBkZXMgw6l2w6luZW1lbnRzLCBvdSBhbG9ycyBkJ3VuIG5vbSBkJ2ludGVyZmFjZS4gU2kgdW4gbm9tCitkJ2ludGVyZmFjZSBlc3QgZG9ubsOpLCBhbG9ycyBsZXMgcmVxdcOqdGVzIHZlcnMgbGUgc2VydmV1ciBkZSBub20gc2Vyb250IGVudm95w6llcworZGVwdWlzIGNldHRlIGludGVyZmFjZTsgc2kgdW5lIGFkcmVzc2UgaXAgZXN0IGRvbm7DqWUsIGFsb3JzIGwnYWRyZXNzZSBzb3VyY2UgZGUKK2xhIHJlcXXDqnRlIHNlcmEgbCdhZHJlc3NlIGVuIHF1ZXN0aW9uLiBMJ29wdGlvbiBxdWVyeS1wb3J0IGVzdCBpZ25vcsOpZSBwb3VyIHRvdXMKK2xlcyBzZXJ2ZXVycyBheWFudCB1bmUgYWRyZXNzZSBzb3VyY2Ugc3DDqWNpZmnDqWUsIG1haXMgaWwgZXN0IHBvc3NpYmxlIGRlIGxhIGRvbm5lcgorZGlyZWN0ZW1lbnQgZGFucyBsYSBzcMOpY2lmaWNhdGlvbiBkZSBsJ2FkcmVzc2Ugc291cmNlLiBGb3JjZXIgbGVzIHJlcXXDqnRlcyDDoCDDqnRyZQorw6ltaXNlcyBkZXB1aXMgdW5lIGludGVyZmFjZSBzcMOpY2lmaXF1ZSBuJ2VzdCBwYXMgcG9zc2libGUgc3VyIHRvdXRlcyBsZXMgcGxhdGVmb3JtZXMKK3N1cHBvcnTDqWVzIHBhciBkbnNtYXNxLgorLlRQCisuQiBcLUEsIC0tYWRkcmVzcz0vPGRvbWFpbmU+L1tkb21haW5lL108YWRyZXNzZSBJUD4KK1Nww6ljaWZpZSB1bmUgYWRyZXNzZSBJUCDDoCByZXRvdXJuZXIgcG91ciB0b3V0ZSByZXF1w6p0ZSBwb3VyIGxlcyBkb21haW5lcyBmb3VybmlzCitlbiBvcHRpb24uIExlcyByZXF1w6p0ZXMgcG91ciBjZShzKSBkb21haW5lKHMpIG5lIHNvbnQgamFtYWlzIHRyYW5zbWlzZXMgYXV4CitzZXJ2ZXVycyBhbW9udHMgZXQgcmXDp29pdmVudCBjb21tZSByw6lwb25zZSBsJ2FkcmVzc2UgSVAgc3DDqWNpZmnDqWUgcXVpIHBldXQgw6p0cmUKK3VuZSBhZHJlc3NlIElQdjQgb3UgSVB2Ni4gUG91ciBkb25uZXIgw6AgbGEgZm9pcyB1bmUgYWRyZXNzZSBJUHY0IGV0IHVuZSBhZHJlc3NlCitJUHY2IHBvdXIgdW4gZG9tYWluZSwgdXRpbGlzZXIgcGx1c2lldXJzIG9wdGlvbnMKKy5CIC1BLgorSWwgZmF1dCBub3RlciBxdWUgbGUKK2NvbnRlbnUgZHUgZmljaGllciAvZXRjL2hvc3RzIGV0IGRlIGNlbHVpIGRlcyBiYXV4IERIQ1Agc3VwcGxhbnRlIGNlY2kgcG91ciBkZXMKK25vbXMgaW5kaXZpZHVlbHMuIFVuZSB1dGlsaXNhdGlvbiBjb3VyYW50ZSBkZSBjZXR0ZSBvcHRpb24gZXN0IGRlIHJlZGlyaWdlciBsYQordG90YWxpdMOpIGR1IGRvbWFpbmUgZG91YmxlY2xpY2submV0IHZlcnMgdW4gc2VydmV1ciB3ZWIgbG9jYWwgYWZpbiBkJ8Opdml0ZXIgbGVzCitiYW5uacOocmVzIHB1YmxpY2l0YWlyZXMuIExhIHNww6ljaWZpY2F0aW9uIGRlIGRvbWFpbmUgZm9uY3Rpb25uZSBkZSBsYSBtw6ptZSBmYcOnb24KK3F1ZQorLkIgIC0tc2VydmVyLAorYXZlYyBsYSBjYXJhY3TDqXJpc3RpcXVlIHN1cHBsw6ltZW50YWlyZSBxdWUKKy5CIC8jLworY2/Dr25jaWRlIGF2ZWMgdG91dCBkb21haW5lLiBBaW5zaSwKKy5CIC0tYWRkcmVzcz0vIy8xLjIuMy40CityZXRvdXJuZXJhIDEuMi4zLjQgcG91ciB0b3V0ZSByZXF1w6p0ZQorbidheWFudCBkZSByw6lwb25zZSBuaSBkYW5zIC9ldGMvaG9zdHMsIG5pIGRhbnMgbGVzIGJhdXggREhDUCwgZXQgbifDqXRhbnQgcGFzCit0cmFuc21pc2Ugw6AgdW4gc2VydmV1ciBzcMOpY2lmaXF1ZSBwYXIgbGUgYmlhaXMgZCd1bmUgZGlyZWN0aXZlCisuQiAtLXNlcnZlci4KKy5UUAorLkIgLS1pcHNldD0vPGRvbWFpbmU+L1tkb21haW5lL108aXBzZXQ+Wyw8aXBzZXQ+XQorT2J0aWVudCBsZXMgYWRyZXNzZXMgSVAgZGVzIGRvbWFpbmVzIHNww6ljaWZpw6lzIGV0IGxlcyBwbGFjZSBkYW5zIGxlcyBncm91cGVzCitkJ0lQIG5ldGZpbHRlciAoaXBzZXQpIGluZGlxdcOpcy4gRG9tYWluZXMgZXQgc291cy1kb21haW5lcyBzb250IHLDqXNvbHVzIGRlIGxhCittw6ptZSBmYcOnb24gcXVlIHBvdXIgLS1hZGRyZXNzLiBDZXMgZ3JvdXBlcyBkJ0lQIGRvaXZlbnQgZMOpasOgIGV4aXN0ZXIuIFZvaXIKK2lwc2V0KDgpIHBvdXIgcGx1cyBkZSBkw6l0YWlscy4KKy5UUAorLkIgXC1tLCAtLW14LWhvc3Q9PG5vbSBkZSBsJ2jDtHRlPltbLDxub20gZHUgTVg+XSw8cHLDqWZlcmVuY2U+XQorU3DDqWNpZmllIHVuIGVucmVnaXN0cmVtZW50IGRlIHR5cGUgTVggcG91ciA8bm9tIGRlIGwnaMO0dGU+IHJldG91cm5hbnQgbGUgbm9tCitkb25uw6kgZGFucyA8bm9tIGR1IE1YPiAocydpbCBlc3QgcHLDqXNlbnQpLCBvdSBzaW5vbiBsZSBub20gc3DDqWNpZmnDqSBkYW5zCitsJ29wdGlvbgorLkIgLS1teC10YXJnZXQKK3NpIGVsbGUgZXN0IHByw6lzZW50ZS4gU2lub24gcmV0b3VybmUgbGUgbm9tIGRlIGxhIG1hY2hpbmUKK3N1ciBsYXF1ZWxsZSBEbnNtYXNxIHRvdXJuZS4gTGEgdmFsZXVyIHBhciBkw6lmYXV0IChzcMOpY2lmacOpZSBkYW5zIGwnb3B0aW9uCisuQiAtLW14LXRhcmdldAorKSBlc3QgdXRpbGUgZGFucyB1biByw6lzZWF1IGxvY2FsIHBvdXIgcmVkaXJpZ2VyIGxlcyBjb3VycmllcnMKK8OpbGVjdHJvbmlxdWVzIHZlcnMgdW4gc2VydmV1ciBjZW50cmFsLiBMYSB2YWxldXIgZGUgcHLDqWbDqXJlbmNlIGVzdCBvcHRpb25uZWxsZQorZXQgdmF1dCBwYXIgZMOpZmF1dCAxIHNpIGVsbGUgbidlc3QgcGFzIHNww6ljaWZpw6llLiBQbHVzIGQndW5lIGVudHLDqWUgTVggcGV1dCDDqnRyZQorZm91cm5pZSBwb3VyIHVuIGjDtHRlIGRvbm7DqS4KKy5UUCAKKy5CIFwtdCwgLS1teC10YXJnZXQ9PG5vbSBkJ2jDtHRlPgorU3DDqWNpZmllIGxhIHLDqXBvbnNlIHBhciBkw6lmYXV0IGZvdXJuaWUgcGFyIERuc21hc3EgcG91ciBsZXMgcmVxdcOqdGVzIHN1ciBkZXMKK2VucmVnaXN0cmVtZW50cyBkZSB0eXBlIE1YLiBWb2lyCisuQiAtLW14LWhvc3QuCitTaQorLkIgLS1teC10YXJnZXQKK2VzdCBkb25uw6kgbWFpcyBwYXMgZGUKKy5CIC0tbXgtaG9zdCwKK2Fsb3JzIERuc21hc3EgcmV0b3VybmUgY29tbWUgcsOpcG9uc2UgdW4gZW5yZWdpc3RyZW1lbnQgTVgKK2NvbnRlbmFudCBsZSBub20gZCdow7R0ZSBzcMOpY2lmacOpIGRhbnMgbCdvcHRpb24KKy5CIC0tbXgtdGFyZ2V0Citwb3VyIHRvdXRlIHJlcXXDqnRlCitjb25jZXJuYW50IGxlIE1YIGRlIGxhIG1hY2hpbmUgc3VyIGxhcXVlbGxlIHRvdXJuZSBEbnNtYXNxLgorLlRQCisuQiBcLWUsIC0tc2VsZm14CitEw6lmaW5pdCwgcG91ciB0b3V0ZXMgbGVzIG1hY2hpbmVzIGxvY2FsZXMsIHVuIE1YIGNvcnJlc3BvbmRhbnQgw6AgbCdow7R0ZQorY29uc2lkw6lyw6kuIExlcyBtYWNoaW5lcyBsb2NhbGVzIHNvbnQgY2VsbGVzIGTDqWZpbmllcyBkYW5zIGxlIGZpY2hpZXIgL2V0Yy9ob3N0cworb3UgZGFucyB1biBiYWlsIERIQ1AuCisuVFAgCisuQiBcLUwsIC0tbG9jYWxteAorRMOpZmluaXQsIHBvdXIgdG91dGVzIGxlcyBtYWNoaW5lcyBsb2NhbGVzLCB1biBlbnJlZ2lzdHJlbWVudCBNWCBwb2ludGFudCBzdXIKK2wnaMO0dGUgc3DDqWNpZmnDqSBwYXIgbXgtdGFyZ2V0IChvdSBsYSBtYWNoaW5lIHN1ciBsYXF1ZWxsZSBEbnNtYXNxIHRvdXJuZSkuIExlcworbWFjaGluZXMgbG9jYWxlcyBzb250IGNlbGxlcyBkw6lmaW5pZXMgZGFucyBsZSBmaWNoaWVyIC9ldGMvaG9zdHMgb3UgZGFucyB1biBiYWlsCitESENQLgorLlRQCisuQiBcLVcgLS1zcnYtaG9zdD08X3NlcnZpY2U+LjxfcHJvdG9jb2xlPi5bPGRvbWFpbmU+XSxbPGNpYmxlPlssPHBvcnQ+Wyw8cHJpb3JpdMOpPlssPHBvaWRzPl1dXV0KK1Nww6ljaWZpZSB1biBlbnJlZ2lzdHJlbWVudCBETlMgZGUgdHlwZSBTUlYuIFZvaXIgbGEgUkZDMjc4MiBwb3VyIHBsdXMgZGUKK2TDqXRhaWxzLiBTaSBsZSBjaGFtcHMgPGRvbWFpbmU+IG4nZXN0IHBhcyBmb3VybmksIHByZW5kcyBwYXIgZMOpZmF1dCBsYSB2YWxldXIKK2ZvdXJuaWUgZGFucyBsJ29wdGlvbgorLkIgLS1kb21haW4uCitMYSB2YWxldXIgcGFyIGTDqWZhdXQgcG91ciBsZSBkb21haW5lIGVzdCB2aWRlIGV0IGxlIHBvcnQgcGFyIGTDqWZhdXQgZXN0IDEsIGFsb3JzCitxdWUgbGVzIHBvaWRzIGV0IHByaW9yaXTDqXMgcGFyIGTDqWZhdXQgc29udCAwLiBBdHRlbnRpb24gbG9yc3F1ZSB2b3VzIHRyYW5zcG9zZXoKK2RlcyB2YWxldXJzIGlzc3VlcyBkJ3VuZSBjb25maWd1cmF0aW9uIEJJTkQgOiBsZXMgcG9ydHMsIHBvaWRzIGV0IHByaW9yaXTDqXMgc29udAorZGFucyB1biBvcmRyZSBkaWZmw6lyZW50cy4gUG91ciB1biBzZXJ2aWNlL2RvbWFpbmUgZG9ubsOpLCBwbHVzIGQndW4KK2VucmVnaXN0cmVtZW50IFNSViBlc3QgYXV0b3Jpc8OpIGV0IHRvdXMgbGVzIGVucmVnaXN0cmVtZW50cyBxdWkgY2/Dr25jaWRlbnQgc29udAorcmV0b3VybsOpcyBkYW5zIGxhIHLDqXBvbnNlLgorLlRQCisuQiAtLWhvc3QtcmVjb3JkPTxub20+Wyw8bm9tPi4uLi5dWzxhZHJlc3NlIElQdjQ+XSxbPGFkcmVzc2UgSVB2Nj5dCitBam91dGUgZGVzIGVucmVnaXN0cmVtZW50cyBBLCBBQUFBIGV0IFBUUiBkYW5zIGxlIEROUy4gQ2VjaSBwZXJtZXQgZCdham91dGVyCit1biBvdSBwbHVzaWV1cnMgbm9tcyBkYW5zIGxlIEROUyBldCBkZSBsZXMgYXNzb2NpZXIgw6AgZGVzIGVucmVnaXN0cmVtZW50cyBJUHY0CisoQSkgb3UgSVB2NiAoQUFBQSkuIFVuIG5vbSBwZXV0IGFwcGFyYcOudHJlIGRhbnMgcGx1cyBkJ3VuZSBlbnRyw6llCisuQiBob3N0LXJlY29yZAorZXQgZGUgZmFpdCDDqnRyZSBhc3NvY2nDqSDDoCBwbHVzIGQndW5lIGFkcmVzc2UuIFNldWxlIGxhIHByZW1pw6hyZSBlbnRyw6llIGNyw6nDqWUKK2wnZW5yZWdpc3RyZW1lbnQgUFRSIGFzc29jacOpZSBhdSBub20uIENlY2kgY29ycmVzcG9uZCDDoCBsYSBtw6ptZSByw6hnbGUgcXVlIGNlbGxlCit1dGlsaXPDqWUgbG9ycyBkZSBsYSBsZWN0dXJlIGR1IGZpY2hpZXIgaG9zdHMuCitMZXMgb3B0aW9ucworLkIgaG9zdC1yZWNvcmQKK3NvbnQgY29uc2lkw6lyw6llcyBsdWVzIGF2YW50IGxlIGZpY2hpZXIgaG9zdHMsIGFpbnNpIHVuIG5vbSBhcHBhcmFpc3NhbnQgZGFucwordW5lIG9wdGlvbiBob3N0LXJlY29yZCBldCBkYW5zIGxlIGZpY2hpZXIgaG9zdHMgbidhdXJhIHBhcyBkJ2VucmVnaXN0cmVtZW50CitQVFIgYXNzb2Npw6kgw6AgbCdlbnRyw6llIGRhbnMgbGUgZmljaGllciBob3N0cy4gQSBsJ2ludmVyc2UgZHUgZmljaGllciBob3N0cywgbGVzCitub21zIG5lIHNvbnQgcGFzIMOpdGVuZHVzLCBtw6ptZSBsb3JzcXVlIGwnb3B0aW9uCisuQiBleHBhbmQtaG9zdHMKK2VzdCBhY3RpdsOpZS4gTGVzIG5vbXMgbG9uZ3MgZXQgbGVzIG5vbXMgY291cnRzIHBldXZlbnQgYXBwYXJhaXRyZSBkYW5zIGxhIG3Dqm1lCitlbnRyw6llIAorLkIgaG9zdC1yZWNvcmQsCitjLcOgLWQKKy5CIC0taG9zdC1yZWNvcmQ9bGFwdG9wLGxhcHRvcC50aGVrZWxsZXlzLm9yZywxOTIuMTY4LjAuMSwxMjM0OjoxMDAKKy5UUAorLkIgXC1ZLCAtLXR4dC1yZWNvcmQ9PG5vbT5bWyw8dGV4dGU+XSw8dGV4dGU+XQorRMOpZmluaXQgdW4gZW5yZWdpc3RyZW1lbnQgRE5TIGRlIHR5cGUgVFhULiBMYSB2YWxldXIgZGUgbCdlbnJlZ2lzdHJlbWVudCBUWFQgZXN0Cit1biBlbnNlbWJsZSBkZSBjaGHDrm5lcyBkZSBjYXJhY3TDqHJlcywgZG9uYyB1biBub21icmUgdmFyaWFibGUgZGUgY2hhw65uZXMgZGUKK2NhcmFjdMOocmVzIHBldXZlbnQgw6p0cmUgc3DDqWNpZmnDqWVzLCBzw6lwYXLDqWVzIHBhciBkZXMgdmlyZ3VsZXMuIFV0aWxpc2V6IGRlcworZ3VpbGxlbWV0cyBwb3VyIG1ldHRyZSB1bmUgdmlyZ3VsZSBkYW5zIHVuZSBjaGHDrm5lIGRlIGNhcmFjdMOocmVzLiBOb3RleiBxdWUgbGEKK2xvbmd1ZXVyIG1heGltYWxlIHBvdXIgdW5lIGNoYcOubmUgZXN0IGRlIDI1NSBjYXJhY3TDqHJlcywgbGVzIGNoYcOubmVzIHBsdXMKK2xvbmd1ZXMgw6l0YW50IGTDqWNvdXDDqWVzIGVuIG1vcmNlYXV4IGRlIDI1NSBjYXJhY3TDqHJlcyBkZSBsb25ncy4KKy5UUAorLkIgLS1wdHItcmVjb3JkPTxub20+Wyw8Y2libGU+XQorRMOpZmluaXQgdW4gZW5yZWdpc3RyZW1lbnQgRE5TIGRlIHR5cGUgUFRSLgorLlRQCisuQiAtLW5hcHRyLXJlY29yZD08bm9tPiw8b3JkcmU+LDxwcsOpZsOpcmVuY2U+LDxkcmFwZWF1eD4sPHNlcnZpY2U+LDxleHByLiByw6lndWxpw6hyZT5bLDxyZW1wbGFjZW1lbnQ+XQorUmV0b3VybmUgdW4gZW5yZWdpc3RyZW1lbnQgZGUgdHlwZSBOQVBUUiwgdGVsIHF1ZSBzcMOpY2lmacOpIGRhbnMgbGUgUkZDMzQwMy4KKy5UUAorLkIgLS1jbmFtZT08Y25hbWU+LDxjaWJsZT4KK1JldG91cm5lIHVuIGVucmVnaXN0cmVtZW50IGRlIHR5cGUgQ05BTUUgcXVpIGluZGlxdWUgcXVlIDxjbmFtZT4gZXN0IGVuCityw6lhbGl0w6kgPGNpYmxlPi4gSWwgZXhpc3RlIGRlcyBjb250cmFpbnRlcyBpbXBvcnRhbnRlcyBzdXIgbGEgdmFsZXVyCitjaWJsZTsgaWwgZG9pdCBzJ2FnaXIgZCd1biBub20gRE5TIHF1aSBlc3QgY29ubnUgZGUgZG5zbWFzcSB2aWEgL2V0Yy9ob3N0cworKG91IHVuIGZpY2hpZXIgaMO0dGVzIGFkZGl0aW9ubmVsKSwgdmlhIERIQ1AsIHZpYSBpbnRlcmZhY2UtLW5hbWUgb3UgcGFyIHVuIGF1dHJlCisuQiAtLWNuYW1lLgorU2kgdW5lIGNpYmxlIG5lIHNhdGlzZmFpdCBwYXMgY2VzIGNyaXTDqHJlcywgbGUgQ05BTUUgZXN0IGlnbm9yw6kuIExlIENOQU1FCitkb2l0IMOqdHJlIHVuaXF1ZSwgbWFpcyBpbCBlc3QgYXV0b3Jpc8OpIGQnYXZvaXIgcGx1cyBkJ3VuIENOQU1FIHBvaW50YW50Cit2ZXJzIGxhIG3Dqm1lIGNpYmxlLgorLlRQCisuQiAtLWRucy1ycj08bm9tPiw8bnVtw6lyby1SUj4sWzxkb25uw6llcyBoZXhhZMOpY2ltYWxlcz5dCitSZXRvdXJuZSB1biBlbnJlZ2lzdHJlbWVudCBETlMgYXJiaXRyYWlyZS4gTGUgbnVtw6lybyBjb3JyZXNwb25kIGF1IHR5cGUKK2QnZW5yZWdpc3RyZW1lbnQgKHF1aSBlc3QgdG91am91cnMgZGUgbGEgY2xhc3NlIENfSU4pLiBMYSB2YWxldXIgZGUKK2wnZW5yZWdpc3RyZW1lbnQgZXN0IGRvbm7DqWUgZGFucyBsZXMgZG9ubsOpZXMgaGV4YWTDqWNpbWFsZXMsIHF1aSBwZXV2ZW50CivDqnRyZSBkZSBsYSBmb3JtZSAwMToyMzo0NSwgMDEgMjMgNDUsKzAxMjM0NSBvdSBuJ2ltcG9ydGUgcXVlbGxlIGNvbWJpbmFpc29uLgorLlRQCisuQiAtLWludGVyZmFjZS1uYW1lPTxub20+LDxpbnRlcmZhY2U+CitEw6lmaW5pdCB1biBlbnRyZWdpc3RyZW1lbnQgRE5TIGFzc29jaWFudCBsZSBub20gYXZlYyBsJ2FkcmVzc2UgcHJpbWFpcmUgc3VyCitsJ2ludGVyZmFjZSBkb25uw6llIGVuIGFyZ3VtZW50LiBDZXR0ZSBvcHRpb24gc3DDqWNpZmllIHVuIGVucmVnaXN0cmVtZW50IGRlIHR5cGUKK0EgcG91ciBsZSBub20gZG9ubsOpIGVuIGFyZ3VtZW50IGRlIGxhIG3Dqm1lIGZhw6dvbiBxdWUgcydpbCDDqXRhaXQgZMOpZmluaSBwYXIgdW5lCitsaWduZSBkZSAvZXRjL2hvc3RzLCBzYXVmIHF1ZSBsJ2FkcmVzc2Ugbidlc3QgcGFzIGNvbnN0YW50ZSBtYWlzIGTDqXBlbmRhbnRlIGRlCitsJ2ludGVyZmFjZSBkw6lmaW5pZS4gU2kgbCdpbnRlcmZhY2UgZXN0IGluYWN0aXZlLCBub24gZXhpc3RhbnRlIG91IG5vbgorY29uZmlndXLDqWUsIHVuZSByw6lwb25zZSB2aWRlIGVzdCBmb3VybmllLiBVbiBlbnJlZ2lzdHJlbWVudCBpbnZlcnNlIChQVFIpIGVzdAorw6lnYWxlbWVudCBjcsOpw6kgcGFyIGNldHRlIG9wdGlvbiwgYXNzb2NpYW50IGwnYWRyZXNzZSBkZSBsJ2ludGVyZmFjZSBhdmVjIGxlIG5vbS4KK1BsdXMgZCd1biBub20gcGV1dCDDqnRyZSBhc3NvY2nDqSDDoCB1bmUgaW50ZXJmYWNlIGRvbm7DqWUgZW4gcsOpcMOpdGFudCBjZXR0ZSBvcHRpb24KK3BsdXNpZXVycyBmb2lzOyBkYW5zIGNlIGNhcywgbCdlbnJlZ2lzdHJlbWVudCBpbnZlcnNlIHBvaW50ZSB2ZXJzIGxlIG5vbSBmb3VybmkKK2RhbnMgbGEgcHJlbWnDqHJlIGluc3RhbmNlIGRlIGNldHRlIG9wdGlvbi4KKy5UUAorLkIgLS1zeW50aC1kb21haW49PGRvbWFpbmU+LDxwbGFnZSBkJ2FkcmVzc2VzPlssPHByw6lmaXhlPl0KK0Nyw6nDqSBkZXMgZW5yZWdpc3RyZW1lbnRzIEEvQUFBQSBvdSBQVFIgcG91ciB1bmUgcGxhZ2UgZCdhZHJlc3Nlcy4gTGVzCitlbnJlZ2lzdHJlbWVudHMgdXRpbGlzZW50IGwnYWRyZXNzZSBhaW5zaSBxdWUgbGVzIHBvaW50cyAob3UgbGVzIGRldXggcG9pbnRzCitkYW5zIGxlIGNhcyBkJ0lQdjYpIHJlbXBsYWPDqXMgcGFyIGRlcyB0aXJldHMuCisKK1VuIGV4ZW1wbGUgZGV2cmFpdCByZW5kcmUgY2VsYSBwbHVzIGNsYWlyIDoKK0xhIGNvbmZpZ3VyYXRpb24KKy5CIC0tc3ludGgtZG9tYWluPXRoZWtlbGxleXMub3JnLnVrLDE5Mi4xNjguMC4wLzI0LGludGVybmFsLQorcGVybWV0IGRlIHJldG91cm5lciBpbnRlcm5hbC0xOTItMTY4LTAtNTYudGhla2VsbGV5cy5vcmcudWsgbG9ycyBkJ3VuZSByZXF1w6p0ZQorc3VyIGwnYWRyZXNzZSAxOTIuMTY4LjAuNTYgZXQgdmljZS12ZXJzYSBwb3VyIGxhIHJlcXXDqnRlIGludmVyc2UuIExhIG3Dqm1lCitsb2dpcXVlIHMnYXBwbGlxdWUgcG91ciBJUHY2LCBhdmVjIGxhIHBhcnRpY3VsYXJpdMOpIHN1aXZhbnRlIDogbGVzIGFkcmVzc2VzCitJUHY2IHBvdXZhbnQgY29tbWVuY2VyIHBhciAnOjonLCBtYWlzIGxlcyBub21zIEROUyBuZSBwb3V2YW50IHBhcyBjb21tZW5jZXIKK3BhciAnLScsIHNpIGF1Y3VuIHByw6lmaXhlIG4nZXN0IGRvbm7DqSwgdW4gesOpcm8gZXN0IGFqb3V0w6kgZW4gZMOpYnV0IGRlIG5vbS4KK0FpbnNpLCA6OjEgZGV2aWVudCAwLS0xLgorCitMYSBwbGFnZSBkJ2FkcmVzc2VzIHBldXQtw6p0cmUgZGUgbGEgZm9ybWUKKzxhZHJlc3NlIElQPiw8YWRyZXNzZSBJUD4gb3UgPGFkcmVzc2UgSVA+LzxtYXNxdWUgcsOpc2VhdT4KKy5UUAorLkIgLS1hZGQtbWFjCitBam91dGUgbCdhZHJlc3NlIE1BQyBkdSByZXF1w6p0ZXVyIGF1eCByZXF1w6p0ZXMgRE5TIHRyYW5zbWlzZXMgYXV4IHNlcnZldXJzCithbW9udHMuIENlbGEgcGV1dCDDqnRyZSB1dGlsaXPDqSBkYW5zIHVuIGJ1dCBkZSBmaWx0cmFnZSBETlMgcGFyIGxlcyBzZXJ2ZXVycworYW1vbnRzLiBMJ2FkcmVzc2UgTUFDIHBldXQgdW5pcXVlbWVudCDDqnRyZSBham91dMOpZSBzaSBsZSByZXF1w6p0ZXVyIGVzdCBzdXIgbGUKK23Dqm1lIHNvdXMtcsOpc2VhdSBxdWUgbGUgc2VydmV1ciBkbnNtYXNxLiBWZXVpbGxleiBub3RlciBxdWUgbGUgbcOpY2FuaXNtZQordXRpbGlzw6kgcG91ciBlZmZlY3R1ZXIgY2VsYSAodW5lIG9wdGlvbiBFRE5TMCkgbidlc3QgcGFzIGVuY29yZSBzdGFuZGFyZGlzw6llLAorYXVzc2kgY2V0dGUgZm9uY3Rpb25hbGl0w6kgZG9pdCDDqnRyZSBjb25zaWTDqXLDqWUgY29tbWUgZXhww6lyaW1lbnRhbGUuIE5vdGV6CivDqWdhbGVtZW50IHF1J2V4cG9zZXIgbGVzIGFkcmVzc2VzIE1BQyBkZSBsYSBzb3J0ZSBwZXV0IGF2b2lyIGRlcyBpbXBsaWNhdGlvbnMKK2VuIHRlcm1lcyBkZSBzw6ljdXJpdMOpIGV0IGRlIHZpZSBwcml2w6llLiBMJ2F2ZXJ0aXNzZW1lbnQgZG9ubsOpIHBvdXIgLS1hZGQtc3VibmV0CitzJ2FwcGxpcXVlIMOpZ2FsZW1lbnQgaWNpLgorLlRQCisuQiAtLWFkZC1zdWJuZXRbWz08bG9uZ3VldXIgZGUgcHLDqWZpeGUgSVB2ND5dLDxsb25ndWV1ciBkZSBwcsOpZml4ZSBJUHY2Pl0KK1Jham91dGUgbCdhZHJlc3NlIGRlIHNvdXMtcsOpc2VhdSBkdSByZXF1w6p0ZXVyIGF1eCByZXF1w6p0ZXMgRE5TIHRyYW5zbWlzZXMKK2F1eCBzZXJ2ZXVycyBhbW9udHMuIExhIHF1YW50aXTDqSBkJ2FkcmVzc2VzIHRyYW5zbWlzZXMgZMOpcGVuZCBkdSBwYXJhbcOodHJlCitsb25ndWV1ciBkdSBwcsOpZml4ZSA6IDMyIChvdSAxMjggZGFucyBsZSBjYXMgZCdJUHY2KSB0cmFuc21ldCBsYSB0b3RhbGl0w6kKK2RlIGwnYWRyZXNzZSwgMCBuJ2VuIHRyYW5zbWV0IGF1Y3VuIG1haXMgbWFycXVlIG7DqWFubW9pbnMgbGEgcmVxdcOqdGUgY2UgcXVpCitmYWl0IHF1J2F1Y3VuIHNlcnZldXIgYW1vbnQgbmUgcmFqb3V0ZXJhIGQnYWRyZXNzZSBjbGllbnQuIExhIHZhbGV1ciBwYXIKK2TDqWZhdXQgZXN0IHrDqXJvIGV0IHBvdXIgSVB2NCBldCBwb3VyIElQdjYuIEEgbm90ZXIgcXVlIGxlcyBzZXJ2ZXVycyBhbW9udHMKK3BldXZlbnQtw6p0cmUgY29uZmlndXLDqXMgcG91ciByZXRvdXJuZXIgZGVzIHZhbGV1cnMgZGlmZsOpcmVudGVzIGVuIGZvbmN0aW9uCitkZSBjZXR0ZSBpbmZvcm1hdGlvbiBtYWlzIHF1ZSBsZSBjYWNoZSBkZSBkbnNtYXNxIG4nZW4gdGllbnQgcGFzIGNvbXB0ZS4KK1NpIHVuZSBpbnN0YW5jZSBkZSBkbnNtYXNxIGVzdCBjb25maWd1csOpZSBkZSB0ZWxsZSBtYW5pw6pyZSBxdWUgZGVzIHZhbGV1cnMKK2RpZmbDqXJlbnRlcyBwb3VycmFpZW50LcOqdHJlIHJlbmNvbnRyw6lzLCBhbG9ycyBsZSBjYWNoZSBkZXZyYWl0IMOqdHJlIGTDqXNhY3RpdsOpLgorLlRQCisuQiBcLWMsIC0tY2FjaGUtc2l6ZT08dGFpbGxlPgorRMOpZmluaXQgbGEgdGFpbGxlIGR1IGNhY2hlIGRlIERuc21hc3EuIExhIHZhbGV1ciBwYXIgZMOpZmF1dCBlc3QgZGUgMTUwIG5vbXMuCitEw6lmaW5pciB1bmUgdmFsZXVyIGRlIHrDqXJvIGTDqXNhY3RpdmUgbGUgY2FjaGUuCisuVFAKKy5CIFwtTiwgLS1uby1uZWdjYWNoZQorRMOpc2FjdGl2ZSBsZSAiY2FjaGUgbsOpZ2F0aWYiLiBMZSAiY2FjaGUgbsOpZ2F0aWYiIHBlcm1ldCDDoCBEbnNtYXNxIGRlIHNlIHNvdXZlbmlyCitkZXMgcsOpcG9uc2VzIGRlIHR5cGUgIm5vIHN1Y2ggZG9tYWluIiBmb3VybmllcyBwYXIgbGVzIHNlcnZldXJzIEROUyBlbiBhbW9udCBldAorZGUgZm91cm5pciBsZXMgcsOpcG9uc2VzIHNhbnMgYXZvaXIgw6AgcmUtdHJhbnNtZXR0cmUgbGVzIHJlcXXDqnRlcyBhdXggc2VydmV1cnMKK2Ftb250LgorLlRQCisuQiBcLTAsIC0tZG5zLWZvcndhcmQtbWF4PTxub21icmUgZGUgcmVxdcOqdGVzPgorRMOpZmluaXQgbGUgbm9tYnJlIG1heGltdW0gZGUgcmVxdcOqdGVzIEROUyBzaW11bHRhbsOpZXMuIExhIHZhbGV1ciBwYXIgZMOpZmF1dCBlc3QKKzE1MCwgY2UgcXVpIGRldnJhaXQgw6p0cmUgc3VmZmlzYW50IGRhbnMgbGEgbWFqb3JpdMOpIGRlcyBjb25maWd1cmF0aW9ucy4gTGEgc2V1bGUKK3NpdHVhdGlvbiBpZGVudGlmacOpZSBkYW5zIGxhcXVlbGxlIGNldHRlIHZhbGV1ciBuw6ljZXNzaXRlIGQnw6p0cmUgYXVnbWVudMOpZSBlc3QKK2xvcnNxdSd1biBzZXJ2ZXVyIHdlYiBhIGxhIHLDqXNvbHV0aW9uIGRlIG5vbSBhY3RpdsOpZSBwb3VyIGwnZW5yZWdpc3RyZW1lbnQgZGUKK3NvbiBqb3VybmFsIGRlcyByZXF1w6p0ZXMsIGNlIHF1aSBwZXV0IGfDqW7DqXJlciB1biBub21icmUgaW1wb3J0YW50IGRlIHJlcXXDqnRlcworc2ltdWx0YW7DqWVzLgorLlRQCisuQiAtLXByb3h5LWRuc3NlYworVW4gcmVzb2x2ZXVyIHN1ciB1bmUgbWFjaGluZSBjbGllbnRlIHBldXQgZWZmZWN0dWVyIGxhIHZhbGlkYXRpb24gRE5TU0VDIGRlCitkZXV4IGZhw6dvbnMgOiBpbCBwZXV0IGVmZmVjdHVlciBsdWktbcOqbWUgbGVzIG9ww6lyYXRpb25zIGRlIGNoaWZmcmVtZW50cyBzdXIKK2xhIHLDqXBvbnNlIHJlw6d1ZSwgb3UgaWwgcGV1dCBsYWlzc2VyIGxlIHNlcnZldXIgcsOpY3Vyc2lmIGFtb250IGZhaXJlIGxhCit2YWxpZGF0aW9uIGV0IHBvc2l0aW9ubmVyIHVuIGRyYXBlYXUgZGFucyBsYSByw6lwb25zZSBhdSBjYXMgb8O5IGNlbGxlLWNpIGVzdAorY29ycmVjdGUuIERuc21hc3Egbidlc3QgcGFzIHVuIHZhbGlkYXRldXIgRE5TU0VDLCBhdXNzaSBpbCBuZSBwZXV0IGVmZmVjdHVlcgorbGEgdmFsaWRhdGlvbiBjb21tZSB1biBzZXJ2ZXVyIGRlIG5vbSByw6ljdXJzaWYsIGNlcGVuZGFudCBpbCBwZXV0IHJldHJhbnNtZXR0cmUKK2xlcyByw6lzdWx0YXRzIGRlIHZhbGlkYXRpb24gZGUgc2VzIHNlcnZldXJzIGFtb250cy4gQ2V0dGUgb3B0aW9uIHBlcm1ldAorbCdhY3RpdmF0aW9uIGRlIGNldHRlIGZvbmN0aW9uYWxpdMOpLiBWb3VzIG5lIGRldnJpZXogdXRpbGlzZXIgY2VsYSBxdWUgc2kgdm91cworZmFpdGVzIGNvbmZpYW5jZSBhdXggc2VydmV1cnMgYW1vbnRzCisuSSBhaW5zaSBxdWUgbGUgcsOpc2VhdSBlbnRyZSB2b3VzIGV0IGV1eC4KK1NpIHZvdXMgdXRpbGlzZXogbGUgcHJlbWllciBtb2RlIEROU1NFQywgbGEgdmFsaWRhdGlvbiBwYXIgbGUgcmVzb2x2ZXVyIGRlcworY2xpZW50cywgY2V0dGUgb3B0aW9uIG4nZXN0IHBhcyByZXF1aXNlLiBEbnNtYXNxIHJldG91cm5lIHRvdWpvdXJzIHRvdXRlcyBsZXMKK2Rvbm7DqWVzIG7DqWNlc3NhaXJlcyBwYXIgdW4gY2xpZW50IHBvdXIgZWZmZWN0dWVyIGxhIHZhbGlkYXRpb24gbHVpLW3Dqm1lLgorLlRQCisKKy5CIC0tYXV0aC16b25lPTxkb21haW5lPlssPHNvdXMtcsOpc2VhdT5bLzxsb25ndWV1ciBkZSBwcsOpZml4ZT5dWyw8c291cy1yw6lzZWF1PlsvPGxvbmd1ZXVyIGRlIHByw6lmaXhlPl0uLi4uLl1dCitEw6lmaW5pZSB1bmUgem9uZSBETlMgcG91ciBsYXF1ZWxsZSBkbnNtYXNxIGFnaXQgZW4gdGVtcHMgcXVlIHNlcnZldXIgZmFpc2FudAorYXV0b3JpdMOpLiBMZXMgZW5yZWdpc3RyZW1lbnRzIEROUyBkw6lmaW5pcyBsb2NhbGVtZW50IGV0IGNvcnJlc3BvbmRhbnQgw6AgY2UKK2RvbWFpbmUgc2Vyb250IGZvdXJuaXMuIExlcyBlbnJlZ2lzdHJlbWVudHMgQSBldCBBQUFBIGRvaXZlbnQgc2Ugc2l0dWVyIGRhbnMKK2wndW4gZGVzIHNvdXMtcsOpc2VhdXggZMOpZmluaXMsIG91IGRhbnMgdW4gcsOpc2VhdSBjb3JyZXNwb25kYW50IMOgIHVuZSBwbGFnZSBESENQCisoY2UgY29tcG9ydGVtZW50IHBldXQtw6p0cmUgZMOpc2FjdGl2w6kgcGFyCisuQiBjb25zdHJ1Y3Rvci1ub2F1dGg6CispLiBMZSBvdSBsZXMgc291cy1yw6lzZWF1eCBzb250IMOpZ2FsZW1lbnQgdXRpbGlzw6kocykgcG91ciBkw6lmaW5pciBsZXMgZG9tYWluZXMKK2luLWFkZHIuYXJwYSBldCBpcDYuYXJwYSBzZXJ2YW50IMOgIGwnaW50ZXJyb2dhdGlvbiBETlMgaW52ZXJzZS4gU2kgbGEgbG9uZ3VldXIKK2RlIHByw6lmaXhlIG4nZXN0IHBhcyBzcMOpY2lmacOpZSwgZWxsZSBzZXJhIHBhciBkw6lmYXV0IGRlIDI0IHBvdXIgSVB2NCBldCA2NCBwb3VyCitJUHY2LiBEYW5zIGxlIGNhcyBkJ0lQdjQsIGxhIGxvbmd1ZXVyIGR1IG1hc3F1ZSBkZSByw6lzZWF1IGRldnJhaXQtw6p0cmUgZGUgOCwgMTYKK291IDI0LCBzYXVmIHNpIGVuIGNhcyBkZSBtaXNlIGVuIHBsYWNlIGQndW5lIGTDqWzDqWdhdGlvbiBkZSBsYSB6b25lIGluLWFkZHIuYXJwYQorY29uZm9ybWUgYXUgUkZDIDIzMTcuCisuVFAKKy5CIC0tYXV0aC1zb2E9PG51bcOpcm8gZGUgc8OpcmllPlssPG1haW50ZW5ldXIgZGUgem9uZSAoaG9zdG1hc3Rlcik+Wyw8cmFmcmFpY2hpc3NlbWVudD5bLDxub21icmUgZGUgcsOpZXNzYWlzPlssPGV4cGlyYXRpb24+XV1dXQorU3DDqWNpZmllIGxlcyBjaGFtcHMgZGUgbCdlbnJlZ2lzdHJlbWVudCBkZSB0eXBlIFNPQSAoU3RhcnQgT2YgQXV0aG9yaXR5KQorYXNzb2Npw6kgw6AgdW5lIHpvbmUgcG91ciBsYXF1ZWxsZSBsZSBzZXJ2ZXVyIGZhaXQgYXV0b3JpdMOpLiBBIG5vdGVyIHF1ZSBjZWxhIGVzdAorb3B0aW9ubmVsLCBsZXMgdmFsZXVycyBwYXIgZMOpZmF1dCBkZXZhbnQgY29udmVuaXIgw6AgbGEgbWFqb3JpdMOpIGRlcyBjYXMuCisuVFAKKy5CIC0tYXV0aC1zZWMtc2VydmVycz08ZG9tYWluZT5bLDxkb21haW5lPlssPGRvbWFpbmU+Li4uXV0KK1Nww6ljaWZpZSB1biBvdSBwbHVzaWV1cnMgc2VydmV1ciBkZSBub20gc2Vjb25kYWlyZXMgcG91ciB1bmUgem9uZSBwb3VyCitsYXF1ZWxsZSBkbnNtYXNxIGZhaXQgYXV0b3JpdMOpLiBDZXMgc2VydmV1cnMgZG9pdmVudC3DqnRyZSBjb25maWd1csOpcyBwb3VyCityw6ljdXDDqXJlciBhdXByw6hzIGRlIGRuc21hc3EgbGVzIGluZm9ybWF0aW9ucyBsacOpZXMgw6AgbGEgem9uZSBhdSB0cmF2ZXJzIGQndW4KK3RyYW5zZmVydCBkZSB6b25lLCBldCByw6lwb25kcmUgYXV4IHJlcXXDqnRlcyBwb3VyIHRvdXRlcyBsZXMgem9uZXMgcG91cgorbGVzcXVlbGxlcyBkbnNtYXNxIGZhaXQgYXV0b3JpdMOpLgorLlRQCisuQiAtLWF1dGgtcGVlcj08YWRyZXNzZSBJUD5bLDxhZHJlc3NlIElQPlssPGFkcmVzc2UgSVA+Li4uXV0KK1Nww6ljaWZpZSBsYSBvdSBsZXMgYWRyZXNzZXMgZGUgc2VydmV1cnMgc2Vjb25kYWlyZXMgYXV0b3Jpc8OpcyDDoCBpbml0aWVyIGRlcworcmVxdcOqdGVzIGRlIHRyYW5zZmVydCBkZSB6b25lIChBWEZSKSBwb3VyIGxlcyB6b25lcyBwb3VyIGxlc3F1ZWxsZXMKK2Ruc21hc3EgZmFpdCBhdXRvcml0w6kuIFNpIGNldHRlIG9wdGlvbiBuJ2VzdCBwYXMgZm91cm5pZSwgbGVzIHJlcXXDqnRlcyBBWEZSCitzZXJvbnQgYWNjZXB0w6llcyBwb3VyIHRvdXMgbGVzIHNlcnZldXJzIHNlY29uZGFpcmVzLgorLlRQIAorLkIgLS1jb25udHJhY2sKK0xpcyBsZSBtYXJxdWFnZSBkZSBzdWl2aSBkZSBjb25uZXhpb24gTGludXggYXNzb2Npw6kgYXV4IHJlcXXDqnRlcyBETlMgZW50cmFudGVzCitldCBwb3NpdGlvbm5lIGxhIG3Dqm1lIG1hcnF1ZSBhdSB0cmFmaWMgYW1vbnQgdXRpbGlzw6kgcG91ciByw6lwb25kcmUgw6AgY2VzCityZXF1w6l0ZXMuIENlbGEgcGVybWV0IGF1IHRyYWZpYyBnw6luw6lyw6kgcGFyIERuc21hc3EgZCfDqXRyZSBhc3NvY2nDqSBhdXggcmVxdcOqdGVzCitsJ2F5YW50IGTDqWNsZW5jaMOpLCBjZSBxdWkgZXN0IHByYXRpcXVlIHBvdXIgbGEgZ2VzdGlvbiBkZSBsYSBiYW5kZSBwYXNzYW50ZQorKGFjY291bnRpbmcpIGV0IGxlIGZpbHRyYWdlIChmaXJld2FsbCkuIERuc21hc3EgZG9pdCBwb3VyIGNlbGEgw6p0cmUgY29tcGlsw6kKK2F2ZWMgbGUgc3VwcG9ydCBjb25udHJhY2ssIGxlIG5veWF1IGRvaXQgw6lnYWxlbWVudCBpbmNsdXJlIGNvbm50cmFjayBldCDDqnRyZQorY29uZmlndXLDqSBwb3VyIGNlbGEuIENldHRlIG9wdGlvbiBuZSBwZXV0IHBhcyDDqnRyZSBjb21iaW7DqWUgYXZlYworLS1xdWVyeS1wb3J0LgorLlRQCisuQiBcLUYsIC0tZGhjcC1yYW5nZT1bdGFnOjxsYWJlbD5bLHRhZzo8bGFiZWw+XSxdW3NldDo8bGFiZWw+XSxdPGFkcmVzc2UgZGUgZMOpYnV0PlssPGFkcmVzc2UgZGUgZmluPl1bLDxtb2RlPl1bLDxtYXNxdWUgZGUgcsOpc2VhdT5bLDxicm9hZGNhc3Q+XV1bLDxkdXLDqWUgZGUgYmFpbD5dCisuVFAKKy5CIFwtRiwgLS1kaGNwLXJhbmdlPVt0YWc6PGxhYmVsPlssdGFnOjxsYWJlbD5dLF1bc2V0OjxsYWJlbD5dLF08YWRkcmVzc2UgSVB2NiBkZSBkw6lidXQ+Wyw8YWRyZXNzZSBJUHY2IGRlIGZpbj58Y29uc3RydWN0b3I6PGludGVyZmFjZT5dWyw8bW9kZT5dWyw8bG9uZ3VldXIgZGUgcHLDqWZpeGU+XVssPGR1csOpZSBkZSBiYWlsPl0KKworQWN0aXZlIGxlIHNlcnZldXIgREhDUC4gTGVzIGFkcmVzc2VzIHNlcm9udCBkb25uw6llcyBkYW5zIGxhIHBsYWdlIGNvbXByaXNlIGVudHJlCis8YWRyZXNzZSBkZSBkw6lidXQ+IGV0IDxhZHJlc3NlIGRlIGZpbj4gZXQgw6AgcGFydGlyIGRlcyBhZHJlc3NlcyBkw6lmaW5pZXMKK3N0YXRpcXVlbWVudCBkYW5zIGwnb3B0aW9uCisuQiBkaGNwLWhvc3QuCitTaSB1bmUgZHVyw6llIGRlIGJhaWwgZXN0IGRvbm7DqWUsIGFsb3JzIGxlcyBiYXV4IHNlcm9udCBkb25uw6lzIHBvdXIgY2V0dGUKK2R1csOpZS4gTGEgZHVyw6llIGRlIGJhaWwgZXN0IGRvbm7DqWUgZW4gc2Vjb25kZXMsIGVuIG1pbnV0ZXMgKGV4ZW1wbGUgOiA0NW0pLAorZW4gaGV1cmVzIChleGVtcGxlIDogMWgpIG91IMOqdHJlIGxhIGNoYWluZSBkZSBjYXJhY3TDqHJlICJpbmZpbml0ZSIgcG91ciB1bmUKK2R1csOpZSBpbmTDqXRlcm1pbsOpZS4gU2kgYXVjdW5lIHZhbGV1ciBuJ2VzdCBkb25uw6llLCB1bmUgZHVyw6llIGRlIGJhaWwgcGFyIGTDqWZhdXQKK2RlIHVuZSBoZXVyZSBlc3QgYXBwbGlxdcOpZS4gTGEgdmFsZXVyIG1pbmltdW0gcG91ciB1biBiYWlsIERIQ1AgZXN0IGRlIDIKK21pbnV0ZXMuCisKK1BvdXIgbGVzIHBsYWdlcyBJUHY2LCBsYSBkdXLDqWUgZGUgYmFpbCBwZXV0LcOqdHJlIMOpZ2FsZSBhdSBtb3QtY2xlZiAiZGVwcmVjYXRlZCIKKyhvYnNvbMOodGUpOyBDZWxhIHBvc2l0aW9ubmUgbGEgZHVyw6llIGRlIHZpZSBwcsOpZsOpcsOpZSBlbnZvecOpZSBkYW5zIGxlcyBiYXV4IERIQ1AKK291IGxlcyBhbm5vbmNlcyByb3V0ZXVycyDDoCB6w6lybywgY2UgcXVpIGluY2l0ZSBsZXMgY2xpZW50cyDDoCB1dGlsaXNlciBkJ2F1dHJlcworYWRyZXNzZXMgYXV0YW50IHF1ZSBwb3NzaWJsZSwgcG91ciB0b3V0ZSBub3V2ZWxsZSBjb25uZXhpb24sIGVuIHByw6lhbGFibGUgw6AKK2xhIHJlbnVtw6lyb3RhdGlvbi4KKworQ2V0dGUgb3B0aW9uIHBldXQgw6p0cmUgcsOpcMOpdMOpZSwgYXZlYyBkaWZmw6lyZW50ZXMgYWRyZXNzZXMsCitwb3VyIGFjdGl2ZXIgbGUgc2VydmljZSBESENQIHN1ciBwbHVzIGQndW4gcsOpc2VhdS4gUG91ciBkZXMgcsOpc2VhdXggZGlyZWN0ZW1lbnQKK2Nvbm5lY3TDqXMgKGMnZXN0LcOgLWRpcmUgZGVzIHLDqXNlYXV4IGRhbnMgbGVzcXVlbHMgbGEgbWFjaGluZSBzdXIgbGFxdWVsbGUgdG91cm5lCitEbnNtYXNxIHBvc3PDqGRlIHVuZSBpbnRlcmZhY2UpLCBsZSBtYXNxdWUgZGUgcsOpc2VhdSBlc3Qgb3B0aW9ubmVsIDogRG5zbWFzcSBsYQorZMOpdGVybWluZXJhIMOgIHBhcnRpciBkZSBsYSBjb25maWd1cmF0aW9uIGRlcyBpbnRlcmZhY2VzLgorCitQb3VyIGxlcyByw6lzZWF1eCBwb3VyIGxlc3F1ZWxzIGxlIHNlcnZpY2UgREhDUCBzZSBmYWl0IHZpYSB1biByZWxhaXMgREhDUAorKCJyZWxheSBhZ2VudCIpLCBEbnNtYXNxIGVzdCBpbmNhcGFibGUgZGUgZMOpdGVybWluZXIgbGUgbWFzcXVlIHBhciBsdWktbcOqbWUsCithdXNzaSBpbCBkb2l0IMOqdHJlIHNww6ljaWZpw6ksIGZhdXRlIGRlIHF1b2kgRG5zbWFzcSBlc3NhaWVyYSBkZSBsZSBkZXZpbmVyIGVuCitmb25jdGlvbiBkZSBsYSBjbGFzc2UgKEEsIEIgb3UgQykgZGUgbCdhZHJlc3NlIHLDqXNlYXUuIEwnYWRyZXNzZSBkZSBicm9hZGNhc3QKK2VzdCB0b3Vqb3VycyBvcHRpb25uZWxsZS4KKworSWwgZXN0IHRvdWpvdXJzIHBvc3NpYmxlIGQnYXZvaXIgcGx1cyBkJ3VuZSBwbGFnZSBESENQIHBvdXIgdW4gbcOqbWUKK3NvdXMtcsOpc2VhdS4KKworUG91ciBJUHY2LCBsZXMgcGFyYW3DqHRyZXMgc29udCBsw6lnw6hyZW1lbnQgZGlmZsOpcmVudHMgOiBhdSBsaWV1IGQndW4gbWFzcXVlIGRlCityw6lzZWF1IGV0IGQndW5lIGFkcmVzc2UgZGUgYnJvYWRjYXN0LCBpbCBleGlzdGUgdW5lIGxvbmd1ZXVyIGRlIHByw6lmaXhlCitvcHRpb25uZWxsZS4gU2kgZWxsZSBlc3Qgb21pc2UsIGxhIHZhbGV1ciBwYXIgZMOpZmF1dCBlc3QgNjQuIMOAIGxhIGRpZmbDqXJlbmNlCitkJ0lQdjQsIGxhIGxvbmd1ZXVyIGRlIHByw6lmaXhlIG4nZXN0IHBhcyBhdXRvbWF0aXF1ZW1lbnQgZMOpZHVpdGUgZGUgbGEKK2NvbmZpZ3VyYXRpb24gZGUgbCdpbnRlcmZhY2UuIExhIHRhaWxsZSBtaW5pbWFsZSBwb3VyIGxhIGxvbmd1ZXVyIGRlIHByw6lmaXhlCitlc3QgNjQuCisKK1BvdXIgSVB2NiAoZXQgSVB2NiB1bmlxdWVtZW50KSwgaWwgZXN0IHBvc3NpYmxlIGRlIGTDqWZpbmlyIGxlcyBwbGFnZXMgZCd1bmUKK2F1dHJlIGZhw6dvbi4gRGFucyBjZSBjYXMsIGwnYWRyZXNzZSBkZSBkw6lwYXJ0IGV0IGwnYWRyZXNzZSBkZSBmaW4gb3B0aW9ubmVsbGUKK2NvbnRpZW5uZW50IHVuaXF1ZW1lbnQgbGEgcGFydGllIHLDqXNlYXUgKHBhciBleGVtcGxlIDo6MSkgZXQgc29udCBzdWl2aWVzIHBhcgorLkIgY29uc3RydWN0b3I6PGludGVyZmFjZT4uCitDZWxhIGZvcm1lIHVuIG1vZMOobGUgZMOpY3JpdmFudCBjb21tZW50IGNvbnN0cnVpcmUgbGEgcGxhZ2UsIMOgIHBhcnRpciBkZXMKK2FkcmVzc2VzIGFzc2lnbsOpZXMgw6AgbCdpbnRlcmZhY2UuIFBhciBleGVtcGxlCisKKy5CIC0tZGhjcC1yYW5nZT06OjEsOjo0MDAsY29uc3RydWN0b3I6ZXRoMAorCitwcm92b3F1ZSBsYSByZWNoZXJjaGUgZCdhZHJlc3NlcyBkZSBsYSBmb3JtZSA8csOpc2VhdT46OjEgc3VyIGV0aDAgZXQgY3LDqWUgdW5lCitwbGFnZSBhbGxhbnQgZGUgPHLDqXNlYXU+OjoxIMOgIDxyw6lzZWF1Pjo0MDAuIFNpIHVuZSBpbnRlcmZhY2UgZXN0IGFzc2lnbsOpZSDDoAorcGx1cyBkJ3VuIHLDqXNlYXUsIGxlcyBwbGFnZXMgY29ycmVzcG9uZGFudGVzIHNlcm9udCBhdXRvbWF0aXF1ZW1lbnQgY3LDqcOpZXMsCityZW5kdWVzIG9ic29sw6h0ZXMgcHVpcyBzdXBwcmltw6llcyBsb3JzcXVlIGwnYWRyZXNzIGVzdCByZW5kdWUgb2Jzb2zDqHRlIHB1aXMKK3N1cHByaW3DqWUuIExlIG5vbSBkZSBsJ2ludGVyZmFjZSBwZXV0IMOqdHJlIHNww6ljaWZpw6kgYXZlYyB1biBjYXJhY3TDqHJlIGpva2VyICcqJworZmluYWwuCisKK3Byb3ZvcXVlIGxhIHJlY2hlcmNoZSBkJ2FkcmVzc2VzIHN1ciBldGgwIGV0IGNyw6llIHVuZSBwbGFnZSBhbGxhbnQgZGUKKzxyw6lzZWF1Pjo6MSDDoCA8csOpc2VhdT46NDAwLiBTaSBsJ2ludGVyZmFjZSBlc3QgYXNzaWduw6llIMOgCitwbHVzIGQndW4gcsOpc2VhdSwgbGVzIHBsYWdlcyBjb3JyZXNwb25kYW50ZXMgc2Vyb250IHJlc3BlY3RpdmVtZW50CithdXRvbWF0aXF1ZW1lbnQgY3LDqcOpZXMsIHJlbmR1ZXMgb2Jzb2zDqHRlcyBldCBzdXBwcmltw6llcyBsb3JzcXVlIGwnYWRyZXNzZQorZXN0IHJlbmR1ZSBvYnNvbMOodGUgZXQgc3VwcHJpbcOpZS4gTGUgbm9tIGRlIGwnaW50ZXJmYWNlIHBldXQgw6p0cmUgc3DDqWNpZmnDqSBhdmVjCit1biBjYXJhY3TDqHJlIGpva2VyICcqJyBmaW5hbC4gTGVzIGFkcmVzc2VzIGF1dG9jb25maWd1csOpZXMsIHByaXbDqWVzIG91CitvYnNvbMOodGVzIG5lIGNvbnZpZW5uZW50IHBhcy4KKworU2kgdW5lIHBsYWdlIGRoY3AtcmFuZ2UgZXN0IHVuaXF1ZW1lbnQgdXRpbGlzw6llIHBvdXIgZHUgREhDUCBzYW5zLcOpdGF0CisoInN0YXRlbGVzcyIpIG91IGRlIGwnYXV0b2NvbmZpZ3VyYXRpb24gc2FucyDDqXRhdCAoIlNMQUFDIiksIGFsb3JzIGwnYWRyZXNzZQorcGV1dC3DqnRyZSBpbmRpcXXDqWUgc291cyBsYSBmb3JtZSAnOjonCisKKy5CIC0tZGhjcC1yYW5nZT06Oixjb25zdHJ1Y3RvcjpldGgwCisKK0lsIGV4aXN0ZSB1bmUgdmFyaWFudGUgZGUgbGEgc3ludGF4ZSBjb25zdHJ1Y3RvcjogcXVpIGNvbnNpc3RlIGVuIGwndXRpbGlzYXRpb24KK2R1IG1vdC1jbGVmCisuQiBjb25zdHJ1Y3Rvci1ub2F1dGguCitWb2lyCisuQiAtLWF1dGgtem9uZQorcG91ciBkZXMgZXhwbGljYXRpb25zIMOgIGNlIHN1amV0LgorCitMJ2lkZW50aWZpYW50IGRlIGxhYmVsIG9wdGlvbm5lbAorLkIgc2V0OjxsYWJlbD4KK2ZvdXJuaWUgdW5lIMOpdGlxdWV0dGUgYWxwaGFudW3DqXJpcXVlIHF1aSBpZGVudGlmaWUgY2UgcsOpc2VhdSwgYWZpbiBkZSBwZXJtZXR0cmUKK2xhIGZvdXJuaXR1cmUgZCdvcHRpb25zIERIQ1Agc3DDqWNpZmlxdWVzIMOgIGNoYXF1ZSByw6lzZWF1LgorTG9yc3F1ZSBwcsOpZml4w6kgcGFyICd0YWc6JywgbGEgc2lnbmlmaWNhdGlvbiBjaGFuZ2UsIGV0IGF1IGxpZXUgZGUgZMOpZmluaXIgdW4KK2xhYmVsLCBpbCBkw6lmaW5pdCBsZSBsYWJlbCBwb3VyIGxhcXVlbGxlIGxhIHLDqGdsZSBzJ2FwcGxpcXVlLiBVbiBzZXVsIGxhYmVsIHBldXQtCivDqnRyZSBkw6lmaW5pIG1haXMgcGx1c2lldXJzIGxhYmVscyBwZXV2ZW50IGNvw69uY2lkZXIuCisKK0xlIG1vdCBjbGVmIG9wdGlvbm5lbCA8bW9kZT4gcGV1dCDDqnRyZSDDqWdhbCDDoAorLkIgc3RhdGljCisoInN0YXRpcXVlIikgY2UgcXVpIGluZGlxdWUgw6AgRG5zbWFzcSBkJ2FjdGl2ZXIgbGUgc2VydmljZSBESENQIHBvdXIgbGUgcsOpc2VhdQorc3DDqWNpZmnDqSwgbWFpcyBkZSBuZSBwYXMgYWN0aXZlciBsJ2FsbG9jYXRpb24gZHluYW1pcXVlIGQnYWRyZXNzZXMgSVAgOiBTZXVscworbGVzIGjDtHRlcyBwb3Nzw6lkYW50IGRlcyBhZHJlc3NlcyBJUCBzdGF0aXF1ZXMgZm91cm5pZXMgdmlhIAorLkIgZGhjcC1ob3N0CitvdSBwcsOpc2VudGVzIGRhbnMgbGUgZmljaGllciAvZXRjL2V0aGVycyBzZXJvbnQgYWxvcnMgc2VydmlzIHBhciBsZSBESENQLiBJbCBlc3QKK3Bvc3NpYmxlIGQnYWN0aXZlciB1biBtb2RlICJmb3VycmUtdG91dCIgZW4gZMOpZmluaXNzYW50IHVuIHLDqXNlYXUgc3RhdGlxdWUKK2NvbXBvcnRhbnQgdW5pcXVlbWVudCBkZXMgesOpcm9zLCBjJ2VzdCDDoCBkaXJlIDoKKy5CIC0tZGhjcD1yYW5nZT06OixzdGF0aWMKK0NlbGEgcGVybWV0IGRlIHJldG91cm5lciBkZXMgcsOpcG9uc2VzIMOgIHRvdXMgbGVzIHBhcXVldHMgZGUgdHlwZQorSW5mb3JtYXRpb24tcmVxdWVzdCAocmVxdcOqdGUgZCdpbmZvcm1hdGlvbikgZW4gbW9kZSBESENQdjYgc2FucyDDqXRhdCBzdXIgbGUKK3NvdXMtcsOpc2VhdSBjb25maWd1csOpLiAKKworUG91ciBJUHY0LCBsZSA8bW9kZT4gcGV1dCBlc3Qgw6lnYWwgw6AKKy5CIHByb3h5CissIGF1cXVlbCBjYXMgRG5zbWFzcSBmb3VybmlyYSB1biBzZXJ2aWNlIGRlIERIQ1AgcHJveHkgcG91ciBsZSBzb3VzLXLDqXNlYXUKK3Nww6ljaWZpw6kuICh2b2lyCisuQiBweGUtcHJvbXB0CitldAorLkIgcHhlLXNlcnZpY2UKK3BvdXIgcGx1cyBkZSBkw6l0YWlscykuCisKK1BvdXIgSVB2NiwgbGUgbW9kZSBwZXV0LcOqdHJlIHVuZSBjb21iaW5haXNvbiBkZXMgdmFsZXVycworLkIgcmEtb25seSwgc2xhYWMsIHJhLW5hbWVzLCByYS1zdGF0ZWxlc3MsIG9mZi1saW5rLgorCisuQiByYS1vbmx5CitpbmRpcXVlIMOgIGRuc21hc3EgZGUgbidlZmZlY3R1ZXIgcXVlIGRlcyBhbm5vbmNlcyBkZSByb3V0ZXVyIChSb3V0ZXIKK0FkdmVydGlzZW1lbnQsIFJBKSBzdXIgY2Ugc291cy1yw6lzZWF1LCBldCBkZSBuZSBwYXMgZmFpcmUgZGUgREhDUC4KKworLkIgc2xhYWMKK2luZGlxdWUgw6AgZG5zbWFzcSBkJ2VmZmVjdHVlciBkZXMgYW5ub25jZXMgZGUgcm91dGV1ciBzdXIgY2Ugc291cy1yw6lzZWF1CitldCBkZSBwb3NpdGlvbm5lciBkYW5zIGNlbGxlcy1jaSBsZSBiaXQgQSwgYWZpbiBxdWUgbGVzIGNsaWVudHMgdXRpbGlzZW50CitkZXMgYWRyZXNzZXMgU0xBQUMuIExvcnNxdSd1dGlsaXPDqSBjb25qb2ludGVtZW50IGF2ZWMgdW5lIHBsYWdlIERIQ1Agb3UgZGVzCithZmZlY3RhdGlvbnMgc3RhdGlxdWVzIGQnYWRyZXNzZXMgREhDUCwgbGVzIGNsaWVudHMgZGlzcG9zZXJvbnQgw6AgbGEgZm9pcworZCdhZHJlc3NlcyBESENQIGFzc2lnbsOpZXMgZXQgZCdhZHJlc3NlcyBTTEFBQy4KKworLkIgcmEtc3RhdGVsZXNzCitpbmRpcXVlIMOgIGRuc21hc3EgZCdlZmZlY3R1ZXIgZGVzIGFubm9uY2VzIGRlIHJvdXRldXIgYXZlYyBsZXMgYml0cyAwIGV0IEEKK3Bvc2l0aW9ubsOpcywgZXQgZGUgZm91cm5pciB1biBzZXJ2aWNlIERIQ1Agc2FucyDDqXRhdCAoInN0YXRlbGVzcyIpLiBMZXMgY2xpZW50cwordXRpbGlzZXJvbnQgZGVzIGFkcmVzc2VzIFNMQUFDLCBldCB1dGlsaXNlcm9udCBESENQIHBvdXIgdG91dGVzIGxlcyBhdXRyZXMKK2luZm9ybWF0aW9ucyBkZSBjb25maWd1cmF0aW9uLgorCisuQiByYS1uYW1lcworYWN0aXZlIHVuIG1vZGUgcXVpIGZvdXJuaSBkZXMgbm9tcyBETlMgYXV4IGjDtHRlcyBmb25jdGlvbm5hbnQgZW4gZG91YmxlIHBpbGUKKygiZHVhbCBzdGFjayIpIGV0IGNvbmZpZ3Vyw6lzIHBvdXIgZmFpcmUgZHUgU0xBQUMgZW4gSVB2Ni4gRG5zbWFzcSB1dGlsaXNlIGxlCitiYWlsIElQdjQgZGUgbCdow7R0ZSBhZmluIGRlIGTDqXJpdmVyIGxlIG5vbSwgbGUgc2VnbWVudCBkZSByw6lzZWF1IGV0IGwnYWRyZXNzZQorTUFDIGV0IGFzc3VtZSBxdWUgbCdow7R0ZSBkaXNwb3NlcmEgZCd1bmUgYWRyZXNzZSBJUHY2IGNhbGN1bMOpZSB2aWEgbCdhbGdvcml0aG1lCitTTEFBQywgc3VyIGxlIG3Dqm1lIHNlZ21lbnQgZGUgcsOpc2VhdS4gVW4gcGluZyBlc3QgZW52b3nDqSDDoCBsJ2FkcmVzc2UsIGV0IHNpIHVuZQorcsOpcG9uc2UgZXN0IG9idGVudWUsIHVuIGVucmVnaXN0cmVtZW50IEFBQUEgZXN0IHJham91dMOpIGRhbnMgbGUgRE5TIHBvdXIgY2V0dGUKK2FkcmVzc2UgSVB2Ni4gVmV1aWxsZXotbm90ZXIgcXVlIGNlbGEgbidhcnJpdmUgcXVlIHBvdXIgbGVzIHLDqXNlYXV4IGRpcmVjdGVtZW50Citjb25uZWN0w6lzIChldCBub24gY2V1eCBwb3VyIGxlc3F1ZWxzIERIQ1Agc2UgZmFpdCB2aWEgcmVsYWkpLCBldCBuZQorZm9uY3Rpb25uZXJhIHBhcyBzaSB1biBow7R0ZSB1dGlsaXNlIGxlcyAiZXh0ZW5zaW9ucyBkZSB2aWUgcHJpdsOpZSIKKygicHJpdmFjeSBleHRlbnNpb25zIikuCisuQiByYS1uYW1lcworcGV1dC3DqnRyZSBjb21iaW7DqSBhdmVjCisuQiByYS1zdGF0ZWxlc3MKK2V0CisuQiBzbGFhYy4KKworLkIgb2ZmLWxpbmsKK2luZGlxdWUgw6AgZG5zbWFzcSBkJ2Fubm9uY2VyIGxlIHByw6lmaXhlIHNhbnMgbGUgYml0IEwgKHN1ciBsaWVuKS4KKworLlRQCisuQiBcLUcsIC0tZGhjcC1ob3N0PVs8YWRyZXNzZSBtYXTDqXJpZWxsZT5dWyxpZDo8aWRlbnRpZmlhbnQgY2xpZW50PnwqXVssc2V0OjxsYWJlbD5dWyw8YWRyZXNzZSBJUD5dWyw8bm9tIGQnaMO0dGU+XVssPGR1csOpZSBkZSBiYWlsPl1bLGlnbm9yZV0KK1Nww6ljaWZpZSBsZXMgcGFyYW3DqHRyZXMgREhDUCByZWxhdGlmcyDDoCB1biBow7R0ZS4gQ2VsYSBwZXJtZXQgw6AgdW5lIG1hY2hpbmUKK3Bvc3PDqWRhbnQgdW5lIGFkcmVzc2UgbWF0w6lyaWVsbGUgc3DDqWNpZmlxdWUgZGUgc2Ugdm9pciB0b3Vqb3VycyBhbGxvdcOpZSBsZXMKK23Dqm1lcyBub20gZCdow7R0ZSwgYWRyZXNzZSBJUCBldCBkdXLDqWUgZGUgYmFpbC4gVW4gbm9tIGQnaMO0dGUgc3DDqWNpZmnDqSBjb21tZQorY2VjaSByZW1wbGFjZSBsZSBub20gZm91cm5pIHBhciBsZSBjbGllbnQgREhDUCBkZSBsYSBtYWNoaW5lIGjDtHRlLiBJbCBlc3QKK8OpZ2FsZW1lbnQgcG9zc2libGUgZCdvbWV0dHJlIGwnYWRyZXNzZSBtYXTDqXJpZWxsZSBldCBkJ2luY2x1cmUgbGUgbm9tIGQnaMO0dGUsCithdXF1ZWwgY2FzIGwnYWRyZXNzZSBJUCBldCBsYSBkdXLDqWUgZGUgYmFpbCBzJ2FwcGxpcXVlcm9udCDDoCB0b3V0ZSBtYWNoaW5lIHNlCityw6ljbGFtYW50IGRlIGNlIG5vbS4gUGFyIGV4ZW1wbGUKKy5CIC0tZGhjcC1ob3N0PTAwOjIwOmUwOjNiOjEzOmFmLHdhcCxpbmZpbml0ZSAKK3Nww6ljaWZpZSDDoCBEbnNtYXNxIGRlIGZvdXJuaXIgw6AgbGEgbWFjaGluZSBkJ2FkcmVzc2UgbWF0w6lyaWVsbGUKKzAwOjIwOmUwOjNiOjEzOmFmIGxlIG5vbSwgZXQgdW4gYmFpbCBkZSBkdXLDqWUgaW5kw6l0ZXJtaW7DqWUuCisKKy5CIC0tZGhjcC1ob3N0PWxhcCwxOTIuMTY4LjAuMTk5IAorc3DDqWNpZmllIMOgIERuc21hc3EgZCdhbGxvdWVyIHRvdWpvdXJzIMOgIGxhIG1hY2hpbmUgcG9ydGFudCBsZSBub20gbGFwCitsJ2FkcmVzc2UgSVAgMTkyLjE2OC4wLjE5OS4KKworTGVzIGFkcmVzc2VzIGFsbG91w6llcyBkZSBsYSBzb3J0ZSBuZSBzb250IHBhcyBjb250cmFpbnRlcyDDoCB1bmUgcGxhZ2UgZCdhZHJlc3NlCitzcMOpY2lmacOpZSBwYXIgdW5lIG9wdGlvbiAtLWRoY3AtcmFuZ2UsIG1haXMgZWxsZXMgc2UgdHJvdXZlciBkYW5zIGxlIG3Dqm1lCitzb3VzLXLDqXNlYXUgcXUndW5lIHBsYWdlIGRoY3AtcmFuZ2UgdmFsaWRlLiBQb3VyIGxlcyBzb3VzLXLDqXNlYXV4IHF1aSBuJ29udCBwYXMKK2Jlc29pbiBkJ2FkcmVzc2VzIGR5bmFtaXF1ZW1lbnQgYWxsb3XDqWVzLCB1dGlsaXNlciBsZSBtb3QtY2xlZiAic3RhdGljIiBkYW5zIGxhCitkw6ljbGFyYXRpb24gZGUgcGxhZ2UgZCdhZHJlc3NlcyBkaGNwLXJhbmdlLgorCitJbCBlc3QgcG9zc2libGUgZCd1dGlsaXNlciBkZXMgaWRlbnRpZmlhbnRzIGNsaWVudHMgKGFwcGVsbMOpICJEVUlEIGNsaWVudCIgZGFucworbGUgbW9uZGUgSVB2NikgcGx1dMO0dCBxdWUgZGVzIGFkcmVzc2VzIG1hdMOpcmllbGxlcyBwb3VyIGlkZW50aWZpZXIgbGVzIGjDtHRlcywKK2VuIHByw6lmaXhhbnQgY2V1eC1jaSBwYXIgJ2lkOicuIEFpbnNpLCAKKy5CIC0tZGhjcC1ob3N0PWlkOjAxOjAyOjAzOjA0LC4uLi4uIAorcsOpZsOocmUgw6AgbCdow7R0ZSBkJ2lkZW50aWZpYW50IDAxOjAyOjAzOjA0LiBJbCBlc3Qgw6lnYWxlbWVudCBwb3NzaWJsZSBkZQorc3DDqWNpZmllciBsJ2lkZW50aWZpYW50IGNsaWVudCBzb3VzIGxhIGZvcm1lIGQndW5lIGNoYcOubmUgZGUgY2FyYWN0w6hyZXMsIGNvbW1lCitjZWNpIDoKKy5CIC0tZGhjcC1ob3N0PWlkOmlkZW50aWZpYW50Y2xpZW50c291c2Zvcm1lZGVjaGFpbmUsLi4uLi4gCisKK1VuIHNldWwKKy5CIGRoY3AtaG9zdCAKK3BldXQgY29udGVuaXIgdW5lIGFkcmVzc2UgSVB2NCwgdW5lIGFkcmVzc2UgSVB2Niwgb3UgbGVzIGRldXggZW4gbcOqbWUgdGVtcHMuCitMZXMgYWRyZXNzZXMgSVB2NiBkb2l2ZW50LcOqdHJlIG1pc2VzIGVudHJlIGNyb2NoZXRzIGNvbW1lIHN1aXQgOgorLkIgLS1kaGNwLWhvc3Q9bGFwdG9wLFsxMjM0Ojo1Nl0KK0xlcyBhZHJlc3NlcyBJUHY2IHBldXZlbnQgbmUgY29udGVuaXIgcXVlIGxhIHBhcnRpZSBpZGVudGlmaWFudCBkZSBjbGllbnQgOgorLkIgLS1kaGNwLWhvc3Q9bGFwdG9wLFs6OjU2XQorRGFucyBjZSBjYXMsIGxvcnNxdWUgZGVzIHBsYWdlcyBkaGNwIHNvbnQgZMOpZmluaWVzIGF1dG9tYXRpcXVlbWVudCBwYXIgbGUgYmlhaXMKK2RlIGNvbnN0cnVjdGV1cnMsIGxhIHBhcnRpZSByw6lzZWF1IGNvcnJlc3BvbmRhbnRlIGVzdCByYWpvdXTDqWUgw6AgbCdhZHJlc3NlLgorCitBIG5vdGVyIHF1ZSBwb3VyIGxlIERIQ1AgSVB2NiwgbCdhZHJlc3NlIG1hdMOpcmllbGxlIG4nZXN0IHBhcyB0b3Vqb3VycworZGlzcG9uaWJsZSwgYmllbiBxdWUgY2Ugc29pdCB0b3Vqb3VycyBsZSBjYXMgcG91ciBkZXMgY2xpZW50cyBkaXJlY3RlbWVudAorY29ubmVjdMOpcyAoc3VyIGxlIG3Dqm1lIGRvbWFpbmUgZGUgYnJvYWRjYXN0KSBvdSBwb3VyIGRlcyBjbGllbnRzIHV0aWxpc2FudAorZGVzIHJlbGFpcyBESENQIHF1aSBzdXBwb3J0ZW50IGxhIFJGQyA2OTM5LgorCitFbiBESENQdjQsIGwnb3B0aW9uIHNww6ljaWFsZSBpZDoqIHNpZ25pZmllIDogImlnbm9yZXIgdG91dCBpZGVudGlmaWFudCBjbGllbnQgZXQgbid1dGlsaXNlcgorcXVlIGwnYWRyZXNzZSBtYXTDqXJpZWxsZSIuIENlbGEgZXN0IHV0aWxlIGxvcnNxdSd1biBjbGllbnQgcHLDqXNlbnRlIHVuCitpZGVudGlmaWFudCBjbGllbnQgbWFpcyBwYXMgbGVzIGF1dHJlcy4KKworU2kgdW4gbm9tIGFwcGFyYcOudCBkYW5zIC9ldGMvaG9zdHMsIGwnYWRyZXNzZSBhc3NvY2nDqWUgcGV1dCDDqnRyZSBhbGxvdcOpZSDDoCB1bgorYmFpbCBESENQIG1haXMgc2V1bGVtZW50IHNpIHVuZSBvcHRpb24KKy5CIC0tZGhjcC1ob3N0CitzcMOpY2lmaWFudCBsZSBub20gZXhpc3RlIHBhciBhaWxsZXVycy4gU2V1bCB1biBub20gZCdow7R0ZSBwZXV0LcOqdHJlIGRvbm7DqSBkYW5zCit1bmUgb3B0aW9uCisuQiBkaGNwLWhvc3QKKywgbWFpcyBsZXMgYWxpYXMgc29udCBwb3NzaWJsZXMgYXUgdHJhdmVycyBkZSBsJ3V0aWxpc2F0aW9uIGRlcyBDTkFNRXMuIChWb2lyCisuQiAtLWNuYW1lCispLgorTGUgbW90IGNsZWYgImlnbm9yZSIgKCJpZ25vcmVyIikgaW5kaXF1ZQorw6AgRG5zbWFzcSBkZSBuZSBqYW1haXMgZm91cm5pciBkZSBiYWlsIERIQ1Agw6AgdW5lIG1hY2hpbmUuIExhIG1hY2hpbmUgcGV1dCDDqnRyZQorc3DDqWNpZmnDqWUgcGFyIHNvbiBhZHJlc3NlIG1hdMOpcmllbGxlLCBzb24gaWRlbnRpZmlhbnQgY2xpZW50IG91IHNvbiBub20gZCdow7R0ZS4KK1BhciBleGVtcGxlCisuQiAtLWRoY3AtaG9zdD0wMDoyMDplMDozYjoxMzphZixpZ25vcmUKK0NlbGEgZXN0IHV0aWxlIGxvcnNxdSd1biBhdXRyZSBzZXJ2ZXVyIERIQ1Agc3VyIGxlIHLDqXNlYXUgZG9pdCDDqnRyZSB1dGlsaXPDqSBwYXIKK2NlcnRhaW5lcyBtYWNoaW5lcy4KKworTGUgcGFyYW3DqHRyZSBzZXQ6PGlkZW50aWZpYW50IHLDqXNlYXU+IHBlcm1ldCBkZSBkw6lmaW5pciB1bgoraWRlbnRpZmlhbnQgZGUgcsOpc2VhdSBsb3JzcXVlIGwnb3B0aW9uIGRoY3AtaG9zdCBlc3QgdXRpbGlzw6llLiBDZWxhIHBldXQgc2VydmlyCivDoCBzw6lsZWN0aW9ubmVyIGRlcyBvcHRpb25zIERIQ1AganVzdGUgcG91ciBjZXQgaMO0dGUuIFBsdXMgZCd1biBsYWJlbCBwZXV0IMOqdHJlCitmb3VybmkgZGFucyB1bmUgZGlyZWN0aXZlIGRoY3AtaG9zdCAoZXQgZGFucyBjZXR0ZSBzZXVsZSBkaXJlY3RpdmUpLiBMb3JzcXUndW5lCittYWNoaW5lIGNvw69uY2lkZSBhdmVjIHVuZSBkaXJlY3RpdmUgZGhjcC1ob3N0IChvdSB1bmUgaW1wbGlxdcOpZSBwYXIKKy9ldGMvZXRoZXJzKSwgYWxvcnMgbGUgbGFiZWwgcsOpc2VydsOpICJrbm93biIgKCJjb25udSIpIGVzdCBhc3NvY2nDqS4gQ2VsYSBwZXJtZXQgw6AKK0Ruc21hc3EgZCfDqnRyZSBjb25maWd1csOpIHBvdXIgaWdub3JlciBsZXMgcmVxdcOqdGVzIGlzc3VzIGRlIG1hY2hpbmVzIGluY29ubnVlCisgcGFyIGxlIGJpYWlzIGRlIAorLkIgLS1kaGNwLWlnbm9yZT10YWc6IWtub3duLgorCitMZXMgYWRyZXNzZXMgZXRoZXJuZXQgKG1haXMgcGFzIGxlcyBpZGVudGlmaWFudHMgY2xpZW50cykgcGV1dmVudCDDqnRyZSBkw6lmaW5pZXMKK2F2ZWMgZGVzIG9jdGV0cyBqb2tlciwgYWluc2kgcGFyIGV4ZW1wbGUKKy5CIC0tZGhjcC1ob3N0PTAwOjIwOmUwOjNiOjEzOiosaWdub3JlIAorZGVtYW5kZSDDoCBEbnNtYXNxIGQnaWdub3JlciB1bmUgZ2FtbWUgZCdhZHJlc3NlcyBtYXTDqXJpZWxsZXMuIElsIGVzdCAgw6Agbm90ZXIKK3F1ZSAiKiIgZG9pdC3DqnRyZSBwcsOpY8OpZMOpIGQndW4gY2FyYWN0w6hyZSBkJ8OpY2hhcHBlbWVudCBvdSBtaXMgZW50cmUgZ3VpbGxlbWV0cworbG9yc3F1ZSBzcMOpY2lmacOpIGVuIG9wdGlvbiBkZSBsaWduZSBkZSBjb21tYW5kZSwgbWFpcyBwYXMgZGFucyBsZSBmaWNoaWVyIGRlCitjb25maWd1cmF0aW9uLgorCitMZXMgYWRyZXNzZXMgbWF0w6lyaWVsbGVzIGNvw69uY2lkZW50IGVuIHByaW5jaXBlIGF2ZWMgbidpbXBvcnRlCitxdWVsIHR5cGUgZGUgcsOpc2VhdSAoQVJQKSwgbWFpcyBpbCBlc3QgcG9zc2libGUgZGUgbGVzIGxpbWl0ZXIgw6AgdW4gc2V1bCB0eXBlCitBUlAgZW4gbGVzIHByw6ljw6lkYW50IGR1IHR5cGUgQVJQIChlbiBIZXhhZMOpY2ltYWwpIGV0IGRlICItIi4gQWluc2kKKy5CIC0tZGhjcC1ob3N0PTA2LTAwOjIwOmUwOjNiOjEzOmFmLDEuMi4zLjQgCitjb8OvbmNpZGVyYSB1bmlxdWVtZW50IGF2ZWMgZGVzIGFkcmVzc2VzIG1hdMOpcmllbGxlcyBUb2tlbi1SaW5nLCBwdWlzcXVlIGxlIHR5cGUKK0FSUCBwb3VyIHVuZSBhZHJlc3NlIFRva2VuLVJpbmcgZXN0IDYuCisKK1VuIGNhcyBzcMOpY2lhbCwgcG91ciBJUHY0LCBjb3JyZXNwb25kIMOgIGwnaW5jbHVzaW9uIGQndW5lIG91IHBsdXNpZXVycyBhZHJlc3NlcworbWF0w6lyaWVsbGVzLCBjLcOgLWQgOgorLkIgLS1kaGNwLWhvc3Q9MTE6MjI6MzM6NDQ6NTU6NjYsMTI6MzQ6NTY6Nzg6OTA6MTIsMTkyLjE2OC4wLjIuCitDZWxhIHBlcm1ldCDDoCB1bmUgYWRyZXNzZSBJUCBkJ8OqdHJlIGFzc29jacOpIMOgIHBsdXNpZXVycyBhZHJlc3NlcworbWF0w6lyaWVsbGVzLCBldCBkb25uZSDDoCBkbnNtYXNxIGxhIHBlcm1pc3Npb24gZCdhYmFuZG9ubmVyIHVuIGJhaWwgREhDUAorYXR0cmlidcOpIMOgIGwndW5lIGRlIGNlcyBhZHJlc3NlcyBsb3JzcXUndW5lIGF1dHJlIGFkcmVzc2UgZGFucyBsYSBsaXN0ZQorZGVtYW5kZSB1biBiYWlsLiBDZWNpIGVzdCB1bmUgb3DDqXJhdGlvbiBkYW5nZXJldXNlIHF1aSBuZSBmb25jdGlvbm5lcmEKK2RlIG1hbmnDqHJlIGZpYWJsZSBxdWUgc2kgdW5lIGFkcmVzc2UgbWF0w6lyaWVsbGUgZXN0IGFjdGl2ZSDDoCB1biBtb21lbnQKK2Rvbm7DqSBldCBkbnNtYXNxIG4nYSBhdWN1biBtb3llbiBkZSBzJ2Fzc3VyZXIgZGUgY2VsYS4gQ2VsYSBlc3QgdXRpbGUsCitwYXIgZXhlbXBsZSwgcG91ciBhbGxvdWVyIHVuZSBhZHJlc3NlIElQIHN0YWJsZSDDoCB1biBsYXB0b3AgcXVpCithdXJhaXQgw6AgbGEgZm9pcyB1bmUgY29ubmV4aW9uIGZpbGFpcmUgZXQgc2Fucy1maWwuCisuVFAKKy5CIC0tZGhjcC1ob3N0c2ZpbGU9PGNoZW1pbj4KK0xpcyBsZXMgaW5mb3JtYXRpb25zIGQnaMO0dGVzIERIQ1AgZGFucyBsZSBmaWNoaWVyIHNww6ljaWZpw6kuIFNpIGwnYXJndW1lbnQgZXN0Cit1biBjaGVtaW4gdmVycyB1biByw6lwZXJ0b2lyZSwgbGlzIHRvdXMgbGVzIGZpY2hpZXJzIGRlIGNlIHLDqXBlcnRvaXJlLiBMZQorZmljaGllciBjb250aWVudCBkZXMgaW5mb3JtYXRpb25zIMOgIHJhaXNvbiBkJ3VuIGjDtHRlIHBhciBsaWduZS4gTGUgZm9ybWF0CitkJ3VuZSBsaWduZSBlc3QgbGEgbcOqbWUgcXVlIGxlIHRleHRlIGZvdXJuaSDDoCBsYSBkcm9pdGUgc3VyIGNhcmFjdMOocmUgIj0iIGRhbnMKK2wnb3B0aW9uCisuQiAtLWRoY3AtaG9zdC4KK0wnYXZhbnRhZ2UgZGUgc3RvY2tlciBsZXMgaW5mb3JtYXRpb25zIHN1ciBsZXMgaMO0dGVzIERIQ1AgZGFucyBjZSBmaWNoaWVyIGVzdAorcXVlIGNlbGxlcy1jaSBwZXV2ZW50IMOqdHJlIG1vZGlmacOpZXMgc2FucyByZWNoYXJnZXIgRG5zbWFzcTsgbGUgZmljaGllciBzZXJhCityZWx1IGxvcnNxdWUgRG5zbWFzcSByZcOnb2l0IHVuIHNpZ25hbCBTSUdIVVAuCisuVFAKKy5CIC0tZGhjcC1vcHRzZmlsZT08Y2hlbWluPgorTGlzIGxlcyBpbmZvcm1hdGlvbnMgcmVsYXRpdmVzIGF1eCBvcHRpb25zIERIQ1AgZGFucyBsZSBmaWNoaWVyIHNww6ljaWZpw6kuIFNpCitsJ2FyZ3VtZW50IGVzdCB1biBjaGVtaW4gdmVycyB1biByw6lwZXJ0b2lyZSwgbGlzIHRvdXMgbGVzIGZpY2hpZXJzIGRlIGNlCityw6lwZXJ0b2lyZS4gTCdpbnTDqXLDqnQgZCd1dGlsaXNlciBjZXR0ZSBvcHRpb24gZXN0IGxlIG3Dqm1lIHF1ZSBwb3VyCisgLS1kaGNwLWhvc3RzZmlsZSA6IGxlIGZpY2hpZXIgc3DDqWNpZmnDqSBzZXJhIHJlY2hhcmfDqSDDoCBsYSByw6ljZXB0aW9uIHBhcgorZG5zbWFzcSBkJ3VuIHNpZ25hbCBTSUdIVVAuIE5vdGV6IHF1J2lsIGVzdCBwb3NzaWJsZSBkJ2VuY29kZXIgbCdpbmZvcm1hdGlvbgordmlhCisuQiAtLWRoY3AtYm9vdAorZW4gdXRpbGlzYW50IGxlcyBub21zIG9wdGlvbm5lbHMgYm9vdGZpbGUtbmFtZSwgc2VydmVyLWlwLWFkZHJlc3MgZXQKK3RmdHAtc2VydmVyLiBDZWNpIHBlcm1ldCBkJ2luY2x1cmUgY2VzIG9wdGlvbnMgZGFucyB1biBmaWNoaWVyICJkaGNwLW9wdHNmaWxlIi5ETlNNQVNRX1NVUFBMSUVEX0hPU1ROQU1FCisuVFAKKy5CIFwtWiwgLS1yZWFkLWV0aGVycworTGlzIGxlcyBpbmZvcm1hdGlvbnMgZCdow7R0ZXMgREhDUCBkYW5zIGxlIGZpY2hpZXIgL2V0Yy9ldGhlcnMuIExlIGZvcm1hdCBkZQorL2V0Yy9ldGhlcnMgZXN0IHVuZSBhZHJlc3NlIG1hdMOpcmllbGxlIHN1aXZpZSwgc29pdCBwYXIgdW4gbm9tIGQnaMO0dGUsIHNvaXQgcGFyCit1bmUgYWRyZXNzZSBJUCBzb3VzIGxhIGZvcm1lIGRlIDQgY2hpZmZyZXMgc8OpcGFyw6lzIHBhciBkZXMgcG9pbnRzLiBMb3JzcXVlIGx1CitwYXIgRG5zbWFzcSwgY2VzIGxpZ25lcyBvbnQgZXhhY3RlbWVudCBsZSBtw6ptZSBlZmZldCBxdWUgbCdvcHRpb24KKy5CIC0tZGhjcC1ob3N0Citjb250ZW5hbnQgbGVzIG3Dqm1lcyBpbmZvcm1hdGlvbnMuIC9ldGMvZXRoZXJzIGVzdCByZWx1IMOgIGxhIHLDqWNlcHRpb24gZCd1bgorc2lnbmFsIFNJR0hVUCBwYXIgRG5zbWFzcS4gTGVzIGFkcmVzc2VzIElQdjYgbmUgc29udCBQQVMgbHVlcyBkYW5zIC9ldGMvZXRoZXJzLgorLlRQCisuQiBcLU8sIC0tZGhjcC1vcHRpb249W3RhZzo8bGFiZWw+LFt0YWc6PGxhYmVsPl1dW2VuY2FwOjxvcHRpb24+LF1bdmktZW5jYXA6PGVudHJlcHJpc2U+LF1bdmVuZG9yOls8Y2xhc3NlX3ZlbmRldXI+XSxdWzxvcHRpb24+fG9wdGlvbjo8bm9tIGQnb3B0aW9uPnxvcHRpb242OjxvcHRpb24+fG9wdGlvbjY6PG5vbSBkJ29wdGlvbj5dLFs8dmFsZXVyPlssPHZhbGV1cj5dXQorU3DDqWNpZmllIGRlcyBvcHRpb25zIGRpZmbDqXJlbnRlcyBvdSBzdXBwbMOpbWVudGFpcmVzIHBvdXIgZGVzIGNsaWVudHMgREhDUC4gUGFyCitkw6lmYXV0LCBEbnNtYXNxIGVudm9pZSB1biBlbnNlbWJsZSBzdGFuZGFyZCBkJ29wdGlvbnMgYXV4IGNsaWVudHMgREhDUCA6IGxlCittYXNxdWUgZGUgcsOpc2VhdSBldCBsJ2FkcmVzc2UgZGUgYnJvYWRjYXN0IHNvbnQgbGVzIG3Dqm1lcyBxdWUgcG91ciBsJ2jDtHRlCitzdXIgbGVxdWVsIHRvdXJuZSBEbnNtYXNxLCBldCBsZSBzZXJ2ZXVyIEROUyBhaW5zaSBxdWUgbGEgcm91dGUgcGFyIGTDqWZhdXQKK3ByZW5uZW50IGNvbW1lIHZhbGV1ciBsJ2FkcmVzc2UgZGUgbGEgbWFjaGluZSBzdXIgbGFxdWVsbGUgdG91cm5lIERuc21hc3EuIAorKERlcyByw6hnbGVzIMOpcXVpdmFsZW50ZXMgcydhcHBsaXF1ZW50IGVuIElQdjYpLiBTaSB1bmUgb3B0aW9uIGRlIG5vbSBkZSBkb21haW5lCithIMOpdMOpIGTDqWZpbmllLCBzb24gY29udGVudSBlc3QgdHJhbnNtaXMuIENldHRlIG9wdGlvbiBkZSBjb25maWd1cmF0aW9uIHBlcm1ldAorZGUgY2hhbmdlciB0b3V0ZXMgY2VzIHZhbGV1cnMgcGFyIGTDqWZhdXQsIG91IGRlIHNww6ljaWZpZXIgZCdhdXRyZXMgb3B0aW9ucy4KK0wnb3B0aW9uIERIQ1Agw6AgdHJhbnNtZXR0cmUgcGV1dCDDqnRyZSBmb3VybmllIHNvdXMgZm9ybWUgZCd1biBub21icmUgZMOpY2ltYWwgCitvdSBzb3VzIGxhIGZvcm1lICJvcHRpb246PG5vbSBkJ29wdGlvbj4iLiBMZXMgbm9tYnJlcyBjb3JyZXNwb25kYW50cyBhdXggb3B0aW9ucworc29udCBkw6lmaW5pcyBkYW5zIGxhIFJGQzIxMzIgZXQgc3VpdmFudHMuIExlcyBub21zIGQnb3B0aW9ucyBjb25udXMgcGFyIERuc21hc3EgCitwZXV2ZW50IMOqdHJlIG9idGVudXMgdmlhICJEbnNtYXNxIC0taGVscCBkaGNwIi4gUGFyIGV4ZW1wbGUsIHBvdXIgZMOpZmluaXIgbGEKK3JvdXRlIHBhciBkw6lmYXV0IMOgIDE5Mi4xNjguNC40LCBpbCBlc3QgcG9zc2libGUgZGUgZmFpcmUKKy5CIC0tZGhjcC1vcHRpb249MywxOTIuMTY4LjQuNCAKK291CisuQiAtLWRoY3Atb3B0aW9uID0gb3B0aW9uOnJvdXRlciwgMTkyLjE2OC40LjQKK291IGVuY29yZSwgcG91ciBwb3NpdGlvbm5lciBsJ2FkcmVzc2UgZHUgc2VydmV1ciBkZSB0ZW1wcyDDoCAxOTIuMTY4LjAuNCwgb24gcGV1dAorZmFpcmUKKy5CIC0tZGhjcC1vcHRpb24gPSA0MiwxOTIuMTY4LjAuNCAKK291IAorLkIgLS1kaGNwLW9wdGlvbiA9IG9wdGlvbjpudHAtc2VydmVyLCAxOTIuMTY4LjAuNAorTCdhZHJlc3NlIDAuMC4wLjAgcHJlbmRzIGljaSBsZSBzZW5zICJkJ2FkcmVzc2UgZGUgbGEgbWFjaGluZSBzdXIgbGFxdWVsbGUKK3RvdXJuZSBEbnNtYXNxIi4gTGVzIHR5cGVzIGRlIGRvbm7DqWVzIGF1dG9yaXPDqWVzIHNvbnQgZGVzIGFkcmVzc2VzIElQIHNvdXMgbGEKK2Zvcm1lIGRlIDQgY2hpZmZyZXMgc8OpcGFyw6lzIHBhciBkZXMgcG9pbnRzLCB1biBub21icmUgZMOpY2ltYWwsIHVuZSBsaXN0ZSBkZQorY2FyYWN0w6hyZXMgaGV4YWTDqWNpbWF1eCBzw6lwYXLDqXMgcGFyIGRlcyAyIHBvaW50cywgb3UgdW5lIGNoYcOubmUgZGUgY2FyYWN0w6hyZXMuCitTaSBkZXMgbGFiZWxzIG9wdGlvbm5lbHMgc29udCBmb3VybmlzLCBhbG9ycyBjZXR0ZSBvcHRpb24gbidlc3QgZW52b3nDqWUKK3F1J2F1eCByw6lzZWF1eCBkb250IHRvdXMgbGVzIGxhYmVscyBjb8OvbmNpZGVudCBhdmVjIGNldXggZGUgbGEgcmVxdcOqdGUuCisKK1VuIHRyYWl0ZW1lbnQgc3DDqWNpYWwgZXN0IGVmZmVjdHXDqSBzdXIgbGVzIGNoYcOubmVzIGRlIGNhcmFjdMOocmVzIGZvdXJuaWVzIHBvdXIKK2wnb3B0aW9uIDExOSwgY29uZm9ybcOpbWVudCDDoCBsYSBSRkMgMzM5Ny4gTGVzIGNoYcOubmVzIGRlIGNhcmFjdMOocmVzIG91IGxlcworYWRyZXNzZXMgSVAgc291cyBmb3JtZSBkZSA0IGNoaWZmcmVzIHPDqXBhcsOpcyBwYXIgZGVzIHBvaW50cyBkb25uw6lzIGVuIGFyZ3VtZW50cworZGUgbCdvcHRpb24gMTIwIHNvbnQgdHJhaXTDqXMgY29uZm9ybcOpbWVudHMgw6AgbGEgUkZDIDMzNjEuIExlcyBhZHJlc3NlcyBJUCBzb3VzCitmb3JtZSBkZSA0IGNoaWZmcmVzIHPDqXBhcsOpcyBwYXIgZGVzIHBvaW50cyBzdWl2aWVzIHBhciB1bmUgYmFycmUgbW9udGFudGUgIi8iLAorcHVpcyB1bmUgdGFpbGxlIGRlIG1hc3F1ZSBzb250IGVuY29kw6lzIGNvbmZvcm3DqW1lbnRzIMOgIGxhIFJGQyAzNDQyLgorCitMZXMgb3B0aW9ucyBJUHY2IHNvbnQgZm91cm5pZXMgZW4gdXRpbGlzYW50IGxlIG1vdC1jbGVmCisuQiBvcHRpb242Ogorc3VpdmkgcGFyIGxlIG51bcOpcm8gZCdvcHRpb24gb3UgbGUgbm9tIGQnb3B0aW9uLiBMJ2VzcGFjZSBkZSBub21tYWdlIGRlcyBvcHRpb25zCitJUHY2IGVzdCBkaXNqaW50IGRlIGwnZXNwYWNlIGRlIG5vbW1hZ2UgZGVzIG9wdGlvbnMgSVB2NC4gTGVzIGFkcmVzc2VzIElQdjYKK2VuIG9wdGlvbiBkb2l2ZW50IMOqdHJlIGVudG91csOpZXMgZGUgY3JvY2hldHMsIGNvbW1lIHBhciBleGVtcGxlIDoKKy5CIC0tZGhjcC1vcHRpb249b3B0aW9uNjpudHAtc2VydmVyLFsxMjM0Ojo1Nl0KKworQXR0ZW50aW9uIDogYXVjdW4gdGVzdCBuJ8OpdGFudCBmYWl0IHBvdXIgdsOpcmlmaWVyIHF1ZSBkZXMgZG9ubsOpZXMgZCd1biB0eXBlCithZMOpcXVhdCBzb250IGVudm95w6llcyBwb3VyIHVuIG51bcOpcm8gZCdvcHRpb24gZG9ubsOpLCBpbCBlc3QgdG91dCDDoCBmYWl0IHBvc3NpYmxlCitkZSBwZXJzdWFkZXIgRG5zbWFzcSBkZSBnw6luw6lyZXIgZGVzIHBhcXVldHMgREhDUCBpbGzDqWdhdXggcGFyIHVuZSB1dGlsaXNhdGlvbgoraW5jb3JyZWN0ZSBkZSBjZXR0ZSBvcHRpb24uIExvcnNxdWUgbGEgdmFsZXVyIGVzdCB1biBub21icmUgZMOpY2ltYWwsIERuc21hc3EKK2RvaXQgZMOpdGVybWluZXIgbGEgdGFpbGxlIGRlcyBkb25uw6llcy4gQ2VsYSBlc3QgZmFpdCBlbiBleGFtaW5hbnQgbGUgbnVtw6lybyBkZQorbCdvcHRpb24gZXQvb3UgbGEgdmFsZXVyLCBtYWlzIHBldXQtw6p0cmUgw6l2aXTDqSBlbiByYWpvdXRhbnQgdW4gc3VmZml4ZSBkJ3VuZQorbGV0dHJlIGNvbW1lIHN1aXQgOgorYiA9IHVuIG9jdGV0LCBzID0gMiBvY3RldHMsIGkgPSA0IG9jdGV0cy4gQ2VsYSBzZXJ0IGVzc2VudGllbGxlbWVudCBwb3VyIGRlcworb3B0aW9ucyBlbmNhcHN1bMOpZXMgZGUgY2xhc3NlcyBkZSB2ZW5kZXVycyAodm9pciBwbHVzIGJhcyksIHBvdXIgbGVzcXVlbGxlcyAKK0Ruc21hc3EgbmUgcGV1dCBkw6l0ZXJtaW5lciBsYSB0YWlsbGUgZGUgbGEgdmFsZXVyLiBMZXMgZG9ubsOpZXMgZCdvcHRpb25zCitjb25zaXN0YW50IHVuaXF1ZW1lbnQgZGUgcG9pbnRzIGV0IGRlIGTDqWNpbWF1eCBzb250IGludGVycHLDqXTDqWVzIHBhciBEbnNtYXNxCitjb21tZSBkZXMgYWRyZXNzZXMgSVAsIGV0IGVudm95w6llcyBjb21tZSB0ZWxsZXMuIFBvdXIgZm9yY2VyIGwnZW52b2kgc291cyBmb3JtZQorZGUgY2hhw65uZSBkZSBjYXJhY3TDqHJlLCBpbCBlc3QgbsOpY2Vzc2FpcmUgZCd1dGlsaXNlciBkZXMgZ3VpbGxlbWV0cyBkb3VibGVzLiBQYXIKK2V4ZW1wbGUsIGwndXRpbGlzYXRpb24gZGUgbCdvcHRpb24gNjYgcG91ciBmb3VybmlyIHVuZSBhZHJlc3NlIElQIHNvdXMgbGEgZm9ybWUKK2QndW5lIGNoYcOubmUgZGUgY2FyYWN0w6hyZXMgY29tbWUgbm9tIGRlIHNlcnZldXIgVEZUUCwgaWwgZXN0IG7DqWNlc3NhaXJlIGRlIGZhaXJlCitjb21tZSBzdWl0IDoKKy5CIC0tZGhjcC1vcHRpb249NjYsIjEuMi4zLjQiCisKK0xlcyBvcHRpb25zIGVuY2Fwc3Vsw6llcyBkZSBjbGFzc2VzIGRlIHZlbmRldXJzIHBldXZlbnQtw6p0cmUgYXVzc2kgc3DDqWNpZmnDqWVzIAorKHBvdXIgSVB2NCBzZXVsZW1lbnQpIGVuIHV0aWxpc2FudAorLkIgLS1kaGNwLW9wdGlvbgorOiBwYXIgZXhlbXBsZQorLkIgLS1kaGNwLW9wdGlvbj12ZW5kb3I6UFhFQ2xpZW50LDEsMC4wLjAuMAorZW52b2llIGwnb3B0aW9uIGVuY2Fwc3Vsw6llIGRlIGNsYXNzZSBkZSB2ZW5kZXVyICJtZnRwLWFkZHJlc3M9MC4wLjAuMCIgw6AKK24naW1wb3J0ZSBxdWVsIGNsaWVudCBkb250IGxhIGNsYXNzZSBkZSB2ZW5kZXVyIGNvcnJlc3BvbmQgw6AgIlBYRUNsaWVudCIuIExhCitjb3JyZXNwb25kYW5jZSBwb3VyIGxlcyBjbGFzc2VzIGRlIHZlbmRldXIgcydlZmZlY3R1ZSBzdXIgZGVzIHNvdXMtY2hhw65uZXMgZGUKK2NhcmFjdMOocmVzICh2b2lyCisuQiAtLWRoY3AtdmVuZG9yY2xhc3MKK3BvdXIgcGx1cyBkZSBkw6l0YWlscykuIFNpIHVuZSBvcHRpb24gZGUKK2NsYXNzZSBkZSB2ZW5kZXVyIChudW3DqXJvIDYwKSBlc3QgZW52b3nDqWUgcGFyIERuc21hc3EsIGFsb3JzIGNlbGEgZXN0IHV0aWxpc8OpCitwb3VyIHPDqWxlY3Rpb25uZXIgbGVzIG9wdGlvbnMgZW5jYXBzdWzDqWVzLCBkZSBwcsOpZsOpcmVuY2Ugw6AgdG91dGUgb3B0aW9uIGVudm95w6llCitwYXIgbGUgY2xpZW50LiBJbCBlc3QgcG9zc2libGUgZCdvbWV0dHJlIGNvbXBsw6h0ZW1lbnQgdW5lIGNsYXNzZSBkZSB2ZW5kZXVyIDoKKy5CIC0tZGhjcC1vcHRpb249dmVuZG9yOiwxLDAuMC4wLjAKK0RhbnMgY2UgY2FzIGwnb3B0aW9uIGVuY2Fwc3Vsw6llIGVzdCB0b3Vqb3VycyBlbnZvecOpZS4KKworRW4gSVB2NCwgbGVzIG9wdGlvbnMgcGV1dmVudC3DqnRyZSBlbmNhcHN1bMOpZXMgYXUgc2VpbiBkJ2F1dHJlcyBvcHRpb25zIDoKK3BhciBleGVtcGxlCisuQiAtLWRoY3Atb3B0aW9uPWVuY2FwOjE3NSwgMTkwLCAiaXNjc2ktY2xpZW50MCIKK2VudmVycmEgbCdvcHRpb24gMTc1LCBhdSBzZWluIGRlIGxhcXVlbGxlIHNlIHRyb3V2ZSBsJ29wdGlvbiAxOTAuCitQbHVzaWV1cnMgb3B0aW9ucyBlbmNhcHN1bMOpZXMgYXZlYyBsZSBtw6ptZSBudW3DqXJvIGQnb3B0aW9uIHNlcm9udCBjb3JyZWN0ZW1lbnQKK2NvbWJpbsOpZXMgYXUgc2VpbiBkJ3VuZSBzZXVsZSBvcHRpb24gZW5jYXBzdWzDqWUuIElsIG4nZXN0IHBhcyBwb3NzaWJsZSBkZQorc3DDqWNpZmllciBlbmNhcDogZXQgdmVuZG9yOiBhdSBzZWluIGQndW5lIG3Dqm1lIG9wdGlvbiBkaGNwLgorCitMYSBkZXJuacOocmUgdmFyaWFudGUgcG91ciBsZXMgb3B0aW9ucyBlbmNhcHN1bMOpZXMgZXN0ICJsJ29wdGlvbiBkZSBWZW5kZXVyCitpZGVudGlmaWFudCBsZSB2ZW5kZXVyIiAoIlZlbmRvci1JZGVudGlmeWluZyBWZW5kb3IgT3B0aW9ucyIpIHRlbGxlIHF1ZQorZMOpY3JpdGUgZGFucyBsZSBSRkMzOTI1LiBDZWxsZXMtY2kgc29udCBzcMOpY2lmacOpZXMgY29tbWUgc3VpdCA6CisuQiAtLWRoY3Atb3B0aW9uPXZpLWVuY2FwOjIsIDEwLCAidGV4dCIKK0xlIG51bcOpcm8gZGFucyBsYSBzZWN0aW9uIHZpLWVuY2FwOiBlc3QgbGUgbnVtw6lybyBJQU5BIGRlIGwnZW50cmVwcmlzZSBzZXJ2YW50CivDoCBpZGVudGlmaWVyIGNldHRlIG9wdGlvbi4gQ2V0dGUgZm9ybWUgZCdlbmNhcHN1bGF0aW9uIGVzdCDDqWdhbGVtZW50IHN1cHBvcnTDqWUKK2VuIElQdjYuCisKK0wnYWRyZXNzZSAwLjAuMC4wIG4nZXN0IHBhcyB0cmFpdMOpZSBkZSBtYW5pw6hyZSBwYXJ0aWN1bGnDqHJlIGxvcnNxdWUgZm91cm5pZSBkYW5zCit1bmUgb3B0aW9uIGVuY2Fwc3Vsw6llLgorLlRQCisuQiAtLWRoY3Atb3B0aW9uLWZvcmNlPVt0YWc6PGxhYmVsPixbdGFnOjxsYWJlbD5dXVtlbmNhcDo8b3B0aW9uPixdW3ZpLWVuY2FwOjxlbnRyZXByaXNlPixdW3ZlbmRvcjpbPGNsYXNzZV92ZW5kZXVyPl0sXVs8b3B0aW9uPnxvcHRpb246PG5vbSBkJ29wdGlvbj5dLFs8dmFsZXVyPlssPHZhbGV1cj5dXQorQ2VsYSBmb25jdGlvbm5lIGV4YWN0ZW1lbnQgZGUgbGEgbcOqbWUgZmHDp29uIHF1ZQorLkIgLS1kaGNwLW9wdGlvbgorc2F1ZiBxdWUgY2V0dGUgb3B0aW9uIHNlcmEgdG91am91cnMgZW52b3nDqWUsIG3Dqm1lIHNpIGxlIGNsaWVudCBuZSBsYSBkZW1hbmRlIHBhcworZGFucyBsYSBsaXN0ZSBkZSBwYXJhbcOqdHJlcyByZXF1aXMuIENlbGEgZXN0IHBhcmZvaXMgbsOpY2Vzc2FpcmUsIHBhciBleGVtcGxlIGxvcnMKK2RlIGxhIGZvdXJuaXR1cmUgZCdvcHRpb25zIMOgIFBYRUxpbnV4LgorLlRQCisuQiAtLWRoY3Atbm8tb3ZlcnJpZGUKKyhJUHY0IHNldWxlbWVudCkgRMOpc2FjdGl2ZSBsYSByw6l1dGlsaXNhdGlvbiBkZXMgY2hhbXBzIERIQ1Agbm9tIGRlIHNlcnZldXIgZXQKK25vbSBkZSBmaWNoaWVyIGNvbW1lIGVzcGFjZSBzdXBwbMOpbWVudGFpcmUgcG91ciBsZXMgb3B0aW9ucy4gU2kgY2VsYSBlc3QKK3Bvc3NpYmxlLCBkbnNtYXNxIGTDqXBsYWNlIGxlcyBpbmZvcm1hdGlvbnMgc3VyIGxlIHNlcnZldXIgZGUgZMOpbWFycmFnZQorZXQgbGUgbm9tIGRlIGZpY2hpZXIgKGZvdXJuaXMgcGFyICdkaGNwLWJvb3QnKSBlbiBkZWhvcnMgZGVzIGNoYW1wcworZMOpZGnDqXMgw6AgY2V0IHVzYWdlIGRhbnMgbGVzIG9wdGlvbnMgREhDUC4gQ2V0IGVzcGFjZSBzdXBwbMOpbWVudGFpcmUgZXN0CithbG9ycyBkaXNwb25pYmxlIGRhbnMgbGUgcGFxdWV0IERIQ1AgcG91ciBkJ2F1dHJlcyBvcHRpb25zLCBtYWlzIHBldXQsIGRhbnMKK3F1ZWxxdWVzIHJhcmVzIGNhcywgcGVydHVyYmVyIGRlcyBjbGllbnRzIHZpZXV4IG91IGTDqWZlY3R1ZXV4LiBDZXR0ZQorb3B0aW9uIGZvcmNlIGxlIGNvbXBvcnRlbWVudCDDoCBsJ3V0aWxpc2F0aW9uIGRlcyB2YWxldXJzICJzaW1wbGVzIGV0IHPDu3JlcyIKK2FmaW4gZCfDqXZpdGVyIGRlcyBwcm9ibMOobWVzIGRhbnMgZGUgdGVscyBjYXMuCisuVFAKKy5CIC0tZGhjcC1yZWxheT08YWRyZXNzZSBsb2NhbGU+LDxhZHJlc3NlIGRlIHNlcnZldXI+Wyw8aW50ZXJmYWNlXQorQ29uZmlndXJlIGRuc21hc3EgZW4gdGVtcHMgcXVlIHJlbGFpcyBESENQLiAgTCdhZHJlc3NlIGxvY2FsZSBlc3QgdW5lCithZHJlc3NlIGFsbG91w6llIMOgIGwndW5lIGludGVyZmFjZSBkZSBsYSBtYWNoaW5lIHN1ciBsYXF1ZWxsZSB0b3VybmUgZG5zbWFzcS4KK1RvdXRlcyBsZXMgcmVxdcOqdGVzIERIQ1AgYXJyaXZhbnQgc3VyIGNldHRlIGludGVyZmFjZSBzZXJvbnQgcmVsYXnDqWVzIGF1CitzZXJ2ZXVyIERIQ1AgZGlzdGFudCBjb3JyZXNwb25kYW50IMOgIGwnYWRyZXNzZSBkZSBzZXJ2ZXVyIGluZGlxdcOpZS4gSWwgZXN0Citwb3NzaWJsZSBkZSByZWxheWVyIGRlcHVpcyB1bmUgdW5pcXVlIGFkcmVzc2UgbG9jYWxlIHZlcnMgZGlmZsOpcmVudHMgc2VydmV1cnMKK2Rpc3RhbnQgZW4gc3DDqWNpZmlhbnQgcGx1c2lldXJzIGZvaXMgbCdvcHRpb24gZGhjcC1yZWxheSBhdmVjIGxhIG3Dqm1lIGFkcmVzc2UKK2xvY2FsZSBldCBkaWZmw6lyZW50ZXMgYWRyZXNzZXMgZGUgc2VydmV1ci4gTCdhZHJlc3NlIGRlIHNlcnZldXIgZG9pdC3DqnRyZQorc291cyBmb3JtZSBudW3DqXJpcXVlLiBEYW5zIGxlIGNhcyBkZSBESENQdjYsIGwnYWRyZXNzZSBkZSBzZXJ2ZXVyIHBldXQtw6p0cmUKK2wnYWRyZXNzZSBkZSBtdWx0aWNhc3QgZmYwNTo6MTozIGNvcnJlc3BvbmRhbnQgw6AgdG91cyBsZXMgc2VydmV1cnMgREhDUC4gRGFucworY2UgY2FzLCBsJ2ludGVyZmFjZSBkb2l0LcOpdHJlIHNww6ljaWZpw6llIGV0IG5lIHBldXQgY29tcG9ydGVyIGRlIGNhcmFjdMOocmUKK2pva2VyLiBFbGxlIHNlcmEgdXRpbGlzw6llIHBvdXIgaW5kaXF1ZXIgbCdpbnRlcmZhY2Ugw6AgcGFydGlyIGRlIGxhcXVlbGxlIGxlCittdWx0aWNhc3QgcG91cnJhIGF0dGVpbmRyZSBsZSBzZXJ2ZXVyIERIQ1AuCisKK0xlIGNvbnRyw7RsZSBkJ2FjY8OocyBwb3VyIGxlcyBjbGllbnRzIERIQ1Agc3VpdmVudCBsZXMgbcOqbWVzIHLDqGdsZXMgcXVlIHBvdXIKK2xlcyBzZXJ2ZXVycyBESENQIDogdm9pciAtLWludGVyZmFjZSwgLS1leGNlcHQtaW50ZXJmYWNlLCBldGMuIExlIG5vbQorZCdpbnRlcmZhY2Ugb3B0aW9uZWwgZGFucyBsJ29wdGlvbiBkaGNwLXJlbGF5IGNvbXBvcnRlIHVuZSBhdXRyZSBmb25jdGlvbiA6CitpbCBjb250csO0bGUgbCdpbnRlcmZhY2Ugc3VyIGxhcXVlbGxlIGxhIHLDqXBvbnNlIGR1IHNlcnZldXIgc2VyYSBhY2NlcHTDqWUuIENlbGEKK3NlcnQgcGFyIGV4ZW1wbGUgZGFucyBkZXMgY29uZmlndXJhdGlvbnMgw6AgMyBpbnRlcmZhY2VzIDogdW5lIMOgIHBhcnRpciBkZQorbGFxdWVsbGUgbGVzIHJlcXXDqnRlcyBzb250IHJlbGF5w6llcywgdW5lIHNlY29uZGUgcGVybWV0dGFudCBkZSBzZSBjb25uZWN0ZXIgw6AKK3VuIHNlcnZldXIgREhDUCwgZXQgdW5lIHRyb2lzacOobWUgcmVsacOpZSDDoCB1biByw6lzZWF1IG5vbi1zw6ljdXJpc8OpIHRlbAorcXUnaW50ZXJuZXQuIENlbGEgcGVybWV0IGQnw6l2aXRlciBsJ2Fycml2w6llIGRlIHJlcXXDqnRlcyB1c3VycMOpZXMgdmlhIGNldHRlCit0cm9pc2nDqG1lIGludGVyZmFjZS4KKworSWwgZXN0IHBlcm1pcyBkZSBjb25maWd1cmVyIGRuc21hc3EgcG91ciBmb25jdGlvbm5lciBjb21tZSBzZXJ2ZXVyIERIQ1Agc3VyCitjZXJ0YWluZXMgaW50ZXJmYWNlcyBldCBlbiB0ZW1wcyBxdWUgcmVsYWlzIHN1ciBkJ2F1dHJlcy4gQ2VwZW5kYW50LCBtw6ptZSBzJ2lsCitlc3QgcG9zc2libGUgZGUgY29uZmlndXJlciBkbnNtYXNxIGRlIHRlbGxlIG1hbmnDqHJlIHF1J2lsIHNvaXQgw6AgbGEgZm9pcworc2VydmV1ciBldCByZWxhaXMgcG91ciB1bmUgbcOqbWUgaW50ZXJmYWNlLCBjZWxhIG4nZXN0IHBhcyBzdXBwb3J0w6kgZXQgbGEKK2ZvbmN0aW9uIGRlIHJlbGFpcyBwcmVuZHJhIGxlIGRlc3N1cy4KKworTGUgcmVsYWlzIERIQ1B2NCBldCBsZSByZWxhaXMgREhDUHY2IHNvbnQgdG91cyBsZXMgZGV1eCBzdXBwb3J0w6lzLCBtYWlzIGlsCituJ2VzdCBwYXMgcG9zc2libGUgZGUgcmVsYXllciBkZXMgcmVxdcOqdGVzIERIQ1B2NCDDoCB1biBzZXJ2ZXVyIERIQ1B2NiBldAordmljZS12ZXJzYS4KKy5UUAorLkIgXC1VLCAtLWRoY3AtdmVuZG9yY2xhc3M9c2V0OjxsYWJlbD4sW2VudGVycHJpc2U6PG51bcOpcm8gSUFOQSBkJ2VudGVycHJpc2U+LF08Y2xhc3NlIGRlIHZlbmRldXI+CisKK0Fzc29jaWUgdW5lIGNoYcOubmUgZGUgY2xhc3NlIGRlIHZlbmRldXIgw6AgdW4gbGFiZWwuIExhIHBsdXBhcnQKK2RlcyBjbGllbnRzIERIQ1AgZm91cm5pc3NlbnQgdW5lICJjbGFzc2UgZGUgdmVuZGV1ciIgKCJ2ZW5kb3IgY2xhc3MiKSBxdWkKK3JlcHLDqXNlbnRlLCBkJ3VuZSBjZXJ0YWluZSBmYcOnb24sIGxlIHR5cGUgZCdow7R0ZS4gQ2V0dGUgb3B0aW9uIGFzc29jaWUgZGVzCitjbGFzc2VzIGRlIHZlbmRldXIgw6AgZGVzIGxhYmVscywgZGUgdGVsbGUgc29ydGUgcXVlIGRlcyBvcHRpb25zIERIQ1AgcGV1dmVudC3DqnRyZQorZm91cm5pZSBkZSBtYW5pw6hyZSBzw6lsZWN0aXZlIGF1eCBkaWZmw6lyZW50ZXMgY2xhc3NlcyBkJ2jDtHRlcy4gUGFyIGV4ZW1wbGUsCisuQiBkaGNwLXZlbmRvcmNsYXNzPXNldDpwcmludGVycyxIZXdsZXR0LVBhY2thcmQgSmV0RGlyZWN0CitvdQorLkIgZGhjcC12ZW5kb3JjbGFzcz1wcmludGVycyxIZXdsZXR0LVBhY2thcmQgSmV0RGlyZWN0CitwZXJtZXQgZGUgbidhbGxvdWVyIGRlcyBvcHRpb25zIHF1J2F1eCBpbXByaW1hbnRlcyBIUCBkZSBsYSBtYW5pw6hyZSBzdWl2YW50ZSA6CisuQiAtLWRoY3Atb3B0aW9uPXRhZzpwcmludGVycywzLDE5Mi4xNjguNC40CitMYSBjaGHDrm5lIGRlIGNhcmFjdMOocmVzIGRlIGxhIGNsYXNzZSBkZSB2ZW5kZXVyIGZvdW5pZSBlbiBhcmd1bWVudCBlc3QgY2hlcmNow6llCitlbiB0ZW1wcyBxdWUgc291cy1jaGHDrm5lIGRlIGNhcmFjdMOocmVzIGF1IHNlaW4gZGUgbGEgY2xhc3NlIGRlIHZlbmRldXIgZm91cm5pZQorcGFyIGxlIGNsaWVudCwgZGUgZmHDp29uIMOgIHBlcm1ldHRyZSBsYSByZWNoZXJjaGUgZCd1biBzb3VzLWVuc2VtYmxlIGRlIGxhIGNoYcOubmUKK2RlIGNhcmFjdMOocmVzICgiZnV6enkgbWF0Y2hpbmciKS4gTGUgcHLDqWZpeGUgc2V0OiBlc3Qgb3B0aW9ubmVsIG1haXMgYXV0b3Jpc8OpCithZmluIGRlIGNvbnNlcnZlciB1bmUgY2VydGFpbmUgaG9tb2fDqW7DqWl0w6kuCisKK05vdGV6IHF1J2VuIElQdjYgKGV0IHNldWxlbWVudCBlbiBJUHY2KSwgbGVzIG5vbXMgZGUgY2xhc3NlcyBkZSB2ZW5kZXVycworc29udCBkYW5zIHVuIGVzcGFjZSBkZSBub20gYXNzb2Npw6kgYXUgbnVtw6lybyBhdHRyaWJ1w6kgw6AgbCdlbnRyZXByaXNlIHBhcgorbCdJQU5BLiBDZSBudW3DqXJvIGVzdCBmb3VybmkgcGFyIGxlIGJpYWlzIGR1IG1vdC1jbGVmIGVudGVycHJpc2U6IGV0IHNldWxlcworbGVzIGNsYXNzZXMgZGUgdmVuZGV1cnMgYXNzb2Npw6llcyBhdSBudW3DqXJvIHNww6ljaWZpw6kgc2Vyb250IGNoZXJjaMOpZXMuCisuVFAKKy5CIFwtaiwgLS1kaGNwLXVzZXJjbGFzcz1zZXQ6PGxhYmVsPiw8Y2xhc3NlIHV0aWxpc2F0ZXVyPgorQXNzb2NpZSB1bmUgY2hhw65uZSBkZSBjbGFzc2UgZCd1dGlsaXNhdGV1ciDDoCB1biBsYWJlbCAoZWZmZWN0dWUgbGEKK3JlY2hlcmNoZSBzdXIgZGVzIHNvdXMtY2hhw65uZXMsIGNvbW1lIHBvdXIgbGVzIGNsYXNzZXMgZGUgdmVuZGV1cikuIExhIHBsdXBhcnQKK2RlcyBjbGllbnRzIHBlcm1ldHRlbnQgZGUgY29uZmlndXJlciB1bmUgImNsYXNzZSBkJ3V0aWxpc2F0ZXVyIi4gQ2V0dGUgb3B0aW9uCithc3NvY2llIHVuZSBjbGFzc2UgZCd1dGlsaXNhdGV1ciDDoCB1biBsYWJlbCwgZGUgdGVsbGUgbWFuacOocmUgcXUnaWwgc29pdAorcG9zc2libGUgZGUgZm91cm5pciBkZXMgb3B0aW9ucyBESENQIHNww6ljaWZpcXVlcyDDoCBkaWZmw6lyZW50ZXMgY2xhc3NlcyBkJ2jDtHRlcy4KK0lsIGVzdCBwb3NzaWJsZSwgcGFyIGV4ZW1wbGUsIGQndXRpbGlzZXIgY2VjaSBwb3VyIGTDqWZpbmlyIHVuIHNlcnZldXIKK2QnaW1wcmVzc2lvbiBkaWZmw6lyZW50IHBvdXIgbGVzIGjDtHRlcyBkZSBsYSBjbGFzc2UgImNvbXB0ZXMiIGV0IGNldXggZGUgbGEKK2NsYXNzZSAiaW5nw6luaWVyaWUiLgorLlRQCisuQiBcLTQsIC0tZGhjcC1tYWM9c2V0OjxsYWJlbD4sPGFkcmVzc2UgTUFDPgorQXNzb2NpZSB1bmUgYWRyZXNzZSBtYXTDqXJpZWxsZSAoTUFDKSDDoCB1biBsYWJlbC4gTCdhZHJlc3NlCittYXTDqXJpZWxsZSBwZXV0IGluY2x1cmUgZGVzIGpva2Vycy4gUGFyIGV4ZW1wbGUKKy5CIC0tZGhjcC1tYWM9c2V0OjNjb20sMDE6MzQ6MjM6KjoqOioKK3Blcm1ldCBkZSBkw6lmaW5pciBsZSBsYWJlbCAiM2NvbSIgcG91ciBuJ2ltcG9ydGUgcXVlbCBow7R0ZSBkb250IGwnYWRyZXNzZQorbWF0w6lyaWVsbGUgY2/Dr25jaWRlIGF2ZWMgbGVzIGNyaXTDqHJlcyBkw6lmaW5pcy4KKy5UUAorLkIgLS1kaGNwLWNpcmN1aXRpZD1zZXQ6PGxhYmVsPiw8aWRlbnRpZmlhbnQgZGUgY2lyY3VpdD4sIC0tZGhjcC1yZW1vdGVpZD1zZXQ6PGxhYmVsPiw8aWRlbnRpZmlhbnQgZGlzdGFudD4KK0Fzc29jaWUgZGVzIG9wdGlvbnMgZGUgcmVsYWlzIERIQ1AgaXNzdXMgZGUgbGEgUkZDMzA0NiDDoCBkZXMgbGFiZWxzLgorQ2V0dGUgaW5mb3JtYXRpb24gcGV1dC3DqnRyZSBmb3VybmllIHBhciBkZXMgcmVsYWlzIERIQ1AuIEwnaWRlbnRpZmlhbnQKK2RlIGNpcmN1aXQgb3UgbCdpZGVudGlmaWFudCBkaXN0YW50IGVzdCBub3JtYWxlbWVudCBmb3Vybmkgc291cyBsYSBmb3JtZSBkJ3VuZQorY2hhw65uZSBkZSB2YWxldXJzIGhleGFkw6ljaW1hbGVzIHPDqXBhcsOpZXMgcGFyIGRlcyAiOiIsIG1haXMgaWwgZXN0IMOpZ2FsZW1lbnQKK3Bvc3NpYmxlIHF1J2VsbGUgbGUgc29pdCBzb3VzIGxhIGZvcm1lIGQndW5lIHNpbXBsZSBjaGHDrm5lIGRlIGNhcmFjdMOocmVzLiBTaQorbCdpZGVudGlmaWFudCBkZSBjaXJjdWl0IG91IGQnYWdlbnQgY29ycmVzcG9uZCBleGFjdGVtZW50IMOgIGNlbHVpIGZvdXJuaSBwYXIgbGUKK3JlbGFpcyBESENQLCBhbG9ycyBsZSBsYWJlbCBlc3QgYXBwb3PDqS4KKy5CIGRoY3AtcmVtb3RlaWQKK2VzdCBzdXBwb3J0w6kgZW4gSVB2NiAobWFpcyBub24gZGhjcC1jaXJjdWl0aWQpLgorLlRQCisuQiAtLWRoY3Atc3Vic2NyaWQ9c2V0OjxsYWJlbD4sPGlkZW50aWZpYW50IGQnYWJvbm7DqT4KKyhJUHY0IGV0IElQdjYpIEFzc29jaWUgZGVzIG9wdGlvbnMgZGUgcmVsYWlzIERIQ1AgaXNzdWVzIGRlIGxhIFJGQzM5OTMgw6AgZGVzCitsYWJlbHMuCisuVFAKKy5CIC0tZGhjcC1wcm94eVs9PGFkcmVzc2UgaXA+XS4uLi4uLgorKElQdjQgc2V1bGVtZW50KSBVbiBhZ2VudCByZWxhaSBESENQIG5vcm1hbCBlc3QgdW5pcXVlbWVudCB1dGlsaXPDqSBwb3VyIGZhaXJlCitzdWl2cmUgbGVzIMOpbMOpbWVudHMgaW5pdGlhdXggZGUgbCdpbnRlcmFjdGlvbiBhdmVjIGxlIHNlcnZldXIgREhDUC4gVW5lIGZvaXMKK3F1ZSBsZSBjbGllbnQgZXN0IGNvbmZpZ3Vyw6ksIGlsIGNvbW11bmlxdWUgZGlyZWN0ZW1lbnQgYXZlYyBsZSBzZXJ2ZXVyLiBDZWxhCituJ2VzdCBwYXMgc291aGFpdGFibGUgc2kgbGUgcmVsYWlzIHJham91dGUgZGVzIGluZm9ybWF0aW9ucyBzdXBwbMOpbWVudGFpcmVzCithdXggcGFxdWV0cyBESENQLCB0ZWxsZXMgcXVlIGNlbGxlcyB1dGlsaXPDqWVzIGRhbnMKKy5CIGRoY3AtY2lyY3VpdGlkCitldAorLkIgZGhjcC1yZW1vdGVpZC4KK1VuZSBpbXBsw6ltZW50YXRpb24gY29tcGzDqHRlIGRlIHJlbGFpIHBldXQgdXRpbGlzZXIgbCdvcHRpb24gc2VydmVyaWQtb3ZlcnJpZGUKK2RlIGxhIFJGQyA1MTA3IGFmaW4gZGUgZm9yY2VyIGxlIHNlcnZldXIgREhDUCDDoCB1dGlsaXNlciBsZSByZWxhaSBlbiB0ZW1wcyBxdWUKK3Byb3h5IGNvbXBsZXQsIGRlIHNvcnRlIHF1ZSB0b3VzIGxlcyBwYXF1ZXRzIHBhc3NlbnQgcGFyIGxlIHJlbGFpLiBDZXR0ZSBvcHRpb24KK3Blcm1ldCBkJ29idGVuaXIgbGUgbcOqbWUgcsOpc3VsdGF0IHBvdXIgZGVzIHJlbGFpcyBuZSBzdXBwb3J0YW50IHBhcyBsYSBSRkMKKzUxMDcuIEZvdXJuaWUgc2V1bGUsIGVsbGUgbWFuaXB1bGUgbGEgdmFsZXVyIGRlIHNlcnZlci1pZCBwb3VyIHRvdXRlcyBsZXMKK2ludGVyYWN0aW9ucyB2aWEgZGVzIHJlbGFpcy4gU2kgdW5lIGxpc3RlIGQnYWRyZXNzZXMgSVAgZXN0IGRvbm7DqWUsIHNldWxlcyBsZXMKK2ludGVyYWN0aW9ucyBhdmVjIGxlcyByZWxhaXMgZG9udCBsJ2FkcmVzc2UgZXN0IGRhbnMgbGEgbGlzdGUgc2Vyb250IGFmZmVjdMOpZXMuCisuVFAKKy5CIC0tZGhjcC1tYXRjaD1zZXQ6PGxhYmVsPiw8bnVtw6lybyBkJ29wdGlvbj58b3B0aW9uOjxub20gZCdvcHRpb24+fHZpLWVuY2FwOjxlbnRyZXByaXNlPlssPHZhbGV1cj5dCitTaSBhdWN1bmUgdmFsZXVyIG4nZXN0IHNww6ljaWZpw6llLCBhc3NvY2llIGxlIGxhYmVsIHNpIGxlIGNsaWVudAorZW52b2llIHVuZSBvcHRpb24gREhDUCBhdmVjIGxlIG51bcOpcm8gb3UgbGUgbm9tIHNww6ljaWZpw6kuIExvcnNxdSd1bmUgdmFsZXVyIGVzdAorZm91cm5pZSwgcG9zaXRpb25uZSBsZSBsYWJlbCBzZXVsZW1lbnQgZGFucyBsZSBjYXMgb8O5IGwnb3B0aW9uIGVzdCBmb3VybmllIGV0Citjb3JyZXNwb25kIMOgIGxhIHZhbGV1ci4gTGEgdmFsZXVyIHBldXQtw6p0cmUgZGUgbGEgZm9ybWUgIjAxOmZmOio6MDIiLCBhdXF1ZWwKK2NhcyBsZSBkw6lidXQgZGUgbCdvcHRpb24gZG9pdCBjb3JyZXNwb25kcmUgKGVuIHJlc3BlY3RhbnQgbGVzIGpva2VycykuIExhCit2YWxldXIgcGV1dCBhdXNzaSDDqnRyZSBkZSBsYSBtw6ptZSBmb3JtZSBxdWUgZGFucworLkIgZGhjcC1vcHRpb24KKywgYXVxdWVsIGNhcyBsJ29wdGlvbiBlc3QgdHJhaXTDqWUgY29tbWUgdW4gdGFibGVhdSBkZSB2YWxldXIsIGV0IHVuIGRlcworw6lsw6ltZW50cyBkb2l0IGNvcnJlc3BvbmRyZSwgYWluc2kKKworLS1kaGNwLW1hdGNoPXNldDplZmktaWEzMixvcHRpb246Y2xpZW50LWFyY2gsNgorCitzcMOpY2lmaWUgbGUgbGFiZWwgImVmaS1pYTMyIiBzaSBsZSBudW3DqXJvIDYgYXBwYXJhw650IGRuYXMgbGEgbGlzdGUKK2QnYXJjaGl0ZWN0dXJlcyBlbnZvecOpIHBhciBsZSBjbGllbnQgYXUgc2VpbiBkZSBsJ29wdGlvbiA5My4gKHNlIHLDqWZlcmVyCithdSBSRkMgNDU3OCBwb3VyIHBsdXMgZGUgZMOpdGFpbHMpLiBTaSBsYSB2YWxldXIgZXN0IHVuIGNoYWluZSBkZSBjYXJhY3TDqHJlcywKK2NlbGxlLWNpIGVzdCByZWNoZXJjaMOpZSAoY29ycmVzcG9uZGFuY2UgZW4gdGVtcHMgcXVlIHNvdXMtY2hhw65uZSkuCisKK1BvdXIgbGEgZm9ybWUgcGFydGljdWxpw6hyZSB2aS1lbmNhcDo8bnVtw6lybyBkJ2VudHJlcHJpc2U+LCBsYSBjb21wYXJhaXNvbiBzZQorZmFpdCBhdmVjIGxlcyBjbGFzc2VzIGRlIHZlbmRldXIgImlkZW50aWZpYW50IGRlIHZlbmRldXIiICgidmVuZG9yLWlkZW50aWZ5aW5nCit2ZW5kb3IgY2xhc3NlcyIpIHBvdXIgbCdlbnRyZXByaXNlIGRvbnQgbGUgbnVtw6lybyBlc3QgZm91cm5pIGVuIG9wdGlvbi4KK1ZldWlsbGV6IHZvdXMgcsOpZmVyZXIgw6AgbGEgUkZDIDM5MjUgcG91ciBwbHVzIGRlIGTDqXRhaWwuCisuVFAKKy5CIC0tdGFnLWlmPXNldDo8bGFiZWw+WyxzZXQ6PGxhYmVsPlssdGFnOjxsYWJlbD5bLHRhZzo8bGFiZWw+XV1dCitFZmZlY3R1ZSB1bmUgb3DDqXJhdGlvbiBib29sw6llbm5lIHN1ciBsZXMgbGFiZWxzLiBTaSB0b3VzIGxlcyBsYWJlbHMKK2FwcGFyYWlzc2FudCBkYW5zIGxhIGxpc3RlIHRhZzo8bGFiZWw+IHNvbnQgcG9zaXRpb25uw6lzLCBhbG9ycyB0b3VzIGxlcworbGEgZGUgbGEgbGlzdGUgInNldDo8bGFiZWxzPiIgc29udCBwb3NpdGlvbm7DqXMgKG91IHN1cHByaW3DqXMsIGRhbnMgbGUgY2FzCitvw7kgInRhZzohPGxhYmVsPiIgdXRpbGlzw6kpLgorU2kgYXVjdW4gdGFnOjxsYWJlbD4gbidlc3Qgc3DDqWNpZmnDqSwgYWxvcnMgdG91cyBsZXMgbGFiZWxzIGZvdXJuaXMgcGFyCitzZXQ6PGxhYmVsPiBzb250IHBvc2l0aW9ubsOpcy4KK04naW1wb3J0ZSBxdWVsIG5vbWJyZSBkZSBzZXQ6IG91IHRhZzogcGV1dmVudCDDqnRyZSBmb3VybmlzLCBldCBsJ29yZHJlIGVzdCBzYW5zCitpbXBvcnRhbmNlLgorTGVzIGxpZ25lcyB0YWctaWYgc29udCBleGVjdXTDqWVzIGRhbnMgbCdvcmRyZSwgY2UgcXVpIGZhaXQgcXVlIHNpIHVuIGxhYmVsIGRhbnMKK3RhZzo8bGFiZWw+IGVzdCB1biBsYWJlbCBwb3NpdGlvbm7DqSBwYXIgdW5lIHLDqmdsZQorLkIgdGFnLWlmLAorbGEgbGlnbmUgcXVpIHBvc2l0aW9ubmUgbGUgbGFiZWwgZG9pdCBwcsOpY8OpZGVyIGNlbGxlIHF1aSBsZSB0ZXN0ZS4KKy5UUAorLkIgXC1KLCAtLWRoY3AtaWdub3JlPXRhZzo8bGFiZWw+Wyx0YWc6PGxhYmVsPl0KK0xvcnNxdWUgdG91cyBsZXMgbGFiZWxzIGZvdXJuaXMgZGFucyBsJ29wdGlvbiBzb250IHByw6lzZW50cywgaWdub3JlciBsJ2jDtHRlIGV0CituZSBwYXMgZG9ubmVyIGRlIGJhaWwgREhDUC4KKy5UUAorLkIgLS1kaGNwLWlnbm9yZS1uYW1lc1s9dGFnOjxsYWJlbD5bLHRhZzo8bGFiZWw+XV0KK0xvcnNxdWUgdG91cyBsZXMgbGFiZWxzIGZvdXJuaXMgZGFucyBsJ29wdGlvbiBzb250IHByw6lzZW50cywgaWdub3JlciBsZQorbm9tIGRlIG1hY2hpbmUgZm91cm5pIHBhciBsJ2jDtHRlLiBJbCBlc3Qgw6Agbm90ZXIgcXVlLCDDoCBsYSBkaWZmw6lyZW5jZSBkZQorbCdvcHRpb24gImRoY3AtaWdub3JlIiwgaWwgZXN0IHBlcm1pcyBkZSBuZSBwYXMgZm91cm5pciBkZSBsYWJlbC4KK0RhbnMgY2UgY2FzLCBsZXMgbm9tcyBkJ2jDtHRlcyBmb3VybmlzIHBhciBsZXMgY2xpZW50cyBESENQIHNlcm9udCB0b3Vqb3VycworaWdub3LDqXMsIGV0IGxlcyBub21zIGQnaMO0dGVzIHNlcm9udCBham91dMOpcyBhdSBETlMgZW4gdXRpbGlzYW50IHVuaXF1ZW1lbnQgbGEKK2NvbmZpZ3VyYXRpb24gZGhjcC1ob3N0IGRlIERuc21hc3EsIGFpbnNpIHF1ZSBsZSBjb250ZW51IGRlcyBmaWNoaWVycyAvZXRjL2hvc3RzCitldCAvZXRjL2V0aGVycy4KKy5UUAorLkIgLS1kaGNwLWdlbmVyYXRlLW5hbWVzPXRhZzo8bGFiZWw+Wyx0YWc6PGxhYmVsPl0KKyhJUHY0IHNldWxlbWVudCkgR8OpbsOpcmVyIHVuIG5vbSBwb3VyIGxlcyBjbGllbnRzIERIQ1AgcXVpIGF1dHJlbWVudCBuJ2VuIGF1cmFpdAorcGFzLCBlbiB1dGlsaXNhbnQgbCdhZHJlc3NlIE1BQyBzb3VzIHNhIGZvcm1lIGhleGFkw6ljaW1hbGUsIHPDqXBhcsOpZSBwYXIgZGVzCit0aXJldHMuCitOb3RlciBxdWUgc2kgdW4gaMO0dGUgZm91cm5pIHVuIG5vbSwgY2VsdWktY2kgc2VyYSB1dGlsaXPDqSBkZSBwcsOpZsOpcmVuY2UgYXUgbm9tCithdXRvZ8OpbsOpcsOpLCDDoCBtb2lucyBxdWUKKy5CIC0tZGhjcC1pZ25vcmUtbmFtZXMgCituZSBzb2l0IHBvc2l0aW9ubsOpLgorLlRQCisuQiAtLWRoY3AtYnJvYWRjYXN0PVt0YWc6PGxhYmVsPlssdGFnOjxsYWJlbD5dXQorKElQdjQgc2V1bGVtZW50KSBMb3JzcXVlIHRvdXMgbGVzIGxhYmVscyBmb3VybmlzIGRhbnMgbCdvcHRpb24gc29udCBwcsOpc2VudHMsCit0b3Vqb3VycyB1dGlsaXNlciBsZSBicm9hZGNhc3QgcG91ciBjb21tdW5pcXVlciBhdmVjIGwnaMO0dGUgbG9yc3F1ZSBjZWx1aS1jaQorbidlc3QgcGFzIGNvbmZpZ3Vyw6kuIElsIGVzdCBwb3NzaWJsZSBkZSBuZSBzcMOpY2lmaWVyIGF1Y3VuIGxhYmVsLCBhdXF1ZWwgY2FzCitjZXR0ZSBvcHRpb24gcydhcHBsaXF1ZSBpbmNvbmRpdGlvbm5lbGxlbWVudC4gTGEgcGx1cGFydCBkZXMgY2xpZW50cyBESENQCituw6ljZXNzaXRhbnQgdW5lIHLDqXBvbnNlIHBhciBsZSBiaWFpcyBkJ3VuIGJyb2FkY2FzdCBhY3RpdmVudCB1bmUgb3B0aW9uIGRhbnMKK2xldXIgcmVxdcOqdGUsIGNlIHF1aSBmYWl0IHF1ZSBjZWxhIHNlIGZhaXQgYXV0b21hdGlxdWVtZW50LCBtYWlzIGNlIG4nZXN0IHBhcworbGUgY2FzIGRlIGNlcnRhaW5zIHZpZXV4IGNsaWVudHMgQk9PVFAuCisuVFAKKy5CIFwtTSwgLS1kaGNwLWJvb3Q9W3RhZzo8bGFiZWw+LF08bm9tIGRlIGZpY2hpZXI+LFs8bm9tIGRlIHNlcnZldXI+Wyw8YWRyZXNzZSBkZSBzZXJ2ZXVyPnw8bm9tIGR1IHNlcnZldXIgdGZ0cD5dXQorKElQdjQgc2V1bGVtZW50KSBTcMOpY2lmaWUgbGVzIG9wdGlvbnMgQk9PVFAgZGV2YW50IMOqdHJlIHJldG91cm7DqWVzIHBhciBsZQorc2VydmV1ciBESENQLiBMZSBub20gZGUgc2VydmV1ciBhaW5zaSBxdWUgbCdhZHJlc3NlIHNvbnQgb3B0aW9ubmVscyA6IHMnaWxzCituZSBzb250IHBhcyBmb3VybmlzLCBsZSBub20gZXN0IGxhaXNzw6kgdmlkZSBldCBsJ2FkcmVzc2UgZm91cm5pZSBlc3QgY2VsbGUgZGUKK2xhIG1hY2hpbmUgc3VyIGxhcXVlbGxlIHMnZXjDqWN1dGUgRG5zbWFzcS4gU2kgRG5zbWFzcSBmb3VuaXQgdW4gc2VydmljZSBURlRQICh2b2lyCisuQiAtLWVuYWJsZS10ZnRwCispLCBhbG9ycyBzZXVsIHVuIG5vbSBkZSBmaWNoaWVyIGVzdCByZXF1aXMgaWNpIHBvdXIgcGVybWV0dHJlIHVuIGTDqW1hcnJhZ2UgcGFyCitsZSByw6lzZWF1LgorU2kgZCfDqXZlbnR1ZWxzIGxhYmVscyBzb250IGZvdXJuaXMsIGlscyBkb2l2ZW50IGNvw69uY2lkZXIgYXZlYworY2V1eCBkdSBjbGllbnQgcG91ciBxdWUgY2V0IMOpbGVtZW50IGRlIGNvbmZpZ3VyYXRpb24gbHVpIHNvaXQgZW52b3nDqS4KK1VuZSBhZHJlc3NlIGRlIHNlcnZldXIgVEZUUCBwZXV0IMOqdHJlIHNww6ljaWZpw6llIMOgIGxhIHBsYWNlIGRlIGwnYWRyZXNzZSBJUCwKK3NvdXMgbGEgZm9ybWUgZCd1biBub20gZGUgZG9tYWluZSBxdWkgc2VyYSBjaGVyY2jDqSBkYW5zIGxlIGZpY2hpZXIgL2V0Yy9ob3N0cy4KK0NlIG5vbSBwZXV0IMOqdHJlIGFzc29jacOpIGRhbnMgL2V0Yy9ob3N0cyBhdmVjIHBsdXNpZXVycyBhZHJlc3NlcyBJUCwgYXVxdWVsIGNhcworY2VsbGVzLWNpIHNlcm9udCB1dGlsaXPDqWVzIHRvdXIgw6AgdG91ciAoYWxnb3JpdGhtZSByb3VuZC1yb2JpbikuCitDZWxhIHBldXQtw6p0cmUgdXRpbGlzZXIgcG91ciDDqXF1aWxpYnJlciBsYSBjaGFyZ2UgdGZ0cCBzdXIgcGx1c2lldXJzIHNlcnZldXJzLgorLlRQCisuQiAtLWRoY3Atc2VxdWVudGlhbC1pcAorRG5zbWFzcSBlc3QgY29uw6d1IHBvdXIgY2hvaXNpciBsJ2FkcmVzc2UgSVAgZGVzIGNsaWVudHMgREhDUCBlbiB1dGlsaXNhbnQKK3VuIGhhY2hhZ2UgZGUgbCdhZHJlc3NlIE1BQyBkdSBjbGllbnQuIENlbGEgcGVybWV0IGVuIGfDqW7DqXJhbCDDoCBsJ2FkcmVzc2UKK0lQIGR1IGNsaWVudCBkZSByZXN0ZXIgc3RhYmxlIGF1IGZpbCBkdSB0ZW1wcywgbcOqbWUgbG9yc3F1ZSBsZSBjbGllbnQgbGFpc3NlCitleHBpcmVyIHNvbiBiYWlsIERIQ1AgZGUgdGVtcHMgZW4gdGVtcHMuIERhbnMgY2UgbW9kZSBkZSBmb25jdGlvbm5lbWVudCBwYXIKK2TDqWZhdXQsIGxlcyBhZHJlc3NlcyBJUCBzb250IGRpc3RyaWJ1w6llcyBkZSBmYcOnb24gcHNldWRvLWFsw6lhdG9pcmUgZGFucyBsYQordG90YWxpdMOpIGRlIGxhIHBsYWdlIGQnYWRyZXNzZXMgdXRpbGlzYWJsZS4gSWwgZXhpc3RlIGRlcyBjaXJjb25zdGFuY2VzIChwYXIKK2V4ZW1wbGVzIHBvdXIgZHUgZMOpcGxvaWVtZW50IGRlIHNlcnZldXIpIG/DuSBpbCBlc3QgcGx1cyBwcmF0aXF1ZSBkJ2FsbG91ZXIgbGVzCithZHJlc3NlcyBJUCBkZSBtYW5pw6hyZSBzw6lxdWVudGllbGxlLCBlbiBjb21tZW7Dp2FudCBwYXIgbGEgcGx1cyBwZXRpdGUgYWRyZXNzZQorZGlzcG9uaWJsZSwgZXQgYydlc3QgY2UgbW9kZSBkZSBmb25jdGlvbm5lbWVudCBxdWkgZXN0IHBlcm1pcyBwYXIgY2V0dGUgb3B0aW9uLgorVmV1aWxsZXogbm90ZXIgcXVlIGRhbnMgY2UgbW9kZSBzw6lxdWVudGllbCwgbGVzIGNsaWVudHMgcXVpIGxhaXNzZW50IGV4cGlyZXIKK2xldXIgYmFpbCBvbnQgYmVhdWNvdXAgcGx1cyBkZSBjaGFuY2UgZGUgdm9pciBsZXVyIGFkcmVzc2UgSVAgY2hhbmdlciwgYXVzc2kKK2NldHRlIG9wdGlvbiBuZSBkZXZyYWl0IHBhcyDDqnRyZSB1dGlsaXPDqWUgZGFucyB1biBjYXMgZ8OpbsOpcmFsLgorLlRQCisuQiAtLXB4ZS1zZXJ2aWNlPVt0YWc6PGxhYmVsPixdPENTQT4sPGVudHLDqWUgZGUgbWVudT5bLDxub20gZGUgZmljaGllcj58PHR5cGUgZGUgc2VydmljZSBkZSBkw6ltYXJyYWdlPl1bLDxhZHJlc3NlIGRlIHNlcnZldXI+fDxub20gZGUgc2VydmV1cj5dCitMYSBwbHVwYXJ0IGRlcyBST01TIGRlIGTDqW1hcnJhZ2UgUFhFIG5lIHBlcm1ldHRlbnQgYXUgc3lzdMOobWUgUFhFIHF1ZSBsYSBzaW1wbGUKK29idGVudGlvbiBkJ3VuZSBhZHJlc3NlIElQLCBsZSB0w6lsw6ljaGFyZ2VtZW50IGR1IGZpY2hpZXIgc3DDqWNpZmnDqSBkYW5zCisuQiBkaGNwLWJvb3QKK2V0IHNvbiBleMOpY3V0aW9uLiBDZXBlbmRhbnQsIGxlIHN5c3TDqG1lIFBYRSBlc3QgY2FwYWJsZSBkZSBmb25jdGlvbnMgYmllbiBwbHVzCitjb21wbGV4ZXMgcG91ciBwZXUgcXVlIGxlIHNlcnZldXIgREhDUCBzb2l0IGFkYXB0w6kuCisKK0NlY2kgc3DDqWNpZmllIGwnb3B0aW9uIGRlIGTDqW1hcnJhZ2UgcXVpIGFwcGFyYWl0cmEgZGFucyB1biBtZW51IGRlIGTDqW1hcnJhZ2UKK1BYRS4gPENTQT4gZXN0IGxlIHR5cGUgZHUgc3lzdMOobWUgY2xpZW50LiBTZXVscyBkZXMgdHlwZXMgZGUgc2VydmljZXMgdmFsaWRlcworYXBwYXJhaXRyb250IGRhbnMgdW4gbWVudS4gTGVzIHR5cGVzIGNvbm51cyBzb250IHg4NlBDLCBQQzk4LCBJQTY0X0VGSSwgQWxwaGEsCitBcmNfeDg2LCBJbnRlbF9MZWFuX0NsaWVudCwgSUEzMl9FRkksIEJDX0VGSSwgWHNjYWxlX0VGSSBldCBYODYtNjRfRUZJOworRCdhdXRyZXMgdHlwZXMgcGV1dmVudC3DqnRyZSBzcMOpY2lmacOpcyBzb3VzIGxhIGZvcm1lIGQndW5lIHZhbGV1ciBlbnRpw6hyZS4gTGUKK3BhcmFtw6h0cmUgYXByw6hzIGxlIHRleHRlIGNvcnJlc3BvbmRhbnQgw6AgbCdlbnRyw6llIGRhbnMgbGUgbWVudSBwZXV0IMOqdHJlIHVuIG5vbQorZGUgZmljaGllciwgYXVxdWVsIGNhcyBEbnNtYXNxIGFnaXQgY29tbWUgdW4gc2VydmV1ciBkZSBkw6ltYXJyYWdlIGV0IGluZGlxdWUgYXUKK2NsaWVudCBQWEUgcXUnaWwgZmF1dCB0w6lsw6ljaGFyZ2VyIGNlIGZpY2hpZXIgdmlhIFRGVFAsIHNvaXQgZGVwdWlzIGNlIHNlcnZldXIKKyhsJ29wdGlvbgorLkIgZW5hYmxlLXRmdHAgCitkb2l0IMOqdHJlIHNww6ljaWZpw6llIHBvdXIgcXVlIGNlbGEgbWFyY2hlKSwgc29pdCBkZXB1aXMgdW4gYXV0cmUgc2VydmV1ciBURlRQCitzaSB1bmUgYWRyZXNzZSBvdSB1biBub20gZGUgc2VydmV1ciBlc3QgZm91cm5pZS4KK1ZldWlsbGV6IG5vdGVyIHF1ZSBsZSBzdWZmaXhlIGRlICJjb3VjaGUiIChlbiBwcmluY2lwZSAiLjAiKSBlc3QgZm91cm5pIHBhciBQWEUKK2V0IG5lIGRvaXQgcGFzIMOqdHJlIHJham91dMOpIGF1IG5vbSBkZSBmaWNoaWVyLiBTaSB1bmUgdmFsZXVyIG51bcOpcmlxdWUgZW50acOocmUKK2VzdCBmb3VybmlyIHBvdXIgbGUgdHlwZSBkZSBkw6ltYXJyYWdlLCBlbiByZW1wbGFjZW1lbnQgZHUgbm9tIGRlIGZpY2hpZXIsIGxlCitjbGllbnQgUFhFIGRldnJhIGNoZXJjaGVyIHVuIHNlcnZpY2UgZGUgZMOpbWFycmFnZSBkZSBjZSB0eXBlIHN1ciBsZSByw6lzZWF1LgorQ2V0dGUgcmVjaGVyY2hlIHBldXQgw6p0cmUgZmFpdGUgdmlhIGJyb2FkY2FzdCBvdSBkaXJlY3RlbWVudCBhdXByw6hzIGQndW4KK3NlcnZldXIgc2kgc29uIGFkcmVzc2UgSVAgb3Ugc29uIG5vbSBzb250IGZvdXJuaXMgZGFucyBsJ29wdGlvbi4KK1NpIGF1Y3VuIG5vbSBkZSBmaWNoaWVyIG4nZXN0IGRvbm7DqSBuaSBhdWN1bmUgdmFsZXVyIGRlIHR5cGUgZGUgc2VydmljZSBkZQorZMOpbWFycmFnZSBuJ2VzdCBmb3VybmllIChvdSBxdSd1bmUgdmFsZXVyIGRlIDAgZXN0IGRvbm7DqWUgcG91ciBsZSB0eXBlIGRlCitzZXJ2aWNlKSwgYWxvcnMgbCdlbnRyw6llIGRlIG1lbnUgcHJvdm9xdWUgbCdpbnRlcnJ1cHRpb24gZHUgZMOpbWFycmFnZSBwYXIKK2xlIHLDqXNlYXUgZXQgbGEgcG91cnN1aXRlIGR1IGTDqW1hcnJhZ2Ugc3VyIHVuIG3DqWRpYSBsb2NhbC4gTCdhZHJlc3NlIGRlIHNlcnZldXIKK3BldXQgw6p0cmUgZG9ubsOpZSBzb3VzIGxhIGZvcm1lIGRlIG5vbSBkZSBkb21haW5lIHF1aSBlc3QgcmVjaGVyY2jDqSBkYW5zCisvZXRjL2hvc3RzLiBDZSBub20gcGV1dC3DqnRyZSBhc3NvY2nDqSDDoCBwbHVzaWV1cnMgYWRyZXNzZXMgSVAsIHF1aSBkYW5zIGNlIGNhcworc29udCB1dGlsaXPDqWVzIMOgIHRvdXIgZGUgcsO0bGUgKGVuICJyb3VuZC1yb2JpbiIpLgorLlRQCisuQiAtLXB4ZS1wcm9tcHQ9W3RhZzo8bGFiZWw+LF08aW52aXRlPlssPGTDqWxhaT5dCitDZXR0ZSBvcHRpb24gcGVybWV0IGQnYWZmaWNoZXIgdW5lIGludml0ZSDDoCBsYSBzdWl0ZSBkdSBkw6ltYXJyYWdlIFBYRS4gU2kgdW4KK2TDqWxhaSBlc3QgZm91cm5pLCBhbG9ycyBsYSBwcmVtacOocmUgZW50csOpZSBkdSBtZW51IGRlIGTDqW1hcnJhZ2Ugc2VyYQorYXV0b21hdGlxdWVtZW50IGV4w6ljdXTDqWUgYXByw6hzIGNlIGTDqWxhaS4gU2kgbGUgZMOpbGFpIHZhdXQgMCwgYWxvcnMgbGEgcHJlbWnDqHJlCitlbnRyw6llIGRpc3BvbmlibGUgc2VyYSBleMOpY3V0w6llIGltbcOpZGlhdGVtZW50LiBTaQorLkIgcHhlLXByb21wdAorZXN0IG9taXMsIGxlIHN5c3TDqG1lIGF0dGVuZHJhIHVuIGNob2l4IGRlIGwndXRpbGlzYXRldXIgcydpbCBleGlzdGUgcGx1c2lldXJzCitlbnRyw6llcyBkYW5zIGxlIG1lbnUsIG91IGTDqW1hcnJlcmEgaW1tw6lkaWF0ZW1lbnQgZGFucyBsZSBjYXMgb8O5IGlsIG4neSBhIHF1J3VuZQorc2V1bGUgZW50csOpZS4gVm9pcgorLkIgcHhlLXNlcnZpY2UgCitwb3VyIHBsdXMgZGUgZMOpdGFpbHMgc3VyIGxlcyBlbnRyw6llcyBkZSBtZW51LgorCitEbnNtYXNxIHBldXQgc2VydmlyIGRlICJwcm94eS1ESENQIiBQWEUsIGRhbnMgbGUgY2FzIG/DuSB1biBhdXRyZSBzZXJ2ZXVyIERIQ1AKK3N1ciBsZSByw6lzZWF1IGVzdCByZXNwb25zYWJsZSBkZSBsJ2FsbG9jYXRpb24gZGVzIGFkcmVzc2VzIElQLCBhdXF1ZWwgY2FzCitEbnNtYXNxIHNlIGNvbnRlbnRlIGRlIGZvdXJuaXIgbGVzIGluZm9ybWF0aW9ucyBkb25uw6llcyBkYW5zIGxlcyBvcHRpb25zCisuQiBweGUtcHJvbXB0CitldAorLkIgcHhlLXNlcnZpY2UKK3BvdXIgcGVybWV0dHJlIGxlIGTDqW1hcnJhZ2UgcGFyIGxlIHLDqXNlYXUuIENlIG1vZGUgZXN0IGFjdGl2w6kgZW4gdXRpbGlzYW50IGxlCittb3QtY2xlZgorLkIgcHJveHkKK2RhbnMKKy5CIGRoY3AtcmFuZ2UuCisuVFAKKy5CIFwtWCwgLS1kaGNwLWxlYXNlLW1heD08bm9tYnJlPgorTGltaXRlIERuc21hc3Egw6AgdW4gbWF4aW11bSBkZSA8bm9tYnJlPiBiYXV4IERIQ1AuIExlIGTDqWZhdXQgZXN0IGRlIDEwMDAuIENldHRlCitsaW1pdGUgcGVybWV0IGQnw6l2aXRlciBkZXMgYXR0YXF1ZXMgZGUgZMOpbmkgZGUgc2VydmljZSAoIkRvUyIpIHBhciBkZXMgaMO0dGVzCitjcsOpYW50IGRlcyBtaWxsaWVycyBkZSBiYXV4IGV0IHV0aWxpc2FudCBiZWF1Y291cCBkZSBtw6ltb2lyZSBkYW5zIGxlIHByb2Nlc3N1cworRG5zbWFzcS4KKy5UUAorLkIgXC1LLCAtLWRoY3AtYXV0aG9yaXRhdGl2ZQorRG9pdCDDqnRyZSBzcMOpY2lmacOpIGxvcnNxdWUgZG5zbWFzcSBlc3QgcsOpZWxsZW1lbnQgbGUgc2V1bCBzZXJ2ZXVyIERIQ1AKK3N1ciBsZSByw6lzZWF1LiBQb3VyIERIQ1B2NCwgY2VsYSBjaGFuZ2UgbGUgY29tcG9ydGVtZW50IHBhciBkw6lmYXV0IHF1aSBlc3QKK2NlbHVpIGQndW4gc3RyaWN0IHJlc3BlY3QgZGVzIFJGQywgYWZpbiBxdWUgbGVzIHJlcXXDqnRlcyBESENQIHBvdXIgZGVzIGJhdXgKK2luY29ubnVzIHBhciBkZXMgaMO0dGVzIGluY29ubnVzIG5lIHNvaWVudCBwYXMgaWdub3LDqWVzLiBDZWxhIHBlcm1ldCDDoCBkZQorbm91dmVhdXggaMO0dGVzIGQnb2J0ZW5pciBkZXMgYmF1eCBzYW5zIHRlbmlyIGNvbXB0ZSBkZSBmYXN0aWRpZXVzZXMKK3RlbXBvcmlzYXRpb25zICgidGltZW91dCIpLiBDZWxhIHBlcm1ldCDDqWdhbGVtZW50IMOgIERuc21hc3EgZGUgcmVjb25zdHJ1aXJlCitzYSBiYXNlIGRlIGRvbm7DqWVzIGNvbnRlbmFudCBsZXMgYmF1eCBzYW5zIHF1ZSBsZXMgY2xpZW50cyBuJ2FpZW50IGJlc29pbiBkZQorcmVkZW1hbmRlciB1biBiYWlsLCBzaSBjZWxsZS1jaSBlc3QgcGVyZHVlLgorRGFucyBsZSBjYXMgZGUgREhDUHY2LCBjZWxhIHBvc2l0aW9ubmUgbGEgcHJpb3JpdMOpIGRlcyByw6lwb25zZXMgw6AgMjU1IChsZQorbWF4aW11bSkgYXUgbGlldSBkZSAwIChsZSBtaW5pbXVtKS4KKy5UUAorLkIgLS1kaGNwLWFsdGVybmF0ZS1wb3J0Wz08cG9ydCBzZXJ2ZXVyPlssPHBvcnQgY2xpZW50Pl1dCisoSVB2NCBzZXVsZW1lbnQpIENoYW5nZSBsZXMgcG9ydHMgdXRpbGlzw6lzIHBhciBkw6lmYXV0IHBvdXIgbGUgREhDUC4gU2kgY2V0dGUKK29wdGlvbiBlc3QgZG9ubsOpZSBzZXVsZSBzYW5zIGFyZ3VtZW50LCBhbG9ycyBjaGFuZ2UgbGVzIHBvcnRzIHV0aWxpc8OpcyBwb3VyIGxlCitESENQIGRlIDY3IGV0IDY4IHJlc3BlY3RpdmVtZW50IMOgIDEwNjcgZXQgMTA2OC4gU2kgdW4gc2V1bCBhcmd1bWVudCBlc3QgZG9ubsOpLCBjZQorbnVtw6lybyBlc3QgdXRpbGlzw6kgcG91ciBsZSBwb3J0IHNlcnZldXIgZXQgY2UgbnVtw6lybyBwbHVzIDEgZXN0IHV0aWxpc8OpIHBvdXIgbGUKK3BvcnQgY2xpZW50LiBFbmZpbiwgZW4gZm91cm5pc3NhbnQgZGV1eCBudW3DqXJvcyBkZSBwb3J0cywgaWwgZXN0IHBvc3NpYmxlIGRlCitzcMOpY2lmaWVyIGFyYml0cmFpcmVtZW50IDIgcG9ydHMgw6AgbGEgZm9pcyBwb3VyIGxlIHNlcnZldXIgZXQgcG91ciBsZSBjbGllbnQgREhDUC4KKy5UUAorLkIgXC0zLCAtLWJvb3RwLWR5bmFtaWNbPTxpZGVudGlmaWFudCBkZSByw6lzZWF1PlssPGlkZW50aWZpYW50IGRlIHLDqXNlYXU+XV0KKyhJUHY0IHNldWxlbWVudCkgUGVybWV0IGwnYWxsb2NhdGlvbiBkeW5hbWlxdWUgZCdhZHJlc3NlcyBJUCDDoCBkZXMgY2xpZW50cyBCT09UUC4KK1V0aWxpc2VyIGNldHRlIG9wdGlvbiBhdmVjIHByw6ljYXV0aW9uLCB1bmUgYWRyZXNzZSBhbGxvdcOpZSDDoCB1biBjbGllbnQgQk9PVFAKK8OpdGFudCBwZXJww6l0dWVsbGUsIGV0IGRlIGZhaXQgbidlc3QgcGx1cyBkaXNwb25pYmxlcyBwb3VyIGQnYXV0cmVzIGjDtHRlcy4gU2kKK2F1Y3VuIGFyZ3VtZW50IG4nZXN0IGRvbm7DqSwgYWxvcnMgY2V0dGUgb3B0aW9uIHBlcm1ldCB1bmUgYWxsb2NhdGlvbiBkeW5hbWlxdWUKK2RhbnMgdG91cyBsZXMgY2FzLiBTaSBkZXMgYXJndW1lbnRzIHNvbnQgc3DDqWNpZmnDqXMsIGFsb3JzIGwnYWxsb2NhdGlvbiBuZSBzZQorZmFpdCBxdWUgbG9yc3F1ZSB0b3VzIGxlcyBpZGVudGlmaWFudHMgY2/Dr25jaWRlbnQuIElsIGVzdCBwb3NzaWJsZSBkZSByw6lwZXRlcgorY2V0dGUgb3B0aW9uIGF2ZWMgcGx1c2lldXJzIGpldXggZCdhcmd1bWVudHMuCisuVFAKKy5CIFwtNSwgLS1uby1waW5nCisoSVB2NCBzZXVsZW1lbnQpIFBhciBkw6lmYXV0LCBsZSBzZXJ2ZXVyIERIQ1AgdGVudGUgZGUgcydhc3N1cmVyIHF1J3VuZSBhZHJlc3NlCituJ2VzdCBwYXMgdXRpbGlzw6llIGF2YW50IGRlIGwnYWxsb3VlciDDoCB1biBow7R0ZS4gQ2VsYSBlc3QgZmFpdCBlbiBlbnZveWFudCB1bmUKK3JlcXXDqnRlIElDTVAgZGUgdHlwZSAiZWNobyByZXF1ZXN0IiAoYXVzc2kgY29ubnVlIHNvdXMgbGUgbm9tIGRlICJwaW5nIikgw6AKK2wnYWRyZXNzZSBlbiBxdWVzdGlvbi4gU2kgbGUgc2VydmV1ciBvYnRpZW50IHVuZSByw6lwb25zZSwgYWxvcnMgbCdhZHJlc3NlIGRvaXQKK2TDqWrDoCDDqnRyZSB1dGlsaXPDqWUgZXQgdW5lIGF1dHJlIGVzdCBlc3NhecOpZS4gQ2V0dGUgb3B0aW9uIHBlcm1ldCBkZSBzdXBwcmltZXIKK2NldHRlIHbDqXJpZmljYXRpb24uIEEgdXRpbGlzZXIgYXZlYyBwcsOpY2F1dGlvbi4KKy5UUAorLkIgLS1sb2ctZGhjcAorVHJhY2VzIGFkZGl0aW9ubmVsbGVzIHBvdXIgbGUgc2VydmljZSBESENQIDogZW5yZWdpc3RyZSB0b3V0ZXMgbGVzIG9wdGlvbnMKK2Vudm95w6llcyBhdXggY2xpZW50cyBESENQIGV0IGxlcyBsYWJlbHMgdXRpbGlzw6lzIHBvdXIgbGEKK2TDqXRlcm1pbmF0aW9uIGRlIGNlbGxlcy1jaS4KKy5UUAorLkIgLS1xdWlldC1kaGNwLCAtLXF1aWV0LWRoY3A2LCAtLXF1aWV0LXJhCitTdXBwcmltZSBsZXMgbG9ncyBkZXMgb3DDqXJhdGlvbnMgZGUgcm91dGluZSBkZXMgcHJvdG9jb2xlcyBjb25jZXJuw6lzLiBMZXMKK2VycmV1cnMgZXQgbGVzIHByb2Jsw6htZXMgc2Vyb250IHRvdWpvdXJzIGVucmVnaXN0csOpcy4gTCdvcHRpb24gLS1sb2ctZGhjcAorcHJlbmRzIGxlIHBhcyBzdXIgLS1xdWlldC1kaGNwIGV0IHF1aWV0LWRoY3A2LgorLlRQCisuQiBcLWwsIC0tZGhjcC1sZWFzZWZpbGU9PGNoZW1pbiBkZSBmaWNoaWVyPgorVXRpbGlzZSBsZSBmaWNoaWVyIGRvbnQgbGUgY2hlbWluIGVzdCBmb3VybmkgcG91ciBzdG9ja2VyIGxlcyBpbmZvcm1hdGlvbnMgZGUKK2JhdXggREhDUC4KKy5UUAorLkIgLS1kaGNwLWR1aWQ9PElEIGQnZW50cmVwcmlzZT4sPHVpZD4KKyhJUHY2IHNldWxlbWVudCkgU3DDqWNpZmllIGxlIG51bcOpcm8gZCdVSUQgZGUgc2VydmV1ciBwZXJzaXN0YW50IHF1ZSBsZSBzZXJ2ZXVyCitESENQdjYgZG9pdCB1dGlsaXNlci4gQ2V0dGUgb3B0aW9uIG4nZXN0IG5vcm1hbGVtZW50IHBhcyByZXF1aXNlLCBEbnNtYXNxCitjcsOpYW50IHVuIERVSUQgYXV0b21hdGlxdWVtZW50IGxvcnNxdWUgY2VsYSBlc3QgbsOpY2Vzc2FpcmUuIExvcnNxdWUgY2V0dGUKK29wdGlvbiBlc3QgcG9zaXRpb25uw6llLCBlbGxlIGZvdXJuaXQgw6AgRG5zbWFzcSBsZXMgZG9ubsOpZXMgbsOpY2Vzc2FpcmVzIMOgIGxhCitjcsOpYXRpb24gZCd1biBEVUlEIGRlIHR5cGUgRFVJRC1FTi4gVmV1aWxsZXogbm90ZXIgcXUndW5lIGZvaXMgY3LDqcOpLCBsZSBEVUlECitlc3Qgc3RvY2vDqSBkYW5zIGxhIGJhc2UgZGVzIGJhdXgsIGF1c3NpIGNoYW5nZXIgZW50cmUgdW4gRFVJRCBjcsOpw6kKK2F1dG9tYXRpcXVlbWVudCBldCB1biBEVUlELUVOIGV0IHZpY2UtdmVyc2EgaW1wb3NlIGRlIHLDqWluaXRpYWxpc2VyIGxhIGJhc2UgZGUKK2JhdXguIExlIG51bcOpcm8gZCdJRCBkJ2VudHJlcHJpc2UgZXN0IGFzc2lnbsOpIHBhciBsJ0lBTkEsIGV0IGwndWlkIGVzdCB1bmUKK2NoYWluZSBoZXhhZMOpY2ltYWxlIHVuaXF1ZSDDoCBjaGFxdWUgc2VydmV1ci4KKy5UUAorLkIgXC02IC0tZGhjcC1zY3JpcHQ9PGNoZW1pbiBkZSBmaWNoaWVyPgorTG9yc3F1J3VuIGJhaWwgREhDUCBlc3QgY3LDqcOpLCBxdSd1biBhbmNpZW4gZXN0IHN1cHByaW3DqSwgb3UgcXUndW4gdHJhbnNmZXJ0CitURlRQIGVzdCB0ZXJtaW7DqSwgbGUgZmljaGllciBkb250IGxlCitjaGVtaW4gIGVzdCBzcMOpY2lmacOpIGVzdCBleMOpY3V0w6kuIExlIDxjaGVtaW4gZGUgZmljaGllcj4gZG9pdCDDqnRyZSB1biBjaGVtaW4KK2Fic29sdSwgYXVjdW5lIHJlY2hlcmNoZSBuJ2VzdCBlZmZlY3R1w6llIHZpYSBsYSB2YXJpYWJsZSBkJ2Vudmlyb25uZW1lbnQgUEFUSC4KK0xlcyBhcmd1bWVudHMgZm91cm5pcyDDoCBjZWx1aS1jaSBzb250IHNvaXQKKyJhZGQiICgiYWpvdXRlciIpLCAib2xkIiAoImFuY2llbiIpIG91ICJkZWwiICgic3VwcHJpbWVyIiksIHN1aXZpIGRlIGwnYWRyZXNzZQorTUFDIGRlIGwnaMO0dGUgKG91IGxlIERVSUQgcG91ciBJUHY2KSBwdWlzIGwnYWRyZXNzZSBJUCBldCBsZSBub20gZCdow7R0ZSBzaQorY2VsdWktY2kgZXN0IGNvbm51LiJhZGQiIHNpZ25pZmllIHF1J3VuIGJhaWwgYSDDqXTDqSBjcsOpw6ksICJkZWwiIHNpZ25pZmllIHF1J2lsIGEKK8OpdMOpIHN1cHByaW3DqSwgIm9sZCIgbm90aWZpZSBxdWUgbGUgYmFpbCBleGlzdGFpdCBhdSBsYW5jZW1lbnQgZGUgRG5zbWFzcSwgb3UgdW4KK2NoYW5nZW1lbnQgZCdhZHJlc3NlIE1BQyBvdSBkZSBub20gZCdow7R0ZSBwb3VyIHVuIGJhaWwgZXhpc3RhbnQgKG91LCBkYW5zIGxlIGNhcworb8O5IGxlYXNlZmlsZS1ybyBlc3Qgc3DDqWNpZmnDqSwgdW4gY2hhbmdlbWVudCBkZSBkdXLDqWUgZGUgYmFpbCBvdSBkJ2lkZW50aWZpYW50CitkJ2jDtHRlKS4gU2kgbCdhZHJlc3NlIE1hYyBlc3QgZCd1biB0eXBlIGRlIHLDqXNlYXUgYXV0cmUgcXUnZXRoZXJuZXQsIGlsIGVzdAorbsOpY2Vzc2FpcmUgZGUgbGEgcHLDqWNlZGVyIGR1IHR5cGUgZGUgcsOpc2VhdSwgcGFyIGV4ZW1wbGUgIjA2LTAxOjIzOjQ1OjY3Ojg5OmFiIgorcG91ciBkdSB0b2tlbiByaW5nLiBMZSBwcm9jZXNzdXMgZXN0IGV4w6ljdXTDqSBlbiB0ZW1wcyBxdWUgc3VwZXItdXRpbGlzYXRldXIgCisoc2kgRG5zbWFzcSBhIMOpdMOpIGxhbmPDqSBlbiB0ZW1wcyBxdWUgInJvb3QiKSwgbcOqbWUgc2kgRG5zbWFzcSBlc3QgY29uZmlndXLDqSAKK3BvdXIgY2hhbmdlciBzb24gVUlEIHBvdXIgY2VsbGUgZCd1biB1dGlsaXNhdGV1ciBub24tcHJpdmlsw6lnacOpLgorCitMJ2Vudmlyb25uZW1lbnQgZXN0IGjDqXJpdMOpIGRlIGNlbHVpIGRlIGwnaW52b2NhdGlvbiBkdSBwcm9jZXNzdXMgRG5zbWFzcSwKK2F1cXVlbCBzZSByYWpvdXRlIHF1ZWxxdWVzIHVuZXMgb3UgdG91dGVzIGxlcyB2YXJpYWJsZXMgZMOpY3JpdGVzIGNpLWRlc3NvdXMgOgorCitQb3VyIElQdjQgZXQgSVB2NiA6CisKK0ROU01BU1FfRE9NQUlOIHNpIGxlIG5vbSBkZSBkb21haW5lIHBsZWluZW1lbnQgcXVhbGlmacOpIGRlIGwnaMO0dGUgZXN0IGNvbm51LCBsYQorcGFydCByZWxhdGl2ZSBhdSBkb21haW5lIHkgZXN0IHN0b2Nrw6llLiAoTm90ZXogcXVlIGxlIG5vbSBkJ2jDtHRlIHRyYW5zbWlzIGNvbW1lCithcmd1bWVudCBhdSBzY3JpcHQgbidlc3QgamFtYWlzIHBsZWluZW1lbnQgcXVhbGlmacOpKS4KKworU2kgbGUgY2xpZW50IGZvdXJuaXQgdW4gbm9tIGQnaMO0dGUsIEROU01BU1FfU1VQUExJRURfSE9TVE5BTUUuCisKK1NpIGxlIGNsaWVudCBmb3Vybml0IGRlcyBjbGFzc2VzIGQndXRpbGlzYXRldXIsIEROU01BU1FfVVNFUl9DTEFTUzAgw6AKK0ROU01BU1FfVVNFUl9DTEFTU24uCisKK1NpIERuc21hc3EgYSDDqXTDqSBjb21waWzDqSBhdmVjIGwnb3B0aW9uIEhBVkVfQlJPS0VOX1JUQyAoImhvcmxvZ2UgUlRDCitkw6lmZWN0dWV1c2UiKSwgYWxvcnMgbGEgZHVyw6llIGR1IGJhaWwgKGVuIHNlY29uZGVzKSBlc3Qgc3RvY2vDqWUgZGFucyBsYQordmFyaWFibGUgRE5TTUFTUV9MRUFTRV9MRU5HVEgsIHNpbm9uIGxhIGRhdGUgZCdleHBpcmF0aW9uIGR1IGJhaWwgZXN0IHRvdWpvdXJzCitzdG9ja8OpIGRhbnMgbGEgdmFyaWFibGUgZCdlbnZpcm9ubmVtZW50IEROU01BU1FfTEVBU0VfRVhQSVJFUy4gTGUgbm9tYnJlIGRlCitzZWNvbmRlcyBhdmFudCBleHBpcmF0aW9uIGVzdCB0b3Vqb3VycyBzdG9ja8OpIGRhbnMgRE5TTUFTUV9USU1FX1JFTUFJTklORy4KKworU2kgdW4gYmFpbCDDqXRhaXQgYXNzb2Npw6kgw6AgdW4gbm9tIGQnaMO0dGUgZXQKK3F1ZSBjZWx1aS1jaSBlc3Qgc3VwcHJpbcOpLCB1biDDqXbDqm5lbWVudCBkZSB0eXBlICJvbGQiIGVzdCBnw6luw6lyw6kgYXZlYyBsZQorbm91dmVhdSBzdGF0dXQgZHUgYmFpbCwgYy3DoC1kIHNhbnMgbm9tIGQnaMO0dGUsIGV0IGxlIG5vbSBpbml0aWFsIGVzdCBmb3VybmkKK2RhbnMgbGEgdmFyaWFibGUgZCdlbnZpcm9ubmVtZW50IEROU01BU1FfT0xEX0hPU1ROQU1FLgorCitMYSB2YXJpYWJsZSBETlNNQVNRX0lOVEVSRkFDRSBjb250aWVudCBsZSBub20gZGUgbCdpbnRlcmZhY2Ugc3VyIGxhcXVlbGxlIGxhCityZXF1w6p0ZSBlc3QgYXJyaXbDqWU7IGNlY2kgbidlc3QgcGFzIHJlbnNlaWduw6kgZGFucyBsZSBjYXMgZGVzIGFjdGlvbnMgIm9sZCIKK2F5YW50IGxpZXUgYXByw6hzIHVuIHJlZMOpbWFycmFnZSBkZSBkbnNtYXNxLgorCitMYSB2YXJpYWJsZSBETlNNQVNRX1JFTEFZX0FERFJFU1MgZXN0IHJlbnNlaWduw6llIHNpIGxlIGNsaWVudCBhIHV0aWxpc8OpIHVuCityZWxhaSBESENQIHBvdXIgY29udGFjdGVyIERuc21hc3EsIHNpIGwnYWRyZXNzZSBJUCBkdSByZWxhaSBlc3QgY29ubnVlLgorCitETlNNQVNRX1RBR1MgY29udGllbnQgdG91cyBsZXMgbGFiZWxzIGZvdXJuaXMgcGVuZGFudCBsYSB0cmFuc2FjdGlvbiBESENQLAorc8OpcGFyw6lzIHBhciBkZXMgZXNwYWNlcy4KKworRE5TTUFTUV9MT0dfREhDUCBlc3QgcG9zaXRpb25uw6kgc2kKKy5CIC0tbG9nLWRoY3AKK2VzdCBhY3RpdsOpLgorCitQb3VyIElQdjQgc2V1bGVtZW50IDoKKworRE5TTUFTUV9DTElFTlRfSUQsIHNpIGwnaMO0dGUgYSBmb3VybmkgdW4gaWRlbnRpZmlhbnQgZGUgY2xpZW50LgorCitETlNNQVNRX0NJUkNVSVRfSUQsIEROU01BU1FfU1VCU0NSSUJFUl9JRCwgRE5TTUFTUV9SRU1PVEVfSUQgc2kgdW4gcmVsYWkgREhDUCBhCityYWpvdXTDqSBsJ3VuZSBkZSBjZXMgb3B0aW9ucy4KKworU2kgbGUgY2xpZW50IGZvdXJuaXQgdW5lIGluZm9ybWF0aW9uIGRlIGNsYXNzZSBkZSB2ZW5kZXVyLCBETlNNQVNRX1ZFTkRPUl9DTEFTUy4KKworUG91ciBJUHY2IHNldWxlbWVudCA6CisKK1NpIGxlIGNsaWVudCBmb3Vybml0IHVuZSBjbGFzc2UgZGUgdmVuZGV1ciAodmVuZG9yLWNsYXNzKSwgcG9zaXRpb25uZQorRE5TTUFTUV9WRU5ET1JfQ0xBU1NfSUQgYXZlYyBjb21tZSBjb250ZW51IGxlIG51bcOpcm8gSUFOQSBkZSBsJ2VudHJlcHJpc2UgcG91cgorbGEgY2xhc3NlLCBldCBETlNNQVNRX1ZFTkRPUl9DTEFTUzAuLkROU01BU1FfVkVORE9SX0NMQVNTbiBwb3VyIGxlcyBkb25uw6llcy4KKworRE5TTUFTUV9TRVJWRVJfRFVJRCBjb250aWVudCBsZSBEVUlEIGR1IHNlcnZldXIgOiBjZXR0ZSB2YWxldXIgZXN0IGxhIG3Dqm1lCitwb3VyIGNoYXF1ZSBhcHBlbCBhdSBzY3JpcHQuCisKK0ROU01BU1FfSUFJRCBjb250ZW5hbnQgbCdJQUlEIHBvdXIgbGUgYmFpbC4gU2kgbGUgYmFpbCBlc3QgdW5lIGFsbG9jYXRpb24KK3RlbXBvcmFpcmUsIGNlbGEgZXN0IHByw6lmaXjDqSBwYXIgbGUgY2FyYWN0w6hyZSAnVCcuCisKK0ROU01BU1FfTUFDIGNvbnRpZW50IGwnYWRyZXNzZSBNQUMgZHUgY2xpZW50LCBzaSBjZWxsZS1jaSBlc3QgY29ubnVlLgorCitBIG5vdGVyIHF1ZSBsZSBub20gZCdow7R0ZSBmb3VybmksIGxhIGNsYXNzZSBkZSB2ZW5kZXVyIG91IGxlcyBkb25uw6llcyBkZSBjbGFzc2UKK2QndXRpbGlzYXRldXIgc29udCB1bmlxdWVtZW50IGZvdXJuaWVzIHBvdXIgbGVzIGFjdGlvbnMgImFkZCIgb3UgbCdhY3Rpb24gIm9sZCIKK2xvcnNxdSd1biBow7R0ZSByZXByZW5kIHVuIGJhaWwgZXhpc3RhbnQsIHB1aXNxdWUgY2VzIGluZm9ybWF0aW9ucyBuZSBzb250IHBhcworY29uc2VydsOpZXMgZGFucyBsYSBiYXNlIGRlIGJhdXggZGUgZG5zbWFzcS4KKworVG91cyBsZXMgZGVzY3JpcHRldXJzIGRlIGZpY2hpZXJzIHNvbnQgZmVybcOpcywgc2F1ZiBzdGRpbiwgc3Rkb3V0IGV0IHN0ZGVyciBxdWkKK3NvbnQgb3V2ZXJ0cyBzdXIgL2Rldi9udWxsIChzYXVmIGVuIG1vZGUgZMOpdmVybWluYWdlKS4KKworTGUgc2NyaXB0IG4nZXN0IHBhcyBsYW5jw6kgZGUgbWFuacOocmUgY29uY3VycmVudGUgOiBhdSBwbHVzIHVuZSBpbnN0YW5jZSBkdQorc2NyaXB0IGVzdCBleGVjdXTDqWUgw6AgbGEgZm9pcyAoZG5zbWFzcSBhdHRlbmRzIHF1J3VuZSBpbnN0YW5jZSBkZSBzY3JpcHQgc2UKK3Rlcm1pbmUgYXZhbnQgZGUgbGFuY2VyIGxhIHN1aXZhbnRlKS4gTGVzIGNoYW5nZW1lbnRzIGRhbnMgbGEgYmFzZSBkZXMgYmF1eAorbsOpY2Vzc2l0YW50IGxlIGxhbmNlbWVudCBkdSBzY3JpcHQgc29udCBwbGFjw6kgZW4gYXR0ZW50ZSBkYW5zIHVuZSBxdWV1ZSBqdXNxdSfDoAordGVybWluYWlzb24gZCd1bmUgaW5zdGFuY2UgZHUgc2NyaXB0IGVuIGNvdXJzLiBTaSBjZXR0ZSBtaXNlIGVuIHF1ZXVlIGZhaXQgcXVlCitwbHVzaWV1cnMgY2hhbmdlbWVudHMgZCfDqXRhdHMgYXBwYXJhaXNzZW50IHBvdXIgdW4gYmFpbCBkb25uw6kgYXZhbnQgcXVlIGxlCitzY3JpcHQgcHVpc3NlIMOqdHJlIGxhbmPDqSwgYWxvcnMgbGVzIMOpdGF0cyBsZXMgcGx1cyBhbmNpZW5zIHNvbnQgc3VwcHJpbcOpcyBldAorbG9yc3F1ZSBsZSBzY3JpcHQgc2VyYSBmaW5hbGVtZW50IGxhbmPDqSwgY2Ugc2VyYSBhdmVjIGwnw6l0YXQgY291cmFudCBkdSBiYWlsLgorCitBdSBkw6ltYXJyYWdlIGRlIERuc21hc3EsIGxlIHNjcmlwdCBzZXJhIGludm9xdcOpIHBvdXIgY2hhY3VuIGRlcyBiYXV4IGV4aXN0YW50cworZGFucyBsZSBmaWNoaWVyIGRlcyBiYXV4LiBMZSBzY3JpcHQgc2VyYSBsYW5jw6kgYXZlYyBsJ2FjdGlvbiAiZGVsIiBwb3VyIGxlcworYmF1eCBleHBpcsOpcywgZXQgIm9sZCIgcG91ciBsZXMgYXV0cmVzLiBMb3JzcXVlIERuc21hc3EgcmXDp29pdCB1biBzaWduYWwgSFVQLAorbGUgc2NyaXB0IHNlcmEgaW52b3F1w6kgYXZlYyB1bmUgYWN0aW9uICJvbGQiIHBvdXIgdG91cyBsZXMgYmF1eCBleGlzdGFudHMuCisKK0lsIGV4aXN0ZSBkZXV4IGF1dHJlcyBhY3Rpb25zIHBvdXZhbnQgYXBwYXJhw650cmUgY29tbWUgYXJndW1lbnQgYXUgc2NyaXB0IDoKKyJpbml0IiBldCAidGZ0cCIuIEQnYXV0cmVzIHNvbnQgc3VzY2VwdGlibGVzIGQnw6p0cmUgcmFqb3V0w6llcyBkYW5zIGxlIGZ1dHVyLAorYXVzc2kgbGVzIHNjcmlwdHMgZGV2cmFpZW50LcOqdHJlIMOpY3JpdHMgZGUgc29ydGUgw6AgaWdub3JlciBsZXMgYWN0aW9ucworaW5jb25udWVzLiAiaW5pdCIgZXN0IGTDqWNyaXRlIGNpLWRlc3NvdXMgZGFucworLkIgLS1sZWFzZWZpbGUtcm8uCitMJ2FjdGlvbiAidGZ0cCIgZXN0IGludm9xdcOpZSBsb3JzcXUndW4gdHJhbnNmZXJ0IGRlIGZpY2hpZXIgVEZUUCBzJ2VzdAordGVybWluw6kuIFNlcyBhcmd1bWVudHMgc29udCBsYSB0YWlsbGUgZHUgZmljaGllciBlbiBvY3RldHMsIGwnYWRyZXNzZSDDoAorbGFxdWVsbGUgbGUgZmljaGllciBhIMOpdMOpIGVudm95w6ksIGFpbnNpIHF1ZSBsZSBjaGVtaW4gY29tcGxldCBkdSBmaWNoaWVyLgorCisuVFAKKy5CIC0tZGhjcC1sdWFzY3JpcHQ9PGNoZW1pbj4KK1Nww6ljaWZpZSB1biBzY3JpcHQgw6ljcml0IGVuIEx1YSwgZGV2YW50IMOqdHJlIGV4w6ljdXTDqSBsb3JzcXVlIGRlcyBiYXV4IHNvbnQKK2Nyw6nDqXMsIGTDqXRydWl0cyBvdSBtb2RpZmnDqXMuIFBvdXIgdXRpbGlzZXIgY2V0dGUgb3B0aW9uLCBkbnNtYXNxIGRvaXQgw6p0cmUKK2NvbXBpbMOpIGF2ZWMgYXZlYyBsZSBzdXBwb3J0IGRlIEx1YS4gTCdpbnRlcnByw6l0ZXVyIEx1YSBlc3QgaW5pdGlhbGlzw6kgdW5lCitzZXVsZSBmb2lzLCBsb3JzcXVlIGRuc21hc3EgZMOpbWFycmUsIGNlIHF1aSBmYWl0IHF1ZSBsZXMgdmFyaWFibGVzIGdsb2JhbGVzCitwZXJzaXN0ZW50IGVudHJlIGxlcyDDqXbDqm5lbWVudHMgbGnDqXMgYXV4IGJhdXguIExlIGNvZGUgTHVhIGRvaXQgZMOpZmluaXIgdW5lCitmb25jdGlvbgorLkIgbGVhc2UKK2V0IHBldXQgZm91cm5pciBkZXMgZm9uY3Rpb25zCisuQiBpbml0CitldAorLkIgc2h1dGRvd24KK3F1aSBzb250IGFwcGVsbMOpZXMsIHNhbnMgYXJndW1lbnRzLCBsb3JzcXVlIGRuc21hc3EgZMOpbWFycmUgb3UgcydhcnLDqnRlLgorSWwgcGV1dCDDqWdhbGVtZW50IGZvdXJuaXIgdW5lIGZvbmN0aW9uCisuQiB0ZnRwLgorCitMYSBmb25jdGlvbgorLkIgbGVhc2UKK3Jlw6dvaXQgbGVzIGluZm9ybWF0aW9ucyBkw6l0YWlsbMOpZXMgZGFucworLkIgLS1kaGNwLXNjcmlwdC4gCitJbCByZcOnb2l0IGRldXggYXJndW1lbnRzLiBMZSBwcmVtaWVyIHNww6ljaWZpZSBsJ2FjdGlvbiwgcXVpIGVzdCB1bmUgY2hhw65uZSBkZQorY2FyYWN0w6hyZXMgY29udGVuYW50IGxlcyB2YWxldXJzICJhZGQiIChham91dCksICJvbGQiIChyw6lhY3RpdmF0aW9uIGQndW4gYmFpbAorZXhpc3RhbnQpIG91ICJkZWwiIChzdXBwcmVzc2lvbikuIExlIGRldXhpw6htZSBlc3QgdW5lIHRhYmxlIGNvbnRlbmFudCBkZXMKK3BhaXJlcyBkZSB2YWxldXJzIGRlIGxhYmVscy4gTGVzIGxhYmVscyBjb3JyZXNwb25kZW50IHBvdXIgbCdlc3NlbnRpZWwgYXV4Cit2YWxldXJzIGQnZW52aXJvbm5lbWVudCBkw6l0YWlsbMOpZXMgY2ktZGVzc3VzLCBhaW5zaSBsZSBsYWJlbCAiZG9tYWluIiAoZG9tYWluZSkKK2NvbnRpZW50IGxlcyBtw6ptZXMgZG9ubsOpZXMgcXVlIGxhIHZhcmlhYmxlIGQnZW52aXJvbm5lbWVudCBETlNNQVNRX0RPTUFJTi4gSWwKK2V4aXN0ZSBxdWVscXVlcyBsYWJlbHMgc3VwcGzDqW1lbnRhaXJlcyBjb250ZW5hbnQgbGVzIGRvbm7DqWVzIGZvdXJuaWVzIGNvbW1lCithcmd1bWVudHMgw6AKKy5CIC0tZGhjcC1zY3JpcHQuIAorQ2VzIGxhYmVscyBzb250CisuQiBtYWNfYWRkcmVzcywgaXBfYWRkcmVzcworKHBvdXIgcmVzcGVjdGl2ZW1lbnQgbCdhZHJlc3NlIE1BQyBldCBsJ2FkcmVzc2UgSVApCitldAorLkIgaG9zdG5hbWUKKyhsZSBub20gZCdow7R0ZSkgZGFucyBsZSBjYXMgZCdJUHY0LCBldAorLkIgY2xpZW50X2R1aWQsIGlwX2FkZHJlc3MKKyh2YWxldXIgRFVJRCBkdSBjbGllbnQgZXQgYWRyZXNzZSBJUCByZXNwZWN0aXZlbWVudCkKK2FpbnNpIHF1ZQorLkIgaG9zdG5hbWUKKyhsZSBub20gZCdow7R0ZSkgZGFucyBsZSBjYXMgZCdJUHY2LgorCitMYSBmb25jdGlvbgorLkIgdGZ0cAorZXN0IGFwcGVsw6llIGRlIGxhIG3Dqm1lIGZhw6dvbiBxdWUgbGEgZm9uY3Rpb24gImxlYXNlIiwgZXQgbGEgdGFibGUgY29udGllbnQgbGVzCitsYWJlbHMKKy5CIGRlc3RpbmF0aW9uX2FkZHJlc3MsCisuQiBmaWxlX25hbWUKK2V0CisuQiBmaWxlX3NpemUKKyhyZXNwZWN0aXZlbWVudCAiYWRyZXNzZSBkZSBkZXN0aW5hdGlvbiIsICJub20gZGUgZmljaGllciIgZXQgInRhaWxsZSBkZSBmaWNoaWVyIikuCisuVFAKKy5CIC0tZGhjcC1zY3JpcHR1c2VyCitTcMOpY2lmaWUgbCd1dGlsaXNhdGV1ciBzb3VzIGxlcXVlbCBsZSBzY3JpcHQgc2hlbGwgbGVhc2UtY2hhbmdlIG91IGxlIHNjcmlwdAorZG9pdmVudCDDqnRyZSBleMOpY3V0w6lzLiBMYSB2YWxldXIgcGFyIGTDqWZhdXQgY29ycmVzcG9uZCDDoCBsJ3V0aWxpc2F0ZXVyIHJvb3QKK21haXMgcGV1dC3DqnRyZSBjaGFuZ8OpZSBwYXIgbGUgYmlhaXMgZGUgY2V0dGUgb3B0aW9uLgorLlRQCisuQiBcLTksIC0tbGVhc2VmaWxlLXJvCitTdXBwcmltZXIgY29tcGzDqHRlbWVudCBsJ3VzYWdlIGR1IGZpY2hpZXIgc2VydmFudCBkZSBiYXNlIGRlIGRvbm7DqWUgcG91ciBsZXMKK2JhdXggREhDUC4gTGUgZmljaGllciBuZSBzZXJhIG5pIGNyw6nDqSwgbmkgbHUsIG5pIMOpY3JpdC4gQ2hhbmdlIGxhIGZhw6dvbiBkb250IGxlCitzY3JpcHQgZGUgY2hhbmdlbWVudCBkJ8OpdGF0IGRlIGJhaWwgZXN0IGxhbmPDqSAoc2kgY2VsdWktY2kgZXN0IGZvdXJuaSBwYXIgbGUKK2JpYWlzIGRlIGwnb3B0aW9uCisuQiAtLWRoY3Atc2NyaXB0CispLCBkZSBzb3J0ZSBxdWUgbGEgYmFzZSBkZSBkb25uw6llcyBkZSBiYXV4IHB1aXNzZQorw6p0cmUgY29tcGzDqHRlbWVudCBnw6lyw6llIHBhciBsZSBzY3JpcHQgc3VyIHVuIHN0b2NrYWdlIGV4dGVybmUuIEVuIGFkZGl0aW9uIGF1eAorYWN0aW9ucyBkw6ljcml0ZXMgZGFucyAKKy5CICAtLWRoY3Atc2NyaXB0LAorbGUgc2NyaXB0IGRlIGNoYW5nZW1lbnQgZCfDqXRhdCBkZSBiYWlsIGVzdCBhcHBlbGzDqSB1bmUgZm9pcywgYXUgbGFuY2VtZW50IGRlCitEbnNtYXNxLCBhdmVjIHBvdXIgc2V1bCBhcmd1bWVudCAiaW5pdCIuIExvcnNxdSdhcHBlbGzDqSBkZSBsYSBzb3J0ZSwgbGUgc2NyaXB0Citkb2l0IGZvdXJuaXIgbCfDqXRhdCBkZSBsYSBiYXNlIGRlIGJhdXgsIGRhbnMgbGUgZm9ybWF0IGRlIGZpY2hpZXIgZGUgYmF1eCBkZQorRG5zbWFzcSwgc3VyIHNhIHNvcnRpZSBzdGFuZGFyZCAoc3Rkb3V0KSBldCByZXRvdXJuZXIgdW4gY29kZSBkZSByZXRvdXIgZGUgMC4KK1Bvc2l0aW9ubmVyIGNldHRlIG9wdGlvbiBwcm92b3F1ZSDDqWdhbGVtZW50IHVuZSBpbnZvY2F0aW9uIGR1IHNjcmlwdCBkZQorY2hhbmdlbWVudCBkJ8OpdGF0IGRlIGJhaWwgw6AgY2hhcXVlIGNoYW5nZW1lbnQgZGUgbCdpZGVudGlmaWFudCBkZSBjbGllbnQsIGRlCitsb25ndWV1ciBkZSBiYWlsIG91IGRlIGRhdGUgZCdleHBpcmF0aW9uLgorLlRQCisuQiAtLWJyaWRnZS1pbnRlcmZhY2U9PGludGVyZmFjZT4sPGFsaWFzPlssPGFsaWFzPl0KK1RyYWl0ZXIgbGVzIHJlcXXDqnRlcyBESENQICh2NCBldCB2NikgZXQgSVB2NiBSb3V0ZXIgU29saWNpdCBhcnJpdmFudAorc3VyIG4naW1wb3J0ZSBsYXF1ZWxsZSBkZXMgaW50ZXJmYWNlcyA8YWxpYXM+IGNvbW1lIHNpIGVsbGVzCithcnJpdmFpZW50IGRlIGwnaW50ZXJmYWNlIDxpbnRlcmZhY2U+LiBDZXR0ZSBvcHRpb24gcGVybWV0IMOgIGRuc21hc3EKK2RlIGZvdXJuaXIgbGVzIHNlcnZpY2UgREhDUCBldCBSQSBzdXIgbGVzIGludGVyZmFjZXMgZXRoZXJuZXQgbm9uCithZHJlc3PDqXMgZXQgbm9uIHBvbnTDqXM7IHBhciBleGVtcGxlIHN1ciB1biBow7R0ZSBkZSBjYWxjdWwgZCdPcGVuU3RhY2sKK2/DuSBjaGFxdWUgdGVsbGUgaW50ZXJmYWNlIGVzdCB1bmUgaW50ZXJmYWNlIFRBUCDDoCB1bmUgbWFjaGluZQordmlydHVlbGxlLCBvdSBsb3JzIGRlIGwndXRpbGlzYXRpb24gZGUgcG9udCBldGhlcm5ldCAiYW5jaWVuIG1vZGUiIHN1cgorcGxhdGUtZm9ybWUgQlNELiAgQ2hhcXVlIDxhbGlhcz4gcGV1dCBmaW5pciBhdmVjIHVuIHNpbXBsZSAnKicgam9rZXIuCisuVFAKKy5CIFwtcywgLS1kb21haW49PGRvbWFpbmU+Wyw8Z2FtbWUgZCdhZHJlc3Nlcz5bLGxvY2FsXV0KK1Nww6ljaWZpZSBsZSBkb21haW5lIGR1IHNlcnZldXIgREhDUC4gTGUgZG9tYWluZSBwZXV0IMOqdHJlIGRvbm7DqSBkZSBtYW5pw6hyZQoraW5jb25kaXRpb25uZWxsZSAoc2FucyBzcMOpY2lmaWVyIGRlIGdhbW1lIGQnYWRyZXNzZXMgSVApIG91IHBvdXIgZGVzIGdhbW1lcworZCdhZHJlc3NlcyBJUCBsaW1pdMOpZXMuIENlbGEgYSBkZXV4IGVmZmV0czsgdG91dCBkJ2Fib3JkLCBsZQorc2VydmV1ciBESENQIHJldG91cm5lIGxlIGRvbWFpbmUgw6AgdG91cyBsZXMgaMO0dGVzIGxlIGRlbWFuZGFudCwgZGV1eGnDqG1lbWVudCwKK2NlbGEgc3DDqWNpZmllIGxlIGRvbWFpbmUgdmFsaWRlIHBvdXIgbGVzIGjDtHRlcyBESENQIGNvbmZpZ3Vyw6lzLiBMZSBidXQgZGUgY2VsYQorZXN0IGRlIGNvbnRyYWluZHJlIGxlcyBub21zIGQnaMO0dGUgYWZpbiBxdSdhdWN1biBow7R0ZSBzdXIgbGUgTEFOIG5lIHB1aXNzZQorZm91cm5pciB2aWEgREhDUCB1biBub20gdGVsIHF1ZSBwYXIgZXhlbXBsZSAibWljcm9zb2Z0LmNvbSIgZXQgY2FwdHVyZXIgZHUKK3RyYWZpYyBkZSBtYW5pw6hyZSBpbGzDqWdpdGltZS4gU2kgYXVjdW4gbm9tIGRlIGRvbWFpbmUgbidlc3Qgc3DDqWNpZmnDqSwgYWxvcnMKK2xlcyBub21zIGQnaMO0dGVzIGF2ZWMgdW4gbm9tIGRlIGRvbWFpbmUgKGMtw6AtZCB1biBwb2ludCBkYW5zIGxlIG5vbSkgc2Vyb250CitpbnRlcmRpdHMgZXQgZW5yZWdpc3Ryw6lzIGRhbnMgbGUgam91cm5hbCAobG9ncykuIFNpIHVuIHN1ZmZpeGUgZXN0IGZvdXJuaSwgYWxvcnMKK2xlcyBub21zIGQnaMO0dGVzIHBvc3PDqWRhbnQgdW4gZG9tYWluZSBzb250IGF1dG9yaXPDqXMsIHBvdXIgcGV1IHF1ZSBsZSBub20gZGUKK2RvbWFpbmUgY2/Dr25jaWRlIGF2ZWMgbGUgbm9tIGZvdXJuaS4gRGUgcGx1cywgc2kgdW4gc3VmZml4ZSBlc3QgZm91cm5pLCBhbG9ycworbGVzIG5vbXMgZCdow7R0ZXMgbmUgcG9zc8OpZGFudCBwYXMgZGUgbm9tIGRlIGRvbWFpbiBzZSB2b2llbnQgcmFqb3V0ZXIgbGUKK3N1ZmZpeGUgZm91cm5pIGRhbnMgbCdvcHRpb24KKy5CIC0tZG9tYWluLgorQWluc2ksIHN1ciBtb24gcsOpc2VhdSwgamUgcGV1eCBjb25maWd1cmVyCisuQiAtLWRvbWFpbj10aGVrZWxsZXlzLm9yZy51aworZXQgYXZvaXIgdW5lIG1hY2hpbmUgZG9udCBsZSBub20gREhDUCBzZXJhaXQgImxhcHRvcCIuIEwnYWRyZXNzZSBJUCBkZSBjZXR0ZQorbWFjaGluZSBzZXJhIGRpc3BvbmlibGUgw6AgbGEgZm9pcyBwb3VyICJsYXB0b3AiIGV0ICJsYXB0b3AudGhla2VsbGV5cy5vcmcudWsiLgorU2kgbGEgdmFsZXVyIGZvdXJuaWUgcG91ciA8ZG9tYWluZT4gZXN0ICIjIiwgYWxvcnMgbGUgbm9tIGRlIGRvbWFpbmUgZXN0Citwb3NpdGlvbm7DqSDDoCBsYSBwcmVtacOocmUgdmFsZXVyIGRlIGxhIGRpcmVjdGl2ZSAic2VhcmNoIiBkdSBmaWNoaWVyCisvZXRjL3Jlc29sdi5jb25mIChvdSDDqXF1aXZhbGVudCkuCisKK0xhIGdhbW1lIGQnYWRyZXNzZXMgcGV1dCDDqnRyZSBkZSBsYSBmb3JtZQorPGFkcmVzc2UgaXA+LDxhZHJlc3NlIGlwPiBvdSA8YWRyZXNzZSBpcD4vPG1hc3F1ZSBkZSByw6lzZWF1PiB2b2lyZSB1bmUgc2ltcGxlCis8YWRyZXNzZSBpcD4uIFZvaXIKKy5CIC0tZGhjcC1mcWRuCitxdWkgcGV1dCBjaGFuZ2VyIGxlIGNvbXBvcnRlbWVudCBkZSBkbnNtYXNxIHJlbGF0aWYgYXV4IGRvbWFpbmVzLgorCitTaSBsYSBnYW1tZSBkJ2FkcmVzc2UgZXN0IGZvdXJuaWUgc291cyBsYSBmb3JtZQorPGFkcmVzc2UgaXA+Lzx0YWlsbGUgZGUgcsOpc2VhdT4sIGFsb3JzIGxlIGRyYXBlYXUgImxvY2FsIiBwZXV0LcOqdHJlIHJham91dMOpCitxdWkgYSBwb3VyIGVmZmVjdCBkJ2Fqb3V0ZXIgLS1sb2NhbC1kZWNsYXJhdGlvbnMgYXV4IHJlcXXDqnRlcyBETlMgZGlyZWN0ZXMgZXQKK2ludmVyc2VzLiBDLcOgLWQKKy5CIC0tZG9tYWluPXRoZWtlbGxleXMub3JnLnVrLDE5Mi4xNjguMC4wLzI0LGxvY2FsCitlc3QgaWRlbnRpcXVlIMOgCisuQiAtLWRvbWFpbj10aGVrZWxsZXlzLm9yZy51aywxOTIuMTY4LjAuMC8yNAorLS1sb2NhbD0vdGhla2VsbGV5cy5vcmcudWsvIC0tbG9jYWw9LzAuMTY4LjE5Mi5pbi1hZGRyLmFycGEvCitMYSB0YWlsbGUgZGUgcsOpc2VhdSBkb2l0LcOqdHJlIGRlIDgsIDE2IG91IDI0IHBvdXIgw6p0cmUgdmFsaWRlLgorLlRQCisuQiAtLWRoY3AtZnFkbgorRGFucyBsZSBtb2RlIHBhciBkw6lmYXV0LCBkbnNtYXNxIGluc8OocmUgbGVzIG5vbXMgbm9uLXF1YWxpZmnDqXMgZGVzIGNsaWVudHMKK0RIQ1AgZGFucyBsZSBETlMuIFBvdXIgY2V0dGUgcmFpc29uLCBsZXMgbm9tcyBkb2l2ZW50IMOqdHJlIHVuaXF1ZXMsIG3Dqm1lIHNpCitkZXV4IGNsaWVudHMgYXlhbnQgbGUgbcOqbWUgbm9tIHNvbnQgZGFucyBkZXV4IGRvbWFpbmVzIGRpZmbDqXJlbnRzLiBTaSB1bgorZGV1eGnDqG1lIGNsaWVudCBESENQIGFwcGFyYcOudCBheWFudCBsZSBtw6ptZSBub20gcXUndW4gY2xpZW50IGTDqWrDoCBleGlzdGFudCwKK2NlIG5vbSBlc3QgdHJhbnNmw6lyw6kgYXUgbm91dmVhdSBjbGllbnQuIFNpCisuQiAtLWRoY3AtZnFkbgorZXN0IHNww6ljaWZpw6ksIGNlIGNvbXBvcnRlbWVudCBjaGFuZ2UgOiBsZXMgbm9tcyBub24gcXVhbGlmacOpcyBuZSBzb250IHBsdXMKK3Jham91dMOpcyBkYW5zIGxlIEROUywgc2V1bHMgbGVzIG5vbXMgcXVhbGlmacOpcyBsZSBzb250LiBEZXV4IGNsaWVudHMgREhDUAorYXZlYyBsZSBtw6ptZSBub20gcGV1dmVudCB0b3VzIGxlcyBkZXV4IGdhcmRlciBsZSBub20sIHBvdXIgcGV1IHF1ZSBsYSBwYXJ0aWUKK3JlbGF0aXZlIGF1IGRvbWFpbmUgc29pdCBkaWZmw6lyZW50ZSAoYy3DoC1kIHF1ZSBsZXMgbm9tcyBwbGVpbmVtZW50cyBxdWFsaWZpw6lzCitkaWZmw6hyZW50KS4gUG91ciBkJ2Fzc3VyZXIgcXVlIHRvdXMgbGVzIG5vbXMgb250IHVuZSBwYXJ0aWUgZG9tYWluZSwgaWwgZG9pdC15Cithdm9pciBhdSBtb2lucyB1bgorLkIgLS1kb21haW4KK3NhbnMgZ2FtbWUgZCdhZHJlc3NlcyBkZSBzcMOpY2lmacOpIGxvcnNxdWUgbCdvcHRpb24KKy5CIC0tZGhjcC1mcWRuIAorZXN0IGNvbmZpZ3Vyw6llLgorLlRQCisuQiAtLWRoY3AtY2xpZW50LXVwZGF0ZQorTm9ybWFsZW1lbnQsIGxvcnNxdWUgZG5zbWFzcSBmb3Vybml0IHVuIGJhaWwgREhDUCwgaWwgcG9zaXRpb25uZSB1biBsYWJlbAorZGFucyBsJ29wdGlvbiBGUUROIHBvdXIgaW5kaXF1ZXIgYXUgY2xpZW50IHF1J2lsIG5lIGRvaXQgcGFzIHRlbnRlciBkZSBmYWlyZQordW5lIG1pc2Ugw6Agam91ciBERE5TIGF2ZWMgc29uIG5vbSBldCBzb24gYWRyZXNzZSBJUC4gQ2VjaSBwYXJjZSBxdWUgbGEgcGFpcmUKK05vbS1JUCBlc3QgcmFqb3V0w6llIGF1dG9tYXRpcXVlbWVudCBkYW5zIGxhIHBhcnRpZSBETlMgZGUgZG5zbWFzcS4gQ2V0dGUgb3B0aW9uCitpbmhpYmUgY2UgY29tcG9ydGVtZW50IGNlIHF1aSBlc3QgdXRpbGUsIHBhciBleGVtcGxlLCBwb3VyIHBlcm1ldHRyZSBhdXggY2xpZW50cworV2luZG93cyBkZSBsYSBtaXNlIMOgIGpvdXIgZGUgc2VydmV1cnMgQWN0aXZlIERpcmVjdG9yeS4gVm9pciBsYSBSRkMgNDcwMiBwb3VyCitwbHVzIGRlIGTDqXRhaWxzLgorLlRQCisuQiAtLWVuYWJsZS1yYQorQWN0aXZlIGxhIGZvbmN0aW9uYWxpdMOpIGQnYW5ub25jZXMgcm91dGV1cnMgSVB2NiAoIklQdjYgUm91dGVyIEFkdmVydGlzZW1lbnQiKS4KK0RIQ1B2NiBuZSBnw6hyZSBwYXMgbGEgY29uZmlndXJhdGlvbiBjb21wbMOodGUgZHUgcsOpc2VhdSBkZSBsYSBtw6ptZSBmYcOnb24gcXVlCitESENQdjQuIExhIGTDqWNvdXZlcnRlIGRlIHJvdXRldXJzIGV0IGxhIGTDqWNvdXZlcnRlICjDqXZlbnR1ZWxsZSkgZGUgcHLDqWZpeGVzIHBvdXIKK2xhIGNyw6lhdGlvbiBhdXRvbm9tZSBkJ2FkcmVzc2Ugc29udCBnw6lyw6llcyBwYXIgdW4gcHJvdG9jb2xlIGRpZmbDqXJlbnQuCitMb3JzcXVlIERIQ1AgZXN0IHV0aWxpc8OpLCBzZXVsIHVuIHNvdXMtZW5zZW1ibGUgZGUgdG91dCBjZWNpIGVzdCBuw6ljZXNzYWlyZSBldAorZG5zbWFzcSBlc3Qgw6AgbcOqbWUgZGUgbGUgZ8OpcmVyLCBlbiB1dGlsaXNhbnQgbGEgY29uZmlndXJhdGlvbiBESENQIHByw6lzZW50ZSBwb3VyCitmb3VybmlyIGxhIG1ham9yaXTDqSBkZXMgZG9ubsOpZXMuIExvcnNxdWUgbGVzIGFubm9uY2VzIHJvdXRldXJzIChSQSBwb3VyICJSb3V0ZXIKK0FkdmVydGlzZW1lbnQiKSBzb250IGFjdGl2w6llcywgZG5zbWFzcSB2YSBhbm5vbmNlciB1biBwcsOpZml4ZSBwb3VyIGNoYXF1ZQorZGhjcC1yYW5nZSBldCwgcGFyIGTDqWZhdXQsIGZvdXJuaXIgY29tbWUgdmFsZXVyIGRlIHJvdXRldXIgZXQgZGUgRE5TIHLDqWN1cnNpZgorbGEgdmFsZXVyIGQnYWRyZXNzZSBsaW5rLWxvY2FsIGFwcHJvcHJpw6llIHBhcm1pIGNlbGxlcyBkZSBsYSBtYWNoaW5lIHN1cgorbGFxdWVsbGUgdG91cm5lIGRuc21hc3EuCitQYXIgZMOpZmF1dCwgbGVzIGJpdHMgIm1hbmFnZWQgYWRkcmVzcyIgc29udCBwb3NpdGlvbm7DqXMsIGV0IGxlIGJpdCAidXNlIFNMQUFDIgorKCJ1dGlsaXNlciBTTEFBQyIpIGVzdCByw6lpbml0aWFsaXPDqS4gQ2VsYSBwZXV0LcOqdHJlIGNoYW5nw6kgcG91ciBkZXMKK3NvdXMtcsOpc2VhdXggZG9ubsOpcyBwYXIgbGUgYmlhaXMgZHUgbW90IGNsZWYgZGUgbW9kZSBkw6ljcmlzIGRhbnMKKy5CIC0tZGhjcC1yYW5nZS4KK0xlcyBwYXJhbcOodHJlcyBETlMgZHUgUkZDNjEwNiBzb250IGluY2x1cyBkYW5zIGxlcyBhbm5vbmNlcy4gUGFyIGTDqWZhdXQsCitsJ2FkcmVzc2UgbGluay1sb2NhbCBhcHByb3ByacOpZSBwYXJtaSBjZWxsZXMgZGUgbGEgbWFjaGluZSBzdXIgbGFxdWVsbGUgdG91cm5lCitkbnNtYXNxIGVzdCBzcMOpY2lmacOpZSBjb21tZSBETlMgcsOpY3Vyc2lmLiBTaSBlbGxlcyBzb250IGZvdXJuaWVzLCBsZXMKK29wdGlvbnMgZG5zLXNlcnZlciBldCBkb21haW4tc2VhcmNoIHNvbnQgdXRpbGlzw6llcyByZXNwZWN0aXZlbWVudCBwb3VyIFJETlNTIGV0CitETlNTTC4KKy5UUAorLkIgLS1yYS1wYXJhbT08aW50ZXJmYWNlPixbbXR1Ojx2YWxldXI+fDxpbnRlcmZhY2U+fG9mZixdW2hpZ2gsfGxvdyxdPGludGVydmFsbGUgZCdhbm5vbmNlIHJvdXRldXI+Wyw8ZHVyw6llIGRlIHZpZSByb3V0ZT5dCitDb25maWd1cmUgcG91ciB1bmUgaW50ZXJmYWNlIGRvbm7DqWUgZGVzIHZhbGV1cnMgcG91ciBsZXMgYW5ub25jZXMgcm91dGV1cnMKK2RpZmbDqXJlbnRlcyBkZXMgdmFsZXVycyBwYXIgZMOpZmF1dC4gTGEgdmFsZXVyIHBhciBkw6lmYXV0IGR1IGNoYW1wIHByaW9yaXTDqQorcG91ciBsZSByb3V0ZXVyIHBldXQtw6p0cmUgY2hhbmfDqWUgZGUgIm1lZGl1bSIgKG1veWVuKSDDoCAiaGlnaCIgKGhhdXRlKSBvdQorImxvdyIgKGJhc3NlKS4gUGFyIGV4ZW1wbGUgOgorLkIgLS1yYS1wYXJhbT1ldGgwLGhpZ2gsMC4KK1VuIGludGVydmFsbGUgKGVuIHNlY29uZGVzKSBlbnRyZSBsZXMgYW5ub25jZXMgcm91dGV1ciBwZXV0LcOqdHJlIGZvdXJuaSBwYXIgOgorLkIgLS1yYS1wYXJhbT1ldGgwLDYwLgorTGEgZHVyw6llIGRlIHZpZSBkZSBsYSByb3V0ZSBwZXV0LcOqdHJlIGNoYW5nw6llIG91IG1pc2Ugw6AgesOpcm8sIGF1cXVlbCBjYXMgCitsZSByb3V0ZXVyIHBldXQgYW5ub25jZXIgbGVzIHByw6lmaXhlcyBtYWlzIHBhcyBkZSByb3V0ZSA6CisuQiAtLXJhLXBhcm09ZXRoMCwwLDAKKyh1bmUgdmFsZXVyIGRlIHrDqXJvIHBvdXIgbCdpbnRlcnZhbGxlIHNpZ25pZmllIHF1J2lsIGdhcmRlIGxhIHZhbGV1ciBwYXIgZMOpZmF1dCkuCitDZXMgcXVhdHJlIHBhcmFtw6h0cmVzIHBldXZlbnQtw6p0cmUgY29uZmlndXLDqXMgZW4gdW5lIGZvaXMgOgorLkIgLS1yYS1wYXJhbT1ldGgwLG10dToxMjgwLGxvdyw2MCwxMjAwCitMYSB2YWxldXIgcG91ciBsJ2ludGVyZmFjZSBwZXV0IGluY2x1cmUgdW4gY2FyYWN0w6hyZSBqb2tlci4KKy5UUAorLkIgLS1lbmFibGUtdGZ0cFs9PGludGVyZmFjZT5bLDxpbnRlcmZhY2U+XV0KK0FjdGl2ZSBsYSBmb25jdGlvbiBzZXJ2ZXVyIFRGVFAuIENlbHVpLWNpIGVzdCBkZSBtYW5pw6hyZSBkw6lsaWLDqXLDqWUgbGltaXTDqSBhdXgKK2ZvbmN0aW9ucyBuw6ljZXNzYWlyZXMgYXUgZMOpbWFycmFnZSBwYXIgbGUgcsOpc2VhdSAoIm5ldC1ib290IikgZCd1biBjbGllbnQuIFNldWwKK3VuIGFjY8OocyBlbiBsZWN0dXJlIGVzdCBwb3NzaWJsZTsgbGVzIGV4dGVuc2lvbnMgdHNpemUgZXQgYmxrc2l6ZSBzb250IHN1cHBvcnTDqWVzCisodHNpemUgZXN0IHNldWxlbWVudCBzdXBwb3J0w6kgZW4gbW9kZSBvY3RldCkuIFNhbnMgYXJndW1lbnQgb3B0aW9uZWwsIGxlIHNlcnZpY2UKK1RGVFAgZXN0IGZvdXJuaSBzdXIgbGVzIG3Dqm1lcyBpbnRlcmZhY2VzIHF1ZSBsZSBzZXJ2aWNlIERIQ1AuIFNpIHVuZSBsaXN0ZQorZCdpbnRlcmZhY2VzIGVzdCBmb3VybmllLCBjZWxhIGTDqWZpbml0IGxlcyBpbnRlcmZhY2VzIHN1ciBsZXNxdWVsbGVzIGxlCitzZXJ2aWNlIFRGVFAgc2VyYSBhY3RpdsOpLgorLlRQCisuQiAtLXRmdHAtcm9vdD08csOpcGVydG9pcmU+Wyw8aW50ZXJmYWNlPl0KK0xlcyBmaWNoaWVycyDDoCBmb3VybmlyIGRhbnMgbGVzIHRyYW5zZmVydHMgVEZUUCBzZXJvbnQgY2hlcmNow6lzIGVuIHByZW5hbnQgbGUKK3LDqXBlcnRvaXJlIGZvdXJuaSBjb21tZSByYWNpbmUuIExvcnNxdWUgY2VsYSBlc3QgZm91cm5pLCBsZXMgY2hlbWlucyBURlRQCitpbmNsdWFudCAiLi4iIHNvbnQgcmVqZXTDqXMsIGFmaW4gZCfDqXZpdGVyIHF1ZSBsZXMgY2xpZW50cyBuZSBwdWlzc2VudCBzb3J0aXIgZGUKK2xhIHJhY2luZSBzcMOpY2lmacOpZS4gTGVzIGNoZW1pbnMgYWJzb2x1cyAoY29tbWVuw6dhbnQgcGFyICIvIikgc29udCBhdXRvcmlzw6lzLAorbWFpcyBpbHMgZG9pdmVudCDDqnRyZSDDoCBsYSByYWNpbmUgVEZUUCBmb3VybmllLiBTaSBsJ29wdGlvbiBpbnRlcmZhY2UgZXN0CitzcMOpY2lmacOpZSwgbGUgcsOpcGVydG9pcmUgbidlc3QgdXRpbGlzw6kgcXVlIHBvdXIgbGVzIHJlcXXDqnRlcyBURlRQIHJlw6d1ZXMgc3VyCitjZXR0ZSBpbnRlcmZhY2UuCisuVFAKKy5CIC0tdGZ0cC11bmlxdWUtcm9vdAorQWpvdXRlciBsJ2FkcmVzc2UgSVAgZHUgY2xpZW50IFRGVFAgZW4gdGVtcHMgcXUnw6lsw6ltZW50IGRlIGNoZW1pbiwgw6AgbGEgc3VpdGUKK2RlIGxhIHJhY2luZSB0ZnRwIChhZHJlc3NlIHNvdXMgZm9ybWUgZGUgNCBjaGlmZnJlcyBzw6lwYXLDqXMgcGFyIGRlcyBwb2ludHMpLgorVW5pcXVlbWVudCB2YWxhYmxlIHNpIHVuZSByYWNpbmUgVEZUUCBlc3Qgc3DDqWNpZmnDqWUgZXQgc2kgbGUgcsOpcGVydG9pcmUKK2NvcnJlc3BvbmQgZXhpc3RlLiBBaW5zaSwgc2kgbGEgdmFsZXVyIHBvdXIgdGZ0cC1yb290IGVzdCAiL3RmdHAiIGV0IHF1ZSBsZQorY2xpZW50IGQnYWRyZXNzZSBJUCAxLjIuMy40IHJlcXVpZXJ0IGxlIGZpY2hpZXIgIm1vbmZpY2hpZXIiLCBhbG9ycyBsZSBjaGVtaW4KK2VmZmVjdGl2ZSByw6lzdWx0YW50IHNlcmEgIi90ZnRwLzEuMi4zLjQvbW9uZmljaGllciIgc2kgL3RmdHAvMS4yLjMuNCBleGlzdGUsIG91CisiL3RmdHAvbW9uZmljaGllciIgZGFucyBsZSBjYXMgY29udHJhaXJlLgorLlRQCisuQiAtLXRmdHAtc2VjdXJlCitBY3RpdmUgbGUgbW9kZSBURlRQIHPDqWN1cmlzw6kgOiBzYW5zIGNlbGEsIHRvdXQgZmljaGllciBsaXNpYmxlCitwYXIgRG5zbWFzcSBlc3QgZGlzcG9uaWJsZSB2aWEgVEZUUCAobGVzIHLDqGdsZXMgZGUgY29udHLDtGxlIGQnYWNjw6hzIHVuaXgKK2hhYml0dWVsbGVzIHMnYXBwbGlxdWVudCkuIExvcnNxdWUgbCdvcHRpb24KKy5CIC0tdGZ0cC1zZWN1cmUKK2VzdCBzcMOpY2lmacOpZSwgc2V1bHMgbGVzIGZpY2hpZXJzIHBvc3PDqWTDqXMgcGFyIGwndXRpbGlzYXRldXIgc291cyBsZXF1ZWwgdG91cm5lCitsZSBwcm9jZXNzdXMgRG5zbWFzcSBzb250IGFjY2Vzc2libGVzLiBTaSBEbnNtYXNxIGVzdCBleMOpY3V0w6kgZW4gdGVtcHMgcXVlCitzdXBlci11dGlsaXNhdGV1ciAoInJvb3QiKSwgZGVzIHLDqGdsZXMgZGlmZsOpcmVudGVzIHMnYXBwbGlxdWVudCA6CisuQiAtLXRmdHAtc2VjdXJlCituJ2EgYXVjdW4gZWZmZXQsIG1haXMgc2V1bHMgbGVzIGZpY2hpZXJzIGF5YW50IHVuIGRyb2l0IGRlIGxlY3R1cmUgcG91ciB0b3V0IGxlCittb25kZSBzb250IGFjY2Vzc2libGVzLiBJbCBuJ2VzdCBwYXMgcmVjb21tYW5kw6kgZCdleMOpY3V0ZXIgRG5zbWFzcSBzb3VzCitsJ3V0aWxpc2F0ZXVyICJyb290IiBsb3JzcXVlIGxlIHNlcnZpY2UgVEZUUCBlc3QgYWN0aXbDqSwgZXQgaWwgZXN0IGZvcm1lbGxlbWVudAorZMOpY29uc2VpbGzDqSBkZSBsZSBmYWlyZSBzYW5zIGZvdXJuaXIgbCdvcHRpb24KKy5CIC0tdGZ0cC1yb290LgorU2FucyBjZWxhLCBlbiBlZmZldCwgbCdhY2PDqHMgZGUgdG91cyBsZXMgZmljaGllcnMgZHUgc2VydmV1ciBwb3VyIGxlcXVlbCBsZQorZHJvaXQgZGUgbGVjdHVyZSBwb3VyIHRvdXQgbGUgbW9uZGUgZXN0IHBvc2l0aW9ubsOpICgid29ybGQtcmVhZGFibGUiKSBkZXZpZW50Citwb3NzaWJsZSBwYXIgbidpbXBvcnRlIHF1ZWwgaMO0dGUgc3VyIGxlIHLDqXNlYXUuCisuVFAKKy5CIC0tdGZ0cC1sb3dlcmNhc2UKK0NvbnZlcnRpIGxlcyBub21zIGRlIGZpY2hpZXJzIGRlcyByZXF1w6p0ZXMgVEZUUCBlbiBtaW51c2N1bGVzLiBDZWxhIGVzdCB1dGlsZQorcG91ciBsZXMgcmVxdcOqdGVzIGVmZmVjdHXDqWVzIGRlcHVpcyBsZXMgbWFjaGluZXMgV2luZG93cywgZG9udCBsZXMgc3lzdMOobWVzCitkZSBmaWNoaWVycyBzb250IGluc2Vuc2libGVzIMOgIGxhIGNhc3NlIGV0IHBvdXIgbGVzcXVlbHMgbGEgZMOpdGVybWluYXRpb24KK2RlIGxhIGNhc3NlIGVzdCBwYXJmb2lzIHVuIHBldSBhbMOpYXRvaXJlLiBBIG5vdGVyIHF1ZSBsZSBzZXJ2ZXVyIHRmdHAgZGUKK2Ruc21hc3EgY29udmVydGkgc3lzdMOpbWF0aXF1ZW1lbnQgbGVzICJcXCIgZW4gIi8iIGRhbnMgbGVzIG5vbXMgZGUgZmljaGllcnMuCisuVFAKKy5CIC0tdGZ0cC1tYXg9PGNvbm5leGlvbnM+CitEw6lmaW5pdCBsZSBub21icmUgbWF4aW11bSBkZSBjb25uZXhpb25zIFRGVFAgc2ltdWx0YW7DqWVzIGF1dG9yaXPDqWVzLiBMYSB2YWxldXIKK3BhciBkw6lmYXV0IGVzdCBkZSA1MC4gTG9yc3F1J3VuIGdyYW5kIG5vbWJyZSBkZSBjb25uZXhpb25zIFRGVFAgZXN0IHNww6ljaWZpw6ksCitpbCBzZSBwZXV0IHF1ZSBsYSBsaW1pdGUgZGUgbm9tYnJlIGRlIGRlc2NyaXB0ZXVycyBkZSBmaWNoaWVycyBwYXIgcHJvY2Vzc3VzCitzb2l0IGF0dGVpbnRlLiBEbnNtYXNxIG7DqWNlc3NpdGUgcXVlbHF1ZXMgZGVzY3JpcHRldXJzIGRlIGZpY2hpZXJzLCBhaW5zaSBxdSd1bgorZGVzY3JpcHRldXIgZGUgZmljaGllciBwb3VyIGNoYXF1ZSBjb25uZXhpb24gVEZUUCBzaW11bHRhbsOpZSBldCBwb3VyIGNoYWN1biBkZXMKK2ZpY2hpZXJzIGRldmFudCDDqnRyZSBmb3VybmlzLiBEZSBmYWl0LCBzZXJ2aXIgbGUgbcOqbWUgZmljaGllciDDoCBuIGNsaWVudHMgbmUKK27DqWNlc3NpdGVyYSBxdSdlbnZpcm9uIG4gKyAxMCBkZXNjcmlwdGV1cnMgZGUgZmljaGllcnMsIGFsb3JzIHF1ZSBmb3VybmlyIGRlcworZmljaGllcnMgdG91cyBkaWZmw6lyZW50cyDDoCBuIGNsaWVudHMgdXRpbGlzZXJhIGVudmlyb24gKDIqbikgKyAxMCBkZXNjcmlwdGV1cnMuCitTaSBlbGxlIGVzdCBkb25uw6llLCBsJ29wdGlvbiAKKy5CIC0tdGZ0cC1wb3J0LXJhbmdlCitwZXV0IGFmZmVjdGVyIGxlIG5vbWJyZSBtYXhpbXVtIGRlIGNvbm5leGlvbnMgY29uY3VycmVudGVzLgorLlRQCisuQiAtLXRmdHAtbm8tYmxvY2tzaXplCitFbXDDqmNoZSBsZSBzZXJ2ZXVyIFRGVFAgZGUgbsOpZ29jaWVyIGwnb3B0aW9uICJibG9ja3NpemUiICh0YWlsbGUgZGUgYmxvYykgYXZlYworbGVzIGNsaWVudHMuIENlcnRhaW5zIGNsaWVudHMgYnVnZ8OpcyBzcMOpY2lmaWVudCBjZXR0ZSBvcHRpb24gbWFpcyBzZSBjb21wb3J0ZW50CitlbnN1aXRlIGRlIG1hbmnDqHJlIGluY29ycmVjdGUgc2kgY2VsbGUtY2kgZXN0IGFjY29yZMOpZS4KKy5UUAorLkIgLS10ZnRwLXBvcnQtcmFuZ2U9PGTDqWJ1dD4sPGZpbj4KK1VuIHNlcnZldXIgVEZUUCDDqWNvdXRlIHN1ciBsZSBwb3J0IHByw6lkw6lmaW5pIDY5ICgid2VsbC1rbm93biBwb3J0IikgcG91cgorbCdpbml0aWF0aW9uIGRlIGxhIGNvbm5leGlvbiwgbWFpcyB1dGlsaXNlIMOpZ2FsZW1lbnQgdW4gcG9ydCBkeW5hbWlxdWVtZW50CithbGxvdcOpIHBvdXIgY2hhcXVlIGNvbm5leGlvbi4gTm9ybWFsZW1lbnQsIGNlcyBwb3J0cyBzb250IGFsbG91w6lzIHBhcgorbGUgc3lzdMOobWUgZCdleHBsb2l0YXRpb24sIG1haXMgY2V0dGUgb3B0aW9uIHBlcm1ldCBkZSBzcMOpY2lmaWVyIHVuZSBnYW1tZQorZGUgcG9ydHMgw6AgdXRpbGlzZXIgcG91ciBsZXMgdHJhbnNmZXJ0cyBURlRQLiBDZWxhIHBldXQtw6p0cmUgdXRpbGUgc2kKK1RGVFAgZG9pdCB0cmF2ZXJzZXIgdW4gZGlzcG9zaXRpZiBnYXJkZS1iYXJyacOocmUgKCJmaXJld2FsbCIpLiBMYSB2YWxldXIKK2RlIGTDqWJ1dCBwb3VyIGxhIHBsYWdlIGRlIHBvcnQgbmUgcGV1dC3DqnRyZSBpbmbDqXJpZXVyZSDDoCAxMDI1IHNhdWYgc2kKK2Ruc21hc3EgdG91cm5lIGVuIHRlbXBzIHF1ZSBzdXBlci11dGlsaXNhdGV1ciAoInJvb3QiKS4gTGUgbm9tYnJlIGRlCitjb25uZXhpb25zIFRGVFAgY29uY3VycmVudGVzIGVzdCBsaW1pdMOpZSBwYXIgbGEgdGFpbGxlIGRlIGxhIGdhbW1lIGRlCitwb3J0cyBhaW5zaSBzcMOpY2lmacOpZS4KKy5UUAorLkIgLS10ZnRwLXBvcnQtcmFuZ2U9PGTDqWJ1dD4sPGZpbj4KK1VuIHNlcnZldXIgVEZUUCDDqWNvdXRlIHN1ciB1biBudW3DqXJvIGRlIHBvcnQgYmllbiBjb25udSAoNjkpIHBvdXIgbCdpbml0aWF0aW9uCitkZSBsYSBjb25uZXhpb24sIGV0IGFsbG91ZSBkeW5hbWlxdWVtZW50IHVuIHBvcnQgcG91ciBjaGFxdWUgY29ubmV4aW9uLiBDZXMKK251bcOpcm9zIGRlIHBvcnRzIHNvbnQgZW4gcHJpbmNpcGUgYWxsb3XDqXMgcGFyIGxlIHN5c3TDqG1lIGQnZXhwbG9pdGF0aW9uLCBtYWlzCitjZXR0ZSBvcHRpb24gcGVybWV0IGRlIHNww6ljaWZpZXIgdW5lIGdhbW1lIGRlIHBvcnRzIMOgIHV0aWxpc2VyIHBvdXIgbGVzCit0cmFuc2ZlcnRzIFRGVFAuIENlbGEgcGV1dC3DqnRyZSB1dGlsZSBsb3JzcXVlIGNldXgtY2kgZG9pdmVudCB0cmF2ZXJzZXIgdW4KK2Rpc3Bvc2l0aWYgZ2FyZGUtYmFycmnDqHJlICgiZmlyZXdhbGwiKS4gTGUgZMOpYnV0IGRlIGxhIHBsYWdlIG5lIHBldXQtw6p0cmUKK2luZsOpcmlldXIgw6AgMTAyNCDDoCBtb2lucyBxdWUgRG5zbWFzcSBuZSBmb25jdGlvbm5lIGVuIHRlbXBzIHF1ZQorc3VwZXItdXRpbGlzYXRldXIgKCJyb290IikuIExlIG5vbWJyZSBtYXhpbWFsIGRlIGNvbm5leGlvbnMgVEZUUCBjb25jdXJyZW50ZXMKK2VzdCBsaW1pdMOpZSBwYXIgbGEgdGFpbGxlIGRlIGxhIHBsYWdlIGRlIHBvcnRzIGFpbnNpIGTDqWZpbmllLiAKKy5UUAorLkIgXC1DLCAtLWNvbmYtZmlsZT08ZmljaGllcj4KK1Nww6ljaWZpZSB1biBmaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gZGlmZsOpcmVudC4gTCdvcHRpb24gImNvbmYtZmlsZSIgZXN0CivDqWdhbGVtZW50IGF1dG9yaXPDqWUgZGFucyBkZXMgZmljaGllcnMgZGUgY29uZmlndXJhdGlvbiwgY2UgcXVpIHBlcm1ldAorbCdpbmNsdXNpb24gZGUgbXVsdGlwbGVzIGZpY2hpZXJzIGRlIGNvbmZpZ3VyYXRpb24uIEwndXRpbGlzYXRpb24gZGUgIi0iIGNvbW1lCitub20gZGUgZmljaGllciBwZXJtZXQgbGEgbGVjdHVyZSBwYXIgZG5zbWFzcSBkZSBzYSBjb25maWd1cmF0aW9uIHN1ciBsJ2VudHLDqWUgc3RhbmRhcmQKK3N0ZGluLgorLlRQCisuQiBcLTcsIC0tY29uZi1kaXI9PHLDqXBlcnRvaXJlPlssPGV4dGVuc2lvbiBkZSBmaWNoaWVyPi4uLl0KK0xpcyB0b3VzIGxlcyBmaWNoaWVycyBkdSByw6lwZXJ0b2lyZSBzcMOpY2lmacOpIGV0IGxlcyB0cmFpdGUgY29tbWUgZGVzIGZpY2hpZXJzIGRlCitjb25maWd1cmF0aW9uLiBTaSBkZXMgZXh0ZW5zaW9ucyBzb250IGRvbm7DqWVzLCB0b3V0IGZpY2hpZXIgZmluaXNzYW50IHBhciBjZXMKK2V4dGVuc2lvbnMgc2Vyb250IGlnbm9yw6lzLiBUb3V0IGZpY2hpZXIgZG9udCBsZSBub20gc2UgdGVybWluZSBlbiB+IG91IGNvbW1lbmNlCitwYXIgLiwgYWluc2kgcXVlIGNldXggY29tbWVuw6dhbnQgb3Ugc2UgdGVybWluYW50IHBhciAjIHNlcm9udCBzeXN0w6ltYXRpcXVlbWVudAoraWdub3LDqXMuCitDZXR0ZSBvcHRpb24gcGV1dCDDqnRyZSBkb25uw6llIGVuIGxpZ25lIGRlIGNvbW1hbmRlIG91IGRhbnMgdW4gZmljaGllciBkZQorY29uZmlndXJhdGlvbi4KKy5TSCBGSUNISUVSIERFIENPTkZJR1VSQVRJT04KK0F1IGTDqW1hcnJhZ2UsIERuc21hc3EgbGlzCisuSSAvZXRjL2Ruc21hc3EuY29uZiwKK3NpIGNlIGZpY2hpZXIgZXhpc3RlLiAoU3VyIEZyZWVCU0QsIGNlIGZpY2hpZXIgZXN0CisuSSAvdXNyL2xvY2FsL2V0Yy9kbnNtYXNxLmNvbmYKKykgKHZvaXIgY2VwZW5kYW50IGxlcyBvcHRpb25zIAorLkIgXC1DCitldAorLkIgXC03CispLiBMZSBmb3JtYXQgZGUgY2UgZmljaGllciBjb25zaXN0ZSBlbiB1bmUgb3B0aW9uIHBhciBsaWduZSwgZXhhY3RlbWVudCBjb21tZQorbGVzIG9wdGlvbnMgbG9uZ3VlcyBkw6l0YWlsbMOpZXMgZGFucyBsYSBzZWN0aW9uIE9QVElPTlMsIG1haXMgc2FucyDDqnRyZSBwcsOpY8OpZMOpZXMKK3BhciAiLS0iLiBMZXMgbGlnbmVzIGNvbW1lbsOnYW50IHBhciAjIHNvbnQgZGVzIGNvbW1lbnRhaXJlcyBldCBzb250IGlnbm9yw6llcy4KK1BvdXIgbGVzIG9wdGlvbnMgcXVpIG5lIHBldXZlbnQtw6p0cmUgc3DDqWNpZmnDqWVzIHF1J3VuZSBzZXVsZSBmb2lzLCBjZWxsZSBkdQorZmljaGllciBkZSBjb25maWd1cmF0aW9uIHByZW5kcyBsZSBwYXMgc3VyIGNlbGxlIGZvdXJuaWUgZW4gbGlnbmUgZGUgY29tbWFuZGUuCitJbCBlc3QgcG9zc2libGUgZCd1dGlsaXNlciBkZXMgZ3VpbGxlbWV0cyBhZmluIGQnw6l2aXRlciBxdWUgbGVzICIsIiwiOiIsIi4iIGV0CisiIyIgbmUgc29pdCBpbnRlcnByw6p0w6lzLCBldCBpbCBlc3QgcG9zc2libGUgZCd1dGlsaXNlciBsZXMgc8OpcXVlbmNlcworZCfDqWNoYXBwZW1lbnQgc3VpdmFudGVzIDogXFxcXCBcXCIgXFx0IFxcZSBcXGIgXFxyIGV0IFxcbi4gRWxsZXMgY29ycmVzcG9uZGVudAorcmVzcGVjdGl2ZW1lbnQgw6AgbGEgYmFycmUgb2JsaXF1ZSBkZXNjZW5kYW50ZSAoImFudGktc2xhc2giKSwgZ3VpbGxlbWV0cyBkb3VibGVzLAordGFidWxhdGlvbiwgY2FyYWN0w6hyZSBkJ8OpY2hhcHBlbWVudCAoImVzY2FwZSIpLCBzdXBwcmVzc2lvbiAoImJhY2tzcGFjZSIpLCByZXRvdXIgKCJyZXR1cm4iKSBldAorbm91dmVsbGUgbGlnbmUgKCJuZXdsaW5lIikuCisuU0ggTk9URVMKK0EgbGEgcsOpY2VwdGlvbiBkJ3VuIHNpZ25hbCBTSUdIVVAsCisuQiBEbnNtYXNxCit2aWRlIHNvbiBjYWNoZSBldCByZWNoYXJnZSBsZXMgZmljaGllcnMKKy5JIC9ldGMvaG9zdHMKK2V0CisuSSAvZXRjL2V0aGVycyAKK2FpbnNpIHF1ZSB0b3V0IGF1dHJlIGZpY2hpZXIgc3DDqWNpZmnDqSBwYXIgbGVzIG9wdGlvbnMKKy5CIC0tZGhjcC1ob3N0c2ZpbGUKKywKKy5CIC0tZGhjcC1vcHRzZmlsZQorb3UKKy5CIC0tYWRkbi1ob3N0cy4KK0xlIHNjcmlwdCBkZSBjaGFuZ2VtZW50IGRlIGJhaWwgZXN0IGFwcGVsbMOpIHBvdXIgY2hhcXVlIGJhaWwgREhDUCBleGlzdGFudC4gU2kKK2wnb3B0aW9uCisuQiAtLW5vLXBvbGwKK2VzdCBwb3NpdGlvbm7DqWUsIGFsb3JzIGxlIGZpY2hpZXIKKy5JIC9ldGMvcmVzb2x2LmNvbmYKK2VzdCDDqWdhbGVtZW50IHJlY2hhcmfDqS4KK1NJR0hVUCBuZSBwcm92b3F1ZSBQQVMgZGUgcmVjaGFyZ2VtZW50IGR1IGZpY2hpZXIgZGUgY29uZmlndXJhdGlvbi4KKy5QUAorQSBsYSByw6ljZXB0aW9uIGQndW4gc2lnbmFsIFNJR1VTUjEsCisuQiBEbnNtYXNxIAorw6ljcml0IGRlcyBzdGF0aXN0aXF1ZXMgZGFucyBsZXMgdHJhY2VzIHN5c3TDqG1lLiBMZXMgaW5mb3JtYXRpb25zIGZvdXJuaWVzIHNvbnQgOgorbGEgdGFpbGxlIGR1IGNhY2hlLCBsZSBub21icmUgZGUgbm9tcyBheWFudCDDqXTDqSBzdXBwcmltw6lzIGR1IGNhY2hlIGF2YW50CitleHBpcmF0aW9uIGFmaW4gZGUgZmFpcmUgZGUgbGEgcGxhY2UgcG91ciBsZXMgbm91dmVhdXggbm9tcywgYWluc2kgcXVlIGxlIG5vbWJyZQordG90YWwgZCdlbnRyw6llcyBheWFudCDDqXTDqSBpbnPDqXLDqWVzIGRhbnMgbGUgY2FjaGUuIFBvdXIgY2hhcXVlIHNlcnZldXIgYW1vbnQsIGlsIGZvdXJuaXQKK2xlIG5vbW5icmUgZGUgcmVxdcOqdGVzIHRyYW5zbWlzZXMgYWluc2kgcXVlIGxlIG5vbWJyZSBkZSByZXF1w6p0ZXMgYXlhbnQgcsOpc3VsdMOpIHBhciB1bmUKK2VycmV1ci4gTG9yc3F1ZSBEbnNtYXNxIGEgw6l0w6kgbGFuY8OpIHZpYQorLkIgLS1uby1kYWVtb24KK291IGxvcnNxdWUgbGEgdHJhw6dhYmlsaXTDqSBtYXhpbWFsZSBhIMOpdMOpIGFjdGl2w6llICgKKy5CIC1xCispLCBsYSB0b3RhbGl0w6kgZHUgY29udGVudSBkdQorY2FjaGUgZXN0IGRlIHN1cmNyb8OudCBmb3VybmllLgorLlBQIAorQSBsYSByw6ljZXB0aW9uIGQndW4gc2lnbmFsIFNJR1VTUjIgZXQgbG9yc3F1J2lsIGVucmVnaXN0cmUgZGlyZWN0ZW1lbnQgc2VzCit0cmFjZXMgZGFucyB1biBmaWNoaWVyICh2b2lyCisuQiAtLWxvZy1mYWNpbGl0eQorKSwgYWxvcnMgCisuQiBEbnNtYXNxCitmZXJtZSBldCByZS1yb3V2cmUgbGUgZmljaGllciBkZSB0cmFjZXMuIElsIGZhdXQgbm90ZXIgcXVlIHBlbmRhbnQgY2V0dGUKK29ww6lyYXRpb24gRG5zbWFzcSBuZSBzJ2V4w6ljdXRlIHBhcyBlbiB0ZW1wcyBxdWUgInJvb3QiLiBMb3JzcXUnaWwgY3LDqcOpIHVuCitmaWNoaWVyIGRlIHRyYWNlcyBwb3VyIGxhIHByZW1pw6hyZSBmb2lzLCBEbnNtYXNxIGNoYW5nZSBsZSBwcm9wcmnDqXRhaXJlIGR1CitmaWNoaWVyIGFmaW4gZGUgbGUgZmFpcmUgYXBwYXJ0ZW5pciDDoCBsJ3V0aWxpc2F0ZXVyIG5vbiAicm9vdCIgc291cyBsZXF1ZWwKK0Ruc21hc3EgcydleMOpY3V0ZS4gTGUgbG9naWNpZWwgZGUgcm90YXRpb24gZGUgZmljaGllcnMgZGUgdHJhY2UgbG9ncm90YXRlIGRvaXQKK8OqdHJlIGNvbmZpZ3Vyw6kgcG91ciBjcsOpZXIgdW4gbm91dmVhdSBmaWNoaWVyIGF2ZWMgdW4gcHJvcHJpw6l0YWlyZSBpZGVudGlxdWUgYXUKK2ZpY2hpZXIgZXhpc3RhbnQgYXZhbnQgZCdlbnZveWVyIGxlIHNpZ25hbCBTSUdVU1IyLiBTaSB1bmUgcmVxdcOqdGUgRE5TIFRDUCBlc3QKK2VuIGNvdXJzLCBsJ2FuY2llbiBmaWNoaWVyIGRlIHRyYWNlcyByZXN0ZSBvdXZlcnQgZGFucyBsZSBwcm9jZXNzdXMgZmlscyBxdWkKK3RyYWl0ZSBsYSByZXF1w6p0ZSBUQ1AgZXQgaWwgcGV1dCB5IMOqdHJlIMOpY3JpdC4gSWwgZXhpc3RlIGNlcGVuZGFudCB1bmUgbGltaXRlCitkZSAxNTAgc2Vjb25kZXMgYXByw6hzIGxhcXVlbGxlIHRvdXMgbGVzIHByb2Nlc3N1cyB0cmFpdGFudCBkZXMgcmVxdcOqdGVzIFRDUAorZXhwaXJlbnQgOiBwb3VyIGNldHRlIHJhaXNvbiwgaWwgZXN0IHByw6lmw6lyYWJsZSBkZSBuZSBwYXMgY29uZmlndXJlciBsYQorY29tcHJlc3Npb24gZGVzIGZpY2hpZXJzIGRlIHRyYWNlcyB2ZW5hbnQganVzdGUgZGUgZmFpcmUgbCdvYmpldCBkJ3VuZSByb3RhdGlvbi4KK0RhbnMgbGUgY2FzIGRlIGwndXRpbGlzYXRpb24gZHUgbG9naWNpZWwgbG9ncm90YXRlLCBsZXMgb3B0aW9ucyByZXF1aXNlcyBzb250CisuQiBjcmVhdGUgCitldAorLkIgZGVsYXljb21wcmVzcy4KKyAKKy5QUAorRG5zbWFzcSBlc3QgdW4gbG9naWNpZWwgZGUgdHJhbnNtaXNzaW9uIGRlIHJlcXXDqnRlcyBETlMgOiBpbCBuJ2VzdCBwYXMgY2FwYWJsZQorZCdlZmZlY3R1ZXIgdW5lIHLDqXNvbHV0aW9uIGRlIG5vbSByw6ljdXJzaXZlIGVuIHBhcnRhbnQgZGVzIHNlcnZldXJzIEROUyByYWNpbmUsCittYWlzIHRyYW5zbWV0IGRlIHRlbGxlcyByZXF1w6p0ZXMgw6AgdW4gc2VydmV1ciBETlMgYW1vbnQgY2FwYWJsZSBkZSB0ZWxsZXMKK3JlY2hlcmNoZXMgcsOpY3Vyc2l2ZXMsIGNlIHF1aSBlc3QgdHlwaXF1ZW1lbnQgbGUgY2FzIGQndW4gc2VydmV1ciBETlMgZGUgRkFJLgorUGFyIGTDqWZhdXQsIERuc21hc3EgbGlzCisuSSAvZXRjL3Jlc29sdi5jb25mCitwb3VyIGTDqWNvdXZyaXIgbGVzIGFkcmVzc2VzIElQIGRlcyBzZXJ2ZXVycyBETlMgYW1vbnRzIMOgIHV0aWxpc2VyLCBwdWlzcXVlIGNldHRlCitpbmZvcm1hdGlvbiBlc3QgZW4gZ8OpbsOpcmFsIHN0b2Nrw6llIMOgIGNldCBlbmRyb2l0LiBBIG1vaW5zIHF1ZSBsJ29wdGlvbgorLkIgLS1uby1wb2xsCituZSBzb2l0IHV0aWxpc8OpZSwKKy5CIERuc21hc3EKK3bDqXJpZmllIGxhIGRhdGUgZGUgbW9kaWZpY2F0aW9uIGR1IGZpY2hpZXIKKy5JIC9ldGMvcmVzb2x2LmNvbmYKKyhvdSBsJ8OpcXVpdmFsZW50IHNpIAorLkIgXC0tcmVzb2x2LWZpbGUgCitlc3QgdXRpbGlzw6kpLCBldCBsZSByZWxpcyBsb3JzcXUnaWwgY2hhbmdlLiBDZWxhIHBlcm1ldCBkZSBkw6lmaW5pciBsZXMgc2VydmV1cnMKK0ROUyBhbW9udCBkZSBtYW5pw6hyZSBkeW5hbWlxdWUgbG9yc3F1ZSBQUFAgb3UgREhDUCBzb250IHV0aWxpc8OpcywgcHVpc3F1ZSBjZXMKK3Byb3RvY29sZXMgZm91cm5pc3NlbnQgY2V0dGUgaW5mb3JtYXRpb24uCitMJ2Fic2VuY2UgZHUgZmljaGllcgorLkkgL2V0Yy9yZXNvbHYuY29uZgorbmUgY29uZHVpdCBwYXMgw6AgdW5lIGVycmV1ciwgcHVpc3F1J2lsIHBldXQgdHLDqHMgYmllbiBuZSBwYXMgw6p0cmUgY3LDqcOpIGF2YW50CitxdSd1bmUgY29ubmV4aW9uIFBQUCBuZSBzb2l0IMOpdGFibGllLiBEYW5zIGNlIGNhcywgRG5zbWFzcSB2w6lyaWZpZSByw6lndWxpw6hyZW1lbnQKK3BvdXIgdm9pciBzaSB1biBmaWNoaWVyCisuSSAvZXRjL3Jlc29sdi5jb25mIAorZXN0IGNyw6nDqS4gRG5zbWFzcSBwZXV0IMOqdHJlIGNvbmZpZ3Vyw6kgcG91ciBsaXJlIHBsdXMgZCd1biBmaWNoaWVyIHJlc29sdi5jb25mLgorQ2VsYSBlc3QgdXRpbGUgc3VyIHVuIG9yZGluYXRldXIgcG9ydGFibGUgb8O5IFBQUCBldCBESENQIHBldXZlbnQtw6p0cmUgdXRpbGlzw6lzIDoKK0Ruc21hc3EgcGV1dCBhbG9ycyDDqnRyZSBjb25maWd1csOpIHBvdXIgbGlyZSDDoCBsYSBmb2lzCisuSSAvZXRjL3BwcC9yZXNvbHYuY29uZiAKK2V0CisuSSAvZXRjL2RoY3BjL3Jlc29sdi5jb25mIAorZXQgdXRpbGlzZXJhIGxlIGNvbnRlbnUgZHUgZmljaGllciBheWFudCBjaGFuZ8OpIGVuIGRlcm5pZXIsIGNlIHF1aSBwZXJtZXQgZGUKK3Bhc3NlciBhdXRvbWF0aXF1ZW1lbnQgZGUgc2VydmV1cnMgRE5TIMOgIGQnYXV0cmVzLgorLlBQCitMZXMgc2VydmV1cnMgYW1vbnRzIHBldXZlbnQgYXVzc2kgw6p0cmUgc3DDqWNpZmnDqXMgc3VyIGxhIGxpZ25lIGRlIGNvbW1hbmRlIG91CitkYW5zIHVuIGZpY2hpZXIgZGUgY29uZmlndXJhdGlvbi4gQ2VzIHNww6ljaWZpY2F0aW9ucyBkZSBzZXJ2ZXVycyBwZXV2ZW50CivDqXZlbnR1ZWxsZW1lbnQgc2Ugdm9pciBhZGpvaW5kcmUgZCd1biBub20gZGUgZG9tYWluZSBxdWkgcHLDqWNpc2Ugw6AgRG5zbWFzcSBxdWVsCitzZXJ2ZXVyIHV0aWxpc2VyIHBvdXIgdHJvdXZlciBsZXMgbm9tcyBkJ3VuIGRvbWFpbmUgZG9ubsOpLgorLlBQCitQb3VyIGNvbmZpZ3VyZXIgRG5zbWFzcSBhZmluIHF1J2lsIHNlIGNvbXBvcnRlIGNvbW1lIHVuIGNhY2hlIHBvdXIgbGEgbWFjaGluZQorc3VyIGxhcXVlbGxlIGlsIHRvdXJuZSwgbWV0dHJlICJuYW1lc2VydmVyIDEyNy4wLjAuMSIgZGFucyBsZSBmaWNoaWVyCisuSSAvZXRjL3Jlc29sdi5jb25mCithZmluIGRlIGZvcmNlciBsZXMgcHJvY2Vzc3VzIGxvY2F1eCDDoCBlbnZveWVyIGxldXJzIHJlcXXDqnRlcyDDoCBEbnNtYXNxLiBFbnN1aXRlLAorc3DDqWNpZmllciBsZXMgc2VydmV1cnMgRE5TIGFtb250IHNvaXQgZW4gbGVzIGZvdXJuaXNzYW50IGRpcmVjdGVtZW50IMOgIERuc21hc3EKK3ZpYSBsJ29wdGlvbgorLkIgXC0tc2VydmVyCitvdSBhbG9ycyBlbiBtZXR0YW50IGxldXJzIGFkcmVzc2VzIGRhbnMgdW4gYXV0cmUgZmljaGllciwgcGFyIGV4ZW1wbGUKKy5JIC9ldGMvcmVzb2x2LmRuc21hc3EKK2V0IGVuIGxhbsOnYW50IERuc21hc3EgYXZlYyBsJ29wdGlvbgorLkIgXC1yIC9ldGMvcmVzb2x2LmRuc21hc3EuCitDZXR0ZSBkZXV4acOobWUgdGVjaG5pcXVlIHBlcm1ldCBsYSBtaXNlLcOgLWpvdXIgZHluYW1pcXVlIGRlcyBhZGRyZXNzZXMgZGUKK3NlcnZldXJzIEROUyBhbW9udCBwYXIgbGUgYmlhaXMgZGUgUFBQIG91IERIQ1AuCisuUFAKK0xlcyBhZHJlc3NlcyBkYW5zIC9ldGMvaG9zdHMgcHJlbm5lbnQgbGUgZGVzc3VzIHN1ciBjZWxsZXMgZm91cm5pZXMgcGFyIGxlCitzZXJ2ZXVyIEROUyBhbW9udCwgYWluc2kgIm1hY29tcGFnbmllLmNvbSAxLjIuMy40IiBkYW5zIC9ldGMvaG9zdHMgYXNzdXJlIHF1ZQorbGVzIHJlcXXDqnRlcyBwb3VyICJtYWNvbXBhZ25pZS5jb20iIHJldG91cm5lcm9udCB0b3Vqb3VycyAxLjIuMy40LCBtw6ptZSBzaSB1bmUKK3JlcXXDqnRlIGF1IHNlcnZldXIgRE5TIGFtb250IHJldG91cm5lcmFpdCB1bmUgYWRyZXNzZSBkaWZmw6lyZW50ZS4gSWwgeSBhIHVuZQorZXhjZXB0aW9uIMOgIGNlY2kgOiBzaSBsZSBETlMgYW1vbnQgY29udGllbnQgdW4gQ05BTUUgcXVpIHBvaW50ZSB2ZXJzIHVuIG5vbQorcHLDqXNlbnQgZGFucyAvZXRjL2hvc3RzLCBhbG9ycyBsYSByZWNoZXJjaGUgZHUgQ05BTUUgdmlhIERuc21hc3EgZm91cm5pcmEKK2wnYWRyZXNzZSBETlMgYW1vbnQuIFBvdXIgY29udG91cm5lciBjZWxhLCBpbCBzdWZmaXQgZGUgbWV0dHJlIGwnZW50csOpZQorY29ycmVzcG9uZGFudCBhdSBDTkFNRSBkYW5zIC9ldGMvaG9zdHMuCisuUFAKK2xlIHN5c3TDqG1lIGRlIGxhYmVsIGZvbmN0aW9ubmUgY29tbWUgc3VpdCA6IHBvdXIgY2hhcXVlIHJlcXXDqnRlIERIQ1AsIGRuc21hc3EKK2Fzc29jaWUgdW4gZW5zZW1ibGUgZGUgbGFiZWxzIG9idGVudXMgw6AgcGFydGlyIGRlcyBsaWduZXMgZGUgbGEgY29uZmlndXJhdGlvbgoraW5jbHVhbnQgc2V0OjxsYWJlbD4sIHkgY29tcHJpcyB1biBwb3VyIGxhIHBsYWdlIGQnYWRyZXNzZSAoCisuQiBkaGNwLXJhbmdlCispIHV0aWxpc8OpZSBwb3VyIGFsbG91ZXIgbCdhZHJlc3NlLCB1biBwb3VyIGNoYXF1ZSBlbnRyw6llCisuQiBkaGNwLWhvc3QKK2Fzc29jacOpZSAoYXVxdWVsIGVzdCByYWpvdXTDqSBsZSBtb3QtY2xlZiAia25vd24iIHNpIHVuZSBlbnRyw6llIGRoY3AtaG9zdAorY2/Dr25jaWRlKS4KKworTGUgbGFiZWwgImJvb3RwIiBlc3QgYXNzb2Npw6kgYXV4IHJlcXXDqnRlcyBCT09UUCwgdW4gbGFiZWwgZG9udCBsZSBub20gZXN0IGxlCitub20gZGUgbCdpbnRlcmZhY2Ugc3VyIGxhcXVlbGxlIGxhIHJlcXXDqnRlIGVzdCBhcnJpdsOpZS4KKworUG91ciBsZXMgbGlnbmVzIGRlIGNvbmZpZ3VyYXRpb24gY29tcG9ydGFudCBkZXMgw6lsw6ltZW50cyB0YWc6PGxhYmVsPiwKK3NldWxlcyBzZXJvbnQgdmFsaWRlcyBjZWxsZXMgcG91ciBsZXNxdWVscyB0b3VzIGxlcyBsYWJlbHMgY29ycmVzcG9uZGFudHMKK3Nlcm9udCBwcsOpc2VudHMuIEMnZXN0IHR5cGlxdWVtZW50IGxlIGNhcyBkZXMgbGlnbmVzIGRoY3Atb3B0aW9ucy4KK1VuCisuQiBkaGNwLW9wdGlvbiAKK3Bvc3PDqWRhbnQgZGVzIGxhYmVscyBzZXJhIHV0aWxpc8OpIGRlIHByw6lmw6lyZW5jZSDDoCB1bgorLkIgZGhjcC1vcHRpb24gCitzYW5zIGxhYmVsLCBwb3VyIHBldSBxdWUgX3RvdXNfIGxlcyBsYWJlbHMgcG9zaXRpb25uw6lzIGNvcnJlc3BvbmRlbnQgw6AgbCdlbnNlbWJsZQorZGUgbGFiZWxzIGTDqWNyaXQgcGx1cyBoYXV0LgorTGUgcHLDqWZpeGUgJyEnIHN1ciB1biBsYWJlbCBlc3QgdW4gaW5kaWNhdGV1ciBkZSBuw6lnYXRpb24sIGFpbnNpCisuQiAtLWRoY3A9b3B0aW9uPXRhZzohcHVycGxlLDMsMS4yLjMuNAorbidlbnZvaWUgbCdvcHRpb24gcXVlIGxvcnNxdWUgbGUgbGFiZWwgInB1cnBsZSIgbidlc3QgcGFzIGRhbnMgbGEgbGlzdGUgZGUKK2xhYmVscyBkw6lmaW5pcyBwb3VyIGwnaMO0dGUgY29uc2lkw6lyw6kuIChkYW5zIGxlIGNhcyBkZSBsJ3V0aWxpc2F0aW9uIGRhbnMgdW5lCitsaWduZSBkZSBjb21tYW5kZSBhdSBsaWV1IGQndW4gZmljaGllciBkZSBjb25maWd1cmF0aW9uLCBuZSBwYXMgb3VibGllcgorZCfDqWNoYXBwZXIgbGUgY2FyYWN0w6hyZSAhLCBxdWkgZXN0IHVuIG3DqXRhLWNhcmFjdMOocmUgZCdpbnRlcnByw6l0ZXVyIGRlIGNvbW1hbmRlCitzaGVsbCkuCisKK0xvcnMgZGUgbGEgc8OpbGVjdGlvbiBkJ3VuZSBvcHRpb24sIHVuZSDDqXRpcXVldHRlIHNww6ljaWZpw6llIHBhciBkaGNwLXJhbmdlCitwYXNzZSBhcHLDqHMgbGVzIGF1dHJlcyDDqXRpcXVldHRlcywgY2UgcXVpIHBlcm1ldCBkZSBmYWNpbGVtZW50IHJlbXBsYWNlciBkZXMKK29wdGlvbiBnw6luw6lyaXF1ZXMgcG91ciBkZXMgaMO0dGVzIHNww6ljaWZpcXVlcywgYWluc2kgOgorLkIgZGhjcC1yYW5nZT1zZXQ6aW50ZXJmYWNlMSwuLi4uLi4KKy5CIGRoY3AtaG9zdD1zZXQ6bW9uaG90ZSwuLi4uLgorLkIgZGhjcC1vcHRpb249dGFnOmludGVyZmFjZTEsb3B0aW9uOm5pcy1kb21haW4sImRvbWFpbmUxIgorLkIgZGhjcC1vcHRpb249dGFnOm1vbmhvdGUsb3B0aW9uOm5pcy1kb21haW4sImRvbWFpbmUyIgordmEgcG9zaXRpb25uZXIgbCdvcHRpb24gTklTLWRvbWFpbiDDoCBkb21haW5lMSBwb3VyIGxlcyBow7R0ZXMgZGFucyBsYSBwbGFnZQorZCdhZHJlc3NlLCBzYXVmIHBvdXIgbW9uaG90ZSBwb3VyIGxlcXVlbCBjZXR0ZSB2YWxldXIgc2VyYSBkb21haW5lMi4KKworLlBQCitWZXVpbGxleiBub3RlciBxdWUgcG91cgorLkIgZGhjcC1yYW5nZQorLCBsZXMgw6lsw6ltZW50cyB0YWc6PGxhYmVsPiBldCBzZXQ6PGxhYmVsPiBzb250IHRvdXMgbGVzIGRldXggYXV0b3Jpc8OpcworcG91ciBzw6lsZWN0aW9ubmVyIGxhIHBsYWdlIMOgIHV0aWxpc2VyIHNlbG9uLCBwYXIgZXhlbXBsZSwgbGUgZGhjcC1ob3N0LAorZXQgcG91ciBhZmZlY3RlciBsJ29wdGlvbiBlbnZvecOpZSwgc3VyIGxhIGJhc2UgZGUgbGEgcGxhZ2Ugc8OpbGVjdGlvbm7DqWUuCisKK0NlIHN5c3TDqG1lIGEgw6l2b2x1w6kgZCd1biBzeXN0w6htZSBwbHVzIGFuY2llbiBldCBhdXggcG9zc2liaWxpdMOpcyBwbHVzIGxpbWl0w6llcywKK2V0IHBvdXIgZGVzIHJhaXNvbnMgZGUgY29tcGF0aWJpbGl0w6kgIm5ldDoiIHBldXQgw6p0cmUgdXRpbGlzw6kgw6AgbGEgcGxhY2UgZGUKKyJ0YWc6IiBldCAic2V0OiIgcGV1dC3DqnRyZSBvbWlzICjDoCBsJ2V4Y2VwdGlvbiBkZQorLkIgZGhjcC1ob3N0LAorb8O5ICJuZXQ6IiBwZXV0LcOqdHJlIHV0aWxpc8OpIMOgIGxhIHBsYWNlIGRlICJzZXQ6IikuIFBvdXIgbGVzIG3Dqm1lcyByYWlzb25zLCAnIycKK3BldXQtw6p0cmUgdXRpbGlzw6kgw6AgbGEgcGxhY2UgZGUgJyEnIHBvdXIgaW5kaXF1ZXIgbGEgbsOpZ2F0aW9uLgorLlBQIAorTGUgc2VydmV1ciBESENQIGludMOpZ3LDqSBkYW5zIERuc21hc3EgZm9uY3Rpb25uZSDDqWdhbGVtZW50IGVuIHRlbXBzIHF1ZSBzZXJ2ZXVyCitCT09UUCwgcG91ciBwZXUgcXVlIGwnYWRyZXNzZSBNQUMgZXQgbCdhZHJlc3NlIElQIGRlcyBjbGllbnRzIHNvaWVudCBmb3VybmllcywKK3F1ZSBjZSBzb2l0IHBhciBsZSBiaWFpcyBkZSBsJ29wdGlvbiAKKy5CIGRoY3AtaG9zdCAKK291IGRhbnMgbGUgZmljaGllcgorLkkgL2V0Yy9ldGhlcnMKKywgZXQgcXVlIGwnb3B0aW9uCisuQiBkaGNwLXJhbmdlIAorc29pdCBwcsOpc2VudGUgYWZpbiBkJ2FjdGl2ZXIgbGUgc2VydmV1ciBESENQIHBvdXIgdW4gcsOpc2VhdSBkb25uw6kgKEwnb3B0aW9uCisuQiAtLWJvb3RwLWR5bmFtaWMKK3N1cHByaW1lIGxhIG7DqWNlc3NpdMOpIGRlcyBhc3NvY2lhdGlvbnMgc3RhdGlxdWVzKS4gTGUgcGFyYW3DqHRyZQorImZpbGVuYW1lIiAobm9tIGRlIGZpY2hpZXIpIGRlIGxhIHJlcXXDqnRlIEJPT1RQIGVzdCB1dGlsaXPDqSBjb21tZSBsYWJlbCwgYWluc2kKK3F1ZSBsZSBsYWJlbCAiYm9vdHAiLCBwZXJtZXR0YW50IHVuIGNlcnRhaW4gY29udHLDtGxlIHN1ciBsZXMgb3B0aW9ucyByZXRvdXJuw6llcworYXV4IGRpZmbDqXJlbnRlcyBjbGFzc2VzIGQnaMO0dGVzLgorCisKKy5TSCBDT05GSUdVUkFUSU9OIEVOIFRFTVBTIFFVRSBTRVJWRVVSIEZBSVNBTlQgQVVUT1JJVMOJCisuUFAgCitDb25maWd1cmVyIGRuc21hc3EgcG91ciBhZ2lyIGVuIHRlbXBzIHF1ZSBzZXJ2ZXVyIEROUyBmYWlzYW50IGF1dG9yaXTDqSBlc3QKK2NvbXBsaXF1w6kgcGFyIGxlIGZhaXQgcXVlIGNlbGEgaW1wbGlxdWUgbGEgY29uZmlndXJhdGlvbiBkZSBzZXJ2ZXVycyBETlMKK2V4dGVybmVzIHBvdXIgbWV0dHJlIGVuIHBsYWNlIGxhIGTDqWzDqWdhdGlvbi4gU2Vyb250IHByw6lzZW50w6lzIGNpLWRlc3NvdXMgdHJvaXMKK3Njw6luYXJpb3MgZGUgY29tcGxleGl0w6kgY3JvaXNzYW50ZS4gTGUgcHLDqS1yZXF1aXMgcG91ciBjaGFjdW4gZGUgY2VzIHNjw6luYXJpb3MKK2VzdCBsJ2V4aXN0ZW5jZSBkJ3VuZSBhZHJlc3NlIElQIGdsb2JhbGVtZW50IGRpc3BvbmlibGUsIGQndW4gZW5yZWdpc3RyZW1lbnQgZGUKK3R5cGUgQSBvdSBBQUFBIHBvaW50YW50IHZlcnMgY2V0dGUgYWRyZXNzZSwgYWluc2kgcXVlIGQndW4gc2VydmV1ciBETlMgZXh0ZXJuZQorY2FwYWJsZSBkJ2VmZmVjdHVlciBsYSBkw6lsw6lnYXRpb24gZGUgbGEgem9uZSBlbiBxdWVzdGlvbi4gUG91ciBsYSBwcmVtacOocmUKK3BhcnRpZSBkZSBjZXMgZXhwbGljYXRpb25zLCBub3VzIGFsbG9ucyBhcHBlbGxlciBzZXJ2ZXVyLmV4ZW1wbGUuY29tCitsJ2VucmVnaXN0cmVtZW50IEEgKG91IEFBQUEpIGRlIGwnYWRyZXNzZSBnbG9iYWxlbWVudCBhY2Nlc3NpYmxlLCBldAorbm90cmUuem9uZS5jb20gbGEgem9uZSBwb3VyIGxhcXVlbGxlIGRuc21hc3EgZmFpdCBhdXRvcml0w6kuCisKK0xhIGNvbmZpZ3VyYXRpb24gbGEgcGx1cyBzaW1wbGUgY29uc2lzdGUgZW4gZGV1eCBsaWduZXMgZGUgY29uZmlndXJhdGlvbiwKK3NvdXMgbGEgZm9ybWUgOgorLm5mCisuQiBhdXRoLXNlcnZlcj1zZXJ2ZXVyLmV4ZW1wbGUuY29tLGV0aDAKKy5CIGF1dGgtem9uZT1ub3RyZS56b25lLmNvbSwxLjIuMy4wLzI0CisuZmkKKworYWluc2kgcXVlIGRldXggZW5yZWdpc3RyZW1lbnRzIGRhbnMgbGUgRE5TIGV4dGVybmUgOgorCisubmYKK3NlcnZldXIuZXhlbXBsZS5jb20gICAgICAgQSAgICAxOTIuMC40My4xMAorbm90cmUuem9uZS5jb20gICAgICAgICAgICBOUyAgICBzZXJ2ZXVyLmV4ZW1wbGUuY29tCisuZmkKKworZXRoMCBlc3QgbCdpbnRlcmZhY2UgcsOpc2VhdSBleHRlcm5lIHN1ciBsYXF1ZWxsZSBkbnNtYXNxIMOpY291dGUsIGRvbnQgbCdhZHJlc3NlCitJUCAoZ2xvYmFsZW1lbnQgYWNjZXNzaWJsZSkgZXN0IDE5Mi4wLjQzLjEwLiAKKworQSBub3RlciBxdWUgbCdhZHJlc3NlIElQIGV4dGVybmUgcGV1dCBwYXJmYWl0ZW1lbnQgw6p0cmUgZHluYW1pcXVlIChwYXIgZXhlbXBsZQorYXR0cmlidcOpZSBwYXIgdW4gRkFJIHZpYSBESENQIG91IFBQUCkuIERhbnMgY2UgY2FzLCBsJ2VucmVnaXN0cmVtZW50IGRlIHR5cGUgQQorZG9pdCDDqnRyZSBsacOpIMOgIGNldCBlbnJlZ2lzdHJlbWVudCBkeW5hbWlxdWUgcGFyIGwndW5lIG91IGwnYXV0cmUgZGVzIHRlY2huaXF1ZXMKK2hhYml0dWVsbGVzIGRlIHN5c3TDqG1lIEROUyBkeW5hbWlxdWUuCisKK1VuIGV4ZW1wbGUgcGx1cyBjb21wbGV4ZSBtYWlzIGVuIHByYXRpcXVlIHBsdXMgdXRpbGUgY29ycmVzcG9uZCBhdSBjYXMgb8O5CitsJ2FkcmVzc2UgSVAgZ2xvYmFsZW1lbnQgYWNjZXNzaWJsZSBzZSB0cm91dmUgZGFucyBsYSB6b25lIHBvdXIgbGFxdWVsbGUKK2Ruc21hc3EgZmFpdCBhdXRvcml0w6ksIGxlIHBsdXMgc291dmVudCDDoCBsYSByYWNpbmUuIERhbnMgY2UgY2FzIG5vdXMgYXZvbnMgOgorCisubmYKKy5CIGF1dGgtc2VydmVyPW5vdHJlLnpvbmUuY29tLGV0aDAKKy5CIGF1dGgtem9uZT1ub3RyZS56b25lLmNvbSwxLjIuMy4wLzI0CisuZmkKKworLm5mCitub3RyZS56b25lLmNvbSAgICAgICAgICAgICBBICAgIDEuMi4zLjQKK25vdHJlLnpvbmUuY29tICAgICAgICAgICAgTlMgICAgb3VyLnpvbmUuY29tCisuZmkKKworTCdlbnJlZ2lzdHJlbWVudCBBIHBvdXIgbm90cmUuem9uZS5jb20gZXN0IGRvcsOpbmF2YW50IHVuIGVucmVnaXN0cmVtZW50ICJjb2xsZSIKK3F1aSByw6lzb3VkIGxlIHByb2Jsw6htZSBkZSBwb3VsZSBldCBkJ29ldWYgY29uc2lzdGFudCDDoCB0cm91dmVyIGwnYWRyZXNzZSBJUAorZHUgc2VydmV1ciBkZSBub20gcG91ciBub3RyZS56b25lLmNvbSBsb3JzcXVlIGwnZW5yZWdpc3RyZW1lbnQgc2UgdHJvdXZlIGRhbnMKK2xhIHpvbmUgZW4gcXVlc3Rpb24uIElsIHMnYWdpdCBkdSBzZXVsIHLDtGxlIGRlIGNldCBlbnJlZ2lzdHJlbWVudCA6IGNvbW1lIGRuc21hc3EKK2ZhaXQgZMOpc29ybWFpcyBhdXRvcml0w6kgcG91ciBub3RyZS56b25lLmNvbSwgaWwgZG9pdCDDqWdhbGVtZW50IGZvdXJuaXIgY2V0CitlbnJlZ2lzdHJlbWVudC4gU2kgbCdhZHJlc3NlIGV4dGVybmUgZXN0IHN0YXRpcXVlLCBjZWxhIHBldXQtw6p0cmUgcsOpYWxpc8OpIHBhcgorbGUgYmlhaXMgZCd1bmUgZW50csOpZSBkYW5zCisuQiAvZXRjL2hvc3RzIAorb3UgdmlhIHVuCisuQiAtLWhvc3QtcmVjb3JkLgorCisubmYKKy5CIGF1dGgtc2VydmVyPW5vdHJlLnpvbmUuY29tLGV0aDAKKy5CIGhvc3QtcmVjb3JkPW5vdHJlLnpvbmUuY29tLDEuMi4zLjQKKy5CIGF1dGgtem9uZT1ub3RyZS56b25lLmNvbSwxLjIuMy4wLzI0CisuZmkKKworU2kgbCdhZHJlc3NlIGV4dGVybmUgZXN0IGR5bmFtaXF1ZSwgbCdhZHJlc3NlIGFzc29jacOpZSDDoCBub3RyZS56b25lLmNvbSBkb2l0CivDqnRyZSBkw6lyaXbDqWUgZGUgbCdpbnRlcmZhY2UgY29ycmVzcG9uZGFudGUuIENlbGEgcGV1dCDDqnRyZSBmYWl0IGVuIHV0aWxpc2FudAorLkIgaW50ZXJmYWNlLW5hbWUKK1NvdXMgbGEgZm9ybWUgOgorCisubmYKKy5CIGF1dGgtc2VydmVyPW5vdHJlLnpvbmUuY29tLGV0aDAKKy5CIGludGVyZmFjZS1uYW1lPW5vdHJlLnpvbmUuY29tLGV0aDAKKy5CIGF1dGgtem9uZT1ub3RyZS56b25lLmNvbSwxLjIuMy4wLzI0CisuZmkKKworTGEgY29uZmlndXJhdGlvbiBmaW5hbGUgcmFqb3V0ZSDDoCBjZXR0ZSBiYXNlIHVuIHNlcnZldXIgRE5TIHNlY29uZGFpcmUuIElsCitzJ2FnaXQgZCd1biBhdXRyZSBzZXJ2ZXVyIEROUyBxdWkgYXBwcmVuZCBsZXMgZG9ubsOpZXMgRE5TIGRlIGxhIHpvbmUgZW4KK2VmZmVjdHVhbnQgdW4gdHJhbnNmZXJ0IGRlIHpvbmUsIGV0IHF1aSBqb3VlIGxlIHLDtGxlIGRlIHNlcnZldXIgZGUgc2Vjb3VycworYXUgY2FzIG/DuSBsZSBzZXJ2ZXVyIHByaW5jaXBhbCBkZXZlbmFpdCBpbmFjY2Vzc2libGUuIExhIGNvbmZpZ3VyYXRpb24KK2RlIGNlIHNlcnZldXIgc2Vjb25kYWlyZSBzb3J0IGR1IGNhZHJlIGRlIGNldHRlIHBhZ2UgZGUgbWFudWVsLiBMZXMgw6lsw6ltZW50cworZGUgY29uZmlndXJhdGlvbiDDoCByYWpvdXRlciBkYW5zIGRuc21hc3Egc29udCBsZXMgc2ltcGxlcyA6CisKKy5uZgorLkIgYXV0aC1zZWMtc2VydmVycz1zZWNvbmRhaXJlLm1vbmZhaS5jb20KKy5maQorCitldAorCisubmYKK25vdHJlLnpvbmUuY29tICAgICAgICAgICBOUyAgICBzZWNvbmRhaXJlLm1vbmZhaS5jb20KKy5maQorCitMJ2FkZGl0aW9uIGQndW5lIG9wdGlvbiBhdXRoLXNlYy1zZXJ2ZXJzIGFjdGl2ZSBsZXMgdHJhbnNmZXJ0cyBkZSB6b25lIGRhbnMKK2Ruc21hc3EsIGNlIHF1aSBwZXJtZXQgYXUgc2VydmV1ciBzZWNvbmRhaXJlIGRlIHZlbmlyIGNvbGxlY3RlciBsZXMgZG9ubsOpZXMKK0ROUy4gU2kgdm91cyBzb3VoYWl0ZXogcmVzdHJlaW5kcmUgbCdhY2PDqHMgw6AgY2VzIGRvbm7DqWVzIMOgIGRlcyBow7R0ZXMKK3Nww6ljaWZpcXVlcywgdm91cyBwb3V2ZXogbGUgZmFpcmUgdmlhIDoKKworLm5mCisuQiBhdXRoLXBlZXI9PGFkcmVzc2UgSVAgZHUgc2VydmV1ciBzZWNvbmRhaXJlPgorLmZpCisKK0Ruc21hc3Egam91ZSBsZSByw7RsZSBkZSBzZXJ2ZXVyIGZhaXNhbnQgYXV0b3JpdMOpIHBvdXIgbGVzIGRvbWFpbmVzIGluLWFkZHIuYXJwYQorZXQgaXA2LmFycGEgYXNzb2Npw6lzIGF1eCBzb3VzLXLDqXNlYXV4IGTDqWZpbmlzIGRhbnMgbGEgZMOpY2xhcmF0aW9uIGRlIHpvbmUKK2F1dGgtem9uZSwgY2UgcXVpIGZhaXQgcXVlIGxlcyByZXF1w6p0ZXMgRE5TIGludmVyc8OpZXMgKGRlIGwnYWRyZXNzZSB2ZXJzCitsZSBub20pIHBldXZlbnQtc2ltcGxlbWVudCDDqnRyZSBjb25maWd1csOpZXMgYXZlYyB1biBlbnJlZ2lzdHJlbWVudCBOUworYWTDqXF1YXQuIFBhciBleGVtcGxlLCBjb21tZSBub3VzIGTDqWZpbmlzc29ucyBwbHVzIGhhdXQgbGVzIGFkcmVzc2VzCisxLjIuMy4wLzI0IDoKKy5uZgorIDMuMi4xLmluLWFkZHIuYXJwYSAgTlMgICAgbm90cmUuem9uZS5jb20KKy5maQorCitWZXVpbGxleiBub3RlciBxdWUgcG91ciBsJ2luc3RhbnQsIGxlcyB6b25lcyBpbnZlcnNlcyBuZSBzb250IHBhcworZGlzcG9uaWJsZXMgZGFucyBsZXMgdHJhbnNmZXJ0cyBkZSB6b25lLCBkb25jIGlsIGVzdCBpbnV0aWxlIGRlIGNvbmZpZ3VyZXIKK2RlIHNlcnZldXIgc2Vjb25kYWlyZSBwb3VyIGxhIHLDqXNvbHV0aW9uIGludmVyc2UuCisKKy5QUAorTG9yc3F1ZSBkbnNtYXNxIGVzdCBjb25maWd1csOpIGVuIHRlbXBzIHF1ZSBzZXJ2ZXVyIGZhaXNhbnQgYXV0b3JpdMOpLAorbGVzIGRvbm7DqWVzIHN1aXZhbnRlcyBzb250IHV0aWxpc8OpZXMgcG91ciBwZXVwbGVyIGxhIHpvbmUgY29uc2lkw6lyw6llIDoKKy5QUAorLkIgLS1teC1ob3N0LCAtLXNydi1ob3N0LCAtLWRucy1yciwgLS10eHQtcmVjb3JkLCAtLW5hcHRyLXJlY29yZAorLCBwb3VyIGF1dGFudCBxdWUgbGVzIG5vbXMgZGVzIGVucmVnaXN0cmVtZW50cyBzZSB0cm91dmVudCBkYW5zIGxhIHpvbmUgZW4KK3F1ZXN0aW9uLgorLlBQCisuQiAtLWNuYW1lCitwb3VyIHBldSBxdWUgbGUgbm9tIHNvaXQgZGFucyBsZSBkb21haW5lLiBTaSBsYSBjaWJsZSBkdSBDTkFNRSBuJ2VzdAorcGFzIHBsZWluZW1lbnQgcXVhbGlmacOpZSwgYWxvcnMgZWxsZSBlc3QgcXVhbGlmacOpZSBhdmVjIGxlIG5vbSBkZSBsYQorem9uZSBwb3VyIGxhcXVlbGxlIGxlIHNlcnZldXIgZmFpdCBhdXRvcml0w6kuCisuUFAKK0xlcyBhZHJlc3NlcyBJUHY0IGV0IElQdjYgZXh0cmFpdGVzIGRlIC9ldGMvaG9zdHMgKGV0CisuQiAtLWFkZG4taG9zdHMKKykgYWluc2kgcXVlIGxlcyBvcHRpb25zCisuQiAtLWhvc3QtcmVjb3JkCitmb3Vybmlzc2FudCBkZXMgYWRyZXNzZXMgc2l0dcOpZXMgZGFucyBsJ3VuIGRlcyBzb3VzLXLDqXNlYXV4IHNww6ljaWZpw6lzIGRhbnMgCisuQiAtLWF1dGgtem9uZS4KKy5QUAorQWRyZXNzZXMgc3DDqWNpZmnDqWVzIHBhcgorLkIgLS1pbnRlcmZhY2UtbmFtZS4KK0RhbnMgY2UgY2FzLCBsJ2FkcmVzc2Ugbidlc3QgcGFzIGxpbWl0w6llIMOgIGwndW4gZGVzIHNvdXMtcsOpc2VhdXggZG9ubsOpIGRhbnMKKy5CIC0tYXV0aC16b25lLiAKKworLlBQCitMZXMgYWRyZXNzZXMgZGUgYmF1eCBESENQLCBzaSBsJ2FkcmVzc2UgZXN0IHNpdHXDqWUgZGFucyBsJ3VuIGRlcyBzb3VzLXLDqXNlYXV4IGRlCisuQiAtLWF1dGgtem9uZQorT1UgZGFucyB1bmUgcGxhZ2UgREhDUCBjb25zdHJ1aXRlLiBEYW5zIGxlIG1vZGUgcGFyIGTDqWZhdXQsIG/DuSBsZSBiYWlsCitESENQIGEgdW4gbm9tIG5vbiBxdWFsaWZpw6ksIGV0IMOpdmVudHVlbGxlbWVudCBwb3VyIHVuIG5vbSBxdWFsaWZpw6kgY29uc3RydWl0Cit2aWEKKy5CIC0tZG9tYWluCissIGFsb3JzIGxlIG5vbSBkYW5zIGxhIHpvbmUgZmFpc2FudCBhdXRvcml0w6kgZXN0IGNvbnN0cnVpdCDDoCBwYXJ0aXIgZHUgbm9tCitub24gcXVhbGlmacOpIGV0IGR1IG5vbSBkZSBkb21haW5lIGRlIGxhIHpvbmUuIENlbGEgcGV1dCBvbiBub24gw6p0cmUgw6lnYWwKK2NlbHVpIGZvdXJuaSBwYXIKKy5CIC0tZG9tYWluLgorU2kgbCdvcHRpb24KKy5CIC0tZGhjcC1mcWRuCitlc3QgZm91cm5pZSwgYWxvcnMgbGVzIG5vbXMgcGxlaW5lbWVuZXQgcXVhbGlmacOpcyBhc3NvY2nDqXMgYXV4IGJhdXggREhDUAorc29udCB1dGlsaXPDqXMsIGTDqHMgbG9ycyBxdSdpbHMgY29ycmVzcG9uZGVudCBhdSBub20gZGUgZG9tYWluZSBhc3NvY2nDqQorw6AgbGEgem9uZS4KKworCisuU0ggQ09ERVMgREUgU09SVElFCisuUFAKKzAgLSBEbnNtYXNxIHMnZXN0IGNvcnJlY3RlbWVudCBsYW5jw6kgZW4gdMOiY2hlIGRlIGZvbmQsIG91IGFsb3JzIHMnZXN0Citjb3JyZWN0ZW1lbnQgdGVybWluw6kgc2kgbGUgbGFuY2VtZW50IGVuIHTDomNoZSBkZSBmb25kIG4nYSBwYXMgw6l0w6kgYWN0aXbDqS4KKy5QUAorMSAtIFVuIHByb2Jsw6htZSBkZSBjb25maWd1cmF0aW9uIGEgw6l0w6kgZMOpdGVjdMOpLgorLlBQCisyIC0gVW4gcHJvYmzDqG1lIGVzdCBzdXJ2ZW51IGF2ZWMgdW4gYWNjw6hzIHLDqXNlYXUgKGFkcmVzc2UgZMOpasOgIHV0aWxpc8OpZSwKK3RlbnRhdGl2ZSBkJ3V0aWxpc2VyIHVuIHBvcnQgcHJpdmlsw6lnacOpIHNhbnMgbGVzIHBlcm1pc3Npb25zIG7DqWNlc3NhaXJlcykuCisuUFAKKzMgLSBVbiBwcm9ibMOobWUgZXN0IHN1cnZlbnUgYXZlYyB1bmUgb3DDqXJhdGlvbiBzdXIgdW4gc3lzdMOobWUgZGUgZmljaGllcgorKGZpY2hpZXIgb3UgcsOpcGVydG9pcmUgbWFucXVhbnQsIHBlcm1pc3Npb25zKS4KKy5QUAorNCAtIEltcG9zc2liaWxpdMOpIGQnYWxsb3VlciBkZSBsYSBtw6ltb2lyZS4KKy5QUAorNSAtIEF1dHJlIHByb2Jsw6htZS4KKy5QUAorMTEgb3UgcGx1cyAtIHVuIGNvZGUgZGUgcmV0b3VyIGRpZmbDqXJlbnQgZGUgMCBhIMOpdMOpIHJlw6d1IGxvcnMgZGUgbCdhcHBlbCBhdQorcHJvY2Vzc3VzICJpbml0IiBkdSBzY3JpcHQgZGVzIGJhaWxzLiBMZSBjb2RlIGRlIHJldG91ciBkZSBEbnNtYXNxIGNvcnJlc3BvbmQKK2F1IGNvZGUgZGUgcmV0b3VyIGR1IHNjcmlwdCBwbHVzIDEwLgorCisuU0ggTElNSVRFUworTGVzIHZhbGV1cnMgcGFyIGTDqWZhdXQgcG91ciBsZXMgbGltaXRlcyBkZSByZXNzb3VyY2VzIGRlIERuc21hc3Egc29udCBlbiBnw6luw6lyYWwKK2NvbnNlcnZhdHJpY2VzIGV0IGFwcHJvcHJpw6llcyBwb3VyIGRlcyB1dGlsaXNhdGlvbnMgZW1iYXJxdcOpZXMgc3VyIGRlcyBtYWNoaW5lcworZGUgdHlwZSByb3V0ZXVyIGF5YW50IGRlcyBwcm9jZXNzZXVycyBsZW50cyBldCB1bmUgbcOpbW9pcmUgbGltaXTDqWUuIFN1ciBkdQorbWF0w6lyaWVsIHBsdXMgcGVyZm9ybWFudCwgaWwgZXN0IHBvc3NpYmxlIGQnYXVnbWVudGVyIGxlcyBsaW1pdGVzIGV0IGRlIGfDqXJlcgorcGx1cyBkZSBjbGllbnRzLiBMZXMgcmVtYXJxdWVzIHN1aXZhbnRlcyBzJ2FwcGxpcXVlbnQgw6AgRG5zbWFzcSB2ZXJzaW9uIDIuMzcgZXQKK3VsdMOpcmlldXIgOiBsZXMgdmVyc2lvbnMgcHLDqWPDqWRlbnRlcyBuZSBtb250YWllbnQgcGFzIGVuIGNoYXJnZSBhdXNzaSBiaWVuLgorIAorLlBQCitEbnNtYXNxIGVzdCBjYXBhYmxlIGRlIGfDqXJlciBsZSBETlMgZXQgREhDUCBwb3VyIGF1IG1vaW5zIHVuIG1pbGxpZXIgZGUgY2xpZW50cy4KK1BvdXIgY2VsYSwgbGEgZHVyw6llIGRlcyBiYWlsIG5lIGRvaXQgcGFzIMOqdHJlIHRyw6hzIGNvdXJ0ZSAobW9pbnMgZCd1bmUgaGV1cmUpLgorTGEgdmFsZXVyIGRlCisuQiAtLWRucy1mb3J3YXJkLW1heCAKK3BldXQtw6p0cmUgYXVnbWVudMOpZSA6IGNvbW1lbmNlciBwYXIgbGEgcmVuZHJlIMOpZ2FsZSBhdSBub21icmUgZGUgY2xpZW50cyBldAorbCdhdWdtZW50ZXIgc2kgbGUgRE5TIHNlbWJsZSBsZW50LiBOb3RlciBxdWUgbGEgcGVyZm9ybWFuY2UgZHUgRE5TIGTDqXBlbmRzCivDqWdhbGVtZW50IGRlIGxhIHBlcmZvcm1hbmNlIGRlcyBzZXJ2ZXVycyBhbW9udHMuIExhIHRhaWxsZSBkdSBjYWNoZSBETlMgcGV1dC0KK8OqdHJlIGF1Z21lbnTDqWUgOiBsYSBsaW1pdGUgZW4gZHVyIGVzdCBkZSAxMDAwMCBlbnRyw6llcyBldCBsYSB2YWxldXIgcGFyIGTDqWZhdXQKKygxNTApIGVzdCB0csOocyBiYXNzZS4gRW52b3llciB1biBzaWduYWwgU0lHVVNSMSDDoCBEbnNtYXNxIGxlIGZhaXQgw6ltZXR0cmUgZGVzCitpbmZvcm1hdGlvbnMgdXRpbGVzIHBvdXIgcGFyYW3DqXRyZXIgbGEgdGFpbGxlIGRlIGNhY2hlLiBWb2lyIGxhIHNlY3Rpb24KKy5CIE5PVEVTCitwb3VyIHBsdXMgZGUgZMOpdGFpbHMuCisuUFAKK0xlIHNlcnZldXIgVEZUUCBpbnTDqWdyw6kgZXN0IGNhcGFibGUgZGUgcGx1c2lldXJzIHRyYW5zZmVydHMgZGUgZmljaGllcnMKK3NpbXVsdGFuw6lzIDogTGEgbGltaXRlIGFic29sdWUgZXN0IGxpw6llIGF1IG5vbWJyZSBtYXhpbWFsIGRlIGRlc2NyaXB0ZXVycyBkZQorZmljaGllcnMgYWxsb3XDqSDDoCB1biBwcm9jZXNzdXMgZXQgw6AgbGEgY2FwYWNpdMOpIGRlIGwnYXBwZWwgc3lzdMOobWUgc2VsZWN0KCkgw6AKK2fDqXJlciB1biBncmFuZCBub21icmUgZGUgSEFORExFIGRlIGZpY2hpZXIuIFNpIGxhIGxpbWl0ZSBlc3QgZml4w6llIHRyb3AgaGF1dCBwYXIKK2xlIGJpYWlzIGRlCisuQiAtLXRmdHAtbWF4CitlbGxlIHNlcmEgcsOpZHVpdGUgZXQgbGEgbGltaXRlIGFjdHVlbGxlIHNlcmEgZW5yZWdpc3Ryw6llIGF1IGTDqW1hcnJhZ2UuIElsIGZhdXQKK25vdGVyIHF1ZSBwbHVzIGRlIHRyYW5zZmVydHMgc29udCBwb3NzaWJsZSBsb3JzcXVlIGxlIG3Dqm1lIGZpY2hpZXIgZXN0IHRyYW5zbWlzCithdSBsaWV1IGQnYXZvaXIgdW4gZmljaGllciBkaWZmw6lyZW50IHBvdXIgY2hhcXVlIHRyYW5zZmVydC4KKworLlBQCitJbCBlc3QgcG9zc2libGUgZCd1dGlsaXNlciBEbnNtYXNxIHBvdXIgYmxvcXVlciBsYSBwdWJsaWNpdMOpIHN1ciBsYSB0b2lsZQorZW4gYXNzb2NpYW50IGRlcyBzZXJ2ZXVycyBkZSBwdWJsaWNpdMOpIGJpZW4gY29ubnVzIMOgIGwnYWRyZXNzZSAxMjcuMC4wLjEgb3UKKzAuMC4wLjAgcGFyIGxlIGJpYWlzIGR1IGZpY2hpZXIKKy5CIC9ldGMvaG9zdHMgCitvdSBkJ3VuIGZpY2hpZXIgZCdow7R0ZSBhZGRpdGlvbm5lbC4gQ2V0dGUgbGlzdGUgcGV1dC3DqnRyZSB0csOocyBsb25ndWUsIERuc21hc3EKK2F5YW50IMOpdMOpIHRlc3TDqSBhdmVjIHN1Y2PDqHMgYXZlYyB1biBtaWxsaW9uIGRlIG5vbXMuIENldHRlIHRhaWxsZSBkZSBmaWNoaWVyCituw6ljZXNzaXRlIHVuIHByb2Nlc3NldXIgw6AgMSBHaHogZXQgZW52aXJvbiA2MCBNbyBkZSBSQU0uCisKKy5TSCBJTlRFUk5BVElPTkFMSVNBVElPTgorRG5zbWFzcSBwZXV0IMOqdHJlIGNvbXBpbMOpIHBvdXIgc3VwcG9ydGVyIGwnaW50ZXJuYXRpb25hbGlzYXRpb24uIFBvdXIgY2VsYSwKK2xlcyBjaWJsZXMgImFsbC1pMThuIiBldCAiaW5zdGFsbC1pMThuIiBkb2l2ZW50IMOqdHJlIGRvbm7DqWVzIMOgIG1ha2UsIGVuIGxpZXUKK2V0IHBsYWNlIGRlcyBjaWJsZXMgc3RhbmRhcmRzICJhbGwiIGV0ICJpbnN0YWxsIi4gTG9yc3F1ZSBjb21waWzDqSBhdmVjIGxlCitzdXBwb3J0IGRlIGwnaW50ZXJuYXRpb25hbGlzYXRpb24sIGRuc21hc3Egc3VwcG9ydGUgbGVzIG5vbXMgZGUgZG9tYWluZXMKK2ludGVybmF0aW9uYWxpc8OpcyAoImludGVybmF0aW9uYWxpc2VkIGRvbWFpbiBuYW1lcyIgb3UgSUROKSwgZXQgbGVzIG1lc3NhZ2VzIGRlCit0cmFjZXMgKCJsb2dzIikgc29udCDDqWNyaXRzIGRhbnMgbGEgbGFuZ3VlIGxvY2FsZS4gTGVzIG5vbXMgZGUgZG9tYWluZXMgZGFucworL2V0Yy9ob3N0cywgL2V0Yy9ldGhlcnMgZXQgL2V0Yy9kbnNtYXNxLmNvbmYgY29udGVuYW50IGRlcyBjYXJhY3TDqHJlcworbm9uLUFTQ0lJIHNlcm9udCB0cmFuc2Zvcm3DqXMgc2Vsb24gbGEgcmVwcsOpc2VudGF0aW9uIHB1bnljb2RlIGludGVybmUKK2F1eCBETlMuIFZldWlsbGV6IG5vdGVyIHF1ZSBkbnNtYXNxIGTDqXRlcm1pbmUgbGEgbGFuZ3VlIHBvdXIgbGVzIG1lc3NhZ2VzCithaW5zaSBxdWUgbGUgamV1IGRlIGNhcmFjdMOocmVzIHN1c2NlcHRpYmxlIGQnw6p0cmUgdXRpbGlzw6kgZGFucyBsZXMgZmljaGllcnMKK2RlIGNvbmZpZ3VyYXRpb24gw6AgcGFydGlyIGRlIGxhIHZhcmlhYmxlIGQnZW52aXJvbm5lbWVudCBMQU5HLiBDZWNpIGRldnJhaXQKK8OqdHJlIGNvbmZpZ3Vyw6kgw6AgbGEgdmFsZXVyIHBhciBkw6lmYXV0IGR1IHN5c3TDqG1lIHBhciBsZXMgc2NyaXB0cyBkw6ltYXJyYW50CitkbnNtYXNxLiBMb3JzcXVlIGxlcyBmaWNoaWVycyBkZSBjb25maWd1cmF0aW9uIHNvbnQgw6lkaXTDqXMsIHZldWlsbGV6IGZhaXJlCithdHRlbnRpb24gw6AgbGUgZmFpcmUgZW4gdXRpbGlzYW50IGxhIHZhbGV1ciBkZSBsb2NhbGUgcGFyIGTDqWZhdXQgZHUgc3lzdMOobWUKK2V0IG5vbiB1bmUgdmFsZXVyIHNww6ljaWZpcXVlIMOgIGwndXRpbGlzYXRldXIsIHB1aXNxdWUgZG5zbWFzcSBuJ2EgYXVjdW4KK21veWVuIGRlIGTDqXRlcm1pbmVyIGRpcmVjdGVtZW50IGxhIHZhbGV1ciBkZSBqZXUgZGUgY2FyYWN0w6hyZSB1dGlsaXPDqSwKK2V0IGFzc3VtZSBkZSBjZSBmYWl0IHF1J2lsIHMnYWdpdCBkZSBsYSB2YWxldXIgcGFyIGTDqWZhdXQgZHUgc3lzdMOobWUuCisKKy5TSCBGSUNISUVSUworLklSIC9ldGMvZG5zbWFzcS5jb25mIAorCisuSVIgL3Vzci9sb2NhbC9ldGMvZG5zbWFzcS5jb25mCisuSVIgL3Zhci9ydW4vZG5zbWFzcS9yZXNvbHYuY29uZgorLklSIC9ldGMvcHBwL3Jlc29sdi5jb25mCisuSVIgL2V0Yy9kaGNwYy9yZXNvbHYuY29uZgorCisuSVIgL2V0Yy9yZXNvbHYuY29uZgorCisuSVIgL2V0Yy9ob3N0cworCisuSVIgL2V0Yy9ldGhlcnMKKworLklSIC92YXIvbGliL21pc2MvZG5zbWFzcS5sZWFzZXMgCisKKy5JUiAvdmFyL2RiL2Ruc21hc3EubGVhc2VzCisKKy5JUiAvdmFyL3J1bi9kbnNtYXNxLnBpZAorLlNIIFZPSVIgQVVTU0kKKy5CUiBob3N0cyAoNSksIAorLkJSIHJlc29sdmVyICg1KQorLlNIIEFVVEVVUgorQ2V0dGUgcGFnZSBkZSBtYW51ZWwgYSDDqXTDqSDDqWNyaXRlIHBhciBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPi4KKworTGEgdHJhZHVjdGlvbiBkYW5zIHVuIGZyYW7Dp2FpcyBiYW5jYWwgYSDDqXTDqSBjb21taXNlIHBhciBHaWxkYXMgTGUgTmFkYW4KKzwzbnRyMHAxM0BnbWFpbC5jb20+IDogVG91dGUgcsOpdmlzaW9uL2NvcnJlY3Rpb24gcGVybWV0dGFudCBkZSBjb3JyaWdlcgorb3J0aG9ncmFwaGUgb3UgZ3JhbW1haXJlIG1haXMgc3VydG91dCBsZXMgw6l2ZW50dWVsbGVzIGZhdXRlcyBkZSBzZW5zIHNlcmEgbGEKK2JpZW52ZW51ZSEKZGlmZiAtLWdpdCBhL3BvL2RlLnBvIGIvcG8vZGUucG8KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDk5YzRkMgotLS0gL2Rldi9udWxsCisrKyBiL3BvL2RlLnBvCkBAIC0wLDAgKzEsMjI5NyBAQAorIyBHZXJtYW4gdHJhbnNsYXRpb25zIGZvciBkbnNtYXNxIHBhY2thZ2UuCisjCisjIFRoaXMgcmV2aXNlZCB2ZXJzaW9uIGlzIChDKSBDb3B5cmlnaHQgYnkKKyMgTWF0dGhpYXMgQW5kcmVlIDxtYXR0aGlhcy5hbmRyZWVAZ214LmRlPiwgMjAxMC4KKyMgSXQgaXMgc3ViamVjdCB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdjIsCisjIG9yIGF0IHlvdXIgb3B0aW9uLCBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgQW4gb2xkZXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgd2FzIG9yaWdpbmFsbHkgcHV0IGluIHRoZSBwdWJsaWMgZG9tYWluIGJ5CisjIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+LCAyMDA1LgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZG5zbWFzcSAyLjc3XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDA5LTA2LTE4IDEyOjI0KzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDE3LTA3LTE3IDE4OjMwKzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IENvbnJhZCBLb3N0ZWNraSA8Y2tAY29ucmFkLWtvc3RlY2tpLmRlPlxuIgorIkxhbmd1YWdlLVRlYW06IEdlcm1hbiA8ZGVAbGkub3JnPlxuIgorIkxhbmd1YWdlOiBkZVxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpO1xuIgorIlgtR2VuZXJhdG9yOiBQb2VkaXQgMi4wLjFcbiIKKyJYLVBvZWRpdC1Tb3VyY2VDaGFyc2V0OiBVVEYtOFxuIgorCisjOiBjYWNoZS5jOjUxMworbXNnaWQgIkludGVybmFsIGVycm9yIGluIGNhY2hlLiIKK21zZ3N0ciAiSW50ZXJuZXIgRmVobGVyIGltIENhY2hlLiIKKworIzogY2FjaGUuYzo5MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxvYWQgbmFtZXMgZnJvbSAlczogJXMiCittc2dzdHIgIkZlaGxlciBiZWltIExhZGVuIGRlciBOYW1lbiB2b24gJXM6ICVzIgorCisjOiBjYWNoZS5jOjk0OSBkaGNwLmM6ODY3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBhZGRyZXNzIGF0ICVzIGxpbmUgJWQiCittc2dzdHIgIkZlaGxlcmhhZnRlIEFkcmVzc2UgaW4gJXMgWmVpbGUgJWQiCisKKyM6IGNhY2hlLmM6MTAwMiBkaGNwLmM6ODgzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBuYW1lIGF0ICVzIGxpbmUgJWQiCittc2dzdHIgIkZlaGxlcmhhZnRlciBOYW1lIGluICVzIFplaWxlICVkIgorCisjOiBjYWNoZS5jOjEwMTEgZGhjcC5jOjk1OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkICVzIC0gJWQgYWRkcmVzc2VzIgorbXNnc3RyICIlcyBnZWxlc2VuIC0gJWQgQWRyZXNzZW4iCisKKyM6IGNhY2hlLmM6MTEyNAorbXNnaWQgImNsZWFyZWQgY2FjaGUiCittc2dzdHIgIkNhY2hlIGdlbGVlcnQiCisKKyM6IGNhY2hlLmM6MTE1MworIywgYy1mb3JtYXQKK21zZ2lkICJObyBJUHY0IGFkZHJlc3MgZm91bmQgZm9yICVzIgorbXNnc3RyICJLZWluZSBJUHY0LUFkcmVzc2UgZsO8ciAlcyBnZWZ1bmRlbiIKKworIzogY2FjaGUuYzoxMjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGEgQ05BTUUsIG5vdCBnaXZpbmcgaXQgdG8gdGhlIERIQ1AgbGVhc2Ugb2YgJXMiCittc2dzdHIgIiVzIGlzdCBlaW4gQ05BTUUsIHdlaXNlIGVzIGRlciBESENQLUxlYXNlIHZvbiAlcyBuaWNodCB6dSIKKworIzogY2FjaGUuYzoxMjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBnaXZpbmcgbmFtZSAlcyB0byB0aGUgREhDUCBsZWFzZSBvZiAlcyBiZWNhdXNlIHRoZSBuYW1lIGV4aXN0cyBpbiAlcyB3aXRoIGFkZHJlc3MgJXMiCittc2dzdHIgIk5hbWUgJXMgd3VyZGUgZGVtIERIQ1AtTGVhc2Ugdm9uICVzIG5pY2h0IHp1Z2V3aWVzZW4sIGRhIGRlciBOYW1lIGluICVzIGJlcmVpdHMgbWl0IEFkcmVzc2UgJXMgZXhpc3RpZXJ0IgorCisjOiBjYWNoZS5jOjE0MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidGltZSAlbHUiCittc2dzdHIgIlplaXQgJWx1IgorCisjOiBjYWNoZS5jOjE0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FjaGUgc2l6ZSAlZCwgJWQvJWQgY2FjaGUgaW5zZXJ0aW9ucyByZS11c2VkIHVuZXhwaXJlZCBjYWNoZSBlbnRyaWVzLiIKK21zZ3N0ciAiQ2FjaGUgR3LDtsOfZSAlZCwgJWQvJWQgQ2FjaGUtRWluZsO8Z3VuZ2VuIHZlcndlbmRldGVuIG5pY2h0IGFiZ2VsYXVmZW5lIENhY2hlLUVpbnRyw6RnZSB3aWVkZXIuIgorCisjOiBjYWNoZS5jOjE0MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicXVlcmllcyBmb3J3YXJkZWQgJXUsIHF1ZXJpZXMgYW5zd2VyZWQgbG9jYWxseSAldSIKK21zZ3N0ciAiJXUgd2VpdGVyZ2VsZWl0ZXRlIEFuZnJhZ2VuLCAldSBsb2thbCBiZWFudHdvcnRldGUgQW5mcmFnZW4iCisKKyM6IGNhY2hlLmM6MTQxOQorIywgYy1mb3JtYXQKK21zZ2lkICJxdWVyaWVzIGZvciBhdXRob3JpdGF0aXZlIHpvbmVzICV1IgorbXNnc3RyICJBbmZyYWdlbiBuYWNoIGF1dG9yaXRhdGl2ZW4gWm9uZW4gJXUiCisKKyM6IGNhY2hlLmM6MTQ0NQorIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2ZXIgJXMjJWQ6IHF1ZXJpZXMgc2VudCAldSwgcmV0cmllZCBvciBmYWlsZWQgJXUiCittc2dzdHIgIlNlcnZlciAlcyMlZDogJXUgQW5mcmFnZW4gZ2VzZW5kZXQsICV1IGVybmV1dCB2ZXJzdWNodCBvZGVyIGZlaGxnZXNjaGxhZ2VuIgorCisjOiB1dGlsLmM6NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNlZWQgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yOiAlcyIKK21zZ3N0ciAiS29ubnRlIGRlbiBadWZhbGxzemFobGVuZ2VuZXJhdG9yIG5pY2h0IGluaXRpYWxpc2llcmVuOiAlcyIKKworIzogdXRpbC5jOjIyNAorbXNnaWQgImZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkiCittc2dzdHIgIktvbm50ZSBTcGVpY2hlciBuaWNodCBiZWxlZ2VuIgorCisjOiB1dGlsLmM6Mjc3IG9wdGlvbi5jOjYxOQorbXNnaWQgImNvdWxkIG5vdCBnZXQgbWVtb3J5IgorbXNnc3RyICJTcGVpY2hlciBuaWNodCB2ZXJmw7xnYmFyIgorCisjOiB1dGlsLmM6Mjg3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgcGlwZTogJXMiCittc2dzdHIgIktvbm50ZSBQaXBlIG5pY2h0IGVyemV1Z2VuOiAlcyIKKworIzogdXRpbC5jOjI5NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYWxsb2NhdGUgJWQgYnl0ZXMiCittc2dzdHIgIktvbm50ZSAlZCBCeXRlcyBuaWNodCBiZWxlZ2VuIgorCisjIEBTaW1vbjogbm90IHBlcmZlY3QgYnV0IEkgY2Fubm90IGdldCBuZWFyZXIgcmlnaHQgbm93LgorIzogdXRpbC5jOjQ2NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbmZpbml0ZSIKK21zZ3N0ciAidW5lbmRsaWNoIgorCisjOiBvcHRpb24uYzozNDQKK21zZ2lkICJTcGVjaWZ5IGxvY2FsIGFkZHJlc3MoZXMpIHRvIGxpc3RlbiBvbi4iCittc2dzdHIgIkxva2FsZSBhYnp1aMO2cmVuZGUgQWRyZXNzZShuKSBhbmdlYmVuLiIKKworIzogb3B0aW9uLmM6MzQ1Cittc2dpZCAiUmV0dXJuIGlwYWRkciBmb3IgYWxsIGhvc3RzIGluIHNwZWNpZmllZCBkb21haW5zLiIKK21zZ3N0ciAiSVAtQWRyZXNzZSBmw7xyIGFsbGUgSG9zdHMgaW4gYW5nZWdlYmVuZW4gRG9tw6RuZW4gZmVzdGxlZ2VuLiIKKworIyBGSVhNRTogdGhlIEVuZ2xpc2ggdGVzdCBpcyBub3QgdG8gdGhlIHBvaW50LiBKdXN0IHVzZSBhIHNob3J0ZW5lZCBkZXNjcmlwdGlvbgorIyBmcm9tIHRoZSBtYW5wYWdlIGluc3RlYWQuIC0tIE1BCisjOiBvcHRpb24uYzozNDYKK21zZ2lkICJGYWtlIHJldmVyc2UgbG9va3VwcyBmb3IgUkZDMTkxOCBwcml2YXRlIGFkZHJlc3MgcmFuZ2VzLiIKK21zZ3N0ciAiRsO8ciBwcml2YXRlIEFkcmVzc2JlcmVpY2hlIG5hY2ggUkZDMTkxOCBcImtlaW5lIHNvbGNoZSBEb21haW5cIiBsaWVmZXJuLiIKKworIzogb3B0aW9uLmM6MzQ3Cittc2dpZCAiVHJlYXQgaXBhZGRyIGFzIE5YRE9NQUlOIChkZWZlYXRzIFZlcmlzaWduIHdpbGRjYXJkKS4iCittc2dzdHIgIkRpZXNlIElQLUFkcmVzc2UgYWxzIE5YRE9NQUlOIGludGVycHJldGllcmVuICh3ZWhydCBcIlN1Y2hoaWxmZW5cIiBhYikuIgorCisjOiBvcHRpb24uYzozNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSB0aGUgc2l6ZSBvZiB0aGUgY2FjaGUgaW4gZW50cmllcyAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiR3LDtsOfZSBkZXMgQ2FjaGVzIChaYWhsIGRlciBFaW50csOkZ2UpIGZlc3RsZWdlbiAoVm9yZWluc3RlbGx1bmc6ICVzKS4iCisKKyM6IG9wdGlvbi5jOjM0OQorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IGNvbmZpZ3VyYXRpb24gZmlsZSAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiS29uZmlndXJhdGlvbnNkYXRlaSBmZXN0bGVnZW4gKFZvcmVpbnN0ZWxsdW5nOiAlcykuIgorCisjOiBvcHRpb24uYzozNTAKK21zZ2lkICJEbyBOT1QgZm9yayBpbnRvIHRoZSBiYWNrZ3JvdW5kOiBydW4gaW4gZGVidWcgbW9kZS4iCittc2dzdHIgIk5JQ0hUIGluIGRlbiBIaW50ZXJncnVuZCBnZWhlbjogQmV0cmllYiBpbSBEZWJ1Zy1Nb2R1cyIKKworIzogb3B0aW9uLmM6MzUxCittc2dpZCAiRG8gTk9UIGZvcndhcmQgcXVlcmllcyB3aXRoIG5vIGRvbWFpbiBwYXJ0LiIKK21zZ3N0ciAiQW5mcmFnZW4gb2huZSBEb23DpG5lbi1UZWlsIE5JQ0hUIHdlaXRlcnNjaGlja2VuLiIKKworIzogb3B0aW9uLmM6MzUyCittc2dpZCAiUmV0dXJuIHNlbGYtcG9pbnRpbmcgTVggcmVjb3JkcyBmb3IgbG9jYWwgaG9zdHMuIgorbXNnc3RyICJGw7xyIGxva2FsZSBFaW50csOkZ2UgTVgtRWludHLDpGdlIGxpZWZlcm4sIGRpZSBhdWYgc2ljaCBzZWxic3QgemVpZ2VuLiIKKworIzogb3B0aW9uLmM6MzUzCittc2dpZCAiRXhwYW5kIHNpbXBsZSBuYW1lcyBpbiAvZXRjL2hvc3RzIHdpdGggZG9tYWluLXN1ZmZpeC4iCittc2dzdHIgIkVyd2VpdGVyZSBlaW5mYWNoZSBOYW1lbiBpbiAvZXRjL2hvc3RzIG1pdCBkZXIgRG9tw6RuZW4tRW5kdW5nLiIKKworIzogb3B0aW9uLmM6MzU0Cittc2dpZCAiRG9uJ3QgZm9yd2FyZCBzcHVyaW91cyBETlMgcmVxdWVzdHMgZnJvbSBXaW5kb3dzIGhvc3RzLiIKK21zZ3N0ciAiJ3VuZWNodGUnIEROUy1BbmZyYWdlbiB2b24gV2luZG93cy1SZWNobmVybiBuaWNodCB3ZWl0ZXJsZWl0ZW4iCisKKyMgQFNpbW9uOiBJJ20gYSBiaXQgdW5zdXJlIGFib3V0ICJzcHVyaW91cyIKKyM6IG9wdGlvbi5jOjM1NQorbXNnaWQgIkVuYWJsZSBESENQIGluIHRoZSByYW5nZSBnaXZlbiB3aXRoIGxlYXNlIGR1cmF0aW9uLiIKK21zZ3N0ciAiREhDUCBmw7xyIGFuZ2VnZWJlbmVuIEJlcmVpY2ggdW5kIERhdWVyIGVpbnNjaGFsdGVuIgorCisjOiBvcHRpb24uYzozNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hhbmdlIHRvIHRoaXMgZ3JvdXAgYWZ0ZXIgc3RhcnR1cCAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiTmFjaCBkZW0gU3RhcnQgaW4gZGllc2UgQmVudXR6ZXJncnVwcGUgd2VjaHNlbG4gKFZvcmVpbnN0ZWxsdW5nICVzKS4iCisKKyM6IG9wdGlvbi5jOjM1NworbXNnaWQgIlNldCBhZGRyZXNzIG9yIGhvc3RuYW1lIGZvciBhIHNwZWNpZmllZCBtYWNoaW5lLiIKK21zZ3N0ciAiQWRyZXNzZSBvZGVyIEhvc3RuYW1lbiBmw7xyIGVpbmVuIGFuZ2VnZWJlbmVuIENvbXB1dGVyIHNldHplbi4iCisKKyM6IG9wdGlvbi5jOjM1OAorbXNnaWQgIlJlYWQgREhDUCBob3N0IHNwZWNzIGZyb20gZmlsZS4iCittc2dzdHIgIkRIQ1AtSG9zdC1BbmdhYmVuIGF1cyBEYXRlaSBsZXNlbi4iCisKKyM6IG9wdGlvbi5jOjM1OQorbXNnaWQgIlJlYWQgREhDUCBvcHRpb24gc3BlY3MgZnJvbSBmaWxlLiIKK21zZ3N0ciAiREhDUC1PcHRpb25lbiBhdXMgRGF0ZWkgbGVzZW4uIgorCisjOiBvcHRpb24uYzozNjAKK21zZ2lkICJSZWFkIERIQ1AgaG9zdCBzcGVjcyBmcm9tIGEgZGlyZWN0b3J5LiIKK21zZ3N0ciAiREhDUC1Ib3N0LUFuZ2FiZW4gYXVzIGVpbmVtIFZlcnplaWNobmlzIGxlc2VuLiIKKworIzogb3B0aW9uLmM6MzYxCittc2dpZCAiUmVhZCBESENQIG9wdGlvbnMgZnJvbSBhIGRpcmVjdG9yeS4iCittc2dzdHIgIkRIQ1AtT3B0aW9uZW4gYXVzIGVpbmVtIFZlcnplaWNobmlzIGxlc2VuLiIKKworIzogb3B0aW9uLmM6MzYyCittc2dpZCAiRXZhbHVhdGUgY29uZGl0aW9uYWwgdGFnIGV4cHJlc3Npb24uIgorbXNnc3RyICJBdXN3ZXJ0dW5nIGVpbmVzIEF1c2RydWNrcyBiZWRpbmd0ZXIgTWFya2VuLiIKKworIzogb3B0aW9uLmM6MzYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkRvIE5PVCBsb2FkICVzIGZpbGUuIgorbXNnc3RyICIlcy1EYXRlaSBOSUNIVCBsYWRlbi4iCisKKyM6IG9wdGlvbi5jOjM2NAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IGEgaG9zdHMgZmlsZSB0byBiZSByZWFkIGluIGFkZGl0aW9uIHRvICVzLiIKK21zZ3N0ciAiSG9zdHMtRGF0ZWkgZmVzdGxlZ2VuLCBkaWUgenVzw6R0emxpY2ggenUgJXMgZ2VsZXNlbiB3aXJkLiIKKworIzogb3B0aW9uLmM6MzY1Cittc2dpZCAiUmVhZCBob3N0cyBmaWxlcyBmcm9tIGEgZGlyZWN0b3J5LiIKK21zZ3N0ciAiREhDUC1Ib3N0LURhdGVpZW4gYXVzIGVpbmVtIFZlcnplaWNobmlzIGxlc2VuLiIKKworIzogb3B0aW9uLmM6MzY2Cittc2dpZCAiU3BlY2lmeSBpbnRlcmZhY2UocykgdG8gbGlzdGVuIG9uLiIKK21zZ3N0ciAiU2Nobml0dHN0ZWxsZShuKSB6dW0gRW1wZmFuZyBmZXN0bGVnZW4uIgorCisjOiBvcHRpb24uYzozNjcKK21zZ2lkICJTcGVjaWZ5IGludGVyZmFjZShzKSBOT1QgdG8gbGlzdGVuIG9uLiIKK21zZ3N0ciAiU2Nobml0dHN0ZWxsZShuKSBmZXN0bGVnZW4sIGRpZSBOSUNIVCBlbXBmYW5nZW4gc29sbGVuLiIKKworIzogb3B0aW9uLmM6MzY4Cittc2dpZCAiTWFwIERIQ1AgdXNlciBjbGFzcyB0byB0YWcuIgorbXNnc3RyICJESENQLUJlbnV0emVya2xhc3NlIGF1ZiBNYXJrZSBhYmJpbGRlbi4iCisKKyM6IG9wdGlvbi5jOjM2OQorbXNnaWQgIk1hcCBSRkMzMDQ2IGNpcmN1aXQtaWQgdG8gdGFnLiIKK21zZ3N0ciAiUkZDMzA0NiBcImNpcmN1aXQtaWRcIiBhdWYgTWFya2UgYWJiaWxkZW4uIgorCisjOiBvcHRpb24uYzozNzAKK21zZ2lkICJNYXAgUkZDMzA0NiByZW1vdGUtaWQgdG8gdGFnLiIKK21zZ3N0ciAiUkZDMzA0NiBcInJlbW90ZS1pZFwiIGF1ZiBNYXJrZSBhYmJpbGRlbi4iCisKKyM6IG9wdGlvbi5jOjM3MQorbXNnaWQgIk1hcCBSRkMzOTkzIHN1YnNjcmliZXItaWQgdG8gdGFnLiIKK21zZ3N0ciAiUkZDMzk5MyBcInN1YnNjcmliZXItaWRcIiBhdWYgTWFya2UgYWJiaWxkZW4uIgorCisjOiBvcHRpb24uYzozNzIKK21zZ2lkICJEb24ndCBkbyBESENQIGZvciBob3N0cyB3aXRoIHRhZyBzZXQuIgorbXNnc3RyICJLZWluIERIQ1AgZsO8ciBIb3N0cyBtaXQgZ2VzZXR6dGVyIE1hcmtlIHZlcndlbmRlbi4iCisKKyM6IG9wdGlvbi5jOjM3MworbXNnaWQgIkZvcmNlIGJyb2FkY2FzdCByZXBsaWVzIGZvciBob3N0cyB3aXRoIHRhZyBzZXQuIgorbXNnc3RyICJSdW5kc2VuZHVuZyBmw7xyIEhvc3RzIG1pdCBnZXNldHp0ZXIgTWFya2UgZXJ6d2luZ2VuLiIKKworIzogb3B0aW9uLmM6Mzc0Cittc2dpZCAiRG8gTk9UIGZvcmsgaW50byB0aGUgYmFja2dyb3VuZCwgZG8gTk9UIHJ1biBpbiBkZWJ1ZyBtb2RlLiIKK21zZ3N0ciAiTklDSFQgaW4gZGVuIEhpbnRlcmdydW5kIHdlY2hzZWxuLCBOSUNIVCBpbSBEZWJ1Zy1Nb2R1cyBsYXVmZW4uIgorCisjOiBvcHRpb24uYzozNzUKK21zZ2lkICJBc3N1bWUgd2UgYXJlIHRoZSBvbmx5IERIQ1Agc2VydmVyIG9uIHRoZSBsb2NhbCBuZXR3b3JrLiIKK21zZ3N0ciAiVm9yYXVzc2V0emVuLCBkYXNzIHdpciBkZXIgZWluemlnZSBESENQLVNlcnZlciBpbSBsb2thbGVuIE5ldHogc2luZC4iCisKKyM6IG9wdGlvbi5jOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHdoZXJlIHRvIHN0b3JlIERIQ1AgbGVhc2VzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJGZXN0bGVnZW4sIHdvIERIQ1AtTGVhc2VzIGdlc3BlaWNoZXJ0IHdlcmRlbiAoVm9yZWluc3RlbGx1bmcgJXMpLiIKKworIzogb3B0aW9uLmM6Mzc3Cittc2dpZCAiUmV0dXJuIE1YIHJlY29yZHMgZm9yIGxvY2FsIGhvc3RzLiIKK21zZ3N0ciAiTVgtRWludHLDpGdlIGbDvHIgbG9rYWxlIEhvc3RzIGxpZWZlcm4uIgorCisjOiBvcHRpb24uYzozNzgKK21zZ2lkICJTcGVjaWZ5IGFuIE1YIHJlY29yZC4iCittc2dzdHIgIkVpbmVuIE1YLUVpbnRyYWcgZmVzdGxlZ2VuLiIKKworIzogb3B0aW9uLmM6Mzc5Cittc2dpZCAiU3BlY2lmeSBCT09UUCBvcHRpb25zIHRvIERIQ1Agc2VydmVyLiIKK21zZ3N0ciAiQk9PVFAtT3B0aW9uZW4gZsO8ciBESENQLVNlcnZlciBmZXN0bGVnZW4uIgorCisjOiBvcHRpb24uYzozODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG8gTk9UIHBvbGwgJXMgZmlsZSwgcmVsb2FkIG9ubHkgb24gU0lHSFVQLiIKK21zZ3N0ciAiJXMtRGF0ZWkgTklDSFQgYWJmcmFnZW4sIG51ciBiZWkgU0lHSFVQIG5ldSBsYWRlbi4iCisKKyM6IG9wdGlvbi5jOjM4MQorbXNnaWQgIkRvIE5PVCBjYWNoZSBmYWlsZWQgc2VhcmNoIHJlc3VsdHMuIgorbXNnc3RyICJGZWhsZXJoYWZ0ZSBTdWNoZXJnZWJuaXNzZSBOSUNIVCB6d2lzY2hlbnNwZWljaGVybi4iCisKKyM6IG9wdGlvbi5jOjM4MgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2UgbmFtZXNlcnZlcnMgc3RyaWN0bHkgaW4gdGhlIG9yZGVyIGdpdmVuIGluICVzLiIKK21zZ3N0ciAiTmFtZW5zc2VydmVyIHN0cmVuZyBpbiBkZXIgaW4gJXMgYW5nZWdlYmVuZW4gUmVpaGVuZm9sZ2UgdmVyd2VuZGVuLiIKKworIzogb3B0aW9uLmM6MzgzCittc2dpZCAiU3BlY2lmeSBvcHRpb25zIHRvIGJlIHNlbnQgdG8gREhDUCBjbGllbnRzLiIKK21zZ3N0ciAiT3B0aW9uZW4gZmVzdGxlZ2VuLCBkaWUgYW4gREhDUC1LbGllbnRlbiBnZXNlbmRldCB3ZXJkZW4uIgorCisjOiBvcHRpb24uYzozODQKK21zZ2lkICJESENQIG9wdGlvbiBzZW50IGV2ZW4gaWYgdGhlIGNsaWVudCBkb2VzIG5vdCByZXF1ZXN0IGl0LiIKK21zZ3N0ciAiREhDUC1PcHRpb24sIGRpZSBzZWxic3Qgb2huZSBLbGllbnRlbmFuZnJhZ2UgZ2VzZW5kZXQgd2lyZC4iCisKKyM6IG9wdGlvbi5jOjM4NQorbXNnaWQgIlNwZWNpZnkgcG9ydCB0byBsaXN0ZW4gZm9yIEROUyByZXF1ZXN0cyBvbiAoZGVmYXVsdHMgdG8gNTMpLiIKK21zZ3N0ciAiUG9ydCB6dW0gQWJow7ZyZW4gZGVyIEROUy1BbmZyYWdlbiBmZXN0bGVnZW4gKDUzIHZvcmVpbmdlc3RlbGx0KS4iCisKKyM6IG9wdGlvbi5jOjM4NgorIywgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIHN1cHBvcnRlZCBVRFAgcGFja2V0IHNpemUgZm9yIEVETlMuMCAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiTWF4aW1hbGUgdW50ZXJzdMO8dHp0ZSBVRFAtUGFrZXRncsO2w59lIGbDvHIgRUROUy4wIChWb3JlaW5zdGVsbHVuZyAlcykuIgorCisjOiBvcHRpb24uYzozODcKK21zZ2lkICJMb2cgRE5TIHF1ZXJpZXMuIgorbXNnc3RyICJETlMtQW5mcmFnZW4gcHJvdG9rb2xsaWVyZW4uIgorCisjOiBvcHRpb24uYzozODgKK21zZ2lkICJGb3JjZSB0aGUgb3JpZ2luYXRpbmcgcG9ydCBmb3IgdXBzdHJlYW0gRE5TIHF1ZXJpZXMuIgorbXNnc3RyICJBdXNnZWhlbmRlbiBQb3J0IGVyendpbmdlbiBmw7xyIEROUy1BbmZyYWdlbiBhbiB2b3JnZWxhZ2VydGUgU2VydmVyLiIKKworIzogb3B0aW9uLmM6Mzg5Cittc2dpZCAiRG8gTk9UIHJlYWQgcmVzb2x2LmNvbmYuIgorbXNnc3RyICJyZXNvbHYuY29uZiBOSUNIVCBsZXNlbi4iCisKKyM6IG9wdGlvbi5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHBhdGggdG8gcmVzb2x2LmNvbmYgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIlBmYWQgenUgcmVzb2x2LmNvbmYgZmVzdGxlZ2VuICglcyB2b3JlaW5nZXN0ZWxsdCkuIgorCisjOiBvcHRpb24uYzozOTEKK21zZ2lkICJTcGVjaWZ5IHBhdGggdG8gZmlsZSB3aXRoIHNlcnZlcj0gb3B0aW9ucyIKK21zZ3N0ciAiIERhdGVpcGZhZCBtaXQgZGVyIE9wdGlvbiBzZXJ2ZXI9IGFuZ2ViZW4iCisKKyM6IG9wdGlvbi5jOjM5MgorbXNnaWQgIlNwZWNpZnkgYWRkcmVzcyhlcykgb2YgdXBzdHJlYW0gc2VydmVycyB3aXRoIG9wdGlvbmFsIGRvbWFpbnMuIgorbXNnc3RyICJBZHJlc3NlKG4pIHZvcmdlbGFnZXJ0ZXIgU2VydmVyIGZlc3RsZWdlbiwgb3B0aW9uYWwgbWl0IERvbcOkbmVuLiIKKworIzogb3B0aW9uLmM6MzkzCittc2dpZCAiU3BlY2lmeSBhZGRyZXNzIG9mIHVwc3RyZWFtIHNlcnZlcnMgZm9yIHJldmVyc2UgYWRkcmVzcyBxdWVyaWVzIgorbXNnc3RyICJBZHJlc3NlKG4pIHZvcmdlbGFnZXJ0ZXIgU2VydmVyIGZlc3RsZWdlbiwgZsO8ciByZXZlcnNlIEFkcmVzc2FuZnJhZ2VuIgorCisjOiBvcHRpb24uYzozOTQKK21zZ2lkICJOZXZlciBmb3J3YXJkIHF1ZXJpZXMgdG8gc3BlY2lmaWVkIGRvbWFpbnMuIgorbXNnc3RyICJBbmZyYWdlbiBmw7xyIGFuZ2VnZWJlbmUgRG9tw6RuZW4gbmllbWFscyB3ZWl0ZXJsZWl0ZW4uIgorCisjOiBvcHRpb24uYzozOTUKK21zZ2lkICJTcGVjaWZ5IHRoZSBkb21haW4gdG8gYmUgYXNzaWduZWQgaW4gREhDUCBsZWFzZXMuIgorbXNnc3RyICJEb23DpG5lIGZlc3RsZWdlbiwgZGllIGbDvHIgREhDUC1MZWFzZXMgenVnZXdpZXNlbiB3aXJkLiIKKworIzogb3B0aW9uLmM6Mzk2Cittc2dpZCAiU3BlY2lmeSBkZWZhdWx0IHRhcmdldCBpbiBhbiBNWCByZWNvcmQuIgorbXNnc3RyICJWb3JlaW5nZXN0ZWxsdGVzIFppZWwgZsO8ciBNWC1FaW50csOkZ2UgZmVzdGxlZ2VuLiIKKworIzogb3B0aW9uLmM6Mzk3Cittc2dpZCAiU3BlY2lmeSB0aW1lLXRvLWxpdmUgaW4gc2Vjb25kcyBmb3IgcmVwbGllcyBmcm9tIC9ldGMvaG9zdHMuIgorbXNnc3RyICJHw7xsdGlna2VpdHNkYXVlciBmw7xyIEFudHdvcnRlbiBhdXMgL2V0Yy9ob3N0cyBmZXN0bGVnZW4uIgorCisjOiBvcHRpb24uYzozOTgKK21zZ2lkICJTcGVjaWZ5IHRpbWUtdG8tbGl2ZSBpbiBzZWNvbmRzIGZvciBuZWdhdGl2ZSBjYWNoaW5nLiIKK21zZ3N0ciAiR8O8bHRpZ2tlaXRzZGF1ZXIgaW4gU2VrdW5kZW4gZsO8ciBDYWNoaW5nIG5lZ2F0aXZlciBFcmdlYm5pc3NlIGZlc3RsZWdlbi4iCisKKyM6IG9wdGlvbi5jOjM5OQorbXNnaWQgIlNwZWNpZnkgdGltZS10by1saXZlIGluIHNlY29uZHMgZm9yIG1heGltdW0gVFRMIHRvIHNlbmQgdG8gY2xpZW50cy4iCittc2dzdHIgIkfDvGx0aWdrZWl0c2RhdWVyIGluIFNla3VuZGVuIGbDvHIgQ2FjaGluZyBuZWdhdGl2ZXIgRXJnZWJuaXNzZSBmZXN0bGVnZW4uIgorCisjOiBvcHRpb24uYzo0MDAKK21zZ2lkICJTcGVjaWZ5IHRpbWUtdG8tbGl2ZSBjZWlsaW5nIGZvciBjYWNoZS4iCittc2dzdHIgIlNwZXppZml6aWVyZSB0aW1lLXRvLWxpdmUgY2VpbGluZyBmw7xyIENhY2hlLiIKKworIzogb3B0aW9uLmM6NDAxCittc2dpZCAiU3BlY2lmeSB0aW1lLXRvLWxpdmUgZmxvb3IgZm9yIGNhY2hlLiIKK21zZ3N0ciAiU3BlemlmaXppZXJlIHRpbWUtdG8tbGl2ZSBmbG9vciBmw7xyIENhY2hlLiIKKworIzogb3B0aW9uLmM6NDAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNoYW5nZSB0byB0aGlzIHVzZXIgYWZ0ZXIgc3RhcnR1cC4gKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIk5hY2ggZGVtIFN0YXJ0IGRpZXNlIEJlbnV0emVycmVjaHRlIGFubmVobWVuICglcyB2b3JlaW5nZXN0ZWxsdCkuIgorCisjOiBvcHRpb24uYzo0MDMKK21zZ2lkICJNYXAgREhDUCB2ZW5kb3IgY2xhc3MgdG8gdGFnLiIKK21zZ3N0ciAiREhDUC1cInZlbmRvciBjbGFzc1wiIGF1ZiBNYXJrZSBhYmJpbGRlbi4iCisKKyM6IG9wdGlvbi5jOjQwNAorbXNnaWQgIkRpc3BsYXkgZG5zbWFzcSB2ZXJzaW9uIGFuZCBjb3B5cmlnaHQgaW5mb3JtYXRpb24uIgorbXNnc3RyICJkbnNtYXNxLVZlcnNpb24gdW5kIFVyaGViZXJyZWNodCBhbnplaWdlbi4iCisKKyM6IG9wdGlvbi5jOjQwNQorbXNnaWQgIlRyYW5zbGF0ZSBJUHY0IGFkZHJlc3NlcyBmcm9tIHVwc3RyZWFtIHNlcnZlcnMuIgorbXNnc3RyICJJUHY0LUFkcmVzc2VuIHZvbiB2b3JnZWxhZ2VydGVuIFNlcnZlcm4gw7xiZXJzZXR6ZW4uIgorCisjOiBvcHRpb24uYzo0MDYKK21zZ2lkICJTcGVjaWZ5IGEgU1JWIHJlY29yZC4iCittc2dzdHIgIlNSVi1FaW50cmFnIGZlc3RsZWdlbi4iCisKKyM6IG9wdGlvbi5jOjQwNworbXNnaWQgIkRpc3BsYXkgdGhpcyBtZXNzYWdlLiBVc2UgLS1oZWxwIGRoY3Agb3IgLS1oZWxwIGRoY3A2IGZvciBrbm93biBESENQIG9wdGlvbnMuIgorbXNnc3RyICJEaWVzZSBIaWxmZSBhbnplaWdlbi4gQmVudXR6ZW4gU2llIC0taGVscCBkaGNwIG9kZXIgLS1oZWxwIGRoY3A2IGbDvHIgYmVrYW5udGUgREhDUC1PcHRpb25lbi4iCisKKyM6IG9wdGlvbi5jOjQwOAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHBhdGggb2YgUElEIGZpbGUgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIkRhdGVpcGZhZCBmw7xyIFByb3plc3NrZW5udW5nIChQSUQpIGZlc3RsZWdlbiAoVm9yZWluc3RlbGx1bmc6ICVzKS4iCisKKyM6IG9wdGlvbi5jOjQwOQorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IG1heGltdW0gbnVtYmVyIG9mIERIQ1AgbGVhc2VzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJIw7ZjaHN0emFobCBkZXIgREhDUC1MZWFzZXMgZmVzdGxlZ2VuICglcyB2b3JlaW5nZXN0ZWxsdCkuIgorCisjOiBvcHRpb24uYzo0MTAKK21zZ2lkICJBbnN3ZXIgRE5TIHF1ZXJpZXMgYmFzZWQgb24gdGhlIGludGVyZmFjZSBhIHF1ZXJ5IHdhcyBzZW50IHRvLiIKK21zZ3N0ciAiRE5TLUFuZnJhZ2VuIGFiaMOkbmdpZyBkZXIgRW1mcGFuZ3NzY2huaXR0c3RlbGxlIGJlYW50d29ydGVuLiIKKworIzogb3B0aW9uLmM6NDExCittc2dpZCAiU3BlY2lmeSBUWFQgRE5TIHJlY29yZC4iCittc2dzdHIgIkROUy1UWFQtRWludHJhZyBmZXN0bGVnZW4uIgorCisjOiBvcHRpb24uYzo0MTIKK21zZ2lkICJTcGVjaWZ5IFBUUiBETlMgcmVjb3JkLiIKK21zZ3N0ciAiRE5TLVBUUi1FaW50cmFnIGZlc3RsZWdlbi4iCisKKyM6IG9wdGlvbi5jOjQxMworbXNnaWQgIkdpdmUgRE5TIG5hbWUgdG8gSVB2NCBhZGRyZXNzIG9mIGludGVyZmFjZS4iCittc2dzdHIgIlNjaG5pdHRzdGVsbGVubmFtZW4genVyIElQdjQtQWRyZXNzZSBkZXMgSW50ZXJmYWNlcyBhdWZsw7ZzZW4uIgorCisjOiBvcHRpb24uYzo0MTQKK21zZ2lkICJCaW5kIG9ubHkgdG8gaW50ZXJmYWNlcyBpbiB1c2UuIgorbXNnc3RyICJOdXIgYW4gdmVyd2VuZGV0ZSBTY2huaXR0c3RlbGxlbiBiaW5kZW4uIgorCisjOiBvcHRpb24uYzo0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVhZCBESENQIHN0YXRpYyBob3N0IGluZm9ybWF0aW9uIGZyb20gJXMuIgorbXNnc3RyICJTdGF0aXNjaGUgREhDUC1Ib3N0LUluZm9ybWF0aW9uIGF1cyAlcyBsZXNlbi4iCisKKyM6IG9wdGlvbi5jOjQxNgorbXNnaWQgIkVuYWJsZSB0aGUgREJ1cyBpbnRlcmZhY2UgZm9yIHNldHRpbmcgdXBzdHJlYW0gc2VydmVycywgZXRjLiIKK21zZ3N0ciAiREJ1cy1TY2huaXR0c3RlbGxlIHp1bSBGZXN0bGVnZW4gdm9yZ2VsYWdlcnRlciBTZXJ2ZXIgdXN3LiBmZXN0bGVnZW4uIgorCisjOiBvcHRpb24uYzo0MTcKK21zZ2lkICJEbyBub3QgcHJvdmlkZSBESENQIG9uIHRoaXMgaW50ZXJmYWNlLCBvbmx5IHByb3ZpZGUgRE5TLiIKK21zZ3N0ciAiQXVmIGRpZXNlciBTY2huaXR0c3RlbGxlIGtlaW4gREhDUCBhbmJpZXRlbiwgc29uZGVybiBudXIgRE5TLiIKKworIzogb3B0aW9uLmM6NDE4Cittc2dpZCAiRW5hYmxlIGR5bmFtaWMgYWRkcmVzcyBhbGxvY2F0aW9uIGZvciBib290cC4iCittc2dzdHIgIkR5bmFtaXNjaGUgQWRyZXNzYmVsZWd1bmcgZsO8ciBib290cCBlaW5zY2hhbHRlbi4iCisKKyM6IG9wdGlvbi5jOjQxOQorbXNnaWQgIk1hcCBNQUMgYWRkcmVzcyAod2l0aCB3aWxkY2FyZHMpIHRvIG9wdGlvbiBzZXQuIgorbXNnc3RyICJNQUMtQWRyZXNzZSAobWl0IEpva2VyemVpY2hlbikgYXVmIE5ldHptYXJrZSBhYmJpbGRlbi4iCisKKyM6IG9wdGlvbi5jOjQyMAorbXNnaWQgIlRyZWF0IERIQ1AgcmVxdWVzdHMgb24gYWxpYXNlcyBhcyBhcnJpdmluZyBmcm9tIGludGVyZmFjZS4iCittc2dzdHIgIkRIQ1AtQW5mcmFnZW4gdm9uIEFsaWFzLVNjaG5pdHRzdGVsbGVuIGbDvHIgZGllIEhhdXB0c2Nobml0dHN0ZWxsZSBiZWFudHdvcnRlbi4iCisKKyM6IG9wdGlvbi5jOjQyMQorbXNnaWQgIkRpc2FibGUgSUNNUCBlY2hvIGFkZHJlc3MgY2hlY2tpbmcgaW4gdGhlIERIQ1Agc2VydmVyLiIKK21zZ3N0ciAiSUNNUC1FY2hvLUFkcmVzc3Byw7xmdW5nIGltIERIQ1AtU2VydmVyIGFic2NoYWx0ZW4uIgorCisjOiBvcHRpb24uYzo0MjIKK21zZ2lkICJTaGVsbCBzY3JpcHQgdG8gcnVuIG9uIERIQ1AgbGVhc2UgY3JlYXRpb24gYW5kIGRlc3RydWN0aW9uLiIKK21zZ3N0ciAiU2tyaXB0LCBkYXMgYmVpIEVyemV1Z3VuZy9Mw7ZzY2h1bmcgZWluZXIgREhDUC1MZWFzZSBsYXVmZW4gc29sbC4iCisKKyM6IG9wdGlvbi5jOjQyMworbXNnaWQgIkx1YSBzY3JpcHQgdG8gcnVuIG9uIERIQ1AgbGVhc2UgY3JlYXRpb24gYW5kIGRlc3RydWN0aW9uLiIKK21zZ3N0ciAiTHVhLVNrcmlwdCwgd2VsY2hlcyBiZWkgRXJ6ZXVndW5nL0zDtnNjaHVuZyBlaW5lcyBESENQLUxlYXNlcyBsYXVmZW4gc29sbC4iCisKKyM6IG9wdGlvbi5jOjQyNAorbXNnaWQgIlJ1biBsZWFzZS1jaGFuZ2Ugc2NyaXB0cyBhcyB0aGlzIHVzZXIuIgorbXNnc3RyICJMZWFzZS3DhG5kZXJ1bmdzLVNrcmlwdCBtaXQgZGVuIFJlY2h0ZW4gZGllc2VzIE51dHplcnMgYXVzZsO8aHJlbi4iCisKKyM6IG9wdGlvbi5jOjQyNQorbXNnaWQgIkNhbGwgZGhjcC1zY3JpcHQgd2l0aCBjaGFuZ2VzIHRvIGxvY2FsIEFSUCB0YWJsZS4iCittc2dzdHIgIlJ1ZmUgZGhjcC1zY3JpcHQgbWl0IMOEbmRlcnVuZ2VuIGFuIGRlciBsb2thbGVuIEFSUC1UYWJlbGxlIGF1Zi4iCisKKyM6IG9wdGlvbi5jOjQyNgorbXNnaWQgIlJlYWQgY29uZmlndXJhdGlvbiBmcm9tIGFsbCB0aGUgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkuIgorbXNnc3RyICJLb25maWd1cmF0aW9uIGF1cyBhbGxlbiBEYXRlaWVuIGluIGRpZXNlbSBWZXJ6ZWljaG5pcyBsZXNlbi4iCisKKyM6IG9wdGlvbi5jOjQyNworbXNnaWQgIkxvZyB0byB0aGlzIHN5c2xvZyBmYWNpbGl0eSBvciBmaWxlLiAoZGVmYXVsdHMgdG8gREFFTU9OKSIKK21zZ3N0ciAiRsO8ciBkaWVzZSBTeXNsb2ctQW5sYWdlIG9kZXIgaW4gRGF0ZWkgbG9nZ2VuIChWb3JlaW5zdGVsbHVuZyBEQUVNT04pLiIKKworIzogb3B0aW9uLmM6NDI4Cittc2dpZCAiRG8gbm90IHVzZSBsZWFzZWZpbGUuIgorbXNnc3RyICJLZWluZSBMZWFzZS1EYXRlaSBiZW7DvHR6ZW4uIgorCisjOiBvcHRpb24uYzo0MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCBETlMgcXVlcmllcy4gKGRlZmF1bHRzIHRvICVzKSIKK21zZ3N0ciAiSMO2Y2hzdHphaGwgbmViZW5sw6R1ZmlnZXIgRE5TLUFuZnJhZ2VuICglcyB2b3JlaW5nZXN0ZWxsdCkuIgorCisjOiBvcHRpb24uYzo0MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xlYXIgRE5TIGNhY2hlIHdoZW4gcmVsb2FkaW5nICVzLiIKK21zZ3N0ciAiRE5TLUNhY2hlIGJlaW0gTmV1bGFkZW4gdm9uICVzIGzDtnNjaGVuLiIKKworIzogb3B0aW9uLmM6NDMxCittc2dpZCAiSWdub3JlIGhvc3RuYW1lcyBwcm92aWRlZCBieSBESENQIGNsaWVudHMuIgorbXNnc3RyICJWb24gREhDUC1DbGllbnRzIGdlbGllZmVydGUgSG9zdG5hbWVuIGlnbm9yaWVyZW4uIgorCisjOiBvcHRpb24uYzo0MzIKK21zZ2lkICJEbyBOT1QgcmV1c2UgZmlsZW5hbWUgYW5kIHNlcnZlciBmaWVsZHMgZm9yIGV4dHJhIERIQ1Agb3B0aW9ucy4iCittc2dzdHIgIkRhdGVpbmFtZW4gdW5kIFNlcnZlci1EYXRlbmZlaGxlciBmw7xyIHp1c8OkdHpsaWNoZSBESENQLU9wdGlvbmVuIE5JQ0hUIHdpZWRlcnZlcndlbmRlbi4iCisKKyM6IG9wdGlvbi5jOjQzMworbXNnaWQgIkVuYWJsZSBpbnRlZ3JhdGVkIHJlYWQtb25seSBURlRQIHNlcnZlci4iCittc2dzdHIgIkVpbmdlYmF1dGVuIE51ci1MZXNlLVRGVFAtU2VydmVyIGVpbnNjaGFsdGVuLiIKKworIzogb3B0aW9uLmM6NDM0Cittc2dpZCAiRXhwb3J0IGZpbGVzIGJ5IFRGVFAgb25seSBmcm9tIHRoZSBzcGVjaWZpZWQgc3VidHJlZS4iCittc2dzdHIgIk51ciB2b20gZmVzdGdlbGVndGVuIFVudGVyYmF1bSBEYXRlaWVuIHBlciBURlRQIGV4cG9ydGllcmVuLiIKKworIzogb3B0aW9uLmM6NDM1CisjLCBmdXp6eQorbXNnaWQgIkFkZCBjbGllbnQgSVAgb3IgaGFyZHdhcmUgYWRkcmVzcyB0byB0ZnRwLXJvb3QuIgorbXNnc3RyICJJUC1BZHJlc3NlIGRlcyBLbGllbnRlbiBhbiB0ZnRwLXJvb3QgYW5ow6RuZ2VuLiIKKworIzogb3B0aW9uLmM6NDM2Cittc2dpZCAiQWxsb3cgYWNjZXNzIG9ubHkgdG8gZmlsZXMgb3duZWQgYnkgdGhlIHVzZXIgcnVubmluZyBkbnNtYXNxLiIKK21zZ3N0ciAiWnVncmlmZiBudXIgYXVmIERhdGVpZW4gZ2VzdGF0dGVuLCBkaWUgZGVtIGRuc21hc3EgYXVmcnVmZW5kZW4gQmVudXR6ZXIgZ2Vow7ZyZW4uIgorCisjOiBvcHRpb24uYzo0MzcKK21zZ2lkICJEbyBub3QgdGVybWluYXRlIHRoZSBzZXJ2aWNlIGlmIFRGVFAgZGlyZWN0b3JpZXMgYXJlIGluYWNjZXNzaWJsZS4iCittc2dzdHIgIkRlciBEaWVuc3Qgc29sbHRlIG5pY2h0IGJlZW5kZXQgd2VyZGVuLCB3ZW5uIGRpZSBURlRQLVZlcnplaWNobmlzc2UgbmljaHQgenVncmVpZmJhciBzaW5kLiIKKworIzogb3B0aW9uLmM6NDM4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IFRGVFAgdHJhbnNmZXJzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJIw7ZjaHN0emFobCBuZWJlbmzDpHVmaWdlciBURlRQLcOcYmVydHJhZ3VuZ2VuICglcyB2b3JlaW5nZXN0ZWxsdCkuIgorCisjOiBvcHRpb24uYzo0MzkKK21zZ2lkICJNYXhpbXVtIE1UVSB0byB1c2UgZm9yIFRGVFAgdHJhbnNmZXJzLiIKK21zZ3N0ciAiTWF4aW1hbGUgTVRVIGbDvHIgVEZUUC3DnGJlcnRyYWd1bmdlbiBlcnJlaWNodC4iCisKKyM6IG9wdGlvbi5jOjQ0MAorbXNnaWQgIkRpc2FibGUgdGhlIFRGVFAgYmxvY2tzaXplIGV4dGVuc2lvbi4iCittc2dzdHIgIlRGVFAtQmxvY2tncsO2w59lbi1FcndlaXRlcnVuZyBhYnNjaGFsdGVuLiIKKworIzogb3B0aW9uLmM6NDQxCittc2dpZCAiQ29udmVydCBURlRQIGZpbGVuYW1lcyB0byBsb3dlcmNhc2UiCittc2dzdHIgIktvbnZlcnRpZXJlIFRGVFAgRGF0ZWluYW1lbiBpbiBLbGVpbnNjaHJlaWJ1bmciCisKKyM6IG9wdGlvbi5jOjQ0MgorbXNnaWQgIkVwaGVtZXJhbCBwb3J0IHJhbmdlIGZvciB1c2UgYnkgVEZUUCB0cmFuc2ZlcnMuIgorbXNnc3RyICJCZXJlaWNoIGbDvHIgdm9yw7xiZXJnZWhlbmRlIFBvcnRzIGbDvHIgVEZUUC3DnGJlcnRyYWd1bmdlbi4iCisKKyM6IG9wdGlvbi5jOjQ0MworbXNnaWQgIkV4dHJhIGxvZ2dpbmcgZm9yIERIQ1AuIgorbXNnc3RyICJFcndlaXRlcnRlIERIQ1AtUHJvdG9rb2xsaWVydW5nLiIKKworIzogb3B0aW9uLmM6NDQ0Cittc2dpZCAiRW5hYmxlIGFzeW5jLiBsb2dnaW5nOyBvcHRpb25hbGx5IHNldCBxdWV1ZSBsZW5ndGguIgorbXNnc3RyICJBc3luY2hyb25lIFByb3Rva29sbGllcnVuZyBlaW5zY2hhbHRlbiwgb3B0LiBXYXJ0ZXNjaGxhbmdlbmzDpG5nZSBmZXN0bGVnZW4uIgorCisjOiBvcHRpb24uYzo0NDUKK21zZ2lkICJTdG9wIEROUyByZWJpbmRpbmcuIEZpbHRlciBwcml2YXRlIElQIHJhbmdlcyB3aGVuIHJlc29sdmluZy4iCittc2dzdHIgIkROUy1SZWJpbmRpbmcgdW50ZXJiaW5kZW4sIHByaXZhdGUgSVAtQmVyZWljaGUgYmVpIGRlciBBdWZsw7ZzdW5nIGF1c2ZpbHRlcm4uIgorCisjOiBvcHRpb24uYzo0NDYKK21zZ2lkICJBbGxvdyByZWJpbmRpbmcgb2YgMTI3LjAuMC4wLzgsIGZvciBSQkwgc2VydmVycy4iCittc2dzdHIgIkF1ZmzDtnN1bmcgenUgMTI3LjAuMC4wLzggZXJsYXViZW4sIGbDvHIgUkJMLVNlcnZlci4iCisKKyM6IG9wdGlvbi5jOjQ0NworbXNnaWQgIkluaGliaXQgRE5TLXJlYmluZCBwcm90ZWN0aW9uIG9uIHRoaXMgZG9tYWluLiIKK21zZ3N0ciAiRE5TLVJlYmluZC1TY2h1dHogZsO8ciBkaWVzZSBEb23DpG5lIHNwZXJyZW4uIgorCisjOiBvcHRpb24uYzo0NDgKK21zZ2lkICJBbHdheXMgcGVyZm9ybSBETlMgcXVlcmllcyB0byBhbGwgc2VydmVycy4iCittc2dzdHIgIkROUy1BbmZyYWdlbiBpbW1lciBhbiBhbGxlIFNlcnZlciB3ZWl0ZXJsZWl0ZW4uIgorCisjOiBvcHRpb24uYzo0NDkKK21zZ2lkICJTZXQgdGFnIGlmIGNsaWVudCBpbmNsdWRlcyBtYXRjaGluZyBvcHRpb24gaW4gcmVxdWVzdC4iCittc2dzdHIgIk1hcmtlIHNldHplbiwgd2VubiBLbGllbnQgZWluZSBlbnRzcHJlY2hlbmRlIE9wdGlvbiBhbmZyYWd0LiIKKworIzogb3B0aW9uLmM6NDUwCittc2dpZCAiVXNlIGFsdGVybmF0aXZlIHBvcnRzIGZvciBESENQLiIKK21zZ3N0ciAiQWx0ZXJuYXRpdmUgUG9ydHMgZsO8ciBESENQIHZlcndlbmRlbi4iCisKKyM6IG9wdGlvbi5jOjQ1MQorbXNnaWQgIlNwZWNpZnkgTkFQVFIgRE5TIHJlY29yZC4iCittc2dzdHIgIkROUy1OQVBUUi1FaW50cmFnIGZlc3RsZWdlbi4iCisKKyM6IG9wdGlvbi5jOjQ1MgorbXNnaWQgIlNwZWNpZnkgbG93ZXN0IHBvcnQgYXZhaWxhYmxlIGZvciBETlMgcXVlcnkgdHJhbnNtaXNzaW9uLiIKK21zZ3N0ciAiTmllZHJpZ3N0ZW4gdmVyZsO8Z2JhcmVuIFBvcnQgZsO8ciDDnGJlcnRyYWd1bmcgdm9uIEROUy1BbmZyYWdlbiBmZXN0bGVnZW4uIgorCisjOiBvcHRpb24uYzo0NTMKK21zZ2lkICJTcGVjaWZ5IGhpZ2hlc3QgcG9ydCBhdmFpbGFibGUgZm9yIEROUyBxdWVyeSB0cmFuc21pc3Npb24uIgorbXNnc3RyICJIw7ZjaHN0ZW4gdmVyZsO8Z2JhcmVuIFBvcnQgZsO8ciDDnGJlcnRyYWd1bmcgdm9uIEROUy1BbmZyYWdlbiBmZXN0bGVnZW4uIgorCisjOiBvcHRpb24uYzo0NTQKK21zZ2lkICJVc2Ugb25seSBmdWxseSBxdWFsaWZpZWQgZG9tYWluIG5hbWVzIGZvciBESENQIGNsaWVudHMuIgorbXNnc3RyICJGw7xyIERIQ1AtS2xpZW50ZW4gbnVyIHZvbGxzdMOkbmRpZyBiZXN0aW1tdGUgRG9tw6RuZW5uYW1lbiBiZW51dHplbi4iCisKKyMgRklYTUU6IHByb2JhYmx5IHR5cG8gaW4gb3JpZ2luYWwgbWVzc2FnZS4gLS0gTUEKKyM6IG9wdGlvbi5jOjQ1NQorbXNnaWQgIkdlbmVyYXRlIGhvc3RuYW1lcyBiYXNlZCBvbiBNQUMgYWRkcmVzcyBmb3IgbmFtZWxlc3MgY2xpZW50cy4iCittc2dzdHIgIkdlbmVyaWVyZSBIb3N0bmFtZW4gYXVmIEJhc2lzIGRlciBNQUMtQWRyZXNzZSBmw7xyIG5hbWVubG9zZSBLbGllbnRlbi4iCisKKyM6IG9wdGlvbi5jOjQ1NgorbXNnaWQgIlVzZSB0aGVzZSBESENQIHJlbGF5cyBhcyBmdWxsIHByb3hpZXMuIgorbXNnc3RyICJEaWVzZSBESENQLVJlbGFpcyBhbHMgdm9sbHdlcnRpZ2UgUHJveGllcyB2ZXJ3ZW5kZW4uIgorCisjOiBvcHRpb24uYzo0NTcKK21zZ2lkICJSZWxheSBESENQIHJlcXVlc3RzIHRvIGEgcmVtb3RlIHNlcnZlciIKK21zZ3N0ciAiTGV1dGUgREhDUCBBbmZyYWdlbiBhbiBlbnRmZXJudGVuIFNlcnZlciB3ZWl0ZXIiCisKKyM6IG9wdGlvbi5jOjQ1OAorbXNnaWQgIlNwZWNpZnkgYWxpYXMgbmFtZSBmb3IgTE9DQUwgRE5TIG5hbWUuIgorbXNnc3RyICJBbGlhcyBmw7xyIExPS0FMRU4gRE5TLU5hbWVuIGZlc3RsZWdlbi4iCisKKyM6IG9wdGlvbi5jOjQ1OQorbXNnaWQgIlByb21wdCB0byBzZW5kIHRvIFBYRSBjbGllbnRzLiIKK21zZ3N0ciAiQXVmZm9yZGVydW5nLCBkaWUgYW4gUFhFLUtsaWVudGVuIGdlc2NoaWNrdCB3aXJkLiIKKworIzogb3B0aW9uLmM6NDYwCittc2dpZCAiQm9vdCBzZXJ2aWNlIGZvciBQWEUgbWVudS4iCittc2dzdHIgIkJvb3QtRGllbnN0IGbDvHIgUFhFLU1lbsO8LiIKKworIzogb3B0aW9uLmM6NDYxCittc2dpZCAiQ2hlY2sgY29uZmlndXJhdGlvbiBzeW50YXguIgorbXNnc3RyICJLb25maWd1cmF0aW9uc3N5bnRheCBwcsO8ZmVuLiIKKworIzogb3B0aW9uLmM6NDYyCittc2dpZCAiQWRkIHJlcXVlc3RvcidzIE1BQyBhZGRyZXNzIHRvIGZvcndhcmRlZCBETlMgcXVlcmllcy4iCittc2dzdHIgIkFuZnJhZ2VuZGUgTUFDLUFkcmVzc2UgaW4gZGllIHdlaXRlcmxlaXRlbmRlIEROUy1BbmZyYWdlIGVpbmbDvGdlbi4iCisKKyM6IG9wdGlvbi5jOjQ2MworbXNnaWQgIkFkZCBzcGVjaWZpZWQgSVAgc3VibmV0IHRvIGZvcndhcmRlZCBETlMgcXVlcmllcy4iCittc2dzdHIgIkbDvGdlIHNwZXppZml6aWVydGVzIElQLVN1Ym5ldHogYW4gd2VpdGVyZ2VsZWl0ZXRlbiBETlMtQW5mcmFnZW4gaGluenUuIgorCisjOiBvcHRpb24uYzo0NjQKK21zZ2lkICJBZGQgY2xpZW50IGlkZW50aWZpY2F0aW9uIHRvIGZvcndhcmRlZCBETlMgcXVlcmllcy4iCittc2dzdHIgIkbDvGdlIEtsaWVudCBJZGVudGlmaWthdGlvbmFuIHdlaXRlcmdlbGVpdGV0ZW4gRE5TLUFuZnJhZ2VuIGhpbnp1LiIKKworIzogb3B0aW9uLmM6NDY1Cittc2dpZCAiUHJveHkgRE5TU0VDIHZhbGlkYXRpb24gcmVzdWx0cyBmcm9tIHVwc3RyZWFtIG5hbWVzZXJ2ZXJzLiIKK21zZ3N0ciAiUHJveHktRE5TU0VDLVZhbGlkaWVydW5nLUVyZ2Vibmlzc2Ugdm9uIFVwc3RyZWFtLU5hbWVuc3NlcnZlcm4uIgorCisjOiBvcHRpb24uYzo0NjYKK21zZ2lkICJBdHRlbXB0IHRvIGFsbG9jYXRlIHNlcXVlbnRpYWwgSVAgYWRkcmVzc2VzIHRvIERIQ1AgY2xpZW50cy4iCittc2dzdHIgIlZlcnN1Y2hlIHNlcXVlbnppZWxsZSBJUC1BZHJlc3NlbiBhbiBESENQLUtsaWVudGVuIHp1IHZlcmdlYmVuLiIKKworIzogb3B0aW9uLmM6NDY3Cittc2dpZCAiQ29weSBjb25uZWN0aW9uLXRyYWNrIG1hcmsgZnJvbSBxdWVyaWVzIHRvIHVwc3RyZWFtIGNvbm5lY3Rpb25zLiIKK21zZ3N0ciAiS29waWVyZSBcImNvbm5lY3Rpb24tdHJhY2sgbWFya1wiIHZvbiBBbmZyYWdlbiBuYWNoIFVwc3RyZWFtLVZlcmJpbmR1bmdlbi4iCisKKyM6IG9wdGlvbi5jOjQ2OAorbXNnaWQgIkFsbG93IERIQ1AgY2xpZW50cyB0byBkbyB0aGVpciBvd24gREROUyB1cGRhdGVzLiIKK21zZ3N0ciAiRXJsYXViZSBESENQLUtsaWVudGVuIGlocmUgZWlnZW5lbiBERE5TLVVwZGF0ZXMgZHVyY2h6dWbDvGhyZW4uIgorCisjOiBvcHRpb24uYzo0NjkKK21zZ2lkICJTZW5kIHJvdXRlci1hZHZlcnRpc2VtZW50cyBmb3IgaW50ZXJmYWNlcyBkb2luZyBESENQdjYiCittc2dzdHIgIlNlbmRlIFwiUm91dGVyLUFkdmVydGlzbWVudHNcIiBmw7xyIE5ldHp3ZXJrc2Nobml0dHN0ZWxsZW4sIHdlbGNoZSBESENQdjYgbnV0emVuIgorCisjOiBvcHRpb24uYzo0NzAKK21zZ2lkICJTcGVjaWZ5IERVSURfRU4tdHlwZSBESENQdjYgc2VydmVyIERVSUQiCittc2dzdHIgIlNwZXppZml6aWVyZSBEVUlEX0VOLXR5cGUgREhDUHY2IFNlcnZlciBEVUlEIgorCisjOiBvcHRpb24uYzo0NzEKK21zZ2lkICJTcGVjaWZ5IGhvc3QgKEEvQUFBQSBhbmQgUFRSKSByZWNvcmRzIgorbXNnc3RyICJTcGV6aWZpemllcmUgSG9zdCAoQS9BQUFBIHVuZCBQVFIpIEVpbnRyw6RnZSIKKworIzogb3B0aW9uLmM6NDcyCittc2dpZCAiU3BlY2lmeSBhcmJpdHJhcnkgRE5TIHJlc291cmNlIHJlY29yZCIKK21zZ3N0ciAiU3BlemlmaXppZXJlIGVpbmVuIGJlbGllYmllZ2VuIEROUyBFaW50cmFnIgorCisjOiBvcHRpb24uYzo0NzMKK21zZ2lkICJCaW5kIHRvIGludGVyZmFjZXMgaW4gdXNlIC0gY2hlY2sgZm9yIG5ldyBpbnRlcmZhY2VzIgorbXNnc3RyICJCaW5kdW5nIHp1IFNjaG5pdHRzdGVsbGVuIGluIEJlbnV0enVuZyAtIHByw7xmZSBhdWYgbmV1ZSBTY2huaXR0c3RlbGxlbiIKKworIzogb3B0aW9uLmM6NDc0Cittc2dpZCAiRXhwb3J0IGxvY2FsIG5hbWVzIHRvIGdsb2JhbCBETlMiCittc2dzdHIgIkV4cG9ydGllcmUgbG9rYWxlIE5hbWVuIGluIGRhcyBnbG9iYWxlIEROUyIKKworIzogb3B0aW9uLmM6NDc1Cittc2dpZCAiRG9tYWluIHRvIGV4cG9ydCB0byBnbG9iYWwgRE5TIgorbXNnc3RyICJEb21haW4gZsO8ciBkYXMgRXhwb3J0aWVyZW4gZGVzIGdsb2JhbGVuIEROUyIKKworIzogb3B0aW9uLmM6NDc2Cittc2dpZCAiU2V0IFRUTCBmb3IgYXV0aG9yaXRhdGl2ZSByZXBsaWVzIgorbXNnc3RyICJTZXR6dGUgVFRMIGbDvHIgYXV0b3JpdGF0aXZlIEFudHdvcnRlbiIKKworIzogb3B0aW9uLmM6NDc3CisjLCBmdXp6eQorbXNnaWQgIlNldCBhdXRob3JpdGF0aXZlIHpvbmUgaW5mb3JtYXRpb24iCittc2dzdHIgIlNldHplIGF1dG9yaXRhdGl2ZSBab25lbmluZm9ybWF0aW9uZW4iCisKKyM6IG9wdGlvbi5jOjQ3OAorbXNnaWQgIlNlY29uZGFyeSBhdXRob3JpdGF0aXZlIG5hbWVzZXJ2ZXJzIGZvciBmb3J3YXJkIGRvbWFpbnMiCittc2dzdHIgIlNla3VuZMOkcmVyIGF1dG9yaXRhdGl2ZXIgTmFtZXNlcnZlciBmw7xyIHdlaXRlcmdlbGVpdGV0ZSBEb21haW5zIgorCisjOiBvcHRpb24uYzo0NzkKK21zZ2lkICJQZWVycyB3aGljaCBhcmUgYWxsb3dlZCB0byBkbyB6b25lIHRyYW5zZmVyIgorbXNnc3RyICJQZWVycyB3ZWxjaGUgZWluZW4gWm9uZW50cmFuc2ZlciBkdXJjaGbDvGhyZW4gZMO8cmZlbiIKKworIzogb3B0aW9uLmM6NDgwCittc2dpZCAiU3BlY2lmeSBpcHNldHMgdG8gd2hpY2ggbWF0Y2hpbmcgZG9tYWlucyBzaG91bGQgYmUgYWRkZWQiCittc2dzdHIgIlNwZXppZml6aWVyZSBJUFNldHMgenUgd2VsY2hlciBwYXNzZW5kZSBEb21haW5zIGhpbnp1Z2Vmw7xndCB3ZXJkZW4gc29sbGVuIgorCisjOiBvcHRpb24uYzo0ODEKK21zZ2lkICJTcGVjaWZ5IGEgZG9tYWluIGFuZCBhZGRyZXNzIHJhbmdlIGZvciBzeW50aGVzaXNlZCBuYW1lcyIKK21zZ3N0ciAiU3BlemlmaXppZXJlIGVpbmUgRG9tYWluIHVuZCBBZHJlc3NiZXJlaWNoIGbDvHIgc3ludGhldGlzaWVydGUgTmFtZW4iCisKKyM6IG9wdGlvbi5jOjQ4MgorbXNnaWQgIkFjdGl2YXRlIEROU1NFQyB2YWxpZGF0aW9uIgorbXNnc3RyICJBa3RpdmllcmUgRE5TU0VDLVZhbGlkaWVydW5nIgorCisjOiBvcHRpb24uYzo0ODMKK21zZ2lkICJTcGVjaWZ5IHRydXN0IGFuY2hvciBrZXkgZGlnZXN0LiIKK21zZ3N0ciAiU3BlemlmaXppZXJlIFZlcnRyYXVlbnN1cnNwcnVuZyAoVHJ1c3QgQW5jaG9yKSBkZXIgU2NobMO8c3NlbC1QcsO8ZmRhdGVuIChLZXkgRGlnZXN0KS4iCisKKyM6IG9wdGlvbi5jOjQ4NAorbXNnaWQgIkRpc2FibGUgdXBzdHJlYW0gY2hlY2tpbmcgZm9yIEROU1NFQyBkZWJ1Z2dpbmcuIgorbXNnc3RyICJEZWFrdGl2aWVyZSBkaWUgw5xiZXJwcsO8ZnVuZyB2b3JnZWxhZ2VydGVyIFNlcnZlciBmw7xyIEROU1NFQy1EZWJ1Z2dpbmcuIgorCisjOiBvcHRpb24uYzo0ODUKK21zZ2lkICJFbnN1cmUgYW5zd2VycyB3aXRob3V0IEROU1NFQyBhcmUgaW4gdW5zaWduZWQgem9uZXMuIgorbXNnc3RyICJTdGVsbHQgc2ljaGVyLCBkYXNzIEFudHdvcnRlbiBvaG5lIEROU1NFQyBzaWNoIGluIGVpbmVyIHVuc2lnbmllcnRlbiBab25lIGJlZmluZGVuLiIKKworIzogb3B0aW9uLmM6NDg2Cittc2dpZCAiRG9uJ3QgY2hlY2sgRE5TU0VDIHNpZ25hdHVyZSB0aW1lc3RhbXBzIHVudGlsIGZpcnN0IGNhY2hlLXJlbG9hZCIKK21zZ3N0ciAiRE5TU0VDIFNpZ25hdHVyLVplaXRzdGVtcGVsIG5pY2h0IHByw7xmZW4sIGJpcyBlcnN0bWFsaWcgZGVyIENhY2hlIG5ldWdlbGFkZW4gd2lyZCIKKworIzogb3B0aW9uLmM6NDg3Cittc2dpZCAiVGltZXN0YW1wIGZpbGUgdG8gdmVyaWZ5IHN5c3RlbSBjbG9jayBmb3IgRE5TU0VDIgorbXNnc3RyICJaZWl0c3RlbXBlbC1EYXRlaSBmw7xyIGRpZSBWZXJpZml6aWVydW5nIGRlciBTeXN0ZW11aHJ6ZWl0IGbDvHIgRE5TU0VDIgorCisjOiBvcHRpb24uYzo0ODkKK21zZ2lkICJTcGVjaWZ5IERIQ1B2NiBwcmVmaXggY2xhc3MiCittc2dzdHIgIlNwZXppZml6aWVyZSBESENQdjYgUHJlZml4IEtsYXNzZSIKKworIzogb3B0aW9uLmM6NDkxCisjLCBmdXp6eQorbXNnaWQgIlNldCBNVFUsIHByaW9yaXR5LCByZXNlbmQtaW50ZXJ2YWwgYW5kIHJvdXRlci1saWZldGltZSIKK21zZ3N0ciAiU2V0emUgUHJpb3JpdMOkdCwgSW50ZXJ2YWxsIGRlcyBlcm5ldXRlbiBTZW5kZW5zIHVuZCBSb3V0ZXIgTGViZW5zemVpdCIKKworIzogb3B0aW9uLmM6NDkyCittc2dpZCAiRG8gbm90IGxvZyByb3V0aW5lIERIQ1AuIgorbXNnc3RyICJQcm90b2tvbGxpZXJlIGtlaW4gREhDUC4iCisKKyM6IG9wdGlvbi5jOjQ5MworbXNnaWQgIkRvIG5vdCBsb2cgcm91dGluZSBESENQdjYuIgorbXNnc3RyICJQcm90b2tvbGxpZXJlIGtlaW4gREhDUHY2LiIKKworIzogb3B0aW9uLmM6NDk0Cittc2dpZCAiRG8gbm90IGxvZyBSQS4iCittc2dzdHIgIlJBIG5pY2h0IHByb3Rva29sbGllcmVuLiIKKworIzogb3B0aW9uLmM6NDk1Cittc2dpZCAiQWNjZXB0IHF1ZXJpZXMgb25seSBmcm9tIGRpcmVjdGx5LWNvbm5lY3RlZCBuZXR3b3Jrcy4iCittc2dzdHIgIkFremVwdGllcmUgbnVyIEFuZnJhZ2VuIHZvbiBkaXJla3QgdmVyYnVuZGVuZW4gTmV0endlcmtlbi4iCisKKyM6IG9wdGlvbi5jOjQ5NgorbXNnaWQgIkRldGVjdCBhbmQgcmVtb3ZlIEROUyBmb3J3YXJkaW5nIGxvb3BzLiIKK21zZ3N0ciAiRXJrZW5uZW4gdW5kIEVudGZlcm5lbiB2b24gRE5TLVdlaXRlcmxlaXR1bmdzc2NobGVpZmVuLiIKKworIzogb3B0aW9uLmM6NDk3Cittc2dpZCAiSWdub3JlIEROUyByZXNwb25zZXMgY29udGFpbmluZyBpcGFkZHIuIgorbXNnc3RyICJJZ25vcmllcmUgRE5TLUFudHdvcnRlbiwgd2VsY2hlIGlwYWRkciBlbnRoYWx0ZW4uIgorCisjOiBvcHRpb24uYzo0OTgKK21zZ2lkICJTZXQgVFRMIGluIEROUyByZXNwb25zZXMgd2l0aCBESENQLWRlcml2ZWQgYWRkcmVzc2VzLiIKK21zZ3N0ciAiU2V0enRlIFRUTCBpbiBETlMtQW50d29ydGVuIG1pdCBESENQLWFiZ2VsZWl0ZXRlbiBBZHJlc3Nlbi4iCisKKyM6IG9wdGlvbi5jOjQ5OQorbXNnaWQgIkRlbGF5IERIQ1AgcmVwbGllcyBmb3IgYXQgbGVhc3QgbnVtYmVyIG9mIHNlY29uZHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjcwMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6IGRuc21hc3EgW29wdGlvbnNdXG4iCisiXG4iCittc2dzdHIgIiIKKyJWZXJ3ZW5kdW5nOiBkbnNtYXNxIFtPcHRpb25lbl1cbiIKKyJcbiIKKworIzogb3B0aW9uLmM6NzA1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzZSBzaG9ydCBvcHRpb25zIG9ubHkgb24gdGhlIGNvbW1hbmQgbGluZS5cbiIKK21zZ3N0ciAiQXVmIGRlciBCZWZlaGxzemVpbGUgbnVyIGt1cnplIE9wdGlvbmVuIHZlcndlbmRlbiFcbiIKKworIzogb3B0aW9uLmM6NzA3CisjLCBjLWZvcm1hdAorbXNnaWQgIlZhbGlkIG9wdGlvbnMgYXJlOlxuIgorbXNnc3RyICJHw7xsdGlnZSBPcHRpb25lbiBzaW5kOlxuIgorCisjOiBvcHRpb24uYzo3NTQgb3B0aW9uLmM6ODY4Cittc2dpZCAiYmFkIGFkZHJlc3MiCittc2dzdHIgIkZlaGxlcmhhZnRlIEFkcmVzc2UuIgorCisjOiBvcHRpb24uYzo3Nzkgb3B0aW9uLmM6NzgzCittc2dpZCAiYmFkIHBvcnQiCittc2dzdHIgInVuenVsw6Rzc2lnZXIgUG9ydCIKKworIzogb3B0aW9uLmM6Nzk3IG9wdGlvbi5jOjgyNiBvcHRpb24uYzo4NjEKK21zZ2lkICJpbnRlcmZhY2UgYmluZGluZyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJTY2huaXR0c3RlbGxlbmJpbmR1bmcgbmljaHQgdW50ZXJzdMO8dHp0IgorCisjOiBvcHRpb24uYzo4MjEgb3B0aW9uLmM6ODU2Cittc2dpZCAiaW50ZXJmYWNlIGNhbiBvbmx5IGJlIHNwZWNpZmllZCBvbmNlIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjgzNSBvcHRpb24uYzozODAwCittc2dpZCAiYmFkIGludGVyZmFjZSBuYW1lIgorbXNnc3RyICJ1bnp1bMOkc3NpZ2VyIFNjaG5pdHRlc3RlbGxlbm5hbWUiCisKKyM6IG9wdGlvbi5jOjEwNjIKK21zZ2lkICJ1bnN1cHBvcnRlZCBlbmNhcHN1bGF0aW9uIGZvciBJUHY2IG9wdGlvbiIKK21zZ3N0ciAiTmljaHQgdW50ZXJzdMO8dHp0ZSBWZXJrYXBzZWx1bmcgZsO8ciBlaW5lIElQdjYtT3B0aW9uIgorCisjOiBvcHRpb24uYzoxMDc2Cittc2dpZCAiYmFkIGRoY3Atb3B0aW9uIgorbXNnc3RyICJGZWhsZXJoYWZ0ZSBESENQLU9wdGlvbiIKKworIzogb3B0aW9uLmM6MTE0NAorbXNnaWQgImJhZCBJUCBhZGRyZXNzIgorbXNnc3RyICJGZWhsZXJoYWZ0ZSBJUC1BZHJlc3NlIgorCisjOiBvcHRpb24uYzoxMTQ3IG9wdGlvbi5jOjEyODYgb3B0aW9uLmM6MzA3MAorbXNnaWQgImJhZCBJUHY2IGFkZHJlc3MiCittc2dzdHIgIkZlaGxlcmhhZnRlIElQdjYtQWRyZXNzZSIKKworIzogb3B0aW9uLmM6MTI0MAorbXNnaWQgImJhZCBJUHY0IGFkZHJlc3MiCittc2dzdHIgIkZlaGxlcmhhZnRlIElQdjQtQWRyZXNzZSIKKworIzogb3B0aW9uLmM6MTMxMyBvcHRpb24uYzoxNDA3Cittc2dpZCAiYmFkIGRvbWFpbiBpbiBkaGNwLW9wdGlvbiIKK21zZ3N0ciAiRmVobGVyaGFmdGUgRG9tw6RuZSBpbiBESENQLU9wdGlvbiIKKworIzogb3B0aW9uLmM6MTQ0NQorbXNnaWQgImRoY3Atb3B0aW9uIHRvbyBsb25nIgorbXNnc3RyICJESENQLU9wdGlvbiB6dSBsYW5nIgorCisjOiBvcHRpb24uYzoxNDUyCittc2dpZCAiaWxsZWdhbCBkaGNwLW1hdGNoIgorbXNnc3RyICJVbnp1bMOkc3NpZ2UgZGhjcC1tYXRjaC1PcHRpb24iCisKKyM6IG9wdGlvbi5jOjE1MTQKK21zZ2lkICJpbGxlZ2FsIHJlcGVhdGVkIGZsYWciCittc2dzdHIgInVuenVsw6Rzc2lnIHdpZWRlcmhvbHRlIE1hcmtpZXJ1bmciCisKKyM6IG9wdGlvbi5jOjE1MjIKK21zZ2lkICJpbGxlZ2FsIHJlcGVhdGVkIGtleXdvcmQiCittc2dzdHIgInVuenVsw6Rzc2lnIHdpZWRlcmhvbHRlcyBTY2hsw7xzc2Vsd29ydCIKKworIzogb3B0aW9uLmM6MTU5MyBvcHRpb24uYzo0NDM0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBhY2Nlc3MgZGlyZWN0b3J5ICVzOiAlcyIKK21zZ3N0ciAiS2FubiBhdWYgVmVyemVpY2huaXMgJXMgbmljaHQgenVncmVpZmVuOiAlcyIKKworIzogb3B0aW9uLmM6MTYzOSB0ZnRwLmM6NTM3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBhY2Nlc3MgJXM6ICVzIgorbXNnc3RyICJLYW5uIGF1ZiAlcyBuaWNodCB6dWdyZWlmZW46ICVzIgorCisjOiBvcHRpb24uYzoxNzI3Cittc2dpZCAic2V0dGluZyBsb2cgZmFjaWxpdHkgaXMgbm90IHBvc3NpYmxlIHVuZGVyIEFuZHJvaWQiCittc2dzdHIgIkRpZSBFaW5zdGVsbHVuZyBQcm90b2tvbGxpZXJlaW5yaWNodHVuZyBrYW5uIHVudGVyIEFuZHJvaWQgbmljaHQgZ2VzZXR6dCB3ZXJkZW4iCisKKyM6IG9wdGlvbi5jOjE3MzYKK21zZ2lkICJiYWQgbG9nIGZhY2lsaXR5IgorbXNnc3RyICJGYWxzY2hlIFByb3Rva29sbGllcmVpbnJpY2h0dW5nIgorCisjOiBvcHRpb24uYzoxNzg5Cittc2dpZCAiYmFkIE1YIHByZWZlcmVuY2UiCittc2dzdHIgInVuenVsw6Rzc2lnZSBNWC1QcsOkZmVyZW56LUFuZ2FiZSIKKworIzogb3B0aW9uLmM6MTc5NAorbXNnaWQgImJhZCBNWCBuYW1lIgorbXNnc3RyICJ1bnp1bMOkc3NpZ2VyIE1YLU5hbWUiCisKKyM6IG9wdGlvbi5jOjE4MDgKK21zZ2lkICJiYWQgTVggdGFyZ2V0IgorbXNnc3RyICJ1bnp1bMOkc3NpZ2VzIE1YLVppZWwiCisKKyM6IG9wdGlvbi5jOjE4MjAKK21zZ2lkICJjYW5ub3QgcnVuIHNjcmlwdHMgdW5kZXIgdUNsaW51eCIKK21zZ3N0ciAidW50ZXIgdUNsaW51eCBpc3QgZGllIFNrcmlwdGF1c2bDvGhydW5nIG5pY2h0IG3DtmdsaWNoIgorCisjOiBvcHRpb24uYzoxODIyCittc2dpZCAicmVjb21waWxlIHdpdGggSEFWRV9TQ1JJUFQgZGVmaW5lZCB0byBlbmFibGUgbGVhc2UtY2hhbmdlIHNjcmlwdHMiCittc2dzdHIgIk5ldcO8YmVyc2V0enVuZyBtaXQgSEFWRV9TQ1JJUFQgbsO2dGlnLCB1bSBMZWFzZS3DhG5kZXJ1bmdzLVNrcmlwdGUgYXVzenVmw7xocmVuIgorCisjOiBvcHRpb24uYzoxODI2Cittc2dpZCAicmVjb21waWxlIHdpdGggSEFWRV9MVUFTQ1JJUFQgZGVmaW5lZCB0byBlbmFibGUgTHVhIHNjcmlwdHMiCittc2dzdHIgIlVtIEJlbnV0emVyZGVmaW5pZXJ0ZSBMdWEtU2tyaXB0ZSB6dSBlcm3DtmdsaWNoZW4sIG11c3MgbWl0IEhBVkVfTFVBU0NSSVBUIG5ldSBrb21waWxpZXJ0IHdlcmRlbiIKKworIzogb3B0aW9uLmM6MjA5NSBvcHRpb24uYzoyMTA2IG9wdGlvbi5jOjIxNDMgb3B0aW9uLmM6MjE5OSBvcHRpb24uYzoyNDgyCittc2dpZCAiYmFkIHByZWZpeCIKK21zZ3N0ciAidW56dWzDpHNzaWdlciBQcsOkZml4IgorCisjOiBvcHRpb24uYzoyNTA0Cittc2dpZCAicmVjb21waWxlIHdpdGggSEFWRV9JUFNFVCBkZWZpbmVkIHRvIGVuYWJsZSBpcHNldCBkaXJlY3RpdmVzIgorbXNnc3RyICJVbSBJUFNldC1EaXJla3RpdmVuIHp1IGFrdGl2aWVyZW4sIG11c3MgbWl0IEhBVkVfSVBTRVQgbmV1IMO8YmVyc2V0enQgd2VyZGVuIgorCisjOiBvcHRpb24uYzoyNzEzCittc2dpZCAiYmFkIHBvcnQgcmFuZ2UiCittc2dzdHIgInVuenVsw6Rzc2lnZXIgUG9ydGJlcmVpY2giCisKKyM6IG9wdGlvbi5jOjI3MzgKK21zZ2lkICJiYWQgYnJpZGdlLWludGVyZmFjZSIKK21zZ3N0ciAidW56dWzDpHNzaWdlIEJyw7xja2VuLVNjaG5pdHRzdGVsbGUiCisKKyM6IG9wdGlvbi5jOjI3OTgKK21zZ2lkICJvbmx5IG9uZSB0YWcgYWxsb3dlZCIKK21zZ3N0ciAibnVyIGVpbmUgTWFya2UgenVsw6Rzc2lnIgorCisjOiBvcHRpb24uYzoyODE4IG9wdGlvbi5jOjI4MzAgb3B0aW9uLmM6MjkzOSBvcHRpb24uYzoyOTQ0IG9wdGlvbi5jOjI5ODMKK21zZ2lkICJiYWQgZGhjcC1yYW5nZSIKK21zZ3N0ciAidW56dWzDpHNzaWdlciBESENQLUJlcmVpY2giCisKKyM6IG9wdGlvbi5jOjI4NDUKK21zZ2lkICJpbmNvbnNpc3RlbnQgREhDUCByYW5nZSIKK21zZ3N0ciAiaW5rb25zaXN0ZW50ZXIgREhDUC1CZXJlaWNoIgorCisjOiBvcHRpb24uYzoyOTA3Cittc2dpZCAicHJlZml4IGxlbmd0aCBtdXN0IGJlIGV4YWN0bHkgNjQgZm9yIFJBIHN1Ym5ldHMiCittc2dzdHIgIkRpZSBQcsOkZml4bGVuZ2UgbXVzcyBnZW5hdSA2NCBmw7xyIFJBIFN1Ym5ldHplIHNlaW4iCisKKyM6IG9wdGlvbi5jOjI5MDkKK21zZ2lkICJwcmVmaXggbGVuZ3RoIG11c3QgYmUgZXhhY3RseSA2NCBmb3Igc3VibmV0IGNvbnN0cnVjdG9ycyIKK21zZ3N0ciAiRGllIFByw6RmaXhsZW5nZSBtdXNzIGdlbmF1IDY0IGbDvHIgU3VibmV0IEtvbnN0cnVrdG9yZW4gc2VpbiIKKworIzogb3B0aW9uLmM6MjkxMworbXNnaWQgInByZWZpeCBsZW5ndGggbXVzdCBiZSBhdCBsZWFzdCA2NCIKK21zZ3N0ciAiRGllIFByw6RmaXhsw6RuZ2UgbXVzcyBtaW5kZXN0ZW5zIDY0IHNlaW4iCisKKyM6IG9wdGlvbi5jOjI5MTYKK21zZ2lkICJpbmNvbnNpc3RlbnQgREhDUHY2IHJhbmdlIgorbXNnc3RyICJJbmtvbnNpc3RlbnRlciBESENQdjYtQmVyZWljaCIKKworIzogb3B0aW9uLmM6MjkyNworbXNnaWQgInByZWZpeCBtdXN0IGJlIHplcm8gd2l0aCBcImNvbnN0cnVjdG9yOlwiIGFyZ3VtZW50IgorbXNnc3RyICJQcmVmaXggbXVzcyBtaXQgZGVtIFwiY29uc3RydWN0b3I6XCIgQXJndW1lbnQgTnVsbCBzZWluIgorCisjOiBvcHRpb24uYzozMDQwIG9wdGlvbi5jOjMwODgKK21zZ2lkICJiYWQgaGV4IGNvbnN0YW50IgorbXNnc3RyICJGYWxzY2hlciBIZXh3ZXJ0IgorCisjOiBvcHRpb24uYzozMDYyCittc2dpZCAiY2Fubm90IG1hdGNoIHRhZ3MgaW4gLS1kaGNwLWhvc3QiCittc2dzdHIgIkthbm4gZGllIFRhZ3MgaW4gLS1kaGNwLWhvc3QgbmljaHQgYWJnbGVpY2hlbiIKKworIzogb3B0aW9uLmM6MzExMAorIywgYy1mb3JtYXQKK21zZ2lkICJkdXBsaWNhdGUgZGhjcC1ob3N0IElQIGFkZHJlc3MgJXMiCittc2dzdHIgImRvcHBlbHRlIGRoY3AtaG9zdCBJUC1BZHJlc3NlICVzIgorCisjOiBvcHRpb24uYzozMTY4Cittc2dpZCAiYmFkIERIQ1AgaG9zdCBuYW1lIgorbXNnc3RyICJ1bnp1bMOkc3NpZ2VyIERIQ1AtSG9zdG5hbWUiCisKKyM6IG9wdGlvbi5jOjMyNTAKK21zZ2lkICJiYWQgdGFnLWlmIgorbXNnc3RyICJ1bnp1bMOkc3NpZ2UgYmVkaW5ndGUgTWFya2UgKHRhZy1pZikiCisKKyM6IG9wdGlvbi5jOjM2MDcgb3B0aW9uLmM6NDAzMAorbXNnaWQgImludmFsaWQgcG9ydCBudW1iZXIiCittc2dzdHIgInVuenVsw6Rzc2lnZSBQb3J0bnVtbWVyIgorCisjOiBvcHRpb24uYzozNjY5Cittc2dpZCAiYmFkIGRoY3AtcHJveHkgYWRkcmVzcyIKK21zZ3N0ciAiRmVobGVyaGFmdGUgREhDUC1Qcm94eS1BZHJlc3NlIgorCisjOiBvcHRpb24uYzozNjk1Cittc2dpZCAiQmFkIGRoY3AtcmVsYXkiCittc2dzdHIgInVuenVsw6Rzc2lnZXIgZGhjcC1yZWxheSIKKworIzogb3B0aW9uLmM6MzczNgorbXNnaWQgImJhZCBSQS1wYXJhbXMiCittc2dzdHIgInVuenVsw6Rzc2lnZSBSQS1QYXJhbWV0ZXIiCisKKyM6IG9wdGlvbi5jOjM3NDUKK21zZ2lkICJiYWQgRFVJRCIKK21zZ3N0ciAidW56dWzDpHNzaWdlIERVSUQiCisKKyM6IG9wdGlvbi5jOjM3ODcKK21zZ2lkICJpbnZhbGlkIGFsaWFzIHJhbmdlIgorbXNnc3RyICJ1bnp1bMOkc3NpZ2VyIEFsaWFzLUJlcmVpY2giCisKKyM6IG9wdGlvbi5jOjM4NDEgb3B0aW9uLmM6Mzg1MworbXNnaWQgImJhZCBDTkFNRSIKK21zZ3N0ciAidW56dWzDpHNzaWdlciBDTkFNRSIKKworIzogb3B0aW9uLmM6Mzg1NworbXNnaWQgImR1cGxpY2F0ZSBDTkFNRSIKK21zZ3N0ciAiZG9wcGVsdGVyIENOQU1FIgorCisjOiBvcHRpb24uYzozODgwCittc2dpZCAiYmFkIFBUUiByZWNvcmQiCittc2dzdHIgInVuenVsw6Rzc2lnZXIgUFRSLUVpbnRyYWciCisKKyM6IG9wdGlvbi5jOjM5MTEKK21zZ2lkICJiYWQgTkFQVFIgcmVjb3JkIgorbXNnc3RyICJ1bnp1bMOkc3NpZ2VyIE5BUFRSLUVpbnRyYWciCisKKyM6IG9wdGlvbi5jOjM5NDUKK21zZ2lkICJiYWQgUlIgcmVjb3JkIgorbXNnc3RyICJ1bnp1bMOkc3NpZ2VyIFJSLUVpbnRyYWciCisKKyM6IG9wdGlvbi5jOjM5NzUKK21zZ2lkICJiYWQgVFhUIHJlY29yZCIKK21zZ3N0ciAidW56dWzDpHNzaWdlciBUWFQtRWludHJhZyIKKworIzogb3B0aW9uLmM6NDAxNgorbXNnaWQgImJhZCBTUlYgcmVjb3JkIgorbXNnc3RyICJ1bnp1bMOkc3NpZ2VyIFNSVi1FaW50cmFnIgorCisjOiBvcHRpb24uYzo0MDIzCittc2dpZCAiYmFkIFNSViB0YXJnZXQiCittc2dzdHIgInVuenVsw6Rzc2lnZXMgU1JWLVppZWwiCisKKyM6IG9wdGlvbi5jOjQwMzcKK21zZ2lkICJpbnZhbGlkIHByaW9yaXR5IgorbXNnc3RyICJ1bnp1bMOkc3NpZ2UgUHJpb3JpdMOkdCIKKworIzogb3B0aW9uLmM6NDA0MAorbXNnaWQgImludmFsaWQgd2VpZ2h0IgorbXNnc3RyICJ1bnp1bMOkc3NpZ2UgV2ljaHR1bmciCisKKyM6IG9wdGlvbi5jOjQwNjQKK21zZ2lkICJCYWQgaG9zdC1yZWNvcmQiCittc2dzdHIgInVuenVsw6Rzc2lnZXIgaG9zdC1yZWNvcmQiCisKKyM6IG9wdGlvbi5jOjQwODgKK21zZ2lkICJCYWQgbmFtZSBpbiBob3N0LXJlY29yZCIKK21zZ3N0ciAiVW56dWzDpHNzaWdlciBOYW1lIGluIGhvc3QtcmVjb3JkIgorCisjOiBvcHRpb24uYzo0MTUzCittc2dpZCAiYmFkIHRydXN0IGFuY2hvciIKK21zZ3N0ciAidW56dWzDpHNzaWdlciBWZXJ0cmF1ZW5zdXJzcHJ1bmcgKFRydXN0IEFuY2hvcikiCisKKyM6IG9wdGlvbi5jOjQxNjcKK21zZ2lkICJiYWQgSEVYIGluIHRydXN0IGFuY2hvciIKK21zZ3N0ciAidW56dWzDpHNzaWdlciBIZXh3ZXJ0IGluIFZlcnRyYXVlbnN1cnNwcnVuZyAoVHJ1c3QgQW5jaG9yKSIKKworIzogb3B0aW9uLmM6NDE3NworbXNnaWQgInVuc3VwcG9ydGVkIG9wdGlvbiAoY2hlY2sgdGhhdCBkbnNtYXNxIHdhcyBjb21waWxlZCB3aXRoIERIQ1AvVEZUUC9ETlNTRUMvREJ1cyBzdXBwb3J0KSIKK21zZ3N0ciAiTmljaHQgdW50ZXJzdMO8dHp0ZSBPcHRpb24gKHByw7xmZW4gU2llLCBvYiBETlNNYXNxIG1pdCBESENQL1RGVFAvRE5TU0VDL0RCdXMtVW50ZXJzdMO8dHp1bmcgw7xiZXJzZXR6dCB3dXJkZSkiCisKKyM6IG9wdGlvbi5jOjQyMzcKK21zZ2lkICJtaXNzaW5nIFwiIgorbXNnc3RyICJmZWhsZW5kZSBcXFwiIgorCisjOiBvcHRpb24uYzo0Mjk0Cittc2dpZCAiYmFkIG9wdGlvbiIKK21zZ3N0ciAidW56dWzDpHNzaWdlIE9wdGlvbiIKKworIzogb3B0aW9uLmM6NDI5NgorbXNnaWQgImV4dHJhbmVvdXMgcGFyYW1ldGVyIgorbXNnc3RyICLDvGJlcnNjaMO8c3NpZ2VyIFBhcmFtZXRlciIKKworIzogb3B0aW9uLmM6NDI5OAorbXNnaWQgIm1pc3NpbmcgcGFyYW1ldGVyIgorbXNnc3RyICJmZWhsZXIgUGFyYW1ldGVyIgorCisjOiBvcHRpb24uYzo0MzAwCittc2dpZCAiaWxsZWdhbCBvcHRpb24iCittc2dzdHIgInVuenVsw6Rzc2lnZSBPcHRpb24iCisKKyM6IG9wdGlvbi5jOjQzMDcKK21zZ2lkICJlcnJvciIKK21zZ3N0ciAiRmVobGVyIgorCisjOiBvcHRpb24uYzo0MzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiBhdCBsaW5lICVkIG9mICVzIgorbXNnc3RyICIgaW4gWmVpbGUgJWQgdm9uICVzIgorCisjOiBvcHRpb24uYzo0MzI0IG9wdGlvbi5jOjQ1NzEgb3B0aW9uLmM6NDYwNworIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkICVzIgorbXNnc3RyICIlcyBnZWxlc2VuIgorCisjOiBvcHRpb24uYzo0Mzg3IG9wdGlvbi5jOjQ1MTAgdGZ0cC5jOjcxNQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAlczogJXMiCittc2dzdHIgImthbm4gJXMgbmljaHQgbGVzZW46ICVzIgorCisjOiBvcHRpb24uYzo0Njc2Cittc2dpZCAianVuayBmb3VuZCBpbiBjb21tYW5kIGxpbmUiCittc2dzdHIgIk1pc3QgaW4gZGVyIEtvbW1hbmRvemVpbGUgZ2VmdW5kZW4iCisKKyM6IG9wdGlvbi5jOjQ3MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG5zbWFzcSB2ZXJzaW9uICVzICAlc1xuIgorbXNnc3RyICJEbnNtYXNxIFZlcnNpb24gJXMgICVzXG4iCisKKyM6IG9wdGlvbi5jOjQ3MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvbXBpbGUgdGltZSBvcHRpb25zOiAlc1xuIgorIlxuIgorbXNnc3RyICIiCisiS29tcGlsaWVydW5ncy1PcHRpb25lbiAlc1xuIgorIlxuIgorCisjOiBvcHRpb24uYzo0NzEzCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLlxuIgorbXNnc3RyICJGw7xyIGRpZXNlIFNvZnR3YXJlIHdpcmQgQUJTT0xVVCBLRUlORSBHQVJBTlRJRSBnZXfDpGhydC5cbiIKKworIyBGSVhNRTogdGhpcyBtdXN0IGJlIG9uZSBsb25nIHN0cmluZyEgLS0gTUEKKyM6IG9wdGlvbi5jOjQ3MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG5zbWFzcSBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdFxuIgorbXNnc3RyICJEbnNtYXNxIGlzdCBmcmVpZSBTb2Z0d2FyZSwgdW5kIGR1IGJpc3Qgd2lsbGtvbW1lbiBlcyB3ZWl0ZXIgenUgdmVydGVpbGVuXG4iCisKKyM6IG9wdGlvbi5jOjQ3MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyIG9yIDMuXG4iCittc2dzdHIgInVudGVyIGRlbiBCZWRpbmd1bmdlbiBkZXIgR05VIEdlbmVyYWwgUHVibGljIExpemVueiwgVmVyc2lvbiAyIG9kZXIgMy5cbiIKKworIzogb3B0aW9uLmM6NDcyNgorbXNnaWQgInRyeSAtLWhlbHAiCittc2dzdHIgInZlcnN1Y2hlbiBTaWUgLS1oZWxwIgorCisjOiBvcHRpb24uYzo0NzI4Cittc2dpZCAidHJ5IC13IgorbXNnc3RyICJ2ZXJzdWNoZW4gU2llIC13IgorCisjOiBvcHRpb24uYzo0NzMwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb21tYW5kIGxpbmUgb3B0aW9uczogJXMiCittc2dzdHIgInVuenVsw6Rzc2lnZSBPcHRpb25lbiBhdWYgZGVyIEJlZmVobHN6ZWlsZTogJXMiCisKKyM6IG9wdGlvbi5jOjQ3OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ05BTUUgbG9vcCBpbnZvbHZpbmcgJXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDgzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZ2V0IGhvc3QtbmFtZTogJXMiCittc2dzdHIgImthbm4gSG9zdG5hbWVuIG5pY2h0IGVybWl0dGVsbjogJXMiCisKKyM6IG9wdGlvbi5jOjQ4NjIKK21zZ2lkICJvbmx5IG9uZSByZXNvbHYuY29uZiBmaWxlIGFsbG93ZWQgaW4gbm8tcG9sbCBtb2RlLiIKK21zZ3N0ciAibWl0IC1uLy0tbm8tcG9sbCBpc3QgbnVyIGVpbmUgcmVzb2x2LmNvbmYtRGF0ZWkgenVsw6Rzc2lnLiIKKworIzogb3B0aW9uLmM6NDg3MgorbXNnaWQgIm11c3QgaGF2ZSBleGFjdGx5IG9uZSByZXNvbHYuY29uZiB0byByZWFkIGRvbWFpbiBmcm9tLiIKK21zZ3N0ciAiVW0gZGllIERvbcOkbmUgenUgbGVzZW4sIG11c3MgZ2VuYXUgZWluZSByZXNvbHYuY29uZi1EYXRlaSB2ZXJ3ZW5kZXQgd2VyZGVuLiIKKworIzogb3B0aW9uLmM6NDg3NSBuZXR3b3JrLmM6MTYxMiBkaGNwLmM6ODE2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkICVzOiAlcyIKK21zZ3N0ciAia29ubnRlICVzIG5pY2h0IGxlc2VuOiAlcyIKKworIzogb3B0aW9uLmM6NDg5MgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzZWFyY2ggZGlyZWN0aXZlIGZvdW5kIGluICVzIgorbXNnc3RyICJrZWluZSBcInNlYXJjaFwiLUFud2Vpc3VuZyBpbiAlcyBnZWZ1bmRlbiIKKworIzogb3B0aW9uLmM6NDkxMworbXNnaWQgInRoZXJlIG11c3QgYmUgYSBkZWZhdWx0IGRvbWFpbiB3aGVuIC0tZGhjcC1mcWRuIGlzIHNldCIKK21zZ3N0ciAiRXMgbXVzcyBlaW5lIHN0YW5kYXJkIERvbWFpbiBnZXNldHp0IHNlaW4sIHdlbm4gLS1kaGNwLWZxZG4gZ2VzZXR6dCBpc3QiCisKKyM6IG9wdGlvbi5jOjQ5MjIKK21zZ2lkICJzeW50YXggY2hlY2sgT0siCittc2dzdHIgIlN5bnRheHByw7xmdW5nIE9LIgorCisjOiBmb3J3YXJkLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZW5kIHBhY2tldDogJXMiCittc2dzdHIgIkZlaGxnZXNjaGxhZ2VuLCBmb2xnZW5kZXMgUGFrZXQgenUgc2VuZGVuOiAlcyIKKworIzogZm9yd2FyZC5jOjU5NworbXNnaWQgImRpc2NhcmRpbmcgRE5TIHJlcGx5OiBzdWJuZXQgb3B0aW9uIG1pc21hdGNoIgorbXNnc3RyICJWZXJ3ZXJmZSBETlMgQW50d29ydDogU3VibmV0b3B0aW9uIHN0aW1tdCBuaWNodCDDvGJlcnJlaW4iCisKKyM6IGZvcndhcmQuYzo2NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibmFtZXNlcnZlciAlcyByZWZ1c2VkIHRvIGRvIGEgcmVjdXJzaXZlIHF1ZXJ5IgorbXNnc3RyICJOYW1lbnNzZXJ2ZXIgJXMgaGF0IGVpbmUgcmVrdXJzaXZlIEFuZnJhZ2UgdmVyd2VpZ2VydCIKKworIzogZm9yd2FyZC5jOjY4MworIywgYy1mb3JtYXQKK21zZ2lkICJwb3NzaWJsZSBETlMtcmViaW5kIGF0dGFjayBkZXRlY3RlZDogJXMiCittc2dzdHIgIm3DtmdsaWNoZW4gRE5TLVJlYmluZC1BbmdyaWZmIGVudGRlY2t0OiAlcyIKKworIzogZm9yd2FyZC5jOjEyNDQgZm9yd2FyZC5jOjE2ODEKK21zZ2lkICJJZ25vcmluZyBxdWVyeSBmcm9tIG5vbi1sb2NhbCBuZXR3b3JrIgorbXNnc3RyICJJZ25vcmllcmUgQW5mcmFnZW4gdm9tIG5pY2h0IGxva2FsZW4gTmV0endlcmsiCisKKyM6IGZvcndhcmQuYzoyMTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgRE5TIHF1ZXJpZXMgcmVhY2hlZCAobWF4OiAlZCkiCittc2dzdHIgIk1heGltYWxlIEFuemFobCBhbiBuZWJlbmzDpHVmaWdlciBETlMtQW5mcmFnZW4gZXJyZWljaHQgKE1heDogJWQpIgorCisjOiBuZXR3b3JrLmM6NzIwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgbGlzdGVuaW5nIHNvY2tldCBmb3IgJXM6ICVzIgorbXNnc3RyICJLb25udGUgRW1wZmFuZ3MtU29ja2V0IGbDvHIgJXM6ICVzIG5pY2h0IGVyemV1Z2VuIgorCisjOiBuZXR3b3JrLmM6MTAzMQorIywgYy1mb3JtYXQKK21zZ2lkICJMT1VEIFdBUk5JTkc6IGxpc3RlbmluZyBvbiAlcyBtYXkgYWNjZXB0IHJlcXVlc3RzIHZpYSBpbnRlcmZhY2VzIG90aGVyIHRoYW4gJXMiCittc2dzdHIgIkxPVUQgV0FSTklORzogRGFzIEFiaMO2cmVuIHZvbiAlcyBrYW5uIGRpZSBBbmZyYWdlbiBhdWYgZGVyIFNjaG5pdHRzdGVsbGUgYWt6ZXB0aWVyZW4gYW5kZXJzIGFscyAlcyIKKworIzogbmV0d29yay5jOjEwMzgKK21zZ2lkICJMT1VEIFdBUk5JTkc6IHVzZSAtLWJpbmQtZHluYW1pYyByYXRoZXIgdGhhbiAtLWJpbmQtaW50ZXJmYWNlcyB0byBhdm9pZCBETlMgYW1wbGlmaWNhdGlvbiBhdHRhY2tzIHZpYSB0aGVzZSBpbnRlcmZhY2UocykiCittc2dzdHIgIkxPVUQgV0FSTklORzogRXMgc29sbHRlIC0tYmluZC1keW5hbWljIGFuc3RhdHQgLS1iaW5kLWludGVyZmFjZXMgYmVudXR6dCB3ZXJkZW4sIHVtIEROUy1WZXJzdMOkcmt1bmdzYW5ncmlmZmUgYXVmIGRpZXNlbiBTY2huaXR0c3RlbGxlbiB6dSB1bnRlcmJpbmRlbiIKKworIzogbmV0d29yay5jOjEwNDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IHVzaW5nIGludGVyZmFjZSAlcyBpbnN0ZWFkIgorbXNnc3RyICJXYXJudW5nOiAlcyBuaWNodCB6dWdyZWlmYmFyIgorCisjOiBuZXR3b3JrLmM6MTA1NgorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBubyBhZGRyZXNzZXMgZm91bmQgZm9yIGludGVyZmFjZSAlcyIKK21zZ3N0ciAiV2FybnVuZzogS2VpbmUgQWRyZXNzZSBmw7xyIGRpZSBTY2huaXR0c3RlbGxlICVzIGdlZnVuZGVuIgorCisjOiBuZXR3b3JrLmM6MTExNAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnRlcmZhY2UgJXMgZmFpbGVkIHRvIGpvaW4gREhDUHY2IG11bHRpY2FzdCBncm91cDogJXMiCittc2dzdHIgIlNjaG5pdHRzdGVsbGUgJXMga29ubnRlIERIQ1B2Ni1NdWx0aWNhc3QtR3J1cHBlIG5pY2h0IGJlaXRyZXRlbjogJXMiCisKKyM6IG5ldHdvcmsuYzoxMTE5Cittc2dpZCAidHJ5IGluY3JlYXNpbmcgL3Byb2Mvc3lzL25ldC9jb3JlL29wdG1lbV9tYXgiCittc2dzdHIgIlZlcnN1Y2hlIC9wcm9jL3N5cy9uZXQvY29yZS9vcHRtZW1fbWF4IHp1IGVyaMO2aGVuIgorCisjOiBuZXR3b3JrLmM6MTMyMgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYmluZCBzZXJ2ZXIgc29ja2V0IGZvciAlczogJXMiCittc2dzdHIgImtvbm50ZSBuaWNodCBhbiBTZXJ2ZXItU29ja2V0IGbDvHIgJXMgYmluZGVuOiAlcyIKKworIzogbmV0d29yay5jOjE1MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgbmFtZXNlcnZlciAlcyAtIGxvY2FsIGludGVyZmFjZSIKK21zZ3N0ciAiaWdub3JpZXJlIE5hbWVuc3NlcnZlciAlcyAtIGxva2FsZSBTY2huaXR0c3RlbGxlIgorCisjOiBuZXR3b3JrLmM6MTUyOAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBuYW1lc2VydmVyICVzIC0gY2Fubm90IG1ha2UvYmluZCBzb2NrZXQ6ICVzIgorbXNnc3RyICJpZ25vcmllcmUgTmFtZW5zc2VydmVyICVzIC0ga2FubiBTb2NrZXQgbmljaHQgZXJ6ZXVnZW4vYmluZGVuOiAlcyIKKworIzogbmV0d29yay5jOjE1NDgKK21zZ2lkICIobm8gRE5TU0VDKSIKK21zZ3N0ciAiKGtlaW4gRE5TU0VDKSIKKworIyBGSVhNRTogdGhpcyBpc24ndCB0cmFuc2xhdGFibGUgLSBhbHdheXMgcHJvdmlkZSBmdWxsIHN0cmluZ3MsIGRvIG5vdCBhc3NlbWJsZSB5b3Vyc2VsZiEgLS0gTUEKKyM6IG5ldHdvcmsuYzoxNTUxCittc2dpZCAidW5xdWFsaWZpZWQiCittc2dzdHIgInVucXVhbGlmaXppZXJ0IgorCisjOiBuZXR3b3JrLmM6MTU1MQorbXNnaWQgIm5hbWVzIgorbXNnc3RyICJOYW1lbiIKKworIzogbmV0d29yay5jOjE1NTMKK21zZ2lkICJkZWZhdWx0IgorbXNnc3RyICJTdGFuZGFyZCIKKworIzogbmV0d29yay5jOjE1NTUKK21zZ2lkICJkb21haW4iCittc2dzdHIgIkRvbWFpbiIKKworIzogbmV0d29yay5jOjE1NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgbG9jYWwgYWRkcmVzc2VzIG9ubHkgZm9yICVzICVzIgorbXNnc3RyICJCZW51dHplIGxva2FsZSBBZHJlc3NlbiBudXIgZsO8ciAlcyAlcyIKKworIzogbmV0d29yay5jOjE1NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgc3RhbmRhcmQgbmFtZXNlcnZlcnMgZm9yICVzICVzIgorbXNnc3RyICJCZW51dHplIHN0YW5kYXJkIE5hbWVuc3NlcnZlciBmw7xyICVzICVzIgorCisjOiBuZXR3b3JrLmM6MTU2NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyBuYW1lc2VydmVyICVzIyVkIGZvciAlcyAlcyAlcyIKK21zZ3N0ciAiQmVudXR6ZSBOYW1lbnNzZXJ2ZXIgJXMjJWQgZsO8ciAlcyAlcyAlcyIKKworIzogbmV0d29yay5jOjE1NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTk9UIHVzaW5nIG5hbWVzZXJ2ZXIgJXMjJWQgLSBxdWVyeSBsb29wIGRldGVjdGVkIgorbXNnc3RyICJCZW51dHplIE5hbWVuc3NlcnZlciAlcyMlZCBOSUNIVCAtIEFuZnJhZ2Vuc2NobGVpZmUgZmVzdGdldGVsbHQiCisKKyM6IG5ldHdvcmsuYzoxNTczCisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIG5hbWVzZXJ2ZXIgJXMjJWQodmlhICVzKSIKK21zZ3N0ciAiQmVudXR6ZSBOYW1lbnNzZXJ2ZXIgJXMjJWQodmlhICVzKSIKKworIzogbmV0d29yay5jOjE1NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgbmFtZXNlcnZlciAlcyMlZCIKK21zZ3N0ciAiQmVudXR6ZSBOYW1lbnNzZXJ2ZXIgJXMjJWQiCisKKyM6IG5ldHdvcmsuYzoxNTgwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyAlZCBtb3JlIGxvY2FsIGFkZHJlc3NlcyIKK21zZ3N0ciAiQmVudXR6ZSAlZCBtZWhyIE5hbWVuc3NlcnZlciIKKworIzogbmV0d29yay5jOjE1ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgJWQgbW9yZSBuYW1lc2VydmVycyIKK21zZ3N0ciAiQmVudXR6ZSAlZCBtZWhyIE5hbWVuc3NlcnZlciIKKworIzogZG5zbWFzcS5jOjE2NgorbXNnaWQgImRoY3AtaG9zdHNkaXIsIGRoY3Atb3B0c2RpciBhbmQgaG9zdHNkaXIgYXJlIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybSIKK21zZ3N0ciAiZGhjcC1ob3N0c2RpciwgZGhjcC1vcHRzZGlyIHVuZCBob3N0c2RpciBzaW5kIGF1ZiBkaWVzZXIgUGxhdHRmb3JtIG5pY2h0IHVudGVyc3TDvHp0IgorCisjOiBkbnNtYXNxLmM6MTgxCittc2dpZCAibm8gcm9vdCB0cnVzdCBhbmNob3IgcHJvdmlkZWQgZm9yIEROU1NFQyIKK21zZ3N0ciAiS2VpbmUgUm9vdC1WZXJ0cmF1ZW5zdXJzcHLDvG5nZSAoUm9vdCBUcnVzdCBBbmNob3IpIGbDvHIgRE5TU0VDIHZlcmbDvGdiYXIiCisKKyM6IGRuc21hc3EuYzoxODQKK21zZ2lkICJjYW5ub3QgcmVkdWNlIGNhY2hlIHNpemUgZnJvbSBkZWZhdWx0IHdoZW4gRE5TU0VDIGVuYWJsZWQiCittc2dzdHIgIkthbm4gZGllIFN0YW5kYXJkIENhY2hlZ3LDtsOfZSBuaWNodCB2ZXJrbGVpbmVybiwgd2VubiBETlNTRUMgYWt0aXZpZXJ0IGlzdCIKKworIzogZG5zbWFzcS5jOjE4NgorbXNnaWQgIkROU1NFQyBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9ETlNTRUMgaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICJETlNTRUMgbmljaHQgdmVyZsO8Z2Jhcjogc2V0emVuIFNpZSBIQVZFX0ROU1NFQyBpbiBzcmMvY29uZmlnLmgiCisKKyM6IGRuc21hc3EuYzoxOTIKK21zZ2lkICJURlRQIHNlcnZlciBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9URlRQIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAiVEZUUC1TZXJ2ZXIgbmljaHQgdmVyZsO8Z2Jhciwgc2V0emVuIFNpZSBIQVZFX1RGVFAgaW4gc3JjL2NvbmZpZy5oIgorCisjOiBkbnNtYXNxLmM6MTk3Cittc2dpZCAiY2Fubm90IHVzZSAtLWNvbm50cmFjayBBTkQgLS1xdWVyeS1wb3J0IgorbXNnc3RyICJLYW5uIG5pY2h0IC0tY29ubnRyYWNrIFVORCAtLXF1ZXJ5LXBvcnQgZWluc2V0emVuIgorCisjOiBkbnNtYXNxLmM6MjAwCittc2dpZCAiY29ubnRyYWNrIHN1cHBvcnQgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfQ09OTlRSQUNLIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAiQ29ubnRyYWNrLVVudGVyc3TDvHR6dW5nIG5pY2h0IHZlcmbDvGdiYXI6IEFrdGl2aWVyZSBIQVZFX0NPTk5UUkFDSyBpbiBzcmMvY29uZmlnLmgiCisKKyM6IGRuc21hc3EuYzoyMDUKK21zZ2lkICJhc3luY2hyb25vdXMgbG9nZ2luZyBpcyBub3QgYXZhaWxhYmxlIHVuZGVyIFNvbGFyaXMiCittc2dzdHIgImFzeW5jaHJvbmUgUHJvdG9rb2xsaWVydW5nIHVudGVyIFNvbGFyaXMgbmljaHQgdmVyZsO8Z2JhciIKKworIzogZG5zbWFzcS5jOjIxMAorbXNnaWQgImFzeW5jaHJvbm91cyBsb2dnaW5nIGlzIG5vdCBhdmFpbGFibGUgdW5kZXIgQW5kcm9pZCIKK21zZ3N0ciAiQXN5bmNocm9uZSBQcm90b2tvbGxpZXJ1bmcgdW50ZXIgQW5kcm9pZCBuaWNodCB2ZXJmw7xnYmFyIgorCisjOiBkbnNtYXNxLmM6MjE1Cittc2dpZCAiYXV0aG9yaXRhdGl2ZSBETlMgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfQVVUSCBpbiBzcmMvY29uZmlnLmgiCittc2dzdHIgIkF1dGhvcml0YXRpdmVzIEROUyBuaWNodCB2ZXJmw7xnYmFyOiBFcyBtdXNzIEhBVkVfQVVUSCBpbiBzcmMvY29uZmlnLmggZ2VzZXR6dCBzZWluIgorCisjOiBkbnNtYXNxLmM6MjIwCittc2dpZCAibG9vcCBkZXRlY3Rpb24gbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfTE9PUCBpbiBzcmMvY29uZmlnLmgiCittc2dzdHIgIkxvb3AtRXJrZW5udW5nIG5pY2h0IHZlcmbDvGdiYXIsIEFrdGl2aWVyZSBIQVZFX0xPT1AgaW4gc3JjL2NvbmZpZy5oIgorCisjOiBkbnNtYXNxLmM6MjI3Cittc2dpZCAibWF4X3BvcnQgY2Fubm90IGJlIHNtYWxsZXIgdGhhbiBtaW5fcG9ydCIKK21zZ3N0ciAibWF4X3BvcnQgZGFyZiBuaWNodCBrbGVpbmVyIGFscyBtaW5fcG9ydCBzZWluIgorCisjOiBkbnNtYXNxLmM6MjM0Cittc2dpZCAiem9uZSBzZXJpYWwgbXVzdCBiZSBjb25maWd1cmVkIGluIC0tYXV0aC1zb2EiCittc2dzdHIgIlpvbmVuIFNlcmllbm51bW1lciBtdXNzIG1pdCAtLWF1dGgtc29hIGtvbmZpZ3VyaWVydCB3ZXJkZW4iCisKKyM6IGRuc21hc3EuYzoyNTIKK21zZ2lkICJkaGNwLXJhbmdlIGNvbnN0cnVjdG9yIG5vdCBhdmFpbGFibGUgb24gdGhpcyBwbGF0Zm9ybSIKK21zZ3N0ciAiZGhjcC1yYW5nZSBLb25zdHJ1a3RvciBpc3QgYXVmIGRpZXNlciBQbGF0dGZvcm0gbmljaHQgdmVyZsO8YmFyIgorCisjOiBkbnNtYXNxLmM6Mjk4Cittc2dpZCAiY2Fubm90IHNldCAtLWJpbmQtaW50ZXJmYWNlcyBhbmQgLS1iaW5kLWR5bmFtaWMiCittc2dzdHIgIkthbm4gbmljaHQgLS1iaW5kLWludGVyZmFjZXMgdW5kIC0tYmluZC1keW5hbWljIHNldHplbiIKKworIzogZG5zbWFzcS5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluZCBsaXN0IG9mIGludGVyZmFjZXM6ICVzIgorbXNnc3RyICJrb25udGUgU2Nobml0c3RlbGxlbmxpc3RlIG5pY2h0IGJlemllaGVuOiAlcyIKKworIzogZG5zbWFzcS5jOjMxMAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGludGVyZmFjZSAlcyIKK21zZ3N0ciAidW5iZWthbm50ZSBTY2huaXR0c3RlbGxlICVzIgorCisjOiBkbnNtYXNxLmM6Mzc0IGRuc21hc3EuYzoxMDM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkRCdXMgZXJyb3I6ICVzIgorbXNnc3RyICJEQnVzLUZlaGxlcjogJXMiCisKKyM6IGRuc21hc3EuYzozNzcKK21zZ2lkICJEQnVzIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0RCVVMgaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICJEQnVzIG5pY2h0IHZlcmbDvGdiYXI6IHNldHplbiBTaWUgSEFWRV9EQlVTIGluIHNyYy9jb25maWcuaCIKKworIzogZG5zbWFzcS5jOjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHVzZXIgb3IgZ3JvdXA6ICVzIgorbXNnc3RyICJVbmJla2FubnRlciBCZW51dHplciBvZGVyIEdydXBwZTogJXMiCisKKyM6IGRuc21hc3EuYzo0NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZGlyIHRvIGZpbGVzeXN0ZW0gcm9vdDogJXMiCittc2dzdHIgImthbm4gbmljaHQgaW5zIFd1cnplbHZlcnplaWNobmlzIGRlcyBEYXRlaXN5c3RlbXMgd2VjaHNlbG46ICVzIgorCisjIEZJWE1FOiB0aGlzIGFuZCB0aGUgbmV4dCB3b3VsZCBuZWVkIGNvbW1hcyBhZnRlciB0aGUgdmVyc2lvbgorIzogZG5zbWFzcS5jOjcxNgorIywgYy1mb3JtYXQKK21zZ2lkICJzdGFydGVkLCB2ZXJzaW9uICVzIEROUyBkaXNhYmxlZCIKK21zZ3N0ciAiZ2VzdGFydGV0LCBWZXJzaW9uICVzLCBETlMgYWJnZXNjaGFsdGV0IgorCisjOiBkbnNtYXNxLmM6NzIwCisjLCBjLWZvcm1hdAorbXNnaWQgInN0YXJ0ZWQsIHZlcnNpb24gJXMgY2FjaGVzaXplICVkIgorbXNnc3RyICJnZXN0YXJ0ZXQsIFZlcnNpb24gJXMsIENhY2hlZ3LDtsOfZSAlZCIKKworIzogZG5zbWFzcS5jOjcyMgorIywgYy1mb3JtYXQKK21zZ2lkICJzdGFydGVkLCB2ZXJzaW9uICVzIGNhY2hlIGRpc2FibGVkIgorbXNnc3RyICJHZXN0YXJ0ZXQsIFZlcnNpb24gJXMgQ2FjaGUgZGVha3RpdmllcnQiCisKKyM6IGRuc21hc3EuYzo3MjUKK21zZ2lkICJETlMgc2VydmljZSBsaW1pdGVkIHRvIGxvY2FsIHN1Ym5ldHMiCittc2dzdHIgIkROUy1EaWVuc3QgYXVmIGxva2FsZSBTdWJuZXR6ZSBlaW5nZXNjaHLDpG5rdCIKKworIzogZG5zbWFzcS5jOjcyOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb21waWxlIHRpbWUgb3B0aW9uczogJXMiCittc2dzdHIgIsOcYmVyc2V0enVuZ3NvcHRpb25lbjogJXMiCisKKyM6IGRuc21hc3EuYzo3MzQKK21zZ2lkICJEQnVzIHN1cHBvcnQgZW5hYmxlZDogY29ubmVjdGVkIHRvIHN5c3RlbSBidXMiCittc2dzdHIgIkRCdXMtVW50ZXJzdMO8dHp1bmcgZWluZ2VzY2hhbHRldDogbWl0IFN5c3RlbWJ1cyB2ZXJidW5kZW4iCisKKyM6IGRuc21hc3EuYzo3MzYKK21zZ2lkICJEQnVzIHN1cHBvcnQgZW5hYmxlZDogYnVzIGNvbm5lY3Rpb24gcGVuZGluZyIKK21zZ3N0ciAiREJ1cy1VbnRlcnN0w7x0enVuZyBlaW5nZXNjaGFsdGV0OiB3YXJ0ZSBhdWYgU3lzdGVtYnVzLVZlcmJpbmR1bmciCisKKyM6IGRuc21hc3EuYzo3NTQKK21zZ2lkICJETlNTRUMgdmFsaWRhdGlvbiBlbmFibGVkIgorbXNnc3RyICJETlNTRUMtVmFsaWRpZXJ1bmcgYWt0aXZpZXJ0IgorCisjOiBkbnNtYXNxLmM6NzU4Cittc2dpZCAiRE5TU0VDIHNpZ25hdHVyZSB0aW1lc3RhbXBzIG5vdCBjaGVja2VkIHVudGlsIGZpcnN0IGNhY2hlIHJlbG9hZCIKK21zZ3N0ciAiRE5TU0VDIFNpZ25hdHVyLVplaXRzdGVtcGVsIHdlcmRlbiBlcnN0IGFiIGRlbSBlcnN0ZW4gTmV1bGFkZW4gZGVzIENhY2hlcyDDvGJlcnByw7xmdCIKKworIzogZG5zbWFzcS5jOjc2MQorbXNnaWQgIkROU1NFQyBzaWduYXR1cmUgdGltZXN0YW1wcyBub3QgY2hlY2tlZCB1bnRpbCBzeXN0ZW0gdGltZSB2YWxpZCIKK21zZ3N0ciAiRE5TU0VDIFNpZ25hdHVyLVplaXRzdGVtcGVsIHdlcmRlbiBlcnN0IMO8YmVycHLDvGZ0LCBzb2JhbGQgZGllIFN5c3RlbXVocnplaXQgZ8O8bHRpZyBpc3QiCisKKyM6IGRuc21hc3EuYzo3NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogZmFpbGVkIHRvIGNoYW5nZSBvd25lciBvZiAlczogJXMiCittc2dzdHIgIldhcm51bmc6IGtvbm50ZSBkZW4gQmVzaXR6ZXIgdm9uICVzIG5pY2h0IMOkbmRlcm46ICVzIgorCisjOiBkbnNtYXNxLmM6NzcwCittc2dpZCAic2V0dGluZyAtLWJpbmQtaW50ZXJmYWNlcyBvcHRpb24gYmVjYXVzZSBvZiBPUyBsaW1pdGF0aW9ucyIKK21zZ3N0ciAiQWt0aXZpZXJlIC0tYmluZC1pbnRlcmZhY2VzIHdlZ2VuIEVpbnNjaHLDpG5rdW5nZW4gZGVzIEJldHJpZWJzc3lzdGVtcyIKKworIzogZG5zbWFzcS5jOjc4MgorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBpbnRlcmZhY2UgJXMgZG9lcyBub3QgY3VycmVudGx5IGV4aXN0IgorbXNnc3RyICJXYXJudW5nOiBTY2huaXR0c3RlbGxlICVzIGV4aXN0aWVydCBkZXJ6ZWl0IG5pY2h0IgorCisjOiBkbnNtYXNxLmM6Nzg3Cittc2dpZCAid2FybmluZzogaWdub3JpbmcgcmVzb2x2LWZpbGUgZmxhZyBiZWNhdXNlIG5vLXJlc29sdiBpcyBzZXQiCittc2dzdHIgIldhcm51bmc6IElnbm9yaWVyZSBcInJlc29sdi1maWxlXCIsIHdlaWwgXCJuby1yZXNvbHZcIiBha3RpdiBpc3QiCisKKyM6IGRuc21hc3EuYzo3OTAKK21zZ2lkICJ3YXJuaW5nOiBubyB1cHN0cmVhbSBzZXJ2ZXJzIGNvbmZpZ3VyZWQiCittc2dzdHIgIldhcm51bmc6IGtlaW5lIHZvcmdlbGFnZXJ0ZW4gKFVwc3RyZWFtKSBTZXJ2ZXIga29uZmlndXJpZXJ0IgorCisjOiBkbnNtYXNxLmM6Nzk0CisjLCBjLWZvcm1hdAorbXNnaWQgImFzeW5jaHJvbm91cyBsb2dnaW5nIGVuYWJsZWQsIHF1ZXVlIGxpbWl0IGlzICVkIG1lc3NhZ2VzIgorbXNnc3RyICJhc3luY2hyb25lIFByb3Rva29sbGllcnVuZyBlaW5nZXNjaGFsdGV0LCBXYXJ0ZXNjaGxhbmdlIGZhc3N0ICVkIE5hY2hyaWNodGVuIgorCisjOiBkbnNtYXNxLmM6ODE1Cittc2dpZCAiSVB2NiByb3V0ZXIgYWR2ZXJ0aXNlbWVudCBlbmFibGVkIgorbXNnc3RyICJJUHY2LVJvdXRlci1BZHZlcnRpc2VtZW50IGFrdGl2aWVydCIKKworIzogZG5zbWFzcS5jOjgyMAorIywgYy1mb3JtYXQKK21zZ2lkICJESENQLCBzb2NrZXRzIGJvdW5kIGV4Y2x1c2l2ZWx5IHRvIGludGVyZmFjZSAlcyIKK21zZ3N0ciAiREhDUCwgU29ja2V0cyBleGtsdXNpdiBhbiBkYXMgSW50ZXJmYWNlICVzIGdlYnVuZGVuIgorCisjIEZJWE1FOiB0aGlzIGFuZCB0aGUgbmV4dCBmZXcgbXVzdCBiZSBmdWxsIHN0cmluZ3MgdG8gYmUgdHJhbnNsYXRhYmxlIC0gZG8gbm90IGFzc2VtYmxlIGluIGNvZGUiCisjOiBkbnNtYXNxLmM6ODM0Cittc2dpZCAicm9vdCBpcyAiCittc2dzdHIgIld1cnplbCBpc3QgIgorCisjOiBkbnNtYXNxLmM6ODM0Cittc2dpZCAiZW5hYmxlZCIKK21zZ3N0ciAiQWt0aXZpZXJ0IgorCisjOiBkbnNtYXNxLmM6ODM2Cittc2dpZCAic2VjdXJlIG1vZGUiCittc2dzdHIgInNpY2hlcmVyIE1vZHVzIgorCisjOiBkbnNtYXNxLmM6ODM5CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6ICVzIGluYWNjZXNzaWJsZSIKK21zZ3N0ciAiV2FybnVuZzogJXMgbmljaHQgenVncmVpZmJhciIKKworIzogZG5zbWFzcS5jOjg0MworIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBURlRQIGRpcmVjdG9yeSAlcyBpbmFjY2Vzc2libGUiCittc2dzdHIgIldhcm51bmc6IERhcyBURlRQLVZlcnplaWNobmlzICVzIGlzdCBuaWNodCB6dWdyZWlmYmFyIgorCisjOiBkbnNtYXNxLmM6ODY5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlc3RyaWN0aW5nIG1heGltdW0gc2ltdWx0YW5lb3VzIFRGVFAgdHJhbnNmZXJzIHRvICVkIgorbXNnc3RyICJCZWdyZW56ZSBnbGVpY2h6ZWl0aWdlIFRGVFAtw5xiZXJ0cmFndW5nZW4gYXVmIG1heGltYWwgJWQiCisKKyM6IGRuc21hc3EuYzoxMDM5Cittc2dpZCAiY29ubmVjdGVkIHRvIHN5c3RlbSBEQnVzIgorbXNnc3RyICJNaXQgU3lzdGVtLURCdXMgdmVyYnVuZGVuIgorCisjOiBkbnNtYXNxLmM6MTE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZm9yayBpbnRvIGJhY2tncm91bmQ6ICVzIgorbXNnc3RyICJrYW5uIG5pY2h0IGluIGRlbiBIaW50ZXJncnVuZCBhYnNwYWx0ZW46ICVzIgorCisjOiBkbnNtYXNxLmM6MTE5MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGhlbHBlcjogJXMiCittc2dzdHIgImthbm4gSGVsZmVyIG5pY2h0IGVyemV1Z2VuOiAlcyIKKworIzogZG5zbWFzcS5jOjExOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAic2V0dGluZyBjYXBhYmlsaXRpZXMgZmFpbGVkOiAlcyIKK21zZ3N0ciAia2FubiBcImNhcGFiaWxpdGllc1wiIG5pY2h0IHNldHplbjogJXMiCisKKyM6IGRuc21hc3EuYzoxMTk4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjaGFuZ2UgdXNlci1pZCB0byAlczogJXMiCittc2dzdHIgIkthbm4gbmljaHQgQmVudXR6ZXJyZWNodGUgJXMgYW5uZWhtZW46ICVzIgorCisjOiBkbnNtYXNxLmM6MTIwMQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY2hhbmdlIGdyb3VwLWlkIHRvICVzOiAlcyIKK21zZ3N0ciAiS2FubiBuaWNodCBHcnVwcGVucmVjaHRlICVzIGFubmVobWVuOiAlcyIKKworIzogZG5zbWFzcS5jOjEyMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gcGlkZmlsZSAlczogJXMiCittc2dzdHIgImthbm4gZGllIFByb3plc3NpZGVudGlmaWthdGlvbnMtKFBJRCktRGF0ZWkgJXMgbmljaHQgw7ZmZm5lbjogJXMiCisKKyM6IGRuc21hc3EuYzoxMjA3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuIGxvZyAlczogJXMiCittc2dzdHIgIkthbm4gTG9nZGF0ZWkgJXMgbmljaHQgw7ZmZm5lbjogJXMiCisKKyM6IGRuc21hc3EuYzoxMjEwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2FkIEx1YSBzY3JpcHQ6ICVzIgorbXNnc3RyICJLb25udGUgTHVhLVNjcmlwdCBuaWNodCBsYWRlbjogJXMiCisKKyM6IGRuc21hc3EuYzoxMjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIlRGVFAgZGlyZWN0b3J5ICVzIGluYWNjZXNzaWJsZTogJXMiCittc2dzdHIgIkRhcyBURlRQLVZlcnplaWNobmlzICVzIGlzdCBuaWNodCB6dWdyZWlmYmFyOiAlcyIKKworIzogZG5zbWFzcS5jOjEyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSB0aW1lc3RhbXAgZmlsZSAlczogJXMiCittc2dzdHIgIkthbm4ga2VpbmUgdGltZXN0YW1wLURhdGVpICVzIGVyemV1Z2VuOiAlcyAiCisKKyM6IGRuc21hc3EuYzoxMjM5Cittc2dpZCAibm93IGNoZWNraW5nIEROU1NFQyBzaWduYXR1cmUgdGltZXN0YW1wcyIKK21zZ3N0ciAiUHLDvGZlIGpldHp0IEROU1NFQyBTaWduYXR1ci1aZWl0c3RlbXBlbCIKKworIzogZG5zbWFzcS5jOjEzMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAic2NyaXB0IHByb2Nlc3Mga2lsbGVkIGJ5IHNpZ25hbCAlZCIKK21zZ3N0ciAiU2NyaXB0cHJvemVzcyBkdXJjaCBTaWduYWwgJWQgZ2V0w7Z0ZXQiCisKKyM6IGRuc21hc3EuYzoxMzExCisjLCBjLWZvcm1hdAorbXNnaWQgInNjcmlwdCBwcm9jZXNzIGV4aXRlZCB3aXRoIHN0YXR1cyAlZCIKK21zZ3N0ciAiU2NyaXB0cHJvemVzcyBoYXQgc2ljaCBtaXQgU3RhdHVzICVkIGJlZW5kZXQiCisKKyM6IGRuc21hc3EuYzoxMzE1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBleGVjdXRlICVzOiAlcyIKK21zZ3N0ciAia29ubnRlICVzIG5pY2h0IGF1c2bDvGhyZW46ICVzIgorCisjOiBkbnNtYXNxLmM6MTM3OSBkbnNzZWMuYzo0NzkgZG5zc2VjLmM6NTI1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB1cGRhdGUgbXRpbWUgb24gJXM6ICVzIgorbXNnc3RyICJrYW5uIGRpZSBtdGltZSBuaWNodCBhdWYgJXMgYWt0dWFsaXNpZXJlbjogJXMiCisKKyM6IGRuc21hc3EuYzoxMzg2Cittc2dpZCAiZXhpdGluZyBvbiByZWNlaXB0IG9mIFNJR1RFUk0iCittc2dzdHIgImJlZW5kZSBuYWNoIEVtcGZhbmcgdm9uIFNJR1RFUk0iCisKKyM6IGRuc21hc3EuYzoxNDE0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBhY2Nlc3MgJXM6ICVzIgorbXNnc3RyICJrb25udGUgYXVmICVzIG5pY2h0IHp1Z3JlaWZlbjogJXMiCisKKyM6IGRuc21hc3EuYzoxNDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWRpbmcgJXMiCittc2dzdHIgImxlc2UgJXMiCisKKyM6IGRuc21hc3EuYzoxNDU1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNlcnZlcnMgZm91bmQgaW4gJXMsIHdpbGwgcmV0cnkiCittc2dzdHIgImtlaW5lIFNlcnZlciBpbiAlcyBnZWZ1bmRlbiwgd2VyZGUgZXMgc3DDpHRlciBuZXUgdmVyc3VjaGVuIgorCisjOiBkaGNwLmM6NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBESENQIHNvY2tldDogJXMiCittc2dzdHIgImthbm4gREhDUC1Tb2NrZXQgbmljaHQgZXJ6ZXVnZW46ICVzIgorCisjOiBkaGNwLmM6NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNldCBvcHRpb25zIG9uIERIQ1Agc29ja2V0OiAlcyIKK21zZ3N0ciAia2FubiBPcHRpb25lbiBmw7xyIERIQ1AtU29ja2V0IG5pY2h0IHNldHplbjogJXMiCisKKyM6IGRoY3AuYzo4OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2V0IFNPX1JFVVNFe0FERFJ8UE9SVH0gb24gREhDUCBzb2NrZXQ6ICVzIgorbXNnc3RyICJrYW5uIFNPX1JFVVNFe0FERFJ8UE9SVH0gZsO8ciBESENQLVNvY2tldCBuaWNodCBha3RpdmllcmVuOiAlcyIKKworIzogZGhjcC5jOjEwMQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYmluZCBESENQIHNlcnZlciBzb2NrZXQ6ICVzIgorbXNnc3RyICJrYW5uIG5pY2h0IGFuIERIQ1AtU2VydmVyLVNvY2tldCBiaW5kZW46ICVzIgorCisjOiBkaGNwLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgSUNNUCByYXcgc29ja2V0OiAlcy4iCittc2dzdHIgImthbm4gSUNNUC1Sb2hkYXRlbi1Tb2NrZXQgbmljaHQgZXJ6ZXVnZW46ICVzLiIKKworIzogZGhjcC5jOjI1MiBkaGNwNi5jOjE3MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGludGVyZmFjZSAlcyBpbiBicmlkZ2UtaW50ZXJmYWNlIgorbXNnc3RyICJ1bmJla2FubnRlIFNjaG5pdHRzdGVsbGUgJXMgaW4gYnJpZGdlLWludGVyZmFjZSIKKworIzogZGhjcC5jOjI5MworIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHBhY2tldCByZWNlaXZlZCBvbiAlcyB3aGljaCBoYXMgbm8gYWRkcmVzcyIKK21zZ3N0ciAiREhDUC1QYWtldCBvaG5lIEFkcmVzc2UgYW4gU2Nobml0dHN0ZWxsZSAlcyBlbXBmYW5nZW4iCisKKyM6IGRoY3AuYzo0MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQVJQLWNhY2hlIGluamVjdGlvbiBmYWlsZWQ6ICVzIgorbXNnc3RyICJBUFItQ2FjaGUgSW5qZWt0aW9uIGZlaGxnZXNjaGxhZ2VuOiAlcyIKKworIzogZGhjcC5jOjQ3MAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBzZW5kaW5nIERIQ1AgcGFja2V0IHRvICVzOiAlcyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gU2VuZGVuIGRlcyBESENQLVBha2V0cyBhbiAlczogJXMiCisKKyM6IGRoY3AuYzo1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCByYW5nZSAlcyAtLSAlcyBpcyBub3QgY29uc2lzdGVudCB3aXRoIG5ldG1hc2sgJXMiCittc2dzdHIgIkRIQ1AtQmVyZWljaCAlcyAtICVzIHBhc3N0IG5pY2h0IHp1ciBOZXR6bWFza2UgJXMiCisKKyM6IGRoY3AuYzo4NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGxpbmUgYXQgJXMgbGluZSAlZCIKK21zZ3N0ciAidW5nw7xsdGlnZSBaZWlsZSAlMiRkIGluIERhdGVpICUxJHMiCisKKyM6IGRoY3AuYzo4OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgJXMgbGluZSAlZCwgZHVwbGljYXRlIG5hbWUgb3IgSVAgYWRkcmVzcyIKK21zZ3N0ciAiaWdub3JpZXJlICVzIFplaWxlICVkLCBkb3BwZWx0ZXIgTmFtZSBvZGVyIGRvcHBlbHRlIElQLUFkcmVzc2UiCisKKyM6IGRoY3AuYzoxMDQxIHJmYzMzMTUuYzoyMTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcmVsYXkgJXMgLT4gJXMiCittc2dzdHIgIkRIQ1AgV2VpdGVybGVpdHVuZyAlcyAtPiAlcyIKKworIzogbGVhc2UuYzo5OAorbXNnaWQgInRvbyBtYW55IHN0b3JlZCBsZWFzZXMiCittc2dzdHIgInp1IHZpZWxlIExlYXNlcyBnZXNwZWljaGVydCIKKworIzogbGVhc2UuYzoxNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gb3IgY3JlYXRlIGxlYXNlIGZpbGUgJXM6ICVzIgorbXNnc3RyICJrYW5uIExlYXNlLURhdGVpICVzIG5pY2h0IMO2ZmZuZW46ICVzIgorCisjOiBsZWFzZS5jOjE3NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgbGVhc2UgZGF0YWJhc2UsIGludmFsaWQgbGluZTogJXMgJXMgJXMgJXMgLi4uIgorbXNnc3RyICIiCisKKyM6IGxlYXNlLmM6MTgwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCBsZWFzZSBmaWxlICVzOiAlcyIKK21zZ3N0ciAia29ubnRlICVzIG5pY2h0IGxlc2VuOiAlcyIKKworIzogbGVhc2UuYzoxOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJ1biBsZWFzZS1pbml0IHNjcmlwdCAlczogJXMiCittc2dzdHIgImthbm4gTGVhc2UtU3RhcnQtU2tyaXB0ICVzIG5pY2h0IGF1c2bDvGhyZW46ICVzIgorCisjOiBsZWFzZS5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJsZWFzZS1pbml0IHNjcmlwdCByZXR1cm5lZCBleGl0IGNvZGUgJXMiCittc2dzdHIgIkxlYXNlLVN0YXJ0LVNrcmlwdCBiZWVuZGV0ZSBzaWNoIG1pdCBDb2RlICVzIgorCisjIEZJWE1FOiBUaGlzIHNob3VsZCBiZSAldSBzIGFsc28gaW4gRW5nbGlzaCBhY2NvcmRpbmcgdG8gTklTVCBhbmQgU0kgcnVsZXMuIC0tIE1BCisjOiBsZWFzZS5jOjM3MworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgJXM6ICVzIChyZXRyeSBpbiAldXMpIgorbXNnc3RyICJLb25udGUgJXMgbmljaHQgc2NocmVpYmVuOiAlcyAoTmV1dmVyc3VjaCBpbiAldSBzKSIKKworIzogbGVhc2UuYzo5MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSWdub3JpbmcgZG9tYWluICVzIGZvciBESENQIGhvc3QgbmFtZSAlcyIKK21zZ3N0ciAiSWdub3JpZXJlIERvbcOkbmUgJXMgZsO8ciBESENQLUhvc3RuYW1lbiAlcyIKKworIyBGSVhNRTogdGhpcyBhbmQgdGhlIG5leHQgZmV3IGFyZSBub3QgdHJhbnNsYXRhYmxlLiBQbGVhc2UgcHJvdmlkZSBmdWxsCisjIHN0cmluZ3MsIGRvIG5vdCBwcm9ncmFtbWF0aWNhbGx5IGFzc2VtYmxlIHRoZW0uCisjOiByZmMyMTMxLmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGFkZHJlc3MgcmFuZ2UgYXZhaWxhYmxlIGZvciBESENQIHJlcXVlc3QgJXMgJXMiCittc2dzdHIgIktlaW4gdmVyZsO8Z2JhcmVyIERIQ1AtQmVyZWljaCBmw7xyIEFuZnJhZ2UgJXMgJXMiCisKKyM6IHJmYzIxMzEuYzozNDgKK21zZ2lkICJ3aXRoIHN1Ym5ldCBzZWxlY3RvciIKK21zZ3N0ciAibWl0IFN1Ym5ldHotV8OkaGxlciIKKworIzogcmZjMjEzMS5jOjM0OAorbXNnaWQgInZpYSIKK21zZ3N0ciAidmlhIgorCisjOiByZmMyMTMxLmM6MzYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGF2YWlsYWJsZSBESENQIHN1Ym5ldDogJXMvJXMiCittc2dzdHIgIiV1IHZlcmbDvGdiYXJlKHMpIERIQ1AtU3VibmV0ejogJXMvJXMiCisKKyM6IHJmYzIxMzEuYzozNjMgcmZjMzMxNS5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBhdmFpbGFibGUgREhDUCByYW5nZTogJXMgLS0gJXMiCittc2dzdHIgIiV1IHZlcmbDvGdiYXJlKHIpIERIQ1AtQmVyZWljaDogJXMgLSAlcyIKKworIzogcmZjMjEzMS5jOjQ3NAorIywgYy1mb3JtYXQKK21zZ2lkICIldSB2ZW5kb3IgY2xhc3M6ICVzIgorbXNnc3RyICIldSBcIlZlbmRvciBjbGFzc1wiOiAlcyIKKworIzogcmZjMjEzMS5jOjQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICIldSB1c2VyIGNsYXNzOiAlcyIKK21zZ3N0ciAiJXUgQmVudXR6ZXJrbGFzc2U6ICVzIgorCisjIEZJWE1FOiBkbyBub3QgcHJvZ3JhbW1hdGljYWxseSBhc3NlbWJsZSBzdHJpbmdzIC0gdW50cmFuc2xhdGFibGUKKyM6IHJmYzIxMzEuYzo1MTAKK21zZ2lkICJkaXNhYmxlZCIKK21zZ3N0ciAiZGVha3RpdmllcnQiCisKKyM6IHJmYzIxMzEuYzo1NTEgcmZjMjEzMS5jOjEwMDYgcmZjMjEzMS5jOjE0MzAgcmZjMzMxNS5jOjYxNiByZmMzMzE1LmM6ODY5CisjOiByZmMzMzE1LmM6MTE0OAorbXNnaWQgImlnbm9yZWQiCittc2dzdHIgImlnbm9yaWVydCIKKworIzogcmZjMjEzMS5jOjU2NiByZmMyMTMxLmM6MTIzOSByZmMzMzE1LmM6OTE5Cittc2dpZCAiYWRkcmVzcyBpbiB1c2UiCittc2dzdHIgIkFkcmVzc2UgaW4gTnV0enVuZyIKKworIzogcmZjMjEzMS5jOjU4MCByZmMyMTMxLmM6MTA2MAorbXNnaWQgIm5vIGFkZHJlc3MgYXZhaWxhYmxlIgorbXNnc3RyICJLZWluZSBBZHJlc3NlIHZlcmbDvGdiYXIiCisKKyM6IHJmYzIxMzEuYzo1ODcgcmZjMjEzMS5jOjEyMDIKK21zZ2lkICJ3cm9uZyBuZXR3b3JrIgorbXNnc3RyICJGYWxzY2hlcyBOZXR6d2VyayIKKworIzogcmZjMjEzMS5jOjYwMgorbXNnaWQgIm5vIGFkZHJlc3MgY29uZmlndXJlZCIKK21zZ3N0ciAiS2VpbmUgQWRyZXNzZSBrb25maWd1cmllcnQiCisKKyM6IHJmYzIxMzEuYzo2MDggcmZjMjEzMS5jOjEyNTIKK21zZ2lkICJubyBsZWFzZXMgbGVmdCIKK21zZ3N0ciAiS2VpbmUgTGVhc2VzIMO8YnJpZyIKKworIzogcmZjMjEzMS5jOjcwMyByZmMzMzE1LmM6NDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGNsaWVudCBwcm92aWRlcyBuYW1lOiAlcyIKK21zZ3N0ciAiJXUgS2xpZW50IHN0ZWxsdCBOYW1lIGJlcmVpdDogJXMiCisKKyM6IHJmYzIxMzEuYzo4MDgKK21zZ2lkICJQWEUgQklTIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIlBYRSBCSVMgbmljaHQgdW50ZXJzdMO8dHp0IgorCisjOiByZmMyMTMxLmM6OTc0IHJmYzMzMTUuYzoxMjQyCisjLCBjLWZvcm1hdAorbXNnaWQgImRpc2FibGluZyBESENQIHN0YXRpYyBhZGRyZXNzICVzIGZvciAlcyIKK21zZ3N0ciAic2NoYWx0ZSBzdGF0aXNjaGUgREhDUC1BZHJlc3NlICVzIGbDvHIgJXMgYWIiCisKKyMgRklYTUU6IGRvIG5vdCBhc3NlbWJsZQorIzogcmZjMjEzMS5jOjk5NQorbXNnaWQgInVua25vd24gbGVhc2UiCittc2dzdHIgIlVuYmVrYW5udGVyIExlYXNlIgorCisjOiByZmMyMTMxLmM6MTAyOQorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgdXNpbmcgY29uZmlndXJlZCBhZGRyZXNzICVzIGJlY2F1c2UgaXQgaXMgbGVhc2VkIHRvICVzIgorbXNnc3RyICJiZW51dHplIGtvbmZpZ3VyaWVydGUgQWRyZXNzZSAlcyBuaWNodCwgd2VpbCBzaWUgYW4gJXMgdmVybGVhc3QgaXN0IgorCisjOiByZmMyMTMxLmM6MTAzOQorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgdXNpbmcgY29uZmlndXJlZCBhZGRyZXNzICVzIGJlY2F1c2UgaXQgaXMgaW4gdXNlIGJ5IHRoZSBzZXJ2ZXIgb3IgcmVsYXkiCittc2dzdHIgImJlbnV0emUga29uZmlndXJpZXJ0ZSBBZHJlc3NlICVzIG5pY2h0LCB3ZWlsIHNpZSB2b24gU2VydmVyL1JlbGFpcyB2ZXJ3ZW5kZXQgd2lyZCIKKworIzogcmZjMjEzMS5jOjEwNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHVzaW5nIGNvbmZpZ3VyZWQgYWRkcmVzcyAlcyBiZWNhdXNlIGl0IHdhcyBwcmV2aW91c2x5IGRlY2xpbmVkIgorbXNnc3RyICJiZW51dHplIGtvbmZpZ3VyaWVydGUgQWRyZXNzZSAlcyBuaWNodCwgd2VpbCBzaWUgenV2b3IgYWJnZWxlaG50IHd1cmRlIgorCisjIEZJWE1FOiBkbyBub3QgYXNzZW1ibGUKKyM6IHJmYzIxMzEuYzoxMDU4IHJmYzIxMzEuYzoxMjQ1Cittc2dpZCAibm8gdW5pcXVlLWlkIgorbXNnc3RyICJLZWluZSBlaW5kZXV0aWdlIElEIgorCisjOiByZmMyMTMxLmM6MTE0MAorbXNnaWQgIndyb25nIHNlcnZlci1JRCIKK21zZ3N0ciAiRmFsc2NoZSBTZXJ2ZXItSUQiCisKKyM6IHJmYzIxMzEuYzoxMTU5Cittc2dpZCAid3JvbmcgYWRkcmVzcyIKK21zZ3N0ciAiRmFsc2NoZSBBZHJlc3NlIgorCisjOiByZmMyMTMxLmM6MTE3NyByZmMzMzE1LmM6MTAxNQorbXNnaWQgImxlYXNlIG5vdCBmb3VuZCIKK21zZ3N0ciAiTGVhc2UgbmljaHQgZ2VmdW5kZW4iCisKKyM6IHJmYzIxMzEuYzoxMjEwCittc2dpZCAiYWRkcmVzcyBub3QgYXZhaWxhYmxlIgorbXNnc3RyICJBZHJlc3NlIG5pY2h0IHZlcmbDvGdiYXIiCisKKyM6IHJmYzIxMzEuYzoxMjIxCittc2dpZCAic3RhdGljIGxlYXNlIGF2YWlsYWJsZSIKK21zZ3N0ciAiU3RhdGlzY2hlciBMZWFzZSB2ZXJmw7xnYmFyIgorCisjOiByZmMyMTMxLmM6MTIyNQorbXNnaWQgImFkZHJlc3MgcmVzZXJ2ZWQiCittc2dzdHIgIkFkcmVzc2UgcmVzZXJ2aWVydCIKKworIzogcmZjMjEzMS5jOjEyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWJhbmRvbmluZyBsZWFzZSB0byAlcyBvZiAlcyIKK21zZ3N0ciAiR2ViZSBMZWFzZSB2b24gJTIkcyBhbiAlMSRzIGF1ZiIKKworIzogcmZjMjEzMS5jOjE3NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYm9vdGZpbGUgbmFtZTogJXMiCittc2dzdHIgIiV1IE5hbWUgZGVyIEJvb3RkYXRlaTogJXMiCisKKyM6IHJmYzIxMzEuYzoxNzY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IHNlcnZlciBuYW1lOiAlcyIKK21zZ3N0ciAiJXUgU2VydmVybmFtZTogJXMiCisKKyM6IHJmYzIxMzEuYzoxNzc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IG5leHQgc2VydmVyOiAlcyIKK21zZ3N0ciAiJXUgbsOkY2hzdGVyIFNlcnZlcjogJXMiCisKKyM6IHJmYzIxMzEuYzoxNzc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJyb2FkY2FzdCByZXNwb25zZSIKK21zZ3N0ciAiJXUgQW50d29ydCBwZXIgUnVuZHNlbmR1bmciCisKKyM6IHJmYzIxMzEuYzoxODQwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzZW5kIERIQ1AvQk9PVFAgb3B0aW9uICVkOiBubyBzcGFjZSBsZWZ0IGluIHBhY2tldCIKK21zZ3N0ciAia2FubiBESENQL0JPT1RQLU9waXRpb24gJWQgbmljaHQgc2V0emVuOiBrZWluIFBsYXR6IG1laHIgaW0gUGFrZXQiCisKKyM6IHJmYzIxMzEuYzoyMTMxCittc2dpZCAiUFhFIG1lbnUgdG9vIGxhcmdlIgorbXNnc3RyICJQWEUtTWVuw7xlaW50cmFnIHp1IGdyb8OfIgorCisjOiByZmMyMTMxLmM6MjI3MCByZmMzMzE1LmM6MTUxNQorIywgYy1mb3JtYXQKK21zZ2lkICIldSByZXF1ZXN0ZWQgb3B0aW9uczogJXMiCittc2dzdHIgIiV1IGFuZ2Vmb3JkZXJ0ZSBPcHRpb25lbjogJXMiCisKKyM6IHJmYzIxMzEuYzoyNTg3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzZW5kIFJGQzM5MjUgb3B0aW9uOiB0b28gbWFueSBvcHRpb25zIGZvciBlbnRlcnByaXNlIG51bWJlciAlZCIKK21zZ3N0ciAiS2FubiBSRkMzOTI1LU9wdGlvbiBuaWNodCBzZW5kZW46IHp1IHZpZWxlIE9wdGlvbmVuIGbDvHIgVW50ZXJuZWhtZW4gTnIuICVkIgorCisjOiByZmMyMTMxLmM6MjY1MAorIywgYy1mb3JtYXQKK21zZ2lkICIldSByZXBseSBkZWxheTogJWQiCittc2dzdHIgIiIKKworIzogbmV0bGluay5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgbmV0bGluayBzb2NrZXQ6ICVzIgorbXNnc3RyICJrYW5uIE5ldGxpbmstU29ja2V0IG5pY2h0IGVyemV1Z2VuOiAlcyIKKworIzogbmV0bGluay5jOjM1NQorIywgYy1mb3JtYXQKK21zZ2lkICJuZXRsaW5rIHJldHVybnMgZXJyb3I6ICVzIgorbXNnc3RyICJOZXRsaW5rIGxpZWZlcnQgRmVobGVyICVzIgorCisjOiBkYnVzLmM6MTg2Cittc2dpZCAiYXR0ZW1wdCB0byBzZXQgYW4gSVB2NiBzZXJ2ZXIgYWRkcmVzcyB2aWEgREJ1cyAtIG5vIElQdjYgc3VwcG9ydCIKK21zZ3N0ciAiVmVyc3VjaCwgdmlhIERCdXMgZWluZSBJUHY2LVNlcnZlcmFkcmVzc2UgenUgc2V0emVuOiBrZWluZSBJUHY2LVVudGVyc3TDvHR6dW5nIgorCisjOiBkYnVzLmM6NDM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkVuYWJsaW5nIC0tJXMgb3B0aW9uIGZyb20gRC1CdXMiCittc2dzdHIgIkFrdGl2aWVyZSAtLSVzIE9wdGlvbiB2b24gRC1CdXMiCisKKyM6IGRidXMuYzo0NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlzYWJsaW5nIC0tJXMgb3B0aW9uIGZyb20gRC1CdXMiCittc2dzdHIgIkRlYWt0aXZpZXJlIC0tJXMgT3B0aW9uIHZvbiBELUJ1cyIKKworIzogZGJ1cy5jOjY5MAorbXNnaWQgInNldHRpbmcgdXBzdHJlYW0gc2VydmVycyBmcm9tIERCdXMiCittc2dzdHIgInZvcmdlbGFnZXJ0ZSBTZXJ2ZXIgdm9uIERCdXMgZ2VzZXR6dCIKKworIzogZGJ1cy5jOjczNworbXNnaWQgImNvdWxkIG5vdCByZWdpc3RlciBhIERCdXMgbWVzc2FnZSBoYW5kbGVyIgorbXNnc3RyICJrb25udGUgU3RldWVydW5nc3Byb2dyYW1tIGbDvHIgREJ1cy1OYWNocmljaHRlbiBuaWNodCBhbm1lbGRlbiIKKworIzogYnBmLmM6MjY1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgREhDUCBCUEYgc29ja2V0OiAlcyIKK21zZ3N0ciAia29ubnRlIERIQ1AtQlBGLVNvY2tldCBuaWNodCBlaW5yaWNodGVuOiAlcyIKKworIzogYnBmLmM6MjkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcmVxdWVzdCBmb3IgdW5zdXBwb3J0ZWQgaGFyZHdhcmUgdHlwZSAoJWQpIHJlY2VpdmVkIG9uICVzIgorbXNnc3RyICJESENQLUFuZnJhZ2UgZsO8ciBuaWNodCB1bnRlcnN0w7x0emVuIEhhcmR3YXJldHlwICglZCkgYXVmICVzIGVtcGZhbmdlbiIKKworIzogYnBmLmM6Mzc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgUEZfUk9VVEUgc29ja2V0OiAlcyIKK21zZ3N0ciAiS2FubiBQRl9ST1VURSBzb2NrZXQgbmljaHQgZXJ6ZXVnZW46ICVzIgorCisjOiBicGYuYzozOTkKK21zZ2lkICJVbmtub3duIHByb3RvY29sIHZlcnNpb24gZnJvbSByb3V0ZSBzb2NrZXQiCittc2dzdHIgIlVuYmVrYW5udGUgUHJvdG9rb2xsdmVyc2lvbiB2b20gUm91dGUgU29ja2V0IgorCisjOiBoZWxwZXIuYzoxNTMKK21zZ2lkICJsZWFzZSgpIGZ1bmN0aW9uIG1pc3NpbmcgaW4gTHVhIHNjcmlwdCIKK21zZ3N0ciAiRGllIEZ1bmt0aW9uIGxlYXNlKCkgZmVobHQgaW0gTHVhLVNjcmlwdCIKKworIzogdGZ0cC5jOjMxOQorbXNnaWQgInVuYWJsZSB0byBnZXQgZnJlZSBwb3J0IGZvciBURlRQIgorbXNnc3RyICJrb25udGUga2VpbmVuIGZyZWllbiBQb3J0IGbDvHIgVEZUUCBiZWtvbW1lbiIKKworIzogdGZ0cC5jOjMzNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnN1cHBvcnRlZCByZXF1ZXN0IGZyb20gJXMiCittc2dzdHIgIm5pY2h0IHVudGVyc3TDvHR6dGUgQW5mcmFnZSB2b24gJXMiCisKKyM6IHRmdHAuYzo0ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmlsZSAlcyBub3QgZm91bmQiCittc2dzdHIgIkRhdGVpICVzIG5pY2h0IGdlZnVuZGVuIgorCisjOiB0ZnRwLmM6NTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yICVkICVzIHJlY2VpdmVkIGZyb20gJXMiCittc2dzdHIgIkZlaGxlciAlZCAlcyB2b24gJXMgZW1wZmFuZ2VuIgorCisjOiB0ZnRwLmM6NjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCBzZW5kaW5nICVzIHRvICVzIgorbXNnc3RyICJrb25udGUgJXMgbmljaHQgYW4gJXMgc2VuZGVuIgorCisjOiB0ZnRwLmM6NjM0CisjLCBjLWZvcm1hdAorbXNnaWQgInNlbnQgJXMgdG8gJXMiCittc2dzdHIgIiVzIGFuICVzIHZlcnNjaGlja3QiCisKKyM6IGxvZy5jOjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICJvdmVyZmxvdzogJWQgbG9nIGVudHJpZXMgbG9zdCIKK21zZ3N0ciAiw5xiZXJsYXVmOiAlZCBQcm90b2tvbGxlaW50csOkZ2UgdmVybG9yZW4iCisKKyM6IGxvZy5jOjI2OAorIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZmFpbGVkOiAlcyIKK21zZ3N0ciAiUHJvdG9rb2xsaWVydW5nIGZlaGxnZXNjaGxhZ2VuOiAlcyIKKworIzogbG9nLmM6NDcxCittc2dpZCAiRkFJTEVEIHRvIHN0YXJ0IHVwIgorbXNnc3RyICJTdGFydCBmZWhsZ2VzY2hsYWdlbiIKKworIzogY29ubnRyYWNrLmM6NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29ubnRyYWNrIGNvbm5lY3Rpb24gbWFyayByZXRyaWV2YWwgZmFpbGVkOiAlcyIKK21zZ3N0ciAiXCJDb25udHJhY2sgY29ubmVjdGlvbiBtYXJrXCItQWJydWYgZmVobGdlc2NobGFnZW46ICVzIgorCisjOiBkaGNwNi5jOjUyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgREhDUHY2IHNvY2tldDogJXMiCittc2dzdHIgIkthbm4gREhDUHY2LVNvY2tldCBuaWNodCBlcnpldWdlbjogJXMiCisKKyM6IGRoY3A2LmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNldCBTT19SRVVTRXtBRERSfFBPUlR9IG9uIERIQ1B2NiBzb2NrZXQ6ICVzIgorbXNnc3RyICJrYW5uIFNPX1JFVVNFe0FERFJ8UE9SVH0gZsO8ciBESENQdjYtU29ja2V0IG5pY2h0IGFrdGl2aWVyZW46ICVzIgorCisjOiBkaGNwNi5jOjg1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBiaW5kIERIQ1B2NiBzZXJ2ZXIgc29ja2V0OiAlcyIKK21zZ3N0ciAiS2FubiBuaWNodCBhbiBESENQdjYtU2VydmVyLVNvY2tldCBiaW5kZW46ICVzIgorCisjOiByZmMzMzE1LmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGFkZHJlc3MgcmFuZ2UgYXZhaWxhYmxlIGZvciBESENQdjYgcmVxdWVzdCBmcm9tIHJlbGF5IGF0ICVzIgorbXNnc3RyICJLZWluIEFkcmVzc2JlcmVpY2ggdmVyZsO8Z2JhciBmw7xyIGRpZSBESENQdjYtQW5mcmFnZSB2b20gUmVsYXkgYmVpICVzIgorCisjOiByZmMzMzE1LmM6MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGFkZHJlc3MgcmFuZ2UgYXZhaWxhYmxlIGZvciBESENQdjYgcmVxdWVzdCB2aWEgJXMiCittc2dzdHIgIktlaW4gQWRyZXNzYmVyZWljaCB2ZXJmw7xnYmFyIGbDvHIgZGllIERIQ1B2Ni1BbmZyYWdlIHZpYSAlcyIKKworIzogcmZjMzMxNS5jOjMwMworIywgYy1mb3JtYXQKK21zZ2lkICIldSBhdmFpbGFibGUgREhDUHY2IHN1Ym5ldDogJXMvJWQiCittc2dzdHIgIiV1IHZlcmbDvGdiYXJlKHMpIERIQ1B2Ni1TdWJuZXR6OiAlcy8lZCIKKworIzogcmZjMzMxNS5jOjM4NgorIywgYy1mb3JtYXQKK21zZ2lkICIldSB2ZW5kb3IgY2xhc3M6ICV1IgorbXNnc3RyICIldSBIZXJzdGVsbGVya2xhc3NlOiAldSIKKworIzogcmZjMzMxNS5jOjQzNAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBjbGllbnQgTUFDIGFkZHJlc3M6ICVzIgorbXNnc3RyICIldSBLbGllbnQgTUFDLUFkcmVzc2U6ICVzIgorCisjIEZJWE1FOiBkbyBub3QgYXNzZW1ibGUKKyM6IHJmYzMzMTUuYzo2NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBwcmVmaXgtY2xhc3MgJWQiCittc2dzdHIgInVuYmVrYW5udGUgUHLDpGZpeGtsYXNzZSAlZCIKKworIzogcmZjMzMxNS5jOjgxNiByZmMzMzE1LmM6OTExCittc2dpZCAiYWRkcmVzcyB1bmF2YWlsYWJsZSIKK21zZ3N0ciAiQWRyZXNzZSBuaWNodCB2ZXJmw7xnYmFyIgorCisjOiByZmMzMzE1LmM6ODI4IHJmYzMzMTUuYzo5NTkgcmZjMzMxNS5jOjEyOTIKK21zZ2lkICJzdWNjZXNzIgorbXNnc3RyICJFcmZvbGciCisKKyM6IHJmYzMzMTUuYzo4NDMgcmZjMzMxNS5jOjg1MiByZmMzMzE1LmM6OTY3IHJmYzMzMTUuYzo5NjkKK21zZ2lkICJubyBhZGRyZXNzZXMgYXZhaWxhYmxlIgorbXNnc3RyICJLZWluZSBBZHJlc3NlbiB2ZXJmw7xnYmFyIgorCisjOiByZmMzMzE1LmM6OTQ2Cittc2dpZCAibm90IG9uIGxpbmsiCittc2dzdHIgIm5pY2h0IG9uIGxpbmsiCisKKyM6IHJmYzMzMTUuYzoxMDE5IHJmYzMzMTUuYzoxMjA0IHJmYzMzMTUuYzoxMjgxCittc2dpZCAibm8gYmluZGluZyBmb3VuZCIKK21zZ3N0ciAiS2VpbmUgQmluZHVuZyBnZWZ1bmRlbiIKKworIzogcmZjMzMxNS5jOjEwNTcKK21zZ2lkICJkZXByZWNhdGVkIgorbXNnc3RyICJ2ZXJhbHRldCIKKworIzogcmZjMzMxNS5jOjEwNjIKK21zZ2lkICJhZGRyZXNzIGludmFsaWQiCittc2dzdHIgIkFkcmVzc2UgdW5nw7xsdGlnIgorCisjOiByZmMzMzE1LmM6MTEwOQorbXNnaWQgImNvbmZpcm0gZmFpbGVkIgorbXNnc3RyICJCZXN0w6R0aWd1bmcgZmVobGdlc2NobGFnZW4iCisKKyM6IHJmYzMzMTUuYzoxMTI1Cittc2dpZCAiYWxsIGFkZHJlc3NlcyBzdGlsbCBvbiBsaW5rIgorbXNnc3RyICJBbGxlIEFkcmVzc2VuIGltbWVyIG5vY2ggb24gbGluayIKKworIzogcmZjMzMxNS5jOjEyMTMKK21zZ2lkICJyZWxlYXNlIHJlY2VpdmVkIgorbXNnc3RyICJGcmVpZ2FiZSBlbXBmYW5nZW4iCisKKyM6IHJmYzMzMTUuYzoyMTQwCittc2dpZCAiQ2Fubm90IG11bHRpY2FzdCB0byBESENQdjYgc2VydmVyIHdpdGhvdXQgY29ycmVjdCBpbnRlcmZhY2UiCittc2dzdHIgIkthbm4gbmljaHQgenVtIERIQ1B2NiBTZXJ2ZXIgbXVsdGljYXN0ZW4gb2huZSBrb3JyZWt0ZSBTY2huaXR0c3RlbGxlIgorCisjOiBkaGNwLWNvbW1vbi5jOjE0NQorIywgYy1mb3JtYXQKK21zZ2lkICJJZ25vcmluZyBkdXBsaWNhdGUgZGhjcC1vcHRpb24gJWQiCittc2dzdHIgIklnbm9yaWVyZSBkb3BwZWx0IHZvcmhhbmRlbmUgREhDUC1PcHRpb24gJWQiCisKKyM6IGRoY3AtY29tbW9uLmM6MjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IHRhZ3M6ICVzIgorbXNnc3RyICIldSBNYXJrZW46ICVzIgorCisjOiBkaGNwLWNvbW1vbi5jOjQwNworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgbW9yZSB0aGFuIG9uZSBhZGRyZXNzIGluIGhvc3RzZmlsZSwgdXNpbmcgJXMgZm9yIERIQ1AiCittc2dzdHIgIiVzIGhhdCBtZWhyIGFscyBlaW5lIEFkcmVzc2UgaW4gaG9zdHMtRGF0ZWksIGJlbnV0emUgJXMgZsO8ciBESENQIgorCisjOiBkaGNwLWNvbW1vbi5jOjQzMAorIywgYy1mb3JtYXQKK21zZ2lkICJkdXBsaWNhdGUgSVAgYWRkcmVzcyAlcyAoJXMpIGluIGRoY3AtY29uZmlnIGRpcmVjdGl2ZSIKK21zZ3N0ciAiZG9wcGVsdGUgSVAtQWRyZXNzZSAlcyAoJXMpIGluIFwiZGhjcC1jb25maWdcIi1BbndlaXN1bmciCisKKyM6IGRoY3AtY29tbW9uLmM6NDk0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZXQgU09fQklORFRPREVWSUNFIG9uIERIQ1Agc29ja2V0OiAlcyIKK21zZ3N0ciAia2FubiBTT19CSU5EVE9ERVZJQ0UgZsO8ciBESENQLVNvY2tldCBuaWNodCBha3RpdmllcmVuOiAlcyIKKworIzogZGhjcC1jb21tb24uYzo2MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiS25vd24gREhDUCBvcHRpb25zOlxuIgorbXNnc3RyICJCZWthbm50ZSBESENQLU9wdGlvbmVuOlxuIgorCisjOiBkaGNwLWNvbW1vbi5jOjYyNgorIywgYy1mb3JtYXQKK21zZ2lkICJLbm93biBESENQdjYgb3B0aW9uczpcbiIKK21zZ3N0ciAiQmVrYW5udGUgREhDUHY2LU9wdGlvbmVuOlxuIgorCisjOiBkaGNwLWNvbW1vbi5jOjgyMworbXNnaWQgIiwgcHJlZml4IGRlcHJlY2F0ZWQiCittc2dzdHIgIiwgUHJlZml4IHZlcmFsdGV0IgorCisjOiBkaGNwLWNvbW1vbi5jOjgyNgorIywgYy1mb3JtYXQKK21zZ2lkICIsIGxlYXNlIHRpbWUgIgorbXNnc3RyICIsIExlYXNlIFplaXQiCisKKyM6IGRoY3AtY29tbW9uLmM6ODY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHN0YXRlbGVzcyBvbiAlcyUuMHMlLjBzJXMiCittc2dzdHIgIiVzIHN0YXRlbGVzcyBhdWYgJXMlLjBzJS4wcyVzIgorCisjOiBkaGNwLWNvbW1vbi5jOjg3MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgc3RhdGljIGxlYXNlcyBvbmx5IG9uICUuMHMlcyVzJS4wcyIKK21zZ3N0ciAiJXMsIG51ciBzdGF0aXNjaGUgTGVhc2VzIGF1ZiAlLjBzJXMlcyUuMHMiCisKKyM6IGRoY3AtY29tbW9uLmM6ODcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCBwcm94eSBvbiBzdWJuZXQgJS4wcyVzJS4wcyUuMHMiCittc2dzdHIgIiVzLCBQcm94eSBpbSBTdWJuZXR6ICUuMHMlcyUuMHMlLjBzIgorCisjOiBkaGNwLWNvbW1vbi5jOjg3MworIywgYy1mb3JtYXQKK21zZ2lkICIlcywgSVAgcmFuZ2UgJXMgLS0gJXMlcyUuMHMiCittc2dzdHIgIiVzLCBJUC1CZXJlaWNoICVzIC0tICVzJXMlLjBzIgorCisjOiBkaGNwLWNvbW1vbi5jOjg4NgorIywgYy1mb3JtYXQKK21zZ2lkICJESENQdjQtZGVyaXZlZCBJUHY2IG5hbWVzIG9uICVzJXMiCittc2dzdHIgIkRIQ1B2NC1hYmdlbGVpdGV0ZSBJUHY2IE5hbWVuIGF1ZiAlcyVzIgorCisjOiBkaGNwLWNvbW1vbi5jOjg4OQorIywgYy1mb3JtYXQKK21zZ2lkICJyb3V0ZXIgYWR2ZXJ0aXNlbWVudCBvbiAlcyVzIgorbXNnc3RyICJSb3V0ZXItQWR2ZXJ0aXNtZW50IGF1ZiAlcyVzIgorCisjOiBkaGNwLWNvbW1vbi5jOjkwMAorIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHJlbGF5IGZyb20gJXMgdG8gJXMgdmlhICVzIgorbXNnc3RyICJESENQIFdlaXRlcmxlaXR1bmcgdm9uICVzIG5hY2ggJXMgw7xiZXIgJXMiCisKKyM6IGRoY3AtY29tbW9uLmM6OTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcmVsYXkgZnJvbSAlcyB0byAlcyIKK21zZ3N0ciAiREhDUCBXZWl0ZXJsZWl0dW5nIHZvbiAlcyBuYWNoICVzIgorCisjOiByYWR2LmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgSUNNUHY2IHNvY2tldDogJXMiCittc2dzdHIgIkthbm4gSUNNUHY2LVNvY2tldCBuaWNodCBlcnpldWdlbjogJXMiCisKKyM6IGF1dGguYzo0NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3Jpbmcgem9uZSB0cmFuc2ZlciByZXF1ZXN0IGZyb20gJXMiCittc2dzdHIgImlnbm9yaWVyZSBab25lbnRyYW5zZmVyLUFuZnJhZ2Ugdm9uICVzIgorCisjOiBpcHNldC5jOjk1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmaW5kIGtlcm5lbCB2ZXJzaW9uOiAlcyIKK21zZ3N0ciAia29ubnRlIEtlcm5lbHZlcnNpb24gbmljaHQgZmluZGVuOiAlcyIKKworIzogaXBzZXQuYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBJUHNldCBjb250cm9sIHNvY2tldDogJXMiCittc2dzdHIgImtvbm50ZSBJUHNldC1Lb250cm9sbC1Tb2NrZXQgbmljaHQgZXJ6ZXVnZW46ICVzIgorCisjOiBpcHNldC5jOjIzMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHVwZGF0ZSBpcHNldCAlczogJXMiCittc2dzdHIgImthbm4gZGllIG10aW1lIG5pY2h0IGF1ZiAlcyBha3R1YWxpc2llcmVuOiAlcyIKKworIzogZG5zc2VjLmM6NTI3CisjLCBmdXp6eQorbXNnaWQgInN5c3RlbSB0aW1lIGNvbnNpZGVyZWQgdmFsaWQsIG5vdyBjaGVja2luZyBETlNTRUMgc2lnbmF0dXJlIHRpbWVzdGFtcHMuIgorbXNnc3RyICJQcsO8ZmUgamV0enQgRE5TU0VDIFNpZ25hdHVyLVplaXRzdGVtcGVsIgorCisjOiBibG9ja2RhdGEuYzo1OAorIywgYy1mb3JtYXQKK21zZ2lkICJETlNTRUMgbWVtb3J5IGluIHVzZSAldSwgbWF4ICV1LCBhbGxvY2F0ZWQgJXUiCittc2dzdHIgIkROU1NFQyBTcGVpY2hlciBpbiBCZW51dHp1bmcgJXUsIE1heCAldSwgenVnZXdpZXNlbiAldSIKKworIzogdGFibGVzLmM6NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGFjY2VzcyBwZiBkZXZpY2VzOiAlcyIKK21zZ3N0ciAia29ubnRlIGF1ZiBwZiBHZXLDpHRlIG5pY2h0IHp1Z3JlaWZlbjogJXMiCisKKyM6IHRhYmxlcy5jOjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IG5vIG9wZW5lZCBwZiBkZXZpY2VzICVzIgorbXNnc3RyICJXYXJudW5nOiBLZWluZSBnZcO2ZmZuZXRlbiBwZiBHZXLDpHRlICVzIgorCisjOiB0YWJsZXMuYzo4MgorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvcjogY2Fubm90IHVzZSB0YWJsZSBuYW1lICVzIgorbXNnc3RyICJGZWhsZXI6IEthbm4gVGFiZWxsZW5uYW1lICVzIG5pY2h0IGJlbnV0emVuIgorCisjOiB0YWJsZXMuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvcjogY2Fubm90IHN0cmxjcHkgdGFibGUgbmFtZSAlcyIKK21zZ3N0ciAiRmVobGVyOiBLYW5uIGRlbiBUYWJlbGxlbm5hbWVuICVzIG5pY2h0IHN0cmxjcHkiCisKKyM6IHRhYmxlcy5jOjEwMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSVBzZXQ6IGVycm9yOiVzIgorbXNnc3RyICJEQnVzLUZlaGxlcjogJXMiCisKKyM6IHRhYmxlcy5jOjEwOAorbXNnaWQgImluZm86IHRhYmxlIGNyZWF0ZWQiCittc2dzdHIgIkluZm86IFRhYmVsbGUgZXJzdGVsbHQiCisKKyM6IHRhYmxlcy5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBESU9DUiVzQUREUlM6ICVzIgorbXNnc3RyICJXYXJudW5nOiBESU9DUiVzQUREUlM6ICVzIgorCisjOiB0YWJsZXMuYzoxMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYWRkcmVzc2VzICVzIgorbXNnc3RyICIlZCBBZHJlc3NlbiAlcyIKKworIzogaW5vdGlmeS5jOjYyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBhY2Nlc3MgcGF0aCAlczogJXMiCittc2dzdHIgIkthbm4gYXVmIFBmYWQgJXMgbmljaHQgenVncmVpZmVuOiAlcyIKKworIzogaW5vdGlmeS5jOjk1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgaW5vdGlmeTogJXMiCittc2dzdHIgIkthbm4ga2VpbiBpbm90aWZ5IGVyemV1Z2VuOiAlcyIKKworIzogaW5vdGlmeS5jOjExMQorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBzeW1saW5rcyBmb2xsb3dpbmcgJXMiCittc2dzdHIgIlp1IHZpZWxlIG5hY2hmb2xnZW5kZSBzeW1ib2xpc2NoZSBMaW5rcyBmb2xnZW5kICVzIgorCisjOiBpbm90aWZ5LmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgImRpcmVjdG9yeSAlcyBmb3IgcmVzb2x2LWZpbGUgaXMgbWlzc2luZywgY2Fubm90IHBvbGwiCittc2dzdHIgIlZlcnplaWNobmlzICVzIGbDvHIgcmVzb2x2LWZpbGUgZmVobHQsIGthbm4gbmljaHQgcG9sbGVuIgorCisjOiBpbm90aWZ5LmM6MTMxIGlub3RpZnkuYzoxNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBpbm90aWZ5IGZvciAlczogJXMiCittc2dzdHIgIktvbm50ZSBpbm90aWZ5IGbDvHIgJXM6ICVzIG5pY2h0IGVyemV1Z2VuIgorCisjOiBpbm90aWZ5LmM6MTUzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBkeW5hbWljIGRpcmVjdG9yeSAlczogJXMiCittc2dzdHIgImZlaGxlcmhhZnRlcyBkeW5hbWlzY2hlcyBWZXJ6ZWljaG5pcyAlczogJXMiCisKKyM6IGlub3RpZnkuYzoyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5vdGlmeSwgbmV3IG9yIGNoYW5nZWQgZmlsZSAlcyIKK21zZ3N0ciAiaW5vdGlmeSwgbmV1ZSBvZGVyIGdlw6RuZGVydGUgRGF0ZWkgJXMiCisKKyN+IG1zZ2lkICJiYWQgVFRMIgorI34gbXNnc3RyICJ1bnp1bMOkc3NpZ2UgVFRMIgorCisjfiBtc2dpZCAiZXJyb3I6IGZpbGxfYWRkciBtaXNzdXNlZCIKKyN+IG1zZ3N0ciAiRmVobGVyOiBmaWxsX2FkZHIgZmFsc2NoIHZlcndlbmRldCIKKworI34gbXNnaWQgIndhcm5pbmc6IHBmcl9hZGRfdGFibGVzOiAlcyglZCkiCisjfiBtc2dzdHIgIldhcm51bmc6IHBmcl9hZGRfdGFibGVzOiAlcyglZCkiCisKKyN+IG1zZ2lkICJjYW5ub3QgY2Fubm9uaWNhbGlzZSByZXNvbHYtZmlsZSAlczogJXMiCisjfiBtc2dzdHIgIkthbm4gZGllIHJlc29sdi1maWxlICVzIG5pY2h0IGthbm9uaXNpZXJlbjogJXMiCisKKyN+IG1zZ2lkICJubyBpbnRlcmZhY2Ugd2l0aCBhZGRyZXNzICVzIgorI34gbXNnc3RyICJrZWluZSBTY2huaXR0c3RlbGxlIG1pdCBBZHJlc3NlICVzIgorCisjfiBtc2dpZCAiZHVwbGljYXRlIElQIGFkZHJlc3MgJXMgaW4gZGhjcC1jb25maWcgZGlyZWN0aXZlLiIKKyN+IG1zZ3N0ciAiZG9wcGVsdGUgSVAtQWRyZXNzZSAlcyBpbiBcImRoY3AtY29uZmlnXCItQW53ZWlzdW5nIgorCisjLCBmdXp6eQorI34gbXNnaWQgIlNwZWNpZnkgcGF0aCB0byBMdWEgc2NyaXB0IChubyBkZWZhdWx0KS4iCisjfiBtc2dzdHIgIkRhdGVpcGZhZCBmw7xyIFByb3plc3NrZW5udW5nIChQSUQpIGZlc3RsZWdlbiAoVm9yZWluc3RlbGx1bmc6ICVzKS4iCisKKyN+IG1zZ2lkICJvbmx5IG9uZSBkaGNwLWhvc3RzZmlsZSBhbGxvd2VkIgorI34gbXNnc3RyICJudXIgZWluZSBESENQLUhvc3RkYXRlaSAoZGhjcC1ob3N0c2ZpbGUpIHp1bMOkc3NpZyIKKworI34gbXNnaWQgIm9ubHkgb25lIGRoY3Atb3B0c2ZpbGUgYWxsb3dlZCIKKyN+IG1zZ3N0ciAibnVyIGVpbmUgREhDUC1PcHRpb25zZGF0ZWkgKGRoY3Atb3B0c2ZpbGUpIHp1bMOkc3NpZyIKKworI34gbXNnaWQgImZpbGVzIG5lc3RlZCB0b28gZGVlcCBpbiAlcyIKKyN+IG1zZ3N0ciAiRGF0ZWllbiBpbiAlcyB6dSB0aWVmIHZlcnNjaGFjaHRlbHQiCisKKyN+IG1zZ2lkICJUWFQgcmVjb3JkIHN0cmluZyB0b28gbG9uZyIKKyN+IG1zZ3N0ciAiVFhULUVpbnRyYWcgenUgbGFuZyIKKworI34gbXNnaWQgImZhaWxlZCB0byBzZXQgSVBWNiBvcHRpb25zIG9uIGxpc3RlbmluZyBzb2NrZXQ6ICVzIgorI34gbXNnc3RyICJrb25udGUgSVBWNi1PcHRpb25lbiBhdWYgRW1wZmFuZ3MtU29ja2V0IG5pY2h0IGVpbnN0ZWxsZW46ICVzIgorCisjfiBtc2dpZCAiZmFpbGVkIHRvIGJpbmQgbGlzdGVuaW5nIHNvY2tldCBmb3IgJXM6ICVzIgorI34gbXNnc3RyICJrb25udGUgRW1wZmFuZ3MtU29ja2V0IG5pY2h0IGFuICVzIGJpbmRlbjogJXMiCmRpZmYgLS1naXQgYS9wby9lcy5wbyBiL3BvL2VzLnBvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBiMzBkOTgKLS0tIC9kZXYvbnVsbAorKysgYi9wby9lcy5wbwpAQCAtMCwwICsxLDIzOTAgQEAKKyMgU3BhbmlzaCB0cmFuc2xhdGlvbnMgZm9yIGRuc21hc3EgcGFja2FnZS4KKyMgVGhpcyBmaWxlIGlzIHB1dCBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyMgQ2hyaXN0b3BoZXIgQ2hhdGhhbSA8Y2hyaXNsaW51eEBnbWFpbC5jb20+LCAyMDA1LgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZG5zbWFzcSAyLjY3XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDA5LTA2LTE4IDEyOjI0KzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDE3LTA3LTE3IDE4OjMwKzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFZpY2VudGUgU29yaWFubyA8dmljdGVrQGdtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOlxuIgorIkxhbmd1YWdlOiBlc1xuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04ODU5LTFcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisKKyM6IGNhY2hlLmM6NTEzCittc2dpZCAiSW50ZXJuYWwgZXJyb3IgaW4gY2FjaGUuIgorbXNnc3RyICIiCisKKyM6IGNhY2hlLmM6OTIzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBuYW1lcyBmcm9tICVzOiAlcyIKK21zZ3N0ciAibm8gc2UgcHVkbyBjYXJnYXIgbm9tYnJlcyBkZXNkZSAlczogJXMiCisKKyM6IGNhY2hlLmM6OTQ5IGRoY3AuYzo4NjcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImJhZCBhZGRyZXNzIGF0ICVzIGxpbmUgJWQiCittc2dzdHIgImRpcmVjY2nzbiBlcnLzbmVhIGVuICVzIGztbmVhICVkIgorCisjOiBjYWNoZS5jOjEwMDIgZGhjcC5jOjg4MworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbmFtZSBhdCAlcyBsaW5lICVkIgorbXNnc3RyICJub21icmUgZXJy825lbyBlbiAlcyBs7W5lYSAlZCIKKworIzogY2FjaGUuYzoxMDExIGRoY3AuYzo5NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCAlcyAtICVkIGFkZHJlc3NlcyIKK21zZ3N0ciAiZGlyZWNjafNuZXMgJXMgLSAlZCBsZe1kYXMiCisKKyM6IGNhY2hlLmM6MTEyNAorbXNnaWQgImNsZWFyZWQgY2FjaGUiCittc2dzdHIgImVsIGNhY2jpIGZ1ZSBsaWJlcmFkbyIKKworIzogY2FjaGUuYzoxMTUzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIElQdjQgYWRkcmVzcyBmb3VuZCBmb3IgJXMiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxMjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGEgQ05BTUUsIG5vdCBnaXZpbmcgaXQgdG8gdGhlIERIQ1AgbGVhc2Ugb2YgJXMiCittc2dzdHIgIiVzIGVzIHVuIENOQU1FLCBubyBzZSBsZSBlc3ThIGRhbmRvIGNvbmNlc2nzbiBESENQIGRlICVzIgorCisjOiBjYWNoZS5jOjEyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGdpdmluZyBuYW1lICVzIHRvIHRoZSBESENQIGxlYXNlIG9mICVzIGJlY2F1c2UgdGhlIG5hbWUgZXhpc3RzIGluICVzIHdpdGggYWRkcmVzcyAlcyIKK21zZ3N0ciAibm8gb3RvcmdhbmRvIG5vbWJyZSAlcyBhIGNvbmNlc2nzbiBESENQIGRlICVzIHBvcnF1ZSBlbCBub21icmUgZXhpc3RlIGVuICVzIGNvbiBkaXJlY2Np824gJXMiCisKKyM6IGNhY2hlLmM6MTQxMworIywgYy1mb3JtYXQKK21zZ2lkICJ0aW1lICVsdSIKK21zZ3N0ciAidGllbXBvICVsdSIKKworIzogY2FjaGUuYzoxNDE0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYWNoZSBzaXplICVkLCAlZC8lZCBjYWNoZSBpbnNlcnRpb25zIHJlLXVzZWQgdW5leHBpcmVkIGNhY2hlIGVudHJpZXMuIgorbXNnc3RyICJ0YW1h8W8gZGUgY2FjaOkgJWQsICVkLyVkIGluc2VyY2nzbmVzIGRlIGNhY2jpIHJldXRpbGl6YXJvbiBvYmpldG9zIG5vIHZlbmNpZG9zLiIKKworIzogY2FjaGUuYzoxNDE2CisjLCBjLWZvcm1hdAorbXNnaWQgInF1ZXJpZXMgZm9yd2FyZGVkICV1LCBxdWVyaWVzIGFuc3dlcmVkIGxvY2FsbHkgJXUiCittc2dzdHIgImL6c3F1ZWRhcyByZWVudmlhZGFzICV1LCBi+nNxdWVkYXMgcmVzcG9uZGlkYXMgbG9jYWxtZW50ZSAldSIKKworIzogY2FjaGUuYzoxNDE5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJxdWVyaWVzIGZvciBhdXRob3JpdGF0aXZlIHpvbmVzICV1IgorbXNnc3RyICJGaWphciBUVEwgcGFyYSByZXNwdWVzdGFzIGF1dG9yaXRhcmlhcyIKKworIzogY2FjaGUuYzoxNDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgInNlcnZlciAlcyMlZDogcXVlcmllcyBzZW50ICV1LCByZXRyaWVkIG9yIGZhaWxlZCAldSIKK21zZ3N0ciAic2Vydmlkb3IgJXMjJWQ6IGL6c3F1ZWRhcyBlbnZpYWRhcyAldSwgcmVpbnRlbnRhZGFzIG8gZmFsbGlkYXMgJXUiCisKKyM6IHV0aWwuYzo0NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNlZWQgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yOiAlcyIKK21zZ3N0ciAibm8gc2UgcHVkbyBjcmVhciB2YWxvciBzZW1pbGxhIHBhcmEgZWwgZ2VuZXJhZG9yIGRlIG76bWVyb3MgYWxlYXRvcmlvczogJXMiCisKKyM6IHV0aWwuYzoyMjQKKyMsIGZ1enp5Cittc2dpZCAiZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSIKK21zZ3N0ciAibm8gc2UgcHVkbyBhc2lnbmFyIG1lbW9yaWEiCisKKyM6IHV0aWwuYzoyNzcgb3B0aW9uLmM6NjE5Cittc2dpZCAiY291bGQgbm90IGdldCBtZW1vcnkiCittc2dzdHIgIm5vIHNlIHB1ZG8gYWRxdWlyaXIgbWVtb3JpYSIKKworIzogdXRpbC5jOjI4NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBwaXBlOiAlcyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgY3JlYXIgcGlwZTogJXMiCisKKyM6IHV0aWwuYzoyOTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBhbGxvY2F0ZSAlZCBieXRlcyIKK21zZ3N0ciAibm8gc2UgcHVkbyBhc2lnbmFyICVkIGJ5dGVzIgorCisjOiB1dGlsLmM6NDY0CisjLCBjLWZvcm1hdAorbXNnaWQgImluZmluaXRlIgorbXNnc3RyICJpbmZpbml0byIKKworIzogb3B0aW9uLmM6MzQ0Cittc2dpZCAiU3BlY2lmeSBsb2NhbCBhZGRyZXNzKGVzKSB0byBsaXN0ZW4gb24uIgorbXNnc3RyICJFc3BlY2lmaWNhciBkaXJlY2Np824oZXMpIGxvY2FsZXMgZPNuZGUgZXNjdWNoYXIuIgorCisjOiBvcHRpb24uYzozNDUKK21zZ2lkICJSZXR1cm4gaXBhZGRyIGZvciBhbGwgaG9zdHMgaW4gc3BlY2lmaWVkIGRvbWFpbnMuIgorbXNnc3RyICJSZXRvcm5hciBpcGFkZHIgKGRpcmVjY2nzbiBJUCkgcGFyYSB0b2RvcyBsb3MgaG9zdHMgZW4gbG9zIGRvbWluaW9zIGVzcGVjaWZpY2Fkb3MuIgorCisjOiBvcHRpb24uYzozNDYKK21zZ2lkICJGYWtlIHJldmVyc2UgbG9va3VwcyBmb3IgUkZDMTkxOCBwcml2YXRlIGFkZHJlc3MgcmFuZ2VzLiIKK21zZ3N0ciAiRmFsc2lmaWNhciBi+nNxdWVkYXMgcmV2ZXJzYXMgcGFyYSByYW5nb3MgZGUgZGlyZWNjafNuIHByaXZhZG9zIFJGQzE5MTguIgorCisjOiBvcHRpb24uYzozNDcKK21zZ2lkICJUcmVhdCBpcGFkZHIgYXMgTlhET01BSU4gKGRlZmVhdHMgVmVyaXNpZ24gd2lsZGNhcmQpLiIKK21zZ3N0ciAiVHJhdGFyIGlwYWRkciAoZGlyZWNjafNuIElQKSBjb21vIE5YRE9NQUlOIChkZXJyb3RhIGNvbW9k7W4gVmVyaXNpZ24pLiIKKworIzogb3B0aW9uLmM6MzQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgdGhlIHNpemUgb2YgdGhlIGNhY2hlIGluIGVudHJpZXMgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIkVzcGVjaWZpY2FyIHRhbWHxbyBkZSBjYWNo6SBlbiBjdWFudG8gYSBjYW50aWRhZCBkZSBvYmpldG9zICglcyBwb3IgcHJlZGV0ZXJtaW5hZG8pLiIKKworIzogb3B0aW9uLmM6MzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgY29uZmlndXJhdGlvbiBmaWxlIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJFc3BlY2lmaWNhciBhcmNoaXZvIGRlIGNvbmZpZ3VyYWNp824gKCVzIHBvciBwcmVkZXRlcm1pbmFkbykuIgorCisjOiBvcHRpb24uYzozNTAKK21zZ2lkICJEbyBOT1QgZm9yayBpbnRvIHRoZSBiYWNrZ3JvdW5kOiBydW4gaW4gZGVidWcgbW9kZS4iCittc2dzdHIgIk5PIGhhY2VyIHVuIGZvcmsgaGFjaWEgZWwgZm9uZG86IGNvcnJlciBlbiBtb2RvIGRlYnVnLiIKKworIzogb3B0aW9uLmM6MzUxCittc2dpZCAiRG8gTk9UIGZvcndhcmQgcXVlcmllcyB3aXRoIG5vIGRvbWFpbiBwYXJ0LiIKK21zZ3N0ciAiTk8gcmVlbnZpYXIgYvpzcXVlZGFzIHNpbiBwYXJ0ZSBkZSBkb21pbmlvLiIKKworIzogb3B0aW9uLmM6MzUyCittc2dpZCAiUmV0dXJuIHNlbGYtcG9pbnRpbmcgTVggcmVjb3JkcyBmb3IgbG9jYWwgaG9zdHMuIgorbXNnc3RyICJSZXRvcm5hciBleHBlZGllbnRlcyBNWCBhdXRvLXNl8WFsYWRvcmVzIHBhcmEgaG9zdHMgbG9jYWxlcy4iCisKKyM6IG9wdGlvbi5jOjM1MworbXNnaWQgIkV4cGFuZCBzaW1wbGUgbmFtZXMgaW4gL2V0Yy9ob3N0cyB3aXRoIGRvbWFpbi1zdWZmaXguIgorbXNnc3RyICJFeHBhbmRpciBub21icmVzIHNpbXBsZXMgZW4gL2V0Yy9ob3N0cyBjb24gZG9tYWluLXN1ZmZpeCAoc3VmaWpvIGRlIGRvbWluaW8pLiIKKworIzogb3B0aW9uLmM6MzU0Cittc2dpZCAiRG9uJ3QgZm9yd2FyZCBzcHVyaW91cyBETlMgcmVxdWVzdHMgZnJvbSBXaW5kb3dzIGhvc3RzLiIKK21zZ3N0ciAiTm8gcmVlbnZpYXIgcGVkaWRvcyBETlMgZmFsc29zIGRlc2RlIG3hcXVpbmFzIFdpbmRvd3MuIgorCisjOiBvcHRpb24uYzozNTUKK21zZ2lkICJFbmFibGUgREhDUCBpbiB0aGUgcmFuZ2UgZ2l2ZW4gd2l0aCBsZWFzZSBkdXJhdGlvbi4iCittc2dzdHIgIkhhYmlsaXRhciBESENQIGRlbnRybyBkZWwgcmFuZ28gYnJpbmRhZG8gY29uIGR1cmFjafNuIGRlIGNvbmNlc2nzbi4iCisKKyM6IG9wdGlvbi5jOjM1NgorIywgYy1mb3JtYXQKK21zZ2lkICJDaGFuZ2UgdG8gdGhpcyBncm91cCBhZnRlciBzdGFydHVwIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJDYW1iaWFyIGEgZXN0ZSBncnVwbyBkZXNwdelzIGRlbCBpbmljaW8gKCVzIHBvciBwcmVkZXRlcm1pbmFkbykuIgorCisjOiBvcHRpb24uYzozNTcKK21zZ2lkICJTZXQgYWRkcmVzcyBvciBob3N0bmFtZSBmb3IgYSBzcGVjaWZpZWQgbWFjaGluZS4iCittc2dzdHIgIkZpamFyIGRpcmVjY2nzbiBvIG5vbWJyZSBkZSBob3N0IHBhcmEgdW5hIG3hcXVpbmEgZXNwZWNpZmljYWRhLiIKKworIzogb3B0aW9uLmM6MzU4CisjLCBmdXp6eQorbXNnaWQgIlJlYWQgREhDUCBob3N0IHNwZWNzIGZyb20gZmlsZS4iCittc2dzdHIgIkxlZXIgZXNwZWNpZmljYWNpb25lcyBESENQIGRlIGhvc3QgZGVzZGUgYXJjaGl2byIKKworIzogb3B0aW9uLmM6MzU5CisjLCBmdXp6eQorbXNnaWQgIlJlYWQgREhDUCBvcHRpb24gc3BlY3MgZnJvbSBmaWxlLiIKK21zZ3N0ciAiTGVlciBvcGNpb25lcyBESENQIGRlIGhvc3QgZGVzZGUgYXJjaGl2byIKKworIzogb3B0aW9uLmM6MzYwCisjLCBmdXp6eQorbXNnaWQgIlJlYWQgREhDUCBob3N0IHNwZWNzIGZyb20gYSBkaXJlY3RvcnkuIgorbXNnc3RyICJMZWVyIGVzcGVjaWZpY2FjaW9uZXMgREhDUCBkZSBob3N0IGRlc2RlIGFyY2hpdm8iCisKKyM6IG9wdGlvbi5jOjM2MQorIywgZnV6enkKK21zZ2lkICJSZWFkIERIQ1Agb3B0aW9ucyBmcm9tIGEgZGlyZWN0b3J5LiIKK21zZ3N0ciAiTGVlciBvcGNpb25lcyBESENQIGRlIGhvc3QgZGVzZGUgYXJjaGl2byIKKworIzogb3B0aW9uLmM6MzYyCittc2dpZCAiRXZhbHVhdGUgY29uZGl0aW9uYWwgdGFnIGV4cHJlc3Npb24uIgorbXNnc3RyICJFdmFsdWFyIGV4cHJlc2nzbiBjb25kaWNpb25hbCBkZSBldGlxdWV0YS4iCisKKyM6IG9wdGlvbi5jOjM2MworIywgYy1mb3JtYXQKK21zZ2lkICJEbyBOT1QgbG9hZCAlcyBmaWxlLiIKK21zZ3N0ciAiTk8gY2FyZ2FyIGFyY2hpdm8gJXMuIgorCisjOiBvcHRpb24uYzozNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSBhIGhvc3RzIGZpbGUgdG8gYmUgcmVhZCBpbiBhZGRpdGlvbiB0byAlcy4iCittc2dzdHIgIkVzcGVjaWZpY2FyIHVuIGFyY2hpdm8gZGUgaG9zdHMgcGFyYSBzZXIgbGXtZG8gYWRpY2lvbmFsbWVudGUgYSAlcy4iCisKKyM6IG9wdGlvbi5jOjM2NQorIywgZnV6enkKK21zZ2lkICJSZWFkIGhvc3RzIGZpbGVzIGZyb20gYSBkaXJlY3RvcnkuIgorbXNnc3RyICJMZWVyIGVzcGVjaWZpY2FjaW9uZXMgREhDUCBkZSBob3N0IGRlc2RlIGFyY2hpdm8iCisKKyM6IG9wdGlvbi5jOjM2NgorbXNnaWQgIlNwZWNpZnkgaW50ZXJmYWNlKHMpIHRvIGxpc3RlbiBvbi4iCittc2dzdHIgIkVzcGVjaWZpY2FyIGludGVyZmFzZShzKSBkb25kZSBlc2N1Y2hhci4iCisKKyM6IG9wdGlvbi5jOjM2NworbXNnaWQgIlNwZWNpZnkgaW50ZXJmYWNlKHMpIE5PVCB0byBsaXN0ZW4gb24uIgorbXNnc3RyICJFc3BlY2lmaWNhciBpbnRlcmZhc2UocykgZG9uZGUgTk8gZXNjdWNoYXIuIgorCisjOiBvcHRpb24uYzozNjgKKyMsIGZ1enp5Cittc2dpZCAiTWFwIERIQ1AgdXNlciBjbGFzcyB0byB0YWcuIgorbXNnc3RyICJUcmF6YXIgY2xhc2UgZGUgdXN1YXJpbyBESENQIGEgZXRpcXVldGEuIgorCisjOiBvcHRpb24uYzozNjkKK21zZ2lkICJNYXAgUkZDMzA0NiBjaXJjdWl0LWlkIHRvIHRhZy4iCittc2dzdHIgIlRyYXphciBjaXJjdWl0LWlkIChpZGVudGlmaWNhY2nzbiBkZSBjaXJjdWl0bykgUkZDMzA0NiBhIGV0aXF1ZXRhLiIKKworIzogb3B0aW9uLmM6MzcwCittc2dpZCAiTWFwIFJGQzMwNDYgcmVtb3RlLWlkIHRvIHRhZy4iCittc2dzdHIgIlRyYXphciByZW1vdGUtaWQgKGlkZW50aWZpY2FjafNuIHJlbW90YSkgUkZDMzA0NiBhIGV0aXF1ZXRhLiIKKworIzogb3B0aW9uLmM6MzcxCittc2dpZCAiTWFwIFJGQzM5OTMgc3Vic2NyaWJlci1pZCB0byB0YWcuIgorbXNnc3RyICJUcmF6YXIgc3Vic2NyaWJlci1pZCAoaWRlbnRpZmljYWNp824gZGUgc3VzY3JpdG9yKSBSRkMzOTkzIGEgZXRpcXVldGEuIgorCisjOiBvcHRpb24uYzozNzIKKyMsIGZ1enp5Cittc2dpZCAiRG9uJ3QgZG8gREhDUCBmb3IgaG9zdHMgd2l0aCB0YWcgc2V0LiIKK21zZ3N0ciAiTm8gaGFjZXIgREhDUCBwYXJhIGhvc3RzIGNvbiBldGlxdWV0YSBmaWphZGEuIgorCisjOiBvcHRpb24uYzozNzMKKyMsIGZ1enp5Cittc2dpZCAiRm9yY2UgYnJvYWRjYXN0IHJlcGxpZXMgZm9yIGhvc3RzIHdpdGggdGFnIHNldC4iCittc2dzdHIgIkZvcnphciByZXNwdWVzdGFzIGJyb2FkY2FzdCBwYXJhIGhvc3RzIGNvbiBldGlxdWV0YSBmaWphZGEuIgorCisjOiBvcHRpb24uYzozNzQKK21zZ2lkICJEbyBOT1QgZm9yayBpbnRvIHRoZSBiYWNrZ3JvdW5kLCBkbyBOT1QgcnVuIGluIGRlYnVnIG1vZGUuIgorbXNnc3RyICJOTyBoYWNlciB1biBmb3JrIGhhY2lhIGVsIGZvbmRvLCBOTyBjb3JyZXIgZW4gbW9kbyBkZWJ1Zy4iCisKKyM6IG9wdGlvbi5jOjM3NQorbXNnaWQgIkFzc3VtZSB3ZSBhcmUgdGhlIG9ubHkgREhDUCBzZXJ2ZXIgb24gdGhlIGxvY2FsIG5ldHdvcmsuIgorbXNnc3RyICJBc3VtaXIgcXVlIHNvbW9zIGVsIPpuaWNvIHNlcnZpZG9yIERIQ1AgZW4gbGEgcmVkIGxvY2FsLiIKKworIzogb3B0aW9uLmM6Mzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgd2hlcmUgdG8gc3RvcmUgREhDUCBsZWFzZXMgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIkVzcGVjaWZpY2FyIGRvbmRlIGFsbWFjZW5hciBjb25jZXNp824gREhDUCAoJXMgcG9yIHByZWRldGVybWluYWRvKS4iCisKKyM6IG9wdGlvbi5jOjM3NworbXNnaWQgIlJldHVybiBNWCByZWNvcmRzIGZvciBsb2NhbCBob3N0cy4iCittc2dzdHIgIlJldG9ybmFyIGV4cGVkaWVudGVzIE1YIHBhcmEgaG9zdHMgbG9jYWxlcy4iCisKKyM6IG9wdGlvbi5jOjM3OAorbXNnaWQgIlNwZWNpZnkgYW4gTVggcmVjb3JkLiIKK21zZ3N0ciAiRXNwZWNpZmljYXIgdW4gZXhwZWRpZW50ZSBNWC4iCisKKyM6IG9wdGlvbi5jOjM3OQorbXNnaWQgIlNwZWNpZnkgQk9PVFAgb3B0aW9ucyB0byBESENQIHNlcnZlci4iCittc2dzdHIgIkVzcGVjaWZpY2FyIG9wY2lvbmVzIEJPT1RQIGEgc2Vydmlkb3IgREhDUC4iCisKKyM6IG9wdGlvbi5jOjM4MAorIywgYy1mb3JtYXQKK21zZ2lkICJEbyBOT1QgcG9sbCAlcyBmaWxlLCByZWxvYWQgb25seSBvbiBTSUdIVVAuIgorbXNnc3RyICJOTyByZXZpc2FyIGFyY2hpdm8gJXMgcGVyafNkaWNhbWVudGUsIHJlY2FyZ2FyIHNvbG8gY29uIFNJR0hVUC4iCisKKyM6IG9wdGlvbi5jOjM4MQorbXNnaWQgIkRvIE5PVCBjYWNoZSBmYWlsZWQgc2VhcmNoIHJlc3VsdHMuIgorbXNnc3RyICJOTyBhbG1hY2VuYXIgZW4gY2FjaOkgcmVzdWx0YWRvcyBkZSBi+nNxdWVkYXMgZmFsbGlkYXMuIgorCisjOiBvcHRpb24uYzozODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNlIG5hbWVzZXJ2ZXJzIHN0cmljdGx5IGluIHRoZSBvcmRlciBnaXZlbiBpbiAlcy4iCittc2dzdHIgIlVzYXIgc2Vydmlkb3JlcyBETlMgZXN0cmljdGFtZW50ZSBlbiBlbCDzcmRlbiBicmluZGFkbyBlbiAlcy4iCisKKyM6IG9wdGlvbi5jOjM4MworIywgZnV6enkKK21zZ2lkICJTcGVjaWZ5IG9wdGlvbnMgdG8gYmUgc2VudCB0byBESENQIGNsaWVudHMuIgorbXNnc3RyICJFc3BlY2lmaWNhciBvcGNpb25lcyBwYXJhIHNlciBlbnZpYWRhcyBhIGNsaWVudGVzIERIQ1AuIgorCisjOiBvcHRpb24uYzozODQKK21zZ2lkICJESENQIG9wdGlvbiBzZW50IGV2ZW4gaWYgdGhlIGNsaWVudCBkb2VzIG5vdCByZXF1ZXN0IGl0LiIKK21zZ3N0ciAiT3BjafNuIERIQ1AgZW52aWFkYSBh+m4gc2kgZWwgY2xpZW50ZSBubyBsYSBwaWRlLiIKKworIzogb3B0aW9uLmM6Mzg1Cittc2dpZCAiU3BlY2lmeSBwb3J0IHRvIGxpc3RlbiBmb3IgRE5TIHJlcXVlc3RzIG9uIChkZWZhdWx0cyB0byA1MykuIgorbXNnc3RyICJFc3BlY2lmaWNhciBwdWVydG8gZG9uZGUgZXNjdWNoYXIgcG9yIGL6c3F1ZWRhcyBETlMgKDUzIHBvciBwcmVkZXRlcm1pbmFkbykuIgorCisjOiBvcHRpb24uYzozODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBzdXBwb3J0ZWQgVURQIHBhY2tldCBzaXplIGZvciBFRE5TLjAgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIlRhbWHxbyBt4XhpbW8gZGUgcGFxdWV0ZXMgVURQIHNvcG9ydGFkbyBwYXJhIEVETlMuMCAoJXMgcG9yIHByZWRldGVybWluYWRvKS4iCisKKyM6IG9wdGlvbi5jOjM4NworIywgZnV6enkKK21zZ2lkICJMb2cgRE5TIHF1ZXJpZXMuIgorbXNnc3RyICJCaXRhY29yZWFyIGL6c3F1ZWRhcyBETlMuIgorCisjOiBvcHRpb24uYzozODgKKyMsIGZ1enp5Cittc2dpZCAiRm9yY2UgdGhlIG9yaWdpbmF0aW5nIHBvcnQgZm9yIHVwc3RyZWFtIEROUyBxdWVyaWVzLiIKK21zZ3N0ciAiRW5mb3J6YXIgZWwgcHVlcnRvIG9yaWdpbmFsIHBhcmEgYvpzcXVlZGFzIEROUyBzdWJpZGEuIgorCisjOiBvcHRpb24uYzozODkKK21zZ2lkICJEbyBOT1QgcmVhZCByZXNvbHYuY29uZi4iCittc2dzdHIgIk5PIGxlZXIgcmVzb2x2LmNvbmYuIgorCisjOiBvcHRpb24uYzozOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSBwYXRoIHRvIHJlc29sdi5jb25mIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJFc3BlY2lmaWNhciBlbCBwYXRoIGhhY2lhIHJlc29sdi5jb25mICglcyBwb3IgcHJlZGV0ZXJtaW5hZG8pLiIKKworIzogb3B0aW9uLmM6MzkxCisjLCBmdXp6eQorbXNnaWQgIlNwZWNpZnkgcGF0aCB0byBmaWxlIHdpdGggc2VydmVyPSBvcHRpb25zIgorbXNnc3RyICJFc3BlY2lmaWNhciBwYXRoIGRlIGFyY2hpdm8gUElEICglcyBwb3IgcHJlZGV0ZXJtaW5hZG8pLiIKKworIzogb3B0aW9uLmM6MzkyCittc2dpZCAiU3BlY2lmeSBhZGRyZXNzKGVzKSBvZiB1cHN0cmVhbSBzZXJ2ZXJzIHdpdGggb3B0aW9uYWwgZG9tYWlucy4iCittc2dzdHIgIkVzcGVjaWZpY2FyIGRpcmVjY2nzbihlcykgZGUgc2Vydmlkb3JlcyBzdWJpZGEgY29uIGRvbWluaW9zIG9wY2lvbmFsZXMuIgorCisjOiBvcHRpb24uYzozOTMKKyMsIGZ1enp5Cittc2dpZCAiU3BlY2lmeSBhZGRyZXNzIG9mIHVwc3RyZWFtIHNlcnZlcnMgZm9yIHJldmVyc2UgYWRkcmVzcyBxdWVyaWVzIgorbXNnc3RyICJFc3BlY2lmaWNhciBkaXJlY2Np824oZXMpIGRlIHNlcnZpZG9yZXMgc3ViaWRhIGNvbiBkb21pbmlvcyBvcGNpb25hbGVzLiIKKworIzogb3B0aW9uLmM6Mzk0Cittc2dpZCAiTmV2ZXIgZm9yd2FyZCBxdWVyaWVzIHRvIHNwZWNpZmllZCBkb21haW5zLiIKK21zZ3N0ciAiTnVuY2EgcmVlbnZpYXIgYvpzcXVlZGFzIGEgZG9taW5pb3MgZXNwZWNpZmljYWRvcy4iCisKKyM6IG9wdGlvbi5jOjM5NQorbXNnaWQgIlNwZWNpZnkgdGhlIGRvbWFpbiB0byBiZSBhc3NpZ25lZCBpbiBESENQIGxlYXNlcy4iCittc2dzdHIgIkVzcGVjaWZpY2FyIGVsIGRvbWluaW8gcGFyYSBzZXIgYXNpZ25hZG8gZW4gY29uY2VzafNuIERIQ1AuIgorCisjOiBvcHRpb24uYzozOTYKK21zZ2lkICJTcGVjaWZ5IGRlZmF1bHQgdGFyZ2V0IGluIGFuIE1YIHJlY29yZC4iCittc2dzdHIgIkVzcGVjaWZpY2FyIGRlc3Rpbm8gcHJlZGV0ZXJtaW5hZG8gZW4gdW4gZXhwZWRpZW50ZSBNWC4iCisKKyM6IG9wdGlvbi5jOjM5NworbXNnaWQgIlNwZWNpZnkgdGltZS10by1saXZlIGluIHNlY29uZHMgZm9yIHJlcGxpZXMgZnJvbSAvZXRjL2hvc3RzLiIKK21zZ3N0ciAiRXNwZWNpZmljYXIgdGllbXBvIGRlIHZpZGEgZW4gc2VndW5kb3MgcGFyYSByZXNwdWVzdGFzIGRlc2RlIC9ldGMvaG9zdHMuIgorCisjOiBvcHRpb24uYzozOTgKKyMsIGZ1enp5Cittc2dpZCAiU3BlY2lmeSB0aW1lLXRvLWxpdmUgaW4gc2Vjb25kcyBmb3IgbmVnYXRpdmUgY2FjaGluZy4iCittc2dzdHIgIkVzcGVjaWZpY2FyIHRpZW1wbyBkZSB2aWRhIGVuIHNlZ3VuZG9zIHBhcmEgY2FjaOkgbmVnYXRpdm8uIgorCisjOiBvcHRpb24uYzozOTkKKyMsIGZ1enp5Cittc2dpZCAiU3BlY2lmeSB0aW1lLXRvLWxpdmUgaW4gc2Vjb25kcyBmb3IgbWF4aW11bSBUVEwgdG8gc2VuZCB0byBjbGllbnRzLiIKK21zZ3N0ciAiRXNwZWNpZmljYXIgdGllbXBvIGRlIHZpZGEgZW4gc2VndW5kb3MgcGFyYSByZXNwdWVzdGFzIGRlc2RlIC9ldGMvaG9zdHMuIgorCisjOiBvcHRpb24uYzo0MDAKKyMsIGZ1enp5Cittc2dpZCAiU3BlY2lmeSB0aW1lLXRvLWxpdmUgY2VpbGluZyBmb3IgY2FjaGUuIgorbXNnc3RyICJFc3BlY2lmaWNhciB0aWVtcG8gZGUgdmlkYSBlbiBzZWd1bmRvcyBwYXJhIGNhY2jpIG5lZ2F0aXZvLiIKKworIzogb3B0aW9uLmM6NDAxCisjLCBmdXp6eQorbXNnaWQgIlNwZWNpZnkgdGltZS10by1saXZlIGZsb29yIGZvciBjYWNoZS4iCittc2dzdHIgIkVzcGVjaWZpY2FyIHRpZW1wbyBkZSB2aWRhIGVuIHNlZ3VuZG9zIHBhcmEgY2FjaOkgbmVnYXRpdm8uIgorCisjOiBvcHRpb24uYzo0MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hhbmdlIHRvIHRoaXMgdXNlciBhZnRlciBzdGFydHVwLiAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiQ2FtYmlhciBhIGVzdGUgdXN1YXJpbyBkZXNwdWVzIGRlbCBpbmljaW8gKCVzIHBvciBwcmVkZXRlcm1pbmFkbykuIgorCisjOiBvcHRpb24uYzo0MDMKKyMsIGZ1enp5Cittc2dpZCAiTWFwIERIQ1AgdmVuZG9yIGNsYXNzIHRvIHRhZy4iCittc2dzdHIgIlRyYXphciBjbGFzZSBkZSB2ZW5kZWRvciBESENQIGEgZXRpcXVldGEuIgorCisjOiBvcHRpb24uYzo0MDQKK21zZ2lkICJEaXNwbGF5IGRuc21hc3EgdmVyc2lvbiBhbmQgY29weXJpZ2h0IGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiTW9zdHJhciBpbmZvcm1hY2nzbiBzb2JyZSBsYSB2ZXJzafNuIHkgY29weXJpZ2h0IGRlIGRuc21hc3EuIgorCisjOiBvcHRpb24uYzo0MDUKK21zZ2lkICJUcmFuc2xhdGUgSVB2NCBhZGRyZXNzZXMgZnJvbSB1cHN0cmVhbSBzZXJ2ZXJzLiIKK21zZ3N0ciAiVHJhZHVjaXIgZGlyZWNjaW9uZXMgSVB2NCBkZXNkZSBzZXJ2aWRvcmVzIHN1YmlkYS4iCisKKyM6IG9wdGlvbi5jOjQwNgorbXNnaWQgIlNwZWNpZnkgYSBTUlYgcmVjb3JkLiIKK21zZ3N0ciAiRXNwZWNpZmljYXIgdW4gZXhwZWRpZW50ZSBTUlYuIgorCisjOiBvcHRpb24uYzo0MDcKKyMsIGZ1enp5Cittc2dpZCAiRGlzcGxheSB0aGlzIG1lc3NhZ2UuIFVzZSAtLWhlbHAgZGhjcCBvciAtLWhlbHAgZGhjcDYgZm9yIGtub3duIERIQ1Agb3B0aW9ucy4iCittc2dzdHIgIk1vc3RyYXIgZXN0ZSBtZW5zYWplLiBVc2FyIC0taGVscCBkaGNwIHBhcmEgb3BjaW9uZXMgREhDUCBjb25vY2lkYXMuIgorCisjOiBvcHRpb24uYzo0MDgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgcGF0aCBvZiBQSUQgZmlsZSAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiRXNwZWNpZmljYXIgcGF0aCBkZSBhcmNoaXZvIFBJRCAoJXMgcG9yIHByZWRldGVybWluYWRvKS4iCisKKyM6IG9wdGlvbi5jOjQwOQorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IG1heGltdW0gbnVtYmVyIG9mIERIQ1AgbGVhc2VzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJFc3BlY2lmaWNhciBu+m1lcm8gbeF4aW1vIGRlIGNvbmNlc2nzbiBESENQICglcyBwb3IgcHJlZGV0ZXJtaW5hZG8pLiIKKworIzogb3B0aW9uLmM6NDEwCittc2dpZCAiQW5zd2VyIEROUyBxdWVyaWVzIGJhc2VkIG9uIHRoZSBpbnRlcmZhY2UgYSBxdWVyeSB3YXMgc2VudCB0by4iCittc2dzdHIgIlJlc3BvbmRlciBhIGL6c3F1ZWRhcyBETlMgZW4gYmFzZSBhIGxhIGludGVyZmFzZSBhIGxhIGN14WwgZnVlcm9uIGVudmlhZGFzLiIKKworIzogb3B0aW9uLmM6NDExCittc2dpZCAiU3BlY2lmeSBUWFQgRE5TIHJlY29yZC4iCittc2dzdHIgIkVzcGVjaWZpY2FyIGV4cGVkaWVudGUgRE5TIFRYVC4iCisKKyM6IG9wdGlvbi5jOjQxMgorIywgZnV6enkKK21zZ2lkICJTcGVjaWZ5IFBUUiBETlMgcmVjb3JkLiIKK21zZ3N0ciAiRXNwZWNpZmljYXIgZXhwZWRpZW50ZSBETlMgUFRSLiIKKworIzogb3B0aW9uLmM6NDEzCittc2dpZCAiR2l2ZSBETlMgbmFtZSB0byBJUHY0IGFkZHJlc3Mgb2YgaW50ZXJmYWNlLiIKK21zZ3N0ciAiT3RvcmdhciBub21icmUgRE5TIGEgZGlyZWNjafNuIElQdjQgZGUgaW50ZXJmYXNlLiIKKworIzogb3B0aW9uLmM6NDE0Cittc2dpZCAiQmluZCBvbmx5IHRvIGludGVyZmFjZXMgaW4gdXNlLiIKK21zZ3N0ciAiQWNvcGxhciBzb2xvIGEgaW50ZXJmYXNlcyBlbiB1c28uIgorCisjOiBvcHRpb24uYzo0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVhZCBESENQIHN0YXRpYyBob3N0IGluZm9ybWF0aW9uIGZyb20gJXMuIgorbXNnc3RyICJMZWVyIGluZm9ybWFjafNuIHNvYnJlIGhvc3RzIERIQ1AgZXN04XRpY29zIGRlc2RlICVzLiIKKworIzogb3B0aW9uLmM6NDE2Cittc2dpZCAiRW5hYmxlIHRoZSBEQnVzIGludGVyZmFjZSBmb3Igc2V0dGluZyB1cHN0cmVhbSBzZXJ2ZXJzLCBldGMuIgorbXNnc3RyICJIYWJpbGl0YXIgbGEgaW50ZXJmYXNlIERCdXMgcGFyYSBmaWphciBzZXJ2aWRvcmVzIHN1YmlkYSwgZXRjLiIKKworIzogb3B0aW9uLmM6NDE3Cittc2dpZCAiRG8gbm90IHByb3ZpZGUgREhDUCBvbiB0aGlzIGludGVyZmFjZSwgb25seSBwcm92aWRlIEROUy4iCittc2dzdHIgIk5vIHByb3ZlZXIgREhDUCBlbiBlc3RhIGludGVyZmFzZSwgc/NsbyBwcm92ZWVyIEROUy4iCisKKyM6IG9wdGlvbi5jOjQxOAorbXNnaWQgIkVuYWJsZSBkeW5hbWljIGFkZHJlc3MgYWxsb2NhdGlvbiBmb3IgYm9vdHAuIgorbXNnc3RyICJIYWJpbGl0YXIgYWxvY2FjafNuIGRpbuFtaWNhIGRlIGRpcmVjY2nzbmVzIHBhcmEgQk9PVFAuIgorCisjOiBvcHRpb24uYzo0MTkKKyMsIGZ1enp5Cittc2dpZCAiTWFwIE1BQyBhZGRyZXNzICh3aXRoIHdpbGRjYXJkcykgdG8gb3B0aW9uIHNldC4iCittc2dzdHIgIlRyYXphciBkaXJlY2Np824gTUFDIChjb24gY29tb2TtbmVzKSBhIG9wY2nzbiBmaWphZGEuIgorCisjOiBvcHRpb24uYzo0MjAKK21zZ2lkICJUcmVhdCBESENQIHJlcXVlc3RzIG9uIGFsaWFzZXMgYXMgYXJyaXZpbmcgZnJvbSBpbnRlcmZhY2UuIgorbXNnc3RyICJUcmF0YXIgcGVkaWRvcyBESENQIGVuIGFsaWFzIGNvbW8gc2kgbGxlZ2FyYW4gZGUgbGEgaW50ZXJmYXNlLiIKKworIzogb3B0aW9uLmM6NDIxCittc2dpZCAiRGlzYWJsZSBJQ01QIGVjaG8gYWRkcmVzcyBjaGVja2luZyBpbiB0aGUgREhDUCBzZXJ2ZXIuIgorbXNnc3RyICJEZXNoYWJpbGl0YXIgdmVyaWZpY2FjafNuIGRlIGRpcmVjY2nzbmVzIHBhcmEgZWNobyBJQ01QIGVuIGVsIHNlcnZpZG9yIERIQ1AuIgorCisjOiBvcHRpb24uYzo0MjIKKyMsIGZ1enp5Cittc2dpZCAiU2hlbGwgc2NyaXB0IHRvIHJ1biBvbiBESENQIGxlYXNlIGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbi4iCittc2dzdHIgIkFyY2hpdm8gZ3Vp824gcGFyYSBlamVjdXRhciBjdWFuZG8gc2UgY3JlYSBvIGRlc3RydXllIHVuYSBjb25jZXNp824gREhDUC4iCisKKyM6IG9wdGlvbi5jOjQyMworIywgZnV6enkKK21zZ2lkICJMdWEgc2NyaXB0IHRvIHJ1biBvbiBESENQIGxlYXNlIGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbi4iCittc2dzdHIgIkFyY2hpdm8gZ3Vp824gcGFyYSBlamVjdXRhciBjdWFuZG8gc2UgY3JlYSBvIGRlc3RydXllIHVuYSBjb25jZXNp824gREhDUC4iCisKKyM6IG9wdGlvbi5jOjQyNAorIywgZnV6enkKK21zZ2lkICJSdW4gbGVhc2UtY2hhbmdlIHNjcmlwdHMgYXMgdGhpcyB1c2VyLiIKK21zZ3N0ciAiQ29ycmVyIGFyY2hpdm8gZ3Vp824gZGUgY2FtYmlvIGRlIGNvbmNlc2nzbiBjb21vIGVzdGUgdXN1YXJpby4iCisKKyM6IG9wdGlvbi5jOjQyNQorbXNnaWQgIkNhbGwgZGhjcC1zY3JpcHQgd2l0aCBjaGFuZ2VzIHRvIGxvY2FsIEFSUCB0YWJsZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDI2Cittc2dpZCAiUmVhZCBjb25maWd1cmF0aW9uIGZyb20gYWxsIHRoZSBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeS4iCittc2dzdHIgIkxlZXIgY29uZmlndXJhY2nzbiBkZXNkZSB0b2RvcyBsb3MgYXJjaGl2b3MgZW4gZXN0ZSBkaXJlY3RvcmlvLiIKKworIzogb3B0aW9uLmM6NDI3CisjLCBmdXp6eQorbXNnaWQgIkxvZyB0byB0aGlzIHN5c2xvZyBmYWNpbGl0eSBvciBmaWxlLiAoZGVmYXVsdHMgdG8gREFFTU9OKSIKK21zZ3N0ciAiQml0YWNvcmVhciBhIGVzdGEgZmFjaWxpZGFkIHN5c2xvZyBvIGFyY2hpdm8uIChEQUVNT04gcG9yIHByZWRldGVybWluYWRvKSIKKworIzogb3B0aW9uLmM6NDI4Cittc2dpZCAiRG8gbm90IHVzZSBsZWFzZWZpbGUuIgorbXNnc3RyICJObyB1c2FyIGFyY2hpdm8gZGUgY29uY2VzafNuLiIKKworIzogb3B0aW9uLmM6NDI5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IEROUyBxdWVyaWVzLiAoZGVmYXVsdHMgdG8gJXMpIgorbXNnc3RyICJO+m1lcm8gbeF4aW1vIGRlIGL6c3F1ZWRhcyBETlMgc2ltdWx04W5lYXMuICglcyBwb3IgcHJlZGV0ZXJtaW5hZG8pIgorCisjOiBvcHRpb24uYzo0MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xlYXIgRE5TIGNhY2hlIHdoZW4gcmVsb2FkaW5nICVzLiIKK21zZ3N0ciAiTGliZXJhciBjYWNo6SBETlMgYWwgcmVjYXJnYXIgJXMuIgorCisjOiBvcHRpb24uYzo0MzEKK21zZ2lkICJJZ25vcmUgaG9zdG5hbWVzIHByb3ZpZGVkIGJ5IERIQ1AgY2xpZW50cy4iCittc2dzdHIgIklnbm9yYXIgbm9tYnJlcyBkZSBob3N0IGJyaW5kYWRvcyBwb3IgY2xpZW50ZXMgREhDUC4iCisKKyM6IG9wdGlvbi5jOjQzMgorbXNnaWQgIkRvIE5PVCByZXVzZSBmaWxlbmFtZSBhbmQgc2VydmVyIGZpZWxkcyBmb3IgZXh0cmEgREhDUCBvcHRpb25zLiIKK21zZ3N0ciAiTk8gcmV1dGlsaXphciBjYW1wb3MgZGUgbm9tYnJlIGRlIGFyY2hpdm8geSBzZXJ2aWRvciBwYXJhIG9wY2lvbmVzIERIQ1AgZXh0cmEuIgorCisjOiBvcHRpb24uYzo0MzMKK21zZ2lkICJFbmFibGUgaW50ZWdyYXRlZCByZWFkLW9ubHkgVEZUUCBzZXJ2ZXIuIgorbXNnc3RyICJIYWJpbGl0YXIgc2Vydmlkb3IgaW50ZWdyYWRvIFRGVFAgc29sby1sZWN0dXJhLiIKKworIzogb3B0aW9uLmM6NDM0Cittc2dpZCAiRXhwb3J0IGZpbGVzIGJ5IFRGVFAgb25seSBmcm9tIHRoZSBzcGVjaWZpZWQgc3VidHJlZS4iCittc2dzdHIgIkV4cG9ydGFyIGFyY2hpdm9zIHbtYSBURlRQIHNvbG8gZGVsIHN1Yi3hcmJvbCBlc3BlY2lmaWNhZG8uIgorCisjOiBvcHRpb24uYzo0MzUKKyMsIGZ1enp5Cittc2dpZCAiQWRkIGNsaWVudCBJUCBvciBoYXJkd2FyZSBhZGRyZXNzIHRvIHRmdHAtcm9vdC4iCittc2dzdHIgIkFncmVnYXIgSVAgZGUgY2xpZW50ZSBhIHRmdHAtcm9vdC4iCisKKyM6IG9wdGlvbi5jOjQzNgorbXNnaWQgIkFsbG93IGFjY2VzcyBvbmx5IHRvIGZpbGVzIG93bmVkIGJ5IHRoZSB1c2VyIHJ1bm5pbmcgZG5zbWFzcS4iCittc2dzdHIgIlBlcm1pdGlyIGFjY2VzbyBzb2xvIGEgYXJjaGl2b3MgcGVydGVuZWNpZW50ZXMgYWwgdXN1YXJpbyBxdWUgY29ycmUgZG5zbWFzcS4iCisKKyM6IG9wdGlvbi5jOjQzNworbXNnaWQgIkRvIG5vdCB0ZXJtaW5hdGUgdGhlIHNlcnZpY2UgaWYgVEZUUCBkaXJlY3RvcmllcyBhcmUgaW5hY2Nlc3NpYmxlLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgVEZUUCB0cmFuc2ZlcnMgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIk76bWVybyBt4XhpbW8gZGUgdHJhbnNmZXJlbmNpYXMgVEZUUCBzaW11bHThbmVhcyAoJXMgcG9yIHByZWRldGVybWluYWRvKS4iCisKKyM6IG9wdGlvbi5jOjQzOQorIywgZnV6enkKK21zZ2lkICJNYXhpbXVtIE1UVSB0byB1c2UgZm9yIFRGVFAgdHJhbnNmZXJzLiIKK21zZ3N0ciAiTvptZXJvIG3heGltbyBkZSB0cmFuc2ZlcmVuY2lhcyBURlRQIHNpbXVsdOFuZWFzICglcyBwb3IgcHJlZGV0ZXJtaW5hZG8pLiIKKworIzogb3B0aW9uLmM6NDQwCittc2dpZCAiRGlzYWJsZSB0aGUgVEZUUCBibG9ja3NpemUgZXh0ZW5zaW9uLiIKK21zZ3N0ciAiRGVzaGFiaWxpdGFyIGxhIGV4dGVuc2nzbiBURlRQIGJsb2Nrc2l6ZSAodGFtYfFvIGRlIGJsb3F1ZSkuIgorCisjOiBvcHRpb24uYzo0NDEKK21zZ2lkICJDb252ZXJ0IFRGVFAgZmlsZW5hbWVzIHRvIGxvd2VyY2FzZSIKK21zZ3N0ciAiQ29udmVydGlyIGEgbWlu+nNjdWxhcyBsb3Mgbm9tYnJlcyBkZSBhcmNoaXZvcyBURlRQIgorCisjOiBvcHRpb24uYzo0NDIKK21zZ2lkICJFcGhlbWVyYWwgcG9ydCByYW5nZSBmb3IgdXNlIGJ5IFRGVFAgdHJhbnNmZXJzLiIKK21zZ3N0ciAiUmFuZ28gZGUgcHVlcnRvcyBlZu1tZXJvcyBwYXJhIHNlciB1c2Fkb3MgZW4gdHJhbnNmZXJlbmNpYXMgVEZUUC4iCisKKyM6IG9wdGlvbi5jOjQ0MworbXNnaWQgIkV4dHJhIGxvZ2dpbmcgZm9yIERIQ1AuIgorbXNnc3RyICJMb2cgZXh0cmEgcGFyYSBESENQLiIKKworIzogb3B0aW9uLmM6NDQ0Cittc2dpZCAiRW5hYmxlIGFzeW5jLiBsb2dnaW5nOyBvcHRpb25hbGx5IHNldCBxdWV1ZSBsZW5ndGguIgorbXNnc3RyICJIYWJpbGl0YXIgcmVnaXN0cm8gYXPtbmNyb25vOyBvcGNpb25hbG1lbnRlIGZpamFyIHRhbWHxbyBkZSBjb2xhLiIKKworIzogb3B0aW9uLmM6NDQ1Cittc2dpZCAiU3RvcCBETlMgcmViaW5kaW5nLiBGaWx0ZXIgcHJpdmF0ZSBJUCByYW5nZXMgd2hlbiByZXNvbHZpbmcuIgorbXNnc3RyICJEZXRlbmVyIHJldmluY3VsYWNp824gRE5TLiBGaWx0cmFyIHJhbmdvcyBkZSBJUCBwcml2YWRvcyBhbCByZXNvbHZlci4iCisKKyM6IG9wdGlvbi5jOjQ0NgorbXNnaWQgIkFsbG93IHJlYmluZGluZyBvZiAxMjcuMC4wLjAvOCwgZm9yIFJCTCBzZXJ2ZXJzLiIKK21zZ3N0ciAiUGVybWl0aXIgcmV2aW5jdWxhY2nzbiBkZSAxMjcuMC4wLjAvOCwgcGFyYSBzZXJ2aWRvcmVzIFJCTC4iCisKKyM6IG9wdGlvbi5jOjQ0NworbXNnaWQgIkluaGliaXQgRE5TLXJlYmluZCBwcm90ZWN0aW9uIG9uIHRoaXMgZG9tYWluLiIKK21zZ3N0ciAiSW5oaWJpciBwcm90ZWNjafNuIGRlIHJldmluY3VsYWNp824gRE5TIGVuIGVzdGUgZG9taW5pby4iCisKKyM6IG9wdGlvbi5jOjQ0OAorbXNnaWQgIkFsd2F5cyBwZXJmb3JtIEROUyBxdWVyaWVzIHRvIGFsbCBzZXJ2ZXJzLiIKK21zZ3N0ciAiU2llbXByZSByZWFsaXphciBi+nNxdWVkYXMgRE5TIGEgdG9kb3MgbG9zIHNlcnZpZG9yZXMuIgorCisjOiBvcHRpb24uYzo0NDkKKyMsIGZ1enp5Cittc2dpZCAiU2V0IHRhZyBpZiBjbGllbnQgaW5jbHVkZXMgbWF0Y2hpbmcgb3B0aW9uIGluIHJlcXVlc3QuIgorbXNnc3RyICJGaWphciBldGlxdWV0YSBzaSBjbGllbnRlIGluY2x1eWUgb3BjafNuIGNvaW5jaWRlbnRlIGVuIHBlZGlkby4iCisKKyM6IG9wdGlvbi5jOjQ1MAorbXNnaWQgIlVzZSBhbHRlcm5hdGl2ZSBwb3J0cyBmb3IgREhDUC4iCittc2dzdHIgIlVzYXIgcHVlcnRvcyBhbHRlcm5hdGl2b3MgcGFyYSBESENQLiIKKworIzogb3B0aW9uLmM6NDUxCisjLCBmdXp6eQorbXNnaWQgIlNwZWNpZnkgTkFQVFIgRE5TIHJlY29yZC4iCittc2dzdHIgIkVzcGVjaWZpY2FyIGV4cGVkaWVudGUgRE5TIE5BUFRSLiIKKworIzogb3B0aW9uLmM6NDUyCittc2dpZCAiU3BlY2lmeSBsb3dlc3QgcG9ydCBhdmFpbGFibGUgZm9yIEROUyBxdWVyeSB0cmFuc21pc3Npb24uIgorbXNnc3RyICJFc3BlY2lmaWNhciBwdWVydG8gbeFzIGJham8gZGlzcG9uaWJsZSBwYXJhIHRyYW5zbWlzafNuIGRlIGL6c3F1ZWRhcyBETlMuIgorCisjOiBvcHRpb24uYzo0NTMKKyMsIGZ1enp5Cittc2dpZCAiU3BlY2lmeSBoaWdoZXN0IHBvcnQgYXZhaWxhYmxlIGZvciBETlMgcXVlcnkgdHJhbnNtaXNzaW9uLiIKK21zZ3N0ciAiRXNwZWNpZmljYXIgcHVlcnRvIG3hcyBiYWpvIGRpc3BvbmlibGUgcGFyYSB0cmFuc21pc2nzbiBkZSBi+nNxdWVkYXMgRE5TLiIKKworIzogb3B0aW9uLmM6NDU0Cittc2dpZCAiVXNlIG9ubHkgZnVsbHkgcXVhbGlmaWVkIGRvbWFpbiBuYW1lcyBmb3IgREhDUCBjbGllbnRzLiIKK21zZ3N0ciAiVXNhciBzb2xvIG5vbWJyZXMgZGUgZG9taW5pbyBjb21wbGV0YW1lbnRlIGNhbGlmaWNhZG9zIHBhcmEgY2xpZW50ZXMgREhDUC4iCisKKyM6IG9wdGlvbi5jOjQ1NQorbXNnaWQgIkdlbmVyYXRlIGhvc3RuYW1lcyBiYXNlZCBvbiBNQUMgYWRkcmVzcyBmb3IgbmFtZWxlc3MgY2xpZW50cy4iCittc2dzdHIgIkdlbmVyYXIgaG9zdG5hbWVzIGJhc2Fkb3MgZW4gZGlyZWNjaW9uZXMgTUFDIHBhcmEgY2xpZW50ZXMgc2luIG5vbWJyZS4iCisKKyM6IG9wdGlvbi5jOjQ1NgorbXNnaWQgIlVzZSB0aGVzZSBESENQIHJlbGF5cyBhcyBmdWxsIHByb3hpZXMuIgorbXNnc3RyICJVc2FyIGVzdG9zIHJlbGF5cyBESENQIGNvbW8gcHJveGllcyBjb21wbGV0b3MuIgorCisjOiBvcHRpb24uYzo0NTcKK21zZ2lkICJSZWxheSBESENQIHJlcXVlc3RzIHRvIGEgcmVtb3RlIHNlcnZlciIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NTgKK21zZ2lkICJTcGVjaWZ5IGFsaWFzIG5hbWUgZm9yIExPQ0FMIEROUyBuYW1lLiIKK21zZ3N0ciAiRXNwZWNpZmljYXIgbm9tYnJlIGFsaWFzIHBhcmEgbm9tYnJlIEROUyBMT0NBTC4iCisKKyM6IG9wdGlvbi5jOjQ1OQorIywgZnV6enkKK21zZ2lkICJQcm9tcHQgdG8gc2VuZCB0byBQWEUgY2xpZW50cy4iCittc2dzdHIgIkF2aXNvIGEgc2VyIGVudmlhZG8gYSBjbGllbnRlcyBQWEUuIgorCisjOiBvcHRpb24uYzo0NjAKK21zZ2lkICJCb290IHNlcnZpY2UgZm9yIFBYRSBtZW51LiIKK21zZ3N0ciAiU2VydmljaW8gZGUgYXJyYW5xdWUgcGFyYSBtZW76IFBYRS4iCisKKyM6IG9wdGlvbi5jOjQ2MQorbXNnaWQgIkNoZWNrIGNvbmZpZ3VyYXRpb24gc3ludGF4LiIKK21zZ3N0ciAiUmV2aXNhciBzaW50YXhpcyBkZSBjb25maWd1cmFjafNuLiIKKworIzogb3B0aW9uLmM6NDYyCittc2dpZCAiQWRkIHJlcXVlc3RvcidzIE1BQyBhZGRyZXNzIHRvIGZvcndhcmRlZCBETlMgcXVlcmllcy4iCittc2dzdHIgIkHxYWRpciBkaXJlY2Npb25lcyBNQUMgZGUgbG9zIHBldGljaW9uYXJpb3MgYSBsb3MgZmlsdHJvcyBETlMgZW52aWFkb3MiCisKKyM6IG9wdGlvbi5jOjQ2MworIywgZnV6enkKK21zZ2lkICJBZGQgc3BlY2lmaWVkIElQIHN1Ym5ldCB0byBmb3J3YXJkZWQgRE5TIHF1ZXJpZXMuIgorbXNnc3RyICJB8WFkaXIgZGlyZWNjaW9uZXMgTUFDIGRlIGxvcyBwZXRpY2lvbmFyaW9zIGEgbG9zIGZpbHRyb3MgRE5TIGVudmlhZG9zIgorCisjOiBvcHRpb24uYzo0NjQKKyMsIGZ1enp5Cittc2dpZCAiQWRkIGNsaWVudCBpZGVudGlmaWNhdGlvbiB0byBmb3J3YXJkZWQgRE5TIHF1ZXJpZXMuIgorbXNnc3RyICJB8WFkaXIgZGlyZWNjaW9uZXMgTUFDIGRlIGxvcyBwZXRpY2lvbmFyaW9zIGEgbG9zIGZpbHRyb3MgRE5TIGVudmlhZG9zIgorCisjOiBvcHRpb24uYzo0NjUKKyMsIGZ1enp5Cittc2dpZCAiUHJveHkgRE5TU0VDIHZhbGlkYXRpb24gcmVzdWx0cyBmcm9tIHVwc3RyZWFtIG5hbWVzZXJ2ZXJzLiIKK21zZ3N0ciAiVHJhZHVjaXIgZGlyZWNjaW9uZXMgSVB2NCBkZXNkZSBzZXJ2aWRvcmVzIHN1YmlkYS4iCisKKyM6IG9wdGlvbi5jOjQ2NgorbXNnaWQgIkF0dGVtcHQgdG8gYWxsb2NhdGUgc2VxdWVudGlhbCBJUCBhZGRyZXNzZXMgdG8gREhDUCBjbGllbnRzLiIKK21zZ3N0ciAiSW50ZW50byBkZSBpbnN0YXVyYXIgZGlyZWNjaW9uZXMgSVAgc2VjdWVuY2lhbGVzIGEgY2xpZW50ZSBESENQIgorCisjOiBvcHRpb24uYzo0NjcKK21zZ2lkICJDb3B5IGNvbm5lY3Rpb24tdHJhY2sgbWFyayBmcm9tIHF1ZXJpZXMgdG8gdXBzdHJlYW0gY29ubmVjdGlvbnMuIgorbXNnc3RyICJDb3BpYXIgbGEgbWFyY2EgZGUgY29ubmVjdGlvbi10cmFjayBkZXNkZSBsb3MgZmlsdHJvcyBhIGxhcyBjb25leGlvbmVzIHNhbGllbnRlcyIKKworIzogb3B0aW9uLmM6NDY4Cittc2dpZCAiQWxsb3cgREhDUCBjbGllbnRzIHRvIGRvIHRoZWlyIG93biBERE5TIHVwZGF0ZXMuIgorbXNnc3RyICJQZXJtaXRlIGEgY2xpZW50ZXMgREhDUCByZWFsaXphciBzdXMgcHJvcGlhcyBhY3R1YWxpemFjaW9uZXMgREROUyIKKworIzogb3B0aW9uLmM6NDY5Cittc2dpZCAiU2VuZCByb3V0ZXItYWR2ZXJ0aXNlbWVudHMgZm9yIGludGVyZmFjZXMgZG9pbmcgREhDUHY2IgorbXNnc3RyICJFbnZpYXIgYW51bmNpb3MgZGVsIHJvdXRlciBhIGxvcyBpbnRlcmZhc2VzIHJlYWxpemFuZG8gREhDUHY2IgorCisjOiBvcHRpb24uYzo0NzAKK21zZ2lkICJTcGVjaWZ5IERVSURfRU4tdHlwZSBESENQdjYgc2VydmVyIERVSUQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDcxCisjLCBmdXp6eQorbXNnaWQgIlNwZWNpZnkgaG9zdCAoQS9BQUFBIGFuZCBQVFIpIHJlY29yZHMiCittc2dzdHIgIkVzcGVjaWZpY2FyIHVuIGV4cGVkaWVudGUgTVguIgorCisjOiBvcHRpb24uYzo0NzIKKyMsIGZ1enp5Cittc2dpZCAiU3BlY2lmeSBhcmJpdHJhcnkgRE5TIHJlc291cmNlIHJlY29yZCIKK21zZ3N0ciAiRXNwZWNpZmljYXIgZXhwZWRpZW50ZSBETlMgVFhULiIKKworIzogb3B0aW9uLmM6NDczCisjLCBmdXp6eQorbXNnaWQgIkJpbmQgdG8gaW50ZXJmYWNlcyBpbiB1c2UgLSBjaGVjayBmb3IgbmV3IGludGVyZmFjZXMiCittc2dzdHIgImludGVyZmFzZSBkZXNjb25vY2lkYSAlcyBlbiBicmlkZ2UtaW50ZXJmYXNlIgorCisjOiBvcHRpb24uYzo0NzQKK21zZ2lkICJFeHBvcnQgbG9jYWwgbmFtZXMgdG8gZ2xvYmFsIEROUyIKK21zZ3N0ciAiRXhwb3J0YXIgbm9tYnJlcyBETlMgbG9jYWxlcyBhIGdsb2JhbGVzIgorCisjOiBvcHRpb24uYzo0NzUKK21zZ2lkICJEb21haW4gdG8gZXhwb3J0IHRvIGdsb2JhbCBETlMiCittc2dzdHIgIkRvbWluaW8gYSBleHBvcnRhciBhIEROUyBnbG9iYWwiCisKKyM6IG9wdGlvbi5jOjQ3NgorbXNnaWQgIlNldCBUVEwgZm9yIGF1dGhvcml0YXRpdmUgcmVwbGllcyIKK21zZ3N0ciAiRmlqYXIgVFRMIHBhcmEgcmVzcHVlc3RhcyBhdXRvcml0YXJpYXMiCisKKyM6IG9wdGlvbi5jOjQ3NworIywgZnV6enkKK21zZ2lkICJTZXQgYXV0aG9yaXRhdGl2ZSB6b25lIGluZm9ybWF0aW9uIgorbXNnc3RyICJGaWphciBpbmZvcm1hY2nzbiBkZSB6b25hIGF1dG9yaXRhcmlhIgorCisjOiBvcHRpb24uYzo0NzgKK21zZ2lkICJTZWNvbmRhcnkgYXV0aG9yaXRhdGl2ZSBuYW1lc2VydmVycyBmb3IgZm9yd2FyZCBkb21haW5zIgorbXNnc3RyICJOb21icmVzIGRlIHNlcnZpZG9yIHNlY3VuZGFyaW8gYXV0b3JpdGF0b3Jpb3MgcGFyYSBkb21pbmlvcyBlbnZpYWRvcyIKKworIzogb3B0aW9uLmM6NDc5Cittc2dpZCAiUGVlcnMgd2hpY2ggYXJlIGFsbG93ZWQgdG8gZG8gem9uZSB0cmFuc2ZlciIKK21zZ3N0ciAiQ29sZWdhcyBhdXRvcml6YWRvcyBhIGxhIHpvbmEgZGUgdHJhbnNmZXJlbmNpYSAodHJhbnNmZXIpIgorCisjOiBvcHRpb24uYzo0ODAKK21zZ2lkICJTcGVjaWZ5IGlwc2V0cyB0byB3aGljaCBtYXRjaGluZyBkb21haW5zIHNob3VsZCBiZSBhZGRlZCIKK21zZ3N0ciAiRXNwZWNpZmljYXIgbG9zIGlwc2V0cyBjb2luY2lkZW50ZXMgZW4gZG9taW5pbyBxdWUgZGVicu1hbiBzZXIgYfFhZGlkb3MiCisKKyM6IG9wdGlvbi5jOjQ4MQorIywgZnV6enkKK21zZ2lkICJTcGVjaWZ5IGEgZG9tYWluIGFuZCBhZGRyZXNzIHJhbmdlIGZvciBzeW50aGVzaXNlZCBuYW1lcyIKK21zZ3N0ciAiRXNwZWNpZmljYXIgZG9taW5pbyB5IHJhbmdvIGRlIGRpcmVjY2lvbmVzIHBhcmEgbG9zIG5vbWJyZXMgYWNy825pbW9zIgorCisjOiBvcHRpb24uYzo0ODIKK21zZ2lkICJBY3RpdmF0ZSBETlNTRUMgdmFsaWRhdGlvbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0ODMKK21zZ2lkICJTcGVjaWZ5IHRydXN0IGFuY2hvciBrZXkgZGlnZXN0LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0ODQKK21zZ2lkICJEaXNhYmxlIHVwc3RyZWFtIGNoZWNraW5nIGZvciBETlNTRUMgZGVidWdnaW5nLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0ODUKK21zZ2lkICJFbnN1cmUgYW5zd2VycyB3aXRob3V0IEROU1NFQyBhcmUgaW4gdW5zaWduZWQgem9uZXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ4NgorbXNnaWQgIkRvbid0IGNoZWNrIEROU1NFQyBzaWduYXR1cmUgdGltZXN0YW1wcyB1bnRpbCBmaXJzdCBjYWNoZS1yZWxvYWQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDg3Cittc2dpZCAiVGltZXN0YW1wIGZpbGUgdG8gdmVyaWZ5IHN5c3RlbSBjbG9jayBmb3IgRE5TU0VDIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ4OQorbXNnaWQgIlNwZWNpZnkgREhDUHY2IHByZWZpeCBjbGFzcyIKK21zZ3N0ciAiRXNwZWNpZmljYXIgcHJlZmlqbyBkZSBjbGFzZSBESENQdjYiCisKKyM6IG9wdGlvbi5jOjQ5MQorbXNnaWQgIlNldCBNVFUsIHByaW9yaXR5LCByZXNlbmQtaW50ZXJ2YWwgYW5kIHJvdXRlci1saWZldGltZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0OTIKK21zZ2lkICJEbyBub3QgbG9nIHJvdXRpbmUgREhDUC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDkzCittc2dpZCAiRG8gbm90IGxvZyByb3V0aW5lIERIQ1B2Ni4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDk0Cittc2dpZCAiRG8gbm90IGxvZyBSQS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDk1Cittc2dpZCAiQWNjZXB0IHF1ZXJpZXMgb25seSBmcm9tIGRpcmVjdGx5LWNvbm5lY3RlZCBuZXR3b3Jrcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDk2Cittc2dpZCAiRGV0ZWN0IGFuZCByZW1vdmUgRE5TIGZvcndhcmRpbmcgbG9vcHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ5NworbXNnaWQgIklnbm9yZSBETlMgcmVzcG9uc2VzIGNvbnRhaW5pbmcgaXBhZGRyLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0OTgKK21zZ2lkICJTZXQgVFRMIGluIEROUyByZXNwb25zZXMgd2l0aCBESENQLWRlcml2ZWQgYWRkcmVzc2VzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0OTkKK21zZ2lkICJEZWxheSBESENQIHJlcGxpZXMgZm9yIGF0IGxlYXN0IG51bWJlciBvZiBzZWNvbmRzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo3MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiBkbnNtYXNxIFtvcHRpb25zXVxuIgorIlxuIgorbXNnc3RyICIiCisiTW9kbyBkZSB1c286IGRuc21hc3EgW29wY2lvbmVzXVxuIgorIlxuIgorCisjOiBvcHRpb24uYzo3MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNlIHNob3J0IG9wdGlvbnMgb25seSBvbiB0aGUgY29tbWFuZCBsaW5lLlxuIgorbXNnc3RyICJVc2FyIG9wY2lvbmVzIGNvcnRhcyBzb2xvIGVuIGxhIGztbmVhIGRlIGNvbWFuZG9zLlxuIgorCisjOiBvcHRpb24uYzo3MDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlZhbGlkIG9wdGlvbnMgYXJlOlxuIgorbXNnc3RyICJPcGNpb25lcyB24WxpZGFzIHNvbiA6XG4iCisKKyM6IG9wdGlvbi5jOjc1NCBvcHRpb24uYzo4NjgKKyMsIGZ1enp5Cittc2dpZCAiYmFkIGFkZHJlc3MiCittc2dzdHIgImRpcmVjY2nzbiBJUCBlcnLzbmVhIgorCisjOiBvcHRpb24uYzo3Nzkgb3B0aW9uLmM6NzgzCittc2dpZCAiYmFkIHBvcnQiCittc2dzdHIgInB1ZXJ0byBlcnLzbmVvIgorCisjOiBvcHRpb24uYzo3OTcgb3B0aW9uLmM6ODI2IG9wdGlvbi5jOjg2MQorbXNnaWQgImludGVyZmFjZSBiaW5kaW5nIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgInZpbmN1bGFjafNuIGRlIGludGVyZmFzZSBubyBlc3ThIHNvcG9ydGFkbyIKKworIzogb3B0aW9uLmM6ODIxIG9wdGlvbi5jOjg1NgorbXNnaWQgImludGVyZmFjZSBjYW4gb25seSBiZSBzcGVjaWZpZWQgb25jZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo4MzUgb3B0aW9uLmM6MzgwMAorIywgZnV6enkKK21zZ2lkICJiYWQgaW50ZXJmYWNlIG5hbWUiCittc2dzdHIgIm5vbWJyZSBkZSBpbnRlcmZhc2UgZXJy825lbyIKKworIzogb3B0aW9uLmM6MTA2MgorbXNnaWQgInVuc3VwcG9ydGVkIGVuY2Fwc3VsYXRpb24gZm9yIElQdjYgb3B0aW9uIgorbXNnc3RyICJFbmNhcHN1bGFjafNuIG5vIHNvcG9ydGFkYSBwYXJhIG9wY2nzbiBJUHY2IgorCisjOiBvcHRpb24uYzoxMDc2Cittc2dpZCAiYmFkIGRoY3Atb3B0aW9uIgorbXNnc3RyICJvcGNp824gZGhjcC1vcHRpb24gZXJy825lYSIKKworIzogb3B0aW9uLmM6MTE0NAorIywgZnV6enkKK21zZ2lkICJiYWQgSVAgYWRkcmVzcyIKK21zZ3N0ciAiZGlyZWNjafNuIElQIGVycvNuZWEiCisKKyM6IG9wdGlvbi5jOjExNDcgb3B0aW9uLmM6MTI4NiBvcHRpb24uYzozMDcwCisjLCBmdXp6eQorbXNnaWQgImJhZCBJUHY2IGFkZHJlc3MiCittc2dzdHIgImRpcmVjY2nzbiBJUCBlcnLzbmVhIgorCisjOiBvcHRpb24uYzoxMjQwCisjLCBmdXp6eQorbXNnaWQgImJhZCBJUHY0IGFkZHJlc3MiCittc2dzdHIgImRpcmVjY2nzbiBJUCBlcnLzbmVhIgorCisjOiBvcHRpb24uYzoxMzEzIG9wdGlvbi5jOjE0MDcKK21zZ2lkICJiYWQgZG9tYWluIGluIGRoY3Atb3B0aW9uIgorbXNnc3RyICJkb21pbmlvIGVycvNuZW8gZW4gZGhjcC1vcHRpb24iCisKKyM6IG9wdGlvbi5jOjE0NDUKK21zZ2lkICJkaGNwLW9wdGlvbiB0b28gbG9uZyIKK21zZ3N0ciAib3BjafNuIGRoY3Atb3B0aW9uIGRlbWFzaWFkbyBsYXJnYSIKKworIzogb3B0aW9uLmM6MTQ1MgorbXNnaWQgImlsbGVnYWwgZGhjcC1tYXRjaCIKK21zZ3N0ciAiZGhjcC1tYXRjaCBpbGVnYWwiCisKKyM6IG9wdGlvbi5jOjE1MTQKK21zZ2lkICJpbGxlZ2FsIHJlcGVhdGVkIGZsYWciCittc2dzdHIgIm9wY2nzbiByZXBldGlkYSBpbGVnYWwiCisKKyM6IG9wdGlvbi5jOjE1MjIKK21zZ2lkICJpbGxlZ2FsIHJlcGVhdGVkIGtleXdvcmQiCittc2dzdHIgInBhbGFicmEgY2xhdmUgcmVwZXRpZGEgaWxlZ2FsIgorCisjOiBvcHRpb24uYzoxNTkzIG9wdGlvbi5jOjQ0MzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBhY2Nlc3MgZGlyZWN0b3J5ICVzOiAlcyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgYWNjZWRlciBhIGRpcmVjdG9yaW8gJXM6ICVzIgorCisjOiBvcHRpb24uYzoxNjM5IHRmdHAuYzo1MzcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBhY2Nlc3MgJXM6ICVzIgorbXNnc3RyICJubyBzZSBwdWVkZSBhY2NlZGVyICVzOiAlcyIKKworIzogb3B0aW9uLmM6MTcyNworbXNnaWQgInNldHRpbmcgbG9nIGZhY2lsaXR5IGlzIG5vdCBwb3NzaWJsZSB1bmRlciBBbmRyb2lkIgorbXNnc3RyICJsYSBjcmVhY2nzbiBkZSB1biByZWdpc3RybyBubyBlcyBwb3NpYmxlIGVuIEFuZHJvaWQiCisKKyM6IG9wdGlvbi5jOjE3MzYKK21zZ2lkICJiYWQgbG9nIGZhY2lsaXR5IgorbXNnc3RyICJ1YmljYWNp824gZGVsIHJlZ2lzdHJvIGVycvNuZWEiCisKKyM6IG9wdGlvbi5jOjE3ODkKK21zZ2lkICJiYWQgTVggcHJlZmVyZW5jZSIKK21zZ3N0ciAicHJlZmVyZW5jaWEgTVggZXJy825lYSIKKworIzogb3B0aW9uLmM6MTc5NAorbXNnaWQgImJhZCBNWCBuYW1lIgorbXNnc3RyICJub21icmUgTVggZXJy825lbyIKKworIzogb3B0aW9uLmM6MTgwOAorbXNnaWQgImJhZCBNWCB0YXJnZXQiCittc2dzdHIgImRlc3Rpbm8gTVggZXJy825lbyIKKworIzogb3B0aW9uLmM6MTgyMAorbXNnaWQgImNhbm5vdCBydW4gc2NyaXB0cyB1bmRlciB1Q2xpbnV4IgorbXNnc3RyICJubyBzZSBwdWVkZW4gY29ycmVyIGFyY2hpdm9zICdzY3JpcHQnIGJham8gdUNsaW51eCIKKworIzogb3B0aW9uLmM6MTgyMgorbXNnaWQgInJlY29tcGlsZSB3aXRoIEhBVkVfU0NSSVBUIGRlZmluZWQgdG8gZW5hYmxlIGxlYXNlLWNoYW5nZSBzY3JpcHRzIgorbXNnc3RyICJyZWNvbXBpbGFyIGNvbiBIQVZFX1NDUklQVCBkZWZpbmlkbyBwYXJhIGhhYmlsaXRhciBndWnzbmVzIGRlIGNhbWJpbyBkZSBjb25jZXNp824iCisKKyM6IG9wdGlvbi5jOjE4MjYKKyMsIGZ1enp5Cittc2dpZCAicmVjb21waWxlIHdpdGggSEFWRV9MVUFTQ1JJUFQgZGVmaW5lZCB0byBlbmFibGUgTHVhIHNjcmlwdHMiCittc2dzdHIgInJlY29tcGlsYXIgY29uIEhBVkVfU0NSSVBUIGRlZmluaWRvIHBhcmEgaGFiaWxpdGFyICdzY3JpcHRzJyBlbiBMdWEiCisKKyM6IG9wdGlvbi5jOjIwOTUgb3B0aW9uLmM6MjEwNiBvcHRpb24uYzoyMTQzIG9wdGlvbi5jOjIxOTkgb3B0aW9uLmM6MjQ4MgorIywgZnV6enkKK21zZ2lkICJiYWQgcHJlZml4IgorbXNnc3RyICJwcmVmaWpvIGVycvNuZW8iCisKKyM6IG9wdGlvbi5jOjI1MDQKKyMsIGZ1enp5Cittc2dpZCAicmVjb21waWxlIHdpdGggSEFWRV9JUFNFVCBkZWZpbmVkIHRvIGVuYWJsZSBpcHNldCBkaXJlY3RpdmVzIgorbXNnc3RyICJyZWNvbXBpbGFyIGNvbiBIQVZFX1NDUklQVCBkZWZpbmlkbyBwYXJhIGhhYmlsaXRhciBkaXJlY3RpdmFzIGlwc2V0IgorCisjOiBvcHRpb24uYzoyNzEzCisjLCBmdXp6eQorbXNnaWQgImJhZCBwb3J0IHJhbmdlIgorbXNnc3RyICJyYW5nbyBkZSBwdWVydG9zIGVycvNuZW8iCisKKyM6IG9wdGlvbi5jOjI3MzgKK21zZ2lkICJiYWQgYnJpZGdlLWludGVyZmFjZSIKK21zZ3N0ciAib3BjafNuIGJyaWRnZS1pbnRlcmZhY2UgKGludGVyZmFzZSBwdWVudGUpIGVycvNuZWEiCisKKyM6IG9wdGlvbi5jOjI3OTgKK21zZ2lkICJvbmx5IG9uZSB0YWcgYWxsb3dlZCIKK21zZ3N0ciAic29sbyB1bmEgZXRpcXVldGEgcGVybWl0aWRhIgorCisjOiBvcHRpb24uYzoyODE4IG9wdGlvbi5jOjI4MzAgb3B0aW9uLmM6MjkzOSBvcHRpb24uYzoyOTQ0IG9wdGlvbi5jOjI5ODMKK21zZ2lkICJiYWQgZGhjcC1yYW5nZSIKK21zZ3N0ciAib3BjafNuIGRoY3AtcmFuZ2UgKHJhbmdvIERIQ1ApIGVycvNuZWEiCisKKyM6IG9wdGlvbi5jOjI4NDUKK21zZ2lkICJpbmNvbnNpc3RlbnQgREhDUCByYW5nZSIKK21zZ3N0ciAicmFuZ28gREhDUCBpbmNvbnNpc3RlbnRlIgorCisjOiBvcHRpb24uYzoyOTA3Cittc2dpZCAicHJlZml4IGxlbmd0aCBtdXN0IGJlIGV4YWN0bHkgNjQgZm9yIFJBIHN1Ym5ldHMiCittc2dzdHIgImxhIGxvbmdpdHVkIGRlbCBwcmVmaWpvIGRlYmUgc2VyIDY0IGV4YWN0byBwYXJhIHN1YnJlZGVzIFJBIgorCisjOiBvcHRpb24uYzoyOTA5Cittc2dpZCAicHJlZml4IGxlbmd0aCBtdXN0IGJlIGV4YWN0bHkgNjQgZm9yIHN1Ym5ldCBjb25zdHJ1Y3RvcnMiCittc2dzdHIgImxhIGxvbmdpdHVkIGRlbCBwcmVmaWpvIGRlYmUgc2VyIDY0IGV4YWN0byBwYXJhIHN1YnJlZGVzIGNvbnN0cnVjdG9yYXMiCisKKyM6IG9wdGlvbi5jOjI5MTMKK21zZ2lkICJwcmVmaXggbGVuZ3RoIG11c3QgYmUgYXQgbGVhc3QgNjQiCittc2dzdHIgImxhIGxvbmdpdHVkIGRlbCBwcmVmaWpvIGRlYmUgc2VyIGFsIG1lbm9zIDY0IgorCisjOiBvcHRpb24uYzoyOTE2CisjLCBmdXp6eQorbXNnaWQgImluY29uc2lzdGVudCBESENQdjYgcmFuZ2UiCittc2dzdHIgInJhbmdvIERIQ1AgaW5jb25zaXN0ZW50ZSIKKworIzogb3B0aW9uLmM6MjkyNworbXNnaWQgInByZWZpeCBtdXN0IGJlIHplcm8gd2l0aCBcImNvbnN0cnVjdG9yOlwiIGFyZ3VtZW50IgorbXNnc3RyICJwcmVmaWpvIGRlYmUgc2VyIGNlcm8gY29uIGFyZ3VtZW50byBcImNvbnN0cnVjdG9yOlwiIgorCisjOiBvcHRpb24uYzozMDQwIG9wdGlvbi5jOjMwODgKKyMsIGZ1enp5Cittc2dpZCAiYmFkIGhleCBjb25zdGFudCIKK21zZ3N0ciAiY29uc3RhbnRlIGhleGFkZWNpbWFsIGVycvNuZWEiCisKKyM6IG9wdGlvbi5jOjMwNjIKK21zZ2lkICJjYW5ub3QgbWF0Y2ggdGFncyBpbiAtLWRoY3AtaG9zdCIKK21zZ3N0ciAibm8gY29pbmNpZGVuIGV0aXF1ZXRhcyBlbiAtLWRoY3AtaG9zdCIKKworIzogb3B0aW9uLmM6MzExMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIGRoY3AtaG9zdCBJUCBhZGRyZXNzICVzIgorbXNnc3RyICJkaXJlY2Np824gSVAgZHVwbGljYWRhICVzIGVuICVzLiIKKworIzogb3B0aW9uLmM6MzE2OAorIywgZnV6enkKK21zZ2lkICJiYWQgREhDUCBob3N0IG5hbWUiCittc2dzdHIgIm5vbWJyZSBkZSBob3N0IERIQ1AgZXJy825lbyIKKworIzogb3B0aW9uLmM6MzI1MAorIywgZnV6enkKK21zZ2lkICJiYWQgdGFnLWlmIgorbXNnc3RyICJldGlxdWV0YSB0YWctaWYgZXJy825lYSIKKworIzogb3B0aW9uLmM6MzYwNyBvcHRpb24uYzo0MDMwCittc2dpZCAiaW52YWxpZCBwb3J0IG51bWJlciIKK21zZ3N0ciAibvptZXJvIGRlIHB1ZXJ0byBpbnbhbGlkbyIKKworIzogb3B0aW9uLmM6MzY2OQorIywgZnV6enkKK21zZ2lkICJiYWQgZGhjcC1wcm94eSBhZGRyZXNzIgorbXNnc3RyICJkaXJlY2Np824gSVAgZXJy825lYSIKKworIzogb3B0aW9uLmM6MzY5NQorIywgZnV6enkKK21zZ2lkICJCYWQgZGhjcC1yZWxheSIKK21zZ3N0ciAib3BjafNuIGRoY3AtcmFuZ2UgKHJhbmdvIERIQ1ApIGVycvNuZWEiCisKKyM6IG9wdGlvbi5jOjM3MzYKK21zZ2lkICJiYWQgUkEtcGFyYW1zIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM3NDUKK21zZ2lkICJiYWQgRFVJRCIKK21zZ3N0ciAiRFVJRCBlcnLzbmVvIgorCisjOiBvcHRpb24uYzozNzg3CisjLCBmdXp6eQorbXNnaWQgImludmFsaWQgYWxpYXMgcmFuZ2UiCittc2dzdHIgInJhbmdvIGFsaWFzIGluduFsaWRvIgorCisjOiBvcHRpb24uYzozODQxIG9wdGlvbi5jOjM4NTMKK21zZ2lkICJiYWQgQ05BTUUiCittc2dzdHIgIkNOQU1FIGVycvNuZW8iCisKKyM6IG9wdGlvbi5jOjM4NTcKK21zZ2lkICJkdXBsaWNhdGUgQ05BTUUiCittc2dzdHIgIkNOQU1FIGR1cGxpY2FkbyIKKworIzogb3B0aW9uLmM6Mzg4MAorIywgZnV6enkKK21zZ2lkICJiYWQgUFRSIHJlY29yZCIKK21zZ3N0ciAicmVnaXN0cm8gUFRSIGVycvNuZW8iCisKKyM6IG9wdGlvbi5jOjM5MTEKKyMsIGZ1enp5Cittc2dpZCAiYmFkIE5BUFRSIHJlY29yZCIKK21zZ3N0ciAicmVnaXN0cm8gTkFQVFIgZXJy825lbyIKKworIzogb3B0aW9uLmM6Mzk0NQorIywgZnV6enkKK21zZ2lkICJiYWQgUlIgcmVjb3JkIgorbXNnc3RyICJyZWdpc3RybyBQVFIgZXJy825lbyIKKworIzogb3B0aW9uLmM6Mzk3NQorbXNnaWQgImJhZCBUWFQgcmVjb3JkIgorbXNnc3RyICJyZWdpc3RybyBUWFQgZXJy825lbyIKKworIzogb3B0aW9uLmM6NDAxNgorbXNnaWQgImJhZCBTUlYgcmVjb3JkIgorbXNnc3RyICJyZWdpc3RybyBTUlYgZXJy825lbyIKKworIzogb3B0aW9uLmM6NDAyMworbXNnaWQgImJhZCBTUlYgdGFyZ2V0IgorbXNnc3RyICJkZXN0aW5vIFNSViBlcnLzbmVvIgorCisjOiBvcHRpb24uYzo0MDM3Cittc2dpZCAiaW52YWxpZCBwcmlvcml0eSIKK21zZ3N0ciAicHJpb3JpZGFkIGluduFsaWRhIgorCisjOiBvcHRpb24uYzo0MDQwCittc2dpZCAiaW52YWxpZCB3ZWlnaHQiCittc2dzdHIgInBlc28gaW524WxpZG8iCisKKyM6IG9wdGlvbi5jOjQwNjQKKyMsIGZ1enp5Cittc2dpZCAiQmFkIGhvc3QtcmVjb3JkIgorbXNnc3RyICJyZWdpc3RybyBQVFIgZXJy825lbyIKKworIzogb3B0aW9uLmM6NDA4OAorIywgZnV6enkKK21zZ2lkICJCYWQgbmFtZSBpbiBob3N0LXJlY29yZCIKK21zZ3N0ciAibm9tYnJlIGVycvNuZW8gZW4gJXMiCisKKyM6IG9wdGlvbi5jOjQxNTMKKyMsIGZ1enp5Cittc2dpZCAiYmFkIHRydXN0IGFuY2hvciIKK21zZ3N0ciAicmFuZ28gZGUgcHVlcnRvcyBlcnLzbmVvIgorCisjOiBvcHRpb24uYzo0MTY3Cittc2dpZCAiYmFkIEhFWCBpbiB0cnVzdCBhbmNob3IiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDE3NworIywgZnV6enkKK21zZ2lkICJ1bnN1cHBvcnRlZCBvcHRpb24gKGNoZWNrIHRoYXQgZG5zbWFzcSB3YXMgY29tcGlsZWQgd2l0aCBESENQL1RGVFAvRE5TU0VDL0RCdXMgc3VwcG9ydCkiCittc2dzdHIgIm9wY2nzbiBubyBzb3BvcnRhZGEgKHZlcmlmaWNhciBxdWUgZG5zbWFzcSBmdWUgY29tcGlsYWRvIGNvbiBzb3BvcnRlIHBhcmEgREhDUC9URlRQL0RCdXMpIgorCisjOiBvcHRpb24uYzo0MjM3Cittc2dpZCAibWlzc2luZyBcIiIKK21zZ3N0ciAiZmFsdGEgXCIiCisKKyM6IG9wdGlvbi5jOjQyOTQKK21zZ2lkICJiYWQgb3B0aW9uIgorbXNnc3RyICJvcGNp824gZXJy825lYSIKKworIzogb3B0aW9uLmM6NDI5NgorbXNnaWQgImV4dHJhbmVvdXMgcGFyYW1ldGVyIgorbXNnc3RyICJwYXLhbWV0cm8gZXh0cmHxbyIKKworIzogb3B0aW9uLmM6NDI5OAorbXNnaWQgIm1pc3NpbmcgcGFyYW1ldGVyIgorbXNnc3RyICJwYXLhbWV0cm8gYXVzZW50ZSIKKworIzogb3B0aW9uLmM6NDMwMAorIywgZnV6enkKK21zZ2lkICJpbGxlZ2FsIG9wdGlvbiIKK21zZ3N0ciAib3BjafNuIGVycvNuZWEiCisKKyM6IG9wdGlvbi5jOjQzMDcKK21zZ2lkICJlcnJvciIKK21zZ3N0ciAiZXJyb3IiCisKKyM6IG9wdGlvbi5jOjQzMDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiBhdCBsaW5lICVkIG9mICVzIgorbXNnc3RyICIlcyBlbiBs7W5lYSAlZCBkZSAlJXMiCisKKyM6IG9wdGlvbi5jOjQzMjQgb3B0aW9uLmM6NDU3MSBvcHRpb24uYzo0NjA3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJyZWFkICVzIgorbXNnc3RyICJsZWUgJXMiCisKKyM6IG9wdGlvbi5jOjQzODcgb3B0aW9uLmM6NDUxMCB0ZnRwLmM6NzE1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICVzOiAlcyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgbGVlciAlczogJXMiCisKKyM6IG9wdGlvbi5jOjQ2NzYKK21zZ2lkICJqdW5rIGZvdW5kIGluIGNvbW1hbmQgbGluZSIKK21zZ3N0ciAiYmFzdXJhIGVuY29udHJhZGEgZW4gbGluZWEgZGUgY29tYW5kbyIKKworIzogb3B0aW9uLmM6NDcxMQorIywgYy1mb3JtYXQKK21zZ2lkICJEbnNtYXNxIHZlcnNpb24gJXMgICVzXG4iCittc2dzdHIgIlZlcnNp824gZG5zbWFzcSAlcyAgJXNcbiIKKworIzogb3B0aW9uLmM6NDcxMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvbXBpbGUgdGltZSBvcHRpb25zOiAlc1xuIgorIlxuIgorbXNnc3RyICIiCisiT3BjaW9uZXMgZGUgY29tcGlsYWNp824gJXNcbiIKKyJcbiIKKworIzogb3B0aW9uLmM6NDcxMworIywgYy1mb3JtYXQKK21zZ2lkICJUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS5cbiIKK21zZ3N0ciAiRXN0ZSBzb2Z0d2FyZSB2aWVuZSBTSU4gTklOR1VOQSBHQVJBTlRJQS5cbiIKKworIzogb3B0aW9uLmM6NDcxNAorIywgYy1mb3JtYXQKK21zZ2lkICJEbnNtYXNxIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0XG4iCittc2dzdHIgIkRuc21hc3EgZXMgc29mdHdhcmUgbGlicmUsIHkgdXN0ZWQgZXN04SBhdXRvcml6YWRvIGEgcmVkaXN0cmlidWlybG9cbiIKKworIzogb3B0aW9uLmM6NDcxNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyIG9yIDMuXG4iCittc2dzdHIgImJham8gbG9zIHTpcm1pbm9zIGRlIGxhIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzafNuIDIgbyAzLlxuIgorCisjOiBvcHRpb24uYzo0NzI2Cittc2dpZCAidHJ5IC0taGVscCIKK21zZ3N0ciAicHJ1ZWJlIC0taGVscCIKKworIzogb3B0aW9uLmM6NDcyOAorbXNnaWQgInRyeSAtdyIKK21zZ3N0ciAicHJ1ZWJlIC13IgorCisjOiBvcHRpb24uYzo0NzMwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29tbWFuZCBsaW5lIG9wdGlvbnM6ICVzIgorbXNnc3RyICJvcGNpb25lcyBkZSBs7W5lYSBkZSBjb21hbmRvcyBlcnLzbmVhczogJXMiCisKKyM6IG9wdGlvbi5jOjQ3OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ05BTUUgbG9vcCBpbnZvbHZpbmcgJXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDgzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZ2V0IGhvc3QtbmFtZTogJXMiCittc2dzdHIgIm5vIHNlIHB1ZWRlIG9idGVuZXIgaG9zdC1uYW1lIChub21icmUgZGUgaG9zdCk6ICVzIgorCisjOiBvcHRpb24uYzo0ODYyCittc2dpZCAib25seSBvbmUgcmVzb2x2LmNvbmYgZmlsZSBhbGxvd2VkIGluIG5vLXBvbGwgbW9kZS4iCittc2dzdHIgInNvbG8gdW4gYXJjaGl2byByZXNvbHYuY29uZiBlc3ThIHBlcm1pdGlkbyBlbiBtb2RvIG5vLXBvbGwuIgorCisjOiBvcHRpb24uYzo0ODcyCittc2dpZCAibXVzdCBoYXZlIGV4YWN0bHkgb25lIHJlc29sdi5jb25mIHRvIHJlYWQgZG9tYWluIGZyb20uIgorbXNnc3RyICJkZWJlIGhhYmVyIGV44WN0YW1lbnRlIHVuIHJlc29sdi5jb25mIGRlc2RlIGRvbmRlIGxlZXIgZG9taW5pby4iCisKKyM6IG9wdGlvbi5jOjQ4NzUgbmV0d29yay5jOjE2MTIgZGhjcC5jOjgxNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgJXM6ICVzIgorbXNnc3RyICJubyBzZSBwdWRvIGxlZXIgJXM6ICVzIgorCisjOiBvcHRpb24uYzo0ODkyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNlYXJjaCBkaXJlY3RpdmUgZm91bmQgaW4gJXMiCittc2dzdHIgIm5pbmd1bmEgZGlyZWN0aXZhIGRlIGL6c3F1ZWRhIGVuY29udHJhZGEgZW4gJXMiCisKKyM6IG9wdGlvbi5jOjQ5MTMKKyMsIGZ1enp5Cittc2dpZCAidGhlcmUgbXVzdCBiZSBhIGRlZmF1bHQgZG9tYWluIHdoZW4gLS1kaGNwLWZxZG4gaXMgc2V0IgorbXNnc3RyICJkZWJlIGhhYmVyIHVuIGRvbWluaW8gcHJlZGV0ZXJtaW5hZG8gY3VhbmRvIC0tZGhjcC1mcWRuIGVzdOEgZmlqYWRvIgorCisjOiBvcHRpb24uYzo0OTIyCittc2dpZCAic3ludGF4IGNoZWNrIE9LIgorbXNnc3RyICJyZXZpc2nzbiBkZSBzaW50YXhpcyBPSyIKKworIzogZm9yd2FyZC5jOjEwMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNlbmQgcGFja2V0OiAlcyIKK21zZ3N0ciAibm8gc2UgcHVkbyBlc2N1Y2hhciBlbiBzb2NrZXQ6ICVzIgorCisjOiBmb3J3YXJkLmM6NTk3Cittc2dpZCAiZGlzY2FyZGluZyBETlMgcmVwbHk6IHN1Ym5ldCBvcHRpb24gbWlzbWF0Y2giCittc2dzdHIgIiIKKworIzogZm9yd2FyZC5jOjY1MQorIywgYy1mb3JtYXQKK21zZ2lkICJuYW1lc2VydmVyICVzIHJlZnVzZWQgdG8gZG8gYSByZWN1cnNpdmUgcXVlcnkiCittc2dzdHIgInNlcnZpZG9yIEROUyAlcyByZWNoYXrzIHJlYWxpemFyIHVuYSBi+nNxdWVkYSByZWN1cnNpdmEiCisKKyM6IGZvcndhcmQuYzo2ODMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInBvc3NpYmxlIEROUy1yZWJpbmQgYXR0YWNrIGRldGVjdGVkOiAlcyIKK21zZ3N0ciAicG9zaWJsZSBhdGFxdWUgZGUgcmV2aW5jdWxhY2nzbiBETlMgZGV0ZWN0YWRvIgorCisjOiBmb3J3YXJkLmM6MTI0NCBmb3J3YXJkLmM6MTY4MQorbXNnaWQgIklnbm9yaW5nIHF1ZXJ5IGZyb20gbm9uLWxvY2FsIG5ldHdvcmsiCittc2dzdHIgIiIKKworIzogZm9yd2FyZC5jOjIxNjYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgRE5TIHF1ZXJpZXMgcmVhY2hlZCAobWF4OiAlZCkiCittc2dzdHIgIk76bWVybyBt4XhpbW8gZGUgYvpzcXVlZGFzIEROUyBzaW11bHThbmVhcyBhbGNhbnphZG8uICglcyBwb3IgcHJlZGV0ZXJtaW5hZG8pIgorCisjOiBuZXR3b3JrLmM6NzIwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGxpc3RlbmluZyBzb2NrZXQgZm9yICVzOiAlcyIKK21zZ3N0ciAibm8gc2UgcHVkbyBjcmVhciB1biB682NhbG8gZGUgZXNjdWNoYTogJXMiCisKKyM6IG5ldHdvcmsuYzoxMDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkxPVUQgV0FSTklORzogbGlzdGVuaW5nIG9uICVzIG1heSBhY2NlcHQgcmVxdWVzdHMgdmlhIGludGVyZmFjZXMgb3RoZXIgdGhhbiAlcyIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6MTAzOAorbXNnaWQgIkxPVUQgV0FSTklORzogdXNlIC0tYmluZC1keW5hbWljIHJhdGhlciB0aGFuIC0tYmluZC1pbnRlcmZhY2VzIHRvIGF2b2lkIEROUyBhbXBsaWZpY2F0aW9uIGF0dGFja3MgdmlhIHRoZXNlIGludGVyZmFjZShzKSIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6MTA0NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogdXNpbmcgaW50ZXJmYWNlICVzIGluc3RlYWQiCittc2dzdHIgImFkdmVydGVuY2lhOiBpbnRlcmZhc2UgJXMgbm8gZXhpc3RlIGFjdHVhbG1lbnRlIgorCisjOiBuZXR3b3JrLmM6MTA1NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogbm8gYWRkcmVzc2VzIGZvdW5kIGZvciBpbnRlcmZhY2UgJXMiCittc2dzdHIgInVzYW5kbyBkaXJlY2Npb25lcyBsb2NhbGVzIHNvbG8gcGFyYSAlcyAlcyIKKworIzogbmV0d29yay5jOjExMTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImludGVyZmFjZSAlcyBmYWlsZWQgdG8gam9pbiBESENQdjYgbXVsdGljYXN0IGdyb3VwOiAlcyIKK21zZ3N0ciAiZWwgaW50ZXJmYXNlICUgZmFsbPMgYWwgdW5pcnNlIGFsIGdydXBvIG11bHRpY2FzdCBESENQdjY6ICVzIgorCisjOiBuZXR3b3JrLmM6MTExOQorbXNnaWQgInRyeSBpbmNyZWFzaW5nIC9wcm9jL3N5cy9uZXQvY29yZS9vcHRtZW1fbWF4IgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxMzIyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYmluZCBzZXJ2ZXIgc29ja2V0IGZvciAlczogJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gYWNvcGxhciBhbCB682NhbG8gZGVsIHNlcnZpZG9yIHBhcmEgJXM6ICVzIgorCisjOiBuZXR3b3JrLmM6MTUxNworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBuYW1lc2VydmVyICVzIC0gbG9jYWwgaW50ZXJmYWNlIgorbXNnc3RyICJpZ25vcmFuZG8gc2Vydmlkb3IgRE5TICVzIC0gaW50ZXJmYXNlIGxvY2FsIgorCisjOiBuZXR3b3JrLmM6MTUyOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgbmFtZXNlcnZlciAlcyAtIGNhbm5vdCBtYWtlL2JpbmQgc29ja2V0OiAlcyIKK21zZ3N0ciAiaWdub3JhbmRvIHNlcnZpZG9yIEROUyAlcyAtIG5vIHNlIHB1ZWRlIGNyZWFyL2Fjb3BsYXIgevNjYWxvOiAlcyIKKworIzogbmV0d29yay5jOjE1NDgKK21zZ2lkICIobm8gRE5TU0VDKSIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6MTU1MQorbXNnaWQgInVucXVhbGlmaWVkIgorbXNnc3RyICJubyBjdWFsaWZpY2FkbyIKKworIzogbmV0d29yay5jOjE1NTEKK21zZ2lkICJuYW1lcyIKK21zZ3N0ciAibm9tYnJlcyIKKworIzogbmV0d29yay5jOjE1NTMKK21zZ2lkICJkZWZhdWx0IgorbXNnc3RyICJwcmVkZXRlcm1pbmFkbyIKKworIzogbmV0d29yay5jOjE1NTUKK21zZ2lkICJkb21haW4iCittc2dzdHIgImRvbWluaW8iCisKKyM6IG5ldHdvcmsuYzoxNTYxCisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIGxvY2FsIGFkZHJlc3NlcyBvbmx5IGZvciAlcyAlcyIKK21zZ3N0ciAidXNhbmRvIGRpcmVjY2lvbmVzIGxvY2FsZXMgc29sbyBwYXJhICVzICVzIgorCisjOiBuZXR3b3JrLmM6MTU2NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgc3RhbmRhcmQgbmFtZXNlcnZlcnMgZm9yICVzICVzIgorbXNnc3RyICJ1c2FuZG8gbm9tYnJlcyBlc3ThbmRhciAlcyMlZCBwYXJhICVzICVzIgorCisjOiBuZXR3b3JrLmM6MTU2NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgbmFtZXNlcnZlciAlcyMlZCBmb3IgJXMgJXMgJXMiCittc2dzdHIgInVzYW5kbyBub21icmUgZGUgc2Vydmlkb3IgJXMjJWQgcGFyYSAlcyAlcyIKKworIzogbmV0d29yay5jOjE1NzAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIk5PVCB1c2luZyBuYW1lc2VydmVyICVzIyVkIC0gcXVlcnkgbG9vcCBkZXRlY3RlZCIKK21zZ3N0ciAidXNhbmRvIG5vbWJyZSBkZSBzZXJ2aWRvciAlcyMlZCBwYXJhICVzICVzIgorCisjOiBuZXR3b3JrLmM6MTU3MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgbmFtZXNlcnZlciAlcyMlZCh2aWEgJXMpIgorbXNnc3RyICJ1c2FuZG8gbm9tYnJlIGRlIHNlcnZpZG9yICVzIyVkKHbtYSAlcykiCisKKyM6IG5ldHdvcmsuYzoxNTc1CisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIG5hbWVzZXJ2ZXIgJXMjJWQiCittc2dzdHIgInVzYW5kbyBub21icmUgZGUgc2Vydmlkb3IgJXMjJWQiCisKKyM6IG5ldHdvcmsuYzoxNTgwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyAlZCBtb3JlIGxvY2FsIGFkZHJlc3NlcyIKK21zZ3N0ciAidXNhbmRvIG5vbWJyZSBkZSBzZXJ2aWRvciAlcyMlZCIKKworIzogbmV0d29yay5jOjE1ODIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInVzaW5nICVkIG1vcmUgbmFtZXNlcnZlcnMiCittc2dzdHIgInVzYW5kbyBub21icmUgZGUgc2Vydmlkb3IgJXMjJWQiCisKKyM6IGRuc21hc3EuYzoxNjYKK21zZ2lkICJkaGNwLWhvc3RzZGlyLCBkaGNwLW9wdHNkaXIgYW5kIGhvc3RzZGlyIGFyZSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0iCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjE4MQorbXNnaWQgIm5vIHJvb3QgdHJ1c3QgYW5jaG9yIHByb3ZpZGVkIGZvciBETlNTRUMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjE4NAorbXNnaWQgImNhbm5vdCByZWR1Y2UgY2FjaGUgc2l6ZSBmcm9tIGRlZmF1bHQgd2hlbiBETlNTRUMgZW5hYmxlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTg2CisjLCBmdXp6eQorbXNnaWQgIkROU1NFQyBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9ETlNTRUMgaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICJEQnVzIG5vIGRpc3BvbmlibGU6IGZpamFyIEhBVkVfREJVUyBlbiBzcmMvY29uZmlnLmgiCisKKyM6IGRuc21hc3EuYzoxOTIKKyMsIGZ1enp5Cittc2dpZCAiVEZUUCBzZXJ2ZXIgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfVEZUUCBpbiBzcmMvY29uZmlnLmgiCittc2dzdHIgInNlcnZpZG9yIFRGVFAgbm8gZGlzcG9uaWJsZTogZmlqYXIgSEFWRV9URlRQIGVuIHNyYy9jb25maWcuaCIKKworIzogZG5zbWFzcS5jOjE5NworIywgZnV6enkKK21zZ2lkICJjYW5ub3QgdXNlIC0tY29ubnRyYWNrIEFORCAtLXF1ZXJ5LXBvcnQiCittc2dzdHIgIk5vIHB1ZWRlIHVzYXIgLS1jb25udHJhY2sgQU5EIC0tcXVlcnktcG9ydCIKKworIzogZG5zbWFzcS5jOjIwMAorIywgZnV6enkKK21zZ2lkICJjb25udHJhY2sgc3VwcG9ydCBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9DT05OVFJBQ0sgaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICJzZXJ2aWRvciBURlRQIG5vIGRpc3BvbmlibGU6IGZpamFyIEhBVkVfVEZUUCBlbiBzcmMvY29uZmlnLmgiCisKKyM6IGRuc21hc3EuYzoyMDUKKyMsIGZ1enp5Cittc2dpZCAiYXN5bmNocm9ub3VzIGxvZ2dpbmcgaXMgbm90IGF2YWlsYWJsZSB1bmRlciBTb2xhcmlzIgorbXNnc3RyICJyZWdpc3RybyBhc+1uY3Jvbm8gbm8gZXN04SBkaXNwb25pYmxlIGJham8gU29sYXJpcyIKKworIzogZG5zbWFzcS5jOjIxMAorIywgZnV6enkKK21zZ2lkICJhc3luY2hyb25vdXMgbG9nZ2luZyBpcyBub3QgYXZhaWxhYmxlIHVuZGVyIEFuZHJvaWQiCittc2dzdHIgInJlZ2lzdHJvIGFz7W5jcm9ubyBubyBlc3ThIGRpc3BvbmlibGUgYmFqbyBTb2xhcmlzIgorCisjOiBkbnNtYXNxLmM6MjE1CisjLCBmdXp6eQorbXNnaWQgImF1dGhvcml0YXRpdmUgRE5TIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0FVVEggaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICJEQnVzIG5vIGRpc3BvbmlibGU6IGZpamFyIEhBVkVfREJVUyBlbiBzcmMvY29uZmlnLmgiCisKKyM6IGRuc21hc3EuYzoyMjAKKyMsIGZ1enp5Cittc2dpZCAibG9vcCBkZXRlY3Rpb24gbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfTE9PUCBpbiBzcmMvY29uZmlnLmgiCittc2dzdHIgInNlcnZpZG9yIFRGVFAgbm8gZGlzcG9uaWJsZTogZmlqYXIgSEFWRV9URlRQIGVuIHNyYy9jb25maWcuaCIKKworIzogZG5zbWFzcS5jOjIyNworbXNnaWQgIm1heF9wb3J0IGNhbm5vdCBiZSBzbWFsbGVyIHRoYW4gbWluX3BvcnQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjIzNAorbXNnaWQgInpvbmUgc2VyaWFsIG11c3QgYmUgY29uZmlndXJlZCBpbiAtLWF1dGgtc29hIgorbXNnc3RyICJ6b25hIHNlcmllIGRlYmUgc2VyIGNvbmZpZ3VyYWRhIGVuIC0tYXV0aC1zb2EiCisKKyM6IGRuc21hc3EuYzoyNTIKK21zZ2lkICJkaGNwLXJhbmdlIGNvbnN0cnVjdG9yIG5vdCBhdmFpbGFibGUgb24gdGhpcyBwbGF0Zm9ybSIKK21zZ3N0ciAiY29uc3RydWN0b3IgcmFuZ28gZGhjcCBubyBkaXNwb25pYmxlIGVuIGVzdGEgcGxhdGFmb3JtYSIKKworIzogZG5zbWFzcS5jOjI5OAorbXNnaWQgImNhbm5vdCBzZXQgLS1iaW5kLWludGVyZmFjZXMgYW5kIC0tYmluZC1keW5hbWljIgorbXNnc3RyICJubyBwdWVkZSB1c2FyIC0tYmluZC1pbnRlcmZhc2VzIHkgLS1iaW5kLWR5bmFtaWMiCisKKyM6IGRuc21hc3EuYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmQgbGlzdCBvZiBpbnRlcmZhY2VzOiAlcyIKK21zZ3N0ciAibm8gc2UgcHVkbyBlbmNvbnRyYXIgbGlzdGEgZGUgaW50ZXJmYXNlczogJXMiCisKKyM6IGRuc21hc3EuYzozMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBpbnRlcmZhY2UgJXMiCittc2dzdHIgImludGVyZmFzZSBkZXNjb25vY2lkYSAlcyIKKworIzogZG5zbWFzcS5jOjM3NCBkbnNtYXNxLmM6MTAzNworIywgYy1mb3JtYXQKK21zZ2lkICJEQnVzIGVycm9yOiAlcyIKK21zZ3N0ciAiZXJyb3IgREJ1czogJXMiCisKKyM6IGRuc21hc3EuYzozNzcKK21zZ2lkICJEQnVzIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0RCVVMgaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICJEQnVzIG5vIGRpc3BvbmlibGU6IGZpamFyIEhBVkVfREJVUyBlbiBzcmMvY29uZmlnLmgiCisKKyM6IGRuc21hc3EuYzo0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB1c2VyIG9yIGdyb3VwOiAlcyIKK21zZ3N0ciAidXN1YXJpbyBvIGdydXBvIGRlc2Nvbm9jaWRvOiAlcyIKKworIzogZG5zbWFzcS5jOjQ2MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hkaXIgdG8gZmlsZXN5c3RlbSByb290OiAlcyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgY2FtYmlhciBkaXJlY3RvcmlvIGEgcmHteiBkZSBzaXN0ZW1hIGRlIGFyY2hpdm9zOiAlcyIKKworIzogZG5zbWFzcS5jOjcxNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAic3RhcnRlZCwgdmVyc2lvbiAlcyBETlMgZGlzYWJsZWQiCittc2dzdHIgImluaWNpYWRvLCB2ZXJzafNuICVzIEROUyBkZXNoYWJpbGl0YWRvIgorCisjOiBkbnNtYXNxLmM6NzIwCisjLCBjLWZvcm1hdAorbXNnaWQgInN0YXJ0ZWQsIHZlcnNpb24gJXMgY2FjaGVzaXplICVkIgorbXNnc3RyICJpbmljaWFkbywgdmVyc2nzbiAlcyB0YW1h8W8gZGUgY2FjaOkgJWQiCisKKyM6IGRuc21hc3EuYzo3MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RhcnRlZCwgdmVyc2lvbiAlcyBjYWNoZSBkaXNhYmxlZCIKK21zZ3N0ciAiaW5pY2lhZG8sIHZlcnNp824gJXMgY2FjaOkgZGVzaGFiaWxpdGFkbyIKKworIzogZG5zbWFzcS5jOjcyNQorbXNnaWQgIkROUyBzZXJ2aWNlIGxpbWl0ZWQgdG8gbG9jYWwgc3VibmV0cyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzI4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbXBpbGUgdGltZSBvcHRpb25zOiAlcyIKK21zZ3N0ciAib3BjaW9uZXMgZGUgY29tcGlsYWNp8246ICVzIgorCisjOiBkbnNtYXNxLmM6NzM0Cittc2dpZCAiREJ1cyBzdXBwb3J0IGVuYWJsZWQ6IGNvbm5lY3RlZCB0byBzeXN0ZW0gYnVzIgorbXNnc3RyICJzb3BvcnRlIERCdXMgaGFiaWxpdGFkbzogY29uZWN0YWRvIGEgYnVzIGRlIHNpc3RlbWEiCisKKyM6IGRuc21hc3EuYzo3MzYKK21zZ2lkICJEQnVzIHN1cHBvcnQgZW5hYmxlZDogYnVzIGNvbm5lY3Rpb24gcGVuZGluZyIKK21zZ3N0ciAic29wb3J0ZSBEQnVzIGhhYmlsaXRhZG86IGNvbmV4afNuIGEgYnVzIHBlbmRpZW50ZSIKKworIzogZG5zbWFzcS5jOjc1NAorbXNnaWQgIkROU1NFQyB2YWxpZGF0aW9uIGVuYWJsZWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjc1OAorbXNnaWQgIkROU1NFQyBzaWduYXR1cmUgdGltZXN0YW1wcyBub3QgY2hlY2tlZCB1bnRpbCBmaXJzdCBjYWNoZSByZWxvYWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjc2MQorbXNnaWQgIkROU1NFQyBzaWduYXR1cmUgdGltZXN0YW1wcyBub3QgY2hlY2tlZCB1bnRpbCBzeXN0ZW0gdGltZSB2YWxpZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzY2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBmYWlsZWQgdG8gY2hhbmdlIG93bmVyIG9mICVzOiAlcyIKK21zZ3N0ciAiYWR2ZXJ0ZW5jaWE6IG5vIHNlIHB1ZG8gY2FtYmlhciBwcm9waWV0YXJpbyBkZSAlczogJXMiCisKKyM6IGRuc21hc3EuYzo3NzAKK21zZ2lkICJzZXR0aW5nIC0tYmluZC1pbnRlcmZhY2VzIG9wdGlvbiBiZWNhdXNlIG9mIE9TIGxpbWl0YXRpb25zIgorbXNnc3RyICJmaWphbmRvIG9wY2nzbiAtLWJpbmQtaW50ZXJmYXNlcyBkZWJpZG8gYSBsaW1pdGFjaW9uZXMgZGUgc2lzdGVtYSBvcGVyYXRpdm8iCisKKyM6IGRuc21hc3EuYzo3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogaW50ZXJmYWNlICVzIGRvZXMgbm90IGN1cnJlbnRseSBleGlzdCIKK21zZ3N0ciAiYWR2ZXJ0ZW5jaWE6IGludGVyZmFzZSAlcyBubyBleGlzdGUgYWN0dWFsbWVudGUiCisKKyM6IGRuc21hc3EuYzo3ODcKK21zZ2lkICJ3YXJuaW5nOiBpZ25vcmluZyByZXNvbHYtZmlsZSBmbGFnIGJlY2F1c2Ugbm8tcmVzb2x2IGlzIHNldCIKK21zZ3N0ciAiYWR2ZXJ0ZW5jaWE6IGlnbm9yYW5kbyBvcGNp824gcmVzb2x2LWZpbGUgcG9ycXVlIG5vLXJlc29sdiBlc3ThIGZpamFkbyIKKworIzogZG5zbWFzcS5jOjc5MAorIywgZnV6enkKK21zZ2lkICJ3YXJuaW5nOiBubyB1cHN0cmVhbSBzZXJ2ZXJzIGNvbmZpZ3VyZWQiCittc2dzdHIgImFkdmVydGVuY2lhOiBuaW5n+m4gc2Vydmlkb3IgZGUgc3ViaWRhIGNvbmZpZ3VyYWRvIgorCisjOiBkbnNtYXNxLmM6Nzk0CisjLCBjLWZvcm1hdAorbXNnaWQgImFzeW5jaHJvbm91cyBsb2dnaW5nIGVuYWJsZWQsIHF1ZXVlIGxpbWl0IGlzICVkIG1lc3NhZ2VzIgorbXNnc3RyICJyZWdpc3RybyBhc+1uY3Jvbm8gaGFiaWxpdGFkbywgZWwgbO1taXRlIGRlIGxhIGNvbGEgZXMgJWQgbWVuc2FqZXMiCisKKyM6IGRuc21hc3EuYzo4MTUKK21zZ2lkICJJUHY2IHJvdXRlciBhZHZlcnRpc2VtZW50IGVuYWJsZWQiCittc2dzdHIgIkFudW5jaW8gZGUgcm91dGVyIElQdjYgaGFiaWxpdGFkbyIKKworIzogZG5zbWFzcS5jOjgyMAorIywgYy1mb3JtYXQKK21zZ2lkICJESENQLCBzb2NrZXRzIGJvdW5kIGV4Y2x1c2l2ZWx5IHRvIGludGVyZmFjZSAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6ODM0Cittc2dpZCAicm9vdCBpcyAiCittc2dzdHIgInJvb3QgZXN04SAiCisKKyM6IGRuc21hc3EuYzo4MzQKKyMsIGZ1enp5Cittc2dpZCAiZW5hYmxlZCIKK21zZ3N0ciAiaGFiaWxpdGFkbyIKKworIzogZG5zbWFzcS5jOjgzNgorbXNnaWQgInNlY3VyZSBtb2RlIgorbXNnc3RyICJtb2RvIHNlZ3VybyIKKworIzogZG5zbWFzcS5jOjgzOQorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiAlcyBpbmFjY2Vzc2libGUiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjg0MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogVEZUUCBkaXJlY3RvcnkgJXMgaW5hY2Nlc3NpYmxlIgorbXNnc3RyICJkaXJlY3RvcmlvIFRGVFAgJSBpbmFjY2VzaWJsZTogJXMiCisKKyM6IGRuc21hc3EuYzo4NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVzdHJpY3RpbmcgbWF4aW11bSBzaW11bHRhbmVvdXMgVEZUUCB0cmFuc2ZlcnMgdG8gJWQiCittc2dzdHIgImxpbWl0YW5kbyBu+m1lcm8gbeF4aW1vIGRlIHRyYW5zZmVyZW5jaWFzIFRGVFAgc2ltdWx04W5lYXMgYSAlZCIKKworIzogZG5zbWFzcS5jOjEwMzkKK21zZ2lkICJjb25uZWN0ZWQgdG8gc3lzdGVtIERCdXMiCittc2dzdHIgImNvbmVjdGFkbyBhIERCdXMgZGUgc2lzdGVtYSIKKworIzogZG5zbWFzcS5jOjExODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZvcmsgaW50byBiYWNrZ3JvdW5kOiAlcyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgaGFjZXIgZm9yayBlbiBiYWNrZ3JvdW5kOiAlcyIKKworIzogZG5zbWFzcS5jOjExOTIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgaGVscGVyOiAlcyIKK21zZ3N0ciAibm8gc2UgcHVkbyBjcmVhciBheXVkYW50ZTogJXMiCisKKyM6IGRuc21hc3EuYzoxMTk1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJzZXR0aW5nIGNhcGFiaWxpdGllcyBmYWlsZWQ6ICVzIgorbXNnc3RyICJjb25maWd1cmFjafNuIGRlIGNhcGFjaWRhZGVzIGhhIGZhbGxhZG86ICVzIgorCisjOiBkbnNtYXNxLmM6MTE5OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNoYW5nZSB1c2VyLWlkIHRvICVzOiAlcyIKK21zZ3N0ciAibm8gc2UgcHVkbyBjYW1iaWFyIHVzZXItaWQgYSAlczogJXMiCisKKyM6IGRuc21hc3EuYzoxMjAxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY2hhbmdlIGdyb3VwLWlkIHRvICVzOiAlcyIKK21zZ3N0ciAibm8gc2UgcHVkbyBjYW1iaWFyIGdyb3VwLWlkIGEgJXM6ICVzIgorCisjOiBkbnNtYXNxLmM6MTIwNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gcGlkZmlsZSAlczogJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gYWJyaXIgYXJjaGl2byBQSUQgJXM6ICVzIgorCisjOiBkbnNtYXNxLmM6MTIwNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gbG9nICVzOiAlcyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgYWJyaXIgcmVnaXN0cm8gJXM6ICVzIgorCisjOiBkbnNtYXNxLmM6MTIxMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxvYWQgTHVhIHNjcmlwdDogJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gY2FyZ2FyIHNjcmlwdCBMdWEgJXM6ICVzIgorCisjOiBkbnNtYXNxLmM6MTIxMworIywgYy1mb3JtYXQKK21zZ2lkICJURlRQIGRpcmVjdG9yeSAlcyBpbmFjY2Vzc2libGU6ICVzIgorbXNnc3RyICJkaXJlY3RvcmlvIFRGVFAgJSBpbmFjY2VzaWJsZTogJXMiCisKKyM6IGRuc21hc3EuYzoxMjE2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIHRpbWVzdGFtcCBmaWxlICVzOiAlcyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgYWJyaXIgbyBjcmVhciBhcmNoaXZvIGRlIGNvbmNlc2nzbiAlczogJXMiCisKKyM6IGRuc21hc3EuYzoxMjM5Cittc2dpZCAibm93IGNoZWNraW5nIEROU1NFQyBzaWduYXR1cmUgdGltZXN0YW1wcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTMwNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAic2NyaXB0IHByb2Nlc3Mga2lsbGVkIGJ5IHNpZ25hbCAlZCIKK21zZ3N0ciAicHJvY2VzbyBzY3JpcHQgZWxpbWluYWRvIHBvciBzZfFhbCAlZCIKKworIzogZG5zbWFzcS5jOjEzMTEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInNjcmlwdCBwcm9jZXNzIGV4aXRlZCB3aXRoIHN0YXR1cyAlZCIKK21zZ3N0ciAicHJvY2VzbyBzY3JpcHQgc2FsafMgY29uIGNvbiBlc3RhZG8gJWQiCisKKyM6IGRuc21hc3EuYzoxMzE1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZXhlY3V0ZSAlczogJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gZWplY3V0YXIgJXM6ICVzIgorCisjOiBkbnNtYXNxLmM6MTM3OSBkbnNzZWMuYzo0NzkgZG5zc2VjLmM6NTI1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdXBkYXRlIG10aW1lIG9uICVzOiAlcyIKK21zZ3N0ciAibm8gc2UgcHVkbyBhYnJpciBhcmNoaXZvIFBJRCAlczogJXMiCisKKyM6IGRuc21hc3EuYzoxMzg2Cittc2dpZCAiZXhpdGluZyBvbiByZWNlaXB0IG9mIFNJR1RFUk0iCittc2dzdHIgInNhbGllbmRvIGFsIHJlY2liaXIgU0lHVEVSTSIKKworIzogZG5zbWFzcS5jOjE0MTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBhY2Nlc3MgJXM6ICVzIgorbXNnc3RyICJubyBzZSBwdWRvIGFjY2VkZXIgJXM6ICVzIgorCisjOiBkbnNtYXNxLmM6MTQ0NAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkaW5nICVzIgorbXNnc3RyICJsZXllbmRvICVzIgorCisjOiBkbnNtYXNxLmM6MTQ1NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibm8gc2VydmVycyBmb3VuZCBpbiAlcywgd2lsbCByZXRyeSIKK21zZ3N0ciAibmluZ/puIHNlcnZpZG9yIGVuY29udHJhZG8gZW4gJXMsIHNlIHJlaW50ZW50YXLhIgorCisjOiBkaGNwLmM6NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBESENQIHNvY2tldDogJXMiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGNyZWFyIHrzY2FsbyBESENQOiAlcyIKKworIzogZGhjcC5jOjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZXQgb3B0aW9ucyBvbiBESENQIHNvY2tldDogJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gZmlqYXIgb3BjaW9uZXMgZW4gevNjYWxvIERIQ1A6ICVzIgorCisjOiBkaGNwLmM6ODkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZXQgU09fUkVVU0V7QUREUnxQT1JUfSBvbiBESENQIHNvY2tldDogJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gZmlqYXIgU09fUkVVU0V7QUREUnxQT1JUfSBlbiB682NhbG8gREhDUDogJXMiCisKKyM6IGRoY3AuYzoxMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGJpbmQgREhDUCBzZXJ2ZXIgc29ja2V0OiAlcyIKK21zZ3N0ciAibm8gc2UgcHVkbyBhY29wbGFyIHrzY2FsbyBkZSBzZXJ2aWRvciBESENQOiAlcyIKKworIzogZGhjcC5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIElDTVAgcmF3IHNvY2tldDogJXMuIgorbXNnc3RyICJubyBzZSBwdWVkZSBjcmVhciB682NhbG8gcHVybyBJQ01QOiAlcy4iCisKKyM6IGRoY3AuYzoyNTIgZGhjcDYuYzoxNzMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gaW50ZXJmYWNlICVzIGluIGJyaWRnZS1pbnRlcmZhY2UiCittc2dzdHIgImludGVyZmFzZSBkZXNjb25vY2lkYSAlcyBlbiBicmlkZ2UtaW50ZXJmYWNlIgorCisjOiBkaGNwLmM6MjkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcGFja2V0IHJlY2VpdmVkIG9uICVzIHdoaWNoIGhhcyBubyBhZGRyZXNzIgorbXNnc3RyICJQYXF1ZXRlIERIQ1AgcmVjaWJpZG8gZW4gJXMgcXVlIG5vIHRpZW5lIGRpcmVjY2nzbiIKKworIzogZGhjcC5jOjQyNworIywgYy1mb3JtYXQKK21zZ2lkICJBUlAtY2FjaGUgaW5qZWN0aW9uIGZhaWxlZDogJXMiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjQ3MAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBzZW5kaW5nIERIQ1AgcGFja2V0IHRvICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6NTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcmFuZ2UgJXMgLS0gJXMgaXMgbm90IGNvbnNpc3RlbnQgd2l0aCBuZXRtYXNrICVzIgorbXNnc3RyICJyYW5nbyBESENQICVzIC0tICVzIG5vIGNvaW5jaWRlIGNvbiBt4XNjYXJhIGRlIHN1YnJlZCAlcyIKKworIzogZGhjcC5jOjg1NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiYmFkIGxpbmUgYXQgJXMgbGluZSAlZCIKK21zZ3N0ciAibO1uZWEgZXJy825lYSBlbiAlcyBs7W5lYSAlZCIKKworIzogZGhjcC5jOjg5NworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyAlcyBsaW5lICVkLCBkdXBsaWNhdGUgbmFtZSBvciBJUCBhZGRyZXNzIgorbXNnc3RyICJpZ25vcmFuZG8gJXMgbO1uZWEgJWQsIG5vbWJyZSBvIGRpcmVjY2nzbiBJUCBkdXBsaWNhZGEiCisKKyM6IGRoY3AuYzoxMDQxIHJmYzMzMTUuYzoyMTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcmVsYXkgJXMgLT4gJXMiCittc2dzdHIgIkRIQ1AgcmVsYXkgJXMgLT4gJXMiCisKKyM6IGxlYXNlLmM6OTgKK21zZ2lkICJ0b28gbWFueSBzdG9yZWQgbGVhc2VzIgorbXNnc3RyICJkZW1hc2lhZGFzIGNvbmNlc2lvbmVzIGFsbWFjZW5hZGFzIgorCisjOiBsZWFzZS5jOjE2NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gb3IgY3JlYXRlIGxlYXNlIGZpbGUgJXM6ICVzIgorbXNnc3RyICJubyBzZSBwdWVkZSBhYnJpciBvIGNyZWFyIGFyY2hpdm8gZGUgY29uY2VzafNuICVzOiAlcyIKKworIzogbGVhc2UuYzoxNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHBhcnNlIGxlYXNlIGRhdGFiYXNlLCBpbnZhbGlkIGxpbmU6ICVzICVzICVzICVzIC4uLiIKK21zZ3N0ciAiIgorCisjOiBsZWFzZS5jOjE4MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgbGVhc2UgZmlsZSAlczogJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gbGVlciAlczogJXMiCisKKyM6IGxlYXNlLmM6MTk2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcnVuIGxlYXNlLWluaXQgc2NyaXB0ICVzOiAlcyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgZWplY3V0YXIgYXJjaGl2byBzY3JpcHQgbGVhc2UtaW5pdCAlczogJXMiCisKKyM6IGxlYXNlLmM6MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgImxlYXNlLWluaXQgc2NyaXB0IHJldHVybmVkIGV4aXQgY29kZSAlcyIKK21zZ3N0ciAiYXJjaGl2byBndWnzbiBsZWFzZS1pbml0IHJldG9ybvMgY/NkaWdvIGRlIHNhbGlkYSAlcyIKKworIzogbGVhc2UuYzozNzMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSAlczogJXMgKHJldHJ5IGluICV1cykiCittc2dzdHIgImVycm9yIGFsIGVzY3JpYmlyICVzOiAlcyAocmVpbnRlbnRhciBlbiAldXMpIgorCisjOiBsZWFzZS5jOjkzNworIywgYy1mb3JtYXQKK21zZ2lkICJJZ25vcmluZyBkb21haW4gJXMgZm9yIERIQ1AgaG9zdCBuYW1lICVzIgorbXNnc3RyICJJZ25vcmFuZG8gZG9taW5pbyAlcyBwYXJhIG5vbWJyZSBkZSBob3N0IERIQ1AgJXMiCisKKyM6IHJmYzIxMzEuYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYWRkcmVzcyByYW5nZSBhdmFpbGFibGUgZm9yIERIQ1AgcmVxdWVzdCAlcyAlcyIKK21zZ3N0ciAibmluZ/puIHJhbmdvIGRlIGRpcmVjY2nzbmVzIGRpc3BvbmlibGUgcGFyYSBwZWRpZG8gREhDUCAlcyAlcyIKKworIzogcmZjMjEzMS5jOjM0OAorbXNnaWQgIndpdGggc3VibmV0IHNlbGVjdG9yIgorbXNnc3RyICJjb24gc2VsZWN0b3IgZGUgc3VicmVkIgorCisjOiByZmMyMTMxLmM6MzQ4Cittc2dpZCAidmlhIgorbXNnc3RyICJ27WEiCisKKyM6IHJmYzIxMzEuYzozNjAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiV1IGF2YWlsYWJsZSBESENQIHN1Ym5ldDogJXMvJXMiCittc2dzdHIgIiV1IFN1YnJlZCBESENQIGRpc3BvbmlibGU6ICVzLyVzIgorCisjOiByZmMyMTMxLmM6MzYzIHJmYzMzMTUuYzozMDYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiV1IGF2YWlsYWJsZSBESENQIHJhbmdlOiAlcyAtLSAlcyIKK21zZ3N0ciAiJXUgUmFuZ28gREhDUCBkaXNwb25pYmxlOiAlcyAtLSAlcyIKKworIzogcmZjMjEzMS5jOjQ3NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXUgdmVuZG9yIGNsYXNzOiAlcyIKK21zZ3N0ciAiJXUgQ2xhc2UgZGUgdmVuZGVkb3I6ICVzIgorCisjOiByZmMyMTMxLmM6NDc2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIldSB1c2VyIGNsYXNzOiAlcyIKK21zZ3N0ciAiJXUgQ2xhc2UgZGUgdXN1YXJpbzogJXMiCisKKyM6IHJmYzIxMzEuYzo1MTAKK21zZ2lkICJkaXNhYmxlZCIKK21zZ3N0ciAiZGVzaGFiaWxpdGFkbyIKKworIzogcmZjMjEzMS5jOjU1MSByZmMyMTMxLmM6MTAwNiByZmMyMTMxLmM6MTQzMCByZmMzMzE1LmM6NjE2IHJmYzMzMTUuYzo4NjkKKyM6IHJmYzMzMTUuYzoxMTQ4Cittc2dpZCAiaWdub3JlZCIKK21zZ3N0ciAiaWdub3JhZG8iCisKKyM6IHJmYzIxMzEuYzo1NjYgcmZjMjEzMS5jOjEyMzkgcmZjMzMxNS5jOjkxOQorbXNnaWQgImFkZHJlc3MgaW4gdXNlIgorbXNnc3RyICJkaXJlY2Np824gZW4gdXNvIgorCisjOiByZmMyMTMxLmM6NTgwIHJmYzIxMzEuYzoxMDYwCittc2dpZCAibm8gYWRkcmVzcyBhdmFpbGFibGUiCittc2dzdHIgIm5pbmd1bmEgZGlyZWNjafNuIGRpc3BvbmlibGUiCisKKyM6IHJmYzIxMzEuYzo1ODcgcmZjMjEzMS5jOjEyMDIKK21zZ2lkICJ3cm9uZyBuZXR3b3JrIgorbXNnc3RyICJyZWQgZXF1aXZvY2FkYSIKKworIzogcmZjMjEzMS5jOjYwMgorbXNnaWQgIm5vIGFkZHJlc3MgY29uZmlndXJlZCIKK21zZ3N0ciAibmluZ3VuYSBkaXJlY2Np824gY29uZmlndXJhZGEiCisKKyM6IHJmYzIxMzEuYzo2MDggcmZjMjEzMS5jOjEyNTIKK21zZ2lkICJubyBsZWFzZXMgbGVmdCIKK21zZ3N0ciAibm8gc29icmEgbmluZ3VuYSBjb25jZXNp824iCisKKyM6IHJmYzIxMzEuYzo3MDMgcmZjMzMxNS5jOjQ4MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXUgY2xpZW50IHByb3ZpZGVzIG5hbWU6ICVzIgorbXNnc3RyICIldSBjbGllbnRlIHByb3ZlZSBub21icmU6ICVzIgorCisjOiByZmMyMTMxLmM6ODA4Cittc2dpZCAiUFhFIEJJUyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJubyBoYXkgc29wb3J0ZSBwYXJhIEJJUyBQWEUiCisKKyM6IHJmYzIxMzEuYzo5NzQgcmZjMzMxNS5jOjEyNDIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImRpc2FibGluZyBESENQIHN0YXRpYyBhZGRyZXNzICVzIGZvciAlcyIKK21zZ3N0ciAiZGVzaGFiaWxpdGFuZG8gZGlyZWNjafNuIERIQ1AgZXN04XRpY2EgJXMgcGFyYSAlcyIKKworIzogcmZjMjEzMS5jOjk5NQorbXNnaWQgInVua25vd24gbGVhc2UiCittc2dzdHIgImNvbmNlc2nzbiBkZXNjb25vY2lkYSIKKworIzogcmZjMjEzMS5jOjEwMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHVzaW5nIGNvbmZpZ3VyZWQgYWRkcmVzcyAlcyBiZWNhdXNlIGl0IGlzIGxlYXNlZCB0byAlcyIKK21zZ3N0ciAibm8gdXNhbmRvIGRpcmVjY2nzbiBjb25maWd1cmFkYSAlcyBwb3JxdWUgZXN04SBjb25jZWRpZGEgYSAlcyIKKworIzogcmZjMjEzMS5jOjEwMzkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm5vdCB1c2luZyBjb25maWd1cmVkIGFkZHJlc3MgJXMgYmVjYXVzZSBpdCBpcyBpbiB1c2UgYnkgdGhlIHNlcnZlciBvciByZWxheSIKK21zZ3N0ciAibm8gdXNhbmRvIGRpcmVjY2nzbiBjb25maWd1cmFkYSAlcyBwb3JxdWUgZXN04SBlbiB1c28gcG9yIGVsIHNlcnZpZG9yIG8gcmVsYXkiCisKKyM6IHJmYzIxMzEuYzoxMDQyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJub3QgdXNpbmcgY29uZmlndXJlZCBhZGRyZXNzICVzIGJlY2F1c2UgaXQgd2FzIHByZXZpb3VzbHkgZGVjbGluZWQiCittc2dzdHIgIm5vIHVzYW5kbyBkaXJlY2Np824gY29uZmlndXJhZGEgJXMgcG9ycXVlIGZ16SBwcmV2aWFtZW50ZSBkZW5lZ2FkYSIKKworIzogcmZjMjEzMS5jOjEwNTggcmZjMjEzMS5jOjEyNDUKK21zZ2lkICJubyB1bmlxdWUtaWQiCittc2dzdHIgIm5pbmf6biB1bmlxdWUtaWQgKGlkZW50aWZpY2FjafNuIPpuaWNhKSIKKworIzogcmZjMjEzMS5jOjExNDAKK21zZ2lkICJ3cm9uZyBzZXJ2ZXItSUQiCittc2dzdHIgIklEIGRlIHNlcnZpZG9yIGVxdWl2b2NhZGEiCisKKyM6IHJmYzIxMzEuYzoxMTU5Cittc2dpZCAid3JvbmcgYWRkcmVzcyIKK21zZ3N0ciAiZGlyZWNjafNuIGVxdWl2b2NhZGEiCisKKyM6IHJmYzIxMzEuYzoxMTc3IHJmYzMzMTUuYzoxMDE1Cittc2dpZCAibGVhc2Ugbm90IGZvdW5kIgorbXNnc3RyICJjb25jZXNp824gbm8gZW5jb250cmFkYSIKKworIzogcmZjMjEzMS5jOjEyMTAKK21zZ2lkICJhZGRyZXNzIG5vdCBhdmFpbGFibGUiCittc2dzdHIgImRpcmVjY2nzbiBubyBkaXNwb25pYmxlIgorCisjOiByZmMyMTMxLmM6MTIyMQorbXNnaWQgInN0YXRpYyBsZWFzZSBhdmFpbGFibGUiCittc2dzdHIgImNvbmNlc2nzbiBlc3ThdGljYSBkaXNwb25pYmxlIgorCisjOiByZmMyMTMxLmM6MTIyNQorbXNnaWQgImFkZHJlc3MgcmVzZXJ2ZWQiCittc2dzdHIgImRpcmVjY2nzbiByZXNlcnZhZGEiCisKKyM6IHJmYzIxMzEuYzoxMjMzCisjLCBjLWZvcm1hdAorbXNnaWQgImFiYW5kb25pbmcgbGVhc2UgdG8gJXMgb2YgJXMiCittc2dzdHIgImFiYW5kb25hbmRvIGNvbmNlc2nzbiBhICVzIGRlICVzIgorCisjOiByZmMyMTMxLmM6MTc1NworIywgYy1mb3JtYXQKK21zZ2lkICIldSBib290ZmlsZSBuYW1lOiAlcyIKK21zZ3N0ciAiJXUgbm9tYnJlIGRlIGJvb3RmaWxlOiAlcyIKKworIzogcmZjMjEzMS5jOjE3NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgc2VydmVyIG5hbWU6ICVzIgorbXNnc3RyICIldSBub21icmUgZGUgc2Vydmlkb3I6ICVzIgorCisjOiByZmMyMTMxLmM6MTc3NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXUgbmV4dCBzZXJ2ZXI6ICVzIgorbXNnc3RyICIldSBzaWd1aWVudGUgc2Vydmlkb3I6ICVzIgorCisjOiByZmMyMTMxLmM6MTc3NworIywgYy1mb3JtYXQKK21zZ2lkICIldSBicm9hZGNhc3QgcmVzcG9uc2UiCittc2dzdHIgIiV1IHJlc3B1ZXN0YSBicm9hZGNhc3QiCisKKyM6IHJmYzIxMzEuYzoxODQwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc2VuZCBESENQL0JPT1RQIG9wdGlvbiAlZDogbm8gc3BhY2UgbGVmdCBpbiBwYWNrZXQiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGVudmlhciBvcGNp824gREhDUC9CT09UUCAlZDogbm8gcXVlZGEgZXNwYWNpbyBlbiBlbCBwYXF1ZXRlIgorCisjOiByZmMyMTMxLmM6MjEzMQorbXNnaWQgIlBYRSBtZW51IHRvbyBsYXJnZSIKK21zZ3N0ciAibWVu+iBQWEUgZGVtYXNpYWRvIGxhcmdvIgorCisjOiByZmMyMTMxLmM6MjI3MCByZmMzMzE1LmM6MTUxNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXUgcmVxdWVzdGVkIG9wdGlvbnM6ICVzIgorbXNnc3RyICIldSBvcGNpb25lcyBzb2xpY2l0YWRhczogJXMiCisKKyM6IHJmYzIxMzEuYzoyNTg3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzZW5kIFJGQzM5MjUgb3B0aW9uOiB0b28gbWFueSBvcHRpb25zIGZvciBlbnRlcnByaXNlIG51bWJlciAlZCIKK21zZ3N0ciAibm8gc2UgcHVlZGUgZW52aWFyIG9wY2nzbiBSRkMzOTI1OiBkZW1hc2lhZGFzIG9wY2lvbmVzIHBhcmEgbvptZXJvIGVudGVycHJpc2UgJWQiCisKKyM6IHJmYzIxMzEuYzoyNjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IHJlcGx5IGRlbGF5OiAlZCIKK21zZ3N0ciAiIgorCisjOiBuZXRsaW5rLmM6NzcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgbmV0bGluayBzb2NrZXQ6ICVzIgorbXNnc3RyICJubyBzZSBwdWVkZSBjcmVhciB682NhbG8gbmV0bGluazogJXMiCisKKyM6IG5ldGxpbmsuYzozNTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm5ldGxpbmsgcmV0dXJucyBlcnJvcjogJXMiCittc2dzdHIgIm5ldGxpbmsgcmV0b3JuYSBlcnJvcjogJXMiCisKKyM6IGRidXMuYzoxODYKK21zZ2lkICJhdHRlbXB0IHRvIHNldCBhbiBJUHY2IHNlcnZlciBhZGRyZXNzIHZpYSBEQnVzIC0gbm8gSVB2NiBzdXBwb3J0IgorbXNnc3RyICJpbnRlbnRvIGRlIGZpamFyIGRpcmVjY2nzbiBkZSBzZXJ2aWRvciBJUHY2IHbtYSBEQnVzIC0gbm8gaGF5IHNvcG9ydGUgSVB2NiIKKworIzogZGJ1cy5jOjQzOQorIywgYy1mb3JtYXQKK21zZ2lkICJFbmFibGluZyAtLSVzIG9wdGlvbiBmcm9tIEQtQnVzIgorbXNnc3RyICIiCisKKyM6IGRidXMuYzo0NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlzYWJsaW5nIC0tJXMgb3B0aW9uIGZyb20gRC1CdXMiCittc2dzdHIgIiIKKworIzogZGJ1cy5jOjY5MAorbXNnaWQgInNldHRpbmcgdXBzdHJlYW0gc2VydmVycyBmcm9tIERCdXMiCittc2dzdHIgImZpamFuZG8gc2Vydmlkb3JlcyBzdWJpZGEgZGVzZGUgREJ1cyIKKworIzogZGJ1cy5jOjczNworbXNnaWQgImNvdWxkIG5vdCByZWdpc3RlciBhIERCdXMgbWVzc2FnZSBoYW5kbGVyIgorbXNnc3RyICJubyBzZSBwdWRvIHJlZ2lzdHJhciB1biBtYW5lamFkb3IgZGUgbWVuc2FqZXMgREJ1cyIKKworIzogYnBmLmM6MjY1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgREhDUCBCUEYgc29ja2V0OiAlcyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgY3JlYXIgevNjYWxvIEJQRiBESENQOiAlcyIKKworIzogYnBmLmM6MjkzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJESENQIHJlcXVlc3QgZm9yIHVuc3VwcG9ydGVkIGhhcmR3YXJlIHR5cGUgKCVkKSByZWNlaXZlZCBvbiAlcyIKK21zZ3N0ciAicGVkaWRvIERIQ1AgcG9yIHRpcG8gZGUgaGFyZHdhcmUgbm8tc29wb3J0YWRvICglZCkgcmVjaWJpZG8gZW4gJXMiCisKKyM6IGJwZi5jOjM3OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBQRl9ST1VURSBzb2NrZXQ6ICVzIgorbXNnc3RyICJubyBzZSBwdWVkZSBjcmVhciB682NhbG8gREhDUDogJXMiCisKKyM6IGJwZi5jOjM5OQorbXNnaWQgIlVua25vd24gcHJvdG9jb2wgdmVyc2lvbiBmcm9tIHJvdXRlIHNvY2tldCIKK21zZ3N0ciAiIgorCisjOiBoZWxwZXIuYzoxNTMKK21zZ2lkICJsZWFzZSgpIGZ1bmN0aW9uIG1pc3NpbmcgaW4gTHVhIHNjcmlwdCIKK21zZ3N0ciAibGEgZnVuY2nzbiBsZWFzZSgpIG5vIHNlIGVuY3VlbnRyYSBlbiBlbCBzY3JpcHQgTHVhIgorCisjOiB0ZnRwLmM6MzE5Cittc2dpZCAidW5hYmxlIHRvIGdldCBmcmVlIHBvcnQgZm9yIFRGVFAiCittc2dzdHIgImluY2FwYXogZGUgY29uc2VndWlyIHB1ZXJ0byBsaWJyZSBwYXJhIFRGVFAiCisKKyM6IHRmdHAuYzozMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5zdXBwb3J0ZWQgcmVxdWVzdCBmcm9tICVzIgorbXNnc3RyICJwZWRpZG8gbm8tc29wb3J0YWRvIGRlc2RlICVzIgorCisjOiB0ZnRwLmM6NDgzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmaWxlICVzIG5vdCBmb3VuZCIKK21zZ3N0ciAiYXJjaGl2byAlcyBubyBlbmNvbnRyYWRvIgorCisjOiB0ZnRwLmM6NTkyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJlcnJvciAlZCAlcyByZWNlaXZlZCBmcm9tICVzIgorbXNnc3RyICJlcnJvciBURlRQICVkICVzIHJlY2liaWRvIGRlICVzIgorCisjOiB0ZnRwLmM6NjM0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgc2VuZGluZyAlcyB0byAlcyIKK21zZ3N0ciAiVEZUUCBubyBwdWRvIGVudmlhciAlcyBhICVzIgorCisjOiB0ZnRwLmM6NjM0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJzZW50ICVzIHRvICVzIgorbXNnc3RyICJURlRQIGVudmnzICVzIGEgJXMiCisKKyM6IGxvZy5jOjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICJvdmVyZmxvdzogJWQgbG9nIGVudHJpZXMgbG9zdCIKK21zZ3N0ciAiZGVzYm9yZGFtaWVudG86ICVkIGVudHJhZGFzIGRlIHJlZ2lzdHJvIHBlcmRpZGFzIgorCisjOiBsb2cuYzoyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9nIGZhaWxlZDogJXMiCittc2dzdHIgInJlZ2lzdHJvIGZhbGzzOiAlcyIKKworIzogbG9nLmM6NDcxCittc2dpZCAiRkFJTEVEIHRvIHN0YXJ0IHVwIgorbXNnc3RyICJlbCBpbmljaW8gaGEgRkFMTEFETyIKKworIzogY29ubnRyYWNrLmM6NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29ubnRyYWNrIGNvbm5lY3Rpb24gbWFyayByZXRyaWV2YWwgZmFpbGVkOiAlcyIKK21zZ3N0ciAiQ29uZXhp824gY29ubnRyYWNrIGNvbiBtYXJjYSByZWN1cGVyYWNp824gZmFsbPMiCisKKyM6IGRoY3A2LmM6NTIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgREhDUHY2IHNvY2tldDogJXMiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGNyZWFyIHrzY2FsbyBESENQOiAlcyIKKworIzogZGhjcDYuYzo3MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNldCBTT19SRVVTRXtBRERSfFBPUlR9IG9uIERIQ1B2NiBzb2NrZXQ6ICVzIgorbXNnc3RyICJubyBzZSBwdWRvIGZpamFyIFNPX1JFVVNFe0FERFJ8UE9SVH0gZW4gevNjYWxvIERIQ1A6ICVzIgorCisjOiBkaGNwNi5jOjg1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYmluZCBESENQdjYgc2VydmVyIHNvY2tldDogJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gYWNvcGxhciB682NhbG8gZGUgc2Vydmlkb3IgREhDUDogJXMiCisKKyM6IHJmYzMzMTUuYzoxNTcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm5vIGFkZHJlc3MgcmFuZ2UgYXZhaWxhYmxlIGZvciBESENQdjYgcmVxdWVzdCBmcm9tIHJlbGF5IGF0ICVzIgorbXNnc3RyICJuaW5n+m4gcmFuZ28gZGUgZGlyZWNjafNuZXMgZGlzcG9uaWJsZSBwYXJhIHBlZGlkbyBESENQICVzICVzIgorCisjOiByZmMzMzE1LmM6MTY2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJubyBhZGRyZXNzIHJhbmdlIGF2YWlsYWJsZSBmb3IgREhDUHY2IHJlcXVlc3QgdmlhICVzIgorbXNnc3RyICJuaW5n+m4gcmFuZ28gZGUgZGlyZWNjafNuZXMgZGlzcG9uaWJsZSBwYXJhIHBlZGlkbyBESENQICVzICVzIgorCisjOiByZmMzMzE1LmM6MzAzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIldSBhdmFpbGFibGUgREhDUHY2IHN1Ym5ldDogJXMvJWQiCittc2dzdHIgIiV1IFN1YnJlZCBESENQIGRpc3BvbmlibGU6ICVzLyVzIgorCisjOiByZmMzMzE1LmM6Mzg2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIldSB2ZW5kb3IgY2xhc3M6ICV1IgorbXNnc3RyICIldSBDbGFzZSBkZSB2ZW5kZWRvcjogJXMiCisKKyM6IHJmYzMzMTUuYzo0MzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiV1IGNsaWVudCBNQUMgYWRkcmVzczogJXMiCittc2dzdHIgIiV1IGNsaWVudGUgcHJvdmVlIG5vbWJyZTogJXMiCisKKyM6IHJmYzMzMTUuYzo2NzMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gcHJlZml4LWNsYXNzICVkIgorbXNnc3RyICJjbGFzZSBkZSBwcmVmaWpvIGRlc2Nvbm9jaWRhIgorCisjOiByZmMzMzE1LmM6ODE2IHJmYzMzMTUuYzo5MTEKKyMsIGZ1enp5Cittc2dpZCAiYWRkcmVzcyB1bmF2YWlsYWJsZSIKK21zZ3N0ciAiZGlyZWNjafNuIG5vIGRpc3BvbmlibGUiCisKKyM6IHJmYzMzMTUuYzo4MjggcmZjMzMxNS5jOjk1OSByZmMzMzE1LmM6MTI5MgorbXNnaWQgInN1Y2Nlc3MiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjg0MyByZmMzMzE1LmM6ODUyIHJmYzMzMTUuYzo5NjcgcmZjMzMxNS5jOjk2OQorIywgZnV6enkKK21zZ2lkICJubyBhZGRyZXNzZXMgYXZhaWxhYmxlIgorbXNnc3RyICJuaW5ndW5hIGRpcmVjY2nzbiBkaXNwb25pYmxlIgorCisjOiByZmMzMzE1LmM6OTQ2Cittc2dpZCAibm90IG9uIGxpbmsiCittc2dzdHIgIm5vIGVuIGVsIGVubGFjZSIKKworIzogcmZjMzMxNS5jOjEwMTkgcmZjMzMxNS5jOjEyMDQgcmZjMzMxNS5jOjEyODEKK21zZ2lkICJubyBiaW5kaW5nIGZvdW5kIgorbXNnc3RyICJ1bmlvbmVzIG5vIGVuY29udHJhZGFzIgorCisjOiByZmMzMzE1LmM6MTA1NworbXNnaWQgImRlcHJlY2F0ZWQiCittc2dzdHIgImRlc2NhcnRhZG8iCisKKyM6IHJmYzMzMTUuYzoxMDYyCisjLCBmdXp6eQorbXNnaWQgImFkZHJlc3MgaW52YWxpZCIKK21zZ3N0ciAiZGlyZWNjafNuIGVuIHVzbyIKKworIzogcmZjMzMxNS5jOjExMDkKK21zZ2lkICJjb25maXJtIGZhaWxlZCIKK21zZ3N0ciAiY29uZmlybWFjafNuIGZhbGzzIgorCisjOiByZmMzMzE1LmM6MTEyNQorIywgZnV6enkKK21zZ2lkICJhbGwgYWRkcmVzc2VzIHN0aWxsIG9uIGxpbmsiCittc2dzdHIgImRpcmVjY2nzbiBlcnLzbmVhIGVuICVzIGztbmVhICVkIgorCisjOiByZmMzMzE1LmM6MTIxMworbXNnaWQgInJlbGVhc2UgcmVjZWl2ZWQiCittc2dzdHIgImNvbmNlc2nzbiByZWNpYmlkYSIKKworIzogcmZjMzMxNS5jOjIxNDAKK21zZ2lkICJDYW5ub3QgbXVsdGljYXN0IHRvIERIQ1B2NiBzZXJ2ZXIgd2l0aG91dCBjb3JyZWN0IGludGVyZmFjZSIKK21zZ3N0ciAiTm8gcHVlZGUgaGFjZXIgbXVsdGljYXN0IERIQ1B2NiBzaW4gZWwgaW50ZXJmYXNlIGNvcnJlY3RvIgorCisjOiBkaGNwLWNvbW1vbi5jOjE0NQorIywgYy1mb3JtYXQKK21zZ2lkICJJZ25vcmluZyBkdXBsaWNhdGUgZGhjcC1vcHRpb24gJWQiCittc2dzdHIgIklnbm9yYW5kbyBvcGNp824gREhDUCBkdXBsaWNhZGEiCisKKyM6IGRoY3AtY29tbW9uLmM6MjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IHRhZ3M6ICVzIgorbXNnc3RyICIldSBldGlxdWV0YXM6ICVzIgorCisjOiBkaGNwLWNvbW1vbi5jOjQwNworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgbW9yZSB0aGFuIG9uZSBhZGRyZXNzIGluIGhvc3RzZmlsZSwgdXNpbmcgJXMgZm9yIERIQ1AiCittc2dzdHIgIiVzIHRpZW5lIG3hcyBkZSB1bmEgZGlyZWNjafNuIGVuIGhvc3RzZmlsZSwgdXNhbmRvICVzIHBhcmEgREhDUCIKKworIzogZGhjcC1jb21tb24uYzo0MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIElQIGFkZHJlc3MgJXMgKCVzKSBpbiBkaGNwLWNvbmZpZyBkaXJlY3RpdmUiCittc2dzdHIgImRpcmVjY2nzbiBJUCBkdXBsaWNhZGEgJXMgKCVzKSBlbiBkaXJlY3RpdmEgZGhjcC1jb25maWciCisKKyM6IGRoY3AtY29tbW9uLmM6NDk0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2V0IFNPX0JJTkRUT0RFVklDRSBvbiBESENQIHNvY2tldDogJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gZmlqYXIgU09fUkVVU0V7QUREUnxQT1JUfSBlbiBzb2NrZXQgREhDUDogJXMiCisKKyM6IGRoY3AtY29tbW9uLmM6NjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIktub3duIERIQ1Agb3B0aW9uczpcbiIKK21zZ3N0ciAiT3BjaW9uZXMgREhDUCBjb25vY2lkYXM6XG4iCisKKyM6IGRoY3AtY29tbW9uLmM6NjI2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJLbm93biBESENQdjYgb3B0aW9uczpcbiIKK21zZ3N0ciAiT3BjaW9uZXMgREhDUCBjb25vY2lkYXM6XG4iCisKKyM6IGRoY3AtY29tbW9uLmM6ODIzCittc2dpZCAiLCBwcmVmaXggZGVwcmVjYXRlZCIKK21zZ3N0ciAiLCBwcmVmaWpvIGRlc2NhcnRhZG8iCisKKyM6IGRoY3AtY29tbW9uLmM6ODI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiwgbGVhc2UgdGltZSAiCittc2dzdHIgIiwgdGllbXBvIGRlIGNvbmNlc2nzbiIKKworIzogZGhjcC1jb21tb24uYzo4NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgc3RhdGVsZXNzIG9uICVzJS4wcyUuMHMlcyIKK21zZ3N0ciAiJXMgYXDhdHJpZGEgZW4gJXMlLjBzJS4wcyVzIgorCisjOiBkaGNwLWNvbW1vbi5jOjg3MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMsIHN0YXRpYyBsZWFzZXMgb25seSBvbiAlLjBzJXMlcyUuMHMiCittc2dzdHIgIkRIQ1AsIGNvbmNlc2nzbiBlc3ThdGljYSBzb2xvIGVuICUuMHMlcywgdGllbXBvIGRlIGNvbmNlc2nzbiAlcyIKKworIzogZGhjcC1jb21tb24uYzo4NzIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzLCBwcm94eSBvbiBzdWJuZXQgJS4wcyVzJS4wcyUuMHMiCittc2dzdHIgIkRIQ1AsIHByb3h5IGVuIHN1YnJlZCAlLjBzJXMlLjBzIgorCisjOiBkaGNwLWNvbW1vbi5jOjg3MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMsIElQIHJhbmdlICVzIC0tICVzJXMlLjBzIgorbXNnc3RyICJESENQLCByYW5nbyBkZSBJUHMgJXMgLS0gJXMsIHRpZW1wbyBkZSBjb25jZXNp824gJXMiCisKKyM6IGRoY3AtY29tbW9uLmM6ODg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1B2NC1kZXJpdmVkIElQdjYgbmFtZXMgb24gJXMlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjg4OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAicm91dGVyIGFkdmVydGlzZW1lbnQgb24gJXMlcyIKK21zZ3N0ciAiREhDUCwgY29uY2VzafNuIGVzdOF0aWNvcyBzb2xvIGVuICUuMHMlcywgdGllbXBvIGRlIGNvbmNlc2nzbiAlcyIKKworIzogZGhjcC1jb21tb24uYzo5MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCByZWxheSBmcm9tICVzIHRvICVzIHZpYSAlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjkwMgorIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHJlbGF5IGZyb20gJXMgdG8gJXMiCittc2dzdHIgIiIKKworIzogcmFkdi5jOjExMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBJQ01QdjYgc29ja2V0OiAlcyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgY3JlYXIgc29ja2V0IERIQ1A6ICVzIgorCisjOiBhdXRoLmM6NDQ5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyB6b25lIHRyYW5zZmVyIHJlcXVlc3QgZnJvbSAlcyIKK21zZ3N0ciAicGVkaWRvIG5vLXNvcG9ydGFkbyBkZXNkZSAlcyIKKworIzogaXBzZXQuYzo5NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmQga2VybmVsIHZlcnNpb246ICVzIgorbXNnc3RyICJubyBzZSBwdWRvIGFjb3BsYXIgc29ja2V0IGRlIHNlcnZpZG9yIERIQ1A6ICVzIgorCisjOiBpcHNldC5jOjExNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBJUHNldCBjb250cm9sIHNvY2tldDogJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gY3JlYXIgc29ja2V0IFRGVFA6ICVzIgorCisjOiBpcHNldC5jOjIzMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHVwZGF0ZSBpcHNldCAlczogJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gYWJyaXIgYXJjaGl2byBQSUQgJXM6ICVzIgorCisjOiBkbnNzZWMuYzo1MjcKK21zZ2lkICJzeXN0ZW0gdGltZSBjb25zaWRlcmVkIHZhbGlkLCBub3cgY2hlY2tpbmcgRE5TU0VDIHNpZ25hdHVyZSB0aW1lc3RhbXBzLiIKK21zZ3N0ciAiIgorCisjOiBibG9ja2RhdGEuYzo1OAorIywgYy1mb3JtYXQKK21zZ2lkICJETlNTRUMgbWVtb3J5IGluIHVzZSAldSwgbWF4ICV1LCBhbGxvY2F0ZWQgJXUiCittc2dzdHIgIiIKKworIzogdGFibGVzLmM6NjEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBhY2Nlc3MgcGYgZGV2aWNlczogJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gYWNjZWRlciAlczogJXMiCisKKyM6IHRhYmxlcy5jOjc0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBubyBvcGVuZWQgcGYgZGV2aWNlcyAlcyIKK21zZ3N0ciAidXNhbmRvIGRpcmVjY2lvbmVzIGxvY2FsZXMgc29sbyBwYXJhICVzICVzIgorCisjOiB0YWJsZXMuYzo4MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZXJyb3I6IGNhbm5vdCB1c2UgdGFibGUgbmFtZSAlcyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgb2J0ZW5lciBob3N0LW5hbWUgKG5vbWJyZSBkZSBob3N0KTogJXMiCisKKyM6IHRhYmxlcy5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yOiBjYW5ub3Qgc3RybGNweSB0YWJsZSBuYW1lICVzIgorbXNnc3RyICIiCisKKyM6IHRhYmxlcy5jOjEwMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSVBzZXQ6IGVycm9yOiVzIgorbXNnc3RyICJlcnJvciBEQnVzOiAlcyIKKworIzogdGFibGVzLmM6MTA4Cittc2dpZCAiaW5mbzogdGFibGUgY3JlYXRlZCIKK21zZ3N0ciAiIgorCisjOiB0YWJsZXMuYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogRElPQ1Ilc0FERFJTOiAlcyIKK21zZ3N0ciAiIgorCisjOiB0YWJsZXMuYzoxMzgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVkIGFkZHJlc3NlcyAlcyIKK21zZ3N0ciAiZGlyZWNjafNuIElQIGVycvNuZWEiCisKKyM6IGlub3RpZnkuYzo2MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGFjY2VzcyBwYXRoICVzOiAlcyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgYWNjZWRlciAlczogJXMiCisKKyM6IGlub3RpZnkuYzo5NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBpbm90aWZ5OiAlcyIKK21zZ3N0ciAibm8gc2UgcHVkbyBjcmVhciBheXVkYW50ZTogJXMiCisKKyM6IGlub3RpZnkuYzoxMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgc3ltbGlua3MgZm9sbG93aW5nICVzIgorbXNnc3RyICIiCisKKyM6IGlub3RpZnkuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGlyZWN0b3J5ICVzIGZvciByZXNvbHYtZmlsZSBpcyBtaXNzaW5nLCBjYW5ub3QgcG9sbCIKK21zZ3N0ciAiIgorCisjOiBpbm90aWZ5LmM6MTMxIGlub3RpZnkuYzoxNjgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgaW5vdGlmeSBmb3IgJXM6ICVzIgorbXNnc3RyICJubyBzZSBwdWRvIGNyZWFyIHVuIHrzY2FsbyBkZSBlc2N1Y2hhOiAlcyIKKworIzogaW5vdGlmeS5jOjE1MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiYmFkIGR5bmFtaWMgZGlyZWN0b3J5ICVzOiAlcyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgYWNjZWRlciBhIGRpcmVjdG9yaW8gJXM6ICVzIgorCisjOiBpbm90aWZ5LmM6MjU1CisjLCBjLWZvcm1hdAorbXNnaWQgImlub3RpZnksIG5ldyBvciBjaGFuZ2VkIGZpbGUgJXMiCittc2dzdHIgIiIKKworIywgZnV6enkKKyN+IG1zZ2lkICJjYW5ub3QgY2Fubm9uaWNhbGlzZSByZXNvbHYtZmlsZSAlczogJXMiCisjfiBtc2dzdHIgIm5vIHNlIHB1ZWRlIGFicmlyIG8gY3JlYXIgYXJjaGl2byBkZSBjb25jZXNp824gJXM6ICVzIgorCisjfiBtc2dpZCAibm8gaW50ZXJmYWNlIHdpdGggYWRkcmVzcyAlcyIKKyN+IG1zZ3N0ciAibmluZ3VuYSBpbnRlcmZhc2UgY29uIGRpcmVjY2nzbiAlcyIKKworI34gbXNnaWQgImR1cGxpY2F0ZSBJUCBhZGRyZXNzICVzIGluIGRoY3AtY29uZmlnIGRpcmVjdGl2ZS4iCisjfiBtc2dzdHIgImRpcmVjY2nzbiBJUCBkdXBsaWNhZGEgJXMgZW4gZGlyZWN0aXZhIGRoY3AtY29uZmlnLiIKKworIywgZnV6enkKKyN+IG1zZ2lkICJTcGVjaWZ5IHBhdGggdG8gTHVhIHNjcmlwdCAobm8gZGVmYXVsdCkuIgorI34gbXNnc3RyICJFc3BlY2lmaWNhciBwYXRoIGRlIGFyY2hpdm8gUElEICglcyBwb3IgcHJlZGV0ZXJtaW5hZG8pLiIKKworIywgZnV6enkKKyN+IG1zZ2lkICJvbmx5IG9uZSBkaGNwLWhvc3RzZmlsZSBhbGxvd2VkIgorI34gbXNnc3RyICJzb2xvIHVuIGRoY3AtaG9zdHNmaWxlIHBlcm1pdGlkbyIKKworIywgZnV6enkKKyN+IG1zZ2lkICJvbmx5IG9uZSBkaGNwLW9wdHNmaWxlIGFsbG93ZWQiCisjfiBtc2dzdHIgInNvbG8gdW4gZGhjcC1vcHRzZmlsZSBwZXJtaXRpZG8iCisKKyN+IG1zZ2lkICJmaWxlcyBuZXN0ZWQgdG9vIGRlZXAgaW4gJXMiCisjfiBtc2dzdHIgImFyY2hpdm9zIGplcmFycXVpemFkb3MgZGVtYXNpYWRvIHByb2Z1bmRvIGVuICVzIgorCisjfiBtc2dpZCAiVFhUIHJlY29yZCBzdHJpbmcgdG9vIGxvbmciCisjfiBtc2dzdHIgImV4cGVkaWVudGUgVFhUIGRlbWFzaWFkbyBsYXJnbyIKKworI34gbXNnaWQgImZhaWxlZCB0byBzZXQgSVBWNiBvcHRpb25zIG9uIGxpc3RlbmluZyBzb2NrZXQ6ICVzIgorI34gbXNnc3RyICJubyBzZSBwdWRvIGZpamFyIG9wY2lvbmVzIElQdjYgc29icmUgc29ja2V0IGVzY3VjaGFkb3I6ICVzIgorCisjfiBtc2dpZCAiZmFpbGVkIHRvIGJpbmQgbGlzdGVuaW5nIHNvY2tldCBmb3IgJXM6ICVzIgorI34gbXNnc3RyICJubyBzZSBwdWRvIGFjb3BsYXIgc29ja2V0IGVzY3VjaGFkb3IgcGFyYSAlczogJXMiCisKKyN+IG1zZ2lkICJESENQIHBhY2tldDogdHJhbnNhY3Rpb24taWQgaXMgJXUiCisjfiBtc2dzdHIgInBhcXVldGUgREhDUDogdHJhbnNhY3Rpb24taWQgKGlkZW50aWZpY2FjafNuIGRlIHRyYW5zYWNjafNuKSBlcyAldSIKKworI34gbXNnaWQgIm11c3Qgc2V0IGV4YWN0bHkgb25lIGludGVyZmFjZSBvbiBicm9rZW4gc3lzdGVtcyB3aXRob3V0IElQX1JFQ1ZJRiIKKyN+IG1zZ3N0ciAiZGViZSBmaWphcnNlIGV44WN0YW1lbnRlIHVuYSBpbnRlcmZhc2UgZW4gc2lzdGVtYXMgcm90b3Mgc2luIElQX1JFQ1ZJRiIKKworI34gbXNnaWQgIklnbm9yaW5nIERIQ1AgbGVhc2UgZm9yICVzIGJlY2F1c2UgaXQgaGFzIGFuIGlsbGVnYWwgZG9tYWluIHBhcnQiCisjfiBtc2dzdHIgIklnbm9yYW5kbyBjb25jZXNp824gREhDUCBwYXJhICVzIHBvcnF1ZSB0aWVuZSB1bmEgcGFydGUgaWxlZ2FsIGRlIGRvbWluaW8iCisKKyN+IG1zZ2lkICJJU0MgZGhjcGQgaW50ZWdyYXRpb24gbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfSVNDX1JFQURFUiBpbiBzcmMvY29uZmlnLmgiCisjfiBtc2dzdHIgImludGVncmFjafNuIGRoY3BkIElTQyBubyBkaXNwb25pYmxlOiBmaWphciBIQVZFX0lTQ19SRUFERVIgZW4gc3JjL2NvbmZpZy5oIgorCisjLCBmdXp6eQorI34gbXNnaWQgImlsbGVnYWwgZG9tYWluICVzIGluIGRoY3AtY29uZmlnIGRpcmVjdGl2ZS4iCisjfiBtc2dzdHIgImRvbWluaW8gaWxlZ2FsICVzIGVuIGRpcmVjdGl2YSBkaGNwLWNvbmZpZy4iCisKKyN+IG1zZ2lkICJpbGxlZ2FsIGRvbWFpbiAlcyBpbiAlcy4iCisjfiBtc2dzdHIgImRvbWluaW8gaWxlZ2FsICVzIGVuICVzLiIKKworI34gbXNnaWQgInJ1bm5pbmcgYXMgcm9vdCIKKyN+IG1zZ3N0ciAiY29ycmllbmRvIGNvbW8gcm9vdCIKKworI34gbXNnaWQgIlJlYWQgbGVhc2VzIGF0IHN0YXJ0dXAsIGJ1dCBuZXZlciB3cml0ZSB0aGUgbGVhc2UgZmlsZS4iCisjfiBtc2dzdHIgIkxlZXIgY29uY2VzafNuIGFsIGluaWNpbywgcGVybyBudW5jYSBlc2NyaWJpciBlbCBhcmNoaXZvIGRlIGNvbmNlc2nzbi4iCisKKyMsIGZ1enp5CisjfiBtc2dpZCAicmVhZCAlcyAtICVkIGhvc3RzIgorI34gbXNnc3RyICJkaXJlY2Np825lcyAlcyAtICVkIGxl7WRhcyIKKworI34gbXNnaWQgIkxpbWl0IG9mICVkIGxlYXNlcyBleGNlZWRlZC4iCisjfiBtc2dzdHIgIkztbWl0ZSBkZSAlZCBjb25jZXNp824gZXhjZWRpZG8uIgorCisjfiBtc2dpZCAiZG9tYWlucyIKKyN+IG1zZ3N0ciAiZG9taW5pb3MiCisKKyN+IG1zZ2lkICJJZ25vcmluZyBESENQIGhvc3QgbmFtZSAlcyBiZWNhdXNlIGl0IGhhcyBhbiBpbGxlZ2FsIGRvbWFpbiBwYXJ0IgorI34gbXNnc3RyICJJZ25vcmFuZG8gbm9tYnJlIGRlIGhvc3QgREhDUCAlcyBwb3JxdWUgY29udGllbmUgdW5hIHBhcnRlIGlsZWdhbCBkZSBkb21pbmlvIgorCisjfiBtc2dpZCAiRGlzcGxheSB0aGlzIG1lc3NhZ2UuIgorI34gbXNnc3RyICJNb3N0cmFyIGVzdGUgbWVuc2FqZS4iCisKKyN+IG1zZ2lkICJmYWlsZWQgdG8gcmVhZCAlczogJW0iCisjfiBtc2dzdHIgIm5vIHNlIHB1ZG8gbGVlciAlczogJW0iCisKKyN+IG1zZ2lkICJmYWlsZWQgdG8gcmVhZCAlczolbSIKKyN+IG1zZ3N0ciAibm8gc2UgcHVkbyBsZWVyICVzOiVtIgpkaWZmIC0tZ2l0IGEvcG8vZmkucG8gYi9wby9maS5wbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wZjM1NTgyCi0tLSAvZGV2L251bGwKKysrIGIvcG8vZmkucG8KQEAgLTAsMCArMSwyMjI2IEBACisjIEZpbm5pc2ggdHJhbnNsYXRpb25zIGZvciBkbnNtYXNxIHBhY2thZ2UuCisjIFRoaXMgZmlsZSBpcyBwdXQgaW4gdGhlIHB1YmxpYyBkb21haW4uCisjIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+LCAyMDA1LgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZG5zbWFzcSAyLjI0XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDA5LTA2LTE4IDEyOjI0KzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDE3LTA3LTE3IDE4OjMwKzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+XG4iCisiTGFuZ3VhZ2UtVGVhbTogRmlubmlzaCA8dHJhbnNsYXRpb24tdGVhbS1maUBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+XG4iCisiTGFuZ3VhZ2U6IGZpXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9QVNDSUlcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisKKyM6IGNhY2hlLmM6NTEzCittc2dpZCAiSW50ZXJuYWwgZXJyb3IgaW4gY2FjaGUuIgorbXNnc3RyICIiCisKKyM6IGNhY2hlLmM6OTIzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2FkIG5hbWVzIGZyb20gJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGNhY2hlLmM6OTQ5IGRoY3AuYzo4NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGFkZHJlc3MgYXQgJXMgbGluZSAlZCIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjEwMDIgZGhjcC5jOjg4MworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbmFtZSBhdCAlcyBsaW5lICVkIgorbXNnc3RyICIiCisKKyM6IGNhY2hlLmM6MTAxMSBkaGNwLmM6OTU4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWQgJXMgLSAlZCBhZGRyZXNzZXMiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxMTI0Cittc2dpZCAiY2xlYXJlZCBjYWNoZSIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjExNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gSVB2NCBhZGRyZXNzIGZvdW5kIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjEyMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgYSBDTkFNRSwgbm90IGdpdmluZyBpdCB0byB0aGUgREhDUCBsZWFzZSBvZiAlcyIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjEyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGdpdmluZyBuYW1lICVzIHRvIHRoZSBESENQIGxlYXNlIG9mICVzIGJlY2F1c2UgdGhlIG5hbWUgZXhpc3RzIGluICVzIHdpdGggYWRkcmVzcyAlcyIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjE0MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidGltZSAlbHUiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxNDE0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhY2hlIHNpemUgJWQsICVkLyVkIGNhY2hlIGluc2VydGlvbnMgcmUtdXNlZCB1bmV4cGlyZWQgY2FjaGUgZW50cmllcy4iCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxNDE2CisjLCBjLWZvcm1hdAorbXNnaWQgInF1ZXJpZXMgZm9yd2FyZGVkICV1LCBxdWVyaWVzIGFuc3dlcmVkIGxvY2FsbHkgJXUiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxNDE5CisjLCBjLWZvcm1hdAorbXNnaWQgInF1ZXJpZXMgZm9yIGF1dGhvcml0YXRpdmUgem9uZXMgJXUiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxNDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgInNlcnZlciAlcyMlZDogcXVlcmllcyBzZW50ICV1LCByZXRyaWVkIG9yIGZhaWxlZCAldSIKK21zZ3N0ciAiIgorCisjOiB1dGlsLmM6NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNlZWQgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yOiAlcyIKK21zZ3N0ciAiIgorCisjOiB1dGlsLmM6MjI0Cittc2dpZCAiZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSIKK21zZ3N0ciAiIgorCisjOiB1dGlsLmM6Mjc3IG9wdGlvbi5jOjYxOQorbXNnaWQgImNvdWxkIG5vdCBnZXQgbWVtb3J5IgorbXNnc3RyICIiCisKKyM6IHV0aWwuYzoyODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBwaXBlOiAlcyIKK21zZ3N0ciAiIgorCisjOiB1dGlsLmM6Mjk1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBhbGxvY2F0ZSAlZCBieXRlcyIKK21zZ3N0ciAiIgorCisjOiB1dGlsLmM6NDY0CisjLCBjLWZvcm1hdAorbXNnaWQgImluZmluaXRlIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM0NAorbXNnaWQgIlNwZWNpZnkgbG9jYWwgYWRkcmVzcyhlcykgdG8gbGlzdGVuIG9uLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNDUKK21zZ2lkICJSZXR1cm4gaXBhZGRyIGZvciBhbGwgaG9zdHMgaW4gc3BlY2lmaWVkIGRvbWFpbnMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM0NgorbXNnaWQgIkZha2UgcmV2ZXJzZSBsb29rdXBzIGZvciBSRkMxOTE4IHByaXZhdGUgYWRkcmVzcyByYW5nZXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM0NworbXNnaWQgIlRyZWF0IGlwYWRkciBhcyBOWERPTUFJTiAoZGVmZWF0cyBWZXJpc2lnbiB3aWxkY2FyZCkuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM0OAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHRoZSBzaXplIG9mIHRoZSBjYWNoZSBpbiBlbnRyaWVzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM0OQorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IGNvbmZpZ3VyYXRpb24gZmlsZSAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNTAKK21zZ2lkICJEbyBOT1QgZm9yayBpbnRvIHRoZSBiYWNrZ3JvdW5kOiBydW4gaW4gZGVidWcgbW9kZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzUxCittc2dpZCAiRG8gTk9UIGZvcndhcmQgcXVlcmllcyB3aXRoIG5vIGRvbWFpbiBwYXJ0LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNTIKK21zZ2lkICJSZXR1cm4gc2VsZi1wb2ludGluZyBNWCByZWNvcmRzIGZvciBsb2NhbCBob3N0cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzUzCittc2dpZCAiRXhwYW5kIHNpbXBsZSBuYW1lcyBpbiAvZXRjL2hvc3RzIHdpdGggZG9tYWluLXN1ZmZpeC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzU0Cittc2dpZCAiRG9uJ3QgZm9yd2FyZCBzcHVyaW91cyBETlMgcmVxdWVzdHMgZnJvbSBXaW5kb3dzIGhvc3RzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNTUKK21zZ2lkICJFbmFibGUgREhDUCBpbiB0aGUgcmFuZ2UgZ2l2ZW4gd2l0aCBsZWFzZSBkdXJhdGlvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoYW5nZSB0byB0aGlzIGdyb3VwIGFmdGVyIHN0YXJ0dXAgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzU3Cittc2dpZCAiU2V0IGFkZHJlc3Mgb3IgaG9zdG5hbWUgZm9yIGEgc3BlY2lmaWVkIG1hY2hpbmUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM1OAorbXNnaWQgIlJlYWQgREhDUCBob3N0IHNwZWNzIGZyb20gZmlsZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzU5Cittc2dpZCAiUmVhZCBESENQIG9wdGlvbiBzcGVjcyBmcm9tIGZpbGUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM2MAorbXNnaWQgIlJlYWQgREhDUCBob3N0IHNwZWNzIGZyb20gYSBkaXJlY3RvcnkuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM2MQorbXNnaWQgIlJlYWQgREhDUCBvcHRpb25zIGZyb20gYSBkaXJlY3RvcnkuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM2MgorbXNnaWQgIkV2YWx1YXRlIGNvbmRpdGlvbmFsIHRhZyBleHByZXNzaW9uLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG8gTk9UIGxvYWQgJXMgZmlsZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzY0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgYSBob3N0cyBmaWxlIHRvIGJlIHJlYWQgaW4gYWRkaXRpb24gdG8gJXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM2NQorbXNnaWQgIlJlYWQgaG9zdHMgZmlsZXMgZnJvbSBhIGRpcmVjdG9yeS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzY2Cittc2dpZCAiU3BlY2lmeSBpbnRlcmZhY2UocykgdG8gbGlzdGVuIG9uLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNjcKK21zZ2lkICJTcGVjaWZ5IGludGVyZmFjZShzKSBOT1QgdG8gbGlzdGVuIG9uLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNjgKK21zZ2lkICJNYXAgREhDUCB1c2VyIGNsYXNzIHRvIHRhZy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzY5Cittc2dpZCAiTWFwIFJGQzMwNDYgY2lyY3VpdC1pZCB0byB0YWcuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM3MAorbXNnaWQgIk1hcCBSRkMzMDQ2IHJlbW90ZS1pZCB0byB0YWcuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM3MQorbXNnaWQgIk1hcCBSRkMzOTkzIHN1YnNjcmliZXItaWQgdG8gdGFnLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNzIKK21zZ2lkICJEb24ndCBkbyBESENQIGZvciBob3N0cyB3aXRoIHRhZyBzZXQuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM3MworbXNnaWQgIkZvcmNlIGJyb2FkY2FzdCByZXBsaWVzIGZvciBob3N0cyB3aXRoIHRhZyBzZXQuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM3NAorbXNnaWQgIkRvIE5PVCBmb3JrIGludG8gdGhlIGJhY2tncm91bmQsIGRvIE5PVCBydW4gaW4gZGVidWcgbW9kZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzc1Cittc2dpZCAiQXNzdW1lIHdlIGFyZSB0aGUgb25seSBESENQIHNlcnZlciBvbiB0aGUgbG9jYWwgbmV0d29yay4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgd2hlcmUgdG8gc3RvcmUgREhDUCBsZWFzZXMgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzc3Cittc2dpZCAiUmV0dXJuIE1YIHJlY29yZHMgZm9yIGxvY2FsIGhvc3RzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNzgKK21zZ2lkICJTcGVjaWZ5IGFuIE1YIHJlY29yZC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzc5Cittc2dpZCAiU3BlY2lmeSBCT09UUCBvcHRpb25zIHRvIERIQ1Agc2VydmVyLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG8gTk9UIHBvbGwgJXMgZmlsZSwgcmVsb2FkIG9ubHkgb24gU0lHSFVQLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozODEKK21zZ2lkICJEbyBOT1QgY2FjaGUgZmFpbGVkIHNlYXJjaCByZXN1bHRzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNlIG5hbWVzZXJ2ZXJzIHN0cmljdGx5IGluIHRoZSBvcmRlciBnaXZlbiBpbiAlcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzgzCittc2dpZCAiU3BlY2lmeSBvcHRpb25zIHRvIGJlIHNlbnQgdG8gREhDUCBjbGllbnRzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozODQKK21zZ2lkICJESENQIG9wdGlvbiBzZW50IGV2ZW4gaWYgdGhlIGNsaWVudCBkb2VzIG5vdCByZXF1ZXN0IGl0LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozODUKK21zZ2lkICJTcGVjaWZ5IHBvcnQgdG8gbGlzdGVuIGZvciBETlMgcmVxdWVzdHMgb24gKGRlZmF1bHRzIHRvIDUzKS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gc3VwcG9ydGVkIFVEUCBwYWNrZXQgc2l6ZSBmb3IgRUROUy4wIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM4NworbXNnaWQgIkxvZyBETlMgcXVlcmllcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzg4Cittc2dpZCAiRm9yY2UgdGhlIG9yaWdpbmF0aW5nIHBvcnQgZm9yIHVwc3RyZWFtIEROUyBxdWVyaWVzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozODkKK21zZ2lkICJEbyBOT1QgcmVhZCByZXNvbHYuY29uZi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzkwCisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgcGF0aCB0byByZXNvbHYuY29uZiAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozOTEKK21zZ2lkICJTcGVjaWZ5IHBhdGggdG8gZmlsZSB3aXRoIHNlcnZlcj0gb3B0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozOTIKK21zZ2lkICJTcGVjaWZ5IGFkZHJlc3MoZXMpIG9mIHVwc3RyZWFtIHNlcnZlcnMgd2l0aCBvcHRpb25hbCBkb21haW5zLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozOTMKK21zZ2lkICJTcGVjaWZ5IGFkZHJlc3Mgb2YgdXBzdHJlYW0gc2VydmVycyBmb3IgcmV2ZXJzZSBhZGRyZXNzIHF1ZXJpZXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzk0Cittc2dpZCAiTmV2ZXIgZm9yd2FyZCBxdWVyaWVzIHRvIHNwZWNpZmllZCBkb21haW5zLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozOTUKK21zZ2lkICJTcGVjaWZ5IHRoZSBkb21haW4gdG8gYmUgYXNzaWduZWQgaW4gREhDUCBsZWFzZXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM5NgorbXNnaWQgIlNwZWNpZnkgZGVmYXVsdCB0YXJnZXQgaW4gYW4gTVggcmVjb3JkLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozOTcKK21zZ2lkICJTcGVjaWZ5IHRpbWUtdG8tbGl2ZSBpbiBzZWNvbmRzIGZvciByZXBsaWVzIGZyb20gL2V0Yy9ob3N0cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzk4Cittc2dpZCAiU3BlY2lmeSB0aW1lLXRvLWxpdmUgaW4gc2Vjb25kcyBmb3IgbmVnYXRpdmUgY2FjaGluZy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzk5Cittc2dpZCAiU3BlY2lmeSB0aW1lLXRvLWxpdmUgaW4gc2Vjb25kcyBmb3IgbWF4aW11bSBUVEwgdG8gc2VuZCB0byBjbGllbnRzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MDAKK21zZ2lkICJTcGVjaWZ5IHRpbWUtdG8tbGl2ZSBjZWlsaW5nIGZvciBjYWNoZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDAxCittc2dpZCAiU3BlY2lmeSB0aW1lLXRvLWxpdmUgZmxvb3IgZm9yIGNhY2hlLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hhbmdlIHRvIHRoaXMgdXNlciBhZnRlciBzdGFydHVwLiAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MDMKK21zZ2lkICJNYXAgREhDUCB2ZW5kb3IgY2xhc3MgdG8gdGFnLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MDQKK21zZ2lkICJEaXNwbGF5IGRuc21hc3EgdmVyc2lvbiBhbmQgY29weXJpZ2h0IGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MDUKK21zZ2lkICJUcmFuc2xhdGUgSVB2NCBhZGRyZXNzZXMgZnJvbSB1cHN0cmVhbSBzZXJ2ZXJzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MDYKK21zZ2lkICJTcGVjaWZ5IGEgU1JWIHJlY29yZC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDA3Cittc2dpZCAiRGlzcGxheSB0aGlzIG1lc3NhZ2UuIFVzZSAtLWhlbHAgZGhjcCBvciAtLWhlbHAgZGhjcDYgZm9yIGtub3duIERIQ1Agb3B0aW9ucy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDA4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgcGF0aCBvZiBQSUQgZmlsZSAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSBtYXhpbXVtIG51bWJlciBvZiBESENQIGxlYXNlcyAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MTAKK21zZ2lkICJBbnN3ZXIgRE5TIHF1ZXJpZXMgYmFzZWQgb24gdGhlIGludGVyZmFjZSBhIHF1ZXJ5IHdhcyBzZW50IHRvLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MTEKK21zZ2lkICJTcGVjaWZ5IFRYVCBETlMgcmVjb3JkLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MTIKK21zZ2lkICJTcGVjaWZ5IFBUUiBETlMgcmVjb3JkLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MTMKK21zZ2lkICJHaXZlIEROUyBuYW1lIHRvIElQdjQgYWRkcmVzcyBvZiBpbnRlcmZhY2UuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQxNAorbXNnaWQgIkJpbmQgb25seSB0byBpbnRlcmZhY2VzIGluIHVzZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlYWQgREhDUCBzdGF0aWMgaG9zdCBpbmZvcm1hdGlvbiBmcm9tICVzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MTYKK21zZ2lkICJFbmFibGUgdGhlIERCdXMgaW50ZXJmYWNlIGZvciBzZXR0aW5nIHVwc3RyZWFtIHNlcnZlcnMsIGV0Yy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDE3Cittc2dpZCAiRG8gbm90IHByb3ZpZGUgREhDUCBvbiB0aGlzIGludGVyZmFjZSwgb25seSBwcm92aWRlIEROUy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDE4Cittc2dpZCAiRW5hYmxlIGR5bmFtaWMgYWRkcmVzcyBhbGxvY2F0aW9uIGZvciBib290cC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDE5Cittc2dpZCAiTWFwIE1BQyBhZGRyZXNzICh3aXRoIHdpbGRjYXJkcykgdG8gb3B0aW9uIHNldC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDIwCittc2dpZCAiVHJlYXQgREhDUCByZXF1ZXN0cyBvbiBhbGlhc2VzIGFzIGFycml2aW5nIGZyb20gaW50ZXJmYWNlLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MjEKK21zZ2lkICJEaXNhYmxlIElDTVAgZWNobyBhZGRyZXNzIGNoZWNraW5nIGluIHRoZSBESENQIHNlcnZlci4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDIyCittc2dpZCAiU2hlbGwgc2NyaXB0IHRvIHJ1biBvbiBESENQIGxlYXNlIGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDIzCittc2dpZCAiTHVhIHNjcmlwdCB0byBydW4gb24gREhDUCBsZWFzZSBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQyNAorbXNnaWQgIlJ1biBsZWFzZS1jaGFuZ2Ugc2NyaXB0cyBhcyB0aGlzIHVzZXIuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQyNQorbXNnaWQgIkNhbGwgZGhjcC1zY3JpcHQgd2l0aCBjaGFuZ2VzIHRvIGxvY2FsIEFSUCB0YWJsZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDI2Cittc2dpZCAiUmVhZCBjb25maWd1cmF0aW9uIGZyb20gYWxsIHRoZSBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDI3Cittc2dpZCAiTG9nIHRvIHRoaXMgc3lzbG9nIGZhY2lsaXR5IG9yIGZpbGUuIChkZWZhdWx0cyB0byBEQUVNT04pIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQyOAorbXNnaWQgIkRvIG5vdCB1c2UgbGVhc2VmaWxlLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCBETlMgcXVlcmllcy4gKGRlZmF1bHRzIHRvICVzKSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xlYXIgRE5TIGNhY2hlIHdoZW4gcmVsb2FkaW5nICVzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzEKK21zZ2lkICJJZ25vcmUgaG9zdG5hbWVzIHByb3ZpZGVkIGJ5IERIQ1AgY2xpZW50cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDMyCittc2dpZCAiRG8gTk9UIHJldXNlIGZpbGVuYW1lIGFuZCBzZXJ2ZXIgZmllbGRzIGZvciBleHRyYSBESENQIG9wdGlvbnMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQzMworbXNnaWQgIkVuYWJsZSBpbnRlZ3JhdGVkIHJlYWQtb25seSBURlRQIHNlcnZlci4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDM0Cittc2dpZCAiRXhwb3J0IGZpbGVzIGJ5IFRGVFAgb25seSBmcm9tIHRoZSBzcGVjaWZpZWQgc3VidHJlZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDM1Cittc2dpZCAiQWRkIGNsaWVudCBJUCBvciBoYXJkd2FyZSBhZGRyZXNzIHRvIHRmdHAtcm9vdC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDM2Cittc2dpZCAiQWxsb3cgYWNjZXNzIG9ubHkgdG8gZmlsZXMgb3duZWQgYnkgdGhlIHVzZXIgcnVubmluZyBkbnNtYXNxLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzcKK21zZ2lkICJEbyBub3QgdGVybWluYXRlIHRoZSBzZXJ2aWNlIGlmIFRGVFAgZGlyZWN0b3JpZXMgYXJlIGluYWNjZXNzaWJsZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDM4CisjLCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgVEZUUCB0cmFuc2ZlcnMgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDM5Cittc2dpZCAiTWF4aW11bSBNVFUgdG8gdXNlIGZvciBURlRQIHRyYW5zZmVycy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQwCittc2dpZCAiRGlzYWJsZSB0aGUgVEZUUCBibG9ja3NpemUgZXh0ZW5zaW9uLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDEKK21zZ2lkICJDb252ZXJ0IFRGVFAgZmlsZW5hbWVzIHRvIGxvd2VyY2FzZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDIKK21zZ2lkICJFcGhlbWVyYWwgcG9ydCByYW5nZSBmb3IgdXNlIGJ5IFRGVFAgdHJhbnNmZXJzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDMKK21zZ2lkICJFeHRyYSBsb2dnaW5nIGZvciBESENQLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDQKK21zZ2lkICJFbmFibGUgYXN5bmMuIGxvZ2dpbmc7IG9wdGlvbmFsbHkgc2V0IHF1ZXVlIGxlbmd0aC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQ1Cittc2dpZCAiU3RvcCBETlMgcmViaW5kaW5nLiBGaWx0ZXIgcHJpdmF0ZSBJUCByYW5nZXMgd2hlbiByZXNvbHZpbmcuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ0NgorbXNnaWQgIkFsbG93IHJlYmluZGluZyBvZiAxMjcuMC4wLjAvOCwgZm9yIFJCTCBzZXJ2ZXJzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDcKK21zZ2lkICJJbmhpYml0IEROUy1yZWJpbmQgcHJvdGVjdGlvbiBvbiB0aGlzIGRvbWFpbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQ4Cittc2dpZCAiQWx3YXlzIHBlcmZvcm0gRE5TIHF1ZXJpZXMgdG8gYWxsIHNlcnZlcnMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ0OQorbXNnaWQgIlNldCB0YWcgaWYgY2xpZW50IGluY2x1ZGVzIG1hdGNoaW5nIG9wdGlvbiBpbiByZXF1ZXN0LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NTAKK21zZ2lkICJVc2UgYWx0ZXJuYXRpdmUgcG9ydHMgZm9yIERIQ1AuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1MQorbXNnaWQgIlNwZWNpZnkgTkFQVFIgRE5TIHJlY29yZC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDUyCittc2dpZCAiU3BlY2lmeSBsb3dlc3QgcG9ydCBhdmFpbGFibGUgZm9yIEROUyBxdWVyeSB0cmFuc21pc3Npb24uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1MworbXNnaWQgIlNwZWNpZnkgaGlnaGVzdCBwb3J0IGF2YWlsYWJsZSBmb3IgRE5TIHF1ZXJ5IHRyYW5zbWlzc2lvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDU0Cittc2dpZCAiVXNlIG9ubHkgZnVsbHkgcXVhbGlmaWVkIGRvbWFpbiBuYW1lcyBmb3IgREhDUCBjbGllbnRzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NTUKK21zZ2lkICJHZW5lcmF0ZSBob3N0bmFtZXMgYmFzZWQgb24gTUFDIGFkZHJlc3MgZm9yIG5hbWVsZXNzIGNsaWVudHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1NgorbXNnaWQgIlVzZSB0aGVzZSBESENQIHJlbGF5cyBhcyBmdWxsIHByb3hpZXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1NworbXNnaWQgIlJlbGF5IERIQ1AgcmVxdWVzdHMgdG8gYSByZW1vdGUgc2VydmVyIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1OAorbXNnaWQgIlNwZWNpZnkgYWxpYXMgbmFtZSBmb3IgTE9DQUwgRE5TIG5hbWUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1OQorbXNnaWQgIlByb21wdCB0byBzZW5kIHRvIFBYRSBjbGllbnRzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NjAKK21zZ2lkICJCb290IHNlcnZpY2UgZm9yIFBYRSBtZW51LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NjEKK21zZ2lkICJDaGVjayBjb25maWd1cmF0aW9uIHN5bnRheC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDYyCittc2dpZCAiQWRkIHJlcXVlc3RvcidzIE1BQyBhZGRyZXNzIHRvIGZvcndhcmRlZCBETlMgcXVlcmllcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDYzCittc2dpZCAiQWRkIHNwZWNpZmllZCBJUCBzdWJuZXQgdG8gZm9yd2FyZGVkIEROUyBxdWVyaWVzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NjQKK21zZ2lkICJBZGQgY2xpZW50IGlkZW50aWZpY2F0aW9uIHRvIGZvcndhcmRlZCBETlMgcXVlcmllcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDY1Cittc2dpZCAiUHJveHkgRE5TU0VDIHZhbGlkYXRpb24gcmVzdWx0cyBmcm9tIHVwc3RyZWFtIG5hbWVzZXJ2ZXJzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NjYKK21zZ2lkICJBdHRlbXB0IHRvIGFsbG9jYXRlIHNlcXVlbnRpYWwgSVAgYWRkcmVzc2VzIHRvIERIQ1AgY2xpZW50cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDY3Cittc2dpZCAiQ29weSBjb25uZWN0aW9uLXRyYWNrIG1hcmsgZnJvbSBxdWVyaWVzIHRvIHVwc3RyZWFtIGNvbm5lY3Rpb25zLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NjgKK21zZ2lkICJBbGxvdyBESENQIGNsaWVudHMgdG8gZG8gdGhlaXIgb3duIERETlMgdXBkYXRlcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDY5Cittc2dpZCAiU2VuZCByb3V0ZXItYWR2ZXJ0aXNlbWVudHMgZm9yIGludGVyZmFjZXMgZG9pbmcgREhDUHY2IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ3MAorbXNnaWQgIlNwZWNpZnkgRFVJRF9FTi10eXBlIERIQ1B2NiBzZXJ2ZXIgRFVJRCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NzEKK21zZ2lkICJTcGVjaWZ5IGhvc3QgKEEvQUFBQSBhbmQgUFRSKSByZWNvcmRzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ3MgorbXNnaWQgIlNwZWNpZnkgYXJiaXRyYXJ5IEROUyByZXNvdXJjZSByZWNvcmQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDczCittc2dpZCAiQmluZCB0byBpbnRlcmZhY2VzIGluIHVzZSAtIGNoZWNrIGZvciBuZXcgaW50ZXJmYWNlcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NzQKK21zZ2lkICJFeHBvcnQgbG9jYWwgbmFtZXMgdG8gZ2xvYmFsIEROUyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NzUKK21zZ2lkICJEb21haW4gdG8gZXhwb3J0IHRvIGdsb2JhbCBETlMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDc2Cittc2dpZCAiU2V0IFRUTCBmb3IgYXV0aG9yaXRhdGl2ZSByZXBsaWVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ3NworbXNnaWQgIlNldCBhdXRob3JpdGF0aXZlIHpvbmUgaW5mb3JtYXRpb24iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDc4Cittc2dpZCAiU2Vjb25kYXJ5IGF1dGhvcml0YXRpdmUgbmFtZXNlcnZlcnMgZm9yIGZvcndhcmQgZG9tYWlucyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NzkKK21zZ2lkICJQZWVycyB3aGljaCBhcmUgYWxsb3dlZCB0byBkbyB6b25lIHRyYW5zZmVyIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ4MAorbXNnaWQgIlNwZWNpZnkgaXBzZXRzIHRvIHdoaWNoIG1hdGNoaW5nIGRvbWFpbnMgc2hvdWxkIGJlIGFkZGVkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ4MQorbXNnaWQgIlNwZWNpZnkgYSBkb21haW4gYW5kIGFkZHJlc3MgcmFuZ2UgZm9yIHN5bnRoZXNpc2VkIG5hbWVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ4MgorbXNnaWQgIkFjdGl2YXRlIEROU1NFQyB2YWxpZGF0aW9uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ4MworbXNnaWQgIlNwZWNpZnkgdHJ1c3QgYW5jaG9yIGtleSBkaWdlc3QuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ4NAorbXNnaWQgIkRpc2FibGUgdXBzdHJlYW0gY2hlY2tpbmcgZm9yIEROU1NFQyBkZWJ1Z2dpbmcuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ4NQorbXNnaWQgIkVuc3VyZSBhbnN3ZXJzIHdpdGhvdXQgRE5TU0VDIGFyZSBpbiB1bnNpZ25lZCB6b25lcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDg2Cittc2dpZCAiRG9uJ3QgY2hlY2sgRE5TU0VDIHNpZ25hdHVyZSB0aW1lc3RhbXBzIHVudGlsIGZpcnN0IGNhY2hlLXJlbG9hZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0ODcKK21zZ2lkICJUaW1lc3RhbXAgZmlsZSB0byB2ZXJpZnkgc3lzdGVtIGNsb2NrIGZvciBETlNTRUMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDg5Cittc2dpZCAiU3BlY2lmeSBESENQdjYgcHJlZml4IGNsYXNzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ5MQorbXNnaWQgIlNldCBNVFUsIHByaW9yaXR5LCByZXNlbmQtaW50ZXJ2YWwgYW5kIHJvdXRlci1saWZldGltZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0OTIKK21zZ2lkICJEbyBub3QgbG9nIHJvdXRpbmUgREhDUC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDkzCittc2dpZCAiRG8gbm90IGxvZyByb3V0aW5lIERIQ1B2Ni4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDk0Cittc2dpZCAiRG8gbm90IGxvZyBSQS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDk1Cittc2dpZCAiQWNjZXB0IHF1ZXJpZXMgb25seSBmcm9tIGRpcmVjdGx5LWNvbm5lY3RlZCBuZXR3b3Jrcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDk2Cittc2dpZCAiRGV0ZWN0IGFuZCByZW1vdmUgRE5TIGZvcndhcmRpbmcgbG9vcHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ5NworbXNnaWQgIklnbm9yZSBETlMgcmVzcG9uc2VzIGNvbnRhaW5pbmcgaXBhZGRyLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0OTgKK21zZ2lkICJTZXQgVFRMIGluIEROUyByZXNwb25zZXMgd2l0aCBESENQLWRlcml2ZWQgYWRkcmVzc2VzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0OTkKK21zZ2lkICJEZWxheSBESENQIHJlcGxpZXMgZm9yIGF0IGxlYXN0IG51bWJlciBvZiBzZWNvbmRzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo3MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiBkbnNtYXNxIFtvcHRpb25zXVxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjcwNQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2Ugc2hvcnQgb3B0aW9ucyBvbmx5IG9uIHRoZSBjb21tYW5kIGxpbmUuXG4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NzA3CisjLCBjLWZvcm1hdAorbXNnaWQgIlZhbGlkIG9wdGlvbnMgYXJlOlxuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjc1NCBvcHRpb24uYzo4NjgKK21zZ2lkICJiYWQgYWRkcmVzcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo3Nzkgb3B0aW9uLmM6NzgzCittc2dpZCAiYmFkIHBvcnQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Nzk3IG9wdGlvbi5jOjgyNiBvcHRpb24uYzo4NjEKK21zZ2lkICJpbnRlcmZhY2UgYmluZGluZyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjgyMSBvcHRpb24uYzo4NTYKK21zZ2lkICJpbnRlcmZhY2UgY2FuIG9ubHkgYmUgc3BlY2lmaWVkIG9uY2UiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6ODM1IG9wdGlvbi5jOjM4MDAKK21zZ2lkICJiYWQgaW50ZXJmYWNlIG5hbWUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTA2MgorbXNnaWQgInVuc3VwcG9ydGVkIGVuY2Fwc3VsYXRpb24gZm9yIElQdjYgb3B0aW9uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjEwNzYKK21zZ2lkICJiYWQgZGhjcC1vcHRpb24iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTE0NAorbXNnaWQgImJhZCBJUCBhZGRyZXNzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjExNDcgb3B0aW9uLmM6MTI4NiBvcHRpb24uYzozMDcwCittc2dpZCAiYmFkIElQdjYgYWRkcmVzcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxMjQwCittc2dpZCAiYmFkIElQdjQgYWRkcmVzcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxMzEzIG9wdGlvbi5jOjE0MDcKK21zZ2lkICJiYWQgZG9tYWluIGluIGRoY3Atb3B0aW9uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE0NDUKK21zZ2lkICJkaGNwLW9wdGlvbiB0b28gbG9uZyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNDUyCittc2dpZCAiaWxsZWdhbCBkaGNwLW1hdGNoIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE1MTQKK21zZ2lkICJpbGxlZ2FsIHJlcGVhdGVkIGZsYWciCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTUyMgorbXNnaWQgImlsbGVnYWwgcmVwZWF0ZWQga2V5d29yZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNTkzIG9wdGlvbi5jOjQ0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGFjY2VzcyBkaXJlY3RvcnkgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE2MzkgdGZ0cC5jOjUzNworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgYWNjZXNzICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNzI3Cittc2dpZCAic2V0dGluZyBsb2cgZmFjaWxpdHkgaXMgbm90IHBvc3NpYmxlIHVuZGVyIEFuZHJvaWQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTczNgorbXNnaWQgImJhZCBsb2cgZmFjaWxpdHkiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTc4OQorbXNnaWQgImJhZCBNWCBwcmVmZXJlbmNlIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE3OTQKK21zZ2lkICJiYWQgTVggbmFtZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxODA4Cittc2dpZCAiYmFkIE1YIHRhcmdldCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxODIwCittc2dpZCAiY2Fubm90IHJ1biBzY3JpcHRzIHVuZGVyIHVDbGludXgiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTgyMgorbXNnaWQgInJlY29tcGlsZSB3aXRoIEhBVkVfU0NSSVBUIGRlZmluZWQgdG8gZW5hYmxlIGxlYXNlLWNoYW5nZSBzY3JpcHRzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE4MjYKK21zZ2lkICJyZWNvbXBpbGUgd2l0aCBIQVZFX0xVQVNDUklQVCBkZWZpbmVkIHRvIGVuYWJsZSBMdWEgc2NyaXB0cyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyMDk1IG9wdGlvbi5jOjIxMDYgb3B0aW9uLmM6MjE0MyBvcHRpb24uYzoyMTk5IG9wdGlvbi5jOjI0ODIKK21zZ2lkICJiYWQgcHJlZml4IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI1MDQKK21zZ2lkICJyZWNvbXBpbGUgd2l0aCBIQVZFX0lQU0VUIGRlZmluZWQgdG8gZW5hYmxlIGlwc2V0IGRpcmVjdGl2ZXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjcxMworbXNnaWQgImJhZCBwb3J0IHJhbmdlIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI3MzgKK21zZ2lkICJiYWQgYnJpZGdlLWludGVyZmFjZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNzk4Cittc2dpZCAib25seSBvbmUgdGFnIGFsbG93ZWQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjgxOCBvcHRpb24uYzoyODMwIG9wdGlvbi5jOjI5Mzkgb3B0aW9uLmM6Mjk0NCBvcHRpb24uYzoyOTgzCittc2dpZCAiYmFkIGRoY3AtcmFuZ2UiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjg0NQorbXNnaWQgImluY29uc2lzdGVudCBESENQIHJhbmdlIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5MDcKK21zZ2lkICJwcmVmaXggbGVuZ3RoIG11c3QgYmUgZXhhY3RseSA2NCBmb3IgUkEgc3VibmV0cyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyOTA5Cittc2dpZCAicHJlZml4IGxlbmd0aCBtdXN0IGJlIGV4YWN0bHkgNjQgZm9yIHN1Ym5ldCBjb25zdHJ1Y3RvcnMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjkxMworbXNnaWQgInByZWZpeCBsZW5ndGggbXVzdCBiZSBhdCBsZWFzdCA2NCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyOTE2Cittc2dpZCAiaW5jb25zaXN0ZW50IERIQ1B2NiByYW5nZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyOTI3Cittc2dpZCAicHJlZml4IG11c3QgYmUgemVybyB3aXRoIFwiY29uc3RydWN0b3I6XCIgYXJndW1lbnQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzA0MCBvcHRpb24uYzozMDg4Cittc2dpZCAiYmFkIGhleCBjb25zdGFudCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMDYyCittc2dpZCAiY2Fubm90IG1hdGNoIHRhZ3MgaW4gLS1kaGNwLWhvc3QiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzExMAorIywgYy1mb3JtYXQKK21zZ2lkICJkdXBsaWNhdGUgZGhjcC1ob3N0IElQIGFkZHJlc3MgJXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzE2OAorbXNnaWQgImJhZCBESENQIGhvc3QgbmFtZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMjUwCittc2dpZCAiYmFkIHRhZy1pZiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNjA3IG9wdGlvbi5jOjQwMzAKK21zZ2lkICJpbnZhbGlkIHBvcnQgbnVtYmVyIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM2NjkKK21zZ2lkICJiYWQgZGhjcC1wcm94eSBhZGRyZXNzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM2OTUKK21zZ2lkICJCYWQgZGhjcC1yZWxheSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNzM2Cittc2dpZCAiYmFkIFJBLXBhcmFtcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNzQ1Cittc2dpZCAiYmFkIERVSUQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzc4NworbXNnaWQgImludmFsaWQgYWxpYXMgcmFuZ2UiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzg0MSBvcHRpb24uYzozODUzCittc2dpZCAiYmFkIENOQU1FIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM4NTcKK21zZ2lkICJkdXBsaWNhdGUgQ05BTUUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzg4MAorbXNnaWQgImJhZCBQVFIgcmVjb3JkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM5MTEKK21zZ2lkICJiYWQgTkFQVFIgcmVjb3JkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM5NDUKK21zZ2lkICJiYWQgUlIgcmVjb3JkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM5NzUKK21zZ2lkICJiYWQgVFhUIHJlY29yZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MDE2Cittc2dpZCAiYmFkIFNSViByZWNvcmQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDAyMworbXNnaWQgImJhZCBTUlYgdGFyZ2V0IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQwMzcKK21zZ2lkICJpbnZhbGlkIHByaW9yaXR5IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQwNDAKK21zZ2lkICJpbnZhbGlkIHdlaWdodCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MDY0Cittc2dpZCAiQmFkIGhvc3QtcmVjb3JkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQwODgKK21zZ2lkICJCYWQgbmFtZSBpbiBob3N0LXJlY29yZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MTUzCittc2dpZCAiYmFkIHRydXN0IGFuY2hvciIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MTY3Cittc2dpZCAiYmFkIEhFWCBpbiB0cnVzdCBhbmNob3IiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDE3NworbXNnaWQgInVuc3VwcG9ydGVkIG9wdGlvbiAoY2hlY2sgdGhhdCBkbnNtYXNxIHdhcyBjb21waWxlZCB3aXRoIERIQ1AvVEZUUC9ETlNTRUMvREJ1cyBzdXBwb3J0KSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MjM3Cittc2dpZCAibWlzc2luZyBcIiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0Mjk0Cittc2dpZCAiYmFkIG9wdGlvbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0Mjk2Cittc2dpZCAiZXh0cmFuZW91cyBwYXJhbWV0ZXIiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDI5OAorbXNnaWQgIm1pc3NpbmcgcGFyYW1ldGVyIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQzMDAKK21zZ2lkICJpbGxlZ2FsIG9wdGlvbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzA3Cittc2dpZCAiZXJyb3IiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDMwOQorIywgYy1mb3JtYXQKK21zZ2lkICIgYXQgbGluZSAlZCBvZiAlcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzI0IG9wdGlvbi5jOjQ1NzEgb3B0aW9uLmM6NDYwNworIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkICVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQzODcgb3B0aW9uLmM6NDUxMCB0ZnRwLmM6NzE1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0Njc2Cittc2dpZCAianVuayBmb3VuZCBpbiBjb21tYW5kIGxpbmUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDcxMQorIywgYy1mb3JtYXQKK21zZ2lkICJEbnNtYXNxIHZlcnNpb24gJXMgICVzXG4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDcxMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ29tcGlsZSB0aW1lIG9wdGlvbnM6ICVzXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDcxMworIywgYy1mb3JtYXQKK21zZ2lkICJUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS5cbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkRuc21hc3EgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXRcbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NzE1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiBvciAzLlxuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ3MjYKK21zZ2lkICJ0cnkgLS1oZWxwIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ3MjgKK21zZ2lkICJ0cnkgLXciCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDczMAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29tbWFuZCBsaW5lIG9wdGlvbnM6ICVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ3OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ05BTUUgbG9vcCBpbnZvbHZpbmcgJXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDgzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZ2V0IGhvc3QtbmFtZTogJXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDg2MgorbXNnaWQgIm9ubHkgb25lIHJlc29sdi5jb25mIGZpbGUgYWxsb3dlZCBpbiBuby1wb2xsIG1vZGUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ4NzIKK21zZ2lkICJtdXN0IGhhdmUgZXhhY3RseSBvbmUgcmVzb2x2LmNvbmYgdG8gcmVhZCBkb21haW4gZnJvbS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDg3NSBuZXR3b3JrLmM6MTYxMiBkaGNwLmM6ODE2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0ODkyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNlYXJjaCBkaXJlY3RpdmUgZm91bmQgaW4gJXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDkxMworbXNnaWQgInRoZXJlIG11c3QgYmUgYSBkZWZhdWx0IGRvbWFpbiB3aGVuIC0tZGhjcC1mcWRuIGlzIHNldCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0OTIyCittc2dpZCAic3ludGF4IGNoZWNrIE9LIgorbXNnc3RyICIiCisKKyM6IGZvcndhcmQuYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNlbmQgcGFja2V0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBmb3J3YXJkLmM6NTk3Cittc2dpZCAiZGlzY2FyZGluZyBETlMgcmVwbHk6IHN1Ym5ldCBvcHRpb24gbWlzbWF0Y2giCittc2dzdHIgIiIKKworIzogZm9yd2FyZC5jOjY1MQorIywgYy1mb3JtYXQKK21zZ2lkICJuYW1lc2VydmVyICVzIHJlZnVzZWQgdG8gZG8gYSByZWN1cnNpdmUgcXVlcnkiCittc2dzdHIgIiIKKworIzogZm9yd2FyZC5jOjY4MworIywgYy1mb3JtYXQKK21zZ2lkICJwb3NzaWJsZSBETlMtcmViaW5kIGF0dGFjayBkZXRlY3RlZDogJXMiCittc2dzdHIgIiIKKworIzogZm9yd2FyZC5jOjEyNDQgZm9yd2FyZC5jOjE2ODEKK21zZ2lkICJJZ25vcmluZyBxdWVyeSBmcm9tIG5vbi1sb2NhbCBuZXR3b3JrIgorbXNnc3RyICIiCisKKyM6IGZvcndhcmQuYzoyMTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgRE5TIHF1ZXJpZXMgcmVhY2hlZCAobWF4OiAlZCkiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjcyMAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGxpc3RlbmluZyBzb2NrZXQgZm9yICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6MTAzMQorIywgYy1mb3JtYXQKK21zZ2lkICJMT1VEIFdBUk5JTkc6IGxpc3RlbmluZyBvbiAlcyBtYXkgYWNjZXB0IHJlcXVlc3RzIHZpYSBpbnRlcmZhY2VzIG90aGVyIHRoYW4gJXMiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjEwMzgKK21zZ2lkICJMT1VEIFdBUk5JTkc6IHVzZSAtLWJpbmQtZHluYW1pYyByYXRoZXIgdGhhbiAtLWJpbmQtaW50ZXJmYWNlcyB0byBhdm9pZCBETlMgYW1wbGlmaWNhdGlvbiBhdHRhY2tzIHZpYSB0aGVzZSBpbnRlcmZhY2UocykiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjEwNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogdXNpbmcgaW50ZXJmYWNlICVzIGluc3RlYWQiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjEwNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogbm8gYWRkcmVzc2VzIGZvdW5kIGZvciBpbnRlcmZhY2UgJXMiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjExMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW50ZXJmYWNlICVzIGZhaWxlZCB0byBqb2luIERIQ1B2NiBtdWx0aWNhc3QgZ3JvdXA6ICVzIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxMTE5Cittc2dpZCAidHJ5IGluY3JlYXNpbmcgL3Byb2Mvc3lzL25ldC9jb3JlL29wdG1lbV9tYXgiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjEzMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGJpbmQgc2VydmVyIHNvY2tldCBmb3IgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxNTE3CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIG5hbWVzZXJ2ZXIgJXMgLSBsb2NhbCBpbnRlcmZhY2UiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjE1MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgbmFtZXNlcnZlciAlcyAtIGNhbm5vdCBtYWtlL2JpbmQgc29ja2V0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6MTU0OAorbXNnaWQgIihubyBETlNTRUMpIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxNTUxCittc2dpZCAidW5xdWFsaWZpZWQiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjE1NTEKK21zZ2lkICJuYW1lcyIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6MTU1MworbXNnaWQgImRlZmF1bHQiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjE1NTUKK21zZ2lkICJkb21haW4iCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjE1NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgbG9jYWwgYWRkcmVzc2VzIG9ubHkgZm9yICVzICVzIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxNTY0CisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIHN0YW5kYXJkIG5hbWVzZXJ2ZXJzIGZvciAlcyAlcyIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6MTU2NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyBuYW1lc2VydmVyICVzIyVkIGZvciAlcyAlcyAlcyIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6MTU3MAorIywgYy1mb3JtYXQKK21zZ2lkICJOT1QgdXNpbmcgbmFtZXNlcnZlciAlcyMlZCAtIHF1ZXJ5IGxvb3AgZGV0ZWN0ZWQiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjE1NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgbmFtZXNlcnZlciAlcyMlZCh2aWEgJXMpIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxNTc1CisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIG5hbWVzZXJ2ZXIgJXMjJWQiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjE1ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgJWQgbW9yZSBsb2NhbCBhZGRyZXNzZXMiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjE1ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgJWQgbW9yZSBuYW1lc2VydmVycyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTY2Cittc2dpZCAiZGhjcC1ob3N0c2RpciwgZGhjcC1vcHRzZGlyIGFuZCBob3N0c2RpciBhcmUgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxODEKK21zZ2lkICJubyByb290IHRydXN0IGFuY2hvciBwcm92aWRlZCBmb3IgRE5TU0VDIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxODQKK21zZ2lkICJjYW5ub3QgcmVkdWNlIGNhY2hlIHNpemUgZnJvbSBkZWZhdWx0IHdoZW4gRE5TU0VDIGVuYWJsZWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjE4NgorbXNnaWQgIkROU1NFQyBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9ETlNTRUMgaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxOTIKK21zZ2lkICJURlRQIHNlcnZlciBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9URlRQIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTk3Cittc2dpZCAiY2Fubm90IHVzZSAtLWNvbm50cmFjayBBTkQgLS1xdWVyeS1wb3J0IgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoyMDAKK21zZ2lkICJjb25udHJhY2sgc3VwcG9ydCBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9DT05OVFJBQ0sgaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoyMDUKK21zZ2lkICJhc3luY2hyb25vdXMgbG9nZ2luZyBpcyBub3QgYXZhaWxhYmxlIHVuZGVyIFNvbGFyaXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjIxMAorbXNnaWQgImFzeW5jaHJvbm91cyBsb2dnaW5nIGlzIG5vdCBhdmFpbGFibGUgdW5kZXIgQW5kcm9pZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MjE1Cittc2dpZCAiYXV0aG9yaXRhdGl2ZSBETlMgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfQVVUSCBpbiBzcmMvY29uZmlnLmgiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjIyMAorbXNnaWQgImxvb3AgZGV0ZWN0aW9uIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0xPT1AgaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoyMjcKK21zZ2lkICJtYXhfcG9ydCBjYW5ub3QgYmUgc21hbGxlciB0aGFuIG1pbl9wb3J0IgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoyMzQKK21zZ2lkICJ6b25lIHNlcmlhbCBtdXN0IGJlIGNvbmZpZ3VyZWQgaW4gLS1hdXRoLXNvYSIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MjUyCittc2dpZCAiZGhjcC1yYW5nZSBjb25zdHJ1Y3RvciBub3QgYXZhaWxhYmxlIG9uIHRoaXMgcGxhdGZvcm0iCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjI5OAorbXNnaWQgImNhbm5vdCBzZXQgLS1iaW5kLWludGVyZmFjZXMgYW5kIC0tYmluZC1keW5hbWljIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmQgbGlzdCBvZiBpbnRlcmZhY2VzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MzEwCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gaW50ZXJmYWNlICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzozNzQgZG5zbWFzcS5jOjEwMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiREJ1cyBlcnJvcjogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjM3NworbXNnaWQgIkRCdXMgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfREJVUyBpbiBzcmMvY29uZmlnLmgiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHVzZXIgb3IgZ3JvdXA6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo0NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZGlyIHRvIGZpbGVzeXN0ZW0gcm9vdDogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjcxNgorIywgYy1mb3JtYXQKK21zZ2lkICJzdGFydGVkLCB2ZXJzaW9uICVzIEROUyBkaXNhYmxlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzIwCisjLCBjLWZvcm1hdAorbXNnaWQgInN0YXJ0ZWQsIHZlcnNpb24gJXMgY2FjaGVzaXplICVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RhcnRlZCwgdmVyc2lvbiAlcyBjYWNoZSBkaXNhYmxlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzI1Cittc2dpZCAiRE5TIHNlcnZpY2UgbGltaXRlZCB0byBsb2NhbCBzdWJuZXRzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tcGlsZSB0aW1lIG9wdGlvbnM6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3MzQKK21zZ2lkICJEQnVzIHN1cHBvcnQgZW5hYmxlZDogY29ubmVjdGVkIHRvIHN5c3RlbSBidXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjczNgorbXNnaWQgIkRCdXMgc3VwcG9ydCBlbmFibGVkOiBidXMgY29ubmVjdGlvbiBwZW5kaW5nIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3NTQKK21zZ2lkICJETlNTRUMgdmFsaWRhdGlvbiBlbmFibGVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3NTgKK21zZ2lkICJETlNTRUMgc2lnbmF0dXJlIHRpbWVzdGFtcHMgbm90IGNoZWNrZWQgdW50aWwgZmlyc3QgY2FjaGUgcmVsb2FkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3NjEKK21zZ2lkICJETlNTRUMgc2lnbmF0dXJlIHRpbWVzdGFtcHMgbm90IGNoZWNrZWQgdW50aWwgc3lzdGVtIHRpbWUgdmFsaWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjc2NgorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBmYWlsZWQgdG8gY2hhbmdlIG93bmVyIG9mICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzcwCittc2dpZCAic2V0dGluZyAtLWJpbmQtaW50ZXJmYWNlcyBvcHRpb24gYmVjYXVzZSBvZiBPUyBsaW1pdGF0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzgyCisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGludGVyZmFjZSAlcyBkb2VzIG5vdCBjdXJyZW50bHkgZXhpc3QiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjc4NworbXNnaWQgIndhcm5pbmc6IGlnbm9yaW5nIHJlc29sdi1maWxlIGZsYWcgYmVjYXVzZSBuby1yZXNvbHYgaXMgc2V0IgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3OTAKK21zZ2lkICJ3YXJuaW5nOiBubyB1cHN0cmVhbSBzZXJ2ZXJzIGNvbmZpZ3VyZWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjc5NAorIywgYy1mb3JtYXQKK21zZ2lkICJhc3luY2hyb25vdXMgbG9nZ2luZyBlbmFibGVkLCBxdWV1ZSBsaW1pdCBpcyAlZCBtZXNzYWdlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6ODE1Cittc2dpZCAiSVB2NiByb3V0ZXIgYWR2ZXJ0aXNlbWVudCBlbmFibGVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo4MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCwgc29ja2V0cyBib3VuZCBleGNsdXNpdmVseSB0byBpbnRlcmZhY2UgJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjgzNAorbXNnaWQgInJvb3QgaXMgIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo4MzQKK21zZ2lkICJlbmFibGVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo4MzYKK21zZ2lkICJzZWN1cmUgbW9kZSIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6ODM5CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6ICVzIGluYWNjZXNzaWJsZSIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6ODQzCisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IFRGVFAgZGlyZWN0b3J5ICVzIGluYWNjZXNzaWJsZSIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6ODY5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlc3RyaWN0aW5nIG1heGltdW0gc2ltdWx0YW5lb3VzIFRGVFAgdHJhbnNmZXJzIHRvICVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxMDM5Cittc2dpZCAiY29ubmVjdGVkIHRvIHN5c3RlbSBEQnVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxMTg5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmb3JrIGludG8gYmFja2dyb3VuZDogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjExOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBoZWxwZXI6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxMTk1CisjLCBjLWZvcm1hdAorbXNnaWQgInNldHRpbmcgY2FwYWJpbGl0aWVzIGZhaWxlZDogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjExOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNoYW5nZSB1c2VyLWlkIHRvICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTIwMQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY2hhbmdlIGdyb3VwLWlkIHRvICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTIwNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiBwaWRmaWxlICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTIwNworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiBsb2cgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxMjEwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2FkIEx1YSBzY3JpcHQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxMjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIlRGVFAgZGlyZWN0b3J5ICVzIGluYWNjZXNzaWJsZTogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjEyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSB0aW1lc3RhbXAgZmlsZSAlczogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjEyMzkKK21zZ2lkICJub3cgY2hlY2tpbmcgRE5TU0VDIHNpZ25hdHVyZSB0aW1lc3RhbXBzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxMzA3CisjLCBjLWZvcm1hdAorbXNnaWQgInNjcmlwdCBwcm9jZXNzIGtpbGxlZCBieSBzaWduYWwgJWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjEzMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAic2NyaXB0IHByb2Nlc3MgZXhpdGVkIHdpdGggc3RhdHVzICVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxMzE1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBleGVjdXRlICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTM3OSBkbnNzZWMuYzo0NzkgZG5zc2VjLmM6NTI1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB1cGRhdGUgbXRpbWUgb24gJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxMzg2Cittc2dpZCAiZXhpdGluZyBvbiByZWNlaXB0IG9mIFNJR1RFUk0iCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjE0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGFjY2VzcyAlczogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjE0NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZGluZyAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzZXJ2ZXJzIGZvdW5kIGluICVzLCB3aWxsIHJldHJ5IgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzo1MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIERIQ1Agc29ja2V0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNldCBvcHRpb25zIG9uIERIQ1Agc29ja2V0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNldCBTT19SRVVTRXtBRERSfFBPUlR9IG9uIERIQ1Agc29ja2V0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6MTAxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBiaW5kIERIQ1Agc2VydmVyIHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIElDTVAgcmF3IHNvY2tldDogJXMuIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzoyNTIgZGhjcDYuYzoxNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBpbnRlcmZhY2UgJXMgaW4gYnJpZGdlLWludGVyZmFjZSIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6MjkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcGFja2V0IHJlY2VpdmVkIG9uICVzIHdoaWNoIGhhcyBubyBhZGRyZXNzIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzo0MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQVJQLWNhY2hlIGluamVjdGlvbiBmYWlsZWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzo0NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igc2VuZGluZyBESENQIHBhY2tldCB0byAlczogJXMiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjUzMQorIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHJhbmdlICVzIC0tICVzIGlzIG5vdCBjb25zaXN0ZW50IHdpdGggbmV0bWFzayAlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6ODU0CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBsaW5lIGF0ICVzIGxpbmUgJWQiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjg5NworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyAlcyBsaW5lICVkLCBkdXBsaWNhdGUgbmFtZSBvciBJUCBhZGRyZXNzIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzoxMDQxIHJmYzMzMTUuYzoyMTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcmVsYXkgJXMgLT4gJXMiCittc2dzdHIgIiIKKworIzogbGVhc2UuYzo5OAorbXNnaWQgInRvbyBtYW55IHN0b3JlZCBsZWFzZXMiCittc2dzdHIgIiIKKworIzogbGVhc2UuYzoxNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gb3IgY3JlYXRlIGxlYXNlIGZpbGUgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGxlYXNlLmM6MTc1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSBsZWFzZSBkYXRhYmFzZSwgaW52YWxpZCBsaW5lOiAlcyAlcyAlcyAlcyAuLi4iCittc2dzdHIgIiIKKworIzogbGVhc2UuYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgbGVhc2UgZmlsZSAlczogJXMiCittc2dzdHIgIiIKKworIzogbGVhc2UuYzoxOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJ1biBsZWFzZS1pbml0IHNjcmlwdCAlczogJXMiCittc2dzdHIgIiIKKworIzogbGVhc2UuYzoyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAibGVhc2UtaW5pdCBzY3JpcHQgcmV0dXJuZWQgZXhpdCBjb2RlICVzIgorbXNnc3RyICIiCisKKyM6IGxlYXNlLmM6MzczCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSAlczogJXMgKHJldHJ5IGluICV1cykiCittc2dzdHIgIiIKKworIzogbGVhc2UuYzo5MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSWdub3JpbmcgZG9tYWluICVzIGZvciBESENQIGhvc3QgbmFtZSAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGFkZHJlc3MgcmFuZ2UgYXZhaWxhYmxlIGZvciBESENQIHJlcXVlc3QgJXMgJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjM0OAorbXNnaWQgIndpdGggc3VibmV0IHNlbGVjdG9yIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzozNDgKK21zZ2lkICJ2aWEiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjM2MAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBhdmFpbGFibGUgREhDUCBzdWJuZXQ6ICVzLyVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzozNjMgcmZjMzMxNS5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBhdmFpbGFibGUgREhDUCByYW5nZTogJXMgLS0gJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjQ3NAorIywgYy1mb3JtYXQKK21zZ2lkICIldSB2ZW5kb3IgY2xhc3M6ICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgdXNlciBjbGFzczogJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjUxMAorbXNnaWQgImRpc2FibGVkIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo1NTEgcmZjMjEzMS5jOjEwMDYgcmZjMjEzMS5jOjE0MzAgcmZjMzMxNS5jOjYxNiByZmMzMzE1LmM6ODY5CisjOiByZmMzMzE1LmM6MTE0OAorbXNnaWQgImlnbm9yZWQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjU2NiByZmMyMTMxLmM6MTIzOSByZmMzMzE1LmM6OTE5Cittc2dpZCAiYWRkcmVzcyBpbiB1c2UiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjU4MCByZmMyMTMxLmM6MTA2MAorbXNnaWQgIm5vIGFkZHJlc3MgYXZhaWxhYmxlIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo1ODcgcmZjMjEzMS5jOjEyMDIKK21zZ2lkICJ3cm9uZyBuZXR3b3JrIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo2MDIKK21zZ2lkICJubyBhZGRyZXNzIGNvbmZpZ3VyZWQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjYwOCByZmMyMTMxLmM6MTI1MgorbXNnaWQgIm5vIGxlYXNlcyBsZWZ0IgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo3MDMgcmZjMzMxNS5jOjQ4MgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBjbGllbnQgcHJvdmlkZXMgbmFtZTogJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjgwOAorbXNnaWQgIlBYRSBCSVMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6OTc0IHJmYzMzMTUuYzoxMjQyCisjLCBjLWZvcm1hdAorbXNnaWQgImRpc2FibGluZyBESENQIHN0YXRpYyBhZGRyZXNzICVzIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6OTk1Cittc2dpZCAidW5rbm93biBsZWFzZSIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTAyOQorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgdXNpbmcgY29uZmlndXJlZCBhZGRyZXNzICVzIGJlY2F1c2UgaXQgaXMgbGVhc2VkIHRvICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxMDM5CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCB1c2luZyBjb25maWd1cmVkIGFkZHJlc3MgJXMgYmVjYXVzZSBpdCBpcyBpbiB1c2UgYnkgdGhlIHNlcnZlciBvciByZWxheSIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTA0MgorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgdXNpbmcgY29uZmlndXJlZCBhZGRyZXNzICVzIGJlY2F1c2UgaXQgd2FzIHByZXZpb3VzbHkgZGVjbGluZWQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjEwNTggcmZjMjEzMS5jOjEyNDUKK21zZ2lkICJubyB1bmlxdWUtaWQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjExNDAKK21zZ2lkICJ3cm9uZyBzZXJ2ZXItSUQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjExNTkKK21zZ2lkICJ3cm9uZyBhZGRyZXNzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxMTc3IHJmYzMzMTUuYzoxMDE1Cittc2dpZCAibGVhc2Ugbm90IGZvdW5kIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxMjEwCittc2dpZCAiYWRkcmVzcyBub3QgYXZhaWxhYmxlIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxMjIxCittc2dpZCAic3RhdGljIGxlYXNlIGF2YWlsYWJsZSIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTIyNQorbXNnaWQgImFkZHJlc3MgcmVzZXJ2ZWQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjEyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWJhbmRvbmluZyBsZWFzZSB0byAlcyBvZiAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTc1NworIywgYy1mb3JtYXQKK21zZ2lkICIldSBib290ZmlsZSBuYW1lOiAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTc2NgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBzZXJ2ZXIgbmFtZTogJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjE3NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgbmV4dCBzZXJ2ZXI6ICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxNzc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJyb2FkY2FzdCByZXNwb25zZSIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTg0MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc2VuZCBESENQL0JPT1RQIG9wdGlvbiAlZDogbm8gc3BhY2UgbGVmdCBpbiBwYWNrZXQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjIxMzEKK21zZ2lkICJQWEUgbWVudSB0b28gbGFyZ2UiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjIyNzAgcmZjMzMxNS5jOjE1MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgcmVxdWVzdGVkIG9wdGlvbnM6ICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoyNTg3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzZW5kIFJGQzM5MjUgb3B0aW9uOiB0b28gbWFueSBvcHRpb25zIGZvciBlbnRlcnByaXNlIG51bWJlciAlZCIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MjY1MAorIywgYy1mb3JtYXQKK21zZ2lkICIldSByZXBseSBkZWxheTogJWQiCittc2dzdHIgIiIKKworIzogbmV0bGluay5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgbmV0bGluayBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IG5ldGxpbmsuYzozNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV0bGluayByZXR1cm5zIGVycm9yOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkYnVzLmM6MTg2Cittc2dpZCAiYXR0ZW1wdCB0byBzZXQgYW4gSVB2NiBzZXJ2ZXIgYWRkcmVzcyB2aWEgREJ1cyAtIG5vIElQdjYgc3VwcG9ydCIKK21zZ3N0ciAiIgorCisjOiBkYnVzLmM6NDM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkVuYWJsaW5nIC0tJXMgb3B0aW9uIGZyb20gRC1CdXMiCittc2dzdHIgIiIKKworIzogZGJ1cy5jOjQ0NAorIywgYy1mb3JtYXQKK21zZ2lkICJEaXNhYmxpbmcgLS0lcyBvcHRpb24gZnJvbSBELUJ1cyIKK21zZ3N0ciAiIgorCisjOiBkYnVzLmM6NjkwCittc2dpZCAic2V0dGluZyB1cHN0cmVhbSBzZXJ2ZXJzIGZyb20gREJ1cyIKK21zZ3N0ciAiIgorCisjOiBkYnVzLmM6NzM3Cittc2dpZCAiY291bGQgbm90IHJlZ2lzdGVyIGEgREJ1cyBtZXNzYWdlIGhhbmRsZXIiCittc2dzdHIgIiIKKworIzogYnBmLmM6MjY1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgREhDUCBCUEYgc29ja2V0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBicGYuYzoyOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCByZXF1ZXN0IGZvciB1bnN1cHBvcnRlZCBoYXJkd2FyZSB0eXBlICglZCkgcmVjZWl2ZWQgb24gJXMiCittc2dzdHIgIiIKKworIzogYnBmLmM6Mzc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgUEZfUk9VVEUgc29ja2V0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBicGYuYzozOTkKK21zZ2lkICJVbmtub3duIHByb3RvY29sIHZlcnNpb24gZnJvbSByb3V0ZSBzb2NrZXQiCittc2dzdHIgIiIKKworIzogaGVscGVyLmM6MTUzCittc2dpZCAibGVhc2UoKSBmdW5jdGlvbiBtaXNzaW5nIGluIEx1YSBzY3JpcHQiCittc2dzdHIgIiIKKworIzogdGZ0cC5jOjMxOQorbXNnaWQgInVuYWJsZSB0byBnZXQgZnJlZSBwb3J0IGZvciBURlRQIgorbXNnc3RyICIiCisKKyM6IHRmdHAuYzozMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5zdXBwb3J0ZWQgcmVxdWVzdCBmcm9tICVzIgorbXNnc3RyICIiCisKKyM6IHRmdHAuYzo0ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmlsZSAlcyBub3QgZm91bmQiCittc2dzdHIgIiIKKworIzogdGZ0cC5jOjU5MgorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciAlZCAlcyByZWNlaXZlZCBmcm9tICVzIgorbXNnc3RyICIiCisKKyM6IHRmdHAuYzo2MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHNlbmRpbmcgJXMgdG8gJXMiCittc2dzdHIgIiIKKworIzogdGZ0cC5jOjYzNAorIywgYy1mb3JtYXQKK21zZ2lkICJzZW50ICVzIHRvICVzIgorbXNnc3RyICIiCisKKyM6IGxvZy5jOjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICJvdmVyZmxvdzogJWQgbG9nIGVudHJpZXMgbG9zdCIKK21zZ3N0ciAiIgorCisjOiBsb2cuYzoyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9nIGZhaWxlZDogJXMiCittc2dzdHIgIiIKKworIzogbG9nLmM6NDcxCittc2dpZCAiRkFJTEVEIHRvIHN0YXJ0IHVwIgorbXNnc3RyICIiCisKKyM6IGNvbm50cmFjay5jOjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbm50cmFjayBjb25uZWN0aW9uIG1hcmsgcmV0cmlldmFsIGZhaWxlZDogJXMiCittc2dzdHIgIiIKKworIzogZGhjcDYuYzo1MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIERIQ1B2NiBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGRoY3A2LmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNldCBTT19SRVVTRXtBRERSfFBPUlR9IG9uIERIQ1B2NiBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGRoY3A2LmM6ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGJpbmQgREhDUHY2IHNlcnZlciBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzMzMTUuYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYWRkcmVzcyByYW5nZSBhdmFpbGFibGUgZm9yIERIQ1B2NiByZXF1ZXN0IGZyb20gcmVsYXkgYXQgJXMiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjE2NgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBhZGRyZXNzIHJhbmdlIGF2YWlsYWJsZSBmb3IgREhDUHY2IHJlcXVlc3QgdmlhICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzMzMTUuYzozMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYXZhaWxhYmxlIERIQ1B2NiBzdWJuZXQ6ICVzLyVkIgorbXNnc3RyICIiCisKKyM6IHJmYzMzMTUuYzozODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgdmVuZG9yIGNsYXNzOiAldSIKK21zZ3N0ciAiIgorCisjOiByZmMzMzE1LmM6NDM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGNsaWVudCBNQUMgYWRkcmVzczogJXMiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjY3MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHByZWZpeC1jbGFzcyAlZCIKK21zZ3N0ciAiIgorCisjOiByZmMzMzE1LmM6ODE2IHJmYzMzMTUuYzo5MTEKK21zZ2lkICJhZGRyZXNzIHVuYXZhaWxhYmxlIgorbXNnc3RyICIiCisKKyM6IHJmYzMzMTUuYzo4MjggcmZjMzMxNS5jOjk1OSByZmMzMzE1LmM6MTI5MgorbXNnaWQgInN1Y2Nlc3MiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjg0MyByZmMzMzE1LmM6ODUyIHJmYzMzMTUuYzo5NjcgcmZjMzMxNS5jOjk2OQorbXNnaWQgIm5vIGFkZHJlc3NlcyBhdmFpbGFibGUiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjk0NgorbXNnaWQgIm5vdCBvbiBsaW5rIgorbXNnc3RyICIiCisKKyM6IHJmYzMzMTUuYzoxMDE5IHJmYzMzMTUuYzoxMjA0IHJmYzMzMTUuYzoxMjgxCittc2dpZCAibm8gYmluZGluZyBmb3VuZCIKK21zZ3N0ciAiIgorCisjOiByZmMzMzE1LmM6MTA1NworbXNnaWQgImRlcHJlY2F0ZWQiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjEwNjIKK21zZ2lkICJhZGRyZXNzIGludmFsaWQiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjExMDkKK21zZ2lkICJjb25maXJtIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiByZmMzMzE1LmM6MTEyNQorbXNnaWQgImFsbCBhZGRyZXNzZXMgc3RpbGwgb24gbGluayIKK21zZ3N0ciAiIgorCisjOiByZmMzMzE1LmM6MTIxMworbXNnaWQgInJlbGVhc2UgcmVjZWl2ZWQiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjIxNDAKK21zZ2lkICJDYW5ub3QgbXVsdGljYXN0IHRvIERIQ1B2NiBzZXJ2ZXIgd2l0aG91dCBjb3JyZWN0IGludGVyZmFjZSIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjE0NQorIywgYy1mb3JtYXQKK21zZ2lkICJJZ25vcmluZyBkdXBsaWNhdGUgZGhjcC1vcHRpb24gJWQiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzoyMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgdGFnczogJXMiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIG1vcmUgdGhhbiBvbmUgYWRkcmVzcyBpbiBob3N0c2ZpbGUsIHVzaW5nICVzIGZvciBESENQIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6NDMwCisjLCBjLWZvcm1hdAorbXNnaWQgImR1cGxpY2F0ZSBJUCBhZGRyZXNzICVzICglcykgaW4gZGhjcC1jb25maWcgZGlyZWN0aXZlIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6NDk0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZXQgU09fQklORFRPREVWSUNFIG9uIERIQ1Agc29ja2V0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjYxNQorIywgYy1mb3JtYXQKK21zZ2lkICJLbm93biBESENQIG9wdGlvbnM6XG4iCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo2MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiS25vd24gREhDUHY2IG9wdGlvbnM6XG4iCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo4MjMKK21zZ2lkICIsIHByZWZpeCBkZXByZWNhdGVkIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6ODI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiwgbGVhc2UgdGltZSAiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo4NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgc3RhdGVsZXNzIG9uICVzJS4wcyUuMHMlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjg3MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgc3RhdGljIGxlYXNlcyBvbmx5IG9uICUuMHMlcyVzJS4wcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjg3MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgcHJveHkgb24gc3VibmV0ICUuMHMlcyUuMHMlLjBzIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6ODczCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCBJUCByYW5nZSAlcyAtLSAlcyVzJS4wcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjg4NgorIywgYy1mb3JtYXQKK21zZ2lkICJESENQdjQtZGVyaXZlZCBJUHY2IG5hbWVzIG9uICVzJXMiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo4ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAicm91dGVyIGFkdmVydGlzZW1lbnQgb24gJXMlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjkwMAorIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHJlbGF5IGZyb20gJXMgdG8gJXMgdmlhICVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6OTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcmVsYXkgZnJvbSAlcyB0byAlcyIKK21zZ3N0ciAiIgorCisjOiByYWR2LmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgSUNNUHY2IHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogYXV0aC5jOjQ0OQorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyB6b25lIHRyYW5zZmVyIHJlcXVlc3QgZnJvbSAlcyIKK21zZ3N0ciAiIgorCisjOiBpcHNldC5jOjk1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmaW5kIGtlcm5lbCB2ZXJzaW9uOiAlcyIKK21zZ3N0ciAiIgorCisjOiBpcHNldC5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIElQc2V0IGNvbnRyb2wgc29ja2V0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBpcHNldC5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdXBkYXRlIGlwc2V0ICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNzZWMuYzo1MjcKK21zZ2lkICJzeXN0ZW0gdGltZSBjb25zaWRlcmVkIHZhbGlkLCBub3cgY2hlY2tpbmcgRE5TU0VDIHNpZ25hdHVyZSB0aW1lc3RhbXBzLiIKK21zZ3N0ciAiIgorCisjOiBibG9ja2RhdGEuYzo1OAorIywgYy1mb3JtYXQKK21zZ2lkICJETlNTRUMgbWVtb3J5IGluIHVzZSAldSwgbWF4ICV1LCBhbGxvY2F0ZWQgJXUiCittc2dzdHIgIiIKKworIzogdGFibGVzLmM6NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGFjY2VzcyBwZiBkZXZpY2VzOiAlcyIKK21zZ3N0ciAiIgorCisjOiB0YWJsZXMuYzo3NAorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBubyBvcGVuZWQgcGYgZGV2aWNlcyAlcyIKK21zZ3N0ciAiIgorCisjOiB0YWJsZXMuYzo4MgorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvcjogY2Fubm90IHVzZSB0YWJsZSBuYW1lICVzIgorbXNnc3RyICIiCisKKyM6IHRhYmxlcy5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yOiBjYW5ub3Qgc3RybGNweSB0YWJsZSBuYW1lICVzIgorbXNnc3RyICIiCisKKyM6IHRhYmxlcy5jOjEwMQorIywgYy1mb3JtYXQKK21zZ2lkICJJUHNldDogZXJyb3I6JXMiCittc2dzdHIgIiIKKworIzogdGFibGVzLmM6MTA4Cittc2dpZCAiaW5mbzogdGFibGUgY3JlYXRlZCIKK21zZ3N0ciAiIgorCisjOiB0YWJsZXMuYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogRElPQ1Ilc0FERFJTOiAlcyIKK21zZ3N0ciAiIgorCisjOiB0YWJsZXMuYzoxMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYWRkcmVzc2VzICVzIgorbXNnc3RyICIiCisKKyM6IGlub3RpZnkuYzo2MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgYWNjZXNzIHBhdGggJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGlub3RpZnkuYzo5NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGlub3RpZnk6ICVzIgorbXNnc3RyICIiCisKKyM6IGlub3RpZnkuYzoxMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgc3ltbGlua3MgZm9sbG93aW5nICVzIgorbXNnc3RyICIiCisKKyM6IGlub3RpZnkuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGlyZWN0b3J5ICVzIGZvciByZXNvbHYtZmlsZSBpcyBtaXNzaW5nLCBjYW5ub3QgcG9sbCIKK21zZ3N0ciAiIgorCisjOiBpbm90aWZ5LmM6MTMxIGlub3RpZnkuYzoxNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBpbm90aWZ5IGZvciAlczogJXMiCittc2dzdHIgIiIKKworIzogaW5vdGlmeS5jOjE1MworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgZHluYW1pYyBkaXJlY3RvcnkgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGlub3RpZnkuYzoyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5vdGlmeSwgbmV3IG9yIGNoYW5nZWQgZmlsZSAlcyIKK21zZ3N0ciAiIgpkaWZmIC0tZ2l0IGEvcG8vZnIucG8gYi9wby9mci5wbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40MjZlM2Q1Ci0tLSAvZGV2L251bGwKKysrIGIvcG8vZnIucG8KQEAgLTAsMCArMSwyMzc4IEBACisjIEZyZW5jaCB0cmFuc2xhdGlvbnMgZm9yIGRuc21hc3EgcGFja2FnZS4KKyMgVGhpcyBmaWxlIGlzIHB1dCBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyMgTGlvbmVsIFRyaWNvbiA8bGlvbmVsLnRyaWNvbkBmcmVlLmZyPiwgMjAwNS4KKyMgVHJhbnNsYXRpb24gY29tcGxldGVkIGJ5IEdpbGRhcyBMZSBOYWRhbiA8M250cjBwMTNAZ21haWwuY29tPgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZG5zbWFzcSAyLjY3XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDA5LTA2LTE4IDEyOjI0KzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDE3LTA3LTE3IDE4OjMwKzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6ICBHaWxkYXMgTGUgTmFkYW4gPDNudHIwcDEzQGdtYWlsLmNvbT5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuID4gMSk7XG4iCisKKyM6IGNhY2hlLmM6NTEzCittc2dpZCAiSW50ZXJuYWwgZXJyb3IgaW4gY2FjaGUuIgorbXNnc3RyICIiCisKKyM6IGNhY2hlLmM6OTIzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2FkIG5hbWVzIGZyb20gJXM6ICVzIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGNoYXJnZXIgbGVzIG5vbXMg4CBwYXJ0aXIgZGUgJXMgOiAlcyIKKworIzogY2FjaGUuYzo5NDkgZGhjcC5jOjg2NworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgYWRkcmVzcyBhdCAlcyBsaW5lICVkIgorbXNnc3RyICJtYXV2YWlzZSBhZHJlc3NlIGRhbnMgJXMgbGlnbmUgJWQiCisKKyM6IGNhY2hlLmM6MTAwMiBkaGNwLmM6ODgzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBuYW1lIGF0ICVzIGxpbmUgJWQiCittc2dzdHIgIm1hdXZhaXMgbm9tIGRhbnMgJXMgbGlnbmUgJWQiCisKKyM6IGNhY2hlLmM6MTAxMSBkaGNwLmM6OTU4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWQgJXMgLSAlZCBhZGRyZXNzZXMiCittc2dzdHIgImxlY3R1cmUgJXMgLSAlZCBhZHJlc3NlcyIKKworIzogY2FjaGUuYzoxMTI0Cittc2dpZCAiY2xlYXJlZCBjYWNoZSIKK21zZ3N0ciAiY2FjaGUgdmlk6SIKKworIzogY2FjaGUuYzoxMTUzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIElQdjQgYWRkcmVzcyBmb3VuZCBmb3IgJXMiCittc2dzdHIgIkF1Y3VuZSBhZHJlc3NlIElQdjQgdHJvdXbpZSBwb3VyICVzIgorCisjOiBjYWNoZS5jOjEyMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgYSBDTkFNRSwgbm90IGdpdmluZyBpdCB0byB0aGUgREhDUCBsZWFzZSBvZiAlcyIKK21zZ3N0ciAiJXMgZXN0IHVuIENOQU1FLCBpbCBuZSBzZXJhIHBhcyBkb25u6SBhdSBiYWlsIERIQ1AgZGUgJXMiCisKKyM6IGNhY2hlLmM6MTI1NgorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgZ2l2aW5nIG5hbWUgJXMgdG8gdGhlIERIQ1AgbGVhc2Ugb2YgJXMgYmVjYXVzZSB0aGUgbmFtZSBleGlzdHMgaW4gJXMgd2l0aCBhZGRyZXNzICVzIgorbXNnc3RyICJuZSBkb25uZSBwYXMgZGUgbm9tICVzIGF1IGJhaWwgREhDUCBkZSAlcyBwYXJjZS1xdWUgbGUgbm9tIGV4aXN0ZSBkYW5zICVzIGF2ZWMgbCdhZHJlc3NlICVzIgorCisjOiBjYWNoZS5jOjE0MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidGltZSAlbHUiCittc2dzdHIgImhvcm9kYXRhZ2UgJWx1IgorCisjOiBjYWNoZS5jOjE0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FjaGUgc2l6ZSAlZCwgJWQvJWQgY2FjaGUgaW5zZXJ0aW9ucyByZS11c2VkIHVuZXhwaXJlZCBjYWNoZSBlbnRyaWVzLiIKK21zZ3N0ciAidGFpbGxlIGRlIGNhY2hlICVkLCAlZC8lZCBpbnNlcnRpb25zIGRhbnMgbGUgY2FjaGUgZW50cullcyBub24tZXhwaXLpZXMgcul1dGlsaXPpZXMiCisKKyM6IGNhY2hlLmM6MTQxNgorIywgYy1mb3JtYXQKK21zZ2lkICJxdWVyaWVzIGZvcndhcmRlZCAldSwgcXVlcmllcyBhbnN3ZXJlZCBsb2NhbGx5ICV1IgorbXNnc3RyICJyZXF16nRlcyB0cmFuc21pc2VzICV1LCByZXF16nRlcyBy6XNvbHVlcyBsb2NhbGVtZW50ICV1IgorCisjOiBjYWNoZS5jOjE0MTkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInF1ZXJpZXMgZm9yIGF1dGhvcml0YXRpdmUgem9uZXMgJXUiCittc2dzdHIgIkNvbmZpZ3VyZSBsYSBkdXLpZSBkZSB2aWUgKFRpbWUgVG8gTGl2ZSkgcG91ciBsZXMgculwb25zZXMgZmFpc2FudCBhdXRvcml06SIKKworIzogY2FjaGUuYzoxNDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgInNlcnZlciAlcyMlZDogcXVlcmllcyBzZW50ICV1LCByZXRyaWVkIG9yIGZhaWxlZCAldSIKK21zZ3N0ciAic2VydmV1ciAlcyMlZDogcmVxdep0ZXMgZW52b3npZXMgJXUsIHJlcXXqdGVzIHLpZXNzYXnpZXMgb3Ug6WNob3XpZXMgJXUiCisKKyM6IHV0aWwuYzo0NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2VlZCB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3I6ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnaW5pdGlhbGlzZXIgbGUgZ+lu6XJhdGV1ciBkZSBub21icmUgYWzpYXRvaXJlIDogJXMiCisKKyM6IHV0aWwuYzoyMjQKK21zZ2lkICJmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYWxsb3VlciBsYSBt6W1vaXJlIgorCisjOiB1dGlsLmM6Mjc3IG9wdGlvbi5jOjYxOQorbXNnaWQgImNvdWxkIG5vdCBnZXQgbWVtb3J5IgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYWxsb3VlciBkZSBsYSBt6W1vaXJlIgorCisjOiB1dGlsLmM6Mjg3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgcGlwZTogJXMiCittc2dzdHIgIk5lIHBldXQgcGFzIGNy6WVyIGxlIHR1YmUgJXMgOiAlcyIKKworIzogdXRpbC5jOjI5NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYWxsb2NhdGUgJWQgYnl0ZXMiCittc2dzdHIgImltcG9zc2libGUgZCdhbGxvdWVyICVkIG9jdGV0cyIKKworIzogdXRpbC5jOjQ2NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbmZpbml0ZSIKK21zZ3N0ciAiaWxsaW1pdOkoZSkiCisKKyM6IG9wdGlvbi5jOjM0NAorbXNnaWQgIlNwZWNpZnkgbG9jYWwgYWRkcmVzcyhlcykgdG8gbGlzdGVuIG9uLiIKK21zZ3N0ciAiU3DpY2lmaWUgbGEgb3UgbGVzIGFkcmVzc2UocykgbG9jYWxlcyBv+SBsZSBk6W1vbiBkb2l0IHNlIG1ldHRyZSDgIGwn6WNvdXRlLiIKKworIzogb3B0aW9uLmM6MzQ1Cittc2dpZCAiUmV0dXJuIGlwYWRkciBmb3IgYWxsIGhvc3RzIGluIHNwZWNpZmllZCBkb21haW5zLiIKK21zZ3N0ciAiUmV0b3VybmUgbGVzIGFkcmVzc2VzIElQIHBvdXIgdG91dGVzIGxlcyBtYWNoaW5lcyBwculzZW50ZXMgZGFucyBsZXMgZG9tYWluZXMgc3DpY2lmaelzIgorCisjOiBvcHRpb24uYzozNDYKK21zZ2lkICJGYWtlIHJldmVyc2UgbG9va3VwcyBmb3IgUkZDMTkxOCBwcml2YXRlIGFkZHJlc3MgcmFuZ2VzLiIKK21zZ3N0ciAiVHJhZHVjdGlvbiBpbnZlcnNlIHRydXF16WUgcG91ciBsYSBwbGFnZSBkJ2FkcmVzc2UgcHJpdullIFJGQzE5MTgiCisKKyM6IG9wdGlvbi5jOjM0NworbXNnaWQgIlRyZWF0IGlwYWRkciBhcyBOWERPTUFJTiAoZGVmZWF0cyBWZXJpc2lnbiB3aWxkY2FyZCkuIgorbXNnc3RyICJUcmFpdGUgbCdhZHJlc3NlIElQIGNvbW1lIHVuIGRvbWFpbmUgaW5leGlzdGFudCBOWERPTUFJTiAoY29udG91cm5lIGxlIHN5c3RlbWUgZGUgcmVkaXJlY3Rpb24gZGUgVmVyaXNpZ24pIgorCisjOiBvcHRpb24uYzozNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSB0aGUgc2l6ZSBvZiB0aGUgY2FjaGUgaW4gZW50cmllcyAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiU3DpY2lmaWUgbGUgbm9tYnJlIGQnZW50cullcyBxdWUgY29udGllbmRyYSBsZSBjYWNoZSAocGFyIGTpZmF1dCA6ICVzKS4iCisKKyM6IG9wdGlvbi5jOjM0OQorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IGNvbmZpZ3VyYXRpb24gZmlsZSAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiU3DpY2lmaWUgbGUgbm9tIGR1IGZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiAocGFyIGTpZmF1dCA6ICVzKSIKKworIzogb3B0aW9uLmM6MzUwCittc2dpZCAiRG8gTk9UIGZvcmsgaW50byB0aGUgYmFja2dyb3VuZDogcnVuIGluIGRlYnVnIG1vZGUuIgorbXNnc3RyICJOZSBwYXNzZSBwYXMgZW4gdOJjaGUgZGUgZm9uZCA6IGTpbWFycmUgZW4gbW9kZSBkZWJ1ZyIKKworIzogb3B0aW9uLmM6MzUxCittc2dpZCAiRG8gTk9UIGZvcndhcmQgcXVlcmllcyB3aXRoIG5vIGRvbWFpbiBwYXJ0LiIKK21zZ3N0ciAiTmUgcmV0cmFuc21ldCBwYXMgbGVzIHJlcXXqdGVzIHF1aSBuJ29udCBwYXMgZGUgZG9tYWluZS4iCisKKyM6IG9wdGlvbi5jOjM1MgorbXNnaWQgIlJldHVybiBzZWxmLXBvaW50aW5nIE1YIHJlY29yZHMgZm9yIGxvY2FsIGhvc3RzLiIKK21zZ3N0ciAiUmV0b3VybmUgbGVzIGNoYW1wcyBNWCBwb3VyIGxlcyBtYWNoaW5lcyBsb2NhbGVzLiIKKworIzogb3B0aW9uLmM6MzUzCittc2dpZCAiRXhwYW5kIHNpbXBsZSBuYW1lcyBpbiAvZXRjL2hvc3RzIHdpdGggZG9tYWluLXN1ZmZpeC4iCittc2dzdHIgIkV0ZW5kIGxlcyBub21zIHVuaXF1ZXMgZGVzIG1hY2hpbmVzIGRhbnMgL2V0Yy9ob3N0cyBhdmVjIGxlIHN1ZmZpeGUgZHUgZG9tYWluZS4iCisKKyM6IG9wdGlvbi5jOjM1NAorbXNnaWQgIkRvbid0IGZvcndhcmQgc3B1cmlvdXMgRE5TIHJlcXVlc3RzIGZyb20gV2luZG93cyBob3N0cy4iCittc2dzdHIgIk5lIHJldHJhbnNtZXQgcGFzIGxlcyBmYXVzc2VzIHJlcXXqdGVzIEROUyBlbiBwcm92ZW5hbmNlIGRlcyBtYWNoaW5lcyBXaW5kb3dzLiIKKworIzogb3B0aW9uLmM6MzU1Cittc2dpZCAiRW5hYmxlIERIQ1AgaW4gdGhlIHJhbmdlIGdpdmVuIHdpdGggbGVhc2UgZHVyYXRpb24uIgorbXNnc3RyICJBdXRvcmlzZSBESENQIGRhbnMgbGEgcGxhZ2UgZCdhZHJlc3NlcyBkb25u6WUgc3VyIGxhIGR1cullIGRlIHZhbGlkaXTpIGR1IGJhaWwuIgorCisjOiBvcHRpb24uYzozNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hhbmdlIHRvIHRoaXMgZ3JvdXAgYWZ0ZXIgc3RhcnR1cCAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiT24gY2hhbmdlIHBvdXIgY2UgZ3JvdXBlIGFwcuhzIGxlIGTpbWFycmFnZSAocGFyIGTpZmF1dCA6ICVzKS4iCisKKyM6IG9wdGlvbi5jOjM1NworbXNnaWQgIlNldCBhZGRyZXNzIG9yIGhvc3RuYW1lIGZvciBhIHNwZWNpZmllZCBtYWNoaW5lLiIKK21zZ3N0ciAiT24gYXNzaWduZSB1bmUgYWRyZXNzZSBvdSB1biBub20gcG91ciB1bmUgbWFjaGluZSBzcOljaWZp6WUuIgorCisjOiBvcHRpb24uYzozNTgKK21zZ2lkICJSZWFkIERIQ1AgaG9zdCBzcGVjcyBmcm9tIGZpbGUuIgorbXNnc3RyICJMZWN0dXJlIGRlcyBzcOljaWZpY2F0aW9ucyBkJ2j0dGVzIERIQ1Ag4CBwYXJ0aXIgZHUgZmljaGllciIKKworIzogb3B0aW9uLmM6MzU5Cittc2dpZCAiUmVhZCBESENQIG9wdGlvbiBzcGVjcyBmcm9tIGZpbGUuIgorbXNnc3RyICJMZWN0dXJlIGRlcyBvcHRpb25zIERIQ1Ag4CBwYXJ0aXIgZHUgZmljaGllciIKKworIzogb3B0aW9uLmM6MzYwCisjLCBmdXp6eQorbXNnaWQgIlJlYWQgREhDUCBob3N0IHNwZWNzIGZyb20gYSBkaXJlY3RvcnkuIgorbXNnc3RyICJMZWN0dXJlIGRlcyBzcOljaWZpY2F0aW9ucyBkJ2j0dGVzIERIQ1Ag4CBwYXJ0aXIgZHUgZmljaGllciIKKworIzogb3B0aW9uLmM6MzYxCisjLCBmdXp6eQorbXNnaWQgIlJlYWQgREhDUCBvcHRpb25zIGZyb20gYSBkaXJlY3RvcnkuIgorbXNnc3RyICJMZWN0dXJlIGRlcyBvcHRpb25zIERIQ1Ag4CBwYXJ0aXIgZHUgZmljaGllciIKKworIzogb3B0aW9uLmM6MzYyCittc2dpZCAiRXZhbHVhdGUgY29uZGl0aW9uYWwgdGFnIGV4cHJlc3Npb24uIgorbXNnc3RyICJFeHByZXNzaW9uIGQn6XZhbHVhdGlvbiBjb25kaXRpb25uZWxsZSBkJ+l0aXF1ZXR0ZSIKKworIzogb3B0aW9uLmM6MzYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkRvIE5PVCBsb2FkICVzIGZpbGUuIgorbXNnc3RyICJOZSBjaGFyZ2UgUEFTIGxlIGZpY2hpZXIgJXMuIgorCisjOiBvcHRpb24uYzozNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSBhIGhvc3RzIGZpbGUgdG8gYmUgcmVhZCBpbiBhZGRpdGlvbiB0byAlcy4iCittc2dzdHIgIlNw6WNpZmllIHVuIG5vbSBkZSBmaWNoaWVyIGhvc3RzIOAgbGlyZSBlbiBjb21wbOltZW50IGRlICVzIgorCisjOiBvcHRpb24uYzozNjUKKyMsIGZ1enp5Cittc2dpZCAiUmVhZCBob3N0cyBmaWxlcyBmcm9tIGEgZGlyZWN0b3J5LiIKK21zZ3N0ciAiTGVjdHVyZSBkZXMgc3DpY2lmaWNhdGlvbnMgZCdo9HRlcyBESENQIOAgcGFydGlyIGR1IGZpY2hpZXIiCisKKyM6IG9wdGlvbi5jOjM2NgorbXNnaWQgIlNwZWNpZnkgaW50ZXJmYWNlKHMpIHRvIGxpc3RlbiBvbi4iCittc2dzdHIgIlNw6WNpZmllIGxhIG91IGxlcyBpbnRlcmZhY2Uocykgb/kgbGUgZOltb24gZG9pdCBzZSBtZXR0cmUg4CBsJ+ljb3V0ZS4iCisKKyM6IG9wdGlvbi5jOjM2NworbXNnaWQgIlNwZWNpZnkgaW50ZXJmYWNlKHMpIE5PVCB0byBsaXN0ZW4gb24uIgorbXNnc3RyICJTcOljaWZpZSBsYSBvdSBsZXMgaW50ZXJmYWNlKHMpIHF1ZSBsZSBk6W1vbiBuZSBkb2l0IFBBUyB0cmFpdGVyLiIKKworIworIzogb3B0aW9uLmM6MzY4Cittc2dpZCAiTWFwIERIQ1AgdXNlciBjbGFzcyB0byB0YWcuIgorbXNnc3RyICJBc3NvY2llIGxlcyBjbGFzc2VzIGQndXRpbGlzYXRldXJzICgndXNlciBjbGFzcycpIERIQ1AgYXV4IG9wdGlvbnMuIgorCisjOiBvcHRpb24uYzozNjkKK21zZ2lkICJNYXAgUkZDMzA0NiBjaXJjdWl0LWlkIHRvIHRhZy4iCittc2dzdHIgIkFzc29jaWUgbGVzIGlkZW50aWZpYW50cyBkZSBjaXJjdWl0cyBSRkMzMDQ2ICgnY2lyY3VpdC1pZCcpIGF1eCBvcHRpb25zIgorCisjOiBvcHRpb24uYzozNzAKK21zZ2lkICJNYXAgUkZDMzA0NiByZW1vdGUtaWQgdG8gdGFnLiIKK21zZ3N0ciAiQXNzb2NpZSBsZXMgaWRlbnRpZmlhbnRzIGRpc3RhbnRzIFJGQzMwNDYgKCdyZW1vdGUtaWQnKSBhdXggb3B0aW9ucyIKKworIzogb3B0aW9uLmM6MzcxCittc2dpZCAiTWFwIFJGQzM5OTMgc3Vic2NyaWJlci1pZCB0byB0YWcuIgorbXNnc3RyICJBc3NvY2llIGxlcyBpZGVudGlmaWFudHMgZGUgc291c2NyaXB0ZXVycyBSRkMzOTkzICgnc3Vic2NyaWJlci1pZCcpIGF1eCBvcHRpb25zIgorCisjCisjOiBvcHRpb24uYzozNzIKK21zZ2lkICJEb24ndCBkbyBESENQIGZvciBob3N0cyB3aXRoIHRhZyBzZXQuIgorbXNnc3RyICJOZSBwYXMgYXV0b3Jpc2VyIERIQ1AgcG91ciBsZXMgbWFjaGluZXMg6W51bWVy6WVzIGRhbnMgbGVzIG9wdGlvbnMuIgorCisjCisjOiBvcHRpb24uYzozNzMKK21zZ2lkICJGb3JjZSBicm9hZGNhc3QgcmVwbGllcyBmb3IgaG9zdHMgd2l0aCB0YWcgc2V0LiIKK21zZ3N0ciAiRm9yY2VyIGxlcyBy6XBvbnNlcyBwYXIgJ2Jyb2FkY2FzdCcgcG91ciBsZXMgbWFjaGluZXMg6W51bWVy6WVzIGRhbnMgbGVzIG9wdGlvbnMuIgorCisjOiBvcHRpb24uYzozNzQKK21zZ2lkICJEbyBOT1QgZm9yayBpbnRvIHRoZSBiYWNrZ3JvdW5kLCBkbyBOT1QgcnVuIGluIGRlYnVnIG1vZGUuIgorbXNnc3RyICJOZSBwYXNzZSBwYXMgZW4gdOJjaGUgZGUgZm9uZCwgbmUgcGFzIHMnZXjpY3V0ZXIgZW4gbW9kZSBkZWJ1Zy4iCisKKyM6IG9wdGlvbi5jOjM3NQorbXNnaWQgIkFzc3VtZSB3ZSBhcmUgdGhlIG9ubHkgREhDUCBzZXJ2ZXIgb24gdGhlIGxvY2FsIG5ldHdvcmsuIgorbXNnc3RyICJPbiBjb25zaWTocmUgcXVlIGwnb24gZXN0IGxlIHNldWwgc2VydmV1ciBESENQIHN1ciBsZSBy6XNlYXUgbG9jYWwuIgorCisjOiBvcHRpb24uYzozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSB3aGVyZSB0byBzdG9yZSBESENQIGxlYXNlcyAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiU3DpY2lmaWUgb/kgaWwgZmF1dCBzYXV2ZWdhcmRlciBsZXMgYmF1eCBESENQIChwYXIgZOlmYXV0IDogJXMpLiIKKworIzogb3B0aW9uLmM6Mzc3Cittc2dpZCAiUmV0dXJuIE1YIHJlY29yZHMgZm9yIGxvY2FsIGhvc3RzLiIKK21zZ3N0ciAiUmV0b3VybmUgbGVzIGNoYW1wcyBNWCBwb3VyIGxlcyBtYWNoaW5lcyBsb2NhbGVzLiIKKworIzogb3B0aW9uLmM6Mzc4Cittc2dpZCAiU3BlY2lmeSBhbiBNWCByZWNvcmQuIgorbXNnc3RyICJTcOljaWZpZSB1biBjaGFtcCBNWC4iCisKKyM6IG9wdGlvbi5jOjM3OQorbXNnaWQgIlNwZWNpZnkgQk9PVFAgb3B0aW9ucyB0byBESENQIHNlcnZlci4iCittc2dzdHIgIlNw6WNpZmllIGxlcyBvcHRpb25zIEJPT1RQIHBvdXIgbGUgc2VydmV1ciBESENQLiIKKworIzogb3B0aW9uLmM6MzgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkRvIE5PVCBwb2xsICVzIGZpbGUsIHJlbG9hZCBvbmx5IG9uIFNJR0hVUC4iCittc2dzdHIgIk5lIHBhcyBzY3J1dGVyIGxlIGZpY2hpZXIgJXMsIG5lIHJlY2hhcmdlciBsZXMgbW9kaWZpY2F0aW9ucyBxdWUgc3VyIHLpY2VwdGlvbiBkdSBzaWduYWwgU0lHSFVQLiIKKworIzogb3B0aW9uLmM6MzgxCittc2dpZCAiRG8gTk9UIGNhY2hlIGZhaWxlZCBzZWFyY2ggcmVzdWx0cy4iCittc2dzdHIgIk5lIHBsYWNlIHBhcyBlbiBjYWNoZSBsZSBy6XN1bHRhdCBkZXMgcmVxdep0ZXMgcXVpIG9udCDpY2hvdellcy4iCisKKyM6IG9wdGlvbi5jOjM4MgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2UgbmFtZXNlcnZlcnMgc3RyaWN0bHkgaW4gdGhlIG9yZGVyIGdpdmVuIGluICVzLiIKK21zZ3N0ciAiVXRpbGlzZSBsZXMgc2VydmV1cnMgZGUgbm9tcyBkYW5zIGwnb3JkcmUgZG9ubukgZGFucyAlcy4iCisKKyMKKyM6IG9wdGlvbi5jOjM4MworbXNnaWQgIlNwZWNpZnkgb3B0aW9ucyB0byBiZSBzZW50IHRvIERIQ1AgY2xpZW50cy4iCittc2dzdHIgIk9wdGlvbnMgc3VwcGzpbWVudGFpcmVzIOAgYXNzb2NpZXIgYXV4IGNsaWVudHMgREhDUC4iCisKKyM6IG9wdGlvbi5jOjM4NAorbXNnaWQgIkRIQ1Agb3B0aW9uIHNlbnQgZXZlbiBpZiB0aGUgY2xpZW50IGRvZXMgbm90IHJlcXVlc3QgaXQuIgorbXNnc3RyICJPcHRpb24gREhDUCBlbnZveellIG3qbWUgc2kgbGUgY2xpZW50IGRlIGxhIGRlbWFuZGUgcGFzLiIKKworIzogb3B0aW9uLmM6Mzg1Cittc2dpZCAiU3BlY2lmeSBwb3J0IHRvIGxpc3RlbiBmb3IgRE5TIHJlcXVlc3RzIG9uIChkZWZhdWx0cyB0byA1MykuIgorbXNnc3RyICJTcOljaWZpZSBsZSBwb3J0IG/5IGlsIGZhdXQg6WNvdXRlciBsZXMgcmVxdep0ZXMgRE5TIChwYXIgZOlmYXV0IDogNTMpLiIKKworIzogb3B0aW9uLmM6Mzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gc3VwcG9ydGVkIFVEUCBwYWNrZXQgc2l6ZSBmb3IgRUROUy4wIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJUYWlsbGUgbWF4aW1hbGUgZGVzIHBhcXVldHMgVURQIHN1cHBvcnTpcyBwb3VyIEVETlMuMCAocGFyIGTpZmF1dCA6ICVzKS4iCisKKyMKKyM6IG9wdGlvbi5jOjM4NworbXNnaWQgIkxvZyBETlMgcXVlcmllcy4iCittc2dzdHIgIkVucmVnaXN0cmUgbGVzIHJlcXXqdGVzIEROUyBkYW5zIHVuIGpvdXJuYWwgZCdhY3Rpdml06S4iCisKKyMKKyM6IG9wdGlvbi5jOjM4OAorbXNnaWQgIkZvcmNlIHRoZSBvcmlnaW5hdGluZyBwb3J0IGZvciB1cHN0cmVhbSBETlMgcXVlcmllcy4iCittc2dzdHIgIkZvcmNlIGxlIHBvcnQgZCdvcmlnaW5lIHBvdXIgbGVzIHJlcXXqdGVzIHZlcnMgbGVzIHNlcnZldXJzIGFtb250cy4iCisKKyM6IG9wdGlvbi5jOjM4OQorbXNnaWQgIkRvIE5PVCByZWFkIHJlc29sdi5jb25mLiIKK21zZ3N0ciAiTmUgcGFzIGxpcmUgbGUgZmljaGllciByZXNvbHYuY29uZi4iCisKKyM6IG9wdGlvbi5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHBhdGggdG8gcmVzb2x2LmNvbmYgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIlNw6WNpZmllIGxlIGNoZW1pbiBwb3VyIGxlIGZpY2hpZXIgcmVzb2x2LmNvbmYgKHBhciBk6WZhdXQgOiAlcykuIgorCisjOiBvcHRpb24uYzozOTEKKyMsIGZ1enp5Cittc2dpZCAiU3BlY2lmeSBwYXRoIHRvIGZpbGUgd2l0aCBzZXJ2ZXI9IG9wdGlvbnMiCittc2dzdHIgIlNw6WNpZmllIHVuIGNoZW1pbiBwb3VyIGxlIGZpY2hpZXIgUElEIChwYXIgZOlmYXV0IDogJXMpLiIKKworIzogb3B0aW9uLmM6MzkyCittc2dpZCAiU3BlY2lmeSBhZGRyZXNzKGVzKSBvZiB1cHN0cmVhbSBzZXJ2ZXJzIHdpdGggb3B0aW9uYWwgZG9tYWlucy4iCittc2dzdHIgIlNw6WNpZmllIGxhIG91IGxlcyBhZHJlc3NlcyBkZXMgc2VydmV1cnMgYW1vbnRzIGF2ZWMgZGVzIGRvbWFpbmVzIG9wdGlvbmVscy4iCisKKyM6IG9wdGlvbi5jOjM5MworIywgZnV6enkKK21zZ2lkICJTcGVjaWZ5IGFkZHJlc3Mgb2YgdXBzdHJlYW0gc2VydmVycyBmb3IgcmV2ZXJzZSBhZGRyZXNzIHF1ZXJpZXMiCittc2dzdHIgIlNw6WNpZmllIGxhIG91IGxlcyBhZHJlc3NlcyBkZXMgc2VydmV1cnMgYW1vbnRzIGF2ZWMgZGVzIGRvbWFpbmVzIG9wdGlvbmVscy4iCisKKyM6IG9wdGlvbi5jOjM5NAorbXNnaWQgIk5ldmVyIGZvcndhcmQgcXVlcmllcyB0byBzcGVjaWZpZWQgZG9tYWlucy4iCittc2dzdHIgIk5lIGphbWFpcyByZXRyYW5zbWV0dHJlIGxlcyByZXF16nRlcyBwb3VyIGxlcyBkb21haW5lcyBzcOljaWZp6XMuIgorCisjOiBvcHRpb24uYzozOTUKK21zZ2lkICJTcGVjaWZ5IHRoZSBkb21haW4gdG8gYmUgYXNzaWduZWQgaW4gREhDUCBsZWFzZXMuIgorbXNnc3RyICJTcOljaWZpZSBsZSBkb21haW5lIHF1aSBkb2l0IGV0cmUgYXNzaWdu6SBhdXggYmF1eCBESENQLiIKKworIzogb3B0aW9uLmM6Mzk2Cittc2dpZCAiU3BlY2lmeSBkZWZhdWx0IHRhcmdldCBpbiBhbiBNWCByZWNvcmQuIgorbXNnc3RyICJTcOljaWZpZSBsYSBjaWJsZSBwYXIgZOlmYXV0IGRhbnMgdW4gY2hhbXAgTVguIgorCisjOiBvcHRpb24uYzozOTcKK21zZ2lkICJTcGVjaWZ5IHRpbWUtdG8tbGl2ZSBpbiBzZWNvbmRzIGZvciByZXBsaWVzIGZyb20gL2V0Yy9ob3N0cy4iCittc2dzdHIgIlNw6WNpZmllIGxlIFRUTCBlbiBzZWNvbmRlcyBwb3VyIGxlcyBy6XBvbnNlcyBxdWkgdXRpbGlzZW50IC9ldGMvaG9zdHMuIgorCisjCisjOiBvcHRpb24uYzozOTgKK21zZ2lkICJTcGVjaWZ5IHRpbWUtdG8tbGl2ZSBpbiBzZWNvbmRzIGZvciBuZWdhdGl2ZSBjYWNoaW5nLiIKK21zZ3N0ciAiU3DpY2lmaWUgbGUgVFRMIGVuIHNlY29uZGVzIHBvdXIgbGVzIHLpcG9uc2VzIHF1aSB1dGlsaXNlbnQgL2V0Yy9ob3N0cy4iCisKKyM6IG9wdGlvbi5jOjM5OQorbXNnaWQgIlNwZWNpZnkgdGltZS10by1saXZlIGluIHNlY29uZHMgZm9yIG1heGltdW0gVFRMIHRvIHNlbmQgdG8gY2xpZW50cy4iCittc2dzdHIgIlNw6WNpZmllLCBlbiBzZWNvbmRlcywgbGEgdmFsZXVyIG1heGltdW0gZGUgVFRMIOAgcmVudm95ZXIgYXV4IGNsaWVudHMuIgorCisjCisjOiBvcHRpb24uYzo0MDAKKyMsIGZ1enp5Cittc2dpZCAiU3BlY2lmeSB0aW1lLXRvLWxpdmUgY2VpbGluZyBmb3IgY2FjaGUuIgorbXNnc3RyICJTcOljaWZpZSBsZSBUVEwgZW4gc2Vjb25kZXMgcG91ciBsZXMgculwb25zZXMgcXVpIHV0aWxpc2VudCAvZXRjL2hvc3RzLiIKKworIworIzogb3B0aW9uLmM6NDAxCisjLCBmdXp6eQorbXNnaWQgIlNwZWNpZnkgdGltZS10by1saXZlIGZsb29yIGZvciBjYWNoZS4iCittc2dzdHIgIlNw6WNpZmllIGxlIFRUTCBlbiBzZWNvbmRlcyBwb3VyIGxlcyBy6XBvbnNlcyBxdWkgdXRpbGlzZW50IC9ldGMvaG9zdHMuIgorCisjOiBvcHRpb24uYzo0MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hhbmdlIHRvIHRoaXMgdXNlciBhZnRlciBzdGFydHVwLiAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiQ2hhbmdlIHBvdXIgY2V0IHV0aWxpc2F0ZXVyIGFwcuhzIGxlIGTpbWFycmFnZSAocGFyIGTpZmF1dCA6ICVzKS4iCisKKyMKKyM6IG9wdGlvbi5jOjQwMworbXNnaWQgIk1hcCBESENQIHZlbmRvciBjbGFzcyB0byB0YWcuIgorbXNnc3RyICJBc3NvY2llIGxlcyBjbGFzc2VzIGRlIGZvdXJuaXNzZXVycyAoJ3ZlbmRvciBjbGFzcycpIERIQ1AgYXV4IG9wdGlvbnMuIgorCisjOiBvcHRpb24uYzo0MDQKK21zZ2lkICJEaXNwbGF5IGRuc21hc3EgdmVyc2lvbiBhbmQgY29weXJpZ2h0IGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiQWZmaWNoZSBsYSB2ZXJzaW9uIGRlIERuc21hc3EgZXQgbGVzIGluZm9ybWF0aW9ucyBsaellcyBhdSBjb3B5cmlnaHQuIgorCisjOiBvcHRpb24uYzo0MDUKK21zZ2lkICJUcmFuc2xhdGUgSVB2NCBhZGRyZXNzZXMgZnJvbSB1cHN0cmVhbSBzZXJ2ZXJzLiIKK21zZ3N0ciAiVHJhZHVpdCBsZXMgYWRyZXNzZXMgSVBWNCBkZXMgc2VydmV1cnMgYW1vbnRzLiIKKworIzogb3B0aW9uLmM6NDA2Cittc2dpZCAiU3BlY2lmeSBhIFNSViByZWNvcmQuIgorbXNnc3RyICJTcOljaWZpZSB1biBjaGFtcCBTUlYuIgorCisjOiBvcHRpb24uYzo0MDcKKyMsIGZ1enp5Cittc2dpZCAiRGlzcGxheSB0aGlzIG1lc3NhZ2UuIFVzZSAtLWhlbHAgZGhjcCBvciAtLWhlbHAgZGhjcDYgZm9yIGtub3duIERIQ1Agb3B0aW9ucy4iCittc2dzdHIgIkFmZmljaGVyIGNlIG1lc3NhZ2UuIFV0aWxpc2VyIC0taGVscCBkaGNwIHBvdXIgb2J0ZW5pciBsYSBsaXN0ZSBkZXMgb3B0aW9ucyBESENQIGNvbm51ZXMuIgorCisjOiBvcHRpb24uYzo0MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSBwYXRoIG9mIFBJRCBmaWxlIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJTcOljaWZpZSB1biBjaGVtaW4gcG91ciBsZSBmaWNoaWVyIFBJRCAocGFyIGTpZmF1dCA6ICVzKS4iCisKKyM6IG9wdGlvbi5jOjQwOQorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IG1heGltdW0gbnVtYmVyIG9mIERIQ1AgbGVhc2VzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJTcOljaWZpZSBsZSBub21icmUgbWF4aW11bSBkZSBiYXV4IERIQ1AgKHBhciBk6WZhdXQgOiAlcykuIgorCisjOiBvcHRpb24uYzo0MTAKK21zZ2lkICJBbnN3ZXIgRE5TIHF1ZXJpZXMgYmFzZWQgb24gdGhlIGludGVyZmFjZSBhIHF1ZXJ5IHdhcyBzZW50IHRvLiIKK21zZ3N0ciAiUmVwb25kIGF1eCByZXF16nRlcyBETlMgZW4gc2UgYmFzYW50IHN1ciBsJ2ludGVyZmFjZSBvdSBhIOl06SBlbnZveellIGxhIHJlcXXqdGUuIgorCisjOiBvcHRpb24uYzo0MTEKK21zZ2lkICJTcGVjaWZ5IFRYVCBETlMgcmVjb3JkLiIKK21zZ3N0ciAiU3DpY2lmaWUgdW4gY2hhbXAgRE5TIFRYVCIKKworIworIzogb3B0aW9uLmM6NDEyCittc2dpZCAiU3BlY2lmeSBQVFIgRE5TIHJlY29yZC4iCittc2dzdHIgIlNw6WNpZmllIHVuIGNoYW1wIEROUyBQVFIiCisKKyM6IG9wdGlvbi5jOjQxMworbXNnaWQgIkdpdmUgRE5TIG5hbWUgdG8gSVB2NCBhZGRyZXNzIG9mIGludGVyZmFjZS4iCittc2dzdHIgIkRvbm5lIGxlIG5vbSBETlMgcG91ciBsJ2FkcmVzc2UgSVB2NCBkZSBsJ2ludGVyZmFjZS4iCisKKyM6IG9wdGlvbi5jOjQxNAorbXNnaWQgIkJpbmQgb25seSB0byBpbnRlcmZhY2VzIGluIHVzZS4iCittc2dzdHIgIkFzc29jaWF0aW9uIHVuaXF1ZW1lbnQgYXV4IGludGVyZmFjZXMgculzZWF1IGFjdHVlbGxlbWVudCBhY3RpdmVzLiIKKworIzogb3B0aW9uLmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlYWQgREhDUCBzdGF0aWMgaG9zdCBpbmZvcm1hdGlvbiBmcm9tICVzLiIKK21zZ3N0ciAiTGVjdHVyZSBkZXMgaW5mb3JtYXRpb25zIGRlIERIQ1Agc3RhdGlxdWUg4CBwYXJ0aXIgZGUgJXMuIgorCisjOiBvcHRpb24uYzo0MTYKK21zZ2lkICJFbmFibGUgdGhlIERCdXMgaW50ZXJmYWNlIGZvciBzZXR0aW5nIHVwc3RyZWFtIHNlcnZlcnMsIGV0Yy4iCittc2dzdHIgIkF1dG9yaXNlIGwnaW50ZXJmYWNlIERCdXMgcG91ciBsYSBjb25maWd1cmF0aW9uIGRlcyBzZXJ2ZXVycyBhbW9udHMsIGV0Yy4iCisKKyM6IG9wdGlvbi5jOjQxNworbXNnaWQgIkRvIG5vdCBwcm92aWRlIERIQ1Agb24gdGhpcyBpbnRlcmZhY2UsIG9ubHkgcHJvdmlkZSBETlMuIgorbXNnc3RyICJOZSBwYXMgYXNzdXJlciBkZSBmb25jdGlvbiBESENQIHN1ciBjZXR0ZSBpbnRlcmZhY2UsIG1haXMgc2V1bGVtZW50IGxhIGZvbmN0aW9uIEROUy4iCisKKyM6IG9wdGlvbi5jOjQxOAorbXNnaWQgIkVuYWJsZSBkeW5hbWljIGFkZHJlc3MgYWxsb2NhdGlvbiBmb3IgYm9vdHAuIgorbXNnc3RyICJBdXRvcmlzZSBsJ2FsbG9jYXRpb24gZHluYW1pcXVlIGQnYWRyZXNzZSBwb3VyIGJvb3RwLiIKKworIworIzogb3B0aW9uLmM6NDE5Cittc2dpZCAiTWFwIE1BQyBhZGRyZXNzICh3aXRoIHdpbGRjYXJkcykgdG8gb3B0aW9uIHNldC4iCittc2dzdHIgIkFzc29jaWUgbCdhZHJlc3NlIE1BQyAoYXZlYyBsZXMgam9rZXJzKSBhdXggb3B0aW9ucy4iCisKKyM6IG9wdGlvbi5jOjQyMAorbXNnaWQgIlRyZWF0IERIQ1AgcmVxdWVzdHMgb24gYWxpYXNlcyBhcyBhcnJpdmluZyBmcm9tIGludGVyZmFjZS4iCittc2dzdHIgIlRyYWl0ZXIgbGVzIHJlcXXqdGVzIERIQ1Agc3VyIGxlcyBhbGlhcyBjb21tZSBhcnJpdmFudCBkZSBsJ2ludGVyZmFjZS4iCisKKyM6IG9wdGlvbi5jOjQyMQorbXNnaWQgIkRpc2FibGUgSUNNUCBlY2hvIGFkZHJlc3MgY2hlY2tpbmcgaW4gdGhlIERIQ1Agc2VydmVyLiIKK21zZ3N0ciAiU3VwcHJpbWUgbGEgdulyaWZpY2F0aW9uIGQnYWRyZXNzZSBzdXIgbGUgc2VydmV1ciBhdSBtb3llbiBkZSBwYXF1ZXRzIElDTVAgZWNobyIKKworIzogb3B0aW9uLmM6NDIyCittc2dpZCAiU2hlbGwgc2NyaXB0IHRvIHJ1biBvbiBESENQIGxlYXNlIGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbi4iCittc2dzdHIgIlNjcmlwdCBzaGVsbCDgIGV46WN1dGVyIGxvcnMgZGUgbGEgY3LpYXRpb24gb3UgZGVzdHJ1Y3Rpb24gZGUgYmFpbCBESENQLiIKKworIzogb3B0aW9uLmM6NDIzCittc2dpZCAiTHVhIHNjcmlwdCB0byBydW4gb24gREhDUCBsZWFzZSBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24uIgorbXNnc3RyICJTY3JpcHQgTHVhIOAgZXjpY3V0ZXIgbG9ycyBkZSBsYSBjculhdGlvbiBvdSBkZXN0cnVjdGlvbiBkZSBiYWlsIERIQ1AuIgorCisjOiBvcHRpb24uYzo0MjQKK21zZ2lkICJSdW4gbGVhc2UtY2hhbmdlIHNjcmlwdHMgYXMgdGhpcyB1c2VyLiIKK21zZ3N0ciAiTGFuY2VyIGxlIHNjcmlwdCAnbGVhc2UtY2hhbmdlJyBhdmVjIGNldCB1dGlsaXNhdGV1ci4iCisKKyM6IG9wdGlvbi5jOjQyNQorbXNnaWQgIkNhbGwgZGhjcC1zY3JpcHQgd2l0aCBjaGFuZ2VzIHRvIGxvY2FsIEFSUCB0YWJsZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDI2Cittc2dpZCAiUmVhZCBjb25maWd1cmF0aW9uIGZyb20gYWxsIHRoZSBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeS4iCittc2dzdHIgIkxlY3R1cmUgZGUgbGEgY29uZmlndXJhdGlvbiBkYW5zIHRvdXMgbGVzIGZpY2hpZXJzIGRlIGNlIHLpcGVydG9pcmUuIgorCisjCisjOiBvcHRpb24uYzo0MjcKK21zZ2lkICJMb2cgdG8gdGhpcyBzeXNsb2cgZmFjaWxpdHkgb3IgZmlsZS4gKGRlZmF1bHRzIHRvIERBRU1PTikiCittc2dzdHIgIkVucmVnaXN0cmVyIGxlcyBqb3VybmF1eCBkJ2FjdGl2aXTpIGRhbnMgY2V0dGUgZmFjaWxpdOkgc3lzbG9nLiAoZOlmYXV0IDogREFFTU9OKSIKKworIzogb3B0aW9uLmM6NDI4Cittc2dpZCAiRG8gbm90IHVzZSBsZWFzZWZpbGUuIgorbXNnc3RyICJOZSBwYXMgdXRpbGlzZXIgZGUgZmljaGllciBkZSBiYXV4LiIKKworIzogb3B0aW9uLmM6NDI5CisjLCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgRE5TIHF1ZXJpZXMuIChkZWZhdWx0cyB0byAlcykiCittc2dzdHIgIlNw6WNpZmllIGxlIG5vbWJyZSBtYXhpbXVtIGRlIHJlcXXqdGVzIERIQ1AgY29uY3VycmVudGVzIChwYXIgZOlmYXV0IDogJXMpLiIKKworIzogb3B0aW9uLmM6NDMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNsZWFyIEROUyBjYWNoZSB3aGVuIHJlbG9hZGluZyAlcy4iCittc2dzdHIgIlZpZGVyIGxlIGNhY2hlIEROUyBsb3JzIGR1IHJlY2hhcmdlbWVudCBkZSAlcy4iCisKKyM6IG9wdGlvbi5jOjQzMQorbXNnaWQgIklnbm9yZSBob3N0bmFtZXMgcHJvdmlkZWQgYnkgREhDUCBjbGllbnRzLiIKK21zZ3N0ciAiSWdub3JlciBsZXMgbm9tcyBkJ2j0dGVzIGZvdXJuaXMgcGFyIGxlcyBjbGllbnRzIERIQ1AiCisKKyM6IG9wdGlvbi5jOjQzMgorbXNnaWQgIkRvIE5PVCByZXVzZSBmaWxlbmFtZSBhbmQgc2VydmVyIGZpZWxkcyBmb3IgZXh0cmEgREhDUCBvcHRpb25zLiIKK21zZ3N0ciAiTmUgcGFzIHLpdXRpbGlzZXIgbGVzIGNoYW1wcyBub20gZGUgZmljaGllciBldCBzZXJ2ZXVyIGRhbnMgbGVzIG9wdGlvbnMgREhDUCBzdXBwbOltZW50YWlyZXMuIgorCisjOiBvcHRpb24uYzo0MzMKK21zZ2lkICJFbmFibGUgaW50ZWdyYXRlZCByZWFkLW9ubHkgVEZUUCBzZXJ2ZXIuIgorbXNnc3RyICJBY3RpdmVyIGxlIHNlcnZlciBURlRQIGludOlncukgKGZvbmN0aW9ubmFudCBlbiBsZWN0dXJlIHNldWxlbWVudCkiCisKKyM6IG9wdGlvbi5jOjQzNAorbXNnaWQgIkV4cG9ydCBmaWxlcyBieSBURlRQIG9ubHkgZnJvbSB0aGUgc3BlY2lmaWVkIHN1YnRyZWUuIgorbXNnc3RyICJOJ2V4cG9ydGVyIHBhciBURlRQIHF1ZSBsZXMgZmljaGllcnMgZGUgbCdhcmJvcmVzY2VuY2UgZGUgZmljaGllciBzcOljaWZp6WUiCisKKyM6IG9wdGlvbi5jOjQzNQorIywgZnV6enkKK21zZ2lkICJBZGQgY2xpZW50IElQIG9yIGhhcmR3YXJlIGFkZHJlc3MgdG8gdGZ0cC1yb290LiIKK21zZ3N0ciAiQWpvdXRlciBsZXMgYWRyZXNzZXMgSVAgY2xpZW50ZXMg4CBsYSByYWNpbmUgdGZ0cCAoJ3RmdHAtcm9vdCcpLiIKKworIzogb3B0aW9uLmM6NDM2Cittc2dpZCAiQWxsb3cgYWNjZXNzIG9ubHkgdG8gZmlsZXMgb3duZWQgYnkgdGhlIHVzZXIgcnVubmluZyBkbnNtYXNxLiIKK21zZ3N0ciAiQWNj6HMgYXV4IHNldWxzIGZpY2hpZXJzIGFwcGFydGVuYW50cyDgIGwndXRpbGlzYXRldXIgc291cyBsZXF1ZWwgdG91cm5lIGRuc21hc3EiCisKKyM6IG9wdGlvbi5jOjQzNworbXNnaWQgIkRvIG5vdCB0ZXJtaW5hdGUgdGhlIHNlcnZpY2UgaWYgVEZUUCBkaXJlY3RvcmllcyBhcmUgaW5hY2Nlc3NpYmxlLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgVEZUUCB0cmFuc2ZlcnMgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIlNw6WNpZmllIGxlIG5vbWJyZSBtYXhpbXVtIGRlIHRyYW5zZmVydCBURlRQIGNvbmN1cnJlbnRzIChk6WZhdXQgOiAlcykuIgorCisjOiBvcHRpb24uYzo0MzkKKyMsIGZ1enp5Cittc2dpZCAiTWF4aW11bSBNVFUgdG8gdXNlIGZvciBURlRQIHRyYW5zZmVycy4iCittc2dzdHIgIlNw6WNpZmllIGxlIG5vbWJyZSBtYXhpbXVtIGRlIHRyYW5zZmVydCBURlRQIGNvbmN1cnJlbnRzIChk6WZhdXQgOiAlcykuIgorCisjOiBvcHRpb24uYzo0NDAKK21zZ2lkICJEaXNhYmxlIHRoZSBURlRQIGJsb2Nrc2l6ZSBleHRlbnNpb24uIgorbXNnc3RyICJE6XNhY3RpdmF0aW9uIGRlIGwnZXh0ZW5zaW9uIFRGVFAgqyB0YWlsbGUgZGUgYmxvYyC7IgorCisjOiBvcHRpb24uYzo0NDEKK21zZ2lkICJDb252ZXJ0IFRGVFAgZmlsZW5hbWVzIHRvIGxvd2VyY2FzZSIKK21zZ3N0ciAiQ29udmVydGlzIGxlcyBub21zIGRlIGZpY2hpZXJzIFRGVFAgZW4gbWludXNjdWxlIgorCisjOiBvcHRpb24uYzo0NDIKK21zZ2lkICJFcGhlbWVyYWwgcG9ydCByYW5nZSBmb3IgdXNlIGJ5IFRGVFAgdHJhbnNmZXJzLiIKK21zZ3N0ciAiR2FtbWUgZGUgcG9ydHMgZGFucyBsYXF1ZWxsZSBzZXJvbnQgY2hvaXNpcyBsZXMgcG9ydHMgdGVtcG9yYWlyZXMgdXRpbGlz6XMgZGFucyBsZXMgdHJhbnNmZXJ0cyBURlRQLiIKKworIzogb3B0aW9uLmM6NDQzCittc2dpZCAiRXh0cmEgbG9nZ2luZyBmb3IgREhDUC4iCittc2dzdHIgIlRyYWNlcyBzdXBwbOltZW50YWlyZXMgcG91ciBsZSBESENQLiIKKworIzogb3B0aW9uLmM6NDQ0Cittc2dpZCAiRW5hYmxlIGFzeW5jLiBsb2dnaW5nOyBvcHRpb25hbGx5IHNldCBxdWV1ZSBsZW5ndGguIgorbXNnc3RyICJBY3RpdmUgbCfpY3JpdHVyZSBkZSB0cmFjZXMgZW4gbW9kZSBhc3luY2hyb25lLiBQZXV0IHByZW5kcmUgZW4gb3B0aW9uIGxhIHZhbGV1ciBkZSBsYSBsb25ndWV1ciBkZSBsYSBxdWV1ZS4iCisKKyM6IG9wdGlvbi5jOjQ0NQorbXNnaWQgIlN0b3AgRE5TIHJlYmluZGluZy4gRmlsdGVyIHByaXZhdGUgSVAgcmFuZ2VzIHdoZW4gcmVzb2x2aW5nLiIKK21zZ3N0ciAiU3RvcHBlciBsYSBy6WFzc29jaWF0aW9uIEROUyAoJ0ROUyByZWJpbmRpbmcnKS4gRmlsdHJlIGxlcyBnYW1tZXMgZCdhZHJlc3NlcyBJUCBwcml26WVzIGxvcnMgZGUgbGEgculzb2x1dGlvbi4iCisKKyM6IG9wdGlvbi5jOjQ0NgorbXNnaWQgIkFsbG93IHJlYmluZGluZyBvZiAxMjcuMC4wLjAvOCwgZm9yIFJCTCBzZXJ2ZXJzLiIKK21zZ3N0ciAiQXV0b3Jpc2UgbGEgculhc3NvY2lhdGlvbiBkZSAxMjcuMC4wLzgsIHBvdXIgbGVzIHNlcnZldXJzIFJCTCAoUmVhbHRpbWUgQmxhY2tob2xlIExpc3QpIgorCisjOiBvcHRpb24uYzo0NDcKK21zZ2lkICJJbmhpYml0IEROUy1yZWJpbmQgcHJvdGVjdGlvbiBvbiB0aGlzIGRvbWFpbi4iCittc2dzdHIgIkTpc2FjdGl2ZSBsYSBwcm90ZWN0aW9uIGNvbnRyZSBsZXMgculhc3NvY2lhdGlvbiBETlMgcG91ciBjZSBkb21haW5lIgorCisjOiBvcHRpb24uYzo0NDgKK21zZ2lkICJBbHdheXMgcGVyZm9ybSBETlMgcXVlcmllcyB0byBhbGwgc2VydmVycy4iCittc2dzdHIgIlRvdWpvdXJzIGVmZmVjdHVlciBsZXMgcmVxdep0ZXMgRE5TIOAgdG91cyBsZXMgc2VydmV1cnMuIgorCisjCisjOiBvcHRpb24uYzo0NDkKK21zZ2lkICJTZXQgdGFnIGlmIGNsaWVudCBpbmNsdWRlcyBtYXRjaGluZyBvcHRpb24gaW4gcmVxdWVzdC4iCittc2dzdHIgIlNw6WNpZmllIGxlIGxhYmVsIHNpIGxlIGNsaWVudCBpbmNsdXMgbCdvcHRpb24gZGFucyBsYSByZXF16nRlLiIKKworIzogb3B0aW9uLmM6NDUwCittc2dpZCAiVXNlIGFsdGVybmF0aXZlIHBvcnRzIGZvciBESENQLiIKK21zZ3N0ciAiVXRpbGlzZXIgZGVzIHBvcnRzIGFsdGVybmF0aWZzIHBvdXIgbGUgREhDUC4iCisKKyMKKyM6IG9wdGlvbi5jOjQ1MQorbXNnaWQgIlNwZWNpZnkgTkFQVFIgRE5TIHJlY29yZC4iCittc2dzdHIgIlNw6WNpZmllIHVuIGNoYW1wIEROUyBOQVBUUi4iCisKKyM6IG9wdGlvbi5jOjQ1MgorbXNnaWQgIlNwZWNpZnkgbG93ZXN0IHBvcnQgYXZhaWxhYmxlIGZvciBETlMgcXVlcnkgdHJhbnNtaXNzaW9uLiIKK21zZ3N0ciAiROlmaW5pZSBsZSBwbHVzIHBldGl0IHBvcnQgdXRpbGlz6SBwb3VyIGxhIHRyYW5zbWlzc2lvbiBkJ3VuZSByZXF16nRlIEROUy4iCisKKyM6IG9wdGlvbi5jOjQ1MworIywgZnV6enkKK21zZ2lkICJTcGVjaWZ5IGhpZ2hlc3QgcG9ydCBhdmFpbGFibGUgZm9yIEROUyBxdWVyeSB0cmFuc21pc3Npb24uIgorbXNnc3RyICJE6WZpbmllIGxlIHBsdXMgcGV0aXQgcG9ydCB1dGlsaXPpIHBvdXIgbGEgdHJhbnNtaXNzaW9uIGQndW5lIHJlcXXqdGUgRE5TLiIKKworIzogb3B0aW9uLmM6NDU0Cittc2dpZCAiVXNlIG9ubHkgZnVsbHkgcXVhbGlmaWVkIGRvbWFpbiBuYW1lcyBmb3IgREhDUCBjbGllbnRzLiIKK21zZ3N0ciAiVXRpbGlzZSBzZXVsZW1lbnQgbGVzIG5vbXMgZGUgZG9tYWluZSBwbGVpbmVtZW50IHF1YWxpZmnpcyBwb3VyIGxlcyBjbGllbnRzIERIQ1AuIgorCisjOiBvcHRpb24uYzo0NTUKK21zZ2lkICJHZW5lcmF0ZSBob3N0bmFtZXMgYmFzZWQgb24gTUFDIGFkZHJlc3MgZm9yIG5hbWVsZXNzIGNsaWVudHMuIgorbXNnc3RyICJH6W7ocmUgbGVzIG5vbXMgZCdo9HRlcyDgIHBhcnRpciBkZSBsJ2FkcmVzc2UgTUFDIHBvdXIgbGVzIGNsaWVudHMgc2FucyBub20uIgorCisjOiBvcHRpb24uYzo0NTYKK21zZ2lkICJVc2UgdGhlc2UgREhDUCByZWxheXMgYXMgZnVsbCBwcm94aWVzLiIKK21zZ3N0ciAiVXRpbGlzZSBjZXMgcmVsYWlzIERIQ1AgZW4gdGVtcHMgcXVlIHByb3h5IGNvbXBsZXRzLiIKKworIzogb3B0aW9uLmM6NDU3Cittc2dpZCAiUmVsYXkgREhDUCByZXF1ZXN0cyB0byBhIHJlbW90ZSBzZXJ2ZXIiCittc2dzdHIgIlJlcXXqdGVzIGRlIHJlbGFpcyBESENQIOAgdW4gc2VydmV1ciBkaXN0YW50IgorCisjOiBvcHRpb24uYzo0NTgKK21zZ2lkICJTcGVjaWZ5IGFsaWFzIG5hbWUgZm9yIExPQ0FMIEROUyBuYW1lLiIKK21zZ3N0ciAiU3DpY2lmaWUgdW4gYWxpYXMgcG91ciB1biBub20gRE5TIGxvY2FsLiIKKworIworIzogb3B0aW9uLmM6NDU5Cittc2dpZCAiUHJvbXB0IHRvIHNlbmQgdG8gUFhFIGNsaWVudHMuIgorbXNnc3RyICJJbnZpdGUg4CBlbnZveWVyIGF1eCBjbGllbnRzIFBYRS4iCisKKyM6IG9wdGlvbi5jOjQ2MAorbXNnaWQgIkJvb3Qgc2VydmljZSBmb3IgUFhFIG1lbnUuIgorbXNnc3RyICJTZXJ2aWNlIGRlIGTpbWFycmFnZSBwb3VyIG1lbnUgUFhFLiIKKworIzogb3B0aW9uLmM6NDYxCittc2dpZCAiQ2hlY2sgY29uZmlndXJhdGlvbiBzeW50YXguIgorbXNnc3RyICJ26XJpZmljYXRpb24gZGUgbGEgc3ludGF4ZSBkZSBsYSBjb25maWd1cmF0aW9uLiIKKworIzogb3B0aW9uLmM6NDYyCittc2dpZCAiQWRkIHJlcXVlc3RvcidzIE1BQyBhZGRyZXNzIHRvIGZvcndhcmRlZCBETlMgcXVlcmllcy4iCittc2dzdHIgIkFqb3V0ZSBsJ2FkcmVzc2UgTUFDIGR1IHJlcXXqdGV1ciBhdXggcmVxdep0ZXMgRE5TIHRyYW5zbWlzZXMiCisKKyM6IG9wdGlvbi5jOjQ2MworIywgZnV6enkKK21zZ2lkICJBZGQgc3BlY2lmaWVkIElQIHN1Ym5ldCB0byBmb3J3YXJkZWQgRE5TIHF1ZXJpZXMuIgorbXNnc3RyICJBam91dGUgbCdhZHJlc3NlIE1BQyBkdSByZXF16nRldXIgYXV4IHJlcXXqdGVzIEROUyB0cmFuc21pc2VzIgorCisjOiBvcHRpb24uYzo0NjQKKyMsIGZ1enp5Cittc2dpZCAiQWRkIGNsaWVudCBpZGVudGlmaWNhdGlvbiB0byBmb3J3YXJkZWQgRE5TIHF1ZXJpZXMuIgorbXNnc3RyICJBam91dGUgbCdhZHJlc3NlIE1BQyBkdSByZXF16nRldXIgYXV4IHJlcXXqdGVzIEROUyB0cmFuc21pc2VzIgorCisjOiBvcHRpb24uYzo0NjUKK21zZ2lkICJQcm94eSBETlNTRUMgdmFsaWRhdGlvbiByZXN1bHRzIGZyb20gdXBzdHJlYW0gbmFtZXNlcnZlcnMuIgorbXNnc3RyICJDb3BpZSBkYW5zIGxhIHLpcG9uc2UgRE5TIGxlIHLpc3VsdGF0IGRlIGxhIHZhbGlkYXRpb24gRE5TU0VDIGVmZmVjdHXpZSBwYXIgbGVzIHNlcnZldXJzIEROUyBhbW9udHMuIgorCisjOiBvcHRpb24uYzo0NjYKK21zZ2lkICJBdHRlbXB0IHRvIGFsbG9jYXRlIHNlcXVlbnRpYWwgSVAgYWRkcmVzc2VzIHRvIERIQ1AgY2xpZW50cy4iCittc2dzdHIgIkVzc2FpZSBkJ2FsbG91ZXIgZGVzIGFkcmVzc2VzIElQIHPpcXVlbnRpZWxsZXMgYXV4IGNsaWVudHMgREhDUC4iCisKKyM6IG9wdGlvbi5jOjQ2NworbXNnaWQgIkNvcHkgY29ubmVjdGlvbi10cmFjayBtYXJrIGZyb20gcXVlcmllcyB0byB1cHN0cmVhbSBjb25uZWN0aW9ucy4iCittc2dzdHIgIkNvcGllIGxlcyBtYXJxdWVzIGRlIHN1aXZpIGRlIGNvbm5leGlvbiBwb3VyIGxlcyByZXF16nRlcyBhbW9udC4iCisKKyM6IG9wdGlvbi5jOjQ2OAorbXNnaWQgIkFsbG93IERIQ1AgY2xpZW50cyB0byBkbyB0aGVpciBvd24gREROUyB1cGRhdGVzLiIKK21zZ3N0ciAiQXV0b3Jpc2VyIGxlcyBjbGllbnRzIERIQ1Ag4CBmYWlyZSBsZXVycyBwcm9wcmVzIG1pc2VzIOAgam91ciBERE5TIChEeW5hbWljIEROUykiCisKKyM6IG9wdGlvbi5jOjQ2OQorbXNnaWQgIlNlbmQgcm91dGVyLWFkdmVydGlzZW1lbnRzIGZvciBpbnRlcmZhY2VzIGRvaW5nIERIQ1B2NiIKK21zZ3N0ciAiRW52b3llciBkZXMgYW5ub25jZXMgZGUgcm91dGV1cnMgcG91ciB0b3V0ZXMgbGVzIGludGVyZmFjZXMgZmFpc2FudCBkdSBESENQdjYiCisKKyM6IG9wdGlvbi5jOjQ3MAorbXNnaWQgIlNwZWNpZnkgRFVJRF9FTi10eXBlIERIQ1B2NiBzZXJ2ZXIgRFVJRCIKK21zZ3N0ciAiU3DpY2lmaWUgcG91ciBsZSBzZXJ2ZXVyIERIQ1B2NiB1biBpZGVudGlmaWFudCB1bmlxdWUgREhDUCAoRFVJRCkgYmFz6SBzdXIgdW4gbnVt6XJvIHVuaXF1ZSBkZSB2ZW5kZXVyIChEVUlEX0VOKSIKKworIzogb3B0aW9uLmM6NDcxCittc2dpZCAiU3BlY2lmeSBob3N0IChBL0FBQUEgYW5kIFBUUikgcmVjb3JkcyIKK21zZ3N0ciAiU3DpY2lmaWUgbGVzIGVucmVnaXN0cmVtZW50cyAoQS9BQUFBIGV0IFBUUikgZCd1biBo9HRlLiIKKworIzogb3B0aW9uLmM6NDcyCittc2dpZCAiU3BlY2lmeSBhcmJpdHJhcnkgRE5TIHJlc291cmNlIHJlY29yZCIKK21zZ3N0ciAiROlmaW5pZSB1bmUgcmVzb3VyY2UgRE5TIGQndW4gdHlwZSBzcOljaWZpcXVlIgorCisjOiBvcHRpb24uYzo0NzMKK21zZ2lkICJCaW5kIHRvIGludGVyZmFjZXMgaW4gdXNlIC0gY2hlY2sgZm9yIG5ldyBpbnRlcmZhY2VzIgorbXNnc3RyICJTZSBsaWUgYXV4IGludGVyZmFjZXMgcHLpZXhpc3RhbnRlcyAtIHbpcmlmaWUgbCdhcHBhcml0aW9uIGRlIG5vdXZlbGxlcyBpbnRlcmZhY2VzIgorCisjOiBvcHRpb24uYzo0NzQKK21zZ2lkICJFeHBvcnQgbG9jYWwgbmFtZXMgdG8gZ2xvYmFsIEROUyIKK21zZ3N0ciAiRXhwb3J0ZSBsZXMgbm9tcyBsb2NhdXggZGFucyBsZSBETlMgZ2xvYmFsIgorCisjOiBvcHRpb24uYzo0NzUKK21zZ2lkICJEb21haW4gdG8gZXhwb3J0IHRvIGdsb2JhbCBETlMiCittc2dzdHIgIkRvbWFpbmUg4CBleHBvcnRlciBkYW5zIGxlIEROUyBnbG9iYWwiCisKKyM6IG9wdGlvbi5jOjQ3NgorbXNnaWQgIlNldCBUVEwgZm9yIGF1dGhvcml0YXRpdmUgcmVwbGllcyIKK21zZ3N0ciAiQ29uZmlndXJlIGxhIGR1cullIGRlIHZpZSAoVGltZSBUbyBMaXZlKSBwb3VyIGxlcyBy6XBvbnNlcyBmYWlzYW50IGF1dG9yaXTpIgorCisjOiBvcHRpb24uYzo0NzcKKyMsIGZ1enp5Cittc2dpZCAiU2V0IGF1dGhvcml0YXRpdmUgem9uZSBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiQ29uZmlndXJlIGxlcyBpbmZvcm1hdGlvbnMgcG91ciB1bmUgem9uZSBkZSBub20gZmFpc2FudCBhdXRvcml06SIKKworIzogb3B0aW9uLmM6NDc4Cittc2dpZCAiU2Vjb25kYXJ5IGF1dGhvcml0YXRpdmUgbmFtZXNlcnZlcnMgZm9yIGZvcndhcmQgZG9tYWlucyIKK21zZ3N0ciAiU2VydmV1cnMgZGUgbm9tcyBzZWNvbmRhaXJlcyBmYWlzYW50IGF1dG9yaXTpIHBvdXIgbGVzIGRvbWFpbmVzIGTpbOlndelzIgorCisjOiBvcHRpb24uYzo0NzkKK21zZ2lkICJQZWVycyB3aGljaCBhcmUgYWxsb3dlZCB0byBkbyB6b25lIHRyYW5zZmVyIgorbXNnc3RyICJQYWlycyBhdXRvcmlz6XMg4CBmYWlyZSBkZXMgdHJhbnNmZXJ0cyBkZSB6b25lIgorCisjOiBvcHRpb24uYzo0ODAKK21zZ2lkICJTcGVjaWZ5IGlwc2V0cyB0byB3aGljaCBtYXRjaGluZyBkb21haW5zIHNob3VsZCBiZSBhZGRlZCIKK21zZ3N0ciAiU3DpY2lmaWUgbGVzIGlwc2V0cyBhdXhxdWVscyBsZXMgZG9tYWluZXMgY29ycmVzcG9uZGFudHMgZG9pdmVudC3qdHJlIGFqb3V06XMiCisKKyM6IG9wdGlvbi5jOjQ4MQorIywgZnV6enkKK21zZ2lkICJTcGVjaWZ5IGEgZG9tYWluIGFuZCBhZGRyZXNzIHJhbmdlIGZvciBzeW50aGVzaXNlZCBuYW1lcyIKK21zZ3N0ciAiU3DpY2lmaWUgdW4gZG9tYWluZSBldCB1bmUgcGxhZ2UgZCdhZHJlc3NlcyBwb3VyIGxlcyBub21zIGF1dG8tZ+lu6XLpcyIKKworIzogb3B0aW9uLmM6NDgyCittc2dpZCAiQWN0aXZhdGUgRE5TU0VDIHZhbGlkYXRpb24iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDgzCittc2dpZCAiU3BlY2lmeSB0cnVzdCBhbmNob3Iga2V5IGRpZ2VzdC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDg0Cittc2dpZCAiRGlzYWJsZSB1cHN0cmVhbSBjaGVja2luZyBmb3IgRE5TU0VDIGRlYnVnZ2luZy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDg1Cittc2dpZCAiRW5zdXJlIGFuc3dlcnMgd2l0aG91dCBETlNTRUMgYXJlIGluIHVuc2lnbmVkIHpvbmVzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0ODYKK21zZ2lkICJEb24ndCBjaGVjayBETlNTRUMgc2lnbmF0dXJlIHRpbWVzdGFtcHMgdW50aWwgZmlyc3QgY2FjaGUtcmVsb2FkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ4NworbXNnaWQgIlRpbWVzdGFtcCBmaWxlIHRvIHZlcmlmeSBzeXN0ZW0gY2xvY2sgZm9yIEROU1NFQyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0ODkKK21zZ2lkICJTcGVjaWZ5IERIQ1B2NiBwcmVmaXggY2xhc3MiCittc2dzdHIgIlNw6WNpZmllIGxlIHBy6WZpeGUgZGUgY2xhc3NlIERIQ1B2NiIKKworIzogb3B0aW9uLmM6NDkxCittc2dpZCAiU2V0IE1UVSwgcHJpb3JpdHksIHJlc2VuZC1pbnRlcnZhbCBhbmQgcm91dGVyLWxpZmV0aW1lIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ5MgorbXNnaWQgIkRvIG5vdCBsb2cgcm91dGluZSBESENQLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0OTMKK21zZ2lkICJEbyBub3QgbG9nIHJvdXRpbmUgREhDUHY2LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0OTQKK21zZ2lkICJEbyBub3QgbG9nIFJBLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0OTUKK21zZ2lkICJBY2NlcHQgcXVlcmllcyBvbmx5IGZyb20gZGlyZWN0bHktY29ubmVjdGVkIG5ldHdvcmtzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0OTYKK21zZ2lkICJEZXRlY3QgYW5kIHJlbW92ZSBETlMgZm9yd2FyZGluZyBsb29wcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDk3Cittc2dpZCAiSWdub3JlIEROUyByZXNwb25zZXMgY29udGFpbmluZyBpcGFkZHIuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ5OAorbXNnaWQgIlNldCBUVEwgaW4gRE5TIHJlc3BvbnNlcyB3aXRoIERIQ1AtZGVyaXZlZCBhZGRyZXNzZXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ5OQorbXNnaWQgIkRlbGF5IERIQ1AgcmVwbGllcyBmb3IgYXQgbGVhc3QgbnVtYmVyIG9mIHNlY29uZHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjcwMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6IGRuc21hc3EgW29wdGlvbnNdXG4iCisiXG4iCittc2dzdHIgIiIKKyJVc2FnZSA6IGRuc21hc3EgW29wdGlvbnNdXG4iCisiXG4iCisKKyM6IG9wdGlvbi5jOjcwNQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2Ugc2hvcnQgb3B0aW9ucyBvbmx5IG9uIHRoZSBjb21tYW5kIGxpbmUuXG4iCittc2dzdHIgIlV0aWxpc2V6IGxlcyBvcHRpb25zIGNvdXJ0ZXMgdW5pcXVlbWVudCBzdXIgbGEgbGlnbmUgZGUgY29tbWFuZGUuXG4iCisKKyM6IG9wdGlvbi5jOjcwNworIywgYy1mb3JtYXQKK21zZ2lkICJWYWxpZCBvcHRpb25zIGFyZTpcbiIKK21zZ3N0ciAiTGVzIG9wdGlvbnMgdmFsaWRlcyBzb250IDpcbiIKKworIworIzogb3B0aW9uLmM6NzU0IG9wdGlvbi5jOjg2OAorbXNnaWQgImJhZCBhZGRyZXNzIgorbXNnc3RyICJtYXV2YWlzZSBhZHJlc3NlIgorCisjOiBvcHRpb24uYzo3Nzkgb3B0aW9uLmM6NzgzCittc2dpZCAiYmFkIHBvcnQiCittc2dzdHIgIm51belybyBkZSBwb3J0IGluY29ycmVjdCIKKworIzogb3B0aW9uLmM6Nzk3IG9wdGlvbi5jOjgyNiBvcHRpb24uYzo4NjEKK21zZ2lkICJpbnRlcmZhY2UgYmluZGluZyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJhc3NvY2lhdGlvbiBkJ2ludGVyZmFjZSBub24gc3VwcG9ydOllIgorCisjOiBvcHRpb24uYzo4MjEgb3B0aW9uLmM6ODU2Cittc2dpZCAiaW50ZXJmYWNlIGNhbiBvbmx5IGJlIHNwZWNpZmllZCBvbmNlIgorbXNnc3RyICIiCisKKyMKKyM6IG9wdGlvbi5jOjgzNSBvcHRpb24uYzozODAwCittc2dpZCAiYmFkIGludGVyZmFjZSBuYW1lIgorbXNnc3RyICJub20gZCdpbnRlcmZhY2UgaW52YWxpZGUiCisKKyM6IG9wdGlvbi5jOjEwNjIKK21zZ2lkICJ1bnN1cHBvcnRlZCBlbmNhcHN1bGF0aW9uIGZvciBJUHY2IG9wdGlvbiIKK21zZ3N0ciAiZW5jYXBzdWxhdGlvbiBkJ29wdGlvbiBub24gc3VwcG9ydOllIHBvdXIgSVB2NiIKKworIzogb3B0aW9uLmM6MTA3NgorbXNnaWQgImJhZCBkaGNwLW9wdGlvbiIKK21zZ3N0ciAibWF1dmFpc2UgdmFsZXVyIGRlICdkaGNwLW9wdGlvbiciCisKKyMKKyM6IG9wdGlvbi5jOjExNDQKK21zZ2lkICJiYWQgSVAgYWRkcmVzcyIKK21zZ3N0ciAibWF1dmFpc2UgYWRyZXNzZSBJUCIKKworIworIzogb3B0aW9uLmM6MTE0NyBvcHRpb24uYzoxMjg2IG9wdGlvbi5jOjMwNzAKK21zZ2lkICJiYWQgSVB2NiBhZGRyZXNzIgorbXNnc3RyICJtYXV2YWlzZSBhZHJlc3NlIElQdjYiCisKKyMKKyM6IG9wdGlvbi5jOjEyNDAKKyMsIGZ1enp5Cittc2dpZCAiYmFkIElQdjQgYWRkcmVzcyIKK21zZ3N0ciAibWF1dmFpc2UgYWRyZXNzZSBJUHY2IgorCisjOiBvcHRpb24uYzoxMzEzIG9wdGlvbi5jOjE0MDcKK21zZ2lkICJiYWQgZG9tYWluIGluIGRoY3Atb3B0aW9uIgorbXNnc3RyICJtYXV2YWlzIGRvbWFpbmUgZGFucyBkaGNwLW9wdGlvbiIKKworIzogb3B0aW9uLmM6MTQ0NQorbXNnaWQgImRoY3Atb3B0aW9uIHRvbyBsb25nIgorbXNnc3RyICJkaGNwLW9wdGlvbiB0cm9wIGxvbmciCisKKyM6IG9wdGlvbi5jOjE0NTIKK21zZ2lkICJpbGxlZ2FsIGRoY3AtbWF0Y2giCittc2dzdHIgInZhbGV1ciBpbGzpZ2FsZSBwb3VyICdkaGNwLW1hdGNoJyIKKworIzogb3B0aW9uLmM6MTUxNAorbXNnaWQgImlsbGVnYWwgcmVwZWF0ZWQgZmxhZyIKK21zZ3N0ciAiVW5lIG9wdGlvbiBuZSBwb3V2YW50IOp0cmUgc3DpY2lmaekgcXUndW5lIHNldWxlIGZvaXMg4CDpdOkgZG9ubullIHBsdXNpZXVycyBmb2lzIgorCisjOiBvcHRpb24uYzoxNTIyCittc2dpZCAiaWxsZWdhbCByZXBlYXRlZCBrZXl3b3JkIgorbXNnc3RyICJNb3QtY2xlZiBuZSBwb3V2YW50IOp0cmUgculw6XTpIgorCisjOiBvcHRpb24uYzoxNTkzIG9wdGlvbi5jOjQ0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGFjY2VzcyBkaXJlY3RvcnkgJXM6ICVzIgorbXNnc3RyICJOZSBwZXV0IHBhcyBsaXJlIGxlIHLpcGVydG9pcmUgJXMgOiAlcyIKKworIzogb3B0aW9uLmM6MTYzOSB0ZnRwLmM6NTM3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBhY2Nlc3MgJXM6ICVzIgorbXNnc3RyICJOZSBwZXV0IHBhcyBsaXJlICVzIDogJXMiCisKKyM6IG9wdGlvbi5jOjE3MjcKK21zZ2lkICJzZXR0aW5nIGxvZyBmYWNpbGl0eSBpcyBub3QgcG9zc2libGUgdW5kZXIgQW5kcm9pZCIKK21zZ3N0ciAiU291cyBhbmRyb2lkLCBpbXBvc3NpYmxlIGRlIHBvc2l0aW9ubmVyIGxhIGNpYmxlIChmYWNpbGl0eSkgcG91ciBsZXMgdHJhY2VzIChsb2dzKS4iCisKKyM6IG9wdGlvbi5jOjE3MzYKK21zZ2lkICJiYWQgbG9nIGZhY2lsaXR5IgorbXNnc3RyICJNYXV2YWlzZSBjaWJsZSAoZmFjaWxpdHkpIHBvdXIgbGVzIHRyYWNlcy4iCisKKyM6IG9wdGlvbi5jOjE3ODkKK21zZ2lkICJiYWQgTVggcHJlZmVyZW5jZSIKK21zZ3N0ciAicHLpZmVyZW5jZSBNWCBpbmNvcnJlY3RlIgorCisjOiBvcHRpb24uYzoxNzk0Cittc2dpZCAiYmFkIE1YIG5hbWUiCittc2dzdHIgIm5vbSBNWCBpbmNvcnJlY3QiCisKKyM6IG9wdGlvbi5jOjE4MDgKK21zZ2lkICJiYWQgTVggdGFyZ2V0IgorbXNnc3RyICJ2YWxldXIgTVggY2libGUgaW5jb3JyZWN0ZSIKKworIzogb3B0aW9uLmM6MTgyMAorbXNnaWQgImNhbm5vdCBydW4gc2NyaXB0cyB1bmRlciB1Q2xpbnV4IgorbXNnc3RyICJuZSBwZXV0IGV46WN1dGVyIGRlIHNjcmlwdCBzb3VzIHVDbGludXgiCisKKyM6IG9wdGlvbi5jOjE4MjIKK21zZ2lkICJyZWNvbXBpbGUgd2l0aCBIQVZFX1NDUklQVCBkZWZpbmVkIHRvIGVuYWJsZSBsZWFzZS1jaGFuZ2Ugc2NyaXB0cyIKK21zZ3N0ciAicmVjb21waWxlciBlbiBk6WZpbmlzc2FudCBIQVZFX1NDUklQVCBwb3VyIHBlcm1ldHRyZSBsJ2V46WN1dGlvbiBkZSBzY3JpcHRzIHNoZWxsIGF1IGNoYW5nZW1lbnQgZGUgYmFpbCAobGVhc2UtY2hhbmdlKSIKKworIzogb3B0aW9uLmM6MTgyNgorbXNnaWQgInJlY29tcGlsZSB3aXRoIEhBVkVfTFVBU0NSSVBUIGRlZmluZWQgdG8gZW5hYmxlIEx1YSBzY3JpcHRzIgorbXNnc3RyICJyZWNvbXBpbGVyIGVuIGTpZmluaXNzYW50IEhBVkVfTFVBU0NSSVBUIHBvdXIgcGVybWV0dHJlIGwnZXjpY3V0aW9uIGRlIHNjcmlwdHMgTFVBIGF1IGNoYW5nZW1lbnQgZGUgYmFpbCAobGVhc2UtY2hhbmdlKSIKKworIzogb3B0aW9uLmM6MjA5NSBvcHRpb24uYzoyMTA2IG9wdGlvbi5jOjIxNDMgb3B0aW9uLmM6MjE5OSBvcHRpb24uYzoyNDgyCittc2dpZCAiYmFkIHByZWZpeCIKK21zZ3N0ciAibWF1dmFpcyBwculmaXhlIgorCisjOiBvcHRpb24uYzoyNTA0Cittc2dpZCAicmVjb21waWxlIHdpdGggSEFWRV9JUFNFVCBkZWZpbmVkIHRvIGVuYWJsZSBpcHNldCBkaXJlY3RpdmVzIgorbXNnc3RyICJyZWNvbXBpbGVyIGVuIGTpZmluaXNzYW50IEhBVkVfSVBTRVQgcG91ciBwZXJtZXR0cmUgbCd1dGlsaXNhdGlvbiBkZSBkaXJlY3RpdmVzIGRlIGdyb3VwZXMgZCdJUCAoSVBzZXQpIgorCisjCisjOiBvcHRpb24uYzoyNzEzCittc2dpZCAiYmFkIHBvcnQgcmFuZ2UiCittc2dzdHIgImdhbW1lIGRlIHBvcnRzIGluY29ycmVjdGUiCisKKyM6IG9wdGlvbi5jOjI3MzgKK21zZ2lkICJiYWQgYnJpZGdlLWludGVyZmFjZSIKK21zZ3N0ciAiaW50ZXJmYWNlLXBvbnQgaW5jb3JyZWN0ZSIKKworIzogb3B0aW9uLmM6Mjc5OAorbXNnaWQgIm9ubHkgb25lIHRhZyBhbGxvd2VkIgorbXNnc3RyICJ1bmUgc2V1bGUg6XRpcXVldHRlIGVzdCBhdXRvcmlz6WUiCisKKyM6IG9wdGlvbi5jOjI4MTggb3B0aW9uLmM6MjgzMCBvcHRpb24uYzoyOTM5IG9wdGlvbi5jOjI5NDQgb3B0aW9uLmM6Mjk4MworbXNnaWQgImJhZCBkaGNwLXJhbmdlIgorbXNnc3RyICJwbGFnZSBkJ2FkcmVzc2VzIERIQ1AgKGRoY3AtcmFuZ2UpIGluY29ycmVjdGUiCisKKyM6IG9wdGlvbi5jOjI4NDUKK21zZ2lkICJpbmNvbnNpc3RlbnQgREhDUCByYW5nZSIKK21zZ3N0ciAicGxhZ2UgZCdhZHJlc3NlcyBESENQIGluY29o6XJlbnRlIgorCisjOiBvcHRpb24uYzoyOTA3Cittc2dpZCAicHJlZml4IGxlbmd0aCBtdXN0IGJlIGV4YWN0bHkgNjQgZm9yIFJBIHN1Ym5ldHMiCittc2dzdHIgImxhIHRhaWxsZSBkdSBwculmaXhlIGRvaXQg6nRyZSBleGFjdGVtZW50IDY0IHBvdXIgbGVzIHNvdXMtculzZWF1eCBkJ2Fubm9uY2VzIGRlIHJvdXRldXJzIChSQSkiCisKKyM6IG9wdGlvbi5jOjI5MDkKK21zZ2lkICJwcmVmaXggbGVuZ3RoIG11c3QgYmUgZXhhY3RseSA2NCBmb3Igc3VibmV0IGNvbnN0cnVjdG9ycyIKK21zZ3N0ciAibGEgdGFpbGxlIGR1IHBy6WZpeGUgZG9pdCDqdHJlIGV4YWN0ZW1lbnQgNjQgcG91ciBsZSBjb25zdHJ1Y3RldXIgZGUgc291cy1y6XNlYXV4IgorCisjOiBvcHRpb24uYzoyOTEzCittc2dpZCAicHJlZml4IGxlbmd0aCBtdXN0IGJlIGF0IGxlYXN0IDY0IgorbXNnc3RyICJsYSB0YWlsbGUgZGUgcHLpZml4ZSBkb2l0IOp0cmUgYXUgbWluaW11bSA2NCIKKworIzogb3B0aW9uLmM6MjkxNgorbXNnaWQgImluY29uc2lzdGVudCBESENQdjYgcmFuZ2UiCittc2dzdHIgInBsYWdlIGQnYWRyZXNzZXMgREhDUHY2IGluY29o6XJlbnRlIgorCisjOiBvcHRpb24uYzoyOTI3Cittc2dpZCAicHJlZml4IG11c3QgYmUgemVybyB3aXRoIFwiY29uc3RydWN0b3I6XCIgYXJndW1lbnQiCittc2dzdHIgImxlIHBy6WZpeGUgZG9pdCBhdm9pciB1bmUgdGFpbGxlIGRlIDAgbG9yc3F1ZSBsJ2FyZ3VtZW50IFwiY29uc3RydWN0b3I6XCIgZXN0IHV0aWxpc+kiCisKKyM6IG9wdGlvbi5jOjMwNDAgb3B0aW9uLmM6MzA4OAorbXNnaWQgImJhZCBoZXggY29uc3RhbnQiCittc2dzdHIgIm1hdXZhaXNlIGNvbnN0YW50ZSBoZXhhZGVjaW1hbGUiCisKKyM6IG9wdGlvbi5jOjMwNjIKK21zZ2lkICJjYW5ub3QgbWF0Y2ggdGFncyBpbiAtLWRoY3AtaG9zdCIKK21zZ3N0ciAiTCd1dGlsaXNhdGlvbiBkZSBsYWJlbHMgZXN0IHByb2hpYullIGRhbnMgLS1kaGNwLWhvc3QiCisKKyM6IG9wdGlvbi5jOjMxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIGRoY3AtaG9zdCBJUCBhZGRyZXNzICVzIgorbXNnc3RyICJhZHJlc3NlIElQIGRoY3AtaG9zdCBkdXBsaXF16WUgZGFucyAlcy4iCisKKyMKKyM6IG9wdGlvbi5jOjMxNjgKK21zZ2lkICJiYWQgREhDUCBob3N0IG5hbWUiCittc2dzdHIgIm5vbSBkJ2j0dGUgREhDUCBpbmNvcnJlY3QiCisKKyM6IG9wdGlvbi5jOjMyNTAKK21zZ2lkICJiYWQgdGFnLWlmIgorbXNnc3RyICJtYXV2YWlzZSDpdGlxdWV0dGUgdGFnLWlmIgorCisjOiBvcHRpb24uYzozNjA3IG9wdGlvbi5jOjQwMzAKK21zZ2lkICJpbnZhbGlkIHBvcnQgbnVtYmVyIgorbXNnc3RyICJudW3pcm8gZGUgcG9ydCBpbnZhbGlkZSIKKworIworIzogb3B0aW9uLmM6MzY2OQorbXNnaWQgImJhZCBkaGNwLXByb3h5IGFkZHJlc3MiCittc2dzdHIgImFkcmVzc2UgZGhjcC1wcm94eSBpbmNvcnJlY3RlIgorCisjOiBvcHRpb24uYzozNjk1Cittc2dpZCAiQmFkIGRoY3AtcmVsYXkiCittc2dzdHIgInZhbGV1ciBpbmNvcnJlY3RlIHBvdXIgbGUgcmVsYWlzIERIQ1AgKGRoY3AtcmVsYXkpIgorCisjOiBvcHRpb24uYzozNzM2Cittc2dpZCAiYmFkIFJBLXBhcmFtcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNzQ1Cittc2dpZCAiYmFkIERVSUQiCittc2dzdHIgIm1hdXZhaXMgaWRlbnRpZmlhbnQgdW5pcXVlIERIQ1AgKERVSUQpIgorCisjCisjOiBvcHRpb24uYzozNzg3Cittc2dpZCAiaW52YWxpZCBhbGlhcyByYW5nZSIKK21zZ3N0ciAicG9pZHMgaW52YWxpZGUiCisKKyM6IG9wdGlvbi5jOjM4NDEgb3B0aW9uLmM6Mzg1MworbXNnaWQgImJhZCBDTkFNRSIKK21zZ3N0ciAibWF1dmFpcyBDTkFNRSIKKworIzogb3B0aW9uLmM6Mzg1NworbXNnaWQgImR1cGxpY2F0ZSBDTkFNRSIKK21zZ3N0ciAiY2UgQ05BTUUgZXhpc3RlIGTpamEiCisKKyMKKyM6IG9wdGlvbi5jOjM4ODAKK21zZ2lkICJiYWQgUFRSIHJlY29yZCIKK21zZ3N0ciAibWF1dmFpcyBjaGFtcCBQVFIiCisKKyMKKyM6IG9wdGlvbi5jOjM5MTEKK21zZ2lkICJiYWQgTkFQVFIgcmVjb3JkIgorbXNnc3RyICJtYXV2YWlzIGNoYW1wIE5BUFRSIgorCisjCisjOiBvcHRpb24uYzozOTQ1Cittc2dpZCAiYmFkIFJSIHJlY29yZCIKK21zZ3N0ciAibWF1dmFpcyBlbnJlZ2lzdHJlbWVudCBSUiIKKworIzogb3B0aW9uLmM6Mzk3NQorbXNnaWQgImJhZCBUWFQgcmVjb3JkIgorbXNnc3RyICJjaGFtcCBUWFQgaW52YWxpZGUiCisKKyM6IG9wdGlvbi5jOjQwMTYKK21zZ2lkICJiYWQgU1JWIHJlY29yZCIKK21zZ3N0ciAiY2hhbXAgU1JWIGludmFsaWRlIgorCisjOiBvcHRpb24uYzo0MDIzCittc2dpZCAiYmFkIFNSViB0YXJnZXQiCittc2dzdHIgImNpYmxlIFNSViBpbnZhbGlkZSIKKworIzogb3B0aW9uLmM6NDAzNworbXNnaWQgImludmFsaWQgcHJpb3JpdHkiCittc2dzdHIgInByaW9yaXTpIGludmFsaWRlIgorCisjOiBvcHRpb24uYzo0MDQwCittc2dpZCAiaW52YWxpZCB3ZWlnaHQiCittc2dzdHIgInBvaWRzIGludmFsaWRlIgorCisjCisjOiBvcHRpb24uYzo0MDY0Cittc2dpZCAiQmFkIGhvc3QtcmVjb3JkIgorbXNnc3RyICJtYXV2YWlzIGNoYW1wIGhvc3QtcmVjb3JkIgorCisjOiBvcHRpb24uYzo0MDg4Cittc2dpZCAiQmFkIG5hbWUgaW4gaG9zdC1yZWNvcmQiCittc2dzdHIgIm1hdXZhaXMgbm9tIGRhbnMgbGUgY2hhbXAgaG9zdC1yZWNvcmQiCisKKyMKKyM6IG9wdGlvbi5jOjQxNTMKKyMsIGZ1enp5Cittc2dpZCAiYmFkIHRydXN0IGFuY2hvciIKK21zZ3N0ciAiZ2FtbWUgZGUgcG9ydHMgaW5jb3JyZWN0ZSIKKworIzogb3B0aW9uLmM6NDE2NworbXNnaWQgImJhZCBIRVggaW4gdHJ1c3QgYW5jaG9yIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQxNzcKKyMsIGZ1enp5Cittc2dpZCAidW5zdXBwb3J0ZWQgb3B0aW9uIChjaGVjayB0aGF0IGRuc21hc3Egd2FzIGNvbXBpbGVkIHdpdGggREhDUC9URlRQL0ROU1NFQy9EQnVzIHN1cHBvcnQpIgorbXNnc3RyICJvcHRpb24gbm9uIHN1cHBvcnTpZSAodulyaWZpZXIgcXVlIERuc21hc3EgYSDpdOkgY29tcGls6SBhdmVjIGxlIHN1cHBvcnQgREhDUC9URlRQL0RCdXMpIgorCisjOiBvcHRpb24uYzo0MjM3Cittc2dpZCAibWlzc2luZyBcIiIKK21zZ3N0ciAiaWwgbWFucXVlIFwiIgorCisjOiBvcHRpb24uYzo0Mjk0Cittc2dpZCAiYmFkIG9wdGlvbiIKK21zZ3N0ciAibWF1dmFpc2Ugb3B0aW9uIgorCisjOiBvcHRpb24uYzo0Mjk2Cittc2dpZCAiZXh0cmFuZW91cyBwYXJhbWV0ZXIiCittc2dzdHIgInBhcmFt6HRyZSBlbiB0cm9wIgorCisjOiBvcHRpb24uYzo0Mjk4Cittc2dpZCAibWlzc2luZyBwYXJhbWV0ZXIiCittc2dzdHIgInBhcmFt6HRyZSBtYW5xdWFudCIKKworIzogb3B0aW9uLmM6NDMwMAorIywgZnV6enkKK21zZ2lkICJpbGxlZ2FsIG9wdGlvbiIKK21zZ3N0ciAibWF1dmFpc2Ugb3B0aW9uIgorCisjOiBvcHRpb24uYzo0MzA3Cittc2dpZCAiZXJyb3IiCittc2dzdHIgImVycmV1ciIKKworIzogb3B0aW9uLmM6NDMwOQorIywgYy1mb3JtYXQKK21zZ2lkICIgYXQgbGluZSAlZCBvZiAlcyIKK21zZ3N0ciAi4CBsYSBsaWduZSAlZCBkZSAlcyIKKworIzogb3B0aW9uLmM6NDMyNCBvcHRpb24uYzo0NTcxIG9wdGlvbi5jOjQ2MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCAlcyIKK21zZ3N0ciAiTGVjdHVyZSBkZSAlcyIKKworIzogb3B0aW9uLmM6NDM4NyBvcHRpb24uYzo0NTEwIHRmdHAuYzo3MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJXM6ICVzIgorbXNnc3RyICJOZSBwZXV0IHBhcyBsaXJlICVzIDogJXMiCisKKyM6IG9wdGlvbi5jOjQ2NzYKK21zZ2lkICJqdW5rIGZvdW5kIGluIGNvbW1hbmQgbGluZSIKK21zZ3N0ciAibGEgbGlnbmUgZGUgY29tbWFuZGUgY29udGllbnQgZGVzIOls6W1lbnRzIGluZOlzaXJhYmxlcyBvdSBpbmNvbXBy6WhlbnNpYmxlcyIKKworIzogb3B0aW9uLmM6NDcxMQorIywgYy1mb3JtYXQKK21zZ2lkICJEbnNtYXNxIHZlcnNpb24gJXMgICVzXG4iCittc2dzdHIgIlZlcnNpb24gZGUgRG5zbWFzcSAlcyAgJXNcbiIKKworIzogb3B0aW9uLmM6NDcxMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ29tcGlsZSB0aW1lIG9wdGlvbnM6ICVzXG4iCisiXG4iCittc2dzdHIgIiIKKyJPcHRpb25zIOAgbGEgY29tcGlsYXRpb24gJXNcbiIKKyJcbiIKKworIzogb3B0aW9uLmM6NDcxMworIywgYy1mb3JtYXQKK21zZ2lkICJUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS5cbiIKK21zZ3N0ciAiQ2UgbG9naWNpZWwgZXN0IGZvdXJuaSBzYW5zIEFVQ1VORSBHQVJBTlRJRS5cbiIKKworIzogb3B0aW9uLmM6NDcxNAorIywgYy1mb3JtYXQKK21zZ2lkICJEbnNtYXNxIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0XG4iCittc2dzdHIgIkRuc21hc3EgZXN0IHVuIGxvZ2ljaWVsIGxpYnJlLCBpbCB2b3VzIGVzdCBwZXJtaXMgZGUgbGUgcmVkaXN0cmlidWVyXG4iCisKKyM6IG9wdGlvbi5jOjQ3MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyIG9yIDMuXG4iCittc2dzdHIgInNvdXMgbGVzIHRlcm1lcyBkZSBsYSBsaWNlbmNlIEdQTCAoR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UpLCB2ZXJzaW9uIDIgb3UgMy5cbiIKKworIzogb3B0aW9uLmM6NDcyNgorbXNnaWQgInRyeSAtLWhlbHAiCittc2dzdHIgImVzc2F5ZXogYXZlYyAtLWhlbHAiCisKKyM6IG9wdGlvbi5jOjQ3MjgKK21zZ2lkICJ0cnkgLXciCittc2dzdHIgImVzc2F5ZXogYXZlYyAtdyIKKworIzogb3B0aW9uLmM6NDczMAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29tbWFuZCBsaW5lIG9wdGlvbnM6ICVzIgorbXNnc3RyICJtYXV2YWlzZXMgb3B0aW9ucyBlbiBsaWduZSBkZSBjb21tYW5kZSA6ICVzLiIKKworIzogb3B0aW9uLmM6NDc5OAorIywgYy1mb3JtYXQKK21zZ2lkICJDTkFNRSBsb29wIGludm9sdmluZyAlcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0ODM0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBnZXQgaG9zdC1uYW1lOiAlcyIKK21zZ3N0ciAibmUgcGV1dCBwYXMgb2J0ZW5pciBsZSBub20gZGUgbGEgbWFjaGluZSA6ICVzIgorCisjOiBvcHRpb24uYzo0ODYyCittc2dpZCAib25seSBvbmUgcmVzb2x2LmNvbmYgZmlsZSBhbGxvd2VkIGluIG5vLXBvbGwgbW9kZS4iCittc2dzdHIgInNldWwgdW4gZmljaGllciByZXNvbHYuY29uZiBlc3QgYXV0b3Jpc+kgZGFucyBsZSBtb2RlIG5vLXBvbGwiCisKKyM6IG9wdGlvbi5jOjQ4NzIKK21zZ2lkICJtdXN0IGhhdmUgZXhhY3RseSBvbmUgcmVzb2x2LmNvbmYgdG8gcmVhZCBkb21haW4gZnJvbS4iCittc2dzdHIgInVuIGZpY2hpZXIgcmVzb2x2LmNvbmYgKGV0IHVuIHNldWwpIGVzdCBu6WNlc3NhaXJlIHBvdXIgeSBy6WN1cGVyZXIgbGUgbm9tIGRlIGRvbWFpbmUuIgorCisjOiBvcHRpb24uYzo0ODc1IG5ldHdvcmsuYzoxNjEyIGRoY3AuYzo4MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgJXM6ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgJXMgOiAlcyIKKworIzogb3B0aW9uLmM6NDg5MgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzZWFyY2ggZGlyZWN0aXZlIGZvdW5kIGluICVzIgorbXNnc3RyICJwYXMgZGUgZGlyZWN0aXZlIGRlIHJlY2hlcmNoZSB0cm91dullIGRhbnMgJXMiCisKKyM6IG9wdGlvbi5jOjQ5MTMKK21zZ2lkICJ0aGVyZSBtdXN0IGJlIGEgZGVmYXVsdCBkb21haW4gd2hlbiAtLWRoY3AtZnFkbiBpcyBzZXQiCittc2dzdHIgInVuIGRvbWFpbmUgcGFyIGTpZmF1dCBkb2l0IOp0cmUgc3DpY2lmaekgbG9yc3F1ZSBsJ29wdGlvbiAtLWRoY3AtZnFkbiBlc3QgdXRpbGlz6WUiCisKKyM6IG9wdGlvbi5jOjQ5MjIKK21zZ2lkICJzeW50YXggY2hlY2sgT0siCittc2dzdHIgInbpcmlmaWNhdGlvbiBkZSBzeW50YXhlIE9LIgorCisjOiBmb3J3YXJkLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZW5kIHBhY2tldDogJXMiCittc2dzdHIgImltcG9zc2libGUgZCdlbnZveWVyIGxlIHBhcXVldCA6ICVzIgorCisjOiBmb3J3YXJkLmM6NTk3Cittc2dpZCAiZGlzY2FyZGluZyBETlMgcmVwbHk6IHN1Ym5ldCBvcHRpb24gbWlzbWF0Y2giCittc2dzdHIgIiIKKworIzogZm9yd2FyZC5jOjY1MQorIywgYy1mb3JtYXQKK21zZ2lkICJuYW1lc2VydmVyICVzIHJlZnVzZWQgdG8gZG8gYSByZWN1cnNpdmUgcXVlcnkiCittc2dzdHIgImxlIHNlcnZldXIgZGUgbm9tICVzIGEgcmVmdXPpIGRlIGZhaXJlIHVuZSByZWNoZXJjaGUgculjdXJzaXZlIgorCisjOiBmb3J3YXJkLmM6NjgzCisjLCBjLWZvcm1hdAorbXNnaWQgInBvc3NpYmxlIEROUy1yZWJpbmQgYXR0YWNrIGRldGVjdGVkOiAlcyIKK21zZ3N0ciAiZOl0ZWN0aW9uIGQndW5lIHBvc3NpYmxlIGF0dGFxdWUgZGUgdHlwZSBETlMtcmViaW5kOiAlcyIKKworIzogZm9yd2FyZC5jOjEyNDQgZm9yd2FyZC5jOjE2ODEKK21zZ2lkICJJZ25vcmluZyBxdWVyeSBmcm9tIG5vbi1sb2NhbCBuZXR3b3JrIgorbXNnc3RyICIiCisKKyM6IGZvcndhcmQuYzoyMTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgRE5TIHF1ZXJpZXMgcmVhY2hlZCAobWF4OiAlZCkiCittc2dzdHIgIk5vbWJyZSBtYXhpbXVtIGRlIHJlcXXqdGVzIEROUyBjb25jdXJyZW50ZXMgYXR0ZWludCAobWF4aW11bSA6ICVkKS4iCisKKyM6IG5ldHdvcmsuYzo3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBsaXN0ZW5pbmcgc29ja2V0IGZvciAlczogJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgY3LpZXIgdW5lIHNvY2tldCBkJ+ljb3V0ZSBwb3VyICVzIDogJXMiCisKKyM6IG5ldHdvcmsuYzoxMDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkxPVUQgV0FSTklORzogbGlzdGVuaW5nIG9uICVzIG1heSBhY2NlcHQgcmVxdWVzdHMgdmlhIGludGVyZmFjZXMgb3RoZXIgdGhhbiAlcyIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6MTAzOAorbXNnaWQgIkxPVUQgV0FSTklORzogdXNlIC0tYmluZC1keW5hbWljIHJhdGhlciB0aGFuIC0tYmluZC1pbnRlcmZhY2VzIHRvIGF2b2lkIEROUyBhbXBsaWZpY2F0aW9uIGF0dGFja3MgdmlhIHRoZXNlIGludGVyZmFjZShzKSIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6MTA0NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogdXNpbmcgaW50ZXJmYWNlICVzIGluc3RlYWQiCittc2dzdHIgImF0dGVudGlvbiA6IGwnaW50ZXJmYWNlICVzIG4nZXhpc3RlIHBhcyBhY3R1ZWxsZW1lbnQiCisKKyM6IG5ldHdvcmsuYzoxMDU2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBubyBhZGRyZXNzZXMgZm91bmQgZm9yIGludGVyZmFjZSAlcyIKK21zZ3N0ciAidXRpbGlzZSBsZXMgYWRyZXNzZXMgbG9jYWxlcyBzZXVsZW1lbnQgcG91ciAlcyAlcyIKKworIzogbmV0d29yay5jOjExMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW50ZXJmYWNlICVzIGZhaWxlZCB0byBqb2luIERIQ1B2NiBtdWx0aWNhc3QgZ3JvdXA6ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGZhaXJlIHJlam9pbmRyZSBsJ2ludGVyZmFjZSAlcyBkYW5zIGxlIGdyb3VwZSBtdWx0aWNhc3QgREhDUHY2ICVzIgorCisjOiBuZXR3b3JrLmM6MTExOQorbXNnaWQgInRyeSBpbmNyZWFzaW5nIC9wcm9jL3N5cy9uZXQvY29yZS9vcHRtZW1fbWF4IgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxMzIyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBiaW5kIHNlcnZlciBzb2NrZXQgZm9yICVzOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaWVyIGxhIHNvY2tldCBkZSBzZXJ2ZXVyIHBvdXIgJXMgOiAlcyIKKworIzogbmV0d29yay5jOjE1MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgbmFtZXNlcnZlciAlcyAtIGxvY2FsIGludGVyZmFjZSIKK21zZ3N0ciAiaWdub3JlIGxlIHNlcnZldXIgZGUgbm9tICVzIC0gaW50ZXJmYWNlIGxvY2FsZSIKKworIzogbmV0d29yay5jOjE1MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgbmFtZXNlcnZlciAlcyAtIGNhbm5vdCBtYWtlL2JpbmQgc29ja2V0OiAlcyIKK21zZ3N0ciAiaWdub3JlIGxlIHNlcnZldXIgZGUgbm9tICVzIC0gbmUgcGV1dCBjb25zdHJ1aXJlL2xpZXIgbGEgc29ja2V0IDogJW0iCisKKyM6IG5ldHdvcmsuYzoxNTQ4Cittc2dpZCAiKG5vIEROU1NFQykiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjE1NTEKK21zZ2lkICJ1bnF1YWxpZmllZCIKK21zZ3N0ciAibm9uLXF1YWxpZmnpKGUpIgorCisjOiBuZXR3b3JrLmM6MTU1MQorbXNnaWQgIm5hbWVzIgorbXNnc3RyICJub21zIgorCisjOiBuZXR3b3JrLmM6MTU1MworbXNnaWQgImRlZmF1bHQiCittc2dzdHIgImTpZmF1dCIKKworIzogbmV0d29yay5jOjE1NTUKK21zZ2lkICJkb21haW4iCittc2dzdHIgImRvbWFpbmUiCisKKyM6IG5ldHdvcmsuYzoxNTYxCisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIGxvY2FsIGFkZHJlc3NlcyBvbmx5IGZvciAlcyAlcyIKK21zZ3N0ciAidXRpbGlzZSBsZXMgYWRyZXNzZXMgbG9jYWxlcyBzZXVsZW1lbnQgcG91ciAlcyAlcyIKKworIzogbmV0d29yay5jOjE1NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgc3RhbmRhcmQgbmFtZXNlcnZlcnMgZm9yICVzICVzIgorbXNnc3RyICJ1dGlsaXNhdGlvbiBkZXMgc2VydmV1cnMgZGUgbm9tIHN0YW5kYXJkcyBwb3VyICVzICVzIgorCisjOiBuZXR3b3JrLmM6MTU2NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgbmFtZXNlcnZlciAlcyMlZCBmb3IgJXMgJXMgJXMiCittc2dzdHIgInV0aWxpc2UgbGUgc2VydmV1ciBkZSBub20gJXMjJWQgcG91ciAlcyAlcyIKKworIzogbmV0d29yay5jOjE1NzAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIk5PVCB1c2luZyBuYW1lc2VydmVyICVzIyVkIC0gcXVlcnkgbG9vcCBkZXRlY3RlZCIKK21zZ3N0ciAidXRpbGlzZSBsZSBzZXJ2ZXVyIGRlIG5vbSAlcyMlZCBwb3VyICVzICVzIgorCisjOiBuZXR3b3JrLmM6MTU3MworIywgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyBuYW1lc2VydmVyICVzIyVkKHZpYSAlcykiCittc2dzdHIgInV0aWxpc2UgbGUgc2VydmV1ciBkZSBub20gJXMjJWQgKHZpYSAlcykiCisKKyM6IG5ldHdvcmsuYzoxNTc1CisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIG5hbWVzZXJ2ZXIgJXMjJWQiCittc2dzdHIgInV0aWxpc2UgbGUgc2VydmV1ciBkZSBub20gJXMjJWQiCisKKyM6IG5ldHdvcmsuYzoxNTgwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyAlZCBtb3JlIGxvY2FsIGFkZHJlc3NlcyIKK21zZ3N0ciAidXRpbGlzZSBsZSBzZXJ2ZXVyIGRlIG5vbSAlcyMlZCIKKworIzogbmV0d29yay5jOjE1ODIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInVzaW5nICVkIG1vcmUgbmFtZXNlcnZlcnMiCittc2dzdHIgInV0aWxpc2UgbGUgc2VydmV1ciBkZSBub20gJXMjJWQiCisKKyM6IGRuc21hc3EuYzoxNjYKK21zZ2lkICJkaGNwLWhvc3RzZGlyLCBkaGNwLW9wdHNkaXIgYW5kIGhvc3RzZGlyIGFyZSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0iCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjE4MQorbXNnaWQgIm5vIHJvb3QgdHJ1c3QgYW5jaG9yIHByb3ZpZGVkIGZvciBETlNTRUMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjE4NAorbXNnaWQgImNhbm5vdCByZWR1Y2UgY2FjaGUgc2l6ZSBmcm9tIGRlZmF1bHQgd2hlbiBETlNTRUMgZW5hYmxlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTg2CisjLCBmdXp6eQorbXNnaWQgIkROU1NFQyBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9ETlNTRUMgaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICJEQnVzIG4nZXN0IHBhcyBkaXNwb25pYmxlIDogYWN0aXZleiBIQVZFX0RCVVMgZGFucyBzcmMvY29uZmlnLmgiCisKKyMKKyM6IGRuc21hc3EuYzoxOTIKK21zZ2lkICJURlRQIHNlcnZlciBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9URlRQIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAiVEZUUCBuJ2VzdCBwYXMgZGlzcG9uaWJsZSA6IGFjdGl2ZXogSEFWRV9URlRQIGRhbnMgc3JjL2NvbmZpZy5oIgorCisjOiBkbnNtYXNxLmM6MTk3CisjLCBmdXp6eQorbXNnaWQgImNhbm5vdCB1c2UgLS1jb25udHJhY2sgQU5EIC0tcXVlcnktcG9ydCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ3V0aWxpc2VyIGNvbmpvaW50ZW1lbnQgLS1jb25udHJhY2sgZXQgLS1xdWVyeS1wb3J0IgorCisjCisjOiBkbnNtYXNxLmM6MjAwCisjLCBmdXp6eQorbXNnaWQgImNvbm50cmFjayBzdXBwb3J0IG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0NPTk5UUkFDSyBpbiBzcmMvY29uZmlnLmgiCittc2dzdHIgIlN1cHBvcnQgZGUgc3VpdmkgZGUgY29ubmV4aW9uIG5vbiBkaXNwb25pYmxlIDogYWN0aXZleiBIQVZFX0NPTk5UUkFDSyBkYW5zIHNyYy9jb25maWcuaCIKKworIzogZG5zbWFzcS5jOjIwNQorbXNnaWQgImFzeW5jaHJvbm91cyBsb2dnaW5nIGlzIG5vdCBhdmFpbGFibGUgdW5kZXIgU29sYXJpcyIKK21zZ3N0ciAibCfpY3JpdHVyZSBkZSB0cmFjZXMgZW4gbW9kZSBhc3luY2hyb25lIG4nZXN0IHBhcyBkaXNwb25pYmxlIHNvdXMgU29sYXJpcy4iCisKKyM6IGRuc21hc3EuYzoyMTAKK21zZ2lkICJhc3luY2hyb25vdXMgbG9nZ2luZyBpcyBub3QgYXZhaWxhYmxlIHVuZGVyIEFuZHJvaWQiCittc2dzdHIgImwn6WNyaXR1cmUgZGUgdHJhY2VzIGVuIG1vZGUgYXN5bmNocm9uZSBuJ2VzdCBwYXMgZGlzcG9uaWJsZSBzb3VzIEFuZHJvaWQuIgorCisjOiBkbnNtYXNxLmM6MjE1Cittc2dpZCAiYXV0aG9yaXRhdGl2ZSBETlMgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfQVVUSCBpbiBzcmMvY29uZmlnLmgiCittc2dzdHIgImxlIG1vZGUgqyBhdXRvcml06SBETlMguyBuJ2VzdCBwYXMgZGlzcG9uaWJsZSA6IGFjdGl2ZXogSEFWRV9BVVRIIGRhbnMgc3JjL2NvbmZpZy5oIgorCisjCisjOiBkbnNtYXNxLmM6MjIwCisjLCBmdXp6eQorbXNnaWQgImxvb3AgZGV0ZWN0aW9uIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0xPT1AgaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICJURlRQIG4nZXN0IHBhcyBkaXNwb25pYmxlIDogYWN0aXZleiBIQVZFX1RGVFAgZGFucyBzcmMvY29uZmlnLmgiCisKKyM6IGRuc21hc3EuYzoyMjcKK21zZ2lkICJtYXhfcG9ydCBjYW5ub3QgYmUgc21hbGxlciB0aGFuIG1pbl9wb3J0IgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoyMzQKK21zZ2lkICJ6b25lIHNlcmlhbCBtdXN0IGJlIGNvbmZpZ3VyZWQgaW4gLS1hdXRoLXNvYSIKK21zZ3N0ciAibGUgbnVt6XJvIGRlIHPpcmllIGRlIGxhIHpvbmUgZG9pdCDqdHJlIGNvbmZpZ3Vy6SBkYW5zIC0tYXV0aC1zb2EiCisKKyM6IGRuc21hc3EuYzoyNTIKK21zZ2lkICJkaGNwLXJhbmdlIGNvbnN0cnVjdG9yIG5vdCBhdmFpbGFibGUgb24gdGhpcyBwbGF0Zm9ybSIKK21zZ3N0ciAibGUgY29uc3RydWN0ZXVyIGRlIHBsYWdlIGRoY3Agbidlc3QgcGFzIGRpc3BvbmlibGUgc3VyIGNldHRlIHBsYXRlLWZvcm1lIgorCisjOiBkbnNtYXNxLmM6Mjk4Cittc2dpZCAiY2Fubm90IHNldCAtLWJpbmQtaW50ZXJmYWNlcyBhbmQgLS1iaW5kLWR5bmFtaWMiCittc2dzdHIgIi0tYmluZC1pbnRlcmZhY2VzIGV0IC0tYmluZC1keW5hbWljIHNvbnQgbXV0dWVsbGVtZW50IGV4Y2x1c2l2ZXMiCisKKyM6IGRuc21hc3EuYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmQgbGlzdCBvZiBpbnRlcmZhY2VzOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSB0cm91dmVyIGxhIGxpc3RlIGRlcyBpbnRlcmZhY2VzIDogJXMiCisKKyM6IGRuc21hc3EuYzozMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBpbnRlcmZhY2UgJXMiCittc2dzdHIgImludGVyZmFjZSAlcyBpbmNvbm51ZSIKKworIzogZG5zbWFzcS5jOjM3NCBkbnNtYXNxLmM6MTAzNworIywgYy1mb3JtYXQKK21zZ2lkICJEQnVzIGVycm9yOiAlcyIKK21zZ3N0ciAiRXJyZXVyIERCdXMgOiAlcyIKKworIzogZG5zbWFzcS5jOjM3NworbXNnaWQgIkRCdXMgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfREJVUyBpbiBzcmMvY29uZmlnLmgiCittc2dzdHIgIkRCdXMgbidlc3QgcGFzIGRpc3BvbmlibGUgOiBhY3RpdmV6IEhBVkVfREJVUyBkYW5zIHNyYy9jb25maWcuaCIKKworIzogZG5zbWFzcS5jOjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHVzZXIgb3IgZ3JvdXA6ICVzIgorbXNnc3RyICJ1dGlsaXNhdGV1ciBvdSBncm91cGUgaW5jb25udSA6ICVzIgorCisjOiBkbnNtYXNxLmM6NDYwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGRpciB0byBmaWxlc3lzdGVtIHJvb3Q6ICVzIgorbXNnc3RyICJOZSBwZXV0IGVmZmVjdHVlciB1biAnY2hkaXInIOAgbGEgcmFjaW5lIGR1IHN5c3TobWUgZGUgZmljaGllciA6ICVzIgorCisjOiBkbnNtYXNxLmM6NzE2CisjLCBjLWZvcm1hdAorbXNnaWQgInN0YXJ0ZWQsIHZlcnNpb24gJXMgRE5TIGRpc2FibGVkIgorbXNnc3RyICJk6W1hcnJhZ2UgYXZlYyBsZSBETlMgZOlzYWN0aXbpICh2ZXJzaW9uICVzKSIKKworIzogZG5zbWFzcS5jOjcyMAorIywgYy1mb3JtYXQKK21zZ2lkICJzdGFydGVkLCB2ZXJzaW9uICVzIGNhY2hlc2l6ZSAlZCIKK21zZ3N0ciAiZGVtYXJy6SwgdmVyc2lvbiAlcyAodGFpbGxlIGRlIGNhY2hlICVkKSIKKworIzogZG5zbWFzcS5jOjcyMgorIywgYy1mb3JtYXQKK21zZ2lkICJzdGFydGVkLCB2ZXJzaW9uICVzIGNhY2hlIGRpc2FibGVkIgorbXNnc3RyICJk6W1hcnJhZ2UgYXZlYyBsZSBjYWNoZSBk6XNhY3RpdukgKHZlcnNpb24gJXMpIgorCisjOiBkbnNtYXNxLmM6NzI1Cittc2dpZCAiRE5TIHNlcnZpY2UgbGltaXRlZCB0byBsb2NhbCBzdWJuZXRzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tcGlsZSB0aW1lIG9wdGlvbnM6ICVzIgorbXNnc3RyICJvcHRpb25zIOAgbGEgY29tcGlsYXRpb24gOiAlcyIKKworIzogZG5zbWFzcS5jOjczNAorbXNnaWQgIkRCdXMgc3VwcG9ydCBlbmFibGVkOiBjb25uZWN0ZWQgdG8gc3lzdGVtIGJ1cyIKK21zZ3N0ciAiU3VwcG9ydCBEQnVzIGF1dG9yaXPpIDogY29ubmVjdOkgYXUgYnVzIHN5c3TobWUiCisKKyM6IGRuc21hc3EuYzo3MzYKK21zZ2lkICJEQnVzIHN1cHBvcnQgZW5hYmxlZDogYnVzIGNvbm5lY3Rpb24gcGVuZGluZyIKK21zZ3N0ciAiU3VwcG9ydCBEQnVzIGF1dG9yaXPpIDogY29ubmV4aW9uIGF1IGJ1cyBlbiBhdHRlbnRlIgorCisjOiBkbnNtYXNxLmM6NzU0Cittc2dpZCAiRE5TU0VDIHZhbGlkYXRpb24gZW5hYmxlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzU4Cittc2dpZCAiRE5TU0VDIHNpZ25hdHVyZSB0aW1lc3RhbXBzIG5vdCBjaGVja2VkIHVudGlsIGZpcnN0IGNhY2hlIHJlbG9hZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzYxCittc2dpZCAiRE5TU0VDIHNpZ25hdHVyZSB0aW1lc3RhbXBzIG5vdCBjaGVja2VkIHVudGlsIHN5c3RlbSB0aW1lIHZhbGlkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogZmFpbGVkIHRvIGNoYW5nZSBvd25lciBvZiAlczogJXMiCittc2dzdHIgIkltcG9zc2libGUgZGUgY2hhbmdlciBwb3VyIGwndXRpbGlzYXRldXIgJXMgOiAlcyIKKworIzogZG5zbWFzcS5jOjc3MAorbXNnaWQgInNldHRpbmcgLS1iaW5kLWludGVyZmFjZXMgb3B0aW9uIGJlY2F1c2Ugb2YgT1MgbGltaXRhdGlvbnMiCittc2dzdHIgImFjdGl2ZSBsJ29wdGlvbiAtLWJpbmQtaW50ZXJmYWNlcyDgIGNhdXNlIGRlIGxpbWl0YXRpb25zIGRhbnMgbGUgc3lzdOhtZSBkJ2V4cGxvaXRhdGlvbiIKKworIzogZG5zbWFzcS5jOjc4MgorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBpbnRlcmZhY2UgJXMgZG9lcyBub3QgY3VycmVudGx5IGV4aXN0IgorbXNnc3RyICJhdHRlbnRpb24gOiBsJ2ludGVyZmFjZSAlcyBuJ2V4aXN0ZSBwYXMgYWN0dWVsbGVtZW50IgorCisjOiBkbnNtYXNxLmM6Nzg3Cittc2dpZCAid2FybmluZzogaWdub3JpbmcgcmVzb2x2LWZpbGUgZmxhZyBiZWNhdXNlIG5vLXJlc29sdiBpcyBzZXQiCittc2dzdHIgImF0dGVudGlvbiA6IGwnb3B0aW9uIKsgcmVzb2x2LWZpbGUguyBzZXJhIGlnbm9y6WUgY2FyIKsgbm8tcmVzb2x2ILsgYSDpdOkgc3DpY2lmaekiCisKKyMKKyM6IGRuc21hc3EuYzo3OTAKK21zZ2lkICJ3YXJuaW5nOiBubyB1cHN0cmVhbSBzZXJ2ZXJzIGNvbmZpZ3VyZWQiCittc2dzdHIgImF0dGVudGlvbiA6IGF1Y3VuIHNlcnZldXIgYW1vbnQgbidlc3QgY29uZmlndXLpIgorCisjOiBkbnNtYXNxLmM6Nzk0CisjLCBjLWZvcm1hdAorbXNnaWQgImFzeW5jaHJvbm91cyBsb2dnaW5nIGVuYWJsZWQsIHF1ZXVlIGxpbWl0IGlzICVkIG1lc3NhZ2VzIgorbXNnc3RyICJtb2RlIGFzeW5jaHJvbmUgZCfpY3JpdHVyZSBkZSB0cmFjZXMsIGxhIHRhaWxsZSBtYXhpbXVtIGRlIGxhIHF1ZXVlIGVzdCBkZSAlZCBtZXNzYWdlcy4iCisKKyM6IGRuc21hc3EuYzo4MTUKK21zZ2lkICJJUHY2IHJvdXRlciBhZHZlcnRpc2VtZW50IGVuYWJsZWQiCittc2dzdHIgImFubm9uY2VzIGRlIHJvdXRldXIgSVB2NiBhY3RpdullcyIKKworIzogZG5zbWFzcS5jOjgyMAorIywgYy1mb3JtYXQKK21zZ2lkICJESENQLCBzb2NrZXRzIGJvdW5kIGV4Y2x1c2l2ZWx5IHRvIGludGVyZmFjZSAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6ODM0Cittc2dpZCAicm9vdCBpcyAiCittc2dzdHIgInJvb3QgZXN0IgorCisjCisjOiBkbnNtYXNxLmM6ODM0Cittc2dpZCAiZW5hYmxlZCIKK21zZ3N0ciAiYWN0aXbpIgorCisjOiBkbnNtYXNxLmM6ODM2Cittc2dpZCAic2VjdXJlIG1vZGUiCittc2dzdHIgIm1vZGUgc+ljdXJpc+kiCisKKyM6IGRuc21hc3EuYzo4MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogJXMgaW5hY2Nlc3NpYmxlIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo4NDMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IFRGVFAgZGlyZWN0b3J5ICVzIGluYWNjZXNzaWJsZSIKK21zZ3N0ciAiculwZXJ0b2lyZSBURlRQICVzIGluYWNjZXNzaWJsZSA6ICVzIgorCisjOiBkbnNtYXNxLmM6ODY5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlc3RyaWN0aW5nIG1heGltdW0gc2ltdWx0YW5lb3VzIFRGVFAgdHJhbnNmZXJzIHRvICVkIgorbXNnc3RyICJsZSBub21icmUgbWF4aW11bSBkZSB0cmFuc2ZlcnRzIFRGVFAgc2ltdWx0YW7pcyBzZXJhIHJlc3RyZWludCDgICVkIgorCisjOiBkbnNtYXNxLmM6MTAzOQorbXNnaWQgImNvbm5lY3RlZCB0byBzeXN0ZW0gREJ1cyIKK21zZ3N0ciAiY29ubmVjdOkgYXUgc3lzdGVtZSBEQnVzIgorCisjOiBkbnNtYXNxLmM6MTE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZm9yayBpbnRvIGJhY2tncm91bmQ6ICVzIgorbXNnc3RyICJOZSBwZXV0IHNlIGxhbmNlciBlbiB04mNoZSBkZSBmb25kIDogJXMiCisKKyM6IGRuc21hc3EuYzoxMTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgaGVscGVyOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjcullciBsZSAnaGVscGVyJyA6ICVzIgorCisjOiBkbnNtYXNxLmM6MTE5NQorIywgYy1mb3JtYXQKK21zZ2lkICJzZXR0aW5nIGNhcGFiaWxpdGllcyBmYWlsZWQ6ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGNvbmZpZ3VyZXIgbGEgY2FwYWNpdOkgJXMiCisKKyM6IGRuc21hc3EuYzoxMTk4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjaGFuZ2UgdXNlci1pZCB0byAlczogJXMiCittc2dzdHIgIkltcG9zc2libGUgZGUgY2hhbmdlciBsJ2lkZW50aWZpYW50IHV0aWxpc2F0ZXVyIHBvdXIgJXMgOiAlcyIKKworIzogZG5zbWFzcS5jOjEyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNoYW5nZSBncm91cC1pZCB0byAlczogJXMiCittc2dzdHIgIkltcG9zc2libGUgZGUgY2hhbmdlciBsJ2lkZW50aWZpYW50IGRlIGdyb3VwZSBwb3VyICVzIDogJXMiCisKKyM6IGRuc21hc3EuYzoxMjA0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuIHBpZGZpbGUgJXM6ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgbGUgZmljaGllciBkZSBQSUQgJXMgOiAlcyIKKworIzogZG5zbWFzcS5jOjEyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gbG9nICVzOiAlcyIKK21zZ3N0ciAiTmUgcGV1dCBvdXZyaXIgbGUgZmljaGllciBkZSBsb2cgJXMgOiAlcyIKKworIworIzogZG5zbWFzcS5jOjEyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxvYWQgTHVhIHNjcmlwdDogJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgY2hhcmdlciBsZSBzY3JpcHQgTHVhIDogJXMiCisKKyM6IGRuc21hc3EuYzoxMjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIlRGVFAgZGlyZWN0b3J5ICVzIGluYWNjZXNzaWJsZTogJXMiCittc2dzdHIgInLpcGVydG9pcmUgVEZUUCAlcyBpbmFjY2Vzc2libGUgOiAlcyIKKworIzogZG5zbWFzcS5jOjEyMTYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgdGltZXN0YW1wIGZpbGUgJXM6ICVzIgorbXNnc3RyICJuZSBwZXV0IG91dnJpciBvdSBjcullciBsZSBmaWNoaWVycyBkZSBiYXV4ICVzIDogJXMiCisKKyM6IGRuc21hc3EuYzoxMjM5Cittc2dpZCAibm93IGNoZWNraW5nIEROU1NFQyBzaWduYXR1cmUgdGltZXN0YW1wcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTMwNworIywgYy1mb3JtYXQKK21zZ2lkICJzY3JpcHQgcHJvY2VzcyBraWxsZWQgYnkgc2lnbmFsICVkIgorbXNnc3RyICJMZSBzY3JpcHQgYSDpdOkgdGVybWlu6SBwYXIgbGUgc2lnbmFsICVkIgorCisjOiBkbnNtYXNxLmM6MTMxMQorIywgYy1mb3JtYXQKK21zZ2lkICJzY3JpcHQgcHJvY2VzcyBleGl0ZWQgd2l0aCBzdGF0dXMgJWQiCittc2dzdHIgIkxlIHNjcmlwdCBzJ2VzdCB0ZXJtaW7pIGF2ZWMgbGUgc3RhdHV0ICVkIgorCisjOiBkbnNtYXNxLmM6MTMxNQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZXhlY3V0ZSAlczogJXMiCittc2dzdHIgImltcG9zc2libGUgZCdleOljdXRlciDgICVzIDogJXMiCisKKyM6IGRuc21hc3EuYzoxMzc5IGRuc3NlYy5jOjQ3OSBkbnNzZWMuYzo1MjUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB1cGRhdGUgbXRpbWUgb24gJXM6ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgbGUgZmljaGllciBkZSBQSUQgJXMgOiAlcyIKKworIzogZG5zbWFzcS5jOjEzODYKK21zZ2lkICJleGl0aW5nIG9uIHJlY2VpcHQgb2YgU0lHVEVSTSIKK21zZ3N0ciAic29ydGllIHN1ciBy6WNlcHRpb24gZHUgc2lnbmFsIFNJR1RFUk0iCisKKyM6IGRuc21hc3EuYzoxNDE0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBhY2Nlc3MgJXM6ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYWNj6WRlciDgICVzIDogJXMiCisKKyM6IGRuc21hc3EuYzoxNDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWRpbmcgJXMiCittc2dzdHIgIkxlY3R1cmUgZGUgJXMiCisKKyM6IGRuc21hc3EuYzoxNDU1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNlcnZlcnMgZm91bmQgaW4gJXMsIHdpbGwgcmV0cnkiCittc2dzdHIgImF1Y3VuIHNlcnZldXIgdHJvdXbpIGRhbnMgJXMsIHZhIHLpZXNzYXllciIKKworIzogZGhjcC5jOjUzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgREhDUCBzb2NrZXQ6ICVzIgorbXNnc3RyICJuZSBwZXV0IGNy6WVyIGxhIHNvY2tldCBESENQOiAlcyIKKworIzogZGhjcC5jOjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZXQgb3B0aW9ucyBvbiBESENQIHNvY2tldDogJXMiCittc2dzdHIgImltcG9zc2libGUgZCdhcHBsaXF1ZXIgbGVzIG9wdGlvbnMgc3VyIGxhIHNvY2tldCBESENQIDogJXMiCisKKyM6IGRoY3AuYzo4OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2V0IFNPX1JFVVNFe0FERFJ8UE9SVH0gb24gREhDUCBzb2NrZXQ6ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGTpY2xhcmVyIFNPX1JFVVNFe0FERFJ8UE9SVH0gc3VyIGxhIHNvY2tldCBESENQIDogJXMiCisKKyM6IGRoY3AuYzoxMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGJpbmQgREhDUCBzZXJ2ZXIgc29ja2V0OiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaWVyIGxhIHNvY2tldCBzZXJ2ZXVyIERIQ1AgOiAlcyIKKworIzogZGhjcC5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIElDTVAgcmF3IHNvY2tldDogJXMuIgorbXNnc3RyICJuZSBwZXV0IGNy6WVyIGRlIHNvY2tldCBlbiBtb2RlIHJhdyBwb3VyIElDTVAgOiAlcy4iCisKKyM6IGRoY3AuYzoyNTIgZGhjcDYuYzoxNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBpbnRlcmZhY2UgJXMgaW4gYnJpZGdlLWludGVyZmFjZSIKK21zZ3N0ciAiaW50ZXJmYWNlICVzIGluY29ubnVlIHNw6WNpZmnpZSBjb21tZSBpbnRlcmZhY2UgZGUgcG9udCIKKworIzogZGhjcC5jOjI5MworIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHBhY2tldCByZWNlaXZlZCBvbiAlcyB3aGljaCBoYXMgbm8gYWRkcmVzcyIKK21zZ3N0ciAiUGFxdWV0IERIQ1AgcmXndSBzdXIgJXMgcXVpIG4nYSBwYXMgZCdhZHJlc3NlIgorCisjOiBkaGNwLmM6NDI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkFSUC1jYWNoZSBpbmplY3Rpb24gZmFpbGVkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6NDcwCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHNlbmRpbmcgREhDUCBwYWNrZXQgdG8gJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzo1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCByYW5nZSAlcyAtLSAlcyBpcyBub3QgY29uc2lzdGVudCB3aXRoIG5ldG1hc2sgJXMiCittc2dzdHIgIkxhIHBsYWdlIGQnYWRyZXNzZXMgREhDUCAlcyAtLSAlcyBuJ2VzdCBwYXMgY29o6XJlbnRlIGF2ZWMgbGUgbWFzcXVlIGRlIHLpc2VhdSAlcyIKKworIzogZGhjcC5jOjg1NAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbGluZSBhdCAlcyBsaW5lICVkIgorbXNnc3RyICJtYXV2YWlzZSBsaWduZSBkYW5zICVzIGxpZ25lICVkIgorCisjOiBkaGNwLmM6ODk3CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nICVzIGxpbmUgJWQsIGR1cGxpY2F0ZSBuYW1lIG9yIElQIGFkZHJlc3MiCittc2dzdHIgImlnbm9yZSAlcyDgIGxhIGxpZ25lICVkIDogZHVwbGljYXRpb24gZGUgbm9tIG91IGQnYWRyZXNzZSBJUCIKKworIzogZGhjcC5jOjEwNDEgcmZjMzMxNS5jOjIxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCByZWxheSAlcyAtPiAlcyIKK21zZ3N0ciAiUmVsYWlzIERIQ1AgJXMgLT4gJXMiCisKKyM6IGxlYXNlLmM6OTgKK21zZ2lkICJ0b28gbWFueSBzdG9yZWQgbGVhc2VzIgorbXNnc3RyICJiZWF1Y291cCB0cm9wIGRlIGJhdXggZW5yZWdpc3Ry6XMiCisKKyM6IGxlYXNlLmM6MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuIG9yIGNyZWF0ZSBsZWFzZSBmaWxlICVzOiAlcyIKK21zZ3N0ciAibmUgcGV1dCBvdXZyaXIgb3UgY3LpZXIgbGUgZmljaGllcnMgZGUgYmF1eCAlcyA6ICVzIgorCisjOiBsZWFzZS5jOjE3NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgbGVhc2UgZGF0YWJhc2UsIGludmFsaWQgbGluZTogJXMgJXMgJXMgJXMgLi4uIgorbXNnc3RyICIiCisKKyM6IGxlYXNlLmM6MTgwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCBsZWFzZSBmaWxlICVzOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlICVzIDogJXMiCisKKyM6IGxlYXNlLmM6MTk2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBydW4gbGVhc2UtaW5pdCBzY3JpcHQgJXM6ICVzIgorbXNnc3RyICJOZSBwZXV0IHBhcyBleOljdXRlciBsZSBzY3JpcHQgbGVhc2UtaW5pdCAlcyA6ICVzIgorCisjOiBsZWFzZS5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJsZWFzZS1pbml0IHNjcmlwdCByZXR1cm5lZCBleGl0IGNvZGUgJXMiCittc2dzdHIgImxlIHNjcmlwdCBsZWFzZS1pbml0IGEgcmV0b3VybukgbGUgY29kZSAlcyIKKworIzogbGVhc2UuYzozNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHdyaXRlICVzOiAlcyAocmV0cnkgaW4gJXVzKSIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlICVzIDogJXMgKHByb2NoYWluIGVzc2FpIGRhbnMgJXVzKSIKKworIzogbGVhc2UuYzo5MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSWdub3JpbmcgZG9tYWluICVzIGZvciBESENQIGhvc3QgbmFtZSAlcyIKK21zZ3N0ciAiTGUgZG9tYWluZSAlcyBlc3QgaWdub3LpIHBvdXIgbCdo9HRlIERIQ1AgJXMiCisKKyM6IHJmYzIxMzEuYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYWRkcmVzcyByYW5nZSBhdmFpbGFibGUgZm9yIERIQ1AgcmVxdWVzdCAlcyAlcyIKK21zZ3N0ciAicGFzIGRlIHBsYWdlIGQnYWRyZXNzZSBkaXNwb25pYmxlIHBvdXIgbGEgcmVxdep0ZSBESENQICVzICVzIgorCisjOiByZmMyMTMxLmM6MzQ4Cittc2dpZCAid2l0aCBzdWJuZXQgc2VsZWN0b3IiCittc2dzdHIgImF2ZWMgc+lsZWN0ZXVyIGRlIHNvdXMtcmVzZWF1IgorCisjOiByZmMyMTMxLmM6MzQ4Cittc2dpZCAidmlhIgorbXNnc3RyICJwYXIgbCdpbnRlcm3pZGlhaXJlIGRlIgorCisjOiByZmMyMTMxLmM6MzYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGF2YWlsYWJsZSBESENQIHN1Ym5ldDogJXMvJXMiCittc2dzdHIgIiV1IHNvdXMtculzZWF1eCBESENQIGRpc3BvbmlibGVzIDogJXMvJXMiCisKKyM6IHJmYzIxMzEuYzozNjMgcmZjMzMxNS5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBhdmFpbGFibGUgREhDUCByYW5nZTogJXMgLS0gJXMiCittc2dzdHIgIiV1IGxhIGdhbW1lIERIQ1AgZGlzcG9uaWJsZSBlc3QgOiAlcyAtLSAlcyIKKworIzogcmZjMjEzMS5jOjQ3NAorIywgYy1mb3JtYXQKK21zZ2lkICIldSB2ZW5kb3IgY2xhc3M6ICVzIgorbXNnc3RyICIldSBDbGFzc2UgZGUgdmVuZGV1ciAoJ1ZlbmRvciBDbGFzcycpIDogJXMiCisKKyM6IHJmYzIxMzEuYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgdXNlciBjbGFzczogJXMiCittc2dzdHIgIiV1IENsYXNzZSBkJ3V0aWxpc2F0ZXVyIDogJXMiCisKKyM6IHJmYzIxMzEuYzo1MTAKK21zZ2lkICJkaXNhYmxlZCIKK21zZ3N0ciAiZOlzYWN0aXbpIgorCisjOiByZmMyMTMxLmM6NTUxIHJmYzIxMzEuYzoxMDA2IHJmYzIxMzEuYzoxNDMwIHJmYzMzMTUuYzo2MTYgcmZjMzMxNS5jOjg2OQorIzogcmZjMzMxNS5jOjExNDgKK21zZ2lkICJpZ25vcmVkIgorbXNnc3RyICJpZ25vcukiCisKKyM6IHJmYzIxMzEuYzo1NjYgcmZjMjEzMS5jOjEyMzkgcmZjMzMxNS5jOjkxOQorbXNnaWQgImFkZHJlc3MgaW4gdXNlIgorbXNnc3RyICJhZHJlc3NlIGTpauAgdXRpbGlz6WUiCisKKyM6IHJmYzIxMzEuYzo1ODAgcmZjMjEzMS5jOjEwNjAKK21zZ2lkICJubyBhZGRyZXNzIGF2YWlsYWJsZSIKK21zZ3N0ciAicGFzIGQnYWRyZXNzZSBkaXNwb25pYmxlIgorCisjOiByZmMyMTMxLmM6NTg3IHJmYzIxMzEuYzoxMjAyCittc2dpZCAid3JvbmcgbmV0d29yayIKK21zZ3N0ciAibWF1dmFpcyBy6XNlYXUiCisKKyM6IHJmYzIxMzEuYzo2MDIKK21zZ2lkICJubyBhZGRyZXNzIGNvbmZpZ3VyZWQiCittc2dzdHIgInBhcyBkJ2FkcmVzc2UgY29uZmlndXLpZSIKKworIzogcmZjMjEzMS5jOjYwOCByZmMyMTMxLmM6MTI1MgorbXNnaWQgIm5vIGxlYXNlcyBsZWZ0IgorbXNnc3RyICJwbHVzIGF1Y3VuIGJhaWwgZGlzcG9uaWJsZSIKKworIzogcmZjMjEzMS5jOjcwMyByZmMzMzE1LmM6NDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGNsaWVudCBwcm92aWRlcyBuYW1lOiAlcyIKK21zZ3N0ciAibGUgY2xpZW50ICV1IGZvdXJuaSBsZSBub20gOiAlcyIKKworIzogcmZjMjEzMS5jOjgwOAorbXNnaWQgIlBYRSBCSVMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiU2VydmljZSBQWEUgQklTIChCb290IEludGVncml0eSBTZXJ2aWNlcykgbm9uIHN1cHBvcnTpIgorCisjOiByZmMyMTMxLmM6OTc0IHJmYzMzMTUuYzoxMjQyCisjLCBjLWZvcm1hdAorbXNnaWQgImRpc2FibGluZyBESENQIHN0YXRpYyBhZGRyZXNzICVzIGZvciAlcyIKK21zZ3N0ciAiZOlzYWN0aXZlIGwnYWRyZXNzZSBzdGF0aXF1ZSBESENQICVzIHBvdXIgJXMiCisKKyM6IHJmYzIxMzEuYzo5OTUKK21zZ2lkICJ1bmtub3duIGxlYXNlIgorbXNnc3RyICJiYWlsIGluY29ubnUiCisKKyM6IHJmYzIxMzEuYzoxMDI5CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCB1c2luZyBjb25maWd1cmVkIGFkZHJlc3MgJXMgYmVjYXVzZSBpdCBpcyBsZWFzZWQgdG8gJXMiCittc2dzdHIgIkwnYWRyZXNzZSBzdGF0aXF1ZSAlcyBuZSBzZXJhIHBhcyB1dGlsaXPpZSBjYXIgdW4gYmFpbCBlc3QgZOlq4CBhdHRyaWJ16SDgICVzIgorCisjOiByZmMyMTMxLmM6MTAzOQorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgdXNpbmcgY29uZmlndXJlZCBhZGRyZXNzICVzIGJlY2F1c2UgaXQgaXMgaW4gdXNlIGJ5IHRoZSBzZXJ2ZXIgb3IgcmVsYXkiCittc2dzdHIgIkwnYWRyZXNzZSBzdGF0aXF1ZSAlcyBuZSBzZXJhIHBhcyB1dGlsaXPpZSBjYXIgZWxsZSBlc3QgdXRpbGlz6WUgcGFyIGxlIHNlcnZldXIgb3UgdW4gcmVsYWkiCisKKyM6IHJmYzIxMzEuYzoxMDQyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCB1c2luZyBjb25maWd1cmVkIGFkZHJlc3MgJXMgYmVjYXVzZSBpdCB3YXMgcHJldmlvdXNseSBkZWNsaW5lZCIKK21zZ3N0ciAiTCdhZHJlc3NlIHN0YXRpcXVlICVzIG5lIHNlcmEgcGFzIHV0aWxpc+llIGNhciBlbGxlIGEgcHLpYWxhYmxlbWVudCDpdOkgcmVmdXPpZSIKKworIzogcmZjMjEzMS5jOjEwNTggcmZjMjEzMS5jOjEyNDUKK21zZ2lkICJubyB1bmlxdWUtaWQiCittc2dzdHIgInBhcyBkJ2lkZW50aWZpYW50IHVuaXF1ZSIKKworIzogcmZjMjEzMS5jOjExNDAKK21zZ2lkICJ3cm9uZyBzZXJ2ZXItSUQiCittc2dzdHIgIm1hdXZhaXMgaWRlbnRpZmlhbnQgZGUgc2VydmV1ciIKKworIzogcmZjMjEzMS5jOjExNTkKK21zZ2lkICJ3cm9uZyBhZGRyZXNzIgorbXNnc3RyICJtYXV2YWlzZSBhZHJlc3NlIgorCisjOiByZmMyMTMxLmM6MTE3NyByZmMzMzE1LmM6MTAxNQorbXNnaWQgImxlYXNlIG5vdCBmb3VuZCIKK21zZ3N0ciAiYmFpbCBub24gdHJvdXbpIgorCisjOiByZmMyMTMxLmM6MTIxMAorbXNnaWQgImFkZHJlc3Mgbm90IGF2YWlsYWJsZSIKK21zZ3N0ciAiYWRyZXNzZSBub24gZGlzcG9uaWJsZSIKKworIzogcmZjMjEzMS5jOjEyMjEKK21zZ2lkICJzdGF0aWMgbGVhc2UgYXZhaWxhYmxlIgorbXNnc3RyICJiYWlsIHN0YXRpcXVlIGRpc3BvbmlibGUiCisKKyM6IHJmYzIxMzEuYzoxMjI1Cittc2dpZCAiYWRkcmVzcyByZXNlcnZlZCIKK21zZ3N0ciAiYWRyZXNzZSByZXNlcnbpZSIKKworIzogcmZjMjEzMS5jOjEyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWJhbmRvbmluZyBsZWFzZSB0byAlcyBvZiAlcyIKK21zZ3N0ciAiYWJhbmRvbiBkdSBiYWlsIGRlICVzIHBvdXIgJXMiCisKKyM6IHJmYzIxMzEuYzoxNzU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJvb3RmaWxlIG5hbWU6ICVzIgorbXNnc3RyICIldSBub20gZGUgZmljaGllciAnYm9vdGZpbGUnIDogJXMiCisKKyM6IHJmYzIxMzEuYzoxNzY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IHNlcnZlciBuYW1lOiAlcyIKK21zZ3N0ciAiJXUgbm9tIGR1IHNlcnZldXIgOiAlcyIKKworIzogcmZjMjEzMS5jOjE3NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgbmV4dCBzZXJ2ZXI6ICVzIgorbXNnc3RyICIldSBzZXJ2ZXVyIHN1aXZhbnQgOiAlcyIKKworIzogcmZjMjEzMS5jOjE3NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYnJvYWRjYXN0IHJlc3BvbnNlIgorbXNnc3RyICIldSBy6XBvbnNlIGJyb2FkY2FzdCIKKworIzogcmZjMjEzMS5jOjE4NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHNlbmQgREhDUC9CT09UUCBvcHRpb24gJWQ6IG5vIHNwYWNlIGxlZnQgaW4gcGFja2V0IgorbXNnc3RyICJJbXBvc3NpYmxlIGQnZW52b3llciBsJ29wdGlvbiBESENQL0JPT1RQICVkIDogcGFzIGFzc2V6IGQnZXNwYWNlIGRhbnMgbGUgcGFxdWV0IgorCisjOiByZmMyMTMxLmM6MjEzMQorbXNnaWQgIlBYRSBtZW51IHRvbyBsYXJnZSIKK21zZ3N0ciAibWVudSBQWEUgdHJvcCBncmFuZCIKKworIzogcmZjMjEzMS5jOjIyNzAgcmZjMzMxNS5jOjE1MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgcmVxdWVzdGVkIG9wdGlvbnM6ICVzIgorbXNnc3RyICIldSBvcHRpb25zIGRlbWFuZOllcyA6ICVzIgorCisjOiByZmMyMTMxLmM6MjU4NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc2VuZCBSRkMzOTI1IG9wdGlvbjogdG9vIG1hbnkgb3B0aW9ucyBmb3IgZW50ZXJwcmlzZSBudW1iZXIgJWQiCittc2dzdHIgIm5lIHBldXggZW52b3llciBsJ29wdGlvbiBSRkMzOTI1IDogdHJvcCBkJ29wdGlvbnMgcG91ciBsZSBudW3pcm8gZCdlbnRyZXByaXNlICVkIgorCisjOiByZmMyMTMxLmM6MjY1MAorIywgYy1mb3JtYXQKK21zZ2lkICIldSByZXBseSBkZWxheTogJWQiCittc2dzdHIgIiIKKworIzogbmV0bGluay5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgbmV0bGluayBzb2NrZXQ6ICVzIgorbXNnc3RyICJuZSBwZXV4IGxpZXIgdW5lIHNvY2tldCBuZXRsaW5rIDogJXMiCisKKyM6IG5ldGxpbmsuYzozNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV0bGluayByZXR1cm5zIGVycm9yOiAlcyIKK21zZ3N0ciAiRXJyZXVyIG5ldGxpbmsgOiAlcyIKKworIzogZGJ1cy5jOjE4NgorbXNnaWQgImF0dGVtcHQgdG8gc2V0IGFuIElQdjYgc2VydmVyIGFkZHJlc3MgdmlhIERCdXMgLSBubyBJUHY2IHN1cHBvcnQiCittc2dzdHIgInRlbnRhdGl2ZSBkZSBsaWVyIHVuZSBhZHJlc3NlIHNlcnZldXIgSVBWNiB2aWEgREJ1cyAtIHBhcyBkZSBzdXBwb3J0IElQVjYiCisKKyM6IGRidXMuYzo0MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRW5hYmxpbmcgLS0lcyBvcHRpb24gZnJvbSBELUJ1cyIKK21zZ3N0ciAiIgorCisjOiBkYnVzLmM6NDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIkRpc2FibGluZyAtLSVzIG9wdGlvbiBmcm9tIEQtQnVzIgorbXNnc3RyICIiCisKKyM6IGRidXMuYzo2OTAKK21zZ2lkICJzZXR0aW5nIHVwc3RyZWFtIHNlcnZlcnMgZnJvbSBEQnVzIgorbXNnc3RyICJjb25maWd1cmF0aW9uIGRlcyBzZXJ2ZXVycyBhbW9udHMg4CBwYXJ0aXIgZGUgREJ1cyIKKworIzogZGJ1cy5jOjczNworbXNnaWQgImNvdWxkIG5vdCByZWdpc3RlciBhIERCdXMgbWVzc2FnZSBoYW5kbGVyIgorbXNnc3RyICJuZSBwZXV0IGVucmVnaXN0cmVyIHVuZSByb3V0aW5lIGRlIHRyYWl0ZW1lbnQgZGVzIG1lc3NhZ2VzIERCdXMiCisKKyM6IGJwZi5jOjI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIERIQ1AgQlBGIHNvY2tldDogJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgY3LpZXIgdW5lIHNvY2tldCBCUEYgcG91ciBESENQIDogJXMiCisKKyM6IGJwZi5jOjI5MworIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHJlcXVlc3QgZm9yIHVuc3VwcG9ydGVkIGhhcmR3YXJlIHR5cGUgKCVkKSByZWNlaXZlZCBvbiAlcyIKK21zZ3N0ciAicmVxdep0ZSBESENQIHBvdXIgdW4gdHlwZSBkZSBtYXTpcmllbCBub24gc3VwcG9ydOkgKCVkKSByZed1ZSBzdXIgJXMiCisKKyM6IGJwZi5jOjM3OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBQRl9ST1VURSBzb2NrZXQ6ICVzIgorbXNnc3RyICJuZSBwZXV0IGNy6WVyIGxhIHNvY2tldCBESENQOiAlcyIKKworIzogYnBmLmM6Mzk5Cittc2dpZCAiVW5rbm93biBwcm90b2NvbCB2ZXJzaW9uIGZyb20gcm91dGUgc29ja2V0IgorbXNnc3RyICIiCisKKyM6IGhlbHBlci5jOjE1MworbXNnaWQgImxlYXNlKCkgZnVuY3Rpb24gbWlzc2luZyBpbiBMdWEgc2NyaXB0IgorbXNnc3RyICJsYSBmb25jdGlvbiBsZWFzZSgpIGVzdCBhYnNlbnRlIGR1IHNjcmlwdCBMdWEiCisKKyM6IHRmdHAuYzozMTkKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IGZyZWUgcG9ydCBmb3IgVEZUUCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ29idGVuaXIgdW4gcG9ydCBsaWJyZSBwb3VyIFRGVFAiCisKKyM6IHRmdHAuYzozMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5zdXBwb3J0ZWQgcmVxdWVzdCBmcm9tICVzIgorbXNnc3RyICJyZXF16nRlIGRlICVzIG5vbiBzdXBwb3J06WUiCisKKyM6IHRmdHAuYzo0ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmlsZSAlcyBub3QgZm91bmQiCittc2dzdHIgImZpY2hpZXIgJXMgbm9uIHRyb3V26SIKKworIzogdGZ0cC5jOjU5MgorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciAlZCAlcyByZWNlaXZlZCBmcm9tICVzIgorbXNnc3RyICJlcnJldXIgJWQgJXMgcmXndSBkZSAlcyIKKworIzogdGZ0cC5jOjYzNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgc2VuZGluZyAlcyB0byAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ2Vudm95ZXIgJXMg4CAlcyIKKworIzogdGZ0cC5jOjYzNAorIywgYy1mb3JtYXQKK21zZ2lkICJzZW50ICVzIHRvICVzIgorbXNnc3RyICJlbnZveekgJXMg4CAlcyIKKworIzogbG9nLmM6MTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIm92ZXJmbG93OiAlZCBsb2cgZW50cmllcyBsb3N0IgorbXNnc3RyICJk6WJvcmRlbWVudCA6ICVkIHRyYWNlcyBwZXJkdWVzIgorCisjOiBsb2cuYzoyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9nIGZhaWxlZDogJXMiCittc2dzdHIgInRyYWNlIHBlcmR1ZSA6ICVzIgorCisjOiBsb2cuYzo0NzEKK21zZ2lkICJGQUlMRUQgdG8gc3RhcnQgdXAiCittc2dzdHIgIklNUE9TU0lCTEUgZGUgZOltYXJyZXIiCisKKyM6IGNvbm50cmFjay5jOjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbm50cmFjayBjb25uZWN0aW9uIG1hcmsgcmV0cmlldmFsIGZhaWxlZDogJXMiCittc2dzdHIgIkxhIHLpY3Vw6XJhdGlvbiBkZSBsYSBtYXJxdWUgZGUgc3VpdmkgZGUgY29ubmV4aW9uIGEg6WNob3XpIDogJXMiCisKKyM6IGRoY3A2LmM6NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBESENQdjYgc29ja2V0OiAlcyIKK21zZ3N0ciAibmUgcGV1dCBjcullciBsYSBzb2NrZXQgREhDUHY2OiAlcyIKKworIzogZGhjcDYuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2V0IFNPX1JFVVNFe0FERFJ8UE9SVH0gb24gREhDUHY2IHNvY2tldDogJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgZOljbGFyZXIgU09fUkVVU0V7QUREUnxQT1JUfSBzdXIgbGEgc29ja2V0IERIQ1B2NiA6ICVzIgorCisjOiBkaGNwNi5jOjg1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBiaW5kIERIQ1B2NiBzZXJ2ZXIgc29ja2V0OiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaWVyIGxhIHNvY2tldCBzZXJ2ZXVyIERIQ1B2NiA6ICVzIgorCisjOiByZmMzMzE1LmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGFkZHJlc3MgcmFuZ2UgYXZhaWxhYmxlIGZvciBESENQdjYgcmVxdWVzdCBmcm9tIHJlbGF5IGF0ICVzIgorbXNnc3RyICJwYXMgZGUgcGxhZ2UgZCdhZHJlc3NlIGRpc3BvbmlibGUgcG91ciBsYSByZXF16nRlIERIQ1B2NiB0cmFuc21pc2UgdmlhIGxlIHJlbGFpICVzIgorCisjOiByZmMzMzE1LmM6MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGFkZHJlc3MgcmFuZ2UgYXZhaWxhYmxlIGZvciBESENQdjYgcmVxdWVzdCB2aWEgJXMiCittc2dzdHIgInBhcyBkZSBwbGFnZSBkJ2FkcmVzc2UgZGlzcG9uaWJsZSBwb3VyIGxhIHJlcXXqdGUgREhDUHY2IHZpYSAlcyIKKworIzogcmZjMzMxNS5jOjMwMworIywgYy1mb3JtYXQKK21zZ2lkICIldSBhdmFpbGFibGUgREhDUHY2IHN1Ym5ldDogJXMvJWQiCittc2dzdHIgIiV1IHNvdXMtculzZWF1eCBESENQdjYgZGlzcG9uaWJsZXMgOiAlcy8lZCIKKworIzogcmZjMzMxNS5jOjM4NgorIywgYy1mb3JtYXQKK21zZ2lkICIldSB2ZW5kb3IgY2xhc3M6ICV1IgorbXNnc3RyICIldSBDbGFzc2UgZGUgdmVuZGV1ciAoJ1ZlbmRvciBDbGFzcycpIDogJXUiCisKKyM6IHJmYzMzMTUuYzo0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgY2xpZW50IE1BQyBhZGRyZXNzOiAlcyIKK21zZ3N0ciAiJXUgTUFDIGFkcmVzc2UgZHUgY2xpZW50IDogJXMiCisKKyM6IHJmYzMzMTUuYzo2NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBwcmVmaXgtY2xhc3MgJWQiCittc2dzdHIgInBy6WZpeGUgZGUgY2xhc3NlIGluY29ubnUgJWQiCisKKyM6IHJmYzMzMTUuYzo4MTYgcmZjMzMxNS5jOjkxMQorbXNnaWQgImFkZHJlc3MgdW5hdmFpbGFibGUiCittc2dzdHIgImFkcmVzc2Ugbm9uIGRpc3BvbmlibGUiCisKKyM6IHJmYzMzMTUuYzo4MjggcmZjMzMxNS5jOjk1OSByZmMzMzE1LmM6MTI5MgorbXNnaWQgInN1Y2Nlc3MiCittc2dzdHIgInLpdXNzaSIKKworIzogcmZjMzMxNS5jOjg0MyByZmMzMzE1LmM6ODUyIHJmYzMzMTUuYzo5NjcgcmZjMzMxNS5jOjk2OQorbXNnaWQgIm5vIGFkZHJlc3NlcyBhdmFpbGFibGUiCittc2dzdHIgInBhcyBkJ2FkcmVzc2UgZGlzcG9uaWJsZSIKKworIzogcmZjMzMxNS5jOjk0NgorbXNnaWQgIm5vdCBvbiBsaW5rIgorbXNnc3RyICJwYXMgc3VyIGNlIGxpZW4iCisKKyM6IHJmYzMzMTUuYzoxMDE5IHJmYzMzMTUuYzoxMjA0IHJmYzMzMTUuYzoxMjgxCittc2dpZCAibm8gYmluZGluZyBmb3VuZCIKK21zZ3N0ciAiYXVjdW5lIGxpYWlzb24gdHJvdXbpZSIKKworIzogcmZjMzMxNS5jOjEwNTcKK21zZ2lkICJkZXByZWNhdGVkIgorbXNnc3RyICJvYnNvbOh0ZSIKKworIzogcmZjMzMxNS5jOjEwNjIKK21zZ2lkICJhZGRyZXNzIGludmFsaWQiCittc2dzdHIgImFkcmVzc2Ugbm9uIHZhbGlkZSIKKworIzogcmZjMzMxNS5jOjExMDkKK21zZ2lkICJjb25maXJtIGZhaWxlZCIKK21zZ3N0ciAiY29uZmlybWF0aW9uIGQn6WNoZWMiCisKKyM6IHJmYzMzMTUuYzoxMTI1Cittc2dpZCAiYWxsIGFkZHJlc3NlcyBzdGlsbCBvbiBsaW5rIgorbXNnc3RyICJ0b3V0ZXMgbGVzIGFkcmVzc2VzIHNvbnQgdG91am91cnMgc3VyIGxlIGxpZW4iCisKKyM6IHJmYzMzMTUuYzoxMjEzCittc2dpZCAicmVsZWFzZSByZWNlaXZlZCIKK21zZ3N0ciAibGli6XJhdGlvbiByZed1ZSIKKworIzogcmZjMzMxNS5jOjIxNDAKK21zZ2lkICJDYW5ub3QgbXVsdGljYXN0IHRvIERIQ1B2NiBzZXJ2ZXIgd2l0aG91dCBjb3JyZWN0IGludGVyZmFjZSIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBmYWlyZSBkdSBtdWx0aWNhc3QgYXUgc2VydmVyIERIQ1B2NiBzYW5zIGludGVyZmFjZSB2YWxpZGUiCisKKyM6IGRoY3AtY29tbW9uLmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIklnbm9yaW5nIGR1cGxpY2F0ZSBkaGNwLW9wdGlvbiAlZCIKK21zZ3N0ciAiTCdvcHRpb24gZGhjcC1vcHRpb24gcmVkb25kYW50ZSAlZCBzZXJhIGlnbm9y6WUiCisKKyM6IGRoY3AtY29tbW9uLmM6MjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IHRhZ3M6ICVzIgorbXNnc3RyICIldSBvcHRpb25zOiAlcyIKKworIzogZGhjcC1jb21tb24uYzo0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIG1vcmUgdGhhbiBvbmUgYWRkcmVzcyBpbiBob3N0c2ZpbGUsIHVzaW5nICVzIGZvciBESENQIgorbXNnc3RyICIlcyBhIHBsdXMgZCd1bmUgYWRyZXNzZSBkYW5zIGxlIGZpY2hpZXIgZCdo9HRlLCB1dGlsaXNhdGlvbiBkZSAlcyBwb3VyIGxlIERIQ1AuIgorCisjOiBkaGNwLWNvbW1vbi5jOjQzMAorIywgYy1mb3JtYXQKK21zZ2lkICJkdXBsaWNhdGUgSVAgYWRkcmVzcyAlcyAoJXMpIGluIGRoY3AtY29uZmlnIGRpcmVjdGl2ZSIKK21zZ3N0ciAiYWRyZXNzZSBJUCAlcyAoJXMpIGR1cGxpcXXpZSBkYW5zIGxhIGRpcmVjdGl2ZSBkaGNwLWNvbmZpZy4iCisKKyM6IGRoY3AtY29tbW9uLmM6NDk0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZXQgU09fQklORFRPREVWSUNFIG9uIERIQ1Agc29ja2V0OiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBk6WNsYXJlciBTT19CSU5EVE9ERVZJQ0Ugc3VyIGxhIHNvY2tldCBESENQIDogJXMiCisKKyM6IGRoY3AtY29tbW9uLmM6NjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIktub3duIERIQ1Agb3B0aW9uczpcbiIKK21zZ3N0ciAiT3B0aW9ucyBESENQIGNvbm51ZXMgOlxuIgorCisjOiBkaGNwLWNvbW1vbi5jOjYyNgorIywgYy1mb3JtYXQKK21zZ2lkICJLbm93biBESENQdjYgb3B0aW9uczpcbiIKK21zZ3N0ciAiT3B0aW9ucyBESENQdjYgY29ubnVlcyA6XG4iCisKKyM6IGRoY3AtY29tbW9uLmM6ODIzCittc2dpZCAiLCBwcmVmaXggZGVwcmVjYXRlZCIKK21zZ3N0ciAiLCBwculmaXhlIG9ic29s6HRlIgorCisjOiBkaGNwLWNvbW1vbi5jOjgyNgorIywgYy1mb3JtYXQKK21zZ2lkICIsIGxlYXNlIHRpbWUgIgorbXNnc3RyICIsIGR1cullIGRlIGJhaWwgIgorCisjOiBkaGNwLWNvbW1vbi5jOjg2OAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBzdGF0ZWxlc3Mgb24gJXMlLjBzJS4wcyVzIgorbXNnc3RyICIlcyBzYW5zIOl0YXQgKHN0YXRlbGVzcykgc3VyICVzJS4wcyUuMHMlcyIKKworIzogZGhjcC1jb21tb24uYzo4NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsIHN0YXRpYyBsZWFzZXMgb25seSBvbiAlLjBzJXMlcyUuMHMiCittc2dzdHIgIiVzLCBiYXV4IHN0YXRpcXVlcyBzZXVsZW1lbnQgc3VyICUuMHMlcyVzJS4wcyIKKworIzogZGhjcC1jb21tb24uYzo4NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsIHByb3h5IG9uIHN1Ym5ldCAlLjBzJXMlLjBzJS4wcyIKK21zZ3N0ciAiJXMsIHByb3h5IHN1ciBsZSBzb3VzLXLpc2VhdSAlLjBzJXMlLjBzIgorCisjOiBkaGNwLWNvbW1vbi5jOjg3MworIywgYy1mb3JtYXQKK21zZ2lkICIlcywgSVAgcmFuZ2UgJXMgLS0gJXMlcyUuMHMiCittc2dzdHIgIiVzLCBwbGFnZSBkJ2FkcmVzc2VzIElQICVzIC0tICVzJXMlLjBzIgorCisjOiBkaGNwLWNvbW1vbi5jOjg4NgorIywgYy1mb3JtYXQKK21zZ2lkICJESENQdjQtZGVyaXZlZCBJUHY2IG5hbWVzIG9uICVzJXMiCittc2dzdHIgIm5vbXMgSVB2NiBk6XJpdulzIGRlIERIQ1B2NCBzdXIgJXMlcyIKKworIzogZGhjcC1jb21tb24uYzo4ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAicm91dGVyIGFkdmVydGlzZW1lbnQgb24gJXMlcyIKK21zZ3N0ciAiYW5ub25jZXMgZGUgcm91dGV1cnMgc3VyICVzJXMiCisKKyM6IGRoY3AtY29tbW9uLmM6OTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcmVsYXkgZnJvbSAlcyB0byAlcyB2aWEgJXMiCittc2dzdHIgIlJlbGFpcyBESENQIGRlICVzIOAgJXMgdmlhICVzIgorCisjOiBkaGNwLWNvbW1vbi5jOjkwMgorIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHJlbGF5IGZyb20gJXMgdG8gJXMiCittc2dzdHIgIlJlbGFpcyBESENQIGRlICVzIOAgJXMiCisKKyM6IHJhZHYuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBJQ01QdjYgc29ja2V0OiAlcyIKK21zZ3N0ciAibmUgcGV1dCBjcullciBsYSBzb2NrZXQgSUNNUHY2OiAlcyIKKworIzogYXV0aC5jOjQ0OQorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyB6b25lIHRyYW5zZmVyIHJlcXVlc3QgZnJvbSAlcyIKK21zZ3N0ciAibGEgcmVxdep0ZSBkZSB0cmFuc2ZlcnQgZGUgem9uZSBlbiBwcm92ZW5hbmNlIGRlICVzIGVzdCBpZ25vcullIgorCisjOiBpcHNldC5jOjk1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmaW5kIGtlcm5lbCB2ZXJzaW9uOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSB0cm91dmVyIGxhIHZlcnNpb24gZGUgbm95YXUgOiAlcyIKKworIzogaXBzZXQuYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBJUHNldCBjb250cm9sIHNvY2tldDogJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgY3LpZXIgdW5lIHNvY2tldCBkZSBjb250cvRsZSBJUHNldCA6ICVzIgorCisjOiBpcHNldC5jOjIzMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHVwZGF0ZSBpcHNldCAlczogJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgbGlyZSBsZSBmaWNoaWVyIGRlIFBJRCAlcyA6ICVzIgorCisjOiBkbnNzZWMuYzo1MjcKK21zZ2lkICJzeXN0ZW0gdGltZSBjb25zaWRlcmVkIHZhbGlkLCBub3cgY2hlY2tpbmcgRE5TU0VDIHNpZ25hdHVyZSB0aW1lc3RhbXBzLiIKK21zZ3N0ciAiIgorCisjOiBibG9ja2RhdGEuYzo1OAorIywgYy1mb3JtYXQKK21zZ2lkICJETlNTRUMgbWVtb3J5IGluIHVzZSAldSwgbWF4ICV1LCBhbGxvY2F0ZWQgJXUiCittc2dzdHIgIiIKKworIzogdGFibGVzLmM6NjEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBhY2Nlc3MgcGYgZGV2aWNlczogJXMiCittc2dzdHIgImltcG9zc2libGUgZCdhY2PpZGVyIOAgJXMgOiAlcyIKKworIzogdGFibGVzLmM6NzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IG5vIG9wZW5lZCBwZiBkZXZpY2VzICVzIgorbXNnc3RyICJ1dGlsaXNlIGxlcyBhZHJlc3NlcyBsb2NhbGVzIHNldWxlbWVudCBwb3VyICVzICVzIgorCisjOiB0YWJsZXMuYzo4MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZXJyb3I6IGNhbm5vdCB1c2UgdGFibGUgbmFtZSAlcyIKK21zZ3N0ciAibmUgcGV1dCBwYXMgb2J0ZW5pciBsZSBub20gZGUgbGEgbWFjaGluZSA6ICVzIgorCisjOiB0YWJsZXMuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvcjogY2Fubm90IHN0cmxjcHkgdGFibGUgbmFtZSAlcyIKK21zZ3N0ciAiIgorCisjOiB0YWJsZXMuYzoxMDEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIklQc2V0OiBlcnJvcjolcyIKK21zZ3N0ciAiRXJyZXVyIERCdXMgOiAlcyIKKworIzogdGFibGVzLmM6MTA4Cittc2dpZCAiaW5mbzogdGFibGUgY3JlYXRlZCIKK21zZ3N0ciAiIgorCisjOiB0YWJsZXMuYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogRElPQ1Ilc0FERFJTOiAlcyIKK21zZ3N0ciAiIgorCisjCisjOiB0YWJsZXMuYzoxMzgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVkIGFkZHJlc3NlcyAlcyIKK21zZ3N0ciAibWF1dmFpc2UgYWRyZXNzZSIKKworIzogaW5vdGlmeS5jOjYyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgYWNjZXNzIHBhdGggJXM6ICVzIgorbXNnc3RyICJOZSBwZXV0IHBhcyBsaXJlICVzIDogJXMiCisKKyM6IGlub3RpZnkuYzo5NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBpbm90aWZ5OiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjcullciBsZSAnaGVscGVyJyA6ICVzIgorCisjOiBpbm90aWZ5LmM6MTExCisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IHN5bWxpbmtzIGZvbGxvd2luZyAlcyIKK21zZ3N0ciAiIgorCisjOiBpbm90aWZ5LmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgImRpcmVjdG9yeSAlcyBmb3IgcmVzb2x2LWZpbGUgaXMgbWlzc2luZywgY2Fubm90IHBvbGwiCittc2dzdHIgIiIKKworIzogaW5vdGlmeS5jOjEzMSBpbm90aWZ5LmM6MTY4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGlub3RpZnkgZm9yICVzOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjcullciB1bmUgc29ja2V0IGQn6WNvdXRlIHBvdXIgJXMgOiAlcyIKKworIzogaW5vdGlmeS5jOjE1MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiYmFkIGR5bmFtaWMgZGlyZWN0b3J5ICVzOiAlcyIKK21zZ3N0ciAiTmUgcGV1dCBwYXMgbGlyZSBsZSBy6XBlcnRvaXJlICVzIDogJXMiCisKKyM6IGlub3RpZnkuYzoyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5vdGlmeSwgbmV3IG9yIGNoYW5nZWQgZmlsZSAlcyIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorI34gbXNnaWQgImNhbm5vdCBjYW5ub25pY2FsaXNlIHJlc29sdi1maWxlICVzOiAlcyIKKyN+IG1zZ3N0ciAibmUgcGV1dCBvdXZyaXIgb3UgY3LpZXIgbGUgZmljaGllcnMgZGUgYmF1eCAlcyA6ICVzIgorCisjfiBtc2dpZCAiQWx3YXlzIHNlbmQgZnJlcXVlbnQgcm91dGVyLWFkdmVydGlzZW1lbnRzIgorI34gbXNnc3RyICJFbnZveWVyIGRlcyBhbm5vbmNlcyBkZSByb3V0ZXVycyBmculxdWVudGVzIgorCisjfiBtc2dpZCAibm8gaW50ZXJmYWNlIHdpdGggYWRkcmVzcyAlcyIKKyN+IG1zZ3N0ciAicGFzIGQnaW50ZXJmYWNlIGF2ZWMgbCdhZHJlc3NlICVzIgorCisjfiBtc2dpZCAiZHVwbGljYXRlIElQIGFkZHJlc3MgJXMgaW4gZGhjcC1jb25maWcgZGlyZWN0aXZlLiIKKyN+IG1zZ3N0ciAiYWRyZXNzZSBJUCAlcyBkdXBsaXF16WUgZGFucyBsYSBkaXJlY3RpdmUgZGhjcC1jb25maWcuIgorCisjfiBtc2dpZCAiU3BlY2lmeSBwYXRoIHRvIEx1YSBzY3JpcHQgKG5vIGRlZmF1bHQpLiIKKyN+IG1zZ3N0ciAiU3DpY2lmaWUgdW4gY2hlbWluIHBvdXIgbGUgZmljaGllciBQSUQgKHBhciBk6WZhdXQgOiAlcykuIgorCisjCisjfiBtc2dpZCAib25seSBvbmUgZGhjcC1ob3N0c2ZpbGUgYWxsb3dlZCIKKyN+IG1zZ3N0ciAidW5lIHNldWxlIHZhbGV1ciBlc3QgYXV0b3Jpc+llIHBvdXIgJ2RoY3AtaG9zdHNmaWxlJyIKKworIworI34gbXNnaWQgIm9ubHkgb25lIGRoY3Atb3B0c2ZpbGUgYWxsb3dlZCIKKyN+IG1zZ3N0ciAidW5lIHNldWxlIHZhbGV1ciBlc3QgYXV0b3Jpc+llIHBvdXIgJ2RoY3Atb3B0c2ZpbGUnIgorCisjfiBtc2dpZCAiZmlsZXMgbmVzdGVkIHRvbyBkZWVwIGluICVzIgorI34gbXNnc3RyICJ0cm9wIGRlIG5pdmVhdXggZGUgculjdXJzaW9uIHBvdXIgbGVzIGZpY2hpZXJzIGRhbnMgJXMiCisKKyN+IG1zZ2lkICJUWFQgcmVjb3JkIHN0cmluZyB0b28gbG9uZyIKKyN+IG1zZ3N0ciAiY2hh7m5lIGR1IGNoYW1wIFRYVCB0cm9wIGxvbmd1ZSIKKworI34gbXNnaWQgImZhaWxlZCB0byBzZXQgSVBWNiBvcHRpb25zIG9uIGxpc3RlbmluZyBzb2NrZXQ6ICVzIgorI34gbXNnc3RyICJpbXBvc3NpYmxlIGQnYWN0aXZlciBsZXMgb3B0aW9ucyBJUFY2IHN1ciBsYSBzb2NrZXQgZGUgbGVjdHVyZSA6ICVzIgorCisjfiBtc2dpZCAiZmFpbGVkIHRvIGJpbmQgbGlzdGVuaW5nIHNvY2tldCBmb3IgJXM6ICVzIgorI34gbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpZXIgbGEgc29ja2V0IGRlIGxlY3R1cmUgcG91ciAlcyA6ICVzIgorCisjfiBtc2dpZCAiREhDUCBwYWNrZXQ6IHRyYW5zYWN0aW9uLWlkIGlzICV1IgorI34gbXNnc3RyICJwYXF1ZXQgREhDUCA6IGwnaWRlbnRpZmlhbnQgZGUgdHJhbnNhY3Rpb24gKCd0cmFuc2FjdGlvbi1pZCcpIGVzdCAldSIKKworI34gbXNnaWQgImZhaWxlZCB0byByZWFkICVzOiVzIgorI34gbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgJXMgOiAlcyIKKworI34gbXNnaWQgIm11c3Qgc2V0IGV4YWN0bHkgb25lIGludGVyZmFjZSBvbiBicm9rZW4gc3lzdGVtcyB3aXRob3V0IElQX1JFQ1ZJRiIKKyN+IG1zZ3N0ciAiVW5lIGludGVyZmFjZSBldCB1bmUgc2V1bGUgZG9pdCDqdHJlIGTpY2xhcullIHN1ciBsZXMgc3lzdOhtZXMgc2FucyBJUF9SRUNWSUYiCisKKyN+IG1zZ2lkICJJZ25vcmluZyBESENQIGxlYXNlIGZvciAlcyBiZWNhdXNlIGl0IGhhcyBhbiBpbGxlZ2FsIGRvbWFpbiBwYXJ0IgorI34gbXNnc3RyICJPbiBpZ25vcmUgbGUgYmFpbCBESENQIHBvdXIgJXMgY2FyIGlsIHBvc3PoZGUgdW4gbm9tIGRlIGRvbWFpbmUgaWxs6WdhbCIKKworI34gbXNnaWQgIklTQyBkaGNwZCBpbnRlZ3JhdGlvbiBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9JU0NfUkVBREVSIGluIHNyYy9jb25maWcuaCIKKyN+IG1zZ3N0ciAiTCdpbnTpZ3JhdGlvbiBESENQIElTQyBuJ2VzdCBwYXMgZGlzcG9uaWJsZSA6IGFjdGl2ZXogSEFWRV9JU0NfUkVBREVSIGRhbnMgc3JjL2NvbmZpZy5oIgorCisjCisjfiBtc2dpZCAiaWxsZWdhbCBkb21haW4gJXMgaW4gZGhjcC1jb25maWcgZGlyZWN0aXZlLiIKKyN+IG1zZ3N0ciAiZG9tYWluZSAlcyBkdXBsaXF16SBkYW5zIGxhIGRpcmVjdGl2ZSBkaGNwLWNvbmZpZy4iCisKKyN+IG1zZ2lkICJpbGxlZ2FsIGRvbWFpbiAlcyBpbiAlcy4iCisjfiBtc2dzdHIgImRvbWFpbmUgJXMgaWxs6WdhbCBkYW5zICVzLiIKKworI34gbXNnaWQgInJ1bm5pbmcgYXMgcm9vdCIKKyN+IG1zZ3N0ciAiZXhlY3V06SBlbiB0ZW1wcyBxdWUgcm9vdCIKKworI34gbXNnaWQgIlJlYWQgbGVhc2VzIGF0IHN0YXJ0dXAsIGJ1dCBuZXZlciB3cml0ZSB0aGUgbGVhc2UgZmlsZS4iCisjfiBtc2dzdHIgIkxlY3R1cmUgZGVzIGJhdXggYXUgZOltYXJyYWdlLCBtYWlzIGF1Y3VuZSDpY3JpdHVyZSBkZSBmaWNoaWVyIGRlIGJhdXgiCisKKyMKKyN+IG1zZ2lkICJyZWFkICVzIC0gJWQgaG9zdHMiCisjfiBtc2dzdHIgImxlY3R1cmUgJXMgLSAlZCBo9HRlcyIKKworI34gbXNnaWQgImRvbWFpbnMiCisjfiBtc2dzdHIgImRvbWFpbmVzIgorCisjfiBtc2dpZCAiSWdub3JpbmcgREhDUCBob3N0IG5hbWUgJXMgYmVjYXVzZSBpdCBoYXMgYW4gaWxsZWdhbCBkb21haW4gcGFydCIKKyN+IG1zZ3N0ciAiTGUgbm9tIGRlIG1hY2hpbmUgREhDUCAlcyBzZXJhIGlnbm9y6SBwYXJjZSBxdSdpbCBwb3Nz6GRlIHVuIG5vbSBkZSBkb21haW5lIGlsbOlnYWwiCisKKyN+IG1zZ2lkICJEaXNwbGF5IHRoaXMgbWVzc2FnZS4iCisjfiBtc2dzdHIgIkFmZmljaGUgY2UgbWVzc2FnZS4iCisKKyN+IG1zZ2lkICJmYWlsZWQgdG8gcmVhZCAlczogJW0iCisjfiBtc2dzdHIgImltcG9zc2libGUgZGUgbGlyZSAlcyA6ICVtIgorCisjfiBtc2dpZCAiZmFpbGVkIHRvIHJlYWQgJXM6JW0iCisjfiBtc2dzdHIgImltcG9zc2libGUgZGUgbGlyZSAlcyA6ICVtIgorCisjCisjfiBtc2dpZCAiY2Fubm90IHNlbmQgZW5jYXBzdWxhdGVkIG9wdGlvbiAlZDogbm8gc3BhY2UgbGVmdCBpbiB3cmFwcGVyIgorI34gbXNnc3RyICJJbXBvc3NpYmxlIGQnZW52b3llciBsJ29wdGlvbiBESENQICVkIDogcGFzIGFzc2V6IGQnZXNwYWNlIGRhbnMgbGUgcGFxdWV0IgorCisjfiBtc2dpZCAiTW9yZSB0aGFuIG9uZSB2ZW5kb3IgY2xhc3MgbWF0Y2hlcywgdXNpbmcgJXMiCisjfiBtc2dzdHIgIlBsdXNpZXVycyBjbGFzc2VzIGRlIGZvdXJuaXNzZXVycyBjb3JyZXNwb25kZW50LCAlcyBzZXJhIHV0aWxpc+kiCmRpZmYgLS1naXQgYS9wby9pZC5wbyBiL3BvL2lkLnBvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYwNTU2YzAKLS0tIC9kZXYvbnVsbAorKysgYi9wby9pZC5wbwpAQCAtMCwwICsxLDI2NjMgQEAKKyMgSW5kb25lc2lhbiB0cmFuc2xhdGlvbnMgZm9yIGRuc21hc3EgcGFja2FnZS4KKyMgVGhpcyBmaWxlIGlzIHB1dCBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyMgU2FsbWFuIEFTIDxzYXNAc2FsbWFuLm9yLmlkPiwgMjAwNS4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGRuc21hc3EgMi4yNFxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwOS0wNi0xOCAxMjoyNCswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxNy0wNy0xNyAxODozMCswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBTYWxtYW4gQVMgPHNhc0BzYWxtYW4ub3IuaWQ+XG4iCisiTGFuZ3VhZ2UtVGVhbTogSW5kb25lc2lhbiA8dHJhbnNsYXRpb24tdGVhbS1pZEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+XG4iCisiTGFuZ3VhZ2U6IGlkXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9QVNDSUlcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisKKyM6IGNhY2hlLmM6NTEzCittc2dpZCAiSW50ZXJuYWwgZXJyb3IgaW4gY2FjaGUuIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IGNhY2hlLmM6OTIzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBuYW1lcyBmcm9tICVzOiAlcyIKK21zZ3N0ciAiZ2FnYWwgbWVtdWF0IG5hbWEtbmFtYSBkYXJpICVzOiAlcyIKKworIyBPSworIzogY2FjaGUuYzo5NDkgZGhjcC5jOjg2NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiYmFkIGFkZHJlc3MgYXQgJXMgbGluZSAlZCIKK21zZ3N0ciAia2VzYWxhaGFuIG5hbWEgcGFkYSAlcyBiYXJpcyAlZCIKKworIyBPSworIzogY2FjaGUuYzoxMDAyIGRoY3AuYzo4ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG5hbWUgYXQgJXMgbGluZSAlZCIKK21zZ3N0ciAia2VzYWxhaGFuIG5hbWEgcGFkYSAlcyBiYXJpcyAlZCIKKworIyBPSworIzogY2FjaGUuYzoxMDExIGRoY3AuYzo5NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCAlcyAtICVkIGFkZHJlc3NlcyIKK21zZ3N0ciAibWVtYmFjYSAlcyAtICVkIGFsYW1hdCIKKworIyBPSworIzogY2FjaGUuYzoxMTI0Cittc2dpZCAiY2xlYXJlZCBjYWNoZSIKK21zZ3N0ciAiY2FjaGUgdGVsYWggZGloYXB1cyIKKworIzogY2FjaGUuYzoxMTUzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIElQdjQgYWRkcmVzcyBmb3VuZCBmb3IgJXMiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxMjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGEgQ05BTUUsIG5vdCBnaXZpbmcgaXQgdG8gdGhlIERIQ1AgbGVhc2Ugb2YgJXMiCittc2dzdHIgIiIKKworIyBPSworIzogY2FjaGUuYzoxMjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBnaXZpbmcgbmFtZSAlcyB0byB0aGUgREhDUCBsZWFzZSBvZiAlcyBiZWNhdXNlIHRoZSBuYW1lIGV4aXN0cyBpbiAlcyB3aXRoIGFkZHJlc3MgJXMiCittc2dzdHIgInRpZGFrIG1lbWJlcmlrYW4gbmFtYSAlcyBrZXBhZGEgbGVhc2UgREhDUCAlcyBrYXJlbmEgbmFtYSB0ZWxhaCBhZGEgZGFsYW0gJXNkZW5nYW4gYWxhbWF0ICVzIgorCisjOiBjYWNoZS5jOjE0MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidGltZSAlbHUiCittc2dzdHIgIiIKKworIyBPSworIzogY2FjaGUuYzoxNDE0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYWNoZSBzaXplICVkLCAlZC8lZCBjYWNoZSBpbnNlcnRpb25zIHJlLXVzZWQgdW5leHBpcmVkIGNhY2hlIGVudHJpZXMuIgorbXNnc3RyICJ1a3VyYW4gY2FjaGUgJWQsICVkLyVkIHBlbnlpc2lwYW4gY2FjaGUgbWVuaW1wYSBjYWNoZSB5YW5nIGJlbHVtIGthZGFsdXdhcnNhIgorCisjOiBjYWNoZS5jOjE0MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicXVlcmllcyBmb3J3YXJkZWQgJXUsIHF1ZXJpZXMgYW5zd2VyZWQgbG9jYWxseSAldSIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjE0MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAicXVlcmllcyBmb3IgYXV0aG9yaXRhdGl2ZSB6b25lcyAldSIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjE0NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmVyICVzIyVkOiBxdWVyaWVzIHNlbnQgJXUsIHJldHJpZWQgb3IgZmFpbGVkICV1IgorbXNnc3RyICIiCisKKyMgT0sKKyM6IHV0aWwuYzo0NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNlZWQgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yOiAlcyIKK21zZ3N0ciAiZ2FnYWwgbWVuZGVuZ2Fya2FuIGRpIHNvY2tldDogJXMiCisKKyMgT0sKKyM6IHV0aWwuYzoyMjQKKyMsIGZ1enp5Cittc2dpZCAiZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSIKK21zZ3N0ciAiZ2FnYWwgbWVtdWF0ICVTOiAlbSIKKworIyBPSworIzogdXRpbC5jOjI3NyBvcHRpb24uYzo2MTkKK21zZ2lkICJjb3VsZCBub3QgZ2V0IG1lbW9yeSIKK21zZ3N0ciAidGlkYWsgYmlzYSBtZW5kYXBhdGthbiBtZW1vcnkiCisKKyMgT0sKKyM6IHV0aWwuYzoyODcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgcGlwZTogJXMiCittc2dzdHIgInRpZGFrIGJpc2EgbWVtYmFjYSAlczogJXMiCisKKyMgT0sKKyM6IHV0aWwuYzoyOTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBhbGxvY2F0ZSAlZCBieXRlcyIKK21zZ3N0ciAiZ2FnYWwgbWVtdWF0ICVTOiAlbSIKKworIyBPSworIzogdXRpbC5jOjQ2NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbmZpbml0ZSIKK21zZ3N0ciAidGFrIHRlcmJhdGFzIgorCisjIE9LCisjOiBvcHRpb24uYzozNDQKK21zZ2lkICJTcGVjaWZ5IGxvY2FsIGFkZHJlc3MoZXMpIHRvIGxpc3RlbiBvbi4iCittc2dzdHIgIlRlbnR1a2FuIGFsYW1hdCBsb2thbCB1bnR1ayBtZW5kZW5nYXJrYW4uIgorCisjIE9LCisjOiBvcHRpb24uYzozNDUKK21zZ2lkICJSZXR1cm4gaXBhZGRyIGZvciBhbGwgaG9zdHMgaW4gc3BlY2lmaWVkIGRvbWFpbnMuIgorbXNnc3RyICJNZW5naGFzaWxrYW4gaXBhZGRyIHVudHVrIHNlbXVhIGhvc3QgZGFsYW0gZG9tYWluIHlhbmcgZGlwaWxpaC4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjM0NgorbXNnaWQgIkZha2UgcmV2ZXJzZSBsb29rdXBzIGZvciBSRkMxOTE4IHByaXZhdGUgYWRkcmVzcyByYW5nZXMuIgorbXNnc3RyICJGYWtlIHBlbmNhcmlhbiBiYWxpayB1bnR1ayBhbGFtYXQgcHJpdmF0ZSBzZXN1YWkgZGVuZ2FuIFJGQzE5MTguIgorCisjIE9LCisjOiBvcHRpb24uYzozNDcKK21zZ2lkICJUcmVhdCBpcGFkZHIgYXMgTlhET01BSU4gKGRlZmVhdHMgVmVyaXNpZ24gd2lsZGNhcmQpLiIKK21zZ3N0ciAiUGVybGFrdWthbiBpcGFkZHIgc2ViYWdhaSBOWERPTUFJTiAobWVuZ2FsYWhrYW4gd2lsZGNhcmQgVmVyaXNpZ24pLiIKKworIyBPSworIzogb3B0aW9uLmM6MzQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgdGhlIHNpemUgb2YgdGhlIGNhY2hlIGluIGVudHJpZXMgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIlRlbnR1a2FuIHVrdXJhbiBjYWNoZSwgZGFsYW0ganVtbGFoIGlzaWFuIChkZWZhdWx0ICVzKS4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjM0OQorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IGNvbmZpZ3VyYXRpb24gZmlsZSAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiVGVudHVrYW4gZmlsZSBrb25maWd1cmFzaSAoZGVmYXVsdCAlcykuIgorCisjIE9LCisjOiBvcHRpb24uYzozNTAKK21zZ2lkICJEbyBOT1QgZm9yayBpbnRvIHRoZSBiYWNrZ3JvdW5kOiBydW4gaW4gZGVidWcgbW9kZS4iCittc2dzdHIgIkpBTkdBTiBiZXJqYWxhbiBkaSBiYWNrZ3JvdW5kOiBiZXJqYWxhbiBkYWxhbSBtb2R1cyBkZWJ1Zy4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjM1MQorbXNnaWQgIkRvIE5PVCBmb3J3YXJkIHF1ZXJpZXMgd2l0aCBubyBkb21haW4gcGFydC4iCittc2dzdHIgIkpBTkdBTiB0ZXJ1c2thbiBwZXJtaW50YWFuIHRhbnBhIGJhZ2lhbiBkb21haW4uIgorCisjIE9LCisjOiBvcHRpb24uYzozNTIKK21zZ2lkICJSZXR1cm4gc2VsZi1wb2ludGluZyBNWCByZWNvcmRzIGZvciBsb2NhbCBob3N0cy4iCittc2dzdHIgIk1lbmdlbWJhbGlrYW4gcmVjb3JkIE1YIHVudHVrIGRpcmkgc2VuZGlyaSBob3N0LWhvc3QgbG9rYWwuIgorCisjIE9LCisjOiBvcHRpb24uYzozNTMKK21zZ2lkICJFeHBhbmQgc2ltcGxlIG5hbWVzIGluIC9ldGMvaG9zdHMgd2l0aCBkb21haW4tc3VmZml4LiIKK21zZ3N0ciAiTWVsZW5na2FwaSBuYW1hLW5hbWEgZGkgL2V0Yy9ob3N0cyBkZW5nYW4gYWtoaXJhbiBkb21haW4uIgorCisjIE9LCisjOiBvcHRpb24uYzozNTQKK21zZ2lkICJEb24ndCBmb3J3YXJkIHNwdXJpb3VzIEROUyByZXF1ZXN0cyBmcm9tIFdpbmRvd3MgaG9zdHMuIgorbXNnc3RyICJKYW5nYW4gbWVuZXJ1c2thbiBwZXJtaW50YWFuIEROUyBzcHVyaW91cyBkYXJpIGhvc3QtaG9zdCBXaW5kb3dzLiIKKworIyBPSworIzogb3B0aW9uLmM6MzU1Cittc2dpZCAiRW5hYmxlIERIQ1AgaW4gdGhlIHJhbmdlIGdpdmVuIHdpdGggbGVhc2UgZHVyYXRpb24uIgorbXNnc3RyICJCb2xlaGthbiBESENQIGRhbGFtIGphbmdrYXVhbiB5YW5nIGRpYmVyaWthbiBkZW5nYW4gZHVyYXNpIGxlYXNlLiIKKworIyBPSworIzogb3B0aW9uLmM6MzU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoYW5nZSB0byB0aGlzIGdyb3VwIGFmdGVyIHN0YXJ0dXAgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIlViYWgga2UgZ3JvdXAgaW5pIHNldGVsYWggbXVsYWkgKGRlZmF1bHQgJXMpLiIKKworIyBPSworIzogb3B0aW9uLmM6MzU3Cittc2dpZCAiU2V0IGFkZHJlc3Mgb3IgaG9zdG5hbWUgZm9yIGEgc3BlY2lmaWVkIG1hY2hpbmUuIgorbXNnc3RyICJTZXRlbCBhbGFtYXQgYXRhdSBuYW1hIGhvc3QgdW50dWsgbWVzaW4geWFuZyBkaXNlYnV0a2FuLiIKKworIyBPSworIzogb3B0aW9uLmM6MzU4CisjLCBmdXp6eQorbXNnaWQgIlJlYWQgREhDUCBob3N0IHNwZWNzIGZyb20gZmlsZS4iCittc2dzdHIgIm5hbWEgTVggc2FsYWgiCisKKyM6IG9wdGlvbi5jOjM1OQorbXNnaWQgIlJlYWQgREhDUCBvcHRpb24gc3BlY3MgZnJvbSBmaWxlLiIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBvcHRpb24uYzozNjAKKyMsIGZ1enp5Cittc2dpZCAiUmVhZCBESENQIGhvc3Qgc3BlY3MgZnJvbSBhIGRpcmVjdG9yeS4iCittc2dzdHIgIm5hbWEgTVggc2FsYWgiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjM2MQorIywgZnV6enkKK21zZ2lkICJSZWFkIERIQ1Agb3B0aW9ucyBmcm9tIGEgZGlyZWN0b3J5LiIKK21zZ3N0ciAibmFtYSBNWCBzYWxhaCIKKworIzogb3B0aW9uLmM6MzYyCittc2dpZCAiRXZhbHVhdGUgY29uZGl0aW9uYWwgdGFnIGV4cHJlc3Npb24uIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjM2MworIywgYy1mb3JtYXQKK21zZ2lkICJEbyBOT1QgbG9hZCAlcyBmaWxlLiIKK21zZ3N0ciAiSkFOR0FOIG11YXQgZmlsZSAlcy4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjM2NAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IGEgaG9zdHMgZmlsZSB0byBiZSByZWFkIGluIGFkZGl0aW9uIHRvICVzLiIKK21zZ3N0ciAiU2VidXRrYW4gc2VidWFoIGZpbGUgaG9zdHMgeWFuZyBoYXJ1cyBkaWJhY2Egc2ViYWdhaSB0YW1iYWhhbiB1bnR1ayAlcy4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjM2NQorIywgZnV6enkKK21zZ2lkICJSZWFkIGhvc3RzIGZpbGVzIGZyb20gYSBkaXJlY3RvcnkuIgorbXNnc3RyICJuYW1hIE1YIHNhbGFoIgorCisjIE9LCisjOiBvcHRpb24uYzozNjYKK21zZ2lkICJTcGVjaWZ5IGludGVyZmFjZShzKSB0byBsaXN0ZW4gb24uIgorbXNnc3RyICJTZWJ1dGthbiBhbnRhcm11a2EgdW50dWsgbWVuZGVuZ2Fya2FuLiIKKworIyBPSworIzogb3B0aW9uLmM6MzY3Cittc2dpZCAiU3BlY2lmeSBpbnRlcmZhY2UocykgTk9UIHRvIGxpc3RlbiBvbi4iCittc2dzdHIgIlNlYnV0a2FuIGFudGFybXVrYSB1bnR1ayBUSURBSyBtZW5kZW5nYXJrYW4uIgorCisjIE9LCisjOiBvcHRpb24uYzozNjgKKyMsIGZ1enp5Cittc2dpZCAiTWFwIERIQ1AgdXNlciBjbGFzcyB0byB0YWcuIgorbXNnc3RyICJQZXRha2FuIGtlbGFzIHVzZXIgREhDUCBrZSBzZXRlbGFuIHlhbmcgZGlwaWxpaC4iCisKKyM6IG9wdGlvbi5jOjM2OQorbXNnaWQgIk1hcCBSRkMzMDQ2IGNpcmN1aXQtaWQgdG8gdGFnLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNzAKK21zZ2lkICJNYXAgUkZDMzA0NiByZW1vdGUtaWQgdG8gdGFnLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNzEKK21zZ2lkICJNYXAgUkZDMzk5MyBzdWJzY3JpYmVyLWlkIHRvIHRhZy4iCittc2dzdHIgIiIKKworIyBPSworIzogb3B0aW9uLmM6MzcyCisjLCBmdXp6eQorbXNnaWQgIkRvbid0IGRvIERIQ1AgZm9yIGhvc3RzIHdpdGggdGFnIHNldC4iCittc2dzdHIgIkphbmdhbiBtZW5nZ3VuYWthbiBESENQIHVudHVrIGhvc3QtaG9zdCB5YW5nIGRpcGlsaWguIgorCisjIE9LCisjOiBvcHRpb24uYzozNzMKKyMsIGZ1enp5Cittc2dpZCAiRm9yY2UgYnJvYWRjYXN0IHJlcGxpZXMgZm9yIGhvc3RzIHdpdGggdGFnIHNldC4iCittc2dzdHIgIkphbmdhbiBtZW5nZ3VuYWthbiBESENQIHVudHVrIGhvc3QtaG9zdCB5YW5nIGRpcGlsaWguIgorCisjIE9LCisjOiBvcHRpb24uYzozNzQKK21zZ2lkICJEbyBOT1QgZm9yayBpbnRvIHRoZSBiYWNrZ3JvdW5kLCBkbyBOT1QgcnVuIGluIGRlYnVnIG1vZGUuIgorbXNnc3RyICJKQU5HQU4gYmVyamFsYW4gZGkgYmFja2dyb3VuZCwgamFuZ2FuIGJlcmphbGFuIGRhbGFtIG1vZHVzIGRlYnVnLiIKKworIyBPSworIzogb3B0aW9uLmM6Mzc1Cittc2dpZCAiQXNzdW1lIHdlIGFyZSB0aGUgb25seSBESENQIHNlcnZlciBvbiB0aGUgbG9jYWwgbmV0d29yay4iCittc2dzdHIgIkJlcnBpa2lyIGJhaHdhIGtpdGEgc2F0dS1zYXR1bnlhIERIQ1Agc2VydmVyIGRhbGFtIGphcmluZ2FuLiIKKworIyBPSworIzogb3B0aW9uLmM6Mzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgd2hlcmUgdG8gc3RvcmUgREhDUCBsZWFzZXMgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIlNlYnV0a2FuIGxva2FzaSB1bnR1ayBtZW55aW1wYW4gbGVhc2UgREhDUCAoZGVmYXVsdCAlcykuIgorCisjIE9LCisjOiBvcHRpb24uYzozNzcKK21zZ2lkICJSZXR1cm4gTVggcmVjb3JkcyBmb3IgbG9jYWwgaG9zdHMuIgorbXNnc3RyICJLZW1iYWxpa2FuIHJla29yZCBNWCB1bnR1ayBob3N0LWhvc3QgbG9rYWwuIgorCisjIE9LCisjOiBvcHRpb24uYzozNzgKK21zZ2lkICJTcGVjaWZ5IGFuIE1YIHJlY29yZC4iCittc2dzdHIgIlNlYnV0a2FuIHNlYnVhaCByZWtvcmQgTVguIgorCisjIE9LCisjOiBvcHRpb24uYzozNzkKK21zZ2lkICJTcGVjaWZ5IEJPT1RQIG9wdGlvbnMgdG8gREhDUCBzZXJ2ZXIuIgorbXNnc3RyICJTZWJ1dGthbiBwaWxpaGFuLXBpbGloYW4gQk9PVFAgdW50dWsgREhDUCBzZXJ2ZXIuIgorCisjOiBvcHRpb24uYzozODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG8gTk9UIHBvbGwgJXMgZmlsZSwgcmVsb2FkIG9ubHkgb24gU0lHSFVQLiIKK21zZ3N0ciAiSmFuZ2FuIGt1bXB1bGthbiBmaWxlICVzLCBtdWF0IGtlbWJhbGkgc2FhdCBTSUdIVVAuIgorCisjIE9LCisjOiBvcHRpb24uYzozODEKK21zZ2lkICJEbyBOT1QgY2FjaGUgZmFpbGVkIHNlYXJjaCByZXN1bHRzLiIKK21zZ3N0ciAiSkFOR0FOIG1lbnlpbXBhbiBoYXNpbCBwZW5jYXJpYW4geWFuZyBnYWdhbC4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjM4MgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2UgbmFtZXNlcnZlcnMgc3RyaWN0bHkgaW4gdGhlIG9yZGVyIGdpdmVuIGluICVzLiIKK21zZ3N0ciAiR3VuYWthbiBzZWNhcmEga2V0YXQgbmFtYXNlcnZlciB5YW5nIGRpc2VidXRrYW4gc2VzdWFpIHVydXRhbiBkaSAlcy4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjM4MworIywgZnV6enkKK21zZ2lkICJTcGVjaWZ5IG9wdGlvbnMgdG8gYmUgc2VudCB0byBESENQIGNsaWVudHMuIgorbXNnc3RyICJTZXRlbCBwaWxpaGFuLXBpbGloYW4gdGFtYmFoYW4geWFuZyBha2FuIGRpc2V0ZWwgdW50dWsga2xpZW4ta2xpZW4gREhDUC4iCisKKyM6IG9wdGlvbi5jOjM4NAorbXNnaWQgIkRIQ1Agb3B0aW9uIHNlbnQgZXZlbiBpZiB0aGUgY2xpZW50IGRvZXMgbm90IHJlcXVlc3QgaXQuIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjM4NQorbXNnaWQgIlNwZWNpZnkgcG9ydCB0byBsaXN0ZW4gZm9yIEROUyByZXF1ZXN0cyBvbiAoZGVmYXVsdHMgdG8gNTMpLiIKK21zZ3N0ciAiU2VidXRrYW4gcG9ydCB1bnR1ayBtZW5kZW5nYXJrYW4gcGVybWludGFhbiBETlMgKGRlZmF1bHQgcG9ydCA1MykuIgorCisjIE9LCisjOiBvcHRpb24uYzozODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBzdXBwb3J0ZWQgVURQIHBhY2tldCBzaXplIGZvciBFRE5TLjAgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIlVrdXJhbiBtYWtzaW11bSBwYWtldCBVRFAgeWFuZyBkaWR1a3VuZyB1bnR1ayBFRE5TLjAgKGRlZmF1bHQgJXMpLiIKKworIyBPSworIzogb3B0aW9uLmM6Mzg3CisjLCBmdXp6eQorbXNnaWQgIkxvZyBETlMgcXVlcmllcy4iCittc2dzdHIgIlBlcm1pbnRhYW4gbG9nLiIKKworIyBPSworIzogb3B0aW9uLmM6Mzg4CisjLCBmdXp6eQorbXNnaWQgIkZvcmNlIHRoZSBvcmlnaW5hdGluZyBwb3J0IGZvciB1cHN0cmVhbSBETlMgcXVlcmllcy4iCittc2dzdHIgIlBha3NhIHBvcnQgYXNhbCB1bnR1ayBwZXJtaW50YWFuIGtlIGF0YXMuIgorCisjIE9LCisjOiBvcHRpb24uYzozODkKK21zZ2lkICJEbyBOT1QgcmVhZCByZXNvbHYuY29uZi4iCittc2dzdHIgIkpBTkdBTiBiYWNhIHJlc29sdi5jb25mLiIKKworIyBPSworIzogb3B0aW9uLmM6MzkwCisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgcGF0aCB0byByZXNvbHYuY29uZiAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiU2VidXRrYW4gcGF0aCBrZSByZXNvbHYuY29uZiAoZGVmYXVsdCAlcykuIgorCisjIE9LCisjOiBvcHRpb24uYzozOTEKKyMsIGZ1enp5Cittc2dpZCAiU3BlY2lmeSBwYXRoIHRvIGZpbGUgd2l0aCBzZXJ2ZXI9IG9wdGlvbnMiCittc2dzdHIgIlNlYnV0a2FuIHBhdGggZmlsZSBQSUQuIChkZWZhdWx0ICVzKS4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjM5MgorbXNnaWQgIlNwZWNpZnkgYWRkcmVzcyhlcykgb2YgdXBzdHJlYW0gc2VydmVycyB3aXRoIG9wdGlvbmFsIGRvbWFpbnMuIgorbXNnc3RyICJTZWJ1dGthbiBhbGFtYXQtYWxhbWF0IHNlcnZlciBkaSBhdGFzLCBib2xlaCBkaWxlbmdrYXBpIGRlbmdhbiBuYW1hIGRvbWFpbi4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjM5MworIywgZnV6enkKK21zZ2lkICJTcGVjaWZ5IGFkZHJlc3Mgb2YgdXBzdHJlYW0gc2VydmVycyBmb3IgcmV2ZXJzZSBhZGRyZXNzIHF1ZXJpZXMiCittc2dzdHIgIlNlYnV0a2FuIGFsYW1hdC1hbGFtYXQgc2VydmVyIGRpIGF0YXMsIGJvbGVoIGRpbGVuZ2thcGkgZGVuZ2FuIG5hbWEgZG9tYWluLiIKKworIyBPSworIzogb3B0aW9uLmM6Mzk0Cittc2dpZCAiTmV2ZXIgZm9yd2FyZCBxdWVyaWVzIHRvIHNwZWNpZmllZCBkb21haW5zLiIKK21zZ3N0ciAiSkFOR0FOIHBlcm5haCBtZW5lcnVza2FuIHBlcm1pbnRhYW4ga2UgZG9tYWluIHlhbmcgZGlzZWJ1dGthbi4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjM5NQorbXNnaWQgIlNwZWNpZnkgdGhlIGRvbWFpbiB0byBiZSBhc3NpZ25lZCBpbiBESENQIGxlYXNlcy4iCittc2dzdHIgIlNlYnV0a2FuIGRvbWFpbiB5YW5nIGRpZ3VuYWthbiBkYWxhbSBsZWFzZSBESENQLiIKKworIyBPSworIzogb3B0aW9uLmM6Mzk2Cittc2dpZCAiU3BlY2lmeSBkZWZhdWx0IHRhcmdldCBpbiBhbiBNWCByZWNvcmQuIgorbXNnc3RyICJTZWJ1dGthbiB0dWp1YW4gZGVmYXVsdCBkYWxhbSByZWtvcmQgTVguIgorCisjIE9LCisjOiBvcHRpb24uYzozOTcKK21zZ2lkICJTcGVjaWZ5IHRpbWUtdG8tbGl2ZSBpbiBzZWNvbmRzIGZvciByZXBsaWVzIGZyb20gL2V0Yy9ob3N0cy4iCittc2dzdHIgIlNlYnV0a2FuIHRpbWUtdG8tbGl2ZSBkYWxhbSBkZXRpayB1bnR1ayBqYXdhYmFuIGRhcmkgL2V0Yy9ob3N0cy4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjM5OAorIywgZnV6enkKK21zZ2lkICJTcGVjaWZ5IHRpbWUtdG8tbGl2ZSBpbiBzZWNvbmRzIGZvciBuZWdhdGl2ZSBjYWNoaW5nLiIKK21zZ3N0ciAiU2VidXRrYW4gdGltZS10by1saXZlIGRhbGFtIGRldGlrIHVudHVrIGphd2FiYW4gZGFyaSAvZXRjL2hvc3RzLiIKKworIyBPSworIzogb3B0aW9uLmM6Mzk5CisjLCBmdXp6eQorbXNnaWQgIlNwZWNpZnkgdGltZS10by1saXZlIGluIHNlY29uZHMgZm9yIG1heGltdW0gVFRMIHRvIHNlbmQgdG8gY2xpZW50cy4iCittc2dzdHIgIlNlYnV0a2FuIHRpbWUtdG8tbGl2ZSBkYWxhbSBkZXRpayB1bnR1ayBqYXdhYmFuIGRhcmkgL2V0Yy9ob3N0cy4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjQwMAorIywgZnV6enkKK21zZ2lkICJTcGVjaWZ5IHRpbWUtdG8tbGl2ZSBjZWlsaW5nIGZvciBjYWNoZS4iCittc2dzdHIgIlNlYnV0a2FuIHRpbWUtdG8tbGl2ZSBkYWxhbSBkZXRpayB1bnR1ayBqYXdhYmFuIGRhcmkgL2V0Yy9ob3N0cy4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjQwMQorIywgZnV6enkKK21zZ2lkICJTcGVjaWZ5IHRpbWUtdG8tbGl2ZSBmbG9vciBmb3IgY2FjaGUuIgorbXNnc3RyICJTZWJ1dGthbiB0aW1lLXRvLWxpdmUgZGFsYW0gZGV0aWsgdW50dWsgamF3YWJhbiBkYXJpIC9ldGMvaG9zdHMuIgorCisjIE9LCisjOiBvcHRpb24uYzo0MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hhbmdlIHRvIHRoaXMgdXNlciBhZnRlciBzdGFydHVwLiAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiVWJhaCBrZSB1c2VyIGluaSBzZXRlbGFoIG11bGFpLiAoZGVmYXVsdCAlcykuIgorCisjIE9LCisjOiBvcHRpb24uYzo0MDMKKyMsIGZ1enp5Cittc2dpZCAiTWFwIERIQ1AgdmVuZG9yIGNsYXNzIHRvIHRhZy4iCittc2dzdHIgIk1lbWV0YWthbiBrZWxhcyB2ZW5kb3IgREhDUCBrZSBkYWZ0YXIgcGlsaWhhbi4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjQwNAorbXNnaWQgIkRpc3BsYXkgZG5zbWFzcSB2ZXJzaW9uIGFuZCBjb3B5cmlnaHQgaW5mb3JtYXRpb24uIgorbXNnc3RyICJNZW5hbXBpbGthbiB2ZXJzaSBkYW4gaW5mb3JtYXNpIGhhayBjaXB0YSBkbnNtYXNxLiIKKworIyBPSworIzogb3B0aW9uLmM6NDA1Cittc2dpZCAiVHJhbnNsYXRlIElQdjQgYWRkcmVzc2VzIGZyb20gdXBzdHJlYW0gc2VydmVycy4iCittc2dzdHIgIlRlcmplbWFoa2FuIGFsYW1hdC1hbGFtYXQgSVB2NCBkYXJpIHNlcnZlci1zZXJ2ZXIgZGkgYXRhcy4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjQwNgorbXNnaWQgIlNwZWNpZnkgYSBTUlYgcmVjb3JkLiIKK21zZ3N0ciAiU2VidXRrYW4gcmVrb3JkIFNSVi4iCisKKyM6IG9wdGlvbi5jOjQwNworbXNnaWQgIkRpc3BsYXkgdGhpcyBtZXNzYWdlLiBVc2UgLS1oZWxwIGRoY3Agb3IgLS1oZWxwIGRoY3A2IGZvciBrbm93biBESENQIG9wdGlvbnMuIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjQwOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSBwYXRoIG9mIFBJRCBmaWxlIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJTZWJ1dGthbiBwYXRoIGZpbGUgUElELiAoZGVmYXVsdCAlcykuIgorCisjIE9LCisjOiBvcHRpb24uYzo0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSBtYXhpbXVtIG51bWJlciBvZiBESENQIGxlYXNlcyAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiU2VidXRrYW4ganVtbGFoIG1ha3NpbXVtIGxlYXNlIERIQ1AgKGRlZmF1bHQgJXMpLiIKKworIyBPSworIzogb3B0aW9uLmM6NDEwCittc2dpZCAiQW5zd2VyIEROUyBxdWVyaWVzIGJhc2VkIG9uIHRoZSBpbnRlcmZhY2UgYSBxdWVyeSB3YXMgc2VudCB0by4iCittc2dzdHIgIkphd2FiIHBlcm1pbnRhYW4gRE5TIGJlcmRhc2Fya2FuIGFudGFybXVrYSBkaW1hbmEgcGVybWludGFhbiBkaWtpcmlta2FuLiIKKworIyBPSworIzogb3B0aW9uLmM6NDExCittc2dpZCAiU3BlY2lmeSBUWFQgRE5TIHJlY29yZC4iCittc2dzdHIgIlNlYnV0a2FuIHJla29yZCBUWFQgRE5TLiIKKworIyBPSworIzogb3B0aW9uLmM6NDEyCisjLCBmdXp6eQorbXNnaWQgIlNwZWNpZnkgUFRSIEROUyByZWNvcmQuIgorbXNnc3RyICJTZWJ1dGthbiByZWtvcmQgVFhUIEROUy4iCisKKyM6IG9wdGlvbi5jOjQxMworbXNnaWQgIkdpdmUgRE5TIG5hbWUgdG8gSVB2NCBhZGRyZXNzIG9mIGludGVyZmFjZS4iCittc2dzdHIgIiIKKworIyBPSworIzogb3B0aW9uLmM6NDE0Cittc2dpZCAiQmluZCBvbmx5IHRvIGludGVyZmFjZXMgaW4gdXNlLiIKK21zZ3N0ciAiSGFueWEga2FpdGthbiBrZSBhbnRhcm11a2EgeWFuZyBzZWRhbmcgZGlndW5ha2FuIHNhamEuIgorCisjIE9LCisjOiBvcHRpb24uYzo0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVhZCBESENQIHN0YXRpYyBob3N0IGluZm9ybWF0aW9uIGZyb20gJXMuIgorbXNnc3RyICJCYWNhIGluZm9ybWFzaSBzdGF0aWsgaG9zdCBESENQIGRhcmkgJXMuIgorCisjIE9LCisjOiBvcHRpb24uYzo0MTYKK21zZ2lkICJFbmFibGUgdGhlIERCdXMgaW50ZXJmYWNlIGZvciBzZXR0aW5nIHVwc3RyZWFtIHNlcnZlcnMsIGV0Yy4iCittc2dzdHIgIk11bmdraW5rYW4gYW50YXIgbXVrYSBEQnVzIHVudHVrIG1lbnlldGVsIHNlcnZlci1zZXJ2ZXIgZGkgYXRhcywgZHNiLiIKKworIyBPSworIzogb3B0aW9uLmM6NDE3Cittc2dpZCAiRG8gbm90IHByb3ZpZGUgREhDUCBvbiB0aGlzIGludGVyZmFjZSwgb25seSBwcm92aWRlIEROUy4iCittc2dzdHIgIkpBTkdBTiBtZW55ZWRpYWthbiBESENQIHBhZGEgYW50YXJtdWthIGluaSwgaGFueWEgbWVueWVkaWFrYW4gRE5TLiIKKworIyBPSworIzogb3B0aW9uLmM6NDE4Cittc2dpZCAiRW5hYmxlIGR5bmFtaWMgYWRkcmVzcyBhbGxvY2F0aW9uIGZvciBib290cC4iCittc2dzdHIgIk11bmdraW5rYW4gYWxva2FzaSBhbGFtYXQgZGluYW1pcyB1bnR1ayBib290cC4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjQxOQorIywgZnV6enkKK21zZ2lkICJNYXAgTUFDIGFkZHJlc3MgKHdpdGggd2lsZGNhcmRzKSB0byBvcHRpb24gc2V0LiIKK21zZ3N0ciAiTWVtZXRha2FuIGtlbGFzIHZlbmRvciBESENQIGtlIGRhZnRhciBwaWxpaGFuLiIKKworIzogb3B0aW9uLmM6NDIwCittc2dpZCAiVHJlYXQgREhDUCByZXF1ZXN0cyBvbiBhbGlhc2VzIGFzIGFycml2aW5nIGZyb20gaW50ZXJmYWNlLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MjEKK21zZ2lkICJEaXNhYmxlIElDTVAgZWNobyBhZGRyZXNzIGNoZWNraW5nIGluIHRoZSBESENQIHNlcnZlci4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDIyCittc2dpZCAiU2hlbGwgc2NyaXB0IHRvIHJ1biBvbiBESENQIGxlYXNlIGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDIzCittc2dpZCAiTHVhIHNjcmlwdCB0byBydW4gb24gREhDUCBsZWFzZSBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQyNAorbXNnaWQgIlJ1biBsZWFzZS1jaGFuZ2Ugc2NyaXB0cyBhcyB0aGlzIHVzZXIuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQyNQorbXNnaWQgIkNhbGwgZGhjcC1zY3JpcHQgd2l0aCBjaGFuZ2VzIHRvIGxvY2FsIEFSUCB0YWJsZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDI2Cittc2dpZCAiUmVhZCBjb25maWd1cmF0aW9uIGZyb20gYWxsIHRoZSBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeS4iCittc2dzdHIgIiIKKworIyBPSworIzogb3B0aW9uLmM6NDI3CisjLCBmdXp6eQorbXNnaWQgIkxvZyB0byB0aGlzIHN5c2xvZyBmYWNpbGl0eSBvciBmaWxlLiAoZGVmYXVsdHMgdG8gREFFTU9OKSIKK21zZ3N0ciAiVWJhaCBrZSB1c2VyIGluaSBzZXRlbGFoIG11bGFpLiAoZGVmYXVsdCAlcykuIgorCisjOiBvcHRpb24uYzo0MjgKK21zZ2lkICJEbyBub3QgdXNlIGxlYXNlZmlsZS4iCittc2dzdHIgIiIKKworIyBPSworIzogb3B0aW9uLmM6NDI5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IEROUyBxdWVyaWVzLiAoZGVmYXVsdHMgdG8gJXMpIgorbXNnc3RyICJTZWJ1dGthbiBqdW1sYWggbWFrc2ltdW0gbGVhc2UgREhDUCAoZGVmYXVsdCAlcykuIgorCisjOiBvcHRpb24uYzo0MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xlYXIgRE5TIGNhY2hlIHdoZW4gcmVsb2FkaW5nICVzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzEKK21zZ2lkICJJZ25vcmUgaG9zdG5hbWVzIHByb3ZpZGVkIGJ5IERIQ1AgY2xpZW50cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDMyCittc2dpZCAiRG8gTk9UIHJldXNlIGZpbGVuYW1lIGFuZCBzZXJ2ZXIgZmllbGRzIGZvciBleHRyYSBESENQIG9wdGlvbnMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQzMworbXNnaWQgIkVuYWJsZSBpbnRlZ3JhdGVkIHJlYWQtb25seSBURlRQIHNlcnZlci4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDM0Cittc2dpZCAiRXhwb3J0IGZpbGVzIGJ5IFRGVFAgb25seSBmcm9tIHRoZSBzcGVjaWZpZWQgc3VidHJlZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDM1Cittc2dpZCAiQWRkIGNsaWVudCBJUCBvciBoYXJkd2FyZSBhZGRyZXNzIHRvIHRmdHAtcm9vdC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDM2Cittc2dpZCAiQWxsb3cgYWNjZXNzIG9ubHkgdG8gZmlsZXMgb3duZWQgYnkgdGhlIHVzZXIgcnVubmluZyBkbnNtYXNxLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzcKK21zZ2lkICJEbyBub3QgdGVybWluYXRlIHRoZSBzZXJ2aWNlIGlmIFRGVFAgZGlyZWN0b3JpZXMgYXJlIGluYWNjZXNzaWJsZS4iCittc2dzdHIgIiIKKworIyBPSworIzogb3B0aW9uLmM6NDM4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IFRGVFAgdHJhbnNmZXJzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJTZWJ1dGthbiBqdW1sYWggbWFrc2ltdW0gbGVhc2UgREhDUCAoZGVmYXVsdCAlcykuIgorCisjIE9LCisjOiBvcHRpb24uYzo0MzkKKyMsIGZ1enp5Cittc2dpZCAiTWF4aW11bSBNVFUgdG8gdXNlIGZvciBURlRQIHRyYW5zZmVycy4iCittc2dzdHIgIlNlYnV0a2FuIGp1bWxhaCBtYWtzaW11bSBsZWFzZSBESENQIChkZWZhdWx0ICVzKS4iCisKKyM6IG9wdGlvbi5jOjQ0MAorbXNnaWQgIkRpc2FibGUgdGhlIFRGVFAgYmxvY2tzaXplIGV4dGVuc2lvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQxCittc2dpZCAiQ29udmVydCBURlRQIGZpbGVuYW1lcyB0byBsb3dlcmNhc2UiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQyCittc2dpZCAiRXBoZW1lcmFsIHBvcnQgcmFuZ2UgZm9yIHVzZSBieSBURlRQIHRyYW5zZmVycy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQzCittc2dpZCAiRXh0cmEgbG9nZ2luZyBmb3IgREhDUC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQ0Cittc2dpZCAiRW5hYmxlIGFzeW5jLiBsb2dnaW5nOyBvcHRpb25hbGx5IHNldCBxdWV1ZSBsZW5ndGguIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ0NQorbXNnaWQgIlN0b3AgRE5TIHJlYmluZGluZy4gRmlsdGVyIHByaXZhdGUgSVAgcmFuZ2VzIHdoZW4gcmVzb2x2aW5nLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDYKK21zZ2lkICJBbGxvdyByZWJpbmRpbmcgb2YgMTI3LjAuMC4wLzgsIGZvciBSQkwgc2VydmVycy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQ3Cittc2dpZCAiSW5oaWJpdCBETlMtcmViaW5kIHByb3RlY3Rpb24gb24gdGhpcyBkb21haW4uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ0OAorbXNnaWQgIkFsd2F5cyBwZXJmb3JtIEROUyBxdWVyaWVzIHRvIGFsbCBzZXJ2ZXJzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDkKK21zZ2lkICJTZXQgdGFnIGlmIGNsaWVudCBpbmNsdWRlcyBtYXRjaGluZyBvcHRpb24gaW4gcmVxdWVzdC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDUwCittc2dpZCAiVXNlIGFsdGVybmF0aXZlIHBvcnRzIGZvciBESENQLiIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBvcHRpb24uYzo0NTEKKyMsIGZ1enp5Cittc2dpZCAiU3BlY2lmeSBOQVBUUiBETlMgcmVjb3JkLiIKK21zZ3N0ciAiU2VidXRrYW4gcmVrb3JkIFRYVCBETlMuIgorCisjOiBvcHRpb24uYzo0NTIKK21zZ2lkICJTcGVjaWZ5IGxvd2VzdCBwb3J0IGF2YWlsYWJsZSBmb3IgRE5TIHF1ZXJ5IHRyYW5zbWlzc2lvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDUzCittc2dpZCAiU3BlY2lmeSBoaWdoZXN0IHBvcnQgYXZhaWxhYmxlIGZvciBETlMgcXVlcnkgdHJhbnNtaXNzaW9uLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NTQKK21zZ2lkICJVc2Ugb25seSBmdWxseSBxdWFsaWZpZWQgZG9tYWluIG5hbWVzIGZvciBESENQIGNsaWVudHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1NQorbXNnaWQgIkdlbmVyYXRlIGhvc3RuYW1lcyBiYXNlZCBvbiBNQUMgYWRkcmVzcyBmb3IgbmFtZWxlc3MgY2xpZW50cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDU2Cittc2dpZCAiVXNlIHRoZXNlIERIQ1AgcmVsYXlzIGFzIGZ1bGwgcHJveGllcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDU3Cittc2dpZCAiUmVsYXkgREhDUCByZXF1ZXN0cyB0byBhIHJlbW90ZSBzZXJ2ZXIiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDU4Cittc2dpZCAiU3BlY2lmeSBhbGlhcyBuYW1lIGZvciBMT0NBTCBETlMgbmFtZS4iCittc2dzdHIgIiIKKworIyBPSworIzogb3B0aW9uLmM6NDU5CisjLCBmdXp6eQorbXNnaWQgIlByb21wdCB0byBzZW5kIHRvIFBYRSBjbGllbnRzLiIKK21zZ3N0ciAiU2V0ZWwgcGlsaWhhbi1waWxpaGFuIHRhbWJhaGFuIHlhbmcgYWthbiBkaXNldGVsIHVudHVrIGtsaWVuLWtsaWVuIERIQ1AuIgorCisjOiBvcHRpb24uYzo0NjAKK21zZ2lkICJCb290IHNlcnZpY2UgZm9yIFBYRSBtZW51LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NjEKK21zZ2lkICJDaGVjayBjb25maWd1cmF0aW9uIHN5bnRheC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDYyCittc2dpZCAiQWRkIHJlcXVlc3RvcidzIE1BQyBhZGRyZXNzIHRvIGZvcndhcmRlZCBETlMgcXVlcmllcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDYzCittc2dpZCAiQWRkIHNwZWNpZmllZCBJUCBzdWJuZXQgdG8gZm9yd2FyZGVkIEROUyBxdWVyaWVzLiIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBvcHRpb24uYzo0NjQKKyMsIGZ1enp5Cittc2dpZCAiQWRkIGNsaWVudCBpZGVudGlmaWNhdGlvbiB0byBmb3J3YXJkZWQgRE5TIHF1ZXJpZXMuIgorbXNnc3RyICJQYWtzYSBwb3J0IGFzYWwgdW50dWsgcGVybWludGFhbiBrZSBhdGFzLiIKKworIyBPSworIzogb3B0aW9uLmM6NDY1CisjLCBmdXp6eQorbXNnaWQgIlByb3h5IEROU1NFQyB2YWxpZGF0aW9uIHJlc3VsdHMgZnJvbSB1cHN0cmVhbSBuYW1lc2VydmVycy4iCittc2dzdHIgIlRlcmplbWFoa2FuIGFsYW1hdC1hbGFtYXQgSVB2NCBkYXJpIHNlcnZlci1zZXJ2ZXIgZGkgYXRhcy4iCisKKyM6IG9wdGlvbi5jOjQ2NgorbXNnaWQgIkF0dGVtcHQgdG8gYWxsb2NhdGUgc2VxdWVudGlhbCBJUCBhZGRyZXNzZXMgdG8gREhDUCBjbGllbnRzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NjcKK21zZ2lkICJDb3B5IGNvbm5lY3Rpb24tdHJhY2sgbWFyayBmcm9tIHF1ZXJpZXMgdG8gdXBzdHJlYW0gY29ubmVjdGlvbnMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ2OAorbXNnaWQgIkFsbG93IERIQ1AgY2xpZW50cyB0byBkbyB0aGVpciBvd24gREROUyB1cGRhdGVzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NjkKK21zZ2lkICJTZW5kIHJvdXRlci1hZHZlcnRpc2VtZW50cyBmb3IgaW50ZXJmYWNlcyBkb2luZyBESENQdjYiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDcwCittc2dpZCAiU3BlY2lmeSBEVUlEX0VOLXR5cGUgREhDUHY2IHNlcnZlciBEVUlEIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjQ3MQorIywgZnV6enkKK21zZ2lkICJTcGVjaWZ5IGhvc3QgKEEvQUFBQSBhbmQgUFRSKSByZWNvcmRzIgorbXNnc3RyICJTZWJ1dGthbiBzZWJ1YWggcmVrb3JkIE1YLiIKKworIyBPSworIzogb3B0aW9uLmM6NDcyCisjLCBmdXp6eQorbXNnaWQgIlNwZWNpZnkgYXJiaXRyYXJ5IEROUyByZXNvdXJjZSByZWNvcmQiCittc2dzdHIgIlNlYnV0a2FuIHJla29yZCBUWFQgRE5TLiIKKworIyBPSworIzogb3B0aW9uLmM6NDczCisjLCBmdXp6eQorbXNnaWQgIkJpbmQgdG8gaW50ZXJmYWNlcyBpbiB1c2UgLSBjaGVjayBmb3IgbmV3IGludGVyZmFjZXMiCittc2dzdHIgImFudGFybXVrYSB0aWRhayBkaWtlbmFsICVzIgorCisjOiBvcHRpb24uYzo0NzQKK21zZ2lkICJFeHBvcnQgbG9jYWwgbmFtZXMgdG8gZ2xvYmFsIEROUyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NzUKK21zZ2lkICJEb21haW4gdG8gZXhwb3J0IHRvIGdsb2JhbCBETlMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDc2Cittc2dpZCAiU2V0IFRUTCBmb3IgYXV0aG9yaXRhdGl2ZSByZXBsaWVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ3NworbXNnaWQgIlNldCBhdXRob3JpdGF0aXZlIHpvbmUgaW5mb3JtYXRpb24iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDc4Cittc2dpZCAiU2Vjb25kYXJ5IGF1dGhvcml0YXRpdmUgbmFtZXNlcnZlcnMgZm9yIGZvcndhcmQgZG9tYWlucyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NzkKK21zZ2lkICJQZWVycyB3aGljaCBhcmUgYWxsb3dlZCB0byBkbyB6b25lIHRyYW5zZmVyIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ4MAorbXNnaWQgIlNwZWNpZnkgaXBzZXRzIHRvIHdoaWNoIG1hdGNoaW5nIGRvbWFpbnMgc2hvdWxkIGJlIGFkZGVkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ4MQorbXNnaWQgIlNwZWNpZnkgYSBkb21haW4gYW5kIGFkZHJlc3MgcmFuZ2UgZm9yIHN5bnRoZXNpc2VkIG5hbWVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ4MgorbXNnaWQgIkFjdGl2YXRlIEROU1NFQyB2YWxpZGF0aW9uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ4MworbXNnaWQgIlNwZWNpZnkgdHJ1c3QgYW5jaG9yIGtleSBkaWdlc3QuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ4NAorbXNnaWQgIkRpc2FibGUgdXBzdHJlYW0gY2hlY2tpbmcgZm9yIEROU1NFQyBkZWJ1Z2dpbmcuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ4NQorbXNnaWQgIkVuc3VyZSBhbnN3ZXJzIHdpdGhvdXQgRE5TU0VDIGFyZSBpbiB1bnNpZ25lZCB6b25lcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDg2Cittc2dpZCAiRG9uJ3QgY2hlY2sgRE5TU0VDIHNpZ25hdHVyZSB0aW1lc3RhbXBzIHVudGlsIGZpcnN0IGNhY2hlLXJlbG9hZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0ODcKK21zZ2lkICJUaW1lc3RhbXAgZmlsZSB0byB2ZXJpZnkgc3lzdGVtIGNsb2NrIGZvciBETlNTRUMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDg5Cittc2dpZCAiU3BlY2lmeSBESENQdjYgcHJlZml4IGNsYXNzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ5MQorbXNnaWQgIlNldCBNVFUsIHByaW9yaXR5LCByZXNlbmQtaW50ZXJ2YWwgYW5kIHJvdXRlci1saWZldGltZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0OTIKK21zZ2lkICJEbyBub3QgbG9nIHJvdXRpbmUgREhDUC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDkzCittc2dpZCAiRG8gbm90IGxvZyByb3V0aW5lIERIQ1B2Ni4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDk0Cittc2dpZCAiRG8gbm90IGxvZyBSQS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDk1Cittc2dpZCAiQWNjZXB0IHF1ZXJpZXMgb25seSBmcm9tIGRpcmVjdGx5LWNvbm5lY3RlZCBuZXR3b3Jrcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDk2Cittc2dpZCAiRGV0ZWN0IGFuZCByZW1vdmUgRE5TIGZvcndhcmRpbmcgbG9vcHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ5NworbXNnaWQgIklnbm9yZSBETlMgcmVzcG9uc2VzIGNvbnRhaW5pbmcgaXBhZGRyLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0OTgKK21zZ2lkICJTZXQgVFRMIGluIEROUyByZXNwb25zZXMgd2l0aCBESENQLWRlcml2ZWQgYWRkcmVzc2VzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0OTkKK21zZ2lkICJEZWxheSBESENQIHJlcGxpZXMgZm9yIGF0IGxlYXN0IG51bWJlciBvZiBzZWNvbmRzLiIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBvcHRpb24uYzo3MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiBkbnNtYXNxIFtvcHRpb25zXVxuIgorIlxuIgorbXNnc3RyICIiCisiUGVuZ2d1bmFhbjogZG5zbWFzcSBbcGlsaWhhbl1cbiIKKyJcbiIKKworIyBPSworIzogb3B0aW9uLmM6NzA1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzZSBzaG9ydCBvcHRpb25zIG9ubHkgb24gdGhlIGNvbW1hbmQgbGluZS5cbiIKK21zZ3N0ciAiR3VuYWthbiBwaWxpaGFuIHBlbmRlayBzYWphIHBhZGEgcGVyaW50YWggYmFyaXMuXG4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjcwNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVmFsaWQgb3B0aW9ucyBhcmU6XG4iCittc2dzdHIgIlBpbGloYW4geWFuZyBib2xlaCBhZGFsYWg6XG4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjc1NCBvcHRpb24uYzo4NjgKKyMsIGZ1enp5Cittc2dpZCAiYmFkIGFkZHJlc3MiCittc2dzdHIgIm1lbWJhY2EgJXMgLSAlZCBhbGFtYXQiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjc3OSBvcHRpb24uYzo3ODMKK21zZ2lkICJiYWQgcG9ydCIKK21zZ3N0ciAicG9ydCBzYWxhaCIKKworIzogb3B0aW9uLmM6Nzk3IG9wdGlvbi5jOjgyNiBvcHRpb24uYzo4NjEKK21zZ2lkICJpbnRlcmZhY2UgYmluZGluZyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjgyMSBvcHRpb24uYzo4NTYKK21zZ2lkICJpbnRlcmZhY2UgY2FuIG9ubHkgYmUgc3BlY2lmaWVkIG9uY2UiCittc2dzdHIgIiIKKworIyBPSworIzogb3B0aW9uLmM6ODM1IG9wdGlvbi5jOjM4MDAKKyMsIGZ1enp5Cittc2dpZCAiYmFkIGludGVyZmFjZSBuYW1lIgorbXNnc3RyICJuYW1hIE1YIHNhbGFoIgorCisjOiBvcHRpb24uYzoxMDYyCittc2dpZCAidW5zdXBwb3J0ZWQgZW5jYXBzdWxhdGlvbiBmb3IgSVB2NiBvcHRpb24iCittc2dzdHIgIiIKKworIyBPSworIzogb3B0aW9uLmM6MTA3NgorbXNnaWQgImJhZCBkaGNwLW9wdGlvbiIKK21zZ3N0ciAiZGhjcC1vcHRpb24gc2FsYWgiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjExNDQKKyMsIGZ1enp5Cittc2dpZCAiYmFkIElQIGFkZHJlc3MiCittc2dzdHIgIm1lbWJhY2EgJXMgLSAlZCBhbGFtYXQiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjExNDcgb3B0aW9uLmM6MTI4NiBvcHRpb24uYzozMDcwCisjLCBmdXp6eQorbXNnaWQgImJhZCBJUHY2IGFkZHJlc3MiCittc2dzdHIgIm1lbWJhY2EgJXMgLSAlZCBhbGFtYXQiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjEyNDAKKyMsIGZ1enp5Cittc2dpZCAiYmFkIElQdjQgYWRkcmVzcyIKK21zZ3N0ciAibWVtYmFjYSAlcyAtICVkIGFsYW1hdCIKKworIyBPSworIzogb3B0aW9uLmM6MTMxMyBvcHRpb24uYzoxNDA3Cittc2dpZCAiYmFkIGRvbWFpbiBpbiBkaGNwLW9wdGlvbiIKK21zZ3N0ciAiZG9tYWluIGRhbGFtIGRoY3Atb3B0aW9uIHNhbGFoIgorCisjIE9LCisjOiBvcHRpb24uYzoxNDQ1Cittc2dpZCAiZGhjcC1vcHRpb24gdG9vIGxvbmciCittc2dzdHIgImRoY3Atb3B0aW9uIHRlcmxhbHUgcGFuamFuZyIKKworIzogb3B0aW9uLmM6MTQ1MgorbXNnaWQgImlsbGVnYWwgZGhjcC1tYXRjaCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNTE0Cittc2dpZCAiaWxsZWdhbCByZXBlYXRlZCBmbGFnIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE1MjIKK21zZ2lkICJpbGxlZ2FsIHJlcGVhdGVkIGtleXdvcmQiCittc2dzdHIgIiIKKworIyBPSworIzogb3B0aW9uLmM6MTU5MyBvcHRpb24uYzo0NDM0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgYWNjZXNzIGRpcmVjdG9yeSAlczogJXMiCittc2dzdHIgInRpZGFrIGJpc2EgbWVtYmFjYSAlczogJXMiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjE2MzkgdGZ0cC5jOjUzNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGFjY2VzcyAlczogJXMiCittc2dzdHIgInRpZGFrIGJpc2EgbWVtYmFjYSAlczogJXMiCisKKyM6IG9wdGlvbi5jOjE3MjcKK21zZ2lkICJzZXR0aW5nIGxvZyBmYWNpbGl0eSBpcyBub3QgcG9zc2libGUgdW5kZXIgQW5kcm9pZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNzM2Cittc2dpZCAiYmFkIGxvZyBmYWNpbGl0eSIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBvcHRpb24uYzoxNzg5Cittc2dpZCAiYmFkIE1YIHByZWZlcmVuY2UiCittc2dzdHIgImtlc3VrYWFuIE1YIHNhbGFoIgorCisjIE9LCisjOiBvcHRpb24uYzoxNzk0Cittc2dpZCAiYmFkIE1YIG5hbWUiCittc2dzdHIgIm5hbWEgTVggc2FsYWgiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjE4MDgKK21zZ2lkICJiYWQgTVggdGFyZ2V0IgorbXNnc3RyICJ0YXJnZXQgTVggc2FsYWgiCisKKyM6IG9wdGlvbi5jOjE4MjAKK21zZ2lkICJjYW5ub3QgcnVuIHNjcmlwdHMgdW5kZXIgdUNsaW51eCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxODIyCittc2dpZCAicmVjb21waWxlIHdpdGggSEFWRV9TQ1JJUFQgZGVmaW5lZCB0byBlbmFibGUgbGVhc2UtY2hhbmdlIHNjcmlwdHMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTgyNgorbXNnaWQgInJlY29tcGlsZSB3aXRoIEhBVkVfTFVBU0NSSVBUIGRlZmluZWQgdG8gZW5hYmxlIEx1YSBzY3JpcHRzIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjIwOTUgb3B0aW9uLmM6MjEwNiBvcHRpb24uYzoyMTQzIG9wdGlvbi5jOjIxOTkgb3B0aW9uLmM6MjQ4MgorIywgZnV6enkKK21zZ2lkICJiYWQgcHJlZml4IgorbXNnc3RyICJwb3J0IHNhbGFoIgorCisjOiBvcHRpb24uYzoyNTA0Cittc2dpZCAicmVjb21waWxlIHdpdGggSEFWRV9JUFNFVCBkZWZpbmVkIHRvIGVuYWJsZSBpcHNldCBkaXJlY3RpdmVzIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjI3MTMKKyMsIGZ1enp5Cittc2dpZCAiYmFkIHBvcnQgcmFuZ2UiCittc2dzdHIgInBvcnQgc2FsYWgiCisKKyM6IG9wdGlvbi5jOjI3MzgKK21zZ2lkICJiYWQgYnJpZGdlLWludGVyZmFjZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNzk4Cittc2dpZCAib25seSBvbmUgdGFnIGFsbG93ZWQiCittc2dzdHIgIiIKKworIyBPSworIzogb3B0aW9uLmM6MjgxOCBvcHRpb24uYzoyODMwIG9wdGlvbi5jOjI5Mzkgb3B0aW9uLmM6Mjk0NCBvcHRpb24uYzoyOTgzCittc2dpZCAiYmFkIGRoY3AtcmFuZ2UiCittc2dzdHIgImRoY3AtcmFuZ2Ugc2FsYWgiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjI4NDUKK21zZ2lkICJpbmNvbnNpc3RlbnQgREhDUCByYW5nZSIKK21zZ3N0ciAiamFuZ2thdWFuIERIQ1AgdGlkYWsga29uc2lzdGVuIgorCisjOiBvcHRpb24uYzoyOTA3Cittc2dpZCAicHJlZml4IGxlbmd0aCBtdXN0IGJlIGV4YWN0bHkgNjQgZm9yIFJBIHN1Ym5ldHMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjkwOQorbXNnaWQgInByZWZpeCBsZW5ndGggbXVzdCBiZSBleGFjdGx5IDY0IGZvciBzdWJuZXQgY29uc3RydWN0b3JzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5MTMKK21zZ2lkICJwcmVmaXggbGVuZ3RoIG11c3QgYmUgYXQgbGVhc3QgNjQiCittc2dzdHIgIiIKKworIyBPSworIzogb3B0aW9uLmM6MjkxNgorIywgZnV6enkKK21zZ2lkICJpbmNvbnNpc3RlbnQgREhDUHY2IHJhbmdlIgorbXNnc3RyICJqYW5na2F1YW4gREhDUCB0aWRhayBrb25zaXN0ZW4iCisKKyM6IG9wdGlvbi5jOjI5MjcKK21zZ2lkICJwcmVmaXggbXVzdCBiZSB6ZXJvIHdpdGggXCJjb25zdHJ1Y3RvcjpcIiBhcmd1bWVudCIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBvcHRpb24uYzozMDQwIG9wdGlvbi5jOjMwODgKKyMsIGZ1enp5Cittc2dpZCAiYmFkIGhleCBjb25zdGFudCIKK21zZ3N0ciAiZGhjcC1ob3N0IHNhbGFoIgorCisjOiBvcHRpb24uYzozMDYyCittc2dpZCAiY2Fubm90IG1hdGNoIHRhZ3MgaW4gLS1kaGNwLWhvc3QiCittc2dzdHIgIiIKKworIyBPSworIzogb3B0aW9uLmM6MzExMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIGRoY3AtaG9zdCBJUCBhZGRyZXNzICVzIgorbXNnc3RyICJhbGFtYXQgSVAga2VtYmFyICVzIGRhbGFtIGRpcmVrdGlmIGRoY3AtY29uZmlnIgorCisjIE9LCisjOiBvcHRpb24uYzozMTY4CisjLCBmdXp6eQorbXNnaWQgImJhZCBESENQIGhvc3QgbmFtZSIKK21zZ3N0ciAibmFtYSBNWCBzYWxhaCIKKworIyBPSworIzogb3B0aW9uLmM6MzI1MAorIywgZnV6enkKK21zZ2lkICJiYWQgdGFnLWlmIgorbXNnc3RyICJ0YXJnZXQgTVggc2FsYWgiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjM2MDcgb3B0aW9uLmM6NDAzMAorbXNnaWQgImludmFsaWQgcG9ydCBudW1iZXIiCittc2dzdHIgIm5vbW9yIHBvcnQgdGlkYWsgYmVuYXIiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjM2NjkKKyMsIGZ1enp5Cittc2dpZCAiYmFkIGRoY3AtcHJveHkgYWRkcmVzcyIKK21zZ3N0ciAibWVtYmFjYSAlcyAtICVkIGFsYW1hdCIKKworIyBPSworIzogb3B0aW9uLmM6MzY5NQorIywgZnV6enkKK21zZ2lkICJCYWQgZGhjcC1yZWxheSIKK21zZ3N0ciAiZGhjcC1yYW5nZSBzYWxhaCIKKworIzogb3B0aW9uLmM6MzczNgorbXNnaWQgImJhZCBSQS1wYXJhbXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzc0NQorbXNnaWQgImJhZCBEVUlEIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjM3ODcKKyMsIGZ1enp5Cittc2dpZCAiaW52YWxpZCBhbGlhcyByYW5nZSIKK21zZ3N0ciAid2VpZ2h0IHRpZGFrIGJlbmFyIgorCisjOiBvcHRpb24uYzozODQxIG9wdGlvbi5jOjM4NTMKK21zZ2lkICJiYWQgQ05BTUUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzg1NworbXNnaWQgImR1cGxpY2F0ZSBDTkFNRSIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBvcHRpb24uYzozODgwCisjLCBmdXp6eQorbXNnaWQgImJhZCBQVFIgcmVjb3JkIgorbXNnc3RyICJyZWtvcmQgU1JWIHNhbGFoIgorCisjIE9LCisjOiBvcHRpb24uYzozOTExCisjLCBmdXp6eQorbXNnaWQgImJhZCBOQVBUUiByZWNvcmQiCittc2dzdHIgInJla29yZCBTUlYgc2FsYWgiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjM5NDUKKyMsIGZ1enp5Cittc2dpZCAiYmFkIFJSIHJlY29yZCIKK21zZ3N0ciAicmVrb3JkIFNSViBzYWxhaCIKKworIyBPSworIzogb3B0aW9uLmM6Mzk3NQorbXNnaWQgImJhZCBUWFQgcmVjb3JkIgorbXNnc3RyICJyZWtvcmQgVFhUIHNhbGFoIgorCisjIE9LCisjOiBvcHRpb24uYzo0MDE2Cittc2dpZCAiYmFkIFNSViByZWNvcmQiCittc2dzdHIgInJla29yZCBTUlYgc2FsYWgiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjQwMjMKK21zZ2lkICJiYWQgU1JWIHRhcmdldCIKK21zZ3N0ciAidGFyZ2V0IFNSViBzYWxhaCIKKworIyBPSworIzogb3B0aW9uLmM6NDAzNworbXNnaWQgImludmFsaWQgcHJpb3JpdHkiCittc2dzdHIgInByaW9yaXRhcyB0aWRhayBiZW5hciIKKworIyBPSworIzogb3B0aW9uLmM6NDA0MAorbXNnaWQgImludmFsaWQgd2VpZ2h0IgorbXNnc3RyICJ3ZWlnaHQgdGlkYWsgYmVuYXIiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjQwNjQKKyMsIGZ1enp5Cittc2dpZCAiQmFkIGhvc3QtcmVjb3JkIgorbXNnc3RyICJyZWtvcmQgU1JWIHNhbGFoIgorCisjIE9LCisjOiBvcHRpb24uYzo0MDg4CisjLCBmdXp6eQorbXNnaWQgIkJhZCBuYW1lIGluIGhvc3QtcmVjb3JkIgorbXNnc3RyICJrZXNhbGFoYW4gbmFtYSBkaSAlcyIKKworIyBPSworIzogb3B0aW9uLmM6NDE1MworIywgZnV6enkKK21zZ2lkICJiYWQgdHJ1c3QgYW5jaG9yIgorbXNnc3RyICJwb3J0IHNhbGFoIgorCisjOiBvcHRpb24uYzo0MTY3Cittc2dpZCAiYmFkIEhFWCBpbiB0cnVzdCBhbmNob3IiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDE3NworbXNnaWQgInVuc3VwcG9ydGVkIG9wdGlvbiAoY2hlY2sgdGhhdCBkbnNtYXNxIHdhcyBjb21waWxlZCB3aXRoIERIQ1AvVEZUUC9ETlNTRUMvREJ1cyBzdXBwb3J0KSIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBvcHRpb24uYzo0MjM3Cittc2dpZCAibWlzc2luZyBcIiIKK21zZ3N0ciAia3VyYW5nIFwiIgorCisjIE9LCisjOiBvcHRpb24uYzo0Mjk0Cittc2dpZCAiYmFkIG9wdGlvbiIKK21zZ3N0ciAicGlsaWhhbiBzYWxhaCIKKworIyBPSworIzogb3B0aW9uLmM6NDI5NgorbXNnaWQgImV4dHJhbmVvdXMgcGFyYW1ldGVyIgorbXNnc3RyICJwYXJhbWV0ZXIgYmVybGViaWhhbiIKKworIyBPSworIzogb3B0aW9uLmM6NDI5OAorbXNnaWQgIm1pc3NpbmcgcGFyYW1ldGVyIgorbXNnc3RyICJwYXJhbWV0ZXIga3VyYW5nIgorCisjIE9LCisjOiBvcHRpb24uYzo0MzAwCisjLCBmdXp6eQorbXNnaWQgImlsbGVnYWwgb3B0aW9uIgorbXNnc3RyICJwaWxpaGFuIHNhbGFoIgorCisjIE9LCisjOiBvcHRpb24uYzo0MzA3Cittc2dpZCAiZXJyb3IiCittc2dzdHIgImtlc2FsYWhhbiIKKworIyBPSworIzogb3B0aW9uLmM6NDMwOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIGF0IGxpbmUgJWQgb2YgJXMiCittc2dzdHIgIiVzIHBhZGEgYmFyaXMgJWQgZGFyaSAlJXMiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjQzMjQgb3B0aW9uLmM6NDU3MSBvcHRpb24uYzo0NjA3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJyZWFkICVzIgorbXNnc3RyICJtZW1iYWNhICVzIgorCisjIE9LCisjOiBvcHRpb24uYzo0Mzg3IG9wdGlvbi5jOjQ1MTAgdGZ0cC5jOjcxNQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAlczogJXMiCittc2dzdHIgInRpZGFrIGJpc2EgbWVtYmFjYSAlczogJXMiCisKKyM6IG9wdGlvbi5jOjQ2NzYKK21zZ2lkICJqdW5rIGZvdW5kIGluIGNvbW1hbmQgbGluZSIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBvcHRpb24uYzo0NzExCisjLCBjLWZvcm1hdAorbXNnaWQgIkRuc21hc3EgdmVyc2lvbiAlcyAgJXNcbiIKK21zZ3N0ciAiRG5zbWFzcSB2ZXJzaSAlcyAgJXNcbiIKKworIyBPSworIzogb3B0aW9uLmM6NDcxMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvbXBpbGUgdGltZSBvcHRpb25zOiAlc1xuIgorIlxuIgorbXNnc3RyICIiCisiUGlsaWhhbi1waWxpaGFuIHNhYXQga29tcGlsYXNpICVzXG4iCisiXG4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjQ3MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuXG4iCittc2dzdHIgIlBlcmFuZ2thdCBsdW5hayBpbmkgdGVyc2VkaWEgVEFOUEEgSkFNSU5BTiBTRURJS0lUUFVOLlxuIgorCisjIE9LCisjOiBvcHRpb24uYzo0NzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkRuc21hc3EgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXRcbiIKK21zZ3N0ciAiRG5zZG1hc3EgYWRhbGFoIHBlcmFuZ2thdCBsdW5hayBiZWJhcywgZGFuIEFuZGEgZGlwZXJzaWxhaGthbiB1bnR1ayBtZW1iYWdpa2FubnlhXG4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjQ3MTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiBvciAzLlxuIgorbXNnc3RyICJkZW5nYW4gYXR1cmFuIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaSAyLlxuIgorCisjOiBvcHRpb24uYzo0NzI2Cittc2dpZCAidHJ5IC0taGVscCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NzI4Cittc2dpZCAidHJ5IC13IgorbXNnc3RyICIiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjQ3MzAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb21tYW5kIGxpbmUgb3B0aW9uczogJXMiCittc2dzdHIgInBpbGloYW4gYmFyaXMgcGVyaW50YWggc2FsYWg6ICVzLiIKKworIzogb3B0aW9uLmM6NDc5OAorIywgYy1mb3JtYXQKK21zZ2lkICJDTkFNRSBsb29wIGludm9sdmluZyAlcyIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBvcHRpb24uYzo0ODM0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBnZXQgaG9zdC1uYW1lOiAlcyIKK21zZ3N0ciAidGlkYWsgYmlzYSBtZW5kYXBhdGthbiBob3N0LW5hbWU6ICVzIgorCisjIE9LCisjOiBvcHRpb24uYzo0ODYyCittc2dpZCAib25seSBvbmUgcmVzb2x2LmNvbmYgZmlsZSBhbGxvd2VkIGluIG5vLXBvbGwgbW9kZS4iCittc2dzdHIgImhhbnlhIHNhdHUgZmlsZSByZXNvbHYuY29uZiB5YW5nIGRpcGVyYm9sZWhrYW4gZGFsYW0gbW9kdXMgbm8tcG9sbC4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjQ4NzIKK21zZ2lkICJtdXN0IGhhdmUgZXhhY3RseSBvbmUgcmVzb2x2LmNvbmYgdG8gcmVhZCBkb21haW4gZnJvbS4iCittc2dzdHIgImhhcnVzIG1lbXB1bnlhaSB0ZXBhdCBzYXR1IHJlc29sdi5jb25mIHVudHVrIG1lbmRhcGF0a2FuIG5hbWEgZG9tYWluLiIKKworIyBPSworIzogb3B0aW9uLmM6NDg3NSBuZXR3b3JrLmM6MTYxMiBkaGNwLmM6ODE2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCAlczogJXMiCittc2dzdHIgImdhZ2FsIG1lbWJhY2EgJXM6ICVzIgorCisjIE9LCisjOiBvcHRpb24uYzo0ODkyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNlYXJjaCBkaXJlY3RpdmUgZm91bmQgaW4gJXMiCittc2dzdHIgInRpZGFrIGRpdGVtdWthbiBkaXJla3RpZiBzZWFyY2ggZGkgJXMiCisKKyM6IG9wdGlvbi5jOjQ5MTMKK21zZ2lkICJ0aGVyZSBtdXN0IGJlIGEgZGVmYXVsdCBkb21haW4gd2hlbiAtLWRoY3AtZnFkbiBpcyBzZXQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDkyMgorbXNnaWQgInN5bnRheCBjaGVjayBPSyIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBmb3J3YXJkLmM6MTAyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2VuZCBwYWNrZXQ6ICVzIgorbXNnc3RyICJnYWdhbCBtZW5kZW5nYXJrYW4gZGkgc29ja2V0OiAlcyIKKworIzogZm9yd2FyZC5jOjU5NworbXNnaWQgImRpc2NhcmRpbmcgRE5TIHJlcGx5OiBzdWJuZXQgb3B0aW9uIG1pc21hdGNoIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IGZvcndhcmQuYzo2NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibmFtZXNlcnZlciAlcyByZWZ1c2VkIHRvIGRvIGEgcmVjdXJzaXZlIHF1ZXJ5IgorbXNnc3RyICJuYW1lc2VydmVyICVzIG1lbm9sYWsgbWVsYWt1a2FuIHJlc29sdXNpIHJla3Vyc2lmIgorCisjOiBmb3J3YXJkLmM6NjgzCisjLCBjLWZvcm1hdAorbXNnaWQgInBvc3NpYmxlIEROUy1yZWJpbmQgYXR0YWNrIGRldGVjdGVkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBmb3J3YXJkLmM6MTI0NCBmb3J3YXJkLmM6MTY4MQorbXNnaWQgIklnbm9yaW5nIHF1ZXJ5IGZyb20gbm9uLWxvY2FsIG5ldHdvcmsiCittc2dzdHIgIiIKKworIyBPSworIzogZm9yd2FyZC5jOjIxNjYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgRE5TIHF1ZXJpZXMgcmVhY2hlZCAobWF4OiAlZCkiCittc2dzdHIgIlNlYnV0a2FuIGp1bWxhaCBtYWtzaW11bSBsZWFzZSBESENQIChkZWZhdWx0ICVzKS4iCisKKyMgT0sKKyM6IG5ldHdvcmsuYzo3MjAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgbGlzdGVuaW5nIHNvY2tldCBmb3IgJXM6ICVzIgorbXNnc3RyICJnYWdhbCBtZW1idWF0IHNvY2tldDogJXMgIgorCisjOiBuZXR3b3JrLmM6MTAzMQorIywgYy1mb3JtYXQKK21zZ2lkICJMT1VEIFdBUk5JTkc6IGxpc3RlbmluZyBvbiAlcyBtYXkgYWNjZXB0IHJlcXVlc3RzIHZpYSBpbnRlcmZhY2VzIG90aGVyIHRoYW4gJXMiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjEwMzgKK21zZ2lkICJMT1VEIFdBUk5JTkc6IHVzZSAtLWJpbmQtZHluYW1pYyByYXRoZXIgdGhhbiAtLWJpbmQtaW50ZXJmYWNlcyB0byBhdm9pZCBETlMgYW1wbGlmaWNhdGlvbiBhdHRhY2tzIHZpYSB0aGVzZSBpbnRlcmZhY2UocykiCittc2dzdHIgIiIKKworIyBPSworIzogbmV0d29yay5jOjEwNDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IHVzaW5nIGludGVyZmFjZSAlcyBpbnN0ZWFkIgorbXNnc3RyICJwZXJpbmdhdGFuOiBhbnRhcm11a2EgJXMgdGlkYWsgYWRhIgorCisjIE9LCisjOiBuZXR3b3JrLmM6MTA1NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogbm8gYWRkcmVzc2VzIGZvdW5kIGZvciBpbnRlcmZhY2UgJXMiCittc2dzdHIgIm1lbmdndW5ha2FuIGFsYW1hdCBsb2thbCBzYWphIHVudHVrICVzICVzIgorCisjIE9LCisjOiBuZXR3b3JrLmM6MTExNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW50ZXJmYWNlICVzIGZhaWxlZCB0byBqb2luIERIQ1B2NiBtdWx0aWNhc3QgZ3JvdXA6ICVzIgorbXNnc3RyICJnYWdhbCBtZW0tYmluZCBzb2NrZXQgc2VydmVyIERIQ1A6ICVzIgorCisjOiBuZXR3b3JrLmM6MTExOQorbXNnaWQgInRyeSBpbmNyZWFzaW5nIC9wcm9jL3N5cy9uZXQvY29yZS9vcHRtZW1fbWF4IgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxMzIyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYmluZCBzZXJ2ZXIgc29ja2V0IGZvciAlczogJXMiCittc2dzdHIgImdhZ2FsIG1lbS1iaW5kIHNvY2tldCB1bnR1ayBtZW5kZW5nYXJrYW4gJXM6ICVzIgorCisjIE9LCisjOiBuZXR3b3JrLmM6MTUxNworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBuYW1lc2VydmVyICVzIC0gbG9jYWwgaW50ZXJmYWNlIgorbXNnc3RyICJtZW5nYWJhaWthbiBuYW1lc2VydmVyICVzIC0gYW50YXJtdWthIGxva2FsIgorCisjIE9LCisjOiBuZXR3b3JrLmM6MTUyOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgbmFtZXNlcnZlciAlcyAtIGNhbm5vdCBtYWtlL2JpbmQgc29ja2V0OiAlcyIKK21zZ3N0ciAibWVuZ2FiYWlrYW4gbmFtZXNlcnZlciAlcyAtIHRhayBkYXBhdCBtZW1idWF0L21lbS1iaW5kIHNvY2tldDogJXMiCisKKyM6IG5ldHdvcmsuYzoxNTQ4Cittc2dpZCAiKG5vIEROU1NFQykiCittc2dzdHIgIiIKKworIyBPSworIzogbmV0d29yay5jOjE1NTEKK21zZ2lkICJ1bnF1YWxpZmllZCIKK21zZ3N0ciAidGlkYWsgbWVtZW51aGkgc3lhcmF0IgorCisjOiBuZXR3b3JrLmM6MTU1MQorbXNnaWQgIm5hbWVzIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxNTUzCittc2dpZCAiZGVmYXVsdCIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBuZXR3b3JrLmM6MTU1NQorbXNnaWQgImRvbWFpbiIKK21zZ3N0ciAiZG9tYWluIgorCisjIE9LCisjOiBuZXR3b3JrLmM6MTU2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyBsb2NhbCBhZGRyZXNzZXMgb25seSBmb3IgJXMgJXMiCittc2dzdHIgIm1lbmdndW5ha2FuIGFsYW1hdCBsb2thbCBzYWphIHVudHVrICVzICVzIgorCisjIE9LCisjOiBuZXR3b3JrLmM6MTU2NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgc3RhbmRhcmQgbmFtZXNlcnZlcnMgZm9yICVzICVzIgorbXNnc3RyICJtZW5nZ3VuYWthbiBuYW1lc2VydmVyICVzIyVkIHVudHVrICVzICVzIgorCisjIE9LCisjOiBuZXR3b3JrLmM6MTU2NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgbmFtZXNlcnZlciAlcyMlZCBmb3IgJXMgJXMgJXMiCittc2dzdHIgIm1lbmdndW5ha2FuIG5hbWVzZXJ2ZXIgJXMjJWQgdW50dWsgJXMgJXMiCisKKyMgT0sKKyM6IG5ldHdvcmsuYzoxNTcwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJOT1QgdXNpbmcgbmFtZXNlcnZlciAlcyMlZCAtIHF1ZXJ5IGxvb3AgZGV0ZWN0ZWQiCittc2dzdHIgIm1lbmdndW5ha2FuIG5hbWVzZXJ2ZXIgJXMjJWQgdW50dWsgJXMgJXMiCisKKyMgT0sKKyM6IG5ldHdvcmsuYzoxNTczCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyBuYW1lc2VydmVyICVzIyVkKHZpYSAlcykiCittc2dzdHIgIm1lbmdndW5ha2FuIG5hbWVzZXJ2ZXIgJXMjJWQiCisKKyMgT0sKKyM6IG5ldHdvcmsuYzoxNTc1CisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIG5hbWVzZXJ2ZXIgJXMjJWQiCittc2dzdHIgIm1lbmdndW5ha2FuIG5hbWVzZXJ2ZXIgJXMjJWQiCisKKyMgT0sKKyM6IG5ldHdvcmsuYzoxNTgwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyAlZCBtb3JlIGxvY2FsIGFkZHJlc3NlcyIKK21zZ3N0ciAibWVuZ2d1bmFrYW4gbmFtZXNlcnZlciAlcyMlZCIKKworIyBPSworIzogbmV0d29yay5jOjE1ODIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInVzaW5nICVkIG1vcmUgbmFtZXNlcnZlcnMiCittc2dzdHIgIm1lbmdndW5ha2FuIG5hbWVzZXJ2ZXIgJXMjJWQiCisKKyM6IGRuc21hc3EuYzoxNjYKK21zZ2lkICJkaGNwLWhvc3RzZGlyLCBkaGNwLW9wdHNkaXIgYW5kIGhvc3RzZGlyIGFyZSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0iCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjE4MQorbXNnaWQgIm5vIHJvb3QgdHJ1c3QgYW5jaG9yIHByb3ZpZGVkIGZvciBETlNTRUMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjE4NAorbXNnaWQgImNhbm5vdCByZWR1Y2UgY2FjaGUgc2l6ZSBmcm9tIGRlZmF1bHQgd2hlbiBETlNTRUMgZW5hYmxlZCIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBkbnNtYXNxLmM6MTg2CisjLCBmdXp6eQorbXNnaWQgIkROU1NFQyBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9ETlNTRUMgaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICJEQnVzIHRpZGFrIHRlcnNlZGlhOiBzZXRlbCBIQVZFX0RCVVMgZGFsYW0gc3JjL2NvbmZpZy5oIgorCisjIE9LCisjOiBkbnNtYXNxLmM6MTkyCisjLCBmdXp6eQorbXNnaWQgIlRGVFAgc2VydmVyIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX1RGVFAgaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICJEQnVzIHRpZGFrIHRlcnNlZGlhOiBzZXRlbCBIQVZFX0RCVVMgZGFsYW0gc3JjL2NvbmZpZy5oIgorCisjOiBkbnNtYXNxLmM6MTk3Cittc2dpZCAiY2Fubm90IHVzZSAtLWNvbm50cmFjayBBTkQgLS1xdWVyeS1wb3J0IgorbXNnc3RyICIiCisKKyMgT0sKKyM6IGRuc21hc3EuYzoyMDAKKyMsIGZ1enp5Cittc2dpZCAiY29ubnRyYWNrIHN1cHBvcnQgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfQ09OTlRSQUNLIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAiREJ1cyB0aWRhayB0ZXJzZWRpYTogc2V0ZWwgSEFWRV9EQlVTIGRhbGFtIHNyYy9jb25maWcuaCIKKworIzogZG5zbWFzcS5jOjIwNQorbXNnaWQgImFzeW5jaHJvbm91cyBsb2dnaW5nIGlzIG5vdCBhdmFpbGFibGUgdW5kZXIgU29sYXJpcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MjEwCittc2dpZCAiYXN5bmNocm9ub3VzIGxvZ2dpbmcgaXMgbm90IGF2YWlsYWJsZSB1bmRlciBBbmRyb2lkIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IGRuc21hc3EuYzoyMTUKKyMsIGZ1enp5Cittc2dpZCAiYXV0aG9yaXRhdGl2ZSBETlMgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfQVVUSCBpbiBzcmMvY29uZmlnLmgiCittc2dzdHIgIkRCdXMgdGlkYWsgdGVyc2VkaWE6IHNldGVsIEhBVkVfREJVUyBkYWxhbSBzcmMvY29uZmlnLmgiCisKKyMgT0sKKyM6IGRuc21hc3EuYzoyMjAKKyMsIGZ1enp5Cittc2dpZCAibG9vcCBkZXRlY3Rpb24gbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfTE9PUCBpbiBzcmMvY29uZmlnLmgiCittc2dzdHIgIkRCdXMgdGlkYWsgdGVyc2VkaWE6IHNldGVsIEhBVkVfREJVUyBkYWxhbSBzcmMvY29uZmlnLmgiCisKKyM6IGRuc21hc3EuYzoyMjcKK21zZ2lkICJtYXhfcG9ydCBjYW5ub3QgYmUgc21hbGxlciB0aGFuIG1pbl9wb3J0IgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoyMzQKK21zZ2lkICJ6b25lIHNlcmlhbCBtdXN0IGJlIGNvbmZpZ3VyZWQgaW4gLS1hdXRoLXNvYSIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MjUyCittc2dpZCAiZGhjcC1yYW5nZSBjb25zdHJ1Y3RvciBub3QgYXZhaWxhYmxlIG9uIHRoaXMgcGxhdGZvcm0iCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjI5OAorbXNnaWQgImNhbm5vdCBzZXQgLS1iaW5kLWludGVyZmFjZXMgYW5kIC0tYmluZC1keW5hbWljIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IGRuc21hc3EuYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmQgbGlzdCBvZiBpbnRlcmZhY2VzOiAlcyIKK21zZ3N0ciAiZ2FnYWwgbWVuZGFwYXRrYW4gZGFmdGFyIGFudGFybXVrYTogJXMiCisKKyMgT0sKKyM6IGRuc21hc3EuYzozMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBpbnRlcmZhY2UgJXMiCittc2dzdHIgImFudGFybXVrYSB0aWRhayBkaWtlbmFsICVzIgorCisjIE9LCisjOiBkbnNtYXNxLmM6Mzc0IGRuc21hc3EuYzoxMDM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkRCdXMgZXJyb3I6ICVzIgorbXNnc3RyICJEQnVzIGVycm9yOiAlcyIKKworIyBPSworIzogZG5zbWFzcS5jOjM3NworbXNnaWQgIkRCdXMgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfREJVUyBpbiBzcmMvY29uZmlnLmgiCittc2dzdHIgIkRCdXMgdGlkYWsgdGVyc2VkaWE6IHNldGVsIEhBVkVfREJVUyBkYWxhbSBzcmMvY29uZmlnLmgiCisKKyM6IGRuc21hc3EuYzo0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB1c2VyIG9yIGdyb3VwOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NDYwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGRpciB0byBmaWxlc3lzdGVtIHJvb3Q6ICVzIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IGRuc21hc3EuYzo3MTYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInN0YXJ0ZWQsIHZlcnNpb24gJXMgRE5TIGRpc2FibGVkIgorbXNnc3RyICJkaW11bGFpLCBjYWNoZSB2ZXJzaSAlcyBkaSBkaXNhYmxlIgorCisjIE9LCisjOiBkbnNtYXNxLmM6NzIwCisjLCBjLWZvcm1hdAorbXNnaWQgInN0YXJ0ZWQsIHZlcnNpb24gJXMgY2FjaGVzaXplICVkIgorbXNnc3RyICJkaW11bGFpLCB2ZXJzaSAlcyB1a3VyYW4gY2FjaGUgJWQiCisKKyMgT0sKKyM6IGRuc21hc3EuYzo3MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RhcnRlZCwgdmVyc2lvbiAlcyBjYWNoZSBkaXNhYmxlZCIKK21zZ3N0ciAiZGltdWxhaSwgY2FjaGUgdmVyc2kgJXMgZGkgZGlzYWJsZSIKKworIzogZG5zbWFzcS5jOjcyNQorbXNnaWQgIkROUyBzZXJ2aWNlIGxpbWl0ZWQgdG8gbG9jYWwgc3VibmV0cyIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBkbnNtYXNxLmM6NzI4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbXBpbGUgdGltZSBvcHRpb25zOiAlcyIKK21zZ3N0ciAicGlsaWhhbi1waWxpaGFuIHNhYXQga29tcGlsYXNpOiAlcyIKKworIyBPSworIzogZG5zbWFzcS5jOjczNAorbXNnaWQgIkRCdXMgc3VwcG9ydCBlbmFibGVkOiBjb25uZWN0ZWQgdG8gc3lzdGVtIGJ1cyIKK21zZ3N0ciAiZHVrdW5nYW4gREJ1cyBkaW11bmdraW5rYW46IHRlcmtvbmVrc2kgcGFkYSBidXMgc2lzdGVtIgorCisjIE9LCisjOiBkbnNtYXNxLmM6NzM2Cittc2dpZCAiREJ1cyBzdXBwb3J0IGVuYWJsZWQ6IGJ1cyBjb25uZWN0aW9uIHBlbmRpbmciCittc2dzdHIgImR1a3VuZ2FuIERCdXMgZGltdW5na2lua2FuOiBrb25la3NpIGJ1cyBkaXR1bmRhIgorCisjOiBkbnNtYXNxLmM6NzU0Cittc2dpZCAiRE5TU0VDIHZhbGlkYXRpb24gZW5hYmxlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzU4Cittc2dpZCAiRE5TU0VDIHNpZ25hdHVyZSB0aW1lc3RhbXBzIG5vdCBjaGVja2VkIHVudGlsIGZpcnN0IGNhY2hlIHJlbG9hZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzYxCittc2dpZCAiRE5TU0VDIHNpZ25hdHVyZSB0aW1lc3RhbXBzIG5vdCBjaGVja2VkIHVudGlsIHN5c3RlbSB0aW1lIHZhbGlkIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IGRuc21hc3EuYzo3NjYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGZhaWxlZCB0byBjaGFuZ2Ugb3duZXIgb2YgJXM6ICVzIgorbXNnc3RyICJnYWdhbCBtZW11YXQgbmFtYS1uYW1hIGRhcmkgJXM6ICVzIgorCisjIE9LCisjOiBkbnNtYXNxLmM6NzcwCittc2dpZCAic2V0dGluZyAtLWJpbmQtaW50ZXJmYWNlcyBvcHRpb24gYmVjYXVzZSBvZiBPUyBsaW1pdGF0aW9ucyIKK21zZ3N0ciAic2V0ZWxhbiBvcHNpIC0tYmluZC1pbnRlcmZhY2VzIGRpc2ViYWJrYW4ga2V0ZXJiYXRhc2FuIE9TIgorCisjIE9LCisjOiBkbnNtYXNxLmM6NzgyCisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGludGVyZmFjZSAlcyBkb2VzIG5vdCBjdXJyZW50bHkgZXhpc3QiCittc2dzdHIgInBlcmluZ2F0YW46IGFudGFybXVrYSAlcyB0aWRhayBhZGEiCisKKyM6IGRuc21hc3EuYzo3ODcKK21zZ2lkICJ3YXJuaW5nOiBpZ25vcmluZyByZXNvbHYtZmlsZSBmbGFnIGJlY2F1c2Ugbm8tcmVzb2x2IGlzIHNldCIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBkbnNtYXNxLmM6NzkwCisjLCBmdXp6eQorbXNnaWQgIndhcm5pbmc6IG5vIHVwc3RyZWFtIHNlcnZlcnMgY29uZmlndXJlZCIKK21zZ3N0ciAibWVueWV0ZWwgc2VydmVyLXNlcnZlciBkaSBhdGFzIGRlbmdhbiBEQnVzIgorCisjOiBkbnNtYXNxLmM6Nzk0CisjLCBjLWZvcm1hdAorbXNnaWQgImFzeW5jaHJvbm91cyBsb2dnaW5nIGVuYWJsZWQsIHF1ZXVlIGxpbWl0IGlzICVkIG1lc3NhZ2VzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo4MTUKK21zZ2lkICJJUHY2IHJvdXRlciBhZHZlcnRpc2VtZW50IGVuYWJsZWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjgyMAorIywgYy1mb3JtYXQKK21zZ2lkICJESENQLCBzb2NrZXRzIGJvdW5kIGV4Y2x1c2l2ZWx5IHRvIGludGVyZmFjZSAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6ODM0Cittc2dpZCAicm9vdCBpcyAiCittc2dzdHIgIiIKKworIyBPSworIzogZG5zbWFzcS5jOjgzNAorIywgZnV6enkKK21zZ2lkICJlbmFibGVkIgorbXNnc3RyICJkaSBkaXNhYmxlIgorCisjOiBkbnNtYXNxLmM6ODM2Cittc2dpZCAic2VjdXJlIG1vZGUiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjgzOQorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiAlcyBpbmFjY2Vzc2libGUiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjg0MworIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBURlRQIGRpcmVjdG9yeSAlcyBpbmFjY2Vzc2libGUiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjg2OQorIywgYy1mb3JtYXQKK21zZ2lkICJyZXN0cmljdGluZyBtYXhpbXVtIHNpbXVsdGFuZW91cyBURlRQIHRyYW5zZmVycyB0byAlZCIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBkbnNtYXNxLmM6MTAzOQorbXNnaWQgImNvbm5lY3RlZCB0byBzeXN0ZW0gREJ1cyIKK21zZ3N0ciAidGVyaHVidW5nIGtlIHNpc3RlbSBEQnVzIgorCisjOiBkbnNtYXNxLmM6MTE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZm9yayBpbnRvIGJhY2tncm91bmQ6ICVzIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IGRuc21hc3EuYzoxMTkyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGhlbHBlcjogJXMiCittc2dzdHIgImdhZ2FsIG1lbWJhY2EgJXM6ICVzIgorCisjOiBkbnNtYXNxLmM6MTE5NQorIywgYy1mb3JtYXQKK21zZ2lkICJzZXR0aW5nIGNhcGFiaWxpdGllcyBmYWlsZWQ6ICVzIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IGRuc21hc3EuYzoxMTk4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY2hhbmdlIHVzZXItaWQgdG8gJXM6ICVzIgorbXNnc3RyICJnYWdhbCBtZW11YXQgbmFtYS1uYW1hIGRhcmkgJXM6ICVzIgorCisjIE9LCisjOiBkbnNtYXNxLmM6MTIwMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNoYW5nZSBncm91cC1pZCB0byAlczogJXMiCittc2dzdHIgImdhZ2FsIG1lbXVhdCBuYW1hLW5hbWEgZGFyaSAlczogJXMiCisKKyMgT0sKKyM6IGRuc21hc3EuYzoxMjA0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiBwaWRmaWxlICVzOiAlcyIKK21zZ3N0ciAiZ2FnYWwgbWVtYmFjYSAlczogJXMiCisKKyMgT0sKKyM6IGRuc21hc3EuYzoxMjA3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiBsb2cgJXM6ICVzIgorbXNnc3RyICJ0aWRhayBiaXNhIG1lbWJ1a2EgJXM6JXMiCisKKyMgT0sKKyM6IGRuc21hc3EuYzoxMjEwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBMdWEgc2NyaXB0OiAlcyIKK21zZ3N0ciAiZ2FnYWwgbWVtdWF0ICVTOiAlcyIKKworIzogZG5zbWFzcS5jOjEyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVEZUUCBkaXJlY3RvcnkgJXMgaW5hY2Nlc3NpYmxlOiAlcyIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBkbnNtYXNxLmM6MTIxNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSB0aW1lc3RhbXAgZmlsZSAlczogJXMiCittc2dzdHIgInRpZGFrIGRhcGF0IG1lbWJ1a2EgYXRhdSBtZW1idWF0IGZpbGUgbGVhc2U6ICVzIgorCisjOiBkbnNtYXNxLmM6MTIzOQorbXNnaWQgIm5vdyBjaGVja2luZyBETlNTRUMgc2lnbmF0dXJlIHRpbWVzdGFtcHMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjEzMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAic2NyaXB0IHByb2Nlc3Mga2lsbGVkIGJ5IHNpZ25hbCAlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTMxMQorIywgYy1mb3JtYXQKK21zZ2lkICJzY3JpcHQgcHJvY2VzcyBleGl0ZWQgd2l0aCBzdGF0dXMgJWQiCittc2dzdHIgIiIKKworIyBPSworIzogZG5zbWFzcS5jOjEzMTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBleGVjdXRlICVzOiAlcyIKK21zZ3N0ciAiZ2FnYWwgbWVuZ2Frc2VzICVzOiAlcyIKKworIyBPSworIzogZG5zbWFzcS5jOjEzNzkgZG5zc2VjLmM6NDc5IGRuc3NlYy5jOjUyNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHVwZGF0ZSBtdGltZSBvbiAlczogJXMiCittc2dzdHIgImdhZ2FsIG1lbWJhY2EgJXM6ICVzIgorCisjOiBkbnNtYXNxLmM6MTM4NgorbXNnaWQgImV4aXRpbmcgb24gcmVjZWlwdCBvZiBTSUdURVJNIgorbXNnc3RyICJrZWx1YXIga2FyZW5hIG1lbmVyaW1hIFNJR1RFUk0iCisKKyMgT0sKKyM6IGRuc21hc3EuYzoxNDE0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYWNjZXNzICVzOiAlcyIKK21zZ3N0ciAiZ2FnYWwgbWVuZ2Frc2VzICVzOiAlcyIKKworIyBPSworIzogZG5zbWFzcS5jOjE0NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZGluZyAlcyIKK21zZ3N0ciAibWVtYmFjYSAlcyIKKworIyBPSworIzogZG5zbWFzcS5jOjE0NTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm5vIHNlcnZlcnMgZm91bmQgaW4gJXMsIHdpbGwgcmV0cnkiCittc2dzdHIgInRpZGFrIGRpdGVtdWthbiBkaXJla3RpZiBzZWFyY2ggZGkgJXMiCisKKyMgT0sKKyM6IGRoY3AuYzo1MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIERIQ1Agc29ja2V0OiAlcyIKK21zZ3N0ciAidGlkYWsgYmlzYSBtZW1idWF0IHNvY2tldCBESENQOiAlcyIKKworIyBPSworIzogZGhjcC5jOjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZXQgb3B0aW9ucyBvbiBESENQIHNvY2tldDogJXMiCittc2dzdHIgImdhZ2FsIG1lbnlldGVsIG9wc2kgcGFkYSBzb2NrZXQgREhDUDogJXMiCisKKyMgT0sKKyM6IGRoY3AuYzo4OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNldCBTT19SRVVTRXtBRERSfFBPUlR9IG9uIERIQ1Agc29ja2V0OiAlcyIKK21zZ3N0ciAiZ2FnYWwgbWVueWV0ZWwgU09fUkVVU0VBRERSIHBhZGEgc29ja2V0IERIQ1A6ICVzIgorCisjIE9LCisjOiBkaGNwLmM6MTAxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBiaW5kIERIQ1Agc2VydmVyIHNvY2tldDogJXMiCittc2dzdHIgImdhZ2FsIG1lbS1iaW5kIHNvY2tldCBzZXJ2ZXIgREhDUDogJXMiCisKKyMgT0sKKyM6IGRoY3AuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBJQ01QIHJhdyBzb2NrZXQ6ICVzLiIKK21zZ3N0ciAidGlkYWsgZGFwYXQgbWVtYnVhdCBzb2NrZXQgSUNNUCByYXc6ICVzIgorCisjIE9LCisjOiBkaGNwLmM6MjUyIGRoY3A2LmM6MTczCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGludGVyZmFjZSAlcyBpbiBicmlkZ2UtaW50ZXJmYWNlIgorbXNnc3RyICJhbnRhcm11a2EgdGlkYWsgZGlrZW5hbCAlcyIKKworIzogZGhjcC5jOjI5MworIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHBhY2tldCByZWNlaXZlZCBvbiAlcyB3aGljaCBoYXMgbm8gYWRkcmVzcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6NDI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkFSUC1jYWNoZSBpbmplY3Rpb24gZmFpbGVkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6NDcwCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHNlbmRpbmcgREhDUCBwYWNrZXQgdG8gJXM6ICVzIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IGRoY3AuYzo1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCByYW5nZSAlcyAtLSAlcyBpcyBub3QgY29uc2lzdGVudCB3aXRoIG5ldG1hc2sgJXMiCittc2dzdHIgImphbmdrYXVhbiBESENQICVzIC0tICVzIHRpZGFrIGtvbnNpc3RlbiBkZW5nYW4gbmV0bWFzayAlcyIKKworIyBPSworIzogZGhjcC5jOjg1NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiYmFkIGxpbmUgYXQgJXMgbGluZSAlZCIKK21zZ3N0ciAia2VzYWxhaGFuIG5hbWEgcGFkYSAlcyBiYXJpcyAlZCIKKworIzogZGhjcC5jOjg5NworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyAlcyBsaW5lICVkLCBkdXBsaWNhdGUgbmFtZSBvciBJUCBhZGRyZXNzIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzoxMDQxIHJmYzMzMTUuYzoyMTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcmVsYXkgJXMgLT4gJXMiCittc2dzdHIgIiIKKworIyBPSworIzogbGVhc2UuYzo5OAorbXNnaWQgInRvbyBtYW55IHN0b3JlZCBsZWFzZXMiCittc2dzdHIgInRlcmxhbHUgYmFueWFrIGxlYXNlIHlhbmcgZGlzaW1wYW4iCisKKyMgT0sKKyM6IGxlYXNlLmM6MTY2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiBvciBjcmVhdGUgbGVhc2UgZmlsZSAlczogJXMiCittc2dzdHIgInRpZGFrIGRhcGF0IG1lbWJ1a2EgYXRhdSBtZW1idWF0IGZpbGUgbGVhc2U6ICVzIgorCisjOiBsZWFzZS5jOjE3NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgbGVhc2UgZGF0YWJhc2UsIGludmFsaWQgbGluZTogJXMgJXMgJXMgJXMgLi4uIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IGxlYXNlLmM6MTgwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCBsZWFzZSBmaWxlICVzOiAlcyIKK21zZ3N0ciAiZ2FnYWwgbWVtYmFjYSAlczogJXMiCisKKyMgT0sKKyM6IGxlYXNlLmM6MTk2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcnVuIGxlYXNlLWluaXQgc2NyaXB0ICVzOiAlcyIKK21zZ3N0ciAidGlkYWsgYmlzYSBtZW1iYWNhICVzOiAlcyIKKworIzogbGVhc2UuYzoyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAibGVhc2UtaW5pdCBzY3JpcHQgcmV0dXJuZWQgZXhpdCBjb2RlICVzIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IGxlYXNlLmM6MzczCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgJXM6ICVzIChyZXRyeSBpbiAldXMpIgorbXNnc3RyICJnYWdhbCBtZW1iYWNhICVzOiAlcyIKKworIzogbGVhc2UuYzo5MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSWdub3JpbmcgZG9tYWluICVzIGZvciBESENQIGhvc3QgbmFtZSAlcyIKK21zZ3N0ciAiIgorCisjIE9LCisjOiByZmMyMTMxLmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGFkZHJlc3MgcmFuZ2UgYXZhaWxhYmxlIGZvciBESENQIHJlcXVlc3QgJXMgJXMiCittc2dzdHIgInRpZGFrIGFkYSBhbGFtYXQgeWFuZyBiaXNhIGRpcGFrYWkgdW50dWsgcGVybWludGFhbiBESENQICVzICVzIgorCisjIE9LCisjOiByZmMyMTMxLmM6MzQ4Cittc2dpZCAid2l0aCBzdWJuZXQgc2VsZWN0b3IiCittc2dzdHIgImRlbmdhbiBwZW1pbGloIHN1Ym5ldCIKKworIyBPSworIzogcmZjMjEzMS5jOjM0OAorbXNnaWQgInZpYSIKK21zZ3N0ciAibGV3YXQiCisKKyMgT0sKKyM6IHJmYzIxMzEuYzozNjAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiV1IGF2YWlsYWJsZSBESENQIHN1Ym5ldDogJXMvJXMiCittc2dzdHIgInRpZGFrIGFkYSBhbGFtYXQgeWFuZyBiaXNhIGRpcGFrYWkgdW50dWsgcGVybWludGFhbiBESENQICVzICVzIgorCisjOiByZmMyMTMxLmM6MzYzIHJmYzMzMTUuYzozMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYXZhaWxhYmxlIERIQ1AgcmFuZ2U6ICVzIC0tICVzIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IHJmYzIxMzEuYzo0NzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiV1IHZlbmRvciBjbGFzczogJXMiCittc2dzdHIgIkRCdXMgZXJyb3I6ICVzIgorCisjIE9LCisjOiByZmMyMTMxLmM6NDc2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIldSB1c2VyIGNsYXNzOiAlcyIKK21zZ3N0ciAiREJ1cyBlcnJvcjogJXMiCisKKyMgT0sKKyM6IHJmYzIxMzEuYzo1MTAKK21zZ2lkICJkaXNhYmxlZCIKK21zZ3N0ciAiZGkgZGlzYWJsZSIKKworIyBPSworIzogcmZjMjEzMS5jOjU1MSByZmMyMTMxLmM6MTAwNiByZmMyMTMxLmM6MTQzMCByZmMzMzE1LmM6NjE2IHJmYzMzMTUuYzo4NjkKKyM6IHJmYzMzMTUuYzoxMTQ4Cittc2dpZCAiaWdub3JlZCIKK21zZ3N0ciAiZGlhYmFpa2FuIgorCisjIE9LCisjOiByZmMyMTMxLmM6NTY2IHJmYzIxMzEuYzoxMjM5IHJmYzMzMTUuYzo5MTkKK21zZ2lkICJhZGRyZXNzIGluIHVzZSIKK21zZ3N0ciAiYWxhbWF0IHRlbGFoIGRpZ3VuYWthbiIKKworIyBPSworIzogcmZjMjEzMS5jOjU4MCByZmMyMTMxLmM6MTA2MAorbXNnaWQgIm5vIGFkZHJlc3MgYXZhaWxhYmxlIgorbXNnc3RyICJ0YWsgYWRhIGFsYW1hdCB5YW5nIHRlcnNlZGlhIgorCisjIE9LCisjOiByZmMyMTMxLmM6NTg3IHJmYzIxMzEuYzoxMjAyCittc2dpZCAid3JvbmcgbmV0d29yayIKK21zZ3N0ciAiamFyaW5nYW4geWFuZyBzYWxhaCIKKworIyBPSworIzogcmZjMjEzMS5jOjYwMgorbXNnaWQgIm5vIGFkZHJlc3MgY29uZmlndXJlZCIKK21zZ3N0ciAidGFrIGFkYSBhbGFtYXQgeWFuZyBkaXNldGVsIgorCisjIE9LCisjOiByZmMyMTMxLmM6NjA4IHJmYzIxMzEuYzoxMjUyCittc2dpZCAibm8gbGVhc2VzIGxlZnQiCittc2dzdHIgInRhayBhZGEgbGVhc2UgeWFuZyB0ZXJzaXNhIgorCisjOiByZmMyMTMxLmM6NzAzIHJmYzMzMTUuYzo0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgY2xpZW50IHByb3ZpZGVzIG5hbWU6ICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo4MDgKK21zZ2lkICJQWEUgQklTIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIyBPSworIzogcmZjMjEzMS5jOjk3NCByZmMzMzE1LmM6MTI0MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZGlzYWJsaW5nIERIQ1Agc3RhdGljIGFkZHJlc3MgJXMgZm9yICVzIgorbXNnc3RyICJtZW4tZGlzYWJsZSBhbGFtYXQgc3RhdGlrIERIQ1AgJXMiCisKKyMgT0sKKyM6IHJmYzIxMzEuYzo5OTUKK21zZ2lkICJ1bmtub3duIGxlYXNlIgorbXNnc3RyICJsZWFzZSB0aWRhayBkaWtldGFodWkiCisKKyM6IHJmYzIxMzEuYzoxMDI5CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCB1c2luZyBjb25maWd1cmVkIGFkZHJlc3MgJXMgYmVjYXVzZSBpdCBpcyBsZWFzZWQgdG8gJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjEwMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHVzaW5nIGNvbmZpZ3VyZWQgYWRkcmVzcyAlcyBiZWNhdXNlIGl0IGlzIGluIHVzZSBieSB0aGUgc2VydmVyIG9yIHJlbGF5IgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxMDQyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCB1c2luZyBjb25maWd1cmVkIGFkZHJlc3MgJXMgYmVjYXVzZSBpdCB3YXMgcHJldmlvdXNseSBkZWNsaW5lZCIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTA1OCByZmMyMTMxLmM6MTI0NQorbXNnaWQgIm5vIHVuaXF1ZS1pZCIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTE0MAorbXNnaWQgIndyb25nIHNlcnZlci1JRCIKK21zZ3N0ciAiIgorCisjIE9LCisjOiByZmMyMTMxLmM6MTE1OQorbXNnaWQgIndyb25nIGFkZHJlc3MiCittc2dzdHIgImFsYW1hdCBzYWxhaCIKKworIyBPSworIzogcmZjMjEzMS5jOjExNzcgcmZjMzMxNS5jOjEwMTUKK21zZ2lkICJsZWFzZSBub3QgZm91bmQiCittc2dzdHIgImxlYXNlIHRhayBkaXRlbXVrYW4iCisKKyMgT0sKKyM6IHJmYzIxMzEuYzoxMjEwCittc2dpZCAiYWRkcmVzcyBub3QgYXZhaWxhYmxlIgorbXNnc3RyICJhbGFtYXQgdGFrIHRlcnNlZGlhIgorCisjIE9LCisjOiByZmMyMTMxLmM6MTIyMQorbXNnaWQgInN0YXRpYyBsZWFzZSBhdmFpbGFibGUiCittc2dzdHIgImxlYXNlIHN0YXRpayB0YWsgdGVyc2VkaWEiCisKKyMgT0sKKyM6IHJmYzIxMzEuYzoxMjI1Cittc2dpZCAiYWRkcmVzcyByZXNlcnZlZCIKK21zZ3N0ciAiYWxhbWF0IHRlbGFoIGRpcGVzYW4iCisKKyM6IHJmYzIxMzEuYzoxMjMzCisjLCBjLWZvcm1hdAorbXNnaWQgImFiYW5kb25pbmcgbGVhc2UgdG8gJXMgb2YgJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjE3NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYm9vdGZpbGUgbmFtZTogJXMiCittc2dzdHIgIiIKKworIyBPSworIzogcmZjMjEzMS5jOjE3NjYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiV1IHNlcnZlciBuYW1lOiAlcyIKK21zZ3N0ciAiREJ1cyBlcnJvcjogJXMiCisKKyMgT0sKKyM6IHJmYzIxMzEuYzoxNzc0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIldSBuZXh0IHNlcnZlcjogJXMiCittc2dzdHIgIkRCdXMgZXJyb3I6ICVzIgorCisjOiByZmMyMTMxLmM6MTc3NworIywgYy1mb3JtYXQKK21zZ2lkICIldSBicm9hZGNhc3QgcmVzcG9uc2UiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjE4NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHNlbmQgREhDUC9CT09UUCBvcHRpb24gJWQ6IG5vIHNwYWNlIGxlZnQgaW4gcGFja2V0IgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoyMTMxCittc2dpZCAiUFhFIG1lbnUgdG9vIGxhcmdlIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IHJmYzIxMzEuYzoyMjcwIHJmYzMzMTUuYzoxNTE1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIldSByZXF1ZXN0ZWQgb3B0aW9uczogJXMiCittc2dzdHIgInBpbGloYW4tcGlsaWhhbiBzYWF0IGtvbXBpbGFzaTogJXMiCisKKyM6IHJmYzIxMzEuYzoyNTg3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzZW5kIFJGQzM5MjUgb3B0aW9uOiB0b28gbWFueSBvcHRpb25zIGZvciBlbnRlcnByaXNlIG51bWJlciAlZCIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MjY1MAorIywgYy1mb3JtYXQKK21zZ2lkICIldSByZXBseSBkZWxheTogJWQiCittc2dzdHIgIiIKKworIyBPSworIzogbmV0bGluay5jOjc3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIG5ldGxpbmsgc29ja2V0OiAlcyIKK21zZ3N0ciAidGlkYWsgYmlzYSBtZW0tYmluZCBuZXRsaW5rIHNvY2tldDogJXMiCisKKyMgT0sKKyM6IG5ldGxpbmsuYzozNTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm5ldGxpbmsgcmV0dXJucyBlcnJvcjogJXMiCittc2dzdHIgIkRCdXMgZXJyb3I6ICVzIgorCisjIE9LCisjOiBkYnVzLmM6MTg2Cittc2dpZCAiYXR0ZW1wdCB0byBzZXQgYW4gSVB2NiBzZXJ2ZXIgYWRkcmVzcyB2aWEgREJ1cyAtIG5vIElQdjYgc3VwcG9ydCIKK21zZ3N0ciAibWVuY29iYSBtZW55ZXRlbCBzZWJ1YWggYWxhbWF0IElQdjYgc2VydmVyIGxld2F0IERCdXMgLSB0aWRhayBhZGEgZHVrdW5nYW4gdW50dWsgSVB2NiIKKworIzogZGJ1cy5jOjQzOQorIywgYy1mb3JtYXQKK21zZ2lkICJFbmFibGluZyAtLSVzIG9wdGlvbiBmcm9tIEQtQnVzIgorbXNnc3RyICIiCisKKyM6IGRidXMuYzo0NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlzYWJsaW5nIC0tJXMgb3B0aW9uIGZyb20gRC1CdXMiCittc2dzdHIgIiIKKworIyBPSworIzogZGJ1cy5jOjY5MAorbXNnaWQgInNldHRpbmcgdXBzdHJlYW0gc2VydmVycyBmcm9tIERCdXMiCittc2dzdHIgIm1lbnlldGVsIHNlcnZlci1zZXJ2ZXIgZGkgYXRhcyBkZW5nYW4gREJ1cyIKKworIyBPSworIzogZGJ1cy5jOjczNworbXNnaWQgImNvdWxkIG5vdCByZWdpc3RlciBhIERCdXMgbWVzc2FnZSBoYW5kbGVyIgorbXNnc3RyICJ0aWRhayBiaXNhIG1lbmRhZnRhciBzZWJ1YWggREJ1cyBtZXNzYWdlIGhhbmRsZXIiCisKKyMgT0sKKyM6IGJwZi5jOjI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIERIQ1AgQlBGIHNvY2tldDogJXMiCittc2dzdHIgInRpZGFrIGRhcGF0IG1lbWJ1YXQgc29ja2V0IERIQ1AgQlBGOiAlcyIKKworIyBPSworIzogYnBmLmM6MjkzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJESENQIHJlcXVlc3QgZm9yIHVuc3VwcG9ydGVkIGhhcmR3YXJlIHR5cGUgKCVkKSByZWNlaXZlZCBvbiAlcyIKK21zZ3N0ciAicGVybWludGFhbiBESENQIHVudHVrIHRpcGUgaGFyZHdhcmUgeWFuZyB0aWRhayBkaWR1a3VuZyAoJWQpIGRpdGVyaW1hIHBhZGEgJXMiCisKKyMgT0sKKyM6IGJwZi5jOjM3OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBQRl9ST1VURSBzb2NrZXQ6ICVzIgorbXNnc3RyICJ0aWRhayBiaXNhIG1lbWJ1YXQgc29ja2V0IERIQ1A6ICVzIgorCisjOiBicGYuYzozOTkKK21zZ2lkICJVbmtub3duIHByb3RvY29sIHZlcnNpb24gZnJvbSByb3V0ZSBzb2NrZXQiCittc2dzdHIgIiIKKworIzogaGVscGVyLmM6MTUzCittc2dpZCAibGVhc2UoKSBmdW5jdGlvbiBtaXNzaW5nIGluIEx1YSBzY3JpcHQiCittc2dzdHIgIiIKKworIzogdGZ0cC5jOjMxOQorbXNnaWQgInVuYWJsZSB0byBnZXQgZnJlZSBwb3J0IGZvciBURlRQIgorbXNnc3RyICIiCisKKyM6IHRmdHAuYzozMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5zdXBwb3J0ZWQgcmVxdWVzdCBmcm9tICVzIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IHRmdHAuYzo0ODMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJXMgbm90IGZvdW5kIgorbXNnc3RyICJsZWFzZSB0YWsgZGl0ZW11a2FuIgorCisjOiB0ZnRwLmM6NTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yICVkICVzIHJlY2VpdmVkIGZyb20gJXMiCittc2dzdHIgIiIKKworIyBPSworIzogdGZ0cC5jOjYzNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHNlbmRpbmcgJXMgdG8gJXMiCittc2dzdHIgImdhZ2FsIG1lbWJhY2EgJXM6ICVzIgorCisjOiB0ZnRwLmM6NjM0CisjLCBjLWZvcm1hdAorbXNnaWQgInNlbnQgJXMgdG8gJXMiCittc2dzdHIgIiIKKworIzogbG9nLmM6MTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIm92ZXJmbG93OiAlZCBsb2cgZW50cmllcyBsb3N0IgorbXNnc3RyICIiCisKKyM6IGxvZy5jOjI2OAorIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZmFpbGVkOiAlcyIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBsb2cuYzo0NzEKK21zZ2lkICJGQUlMRUQgdG8gc3RhcnQgdXAiCittc2dzdHIgIkdBR0FMIHVudHVrIG1lbXVsYWkiCisKKyM6IGNvbm50cmFjay5jOjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbm50cmFjayBjb25uZWN0aW9uIG1hcmsgcmV0cmlldmFsIGZhaWxlZDogJXMiCittc2dzdHIgIiIKKworIyBPSworIzogZGhjcDYuYzo1MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBESENQdjYgc29ja2V0OiAlcyIKK21zZ3N0ciAidGlkYWsgYmlzYSBtZW1idWF0IHNvY2tldCBESENQOiAlcyIKKworIyBPSworIzogZGhjcDYuYzo3MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNldCBTT19SRVVTRXtBRERSfFBPUlR9IG9uIERIQ1B2NiBzb2NrZXQ6ICVzIgorbXNnc3RyICJnYWdhbCBtZW55ZXRlbCBTT19SRVVTRUFERFIgcGFkYSBzb2NrZXQgREhDUDogJXMiCisKKyMgT0sKKyM6IGRoY3A2LmM6ODUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBiaW5kIERIQ1B2NiBzZXJ2ZXIgc29ja2V0OiAlcyIKK21zZ3N0ciAiZ2FnYWwgbWVtLWJpbmQgc29ja2V0IHNlcnZlciBESENQOiAlcyIKKworIyBPSworIzogcmZjMzMxNS5jOjE1NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibm8gYWRkcmVzcyByYW5nZSBhdmFpbGFibGUgZm9yIERIQ1B2NiByZXF1ZXN0IGZyb20gcmVsYXkgYXQgJXMiCittc2dzdHIgInRpZGFrIGFkYSBhbGFtYXQgeWFuZyBiaXNhIGRpcGFrYWkgdW50dWsgcGVybWludGFhbiBESENQICVzICVzIgorCisjIE9LCisjOiByZmMzMzE1LmM6MTY2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJubyBhZGRyZXNzIHJhbmdlIGF2YWlsYWJsZSBmb3IgREhDUHY2IHJlcXVlc3QgdmlhICVzIgorbXNnc3RyICJ0aWRhayBhZGEgYWxhbWF0IHlhbmcgYmlzYSBkaXBha2FpIHVudHVrIHBlcm1pbnRhYW4gREhDUCAlcyAlcyIKKworIyBPSworIzogcmZjMzMxNS5jOjMwMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXUgYXZhaWxhYmxlIERIQ1B2NiBzdWJuZXQ6ICVzLyVkIgorbXNnc3RyICJ0aWRhayBhZGEgYWxhbWF0IHlhbmcgYmlzYSBkaXBha2FpIHVudHVrIHBlcm1pbnRhYW4gREhDUCAlcyAlcyIKKworIyBPSworIzogcmZjMzMxNS5jOjM4NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXUgdmVuZG9yIGNsYXNzOiAldSIKK21zZ3N0ciAiREJ1cyBlcnJvcjogJXMiCisKKyMgT0sKKyM6IHJmYzMzMTUuYzo0MzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiV1IGNsaWVudCBNQUMgYWRkcmVzczogJXMiCittc2dzdHIgInRpZGFrIGFkYSBhbnRhcm11a2EgZGVuZ2FuIGFsYW1hdCAlcyIKKworIyBPSworIzogcmZjMzMxNS5jOjY3MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBwcmVmaXgtY2xhc3MgJWQiCittc2dzdHIgImxlYXNlIHRpZGFrIGRpa2V0YWh1aSIKKworIyBPSworIzogcmZjMzMxNS5jOjgxNiByZmMzMzE1LmM6OTExCisjLCBmdXp6eQorbXNnaWQgImFkZHJlc3MgdW5hdmFpbGFibGUiCittc2dzdHIgImFsYW1hdCB0YWsgdGVyc2VkaWEiCisKKyM6IHJmYzMzMTUuYzo4MjggcmZjMzMxNS5jOjk1OSByZmMzMzE1LmM6MTI5MgorbXNnaWQgInN1Y2Nlc3MiCittc2dzdHIgIiIKKworIyBPSworIzogcmZjMzMxNS5jOjg0MyByZmMzMzE1LmM6ODUyIHJmYzMzMTUuYzo5NjcgcmZjMzMxNS5jOjk2OQorIywgZnV6enkKK21zZ2lkICJubyBhZGRyZXNzZXMgYXZhaWxhYmxlIgorbXNnc3RyICJ0YWsgYWRhIGFsYW1hdCB5YW5nIHRlcnNlZGlhIgorCisjOiByZmMzMzE1LmM6OTQ2Cittc2dpZCAibm90IG9uIGxpbmsiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjEwMTkgcmZjMzMxNS5jOjEyMDQgcmZjMzMxNS5jOjEyODEKK21zZ2lkICJubyBiaW5kaW5nIGZvdW5kIgorbXNnc3RyICIiCisKKyM6IHJmYzMzMTUuYzoxMDU3Cittc2dpZCAiZGVwcmVjYXRlZCIKK21zZ3N0ciAiIgorCisjIE9LCisjOiByZmMzMzE1LmM6MTA2MgorIywgZnV6enkKK21zZ2lkICJhZGRyZXNzIGludmFsaWQiCittc2dzdHIgImFsYW1hdCB0ZWxhaCBkaWd1bmFrYW4iCisKKyM6IHJmYzMzMTUuYzoxMTA5Cittc2dpZCAiY29uZmlybSBmYWlsZWQiCittc2dzdHIgIiIKKworIyBPSworIzogcmZjMzMxNS5jOjExMjUKKyMsIGZ1enp5Cittc2dpZCAiYWxsIGFkZHJlc3NlcyBzdGlsbCBvbiBsaW5rIgorbXNnc3RyICJrZXNhbGFoYW4gbmFtYSBwYWRhICVzIGJhcmlzICVkIgorCisjOiByZmMzMzE1LmM6MTIxMworbXNnaWQgInJlbGVhc2UgcmVjZWl2ZWQiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjIxNDAKK21zZ2lkICJDYW5ub3QgbXVsdGljYXN0IHRvIERIQ1B2NiBzZXJ2ZXIgd2l0aG91dCBjb3JyZWN0IGludGVyZmFjZSIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjE0NQorIywgYy1mb3JtYXQKK21zZ2lkICJJZ25vcmluZyBkdXBsaWNhdGUgZGhjcC1vcHRpb24gJWQiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzoyMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgdGFnczogJXMiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIG1vcmUgdGhhbiBvbmUgYWRkcmVzcyBpbiBob3N0c2ZpbGUsIHVzaW5nICVzIGZvciBESENQIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IGRoY3AtY29tbW9uLmM6NDMwCisjLCBjLWZvcm1hdAorbXNnaWQgImR1cGxpY2F0ZSBJUCBhZGRyZXNzICVzICglcykgaW4gZGhjcC1jb25maWcgZGlyZWN0aXZlIgorbXNnc3RyICJhbGFtYXQgSVAga2VtYmFyICVzICglcykgZGFsYW0gZGlyZWt0aWYgZGhjcC1jb25maWciCisKKyMgT0sKKyM6IGRoY3AtY29tbW9uLmM6NDk0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2V0IFNPX0JJTkRUT0RFVklDRSBvbiBESENQIHNvY2tldDogJXMiCittc2dzdHIgImdhZ2FsIG1lbnlldGVsIFNPX1JFVVNFQUREUiBwYWRhIHNvY2tldCBESENQOiAlcyIKKworIzogZGhjcC1jb21tb24uYzo2MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiS25vd24gREhDUCBvcHRpb25zOlxuIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6NjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIktub3duIERIQ1B2NiBvcHRpb25zOlxuIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6ODIzCittc2dpZCAiLCBwcmVmaXggZGVwcmVjYXRlZCIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjgyNgorIywgYy1mb3JtYXQKK21zZ2lkICIsIGxlYXNlIHRpbWUgIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6ODY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHN0YXRlbGVzcyBvbiAlcyUuMHMlLjBzJXMiCittc2dzdHIgIiIKKworIyBPSworIzogZGhjcC1jb21tb24uYzo4NzAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzLCBzdGF0aWMgbGVhc2VzIG9ubHkgb24gJS4wcyVzJXMlLjBzIgorbXNnc3RyICJESENQLCBsZWFzZSBzdGF0aWMgcGFkYSAlLjBzJXMsIHdha3R1IGxlYXNlICVzIgorCisjOiBkaGNwLWNvbW1vbi5jOjg3MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgcHJveHkgb24gc3VibmV0ICUuMHMlcyUuMHMlLjBzIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IGRoY3AtY29tbW9uLmM6ODczCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcywgSVAgcmFuZ2UgJXMgLS0gJXMlcyUuMHMiCittc2dzdHIgIkRIQ1AsIGphbmdrYXVuIElQICVzIC0tICVzLCB3YWt0dSBsZWFzZSAlcyIKKworIzogZGhjcC1jb21tb24uYzo4ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUHY0LWRlcml2ZWQgSVB2NiBuYW1lcyBvbiAlcyVzIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IGRoY3AtY29tbW9uLmM6ODg5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJyb3V0ZXIgYWR2ZXJ0aXNlbWVudCBvbiAlcyVzIgorbXNnc3RyICJESENQLCBsZWFzZSBzdGF0aWMgcGFkYSAlLjBzJXMsIHdha3R1IGxlYXNlICVzIgorCisjOiBkaGNwLWNvbW1vbi5jOjkwMAorIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHJlbGF5IGZyb20gJXMgdG8gJXMgdmlhICVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6OTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcmVsYXkgZnJvbSAlcyB0byAlcyIKK21zZ3N0ciAiIgorCisjIE9LCisjOiByYWR2LmM6MTEwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIElDTVB2NiBzb2NrZXQ6ICVzIgorbXNnc3RyICJ0aWRhayBiaXNhIG1lbWJ1YXQgc29ja2V0IERIQ1A6ICVzIgorCisjOiBhdXRoLmM6NDQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHpvbmUgdHJhbnNmZXIgcmVxdWVzdCBmcm9tICVzIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IGlwc2V0LmM6OTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmaW5kIGtlcm5lbCB2ZXJzaW9uOiAlcyIKK21zZ3N0ciAiZ2FnYWwgbWVtLWJpbmQgc29ja2V0IHNlcnZlciBESENQOiAlcyIKKworIyBPSworIzogaXBzZXQuYzoxMTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgSVBzZXQgY29udHJvbCBzb2NrZXQ6ICVzIgorbXNnc3RyICJnYWdhbCBtZW1idWF0IHNvY2tldDogJXMgIgorCisjIE9LCisjOiBpcHNldC5jOjIzMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHVwZGF0ZSBpcHNldCAlczogJXMiCittc2dzdHIgImdhZ2FsIG1lbWJhY2EgJXM6ICVzIgorCisjOiBkbnNzZWMuYzo1MjcKK21zZ2lkICJzeXN0ZW0gdGltZSBjb25zaWRlcmVkIHZhbGlkLCBub3cgY2hlY2tpbmcgRE5TU0VDIHNpZ25hdHVyZSB0aW1lc3RhbXBzLiIKK21zZ3N0ciAiIgorCisjOiBibG9ja2RhdGEuYzo1OAorIywgYy1mb3JtYXQKK21zZ2lkICJETlNTRUMgbWVtb3J5IGluIHVzZSAldSwgbWF4ICV1LCBhbGxvY2F0ZWQgJXUiCittc2dzdHIgIiIKKworIyBPSworIzogdGFibGVzLmM6NjEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBhY2Nlc3MgcGYgZGV2aWNlczogJXMiCittc2dzdHIgImdhZ2FsIG1lbmdha3NlcyAlczogJXMiCisKKyMgT0sKKyM6IHRhYmxlcy5jOjc0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBubyBvcGVuZWQgcGYgZGV2aWNlcyAlcyIKK21zZ3N0ciAibWVuZ2d1bmFrYW4gYWxhbWF0IGxva2FsIHNhamEgdW50dWsgJXMgJXMiCisKKyMgT0sKKyM6IHRhYmxlcy5jOjgyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJlcnJvcjogY2Fubm90IHVzZSB0YWJsZSBuYW1lICVzIgorbXNnc3RyICJ0aWRhayBiaXNhIG1lbmRhcGF0a2FuIGhvc3QtbmFtZTogJXMiCisKKyM6IHRhYmxlcy5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yOiBjYW5ub3Qgc3RybGNweSB0YWJsZSBuYW1lICVzIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IHRhYmxlcy5jOjEwMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSVBzZXQ6IGVycm9yOiVzIgorbXNnc3RyICJEQnVzIGVycm9yOiAlcyIKKworIzogdGFibGVzLmM6MTA4Cittc2dpZCAiaW5mbzogdGFibGUgY3JlYXRlZCIKK21zZ3N0ciAiIgorCisjOiB0YWJsZXMuYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogRElPQ1Ilc0FERFJTOiAlcyIKK21zZ3N0ciAiIgorCisjIE9LCisjOiB0YWJsZXMuYzoxMzgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVkIGFkZHJlc3NlcyAlcyIKK21zZ3N0ciAibWVtYmFjYSAlcyAtICVkIGFsYW1hdCIKKworIyBPSworIzogaW5vdGlmeS5jOjYyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgYWNjZXNzIHBhdGggJXM6ICVzIgorbXNnc3RyICJ0aWRhayBiaXNhIG1lbWJhY2EgJXM6ICVzIgorCisjIE9LCisjOiBpbm90aWZ5LmM6OTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgaW5vdGlmeTogJXMiCittc2dzdHIgImdhZ2FsIG1lbWJhY2EgJXM6ICVzIgorCisjOiBpbm90aWZ5LmM6MTExCisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IHN5bWxpbmtzIGZvbGxvd2luZyAlcyIKK21zZ3N0ciAiIgorCisjOiBpbm90aWZ5LmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgImRpcmVjdG9yeSAlcyBmb3IgcmVzb2x2LWZpbGUgaXMgbWlzc2luZywgY2Fubm90IHBvbGwiCittc2dzdHIgIiIKKworIyBPSworIzogaW5vdGlmeS5jOjEzMSBpbm90aWZ5LmM6MTY4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGlub3RpZnkgZm9yICVzOiAlcyIKK21zZ3N0ciAiZ2FnYWwgbWVtYnVhdCBzb2NrZXQ6ICVzICIKKworIyBPSworIzogaW5vdGlmeS5jOjE1MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiYmFkIGR5bmFtaWMgZGlyZWN0b3J5ICVzOiAlcyIKK21zZ3N0ciAidGlkYWsgYmlzYSBtZW1iYWNhICVzOiAlcyIKKworIzogaW5vdGlmeS5jOjI1NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbm90aWZ5LCBuZXcgb3IgY2hhbmdlZCBmaWxlICVzIgorbXNnc3RyICIiCisKKyMgT0sKKyMsIGZ1enp5CisjfiBtc2dpZCAiY2Fubm90IGNhbm5vbmljYWxpc2UgcmVzb2x2LWZpbGUgJXM6ICVzIgorI34gbXNnc3RyICJ0aWRhayBkYXBhdCBtZW1idWthIGF0YXUgbWVtYnVhdCBmaWxlIGxlYXNlOiAlcyIKKworIyBPSworI34gbXNnaWQgImR1cGxpY2F0ZSBJUCBhZGRyZXNzICVzIGluIGRoY3AtY29uZmlnIGRpcmVjdGl2ZS4iCisjfiBtc2dzdHIgImFsYW1hdCBJUCBrZW1iYXIgJXMgZGFsYW0gZGlyZWt0aWYgZGhjcC1jb25maWciCisKKyMgT0sKKyMsIGZ1enp5CisjfiBtc2dpZCAiU3BlY2lmeSBwYXRoIHRvIEx1YSBzY3JpcHQgKG5vIGRlZmF1bHQpLiIKKyN+IG1zZ3N0ciAiU2VidXRrYW4gcGF0aCBmaWxlIFBJRC4gKGRlZmF1bHQgJXMpLiIKKworIyBPSworI34gbXNnaWQgIlRYVCByZWNvcmQgc3RyaW5nIHRvbyBsb25nIgorI34gbXNnc3RyICJzdHJpbmcgcmVrb3JkIFRYVCB0ZXJsYWx1IHBhbmphbmciCisKKyMgT0sKKyN+IG1zZ2lkICJmYWlsZWQgdG8gc2V0IElQVjYgb3B0aW9ucyBvbiBsaXN0ZW5pbmcgc29ja2V0OiAlcyIKKyN+IG1zZ3N0ciAiZ2FnYWwgbWVueWV0ZWwgSVBWNiBwYWRhIHNvY2tldDogJXMiCisKKyN+IG1zZ2lkICJmYWlsZWQgdG8gYmluZCBsaXN0ZW5pbmcgc29ja2V0IGZvciAlczogJXMiCisjfiBtc2dzdHIgImdhZ2FsIG1lbS1iaW5kIHNvY2tldCB1bnR1ayBtZW5kZW5nYXJrYW4gJXM6ICVzIgorCisjIE9LCisjfiBtc2dpZCAibXVzdCBzZXQgZXhhY3RseSBvbmUgaW50ZXJmYWNlIG9uIGJyb2tlbiBzeXN0ZW1zIHdpdGhvdXQgSVBfUkVDVklGIgorI34gbXNnc3RyICJoYXJ1cyBtZW55ZXRlbCBzYXR1IGFudGFybXVrYSBzYWphIHBhZGEgc2lzdGVtIHlhbmcgdGlkYWsgYmVuYXIgZGVuZ2FuIElQX1JFQ1ZJRiIKKworIyBPSworI34gbXNnaWQgIklnbm9yaW5nIERIQ1AgbGVhc2UgZm9yICVzIGJlY2F1c2UgaXQgaGFzIGFuIGlsbGVnYWwgZG9tYWluIHBhcnQiCisjfiBtc2dzdHIgIk1lbmdhYmFpa2FuIGxlYXNlIERIQ1AgdW50dWsgJXMgc2ViYWIgdGVyZGFwYXQgYmFnaWFuIGRvbWFpbiB5YW5nIHRpZGFrIHNhaCIKKworIyBPSworI34gbXNnaWQgIklTQyBkaGNwZCBpbnRlZ3JhdGlvbiBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9JU0NfUkVBREVSIGluIHNyYy9jb25maWcuaCIKKyN+IG1zZ3N0ciAiSW50ZWdyYXNpIGRlbmdhbiBkaGNwZCBJU0MgdGlkYWsgdGVyc2VkaWE6IGF0dXIgSEFWRV9JU0NfUkVBREVSIGRhbGFtIHNyYy9jb25maWcuaCIKKworIyBPSworIywgZnV6enkKKyN+IG1zZ2lkICJpbGxlZ2FsIGRvbWFpbiAlcyBpbiBkaGNwLWNvbmZpZyBkaXJlY3RpdmUuIgorI34gbXNnc3RyICJhbGFtYXQgSVAga2VtYmFyICVzIGRhbGFtIGRpcmVrdGlmIGRoY3AtY29uZmlnIgorCisjIE9LCisjfiBtc2dpZCAicnVubmluZyBhcyByb290IgorI34gbXNnc3RyICJiZXJqYWxhbiBtZW5nZ3VuYWthbiByb290IgorCisjIE9LCisjLCBmdXp6eQorI34gbXNnaWQgInJlYWQgJXMgLSAlZCBob3N0cyIKKyN+IG1zZ3N0ciAibWVtYmFjYSAlcyAtICVkIGFsYW1hdCIKKworIyBPSworI34gbXNnaWQgImRvbWFpbnMiCisjfiBtc2dzdHIgImRvbWFpbi1kb21haW4iCisKKyMgT0sKKyN+IG1zZ2lkICJJZ25vcmluZyBESENQIGhvc3QgbmFtZSAlcyBiZWNhdXNlIGl0IGhhcyBhbiBpbGxlZ2FsIGRvbWFpbiBwYXJ0IgorI34gbXNnc3RyICJNZW5nYWJhaWthbiBuYW1hIGhvc3QgREhDUCAlcyBzZWJhYiBtZW1pbGlraSBiYWdpYW4gZG9tYWluIHlhbmcgdGlkYWsgc2FoIgorCisjIE9LCisjfiBtc2dpZCAiRGlzcGxheSB0aGlzIG1lc3NhZ2UuIgorI34gbXNnc3RyICJNZW5hbXBpbGthbiBwZXNhbiBpbmkuIgorCisjIE9LCisjfiBtc2dpZCAiZmFpbGVkIHRvIHJlYWQgJXM6ICVtIgorI34gbXNnc3RyICJnYWdhbCBtZW1iYWNhICVzOiAlbSIKKworIyBPSworI34gbXNnaWQgImZhaWxlZCB0byByZWFkICVzOiVtIgorI34gbXNnc3RyICJnYWdhbCBtZW1iYWNhICVzOiVtIgorCisjIE9LCisjfiBtc2dpZCAiTW9yZSB0aGFuIG9uZSB2ZW5kb3IgY2xhc3MgbWF0Y2hlcywgdXNpbmcgJXMiCisjfiBtc2dzdHIgIkxlYmloIGRhcmkgc2F0dSBrZWxhcyB2ZW5kb3IgeWFuZyBzZXN1YWksIG1lbmdndW5ha2FuICVzIgorCisjIE9LCisjfiBtc2dpZCAiZm9yd2FyZGluZyB0YWJsZSBvdmVyZmxvdzogY2hlY2sgZm9yIHNlcnZlciBsb29wcy4iCisjfiBtc2dzdHIgIm1lbmVydXNrYW4gdGFiZWwgb3ZlcmZsb3c6IG1lbWVyaWtzYSBhcGFrYWggdGVyamFkaSBsb29wIHNlcnZlci4iCisKKyMgT0sKKyN+IG1zZ2lkICJuZXN0ZWQgaW5jbHVkZXMgbm90IGFsbG93ZWQiCisjfiBtc2dzdHIgImluY2x1ZGVzIGJlcnNhcmFuZyB0aWRhayBkaWlqaW5rYW4iCisKKyMgT0sKKyN+IG1zZ2lkICJESENQLCAlcyB3aWxsIGJlIHdyaXR0ZW4gZXZlcnkgJXMiCisjfiBtc2dzdHIgIkRIQ1AsICVzIGFrYW4gZGl0dWxpcyBzZXRpYXAgJXMiCisKKyMgT0sKKyN+IG1zZ2lkICJjYW5ub3QgY3JlYXRlIERIQ1AgcGFja2V0IHNvY2tldDogJXMuIElzIENPTkZJR19QQUNLRVQgZW5hYmxlZCBpbiB5b3VyIGtlcm5lbD8iCisjfiBtc2dzdHIgInRpZGFrIGRhcGF0IG1lbWJ1YXQgc29ja2V0IHBhY2tldCBESENQOiAlcy4gQXBha2FoIENPTkZJR19QQUNLRVQgZGltdW5na2lua2FuIHBhZGEga2VybmVsPyIKZGlmZiAtLWdpdCBhL3BvL2l0LnBvIGIvcG8vaXQucG8KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWJiMGM1NwotLS0gL2Rldi9udWxsCisrKyBiL3BvL2l0LnBvCkBAIC0wLDAgKzEsMjIyNiBAQAorIyBJdGFsaWFuIHRyYW5zbGF0aW9ucyBmb3IgZG5zbWFzcSBwYWNrYWdlLgorIyBUaGlzIGZpbGUgaXMgcHV0IGluIHRoZSBwdWJsaWMgZG9tYWluLgorIyBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiwgMjAwNi4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGRuc21hc3EgMi4zMlxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwOS0wNi0xOCAxMjoyNCswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxNy0wNy0xNyAxODozMCswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPlxuIgorIkxhbmd1YWdlLVRlYW06IEl0YWxpYW4gPHRwQGxpc3RzLmxpbnV4Lml0PlxuIgorIkxhbmd1YWdlOiBpdFxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUFTQ0lJXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpO1xuIgorCisjOiBjYWNoZS5jOjUxMworbXNnaWQgIkludGVybmFsIGVycm9yIGluIGNhY2hlLiIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjkyMworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBuYW1lcyBmcm9tICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjk0OSBkaGNwLmM6ODY3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBhZGRyZXNzIGF0ICVzIGxpbmUgJWQiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxMDAyIGRoY3AuYzo4ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG5hbWUgYXQgJXMgbGluZSAlZCIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjEwMTEgZGhjcC5jOjk1OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkICVzIC0gJWQgYWRkcmVzc2VzIgorbXNnc3RyICIiCisKKyM6IGNhY2hlLmM6MTEyNAorbXNnaWQgImNsZWFyZWQgY2FjaGUiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxMTUzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIElQdjQgYWRkcmVzcyBmb3VuZCBmb3IgJXMiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxMjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGEgQ05BTUUsIG5vdCBnaXZpbmcgaXQgdG8gdGhlIERIQ1AgbGVhc2Ugb2YgJXMiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxMjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBnaXZpbmcgbmFtZSAlcyB0byB0aGUgREhDUCBsZWFzZSBvZiAlcyBiZWNhdXNlIHRoZSBuYW1lIGV4aXN0cyBpbiAlcyB3aXRoIGFkZHJlc3MgJXMiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxNDEzCisjLCBjLWZvcm1hdAorbXNnaWQgInRpbWUgJWx1IgorbXNnc3RyICIiCisKKyM6IGNhY2hlLmM6MTQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJjYWNoZSBzaXplICVkLCAlZC8lZCBjYWNoZSBpbnNlcnRpb25zIHJlLXVzZWQgdW5leHBpcmVkIGNhY2hlIGVudHJpZXMuIgorbXNnc3RyICIiCisKKyM6IGNhY2hlLmM6MTQxNgorIywgYy1mb3JtYXQKK21zZ2lkICJxdWVyaWVzIGZvcndhcmRlZCAldSwgcXVlcmllcyBhbnN3ZXJlZCBsb2NhbGx5ICV1IgorbXNnc3RyICIiCisKKyM6IGNhY2hlLmM6MTQxOQorIywgYy1mb3JtYXQKK21zZ2lkICJxdWVyaWVzIGZvciBhdXRob3JpdGF0aXZlIHpvbmVzICV1IgorbXNnc3RyICIiCisKKyM6IGNhY2hlLmM6MTQ0NQorIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2ZXIgJXMjJWQ6IHF1ZXJpZXMgc2VudCAldSwgcmV0cmllZCBvciBmYWlsZWQgJXUiCittc2dzdHIgIiIKKworIzogdXRpbC5jOjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZWVkIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcjogJXMiCittc2dzdHIgIiIKKworIzogdXRpbC5jOjIyNAorbXNnaWQgImZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkiCittc2dzdHIgIiIKKworIzogdXRpbC5jOjI3NyBvcHRpb24uYzo2MTkKK21zZ2lkICJjb3VsZCBub3QgZ2V0IG1lbW9yeSIKK21zZ3N0ciAiIgorCisjOiB1dGlsLmM6Mjg3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgcGlwZTogJXMiCittc2dzdHIgIiIKKworIzogdXRpbC5jOjI5NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYWxsb2NhdGUgJWQgYnl0ZXMiCittc2dzdHIgIiIKKworIzogdXRpbC5jOjQ2NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbmZpbml0ZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNDQKK21zZ2lkICJTcGVjaWZ5IGxvY2FsIGFkZHJlc3MoZXMpIHRvIGxpc3RlbiBvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzQ1Cittc2dpZCAiUmV0dXJuIGlwYWRkciBmb3IgYWxsIGhvc3RzIGluIHNwZWNpZmllZCBkb21haW5zLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNDYKK21zZ2lkICJGYWtlIHJldmVyc2UgbG9va3VwcyBmb3IgUkZDMTkxOCBwcml2YXRlIGFkZHJlc3MgcmFuZ2VzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNDcKK21zZ2lkICJUcmVhdCBpcGFkZHIgYXMgTlhET01BSU4gKGRlZmVhdHMgVmVyaXNpZ24gd2lsZGNhcmQpLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSB0aGUgc2l6ZSBvZiB0aGUgY2FjaGUgaW4gZW50cmllcyAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSBjb25maWd1cmF0aW9uIGZpbGUgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzUwCittc2dpZCAiRG8gTk9UIGZvcmsgaW50byB0aGUgYmFja2dyb3VuZDogcnVuIGluIGRlYnVnIG1vZGUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM1MQorbXNnaWQgIkRvIE5PVCBmb3J3YXJkIHF1ZXJpZXMgd2l0aCBubyBkb21haW4gcGFydC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzUyCittc2dpZCAiUmV0dXJuIHNlbGYtcG9pbnRpbmcgTVggcmVjb3JkcyBmb3IgbG9jYWwgaG9zdHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM1MworbXNnaWQgIkV4cGFuZCBzaW1wbGUgbmFtZXMgaW4gL2V0Yy9ob3N0cyB3aXRoIGRvbWFpbi1zdWZmaXguIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM1NAorbXNnaWQgIkRvbid0IGZvcndhcmQgc3B1cmlvdXMgRE5TIHJlcXVlc3RzIGZyb20gV2luZG93cyBob3N0cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzU1Cittc2dpZCAiRW5hYmxlIERIQ1AgaW4gdGhlIHJhbmdlIGdpdmVuIHdpdGggbGVhc2UgZHVyYXRpb24uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM1NgorIywgYy1mb3JtYXQKK21zZ2lkICJDaGFuZ2UgdG8gdGhpcyBncm91cCBhZnRlciBzdGFydHVwIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM1NworbXNnaWQgIlNldCBhZGRyZXNzIG9yIGhvc3RuYW1lIGZvciBhIHNwZWNpZmllZCBtYWNoaW5lLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNTgKK21zZ2lkICJSZWFkIERIQ1AgaG9zdCBzcGVjcyBmcm9tIGZpbGUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM1OQorbXNnaWQgIlJlYWQgREhDUCBvcHRpb24gc3BlY3MgZnJvbSBmaWxlLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNjAKK21zZ2lkICJSZWFkIERIQ1AgaG9zdCBzcGVjcyBmcm9tIGEgZGlyZWN0b3J5LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNjEKK21zZ2lkICJSZWFkIERIQ1Agb3B0aW9ucyBmcm9tIGEgZGlyZWN0b3J5LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNjIKK21zZ2lkICJFdmFsdWF0ZSBjb25kaXRpb25hbCB0YWcgZXhwcmVzc2lvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkRvIE5PVCBsb2FkICVzIGZpbGUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM2NAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IGEgaG9zdHMgZmlsZSB0byBiZSByZWFkIGluIGFkZGl0aW9uIHRvICVzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNjUKK21zZ2lkICJSZWFkIGhvc3RzIGZpbGVzIGZyb20gYSBkaXJlY3RvcnkuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM2NgorbXNnaWQgIlNwZWNpZnkgaW50ZXJmYWNlKHMpIHRvIGxpc3RlbiBvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzY3Cittc2dpZCAiU3BlY2lmeSBpbnRlcmZhY2UocykgTk9UIHRvIGxpc3RlbiBvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzY4Cittc2dpZCAiTWFwIERIQ1AgdXNlciBjbGFzcyB0byB0YWcuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM2OQorbXNnaWQgIk1hcCBSRkMzMDQ2IGNpcmN1aXQtaWQgdG8gdGFnLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNzAKK21zZ2lkICJNYXAgUkZDMzA0NiByZW1vdGUtaWQgdG8gdGFnLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNzEKK21zZ2lkICJNYXAgUkZDMzk5MyBzdWJzY3JpYmVyLWlkIHRvIHRhZy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzcyCittc2dpZCAiRG9uJ3QgZG8gREhDUCBmb3IgaG9zdHMgd2l0aCB0YWcgc2V0LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNzMKK21zZ2lkICJGb3JjZSBicm9hZGNhc3QgcmVwbGllcyBmb3IgaG9zdHMgd2l0aCB0YWcgc2V0LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNzQKK21zZ2lkICJEbyBOT1QgZm9yayBpbnRvIHRoZSBiYWNrZ3JvdW5kLCBkbyBOT1QgcnVuIGluIGRlYnVnIG1vZGUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM3NQorbXNnaWQgIkFzc3VtZSB3ZSBhcmUgdGhlIG9ubHkgREhDUCBzZXJ2ZXIgb24gdGhlIGxvY2FsIG5ldHdvcmsuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHdoZXJlIHRvIHN0b3JlIERIQ1AgbGVhc2VzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM3NworbXNnaWQgIlJldHVybiBNWCByZWNvcmRzIGZvciBsb2NhbCBob3N0cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzc4Cittc2dpZCAiU3BlY2lmeSBhbiBNWCByZWNvcmQuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM3OQorbXNnaWQgIlNwZWNpZnkgQk9PVFAgb3B0aW9ucyB0byBESENQIHNlcnZlci4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkRvIE5PVCBwb2xsICVzIGZpbGUsIHJlbG9hZCBvbmx5IG9uIFNJR0hVUC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzgxCittc2dpZCAiRG8gTk9UIGNhY2hlIGZhaWxlZCBzZWFyY2ggcmVzdWx0cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzgyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzZSBuYW1lc2VydmVycyBzdHJpY3RseSBpbiB0aGUgb3JkZXIgZ2l2ZW4gaW4gJXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM4MworbXNnaWQgIlNwZWNpZnkgb3B0aW9ucyB0byBiZSBzZW50IHRvIERIQ1AgY2xpZW50cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzg0Cittc2dpZCAiREhDUCBvcHRpb24gc2VudCBldmVuIGlmIHRoZSBjbGllbnQgZG9lcyBub3QgcmVxdWVzdCBpdC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzg1Cittc2dpZCAiU3BlY2lmeSBwb3J0IHRvIGxpc3RlbiBmb3IgRE5TIHJlcXVlc3RzIG9uIChkZWZhdWx0cyB0byA1MykuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM4NgorIywgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIHN1cHBvcnRlZCBVRFAgcGFja2V0IHNpemUgZm9yIEVETlMuMCAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozODcKK21zZ2lkICJMb2cgRE5TIHF1ZXJpZXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM4OAorbXNnaWQgIkZvcmNlIHRoZSBvcmlnaW5hdGluZyBwb3J0IGZvciB1cHN0cmVhbSBETlMgcXVlcmllcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzg5Cittc2dpZCAiRG8gTk9UIHJlYWQgcmVzb2x2LmNvbmYuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHBhdGggdG8gcmVzb2x2LmNvbmYgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzkxCittc2dpZCAiU3BlY2lmeSBwYXRoIHRvIGZpbGUgd2l0aCBzZXJ2ZXI9IG9wdGlvbnMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzkyCittc2dpZCAiU3BlY2lmeSBhZGRyZXNzKGVzKSBvZiB1cHN0cmVhbSBzZXJ2ZXJzIHdpdGggb3B0aW9uYWwgZG9tYWlucy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzkzCittc2dpZCAiU3BlY2lmeSBhZGRyZXNzIG9mIHVwc3RyZWFtIHNlcnZlcnMgZm9yIHJldmVyc2UgYWRkcmVzcyBxdWVyaWVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM5NAorbXNnaWQgIk5ldmVyIGZvcndhcmQgcXVlcmllcyB0byBzcGVjaWZpZWQgZG9tYWlucy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzk1Cittc2dpZCAiU3BlY2lmeSB0aGUgZG9tYWluIHRvIGJlIGFzc2lnbmVkIGluIERIQ1AgbGVhc2VzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozOTYKK21zZ2lkICJTcGVjaWZ5IGRlZmF1bHQgdGFyZ2V0IGluIGFuIE1YIHJlY29yZC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzk3Cittc2dpZCAiU3BlY2lmeSB0aW1lLXRvLWxpdmUgaW4gc2Vjb25kcyBmb3IgcmVwbGllcyBmcm9tIC9ldGMvaG9zdHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM5OAorbXNnaWQgIlNwZWNpZnkgdGltZS10by1saXZlIGluIHNlY29uZHMgZm9yIG5lZ2F0aXZlIGNhY2hpbmcuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM5OQorbXNnaWQgIlNwZWNpZnkgdGltZS10by1saXZlIGluIHNlY29uZHMgZm9yIG1heGltdW0gVFRMIHRvIHNlbmQgdG8gY2xpZW50cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDAwCittc2dpZCAiU3BlY2lmeSB0aW1lLXRvLWxpdmUgY2VpbGluZyBmb3IgY2FjaGUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQwMQorbXNnaWQgIlNwZWNpZnkgdGltZS10by1saXZlIGZsb29yIGZvciBjYWNoZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNoYW5nZSB0byB0aGlzIHVzZXIgYWZ0ZXIgc3RhcnR1cC4gKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDAzCittc2dpZCAiTWFwIERIQ1AgdmVuZG9yIGNsYXNzIHRvIHRhZy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDA0Cittc2dpZCAiRGlzcGxheSBkbnNtYXNxIHZlcnNpb24gYW5kIGNvcHlyaWdodCBpbmZvcm1hdGlvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDA1Cittc2dpZCAiVHJhbnNsYXRlIElQdjQgYWRkcmVzc2VzIGZyb20gdXBzdHJlYW0gc2VydmVycy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDA2Cittc2dpZCAiU3BlY2lmeSBhIFNSViByZWNvcmQuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQwNworbXNnaWQgIkRpc3BsYXkgdGhpcyBtZXNzYWdlLiBVc2UgLS1oZWxwIGRoY3Agb3IgLS1oZWxwIGRoY3A2IGZvciBrbm93biBESENQIG9wdGlvbnMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQwOAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHBhdGggb2YgUElEIGZpbGUgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDA5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgbWF4aW11bSBudW1iZXIgb2YgREhDUCBsZWFzZXMgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDEwCittc2dpZCAiQW5zd2VyIEROUyBxdWVyaWVzIGJhc2VkIG9uIHRoZSBpbnRlcmZhY2UgYSBxdWVyeSB3YXMgc2VudCB0by4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDExCittc2dpZCAiU3BlY2lmeSBUWFQgRE5TIHJlY29yZC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDEyCittc2dpZCAiU3BlY2lmeSBQVFIgRE5TIHJlY29yZC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDEzCittc2dpZCAiR2l2ZSBETlMgbmFtZSB0byBJUHY0IGFkZHJlc3Mgb2YgaW50ZXJmYWNlLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MTQKK21zZ2lkICJCaW5kIG9ubHkgdG8gaW50ZXJmYWNlcyBpbiB1c2UuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJSZWFkIERIQ1Agc3RhdGljIGhvc3QgaW5mb3JtYXRpb24gZnJvbSAlcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDE2Cittc2dpZCAiRW5hYmxlIHRoZSBEQnVzIGludGVyZmFjZSBmb3Igc2V0dGluZyB1cHN0cmVhbSBzZXJ2ZXJzLCBldGMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQxNworbXNnaWQgIkRvIG5vdCBwcm92aWRlIERIQ1Agb24gdGhpcyBpbnRlcmZhY2UsIG9ubHkgcHJvdmlkZSBETlMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQxOAorbXNnaWQgIkVuYWJsZSBkeW5hbWljIGFkZHJlc3MgYWxsb2NhdGlvbiBmb3IgYm9vdHAuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQxOQorbXNnaWQgIk1hcCBNQUMgYWRkcmVzcyAod2l0aCB3aWxkY2FyZHMpIHRvIG9wdGlvbiBzZXQuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQyMAorbXNnaWQgIlRyZWF0IERIQ1AgcmVxdWVzdHMgb24gYWxpYXNlcyBhcyBhcnJpdmluZyBmcm9tIGludGVyZmFjZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDIxCittc2dpZCAiRGlzYWJsZSBJQ01QIGVjaG8gYWRkcmVzcyBjaGVja2luZyBpbiB0aGUgREhDUCBzZXJ2ZXIuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQyMgorbXNnaWQgIlNoZWxsIHNjcmlwdCB0byBydW4gb24gREhDUCBsZWFzZSBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQyMworbXNnaWQgIkx1YSBzY3JpcHQgdG8gcnVuIG9uIERIQ1AgbGVhc2UgY3JlYXRpb24gYW5kIGRlc3RydWN0aW9uLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MjQKK21zZ2lkICJSdW4gbGVhc2UtY2hhbmdlIHNjcmlwdHMgYXMgdGhpcyB1c2VyLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MjUKK21zZ2lkICJDYWxsIGRoY3Atc2NyaXB0IHdpdGggY2hhbmdlcyB0byBsb2NhbCBBUlAgdGFibGUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQyNgorbXNnaWQgIlJlYWQgY29uZmlndXJhdGlvbiBmcm9tIGFsbCB0aGUgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQyNworbXNnaWQgIkxvZyB0byB0aGlzIHN5c2xvZyBmYWNpbGl0eSBvciBmaWxlLiAoZGVmYXVsdHMgdG8gREFFTU9OKSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MjgKK21zZ2lkICJEbyBub3QgdXNlIGxlYXNlZmlsZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDI5CisjLCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgRE5TIHF1ZXJpZXMuIChkZWZhdWx0cyB0byAlcykiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNsZWFyIEROUyBjYWNoZSB3aGVuIHJlbG9hZGluZyAlcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDMxCittc2dpZCAiSWdub3JlIGhvc3RuYW1lcyBwcm92aWRlZCBieSBESENQIGNsaWVudHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQzMgorbXNnaWQgIkRvIE5PVCByZXVzZSBmaWxlbmFtZSBhbmQgc2VydmVyIGZpZWxkcyBmb3IgZXh0cmEgREhDUCBvcHRpb25zLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzMKK21zZ2lkICJFbmFibGUgaW50ZWdyYXRlZCByZWFkLW9ubHkgVEZUUCBzZXJ2ZXIuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQzNAorbXNnaWQgIkV4cG9ydCBmaWxlcyBieSBURlRQIG9ubHkgZnJvbSB0aGUgc3BlY2lmaWVkIHN1YnRyZWUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQzNQorbXNnaWQgIkFkZCBjbGllbnQgSVAgb3IgaGFyZHdhcmUgYWRkcmVzcyB0byB0ZnRwLXJvb3QuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQzNgorbXNnaWQgIkFsbG93IGFjY2VzcyBvbmx5IHRvIGZpbGVzIG93bmVkIGJ5IHRoZSB1c2VyIHJ1bm5pbmcgZG5zbWFzcS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDM3Cittc2dpZCAiRG8gbm90IHRlcm1pbmF0ZSB0aGUgc2VydmljZSBpZiBURlRQIGRpcmVjdG9yaWVzIGFyZSBpbmFjY2Vzc2libGUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQzOAorIywgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IFRGVFAgdHJhbnNmZXJzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQzOQorbXNnaWQgIk1heGltdW0gTVRVIHRvIHVzZSBmb3IgVEZUUCB0cmFuc2ZlcnMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ0MAorbXNnaWQgIkRpc2FibGUgdGhlIFRGVFAgYmxvY2tzaXplIGV4dGVuc2lvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQxCittc2dpZCAiQ29udmVydCBURlRQIGZpbGVuYW1lcyB0byBsb3dlcmNhc2UiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQyCittc2dpZCAiRXBoZW1lcmFsIHBvcnQgcmFuZ2UgZm9yIHVzZSBieSBURlRQIHRyYW5zZmVycy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQzCittc2dpZCAiRXh0cmEgbG9nZ2luZyBmb3IgREhDUC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQ0Cittc2dpZCAiRW5hYmxlIGFzeW5jLiBsb2dnaW5nOyBvcHRpb25hbGx5IHNldCBxdWV1ZSBsZW5ndGguIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ0NQorbXNnaWQgIlN0b3AgRE5TIHJlYmluZGluZy4gRmlsdGVyIHByaXZhdGUgSVAgcmFuZ2VzIHdoZW4gcmVzb2x2aW5nLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDYKK21zZ2lkICJBbGxvdyByZWJpbmRpbmcgb2YgMTI3LjAuMC4wLzgsIGZvciBSQkwgc2VydmVycy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQ3Cittc2dpZCAiSW5oaWJpdCBETlMtcmViaW5kIHByb3RlY3Rpb24gb24gdGhpcyBkb21haW4uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ0OAorbXNnaWQgIkFsd2F5cyBwZXJmb3JtIEROUyBxdWVyaWVzIHRvIGFsbCBzZXJ2ZXJzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDkKK21zZ2lkICJTZXQgdGFnIGlmIGNsaWVudCBpbmNsdWRlcyBtYXRjaGluZyBvcHRpb24gaW4gcmVxdWVzdC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDUwCittc2dpZCAiVXNlIGFsdGVybmF0aXZlIHBvcnRzIGZvciBESENQLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NTEKK21zZ2lkICJTcGVjaWZ5IE5BUFRSIEROUyByZWNvcmQuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1MgorbXNnaWQgIlNwZWNpZnkgbG93ZXN0IHBvcnQgYXZhaWxhYmxlIGZvciBETlMgcXVlcnkgdHJhbnNtaXNzaW9uLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NTMKK21zZ2lkICJTcGVjaWZ5IGhpZ2hlc3QgcG9ydCBhdmFpbGFibGUgZm9yIEROUyBxdWVyeSB0cmFuc21pc3Npb24uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1NAorbXNnaWQgIlVzZSBvbmx5IGZ1bGx5IHF1YWxpZmllZCBkb21haW4gbmFtZXMgZm9yIERIQ1AgY2xpZW50cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDU1Cittc2dpZCAiR2VuZXJhdGUgaG9zdG5hbWVzIGJhc2VkIG9uIE1BQyBhZGRyZXNzIGZvciBuYW1lbGVzcyBjbGllbnRzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NTYKK21zZ2lkICJVc2UgdGhlc2UgREhDUCByZWxheXMgYXMgZnVsbCBwcm94aWVzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NTcKK21zZ2lkICJSZWxheSBESENQIHJlcXVlc3RzIHRvIGEgcmVtb3RlIHNlcnZlciIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NTgKK21zZ2lkICJTcGVjaWZ5IGFsaWFzIG5hbWUgZm9yIExPQ0FMIEROUyBuYW1lLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NTkKK21zZ2lkICJQcm9tcHQgdG8gc2VuZCB0byBQWEUgY2xpZW50cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDYwCittc2dpZCAiQm9vdCBzZXJ2aWNlIGZvciBQWEUgbWVudS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDYxCittc2dpZCAiQ2hlY2sgY29uZmlndXJhdGlvbiBzeW50YXguIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ2MgorbXNnaWQgIkFkZCByZXF1ZXN0b3IncyBNQUMgYWRkcmVzcyB0byBmb3J3YXJkZWQgRE5TIHF1ZXJpZXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ2MworbXNnaWQgIkFkZCBzcGVjaWZpZWQgSVAgc3VibmV0IHRvIGZvcndhcmRlZCBETlMgcXVlcmllcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDY0Cittc2dpZCAiQWRkIGNsaWVudCBpZGVudGlmaWNhdGlvbiB0byBmb3J3YXJkZWQgRE5TIHF1ZXJpZXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ2NQorbXNnaWQgIlByb3h5IEROU1NFQyB2YWxpZGF0aW9uIHJlc3VsdHMgZnJvbSB1cHN0cmVhbSBuYW1lc2VydmVycy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDY2Cittc2dpZCAiQXR0ZW1wdCB0byBhbGxvY2F0ZSBzZXF1ZW50aWFsIElQIGFkZHJlc3NlcyB0byBESENQIGNsaWVudHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ2NworbXNnaWQgIkNvcHkgY29ubmVjdGlvbi10cmFjayBtYXJrIGZyb20gcXVlcmllcyB0byB1cHN0cmVhbSBjb25uZWN0aW9ucy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDY4Cittc2dpZCAiQWxsb3cgREhDUCBjbGllbnRzIHRvIGRvIHRoZWlyIG93biBERE5TIHVwZGF0ZXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ2OQorbXNnaWQgIlNlbmQgcm91dGVyLWFkdmVydGlzZW1lbnRzIGZvciBpbnRlcmZhY2VzIGRvaW5nIERIQ1B2NiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NzAKK21zZ2lkICJTcGVjaWZ5IERVSURfRU4tdHlwZSBESENQdjYgc2VydmVyIERVSUQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDcxCittc2dpZCAiU3BlY2lmeSBob3N0IChBL0FBQUEgYW5kIFBUUikgcmVjb3JkcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NzIKK21zZ2lkICJTcGVjaWZ5IGFyYml0cmFyeSBETlMgcmVzb3VyY2UgcmVjb3JkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ3MworbXNnaWQgIkJpbmQgdG8gaW50ZXJmYWNlcyBpbiB1c2UgLSBjaGVjayBmb3IgbmV3IGludGVyZmFjZXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDc0Cittc2dpZCAiRXhwb3J0IGxvY2FsIG5hbWVzIHRvIGdsb2JhbCBETlMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDc1Cittc2dpZCAiRG9tYWluIHRvIGV4cG9ydCB0byBnbG9iYWwgRE5TIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ3NgorbXNnaWQgIlNldCBUVEwgZm9yIGF1dGhvcml0YXRpdmUgcmVwbGllcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NzcKK21zZ2lkICJTZXQgYXV0aG9yaXRhdGl2ZSB6b25lIGluZm9ybWF0aW9uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ3OAorbXNnaWQgIlNlY29uZGFyeSBhdXRob3JpdGF0aXZlIG5hbWVzZXJ2ZXJzIGZvciBmb3J3YXJkIGRvbWFpbnMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDc5Cittc2dpZCAiUGVlcnMgd2hpY2ggYXJlIGFsbG93ZWQgdG8gZG8gem9uZSB0cmFuc2ZlciIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0ODAKK21zZ2lkICJTcGVjaWZ5IGlwc2V0cyB0byB3aGljaCBtYXRjaGluZyBkb21haW5zIHNob3VsZCBiZSBhZGRlZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0ODEKK21zZ2lkICJTcGVjaWZ5IGEgZG9tYWluIGFuZCBhZGRyZXNzIHJhbmdlIGZvciBzeW50aGVzaXNlZCBuYW1lcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0ODIKK21zZ2lkICJBY3RpdmF0ZSBETlNTRUMgdmFsaWRhdGlvbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0ODMKK21zZ2lkICJTcGVjaWZ5IHRydXN0IGFuY2hvciBrZXkgZGlnZXN0LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0ODQKK21zZ2lkICJEaXNhYmxlIHVwc3RyZWFtIGNoZWNraW5nIGZvciBETlNTRUMgZGVidWdnaW5nLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0ODUKK21zZ2lkICJFbnN1cmUgYW5zd2VycyB3aXRob3V0IEROU1NFQyBhcmUgaW4gdW5zaWduZWQgem9uZXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ4NgorbXNnaWQgIkRvbid0IGNoZWNrIEROU1NFQyBzaWduYXR1cmUgdGltZXN0YW1wcyB1bnRpbCBmaXJzdCBjYWNoZS1yZWxvYWQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDg3Cittc2dpZCAiVGltZXN0YW1wIGZpbGUgdG8gdmVyaWZ5IHN5c3RlbSBjbG9jayBmb3IgRE5TU0VDIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ4OQorbXNnaWQgIlNwZWNpZnkgREhDUHY2IHByZWZpeCBjbGFzcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0OTEKK21zZ2lkICJTZXQgTVRVLCBwcmlvcml0eSwgcmVzZW5kLWludGVydmFsIGFuZCByb3V0ZXItbGlmZXRpbWUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDkyCittc2dpZCAiRG8gbm90IGxvZyByb3V0aW5lIERIQ1AuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ5MworbXNnaWQgIkRvIG5vdCBsb2cgcm91dGluZSBESENQdjYuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ5NAorbXNnaWQgIkRvIG5vdCBsb2cgUkEuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ5NQorbXNnaWQgIkFjY2VwdCBxdWVyaWVzIG9ubHkgZnJvbSBkaXJlY3RseS1jb25uZWN0ZWQgbmV0d29ya3MuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ5NgorbXNnaWQgIkRldGVjdCBhbmQgcmVtb3ZlIEROUyBmb3J3YXJkaW5nIGxvb3BzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0OTcKK21zZ2lkICJJZ25vcmUgRE5TIHJlc3BvbnNlcyBjb250YWluaW5nIGlwYWRkci4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDk4Cittc2dpZCAiU2V0IFRUTCBpbiBETlMgcmVzcG9uc2VzIHdpdGggREhDUC1kZXJpdmVkIGFkZHJlc3Nlcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDk5Cittc2dpZCAiRGVsYXkgREhDUCByZXBsaWVzIGZvciBhdCBsZWFzdCBudW1iZXIgb2Ygc2Vjb25kcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogZG5zbWFzcSBbb3B0aW9uc11cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo3MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNlIHNob3J0IG9wdGlvbnMgb25seSBvbiB0aGUgY29tbWFuZCBsaW5lLlxuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjcwNworIywgYy1mb3JtYXQKK21zZ2lkICJWYWxpZCBvcHRpb25zIGFyZTpcbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo3NTQgb3B0aW9uLmM6ODY4Cittc2dpZCAiYmFkIGFkZHJlc3MiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Nzc5IG9wdGlvbi5jOjc4MworbXNnaWQgImJhZCBwb3J0IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjc5NyBvcHRpb24uYzo4MjYgb3B0aW9uLmM6ODYxCittc2dpZCAiaW50ZXJmYWNlIGJpbmRpbmcgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo4MjEgb3B0aW9uLmM6ODU2Cittc2dpZCAiaW50ZXJmYWNlIGNhbiBvbmx5IGJlIHNwZWNpZmllZCBvbmNlIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjgzNSBvcHRpb24uYzozODAwCittc2dpZCAiYmFkIGludGVyZmFjZSBuYW1lIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjEwNjIKK21zZ2lkICJ1bnN1cHBvcnRlZCBlbmNhcHN1bGF0aW9uIGZvciBJUHY2IG9wdGlvbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxMDc2Cittc2dpZCAiYmFkIGRoY3Atb3B0aW9uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjExNDQKK21zZ2lkICJiYWQgSVAgYWRkcmVzcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxMTQ3IG9wdGlvbi5jOjEyODYgb3B0aW9uLmM6MzA3MAorbXNnaWQgImJhZCBJUHY2IGFkZHJlc3MiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTI0MAorbXNnaWQgImJhZCBJUHY0IGFkZHJlc3MiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTMxMyBvcHRpb24uYzoxNDA3Cittc2dpZCAiYmFkIGRvbWFpbiBpbiBkaGNwLW9wdGlvbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNDQ1Cittc2dpZCAiZGhjcC1vcHRpb24gdG9vIGxvbmciCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTQ1MgorbXNnaWQgImlsbGVnYWwgZGhjcC1tYXRjaCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNTE0Cittc2dpZCAiaWxsZWdhbCByZXBlYXRlZCBmbGFnIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE1MjIKK21zZ2lkICJpbGxlZ2FsIHJlcGVhdGVkIGtleXdvcmQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTU5MyBvcHRpb24uYzo0NDM0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBhY2Nlc3MgZGlyZWN0b3J5ICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNjM5IHRmdHAuYzo1MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGFjY2VzcyAlczogJXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTcyNworbXNnaWQgInNldHRpbmcgbG9nIGZhY2lsaXR5IGlzIG5vdCBwb3NzaWJsZSB1bmRlciBBbmRyb2lkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE3MzYKK21zZ2lkICJiYWQgbG9nIGZhY2lsaXR5IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE3ODkKK21zZ2lkICJiYWQgTVggcHJlZmVyZW5jZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNzk0Cittc2dpZCAiYmFkIE1YIG5hbWUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTgwOAorbXNnaWQgImJhZCBNWCB0YXJnZXQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTgyMAorbXNnaWQgImNhbm5vdCBydW4gc2NyaXB0cyB1bmRlciB1Q2xpbnV4IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE4MjIKK21zZ2lkICJyZWNvbXBpbGUgd2l0aCBIQVZFX1NDUklQVCBkZWZpbmVkIHRvIGVuYWJsZSBsZWFzZS1jaGFuZ2Ugc2NyaXB0cyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxODI2Cittc2dpZCAicmVjb21waWxlIHdpdGggSEFWRV9MVUFTQ1JJUFQgZGVmaW5lZCB0byBlbmFibGUgTHVhIHNjcmlwdHMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjA5NSBvcHRpb24uYzoyMTA2IG9wdGlvbi5jOjIxNDMgb3B0aW9uLmM6MjE5OSBvcHRpb24uYzoyNDgyCittc2dpZCAiYmFkIHByZWZpeCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNTA0Cittc2dpZCAicmVjb21waWxlIHdpdGggSEFWRV9JUFNFVCBkZWZpbmVkIHRvIGVuYWJsZSBpcHNldCBkaXJlY3RpdmVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI3MTMKK21zZ2lkICJiYWQgcG9ydCByYW5nZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNzM4Cittc2dpZCAiYmFkIGJyaWRnZS1pbnRlcmZhY2UiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjc5OAorbXNnaWQgIm9ubHkgb25lIHRhZyBhbGxvd2VkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI4MTggb3B0aW9uLmM6MjgzMCBvcHRpb24uYzoyOTM5IG9wdGlvbi5jOjI5NDQgb3B0aW9uLmM6Mjk4MworbXNnaWQgImJhZCBkaGNwLXJhbmdlIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI4NDUKK21zZ2lkICJpbmNvbnNpc3RlbnQgREhDUCByYW5nZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyOTA3Cittc2dpZCAicHJlZml4IGxlbmd0aCBtdXN0IGJlIGV4YWN0bHkgNjQgZm9yIFJBIHN1Ym5ldHMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjkwOQorbXNnaWQgInByZWZpeCBsZW5ndGggbXVzdCBiZSBleGFjdGx5IDY0IGZvciBzdWJuZXQgY29uc3RydWN0b3JzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5MTMKK21zZ2lkICJwcmVmaXggbGVuZ3RoIG11c3QgYmUgYXQgbGVhc3QgNjQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjkxNgorbXNnaWQgImluY29uc2lzdGVudCBESENQdjYgcmFuZ2UiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjkyNworbXNnaWQgInByZWZpeCBtdXN0IGJlIHplcm8gd2l0aCBcImNvbnN0cnVjdG9yOlwiIGFyZ3VtZW50IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMwNDAgb3B0aW9uLmM6MzA4OAorbXNnaWQgImJhZCBoZXggY29uc3RhbnQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzA2MgorbXNnaWQgImNhbm5vdCBtYXRjaCB0YWdzIGluIC0tZGhjcC1ob3N0IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIGRoY3AtaG9zdCBJUCBhZGRyZXNzICVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMxNjgKK21zZ2lkICJiYWQgREhDUCBob3N0IG5hbWUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzI1MAorbXNnaWQgImJhZCB0YWctaWYiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzYwNyBvcHRpb24uYzo0MDMwCittc2dpZCAiaW52YWxpZCBwb3J0IG51bWJlciIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNjY5Cittc2dpZCAiYmFkIGRoY3AtcHJveHkgYWRkcmVzcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNjk1Cittc2dpZCAiQmFkIGRoY3AtcmVsYXkiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzczNgorbXNnaWQgImJhZCBSQS1wYXJhbXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzc0NQorbXNnaWQgImJhZCBEVUlEIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM3ODcKK21zZ2lkICJpbnZhbGlkIGFsaWFzIHJhbmdlIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM4NDEgb3B0aW9uLmM6Mzg1MworbXNnaWQgImJhZCBDTkFNRSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozODU3Cittc2dpZCAiZHVwbGljYXRlIENOQU1FIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM4ODAKK21zZ2lkICJiYWQgUFRSIHJlY29yZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozOTExCittc2dpZCAiYmFkIE5BUFRSIHJlY29yZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozOTQ1Cittc2dpZCAiYmFkIFJSIHJlY29yZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozOTc1Cittc2dpZCAiYmFkIFRYVCByZWNvcmQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDAxNgorbXNnaWQgImJhZCBTUlYgcmVjb3JkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQwMjMKK21zZ2lkICJiYWQgU1JWIHRhcmdldCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MDM3Cittc2dpZCAiaW52YWxpZCBwcmlvcml0eSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MDQwCittc2dpZCAiaW52YWxpZCB3ZWlnaHQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDA2NAorbXNnaWQgIkJhZCBob3N0LXJlY29yZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MDg4Cittc2dpZCAiQmFkIG5hbWUgaW4gaG9zdC1yZWNvcmQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDE1MworbXNnaWQgImJhZCB0cnVzdCBhbmNob3IiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDE2NworbXNnaWQgImJhZCBIRVggaW4gdHJ1c3QgYW5jaG9yIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQxNzcKK21zZ2lkICJ1bnN1cHBvcnRlZCBvcHRpb24gKGNoZWNrIHRoYXQgZG5zbWFzcSB3YXMgY29tcGlsZWQgd2l0aCBESENQL1RGVFAvRE5TU0VDL0RCdXMgc3VwcG9ydCkiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDIzNworbXNnaWQgIm1pc3NpbmcgXCIiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDI5NAorbXNnaWQgImJhZCBvcHRpb24iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDI5NgorbXNnaWQgImV4dHJhbmVvdXMgcGFyYW1ldGVyIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQyOTgKK21zZ2lkICJtaXNzaW5nIHBhcmFtZXRlciIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzAwCittc2dpZCAiaWxsZWdhbCBvcHRpb24iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDMwNworbXNnaWQgImVycm9yIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQzMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGF0IGxpbmUgJWQgb2YgJXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDMyNCBvcHRpb24uYzo0NTcxIG9wdGlvbi5jOjQ2MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCAlcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0Mzg3IG9wdGlvbi5jOjQ1MTAgdGZ0cC5jOjcxNQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAlczogJXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDY3NgorbXNnaWQgImp1bmsgZm91bmQgaW4gY29tbWFuZCBsaW5lIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ3MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG5zbWFzcSB2ZXJzaW9uICVzICAlc1xuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ3MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvbXBpbGUgdGltZSBvcHRpb25zOiAlc1xuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ3MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuXG4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDcxNAorIywgYy1mb3JtYXQKK21zZ2lkICJEbnNtYXNxIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0XG4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDcxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIgb3IgMy5cbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NzI2Cittc2dpZCAidHJ5IC0taGVscCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NzI4Cittc2dpZCAidHJ5IC13IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ3MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbW1hbmQgbGluZSBvcHRpb25zOiAlcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0Nzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNOQU1FIGxvb3AgaW52b2x2aW5nICVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ4MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGdldCBob3N0LW5hbWU6ICVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ4NjIKK21zZ2lkICJvbmx5IG9uZSByZXNvbHYuY29uZiBmaWxlIGFsbG93ZWQgaW4gbm8tcG9sbCBtb2RlLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0ODcyCittc2dpZCAibXVzdCBoYXZlIGV4YWN0bHkgb25lIHJlc29sdi5jb25mIHRvIHJlYWQgZG9tYWluIGZyb20uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ4NzUgbmV0d29yay5jOjE2MTIgZGhjcC5jOjgxNgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCAlczogJXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDg5MgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzZWFyY2ggZGlyZWN0aXZlIGZvdW5kIGluICVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ5MTMKK21zZ2lkICJ0aGVyZSBtdXN0IGJlIGEgZGVmYXVsdCBkb21haW4gd2hlbiAtLWRoY3AtZnFkbiBpcyBzZXQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDkyMgorbXNnaWQgInN5bnRheCBjaGVjayBPSyIKK21zZ3N0ciAiIgorCisjOiBmb3J3YXJkLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZW5kIHBhY2tldDogJXMiCittc2dzdHIgIiIKKworIzogZm9yd2FyZC5jOjU5NworbXNnaWQgImRpc2NhcmRpbmcgRE5TIHJlcGx5OiBzdWJuZXQgb3B0aW9uIG1pc21hdGNoIgorbXNnc3RyICIiCisKKyM6IGZvcndhcmQuYzo2NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibmFtZXNlcnZlciAlcyByZWZ1c2VkIHRvIGRvIGEgcmVjdXJzaXZlIHF1ZXJ5IgorbXNnc3RyICIiCisKKyM6IGZvcndhcmQuYzo2ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAicG9zc2libGUgRE5TLXJlYmluZCBhdHRhY2sgZGV0ZWN0ZWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGZvcndhcmQuYzoxMjQ0IGZvcndhcmQuYzoxNjgxCittc2dpZCAiSWdub3JpbmcgcXVlcnkgZnJvbSBub24tbG9jYWwgbmV0d29yayIKK21zZ3N0ciAiIgorCisjOiBmb3J3YXJkLmM6MjE2NgorIywgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IEROUyBxdWVyaWVzIHJlYWNoZWQgKG1heDogJWQpIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzo3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBsaXN0ZW5pbmcgc29ja2V0IGZvciAlczogJXMiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjEwMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTE9VRCBXQVJOSU5HOiBsaXN0ZW5pbmcgb24gJXMgbWF5IGFjY2VwdCByZXF1ZXN0cyB2aWEgaW50ZXJmYWNlcyBvdGhlciB0aGFuICVzIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxMDM4Cittc2dpZCAiTE9VRCBXQVJOSU5HOiB1c2UgLS1iaW5kLWR5bmFtaWMgcmF0aGVyIHRoYW4gLS1iaW5kLWludGVyZmFjZXMgdG8gYXZvaWQgRE5TIGFtcGxpZmljYXRpb24gYXR0YWNrcyB2aWEgdGhlc2UgaW50ZXJmYWNlKHMpIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxMDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IHVzaW5nIGludGVyZmFjZSAlcyBpbnN0ZWFkIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxMDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IG5vIGFkZHJlc3NlcyBmb3VuZCBmb3IgaW50ZXJmYWNlICVzIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxMTE0CisjLCBjLWZvcm1hdAorbXNnaWQgImludGVyZmFjZSAlcyBmYWlsZWQgdG8gam9pbiBESENQdjYgbXVsdGljYXN0IGdyb3VwOiAlcyIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6MTExOQorbXNnaWQgInRyeSBpbmNyZWFzaW5nIC9wcm9jL3N5cy9uZXQvY29yZS9vcHRtZW1fbWF4IgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxMzIyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBiaW5kIHNlcnZlciBzb2NrZXQgZm9yICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6MTUxNworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBuYW1lc2VydmVyICVzIC0gbG9jYWwgaW50ZXJmYWNlIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxNTI4CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIG5hbWVzZXJ2ZXIgJXMgLSBjYW5ub3QgbWFrZS9iaW5kIHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjE1NDgKK21zZ2lkICIobm8gRE5TU0VDKSIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6MTU1MQorbXNnaWQgInVucXVhbGlmaWVkIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxNTUxCittc2dpZCAibmFtZXMiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjE1NTMKK21zZ2lkICJkZWZhdWx0IgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxNTU1Cittc2dpZCAiZG9tYWluIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxNTYxCisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIGxvY2FsIGFkZHJlc3NlcyBvbmx5IGZvciAlcyAlcyIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6MTU2NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyBzdGFuZGFyZCBuYW1lc2VydmVycyBmb3IgJXMgJXMiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjE1NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgbmFtZXNlcnZlciAlcyMlZCBmb3IgJXMgJXMgJXMiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjE1NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTk9UIHVzaW5nIG5hbWVzZXJ2ZXIgJXMjJWQgLSBxdWVyeSBsb29wIGRldGVjdGVkIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxNTczCisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIG5hbWVzZXJ2ZXIgJXMjJWQodmlhICVzKSIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6MTU3NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyBuYW1lc2VydmVyICVzIyVkIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxNTgwCisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nICVkIG1vcmUgbG9jYWwgYWRkcmVzc2VzIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxNTgyCisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nICVkIG1vcmUgbmFtZXNlcnZlcnMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjE2NgorbXNnaWQgImRoY3AtaG9zdHNkaXIsIGRoY3Atb3B0c2RpciBhbmQgaG9zdHNkaXIgYXJlIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybSIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTgxCittc2dpZCAibm8gcm9vdCB0cnVzdCBhbmNob3IgcHJvdmlkZWQgZm9yIEROU1NFQyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTg0Cittc2dpZCAiY2Fubm90IHJlZHVjZSBjYWNoZSBzaXplIGZyb20gZGVmYXVsdCB3aGVuIEROU1NFQyBlbmFibGVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxODYKK21zZ2lkICJETlNTRUMgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfRE5TU0VDIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTkyCittc2dpZCAiVEZUUCBzZXJ2ZXIgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfVEZUUCBpbiBzcmMvY29uZmlnLmgiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjE5NworbXNnaWQgImNhbm5vdCB1c2UgLS1jb25udHJhY2sgQU5EIC0tcXVlcnktcG9ydCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MjAwCittc2dpZCAiY29ubnRyYWNrIHN1cHBvcnQgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfQ09OTlRSQUNLIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MjA1Cittc2dpZCAiYXN5bmNocm9ub3VzIGxvZ2dpbmcgaXMgbm90IGF2YWlsYWJsZSB1bmRlciBTb2xhcmlzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoyMTAKK21zZ2lkICJhc3luY2hyb25vdXMgbG9nZ2luZyBpcyBub3QgYXZhaWxhYmxlIHVuZGVyIEFuZHJvaWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjIxNQorbXNnaWQgImF1dGhvcml0YXRpdmUgRE5TIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0FVVEggaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoyMjAKK21zZ2lkICJsb29wIGRldGVjdGlvbiBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9MT09QIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MjI3Cittc2dpZCAibWF4X3BvcnQgY2Fubm90IGJlIHNtYWxsZXIgdGhhbiBtaW5fcG9ydCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MjM0Cittc2dpZCAiem9uZSBzZXJpYWwgbXVzdCBiZSBjb25maWd1cmVkIGluIC0tYXV0aC1zb2EiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjI1MgorbXNnaWQgImRoY3AtcmFuZ2UgY29uc3RydWN0b3Igbm90IGF2YWlsYWJsZSBvbiB0aGlzIHBsYXRmb3JtIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoyOTgKK21zZ2lkICJjYW5ub3Qgc2V0IC0tYmluZC1pbnRlcmZhY2VzIGFuZCAtLWJpbmQtZHluYW1pYyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MzAxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmaW5kIGxpc3Qgb2YgaW50ZXJmYWNlczogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjMxMAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGludGVyZmFjZSAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6Mzc0IGRuc21hc3EuYzoxMDM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkRCdXMgZXJyb3I6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzozNzcKK21zZ2lkICJEQnVzIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0RCVVMgaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB1c2VyIG9yIGdyb3VwOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NDYwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGRpciB0byBmaWxlc3lzdGVtIHJvb3Q6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RhcnRlZCwgdmVyc2lvbiAlcyBETlMgZGlzYWJsZWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjcyMAorIywgYy1mb3JtYXQKK21zZ2lkICJzdGFydGVkLCB2ZXJzaW9uICVzIGNhY2hlc2l6ZSAlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzIyCisjLCBjLWZvcm1hdAorbXNnaWQgInN0YXJ0ZWQsIHZlcnNpb24gJXMgY2FjaGUgZGlzYWJsZWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjcyNQorbXNnaWQgIkROUyBzZXJ2aWNlIGxpbWl0ZWQgdG8gbG9jYWwgc3VibmV0cyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzI4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbXBpbGUgdGltZSBvcHRpb25zOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzM0Cittc2dpZCAiREJ1cyBzdXBwb3J0IGVuYWJsZWQ6IGNvbm5lY3RlZCB0byBzeXN0ZW0gYnVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3MzYKK21zZ2lkICJEQnVzIHN1cHBvcnQgZW5hYmxlZDogYnVzIGNvbm5lY3Rpb24gcGVuZGluZyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzU0Cittc2dpZCAiRE5TU0VDIHZhbGlkYXRpb24gZW5hYmxlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzU4Cittc2dpZCAiRE5TU0VDIHNpZ25hdHVyZSB0aW1lc3RhbXBzIG5vdCBjaGVja2VkIHVudGlsIGZpcnN0IGNhY2hlIHJlbG9hZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzYxCittc2dpZCAiRE5TU0VDIHNpZ25hdHVyZSB0aW1lc3RhbXBzIG5vdCBjaGVja2VkIHVudGlsIHN5c3RlbSB0aW1lIHZhbGlkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogZmFpbGVkIHRvIGNoYW5nZSBvd25lciBvZiAlczogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjc3MAorbXNnaWQgInNldHRpbmcgLS1iaW5kLWludGVyZmFjZXMgb3B0aW9uIGJlY2F1c2Ugb2YgT1MgbGltaXRhdGlvbnMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjc4MgorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBpbnRlcmZhY2UgJXMgZG9lcyBub3QgY3VycmVudGx5IGV4aXN0IgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3ODcKK21zZ2lkICJ3YXJuaW5nOiBpZ25vcmluZyByZXNvbHYtZmlsZSBmbGFnIGJlY2F1c2Ugbm8tcmVzb2x2IGlzIHNldCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzkwCittc2dpZCAid2FybmluZzogbm8gdXBzdHJlYW0gc2VydmVycyBjb25maWd1cmVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXN5bmNocm9ub3VzIGxvZ2dpbmcgZW5hYmxlZCwgcXVldWUgbGltaXQgaXMgJWQgbWVzc2FnZXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjgxNQorbXNnaWQgIklQdjYgcm91dGVyIGFkdmVydGlzZW1lbnQgZW5hYmxlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6ODIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AsIHNvY2tldHMgYm91bmQgZXhjbHVzaXZlbHkgdG8gaW50ZXJmYWNlICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo4MzQKK21zZ2lkICJyb290IGlzICIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6ODM0Cittc2dpZCAiZW5hYmxlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6ODM2Cittc2dpZCAic2VjdXJlIG1vZGUiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjgzOQorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiAlcyBpbmFjY2Vzc2libGUiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjg0MworIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBURlRQIGRpcmVjdG9yeSAlcyBpbmFjY2Vzc2libGUiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjg2OQorIywgYy1mb3JtYXQKK21zZ2lkICJyZXN0cmljdGluZyBtYXhpbXVtIHNpbXVsdGFuZW91cyBURlRQIHRyYW5zZmVycyB0byAlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTAzOQorbXNnaWQgImNvbm5lY3RlZCB0byBzeXN0ZW0gREJ1cyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZm9yayBpbnRvIGJhY2tncm91bmQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxMTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgaGVscGVyOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTE5NQorIywgYy1mb3JtYXQKK21zZ2lkICJzZXR0aW5nIGNhcGFiaWxpdGllcyBmYWlsZWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxMTk4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjaGFuZ2UgdXNlci1pZCB0byAlczogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjEyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNoYW5nZSBncm91cC1pZCB0byAlczogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjEyMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gcGlkZmlsZSAlczogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjEyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gbG9nICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBMdWEgc2NyaXB0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTIxMworIywgYy1mb3JtYXQKK21zZ2lkICJURlRQIGRpcmVjdG9yeSAlcyBpbmFjY2Vzc2libGU6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxMjE2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgdGltZXN0YW1wIGZpbGUgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxMjM5Cittc2dpZCAibm93IGNoZWNraW5nIEROU1NFQyBzaWduYXR1cmUgdGltZXN0YW1wcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTMwNworIywgYy1mb3JtYXQKK21zZ2lkICJzY3JpcHQgcHJvY2VzcyBraWxsZWQgYnkgc2lnbmFsICVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxMzExCisjLCBjLWZvcm1hdAorbXNnaWQgInNjcmlwdCBwcm9jZXNzIGV4aXRlZCB3aXRoIHN0YXR1cyAlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTMxNQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZXhlY3V0ZSAlczogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjEzNzkgZG5zc2VjLmM6NDc5IGRuc3NlYy5jOjUyNQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdXBkYXRlIG10aW1lIG9uICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTM4NgorbXNnaWQgImV4aXRpbmcgb24gcmVjZWlwdCBvZiBTSUdURVJNIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxNDE0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBhY2Nlc3MgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxNDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWRpbmcgJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjE0NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc2VydmVycyBmb3VuZCBpbiAlcywgd2lsbCByZXRyeSIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBESENQIHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZXQgb3B0aW9ucyBvbiBESENQIHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjg5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZXQgU09fUkVVU0V7QUREUnxQT1JUfSBvbiBESENQIHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjEwMQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYmluZCBESENQIHNlcnZlciBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBJQ01QIHJhdyBzb2NrZXQ6ICVzLiIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6MjUyIGRoY3A2LmM6MTczCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gaW50ZXJmYWNlICVzIGluIGJyaWRnZS1pbnRlcmZhY2UiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjI5MworIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHBhY2tldCByZWNlaXZlZCBvbiAlcyB3aGljaCBoYXMgbm8gYWRkcmVzcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6NDI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkFSUC1jYWNoZSBpbmplY3Rpb24gZmFpbGVkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6NDcwCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHNlbmRpbmcgREhDUCBwYWNrZXQgdG8gJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzo1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCByYW5nZSAlcyAtLSAlcyBpcyBub3QgY29uc2lzdGVudCB3aXRoIG5ldG1hc2sgJXMiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjg1NAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbGluZSBhdCAlcyBsaW5lICVkIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzo4OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgJXMgbGluZSAlZCwgZHVwbGljYXRlIG5hbWUgb3IgSVAgYWRkcmVzcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6MTA0MSByZmMzMzE1LmM6MjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHJlbGF5ICVzIC0+ICVzIgorbXNnc3RyICIiCisKKyM6IGxlYXNlLmM6OTgKK21zZ2lkICJ0b28gbWFueSBzdG9yZWQgbGVhc2VzIgorbXNnc3RyICIiCisKKyM6IGxlYXNlLmM6MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuIG9yIGNyZWF0ZSBsZWFzZSBmaWxlICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBsZWFzZS5jOjE3NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgbGVhc2UgZGF0YWJhc2UsIGludmFsaWQgbGluZTogJXMgJXMgJXMgJXMgLi4uIgorbXNnc3RyICIiCisKKyM6IGxlYXNlLmM6MTgwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkIGxlYXNlIGZpbGUgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGxlYXNlLmM6MTk2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBydW4gbGVhc2UtaW5pdCBzY3JpcHQgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGxlYXNlLmM6MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgImxlYXNlLWluaXQgc2NyaXB0IHJldHVybmVkIGV4aXQgY29kZSAlcyIKK21zZ3N0ciAiIgorCisjOiBsZWFzZS5jOjM3MworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgJXM6ICVzIChyZXRyeSBpbiAldXMpIgorbXNnc3RyICIiCisKKyM6IGxlYXNlLmM6OTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIklnbm9yaW5nIGRvbWFpbiAlcyBmb3IgREhDUCBob3N0IG5hbWUgJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICJubyBhZGRyZXNzIHJhbmdlIGF2YWlsYWJsZSBmb3IgREhDUCByZXF1ZXN0ICVzICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzozNDgKK21zZ2lkICJ3aXRoIHN1Ym5ldCBzZWxlY3RvciIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MzQ4Cittc2dpZCAidmlhIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzozNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYXZhaWxhYmxlIERIQ1Agc3VibmV0OiAlcy8lcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MzYzIHJmYzMzMTUuYzozMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYXZhaWxhYmxlIERIQ1AgcmFuZ2U6ICVzIC0tICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo0NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgdmVuZG9yIGNsYXNzOiAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6NDc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IHVzZXIgY2xhc3M6ICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo1MTAKK21zZ2lkICJkaXNhYmxlZCIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6NTUxIHJmYzIxMzEuYzoxMDA2IHJmYzIxMzEuYzoxNDMwIHJmYzMzMTUuYzo2MTYgcmZjMzMxNS5jOjg2OQorIzogcmZjMzMxNS5jOjExNDgKK21zZ2lkICJpZ25vcmVkIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo1NjYgcmZjMjEzMS5jOjEyMzkgcmZjMzMxNS5jOjkxOQorbXNnaWQgImFkZHJlc3MgaW4gdXNlIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo1ODAgcmZjMjEzMS5jOjEwNjAKK21zZ2lkICJubyBhZGRyZXNzIGF2YWlsYWJsZSIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6NTg3IHJmYzIxMzEuYzoxMjAyCittc2dpZCAid3JvbmcgbmV0d29yayIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6NjAyCittc2dpZCAibm8gYWRkcmVzcyBjb25maWd1cmVkIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo2MDggcmZjMjEzMS5jOjEyNTIKK21zZ2lkICJubyBsZWFzZXMgbGVmdCIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6NzAzIHJmYzMzMTUuYzo0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgY2xpZW50IHByb3ZpZGVzIG5hbWU6ICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo4MDgKK21zZ2lkICJQWEUgQklTIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjk3NCByZmMzMzE1LmM6MTI0MgorIywgYy1mb3JtYXQKK21zZ2lkICJkaXNhYmxpbmcgREhDUCBzdGF0aWMgYWRkcmVzcyAlcyBmb3IgJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjk5NQorbXNnaWQgInVua25vd24gbGVhc2UiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjEwMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHVzaW5nIGNvbmZpZ3VyZWQgYWRkcmVzcyAlcyBiZWNhdXNlIGl0IGlzIGxlYXNlZCB0byAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTAzOQorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgdXNpbmcgY29uZmlndXJlZCBhZGRyZXNzICVzIGJlY2F1c2UgaXQgaXMgaW4gdXNlIGJ5IHRoZSBzZXJ2ZXIgb3IgcmVsYXkiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjEwNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHVzaW5nIGNvbmZpZ3VyZWQgYWRkcmVzcyAlcyBiZWNhdXNlIGl0IHdhcyBwcmV2aW91c2x5IGRlY2xpbmVkIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxMDU4IHJmYzIxMzEuYzoxMjQ1Cittc2dpZCAibm8gdW5pcXVlLWlkIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxMTQwCittc2dpZCAid3Jvbmcgc2VydmVyLUlEIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxMTU5Cittc2dpZCAid3JvbmcgYWRkcmVzcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTE3NyByZmMzMzE1LmM6MTAxNQorbXNnaWQgImxlYXNlIG5vdCBmb3VuZCIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTIxMAorbXNnaWQgImFkZHJlc3Mgbm90IGF2YWlsYWJsZSIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTIyMQorbXNnaWQgInN0YXRpYyBsZWFzZSBhdmFpbGFibGUiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjEyMjUKK21zZ2lkICJhZGRyZXNzIHJlc2VydmVkIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxMjMzCisjLCBjLWZvcm1hdAorbXNnaWQgImFiYW5kb25pbmcgbGVhc2UgdG8gJXMgb2YgJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjE3NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYm9vdGZpbGUgbmFtZTogJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjE3NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgc2VydmVyIG5hbWU6ICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxNzc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IG5leHQgc2VydmVyOiAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTc3NworIywgYy1mb3JtYXQKK21zZ2lkICIldSBicm9hZGNhc3QgcmVzcG9uc2UiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjE4NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHNlbmQgREhDUC9CT09UUCBvcHRpb24gJWQ6IG5vIHNwYWNlIGxlZnQgaW4gcGFja2V0IgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoyMTMxCittc2dpZCAiUFhFIG1lbnUgdG9vIGxhcmdlIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoyMjcwIHJmYzMzMTUuYzoxNTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IHJlcXVlc3RlZCBvcHRpb25zOiAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MjU4NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc2VuZCBSRkMzOTI1IG9wdGlvbjogdG9vIG1hbnkgb3B0aW9ucyBmb3IgZW50ZXJwcmlzZSBudW1iZXIgJWQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjI2NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgcmVwbHkgZGVsYXk6ICVkIgorbXNnc3RyICIiCisKKyM6IG5ldGxpbmsuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIG5ldGxpbmsgc29ja2V0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBuZXRsaW5rLmM6MzU1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldGxpbmsgcmV0dXJucyBlcnJvcjogJXMiCittc2dzdHIgIiIKKworIzogZGJ1cy5jOjE4NgorbXNnaWQgImF0dGVtcHQgdG8gc2V0IGFuIElQdjYgc2VydmVyIGFkZHJlc3MgdmlhIERCdXMgLSBubyBJUHY2IHN1cHBvcnQiCittc2dzdHIgIiIKKworIzogZGJ1cy5jOjQzOQorIywgYy1mb3JtYXQKK21zZ2lkICJFbmFibGluZyAtLSVzIG9wdGlvbiBmcm9tIEQtQnVzIgorbXNnc3RyICIiCisKKyM6IGRidXMuYzo0NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlzYWJsaW5nIC0tJXMgb3B0aW9uIGZyb20gRC1CdXMiCittc2dzdHIgIiIKKworIzogZGJ1cy5jOjY5MAorbXNnaWQgInNldHRpbmcgdXBzdHJlYW0gc2VydmVycyBmcm9tIERCdXMiCittc2dzdHIgIiIKKworIzogZGJ1cy5jOjczNworbXNnaWQgImNvdWxkIG5vdCByZWdpc3RlciBhIERCdXMgbWVzc2FnZSBoYW5kbGVyIgorbXNnc3RyICIiCisKKyM6IGJwZi5jOjI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIERIQ1AgQlBGIHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogYnBmLmM6MjkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcmVxdWVzdCBmb3IgdW5zdXBwb3J0ZWQgaGFyZHdhcmUgdHlwZSAoJWQpIHJlY2VpdmVkIG9uICVzIgorbXNnc3RyICIiCisKKyM6IGJwZi5jOjM3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIFBGX1JPVVRFIHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogYnBmLmM6Mzk5Cittc2dpZCAiVW5rbm93biBwcm90b2NvbCB2ZXJzaW9uIGZyb20gcm91dGUgc29ja2V0IgorbXNnc3RyICIiCisKKyM6IGhlbHBlci5jOjE1MworbXNnaWQgImxlYXNlKCkgZnVuY3Rpb24gbWlzc2luZyBpbiBMdWEgc2NyaXB0IgorbXNnc3RyICIiCisKKyM6IHRmdHAuYzozMTkKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IGZyZWUgcG9ydCBmb3IgVEZUUCIKK21zZ3N0ciAiIgorCisjOiB0ZnRwLmM6MzM1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIHJlcXVlc3QgZnJvbSAlcyIKK21zZ3N0ciAiIgorCisjOiB0ZnRwLmM6NDgzCisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJXMgbm90IGZvdW5kIgorbXNnc3RyICIiCisKKyM6IHRmdHAuYzo1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgJWQgJXMgcmVjZWl2ZWQgZnJvbSAlcyIKK21zZ3N0ciAiIgorCisjOiB0ZnRwLmM6NjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCBzZW5kaW5nICVzIHRvICVzIgorbXNnc3RyICIiCisKKyM6IHRmdHAuYzo2MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VudCAlcyB0byAlcyIKK21zZ3N0ciAiIgorCisjOiBsb2cuYzoxOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAib3ZlcmZsb3c6ICVkIGxvZyBlbnRyaWVzIGxvc3QiCittc2dzdHIgIiIKKworIzogbG9nLmM6MjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImxvZyBmYWlsZWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGxvZy5jOjQ3MQorbXNnaWQgIkZBSUxFRCB0byBzdGFydCB1cCIKK21zZ3N0ciAiIgorCisjOiBjb25udHJhY2suYzo2NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb25udHJhY2sgY29ubmVjdGlvbiBtYXJrIHJldHJpZXZhbCBmYWlsZWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGRoY3A2LmM6NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBESENQdjYgc29ja2V0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwNi5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZXQgU09fUkVVU0V7QUREUnxQT1JUfSBvbiBESENQdjYgc29ja2V0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwNi5jOjg1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBiaW5kIERIQ1B2NiBzZXJ2ZXIgc29ja2V0OiAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMzMzE1LmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGFkZHJlc3MgcmFuZ2UgYXZhaWxhYmxlIGZvciBESENQdjYgcmVxdWVzdCBmcm9tIHJlbGF5IGF0ICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzMzMTUuYzoxNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYWRkcmVzcyByYW5nZSBhdmFpbGFibGUgZm9yIERIQ1B2NiByZXF1ZXN0IHZpYSAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMzMzE1LmM6MzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGF2YWlsYWJsZSBESENQdjYgc3VibmV0OiAlcy8lZCIKK21zZ3N0ciAiIgorCisjOiByZmMzMzE1LmM6Mzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IHZlbmRvciBjbGFzczogJXUiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjQzNAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBjbGllbnQgTUFDIGFkZHJlc3M6ICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzMzMTUuYzo2NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBwcmVmaXgtY2xhc3MgJWQiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjgxNiByZmMzMzE1LmM6OTExCittc2dpZCAiYWRkcmVzcyB1bmF2YWlsYWJsZSIKK21zZ3N0ciAiIgorCisjOiByZmMzMzE1LmM6ODI4IHJmYzMzMTUuYzo5NTkgcmZjMzMxNS5jOjEyOTIKK21zZ2lkICJzdWNjZXNzIgorbXNnc3RyICIiCisKKyM6IHJmYzMzMTUuYzo4NDMgcmZjMzMxNS5jOjg1MiByZmMzMzE1LmM6OTY3IHJmYzMzMTUuYzo5NjkKK21zZ2lkICJubyBhZGRyZXNzZXMgYXZhaWxhYmxlIgorbXNnc3RyICIiCisKKyM6IHJmYzMzMTUuYzo5NDYKK21zZ2lkICJub3Qgb24gbGluayIKK21zZ3N0ciAiIgorCisjOiByZmMzMzE1LmM6MTAxOSByZmMzMzE1LmM6MTIwNCByZmMzMzE1LmM6MTI4MQorbXNnaWQgIm5vIGJpbmRpbmcgZm91bmQiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjEwNTcKK21zZ2lkICJkZXByZWNhdGVkIgorbXNnc3RyICIiCisKKyM6IHJmYzMzMTUuYzoxMDYyCittc2dpZCAiYWRkcmVzcyBpbnZhbGlkIgorbXNnc3RyICIiCisKKyM6IHJmYzMzMTUuYzoxMTA5Cittc2dpZCAiY29uZmlybSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjExMjUKK21zZ2lkICJhbGwgYWRkcmVzc2VzIHN0aWxsIG9uIGxpbmsiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjEyMTMKK21zZ2lkICJyZWxlYXNlIHJlY2VpdmVkIgorbXNnc3RyICIiCisKKyM6IHJmYzMzMTUuYzoyMTQwCittc2dpZCAiQ2Fubm90IG11bHRpY2FzdCB0byBESENQdjYgc2VydmVyIHdpdGhvdXQgY29ycmVjdCBpbnRlcmZhY2UiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzoxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSWdub3JpbmcgZHVwbGljYXRlIGRoY3Atb3B0aW9uICVkIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6MjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IHRhZ3M6ICVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6NDA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyBtb3JlIHRoYW4gb25lIGFkZHJlc3MgaW4gaG9zdHNmaWxlLCB1c2luZyAlcyBmb3IgREhDUCIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjQzMAorIywgYy1mb3JtYXQKK21zZ2lkICJkdXBsaWNhdGUgSVAgYWRkcmVzcyAlcyAoJXMpIGluIGRoY3AtY29uZmlnIGRpcmVjdGl2ZSIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjQ5NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2V0IFNPX0JJTkRUT0RFVklDRSBvbiBESENQIHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo2MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiS25vd24gREhDUCBvcHRpb25zOlxuIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6NjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIktub3duIERIQ1B2NiBvcHRpb25zOlxuIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6ODIzCittc2dpZCAiLCBwcmVmaXggZGVwcmVjYXRlZCIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjgyNgorIywgYy1mb3JtYXQKK21zZ2lkICIsIGxlYXNlIHRpbWUgIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6ODY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHN0YXRlbGVzcyBvbiAlcyUuMHMlLjBzJXMiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo4NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsIHN0YXRpYyBsZWFzZXMgb25seSBvbiAlLjBzJXMlcyUuMHMiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo4NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsIHByb3h5IG9uIHN1Ym5ldCAlLjBzJXMlLjBzJS4wcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjg3MworIywgYy1mb3JtYXQKK21zZ2lkICIlcywgSVAgcmFuZ2UgJXMgLS0gJXMlcyUuMHMiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo4ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUHY0LWRlcml2ZWQgSVB2NiBuYW1lcyBvbiAlcyVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6ODg5CisjLCBjLWZvcm1hdAorbXNnaWQgInJvdXRlciBhZHZlcnRpc2VtZW50IG9uICVzJXMiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo5MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCByZWxheSBmcm9tICVzIHRvICVzIHZpYSAlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjkwMgorIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHJlbGF5IGZyb20gJXMgdG8gJXMiCittc2dzdHIgIiIKKworIzogcmFkdi5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIElDTVB2NiBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGF1dGguYzo0NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3Jpbmcgem9uZSB0cmFuc2ZlciByZXF1ZXN0IGZyb20gJXMiCittc2dzdHIgIiIKKworIzogaXBzZXQuYzo5NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluZCBrZXJuZWwgdmVyc2lvbjogJXMiCittc2dzdHIgIiIKKworIzogaXBzZXQuYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBJUHNldCBjb250cm9sIHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogaXBzZXQuYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHVwZGF0ZSBpcHNldCAlczogJXMiCittc2dzdHIgIiIKKworIzogZG5zc2VjLmM6NTI3Cittc2dpZCAic3lzdGVtIHRpbWUgY29uc2lkZXJlZCB2YWxpZCwgbm93IGNoZWNraW5nIEROU1NFQyBzaWduYXR1cmUgdGltZXN0YW1wcy4iCittc2dzdHIgIiIKKworIzogYmxvY2tkYXRhLmM6NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRE5TU0VDIG1lbW9yeSBpbiB1c2UgJXUsIG1heCAldSwgYWxsb2NhdGVkICV1IgorbXNnc3RyICIiCisKKyM6IHRhYmxlcy5jOjYxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBhY2Nlc3MgcGYgZGV2aWNlczogJXMiCittc2dzdHIgIiIKKworIzogdGFibGVzLmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogbm8gb3BlbmVkIHBmIGRldmljZXMgJXMiCittc2dzdHIgIiIKKworIzogdGFibGVzLmM6ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3I6IGNhbm5vdCB1c2UgdGFibGUgbmFtZSAlcyIKK21zZ3N0ciAiIgorCisjOiB0YWJsZXMuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvcjogY2Fubm90IHN0cmxjcHkgdGFibGUgbmFtZSAlcyIKK21zZ3N0ciAiIgorCisjOiB0YWJsZXMuYzoxMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSVBzZXQ6IGVycm9yOiVzIgorbXNnc3RyICIiCisKKyM6IHRhYmxlcy5jOjEwOAorbXNnaWQgImluZm86IHRhYmxlIGNyZWF0ZWQiCittc2dzdHIgIiIKKworIzogdGFibGVzLmM6MTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IERJT0NSJXNBRERSUzogJXMiCittc2dzdHIgIiIKKworIzogdGFibGVzLmM6MTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGFkZHJlc3NlcyAlcyIKK21zZ3N0ciAiIgorCisjOiBpbm90aWZ5LmM6NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGFjY2VzcyBwYXRoICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBpbm90aWZ5LmM6OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBpbm90aWZ5OiAlcyIKK21zZ3N0ciAiIgorCisjOiBpbm90aWZ5LmM6MTExCisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IHN5bWxpbmtzIGZvbGxvd2luZyAlcyIKK21zZ3N0ciAiIgorCisjOiBpbm90aWZ5LmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgImRpcmVjdG9yeSAlcyBmb3IgcmVzb2x2LWZpbGUgaXMgbWlzc2luZywgY2Fubm90IHBvbGwiCittc2dzdHIgIiIKKworIzogaW5vdGlmeS5jOjEzMSBpbm90aWZ5LmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgaW5vdGlmeSBmb3IgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGlub3RpZnkuYzoxNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGR5bmFtaWMgZGlyZWN0b3J5ICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBpbm90aWZ5LmM6MjU1CisjLCBjLWZvcm1hdAorbXNnaWQgImlub3RpZnksIG5ldyBvciBjaGFuZ2VkIGZpbGUgJXMiCittc2dzdHIgIiIKZGlmZiAtLWdpdCBhL3BvL25vLnBvIGIvcG8vbm8ucG8KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmY5NTJkMAotLS0gL2Rldi9udWxsCisrKyBiL3BvL25vLnBvCkBAIC0wLDAgKzEsMjM3MCBAQAorIyBOb3J3ZWdpYW4gdHJhbnNsYXRpb25zIGZvciBkbnNtYXNxIHBhY2thZ2UuCisjIFRoaXMgZmlsZSBpcyBwdXQgaW4gdGhlIHB1YmxpYyBkb21haW4uCisjIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+LCAyMDA2LgorIworIyBDdXJyZW50IHRyYW5zbGF0b3I6IEphbiBFcmlrIEFza2lsZHQgPGplYXNraWxkdEBnbWFpbC5jb20+LCAyMDA2CisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBkbnNtYXNxIDIuMjVcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMDktMDYtMTggMTI6MjQrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTctMDctMTcgMTg6MzArMDEwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogSmFuIEVyaWsgQXNraWxkdCA8amVhc2tpbGR0QGdtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBOb3J3ZWdpYW4gPGkxOG4tbmJAbGlzdGVyLnBpbmcudWlvLm5vPlxuIgorIkxhbmd1YWdlOiBub1xuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04ODU5LTFcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisKKyM6IGNhY2hlLmM6NTEzCittc2dpZCAiSW50ZXJuYWwgZXJyb3IgaW4gY2FjaGUuIgorbXNnc3RyICIiCisKKyM6IGNhY2hlLmM6OTIzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBuYW1lcyBmcm9tICVzOiAlcyIKK21zZ3N0ciAiZmVpbGV0IOUgbGFzdGUgbmF2biBmcmEgJXM6ICVzIgorCisjOiBjYWNoZS5jOjk0OSBkaGNwLmM6ODY3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBhZGRyZXNzIGF0ICVzIGxpbmUgJWQiCittc2dzdHIgImTlcmxpZyBhZHJlc3NlIHZlZCAlcyBsaW5qZSAlZCIKKworIzogY2FjaGUuYzoxMDAyIGRoY3AuYzo4ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG5hbWUgYXQgJXMgbGluZSAlZCIKK21zZ3N0ciAiZOVybGlnIG5hdm4gdmVkICVzIGxpbmplICVkIgorCisjOiBjYWNoZS5jOjEwMTEgZGhjcC5jOjk1OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkICVzIC0gJWQgYWRkcmVzc2VzIgorbXNnc3RyICJsZXMgJXMgLSAlZCBhZHJlc3NlciIKKworIzogY2FjaGUuYzoxMTI0Cittc2dpZCAiY2xlYXJlZCBjYWNoZSIKK21zZ3N0ciAibWVsbG9tbGFnZXIgdPhtdCIKKworIzogY2FjaGUuYzoxMTUzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIElQdjQgYWRkcmVzcyBmb3VuZCBmb3IgJXMiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxMjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGEgQ05BTUUsIG5vdCBnaXZpbmcgaXQgdG8gdGhlIERIQ1AgbGVhc2Ugb2YgJXMiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxMjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBnaXZpbmcgbmFtZSAlcyB0byB0aGUgREhDUCBsZWFzZSBvZiAlcyBiZWNhdXNlIHRoZSBuYW1lIGV4aXN0cyBpbiAlcyB3aXRoIGFkZHJlc3MgJXMiCittc2dzdHIgImdpciBpa2tlIG5hdm5ldCAlcyB0aWwgREhDUCBsZWllbiBmb3IgJXMgZm9yZGkgbmF2bmV0IGVrc2lzdGVyZXIgaSAlcyBtZWQgYWRyZXNzZW4gJXMiCisKKyM6IGNhY2hlLmM6MTQxMworIywgYy1mb3JtYXQKK21zZ2lkICJ0aW1lICVsdSIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjE0MTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhY2hlIHNpemUgJWQsICVkLyVkIGNhY2hlIGluc2VydGlvbnMgcmUtdXNlZCB1bmV4cGlyZWQgY2FjaGUgZW50cmllcy4iCittc2dzdHIgIm1lbGxvbWxhZ2VyIHN0+HJyZWxzZSAlZCwgJWQvJWQgbWVsbG9tbGFnZXIgaW5uc2V0dGluZ2VyIHJlLWJydWtlciBtZWxsb21sYWdlciBwbGFzc2VyIHNvbSBpa2tlIGVyIHV0bPhwdCIKKworIzogY2FjaGUuYzoxNDE2CisjLCBjLWZvcm1hdAorbXNnaWQgInF1ZXJpZXMgZm9yd2FyZGVkICV1LCBxdWVyaWVzIGFuc3dlcmVkIGxvY2FsbHkgJXUiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxNDE5CisjLCBjLWZvcm1hdAorbXNnaWQgInF1ZXJpZXMgZm9yIGF1dGhvcml0YXRpdmUgem9uZXMgJXUiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxNDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgInNlcnZlciAlcyMlZDogcXVlcmllcyBzZW50ICV1LCByZXRyaWVkIG9yIGZhaWxlZCAldSIKK21zZ3N0ciAiIgorCisjOiB1dGlsLmM6NDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZWVkIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcjogJXMiCittc2dzdHIgImZlaWxldCDlIGx5dHRlIHDlIHNvY2tldDogJXMiCisKKyM6IHV0aWwuYzoyMjQKKyMsIGZ1enp5Cittc2dpZCAiZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSIKK21zZ3N0ciAiZmVpbGV0IOUgbGFzdGUgJWQgYnl0ZXMiCisKKyM6IHV0aWwuYzoyNzcgb3B0aW9uLmM6NjE5Cittc2dpZCAiY291bGQgbm90IGdldCBtZW1vcnkiCittc2dzdHIgImt1bm5lIGlra2UgZuUgbWlubmUiCisKKyM6IHV0aWwuYzoyODcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgcGlwZTogJXMiCittc2dzdHIgImthbiBpa2tlIGxlc2UgJXM6ICVzIgorCisjOiB1dGlsLmM6Mjk1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYWxsb2NhdGUgJWQgYnl0ZXMiCittc2dzdHIgImZlaWxldCDlIGxhc3RlICVkIGJ5dGVzIgorCisjOiB1dGlsLmM6NDY0CisjLCBjLWZvcm1hdAorbXNnaWQgImluZmluaXRlIgorbXNnc3RyICJ1ZW5kZWxpZyIKKworIzogb3B0aW9uLmM6MzQ0Cittc2dpZCAiU3BlY2lmeSBsb2NhbCBhZGRyZXNzKGVzKSB0byBsaXN0ZW4gb24uIgorbXNnc3RyICJTcGVzaWZpc2VyIGxva2FsKGUpIGFkcmVzc2Uocikg5SBseXR0ZSBw5S4iCisKKyM6IG9wdGlvbi5jOjM0NQorbXNnaWQgIlJldHVybiBpcGFkZHIgZm9yIGFsbCBob3N0cyBpbiBzcGVjaWZpZWQgZG9tYWlucy4iCittc2dzdHIgIlJldHVybmVyIGlwYWRkciBmb3IgYWxsZSB2ZXJ0ZXIgaSBkZXQgc3Blc2lmaXNlcnRlIGRvbWVuZXQuIgorCisjOiBvcHRpb24uYzozNDYKK21zZ2lkICJGYWtlIHJldmVyc2UgbG9va3VwcyBmb3IgUkZDMTkxOCBwcml2YXRlIGFkZHJlc3MgcmFuZ2VzLiIKK21zZ3N0ciAiRm9yZmFsc2sgcmV2ZXJzIG9wcHNsYWcgZm9yIFJGQzE5MTggcHJpdmF0ZSBhZHJlc3NlIG9tcuVkZXIuIgorCisjOiBvcHRpb24uYzozNDcKK21zZ2lkICJUcmVhdCBpcGFkZHIgYXMgTlhET01BSU4gKGRlZmVhdHMgVmVyaXNpZ24gd2lsZGNhcmQpLiIKK21zZ3N0ciAiQmVoYW5kbGUgaXBhZGRyIHNvbSBOWERPTUFJTiAob21n5XIgVmVyaXNpZ24gd2lsZGNhcmQpLiIKKworIzogb3B0aW9uLmM6MzQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgdGhlIHNpemUgb2YgdGhlIGNhY2hlIGluIGVudHJpZXMgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIlNwZXNpZmlzZXIgc3T4cnJlbHNlbiBw5SBtZWxsb21sYWdlciBwbGFzc2VuZSAoc3RhbmRhcmQgZXIgJXMpLiIKKworIzogb3B0aW9uLmM6MzQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgY29uZmlndXJhdGlvbiBmaWxlIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJTcGVzaWZpc2VyIGtvbmZpZ3VyYXNqb25zZmlsIChzdGFuZGFyZCBlciAlcykuIgorCisjOiBvcHRpb24uYzozNTAKK21zZ2lkICJEbyBOT1QgZm9yayBpbnRvIHRoZSBiYWNrZ3JvdW5kOiBydW4gaW4gZGVidWcgbW9kZS4iCittc2dzdHIgIklLS0UgbGVnZyAoZm9yaykgc29tIGJha2dydW5uc3Byb3Nlc3M6IGtq+HIgaSBkZWJ1ZyBtb2R1cy4iCisKKyM6IG9wdGlvbi5jOjM1MQorbXNnaWQgIkRvIE5PVCBmb3J3YXJkIHF1ZXJpZXMgd2l0aCBubyBkb21haW4gcGFydC4iCittc2dzdHIgIklLS0UgdmlkZXJlc2VuZCBvcHBzbGFnIHNvbSBtYW5nbGVyIGRvbWVuZSBkZWwuIgorCisjOiBvcHRpb24uYzozNTIKK21zZ2lkICJSZXR1cm4gc2VsZi1wb2ludGluZyBNWCByZWNvcmRzIGZvciBsb2NhbCBob3N0cy4iCittc2dzdHIgIlJldHVybmVyIHNlbHYtcGVrZW5kZSBNWCBwb3N0IGZvciBsb2thbGUgdmVydGVyLiIKKworIzogb3B0aW9uLmM6MzUzCittc2dpZCAiRXhwYW5kIHNpbXBsZSBuYW1lcyBpbiAvZXRjL2hvc3RzIHdpdGggZG9tYWluLXN1ZmZpeC4iCittc2dzdHIgIlV0dmlkIGVua2xlIG5hdm4gaSAvZXRjL2hvc3RzIG1lZCBkb21lbmUtc3VmZmlrcy4iCisKKyM6IG9wdGlvbi5jOjM1NAorbXNnaWQgIkRvbid0IGZvcndhcmQgc3B1cmlvdXMgRE5TIHJlcXVlc3RzIGZyb20gV2luZG93cyBob3N0cy4iCittc2dzdHIgIklra2UgdmlkZXJlc2VuZCBmYWxza2UvdWVrdGUgRE5TIGZvcmVzcPhyc2xlciBmcmEgV2luZG93cyB2ZXJ0ZXIuIgorCisjOiBvcHRpb24uYzozNTUKK21zZ2lkICJFbmFibGUgREhDUCBpbiB0aGUgcmFuZ2UgZ2l2ZW4gd2l0aCBsZWFzZSBkdXJhdGlvbi4iCittc2dzdHIgIkFrdGl2ZXIgREhDUCBpIGRldCBnaXR0ZSBvbXLlZGV0IG1lZCBsZWllIHZhcmlnaGV0IgorCisjOiBvcHRpb24uYzozNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hhbmdlIHRvIHRoaXMgZ3JvdXAgYWZ0ZXIgc3RhcnR1cCAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiU2tpZnQgdGlsIGRlbm5lIGdydXBwZW4gZXR0ZXIgb3Bwc3RhcnQgKHN0YW5kYXJkIGVyICVzKS4iCisKKyM6IG9wdGlvbi5jOjM1NworbXNnaWQgIlNldCBhZGRyZXNzIG9yIGhvc3RuYW1lIGZvciBhIHNwZWNpZmllZCBtYWNoaW5lLiIKK21zZ3N0ciAiU2V0dCBhZHJlc3NlIGVsbGVyIHZlcnRzbmF2biBmb3IgZW4gc3Blc2lmaWtrIG1hc2tpbi4iCisKKyM6IG9wdGlvbi5jOjM1OAorIywgZnV6enkKK21zZ2lkICJSZWFkIERIQ1AgaG9zdCBzcGVjcyBmcm9tIGZpbGUuIgorbXNnc3RyICJk5XJsaWcgTVggbmF2biIKKworIzogb3B0aW9uLmM6MzU5Cittc2dpZCAiUmVhZCBESENQIG9wdGlvbiBzcGVjcyBmcm9tIGZpbGUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM2MAorIywgZnV6enkKK21zZ2lkICJSZWFkIERIQ1AgaG9zdCBzcGVjcyBmcm9tIGEgZGlyZWN0b3J5LiIKK21zZ3N0ciAiZOVybGlnIE1YIG5hdm4iCisKKyM6IG9wdGlvbi5jOjM2MQorIywgZnV6enkKK21zZ2lkICJSZWFkIERIQ1Agb3B0aW9ucyBmcm9tIGEgZGlyZWN0b3J5LiIKK21zZ3N0ciAiZOVybGlnIE1YIG5hdm4iCisKKyM6IG9wdGlvbi5jOjM2MgorbXNnaWQgIkV2YWx1YXRlIGNvbmRpdGlvbmFsIHRhZyBleHByZXNzaW9uLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG8gTk9UIGxvYWQgJXMgZmlsZS4iCittc2dzdHIgIklLS0UgbGFzdCAlcyBmaWxlbi4iCisKKyM6IG9wdGlvbi5jOjM2NAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IGEgaG9zdHMgZmlsZSB0byBiZSByZWFkIGluIGFkZGl0aW9uIHRvICVzLiIKK21zZ3N0ciAiU3Blc2lmaXNlciBlbiB2ZXJ0cyAoaG9zdHMpIGZpbCBzb20gc2thbCBsZXNlcyBpIHRpbGxlZyB0aWwgJXMuIgorCisjOiBvcHRpb24uYzozNjUKKyMsIGZ1enp5Cittc2dpZCAiUmVhZCBob3N0cyBmaWxlcyBmcm9tIGEgZGlyZWN0b3J5LiIKK21zZ3N0ciAiZOVybGlnIE1YIG5hdm4iCisKKyM6IG9wdGlvbi5jOjM2NgorbXNnaWQgIlNwZWNpZnkgaW50ZXJmYWNlKHMpIHRvIGxpc3RlbiBvbi4iCittc2dzdHIgIlNwZXNpZmlzZXIgbmV0dHZlcmtza29ydCBkZXQgc2thbCBseXR0ZXMgcOUuIgorCisjOiBvcHRpb24uYzozNjcKK21zZ2lkICJTcGVjaWZ5IGludGVyZmFjZShzKSBOT1QgdG8gbGlzdGVuIG9uLiIKK21zZ3N0ciAiU3Blc2lmaXNlciBuZXR0dmVya3Nrb3J0IGRldCBJS0tFIHNrYWwgbHl0dGVzIHDlLiIKKworIzogb3B0aW9uLmM6MzY4CisjLCBmdXp6eQorbXNnaWQgIk1hcCBESENQIHVzZXIgY2xhc3MgdG8gdGFnLiIKK21zZ3N0ciAiTWFwIERIQ1AgYnJ1a2VyIGtsYXNzZSB0aWwgb3Bzam9uIHNldHQuIgorCisjOiBvcHRpb24uYzozNjkKK21zZ2lkICJNYXAgUkZDMzA0NiBjaXJjdWl0LWlkIHRvIHRhZy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzcwCittc2dpZCAiTWFwIFJGQzMwNDYgcmVtb3RlLWlkIHRvIHRhZy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzcxCittc2dpZCAiTWFwIFJGQzM5OTMgc3Vic2NyaWJlci1pZCB0byB0YWcuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM3MgorIywgZnV6enkKK21zZ2lkICJEb24ndCBkbyBESENQIGZvciBob3N0cyB3aXRoIHRhZyBzZXQuIgorbXNnc3RyICJJa2tlIHV0ZvhyIERIQ1AgZm9yIGtsaWVudGVyIGkgb3Bzam9uIHNldHQuIgorCisjOiBvcHRpb24uYzozNzMKKyMsIGZ1enp5Cittc2dpZCAiRm9yY2UgYnJvYWRjYXN0IHJlcGxpZXMgZm9yIGhvc3RzIHdpdGggdGFnIHNldC4iCittc2dzdHIgIklra2UgdXRm+HIgREhDUCBmb3Iga2xpZW50ZXIgaSBvcHNqb24gc2V0dC4iCisKKyM6IG9wdGlvbi5jOjM3NAorbXNnaWQgIkRvIE5PVCBmb3JrIGludG8gdGhlIGJhY2tncm91bmQsIGRvIE5PVCBydW4gaW4gZGVidWcgbW9kZS4iCittc2dzdHIgIklLS0UgbGFzdCAoZm9yaykgc29tIGJha2dydW5uc3Byb3Nlc3MsIElLS0Uga2r4ciBpIGRlYnVnIG1vZHVzLiIKKworIzogb3B0aW9uLmM6Mzc1Cittc2dpZCAiQXNzdW1lIHdlIGFyZSB0aGUgb25seSBESENQIHNlcnZlciBvbiB0aGUgbG9jYWwgbmV0d29yay4iCittc2dzdHIgIkFudGEgYXQgdmkgZXIgZGVuIGVuZXN0ZSBESENQIHRqZW5lcmVuIHDlIGRldCBsb2thbGUgbmV0dHZlcmtldC4iCisKKyM6IG9wdGlvbi5jOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHdoZXJlIHRvIHN0b3JlIERIQ1AgbGVhc2VzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJTcGVzaWZpc2VyIGh2b3IgREhDUCBsZWllbmUgc2thbCBsYWdyZXMgKHN0YW5kYXJkIGVyICVzKS4iCisKKyM6IG9wdGlvbi5jOjM3NworbXNnaWQgIlJldHVybiBNWCByZWNvcmRzIGZvciBsb2NhbCBob3N0cy4iCittc2dzdHIgIlJldHVybmVyIE1YIHJlY29yZHMgZm9yIGxva2FsZSB2ZXJ0ZXIuIgorCisjOiBvcHRpb24uYzozNzgKK21zZ2lkICJTcGVjaWZ5IGFuIE1YIHJlY29yZC4iCittc2dzdHIgIlNwZXNpZmlzZXIgZW4gTVggcG9zdC4iCisKKyM6IG9wdGlvbi5jOjM3OQorbXNnaWQgIlNwZWNpZnkgQk9PVFAgb3B0aW9ucyB0byBESENQIHNlcnZlci4iCittc2dzdHIgIlNwZXNpZmlzZXIgQk9PVFAgb3Bzam9uZXIgdGlsIERIQ1AgdGplbmVyLiIKKworIzogb3B0aW9uLmM6MzgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkRvIE5PVCBwb2xsICVzIGZpbGUsIHJlbG9hZCBvbmx5IG9uIFNJR0hVUC4iCittc2dzdHIgIklLS0Ugc3D4ciAocG9sbCkgJXMgZmlsLCBsZXMgcOUgbnl0dCBrdW4gdmVkIFNJR0hVUCIKKworIzogb3B0aW9uLmM6MzgxCittc2dpZCAiRG8gTk9UIGNhY2hlIGZhaWxlZCBzZWFyY2ggcmVzdWx0cy4iCittc2dzdHIgIklLS0UgbWVsbG9tbGFncmUgc/hrZXJlc3VsdGF0ZXIgc29tIGZlaWxlci4iCisKKyM6IG9wdGlvbi5jOjM4MgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2UgbmFtZXNlcnZlcnMgc3RyaWN0bHkgaW4gdGhlIG9yZGVyIGdpdmVuIGluICVzLiIKK21zZ3N0ciAiQnJ1ayBuYXZuZXRqZW5lcmUga3VuIHNvbSBiZXN0ZW10IGkgcmVra2Vm+GxnZW4gZ2l0dCBpICVzLiIKKworIzogb3B0aW9uLmM6MzgzCisjLCBmdXp6eQorbXNnaWQgIlNwZWNpZnkgb3B0aW9ucyB0byBiZSBzZW50IHRvIERIQ1AgY2xpZW50cy4iCittc2dzdHIgIlNldHQgZWtzdHJhIG9wc2pvbmVyIHNvbSBza2FsIGZvcmRlbGVzIHRpbCBESENQIGtsaWVudGVuZS4iCisKKyM6IG9wdGlvbi5jOjM4NAorbXNnaWQgIkRIQ1Agb3B0aW9uIHNlbnQgZXZlbiBpZiB0aGUgY2xpZW50IGRvZXMgbm90IHJlcXVlc3QgaXQuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM4NQorbXNnaWQgIlNwZWNpZnkgcG9ydCB0byBsaXN0ZW4gZm9yIEROUyByZXF1ZXN0cyBvbiAoZGVmYXVsdHMgdG8gNTMpLiIKK21zZ3N0ciAiU3Blc2lmaXNlciBseXR0ZXBvcnQgZm9yIEROUyBvcHBzbGFnIChzdGFuZGFyZCBlciA1MykuIgorCisjOiBvcHRpb24uYzozODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBzdXBwb3J0ZWQgVURQIHBhY2tldCBzaXplIGZvciBFRE5TLjAgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIk1ha3NpbWFsIHN0+HR0ZXQgVURQIHBha2tlc3T4cnJlbHNlIGZvciBFRE5TLjAgKHN0YW5kYXJkIGVyICVzKS4iCisKKyM6IG9wdGlvbi5jOjM4NworIywgZnV6enkKK21zZ2lkICJMb2cgRE5TIHF1ZXJpZXMuIgorbXNnc3RyICJMb2dnIG9wcHNsYWcuIgorCisjOiBvcHRpb24uYzozODgKKyMsIGZ1enp5Cittc2dpZCAiRm9yY2UgdGhlIG9yaWdpbmF0aW5nIHBvcnQgZm9yIHVwc3RyZWFtIEROUyBxdWVyaWVzLiIKK21zZ3N0ciAiVHZpbmcgYnJ1ayBhdiBvcHByaW5uZWxpZyBwb3J0IGZvciBvcHBzdHL4bXMgb3Bwc2xhZy4iCisKKyM6IG9wdGlvbi5jOjM4OQorbXNnaWQgIkRvIE5PVCByZWFkIHJlc29sdi5jb25mLiIKK21zZ3N0ciAiSUtLRSBsZXMgcmVzb2x2LmNvbmYuIgorCisjOiBvcHRpb24uYzozOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSBwYXRoIHRvIHJlc29sdi5jb25mIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJTcGVzaWZpc2VyIHN0aWVuIHRpbCByZXNvbHYuY29uZiAoc3RhbmRhcmQgZXIgJXMpLiIKKworIzogb3B0aW9uLmM6MzkxCisjLCBmdXp6eQorbXNnaWQgIlNwZWNpZnkgcGF0aCB0byBmaWxlIHdpdGggc2VydmVyPSBvcHRpb25zIgorbXNnc3RyICJTcGVzaWZpc2VyIHN0aWVuIHRpbCBQSUQgZmlsLiAoc3RhbmRhcmQgZXIgJXMpLiIKKworIzogb3B0aW9uLmM6MzkyCittc2dpZCAiU3BlY2lmeSBhZGRyZXNzKGVzKSBvZiB1cHN0cmVhbSBzZXJ2ZXJzIHdpdGggb3B0aW9uYWwgZG9tYWlucy4iCittc2dzdHIgIlNwZXNpZmlzZXIgYWRyZXNzZW4oZSkgdGlsIG9wcHN0cvhtcyB0amVuZXJlIG1lZCB2YWxnZnJpZSBkb21lbmVyLiIKKworIzogb3B0aW9uLmM6MzkzCisjLCBmdXp6eQorbXNnaWQgIlNwZWNpZnkgYWRkcmVzcyBvZiB1cHN0cmVhbSBzZXJ2ZXJzIGZvciByZXZlcnNlIGFkZHJlc3MgcXVlcmllcyIKK21zZ3N0ciAiU3Blc2lmaXNlciBhZHJlc3NlbihlKSB0aWwgb3Bwc3Ry+G1zIHRqZW5lcmUgbWVkIHZhbGdmcmllIGRvbWVuZXIuIgorCisjOiBvcHRpb24uYzozOTQKK21zZ2lkICJOZXZlciBmb3J3YXJkIHF1ZXJpZXMgdG8gc3BlY2lmaWVkIGRvbWFpbnMuIgorbXNnc3RyICJBbGRyaSB2aWRlcmVzZW5kIG9wcHNsYWcgdGlsIHNwZXNpZmlzZXJ0ZSBkb21lbmVyLiIKKworIzogb3B0aW9uLmM6Mzk1Cittc2dpZCAiU3BlY2lmeSB0aGUgZG9tYWluIHRvIGJlIGFzc2lnbmVkIGluIERIQ1AgbGVhc2VzLiIKK21zZ3N0ciAiU3Blc2lmaXNlciBkb21lbmV0IHNvbSBza2FsIHRpbGRlbGVzIGkgREhDUCBsZWllbi4iCisKKyM6IG9wdGlvbi5jOjM5NgorbXNnaWQgIlNwZWNpZnkgZGVmYXVsdCB0YXJnZXQgaW4gYW4gTVggcmVjb3JkLiIKK21zZ3N0ciAiU3Blc2lmaXNlciBkZWZhdWx0IG3lbCBpIGVuIE1YIHBvc3QuIgorCisjOiBvcHRpb24uYzozOTcKK21zZ2lkICJTcGVjaWZ5IHRpbWUtdG8tbGl2ZSBpbiBzZWNvbmRzIGZvciByZXBsaWVzIGZyb20gL2V0Yy9ob3N0cy4iCittc2dzdHIgIlNwZXNpZmlzZXIgdGltZS10by1saXZlIGkgc2VrdW5kZXIgZm9yIHN2YXIgZnJhIC9ldGMvaG9zdHMuIgorCisjOiBvcHRpb24uYzozOTgKKyMsIGZ1enp5Cittc2dpZCAiU3BlY2lmeSB0aW1lLXRvLWxpdmUgaW4gc2Vjb25kcyBmb3IgbmVnYXRpdmUgY2FjaGluZy4iCittc2dzdHIgIlNwZXNpZmlzZXIgdGltZS10by1saXZlIGkgc2VrdW5kZXIgZm9yIHN2YXIgZnJhIC9ldGMvaG9zdHMuIgorCisjOiBvcHRpb24uYzozOTkKKyMsIGZ1enp5Cittc2dpZCAiU3BlY2lmeSB0aW1lLXRvLWxpdmUgaW4gc2Vjb25kcyBmb3IgbWF4aW11bSBUVEwgdG8gc2VuZCB0byBjbGllbnRzLiIKK21zZ3N0ciAiU3Blc2lmaXNlciB0aW1lLXRvLWxpdmUgaSBzZWt1bmRlciBmb3Igc3ZhciBmcmEgL2V0Yy9ob3N0cy4iCisKKyM6IG9wdGlvbi5jOjQwMAorIywgZnV6enkKK21zZ2lkICJTcGVjaWZ5IHRpbWUtdG8tbGl2ZSBjZWlsaW5nIGZvciBjYWNoZS4iCittc2dzdHIgIlNwZXNpZmlzZXIgdGltZS10by1saXZlIGkgc2VrdW5kZXIgZm9yIHN2YXIgZnJhIC9ldGMvaG9zdHMuIgorCisjOiBvcHRpb24uYzo0MDEKKyMsIGZ1enp5Cittc2dpZCAiU3BlY2lmeSB0aW1lLXRvLWxpdmUgZmxvb3IgZm9yIGNhY2hlLiIKK21zZ3N0ciAiU3Blc2lmaXNlciB0aW1lLXRvLWxpdmUgaSBzZWt1bmRlciBmb3Igc3ZhciBmcmEgL2V0Yy9ob3N0cy4iCisKKyM6IG9wdGlvbi5jOjQwMgorIywgYy1mb3JtYXQKK21zZ2lkICJDaGFuZ2UgdG8gdGhpcyB1c2VyIGFmdGVyIHN0YXJ0dXAuIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJTa2lmdCB0aWwgZGVubmUgYnJ1a2VyIGV0dGVyIG9wcHN0YXJ0IChzdGFuZGFyZCBlciAlcykuIgorCisjOiBvcHRpb24uYzo0MDMKKyMsIGZ1enp5Cittc2dpZCAiTWFwIERIQ1AgdmVuZG9yIGNsYXNzIHRvIHRhZy4iCittc2dzdHIgIk1hcCBESENQIHByb2R1c2VudCBrbGFzc2UgdGlsIG9wc2pvbiBzZXR0LiIKKworIzogb3B0aW9uLmM6NDA0Cittc2dpZCAiRGlzcGxheSBkbnNtYXNxIHZlcnNpb24gYW5kIGNvcHlyaWdodCBpbmZvcm1hdGlvbi4iCittc2dzdHIgIlZpcyBkbnNtYXNxIHZlcnNqb24gb2cgY29weXJpZ2h0IGluZm9ybWFzam9uLiIKKworIzogb3B0aW9uLmM6NDA1Cittc2dpZCAiVHJhbnNsYXRlIElQdjQgYWRkcmVzc2VzIGZyb20gdXBzdHJlYW0gc2VydmVycy4iCittc2dzdHIgIk92ZXJzZXR0IElQdjQgYWRyZXNzZXIgZnJhIG9wcHN0cvhtcyB0amVuZXJlLiIKKworIzogb3B0aW9uLmM6NDA2Cittc2dpZCAiU3BlY2lmeSBhIFNSViByZWNvcmQuIgorbXNnc3RyICJTcGVzaWZpc2VyIGVuIFNSViBwb3N0LiIKKworIzogb3B0aW9uLmM6NDA3Cittc2dpZCAiRGlzcGxheSB0aGlzIG1lc3NhZ2UuIFVzZSAtLWhlbHAgZGhjcCBvciAtLWhlbHAgZGhjcDYgZm9yIGtub3duIERIQ1Agb3B0aW9ucy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDA4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHBhdGggb2YgUElEIGZpbGUgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIlNwZXNpZmlzZXIgc3RpZW4gdGlsIFBJRCBmaWwuIChzdGFuZGFyZCBlciAlcykuIgorCisjOiBvcHRpb24uYzo0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSBtYXhpbXVtIG51bWJlciBvZiBESENQIGxlYXNlcyAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiU3Blc2lmaXNlciBtYWtzaW11bSBhbnRhbGwgREhDUCBsZWllciAoc3RhbmRhcmQgZXIgJXMpIgorCisjOiBvcHRpb24uYzo0MTAKK21zZ2lkICJBbnN3ZXIgRE5TIHF1ZXJpZXMgYmFzZWQgb24gdGhlIGludGVyZmFjZSBhIHF1ZXJ5IHdhcyBzZW50IHRvLiIKK21zZ3N0ciAiU3ZhciBETlMgb3Bwc2xhZyBiYXNlcnQgcOUgbmV0dHZlcmtza29ydGV0IG9wcHNsYWdldCBibGUgc2VuZHQgdGlsLiIKKworIzogb3B0aW9uLmM6NDExCittc2dpZCAiU3BlY2lmeSBUWFQgRE5TIHJlY29yZC4iCittc2dzdHIgIlNwZXNpZmlzZXIgVFhUIEROUyBwb3N0LiIKKworIzogb3B0aW9uLmM6NDEyCisjLCBmdXp6eQorbXNnaWQgIlNwZWNpZnkgUFRSIEROUyByZWNvcmQuIgorbXNnc3RyICJTcGVzaWZpc2VyIFRYVCBETlMgcG9zdC4iCisKKyM6IG9wdGlvbi5jOjQxMworbXNnaWQgIkdpdmUgRE5TIG5hbWUgdG8gSVB2NCBhZGRyZXNzIG9mIGludGVyZmFjZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDE0Cittc2dpZCAiQmluZCBvbmx5IHRvIGludGVyZmFjZXMgaW4gdXNlLiIKK21zZ3N0ciAiQmluZCBrdW4gdGlsIG5ldHR2ZXJrc2tvcnQgc29tIGVyIGkgYnJ1ay4iCisKKyM6IG9wdGlvbi5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJSZWFkIERIQ1Agc3RhdGljIGhvc3QgaW5mb3JtYXRpb24gZnJvbSAlcy4iCittc2dzdHIgIkxlcyBESENQIHN0YXRpc2sgdmVydCBpbmZvcm1hc2pvbiBmcmEgJXMuIgorCisjOiBvcHRpb24uYzo0MTYKK21zZ2lkICJFbmFibGUgdGhlIERCdXMgaW50ZXJmYWNlIGZvciBzZXR0aW5nIHVwc3RyZWFtIHNlcnZlcnMsIGV0Yy4iCittc2dzdHIgIkFrdGl2ZXIgREJ1cyBpbnRlcmZhY2UgZm9yIOUgc2V0dGUgb3Bwc3Ry+G1zIHRqZW5lcmUsIG9zdi4iCisKKyM6IG9wdGlvbi5jOjQxNworbXNnaWQgIkRvIG5vdCBwcm92aWRlIERIQ1Agb24gdGhpcyBpbnRlcmZhY2UsIG9ubHkgcHJvdmlkZSBETlMuIgorbXNnc3RyICJJa2tlIGxldmVyIERIQ1AgcOUgZGV0dGUgbmV0dHZlcmtza29ydGV0LCBrdW4gbGV2ZXIgRE5TLiIKKworIzogb3B0aW9uLmM6NDE4Cittc2dpZCAiRW5hYmxlIGR5bmFtaWMgYWRkcmVzcyBhbGxvY2F0aW9uIGZvciBib290cC4iCittc2dzdHIgIkFrdGl2ZXIgZHluYW1pc2sgYWRyZXNzZSBhbGxva2VyaW5nIGZvciBib290cC4iCisKKyM6IG9wdGlvbi5jOjQxOQorIywgZnV6enkKK21zZ2lkICJNYXAgTUFDIGFkZHJlc3MgKHdpdGggd2lsZGNhcmRzKSB0byBvcHRpb24gc2V0LiIKK21zZ3N0ciAiTWFwIERIQ1AgcHJvZHVzZW50IGtsYXNzZSB0aWwgb3Bzam9uIHNldHQuIgorCisjOiBvcHRpb24uYzo0MjAKK21zZ2lkICJUcmVhdCBESENQIHJlcXVlc3RzIG9uIGFsaWFzZXMgYXMgYXJyaXZpbmcgZnJvbSBpbnRlcmZhY2UuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQyMQorbXNnaWQgIkRpc2FibGUgSUNNUCBlY2hvIGFkZHJlc3MgY2hlY2tpbmcgaW4gdGhlIERIQ1Agc2VydmVyLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MjIKK21zZ2lkICJTaGVsbCBzY3JpcHQgdG8gcnVuIG9uIERIQ1AgbGVhc2UgY3JlYXRpb24gYW5kIGRlc3RydWN0aW9uLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MjMKK21zZ2lkICJMdWEgc2NyaXB0IHRvIHJ1biBvbiBESENQIGxlYXNlIGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDI0Cittc2dpZCAiUnVuIGxlYXNlLWNoYW5nZSBzY3JpcHRzIGFzIHRoaXMgdXNlci4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDI1Cittc2dpZCAiQ2FsbCBkaGNwLXNjcmlwdCB3aXRoIGNoYW5nZXMgdG8gbG9jYWwgQVJQIHRhYmxlLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MjYKK21zZ2lkICJSZWFkIGNvbmZpZ3VyYXRpb24gZnJvbSBhbGwgdGhlIGZpbGVzIGluIHRoaXMgZGlyZWN0b3J5LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MjcKKyMsIGZ1enp5Cittc2dpZCAiTG9nIHRvIHRoaXMgc3lzbG9nIGZhY2lsaXR5IG9yIGZpbGUuIChkZWZhdWx0cyB0byBEQUVNT04pIgorbXNnc3RyICJTa2lmdCB0aWwgZGVubmUgYnJ1a2VyIGV0dGVyIG9wcHN0YXJ0IChzdGFuZGFyZCBlciAlcykuIgorCisjOiBvcHRpb24uYzo0MjgKK21zZ2lkICJEbyBub3QgdXNlIGxlYXNlZmlsZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDI5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IEROUyBxdWVyaWVzLiAoZGVmYXVsdHMgdG8gJXMpIgorbXNnc3RyICJTcGVzaWZpc2VyIG1ha3NpbXVtIGFudGFsbCBESENQIGxlaWVyIChzdGFuZGFyZCBlciAlcykiCisKKyM6IG9wdGlvbi5jOjQzMAorIywgYy1mb3JtYXQKK21zZ2lkICJDbGVhciBETlMgY2FjaGUgd2hlbiByZWxvYWRpbmcgJXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQzMQorbXNnaWQgIklnbm9yZSBob3N0bmFtZXMgcHJvdmlkZWQgYnkgREhDUCBjbGllbnRzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzIKK21zZ2lkICJEbyBOT1QgcmV1c2UgZmlsZW5hbWUgYW5kIHNlcnZlciBmaWVsZHMgZm9yIGV4dHJhIERIQ1Agb3B0aW9ucy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDMzCittc2dpZCAiRW5hYmxlIGludGVncmF0ZWQgcmVhZC1vbmx5IFRGVFAgc2VydmVyLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzQKK21zZ2lkICJFeHBvcnQgZmlsZXMgYnkgVEZUUCBvbmx5IGZyb20gdGhlIHNwZWNpZmllZCBzdWJ0cmVlLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzUKK21zZ2lkICJBZGQgY2xpZW50IElQIG9yIGhhcmR3YXJlIGFkZHJlc3MgdG8gdGZ0cC1yb290LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzYKK21zZ2lkICJBbGxvdyBhY2Nlc3Mgb25seSB0byBmaWxlcyBvd25lZCBieSB0aGUgdXNlciBydW5uaW5nIGRuc21hc3EuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQzNworbXNnaWQgIkRvIG5vdCB0ZXJtaW5hdGUgdGhlIHNlcnZpY2UgaWYgVEZUUCBkaXJlY3RvcmllcyBhcmUgaW5hY2Nlc3NpYmxlLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgVEZUUCB0cmFuc2ZlcnMgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIlNwZXNpZmlzZXIgbWFrc2ltdW0gYW50YWxsIERIQ1AgbGVpZXIgKHN0YW5kYXJkIGVyICVzKSIKKworIzogb3B0aW9uLmM6NDM5CisjLCBmdXp6eQorbXNnaWQgIk1heGltdW0gTVRVIHRvIHVzZSBmb3IgVEZUUCB0cmFuc2ZlcnMuIgorbXNnc3RyICJTcGVzaWZpc2VyIG1ha3NpbXVtIGFudGFsbCBESENQIGxlaWVyIChzdGFuZGFyZCBlciAlcykiCisKKyM6IG9wdGlvbi5jOjQ0MAorbXNnaWQgIkRpc2FibGUgdGhlIFRGVFAgYmxvY2tzaXplIGV4dGVuc2lvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQxCittc2dpZCAiQ29udmVydCBURlRQIGZpbGVuYW1lcyB0byBsb3dlcmNhc2UiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQyCittc2dpZCAiRXBoZW1lcmFsIHBvcnQgcmFuZ2UgZm9yIHVzZSBieSBURlRQIHRyYW5zZmVycy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQzCittc2dpZCAiRXh0cmEgbG9nZ2luZyBmb3IgREhDUC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQ0Cittc2dpZCAiRW5hYmxlIGFzeW5jLiBsb2dnaW5nOyBvcHRpb25hbGx5IHNldCBxdWV1ZSBsZW5ndGguIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ0NQorbXNnaWQgIlN0b3AgRE5TIHJlYmluZGluZy4gRmlsdGVyIHByaXZhdGUgSVAgcmFuZ2VzIHdoZW4gcmVzb2x2aW5nLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDYKK21zZ2lkICJBbGxvdyByZWJpbmRpbmcgb2YgMTI3LjAuMC4wLzgsIGZvciBSQkwgc2VydmVycy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQ3Cittc2dpZCAiSW5oaWJpdCBETlMtcmViaW5kIHByb3RlY3Rpb24gb24gdGhpcyBkb21haW4uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ0OAorbXNnaWQgIkFsd2F5cyBwZXJmb3JtIEROUyBxdWVyaWVzIHRvIGFsbCBzZXJ2ZXJzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDkKK21zZ2lkICJTZXQgdGFnIGlmIGNsaWVudCBpbmNsdWRlcyBtYXRjaGluZyBvcHRpb24gaW4gcmVxdWVzdC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDUwCittc2dpZCAiVXNlIGFsdGVybmF0aXZlIHBvcnRzIGZvciBESENQLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NTEKKyMsIGZ1enp5Cittc2dpZCAiU3BlY2lmeSBOQVBUUiBETlMgcmVjb3JkLiIKK21zZ3N0ciAiU3Blc2lmaXNlciBUWFQgRE5TIHBvc3QuIgorCisjOiBvcHRpb24uYzo0NTIKK21zZ2lkICJTcGVjaWZ5IGxvd2VzdCBwb3J0IGF2YWlsYWJsZSBmb3IgRE5TIHF1ZXJ5IHRyYW5zbWlzc2lvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDUzCittc2dpZCAiU3BlY2lmeSBoaWdoZXN0IHBvcnQgYXZhaWxhYmxlIGZvciBETlMgcXVlcnkgdHJhbnNtaXNzaW9uLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NTQKK21zZ2lkICJVc2Ugb25seSBmdWxseSBxdWFsaWZpZWQgZG9tYWluIG5hbWVzIGZvciBESENQIGNsaWVudHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1NQorbXNnaWQgIkdlbmVyYXRlIGhvc3RuYW1lcyBiYXNlZCBvbiBNQUMgYWRkcmVzcyBmb3IgbmFtZWxlc3MgY2xpZW50cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDU2Cittc2dpZCAiVXNlIHRoZXNlIERIQ1AgcmVsYXlzIGFzIGZ1bGwgcHJveGllcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDU3Cittc2dpZCAiUmVsYXkgREhDUCByZXF1ZXN0cyB0byBhIHJlbW90ZSBzZXJ2ZXIiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDU4Cittc2dpZCAiU3BlY2lmeSBhbGlhcyBuYW1lIGZvciBMT0NBTCBETlMgbmFtZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDU5CisjLCBmdXp6eQorbXNnaWQgIlByb21wdCB0byBzZW5kIHRvIFBYRSBjbGllbnRzLiIKK21zZ3N0ciAiU2V0dCBla3N0cmEgb3Bzam9uZXIgc29tIHNrYWwgZm9yZGVsZXMgdGlsIERIQ1Aga2xpZW50ZW5lLiIKKworIzogb3B0aW9uLmM6NDYwCittc2dpZCAiQm9vdCBzZXJ2aWNlIGZvciBQWEUgbWVudS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDYxCittc2dpZCAiQ2hlY2sgY29uZmlndXJhdGlvbiBzeW50YXguIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ2MgorbXNnaWQgIkFkZCByZXF1ZXN0b3IncyBNQUMgYWRkcmVzcyB0byBmb3J3YXJkZWQgRE5TIHF1ZXJpZXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ2MworbXNnaWQgIkFkZCBzcGVjaWZpZWQgSVAgc3VibmV0IHRvIGZvcndhcmRlZCBETlMgcXVlcmllcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDY0CisjLCBmdXp6eQorbXNnaWQgIkFkZCBjbGllbnQgaWRlbnRpZmljYXRpb24gdG8gZm9yd2FyZGVkIEROUyBxdWVyaWVzLiIKK21zZ3N0ciAiVHZpbmcgYnJ1ayBhdiBvcHByaW5uZWxpZyBwb3J0IGZvciBvcHBzdHL4bXMgb3Bwc2xhZy4iCisKKyM6IG9wdGlvbi5jOjQ2NQorIywgZnV6enkKK21zZ2lkICJQcm94eSBETlNTRUMgdmFsaWRhdGlvbiByZXN1bHRzIGZyb20gdXBzdHJlYW0gbmFtZXNlcnZlcnMuIgorbXNnc3RyICJPdmVyc2V0dCBJUHY0IGFkcmVzc2VyIGZyYSBvcHBzdHL4bXMgdGplbmVyZS4iCisKKyM6IG9wdGlvbi5jOjQ2NgorbXNnaWQgIkF0dGVtcHQgdG8gYWxsb2NhdGUgc2VxdWVudGlhbCBJUCBhZGRyZXNzZXMgdG8gREhDUCBjbGllbnRzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NjcKK21zZ2lkICJDb3B5IGNvbm5lY3Rpb24tdHJhY2sgbWFyayBmcm9tIHF1ZXJpZXMgdG8gdXBzdHJlYW0gY29ubmVjdGlvbnMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ2OAorbXNnaWQgIkFsbG93IERIQ1AgY2xpZW50cyB0byBkbyB0aGVpciBvd24gREROUyB1cGRhdGVzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NjkKK21zZ2lkICJTZW5kIHJvdXRlci1hZHZlcnRpc2VtZW50cyBmb3IgaW50ZXJmYWNlcyBkb2luZyBESENQdjYiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDcwCittc2dpZCAiU3BlY2lmeSBEVUlEX0VOLXR5cGUgREhDUHY2IHNlcnZlciBEVUlEIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ3MQorIywgZnV6enkKK21zZ2lkICJTcGVjaWZ5IGhvc3QgKEEvQUFBQSBhbmQgUFRSKSByZWNvcmRzIgorbXNnc3RyICJTcGVzaWZpc2VyIGVuIE1YIHBvc3QuIgorCisjOiBvcHRpb24uYzo0NzIKKyMsIGZ1enp5Cittc2dpZCAiU3BlY2lmeSBhcmJpdHJhcnkgRE5TIHJlc291cmNlIHJlY29yZCIKK21zZ3N0ciAiU3Blc2lmaXNlciBUWFQgRE5TIHBvc3QuIgorCisjOiBvcHRpb24uYzo0NzMKKyMsIGZ1enp5Cittc2dpZCAiQmluZCB0byBpbnRlcmZhY2VzIGluIHVzZSAtIGNoZWNrIGZvciBuZXcgaW50ZXJmYWNlcyIKK21zZ3N0ciAidWtqZW50IHRpbGtueXRuaW5nIChpbnRlcmZhY2UpICVzIgorCisjOiBvcHRpb24uYzo0NzQKK21zZ2lkICJFeHBvcnQgbG9jYWwgbmFtZXMgdG8gZ2xvYmFsIEROUyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NzUKK21zZ2lkICJEb21haW4gdG8gZXhwb3J0IHRvIGdsb2JhbCBETlMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDc2Cittc2dpZCAiU2V0IFRUTCBmb3IgYXV0aG9yaXRhdGl2ZSByZXBsaWVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ3NworbXNnaWQgIlNldCBhdXRob3JpdGF0aXZlIHpvbmUgaW5mb3JtYXRpb24iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDc4Cittc2dpZCAiU2Vjb25kYXJ5IGF1dGhvcml0YXRpdmUgbmFtZXNlcnZlcnMgZm9yIGZvcndhcmQgZG9tYWlucyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NzkKK21zZ2lkICJQZWVycyB3aGljaCBhcmUgYWxsb3dlZCB0byBkbyB6b25lIHRyYW5zZmVyIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ4MAorbXNnaWQgIlNwZWNpZnkgaXBzZXRzIHRvIHdoaWNoIG1hdGNoaW5nIGRvbWFpbnMgc2hvdWxkIGJlIGFkZGVkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ4MQorbXNnaWQgIlNwZWNpZnkgYSBkb21haW4gYW5kIGFkZHJlc3MgcmFuZ2UgZm9yIHN5bnRoZXNpc2VkIG5hbWVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ4MgorbXNnaWQgIkFjdGl2YXRlIEROU1NFQyB2YWxpZGF0aW9uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ4MworbXNnaWQgIlNwZWNpZnkgdHJ1c3QgYW5jaG9yIGtleSBkaWdlc3QuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ4NAorbXNnaWQgIkRpc2FibGUgdXBzdHJlYW0gY2hlY2tpbmcgZm9yIEROU1NFQyBkZWJ1Z2dpbmcuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ4NQorbXNnaWQgIkVuc3VyZSBhbnN3ZXJzIHdpdGhvdXQgRE5TU0VDIGFyZSBpbiB1bnNpZ25lZCB6b25lcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDg2Cittc2dpZCAiRG9uJ3QgY2hlY2sgRE5TU0VDIHNpZ25hdHVyZSB0aW1lc3RhbXBzIHVudGlsIGZpcnN0IGNhY2hlLXJlbG9hZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0ODcKK21zZ2lkICJUaW1lc3RhbXAgZmlsZSB0byB2ZXJpZnkgc3lzdGVtIGNsb2NrIGZvciBETlNTRUMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDg5Cittc2dpZCAiU3BlY2lmeSBESENQdjYgcHJlZml4IGNsYXNzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ5MQorbXNnaWQgIlNldCBNVFUsIHByaW9yaXR5LCByZXNlbmQtaW50ZXJ2YWwgYW5kIHJvdXRlci1saWZldGltZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0OTIKK21zZ2lkICJEbyBub3QgbG9nIHJvdXRpbmUgREhDUC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDkzCittc2dpZCAiRG8gbm90IGxvZyByb3V0aW5lIERIQ1B2Ni4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDk0Cittc2dpZCAiRG8gbm90IGxvZyBSQS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDk1Cittc2dpZCAiQWNjZXB0IHF1ZXJpZXMgb25seSBmcm9tIGRpcmVjdGx5LWNvbm5lY3RlZCBuZXR3b3Jrcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDk2Cittc2dpZCAiRGV0ZWN0IGFuZCByZW1vdmUgRE5TIGZvcndhcmRpbmcgbG9vcHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ5NworbXNnaWQgIklnbm9yZSBETlMgcmVzcG9uc2VzIGNvbnRhaW5pbmcgaXBhZGRyLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0OTgKK21zZ2lkICJTZXQgVFRMIGluIEROUyByZXNwb25zZXMgd2l0aCBESENQLWRlcml2ZWQgYWRkcmVzc2VzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0OTkKK21zZ2lkICJEZWxheSBESENQIHJlcGxpZXMgZm9yIGF0IGxlYXN0IG51bWJlciBvZiBzZWNvbmRzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo3MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiBkbnNtYXNxIFtvcHRpb25zXVxuIgorIlxuIgorbXNnc3RyICIiCisiQnJ1azogZG5zbWFzcSBbb3Bzam9uZXJdXG4iCisiXG4iCisKKyM6IG9wdGlvbi5jOjcwNQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2Ugc2hvcnQgb3B0aW9ucyBvbmx5IG9uIHRoZSBjb21tYW5kIGxpbmUuXG4iCittc2dzdHIgIkJydWsga29ydGUgb3Bzam9uZXIga3VuIHDlIGtvbW1hbmRvbGluamVuLlxuIgorCisjOiBvcHRpb24uYzo3MDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlZhbGlkIG9wdGlvbnMgYXJlOlxuIgorbXNnc3RyICJHeWxkaWdlIG9wc2pvbmVyIGVyIDpcbiIKKworIzogb3B0aW9uLmM6NzU0IG9wdGlvbi5jOjg2OAorIywgZnV6enkKK21zZ2lkICJiYWQgYWRkcmVzcyIKK21zZ3N0ciAibGVzICVzIC0gJWQgYWRyZXNzZXIiCisKKyM6IG9wdGlvbi5jOjc3OSBvcHRpb24uYzo3ODMKK21zZ2lkICJiYWQgcG9ydCIKK21zZ3N0ciAiZOVybGlnIHBvcnQiCisKKyM6IG9wdGlvbi5jOjc5NyBvcHRpb24uYzo4MjYgb3B0aW9uLmM6ODYxCittc2dpZCAiaW50ZXJmYWNlIGJpbmRpbmcgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo4MjEgb3B0aW9uLmM6ODU2Cittc2dpZCAiaW50ZXJmYWNlIGNhbiBvbmx5IGJlIHNwZWNpZmllZCBvbmNlIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjgzNSBvcHRpb24uYzozODAwCisjLCBmdXp6eQorbXNnaWQgImJhZCBpbnRlcmZhY2UgbmFtZSIKK21zZ3N0ciAiZOVybGlnIE1YIG5hdm4iCisKKyM6IG9wdGlvbi5jOjEwNjIKK21zZ2lkICJ1bnN1cHBvcnRlZCBlbmNhcHN1bGF0aW9uIGZvciBJUHY2IG9wdGlvbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxMDc2Cittc2dpZCAiYmFkIGRoY3Atb3B0aW9uIgorbXNnc3RyICJk5XJsaWcgZGhjcC1vcHNqb24iCisKKyM6IG9wdGlvbi5jOjExNDQKKyMsIGZ1enp5Cittc2dpZCAiYmFkIElQIGFkZHJlc3MiCittc2dzdHIgImxlcyAlcyAtICVkIGFkcmVzc2VyIgorCisjOiBvcHRpb24uYzoxMTQ3IG9wdGlvbi5jOjEyODYgb3B0aW9uLmM6MzA3MAorIywgZnV6enkKK21zZ2lkICJiYWQgSVB2NiBhZGRyZXNzIgorbXNnc3RyICJsZXMgJXMgLSAlZCBhZHJlc3NlciIKKworIzogb3B0aW9uLmM6MTI0MAorIywgZnV6enkKK21zZ2lkICJiYWQgSVB2NCBhZGRyZXNzIgorbXNnc3RyICJsZXMgJXMgLSAlZCBhZHJlc3NlciIKKworIzogb3B0aW9uLmM6MTMxMyBvcHRpb24uYzoxNDA3Cittc2dpZCAiYmFkIGRvbWFpbiBpbiBkaGNwLW9wdGlvbiIKK21zZ3N0ciAiZOVybGlnIGRvbWVuZSBpIGRoY3Atb3Bzam9uIgorCisjOiBvcHRpb24uYzoxNDQ1Cittc2dpZCAiZGhjcC1vcHRpb24gdG9vIGxvbmciCittc2dzdHIgImRoY3Atb3Bzam9uIGZvciBsYW5nIgorCisjOiBvcHRpb24uYzoxNDUyCittc2dpZCAiaWxsZWdhbCBkaGNwLW1hdGNoIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE1MTQKK21zZ2lkICJpbGxlZ2FsIHJlcGVhdGVkIGZsYWciCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTUyMgorbXNnaWQgImlsbGVnYWwgcmVwZWF0ZWQga2V5d29yZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNTkzIG9wdGlvbi5jOjQ0MzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBhY2Nlc3MgZGlyZWN0b3J5ICVzOiAlcyIKK21zZ3N0ciAia2FuIGlra2UgbGVzZSAlczogJXMiCisKKyM6IG9wdGlvbi5jOjE2MzkgdGZ0cC5jOjUzNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGFjY2VzcyAlczogJXMiCittc2dzdHIgImthbiBpa2tlIGxlc2UgJXM6ICVzIgorCisjOiBvcHRpb24uYzoxNzI3Cittc2dpZCAic2V0dGluZyBsb2cgZmFjaWxpdHkgaXMgbm90IHBvc3NpYmxlIHVuZGVyIEFuZHJvaWQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTczNgorbXNnaWQgImJhZCBsb2cgZmFjaWxpdHkiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTc4OQorbXNnaWQgImJhZCBNWCBwcmVmZXJlbmNlIgorbXNnc3RyICJk5XJsaWcgTVggcHJlZmVyYW5zZSIKKworIzogb3B0aW9uLmM6MTc5NAorbXNnaWQgImJhZCBNWCBuYW1lIgorbXNnc3RyICJk5XJsaWcgTVggbmF2biIKKworIzogb3B0aW9uLmM6MTgwOAorbXNnaWQgImJhZCBNWCB0YXJnZXQiCittc2dzdHIgImTlcmxpZyBNWCBt5WwiCisKKyM6IG9wdGlvbi5jOjE4MjAKK21zZ2lkICJjYW5ub3QgcnVuIHNjcmlwdHMgdW5kZXIgdUNsaW51eCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxODIyCittc2dpZCAicmVjb21waWxlIHdpdGggSEFWRV9TQ1JJUFQgZGVmaW5lZCB0byBlbmFibGUgbGVhc2UtY2hhbmdlIHNjcmlwdHMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTgyNgorbXNnaWQgInJlY29tcGlsZSB3aXRoIEhBVkVfTFVBU0NSSVBUIGRlZmluZWQgdG8gZW5hYmxlIEx1YSBzY3JpcHRzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjIwOTUgb3B0aW9uLmM6MjEwNiBvcHRpb24uYzoyMTQzIG9wdGlvbi5jOjIxOTkgb3B0aW9uLmM6MjQ4MgorIywgZnV6enkKK21zZ2lkICJiYWQgcHJlZml4IgorbXNnc3RyICJk5XJsaWcgcG9ydCIKKworIzogb3B0aW9uLmM6MjUwNAorbXNnaWQgInJlY29tcGlsZSB3aXRoIEhBVkVfSVBTRVQgZGVmaW5lZCB0byBlbmFibGUgaXBzZXQgZGlyZWN0aXZlcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNzEzCisjLCBmdXp6eQorbXNnaWQgImJhZCBwb3J0IHJhbmdlIgorbXNnc3RyICJk5XJsaWcgcG9ydCIKKworIzogb3B0aW9uLmM6MjczOAorbXNnaWQgImJhZCBicmlkZ2UtaW50ZXJmYWNlIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI3OTgKK21zZ2lkICJvbmx5IG9uZSB0YWcgYWxsb3dlZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyODE4IG9wdGlvbi5jOjI4MzAgb3B0aW9uLmM6MjkzOSBvcHRpb24uYzoyOTQ0IG9wdGlvbi5jOjI5ODMKK21zZ2lkICJiYWQgZGhjcC1yYW5nZSIKK21zZ3N0ciAiZOVybGlnIGRoY3Atb21y5WRlIgorCisjOiBvcHRpb24uYzoyODQ1Cittc2dpZCAiaW5jb25zaXN0ZW50IERIQ1AgcmFuZ2UiCittc2dzdHIgImlra2Uga29uc2lzdGVudCBESENQIG9tcuVkZSIKKworIzogb3B0aW9uLmM6MjkwNworbXNnaWQgInByZWZpeCBsZW5ndGggbXVzdCBiZSBleGFjdGx5IDY0IGZvciBSQSBzdWJuZXRzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5MDkKK21zZ2lkICJwcmVmaXggbGVuZ3RoIG11c3QgYmUgZXhhY3RseSA2NCBmb3Igc3VibmV0IGNvbnN0cnVjdG9ycyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyOTEzCittc2dpZCAicHJlZml4IGxlbmd0aCBtdXN0IGJlIGF0IGxlYXN0IDY0IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5MTYKKyMsIGZ1enp5Cittc2dpZCAiaW5jb25zaXN0ZW50IERIQ1B2NiByYW5nZSIKK21zZ3N0ciAiaWtrZSBrb25zaXN0ZW50IERIQ1Agb21y5WRlIgorCisjOiBvcHRpb24uYzoyOTI3Cittc2dpZCAicHJlZml4IG11c3QgYmUgemVybyB3aXRoIFwiY29uc3RydWN0b3I6XCIgYXJndW1lbnQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzA0MCBvcHRpb24uYzozMDg4CisjLCBmdXp6eQorbXNnaWQgImJhZCBoZXggY29uc3RhbnQiCittc2dzdHIgImTlcmxpZyBkaGNwLXZlcnQiCisKKyM6IG9wdGlvbi5jOjMwNjIKK21zZ2lkICJjYW5ub3QgbWF0Y2ggdGFncyBpbiAtLWRoY3AtaG9zdCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMTEwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJkdXBsaWNhdGUgZGhjcC1ob3N0IElQIGFkZHJlc3MgJXMiCittc2dzdHIgImR1Ymxpc2VydGUgSVAgYWRyZXNzZXIgaSAlcyBkaGNwLWNvbmZpZyBkaXJla3Rpdi4iCisKKyM6IG9wdGlvbi5jOjMxNjgKKyMsIGZ1enp5Cittc2dpZCAiYmFkIERIQ1AgaG9zdCBuYW1lIgorbXNnc3RyICJk5XJsaWcgTVggbmF2biIKKworIzogb3B0aW9uLmM6MzI1MAorIywgZnV6enkKK21zZ2lkICJiYWQgdGFnLWlmIgorbXNnc3RyICJk5XJsaWcgTVggbeVsIgorCisjOiBvcHRpb24uYzozNjA3IG9wdGlvbi5jOjQwMzAKK21zZ2lkICJpbnZhbGlkIHBvcnQgbnVtYmVyIgorbXNnc3RyICJ1Z3lsZGlnIHBvcnRudW1tZXIiCisKKyM6IG9wdGlvbi5jOjM2NjkKKyMsIGZ1enp5Cittc2dpZCAiYmFkIGRoY3AtcHJveHkgYWRkcmVzcyIKK21zZ3N0ciAibGVzICVzIC0gJWQgYWRyZXNzZXIiCisKKyM6IG9wdGlvbi5jOjM2OTUKKyMsIGZ1enp5Cittc2dpZCAiQmFkIGRoY3AtcmVsYXkiCittc2dzdHIgImTlcmxpZyBkaGNwLW9tcuVkZSIKKworIzogb3B0aW9uLmM6MzczNgorbXNnaWQgImJhZCBSQS1wYXJhbXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzc0NQorbXNnaWQgImJhZCBEVUlEIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM3ODcKKyMsIGZ1enp5Cittc2dpZCAiaW52YWxpZCBhbGlhcyByYW5nZSIKK21zZ3N0ciAidWd5bGRpZyB2ZWt0IgorCisjOiBvcHRpb24uYzozODQxIG9wdGlvbi5jOjM4NTMKK21zZ2lkICJiYWQgQ05BTUUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzg1NworbXNnaWQgImR1cGxpY2F0ZSBDTkFNRSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozODgwCisjLCBmdXp6eQorbXNnaWQgImJhZCBQVFIgcmVjb3JkIgorbXNnc3RyICJk5XJsaWcgU1JWIHBvc3QiCisKKyM6IG9wdGlvbi5jOjM5MTEKKyMsIGZ1enp5Cittc2dpZCAiYmFkIE5BUFRSIHJlY29yZCIKK21zZ3N0ciAiZOVybGlnIFNSViBwb3N0IgorCisjOiBvcHRpb24uYzozOTQ1CisjLCBmdXp6eQorbXNnaWQgImJhZCBSUiByZWNvcmQiCittc2dzdHIgImTlcmxpZyBTUlYgcG9zdCIKKworIzogb3B0aW9uLmM6Mzk3NQorbXNnaWQgImJhZCBUWFQgcmVjb3JkIgorbXNnc3RyICJk5XJsaWcgVFhUIHBvc3QiCisKKyM6IG9wdGlvbi5jOjQwMTYKK21zZ2lkICJiYWQgU1JWIHJlY29yZCIKK21zZ3N0ciAiZOVybGlnIFNSViBwb3N0IgorCisjOiBvcHRpb24uYzo0MDIzCittc2dpZCAiYmFkIFNSViB0YXJnZXQiCittc2dzdHIgImTlcmxpZyBTUlYgbeVsIgorCisjOiBvcHRpb24uYzo0MDM3Cittc2dpZCAiaW52YWxpZCBwcmlvcml0eSIKK21zZ3N0ciAidWd5bGRpZyBwcmlvcml0ZXQiCisKKyM6IG9wdGlvbi5jOjQwNDAKK21zZ2lkICJpbnZhbGlkIHdlaWdodCIKK21zZ3N0ciAidWd5bGRpZyB2ZWt0IgorCisjOiBvcHRpb24uYzo0MDY0CisjLCBmdXp6eQorbXNnaWQgIkJhZCBob3N0LXJlY29yZCIKK21zZ3N0ciAiZOVybGlnIFNSViBwb3N0IgorCisjOiBvcHRpb24uYzo0MDg4CisjLCBmdXp6eQorbXNnaWQgIkJhZCBuYW1lIGluIGhvc3QtcmVjb3JkIgorbXNnc3RyICJk5XJsaWcgbmF2biBpICVzIgorCisjOiBvcHRpb24uYzo0MTUzCisjLCBmdXp6eQorbXNnaWQgImJhZCB0cnVzdCBhbmNob3IiCittc2dzdHIgImTlcmxpZyBwb3J0IgorCisjOiBvcHRpb24uYzo0MTY3Cittc2dpZCAiYmFkIEhFWCBpbiB0cnVzdCBhbmNob3IiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDE3NworbXNnaWQgInVuc3VwcG9ydGVkIG9wdGlvbiAoY2hlY2sgdGhhdCBkbnNtYXNxIHdhcyBjb21waWxlZCB3aXRoIERIQ1AvVEZUUC9ETlNTRUMvREJ1cyBzdXBwb3J0KSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MjM3Cittc2dpZCAibWlzc2luZyBcIiIKK21zZ3N0ciAibWFuZ2xlciBcIiIKKworIzogb3B0aW9uLmM6NDI5NAorbXNnaWQgImJhZCBvcHRpb24iCittc2dzdHIgImTlcmxpZyBvcHNqb24iCisKKyM6IG9wdGlvbi5jOjQyOTYKK21zZ2lkICJleHRyYW5lb3VzIHBhcmFtZXRlciIKK21zZ3N0ciAib3ZlcmZs+GRpZyBwYXJhbWV0ZXIiCisKKyM6IG9wdGlvbi5jOjQyOTgKK21zZ2lkICJtaXNzaW5nIHBhcmFtZXRlciIKK21zZ3N0ciAibWFuZ2xlciBwYXJhbWV0ZXIiCisKKyM6IG9wdGlvbi5jOjQzMDAKKyMsIGZ1enp5Cittc2dpZCAiaWxsZWdhbCBvcHRpb24iCittc2dzdHIgImTlcmxpZyBvcHNqb24iCisKKyM6IG9wdGlvbi5jOjQzMDcKK21zZ2lkICJlcnJvciIKK21zZ3N0ciAiZmVpbCIKKworIzogb3B0aW9uLmM6NDMwOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIGF0IGxpbmUgJWQgb2YgJXMiCittc2dzdHIgIiVzIHDlIGxpbmplICVkIGF2ICUlcyIKKworIzogb3B0aW9uLmM6NDMyNCBvcHRpb24uYzo0NTcxIG9wdGlvbi5jOjQ2MDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInJlYWQgJXMiCittc2dzdHIgImxlc2VyICVzIgorCisjOiBvcHRpb24uYzo0Mzg3IG9wdGlvbi5jOjQ1MTAgdGZ0cC5jOjcxNQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAlczogJXMiCittc2dzdHIgImthbiBpa2tlIGxlc2UgJXM6ICVzIgorCisjOiBvcHRpb24uYzo0Njc2Cittc2dpZCAianVuayBmb3VuZCBpbiBjb21tYW5kIGxpbmUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDcxMQorIywgYy1mb3JtYXQKK21zZ2lkICJEbnNtYXNxIHZlcnNpb24gJXMgICVzXG4iCittc2dzdHIgIkRuc21hc3EgdmVyc2pvbiAlcyAlc1xuIgorCisjOiBvcHRpb24uYzo0NzEyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiQ29tcGlsZSB0aW1lIG9wdGlvbnM6ICVzXG4iCisiXG4iCittc2dzdHIgIiIKKyJLb21waWxlcmluZ3NvcHNqb25lciAlc1xuIgorIlxuIgorCisjOiBvcHRpb24uYzo0NzEzCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLlxuIgorbXNnc3RyICJEZW5uZSBwcm9ncmFtdmFyZW4ga29tbWVyIG1lZCBBQlNPTFVUVCBJTkdFTiBHQVJBTlRJLlxuIgorCisjOiBvcHRpb24uYzo0NzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkRuc21hc3EgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXRcbiIKK21zZ3N0ciAiRE5zbWFzcSBlciBmcmkgcHJvZ3JhbXZhcmUsIGR1IGVyIHZlbGtvbW1lbiB0aWwg5SByZWRpc3RyaWJ1ZXJlIGRlblxuIgorCisjOiBvcHRpb24uYzo0NzE1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIgb3IgMy5cbiIKK21zZ3N0ciAidW5kZXIgdmlsa+VyZW5lIGdpdHQgaSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2pvbiAyLlxuIgorCisjOiBvcHRpb24uYzo0NzI2Cittc2dpZCAidHJ5IC0taGVscCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NzI4Cittc2dpZCAidHJ5IC13IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ3MzAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb21tYW5kIGxpbmUgb3B0aW9uczogJXMiCittc2dzdHIgImTlcmxpZ2Uga29tbWFuZGxpbmplIG9wc2pvbmVyOiAlcy4iCisKKyM6IG9wdGlvbi5jOjQ3OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ05BTUUgbG9vcCBpbnZvbHZpbmcgJXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDgzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZ2V0IGhvc3QtbmFtZTogJXMiCittc2dzdHIgImtsYXJlciBpa2tlIOUgZuUgdmVydHNuYXZuOiAlcyIKKworIzogb3B0aW9uLmM6NDg2MgorbXNnaWQgIm9ubHkgb25lIHJlc29sdi5jb25mIGZpbGUgYWxsb3dlZCBpbiBuby1wb2xsIG1vZGUuIgorbXNnc3RyICJrdW4gZW4gcmVzb2x2LmNvbmYgZmlsIHRpbGxhdCBpIG5vLXBvbGwgbW9kdXMuIgorCisjOiBvcHRpb24uYzo0ODcyCittc2dpZCAibXVzdCBoYXZlIGV4YWN0bHkgb25lIHJlc29sdi5jb25mIHRvIHJlYWQgZG9tYWluIGZyb20uIgorbXNnc3RyICJt5SBoYSBu+Hlha3RpZyBlbiByZXNvbHYuY29uZiDlIGxlc2UgZG9tZW5lIGZyYS4iCisKKyM6IG9wdGlvbi5jOjQ4NzUgbmV0d29yay5jOjE2MTIgZGhjcC5jOjgxNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgJXM6ICVzIgorbXNnc3RyICJmZWlsZXQg5SBsZXNlICVzOiAlcyIKKworIzogb3B0aW9uLmM6NDg5MgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzZWFyY2ggZGlyZWN0aXZlIGZvdW5kIGluICVzIgorbXNnc3RyICJpbnRldCBz+GtlIGRpcmVrdGl2IGZ1bm5ldCBpICVzIgorCisjOiBvcHRpb24uYzo0OTEzCittc2dpZCAidGhlcmUgbXVzdCBiZSBhIGRlZmF1bHQgZG9tYWluIHdoZW4gLS1kaGNwLWZxZG4gaXMgc2V0IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ5MjIKK21zZ2lkICJzeW50YXggY2hlY2sgT0siCittc2dzdHIgIiIKKworIzogZm9yd2FyZC5jOjEwMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNlbmQgcGFja2V0OiAlcyIKK21zZ3N0ciAiZmVpbGV0IOUgbHl0dGUgcOUgc29ja2V0OiAlcyIKKworIzogZm9yd2FyZC5jOjU5NworbXNnaWQgImRpc2NhcmRpbmcgRE5TIHJlcGx5OiBzdWJuZXQgb3B0aW9uIG1pc21hdGNoIgorbXNnc3RyICIiCisKKyM6IGZvcndhcmQuYzo2NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibmFtZXNlcnZlciAlcyByZWZ1c2VkIHRvIGRvIGEgcmVjdXJzaXZlIHF1ZXJ5IgorbXNnc3RyICJuYXZuZXRqZW5lciAlcyBuZWt0ZXQg5SBnavhyZSBldCByZWt1cnNpdnQgb3Bwc2xhZyIKKworIzogZm9yd2FyZC5jOjY4MworIywgYy1mb3JtYXQKK21zZ2lkICJwb3NzaWJsZSBETlMtcmViaW5kIGF0dGFjayBkZXRlY3RlZDogJXMiCittc2dzdHIgIiIKKworIzogZm9yd2FyZC5jOjEyNDQgZm9yd2FyZC5jOjE2ODEKK21zZ2lkICJJZ25vcmluZyBxdWVyeSBmcm9tIG5vbi1sb2NhbCBuZXR3b3JrIgorbXNnc3RyICIiCisKKyM6IGZvcndhcmQuYzoyMTY2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IEROUyBxdWVyaWVzIHJlYWNoZWQgKG1heDogJWQpIgorbXNnc3RyICJTcGVzaWZpc2VyIG1ha3NpbXVtIGFudGFsbCBESENQIGxlaWVyIChzdGFuZGFyZCBlciAlcykiCisKKyM6IG5ldHdvcmsuYzo3MjAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgbGlzdGVuaW5nIHNvY2tldCBmb3IgJXM6ICVzIgorbXNnc3RyICJmZWlsZXQg5SBsYWdlIGx5dHRlIHNvY2tldDogJXMiCisKKyM6IG5ldHdvcmsuYzoxMDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkxPVUQgV0FSTklORzogbGlzdGVuaW5nIG9uICVzIG1heSBhY2NlcHQgcmVxdWVzdHMgdmlhIGludGVyZmFjZXMgb3RoZXIgdGhhbiAlcyIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6MTAzOAorbXNnaWQgIkxPVUQgV0FSTklORzogdXNlIC0tYmluZC1keW5hbWljIHJhdGhlciB0aGFuIC0tYmluZC1pbnRlcmZhY2VzIHRvIGF2b2lkIEROUyBhbXBsaWZpY2F0aW9uIGF0dGFja3MgdmlhIHRoZXNlIGludGVyZmFjZShzKSIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6MTA0NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogdXNpbmcgaW50ZXJmYWNlICVzIGluc3RlYWQiCittc2dzdHIgImFkdmFyc2VsOiBuZXR0dmVya3Nrb3J0ICVzIGVrc2lzdGVyZXIgaWtrZSBmb3IgdGlkZW4iCisKKyM6IG5ldHdvcmsuYzoxMDU2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBubyBhZGRyZXNzZXMgZm91bmQgZm9yIGludGVyZmFjZSAlcyIKK21zZ3N0ciAiYmVueXR0ZXIgbG9rYWxlIGFkcmVzc2VyIGt1biBmb3IgJXMgJXMiCisKKyM6IG5ldHdvcmsuYzoxMTE0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnRlcmZhY2UgJXMgZmFpbGVkIHRvIGpvaW4gREhDUHY2IG11bHRpY2FzdCBncm91cDogJXMiCittc2dzdHIgImZlaWxldCDlIGJpbmRlIERIQ1AgdGplbmVyIHNvY2tldDogJXMiCisKKyM6IG5ldHdvcmsuYzoxMTE5Cittc2dpZCAidHJ5IGluY3JlYXNpbmcgL3Byb2Mvc3lzL25ldC9jb3JlL29wdG1lbV9tYXgiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjEzMjIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBiaW5kIHNlcnZlciBzb2NrZXQgZm9yICVzOiAlcyIKK21zZ3N0ciAiZmVpbGV0IOUgYmluZGUgbHl0dGUgc29ja2V0IGZvciAlczogJXMiCisKKyM6IG5ldHdvcmsuYzoxNTE3CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIG5hbWVzZXJ2ZXIgJXMgLSBsb2NhbCBpbnRlcmZhY2UiCittc2dzdHIgImlnbm9yZXJlciBuYXZuZXRqZW5lciAlcyAtIGxva2FsIHRpbGtueXRuaW5nIgorCisjOiBuZXR3b3JrLmM6MTUyOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgbmFtZXNlcnZlciAlcyAtIGNhbm5vdCBtYWtlL2JpbmQgc29ja2V0OiAlcyIKK21zZ3N0ciAiaWdub3JlcmVyIG5hdm5ldGplbmVyICVzIC0ga2FuIGlra2UgbGFnZS9kaW5kZSBzb2NrZXQ6ICVzIgorCisjOiBuZXR3b3JrLmM6MTU0OAorbXNnaWQgIihubyBETlNTRUMpIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxNTUxCittc2dpZCAidW5xdWFsaWZpZWQiCittc2dzdHIgImlra2Uga3ZhbGlmaXNlcnQiCisKKyM6IG5ldHdvcmsuYzoxNTUxCittc2dpZCAibmFtZXMiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjE1NTMKK21zZ2lkICJkZWZhdWx0IgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxNTU1Cittc2dpZCAiZG9tYWluIgorbXNnc3RyICJkb21lbmUiCisKKyM6IG5ldHdvcmsuYzoxNTYxCisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIGxvY2FsIGFkZHJlc3NlcyBvbmx5IGZvciAlcyAlcyIKK21zZ3N0ciAiYmVueXR0ZXIgbG9rYWxlIGFkcmVzc2VyIGt1biBmb3IgJXMgJXMiCisKKyM6IG5ldHdvcmsuYzoxNTY0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyBzdGFuZGFyZCBuYW1lc2VydmVycyBmb3IgJXMgJXMiCittc2dzdHIgImJlbnl0dGVyIG5hdm5ldGplbmVyICVzIyVkIGZvciAlcyAlcyIKKworIzogbmV0d29yay5jOjE1NjYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIG5hbWVzZXJ2ZXIgJXMjJWQgZm9yICVzICVzICVzIgorbXNnc3RyICJiZW55dHRlciBuYXZuZXRqZW5lciAlcyMlZCBmb3IgJXMgJXMiCisKKyM6IG5ldHdvcmsuYzoxNTcwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJOT1QgdXNpbmcgbmFtZXNlcnZlciAlcyMlZCAtIHF1ZXJ5IGxvb3AgZGV0ZWN0ZWQiCittc2dzdHIgImJlbnl0dGVyIG5hdm5ldGplbmVyICVzIyVkIGZvciAlcyAlcyIKKworIzogbmV0d29yay5jOjE1NzMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIG5hbWVzZXJ2ZXIgJXMjJWQodmlhICVzKSIKK21zZ3N0ciAiYmVueXR0ZXIgbmF2bmV0amVuZXIgJXMjJWQiCisKKyM6IG5ldHdvcmsuYzoxNTc1CisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIG5hbWVzZXJ2ZXIgJXMjJWQiCittc2dzdHIgImJlbnl0dGVyIG5hdm5ldGplbmVyICVzIyVkIgorCisjOiBuZXR3b3JrLmM6MTU4MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgJWQgbW9yZSBsb2NhbCBhZGRyZXNzZXMiCittc2dzdHIgImJlbnl0dGVyIG5hdm5ldGplbmVyICVzIyVkIgorCisjOiBuZXR3b3JrLmM6MTU4MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgJWQgbW9yZSBuYW1lc2VydmVycyIKK21zZ3N0ciAiYmVueXR0ZXIgbmF2bmV0amVuZXIgJXMjJWQiCisKKyM6IGRuc21hc3EuYzoxNjYKK21zZ2lkICJkaGNwLWhvc3RzZGlyLCBkaGNwLW9wdHNkaXIgYW5kIGhvc3RzZGlyIGFyZSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0iCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjE4MQorbXNnaWQgIm5vIHJvb3QgdHJ1c3QgYW5jaG9yIHByb3ZpZGVkIGZvciBETlNTRUMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjE4NAorbXNnaWQgImNhbm5vdCByZWR1Y2UgY2FjaGUgc2l6ZSBmcm9tIGRlZmF1bHQgd2hlbiBETlNTRUMgZW5hYmxlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTg2CisjLCBmdXp6eQorbXNnaWQgIkROU1NFQyBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9ETlNTRUMgaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICJEQnVzIGlra2UgdGlsZ2plbmdlbGlnOiBzZXR0IEhBVkVfREJVUyBpIHNyYy9jb25maWcuaCIKKworIzogZG5zbWFzcS5jOjE5MgorIywgZnV6enkKK21zZ2lkICJURlRQIHNlcnZlciBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9URlRQIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAiREJ1cyBpa2tlIHRpbGdqZW5nZWxpZzogc2V0dCBIQVZFX0RCVVMgaSBzcmMvY29uZmlnLmgiCisKKyM6IGRuc21hc3EuYzoxOTcKK21zZ2lkICJjYW5ub3QgdXNlIC0tY29ubnRyYWNrIEFORCAtLXF1ZXJ5LXBvcnQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjIwMAorIywgZnV6enkKK21zZ2lkICJjb25udHJhY2sgc3VwcG9ydCBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9DT05OVFJBQ0sgaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICJEQnVzIGlra2UgdGlsZ2plbmdlbGlnOiBzZXR0IEhBVkVfREJVUyBpIHNyYy9jb25maWcuaCIKKworIzogZG5zbWFzcS5jOjIwNQorbXNnaWQgImFzeW5jaHJvbm91cyBsb2dnaW5nIGlzIG5vdCBhdmFpbGFibGUgdW5kZXIgU29sYXJpcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MjEwCittc2dpZCAiYXN5bmNocm9ub3VzIGxvZ2dpbmcgaXMgbm90IGF2YWlsYWJsZSB1bmRlciBBbmRyb2lkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoyMTUKKyMsIGZ1enp5Cittc2dpZCAiYXV0aG9yaXRhdGl2ZSBETlMgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfQVVUSCBpbiBzcmMvY29uZmlnLmgiCittc2dzdHIgIkRCdXMgaWtrZSB0aWxnamVuZ2VsaWc6IHNldHQgSEFWRV9EQlVTIGkgc3JjL2NvbmZpZy5oIgorCisjOiBkbnNtYXNxLmM6MjIwCisjLCBmdXp6eQorbXNnaWQgImxvb3AgZGV0ZWN0aW9uIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0xPT1AgaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICJEQnVzIGlra2UgdGlsZ2plbmdlbGlnOiBzZXR0IEhBVkVfREJVUyBpIHNyYy9jb25maWcuaCIKKworIzogZG5zbWFzcS5jOjIyNworbXNnaWQgIm1heF9wb3J0IGNhbm5vdCBiZSBzbWFsbGVyIHRoYW4gbWluX3BvcnQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjIzNAorbXNnaWQgInpvbmUgc2VyaWFsIG11c3QgYmUgY29uZmlndXJlZCBpbiAtLWF1dGgtc29hIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoyNTIKK21zZ2lkICJkaGNwLXJhbmdlIGNvbnN0cnVjdG9yIG5vdCBhdmFpbGFibGUgb24gdGhpcyBwbGF0Zm9ybSIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6Mjk4Cittc2dpZCAiY2Fubm90IHNldCAtLWJpbmQtaW50ZXJmYWNlcyBhbmQgLS1iaW5kLWR5bmFtaWMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluZCBsaXN0IG9mIGludGVyZmFjZXM6ICVzIgorbXNnc3RyICJmZWlsZXQg5SBmaW5uZSBsaXN0ZSBhdiB0aWxrbnl0bmluZ2VyIChpbnRlcmZhY2VzKTogJXMiCisKKyM6IGRuc21hc3EuYzozMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBpbnRlcmZhY2UgJXMiCittc2dzdHIgInVramVudCB0aWxrbnl0bmluZyAoaW50ZXJmYWNlKSAlcyIKKworIzogZG5zbWFzcS5jOjM3NCBkbnNtYXNxLmM6MTAzNworIywgYy1mb3JtYXQKK21zZ2lkICJEQnVzIGVycm9yOiAlcyIKK21zZ3N0ciAiREJ1cyBmZWlsOiAlcyIKKworIzogZG5zbWFzcS5jOjM3NworbXNnaWQgIkRCdXMgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfREJVUyBpbiBzcmMvY29uZmlnLmgiCittc2dzdHIgIkRCdXMgaWtrZSB0aWxnamVuZ2VsaWc6IHNldHQgSEFWRV9EQlVTIGkgc3JjL2NvbmZpZy5oIgorCisjOiBkbnNtYXNxLmM6NDA1CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdXNlciBvciBncm91cDogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjQ2MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hkaXIgdG8gZmlsZXN5c3RlbSByb290OiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzE2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJzdGFydGVkLCB2ZXJzaW9uICVzIEROUyBkaXNhYmxlZCIKK21zZ3N0ciAic3RhcnRldCwgdmVyc2pvbiAlcyBtZWxsb21sYWdlciBkZWFrdGl2ZXJ0IgorCisjOiBkbnNtYXNxLmM6NzIwCisjLCBjLWZvcm1hdAorbXNnaWQgInN0YXJ0ZWQsIHZlcnNpb24gJXMgY2FjaGVzaXplICVkIgorbXNnc3RyICJzdGFydGV0LCB2ZXJzam9uICVzIG1lbGxvbWxhZ2VyIHN0+HJyZWxzZSAlZCIKKworIzogZG5zbWFzcS5jOjcyMgorIywgYy1mb3JtYXQKK21zZ2lkICJzdGFydGVkLCB2ZXJzaW9uICVzIGNhY2hlIGRpc2FibGVkIgorbXNnc3RyICJzdGFydGV0LCB2ZXJzam9uICVzIG1lbGxvbWxhZ2VyIGRlYWt0aXZlcnQiCisKKyM6IGRuc21hc3EuYzo3MjUKK21zZ2lkICJETlMgc2VydmljZSBsaW1pdGVkIHRvIGxvY2FsIHN1Ym5ldHMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjcyOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb21waWxlIHRpbWUgb3B0aW9uczogJXMiCittc2dzdHIgImtvbXBpbGVyaW5ncyBvcHNqb25lcjogJXMiCisKKyM6IGRuc21hc3EuYzo3MzQKK21zZ2lkICJEQnVzIHN1cHBvcnQgZW5hYmxlZDogY29ubmVjdGVkIHRvIHN5c3RlbSBidXMiCittc2dzdHIgIkRCdXMgc3T4dHRlIGFrdGl2ZXJ0OiBrb2JsZXQgdGlsIHN5c3RlbSBidXNzIgorCisjOiBkbnNtYXNxLmM6NzM2Cittc2dpZCAiREJ1cyBzdXBwb3J0IGVuYWJsZWQ6IGJ1cyBjb25uZWN0aW9uIHBlbmRpbmciCittc2dzdHIgIkRCdXMgc3T4dHRlIGFrdGl2ZXJ0OiBhdnZlbnRlciBidXNzIHRpbGtvYmxpbmciCisKKyM6IGRuc21hc3EuYzo3NTQKK21zZ2lkICJETlNTRUMgdmFsaWRhdGlvbiBlbmFibGVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3NTgKK21zZ2lkICJETlNTRUMgc2lnbmF0dXJlIHRpbWVzdGFtcHMgbm90IGNoZWNrZWQgdW50aWwgZmlyc3QgY2FjaGUgcmVsb2FkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3NjEKK21zZ2lkICJETlNTRUMgc2lnbmF0dXJlIHRpbWVzdGFtcHMgbm90IGNoZWNrZWQgdW50aWwgc3lzdGVtIHRpbWUgdmFsaWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjc2NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogZmFpbGVkIHRvIGNoYW5nZSBvd25lciBvZiAlczogJXMiCittc2dzdHIgImZlaWxldCDlIGxhc3RlIG5hdm4gZnJhICVzOiAlcyIKKworIzogZG5zbWFzcS5jOjc3MAorbXNnaWQgInNldHRpbmcgLS1iaW5kLWludGVyZmFjZXMgb3B0aW9uIGJlY2F1c2Ugb2YgT1MgbGltaXRhdGlvbnMiCittc2dzdHIgInNldHRlciAtLWJpbmQtaW50ZXJmYWNlcyBvcHNqb24gcOUgZ3J1bm4gYXYgT1MgYmVncmVuc25pbmdlciIKKworIzogZG5zbWFzcS5jOjc4MgorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBpbnRlcmZhY2UgJXMgZG9lcyBub3QgY3VycmVudGx5IGV4aXN0IgorbXNnc3RyICJhZHZhcnNlbDogbmV0dHZlcmtza29ydCAlcyBla3Npc3RlcmVyIGlra2UgZm9yIHRpZGVuIgorCisjOiBkbnNtYXNxLmM6Nzg3Cittc2dpZCAid2FybmluZzogaWdub3JpbmcgcmVzb2x2LWZpbGUgZmxhZyBiZWNhdXNlIG5vLXJlc29sdiBpcyBzZXQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjc5MAorIywgZnV6enkKK21zZ2lkICJ3YXJuaW5nOiBubyB1cHN0cmVhbSBzZXJ2ZXJzIGNvbmZpZ3VyZWQiCittc2dzdHIgInNldHRlciBvcHBzdHL4bXMgdGplbmVyIGZyYSBEQnVzIgorCisjOiBkbnNtYXNxLmM6Nzk0CisjLCBjLWZvcm1hdAorbXNnaWQgImFzeW5jaHJvbm91cyBsb2dnaW5nIGVuYWJsZWQsIHF1ZXVlIGxpbWl0IGlzICVkIG1lc3NhZ2VzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo4MTUKK21zZ2lkICJJUHY2IHJvdXRlciBhZHZlcnRpc2VtZW50IGVuYWJsZWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjgyMAorIywgYy1mb3JtYXQKK21zZ2lkICJESENQLCBzb2NrZXRzIGJvdW5kIGV4Y2x1c2l2ZWx5IHRvIGludGVyZmFjZSAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6ODM0Cittc2dpZCAicm9vdCBpcyAiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjgzNAorIywgZnV6enkKK21zZ2lkICJlbmFibGVkIgorbXNnc3RyICJkZWFrdGl2ZXJ0IgorCisjOiBkbnNtYXNxLmM6ODM2Cittc2dpZCAic2VjdXJlIG1vZGUiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjgzOQorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiAlcyBpbmFjY2Vzc2libGUiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjg0MworIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBURlRQIGRpcmVjdG9yeSAlcyBpbmFjY2Vzc2libGUiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjg2OQorIywgYy1mb3JtYXQKK21zZ2lkICJyZXN0cmljdGluZyBtYXhpbXVtIHNpbXVsdGFuZW91cyBURlRQIHRyYW5zZmVycyB0byAlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTAzOQorbXNnaWQgImNvbm5lY3RlZCB0byBzeXN0ZW0gREJ1cyIKK21zZ3N0ciAidGlsa29ibGV0IHRpbCBzeXN0ZW0gREJ1cyIKKworIzogZG5zbWFzcS5jOjExODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZvcmsgaW50byBiYWNrZ3JvdW5kOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTE5MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBoZWxwZXI6ICVzIgorbXNnc3RyICJmZWlsZXQg5SBsZXNlICVzOiAlcyIKKworIzogZG5zbWFzcS5jOjExOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAic2V0dGluZyBjYXBhYmlsaXRpZXMgZmFpbGVkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTE5OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNoYW5nZSB1c2VyLWlkIHRvICVzOiAlcyIKK21zZ3N0ciAiZmVpbGV0IOUgbGFzdGUgbmF2biBmcmEgJXM6ICVzIgorCisjOiBkbnNtYXNxLmM6MTIwMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNoYW5nZSBncm91cC1pZCB0byAlczogJXMiCittc2dzdHIgImZlaWxldCDlIGxhc3RlIG5hdm4gZnJhICVzOiAlcyIKKworIzogZG5zbWFzcS5jOjEyMDQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuIHBpZGZpbGUgJXM6ICVzIgorbXNnc3RyICJmZWlsZXQg5SBsZXNlICVzOiAlcyIKKworIzogZG5zbWFzcS5jOjEyMDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuIGxvZyAlczogJXMiCittc2dzdHIgImthbiBpa2tlIOVwbmUgJXM6JXMiCisKKyM6IGRuc21hc3EuYzoxMjEwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBMdWEgc2NyaXB0OiAlcyIKK21zZ3N0ciAiZmVpbGV0IOUgbGFzdGUgJXM6ICVzIgorCisjOiBkbnNtYXNxLmM6MTIxMworIywgYy1mb3JtYXQKK21zZ2lkICJURlRQIGRpcmVjdG9yeSAlcyBpbmFjY2Vzc2libGU6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxMjE2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIHRpbWVzdGFtcCBmaWxlICVzOiAlcyIKK21zZ3N0ciAia2FuIGlra2Ug5XBuZSBlbGxlciBsYWdlIGxlaWUgZmlsOiAlcyIKKworIzogZG5zbWFzcS5jOjEyMzkKK21zZ2lkICJub3cgY2hlY2tpbmcgRE5TU0VDIHNpZ25hdHVyZSB0aW1lc3RhbXBzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxMzA3CisjLCBjLWZvcm1hdAorbXNnaWQgInNjcmlwdCBwcm9jZXNzIGtpbGxlZCBieSBzaWduYWwgJWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjEzMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAic2NyaXB0IHByb2Nlc3MgZXhpdGVkIHdpdGggc3RhdHVzICVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxMzE1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZXhlY3V0ZSAlczogJXMiCittc2dzdHIgImZlaWxldCDlIGblIHRpbGdhbmcgdGlsICVzOiAlcyIKKworIzogZG5zbWFzcS5jOjEzNzkgZG5zc2VjLmM6NDc5IGRuc3NlYy5jOjUyNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHVwZGF0ZSBtdGltZSBvbiAlczogJXMiCittc2dzdHIgImZlaWxldCDlIGxlc2UgJXM6ICVzIgorCisjOiBkbnNtYXNxLmM6MTM4NgorbXNnaWQgImV4aXRpbmcgb24gcmVjZWlwdCBvZiBTSUdURVJNIgorbXNnc3RyICJhdnNsdXR0ZXIgZXR0ZXIgbW90dGFrIGF2IFNJR1RFUk0iCisKKyM6IGRuc21hc3EuYzoxNDE0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYWNjZXNzICVzOiAlcyIKK21zZ3N0ciAiZmVpbGV0IOUgZuUgdGlsZ2FuZyB0aWwgJXM6ICVzIgorCisjOiBkbnNtYXNxLmM6MTQ0NAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkaW5nICVzIgorbXNnc3RyICJsZXNlciAlcyIKKworIzogZG5zbWFzcS5jOjE0NTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm5vIHNlcnZlcnMgZm91bmQgaW4gJXMsIHdpbGwgcmV0cnkiCittc2dzdHIgImludGV0IHP4a2UgZGlyZWt0aXYgZnVubmV0IGkgJXMiCisKKyM6IGRoY3AuYzo1MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIERIQ1Agc29ja2V0OiAlcyIKK21zZ3N0ciAia2FuIGlra2UgbGFnZSBESENQIHNvY2tldDogJXMiCisKKyM6IGRoY3AuYzo2OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2V0IG9wdGlvbnMgb24gREhDUCBzb2NrZXQ6ICVzIgorbXNnc3RyICJmZWlsZXQg5SBzZXR0ZSBvcHNqb25lciBw5SBESENQIHNvY2tldDogJXMiCisKKyM6IGRoY3AuYzo4OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNldCBTT19SRVVTRXtBRERSfFBPUlR9IG9uIERIQ1Agc29ja2V0OiAlcyIKK21zZ3N0ciAiZmVpbGV0IOUgc2V0dGUgU09fUkVVU0VBRERSIHDlIERIQ1Agc29ja2V0OiAlcyIKKworIzogZGhjcC5jOjEwMQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYmluZCBESENQIHNlcnZlciBzb2NrZXQ6ICVzIgorbXNnc3RyICJmZWlsZXQg5SBiaW5kZSBESENQIHRqZW5lciBzb2NrZXQ6ICVzIgorCisjOiBkaGNwLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgSUNNUCByYXcgc29ja2V0OiAlcy4iCittc2dzdHIgImthbiBpa2tlIGxhZ2UgSUNNUCByYXcgc29ja2V0OiAlcyIKKworIzogZGhjcC5jOjI1MiBkaGNwNi5jOjE3MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBpbnRlcmZhY2UgJXMgaW4gYnJpZGdlLWludGVyZmFjZSIKK21zZ3N0ciAidWtqZW50IHRpbGtueXRuaW5nIChpbnRlcmZhY2UpICVzIgorCisjOiBkaGNwLmM6MjkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcGFja2V0IHJlY2VpdmVkIG9uICVzIHdoaWNoIGhhcyBubyBhZGRyZXNzIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzo0MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQVJQLWNhY2hlIGluamVjdGlvbiBmYWlsZWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzo0NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igc2VuZGluZyBESENQIHBhY2tldCB0byAlczogJXMiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjUzMQorIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHJhbmdlICVzIC0tICVzIGlzIG5vdCBjb25zaXN0ZW50IHdpdGggbmV0bWFzayAlcyIKK21zZ3N0ciAiREhDUCBvbXLlZGUgJXMgLS0gJXMgZXIgaWtrZSBrb25zaXN0ZW50IG1lZCBuZXR0bWFza2UgJXMiCisKKyM6IGRoY3AuYzo4NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGxpbmUgYXQgJXMgbGluZSAlZCIKK21zZ3N0ciAiZOVybGlnIGxpbmplIHZlZCAlcyBsaW5qZSAlZCIKKworIzogZGhjcC5jOjg5NworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyAlcyBsaW5lICVkLCBkdXBsaWNhdGUgbmFtZSBvciBJUCBhZGRyZXNzIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzoxMDQxIHJmYzMzMTUuYzoyMTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcmVsYXkgJXMgLT4gJXMiCittc2dzdHIgIiIKKworIzogbGVhc2UuYzo5OAorbXNnaWQgInRvbyBtYW55IHN0b3JlZCBsZWFzZXMiCittc2dzdHIgImZvciBtYW5nZSBsYWdyZWRlIGxlaWVyIgorCisjOiBsZWFzZS5jOjE2NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gb3IgY3JlYXRlIGxlYXNlIGZpbGUgJXM6ICVzIgorbXNnc3RyICJrYW4gaWtrZSDlcG5lIGVsbGVyIGxhZ2UgbGVpZSBmaWw6ICVzIgorCisjOiBsZWFzZS5jOjE3NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgbGVhc2UgZGF0YWJhc2UsIGludmFsaWQgbGluZTogJXMgJXMgJXMgJXMgLi4uIgorbXNnc3RyICIiCisKKyM6IGxlYXNlLmM6MTgwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCBsZWFzZSBmaWxlICVzOiAlcyIKK21zZ3N0ciAiZmVpbGV0IOUgbGVzZSAlczogJXMiCisKKyM6IGxlYXNlLmM6MTk2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcnVuIGxlYXNlLWluaXQgc2NyaXB0ICVzOiAlcyIKK21zZ3N0ciAia2FuIGlra2UgbGVzZSAlczogJXMiCisKKyM6IGxlYXNlLmM6MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgImxlYXNlLWluaXQgc2NyaXB0IHJldHVybmVkIGV4aXQgY29kZSAlcyIKK21zZ3N0ciAiIgorCisjOiBsZWFzZS5jOjM3MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHdyaXRlICVzOiAlcyAocmV0cnkgaW4gJXVzKSIKK21zZ3N0ciAiZmVpbGV0IOUgbGVzZSAlczogJXMiCisKKyM6IGxlYXNlLmM6OTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIklnbm9yaW5nIGRvbWFpbiAlcyBmb3IgREhDUCBob3N0IG5hbWUgJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICJubyBhZGRyZXNzIHJhbmdlIGF2YWlsYWJsZSBmb3IgREhDUCByZXF1ZXN0ICVzICVzIgorbXNnc3RyICJpbmdlbiBhZHJlc3NlIG9tcuVkZSB0aWxnamVuZ2VsaWcgZm9yIERIQ1Aga3JhdiAlcyAlcyIKKworIzogcmZjMjEzMS5jOjM0OAorbXNnaWQgIndpdGggc3VibmV0IHNlbGVjdG9yIgorbXNnc3RyICJtZWQgc3VibmV0IHZlbGdlciIKKworIzogcmZjMjEzMS5jOjM0OAorbXNnaWQgInZpYSIKK21zZ3N0ciAidmlhIgorCisjOiByZmMyMTMxLmM6MzYwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIldSBhdmFpbGFibGUgREhDUCBzdWJuZXQ6ICVzLyVzIgorbXNnc3RyICJpbmdlbiBhZHJlc3NlIG9tcuVkZSB0aWxnamVuZ2VsaWcgZm9yIERIQ1Aga3JhdiAlcyAlcyIKKworIzogcmZjMjEzMS5jOjM2MyByZmMzMzE1LmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGF2YWlsYWJsZSBESENQIHJhbmdlOiAlcyAtLSAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6NDc0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIldSB2ZW5kb3IgY2xhc3M6ICVzIgorbXNnc3RyICJEQnVzIGZlaWw6ICVzIgorCisjOiByZmMyMTMxLmM6NDc2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIldSB1c2VyIGNsYXNzOiAlcyIKK21zZ3N0ciAiREJ1cyBmZWlsOiAlcyIKKworIzogcmZjMjEzMS5jOjUxMAorbXNnaWQgImRpc2FibGVkIgorbXNnc3RyICJkZWFrdGl2ZXJ0IgorCisjOiByZmMyMTMxLmM6NTUxIHJmYzIxMzEuYzoxMDA2IHJmYzIxMzEuYzoxNDMwIHJmYzMzMTUuYzo2MTYgcmZjMzMxNS5jOjg2OQorIzogcmZjMzMxNS5jOjExNDgKK21zZ2lkICJpZ25vcmVkIgorbXNnc3RyICJvdmVyc2V0dCIKKworIzogcmZjMjEzMS5jOjU2NiByZmMyMTMxLmM6MTIzOSByZmMzMzE1LmM6OTE5Cittc2dpZCAiYWRkcmVzcyBpbiB1c2UiCittc2dzdHIgImFkcmVzc2UgaSBicnVrIgorCisjOiByZmMyMTMxLmM6NTgwIHJmYzIxMzEuYzoxMDYwCittc2dpZCAibm8gYWRkcmVzcyBhdmFpbGFibGUiCittc2dzdHIgImluZ2VuIGFkcmVzc2UgdGlsZ2plbmdlbGlnIgorCisjOiByZmMyMTMxLmM6NTg3IHJmYzIxMzEuYzoxMjAyCittc2dpZCAid3JvbmcgbmV0d29yayIKK21zZ3N0ciAiZ2FsdCBuZXR0dmVyayIKKworIzogcmZjMjEzMS5jOjYwMgorbXNnaWQgIm5vIGFkZHJlc3MgY29uZmlndXJlZCIKK21zZ3N0ciAiaW5nZW4gYWRyZXNzZSBrb25maWd1cmVydCIKKworIzogcmZjMjEzMS5jOjYwOCByZmMyMTMxLmM6MTI1MgorbXNnaWQgIm5vIGxlYXNlcyBsZWZ0IgorbXNnc3RyICJpbmdlbiBsZWllciBpZ2plbiIKKworIzogcmZjMjEzMS5jOjcwMyByZmMzMzE1LmM6NDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGNsaWVudCBwcm92aWRlcyBuYW1lOiAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6ODA4Cittc2dpZCAiUFhFIEJJUyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo5NzQgcmZjMzMxNS5jOjEyNDIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImRpc2FibGluZyBESENQIHN0YXRpYyBhZGRyZXNzICVzIGZvciAlcyIKK21zZ3N0ciAiZGVha3RpdmVyZXIgREhDUCBzdGF0aXNrIGFkcmVzc2UgJXMiCisKKyM6IHJmYzIxMzEuYzo5OTUKK21zZ2lkICJ1bmtub3duIGxlYXNlIgorbXNnc3RyICJ1a2plbnQgbGVpZSIKKworIzogcmZjMjEzMS5jOjEwMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHVzaW5nIGNvbmZpZ3VyZWQgYWRkcmVzcyAlcyBiZWNhdXNlIGl0IGlzIGxlYXNlZCB0byAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTAzOQorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgdXNpbmcgY29uZmlndXJlZCBhZGRyZXNzICVzIGJlY2F1c2UgaXQgaXMgaW4gdXNlIGJ5IHRoZSBzZXJ2ZXIgb3IgcmVsYXkiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjEwNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHVzaW5nIGNvbmZpZ3VyZWQgYWRkcmVzcyAlcyBiZWNhdXNlIGl0IHdhcyBwcmV2aW91c2x5IGRlY2xpbmVkIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxMDU4IHJmYzIxMzEuYzoxMjQ1Cittc2dpZCAibm8gdW5pcXVlLWlkIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxMTQwCittc2dpZCAid3Jvbmcgc2VydmVyLUlEIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxMTU5Cittc2dpZCAid3JvbmcgYWRkcmVzcyIKK21zZ3N0ciAiZ2FsIGFkcmVzc2UiCisKKyM6IHJmYzIxMzEuYzoxMTc3IHJmYzMzMTUuYzoxMDE1Cittc2dpZCAibGVhc2Ugbm90IGZvdW5kIgorbXNnc3RyICJsZWllIGlra2UgZnVubmV0IgorCisjOiByZmMyMTMxLmM6MTIxMAorbXNnaWQgImFkZHJlc3Mgbm90IGF2YWlsYWJsZSIKK21zZ3N0ciAiYWRyZXNzZSBpa2tlIHRpbGdqZW5nZWxpZyIKKworIzogcmZjMjEzMS5jOjEyMjEKK21zZ2lkICJzdGF0aWMgbGVhc2UgYXZhaWxhYmxlIgorbXNnc3RyICJzdGF0aXNrIGxlaWUgdGlsZ2plbmdlbGlnIgorCisjOiByZmMyMTMxLmM6MTIyNQorbXNnaWQgImFkZHJlc3MgcmVzZXJ2ZWQiCittc2dzdHIgImFkcmVzc2UgcmVzZXJ2ZXJ0IgorCisjOiByZmMyMTMxLmM6MTIzMworIywgYy1mb3JtYXQKK21zZ2lkICJhYmFuZG9uaW5nIGxlYXNlIHRvICVzIG9mICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxNzU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJvb3RmaWxlIG5hbWU6ICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxNzY2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIldSBzZXJ2ZXIgbmFtZTogJXMiCittc2dzdHIgIkRCdXMgZmVpbDogJXMiCisKKyM6IHJmYzIxMzEuYzoxNzc0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIldSBuZXh0IHNlcnZlcjogJXMiCittc2dzdHIgIkRCdXMgZmVpbDogJXMiCisKKyM6IHJmYzIxMzEuYzoxNzc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJyb2FkY2FzdCByZXNwb25zZSIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTg0MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHNlbmQgREhDUC9CT09UUCBvcHRpb24gJWQ6IG5vIHNwYWNlIGxlZnQgaW4gcGFja2V0IgorbXNnc3RyICJrYW4gaWtrZSBzZW5kZSBESENQIG9wc2pvbiAlZDogaWtrZSBtZXIgcGxhc3MgaSBwYWtrZW4iCisKKyM6IHJmYzIxMzEuYzoyMTMxCittc2dpZCAiUFhFIG1lbnUgdG9vIGxhcmdlIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoyMjcwIHJmYzMzMTUuYzoxNTE1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIldSByZXF1ZXN0ZWQgb3B0aW9uczogJXMiCittc2dzdHIgImtvbXBpbGVyaW5ncyBvcHNqb25lcjogJXMiCisKKyM6IHJmYzIxMzEuYzoyNTg3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzZW5kIFJGQzM5MjUgb3B0aW9uOiB0b28gbWFueSBvcHRpb25zIGZvciBlbnRlcnByaXNlIG51bWJlciAlZCIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MjY1MAorIywgYy1mb3JtYXQKK21zZ2lkICIldSByZXBseSBkZWxheTogJWQiCittc2dzdHIgIiIKKworIzogbmV0bGluay5jOjc3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIG5ldGxpbmsgc29ja2V0OiAlcyIKK21zZ3N0ciAia2FuIGlra2UgYmluZGUgbmV0bGluayBzb2NrZXQ6ICVzIgorCisjOiBuZXRsaW5rLmM6MzU1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJuZXRsaW5rIHJldHVybnMgZXJyb3I6ICVzIgorbXNnc3RyICJEQnVzIGZlaWw6ICVzIgorCisjOiBkYnVzLmM6MTg2Cittc2dpZCAiYXR0ZW1wdCB0byBzZXQgYW4gSVB2NiBzZXJ2ZXIgYWRkcmVzcyB2aWEgREJ1cyAtIG5vIElQdjYgc3VwcG9ydCIKK21zZ3N0ciAiZm9yc/hrIHDlIOUgc2V0dGUgZW4gSVB2NiB0amVuZXIgYWRyZXNzZSB2aWEgREJ1cyAtIGluZ2VuIElQdjYgc3T4dHRlIgorCisjOiBkYnVzLmM6NDM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkVuYWJsaW5nIC0tJXMgb3B0aW9uIGZyb20gRC1CdXMiCittc2dzdHIgIiIKKworIzogZGJ1cy5jOjQ0NAorIywgYy1mb3JtYXQKK21zZ2lkICJEaXNhYmxpbmcgLS0lcyBvcHRpb24gZnJvbSBELUJ1cyIKK21zZ3N0ciAiIgorCisjOiBkYnVzLmM6NjkwCittc2dpZCAic2V0dGluZyB1cHN0cmVhbSBzZXJ2ZXJzIGZyb20gREJ1cyIKK21zZ3N0ciAic2V0dGVyIG9wcHN0cvhtcyB0amVuZXIgZnJhIERCdXMiCisKKyM6IGRidXMuYzo3MzcKK21zZ2lkICJjb3VsZCBub3QgcmVnaXN0ZXIgYSBEQnVzIG1lc3NhZ2UgaGFuZGxlciIKK21zZ3N0ciAia3VubmUgaWtrZSByZWdpc3RyZXJlIGVuIERCdXMgbWVsZGluZ3No5W5kdGVyZXIiCisKKyM6IGJwZi5jOjI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIERIQ1AgQlBGIHNvY2tldDogJXMiCittc2dzdHIgImthbiBpa2tlIGxhZ2UgREhDUCBCUEYgc29ja2V0OiAlcyIKKworIzogYnBmLmM6MjkzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJESENQIHJlcXVlc3QgZm9yIHVuc3VwcG9ydGVkIGhhcmR3YXJlIHR5cGUgKCVkKSByZWNlaXZlZCBvbiAlcyIKK21zZ3N0ciAiREhDUCBrcmF2IGZvciBpa2tlIHN0+HR0ZXQgbWFza2ludmFyZSB0eXBlICglZCkgbW90dGF0dCBw5SAlcyIKKworIzogYnBmLmM6Mzc4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIFBGX1JPVVRFIHNvY2tldDogJXMiCittc2dzdHIgImthbiBpa2tlIGxhZ2UgREhDUCBzb2NrZXQ6ICVzIgorCisjOiBicGYuYzozOTkKK21zZ2lkICJVbmtub3duIHByb3RvY29sIHZlcnNpb24gZnJvbSByb3V0ZSBzb2NrZXQiCittc2dzdHIgIiIKKworIzogaGVscGVyLmM6MTUzCittc2dpZCAibGVhc2UoKSBmdW5jdGlvbiBtaXNzaW5nIGluIEx1YSBzY3JpcHQiCittc2dzdHIgIiIKKworIzogdGZ0cC5jOjMxOQorbXNnaWQgInVuYWJsZSB0byBnZXQgZnJlZSBwb3J0IGZvciBURlRQIgorbXNnc3RyICIiCisKKyM6IHRmdHAuYzozMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5zdXBwb3J0ZWQgcmVxdWVzdCBmcm9tICVzIgorbXNnc3RyICIiCisKKyM6IHRmdHAuYzo0ODMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJXMgbm90IGZvdW5kIgorbXNnc3RyICJsZWllIGlra2UgZnVubmV0IgorCisjOiB0ZnRwLmM6NTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yICVkICVzIHJlY2VpdmVkIGZyb20gJXMiCittc2dzdHIgIiIKKworIzogdGZ0cC5jOjYzNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHNlbmRpbmcgJXMgdG8gJXMiCittc2dzdHIgImZlaWxldCDlIGxlc2UgJXM6ICVzIgorCisjOiB0ZnRwLmM6NjM0CisjLCBjLWZvcm1hdAorbXNnaWQgInNlbnQgJXMgdG8gJXMiCittc2dzdHIgIiIKKworIzogbG9nLmM6MTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIm92ZXJmbG93OiAlZCBsb2cgZW50cmllcyBsb3N0IgorbXNnc3RyICIiCisKKyM6IGxvZy5jOjI2OAorIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZmFpbGVkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBsb2cuYzo0NzEKK21zZ2lkICJGQUlMRUQgdG8gc3RhcnQgdXAiCittc2dzdHIgIkZFSUxFVCDlIHN0YXJ0ZSBvcHAiCisKKyM6IGNvbm50cmFjay5jOjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbm50cmFjayBjb25uZWN0aW9uIG1hcmsgcmV0cmlldmFsIGZhaWxlZDogJXMiCittc2dzdHIgIiIKKworIzogZGhjcDYuYzo1MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBESENQdjYgc29ja2V0OiAlcyIKK21zZ3N0ciAia2FuIGlra2UgbGFnZSBESENQIHNvY2tldDogJXMiCisKKyM6IGRoY3A2LmM6NzMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZXQgU09fUkVVU0V7QUREUnxQT1JUfSBvbiBESENQdjYgc29ja2V0OiAlcyIKK21zZ3N0ciAiZmVpbGV0IOUgc2V0dGUgU09fUkVVU0VBRERSIHDlIERIQ1Agc29ja2V0OiAlcyIKKworIzogZGhjcDYuYzo4NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGJpbmQgREhDUHY2IHNlcnZlciBzb2NrZXQ6ICVzIgorbXNnc3RyICJmZWlsZXQg5SBiaW5kZSBESENQIHRqZW5lciBzb2NrZXQ6ICVzIgorCisjOiByZmMzMzE1LmM6MTU3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJubyBhZGRyZXNzIHJhbmdlIGF2YWlsYWJsZSBmb3IgREhDUHY2IHJlcXVlc3QgZnJvbSByZWxheSBhdCAlcyIKK21zZ3N0ciAiaW5nZW4gYWRyZXNzZSBvbXLlZGUgdGlsZ2plbmdlbGlnIGZvciBESENQIGtyYXYgJXMgJXMiCisKKyM6IHJmYzMzMTUuYzoxNjYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm5vIGFkZHJlc3MgcmFuZ2UgYXZhaWxhYmxlIGZvciBESENQdjYgcmVxdWVzdCB2aWEgJXMiCittc2dzdHIgImluZ2VuIGFkcmVzc2Ugb21y5WRlIHRpbGdqZW5nZWxpZyBmb3IgREhDUCBrcmF2ICVzICVzIgorCisjOiByZmMzMzE1LmM6MzAzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIldSBhdmFpbGFibGUgREhDUHY2IHN1Ym5ldDogJXMvJWQiCittc2dzdHIgImluZ2VuIGFkcmVzc2Ugb21y5WRlIHRpbGdqZW5nZWxpZyBmb3IgREhDUCBrcmF2ICVzICVzIgorCisjOiByZmMzMzE1LmM6Mzg2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIldSB2ZW5kb3IgY2xhc3M6ICV1IgorbXNnc3RyICJEQnVzIGZlaWw6ICVzIgorCisjOiByZmMzMzE1LmM6NDM0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIldSBjbGllbnQgTUFDIGFkZHJlc3M6ICVzIgorbXNnc3RyICJpbmdlbiB0aWxrbnl0bmluZyAoaW50ZXJmYWNlKSBtZWQgYWRyZXNzZSAlcyIKKworIzogcmZjMzMxNS5jOjY3MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBwcmVmaXgtY2xhc3MgJWQiCittc2dzdHIgInVramVudCBsZWllIgorCisjOiByZmMzMzE1LmM6ODE2IHJmYzMzMTUuYzo5MTEKKyMsIGZ1enp5Cittc2dpZCAiYWRkcmVzcyB1bmF2YWlsYWJsZSIKK21zZ3N0ciAiYWRyZXNzZSBpa2tlIHRpbGdqZW5nZWxpZyIKKworIzogcmZjMzMxNS5jOjgyOCByZmMzMzE1LmM6OTU5IHJmYzMzMTUuYzoxMjkyCittc2dpZCAic3VjY2VzcyIKK21zZ3N0ciAiIgorCisjOiByZmMzMzE1LmM6ODQzIHJmYzMzMTUuYzo4NTIgcmZjMzMxNS5jOjk2NyByZmMzMzE1LmM6OTY5CisjLCBmdXp6eQorbXNnaWQgIm5vIGFkZHJlc3NlcyBhdmFpbGFibGUiCittc2dzdHIgImluZ2VuIGFkcmVzc2UgdGlsZ2plbmdlbGlnIgorCisjOiByZmMzMzE1LmM6OTQ2Cittc2dpZCAibm90IG9uIGxpbmsiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjEwMTkgcmZjMzMxNS5jOjEyMDQgcmZjMzMxNS5jOjEyODEKK21zZ2lkICJubyBiaW5kaW5nIGZvdW5kIgorbXNnc3RyICIiCisKKyM6IHJmYzMzMTUuYzoxMDU3Cittc2dpZCAiZGVwcmVjYXRlZCIKK21zZ3N0ciAiIgorCisjOiByZmMzMzE1LmM6MTA2MgorIywgZnV6enkKK21zZ2lkICJhZGRyZXNzIGludmFsaWQiCittc2dzdHIgImFkcmVzc2UgaSBicnVrIgorCisjOiByZmMzMzE1LmM6MTEwOQorbXNnaWQgImNvbmZpcm0gZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IHJmYzMzMTUuYzoxMTI1CisjLCBmdXp6eQorbXNnaWQgImFsbCBhZGRyZXNzZXMgc3RpbGwgb24gbGluayIKK21zZ3N0ciAiZOVybGlnIGFkcmVzc2UgdmVkICVzIGxpbmplICVkIgorCisjOiByZmMzMzE1LmM6MTIxMworbXNnaWQgInJlbGVhc2UgcmVjZWl2ZWQiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjIxNDAKK21zZ2lkICJDYW5ub3QgbXVsdGljYXN0IHRvIERIQ1B2NiBzZXJ2ZXIgd2l0aG91dCBjb3JyZWN0IGludGVyZmFjZSIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjE0NQorIywgYy1mb3JtYXQKK21zZ2lkICJJZ25vcmluZyBkdXBsaWNhdGUgZGhjcC1vcHRpb24gJWQiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzoyMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgdGFnczogJXMiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIG1vcmUgdGhhbiBvbmUgYWRkcmVzcyBpbiBob3N0c2ZpbGUsIHVzaW5nICVzIGZvciBESENQIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6NDMwCisjLCBjLWZvcm1hdAorbXNnaWQgImR1cGxpY2F0ZSBJUCBhZGRyZXNzICVzICglcykgaW4gZGhjcC1jb25maWcgZGlyZWN0aXZlIgorbXNnc3RyICJkdWJsaXNlcnRlIElQIGFkcmVzc2VyIGkgJXMgKCVzKSBpIGRoY3AtY29uZmlnIGRpcmVrdGl2IgorCisjOiBkaGNwLWNvbW1vbi5jOjQ5NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNldCBTT19CSU5EVE9ERVZJQ0Ugb24gREhDUCBzb2NrZXQ6ICVzIgorbXNnc3RyICJmZWlsZXQg5SBzZXR0ZSBTT19SRVVTRUFERFIgcOUgREhDUCBzb2NrZXQ6ICVzIgorCisjOiBkaGNwLWNvbW1vbi5jOjYxNQorIywgYy1mb3JtYXQKK21zZ2lkICJLbm93biBESENQIG9wdGlvbnM6XG4iCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo2MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiS25vd24gREhDUHY2IG9wdGlvbnM6XG4iCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo4MjMKK21zZ2lkICIsIHByZWZpeCBkZXByZWNhdGVkIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6ODI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiwgbGVhc2UgdGltZSAiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo4NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgc3RhdGVsZXNzIG9uICVzJS4wcyUuMHMlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjg3MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMsIHN0YXRpYyBsZWFzZXMgb25seSBvbiAlLjBzJXMlcyUuMHMiCittc2dzdHIgIkRIQ1AsIHN0YXRpc2sgbGVpZSBrdW4gcOUgJS4wcyVzLCBsZWllIHRpZCAlcyIKKworIzogZGhjcC1jb21tb24uYzo4NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsIHByb3h5IG9uIHN1Ym5ldCAlLjBzJXMlLjBzJS4wcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjg3MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMsIElQIHJhbmdlICVzIC0tICVzJXMlLjBzIgorbXNnc3RyICJESENQLCBJUCBvbXLlZGUgJXMgLS0gJXMsIGxlaWUgdGlkICVzIgorCisjOiBkaGNwLWNvbW1vbi5jOjg4NgorIywgYy1mb3JtYXQKK21zZ2lkICJESENQdjQtZGVyaXZlZCBJUHY2IG5hbWVzIG9uICVzJXMiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo4ODkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInJvdXRlciBhZHZlcnRpc2VtZW50IG9uICVzJXMiCittc2dzdHIgIkRIQ1AsIHN0YXRpc2sgbGVpZSBrdW4gcOUgJS4wcyVzLCBsZWllIHRpZCAlcyIKKworIzogZGhjcC1jb21tb24uYzo5MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCByZWxheSBmcm9tICVzIHRvICVzIHZpYSAlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjkwMgorIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHJlbGF5IGZyb20gJXMgdG8gJXMiCittc2dzdHIgIiIKKworIzogcmFkdi5jOjExMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBJQ01QdjYgc29ja2V0OiAlcyIKK21zZ3N0ciAia2FuIGlra2UgbGFnZSBESENQIHNvY2tldDogJXMiCisKKyM6IGF1dGguYzo0NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3Jpbmcgem9uZSB0cmFuc2ZlciByZXF1ZXN0IGZyb20gJXMiCittc2dzdHIgIiIKKworIzogaXBzZXQuYzo5NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmQga2VybmVsIHZlcnNpb246ICVzIgorbXNnc3RyICJmZWlsZXQg5SBiaW5kZSBESENQIHRqZW5lciBzb2NrZXQ6ICVzIgorCisjOiBpcHNldC5jOjExNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBJUHNldCBjb250cm9sIHNvY2tldDogJXMiCittc2dzdHIgImZlaWxldCDlIGxhZ2UgbHl0dGUgc29ja2V0OiAlcyIKKworIzogaXBzZXQuYzoyMzMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB1cGRhdGUgaXBzZXQgJXM6ICVzIgorbXNnc3RyICJmZWlsZXQg5SBsZXNlICVzOiAlcyIKKworIzogZG5zc2VjLmM6NTI3Cittc2dpZCAic3lzdGVtIHRpbWUgY29uc2lkZXJlZCB2YWxpZCwgbm93IGNoZWNraW5nIEROU1NFQyBzaWduYXR1cmUgdGltZXN0YW1wcy4iCittc2dzdHIgIiIKKworIzogYmxvY2tkYXRhLmM6NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRE5TU0VDIG1lbW9yeSBpbiB1c2UgJXUsIG1heCAldSwgYWxsb2NhdGVkICV1IgorbXNnc3RyICIiCisKKyM6IHRhYmxlcy5jOjYxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYWNjZXNzIHBmIGRldmljZXM6ICVzIgorbXNnc3RyICJmZWlsZXQg5SBm5SB0aWxnYW5nIHRpbCAlczogJXMiCisKKyM6IHRhYmxlcy5jOjc0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBubyBvcGVuZWQgcGYgZGV2aWNlcyAlcyIKK21zZ3N0ciAiYmVueXR0ZXIgbG9rYWxlIGFkcmVzc2VyIGt1biBmb3IgJXMgJXMiCisKKyM6IHRhYmxlcy5jOjgyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJlcnJvcjogY2Fubm90IHVzZSB0YWJsZSBuYW1lICVzIgorbXNnc3RyICJrbGFyZXIgaWtrZSDlIGblIHZlcnRzbmF2bjogJXMiCisKKyM6IHRhYmxlcy5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yOiBjYW5ub3Qgc3RybGNweSB0YWJsZSBuYW1lICVzIgorbXNnc3RyICIiCisKKyM6IHRhYmxlcy5jOjEwMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSVBzZXQ6IGVycm9yOiVzIgorbXNnc3RyICJEQnVzIGZlaWw6ICVzIgorCisjOiB0YWJsZXMuYzoxMDgKK21zZ2lkICJpbmZvOiB0YWJsZSBjcmVhdGVkIgorbXNnc3RyICIiCisKKyM6IHRhYmxlcy5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBESU9DUiVzQUREUlM6ICVzIgorbXNnc3RyICIiCisKKyM6IHRhYmxlcy5jOjEzOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJWQgYWRkcmVzc2VzICVzIgorbXNnc3RyICJsZXMgJXMgLSAlZCBhZHJlc3NlciIKKworIzogaW5vdGlmeS5jOjYyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgYWNjZXNzIHBhdGggJXM6ICVzIgorbXNnc3RyICJrYW4gaWtrZSBsZXNlICVzOiAlcyIKKworIzogaW5vdGlmeS5jOjk1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGlub3RpZnk6ICVzIgorbXNnc3RyICJmZWlsZXQg5SBsZXNlICVzOiAlcyIKKworIzogaW5vdGlmeS5jOjExMQorIywgYy1mb3JtYXQKK21zZ2lkICJ0b28gbWFueSBzeW1saW5rcyBmb2xsb3dpbmcgJXMiCittc2dzdHIgIiIKKworIzogaW5vdGlmeS5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJkaXJlY3RvcnkgJXMgZm9yIHJlc29sdi1maWxlIGlzIG1pc3NpbmcsIGNhbm5vdCBwb2xsIgorbXNnc3RyICIiCisKKyM6IGlub3RpZnkuYzoxMzEgaW5vdGlmeS5jOjE2OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBpbm90aWZ5IGZvciAlczogJXMiCittc2dzdHIgImZlaWxldCDlIGxhZ2UgbHl0dGUgc29ja2V0OiAlcyIKKworIzogaW5vdGlmeS5jOjE1MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiYmFkIGR5bmFtaWMgZGlyZWN0b3J5ICVzOiAlcyIKK21zZ3N0ciAia2FuIGlra2UgbGVzZSAlczogJXMiCisKKyM6IGlub3RpZnkuYzoyNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5vdGlmeSwgbmV3IG9yIGNoYW5nZWQgZmlsZSAlcyIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorI34gbXNnaWQgImNhbm5vdCBjYW5ub25pY2FsaXNlIHJlc29sdi1maWxlICVzOiAlcyIKKyN+IG1zZ3N0ciAia2FuIGlra2Ug5XBuZSBlbGxlciBsYWdlIGxlaWUgZmlsOiAlcyIKKworI34gbXNnaWQgImR1cGxpY2F0ZSBJUCBhZGRyZXNzICVzIGluIGRoY3AtY29uZmlnIGRpcmVjdGl2ZS4iCisjfiBtc2dzdHIgImR1Ymxpc2VydGUgSVAgYWRyZXNzZXIgaSAlcyBkaGNwLWNvbmZpZyBkaXJla3Rpdi4iCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiU3BlY2lmeSBwYXRoIHRvIEx1YSBzY3JpcHQgKG5vIGRlZmF1bHQpLiIKKyN+IG1zZ3N0ciAiU3Blc2lmaXNlciBzdGllbiB0aWwgUElEIGZpbC4gKHN0YW5kYXJkIGVyICVzKS4iCisKKyN+IG1zZ2lkICJUWFQgcmVjb3JkIHN0cmluZyB0b28gbG9uZyIKKyN+IG1zZ3N0ciAiVFhUIHBvc3Qgc3RyZW5nIGZvciBsYW5nIgorCisjfiBtc2dpZCAiZmFpbGVkIHRvIHNldCBJUFY2IG9wdGlvbnMgb24gbGlzdGVuaW5nIHNvY2tldDogJXMiCisjfiBtc2dzdHIgImZlaWxldCDlIHNldHRlIElQdjYgb3Bzam9uZXIgcOUgbHl0dGUgc29ja2V0OiAlcyIKKworI34gbXNnaWQgImZhaWxlZCB0byBiaW5kIGxpc3RlbmluZyBzb2NrZXQgZm9yICVzOiAlcyIKKyN+IG1zZ3N0ciAiZmVpbGV0IOUgYmluZGUgbHl0dGUgc29ja2V0IGZvciAlczogJXMiCisKKyN+IG1zZ2lkICJtdXN0IHNldCBleGFjdGx5IG9uZSBpbnRlcmZhY2Ugb24gYnJva2VuIHN5c3RlbXMgd2l0aG91dCBJUF9SRUNWSUYiCisjfiBtc2dzdHIgIm3lIHNldHRlIG74eWFrdGlnIGV0IGludGVyZmFjZSBw5SD4ZGVsYWd0ZSBzeXN0ZW1lciB1dGVuIElQX1JFQ1ZJRiIKKworI34gbXNnaWQgIklnbm9yaW5nIERIQ1AgbGVhc2UgZm9yICVzIGJlY2F1c2UgaXQgaGFzIGFuIGlsbGVnYWwgZG9tYWluIHBhcnQiCisjfiBtc2dzdHIgIklnbm9yZXJlciBESENQIGxlaWUgZm9yICVzIHNpZGVuIGRlbiBoYXIgZW4gdWxvdmxpZyBkb21lbmUgZGVsIgorCisjfiBtc2dpZCAiSVNDIGRoY3BkIGludGVncmF0aW9uIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0lTQ19SRUFERVIgaW4gc3JjL2NvbmZpZy5oIgorI34gbXNnc3RyICJJU0MgZGhjcGYgaW50ZWdyYXNqb24gaWtrZSB0aWxnamVuZ2VsaWc6IHNldHQgSEFWRV9JU0NfUkVBREVSIGkgc3JjL2NvbmZpZy5oIgorCisjLCBmdXp6eQorI34gbXNnaWQgImlsbGVnYWwgZG9tYWluICVzIGluIGRoY3AtY29uZmlnIGRpcmVjdGl2ZS4iCisjfiBtc2dzdHIgImR1Ymxpc2VydGUgSVAgYWRyZXNzZXIgaSAlcyBkaGNwLWNvbmZpZyBkaXJla3Rpdi4iCisKKyN+IG1zZ2lkICJydW5uaW5nIGFzIHJvb3QiCisjfiBtc2dzdHIgImtq+HJlciBzb20gcm90IChyb290KSIKKworIywgZnV6enkKKyN+IG1zZ2lkICJyZWFkICVzIC0gJWQgaG9zdHMiCisjfiBtc2dzdHIgImxlcyAlcyAtICVkIGFkcmVzc2VyIgorCisjfiBtc2dpZCAiZG9tYWlucyIKKyN+IG1zZ3N0ciAiZG9tZW5lciIKKworI34gbXNnaWQgIklnbm9yaW5nIERIQ1AgaG9zdCBuYW1lICVzIGJlY2F1c2UgaXQgaGFzIGFuIGlsbGVnYWwgZG9tYWluIHBhcnQiCisjfiBtc2dzdHIgIklnbm9yZXJlciBESENQIHZlcnRzIG5hdm4gJXMgcOUgZ3J1bm4gYXYgdWxvdmxpZyBkb21lbmUgZGVsIgorCisjfiBtc2dpZCAiRGlzcGxheSB0aGlzIG1lc3NhZ2UuIgorI34gbXNnc3RyICJWaXMgZGVubmUgbWVsZGluZ2VuLiIKKworI34gbXNnaWQgImZhaWxlZCB0byByZWFkICVzOiAlbSIKKyN+IG1zZ3N0ciAiZmVpbGV0IOUgbGVzZSAlczogJW0iCisKKyN+IG1zZ2lkICJmYWlsZWQgdG8gcmVhZCAlczolbSIKKyN+IG1zZ3N0ciAiZmVpbGV0IOUgbGVzZSAlczolbSIKKworIywgZnV6enkKKyN+IG1zZ2lkICJjYW5ub3Qgc2VuZCBlbmNhcHN1bGF0ZWQgb3B0aW9uICVkOiBubyBzcGFjZSBsZWZ0IGluIHdyYXBwZXIiCisjfiBtc2dzdHIgImthbiBpa2tlIHNlbmRlIERIQ1Agb3Bzam9uICVkOiBpa2tlIG1lciBwbGFzcyBpIHBha2tlbiIKKworI34gbXNnaWQgIk1vcmUgdGhhbiBvbmUgdmVuZG9yIGNsYXNzIG1hdGNoZXMsIHVzaW5nICVzIgorI34gbXNnc3RyICJNZXIgZW5uIGVuIHByb2R1c2VudCBrbGFzc2Ugc29tIHBhc3NlciwgYnJ1a2VyICVzIgorCisjfiBtc2dpZCAiZm9yd2FyZGluZyB0YWJsZSBvdmVyZmxvdzogY2hlY2sgZm9yIHNlcnZlciBsb29wcy4iCisjfiBtc2dzdHIgImZyZW1zZW5kZWxzZSAoZm9yd2FyZGluZykgdGFiZWxsIG92ZXJmbHl0OiBzamVrayBldHRlciB0amVuZXIgbPhra2VyLiIKKworI34gbXNnaWQgIm5lc3RlZCBpbmNsdWRlcyBub3QgYWxsb3dlZCIKKyN+IG1zZ3N0ciAibvhzdGVkZSBpbmtsdWRlcmluZ2VyIGVyIGlra2UgdGlsbGF0dCIKKworI34gbXNnaWQgIkRIQ1AsICVzIHdpbGwgYmUgd3JpdHRlbiBldmVyeSAlcyIKKyN+IG1zZ3N0ciAiREhDUCwgJXMgdmlsIGJsaSBza3JldmV0IGh2ZXIgJXMiCisKKyN+IG1zZ2lkICJjYW5ub3QgY3JlYXRlIERIQ1AgcGFja2V0IHNvY2tldDogJXMuIElzIENPTkZJR19QQUNLRVQgZW5hYmxlZCBpbiB5b3VyIGtlcm5lbD8iCisjfiBtc2dzdHIgImthbiBpa2tlIGxhZ2UgREhDUCBwYWtrZSBzb2NrZXQ6ICVzLiBFciBDT05GSUdfUEFDS0VUIGFrdGl2ZXJ0IGkgZGluIGtqZXJuZT8iCisKKyN+IG1zZ2lkICJDYW5ub3QgdXNlIFJUbmV0bGluayBzb2NrZXQsIGZhbGxpbmcgYmFjayB0byBpb2N0bCBBUEkiCisjfiBtc2dzdHIgIkthbiBpa2tlIGJlbnl0dGUgUlRuZXRsaW5rIHNvY2tldCwgZmFsbGVyIHRpbGJha2UgdGlsIGlvY3RsIEFQSSIKZGlmZiAtLWdpdCBhL3BvL3BsLnBvIGIvcG8vcGwucG8KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGJmNDE3MwotLS0gL2Rldi9udWxsCisrKyBiL3BvL3BsLnBvCkBAIC0wLDAgKzEsMjI4MyBAQAorIyB0cmFuc2xhdGlvbiBvZiBwbC5wbyB0byBwb2xza2kKKyMgUG9saXNoIHRyYW5zbGF0aW9ucyBmb3IgZG5zbWFzcSBwYWNrYWdlLgorIyBUaGlzIGZpbGUgaXMgcHV0IGluIHRoZSBwdWJsaWMgZG9tYWluLgorIworIyBUb21hc3ogU29jaGHFhHNraSA8bmVyZGhlcm9AZ21haWwuY29tPiwgMjAwNS4KKyMgSmFuIFBzb3RhIDxqYXNpdXBzb3RhQGdtYWlsLmNvbT4sIDIwMDgtMjAxNS4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IHBsXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDA5LTA2LTEwIDIwOjU3KzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDE3LTA3LTE3IDE4OjMwKzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEphbiBQc290YSA8amFzaXVwc290YUBnbWFpbC5jb20+XG4iCisiTGFuZ3VhZ2UtVGVhbTogcG9sc2tpIDw+XG4iCisiTGFuZ3VhZ2U6IHBsXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4hPTEpO1xuIgorIlgtR2VuZXJhdG9yOiBQb2VkaXQgMS44LjdcbiIKKyJYLUxhbmd1YWdlOiBwbF9QTFxuIgorCisjOiBjYWNoZS5jOjUxMworbXNnaWQgIkludGVybmFsIGVycm9yIGluIGNhY2hlLiIKK21zZ3N0ciAiV2V3bsSZdHJ6bnkgYsWCxIVkIHcgcGFtacSZY2kgcG9kcsSZY3puZWouIgorCisjOiBjYWNoZS5jOjkyMworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBuYW1lcyBmcm9tICVzOiAlcyIKK21zZ3N0ciAibmllIHBvdHJhZmnEmSB3Y3p5dGHEhyBuYXp3IHogJXM6ICVzIgorCisjOiBjYWNoZS5jOjk0OSBkaGNwLmM6ODY3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBhZGRyZXNzIGF0ICVzIGxpbmUgJWQiCittc2dzdHIgImLFgsSZZG55IGFkcmVzIHcgcGxpa3UgJXMsIHcgbGluaWkgJWQiCisKKyM6IGNhY2hlLmM6MTAwMiBkaGNwLmM6ODgzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBuYW1lIGF0ICVzIGxpbmUgJWQiCittc2dzdHIgImLFgsSZZG5hIG5hendhIHcgcGxpa3UgJXMsIHcgbGluaWkgJWQiCisKKyM6IGNhY2hlLmM6MTAxMSBkaGNwLmM6OTU4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWQgJXMgLSAlZCBhZGRyZXNzZXMiCittc2dzdHIgIndjenl0YcWCZW0gJXMgLSAlZCBhZHJlc8OzdyIKKworIzogY2FjaGUuYzoxMTI0Cittc2dpZCAiY2xlYXJlZCBjYWNoZSIKK21zZ3N0ciAid3ljenlzemN6b25vIHBhbWnEmcSHIHBvZHLEmWN6bsSFIgorCisjOiBjYWNoZS5jOjExNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gSVB2NCBhZGRyZXNzIGZvdW5kIGZvciAlcyIKK21zZ3N0ciAiTmllIHpuYWxhesWCZW0gYWRyZXN1IElQdjQga29tcHV0ZXJhICVzIgorCisjOiBjYWNoZS5jOjEyMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgYSBDTkFNRSwgbm90IGdpdmluZyBpdCB0byB0aGUgREhDUCBsZWFzZSBvZiAlcyIKK21zZ3N0ciAiJXMgdG8gbmF6d2EgQ05BTUUsIG5pZSBwcnp5cGlzdWrEmSBqZWogZHppZXLFvGF3aWUgREhDUCAlcyIKKworIzogY2FjaGUuYzoxMjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBnaXZpbmcgbmFtZSAlcyB0byB0aGUgREhDUCBsZWFzZSBvZiAlcyBiZWNhdXNlIHRoZSBuYW1lIGV4aXN0cyBpbiAlcyB3aXRoIGFkZHJlc3MgJXMiCittc2dzdHIgIm5hendhICVzIG5pZSB6b3N0YcWCYSBuYWRhbmEgZHppZXLFvGF3aWUgREhDUCAlcywgcG9uaWV3YcW8IG5hendhIGlzdG5pZWplIHcgJXMgaSBtYSBqdcW8IGFkcmVzICVzIgorCisjOiBjYWNoZS5jOjE0MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidGltZSAlbHUiCittc2dzdHIgImN6YXMgJWx1IgorCisjOiBjYWNoZS5jOjE0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FjaGUgc2l6ZSAlZCwgJWQvJWQgY2FjaGUgaW5zZXJ0aW9ucyByZS11c2VkIHVuZXhwaXJlZCBjYWNoZSBlbnRyaWVzLiIKK21zZ3N0ciAid2llbGtvxZvEhyBwYW1pxJljaSBwb2RyxJljem5lajogJWQ7ICVkIHogJWQgbWllanNjIGFrdHVhbG55Y2ggd3Bpc8OzdyB1xbx5dG8gcG9ub3duaWUuIgorCisjOiBjYWNoZS5jOjE0MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicXVlcmllcyBmb3J3YXJkZWQgJXUsIHF1ZXJpZXMgYW5zd2VyZWQgbG9jYWxseSAldSIKK21zZ3N0ciAiJXUgemFweXRhxYQgcHJ6ZXPFgmFueWNoIGRhbGVqLCAldSBvZHBvd2llZHppIHVkemllbG9ueWNoIHNhbW9kemllbG5pZSIKKworIzogY2FjaGUuYzoxNDE5CisjLCBjLWZvcm1hdAorbXNnaWQgInF1ZXJpZXMgZm9yIGF1dGhvcml0YXRpdmUgem9uZXMgJXUiCittc2dzdHIgInphcHl0YcWEIGRvIHN0cmVmIGF1dG9yeXRhdHl3bnljaCAldSIKKworIzogY2FjaGUuYzoxNDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgInNlcnZlciAlcyMlZDogcXVlcmllcyBzZW50ICV1LCByZXRyaWVkIG9yIGZhaWxlZCAldSIKK21zZ3N0ciAic2Vyd2VyICVzIyVkOiAldSB6YXB5dGHFhCB3eXPFgmFueWNoLCAldSBwb25vd2lvbnljaCBsdWIgbmlldWRhbnljaCIKKworIzogdXRpbC5jOjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZWVkIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcjogJXMiCittc2dzdHIgImJyYWsgbW/FvGxpd2/Fm2NpIHXFvHljaWEgZ2VuZXJhdG9yYSBsaWN6YiBsb3Nvd3ljaDogJXMiCisKKyM6IHV0aWwuYzoyMjQKK21zZ2lkICJmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IgorbXNnc3RyICJuaWUgdWRhxYJvIHNpxJkgcHJ6eWR6aWVsacSHIHBhbWnEmWNpIgorCisjOiB1dGlsLmM6Mjc3IG9wdGlvbi5jOjYxOQorbXNnaWQgImNvdWxkIG5vdCBnZXQgbWVtb3J5IgorbXNnc3RyICJuaWUgbW/FvG5hIGRvc3RhxIcgcGFtacSZY2kiCisKKyM6IHV0aWwuYzoyODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBwaXBlOiAlcyIKK21zZ3N0ciAiYsWCxIVkIHBvZGN6YXMgcHLDs2J5IHV0d29yemVuaWEgcG90b2t1OiAlcyIKKworIzogdXRpbC5jOjI5NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYWxsb2NhdGUgJWQgYnl0ZXMiCittc2dzdHIgIm5pZW1vxbxsaXdvxZvEhyBwcnp5ZHppZWxlbmlhICVkIGJhanTDs3cgcGFtacSZY2kiCisKKyM6IHV0aWwuYzo0NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5maW5pdGUiCittc2dzdHIgIm5pZXNrb8WEY3pvbmEiCisKKyM6IG9wdGlvbi5jOjM0NAorbXNnaWQgIlNwZWNpZnkgbG9jYWwgYWRkcmVzcyhlcykgdG8gbGlzdGVuIG9uLiIKK21zZ3N0ciAiV3NrYXphbmllIGFkcmVzw7N3LCBuYSBrdMOzcnljaCBuYWxlxbx5IG5hc8WCdWNoaXdhxIcuIgorCisjOiBvcHRpb24uYzozNDUKK21zZ2lkICJSZXR1cm4gaXBhZGRyIGZvciBhbGwgaG9zdHMgaW4gc3BlY2lmaWVkIGRvbWFpbnMuIgorbXNnc3RyICJad3JhY2FuaWUgYWRyZXN1IElQIGRsYSB3c3p5c3RraWNoIGhvc3TDs3cgd2Ugd3NrYXphbnljaCBkb21lbmFjaC4iCisKKyM6IG9wdGlvbi5jOjM0NgorbXNnaWQgIkZha2UgcmV2ZXJzZSBsb29rdXBzIGZvciBSRkMxOTE4IHByaXZhdGUgYWRkcmVzcyByYW5nZXMuIgorbXNnc3RyICJXecWCxIVjemVuaWUgcHJ6ZWthenl3YW5pYSB6YXB5dGHFhCBvZHdyb3RueWNoIGRsYSBwcnl3YXRueWNoIHpha3Jlc8OzdyBJUC4iCisKKyM6IG9wdGlvbi5jOjM0NworbXNnaWQgIlRyZWF0IGlwYWRkciBhcyBOWERPTUFJTiAoZGVmZWF0cyBWZXJpc2lnbiB3aWxkY2FyZCkuIgorbXNnc3RyICJUcmFrdG93YW5pZSBhZHJlc3UgSVAgamFrbyBOWERPTUFJTiAodW5pZXdhxbxuaWEgLCxWZXJpc2lnbiB3aWxkY2FyZCcnKS4iCisKKyM6IG9wdGlvbi5jOjM0OAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHRoZSBzaXplIG9mIHRoZSBjYWNoZSBpbiBlbnRyaWVzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJXc2themFuaWUgd2llbGtvxZtjaSBwYW1pxJljaSBwb2RyxJljem5laiAoZG9tecWbbG5pZTogJXMgbWllanNjKS4iCisKKyM6IG9wdGlvbi5jOjM0OQorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IGNvbmZpZ3VyYXRpb24gZmlsZSAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiV3NrYXphbmllIHBsaWt1IGtvbmZpZ3VyYWN5am5lZ28gKGRvbXnFm2xuaWU6ICVzKS4iCisKKyM6IG9wdGlvbi5jOjM1MAorbXNnaWQgIkRvIE5PVCBmb3JrIGludG8gdGhlIGJhY2tncm91bmQ6IHJ1biBpbiBkZWJ1ZyBtb2RlLiIKK21zZ3N0ciAiTklFIHR3w7NyeiBwcm9jZXN1IHBvdG9tbmVnbyB3IHRsZTogZHppYcWCYW5pZSB3IHRyeWJpZSBkZWJ1Z293YW5pYS4iCisKKyM6IG9wdGlvbi5jOjM1MQorbXNnaWQgIkRvIE5PVCBmb3J3YXJkIHF1ZXJpZXMgd2l0aCBubyBkb21haW4gcGFydC4iCittc2dzdHIgIld5xYLEhWN6ZW5pZSBwcnpla2F6eXdhbmlhIHphcHl0YcWEIGJleiBwb2RhbmVqIGN6xJnFm2NpIGRvbWVub3dlai4iCisKKyM6IG9wdGlvbi5jOjM1MgorbXNnaWQgIlJldHVybiBzZWxmLXBvaW50aW5nIE1YIHJlY29yZHMgZm9yIGxvY2FsIGhvc3RzLiIKK21zZ3N0ciAiWndyYWNhbmllIHNhbW93c2thenVqxIVjZWdvIHJla29yZHUgTVggZGxhIGxva2FsbnljaCBob3N0w7N3LiIKKworIzogb3B0aW9uLmM6MzUzCittc2dpZCAiRXhwYW5kIHNpbXBsZSBuYW1lcyBpbiAvZXRjL2hvc3RzIHdpdGggZG9tYWluLXN1ZmZpeC4iCittc2dzdHIgIlJvendpamFuaWUgcHJvc3R5Y2ggbmF6dyB6IC9ldGMvaG9zdHMgcHJ6eXJvc3RraWVtIGRvbWVub3d5bS4iCisKKyM6IG9wdGlvbi5jOjM1NAorbXNnaWQgIkRvbid0IGZvcndhcmQgc3B1cmlvdXMgRE5TIHJlcXVlc3RzIGZyb20gV2luZG93cyBob3N0cy4iCittc2dzdHIgIld5xYLEhWN6ZW5pZSBwcnpla2F6eXdhbmlhIHBvem9ybnljaCB6YXB5dGHFhCBETlMgeiBrb21wdXRlcsOzdyBkemlhxYJhasSFY3ljaCBwb2QgV2luZG93cy4iCisKKyM6IG9wdGlvbi5jOjM1NQorbXNnaWQgIkVuYWJsZSBESENQIGluIHRoZSByYW5nZSBnaXZlbiB3aXRoIGxlYXNlIGR1cmF0aW9uLiIKK21zZ3N0ciAiV8WCxIVjemVuaWUgc2Vyd2VyYSBESENQIGRsYSB3c2themFuZWdvIHpha3Jlc3UgYWRyZXPDs3cuIgorCisjOiBvcHRpb24uYzozNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hhbmdlIHRvIHRoaXMgZ3JvdXAgYWZ0ZXIgc3RhcnR1cCAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiUG8gdXJ1Y2hvbWllbml1IHptaWFuYSBncnVweSBwcm9jZXN1IG5hIHBvZGFuxIUgKGRvbXnFm2xuaWU6ICVzKS4iCisKKyM6IG9wdGlvbi5jOjM1NworbXNnaWQgIlNldCBhZGRyZXNzIG9yIGhvc3RuYW1lIGZvciBhIHNwZWNpZmllZCBtYWNoaW5lLiIKK21zZ3N0ciAiVXN0YXdpZW5pZSBhZHJlc3UgbHViIG5hend5IGRsYSB3c2themFuZWdvIGtvbXB1dGVyYS4iCisKKyM6IG9wdGlvbi5jOjM1OAorbXNnaWQgIlJlYWQgREhDUCBob3N0IHNwZWNzIGZyb20gZmlsZS4iCittc2dzdHIgIldza2F6YW5pZSBwbGlrdSB6IHdhcnRvxZtjaWFtaSAnZGhjcC1ob3N0PScuIgorCisjOiBvcHRpb24uYzozNTkKK21zZ2lkICJSZWFkIERIQ1Agb3B0aW9uIHNwZWNzIGZyb20gZmlsZS4iCittc2dzdHIgIldza2F6YW5pZSBwbGlrdSB6IHdhcnRvxZtjaWFtaSAnZGhjcC1vcHRpb249Jy4iCisKKyM6IG9wdGlvbi5jOjM2MAorbXNnaWQgIlJlYWQgREhDUCBob3N0IHNwZWNzIGZyb20gYSBkaXJlY3RvcnkuIgorbXNnc3RyICJPZGN6eXQgc3BlY3lmaWthY2ppIGhvc3TDs3cgZGxhIERIQ1AgeiBrYXRhbG9ndS4iCisKKyM6IG9wdGlvbi5jOjM2MQorbXNnaWQgIlJlYWQgREhDUCBvcHRpb25zIGZyb20gYSBkaXJlY3RvcnkuIgorbXNnc3RyICJPZGN6eXQgb3BjamkgREhDUCB6IGthdGFsb2d1LiIKKworIzogb3B0aW9uLmM6MzYyCittc2dpZCAiRXZhbHVhdGUgY29uZGl0aW9uYWwgdGFnIGV4cHJlc3Npb24uIgorbXNnc3RyICJXYXJ1bmtvd2UgdXN0YXdpYW5pZSB6bmFjem5pa8Ozdy4iCisKKyM6IG9wdGlvbi5jOjM2MworIywgYy1mb3JtYXQKK21zZ2lkICJEbyBOT1QgbG9hZCAlcyBmaWxlLiIKK21zZ3N0ciAiTklFIHdjenl0eXdhbmllIHBsaWt1ICVzLiIKKworIzogb3B0aW9uLmM6MzY0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgYSBob3N0cyBmaWxlIHRvIGJlIHJlYWQgaW4gYWRkaXRpb24gdG8gJXMuIgorbXNnc3RyICJXc2themFuaWUgZG9kYXRrb3dlZ28gcGxpa3UgJ2hvc3RzJyBvcHLDs2N6ICVzLiIKKworIzogb3B0aW9uLmM6MzY1Cittc2dpZCAiUmVhZCBob3N0cyBmaWxlcyBmcm9tIGEgZGlyZWN0b3J5LiIKK21zZ3N0ciAiT2Rjenl0IHBsaWt1IGhvc3TDs3cgeiBrYXRhbG9ndS4iCisKKyM6IG9wdGlvbi5jOjM2NgorbXNnaWQgIlNwZWNpZnkgaW50ZXJmYWNlKHMpIHRvIGxpc3RlbiBvbi4iCittc2dzdHIgIkludGVyZmVqc3ksIG5hIGt0w7NyeWNoIG5hc8WCdWNoaXdhxIcuIgorCisjOiBvcHRpb24uYzozNjcKK21zZ2lkICJTcGVjaWZ5IGludGVyZmFjZShzKSBOT1QgdG8gbGlzdGVuIG9uLiIKK21zZ3N0ciAiSW50ZXJmZWpzeSwgbmEga3TDs3J5Y2ggTklFIG5hc8WCdWNoaXdhxIcuIgorCisjOiBvcHRpb24uYzozNjgKK21zZ2lkICJNYXAgREhDUCB1c2VyIGNsYXNzIHRvIHRhZy4iCittc2dzdHIgIlByenlwb3J6xIVka293YW5pZSB6bmFjem5pa2EgdyB6YWxlxbxub8WbY2kgb2Qga2xhc3kgdcW8eXRrb3duaWthIERIQ1AuIgorCisjOiBvcHRpb24uYzozNjkKK21zZ2lkICJNYXAgUkZDMzA0NiBjaXJjdWl0LWlkIHRvIHRhZy4iCittc2dzdHIgIlByenlwb3J6xIVka293YW5pZSB6bmFjem5pa2EgdyB6YWxlxbxub8WbY2kgb2QgbnVtZXJ1IG9id29kdSAodyByb3p1bWllbml1IFJGQzMwNDYpLiIKKworIzogb3B0aW9uLmM6MzcwCittc2dpZCAiTWFwIFJGQzMwNDYgcmVtb3RlLWlkIHRvIHRhZy4iCittc2dzdHIgIlByenlwb3J6xIVka293YW5pZSB6bmFjem5pa2EgdyB6YWxlxbxub8WbY2kgb2QgbnVtZXJ1IGFnZW50YSAodyByb3p1bWllbml1IFJGQzMwNDYpLiIKKworIzogb3B0aW9uLmM6MzcxCittc2dpZCAiTWFwIFJGQzM5OTMgc3Vic2NyaWJlci1pZCB0byB0YWcuIgorbXNnc3RyICJQcnp5cG9yesSFZGtvd2FuaWUgem5hY3puaWthIHcgemFsZcW8bm/Fm2NpIG9kIG51bWVydSBzdWJza3J5YmVudGEgKHcgcm96dW1pZW5pdSBSRkMzOTkzKS4iCisKKyM6IG9wdGlvbi5jOjM3MgorbXNnaWQgIkRvbid0IGRvIERIQ1AgZm9yIGhvc3RzIHdpdGggdGFnIHNldC4iCittc2dzdHIgIld5xYLEhWN6ZW5pZSBESENQIGRsYSBob3N0w7N3IHogb2tyZcWbbG9ueW0gem5hY3puaWtpZW0uIgorCisjOiBvcHRpb24uYzozNzMKK21zZ2lkICJGb3JjZSBicm9hZGNhc3QgcmVwbGllcyBmb3IgaG9zdHMgd2l0aCB0YWcgc2V0LiIKK21zZ3N0ciAiV3ltdXN6ZW5pZSBvZHBvd2llZHppIHcgdHJ5YmllIHJvemfFgm9zemVuaW93eW0gZGxhIGhvc3TDs3cgeiBva3JlxZtsb255bSB6bmFjem5pa2llbS4iCisKKyM6IG9wdGlvbi5jOjM3NAorbXNnaWQgIkRvIE5PVCBmb3JrIGludG8gdGhlIGJhY2tncm91bmQsIGRvIE5PVCBydW4gaW4gZGVidWcgbW9kZS4iCittc2dzdHIgIk5JRSB0d8OzcnogcHJvY2VzdSBwb3RvbW5lZ28gdyB0bGUgaSBOSUUgd8WCxIVjemFqIHRyeWJ1IGRlYnVnb3dhbmlhLiIKKworIzogb3B0aW9uLmM6Mzc1Cittc2dpZCAiQXNzdW1lIHdlIGFyZSB0aGUgb25seSBESENQIHNlcnZlciBvbiB0aGUgbG9jYWwgbmV0d29yay4iCittc2dzdHIgIlpha8WCYWRhbmllLCDFvGUgamVzdGXFm215IGplZHlueW0gc2Vyd2VyZW0gREhDUCB3IHNpZWNpIGxva2FsbmVqLiIKKworIzogb3B0aW9uLmM6Mzc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgd2hlcmUgdG8gc3RvcmUgREhDUCBsZWFzZXMgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIsWaY2llxbxrYSBwcnplY2hvd3l3YW5pYSBwbGlrdSBkemllcsW8YXcgREhDUCAoZG9tecWbbG5pZTogJXMpLiIKKworIzogb3B0aW9uLmM6Mzc3Cittc2dpZCAiUmV0dXJuIE1YIHJlY29yZHMgZm9yIGxvY2FsIGhvc3RzLiIKK21zZ3N0ciAiV8WCxIVjemVuaWUgendyYWNhbmlhIHJla29yZHUgTVggZGxhIGhvc3TDs3cgbG9rYWxueWNoLiIKKworIzogb3B0aW9uLmM6Mzc4Cittc2dpZCAiU3BlY2lmeSBhbiBNWCByZWNvcmQuIgorbXNnc3RyICJTcGVjeWZpa2FjamEgcmVrb3JkdSBNWC4iCisKKyM6IG9wdGlvbi5jOjM3OQorbXNnaWQgIlNwZWNpZnkgQk9PVFAgb3B0aW9ucyB0byBESENQIHNlcnZlci4iCittc2dzdHIgIk9rcmXFm2xlbmllIG9wY2ppIEJPT1RQIHNlcndlcmEgREhDUC4iCisKKyM6IG9wdGlvbi5jOjM4MAorIywgYy1mb3JtYXQKK21zZ2lkICJEbyBOT1QgcG9sbCAlcyBmaWxlLCByZWxvYWQgb25seSBvbiBTSUdIVVAuIgorbXNnc3RyICJXecWCxIVjemVuaWUgb2JzZXJ3b3dhbmlhIHBsaWt1ICVzOyBwb25vd25lIG9kY3p5dHl3YW5pZSB0eWxrbyBwbyBvZGVicmFuaXUgc3lnbmHFgnUgU0lHSFVQLiIKKworIzogb3B0aW9uLmM6MzgxCittc2dpZCAiRG8gTk9UIGNhY2hlIGZhaWxlZCBzZWFyY2ggcmVzdWx0cy4iCittc2dzdHIgIld5xYLEhWN6ZW5pZSBwcnplY2hvd3l3YW5pYSB3IHBhbWnEmWNpIHBvZHLEmWN6bmVqIHd5bmlrw7N3IG5pZXVkYW55Y2ggd3lzenVraXdhxYQuIgorCisjOiBvcHRpb24uYzozODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNlIG5hbWVzZXJ2ZXJzIHN0cmljdGx5IGluIHRoZSBvcmRlciBnaXZlbiBpbiAlcy4iCittc2dzdHIgIk9kcHl0eXdhbmllIHNlcndlcsOzdyBuYXp3IHcga29sZWpub8WbY2kgaWNoIHd5c3TEhXBpZW5pYSB3ICVzLiIKKworIzogb3B0aW9uLmM6MzgzCittc2dpZCAiU3BlY2lmeSBvcHRpb25zIHRvIGJlIHNlbnQgdG8gREhDUCBjbGllbnRzLiIKK21zZ3N0ciAiU3BlY3lmaWthY2phIG9wY2ppIHd5c3nFgmFuZWogZG8ga2xpZW50w7N3IERIQ1AuIgorCisjOiBvcHRpb24uYzozODQKK21zZ2lkICJESENQIG9wdGlvbiBzZW50IGV2ZW4gaWYgdGhlIGNsaWVudCBkb2VzIG5vdCByZXF1ZXN0IGl0LiIKK21zZ3N0ciAiT3BjamEgREhDUCB3eXN5xYJhbmEgbmF3ZXQgamXFvGVsaSBrbGllbnQgbyBuacSFIG5pZSBwcm9zaS4iCisKKyM6IG9wdGlvbi5jOjM4NQorbXNnaWQgIlNwZWNpZnkgcG9ydCB0byBsaXN0ZW4gZm9yIEROUyByZXF1ZXN0cyBvbiAoZGVmYXVsdHMgdG8gNTMpLiIKK21zZ3N0ciAiV3NrYXphbmllIHBvcnR1IGRvIG5hc8WCdWNoaXdhbmlhIHphcHl0YcWEIEROUyAoZG9tecWbbG5pZTogNTMpLiIKKworIzogb3B0aW9uLmM6Mzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gc3VwcG9ydGVkIFVEUCBwYWNrZXQgc2l6ZSBmb3IgRUROUy4wIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJNYWtzeW1hbG5hIG9ic8WCdWdpd2FuYSB3aWVsa2/Fm8SHIHBha2lldHUgRUROUy4wIChkb215xZtsbmllOiAlcykuIgorCisjOiBvcHRpb24uYzozODcKK21zZ2lkICJMb2cgRE5TIHF1ZXJpZXMuIgorbXNnc3RyICJXxYLEhWN6ZW5pZSBzcGlzeXdhbmlhIHphcHl0YcWEIEROUyBkbyBsb2d1LiIKKworIzogb3B0aW9uLmM6Mzg4Cittc2dpZCAiRm9yY2UgdGhlIG9yaWdpbmF0aW5nIHBvcnQgZm9yIHVwc3RyZWFtIEROUyBxdWVyaWVzLiIKK21zZ3N0ciAiV3ltdXN6ZW5pZSB1xbx5Y2lhIHdza2F6YW5lZ28gcG9ydHUgVURQIGRvIG9kcHl0eXdhbmlhIG5hZHJ6xJlkbnljaCBzZXJ3ZXLDs3cgRE5TIGkgb2RiaWVyYW5pYSBvZCBuaWNoIG9kcG93aWVkemkuIgorCisjOiBvcHRpb24uYzozODkKK21zZ2lkICJEbyBOT1QgcmVhZCByZXNvbHYuY29uZi4iCittc2dzdHIgIld5xYLEhWN6ZW5pZSBjenl0YW5pYSBwbGlrdSByZXNvbHYuY29uZi4iCisKKyM6IG9wdGlvbi5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHBhdGggdG8gcmVzb2x2LmNvbmYgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIldza2F6YW5pZSBwb8WCb8W8ZW5pYSBwbGlrdSByZXNvbHYuY29uZiAoZG9tecWbbG5pZTogJXMpLiIKKworIzogb3B0aW9uLmM6MzkxCittc2dpZCAiU3BlY2lmeSBwYXRoIHRvIGZpbGUgd2l0aCBzZXJ2ZXI9IG9wdGlvbnMiCittc2dzdHIgIldza2F6YW5pZSBwb8WCb8W8ZW5pYSBwbGlrdSB6IG9wY2phbWkgc2VydmVyPSIKKworIzogb3B0aW9uLmM6MzkyCittc2dpZCAiU3BlY2lmeSBhZGRyZXNzKGVzKSBvZiB1cHN0cmVhbSBzZXJ2ZXJzIHdpdGggb3B0aW9uYWwgZG9tYWlucy4iCittc2dzdHIgIldza2F6eXdhbmllIGFkcmVzw7N3IHNlcndlcsOzdyBuYXp3LCBvcGNqb25hbG5pZSB6IHByenlwaXNhbmllbSBkbyBkb21lbnkuIgorCisjOiBvcHRpb24uYzozOTMKK21zZ2lkICJTcGVjaWZ5IGFkZHJlc3Mgb2YgdXBzdHJlYW0gc2VydmVycyBmb3IgcmV2ZXJzZSBhZGRyZXNzIHF1ZXJpZXMiCittc2dzdHIgIldza2F6YW5pZSBzZXJ3ZXLDs3cgbmF6dyBkbyBvZHdyb3RuZWogdHJhbnNsYWNqaSBhZHJlc8Ozdy4iCisKKyM6IG9wdGlvbi5jOjM5NAorbXNnaWQgIk5ldmVyIGZvcndhcmQgcXVlcmllcyB0byBzcGVjaWZpZWQgZG9tYWlucy4iCittc2dzdHIgIld5xYLEhWN6ZW5pZSBwcnpla2F6eXdhbmlhIHphcHl0YcWEIGRvIHdza2F6YW55Y2ggZG9tZW4uIgorCisjOiBvcHRpb24uYzozOTUKK21zZ2lkICJTcGVjaWZ5IHRoZSBkb21haW4gdG8gYmUgYXNzaWduZWQgaW4gREhDUCBsZWFzZXMuIgorbXNnc3RyICJXc2themFuaWUgZG9tZW55IGRsYSBzZXJ3ZXJhIERIQ1AuIgorCisjOiBvcHRpb24uYzozOTYKK21zZ2lkICJTcGVjaWZ5IGRlZmF1bHQgdGFyZ2V0IGluIGFuIE1YIHJlY29yZC4iCittc2dzdHIgIk9rcmXFm2xlbmllIGRvbXnFm2xuZWdvIGNlbHUgdyByZWtvcmR6aWUgTVguIgorCisjOiBvcHRpb24uYzozOTcKK21zZ2lkICJTcGVjaWZ5IHRpbWUtdG8tbGl2ZSBpbiBzZWNvbmRzIGZvciByZXBsaWVzIGZyb20gL2V0Yy9ob3N0cy4iCittc2dzdHIgIk9rcmXFm2xlbmllICh3IHNla3VuZGFjaCkgY3phc3Ugd2HFvG5vxZtjaSBvZHBvd2llZHppIHVkemllbG9ueWNoIG5hIHBvZHN0YXdpZSAvZXRjL2hvc3RzIChkb215xZtsbmllIDApLiIKKworIzogb3B0aW9uLmM6Mzk4Cittc2dpZCAiU3BlY2lmeSB0aW1lLXRvLWxpdmUgaW4gc2Vjb25kcyBmb3IgbmVnYXRpdmUgY2FjaGluZy4iCittc2dzdHIgIk9rcmXFm2xlbmllICh3IHNla3VuZGFjaCkgY3phc3Ugd2HFvG5vxZtjaSBuZWdhdHl3bnljaCBvZHBvd2llZHppLiIKKworIzogb3B0aW9uLmM6Mzk5Cittc2dpZCAiU3BlY2lmeSB0aW1lLXRvLWxpdmUgaW4gc2Vjb25kcyBmb3IgbWF4aW11bSBUVEwgdG8gc2VuZCB0byBjbGllbnRzLiIKK21zZ3N0ciAiT2dyYW5pY3plbmllIG1ha3N5bWFsbmVnbyBjemFzdSB3YcW8bm/Fm2NpIG9kcG93aWVkemkgKFRUTCkgcG9kYXdhbmVnbyBrbGllbnRvbSBbdyBzZWt1bmRhY2hdLiIKKworIzogb3B0aW9uLmM6NDAwCittc2dpZCAiU3BlY2lmeSB0aW1lLXRvLWxpdmUgY2VpbGluZyBmb3IgY2FjaGUuIgorbXNnc3RyICJPa3JlxZtsZW5pZSBnw7NybmVqIGdyYW5pY3kgY3phc3Ugd2HFvG5vxZtjaSBkbGEgd3Bpc8OzdyB3IHBhbWnEmWNpIHBvZHLEmWN6bmVqLiIKKworIzogb3B0aW9uLmM6NDAxCittc2dpZCAiU3BlY2lmeSB0aW1lLXRvLWxpdmUgZmxvb3IgZm9yIGNhY2hlLiIKK21zZ3N0ciAiT2tyZcWbbGVuaWUgZG9sbmVqIGdyYW5pY3kgY3phc3Ugd2HFvG5vxZtjaSBkbGEgd3Bpc8OzdyB3IHBhbWnEmWNpIHBvZHLEmWN6bmVqLiIKKworIzogb3B0aW9uLmM6NDAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNoYW5nZSB0byB0aGlzIHVzZXIgYWZ0ZXIgc3RhcnR1cC4gKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIlptaWFuYSB1xbx5dGtvd25pa2EgcHJvY2VzdSBuYSB3c2themFuZWdvIChwbyB1cnVjaG9taWVuaXUsIGRvbXnFm2xuaWU6ICVzKS4iCisKKyM6IG9wdGlvbi5jOjQwMworbXNnaWQgIk1hcCBESENQIHZlbmRvciBjbGFzcyB0byB0YWcuIgorbXNnc3RyICJQcnp5cG9yesSFZGtvd2FuaWUgem5hY3puaWthIHcgemFsZcW8bm/Fm2NpIG9kIHR5cHUga2xpZW50YSBESENQLiIKKworIzogb3B0aW9uLmM6NDA0Cittc2dpZCAiRGlzcGxheSBkbnNtYXNxIHZlcnNpb24gYW5kIGNvcHlyaWdodCBpbmZvcm1hdGlvbi4iCittc2dzdHIgIld5ZHJ1a293YW5pZSBpbmZvcm1hY2ppIG8gcHJvZ3JhbWllIGkgb2Nocm9uaWUgcHJhdyBhdXRvcnNraWNoLiIKKworIzogb3B0aW9uLmM6NDA1Cittc2dpZCAiVHJhbnNsYXRlIElQdjQgYWRkcmVzc2VzIGZyb20gdXBzdHJlYW0gc2VydmVycy4iCittc2dzdHIgIlTFgnVtYWN6ZW5pZSBhZHJlc8OzdyBJUHY0IHogc2Vyd2Vyw7N3IG5hZHJ6xJlkbnljaC4iCisKKyM6IG9wdGlvbi5jOjQwNgorbXNnaWQgIlNwZWNpZnkgYSBTUlYgcmVjb3JkLiIKK21zZ3N0ciAiT2tyZcWbbGVuaWUgcmVrb3JkdSBTUlYuIgorCisjOiBvcHRpb24uYzo0MDcKK21zZ2lkICJEaXNwbGF5IHRoaXMgbWVzc2FnZS4gVXNlIC0taGVscCBkaGNwIG9yIC0taGVscCBkaGNwNiBmb3Iga25vd24gREhDUCBvcHRpb25zLiIKK21zZ3N0ciAiV3nFm3dpZXRsYSB0ZW4ga29tdW5pa2F0LiBDaGPEhWMgcHJ6ZWpyemXEhyBsaXN0xJkgZG9zdMSZcG55Y2ggb3BjamkgREhDUCB1xbx5aiAnLS1oZWxwIGRoY3AnIGx1YiAnLS1oZWxwIGRoY3A2JyAuIgorCisjOiBvcHRpb24uYzo0MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSBwYXRoIG9mIFBJRCBmaWxlIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJPa3JlxZtsZW5pZSDFm2NpZcW8a2kgZG8gcGxpa3UgUElEIChkb215xZtsbmllOiAlcykuIgorCisjOiBvcHRpb24uYzo0MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSBtYXhpbXVtIG51bWJlciBvZiBESENQIGxlYXNlcyAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiTWFrc3ltYWxuYSBsaWN6YmEgZHppZXLFvGF3IERIQ1AgKGRvbXnFm2xuaWU6ICVzKS4iCisKKyM6IG9wdGlvbi5jOjQxMAorbXNnaWQgIkFuc3dlciBETlMgcXVlcmllcyBiYXNlZCBvbiB0aGUgaW50ZXJmYWNlIGEgcXVlcnkgd2FzIHNlbnQgdG8uIgorbXNnc3RyICJVemFsZcW8bmllbmllIG9kcG93aWVkemkgRE5TIG9kIGludGVyZmVqc3UsIG5hIGt0w7NyeW0gb2RlYnJhbm8gemFweXRhbmllICh3eWdvZG5lIGRsYSBzZXJ3ZXLDs3cga2lsa3UgcG9kc2llY2kgeiByw7PFvG55bWkgYWRyZXNhbWkgdyAvZXRjL2hvc3RzKS4iCisKKyM6IG9wdGlvbi5jOjQxMQorbXNnaWQgIlNwZWNpZnkgVFhUIEROUyByZWNvcmQuIgorbXNnc3RyICJTcGVjeWZpa2FjamEgcmVrb3JkdSBETlMgVFhULiIKKworIzogb3B0aW9uLmM6NDEyCittc2dpZCAiU3BlY2lmeSBQVFIgRE5TIHJlY29yZC4iCittc2dzdHIgIlNwZWN5ZmlrYWNqYSByZWtvcmR1IEROUyBQVFIuIgorCisjOiBvcHRpb24uYzo0MTMKK21zZ2lkICJHaXZlIEROUyBuYW1lIHRvIElQdjQgYWRkcmVzcyBvZiBpbnRlcmZhY2UuIgorbXNnc3RyICJad3JhY2EgbmF6d8SZIGRvbWVub3fEhSBwb3dpxIV6YW7EhSB6IGFkcmVzZW0gaW50ZXJmZWpzdSBzaWVjaW93ZWdvLiIKKworIzogb3B0aW9uLmM6NDE0Cittc2dpZCAiQmluZCBvbmx5IHRvIGludGVyZmFjZXMgaW4gdXNlLiIKK21zZ3N0ciAiTmFzxYJ1Y2hpd2FuaWUgdHlsa28gbmEgd3lrb3J6eXN0eXdhbnljaCBpbnRlcmZlanNhY2ggKHVtb8W8bGl3aWEgdXJ1Y2hvbWllbmllIG9zb2JueWNoIHNlcndlcsOzdyBkbGEgcsOzxbxueWNoIGthcnQpLiIKKworIzogb3B0aW9uLmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlYWQgREhDUCBzdGF0aWMgaG9zdCBpbmZvcm1hdGlvbiBmcm9tICVzLiIKK21zZ3N0ciAiV2N6eXRhbmllIHByenlwb3J6xIVka293YcWEIGFkcmVzw7N3IHogJXMuIgorCisjOiBvcHRpb24uYzo0MTYKK21zZ2lkICJFbmFibGUgdGhlIERCdXMgaW50ZXJmYWNlIGZvciBzZXR0aW5nIHVwc3RyZWFtIHNlcnZlcnMsIGV0Yy4iCittc2dzdHIgIlfFgsSFY3plbmllIHXFvHl3YW5pYSBpbnRlcmZlanN1IERCdXMgZG8gaW5mb3Jtb3dhbmlhIG8gem1pYW5hY2gga29uZmlndXJhY2ppLiIKKworIzogb3B0aW9uLmM6NDE3Cittc2dpZCAiRG8gbm90IHByb3ZpZGUgREhDUCBvbiB0aGlzIGludGVyZmFjZSwgb25seSBwcm92aWRlIEROUy4iCittc2dzdHIgIlVydWNob21pZW5pZSBuYSB3c2themFueW0gaW50ZXJmZWpzaWUgdHlsa28gRE5TLWEsIGJleiB1c8WCdWcgREhDUCBpIFRGVFAuIgorCisjOiBvcHRpb24uYzo0MTgKK21zZ2lkICJFbmFibGUgZHluYW1pYyBhZGRyZXNzIGFsbG9jYXRpb24gZm9yIGJvb3RwLiIKK21zZ3N0ciAiV8WCxIVjemVuaWUgZHluYW1pY3puZWdvIHByenlkemllbGFuaWEgYWRyZXPDs3cgZGxhIGtsaWVudMOzdyBCT09UUC4iCisKKyM6IG9wdGlvbi5jOjQxOQorbXNnaWQgIk1hcCBNQUMgYWRkcmVzcyAod2l0aCB3aWxkY2FyZHMpIHRvIG9wdGlvbiBzZXQuIgorbXNnc3RyICJQcnp5cG9yesSFZGtvd2FuaWUgem5hY3puaWthIHcgemFsZcW8bm/Fm2NpIG9kIGFkcmVzdSBNQUMgKG1vxbxuYSB1xbx5d2HEhyB1b2fDs2xuaWXFhDogKikuIgorCisjOiBvcHRpb24uYzo0MjAKK21zZ2lkICJUcmVhdCBESENQIHJlcXVlc3RzIG9uIGFsaWFzZXMgYXMgYXJyaXZpbmcgZnJvbSBpbnRlcmZhY2UuIgorbXNnc3RyICJUcmFrdG93YW5pZSDFvMSFZGHFhCBESENQIG9kZWJyYW55Y2ggbmEgaW50ZXJmZWpzYWNoIGFsaWFzLCAuLi4sIGpha28gb2RlYnJhbnljaCBuYSBpZmFjZS4iCisKKyM6IG9wdGlvbi5jOjQyMQorbXNnaWQgIkRpc2FibGUgSUNNUCBlY2hvIGFkZHJlc3MgY2hlY2tpbmcgaW4gdGhlIERIQ1Agc2VydmVyLiIKK21zZ3N0ciAiUG9taW5pxJljaWUgc3ByYXdkemFuaWEgemEgcG9tb2PEhSBJQ01QIG5pZXphasSZdG/Fm2NpIGFkcmVzdSBwcnplZCBqZWdvIHd5ZHppZXLFvGF3aWVuaWVtLiIKKworIzogb3B0aW9uLmM6NDIyCittc2dpZCAiU2hlbGwgc2NyaXB0IHRvIHJ1biBvbiBESENQIGxlYXNlIGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbi4iCittc2dzdHIgIlNrcnlwdCBwb3fFgm9raSB1cnVjaGFtaWFueSBwbyBwcnp5em5hbml1IGx1YiB6d29sbmllbml1IGFkcmVzdS4iCisKKyM6IG9wdGlvbi5jOjQyMworbXNnaWQgIkx1YSBzY3JpcHQgdG8gcnVuIG9uIERIQ1AgbGVhc2UgY3JlYXRpb24gYW5kIGRlc3RydWN0aW9uLiIKK21zZ3N0ciAiU2tyeXB0IEx1YSB1cnVjaGFtaWFueSBwbyBwcnp5em5hbml1IGx1YiB6d29sbmllbml1IGFkcmVzdS4iCisKKyM6IG9wdGlvbi5jOjQyNAorbXNnaWQgIlJ1biBsZWFzZS1jaGFuZ2Ugc2NyaXB0cyBhcyB0aGlzIHVzZXIuIgorbXNnc3RyICJXc2themFuaWUgdcW8eXRrb3duaWthIHoga3TDs3JlZ28gdXByYXduaWVuaWFtaSBixJlkxIUgdXJ1Y2hhbWlhbmUgc2tyeXB0eS4iCisKKyM6IG9wdGlvbi5jOjQyNQorbXNnaWQgIkNhbGwgZGhjcC1zY3JpcHQgd2l0aCBjaGFuZ2VzIHRvIGxvY2FsIEFSUCB0YWJsZS4iCittc2dzdHIgIld5d2/Fgnl3YW5pZSBkaGNwLXNjcmlwdCB3IHJlYWtjamkgbmEgem1pYW55IHcgdGFibGljeSBBUlAuIgorCisjOiBvcHRpb24uYzo0MjYKK21zZ2lkICJSZWFkIGNvbmZpZ3VyYXRpb24gZnJvbSBhbGwgdGhlIGZpbGVzIGluIHRoaXMgZGlyZWN0b3J5LiIKK21zZ3N0ciAiV2N6eXRhbmllIHdzenlzdGtpY2ggcGxpa8OzdyB6ZSB3c2themFuZWdvIGthdGFsb2d1IGpha28ga29uZmlndXJhY3lqbnljaC4iCisKKyM6IG9wdGlvbi5jOjQyNworbXNnaWQgIkxvZyB0byB0aGlzIHN5c2xvZyBmYWNpbGl0eSBvciBmaWxlLiAoZGVmYXVsdHMgdG8gREFFTU9OKSIKK21zZ3N0ciAiV3NrYXphbmllIGthbmHFgnUgc3lzbG9nLWEgZG8ga3TDs3JlZ28gbWFqxIUgdHJhZmlhxIcga29tdW5pa2F0eSAoZG9tecWbbG5pZTogREFFTU9OKSIKKworIzogb3B0aW9uLmM6NDI4Cittc2dpZCAiRG8gbm90IHVzZSBsZWFzZWZpbGUuIgorbXNnc3RyICJOaWV1xbx5d2FuaWUgYmF6eSBkemllcsW8YXcuIgorCisjOiBvcHRpb24uYzo0MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCBETlMgcXVlcmllcy4gKGRlZmF1bHRzIHRvICVzKSIKK21zZ3N0ciAiTWFrc3ltYWxuYSBsaWN6YmEgamVkbm9jemXFm25pZSBvYnPFgnVnaXdhbnljaCB6YXB5dGHFhCBETlMgKGRvbXnFm2xuaWU6ICVzKSIKKworIzogb3B0aW9uLmM6NDMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNsZWFyIEROUyBjYWNoZSB3aGVuIHJlbG9hZGluZyAlcy4iCittc2dzdHIgIkN6eXN6Y3plbmllIHBhbWnEmWNpIHBvZHLEmWN6bmVqIHNlcndlcmEgbmF6dyB3IHByenlwYWRrdSBwb25vd25lZ28gb2Rjenl0dSAlcy4iCisKKyM6IG9wdGlvbi5jOjQzMQorbXNnaWQgIklnbm9yZSBob3N0bmFtZXMgcHJvdmlkZWQgYnkgREhDUCBjbGllbnRzLiIKK21zZ3N0ciAiTmllIHp3cmFjYW5pZSB1d2FnaSBuYSBuYXp3xJkgcG9kYXdhbsSFIHByemV6IGtsaWVudGEgdyBwcnp5cGFka3UgZG9wYXNvd2FuaWEgd3N6eXN0a2ljaCB3eW1pZW5pb255Y2ggem5hY3puaWvDs3cuIgorCisjOiBvcHRpb24uYzo0MzIKK21zZ2lkICJEbyBOT1QgcmV1c2UgZmlsZW5hbWUgYW5kIHNlcnZlciBmaWVsZHMgZm9yIGV4dHJhIERIQ1Agb3B0aW9ucy4iCittc2dzdHIgIld5xYLEhWN6ZW5pZSBvc3pjesSZZHphbmlhIG1pZWpzY2EgdyBwYWtpZWNpZSBESENQIHByemV6IHByemVzdXdhbmllIHDDs2wgc2VydmVybmFtZSBpIGZpbGVuYW1lIGRvIG9wY2ppIERIQ1AuIFd5bXVzemEgcHJvc3RzenkgdHJ5YiBidWRvd3kgcGFraWV0dSByb3p3acSFenVqxIVjIHByb2JsZW15IHogbmllcHJ6eXN0b3Nvd2FueW1pIGtsaWVudGFtaSBESENQLiIKKworIzogb3B0aW9uLmM6NDMzCittc2dpZCAiRW5hYmxlIGludGVncmF0ZWQgcmVhZC1vbmx5IFRGVFAgc2VydmVyLiIKK21zZ3N0ciAiV8WCxIVjemVuaWUgd2J1ZG93YW5lZ28gc2Vyd2VyYSBURlRQICh0eWxrbyBkbyB3eXN5xYJhbmlhKS4iCisKKyM6IG9wdGlvbi5jOjQzNAorbXNnaWQgIkV4cG9ydCBmaWxlcyBieSBURlRQIG9ubHkgZnJvbSB0aGUgc3BlY2lmaWVkIHN1YnRyZWUuIgorbXNnc3RyICJPZ3JhbmljemVuaWUgZHppYcWCYW5pYSBzZXJ3ZXJhIFRGVFAgZG8gd3NrYXphbmVnbyBrYXRhbG9ndSBpIHBvZGthdGFsb2fDs3cuIE5hend5IHogLi4gc8SFIG9kcnp1Y2FuZSwgLyBvZG5vc2kgc2nEmSBkbyB3c2themFuZWdvIGthdGFsb2d1LiIKKworIzogb3B0aW9uLmM6NDM1CisjLCBmdXp6eQorbXNnaWQgIkFkZCBjbGllbnQgSVAgb3IgaGFyZHdhcmUgYWRkcmVzcyB0byB0ZnRwLXJvb3QuIgorbXNnc3RyICJEb2tsZWphbmllIGFkcmVzdSBJUCBrbGllbnRhIGRvIGfFgsOzd25lZ28ga2F0YWxvZ3UgVEZUUC4gSmXFvGVsaSB3eW5pa293eSBrYXRhbG9nIG5pZSBpc3RuaWVqZSwgbmFkYWwgd3lrb3J6eXN0dWplIHNpxJkgdGZ0cC1yb290LiIKKworIzogb3B0aW9uLmM6NDM2Cittc2dpZCAiQWxsb3cgYWNjZXNzIG9ubHkgdG8gZmlsZXMgb3duZWQgYnkgdGhlIHVzZXIgcnVubmluZyBkbnNtYXNxLiIKK21zZ3N0ciAiT2dyYW5pY3plbmllIGRvc3TEmXB1IGRvIHBsaWvDs3cgcHJ6ZXogVEZUUCBkbyB0eWNoLCBrdMOzcnljaCB3xYJhxZtjaWNpZWxlbSBqZXN0IHXFvHl0a293bmlrIHVydWNoYW1pYWrEhWN5IGRuc21hc3EtYS4iCisKKyM6IG9wdGlvbi5jOjQzNworbXNnaWQgIkRvIG5vdCB0ZXJtaW5hdGUgdGhlIHNlcnZpY2UgaWYgVEZUUCBkaXJlY3RvcmllcyBhcmUgaW5hY2Nlc3NpYmxlLiIKK21zZ3N0ciAiTmllcHJ6ZXJ5d2FuaWUgZHppYcWCYW5pYSBzZXJ3aXN1IG1pbW8gYnJha3UgZG9zdMSZcHUgZG8ga2F0YWxvZ8OzdyBURlRQLiIKKworIzogb3B0aW9uLmM6NDM4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IFRGVFAgdHJhbnNmZXJzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJNYWtzeW1hbG5hIGxpY3piYSBqZWRub2N6ZcWbbmllIG9ic8WCdWdpd2FueWNoIHBvxYLEhWN6ZcWEIFRGVFAgKGRvbXnFm2xuaWUgJXMpLiIKKworIzogb3B0aW9uLmM6NDM5Cittc2dpZCAiTWF4aW11bSBNVFUgdG8gdXNlIGZvciBURlRQIHRyYW5zZmVycy4iCittc2dzdHIgIk9ncmFuaWN6ZW5pZSBNVFUgdyBrb211bmlrYWNqaSBURlRQLiIKKworIzogb3B0aW9uLmM6NDQwCittc2dpZCAiRGlzYWJsZSB0aGUgVEZUUCBibG9ja3NpemUgZXh0ZW5zaW9uLiIKK21zZ3N0ciAiV3nFgsSFY3plbmllIG1vxbxsaXdvxZtjaSBuZWdvY2pvd2FuaWEgd2llbGtvxZtjaSBibG9rdSBkbGEgcHJ6ZXN5xYLDs3cgcHJ6ZXogVEZUUC4iCisKKyM6IG9wdGlvbi5jOjQ0MQorbXNnaWQgIkNvbnZlcnQgVEZUUCBmaWxlbmFtZXMgdG8gbG93ZXJjYXNlIgorbXNnc3RyICJLb253ZXJ0b3dhbmllIG5hencgcGxpa8OzdyDFvMSFZGFueWNoIHByemV6IFRGVFAgZG8gbWHFgnljaCBsaXRlciIKKworIzogb3B0aW9uLmM6NDQyCittc2dpZCAiRXBoZW1lcmFsIHBvcnQgcmFuZ2UgZm9yIHVzZSBieSBURlRQIHRyYW5zZmVycy4iCittc2dzdHIgIldza2F6YW5pZSB6YWtyZXN1IHBvcnTDs3cgZG8gdcW8eXRrdSBURlRQLiIKKworIzogb3B0aW9uLmM6NDQzCittc2dpZCAiRXh0cmEgbG9nZ2luZyBmb3IgREhDUC4iCittc2dzdHIgIlfFgsSFY3plbmllIHNwaXN5d2FuaWEgdyBsb2d1IG9wZXJhY2ppIERIQ1AuIgorCisjOiBvcHRpb24uYzo0NDQKK21zZ2lkICJFbmFibGUgYXN5bmMuIGxvZ2dpbmc7IG9wdGlvbmFsbHkgc2V0IHF1ZXVlIGxlbmd0aC4iCittc2dzdHIgIlfFgsSFY3plbmllIGFzeW5jaHJvbmljem5lZ28gemFwaXN5d2FuaWEgZG8gbG9ndSB6IGV3ZW50dWFsbnltIHdza2F6YW5pZW0gZMWCdWdvxZtjaSBrb2xlamtpLiIKKworIzogb3B0aW9uLmM6NDQ1Cittc2dpZCAiU3RvcCBETlMgcmViaW5kaW5nLiBGaWx0ZXIgcHJpdmF0ZSBJUCByYW5nZXMgd2hlbiByZXNvbHZpbmcuIgorbXNnc3RyICJPZGZpbHRyb3d5d2FuaWUgYWRyZXPDs3cgd3NrYXp1asSFY3ljaCBuYSBrb21wdXRlcnkgdyBzaWVjaWFjaCB3ZXduxJl0cnpueWNoIHNwb8WbcsOzZCBvZHBvd2llZHppIG9kIHpld27EmXRyem55Y2ggc2Vyd2Vyw7N3IEROUy4iCisKKyM6IG9wdGlvbi5jOjQ0NgorbXNnaWQgIkFsbG93IHJlYmluZGluZyBvZiAxMjcuMC4wLjAvOCwgZm9yIFJCTCBzZXJ2ZXJzLiIKK21zZ3N0ciAiWmV6d29sZW5pZSBuYSBwcnpla2F6eXdhbmllIG9kcG93aWVkemkgdyBrbGFzaWUgMTI3LjAuMC4wLzguIERsYSBzZXJ3ZXLDs3cgUkJMLiIKKworIzogb3B0aW9uLmM6NDQ3Cittc2dpZCAiSW5oaWJpdCBETlMtcmViaW5kIHByb3RlY3Rpb24gb24gdGhpcyBkb21haW4uIgorbXNnc3RyICJEZXpha3R5d2FjamEgemFiZXpwaWVjemVuaWEgcHJ6ZWQgYXRha2FtaSBETlMtcmViaW5kIGRsYSB3c2themFueWNoIGRvbWVuLiIKKworIzogb3B0aW9uLmM6NDQ4Cittc2dpZCAiQWx3YXlzIHBlcmZvcm0gRE5TIHF1ZXJpZXMgdG8gYWxsIHNlcnZlcnMuIgorbXNnc3RyICJKZWRub2N6ZXNuZSBvZHB5dHl3YW5pZSB3c3p5c3RraWNoIHNlcndlcsOzdyBuYWRyesSZZG55Y2g7IGtsaWVudG93aSBwcnpla2F6eXdhbmEgamVzdCBwaWVyd3N6YSBvZHBvd2llZMW6LiIKKworIzogb3B0aW9uLmM6NDQ5Cittc2dpZCAiU2V0IHRhZyBpZiBjbGllbnQgaW5jbHVkZXMgbWF0Y2hpbmcgb3B0aW9uIGluIHJlcXVlc3QuIgorbXNnc3RyICJVc3Rhd2llbmllIHpuYWN6bmlrYSBqZcW8ZWxpIHcgxbzEhWRhbml1IERIQ1AgcG9qYXdpIHNpxJkgd3NrYXphbmEgb3BjamEsIGV3ZW50dWFsbmllIG8ga29ua3JldG5laiB3YXJ0b8WbY2kuIgorCisjOiBvcHRpb24uYzo0NTAKK21zZ2lkICJVc2UgYWx0ZXJuYXRpdmUgcG9ydHMgZm9yIERIQ1AuIgorbXNnc3RyICJVxbx5Y2llIGFsdGVybmF0eXdueWNoIHBvcnTDs3cgZGxhIHVzxYJ1Z2kgREhDUC4iCisKKyM6IG9wdGlvbi5jOjQ1MQorbXNnaWQgIlNwZWNpZnkgTkFQVFIgRE5TIHJlY29yZC4iCittc2dzdHIgIlNwZWN5ZmlrYWNqYSByZWtvcmR1IEROUyBOQVBUUi4iCisKKyM6IG9wdGlvbi5jOjQ1MgorbXNnaWQgIlNwZWNpZnkgbG93ZXN0IHBvcnQgYXZhaWxhYmxlIGZvciBETlMgcXVlcnkgdHJhbnNtaXNzaW9uLiIKK21zZ3N0ciAiVXN0YXdpZW5pZSBkb2xuZWogZ3JhbmljeSBudW1lcsOzdyBwb3J0w7N3IGRvIHByemVzecWCYW5pYSB6YXB5dGHFhCBETlMuIgorCisjOiBvcHRpb24uYzo0NTMKK21zZ2lkICJTcGVjaWZ5IGhpZ2hlc3QgcG9ydCBhdmFpbGFibGUgZm9yIEROUyBxdWVyeSB0cmFuc21pc3Npb24uIgorbXNnc3RyICJPZ3JhbmljemVuaWUgbmFqd3nFvHN6ZWdvIG51bWVydSBwb3J0dSBkbGEgdHJhbnNtaXNqaSB6YXB5dGHFhCBETlMuIgorCisjOiBvcHRpb24uYzo0NTQKK21zZ2lkICJVc2Ugb25seSBmdWxseSBxdWFsaWZpZWQgZG9tYWluIG5hbWVzIGZvciBESENQIGNsaWVudHMuIgorbXNnc3RyICJQcnplY2hvd3l3YW5pZSB3IHNlcndlcnplIEROUyBkbnNtYXNxLWEgdHlsa28gdyBwZcWCbmkga3dhbGlmaWtvd2FueWNoIG5hencgemfFgmFzemFueWNoIHByemV6IGtsaWVudMOzdyBESENQLiIKKworIzogb3B0aW9uLmM6NDU1Cittc2dpZCAiR2VuZXJhdGUgaG9zdG5hbWVzIGJhc2VkIG9uIE1BQyBhZGRyZXNzIGZvciBuYW1lbGVzcyBjbGllbnRzLiIKK21zZ3N0ciAiR2VuZXJvd2FuaWUgbmF6dyBuYSBwb2RzdGF3aWUgTUFDLWFkcmVzw7N3IGRsYSBrbGllbnTDs3cgYmV6IG5hend5LiIKKworIzogb3B0aW9uLmM6NDU2Cittc2dpZCAiVXNlIHRoZXNlIERIQ1AgcmVsYXlzIGFzIGZ1bGwgcHJveGllcy4iCittc2dzdHIgIlRyYWt0b3dhbmllIHdza2F6YW55Y2ggc2Vyd2Vyw7N3IHBvxZtyZWRuaWN6xIVjeWNoIERIQ1AgamFrbyBkemlhxYJhasSFY3ljaCB3IHRyeWJpZSBcInBlxYJub21vY25pa2FcIiAoZnVsbC1wcm94eSkuIgorCisjOiBvcHRpb24uYzo0NTcKK21zZ2lkICJSZWxheSBESENQIHJlcXVlc3RzIHRvIGEgcmVtb3RlIHNlcnZlciIKK21zZ3N0ciAiUHJ6ZWthenl3YW5pZSDFvMSFZGHFhCBESENQIGRvIHpkYWxuZWdvIHNlcndlcmEiCisKKyM6IG9wdGlvbi5jOjQ1OAorbXNnaWQgIlNwZWNpZnkgYWxpYXMgbmFtZSBmb3IgTE9DQUwgRE5TIG5hbWUuIgorbXNnc3RyICJXc2themFuaWUgc3lub25pbXUgbmF6d3kga29tcHV0ZXJhIGxva2FsbmVnbyAtIHpuYW5lZ28geiAvZXRjL2hvc3RzIGFsYm8geiBESENQLiIKKworIzogb3B0aW9uLmM6NDU5Cittc2dpZCAiUHJvbXB0IHRvIHNlbmQgdG8gUFhFIGNsaWVudHMuIgorbXNnc3RyICJaZ8WCb3N6ZW5pZSB3eXN5xYJhbmUga2xpZW50b20gUFhFLiIKKworIzogb3B0aW9uLmM6NDYwCittc2dpZCAiQm9vdCBzZXJ2aWNlIGZvciBQWEUgbWVudS4iCittc2dzdHIgIlNrxYJhZG5payBtZW51IFBYRSAoLS0+IG1hbikuIgorCisjOiBvcHRpb24uYzo0NjEKK21zZ2lkICJDaGVjayBjb25maWd1cmF0aW9uIHN5bnRheC4iCittc2dzdHIgIlNwcmF3ZHplbmllIHNrxYJhZG5pLiIKKworIzogb3B0aW9uLmM6NDYyCittc2dpZCAiQWRkIHJlcXVlc3RvcidzIE1BQyBhZGRyZXNzIHRvIGZvcndhcmRlZCBETlMgcXVlcmllcy4iCittc2dzdHIgIlByemVrYXp5d2FuaWUgTUFDLWFkcmVzdSBrb21wdXRlcmEgcHl0YWrEhWNlZ28gdyBydWNodSB3eWNob2R6xIVjeW0gRE5TLiIKKworIzogb3B0aW9uLmM6NDYzCittc2dpZCAiQWRkIHNwZWNpZmllZCBJUCBzdWJuZXQgdG8gZm9yd2FyZGVkIEROUyBxdWVyaWVzLiIKK21zZ3N0ciAiWmFtaWVzemN6YW5pZSB3c2themFuZWdvIGFkcmVzdSBwb2RzaWVjaSB3IHByemVrYXp5d2FueWNoIHphcHl0YW5pYWNoIEROUy4iCisKKyM6IG9wdGlvbi5jOjQ2NAorbXNnaWQgIkFkZCBjbGllbnQgaWRlbnRpZmljYXRpb24gdG8gZm9yd2FyZGVkIEROUyBxdWVyaWVzLiIKK21zZ3N0ciAiWmFtaWVzemN6YW5pZSBpZGVudHlmaWthY2ppIHB5dGFqxIVjZWdvIHcgcHJ6ZWthenl3YW55Y2ggemFweXRhbmlhY2ggRE5TLiIKKworIzogb3B0aW9uLmM6NDY1Cittc2dpZCAiUHJveHkgRE5TU0VDIHZhbGlkYXRpb24gcmVzdWx0cyBmcm9tIHVwc3RyZWFtIG5hbWVzZXJ2ZXJzLiIKK21zZ3N0ciAiUHJ6ZWthenl3YW5pZSB3eW5pa8OzdyB3ZXJ5ZmlrYWNqaSBETlNTRUMgeiBzZXJ3ZXLDs3cgbmFkcnrEmWRueWNoLiIKKworIzogb3B0aW9uLmM6NDY2Cittc2dpZCAiQXR0ZW1wdCB0byBhbGxvY2F0ZSBzZXF1ZW50aWFsIElQIGFkZHJlc3NlcyB0byBESENQIGNsaWVudHMuIgorbXNnc3RyICJabWlhbmEgc3Bvc29idSBwcnp5ZHppZWxhbmlhIGFkcmVzw7N3IElQIG5hIHNla3dlbmN5am55LiIKKworIzogb3B0aW9uLmM6NDY3Cittc2dpZCAiQ29weSBjb25uZWN0aW9uLXRyYWNrIG1hcmsgZnJvbSBxdWVyaWVzIHRvIHVwc3RyZWFtIGNvbm5lY3Rpb25zLiIKK21zZ3N0ciAiWmFjaG93YW5pZSB6bmFjem5pa2EgcG/FgsSFY3plbmlhIHogb2RlYnJhbmVnbyB6YXB5dGFuaWEgRE5TIHcgcnVjaHUgemV3bsSZdHJ6bnltLiIKKworIzogb3B0aW9uLmM6NDY4Cittc2dpZCAiQWxsb3cgREhDUCBjbGllbnRzIHRvIGRvIHRoZWlyIG93biBERE5TIHVwZGF0ZXMuIgorbXNnc3RyICJaZXp3b2xlbmllIGtsaWVudG9tIERIQ1AgbmEgdWFrdHVhbG5pYW5pZSBERE5TLcOzdy4iCisKKyM6IG9wdGlvbi5jOjQ2OQorbXNnaWQgIlNlbmQgcm91dGVyLWFkdmVydGlzZW1lbnRzIGZvciBpbnRlcmZhY2VzIGRvaW5nIERIQ1B2NiIKK21zZ3N0ciAiWmHFgsSFY3plbmllIGFub25zb3dhbmlhIChSQSkgbmEgaW50ZXJmZWpzYWNoIHNlcnd1asSFY3ljaCBESENQdjYiCisKKyM6IG9wdGlvbi5jOjQ3MAorbXNnaWQgIlNwZWNpZnkgRFVJRF9FTi10eXBlIERIQ1B2NiBzZXJ2ZXIgRFVJRCIKK21zZ3N0ciAiT2tyZcWbbGVuaWUgREhDUHY2IERVSUQiCisKKyM6IG9wdGlvbi5jOjQ3MQorbXNnaWQgIlNwZWNpZnkgaG9zdCAoQS9BQUFBIGFuZCBQVFIpIHJlY29yZHMiCittc2dzdHIgIk9rcmXFm2xlbmllIHJla29yZMOzdyBBL0FBQUEgaSBQVFIiCisKKyM6IG9wdGlvbi5jOjQ3MgorbXNnaWQgIlNwZWNpZnkgYXJiaXRyYXJ5IEROUyByZXNvdXJjZSByZWNvcmQiCittc2dzdHIgIk9rcmXFm2xlbmllIHJla29yZHUgVFhUIgorCisjOiBvcHRpb24uYzo0NzMKK21zZ2lkICJCaW5kIHRvIGludGVyZmFjZXMgaW4gdXNlIC0gY2hlY2sgZm9yIG5ldyBpbnRlcmZhY2VzIgorbXNnc3RyICJEeW5hbWljem5lIHBvZHBpbmFuaWUgZG8gaW50ZXJmZWpzw7N3IHNpZWNpb3d5Y2giCisKKyM6IG9wdGlvbi5jOjQ3NAorbXNnaWQgIkV4cG9ydCBsb2NhbCBuYW1lcyB0byBnbG9iYWwgRE5TIgorbXNnc3RyICJFa3Nwb3J0b3dhbmllIGxva2FsbnljaCBuYXp3IGhvc3TDs3cgZG8gZ2xvYmFsbmVnbyBETlMtYSIKKworIzogb3B0aW9uLmM6NDc1Cittc2dpZCAiRG9tYWluIHRvIGV4cG9ydCB0byBnbG9iYWwgRE5TIgorbXNnc3RyICJEb21lbmEgcG9kIGt0w7NyxIUgYsSZZMSFIGVrc3BvcnRvd2FuZSBsb2thbG5lIG5hend5IgorCisjOiBvcHRpb24uYzo0NzYKK21zZ2lkICJTZXQgVFRMIGZvciBhdXRob3JpdGF0aXZlIHJlcGxpZXMiCittc2dzdHIgIk9rcmXFm2xlbmllIFRUTCBkbGEgb2Rwb3dpZWR6aSBhdXRvcnl0YXR5d255Y2giCisKKyM6IG9wdGlvbi5jOjQ3NworIywgZnV6enkKK21zZ2lkICJTZXQgYXV0aG9yaXRhdGl2ZSB6b25lIGluZm9ybWF0aW9uIgorbXNnc3RyICJPa3JlxZtsZW5pZSBkYW55Y2ggc3RyZWZ5IGF1dG9yeXRhdHl3bmVqIChTT0EpIgorCisjOiBvcHRpb24uYzo0NzgKK21zZ2lkICJTZWNvbmRhcnkgYXV0aG9yaXRhdGl2ZSBuYW1lc2VydmVycyBmb3IgZm9yd2FyZCBkb21haW5zIgorbXNnc3RyICJQb21vY25pY3plIHNlcndlcnkgYXV0b3J5dGF0eXduZSBkbGEgZm9yd2FyZG93YW55Y2ggZG9tZW4iCisKKyM6IG9wdGlvbi5jOjQ3OQorbXNnaWQgIlBlZXJzIHdoaWNoIGFyZSBhbGxvd2VkIHRvIGRvIHpvbmUgdHJhbnNmZXIiCittc2dzdHIgIldza2F6YW5pZSBzZXJ3ZXLDs3cgdXByYXduaW9ueWNoIGRvIHRyYW5zZmVydSBzdHJlZiIKKworIzogb3B0aW9uLmM6NDgwCittc2dpZCAiU3BlY2lmeSBpcHNldHMgdG8gd2hpY2ggbWF0Y2hpbmcgZG9tYWlucyBzaG91bGQgYmUgYWRkZWQiCittc2dzdHIgIld5c3pjemVnw7NsbmllbmllIGlwc2V0LcOzdywgZG8ga3TDs3J5Y2ggYsSZZMSFIGRvcGlzeXdhbmUgYWRyZXN5IElQIGxlxbzEhWNlIHdlIHdza2F6YW55Y2ggZG9tZW5hY2giCisKKyM6IG9wdGlvbi5jOjQ4MQorbXNnaWQgIlNwZWNpZnkgYSBkb21haW4gYW5kIGFkZHJlc3MgcmFuZ2UgZm9yIHN5bnRoZXNpc2VkIG5hbWVzIgorbXNnc3RyICJXc2themFuaWUgZG9tZW55IGkgemFrcmVzdSBhZHJlc8OzdyBkbGEgZ2VuZXJvd2FueWNoIG5henciCisKKyM6IG9wdGlvbi5jOjQ4MgorbXNnaWQgIkFjdGl2YXRlIEROU1NFQyB2YWxpZGF0aW9uIgorbXNnc3RyICJVYWt0eXduaWVuaWUgd2FsaWRhY2ppIEROU1NFQyIKKworIzogb3B0aW9uLmM6NDgzCittc2dpZCAiU3BlY2lmeSB0cnVzdCBhbmNob3Iga2V5IGRpZ2VzdC4iCittc2dzdHIgIldza2F6YW5pZSBwdW5rdHUgemF1ZmFuaWEgZGxhIHV3aWVyenl0ZWxuaWFuaWEgRE5TU0VDLiIKKworIzogb3B0aW9uLmM6NDg0Cittc2dpZCAiRGlzYWJsZSB1cHN0cmVhbSBjaGVja2luZyBmb3IgRE5TU0VDIGRlYnVnZ2luZy4iCittc2dzdHIgIkFrY2VwdG93YW5pZSBuaWV1d2lhcnlnb2RuaW9ueWNoIG9kcG93aWVkemkgRE5TU0VDICh1c3Rhd2llbmllIGJpdHUgQ0QgdyB6YXB5dGFuaWFjaCkuIgorCisjOiBvcHRpb24uYzo0ODUKK21zZ2lkICJFbnN1cmUgYW5zd2VycyB3aXRob3V0IEROU1NFQyBhcmUgaW4gdW5zaWduZWQgem9uZXMuIgorbXNnc3RyICJVcGV3bmlhbmllIHNpxJksIMW8ZSBvZHBvd2llZHppIGJleiBETlNTRUMgcG9jaG9kesSFIHplIHN0cmVmIG5pZXBvZHBpc2FueWNoLiIKKworIzogb3B0aW9uLmM6NDg2Cittc2dpZCAiRG9uJ3QgY2hlY2sgRE5TU0VDIHNpZ25hdHVyZSB0aW1lc3RhbXBzIHVudGlsIGZpcnN0IGNhY2hlLXJlbG9hZCIKK21zZ3N0ciAiV3nFgsSFY3plbmllIHNwcmF3ZHphbmlhIHN5Z25hdHVyIGN6YXNvd3ljaCBETlNTRUMgZG8gcGllcndzemVnbyBwcnplxYJhZG93YW5pYSBwYW1pxJljaSBwb2RyxJljem5lai4iCisKKyM6IG9wdGlvbi5jOjQ4NworbXNnaWQgIlRpbWVzdGFtcCBmaWxlIHRvIHZlcmlmeSBzeXN0ZW0gY2xvY2sgZm9yIEROU1NFQyIKK21zZ3N0ciAiUGxpayB6bmFjem5pa2EgY3phc3UgZG8gd2VyeWZpa2FjamkgemVnYXJhIHN5c3RlbW93ZWdvIGRsYSBwb3RyemViIEROU1NFQy4iCisKKyM6IG9wdGlvbi5jOjQ4OQorbXNnaWQgIlNwZWNpZnkgREhDUHY2IHByZWZpeCBjbGFzcyIKK21zZ3N0ciAiT2tyZcWbbGVuaWUgcHJlZmlrc3Uga2xhc3kgREhDUHY2IgorCisjOiBvcHRpb24uYzo0OTEKKyMsIGZ1enp5Cittc2dpZCAiU2V0IE1UVSwgcHJpb3JpdHksIHJlc2VuZC1pbnRlcnZhbCBhbmQgcm91dGVyLWxpZmV0aW1lIgorbXNnc3RyICJVc3Rhd2lhbmllIHByaW9yeXRldHUsIG9rcmVzdSByb3pzecWCYW5pYSBvcmF6IGN6YXN1IMW8eWNpYSBydXRlcmEgKFJBKS4iCisKKyM6IG9wdGlvbi5jOjQ5MgorbXNnaWQgIkRvIG5vdCBsb2cgcm91dGluZSBESENQLiIKK21zZ3N0ciAiV3nFgsSFY3plbmllIGxvZ293YW5pYSB6d3ljemFqbmVnbyBESENQLiIKKworIzogb3B0aW9uLmM6NDkzCittc2dpZCAiRG8gbm90IGxvZyByb3V0aW5lIERIQ1B2Ni4iCittc2dzdHIgIld5xYLEhWN6ZW5pZSBsb2dvd2FuaWEgend5Y3pham5lZ28gREhDUHY2LiIKKworIzogb3B0aW9uLmM6NDk0Cittc2dpZCAiRG8gbm90IGxvZyBSQS4iCittc2dzdHIgIld5xYLEhWN6ZW5pZSBsb2dvd2FuaWEgUkEuIgorCisjOiBvcHRpb24uYzo0OTUKK21zZ2lkICJBY2NlcHQgcXVlcmllcyBvbmx5IGZyb20gZGlyZWN0bHktY29ubmVjdGVkIG5ldHdvcmtzLiIKK21zZ3N0ciAiQWtjZXB0b3dhbmllIHphcHl0YcWEIHd5xYLEhWN6bmllIHogc2llY2kgcG9kcGnEmXR5Y2ggYmV6cG/Fm3JlZG5pby4iCisKKyM6IG9wdGlvbi5jOjQ5NgorbXNnaWQgIkRldGVjdCBhbmQgcmVtb3ZlIEROUyBmb3J3YXJkaW5nIGxvb3BzLiIKK21zZ3N0ciAiV3lrcnl3YW5pZSBpIHVzdXdhbmllIHDEmXRsaSB6YXB5dGHFhCBETlMuIgorCisjOiBvcHRpb24uYzo0OTcKK21zZ2lkICJJZ25vcmUgRE5TIHJlc3BvbnNlcyBjb250YWluaW5nIGlwYWRkci4iCittc2dzdHIgIklnbm9yb3dhbmllIG9kcG93aWVkemkgRE5TIHphd2llcmFqxIVjeWNoIGlwYWRkci4iCisKKyM6IG9wdGlvbi5jOjQ5OAorbXNnaWQgIlNldCBUVEwgaW4gRE5TIHJlc3BvbnNlcyB3aXRoIERIQ1AtZGVyaXZlZCBhZGRyZXNzZXMuIgorbXNnc3RyICJVc3Rhd2llbmllIFRUTCB3IG9kcG93aWVkemlhY2ggRE5TIGRsYSBhZHJlc8OzdyBwcnp5ZHppZWxvbnljaCBwcnpleiBESENQLiIKKworIzogb3B0aW9uLmM6NDk5Cittc2dpZCAiRGVsYXkgREhDUCByZXBsaWVzIGZvciBhdCBsZWFzdCBudW1iZXIgb2Ygc2Vjb25kcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogZG5zbWFzcSBbb3B0aW9uc11cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlXFvHljaWU6IGRuc21hc3EgW29wY2plXVxuIgorIlxuIgorCisjOiBvcHRpb24uYzo3MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNlIHNob3J0IG9wdGlvbnMgb25seSBvbiB0aGUgY29tbWFuZCBsaW5lLlxuIgorbXNnc3RyICJXIHR5bSBzeXN0ZW1pZSB3IGxpbmlpIHBvbGVjZcWEIG1vxbxuYSB1xbx5d2HEhyB3ecWCxIVjem5pZSBqZWRub2xpdGVyb3d5Y2ggb3BjamkuXG4iCisKKyM6IG9wdGlvbi5jOjcwNworIywgYy1mb3JtYXQKK21zZ2lkICJWYWxpZCBvcHRpb25zIGFyZTpcbiIKK21zZ3N0ciAiRG9zdMSZcG5lIG9wY2plOlxuIgorCisjOiBvcHRpb24uYzo3NTQgb3B0aW9uLmM6ODY4Cittc2dpZCAiYmFkIGFkZHJlc3MiCittc2dzdHIgInrFgnkgYWRyZXMiCisKKyM6IG9wdGlvbi5jOjc3OSBvcHRpb24uYzo3ODMKK21zZ2lkICJiYWQgcG9ydCIKK21zZ3N0ciAibmllcHJhd2lkxYJvd3kgbnVtZXIgcG9ydHUiCisKKyM6IG9wdGlvbi5jOjc5NyBvcHRpb24uYzo4MjYgb3B0aW9uLmM6ODYxCittc2dpZCAiaW50ZXJmYWNlIGJpbmRpbmcgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAibmllIG1hIG1vxbxsaXdvxZtjaSBkb3dpxIV6eXdhbmlhIGRvIGludGVyZmVqc3UiCisKKyM6IG9wdGlvbi5jOjgyMSBvcHRpb24uYzo4NTYKK21zZ2lkICJpbnRlcmZhY2UgY2FuIG9ubHkgYmUgc3BlY2lmaWVkIG9uY2UiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6ODM1IG9wdGlvbi5jOjM4MDAKK21zZ2lkICJiYWQgaW50ZXJmYWNlIG5hbWUiCittc2dzdHIgIm5pZXByYXdpZMWCb3dhIG5hendhIGludGVyZmVqc3UiCisKKyM6IG9wdGlvbi5jOjEwNjIKK21zZ2lkICJ1bnN1cHBvcnRlZCBlbmNhcHN1bGF0aW9uIGZvciBJUHY2IG9wdGlvbiIKK21zZ3N0ciAibmllb2JzxYJ1Z2l3YW55IHJvZHphaiBlbmthcHN1bGFjamkgb3BjamkgSVB2NiIKKworIzogb3B0aW9uLmM6MTA3NgorbXNnaWQgImJhZCBkaGNwLW9wdGlvbiIKK21zZ3N0ciAiYsWCxIVkIHcgZGhjcC1vcHRpb24iCisKKyM6IG9wdGlvbi5jOjExNDQKK21zZ2lkICJiYWQgSVAgYWRkcmVzcyIKK21zZ3N0ciAiesWCeSBhZHJlcyBJUCIKKworIzogb3B0aW9uLmM6MTE0NyBvcHRpb24uYzoxMjg2IG9wdGlvbi5jOjMwNzAKK21zZ2lkICJiYWQgSVB2NiBhZGRyZXNzIgorbXNnc3RyICJ6xYJ5IGFkcmVzIElQdjYiCisKKyM6IG9wdGlvbi5jOjEyNDAKK21zZ2lkICJiYWQgSVB2NCBhZGRyZXNzIgorbXNnc3RyICJuaWVwcmF3aWTFgm93eSBhZHJlcyBJUHY0IgorCisjOiBvcHRpb24uYzoxMzEzIG9wdGlvbi5jOjE0MDcKK21zZ2lkICJiYWQgZG9tYWluIGluIGRoY3Atb3B0aW9uIgorbXNnc3RyICJuaWVwcmF3aWTFgm93YSBuYXp3YSBkb21lbnkgdyBkaGNwLW9wdGlvbiIKKworIzogb3B0aW9uLmM6MTQ0NQorbXNnaWQgImRoY3Atb3B0aW9uIHRvbyBsb25nIgorbXNnc3RyICJ6Ynl0IGTFgnVnYSBkaGNwLW9wdGlvbiAoPjI1NSB6bmFrw7N3KSIKKworIzogb3B0aW9uLmM6MTQ1MgorbXNnaWQgImlsbGVnYWwgZGhjcC1tYXRjaCIKK21zZ3N0ciAibmllZG9wdXN6Y3phbG5lIGRoY3AtbWF0Y2giCisKKyM6IG9wdGlvbi5jOjE1MTQKK21zZ2lkICJpbGxlZ2FsIHJlcGVhdGVkIGZsYWciCittc2dzdHIgIndpZWxva3JvdG5lIHXFvHljaWUgb3BjamkgbmllZG96d29sb25lIChwb2phd2nFgmEgc2nEmSB3Y3plxZtuaWVqIHcgbGluaWkgcG9sZWNlxYQpIgorCisjOiBvcHRpb24uYzoxNTIyCittc2dpZCAiaWxsZWdhbCByZXBlYXRlZCBrZXl3b3JkIgorbXNnc3RyICJ3aWVsb2tyb3RuZSB1xbx5Y2llIG9wY2ppIG5pZWRvendvbG9uZSAocG9qYXdpxYJhIHNpxJkgd3N6ZcWbbmllaiB3IHBsaWt1IGtvbmZpZ3VyYWN5am55bSkiCisKKyM6IG9wdGlvbi5jOjE1OTMgb3B0aW9uLmM6NDQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgYWNjZXNzIGRpcmVjdG9yeSAlczogJXMiCittc2dzdHIgImJyYWsgZG9zdMSZcHUgZG8ga2F0YWxvZ3UgJXM6ICVzIgorCisjOiBvcHRpb24uYzoxNjM5IHRmdHAuYzo1MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGFjY2VzcyAlczogJXMiCittc2dzdHIgImJyYWsgZG9zdMSZcHUgZG8gJXM6ICVzIgorCisjOiBvcHRpb24uYzoxNzI3Cittc2dpZCAic2V0dGluZyBsb2cgZmFjaWxpdHkgaXMgbm90IHBvc3NpYmxlIHVuZGVyIEFuZHJvaWQiCittc2dzdHIgInptaWFuYSBsb2ctZmFjaWxpdHkgdyBzeXN0ZW1pZSBBbmRyb2lkIG5pZSBqZXN0IG1vxbxsaXdhIgorCisjOiBvcHRpb24uYzoxNzM2Cittc2dpZCAiYmFkIGxvZyBmYWNpbGl0eSIKK21zZ3N0ciAibmllcm96cG96bmFueSB6bmFjem5payBsb2fDs3ciCisKKyM6IG9wdGlvbi5jOjE3ODkKK21zZ2lkICJiYWQgTVggcHJlZmVyZW5jZSIKK21zZ3N0ciAibmllcHJhd2lkxYJvd2Egd2FydG/Fm8SHIHByZWZlcmVuY2ppIE1YIgorCisjOiBvcHRpb24uYzoxNzk0Cittc2dpZCAiYmFkIE1YIG5hbWUiCittc2dzdHIgIm5pZXByYXdpZMWCb3dhIG5hendhIE1YIgorCisjOiBvcHRpb24uYzoxODA4Cittc2dpZCAiYmFkIE1YIHRhcmdldCIKK21zZ3N0ciAibmllcHJhd2lkxYJvd2Egd2FydG/Fm8SHIGNlbHUgTVgiCisKKyM6IG9wdGlvbi5jOjE4MjAKK21zZ2lkICJjYW5ub3QgcnVuIHNjcmlwdHMgdW5kZXIgdUNsaW51eCIKK21zZ3N0ciAidyB1Q2xpbnVrc2llIG5pZSBtYSBtb8W8bGl3b8WbY2kgdXJ1Y2hhbWlhbmlhIHNrcnlwdMOzdyIKKworIzogb3B0aW9uLmM6MTgyMgorbXNnaWQgInJlY29tcGlsZSB3aXRoIEhBVkVfU0NSSVBUIGRlZmluZWQgdG8gZW5hYmxlIGxlYXNlLWNoYW5nZSBzY3JpcHRzIgorbXNnc3RyICLFvGVieSBtaWXEhyBtb8W8bGl3b8WbxIcgdcW8eXdhbmlhIHNrcnlwdMOzdyB3eXdvxYJ5d2FueWNoIHByenkgem1pYW5pZSBkemllcsW8YXd5LCBwcnpla29tcGlsdWogZG5zbWFzcS1hIHogd8WCxIVjem9uxIUgZmxhZ8SFIEhBVkVfU0NSSVBUIgorCisjOiBvcHRpb24uYzoxODI2Cittc2dpZCAicmVjb21waWxlIHdpdGggSEFWRV9MVUFTQ1JJUFQgZGVmaW5lZCB0byBlbmFibGUgTHVhIHNjcmlwdHMiCittc2dzdHIgInXFvHl3YW5pZSBza3J5cHTDs3cgTHVhLCB3eW1hZ2Egc2tvbXBpbG93YW5pYSBkbnNtYXNxLWEgeiBmbGFnxIUgSEFWRV9MVUFTQ1JJUFQiCisKKyM6IG9wdGlvbi5jOjIwOTUgb3B0aW9uLmM6MjEwNiBvcHRpb24uYzoyMTQzIG9wdGlvbi5jOjIxOTkgb3B0aW9uLmM6MjQ4MgorbXNnaWQgImJhZCBwcmVmaXgiCittc2dzdHIgInrFgmEgbWFza2EiCisKKyM6IG9wdGlvbi5jOjI1MDQKK21zZ2lkICJyZWNvbXBpbGUgd2l0aCBIQVZFX0lQU0VUIGRlZmluZWQgdG8gZW5hYmxlIGlwc2V0IGRpcmVjdGl2ZXMiCittc2dzdHIgImNoY8SFYyBrb3J6eXN0YcSHIHogaXBzZXRzIHByemVrb21waWx1aiBkbnNtYXNxLWEgeiBIQVZFX0lQU0VUIgorCisjOiBvcHRpb24uYzoyNzEzCittc2dpZCAiYmFkIHBvcnQgcmFuZ2UiCittc2dzdHIgIm5pZXByYXdpZMWCb3d5IHpha3JlcyBudW1lcsOzdyBwb3J0w7N3IgorCisjOiBvcHRpb24uYzoyNzM4Cittc2dpZCAiYmFkIGJyaWRnZS1pbnRlcmZhY2UiCittc2dzdHIgIm5pZXByYXdpZMWCb3dhIG5hendhIHVyesSFZHplbmlhIHcgYnJpZGdlLWludGVyZmFjZSIKKworIzogb3B0aW9uLmM6Mjc5OAorbXNnaWQgIm9ubHkgb25lIHRhZyBhbGxvd2VkIgorbXNnc3RyICJtb8W8bmEgd3NrYXphxIcgdHlsa28gamVkZW4gem5hY3puaWsgc2llY2kiCisKKyM6IG9wdGlvbi5jOjI4MTggb3B0aW9uLmM6MjgzMCBvcHRpb24uYzoyOTM5IG9wdGlvbi5jOjI5NDQgb3B0aW9uLmM6Mjk4MworbXNnaWQgImJhZCBkaGNwLXJhbmdlIgorbXNnc3RyICJuaWVwcmF3aWTFgm93eSB6YWtyZXMgZGhjcC1yYW5nZSIKKworIzogb3B0aW9uLmM6Mjg0NQorbXNnaWQgImluY29uc2lzdGVudCBESENQIHJhbmdlIgorbXNnc3RyICJuaWVzcMOzam55IHpha3JlcyBhZHJlc8OzdyBESENQIgorCisjOiBvcHRpb24uYzoyOTA3Cittc2dpZCAicHJlZml4IGxlbmd0aCBtdXN0IGJlIGV4YWN0bHkgNjQgZm9yIFJBIHN1Ym5ldHMiCittc2dzdHIgImTFgnVnb8WbxIcgcHJlZmlrc3UgbXVzaSB3eW5vc2nEhyBkb2vFgmFkbmllIDY0IGRsYSBwb2RzaWVjaSBSQSIKKworIzogb3B0aW9uLmM6MjkwOQorbXNnaWQgInByZWZpeCBsZW5ndGggbXVzdCBiZSBleGFjdGx5IDY0IGZvciBzdWJuZXQgY29uc3RydWN0b3JzIgorbXNnc3RyICJkxYJ1Z2/Fm8SHIHByZWZpa3N1IG11c2kgd3lub3NpxIcgZG9rxYJhZG5pZSA2NCBkbGEga29uc3RydWt0b3LDs3cgcG9kc2llY2kiCisKKyM6IG9wdGlvbi5jOjI5MTMKK21zZ2lkICJwcmVmaXggbGVuZ3RoIG11c3QgYmUgYXQgbGVhc3QgNjQiCittc2dzdHIgImTFgnVnb8WbxIcgcHJlZmlrc3UgbXVzaSB3eW5vc2nEhyBjbyBuYWptbmllaiA2NCIKKworIzogb3B0aW9uLmM6MjkxNgorbXNnaWQgImluY29uc2lzdGVudCBESENQdjYgcmFuZ2UiCittc2dzdHIgIm5pZXNww7NqbnkgemFrcmVzIGFkcmVzw7N3IERIQ1B2NiIKKworIzogb3B0aW9uLmM6MjkyNworbXNnaWQgInByZWZpeCBtdXN0IGJlIHplcm8gd2l0aCBcImNvbnN0cnVjdG9yOlwiIGFyZ3VtZW50IgorbXNnc3RyICJwcmVmaWtzIG11c2kgd3lub3NpxIcgemVybyB6IGFyZ3VtZW50ZW0gXCJjb25zdHJ1Y3RvcjpcIiIKKworIzogb3B0aW9uLmM6MzA0MCBvcHRpb24uYzozMDg4Cittc2dpZCAiYmFkIGhleCBjb25zdGFudCIKK21zZ3N0ciAiemFwaXMgbmllemdvZG55IHogZm9ybWF0ZW0gc3plc25hc3Rrb3d5bSIKKworIzogb3B0aW9uLmM6MzA2MgorbXNnaWQgImNhbm5vdCBtYXRjaCB0YWdzIGluIC0tZGhjcC1ob3N0IgorbXNnc3RyICItLWRoY3AtaG9zdCBuaWUgZG9wdXN6Y3phIGRvcGFzb3d5d2FuaWEgbmEgcG9kc3Rhd2llIHpuYWN6bmlrw7N3IgorCisjOiBvcHRpb24uYzozMTEwCisjLCBjLWZvcm1hdAorbXNnaWQgImR1cGxpY2F0ZSBkaGNwLWhvc3QgSVAgYWRkcmVzcyAlcyIKK21zZ3N0ciAicG93dMOzcnpvbnkgYWRyZXMgSVAgJXMgdyBzcGVjeWZpa2FjamkgZGhjcC1ob3N0IgorCisjOiBvcHRpb24uYzozMTY4Cittc2dpZCAiYmFkIERIQ1AgaG9zdCBuYW1lIgorbXNnc3RyICJuaWVkb3B1c3pjemFsbmEgbmF6d2Ega29tcHV0ZXJhIHcgZGhjcC1ob3N0IgorCisjOiBvcHRpb24uYzozMjUwCittc2dpZCAiYmFkIHRhZy1pZiIKK21zZ3N0ciAibmllcHJhd2lkxYJvd2Egc2vFgmFkbmlhICd0YWctaWYnIgorCisjOiBvcHRpb24uYzozNjA3IG9wdGlvbi5jOjQwMzAKK21zZ2lkICJpbnZhbGlkIHBvcnQgbnVtYmVyIgorbXNnc3RyICJuaWVwcmF3aWTFgm93eSBudW1lciBwb3J0dSIKKworIzogb3B0aW9uLmM6MzY2OQorbXNnaWQgImJhZCBkaGNwLXByb3h5IGFkZHJlc3MiCittc2dzdHIgInrFgnkgYWRyZXMgZGhjcC1wcm94eSIKKworIzogb3B0aW9uLmM6MzY5NQorbXNnaWQgIkJhZCBkaGNwLXJlbGF5IgorbXNnc3RyICJ6xYJ5IGRoY3AtcmVsYXkiCisKKyM6IG9wdGlvbi5jOjM3MzYKK21zZ2lkICJiYWQgUkEtcGFyYW1zIgorbXNnc3RyICJuaWVwcmF3aWTFgm93ZSBhcmd1bWVudHkgUkEiCisKKyM6IG9wdGlvbi5jOjM3NDUKK21zZ2lkICJiYWQgRFVJRCIKK21zZ3N0ciAiesWCeSBEVUlEIgorCisjOiBvcHRpb24uYzozNzg3Cittc2dpZCAiaW52YWxpZCBhbGlhcyByYW5nZSIKK21zZ3N0ciAibmllcHJhd2lkxYJvd3kgemFrcmVzIGFkcmVzw7N3IHcgLS1hbGlhcyIKKworIzogb3B0aW9uLmM6Mzg0MSBvcHRpb24uYzozODUzCittc2dpZCAiYmFkIENOQU1FIgorbXNnc3RyICJ6xYJhIENOQU1FIgorCisjOiBvcHRpb24uYzozODU3Cittc2dpZCAiZHVwbGljYXRlIENOQU1FIgorbXNnc3RyICJwb3d0w7Nyem9uYSBDTkFNRSIKKworIzogb3B0aW9uLmM6Mzg4MAorbXNnaWQgImJhZCBQVFIgcmVjb3JkIgorbXNnc3RyICJuaWVwcmF3aWTFgm93eSB6YXBpcyByZWtvcmR1IFBUUiIKKworIzogb3B0aW9uLmM6MzkxMQorbXNnaWQgImJhZCBOQVBUUiByZWNvcmQiCittc2dzdHIgIm5pZXByYXdpZMWCb3d5IHphcGlzIHJla29yZHUgTkFQVFIiCisKKyM6IG9wdGlvbi5jOjM5NDUKK21zZ2lkICJiYWQgUlIgcmVjb3JkIgorbXNnc3RyICJuaWVwcmF3aWTFgm93eSB6YXBpcyByZWtvcmR1IFJSIgorCisjOiBvcHRpb24uYzozOTc1Cittc2dpZCAiYmFkIFRYVCByZWNvcmQiCittc2dzdHIgIm5pZXByYXdpZMWCb3d5IHphcGlzIHJla29yZHUgVFhUIgorCisjOiBvcHRpb24uYzo0MDE2Cittc2dpZCAiYmFkIFNSViByZWNvcmQiCittc2dzdHIgIm5pZXByYXdpZMWCb3d5IHphcGlzIHJla29yZHUgU1JWIgorCisjOiBvcHRpb24uYzo0MDIzCittc2dpZCAiYmFkIFNSViB0YXJnZXQiCittc2dzdHIgIm5pZXByYXdpZMWCb3dhIHdhcnRvxZvEhyBjZWx1IFNSViIKKworIzogb3B0aW9uLmM6NDAzNworbXNnaWQgImludmFsaWQgcHJpb3JpdHkiCittc2dzdHIgIm5pZXByYXdpZMWCb3d5IHByaW9yeXRldCIKKworIzogb3B0aW9uLmM6NDA0MAorbXNnaWQgImludmFsaWQgd2VpZ2h0IgorbXNnc3RyICJuaWVwcmF3aWTFgm93YSB3YWdhIgorCisjOiBvcHRpb24uYzo0MDY0Cittc2dpZCAiQmFkIGhvc3QtcmVjb3JkIgorbXNnc3RyICJuaWVwcmF3aWTFgm93eSB6YXBpcyBob3N0LXJlY29yZCIKKworIzogb3B0aW9uLmM6NDA4OAorbXNnaWQgIkJhZCBuYW1lIGluIGhvc3QtcmVjb3JkIgorbXNnc3RyICJuaWVkb3B1c3pjemFsbmEgbmF6d2EgdyBob3N0LXJlY29yZCIKKworIzogb3B0aW9uLmM6NDE1MworbXNnaWQgImJhZCB0cnVzdCBhbmNob3IiCittc2dzdHIgIm5pZXByYXdpZMWCb3dhIHNwZWN5ZmlrYWNqYSBwdW5rdHUgemF1ZmFuaWEiCisKKyM6IG9wdGlvbi5jOjQxNjcKK21zZ2lkICJiYWQgSEVYIGluIHRydXN0IGFuY2hvciIKK21zZ3N0ciAiesWCeSB6YXBpcyBzemVzbmFzdGtvd3kiCisKKyM6IG9wdGlvbi5jOjQxNzcKK21zZ2lkICJ1bnN1cHBvcnRlZCBvcHRpb24gKGNoZWNrIHRoYXQgZG5zbWFzcSB3YXMgY29tcGlsZWQgd2l0aCBESENQL1RGVFAvRE5TU0VDL0RCdXMgc3VwcG9ydCkiCittc2dzdHIgIm5pZW9ic8WCdWdpd2FuYSBvcGNqYSAoc3ByYXdkxbosIGN6eSBvYnPFgnVnYSBESENQL1RGVFAvRE5TU0VDL0RCdXMgem9zdGHFgmEgd2tvbXBpbG93YW5hKSIKKworIzogb3B0aW9uLmM6NDIzNworbXNnaWQgIm1pc3NpbmcgXCIiCittc2dzdHIgImJyYWt1amUgXCIiCisKKyM6IG9wdGlvbi5jOjQyOTQKK21zZ2lkICJiYWQgb3B0aW9uIgorbXNnc3RyICJuaWVwcmF3aWTFgm93YSBvcGNqYSIKKworIzogb3B0aW9uLmM6NDI5NgorbXNnaWQgImV4dHJhbmVvdXMgcGFyYW1ldGVyIgorbXNnc3RyICJuYWR3ecW8a293eSBwYXJhbWV0ciIKKworIzogb3B0aW9uLmM6NDI5OAorbXNnaWQgIm1pc3NpbmcgcGFyYW1ldGVyIgorbXNnc3RyICJicmFrIHBhcmFtZXRydSIKKworIzogb3B0aW9uLmM6NDMwMAorbXNnaWQgImlsbGVnYWwgb3B0aW9uIgorbXNnc3RyICJuaWVkb3B1c3pjemFsbmEgb3BjamEiCisKKyM6IG9wdGlvbi5jOjQzMDcKK21zZ2lkICJlcnJvciIKK21zZ3N0ciAiYsWCxIVkIgorCisjOiBvcHRpb24uYzo0MzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiBhdCBsaW5lICVkIG9mICVzIgorbXNnc3RyICIgdyBsaW5paSAlZCBwbGlrdSAlcyIKKworIzogb3B0aW9uLmM6NDMyNCBvcHRpb24uYzo0NTcxIG9wdGlvbi5jOjQ2MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCAlcyIKK21zZ3N0ciAicHJ6ZWN6eXRhxYJlbSAlcyIKKworIzogb3B0aW9uLmM6NDM4NyBvcHRpb24uYzo0NTEwIHRmdHAuYzo3MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJXM6ICVzIgorbXNnc3RyICJixYLEhWQgb2Rjenl0dSB6IHBsaWt1ICVzOiAlcyIKKworIzogb3B0aW9uLmM6NDY3NgorbXNnaWQgImp1bmsgZm91bmQgaW4gY29tbWFuZCBsaW5lIgorbXNnc3RyICJqYWtpZcWbIMWbbWllY2kgdyBsaW5paSBwb2xlY2XFhCIKKworIzogb3B0aW9uLmM6NDcxMQorIywgYy1mb3JtYXQKK21zZ2lkICJEbnNtYXNxIHZlcnNpb24gJXMgICVzXG4iCittc2dzdHIgIkRuc21hc3EsIHdlcnNqYSAlcyAgJXNcbiIKKworIzogb3B0aW9uLmM6NDcxMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ29tcGlsZSB0aW1lIG9wdGlvbnM6ICVzXG4iCisiXG4iCittc2dzdHIgIiIKKyJXa29tcGlsb3dhbmUgb3BjamUgJXNcbiIKKyJcbiIKKworIzogb3B0aW9uLmM6NDcxMworIywgYy1mb3JtYXQKK21zZ2lkICJUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS5cbiIKK21zZ3N0ciAiQXV0b3IgbmllIGRhamUgxbtBRE5ZQ0ggR1dBUkFOQ0pJIGVnemVrd293YWxueWNoIHByYXduaWUuXG4iCisKKyM6IG9wdGlvbi5jOjQ3MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG5zbWFzcSBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdFxuIgorbXNnc3RyICJEbnNtYXNxIGplc3Qgd29sbnltIG9wcm9ncmFtb3dhbmllbSwgbW/FvGVzeiBnbyByb3pwcm93YWR6YcSHXG4iCisKKyM6IG9wdGlvbi5jOjQ3MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyIG9yIDMuXG4iCittc2dzdHIgIm5hIHdhcnVua2FjaCBva3JlxZtsb255Y2ggdyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5jZSwgdyB3ZXJzamkgMiBsdWIgMy5cbiIKKworIzogb3B0aW9uLmM6NDcyNgorbXNnaWQgInRyeSAtLWhlbHAiCittc2dzdHIgInNwcsOzYnVqOiAtLWhlbHAiCisKKyM6IG9wdGlvbi5jOjQ3MjgKK21zZ2lkICJ0cnkgLXciCittc2dzdHIgInNwcsOzYnVqOiAtdyIKKworIzogb3B0aW9uLmM6NDczMAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29tbWFuZCBsaW5lIG9wdGlvbnM6ICVzIgorbXNnc3RyICJuaWVwcmF3aWTFgm93YSBvcGNqYSB3IGxpbmlpIHBvbGVjZcWEICVzIgorCisjOiBvcHRpb24uYzo0Nzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNOQU1FIGxvb3AgaW52b2x2aW5nICVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ4MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGdldCBob3N0LW5hbWU6ICVzIgorbXNnc3RyICJuaWUgbW/FvG5hIHBvYnJhxIcgbmF6d3kgaG9zdGE6ICVzIgorCisjOiBvcHRpb24uYzo0ODYyCittc2dpZCAib25seSBvbmUgcmVzb2x2LmNvbmYgZmlsZSBhbGxvd2VkIGluIG5vLXBvbGwgbW9kZS4iCittc2dzdHIgIncgdHJ5YmllIG5vLXBvbGwgbW/FvG5hIHdza2F6YcSHIG5hand5xbxlaiBqZWRlbiBwbGlrIHJlc29sdi5jb25mLiIKKworIzogb3B0aW9uLmM6NDg3MgorbXNnaWQgIm11c3QgaGF2ZSBleGFjdGx5IG9uZSByZXNvbHYuY29uZiB0byByZWFkIGRvbWFpbiBmcm9tLiIKK21zZ3N0ciAibXVzaXN6IG1pZcSHIGRva8WCYWRuaWUgamVkZW4gcGxpayByZXNvbHYuY29uZiBkbyBvZGN6eXR1IGRvbWVuLiIKKworIzogb3B0aW9uLmM6NDg3NSBuZXR3b3JrLmM6MTYxMiBkaGNwLmM6ODE2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkICVzOiAlcyIKK21zZ3N0ciAibmllIHVkYcWCbyBzacSZIG9kY3p5dGHEhyAlczogJXMiCisKKyM6IG9wdGlvbi5jOjQ4OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc2VhcmNoIGRpcmVjdGl2ZSBmb3VuZCBpbiAlcyIKK21zZ3N0ciAiYnJhayB3eXR5Y3pueWNoIHd5c3p1a2l3YW5pYSB3ICVzIgorCisjOiBvcHRpb24uYzo0OTEzCittc2dpZCAidGhlcmUgbXVzdCBiZSBhIGRlZmF1bHQgZG9tYWluIHdoZW4gLS1kaGNwLWZxZG4gaXMgc2V0IgorbXNnc3RyICJ3IHByenlwYWRrdSB1xbx5d2FuaWEgLS1kaGNwLWZxZG4gdHJ6ZWJhIHdza2F6YcSHIGRvbXnFm2xuxIUgZG9tZW7EmSIKKworIzogb3B0aW9uLmM6NDkyMgorbXNnaWQgInN5bnRheCBjaGVjayBPSyIKK21zZ3N0ciAic2vFgmFkbmlhIHNwcmF3ZHpvbmEsIGplc3QgcHJhd2lkxYJvd2EiCisKKyM6IGZvcndhcmQuYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNlbmQgcGFja2V0OiAlcyIKK21zZ3N0ciAid3lzecWCYW5pZSBwYWtpZXR1IG5pZSBwb3dpb2TFgm8gc2nEmTogJXMiCisKKyM6IGZvcndhcmQuYzo1OTcKK21zZ2lkICJkaXNjYXJkaW5nIEROUyByZXBseTogc3VibmV0IG9wdGlvbiBtaXNtYXRjaCIKK21zZ3N0ciAib2RyenVjYW0gb2Rwb3dpZWTFuiBETlM6IG5pZSB6Z2FkemEgc2nEmSBzcGVjeWZpa2FjamEgcG9kc2llY2kiCisKKyM6IGZvcndhcmQuYzo2NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibmFtZXNlcnZlciAlcyByZWZ1c2VkIHRvIGRvIGEgcmVjdXJzaXZlIHF1ZXJ5IgorbXNnc3RyICJzZXJ3ZXIgbmF6dyAlcyBvZG1hd2lhIHd5a29uYW5pYSB6YXB5dGFuaWEgcmVrdXJlbmN5am5lZ28iCisKKyM6IGZvcndhcmQuYzo2ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAicG9zc2libGUgRE5TLXJlYmluZCBhdHRhY2sgZGV0ZWN0ZWQ6ICVzIgorbXNnc3RyICJwcmF3ZG9wb2RvYm5pZSB3eWtyeXRvIGF0YWsgRE5TLXJlYmluZDogJXMiCisKKyM6IGZvcndhcmQuYzoxMjQ0IGZvcndhcmQuYzoxNjgxCittc2dpZCAiSWdub3JpbmcgcXVlcnkgZnJvbSBub24tbG9jYWwgbmV0d29yayIKK21zZ3N0ciAiSWdub3Jvd2FuaWUgemFweXRhxYQgeiBzaWVjaSBwb3phbG9rYWxueWNoLiIKKworIzogZm9yd2FyZC5jOjIxNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCBETlMgcXVlcmllcyByZWFjaGVkIChtYXg6ICVkKSIKK21zZ3N0ciAiT3NpxIVnbmnEmXRvIGdyYW5pY3puxIUgaWxvxZvEhyBqZWRub2N6ZcWbbmllIG9ic8WCdWdpd2FueWNoIHphcHl0YcWEIEROUyAobWFrczogJWQpIgorCisjOiBuZXR3b3JrLmM6NzIwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgbGlzdGVuaW5nIHNvY2tldCBmb3IgJXM6ICVzIgorbXNnc3RyICJuaWUgdWRhxYJvIHNpxJkgb3R3b3J6ecSHIGduaWF6ZGEgJXM6ICVzIgorCisjOiBuZXR3b3JrLmM6MTAzMQorIywgYy1mb3JtYXQKK21zZ2lkICJMT1VEIFdBUk5JTkc6IGxpc3RlbmluZyBvbiAlcyBtYXkgYWNjZXB0IHJlcXVlc3RzIHZpYSBpbnRlcmZhY2VzIG90aGVyIHRoYW4gJXMiCittc2dzdHIgIlVXQUdBOiBuYXPFgnVjaGl3YW5pZSBuYSAlcyBtb8W8ZSBwcnp5am1vd2HEhyDFvMSFZGFuaWEgcHJ6eWNob2R6xIVjZSBwcnpleiBpbnRlcmZlanN5IGlubmUgbmnFvCAlcyIKKworIzogbmV0d29yay5jOjEwMzgKK21zZ2lkICJMT1VEIFdBUk5JTkc6IHVzZSAtLWJpbmQtZHluYW1pYyByYXRoZXIgdGhhbiAtLWJpbmQtaW50ZXJmYWNlcyB0byBhdm9pZCBETlMgYW1wbGlmaWNhdGlvbiBhdHRhY2tzIHZpYSB0aGVzZSBpbnRlcmZhY2UocykiCittc2dzdHIgIlVXQUdBOiB6YXN0b3Nvd2FuaWUgLS1iaW5kLWR5bmFtaWMgemFtaWFzdCAtLWJpbmQtaW50ZXJmYWNlcyBkYWplIG9jaHJvbsSZIHByemVkIGF0YWthbWkgd3ptb2NuaWVuaWEgRE5TIgorCisjOiBuZXR3b3JrLmM6MTA0NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogdXNpbmcgaW50ZXJmYWNlICVzIGluc3RlYWQiCittc2dzdHIgInV3YWdhOiAlcyBuaWVkb3N0xJlwbnkiCisKKyM6IG5ldHdvcmsuYzoxMDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IG5vIGFkZHJlc3NlcyBmb3VuZCBmb3IgaW50ZXJmYWNlICVzIgorbXNnc3RyICJ1d2FnYTogbmllIHpuYWxlemlvbm8gYWRyZXN1IGludGVyZmVqc3UgJXMiCisKKyM6IG5ldHdvcmsuYzoxMTE0CisjLCBjLWZvcm1hdAorbXNnaWQgImludGVyZmFjZSAlcyBmYWlsZWQgdG8gam9pbiBESENQdjYgbXVsdGljYXN0IGdyb3VwOiAlcyIKK21zZ3N0ciAiaW50ZXJmZWpzICVzIG5pZSBwb3p3b2xpxYIgc2nEmSBwcnp5xYLEhWN6ecSHIGRvIGdydXB5IHJvemfFgm9zemVuaW93ZWogREhDUHY2OiAlcyIKKworIzogbmV0d29yay5jOjExMTkKK21zZ2lkICJ0cnkgaW5jcmVhc2luZyAvcHJvYy9zeXMvbmV0L2NvcmUvb3B0bWVtX21heCIKK21zZ3N0ciAic3Byw7NidWogcG9kd3nFvHN6ecSHIC9wcm9jL3N5cy9uZXQvY29yZS9vcHRtZW1fbWF4IgorCisjOiBuZXR3b3JrLmM6MTMyMgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYmluZCBzZXJ2ZXIgc29ja2V0IGZvciAlczogJXMiCittc2dzdHIgImLFgsSFZCBwcnp5IHByenl6bmF3YW5pdSBuYXp3eSBnbmlhemR1IHNlcndlcmEgJXM6ICVzIgorCisjOiBuZXR3b3JrLmM6MTUxNworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBuYW1lc2VydmVyICVzIC0gbG9jYWwgaW50ZXJmYWNlIgorbXNnc3RyICJpZ25vcm93YW5pZSBzZXJ3ZXJhIG5hencgJXMgLSBpbnRlcmZlanMgbG9rYWxueSIKKworIzogbmV0d29yay5jOjE1MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgbmFtZXNlcnZlciAlcyAtIGNhbm5vdCBtYWtlL2JpbmQgc29ja2V0OiAlcyIKK21zZ3N0ciAiaWdub3Jvd2FuaWUgc2Vyd2VyYSBuYXp3ICVzIC0gbmllIG1vxbxuYSB1dHdvcnp5xIcvZG93acSFemHEhyBnbmlhemRhOiAlcyIKKworIzogbmV0d29yay5jOjE1NDgKK21zZ2lkICIobm8gRE5TU0VDKSIKK21zZ3N0ciAiKGJyYWsgb2JzxYJ1Z2kgRE5TU0VDKSIKKworIzogbmV0d29yay5jOjE1NTEKK21zZ2lkICJ1bnF1YWxpZmllZCIKK21zZ3N0ciAibmlla3dhbGlmaWtvd2FuZSgtYSkiCisKKyM6IG5ldHdvcmsuYzoxNTUxCittc2dpZCAibmFtZXMiCittc2dzdHIgIm5hend5IgorCisjOiBuZXR3b3JrLmM6MTU1MworbXNnaWQgImRlZmF1bHQiCittc2dzdHIgImRvbXnFm2xuZSIKKworIzogbmV0d29yay5jOjE1NTUKK21zZ2lkICJkb21haW4iCittc2dzdHIgImRvbWVueSIKKworIzogbmV0d29yay5jOjE1NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgbG9jYWwgYWRkcmVzc2VzIG9ubHkgZm9yICVzICVzIgorbXNnc3RyICJ1xbx5d2FtIGFkcmVzw7N3IGxva2FsbnljaCB0eWxrbyBkbGEgJXMgJXMiCisKKyM6IG5ldHdvcmsuYzoxNTY0CisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIHN0YW5kYXJkIG5hbWVzZXJ2ZXJzIGZvciAlcyAlcyIKK21zZ3N0ciAidcW8eXdhbSBzdGFuZGFyZG93eWNoIHNlcndlcsOzdyBuYXp3IGRsYSAlcyAlcyIKKworIzogbmV0d29yay5jOjE1NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgbmFtZXNlcnZlciAlcyMlZCBmb3IgJXMgJXMgJXMiCittc2dzdHIgInXFvHl3YW0gc2Vyd2VyYSBuYXp3ICVzIyVkIGRsYSAlcyAlcyAlcyIKKworIzogbmV0d29yay5jOjE1NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTk9UIHVzaW5nIG5hbWVzZXJ2ZXIgJXMjJWQgLSBxdWVyeSBsb29wIGRldGVjdGVkIgorbXNnc3RyICJOSUUgdcW8eXdhbSBzZXJ3ZXJhIG5hencgJXMjJWQgLSB3eWtyeXRvIHDEmXRsxJkgemFweXRhxYQiCisKKyM6IG5ldHdvcmsuYzoxNTczCisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIG5hbWVzZXJ2ZXIgJXMjJWQodmlhICVzKSIKK21zZ3N0ciAidcW8eXdhbSBzZXJ3ZXJhIG5hencgJXMjJWQgKHByemV6ICVzKSIKKworIzogbmV0d29yay5jOjE1NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgbmFtZXNlcnZlciAlcyMlZCIKK21zZ3N0ciAidcW8eXdhbSBzZXJ3ZXJhIG5hencgJXMjJWQiCisKKyM6IG5ldHdvcmsuYzoxNTgwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyAlZCBtb3JlIGxvY2FsIGFkZHJlc3NlcyIKK21zZ3N0ciAidcW8eXdhbSBvICVkIHNlcndlcsOzdyBuYXp3IHdpxJljZWoiCisKKyM6IG5ldHdvcmsuYzoxNTgyCisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nICVkIG1vcmUgbmFtZXNlcnZlcnMiCittc2dzdHIgInXFvHl3YW0gbyAlZCBzZXJ3ZXLDs3cgbmF6dyB3acSZY2VqIgorCisjOiBkbnNtYXNxLmM6MTY2Cittc2dpZCAiZGhjcC1ob3N0c2RpciwgZGhjcC1vcHRzZGlyIGFuZCBob3N0c2RpciBhcmUgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtIgorbXNnc3RyICJkaGNwLWhvc3RzZGlyLCBkaGNwLW9wdHNkaXIgaSBob3N0c2RpciBuaWUgem5hamR1asSFIHphc3Rvc293YW5pYSBuYSB0ZWogcGxhdGZvcm1pZSIKKworIzogZG5zbWFzcS5jOjE4MQorbXNnaWQgIm5vIHJvb3QgdHJ1c3QgYW5jaG9yIHByb3ZpZGVkIGZvciBETlNTRUMiCittc2dzdHIgIm5pZSB3c2themFubyBwdW5rdMOzdyB6YXVmYW5pYSBkbGEgRE5TU0VDIgorCisjOiBkbnNtYXNxLmM6MTg0Cittc2dpZCAiY2Fubm90IHJlZHVjZSBjYWNoZSBzaXplIGZyb20gZGVmYXVsdCB3aGVuIEROU1NFQyBlbmFibGVkIgorbXNnc3RyICJicmFrIG1vxbxsaXdvxZtjaSB6bW5pZWpzemVuaWEgcGFtacSZY2kgcG9kcsSZY3puZWogcG9uacW8ZWogd2llbGtvxZtjaSBkb215xZtsbmVqIHcgcHJ6eXBhZGt1IHXFvHl3YW5pYSBETlNTRUMiCisKKyM6IGRuc21hc3EuYzoxODYKK21zZ2lkICJETlNTRUMgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfRE5TU0VDIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAib2JzxYJ1Z2EgRE5TU0VDIG5pZWRvc3TEmXBuYSAtIHVzdGF3IEhBVkVfRE5TU0VDIHcgc3JjL2NvbmZpZy5oIgorCisjOiBkbnNtYXNxLmM6MTkyCittc2dpZCAiVEZUUCBzZXJ2ZXIgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfVEZUUCBpbiBzcmMvY29uZmlnLmgiCittc2dzdHIgIlNlcndlciBURlRQIG5pZSB6b3N0YcWCIHdrb21waWxvd2FueSAtLSB1c3RhdyBIQVZFX1RGVFAgdyBzcmMvY29uZmlnLmgiCisKKyM6IGRuc21hc3EuYzoxOTcKK21zZ2lkICJjYW5ub3QgdXNlIC0tY29ubnRyYWNrIEFORCAtLXF1ZXJ5LXBvcnQiCittc2dzdHIgIi0tY29ubnRyYWNrIGkgLS1xdWVyeS1wb3J0IHd6YWplbW5pZSBzacSZIHd5a2x1Y3phasSFIgorCisjOiBkbnNtYXNxLmM6MjAwCittc2dpZCAiY29ubnRyYWNrIHN1cHBvcnQgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfQ09OTlRSQUNLIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAid3NwYXJjaWUgcHJ6ZWthenl3YW5pYSB6bmFjem5pa8OzdyBwb8WCxIVjemXFhCAoY29ubnRyYWNrKSBuaWUgem9zdGHFgm8gd2tvbXBpbG93YW5lIC0gdXN0YXcgSEFWRV9DT05OVFJBQ0sgdyBzcmMvY29uZmlnLmgiCisKKyM6IGRuc21hc3EuYzoyMDUKK21zZ2lkICJhc3luY2hyb25vdXMgbG9nZ2luZyBpcyBub3QgYXZhaWxhYmxlIHVuZGVyIFNvbGFyaXMiCittc2dzdHIgInphcGlzIGRvIGxvZ8OzdyB3IHRyeWJpZSBhc3luY2hyb25pY3pueW0gbmllIGplc3QgZG9zdMSZcG55IHcgU29sYXJpc2llIgorCisjOiBkbnNtYXNxLmM6MjEwCittc2dpZCAiYXN5bmNocm9ub3VzIGxvZ2dpbmcgaXMgbm90IGF2YWlsYWJsZSB1bmRlciBBbmRyb2lkIgorbXNnc3RyICJ6YXBpcyBkbyBsb2fDs3cgdyB0cnliaWUgYXN5bmNocm9uaWN6bnltIG5pZSBqZXN0IGRvc3TEmXBueSB3IEFuZHJvaWR6aWUiCisKKyM6IGRuc21hc3EuYzoyMTUKK21zZ2lkICJhdXRob3JpdGF0aXZlIEROUyBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9BVVRIIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAidHJ5YiBhdXRvcnl0YXR5d255IEROUy1hIG5pZWRvc3TEmXBueSAtIHVzdGF3IEhBVkVfQVVUSCB3IHNyYy9jb25maWcuaCIKKworIzogZG5zbWFzcS5jOjIyMAorbXNnaWQgImxvb3AgZGV0ZWN0aW9uIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0xPT1AgaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICJ3eWtyeXdhbmllIHDEmXRsaSB6YXB5dGHFhCBuaWUgem9zdGHFgm8gd2tvbXBpbG93YW5lIC0gdXN0YXcgSEFWRV9MT09QIHcgc3JjL2NvbmZpZy5oIgorCisjOiBkbnNtYXNxLmM6MjI3Cittc2dpZCAibWF4X3BvcnQgY2Fubm90IGJlIHNtYWxsZXIgdGhhbiBtaW5fcG9ydCIKK21zZ3N0ciAibWF4X3BvcnQgbmllIG1vxbxlIGJ5xIcgbmnFvHN6eSBuacW8IG1pbl9wb3J0IgorCisjOiBkbnNtYXNxLmM6MjM0Cittc2dpZCAiem9uZSBzZXJpYWwgbXVzdCBiZSBjb25maWd1cmVkIGluIC0tYXV0aC1zb2EiCittc2dzdHIgInphIHBvbW9jxIUgLS1hdXRoLXNvYSBtdXNpIHpvc3RhxIcgdXN0YXdpb255IG51bWVyIHNlcnlqbnkgc3RyZWZ5IgorCisjOiBkbnNtYXNxLmM6MjUyCittc2dpZCAiZGhjcC1yYW5nZSBjb25zdHJ1Y3RvciBub3QgYXZhaWxhYmxlIG9uIHRoaXMgcGxhdGZvcm0iCittc2dzdHIgImtvbnN0cnVrY2phIGRoY3AtcmFuZ2UgbmllIGplc3QgZG9zdMSZcG5hIHcgdHltIHN5c3RlbWllIgorCisjOiBkbnNtYXNxLmM6Mjk4Cittc2dpZCAiY2Fubm90IHNldCAtLWJpbmQtaW50ZXJmYWNlcyBhbmQgLS1iaW5kLWR5bmFtaWMiCittc2dzdHIgIi0tYmluZC1pbnRlcmZhY2VzIGkgLS1iaW5kLWR5bmFtaWMgd3phamVtbmllIHNpxJkgd3lrbHVjemFqxIUiCisKKyM6IGRuc21hc3EuYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmQgbGlzdCBvZiBpbnRlcmZhY2VzOiAlcyIKK21zZ3N0ciAiYsWCxIVkIHBvZGN6YXMgdHdvcnplbmlhIGxpc3R5IGludGVyZmVqc8OzdyBzaWVjaW93eWNoOiAlcyIKKworIzogZG5zbWFzcS5jOjMxMAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGludGVyZmFjZSAlcyIKK21zZ3N0ciAibmllem5hbnkgaW50ZXJmZWpzICVzIgorCisjOiBkbnNtYXNxLmM6Mzc0IGRuc21hc3EuYzoxMDM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkRCdXMgZXJyb3I6ICVzIgorbXNnc3RyICJixYLEhWQgREJ1czogJXMiCisKKyM6IGRuc21hc3EuYzozNzcKK21zZ2lkICJEQnVzIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0RCVVMgaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICJPYnPFgnVnYSBEQnVzIG5pZSB6b3N0YcWCYSB3a29tcGlsb3dhbmEgLS0gdXN0YXcgSEFWRV9EQlVTIHcgc3JjL2NvbmZpZy5oIgorCisjOiBkbnNtYXNxLmM6NDA1CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdXNlciBvciBncm91cDogJXMiCittc2dzdHIgIm5pZXpuYW55IHXFvHl0a293bmlrIGx1YiBncnVwYTogJXMiCisKKyM6IGRuc21hc3EuYzo0NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZGlyIHRvIGZpbGVzeXN0ZW0gcm9vdDogJXMiCittc2dzdHIgIm5pZSBwb3RyYWZpxJkgd2VqxZvEhyBkbyBnxYLDs3duZWdvIGthdGFsb2d1OiAlcyIKKworIzogZG5zbWFzcS5jOjcxNgorIywgYy1mb3JtYXQKK21zZ2lkICJzdGFydGVkLCB2ZXJzaW9uICVzIEROUyBkaXNhYmxlZCIKK21zZ3N0ciAidXJ1Y2hvbWlvbnksIHdlcnNqYSAlcywgRE5TIHd5xYLEhWN6b255IgorCisjOiBkbnNtYXNxLmM6NzIwCisjLCBjLWZvcm1hdAorbXNnaWQgInN0YXJ0ZWQsIHZlcnNpb24gJXMgY2FjaGVzaXplICVkIgorbXNnc3RyICJ1cnVjaG9taW9ueSwgd2Vyc2phICVzLCAlZCBtaWVqc2MgdyBwYW1pxJljaSBwb2RyxJljem5laiIKKworIzogZG5zbWFzcS5jOjcyMgorIywgYy1mb3JtYXQKK21zZ2lkICJzdGFydGVkLCB2ZXJzaW9uICVzIGNhY2hlIGRpc2FibGVkIgorbXNnc3RyICJ1cnVjaG9taW9ueSwgd2Vyc2phICVzLCBwYW1pxJnEhyBwb2RyxJljem5hIHd5xYLEhWN6b25hIgorCisjOiBkbnNtYXNxLmM6NzI1Cittc2dpZCAiRE5TIHNlcnZpY2UgbGltaXRlZCB0byBsb2NhbCBzdWJuZXRzIgorbXNnc3RyICJ1c8WCdWdhIEROUyBvZ3Jhbmljem9uYSBkbyBsb2thbG55Y2ggcG9kc2llY2kiCisKKyM6IGRuc21hc3EuYzo3MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tcGlsZSB0aW1lIG9wdGlvbnM6ICVzIgorbXNnc3RyICJvcGNqZSBrb21waWxhY2ppOiAlcyIKKworIzogZG5zbWFzcS5jOjczNAorbXNnaWQgIkRCdXMgc3VwcG9ydCBlbmFibGVkOiBjb25uZWN0ZWQgdG8gc3lzdGVtIGJ1cyIKK21zZ3N0ciAib2JzxYJ1Z2EgREJ1cyB3xYLEhWN6b25hLCBwb2TFgsSFY3pvbm8gZG8gc2Vyd2VyYSBEQnVzIgorCisjOiBkbnNtYXNxLmM6NzM2Cittc2dpZCAiREJ1cyBzdXBwb3J0IGVuYWJsZWQ6IGJ1cyBjb25uZWN0aW9uIHBlbmRpbmciCittc2dzdHIgIm9ic8WCdWdhIERCdXMgd8WCxIVjem9uYSwgdHJ3YSBwb2TFgsSFY3phbmllIGRvIHNlcndlcmEgREJ1cyIKKworIzogZG5zbWFzcS5jOjc1NAorbXNnaWQgIkROU1NFQyB2YWxpZGF0aW9uIGVuYWJsZWQiCittc2dzdHIgIndhbGlkYWNqYSBETlNTRUMgd8WCxIVjem9uYSIKKworIzogZG5zbWFzcS5jOjc1OAorbXNnaWQgIkROU1NFQyBzaWduYXR1cmUgdGltZXN0YW1wcyBub3QgY2hlY2tlZCB1bnRpbCBmaXJzdCBjYWNoZSByZWxvYWQiCittc2dzdHIgInNwcmF3ZHphbmllIHN5Z25hdHVyIGN6YXNvd3ljaCBETlNTRUMgd3nFgsSFY3pvbmUgZG8gY3phc3UgcHJ6ZcWCYWRvd2FuaWEgcGFtacSZY2kgcG9kcsSZY3puZWoiCisKKyM6IGRuc21hc3EuYzo3NjEKK21zZ2lkICJETlNTRUMgc2lnbmF0dXJlIHRpbWVzdGFtcHMgbm90IGNoZWNrZWQgdW50aWwgc3lzdGVtIHRpbWUgdmFsaWQiCittc2dzdHIgInNwcmF3ZHphbmllIHN5Z25hdHVyIGN6YXNvd3ljaCBETlNTRUMgd3nFgsSFY3pvbmUgZG8gY3phc3UgenN5bmNocm9uaXpvd2FuaWEgc2nEmSB6ZWdhcmEgc3lzdGVtb3dlZ28iCisKKyM6IGRuc21hc3EuYzo3NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogZmFpbGVkIHRvIGNoYW5nZSBvd25lciBvZiAlczogJXMiCittc2dzdHIgInV3YWdhOiBuaWUgdWRhxYJvIHNpxJkgem1pZW5pxIcgdcW8eXRrb3duaWthIHBsaWt1ICVzOiAlcyIKKworIzogZG5zbWFzcS5jOjc3MAorbXNnaWQgInNldHRpbmcgLS1iaW5kLWludGVyZmFjZXMgb3B0aW9uIGJlY2F1c2Ugb2YgT1MgbGltaXRhdGlvbnMiCittc2dzdHIgInVzdGF3aWFtIC0tYmluZC1pbnRlcmZhY2VzIHogcG93b2R1IG9ncmFuaWN6ZcWEIHN5c3RlbXUgb3BlcmFjeWpuZWdvIgorCisjOiBkbnNtYXNxLmM6NzgyCisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGludGVyZmFjZSAlcyBkb2VzIG5vdCBjdXJyZW50bHkgZXhpc3QiCittc2dzdHIgInV3YWdhOiBpbnRlcmZlanMgJXMgbmllIGplc3Qgd8WCxIVjem9ueSIKKworIzogZG5zbWFzcS5jOjc4NworbXNnaWQgIndhcm5pbmc6IGlnbm9yaW5nIHJlc29sdi1maWxlIGZsYWcgYmVjYXVzZSBuby1yZXNvbHYgaXMgc2V0IgorbXNnc3RyICJ1d2FnYTogaWdub3J1asSZIG9wY2rEmSByZXNvbHYtZmlsZSwgcG9uaWV3YcW8IHd5YnJhbm8gdHJ5YiBuby1yZXNvbHYiCisKKyM6IGRuc21hc3EuYzo3OTAKK21zZ2lkICJ3YXJuaW5nOiBubyB1cHN0cmVhbSBzZXJ2ZXJzIGNvbmZpZ3VyZWQiCittc2dzdHIgInV3YWdhOiBuaWUgd3NrYXphbm8gbmFkcnrEmWRueWNoIHNlcndlcsOzdyBETlMiCisKKyM6IGRuc21hc3EuYzo3OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXN5bmNocm9ub3VzIGxvZ2dpbmcgZW5hYmxlZCwgcXVldWUgbGltaXQgaXMgJWQgbWVzc2FnZXMiCittc2dzdHIgInfFgsSFY3pvbm8gYXN5bmNocm9uaWN6bnkgdHJ5YiB6YXBpc3UgZG8gbG9nw7N3IHoga29sZWprxIUgbmEgJWQga29tdW5pa2F0w7N3IgorCisjOiBkbnNtYXNxLmM6ODE1Cittc2dpZCAiSVB2NiByb3V0ZXIgYWR2ZXJ0aXNlbWVudCBlbmFibGVkIgorbXNnc3RyICJhbm9uc293YW5pZSBydXRlcmEgSVB2NiB3xYLEhWN6b25lIgorCisjOiBkbnNtYXNxLmM6ODIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AsIHNvY2tldHMgYm91bmQgZXhjbHVzaXZlbHkgdG8gaW50ZXJmYWNlICVzIgorbXNnc3RyICJESENQLCBnbmlhemRhIGRvd2nEhXphbmUgbmEgd3nFgsSFY3pub8WbxIcgaW50ZXJmZWpzb3dpICVzIgorCisjOiBkbnNtYXNxLmM6ODM0Cittc2dpZCAicm9vdCBpcyAiCittc2dzdHIgInogZ8WCw7N3bnltIGthdGFsb2dpZW0gdyAiCisKKyM6IGRuc21hc3EuYzo4MzQKK21zZ2lkICJlbmFibGVkIgorbXNnc3RyICJ3xYLEhWN6b255IgorCisjOiBkbnNtYXNxLmM6ODM2Cittc2dpZCAic2VjdXJlIG1vZGUiCittc2dzdHIgIncgdHJ5YmllIGJlenBpZWN6bnltIgorCisjOiBkbnNtYXNxLmM6ODM5CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6ICVzIGluYWNjZXNzaWJsZSIKK21zZ3N0ciAidXdhZ2E6ICVzIG5pZWRvc3TEmXBueSIKKworIzogZG5zbWFzcS5jOjg0MworIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBURlRQIGRpcmVjdG9yeSAlcyBpbmFjY2Vzc2libGUiCittc2dzdHIgInV3YWdhOiBrYXRhbG9nIFRGVFAgJXMgbmllIGplc3QgZG9zdMSZcG55IgorCisjOiBkbnNtYXNxLmM6ODY5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlc3RyaWN0aW5nIG1heGltdW0gc2ltdWx0YW5lb3VzIFRGVFAgdHJhbnNmZXJzIHRvICVkIgorbXNnc3RyICJvZ3JhbmljemFtIGlsb8WbxIcgamVkbm9jemVzbnljaCBwcnplc8WCYcWEIFRGVFAgZG8gJWQiCisKKyM6IGRuc21hc3EuYzoxMDM5Cittc2dpZCAiY29ubmVjdGVkIHRvIHN5c3RlbSBEQnVzIgorbXNnc3RyICJwb2TFgsSFY3pvbm8gZG8gREJ1cy1hIgorCisjOiBkbnNtYXNxLmM6MTE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZm9yayBpbnRvIGJhY2tncm91bmQ6ICVzIgorbXNnc3RyICJuaWUgcG90cmFmacSZIHByemXFgsSFY3p5xIcgc2nEmSBkbyBwcmFjeSB3IHRsZTogJXMiCisKKyM6IGRuc21hc3EuYzoxMTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgaGVscGVyOiAlcyIKK21zZ3N0ciAibmllIHVkYcWCbyBzacSZIHV0d29yennEhyBwcm9jZXN1IHBvbW9jbmljemVnbzogJXMiCisKKyM6IGRuc21hc3EuYzoxMTk1CisjLCBjLWZvcm1hdAorbXNnaWQgInNldHRpbmcgY2FwYWJpbGl0aWVzIGZhaWxlZDogJXMiCittc2dzdHIgIm5pZSBwb3dpb2TFgm8gc2nEmSB1c3Rhd2lhbmllIG9ncmFuaWN6ZcWEIChjYXBhYmlsaXRpZXMpOiAlcyIKKworIzogZG5zbWFzcS5jOjExOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNoYW5nZSB1c2VyLWlkIHRvICVzOiAlcyIKK21zZ3N0ciAibmllIHVkYcWCbyBzacSZIHptaWVuacSHIHXFvHl0a293bmlrYSBwcm9jZXN1IG5hICVzOiAlcyIKKworIzogZG5zbWFzcS5jOjEyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNoYW5nZSBncm91cC1pZCB0byAlczogJXMiCittc2dzdHIgIm5pZSB1ZGHFgm8gc2nEmSB6bWllbmnEhyBncnVweSBwcm9jZXN1IG5hICVzOiAlcyIKKworIzogZG5zbWFzcS5jOjEyMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gcGlkZmlsZSAlczogJXMiCittc2dzdHIgIm5pZSB1ZGHFgm8gc2nEmSBvdHdvcnp5xIcgcGxpa3UgeiBQSUQtZW0gJXM6ICVzIgorCisjOiBkbnNtYXNxLmM6MTIwNworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiBsb2cgJXM6ICVzIgorbXNnc3RyICJuaWUgdWRhxYJvIHNpxJkgb3R3b3J6ecSHIGxvZ3UgJXM6ICVzIgorCisjOiBkbnNtYXNxLmM6MTIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBMdWEgc2NyaXB0OiAlcyIKK21zZ3N0ciAibmllIHVkYcWCbyBzacSZIHdjenl0YcSHIHNrcnlwdHUgTHVhOiAlcyIKKworIzogZG5zbWFzcS5jOjEyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVEZUUCBkaXJlY3RvcnkgJXMgaW5hY2Nlc3NpYmxlOiAlcyIKK21zZ3N0ciAia2F0YWxvZyBURlRQICVzIG5pZSBqZXN0IGRvc3TEmXBueTogJXMiCisKKyM6IGRuc21hc3EuYzoxMjE2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgdGltZXN0YW1wIGZpbGUgJXM6ICVzIgorbXNnc3RyICJuaWUgcG90cmFmacSZIHV0d29yennEhyBwbGlrdSB6bmFjem5pa2EgY3phc3UgJXM6ICVzIgorCisjOiBkbnNtYXNxLmM6MTIzOQorbXNnaWQgIm5vdyBjaGVja2luZyBETlNTRUMgc2lnbmF0dXJlIHRpbWVzdGFtcHMiCittc2dzdHIgInRyd2Egc3ByYXdkemFuaWUgc3lnbmF0dXIgY3phc293eWNoIHBvZHBpc8OzdyBETlNTRUMiCisKKyM6IGRuc21hc3EuYzoxMzA3CisjLCBjLWZvcm1hdAorbXNnaWQgInNjcmlwdCBwcm9jZXNzIGtpbGxlZCBieSBzaWduYWwgJWQiCittc2dzdHIgInNrcnlwdCB6b3N0YcWCIHphYml0eSBzeWduYcWCZW0gJWQiCisKKyM6IGRuc21hc3EuYzoxMzExCisjLCBjLWZvcm1hdAorbXNnaWQgInNjcmlwdCBwcm9jZXNzIGV4aXRlZCB3aXRoIHN0YXR1cyAlZCIKK21zZ3N0ciAic2tyeXB0IHpha2/FhGN6ecWCIHNpxJkgeiBrb2RlbSBwb3dyb3R1ICVkIgorCisjOiBkbnNtYXNxLmM6MTMxNQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZXhlY3V0ZSAlczogJXMiCittc2dzdHIgIm5pZSB1ZGHFgm8gc2nEmSB1cnVjaG9tacSHICVzOiAlcyIKKworIzogZG5zbWFzcS5jOjEzNzkgZG5zc2VjLmM6NDc5IGRuc3NlYy5jOjUyNQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdXBkYXRlIG10aW1lIG9uICVzOiAlcyIKK21zZ3N0ciAibmllIHVkYcWCbyBzacSZIHVha3R1YWxuacSHIHpuYWN6bmlrYSBjemFzdSBwbGlrdSAlczogJXMiCisKKyM6IGRuc21hc3EuYzoxMzg2Cittc2dpZCAiZXhpdGluZyBvbiByZWNlaXB0IG9mIFNJR1RFUk0iCittc2dzdHIgInpha2/FhGN6ecWCZW0gZHppYcWCYW5pZSB6IHBvd29kdSBvZGVicmFuaWEgU0lHVEVSTSIKKworIzogZG5zbWFzcS5jOjE0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGFjY2VzcyAlczogJXMiCittc2dzdHIgImJyYWsgZG9zdMSZcHUgZG8gJXM6ICVzIgorCisjOiBkbnNtYXNxLmM6MTQ0NAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkaW5nICVzIgorbXNnc3RyICJjenl0YW5pZSAlcyIKKworIzogZG5zbWFzcS5jOjE0NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc2VydmVycyBmb3VuZCBpbiAlcywgd2lsbCByZXRyeSIKK21zZ3N0ciAidyAlcyBuaWUgem5hbGF6xYJlbSBzZXJ3ZXLDs3csIHNwcsOzYnVqxJkgcG9ub3duaWUgcMOzxbpuaWVqIgorCisjOiBkaGNwLmM6NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBESENQIHNvY2tldDogJXMiCittc2dzdHIgIm5pZSB1ZGHFgm8gc2nEmSB1dHdvcnp5xIcgZ25pYXpkYSBkbGEgREhDUDogJXMiCisKKyM6IGRoY3AuYzo2OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2V0IG9wdGlvbnMgb24gREhDUCBzb2NrZXQ6ICVzIgorbXNnc3RyICJixYLEhWQgcG9kY3phcyB1c3Rhd2lhbmlhIG9wY2ppIGduaWF6ZGEgREhDUDogJXMiCisKKyM6IGRoY3AuYzo4OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2V0IFNPX1JFVVNFe0FERFJ8UE9SVH0gb24gREhDUCBzb2NrZXQ6ICVzIgorbXNnc3RyICJuaWUgdWRhxYJvIHNpxJkgdXN0YXdpxIcgU09fUkVVU0V7QUREUnxQT1JUfSBnbmlhemRhIERIQ1A6ICVzIgorCisjOiBkaGNwLmM6MTAxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBiaW5kIERIQ1Agc2VydmVyIHNvY2tldDogJXMiCittc2dzdHIgImLFgsSFZCBwcnp5IHByenl6bmF3YW5pdSBuYXp3eSBnbmlhemR1IHNlcndlcmEgREhDUDogJXMiCisKKyM6IGRoY3AuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBJQ01QIHJhdyBzb2NrZXQ6ICVzLiIKK21zZ3N0ciAibmllIHVkYcWCbyBzacSZIHV0d29yennEhyBzdXJvd2VnbyBnbmlhemRhIElDTVA6ICVzLiIKKworIzogZGhjcC5jOjI1MiBkaGNwNi5jOjE3MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGludGVyZmFjZSAlcyBpbiBicmlkZ2UtaW50ZXJmYWNlIgorbXNnc3RyICJuaWV6bmFueSBpbnRlcmZlanMgJXMgdyBicmlkZ2UtdSIKKworIzogZGhjcC5jOjI5MworIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHBhY2tldCByZWNlaXZlZCBvbiAlcyB3aGljaCBoYXMgbm8gYWRkcmVzcyIKK21zZ3N0ciAixbzEhWRhbmllIERIQ1Agb2RlYnJhbm8gbmEgaW50ZXJmZWpzaWUgJXMsIGt0w7NyeSBuaWUgbWEgYWRyZXN1IgorCisjOiBkaGNwLmM6NDI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkFSUC1jYWNoZSBpbmplY3Rpb24gZmFpbGVkOiAlcyIKK21zZ3N0ciAidXp1cGXFgm5pZW5pZSBwYW1pxJljaSBwb2RyxJljem5laiBBUlAgbmllIHBvd2lvZMWCbyBzacSZOiAlcyIKKworIzogZGhjcC5jOjQ3MAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBzZW5kaW5nIERIQ1AgcGFja2V0IHRvICVzOiAlcyIKK21zZ3N0ciAiQsWCxIVkIHd5c3nFgmFuaWEgcGFraWV0dSBESENQIGRvICVzOiAlcyIKKworIzogZGhjcC5jOjUzMQorIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHJhbmdlICVzIC0tICVzIGlzIG5vdCBjb25zaXN0ZW50IHdpdGggbmV0bWFzayAlcyIKK21zZ3N0ciAiemFrcmVzIGFkcmVzw7N3IERIQ1AgJXMgLS0gJXMgamVzdCBuaWVzcMOzam55IHogbWFza8SFIHNpZWNpICVzIgorCisjOiBkaGNwLmM6ODU0CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBsaW5lIGF0ICVzIGxpbmUgJWQiCittc2dzdHIgInrFgmEgemF3YXJ0b8WbxIcgcGxpa3UgJXMsIHcgbGluaWkgJWQiCisKKyM6IGRoY3AuYzo4OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgJXMgbGluZSAlZCwgZHVwbGljYXRlIG5hbWUgb3IgSVAgYWRkcmVzcyIKK21zZ3N0ciAidyAlcyBwb21pamFtIGxpbmnEmSAlZCAtLSBwb3d0w7Nyem9uYSBuYXp3YSBsdWIgYWRyZXMgSVAiCisKKyM6IGRoY3AuYzoxMDQxIHJmYzMzMTUuYzoyMTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcmVsYXkgJXMgLT4gJXMiCittc2dzdHIgInByemVrYXp5d2FuaWUgREhDUCAlcyAtPiAlcyIKKworIzogbGVhc2UuYzo5OAorbXNnaWQgInRvbyBtYW55IHN0b3JlZCBsZWFzZXMiCittc2dzdHIgInpieXQgZHXFvGEgaWxvxZvEhyB6YXBpc2FueWNoIGR6aWVyxbxhdyIKKworIzogbGVhc2UuYzoxNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gb3IgY3JlYXRlIGxlYXNlIGZpbGUgJXM6ICVzIgorbXNnc3RyICJuaWUgcG90cmFmacSZIG90d29yennEhyBhbGJvIHV0d29yennEhyBwbGlrdSBkemllcsW8YXcgJXM6ICVzIgorCisjOiBsZWFzZS5jOjE3NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgbGVhc2UgZGF0YWJhc2UsIGludmFsaWQgbGluZTogJXMgJXMgJXMgJXMgLi4uIgorbXNnc3RyICIiCisKKyM6IGxlYXNlLmM6MTgwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCBsZWFzZSBmaWxlICVzOiAlcyIKK21zZ3N0ciAibmllIHVkYcWCbyBzacSZIG9kY3p5dGHEhyAlczogJXMiCisKKyM6IGxlYXNlLmM6MTk2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBydW4gbGVhc2UtaW5pdCBzY3JpcHQgJXM6ICVzIgorbXNnc3RyICJuaWUgcG90cmFmacSZIHVydWNob21pxIcgc2tyeXB0dSAlczogJXMiCisKKyM6IGxlYXNlLmM6MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgImxlYXNlLWluaXQgc2NyaXB0IHJldHVybmVkIGV4aXQgY29kZSAlcyIKK21zZ3N0ciAic2tyeXB0IHpha2/FhGN6ecWCIHNpxJkgeiBrb2RlbSBwb3dyb3R1ICVzIgorCisjOiBsZWFzZS5jOjM3MworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgJXM6ICVzIChyZXRyeSBpbiAldXMpIgorbXNnc3RyICJixYLEhWQgemFwaXN1IGRvICVzOiAlcyAoc3Byw7NidWrEmSBwb25vd25pZSB6YSAldXMpIgorCisjOiBsZWFzZS5jOjkzNworIywgYy1mb3JtYXQKK21zZ2lkICJJZ25vcmluZyBkb21haW4gJXMgZm9yIERIQ1AgaG9zdCBuYW1lICVzIgorbXNnc3RyICJOaWUgdXd6Z2zEmWRuaWFtIGN6xJnFm2NpIGRvbWVub3dlaiAoJXMpIGRsYSBrb21wdXRlcmEgJXMiCisKKyM6IHJmYzIxMzEuYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYWRkcmVzcyByYW5nZSBhdmFpbGFibGUgZm9yIERIQ1AgcmVxdWVzdCAlcyAlcyIKK21zZ3N0ciAibmllIHpkZWZpbmlvd2FubyB6YWtyZXN1IGFkcmVzw7N3IG9kcG93aWVkbmllZ28gZGxhIMW8xIVkYW5pYSAlcyAlcyIKKworIzogcmZjMjEzMS5jOjM0OAorbXNnaWQgIndpdGggc3VibmV0IHNlbGVjdG9yIgorbXNnc3RyICJ6IHd5Ym9yZW0gcG9kc2llY2kiCisKKyM6IHJmYzIxMzEuYzozNDgKK21zZ2lkICJ2aWEiCittc2dzdHIgInByemV6IgorCisjOiByZmMyMTMxLmM6MzYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGF2YWlsYWJsZSBESENQIHN1Ym5ldDogJXMvJXMiCittc2dzdHIgIiV1IGRvc3TEmXBuYSBwb2RzaWXEhyBESENQOiAlcy8lcyIKKworIzogcmZjMjEzMS5jOjM2MyByZmMzMzE1LmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGF2YWlsYWJsZSBESENQIHJhbmdlOiAlcyAtLSAlcyIKK21zZ3N0ciAiJXUgZG9zdMSZcG55IHpha3JlcyBhZHJlc8OzdyBESENQOiAlcyAtLSAlcyIKKworIzogcmZjMjEzMS5jOjQ3NAorIywgYy1mb3JtYXQKK21zZ2lkICIldSB2ZW5kb3IgY2xhc3M6ICVzIgorbXNnc3RyICIldSBrbGFzYSBkb3N0YXdjeTogJXMiCisKKyM6IHJmYzIxMzEuYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgdXNlciBjbGFzczogJXMiCittc2dzdHIgIiV1IGtsYXNhIHXFvHl0a293bmlrYTogJXMiCisKKyM6IHJmYzIxMzEuYzo1MTAKK21zZ2lkICJkaXNhYmxlZCIKK21zZ3N0ciAid3nFgsSFY3pvbnkoYSkiCisKKyM6IHJmYzIxMzEuYzo1NTEgcmZjMjEzMS5jOjEwMDYgcmZjMjEzMS5jOjE0MzAgcmZjMzMxNS5jOjYxNiByZmMzMzE1LmM6ODY5CisjOiByZmMzMzE1LmM6MTE0OAorbXNnaWQgImlnbm9yZWQiCittc2dzdHIgImlnbm9ydWrEmSIKKworIzogcmZjMjEzMS5jOjU2NiByZmMyMTMxLmM6MTIzOSByZmMzMzE1LmM6OTE5Cittc2dpZCAiYWRkcmVzcyBpbiB1c2UiCittc2dzdHIgImFkcmVzIGplc3QgdyB1xbx5Y2l1IgorCisjOiByZmMyMTMxLmM6NTgwIHJmYzIxMzEuYzoxMDYwCittc2dpZCAibm8gYWRkcmVzcyBhdmFpbGFibGUiCittc2dzdHIgImJyYWsgZG9zdMSZcG5lZ28gYWRyZXN1IgorCisjOiByZmMyMTMxLmM6NTg3IHJmYzIxMzEuYzoxMjAyCittc2dpZCAid3JvbmcgbmV0d29yayIKK21zZ3N0ciAibmllcHJhd2lkxYJvd2Egc2llxIciCisKKyM6IHJmYzIxMzEuYzo2MDIKK21zZ2lkICJubyBhZGRyZXNzIGNvbmZpZ3VyZWQiCittc2dzdHIgImJyYWsgc2tvbmZpZ3Vyb3dhbmVnbyBhZHJlc3UiCisKKyM6IHJmYzIxMzEuYzo2MDggcmZjMjEzMS5jOjEyNTIKK21zZ2lkICJubyBsZWFzZXMgbGVmdCIKK21zZ3N0ciAiYnJhayB3b2xueWNoIGR6aWVyxbxhdyIKKworIzogcmZjMjEzMS5jOjcwMyByZmMzMzE1LmM6NDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGNsaWVudCBwcm92aWRlcyBuYW1lOiAlcyIKK21zZ3N0ciAia2xpZW50ICV1IHByemVkc3Rhd2lhIHNpxJkgamFrbyAlcyIKKworIzogcmZjMjEzMS5jOjgwOAorbXNnaWQgIlBYRSBCSVMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiUFhFIEJJUyBuaWUgamVzdCBvYnPFgnVnaXdhbmUiCisKKyM6IHJmYzIxMzEuYzo5NzQgcmZjMzMxNS5jOjEyNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGlzYWJsaW5nIERIQ1Agc3RhdGljIGFkZHJlc3MgJXMgZm9yICVzIgorbXNnc3RyICJ3ecWCxIVjemFtIHN0YXR5Y3puZSBwcnp5cGlzYW5pZSBhZHJlc3UgJXMgZGxhICVzIgorCisjOiByZmMyMTMxLmM6OTk1Cittc2dpZCAidW5rbm93biBsZWFzZSIKK21zZ3N0ciAibmllem5hbmEgZHppZXLFvGF3YSIKKworIzogcmZjMjEzMS5jOjEwMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHVzaW5nIGNvbmZpZ3VyZWQgYWRkcmVzcyAlcyBiZWNhdXNlIGl0IGlzIGxlYXNlZCB0byAlcyIKK21zZ3N0ciAibmllIHByb3BvbnVqxJkgemFrxYJhZGFuZWdvIHcga29uZmlndXJhY2ppIGFkcmVzdSAlcywgYm8gamVzdCBvbiBqdcW8IHd5ZHppZXLFvGF3aW9ueSBrb21wdXRlcm93aSAlcyIKKworIzogcmZjMjEzMS5jOjEwMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHVzaW5nIGNvbmZpZ3VyZWQgYWRkcmVzcyAlcyBiZWNhdXNlIGl0IGlzIGluIHVzZSBieSB0aGUgc2VydmVyIG9yIHJlbGF5IgorbXNnc3RyICJuaWUgcHJvcG9udWrEmSB6YWvFgmFkYW5lZ28gdyBrb25maWd1cmFjamkgYWRyZXN1ICVzLCBibyB1xbx5d2EgZ28ga3TDs3J5xZsgeiBzZXJ3ZXLDs3ciCisKKyM6IHJmYzIxMzEuYzoxMDQyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCB1c2luZyBjb25maWd1cmVkIGFkZHJlc3MgJXMgYmVjYXVzZSBpdCB3YXMgcHJldmlvdXNseSBkZWNsaW5lZCIKK21zZ3N0ciAibmllIHByb3BvbnVqxJkgemFrxYJhZGFuZWdvIHcga29uZmlndXJhY2ppIGFkcmVzdSAlcywgYm8ganXFvCBwb3ByemVkbmlvIHpvc3RhxYIgb2RyenVjb255IgorCisjOiByZmMyMTMxLmM6MTA1OCByZmMyMTMxLmM6MTI0NQorbXNnaWQgIm5vIHVuaXF1ZS1pZCIKK21zZ3N0ciAiYnJhayB1bmlrYWxuZWdvIGlkIgorCisjOiByZmMyMTMxLmM6MTE0MAorbXNnaWQgIndyb25nIHNlcnZlci1JRCIKK21zZ3N0ciAibmllcHJhd2lkxYJvd3kgaWRlbnR5ZmlrYXRvciBzZXJ3ZXJhIChzZXJ2ZXItSUQpIgorCisjOiByZmMyMTMxLmM6MTE1OQorbXNnaWQgIndyb25nIGFkZHJlc3MiCittc2dzdHIgImLFgsSZZG55IGFkcmVzIgorCisjOiByZmMyMTMxLmM6MTE3NyByZmMzMzE1LmM6MTAxNQorbXNnaWQgImxlYXNlIG5vdCBmb3VuZCIKK21zZ3N0ciAiZHppZXLFvGF3YSBuaWV6bmFsZXppb25hIgorCisjOiByZmMyMTMxLmM6MTIxMAorbXNnaWQgImFkZHJlc3Mgbm90IGF2YWlsYWJsZSIKK21zZ3N0ciAiYWRyZXMgbmllZG9zdMSZcG55IgorCisjOiByZmMyMTMxLmM6MTIyMQorbXNnaWQgInN0YXRpYyBsZWFzZSBhdmFpbGFibGUiCittc2dzdHIgImRvc3TEmXBuYSBzdGF0eWN6bmEgZHppZXLFvGF3YSIKKworIzogcmZjMjEzMS5jOjEyMjUKK21zZ2lkICJhZGRyZXNzIHJlc2VydmVkIgorbXNnc3RyICJhZHJlcyB6YXJlemVyd293YW55IgorCisjOiByZmMyMTMxLmM6MTIzMworIywgYy1mb3JtYXQKK21zZ2lkICJhYmFuZG9uaW5nIGxlYXNlIHRvICVzIG9mICVzIgorbXNnc3RyICJwb3J6dWNhbSBwcnp5cGlzYW5pZSBkbyAlcyBuYXp3eSAlcyIKKworIzogcmZjMjEzMS5jOjE3NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYm9vdGZpbGUgbmFtZTogJXMiCittc2dzdHIgIiV1IG5hendhIHBsaWt1IGJvb3Rvd2FuaWE6ICVzIgorCisjOiByZmMyMTMxLmM6MTc2NgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBzZXJ2ZXIgbmFtZTogJXMiCittc2dzdHIgIiV1IG5hendhIHNlcndlcmE6ICVzIgorCisjOiByZmMyMTMxLmM6MTc3NAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBuZXh0IHNlcnZlcjogJXMiCittc2dzdHIgIiV1IG5hc3TEmXBueSBzZXJ3ZXI6ICVzIgorCisjOiByZmMyMTMxLmM6MTc3NworIywgYy1mb3JtYXQKK21zZ2lkICIldSBicm9hZGNhc3QgcmVzcG9uc2UiCittc2dzdHIgIiV1IG9kcG93aWVkxbogcm96Z8WCb3N6ZW5pb3dhIgorCisjOiByZmMyMTMxLmM6MTg0MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc2VuZCBESENQL0JPT1RQIG9wdGlvbiAlZDogbm8gc3BhY2UgbGVmdCBpbiBwYWNrZXQiCittc2dzdHIgIm5pZSBtYW0gbW/FvGxpd2/Fm2NpIHd5c8WCYW5pYSBvcGNqaSAlZCBESENQL0JPT1RQOiBuaWVkb3N0YXRlY3puYSBpbG/Fm8SHIG1pZWpzY2EgdyBwYWtpZWNpZSIKKworIzogcmZjMjEzMS5jOjIxMzEKK21zZ2lkICJQWEUgbWVudSB0b28gbGFyZ2UiCittc2dzdHIgIm1lbnUgUFhFIHpieXQgZHXFvGUiCisKKyM6IHJmYzIxMzEuYzoyMjcwIHJmYzMzMTUuYzoxNTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IHJlcXVlc3RlZCBvcHRpb25zOiAlcyIKK21zZ3N0ciAiJXUgemHFvMSFZGFubzogJXMiCisKKyM6IHJmYzIxMzEuYzoyNTg3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzZW5kIFJGQzM5MjUgb3B0aW9uOiB0b28gbWFueSBvcHRpb25zIGZvciBlbnRlcnByaXNlIG51bWJlciAlZCIKK21zZ3N0ciAibmllIG1vZ8SZIHd5c8WCYcSHIG9wY2ppIFJGQzM5MjU6IHphIGTFgnVnaSDFgmHFhGN1Y2ggb3BjamkgcHJ6eSBudW1lcnplICVkIgorCisjOiByZmMyMTMxLmM6MjY1MAorIywgYy1mb3JtYXQKK21zZ2lkICIldSByZXBseSBkZWxheTogJWQiCittc2dzdHIgIiIKKworIzogbmV0bGluay5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgbmV0bGluayBzb2NrZXQ6ICVzIgorbXNnc3RyICJuaWUgcG90cmFmacSZIHV0d29yennEhyBwb8WCxIVjemVuaWEgbmV0bGluayAlcyIKKworIzogbmV0bGluay5jOjM1NQorIywgYy1mb3JtYXQKK21zZ2lkICJuZXRsaW5rIHJldHVybnMgZXJyb3I6ICVzIgorbXNnc3RyICJ3eXN0xIVwacWCIGLFgsSFZCB3IHBvxYLEhWN6ZW5pdSBuZXRsaW5rICVzIgorCisjOiBkYnVzLmM6MTg2Cittc2dpZCAiYXR0ZW1wdCB0byBzZXQgYW4gSVB2NiBzZXJ2ZXIgYWRkcmVzcyB2aWEgREJ1cyAtIG5vIElQdjYgc3VwcG9ydCIKK21zZ3N0ciAicHLDs2JhIHVzdGF3aWVuaWEgYWRyZXN1IElQdjYgc2Vyd2VyYSBwcnpleiBEQnVzLCBhbGUgYnJhayBvYnPFgnVnaSBJUHY2IgorCisjOiBkYnVzLmM6NDM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkVuYWJsaW5nIC0tJXMgb3B0aW9uIGZyb20gRC1CdXMiCittc2dzdHIgIm9wY2phIC0tJXMgem9zdGHFgmEgd8WCYcWbbmllIGFrdHl3b3dhbmEgemEgcG9tb2PEhSBELUJ1cyIKKworIzogZGJ1cy5jOjQ0NAorIywgYy1mb3JtYXQKK21zZ2lkICJEaXNhYmxpbmcgLS0lcyBvcHRpb24gZnJvbSBELUJ1cyIKK21zZ3N0ciAib3BjamEgLS0lcyB6b3N0YcWCYSB3xYJhxZtuaWUgZGV6YWt0eXdvd2FuYSB6YSBwb21vY8SFIEQtQnVzIgorCisjOiBkYnVzLmM6NjkwCittc2dpZCAic2V0dGluZyB1cHN0cmVhbSBzZXJ2ZXJzIGZyb20gREJ1cyIKK21zZ3N0ciAidXN0YXdpYW0gYWRyZXN5IHNlcndlcsOzdyBuYWRyesSZZG55Y2ggbmEgcG9kc3Rhd2llIGluZm9ybWFjamkgb2RlYnJhbnljaCB6IERCdXMiCisKKyM6IGRidXMuYzo3MzcKK21zZ2lkICJjb3VsZCBub3QgcmVnaXN0ZXIgYSBEQnVzIG1lc3NhZ2UgaGFuZGxlciIKK21zZ3N0ciAibmllIG1vxbxuYSB6YXJlamVzdHJvd2HEhyB1Y2h3eXR1IERCdXMiCisKKyM6IGJwZi5jOjI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIERIQ1AgQlBGIHNvY2tldDogJXMiCittc2dzdHIgIm5pZSBwb3RyYWZpxJkgdXR3b3J6ecSHIGduaWF6ZGEgREhDUCBCUEY6ICVzIgorCisjOiBicGYuYzoyOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCByZXF1ZXN0IGZvciB1bnN1cHBvcnRlZCBoYXJkd2FyZSB0eXBlICglZCkgcmVjZWl2ZWQgb24gJXMiCittc2dzdHIgIsW8xIVkYW5pZSBESENQIG9kIHVyesSFZHplbmlhIG5pZW9ic8WCdWdpd2FuZWdvIHR5cHUgKCVkKSBvZGVicmFubyBuYSAlcyIKKworIzogYnBmLmM6Mzc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgUEZfUk9VVEUgc29ja2V0OiAlcyIKK21zZ3N0ciAibmllIHVkYcWCbyBzacSZIHV0d29yennEhyBnbmlhemRhIFBGX1JPVVRFOiAlcyIKKworIzogYnBmLmM6Mzk5Cittc2dpZCAiVW5rbm93biBwcm90b2NvbCB2ZXJzaW9uIGZyb20gcm91dGUgc29ja2V0IgorbXNnc3RyICJOaWV6bmFuYSB3ZXJzamEgcHJvdG9rb8WCdS4iCisKKyM6IGhlbHBlci5jOjE1MworbXNnaWQgImxlYXNlKCkgZnVuY3Rpb24gbWlzc2luZyBpbiBMdWEgc2NyaXB0IgorbXNnc3RyICJ3IHNrcnlwY2llIEx1YSBicmFrIGZ1bmtjamkgbGVhc2UoKSIKKworIzogdGZ0cC5jOjMxOQorbXNnaWQgInVuYWJsZSB0byBnZXQgZnJlZSBwb3J0IGZvciBURlRQIgorbXNnc3RyICJicmFrIHdvbG5lZ28gcG9ydHUgZGxhIHVzxYJ1Z2kgVEZUUCIKKworIzogdGZ0cC5jOjMzNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnN1cHBvcnRlZCByZXF1ZXN0IGZyb20gJXMiCittc2dzdHIgIm5pZW9ic8WCdWdpd2FuZSDFvMSFZGFuaWUgb2Qga29tcHV0ZXJhICVzIgorCisjOiB0ZnRwLmM6NDgzCisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJXMgbm90IGZvdW5kIgorbXNnc3RyICJwbGlrICVzIG5pZSB6b3N0YcWCIHpuYWxlemlvbnkiCisKKyM6IHRmdHAuYzo1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgJWQgJXMgcmVjZWl2ZWQgZnJvbSAlcyIKK21zZ3N0ciAiYsWCxIVkICVkICVzIG9kZWJyYW5vIG9kICVzIgorCisjOiB0ZnRwLmM6NjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCBzZW5kaW5nICVzIHRvICVzIgorbXNnc3RyICJixYLEhWQgd3lzecWCYW5pYSBwbGlrdSAlcyBkbyBrb21wdXRlcmEgJXMiCisKKyM6IHRmdHAuYzo2MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VudCAlcyB0byAlcyIKK21zZ3N0ciAicGxpayAlcyBwcnplc8WCYW5vIGRvICVzIgorCisjOiBsb2cuYzoxOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAib3ZlcmZsb3c6ICVkIGxvZyBlbnRyaWVzIGxvc3QiCittc2dzdHIgInByemVwZcWCbmllbmllOiBzdHJhY29ubyAlZCB3cGlzw7N3IGRvIGxvZ8OzdyIKKworIzogbG9nLmM6MjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImxvZyBmYWlsZWQ6ICVzIgorbXNnc3RyICJuaWUgdWRhxYJvIHNpxJkgemFwaXNhxIcga29tdW5pa2F0w7N3IGRvICVzIgorCisjOiBsb2cuYzo0NzEKK21zZ2lkICJGQUlMRUQgdG8gc3RhcnQgdXAiCittc2dzdHIgIkLFgcSERDogbmllIHVkYcWCbyBzacSZIHVydWNob21pxIcgZG5zbWFzcS1hIgorCisjOiBjb25udHJhY2suYzo2NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb25udHJhY2sgY29ubmVjdGlvbiBtYXJrIHJldHJpZXZhbCBmYWlsZWQ6ICVzIgorbXNnc3RyICJOaWUgdWRhxYJvIHNpxJkgb2RjenRhxIcgem5hY3puaWthIHBvxYLEhWN6ZW5pYSAoY29ubnRyYWNrKTogJXMiCisKKyM6IGRoY3A2LmM6NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBESENQdjYgc29ja2V0OiAlcyIKK21zZ3N0ciAibmllIHVkYcWCbyBzacSZIHV0d29yennEhyBnbmlhemRhIGRsYSBESENQdjY6ICVzIgorCisjOiBkaGNwNi5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZXQgU09fUkVVU0V7QUREUnxQT1JUfSBvbiBESENQdjYgc29ja2V0OiAlcyIKK21zZ3N0ciAibmllIHVkYcWCbyBzacSZIHVzdGF3acSHIFNPX1JFVVNFe0FERFJ8UE9SVH0gZ25pYXpkYSBESENQdjY6ICVzIgorCisjOiBkaGNwNi5jOjg1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBiaW5kIERIQ1B2NiBzZXJ2ZXIgc29ja2V0OiAlcyIKK21zZ3N0ciAiZG93acSFenl3YW5pZSBnbmlhemRhIHNlcndlcmEgREhDUHY2IHpha2/FhGN6b25lIG5pZXBvd29kemVuaWVtOiAlcyIKKworIzogcmZjMzMxNS5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICJubyBhZGRyZXNzIHJhbmdlIGF2YWlsYWJsZSBmb3IgREhDUHY2IHJlcXVlc3QgZnJvbSByZWxheSBhdCAlcyIKK21zZ3N0ciAibmllIHpkZWZpbmlvd2FubyB6YWtyZXN1IGFkcmVzw7N3IG9kcG93aWVkbmllZ28gZGxhIMW8xIVkYW5pYSBESENQdjYgcHJ6ZWthemFuZWdvIHByemV6ICVzIgorCisjOiByZmMzMzE1LmM6MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGFkZHJlc3MgcmFuZ2UgYXZhaWxhYmxlIGZvciBESENQdjYgcmVxdWVzdCB2aWEgJXMiCittc2dzdHIgIm5pZSB6ZGVmaW5pb3dhbm8gemFrcmVzdSBhZHJlc8OzdyBvZHBvd2llZG5pZWdvIGRsYSDFvMSFZGFuaWEgREhDUHY2IG9kICVzIgorCisjOiByZmMzMzE1LmM6MzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGF2YWlsYWJsZSBESENQdjYgc3VibmV0OiAlcy8lZCIKK21zZ3N0ciAiJXUgZG9zdMSZcG5hIHBvZHNpZcSHIERIQ1B2NjogJXMvJWQiCisKKyM6IHJmYzMzMTUuYzozODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgdmVuZG9yIGNsYXNzOiAldSIKK21zZ3N0ciAiJXUga2xhc2EgZG9zdGF3Y3k6ICV1IgorCisjOiByZmMzMzE1LmM6NDM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGNsaWVudCBNQUMgYWRkcmVzczogJXMiCittc2dzdHIgImFkcmVzIE1BQyBrbGllbnRhICV1OiAlcyIKKworIzogcmZjMzMxNS5jOjY3MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHByZWZpeC1jbGFzcyAlZCIKK21zZ3N0ciAibmllem5hbmEga2xhc2Egc2llY2kgJWQiCisKKyM6IHJmYzMzMTUuYzo4MTYgcmZjMzMxNS5jOjkxMQorbXNnaWQgImFkZHJlc3MgdW5hdmFpbGFibGUiCittc2dzdHIgImFkcmVzIG5pZWRvc3TEmXBueSIKKworIzogcmZjMzMxNS5jOjgyOCByZmMzMzE1LmM6OTU5IHJmYzMzMTUuYzoxMjkyCittc2dpZCAic3VjY2VzcyIKK21zZ3N0ciAidWRhbmUiCisKKyM6IHJmYzMzMTUuYzo4NDMgcmZjMzMxNS5jOjg1MiByZmMzMzE1LmM6OTY3IHJmYzMzMTUuYzo5NjkKK21zZ2lkICJubyBhZGRyZXNzZXMgYXZhaWxhYmxlIgorbXNnc3RyICJicmFrIHdvbG55Y2ggYWRyZXPDs3ciCisKKyM6IHJmYzMzMTUuYzo5NDYKK21zZ2lkICJub3Qgb24gbGluayIKK21zZ3N0ciAicG96YSB6YXNpxJlnaWVtIgorCisjOiByZmMzMzE1LmM6MTAxOSByZmMzMzE1LmM6MTIwNCByZmMzMzE1LmM6MTI4MQorbXNnaWQgIm5vIGJpbmRpbmcgZm91bmQiCittc2dzdHIgImJyYWsgcG93acSFemFuaWEiCisKKyM6IHJmYzMzMTUuYzoxMDU3Cittc2dpZCAiZGVwcmVjYXRlZCIKK21zZ3N0ciAicHJ6ZXN0YXJ6YcWCeSIKKworIzogcmZjMzMxNS5jOjEwNjIKK21zZ2lkICJhZGRyZXNzIGludmFsaWQiCittc2dzdHIgIm5pZXBvcHJhd255IGFkcmVzIgorCisjOiByZmMzMzE1LmM6MTEwOQorbXNnaWQgImNvbmZpcm0gZmFpbGVkIgorbXNnc3RyICJicmFrIHBvdHdpZXJkemVuaWEiCisKKyM6IHJmYzMzMTUuYzoxMTI1Cittc2dpZCAiYWxsIGFkZHJlc3NlcyBzdGlsbCBvbiBsaW5rIgorbXNnc3RyICJ3c3p5c3RraWUgYWRyZXN5IGNpxIVnbGUgdyB1xbx5Y2l1IgorCisjOiByZmMzMzE1LmM6MTIxMworbXNnaWQgInJlbGVhc2UgcmVjZWl2ZWQiCittc2dzdHIgImFkcmVzIHpvc3RhxYIgendvbG5pb255IgorCisjOiByZmMzMzE1LmM6MjE0MAorbXNnaWQgIkNhbm5vdCBtdWx0aWNhc3QgdG8gREhDUHY2IHNlcnZlciB3aXRob3V0IGNvcnJlY3QgaW50ZXJmYWNlIgorbXNnc3RyICJOaWUgbW9nxJkgcm96ZXPFgmHEhyBkbyBzZXJ3ZXLDs3cgREhDUHY2IG5pZSBtYWrEhWMgcHJhd2lkxYJvd2VnbyBpbnRlcmZlanN1IgorCisjOiBkaGNwLWNvbW1vbi5jOjE0NQorIywgYy1mb3JtYXQKK21zZ2lkICJJZ25vcmluZyBkdXBsaWNhdGUgZGhjcC1vcHRpb24gJWQiCittc2dzdHIgIlBvbWlqYW0gcG93dMOzcnpvbsSFIGRoY3Atb3B0aW9uICVkIgorCisjOiBkaGNwLWNvbW1vbi5jOjIyMgorIywgYy1mb3JtYXQKK21zZ2lkICIldSB0YWdzOiAlcyIKK21zZ3N0ciAiJXUgY2VjaHk6ICVzIgorCisjOiBkaGNwLWNvbW1vbi5jOjQwNworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgbW9yZSB0aGFuIG9uZSBhZGRyZXNzIGluIGhvc3RzZmlsZSwgdXNpbmcgJXMgZm9yIERIQ1AiCittc2dzdHIgImRvIGtvbXB1dGVyYSBvIG5hendpZSAlcyBwYXN1amUgd2nEmWNlaiBuacW8IGplZGVuIGFkcmVzLCB3IG9kcG93aWVkemkgREhDUCB3eXN5xYJhbSAlcyIKKworIzogZGhjcC1jb21tb24uYzo0MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIElQIGFkZHJlc3MgJXMgKCVzKSBpbiBkaGNwLWNvbmZpZyBkaXJlY3RpdmUiCittc2dzdHIgInBvd3TDs3J6ZW5pZSBhZHJlc3UgSVAgJXMgKCVzKSB3IG9wY2ppIGRoY3AtY29uZmlnIgorCisjOiBkaGNwLWNvbW1vbi5jOjQ5NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2V0IFNPX0JJTkRUT0RFVklDRSBvbiBESENQIHNvY2tldDogJXMiCittc2dzdHIgIm5pZSB1ZGHFgm8gc2nEmSB1c3Rhd2nEhyBTT19CSU5EVE9ERVZJQ0UgZ25pYXpkYSBESENQOiAlcyIKKworIzogZGhjcC1jb21tb24uYzo2MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiS25vd24gREhDUCBvcHRpb25zOlxuIgorbXNnc3RyICJabmFuZSBvcGNqZSBESENQOlxuIgorCisjOiBkaGNwLWNvbW1vbi5jOjYyNgorIywgYy1mb3JtYXQKK21zZ2lkICJLbm93biBESENQdjYgb3B0aW9uczpcbiIKK21zZ3N0ciAiUm96cG96bmF3YW5lIG9wY2plIERIQ1B2NjpcbiIKKworIzogZGhjcC1jb21tb24uYzo4MjMKK21zZ2lkICIsIHByZWZpeCBkZXByZWNhdGVkIgorbXNnc3RyICIsIHByemVzdGFyemHFgnkgcHJlZmlrcyIKKworIzogZGhjcC1jb21tb24uYzo4MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCBsZWFzZSB0aW1lICIKK21zZ3N0ciAiLCBjemFzIGR6aWVyxbxhd3kgIgorCisjOiBkaGNwLWNvbW1vbi5jOjg2OAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBzdGF0ZWxlc3Mgb24gJXMlLjBzJS4wcyVzIgorbXNnc3RyICIlcyBiZXpzdGFub3d5IG5hICVzJS4wcyUuMHMlcyIKKworIzogZGhjcC1jb21tb24uYzo4NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsIHN0YXRpYyBsZWFzZXMgb25seSBvbiAlLjBzJXMlcyUuMHMiCittc2dzdHIgIiVzLCB3ecWCxIVjem5pZSBzdGF0eWN6bmUgZHppZXLFvGF3eSBuYSAlLjBzJXMlcyUuMHMiCisKKyM6IGRoY3AtY29tbW9uLmM6ODcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCBwcm94eSBvbiBzdWJuZXQgJS4wcyVzJS4wcyUuMHMiCittc2dzdHIgIiVzLCB3eWtyeXRvIHBvxZtyZWRuaWthIG5hIHBvZHNpZWNpICUuMHMlcyUuMHMlLjBzIgorCisjOiBkaGNwLWNvbW1vbi5jOjg3MworIywgYy1mb3JtYXQKK21zZ2lkICIlcywgSVAgcmFuZ2UgJXMgLS0gJXMlcyUuMHMiCittc2dzdHIgIiVzLCB6YWtyZXMgSVAgJXMgLS0gJXMlcyUuMHMiCisKKyM6IGRoY3AtY29tbW9uLmM6ODg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1B2NC1kZXJpdmVkIElQdjYgbmFtZXMgb24gJXMlcyIKK21zZ3N0ciAicG9jaG9kesSFY2UgeiBESENQdjQgbmF6d3kgSVB2NiBuYSAlcyVzIgorCisjOiBkaGNwLWNvbW1vbi5jOjg4OQorIywgYy1mb3JtYXQKK21zZ2lkICJyb3V0ZXIgYWR2ZXJ0aXNlbWVudCBvbiAlcyVzIgorbXNnc3RyICJhbm9uc293YW5pZSBydXRlcmEgbmEgJXMlcyIKKworIzogZGhjcC1jb21tb24uYzo5MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCByZWxheSBmcm9tICVzIHRvICVzIHZpYSAlcyIKK21zZ3N0ciAicHJ6ZWthenl3YW5pZSBESENQIHogJXMgZG8gJXMgemEgcG9tb2PEhSAlcyIKKworIzogZGhjcC1jb21tb24uYzo5MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCByZWxheSBmcm9tICVzIHRvICVzIgorbXNnc3RyICJwcnpla2F6eXdhbmllIERIQ1AgeiAlcyBkbyAlcyIKKworIzogcmFkdi5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIElDTVB2NiBzb2NrZXQ6ICVzIgorbXNnc3RyICJuaWUgdWRhxYJvIHNpxJkgdXR3b3J6ecSHIGduaWF6ZGEgZGxhIElDTVB2NjogJXMiCisKKyM6IGF1dGguYzo0NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3Jpbmcgem9uZSB0cmFuc2ZlciByZXF1ZXN0IGZyb20gJXMiCittc2dzdHIgImlnbm9ydWrEmSDFvMSFZGFuaWUgdHJhbnNmZXJ1IHN0cmVmeSBvZCAlcyIKKworIzogaXBzZXQuYzo5NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluZCBrZXJuZWwgdmVyc2lvbjogJXMiCittc2dzdHIgIm5pZXpnb2RuYSB3ZXJzamEgasSFZHJhOiAlcyIKKworIzogaXBzZXQuYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBJUHNldCBjb250cm9sIHNvY2tldDogJXMiCittc2dzdHIgIm5pZSBwb3dpb2TFgm8gc2nEmSBvdHdpZXJhbmllIGduaWF6ZGEgc3RlcnVqxIVjZWdvIElQc2V0OiAlcyIKKworIzogaXBzZXQuYzoyMzMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB1cGRhdGUgaXBzZXQgJXM6ICVzIgorbXNnc3RyICJuaWUgdWRhxYJvIHNpxJkgdWFrdHVhbG5pxIcgem5hY3puaWthIGN6YXN1IHBsaWt1ICVzOiAlcyIKKworIzogZG5zc2VjLmM6NTI3CisjLCBmdXp6eQorbXNnaWQgInN5c3RlbSB0aW1lIGNvbnNpZGVyZWQgdmFsaWQsIG5vdyBjaGVja2luZyBETlNTRUMgc2lnbmF0dXJlIHRpbWVzdGFtcHMuIgorbXNnc3RyICJ0cndhIHNwcmF3ZHphbmllIHN5Z25hdHVyIGN6YXNvd3ljaCBwb2RwaXPDs3cgRE5TU0VDIgorCisjOiBibG9ja2RhdGEuYzo1OAorIywgYy1mb3JtYXQKK21zZ2lkICJETlNTRUMgbWVtb3J5IGluIHVzZSAldSwgbWF4ICV1LCBhbGxvY2F0ZWQgJXUiCittc2dzdHIgIkROU1NFQzogenXFvHljaWUgcGFtacSZY2kgJXUsIG1ha3MuICV1LCBwcnp5ZHppZWxvbmEgJXUiCisKKyM6IHRhYmxlcy5jOjYxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBhY2Nlc3MgcGYgZGV2aWNlczogJXMiCittc2dzdHIgImJyYWsgZG9zdMSZcHUgZG8gL2Rldi9wZiAoZmlsdHJhIHBha2lldMOzdyk6ICVzIgorCisjOiB0YWJsZXMuYzo3NAorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBubyBvcGVuZWQgcGYgZGV2aWNlcyAlcyIKK21zZ3N0ciAidXdhZ2E6IGJyYWsgb3R3YXJ0eWNoIGZpbHRyw7N3IHBha2lldMOzdyAlcyIKKworIzogdGFibGVzLmM6ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3I6IGNhbm5vdCB1c2UgdGFibGUgbmFtZSAlcyIKK21zZ3N0ciAiYsWCxIVkOiBuaWUgcG90cmFmacSZIHXFvHnEhyBuYXp3eSB0YWJsaWN5ICVzIgorCisjOiB0YWJsZXMuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvcjogY2Fubm90IHN0cmxjcHkgdGFibGUgbmFtZSAlcyIKK21zZ3N0ciAiYsWCxIVkOiBuaWUgcG90cmFmacSZIHN0cmxjcHkgbmF6d3kgdGFibGljeSAlcyIKKworIzogdGFibGVzLmM6MTAxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJJUHNldDogZXJyb3I6JXMiCittc2dzdHIgImLFgsSFZCBEQnVzOiAlcyIKKworIzogdGFibGVzLmM6MTA4Cittc2dpZCAiaW5mbzogdGFibGUgY3JlYXRlZCIKK21zZ3N0ciAiaW5mbzogdGFibGljYSB1dHdvcnpvbmEiCisKKyM6IHRhYmxlcy5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBESU9DUiVzQUREUlM6ICVzIgorbXNnc3RyICJ1d2FnYTogRElPQ1Ilc0FERFJTOiAlcyIKKworIzogdGFibGVzLmM6MTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGFkZHJlc3NlcyAlcyIKK21zZ3N0ciAiJWQgYWRyZXPDs3cgJXMiCisKKyM6IGlub3RpZnkuYzo2MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgYWNjZXNzIHBhdGggJXM6ICVzIgorbXNnc3RyICJicmFrIGRvc3TEmXB1IGRvIGthdGFsb2d1ICVzOiAlcyIKKworIzogaW5vdGlmeS5jOjk1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgaW5vdGlmeTogJXMiCittc2dzdHIgIm5pZSB1ZGHFgm8gc2nEmSB1cnVjaG9tacSHIHBvd2lhZGFtaWFuaWEgaW5vdGlmeTogJXMiCisKKyM6IGlub3RpZnkuYzoxMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidG9vIG1hbnkgc3ltbGlua3MgZm9sbG93aW5nICVzIgorbXNnc3RyICJ6Ynl0IHdpZWxlIG9kbmllc2llxYQgcG9jesSFd3N6eSBvZCAlcyIKKworIzogaW5vdGlmeS5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJkaXJlY3RvcnkgJXMgZm9yIHJlc29sdi1maWxlIGlzIG1pc3NpbmcsIGNhbm5vdCBwb2xsIgorbXNnc3RyICJrYXRhbG9nICVzIHogcmVzb2x2LWZpbGUgbmllIGlzdG5pZWplIC0gbmllIG1hIGN6ZWdvIG9kcHl0eXdhxIciCisKKyM6IGlub3RpZnkuYzoxMzEgaW5vdGlmeS5jOjE2OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGlub3RpZnkgZm9yICVzOiAlcyIKK21zZ3N0ciAibmllIHVkYcWCbyBzacSZIHV0d29yennEhyBwb3dpYWRhbWlhbmlhIGRsYSAlczogJXMiCisKKyM6IGlub3RpZnkuYzoxNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGR5bmFtaWMgZGlyZWN0b3J5ICVzOiAlcyIKK21zZ3N0ciAiesWCeSBrYXRhbG9nIGR5bmFtaWN6bnkgJXM6ICVzIgorCisjOiBpbm90aWZ5LmM6MjU1CisjLCBjLWZvcm1hdAorbXNnaWQgImlub3RpZnksIG5ldyBvciBjaGFuZ2VkIGZpbGUgJXMiCittc2dzdHIgImlub3RpZnk6IHBvamF3acWCIHNpxJkgbHViIHVsZWfFgiB6bWlhbmllIHBsaWsgJXMiCisKKyN+IG1zZ2lkICJiYWQgVFRMIgorI34gbXNnc3RyICJ6xYJ5IFRUTCIKKworI34gbXNnaWQgImVycm9yOiBmaWxsX2FkZHIgbWlzc3VzZWQiCisjfiBtc2dzdHIgImLFgsSFZDogbmllcG9wcmF3bmllIHXFvHl0eSBmaWxsX2FkZHIiCisKKyN+IG1zZ2lkICJ3YXJuaW5nOiBwZnJfYWRkX3RhYmxlczogJXMoJWQpIgorI34gbXNnc3RyICJ1d2FnYTogcGZyX2FkZF90YWJsZXM6ICVzKCVkKSIKKworIywgZnV6enkKKyN+IG1zZ2lkICJjYW5ub3QgY2Fubm9uaWNhbGlzZSByZXNvbHYtZmlsZSAlczogJXMiCisjfiBtc2dzdHIgIm5pZSBwb3RyYWZpxJkgb3R3b3J6ecSHIGFsYm8gdXR3b3J6ecSHIHBsaWt1IGR6aWVyxbxhdyAlczogJXMiCisKKyN+IG1zZ2lkICJBbHdheXMgc2VuZCBmcmVxdWVudCByb3V0ZXItYWR2ZXJ0aXNlbWVudHMiCisjfiBtc2dzdHIgIlJvenN5xYJhbmllIHdpZWxva3JvdG5lIGFub25zw7N3IHJ1dGVyYSAoUkEpIgorCisjfiBtc2dpZCAibm8gaW50ZXJmYWNlIHdpdGggYWRkcmVzcyAlcyIKKyN+IG1zZ3N0ciAiYnJhayBpbnRlcmZlanN1IHogYWRyZXNlbSAlcyIKKworI34gbXNnaWQgImR1cGxpY2F0ZSBJUCBhZGRyZXNzICVzIGluIGRoY3AtY29uZmlnIGRpcmVjdGl2ZS4iCisjfiBtc2dzdHIgInBvd3TDs3J6b255IGFkcmVzIElQICglcykgdyBwYXJhbWV0cnplIGRoY3AtY29uZmlnIgorCisjLCBmdXp6eQorI34gbXNnaWQgIlNwZWNpZnkgcGF0aCB0byBMdWEgc2NyaXB0IChubyBkZWZhdWx0KS4iCisjfiBtc2dzdHIgIk9rcmXFm2xlbmllIMWbY2llxbxraSBkbyBwbGlrdSBQSUQgKGRvbXnFm2xuaWU6ICVzKS4iCisKKyN+IG1zZ2lkICJvbmx5IG9uZSBkaGNwLWhvc3RzZmlsZSBhbGxvd2VkIgorI34gbXNnc3RyICJtb8W8bmEgd3NrYXphxIcgdHlsa28gamVkZW4gcGxpayBkaGNwLWhvc3RzZmlsZSIKKworI34gbXNnaWQgIm9ubHkgb25lIGRoY3Atb3B0c2ZpbGUgYWxsb3dlZCIKKyN+IG1zZ3N0ciAibW/FvG5hIHdza2F6YcSHIHR5bGtvIGplZGVuIHBsaWsgZGhjcC1vcHRzZmlsZSIKKworI34gbXNnaWQgImZpbGVzIG5lc3RlZCB0b28gZGVlcCBpbiAlcyIKKyN+IG1zZ3N0ciAiemJ5dCBkdcW8ZSB6YWfFgsSZYmllbmllIHBsaWvDs3cgdyAlcyIKKworI34gbXNnaWQgIlRYVCByZWNvcmQgc3RyaW5nIHRvbyBsb25nIgorI34gbXNnc3RyICJ6Ynl0IGTFgnVnaSByZWtvcmQgVFhUIgorCisjfiBtc2dpZCAiZmFpbGVkIHRvIHNldCBJUFY2IG9wdGlvbnMgb24gbGlzdGVuaW5nIHNvY2tldDogJXMiCisjfiBtc2dzdHIgImLFgsSFZCB1c3Rhd2lhbmlhIG9wY2ppIElQVjYgbmEgbmFzxYJ1Y2h1asSFY3ltIGduaWXFumR6aWU6ICVzIgorCisjfiBtc2dpZCAiZmFpbGVkIHRvIGJpbmQgbGlzdGVuaW5nIHNvY2tldCBmb3IgJXM6ICVzIgorI34gbXNnc3RyICJixYLEhWQgcHJ6eSBwcnp5em5hd2FuaXUgbmF6d3kgZ25pYXpkdSAlczogJXMiCmRpZmYgLS1naXQgYS9wby9wdF9CUi5wbyBiL3BvL3B0X0JSLnBvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM5ODVhOWIKLS0tIC9kZXYvbnVsbAorKysgYi9wby9wdF9CUi5wbwpAQCAtMCwwICsxLDIyMjYgQEAKKyMgUG9ydHVndWVzZSB0cmFuc2xhdGlvbnMgZm9yIGRuc21hc3EgcGFja2FnZS4KKyMgVGhpcyBmaWxlIGlzIHB1dCBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyMgU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4sIDIwMDYuCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBkbnNtYXNxIDIuMjZcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMDktMDYtMTggMTI6MjQrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTctMDctMTcgMTg6MzArMDEwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az5cbiIKKyJMYW5ndWFnZS1UZWFtOiBQb3J0dWd1ZXNlIDxsZHAtYnJAYmF6YXIuY29uZWN0aXZhLmNvbS5icj5cbiIKKyJMYW5ndWFnZTogcHRcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1BU0NJSVxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiA+IDEpO1xuIgorCisjOiBjYWNoZS5jOjUxMworbXNnaWQgIkludGVybmFsIGVycm9yIGluIGNhY2hlLiIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjkyMworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBuYW1lcyBmcm9tICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjk0OSBkaGNwLmM6ODY3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBhZGRyZXNzIGF0ICVzIGxpbmUgJWQiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxMDAyIGRoY3AuYzo4ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG5hbWUgYXQgJXMgbGluZSAlZCIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjEwMTEgZGhjcC5jOjk1OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkICVzIC0gJWQgYWRkcmVzc2VzIgorbXNnc3RyICIiCisKKyM6IGNhY2hlLmM6MTEyNAorbXNnaWQgImNsZWFyZWQgY2FjaGUiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxMTUzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIElQdjQgYWRkcmVzcyBmb3VuZCBmb3IgJXMiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxMjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGEgQ05BTUUsIG5vdCBnaXZpbmcgaXQgdG8gdGhlIERIQ1AgbGVhc2Ugb2YgJXMiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxMjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBnaXZpbmcgbmFtZSAlcyB0byB0aGUgREhDUCBsZWFzZSBvZiAlcyBiZWNhdXNlIHRoZSBuYW1lIGV4aXN0cyBpbiAlcyB3aXRoIGFkZHJlc3MgJXMiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxNDEzCisjLCBjLWZvcm1hdAorbXNnaWQgInRpbWUgJWx1IgorbXNnc3RyICIiCisKKyM6IGNhY2hlLmM6MTQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJjYWNoZSBzaXplICVkLCAlZC8lZCBjYWNoZSBpbnNlcnRpb25zIHJlLXVzZWQgdW5leHBpcmVkIGNhY2hlIGVudHJpZXMuIgorbXNnc3RyICIiCisKKyM6IGNhY2hlLmM6MTQxNgorIywgYy1mb3JtYXQKK21zZ2lkICJxdWVyaWVzIGZvcndhcmRlZCAldSwgcXVlcmllcyBhbnN3ZXJlZCBsb2NhbGx5ICV1IgorbXNnc3RyICIiCisKKyM6IGNhY2hlLmM6MTQxOQorIywgYy1mb3JtYXQKK21zZ2lkICJxdWVyaWVzIGZvciBhdXRob3JpdGF0aXZlIHpvbmVzICV1IgorbXNnc3RyICIiCisKKyM6IGNhY2hlLmM6MTQ0NQorIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2ZXIgJXMjJWQ6IHF1ZXJpZXMgc2VudCAldSwgcmV0cmllZCBvciBmYWlsZWQgJXUiCittc2dzdHIgIiIKKworIzogdXRpbC5jOjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZWVkIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcjogJXMiCittc2dzdHIgIiIKKworIzogdXRpbC5jOjIyNAorbXNnaWQgImZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkiCittc2dzdHIgIiIKKworIzogdXRpbC5jOjI3NyBvcHRpb24uYzo2MTkKK21zZ2lkICJjb3VsZCBub3QgZ2V0IG1lbW9yeSIKK21zZ3N0ciAiIgorCisjOiB1dGlsLmM6Mjg3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgcGlwZTogJXMiCittc2dzdHIgIiIKKworIzogdXRpbC5jOjI5NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYWxsb2NhdGUgJWQgYnl0ZXMiCittc2dzdHIgIiIKKworIzogdXRpbC5jOjQ2NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbmZpbml0ZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNDQKK21zZ2lkICJTcGVjaWZ5IGxvY2FsIGFkZHJlc3MoZXMpIHRvIGxpc3RlbiBvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzQ1Cittc2dpZCAiUmV0dXJuIGlwYWRkciBmb3IgYWxsIGhvc3RzIGluIHNwZWNpZmllZCBkb21haW5zLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNDYKK21zZ2lkICJGYWtlIHJldmVyc2UgbG9va3VwcyBmb3IgUkZDMTkxOCBwcml2YXRlIGFkZHJlc3MgcmFuZ2VzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNDcKK21zZ2lkICJUcmVhdCBpcGFkZHIgYXMgTlhET01BSU4gKGRlZmVhdHMgVmVyaXNpZ24gd2lsZGNhcmQpLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSB0aGUgc2l6ZSBvZiB0aGUgY2FjaGUgaW4gZW50cmllcyAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSBjb25maWd1cmF0aW9uIGZpbGUgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzUwCittc2dpZCAiRG8gTk9UIGZvcmsgaW50byB0aGUgYmFja2dyb3VuZDogcnVuIGluIGRlYnVnIG1vZGUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM1MQorbXNnaWQgIkRvIE5PVCBmb3J3YXJkIHF1ZXJpZXMgd2l0aCBubyBkb21haW4gcGFydC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzUyCittc2dpZCAiUmV0dXJuIHNlbGYtcG9pbnRpbmcgTVggcmVjb3JkcyBmb3IgbG9jYWwgaG9zdHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM1MworbXNnaWQgIkV4cGFuZCBzaW1wbGUgbmFtZXMgaW4gL2V0Yy9ob3N0cyB3aXRoIGRvbWFpbi1zdWZmaXguIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM1NAorbXNnaWQgIkRvbid0IGZvcndhcmQgc3B1cmlvdXMgRE5TIHJlcXVlc3RzIGZyb20gV2luZG93cyBob3N0cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzU1Cittc2dpZCAiRW5hYmxlIERIQ1AgaW4gdGhlIHJhbmdlIGdpdmVuIHdpdGggbGVhc2UgZHVyYXRpb24uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM1NgorIywgYy1mb3JtYXQKK21zZ2lkICJDaGFuZ2UgdG8gdGhpcyBncm91cCBhZnRlciBzdGFydHVwIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM1NworbXNnaWQgIlNldCBhZGRyZXNzIG9yIGhvc3RuYW1lIGZvciBhIHNwZWNpZmllZCBtYWNoaW5lLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNTgKK21zZ2lkICJSZWFkIERIQ1AgaG9zdCBzcGVjcyBmcm9tIGZpbGUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM1OQorbXNnaWQgIlJlYWQgREhDUCBvcHRpb24gc3BlY3MgZnJvbSBmaWxlLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNjAKK21zZ2lkICJSZWFkIERIQ1AgaG9zdCBzcGVjcyBmcm9tIGEgZGlyZWN0b3J5LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNjEKK21zZ2lkICJSZWFkIERIQ1Agb3B0aW9ucyBmcm9tIGEgZGlyZWN0b3J5LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNjIKK21zZ2lkICJFdmFsdWF0ZSBjb25kaXRpb25hbCB0YWcgZXhwcmVzc2lvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkRvIE5PVCBsb2FkICVzIGZpbGUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM2NAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IGEgaG9zdHMgZmlsZSB0byBiZSByZWFkIGluIGFkZGl0aW9uIHRvICVzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNjUKK21zZ2lkICJSZWFkIGhvc3RzIGZpbGVzIGZyb20gYSBkaXJlY3RvcnkuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM2NgorbXNnaWQgIlNwZWNpZnkgaW50ZXJmYWNlKHMpIHRvIGxpc3RlbiBvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzY3Cittc2dpZCAiU3BlY2lmeSBpbnRlcmZhY2UocykgTk9UIHRvIGxpc3RlbiBvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzY4Cittc2dpZCAiTWFwIERIQ1AgdXNlciBjbGFzcyB0byB0YWcuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM2OQorbXNnaWQgIk1hcCBSRkMzMDQ2IGNpcmN1aXQtaWQgdG8gdGFnLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNzAKK21zZ2lkICJNYXAgUkZDMzA0NiByZW1vdGUtaWQgdG8gdGFnLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNzEKK21zZ2lkICJNYXAgUkZDMzk5MyBzdWJzY3JpYmVyLWlkIHRvIHRhZy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzcyCittc2dpZCAiRG9uJ3QgZG8gREhDUCBmb3IgaG9zdHMgd2l0aCB0YWcgc2V0LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNzMKK21zZ2lkICJGb3JjZSBicm9hZGNhc3QgcmVwbGllcyBmb3IgaG9zdHMgd2l0aCB0YWcgc2V0LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNzQKK21zZ2lkICJEbyBOT1QgZm9yayBpbnRvIHRoZSBiYWNrZ3JvdW5kLCBkbyBOT1QgcnVuIGluIGRlYnVnIG1vZGUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM3NQorbXNnaWQgIkFzc3VtZSB3ZSBhcmUgdGhlIG9ubHkgREhDUCBzZXJ2ZXIgb24gdGhlIGxvY2FsIG5ldHdvcmsuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHdoZXJlIHRvIHN0b3JlIERIQ1AgbGVhc2VzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM3NworbXNnaWQgIlJldHVybiBNWCByZWNvcmRzIGZvciBsb2NhbCBob3N0cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzc4Cittc2dpZCAiU3BlY2lmeSBhbiBNWCByZWNvcmQuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM3OQorbXNnaWQgIlNwZWNpZnkgQk9PVFAgb3B0aW9ucyB0byBESENQIHNlcnZlci4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkRvIE5PVCBwb2xsICVzIGZpbGUsIHJlbG9hZCBvbmx5IG9uIFNJR0hVUC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzgxCittc2dpZCAiRG8gTk9UIGNhY2hlIGZhaWxlZCBzZWFyY2ggcmVzdWx0cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzgyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzZSBuYW1lc2VydmVycyBzdHJpY3RseSBpbiB0aGUgb3JkZXIgZ2l2ZW4gaW4gJXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM4MworbXNnaWQgIlNwZWNpZnkgb3B0aW9ucyB0byBiZSBzZW50IHRvIERIQ1AgY2xpZW50cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzg0Cittc2dpZCAiREhDUCBvcHRpb24gc2VudCBldmVuIGlmIHRoZSBjbGllbnQgZG9lcyBub3QgcmVxdWVzdCBpdC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzg1Cittc2dpZCAiU3BlY2lmeSBwb3J0IHRvIGxpc3RlbiBmb3IgRE5TIHJlcXVlc3RzIG9uIChkZWZhdWx0cyB0byA1MykuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM4NgorIywgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIHN1cHBvcnRlZCBVRFAgcGFja2V0IHNpemUgZm9yIEVETlMuMCAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozODcKK21zZ2lkICJMb2cgRE5TIHF1ZXJpZXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM4OAorbXNnaWQgIkZvcmNlIHRoZSBvcmlnaW5hdGluZyBwb3J0IGZvciB1cHN0cmVhbSBETlMgcXVlcmllcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzg5Cittc2dpZCAiRG8gTk9UIHJlYWQgcmVzb2x2LmNvbmYuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHBhdGggdG8gcmVzb2x2LmNvbmYgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzkxCittc2dpZCAiU3BlY2lmeSBwYXRoIHRvIGZpbGUgd2l0aCBzZXJ2ZXI9IG9wdGlvbnMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzkyCittc2dpZCAiU3BlY2lmeSBhZGRyZXNzKGVzKSBvZiB1cHN0cmVhbSBzZXJ2ZXJzIHdpdGggb3B0aW9uYWwgZG9tYWlucy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzkzCittc2dpZCAiU3BlY2lmeSBhZGRyZXNzIG9mIHVwc3RyZWFtIHNlcnZlcnMgZm9yIHJldmVyc2UgYWRkcmVzcyBxdWVyaWVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM5NAorbXNnaWQgIk5ldmVyIGZvcndhcmQgcXVlcmllcyB0byBzcGVjaWZpZWQgZG9tYWlucy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzk1Cittc2dpZCAiU3BlY2lmeSB0aGUgZG9tYWluIHRvIGJlIGFzc2lnbmVkIGluIERIQ1AgbGVhc2VzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozOTYKK21zZ2lkICJTcGVjaWZ5IGRlZmF1bHQgdGFyZ2V0IGluIGFuIE1YIHJlY29yZC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzk3Cittc2dpZCAiU3BlY2lmeSB0aW1lLXRvLWxpdmUgaW4gc2Vjb25kcyBmb3IgcmVwbGllcyBmcm9tIC9ldGMvaG9zdHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM5OAorbXNnaWQgIlNwZWNpZnkgdGltZS10by1saXZlIGluIHNlY29uZHMgZm9yIG5lZ2F0aXZlIGNhY2hpbmcuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM5OQorbXNnaWQgIlNwZWNpZnkgdGltZS10by1saXZlIGluIHNlY29uZHMgZm9yIG1heGltdW0gVFRMIHRvIHNlbmQgdG8gY2xpZW50cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDAwCittc2dpZCAiU3BlY2lmeSB0aW1lLXRvLWxpdmUgY2VpbGluZyBmb3IgY2FjaGUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQwMQorbXNnaWQgIlNwZWNpZnkgdGltZS10by1saXZlIGZsb29yIGZvciBjYWNoZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNoYW5nZSB0byB0aGlzIHVzZXIgYWZ0ZXIgc3RhcnR1cC4gKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDAzCittc2dpZCAiTWFwIERIQ1AgdmVuZG9yIGNsYXNzIHRvIHRhZy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDA0Cittc2dpZCAiRGlzcGxheSBkbnNtYXNxIHZlcnNpb24gYW5kIGNvcHlyaWdodCBpbmZvcm1hdGlvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDA1Cittc2dpZCAiVHJhbnNsYXRlIElQdjQgYWRkcmVzc2VzIGZyb20gdXBzdHJlYW0gc2VydmVycy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDA2Cittc2dpZCAiU3BlY2lmeSBhIFNSViByZWNvcmQuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQwNworbXNnaWQgIkRpc3BsYXkgdGhpcyBtZXNzYWdlLiBVc2UgLS1oZWxwIGRoY3Agb3IgLS1oZWxwIGRoY3A2IGZvciBrbm93biBESENQIG9wdGlvbnMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQwOAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHBhdGggb2YgUElEIGZpbGUgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDA5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgbWF4aW11bSBudW1iZXIgb2YgREhDUCBsZWFzZXMgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDEwCittc2dpZCAiQW5zd2VyIEROUyBxdWVyaWVzIGJhc2VkIG9uIHRoZSBpbnRlcmZhY2UgYSBxdWVyeSB3YXMgc2VudCB0by4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDExCittc2dpZCAiU3BlY2lmeSBUWFQgRE5TIHJlY29yZC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDEyCittc2dpZCAiU3BlY2lmeSBQVFIgRE5TIHJlY29yZC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDEzCittc2dpZCAiR2l2ZSBETlMgbmFtZSB0byBJUHY0IGFkZHJlc3Mgb2YgaW50ZXJmYWNlLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MTQKK21zZ2lkICJCaW5kIG9ubHkgdG8gaW50ZXJmYWNlcyBpbiB1c2UuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJSZWFkIERIQ1Agc3RhdGljIGhvc3QgaW5mb3JtYXRpb24gZnJvbSAlcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDE2Cittc2dpZCAiRW5hYmxlIHRoZSBEQnVzIGludGVyZmFjZSBmb3Igc2V0dGluZyB1cHN0cmVhbSBzZXJ2ZXJzLCBldGMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQxNworbXNnaWQgIkRvIG5vdCBwcm92aWRlIERIQ1Agb24gdGhpcyBpbnRlcmZhY2UsIG9ubHkgcHJvdmlkZSBETlMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQxOAorbXNnaWQgIkVuYWJsZSBkeW5hbWljIGFkZHJlc3MgYWxsb2NhdGlvbiBmb3IgYm9vdHAuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQxOQorbXNnaWQgIk1hcCBNQUMgYWRkcmVzcyAod2l0aCB3aWxkY2FyZHMpIHRvIG9wdGlvbiBzZXQuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQyMAorbXNnaWQgIlRyZWF0IERIQ1AgcmVxdWVzdHMgb24gYWxpYXNlcyBhcyBhcnJpdmluZyBmcm9tIGludGVyZmFjZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDIxCittc2dpZCAiRGlzYWJsZSBJQ01QIGVjaG8gYWRkcmVzcyBjaGVja2luZyBpbiB0aGUgREhDUCBzZXJ2ZXIuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQyMgorbXNnaWQgIlNoZWxsIHNjcmlwdCB0byBydW4gb24gREhDUCBsZWFzZSBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQyMworbXNnaWQgIkx1YSBzY3JpcHQgdG8gcnVuIG9uIERIQ1AgbGVhc2UgY3JlYXRpb24gYW5kIGRlc3RydWN0aW9uLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MjQKK21zZ2lkICJSdW4gbGVhc2UtY2hhbmdlIHNjcmlwdHMgYXMgdGhpcyB1c2VyLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MjUKK21zZ2lkICJDYWxsIGRoY3Atc2NyaXB0IHdpdGggY2hhbmdlcyB0byBsb2NhbCBBUlAgdGFibGUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQyNgorbXNnaWQgIlJlYWQgY29uZmlndXJhdGlvbiBmcm9tIGFsbCB0aGUgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQyNworbXNnaWQgIkxvZyB0byB0aGlzIHN5c2xvZyBmYWNpbGl0eSBvciBmaWxlLiAoZGVmYXVsdHMgdG8gREFFTU9OKSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MjgKK21zZ2lkICJEbyBub3QgdXNlIGxlYXNlZmlsZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDI5CisjLCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgRE5TIHF1ZXJpZXMuIChkZWZhdWx0cyB0byAlcykiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNsZWFyIEROUyBjYWNoZSB3aGVuIHJlbG9hZGluZyAlcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDMxCittc2dpZCAiSWdub3JlIGhvc3RuYW1lcyBwcm92aWRlZCBieSBESENQIGNsaWVudHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQzMgorbXNnaWQgIkRvIE5PVCByZXVzZSBmaWxlbmFtZSBhbmQgc2VydmVyIGZpZWxkcyBmb3IgZXh0cmEgREhDUCBvcHRpb25zLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzMKK21zZ2lkICJFbmFibGUgaW50ZWdyYXRlZCByZWFkLW9ubHkgVEZUUCBzZXJ2ZXIuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQzNAorbXNnaWQgIkV4cG9ydCBmaWxlcyBieSBURlRQIG9ubHkgZnJvbSB0aGUgc3BlY2lmaWVkIHN1YnRyZWUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQzNQorbXNnaWQgIkFkZCBjbGllbnQgSVAgb3IgaGFyZHdhcmUgYWRkcmVzcyB0byB0ZnRwLXJvb3QuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQzNgorbXNnaWQgIkFsbG93IGFjY2VzcyBvbmx5IHRvIGZpbGVzIG93bmVkIGJ5IHRoZSB1c2VyIHJ1bm5pbmcgZG5zbWFzcS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDM3Cittc2dpZCAiRG8gbm90IHRlcm1pbmF0ZSB0aGUgc2VydmljZSBpZiBURlRQIGRpcmVjdG9yaWVzIGFyZSBpbmFjY2Vzc2libGUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQzOAorIywgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IFRGVFAgdHJhbnNmZXJzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQzOQorbXNnaWQgIk1heGltdW0gTVRVIHRvIHVzZSBmb3IgVEZUUCB0cmFuc2ZlcnMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ0MAorbXNnaWQgIkRpc2FibGUgdGhlIFRGVFAgYmxvY2tzaXplIGV4dGVuc2lvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQxCittc2dpZCAiQ29udmVydCBURlRQIGZpbGVuYW1lcyB0byBsb3dlcmNhc2UiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQyCittc2dpZCAiRXBoZW1lcmFsIHBvcnQgcmFuZ2UgZm9yIHVzZSBieSBURlRQIHRyYW5zZmVycy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQzCittc2dpZCAiRXh0cmEgbG9nZ2luZyBmb3IgREhDUC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQ0Cittc2dpZCAiRW5hYmxlIGFzeW5jLiBsb2dnaW5nOyBvcHRpb25hbGx5IHNldCBxdWV1ZSBsZW5ndGguIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ0NQorbXNnaWQgIlN0b3AgRE5TIHJlYmluZGluZy4gRmlsdGVyIHByaXZhdGUgSVAgcmFuZ2VzIHdoZW4gcmVzb2x2aW5nLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDYKK21zZ2lkICJBbGxvdyByZWJpbmRpbmcgb2YgMTI3LjAuMC4wLzgsIGZvciBSQkwgc2VydmVycy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQ3Cittc2dpZCAiSW5oaWJpdCBETlMtcmViaW5kIHByb3RlY3Rpb24gb24gdGhpcyBkb21haW4uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ0OAorbXNnaWQgIkFsd2F5cyBwZXJmb3JtIEROUyBxdWVyaWVzIHRvIGFsbCBzZXJ2ZXJzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDkKK21zZ2lkICJTZXQgdGFnIGlmIGNsaWVudCBpbmNsdWRlcyBtYXRjaGluZyBvcHRpb24gaW4gcmVxdWVzdC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDUwCittc2dpZCAiVXNlIGFsdGVybmF0aXZlIHBvcnRzIGZvciBESENQLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NTEKK21zZ2lkICJTcGVjaWZ5IE5BUFRSIEROUyByZWNvcmQuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1MgorbXNnaWQgIlNwZWNpZnkgbG93ZXN0IHBvcnQgYXZhaWxhYmxlIGZvciBETlMgcXVlcnkgdHJhbnNtaXNzaW9uLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NTMKK21zZ2lkICJTcGVjaWZ5IGhpZ2hlc3QgcG9ydCBhdmFpbGFibGUgZm9yIEROUyBxdWVyeSB0cmFuc21pc3Npb24uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1NAorbXNnaWQgIlVzZSBvbmx5IGZ1bGx5IHF1YWxpZmllZCBkb21haW4gbmFtZXMgZm9yIERIQ1AgY2xpZW50cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDU1Cittc2dpZCAiR2VuZXJhdGUgaG9zdG5hbWVzIGJhc2VkIG9uIE1BQyBhZGRyZXNzIGZvciBuYW1lbGVzcyBjbGllbnRzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NTYKK21zZ2lkICJVc2UgdGhlc2UgREhDUCByZWxheXMgYXMgZnVsbCBwcm94aWVzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NTcKK21zZ2lkICJSZWxheSBESENQIHJlcXVlc3RzIHRvIGEgcmVtb3RlIHNlcnZlciIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NTgKK21zZ2lkICJTcGVjaWZ5IGFsaWFzIG5hbWUgZm9yIExPQ0FMIEROUyBuYW1lLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NTkKK21zZ2lkICJQcm9tcHQgdG8gc2VuZCB0byBQWEUgY2xpZW50cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDYwCittc2dpZCAiQm9vdCBzZXJ2aWNlIGZvciBQWEUgbWVudS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDYxCittc2dpZCAiQ2hlY2sgY29uZmlndXJhdGlvbiBzeW50YXguIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ2MgorbXNnaWQgIkFkZCByZXF1ZXN0b3IncyBNQUMgYWRkcmVzcyB0byBmb3J3YXJkZWQgRE5TIHF1ZXJpZXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ2MworbXNnaWQgIkFkZCBzcGVjaWZpZWQgSVAgc3VibmV0IHRvIGZvcndhcmRlZCBETlMgcXVlcmllcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDY0Cittc2dpZCAiQWRkIGNsaWVudCBpZGVudGlmaWNhdGlvbiB0byBmb3J3YXJkZWQgRE5TIHF1ZXJpZXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ2NQorbXNnaWQgIlByb3h5IEROU1NFQyB2YWxpZGF0aW9uIHJlc3VsdHMgZnJvbSB1cHN0cmVhbSBuYW1lc2VydmVycy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDY2Cittc2dpZCAiQXR0ZW1wdCB0byBhbGxvY2F0ZSBzZXF1ZW50aWFsIElQIGFkZHJlc3NlcyB0byBESENQIGNsaWVudHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ2NworbXNnaWQgIkNvcHkgY29ubmVjdGlvbi10cmFjayBtYXJrIGZyb20gcXVlcmllcyB0byB1cHN0cmVhbSBjb25uZWN0aW9ucy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDY4Cittc2dpZCAiQWxsb3cgREhDUCBjbGllbnRzIHRvIGRvIHRoZWlyIG93biBERE5TIHVwZGF0ZXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ2OQorbXNnaWQgIlNlbmQgcm91dGVyLWFkdmVydGlzZW1lbnRzIGZvciBpbnRlcmZhY2VzIGRvaW5nIERIQ1B2NiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NzAKK21zZ2lkICJTcGVjaWZ5IERVSURfRU4tdHlwZSBESENQdjYgc2VydmVyIERVSUQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDcxCittc2dpZCAiU3BlY2lmeSBob3N0IChBL0FBQUEgYW5kIFBUUikgcmVjb3JkcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NzIKK21zZ2lkICJTcGVjaWZ5IGFyYml0cmFyeSBETlMgcmVzb3VyY2UgcmVjb3JkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ3MworbXNnaWQgIkJpbmQgdG8gaW50ZXJmYWNlcyBpbiB1c2UgLSBjaGVjayBmb3IgbmV3IGludGVyZmFjZXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDc0Cittc2dpZCAiRXhwb3J0IGxvY2FsIG5hbWVzIHRvIGdsb2JhbCBETlMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDc1Cittc2dpZCAiRG9tYWluIHRvIGV4cG9ydCB0byBnbG9iYWwgRE5TIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ3NgorbXNnaWQgIlNldCBUVEwgZm9yIGF1dGhvcml0YXRpdmUgcmVwbGllcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NzcKK21zZ2lkICJTZXQgYXV0aG9yaXRhdGl2ZSB6b25lIGluZm9ybWF0aW9uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ3OAorbXNnaWQgIlNlY29uZGFyeSBhdXRob3JpdGF0aXZlIG5hbWVzZXJ2ZXJzIGZvciBmb3J3YXJkIGRvbWFpbnMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDc5Cittc2dpZCAiUGVlcnMgd2hpY2ggYXJlIGFsbG93ZWQgdG8gZG8gem9uZSB0cmFuc2ZlciIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0ODAKK21zZ2lkICJTcGVjaWZ5IGlwc2V0cyB0byB3aGljaCBtYXRjaGluZyBkb21haW5zIHNob3VsZCBiZSBhZGRlZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0ODEKK21zZ2lkICJTcGVjaWZ5IGEgZG9tYWluIGFuZCBhZGRyZXNzIHJhbmdlIGZvciBzeW50aGVzaXNlZCBuYW1lcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0ODIKK21zZ2lkICJBY3RpdmF0ZSBETlNTRUMgdmFsaWRhdGlvbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0ODMKK21zZ2lkICJTcGVjaWZ5IHRydXN0IGFuY2hvciBrZXkgZGlnZXN0LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0ODQKK21zZ2lkICJEaXNhYmxlIHVwc3RyZWFtIGNoZWNraW5nIGZvciBETlNTRUMgZGVidWdnaW5nLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0ODUKK21zZ2lkICJFbnN1cmUgYW5zd2VycyB3aXRob3V0IEROU1NFQyBhcmUgaW4gdW5zaWduZWQgem9uZXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ4NgorbXNnaWQgIkRvbid0IGNoZWNrIEROU1NFQyBzaWduYXR1cmUgdGltZXN0YW1wcyB1bnRpbCBmaXJzdCBjYWNoZS1yZWxvYWQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDg3Cittc2dpZCAiVGltZXN0YW1wIGZpbGUgdG8gdmVyaWZ5IHN5c3RlbSBjbG9jayBmb3IgRE5TU0VDIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ4OQorbXNnaWQgIlNwZWNpZnkgREhDUHY2IHByZWZpeCBjbGFzcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0OTEKK21zZ2lkICJTZXQgTVRVLCBwcmlvcml0eSwgcmVzZW5kLWludGVydmFsIGFuZCByb3V0ZXItbGlmZXRpbWUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDkyCittc2dpZCAiRG8gbm90IGxvZyByb3V0aW5lIERIQ1AuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ5MworbXNnaWQgIkRvIG5vdCBsb2cgcm91dGluZSBESENQdjYuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ5NAorbXNnaWQgIkRvIG5vdCBsb2cgUkEuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ5NQorbXNnaWQgIkFjY2VwdCBxdWVyaWVzIG9ubHkgZnJvbSBkaXJlY3RseS1jb25uZWN0ZWQgbmV0d29ya3MuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ5NgorbXNnaWQgIkRldGVjdCBhbmQgcmVtb3ZlIEROUyBmb3J3YXJkaW5nIGxvb3BzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0OTcKK21zZ2lkICJJZ25vcmUgRE5TIHJlc3BvbnNlcyBjb250YWluaW5nIGlwYWRkci4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDk4Cittc2dpZCAiU2V0IFRUTCBpbiBETlMgcmVzcG9uc2VzIHdpdGggREhDUC1kZXJpdmVkIGFkZHJlc3Nlcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDk5Cittc2dpZCAiRGVsYXkgREhDUCByZXBsaWVzIGZvciBhdCBsZWFzdCBudW1iZXIgb2Ygc2Vjb25kcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogZG5zbWFzcSBbb3B0aW9uc11cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo3MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNlIHNob3J0IG9wdGlvbnMgb25seSBvbiB0aGUgY29tbWFuZCBsaW5lLlxuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjcwNworIywgYy1mb3JtYXQKK21zZ2lkICJWYWxpZCBvcHRpb25zIGFyZTpcbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo3NTQgb3B0aW9uLmM6ODY4Cittc2dpZCAiYmFkIGFkZHJlc3MiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Nzc5IG9wdGlvbi5jOjc4MworbXNnaWQgImJhZCBwb3J0IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjc5NyBvcHRpb24uYzo4MjYgb3B0aW9uLmM6ODYxCittc2dpZCAiaW50ZXJmYWNlIGJpbmRpbmcgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo4MjEgb3B0aW9uLmM6ODU2Cittc2dpZCAiaW50ZXJmYWNlIGNhbiBvbmx5IGJlIHNwZWNpZmllZCBvbmNlIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjgzNSBvcHRpb24uYzozODAwCittc2dpZCAiYmFkIGludGVyZmFjZSBuYW1lIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjEwNjIKK21zZ2lkICJ1bnN1cHBvcnRlZCBlbmNhcHN1bGF0aW9uIGZvciBJUHY2IG9wdGlvbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxMDc2Cittc2dpZCAiYmFkIGRoY3Atb3B0aW9uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjExNDQKK21zZ2lkICJiYWQgSVAgYWRkcmVzcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxMTQ3IG9wdGlvbi5jOjEyODYgb3B0aW9uLmM6MzA3MAorbXNnaWQgImJhZCBJUHY2IGFkZHJlc3MiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTI0MAorbXNnaWQgImJhZCBJUHY0IGFkZHJlc3MiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTMxMyBvcHRpb24uYzoxNDA3Cittc2dpZCAiYmFkIGRvbWFpbiBpbiBkaGNwLW9wdGlvbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNDQ1Cittc2dpZCAiZGhjcC1vcHRpb24gdG9vIGxvbmciCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTQ1MgorbXNnaWQgImlsbGVnYWwgZGhjcC1tYXRjaCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNTE0Cittc2dpZCAiaWxsZWdhbCByZXBlYXRlZCBmbGFnIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE1MjIKK21zZ2lkICJpbGxlZ2FsIHJlcGVhdGVkIGtleXdvcmQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTU5MyBvcHRpb24uYzo0NDM0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBhY2Nlc3MgZGlyZWN0b3J5ICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNjM5IHRmdHAuYzo1MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGFjY2VzcyAlczogJXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTcyNworbXNnaWQgInNldHRpbmcgbG9nIGZhY2lsaXR5IGlzIG5vdCBwb3NzaWJsZSB1bmRlciBBbmRyb2lkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE3MzYKK21zZ2lkICJiYWQgbG9nIGZhY2lsaXR5IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE3ODkKK21zZ2lkICJiYWQgTVggcHJlZmVyZW5jZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNzk0Cittc2dpZCAiYmFkIE1YIG5hbWUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTgwOAorbXNnaWQgImJhZCBNWCB0YXJnZXQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTgyMAorbXNnaWQgImNhbm5vdCBydW4gc2NyaXB0cyB1bmRlciB1Q2xpbnV4IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE4MjIKK21zZ2lkICJyZWNvbXBpbGUgd2l0aCBIQVZFX1NDUklQVCBkZWZpbmVkIHRvIGVuYWJsZSBsZWFzZS1jaGFuZ2Ugc2NyaXB0cyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxODI2Cittc2dpZCAicmVjb21waWxlIHdpdGggSEFWRV9MVUFTQ1JJUFQgZGVmaW5lZCB0byBlbmFibGUgTHVhIHNjcmlwdHMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjA5NSBvcHRpb24uYzoyMTA2IG9wdGlvbi5jOjIxNDMgb3B0aW9uLmM6MjE5OSBvcHRpb24uYzoyNDgyCittc2dpZCAiYmFkIHByZWZpeCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNTA0Cittc2dpZCAicmVjb21waWxlIHdpdGggSEFWRV9JUFNFVCBkZWZpbmVkIHRvIGVuYWJsZSBpcHNldCBkaXJlY3RpdmVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI3MTMKK21zZ2lkICJiYWQgcG9ydCByYW5nZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNzM4Cittc2dpZCAiYmFkIGJyaWRnZS1pbnRlcmZhY2UiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjc5OAorbXNnaWQgIm9ubHkgb25lIHRhZyBhbGxvd2VkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI4MTggb3B0aW9uLmM6MjgzMCBvcHRpb24uYzoyOTM5IG9wdGlvbi5jOjI5NDQgb3B0aW9uLmM6Mjk4MworbXNnaWQgImJhZCBkaGNwLXJhbmdlIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI4NDUKK21zZ2lkICJpbmNvbnNpc3RlbnQgREhDUCByYW5nZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyOTA3Cittc2dpZCAicHJlZml4IGxlbmd0aCBtdXN0IGJlIGV4YWN0bHkgNjQgZm9yIFJBIHN1Ym5ldHMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjkwOQorbXNnaWQgInByZWZpeCBsZW5ndGggbXVzdCBiZSBleGFjdGx5IDY0IGZvciBzdWJuZXQgY29uc3RydWN0b3JzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5MTMKK21zZ2lkICJwcmVmaXggbGVuZ3RoIG11c3QgYmUgYXQgbGVhc3QgNjQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjkxNgorbXNnaWQgImluY29uc2lzdGVudCBESENQdjYgcmFuZ2UiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjkyNworbXNnaWQgInByZWZpeCBtdXN0IGJlIHplcm8gd2l0aCBcImNvbnN0cnVjdG9yOlwiIGFyZ3VtZW50IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMwNDAgb3B0aW9uLmM6MzA4OAorbXNnaWQgImJhZCBoZXggY29uc3RhbnQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzA2MgorbXNnaWQgImNhbm5vdCBtYXRjaCB0YWdzIGluIC0tZGhjcC1ob3N0IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIGRoY3AtaG9zdCBJUCBhZGRyZXNzICVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMxNjgKK21zZ2lkICJiYWQgREhDUCBob3N0IG5hbWUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzI1MAorbXNnaWQgImJhZCB0YWctaWYiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzYwNyBvcHRpb24uYzo0MDMwCittc2dpZCAiaW52YWxpZCBwb3J0IG51bWJlciIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNjY5Cittc2dpZCAiYmFkIGRoY3AtcHJveHkgYWRkcmVzcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNjk1Cittc2dpZCAiQmFkIGRoY3AtcmVsYXkiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzczNgorbXNnaWQgImJhZCBSQS1wYXJhbXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzc0NQorbXNnaWQgImJhZCBEVUlEIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM3ODcKK21zZ2lkICJpbnZhbGlkIGFsaWFzIHJhbmdlIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM4NDEgb3B0aW9uLmM6Mzg1MworbXNnaWQgImJhZCBDTkFNRSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozODU3Cittc2dpZCAiZHVwbGljYXRlIENOQU1FIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM4ODAKK21zZ2lkICJiYWQgUFRSIHJlY29yZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozOTExCittc2dpZCAiYmFkIE5BUFRSIHJlY29yZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozOTQ1Cittc2dpZCAiYmFkIFJSIHJlY29yZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozOTc1Cittc2dpZCAiYmFkIFRYVCByZWNvcmQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDAxNgorbXNnaWQgImJhZCBTUlYgcmVjb3JkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQwMjMKK21zZ2lkICJiYWQgU1JWIHRhcmdldCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MDM3Cittc2dpZCAiaW52YWxpZCBwcmlvcml0eSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MDQwCittc2dpZCAiaW52YWxpZCB3ZWlnaHQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDA2NAorbXNnaWQgIkJhZCBob3N0LXJlY29yZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MDg4Cittc2dpZCAiQmFkIG5hbWUgaW4gaG9zdC1yZWNvcmQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDE1MworbXNnaWQgImJhZCB0cnVzdCBhbmNob3IiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDE2NworbXNnaWQgImJhZCBIRVggaW4gdHJ1c3QgYW5jaG9yIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQxNzcKK21zZ2lkICJ1bnN1cHBvcnRlZCBvcHRpb24gKGNoZWNrIHRoYXQgZG5zbWFzcSB3YXMgY29tcGlsZWQgd2l0aCBESENQL1RGVFAvRE5TU0VDL0RCdXMgc3VwcG9ydCkiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDIzNworbXNnaWQgIm1pc3NpbmcgXCIiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDI5NAorbXNnaWQgImJhZCBvcHRpb24iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDI5NgorbXNnaWQgImV4dHJhbmVvdXMgcGFyYW1ldGVyIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQyOTgKK21zZ2lkICJtaXNzaW5nIHBhcmFtZXRlciIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzAwCittc2dpZCAiaWxsZWdhbCBvcHRpb24iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDMwNworbXNnaWQgImVycm9yIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQzMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGF0IGxpbmUgJWQgb2YgJXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDMyNCBvcHRpb24uYzo0NTcxIG9wdGlvbi5jOjQ2MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCAlcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0Mzg3IG9wdGlvbi5jOjQ1MTAgdGZ0cC5jOjcxNQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAlczogJXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDY3NgorbXNnaWQgImp1bmsgZm91bmQgaW4gY29tbWFuZCBsaW5lIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ3MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG5zbWFzcSB2ZXJzaW9uICVzICAlc1xuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ3MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvbXBpbGUgdGltZSBvcHRpb25zOiAlc1xuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ3MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuXG4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDcxNAorIywgYy1mb3JtYXQKK21zZ2lkICJEbnNtYXNxIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0XG4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDcxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIgb3IgMy5cbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NzI2Cittc2dpZCAidHJ5IC0taGVscCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NzI4Cittc2dpZCAidHJ5IC13IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ3MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbW1hbmQgbGluZSBvcHRpb25zOiAlcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0Nzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNOQU1FIGxvb3AgaW52b2x2aW5nICVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ4MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGdldCBob3N0LW5hbWU6ICVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ4NjIKK21zZ2lkICJvbmx5IG9uZSByZXNvbHYuY29uZiBmaWxlIGFsbG93ZWQgaW4gbm8tcG9sbCBtb2RlLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0ODcyCittc2dpZCAibXVzdCBoYXZlIGV4YWN0bHkgb25lIHJlc29sdi5jb25mIHRvIHJlYWQgZG9tYWluIGZyb20uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ4NzUgbmV0d29yay5jOjE2MTIgZGhjcC5jOjgxNgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCAlczogJXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDg5MgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzZWFyY2ggZGlyZWN0aXZlIGZvdW5kIGluICVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ5MTMKK21zZ2lkICJ0aGVyZSBtdXN0IGJlIGEgZGVmYXVsdCBkb21haW4gd2hlbiAtLWRoY3AtZnFkbiBpcyBzZXQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDkyMgorbXNnaWQgInN5bnRheCBjaGVjayBPSyIKK21zZ3N0ciAiIgorCisjOiBmb3J3YXJkLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZW5kIHBhY2tldDogJXMiCittc2dzdHIgIiIKKworIzogZm9yd2FyZC5jOjU5NworbXNnaWQgImRpc2NhcmRpbmcgRE5TIHJlcGx5OiBzdWJuZXQgb3B0aW9uIG1pc21hdGNoIgorbXNnc3RyICIiCisKKyM6IGZvcndhcmQuYzo2NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibmFtZXNlcnZlciAlcyByZWZ1c2VkIHRvIGRvIGEgcmVjdXJzaXZlIHF1ZXJ5IgorbXNnc3RyICIiCisKKyM6IGZvcndhcmQuYzo2ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAicG9zc2libGUgRE5TLXJlYmluZCBhdHRhY2sgZGV0ZWN0ZWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGZvcndhcmQuYzoxMjQ0IGZvcndhcmQuYzoxNjgxCittc2dpZCAiSWdub3JpbmcgcXVlcnkgZnJvbSBub24tbG9jYWwgbmV0d29yayIKK21zZ3N0ciAiIgorCisjOiBmb3J3YXJkLmM6MjE2NgorIywgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IEROUyBxdWVyaWVzIHJlYWNoZWQgKG1heDogJWQpIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzo3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBsaXN0ZW5pbmcgc29ja2V0IGZvciAlczogJXMiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjEwMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTE9VRCBXQVJOSU5HOiBsaXN0ZW5pbmcgb24gJXMgbWF5IGFjY2VwdCByZXF1ZXN0cyB2aWEgaW50ZXJmYWNlcyBvdGhlciB0aGFuICVzIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxMDM4Cittc2dpZCAiTE9VRCBXQVJOSU5HOiB1c2UgLS1iaW5kLWR5bmFtaWMgcmF0aGVyIHRoYW4gLS1iaW5kLWludGVyZmFjZXMgdG8gYXZvaWQgRE5TIGFtcGxpZmljYXRpb24gYXR0YWNrcyB2aWEgdGhlc2UgaW50ZXJmYWNlKHMpIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxMDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IHVzaW5nIGludGVyZmFjZSAlcyBpbnN0ZWFkIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxMDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IG5vIGFkZHJlc3NlcyBmb3VuZCBmb3IgaW50ZXJmYWNlICVzIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxMTE0CisjLCBjLWZvcm1hdAorbXNnaWQgImludGVyZmFjZSAlcyBmYWlsZWQgdG8gam9pbiBESENQdjYgbXVsdGljYXN0IGdyb3VwOiAlcyIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6MTExOQorbXNnaWQgInRyeSBpbmNyZWFzaW5nIC9wcm9jL3N5cy9uZXQvY29yZS9vcHRtZW1fbWF4IgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxMzIyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBiaW5kIHNlcnZlciBzb2NrZXQgZm9yICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6MTUxNworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBuYW1lc2VydmVyICVzIC0gbG9jYWwgaW50ZXJmYWNlIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxNTI4CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIG5hbWVzZXJ2ZXIgJXMgLSBjYW5ub3QgbWFrZS9iaW5kIHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjE1NDgKK21zZ2lkICIobm8gRE5TU0VDKSIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6MTU1MQorbXNnaWQgInVucXVhbGlmaWVkIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxNTUxCittc2dpZCAibmFtZXMiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjE1NTMKK21zZ2lkICJkZWZhdWx0IgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxNTU1Cittc2dpZCAiZG9tYWluIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxNTYxCisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIGxvY2FsIGFkZHJlc3NlcyBvbmx5IGZvciAlcyAlcyIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6MTU2NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyBzdGFuZGFyZCBuYW1lc2VydmVycyBmb3IgJXMgJXMiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjE1NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgbmFtZXNlcnZlciAlcyMlZCBmb3IgJXMgJXMgJXMiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjE1NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTk9UIHVzaW5nIG5hbWVzZXJ2ZXIgJXMjJWQgLSBxdWVyeSBsb29wIGRldGVjdGVkIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxNTczCisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIG5hbWVzZXJ2ZXIgJXMjJWQodmlhICVzKSIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6MTU3NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyBuYW1lc2VydmVyICVzIyVkIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxNTgwCisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nICVkIG1vcmUgbG9jYWwgYWRkcmVzc2VzIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxNTgyCisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nICVkIG1vcmUgbmFtZXNlcnZlcnMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjE2NgorbXNnaWQgImRoY3AtaG9zdHNkaXIsIGRoY3Atb3B0c2RpciBhbmQgaG9zdHNkaXIgYXJlIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybSIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTgxCittc2dpZCAibm8gcm9vdCB0cnVzdCBhbmNob3IgcHJvdmlkZWQgZm9yIEROU1NFQyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTg0Cittc2dpZCAiY2Fubm90IHJlZHVjZSBjYWNoZSBzaXplIGZyb20gZGVmYXVsdCB3aGVuIEROU1NFQyBlbmFibGVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxODYKK21zZ2lkICJETlNTRUMgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfRE5TU0VDIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTkyCittc2dpZCAiVEZUUCBzZXJ2ZXIgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfVEZUUCBpbiBzcmMvY29uZmlnLmgiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjE5NworbXNnaWQgImNhbm5vdCB1c2UgLS1jb25udHJhY2sgQU5EIC0tcXVlcnktcG9ydCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MjAwCittc2dpZCAiY29ubnRyYWNrIHN1cHBvcnQgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfQ09OTlRSQUNLIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MjA1Cittc2dpZCAiYXN5bmNocm9ub3VzIGxvZ2dpbmcgaXMgbm90IGF2YWlsYWJsZSB1bmRlciBTb2xhcmlzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoyMTAKK21zZ2lkICJhc3luY2hyb25vdXMgbG9nZ2luZyBpcyBub3QgYXZhaWxhYmxlIHVuZGVyIEFuZHJvaWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjIxNQorbXNnaWQgImF1dGhvcml0YXRpdmUgRE5TIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0FVVEggaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoyMjAKK21zZ2lkICJsb29wIGRldGVjdGlvbiBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9MT09QIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MjI3Cittc2dpZCAibWF4X3BvcnQgY2Fubm90IGJlIHNtYWxsZXIgdGhhbiBtaW5fcG9ydCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MjM0Cittc2dpZCAiem9uZSBzZXJpYWwgbXVzdCBiZSBjb25maWd1cmVkIGluIC0tYXV0aC1zb2EiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjI1MgorbXNnaWQgImRoY3AtcmFuZ2UgY29uc3RydWN0b3Igbm90IGF2YWlsYWJsZSBvbiB0aGlzIHBsYXRmb3JtIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoyOTgKK21zZ2lkICJjYW5ub3Qgc2V0IC0tYmluZC1pbnRlcmZhY2VzIGFuZCAtLWJpbmQtZHluYW1pYyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MzAxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmaW5kIGxpc3Qgb2YgaW50ZXJmYWNlczogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjMxMAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGludGVyZmFjZSAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6Mzc0IGRuc21hc3EuYzoxMDM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkRCdXMgZXJyb3I6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzozNzcKK21zZ2lkICJEQnVzIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0RCVVMgaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB1c2VyIG9yIGdyb3VwOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NDYwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGRpciB0byBmaWxlc3lzdGVtIHJvb3Q6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RhcnRlZCwgdmVyc2lvbiAlcyBETlMgZGlzYWJsZWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjcyMAorIywgYy1mb3JtYXQKK21zZ2lkICJzdGFydGVkLCB2ZXJzaW9uICVzIGNhY2hlc2l6ZSAlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzIyCisjLCBjLWZvcm1hdAorbXNnaWQgInN0YXJ0ZWQsIHZlcnNpb24gJXMgY2FjaGUgZGlzYWJsZWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjcyNQorbXNnaWQgIkROUyBzZXJ2aWNlIGxpbWl0ZWQgdG8gbG9jYWwgc3VibmV0cyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzI4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbXBpbGUgdGltZSBvcHRpb25zOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzM0Cittc2dpZCAiREJ1cyBzdXBwb3J0IGVuYWJsZWQ6IGNvbm5lY3RlZCB0byBzeXN0ZW0gYnVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3MzYKK21zZ2lkICJEQnVzIHN1cHBvcnQgZW5hYmxlZDogYnVzIGNvbm5lY3Rpb24gcGVuZGluZyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzU0Cittc2dpZCAiRE5TU0VDIHZhbGlkYXRpb24gZW5hYmxlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzU4Cittc2dpZCAiRE5TU0VDIHNpZ25hdHVyZSB0aW1lc3RhbXBzIG5vdCBjaGVja2VkIHVudGlsIGZpcnN0IGNhY2hlIHJlbG9hZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzYxCittc2dpZCAiRE5TU0VDIHNpZ25hdHVyZSB0aW1lc3RhbXBzIG5vdCBjaGVja2VkIHVudGlsIHN5c3RlbSB0aW1lIHZhbGlkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogZmFpbGVkIHRvIGNoYW5nZSBvd25lciBvZiAlczogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjc3MAorbXNnaWQgInNldHRpbmcgLS1iaW5kLWludGVyZmFjZXMgb3B0aW9uIGJlY2F1c2Ugb2YgT1MgbGltaXRhdGlvbnMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjc4MgorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBpbnRlcmZhY2UgJXMgZG9lcyBub3QgY3VycmVudGx5IGV4aXN0IgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3ODcKK21zZ2lkICJ3YXJuaW5nOiBpZ25vcmluZyByZXNvbHYtZmlsZSBmbGFnIGJlY2F1c2Ugbm8tcmVzb2x2IGlzIHNldCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzkwCittc2dpZCAid2FybmluZzogbm8gdXBzdHJlYW0gc2VydmVycyBjb25maWd1cmVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXN5bmNocm9ub3VzIGxvZ2dpbmcgZW5hYmxlZCwgcXVldWUgbGltaXQgaXMgJWQgbWVzc2FnZXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjgxNQorbXNnaWQgIklQdjYgcm91dGVyIGFkdmVydGlzZW1lbnQgZW5hYmxlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6ODIwCisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AsIHNvY2tldHMgYm91bmQgZXhjbHVzaXZlbHkgdG8gaW50ZXJmYWNlICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo4MzQKK21zZ2lkICJyb290IGlzICIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6ODM0Cittc2dpZCAiZW5hYmxlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6ODM2Cittc2dpZCAic2VjdXJlIG1vZGUiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjgzOQorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiAlcyBpbmFjY2Vzc2libGUiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjg0MworIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBURlRQIGRpcmVjdG9yeSAlcyBpbmFjY2Vzc2libGUiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjg2OQorIywgYy1mb3JtYXQKK21zZ2lkICJyZXN0cmljdGluZyBtYXhpbXVtIHNpbXVsdGFuZW91cyBURlRQIHRyYW5zZmVycyB0byAlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTAzOQorbXNnaWQgImNvbm5lY3RlZCB0byBzeXN0ZW0gREJ1cyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZm9yayBpbnRvIGJhY2tncm91bmQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxMTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgaGVscGVyOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTE5NQorIywgYy1mb3JtYXQKK21zZ2lkICJzZXR0aW5nIGNhcGFiaWxpdGllcyBmYWlsZWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxMTk4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjaGFuZ2UgdXNlci1pZCB0byAlczogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjEyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNoYW5nZSBncm91cC1pZCB0byAlczogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjEyMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gcGlkZmlsZSAlczogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjEyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gbG9nICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBMdWEgc2NyaXB0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTIxMworIywgYy1mb3JtYXQKK21zZ2lkICJURlRQIGRpcmVjdG9yeSAlcyBpbmFjY2Vzc2libGU6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxMjE2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgdGltZXN0YW1wIGZpbGUgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxMjM5Cittc2dpZCAibm93IGNoZWNraW5nIEROU1NFQyBzaWduYXR1cmUgdGltZXN0YW1wcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTMwNworIywgYy1mb3JtYXQKK21zZ2lkICJzY3JpcHQgcHJvY2VzcyBraWxsZWQgYnkgc2lnbmFsICVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxMzExCisjLCBjLWZvcm1hdAorbXNnaWQgInNjcmlwdCBwcm9jZXNzIGV4aXRlZCB3aXRoIHN0YXR1cyAlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTMxNQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZXhlY3V0ZSAlczogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjEzNzkgZG5zc2VjLmM6NDc5IGRuc3NlYy5jOjUyNQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdXBkYXRlIG10aW1lIG9uICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTM4NgorbXNnaWQgImV4aXRpbmcgb24gcmVjZWlwdCBvZiBTSUdURVJNIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxNDE0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBhY2Nlc3MgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxNDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWRpbmcgJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjE0NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc2VydmVycyBmb3VuZCBpbiAlcywgd2lsbCByZXRyeSIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBESENQIHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZXQgb3B0aW9ucyBvbiBESENQIHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjg5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZXQgU09fUkVVU0V7QUREUnxQT1JUfSBvbiBESENQIHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjEwMQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYmluZCBESENQIHNlcnZlciBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBJQ01QIHJhdyBzb2NrZXQ6ICVzLiIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6MjUyIGRoY3A2LmM6MTczCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gaW50ZXJmYWNlICVzIGluIGJyaWRnZS1pbnRlcmZhY2UiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjI5MworIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHBhY2tldCByZWNlaXZlZCBvbiAlcyB3aGljaCBoYXMgbm8gYWRkcmVzcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6NDI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkFSUC1jYWNoZSBpbmplY3Rpb24gZmFpbGVkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6NDcwCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHNlbmRpbmcgREhDUCBwYWNrZXQgdG8gJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzo1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCByYW5nZSAlcyAtLSAlcyBpcyBub3QgY29uc2lzdGVudCB3aXRoIG5ldG1hc2sgJXMiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjg1NAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbGluZSBhdCAlcyBsaW5lICVkIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzo4OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgJXMgbGluZSAlZCwgZHVwbGljYXRlIG5hbWUgb3IgSVAgYWRkcmVzcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6MTA0MSByZmMzMzE1LmM6MjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHJlbGF5ICVzIC0+ICVzIgorbXNnc3RyICIiCisKKyM6IGxlYXNlLmM6OTgKK21zZ2lkICJ0b28gbWFueSBzdG9yZWQgbGVhc2VzIgorbXNnc3RyICIiCisKKyM6IGxlYXNlLmM6MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuIG9yIGNyZWF0ZSBsZWFzZSBmaWxlICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBsZWFzZS5jOjE3NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcGFyc2UgbGVhc2UgZGF0YWJhc2UsIGludmFsaWQgbGluZTogJXMgJXMgJXMgJXMgLi4uIgorbXNnc3RyICIiCisKKyM6IGxlYXNlLmM6MTgwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkIGxlYXNlIGZpbGUgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGxlYXNlLmM6MTk2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBydW4gbGVhc2UtaW5pdCBzY3JpcHQgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGxlYXNlLmM6MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgImxlYXNlLWluaXQgc2NyaXB0IHJldHVybmVkIGV4aXQgY29kZSAlcyIKK21zZ3N0ciAiIgorCisjOiBsZWFzZS5jOjM3MworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgJXM6ICVzIChyZXRyeSBpbiAldXMpIgorbXNnc3RyICIiCisKKyM6IGxlYXNlLmM6OTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIklnbm9yaW5nIGRvbWFpbiAlcyBmb3IgREhDUCBob3N0IG5hbWUgJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICJubyBhZGRyZXNzIHJhbmdlIGF2YWlsYWJsZSBmb3IgREhDUCByZXF1ZXN0ICVzICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzozNDgKK21zZ2lkICJ3aXRoIHN1Ym5ldCBzZWxlY3RvciIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MzQ4Cittc2dpZCAidmlhIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzozNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYXZhaWxhYmxlIERIQ1Agc3VibmV0OiAlcy8lcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MzYzIHJmYzMzMTUuYzozMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYXZhaWxhYmxlIERIQ1AgcmFuZ2U6ICVzIC0tICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo0NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgdmVuZG9yIGNsYXNzOiAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6NDc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IHVzZXIgY2xhc3M6ICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo1MTAKK21zZ2lkICJkaXNhYmxlZCIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6NTUxIHJmYzIxMzEuYzoxMDA2IHJmYzIxMzEuYzoxNDMwIHJmYzMzMTUuYzo2MTYgcmZjMzMxNS5jOjg2OQorIzogcmZjMzMxNS5jOjExNDgKK21zZ2lkICJpZ25vcmVkIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo1NjYgcmZjMjEzMS5jOjEyMzkgcmZjMzMxNS5jOjkxOQorbXNnaWQgImFkZHJlc3MgaW4gdXNlIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo1ODAgcmZjMjEzMS5jOjEwNjAKK21zZ2lkICJubyBhZGRyZXNzIGF2YWlsYWJsZSIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6NTg3IHJmYzIxMzEuYzoxMjAyCittc2dpZCAid3JvbmcgbmV0d29yayIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6NjAyCittc2dpZCAibm8gYWRkcmVzcyBjb25maWd1cmVkIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo2MDggcmZjMjEzMS5jOjEyNTIKK21zZ2lkICJubyBsZWFzZXMgbGVmdCIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6NzAzIHJmYzMzMTUuYzo0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgY2xpZW50IHByb3ZpZGVzIG5hbWU6ICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo4MDgKK21zZ2lkICJQWEUgQklTIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjk3NCByZmMzMzE1LmM6MTI0MgorIywgYy1mb3JtYXQKK21zZ2lkICJkaXNhYmxpbmcgREhDUCBzdGF0aWMgYWRkcmVzcyAlcyBmb3IgJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjk5NQorbXNnaWQgInVua25vd24gbGVhc2UiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjEwMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHVzaW5nIGNvbmZpZ3VyZWQgYWRkcmVzcyAlcyBiZWNhdXNlIGl0IGlzIGxlYXNlZCB0byAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTAzOQorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgdXNpbmcgY29uZmlndXJlZCBhZGRyZXNzICVzIGJlY2F1c2UgaXQgaXMgaW4gdXNlIGJ5IHRoZSBzZXJ2ZXIgb3IgcmVsYXkiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjEwNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHVzaW5nIGNvbmZpZ3VyZWQgYWRkcmVzcyAlcyBiZWNhdXNlIGl0IHdhcyBwcmV2aW91c2x5IGRlY2xpbmVkIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxMDU4IHJmYzIxMzEuYzoxMjQ1Cittc2dpZCAibm8gdW5pcXVlLWlkIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxMTQwCittc2dpZCAid3Jvbmcgc2VydmVyLUlEIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxMTU5Cittc2dpZCAid3JvbmcgYWRkcmVzcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTE3NyByZmMzMzE1LmM6MTAxNQorbXNnaWQgImxlYXNlIG5vdCBmb3VuZCIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTIxMAorbXNnaWQgImFkZHJlc3Mgbm90IGF2YWlsYWJsZSIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTIyMQorbXNnaWQgInN0YXRpYyBsZWFzZSBhdmFpbGFibGUiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjEyMjUKK21zZ2lkICJhZGRyZXNzIHJlc2VydmVkIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxMjMzCisjLCBjLWZvcm1hdAorbXNnaWQgImFiYW5kb25pbmcgbGVhc2UgdG8gJXMgb2YgJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjE3NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYm9vdGZpbGUgbmFtZTogJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjE3NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgc2VydmVyIG5hbWU6ICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxNzc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IG5leHQgc2VydmVyOiAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTc3NworIywgYy1mb3JtYXQKK21zZ2lkICIldSBicm9hZGNhc3QgcmVzcG9uc2UiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjE4NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHNlbmQgREhDUC9CT09UUCBvcHRpb24gJWQ6IG5vIHNwYWNlIGxlZnQgaW4gcGFja2V0IgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoyMTMxCittc2dpZCAiUFhFIG1lbnUgdG9vIGxhcmdlIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoyMjcwIHJmYzMzMTUuYzoxNTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IHJlcXVlc3RlZCBvcHRpb25zOiAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MjU4NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc2VuZCBSRkMzOTI1IG9wdGlvbjogdG9vIG1hbnkgb3B0aW9ucyBmb3IgZW50ZXJwcmlzZSBudW1iZXIgJWQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjI2NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgcmVwbHkgZGVsYXk6ICVkIgorbXNnc3RyICIiCisKKyM6IG5ldGxpbmsuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIG5ldGxpbmsgc29ja2V0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBuZXRsaW5rLmM6MzU1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldGxpbmsgcmV0dXJucyBlcnJvcjogJXMiCittc2dzdHIgIiIKKworIzogZGJ1cy5jOjE4NgorbXNnaWQgImF0dGVtcHQgdG8gc2V0IGFuIElQdjYgc2VydmVyIGFkZHJlc3MgdmlhIERCdXMgLSBubyBJUHY2IHN1cHBvcnQiCittc2dzdHIgIiIKKworIzogZGJ1cy5jOjQzOQorIywgYy1mb3JtYXQKK21zZ2lkICJFbmFibGluZyAtLSVzIG9wdGlvbiBmcm9tIEQtQnVzIgorbXNnc3RyICIiCisKKyM6IGRidXMuYzo0NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlzYWJsaW5nIC0tJXMgb3B0aW9uIGZyb20gRC1CdXMiCittc2dzdHIgIiIKKworIzogZGJ1cy5jOjY5MAorbXNnaWQgInNldHRpbmcgdXBzdHJlYW0gc2VydmVycyBmcm9tIERCdXMiCittc2dzdHIgIiIKKworIzogZGJ1cy5jOjczNworbXNnaWQgImNvdWxkIG5vdCByZWdpc3RlciBhIERCdXMgbWVzc2FnZSBoYW5kbGVyIgorbXNnc3RyICIiCisKKyM6IGJwZi5jOjI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIERIQ1AgQlBGIHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogYnBmLmM6MjkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcmVxdWVzdCBmb3IgdW5zdXBwb3J0ZWQgaGFyZHdhcmUgdHlwZSAoJWQpIHJlY2VpdmVkIG9uICVzIgorbXNnc3RyICIiCisKKyM6IGJwZi5jOjM3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIFBGX1JPVVRFIHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogYnBmLmM6Mzk5Cittc2dpZCAiVW5rbm93biBwcm90b2NvbCB2ZXJzaW9uIGZyb20gcm91dGUgc29ja2V0IgorbXNnc3RyICIiCisKKyM6IGhlbHBlci5jOjE1MworbXNnaWQgImxlYXNlKCkgZnVuY3Rpb24gbWlzc2luZyBpbiBMdWEgc2NyaXB0IgorbXNnc3RyICIiCisKKyM6IHRmdHAuYzozMTkKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IGZyZWUgcG9ydCBmb3IgVEZUUCIKK21zZ3N0ciAiIgorCisjOiB0ZnRwLmM6MzM1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIHJlcXVlc3QgZnJvbSAlcyIKK21zZ3N0ciAiIgorCisjOiB0ZnRwLmM6NDgzCisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJXMgbm90IGZvdW5kIgorbXNnc3RyICIiCisKKyM6IHRmdHAuYzo1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgJWQgJXMgcmVjZWl2ZWQgZnJvbSAlcyIKK21zZ3N0ciAiIgorCisjOiB0ZnRwLmM6NjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCBzZW5kaW5nICVzIHRvICVzIgorbXNnc3RyICIiCisKKyM6IHRmdHAuYzo2MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VudCAlcyB0byAlcyIKK21zZ3N0ciAiIgorCisjOiBsb2cuYzoxOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAib3ZlcmZsb3c6ICVkIGxvZyBlbnRyaWVzIGxvc3QiCittc2dzdHIgIiIKKworIzogbG9nLmM6MjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImxvZyBmYWlsZWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGxvZy5jOjQ3MQorbXNnaWQgIkZBSUxFRCB0byBzdGFydCB1cCIKK21zZ3N0ciAiIgorCisjOiBjb25udHJhY2suYzo2NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb25udHJhY2sgY29ubmVjdGlvbiBtYXJrIHJldHJpZXZhbCBmYWlsZWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGRoY3A2LmM6NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBESENQdjYgc29ja2V0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwNi5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZXQgU09fUkVVU0V7QUREUnxQT1JUfSBvbiBESENQdjYgc29ja2V0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwNi5jOjg1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBiaW5kIERIQ1B2NiBzZXJ2ZXIgc29ja2V0OiAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMzMzE1LmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGFkZHJlc3MgcmFuZ2UgYXZhaWxhYmxlIGZvciBESENQdjYgcmVxdWVzdCBmcm9tIHJlbGF5IGF0ICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzMzMTUuYzoxNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYWRkcmVzcyByYW5nZSBhdmFpbGFibGUgZm9yIERIQ1B2NiByZXF1ZXN0IHZpYSAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMzMzE1LmM6MzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGF2YWlsYWJsZSBESENQdjYgc3VibmV0OiAlcy8lZCIKK21zZ3N0ciAiIgorCisjOiByZmMzMzE1LmM6Mzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IHZlbmRvciBjbGFzczogJXUiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjQzNAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBjbGllbnQgTUFDIGFkZHJlc3M6ICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzMzMTUuYzo2NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBwcmVmaXgtY2xhc3MgJWQiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjgxNiByZmMzMzE1LmM6OTExCittc2dpZCAiYWRkcmVzcyB1bmF2YWlsYWJsZSIKK21zZ3N0ciAiIgorCisjOiByZmMzMzE1LmM6ODI4IHJmYzMzMTUuYzo5NTkgcmZjMzMxNS5jOjEyOTIKK21zZ2lkICJzdWNjZXNzIgorbXNnc3RyICIiCisKKyM6IHJmYzMzMTUuYzo4NDMgcmZjMzMxNS5jOjg1MiByZmMzMzE1LmM6OTY3IHJmYzMzMTUuYzo5NjkKK21zZ2lkICJubyBhZGRyZXNzZXMgYXZhaWxhYmxlIgorbXNnc3RyICIiCisKKyM6IHJmYzMzMTUuYzo5NDYKK21zZ2lkICJub3Qgb24gbGluayIKK21zZ3N0ciAiIgorCisjOiByZmMzMzE1LmM6MTAxOSByZmMzMzE1LmM6MTIwNCByZmMzMzE1LmM6MTI4MQorbXNnaWQgIm5vIGJpbmRpbmcgZm91bmQiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjEwNTcKK21zZ2lkICJkZXByZWNhdGVkIgorbXNnc3RyICIiCisKKyM6IHJmYzMzMTUuYzoxMDYyCittc2dpZCAiYWRkcmVzcyBpbnZhbGlkIgorbXNnc3RyICIiCisKKyM6IHJmYzMzMTUuYzoxMTA5Cittc2dpZCAiY29uZmlybSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjExMjUKK21zZ2lkICJhbGwgYWRkcmVzc2VzIHN0aWxsIG9uIGxpbmsiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjEyMTMKK21zZ2lkICJyZWxlYXNlIHJlY2VpdmVkIgorbXNnc3RyICIiCisKKyM6IHJmYzMzMTUuYzoyMTQwCittc2dpZCAiQ2Fubm90IG11bHRpY2FzdCB0byBESENQdjYgc2VydmVyIHdpdGhvdXQgY29ycmVjdCBpbnRlcmZhY2UiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzoxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSWdub3JpbmcgZHVwbGljYXRlIGRoY3Atb3B0aW9uICVkIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6MjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IHRhZ3M6ICVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6NDA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyBtb3JlIHRoYW4gb25lIGFkZHJlc3MgaW4gaG9zdHNmaWxlLCB1c2luZyAlcyBmb3IgREhDUCIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjQzMAorIywgYy1mb3JtYXQKK21zZ2lkICJkdXBsaWNhdGUgSVAgYWRkcmVzcyAlcyAoJXMpIGluIGRoY3AtY29uZmlnIGRpcmVjdGl2ZSIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjQ5NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2V0IFNPX0JJTkRUT0RFVklDRSBvbiBESENQIHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo2MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiS25vd24gREhDUCBvcHRpb25zOlxuIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6NjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIktub3duIERIQ1B2NiBvcHRpb25zOlxuIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6ODIzCittc2dpZCAiLCBwcmVmaXggZGVwcmVjYXRlZCIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjgyNgorIywgYy1mb3JtYXQKK21zZ2lkICIsIGxlYXNlIHRpbWUgIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6ODY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHN0YXRlbGVzcyBvbiAlcyUuMHMlLjBzJXMiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo4NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsIHN0YXRpYyBsZWFzZXMgb25seSBvbiAlLjBzJXMlcyUuMHMiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo4NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsIHByb3h5IG9uIHN1Ym5ldCAlLjBzJXMlLjBzJS4wcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjg3MworIywgYy1mb3JtYXQKK21zZ2lkICIlcywgSVAgcmFuZ2UgJXMgLS0gJXMlcyUuMHMiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo4ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUHY0LWRlcml2ZWQgSVB2NiBuYW1lcyBvbiAlcyVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6ODg5CisjLCBjLWZvcm1hdAorbXNnaWQgInJvdXRlciBhZHZlcnRpc2VtZW50IG9uICVzJXMiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo5MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCByZWxheSBmcm9tICVzIHRvICVzIHZpYSAlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjkwMgorIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHJlbGF5IGZyb20gJXMgdG8gJXMiCittc2dzdHIgIiIKKworIzogcmFkdi5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIElDTVB2NiBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGF1dGguYzo0NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3Jpbmcgem9uZSB0cmFuc2ZlciByZXF1ZXN0IGZyb20gJXMiCittc2dzdHIgIiIKKworIzogaXBzZXQuYzo5NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluZCBrZXJuZWwgdmVyc2lvbjogJXMiCittc2dzdHIgIiIKKworIzogaXBzZXQuYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBJUHNldCBjb250cm9sIHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogaXBzZXQuYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHVwZGF0ZSBpcHNldCAlczogJXMiCittc2dzdHIgIiIKKworIzogZG5zc2VjLmM6NTI3Cittc2dpZCAic3lzdGVtIHRpbWUgY29uc2lkZXJlZCB2YWxpZCwgbm93IGNoZWNraW5nIEROU1NFQyBzaWduYXR1cmUgdGltZXN0YW1wcy4iCittc2dzdHIgIiIKKworIzogYmxvY2tkYXRhLmM6NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRE5TU0VDIG1lbW9yeSBpbiB1c2UgJXUsIG1heCAldSwgYWxsb2NhdGVkICV1IgorbXNnc3RyICIiCisKKyM6IHRhYmxlcy5jOjYxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBhY2Nlc3MgcGYgZGV2aWNlczogJXMiCittc2dzdHIgIiIKKworIzogdGFibGVzLmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogbm8gb3BlbmVkIHBmIGRldmljZXMgJXMiCittc2dzdHIgIiIKKworIzogdGFibGVzLmM6ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3I6IGNhbm5vdCB1c2UgdGFibGUgbmFtZSAlcyIKK21zZ3N0ciAiIgorCisjOiB0YWJsZXMuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvcjogY2Fubm90IHN0cmxjcHkgdGFibGUgbmFtZSAlcyIKK21zZ3N0ciAiIgorCisjOiB0YWJsZXMuYzoxMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSVBzZXQ6IGVycm9yOiVzIgorbXNnc3RyICIiCisKKyM6IHRhYmxlcy5jOjEwOAorbXNnaWQgImluZm86IHRhYmxlIGNyZWF0ZWQiCittc2dzdHIgIiIKKworIzogdGFibGVzLmM6MTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IERJT0NSJXNBRERSUzogJXMiCittc2dzdHIgIiIKKworIzogdGFibGVzLmM6MTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGFkZHJlc3NlcyAlcyIKK21zZ3N0ciAiIgorCisjOiBpbm90aWZ5LmM6NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGFjY2VzcyBwYXRoICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBpbm90aWZ5LmM6OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBpbm90aWZ5OiAlcyIKK21zZ3N0ciAiIgorCisjOiBpbm90aWZ5LmM6MTExCisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IHN5bWxpbmtzIGZvbGxvd2luZyAlcyIKK21zZ3N0ciAiIgorCisjOiBpbm90aWZ5LmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgImRpcmVjdG9yeSAlcyBmb3IgcmVzb2x2LWZpbGUgaXMgbWlzc2luZywgY2Fubm90IHBvbGwiCittc2dzdHIgIiIKKworIzogaW5vdGlmeS5jOjEzMSBpbm90aWZ5LmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgaW5vdGlmeSBmb3IgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGlub3RpZnkuYzoxNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGR5bmFtaWMgZGlyZWN0b3J5ICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBpbm90aWZ5LmM6MjU1CisjLCBjLWZvcm1hdAorbXNnaWQgImlub3RpZnksIG5ldyBvciBjaGFuZ2VkIGZpbGUgJXMiCittc2dzdHIgIiIKZGlmZiAtLWdpdCBhL3BvL3JvLnBvIGIvcG8vcm8ucG8KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmEyOTU1NwotLS0gL2Rldi9udWxsCisrKyBiL3BvL3JvLnBvCkBAIC0wLDAgKzEsMjM2NSBAQAorIyBSb21hbmlhbiB0cmFuc2xhdGlvbnMgZm9yIGRuc21hc3EgcGFja2FnZS4KKyMgVGhpcyBmaWxlIGlzIHB1dCBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyMgU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4sIDIwMDUuCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBkbnNtYXNxIDIuMjRcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMDktMDYtMTggMTI6MjQrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTctMDctMTcgMTg6MzArMDEwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az5cbiIKKyJMYW5ndWFnZS1UZWFtOiBSb21hbmlhbiA8dHJhbnNsYXRpb24tdGVhbS1yb0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+XG4iCisiTGFuZ3VhZ2U6IHJvXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisKKyM6IGNhY2hlLmM6NTEzCittc2dpZCAiSW50ZXJuYWwgZXJyb3IgaW4gY2FjaGUuIgorbXNnc3RyICIiCisKKyMgZm9yIGNvbXBhdGliaWxpdHkgcHVycG9zZXMgdGhlIGxldHRlcnMgw6IsIMSDLCDFnywgxaMgYW5kIMOuIGNhbiBiZSB3cml0dGVuIGFzIHRoZWlyIGxvb2stYWxpa2UgY29ycmVzcG9uZGVudC4KKyM6IGNhY2hlLmM6OTIzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBuYW1lcyBmcm9tICVzOiAlcyIKK21zZ3N0ciAiw65uY8SDcmNhcmVhIG51bWVsb3IgZGluICVzOiAlcyBhIGXFn3VhdCIKKworIzogY2FjaGUuYzo5NDkgZGhjcC5jOjg2NworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgYWRkcmVzcyBhdCAlcyBsaW5lICVkIgorbXNnc3RyICJhZHJlc8SDIGdyZcWfaXTEgyDDrm4gJXMsIGxpbmlhICVkIgorCisjOiBjYWNoZS5jOjEwMDIgZGhjcC5jOjg4MworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbmFtZSBhdCAlcyBsaW5lICVkIgorbXNnc3RyICJudW1lIGdyZcWfaXQgw65uICVzIGxpbmlhICVkIgorCisjOiBjYWNoZS5jOjEwMTEgZGhjcC5jOjk1OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkICVzIC0gJWQgYWRkcmVzc2VzIgorbXNnc3RyICJjaXRlc2MgJXMgLSAlZCBhZHJlc2UiCisKKyM6IGNhY2hlLmM6MTEyNAorbXNnaWQgImNsZWFyZWQgY2FjaGUiCittc2dzdHIgIm1lbW9yaWEgdGVtcG9yYXLEgyBhIGZvc3QgxZ90ZWFyc8SDIgorCisjOiBjYWNoZS5jOjExNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gSVB2NCBhZGRyZXNzIGZvdW5kIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjEyMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgYSBDTkFNRSwgbm90IGdpdmluZyBpdCB0byB0aGUgREhDUCBsZWFzZSBvZiAlcyIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjEyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGdpdmluZyBuYW1lICVzIHRvIHRoZSBESENQIGxlYXNlIG9mICVzIGJlY2F1c2UgdGhlIG5hbWUgZXhpc3RzIGluICVzIHdpdGggYWRkcmVzcyAlcyIKK21zZ3N0ciAibnUgcG90IGRhIG51bWVsZSAlcyDDrm1wcnVtdXR1bHVpIGRlIGFkcmVzxIMgREhDUCBhIGx1aSAlcyBkZW9hcmVjZSBudW1lbGVleGlzdMSDIMOubiAlcyBjdSBhZHJlc2EgJXMiCisKKyM6IGNhY2hlLmM6MTQxMworIywgYy1mb3JtYXQKK21zZ2lkICJ0aW1lICVsdSIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjE0MTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhY2hlIHNpemUgJWQsICVkLyVkIGNhY2hlIGluc2VydGlvbnMgcmUtdXNlZCB1bmV4cGlyZWQgY2FjaGUgZW50cmllcy4iCittc2dzdHIgImNhbnRpdGF0ZSBkZSBtZW1vcmllIHRlbXBvcmFyxIMgJWQsICVkLyVkIHN0b2PEg3JpIHRlbXBvcmFyZSBhdXJldXRpbGl6YXQgbG9jYcWjaWkgbmVleHBpcmF0ZS4iCisKKyM6IGNhY2hlLmM6MTQxNgorIywgYy1mb3JtYXQKK21zZ2lkICJxdWVyaWVzIGZvcndhcmRlZCAldSwgcXVlcmllcyBhbnN3ZXJlZCBsb2NhbGx5ICV1IgorbXNnc3RyICIiCisKKyM6IGNhY2hlLmM6MTQxOQorIywgYy1mb3JtYXQKK21zZ2lkICJxdWVyaWVzIGZvciBhdXRob3JpdGF0aXZlIHpvbmVzICV1IgorbXNnc3RyICIiCisKKyM6IGNhY2hlLmM6MTQ0NQorIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2ZXIgJXMjJWQ6IHF1ZXJpZXMgc2VudCAldSwgcmV0cmllZCBvciBmYWlsZWQgJXUiCittc2dzdHIgIiIKKworIzogdXRpbC5jOjQ3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2VlZCB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3I6ICVzIgorbXNnc3RyICJhc2N1bHRhcmVhIHBlIHNvY2tldCBhIGXFn3VhdDogJXMiCisKKyM6IHV0aWwuYzoyMjQKKyMsIGZ1enp5Cittc2dpZCAiZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSIKK21zZ3N0ciAibnUgcG90IMOubmPEg3JjYSAlZCBieXRlcyIKKworIzogdXRpbC5jOjI3NyBvcHRpb24uYzo2MTkKK21zZ2lkICJjb3VsZCBub3QgZ2V0IG1lbW9yeSIKK21zZ3N0ciAibnUgYW0gcHV0dXQgYWxvY2EgbWVtb3JpZSIKKworIzogdXRpbC5jOjI4NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBwaXBlOiAlcyIKK21zZ3N0ciAibnUgcG90IGNpdGkgJXM6ICVzIgorCisjOiB1dGlsLmM6Mjk1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYWxsb2NhdGUgJWQgYnl0ZXMiCittc2dzdHIgIm51IHBvdCDDrm5jxINyY2EgJWQgYnl0ZXMiCisKKyM6IHV0aWwuYzo0NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5maW5pdGUiCittc2dzdHIgImluZmluaXQiCisKKyM6IG9wdGlvbi5jOjM0NAorbXNnaWQgIlNwZWNpZnkgbG9jYWwgYWRkcmVzcyhlcykgdG8gbGlzdGVuIG9uLiIKK21zZ3N0ciAiU3BlY2lmaWNhxaNpIGFkcmVzZWxlIGxvY2FsZSBkZXNlcnZpdGUuIgorCisjOiBvcHRpb24uYzozNDUKK21zZ2lkICJSZXR1cm4gaXBhZGRyIGZvciBhbGwgaG9zdHMgaW4gc3BlY2lmaWVkIGRvbWFpbnMuIgorbXNnc3RyICJBZmnFn2VhesSDIGFkcmVzZWxlIElQIGFsZSBtYcWfaW5pbG9yIMOubiBkb21lbml1bCBkYXQuIgorCisjOiBvcHRpb24uYzozNDYKK21zZ2lkICJGYWtlIHJldmVyc2UgbG9va3VwcyBmb3IgUkZDMTkxOCBwcml2YXRlIGFkZHJlc3MgcmFuZ2VzLiIKK21zZ3N0ciAiU2ltdWxlYXrEgyBjxIN1dMSDcmkgZHVwxIMgYWRyZXPEgyBwZW50cnUgZG9tZW5paSBkZSBhZHJlc8SDIHByaXZhdGUgKFJGQzE5MTgpLiIKKworIzogb3B0aW9uLmM6MzQ3Cittc2dpZCAiVHJlYXQgaXBhZGRyIGFzIE5YRE9NQUlOIChkZWZlYXRzIFZlcmlzaWduIHdpbGRjYXJkKS4iCittc2dzdHIgIkludGVycHJldGVhesSDIGFkcmVzYSBJUCBjYSBOWERPTUFJTiAow65tcG90cml2YSBtYW5pcHVsxINyaWxvciBWZXJpc2lnbikiCisKKyM6IG9wdGlvbi5jOjM0OAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHRoZSBzaXplIG9mIHRoZSBjYWNoZSBpbiBlbnRyaWVzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJTcGVjaWZpY8SDIG3Eg3JpbWVhIMOubnJlZ2lzdHLEg3JpbG9yIHRlbXBvcmFyZSAoaW1wbGljaXQgZSAlcykuIgorCisjOiBvcHRpb24uYzozNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSBjb25maWd1cmF0aW9uIGZpbGUgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIlNwZWNpZmljxIMgZmnFn2llciBkZSBjb25maWd1cmFyZSAoaW1wbGljaXQgZSAlcykuIgorCisjOiBvcHRpb24uYzozNTAKK21zZ2lkICJEbyBOT1QgZm9yayBpbnRvIHRoZSBiYWNrZ3JvdW5kOiBydW4gaW4gZGVidWcgbW9kZS4iCittc2dzdHIgIk5VIHBvcm5lxZ90ZSDDrm4gZnVuZGFsOiBydWxlYXrEgyDDrm4gbW9kdWwgZGVwYW5hcmUuIgorCisjOiBvcHRpb24uYzozNTEKK21zZ2lkICJEbyBOT1QgZm9yd2FyZCBxdWVyaWVzIHdpdGggbm8gZG9tYWluIHBhcnQuIgorbXNnc3RyICJOVSDDrm5haW50YSBjZXJlcmlsZSBjZSBudSBjb27Fo2luIGRvbWVuaXUgRE5TLiIKKworIzogb3B0aW9uLmM6MzUyCittc2dpZCAiUmV0dXJuIHNlbGYtcG9pbnRpbmcgTVggcmVjb3JkcyBmb3IgbG9jYWwgaG9zdHMuIgorbXNnc3RyICJSxINzcHVuZGUgY3Ugw65ucmVnaXN0csSDcmkgTVggc3ByZSBlbCDDrm5zdcWfaSBwZW50cnUgbWHFn2luaSBsb2NhbGUuIgorCisjOiBvcHRpb24uYzozNTMKK21zZ2lkICJFeHBhbmQgc2ltcGxlIG5hbWVzIGluIC9ldGMvaG9zdHMgd2l0aCBkb21haW4tc3VmZml4LiIKK21zZ3N0ciAiQWRhdWfEgyBudW1lbG9yIHNpbXBsZSBkaW4gL2V0Yy9ob3N0cyBudW1lbGUgZG9tZW5pdWx1aSBjYSBzdWZpeC4iCisKKyM6IG9wdGlvbi5jOjM1NAorbXNnaWQgIkRvbid0IGZvcndhcmQgc3B1cmlvdXMgRE5TIHJlcXVlc3RzIGZyb20gV2luZG93cyBob3N0cy4iCittc2dzdHIgIk51IGluYWludGEgY2VyZXJpIEROUyBkZWZlY3RlIHByb3Zlbml0ZSBkZSBsYSBtYcWfaW5pIFdpbmRvd3MuIgorCisjOiBvcHRpb24uYzozNTUKK21zZ2lkICJFbmFibGUgREhDUCBpbiB0aGUgcmFuZ2UgZ2l2ZW4gd2l0aCBsZWFzZSBkdXJhdGlvbi4iCittc2dzdHIgIkFjdGl2ZWF6xIMgREhDUCDDrm4gZG9tZW5pdWwgZGF0IGN1IGR1cmF0xIMgbGltaXRhdMSDIGRlIMOubXBydW11dC4iCisKKyM6IG9wdGlvbi5jOjM1NgorIywgYy1mb3JtYXQKK21zZ2lkICJDaGFuZ2UgdG8gdGhpcyBncm91cCBhZnRlciBzdGFydHVwIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJSdWxlYXrEgyBzdWIgYWNlc3QgZ3J1cCBkdXDEgyBwb3JuaXJlIChpbXBsaWNpdCBlICVzKS4iCisKKyM6IG9wdGlvbi5jOjM1NworbXNnaWQgIlNldCBhZGRyZXNzIG9yIGhvc3RuYW1lIGZvciBhIHNwZWNpZmllZCBtYWNoaW5lLiIKK21zZ3N0ciAiU2NoaW1ixIMgYWRyZXNhIHNhdSBudW1lbGUgbWHFn2luaWkgc3BlY2lmaWNhdGUuIgorCisjOiBvcHRpb24uYzozNTgKKyMsIGZ1enp5Cittc2dpZCAiUmVhZCBESENQIGhvc3Qgc3BlY3MgZnJvbSBmaWxlLiIKK21zZ3N0ciAibnVtZSBNWCBpbnZhbGlkIgorCisjOiBvcHRpb24uYzozNTkKK21zZ2lkICJSZWFkIERIQ1Agb3B0aW9uIHNwZWNzIGZyb20gZmlsZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzYwCisjLCBmdXp6eQorbXNnaWQgIlJlYWQgREhDUCBob3N0IHNwZWNzIGZyb20gYSBkaXJlY3RvcnkuIgorbXNnc3RyICJudW1lIE1YIGludmFsaWQiCisKKyM6IG9wdGlvbi5jOjM2MQorIywgZnV6enkKK21zZ2lkICJSZWFkIERIQ1Agb3B0aW9ucyBmcm9tIGEgZGlyZWN0b3J5LiIKK21zZ3N0ciAibnVtZSBNWCBpbnZhbGlkIgorCisjOiBvcHRpb24uYzozNjIKK21zZ2lkICJFdmFsdWF0ZSBjb25kaXRpb25hbCB0YWcgZXhwcmVzc2lvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkRvIE5PVCBsb2FkICVzIGZpbGUuIgorbXNnc3RyICJOdSDDrm5jYXJjxIMgZmnFn2llcnVsICVzLiIKKworIzogb3B0aW9uLmM6MzY0CisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgYSBob3N0cyBmaWxlIHRvIGJlIHJlYWQgaW4gYWRkaXRpb24gdG8gJXMuIgorbXNnc3RyICJTcGVjaWZpY8SDIHNwcmUgY2l0aXJlIHVuIGZpxZ9pZXIgaG9zdHMgYWRpxaNpb25hbCBsYSAlcy4iCisKKyM6IG9wdGlvbi5jOjM2NQorIywgZnV6enkKK21zZ2lkICJSZWFkIGhvc3RzIGZpbGVzIGZyb20gYSBkaXJlY3RvcnkuIgorbXNnc3RyICJudW1lIE1YIGludmFsaWQiCisKKyM6IG9wdGlvbi5jOjM2NgorbXNnaWQgIlNwZWNpZnkgaW50ZXJmYWNlKHMpIHRvIGxpc3RlbiBvbi4iCittc2dzdHIgIlNwZWNpZmljxIMgaW50ZXJmZcWjZWxlIGRlc2Vydml0ZS4iCisKKyM6IG9wdGlvbi5jOjM2NworbXNnaWQgIlNwZWNpZnkgaW50ZXJmYWNlKHMpIE5PVCB0byBsaXN0ZW4gb24uIgorbXNnc3RyICJTcGVjaWZpY8SDIGludGVyZmXFo2VsZSBORS1kZXNlcnZpdGUuIgorCisjOiBvcHRpb24uYzozNjgKKyMsIGZ1enp5Cittc2dpZCAiTWFwIERIQ1AgdXNlciBjbGFzcyB0byB0YWcuIgorbXNnc3RyICJMZWFnxIMgY2xhc2EgZGUgdXRpbGl6YXRvciBESENQIGN1IGdydXAgZGUgb3DFo2l1bmkuIgorCisjOiBvcHRpb24uYzozNjkKK21zZ2lkICJNYXAgUkZDMzA0NiBjaXJjdWl0LWlkIHRvIHRhZy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzcwCittc2dpZCAiTWFwIFJGQzMwNDYgcmVtb3RlLWlkIHRvIHRhZy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzcxCittc2dpZCAiTWFwIFJGQzM5OTMgc3Vic2NyaWJlci1pZCB0byB0YWcuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM3MgorIywgZnV6enkKK21zZ2lkICJEb24ndCBkbyBESENQIGZvciBob3N0cyB3aXRoIHRhZyBzZXQuIgorbXNnc3RyICJOdSBmdXJuaXphIERIQ1AgbWHFn2luaWxvciBkaW4gZ3J1cHVsIGRlIG9wxaNpdW5pLiIKKworIzogb3B0aW9uLmM6MzczCisjLCBmdXp6eQorbXNnaWQgIkZvcmNlIGJyb2FkY2FzdCByZXBsaWVzIGZvciBob3N0cyB3aXRoIHRhZyBzZXQuIgorbXNnc3RyICJOdSBmdXJuaXphIERIQ1AgbWHFn2luaWxvciBkaW4gZ3J1cHVsIGRlIG9wxaNpdW5pLiIKKworIzogb3B0aW9uLmM6Mzc0Cittc2dpZCAiRG8gTk9UIGZvcmsgaW50byB0aGUgYmFja2dyb3VuZCwgZG8gTk9UIHJ1biBpbiBkZWJ1ZyBtb2RlLiIKK21zZ3N0ciAiTlUgcG9ybmXFn3RlIMOubiBmdW5kYWwsIE5VIHJ1bGVhesSDIMOubiBtb2R1bCBkZXBhbmFyZS4iCisKKyM6IG9wdGlvbi5jOjM3NQorbXNnaWQgIkFzc3VtZSB3ZSBhcmUgdGhlIG9ubHkgREhDUCBzZXJ2ZXIgb24gdGhlIGxvY2FsIG5ldHdvcmsuIgorbXNnc3RyICJQcmVzdXB1bmUgY8SDIHN1bnRlbSBzaW5ndXJ1bCBzZXJ2ZXIgREhDUCBkaW4gcmXFo2VhdWEgbG9jYWzEgy4iCisKKyM6IG9wdGlvbi5jOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHdoZXJlIHRvIHN0b3JlIERIQ1AgbGVhc2VzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJTcGVjaWZpY8SDIGZpxZ9pZXJ1bCBkZSBzdG9jYXJlIGEgw65tcHJ1bXV0dXJpbG9yIERIQ1AgKGltcGxpY2l0IGUgJXMpLiIKKworIzogb3B0aW9uLmM6Mzc3Cittc2dpZCAiUmV0dXJuIE1YIHJlY29yZHMgZm9yIGxvY2FsIGhvc3RzLiIKK21zZ3N0ciAiUsSDc3B1bmRlIGN1IMOubnRyZWdpc3RyxINyaSBNWCBwZW50cnUgbWHFn2luaSBsb2NhbGUuIgorCisjOiBvcHRpb24uYzozNzgKK21zZ2lkICJTcGVjaWZ5IGFuIE1YIHJlY29yZC4iCittc2dzdHIgIlNwZWNpZmljxIMgbyDDrm5yZWdpc3RyYXJlIE1YLiIKKworIzogb3B0aW9uLmM6Mzc5Cittc2dpZCAiU3BlY2lmeSBCT09UUCBvcHRpb25zIHRvIERIQ1Agc2VydmVyLiIKK21zZ3N0ciAiU3BlY2lmaWPEgyBvcMWjaXVuaSBCT09UUCBzZXJ2ZXJ1bHVpIERIQ1AuIgorCisjOiBvcHRpb24uYzozODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG8gTk9UIHBvbGwgJXMgZmlsZSwgcmVsb2FkIG9ubHkgb24gU0lHSFVQLiIKK21zZ3N0ciAiTnUgw65uY8SDcmNhIGZpxZ9pZXJ1bCAlcywgY2l0ZcWfdGUtbCBkb2FyIGxhIFNJR0hVUC4iCisKKyM6IG9wdGlvbi5jOjM4MQorbXNnaWQgIkRvIE5PVCBjYWNoZSBmYWlsZWQgc2VhcmNoIHJlc3VsdHMuIgorbXNnc3RyICJOVSBtZW1vcmEgcmV6dWx0YXRlbGUgZGUgY8SDdXRhcmUgRE5TIGXFn3VhdGF0xIMuIgorCisjOiBvcHRpb24uYzozODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNlIG5hbWVzZXJ2ZXJzIHN0cmljdGx5IGluIHRoZSBvcmRlciBnaXZlbiBpbiAlcy4iCittc2dzdHIgIkZvbG9zZcWfdGUgc2VydmVyZSBETlMgc3RyaWN0IMOubiBvcmRpbmVhIGRhdMSDIMOubiAlcy4iCisKKyM6IG9wdGlvbi5jOjM4MworIywgZnV6enkKK21zZ2lkICJTcGVjaWZ5IG9wdGlvbnMgdG8gYmUgc2VudCB0byBESENQIGNsaWVudHMuIgorbXNnc3RyICJDb25maWd1cmVhesSDIG9wxaNpdW5pIMOubiBwbHVzY2UgdHJlYnVpZSB0cmltaXNlIGNsaWVuxaNpbG9yIERIQ1AuIgorCisjOiBvcHRpb24uYzozODQKK21zZ2lkICJESENQIG9wdGlvbiBzZW50IGV2ZW4gaWYgdGhlIGNsaWVudCBkb2VzIG5vdCByZXF1ZXN0IGl0LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozODUKK21zZ2lkICJTcGVjaWZ5IHBvcnQgdG8gbGlzdGVuIGZvciBETlMgcmVxdWVzdHMgb24gKGRlZmF1bHRzIHRvIDUzKS4iCittc2dzdHIgIlNwZWNpZmljxIMgbnVtxINydWwgcG9ydHVsdWkgcGVudHJ1IGNlcmVyaSBETlMgKGltcGxpY2l0IGUgNTMpLiIKKworIzogb3B0aW9uLmM6Mzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gc3VwcG9ydGVkIFVEUCBwYWNrZXQgc2l6ZSBmb3IgRUROUy4wIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJNYXJpbWVhIG1heGltxIMgYSBwYWNoZXR1bHVpIFVEUCBwZW50cnUgRUROUy4wIChpbXBsaWNpdCBlICVzKS4iCisKKyM6IG9wdGlvbi5jOjM4NworIywgZnV6enkKK21zZ2lkICJMb2cgRE5TIHF1ZXJpZXMuIgorbXNnc3RyICLDjm5yZWdpc3RyZWF6xIMgdHJhbnphY8WjaWlsZS4iCisKKyM6IG9wdGlvbi5jOjM4OAorIywgZnV6enkKK21zZ2lkICJGb3JjZSB0aGUgb3JpZ2luYXRpbmcgcG9ydCBmb3IgdXBzdHJlYW0gRE5TIHF1ZXJpZXMuIgorbXNnc3RyICJGb3LFo2VhesSDIGFjZXN0IHBvcnQgcGVudHJ1IGRhdGVsZSBjZSBwbGVhY8SDLiIKKworIzogb3B0aW9uLmM6Mzg5Cittc2dpZCAiRG8gTk9UIHJlYWQgcmVzb2x2LmNvbmYuIgorbXNnc3RyICJOVSBjaXRpIGZpxZ9pZXJ1bCByZXNvbHYuY29uZiIKKworIzogb3B0aW9uLmM6MzkwCisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgcGF0aCB0byByZXNvbHYuY29uZiAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiU3BlY2lmaWPEgyBjYWxlYSBjxIN0cmUgcmVzb2x2LmNvbmYgKGltcGxpY2l0IGUgJXMpLiIKKworIzogb3B0aW9uLmM6MzkxCisjLCBmdXp6eQorbXNnaWQgIlNwZWNpZnkgcGF0aCB0byBmaWxlIHdpdGggc2VydmVyPSBvcHRpb25zIgorbXNnc3RyICJTcGVjaWZpY8SDIG8gY2FsZSBwZW50cnUgZmnFn2llcnVsIFBJRC4gKGltcGxpY2l0ICVzKS4iCisKKyM6IG9wdGlvbi5jOjM5MgorbXNnaWQgIlNwZWNpZnkgYWRkcmVzcyhlcykgb2YgdXBzdHJlYW0gc2VydmVycyB3aXRoIG9wdGlvbmFsIGRvbWFpbnMuIgorbXNnc3RyICJTcGVjaWZpY8SDIGFkcmVzZWxlIHNlcnZlcihlbG9yKSBzdXBlcmlvYXJlIGN1IGRvbWVuaWkgb3DFo2lvbmFsZS4iCisKKyM6IG9wdGlvbi5jOjM5MworIywgZnV6enkKK21zZ2lkICJTcGVjaWZ5IGFkZHJlc3Mgb2YgdXBzdHJlYW0gc2VydmVycyBmb3IgcmV2ZXJzZSBhZGRyZXNzIHF1ZXJpZXMiCittc2dzdHIgIlNwZWNpZmljxIMgYWRyZXNlbGUgc2VydmVyKGVsb3IpIHN1cGVyaW9hcmUgY3UgZG9tZW5paSBvcMWjaW9uYWxlLiIKKworIzogb3B0aW9uLmM6Mzk0Cittc2dpZCAiTmV2ZXIgZm9yd2FyZCBxdWVyaWVzIHRvIHNwZWNpZmllZCBkb21haW5zLiIKK21zZ3N0ciAiTnUgw65uYWludGVhesSDIGNlcmVyaWxlIHNwcmUgZG9tZW5paWxlIHNwZWNpZmljYXRlLiIKKworIzogb3B0aW9uLmM6Mzk1Cittc2dpZCAiU3BlY2lmeSB0aGUgZG9tYWluIHRvIGJlIGFzc2lnbmVkIGluIERIQ1AgbGVhc2VzLiIKK21zZ3N0ciAiU3BlY2lmaWPEgyBkb21lbml1bCBkZSB0cmFuc21pcyBwcmluIERIQ1AuIgorCisjOiBvcHRpb24uYzozOTYKK21zZ2lkICJTcGVjaWZ5IGRlZmF1bHQgdGFyZ2V0IGluIGFuIE1YIHJlY29yZC4iCittc2dzdHIgIlNwZWNpZmljxIMgbyDFo2ludMSDIMOubnRyLW8gw65ucmVnaXN0cmFyZSBNWC4iCisKKyM6IG9wdGlvbi5jOjM5NworbXNnaWQgIlNwZWNpZnkgdGltZS10by1saXZlIGluIHNlY29uZHMgZm9yIHJlcGxpZXMgZnJvbSAvZXRjL2hvc3RzLiIKK21zZ3N0ciAiU3BlY2lmaWPEgyBUVEwgw65uIHNlY3VuZGUgcGVudHJ1IHLEg3NwdW5zdXJpbGUgZGluIC9ldGMvaG9zdHMuIgorCisjOiBvcHRpb24uYzozOTgKKyMsIGZ1enp5Cittc2dpZCAiU3BlY2lmeSB0aW1lLXRvLWxpdmUgaW4gc2Vjb25kcyBmb3IgbmVnYXRpdmUgY2FjaGluZy4iCittc2dzdHIgIlNwZWNpZmljxIMgVFRMIMOubiBzZWN1bmRlIHBlbnRydSByxINzcHVuc3VyaWxlIGRpbiAvZXRjL2hvc3RzLiIKKworIzogb3B0aW9uLmM6Mzk5CisjLCBmdXp6eQorbXNnaWQgIlNwZWNpZnkgdGltZS10by1saXZlIGluIHNlY29uZHMgZm9yIG1heGltdW0gVFRMIHRvIHNlbmQgdG8gY2xpZW50cy4iCittc2dzdHIgIlNwZWNpZmljxIMgVFRMIMOubiBzZWN1bmRlIHBlbnRydSByxINzcHVuc3VyaWxlIGRpbiAvZXRjL2hvc3RzLiIKKworIzogb3B0aW9uLmM6NDAwCisjLCBmdXp6eQorbXNnaWQgIlNwZWNpZnkgdGltZS10by1saXZlIGNlaWxpbmcgZm9yIGNhY2hlLiIKK21zZ3N0ciAiU3BlY2lmaWPEgyBUVEwgw65uIHNlY3VuZGUgcGVudHJ1IHLEg3NwdW5zdXJpbGUgZGluIC9ldGMvaG9zdHMuIgorCisjOiBvcHRpb24uYzo0MDEKKyMsIGZ1enp5Cittc2dpZCAiU3BlY2lmeSB0aW1lLXRvLWxpdmUgZmxvb3IgZm9yIGNhY2hlLiIKK21zZ3N0ciAiU3BlY2lmaWPEgyBUVEwgw65uIHNlY3VuZGUgcGVudHJ1IHLEg3NwdW5zdXJpbGUgZGluIC9ldGMvaG9zdHMuIgorCisjOiBvcHRpb24uYzo0MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hhbmdlIHRvIHRoaXMgdXNlciBhZnRlciBzdGFydHVwLiAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiUnVsZWF6xIMgc3ViIGFjZXN0IHV0aWxpemF0b3IgZHVwxIMgcG9ybmlyZS4gKGltcGxpY2l0IGUgJXMpLiIKKworIzogb3B0aW9uLmM6NDAzCisjLCBmdXp6eQorbXNnaWQgIk1hcCBESENQIHZlbmRvciBjbGFzcyB0byB0YWcuIgorbXNnc3RyICJUcmltaXRlIG9wxaNpdW5pIERIQ1Agw65uIGZ1bmPFo2llIGRlIG1hcmNhIHBsxINjaWkgZGUgcmXFo2VhLiIKKworIzogb3B0aW9uLmM6NDA0Cittc2dpZCAiRGlzcGxheSBkbnNtYXNxIHZlcnNpb24gYW5kIGNvcHlyaWdodCBpbmZvcm1hdGlvbi4iCittc2dzdHIgIkFmacWfZWF6xIMgdmVyc2l1bmVhIGRuc21hc3EgxZ9pIGRyZXB0dXJpbGUgZGUgYXV0b3IuIgorCisjOiBvcHRpb24uYzo0MDUKK21zZ2lkICJUcmFuc2xhdGUgSVB2NCBhZGRyZXNzZXMgZnJvbSB1cHN0cmVhbSBzZXJ2ZXJzLiIKK21zZ3N0ciAiVHJhZHVjZSBhZHJlc2VsZSBJUHY0IGRlIGxhIHNlcnZlcmVsZSBETlMgc3VwZXJpb2FyZS4iCisKKyM6IG9wdGlvbi5jOjQwNgorbXNnaWQgIlNwZWNpZnkgYSBTUlYgcmVjb3JkLiIKK21zZ3N0ciAiU3BlY2lmaWPEgyBvIMOubnJlZ2lzdHJhcmUgU1JWLiIKKworIzogb3B0aW9uLmM6NDA3Cittc2dpZCAiRGlzcGxheSB0aGlzIG1lc3NhZ2UuIFVzZSAtLWhlbHAgZGhjcCBvciAtLWhlbHAgZGhjcDYgZm9yIGtub3duIERIQ1Agb3B0aW9ucy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDA4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHBhdGggb2YgUElEIGZpbGUgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIlNwZWNpZmljxIMgbyBjYWxlIHBlbnRydSBmacWfaWVydWwgUElELiAoaW1wbGljaXQgJXMpLiIKKworIzogb3B0aW9uLmM6NDA5CisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgbWF4aW11bSBudW1iZXIgb2YgREhDUCBsZWFzZXMgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIlNwZWNpZmljxIMgbnVtxINydWwgbWF4aW0gZGUgw65tcHJ1bXV0dXJpIERIQ1AgKGltcGxpY2l0ICVzKS4iCisKKyM6IG9wdGlvbi5jOjQxMAorbXNnaWQgIkFuc3dlciBETlMgcXVlcmllcyBiYXNlZCBvbiB0aGUgaW50ZXJmYWNlIGEgcXVlcnkgd2FzIHNlbnQgdG8uIgorbXNnc3RyICJSxINzcHVuZGUgY2VyZXJpbG9yIEROUyDDrm4gZnVuY8WjaWUgZGUgaW50ZXJmYcWjYSBwZSBjYXJlIGEgdmVuaXQgY2VyZXJlYS4iCisKKyM6IG9wdGlvbi5jOjQxMQorbXNnaWQgIlNwZWNpZnkgVFhUIEROUyByZWNvcmQuIgorbXNnc3RyICJTcGVjaWZpY8SDIG8gw65ucmVnaXN0cmFyZSBUWFQuIgorCisjOiBvcHRpb24uYzo0MTIKKyMsIGZ1enp5Cittc2dpZCAiU3BlY2lmeSBQVFIgRE5TIHJlY29yZC4iCittc2dzdHIgIlNwZWNpZmljxIMgbyDDrm5yZWdpc3RyYXJlIFRYVC4iCisKKyM6IG9wdGlvbi5jOjQxMworbXNnaWQgIkdpdmUgRE5TIG5hbWUgdG8gSVB2NCBhZGRyZXNzIG9mIGludGVyZmFjZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDE0Cittc2dpZCAiQmluZCBvbmx5IHRvIGludGVyZmFjZXMgaW4gdXNlLiIKK21zZ3N0ciAiQXNjdWx0xIMgZG9hciBwZSBpbnRlcmZlxaNlbGUgYWN0aXZlLiIKKworIzogb3B0aW9uLmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlYWQgREhDUCBzdGF0aWMgaG9zdCBpbmZvcm1hdGlvbiBmcm9tICVzLiIKK21zZ3N0ciAiQ2l0ZcWfdGUgaW5mb3JtYcWjaWkgREhDUCBzdGF0aWNlIGRlc3ByZSBtYcWfaW7EgyBkaW4gJXMuIgorCisjOiBvcHRpb24uYzo0MTYKK21zZ2lkICJFbmFibGUgdGhlIERCdXMgaW50ZXJmYWNlIGZvciBzZXR0aW5nIHVwc3RyZWFtIHNlcnZlcnMsIGV0Yy4iCittc2dzdHIgIkFjdGl2ZWF6YSBpbnRlcmZhxaNhIERCdXMgcGVudHJ1IGNvbmZpZ3VyYXJlYSBzZXJ2ZXJlbG9yIHN1cGVyaW9hcmUuIgorCisjOiBvcHRpb24uYzo0MTcKK21zZ2lkICJEbyBub3QgcHJvdmlkZSBESENQIG9uIHRoaXMgaW50ZXJmYWNlLCBvbmx5IHByb3ZpZGUgRE5TLiIKK21zZ3N0ciAiTnUgYWN0aXZlYXrEgyBESENQIGNpIGRvYXIgRE5TIHBlIGFjZWFzdMSDIGludGVyZmHFo8SDLiIKKworIzogb3B0aW9uLmM6NDE4Cittc2dpZCAiRW5hYmxlIGR5bmFtaWMgYWRkcmVzcyBhbGxvY2F0aW9uIGZvciBib290cC4iCittc2dzdHIgIkFjdGl2ZWF6xIMgYWxvY2FyZWEgZGluYW1pY8SDIGEgYWRyZXNlbG9yIHBlbnRydSBCT09UUC4iCisKKyM6IG9wdGlvbi5jOjQxOQorIywgZnV6enkKK21zZ2lkICJNYXAgTUFDIGFkZHJlc3MgKHdpdGggd2lsZGNhcmRzKSB0byBvcHRpb24gc2V0LiIKK21zZ3N0ciAiVHJpbWl0ZSBvcMWjaXVuaSBESENQIMOubiBmdW5jxaNpZSBkZSBtYXJjYSBwbMSDY2lpIGRlIHJlxaNlYS4iCisKKyM6IG9wdGlvbi5jOjQyMAorbXNnaWQgIlRyZWF0IERIQ1AgcmVxdWVzdHMgb24gYWxpYXNlcyBhcyBhcnJpdmluZyBmcm9tIGludGVyZmFjZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDIxCittc2dpZCAiRGlzYWJsZSBJQ01QIGVjaG8gYWRkcmVzcyBjaGVja2luZyBpbiB0aGUgREhDUCBzZXJ2ZXIuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQyMgorbXNnaWQgIlNoZWxsIHNjcmlwdCB0byBydW4gb24gREhDUCBsZWFzZSBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQyMworbXNnaWQgIkx1YSBzY3JpcHQgdG8gcnVuIG9uIERIQ1AgbGVhc2UgY3JlYXRpb24gYW5kIGRlc3RydWN0aW9uLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MjQKK21zZ2lkICJSdW4gbGVhc2UtY2hhbmdlIHNjcmlwdHMgYXMgdGhpcyB1c2VyLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MjUKK21zZ2lkICJDYWxsIGRoY3Atc2NyaXB0IHdpdGggY2hhbmdlcyB0byBsb2NhbCBBUlAgdGFibGUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQyNgorbXNnaWQgIlJlYWQgY29uZmlndXJhdGlvbiBmcm9tIGFsbCB0aGUgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQyNworIywgZnV6enkKK21zZ2lkICJMb2cgdG8gdGhpcyBzeXNsb2cgZmFjaWxpdHkgb3IgZmlsZS4gKGRlZmF1bHRzIHRvIERBRU1PTikiCittc2dzdHIgIlJ1bGVhesSDIHN1YiBhY2VzdCB1dGlsaXphdG9yIGR1cMSDIHBvcm5pcmUuIChpbXBsaWNpdCBlICVzKS4iCisKKyM6IG9wdGlvbi5jOjQyOAorbXNnaWQgIkRvIG5vdCB1c2UgbGVhc2VmaWxlLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MjkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgRE5TIHF1ZXJpZXMuIChkZWZhdWx0cyB0byAlcykiCittc2dzdHIgIlNwZWNpZmljxIMgbnVtxINydWwgbWF4aW0gZGUgw65tcHJ1bXV0dXJpIERIQ1AgKGltcGxpY2l0ICVzKS4iCisKKyM6IG9wdGlvbi5jOjQzMAorIywgYy1mb3JtYXQKK21zZ2lkICJDbGVhciBETlMgY2FjaGUgd2hlbiByZWxvYWRpbmcgJXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQzMQorbXNnaWQgIklnbm9yZSBob3N0bmFtZXMgcHJvdmlkZWQgYnkgREhDUCBjbGllbnRzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzIKK21zZ2lkICJEbyBOT1QgcmV1c2UgZmlsZW5hbWUgYW5kIHNlcnZlciBmaWVsZHMgZm9yIGV4dHJhIERIQ1Agb3B0aW9ucy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDMzCittc2dpZCAiRW5hYmxlIGludGVncmF0ZWQgcmVhZC1vbmx5IFRGVFAgc2VydmVyLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzQKK21zZ2lkICJFeHBvcnQgZmlsZXMgYnkgVEZUUCBvbmx5IGZyb20gdGhlIHNwZWNpZmllZCBzdWJ0cmVlLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzUKK21zZ2lkICJBZGQgY2xpZW50IElQIG9yIGhhcmR3YXJlIGFkZHJlc3MgdG8gdGZ0cC1yb290LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzYKK21zZ2lkICJBbGxvdyBhY2Nlc3Mgb25seSB0byBmaWxlcyBvd25lZCBieSB0aGUgdXNlciBydW5uaW5nIGRuc21hc3EuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQzNworbXNnaWQgIkRvIG5vdCB0ZXJtaW5hdGUgdGhlIHNlcnZpY2UgaWYgVEZUUCBkaXJlY3RvcmllcyBhcmUgaW5hY2Nlc3NpYmxlLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgVEZUUCB0cmFuc2ZlcnMgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIlNwZWNpZmljxIMgbnVtxINydWwgbWF4aW0gZGUgw65tcHJ1bXV0dXJpIERIQ1AgKGltcGxpY2l0ICVzKS4iCisKKyM6IG9wdGlvbi5jOjQzOQorIywgZnV6enkKK21zZ2lkICJNYXhpbXVtIE1UVSB0byB1c2UgZm9yIFRGVFAgdHJhbnNmZXJzLiIKK21zZ3N0ciAiU3BlY2lmaWPEgyBudW3Eg3J1bCBtYXhpbSBkZSDDrm1wcnVtdXR1cmkgREhDUCAoaW1wbGljaXQgJXMpLiIKKworIzogb3B0aW9uLmM6NDQwCittc2dpZCAiRGlzYWJsZSB0aGUgVEZUUCBibG9ja3NpemUgZXh0ZW5zaW9uLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDEKK21zZ2lkICJDb252ZXJ0IFRGVFAgZmlsZW5hbWVzIHRvIGxvd2VyY2FzZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDIKK21zZ2lkICJFcGhlbWVyYWwgcG9ydCByYW5nZSBmb3IgdXNlIGJ5IFRGVFAgdHJhbnNmZXJzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDMKK21zZ2lkICJFeHRyYSBsb2dnaW5nIGZvciBESENQLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDQKK21zZ2lkICJFbmFibGUgYXN5bmMuIGxvZ2dpbmc7IG9wdGlvbmFsbHkgc2V0IHF1ZXVlIGxlbmd0aC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQ1Cittc2dpZCAiU3RvcCBETlMgcmViaW5kaW5nLiBGaWx0ZXIgcHJpdmF0ZSBJUCByYW5nZXMgd2hlbiByZXNvbHZpbmcuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ0NgorbXNnaWQgIkFsbG93IHJlYmluZGluZyBvZiAxMjcuMC4wLjAvOCwgZm9yIFJCTCBzZXJ2ZXJzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDcKK21zZ2lkICJJbmhpYml0IEROUy1yZWJpbmQgcHJvdGVjdGlvbiBvbiB0aGlzIGRvbWFpbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQ4Cittc2dpZCAiQWx3YXlzIHBlcmZvcm0gRE5TIHF1ZXJpZXMgdG8gYWxsIHNlcnZlcnMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ0OQorbXNnaWQgIlNldCB0YWcgaWYgY2xpZW50IGluY2x1ZGVzIG1hdGNoaW5nIG9wdGlvbiBpbiByZXF1ZXN0LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NTAKK21zZ2lkICJVc2UgYWx0ZXJuYXRpdmUgcG9ydHMgZm9yIERIQ1AuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1MQorIywgZnV6enkKK21zZ2lkICJTcGVjaWZ5IE5BUFRSIEROUyByZWNvcmQuIgorbXNnc3RyICJTcGVjaWZpY8SDIG8gw65ucmVnaXN0cmFyZSBUWFQuIgorCisjOiBvcHRpb24uYzo0NTIKK21zZ2lkICJTcGVjaWZ5IGxvd2VzdCBwb3J0IGF2YWlsYWJsZSBmb3IgRE5TIHF1ZXJ5IHRyYW5zbWlzc2lvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDUzCittc2dpZCAiU3BlY2lmeSBoaWdoZXN0IHBvcnQgYXZhaWxhYmxlIGZvciBETlMgcXVlcnkgdHJhbnNtaXNzaW9uLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NTQKK21zZ2lkICJVc2Ugb25seSBmdWxseSBxdWFsaWZpZWQgZG9tYWluIG5hbWVzIGZvciBESENQIGNsaWVudHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1NQorbXNnaWQgIkdlbmVyYXRlIGhvc3RuYW1lcyBiYXNlZCBvbiBNQUMgYWRkcmVzcyBmb3IgbmFtZWxlc3MgY2xpZW50cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDU2Cittc2dpZCAiVXNlIHRoZXNlIERIQ1AgcmVsYXlzIGFzIGZ1bGwgcHJveGllcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDU3Cittc2dpZCAiUmVsYXkgREhDUCByZXF1ZXN0cyB0byBhIHJlbW90ZSBzZXJ2ZXIiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDU4Cittc2dpZCAiU3BlY2lmeSBhbGlhcyBuYW1lIGZvciBMT0NBTCBETlMgbmFtZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDU5CisjLCBmdXp6eQorbXNnaWQgIlByb21wdCB0byBzZW5kIHRvIFBYRSBjbGllbnRzLiIKK21zZ3N0ciAiQ29uZmlndXJlYXrEgyBvcMWjaXVuaSDDrm4gcGx1c2NlIHRyZWJ1aWUgdHJpbWlzZSBjbGllbsWjaWxvciBESENQLiIKKworIzogb3B0aW9uLmM6NDYwCittc2dpZCAiQm9vdCBzZXJ2aWNlIGZvciBQWEUgbWVudS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDYxCittc2dpZCAiQ2hlY2sgY29uZmlndXJhdGlvbiBzeW50YXguIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ2MgorbXNnaWQgIkFkZCByZXF1ZXN0b3IncyBNQUMgYWRkcmVzcyB0byBmb3J3YXJkZWQgRE5TIHF1ZXJpZXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ2MworbXNnaWQgIkFkZCBzcGVjaWZpZWQgSVAgc3VibmV0IHRvIGZvcndhcmRlZCBETlMgcXVlcmllcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDY0CisjLCBmdXp6eQorbXNnaWQgIkFkZCBjbGllbnQgaWRlbnRpZmljYXRpb24gdG8gZm9yd2FyZGVkIEROUyBxdWVyaWVzLiIKK21zZ3N0ciAiRm9yxaNlYXrEgyBhY2VzdCBwb3J0IHBlbnRydSBkYXRlbGUgY2UgcGxlYWPEgy4iCisKKyM6IG9wdGlvbi5jOjQ2NQorIywgZnV6enkKK21zZ2lkICJQcm94eSBETlNTRUMgdmFsaWRhdGlvbiByZXN1bHRzIGZyb20gdXBzdHJlYW0gbmFtZXNlcnZlcnMuIgorbXNnc3RyICJUcmFkdWNlIGFkcmVzZWxlIElQdjQgZGUgbGEgc2VydmVyZWxlIEROUyBzdXBlcmlvYXJlLiIKKworIzogb3B0aW9uLmM6NDY2Cittc2dpZCAiQXR0ZW1wdCB0byBhbGxvY2F0ZSBzZXF1ZW50aWFsIElQIGFkZHJlc3NlcyB0byBESENQIGNsaWVudHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ2NworbXNnaWQgIkNvcHkgY29ubmVjdGlvbi10cmFjayBtYXJrIGZyb20gcXVlcmllcyB0byB1cHN0cmVhbSBjb25uZWN0aW9ucy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDY4Cittc2dpZCAiQWxsb3cgREhDUCBjbGllbnRzIHRvIGRvIHRoZWlyIG93biBERE5TIHVwZGF0ZXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ2OQorbXNnaWQgIlNlbmQgcm91dGVyLWFkdmVydGlzZW1lbnRzIGZvciBpbnRlcmZhY2VzIGRvaW5nIERIQ1B2NiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NzAKK21zZ2lkICJTcGVjaWZ5IERVSURfRU4tdHlwZSBESENQdjYgc2VydmVyIERVSUQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDcxCisjLCBmdXp6eQorbXNnaWQgIlNwZWNpZnkgaG9zdCAoQS9BQUFBIGFuZCBQVFIpIHJlY29yZHMiCittc2dzdHIgIlNwZWNpZmljxIMgbyDDrm5yZWdpc3RyYXJlIE1YLiIKKworIzogb3B0aW9uLmM6NDcyCisjLCBmdXp6eQorbXNnaWQgIlNwZWNpZnkgYXJiaXRyYXJ5IEROUyByZXNvdXJjZSByZWNvcmQiCittc2dzdHIgIlNwZWNpZmljxIMgbyDDrm5yZWdpc3RyYXJlIFRYVC4iCisKKyM6IG9wdGlvbi5jOjQ3MworIywgZnV6enkKK21zZ2lkICJCaW5kIHRvIGludGVyZmFjZXMgaW4gdXNlIC0gY2hlY2sgZm9yIG5ldyBpbnRlcmZhY2VzIgorbXNnc3RyICJpbnRlcmZhxaPEgyBuZWN1bm9zY3V0xIMgJXMiCisKKyM6IG9wdGlvbi5jOjQ3NAorbXNnaWQgIkV4cG9ydCBsb2NhbCBuYW1lcyB0byBnbG9iYWwgRE5TIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ3NQorbXNnaWQgIkRvbWFpbiB0byBleHBvcnQgdG8gZ2xvYmFsIEROUyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NzYKK21zZ2lkICJTZXQgVFRMIGZvciBhdXRob3JpdGF0aXZlIHJlcGxpZXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDc3Cittc2dpZCAiU2V0IGF1dGhvcml0YXRpdmUgem9uZSBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NzgKK21zZ2lkICJTZWNvbmRhcnkgYXV0aG9yaXRhdGl2ZSBuYW1lc2VydmVycyBmb3IgZm9yd2FyZCBkb21haW5zIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ3OQorbXNnaWQgIlBlZXJzIHdoaWNoIGFyZSBhbGxvd2VkIHRvIGRvIHpvbmUgdHJhbnNmZXIiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDgwCittc2dpZCAiU3BlY2lmeSBpcHNldHMgdG8gd2hpY2ggbWF0Y2hpbmcgZG9tYWlucyBzaG91bGQgYmUgYWRkZWQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDgxCittc2dpZCAiU3BlY2lmeSBhIGRvbWFpbiBhbmQgYWRkcmVzcyByYW5nZSBmb3Igc3ludGhlc2lzZWQgbmFtZXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDgyCittc2dpZCAiQWN0aXZhdGUgRE5TU0VDIHZhbGlkYXRpb24iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDgzCittc2dpZCAiU3BlY2lmeSB0cnVzdCBhbmNob3Iga2V5IGRpZ2VzdC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDg0Cittc2dpZCAiRGlzYWJsZSB1cHN0cmVhbSBjaGVja2luZyBmb3IgRE5TU0VDIGRlYnVnZ2luZy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDg1Cittc2dpZCAiRW5zdXJlIGFuc3dlcnMgd2l0aG91dCBETlNTRUMgYXJlIGluIHVuc2lnbmVkIHpvbmVzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0ODYKK21zZ2lkICJEb24ndCBjaGVjayBETlNTRUMgc2lnbmF0dXJlIHRpbWVzdGFtcHMgdW50aWwgZmlyc3QgY2FjaGUtcmVsb2FkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ4NworbXNnaWQgIlRpbWVzdGFtcCBmaWxlIHRvIHZlcmlmeSBzeXN0ZW0gY2xvY2sgZm9yIEROU1NFQyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0ODkKK21zZ2lkICJTcGVjaWZ5IERIQ1B2NiBwcmVmaXggY2xhc3MiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDkxCittc2dpZCAiU2V0IE1UVSwgcHJpb3JpdHksIHJlc2VuZC1pbnRlcnZhbCBhbmQgcm91dGVyLWxpZmV0aW1lIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ5MgorbXNnaWQgIkRvIG5vdCBsb2cgcm91dGluZSBESENQLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0OTMKK21zZ2lkICJEbyBub3QgbG9nIHJvdXRpbmUgREhDUHY2LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0OTQKK21zZ2lkICJEbyBub3QgbG9nIFJBLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0OTUKK21zZ2lkICJBY2NlcHQgcXVlcmllcyBvbmx5IGZyb20gZGlyZWN0bHktY29ubmVjdGVkIG5ldHdvcmtzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0OTYKK21zZ2lkICJEZXRlY3QgYW5kIHJlbW92ZSBETlMgZm9yd2FyZGluZyBsb29wcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDk3Cittc2dpZCAiSWdub3JlIEROUyByZXNwb25zZXMgY29udGFpbmluZyBpcGFkZHIuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ5OAorbXNnaWQgIlNldCBUVEwgaW4gRE5TIHJlc3BvbnNlcyB3aXRoIERIQ1AtZGVyaXZlZCBhZGRyZXNzZXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ5OQorbXNnaWQgIkRlbGF5IERIQ1AgcmVwbGllcyBmb3IgYXQgbGVhc3QgbnVtYmVyIG9mIHNlY29uZHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjcwMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6IGRuc21hc3EgW29wdGlvbnNdXG4iCisiXG4iCittc2dzdHIgIiIKKyJVdGlsaXphcmU6IGRuc21hc3EgW29wxaNpdW5pXVxuIgorIlxuIgorCisjOiBvcHRpb24uYzo3MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNlIHNob3J0IG9wdGlvbnMgb25seSBvbiB0aGUgY29tbWFuZCBsaW5lLlxuIgorbXNnc3RyICJGb2xvc2nFo2kgb3DFo2l1bmlsZSBwcmVzY3VydGF0ZSBkb2FyIMOubiBsaW5pZSBkZSBjb21hbmTEgy5cbiIKKworIzogb3B0aW9uLmM6NzA3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJWYWxpZCBvcHRpb25zIGFyZTpcbiIKK21zZ3N0ciAiT3DFo2l1bmlsZSB2YWxpZGUgc3VudDpcbiIKKworIzogb3B0aW9uLmM6NzU0IG9wdGlvbi5jOjg2OAorIywgZnV6enkKK21zZ2lkICJiYWQgYWRkcmVzcyIKK21zZ3N0ciAiY2l0ZXNjICVzIC0gJWQgYWRyZXNlIgorCisjOiBvcHRpb24uYzo3Nzkgb3B0aW9uLmM6NzgzCittc2dpZCAiYmFkIHBvcnQiCittc2dzdHIgInBvcnQgaW52YWxpZCIKKworIzogb3B0aW9uLmM6Nzk3IG9wdGlvbi5jOjgyNiBvcHRpb24uYzo4NjEKK21zZ2lkICJpbnRlcmZhY2UgYmluZGluZyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjgyMSBvcHRpb24uYzo4NTYKK21zZ2lkICJpbnRlcmZhY2UgY2FuIG9ubHkgYmUgc3BlY2lmaWVkIG9uY2UiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6ODM1IG9wdGlvbi5jOjM4MDAKKyMsIGZ1enp5Cittc2dpZCAiYmFkIGludGVyZmFjZSBuYW1lIgorbXNnc3RyICJudW1lIE1YIGludmFsaWQiCisKKyM6IG9wdGlvbi5jOjEwNjIKK21zZ2lkICJ1bnN1cHBvcnRlZCBlbmNhcHN1bGF0aW9uIGZvciBJUHY2IG9wdGlvbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxMDc2Cittc2dpZCAiYmFkIGRoY3Atb3B0aW9uIgorbXNnc3RyICJkaGNwLW9wdGlvbiBpbnZhbGlkIgorCisjOiBvcHRpb24uYzoxMTQ0CisjLCBmdXp6eQorbXNnaWQgImJhZCBJUCBhZGRyZXNzIgorbXNnc3RyICJjaXRlc2MgJXMgLSAlZCBhZHJlc2UiCisKKyM6IG9wdGlvbi5jOjExNDcgb3B0aW9uLmM6MTI4NiBvcHRpb24uYzozMDcwCisjLCBmdXp6eQorbXNnaWQgImJhZCBJUHY2IGFkZHJlc3MiCittc2dzdHIgImNpdGVzYyAlcyAtICVkIGFkcmVzZSIKKworIzogb3B0aW9uLmM6MTI0MAorIywgZnV6enkKK21zZ2lkICJiYWQgSVB2NCBhZGRyZXNzIgorbXNnc3RyICJjaXRlc2MgJXMgLSAlZCBhZHJlc2UiCisKKyM6IG9wdGlvbi5jOjEzMTMgb3B0aW9uLmM6MTQwNworbXNnaWQgImJhZCBkb21haW4gaW4gZGhjcC1vcHRpb24iCittc2dzdHIgImRvbWVuaXUgRE5TIGludmFsaWQgw65uIGRlY2xhcmHFo2lhIGRoY3Atb3B0aW9uIgorCisjOiBvcHRpb24uYzoxNDQ1Cittc2dpZCAiZGhjcC1vcHRpb24gdG9vIGxvbmciCittc2dzdHIgImRlY2xhcmFyZWEgZGhjcC1vcHRpb24gZXN0ZSBwcmVhIGx1bmfEgyIKKworIzogb3B0aW9uLmM6MTQ1MgorbXNnaWQgImlsbGVnYWwgZGhjcC1tYXRjaCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNTE0Cittc2dpZCAiaWxsZWdhbCByZXBlYXRlZCBmbGFnIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE1MjIKK21zZ2lkICJpbGxlZ2FsIHJlcGVhdGVkIGtleXdvcmQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTU5MyBvcHRpb24uYzo0NDM0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgYWNjZXNzIGRpcmVjdG9yeSAlczogJXMiCittc2dzdHIgIm51IHBvdCBjaXRpICVzOiAlcyIKKworIzogb3B0aW9uLmM6MTYzOSB0ZnRwLmM6NTM3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgYWNjZXNzICVzOiAlcyIKK21zZ3N0ciAibnUgcG90IGNpdGkgJXM6ICVzIgorCisjOiBvcHRpb24uYzoxNzI3Cittc2dpZCAic2V0dGluZyBsb2cgZmFjaWxpdHkgaXMgbm90IHBvc3NpYmxlIHVuZGVyIEFuZHJvaWQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTczNgorbXNnaWQgImJhZCBsb2cgZmFjaWxpdHkiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTc4OQorbXNnaWQgImJhZCBNWCBwcmVmZXJlbmNlIgorbXNnc3RyICJwcmVmZXJpbsWjxIMgTVggaW52YWxpZMSDIgorCisjOiBvcHRpb24uYzoxNzk0Cittc2dpZCAiYmFkIE1YIG5hbWUiCittc2dzdHIgIm51bWUgTVggaW52YWxpZCIKKworIzogb3B0aW9uLmM6MTgwOAorbXNnaWQgImJhZCBNWCB0YXJnZXQiCittc2dzdHIgIsWjaW50xIMgTVggaW52YWxpZMSDIgorCisjOiBvcHRpb24uYzoxODIwCittc2dpZCAiY2Fubm90IHJ1biBzY3JpcHRzIHVuZGVyIHVDbGludXgiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTgyMgorbXNnaWQgInJlY29tcGlsZSB3aXRoIEhBVkVfU0NSSVBUIGRlZmluZWQgdG8gZW5hYmxlIGxlYXNlLWNoYW5nZSBzY3JpcHRzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE4MjYKK21zZ2lkICJyZWNvbXBpbGUgd2l0aCBIQVZFX0xVQVNDUklQVCBkZWZpbmVkIHRvIGVuYWJsZSBMdWEgc2NyaXB0cyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyMDk1IG9wdGlvbi5jOjIxMDYgb3B0aW9uLmM6MjE0MyBvcHRpb24uYzoyMTk5IG9wdGlvbi5jOjI0ODIKKyMsIGZ1enp5Cittc2dpZCAiYmFkIHByZWZpeCIKK21zZ3N0ciAicG9ydCBpbnZhbGlkIgorCisjOiBvcHRpb24uYzoyNTA0Cittc2dpZCAicmVjb21waWxlIHdpdGggSEFWRV9JUFNFVCBkZWZpbmVkIHRvIGVuYWJsZSBpcHNldCBkaXJlY3RpdmVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI3MTMKKyMsIGZ1enp5Cittc2dpZCAiYmFkIHBvcnQgcmFuZ2UiCittc2dzdHIgInBvcnQgaW52YWxpZCIKKworIzogb3B0aW9uLmM6MjczOAorbXNnaWQgImJhZCBicmlkZ2UtaW50ZXJmYWNlIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI3OTgKK21zZ2lkICJvbmx5IG9uZSB0YWcgYWxsb3dlZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyODE4IG9wdGlvbi5jOjI4MzAgb3B0aW9uLmM6MjkzOSBvcHRpb24uYzoyOTQ0IG9wdGlvbi5jOjI5ODMKK21zZ2lkICJiYWQgZGhjcC1yYW5nZSIKK21zZ3N0ciAiZGhjcC1yYW5nZSBpbnZhbGlkIgorCisjOiBvcHRpb24uYzoyODQ1Cittc2dpZCAiaW5jb25zaXN0ZW50IERIQ1AgcmFuZ2UiCittc2dzdHIgImRvbWVuaXUgREhDUCBpbmNvbnNpc3RlbnQiCisKKyM6IG9wdGlvbi5jOjI5MDcKK21zZ2lkICJwcmVmaXggbGVuZ3RoIG11c3QgYmUgZXhhY3RseSA2NCBmb3IgUkEgc3VibmV0cyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyOTA5Cittc2dpZCAicHJlZml4IGxlbmd0aCBtdXN0IGJlIGV4YWN0bHkgNjQgZm9yIHN1Ym5ldCBjb25zdHJ1Y3RvcnMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjkxMworbXNnaWQgInByZWZpeCBsZW5ndGggbXVzdCBiZSBhdCBsZWFzdCA2NCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyOTE2CisjLCBmdXp6eQorbXNnaWQgImluY29uc2lzdGVudCBESENQdjYgcmFuZ2UiCittc2dzdHIgImRvbWVuaXUgREhDUCBpbmNvbnNpc3RlbnQiCisKKyM6IG9wdGlvbi5jOjI5MjcKK21zZ2lkICJwcmVmaXggbXVzdCBiZSB6ZXJvIHdpdGggXCJjb25zdHJ1Y3RvcjpcIiBhcmd1bWVudCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMDQwIG9wdGlvbi5jOjMwODgKKyMsIGZ1enp5Cittc2dpZCAiYmFkIGhleCBjb25zdGFudCIKK21zZ3N0ciAiZGhjcC1ob3N0IGludmFsaWQiCisKKyM6IG9wdGlvbi5jOjMwNjIKK21zZ2lkICJjYW5ub3QgbWF0Y2ggdGFncyBpbiAtLWRoY3AtaG9zdCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMTEwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJkdXBsaWNhdGUgZGhjcC1ob3N0IElQIGFkZHJlc3MgJXMiCittc2dzdHIgImFkcmVzxIMgSVAgZHVwbGljYXQgJXMgw65uIGRlY2xhcmHFo2lhIGRoY3AtY29uZmlnLiIKKworIzogb3B0aW9uLmM6MzE2OAorIywgZnV6enkKK21zZ2lkICJiYWQgREhDUCBob3N0IG5hbWUiCittc2dzdHIgIm51bWUgTVggaW52YWxpZCIKKworIzogb3B0aW9uLmM6MzI1MAorIywgZnV6enkKK21zZ2lkICJiYWQgdGFnLWlmIgorbXNnc3RyICLFo2ludMSDIE1YIGludmFsaWTEgyIKKworIzogb3B0aW9uLmM6MzYwNyBvcHRpb24uYzo0MDMwCittc2dpZCAiaW52YWxpZCBwb3J0IG51bWJlciIKK21zZ3N0ciAibnVtxINyIGRlIHBvcnQgaW52YWxpZCIKKworIzogb3B0aW9uLmM6MzY2OQorIywgZnV6enkKK21zZ2lkICJiYWQgZGhjcC1wcm94eSBhZGRyZXNzIgorbXNnc3RyICJjaXRlc2MgJXMgLSAlZCBhZHJlc2UiCisKKyM6IG9wdGlvbi5jOjM2OTUKKyMsIGZ1enp5Cittc2dpZCAiQmFkIGRoY3AtcmVsYXkiCittc2dzdHIgImRoY3AtcmFuZ2UgaW52YWxpZCIKKworIzogb3B0aW9uLmM6MzczNgorbXNnaWQgImJhZCBSQS1wYXJhbXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzc0NQorbXNnaWQgImJhZCBEVUlEIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM3ODcKKyMsIGZ1enp5Cittc2dpZCAiaW52YWxpZCBhbGlhcyByYW5nZSIKK21zZ3N0ciAicG9uZGVyZSBpbnZhbGlkxIMiCisKKyM6IG9wdGlvbi5jOjM4NDEgb3B0aW9uLmM6Mzg1MworbXNnaWQgImJhZCBDTkFNRSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozODU3Cittc2dpZCAiZHVwbGljYXRlIENOQU1FIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM4ODAKKyMsIGZ1enp5Cittc2dpZCAiYmFkIFBUUiByZWNvcmQiCittc2dzdHIgIsOubnJlZ2lzdHJhcmUgU1JWIGludmFsaWTEgyIKKworIzogb3B0aW9uLmM6MzkxMQorIywgZnV6enkKK21zZ2lkICJiYWQgTkFQVFIgcmVjb3JkIgorbXNnc3RyICLDrm5yZWdpc3RyYXJlIFNSViBpbnZhbGlkxIMiCisKKyM6IG9wdGlvbi5jOjM5NDUKKyMsIGZ1enp5Cittc2dpZCAiYmFkIFJSIHJlY29yZCIKK21zZ3N0ciAiw65ucmVnaXN0cmFyZSBTUlYgaW52YWxpZMSDIgorCisjOiBvcHRpb24uYzozOTc1Cittc2dpZCAiYmFkIFRYVCByZWNvcmQiCittc2dzdHIgIsOubnJlZ2lzdHJhcmUgVFhUIGludmFsaWTEgyIKKworIzogb3B0aW9uLmM6NDAxNgorbXNnaWQgImJhZCBTUlYgcmVjb3JkIgorbXNnc3RyICLDrm5yZWdpc3RyYXJlIFNSViBpbnZhbGlkxIMiCisKKyM6IG9wdGlvbi5jOjQwMjMKK21zZ2lkICJiYWQgU1JWIHRhcmdldCIKK21zZ3N0ciAixaNpbnTEgyBTUlYgaW52YWxpZMSDIgorCisjOiBvcHRpb24uYzo0MDM3Cittc2dpZCAiaW52YWxpZCBwcmlvcml0eSIKK21zZ3N0ciAicHJpb3JpdGF0ZSBpbnZhbGlkxIMiCisKKyM6IG9wdGlvbi5jOjQwNDAKK21zZ2lkICJpbnZhbGlkIHdlaWdodCIKK21zZ3N0ciAicG9uZGVyZSBpbnZhbGlkxIMiCisKKyM6IG9wdGlvbi5jOjQwNjQKKyMsIGZ1enp5Cittc2dpZCAiQmFkIGhvc3QtcmVjb3JkIgorbXNnc3RyICLDrm5yZWdpc3RyYXJlIFNSViBpbnZhbGlkxIMiCisKKyM6IG9wdGlvbi5jOjQwODgKKyMsIGZ1enp5Cittc2dpZCAiQmFkIG5hbWUgaW4gaG9zdC1yZWNvcmQiCittc2dzdHIgIm51bWUgaW52YWxpZCDDrm4gJXMiCisKKyM6IG9wdGlvbi5jOjQxNTMKKyMsIGZ1enp5Cittc2dpZCAiYmFkIHRydXN0IGFuY2hvciIKK21zZ3N0ciAicG9ydCBpbnZhbGlkIgorCisjOiBvcHRpb24uYzo0MTY3Cittc2dpZCAiYmFkIEhFWCBpbiB0cnVzdCBhbmNob3IiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDE3NworbXNnaWQgInVuc3VwcG9ydGVkIG9wdGlvbiAoY2hlY2sgdGhhdCBkbnNtYXNxIHdhcyBjb21waWxlZCB3aXRoIERIQ1AvVEZUUC9ETlNTRUMvREJ1cyBzdXBwb3J0KSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MjM3Cittc2dpZCAibWlzc2luZyBcIiIKK21zZ3N0ciAibGlwc2XFn3RlIFwiIgorCisjOiBvcHRpb24uYzo0Mjk0Cittc2dpZCAiYmFkIG9wdGlvbiIKK21zZ3N0ciAib3DFo2l1bmUgaW52YWxpZMSDIgorCisjOiBvcHRpb24uYzo0Mjk2Cittc2dpZCAiZXh0cmFuZW91cyBwYXJhbWV0ZXIiCittc2dzdHIgInBhcmFtZXRydSBuZXJlY3Vub3NjdXQiCisKKyM6IG9wdGlvbi5jOjQyOTgKK21zZ2lkICJtaXNzaW5nIHBhcmFtZXRlciIKK21zZ3N0ciAicGFyYW1ldHJ1IGxpcHNhIgorCisjOiBvcHRpb24uYzo0MzAwCisjLCBmdXp6eQorbXNnaWQgImlsbGVnYWwgb3B0aW9uIgorbXNnc3RyICJvcMWjaXVuZSBpbnZhbGlkxIMiCisKKyM6IG9wdGlvbi5jOjQzMDcKK21zZ2lkICJlcnJvciIKK21zZ3N0ciAiZXJvYXJlIgorCisjOiBvcHRpb24uYzo0MzA5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgYXQgbGluZSAlZCBvZiAlcyIKK21zZ3N0ciAiJXMgbGEgbGluaWEgJWQgZGluICUlcyIKKworIzogb3B0aW9uLmM6NDMyNCBvcHRpb24uYzo0NTcxIG9wdGlvbi5jOjQ2MDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInJlYWQgJXMiCittc2dzdHIgImNpdGVzYyAlcyIKKworIzogb3B0aW9uLmM6NDM4NyBvcHRpb24uYzo0NTEwIHRmdHAuYzo3MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJXM6ICVzIgorbXNnc3RyICJudSBwb3QgY2l0aSAlczogJXMiCisKKyM6IG9wdGlvbi5jOjQ2NzYKK21zZ2lkICJqdW5rIGZvdW5kIGluIGNvbW1hbmQgbGluZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NzExCisjLCBjLWZvcm1hdAorbXNnaWQgIkRuc21hc3EgdmVyc2lvbiAlcyAgJXNcbiIKK21zZ3N0ciAiZG5zbWFzcSB2ZXJzaXVuZWEgJXMgICVzXG4iCisKKyM6IG9wdGlvbi5jOjQ3MTIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb21waWxlIHRpbWUgb3B0aW9uczogJXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorIk9wxaNpdW5pIGN1IGNhcmUgYSBmb3N0IGNvbXBpbGF0ICVzXG4iCisiXG4iCisKKyM6IG9wdGlvbi5jOjQ3MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuXG4iCittc2dzdHIgIkFjZXN0IHByb2dyYW0gdmluZSBGxIJSxIIgTklDSSBPIEdBUkFOxaJJRS5cbiIKKworIzogb3B0aW9uLmM6NDcxNAorIywgYy1mb3JtYXQKK21zZ2lkICJEbnNtYXNxIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0XG4iCittc2dzdHIgIkRuc21hc3EgZXN0ZSB1biBwcm9ncmFtIGdyYXR1aXQsIHN1bnRlxaNpIGludml0YcWjaSBzxIMtbCByZWRpc3RyaWJ1acWjaVxuIgorCisjOiBvcHRpb24uYzo0NzE1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIgb3IgMy5cbiIKK21zZ3N0ciAiw65uIHRlcm1lbmlpIExpY2VuxaNlaSBwdWJsaWNlIGdlbmVyYWxlIEdOVSwgdmVyc2l1bmVhIDIuXG4iCisKKyM6IG9wdGlvbi5jOjQ3MjYKK21zZ2lkICJ0cnkgLS1oZWxwIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ3MjgKK21zZ2lkICJ0cnkgLXciCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDczMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbW1hbmQgbGluZSBvcHRpb25zOiAlcyIKK21zZ3N0ciAib3DFo2l1bmkgw65uIGxpbmllIGRlIGNvbWFuZMSDIGludmFsaWRlOiAlcy4iCisKKyM6IG9wdGlvbi5jOjQ3OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ05BTUUgbG9vcCBpbnZvbHZpbmcgJXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDgzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZ2V0IGhvc3QtbmFtZTogJXMiCittc2dzdHIgIm51IHBvdCBjaXRpIG51bWVsZSBtYcWfaW5paTogJXMiCisKKyM6IG9wdGlvbi5jOjQ4NjIKK21zZ2lkICJvbmx5IG9uZSByZXNvbHYuY29uZiBmaWxlIGFsbG93ZWQgaW4gbm8tcG9sbCBtb2RlLiIKK21zZ3N0ciAic2UgcGVybWl0ZSB1biBzaW5ndXIgZmnFn2llciByZXNvbHYuY29uZiDDrm4gbW9kdWwgbm8tcG9sbCIKKworIzogb3B0aW9uLmM6NDg3MgorbXNnaWQgIm11c3QgaGF2ZSBleGFjdGx5IG9uZSByZXNvbHYuY29uZiB0byByZWFkIGRvbWFpbiBmcm9tLiIKK21zZ3N0ciAiYW0gbmV2b2llIGRlIHVuIHNpbmd1ciByZXNvbHYuY29uZiBkaW4gY2FyZSBzxIMgY2l0ZXNjIG51bWVsZSBkb21lbml1bHVpLiIKKworIzogb3B0aW9uLmM6NDg3NSBuZXR3b3JrLmM6MTYxMiBkaGNwLmM6ODE2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCAlczogJXMiCittc2dzdHIgIm51IHBvdCBjaXRpICVzOiAlcyIKKworIzogb3B0aW9uLmM6NDg5MgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzZWFyY2ggZGlyZWN0aXZlIGZvdW5kIGluICVzIgorbXNnc3RyICJudSBzLWEgZ8SDc2l0IG5pY2kgdW4gY3JpdGVyaXUgZGUgY8SDdXRhcmUgw65uICVzIgorCisjOiBvcHRpb24uYzo0OTEzCittc2dpZCAidGhlcmUgbXVzdCBiZSBhIGRlZmF1bHQgZG9tYWluIHdoZW4gLS1kaGNwLWZxZG4gaXMgc2V0IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ5MjIKK21zZ2lkICJzeW50YXggY2hlY2sgT0siCittc2dzdHIgIiIKKworIzogZm9yd2FyZC5jOjEwMgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNlbmQgcGFja2V0OiAlcyIKK21zZ3N0ciAiYXNjdWx0YXJlYSBwZSBzb2NrZXQgYSBlxZ91YXQ6ICVzIgorCisjOiBmb3J3YXJkLmM6NTk3Cittc2dpZCAiZGlzY2FyZGluZyBETlMgcmVwbHk6IHN1Ym5ldCBvcHRpb24gbWlzbWF0Y2giCittc2dzdHIgIiIKKworIzogZm9yd2FyZC5jOjY1MQorIywgYy1mb3JtYXQKK21zZ2lkICJuYW1lc2VydmVyICVzIHJlZnVzZWQgdG8gZG8gYSByZWN1cnNpdmUgcXVlcnkiCittc2dzdHIgInNlcnZlcnVsIEROUyAlcyByZWZ1esSDIGludGVyb2fEg3JpbGUgcmVjdXJzaXZlIgorCisjOiBmb3J3YXJkLmM6NjgzCisjLCBjLWZvcm1hdAorbXNnaWQgInBvc3NpYmxlIEROUy1yZWJpbmQgYXR0YWNrIGRldGVjdGVkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBmb3J3YXJkLmM6MTI0NCBmb3J3YXJkLmM6MTY4MQorbXNnaWQgIklnbm9yaW5nIHF1ZXJ5IGZyb20gbm9uLWxvY2FsIG5ldHdvcmsiCittc2dzdHIgIiIKKworIzogZm9yd2FyZC5jOjIxNjYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgRE5TIHF1ZXJpZXMgcmVhY2hlZCAobWF4OiAlZCkiCittc2dzdHIgIlNwZWNpZmljxIMgbnVtxINydWwgbWF4aW0gZGUgw65tcHJ1bXV0dXJpIERIQ1AgKGltcGxpY2l0ICVzKS4iCisKKyM6IG5ldHdvcmsuYzo3MjAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgbGlzdGVuaW5nIHNvY2tldCBmb3IgJXM6ICVzIgorbXNnc3RyICJjcmVlYXJlYSBzb2NrZXQtdWx1aSBkZSBhc2N1bHRhcmUgYSBlxZ91YXQ6ICVzIgorCisjOiBuZXR3b3JrLmM6MTAzMQorIywgYy1mb3JtYXQKK21zZ2lkICJMT1VEIFdBUk5JTkc6IGxpc3RlbmluZyBvbiAlcyBtYXkgYWNjZXB0IHJlcXVlc3RzIHZpYSBpbnRlcmZhY2VzIG90aGVyIHRoYW4gJXMiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjEwMzgKK21zZ2lkICJMT1VEIFdBUk5JTkc6IHVzZSAtLWJpbmQtZHluYW1pYyByYXRoZXIgdGhhbiAtLWJpbmQtaW50ZXJmYWNlcyB0byBhdm9pZCBETlMgYW1wbGlmaWNhdGlvbiBhdHRhY2tzIHZpYSB0aGVzZSBpbnRlcmZhY2UocykiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjEwNDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IHVzaW5nIGludGVyZmFjZSAlcyBpbnN0ZWFkIgorbXNnc3RyICJhdGVuxaNpZTogaW50ZXJmYcWjYSAlcyBudSBleGlzdMSDIG1vbWVudGFuIgorCisjOiBuZXR3b3JrLmM6MTA1NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogbm8gYWRkcmVzc2VzIGZvdW5kIGZvciBpbnRlcmZhY2UgJXMiCittc2dzdHIgImZvbG9zaW0gYWRyZXNlbGUgbG9jYWxlIGRvYXIgcGVudHJ1ICVTICVzIgorCisjOiBuZXR3b3JrLmM6MTExNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW50ZXJmYWNlICVzIGZhaWxlZCB0byBqb2luIERIQ1B2NiBtdWx0aWNhc3QgZ3JvdXA6ICVzIgorbXNnc3RyICJhY3RpdmFyZWEgc29ja2V0LXVsdWkgc2VydmVyLXVsdWkgREhDUCBhIGXFn3VhdDogJXMiCisKKyM6IG5ldHdvcmsuYzoxMTE5Cittc2dpZCAidHJ5IGluY3JlYXNpbmcgL3Byb2Mvc3lzL25ldC9jb3JlL29wdG1lbV9tYXgiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjEzMjIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBiaW5kIHNlcnZlciBzb2NrZXQgZm9yICVzOiAlcyIKK21zZ3N0ciAiYWN0aXZhcmVhIHNvY2tldC11bHVpIGRlIGFzY3VsdGFyZSBwZW50cnUgJXMgYSBlxZ91YXQ6ICVzIgorCisjOiBuZXR3b3JrLmM6MTUxNworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBuYW1lc2VydmVyICVzIC0gbG9jYWwgaW50ZXJmYWNlIgorbXNnc3RyICJpZ25vcsSDbSBzZXJ2ZXJ1bCBETlMgJXMgLSBpbnRlcmZhxaPEgyBsb2NhbMSDIgorCisjOiBuZXR3b3JrLmM6MTUyOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgbmFtZXNlcnZlciAlcyAtIGNhbm5vdCBtYWtlL2JpbmQgc29ja2V0OiAlcyIKK21zZ3N0ciAiaWdub3LEg20gc2VydmVydWwgRE5TICVzIC0gbnUgcG90IGNyZWVhL2FjdGl2YSBzb2NrZXQtdWw6ICVzIgorCisjOiBuZXR3b3JrLmM6MTU0OAorbXNnaWQgIihubyBETlNTRUMpIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxNTUxCittc2dpZCAidW5xdWFsaWZpZWQiCittc2dzdHIgImludmFsaWQiCisKKyM6IG5ldHdvcmsuYzoxNTUxCittc2dpZCAibmFtZXMiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjE1NTMKK21zZ2lkICJkZWZhdWx0IgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxNTU1Cittc2dpZCAiZG9tYWluIgorbXNnc3RyICJkb21lbml1IgorCisjOiBuZXR3b3JrLmM6MTU2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyBsb2NhbCBhZGRyZXNzZXMgb25seSBmb3IgJXMgJXMiCittc2dzdHIgImZvbG9zaW0gYWRyZXNlbGUgbG9jYWxlIGRvYXIgcGVudHJ1ICVTICVzIgorCisjOiBuZXR3b3JrLmM6MTU2NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgc3RhbmRhcmQgbmFtZXNlcnZlcnMgZm9yICVzICVzIgorbXNnc3RyICJmb2xvc2ltIHNlcnZlcnVsIEROUyAlcyMlZCBwZW50cnUgJXMgJXMiCisKKyM6IG5ldHdvcmsuYzoxNTY2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyBuYW1lc2VydmVyICVzIyVkIGZvciAlcyAlcyAlcyIKK21zZ3N0ciAiZm9sb3NpbSBzZXJ2ZXJ1bCBETlMgJXMjJWQgcGVudHJ1ICVzICVzIgorCisjOiBuZXR3b3JrLmM6MTU3MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiTk9UIHVzaW5nIG5hbWVzZXJ2ZXIgJXMjJWQgLSBxdWVyeSBsb29wIGRldGVjdGVkIgorbXNnc3RyICJmb2xvc2ltIHNlcnZlcnVsIEROUyAlcyMlZCBwZW50cnUgJXMgJXMiCisKKyM6IG5ldHdvcmsuYzoxNTczCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyBuYW1lc2VydmVyICVzIyVkKHZpYSAlcykiCittc2dzdHIgImZvbG9zaW0gc2VydmVydWwgRE5TICVzIyVkIgorCisjOiBuZXR3b3JrLmM6MTU3NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyBuYW1lc2VydmVyICVzIyVkIgorbXNnc3RyICJmb2xvc2ltIHNlcnZlcnVsIEROUyAlcyMlZCIKKworIzogbmV0d29yay5jOjE1ODAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInVzaW5nICVkIG1vcmUgbG9jYWwgYWRkcmVzc2VzIgorbXNnc3RyICJmb2xvc2ltIHNlcnZlcnVsIEROUyAlcyMlZCIKKworIzogbmV0d29yay5jOjE1ODIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInVzaW5nICVkIG1vcmUgbmFtZXNlcnZlcnMiCittc2dzdHIgImZvbG9zaW0gc2VydmVydWwgRE5TICVzIyVkIgorCisjOiBkbnNtYXNxLmM6MTY2Cittc2dpZCAiZGhjcC1ob3N0c2RpciwgZGhjcC1vcHRzZGlyIGFuZCBob3N0c2RpciBhcmUgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxODEKK21zZ2lkICJubyByb290IHRydXN0IGFuY2hvciBwcm92aWRlZCBmb3IgRE5TU0VDIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxODQKK21zZ2lkICJjYW5ub3QgcmVkdWNlIGNhY2hlIHNpemUgZnJvbSBkZWZhdWx0IHdoZW4gRE5TU0VDIGVuYWJsZWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjE4NgorIywgZnV6enkKK21zZ2lkICJETlNTRUMgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfRE5TU0VDIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAiREJ1cyBudSBlc3RlIGRpc3BvbmliaWw6IHB1bmXFo2kgSEFWRV9EQlVTIGluIHNyYy9jb25maWcuaCIKKworIzogZG5zbWFzcS5jOjE5MgorIywgZnV6enkKK21zZ2lkICJURlRQIHNlcnZlciBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9URlRQIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAiREJ1cyBudSBlc3RlIGRpc3BvbmliaWw6IHB1bmXFo2kgSEFWRV9EQlVTIGluIHNyYy9jb25maWcuaCIKKworIzogZG5zbWFzcS5jOjE5NworbXNnaWQgImNhbm5vdCB1c2UgLS1jb25udHJhY2sgQU5EIC0tcXVlcnktcG9ydCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MjAwCisjLCBmdXp6eQorbXNnaWQgImNvbm50cmFjayBzdXBwb3J0IG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0NPTk5UUkFDSyBpbiBzcmMvY29uZmlnLmgiCittc2dzdHIgIkRCdXMgbnUgZXN0ZSBkaXNwb25pYmlsOiBwdW5lxaNpIEhBVkVfREJVUyBpbiBzcmMvY29uZmlnLmgiCisKKyM6IGRuc21hc3EuYzoyMDUKK21zZ2lkICJhc3luY2hyb25vdXMgbG9nZ2luZyBpcyBub3QgYXZhaWxhYmxlIHVuZGVyIFNvbGFyaXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjIxMAorbXNnaWQgImFzeW5jaHJvbm91cyBsb2dnaW5nIGlzIG5vdCBhdmFpbGFibGUgdW5kZXIgQW5kcm9pZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MjE1CisjLCBmdXp6eQorbXNnaWQgImF1dGhvcml0YXRpdmUgRE5TIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0FVVEggaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICJEQnVzIG51IGVzdGUgZGlzcG9uaWJpbDogcHVuZcWjaSBIQVZFX0RCVVMgaW4gc3JjL2NvbmZpZy5oIgorCisjOiBkbnNtYXNxLmM6MjIwCisjLCBmdXp6eQorbXNnaWQgImxvb3AgZGV0ZWN0aW9uIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0xPT1AgaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICJEQnVzIG51IGVzdGUgZGlzcG9uaWJpbDogcHVuZcWjaSBIQVZFX0RCVVMgaW4gc3JjL2NvbmZpZy5oIgorCisjOiBkbnNtYXNxLmM6MjI3Cittc2dpZCAibWF4X3BvcnQgY2Fubm90IGJlIHNtYWxsZXIgdGhhbiBtaW5fcG9ydCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MjM0Cittc2dpZCAiem9uZSBzZXJpYWwgbXVzdCBiZSBjb25maWd1cmVkIGluIC0tYXV0aC1zb2EiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjI1MgorbXNnaWQgImRoY3AtcmFuZ2UgY29uc3RydWN0b3Igbm90IGF2YWlsYWJsZSBvbiB0aGlzIHBsYXRmb3JtIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoyOTgKK21zZ2lkICJjYW5ub3Qgc2V0IC0tYmluZC1pbnRlcmZhY2VzIGFuZCAtLWJpbmQtZHluYW1pYyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MzAxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmaW5kIGxpc3Qgb2YgaW50ZXJmYWNlczogJXMiCittc2dzdHIgImVudW1lcmFyZWEgaW50ZXJmZcWjZWxvciBhIGXFn3VhdDogJXMiCisKKyM6IGRuc21hc3EuYzozMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBpbnRlcmZhY2UgJXMiCittc2dzdHIgImludGVyZmHFo8SDIG5lY3Vub3NjdXTEgyAlcyIKKworIzogZG5zbWFzcS5jOjM3NCBkbnNtYXNxLmM6MTAzNworIywgYy1mb3JtYXQKK21zZ2lkICJEQnVzIGVycm9yOiAlcyIKK21zZ3N0ciAiZXJvYXJlIERCdXM6ICVzIgorCisjOiBkbnNtYXNxLmM6Mzc3Cittc2dpZCAiREJ1cyBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9EQlVTIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAiREJ1cyBudSBlc3RlIGRpc3BvbmliaWw6IHB1bmXFo2kgSEFWRV9EQlVTIGluIHNyYy9jb25maWcuaCIKKworIzogZG5zbWFzcS5jOjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHVzZXIgb3IgZ3JvdXA6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo0NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZGlyIHRvIGZpbGVzeXN0ZW0gcm9vdDogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjcxNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAic3RhcnRlZCwgdmVyc2lvbiAlcyBETlMgZGlzYWJsZWQiCittc2dzdHIgImFtIHBvcm5pdCwgdmVyc2l1bmVhICVzIG1lbW9yaWUgdGVtcG9yYXLEgyBkZXphY3RpdmF0xIMiCisKKyM6IGRuc21hc3EuYzo3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RhcnRlZCwgdmVyc2lvbiAlcyBjYWNoZXNpemUgJWQiCittc2dzdHIgImFtIHBvbml0LCB2ZXJzaXVuZWEgJXMgbWVtb3JpZSB0ZW1wb3JhcsSDICVkIgorCisjOiBkbnNtYXNxLmM6NzIyCisjLCBjLWZvcm1hdAorbXNnaWQgInN0YXJ0ZWQsIHZlcnNpb24gJXMgY2FjaGUgZGlzYWJsZWQiCittc2dzdHIgImFtIHBvcm5pdCwgdmVyc2l1bmVhICVzIG1lbW9yaWUgdGVtcG9yYXLEgyBkZXphY3RpdmF0xIMiCisKKyM6IGRuc21hc3EuYzo3MjUKK21zZ2lkICJETlMgc2VydmljZSBsaW1pdGVkIHRvIGxvY2FsIHN1Ym5ldHMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjcyOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb21waWxlIHRpbWUgb3B0aW9uczogJXMiCittc2dzdHIgImNvbXBpbGF0IGN1IG9wxaNpdW5pbGU6ICVzIgorCisjOiBkbnNtYXNxLmM6NzM0Cittc2dpZCAiREJ1cyBzdXBwb3J0IGVuYWJsZWQ6IGNvbm5lY3RlZCB0byBzeXN0ZW0gYnVzIgorbXNnc3RyICJzdXBvcnR1bCBEQnVzIGFjdGl2OiBzdW50IGNvbmVjdGF0IGxhIG1hZ2lzdHJhbGEgc2lzdGVtIgorCisjOiBkbnNtYXNxLmM6NzM2Cittc2dpZCAiREJ1cyBzdXBwb3J0IGVuYWJsZWQ6IGJ1cyBjb25uZWN0aW9uIHBlbmRpbmciCittc2dzdHIgInN1cG9ydHVsIERCdXMgYWN0aXY6IGHFn3RlcHQgY29uZXhpdW5lYSBsYSBtYWdpc3RyYWzEgyIKKworIzogZG5zbWFzcS5jOjc1NAorbXNnaWQgIkROU1NFQyB2YWxpZGF0aW9uIGVuYWJsZWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjc1OAorbXNnaWQgIkROU1NFQyBzaWduYXR1cmUgdGltZXN0YW1wcyBub3QgY2hlY2tlZCB1bnRpbCBmaXJzdCBjYWNoZSByZWxvYWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjc2MQorbXNnaWQgIkROU1NFQyBzaWduYXR1cmUgdGltZXN0YW1wcyBub3QgY2hlY2tlZCB1bnRpbCBzeXN0ZW0gdGltZSB2YWxpZCIKK21zZ3N0ciAiIgorCisjIGZvciBjb21wYXRpYmlsaXR5IHB1cnBvc2VzIHRoZSBsZXR0ZXJzIMOiLCDEgywgxZ8sIMWjIGFuZCDDriBjYW4gYmUgd3JpdHRlbiBhcyB0aGVpciBsb29rLWFsaWtlIGNvcnJlc3BvbmRlbnQuCisjOiBkbnNtYXNxLmM6NzY2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBmYWlsZWQgdG8gY2hhbmdlIG93bmVyIG9mICVzOiAlcyIKK21zZ3N0ciAiw65uY8SDcmNhcmVhIG51bWVsb3IgZGluICVzOiAlcyBhIGXFn3VhdCIKKworIzogZG5zbWFzcS5jOjc3MAorbXNnaWQgInNldHRpbmcgLS1iaW5kLWludGVyZmFjZXMgb3B0aW9uIGJlY2F1c2Ugb2YgT1MgbGltaXRhdGlvbnMiCittc2dzdHIgInNwZWNpZmljIG9wxaNpdW5lYSAtLWJpbmQtaW50ZXJmYWNlcyBkaW4gY2F1emEgbGltaXTEg3JpbG9yIFNPIgorCisjOiBkbnNtYXNxLmM6NzgyCisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGludGVyZmFjZSAlcyBkb2VzIG5vdCBjdXJyZW50bHkgZXhpc3QiCittc2dzdHIgImF0ZW7Fo2llOiBpbnRlcmZhxaNhICVzIG51IGV4aXN0xIMgbW9tZW50YW4iCisKKyM6IGRuc21hc3EuYzo3ODcKK21zZ2lkICJ3YXJuaW5nOiBpZ25vcmluZyByZXNvbHYtZmlsZSBmbGFnIGJlY2F1c2Ugbm8tcmVzb2x2IGlzIHNldCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzkwCisjLCBmdXp6eQorbXNnaWQgIndhcm5pbmc6IG5vIHVwc3RyZWFtIHNlcnZlcnMgY29uZmlndXJlZCIKK21zZ3N0ciAiY29uZmlndXLEg20gc2VydmVyZWxlIHN1cGVyaW9hcmUgcHJpbiBEYnVzIgorCisjOiBkbnNtYXNxLmM6Nzk0CisjLCBjLWZvcm1hdAorbXNnaWQgImFzeW5jaHJvbm91cyBsb2dnaW5nIGVuYWJsZWQsIHF1ZXVlIGxpbWl0IGlzICVkIG1lc3NhZ2VzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo4MTUKK21zZ2lkICJJUHY2IHJvdXRlciBhZHZlcnRpc2VtZW50IGVuYWJsZWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjgyMAorIywgYy1mb3JtYXQKK21zZ2lkICJESENQLCBzb2NrZXRzIGJvdW5kIGV4Y2x1c2l2ZWx5IHRvIGludGVyZmFjZSAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6ODM0Cittc2dpZCAicm9vdCBpcyAiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjgzNAorIywgZnV6enkKK21zZ2lkICJlbmFibGVkIgorbXNnc3RyICJkZXphY3RpdmF0IgorCisjOiBkbnNtYXNxLmM6ODM2Cittc2dpZCAic2VjdXJlIG1vZGUiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjgzOQorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiAlcyBpbmFjY2Vzc2libGUiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjg0MworIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBURlRQIGRpcmVjdG9yeSAlcyBpbmFjY2Vzc2libGUiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjg2OQorIywgYy1mb3JtYXQKK21zZ2lkICJyZXN0cmljdGluZyBtYXhpbXVtIHNpbXVsdGFuZW91cyBURlRQIHRyYW5zZmVycyB0byAlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTAzOQorbXNnaWQgImNvbm5lY3RlZCB0byBzeXN0ZW0gREJ1cyIKK21zZ3N0ciAibWFnaXN0cmFsYSBzaXN0ZW0gRGJ1cyBjb25lY3RhdMSDIgorCisjOiBkbnNtYXNxLmM6MTE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZm9yayBpbnRvIGJhY2tncm91bmQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxMTkyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGhlbHBlcjogJXMiCittc2dzdHIgIm51IHBvdCBjaXRpICVzOiAlcyIKKworIzogZG5zbWFzcS5jOjExOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAic2V0dGluZyBjYXBhYmlsaXRpZXMgZmFpbGVkOiAlcyIKK21zZ3N0ciAiIgorCisjIGZvciBjb21wYXRpYmlsaXR5IHB1cnBvc2VzIHRoZSBsZXR0ZXJzIMOiLCDEgywgxZ8sIMWjIGFuZCDDriBjYW4gYmUgd3JpdHRlbiBhcyB0aGVpciBsb29rLWFsaWtlIGNvcnJlc3BvbmRlbnQuCisjOiBkbnNtYXNxLmM6MTE5OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNoYW5nZSB1c2VyLWlkIHRvICVzOiAlcyIKK21zZ3N0ciAiw65uY8SDcmNhcmVhIG51bWVsb3IgZGluICVzOiAlcyBhIGXFn3VhdCIKKworIyBmb3IgY29tcGF0aWJpbGl0eSBwdXJwb3NlcyB0aGUgbGV0dGVycyDDoiwgxIMsIMWfLCDFoyBhbmQgw64gY2FuIGJlIHdyaXR0ZW4gYXMgdGhlaXIgbG9vay1hbGlrZSBjb3JyZXNwb25kZW50LgorIzogZG5zbWFzcS5jOjEyMDEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjaGFuZ2UgZ3JvdXAtaWQgdG8gJXM6ICVzIgorbXNnc3RyICLDrm5jxINyY2FyZWEgbnVtZWxvciBkaW4gJXM6ICVzIGEgZcWfdWF0IgorCisjOiBkbnNtYXNxLmM6MTIwNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gcGlkZmlsZSAlczogJXMiCittc2dzdHIgIm51IHBvdCBjaXRpICVzOiAlcyIKKworIzogZG5zbWFzcS5jOjEyMDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuIGxvZyAlczogJXMiCittc2dzdHIgIm51IHBvdCBkZXNjaGlkZSAlczolcyIKKworIzogZG5zbWFzcS5jOjEyMTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2FkIEx1YSBzY3JpcHQ6ICVzIgorbXNnc3RyICJudSBwb3Qgw65uY8SDcmNhICVzOiAlcyIKKworIzogZG5zbWFzcS5jOjEyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVEZUUCBkaXJlY3RvcnkgJXMgaW5hY2Nlc3NpYmxlOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTIxNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSB0aW1lc3RhbXAgZmlsZSAlczogJXMiCittc2dzdHIgIm51IHBvdCBjcmVlYSBzYXUgZGVzY2hpZGUgZmnFn2llcnVsIGN1IMOubXBydW11dHVyaTogJXMiCisKKyM6IGRuc21hc3EuYzoxMjM5Cittc2dpZCAibm93IGNoZWNraW5nIEROU1NFQyBzaWduYXR1cmUgdGltZXN0YW1wcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTMwNworIywgYy1mb3JtYXQKK21zZ2lkICJzY3JpcHQgcHJvY2VzcyBraWxsZWQgYnkgc2lnbmFsICVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxMzExCisjLCBjLWZvcm1hdAorbXNnaWQgInNjcmlwdCBwcm9jZXNzIGV4aXRlZCB3aXRoIHN0YXR1cyAlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTMxNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGV4ZWN1dGUgJXM6ICVzIgorbXNnc3RyICJhY2Nlc2FyZWEgc2VydmVydWx1aSAlcyBhIGXFn3VhdDogJXMiCisKKyM6IGRuc21hc3EuYzoxMzc5IGRuc3NlYy5jOjQ3OSBkbnNzZWMuYzo1MjUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB1cGRhdGUgbXRpbWUgb24gJXM6ICVzIgorbXNnc3RyICJudSBwb3QgY2l0aSAlczogJXMiCisKKyM6IGRuc21hc3EuYzoxMzg2Cittc2dpZCAiZXhpdGluZyBvbiByZWNlaXB0IG9mIFNJR1RFUk0iCittc2dzdHIgImFtIHByaW1pdCBTSUdURVJNLCBhbSB0ZXJtaW5hdCIKKworIzogZG5zbWFzcS5jOjE0MTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBhY2Nlc3MgJXM6ICVzIgorbXNnc3RyICJhY2Nlc2FyZWEgc2VydmVydWx1aSAlcyBhIGXFn3VhdDogJXMiCisKKyM6IGRuc21hc3EuYzoxNDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWRpbmcgJXMiCittc2dzdHIgImNpdGVzYyAlcyIKKworIzogZG5zbWFzcS5jOjE0NTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm5vIHNlcnZlcnMgZm91bmQgaW4gJXMsIHdpbGwgcmV0cnkiCittc2dzdHIgIm51IHMtYSBnxINzaXQgbmljaSB1biBjcml0ZXJpdSBkZSBjxIN1dGFyZSDDrm4gJXMiCisKKyM6IGRoY3AuYzo1MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIERIQ1Agc29ja2V0OiAlcyIKK21zZ3N0ciAibnUgcG90IGNyZWVhIHNvY2tldCBESENQOiAlcyIKKworIzogZGhjcC5jOjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZXQgb3B0aW9ucyBvbiBESENQIHNvY2tldDogJXMiCittc2dzdHIgImNvbmZpZ3VyYXJlYSBvcMWjaXVuaWxvciBzb2NrZXR1bHVpIERIQ1AgYSBlxZ91YXQ6ICVzIgorCisjOiBkaGNwLmM6ODkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZXQgU09fUkVVU0V7QUREUnxQT1JUfSBvbiBESENQIHNvY2tldDogJXMiCittc2dzdHIgImNvbmZpZ3VyYXJlYSBTT19SRVVTRUFERFIgcGUgc29ja2V0LXVsIERIQ1AgYSBlxZ91YXQ6ICVzIgorCisjOiBkaGNwLmM6MTAxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBiaW5kIERIQ1Agc2VydmVyIHNvY2tldDogJXMiCittc2dzdHIgImFjdGl2YXJlYSBzb2NrZXQtdWx1aSBzZXJ2ZXItdWx1aSBESENQIGEgZcWfdWF0OiAlcyIKKworIzogZGhjcC5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIElDTVAgcmF3IHNvY2tldDogJXMuIgorbXNnc3RyICJudSBwb3QgY3JlZWEgc29ja2V0IElDTVAgcmF3OiAlcy4iCisKKyM6IGRoY3AuYzoyNTIgZGhjcDYuYzoxNzMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gaW50ZXJmYWNlICVzIGluIGJyaWRnZS1pbnRlcmZhY2UiCittc2dzdHIgImludGVyZmHFo8SDIG5lY3Vub3NjdXTEgyAlcyIKKworIzogZGhjcC5jOjI5MworIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHBhY2tldCByZWNlaXZlZCBvbiAlcyB3aGljaCBoYXMgbm8gYWRkcmVzcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6NDI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkFSUC1jYWNoZSBpbmplY3Rpb24gZmFpbGVkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6NDcwCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHNlbmRpbmcgREhDUCBwYWNrZXQgdG8gJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzo1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCByYW5nZSAlcyAtLSAlcyBpcyBub3QgY29uc2lzdGVudCB3aXRoIG5ldG1hc2sgJXMiCittc2dzdHIgImRvbWVuaXUgREhDUCAlcyAtLSAlcyBudSBlc3RlIGNvbnNpc3RlbnQgY3UgbWFzY2EgZGUgcmXFo2VhICVzIgorCisjOiBkaGNwLmM6ODU0CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBsaW5lIGF0ICVzIGxpbmUgJWQiCittc2dzdHIgImxpbmllIGludmFsaWTEgyDDrm4gJXMgcsOibmR1bCAlZCIKKworIzogZGhjcC5jOjg5NworIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyAlcyBsaW5lICVkLCBkdXBsaWNhdGUgbmFtZSBvciBJUCBhZGRyZXNzIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzoxMDQxIHJmYzMzMTUuYzoyMTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcmVsYXkgJXMgLT4gJXMiCittc2dzdHIgIiIKKworIzogbGVhc2UuYzo5OAorbXNnaWQgInRvbyBtYW55IHN0b3JlZCBsZWFzZXMiCittc2dzdHIgInByZWEgbXVsdGUgw65tcHJ1bXV0dXJpIHN0b2NhdGUiCisKKyM6IGxlYXNlLmM6MTY2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiBvciBjcmVhdGUgbGVhc2UgZmlsZSAlczogJXMiCittc2dzdHIgIm51IHBvdCBjcmVlYSBzYXUgZGVzY2hpZGUgZmnFn2llcnVsIGN1IMOubXBydW11dHVyaTogJXMiCisKKyM6IGxlYXNlLmM6MTc1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwYXJzZSBsZWFzZSBkYXRhYmFzZSwgaW52YWxpZCBsaW5lOiAlcyAlcyAlcyAlcyAuLi4iCittc2dzdHIgIiIKKworIzogbGVhc2UuYzoxODAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkIGxlYXNlIGZpbGUgJXM6ICVzIgorbXNnc3RyICJudSBwb3QgY2l0aSAlczogJXMiCisKKyM6IGxlYXNlLmM6MTk2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcnVuIGxlYXNlLWluaXQgc2NyaXB0ICVzOiAlcyIKK21zZ3N0ciAibnUgcG90IGNpdGkgJXM6ICVzIgorCisjOiBsZWFzZS5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJsZWFzZS1pbml0IHNjcmlwdCByZXR1cm5lZCBleGl0IGNvZGUgJXMiCittc2dzdHIgIiIKKworIzogbGVhc2UuYzozNzMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSAlczogJXMgKHJldHJ5IGluICV1cykiCittc2dzdHIgIm51IHBvdCBjaXRpICVzOiAlcyIKKworIzogbGVhc2UuYzo5MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSWdub3JpbmcgZG9tYWluICVzIGZvciBESENQIGhvc3QgbmFtZSAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGFkZHJlc3MgcmFuZ2UgYXZhaWxhYmxlIGZvciBESENQIHJlcXVlc3QgJXMgJXMiCittc2dzdHIgIm5pY2kgdW4gZG9tZW5pdSBkZSBhZHJlc2UgZGlzcG9uaWJpbCBwZW50cnUgY2VyZXJlYSBESENQICVzICVzIgorCisjOiByZmMyMTMxLmM6MzQ4Cittc2dpZCAid2l0aCBzdWJuZXQgc2VsZWN0b3IiCittc2dzdHIgImN1IHNlbGVjdG9ydWwgZGUgc3VicmXFo2VhIgorCisjOiByZmMyMTMxLmM6MzQ4Cittc2dpZCAidmlhIgorbXNnc3RyICJwcmluIgorCisjOiByZmMyMTMxLmM6MzYwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIldSBhdmFpbGFibGUgREhDUCBzdWJuZXQ6ICVzLyVzIgorbXNnc3RyICJuaWNpIHVuIGRvbWVuaXUgZGUgYWRyZXNlIGRpc3BvbmliaWwgcGVudHJ1IGNlcmVyZWEgREhDUCAlcyAlcyIKKworIzogcmZjMjEzMS5jOjM2MyByZmMzMzE1LmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGF2YWlsYWJsZSBESENQIHJhbmdlOiAlcyAtLSAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6NDc0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIldSB2ZW5kb3IgY2xhc3M6ICVzIgorbXNnc3RyICJlcm9hcmUgREJ1czogJXMiCisKKyM6IHJmYzIxMzEuYzo0NzYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiV1IHVzZXIgY2xhc3M6ICVzIgorbXNnc3RyICJlcm9hcmUgREJ1czogJXMiCisKKyM6IHJmYzIxMzEuYzo1MTAKK21zZ2lkICJkaXNhYmxlZCIKK21zZ3N0ciAiZGV6YWN0aXZhdCIKKworIzogcmZjMjEzMS5jOjU1MSByZmMyMTMxLmM6MTAwNiByZmMyMTMxLmM6MTQzMCByZmMzMzE1LmM6NjE2IHJmYzMzMTUuYzo4NjkKKyM6IHJmYzMzMTUuYzoxMTQ4Cittc2dpZCAiaWdub3JlZCIKK21zZ3N0ciAiaWdub3JhdCIKKworIzogcmZjMjEzMS5jOjU2NiByZmMyMTMxLmM6MTIzOSByZmMzMzE1LmM6OTE5Cittc2dpZCAiYWRkcmVzcyBpbiB1c2UiCittc2dzdHIgImFkcmVzYSBlc3RlIGZvbG9zaXTEgyIKKworIzogcmZjMjEzMS5jOjU4MCByZmMyMTMxLmM6MTA2MAorbXNnaWQgIm5vIGFkZHJlc3MgYXZhaWxhYmxlIgorbXNnc3RyICJuaWNpIG8gYWRyZXPEgyBkaXNwb25pYmlsxIMiCisKKyM6IHJmYzIxMzEuYzo1ODcgcmZjMjEzMS5jOjEyMDIKK21zZ2lkICJ3cm9uZyBuZXR3b3JrIgorbXNnc3RyICJyZcWjZWEgZ3JlxZ9pdMSDIgorCisjOiByZmMyMTMxLmM6NjAyCittc2dpZCAibm8gYWRkcmVzcyBjb25maWd1cmVkIgorbXNnc3RyICJhZHJlc8SDIGxpcHPEgyIKKworIzogcmZjMjEzMS5jOjYwOCByZmMyMTMxLmM6MTI1MgorbXNnaWQgIm5vIGxlYXNlcyBsZWZ0IgorbXNnc3RyICJudSBtYWkgYW0gZGUgdW5kZSBzxIMgw65tcHJ1bXV0IgorCisjOiByZmMyMTMxLmM6NzAzIHJmYzMzMTUuYzo0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgY2xpZW50IHByb3ZpZGVzIG5hbWU6ICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo4MDgKK21zZ2lkICJQWEUgQklTIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjk3NCByZmMzMzE1LmM6MTI0MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZGlzYWJsaW5nIERIQ1Agc3RhdGljIGFkZHJlc3MgJXMgZm9yICVzIgorbXNnc3RyICJkZXphY3RpdsSDbSBhZHJlc2VsZSBESENQIHN0YXRpY2UgJXMiCisKKyM6IHJmYzIxMzEuYzo5OTUKK21zZ2lkICJ1bmtub3duIGxlYXNlIgorbXNnc3RyICLDrm1wcnVtdXQgbmVjdW5vc2N1dCIKKworIzogcmZjMjEzMS5jOjEwMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHVzaW5nIGNvbmZpZ3VyZWQgYWRkcmVzcyAlcyBiZWNhdXNlIGl0IGlzIGxlYXNlZCB0byAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTAzOQorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgdXNpbmcgY29uZmlndXJlZCBhZGRyZXNzICVzIGJlY2F1c2UgaXQgaXMgaW4gdXNlIGJ5IHRoZSBzZXJ2ZXIgb3IgcmVsYXkiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjEwNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHVzaW5nIGNvbmZpZ3VyZWQgYWRkcmVzcyAlcyBiZWNhdXNlIGl0IHdhcyBwcmV2aW91c2x5IGRlY2xpbmVkIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxMDU4IHJmYzIxMzEuYzoxMjQ1Cittc2dpZCAibm8gdW5pcXVlLWlkIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxMTQwCittc2dpZCAid3Jvbmcgc2VydmVyLUlEIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxMTU5Cittc2dpZCAid3JvbmcgYWRkcmVzcyIKK21zZ3N0ciAiYWRyZXPEgyBncmXFn2l0xIMiCisKKyM6IHJmYzIxMzEuYzoxMTc3IHJmYzMzMTUuYzoxMDE1Cittc2dpZCAibGVhc2Ugbm90IGZvdW5kIgorbXNnc3RyICLDrm1wcnVtdXR1bCBudSBhIGZvc3QgZ8SDc2l0IgorCisjOiByZmMyMTMxLmM6MTIxMAorbXNnaWQgImFkZHJlc3Mgbm90IGF2YWlsYWJsZSIKK21zZ3N0ciAiYWRyZXPEgyBpbmRpc3BvbmliaWzEgyIKKworIzogcmZjMjEzMS5jOjEyMjEKK21zZ2lkICJzdGF0aWMgbGVhc2UgYXZhaWxhYmxlIgorbXNnc3RyICLDrm1wcnVtdXQgc3RhdGljIGVzdGUgZGlzcG9uaWJpbCIKKworIzogcmZjMjEzMS5jOjEyMjUKK21zZ2lkICJhZGRyZXNzIHJlc2VydmVkIgorbXNnc3RyICJhZHJlc8SDIHJlemVydmF0xIMiCisKKyM6IHJmYzIxMzEuYzoxMjMzCisjLCBjLWZvcm1hdAorbXNnaWQgImFiYW5kb25pbmcgbGVhc2UgdG8gJXMgb2YgJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjE3NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYm9vdGZpbGUgbmFtZTogJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjE3NjYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiV1IHNlcnZlciBuYW1lOiAlcyIKK21zZ3N0ciAiZXJvYXJlIERCdXM6ICVzIgorCisjOiByZmMyMTMxLmM6MTc3NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXUgbmV4dCBzZXJ2ZXI6ICVzIgorbXNnc3RyICJlcm9hcmUgREJ1czogJXMiCisKKyM6IHJmYzIxMzEuYzoxNzc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJyb2FkY2FzdCByZXNwb25zZSIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTg0MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHNlbmQgREhDUC9CT09UUCBvcHRpb24gJWQ6IG5vIHNwYWNlIGxlZnQgaW4gcGFja2V0IgorbXNnc3RyICJudSBwb3QgdHJpbWl0ZSBvcMWjaXVuZWEgREhDUCAlZDogbnUgbWFpIGVzdGUgbG9jIMOubiBwYWNoZXQiCisKKyM6IHJmYzIxMzEuYzoyMTMxCittc2dpZCAiUFhFIG1lbnUgdG9vIGxhcmdlIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoyMjcwIHJmYzMzMTUuYzoxNTE1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIldSByZXF1ZXN0ZWQgb3B0aW9uczogJXMiCittc2dzdHIgImNvbXBpbGF0IGN1IG9wxaNpdW5pbGU6ICVzIgorCisjOiByZmMyMTMxLmM6MjU4NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc2VuZCBSRkMzOTI1IG9wdGlvbjogdG9vIG1hbnkgb3B0aW9ucyBmb3IgZW50ZXJwcmlzZSBudW1iZXIgJWQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjI2NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgcmVwbHkgZGVsYXk6ICVkIgorbXNnc3RyICIiCisKKyM6IG5ldGxpbmsuYzo3NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBuZXRsaW5rIHNvY2tldDogJXMiCittc2dzdHIgIm51IHBvdCBzxIMgYWN0aXZleiBzb2NrZXQtdWwgbmV0bGluazogJXMiCisKKyM6IG5ldGxpbmsuYzozNTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm5ldGxpbmsgcmV0dXJucyBlcnJvcjogJXMiCittc2dzdHIgImVyb2FyZSBEQnVzOiAlcyIKKworIzogZGJ1cy5jOjE4NgorbXNnaWQgImF0dGVtcHQgdG8gc2V0IGFuIElQdjYgc2VydmVyIGFkZHJlc3MgdmlhIERCdXMgLSBubyBJUHY2IHN1cHBvcnQiCittc2dzdHIgImluY2VyYyBzxIMgY29uZmlndXJleiB1biBzZXJ2ZXIgSVB2NiBwcmluIERidXMgLSBudSBlc3RlIHN1cG9ydCBJUHY2IgorCisjOiBkYnVzLmM6NDM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkVuYWJsaW5nIC0tJXMgb3B0aW9uIGZyb20gRC1CdXMiCittc2dzdHIgIiIKKworIzogZGJ1cy5jOjQ0NAorIywgYy1mb3JtYXQKK21zZ2lkICJEaXNhYmxpbmcgLS0lcyBvcHRpb24gZnJvbSBELUJ1cyIKK21zZ3N0ciAiIgorCisjOiBkYnVzLmM6NjkwCittc2dpZCAic2V0dGluZyB1cHN0cmVhbSBzZXJ2ZXJzIGZyb20gREJ1cyIKK21zZ3N0ciAiY29uZmlndXLEg20gc2VydmVyZWxlIHN1cGVyaW9hcmUgcHJpbiBEYnVzIgorCisjOiBkYnVzLmM6NzM3Cittc2dpZCAiY291bGQgbm90IHJlZ2lzdGVyIGEgREJ1cyBtZXNzYWdlIGhhbmRsZXIiCittc2dzdHIgIm51IHBvdCBhY3RpdmEgbyBpbnRlcmZhxaPEgyBkZSBtZXNhamUgREJ1cyIKKworIzogYnBmLmM6MjY1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgREhDUCBCUEYgc29ja2V0OiAlcyIKK21zZ3N0ciAibnUgcG90IGNyZWVhIHNvY2tldCBESENQIEJQRjogJXMiCisKKyM6IGJwZi5jOjI5MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiREhDUCByZXF1ZXN0IGZvciB1bnN1cHBvcnRlZCBoYXJkd2FyZSB0eXBlICglZCkgcmVjZWl2ZWQgb24gJXMiCittc2dzdHIgImNlcmVyZSBESENQIHBlbnRydSBkaXNwb3ppdGl2IG5lc3Vwb3J0YXQgKCVkKSByZWNlcMWjaW9uYXTEgyBwcmluICVzIgorCisjOiBicGYuYzozNzgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgUEZfUk9VVEUgc29ja2V0OiAlcyIKK21zZ3N0ciAibnUgcG90IGNyZWVhIHNvY2tldCBESENQOiAlcyIKKworIzogYnBmLmM6Mzk5Cittc2dpZCAiVW5rbm93biBwcm90b2NvbCB2ZXJzaW9uIGZyb20gcm91dGUgc29ja2V0IgorbXNnc3RyICIiCisKKyM6IGhlbHBlci5jOjE1MworbXNnaWQgImxlYXNlKCkgZnVuY3Rpb24gbWlzc2luZyBpbiBMdWEgc2NyaXB0IgorbXNnc3RyICIiCisKKyM6IHRmdHAuYzozMTkKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IGZyZWUgcG9ydCBmb3IgVEZUUCIKK21zZ3N0ciAiIgorCisjOiB0ZnRwLmM6MzM1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIHJlcXVlc3QgZnJvbSAlcyIKK21zZ3N0ciAiIgorCisjOiB0ZnRwLmM6NDgzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmaWxlICVzIG5vdCBmb3VuZCIKK21zZ3N0ciAiw65tcHJ1bXV0dWwgbnUgYSBmb3N0IGfEg3NpdCIKKworIzogdGZ0cC5jOjU5MgorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciAlZCAlcyByZWNlaXZlZCBmcm9tICVzIgorbXNnc3RyICIiCisKKyM6IHRmdHAuYzo2MzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCBzZW5kaW5nICVzIHRvICVzIgorbXNnc3RyICJudSBwb3QgY2l0aSAlczogJXMiCisKKyM6IHRmdHAuYzo2MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VudCAlcyB0byAlcyIKK21zZ3N0ciAiIgorCisjOiBsb2cuYzoxOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAib3ZlcmZsb3c6ICVkIGxvZyBlbnRyaWVzIGxvc3QiCittc2dzdHIgIiIKKworIzogbG9nLmM6MjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImxvZyBmYWlsZWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGxvZy5jOjQ3MQorbXNnaWQgIkZBSUxFRCB0byBzdGFydCB1cCIKK21zZ3N0ciAicG9ybmlyZWEgQSBFxZ5VQVQiCisKKyM6IGNvbm50cmFjay5jOjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbm50cmFjayBjb25uZWN0aW9uIG1hcmsgcmV0cmlldmFsIGZhaWxlZDogJXMiCittc2dzdHIgIiIKKworIzogZGhjcDYuYzo1MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBESENQdjYgc29ja2V0OiAlcyIKK21zZ3N0ciAibnUgcG90IGNyZWVhIHNvY2tldCBESENQOiAlcyIKKworIzogZGhjcDYuYzo3MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNldCBTT19SRVVTRXtBRERSfFBPUlR9IG9uIERIQ1B2NiBzb2NrZXQ6ICVzIgorbXNnc3RyICJjb25maWd1cmFyZWEgU09fUkVVU0VBRERSIHBlIHNvY2tldC11bCBESENQIGEgZcWfdWF0OiAlcyIKKworIzogZGhjcDYuYzo4NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGJpbmQgREhDUHY2IHNlcnZlciBzb2NrZXQ6ICVzIgorbXNnc3RyICJhY3RpdmFyZWEgc29ja2V0LXVsdWkgc2VydmVyLXVsdWkgREhDUCBhIGXFn3VhdDogJXMiCisKKyM6IHJmYzMzMTUuYzoxNTcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm5vIGFkZHJlc3MgcmFuZ2UgYXZhaWxhYmxlIGZvciBESENQdjYgcmVxdWVzdCBmcm9tIHJlbGF5IGF0ICVzIgorbXNnc3RyICJuaWNpIHVuIGRvbWVuaXUgZGUgYWRyZXNlIGRpc3BvbmliaWwgcGVudHJ1IGNlcmVyZWEgREhDUCAlcyAlcyIKKworIzogcmZjMzMxNS5jOjE2NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibm8gYWRkcmVzcyByYW5nZSBhdmFpbGFibGUgZm9yIERIQ1B2NiByZXF1ZXN0IHZpYSAlcyIKK21zZ3N0ciAibmljaSB1biBkb21lbml1IGRlIGFkcmVzZSBkaXNwb25pYmlsIHBlbnRydSBjZXJlcmVhIERIQ1AgJXMgJXMiCisKKyM6IHJmYzMzMTUuYzozMDMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiV1IGF2YWlsYWJsZSBESENQdjYgc3VibmV0OiAlcy8lZCIKK21zZ3N0ciAibmljaSB1biBkb21lbml1IGRlIGFkcmVzZSBkaXNwb25pYmlsIHBlbnRydSBjZXJlcmVhIERIQ1AgJXMgJXMiCisKKyM6IHJmYzMzMTUuYzozODYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiV1IHZlbmRvciBjbGFzczogJXUiCittc2dzdHIgImVyb2FyZSBEQnVzOiAlcyIKKworIzogcmZjMzMxNS5jOjQzNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXUgY2xpZW50IE1BQyBhZGRyZXNzOiAlcyIKK21zZ3N0ciAibnUgZXhpc3RhIGludGVyZmHFo8SDIHBlbnRydSBhZHJlc2EgJXMiCisKKyM6IHJmYzMzMTUuYzo2NzMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gcHJlZml4LWNsYXNzICVkIgorbXNnc3RyICLDrm1wcnVtdXQgbmVjdW5vc2N1dCIKKworIzogcmZjMzMxNS5jOjgxNiByZmMzMzE1LmM6OTExCisjLCBmdXp6eQorbXNnaWQgImFkZHJlc3MgdW5hdmFpbGFibGUiCittc2dzdHIgImFkcmVzxIMgaW5kaXNwb25pYmlsxIMiCisKKyM6IHJmYzMzMTUuYzo4MjggcmZjMzMxNS5jOjk1OSByZmMzMzE1LmM6MTI5MgorbXNnaWQgInN1Y2Nlc3MiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjg0MyByZmMzMzE1LmM6ODUyIHJmYzMzMTUuYzo5NjcgcmZjMzMxNS5jOjk2OQorIywgZnV6enkKK21zZ2lkICJubyBhZGRyZXNzZXMgYXZhaWxhYmxlIgorbXNnc3RyICJuaWNpIG8gYWRyZXPEgyBkaXNwb25pYmlsxIMiCisKKyM6IHJmYzMzMTUuYzo5NDYKK21zZ2lkICJub3Qgb24gbGluayIKK21zZ3N0ciAiIgorCisjOiByZmMzMzE1LmM6MTAxOSByZmMzMzE1LmM6MTIwNCByZmMzMzE1LmM6MTI4MQorbXNnaWQgIm5vIGJpbmRpbmcgZm91bmQiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjEwNTcKK21zZ2lkICJkZXByZWNhdGVkIgorbXNnc3RyICIiCisKKyM6IHJmYzMzMTUuYzoxMDYyCisjLCBmdXp6eQorbXNnaWQgImFkZHJlc3MgaW52YWxpZCIKK21zZ3N0ciAiYWRyZXNhIGVzdGUgZm9sb3NpdMSDIgorCisjOiByZmMzMzE1LmM6MTEwOQorbXNnaWQgImNvbmZpcm0gZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IHJmYzMzMTUuYzoxMTI1CisjLCBmdXp6eQorbXNnaWQgImFsbCBhZGRyZXNzZXMgc3RpbGwgb24gbGluayIKK21zZ3N0ciAiYWRyZXPEgyBncmXFn2l0xIMgw65uICVzLCBsaW5pYSAlZCIKKworIzogcmZjMzMxNS5jOjEyMTMKK21zZ2lkICJyZWxlYXNlIHJlY2VpdmVkIgorbXNnc3RyICIiCisKKyM6IHJmYzMzMTUuYzoyMTQwCittc2dpZCAiQ2Fubm90IG11bHRpY2FzdCB0byBESENQdjYgc2VydmVyIHdpdGhvdXQgY29ycmVjdCBpbnRlcmZhY2UiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzoxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSWdub3JpbmcgZHVwbGljYXRlIGRoY3Atb3B0aW9uICVkIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6MjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IHRhZ3M6ICVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6NDA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyBtb3JlIHRoYW4gb25lIGFkZHJlc3MgaW4gaG9zdHNmaWxlLCB1c2luZyAlcyBmb3IgREhDUCIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjQzMAorIywgYy1mb3JtYXQKK21zZ2lkICJkdXBsaWNhdGUgSVAgYWRkcmVzcyAlcyAoJXMpIGluIGRoY3AtY29uZmlnIGRpcmVjdGl2ZSIKK21zZ3N0ciAiYWRyZXPEgyBJUCBkdXBsaWNhdCAlcyAoJXMpIMOubiBkZWNsYXJhxaNpYSBkaGNwLWNvbmZpZy4iCisKKyM6IGRoY3AtY29tbW9uLmM6NDk0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2V0IFNPX0JJTkRUT0RFVklDRSBvbiBESENQIHNvY2tldDogJXMiCittc2dzdHIgImNvbmZpZ3VyYXJlYSBTT19SRVVTRUFERFIgcGUgc29ja2V0LXVsIERIQ1AgYSBlxZ91YXQ6ICVzIgorCisjOiBkaGNwLWNvbW1vbi5jOjYxNQorIywgYy1mb3JtYXQKK21zZ2lkICJLbm93biBESENQIG9wdGlvbnM6XG4iCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo2MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiS25vd24gREhDUHY2IG9wdGlvbnM6XG4iCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo4MjMKK21zZ2lkICIsIHByZWZpeCBkZXByZWNhdGVkIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6ODI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiwgbGVhc2UgdGltZSAiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo4NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgc3RhdGVsZXNzIG9uICVzJS4wcyUuMHMlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjg3MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMsIHN0YXRpYyBsZWFzZXMgb25seSBvbiAlLjBzJXMlcyUuMHMiCittc2dzdHIgIkRIQ1AsIMOubXBydW11dHVyaSBzdGF0aWNlIGRvYXIgY8SDdHJlICAlLjBzJXMsIHRpbXB1bCByZcOubm9pcmlpICVzIgorCisjOiBkaGNwLWNvbW1vbi5jOjg3MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgcHJveHkgb24gc3VibmV0ICUuMHMlcyUuMHMlLjBzIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6ODczCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcywgSVAgcmFuZ2UgJXMgLS0gJXMlcyUuMHMiCittc2dzdHIgIkRIQ1AsIGRvbWVuaXUgSVAgJXMgLS0gJXMsIHRpbXB1bCByZcOubm9pcmlpICVzIgorCisjOiBkaGNwLWNvbW1vbi5jOjg4NgorIywgYy1mb3JtYXQKK21zZ2lkICJESENQdjQtZGVyaXZlZCBJUHY2IG5hbWVzIG9uICVzJXMiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo4ODkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInJvdXRlciBhZHZlcnRpc2VtZW50IG9uICVzJXMiCittc2dzdHIgIkRIQ1AsIMOubXBydW11dHVyaSBzdGF0aWNlIGRvYXIgY8SDdHJlICAlLjBzJXMsIHRpbXB1bCByZcOubm9pcmlpICVzIgorCisjOiBkaGNwLWNvbW1vbi5jOjkwMAorIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHJlbGF5IGZyb20gJXMgdG8gJXMgdmlhICVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6OTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcmVsYXkgZnJvbSAlcyB0byAlcyIKK21zZ3N0ciAiIgorCisjOiByYWR2LmM6MTEwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIElDTVB2NiBzb2NrZXQ6ICVzIgorbXNnc3RyICJudSBwb3QgY3JlZWEgc29ja2V0IERIQ1A6ICVzIgorCisjOiBhdXRoLmM6NDQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHpvbmUgdHJhbnNmZXIgcmVxdWVzdCBmcm9tICVzIgorbXNnc3RyICIiCisKKyM6IGlwc2V0LmM6OTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmaW5kIGtlcm5lbCB2ZXJzaW9uOiAlcyIKK21zZ3N0ciAiYWN0aXZhcmVhIHNvY2tldC11bHVpIHNlcnZlci11bHVpIERIQ1AgYSBlxZ91YXQ6ICVzIgorCisjOiBpcHNldC5jOjExNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBJUHNldCBjb250cm9sIHNvY2tldDogJXMiCittc2dzdHIgImNyZWVhcmVhIHNvY2tldC11bHVpIGRlIGFzY3VsdGFyZSBhIGXFn3VhdDogJXMiCisKKyM6IGlwc2V0LmM6MjMzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdXBkYXRlIGlwc2V0ICVzOiAlcyIKK21zZ3N0ciAibnUgcG90IGNpdGkgJXM6ICVzIgorCisjOiBkbnNzZWMuYzo1MjcKK21zZ2lkICJzeXN0ZW0gdGltZSBjb25zaWRlcmVkIHZhbGlkLCBub3cgY2hlY2tpbmcgRE5TU0VDIHNpZ25hdHVyZSB0aW1lc3RhbXBzLiIKK21zZ3N0ciAiIgorCisjOiBibG9ja2RhdGEuYzo1OAorIywgYy1mb3JtYXQKK21zZ2lkICJETlNTRUMgbWVtb3J5IGluIHVzZSAldSwgbWF4ICV1LCBhbGxvY2F0ZWQgJXUiCittc2dzdHIgIiIKKworIzogdGFibGVzLmM6NjEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBhY2Nlc3MgcGYgZGV2aWNlczogJXMiCittc2dzdHIgImFjY2VzYXJlYSBzZXJ2ZXJ1bHVpICVzIGEgZcWfdWF0OiAlcyIKKworIzogdGFibGVzLmM6NzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IG5vIG9wZW5lZCBwZiBkZXZpY2VzICVzIgorbXNnc3RyICJmb2xvc2ltIGFkcmVzZWxlIGxvY2FsZSBkb2FyIHBlbnRydSAlUyAlcyIKKworIzogdGFibGVzLmM6ODIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImVycm9yOiBjYW5ub3QgdXNlIHRhYmxlIG5hbWUgJXMiCittc2dzdHIgIm51IHBvdCBjaXRpIG51bWVsZSBtYcWfaW5paTogJXMiCisKKyM6IHRhYmxlcy5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yOiBjYW5ub3Qgc3RybGNweSB0YWJsZSBuYW1lICVzIgorbXNnc3RyICIiCisKKyM6IHRhYmxlcy5jOjEwMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiSVBzZXQ6IGVycm9yOiVzIgorbXNnc3RyICJlcm9hcmUgREJ1czogJXMiCisKKyM6IHRhYmxlcy5jOjEwOAorbXNnaWQgImluZm86IHRhYmxlIGNyZWF0ZWQiCittc2dzdHIgIiIKKworIzogdGFibGVzLmM6MTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IERJT0NSJXNBRERSUzogJXMiCittc2dzdHIgIiIKKworIzogdGFibGVzLmM6MTM4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlZCBhZGRyZXNzZXMgJXMiCittc2dzdHIgImNpdGVzYyAlcyAtICVkIGFkcmVzZSIKKworIzogaW5vdGlmeS5jOjYyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgYWNjZXNzIHBhdGggJXM6ICVzIgorbXNnc3RyICJudSBwb3QgY2l0aSAlczogJXMiCisKKyM6IGlub3RpZnkuYzo5NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBpbm90aWZ5OiAlcyIKK21zZ3N0ciAibnUgcG90IGNpdGkgJXM6ICVzIgorCisjOiBpbm90aWZ5LmM6MTExCisjLCBjLWZvcm1hdAorbXNnaWQgInRvbyBtYW55IHN5bWxpbmtzIGZvbGxvd2luZyAlcyIKK21zZ3N0ciAiIgorCisjOiBpbm90aWZ5LmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgImRpcmVjdG9yeSAlcyBmb3IgcmVzb2x2LWZpbGUgaXMgbWlzc2luZywgY2Fubm90IHBvbGwiCittc2dzdHIgIiIKKworIzogaW5vdGlmeS5jOjEzMSBpbm90aWZ5LmM6MTY4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGlub3RpZnkgZm9yICVzOiAlcyIKK21zZ3N0ciAiY3JlZWFyZWEgc29ja2V0LXVsdWkgZGUgYXNjdWx0YXJlIGEgZcWfdWF0OiAlcyIKKworIzogaW5vdGlmeS5jOjE1MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiYmFkIGR5bmFtaWMgZGlyZWN0b3J5ICVzOiAlcyIKK21zZ3N0ciAibnUgcG90IGNpdGkgJXM6ICVzIgorCisjOiBpbm90aWZ5LmM6MjU1CisjLCBjLWZvcm1hdAorbXNnaWQgImlub3RpZnksIG5ldyBvciBjaGFuZ2VkIGZpbGUgJXMiCittc2dzdHIgIiIKKworIywgZnV6enkKKyN+IG1zZ2lkICJjYW5ub3QgY2Fubm9uaWNhbGlzZSByZXNvbHYtZmlsZSAlczogJXMiCisjfiBtc2dzdHIgIm51IHBvdCBjcmVlYSBzYXUgZGVzY2hpZGUgZmnFn2llcnVsIGN1IMOubXBydW11dHVyaTogJXMiCisKKyN+IG1zZ2lkICJkdXBsaWNhdGUgSVAgYWRkcmVzcyAlcyBpbiBkaGNwLWNvbmZpZyBkaXJlY3RpdmUuIgorI34gbXNnc3RyICJhZHJlc8SDIElQIGR1cGxpY2F0ICVzIMOubiBkZWNsYXJhxaNpYSBkaGNwLWNvbmZpZy4iCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiU3BlY2lmeSBwYXRoIHRvIEx1YSBzY3JpcHQgKG5vIGRlZmF1bHQpLiIKKyN+IG1zZ3N0ciAiU3BlY2lmaWPEgyBvIGNhbGUgcGVudHJ1IGZpxZ9pZXJ1bCBQSUQuIChpbXBsaWNpdCAlcykuIgorCisjfiBtc2dpZCAiVFhUIHJlY29yZCBzdHJpbmcgdG9vIGxvbmciCisjfiBtc2dzdHIgIsWfaXJ1bCBkZSBjYXJhY3RlcmUgcGVudHJ1IMOubnJlZ2lzdHJhcmVhIFRYVCBlc3RlIHByZWEgbHVuZyIKKworI34gbXNnaWQgImZhaWxlZCB0byBzZXQgSVBWNiBvcHRpb25zIG9uIGxpc3RlbmluZyBzb2NrZXQ6ICVzIgorI34gbXNnc3RyICJjb25maWd1cmFyZWEgb3DFo2l1bmlsb3IgSVB2NiBhIGXFn3VhdCBwZSBzb2NrZXQtdWwgZGUgYXNjdWx0YXJlOiAlcyIKKworI34gbXNnaWQgImZhaWxlZCB0byBiaW5kIGxpc3RlbmluZyBzb2NrZXQgZm9yICVzOiAlcyIKKyN+IG1zZ3N0ciAiYWN0aXZhcmVhIHNvY2tldC11bHVpIGRlIGFzY3VsdGFyZSBwZW50cnUgJXMgYSBlxZ91YXQ6ICVzIgorCisjfiBtc2dpZCAibXVzdCBzZXQgZXhhY3RseSBvbmUgaW50ZXJmYWNlIG9uIGJyb2tlbiBzeXN0ZW1zIHdpdGhvdXQgSVBfUkVDVklGIgorI34gbXNnc3RyICJ0cmVidWllIHNwZWNpZmljYXTEgyBleGFjdCBvIHNpbmd1csSDIGludGVyZmHFo8SDIHBlIHNpc3RlbWVsZSBkZWZlY3RlY2UgbnUgYXUgSVBfUkVDVklGIgorCisjfiBtc2dpZCAiSWdub3JpbmcgREhDUCBsZWFzZSBmb3IgJXMgYmVjYXVzZSBpdCBoYXMgYW4gaWxsZWdhbCBkb21haW4gcGFydCIKKyN+IG1zZ3N0ciAiw45tcHJ1bXV0dWwgREhDUCBwZW50cnUgJXMgdmEgZmkgaWdub3JhdCBkZW9hcmVjZSBhcmUgZG9tZW5pdSBpbnZhbGlkIgorCisjfiBtc2dpZCAiSVNDIGRoY3BkIGludGVncmF0aW9uIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0lTQ19SRUFERVIgaW4gc3JjL2NvbmZpZy5oIgorI34gbXNnc3RyICJJbnRlZ3JhcmVhIGN1IElTQyBkaGNwZCBudSBlc3RlIGRpc3BvbmliaWzEgzpwdW5lxaNpIEhBVkVfSVNDX0hFQURFUiDDrm4gc3JjL2NvbmZpZy5oIgorCisjLCBmdXp6eQorI34gbXNnaWQgImlsbGVnYWwgZG9tYWluICVzIGluIGRoY3AtY29uZmlnIGRpcmVjdGl2ZS4iCisjfiBtc2dzdHIgImFkcmVzxIMgSVAgZHVwbGljYXQgJXMgw65uIGRlY2xhcmHFo2lhIGRoY3AtY29uZmlnLiIKKworI34gbXNnaWQgInJ1bm5pbmcgYXMgcm9vdCIKKyN+IG1zZ3N0ciAicnVsZXogY2Egcm9vdCIKKworIywgZnV6enkKKyN+IG1zZ2lkICJyZWFkICVzIC0gJWQgaG9zdHMiCisjfiBtc2dzdHIgImNpdGVzYyAlcyAtICVkIGFkcmVzZSIKKworI34gbXNnaWQgImRvbWFpbnMiCisjfiBtc2dzdHIgImRvbWVuaWkiCisKKyN+IG1zZ2lkICJJZ25vcmluZyBESENQIGhvc3QgbmFtZSAlcyBiZWNhdXNlIGl0IGhhcyBhbiBpbGxlZ2FsIGRvbWFpbiBwYXJ0IgorI34gbXNnc3RyICJJZ25vciBudW1lbGUgREhDUCBhbCBtYcWfaW5paSAlcyBkZW9hcmVjZSBhcmUgZG9tZW5pdSBETlMgaWxlZ2FsIgorCisjfiBtc2dpZCAiRGlzcGxheSB0aGlzIG1lc3NhZ2UuIgorI34gbXNnc3RyICJBZmnFn2VhesSDIGFjZXN0IG1lc2FqLiIKKworI34gbXNnaWQgImZhaWxlZCB0byByZWFkICVzOiVtIgorI34gbXNnc3RyICJjaXRpcmVhICVzOiVuIGEgZcWfdWF0IgorCisjLCBmdXp6eQorI34gbXNnaWQgImNhbm5vdCBzZW5kIGVuY2Fwc3VsYXRlZCBvcHRpb24gJWQ6IG5vIHNwYWNlIGxlZnQgaW4gd3JhcHBlciIKKyN+IG1zZ3N0ciAibnUgcG90IHRyaW1pdGUgb3DFo2l1bmVhIERIQ1AgJWQ6IG51IG1haSBlc3RlIGxvYyDDrm4gcGFjaGV0IgorCisjfiBtc2dpZCAiTW9yZSB0aGFuIG9uZSB2ZW5kb3IgY2xhc3MgbWF0Y2hlcywgdXNpbmcgJXMiCisjfiBtc2dzdHIgIlNlIHBvdHJpdmVzYyBtYWkgbXVsdGUgY2xhc2UgZGUgbcSDcmNpIGRlIGludGVyZmXFo2UsIGZvbG9zaW0gJXMiCisKKyN+IG1zZ2lkICJmb3J3YXJkaW5nIHRhYmxlIG92ZXJmbG93OiBjaGVjayBmb3Igc2VydmVyIGxvb3BzLiIKKyN+IG1zZ3N0ciAiZGVwxIPFn2lyZSBkZSBtZW1vcmllIMOubiB0YWJlbGEgY3Ugw65uYWludMSDcmkgRE5TOiB2ZXJpZmljYcWjaSBkZSBidWNsZS4iCisKKyN+IG1zZ2lkICJuZXN0ZWQgaW5jbHVkZXMgbm90IGFsbG93ZWQiCisjfiBtc2dzdHIgImluY2x1eml1bmlsZSBsb2NhbGUgbnUgc3VudCBwZXJtaXNlIgorCisjfiBtc2dpZCAiREhDUCwgJXMgd2lsbCBiZSB3cml0dGVuIGV2ZXJ5ICVzIgorI34gbXNnc3RyICJESENQLCAlcyB2YSBmaSByZXNjcmlzIG9kYXTEgyBsYSBmaWVjYXJlICVzIgorCisjfiBtc2dpZCAiY2Fubm90IGNyZWF0ZSBESENQIHBhY2tldCBzb2NrZXQ6ICVzLiBJcyBDT05GSUdfUEFDS0VUIGVuYWJsZWQgaW4geW91ciBrZXJuZWw/IgorI34gbXNnc3RyICJudSBwb3QgY3JlZWEgc29ja2V0IERIQ1AgcGFja2V0OiAlcy4gQXZlxaNpIGFjdGl2YXTEgyDDrm4gbnVjbGV1bHNpc3RlbXVsdWkgb3DFo2l1bmVhIENPTkZJR19QQUNLRVQgPyIKZGlmZiAtLWdpdCBhL3NldHVwLmh0bWwgYi9zZXR1cC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZlODMxZjYKLS0tIC9kZXYvbnVsbAorKysgYi9zZXR1cC5odG1sCkBAIC0wLDAgKzEsMjMxIEBACis8SFRNTD4KKzxIRUFEPgorPFRJVExFPiBDb25maWd1cmluZyBEbnNtYXNxLjwvVElUTEU+Cis8L0hFQUQ+Cis8Qk9EWSBCR0NPTE9SPSJXSElURSI+IAorPEgxIEFMSUdOPWNlbnRlcj5EbnNtYXNxIHNldHVwPC9IMT4gCis8SDI+SW5zdGFsbGF0aW9uLjwvSDI+CitUbyBjb21waWxlIGFuZCBpbnN0YWxsIGRuc21hc3EsIHRoZSBmb2xsb3dpbmcgY29tbWFuZCAoYXMgcm9vdCkgaXMgZW5vdWdoLgorCis8UFJFPgorbWFrZSBpbnN0YWxsCis8L1BSRT4KKworWW91IG1pZ2h0IHdhbnQgdG8gZWRpdCBjb25maWcuaC4gRG5zbWFzcSBoYXMKK2JlZW4gcnVuIG9uIChhdCBsZWFzdCkgTGludXgsIHVDTGludXgsIEFJWCA0LjEuNSwgRnJlZUJTRCA0LjQgT3BlbkJTRCBhbmQgVHJ1NjQgNC54IAorCitEbnNtYXNxIGlzIG5vcm1hbGx5ICBydW4gb24gYSBmaXJld2FsbCBtYWNoaW5lICh0aGUgbWFjaGluZSB3aXRoIHRoZQorbW9kZW0gb3Igb3RoZXIgY29ubmVjdGlvbiB0byB5b3VyIElTUC4pIGJ1dCBpdCBjYW4gcnVuIG9uIGFueSBtYWNoaW5lCit3aXRoIGFjY2VzcyB0byB0aGUgSVNQcyBuYW1lc2VydmVycy4KKworUHV0IHRoZSBiaW5hcnkgaW4gPFRUPi91c3IvbG9jYWwvc2Jpbi9kbnNtYXNxPC9UVD4gKHJ1bm5pbmcgPFRUPm1ha2UgaW5zdGFsbDwvVFQ+ICB3aWxsIGRvIHRoaXMpIGFuZCBhcnJhbmdlIGZvciBpdAordG8gYmUgc3RhcnRlZCBhdCBib290IHRpbWUuCisKK05vdGUgdGhhdCBkbnNtYXNxIG5lZWRzIHRvIHJ1biBhcyByb290LCBzaW5jZSBpdCBiaW5kcyBwcml2aWxlZ2VkIHBvcnRzLiBJdCB3aWxsIGRyb3Agcm9vdCBwcml2aWxlZ2VzIGFmdGVyIHN0YXJ0LXVwLiBEbnNtYXNxCitsb2dzIHByb2JsZW1zIHVzaW5nIHRoZSBzeXNsb2cgZmFjaWxpdHkgYXMgYSBkYWVtb24uIEl0IGxvZ3MgZGVidWdnaW5nCitpbmZvcm1hdGlvbiB0byBsb2NhbDAKKzxQPgorPEgyPkNvbmZpZ3VyYXRpb24uPC9IMj4KK0NvbmZpZ3VyYXRpb24gZm9yIGRuc21hc3EgaXMgcHJldHR5IHNpbXBsZSBpbiBhbG1vc3QgYWxsIGNhc2VzLiBUaGUKK3Byb2dyYW0gaGFzIGNvbGxlY3RlZCBhIGZhaXIgZmV3IG9wdGlvbnMgYXMgaXQgaGFzIGRldmVsb3BlZCBidXQgbW9zdCBvZiB0aGVtCithcmUgbm90IG5lZWRlZCBtb3N0IG9mIHRoZSB0aW1lLiBBIG1hY2hpbmUgd2hpY2ggYWxyZWFkeSBoYXMgYSBETlMKK2NvbmZpZ3VyYXRpb24gKGllIG9uZSBvciBtb3JlIGV4dGVybmFsIG5hbWVzZXJ2ZXJzIGluIDxUVD4vZXRjL3Jlc29sdi5jb25mPC9UVD4KK2FuZCBhbnkgbG9jYWwgaG9zdHMgaW4gPFRUPi9ldGMvaG9zdHM8L1RUPikgY2FuIGJlIHR1cm5lZCBpbnRvIGEgbmFtZXNlcnZlcgorc2ltcGx5IGJ5IHJ1bm5pbmcgZG5zbWFzcSwgd2l0aCBubyBvcHRpb25zIG9yIGNvbmZpZ3VyYXRpb24gYXQKK2FsbC4gU2V0IHRoZSBJUCBhZGRyZXNzIG9mIHRoZSBtYWNoaW5lIHJ1bm5pbmcgZG5zbWFzcSBhcyB0aGUgRE5TCitzZXJ2ZXIgaW4gYWxsIHRoZSBvdGhlciBtYWNoaW5lcyBvbiB5b3VyIG5ldHdvcmssIGFuZCB5b3UncmUgZG9uZS4KKzxQPgorV2l0aCBhIGZldyBvcHRpb24gZmxhZ3MsIGl0IGlzIHBvc3NpYmxlIHRvIG1ha2UgZG5zbWFzcSBkbyBtb3JlIGNsZXZlcgordHJpY2tzLiBPcHRpb25zIGZvciBkbnNtYXNxIGNhbiBiZSBzZXQgZWl0aGVyIG9uIHRoZSBjb21tYW5kIGxpbmUKK3doZW4gc3RhcnRpbmcgZG5zbWFzcSwgb3IgaW4gaXRzIGNvbmZpZ3VyYXRpb24gZmlsZSwgPFRUPi9ldGMvZG5zbWFzcS5jb25mPC9UVD4uCisKKzxoMj5NYWtpbmcgdGhlIG5hbWVzZXJ2ZXIgbWFjaGluZSB1c2UgZG5zbWFzcS48L2gyPgorSW4gdGhlIHNpbXBsZSBjb25maWd1cmF0aW9uIGRlc2NyaWJlZCBhYm92ZSwgcHJvY2Vzc2VzIGxvY2FsIHRvIHRoZQorbWFjaGluZSB3aWxsIG5vdCB1c2UgZG5zbWFzcSwgc2luY2UgdGhleSBnZXQgdGhlaXIgaW5mb3JtYXRpb24gYWJvdXQKK3doaWNoIG5hbWVzZXJ2ZXJzIHRvIHVzZSBmcm9tIC9ldGMvcmVzb2x2LmNvbmYsIHdoaWNoIGlzIHNldCB0byB0aGUKK3Vwc3RyZWFtIG5hbWVzZXJ2ZXJzLiBUbyBmaXggdGhpcywgc2ltcGx5IHJlcGxhY2UgdGhlIG5hbWVzZXJ2ZXIgaW4KKzxUVD4vZXRjL3Jlc29sdi5jb25mPC9UVD4gd2l0aCB0aGUgbG9jYWwgYWRkcmVzcyAxMjcuMC4wLjEgYW5kIGdpdmUgdGhlCithZGRyZXNzKGVzKSBvZiB0aGUgdXBzdHJlYW0gbmFtZXNlcnZlcihzKSB0byBkbnNtYXNxIGRpcmVjdGx5LiBZb3UgY2FuCitkbyB0aGlzIHVzaW5nIGVpdGhlciB0aGUgPFRUPnNlcnZlcjwvVFQ+IG9wdGlvbiwgb3IgYnkgcHV0dGluZyB0aGVtIGludG8KK2Fub3RoZXIgZmlsZSwgYW5kIHRlbGxpbmcgIGRuc21hc3EgYWJvdXQgaXRzIGxvY2F0aW9uIHdpdGggCit0aGUgPFRUPnJlc29sdi1maWxlPC9UVD4gb3B0aW9uLiAKKworPGgyPkF1dG9tYXRpYyBuYW1lc2VydmVyIGNvbmZpZ3VyYXRpb24uPC9oMj4KK1RoZSB0d28gcHJvdG9jb2xzIG1vc3QgdXNlZCBmb3IgYXV0b21hdGljIElQIG5ldHdvcmsgY29uZmlndXJhdGlvbgorKFBQUCBhbmQgREhDUCkgY2FuIGRldGVybWluZSB0aGUgSVAgYWRkcmVzc2VzIGZvciBuYW1lc2VydmVycyBhdXRvbWF0aWNhbGx5LgorVGhlIGRhZW1vbnMgY2FuIGJlIG1hZGUgdG8gd3JpdGUgb3V0IGEgZmlsZSBpbiB0aGUgcmVzb2x2LmNvbmYgZm9ybWF0IHdpdGggdGhlCituYW1lc2VydmVycyBpbiB3aGljaCBpcyBwZXJmZWN0IGZvciBkbnNtYXNxIHRvIHVzZS4gV2hlbiB0aGUKK25hbWVzZXJ2ZXJzIGNoYW5nZSwgZm9yIGluc3RhbmNlIG9uIGRpYWxsaW5nIGludG8gYSBuZXcgSVNQIHVzaW5nIFBQUCwKK2Ruc21hc3Egd2lsbCBhdXRvbWF0aWNhbGx5IHJlLXJlYWQgdGhpcyBmaWxlIGFuZCBiZWdpbiB1c2luZyB0aGUgbmV3CituYW1lc2VydmVyKHMpIGNvbXBsZXRlbHkgdHJhbnNwYXJlbnRseS4KKworPGgzPkF1dG9tYXRpYyBETlMgc2VydmVyIGNvbmZpZ3VyYXRpb24gd2l0aCBQUFAuPC9oMz4KK0xhdGVyIHZlcnNpb25zIG9mIHBwcGQgaGF2ZSBhbiBvcHRpb24gInVzZXBlZXJkbnMiIHdoaWNoIGluc3RydWN0cyBpdCB0byB3cml0ZSBhIGZpbGUgY29udGFpbmluZwordGhlIGFkZHJlc3MoZXMpIG9mIHRoZSBETlMgc2V2ZXJzIGluIDxUVD4vZXRjL3BwcC9yZXNvbHYuY29uZjwvVFQ+LiBDb25maWd1cmUgZG5zbWFzcQorYXMgYWJvdmUgd2l0aCAibmFtZXNlcnZlciAxMjcuMC4wLjEiIGluIDxUVD4vZXRjL3Jlc29sdi5jb25mPC9UVD4gYW5kIHJ1biBkbnNtYXNxIAord2l0aCB0byBvcHRpb24gPFRUPnJlc29sdi1maWxlPS9ldGMvcHBwL3Jlc29sdi5jb25mPC9UVD4uCis8UD4KK09uIFJlZGhhdCAoYXQgbGVhc3QgdmVyc2lvbnMgNy4xLCA3LjIgYW5kIDcuMykgeW91IGNhbiBzZXQgcHBwZAorb3B0aW9ucyBieSBhZGRpbmcgIlBQUE9QVElPTlM9dXNlcGVlcmRucyIgdG8KKzxUVD4vZXRjL3N5c2NvbmZpZy9uZXR3b3JrLXNjcmlwdHMvaWZjZmctaXBwcDA8L1RUPi4gIEluIHRoZSBzYW1lIGZpbGUsIG1ha2Ugc3VyZQordGhhdCAiUEVFUkROUz1ubyIgdG8gc3RvcCBSZWRIYXQncyBuZXR3b3JrIGluaXRzY3JpcHRzIGZyb20gY29weWluZworPFRUPi9ldGMvcHBwL3Jlc29sdi5jb25mPC9UVD4gaW50byA8VFQ+L2V0Yy9yZXNvbHYuY29uZjwvVFQ+LjxCUj4KKworT24gU3VTRSAoYXQgbGVhc3QgdmVyc2lvbiA4LjEsIGFuZCA4LjIpIHlvdSBzaG91bGQgdXNlIFlhU1QgdG8gYWN0aXZhdGUKKzxUVD5beF0gTW9kaWZ5IEROUyB3aGVuIGNvbm5lY3RlZDwvVFQ+IHRoZW4gc3RvcCBTdVNFcyBuZXR3b3JrIGluaXRzY3JpcHRzIAorZnJvbSBjb3B5aW5nIDxUVD4vZXRjL3BwcC9yZXNvbHYuY29uZjwvVFQ+IGludG8gPFRUPi9ldGMvcmVzb2x2LmNvbmY8L1RUPiAKK2J5IG1vZGlmeWluZyBNT0RJRllfUkVTT0xWX0NPTkZfRFlOQU1JQ0FMTFk9Im5vIiBpbiA8VFQ+L2V0Yy9zeXNjb25maWcvbmV0d29yay9jb25maWc8L1RUPi4KKyAKKworPGgzPkF1dG9tYXRpYyBETlMgc2VydmVyIGNvbmZpZ3VyYXRpb24gd2l0aCBESENQLjwvaDM+CitZb3UgbmVlZCB0byBnZXQgeW91ciBESENQIGNsaWVudCB0byB3cml0ZSB0aGUgYWRkcmVzcyhlcykgb2YgdGhlIEROUworc2VydmVycyB0byBhIGZpbGUgb3RoZXIgdGhhbiA8VFQ+L2V0Yy9yZXNvbHYuY29uZjwvVFQ+LiBGb3IgZGhjcGNkLCB0aGUKKzxUVD5kaGNwY2QuZXhlPC9UVD4gc2NyaXB0IGdldHMgcnVuIHdpdGggdGhlIGFkZHJlc3NlcyBvZiB0aGUgbmFtZXNlcnZlcihzKSBpbgordGhlIHNoZWxsIHZhcmlhYmxlIDxUVD4kRE5TPC9UVD4uIFRoZSBmb2xsb3dpbmcgYml0IG9mIHNoZWxsIHNjcmlwdAordXNlcyB0aGF0IHRvIHdyaXRlIGEgZmlsZSBzdWl0YWJsZSBmb3IgZG5zbWFzcS4gCis8UFJFPgorCitlY2hvIC1uID58L2V0Yy9kaGNwYy9yZXNvbHYuY29uZgorZG5zc2VydmVycz0ke0ROUy8vLC8gfQorZm9yIHNlcnYgaW4gJGRuc3NlcnZlcnM7IGRvCisgICAgZWNobyAibmFtZXNlcnZlciAkc2VydiIgPj4vZXRjL2RoY3BjL3Jlc29sdi5jb25mCitkb25lCisKKzwvUFJFPgorIAorUmVtZW1iZXIgdG8gZ2l2ZSBkaGNwY2QgdGhlIDxUVD4tUjwvVFQ+IGZsYWcgdG8gc3RvcCBpdCBvdmVyd3JpdGluZyAKKzxUVD4vZXRjL3Jlc29sdi5jb25mPC9UVD4uCisKKzxQPgorRm9yIG90aGVyIERIQ1AgY2xpZW50cyBpdCBzaG91bGQgYmUgcG9zc2libGUgdG8gYWNoaWV2ZSB0aGUgc2FtZSBlZmZlY3QuCisKKzxoMz4gREhDUCBhbmQgUFBQLjwvaDM+CitPbiBhIGxhcHRvcCB3aGljaCBtYXkgcG90ZW50aWFsbHkgY29ubmVjdCB2aWEgYSBtb2RlbSBhbmQgUFBQIG9yCitldGhlcm5ldCBhbmQgREhDUCBpdCBpcyBwb3NzaWJsZSB0byBjb21iaW5lIGJvdGggb2YgdGhlIGFib3ZlCitjb25maWd1cmF0aW9ucy4gUnVubmluZyBkbnNtYXNxIHdpdGggdGhlIGZsYWdzCis8VFQ+cmVzb2x2LWZpbGU9L2V0Yy9wcHAvcmVzb2x2LmNvbmYgcmVzb2x2LWZpbGU9L2V0Yy9kaGNwYy9yZXNvbHYuY29uZjwvVFQ+ICAKK21ha2VzIGl0IHBvbGwgPEI+Ym90aDwvQj4gZmlsZXMgYW5kIHVzZSB3aGljaGV2ZXIgd2FzIHVwZGF0ZWQKK2xhc3QuIFRoZSByZXN1bHQgaXMgYXV0b21hdGljIHN3aXRjaGluZyBiZXR3ZWVuIEROUyBzZXJ2ZXJzLgorPC9IMz4KKworPEgyPiBJbnRlZ3JhdGlvbiB3aXRoIERIQ1AuPC9IMj4KK0Ruc21hc3EgcmVhZHMgPFRUPi9ldGMvaG9zdHM8L1RUPiBzbyB0aGF0IHRoZSBuYW1lcyBvZiBsb2NhbCBtYWNoaW5lcyBhcmUKK2F2YWlsYWJsZSBpbiBETlMuIFRoaXMgaXMgZmluZSB3aGVuIHlvdSBnaXZlIGFsbCB5b3VyIGxvY2FsIG1hY2hpbmVzCitzdGF0aWMgSVAgYWRkcmVzc2VzIHdoaWNoIGNhbiBnbyBpbiA8VFQ+L2V0Yy9ob3N0czwvVFQ+LCBidXQgaXQgZG9lc24ndCB3b3JrIAord2hlbiBsb2NhbCBtYWNoaW5lcyBhcmUgY29uZmlndXJlZCB2aWEgREhDUCwgc2luY2UgdGhlIElQIGFkZHJlc3MKK2FsbG9jYXRlZCB0byBtYWNoaW5lIGlzIG5vdCBmaXhlZC4gRG5zbWFzcSBjb21lcyB3aXRoIGFuIGludGVncmF0ZWQKK0RIQ1AgZGFlbW9uIHRvIHNvbHZlIHRoaXMgcHJvYmxlbS4KKzxQPgorVGhlIGRuc21hc3EgREhDUCBkYWVtb24gYWxsb2NhdGVzIGFkZHJlc3NlcyB0byBob3N0cyBvbiB0aGUgbmV0d29yayBhbmQgdHJpZXMKK3RvIGRldGVybWluZSB0aGVpciBuYW1lcy4gSWYgaXQgc3VjY2VlZHMgaXQgYWRkIHRoZSBuYW1lIGFuZCBhZGRyZXNzCitwYWlyIHRvIHRoZSBETlMuIFRoZXJlIGFyZSBiYXNpY2FsbHkgdHdvIHdheXMgdG8gYXNzb2NpYXRlIGEgbmFtZSB3aXRoCithIERIQ1AtY29uZmlndXJlZCBtYWNoaW5lOyBlaXRoZXIgdGhlIG1hY2hpbmUga25vd3MgaXRzIG5hbWUgd2hpY2ggaXQKK2dldHMgYSBESENQIGxlYXNlLCBvciBkbnNtYXNxIGdpdmVzIGl0IGEgbmFtZSwgYmFzZWQgb24gdGhlIE1BQworYWRkcmVzcyBvZiBpdHMgZXRoZXJuZXQgY2FyZC4gRm9yIHRoZSBmb3JtZXIgdG8gd29yaywgYSBtYWNoaW5lIG5lZWRzIHRvIGtub3cgaXRzIG5hbWUgd2hlbiBpdAorcmVxdWVzdHMgYSBESENQIGxlYXNlLiBGb3IgZGhjcGNkLCB0aGUgLWggb3B0aW9uIHNwZWNpZmllcyB0aGlzLiBUaGUKK25hbWVzIG1heSBiZSBhbnl0aGluZyBhcyBmYXIgYXMgREhDUCBpcyBjb25jZXJuZWQsIGJ1dCBkbnNtYXNxIGFkZHMKK3NvbWUgbGltaXRhdGlvbnMuIEJ5IGRlZmF1bHQgdGhlIG5hbWVzIG11c3Qgbm8gaGF2ZSBhIGRvbWFpbiBwYXJ0LCBpZQordGhleSBtdXN0IGp1c3QgYmUgYSBhbHBoYW51bWVyaWMgbmFtZSwgd2l0aG91dCBhbnkgZG90cy4gIFRoaXMgaXMgYQorc2VjdXJpdHkgZmVhdHVyZSB0byBzdG9wIGEgbWFjaGluZSBvbiB5b3VyIG5ldHdvcmsgdGVsbGluZyBESENQIHRoYXQKK2l0cyBuYW1lIGlzICJ3d3cubWljcm9zb2Z0LmNvbSIgYW5kIHRoZXJlYnkgZ3JhYmJpbmcgdHJhZmZpYyB3aGljaAorc2hvdWxkbid0IGdvIHRvIGl0LiBBIGRvbWFpbiBwYXJ0IGlzIG9ubHkgYWxsb3dlZCBieSBkbnNtYXNxIGluIERIQ1AgbWFjaGluZSBuYW1lcworaWYgdGhlIDxUVD5kb21haW4tc3VmZml4PC9UVD4gb3B0aW9uIGlzIHNldCwgdGhlIGRvbWFpbiBwYXJ0IG11c3QgbWF0Y2ggdGhlCitzdWZmaXguCis8UD4KK0FzIGFuIGFzaWRlLCBtYWtlIHN1cmUgbm90IHRvIHRlbGwgREhDUCB0byBzZXQgdGhlIGhvc3RuYW1lIHdoZW4gaXQKK29idGFpbnMgYSBsZWFzZSAoaW4gZGhjcGNkIHRoYXQncyB0aGUgLUggZmxhZy4pCitUaGlzIGlzIG5vdCByZWxpYWJsZSBzaW5jZSB0aGUgREhDUCBzZXJ2ZXIgZ2V0cyB0aGUKK2hvc3RuYW1lIGZyb20gRE5TIHdoaWNoIGluIHRoaXMgY2FzZSBpcyBkbnNtYXNxLiBUaGVyZSBpcyBhIHJhY2UKK2NvbmRpdGlvbiBiZWNhdXNlIHRoZSBob3N0J3MgbmFtZSBpbiB0aGUgRE5TIG1heSBjaGFuZ2UgYXMgYQorcmVzdWx0IG9mIGl0IGdldHRpbmcgYSBESENQIGxlYXNlLCBidXQgdGhpcyBkb2VzIG5vdCBwcm9wYWdhdGUgYmVmb3JlCit0aGUgbmFtZSBpcyBsb29rZWQgdXAuIFRoZSBuZXQgZWZmZWN0IG1heSBiZSB0aGF0IHRoZSBob3N0IGJlbGlldmVzIGl0CitpcyBjYWxsZWQgc29tZXRoaW5nIGRpZmZlcmVudCB0byBpdHMgbmFtZSBpbiB0aGUgRE5TLiBUbyBiZSBzYWZlLCBzZXQKK3RoZSBob3N0bmFtZSBvbiBhIG1hY2hpbmUgbG9jYWxseSwgYW5kIHBhc3MgdGhlIHNhbWUgbmFtZSB0byBESENQIHdoZW4KK3JlcXVlc3RpbmcgYSBsZWFzZS4KKzxQPgorPEgyPlNldHRpbmcgdXAgYSBtYWlsaHViLjwvSDI+CitJZiB5b3UgZ2VuZXJhdGUgbWFpbCBvbiB0aGUgbWFjaGluZXMgYXR0YWNoZWQgdG8geW91ciBwcml2YXRlIG5ldHdvcmssIHlvdSBtYXkKKyBiZSBpbnRlcmVzdGVkIGluIHRoZSBNWCByZWNvcmQgZmVhdHVyZSBvZiBkbnNtYXNxLiBUaGlzIGFsbG93cyB5b3UgdG8gaGF2ZSBhbGwKKyB0aGUgbWFjaGluZXMgb24geW91ciBuZXR3b3JrIHVzZSB5b3VyIGZpcmV3YWxsIG9yIGFub3RoZXIgbWFjaGluZSBhcyBhICJzbWFydGhvc3QiIGFuZCAKK2RlbGl2ZXIgbWFpbCB0byBpdC4gVGhlIGRldGFpbHMgb2YgaG93IHRvIHNldCB0aGlzIHVwIGFyZSBoaWdobHkgZGVwZW5kZW50IG9uCit5b3VyIG1haWxlciwgc3lzdGVtIGFuZCBkaXN0cmlidXRpb24uIFRoZSBvbmx5IHRoaW5nIHRoYXQncyByZWxldmFudCB0byBkbnNtYXNxIGlzIHRoYXQgdGhlIG1haWxlciAKK25lZWRzIHRvIGJlIGFibGUgdG8gaW50ZXJyb2dhdGUgdGhlIEROUyBhbmQgZmluZCBhbiBNWCByZWNvcmQgZm9yIHlvdXIgbWFpbGh1Yi4KKzxQPgorQnkgZ2l2aW5nIGRuc21hc3EgdGhlIDxUVD5teC1ob3N0PC9UVD4gb3B0aW9uCit5b3UgaW5zdHJ1Y3QgZG5zbWFzcSB0byBzZXJ2ZSBhbiBNWCByZWNvcmQgZm9yIHRoZSBzcGVjaWZpZWQgYWRkcmVzcy4gCitCeSBkZWZhdWx0IHRoZSBNWCByZWNvcmQgCitwb2ludHMgdG8gdGhlIG1hY2hpbmUgb24gd2hpY2ggZG5zbWFzcSBpcyBydW5uaW5nLCBzbyBtYWlsIGRlbGl2ZXJlZCB0byB0aGF0CituYW1lIHdpbGwgZ2V0IHNlbnQgdG8gdGhlIG1haWxlciBvbiB5b3VyIGZpcmV3YWxsIG1hY2hpbmUuIFlvdSBjYW4KK2hhdmUgdGhlIE1YIHJlY29yZCBwb2ludCB0byBhbm90aGVyIG1hY2hpbmUgYnkgdXNpbmcgdGhlIDxUVD5teC10YXJnZXQ8L1RUPgorb3B0aW9uLgorPFA+CitJbiBzb21lIGNhc2VzIGl0J3MgdXNlZnVsIGZvciBhbGwgbG9jYWwgbWFjaGluZXMgdG8gc2VlIGFuIE1YIHJlY29yZAorcG9pbnRpbmcgYXQgdGhlbXNlbHZlczogdGhpcyBhbGxvd3MgbWFpbGVycyB3aGljaCBpbnNpc3Qgb24gYW4gTVggcmVjb3JkIGFuZAorZG9uJ3QgZmFsbCBiYWNrIHRvIEEgcmVjb3JkcyB0byBkZWxpdmVyIG1haWwgd2l0aGluIHRoZQorbWFjaGluZS4gVGhlc2UgTVggcmVjb3JkcyBhcmUgZW5hYmxlZCB1c2luZyB0aGUgPFRUPnNlbGZteDwvVFQ+IG9wdGlvbi4KKworPEgyPlVzaW5nIHNwZWNpYWwgc2VydmVycy48L0gyPgorRG5zbWFzcSBoYXMgdGhlIGFiaWxpdHkgdG8gZGlyZWN0IEROUyBxdWVyaWVzIGZvciBjZXJ0YWluIGRvbWFpbnMgdG8KK3NwZWNpZmljIHVwc3RyZWFtIG5hbWVzZXJ2ZXJzLiBUaGlzIGZlYXR1cmUgd2FzIGFkZGVkIGZvciB1c2Ugd2l0aAorVlBOcyBidXQgaXQgaXMgZnVsbHkgZ2VuZXJhbC4gVGhlIHNjZW5hcmlvIGlzIHRoaXM6IHlvdSBoYXZlIGEKK3N0YW5kYXJkIGludGVybmV0IGNvbm5lY3Rpb24gdmlhIGFuIElTUCwgYW5kIGRuc21hc3EgaXMgY29uZmlndXJlZCB0bworZm9yd2FyZCBxdWVyaWVzIHRvIHRoZSBJU1AncyBuYW1lc2VydmVycywgdGhlbiB5b3UgbWFrZSBhIFZQTgorY29ubmVjdGlvbiBpbnRvIHlvdXIgY29tcGFuaWVzIG5ldHdvcmssIGdpdmluZyBhY2Nlc3MgdG8gaG9zdHMgaW5zaWRlCit0aGUgY29tcGFueSBmaXJld2FsbC4gWW91IGhhdmUgYWNjZXNzLCBidXQgc2luY2UgbWFueSBvZiB0aGUgaW50ZXJuYWwgaG9zdHMKK2FyZW4ndCB2aXNpYmxlIG9uIHRoZSBwdWJsaWMgaW50ZXJuZXQsIHlvdXIgY29tcGFueSBkb2Vzbid0IHB1Ymxpc2ggCit0aGVtIHRvIHRoZSBwdWJsaWMgRE5TIGFuZCB5b3UgY2FuJ3QgZ2V0IHRoZWlyIElQIGFkZHJlc3MgZnJvbSB0aGUgSVNQCituYW1lc2VydmVycy4gVGhlIHNvbHV0aW9uIGlzIHRvIHVzZSB0aGUgY29tcGFuaWVzIG5hbWVzZXJ2ZXIgZm9yCitwcml2YXRlIGRvbWFpbnMgd2l0aGluIHRoZSBjb21wYW55LCBhbmQgZG5zbWFzcSBhbGxvd3MgdGhpcy4gQXNzdW1pbmcKK3RoYXQgaW50ZXJuYWwgY29tcGFueSBtYWNoaW5lcyBhcmUgYWxsIGluIHRoZSBkb21haW4gaW50ZXJuYWwubXljby5jb20KK2FuZCB0aGUgY29tcGFuaWVzIG5hbWVzZXJ2ZXIgaXMgYXQgMTkyLjE2OC4xMC4xIHRoZW4gdGhlIG9wdGlvbgorPFRUPnNlcnZlcj0vaW50ZXJuYWwubXljby5jb20vMTkyLjE2OC4xMC4xPC9UVD4gd2lsbCBkaXJlY3QgYWxsCitxdWVyaWVzIGluIHRoZSBpbnRlcm5hbCBkb21haW4gdG8gdGhlIGNvcnJlY3QgbmFtZXNlcnZlci4gWW91IGNhbgorc3BlY2lmeSBtb3JlIHRoYW4gb25lIGRvbWFpbiBpbiBlYWNoIHNlcnZlciBvcHRpb24uIElmIHRoZXJlIGlzCittb3JlIHRoYW4gb25lIG5hbWVzZXJ2ZXIganVzdCBpbmNsdWRlIGFzIG1hbnkKKzxUVD5zZXJ2ZXI8L1RUPiBvcHRpb25zIGFzIGlzIG5lZWRlZCB0byBzcGVjaWZ5IHRoZW0gYWxsLiAgCisKKzxIMj5Mb2NhbCBkb21haW5zLjwvSDI+CitTb21ldGltZXMgcGVvcGxlIGhhdmUgbG9jYWwgZG9tYWlucyB3aGljaCB0aGV5IGRvIG5vdCB3YW50IGZvcndhcmRlZAordG8gdXBzdHJlYW0gc2VydmVycy4gVGhpcyBpcyBhY2NvbW1vZGF0ZWQgYnkgdXNpbmcgc2VydmVyIG9wdGlvbnMKK3dpdGhvdXQgdGhlIHNlcnZlciBJUCBhZGRyZXNzLiBUbyBtYWtlIHRoaW5ncyBjbGVhcmVyIDxUVD5sb2NhbDwvVFQ+CitpcyBhIHN5bm9ueW0gZm9yIDxUVD5zZXJ2ZXI8L1RUPi4gRm9yIGV4YW1wbGUgdGhlIG9wdGlvbgorPFRUPmxvY2FsPS9sb2NhbG5ldC88L1RUPiBlbnN1cmVzIHRoYXQgYW55IGRvbWFpbiBuYW1lIHF1ZXJ5IHdoaWNoIGVuZHMgaW4KKzxUVD4ubG9jYWxuZXQ8L1RUPiB3aWxsIGJlIGFuc3dlcmVkIGlmIHBvc3NpYmxlIGZyb20KKzxUVD4vZXRjL2hvc3RzPC9UVD4gb3IgREhDUCwgYnV0IG5ldmVyIHNlbnQgdG8gYW4gdXBzdHJlYW0gc2VydmVyLgorCis8SDI+RGVmZWF0aW5nIHdpbGRjYXJkcyBpbiB0b3AgbGV2ZWwgZG9tYWlucy48L0gyPgorSW4gU2VwdGVtYmVyIDIwMDMgVmVyaXNpZ24gaW5zdGFsbGVkIGEgd2lsZGNhcmQgcmVjb3JkIGluIHRoZSAuY29tIGFuZAorLm5ldCB0b3AgbGV2ZWwgZG9tYWlucy4gVGhlIGVmZmVjdCBvZiB0aGlzIGlzIHRoYXQgcXVlcmllcyBmb3IKK3VucmVnaXN0ZXJlZCAuY29tIGFuZCAubmV0IG5hbWVzIG5vdyByZXR1cm4gdGhlIGFkZHJlc3Mgb2YgVmVyaXNpZ24ncworc2l0ZWZpbmRlciBzZXJ2aWNlLCByYXRoZXIgdGhhbiBhICJubyBzdWNoIGRvbWFpbiIgcmVzcG9uc2UuIFRvCityZXN0b3JlIHRoZSBjb3JyZWN0IGJlaGF2aW91ciwgeW91IGNhbiB0ZWxsIGRuc21hc3EgdGhlIGFkZHJlc3Mgb2YgdGhlCitzaXRlZmluZGVyIGhvc3QgYW5kIGhhdmUgaXQgc3Vic3RpdHV0ZSBhbiBOWERPTUFJTiByZXBseSB3aGVuIGl0IHNlZXMKK3RoYXQgYWRkcmVzcy4gVGhlIHNpdGVmaW5kZXIgYWRkcmVzcyBpcyBjdXJyZW50bHkgIDY0Ljk0LjExMC4xMSwgc28KK2dpdmluZyB0aGUgb3B0aW9uIDxUVD5ib2d1cy1ueGRvbWFpbj02NC45NC4xMTAuMTE8L1RUPiB3aWxsIGVuYWJsZQordGhpcyBmYWNpbGl0eSBmb3IgVmVyaXNpZ24uIElmIG90aGVyIFRMRHMgZG8gdGhhdCBzYW1lIHRoaW5nIHlvdSBjYW4KK2FkZCB0aGUgY29ycmVjdCBhZGRyZXNzZXMgZm9yIHRoZW0gdG9vLiBTZWUgdGhlIGRuc21hc3EgRkFRIGZvciBtb3JlCitkZXRhaWxzIG9uIHRoZSA8VFQ+Ym9ndXMtbnhkb21haW48L1RUPiBvcHRpb24uCisgCis8SDI+T3RoZXIgY29uZmlndXJhdGlvbiBkZXRhaWxzLjwvSDI+CitCeSBkZWZhdWx0IGRuc21hc3Egb2ZmZXJzIEROUyBzZXJ2aWNlIG9uIGFsbCB0aGUgY29uZmlndXJlZCBpbnRlcmZhY2VzCitvZiBhIGhvc3QuIEl0J3MgbGlrZWx5IHRoYXQgeW91IGRvbid0IChmb3IgaW5zdGFuY2UpIHdhbnQgdG8gb2ZmZXIgYQorRE5TIHNlcnZpY2UgdG8gdGhlIHdvcmxkIHZpYSBhbiBpbnRlcmZhY2UgY29ubmVjdGVkIHRvIEFEU0wgb3IKK2NhYmxlLW1vZGVtIHNvIGRuc21hc3EgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IHdoaWNoIGludGVyZmFjZXMgaXQgd2lsbAorbGlzdGVuIG9uLiBVc2UgZWl0aGVyIHRoZSA8VFQ+aW50ZXJmYWNlPC9UVD4gb3IgPFRUPmFkZHJlc3M8L1RUPiBvcHRpb25zIHRvIGRvIHRoaXMuCis8UD4KK1RoZSA8VFQ+ZmlsdGVyd2luMms8L1RUPiBvcHRpb24gbWFrZXMgZG5zbWFzcSBpZ25vcmUgY2VydGFpbiBETlMgcmVxdWVzdHMgd2hpY2gKK2FyZSBtYWRlIGJ5IFdpbmRvd3MgYm94ZW4gZXZlcnkgZmV3IG1pbnV0ZXMuIFRoZSByZXF1ZXN0cyBnZW5lcmFsbHkKK2Rvbid0IGdldCBzZW5zaWJsZSBhbnN3ZXJzIGluIHRoZSBnbG9iYWwgRE5TIGFuZCBjYXVzZSB0cm91YmxlIGJ5Cit0cmlnZ2VyaW5nIGRpYWwtb24tZGVtYW5kIGludGVybmV0IGxpbmtzLgorPFA+CitTZW5kaW5nIFNJR0hVUCB0byB0aGUgZG5zbWFzcSBwcm9jZXNzIHdpbGwgY2F1c2UgaXQgdG8gZW1wdHkgaXRzIGNhY2hlIGFuZCAKK3RoZW4gcmUtbG9hZCA8VFQ+L2V0Yy9ob3N0czwvVFQ+IGFuZCA8VFQ+L2V0Yy9yZXNvbHYuY29uZjwvVFQ+LgorPFA+IFNlbmRpbmcgU0lHVVNSMSAoa2lsbGFsbCAtMTAgZG5zbWFzcSkgdG8gdGhlIGRuc21hc3EgcHJvY2VzcyB3aWxsCitjYXVzZSB0byB3cml0ZSBjYWNoZSB1c2FnZSBzdGF0aXN0aWNzcyB0byB0aGUgbG9nLCB0eXBpY2FsbHkKKzxUVD4vdmFyL2xvZy9zeXNsb2c8L1RUPiBvciA8VFQ+L3Zhci9sb2cvbWVzc2FnZXM8L1RUPi4KKzxQPiBUaGUgPFRUPmxvZy1xdWVyaWVzPC9UVD4gb3B0aW9uIHRlbGxzIGRuc21hc3EgdG8gdmVyYm9zZWx5IGxvZyB0aGUgcXVlcmllcworaXQgaXMgaGFuZGxpbmcgYW5kIGNhdXNlcyBTSUdVU1IxIHRvIHRyaWdnZXIgYSBjb21wbGV0ZSBkdW1wIG9mIHRoZQorY29udGVudHMgb2YgdGhlIGNhY2hlIHRvIHRoZSBzeXNsb2cuCisKKzxQPkZvciBhIGNvbXBsZXRlIGxpc3Rpbmcgb2Ygb3B0aW9ucyBwbGVhc2UgdGFrZSBhIGxvb2sgYXQgdGhlIG1hbnBhZ2UKK2Ruc21hc3EoOCkuCmRpZmYgLS1naXQgYS9zcmMvQW5kcm9pZC5tayBiL3NyYy9BbmRyb2lkLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ZjRlNDEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvQW5kcm9pZC5tawpAQCAtMCwwICsxLDU0IEBACitMT0NBTF9QQVRIIDo9ICQoY2FsbCBteS1kaXIpCisKK0ROU01BU1FfVVNFX0RCVVMgPz0gbm8KK0ROU01BU1FfVVNFX0lQVjYgPz0gbm8KK0ROU01BU1FfVVNFX0lOT1RJRlkgPz0gbm8KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworaW5jbHVkZSAkKENMRUFSX1ZBUlMpCitMT0NBTF9TUkNfRklMRVMgOj0gIGJwZi5jIGNhY2hlLmMgZGJ1cy5jIGRoY3AuYyBkbnNtYXNxLmMgXAorICAgICAgICAgICAgICAgICAgICBmb3J3YXJkLmMgaGVscGVyLmMgbGVhc2UuYyBsb2cuYyBcCisgICAgICAgICAgICAgICAgICAgIG5ldGxpbmsuYyBuZXR3b3JrLmMgb3B0aW9uLmMgcmZjMTAzNS5jIFwKKwkJICAgIHJmYzIxMzEuYyB0ZnRwLmMgdXRpbC5jIGNvbm50cmFjay5jIFwKKwkJICAgIGRoY3A2LmMgcmZjMzMxNS5jIGRoY3AtY29tbW9uLmMgb3V0cGFja2V0LmMgXAorCQkgICAgcmFkdi5jIHNsYWFjLmMgYXV0aC5jIGlwc2V0LmMgZG9tYWluLmMgXAorCSAgICAgICAgICAgIGRuc3NlYy5jIGJsb2NrZGF0YS5jIHRhYmxlcy5jIFwKKwkJICAgIGxvb3AuYyBpbm90aWZ5LmMgcG9sbC5jIHJyZmlsdGVyLmMgZWRuczAuYyBhcnAuYworCitMT0NBTF9NT0RVTEUgOj0gZG5zbWFzcQorCitMT0NBTF9DX0lOQ0xVREVTIDo9IGV4dGVybmFsL2Ruc21hc3Evc3JjCisKK0xPQ0FMX0NGTEFHUyA6PSAtTzIgLWcgLVcgLVdhbGwgLVduby1wb2ludGVyLWFyaXRoIC1Xbm8tc2lnbi1jb21wYXJlIC1Xbm8tc2hpZnQtY291bnQtb3ZlcmZsb3cgLVduby1zaGlmdC1jb3VudC1uZWdhdGl2ZQorCisjIHZlcnNpb24gc3RyaW5nIGZsYWcKK0ROU01BU1FfVkVSU0lPTiA6PSAkKHNoZWxsICQoTE9DQUxfUEFUSCkvLi4vYmxkL2dldC12ZXJzaW9uICQoc2hlbGwgcHdkKS8kKExPQ0FMX1BBVEgpLy4uKQorTE9DQUxfQ0ZMQUdTICs9IC1EVkVSU0lPTj0nIiQoRE5TTUFTUV9WRVJTSU9OKSInCisKKyMgY29uZmlnIGZsYWdzCitMT0NBTF9DRkxBR1MgKz0gLURfX0FORFJPSURfXyAtRE5PX1RGVFAgLUROT19BVVRIIC1ETk9fU0NSSVBUCisKK2lmbmVxICgkKEJVSUxEX0VVUkVLQSksKQorTE9DQUxfQ0ZMQUdTICs9IC1ERVVSRUtBCitlbmRpZgorCisjIEhBVkVfREJVUyBpcyBub3QgZGVmaW5lZCBieSBkZWZhdWx0CitpZmVxICgkKEROU01BU1FfVVNFX0RCVVMpLCB5ZXMpCitMT0NBTF9DRkxBR1MgKz0gLURIQVZFX0RCVVMKK0xPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgKz0gbGliZGJ1cworTE9DQUxfQ19JTkNMVURFUyArPSBleHRlcm5hbC9kYnVzCitlbmRpZgorCisjIEhBVkVfSVBWNiBpcyBkZWZpbmVkIGJ5IGRlZmF1bHQKK2lmZXEgKCQoRE5TTUFTUV9VU0VfSVBWNiksIG5vKQorTE9DQUxfQ0ZMQUdTICs9IC1ETk9fSVBWNgorZW5kaWYKKworIyBIQVZFX0lOT1RJRlkgaXMgZGVmaW5lZCBieSBkZWZhdWx0CitpZmVxICgkKEROU01BU1FfVVNFX0lOT1RJRlkpLCBubykKK0xPQ0FMX0NGTEFHUyArPSAtRE5PX0lOT1RJRlkKK2VuZGlmCisKK0xPQ0FMX1NZU1RFTV9TSEFSRURfTElCUkFSSUVTIDo9IGxpYmxvZworCitpbmNsdWRlICQoQlVJTERfRVhFQ1VUQUJMRSkKZGlmZiAtLWdpdCBhL3NyYy9OT1RJQ0UgYi9zcmMvTk9USUNFCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYwNTQ5YmUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvTk9USUNFCkBAIC0wLDAgKzEsMzQwIEBACisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICAgICAgICAgICAgICAgICAgICAgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisJCQkgICAgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCitmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCit1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5Cit0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KK3lvdXIgcHJvZ3JhbXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CitpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCitncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCitzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCityaWdodHMuCisKKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisKKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCitzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCit0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorYXV0aG9ycycgcmVwdXRhdGlvbnMuCisKKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKK3Byb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQorcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9kaWZpY2F0aW9uIGZvbGxvdy4KKwwKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKworICAwLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIGNvbnRhaW5zCithIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZAordW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZSAiUHJvZ3JhbSIsIGJlbG93LAorcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywgYW5kIGEgIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0iCittZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OgordGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwKK2VpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyCitsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluCit0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKworQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKK3J1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0KK2lzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLgorV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCisKKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzCitzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UKK2NvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUKK2NvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUKK25vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsKK2FuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhlIFByb2dyYW0uCisKK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZAoreW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKworICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uCitvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kCitkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKK2Fib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKyAgICBhKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorCisgICAgYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluCisgICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55CisgICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKKyAgICBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5CisgICAgd2hlbiBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaAorICAgIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4KKyAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEKKyAgICBub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQgeW91IHByb3ZpZGUKKyAgICBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyCisgICAgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMKKyAgICBMaWNlbnNlLiAgKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dAorICAgIGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24KKyAgICB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKKwwKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCithbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCitlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCitleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0KK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCit1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKyAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlCisgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKyAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorICAgIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQorCitUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZQorY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQorc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCithbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUKK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CitpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisKK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKK2FjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorDAorICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcwordm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCitwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCitwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCit0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bwordGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCit0aGlzIExpY2Vuc2UuCisKKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKK2NpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAordGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAoraW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorDAorICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgorY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCitvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlCittYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcKK3Rob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcKK2NvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcwordGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKK29mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAorYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvCithZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgUHJvZ3JhbQorc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkKK2xhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKK2VpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mCit0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLgorCisgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3IKK3RvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzCittYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2Fscworb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZAorb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKKwkJCSAgICBOTyBXQVJSQU5UWQorCisgIDExLiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWQorRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOCitPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTCitQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRAorT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMKK1RPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUKK1BST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLAorUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKyAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORworV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgorUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywKK0lOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORworT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZCitZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgorUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKwwKKwkgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisKKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0Cit0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSAxOXl5ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisKKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIDE5eXkgbmFtZSBvZiBhdXRob3IKKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKworVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCitwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5CitiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKK21vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCitzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZgorbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCisgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0KKyAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCisKKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5CisgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisKK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50bworcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KZGlmZiAtLWdpdCBhL3NyYy9hcnAuYyBiL3NyYy9hcnAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzQ5MGJkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2FycC5jCkBAIC0wLDAgKzEsMjQ3IEBACisvKiBkbnNtYXNxIGlzIENvcHlyaWdodCAoYykgMjAwMC0yMDE3IFNpbW9uIEtlbGxleQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMgZGF0ZWQgMjkgSnVuZSwgMjAwNy4KKyAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2luY2x1ZGUgImRuc21hc3EuaCIKKworLyogVGltZSBiZXR3ZWVuIGZvcmNlZCByZS1sb2FkcyBmcm9tIGtlcm5lbC4gKi8KKyNkZWZpbmUgSU5URVJWQUwgOTAKKworI2RlZmluZSBBUlBfTUFSSyAgMAorI2RlZmluZSBBUlBfRk9VTkQgMSAgLyogQ29uZmlybWVkICovCisjZGVmaW5lIEFSUF9ORVcgICAyICAvKiBOZXdseSBjcmVhdGVkICovCisjZGVmaW5lIEFSUF9FTVBUWSAzICAvKiBObyBNQUMgYWRkciAqLworCitzdHJ1Y3QgYXJwX3JlY29yZCB7CisgIHVuc2lnbmVkIHNob3J0IGh3bGVuLCBzdGF0dXM7CisgIGludCBmYW1pbHk7CisgIHVuc2lnbmVkIGNoYXIgaHdhZGRyW0RIQ1BfQ0hBRERSX01BWF07IAorICBzdHJ1Y3QgYWxsX2FkZHIgYWRkcjsKKyAgc3RydWN0IGFycF9yZWNvcmQgKm5leHQ7Cit9OworCitzdGF0aWMgc3RydWN0IGFycF9yZWNvcmQgKmFycHMgPSBOVUxMLCAqb2xkID0gTlVMTCwgKmZyZWVsaXN0ID0gTlVMTDsKK3N0YXRpYyB0aW1lX3QgbGFzdCA9IDA7CisKK3N0YXRpYyBpbnQgZmlsdGVyX21hYyhpbnQgZmFtaWx5LCBjaGFyICphZGRycCwgY2hhciAqbWFjLCBzaXplX3QgbWFjbGVuLCB2b2lkICpwYXJtdikKK3sKKyAgc3RydWN0IGFycF9yZWNvcmQgKmFycDsKKworICAodm9pZClwYXJtdjsKKworICBpZiAobWFjbGVuID4gREhDUF9DSEFERFJfTUFYKQorICAgIHJldHVybiAxOworCisjaWZuZGVmIEhBVkVfSVBWNgorICBpZiAoZmFtaWx5ICE9IEFGX0lORVQpCisgICAgcmV0dXJuIDE7CisjZW5kaWYKKworICAvKiBMb29rIGZvciBleGlzdGluZyBlbnRyeSAqLworICBmb3IgKGFycCA9IGFycHM7IGFycDsgYXJwID0gYXJwLT5uZXh0KQorICAgIHsKKyAgICAgIGlmIChmYW1pbHkgIT0gYXJwLT5mYW1pbHkgfHwgYXJwLT5zdGF0dXMgPT0gQVJQX05FVykKKwljb250aW51ZTsKKyAgICAgIAorICAgICAgaWYgKGZhbWlseSA9PSBBRl9JTkVUKQorCXsKKwkgIGlmIChhcnAtPmFkZHIuYWRkci5hZGRyNC5zX2FkZHIgIT0gKChzdHJ1Y3QgaW5fYWRkciAqKWFkZHJwKS0+c19hZGRyKQorCSAgICBjb250aW51ZTsKKwl9CisjaWZkZWYgSEFWRV9JUFY2CisgICAgICBlbHNlCisJeworCSAgaWYgKCFJTjZfQVJFX0FERFJfRVFVQUwoJmFycC0+YWRkci5hZGRyLmFkZHI2LCAoc3RydWN0IGluNl9hZGRyICopYWRkcnApKQorCSAgICBjb250aW51ZTsKKwl9CisjZW5kaWYKKworICAgICAgaWYgKGFycC0+c3RhdHVzID09IEFSUF9FTVBUWSkKKwl7CisJICAvKiBleGlzdGluZyBhZGRyZXNzLCB3YXMgbmVnYXRpdmUuICovCisJICBhcnAtPnN0YXR1cyA9IEFSUF9ORVc7CisJICBhcnAtPmh3bGVuID0gbWFjbGVuOworCSAgbWVtY3B5KGFycC0+aHdhZGRyLCBtYWMsIG1hY2xlbik7CisJfQorICAgICAgZWxzZSBpZiAoYXJwLT5od2xlbiA9PSBtYWNsZW4gJiYgbWVtY21wKGFycC0+aHdhZGRyLCBtYWMsIG1hY2xlbikgPT0gMCkKKwkvKiBFeGlzdGluZyBlbnRyeSBtYXRjaGVzIC0gY29uZmlybS4gKi8KKwlhcnAtPnN0YXR1cyA9IEFSUF9GT1VORDsKKyAgICAgIGVsc2UKKwljb250aW51ZTsKKyAgICAgIAorICAgICAgYnJlYWs7CisgICAgfQorCisgIGlmICghYXJwKQorICAgIHsKKyAgICAgIC8qIE5ldyBlbnRyeSAqLworICAgICAgaWYgKGZyZWVsaXN0KQorCXsKKwkgIGFycCA9IGZyZWVsaXN0OworCSAgZnJlZWxpc3QgPSBmcmVlbGlzdC0+bmV4dDsKKwl9CisgICAgICBlbHNlIGlmICghKGFycCA9IHdoaW5lX21hbGxvYyhzaXplb2Yoc3RydWN0IGFycF9yZWNvcmQpKSkpCisJcmV0dXJuIDE7CisgICAgICAKKyAgICAgIGFycC0+bmV4dCA9IGFycHM7CisgICAgICBhcnBzID0gYXJwOworICAgICAgYXJwLT5zdGF0dXMgPSBBUlBfTkVXOworICAgICAgYXJwLT5od2xlbiA9IG1hY2xlbjsKKyAgICAgIGFycC0+ZmFtaWx5ID0gZmFtaWx5OworICAgICAgbWVtY3B5KGFycC0+aHdhZGRyLCBtYWMsIG1hY2xlbik7CisgICAgICBpZiAoZmFtaWx5ID09IEFGX0lORVQpCisJYXJwLT5hZGRyLmFkZHIuYWRkcjQuc19hZGRyID0gKChzdHJ1Y3QgaW5fYWRkciAqKWFkZHJwKS0+c19hZGRyOworI2lmZGVmIEhBVkVfSVBWNgorICAgICAgZWxzZQorCW1lbWNweSgmYXJwLT5hZGRyLmFkZHIuYWRkcjYsIGFkZHJwLCBJTjZBRERSU1opOworI2VuZGlmCisgICAgfQorICAKKyAgcmV0dXJuIDE7Cit9CisKKy8qIElmIGluIGxhenkgbW9kZSwgd2UgY2FjaGUgYWJzZW5jZSBvZiBBUlAgZW50cmllcy4gKi8KK2ludCBmaW5kX21hYyh1bmlvbiBteXNvY2thZGRyICphZGRyLCB1bnNpZ25lZCBjaGFyICptYWMsIGludCBsYXp5LCB0aW1lX3Qgbm93KQoreworICBzdHJ1Y3QgYXJwX3JlY29yZCAqYXJwLCAqdG1wLCAqKnVwOworICBpbnQgdXBkYXRlZCA9IDA7CisKKyBhZ2FpbjoKKyAgCisgIC8qIElmIHRoZSBkYXRhYmFzZSBpcyBsZXNzIHRoZW4gSU5URVJWQUwgb2xkLCBsb29rIGluIHRoZXJlICovCisgIGlmIChkaWZmdGltZShub3csIGxhc3QpIDwgSU5URVJWQUwpCisgICAgeworICAgICAgLyogYWRkciA9PSBOVUxMIC0+IGp1c3QgbWFrZSBjYWNoZSB1cC10by1kYXRlICovCisgICAgICBpZiAoIWFkZHIpCisJcmV0dXJuIDA7CisKKyAgICAgIGZvciAoYXJwID0gYXJwczsgYXJwOyBhcnAgPSBhcnAtPm5leHQpCisJeworCSAgaWYgKGFkZHItPnNhLnNhX2ZhbWlseSAhPSBhcnAtPmZhbWlseSkKKwkgICAgY29udGludWU7CisJICAgIAorCSAgaWYgKGFycC0+ZmFtaWx5ID09IEFGX0lORVQgJiYKKwkgICAgICBhcnAtPmFkZHIuYWRkci5hZGRyNC5zX2FkZHIgIT0gYWRkci0+aW4uc2luX2FkZHIuc19hZGRyKQorCSAgICBjb250aW51ZTsKKwkgICAgCisjaWZkZWYgSEFWRV9JUFY2CisJICBpZiAoYXJwLT5mYW1pbHkgPT0gQUZfSU5FVDYgJiYgCisJICAgICAgIUlONl9BUkVfQUREUl9FUVVBTCgmYXJwLT5hZGRyLmFkZHIuYWRkcjYsICZhZGRyLT5pbjYuc2luNl9hZGRyKSkKKwkgICAgY29udGludWU7CisjZW5kaWYKKwkgIAorCSAgLyogT25seSBhY2NlcHQgcG9zaXRpdmUgZW50cmllcyB1bmxlc3MgaW4gbGF6eSBtb2RlLiAqLworCSAgaWYgKGFycC0+c3RhdHVzICE9IEFSUF9FTVBUWSB8fCBsYXp5IHx8IHVwZGF0ZWQpCisJICAgIHsKKwkgICAgICBpZiAobWFjICYmIGFycC0+aHdsZW4gIT0gMCkKKwkJbWVtY3B5KG1hYywgYXJwLT5od2FkZHIsIGFycC0+aHdsZW4pOworCSAgICAgIHJldHVybiBhcnAtPmh3bGVuOworCSAgICB9CisJfQorICAgIH0KKworICAvKiBOb3QgZm91bmQsIHRyeSB0aGUga2VybmVsICovCisgIGlmICghdXBkYXRlZCkKKyAgICAgeworICAgICAgIHVwZGF0ZWQgPSAxOworICAgICAgIGxhc3QgPSBub3c7CisKKyAgICAgICAvKiBNYXJrIGFsbCBub24tbmVnYXRpdmUgZW50cmllcyAqLworICAgICAgIGZvciAoYXJwID0gYXJwczsgYXJwOyBhcnAgPSBhcnAtPm5leHQpCisJIGlmIChhcnAtPnN0YXR1cyAhPSBBUlBfRU1QVFkpCisJICAgYXJwLT5zdGF0dXMgPSBBUlBfTUFSSzsKKyAgICAgICAKKyAgICAgICBpZmFjZV9lbnVtZXJhdGUoQUZfVU5TUEVDLCBOVUxMLCBmaWx0ZXJfbWFjKTsKKyAgICAgICAKKyAgICAgICAvKiBSZW1vdmUgYWxsIHVuY29uZmlybWVkIGVudHJpZXMgdG8gb2xkIGxpc3QuICovCisgICAgICAgZm9yIChhcnAgPSBhcnBzLCB1cCA9ICZhcnBzOyBhcnA7IGFycCA9IHRtcCkKKwkgeworCSAgIHRtcCA9IGFycC0+bmV4dDsKKwkgICAKKwkgICBpZiAoYXJwLT5zdGF0dXMgPT0gQVJQX01BUkspCisJICAgICB7CisJICAgICAgICp1cCA9IGFycC0+bmV4dDsKKwkgICAgICAgYXJwLT5uZXh0ID0gb2xkOworCSAgICAgICBvbGQgPSBhcnA7CisJICAgICB9CisJICAgZWxzZQorCSAgICAgdXAgPSAmYXJwLT5uZXh0OworCSB9CisKKyAgICAgICBnb3RvIGFnYWluOworICAgICB9CisKKyAgLyogcmVjb3JkIGZhaWx1cmUsIHNvIHdlIGRvbid0IGNvbnN1bHQgdGhlIGtlcm5lbCBlYWNoIHRpbWUKKyAgICAgd2UncmUgYXNrZWQgZm9yIHRoaXMgYWRkcmVzcyAqLworICBpZiAoZnJlZWxpc3QpCisgICAgeworICAgICAgYXJwID0gZnJlZWxpc3Q7CisgICAgICBmcmVlbGlzdCA9IGZyZWVsaXN0LT5uZXh0OworICAgIH0KKyAgZWxzZQorICAgIGFycCA9IHdoaW5lX21hbGxvYyhzaXplb2Yoc3RydWN0IGFycF9yZWNvcmQpKTsKKyAgCisgIGlmIChhcnApCisgICAgeyAgICAgIAorICAgICAgYXJwLT5uZXh0ID0gYXJwczsKKyAgICAgIGFycHMgPSBhcnA7CisgICAgICBhcnAtPnN0YXR1cyA9IEFSUF9FTVBUWTsKKyAgICAgIGFycC0+ZmFtaWx5ID0gYWRkci0+c2Euc2FfZmFtaWx5OworICAgICAgYXJwLT5od2xlbiA9IDA7CisKKyAgICAgIGlmIChhZGRyLT5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCkKKwlhcnAtPmFkZHIuYWRkci5hZGRyNC5zX2FkZHIgPSBhZGRyLT5pbi5zaW5fYWRkci5zX2FkZHI7CisjaWZkZWYgSEFWRV9JUFY2CisgICAgICBlbHNlCisJbWVtY3B5KCZhcnAtPmFkZHIuYWRkci5hZGRyNiwgJmFkZHItPmluNi5zaW42X2FkZHIsIElONkFERFJTWik7CisjZW5kaWYKKyAgICB9CisJICAKKyAgIHJldHVybiAwOworfQorCitpbnQgZG9fYXJwX3NjcmlwdF9ydW4odm9pZCkKK3sKKyAgc3RydWN0IGFycF9yZWNvcmQgKmFycDsKKyAgCisgIC8qIE5vdGlmeSBhbnkgd2hpY2ggd2VudCwgdGhlbiBtb3ZlIHRvIGZyZWUgbGlzdCAqLworICBpZiAob2xkKQorICAgIHsKKyNpZmRlZiBIQVZFX1NDUklQVAorICAgICAgaWYgKG9wdGlvbl9ib29sKE9QVF9TQ1JJUFRfQVJQKSkKKwlxdWV1ZV9hcnAoQUNUSU9OX0FSUF9ERUwsIG9sZC0+aHdhZGRyLCBvbGQtPmh3bGVuLCBvbGQtPmZhbWlseSwgJm9sZC0+YWRkcik7CisjZW5kaWYKKyAgICAgIGFycCA9IG9sZDsKKyAgICAgIG9sZCA9IGFycC0+bmV4dDsKKyAgICAgIGFycC0+bmV4dCA9IGZyZWVsaXN0OworICAgICAgZnJlZWxpc3QgPSBhcnA7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgZm9yIChhcnAgPSBhcnBzOyBhcnA7IGFycCA9IGFycC0+bmV4dCkKKyAgICBpZiAoYXJwLT5zdGF0dXMgPT0gQVJQX05FVykKKyAgICAgIHsKKyNpZmRlZiBIQVZFX1NDUklQVAorCWlmIChvcHRpb25fYm9vbChPUFRfU0NSSVBUX0FSUCkpCisJICBxdWV1ZV9hcnAoQUNUSU9OX0FSUCwgYXJwLT5od2FkZHIsIGFycC0+aHdsZW4sIGFycC0+ZmFtaWx5LCAmYXJwLT5hZGRyKTsKKyNlbmRpZgorCWFycC0+c3RhdHVzID0gQVJQX0ZPVU5EOworCXJldHVybiAxOworICAgICAgfQorCisgIHJldHVybiAwOworfQorCisKZGlmZiAtLWdpdCBhL3NyYy9hdXRoLmMgYi9zcmMvYXV0aC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmOTVmOTgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYXV0aC5jCkBAIC0wLDAgKzEsODg5IEBACisvKiBkbnNtYXNxIGlzIENvcHlyaWdodCAoYykgMjAwMC0yMDE3IFNpbW9uIEtlbGxleQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMgZGF0ZWQgMjkgSnVuZSwgMjAwNy4KKyAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2luY2x1ZGUgImRuc21hc3EuaCIKKworI2lmZGVmIEhBVkVfQVVUSAorCitzdGF0aWMgc3RydWN0IGFkZHJsaXN0ICpmaW5kX2FkZHJsaXN0KHN0cnVjdCBhZGRybGlzdCAqbGlzdCwgaW50IGZsYWcsIHN0cnVjdCBhbGxfYWRkciAqYWRkcl91KQoreworICBkbyB7CisgICAgaWYgKCEobGlzdC0+ZmxhZ3MgJiBBRERSTElTVF9JUFY2KSkKKyAgICAgIHsKKwlzdHJ1Y3QgaW5fYWRkciBuZXRtYXNrLCBhZGRyID0gYWRkcl91LT5hZGRyLmFkZHI0OworCQorCWlmICghKGZsYWcgJiBGX0lQVjQpKQorCSAgY29udGludWU7CisJCisJbmV0bWFzay5zX2FkZHIgPSBodG9ubCh+KGluX2FkZHJfdCkwIDw8ICgzMiAtIGxpc3QtPnByZWZpeGxlbikpOworCQorCWlmICAoaXNfc2FtZV9uZXQoYWRkciwgbGlzdC0+YWRkci5hZGRyLmFkZHI0LCBuZXRtYXNrKSkKKwkgIHJldHVybiBsaXN0OworICAgICAgfQorI2lmZGVmIEhBVkVfSVBWNgorICAgIGVsc2UgaWYgKGlzX3NhbWVfbmV0NigmKGFkZHJfdS0+YWRkci5hZGRyNiksICZsaXN0LT5hZGRyLmFkZHIuYWRkcjYsIGxpc3QtPnByZWZpeGxlbikpCisgICAgICByZXR1cm4gbGlzdDsKKyNlbmRpZgorICAgIAorICB9IHdoaWxlICgobGlzdCA9IGxpc3QtPm5leHQpKTsKKyAgCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGFkZHJsaXN0ICpmaW5kX3N1Ym5ldChzdHJ1Y3QgYXV0aF96b25lICp6b25lLCBpbnQgZmxhZywgc3RydWN0IGFsbF9hZGRyICphZGRyX3UpCit7CisgIGlmICghem9uZS0+c3VibmV0KQorICAgIHJldHVybiBOVUxMOworICAKKyAgcmV0dXJuIGZpbmRfYWRkcmxpc3Qoem9uZS0+c3VibmV0LCBmbGFnLCBhZGRyX3UpOworfQorCitzdGF0aWMgc3RydWN0IGFkZHJsaXN0ICpmaW5kX2V4Y2x1ZGUoc3RydWN0IGF1dGhfem9uZSAqem9uZSwgaW50IGZsYWcsIHN0cnVjdCBhbGxfYWRkciAqYWRkcl91KQoreworICBpZiAoIXpvbmUtPmV4Y2x1ZGUpCisgICAgcmV0dXJuIE5VTEw7CisgIAorICByZXR1cm4gZmluZF9hZGRybGlzdCh6b25lLT5leGNsdWRlLCBmbGFnLCBhZGRyX3UpOworfQorCitzdGF0aWMgaW50IGZpbHRlcl96b25lKHN0cnVjdCBhdXRoX3pvbmUgKnpvbmUsIGludCBmbGFnLCBzdHJ1Y3QgYWxsX2FkZHIgKmFkZHJfdSkKK3sKKyAgaWYgKGZpbmRfZXhjbHVkZSh6b25lLCBmbGFnLCBhZGRyX3UpKQorICAgIHJldHVybiAwOworCisgIC8qIE5vIHN1Ym5ldHMgc3BlY2lmaWVkLCBubyBmaWx0ZXIgKi8KKyAgaWYgKCF6b25lLT5zdWJuZXQpCisgICAgcmV0dXJuIDE7CisgIAorICByZXR1cm4gZmluZF9zdWJuZXQoem9uZSwgZmxhZywgYWRkcl91KSAhPSBOVUxMOworfQorCitpbnQgaW5fem9uZShzdHJ1Y3QgYXV0aF96b25lICp6b25lLCBjaGFyICpuYW1lLCBjaGFyICoqY3V0KQoreworICBzaXplX3QgbmFtZWxlbiA9IHN0cmxlbihuYW1lKTsKKyAgc2l6ZV90IGRvbWFpbmxlbiA9IHN0cmxlbih6b25lLT5kb21haW4pOworCisgIGlmIChjdXQpCisgICAgKmN1dCA9IE5VTEw7CisgIAorICBpZiAobmFtZWxlbiA+PSBkb21haW5sZW4gJiYgCisgICAgICBob3N0bmFtZV9pc2VxdWFsKHpvbmUtPmRvbWFpbiwgJm5hbWVbbmFtZWxlbiAtIGRvbWFpbmxlbl0pKQorICAgIHsKKyAgICAgIAorICAgICAgaWYgKG5hbWVsZW4gPT0gZG9tYWlubGVuKQorCXJldHVybiAxOworICAgICAgCisgICAgICBpZiAobmFtZVtuYW1lbGVuIC0gZG9tYWlubGVuIC0gMV0gPT0gJy4nKQorCXsKKwkgIGlmIChjdXQpCisJICAgICpjdXQgPSAmbmFtZVtuYW1lbGVuIC0gZG9tYWlubGVuIC0gMV07IAorCSAgcmV0dXJuIDE7CisJfQorICAgIH0KKworICByZXR1cm4gMDsKK30KKworCitzaXplX3QgYW5zd2VyX2F1dGgoc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgY2hhciAqbGltaXQsIHNpemVfdCBxbGVuLCB0aW1lX3Qgbm93LCB1bmlvbiBteXNvY2thZGRyICpwZWVyX2FkZHIsIAorCQkgICBpbnQgbG9jYWxfcXVlcnksIGludCBkb19iaXQsIGludCBoYXZlX3BzZXVkb2hlYWRlcikgCit7CisgIGNoYXIgKm5hbWUgPSBkYWVtb24tPm5hbWVidWZmOworICB1bnNpZ25lZCBjaGFyICpwLCAqYW5zcDsKKyAgaW50IHF0eXBlLCBxY2xhc3M7CisgIGludCBuYW1lb2Zmc2V0LCBheGZyb2Zmc2V0ID0gMDsKKyAgaW50IHEsIGFuc2NvdW50ID0gMCwgYXV0aGNvdW50ID0gMDsKKyAgc3RydWN0IGNyZWMgKmNyZWNwOworICBpbnQgIGF1dGggPSAhbG9jYWxfcXVlcnksIHRydW5jID0gMCwgbnhkb21haW4gPSAxLCBzb2EgPSAwLCBucyA9IDAsIGF4ZnIgPSAwOworICBzdHJ1Y3QgYXV0aF96b25lICp6b25lID0gTlVMTDsKKyAgc3RydWN0IGFkZHJsaXN0ICpzdWJuZXQgPSBOVUxMOworICBjaGFyICpjdXQ7CisgIHN0cnVjdCBteF9zcnZfcmVjb3JkICpyZWMsICptb3ZlLCAqKnVwOworICBzdHJ1Y3QgdHh0X3JlY29yZCAqdHh0OworICBzdHJ1Y3QgaW50ZXJmYWNlX25hbWUgKmludHI7CisgIHN0cnVjdCBuYXB0ciAqbmE7CisgIHN0cnVjdCBhbGxfYWRkciBhZGRyOworICBzdHJ1Y3QgY25hbWUgKmEsICpjYW5kaWRhdGU7CisgIHVuc2lnbmVkIGludCB3Y2xlbjsKKyAgCisgIGlmIChudG9ocyhoZWFkZXItPnFkY291bnQpID09IDAgfHwgT1BDT0RFKGhlYWRlcikgIT0gUVVFUlkgKQorICAgIHJldHVybiAwOworCisgIC8qIGRldGVybWluZSBlbmQgb2YgcXVlc3Rpb24gc2VjdGlvbiAod2UgcHV0IGFuc3dlcnMgdGhlcmUpICovCisgIGlmICghKGFuc3AgPSBza2lwX3F1ZXN0aW9ucyhoZWFkZXIsIHFsZW4pKSkKKyAgICByZXR1cm4gMDsgLyogYmFkIHBhY2tldCAqLworICAKKyAgLyogbm93IHByb2Nlc3MgZWFjaCBxdWVzdGlvbiwgYW5zd2VycyBnbyBpbiBSUnMgYWZ0ZXIgdGhlIHF1ZXN0aW9uICovCisgIHAgPSAodW5zaWduZWQgY2hhciAqKShoZWFkZXIrMSk7CisKKyAgZm9yIChxID0gbnRvaHMoaGVhZGVyLT5xZGNvdW50KTsgcSAhPSAwOyBxLS0pCisgICAgeworICAgICAgdW5zaWduZWQgc2hvcnQgZmxhZyA9IDA7CisgICAgICBpbnQgZm91bmQgPSAwOworICAgICAgaW50IGNuYW1lX3dpbGRjYXJkID0gMDsKKyAgCisgICAgICAvKiBzYXZlIHBvaW50ZXIgdG8gbmFtZSBmb3IgY29weWluZyBpbnRvIGFuc3dlcnMgKi8KKyAgICAgIG5hbWVvZmZzZXQgPSBwIC0gKHVuc2lnbmVkIGNoYXIgKiloZWFkZXI7CisKKyAgICAgIC8qIG5vdyBleHRyYWN0IG5hbWUgYXMgLi1jb25jYXRlbmF0ZWQgc3RyaW5nIGludG8gbmFtZSAqLworICAgICAgaWYgKCFleHRyYWN0X25hbWUoaGVhZGVyLCBxbGVuLCAmcCwgbmFtZSwgMSwgNCkpCisJcmV0dXJuIDA7IC8qIGJhZCBwYWNrZXQgKi8KKyAKKyAgICAgIEdFVFNIT1JUKHF0eXBlLCBwKTsgCisgICAgICBHRVRTSE9SVChxY2xhc3MsIHApOworICAgICAgCisgICAgICBpZiAocWNsYXNzICE9IENfSU4pCisJeworCSAgYXV0aCA9IDA7CisJICBjb250aW51ZTsKKwl9CisKKyAgICAgIGlmICgocXR5cGUgPT0gVF9QVFIgfHwgcXR5cGUgPT0gVF9TT0EgfHwgcXR5cGUgPT0gVF9OUykgJiYKKwkgIChmbGFnID0gaW5fYXJwYV9uYW1lXzJfYWRkcihuYW1lLCAmYWRkcikpICYmCisJICAhbG9jYWxfcXVlcnkpCisJeworCSAgZm9yICh6b25lID0gZGFlbW9uLT5hdXRoX3pvbmVzOyB6b25lOyB6b25lID0gem9uZS0+bmV4dCkKKwkgICAgaWYgKChzdWJuZXQgPSBmaW5kX3N1Ym5ldCh6b25lLCBmbGFnLCAmYWRkcikpKQorCSAgICAgIGJyZWFrOworCSAgCisJICBpZiAoIXpvbmUpCisJICAgIHsKKwkgICAgICBhdXRoID0gMDsKKwkgICAgICBjb250aW51ZTsKKwkgICAgfQorCSAgZWxzZSBpZiAocXR5cGUgPT0gVF9TT0EpCisJICAgIHNvYSA9IDEsIGZvdW5kID0gMTsKKwkgIGVsc2UgaWYgKHF0eXBlID09IFRfTlMpCisJICAgIG5zID0gMSwgZm91bmQgPSAxOworCX0KKworICAgICAgaWYgKHF0eXBlID09IFRfUFRSICYmIGZsYWcpCisJeworCSAgaW50ciA9IE5VTEw7CisKKwkgIGlmIChmbGFnID09IEZfSVBWNCkKKwkgICAgZm9yIChpbnRyID0gZGFlbW9uLT5pbnRfbmFtZXM7IGludHI7IGludHIgPSBpbnRyLT5uZXh0KQorCSAgICAgIHsKKwkJc3RydWN0IGFkZHJsaXN0ICphZGRybGlzdDsKKwkJCisJCWZvciAoYWRkcmxpc3QgPSBpbnRyLT5hZGRyOyBhZGRybGlzdDsgYWRkcmxpc3QgPSBhZGRybGlzdC0+bmV4dCkKKwkJICBpZiAoIShhZGRybGlzdC0+ZmxhZ3MgJiBBRERSTElTVF9JUFY2KSAmJiBhZGRyLmFkZHIuYWRkcjQuc19hZGRyID09IGFkZHJsaXN0LT5hZGRyLmFkZHIuYWRkcjQuc19hZGRyKQorCQkgICAgYnJlYWs7CisJCQorCQlpZiAoYWRkcmxpc3QpCisJCSAgYnJlYWs7CisJCWVsc2UKKwkJICB3aGlsZSAoaW50ci0+bmV4dCAmJiBzdHJjbXAoaW50ci0+aW50ciwgaW50ci0+bmV4dC0+aW50cikgPT0gMCkKKwkJICAgIGludHIgPSBpbnRyLT5uZXh0OworCSAgICAgIH0KKyNpZmRlZiBIQVZFX0lQVjYKKwkgIGVsc2UgaWYgKGZsYWcgPT0gRl9JUFY2KQorCSAgICBmb3IgKGludHIgPSBkYWVtb24tPmludF9uYW1lczsgaW50cjsgaW50ciA9IGludHItPm5leHQpCisJICAgICAgeworCQlzdHJ1Y3QgYWRkcmxpc3QgKmFkZHJsaXN0OworCQkKKwkJZm9yIChhZGRybGlzdCA9IGludHItPmFkZHI7IGFkZHJsaXN0OyBhZGRybGlzdCA9IGFkZHJsaXN0LT5uZXh0KQorCQkgIGlmICgoYWRkcmxpc3QtPmZsYWdzICYgQUREUkxJU1RfSVBWNikgJiYgSU42X0FSRV9BRERSX0VRVUFMKCZhZGRyLmFkZHIuYWRkcjYsICZhZGRybGlzdC0+YWRkci5hZGRyLmFkZHI2KSkKKwkJICAgIGJyZWFrOworCQkKKwkJaWYgKGFkZHJsaXN0KQorCQkgIGJyZWFrOworCQllbHNlCisJCSAgd2hpbGUgKGludHItPm5leHQgJiYgc3RyY21wKGludHItPmludHIsIGludHItPm5leHQtPmludHIpID09IDApCisJCSAgICBpbnRyID0gaW50ci0+bmV4dDsKKwkgICAgICB9CisjZW5kaWYKKwkgIAorCSAgaWYgKGludHIpCisJICAgIHsKKwkgICAgICBpZiAobG9jYWxfcXVlcnkgfHwgaW5fem9uZSh6b25lLCBpbnRyLT5uYW1lLCBOVUxMKSkKKwkJewkKKwkJICBmb3VuZCA9IDE7CisJCSAgbG9nX3F1ZXJ5KGZsYWcgfCBGX1JFVkVSU0UgfCBGX0NPTkZJRywgaW50ci0+bmFtZSwgJmFkZHIsIE5VTEwpOworCQkgIGlmIChhZGRfcmVzb3VyY2VfcmVjb3JkKGhlYWRlciwgbGltaXQsICZ0cnVuYywgbmFtZW9mZnNldCwgJmFuc3AsIAorCQkJCQkgIGRhZW1vbi0+YXV0aF90dGwsIE5VTEwsCisJCQkJCSAgVF9QVFIsIENfSU4sICJkIiwgaW50ci0+bmFtZSkpCisJCSAgICBhbnNjb3VudCsrOworCQl9CisJICAgIH0KKwkgIAorCSAgaWYgKChjcmVjcCA9IGNhY2hlX2ZpbmRfYnlfYWRkcihOVUxMLCAmYWRkciwgbm93LCBmbGFnKSkpCisJICAgIGRvIHsgCisJICAgICAgc3RyY3B5KG5hbWUsIGNhY2hlX2dldF9uYW1lKGNyZWNwKSk7CisJICAgICAgCisJICAgICAgaWYgKGNyZWNwLT5mbGFncyAmIEZfREhDUCAmJiAhb3B0aW9uX2Jvb2woT1BUX0RIQ1BfRlFETikpCisJCXsKKwkJICBjaGFyICpwID0gc3RyY2hyKG5hbWUsICcuJyk7CisJCSAgaWYgKHApCisJCSAgICAqcCA9IDA7IC8qIG11c3QgYmUgYmFyZSBuYW1lICovCisJCSAgCisJCSAgLyogYWRkICBleHRlcm5hbCBkb21haW4gKi8KKwkJICBpZiAoem9uZSkKKwkJICAgIHsKKwkJICAgICAgc3RyY2F0KG5hbWUsICIuIik7CisJCSAgICAgIHN0cmNhdChuYW1lLCB6b25lLT5kb21haW4pOworCQkgICAgfQorCQkgIGxvZ19xdWVyeShmbGFnIHwgRl9ESENQIHwgRl9SRVZFUlNFLCBuYW1lLCAmYWRkciwgcmVjb3JkX3NvdXJjZShjcmVjcC0+dWlkKSk7CisJCSAgZm91bmQgPSAxOworCQkgIGlmIChhZGRfcmVzb3VyY2VfcmVjb3JkKGhlYWRlciwgbGltaXQsICZ0cnVuYywgbmFtZW9mZnNldCwgJmFuc3AsIAorCQkJCQkgIGRhZW1vbi0+YXV0aF90dGwsIE5VTEwsCisJCQkJCSAgVF9QVFIsIENfSU4sICJkIiwgbmFtZSkpCisJCSAgICBhbnNjb3VudCsrOworCQl9CisJICAgICAgZWxzZSBpZiAoY3JlY3AtPmZsYWdzICYgKEZfREhDUCB8IEZfSE9TVFMpICYmIChsb2NhbF9xdWVyeSB8fCBpbl96b25lKHpvbmUsIG5hbWUsIE5VTEwpKSkKKwkJeworCQkgIGxvZ19xdWVyeShjcmVjcC0+ZmxhZ3MgJiB+Rl9GT1JXQVJELCBuYW1lLCAmYWRkciwgcmVjb3JkX3NvdXJjZShjcmVjcC0+dWlkKSk7CisJCSAgZm91bmQgPSAxOworCQkgIGlmIChhZGRfcmVzb3VyY2VfcmVjb3JkKGhlYWRlciwgbGltaXQsICZ0cnVuYywgbmFtZW9mZnNldCwgJmFuc3AsIAorCQkJCQkgIGRhZW1vbi0+YXV0aF90dGwsIE5VTEwsCisJCQkJCSAgVF9QVFIsIENfSU4sICJkIiwgbmFtZSkpCisJCSAgICBhbnNjb3VudCsrOworCQl9CisJICAgICAgZWxzZQorCQljb250aW51ZTsKKwkJICAgIAorCSAgICB9IHdoaWxlICgoY3JlY3AgPSBjYWNoZV9maW5kX2J5X2FkZHIoY3JlY3AsICZhZGRyLCBub3csIGZsYWcpKSk7CisKKwkgIGlmIChmb3VuZCkKKwkgICAgbnhkb21haW4gPSAwOworCSAgZWxzZQorCSAgICBsb2dfcXVlcnkoZmxhZyB8IEZfTkVHIHwgRl9OWERPTUFJTiB8IEZfUkVWRVJTRSB8IChhdXRoID8gRl9BVVRIIDogMCksIE5VTEwsICZhZGRyLCBOVUxMKTsKKworCSAgY29udGludWU7CisJfQorICAgICAgCisgICAgY25hbWVfcmVzdGFydDoKKyAgICAgIGlmIChmb3VuZCkKKwkvKiBOUyBhbmQgU09BIC5hcnBhIHJlcXVlc3RzIGhhdmUgc2V0IGZvdW5kIGFib3ZlLiAqLworCWN1dCA9IE5VTEw7CisgICAgICBlbHNlCisJeworCSAgZm9yICh6b25lID0gZGFlbW9uLT5hdXRoX3pvbmVzOyB6b25lOyB6b25lID0gem9uZS0+bmV4dCkKKwkgICAgaWYgKGluX3pvbmUoem9uZSwgbmFtZSwgJmN1dCkpCisJICAgICAgYnJlYWs7CisJICAKKwkgIGlmICghem9uZSkKKwkgICAgeworCSAgICAgIGF1dGggPSAwOworCSAgICAgIGNvbnRpbnVlOworCSAgICB9CisJfQorCisgICAgICBmb3IgKHJlYyA9IGRhZW1vbi0+bXhuYW1lczsgcmVjOyByZWMgPSByZWMtPm5leHQpCisJaWYgKCFyZWMtPmlzc3J2ICYmIGhvc3RuYW1lX2lzZXF1YWwobmFtZSwgcmVjLT5uYW1lKSkKKwkgIHsKKwkgICAgbnhkb21haW4gPSAwOworCSAgICAgICAgIAorCSAgICBpZiAocXR5cGUgPT0gVF9NWCkKKwkgICAgICB7CisJCWZvdW5kID0gMTsKKwkJbG9nX3F1ZXJ5KEZfQ09ORklHIHwgRl9SUk5BTUUsIG5hbWUsIE5VTEwsICI8TVg+Iik7IAorCQlpZiAoYWRkX3Jlc291cmNlX3JlY29yZChoZWFkZXIsIGxpbWl0LCAmdHJ1bmMsIG5hbWVvZmZzZXQsICZhbnNwLCBkYWVtb24tPmF1dGhfdHRsLAorCQkJCQlOVUxMLCBUX01YLCBDX0lOLCAic2QiLCByZWMtPndlaWdodCwgcmVjLT50YXJnZXQpKQorCQkgIGFuc2NvdW50Kys7CisJICAgICAgfQorCSAgfQorICAgICAgCisgICAgICBmb3IgKG1vdmUgPSBOVUxMLCB1cCA9ICZkYWVtb24tPm14bmFtZXMsIHJlYyA9IGRhZW1vbi0+bXhuYW1lczsgcmVjOyByZWMgPSByZWMtPm5leHQpCisJaWYgKHJlYy0+aXNzcnYgJiYgaG9zdG5hbWVfaXNlcXVhbChuYW1lLCByZWMtPm5hbWUpKQorCSAgeworCSAgICBueGRvbWFpbiA9IDA7CisJICAgIAorCSAgICBpZiAocXR5cGUgPT0gVF9TUlYpCisJICAgICAgeworCQlmb3VuZCA9IDE7CisJCWxvZ19xdWVyeShGX0NPTkZJRyB8IEZfUlJOQU1FLCBuYW1lLCBOVUxMLCAiPFNSVj4iKTsgCisJCWlmIChhZGRfcmVzb3VyY2VfcmVjb3JkKGhlYWRlciwgbGltaXQsICZ0cnVuYywgbmFtZW9mZnNldCwgJmFuc3AsIGRhZW1vbi0+YXV0aF90dGwsCisJCQkJCU5VTEwsIFRfU1JWLCBDX0lOLCAic3NzZCIsIAorCQkJCQlyZWMtPnByaW9yaXR5LCByZWMtPndlaWdodCwgcmVjLT5zcnZwb3J0LCByZWMtPnRhcmdldCkpCisKKwkJICBhbnNjb3VudCsrOworCSAgICAgIH0gCisJICAgIAorCSAgICAvKiB1bmxpbmsgZmlyc3QgU1JWIHJlY29yZCBmb3VuZCAqLworCSAgICBpZiAoIW1vdmUpCisJICAgICAgeworCQltb3ZlID0gcmVjOworCQkqdXAgPSByZWMtPm5leHQ7CisJICAgICAgfQorCSAgICBlbHNlCisJICAgICAgdXAgPSAmcmVjLT5uZXh0OyAgICAgIAorCSAgfQorCWVsc2UKKwkgIHVwID0gJnJlYy0+bmV4dDsKKwkgIAorICAgICAgLyogcHV0IGZpcnN0IFNSViByZWNvcmQgYmFjayBhdCB0aGUgZW5kLiAqLworICAgICAgaWYgKG1vdmUpCisJeworCSAgKnVwID0gbW92ZTsKKwkgIG1vdmUtPm5leHQgPSBOVUxMOworCX0KKworICAgICAgZm9yICh0eHQgPSBkYWVtb24tPnJyOyB0eHQ7IHR4dCA9IHR4dC0+bmV4dCkKKwlpZiAoaG9zdG5hbWVfaXNlcXVhbChuYW1lLCB0eHQtPm5hbWUpKQorCSAgeworCSAgICBueGRvbWFpbiA9IDA7CisJICAgIGlmICh0eHQtPmNsYXNzID09IHF0eXBlKQorCSAgICAgIHsKKwkJZm91bmQgPSAxOworCQlsb2dfcXVlcnkoRl9DT05GSUcgfCBGX1JSTkFNRSwgbmFtZSwgTlVMTCwgIjxSUj4iKTsgCisJCWlmIChhZGRfcmVzb3VyY2VfcmVjb3JkKGhlYWRlciwgbGltaXQsICZ0cnVuYywgbmFtZW9mZnNldCwgJmFuc3AsIGRhZW1vbi0+YXV0aF90dGwsCisJCQkJCU5VTEwsIHR4dC0+Y2xhc3MsIENfSU4sICJ0IiwgdHh0LT5sZW4sIHR4dC0+dHh0KSkKKwkJICBhbnNjb3VudCsrOworCSAgICAgIH0KKwkgIH0KKyAgICAgIAorICAgICAgZm9yICh0eHQgPSBkYWVtb24tPnR4dDsgdHh0OyB0eHQgPSB0eHQtPm5leHQpCisJaWYgKHR4dC0+Y2xhc3MgPT0gQ19JTiAmJiBob3N0bmFtZV9pc2VxdWFsKG5hbWUsIHR4dC0+bmFtZSkpCisJICB7CisJICAgIG54ZG9tYWluID0gMDsKKwkgICAgaWYgKHF0eXBlID09IFRfVFhUKQorCSAgICAgIHsKKwkJZm91bmQgPSAxOworCQlsb2dfcXVlcnkoRl9DT05GSUcgfCBGX1JSTkFNRSwgbmFtZSwgTlVMTCwgIjxUWFQ+Iik7IAorCQlpZiAoYWRkX3Jlc291cmNlX3JlY29yZChoZWFkZXIsIGxpbWl0LCAmdHJ1bmMsIG5hbWVvZmZzZXQsICZhbnNwLCBkYWVtb24tPmF1dGhfdHRsLAorCQkJCQlOVUxMLCBUX1RYVCwgQ19JTiwgInQiLCB0eHQtPmxlbiwgdHh0LT50eHQpKQorCQkgIGFuc2NvdW50Kys7CisJICAgICAgfQorCSAgfQorCisgICAgICAgZm9yIChuYSA9IGRhZW1vbi0+bmFwdHI7IG5hOyBuYSA9IG5hLT5uZXh0KQorCSBpZiAoaG9zdG5hbWVfaXNlcXVhbChuYW1lLCBuYS0+bmFtZSkpCisJICAgeworCSAgICAgbnhkb21haW4gPSAwOworCSAgICAgaWYgKHF0eXBlID09IFRfTkFQVFIpCisJICAgICAgIHsKKwkJIGZvdW5kID0gMTsKKwkJIGxvZ19xdWVyeShGX0NPTkZJRyB8IEZfUlJOQU1FLCBuYW1lLCBOVUxMLCAiPE5BUFRSPiIpOworCQkgaWYgKGFkZF9yZXNvdXJjZV9yZWNvcmQoaGVhZGVyLCBsaW1pdCwgJnRydW5jLCBuYW1lb2Zmc2V0LCAmYW5zcCwgZGFlbW9uLT5hdXRoX3R0bCwgCisJCQkJCSBOVUxMLCBUX05BUFRSLCBDX0lOLCAic3N6enpkIiwgCisJCQkJCSBuYS0+b3JkZXIsIG5hLT5wcmVmLCBuYS0+ZmxhZ3MsIG5hLT5zZXJ2aWNlcywgbmEtPnJlZ2V4cCwgbmEtPnJlcGxhY2UpKQorCQkJICBhbnNjb3VudCsrOworCSAgICAgICB9CisJICAgfQorICAgIAorICAgICAgIGlmIChxdHlwZSA9PSBUX0EpCisJIGZsYWcgPSBGX0lQVjQ7CisgICAgICAgCisjaWZkZWYgSEFWRV9JUFY2CisgICAgICAgaWYgKHF0eXBlID09IFRfQUFBQSkKKwkgZmxhZyA9IEZfSVBWNjsKKyNlbmRpZgorICAgICAgIAorICAgICAgIGZvciAoaW50ciA9IGRhZW1vbi0+aW50X25hbWVzOyBpbnRyOyBpbnRyID0gaW50ci0+bmV4dCkKKwkgaWYgKGhvc3RuYW1lX2lzZXF1YWwobmFtZSwgaW50ci0+bmFtZSkpCisJICAgeworCSAgICAgc3RydWN0IGFkZHJsaXN0ICphZGRybGlzdDsKKwkgICAgIAorCSAgICAgbnhkb21haW4gPSAwOworCSAgICAgCisJICAgICBpZiAoZmxhZykKKwkgICAgICAgZm9yIChhZGRybGlzdCA9IGludHItPmFkZHI7IGFkZHJsaXN0OyBhZGRybGlzdCA9IGFkZHJsaXN0LT5uZXh0KSAgCisJCSBpZiAoKChhZGRybGlzdC0+ZmxhZ3MgJiBBRERSTElTVF9JUFY2KSAgPyBUX0FBQUEgOiBUX0EpID09IHF0eXBlICYmCisJCSAgICAgKGxvY2FsX3F1ZXJ5IHx8IGZpbHRlcl96b25lKHpvbmUsIGZsYWcsICZhZGRybGlzdC0+YWRkcikpKQorCQkgICB7CisjaWZkZWYgSEFWRV9JUFY2CisJCSAgICAgaWYgKGFkZHJsaXN0LT5mbGFncyAmIEFERFJMSVNUX1JFVk9OTFkpCisJCSAgICAgICBjb250aW51ZTsKKyNlbmRpZgorCQkgICAgIGZvdW5kID0gMTsKKwkJICAgICBsb2dfcXVlcnkoRl9GT1JXQVJEIHwgRl9DT05GSUcgfCBmbGFnLCBuYW1lLCAmYWRkcmxpc3QtPmFkZHIsIE5VTEwpOworCQkgICAgIGlmIChhZGRfcmVzb3VyY2VfcmVjb3JkKGhlYWRlciwgbGltaXQsICZ0cnVuYywgbmFtZW9mZnNldCwgJmFuc3AsIAorCQkJCQkgICAgIGRhZW1vbi0+YXV0aF90dGwsIE5VTEwsIHF0eXBlLCBDX0lOLCAKKwkJCQkJICAgICBxdHlwZSA9PSBUX0EgPyAiNCIgOiAiNiIsICZhZGRybGlzdC0+YWRkcikpCisJCSAgICAgICBhbnNjb3VudCsrOworCQkgICB9CisJICAgICB9CisgICAgICAgCisgICAgICBpZiAoIWN1dCkKKwl7CisJICBueGRvbWFpbiA9IDA7CisJICAKKwkgIGlmIChxdHlwZSA9PSBUX1NPQSkKKwkgICAgeworCSAgICAgIGF1dGggPSBzb2EgPSAxOyAvKiBpbmhpYml0cyBhdXRoIHNlY3Rpb24gKi8KKwkgICAgICBmb3VuZCA9IDE7CisJICAgICAgbG9nX3F1ZXJ5KEZfUlJOQU1FIHwgRl9BVVRILCB6b25lLT5kb21haW4sIE5VTEwsICI8U09BPiIpOworCSAgICB9CisgICAgICAJICBlbHNlIGlmIChxdHlwZSA9PSBUX0FYRlIpCisJICAgIHsKKwkgICAgICBzdHJ1Y3QgaW5hbWUgKnBlZXJzOworCSAgICAgIAorCSAgICAgIGlmIChwZWVyX2FkZHItPnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKQorCQlwZWVyX2FkZHItPmluLnNpbl9wb3J0ID0gMDsKKyNpZmRlZiBIQVZFX0lQVjYKKwkgICAgICBlbHNlCisJCXsKKwkJICBwZWVyX2FkZHItPmluNi5zaW42X3BvcnQgPSAwOyAKKwkJICBwZWVyX2FkZHItPmluNi5zaW42X3Njb3BlX2lkID0gMDsKKwkJfQorI2VuZGlmCisJICAgICAgCisJICAgICAgZm9yIChwZWVycyA9IGRhZW1vbi0+YXV0aF9wZWVyczsgcGVlcnM7IHBlZXJzID0gcGVlcnMtPm5leHQpCisJCWlmIChzb2NrYWRkcl9pc2VxdWFsKHBlZXJfYWRkciwgJnBlZXJzLT5hZGRyKSkKKwkJICBicmVhazsKKwkgICAgICAKKwkgICAgICAvKiBSZWZ1c2UgYWxsIEFYRlIgdW5sZXNzIC0tYXV0aC1zZWMtc2VydmVycyBpcyBzZXQgKi8KKwkgICAgICBpZiAoKCFwZWVycyAmJiBkYWVtb24tPmF1dGhfcGVlcnMpIHx8ICFkYWVtb24tPnNlY29uZGFyeV9mb3J3YXJkX3NlcnZlcikKKwkJeworCQkgIGlmIChwZWVyX2FkZHItPnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKQorCQkgICAgaW5ldF9udG9wKEFGX0lORVQsICZwZWVyX2FkZHItPmluLnNpbl9hZGRyLCBkYWVtb24tPmFkZHJidWZmLCBBRERSU1RSTEVOKTsKKyNpZmRlZiBIQVZFX0lQVjYKKwkJICBlbHNlCisJCSAgICBpbmV0X250b3AoQUZfSU5FVDYsICZwZWVyX2FkZHItPmluNi5zaW42X2FkZHIsIGRhZW1vbi0+YWRkcmJ1ZmYsIEFERFJTVFJMRU4pOyAKKyNlbmRpZgorCQkgIAorCQkgIG15X3N5c2xvZyhMT0dfV0FSTklORywgXygiaWdub3Jpbmcgem9uZSB0cmFuc2ZlciByZXF1ZXN0IGZyb20gJXMiKSwgZGFlbW9uLT5hZGRyYnVmZik7CisJCSAgcmV0dXJuIDA7CisJCX0KKwkgICAgICAgCSAgICAgIAorCSAgICAgIGF1dGggPSAxOworCSAgICAgIHNvYSA9IDE7IC8qIGluaGliaXRzIGF1dGggc2VjdGlvbiAqLworCSAgICAgIG5zID0gMTsgLyogZW5zdXJlIHdlIGluY2x1ZGUgTlMgcmVjb3JkcyEgKi8KKwkgICAgICBheGZyID0gMTsKKwkgICAgICBmb3VuZCA9IDE7CisJICAgICAgYXhmcm9mZnNldCA9IG5hbWVvZmZzZXQ7CisJICAgICAgbG9nX3F1ZXJ5KEZfUlJOQU1FIHwgRl9BVVRILCB6b25lLT5kb21haW4sIE5VTEwsICI8QVhGUj4iKTsKKwkgICAgfQorICAgICAgCSAgZWxzZSBpZiAocXR5cGUgPT0gVF9OUykKKwkgICAgeworCSAgICAgIGF1dGggPSAxOworCSAgICAgIG5zID0gMTsgLyogaW5oaWJpdHMgYXV0aCBzZWN0aW9uICovCisJICAgICAgZm91bmQgPSAxOworCSAgICAgIGxvZ19xdWVyeShGX1JSTkFNRSB8IEZfQVVUSCwgem9uZS0+ZG9tYWluLCBOVUxMLCAiPE5TPiIpOyAKKwkgICAgfQorCX0KKyAgICAgIAorICAgICAgaWYgKCFvcHRpb25fYm9vbChPUFRfREhDUF9GUUROKSAmJiBjdXQpCisJewkgIAorCSAgKmN1dCA9IDA7IC8qIHJlbW92ZSBkb21haW4gcGFydCAqLworCSAgCisJICBpZiAoIXN0cmNocihuYW1lLCAnLicpICYmIChjcmVjcCA9IGNhY2hlX2ZpbmRfYnlfbmFtZShOVUxMLCBuYW1lLCBub3csIEZfSVBWNCB8IEZfSVBWNikpKQorCSAgICB7CisJICAgICAgaWYgKGNyZWNwLT5mbGFncyAmIEZfREhDUCkKKwkJZG8KKwkJICB7IAorCQkgICAgbnhkb21haW4gPSAwOworCQkgICAgaWYgKChjcmVjcC0+ZmxhZ3MgJiBmbGFnKSAmJiAKKwkJCShsb2NhbF9xdWVyeSB8fCBmaWx0ZXJfem9uZSh6b25lLCBmbGFnLCAmKGNyZWNwLT5hZGRyLmFkZHIpKSkpCisJCSAgICAgIHsKKwkJCSpjdXQgPSAnLic7IC8qIHJlc3RvcmUgZG9tYWluIHBhcnQgKi8KKwkJCWxvZ19xdWVyeShjcmVjcC0+ZmxhZ3MsIG5hbWUsICZjcmVjcC0+YWRkci5hZGRyLCByZWNvcmRfc291cmNlKGNyZWNwLT51aWQpKTsKKwkJCSpjdXQgID0gMDsgLyogcmVtb3ZlIGRvbWFpbiBwYXJ0ICovCisJCQlmb3VuZCA9IDE7CisJCQlpZiAoYWRkX3Jlc291cmNlX3JlY29yZChoZWFkZXIsIGxpbWl0LCAmdHJ1bmMsIG5hbWVvZmZzZXQsICZhbnNwLCAKKwkJCQkJCWRhZW1vbi0+YXV0aF90dGwsIE5VTEwsIHF0eXBlLCBDX0lOLCAKKwkJCQkJCXF0eXBlID09IFRfQSA/ICI0IiA6ICI2IiwgJmNyZWNwLT5hZGRyKSkKKwkJCSAgYW5zY291bnQrKzsKKwkJICAgICAgfQorCQkgIH0gd2hpbGUgKChjcmVjcCA9IGNhY2hlX2ZpbmRfYnlfbmFtZShjcmVjcCwgbmFtZSwgbm93LCAgRl9JUFY0IHwgRl9JUFY2KSkpOworCSAgICB9CisgICAgICAgCSAgCisJICAqY3V0ID0gJy4nOyAvKiByZXN0b3JlIGRvbWFpbiBwYXJ0ICovCSAgICAKKwl9CisgICAgICAKKyAgICAgIGlmICgoY3JlY3AgPSBjYWNoZV9maW5kX2J5X25hbWUoTlVMTCwgbmFtZSwgbm93LCBGX0lQVjQgfCBGX0lQVjYpKSkKKwl7CisJICBpZiAoKGNyZWNwLT5mbGFncyAmIEZfSE9TVFMpIHx8ICgoKGNyZWNwLT5mbGFncyAmIEZfREhDUCkgJiYgb3B0aW9uX2Jvb2woT1BUX0RIQ1BfRlFETikpKSkKKwkgICAgZG8KKwkgICAgICB7IAorCQkgbnhkb21haW4gPSAwOworCQkgaWYgKChjcmVjcC0+ZmxhZ3MgJiBmbGFnKSAmJiAobG9jYWxfcXVlcnkgfHwgZmlsdGVyX3pvbmUoem9uZSwgZmxhZywgJihjcmVjcC0+YWRkci5hZGRyKSkpKQorCQkgICB7CisJCSAgICAgbG9nX3F1ZXJ5KGNyZWNwLT5mbGFncywgbmFtZSwgJmNyZWNwLT5hZGRyLmFkZHIsIHJlY29yZF9zb3VyY2UoY3JlY3AtPnVpZCkpOworCQkgICAgIGZvdW5kID0gMTsKKwkJICAgICBpZiAoYWRkX3Jlc291cmNlX3JlY29yZChoZWFkZXIsIGxpbWl0LCAmdHJ1bmMsIG5hbWVvZmZzZXQsICZhbnNwLCAKKwkJCQkJICAgICBkYWVtb24tPmF1dGhfdHRsLCBOVUxMLCBxdHlwZSwgQ19JTiwgCisJCQkJCSAgICAgcXR5cGUgPT0gVF9BID8gIjQiIDogIjYiLCAmY3JlY3AtPmFkZHIpKQorCQkgICAgICAgYW5zY291bnQrKzsKKwkJICAgfQorCSAgICAgIH0gd2hpbGUgKChjcmVjcCA9IGNhY2hlX2ZpbmRfYnlfbmFtZShjcmVjcCwgbmFtZSwgbm93LCBGX0lQVjQgfCBGX0lQVjYpKSk7CisJfQorICAgICAgCisgICAgICAvKiBPbmx5IHN1cHBseSBDTkFNRSBpZiBubyByZWNvcmQgZm9yIGFueSB0eXBlIGlzIGtub3duLiAqLworICAgICAgaWYgKG54ZG9tYWluKQorCXsKKwkgIC8qIENoZWNrIGZvciBwb3NzaWJsZSB3aWxkY2FyZCBtYXRjaCBhZ2FpbnN0ICouZG9tYWluIAorCSAgICAgcmV0dXJuIGxlbmd0aCBvZiBtYXRjaCwgdG8gZ2V0IGxvbmdlc3QuCisJICAgICBOb3RlIHRoYXQgaWYgcmV0dXJuIGxlbmd0aCBvZiB3aWxkY2FyZCBzZWN0aW9uLCBzbworCSAgICAgd2UgbWF0Y2ggYi5zaW1vbiB0byBfYm90aF8gKi5zaW1vbiBhbmQgYi5zaW1vbgorCSAgICAgYnV0IHJldHVybiBhIGxvbmdlciAoYmV0dGVyKSBtYXRjaCB0byBiLnNpbW9uLgorCSAgKi8gIAorCSAgZm9yICh3Y2xlbiA9IDAsIGNhbmRpZGF0ZSA9IE5VTEwsIGEgPSBkYWVtb24tPmNuYW1lczsgYTsgYSA9IGEtPm5leHQpCisJICAgIGlmIChhLT5hbGlhc1swXSA9PSAnKicpCisJICAgICAgeworCQljaGFyICp0ZXN0ID0gbmFtZTsKKwkJCisJCXdoaWxlICgodGVzdCA9IHN0cmNocih0ZXN0KzEsICcuJykpKQorCQkgIHsKKwkJICAgIGlmIChob3N0bmFtZV9pc2VxdWFsKHRlc3QsICYoYS0+YWxpYXNbMV0pKSkKKwkJICAgICAgeworCQkJaWYgKHN0cmxlbih0ZXN0KSA+IHdjbGVuICYmICFjbmFtZV93aWxkY2FyZCkKKwkJCSAgeworCQkJICAgIHdjbGVuID0gc3RybGVuKHRlc3QpOworCQkJICAgIGNhbmRpZGF0ZSA9IGE7CisJCQkgICAgY25hbWVfd2lsZGNhcmQgPSAxOworCQkJICB9CisJCQlicmVhazsKKwkJICAgICAgfQorCQkgIH0KKwkJCisJICAgICAgfQorCSAgICBlbHNlIGlmIChob3N0bmFtZV9pc2VxdWFsKGEtPmFsaWFzLCBuYW1lKSAmJiBzdHJsZW4oYS0+YWxpYXMpID4gd2NsZW4pCisJICAgICAgeworCQkvKiBTaW1wbGUgY2FzZSwgbm8gd2lsZGNhcmQgKi8KKwkJd2NsZW4gPSBzdHJsZW4oYS0+YWxpYXMpOworCQljYW5kaWRhdGUgPSBhOworCSAgICAgIH0KKwkgIAorCSAgaWYgKGNhbmRpZGF0ZSkKKwkgICAgeworCSAgICAgIGxvZ19xdWVyeShGX0NPTkZJRyB8IEZfQ05BTUUsIG5hbWUsIE5VTEwsIE5VTEwpOworCSAgICAgIHN0cmNweShuYW1lLCBjYW5kaWRhdGUtPnRhcmdldCk7CisJICAgICAgaWYgKCFzdHJjaHIobmFtZSwgJy4nKSkKKwkJeworCQkgIHN0cmNhdChuYW1lLCAiLiIpOworCQkgIHN0cmNhdChuYW1lLCB6b25lLT5kb21haW4pOworCQl9CisJICAgICAgZm91bmQgPSAxOworCSAgICAgIGlmIChhZGRfcmVzb3VyY2VfcmVjb3JkKGhlYWRlciwgbGltaXQsICZ0cnVuYywgbmFtZW9mZnNldCwgJmFuc3AsIAorCQkJCSAgICAgIGRhZW1vbi0+YXV0aF90dGwsICZuYW1lb2Zmc2V0LAorCQkJCSAgICAgIFRfQ05BTUUsIENfSU4sICJkIiwgbmFtZSkpCisJCWFuc2NvdW50Kys7CisJICAgICAgCisJICAgICAgZ290byBjbmFtZV9yZXN0YXJ0OworCSAgICB9CisKKwkgIGxvZ19xdWVyeShmbGFnIHwgRl9ORUcgfCAobnhkb21haW4gPyBGX05YRE9NQUlOIDogMCkgfCBGX0ZPUldBUkQgfCBGX0FVVEgsIG5hbWUsIE5VTEwsIE5VTEwpOworCX0KKyAgICAgIAorICAgIH0KKyAgCisgIC8qIEFkZCBhdXRoIHNlY3Rpb24gKi8KKyAgaWYgKGF1dGggJiYgem9uZSkKKyAgICB7CisgICAgICBjaGFyICphdXRobmFtZTsKKyAgICAgIGludCBuZXdvZmZzZXQsIG9mZnNldCA9IDA7CisKKyAgICAgIGlmICghc3VibmV0KQorCWF1dGhuYW1lID0gem9uZS0+ZG9tYWluOworICAgICAgZWxzZQorCXsKKwkgIC8qIGhhbmRsZSBOUyBhbmQgU09BIGZvciBQVFIgcmVjb3JkcyAqLworCSAgCisJICBhdXRobmFtZSA9IG5hbWU7CisKKwkgIGlmICghKHN1Ym5ldC0+ZmxhZ3MgJiBBRERSTElTVF9JUFY2KSkKKwkgICAgeworCSAgICAgIGluX2FkZHJfdCBhID0gbnRvaGwoc3VibmV0LT5hZGRyLmFkZHIuYWRkcjQuc19hZGRyKSA+PiA4OworCSAgICAgIGNoYXIgKnAgPSBuYW1lOworCSAgICAgIAorCSAgICAgIGlmIChzdWJuZXQtPnByZWZpeGxlbiA+PSAyNCkKKwkJcCArPSBzcHJpbnRmKHAsICIldS4iLCBhICYgMHhmZik7CisJICAgICAgYSA9IGEgPj4gODsKKwkgICAgICBpZiAoc3VibmV0LT5wcmVmaXhsZW4gPj0gMTYgKQorCQlwICs9IHNwcmludGYocCwgIiV1LiIsIGEgJiAweGZmKTsKKwkgICAgICBhID0gYSA+PiA4OworCSAgICAgIHAgKz0gc3ByaW50ZihwLCAiJXUuaW4tYWRkci5hcnBhIiwgYSAmIDB4ZmYpOworCSAgICAgIAorCSAgICB9CisjaWZkZWYgSEFWRV9JUFY2CisJICBlbHNlCisJICAgIHsKKwkgICAgICBjaGFyICpwID0gbmFtZTsKKwkgICAgICBpbnQgaTsKKwkgICAgICAKKwkgICAgICBmb3IgKGkgPSBzdWJuZXQtPnByZWZpeGxlbi0xOyBpID49IDA7IGkgLT0gNCkKKwkJeyAKKwkJICBpbnQgZGlnID0gKCh1bnNpZ25lZCBjaGFyICopJnN1Ym5ldC0+YWRkci5hZGRyLmFkZHI2KVtpPj4zXTsKKwkJICBwICs9IHNwcmludGYocCwgIiUuMXguIiwgKGk+PjIpICYgMSA/IGRpZyAmIDE1IDogZGlnID4+IDQpOworCQl9CisJICAgICAgcCArPSBzcHJpbnRmKHAsICJpcDYuYXJwYSIpOworCSAgICAgIAorCSAgICB9CisjZW5kaWYKKwl9CisgICAgICAKKyAgICAgIC8qIGhhbmRsZSBOUyBhbmQgU09BIGluIGF1dGggc2VjdGlvbiBvciBmb3IgZXhwbGljaXQgcXVlcmllcyAqLworICAgICAgIG5ld29mZnNldCA9IGFuc3AgLSAodW5zaWduZWQgY2hhciAqKWhlYWRlcjsKKyAgICAgICBpZiAoKChhbnNjb3VudCA9PSAwICYmICFucykgfHwgc29hKSAmJgorCSAgYWRkX3Jlc291cmNlX3JlY29yZChoZWFkZXIsIGxpbWl0LCAmdHJ1bmMsIDAsICZhbnNwLCAKKwkJCSAgICAgIGRhZW1vbi0+YXV0aF90dGwsIE5VTEwsIFRfU09BLCBDX0lOLCAiZGRsbGxsbCIsCisJCQkgICAgICBhdXRobmFtZSwgZGFlbW9uLT5hdXRoc2VydmVyLCAgZGFlbW9uLT5ob3N0bWFzdGVyLAorCQkJICAgICAgZGFlbW9uLT5zb2Ffc24sIGRhZW1vbi0+c29hX3JlZnJlc2gsIAorCQkJICAgICAgZGFlbW9uLT5zb2FfcmV0cnksIGRhZW1vbi0+c29hX2V4cGlyeSwgCisJCQkgICAgICBkYWVtb24tPmF1dGhfdHRsKSkKKwl7CisJICBvZmZzZXQgPSBuZXdvZmZzZXQ7CisJICBpZiAoc29hKQorCSAgICBhbnNjb3VudCsrOworCSAgZWxzZQorCSAgICBhdXRoY291bnQrKzsKKwl9CisgICAgICAKKyAgICAgIGlmIChhbnNjb3VudCAhPSAwIHx8IG5zKQorCXsKKwkgIHN0cnVjdCBuYW1lX2xpc3QgKnNlY29uZGFyeTsKKwkgIAorCSAgbmV3b2Zmc2V0ID0gYW5zcCAtICh1bnNpZ25lZCBjaGFyICopaGVhZGVyOworCSAgaWYgKGFkZF9yZXNvdXJjZV9yZWNvcmQoaGVhZGVyLCBsaW1pdCwgJnRydW5jLCAtb2Zmc2V0LCAmYW5zcCwgCisJCQkJICBkYWVtb24tPmF1dGhfdHRsLCBOVUxMLCBUX05TLCBDX0lOLCAiZCIsIG9mZnNldCA9PSAwID8gYXV0aG5hbWUgOiBOVUxMLCBkYWVtb24tPmF1dGhzZXJ2ZXIpKQorCSAgICB7CisJICAgICAgaWYgKG9mZnNldCA9PSAwKSAKKwkJb2Zmc2V0ID0gbmV3b2Zmc2V0OworCSAgICAgIGlmIChucykgCisJCWFuc2NvdW50Kys7CisJICAgICAgZWxzZQorCQlhdXRoY291bnQrKzsKKwkgICAgfQorCisJICBpZiAoIXN1Ym5ldCkKKwkgICAgZm9yIChzZWNvbmRhcnkgPSBkYWVtb24tPnNlY29uZGFyeV9mb3J3YXJkX3NlcnZlcjsgc2Vjb25kYXJ5OyBzZWNvbmRhcnkgPSBzZWNvbmRhcnktPm5leHQpCisJICAgICAgaWYgKGFkZF9yZXNvdXJjZV9yZWNvcmQoaGVhZGVyLCBsaW1pdCwgJnRydW5jLCBvZmZzZXQsICZhbnNwLCAKKwkJCQkgICAgICBkYWVtb24tPmF1dGhfdHRsLCBOVUxMLCBUX05TLCBDX0lOLCAiZCIsIHNlY29uZGFyeS0+bmFtZSkpCisJCXsKKwkJICBpZiAobnMpIAorCQkgICAgYW5zY291bnQrKzsKKwkJICBlbHNlCisJCSAgICBhdXRoY291bnQrKzsKKwkJfQorCX0KKyAgICAgIAorICAgICAgaWYgKGF4ZnIpCisJeworCSAgZm9yIChyZWMgPSBkYWVtb24tPm14bmFtZXM7IHJlYzsgcmVjID0gcmVjLT5uZXh0KQorCSAgICBpZiAoaW5fem9uZSh6b25lLCByZWMtPm5hbWUsICZjdXQpKQorCSAgICAgIHsKKwkJaWYgKGN1dCkKKwkJICAgKmN1dCA9IDA7CisKKwkJaWYgKHJlYy0+aXNzcnYpCisJCSAgeworCQkgICAgaWYgKGFkZF9yZXNvdXJjZV9yZWNvcmQoaGVhZGVyLCBsaW1pdCwgJnRydW5jLCAtYXhmcm9mZnNldCwgJmFuc3AsIGRhZW1vbi0+YXV0aF90dGwsCisJCQkJCSAgICBOVUxMLCBUX1NSViwgQ19JTiwgInNzc2QiLCBjdXQgPyByZWMtPm5hbWUgOiBOVUxMLAorCQkJCQkgICAgcmVjLT5wcmlvcml0eSwgcmVjLT53ZWlnaHQsIHJlYy0+c3J2cG9ydCwgcmVjLT50YXJnZXQpKQorCQkgICAgICAKKwkJICAgICAgYW5zY291bnQrKzsKKwkJICB9CisJCWVsc2UKKwkJICB7CisJCSAgICBpZiAoYWRkX3Jlc291cmNlX3JlY29yZChoZWFkZXIsIGxpbWl0LCAmdHJ1bmMsIC1heGZyb2Zmc2V0LCAmYW5zcCwgZGFlbW9uLT5hdXRoX3R0bCwKKwkJCQkJICAgIE5VTEwsIFRfTVgsIENfSU4sICJzZCIsIGN1dCA/IHJlYy0+bmFtZSA6IE5VTEwsIHJlYy0+d2VpZ2h0LCByZWMtPnRhcmdldCkpCisJCSAgICAgIGFuc2NvdW50Kys7CisJCSAgfQorCQkKKwkJLyogcmVzdG9yZSBjb25maWcgZGF0YSAqLworCQlpZiAoY3V0KQorCQkgICpjdXQgPSAnLic7CisJICAgICAgfQorCSAgICAgIAorCSAgZm9yICh0eHQgPSBkYWVtb24tPnJyOyB0eHQ7IHR4dCA9IHR4dC0+bmV4dCkKKwkgICAgaWYgKGluX3pvbmUoem9uZSwgdHh0LT5uYW1lLCAmY3V0KSkKKwkgICAgICB7CisJCWlmIChjdXQpCisJCSAgKmN1dCA9IDA7CisJCQorCQlpZiAoYWRkX3Jlc291cmNlX3JlY29yZChoZWFkZXIsIGxpbWl0LCAmdHJ1bmMsIC1heGZyb2Zmc2V0LCAmYW5zcCwgZGFlbW9uLT5hdXRoX3R0bCwKKwkJCQkJTlVMTCwgdHh0LT5jbGFzcywgQ19JTiwgInQiLCAgY3V0ID8gdHh0LT5uYW1lIDogTlVMTCwgdHh0LT5sZW4sIHR4dC0+dHh0KSkKKwkJICBhbnNjb3VudCsrOworCQkKKwkJLyogcmVzdG9yZSBjb25maWcgZGF0YSAqLworCQlpZiAoY3V0KQorCQkgICpjdXQgPSAnLic7CisJICAgICAgfQorCSAgCisJICBmb3IgKHR4dCA9IGRhZW1vbi0+dHh0OyB0eHQ7IHR4dCA9IHR4dC0+bmV4dCkKKwkgICAgaWYgKHR4dC0+Y2xhc3MgPT0gQ19JTiAmJiBpbl96b25lKHpvbmUsIHR4dC0+bmFtZSwgJmN1dCkpCisJICAgICAgeworCQlpZiAoY3V0KQorCQkgICpjdXQgPSAwOworCQkKKwkJaWYgKGFkZF9yZXNvdXJjZV9yZWNvcmQoaGVhZGVyLCBsaW1pdCwgJnRydW5jLCAtYXhmcm9mZnNldCwgJmFuc3AsIGRhZW1vbi0+YXV0aF90dGwsCisJCQkJCU5VTEwsIFRfVFhULCBDX0lOLCAidCIsIGN1dCA/IHR4dC0+bmFtZSA6IE5VTEwsIHR4dC0+bGVuLCB0eHQtPnR4dCkpCisJCSAgYW5zY291bnQrKzsKKwkJCisJCS8qIHJlc3RvcmUgY29uZmlnIGRhdGEgKi8KKwkJaWYgKGN1dCkKKwkJICAqY3V0ID0gJy4nOworCSAgICAgIH0KKwkgIAorCSAgZm9yIChuYSA9IGRhZW1vbi0+bmFwdHI7IG5hOyBuYSA9IG5hLT5uZXh0KQorCSAgICBpZiAoaW5fem9uZSh6b25lLCBuYS0+bmFtZSwgJmN1dCkpCisJICAgICAgeworCQlpZiAoY3V0KQorCQkgICpjdXQgPSAwOworCQkKKwkJaWYgKGFkZF9yZXNvdXJjZV9yZWNvcmQoaGVhZGVyLCBsaW1pdCwgJnRydW5jLCAtYXhmcm9mZnNldCwgJmFuc3AsIGRhZW1vbi0+YXV0aF90dGwsIAorCQkJCQlOVUxMLCBUX05BUFRSLCBDX0lOLCAic3N6enpkIiwgY3V0ID8gbmEtPm5hbWUgOiBOVUxMLAorCQkJCQluYS0+b3JkZXIsIG5hLT5wcmVmLCBuYS0+ZmxhZ3MsIG5hLT5zZXJ2aWNlcywgbmEtPnJlZ2V4cCwgbmEtPnJlcGxhY2UpKQorCQkgIGFuc2NvdW50Kys7CisJCQorCQkvKiByZXN0b3JlIGNvbmZpZyBkYXRhICovCisJCWlmIChjdXQpCisJCSAgKmN1dCA9ICcuJzsgCisJICAgICAgfQorCSAgCisJICBmb3IgKGludHIgPSBkYWVtb24tPmludF9uYW1lczsgaW50cjsgaW50ciA9IGludHItPm5leHQpCisJICAgIGlmIChpbl96b25lKHpvbmUsIGludHItPm5hbWUsICZjdXQpKQorCSAgICAgIHsKKwkJc3RydWN0IGFkZHJsaXN0ICphZGRybGlzdDsKKwkJCisJCWlmIChjdXQpCisJCSAgKmN1dCA9IDA7CisJCQorCQlmb3IgKGFkZHJsaXN0ID0gaW50ci0+YWRkcjsgYWRkcmxpc3Q7IGFkZHJsaXN0ID0gYWRkcmxpc3QtPm5leHQpIAorCQkgIGlmICghKGFkZHJsaXN0LT5mbGFncyAmIEFERFJMSVNUX0lQVjYpICYmCisJCSAgICAgIChsb2NhbF9xdWVyeSB8fCBmaWx0ZXJfem9uZSh6b25lLCBGX0lQVjQsICZhZGRybGlzdC0+YWRkcikpICYmIAorCQkgICAgICBhZGRfcmVzb3VyY2VfcmVjb3JkKGhlYWRlciwgbGltaXQsICZ0cnVuYywgLWF4ZnJvZmZzZXQsICZhbnNwLCAKKwkJCQkJICBkYWVtb24tPmF1dGhfdHRsLCBOVUxMLCBUX0EsIENfSU4sICI0IiwgY3V0ID8gaW50ci0+bmFtZSA6IE5VTEwsICZhZGRybGlzdC0+YWRkcikpCisJCSAgICBhbnNjb3VudCsrOworCQkKKyNpZmRlZiBIQVZFX0lQVjYKKwkJZm9yIChhZGRybGlzdCA9IGludHItPmFkZHI7IGFkZHJsaXN0OyBhZGRybGlzdCA9IGFkZHJsaXN0LT5uZXh0KSAKKwkJICBpZiAoKGFkZHJsaXN0LT5mbGFncyAmIEFERFJMSVNUX0lQVjYpICYmIAorCQkgICAgICAobG9jYWxfcXVlcnkgfHwgZmlsdGVyX3pvbmUoem9uZSwgRl9JUFY2LCAmYWRkcmxpc3QtPmFkZHIpKSAmJgorCQkgICAgICBhZGRfcmVzb3VyY2VfcmVjb3JkKGhlYWRlciwgbGltaXQsICZ0cnVuYywgLWF4ZnJvZmZzZXQsICZhbnNwLCAKKwkJCQkJICBkYWVtb24tPmF1dGhfdHRsLCBOVUxMLCBUX0FBQUEsIENfSU4sICI2IiwgY3V0ID8gaW50ci0+bmFtZSA6IE5VTEwsICZhZGRybGlzdC0+YWRkcikpCisJCSAgICBhbnNjb3VudCsrOworI2VuZGlmCQkgICAgCisJCQorCQkvKiByZXN0b3JlIGNvbmZpZyBkYXRhICovCisJCWlmIChjdXQpCisJCSAgKmN1dCA9ICcuJzsgCisJICAgICAgfQorICAgICAgICAgICAgIAorCSAgZm9yIChhID0gZGFlbW9uLT5jbmFtZXM7IGE7IGEgPSBhLT5uZXh0KQorCSAgICBpZiAoaW5fem9uZSh6b25lLCBhLT5hbGlhcywgJmN1dCkpCisJICAgICAgeworCQlzdHJjcHkobmFtZSwgYS0+dGFyZ2V0KTsKKwkJaWYgKCFzdHJjaHIobmFtZSwgJy4nKSkKKwkJICB7CisJCSAgICBzdHJjYXQobmFtZSwgIi4iKTsKKwkJICAgIHN0cmNhdChuYW1lLCB6b25lLT5kb21haW4pOworCQkgIH0KKwkJCisJCWlmIChjdXQpCisJCSAgKmN1dCA9IDA7CisJCQorCQlpZiAoYWRkX3Jlc291cmNlX3JlY29yZChoZWFkZXIsIGxpbWl0LCAmdHJ1bmMsIC1heGZyb2Zmc2V0LCAmYW5zcCwgCisJCQkJCWRhZW1vbi0+YXV0aF90dGwsIE5VTEwsCisJCQkJCVRfQ05BTUUsIENfSU4sICJkIiwgIGN1dCA/IGEtPmFsaWFzIDogTlVMTCwgbmFtZSkpCisJCSAgYW5zY291bnQrKzsKKwkgICAgICB9CisJCisJICBjYWNoZV9lbnVtZXJhdGUoMSk7CisJICB3aGlsZSAoKGNyZWNwID0gY2FjaGVfZW51bWVyYXRlKDApKSkKKwkgICAgeworCSAgICAgIGlmICgoY3JlY3AtPmZsYWdzICYgKEZfSVBWNCB8IEZfSVBWNikpICYmCisJCSAgIShjcmVjcC0+ZmxhZ3MgJiAoRl9ORUcgfCBGX05YRE9NQUlOKSkgJiYKKwkJICAoY3JlY3AtPmZsYWdzICYgRl9GT1JXQVJEKSkKKwkJeworCQkgIGlmICgoY3JlY3AtPmZsYWdzICYgRl9ESENQKSAmJiAhb3B0aW9uX2Jvb2woT1BUX0RIQ1BfRlFETikpCisJCSAgICB7CisJCSAgICAgIGNoYXIgKmNhY2hlX25hbWUgPSBjYWNoZV9nZXRfbmFtZShjcmVjcCk7CisJCSAgICAgIGlmICghc3RyY2hyKGNhY2hlX25hbWUsICcuJykgJiYgCisJCQkgIChsb2NhbF9xdWVyeSB8fCBmaWx0ZXJfem9uZSh6b25lLCAoY3JlY3AtPmZsYWdzICYgKEZfSVBWNiB8IEZfSVBWNCkpLCAmKGNyZWNwLT5hZGRyLmFkZHIpKSkpCisJCQl7CisJCQkgIHF0eXBlID0gVF9BOworI2lmZGVmIEhBVkVfSVBWNgorCQkJICBpZiAoY3JlY3AtPmZsYWdzICYgRl9JUFY2KQorCQkJICAgIHF0eXBlID0gVF9BQUFBOworI2VuZGlmCisJCQkgIGlmIChhZGRfcmVzb3VyY2VfcmVjb3JkKGhlYWRlciwgbGltaXQsICZ0cnVuYywgLWF4ZnJvZmZzZXQsICZhbnNwLCAKKwkJCQkJCSAgZGFlbW9uLT5hdXRoX3R0bCwgTlVMTCwgcXR5cGUsIENfSU4sIAorCQkJCQkJICAoY3JlY3AtPmZsYWdzICYgRl9JUFY0KSA/ICI0IiA6ICI2IiwgY2FjaGVfbmFtZSwgJmNyZWNwLT5hZGRyKSkKKwkJCSAgICBhbnNjb3VudCsrOworCQkJfQorCQkgICAgfQorCQkgIAorCQkgIGlmICgoY3JlY3AtPmZsYWdzICYgRl9IT1NUUykgfHwgKCgoY3JlY3AtPmZsYWdzICYgRl9ESENQKSAmJiBvcHRpb25fYm9vbChPUFRfREhDUF9GUUROKSkpKQorCQkgICAgeworCQkgICAgICBzdHJjcHkobmFtZSwgY2FjaGVfZ2V0X25hbWUoY3JlY3ApKTsKKwkJICAgICAgaWYgKGluX3pvbmUoem9uZSwgbmFtZSwgJmN1dCkgJiYgCisJCQkgIChsb2NhbF9xdWVyeSB8fCBmaWx0ZXJfem9uZSh6b25lLCAoY3JlY3AtPmZsYWdzICYgKEZfSVBWNiB8IEZfSVBWNCkpLCAmKGNyZWNwLT5hZGRyLmFkZHIpKSkpCisJCQl7CisJCQkgIHF0eXBlID0gVF9BOworI2lmZGVmIEhBVkVfSVBWNgorCQkJICBpZiAoY3JlY3AtPmZsYWdzICYgRl9JUFY2KQorCQkJICAgIHF0eXBlID0gVF9BQUFBOworI2VuZGlmCisJCQkgICBpZiAoY3V0KQorCQkJICAgICAqY3V0ID0gMDsKKworCQkJICAgaWYgKGFkZF9yZXNvdXJjZV9yZWNvcmQoaGVhZGVyLCBsaW1pdCwgJnRydW5jLCAtYXhmcm9mZnNldCwgJmFuc3AsIAorCQkJCQkJICAgZGFlbW9uLT5hdXRoX3R0bCwgTlVMTCwgcXR5cGUsIENfSU4sIAorCQkJCQkJICAgKGNyZWNwLT5mbGFncyAmIEZfSVBWNCkgPyAiNCIgOiAiNiIsIGN1dCA/IG5hbWUgOiBOVUxMLCAmY3JlY3AtPmFkZHIpKQorCQkJICAgICBhbnNjb3VudCsrOworCQkJfQorCQkgICAgfQorCQl9CisJICAgIH0KKwkgICAKKwkgIC8qIHJlcGVhdCBTT0EgYXMgbGFzdCByZWNvcmQgKi8KKwkgIGlmIChhZGRfcmVzb3VyY2VfcmVjb3JkKGhlYWRlciwgbGltaXQsICZ0cnVuYywgYXhmcm9mZnNldCwgJmFuc3AsIAorCQkJCSAgZGFlbW9uLT5hdXRoX3R0bCwgTlVMTCwgVF9TT0EsIENfSU4sICJkZGxsbGxsIiwKKwkJCQkgIGRhZW1vbi0+YXV0aHNlcnZlciwgIGRhZW1vbi0+aG9zdG1hc3RlciwKKwkJCQkgIGRhZW1vbi0+c29hX3NuLCBkYWVtb24tPnNvYV9yZWZyZXNoLCAKKwkJCQkgIGRhZW1vbi0+c29hX3JldHJ5LCBkYWVtb24tPnNvYV9leHBpcnksIAorCQkJCSAgZGFlbW9uLT5hdXRoX3R0bCkpCisJICAgIGFuc2NvdW50Kys7CisJICAKKwl9CisgICAgICAKKyAgICB9CisgIAorICAvKiBkb25lIGFsbCBxdWVzdGlvbnMsIHNldCB1cCBoZWFkZXIgYW5kIHJldHVybiBsZW5ndGggb2YgcmVzdWx0ICovCisgIC8qIGNsZWFyIGF1dGhvcml0YXRpdmUgYW5kIHRydW5jYXRlZCBmbGFncywgc2V0IFFSIGZsYWcgKi8KKyAgaGVhZGVyLT5oYjMgPSAoaGVhZGVyLT5oYjMgJiB+KEhCM19BQSB8IEhCM19UQykpIHwgSEIzX1FSOworCisgIGlmIChsb2NhbF9xdWVyeSkKKyAgICB7CisgICAgICAvKiBzZXQgUkEgZmxhZyAqLworICAgICAgaGVhZGVyLT5oYjQgfD0gSEI0X1JBOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIGNsZWFyIFJBIGZsYWcgKi8KKyAgICAgIGhlYWRlci0+aGI0ICY9IH5IQjRfUkE7CisgICAgfQorCisgIC8qIGF1dGhvcml0YXRpdmUgKi8KKyAgaWYgKGF1dGgpCisgICAgaGVhZGVyLT5oYjMgfD0gSEIzX0FBOworICAKKyAgLyogdHJ1bmNhdGlvbiAqLworICBpZiAodHJ1bmMpCisgICAgaGVhZGVyLT5oYjMgfD0gSEIzX1RDOworICAKKyAgaWYgKChhdXRoIHx8IGxvY2FsX3F1ZXJ5KSAmJiBueGRvbWFpbikKKyAgICBTRVRfUkNPREUoaGVhZGVyLCBOWERPTUFJTik7CisgIGVsc2UKKyAgICBTRVRfUkNPREUoaGVhZGVyLCBOT0VSUk9SKTsgLyogbm8gZXJyb3IgKi8KKyAgaGVhZGVyLT5hbmNvdW50ID0gaHRvbnMoYW5zY291bnQpOworICBoZWFkZXItPm5zY291bnQgPSBodG9ucyhhdXRoY291bnQpOworICBoZWFkZXItPmFyY291bnQgPSBodG9ucygwKTsKKworICAvKiBBZHZlcnRpc2Ugb3VyIHBhY2tldCBzaXplIGxpbWl0IGluIG91ciByZXBseSAqLworICBpZiAoaGF2ZV9wc2V1ZG9oZWFkZXIpCisgICAgcmV0dXJuIGFkZF9wc2V1ZG9oZWFkZXIoaGVhZGVyLCAgYW5zcCAtICh1bnNpZ25lZCBjaGFyICopaGVhZGVyLCAodW5zaWduZWQgY2hhciAqKWxpbWl0LCBkYWVtb24tPmVkbnNfcGt0c3osIDAsIE5VTEwsIDAsIGRvX2JpdCwgMCk7CisKKyAgcmV0dXJuIGFuc3AgLSAodW5zaWduZWQgY2hhciAqKWhlYWRlcjsKK30KKyAgCisjZW5kaWYgIAorICAKKworCmRpZmYgLS1naXQgYS9zcmMvYmxvY2tkYXRhLmMgYi9zcmMvYmxvY2tkYXRhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY4M2I5YgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9ibG9ja2RhdGEuYwpAQCAtMCwwICsxLDE1MSBAQAorLyogZG5zbWFzcSBpcyBDb3B5cmlnaHQgKGMpIDIwMDAtMjAxNyBTaW1vbiBLZWxsZXkKKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgZGF0ZWQgSnVuZSwgMTk5MSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgdmVyc2lvbiAzIGRhdGVkIDI5IEp1bmUsIDIwMDcuCisgCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisKKyNpbmNsdWRlICJkbnNtYXNxLmgiCisKKyNpZmRlZiBIQVZFX0ROU1NFQworCitzdGF0aWMgc3RydWN0IGJsb2NrZGF0YSAqa2V5YmxvY2tfZnJlZTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYmxvY2tkYXRhX2NvdW50LCBibG9ja2RhdGFfaHdtLCBibG9ja2RhdGFfYWxsb2NlZDsKKworc3RhdGljIHZvaWQgYmxvY2tkYXRhX2V4cGFuZChpbnQgbikKK3sKKyAgc3RydWN0IGJsb2NrZGF0YSAqbmV3ID0gd2hpbmVfbWFsbG9jKG4gKiBzaXplb2Yoc3RydWN0IGJsb2NrZGF0YSkpOworICAKKyAgaWYgKG4gPiAwICYmIG5ldykKKyAgICB7CisgICAgICBpbnQgaTsKKyAgICAgIAorICAgICAgbmV3W24tMV0ubmV4dCA9IGtleWJsb2NrX2ZyZWU7CisgICAgICBrZXlibG9ja19mcmVlID0gbmV3OworCisgICAgICBmb3IgKGkgPSAwOyBpIDwgbiAtIDE7IGkrKykKKwluZXdbaV0ubmV4dCA9ICZuZXdbaSsxXTsKKworICAgICAgYmxvY2tkYXRhX2FsbG9jZWQgKz0gbjsKKyAgICB9Cit9CisKKy8qIFByZWFsbG9jYXRlIHNvbWUgYmxvY2tzLCBwcm9wb3J0aW9uYWwgdG8gY2FjaGVzaXplLCB0byByZWR1Y2UgaGVhcCBmcmFnbWVudGF0aW9uLiAqLwordm9pZCBibG9ja2RhdGFfaW5pdCh2b2lkKQoreworICBrZXlibG9ja19mcmVlID0gTlVMTDsKKyAgYmxvY2tkYXRhX2FsbG9jZWQgPSAwOworICBibG9ja2RhdGFfY291bnQgPSAwOworICBibG9ja2RhdGFfaHdtID0gMDsKKworICAvKiBOb3RlIHRoYXQgZGFlbW9uLT5jYWNoZXNpemUgaXMgZW5mb3JjZWQgdG8gaGF2ZSBub24temVybyBzaXplIGlmIE9QVF9ETlNTRUNfVkFMSUQgaXMgc2V0ICovICAKKyAgaWYgKG9wdGlvbl9ib29sKE9QVF9ETlNTRUNfVkFMSUQpKQorICAgIGJsb2NrZGF0YV9leHBhbmQoKGRhZW1vbi0+Y2FjaGVzaXplICogMTAwKSAvIHNpemVvZihzdHJ1Y3QgYmxvY2tkYXRhKSk7Cit9CisKK3ZvaWQgYmxvY2tkYXRhX3JlcG9ydCh2b2lkKQoreworICBpZiAob3B0aW9uX2Jvb2woT1BUX0ROU1NFQ19WQUxJRCkpCisgICAgbXlfc3lzbG9nKExPR19JTkZPLCBfKCJETlNTRUMgbWVtb3J5IGluIHVzZSAldSwgbWF4ICV1LCBhbGxvY2F0ZWQgJXUiKSwgCisJICAgICAgYmxvY2tkYXRhX2NvdW50ICogc2l6ZW9mKHN0cnVjdCBibG9ja2RhdGEpLCAgCisJICAgICAgYmxvY2tkYXRhX2h3bSAqIHNpemVvZihzdHJ1Y3QgYmxvY2tkYXRhKSwgIAorCSAgICAgIGJsb2NrZGF0YV9hbGxvY2VkICogc2l6ZW9mKHN0cnVjdCBibG9ja2RhdGEpKTsKK30gCisKK3N0cnVjdCBibG9ja2RhdGEgKmJsb2NrZGF0YV9hbGxvYyhjaGFyICpkYXRhLCBzaXplX3QgbGVuKQoreworICBzdHJ1Y3QgYmxvY2tkYXRhICpibG9jaywgKnJldCA9IE5VTEw7CisgIHN0cnVjdCBibG9ja2RhdGEgKipwcmV2ID0gJnJldDsKKyAgc2l6ZV90IGJsZW47CisKKyAgd2hpbGUgKGxlbiA+IDApCisgICAgeworICAgICAgaWYgKCFrZXlibG9ja19mcmVlKQorCWJsb2NrZGF0YV9leHBhbmQoNTApOworICAgICAgCisgICAgICBpZiAoa2V5YmxvY2tfZnJlZSkKKwl7CisJICBibG9jayA9IGtleWJsb2NrX2ZyZWU7CisJICBrZXlibG9ja19mcmVlID0gYmxvY2stPm5leHQ7CisJICBibG9ja2RhdGFfY291bnQrKzsgCisJfQorICAgICAgZWxzZQorCXsKKwkgIC8qIGZhaWxlZCB0byBhbGxvYywgZnJlZSBwYXJ0aWFsIGNoYWluICovCisJICBibG9ja2RhdGFfZnJlZShyZXQpOworCSAgcmV0dXJuIE5VTEw7CisJfQorICAgICAgIAorICAgICAgaWYgKGJsb2NrZGF0YV9od20gPCBibG9ja2RhdGFfY291bnQpCisJYmxvY2tkYXRhX2h3bSA9IGJsb2NrZGF0YV9jb3VudDsgCisgICAgICAKKyAgICAgIGJsZW4gPSBsZW4gPiBLRVlCTE9DS19MRU4gPyBLRVlCTE9DS19MRU4gOiBsZW47CisgICAgICBtZW1jcHkoYmxvY2stPmtleSwgZGF0YSwgYmxlbik7CisgICAgICBkYXRhICs9IGJsZW47CisgICAgICBsZW4gLT0gYmxlbjsKKyAgICAgICpwcmV2ID0gYmxvY2s7CisgICAgICBwcmV2ID0gJmJsb2NrLT5uZXh0OworICAgICAgYmxvY2stPm5leHQgPSBOVUxMOworICAgIH0KKyAgCisgIHJldHVybiByZXQ7Cit9CisKK3ZvaWQgYmxvY2tkYXRhX2ZyZWUoc3RydWN0IGJsb2NrZGF0YSAqYmxvY2tzKQoreworICBzdHJ1Y3QgYmxvY2tkYXRhICp0bXA7CisgIAorICBpZiAoYmxvY2tzKQorICAgIHsKKyAgICAgIGZvciAodG1wID0gYmxvY2tzOyB0bXAtPm5leHQ7IHRtcCA9IHRtcC0+bmV4dCkKKwlibG9ja2RhdGFfY291bnQtLTsKKyAgICAgIHRtcC0+bmV4dCA9IGtleWJsb2NrX2ZyZWU7CisgICAgICBrZXlibG9ja19mcmVlID0gYmxvY2tzOyAKKyAgICAgIGJsb2NrZGF0YV9jb3VudC0tOworICAgIH0KK30KKworLyogaWYgZGF0YSA9PSBOVUxMLCByZXR1cm4gcG9pbnRlciB0byBzdGF0aWMgYmxvY2sgb2Ygc3VmZmljaWVudCBzaXplICovCit2b2lkICpibG9ja2RhdGFfcmV0cmlldmUoc3RydWN0IGJsb2NrZGF0YSAqYmxvY2ssIHNpemVfdCBsZW4sIHZvaWQgKmRhdGEpCit7CisgIHNpemVfdCBibGVuOworICBzdHJ1Y3QgIGJsb2NrZGF0YSAqYjsKKyAgdm9pZCAqbmV3LCAqZDsKKyAgCisgIHN0YXRpYyB1bnNpZ25lZCBpbnQgYnVmZl9sZW4gPSAwOworICBzdGF0aWMgdW5zaWduZWQgY2hhciAqYnVmZiA9IE5VTEw7CisgICAKKyAgaWYgKCFkYXRhKQorICAgIHsKKyAgICAgIGlmIChsZW4gPiBidWZmX2xlbikKKwl7CisJICBpZiAoIShuZXcgPSB3aGluZV9tYWxsb2MobGVuKSkpCisJICAgIHJldHVybiBOVUxMOworCSAgaWYgKGJ1ZmYpCisJICAgIGZyZWUoYnVmZik7CisJICBidWZmID0gbmV3OworCX0KKyAgICAgIGRhdGEgPSBidWZmOworICAgIH0KKyAgCisgIGZvciAoZCA9IGRhdGEsIGIgPSBibG9jazsgbGVuID4gMCAmJiBiOyAgYiA9IGItPm5leHQpCisgICAgeworICAgICAgYmxlbiA9IGxlbiA+IEtFWUJMT0NLX0xFTiA/IEtFWUJMT0NLX0xFTiA6IGxlbjsKKyAgICAgIG1lbWNweShkLCBiLT5rZXksIGJsZW4pOworICAgICAgZCArPSBibGVuOworICAgICAgbGVuIC09IGJsZW47CisgICAgfQorCisgIHJldHVybiBkYXRhOworfQorIAorI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvYnBmLmMgYi9zcmMvYnBmLmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2Y5ZWY1YQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9icGYuYwpAQCAtMCwwICsxLDQ1MCBAQAorLyogZG5zbWFzcSBpcyBDb3B5cmlnaHQgKGMpIDIwMDAtMjAxNyBTaW1vbiBLZWxsZXkKKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgZGF0ZWQgSnVuZSwgMTk5MSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgdmVyc2lvbiAzIGRhdGVkIDI5IEp1bmUsIDIwMDcuCisgCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisKKyNpbmNsdWRlICJkbnNtYXNxLmgiCisKKyNpZiBkZWZpbmVkKEhBVkVfQlNEX05FVFdPUkspIHx8IGRlZmluZWQoSEFWRV9TT0xBUklTX05FVFdPUkspCisjaW5jbHVkZSA8aWZhZGRycy5oPgorCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaWYgZGVmaW5lZChIQVZFX0JTRF9ORVRXT1JLKSAmJiAhZGVmaW5lZChfX0FQUExFX18pCisjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorI2VuZGlmCisjaW5jbHVkZSA8bmV0L2lmLmg+CisjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CisjaW5jbHVkZSA8bmV0L2lmX2RsLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pZl9ldGhlci5oPgorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisjICBpbmNsdWRlIDxuZXQvaWZfdmFyLmg+IAorI2VuZGlmCisjaW5jbHVkZSA8bmV0aW5ldC9pbl92YXIuaD4KKyNpZmRlZiBIQVZFX0lQVjYKKyMgIGluY2x1ZGUgPG5ldGluZXQ2L2luNl92YXIuaD4KKyNlbmRpZgorCisjaWZuZGVmIFNBX1NJWkUKKyNkZWZpbmUgU0FfU0laRShzYSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKCAgKCEoc2EpIHx8ICgoc3RydWN0IHNvY2thZGRyICopKHNhKSktPnNhX2xlbiA9PSAwKSA/ICAgICAgXAorICAgICAgICBzaXplb2YobG9uZykgICAgICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgMSArICggKCgoc3RydWN0IHNvY2thZGRyICopKHNhKSktPnNhX2xlbiAtIDEpIHwgKHNpemVvZihsb25nKSAtIDEpICkgKQorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0JTRF9ORVRXT1JLCitzdGF0aWMgaW50IGRlbF9mYW1pbHkgPSAwOworc3RhdGljIHN0cnVjdCBhbGxfYWRkciBkZWxfYWRkcjsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChIQVZFX0JTRF9ORVRXT1JLKSAmJiAhZGVmaW5lZChfX0FQUExFX18pCisKK2ludCBhcnBfZW51bWVyYXRlKHZvaWQgKnBhcm0sIGludCAoKmNhbGxiYWNrKSgpKQoreworICBpbnQgbWliWzZdOworICBzaXplX3QgbmVlZGVkOworICBjaGFyICpuZXh0OworICBzdHJ1Y3QgcnRfbXNnaGRyICpydG07CisgIHN0cnVjdCBzb2NrYWRkcl9pbmFycCAqc2luMjsKKyAgc3RydWN0IHNvY2thZGRyX2RsICpzZGw7CisgIHN0cnVjdCBpb3ZlYyBidWZmOworICBpbnQgcmM7CisKKyAgYnVmZi5pb3ZfYmFzZSA9IE5VTEw7CisgIGJ1ZmYuaW92X2xlbiA9IDA7CisKKyAgbWliWzBdID0gQ1RMX05FVDsKKyAgbWliWzFdID0gUEZfUk9VVEU7CisgIG1pYlsyXSA9IDA7CisgIG1pYlszXSA9IEFGX0lORVQ7CisgIG1pYls0XSA9IE5FVF9SVF9GTEFHUzsKKyNpZmRlZiBSVEZfTExJTkZPCisgIG1pYls1XSA9IFJURl9MTElORk87CisjZWxzZQorICBtaWJbNV0gPSAwOworI2VuZGlmCQorICBpZiAoc3lzY3RsKG1pYiwgNiwgTlVMTCwgJm5lZWRlZCwgTlVMTCwgMCkgPT0gLTEgfHwgbmVlZGVkID09IDApCisgICAgcmV0dXJuIDA7CisKKyAgd2hpbGUgKDEpIAorICAgIHsKKyAgICAgIGlmICghZXhwYW5kX2J1ZigmYnVmZiwgbmVlZGVkKSkKKwlyZXR1cm4gMDsKKyAgICAgIGlmICgocmMgPSBzeXNjdGwobWliLCA2LCBidWZmLmlvdl9iYXNlLCAmbmVlZGVkLCBOVUxMLCAwKSkgPT0gMCB8fAorCSAgZXJybm8gIT0gRU5PTUVNKQorCWJyZWFrOworICAgICAgbmVlZGVkICs9IG5lZWRlZCAvIDg7CisgICAgfQorICBpZiAocmMgPT0gLTEpCisgICAgcmV0dXJuIDA7CisgIAorICBmb3IgKG5leHQgPSBidWZmLmlvdl9iYXNlIDsgbmV4dCA8IChjaGFyICopYnVmZi5pb3ZfYmFzZSArIG5lZWRlZDsgbmV4dCArPSBydG0tPnJ0bV9tc2dsZW4pCisgICAgeworICAgICAgcnRtID0gKHN0cnVjdCBydF9tc2doZHIgKiluZXh0OworICAgICAgc2luMiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW5hcnAgKikocnRtICsgMSk7CisgICAgICBzZGwgPSAoc3RydWN0IHNvY2thZGRyX2RsICopKChjaGFyICopc2luMiArIFNBX1NJWkUoc2luMikpOworICAgICAgaWYgKCEoKmNhbGxiYWNrKShBRl9JTkVULCAmc2luMi0+c2luX2FkZHIsIExMQUREUihzZGwpLCBzZGwtPnNkbF9hbGVuLCBwYXJtKSkKKwlyZXR1cm4gMDsKKyAgICB9CisKKyAgcmV0dXJuIDE7Cit9CisjZW5kaWYgLyogZGVmaW5lZChIQVZFX0JTRF9ORVRXT1JLKSAmJiAhZGVmaW5lZChfX0FQUExFX18pICovCisKKworaW50IGlmYWNlX2VudW1lcmF0ZShpbnQgZmFtaWx5LCB2b2lkICpwYXJtLCBpbnQgKCpjYWxsYmFjaykoKSkKK3sKKyAgc3RydWN0IGlmYWRkcnMgKmhlYWQsICphZGRyczsKKyAgaW50IGVycnNhdmUsIGZkID0gLTEsIHJldCA9IDA7CisKKyAgaWYgKGZhbWlseSA9PSBBRl9VTlNQRUMpCisjaWYgZGVmaW5lZChIQVZFX0JTRF9ORVRXT1JLKSAmJiAhZGVmaW5lZChfX0FQUExFX18pCisgICAgcmV0dXJuICBhcnBfZW51bWVyYXRlKHBhcm0sIGNhbGxiYWNrKTsKKyNlbHNlCisgIHJldHVybiAwOyAvKiBuZWVkIGNvZGUgZm9yIFNvbGFyaXMgYW5kIE1hY09TKi8KKyNlbmRpZgorCisgIC8qIEFGX0xJTksgZG9lc24ndCBleGlzdCBpbiBMaW51eCwgc28gd2UgY2FuJ3QgdXNlIGl0IGluIG91ciBBUEkgKi8KKyAgaWYgKGZhbWlseSA9PSBBRl9MT0NBTCkKKyAgICBmYW1pbHkgPSBBRl9MSU5LOworCisgIGlmIChnZXRpZmFkZHJzKCZoZWFkKSA9PSAtMSkKKyAgICByZXR1cm4gMDsKKworI2lmIGRlZmluZWQoSEFWRV9CU0RfTkVUV09SSykgJiYgZGVmaW5lZChIQVZFX0lQVjYpCisgIGlmIChmYW1pbHkgPT0gQUZfSU5FVDYpCisgICAgZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApOworI2VuZGlmCisgIAorICBmb3IgKGFkZHJzID0gaGVhZDsgYWRkcnM7IGFkZHJzID0gYWRkcnMtPmlmYV9uZXh0KQorICAgIHsKKyAgICAgIGlmIChhZGRycy0+aWZhX2FkZHItPnNhX2ZhbWlseSA9PSBmYW1pbHkpCisJeworCSAgaW50IGlmYWNlX2luZGV4ID0gaWZfbmFtZXRvaW5kZXgoYWRkcnMtPmlmYV9uYW1lKTsKKworCSAgaWYgKGlmYWNlX2luZGV4ID09IDAgfHwgIWFkZHJzLT5pZmFfYWRkciB8fCAKKwkgICAgICAoIWFkZHJzLT5pZmFfbmV0bWFzayAmJiBmYW1pbHkgIT0gQUZfTElOSykpCisJICAgIGNvbnRpbnVlOworCisJICBpZiAoZmFtaWx5ID09IEFGX0lORVQpCisJICAgIHsKKwkgICAgICBzdHJ1Y3QgaW5fYWRkciBhZGRyLCBuZXRtYXNrLCBicm9hZGNhc3Q7CisJICAgICAgYWRkciA9ICgoc3RydWN0IHNvY2thZGRyX2luICopIGFkZHJzLT5pZmFfYWRkciktPnNpbl9hZGRyOworI2lmZGVmIEhBVkVfQlNEX05FVFdPUksKKwkgICAgICBpZiAoZGVsX2ZhbWlseSA9PSBBRl9JTkVUICYmIGRlbF9hZGRyLmFkZHIuYWRkcjQuc19hZGRyID09IGFkZHIuc19hZGRyKQorCQljb250aW51ZTsKKyNlbmRpZgorCSAgICAgIG5ldG1hc2sgPSAoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSBhZGRycy0+aWZhX25ldG1hc2spLT5zaW5fYWRkcjsKKwkgICAgICBpZiAoYWRkcnMtPmlmYV9icm9hZGFkZHIpCisJCWJyb2FkY2FzdCA9ICgoc3RydWN0IHNvY2thZGRyX2luICopIGFkZHJzLT5pZmFfYnJvYWRhZGRyKS0+c2luX2FkZHI7IAorCSAgICAgIGVsc2UgCisJCWJyb2FkY2FzdC5zX2FkZHIgPSAwOwkgICAgICAKKwkgICAgICBpZiAoISgoKmNhbGxiYWNrKShhZGRyLCBpZmFjZV9pbmRleCwgTlVMTCwgbmV0bWFzaywgYnJvYWRjYXN0LCBwYXJtKSkpCisJCWdvdG8gZXJyOworCSAgICB9CisjaWZkZWYgSEFWRV9JUFY2CisJICBlbHNlIGlmIChmYW1pbHkgPT0gQUZfSU5FVDYpCisJICAgIHsKKwkgICAgICBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIgPSAmKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIGFkZHJzLT5pZmFfYWRkciktPnNpbjZfYWRkcjsKKwkgICAgICB1bnNpZ25lZCBjaGFyICpuZXRtYXNrID0gKHVuc2lnbmVkIGNoYXIgKikgJigoc3RydWN0IHNvY2thZGRyX2luNiAqKSBhZGRycy0+aWZhX25ldG1hc2spLT5zaW42X2FkZHI7CisJICAgICAgaW50IHNjb3BlX2lkID0gKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIGFkZHJzLT5pZmFfYWRkciktPnNpbjZfc2NvcGVfaWQ7CisJICAgICAgaW50IGksIGosIHByZWZpeCA9IDA7CisJICAgICAgdTMyIHZhbGlkID0gMHhmZmZmZmZmZiwgcHJlZmVycmVkID0gMHhmZmZmZmZmZjsKKwkgICAgICBpbnQgZmxhZ3MgPSAwOworI2lmZGVmIEhBVkVfQlNEX05FVFdPUksKKwkgICAgICBpZiAoZGVsX2ZhbWlseSA9PSBBRl9JTkVUNiAmJiBJTjZfQVJFX0FERFJfRVFVQUwoJmRlbF9hZGRyLmFkZHIuYWRkcjYsIGFkZHIpKQorCQljb250aW51ZTsKKyNlbmRpZgorI2lmIGRlZmluZWQoSEFWRV9CU0RfTkVUV09SSykgJiYgIWRlZmluZWQoX19BUFBMRV9fKQorCSAgICAgIHN0cnVjdCBpbjZfaWZyZXEgaWZyNjsKKworCSAgICAgIG1lbXNldCgmaWZyNiwgMCwgc2l6ZW9mKGlmcjYpKTsKKwkgICAgICBzdHJuY3B5KGlmcjYuaWZyX25hbWUsIGFkZHJzLT5pZmFfbmFtZSwgc2l6ZW9mKGlmcjYuaWZyX25hbWUpKTsKKwkgICAgICAKKwkgICAgICBpZnI2Lmlmcl9hZGRyID0gKigoc3RydWN0IHNvY2thZGRyX2luNiAqKSBhZGRycy0+aWZhX2FkZHIpOworCSAgICAgIGlmIChmZCAhPSAtMSAmJiBpb2N0bChmZCwgU0lPQ0dJRkFGTEFHX0lONiwgJmlmcjYpICE9IC0xKQorCQl7CisJCSAgaWYgKGlmcjYuaWZyX2lmcnUuaWZydV9mbGFnczYgJiBJTjZfSUZGX1RFTlRBVElWRSkKKwkJICAgIGZsYWdzIHw9IElGQUNFX1RFTlRBVElWRTsKKwkJICAKKwkJICBpZiAoaWZyNi5pZnJfaWZydS5pZnJ1X2ZsYWdzNiAmIElONl9JRkZfREVQUkVDQVRFRCkKKwkJICAgIGZsYWdzIHw9IElGQUNFX0RFUFJFQ0FURUQ7CisKKyNpZmRlZiBJTjZfSUZGX1RFTVBPUkFSWQorCQkgIGlmICghKGlmcjYuaWZyX2lmcnUuaWZydV9mbGFnczYgJiAoSU42X0lGRl9BVVRPQ09ORiB8IElONl9JRkZfVEVNUE9SQVJZKSkpCisJCSAgICBmbGFncyB8PSBJRkFDRV9QRVJNQU5FTlQ7CisjZW5kaWYKKworI2lmZGVmIElONl9JRkZfUFJJVkFDWQorCQkgIGlmICghKGlmcjYuaWZyX2lmcnUuaWZydV9mbGFnczYgJiAoSU42X0lGRl9BVVRPQ09ORiB8IElONl9JRkZfUFJJVkFDWSkpKQorCQkgICAgZmxhZ3MgfD0gSUZBQ0VfUEVSTUFORU5UOworI2VuZGlmCisJCX0KKwkgICAgICAKKwkgICAgICBpZnI2Lmlmcl9hZGRyID0gKigoc3RydWN0IHNvY2thZGRyX2luNiAqKSBhZGRycy0+aWZhX2FkZHIpOworCSAgICAgIGlmIChmZCAhPSAtMSAmJiBpb2N0bChmZCwgU0lPQ0dJRkFMSUZFVElNRV9JTjYsICZpZnI2KSAhPSAtMSkKKwkJeworCQkgIHZhbGlkID0gaWZyNi5pZnJfaWZydS5pZnJ1X2xpZmV0aW1lLmlhNnRfdmx0aW1lOworCQkgIHByZWZlcnJlZCA9IGlmcjYuaWZyX2lmcnUuaWZydV9saWZldGltZS5pYTZ0X3BsdGltZTsKKwkJfQorI2VuZGlmCisJICAgICAgCSAgICAgIAorCSAgICAgIGZvciAoaSA9IDA7IGkgPCBJTjZBRERSU1o7IGkrKywgcHJlZml4ICs9IDgpIAorICAgICAgICAgICAgICAgIGlmIChuZXRtYXNrW2ldICE9IDB4ZmYpCisJCSAgYnJlYWs7CisJICAgICAgCisJICAgICAgaWYgKGkgIT0gSU42QUREUlNaICYmIG5ldG1hc2tbaV0pIAorICAgICAgICAgICAgICAgIGZvciAoaiA9IDc7IGogPiAwOyBqLS0sIHByZWZpeCsrKSAKKwkJICBpZiAoKG5ldG1hc2tbaV0gJiAoMSA8PCBqKSkgPT0gMCkKKwkJICAgIGJyZWFrOworCSAgICAgIAorCSAgICAgIC8qIHZvb2RvbyB0byBjbGVhciBpbnRlcmZhY2UgZmllbGQgaW4gYWRkcmVzcyAqLworCSAgICAgIGlmICghb3B0aW9uX2Jvb2woT1BUX05PV0lMRCkgJiYgSU42X0lTX0FERFJfTElOS0xPQ0FMKGFkZHIpKQorCQl7CisJCSAgYWRkci0+czZfYWRkclsyXSA9IDA7CisJCSAgYWRkci0+czZfYWRkclszXSA9IDA7CisJCX0gCisJICAgICAKKwkgICAgICBpZiAoISgoKmNhbGxiYWNrKShhZGRyLCBwcmVmaXgsIHNjb3BlX2lkLCBpZmFjZV9pbmRleCwgZmxhZ3MsCisJCQkJKGludCkgcHJlZmVycmVkLCAoaW50KXZhbGlkLCBwYXJtKSkpCisJCWdvdG8gZXJyOwkgICAgICAKKwkgICAgfQorI2VuZGlmIC8qIEhBVkVfSVBWNiAqLworCisjaWZkZWYgSEFWRV9ESENQNiAgICAgIAorCSAgZWxzZSBpZiAoZmFtaWx5ID09IEFGX0xJTkspCisJICAgIHsgCisJICAgICAgLyogQXNzdW1lIGV0aGVybmV0IGFnYWluIGhlcmUgKi8KKwkgICAgICBzdHJ1Y3Qgc29ja2FkZHJfZGwgKnNkbCA9IChzdHJ1Y3Qgc29ja2FkZHJfZGwgKikgYWRkcnMtPmlmYV9hZGRyOworCSAgICAgIGlmIChzZGwtPnNkbF9hbGVuICE9IDAgJiYgCisJCSAgISgoKmNhbGxiYWNrKShpZmFjZV9pbmRleCwgQVJQSFJEX0VUSEVSLCBMTEFERFIoc2RsKSwgc2RsLT5zZGxfYWxlbiwgcGFybSkpKQorCQlnb3RvIGVycjsKKwkgICAgfQorI2VuZGlmIAorCX0KKyAgICB9CisgIAorICByZXQgPSAxOworCisgZXJyOgorICBlcnJzYXZlID0gZXJybm87CisgIGZyZWVpZmFkZHJzKGhlYWQpOyAKKyAgaWYgKGZkICE9IC0xKQorICAgIGNsb3NlKGZkKTsKKyAgZXJybm8gPSBlcnJzYXZlOworCisgIHJldHVybiByZXQ7Cit9CisjZW5kaWYgLyogZGVmaW5lZChIQVZFX0JTRF9ORVRXT1JLKSB8fCBkZWZpbmVkKEhBVkVfU09MQVJJU19ORVRXT1JLKSAqLworCisKKyNpZiBkZWZpbmVkKEhBVkVfQlNEX05FVFdPUkspICYmIGRlZmluZWQoSEFWRV9ESENQKQorI2luY2x1ZGUgPG5ldC9icGYuaD4KKwordm9pZCBpbml0X2JwZih2b2lkKQoreworICBpbnQgaSA9IDA7CisKKyAgd2hpbGUgKDEpIAorICAgIHsKKyAgICAgIHNwcmludGYoZGFlbW9uLT5kaGNwX2J1ZmYsICIvZGV2L2JwZiVkIiwgaSsrKTsKKyAgICAgIGlmICgoZGFlbW9uLT5kaGNwX3Jhd19mZCA9IG9wZW4oZGFlbW9uLT5kaGNwX2J1ZmYsIE9fUkRXUiwgMCkpICE9IC0xKQorCXJldHVybjsKKworICAgICAgaWYgKGVycm5vICE9IEVCVVNZKQorCWRpZShfKCJjYW5ub3QgY3JlYXRlIERIQ1AgQlBGIHNvY2tldDogJXMiKSwgTlVMTCwgRUNfQkFETkVUKTsKKyAgICB9CSAgICAgCit9CisKK3ZvaWQgc2VuZF92aWFfYnBmKHN0cnVjdCBkaGNwX3BhY2tldCAqbWVzcywgc2l6ZV90IGxlbiwKKwkJICBzdHJ1Y3QgaW5fYWRkciBpZmFjZV9hZGRyLCBzdHJ1Y3QgaWZyZXEgKmlmcikKK3sKKyAgIC8qIEhhaXJ5IHN0dWZmLCBwYWNrZXQgZWl0aGVyIGhhcyB0byBnbyB0byB0aGUKKyAgICAgIG5ldCBicm9hZGNhc3Qgb3IgdGhlIGRlc3RpbmF0aW9uIGNhbid0IHJlcGx5IHRvIEFSUCB5ZXQsCisgICAgICBidXQgd2UgZG8ga25vdyB0aGUgcGh5c2ljYWwgYWRkcmVzcy4gCisgICAgICBCdWlsZCB0aGUgcGFja2V0IGJ5IHN0ZWFtLCBhbmQgc2VuZCBkaXJlY3RseSwgYnlwYXNzaW5nCisgICAgICB0aGUga2VybmVsIElQIHN0YWNrICovCisgIAorICBzdHJ1Y3QgZXRoZXJfaGVhZGVyIGV0aGVyOyAKKyAgc3RydWN0IGlwIGlwOworICBzdHJ1Y3QgdWRwaGRyIHsKKyAgICB1MTYgdWhfc3BvcnQ7ICAgICAgICAgICAgICAgLyogc291cmNlIHBvcnQgKi8KKyAgICB1MTYgdWhfZHBvcnQ7ICAgICAgICAgICAgICAgLyogZGVzdGluYXRpb24gcG9ydCAqLworICAgIHUxNiB1aF91bGVuOyAgICAgICAgICAgICAgICAvKiB1ZHAgbGVuZ3RoICovCisgICAgdTE2IHVoX3N1bTsgICAgICAgICAgICAgICAgIC8qIHVkcCBjaGVja3N1bSAqLworICB9IHVkcDsKKyAgCisgIHUzMiBpLCBzdW07CisgIHN0cnVjdCBpb3ZlYyBpb3ZbNF07CisKKyAgLyogT25seSBrbm93IGhvdyB0byBkbyBldGhlcm5ldCBvbiAqQlNEICovCisgIGlmIChtZXNzLT5odHlwZSAhPSBBUlBIUkRfRVRIRVIgfHwgbWVzcy0+aGxlbiAhPSBFVEhFUl9BRERSX0xFTikKKyAgICB7CisgICAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19XQVJOSU5HLCBfKCJESENQIHJlcXVlc3QgZm9yIHVuc3VwcG9ydGVkIGhhcmR3YXJlIHR5cGUgKCVkKSByZWNlaXZlZCBvbiAlcyIpLCAKKwkJbWVzcy0+aHR5cGUsIGlmci0+aWZyX25hbWUpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgIAorICBpZnItPmlmcl9hZGRyLnNhX2ZhbWlseSA9IEFGX0xJTks7CisgIGlmIChpb2N0bChkYWVtb24tPmRoY3BmZCwgU0lPQ0dJRkFERFIsIGlmcikgPCAwKQorICAgIHJldHVybjsKKyAgCisgIG1lbWNweShldGhlci5ldGhlcl9zaG9zdCwgTExBRERSKChzdHJ1Y3Qgc29ja2FkZHJfZGwgKikmaWZyLT5pZnJfYWRkciksIEVUSEVSX0FERFJfTEVOKTsKKyAgZXRoZXIuZXRoZXJfdHlwZSA9IGh0b25zKEVUSEVSVFlQRV9JUCk7CisgIAorICBpZiAobnRvaHMobWVzcy0+ZmxhZ3MpICYgMHg4MDAwKQorICAgIHsKKyAgICAgIG1lbXNldChldGhlci5ldGhlcl9kaG9zdCwgMjU1LCAgRVRIRVJfQUREUl9MRU4pOworICAgICAgaXAuaXBfZHN0LnNfYWRkciA9IElOQUREUl9CUk9BRENBU1Q7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgbWVtY3B5KGV0aGVyLmV0aGVyX2Rob3N0LCBtZXNzLT5jaGFkZHIsIEVUSEVSX0FERFJfTEVOKTsgCisgICAgICBpcC5pcF9kc3Quc19hZGRyID0gbWVzcy0+eWlhZGRyLnNfYWRkcjsKKyAgICB9CisgIAorICBpcC5pcF9wID0gSVBQUk9UT19VRFA7CisgIGlwLmlwX3NyYy5zX2FkZHIgPSBpZmFjZV9hZGRyLnNfYWRkcjsKKyAgaXAuaXBfbGVuID0gaHRvbnMoc2l6ZW9mKHN0cnVjdCBpcCkgKyAKKwkJICAgIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSArCisJCSAgICBsZW4pIDsKKyAgaXAuaXBfaGwgPSBzaXplb2Yoc3RydWN0IGlwKSAvIDQ7CisgIGlwLmlwX3YgPSBJUFZFUlNJT047CisgIGlwLmlwX3RvcyA9IDA7CisgIGlwLmlwX2lkID0gaHRvbnMoMCk7CisgIGlwLmlwX29mZiA9IGh0b25zKDB4NDAwMCk7IC8qIGRvbid0IGZyYWdtZW50ICovCisgIGlwLmlwX3R0bCA9IElQREVGVFRMOworICBpcC5pcF9zdW0gPSAwOworICBmb3IgKHN1bSA9IDAsIGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCBpcCkgLyAyOyBpKyspCisgICAgc3VtICs9ICgodTE2ICopJmlwKVtpXTsKKyAgd2hpbGUgKHN1bT4+MTYpCisgICAgc3VtID0gKHN1bSAmIDB4ZmZmZikgKyAoc3VtID4+IDE2KTsgIAorICBpcC5pcF9zdW0gPSAoc3VtID09IDB4ZmZmZikgPyBzdW0gOiB+c3VtOworICAKKyAgdWRwLnVoX3Nwb3J0ID0gaHRvbnMoZGFlbW9uLT5kaGNwX3NlcnZlcl9wb3J0KTsKKyAgdWRwLnVoX2Rwb3J0ID0gaHRvbnMoZGFlbW9uLT5kaGNwX2NsaWVudF9wb3J0KTsKKyAgaWYgKGxlbiAmIDEpCisgICAgKChjaGFyICopbWVzcylbbGVuXSA9IDA7IC8qIGZvciBjaGVja3N1bSwgaW4gY2FzZSBsZW5ndGggaXMgb2RkLiAqLworICB1ZHAudWhfc3VtID0gMDsKKyAgdWRwLnVoX3VsZW4gPSBzdW0gPSBodG9ucyhzaXplb2Yoc3RydWN0IHVkcGhkcikgKyBsZW4pOworICBzdW0gKz0gaHRvbnMoSVBQUk9UT19VRFApOworICBzdW0gKz0gaXAuaXBfc3JjLnNfYWRkciAmIDB4ZmZmZjsKKyAgc3VtICs9IChpcC5pcF9zcmMuc19hZGRyID4+IDE2KSAmIDB4ZmZmZjsKKyAgc3VtICs9IGlwLmlwX2RzdC5zX2FkZHIgJiAweGZmZmY7CisgIHN1bSArPSAoaXAuaXBfZHN0LnNfYWRkciA+PiAxNikgJiAweGZmZmY7CisgIGZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RydWN0IHVkcGhkcikvMjsgaSsrKQorICAgIHN1bSArPSAoKHUxNiAqKSZ1ZHApW2ldOworICBmb3IgKGkgPSAwOyBpIDwgKGxlbiArIDEpIC8gMjsgaSsrKQorICAgIHN1bSArPSAoKHUxNiAqKW1lc3MpW2ldOworICB3aGlsZSAoc3VtPj4xNikKKyAgICBzdW0gPSAoc3VtICYgMHhmZmZmKSArIChzdW0gPj4gMTYpOworICB1ZHAudWhfc3VtID0gKHN1bSA9PSAweGZmZmYpID8gc3VtIDogfnN1bTsKKyAgCisgIGlvY3RsKGRhZW1vbi0+ZGhjcF9yYXdfZmQsIEJJT0NTRVRJRiwgaWZyKTsKKyAgCisgIGlvdlswXS5pb3ZfYmFzZSA9ICZldGhlcjsKKyAgaW92WzBdLmlvdl9sZW4gPSBzaXplb2YoZXRoZXIpOworICBpb3ZbMV0uaW92X2Jhc2UgPSAmaXA7CisgIGlvdlsxXS5pb3ZfbGVuID0gc2l6ZW9mKGlwKTsKKyAgaW92WzJdLmlvdl9iYXNlID0gJnVkcDsKKyAgaW92WzJdLmlvdl9sZW4gPSBzaXplb2YodWRwKTsKKyAgaW92WzNdLmlvdl9iYXNlID0gbWVzczsKKyAgaW92WzNdLmlvdl9sZW4gPSBsZW47CisKKyAgd2hpbGUgKHJldHJ5X3NlbmQod3JpdGV2KGRhZW1vbi0+ZGhjcF9yYXdfZmQsIGlvdiwgNCkpKTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9CU0RfTkVUV09SSykgJiYgZGVmaW5lZChIQVZFX0RIQ1ApICovCisgCisKKyNpZmRlZiBIQVZFX0JTRF9ORVRXT1JLCisKK3ZvaWQgcm91dGVfaW5pdCh2b2lkKQoreworICAvKiBBRl9VTlNQRUM6IGFsbCBhZGRyIGZhbWlsaWVzICovCisgIGRhZW1vbi0+cm91dGVmZCA9IHNvY2tldChQRl9ST1VURSwgU09DS19SQVcsIEFGX1VOU1BFQyk7CisgIAorICBpZiAoZGFlbW9uLT5yb3V0ZWZkID09IC0xIHx8ICFmaXhfZmQoZGFlbW9uLT5yb3V0ZWZkKSkKKyAgICBkaWUoXygiY2Fubm90IGNyZWF0ZSBQRl9ST1VURSBzb2NrZXQ6ICVzIiksIE5VTEwsIEVDX0JBRE5FVCk7Cit9CisKK3ZvaWQgcm91dGVfc29jayh2b2lkKQoreworICBzdHJ1Y3QgaWZfbXNnaGRyICptc2c7CisgIGludCByYyA9IHJlY3YoZGFlbW9uLT5yb3V0ZWZkLCBkYWVtb24tPnBhY2tldCwgZGFlbW9uLT5wYWNrZXRfYnVmZl9zeiwgMCk7CisKKyAgaWYgKHJjIDwgNCkKKyAgICByZXR1cm47CisKKyAgbXNnID0gKHN0cnVjdCBpZl9tc2doZHIgKilkYWVtb24tPnBhY2tldDsKKyAgCisgIGlmIChyYyA8IG1zZy0+aWZtX21zZ2xlbikKKyAgICByZXR1cm47CisKKyAgIGlmIChtc2ctPmlmbV92ZXJzaW9uICE9IFJUTV9WRVJTSU9OKQorICAgICB7CisgICAgICAgc3RhdGljIGludCB3YXJuZWQgPSAwOworICAgICAgIGlmICghd2FybmVkKQorCSB7CisJICAgbXlfc3lzbG9nKExPR19XQVJOSU5HLCBfKCJVbmtub3duIHByb3RvY29sIHZlcnNpb24gZnJvbSByb3V0ZSBzb2NrZXQiKSk7CisJICAgd2FybmVkID0gMTsKKwkgfQorICAgICB9CisgICBlbHNlIGlmIChtc2ctPmlmbV90eXBlID09IFJUTV9ORVdBRERSKQorICAgICB7CisgICAgICAgZGVsX2ZhbWlseSA9IDA7CisgICAgICAgcXVldWVfZXZlbnQoRVZFTlRfTkVXQUREUik7CisgICAgIH0KKyAgIGVsc2UgaWYgKG1zZy0+aWZtX3R5cGUgPT0gUlRNX0RFTEFERFIpCisgICAgIHsKKyAgICAgICAvKiBUaGVyZSdzIGEgcmFjZSBpbiB0aGUga2VybmVsLCBzdWNoIHRoYXQgaWYgd2UgcnVuIGlmYWNlX2VudW1lcmF0ZSgpIGltbWVkaWF0ZWx5CisJICB3ZSBnZXQgYSBERUxBRERSIGV2ZW50LCB0aGUgZGVsZXRlZCBhZGRyZXNzIHN0aWxsIGFwcGVhcnMuIEhlcmUgd2Ugc3RvcmUgdGhlIGRlbGV0ZWQgYWRkcmVzcworCSAgaW4gYSBzdGF0aWMgdmFyaWFibGUsIGFuZCBvbWl0IGl0IGZyb20gdGhlIHNldCByZXR1cm5lZCBieSBpZmFjZV9lbnVtZXJhdGUoKSAqLworICAgICAgIGludCBtYXNrID0gKChzdHJ1Y3QgaWZhX21zZ2hkciAqKW1zZyktPmlmYW1fYWRkcnM7CisgICAgICAgaW50IG1hc2t2ZWNbXSA9IHsgUlRBX0RTVCwgUlRBX0dBVEVXQVksIFJUQV9ORVRNQVNLLCBSVEFfR0VOTUFTSywKKwkJCSBSVEFfSUZQLCBSVEFfSUZBLCBSVEFfQVVUSE9SLCBSVEFfQlJEIH07CisgICAgICAgaW50IG9mOworICAgICAgIHVuc2lnbmVkIGludCBpOworICAgICAgIAorICAgICAgIGZvciAoaSA9IDAsICBvZiA9IHNpemVvZihzdHJ1Y3QgaWZhX21zZ2hkcik7IG9mIDwgcmMgJiYgaSA8IHNpemVvZihtYXNrdmVjKS9zaXplb2YobWFza3ZlY1swXSk7IGkrKykgCisJIGlmIChtYXNrICYgbWFza3ZlY1tpXSkgCisJICAgeworCSAgICAgc3RydWN0IHNvY2thZGRyICpzYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikoKGNoYXIgKiltc2cgKyBvZik7CisJICAgICBzaXplX3QgZGlmZiA9IChzYS0+c2FfbGVuICE9IDApID8gc2EtPnNhX2xlbiA6IHNpemVvZihsb25nKTsKKwkgICAgIAorCSAgICAgaWYgKG1hc2t2ZWNbaV0gPT0gUlRBX0lGQSkKKwkgICAgICAgeworCQkgZGVsX2ZhbWlseSA9IHNhLT5zYV9mYW1pbHk7CisJCSBpZiAoZGVsX2ZhbWlseSA9PSBBRl9JTkVUKQorCQkgICBkZWxfYWRkci5hZGRyLmFkZHI0ID0gKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYSktPnNpbl9hZGRyOworI2lmZGVmIEhBVkVfSVBWNgorCQkgZWxzZSBpZiAoZGVsX2ZhbWlseSA9PSBBRl9JTkVUNikKKwkJICAgZGVsX2FkZHIuYWRkci5hZGRyNiA9ICgoc3RydWN0IHNvY2thZGRyX2luNiAqKXNhKS0+c2luNl9hZGRyOworI2VuZGlmCisJCSBlbHNlCisJCSAgIGRlbF9mYW1pbHkgPSAwOworCSAgICAgICB9CisJICAgICAKKwkgICAgIG9mICs9IGRpZmY7CisJICAgICAvKiByb3VuZCB1cCBhcyBuZWVkZWQgKi8KKwkgICAgIGlmIChkaWZmICYgKHNpemVvZihsb25nKSAtIDEpKSAKKwkgICAgICAgb2YgKz0gc2l6ZW9mKGxvbmcpIC0gKGRpZmYgJiAoc2l6ZW9mKGxvbmcpIC0gMSkpOworCSAgIH0KKyAgICAgICAKKyAgICAgICBxdWV1ZV9ldmVudChFVkVOVF9ORVdBRERSKTsKKyAgICAgfQorfQorCisjZW5kaWYgLyogSEFWRV9CU0RfTkVUV09SSyAqLworCisKZGlmZiAtLWdpdCBhL3NyYy9jYWNoZS5jIGIvc3JjL2NhY2hlLmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTcxOWQ5NQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jYWNoZS5jCkBAIC0wLDAgKzEsMTY4NiBAQAorLyogZG5zbWFzcSBpcyBDb3B5cmlnaHQgKGMpIDIwMDAtMjAxNyBTaW1vbiBLZWxsZXkKKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgZGF0ZWQgSnVuZSwgMTk5MSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgdmVyc2lvbiAzIGRhdGVkIDI5IEp1bmUsIDIwMDcuCisgCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisKKyNpbmNsdWRlICJkbnNtYXNxLmgiCisKK3N0YXRpYyBzdHJ1Y3QgY3JlYyAqY2FjaGVfaGVhZCA9IE5VTEwsICpjYWNoZV90YWlsID0gTlVMTCwgKipoYXNoX3RhYmxlID0gTlVMTDsKKyNpZmRlZiBIQVZFX0RIQ1AKK3N0YXRpYyBzdHJ1Y3QgY3JlYyAqZGhjcF9zcGFyZSA9IE5VTEw7CisjZW5kaWYKK3N0YXRpYyBzdHJ1Y3QgY3JlYyAqbmV3X2NoYWluID0gTlVMTDsKK3N0YXRpYyBpbnQgY2FjaGVfaW5zZXJ0ZWQgPSAwLCBjYWNoZV9saXZlX2ZyZWVkID0gMCwgaW5zZXJ0X2Vycm9yOworc3RhdGljIHVuaW9uIGJpZ25hbWUgKmJpZ19mcmVlID0gTlVMTDsKK3N0YXRpYyBpbnQgYmlnbmFtZXNfbGVmdCwgaGFzaF9zaXplOworCisvKiB0eXBlLT5zdHJpbmcgbWFwcGluZzogdGhpcyBpcyBhbHNvIHVzZWQgYnkgdGhlIG5hbWUtaGFzaCBmdW5jdGlvbiBhcyBhIG1peGluZyB0YWJsZS4gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworICB1bnNpZ25lZCBpbnQgdHlwZTsKKyAgY29uc3QgY2hhciAqIGNvbnN0IG5hbWU7Cit9IHR5cGVzdHJbXSA9IHsKKyAgeyAxLCAgICJBIiB9LAorICB7IDIsICAgIk5TIiB9LAorICB7IDUsICAgIkNOQU1FIiB9LAorICB7IDYsICAgIlNPQSIgfSwKKyAgeyAxMCwgICJOVUxMIiB9LAorICB7IDExLCAgIldLUyIgfSwKKyAgeyAxMiwgICJQVFIiIH0sCisgIHsgMTMsICAiSElORk8iIH0sCQorICB7IDE1LCAgIk1YIiB9LAorICB7IDE2LCAgIlRYVCIgfSwKKyAgeyAyMiwgICJOU0FQIiB9LAorICB7IDIzLCAgIk5TQVBfUFRSIiB9LAorICB7IDI0LCAgIlNJRyIgfSwKKyAgeyAyNSwgICJLRVkiIH0sCisgIHsgMjgsICAiQUFBQSIgfSwKKyAgeyAzMywgICJTUlYiIH0sCisgIHsgMzUsICAiTkFQVFIiIH0sCisgIHsgMzYsICAiS1giIH0sCisgIHsgMzcsICAiQ0VSVCIgfSwKKyAgeyAzOCwgICJBNiIgfSwKKyAgeyAzOSwgICJETkFNRSIgfSwKKyAgeyA0MSwgICJPUFQiIH0sCisgIHsgNDMsICAiRFMiIH0sCisgIHsgNDYsICAiUlJTSUciIH0sCisgIHsgNDcsICAiTlNFQyIgfSwKKyAgeyA0OCwgICJETlNLRVkiIH0sCisgIHsgNTAsICAiTlNFQzMiIH0sCisgIHsgMjQ5LCAiVEtFWSIgfSwKKyAgeyAyNTAsICJUU0lHIiB9LAorICB7IDI1MSwgIklYRlIiIH0sCisgIHsgMjUyLCAiQVhGUiIgfSwKKyAgeyAyNTMsICJNQUlMQiIgfSwKKyAgeyAyNTQsICJNQUlMQSIgfSwKKyAgeyAyNTUsICJBTlkiIH0KK307CisKK3N0YXRpYyB2b2lkIGNhY2hlX2ZyZWUoc3RydWN0IGNyZWMgKmNyZWNwKTsKK3N0YXRpYyB2b2lkIGNhY2hlX3VubGluayhzdHJ1Y3QgY3JlYyAqY3JlY3ApOworc3RhdGljIHZvaWQgY2FjaGVfbGluayhzdHJ1Y3QgY3JlYyAqY3JlY3ApOworc3RhdGljIHZvaWQgcmVoYXNoKGludCBzaXplKTsKK3N0YXRpYyB2b2lkIGNhY2hlX2hhc2goc3RydWN0IGNyZWMgKmNyZWNwKTsKKworc3RhdGljIHVuc2lnbmVkIGludCBuZXh0X3VpZCh2b2lkKQoreworICBzdGF0aWMgdW5zaWduZWQgaW50IHVpZCA9IDA7CisKKyAgdWlkKys7CisgIAorICAvKiB1aWQgPT0gMCB1c2VkIHRvIGluZGljYXRlIENOQU1FIHRvIGludGVyZmFjZSBuYW1lLiAqLworICBpZiAodWlkID09IFNSQ19JTlRFUkZBQ0UpCisgICAgdWlkKys7CisgIAorICByZXR1cm4gdWlkOworfQorCit2b2lkIGNhY2hlX2luaXQodm9pZCkKK3sKKyAgc3RydWN0IGNyZWMgKmNyZWNwOworICBpbnQgaTsKKyAKKyAgYmlnbmFtZXNfbGVmdCA9IGRhZW1vbi0+Y2FjaGVzaXplLzEwOworICAKKyAgaWYgKGRhZW1vbi0+Y2FjaGVzaXplID4gMCkKKyAgICB7CisgICAgICBjcmVjcCA9IHNhZmVfbWFsbG9jKGRhZW1vbi0+Y2FjaGVzaXplKnNpemVvZihzdHJ1Y3QgY3JlYykpOworICAgICAgCisgICAgICBmb3IgKGk9MDsgaSA8IGRhZW1vbi0+Y2FjaGVzaXplOyBpKyssIGNyZWNwKyspCisJeworCSAgY2FjaGVfbGluayhjcmVjcCk7CisJICBjcmVjcC0+ZmxhZ3MgPSAwOworCSAgY3JlY3AtPnVpZCA9IG5leHRfdWlkKCk7CisJfQorICAgIH0KKyAgCisgIC8qIGNyZWF0ZSBpbml0aWFsIGhhc2ggdGFibGUqLworICByZWhhc2goZGFlbW9uLT5jYWNoZXNpemUpOworfQorCisvKiBJbiBtb3N0IGNhc2VzLCB3ZSBjcmVhdGUgdGhlIGhhc2ggdGFibGUgb25jZSBoZXJlIGJ5IGNhbGxpbmcgdGhpcyB3aXRoIChoYXNoX3RhYmxlID09IE5VTEwpCisgICBidXQgaWYgdGhlIGhvc3RzIGZpbGUocykgYXJlIGJpZyAoc29tZSBwZW9wbGUgaGF2ZSA1MDAwMCBhZC1ibG9jayBlbnRyaWVzKSwgdGhlIHRhYmxlCisgICB3aWxsIGJlIG11Y2ggdG9vIHNtYWxsLCBzbyB0aGUgaG9zdHMgcmVhZGluZyBjb2RlIGNhbGxzIHJlaGFzaCBldmVyeSAxMDAwIGFkZHJlc3NlcywgdG8KKyAgIGV4cGFuZCB0aGUgdGFibGUuICovCitzdGF0aWMgdm9pZCByZWhhc2goaW50IHNpemUpCit7CisgIHN0cnVjdCBjcmVjICoqbmV3LCAqKm9sZCwgKnAsICp0bXA7CisgIGludCBpLCBuZXdfc2l6ZSwgb2xkX3NpemU7CisKKyAgLyogaGFzaF9zaXplIGlzIGEgcG93ZXIgb2YgdHdvLiAqLworICBmb3IgKG5ld19zaXplID0gNjQ7IG5ld19zaXplIDwgc2l6ZS8xMDsgbmV3X3NpemUgPSBuZXdfc2l6ZSA8PCAxKTsKKyAgCisgIC8qIG11c3Qgc3VjY2VlZCBpbiBnZXR0aW5nIGZpcnN0IGluc3RhbmNlLCBmYWlsdXJlIGxhdGVyIGlzIG5vbi1mYXRhbCAqLworICBpZiAoIWhhc2hfdGFibGUpCisgICAgbmV3ID0gc2FmZV9tYWxsb2MobmV3X3NpemUgKiBzaXplb2Yoc3RydWN0IGNyZWMgKikpOworICBlbHNlIGlmIChuZXdfc2l6ZSA8PSBoYXNoX3NpemUgfHwgIShuZXcgPSB3aGluZV9tYWxsb2MobmV3X3NpemUgKiBzaXplb2Yoc3RydWN0IGNyZWMgKikpKSkKKyAgICByZXR1cm47CisKKyAgZm9yKGkgPSAwOyBpIDwgbmV3X3NpemU7IGkrKykKKyAgICBuZXdbaV0gPSBOVUxMOworCisgIG9sZCA9IGhhc2hfdGFibGU7CisgIG9sZF9zaXplID0gaGFzaF9zaXplOworICBoYXNoX3RhYmxlID0gbmV3OworICBoYXNoX3NpemUgPSBuZXdfc2l6ZTsKKyAgCisgIGlmIChvbGQpCisgICAgeworICAgICAgZm9yIChpID0gMDsgaSA8IG9sZF9zaXplOyBpKyspCisJZm9yIChwID0gb2xkW2ldOyBwIDsgcCA9IHRtcCkKKwkgIHsKKwkgICAgdG1wID0gcC0+aGFzaF9uZXh0OworCSAgICBjYWNoZV9oYXNoKHApOworCSAgfQorICAgICAgZnJlZShvbGQpOworICAgIH0KK30KKyAgCitzdGF0aWMgc3RydWN0IGNyZWMgKipoYXNoX2J1Y2tldChjaGFyICpuYW1lKQoreworICB1bnNpZ25lZCBpbnQgYywgdmFsID0gMDE3NDY1OyAvKiBCYXJrZXIgY29kZSAtIG1pbmltdW0gc2VsZi1jb3JyZWxhdGlvbiBpbiBjeWNsaWMgc2hpZnQgKi8KKyAgY29uc3QgdW5zaWduZWQgY2hhciAqbWl4X3RhYiA9IChjb25zdCB1bnNpZ25lZCBjaGFyKil0eXBlc3RyOyAKKworICB3aGlsZSgoYyA9ICh1bnNpZ25lZCBjaGFyKSAqbmFtZSsrKSkKKyAgICB7CisgICAgICAvKiBkb24ndCB1c2UgdG9sb3dlciBhbmQgZnJpZW5kcyBoZXJlIC0gdGhleSBtYXkgYmUgbWVzc2VkIHVwIGJ5IExPQ0FMRSAqLworICAgICAgaWYgKGMgPj0gJ0EnICYmIGMgPD0gJ1onKQorCWMgKz0gJ2EnIC0gJ0EnOworICAgICAgdmFsID0gKCh2YWwgPDwgNykgfCAodmFsID4+ICgzMiAtIDcpKSkgKyAobWl4X3RhYlsodmFsICsgYykgJiAweDNGXSBeIGMpOworICAgIH0gCisgIAorICAvKiBoYXNoX3NpemUgaXMgYSBwb3dlciBvZiB0d28gKi8KKyAgcmV0dXJuIGhhc2hfdGFibGUgKyAoKHZhbCBeICh2YWwgPj4gMTYpKSAmIChoYXNoX3NpemUgLSAxKSk7Cit9CisKK3N0YXRpYyB2b2lkIGNhY2hlX2hhc2goc3RydWN0IGNyZWMgKmNyZWNwKQoreworICAvKiBtYWludGFpbiBhbiBpbnZhcmlhbnQgdGhhdCBhbGwgZW50cmllcyB3aXRoIEZfUkVWRVJTRSBzZXQKKyAgICAgYXJlIGF0IHRoZSBzdGFydCBvZiB0aGUgaGFzaC1jaGFpbiAgYW5kIGFsbCBub24tcmV2ZXJzZQorICAgICBpbW1vcnRhbCBlbnRyaWVzIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBoYXNoLWNoYWluLgorICAgICBUaGlzIGFsbG93cyByZXZlcnNlIHNlYXJjaGVzIGFuZCBnYXJiYWdlIGNvbGxlY3Rpb24gdG8gYmUgb3B0aW1pc2VkICovCisKKyAgc3RydWN0IGNyZWMgKip1cCA9IGhhc2hfYnVja2V0KGNhY2hlX2dldF9uYW1lKGNyZWNwKSk7CisKKyAgaWYgKCEoY3JlY3AtPmZsYWdzICYgRl9SRVZFUlNFKSkKKyAgICB7CisgICAgICB3aGlsZSAoKnVwICYmICgoKnVwKS0+ZmxhZ3MgJiBGX1JFVkVSU0UpKQorCXVwID0gJigoKnVwKS0+aGFzaF9uZXh0KTsgCisgICAgICAKKyAgICAgIGlmIChjcmVjcC0+ZmxhZ3MgJiBGX0lNTU9SVEFMKQorCXdoaWxlICgqdXAgJiYgISgoKnVwKS0+ZmxhZ3MgJiBGX0lNTU9SVEFMKSkKKwkgIHVwID0gJigoKnVwKS0+aGFzaF9uZXh0KTsKKyAgICB9CisgIGNyZWNwLT5oYXNoX25leHQgPSAqdXA7CisgICp1cCA9IGNyZWNwOworfQorCisjaWZkZWYgSEFWRV9ETlNTRUMKK3N0YXRpYyB2b2lkIGNhY2hlX2Jsb2NrZGF0YV9mcmVlKHN0cnVjdCBjcmVjICpjcmVjcCkKK3sKKyAgaWYgKGNyZWNwLT5mbGFncyAmIEZfRE5TS0VZKQorICAgIGJsb2NrZGF0YV9mcmVlKGNyZWNwLT5hZGRyLmtleS5rZXlkYXRhKTsKKyAgZWxzZSBpZiAoKGNyZWNwLT5mbGFncyAmIEZfRFMpICYmICEoY3JlY3AtPmZsYWdzICYgRl9ORUcpKQorICAgIGJsb2NrZGF0YV9mcmVlKGNyZWNwLT5hZGRyLmRzLmtleWRhdGEpOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGNhY2hlX2ZyZWUoc3RydWN0IGNyZWMgKmNyZWNwKQoreworICBjcmVjcC0+ZmxhZ3MgJj0gfkZfRk9SV0FSRDsKKyAgY3JlY3AtPmZsYWdzICY9IH5GX1JFVkVSU0U7CisgIGNyZWNwLT51aWQgPSBuZXh0X3VpZCgpOyAvKiBpbnZhbGlkYXRlIENOQU1FUyBwb2ludGluZyB0byB0aGlzLiAqLworCisgIGlmIChjYWNoZV90YWlsKQorICAgIGNhY2hlX3RhaWwtPm5leHQgPSBjcmVjcDsKKyAgZWxzZQorICAgIGNhY2hlX2hlYWQgPSBjcmVjcDsKKyAgY3JlY3AtPnByZXYgPSBjYWNoZV90YWlsOworICBjcmVjcC0+bmV4dCA9IE5VTEw7CisgIGNhY2hlX3RhaWwgPSBjcmVjcDsKKyAgCisgIC8qIHJldHJpZXZlIGJpZyBuYW1lIGZvciBmdXJ0aGVyIHVzZS4gKi8KKyAgaWYgKGNyZWNwLT5mbGFncyAmIEZfQklHTkFNRSkKKyAgICB7CisgICAgICBjcmVjcC0+bmFtZS5ibmFtZS0+bmV4dCA9IGJpZ19mcmVlOworICAgICAgYmlnX2ZyZWUgPSBjcmVjcC0+bmFtZS5ibmFtZTsKKyAgICAgIGNyZWNwLT5mbGFncyAmPSB+Rl9CSUdOQU1FOworICAgIH0KKworI2lmZGVmIEhBVkVfRE5TU0VDCisgIGNhY2hlX2Jsb2NrZGF0YV9mcmVlKGNyZWNwKTsKKyNlbmRpZgorfSAgICAKKworLyogaW5zZXJ0IGEgbmV3IGNhY2hlIGVudHJ5IGF0IHRoZSBoZWFkIG9mIHRoZSBsaXN0ICh5b3VuZ2VzdCBlbnRyeSkgKi8KK3N0YXRpYyB2b2lkIGNhY2hlX2xpbmsoc3RydWN0IGNyZWMgKmNyZWNwKQoreworICBpZiAoY2FjaGVfaGVhZCkgLyogY2hlY2sgbmVlZGVkIGZvciBpbml0IGNvZGUgKi8KKyAgICBjYWNoZV9oZWFkLT5wcmV2ID0gY3JlY3A7CisgIGNyZWNwLT5uZXh0ID0gY2FjaGVfaGVhZDsKKyAgY3JlY3AtPnByZXYgPSBOVUxMOworICBjYWNoZV9oZWFkID0gY3JlY3A7CisgIGlmICghY2FjaGVfdGFpbCkKKyAgICBjYWNoZV90YWlsID0gY3JlY3A7Cit9CisKKy8qIHJlbW92ZSBhbiBhcmJpdHJhcnkgY2FjaGUgZW50cnkgZm9yIHByb21vdGlvbiAqLyAKK3N0YXRpYyB2b2lkIGNhY2hlX3VubGluayAoc3RydWN0IGNyZWMgKmNyZWNwKQoreworICBpZiAoY3JlY3AtPnByZXYpCisgICAgY3JlY3AtPnByZXYtPm5leHQgPSBjcmVjcC0+bmV4dDsKKyAgZWxzZQorICAgIGNhY2hlX2hlYWQgPSBjcmVjcC0+bmV4dDsKKworICBpZiAoY3JlY3AtPm5leHQpCisgICAgY3JlY3AtPm5leHQtPnByZXYgPSBjcmVjcC0+cHJldjsKKyAgZWxzZQorICAgIGNhY2hlX3RhaWwgPSBjcmVjcC0+cHJldjsKK30KKworY2hhciAqY2FjaGVfZ2V0X25hbWUoc3RydWN0IGNyZWMgKmNyZWNwKQoreworICBpZiAoY3JlY3AtPmZsYWdzICYgRl9CSUdOQU1FKQorICAgIHJldHVybiBjcmVjcC0+bmFtZS5ibmFtZS0+bmFtZTsKKyAgZWxzZSBpZiAoY3JlY3AtPmZsYWdzICYgRl9OQU1FUCkgCisgICAgcmV0dXJuIGNyZWNwLT5uYW1lLm5hbWVwOworICAKKyAgcmV0dXJuIGNyZWNwLT5uYW1lLnNuYW1lOworfQorCitjaGFyICpjYWNoZV9nZXRfY25hbWVfdGFyZ2V0KHN0cnVjdCBjcmVjICpjcmVjcCkKK3sKKyAgaWYgKGNyZWNwLT5hZGRyLmNuYW1lLnVpZCAhPSBTUkNfSU5URVJGQUNFKQorICAgIHJldHVybiBjYWNoZV9nZXRfbmFtZShjcmVjcC0+YWRkci5jbmFtZS50YXJnZXQuY2FjaGUpOworCisgIHJldHVybiBjcmVjcC0+YWRkci5jbmFtZS50YXJnZXQuaW50X25hbWUtPm5hbWU7Cit9CisKKworCitzdHJ1Y3QgY3JlYyAqY2FjaGVfZW51bWVyYXRlKGludCBpbml0KQoreworICBzdGF0aWMgaW50IGJ1Y2tldDsKKyAgc3RhdGljIHN0cnVjdCBjcmVjICpjYWNoZTsKKworICBpZiAoaW5pdCkKKyAgICB7CisgICAgICBidWNrZXQgPSAwOworICAgICAgY2FjaGUgPSBOVUxMOworICAgIH0KKyAgZWxzZSBpZiAoY2FjaGUgJiYgY2FjaGUtPmhhc2hfbmV4dCkKKyAgICBjYWNoZSA9IGNhY2hlLT5oYXNoX25leHQ7CisgIGVsc2UKKyAgICB7CisgICAgICAgY2FjaGUgPSBOVUxMOyAKKyAgICAgICB3aGlsZSAoYnVja2V0IDwgaGFzaF9zaXplKQorCSBpZiAoKGNhY2hlID0gaGFzaF90YWJsZVtidWNrZXQrK10pKQorCSAgIGJyZWFrOworICAgIH0KKyAgCisgIHJldHVybiBjYWNoZTsKK30KKworc3RhdGljIGludCBpc19vdXRkYXRlZF9jbmFtZV9wb2ludGVyKHN0cnVjdCBjcmVjICpjcmVjcCkKK3sKKyAgaWYgKCEoY3JlY3AtPmZsYWdzICYgRl9DTkFNRSkgfHwgY3JlY3AtPmFkZHIuY25hbWUudWlkID09IFNSQ19JTlRFUkZBQ0UpCisgICAgcmV0dXJuIDA7CisgIAorICAvKiBOQi4gcmVjb3JkIG1heSBiZSByZXVzZWQgYXMgRFMgb3IgRE5TS0VZLCB3aGVyZSB1aWQgaXMgCisgICAgIG92ZXJsb2FkZWQgZm9yIHNvbWV0aGluZyBjb21wbGV0ZWx5IGRpZmZlcmVudCAqLworICBpZiAoY3JlY3AtPmFkZHIuY25hbWUudGFyZ2V0LmNhY2hlICYmIAorICAgICAgKGNyZWNwLT5hZGRyLmNuYW1lLnRhcmdldC5jYWNoZS0+ZmxhZ3MgJiAoRl9JUFY0IHwgRl9JUFY2IHwgRl9DTkFNRSkpICYmCisgICAgICBjcmVjcC0+YWRkci5jbmFtZS51aWQgPT0gY3JlY3AtPmFkZHIuY25hbWUudGFyZ2V0LmNhY2hlLT51aWQpCisgICAgcmV0dXJuIDA7CisgIAorICByZXR1cm4gMTsKK30KKworc3RhdGljIGludCBpc19leHBpcmVkKHRpbWVfdCBub3csIHN0cnVjdCBjcmVjICpjcmVjcCkKK3sKKyAgaWYgKGNyZWNwLT5mbGFncyAmIEZfSU1NT1JUQUwpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKGRpZmZ0aW1lKG5vdywgY3JlY3AtPnR0ZCkgPCAwKQorICAgIHJldHVybiAwOworICAKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3JlYyAqY2FjaGVfc2Nhbl9mcmVlKGNoYXIgKm5hbWUsIHN0cnVjdCBhbGxfYWRkciAqYWRkciwgdGltZV90IG5vdywgdW5zaWduZWQgc2hvcnQgZmxhZ3MpCit7CisgIC8qIFNjYW4gYW5kIHJlbW92ZSBvbGQgZW50cmllcy4KKyAgICAgSWYgKGZsYWdzICYgRl9GT1JXQVJEKSB0aGVuIHJlbW92ZSBhbnkgZm9yd2FyZCBlbnRyaWVzIGZvciBuYW1lIGFuZCBhbnkgZXhwaXJlZAorICAgICBlbnRyaWVzIGJ1dCBvbmx5IGluIHRoZSBzYW1lIGhhc2ggYnVja2V0IGFzIG5hbWUuCisgICAgIElmIChmbGFncyAmIEZfUkVWRVJTRSkgdGhlbiByZW1vdmUgYW55IHJldmVyc2UgZW50cmllcyBmb3IgYWRkciBhbmQgYW55IGV4cGlyZWQKKyAgICAgZW50cmllcyBpbiB0aGUgd2hvbGUgY2FjaGUuCisgICAgIElmIChmbGFncyA9PSAwKSByZW1vdmUgYW55IGV4cGlyZWQgZW50cmllcyBpbiB0aGUgd2hvbGUgY2FjaGUuIAorCisgICAgIEluIHRoZSBmbGFncyAmIEZfRk9SV0FSRCBjYXNlLCB0aGUgcmV0dXJuIGNvZGUgaXMgdmFsaWQsIGFuZCByZXR1cm5zIGEgbm9uLU5VTEwgcG9pbnRlcgorICAgICB0byBhIGNhY2hlIGVudHJ5IGlmIHRoZSBuYW1lIGV4aXN0cyBpbiB0aGUgY2FjaGUgYXMgYSBIT1NUUyBvciBESENQIGVudHJ5ICh0aGVzZSBhcmUgbmV2ZXIgZGVsZXRlZCkKKworICAgICBXZSB0YWtlIGFkdmFudGFnZSBvZiB0aGUgZmFjdCB0aGF0IGhhc2ggY2hhaW5zIGhhdmUgc3R1ZmYgaW4gdGhlIG9yZGVyIDxyZXZlcnNlPiw8b3RoZXI+LDxpbW1vcnRhbD4KKyAgICAgc28gdGhhdCB3aGVuIHdlIGhpdCBhbiBlbnRyeSB3aGljaCBpc24ndCByZXZlcnNlIGFuZCBpcyBpbW1vcnRhbCwgd2UncmUgZG9uZS4gKi8KKyAKKyAgc3RydWN0IGNyZWMgKmNyZWNwLCAqKnVwOworICAKKyAgaWYgKGZsYWdzICYgRl9GT1JXQVJEKQorICAgIHsKKyAgICAgIGZvciAodXAgPSBoYXNoX2J1Y2tldChuYW1lKSwgY3JlY3AgPSAqdXA7IGNyZWNwOyBjcmVjcCA9IGNyZWNwLT5oYXNoX25leHQpCisJeworCSAgaWYgKGlzX2V4cGlyZWQobm93LCBjcmVjcCkgfHwgaXNfb3V0ZGF0ZWRfY25hbWVfcG9pbnRlcihjcmVjcCkpCisJICAgIHsgCisJICAgICAgKnVwID0gY3JlY3AtPmhhc2hfbmV4dDsKKwkgICAgICBpZiAoIShjcmVjcC0+ZmxhZ3MgJiAoRl9IT1NUUyB8IEZfREhDUCB8IEZfQ09ORklHKSkpCisJCXsKKwkJICBjYWNoZV91bmxpbmsoY3JlY3ApOworCQkgIGNhY2hlX2ZyZWUoY3JlY3ApOworCQl9CisJICAgICAgY29udGludWU7CisJICAgIH0gCisJCisJICBpZiAoKGNyZWNwLT5mbGFncyAmIEZfRk9SV0FSRCkgJiYgaG9zdG5hbWVfaXNlcXVhbChjYWNoZV9nZXRfbmFtZShjcmVjcCksIG5hbWUpKQorCSAgICB7CisJICAgICAgLyogRG9uJ3QgZGVsZXRlIEROU1NFQyBpbiBmYXZvdXIgb2YgYSBDTkFNRSwgdGhleSBjYW4gY28tZXhpc3QgKi8KKwkgICAgICBpZiAoKGZsYWdzICYgY3JlY3AtPmZsYWdzICYgKEZfSVBWNCB8IEZfSVBWNikpIHx8IAorCQkgICgoKGNyZWNwLT5mbGFncyB8IGZsYWdzKSAmIEZfQ05BTUUpICYmICEoY3JlY3AtPmZsYWdzICYgKEZfRE5TS0VZIHwgRl9EUykpKSkKKwkJeworCQkgIGlmIChjcmVjcC0+ZmxhZ3MgJiAoRl9IT1NUUyB8IEZfREhDUCB8IEZfQ09ORklHKSkKKwkJICAgIHJldHVybiBjcmVjcDsKKwkJICAqdXAgPSBjcmVjcC0+aGFzaF9uZXh0OworCQkgIGNhY2hlX3VubGluayhjcmVjcCk7CisJCSAgY2FjaGVfZnJlZShjcmVjcCk7CisJCSAgY29udGludWU7CisJCX0KKwkgICAgICAKKyNpZmRlZiBIQVZFX0ROU1NFQworCSAgICAgIC8qIERlbGV0aW9uIGhhcyB0byBiZSBjbGFzcy1zZW5zaXRpdmUgZm9yIERTIGFuZCBETlNLRVkgKi8KKwkgICAgICBpZiAoKGZsYWdzICYgY3JlY3AtPmZsYWdzICYgKEZfRE5TS0VZIHwgRl9EUykpICYmIGNyZWNwLT51aWQgPT0gYWRkci0+YWRkci5kbnNzZWMuY2xhc3MpCisJCXsKKwkJICBpZiAoY3JlY3AtPmZsYWdzICYgRl9DT05GSUcpCisJCSAgICByZXR1cm4gY3JlY3A7CisJCSAgKnVwID0gY3JlY3AtPmhhc2hfbmV4dDsKKwkJICBjYWNoZV91bmxpbmsoY3JlY3ApOworCQkgIGNhY2hlX2ZyZWUoY3JlY3ApOworCQkgIGNvbnRpbnVlOworCQl9CisjZW5kaWYKKwkgICAgfQorCSAgdXAgPSAmY3JlY3AtPmhhc2hfbmV4dDsKKwl9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaW50IGk7CisjaWZkZWYgSEFWRV9JUFY2CisgICAgICBpbnQgYWRkcmxlbiA9IChmbGFncyAmIEZfSVBWNikgPyBJTjZBRERSU1ogOiBJTkFERFJTWjsKKyNlbHNlCisgICAgICBpbnQgYWRkcmxlbiA9IElOQUREUlNaOworI2VuZGlmIAorICAgICAgZm9yIChpID0gMDsgaSA8IGhhc2hfc2l6ZTsgaSsrKQorCWZvciAoY3JlY3AgPSBoYXNoX3RhYmxlW2ldLCB1cCA9ICZoYXNoX3RhYmxlW2ldOyAKKwkgICAgIGNyZWNwICYmICgoY3JlY3AtPmZsYWdzICYgRl9SRVZFUlNFKSB8fCAhKGNyZWNwLT5mbGFncyAmIEZfSU1NT1JUQUwpKTsKKwkgICAgIGNyZWNwID0gY3JlY3AtPmhhc2hfbmV4dCkKKwkgIGlmIChpc19leHBpcmVkKG5vdywgY3JlY3ApKQorCSAgICB7CisJICAgICAgKnVwID0gY3JlY3AtPmhhc2hfbmV4dDsKKwkgICAgICBpZiAoIShjcmVjcC0+ZmxhZ3MgJiAoRl9IT1NUUyB8IEZfREhDUCB8IEZfQ09ORklHKSkpCisJCXsgCisJCSAgY2FjaGVfdW5saW5rKGNyZWNwKTsKKwkJICBjYWNoZV9mcmVlKGNyZWNwKTsKKwkJfQorCSAgICB9CisJICBlbHNlIGlmICghKGNyZWNwLT5mbGFncyAmIChGX0hPU1RTIHwgRl9ESENQIHwgRl9DT05GSUcpKSAmJgorCQkgICAoZmxhZ3MgJiBjcmVjcC0+ZmxhZ3MgJiBGX1JFVkVSU0UpICYmIAorCQkgICAoZmxhZ3MgJiBjcmVjcC0+ZmxhZ3MgJiAoRl9JUFY0IHwgRl9JUFY2KSkgJiYKKwkJICAgbWVtY21wKCZjcmVjcC0+YWRkci5hZGRyLCBhZGRyLCBhZGRybGVuKSA9PSAwKQorCSAgICB7CisJICAgICAgKnVwID0gY3JlY3AtPmhhc2hfbmV4dDsKKwkgICAgICBjYWNoZV91bmxpbmsoY3JlY3ApOworCSAgICAgIGNhY2hlX2ZyZWUoY3JlY3ApOworCSAgICB9CisJICBlbHNlCisJICAgIHVwID0gJmNyZWNwLT5oYXNoX25leHQ7CisgICAgfQorICAKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIE5vdGU6IFRoZSBub3JtYWwgY2FsbGluZyBzZXF1ZW5jZSBpcworICAgY2FjaGVfc3RhcnRfaW5zZXJ0CisgICBjYWNoZV9pbnNlcnQgKiBuCisgICBjYWNoZV9lbmRfaW5zZXJ0CisKKyAgIGJ1dCBhbiBhYm9ydCBjYW4gY2F1c2UgdGhlIGNhY2hlX2VuZF9pbnNlcnQgdG8gYmUgbWlzc2VkIAorICAgaW4gd2hpY2ggY2FuIHRoZSBuZXh0IGNhY2hlX3N0YXJ0X2luc2VydCBjbGVhbnMgdGhpbmdzIHVwLiAqLworCit2b2lkIGNhY2hlX3N0YXJ0X2luc2VydCh2b2lkKQoreworICAvKiBGcmVlIGFueSBlbnRyaWVzIHdoaWNoIGRpZG4ndCBnZXQgY29tbWl0dGVkIGR1cmluZyB0aGUgbGFzdAorICAgICBpbnNlcnQgZHVlIHRvIGVycm9yLgorICAqLworICB3aGlsZSAobmV3X2NoYWluKQorICAgIHsKKyAgICAgIHN0cnVjdCBjcmVjICp0bXAgPSBuZXdfY2hhaW4tPm5leHQ7CisgICAgICBjYWNoZV9mcmVlKG5ld19jaGFpbik7CisgICAgICBuZXdfY2hhaW4gPSB0bXA7CisgICAgfQorICBuZXdfY2hhaW4gPSBOVUxMOworICBpbnNlcnRfZXJyb3IgPSAwOworfQorIAorc3RydWN0IGNyZWMgKmNhY2hlX2luc2VydChjaGFyICpuYW1lLCBzdHJ1Y3QgYWxsX2FkZHIgKmFkZHIsIAorCQkJICB0aW1lX3Qgbm93LCAgdW5zaWduZWQgbG9uZyB0dGwsIHVuc2lnbmVkIHNob3J0IGZsYWdzKQoreworICBzdHJ1Y3QgY3JlYyAqbmV3OworICB1bmlvbiBiaWduYW1lICpiaWdfbmFtZSA9IE5VTEw7CisgIGludCBmcmVlZF9hbGwgPSBmbGFncyAmIEZfUkVWRVJTRTsKKyAgaW50IGZyZWVfYXZhaWwgPSAwOworCisgIC8qIERvbid0IGxvZyBETlNTRUMgcmVjb3JkcyBoZXJlLCBkb25lIGVsc2V3aGVyZSAqLworICBpZiAoZmxhZ3MgJiAoRl9JUFY0IHwgRl9JUFY2IHwgRl9DTkFNRSkpCisgICAgeworICAgICAgbG9nX3F1ZXJ5KGZsYWdzIHwgRl9VUFNUUkVBTSwgbmFtZSwgYWRkciwgTlVMTCk7CisgICAgICAvKiBEb24ndCBtZXNzIHdpdGggVFRMIGZvciBETlNTRUMgcmVjb3Jkcy4gKi8KKyAgICAgIGlmIChkYWVtb24tPm1heF9jYWNoZV90dGwgIT0gMCAmJiBkYWVtb24tPm1heF9jYWNoZV90dGwgPCB0dGwpCisJdHRsID0gZGFlbW9uLT5tYXhfY2FjaGVfdHRsOworICAgICAgaWYgKGRhZW1vbi0+bWluX2NhY2hlX3R0bCAhPSAwICYmIGRhZW1vbi0+bWluX2NhY2hlX3R0bCA+IHR0bCkKKwl0dGwgPSBkYWVtb24tPm1pbl9jYWNoZV90dGw7CisgICAgfQorCisgIC8qIGlmIHByZXZpb3VzIGluc2VydGlvbiBmYWlsZWQgZ2l2ZSB1cCBub3cuICovCisgIGlmIChpbnNlcnRfZXJyb3IpCisgICAgcmV0dXJuIE5VTEw7CisgIAorICAvKiBGaXJzdCByZW1vdmUgYW55IGV4cGlyZWQgZW50cmllcyBhbmQgZW50cmllcyBmb3IgdGhlIG5hbWUvYWRkcmVzcyB3ZQorICAgICBhcmUgY3VycmVudGx5IGluc2VydGluZy4gKi8KKyAgaWYgKChuZXcgPSBjYWNoZV9zY2FuX2ZyZWUobmFtZSwgYWRkciwgbm93LCBmbGFncykpKQorICAgIHsKKyAgICAgIC8qIFdlJ3JlIHRyeWluZyB0byBpbnNlcnQgYSByZWNvcmQgb3ZlciBvbmUgZnJvbSAKKwkgL2V0Yy9ob3N0cyBvciBESENQLCBvciBvdGhlciBjb25maWcuIElmIHRoZSAKKwkgZXhpc3RpbmcgcmVjb3JkIGlzIGZvciBhbiBBIG9yIEFBQUEgYW5kCisJIHRoZSByZWNvcmQgd2UncmUgdHJ5aW5nIHRvIGluc2VydCBpcyB0aGUgc2FtZSwgCisJIGp1c3QgZHJvcCB0aGUgaW5zZXJ0LCBidXQgZG9uJ3QgZXJyb3IgdGhlIHdob2xlIHByb2Nlc3MuICovCisgICAgICBpZiAoKGZsYWdzICYgKEZfSVBWNCB8IEZfSVBWNikpICYmIChmbGFncyAmIEZfRk9SV0FSRCkgJiYgYWRkcikKKwl7CisJICBpZiAoKGZsYWdzICYgRl9JUFY0KSAmJiAobmV3LT5mbGFncyAmIEZfSVBWNCkgJiYKKwkgICAgICBuZXctPmFkZHIuYWRkci5hZGRyLmFkZHI0LnNfYWRkciA9PSBhZGRyLT5hZGRyLmFkZHI0LnNfYWRkcikKKwkgICAgcmV0dXJuIG5ldzsKKyNpZmRlZiBIQVZFX0lQVjYKKwkgIGVsc2UgaWYgKChmbGFncyAmIEZfSVBWNikgJiYgKG5ldy0+ZmxhZ3MgJiBGX0lQVjYpICYmCisJCSAgIElONl9BUkVfQUREUl9FUVVBTCgmbmV3LT5hZGRyLmFkZHIuYWRkci5hZGRyNiwgJmFkZHItPmFkZHIuYWRkcjYpKQorCSAgICByZXR1cm4gbmV3OworI2VuZGlmCisJfQorICAgICAgCisgICAgICBpbnNlcnRfZXJyb3IgPSAxOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAKKyAgLyogTm93IGdldCBhIGNhY2hlIGVudHJ5IGZyb20gdGhlIGVuZCBvZiB0aGUgTFJVIGxpc3QgKi8KKyAgd2hpbGUgKDEpIHsKKyAgICBpZiAoIShuZXcgPSBjYWNoZV90YWlsKSkgLyogbm8gZW50cmllcyBsZWZ0IC0gY2FjaGUgaXMgdG9vIHNtYWxsLCBiYWlsICovCisgICAgICB7CisJaW5zZXJ0X2Vycm9yID0gMTsKKwlyZXR1cm4gTlVMTDsKKyAgICAgIH0KKyAgICAKKyAgICAvKiBFbmQgb2YgTFJVIGxpc3QgaXMgc3RpbGwgaW4gdXNlOiBpZiB3ZSBkaWRuJ3Qgc2NhbiBhbGwgdGhlIGhhc2gKKyAgICAgICBjaGFpbnMgZm9yIGV4cGlyZWQgZW50cmllcyBkbyB0aGF0IG5vdy4gSWYgd2UgYWxyZWFkeSB0cmllZCB0aGF0CisgICAgICAgdGhlbiBpdCdzIHRpbWUgdG8gc3RhcnQgc3BpbGxpbmcgdGhpbmdzLiAqLworICAgIAorICAgIGlmIChuZXctPmZsYWdzICYgKEZfRk9SV0FSRCB8IEZfUkVWRVJTRSkpCisgICAgICB7IAorCS8qIElmIGZyZWVfYXZhaWwgc2V0LCB3ZSBiZWxpZXZlIHRoYXQgYW4gZW50cnkgaGFzIGJlZW4gZnJlZWQuCisJICAgQnVncyBoYXZlIGJlZW4ga25vd24gdG8gbWFrZSB0aGlzIG5vdCB0cnVlLCByZXN1bHRpbmcgaW4KKwkgICBhIHRpZ2h0IGxvb3AgaGVyZS4gSWYgdGhhdCBoYXBwZW5zLCBhYmFuZG9uIHRoZQorCSAgIGluc2VydC4gT25jZSBpbiB0aGlzIHN0YXRlLCBhbGwgaW5zZXJ0cyB3aWxsIHByb2JhYmx5IGZhaWwuICovCisJaWYgKGZyZWVfYXZhaWwpCisJICB7CisJICAgIHN0YXRpYyBpbnQgd2FybmVkID0gMDsKKwkgICAgaWYgKCF3YXJuZWQpCisJICAgICAgeworCQlteV9zeXNsb2coTE9HX0VSUiwgXygiSW50ZXJuYWwgZXJyb3IgaW4gY2FjaGUuIikpOworCQl3YXJuZWQgPSAxOworCSAgICAgIH0KKwkgICAgaW5zZXJ0X2Vycm9yID0gMTsKKwkgICAgcmV0dXJuIE5VTEw7CisJICB9CisJCQorCWlmIChmcmVlZF9hbGwpCisJICB7CisJICAgIHN0cnVjdCBhbGxfYWRkciBmcmVlX2FkZHIgPSBuZXctPmFkZHIuYWRkcjs7CisKKyNpZmRlZiBIQVZFX0ROU1NFQworCSAgICAvKiBGb3IgRE5TU0VDIHJlY29yZHMsIGFkZHIgaG9sZHMgY2xhc3MuICovCisJICAgIGlmIChuZXctPmZsYWdzICYgKEZfRFMgfCBGX0ROU0tFWSkpCisJICAgICAgZnJlZV9hZGRyLmFkZHIuZG5zc2VjLmNsYXNzID0gbmV3LT51aWQ7CisjZW5kaWYKKwkgICAgCisJICAgIGZyZWVfYXZhaWwgPSAxOyAvKiBNdXN0IGJlIGZyZWUgc3BhY2Ugbm93LiAqLworCSAgICBjYWNoZV9zY2FuX2ZyZWUoY2FjaGVfZ2V0X25hbWUobmV3KSwgJmZyZWVfYWRkciwgbm93LCBuZXctPmZsYWdzKTsKKwkgICAgY2FjaGVfbGl2ZV9mcmVlZCsrOworCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgY2FjaGVfc2Nhbl9mcmVlKE5VTEwsIE5VTEwsIG5vdywgMCk7CisJICAgIGZyZWVkX2FsbCA9IDE7CisJICB9CisJY29udGludWU7CisgICAgICB9CisgCisgICAgLyogQ2hlY2sgaWYgd2UgbmVlZCB0byBhbmQgY2FuIGFsbG9jYXRlIGV4dHJhIG1lbW9yeSBmb3IgYSBsb25nIG5hbWUuCisgICAgICAgSWYgdGhhdCBmYWlscywgZ2l2ZSB1cCBub3csIGFsd2F5cyBzdWNjZWVkIGZvciBETlNTRUMgcmVjb3Jkcy4gKi8KKyAgICBpZiAobmFtZSAmJiAoc3RybGVuKG5hbWUpID4gU01BTExETkFNRS0xKSkKKyAgICAgIHsKKwlpZiAoYmlnX2ZyZWUpCisJICB7IAorCSAgICBiaWdfbmFtZSA9IGJpZ19mcmVlOworCSAgICBiaWdfZnJlZSA9IGJpZ19mcmVlLT5uZXh0OworCSAgfQorCWVsc2UgaWYgKChiaWduYW1lc19sZWZ0ID09IDAgJiYgIShmbGFncyAmIChGX0RTIHwgRl9ETlNLRVkpKSkgfHwKKwkJICEoYmlnX25hbWUgPSAodW5pb24gYmlnbmFtZSAqKXdoaW5lX21hbGxvYyhzaXplb2YodW5pb24gYmlnbmFtZSkpKSkKKwkgIHsKKwkgICAgaW5zZXJ0X2Vycm9yID0gMTsKKwkgICAgcmV0dXJuIE5VTEw7CisJICB9CisJZWxzZSBpZiAoYmlnbmFtZXNfbGVmdCAhPSAwKQorCSAgYmlnbmFtZXNfbGVmdC0tOworCQorICAgICAgfQorCisgICAgLyogR290IHRoZSByZXN0OiBmaW5hbGx5IGdyYWIgZW50cnkuICovCisgICAgY2FjaGVfdW5saW5rKG5ldyk7CisgICAgYnJlYWs7CisgIH0KKyAgCisgIG5ldy0+ZmxhZ3MgPSBmbGFnczsKKyAgaWYgKGJpZ19uYW1lKQorICAgIHsKKyAgICAgIG5ldy0+bmFtZS5ibmFtZSA9IGJpZ19uYW1lOworICAgICAgbmV3LT5mbGFncyB8PSBGX0JJR05BTUU7CisgICAgfQorCisgIGlmIChuYW1lKQorICAgIHN0cmNweShjYWNoZV9nZXRfbmFtZShuZXcpLCBuYW1lKTsKKyAgZWxzZQorICAgICpjYWNoZV9nZXRfbmFtZShuZXcpID0gMDsKKworICBpZiAoYWRkcikKKyAgICB7CisjaWZkZWYgSEFWRV9ETlNTRUMKKyAgICAgIGlmIChmbGFncyAmIChGX0RTIHwgRl9ETlNLRVkpKQorCW5ldy0+dWlkID0gYWRkci0+YWRkci5kbnNzZWMuY2xhc3M7CisgICAgICBlbHNlCisjZW5kaWYKKwluZXctPmFkZHIuYWRkciA9ICphZGRyOwkKKyAgICB9CisKKyAgbmV3LT50dGQgPSBub3cgKyAodGltZV90KXR0bDsKKyAgbmV3LT5uZXh0ID0gbmV3X2NoYWluOworICBuZXdfY2hhaW4gPSBuZXc7CisKKyAgcmV0dXJuIG5ldzsKK30KKworLyogYWZ0ZXIgZW5kIG9mIGluc2VydGlvbiwgY29tbWl0IHRoZSBuZXcgZW50cmllcyAqLwordm9pZCBjYWNoZV9lbmRfaW5zZXJ0KHZvaWQpCit7CisgIGlmIChpbnNlcnRfZXJyb3IpCisgICAgcmV0dXJuOworICAKKyAgd2hpbGUgKG5ld19jaGFpbikKKyAgICB7IAorICAgICAgc3RydWN0IGNyZWMgKnRtcCA9IG5ld19jaGFpbi0+bmV4dDsKKyAgICAgIC8qIGRyb3AgQ05BTUVzIHdoaWNoIGRpZG4ndCBmaW5kIGEgdGFyZ2V0LiAqLworICAgICAgaWYgKGlzX291dGRhdGVkX2NuYW1lX3BvaW50ZXIobmV3X2NoYWluKSkKKwljYWNoZV9mcmVlKG5ld19jaGFpbik7CisgICAgICBlbHNlCisJeworCSAgY2FjaGVfaGFzaChuZXdfY2hhaW4pOworCSAgY2FjaGVfbGluayhuZXdfY2hhaW4pOworCSAgY2FjaGVfaW5zZXJ0ZWQrKzsKKwl9CisgICAgICBuZXdfY2hhaW4gPSB0bXA7CisgICAgfQorICBuZXdfY2hhaW4gPSBOVUxMOworfQorCitzdHJ1Y3QgY3JlYyAqY2FjaGVfZmluZF9ieV9uYW1lKHN0cnVjdCBjcmVjICpjcmVjcCwgY2hhciAqbmFtZSwgdGltZV90IG5vdywgdW5zaWduZWQgaW50IHByb3QpCit7CisgIHN0cnVjdCBjcmVjICphbnM7CisgIGludCBub19yciA9IHByb3QgJiBGX05PX1JSOworCisgIHByb3QgJj0gfkZfTk9fUlI7CisgIAorICBpZiAoY3JlY3ApIC8qIGl0ZXJhdGluZyAqLworICAgIGFucyA9IGNyZWNwLT5uZXh0OworICBlbHNlCisgICAgeworICAgICAgLyogZmlyc3Qgc2VhcmNoLCBsb29rIGZvciByZWxldmFudCBlbnRyaWVzIGFuZCBwdXNoIHRvIHRvcCBvZiBsaXN0CisJIGFsc28gZnJlZSBhbnl0aGluZyB3aGljaCBoYXMgZXhwaXJlZCAqLworICAgICAgc3RydWN0IGNyZWMgKm5leHQsICoqdXAsICoqaW5zZXJ0ID0gTlVMTCwgKipjaGFpbnAgPSAmYW5zOworICAgICAgdW5zaWduZWQgc2hvcnQgaW5zX2ZsYWdzID0gMDsKKyAgICAgIAorICAgICAgZm9yICh1cCA9IGhhc2hfYnVja2V0KG5hbWUpLCBjcmVjcCA9ICp1cDsgY3JlY3A7IGNyZWNwID0gbmV4dCkKKwl7CisJICBuZXh0ID0gY3JlY3AtPmhhc2hfbmV4dDsKKwkgIAorCSAgaWYgKCFpc19leHBpcmVkKG5vdywgY3JlY3ApICYmICFpc19vdXRkYXRlZF9jbmFtZV9wb2ludGVyKGNyZWNwKSkKKwkgICAgeworCSAgICAgIGlmICgoY3JlY3AtPmZsYWdzICYgRl9GT1JXQVJEKSAmJiAKKwkJICAoY3JlY3AtPmZsYWdzICYgcHJvdCkgJiYKKwkJICBob3N0bmFtZV9pc2VxdWFsKGNhY2hlX2dldF9uYW1lKGNyZWNwKSwgbmFtZSkpCisJCXsKKwkJICBpZiAoY3JlY3AtPmZsYWdzICYgKEZfSE9TVFMgfCBGX0RIQ1AgfCBGX0NPTkZJRykpCisJCSAgICB7CisJCSAgICAgICpjaGFpbnAgPSBjcmVjcDsKKwkJICAgICAgY2hhaW5wID0gJmNyZWNwLT5uZXh0OworCQkgICAgfQorCQkgIGVsc2UKKwkJICAgIHsKKwkJICAgICAgY2FjaGVfdW5saW5rKGNyZWNwKTsKKwkJICAgICAgY2FjaGVfbGluayhjcmVjcCk7CisJCSAgICB9CisJICAgICAgCSAgICAgIAorCQkgIC8qIE1vdmUgYWxsIGJ1dCB0aGUgZmlyc3QgZW50cnkgdXAgdGhlIGhhc2ggY2hhaW4KKwkJICAgICB0aGlzIGltcGxlbWVudHMgcm91bmQtcm9iaW4uIAorCQkgICAgIE1ha2Ugc3VyZSB0aGF0IHJlLW9yZGVyaW5nIGRvZXNuJ3QgYnJlYWsgdGhlIGhhc2gtY2hhaW4KKwkJICAgICBvcmRlciBpbnZhcmlhbnRzLiAKKwkJICAqLworCQkgIGlmIChpbnNlcnQgJiYgKGNyZWNwLT5mbGFncyAmIChGX1JFVkVSU0UgfCBGX0lNTU9SVEFMKSkgPT0gaW5zX2ZsYWdzKQorCQkgICAgeworCQkgICAgICAqdXAgPSBjcmVjcC0+aGFzaF9uZXh0OworCQkgICAgICBjcmVjcC0+aGFzaF9uZXh0ID0gKmluc2VydDsKKwkJICAgICAgKmluc2VydCA9IGNyZWNwOworCQkgICAgICBpbnNlcnQgPSAmY3JlY3AtPmhhc2hfbmV4dDsKKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIGlmICghaW5zZXJ0ICYmICFub19ycikKKwkJCXsKKwkJCSAgaW5zZXJ0ID0gdXA7CisJCQkgIGluc19mbGFncyA9IGNyZWNwLT5mbGFncyAmIChGX1JFVkVSU0UgfCBGX0lNTU9SVEFMKTsKKwkJCX0KKwkJICAgICAgdXAgPSAmY3JlY3AtPmhhc2hfbmV4dDsgCisJCSAgICB9CisJCX0KKwkgICAgICBlbHNlCisJCS8qIGNhc2UgOiBub3QgZXhwaXJlZCwgaW5jb3JyZWN0IGVudHJ5LiAqLworCQl1cCA9ICZjcmVjcC0+aGFzaF9uZXh0OyAKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgLyogZXhwaXJlZCBlbnRyeSwgZnJlZSBpdCAqLworCSAgICAgICp1cCA9IGNyZWNwLT5oYXNoX25leHQ7CisJICAgICAgaWYgKCEoY3JlY3AtPmZsYWdzICYgKEZfSE9TVFMgfCBGX0RIQ1AgfCBGX0NPTkZJRykpKQorCQl7IAorCQkgIGNhY2hlX3VubGluayhjcmVjcCk7CisJCSAgY2FjaGVfZnJlZShjcmVjcCk7CisJCX0KKwkgICAgfQorCX0KKwkgIAorICAgICAgKmNoYWlucCA9IGNhY2hlX2hlYWQ7CisgICAgfQorCisgIGlmIChhbnMgJiYgCisgICAgICAoYW5zLT5mbGFncyAmIEZfRk9SV0FSRCkgJiYKKyAgICAgIChhbnMtPmZsYWdzICYgcHJvdCkgJiYgICAgIAorICAgICAgaG9zdG5hbWVfaXNlcXVhbChjYWNoZV9nZXRfbmFtZShhbnMpLCBuYW1lKSkKKyAgICByZXR1cm4gYW5zOworICAKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0cnVjdCBjcmVjICpjYWNoZV9maW5kX2J5X2FkZHIoc3RydWN0IGNyZWMgKmNyZWNwLCBzdHJ1Y3QgYWxsX2FkZHIgKmFkZHIsIAorCQkJCXRpbWVfdCBub3csIHVuc2lnbmVkIGludCBwcm90KQoreworICBzdHJ1Y3QgY3JlYyAqYW5zOworI2lmZGVmIEhBVkVfSVBWNgorICBpbnQgYWRkcmxlbiA9IChwcm90ID09IEZfSVBWNikgPyBJTjZBRERSU1ogOiBJTkFERFJTWjsKKyNlbHNlCisgIGludCBhZGRybGVuID0gSU5BRERSU1o7CisjZW5kaWYKKyAgCisgIGlmIChjcmVjcCkgLyogaXRlcmF0aW5nICovCisgICAgYW5zID0gY3JlY3AtPm5leHQ7CisgIGVsc2UKKyAgICB7ICAKKyAgICAgIC8qIGZpcnN0IHNlYXJjaCwgbG9vayBmb3IgcmVsZXZhbnQgZW50cmllcyBhbmQgcHVzaCB0byB0b3Agb2YgbGlzdAorCSBhbHNvIGZyZWUgYW55dGhpbmcgd2hpY2ggaGFzIGV4cGlyZWQuIEFsbCB0aGUgcmV2ZXJzZSBlbnRyaWVzIGFyZSBhdCB0aGUKKwkgc3RhcnQgb2YgdGhlIGhhc2ggY2hhaW4sIHNvIHdlIGNhbiBnaXZlIHVwIHdoZW4gd2UgZmluZCB0aGUgZmlyc3QgCisJIG5vbi1SRVZFUlNFIG9uZS4gICovCisgICAgICAgaW50IGk7CisgICAgICAgc3RydWN0IGNyZWMgKip1cCwgKipjaGFpbnAgPSAmYW5zOworICAgICAgIAorICAgICAgIGZvciAoaT0wOyBpPGhhc2hfc2l6ZTsgaSsrKQorCSBmb3IgKGNyZWNwID0gaGFzaF90YWJsZVtpXSwgdXAgPSAmaGFzaF90YWJsZVtpXTsgCisJICAgICAgY3JlY3AgJiYgKGNyZWNwLT5mbGFncyAmIEZfUkVWRVJTRSk7CisJICAgICAgY3JlY3AgPSBjcmVjcC0+aGFzaF9uZXh0KQorCSAgIGlmICghaXNfZXhwaXJlZChub3csIGNyZWNwKSkKKwkgICAgIHsgICAgICAKKwkgICAgICAgaWYgKChjcmVjcC0+ZmxhZ3MgJiBwcm90KSAmJgorCQkgICBtZW1jbXAoJmNyZWNwLT5hZGRyLmFkZHIsIGFkZHIsIGFkZHJsZW4pID09IDApCisJCSB7CSAgICAKKwkJICAgaWYgKGNyZWNwLT5mbGFncyAmIChGX0hPU1RTIHwgRl9ESENQIHwgRl9DT05GSUcpKQorCQkgICAgIHsKKwkJICAgICAgICpjaGFpbnAgPSBjcmVjcDsKKwkJICAgICAgIGNoYWlucCA9ICZjcmVjcC0+bmV4dDsKKwkJICAgICB9CisJCSAgIGVsc2UKKwkJICAgICB7CisJCSAgICAgICBjYWNoZV91bmxpbmsoY3JlY3ApOworCQkgICAgICAgY2FjaGVfbGluayhjcmVjcCk7CisJCSAgICAgfQorCQkgfQorCSAgICAgICB1cCA9ICZjcmVjcC0+aGFzaF9uZXh0OworCSAgICAgfQorCSAgIGVsc2UKKwkgICAgIHsKKwkgICAgICAgKnVwID0gY3JlY3AtPmhhc2hfbmV4dDsKKwkgICAgICAgaWYgKCEoY3JlY3AtPmZsYWdzICYgKEZfSE9TVFMgfCBGX0RIQ1AgfCBGX0NPTkZJRykpKQorCQkgeworCQkgICBjYWNoZV91bmxpbmsoY3JlY3ApOworCQkgICBjYWNoZV9mcmVlKGNyZWNwKTsKKwkJIH0KKwkgICAgIH0KKyAgICAgICAKKyAgICAgICAqY2hhaW5wID0gY2FjaGVfaGVhZDsKKyAgICB9CisgIAorICBpZiAoYW5zICYmIAorICAgICAgKGFucy0+ZmxhZ3MgJiBGX1JFVkVSU0UpICYmCisgICAgICAoYW5zLT5mbGFncyAmIHByb3QpICYmCisgICAgICBtZW1jbXAoJmFucy0+YWRkci5hZGRyLCBhZGRyLCBhZGRybGVuKSA9PSAwKQorICAgIHJldHVybiBhbnM7CisgIAorICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgYWRkX2hvc3RzX2NuYW1lKHN0cnVjdCBjcmVjICp0YXJnZXQpCit7CisgIHN0cnVjdCBjcmVjICpjcmVjOworICBzdHJ1Y3QgY25hbWUgKmE7CisgIAorICBmb3IgKGEgPSBkYWVtb24tPmNuYW1lczsgYTsgYSA9IGEtPm5leHQpCisgICAgaWYgKGEtPmFsaWFzWzFdICE9ICcqJyAmJgorCWhvc3RuYW1lX2lzZXF1YWwoY2FjaGVfZ2V0X25hbWUodGFyZ2V0KSwgYS0+dGFyZ2V0KSAmJgorCShjcmVjID0gd2hpbmVfbWFsbG9jKHNpemVvZihzdHJ1Y3QgY3JlYykpKSkKKyAgICAgIHsKKwljcmVjLT5mbGFncyA9IEZfRk9SV0FSRCB8IEZfSU1NT1JUQUwgfCBGX05BTUVQIHwgRl9DT05GSUcgfCBGX0NOQU1FOworCWNyZWMtPnR0ZCA9IGEtPnR0bDsKKwljcmVjLT5uYW1lLm5hbWVwID0gYS0+YWxpYXM7CisJY3JlYy0+YWRkci5jbmFtZS50YXJnZXQuY2FjaGUgPSB0YXJnZXQ7CisJY3JlYy0+YWRkci5jbmFtZS51aWQgPSB0YXJnZXQtPnVpZDsKKwljcmVjLT51aWQgPSBuZXh0X3VpZCgpOworCWNhY2hlX2hhc2goY3JlYyk7CisJYWRkX2hvc3RzX2NuYW1lKGNyZWMpOyAvKiBoYW5kbGUgY2hhaW5zICovCisgICAgICB9Cit9CisgIAorc3RhdGljIHZvaWQgYWRkX2hvc3RzX2VudHJ5KHN0cnVjdCBjcmVjICpjYWNoZSwgc3RydWN0IGFsbF9hZGRyICphZGRyLCBpbnQgYWRkcmxlbiwgCisJCQkgICAgdW5zaWduZWQgaW50IGluZGV4LCBzdHJ1Y3QgY3JlYyAqKnJoYXNoLCBpbnQgaGFzaHN6KQoreworICBzdHJ1Y3QgY3JlYyAqbG9va3VwID0gY2FjaGVfZmluZF9ieV9uYW1lKE5VTEwsIGNhY2hlX2dldF9uYW1lKGNhY2hlKSwgMCwgY2FjaGUtPmZsYWdzICYgKEZfSVBWNCB8IEZfSVBWNikpOworICBpbnQgaSwgbmFtZWV4aXN0cyA9IDA7CisgIHVuc2lnbmVkIGludCBqOyAKKworICAvKiBSZW1vdmUgZHVwbGljYXRlcyBpbiBob3N0cyBmaWxlcy4gKi8KKyAgaWYgKGxvb2t1cCAmJiAobG9va3VwLT5mbGFncyAmIEZfSE9TVFMpKQorICAgIHsKKyAgICAgIG5hbWVleGlzdHMgPSAxOworICAgICAgaWYgKG1lbWNtcCgmbG9va3VwLT5hZGRyLmFkZHIsIGFkZHIsIGFkZHJsZW4pID09IDApCisJeworCSAgZnJlZShjYWNoZSk7CisJICByZXR1cm47CisJfQorICAgIH0KKyAgCisgIC8qIEVuc3VyZSB0aGVyZSBpcyBvbmx5IG9uZSBhZGRyZXNzIC0+IG5hbWUgbWFwcGluZyAoZmlyc3Qgb25lIHRydW1wcykgCisgICAgIFdlIGRvIHRoaXMgYnkgc3RlYW0gaGVyZSwgVGhlIGVudHJpZXMgYXJlIGtlcHQgaW4gaGFzaCBjaGFpbnMsIGxpbmtlZAorICAgICBieSAtPm5leHQgKHdoaWNoIGlzIHVudXNlZCBhdCB0aGlzIHBvaW50KSBoZWxkIGluIGhhc2ggYnVja2V0cyBpbgorICAgICB0aGUgYXJyYXkgcmhhc2gsIGhhc2hlZCBvbiBhZGRyZXNzLiBOb3RlIHRoYXQgcmhhc2ggYW5kIHRoZSB2YWx1ZXMKKyAgICAgaW4gLT5uZXh0IGFyZSBvbmx5IHZhbGlkICB3aGlsc3QgcmVhZGluZyBob3N0cyBmaWxlczogdGhlIGJ1Y2tldHMgYXJlCisgICAgIHRoZW4gZnJlZWQsIGFuZCB0aGUgLT5uZXh0IHBvaW50ZXIgdXNlZCBmb3Igb3RoZXIgdGhpbmdzLiAKKworICAgICBPbmx5IGluc2VydCBlYWNoIHVuaXF1ZSBhZGRyZXNzIG9uY2UgaW50byB0aGlzIGhhc2hpbmcgc3RydWN0dXJlLgorCisgICAgIFRoaXMgY29tcGxleGl0eSBhdm9pZHMgTyhuXjIpIGRpdmVyZ2VudCBDUFUgdXNlIHdoaWxzdCByZWFkaW5nCisgICAgIGxhcmdlICgxMDAwMCBlbnRyeSkgaG9zdHMgZmlsZXMuIAorCisgICAgIE5vdGUgdGhhdCB3ZSBvbmx5IGRvIHRoaXMgcHJvY2VzcyB3aGVuIGJ1bGstcmVhZGluZyBob3N0cyBmaWxlcywgCisgICAgIGZvciBpbmNyZW1lbnRhbCByZWFkcywgcmhhc2ggaXMgTlVMTCwgYW5kIHdlIHVzZSBjYWNoZSBsb29rdXBzCisgICAgIGluc3RlYWQuCisgICovCisgIAorICBpZiAocmhhc2gpCisgICAgeworICAgICAgLyogaGFzaCBhZGRyZXNzICovCisgICAgICBmb3IgKGogPSAwLCBpID0gMDsgaSA8IGFkZHJsZW47IGkrKykKKwlqID0gKGoqMiArKCh1bnNpZ25lZCBjaGFyICopYWRkcilbaV0pICUgaGFzaHN6OworICAgICAgCisgICAgICBmb3IgKGxvb2t1cCA9IHJoYXNoW2pdOyBsb29rdXA7IGxvb2t1cCA9IGxvb2t1cC0+bmV4dCkKKwlpZiAoKGxvb2t1cC0+ZmxhZ3MgJiBjYWNoZS0+ZmxhZ3MgJiAoRl9JUFY0IHwgRl9JUFY2KSkgJiYKKwkgICAgbWVtY21wKCZsb29rdXAtPmFkZHIuYWRkciwgYWRkciwgYWRkcmxlbikgPT0gMCkKKwkgIHsKKwkgICAgY2FjaGUtPmZsYWdzICY9IH5GX1JFVkVSU0U7CisJICAgIGJyZWFrOworCSAgfQorICAgICAgCisgICAgICAvKiBtYWludGFpbiBhZGRyZXNzIGhhc2ggY2hhaW4sIGluc2VydCBuZXcgdW5pcXVlIGFkZHJlc3MgKi8KKyAgICAgIGlmICghbG9va3VwKQorCXsKKwkgIGNhY2hlLT5uZXh0ID0gcmhhc2hbal07CisJICByaGFzaFtqXSA9IGNhY2hlOworCX0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBpbmNyZW1lbnRhbCByZWFkLCBsb29rdXAgaW4gY2FjaGUgKi8KKyAgICAgIGxvb2t1cCA9IGNhY2hlX2ZpbmRfYnlfYWRkcihOVUxMLCBhZGRyLCAwLCBjYWNoZS0+ZmxhZ3MgJiAoRl9JUFY0IHwgRl9JUFY2KSk7CisgICAgICBpZiAobG9va3VwICYmIGxvb2t1cC0+ZmxhZ3MgJiBGX0hPU1RTKQorCWNhY2hlLT5mbGFncyAmPSB+Rl9SRVZFUlNFOworICAgIH0KKworICBjYWNoZS0+dWlkID0gaW5kZXg7CisgIG1lbWNweSgmY2FjaGUtPmFkZHIuYWRkciwgYWRkciwgYWRkcmxlbik7ICAKKyAgY2FjaGVfaGFzaChjYWNoZSk7CisgIAorICAvKiBkb24ndCBuZWVkIHRvIGRvIGFsaWFzIHN0dWZmIGZvciBzZWNvbmQgYW5kIHN1YnNlcXVlbnQgYWRkcmVzc2VzLiAqLworICBpZiAoIW5hbWVleGlzdHMpCisgICAgYWRkX2hvc3RzX2NuYW1lKGNhY2hlKTsKK30KKworc3RhdGljIGludCBlYXRzcGFjZShGSUxFICpmKQoreworICBpbnQgYywgbmwgPSAwOworCisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIGlmICgoYyA9IGdldGMoZikpID09ICcjJykKKwl3aGlsZSAoYyAhPSAnXG4nICYmIGMgIT0gRU9GKQorCSAgYyA9IGdldGMoZik7CisgICAgICAKKyAgICAgIGlmIChjID09IEVPRikKKwlyZXR1cm4gMTsKKworICAgICAgaWYgKCFpc3NwYWNlKGMpKQorCXsKKwkgIHVuZ2V0YyhjLCBmKTsKKwkgIHJldHVybiBubDsKKwl9CisKKyAgICAgIGlmIChjID09ICdcbicpCisJbmwgPSAxOworICAgIH0KK30KKwkgCitzdGF0aWMgaW50IGdldHRvayhGSUxFICpmLCBjaGFyICp0b2tlbikKK3sKKyAgaW50IGMsIGNvdW50ID0gMDsKKyAKKyAgd2hpbGUgKDEpCisgICAgeworICAgICAgaWYgKChjID0gZ2V0YyhmKSkgPT0gRU9GKQorCXJldHVybiAoY291bnQgPT0gMCkgPyBFT0YgOiAxOworCisgICAgICBpZiAoaXNzcGFjZShjKSB8fCBjID09ICcjJykKKwl7CisJICB1bmdldGMoYywgZik7CisJICByZXR1cm4gZWF0c3BhY2UoZik7CisJfQorICAgICAgCisgICAgICBpZiAoY291bnQgPCAoTUFYRE5BTUUgLSAxKSkKKwl7CisJICB0b2tlbltjb3VudCsrXSA9IGM7CisJICB0b2tlbltjb3VudF0gPSAwOworCX0KKyAgICB9Cit9CisKK2ludCByZWFkX2hvc3RzZmlsZShjaGFyICpmaWxlbmFtZSwgdW5zaWduZWQgaW50IGluZGV4LCBpbnQgY2FjaGVfc2l6ZSwgc3RydWN0IGNyZWMgKipyaGFzaCwgaW50IGhhc2hzeikKK3sgIAorICBGSUxFICpmID0gZm9wZW4oZmlsZW5hbWUsICJyIik7CisgIGNoYXIgKnRva2VuID0gZGFlbW9uLT5uYW1lYnVmZiwgKmRvbWFpbl9zdWZmaXggPSBOVUxMOworICBpbnQgYWRkcl9jb3VudCA9IDAsIG5hbWVfY291bnQgPSBjYWNoZV9zaXplLCBsaW5lbm8gPSAwOworICB1bnNpZ25lZCBzaG9ydCBmbGFncyA9IDA7CisgIHN0cnVjdCBhbGxfYWRkciBhZGRyOworICBpbnQgYXRubCwgYWRkcmxlbiA9IDA7CisKKyAgaWYgKCFmKQorICAgIHsKKyAgICAgIG15X3N5c2xvZyhMT0dfRVJSLCBfKCJmYWlsZWQgdG8gbG9hZCBuYW1lcyBmcm9tICVzOiAlcyIpLCBmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgIHJldHVybiBjYWNoZV9zaXplOworICAgIH0KKyAgCisgIGVhdHNwYWNlKGYpOworICAKKyAgd2hpbGUgKChhdG5sID0gZ2V0dG9rKGYsIHRva2VuKSkgIT0gRU9GKQorICAgIHsKKyAgICAgIGxpbmVubysrOworICAgICAgCisgICAgICBpZiAoaW5ldF9wdG9uKEFGX0lORVQsIHRva2VuLCAmYWRkcikgPiAwKQorCXsKKwkgIGZsYWdzID0gRl9IT1NUUyB8IEZfSU1NT1JUQUwgfCBGX0ZPUldBUkQgfCBGX1JFVkVSU0UgfCBGX0lQVjQ7CisJICBhZGRybGVuID0gSU5BRERSU1o7CisJICBkb21haW5fc3VmZml4ID0gZ2V0X2RvbWFpbihhZGRyLmFkZHIuYWRkcjQpOworCX0KKyNpZmRlZiBIQVZFX0lQVjYKKyAgICAgIGVsc2UgaWYgKGluZXRfcHRvbihBRl9JTkVUNiwgdG9rZW4sICZhZGRyKSA+IDApCisJeworCSAgZmxhZ3MgPSBGX0hPU1RTIHwgRl9JTU1PUlRBTCB8IEZfRk9SV0FSRCB8IEZfUkVWRVJTRSB8IEZfSVBWNjsKKwkgIGFkZHJsZW4gPSBJTjZBRERSU1o7CisJICBkb21haW5fc3VmZml4ID0gZ2V0X2RvbWFpbjYoJmFkZHIuYWRkci5hZGRyNik7CisJfQorI2VuZGlmCisgICAgICBlbHNlCisJeworCSAgbXlfc3lzbG9nKExPR19FUlIsIF8oImJhZCBhZGRyZXNzIGF0ICVzIGxpbmUgJWQiKSwgZmlsZW5hbWUsIGxpbmVubyk7IAorCSAgd2hpbGUgKGF0bmwgPT0gMCkKKwkgICAgYXRubCA9IGdldHRvayhmLCB0b2tlbik7CisJICBjb250aW51ZTsKKwl9CisgICAgICAKKyAgICAgIGFkZHJfY291bnQrKzsKKyAgICAgIAorICAgICAgLyogcmVoYXNoIGV2ZXJ5IDEwMDAgbmFtZXMuICovCisgICAgICBpZiAocmhhc2ggJiYgKChuYW1lX2NvdW50IC0gY2FjaGVfc2l6ZSkgPiAxMDAwKSkKKwl7CisJICByZWhhc2gobmFtZV9jb3VudCk7CisJICBjYWNoZV9zaXplID0gbmFtZV9jb3VudDsKKwl9IAorICAgICAgCisgICAgICB3aGlsZSAoYXRubCA9PSAwKQorCXsKKwkgIHN0cnVjdCBjcmVjICpjYWNoZTsKKwkgIGludCBmcWRuLCBub21lbTsKKwkgIGNoYXIgKmNhbm9uOworCSAgCisJICBpZiAoKGF0bmwgPSBnZXR0b2soZiwgdG9rZW4pKSA9PSBFT0YpCisJICAgIGJyZWFrOworCisJICBmcWRuID0gISFzdHJjaHIodG9rZW4sICcuJyk7CisKKwkgIGlmICgoY2Fub24gPSBjYW5vbmljYWxpc2UodG9rZW4sICZub21lbSkpKQorCSAgICB7CisJICAgICAgLyogSWYgc2V0LCBhZGQgYSB2ZXJzaW9uIG9mIHRoZSBuYW1lIHdpdGggYSBkZWZhdWx0IGRvbWFpbiBhcHBlbmRlZCAqLworCSAgICAgIGlmIChvcHRpb25fYm9vbChPUFRfRVhQQU5EKSAmJiBkb21haW5fc3VmZml4ICYmICFmcWRuICYmIAorCQkgIChjYWNoZSA9IHdoaW5lX21hbGxvYyhzaXplb2Yoc3RydWN0IGNyZWMpICsgCisJCQkJCXN0cmxlbihjYW5vbikrMitzdHJsZW4oZG9tYWluX3N1ZmZpeCktU01BTExETkFNRSkpKQorCQl7CisJCSAgc3RyY3B5KGNhY2hlLT5uYW1lLnNuYW1lLCBjYW5vbik7CisJCSAgc3RyY2F0KGNhY2hlLT5uYW1lLnNuYW1lLCAiLiIpOworCQkgIHN0cmNhdChjYWNoZS0+bmFtZS5zbmFtZSwgZG9tYWluX3N1ZmZpeCk7CisJCSAgY2FjaGUtPmZsYWdzID0gZmxhZ3M7CisJCSAgY2FjaGUtPnR0ZCA9IGRhZW1vbi0+bG9jYWxfdHRsOworCQkgIGFkZF9ob3N0c19lbnRyeShjYWNoZSwgJmFkZHIsIGFkZHJsZW4sIGluZGV4LCByaGFzaCwgaGFzaHN6KTsKKwkJICBuYW1lX2NvdW50Kys7CisJCX0KKwkgICAgICBpZiAoKGNhY2hlID0gd2hpbmVfbWFsbG9jKHNpemVvZihzdHJ1Y3QgY3JlYykgKyBzdHJsZW4oY2Fub24pKzEtU01BTExETkFNRSkpKQorCQl7CisJCSAgc3RyY3B5KGNhY2hlLT5uYW1lLnNuYW1lLCBjYW5vbik7CisJCSAgY2FjaGUtPmZsYWdzID0gZmxhZ3M7CisJCSAgY2FjaGUtPnR0ZCA9IGRhZW1vbi0+bG9jYWxfdHRsOworCQkgIGFkZF9ob3N0c19lbnRyeShjYWNoZSwgJmFkZHIsIGFkZHJsZW4sIGluZGV4LCByaGFzaCwgaGFzaHN6KTsKKwkJICBuYW1lX2NvdW50Kys7CisJCX0KKwkgICAgICBmcmVlKGNhbm9uKTsKKwkgICAgICAKKwkgICAgfQorCSAgZWxzZSBpZiAoIW5vbWVtKQorCSAgICBteV9zeXNsb2coTE9HX0VSUiwgXygiYmFkIG5hbWUgYXQgJXMgbGluZSAlZCIpLCBmaWxlbmFtZSwgbGluZW5vKTsgCisJfQorICAgIH0gCisKKyAgZmNsb3NlKGYpOworICAKKyAgaWYgKHJoYXNoKQorICAgIHJlaGFzaChuYW1lX2NvdW50KTsgCisgIAorICBteV9zeXNsb2coTE9HX0lORk8sIF8oInJlYWQgJXMgLSAlZCBhZGRyZXNzZXMiKSwgZmlsZW5hbWUsIGFkZHJfY291bnQpOworICAKKyAgcmV0dXJuIG5hbWVfY291bnQ7Cit9CisJICAgIAordm9pZCBjYWNoZV9yZWxvYWQodm9pZCkKK3sKKyAgc3RydWN0IGNyZWMgKmNhY2hlLCAqKnVwLCAqdG1wOworICBpbnQgcmV2aGFzaHN6LCBpLCB0b3RhbF9zaXplID0gZGFlbW9uLT5jYWNoZXNpemU7CisgIHN0cnVjdCBob3N0c2ZpbGUgKmFoOworICBzdHJ1Y3QgaG9zdF9yZWNvcmQgKmhyOworICBzdHJ1Y3QgbmFtZV9saXN0ICpubDsKKyAgc3RydWN0IGNuYW1lICphOworICBzdHJ1Y3QgaW50ZXJmYWNlX25hbWUgKmludHI7CisjaWZkZWYgSEFWRV9ETlNTRUMKKyAgc3RydWN0IGRzX2NvbmZpZyAqZHM7CisjZW5kaWYKKworICBjYWNoZV9pbnNlcnRlZCA9IGNhY2hlX2xpdmVfZnJlZWQgPSAwOworICAKKyAgZm9yIChpPTA7IGk8aGFzaF9zaXplOyBpKyspCisgICAgZm9yIChjYWNoZSA9IGhhc2hfdGFibGVbaV0sIHVwID0gJmhhc2hfdGFibGVbaV07IGNhY2hlOyBjYWNoZSA9IHRtcCkKKyAgICAgIHsKKyNpZmRlZiBIQVZFX0ROU1NFQworCWNhY2hlX2Jsb2NrZGF0YV9mcmVlKGNhY2hlKTsKKyNlbmRpZgorCXRtcCA9IGNhY2hlLT5oYXNoX25leHQ7CisJaWYgKGNhY2hlLT5mbGFncyAmIChGX0hPU1RTIHwgRl9DT05GSUcpKQorCSAgeworCSAgICAqdXAgPSBjYWNoZS0+aGFzaF9uZXh0OworCSAgICBmcmVlKGNhY2hlKTsKKwkgIH0KKwllbHNlIGlmICghKGNhY2hlLT5mbGFncyAmIEZfREhDUCkpCisJICB7CisJICAgICp1cCA9IGNhY2hlLT5oYXNoX25leHQ7CisJICAgIGlmIChjYWNoZS0+ZmxhZ3MgJiBGX0JJR05BTUUpCisJICAgICAgeworCQljYWNoZS0+bmFtZS5ibmFtZS0+bmV4dCA9IGJpZ19mcmVlOworCQliaWdfZnJlZSA9IGNhY2hlLT5uYW1lLmJuYW1lOworCSAgICAgIH0KKwkgICAgY2FjaGUtPmZsYWdzID0gMDsKKwkgIH0KKwllbHNlCisJICB1cCA9ICZjYWNoZS0+aGFzaF9uZXh0OworICAgICAgfQorICAKKyAgLyogQWRkIENOQU1FcyB0byBpbnRlcmZhY2VfbmFtZXMgdG8gdGhlIGNhY2hlICovCisgIGZvciAoYSA9IGRhZW1vbi0+Y25hbWVzOyBhOyBhID0gYS0+bmV4dCkKKyAgICBmb3IgKGludHIgPSBkYWVtb24tPmludF9uYW1lczsgaW50cjsgaW50ciA9IGludHItPm5leHQpCisgICAgICBpZiAoYS0+YWxpYXNbMV0gIT0gJyonICYmCisJICBob3N0bmFtZV9pc2VxdWFsKGEtPnRhcmdldCwgaW50ci0+bmFtZSkgJiYKKwkgICgoY2FjaGUgPSB3aGluZV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBjcmVjKSkpKSkKKwl7CisJICBjYWNoZS0+ZmxhZ3MgPSBGX0ZPUldBUkQgfCBGX05BTUVQIHwgRl9DTkFNRSB8IEZfSU1NT1JUQUwgfCBGX0NPTkZJRzsKKwkgIGNhY2hlLT50dGQgPSBhLT50dGw7CisJICBjYWNoZS0+bmFtZS5uYW1lcCA9IGEtPmFsaWFzOworCSAgY2FjaGUtPmFkZHIuY25hbWUudGFyZ2V0LmludF9uYW1lID0gaW50cjsKKwkgIGNhY2hlLT5hZGRyLmNuYW1lLnVpZCA9IFNSQ19JTlRFUkZBQ0U7CisJICBjYWNoZS0+dWlkID0gbmV4dF91aWQoKTsKKwkgIGNhY2hlX2hhc2goY2FjaGUpOworCSAgYWRkX2hvc3RzX2NuYW1lKGNhY2hlKTsgLyogaGFuZGxlIGNoYWlucyAqLworCX0KKworI2lmZGVmIEhBVkVfRE5TU0VDCisgIGZvciAoZHMgPSBkYWVtb24tPmRzOyBkczsgZHMgPSBkcy0+bmV4dCkKKyAgICBpZiAoKGNhY2hlID0gd2hpbmVfbWFsbG9jKHNpemVvZihzdHJ1Y3QgY3JlYykpKSAmJgorCShjYWNoZS0+YWRkci5kcy5rZXlkYXRhID0gYmxvY2tkYXRhX2FsbG9jKGRzLT5kaWdlc3QsIGRzLT5kaWdlc3RsZW4pKSkKKyAgICAgIHsKKwljYWNoZS0+ZmxhZ3MgPSBGX0ZPUldBUkQgfCBGX0lNTU9SVEFMIHwgRl9EUyB8IEZfQ09ORklHIHwgRl9OQU1FUDsKKwljYWNoZS0+dHRkID0gZGFlbW9uLT5sb2NhbF90dGw7CisJY2FjaGUtPm5hbWUubmFtZXAgPSBkcy0+bmFtZTsKKwljYWNoZS0+YWRkci5kcy5rZXlsZW4gPSBkcy0+ZGlnZXN0bGVuOworCWNhY2hlLT5hZGRyLmRzLmFsZ28gPSBkcy0+YWxnbzsKKwljYWNoZS0+YWRkci5kcy5rZXl0YWcgPSBkcy0+a2V5dGFnOworCWNhY2hlLT5hZGRyLmRzLmRpZ2VzdCA9IGRzLT5kaWdlc3RfdHlwZTsKKwljYWNoZS0+dWlkID0gZHMtPmNsYXNzOworCWNhY2hlX2hhc2goY2FjaGUpOworICAgICAgfQorI2VuZGlmCisgIAorICAvKiBib3Jyb3cgdGhlIHBhY2tldCBidWZmZXIgZm9yIGEgdGVtcG9yYXJ5IGJ5LWFkZHJlc3MgaGFzaCAqLworICBtZW1zZXQoZGFlbW9uLT5wYWNrZXQsIDAsIGRhZW1vbi0+cGFja2V0X2J1ZmZfc3opOworICByZXZoYXNoc3ogPSBkYWVtb24tPnBhY2tldF9idWZmX3N6IC8gc2l6ZW9mKHN0cnVjdCBjcmVjICopOworICAvKiB3ZSBvdmVyd3JvdGUgdGhlIGJ1ZmZlci4uLiAqLworICBkYWVtb24tPnNydl9zYXZlID0gTlVMTDsKKworICAvKiBEbyBob3N0X3JlY29yZHMgaW4gY29uZmlnLiAqLworICBmb3IgKGhyID0gZGFlbW9uLT5ob3N0X3JlY29yZHM7IGhyOyBociA9IGhyLT5uZXh0KQorICAgIGZvciAobmwgPSBoci0+bmFtZXM7IG5sOyBubCA9IG5sLT5uZXh0KQorICAgICAgeworCWlmIChoci0+YWRkci5zX2FkZHIgIT0gMCAmJgorCSAgICAoY2FjaGUgPSB3aGluZV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBjcmVjKSkpKQorCSAgeworCSAgICBjYWNoZS0+bmFtZS5uYW1lcCA9IG5sLT5uYW1lOworCSAgICBjYWNoZS0+dHRkID0gaHItPnR0bDsKKwkgICAgY2FjaGUtPmZsYWdzID0gRl9IT1NUUyB8IEZfSU1NT1JUQUwgfCBGX0ZPUldBUkQgfCBGX1JFVkVSU0UgfCBGX0lQVjQgfCBGX05BTUVQIHwgRl9DT05GSUc7CisJICAgIGFkZF9ob3N0c19lbnRyeShjYWNoZSwgKHN0cnVjdCBhbGxfYWRkciAqKSZoci0+YWRkciwgSU5BRERSU1osIFNSQ19DT05GSUcsIChzdHJ1Y3QgY3JlYyAqKilkYWVtb24tPnBhY2tldCwgcmV2aGFzaHN6KTsKKwkgIH0KKyNpZmRlZiBIQVZFX0lQVjYKKwlpZiAoIUlONl9JU19BRERSX1VOU1BFQ0lGSUVEKCZoci0+YWRkcjYpICYmCisJICAgIChjYWNoZSA9IHdoaW5lX21hbGxvYyhzaXplb2Yoc3RydWN0IGNyZWMpKSkpCisJICB7CisJICAgIGNhY2hlLT5uYW1lLm5hbWVwID0gbmwtPm5hbWU7CisJICAgIGNhY2hlLT50dGQgPSBoci0+dHRsOworCSAgICBjYWNoZS0+ZmxhZ3MgPSBGX0hPU1RTIHwgRl9JTU1PUlRBTCB8IEZfRk9SV0FSRCB8IEZfUkVWRVJTRSB8IEZfSVBWNiB8IEZfTkFNRVAgfCBGX0NPTkZJRzsKKwkgICAgYWRkX2hvc3RzX2VudHJ5KGNhY2hlLCAoc3RydWN0IGFsbF9hZGRyICopJmhyLT5hZGRyNiwgSU42QUREUlNaLCBTUkNfQ09ORklHLCAoc3RydWN0IGNyZWMgKiopZGFlbW9uLT5wYWNrZXQsIHJldmhhc2hzeik7CisJICB9CisjZW5kaWYKKyAgICAgIH0KKwkKKyAgaWYgKG9wdGlvbl9ib29sKE9QVF9OT19IT1NUUykgJiYgIWRhZW1vbi0+YWRkbl9ob3N0cykKKyAgICB7CisgICAgICBpZiAoZGFlbW9uLT5jYWNoZXNpemUgPiAwKQorCW15X3N5c2xvZyhMT0dfSU5GTywgXygiY2xlYXJlZCBjYWNoZSIpKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAoIW9wdGlvbl9ib29sKE9QVF9OT19IT1NUUykpCisJdG90YWxfc2l6ZSA9IHJlYWRfaG9zdHNmaWxlKEhPU1RTRklMRSwgU1JDX0hPU1RTLCB0b3RhbF9zaXplLCAoc3RydWN0IGNyZWMgKiopZGFlbW9uLT5wYWNrZXQsIHJldmhhc2hzeik7CisgICAgICAKKyAgICAgIGRhZW1vbi0+YWRkbl9ob3N0cyA9IGV4cGFuZF9maWxlbGlzdChkYWVtb24tPmFkZG5faG9zdHMpOworICAgICAgZm9yIChhaCA9IGRhZW1vbi0+YWRkbl9ob3N0czsgYWg7IGFoID0gYWgtPm5leHQpCisJaWYgKCEoYWgtPmZsYWdzICYgQUhfSU5BQ1RJVkUpKQorCSAgdG90YWxfc2l6ZSA9IHJlYWRfaG9zdHNmaWxlKGFoLT5mbmFtZSwgYWgtPmluZGV4LCB0b3RhbF9zaXplLCAoc3RydWN0IGNyZWMgKiopZGFlbW9uLT5wYWNrZXQsIHJldmhhc2hzeik7CisgICAgfQorCisjaWZkZWYgSEFWRV9JTk9USUZZCisgIHNldF9keW5hbWljX2lub3RpZnkoQUhfSE9TVFMsIHRvdGFsX3NpemUsIChzdHJ1Y3QgY3JlYyAqKilkYWVtb24tPnBhY2tldCwgcmV2aGFzaHN6KTsKKyNlbmRpZgorICAKK30gCisKKyNpZmRlZiBIQVZFX0RIQ1AKK3N0cnVjdCBpbl9hZGRyIGFfcmVjb3JkX2Zyb21faG9zdHMoY2hhciAqbmFtZSwgdGltZV90IG5vdykKK3sKKyAgc3RydWN0IGNyZWMgKmNyZWNwID0gTlVMTDsKKyAgc3RydWN0IGluX2FkZHIgcmV0OworICAKKyAgd2hpbGUgKChjcmVjcCA9IGNhY2hlX2ZpbmRfYnlfbmFtZShjcmVjcCwgbmFtZSwgbm93LCBGX0lQVjQpKSkKKyAgICBpZiAoY3JlY3AtPmZsYWdzICYgRl9IT1NUUykKKyAgICAgIHJldHVybiAqKHN0cnVjdCBpbl9hZGRyICopJmNyZWNwLT5hZGRyOworCisgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX1dBUk5JTkcsIF8oIk5vIElQdjQgYWRkcmVzcyBmb3VuZCBmb3IgJXMiKSwgbmFtZSk7CisgIAorICByZXQuc19hZGRyID0gMDsKKyAgcmV0dXJuIHJldDsKK30KKwordm9pZCBjYWNoZV91bmhhc2hfZGhjcCh2b2lkKQoreworICBzdHJ1Y3QgY3JlYyAqY2FjaGUsICoqdXA7CisgIGludCBpOworCisgIGZvciAoaT0wOyBpPGhhc2hfc2l6ZTsgaSsrKQorICAgIGZvciAoY2FjaGUgPSBoYXNoX3RhYmxlW2ldLCB1cCA9ICZoYXNoX3RhYmxlW2ldOyBjYWNoZTsgY2FjaGUgPSBjYWNoZS0+aGFzaF9uZXh0KQorICAgICAgaWYgKGNhY2hlLT5mbGFncyAmIEZfREhDUCkKKwl7CisJICAqdXAgPSBjYWNoZS0+aGFzaF9uZXh0OworCSAgY2FjaGUtPm5leHQgPSBkaGNwX3NwYXJlOworCSAgZGhjcF9zcGFyZSA9IGNhY2hlOworCX0KKyAgICAgIGVsc2UKKwl1cCA9ICZjYWNoZS0+aGFzaF9uZXh0OworfQorCitzdGF0aWMgdm9pZCBhZGRfZGhjcF9jbmFtZShzdHJ1Y3QgY3JlYyAqdGFyZ2V0LCB0aW1lX3QgdHRkKQoreworICBzdHJ1Y3QgY3JlYyAqYWxpYXNjOworICBzdHJ1Y3QgY25hbWUgKmE7CisgIAorICBmb3IgKGEgPSBkYWVtb24tPmNuYW1lczsgYTsgYSA9IGEtPm5leHQpCisgICAgaWYgKGEtPmFsaWFzWzFdICE9ICcqJyAmJgorCWhvc3RuYW1lX2lzZXF1YWwoY2FjaGVfZ2V0X25hbWUodGFyZ2V0KSwgYS0+dGFyZ2V0KSkKKyAgICAgIHsKKwlpZiAoKGFsaWFzYyA9IGRoY3Bfc3BhcmUpKQorCSAgZGhjcF9zcGFyZSA9IGRoY3Bfc3BhcmUtPm5leHQ7CisJZWxzZSAvKiBuZWVkIG5ldyBvbmUgKi8KKwkgIGFsaWFzYyA9IHdoaW5lX21hbGxvYyhzaXplb2Yoc3RydWN0IGNyZWMpKTsKKwkKKwlpZiAoYWxpYXNjKQorCSAgeworCSAgICBhbGlhc2MtPmZsYWdzID0gRl9GT1JXQVJEIHwgRl9OQU1FUCB8IEZfREhDUCB8IEZfQ05BTUUgfCBGX0NPTkZJRzsKKwkgICAgaWYgKHR0ZCA9PSAwKQorCSAgICAgIGFsaWFzYy0+ZmxhZ3MgfD0gRl9JTU1PUlRBTDsKKwkgICAgZWxzZQorCSAgICAgIGFsaWFzYy0+dHRkID0gdHRkOworCSAgICBhbGlhc2MtPm5hbWUubmFtZXAgPSBhLT5hbGlhczsKKwkgICAgYWxpYXNjLT5hZGRyLmNuYW1lLnRhcmdldC5jYWNoZSA9IHRhcmdldDsKKwkgICAgYWxpYXNjLT5hZGRyLmNuYW1lLnVpZCA9IHRhcmdldC0+dWlkOworCSAgICBhbGlhc2MtPnVpZCA9IG5leHRfdWlkKCk7CisJICAgIGNhY2hlX2hhc2goYWxpYXNjKTsKKwkgICAgYWRkX2RoY3BfY25hbWUoYWxpYXNjLCB0dGQpOworCSAgfQorICAgICAgfQorfQorCit2b2lkIGNhY2hlX2FkZF9kaGNwX2VudHJ5KGNoYXIgKmhvc3RfbmFtZSwgaW50IHByb3QsCisJCQkgIHN0cnVjdCBhbGxfYWRkciAqaG9zdF9hZGRyZXNzLCB0aW1lX3QgdHRkKSAKK3sKKyAgc3RydWN0IGNyZWMgKmNyZWMgPSBOVUxMLCAqZmFpbF9jcmVjID0gTlVMTDsKKyAgdW5zaWduZWQgc2hvcnQgZmxhZ3MgPSBGX0lQVjQ7CisgIGludCBpbl9ob3N0cyA9IDA7CisgIHNpemVfdCBhZGRybGVuID0gc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKTsKKworI2lmZGVmIEhBVkVfSVBWNgorICBpZiAocHJvdCA9PSBBRl9JTkVUNikKKyAgICB7CisgICAgICBmbGFncyA9IEZfSVBWNjsKKyAgICAgIGFkZHJsZW4gPSBzaXplb2Yoc3RydWN0IGluNl9hZGRyKTsKKyAgICB9CisjZW5kaWYKKyAgCisgIGluZXRfbnRvcChwcm90LCBob3N0X2FkZHJlc3MsIGRhZW1vbi0+YWRkcmJ1ZmYsIEFERFJTVFJMRU4pOworICAKKyAgd2hpbGUgKChjcmVjID0gY2FjaGVfZmluZF9ieV9uYW1lKGNyZWMsIGhvc3RfbmFtZSwgMCwgZmxhZ3MgfCBGX0NOQU1FKSkpCisgICAgeworICAgICAgLyogY2hlY2sgYWxsIGFkZHJlc3NlcyBhc3NvY2lhdGVkIHdpdGggbmFtZSAqLworICAgICAgaWYgKGNyZWMtPmZsYWdzICYgKEZfSE9TVFMgfCBGX0NPTkZJRykpCisJeworCSAgaWYgKGNyZWMtPmZsYWdzICYgRl9DTkFNRSkKKwkgICAgbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfV0FSTklORywgCisJCSAgICAgIF8oIiVzIGlzIGEgQ05BTUUsIG5vdCBnaXZpbmcgaXQgdG8gdGhlIERIQ1AgbGVhc2Ugb2YgJXMiKSwKKwkJICAgICAgaG9zdF9uYW1lLCBkYWVtb24tPmFkZHJidWZmKTsKKwkgIGVsc2UgaWYgKG1lbWNtcCgmY3JlYy0+YWRkci5hZGRyLCBob3N0X2FkZHJlc3MsIGFkZHJsZW4pID09IDApCisJICAgIGluX2hvc3RzID0gMTsKKwkgIGVsc2UKKwkgICAgZmFpbF9jcmVjID0gY3JlYzsKKwl9CisgICAgICBlbHNlIGlmICghKGNyZWMtPmZsYWdzICYgRl9ESENQKSkKKwl7CisJICBjYWNoZV9zY2FuX2ZyZWUoaG9zdF9uYW1lLCBOVUxMLCAwLCBjcmVjLT5mbGFncyAmIChmbGFncyB8IEZfQ05BTUUgfCBGX0ZPUldBUkQpKTsKKwkgIC8qIHNjYW5fZnJlZSBkZWxldGVzIGFsbCBhZGRyZXNzZXMgYXNzb2NpYXRlZCB3aXRoIG5hbWUgKi8KKwkgIGJyZWFrOworCX0KKyAgICB9CisgIAorICAvKiBpZiBpbiBob3N0cywgZG9uJ3QgbmVlZCBESENQIHJlY29yZCAqLworICBpZiAoaW5faG9zdHMpCisgICAgcmV0dXJuOworICAKKyAgLyogTmFtZSBpbiBob3N0cywgYWRkcmVzcyBkb2Vzbid0IG1hdGNoICovCisgIGlmIChmYWlsX2NyZWMpCisgICAgeworICAgICAgaW5ldF9udG9wKHByb3QsICZmYWlsX2NyZWMtPmFkZHIuYWRkciwgZGFlbW9uLT5uYW1lYnVmZiwgTUFYRE5BTUUpOworICAgICAgbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfV0FSTklORywgCisJCV8oIm5vdCBnaXZpbmcgbmFtZSAlcyB0byB0aGUgREhDUCBsZWFzZSBvZiAlcyBiZWNhdXNlICIKKwkJICAidGhlIG5hbWUgZXhpc3RzIGluICVzIHdpdGggYWRkcmVzcyAlcyIpLCAKKwkJaG9zdF9uYW1lLCBkYWVtb24tPmFkZHJidWZmLAorCQlyZWNvcmRfc291cmNlKGZhaWxfY3JlYy0+dWlkKSwgZGFlbW9uLT5uYW1lYnVmZik7CisgICAgICByZXR1cm47CisgICAgfQkgIAorICAKKyAgaWYgKChjcmVjID0gY2FjaGVfZmluZF9ieV9hZGRyKE5VTEwsIChzdHJ1Y3QgYWxsX2FkZHIgKilob3N0X2FkZHJlc3MsIDAsIGZsYWdzKSkpCisgICAgeworICAgICAgaWYgKGNyZWMtPmZsYWdzICYgRl9ORUcpCisJeworCSAgZmxhZ3MgfD0gRl9SRVZFUlNFOworCSAgY2FjaGVfc2Nhbl9mcmVlKE5VTEwsIChzdHJ1Y3QgYWxsX2FkZHIgKilob3N0X2FkZHJlc3MsIDAsIGZsYWdzKTsKKwl9CisgICAgfQorICBlbHNlCisgICAgZmxhZ3MgfD0gRl9SRVZFUlNFOworICAKKyAgaWYgKChjcmVjID0gZGhjcF9zcGFyZSkpCisgICAgZGhjcF9zcGFyZSA9IGRoY3Bfc3BhcmUtPm5leHQ7CisgIGVsc2UgLyogbmVlZCBuZXcgb25lICovCisgICAgY3JlYyA9IHdoaW5lX21hbGxvYyhzaXplb2Yoc3RydWN0IGNyZWMpKTsKKyAgCisgIGlmIChjcmVjKSAvKiBtYWxsb2MgbWF5IGZhaWwgKi8KKyAgICB7CisgICAgICBjcmVjLT5mbGFncyA9IGZsYWdzIHwgRl9OQU1FUCB8IEZfREhDUCB8IEZfRk9SV0FSRDsKKyAgICAgIGlmICh0dGQgPT0gMCkKKwljcmVjLT5mbGFncyB8PSBGX0lNTU9SVEFMOworICAgICAgZWxzZQorCWNyZWMtPnR0ZCA9IHR0ZDsKKyAgICAgIGNyZWMtPmFkZHIuYWRkciA9ICpob3N0X2FkZHJlc3M7CisgICAgICBjcmVjLT5uYW1lLm5hbWVwID0gaG9zdF9uYW1lOworICAgICAgY3JlYy0+dWlkID0gbmV4dF91aWQoKTsKKyAgICAgIGNhY2hlX2hhc2goY3JlYyk7CisKKyAgICAgIGFkZF9kaGNwX2NuYW1lKGNyZWMsIHR0ZCk7CisgICAgfQorfQorI2VuZGlmCisKKyNpZm5kZWYgTk9fSUQKK2ludCBjYWNoZV9tYWtlX3N0YXQoc3RydWN0IHR4dF9yZWNvcmQgKnQpCit7IAorICBzdGF0aWMgY2hhciAqYnVmZiA9IE5VTEw7CisgIHN0YXRpYyBpbnQgYnVmZmxlbiA9IDYwOworICBpbnQgbGVuOworICBzdHJ1Y3Qgc2VydmVyICpzZXJ2LCAqc2VydjE7CisgIGNoYXIgKnA7CisKKyAgaWYgKCFidWZmICYmICEoYnVmZiA9IHdoaW5lX21hbGxvYyg2MCkpKQorICAgIHJldHVybiAwOworCisgIHAgPSBidWZmOworICAKKyAgc3dpdGNoICh0LT5zdGF0KQorICAgIHsKKyAgICBjYXNlIFRYVF9TVEFUX0NBQ0hFU0laRToKKyAgICAgIHNwcmludGYoYnVmZisxLCAiJWQiLCBkYWVtb24tPmNhY2hlc2l6ZSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgVFhUX1NUQVRfSU5TRVJUUzoKKyAgICAgIHNwcmludGYoYnVmZisxLCAiJWQiLCBjYWNoZV9pbnNlcnRlZCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgVFhUX1NUQVRfRVZJQ1RJT05TOgorICAgICAgc3ByaW50ZihidWZmKzEsICIlZCIsIGNhY2hlX2xpdmVfZnJlZWQpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFRYVF9TVEFUX01JU1NFUzoKKyAgICAgIHNwcmludGYoYnVmZisxLCAiJXUiLCBkYWVtb24tPnF1ZXJpZXNfZm9yd2FyZGVkKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBUWFRfU1RBVF9ISVRTOgorICAgICAgc3ByaW50ZihidWZmKzEsICIldSIsIGRhZW1vbi0+bG9jYWxfYW5zd2VyKTsKKyAgICAgIGJyZWFrOworCisjaWZkZWYgSEFWRV9BVVRICisgICAgY2FzZSBUWFRfU1RBVF9BVVRIOgorICAgICAgc3ByaW50ZihidWZmKzEsICIldSIsIGRhZW1vbi0+YXV0aF9hbnN3ZXIpOworICAgICAgYnJlYWs7CisjZW5kaWYKKworICAgIGNhc2UgVFhUX1NUQVRfU0VSVkVSUzoKKyAgICAgIC8qIHN1bSBjb3VudHMgZnJvbSBkaWZmZXJlbnQgcmVjb3JkcyBmb3Igc2FtZSBzZXJ2ZXIgKi8KKyAgICAgIGZvciAoc2VydiA9IGRhZW1vbi0+c2VydmVyczsgc2Vydjsgc2VydiA9IHNlcnYtPm5leHQpCisJc2Vydi0+ZmxhZ3MgJj0gflNFUlZfQ09VTlRFRDsKKyAgICAgIAorICAgICAgZm9yIChzZXJ2ID0gZGFlbW9uLT5zZXJ2ZXJzOyBzZXJ2OyBzZXJ2ID0gc2Vydi0+bmV4dCkKKwlpZiAoIShzZXJ2LT5mbGFncyAmIAorCSAgICAgIChTRVJWX05PX0FERFIgfCBTRVJWX0xJVEVSQUxfQUREUkVTUyB8IFNFUlZfQ09VTlRFRCB8IFNFUlZfVVNFX1JFU09MViB8IFNFUlZfTk9fUkVCSU5EKSkpCisJICB7CisJICAgIGNoYXIgKm5ldywgKmxlbnA7CisJICAgIGludCBwb3J0LCBuZXdsZW4sIGJ5dGVzX2F2YWlsLCBieXRlc19uZWVkZWQ7CisJICAgIHVuc2lnbmVkIGludCBxdWVyaWVzID0gMCwgZmFpbGVkX3F1ZXJpZXMgPSAwOworCSAgICBmb3IgKHNlcnYxID0gc2Vydjsgc2VydjE7IHNlcnYxID0gc2VydjEtPm5leHQpCisJICAgICAgaWYgKCEoc2VydjEtPmZsYWdzICYgCisJCSAgICAoU0VSVl9OT19BRERSIHwgU0VSVl9MSVRFUkFMX0FERFJFU1MgfCBTRVJWX0NPVU5URUQgfCBTRVJWX1VTRV9SRVNPTFYgfCBTRVJWX05PX1JFQklORCkpICYmIAorCQkgIHNvY2thZGRyX2lzZXF1YWwoJnNlcnYtPmFkZHIsICZzZXJ2MS0+YWRkcikpCisJCXsKKwkJICBzZXJ2MS0+ZmxhZ3MgfD0gU0VSVl9DT1VOVEVEOworCQkgIHF1ZXJpZXMgKz0gc2VydjEtPnF1ZXJpZXM7CisJCSAgZmFpbGVkX3F1ZXJpZXMgKz0gc2VydjEtPmZhaWxlZF9xdWVyaWVzOworCQl9CisJICAgIHBvcnQgPSBwcmV0dHlwcmludF9hZGRyKCZzZXJ2LT5hZGRyLCBkYWVtb24tPmFkZHJidWZmKTsKKwkgICAgbGVucCA9IHArKzsgLyogbGVuZ3RoICovCisJICAgIGJ5dGVzX2F2YWlsID0gYnVmZmxlbiAtIChwIC0gYnVmZiApOworCSAgICBieXRlc19uZWVkZWQgPSBzbnByaW50ZihwLCBieXRlc19hdmFpbCwgIiVzIyVkICV1ICV1IiwgZGFlbW9uLT5hZGRyYnVmZiwgcG9ydCwgcXVlcmllcywgZmFpbGVkX3F1ZXJpZXMpOworCSAgICBpZiAoYnl0ZXNfbmVlZGVkID49IGJ5dGVzX2F2YWlsKQorCSAgICAgIHsKKwkJLyogZXhwYW5kIGJ1ZmZlciBpZiBuZWNlc3NhcnkgKi8KKwkJbmV3bGVuID0gYnl0ZXNfbmVlZGVkICsgMSArIGJ1ZmZsZW4gLSBieXRlc19hdmFpbDsKKwkJaWYgKCEobmV3ID0gd2hpbmVfbWFsbG9jKG5ld2xlbikpKQorCQkgIHJldHVybiAwOworCQltZW1jcHkobmV3LCBidWZmLCBidWZmbGVuKTsKKwkJZnJlZShidWZmKTsKKwkJcCA9IG5ldyArIChwIC0gYnVmZik7CisJCWxlbnAgPSBwIC0gMTsKKwkJYnVmZiA9IG5ldzsKKwkJYnVmZmxlbiA9IG5ld2xlbjsKKwkJYnl0ZXNfYXZhaWwgPSAgYnVmZmxlbiAtIChwIC0gYnVmZiApOworCQlieXRlc19uZWVkZWQgPSBzbnByaW50ZihwLCBieXRlc19hdmFpbCwgIiVzIyVkICV1ICV1IiwgZGFlbW9uLT5hZGRyYnVmZiwgcG9ydCwgcXVlcmllcywgZmFpbGVkX3F1ZXJpZXMpOworCSAgICAgIH0KKwkgICAgKmxlbnAgPSBieXRlc19uZWVkZWQ7CisJICAgIHAgKz0gYnl0ZXNfbmVlZGVkOworCSAgfQorICAgICAgdC0+dHh0ID0gKHVuc2lnbmVkIGNoYXIgKilidWZmOworICAgICAgdC0+bGVuID0gcCAtIGJ1ZmY7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIAorICBsZW4gPSBzdHJsZW4oYnVmZisxKTsKKyAgdC0+dHh0ID0gKHVuc2lnbmVkIGNoYXIgKilidWZmOworICB0LT5sZW4gPSBsZW4gKyAxOworICAqYnVmZiA9IGxlbjsKKyAgcmV0dXJuIDE7Cit9CisjZW5kaWYKKworLyogVGhlcmUgY2FuIGJlIG5hbWVzIGluIHRoZSBjYWNoZSBjb250YWluaW5nIGNvbnRyb2wgY2hhcnMsIGRvbid0IAorICAgbWVzcyB1cCBsb2dnaW5nIG9yIG9wZW4gc2VjdXJpdHkgaG9sZXMuICovCitzdGF0aWMgY2hhciAqc2FuaXRpc2UoY2hhciAqbmFtZSkKK3sKKyAgdW5zaWduZWQgY2hhciAqcjsKKyAgaWYgKG5hbWUpCisgICAgZm9yIChyID0gKHVuc2lnbmVkIGNoYXIgKiluYW1lOyAqcjsgcisrKQorICAgICAgaWYgKCFpc3ByaW50KChpbnQpKnIpKQorCXJldHVybiAiPG5hbWUgdW5wcmludGFibGU+IjsKKworICByZXR1cm4gbmFtZTsKK30KKworCit2b2lkIGR1bXBfY2FjaGUodGltZV90IG5vdykKK3sKKyAgc3RydWN0IHNlcnZlciAqc2VydiwgKnNlcnYxOworICBjaGFyICp0ID0gIiI7CisKKyAgbXlfc3lzbG9nKExPR19JTkZPLCBfKCJ0aW1lICVsdSIpLCAodW5zaWduZWQgbG9uZylub3cpOworICBteV9zeXNsb2coTE9HX0lORk8sIF8oImNhY2hlIHNpemUgJWQsICVkLyVkIGNhY2hlIGluc2VydGlvbnMgcmUtdXNlZCB1bmV4cGlyZWQgY2FjaGUgZW50cmllcy4iKSwgCisJICAgIGRhZW1vbi0+Y2FjaGVzaXplLCBjYWNoZV9saXZlX2ZyZWVkLCBjYWNoZV9pbnNlcnRlZCk7CisgIG15X3N5c2xvZyhMT0dfSU5GTywgXygicXVlcmllcyBmb3J3YXJkZWQgJXUsIHF1ZXJpZXMgYW5zd2VyZWQgbG9jYWxseSAldSIpLCAKKwkgICAgZGFlbW9uLT5xdWVyaWVzX2ZvcndhcmRlZCwgZGFlbW9uLT5sb2NhbF9hbnN3ZXIpOworI2lmZGVmIEhBVkVfQVVUSAorICBteV9zeXNsb2coTE9HX0lORk8sIF8oInF1ZXJpZXMgZm9yIGF1dGhvcml0YXRpdmUgem9uZXMgJXUiKSwgZGFlbW9uLT5hdXRoX2Fuc3dlcik7CisjZW5kaWYKKyNpZmRlZiBIQVZFX0ROU1NFQworICBibG9ja2RhdGFfcmVwb3J0KCk7CisjZW5kaWYKKworICAvKiBzdW0gY291bnRzIGZyb20gZGlmZmVyZW50IHJlY29yZHMgZm9yIHNhbWUgc2VydmVyICovCisgIGZvciAoc2VydiA9IGRhZW1vbi0+c2VydmVyczsgc2Vydjsgc2VydiA9IHNlcnYtPm5leHQpCisgICAgc2Vydi0+ZmxhZ3MgJj0gflNFUlZfQ09VTlRFRDsKKyAgCisgIGZvciAoc2VydiA9IGRhZW1vbi0+c2VydmVyczsgc2Vydjsgc2VydiA9IHNlcnYtPm5leHQpCisgICAgaWYgKCEoc2Vydi0+ZmxhZ3MgJiAKKwkgIChTRVJWX05PX0FERFIgfCBTRVJWX0xJVEVSQUxfQUREUkVTUyB8IFNFUlZfQ09VTlRFRCB8IFNFUlZfVVNFX1JFU09MViB8IFNFUlZfTk9fUkVCSU5EKSkpCisgICAgICB7CisJaW50IHBvcnQ7CisJdW5zaWduZWQgaW50IHF1ZXJpZXMgPSAwLCBmYWlsZWRfcXVlcmllcyA9IDA7CisJZm9yIChzZXJ2MSA9IHNlcnY7IHNlcnYxOyBzZXJ2MSA9IHNlcnYxLT5uZXh0KQorCSAgaWYgKCEoc2VydjEtPmZsYWdzICYgCisJCShTRVJWX05PX0FERFIgfCBTRVJWX0xJVEVSQUxfQUREUkVTUyB8IFNFUlZfQ09VTlRFRCB8IFNFUlZfVVNFX1JFU09MViB8IFNFUlZfTk9fUkVCSU5EKSkgJiYgCisJICAgICAgc29ja2FkZHJfaXNlcXVhbCgmc2Vydi0+YWRkciwgJnNlcnYxLT5hZGRyKSkKKwkgICAgeworCSAgICAgIHNlcnYxLT5mbGFncyB8PSBTRVJWX0NPVU5URUQ7CisJICAgICAgcXVlcmllcyArPSBzZXJ2MS0+cXVlcmllczsKKwkgICAgICBmYWlsZWRfcXVlcmllcyArPSBzZXJ2MS0+ZmFpbGVkX3F1ZXJpZXM7CisJICAgIH0KKwlwb3J0ID0gcHJldHR5cHJpbnRfYWRkcigmc2Vydi0+YWRkciwgZGFlbW9uLT5hZGRyYnVmZik7CisJbXlfc3lzbG9nKExPR19JTkZPLCBfKCJzZXJ2ZXIgJXMjJWQ6IHF1ZXJpZXMgc2VudCAldSwgcmV0cmllZCBvciBmYWlsZWQgJXUiKSwgZGFlbW9uLT5hZGRyYnVmZiwgcG9ydCwgcXVlcmllcywgZmFpbGVkX3F1ZXJpZXMpOworICAgICAgfQorICAKKyAgaWYgKG9wdGlvbl9ib29sKE9QVF9ERUJVRykgfHwgb3B0aW9uX2Jvb2woT1BUX0xPRykpCisgICAgeworICAgICAgc3RydWN0IGNyZWMgKmNhY2hlIDsKKyAgICAgIGludCBpOworICAgICAgbXlfc3lzbG9nKExPR19JTkZPLCAiSG9zdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgRmxhZ3MgICAgICBFeHBpcmVzIik7CisgICAgCisgICAgICBmb3IgKGk9MDsgaTxoYXNoX3NpemU7IGkrKykKKwlmb3IgKGNhY2hlID0gaGFzaF90YWJsZVtpXTsgY2FjaGU7IGNhY2hlID0gY2FjaGUtPmhhc2hfbmV4dCkKKwkgIHsKKwkgICAgY2hhciAqYSA9IGRhZW1vbi0+YWRkcmJ1ZmYsICpwID0gZGFlbW9uLT5uYW1lYnVmZiwgKm4gPSBjYWNoZV9nZXRfbmFtZShjYWNoZSk7CisJICAgICphID0gMDsKKwkgICAgaWYgKHN0cmxlbihuKSA9PSAwICYmICEoY2FjaGUtPmZsYWdzICYgRl9SRVZFUlNFKSkKKwkgICAgICBuID0gIjxSb290PiI7CisJICAgIHAgKz0gc3ByaW50ZihwLCAiJS0zMC4zMHMgIiwgc2FuaXRpc2UobikpOworCSAgICBpZiAoKGNhY2hlLT5mbGFncyAmIEZfQ05BTUUpICYmICFpc19vdXRkYXRlZF9jbmFtZV9wb2ludGVyKGNhY2hlKSkKKwkgICAgICBhID0gc2FuaXRpc2UoY2FjaGVfZ2V0X2NuYW1lX3RhcmdldChjYWNoZSkpOworI2lmZGVmIEhBVkVfRE5TU0VDCisJICAgIGVsc2UgaWYgKGNhY2hlLT5mbGFncyAmIEZfRFMpCisJICAgICAgeworCQlpZiAoIShjYWNoZS0+ZmxhZ3MgJiBGX05FRykpCisJCSAgc3ByaW50ZihhLCAiJTV1ICUzdSAlM3UiLCBjYWNoZS0+YWRkci5kcy5rZXl0YWcsCisJCQkgIGNhY2hlLT5hZGRyLmRzLmFsZ28sIGNhY2hlLT5hZGRyLmRzLmRpZ2VzdCk7CisJICAgICAgfQorCSAgICBlbHNlIGlmIChjYWNoZS0+ZmxhZ3MgJiBGX0ROU0tFWSkKKwkgICAgICBzcHJpbnRmKGEsICIlNXUgJTN1ICUzdSIsIGNhY2hlLT5hZGRyLmtleS5rZXl0YWcsCisJCSAgICAgIGNhY2hlLT5hZGRyLmtleS5hbGdvLCBjYWNoZS0+YWRkci5rZXkuZmxhZ3MpOworI2VuZGlmCisJICAgIGVsc2UgaWYgKCEoY2FjaGUtPmZsYWdzICYgRl9ORUcpIHx8ICEoY2FjaGUtPmZsYWdzICYgRl9GT1JXQVJEKSkKKwkgICAgICB7IAorCQlhID0gZGFlbW9uLT5hZGRyYnVmZjsKKwkJaWYgKGNhY2hlLT5mbGFncyAmIEZfSVBWNCkKKwkJICBpbmV0X250b3AoQUZfSU5FVCwgJmNhY2hlLT5hZGRyLmFkZHIsIGEsIEFERFJTVFJMRU4pOworI2lmZGVmIEhBVkVfSVBWNgorCQllbHNlIGlmIChjYWNoZS0+ZmxhZ3MgJiBGX0lQVjYpCisJCSAgaW5ldF9udG9wKEFGX0lORVQ2LCAmY2FjaGUtPmFkZHIuYWRkciwgYSwgQUREUlNUUkxFTik7CisjZW5kaWYKKwkgICAgICB9CisKKwkgICAgaWYgKGNhY2hlLT5mbGFncyAmIEZfSVBWNCkKKwkgICAgICB0ID0gIjQiOworCSAgICBlbHNlIGlmIChjYWNoZS0+ZmxhZ3MgJiBGX0lQVjYpCisJICAgICAgdCA9ICI2IjsKKwkgICAgZWxzZSBpZiAoY2FjaGUtPmZsYWdzICYgRl9DTkFNRSkKKwkgICAgICB0ID0gIkMiOworI2lmZGVmIEhBVkVfRE5TU0VDCisJICAgIGVsc2UgaWYgKGNhY2hlLT5mbGFncyAmIEZfRFMpCisJICAgICAgdCA9ICJTIjsKKwkgICAgZWxzZSBpZiAoY2FjaGUtPmZsYWdzICYgRl9ETlNLRVkpCisJICAgICAgdCA9ICJLIjsKKyNlbmRpZgorCSAgICBwICs9IHNwcmludGYocCwgIiUtNDAuNDBzICVzJXMlcyVzJXMlcyVzJXMlcyAgIiwgYSwgdCwKKwkJCSBjYWNoZS0+ZmxhZ3MgJiBGX0ZPUldBUkQgPyAiRiIgOiAiICIsCisJCQkgY2FjaGUtPmZsYWdzICYgRl9SRVZFUlNFID8gIlIiIDogIiAiLAorCQkJIGNhY2hlLT5mbGFncyAmIEZfSU1NT1JUQUwgPyAiSSIgOiAiICIsCisJCQkgY2FjaGUtPmZsYWdzICYgRl9ESENQID8gIkQiIDogIiAiLAorCQkJIGNhY2hlLT5mbGFncyAmIEZfTkVHID8gIk4iIDogIiAiLAorCQkJIGNhY2hlLT5mbGFncyAmIEZfTlhET01BSU4gPyAiWCIgOiAiICIsCisJCQkgY2FjaGUtPmZsYWdzICYgRl9IT1NUUyA/ICJIIiA6ICIgIiwKKwkJCSBjYWNoZS0+ZmxhZ3MgJiBGX0ROU1NFQ09LID8gIlYiIDogIiAiKTsKKyNpZmRlZiBIQVZFX0JST0tFTl9SVEMKKwkgICAgcCArPSBzcHJpbnRmKHAsICIlbHUiLCBjYWNoZS0+ZmxhZ3MgJiBGX0lNTU9SVEFMID8gMDogKHVuc2lnbmVkIGxvbmcpKGNhY2hlLT50dGQgLSBub3cpKTsKKyNlbHNlCisJICAgIHAgKz0gc3ByaW50ZihwLCAiJXMiLCBjYWNoZS0+ZmxhZ3MgJiBGX0lNTU9SVEFMID8gIlxuIiA6IGN0aW1lKCYoY2FjaGUtPnR0ZCkpKTsKKwkgICAgLyogY3RpbWUgaW5jbHVkZXMgdHJhaWxpbmcgXG4gLSBlYXQgaXQgKi8KKwkgICAgKihwLTEpID0gMDsKKyNlbmRpZgorCSAgICBteV9zeXNsb2coTE9HX0lORk8sICIlcyIsIGRhZW1vbi0+bmFtZWJ1ZmYpOworCSAgfQorICAgIH0KK30KKworY2hhciAqcmVjb3JkX3NvdXJjZSh1bnNpZ25lZCBpbnQgaW5kZXgpCit7CisgIHN0cnVjdCBob3N0c2ZpbGUgKmFoOworCisgIGlmIChpbmRleCA9PSBTUkNfQ09ORklHKQorICAgIHJldHVybiAiY29uZmlnIjsKKyAgZWxzZSBpZiAoaW5kZXggPT0gU1JDX0hPU1RTKQorICAgIHJldHVybiBIT1NUU0ZJTEU7CisKKyAgZm9yIChhaCA9IGRhZW1vbi0+YWRkbl9ob3N0czsgYWg7IGFoID0gYWgtPm5leHQpCisgICAgaWYgKGFoLT5pbmRleCA9PSBpbmRleCkKKyAgICAgIHJldHVybiBhaC0+Zm5hbWU7CisKKyNpZmRlZiBIQVZFX0lOT1RJRlkKKyAgZm9yIChhaCA9IGRhZW1vbi0+ZHluYW1pY19kaXJzOyBhaDsgYWggPSBhaC0+bmV4dCkKKyAgICAgaWYgKGFoLT5pbmRleCA9PSBpbmRleCkKKyAgICAgICByZXR1cm4gYWgtPmZuYW1lOworI2VuZGlmCisKKyAgcmV0dXJuICI8dW5rbm93bj4iOworfQorCitjaGFyICpxdWVyeXN0cihjaGFyICpkZXNjLCB1bnNpZ25lZCBzaG9ydCB0eXBlKQoreworICB1bnNpZ25lZCBpbnQgaTsKKyAgaW50IGxlbiA9IDEwOyAvKiBzdHJsZW4oInR5cGU9eHh4eHgiKSAqLworICBjb25zdCBjaGFyICp0eXBlcyA9IE5VTEw7CisgIHN0YXRpYyBjaGFyICpidWZmID0gTlVMTDsKKyAgc3RhdGljIGludCBidWZmbGVuID0gMDsKKworICBmb3IgKGkgPSAwOyBpIDwgKHNpemVvZih0eXBlc3RyKS9zaXplb2YodHlwZXN0clswXSkpOyBpKyspCisgICAgaWYgKHR5cGVzdHJbaV0udHlwZSA9PSB0eXBlKQorICAgICAgeworCXR5cGVzID0gdHlwZXN0cltpXS5uYW1lOworCWxlbiA9IHN0cmxlbih0eXBlcyk7CisJYnJlYWs7CisgICAgICB9CisKKyAgbGVuICs9IDM7IC8qIGJyYWNlcywgdGVybWluYXRvciAqLworICBsZW4gKz0gc3RybGVuKGRlc2MpOworCisgIGlmICghYnVmZiB8fCBidWZmbGVuIDwgbGVuKQorICAgIHsKKyAgICAgIGlmIChidWZmKQorCWZyZWUoYnVmZik7CisgICAgICBlbHNlIGlmIChsZW4gPCAyMCkKKwlsZW4gPSAyMDsKKyAgICAgIAorICAgICAgYnVmZiA9IHdoaW5lX21hbGxvYyhsZW4pOworICAgICAgYnVmZmxlbiA9IGxlbjsKKyAgICB9CisKKyAgaWYgKGJ1ZmYpCisgICAgeworICAgICAgaWYgKHR5cGVzKQorCXNwcmludGYoYnVmZiwgIiVzWyVzXSIsIGRlc2MsIHR5cGVzKTsKKyAgICAgIGVsc2UKKwlzcHJpbnRmKGJ1ZmYsICIlc1t0eXBlPSVkXSIsIGRlc2MsIHR5cGUpOworICAgIH0KKworICByZXR1cm4gYnVmZiA/IGJ1ZmYgOiAiIjsKK30KKwordm9pZCBsb2dfcXVlcnkodW5zaWduZWQgaW50IGZsYWdzLCBjaGFyICpuYW1lLCBzdHJ1Y3QgYWxsX2FkZHIgKmFkZHIsIGNoYXIgKmFyZykKK3sKKyAgY2hhciAqc291cmNlLCAqZGVzdCA9IGRhZW1vbi0+YWRkcmJ1ZmY7CisgIGNoYXIgKnZlcmIgPSAiaXMiOworICAKKyAgaWYgKCFvcHRpb25fYm9vbChPUFRfTE9HKSkKKyAgICByZXR1cm47CisKKyAgbmFtZSA9IHNhbml0aXNlKG5hbWUpOworCisgIGlmIChhZGRyKQorICAgIHsKKyAgICAgIGlmIChmbGFncyAmIEZfS0VZVEFHKQorCXNwcmludGYoZGFlbW9uLT5hZGRyYnVmZiwgYXJnLCBhZGRyLT5hZGRyLmxvZy5rZXl0YWcsIGFkZHItPmFkZHIubG9nLmFsZ28sIGFkZHItPmFkZHIubG9nLmRpZ2VzdCk7CisgICAgICBlbHNlCisJeworI2lmZGVmIEhBVkVfSVBWNgorCSAgaW5ldF9udG9wKGZsYWdzICYgRl9JUFY0ID8gQUZfSU5FVCA6IEFGX0lORVQ2LAorCQkgICAgYWRkciwgZGFlbW9uLT5hZGRyYnVmZiwgQUREUlNUUkxFTik7CisjZWxzZQorCSAgc3RybmNweShkYWVtb24tPmFkZHJidWZmLCBpbmV0X250b2EoYWRkci0+YWRkci5hZGRyNCksIEFERFJTVFJMRU4pOyAgCisjZW5kaWYKKwl9CisgICAgfQorICBlbHNlCisgICAgZGVzdCA9IGFyZzsKKworICBpZiAoZmxhZ3MgJiBGX1JFVkVSU0UpCisgICAgeworICAgICAgZGVzdCA9IG5hbWU7CisgICAgICBuYW1lID0gZGFlbW9uLT5hZGRyYnVmZjsKKyAgICB9CisgIAorICBpZiAoZmxhZ3MgJiBGX05FRykKKyAgICB7CisgICAgICBpZiAoZmxhZ3MgJiBGX05YRE9NQUlOKQorCWRlc3QgPSAiTlhET01BSU4iOworICAgICAgZWxzZQorCXsgICAgICAKKwkgIGlmIChmbGFncyAmIEZfSVBWNCkKKwkgICAgZGVzdCA9ICJOT0RBVEEtSVB2NCI7CisJICBlbHNlIGlmIChmbGFncyAmIEZfSVBWNikKKwkgICAgZGVzdCA9ICJOT0RBVEEtSVB2NiI7CisJICBlbHNlCisJICAgIGRlc3QgPSAiTk9EQVRBIjsKKwl9CisgICAgfQorICBlbHNlIGlmIChmbGFncyAmIEZfQ05BTUUpCisgICAgZGVzdCA9ICI8Q05BTUU+IjsKKyAgZWxzZSBpZiAoZmxhZ3MgJiBGX1JSTkFNRSkKKyAgICBkZXN0ID0gYXJnOworICAgIAorICBpZiAoZmxhZ3MgJiBGX0NPTkZJRykKKyAgICBzb3VyY2UgPSAiY29uZmlnIjsKKyAgZWxzZSBpZiAoZmxhZ3MgJiBGX0RIQ1ApCisgICAgc291cmNlID0gIkRIQ1AiOworICBlbHNlIGlmIChmbGFncyAmIEZfSE9TVFMpCisgICAgc291cmNlID0gYXJnOworICBlbHNlIGlmIChmbGFncyAmIEZfVVBTVFJFQU0pCisgICAgc291cmNlID0gInJlcGx5IjsKKyAgZWxzZSBpZiAoZmxhZ3MgJiBGX1NFQ1NUQVQpCisgICAgc291cmNlID0gInZhbGlkYXRpb24iOworICBlbHNlIGlmIChmbGFncyAmIEZfQVVUSCkKKyAgICBzb3VyY2UgPSAiYXV0aCI7CisgIGVsc2UgaWYgKGZsYWdzICYgRl9TRVJWRVIpCisgICAgeworICAgICAgc291cmNlID0gImZvcndhcmRlZCI7CisgICAgICB2ZXJiID0gInRvIjsKKyAgICB9CisgIGVsc2UgaWYgKGZsYWdzICYgRl9RVUVSWSkKKyAgICB7CisgICAgICBzb3VyY2UgPSBhcmc7CisgICAgICB2ZXJiID0gImZyb20iOworICAgIH0KKyAgZWxzZSBpZiAoZmxhZ3MgJiBGX0ROU1NFQykKKyAgICB7CisgICAgICBzb3VyY2UgPSBhcmc7CisgICAgICB2ZXJiID0gInRvIjsKKyAgICB9CisgIGVsc2UgaWYgKGZsYWdzICYgRl9JUFNFVCkKKyAgICB7CisgICAgICBzb3VyY2UgPSAiaXBzZXQgYWRkIjsKKyAgICAgIGRlc3QgPSBuYW1lOworICAgICAgbmFtZSA9IGFyZzsKKyAgICAgIHZlcmIgPSBkYWVtb24tPmFkZHJidWZmOworICAgIH0KKyAgZWxzZQorICAgIHNvdXJjZSA9ICJjYWNoZWQiOworICAKKyAgaWYgKHN0cmxlbihuYW1lKSA9PSAwKQorICAgIG5hbWUgPSAiLiI7CisKKyAgaWYgKG9wdGlvbl9ib29sKE9QVF9FWFRSQUxPRykpCisgICAgeworICAgICAgaW50IHBvcnQgPSBwcmV0dHlwcmludF9hZGRyKGRhZW1vbi0+bG9nX3NvdXJjZV9hZGRyLCBkYWVtb24tPmFkZHJidWZmMik7CisgICAgICBpZiAoZmxhZ3MgJiBGX05PRVhUUkEpCisJbXlfc3lzbG9nKExPR19JTkZPLCAiKiAlcy8ldSAlcyAlcyAlcyAlcyIsIGRhZW1vbi0+YWRkcmJ1ZmYyLCBwb3J0LCBzb3VyY2UsIG5hbWUsIHZlcmIsIGRlc3QpOworICAgICAgZWxzZQorCW15X3N5c2xvZyhMT0dfSU5GTywgIiV1ICVzLyV1ICVzICVzICVzICVzIiwgZGFlbW9uLT5sb2dfZGlzcGxheV9pZCwgZGFlbW9uLT5hZGRyYnVmZjIsIHBvcnQsIHNvdXJjZSwgbmFtZSwgdmVyYiwgZGVzdCk7CisgICAgfQorICBlbHNlCisgICAgbXlfc3lzbG9nKExPR19JTkZPLCAiJXMgJXMgJXMgJXMiLCBzb3VyY2UsIG5hbWUsIHZlcmIsIGRlc3QpOworfQorCisgCmRpZmYgLS1naXQgYS9zcmMvY29uZmlnLmggYi9zcmMvY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWIyMjVmOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9jb25maWcuaApAQCAtMCwwICsxLDQ3MCBAQAorLyogZG5zbWFzcSBpcyBDb3B5cmlnaHQgKGMpIDIwMDAtMjAxNyBTaW1vbiBLZWxsZXkKKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgZGF0ZWQgSnVuZSwgMTk5MSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgdmVyc2lvbiAzIGRhdGVkIDI5IEp1bmUsIDIwMDcuCisgCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisKKyNkZWZpbmUgRlRBQlNJWiAxNTAgLyogbWF4IG51bWJlciBvZiBvdXRzdGFuZGluZyByZXF1ZXN0cyAoZGVmYXVsdCkgKi8KKyNkZWZpbmUgTUFYX1BST0NTIDIwIC8qIG1heCBubyBjaGlsZHJlbiBmb3IgVENQIHJlcXVlc3RzICovCisjZGVmaW5lIENISUxEX0xJRkVUSU1FIDE1MCAvKiBzZWNzICd0aWxsIHRlcm1pbmF0ZWQgKFJGQzEwMzUgc3VnZ2VzdHMgPiAxMjBzKSAqLworI2RlZmluZSBUQ1BfTUFYX1FVRVJJRVMgMTAwIC8qIE1heGltdW0gbnVtYmVyIG9mIHF1ZXJpZXMgcGVyIGluY29taW5nIFRDUCBjb25uZWN0aW9uICovCisjZGVmaW5lIFRDUF9CQUNLTE9HIDMyICAvKiBrZXJuZWwgYmFja2xvZyBsaW1pdCBmb3IgVENQIGNvbm5lY3Rpb25zICovCisjZGVmaW5lIEVETlNfUEtUU1ogNDA5NiAvKiBkZWZhdWx0IG1heCBFRE5TLjAgVURQIHBhY2tldCBmcm9tIFJGQzU2MjUgKi8KKyNkZWZpbmUgU0FGRV9QS1RTWiAxMjgwIC8qICJnbyBhbnl3aGVyZSIgVURQIHBhY2tldCBzaXplICovCisjZGVmaW5lIEtFWUJMT0NLX0xFTiA0MCAvKiBjaG9vc2UgdG8gbWluaW1pc2UgZnJhZ21lbnRhdGlvbiB3aGVuIHN0b3JpbmcgRE5TU0VDIGtleXMgKi8KKyNkZWZpbmUgRE5TU0VDX1dPUksgNTAgLyogTWF4IG51bWJlciBvZiBxdWVyaWVzIHRvIHZhbGlkYXRlIG9uZSBxdWVzdGlvbiAqLworI2RlZmluZSBUSU1FT1VUIDEwIC8qIGRyb3AgVURQIHF1ZXJpZXMgYWZ0ZXIgVElNRU9VVCBzZWNvbmRzICovCisjZGVmaW5lIEZPUldBUkRfVEVTVCA1MCAvKiB0cnkgYWxsIHNlcnZlcnMgZXZlcnkgNTAgcXVlcmllcyAqLworI2RlZmluZSBGT1JXQVJEX1RJTUUgMjAgLyogb3IgMjAgc2Vjb25kcyAqLworI2RlZmluZSBTRVJWRVJTX0xPR0dFRCAzMCAvKiBPbmx5IGxvZyB0aGlzIG1hbnkgc2VydmVycyB3aGVuIGxvZ2dpbmcgc3RhdGUgKi8KKyNkZWZpbmUgTE9DQUxTX0xPR0dFRCA4IC8qIE9ubHkgbG9nIHRoaXMgbWFueSBsb2NhbCBhZGRyZXNzZXMgd2hlbiBsb2dnaW5nIHN0YXRlICovCisjZGVmaW5lIFJBTkRPTV9TT0NLUyA2NCAvKiBtYXggc2ltdWx0YW5lb3VzIHJhbmRvbSBwb3J0cyAqLworI2RlZmluZSBMRUFTRV9SRVRSWSA2MCAvKiBvbiBlcnJvciwgcmV0cnkgd3JpdGluZyBsZWFzZWZpbGUgYWZ0ZXIgTEVBU0VfUkVUUlkgc2Vjb25kcyAqLworI2RlZmluZSBDQUNIRVNJWiAxNTAgLyogZGVmYXVsdCBjYWNoZSBzaXplICovCisjZGVmaW5lIFRUTF9GTE9PUl9MSU1JVCAzNjAwIC8qIGRvbid0IGFsbG93IC0tbWluLWNhY2hlLXR0bCB0byByYWlzZSBUVEwgYWJvdmUgdGhpcyB1bmRlciBhbnkgY2lyY3Vtc3RhbmNlcyAqLworI2RlZmluZSBNQVhMRUFTRVMgMTAwMCAvKiBtYXhpbXVtIG51bWJlciBvZiBESENQIGxlYXNlcyAqLworI2RlZmluZSBQSU5HX1dBSVQgMyAvKiB3YWl0IGZvciBwaW5nIGFkZHJlc3MtaW4tdXNlIHRlc3QgKi8KKyNkZWZpbmUgUElOR19DQUNIRV9USU1FIDMwIC8qIFBpbmcgdGVzdCBhc3N1bWVkIHRvIGJlIHZhbGlkIHRoaXMgbG9uZy4gKi8KKyNkZWZpbmUgREVDTElORV9CQUNLT0ZGIDYwMCAvKiBkaXNhYmxlIERFQ0xJTkVkIHN0YXRpYyBhZGRyZXNzZXMgZm9yIHRoaXMgbG9uZyAqLworI2RlZmluZSBESENQX1BBQ0tFVF9NQVggMTYzODQgLyogaGFyZCBsaW1pdCBvbiBESENQIHBhY2tldCBzaXplICovCisjZGVmaW5lIFNNQUxMRE5BTUUgNTAgLyogbW9zdCBkb21haW4gbmFtZXMgYXJlIHNtYWxsZXIgdGhhbiB0aGlzICovCisjZGVmaW5lIENOQU1FX0NIQUlOIDEwIC8qIGNoYWlucyBsb25nZXIgdGhhbiB0aGlzIGF0ciBkcm9wcGVkIGZvciBsb29wIHByb3RlY3Rpb24gKi8KKyNkZWZpbmUgSE9TVFNGSUxFICIvZXRjL2hvc3RzIgorI2RlZmluZSBFVEhFUlNGSUxFICIvZXRjL2V0aGVycyIKKyNkZWZpbmUgREVGTEVBU0UgMzYwMCAvKiBkZWZhdWx0IGxlYXNlIHRpbWUsIDEgaG91ciAqLworI2RlZmluZSBDSFVTRVIgIm5vYm9keSIKKyNkZWZpbmUgQ0hHUlAgImRpcCIKKyNkZWZpbmUgVEZUUF9NQVhfQ09OTkVDVElPTlMgNTAgLyogbWF4IHNpbXVsdGFuZW91cyBjb25uZWN0aW9ucyAqLworI2RlZmluZSBMT0dfTUFYIDUgLyogbG9nLXF1ZXVlIGxlbmd0aCAqLworI2RlZmluZSBSQU5ERklMRSAiL2Rldi91cmFuZG9tIgorI2RlZmluZSBETlNNQVNRX1NFUlZJQ0UgInVrLm9yZy50aGVrZWxsZXlzLmRuc21hc3EiIC8qIERlZmF1bHQgLSBtYXkgYmUgb3ZlcnJpZGRlbiBieSBjb25maWcgKi8KKyNkZWZpbmUgRE5TTUFTUV9QQVRIICIvdWsvb3JnL3RoZWtlbGxleXMvZG5zbWFzcSIKKyNkZWZpbmUgQVVUSF9UVEwgNjAwIC8qIGRlZmF1bHQgVFRMIGZvciBhdXRoIEROUyAqLworI2RlZmluZSBTT0FfUkVGUkVTSCAxMjAwIC8qIFNPQSByZWZyZXNoIGRlZmF1bHQgKi8KKyNkZWZpbmUgU09BX1JFVFJZIDE4MCAvKiBTT0EgcmV0cnkgZGVmYXVsdCAqLworI2RlZmluZSBTT0FfRVhQSVJZIDEyMDk2MDAgLyogU09BIGV4cGlyeSBkZWZhdWx0ICovCisjZGVmaW5lIExPT1BfVEVTVF9ET01BSU4gInRlc3QiIC8qIGRvbWFpbiBmb3IgbG9vcCB0ZXN0aW5nLCAidGVzdCIgaXMgcmVzZXJ2ZWQgYnkgUkZDIDI2MDYgYW5kIHdvbid0IHRoZXJlZm9yZSBjbGFzaCAqLworI2RlZmluZSBMT09QX1RFU1RfVFlQRSBUX1RYVAorIAorLyogY29tcGlsZS10aW1lIG9wdGlvbnM6IHVuY29tbWVudCBiZWxvdyB0byBlbmFibGUgb3IgZG8gZWcuCisgICBtYWtlIENPUFRTPS1ESEFWRV9CUk9LRU5fUlRDCisKK0hBVkVfQlJPS0VOX1JUQworICAgZGVmaW5lIHRoaXMgb24gZW1iZWRkZWQgc3lzdGVtcyB3aGljaCBkb24ndCBoYXZlIGFuIFJUQworICAgd2hpY2gga2VlcHMgdGltZSBvdmVyIHJlYm9vdHMuIENhdXNlcyBkbnNtYXNxIHRvIHVzZSB1cHRpbWUKKyAgIGZvciB0aW1pbmcsIGFuZCBrZWVwIGxlYXNlIGxlbmd0aHMgcmF0aGVyIHRoYW4gZXhwaXJ5IHRpbWVzCisgICBpbiBpdHMgbGVhc2VzIGZpbGUuIFRoaXMgYWxzbyBtYWtlIGRuc21hc3EgImZsYXNoIGRpc2sgZnJpZW5kbHkiLgorICAgTm9ybWFsbHksIGRuc21hc3EgdHJpZXMgdmVyeSBoYXJkIHRvIGtlZXAgdGhlIG9uLWRpc2sgbGVhc2VzIGZpbGUKKyAgIHVwLXRvLWRhdGU6IHJld3JpdGluZyBpdCBhZnRlciBldmVyeSByZW5ld2FsLiAgV2hlbiBIQVZFX0JST0tFTl9SVEMgCisgICBpcyBpbiBlZmZlY3QsIHRoZSBsZWFzZSBmaWxlIGlzIG9ubHkgd3JpdHRlbiB3aGVuIGEgbmV3IGxlYXNlIGlzIAorICAgY3JlYXRlZCwgb3IgYW4gb2xkIG9uZSBkZXN0cm95ZWQuIChCZWNhdXNlIHRob3NlIGFyZSB0aGUgb25seSB0aW1lcyAKKyAgIGl0IGNoYW5nZXMuKSBUaGlzIHZhc3RseSByZWR1Y2VzIHRoZSBudW1iZXIgb2YgZmlsZSB3cml0ZXMsIGFuZCBtYWtlcworICAgaXQgdmlhYmxlIHRvIGtlZXAgdGhlIGxlYXNlIGZpbGUgb24gYSBmbGFzaCBmaWxlc3lzdGVtLgorICAgTk9URTogd2hlbiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcywgYmUgc3VyZSB0byBkZWxldGUgYW55IG9sZAorICAgbGVhc2VzIGZpbGUsIG90aGVyd2lzZSBkbnNtYXNxIG1heSBnZXQgdmVyeSBjb25mdXNlZC4KKworSEFWRV9URlRQCisgICBkZWZpbmUgdGhpcyB0byBnZXQgZG5zbWFzcSdzIGJ1aWx0LWluIFRGVFAgc2VydmVyLgorCitIQVZFX0RIQ1AKKyAgIGRlZmluZSB0aGlzIHRvIGdldCBkbnNtYXNxJ3MgREhDUHY0IHNlcnZlci4KKworSEFWRV9ESENQNgorICAgZGVmaW5lIHRoaXMgdG8gZ2V0IGRuc21hc3EncyBESENQdjYgc2VydmVyLiAoaW1wbGllcyBIQVZFX0RIQ1ApLgorCitIQVZFX1NDUklQVAorICAgZGVmaW5lIHRoaXMgdG8gZ2V0IHRoZSBhYmlsaXR5IHRvIGNhbGwgc2NyaXB0cyBvbiBsZWFzZS1jaGFuZ2UuCisKK0hBVkVfTFVBU0NSSVBUCisgICBkZWZpbmUgdGhpcyB0byBnZXQgdGhlIGFiaWxpdHkgdG8gY2FsbCBMdWEgc2NyaXB0IG9uIGxlYXNlLWNoYW5nZS4gKGltcGxpZXMgSEFWRV9TQ1JJUFQpIAorCitIQVZFX0RCVVMKKyAgIGRlZmluZSB0aGlzIGlmIHlvdSB3YW50IHRvIGxpbmsgYWdhaW5zdCBsaWJkYnVzLCBhbmQgaGF2ZSBkbnNtYXNxCisgICBzdXBwb3J0IHNvbWUgbWV0aG9kcyB0byBhbGxvdyAocmUpY29uZmlndXJhdGlvbiBvZiB0aGUgdXBzdHJlYW0gRE5TIAorICAgc2VydmVycyB2aWEgREJ1cy4KKworSEFWRV9JRE4KKyAgIGRlZmluZSB0aGlzIGlmIHlvdSB3YW50IGludGVybmF0aW9uYWwgZG9tYWluIG5hbWUgMjAwMyBzdXBwb3J0LgorICAgCitIQVZFX0xJQklETjIKKyAgIGRlZmluZSB0aGlzIGlmIHlvdSB3YW50IGludGVybmF0aW9uYWwgZG9tYWluIG5hbWUgMjAwOCBzdXBwb3J0LgorCitIQVZFX0NPTk5UUkFDSworICAgZGVmaW5lIHRoaXMgdG8gaW5jbHVkZSBjb2RlIHdoaWNoIHByb3BhZ2F0ZXMgY29ubnRyYWNrIG1hcmtzIGZyb20KKyAgIGluY29taW5nIEROUyBxdWVyaWVzIHRvIHRoZSBjb3JyZXNwb25kaW5nIHVwc3RyZWFtIHF1ZXJpZXMuIFRoaXMgYWRkcworICAgYSBidWlsZC1kZXBlbmRlbmN5IG9uIGxpYm5ldGZpbHRlcl9jb25udHJhY2ssIGJ1dCB0aGUgcmVzdWx0aW5nIGJpbmFyeSB3aWxsCisgICBzdGlsbCBydW4gaGFwcGlseSBvbiBhIGtlcm5lbCB3aXRob3V0IGNvbm50cmFjayBzdXBwb3J0LgorCitIQVZFX0lQU0VUCisgICAgZGVmaW5lIHRoaXMgdG8gaW5jbHVkZSB0aGUgYWJpbGl0eSB0byBzZWxlY3RpdmVseSBhZGQgcmVzb2x2ZWQgaXAgYWRkcmVzc2VzCisgICAgdG8gZ2l2ZW4gaXBzZXRzLgorCitIQVZFX0FVVEgKKyAgIGRlZmluZSB0aGlzIHRvIGluY2x1ZGUgdGhlIGZhY2lsaXR5IHRvIGFjdCBhcyBhbiBhdXRob3JpdGF0aXZlIEROUworICAgc2VydmVyIGZvciBvbmUgb3IgbW9yZSB6b25lcy4KKworSEFWRV9ETlNTRUMKKyAgIGluY2x1ZGUgRE5TU0VDIHZhbGlkYXRvci4KKworSEFWRV9MT09QCisgICBpbmNsdWRlIGZ1bmN0aW9uYWxpdHkgdG8gcHJvYmUgZm9yIGFuZCByZW1vdmUgRE5TIGZvcndhcmRpbmcgbG9vcHMuCisKK0hBVkVfSU5PVElGWQorICAgdXNlIHRoZSBMaW51eCBpbm90aWZ5IGZhY2lsaXR5IHRvIGVmZmljaWVudGx5IHJlLXJlYWQgY29uZmlndXJhdGlvbiBmaWxlcy4KKworTk9fSUQKKyAgIERvbid0IHJlcG9ydCAqLmJpbmQgQ0hBT1MgaW5mbyB0byBjbGllbnRzLCBmb3J3YXJkIHN1Y2ggcmVxdWVzdHMgdXBzdHJlYW0gaW5zdGVhZC4KK05PX0lQVjYKK05PX1RGVFAKK05PX0RIQ1AKK05PX0RIQ1A2CitOT19TQ1JJUFQKK05PX0xBUkdFRklMRQorTk9fQVVUSAorTk9fSU5PVElGWQorICAgdGhlc2UgYXJlIGF2YWlsYWJsZSB0byBleHBsaWNpdGx5IGRpc2FibGUgY29tcGlsZSB0aW1lIG9wdGlvbnMgd2hpY2ggd291bGQgCisgICBvdGhlcndpc2UgYmUgZW5hYmxlZCBhdXRvbWF0aWNhbGx5IChIQVZFX0lQVjYsID4yR2IgZmlsZSBzaXplcykgb3IgCisgICB3aGljaCBhcmUgZW5hYmxlZCAgYnkgZGVmYXVsdCBpbiB0aGUgZGlzdHJpYnV0ZWQgc291cmNlIHRyZWUuIEJ1aWxkaW5nIGRuc21hc3EKKyAgIHdpdGggc29tZXRoaW5nIGxpa2UgIm1ha2UgQ09QVFM9LUROT19TQ1JJUFQiIHdpbGwgZG8gdGhlIHRyaWNrLgorCitOT19ORVRUTEVfRUNDCisgICBEb24ndCBpbmNsdWRlIHRoZSBFQ0RTQSBjeXBoZXIgaW4gRE5TU0VDIHZhbGlkYXRpb24uIE5lZWRlZCBmb3Igb2xkZXIgTmV0dGxlIHZlcnNpb25zLgorTk9fR01QCisgICBEb24ndCB1c2UgYW5kIGxpbmsgYWdhaW5zdCBsaWJnbXAsIFVzZWZ1bCBpZiBuZXR0bGUgaXMgYnVpbHQgd2l0aCAtLWVuYWJsZS1taW5pLWdtcC4KKworTEVBU0VGSUxFCitDT05GRklMRQorUkVTT0xWRklMRQorICAgdGhlIGRlZmF1bHQgbG9jYXRpb25zIG9mIHRoZXNlIGZpbGVzIGFyZSBkZXRlcm1pbmVkIGJlbG93LCBidXQgbWF5IGJlIG92ZXJyaWRkZW4gCisgICBpbiBhIGJ1aWxkIGNvbW1hbmQgbGluZSB1c2luZyBDT1BUUy4KKworKi8KKworLyogRGVmaW5pbmcgdGhpcyBidWlsZHMgYSBiaW5hcnkgd2hpY2ggaGFuZGxlcyB0aW1lIGRpZmZlcmVudGx5IGFuZCB3b3JrcyBiZXR0ZXIgb24gYSBzeXN0ZW0gd2l0aG91dCBhIAorICAgc3RhYmxlIFJUQyAoaXQgdXNlcyB1cHRpbWUsIG5vdCBlcG9jaCB0aW1lKSBhbmQgd3JpdGVzIHRoZSBESENQIGxlYXNlcyBmaWxlIGxlc3Mgb2Z0ZW4gdG8gYXZvaWQgZmxhc2ggd2Vhci4gCisqLworCisvKiAjZGVmaW5lIEhBVkVfQlJPS0VOX1JUQyAqLworCisvKiBUaGUgZGVmYXVsdCBzZXQgb2Ygb3B0aW9ucyB0byBidWlsZC4gQnVpbHQgd2l0aCB0aGVzZSBvcHRpb25zLCBkbnNtYXNxCisgICBoYXMgbm8gbGlicmFyeSBkZXBlbmRlbmNpZXMgb3RoZXIgdGhhbiBsaWJjICovCisKKyNkZWZpbmUgSEFWRV9ESENQCisjZGVmaW5lIEhBVkVfREhDUDYgCisjZGVmaW5lIEhBVkVfVEZUUAorI2RlZmluZSBIQVZFX1NDUklQVAorI2RlZmluZSBIQVZFX0FVVEgKKyNkZWZpbmUgSEFWRV9JUFNFVCAKKyNkZWZpbmUgSEFWRV9MT09QCisKKy8qIEJ1aWxkIG9wdGlvbnMgd2hpY2ggcmVxdWlyZSBleHRlcm5hbCBsaWJyYXJpZXMuCisgICAKKyAgIERlZmluaW5nIEhBVkVfPG9wdD5fU1RBVElDIGFzIF93ZWxsXyBhcyBIQVZFXzxvcHQ+IHdpbGwgbGluayB0aGUgbGlicmFyeSBzdGF0aWNhbGx5LgorCisgICBZb3UgY2FuIHVzZSAibWFrZSBDT1BUUz0tREhBVkVfPG9wdD4iIGluc3RlYWQgb2YgZWRpdGluZyB0aGVzZS4KKyovCisKKy8qICNkZWZpbmUgSEFWRV9MVUFTQ1JJUFQgKi8KKy8qICNkZWZpbmUgSEFWRV9EQlVTICovCisvKiAjZGVmaW5lIEhBVkVfSUROICovCisvKiAjZGVmaW5lIEhBVkVfTElCSUROMiAqLworLyogI2RlZmluZSBIQVZFX0NPTk5UUkFDSyAqLworLyogI2RlZmluZSBIQVZFX0ROU1NFQyAqLworCisKKy8qIERlZmF1bHQgbG9jYXRpb25zIGZvciBpbXBvcnRhbnQgc3lzdGVtIGZpbGVzLiAqLworCisjaWZuZGVmIExFQVNFRklMRQorIyAgIGlmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQgKF9fT3BlbkJTRF9fKSB8fCBkZWZpbmVkKF9fRHJhZ29uRmx5X18pIHx8IGRlZmluZWQoX19OZXRCU0RfXykKKyMgICAgICBkZWZpbmUgTEVBU0VGSUxFICIvdmFyL2RiL2Ruc21hc3EubGVhc2VzIgorIyAgIGVsaWYgZGVmaW5lZChfX3N1bl9fKSB8fCBkZWZpbmVkIChfX3N1bikKKyMgICAgICBkZWZpbmUgTEVBU0VGSUxFICIvdmFyL2NhY2hlL2Ruc21hc3EubGVhc2VzIgorIyAgIGVsaWYgZGVmaW5lZChfX0FORFJPSURfXykKKyMgICAgICBkZWZpbmUgTEVBU0VGSUxFICIvZGF0YS9taXNjL2RoY3AvZG5zbWFzcS5sZWFzZXMiCisjICAgZWxzZQorIyAgICAgIGRlZmluZSBMRUFTRUZJTEUgIi92YXIvbGliL21pc2MvZG5zbWFzcS5sZWFzZXMiCisjICAgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIENPTkZGSUxFCisjICAgaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyMgICAgICBkZWZpbmUgQ09ORkZJTEUgIi91c3IvbG9jYWwvZXRjL2Ruc21hc3EuY29uZiIKKyMgICBlbHNlCisjICAgICAgZGVmaW5lIENPTkZGSUxFICIvZXRjL2Ruc21hc3EuY29uZiIKKyMgICBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgUkVTT0xWRklMRQorIyAgIGlmIGRlZmluZWQoX191Q2xpbnV4X18pCisjICAgICAgZGVmaW5lIFJFU09MVkZJTEUgIi9ldGMvY29uZmlnL3Jlc29sdi5jb25mIgorIyAgIGVsc2UKKyMgICAgICBkZWZpbmUgUkVTT0xWRklMRSAiL2V0Yy9yZXNvbHYuY29uZiIKKyMgICBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgUlVORklMRQorIyAgIGlmIGRlZmluZWQoX19BTkRST0lEX18pCisjICAgICAgZGVmaW5lIFJVTkZJTEUgIi9kYXRhL2Ruc21hc3EucGlkIgorIyAgICBlbHNlCisjICAgICAgZGVmaW5lIFJVTkZJTEUgIi92YXIvcnVuL2Ruc21hc3EucGlkIgorIyAgICBlbmRpZgorI2VuZGlmCisKKy8qIHBsYXRmb3JtIGRlcGVuZGVudCBvcHRpb25zOiB0aGVzZSBhcmUgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5IGJlbG93CisKK0hBVkVfTElOVVhfTkVUV09SSworSEFWRV9CU0RfTkVUV09SSworSEFWRV9TT0xBUklTX05FVFdPUksKKyAgIGRlZmluZSBleGFjdGx5IG9uZSBvZiB0aGVzZSB0byBhbHRlciBpbnRlcmFjdGlvbiB3aXRoIGtlcm5lbCBuZXR3b3JraW5nLgorCitIQVZFX0dFVE9QVF9MT05HCisgICBkZWZpbmVkIHdoZW4gR05VLXN0eWxlIGdldG9wdF9sb25nIGF2YWlsYWJsZS4gCisKK0hBVkVfU09DS0FERFJfU0FfTEVOCisgICBkZWZpbmVkIGlmIHN0cnVjdCBzb2NrYWRkciBoYXMgc2FfbGVuIGZpZWxkICgqQlNEKSAKKyovCisKKy8qIE11c3QgcHJlY2VkZSBfX2xpbnV4X18gc2luY2UgdUNsaW51eCBkZWZpbmVzIF9fbGludXhfXyB0b28uICovCisjaWYgZGVmaW5lZChfX3VDbGludXhfXykKKyNkZWZpbmUgSEFWRV9MSU5VWF9ORVRXT1JLCisjZGVmaW5lIEhBVkVfR0VUT1BUX0xPTkcKKyN1bmRlZiBIQVZFX1NPQ0tBRERSX1NBX0xFTgorLyogTmV2ZXIgdXNlIGZvcmsoKSBvbiB1Q2xpbnV4LiBOb3RlIHRoYXQgdGhpcyBpcyBzdWJ0bHkgZGlmZmVyZW50IGZyb20gdGhlCisgICAtLWtlZXAtaW4tZm9yZWdyb3VuZCBvcHRpb24sIHNpbmNlIGl0IGFsc28gIHN1cHByZXNzZXMgZm9ya2luZyBuZXcgCisgICBwcm9jZXNzZXMgZm9yIFRDUCBjb25uZWN0aW9ucyBhbmQgZGlzYWJsZXMgdGhlIGNhbGwtYS1zY3JpcHQgb24gbGVhc2VjaGFuZ2UKKyAgIHN5c3RlbS4gSXQncyBpbnRlbmRlZCBmb3IgdXNlIG9uIE1NVS1sZXNzIGtlcm5lbHMuICovCisjZGVmaW5lIE5PX0ZPUksKKworI2VsaWYgZGVmaW5lZChfX1VDTElCQ19fKQorI2RlZmluZSBIQVZFX0xJTlVYX05FVFdPUksKKyNpZiBkZWZpbmVkKF9fVUNMSUJDX0hBU19HTlVfR0VUT1BUX18pIHx8IFwKKyAgICgoX19VQ0xJQkNfTUFKT1JfXz09MCkgJiYgKF9fVUNMSUJDX01JTk9SX189PTkpICYmIChfX1VDTElCQ19TVUJMRVZFTF9fPDIxKSkKKyMgICAgZGVmaW5lIEhBVkVfR0VUT1BUX0xPTkcKKyNlbmRpZgorI3VuZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisjaWYgIWRlZmluZWQoX19BUkNIX0hBU19NTVVfXykgJiYgIWRlZmluZWQoX19VQ0xJQkNfSEFTX01NVV9fKQorIyAgZGVmaW5lIE5PX0ZPUksKKyNlbmRpZgorI2lmIGRlZmluZWQoX19VQ0xJQkNfSEFTX0lQVjZfXykKKyMgIGlmbmRlZiBJUFY2X1Y2T05MWQorIyAgICBkZWZpbmUgSVBWNl9WNk9OTFkgMjYKKyMgIGVuZGlmCisjZW5kaWYKKworLyogVGhpcyBpcyBmb3IgZ2xpYmMgMi54ICovCisjZWxpZiBkZWZpbmVkKF9fbGludXhfXykKKyNkZWZpbmUgSEFWRV9MSU5VWF9ORVRXT1JLCisjZGVmaW5lIEhBVkVfR0VUT1BUX0xPTkcKKyN1bmRlZiBIQVZFX1NPQ0tBRERSX1NBX0xFTgorCisjZWxpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBcCisgICAgICBkZWZpbmVkKF9fT3BlbkJTRF9fKSB8fCBcCisgICAgICBkZWZpbmVkKF9fRHJhZ29uRmx5X18pIHx8IFwKKyAgICAgIGRlZmluZWQoX19GcmVlQlNEX2tlcm5lbF9fKQorI2RlZmluZSBIQVZFX0JTRF9ORVRXT1JLCisvKiBMYXRlciB2ZXJzaW9ucyBvZiBGcmVlQlNEIGhhdmUgZ2V0b3B0X2xvbmcoKSAqLworI2lmIGRlZmluZWQob3B0aW9uYWxfYXJndW1lbnQpICYmIGRlZmluZWQocmVxdWlyZWRfYXJndW1lbnQpCisjICAgZGVmaW5lIEhBVkVfR0VUT1BUX0xPTkcKKyNlbmRpZgorI2RlZmluZSBIQVZFX1NPQ0tBRERSX1NBX0xFTgorCisjZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykKKyNkZWZpbmUgSEFWRV9CU0RfTkVUV09SSworI2RlZmluZSBIQVZFX0dFVE9QVF9MT05HCisjZGVmaW5lIEhBVkVfU09DS0FERFJfU0FfTEVOCisvKiBEZWZpbmUgYmVmb3JlIHN5cy9zb2NrZXQuaCBpcyBpbmNsdWRlZCBzbyB3ZSBnZXQgc29ja2xlbl90ICovCisjZGVmaW5lIF9CU0RfU09DS0xFTl9UXworLyogU2VsZWN0IHRoZSBSRkNfMzU0MiB2ZXJzaW9uIG9mIHRoZSBJUHY2IHNvY2tldCBBUEkuIAorICAgRGVmaW5lIGJlZm9yZSBuZXRpbmV0Ni9pbjYuaCBpcyBpbmNsdWRlZC4gKi8KKyNkZWZpbmUgX19BUFBMRV9VU0VfUkZDXzM1NDIgCisjZGVmaW5lIE5PX0lQU0VUCisKKyNlbGlmIGRlZmluZWQoX19OZXRCU0RfXykKKyNkZWZpbmUgSEFWRV9CU0RfTkVUV09SSworI2RlZmluZSBIQVZFX0dFVE9QVF9MT05HCisjZGVmaW5lIEhBVkVfU09DS0FERFJfU0FfTEVOCisKKyNlbGlmIGRlZmluZWQoX19zdW4pIHx8IGRlZmluZWQoX19zdW5fXykKKyNkZWZpbmUgSEFWRV9TT0xBUklTX05FVFdPUksKKyNkZWZpbmUgSEFWRV9HRVRPUFRfTE9ORworI3VuZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisjZGVmaW5lIEVUSEVSX0FERFJfTEVOIDYgCisgCisjZW5kaWYKKworLyogRGVjaWRlIGlmIHdlJ3JlIGdvaW5nIHRvIHN1cHBvcnQgSVB2NiAqLworLyogV2UgYXNzdW1lIHRoYXQgc3lzdGVtcyB3aGljaCBkb24ndCBoYXZlIElQdjYKKyAgIGhlYWRlcnMgZG9uJ3QgaGF2ZSBudG9wIGFuZCBwdG9uIGVpdGhlciAqLworCisjaWYgZGVmaW5lZChJTkVUNl9BRERSU1RSTEVOKSAmJiBkZWZpbmVkKElQVjZfVjZPTkxZKQorI2lmbmRlZiBIQVZFX0lQVjYKKyMgIGRlZmluZSBIQVZFX0lQVjYKKyNlbmRpZgorIyAgZGVmaW5lIEFERFJTVFJMRU4gSU5FVDZfQUREUlNUUkxFTgorI2Vsc2UKKyMgIGlmICFkZWZpbmVkKElORVRfQUREUlNUUkxFTikKKyMgICAgICBkZWZpbmUgSU5FVF9BRERSU1RSTEVOIDE2IC8qIDQqMyArIDMgZG90cyArIE5VTEwgKi8KKyMgIGVuZGlmCisjICB1bmRlZiBIQVZFX0lQVjYKKyMgIGRlZmluZSBBRERSU1RSTEVOIElORVRfQUREUlNUUkxFTgorI2VuZGlmCisKKworLyogcnVsZXMgdG8gaW1wbGVtZW50IGNvbXBpbGUtdGltZSBvcHRpb24gZGVwZW5kZW5jaWVzIGFuZCAKKyAgIHRoZSBOT19YWFggZmxhZ3MgKi8KKworI2lmZGVmIE5PX0lQVjYKKyN1bmRlZiBIQVZFX0lQVjYKKyNlbmRpZgorCisjaWZkZWYgTk9fVEZUUAorI3VuZGVmIEhBVkVfVEZUUAorI2VuZGlmCisKKyNpZmRlZiBOT19ESENQCisjdW5kZWYgSEFWRV9ESENQCisjdW5kZWYgSEFWRV9ESENQNgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE5PX0RIQ1A2KSB8fCAhZGVmaW5lZChIQVZFX0lQVjYpCisjdW5kZWYgSEFWRV9ESENQNgorI2VuZGlmCisKKy8qIERIQ1A2IG5lZWRzIERIQ1AgdG9vICovCisjaWZkZWYgSEFWRV9ESENQNgorI2RlZmluZSBIQVZFX0RIQ1AKKyNlbmRpZgorCisjaWYgZGVmaW5lZChOT19TQ1JJUFQpIHx8IGRlZmluZWQoTk9fRk9SSykKKyN1bmRlZiBIQVZFX1NDUklQVAorI3VuZGVmIEhBVkVfTFVBU0NSSVBUCisjZW5kaWYKKworLyogTXVzdCBIQVZFX1NDUklQVCB0byBIQVZFX0xVQVNDUklQVCAqLworI2lmZGVmIEhBVkVfTFVBU0NSSVBUCisjZGVmaW5lIEhBVkVfU0NSSVBUCisjZW5kaWYKKworI2lmZGVmIE5PX0FVVEgKKyN1bmRlZiBIQVZFX0FVVEgKKyNlbmRpZgorCisjaWYgZGVmaW5lZChOT19JUFNFVCkKKyN1bmRlZiBIQVZFX0lQU0VUCisjZW5kaWYKKworI2lmZGVmIE5PX0xPT1AKKyN1bmRlZiBIQVZFX0xPT1AKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoSEFWRV9MSU5VWF9ORVRXT1JLKQorI2lmZGVmIE5PX0lOT1RJRlkKKyN1bmRlZiBIQVZFX0lOT1RJRlkKKyNlbHNlCisjaWZuZGVmIEhBVkVfSU5PVElGWQorI2RlZmluZSBIQVZFX0lOT1RJRlkKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKworLyogRGVmaW5lIGEgc3RyaW5nIGluZGljYXRpbmcgd2hpY2ggb3B0aW9ucyBhcmUgaW4gdXNlLgorICAgRE5TTUFTUV9DT01QSUxFX09QVFMgaXMgb25seSBkZWZpbmVkIGluIGRuc21hc3EuYyAqLworCisjaWZkZWYgRE5TTUFTUV9DT01QSUxFX09QVFMKKworc3RhdGljIGNoYXIgKmNvbXBpbGVfb3B0cyA9IAorI2lmbmRlZiBIQVZFX0lQVjYKKyJuby0iCisjZW5kaWYKKyJJUHY2ICIKKyNpZm5kZWYgSEFWRV9HRVRPUFRfTE9ORworIm5vLSIKKyNlbmRpZgorIkdOVS1nZXRvcHQgIgorI2lmZGVmIEhBVkVfQlJPS0VOX1JUQworIm5vLVJUQyAiCisjZW5kaWYKKyNpZmRlZiBOT19GT1JLCisibm8tTU1VICIKKyNlbmRpZgorI2lmbmRlZiBIQVZFX0RCVVMKKyJuby0iCisjZW5kaWYKKyJEQnVzICIKKyNpZm5kZWYgTE9DQUxFRElSCisibm8tIgorI2VuZGlmCisiaTE4biAiCisjaWYgZGVmaW5lZChIQVZFX0xJQklETjIpCisiSUROMiAiCisjZWxzZQorICNpZiAhZGVmaW5lZChIQVZFX0lETikKKyJuby0iCisgI2VuZGlmIAorIklETiAiIAorI2VuZGlmCisjaWZuZGVmIEhBVkVfREhDUAorIm5vLSIKKyNlbmRpZgorIkRIQ1AgIgorI2lmIGRlZmluZWQoSEFWRV9ESENQKQorIyAgaWYgIWRlZmluZWQgKEhBVkVfREhDUDYpCisgICAgICJuby0iCisjICBlbmRpZiAgCisgICAgICJESENQdjYgIgorI2VuZGlmCisjaWYgIWRlZmluZWQoSEFWRV9TQ1JJUFQpCisgICAgICJuby1zY3JpcHRzICIKKyNlbHNlCisjICBpZiAhZGVmaW5lZChIQVZFX0xVQVNDUklQVCkKKyAgICAgIm5vLSIKKyMgIGVuZGlmCisgICAgICJMdWEgIgorI2VuZGlmCisjaWZuZGVmIEhBVkVfVEZUUAorIm5vLSIKKyNlbmRpZgorIlRGVFAgIgorI2lmbmRlZiBIQVZFX0NPTk5UUkFDSworIm5vLSIKKyNlbmRpZgorImNvbm50cmFjayAiCisjaWZuZGVmIEhBVkVfSVBTRVQKKyJuby0iCisjZW5kaWYKKyJpcHNldCAiCisjaWZuZGVmIEhBVkVfQVVUSAorIm5vLSIKKyNlbmRpZgorImF1dGggIgorI2lmbmRlZiBIQVZFX0ROU1NFQworIm5vLSIKKyNlbmRpZgorIkROU1NFQyAiCisjaWZkZWYgTk9fSUQKKyJuby1JRCAiCisjZW5kaWYKKyNpZm5kZWYgSEFWRV9MT09QCisibm8tIgorI2VuZGlmCisibG9vcC1kZXRlY3QgIgorI2lmbmRlZiBIQVZFX0lOT1RJRlkKKyJuby0iCisjZW5kaWYKKyJpbm90aWZ5IjsKKworCisjZW5kaWYKKworCisKZGlmZiAtLWdpdCBhL3NyYy9jb25udHJhY2suYyBiL3NyYy9jb25udHJhY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWE0ZTI4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Nvbm50cmFjay5jCkBAIC0wLDAgKzEsOTAgQEAKKy8qIGRuc21hc3EgaXMgQ29weXJpZ2h0IChjKSAyMDAwLTIwMTcgU2ltb24gS2VsbGV5CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIGRhdGVkIEp1bmUsIDE5OTEsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIHZlcnNpb24gMyBkYXRlZCAyOSBKdW5lLCAyMDA3LgorIAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisqLworCisjaW5jbHVkZSAiZG5zbWFzcS5oIgorCisjaWZkZWYgSEFWRV9DT05OVFJBQ0sKKworI2luY2x1ZGUgPGxpYm5ldGZpbHRlcl9jb25udHJhY2svbGlibmV0ZmlsdGVyX2Nvbm50cmFjay5oPgorCitzdGF0aWMgaW50IGdvdGl0ID0gMDsgLyogeXVjayAqLworCitzdGF0aWMgaW50IGNhbGxiYWNrKGVudW0gbmZfY29ubnRyYWNrX21zZ190eXBlIHR5cGUsIHN0cnVjdCBuZl9jb25udHJhY2sgKmN0LCB2b2lkICpkYXRhKTsKKworaW50IGdldF9pbmNvbWluZ19tYXJrKHVuaW9uIG15c29ja2FkZHIgKnBlZXJfYWRkciwgc3RydWN0IGFsbF9hZGRyICpsb2NhbF9hZGRyLCBpbnQgaXN0Y3AsIHVuc2lnbmVkIGludCAqbWFya3ApCit7CisgIHN0cnVjdCBuZl9jb25udHJhY2sgKmN0OworICBzdHJ1Y3QgbmZjdF9oYW5kbGUgKmg7CisgIAorICBnb3RpdCA9IDA7CisgIAorICBpZiAoKGN0ID0gbmZjdF9uZXcoKSkpIAorICAgIHsKKyAgICAgIG5mY3Rfc2V0X2F0dHJfdTgoY3QsIEFUVFJfTDRQUk9UTywgaXN0Y3AgPyBJUFBST1RPX1RDUCA6IElQUFJPVE9fVURQKTsKKyAgICAgIG5mY3Rfc2V0X2F0dHJfdTE2KGN0LCBBVFRSX1BPUlRfRFNULCBodG9ucyhkYWVtb24tPnBvcnQpKTsKKyAgICAgIAorI2lmZGVmIEhBVkVfSVBWNgorICAgICAgaWYgKHBlZXJfYWRkci0+c2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KQorCXsKKwkgIG5mY3Rfc2V0X2F0dHJfdTgoY3QsIEFUVFJfTDNQUk9UTywgQUZfSU5FVDYpOworCSAgbmZjdF9zZXRfYXR0cihjdCwgQVRUUl9JUFY2X1NSQywgcGVlcl9hZGRyLT5pbjYuc2luNl9hZGRyLnM2X2FkZHIpOworCSAgbmZjdF9zZXRfYXR0cl91MTYoY3QsIEFUVFJfUE9SVF9TUkMsIHBlZXJfYWRkci0+aW42LnNpbjZfcG9ydCk7CisJICBuZmN0X3NldF9hdHRyKGN0LCBBVFRSX0lQVjZfRFNULCBsb2NhbF9hZGRyLT5hZGRyLmFkZHI2LnM2X2FkZHIpOworCX0KKyAgICAgIGVsc2UKKyNlbmRpZgorCXsKKwkgIG5mY3Rfc2V0X2F0dHJfdTgoY3QsIEFUVFJfTDNQUk9UTywgQUZfSU5FVCk7CisJICBuZmN0X3NldF9hdHRyX3UzMihjdCwgQVRUUl9JUFY0X1NSQywgcGVlcl9hZGRyLT5pbi5zaW5fYWRkci5zX2FkZHIpOworCSAgbmZjdF9zZXRfYXR0cl91MTYoY3QsIEFUVFJfUE9SVF9TUkMsIHBlZXJfYWRkci0+aW4uc2luX3BvcnQpOworCSAgbmZjdF9zZXRfYXR0cl91MzIoY3QsIEFUVFJfSVBWNF9EU1QsIGxvY2FsX2FkZHItPmFkZHIuYWRkcjQuc19hZGRyKTsKKwl9CisgICAgICAKKyAgICAgIAorICAgICAgaWYgKChoID0gbmZjdF9vcGVuKENPTk5UUkFDSywgMCkpKSAKKwl7CisJICBuZmN0X2NhbGxiYWNrX3JlZ2lzdGVyKGgsIE5GQ1RfVF9BTEwsIGNhbGxiYWNrLCAodm9pZCAqKW1hcmtwKTsgIAorCSAgaWYgKG5mY3RfcXVlcnkoaCwgTkZDVF9RX0dFVCwgY3QpID09IC0xKQorCSAgICB7CisJICAgICAgc3RhdGljIGludCB3YXJuZWQgPSAwOworCSAgICAgIGlmICghd2FybmVkKQorCQl7CisJCSAgbXlfc3lzbG9nKExPR19FUlIsIF8oIkNvbm50cmFjayBjb25uZWN0aW9uIG1hcmsgcmV0cmlldmFsIGZhaWxlZDogJXMiKSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJICB3YXJuZWQgPSAxOworCQl9CisJICAgIH0KKwkgIG5mY3RfY2xvc2UoaCk7ICAKKwl9CisgICAgICBuZmN0X2Rlc3Ryb3koY3QpOworICAgIH0KKworICByZXR1cm4gZ290aXQ7Cit9CisKK3N0YXRpYyBpbnQgY2FsbGJhY2soZW51bSBuZl9jb25udHJhY2tfbXNnX3R5cGUgdHlwZSwgc3RydWN0IG5mX2Nvbm50cmFjayAqY3QsIHZvaWQgKmRhdGEpCit7CisgIHVuc2lnbmVkIGludCAqcmV0ID0gKHVuc2lnbmVkIGludCAqKWRhdGE7CisgICpyZXQgPSBuZmN0X2dldF9hdHRyX3UzMihjdCwgQVRUUl9NQVJLKTsKKyAgKHZvaWQpdHlwZTsgLyogZWxpbWluYXRlIHdhcm5pbmcgKi8KKyAgZ290aXQgPSAxOworCisgIHJldHVybiBORkNUX0NCX0NPTlRJTlVFOworfQorCisjZW5kaWYKKyAgCisKKwpkaWZmIC0tZ2l0IGEvc3JjL2RidXMuYyBiL3NyYy9kYnVzLmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWJkNjhhZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9kYnVzLmMKQEAgLTAsMCArMSw4NTcgQEAKKy8qIGRuc21hc3EgaXMgQ29weXJpZ2h0IChjKSAyMDAwLTIwMTcgU2ltb24gS2VsbGV5CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIGRhdGVkIEp1bmUsIDE5OTEsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIHZlcnNpb24gMyBkYXRlZCAyOSBKdW5lLCAyMDA3LgorIAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisqLworCisjaW5jbHVkZSAiZG5zbWFzcS5oIgorCisjaWZkZWYgSEFWRV9EQlVTCisKKyNpbmNsdWRlIDxkYnVzL2RidXMuaD4KKworY29uc3QgY2hhciogaW50cm9zcGVjdGlvbl94bWxfdGVtcGxhdGUgPQorIjwhRE9DVFlQRSBub2RlIFBVQkxJQyBcIi0vL2ZyZWVkZXNrdG9wLy9EVEQgRC1CVVMgT2JqZWN0IEludHJvc3BlY3Rpb24gMS4wLy9FTlwiXG4iCisiXCJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9zdGFuZGFyZHMvZGJ1cy8xLjAvaW50cm9zcGVjdC5kdGRcIj5cbiIKKyI8bm9kZSBuYW1lPVwiIiBETlNNQVNRX1BBVEggIlwiPlxuIgorIiAgPGludGVyZmFjZSBuYW1lPVwib3JnLmZyZWVkZXNrdG9wLkRCdXMuSW50cm9zcGVjdGFibGVcIj5cbiIKKyIgICAgPG1ldGhvZCBuYW1lPVwiSW50cm9zcGVjdFwiPlxuIgorIiAgICAgIDxhcmcgbmFtZT1cImRhdGFcIiBkaXJlY3Rpb249XCJvdXRcIiB0eXBlPVwic1wiLz5cbiIKKyIgICAgPC9tZXRob2Q+XG4iCisiICA8L2ludGVyZmFjZT5cbiIKKyIgIDxpbnRlcmZhY2UgbmFtZT1cIiVzXCI+XG4iCisiICAgIDxtZXRob2QgbmFtZT1cIkNsZWFyQ2FjaGVcIj5cbiIKKyIgICAgPC9tZXRob2Q+XG4iCisiICAgIDxtZXRob2QgbmFtZT1cIkdldFZlcnNpb25cIj5cbiIKKyIgICAgICA8YXJnIG5hbWU9XCJ2ZXJzaW9uXCIgZGlyZWN0aW9uPVwib3V0XCIgdHlwZT1cInNcIi8+XG4iCisiICAgIDwvbWV0aG9kPlxuIgorI2lmZGVmIEhBVkVfTE9PUAorIiAgICA8bWV0aG9kIG5hbWU9XCJHZXRMb29wU2VydmVyc1wiPlxuIgorIiAgICAgIDxhcmcgbmFtZT1cInNlcnZlclwiIGRpcmVjdGlvbj1cIm91dFwiIHR5cGU9XCJhc1wiLz5cbiIKKyIgICAgPC9tZXRob2Q+XG4iCisjZW5kaWYKKyIgICAgPG1ldGhvZCBuYW1lPVwiU2V0U2VydmVyc1wiPlxuIgorIiAgICAgIDxhcmcgbmFtZT1cInNlcnZlcnNcIiBkaXJlY3Rpb249XCJpblwiIHR5cGU9XCJhdlwiLz5cbiIKKyIgICAgPC9tZXRob2Q+XG4iCisiICAgIDxtZXRob2QgbmFtZT1cIlNldERvbWFpblNlcnZlcnNcIj5cbiIKKyIgICAgICA8YXJnIG5hbWU9XCJzZXJ2ZXJzXCIgZGlyZWN0aW9uPVwiaW5cIiB0eXBlPVwiYXNcIi8+XG4iCisiICAgIDwvbWV0aG9kPlxuIgorIiAgICA8bWV0aG9kIG5hbWU9XCJTZXRTZXJ2ZXJzRXhcIj5cbiIKKyIgICAgICA8YXJnIG5hbWU9XCJzZXJ2ZXJzXCIgZGlyZWN0aW9uPVwiaW5cIiB0eXBlPVwiYWFzXCIvPlxuIgorIiAgICA8L21ldGhvZD5cbiIKKyIgICAgPG1ldGhvZCBuYW1lPVwiU2V0RmlsdGVyV2luMktPcHRpb25cIj5cbiIKKyIgICAgICA8YXJnIG5hbWU9XCJmaWx0ZXJ3aW4ya1wiIGRpcmVjdGlvbj1cImluXCIgdHlwZT1cImJcIi8+XG4iCisiICAgIDwvbWV0aG9kPlxuIgorIiAgICA8bWV0aG9kIG5hbWU9XCJTZXRCb2d1c1ByaXZPcHRpb25cIj5cbiIKKyIgICAgICA8YXJnIG5hbWU9XCJib2d1c3ByaXZcIiBkaXJlY3Rpb249XCJpblwiIHR5cGU9XCJiXCIvPlxuIgorIiAgICA8L21ldGhvZD5cbiIKKyIgICAgPHNpZ25hbCBuYW1lPVwiRGhjcExlYXNlQWRkZWRcIj5cbiIKKyIgICAgICA8YXJnIG5hbWU9XCJpcGFkZHJcIiB0eXBlPVwic1wiLz5cbiIKKyIgICAgICA8YXJnIG5hbWU9XCJod2FkZHJcIiB0eXBlPVwic1wiLz5cbiIKKyIgICAgICA8YXJnIG5hbWU9XCJob3N0bmFtZVwiIHR5cGU9XCJzXCIvPlxuIgorIiAgICA8L3NpZ25hbD5cbiIKKyIgICAgPHNpZ25hbCBuYW1lPVwiRGhjcExlYXNlRGVsZXRlZFwiPlxuIgorIiAgICAgIDxhcmcgbmFtZT1cImlwYWRkclwiIHR5cGU9XCJzXCIvPlxuIgorIiAgICAgIDxhcmcgbmFtZT1cImh3YWRkclwiIHR5cGU9XCJzXCIvPlxuIgorIiAgICAgIDxhcmcgbmFtZT1cImhvc3RuYW1lXCIgdHlwZT1cInNcIi8+XG4iCisiICAgIDwvc2lnbmFsPlxuIgorIiAgICA8c2lnbmFsIG5hbWU9XCJEaGNwTGVhc2VVcGRhdGVkXCI+XG4iCisiICAgICAgPGFyZyBuYW1lPVwiaXBhZGRyXCIgdHlwZT1cInNcIi8+XG4iCisiICAgICAgPGFyZyBuYW1lPVwiaHdhZGRyXCIgdHlwZT1cInNcIi8+XG4iCisiICAgICAgPGFyZyBuYW1lPVwiaG9zdG5hbWVcIiB0eXBlPVwic1wiLz5cbiIKKyIgICAgPC9zaWduYWw+XG4iCisjaWZkZWYgSEFWRV9ESENQCisiICAgIDxtZXRob2QgbmFtZT1cIkFkZERoY3BMZWFzZVwiPlxuIgorIiAgICAgICA8YXJnIG5hbWU9XCJpcGFkZHJcIiB0eXBlPVwic1wiLz5cbiIKKyIgICAgICAgPGFyZyBuYW1lPVwiaHdhZGRyXCIgdHlwZT1cInNcIi8+XG4iCisiICAgICAgIDxhcmcgbmFtZT1cImhvc3RuYW1lXCIgdHlwZT1cImF5XCIvPlxuIgorIiAgICAgICA8YXJnIG5hbWU9XCJjbGlkXCIgdHlwZT1cImF5XCIvPlxuIgorIiAgICAgICA8YXJnIG5hbWU9XCJsZWFzZV9kdXJhdGlvblwiIHR5cGU9XCJ1XCIvPlxuIgorIiAgICAgICA8YXJnIG5hbWU9XCJpYV9pZFwiIHR5cGU9XCJ1XCIvPlxuIgorIiAgICAgICA8YXJnIG5hbWU9XCJpc190ZW1wb3JhcnlcIiB0eXBlPVwiYlwiLz5cbiIKKyIgICAgPC9tZXRob2Q+XG4iCisiICAgIDxtZXRob2QgbmFtZT1cIkRlbGV0ZURoY3BMZWFzZVwiPlxuIgorIiAgICAgICA8YXJnIG5hbWU9XCJpcGFkZHJcIiB0eXBlPVwic1wiLz5cbiIKKyIgICAgICAgPGFyZyBuYW1lPVwic3VjY2Vzc1wiIHR5cGU9XCJiXCIgZGlyZWN0aW9uPVwib3V0XCIvPlxuIgorIiAgICA8L21ldGhvZD5cbiIKKyNlbmRpZgorIiAgPC9pbnRlcmZhY2U+XG4iCisiPC9ub2RlPlxuIjsKKworc3RhdGljIGNoYXIgKmludHJvc3BlY3Rpb25feG1sID0gTlVMTDsKKworc3RydWN0IHdhdGNoIHsKKyAgREJ1c1dhdGNoICp3YXRjaDsgICAgICAKKyAgc3RydWN0IHdhdGNoICpuZXh0OworfTsKKworCitzdGF0aWMgZGJ1c19ib29sX3QgYWRkX3dhdGNoKERCdXNXYXRjaCAqd2F0Y2gsIHZvaWQgKmRhdGEpCit7CisgIHN0cnVjdCB3YXRjaCAqdzsKKworICBmb3IgKHcgPSBkYWVtb24tPndhdGNoZXM7IHc7IHcgPSB3LT5uZXh0KQorICAgIGlmICh3LT53YXRjaCA9PSB3YXRjaCkKKyAgICAgIHJldHVybiBUUlVFOworCisgIGlmICghKHcgPSB3aGluZV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCB3YXRjaCkpKSkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgdy0+d2F0Y2ggPSB3YXRjaDsKKyAgdy0+bmV4dCA9IGRhZW1vbi0+d2F0Y2hlczsKKyAgZGFlbW9uLT53YXRjaGVzID0gdzsKKworICB3ID0gZGF0YTsgLyogbm8gd2FybmluZyAqLworICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX3dhdGNoKERCdXNXYXRjaCAqd2F0Y2gsIHZvaWQgKmRhdGEpCit7CisgIHN0cnVjdCB3YXRjaCAqKnVwLCAqdywgKnRtcDsgIAorICAKKyAgZm9yICh1cCA9ICYoZGFlbW9uLT53YXRjaGVzKSwgdyA9IGRhZW1vbi0+d2F0Y2hlczsgdzsgdyA9IHRtcCkKKyAgICB7CisgICAgICB0bXAgPSB3LT5uZXh0OworICAgICAgaWYgKHctPndhdGNoID09IHdhdGNoKQorCXsKKwkgICp1cCA9IHRtcDsKKwkgIGZyZWUodyk7CisJfQorICAgICAgZWxzZQorCXVwID0gJih3LT5uZXh0KTsKKyAgICB9CisKKyAgdyA9IGRhdGE7IC8qIG5vIHdhcm5pbmcgKi8KK30KKworc3RhdGljIHZvaWQgZGJ1c19yZWFkX3NlcnZlcnMoREJ1c01lc3NhZ2UgKm1lc3NhZ2UpCit7CisgIERCdXNNZXNzYWdlSXRlciBpdGVyOworICB1bmlvbiAgbXlzb2NrYWRkciBhZGRyLCBzb3VyY2VfYWRkcjsKKyAgY2hhciAqZG9tYWluOworICAKKyAgZGJ1c19tZXNzYWdlX2l0ZXJfaW5pdChtZXNzYWdlLCAmaXRlcik7CisKKyAgbWFya19zZXJ2ZXJzKFNFUlZfRlJPTV9EQlVTKTsKKyAgCisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIGludCBza2lwID0gMDsKKworICAgICAgaWYgKGRidXNfbWVzc2FnZV9pdGVyX2dldF9hcmdfdHlwZSgmaXRlcikgPT0gREJVU19UWVBFX1VJTlQzMikKKwl7CisJICB1MzIgYTsKKwkgIAorCSAgZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2Jhc2ljKCZpdGVyLCAmYSk7CisJICBkYnVzX21lc3NhZ2VfaXRlcl9uZXh0ICgmaXRlcik7CisJICAKKyNpZmRlZiBIQVZFX1NPQ0tBRERSX1NBX0xFTgorCSAgc291cmNlX2FkZHIuaW4uc2luX2xlbiA9IGFkZHIuaW4uc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlmCisJICBhZGRyLmluLnNpbl9hZGRyLnNfYWRkciA9IG50b2hsKGEpOworCSAgc291cmNlX2FkZHIuaW4uc2luX2ZhbWlseSA9IGFkZHIuaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7CisJICBhZGRyLmluLnNpbl9wb3J0ID0gaHRvbnMoTkFNRVNFUlZFUl9QT1JUKTsKKwkgIHNvdXJjZV9hZGRyLmluLnNpbl9hZGRyLnNfYWRkciA9IElOQUREUl9BTlk7CisJICBzb3VyY2VfYWRkci5pbi5zaW5fcG9ydCA9IGh0b25zKGRhZW1vbi0+cXVlcnlfcG9ydCk7CisJfQorICAgICAgZWxzZSBpZiAoZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2FyZ190eXBlKCZpdGVyKSA9PSBEQlVTX1RZUEVfQllURSkKKwl7CisJICB1bnNpZ25lZCBjaGFyIHBbc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcildOworCSAgdW5zaWduZWQgaW50IGk7CisKKwkgIHNraXAgPSAxOworCisJICBmb3IoaSA9IDA7IGkgPCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKTsgaSsrKQorCSAgICB7CisJICAgICAgZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2Jhc2ljKCZpdGVyLCAmcFtpXSk7CisJICAgICAgZGJ1c19tZXNzYWdlX2l0ZXJfbmV4dCAoJml0ZXIpOworCSAgICAgIGlmIChkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYXJnX3R5cGUoJml0ZXIpICE9IERCVVNfVFlQRV9CWVRFKQorCQl7CisJCSAgaSsrOworCQkgIGJyZWFrOworCQl9CisJICAgIH0KKworI2lmbmRlZiBIQVZFX0lQVjYKKwkgIG15X3N5c2xvZyhMT0dfV0FSTklORywgXygiYXR0ZW1wdCB0byBzZXQgYW4gSVB2NiBzZXJ2ZXIgYWRkcmVzcyB2aWEgREJ1cyAtIG5vIElQdjYgc3VwcG9ydCIpKTsKKyNlbHNlCisJICBpZiAoaSA9PSBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkKKwkgICAgeworCSAgICAgIG1lbWNweSgmYWRkci5pbjYuc2luNl9hZGRyLCBwLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7CisjaWZkZWYgSEFWRV9TT0NLQUREUl9TQV9MRU4KKyAgICAgICAgICAgICAgc291cmNlX2FkZHIuaW42LnNpbjZfbGVuID0gYWRkci5pbjYuc2luNl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisjZW5kaWYKKyAgICAgICAgICAgICAgc291cmNlX2FkZHIuaW42LnNpbjZfZmFtaWx5ID0gYWRkci5pbjYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICAgICAgICAgICAgYWRkci5pbjYuc2luNl9wb3J0ID0gaHRvbnMoTkFNRVNFUlZFUl9QT1JUKTsKKyAgICAgICAgICAgICAgc291cmNlX2FkZHIuaW42LnNpbjZfZmxvd2luZm8gPSBhZGRyLmluNi5zaW42X2Zsb3dpbmZvID0gMDsKKwkgICAgICBzb3VyY2VfYWRkci5pbjYuc2luNl9zY29wZV9pZCA9IGFkZHIuaW42LnNpbjZfc2NvcGVfaWQgPSAwOworICAgICAgICAgICAgICBzb3VyY2VfYWRkci5pbjYuc2luNl9hZGRyID0gaW42YWRkcl9hbnk7CisgICAgICAgICAgICAgIHNvdXJjZV9hZGRyLmluNi5zaW42X3BvcnQgPSBodG9ucyhkYWVtb24tPnF1ZXJ5X3BvcnQpOworCSAgICAgIHNraXAgPSAwOworCSAgICB9CisjZW5kaWYKKwl9CisgICAgICBlbHNlCisJLyogQXQgdGhlIGVuZCAqLworCWJyZWFrOworICAgICAgCisgICAgICAvKiBwcm9jZXNzIGVhY2ggZG9tYWluICovCisgICAgICBkbyB7CisJaWYgKGRidXNfbWVzc2FnZV9pdGVyX2dldF9hcmdfdHlwZSgmaXRlcikgPT0gREJVU19UWVBFX1NUUklORykKKwkgIHsKKwkgICAgZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2Jhc2ljKCZpdGVyLCAmZG9tYWluKTsKKwkgICAgZGJ1c19tZXNzYWdlX2l0ZXJfbmV4dCAoJml0ZXIpOworCSAgfQorCWVsc2UKKwkgIGRvbWFpbiA9IE5VTEw7CisJCisJaWYgKCFza2lwKQorCSAgYWRkX3VwZGF0ZV9zZXJ2ZXIoU0VSVl9GUk9NX0RCVVMsICZhZGRyLCAmc291cmNlX2FkZHIsIE5VTEwsIGRvbWFpbik7CisgICAgIAorICAgICAgfSB3aGlsZSAoZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2FyZ190eXBlKCZpdGVyKSA9PSBEQlVTX1RZUEVfU1RSSU5HKTsgCisgICAgfQorICAgCisgIC8qIHVubGluayBhbmQgZnJlZSBhbnl0aGluZyBzdGlsbCBtYXJrZWQuICovCisgIGNsZWFudXBfc2VydmVycygpOworfQorCisjaWZkZWYgSEFWRV9MT09QCitzdGF0aWMgREJ1c01lc3NhZ2UgKmRidXNfcmVwbHlfc2VydmVyX2xvb3AoREJ1c01lc3NhZ2UgKm1lc3NhZ2UpCit7CisgIERCdXNNZXNzYWdlSXRlciBhcmdzLCBhcmdzX2l0ZXI7CisgIHN0cnVjdCBzZXJ2ZXIgKnNlcnY7CisgIERCdXNNZXNzYWdlICpyZXBseSA9IGRidXNfbWVzc2FnZV9uZXdfbWV0aG9kX3JldHVybihtZXNzYWdlKTsKKyAgIAorICBkYnVzX21lc3NhZ2VfaXRlcl9pbml0X2FwcGVuZCAocmVwbHksICZhcmdzKTsKKyAgZGJ1c19tZXNzYWdlX2l0ZXJfb3Blbl9jb250YWluZXIgKCZhcmdzLCBEQlVTX1RZUEVfQVJSQVksREJVU19UWVBFX1NUUklOR19BU19TVFJJTkcsICZhcmdzX2l0ZXIpOworCisgIGZvciAoc2VydiA9IGRhZW1vbi0+c2VydmVyczsgc2Vydjsgc2VydiA9IHNlcnYtPm5leHQpCisgICAgaWYgKHNlcnYtPmZsYWdzICYgU0VSVl9MT09QKQorICAgICAgeworCXByZXR0eXByaW50X2FkZHIoJnNlcnYtPmFkZHIsIGRhZW1vbi0+YWRkcmJ1ZmYpOworCWRidXNfbWVzc2FnZV9pdGVyX2FwcGVuZF9iYXNpYyAoJmFyZ3NfaXRlciwgREJVU19UWVBFX1NUUklORywgJmRhZW1vbi0+YWRkcmJ1ZmYpOworICAgICAgfQorICAKKyAgZGJ1c19tZXNzYWdlX2l0ZXJfY2xvc2VfY29udGFpbmVyICgmYXJncywgJmFyZ3NfaXRlcik7CisKKyAgcmV0dXJuIHJlcGx5OworfQorI2VuZGlmCisKK3N0YXRpYyBEQnVzTWVzc2FnZSogZGJ1c19yZWFkX3NlcnZlcnNfZXgoREJ1c01lc3NhZ2UgKm1lc3NhZ2UsIGludCBzdHJpbmdzKQoreworICBEQnVzTWVzc2FnZUl0ZXIgaXRlciwgYXJyYXlfaXRlciwgc3RyaW5nX2l0ZXI7CisgIERCdXNNZXNzYWdlICplcnJvciA9IE5VTEw7CisgIGNvbnN0IGNoYXIgKmFkZHJfZXJyOworICBjaGFyICpkdXAgPSBOVUxMOworICAKKyAgaWYgKCFkYnVzX21lc3NhZ2VfaXRlcl9pbml0KG1lc3NhZ2UsICZpdGVyKSkKKyAgICB7CisgICAgICByZXR1cm4gZGJ1c19tZXNzYWdlX25ld19lcnJvcihtZXNzYWdlLCBEQlVTX0VSUk9SX0lOVkFMSURfQVJHUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBkYnVzIG1lc3NhZ2UgaXRlciIpOworICAgIH0KKworICAvKiBjaGVjayB0aGF0IHRoZSBtZXNzYWdlIGNvbnRhaW5zIGFuIGFycmF5IG9mIGFycmF5cyAqLworICBpZiAoKGRidXNfbWVzc2FnZV9pdGVyX2dldF9hcmdfdHlwZSgmaXRlcikgIT0gREJVU19UWVBFX0FSUkFZKSB8fAorICAgICAgKGRidXNfbWVzc2FnZV9pdGVyX2dldF9lbGVtZW50X3R5cGUoJml0ZXIpICE9IChzdHJpbmdzID8gREJVU19UWVBFX1NUUklORyA6IERCVVNfVFlQRV9BUlJBWSkpKQorICAgIHsKKyAgICAgIHJldHVybiBkYnVzX21lc3NhZ2VfbmV3X2Vycm9yKG1lc3NhZ2UsIERCVVNfRVJST1JfSU5WQUxJRF9BUkdTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5ncyA/ICJFeHBlY3RlZCBhcnJheSBvZiBzdHJpbmciIDogIkV4cGVjdGVkIGFycmF5IG9mIHN0cmluZyBhcnJheXMiKTsKKyAgICAgfQorIAorICBtYXJrX3NlcnZlcnMoU0VSVl9GUk9NX0RCVVMpOworCisgIC8qIGFycmF5X2l0ZXIgcG9pbnRzIHRvIGVhY2ggImFzIiBlbGVtZW50IGluIHRoZSBvdXRlciBhcnJheSAqLworICBkYnVzX21lc3NhZ2VfaXRlcl9yZWN1cnNlKCZpdGVyLCAmYXJyYXlfaXRlcik7CisgIHdoaWxlIChkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYXJnX3R5cGUoJmFycmF5X2l0ZXIpICE9IERCVVNfVFlQRV9JTlZBTElEKQorICAgIHsKKyAgICAgIGNvbnN0IGNoYXIgKnN0ciA9IE5VTEw7CisgICAgICB1bmlvbiAgbXlzb2NrYWRkciBhZGRyLCBzb3VyY2VfYWRkcjsKKyAgICAgIGludCBmbGFncyA9IDA7CisgICAgICBjaGFyIGludGVyZmFjZVtJRl9OQU1FU0laRV07CisgICAgICBjaGFyICpzdHJfYWRkciwgKnN0cl9kb21haW4gPSBOVUxMOworCisgICAgICBpZiAoc3RyaW5ncykKKwl7CisJICBkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYmFzaWMoJmFycmF5X2l0ZXIsICZzdHIpOworCSAgaWYgKCFzdHIgfHwgIXN0cmxlbiAoc3RyKSkKKwkgICAgeworCSAgICAgIGVycm9yID0gZGJ1c19tZXNzYWdlX25ld19lcnJvcihtZXNzYWdlLCBEQlVTX0VSUk9SX0lOVkFMSURfQVJHUywKKwkJCQkJICAgICAiRW1wdHkgc3RyaW5nIik7CisJICAgICAgYnJlYWs7CisJICAgIH0KKwkgIAorCSAgLyogZHVwIHRoZSBzdHJpbmcgYmVjYXVzZSBpdCBnZXRzIG1vZGlmaWVkIGR1cmluZyBwYXJzaW5nICovCisJICBpZiAoZHVwKQorCSAgICBmcmVlKGR1cCk7CisJICBpZiAoIShkdXAgPSBzdHJfZG9tYWluID0gd2hpbmVfbWFsbG9jKHN0cmxlbihzdHIpKzEpKSkKKwkgICAgYnJlYWs7CisJICAKKwkgIHN0cmNweShzdHJfZG9tYWluLCBzdHIpOworCisJICAvKiBwb2ludCB0byBhZGRyZXNzIHBhcnQgb2Ygb2xkIHN0cmluZyBmb3IgZXJyb3IgbWVzc2FnZSAqLworCSAgaWYgKChzdHJfYWRkciA9IHN0cnJjaHIoc3RyLCAnLycpKSkKKwkgICAgc3RyID0gc3RyX2FkZHIrMTsKKwkgIAorCSAgaWYgKChzdHJfYWRkciA9IHN0cnJjaHIoc3RyX2RvbWFpbiwgJy8nKSkpCisJICAgIHsKKwkgICAgICBpZiAoKnN0cl9kb21haW4gIT0gJy8nIHx8IHN0cl9hZGRyID09IHN0cl9kb21haW4pCisJCXsKKwkJICBlcnJvciA9IGRidXNfbWVzc2FnZV9uZXdfZXJyb3JfcHJpbnRmKG1lc3NhZ2UsCisJCQkJCQkJREJVU19FUlJPUl9JTlZBTElEX0FSR1MsCisJCQkJCQkJIk5vIGRvbWFpbiB0ZXJtaW5hdG9yICclcyciLAorCQkJCQkJCXN0cik7CisJCSAgYnJlYWs7CisJCX0KKwkgICAgICAqc3RyX2FkZHIrKyA9IDA7CisJICAgICAgc3RyX2RvbWFpbisrOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBzdHJfYWRkciA9IHN0cl9kb21haW47CisJICAgICAgc3RyX2RvbWFpbiA9IE5VTEw7CisJICAgIH0KKworCSAgCisJfQorICAgICAgZWxzZQorCXsKKwkgIC8qIGNoZWNrIHRoZSB0eXBlcyBvZiB0aGUgc3RydWN0IGFuZCBpdHMgZWxlbWVudHMgKi8KKwkgIGlmICgoZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2FyZ190eXBlKCZhcnJheV9pdGVyKSAhPSBEQlVTX1RZUEVfQVJSQVkpIHx8CisJICAgICAgKGRidXNfbWVzc2FnZV9pdGVyX2dldF9lbGVtZW50X3R5cGUoJmFycmF5X2l0ZXIpICE9IERCVVNfVFlQRV9TVFJJTkcpKQorCSAgICB7CisJICAgICAgZXJyb3IgPSBkYnVzX21lc3NhZ2VfbmV3X2Vycm9yKG1lc3NhZ2UsIERCVVNfRVJST1JfSU5WQUxJRF9BUkdTLAorCQkJCQkgICAgICJFeHBlY3RlZCBpbm5lciBhcnJheSBvZiBzdHJpbmdzIik7CisJICAgICAgYnJlYWs7CisJICAgIH0KKwkgIAorCSAgLyogc3RyaW5nX2l0ZXIgcG9pbnRzIHRvIGVhY2ggInMiIGVsZW1lbnQgaW4gdGhlIGlubmVyIGFycmF5ICovCisJICBkYnVzX21lc3NhZ2VfaXRlcl9yZWN1cnNlKCZhcnJheV9pdGVyLCAmc3RyaW5nX2l0ZXIpOworCSAgaWYgKGRidXNfbWVzc2FnZV9pdGVyX2dldF9hcmdfdHlwZSgmc3RyaW5nX2l0ZXIpICE9IERCVVNfVFlQRV9TVFJJTkcpCisJICAgIHsKKwkgICAgICAvKiBubyBJUCBhZGRyZXNzIGdpdmVuICovCisJICAgICAgZXJyb3IgPSBkYnVzX21lc3NhZ2VfbmV3X2Vycm9yKG1lc3NhZ2UsIERCVVNfRVJST1JfSU5WQUxJRF9BUkdTLAorCQkJCQkgICAgICJFeHBlY3RlZCBJUCBhZGRyZXNzIik7CisJICAgICAgYnJlYWs7CisJICAgIH0KKwkgIAorCSAgZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2Jhc2ljKCZzdHJpbmdfaXRlciwgJnN0cik7CisJICBpZiAoIXN0ciB8fCAhc3RybGVuIChzdHIpKQorCSAgICB7CisJICAgICAgZXJyb3IgPSBkYnVzX21lc3NhZ2VfbmV3X2Vycm9yKG1lc3NhZ2UsIERCVVNfRVJST1JfSU5WQUxJRF9BUkdTLAorCQkJCQkgICAgICJFbXB0eSBJUCBhZGRyZXNzIik7CisJICAgICAgYnJlYWs7CisJICAgIH0KKwkgIAorCSAgLyogZHVwIHRoZSBzdHJpbmcgYmVjYXVzZSBpdCBnZXRzIG1vZGlmaWVkIGR1cmluZyBwYXJzaW5nICovCisJICBpZiAoZHVwKQorCSAgICBmcmVlKGR1cCk7CisJICBpZiAoIShkdXAgPSBzdHJfYWRkciA9IHdoaW5lX21hbGxvYyhzdHJsZW4oc3RyKSsxKSkpCisJICAgIGJyZWFrOworCSAgCisJICBzdHJjcHkoc3RyX2FkZHIsIHN0cik7CisJfQorCisgICAgICBtZW1zZXQoJmFkZHIsIDAsIHNpemVvZihhZGRyKSk7CisgICAgICBtZW1zZXQoJnNvdXJjZV9hZGRyLCAwLCBzaXplb2Yoc291cmNlX2FkZHIpKTsKKyAgICAgIG1lbXNldCgmaW50ZXJmYWNlLCAwLCBzaXplb2YoaW50ZXJmYWNlKSk7CisKKyAgICAgIC8qIHBhcnNlIHRoZSBJUCBhZGRyZXNzICovCisgICAgICBpZiAoKGFkZHJfZXJyID0gcGFyc2Vfc2VydmVyKHN0cl9hZGRyLCAmYWRkciwgJnNvdXJjZV9hZGRyLCAoY2hhciAqKSAmaW50ZXJmYWNlLCAmZmxhZ3MpKSkKKwl7CisgICAgICAgICAgZXJyb3IgPSBkYnVzX21lc3NhZ2VfbmV3X2Vycm9yX3ByaW50ZihtZXNzYWdlLCBEQlVTX0VSUk9SX0lOVkFMSURfQVJHUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIElQIGFkZHJlc3MgJyVzJzogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyLCBhZGRyX2Vycik7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIAorICAgICAgLyogMC4wLjAuMCBmb3Igc2VydmVyIGFkZHJlc3MgPT0gTlVMTCwgZm9yIERidXMgKi8KKyAgICAgIGlmIChhZGRyLmluLnNpbl9mYW1pbHkgPT0gQUZfSU5FVCAmJgorICAgICAgICAgIGFkZHIuaW4uc2luX2FkZHIuc19hZGRyID09IDApCisgICAgICAgIGZsYWdzIHw9IFNFUlZfTk9fQUREUjsKKyAgICAgIAorICAgICAgaWYgKHN0cmluZ3MpCisJeworCSAgY2hhciAqcDsKKwkgIAorCSAgZG8geworCSAgICBpZiAoc3RyX2RvbWFpbikKKwkgICAgICB7CisJCWlmICgocCA9IHN0cmNocihzdHJfZG9tYWluLCAnLycpKSkKKwkJICAqcCsrID0gMDsKKwkgICAgICB9CisJICAgIGVsc2UgCisJICAgICAgcCA9IE5VTEw7CisJICAgIAorCSAgICBhZGRfdXBkYXRlX3NlcnZlcihmbGFncyB8IFNFUlZfRlJPTV9EQlVTLCAmYWRkciwgJnNvdXJjZV9hZGRyLCBpbnRlcmZhY2UsIHN0cl9kb21haW4pOworCSAgfSB3aGlsZSAoKHN0cl9kb21haW4gPSBwKSk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIC8qIGp1bXAgcGFzdCB0aGUgYWRkcmVzcyB0byB0aGUgZG9tYWluIGxpc3QgKGlmIGFueSkgKi8KKwkgIGRidXNfbWVzc2FnZV9pdGVyX25leHQgKCZzdHJpbmdfaXRlcik7CisJICAKKwkgIC8qIHBhcnNlIGRvbWFpbnMgYW5kIGFkZCBlYWNoIHNlcnZlci9kb21haW4gcGFpciB0byB0aGUgbGlzdCAqLworCSAgZG8geworCSAgICBzdHIgPSBOVUxMOworCSAgICBpZiAoZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2FyZ190eXBlKCZzdHJpbmdfaXRlcikgPT0gREJVU19UWVBFX1NUUklORykKKwkgICAgICBkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYmFzaWMoJnN0cmluZ19pdGVyLCAmc3RyKTsKKwkgICAgZGJ1c19tZXNzYWdlX2l0ZXJfbmV4dCAoJnN0cmluZ19pdGVyKTsKKwkgICAgCisJICAgIGFkZF91cGRhdGVfc2VydmVyKGZsYWdzIHwgU0VSVl9GUk9NX0RCVVMsICZhZGRyLCAmc291cmNlX2FkZHIsIGludGVyZmFjZSwgc3RyKTsKKwkgIH0gd2hpbGUgKGRidXNfbWVzc2FnZV9pdGVyX2dldF9hcmdfdHlwZSgmc3RyaW5nX2l0ZXIpID09IERCVVNfVFlQRV9TVFJJTkcpOworCX0KKwkgCisgICAgICAvKiBqdW1wIHRvIG5leHQgZWxlbWVudCBpbiBvdXRlciBhcnJheSAqLworICAgICAgZGJ1c19tZXNzYWdlX2l0ZXJfbmV4dCgmYXJyYXlfaXRlcik7CisgICAgfQorCisgIGNsZWFudXBfc2VydmVycygpOworCisgIGlmIChkdXApCisgICAgZnJlZShkdXApOworCisgIHJldHVybiBlcnJvcjsKK30KKworc3RhdGljIERCdXNNZXNzYWdlICpkYnVzX3NldF9ib29sKERCdXNNZXNzYWdlICptZXNzYWdlLCBpbnQgZmxhZywgY2hhciAqbmFtZSkKK3sKKyAgREJ1c01lc3NhZ2VJdGVyIGl0ZXI7CisgIGRidXNfYm9vbF90IGVuYWJsZWQ7CisKKyAgaWYgKCFkYnVzX21lc3NhZ2VfaXRlcl9pbml0KG1lc3NhZ2UsICZpdGVyKSB8fCBkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYXJnX3R5cGUoJml0ZXIpICE9IERCVVNfVFlQRV9CT09MRUFOKQorICAgIHJldHVybiBkYnVzX21lc3NhZ2VfbmV3X2Vycm9yKG1lc3NhZ2UsIERCVVNfRVJST1JfSU5WQUxJRF9BUkdTLCAiRXhwZWN0ZWQgYm9vbGVhbiBhcmd1bWVudCIpOworICAKKyAgZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2Jhc2ljKCZpdGVyLCAmZW5hYmxlZCk7CisKKyAgaWYgKGVuYWJsZWQpCisgICAgeyAKKyAgICAgIG15X3N5c2xvZyhMT0dfSU5GTywgXygiRW5hYmxpbmcgLS0lcyBvcHRpb24gZnJvbSBELUJ1cyIpLCBuYW1lKTsKKyAgICAgIHNldF9vcHRpb25fYm9vbChmbGFnKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBteV9zeXNsb2coTE9HX0lORk8sIF8oIkRpc2FibGluZyAtLSVzIG9wdGlvbiBmcm9tIEQtQnVzIiksIG5hbWUpOworICAgICAgcmVzZXRfb3B0aW9uX2Jvb2woZmxhZyk7CisgICAgfQorCisgIHJldHVybiBOVUxMOworfQorCisjaWZkZWYgSEFWRV9ESENQCitzdGF0aWMgREJ1c01lc3NhZ2UgKmRidXNfYWRkX2xlYXNlKERCdXNNZXNzYWdlKiBtZXNzYWdlKQoreworICBzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2U7CisgIGNvbnN0IGNoYXIgKmlwYWRkciwgKmh3YWRkciwgKmhvc3RuYW1lLCAqdG1wOworICBjb25zdCB1bnNpZ25lZCBjaGFyKiBjbGlkOworICBpbnQgY2xpZF9sZW4sIGhvc3RuYW1lX2xlbiwgaHdfbGVuLCBod190eXBlOworICBkYnVzX3VpbnQzMl90IGV4cGlyZXMsIGlhX2lkOworICBkYnVzX2Jvb2xfdCBpc190ZW1wb3Jhcnk7CisgIHN0cnVjdCBhbGxfYWRkciBhZGRyOworICB0aW1lX3Qgbm93ID0gZG5zbWFzcV90aW1lKCk7CisgIHVuc2lnbmVkIGNoYXIgZGhjcF9jaGFkZHJbREhDUF9DSEFERFJfTUFYXTsKKworICBEQnVzTWVzc2FnZUl0ZXIgaXRlciwgYXJyYXlfaXRlcjsKKyAgaWYgKCFkYnVzX21lc3NhZ2VfaXRlcl9pbml0KG1lc3NhZ2UsICZpdGVyKSkKKyAgICByZXR1cm4gZGJ1c19tZXNzYWdlX25ld19lcnJvcihtZXNzYWdlLCBEQlVTX0VSUk9SX0lOVkFMSURfQVJHUywKKwkJCQkgICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBkYnVzIG1lc3NhZ2UgaXRlciIpOworCisgIGlmIChkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYXJnX3R5cGUoJml0ZXIpICE9IERCVVNfVFlQRV9TVFJJTkcpCisgICAgcmV0dXJuIGRidXNfbWVzc2FnZV9uZXdfZXJyb3IobWVzc2FnZSwgREJVU19FUlJPUl9JTlZBTElEX0FSR1MsCisJCQkJICAiRXhwZWN0ZWQgc3RyaW5nIGFzIGZpcnN0IGFyZ3VtZW50Iik7CisKKyAgZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2Jhc2ljKCZpdGVyLCAmaXBhZGRyKTsKKyAgZGJ1c19tZXNzYWdlX2l0ZXJfbmV4dCgmaXRlcik7CisKKyAgaWYgKGRidXNfbWVzc2FnZV9pdGVyX2dldF9hcmdfdHlwZSgmaXRlcikgIT0gREJVU19UWVBFX1NUUklORykKKyAgICByZXR1cm4gZGJ1c19tZXNzYWdlX25ld19lcnJvcihtZXNzYWdlLCBEQlVTX0VSUk9SX0lOVkFMSURfQVJHUywKKwkJCQkgICJFeHBlY3RlZCBzdHJpbmcgYXMgc2Vjb25kIGFyZ3VtZW50Iik7CisgICAgCisgIGRidXNfbWVzc2FnZV9pdGVyX2dldF9iYXNpYygmaXRlciwgJmh3YWRkcik7CisgIGRidXNfbWVzc2FnZV9pdGVyX25leHQoJml0ZXIpOworCisgIGlmICgoZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2FyZ190eXBlKCZpdGVyKSAhPSBEQlVTX1RZUEVfQVJSQVkpIHx8CisgICAgICAoZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2VsZW1lbnRfdHlwZSgmaXRlcikgIT0gREJVU19UWVBFX0JZVEUpKQorICAgIHJldHVybiBkYnVzX21lc3NhZ2VfbmV3X2Vycm9yKG1lc3NhZ2UsIERCVVNfRVJST1JfSU5WQUxJRF9BUkdTLAorCQkJCSAgIkV4cGVjdGVkIGJ5dGUgYXJyYXkgYXMgdGhpcmQgYXJndW1lbnQiKTsKKyAgICAKKyAgZGJ1c19tZXNzYWdlX2l0ZXJfcmVjdXJzZSgmaXRlciwgJmFycmF5X2l0ZXIpOworICBkYnVzX21lc3NhZ2VfaXRlcl9nZXRfZml4ZWRfYXJyYXkoJmFycmF5X2l0ZXIsICZob3N0bmFtZSwgJmhvc3RuYW1lX2xlbik7CisgIHRtcCA9IG1lbWNocihob3N0bmFtZSwgJ1wwJywgaG9zdG5hbWVfbGVuKTsKKyAgaWYgKHRtcCkKKyAgICB7CisgICAgICBpZiAodG1wID09ICZob3N0bmFtZVtob3N0bmFtZV9sZW4gLSAxXSkKKwlob3N0bmFtZV9sZW4tLTsKKyAgICAgIGVsc2UKKwlyZXR1cm4gZGJ1c19tZXNzYWdlX25ld19lcnJvcihtZXNzYWdlLCBEQlVTX0VSUk9SX0lOVkFMSURfQVJHUywKKwkJCQkgICAgICAiSG9zdG5hbWUgY29udGFpbnMgYW4gZW1iZWRkZWQgTlVMIGNoYXJhY3RlciIpOworICAgIH0KKyAgZGJ1c19tZXNzYWdlX2l0ZXJfbmV4dCgmaXRlcik7CisKKyAgaWYgKChkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYXJnX3R5cGUoJml0ZXIpICE9IERCVVNfVFlQRV9BUlJBWSkgfHwKKyAgICAgIChkYnVzX21lc3NhZ2VfaXRlcl9nZXRfZWxlbWVudF90eXBlKCZpdGVyKSAhPSBEQlVTX1RZUEVfQllURSkpCisgICAgcmV0dXJuIGRidXNfbWVzc2FnZV9uZXdfZXJyb3IobWVzc2FnZSwgREJVU19FUlJPUl9JTlZBTElEX0FSR1MsCisJCQkJICAiRXhwZWN0ZWQgYnl0ZSBhcnJheSBhcyBmb3VydGggYXJndW1lbnQiKTsKKworICBkYnVzX21lc3NhZ2VfaXRlcl9yZWN1cnNlKCZpdGVyLCAmYXJyYXlfaXRlcik7CisgIGRidXNfbWVzc2FnZV9pdGVyX2dldF9maXhlZF9hcnJheSgmYXJyYXlfaXRlciwgJmNsaWQsICZjbGlkX2xlbik7CisgIGRidXNfbWVzc2FnZV9pdGVyX25leHQoJml0ZXIpOworCisgIGlmIChkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYXJnX3R5cGUoJml0ZXIpICE9IERCVVNfVFlQRV9VSU5UMzIpCisgICAgcmV0dXJuIGRidXNfbWVzc2FnZV9uZXdfZXJyb3IobWVzc2FnZSwgREJVU19FUlJPUl9JTlZBTElEX0FSR1MsCisJCQkJICAiRXhwZWN0ZWQgdWludDMyIGFzIGZpZnRoIGFyZ3VtZW50Iik7CisgICAgCisgIGRidXNfbWVzc2FnZV9pdGVyX2dldF9iYXNpYygmaXRlciwgJmV4cGlyZXMpOworICBkYnVzX21lc3NhZ2VfaXRlcl9uZXh0KCZpdGVyKTsKKworICBpZiAoZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2FyZ190eXBlKCZpdGVyKSAhPSBEQlVTX1RZUEVfVUlOVDMyKQorICAgIHJldHVybiBkYnVzX21lc3NhZ2VfbmV3X2Vycm9yKG1lc3NhZ2UsIERCVVNfRVJST1JfSU5WQUxJRF9BUkdTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkV4cGVjdGVkIHVpbnQzMiBhcyBzaXh0aCBhcmd1bWVudCIpOworICAKKyAgZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2Jhc2ljKCZpdGVyLCAmaWFfaWQpOworICBkYnVzX21lc3NhZ2VfaXRlcl9uZXh0KCZpdGVyKTsKKworICBpZiAoZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2FyZ190eXBlKCZpdGVyKSAhPSBEQlVTX1RZUEVfQk9PTEVBTikKKyAgICByZXR1cm4gZGJ1c19tZXNzYWdlX25ld19lcnJvcihtZXNzYWdlLCBEQlVTX0VSUk9SX0lOVkFMSURfQVJHUywKKwkJCQkgICJFeHBlY3RlZCB1aW50MzIgYXMgc2l4dGggYXJndW1lbnQiKTsKKworICBkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYmFzaWMoJml0ZXIsICZpc190ZW1wb3JhcnkpOworCisgIGlmIChpbmV0X3B0b24oQUZfSU5FVCwgaXBhZGRyLCAmYWRkci5hZGRyLmFkZHI0KSkKKyAgICB7CisgICAgICBpZiAoaWFfaWQgIT0gMCB8fCBpc190ZW1wb3JhcnkpCisJcmV0dXJuIGRidXNfbWVzc2FnZV9uZXdfZXJyb3IobWVzc2FnZSwgREJVU19FUlJPUl9JTlZBTElEX0FSR1MsCisJCQkJICAgICAgImlhX2lkIGFuZCBpc190ZW1wb3JhcnkgbXVzdCBiZSB6ZXJvIGZvciBJUHY0IGxlYXNlIik7CisgICAgICAKKyAgICAgIGlmICghKGxlYXNlID0gbGVhc2VfZmluZF9ieV9hZGRyKGFkZHIuYWRkci5hZGRyNCkpKQorICAgIAlsZWFzZSA9IGxlYXNlNF9hbGxvY2F0ZShhZGRyLmFkZHIuYWRkcjQpOworICAgIH0KKyNpZmRlZiBIQVZFX0RIQ1A2CisgIGVsc2UgaWYgKGluZXRfcHRvbihBRl9JTkVUNiwgaXBhZGRyLCAmYWRkci5hZGRyLmFkZHI2KSkKKyAgICB7CisgICAgICBpZiAoIShsZWFzZSA9IGxlYXNlNl9maW5kX2J5X2FkZHIoJmFkZHIuYWRkci5hZGRyNiwgMTI4LCAwKSkpCisJbGVhc2UgPSBsZWFzZTZfYWxsb2NhdGUoJmFkZHIuYWRkci5hZGRyNiwKKwkJCQlpc190ZW1wb3JhcnkgPyBMRUFTRV9UQSA6IExFQVNFX05BKTsKKyAgICAgIGxlYXNlX3NldF9pYWlkKGxlYXNlLCBpYV9pZCk7CisgICAgfQorI2VuZGlmCisgIGVsc2UKKyAgICByZXR1cm4gZGJ1c19tZXNzYWdlX25ld19lcnJvcl9wcmludGYobWVzc2FnZSwgREJVU19FUlJPUl9JTlZBTElEX0FSR1MsCisJCQkJCSAiSW52YWxpZCBJUCBhZGRyZXNzICclcyciLCBpcGFkZHIpOworICAgCisgIGh3X2xlbiA9IHBhcnNlX2hleCgoY2hhciopaHdhZGRyLCBkaGNwX2NoYWRkciwgREhDUF9DSEFERFJfTUFYLCBOVUxMLCAmaHdfdHlwZSk7CisgIGlmIChod190eXBlID09IDAgJiYgaHdfbGVuICE9IDApCisgICAgaHdfdHlwZSA9IEFSUEhSRF9FVEhFUjsKKyAgCisgIGxlYXNlX3NldF9od2FkZHIobGVhc2UsIGRoY3BfY2hhZGRyLCBjbGlkLCBod19sZW4sIGh3X3R5cGUsCisgICAgICAgICAgICAgICAgICAgY2xpZF9sZW4sIG5vdywgMCk7CisgIGxlYXNlX3NldF9leHBpcmVzKGxlYXNlLCBleHBpcmVzLCBub3cpOworICBpZiAoaG9zdG5hbWVfbGVuICE9IDApCisgICAgbGVhc2Vfc2V0X2hvc3RuYW1lKGxlYXNlLCBob3N0bmFtZSwgMCwgZ2V0X2RvbWFpbihsZWFzZS0+YWRkciksIE5VTEwpOworICAKKyAgbGVhc2VfdXBkYXRlX2ZpbGUobm93KTsKKyAgbGVhc2VfdXBkYXRlX2RucygwKTsKKworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIERCdXNNZXNzYWdlICpkYnVzX2RlbF9sZWFzZShEQnVzTWVzc2FnZSogbWVzc2FnZSkKK3sKKyAgc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlOworICBEQnVzTWVzc2FnZUl0ZXIgaXRlcjsKKyAgY29uc3QgY2hhciAqaXBhZGRyOworICBEQnVzTWVzc2FnZSAqcmVwbHk7CisgIHN0cnVjdCBhbGxfYWRkciBhZGRyOworICBkYnVzX2Jvb2xfdCByZXQgPSAxOworICB0aW1lX3Qgbm93ID0gZG5zbWFzcV90aW1lKCk7CisKKyAgaWYgKCFkYnVzX21lc3NhZ2VfaXRlcl9pbml0KG1lc3NhZ2UsICZpdGVyKSkKKyAgICByZXR1cm4gZGJ1c19tZXNzYWdlX25ld19lcnJvcihtZXNzYWdlLCBEQlVTX0VSUk9SX0lOVkFMSURfQVJHUywKKwkJCQkgICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBkYnVzIG1lc3NhZ2UgaXRlciIpOworICAgCisgIGlmIChkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYXJnX3R5cGUoJml0ZXIpICE9IERCVVNfVFlQRV9TVFJJTkcpCisgICAgcmV0dXJuIGRidXNfbWVzc2FnZV9uZXdfZXJyb3IobWVzc2FnZSwgREJVU19FUlJPUl9JTlZBTElEX0FSR1MsCisJCQkJICAiRXhwZWN0ZWQgc3RyaW5nIGFzIGZpcnN0IGFyZ3VtZW50Iik7CisgICAKKyAgZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2Jhc2ljKCZpdGVyLCAmaXBhZGRyKTsKKworICBpZiAoaW5ldF9wdG9uKEFGX0lORVQsIGlwYWRkciwgJmFkZHIuYWRkci5hZGRyNCkpCisgICAgbGVhc2UgPSBsZWFzZV9maW5kX2J5X2FkZHIoYWRkci5hZGRyLmFkZHI0KTsKKyNpZmRlZiBIQVZFX0RIQ1A2CisgIGVsc2UgaWYgKGluZXRfcHRvbihBRl9JTkVUNiwgaXBhZGRyLCAmYWRkci5hZGRyLmFkZHI2KSkKKyAgICBsZWFzZSA9IGxlYXNlNl9maW5kX2J5X2FkZHIoJmFkZHIuYWRkci5hZGRyNiwgMTI4LCAwKTsKKyNlbmRpZgorICBlbHNlCisgICAgcmV0dXJuIGRidXNfbWVzc2FnZV9uZXdfZXJyb3JfcHJpbnRmKG1lc3NhZ2UsIERCVVNfRVJST1JfSU5WQUxJRF9BUkdTLAorCQkJCQkgIkludmFsaWQgSVAgYWRkcmVzcyAnJXMnIiwgaXBhZGRyKTsKKyAgICAKKyAgaWYgKGxlYXNlKQorICAgIHsKKyAgICAgIGxlYXNlX3BydW5lKGxlYXNlLCBub3cpOworICAgICAgbGVhc2VfdXBkYXRlX2ZpbGUobm93KTsKKyAgICAgIGxlYXNlX3VwZGF0ZV9kbnMoMCk7CisgICAgfQorICBlbHNlCisgICAgcmV0ID0gMDsKKyAgCisgIGlmICgocmVwbHkgPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9yZXR1cm4obWVzc2FnZSkpKQorICAgIGRidXNfbWVzc2FnZV9hcHBlbmRfYXJncyhyZXBseSwgREJVU19UWVBFX0JPT0xFQU4sICZyZXQsCisJCQkgICAgIERCVVNfVFlQRV9JTlZBTElEKTsKKyAgCisgICAgCisgIHJldHVybiByZXBseTsKK30KKyNlbmRpZgorCitEQnVzSGFuZGxlclJlc3VsdCBtZXNzYWdlX2hhbmRsZXIoREJ1c0Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIAorCQkJCSAgREJ1c01lc3NhZ2UgKm1lc3NhZ2UsIAorCQkJCSAgdm9pZCAqdXNlcl9kYXRhKQoreworICBjaGFyICptZXRob2QgPSAoY2hhciAqKWRidXNfbWVzc2FnZV9nZXRfbWVtYmVyKG1lc3NhZ2UpOworICBEQnVzTWVzc2FnZSAqcmVwbHkgPSBOVUxMOworICBpbnQgY2xlYXJfY2FjaGUgPSAwLCBuZXdfc2VydmVycyA9IDA7CisgICAgCisgIGlmIChkYnVzX21lc3NhZ2VfaXNfbWV0aG9kX2NhbGwobWVzc2FnZSwgREJVU19JTlRFUkZBQ0VfSU5UUk9TUEVDVEFCTEUsICJJbnRyb3NwZWN0IikpCisgICAgeworICAgICAgLyogc3RyaW5nIGxlbmd0aDogIiVzIiBwcm92aWRlcyBzcGFjZSBmb3IgdGVybWluYXRpb24gemVybyAqLworICAgICAgaWYgKCFpbnRyb3NwZWN0aW9uX3htbCAmJiAKKwkgIChpbnRyb3NwZWN0aW9uX3htbCA9IHdoaW5lX21hbGxvYyhzdHJsZW4oaW50cm9zcGVjdGlvbl94bWxfdGVtcGxhdGUpICsgc3RybGVuKGRhZW1vbi0+ZGJ1c19uYW1lKSkpKQorCXNwcmludGYoaW50cm9zcGVjdGlvbl94bWwsIGludHJvc3BlY3Rpb25feG1sX3RlbXBsYXRlLCBkYWVtb24tPmRidXNfbmFtZSk7CisgICAgCisgICAgICBpZiAoaW50cm9zcGVjdGlvbl94bWwpCisJeworCSAgcmVwbHkgPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9yZXR1cm4obWVzc2FnZSk7CisJICBkYnVzX21lc3NhZ2VfYXBwZW5kX2FyZ3MocmVwbHksIERCVVNfVFlQRV9TVFJJTkcsICZpbnRyb3NwZWN0aW9uX3htbCwgREJVU19UWVBFX0lOVkFMSUQpOworCX0KKyAgICB9CisgIGVsc2UgaWYgKHN0cmNtcChtZXRob2QsICJHZXRWZXJzaW9uIikgPT0gMCkKKyAgICB7CisgICAgICBjaGFyICp2ID0gVkVSU0lPTjsKKyAgICAgIHJlcGx5ID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfcmV0dXJuKG1lc3NhZ2UpOworICAgICAgCisgICAgICBkYnVzX21lc3NhZ2VfYXBwZW5kX2FyZ3MocmVwbHksIERCVVNfVFlQRV9TVFJJTkcsICZ2LCBEQlVTX1RZUEVfSU5WQUxJRCk7CisgICAgfQorI2lmZGVmIEhBVkVfTE9PUAorICBlbHNlIGlmIChzdHJjbXAobWV0aG9kLCAiR2V0TG9vcFNlcnZlcnMiKSA9PSAwKQorICAgIHsKKyAgICAgIHJlcGx5ID0gZGJ1c19yZXBseV9zZXJ2ZXJfbG9vcChtZXNzYWdlKTsKKyAgICB9CisjZW5kaWYKKyAgZWxzZSBpZiAoc3RyY21wKG1ldGhvZCwgIlNldFNlcnZlcnMiKSA9PSAwKQorICAgIHsKKyAgICAgIGRidXNfcmVhZF9zZXJ2ZXJzKG1lc3NhZ2UpOworICAgICAgbmV3X3NlcnZlcnMgPSAxOworICAgIH0KKyAgZWxzZSBpZiAoc3RyY21wKG1ldGhvZCwgIlNldFNlcnZlcnNFeCIpID09IDApCisgICAgeworICAgICAgcmVwbHkgPSBkYnVzX3JlYWRfc2VydmVyc19leChtZXNzYWdlLCAwKTsKKyAgICAgIG5ld19zZXJ2ZXJzID0gMTsKKyAgICB9CisgIGVsc2UgaWYgKHN0cmNtcChtZXRob2QsICJTZXREb21haW5TZXJ2ZXJzIikgPT0gMCkKKyAgICB7CisgICAgICByZXBseSA9IGRidXNfcmVhZF9zZXJ2ZXJzX2V4KG1lc3NhZ2UsIDEpOworICAgICAgbmV3X3NlcnZlcnMgPSAxOworICAgIH0KKyAgZWxzZSBpZiAoc3RyY21wKG1ldGhvZCwgIlNldEZpbHRlcldpbjJLT3B0aW9uIikgPT0gMCkKKyAgICB7CisgICAgICByZXBseSA9IGRidXNfc2V0X2Jvb2wobWVzc2FnZSwgT1BUX0ZJTFRFUiwgImZpbHRlcndpbjJrIik7CisgICAgfQorICBlbHNlIGlmIChzdHJjbXAobWV0aG9kLCAiU2V0Qm9ndXNQcml2T3B0aW9uIikgPT0gMCkKKyAgICB7CisgICAgICByZXBseSA9IGRidXNfc2V0X2Jvb2wobWVzc2FnZSwgT1BUX0JPR1VTUFJJViwgImJvZ3VzLXByaXYiKTsKKyAgICB9CisjaWZkZWYgSEFWRV9ESENQCisgIGVsc2UgaWYgKHN0cmNtcChtZXRob2QsICJBZGREaGNwTGVhc2UiKSA9PSAwKQorICAgIHsKKyAgICAgIHJlcGx5ID0gZGJ1c19hZGRfbGVhc2UobWVzc2FnZSk7CisgICAgfQorICBlbHNlIGlmIChzdHJjbXAobWV0aG9kLCAiRGVsZXRlRGhjcExlYXNlIikgPT0gMCkKKyAgICB7CisgICAgICByZXBseSA9IGRidXNfZGVsX2xlYXNlKG1lc3NhZ2UpOworICAgIH0KKyNlbmRpZgorICBlbHNlIGlmIChzdHJjbXAobWV0aG9kLCAiQ2xlYXJDYWNoZSIpID09IDApCisgICAgY2xlYXJfY2FjaGUgPSAxOworICBlbHNlCisgICAgcmV0dXJuIChEQlVTX0hBTkRMRVJfUkVTVUxUX05PVF9ZRVRfSEFORExFRCk7CisgICAKKyAgaWYgKG5ld19zZXJ2ZXJzKQorICAgIHsKKyAgICAgIG15X3N5c2xvZyhMT0dfSU5GTywgXygic2V0dGluZyB1cHN0cmVhbSBzZXJ2ZXJzIGZyb20gREJ1cyIpKTsKKyAgICAgIGNoZWNrX3NlcnZlcnMoKTsKKyAgICAgIGlmIChvcHRpb25fYm9vbChPUFRfUkVMT0FEKSkKKwljbGVhcl9jYWNoZSA9IDE7CisgICAgfQorCisgIGlmIChjbGVhcl9jYWNoZSkKKyAgICBjbGVhcl9jYWNoZV9hbmRfcmVsb2FkKGRuc21hc3FfdGltZSgpKTsKKyAgCisgIG1ldGhvZCA9IHVzZXJfZGF0YTsgLyogbm8gd2FybmluZyAqLworCisgIC8qIElmIG5vIHJlcGx5IG9yIG5vIGVycm9yLCByZXR1cm4gbm90aGluZyAqLworICBpZiAoIXJlcGx5KQorICAgIHJlcGx5ID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfcmV0dXJuKG1lc3NhZ2UpOworCisgIGlmIChyZXBseSkKKyAgICB7CisgICAgICBkYnVzX2Nvbm5lY3Rpb25fc2VuZCAoY29ubmVjdGlvbiwgcmVwbHksIE5VTEwpOworICAgICAgZGJ1c19tZXNzYWdlX3VucmVmIChyZXBseSk7CisgICAgfQorCisgIHJldHVybiAoREJVU19IQU5ETEVSX1JFU1VMVF9IQU5ETEVEKTsKK30KKyAKKworLyogcmV0dXJucyBOVUxMIG9yIGVycm9yIG1lc3NhZ2UsIG1heSBmYWlsIHNpbGVudGx5IGlmIGRidXMgZGFlbW9uIG5vdCB5ZXQgdXAuICovCitjaGFyICpkYnVzX2luaXQodm9pZCkKK3sKKyAgREJ1c0Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24gPSBOVUxMOworICBEQnVzT2JqZWN0UGF0aFZUYWJsZSBkbnNtYXNxX3Z0YWJsZSA9IHtOVUxMLCAmbWVzc2FnZV9oYW5kbGVyLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH07CisgIERCdXNFcnJvciBkYnVzX2Vycm9yOworICBEQnVzTWVzc2FnZSAqbWVzc2FnZTsKKworICBkYnVzX2Vycm9yX2luaXQgKCZkYnVzX2Vycm9yKTsKKyAgaWYgKCEoY29ubmVjdGlvbiA9IGRidXNfYnVzX2dldCAoREJVU19CVVNfU1lTVEVNLCAmZGJ1c19lcnJvcikpKQorICAgIHJldHVybiBOVUxMOworICAgIAorICBkYnVzX2Nvbm5lY3Rpb25fc2V0X2V4aXRfb25fZGlzY29ubmVjdChjb25uZWN0aW9uLCBGQUxTRSk7CisgIGRidXNfY29ubmVjdGlvbl9zZXRfd2F0Y2hfZnVuY3Rpb25zKGNvbm5lY3Rpb24sIGFkZF93YXRjaCwgcmVtb3ZlX3dhdGNoLCAKKwkJCQkgICAgICBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgZGJ1c19lcnJvcl9pbml0ICgmZGJ1c19lcnJvcik7CisgIGRidXNfYnVzX3JlcXVlc3RfbmFtZSAoY29ubmVjdGlvbiwgZGFlbW9uLT5kYnVzX25hbWUsIDAsICZkYnVzX2Vycm9yKTsKKyAgaWYgKGRidXNfZXJyb3JfaXNfc2V0ICgmZGJ1c19lcnJvcikpCisgICAgcmV0dXJuIChjaGFyICopZGJ1c19lcnJvci5tZXNzYWdlOworICAKKyAgaWYgKCFkYnVzX2Nvbm5lY3Rpb25fcmVnaXN0ZXJfb2JqZWN0X3BhdGgoY29ubmVjdGlvbiwgIEROU01BU1FfUEFUSCwgCisJCQkJCSAgICAmZG5zbWFzcV92dGFibGUsIE5VTEwpKQorICAgIHJldHVybiBfKCJjb3VsZCBub3QgcmVnaXN0ZXIgYSBEQnVzIG1lc3NhZ2UgaGFuZGxlciIpOworICAKKyAgZGFlbW9uLT5kYnVzID0gY29ubmVjdGlvbjsgCisgIAorICBpZiAoKG1lc3NhZ2UgPSBkYnVzX21lc3NhZ2VfbmV3X3NpZ25hbChETlNNQVNRX1BBVEgsIGRhZW1vbi0+ZGJ1c19uYW1lLCAiVXAiKSkpCisgICAgeworICAgICAgZGJ1c19jb25uZWN0aW9uX3NlbmQoY29ubmVjdGlvbiwgbWVzc2FnZSwgTlVMTCk7CisgICAgICBkYnVzX21lc3NhZ2VfdW5yZWYobWVzc2FnZSk7CisgICAgfQorCisgIHJldHVybiBOVUxMOworfQorIAorCit2b2lkIHNldF9kYnVzX2xpc3RlbmVycyh2b2lkKQoreworICBzdHJ1Y3Qgd2F0Y2ggKnc7CisgIAorICBmb3IgKHcgPSBkYWVtb24tPndhdGNoZXM7IHc7IHcgPSB3LT5uZXh0KQorICAgIGlmIChkYnVzX3dhdGNoX2dldF9lbmFibGVkKHctPndhdGNoKSkKKyAgICAgIHsKKwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSBkYnVzX3dhdGNoX2dldF9mbGFncyh3LT53YXRjaCk7CisJaW50IGZkID0gZGJ1c193YXRjaF9nZXRfdW5peF9mZCh3LT53YXRjaCk7CisJCisJaWYgKGZsYWdzICYgREJVU19XQVRDSF9SRUFEQUJMRSkKKwkgIHBvbGxfbGlzdGVuKGZkLCBQT0xMSU4pOworCQorCWlmIChmbGFncyAmIERCVVNfV0FUQ0hfV1JJVEFCTEUpCisJICBwb2xsX2xpc3RlbihmZCwgUE9MTE9VVCk7CisJCisJcG9sbF9saXN0ZW4oZmQsIFBPTExFUlIpOworICAgICAgfQorfQorCit2b2lkIGNoZWNrX2RidXNfbGlzdGVuZXJzKCkKK3sKKyAgREJ1c0Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24gPSAoREJ1c0Nvbm5lY3Rpb24gKilkYWVtb24tPmRidXM7CisgIHN0cnVjdCB3YXRjaCAqdzsKKworICBmb3IgKHcgPSBkYWVtb24tPndhdGNoZXM7IHc7IHcgPSB3LT5uZXh0KQorICAgIGlmIChkYnVzX3dhdGNoX2dldF9lbmFibGVkKHctPndhdGNoKSkKKyAgICAgIHsKKwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwOworCWludCBmZCA9IGRidXNfd2F0Y2hfZ2V0X3VuaXhfZmQody0+d2F0Y2gpOworCQorCWlmIChwb2xsX2NoZWNrKGZkLCBQT0xMSU4pKQorCSAgZmxhZ3MgfD0gREJVU19XQVRDSF9SRUFEQUJMRTsKKwkKKwlpZiAocG9sbF9jaGVjayhmZCwgUE9MTE9VVCkpCisJICBmbGFncyB8PSBEQlVTX1dBVENIX1dSSVRBQkxFOworCQorCWlmIChwb2xsX2NoZWNrKGZkLCBQT0xMRVJSKSkKKwkgIGZsYWdzIHw9IERCVVNfV0FUQ0hfRVJST1I7CisKKwlpZiAoZmxhZ3MgIT0gMCkKKwkgIGRidXNfd2F0Y2hfaGFuZGxlKHctPndhdGNoLCBmbGFncyk7CisgICAgICB9CisKKyAgaWYgKGNvbm5lY3Rpb24pCisgICAgeworICAgICAgZGJ1c19jb25uZWN0aW9uX3JlZiAoY29ubmVjdGlvbik7CisgICAgICB3aGlsZSAoZGJ1c19jb25uZWN0aW9uX2Rpc3BhdGNoIChjb25uZWN0aW9uKSA9PSBEQlVTX0RJU1BBVENIX0RBVEFfUkVNQUlOUyk7CisgICAgICBkYnVzX2Nvbm5lY3Rpb25fdW5yZWYgKGNvbm5lY3Rpb24pOworICAgIH0KK30KKworI2lmZGVmIEhBVkVfREhDUAordm9pZCBlbWl0X2RidXNfc2lnbmFsKGludCBhY3Rpb24sIHN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZSwgY2hhciAqaG9zdG5hbWUpCit7CisgIERCdXNDb25uZWN0aW9uICpjb25uZWN0aW9uID0gKERCdXNDb25uZWN0aW9uICopZGFlbW9uLT5kYnVzOworICBEQnVzTWVzc2FnZSogbWVzc2FnZSA9IE5VTEw7CisgIERCdXNNZXNzYWdlSXRlciBhcmdzOworICBjaGFyICphY3Rpb25fc3RyLCAqbWFjID0gZGFlbW9uLT5uYW1lYnVmZjsKKyAgdW5zaWduZWQgY2hhciAqcDsKKyAgaW50IGk7CisKKyAgaWYgKCFjb25uZWN0aW9uKQorICAgIHJldHVybjsKKyAgCisgIGlmICghaG9zdG5hbWUpCisgICAgaG9zdG5hbWUgPSAiIjsKKyAgCisjaWZkZWYgSEFWRV9ESENQNgorICAgaWYgKGxlYXNlLT5mbGFncyAmIChMRUFTRV9UQSB8IExFQVNFX05BKSkKKyAgICAgeworICAgICAgIHByaW50X21hYyhtYWMsIGxlYXNlLT5jbGlkLCBsZWFzZS0+Y2xpZF9sZW4pOworICAgICAgIGluZXRfbnRvcChBRl9JTkVUNiwgJmxlYXNlLT5hZGRyNiwgZGFlbW9uLT5hZGRyYnVmZiwgQUREUlNUUkxFTik7CisgICAgIH0KKyAgIGVsc2UKKyNlbmRpZgorICAgICB7CisgICAgICAgcCA9IGV4dGVuZGVkX2h3YWRkcihsZWFzZS0+aHdhZGRyX3R5cGUsIGxlYXNlLT5od2FkZHJfbGVuLAorCQkJICAgbGVhc2UtPmh3YWRkciwgbGVhc2UtPmNsaWRfbGVuLCBsZWFzZS0+Y2xpZCwgJmkpOworICAgICAgIHByaW50X21hYyhtYWMsIHAsIGkpOworICAgICAgIGluZXRfbnRvcChBRl9JTkVULCAmbGVhc2UtPmFkZHIsIGRhZW1vbi0+YWRkcmJ1ZmYsIEFERFJTVFJMRU4pOworICAgICB9CisKKyAgaWYgKGFjdGlvbiA9PSBBQ1RJT05fREVMKQorICAgIGFjdGlvbl9zdHIgPSAiRGhjcExlYXNlRGVsZXRlZCI7CisgIGVsc2UgaWYgKGFjdGlvbiA9PSBBQ1RJT05fQUREKQorICAgIGFjdGlvbl9zdHIgPSAiRGhjcExlYXNlQWRkZWQiOworICBlbHNlIGlmIChhY3Rpb24gPT0gQUNUSU9OX09MRCkKKyAgICBhY3Rpb25fc3RyID0gIkRoY3BMZWFzZVVwZGF0ZWQiOworICBlbHNlCisgICAgcmV0dXJuOworCisgIGlmICghKG1lc3NhZ2UgPSBkYnVzX21lc3NhZ2VfbmV3X3NpZ25hbChETlNNQVNRX1BBVEgsIGRhZW1vbi0+ZGJ1c19uYW1lLCBhY3Rpb25fc3RyKSkpCisgICAgcmV0dXJuOworICAKKyAgZGJ1c19tZXNzYWdlX2l0ZXJfaW5pdF9hcHBlbmQobWVzc2FnZSwgJmFyZ3MpOworICAKKyAgaWYgKGRidXNfbWVzc2FnZV9pdGVyX2FwcGVuZF9iYXNpYygmYXJncywgREJVU19UWVBFX1NUUklORywgJmRhZW1vbi0+YWRkcmJ1ZmYpICYmCisgICAgICBkYnVzX21lc3NhZ2VfaXRlcl9hcHBlbmRfYmFzaWMoJmFyZ3MsIERCVVNfVFlQRV9TVFJJTkcsICZtYWMpICYmCisgICAgICBkYnVzX21lc3NhZ2VfaXRlcl9hcHBlbmRfYmFzaWMoJmFyZ3MsIERCVVNfVFlQRV9TVFJJTkcsICZob3N0bmFtZSkpCisgICAgZGJ1c19jb25uZWN0aW9uX3NlbmQoY29ubmVjdGlvbiwgbWVzc2FnZSwgTlVMTCk7CisgIAorICBkYnVzX21lc3NhZ2VfdW5yZWYobWVzc2FnZSk7Cit9CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvZGhjcC1jb21tb24uYyBiL3NyYy9kaGNwLWNvbW1vbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhZTlhZTMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZGhjcC1jb21tb24uYwpAQCAtMCwwICsxLDkwNSBAQAorLyogZG5zbWFzcSBpcyBDb3B5cmlnaHQgKGMpIDIwMDAtMjAxNyBTaW1vbiBLZWxsZXkKKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgZGF0ZWQgSnVuZSwgMTk5MSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgdmVyc2lvbiAzIGRhdGVkIDI5IEp1bmUsIDIwMDcuCisgCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisKKyNpbmNsdWRlICJkbnNtYXNxLmgiCisKKyNpZmRlZiBIQVZFX0RIQ1AKKwordm9pZCBkaGNwX2NvbW1vbl9pbml0KHZvaWQpCit7CisgIC8qIFRoZXNlIGVhY2ggaG9sZCBhIERIQ1Agb3B0aW9uIG1heCBzaXplIDI1NQorICAgICBhbmQgZ2V0IGEgdGVybWluYXRpbmcgemVybyBhZGRlZCAqLworICBkYWVtb24tPmRoY3BfYnVmZiA9IHNhZmVfbWFsbG9jKERIQ1BfQlVGRl9TWik7CisgIGRhZW1vbi0+ZGhjcF9idWZmMiA9IHNhZmVfbWFsbG9jKERIQ1BfQlVGRl9TWik7IAorICBkYWVtb24tPmRoY3BfYnVmZjMgPSBzYWZlX21hbGxvYyhESENQX0JVRkZfU1opOworICAKKyAgLyogZGhjcF9wYWNrZXQgaXMgdXNlZCBieSB2NCBhbmQgdjYsIG91dHBhY2tldCBvbmx5IGJ5IHY2IAorICAgICBzaXplb2Yoc3RydWN0IGRoY3BfcGFja2V0KSBpcyBhcyBnb29kIGFuIGluaXRpYWwgc2l6ZSBhcyBhbnksCisgICAgIGV2ZW4gZm9yIHY2ICovCisgIGV4cGFuZF9idWYoJmRhZW1vbi0+ZGhjcF9wYWNrZXQsIHNpemVvZihzdHJ1Y3QgZGhjcF9wYWNrZXQpKTsKKyNpZmRlZiBIQVZFX0RIQ1A2CisgIGlmIChkYWVtb24tPmRoY3A2KQorICAgIGV4cGFuZF9idWYoJmRhZW1vbi0+b3V0cGFja2V0LCBzaXplb2Yoc3RydWN0IGRoY3BfcGFja2V0KSk7CisjZW5kaWYKK30KKworc3NpemVfdCByZWN2X2RoY3BfcGFja2V0KGludCBmZCwgc3RydWN0IG1zZ2hkciAqbXNnKQoreyAgCisgIHNzaXplX3Qgc3o7CisgCisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIG1zZy0+bXNnX2ZsYWdzID0gMDsKKyAgICAgIHdoaWxlICgoc3ogPSByZWN2bXNnKGZkLCBtc2csIE1TR19QRUVLIHwgTVNHX1RSVU5DKSkgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpOworICAgICAgCisgICAgICBpZiAoc3ogPT0gLTEpCisJcmV0dXJuIC0xOworICAgICAgCisgICAgICBpZiAoIShtc2ctPm1zZ19mbGFncyAmIE1TR19UUlVOQykpCisJYnJlYWs7CisKKyAgICAgIC8qIFZlcnkgbmV3IExpbnV4IGtlcm5lbHMgcmV0dXJuIHRoZSBhY3R1YWwgc2l6ZSBuZWVkZWQsIAorCSBvbGRlciBvbmVzIGFsd2F5cyByZXR1cm4gdHJ1bmNhdGVkIHNpemUgKi8KKyAgICAgIGlmICgoc2l6ZV90KXN6ID09IG1zZy0+bXNnX2lvdi0+aW92X2xlbikKKwl7CisJICBpZiAoIWV4cGFuZF9idWYobXNnLT5tc2dfaW92LCBzeiArIDEwMCkpCisJICAgIHJldHVybiAtMTsKKwl9CisgICAgICBlbHNlCisJeworCSAgZXhwYW5kX2J1Zihtc2ctPm1zZ19pb3YsIHN6KTsKKwkgIGJyZWFrOworCX0KKyAgICB9CisgIAorICB3aGlsZSAoKHN6ID0gcmVjdm1zZyhmZCwgbXNnLCAwKSkgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpOworICAKKyAgcmV0dXJuIChtc2ctPm1zZ19mbGFncyAmIE1TR19UUlVOQykgPyAtMSA6IHN6OworfQorCitzdHJ1Y3QgZGhjcF9uZXRpZCAqcnVuX3RhZ19pZihzdHJ1Y3QgZGhjcF9uZXRpZCAqdGFncykKK3sKKyAgc3RydWN0IHRhZ19pZiAqZXhwcnM7CisgIHN0cnVjdCBkaGNwX25ldGlkX2xpc3QgKmxpc3Q7CisKKyAgZm9yIChleHBycyA9IGRhZW1vbi0+dGFnX2lmOyBleHByczsgZXhwcnMgPSBleHBycy0+bmV4dCkKKyAgICBpZiAobWF0Y2hfbmV0aWQoZXhwcnMtPnRhZywgdGFncywgMSkpCisgICAgICBmb3IgKGxpc3QgPSBleHBycy0+c2V0OyBsaXN0OyBsaXN0ID0gbGlzdC0+bmV4dCkKKwl7CisJICBsaXN0LT5saXN0LT5uZXh0ID0gdGFnczsKKwkgIHRhZ3MgPSBsaXN0LT5saXN0OworCX0KKworICByZXR1cm4gdGFnczsKK30KKworCitzdHJ1Y3QgZGhjcF9uZXRpZCAqb3B0aW9uX2ZpbHRlcihzdHJ1Y3QgZGhjcF9uZXRpZCAqdGFncywgc3RydWN0IGRoY3BfbmV0aWQgKmNvbnRleHRfdGFncywgc3RydWN0IGRoY3Bfb3B0ICpvcHRzKQoreworICBzdHJ1Y3QgZGhjcF9uZXRpZCAqdGFnaWYgPSBydW5fdGFnX2lmKHRhZ3MpOworICBzdHJ1Y3QgZGhjcF9vcHQgKm9wdDsKKyAgc3RydWN0IGRoY3Bfb3B0ICp0bXA7ICAKKworICAvKiBmbGFnIG9wdGlvbnMgd2hpY2ggYXJlIHZhbGlkIHdpdGggdGhlIGN1cnJlbnQgdGFnIHNldCAoc2FucyBjb250ZXh0IHRhZ3MpICovCisgIGZvciAob3B0ID0gb3B0czsgb3B0OyBvcHQgPSBvcHQtPm5leHQpCisgICAgeworICAgICAgb3B0LT5mbGFncyAmPSB+REhPUFRfVEFHT0s7CisgICAgICBpZiAoIShvcHQtPmZsYWdzICYgKERIT1BUX0VOQ0FQU1VMQVRFIHwgREhPUFRfVkVORE9SIHwgREhPUFRfUkZDMzkyNSkpICYmCisJICBtYXRjaF9uZXRpZChvcHQtPm5ldGlkLCB0YWdpZiwgMCkpCisJb3B0LT5mbGFncyB8PSBESE9QVF9UQUdPSzsKKyAgICB9CisKKyAgLyogbm93IGZsYWcgb3B0aW9ucyB3aGljaCBhcmUgdmFsaWQsIGluY2x1ZGluZyB0aGUgY29udGV4dCB0YWdzLAorICAgICBvdGhlcndpc2UgdmFsaWQgb3B0aW9ucyBhcmUgaW5oaWJpdGVkIGlmIHdlIGZvdW5kIGEgaGlnaGVyIHByaW9yaXR5IG9uZSBhYm92ZSAqLworICBpZiAoY29udGV4dF90YWdzKQorICAgIHsKKyAgICAgIHN0cnVjdCBkaGNwX25ldGlkICpsYXN0X3RhZzsKKworICAgICAgZm9yIChsYXN0X3RhZyA9IGNvbnRleHRfdGFnczsgbGFzdF90YWctPm5leHQ7IGxhc3RfdGFnID0gbGFzdF90YWctPm5leHQpOworICAgICAgbGFzdF90YWctPm5leHQgPSB0YWdzOworICAgICAgdGFnaWYgPSBydW5fdGFnX2lmKGNvbnRleHRfdGFncyk7CisgICAgICAKKyAgICAgIC8qIHJlc2V0IHN0dWZmIHdpdGggdGFnOiE8dGFnPiB3aGljaCBub3cgbWF0Y2hlcy4gKi8KKyAgICAgIGZvciAob3B0ID0gb3B0czsgb3B0OyBvcHQgPSBvcHQtPm5leHQpCisJaWYgKCEob3B0LT5mbGFncyAmIChESE9QVF9FTkNBUFNVTEFURSB8IERIT1BUX1ZFTkRPUiB8IERIT1BUX1JGQzM5MjUpKSAmJgorCSAgICAob3B0LT5mbGFncyAmIERIT1BUX1RBR09LKSAmJgorCSAgICAhbWF0Y2hfbmV0aWQob3B0LT5uZXRpZCwgdGFnaWYsIDApKQorCSAgb3B0LT5mbGFncyAmPSB+REhPUFRfVEFHT0s7CisKKyAgICAgIGZvciAob3B0ID0gb3B0czsgb3B0OyBvcHQgPSBvcHQtPm5leHQpCisJaWYgKCEob3B0LT5mbGFncyAmIChESE9QVF9FTkNBUFNVTEFURSB8IERIT1BUX1ZFTkRPUiB8IERIT1BUX1JGQzM5MjUgfCBESE9QVF9UQUdPSykpICYmCisJICAgIG1hdGNoX25ldGlkKG9wdC0+bmV0aWQsIHRhZ2lmLCAwKSkKKwkgIHsKKwkgICAgc3RydWN0IGRoY3Bfb3B0ICp0bXA7ICAKKwkgICAgZm9yICh0bXAgPSBvcHRzOyB0bXA7IHRtcCA9IHRtcC0+bmV4dCkgCisJICAgICAgaWYgKHRtcC0+b3B0ID09IG9wdC0+b3B0ICYmIG9wdC0+bmV0aWQgJiYgKHRtcC0+ZmxhZ3MgJiBESE9QVF9UQUdPSykpCisJCWJyZWFrOworCSAgICBpZiAoIXRtcCkKKwkgICAgICBvcHQtPmZsYWdzIHw9IERIT1BUX1RBR09LOworCSAgfSAgICAgIAorICAgIH0KKyAgCisgIC8qIG5vdyBmbGFnIHVudGFnZ2VkIG9wdGlvbnMgd2hpY2ggYXJlIG5vdCBvdmVycmlkZGVuIGJ5IHRhZ2dlZCBvbmVzICovCisgIGZvciAob3B0ID0gb3B0czsgb3B0OyBvcHQgPSBvcHQtPm5leHQpCisgICAgaWYgKCEob3B0LT5mbGFncyAmIChESE9QVF9FTkNBUFNVTEFURSB8IERIT1BUX1ZFTkRPUiB8IERIT1BUX1JGQzM5MjUgfCBESE9QVF9UQUdPSykpICYmICFvcHQtPm5ldGlkKQorICAgICAgeworCWZvciAodG1wID0gb3B0czsgdG1wOyB0bXAgPSB0bXAtPm5leHQpIAorCSAgaWYgKHRtcC0+b3B0ID09IG9wdC0+b3B0ICYmICh0bXAtPmZsYWdzICYgREhPUFRfVEFHT0spKQorCSAgICBicmVhazsKKwlpZiAoIXRtcCkKKwkgIG9wdC0+ZmxhZ3MgfD0gREhPUFRfVEFHT0s7CisJZWxzZSBpZiAoIXRtcC0+bmV0aWQpCisJICBteV9zeXNsb2coTVNfREhDUCB8IExPR19XQVJOSU5HLCBfKCJJZ25vcmluZyBkdXBsaWNhdGUgZGhjcC1vcHRpb24gJWQiKSwgdG1wLT5vcHQpOyAKKyAgICAgIH0KKworICAvKiBGaW5hbGx5LCBlbGltaW5hdGUgZHVwbGljYXRlIG9wdGlvbnMgbGF0ZXIgaW4gdGhlIGNoYWluLCBhbmQgdGhlcmVmb3JlIGVhcmxpZXIgaW4gdGhlIGNvbmZpZyBmaWxlLiAqLworICBmb3IgKG9wdCA9IG9wdHM7IG9wdDsgb3B0ID0gb3B0LT5uZXh0KQorICAgIGlmIChvcHQtPmZsYWdzICYgREhPUFRfVEFHT0spCisgICAgICBmb3IgKHRtcCA9IG9wdC0+bmV4dDsgdG1wOyB0bXAgPSB0bXAtPm5leHQpIAorCWlmICh0bXAtPm9wdCA9PSBvcHQtPm9wdCkKKwkgIHRtcC0+ZmxhZ3MgJj0gfkRIT1BUX1RBR09LOworICAKKyAgcmV0dXJuIHRhZ2lmOworfQorCQorLyogSXMgZXZlcnkgbWVtYmVyIG9mIGNoZWNrIG1hdGNoZWQgYnkgYSBtZW1iZXIgb2YgcG9vbD8gCisgICBJZiB0YWdub3RuZWVkZWQsIHVudGFnZ2VkIGlzIE9LICovCitpbnQgbWF0Y2hfbmV0aWQoc3RydWN0IGRoY3BfbmV0aWQgKmNoZWNrLCBzdHJ1Y3QgZGhjcF9uZXRpZCAqcG9vbCwgaW50IHRhZ25vdG5lZWRlZCkKK3sKKyAgc3RydWN0IGRoY3BfbmV0aWQgKnRtcDE7CisgIAorICBpZiAoIWNoZWNrICYmICF0YWdub3RuZWVkZWQpCisgICAgcmV0dXJuIDA7CisKKyAgZm9yICg7IGNoZWNrOyBjaGVjayA9IGNoZWNrLT5uZXh0KQorICAgIHsKKyAgICAgIC8qICcjJyBmb3Igbm90IGlzIGZvciBiYWNrd2FyZHMgY29tcGF0LiAqLworICAgICAgaWYgKGNoZWNrLT5uZXRbMF0gIT0gJyEnICYmIGNoZWNrLT5uZXRbMF0gIT0gJyMnKQorCXsKKwkgIGZvciAodG1wMSA9IHBvb2w7IHRtcDE7IHRtcDEgPSB0bXAxLT5uZXh0KQorCSAgICBpZiAoc3RyY21wKGNoZWNrLT5uZXQsIHRtcDEtPm5ldCkgPT0gMCkKKwkgICAgICBicmVhazsKKwkgIGlmICghdG1wMSkKKwkgICAgcmV0dXJuIDA7CisJfQorICAgICAgZWxzZQorCWZvciAodG1wMSA9IHBvb2w7IHRtcDE7IHRtcDEgPSB0bXAxLT5uZXh0KQorCSAgaWYgKHN0cmNtcCgoY2hlY2stPm5ldCkrMSwgdG1wMS0+bmV0KSA9PSAwKQorCSAgICByZXR1cm4gMDsKKyAgICB9CisgIHJldHVybiAxOworfQorCisvKiByZXR1cm4gZG9tYWluIG9yIE5VTEwgaWYgbm9uZS4gKi8KK2NoYXIgKnN0cmlwX2hvc3RuYW1lKGNoYXIgKmhvc3RuYW1lKQoreworICBjaGFyICpkb3QgPSBzdHJjaHIoaG9zdG5hbWUsICcuJyk7CisgCisgIGlmICghZG90KQorICAgIHJldHVybiBOVUxMOworICAKKyAgKmRvdCA9IDA7IC8qIHRydW5jYXRlICovCisgIGlmIChzdHJsZW4oZG90KzEpICE9IDApCisgICAgcmV0dXJuIGRvdCsxOworICAKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgbG9nX3RhZ3Moc3RydWN0IGRoY3BfbmV0aWQgKm5ldGlkLCB1MzIgeGlkKQoreworICBpZiAobmV0aWQgJiYgb3B0aW9uX2Jvb2woT1BUX0xPR19PUFRTKSkKKyAgICB7CisgICAgICBjaGFyICpzID0gZGFlbW9uLT5uYW1lYnVmZjsKKyAgICAgIGZvciAoKnMgPSAwOyBuZXRpZDsgbmV0aWQgPSBuZXRpZC0+bmV4dCkKKwl7CisJICAvKiBraWxsIGR1cGVzLiAqLworCSAgc3RydWN0IGRoY3BfbmV0aWQgKm47CisJICAKKwkgIGZvciAobiA9IG5ldGlkLT5uZXh0OyBuOyBuID0gbi0+bmV4dCkKKwkgICAgaWYgKHN0cmNtcChuZXRpZC0+bmV0LCBuLT5uZXQpID09IDApCisJICAgICAgYnJlYWs7CisJICAKKwkgIGlmICghbikKKwkgICAgeworCSAgICAgIHN0cm5jYXQgKHMsIG5ldGlkLT5uZXQsIChNQVhETkFNRS0xKSAtIHN0cmxlbihzKSk7CisJICAgICAgaWYgKG5ldGlkLT5uZXh0KQorCQlzdHJuY2F0IChzLCAiLCAiLCAoTUFYRE5BTUUtMSkgLSBzdHJsZW4ocykpOworCSAgICB9CisJfQorICAgICAgbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfSU5GTywgXygiJXUgdGFnczogJXMiKSwgeGlkLCBzKTsKKyAgICB9IAorfSAgIAorICAKK2ludCBtYXRjaF9ieXRlcyhzdHJ1Y3QgZGhjcF9vcHQgKm8sIHVuc2lnbmVkIGNoYXIgKnAsIGludCBsZW4pCit7CisgIGludCBpOworICAKKyAgaWYgKG8tPmxlbiA+IGxlbikKKyAgICByZXR1cm4gMDsKKyAgCisgIGlmIChvLT5sZW4gPT0gMCkKKyAgICByZXR1cm4gMTsKKyAgICAgCisgIGlmIChvLT5mbGFncyAmIERIT1BUX0hFWCkKKyAgICB7IAorICAgICAgaWYgKG1lbWNtcF9tYXNrZWQoby0+dmFsLCBwLCBvLT5sZW4sIG8tPnUud2lsZGNhcmRfbWFzaykpCisJcmV0dXJuIDE7CisgICAgfQorICBlbHNlIAorICAgIGZvciAoaSA9IDA7IGkgPD0gKGxlbiAtIG8tPmxlbik7ICkgCisgICAgICB7CisJaWYgKG1lbWNtcChvLT52YWwsIHAgKyBpLCBvLT5sZW4pID09IDApCisJICByZXR1cm4gMTsKKwkgICAgCisJaWYgKG8tPmZsYWdzICYgREhPUFRfU1RSSU5HKQorCSAgaSsrOworCWVsc2UKKwkgIGkgKz0gby0+bGVuOworICAgICAgfQorICAKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBjb25maWdfaGFzX21hYyhzdHJ1Y3QgZGhjcF9jb25maWcgKmNvbmZpZywgdW5zaWduZWQgY2hhciAqaHdhZGRyLCBpbnQgbGVuLCBpbnQgdHlwZSkKK3sKKyAgc3RydWN0IGh3YWRkcl9jb25maWcgKmNvbmZfYWRkcjsKKyAgCisgIGZvciAoY29uZl9hZGRyID0gY29uZmlnLT5od2FkZHI7IGNvbmZfYWRkcjsgY29uZl9hZGRyID0gY29uZl9hZGRyLT5uZXh0KQorICAgIGlmIChjb25mX2FkZHItPndpbGRjYXJkX21hc2sgPT0gMCAmJgorCWNvbmZfYWRkci0+aHdhZGRyX2xlbiA9PSBsZW4gJiYKKwkoY29uZl9hZGRyLT5od2FkZHJfdHlwZSA9PSB0eXBlIHx8IGNvbmZfYWRkci0+aHdhZGRyX3R5cGUgPT0gMCkgJiYKKwltZW1jbXAoY29uZl9hZGRyLT5od2FkZHIsIGh3YWRkciwgbGVuKSA9PSAwKQorICAgICAgcmV0dXJuIDE7CisgIAorICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpc19jb25maWdfaW5fY29udGV4dChzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0LCBzdHJ1Y3QgZGhjcF9jb25maWcgKmNvbmZpZykKK3sKKyAgaWYgKCFjb250ZXh0KSAvKiBjYWxsZWQgdmlhIGZpbmRfY29uZmlnKCkgZnJvbSBsZWFzZV91cGRhdGVfZnJvbV9jb25maWdzKCkgKi8KKyAgICByZXR1cm4gMTsgCisKKyAgaWYgKCEoY29uZmlnLT5mbGFncyAmIChDT05GSUdfQUREUiB8IENPTkZJR19BRERSNikpKQorICAgIHJldHVybiAxOworICAKKyNpZmRlZiBIQVZFX0RIQ1A2CisgIGlmICgoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX1Y2KSAmJiAoY29uZmlnLT5mbGFncyAmIENPTkZJR19XSUxEQ0FSRCkpCisgICAgcmV0dXJuIDE7CisjZW5kaWYKKworICBmb3IgKDsgY29udGV4dDsgY29udGV4dCA9IGNvbnRleHQtPmN1cnJlbnQpCisjaWZkZWYgSEFWRV9ESENQNgorICAgIGlmIChjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfVjYpIAorICAgICAgeworCWlmICgoY29uZmlnLT5mbGFncyAmIENPTkZJR19BRERSNikgJiYgaXNfc2FtZV9uZXQ2KCZjb25maWctPmFkZHI2LCAmY29udGV4dC0+c3RhcnQ2LCBjb250ZXh0LT5wcmVmaXgpKQorCSAgcmV0dXJuIDE7CisgICAgICB9CisgICAgZWxzZSAKKyNlbmRpZgorICAgICAgaWYgKChjb25maWctPmZsYWdzICYgQ09ORklHX0FERFIpICYmIGlzX3NhbWVfbmV0KGNvbmZpZy0+YWRkciwgY29udGV4dC0+c3RhcnQsIGNvbnRleHQtPm5ldG1hc2spKQorCXJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitzdHJ1Y3QgZGhjcF9jb25maWcgKmZpbmRfY29uZmlnKHN0cnVjdCBkaGNwX2NvbmZpZyAqY29uZmlncywKKwkJCQlzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0LAorCQkJCXVuc2lnbmVkIGNoYXIgKmNsaWQsIGludCBjbGlkX2xlbiwKKwkJCQl1bnNpZ25lZCBjaGFyICpod2FkZHIsIGludCBod19sZW4sIAorCQkJCWludCBod190eXBlLCBjaGFyICpob3N0bmFtZSkKK3sKKyAgaW50IGNvdW50LCBuZXc7CisgIHN0cnVjdCBkaGNwX2NvbmZpZyAqY29uZmlnLCAqY2FuZGlkYXRlOyAKKyAgc3RydWN0IGh3YWRkcl9jb25maWcgKmNvbmZfYWRkcjsKKworICBpZiAoY2xpZCkKKyAgICBmb3IgKGNvbmZpZyA9IGNvbmZpZ3M7IGNvbmZpZzsgY29uZmlnID0gY29uZmlnLT5uZXh0KQorICAgICAgaWYgKGNvbmZpZy0+ZmxhZ3MgJiBDT05GSUdfQ0xJRCkKKwl7CisJICBpZiAoY29uZmlnLT5jbGlkX2xlbiA9PSBjbGlkX2xlbiAmJiAKKwkgICAgICBtZW1jbXAoY29uZmlnLT5jbGlkLCBjbGlkLCBjbGlkX2xlbikgPT0gMCAmJgorCSAgICAgIGlzX2NvbmZpZ19pbl9jb250ZXh0KGNvbnRleHQsIGNvbmZpZykpCisJICAgIHJldHVybiBjb25maWc7CisJICAKKwkgIC8qIGRoY3BjZCBwcmVmaXhlcyBBU0NJSSBjbGllbnQgSURzIGJ5IHplcm8gd2hpY2ggaXMgd3JvbmcsIGJ1dCB3ZSB0cnkgYW5kCisJICAgICBjb3BlIHdpdGggdGhhdCBoZXJlLiBUaGlzIGlzIElQdjQgb25seS4gY29udGV4dD09TlVMTCBpbXBsaWVzIElQdjQsIAorCSAgICAgc2VlIGxlYXNlX3VwZGF0ZV9mcm9tX2NvbmZpZ3MoKSAqLworCSAgaWYgKCghY29udGV4dCB8fCAhKGNvbnRleHQtPmZsYWdzICYgQ09OVEVYVF9WNikpICYmICpjbGlkID09IDAgJiYgY29uZmlnLT5jbGlkX2xlbiA9PSBjbGlkX2xlbi0xICAmJgorCSAgICAgIG1lbWNtcChjb25maWctPmNsaWQsIGNsaWQrMSwgY2xpZF9sZW4tMSkgPT0gMCAmJgorCSAgICAgIGlzX2NvbmZpZ19pbl9jb250ZXh0KGNvbnRleHQsIGNvbmZpZykpCisJICAgIHJldHVybiBjb25maWc7CisJfQorICAKKworICBpZiAoaHdhZGRyKQorICAgIGZvciAoY29uZmlnID0gY29uZmlnczsgY29uZmlnOyBjb25maWcgPSBjb25maWctPm5leHQpCisgICAgICBpZiAoY29uZmlnX2hhc19tYWMoY29uZmlnLCBod2FkZHIsIGh3X2xlbiwgaHdfdHlwZSkgJiYKKwkgIGlzX2NvbmZpZ19pbl9jb250ZXh0KGNvbnRleHQsIGNvbmZpZykpCisJcmV0dXJuIGNvbmZpZzsKKyAgCisgIGlmIChob3N0bmFtZSAmJiBjb250ZXh0KQorICAgIGZvciAoY29uZmlnID0gY29uZmlnczsgY29uZmlnOyBjb25maWcgPSBjb25maWctPm5leHQpCisgICAgICBpZiAoKGNvbmZpZy0+ZmxhZ3MgJiBDT05GSUdfTkFNRSkgJiYgCisJICBob3N0bmFtZV9pc2VxdWFsKGNvbmZpZy0+aG9zdG5hbWUsIGhvc3RuYW1lKSAmJgorCSAgaXNfY29uZmlnX2luX2NvbnRleHQoY29udGV4dCwgY29uZmlnKSkKKwlyZXR1cm4gY29uZmlnOworCisgIAorICBpZiAoIWh3YWRkcikKKyAgICByZXR1cm4gTlVMTDsKKworICAvKiB1c2UgbWF0Y2ggd2l0aCBmZXdlc3Qgd2lsZGNhcmQgb2N0ZXRzICovCisgIGZvciAoY2FuZGlkYXRlID0gTlVMTCwgY291bnQgPSAwLCBjb25maWcgPSBjb25maWdzOyBjb25maWc7IGNvbmZpZyA9IGNvbmZpZy0+bmV4dCkKKyAgICBpZiAoaXNfY29uZmlnX2luX2NvbnRleHQoY29udGV4dCwgY29uZmlnKSkKKyAgICAgIGZvciAoY29uZl9hZGRyID0gY29uZmlnLT5od2FkZHI7IGNvbmZfYWRkcjsgY29uZl9hZGRyID0gY29uZl9hZGRyLT5uZXh0KQorCWlmIChjb25mX2FkZHItPndpbGRjYXJkX21hc2sgIT0gMCAmJgorCSAgICBjb25mX2FkZHItPmh3YWRkcl9sZW4gPT0gaHdfbGVuICYmCQorCSAgICAoY29uZl9hZGRyLT5od2FkZHJfdHlwZSA9PSBod190eXBlIHx8IGNvbmZfYWRkci0+aHdhZGRyX3R5cGUgPT0gMCkgJiYKKwkgICAgKG5ldyA9IG1lbWNtcF9tYXNrZWQoY29uZl9hZGRyLT5od2FkZHIsIGh3YWRkciwgaHdfbGVuLCBjb25mX2FkZHItPndpbGRjYXJkX21hc2spKSA+IGNvdW50KQorCSAgeworCSAgICAgIGNvdW50ID0gbmV3OworCSAgICAgIGNhbmRpZGF0ZSA9IGNvbmZpZzsKKwkgIH0KKyAgCisgIHJldHVybiBjYW5kaWRhdGU7Cit9CisKK3ZvaWQgZGhjcF91cGRhdGVfY29uZmlncyhzdHJ1Y3QgZGhjcF9jb25maWcgKmNvbmZpZ3MpCit7CisgIC8qIFNvbWUgcGVvcGxlIGxpa2UgdG8ga2VlcCBhbGwgc3RhdGljIElQIGFkZHJlc3NlcyBpbiAvZXRjL2hvc3RzLgorICAgICBUaGlzIGdvZXMgdGhyb3VnaCAvZXRjL2hvc3RzIGFuZCBzZXRzIHN0YXRpYyBhZGRyZXNzZXMgZm9yIGFueSBESENQIGNvbmZpZworICAgICByZWNvcmRzIHdoaWNoIGRvbid0IGhhdmUgYW4gYWRkcmVzcyBhbmQgd2hvc2UgbmFtZSBtYXRjaGVzLiAKKyAgICAgV2UgdGFrZSBjYXJlIHRvIG1haW50YWluIHRoZSBpbnZhcmlhbnQgdGhhdCBhbnkgSVAgYWRkcmVzcyBjYW4gYXBwZWFyCisgICAgIGluIGF0IG1vc3Qgb25lIGRoY3AtaG9zdC4gU2luY2UgL2V0Yy9ob3N0cyBjYW4gYmUgcmUtcmVhZCBieSBTSUdIVVAsIAorICAgICByZXN0b3JlIHRoZSBzdGF0dXMtcXVvIGFudGUgZmlyc3QuICovCisgIAorICBzdHJ1Y3QgZGhjcF9jb25maWcgKmNvbmZpZywgKmNvbmZfdG1wOworICBzdHJ1Y3QgY3JlYyAqY3JlYzsKKyAgaW50IHByb3QgPSBBRl9JTkVUOworCisgIGZvciAoY29uZmlnID0gY29uZmlnczsgY29uZmlnOyBjb25maWcgPSBjb25maWctPm5leHQpCisgICAgaWYgKGNvbmZpZy0+ZmxhZ3MgJiBDT05GSUdfQUREUl9IT1NUUykKKyAgICAgIGNvbmZpZy0+ZmxhZ3MgJj0gfihDT05GSUdfQUREUiB8IENPTkZJR19BRERSNiB8IENPTkZJR19BRERSX0hPU1RTKTsKKworI2lmZGVmIEhBVkVfREhDUDYgCisgYWdhaW46ICAKKyNlbmRpZgorCisgIGlmIChkYWVtb24tPnBvcnQgIT0gMCkKKyAgICBmb3IgKGNvbmZpZyA9IGNvbmZpZ3M7IGNvbmZpZzsgY29uZmlnID0gY29uZmlnLT5uZXh0KQorICAgICAgeworCWludCBjb25mbGFncyA9IENPTkZJR19BRERSOworCWludCBjYWNoZWZsYWdzID0gRl9JUFY0OworCisjaWZkZWYgSEFWRV9ESENQNgorCWlmIChwcm90ID09IEFGX0lORVQ2KQorCSAgeworCSAgICBjb25mbGFncyA9IENPTkZJR19BRERSNjsKKwkgICAgY2FjaGVmbGFncyA9IEZfSVBWNjsKKwkgIH0KKyNlbmRpZgorCWlmICghKGNvbmZpZy0+ZmxhZ3MgJiBjb25mbGFncykgJiYKKwkgICAgKGNvbmZpZy0+ZmxhZ3MgJiBDT05GSUdfTkFNRSkgJiYgCisJICAgIChjcmVjID0gY2FjaGVfZmluZF9ieV9uYW1lKE5VTEwsIGNvbmZpZy0+aG9zdG5hbWUsIDAsIGNhY2hlZmxhZ3MpKSAmJgorCSAgICAoY3JlYy0+ZmxhZ3MgJiBGX0hPU1RTKSkKKwkgIHsKKwkgICAgaWYgKGNhY2hlX2ZpbmRfYnlfbmFtZShjcmVjLCBjb25maWctPmhvc3RuYW1lLCAwLCBjYWNoZWZsYWdzKSkKKwkgICAgICB7CisJCS8qIHVzZSBwcmltYXJ5IChmaXJzdCkgYWRkcmVzcyAqLworCQl3aGlsZSAoY3JlYyAmJiAhKGNyZWMtPmZsYWdzICYgRl9SRVZFUlNFKSkKKwkJICBjcmVjID0gY2FjaGVfZmluZF9ieV9uYW1lKGNyZWMsIGNvbmZpZy0+aG9zdG5hbWUsIDAsIGNhY2hlZmxhZ3MpOworCQlpZiAoIWNyZWMpCisJCSAgY29udGludWU7IC8qIHNob3VsZCBiZSBuZXZlciAqLworCQlpbmV0X250b3AocHJvdCwgJmNyZWMtPmFkZHIuYWRkciwgZGFlbW9uLT5hZGRyYnVmZiwgQUREUlNUUkxFTik7CisJCW15X3N5c2xvZyhNU19ESENQIHwgTE9HX1dBUk5JTkcsIF8oIiVzIGhhcyBtb3JlIHRoYW4gb25lIGFkZHJlc3MgaW4gaG9zdHNmaWxlLCB1c2luZyAlcyBmb3IgREhDUCIpLCAKKwkJCSAgY29uZmlnLT5ob3N0bmFtZSwgZGFlbW9uLT5hZGRyYnVmZik7CisJICAgICAgfQorCSAgICAKKwkgICAgaWYgKHByb3QgPT0gQUZfSU5FVCAmJiAKKwkJKCEoY29uZl90bXAgPSBjb25maWdfZmluZF9ieV9hZGRyZXNzKGNvbmZpZ3MsIGNyZWMtPmFkZHIuYWRkci5hZGRyLmFkZHI0KSkgfHwgY29uZl90bXAgPT0gY29uZmlnKSkKKwkgICAgICB7CisJCWNvbmZpZy0+YWRkciA9IGNyZWMtPmFkZHIuYWRkci5hZGRyLmFkZHI0OworCQljb25maWctPmZsYWdzIHw9IENPTkZJR19BRERSIHwgQ09ORklHX0FERFJfSE9TVFM7CisJCWNvbnRpbnVlOworCSAgICAgIH0KKworI2lmZGVmIEhBVkVfREhDUDYKKwkgICAgaWYgKHByb3QgPT0gQUZfSU5FVDYgJiYgCisJCSghKGNvbmZfdG1wID0gY29uZmlnX2ZpbmRfYnlfYWRkcmVzczYoY29uZmlncywgJmNyZWMtPmFkZHIuYWRkci5hZGRyLmFkZHI2LCAxMjgsIDApKSB8fCBjb25mX3RtcCA9PSBjb25maWcpKQorCSAgICAgIHsKKwkJbWVtY3B5KCZjb25maWctPmFkZHI2LCAmY3JlYy0+YWRkci5hZGRyLmFkZHIuYWRkcjYsIElONkFERFJTWik7CisJCWNvbmZpZy0+ZmxhZ3MgfD0gQ09ORklHX0FERFI2IHwgQ09ORklHX0FERFJfSE9TVFM7CisJCWNvbnRpbnVlOworCSAgICAgIH0KKyNlbmRpZgorCisJICAgIGluZXRfbnRvcChwcm90LCAmY3JlYy0+YWRkci5hZGRyLCBkYWVtb24tPmFkZHJidWZmLCBBRERSU1RSTEVOKTsKKwkgICAgbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfV0FSTklORywgXygiZHVwbGljYXRlIElQIGFkZHJlc3MgJXMgKCVzKSBpbiBkaGNwLWNvbmZpZyBkaXJlY3RpdmUiKSwgCisJCSAgICAgIGRhZW1vbi0+YWRkcmJ1ZmYsIGNvbmZpZy0+aG9zdG5hbWUpOworCSAgICAKKwkgICAgCisJICB9CisgICAgICB9CisKKyNpZmRlZiBIQVZFX0RIQ1A2CisgIGlmIChwcm90ID09IEFGX0lORVQpCisgICAgeworICAgICAgcHJvdCA9IEFGX0lORVQ2OworICAgICAgZ290byBhZ2FpbjsKKyAgICB9CisjZW5kaWYKKworfQorCisjaWZkZWYgSEFWRV9MSU5VWF9ORVRXT1JLIAorY2hhciAqd2hpY2hkZXZpY2Uodm9pZCkKK3sKKyAgLyogSWYgd2UgYXJlIGRvaW5nIERIQ1Agb24gZXhhY3RseSBvbmUgaW50ZXJmYWNlLCBhbmQgcnVubmluZyBsaW51eCwgZG8gU09fQklORFRPREVWSUNFCisgICAgIHRvIHRoYXQgZGV2aWNlLiBUaGlzIGlzIGZvciB0aGUgdXNlIGNhc2Ugb2YgIChlZykgT3BlblN0YWNrLCB3aGljaCBydW5zIGEgbmV3CisgICAgIGRuc21hc3EgaW5zdGFuY2UgZm9yIGVhY2ggVkxBTiBpbnRlcmZhY2UgaXQgY3JlYXRlcy4gV2l0aG91dCB0aGUgQklORFRPREVWSUNFLCAKKyAgICAgaW5kaXZpZHVhbCBwcm9jZXNzZXMgZG9uJ3QgYWx3YXlzIHNlZSB0aGUgcGFja2V0cyB0aGV5IHNob3VsZC4KKyAgICAgU09fQklORFRPREVWSUNFIGlzIG9ubHkgYXZhaWxhYmxlIExpbnV4LiAKKworICAgICBOb3RlIHRoYXQgaWYgd2lsZGNhcmRzIGFyZSB1c2VkIGluIC0taW50ZXJmYWNlLCBvciAtLWludGVyZmFjZSBpcyBub3QgdXNlZCBhdCBhbGwsCisgICAgIG9yIGEgY29uZmlndXJlZCBpbnRlcmZhY2UgZG9lc24ndCB5ZXQgZXhpc3QsIHRoZW4gbW9yZSBpbnRlcmZhY2VzIG1heSBhcnJpdmUgbGF0ZXIsIAorICAgICBzbyB3ZSBjYW4ndCBzYWZlbHkgYXNzZXJ0IHRoZXJlIGlzIG9ubHkgb25lIGludGVyZmFjZSBhbmQgcHJvY2VlZC4KKyovCisgIAorICBzdHJ1Y3QgaXJlYyAqaWZhY2UsICpmb3VuZDsKKyAgc3RydWN0IGluYW1lICppZl90bXA7CisgIAorICBpZiAoIWRhZW1vbi0+aWZfbmFtZXMpCisgICAgcmV0dXJuIE5VTEw7CisgIAorICBmb3IgKGlmX3RtcCA9IGRhZW1vbi0+aWZfbmFtZXM7IGlmX3RtcDsgaWZfdG1wID0gaWZfdG1wLT5uZXh0KQorICAgIGlmIChpZl90bXAtPm5hbWUgJiYgKCFpZl90bXAtPnVzZWQgfHwgc3RyY2hyKGlmX3RtcC0+bmFtZSwgJyonKSkpCisgICAgICByZXR1cm4gTlVMTDsKKworICBmb3IgKGZvdW5kID0gTlVMTCwgaWZhY2UgPSBkYWVtb24tPmludGVyZmFjZXM7IGlmYWNlOyBpZmFjZSA9IGlmYWNlLT5uZXh0KQorICAgIGlmIChpZmFjZS0+ZGhjcF9vaykKKyAgICAgIHsKKwlpZiAoIWZvdW5kKQorCSAgZm91bmQgPSBpZmFjZTsKKwllbHNlIGlmIChzdHJjbXAoZm91bmQtPm5hbWUsIGlmYWNlLT5uYW1lKSAhPSAwKSAKKwkgIHJldHVybiBOVUxMOyAvKiBtb3JlIHRoYW4gb25lLiAqLworICAgICAgfQorCisgIGlmIChmb3VuZCkKKyAgICByZXR1cm4gZm91bmQtPm5hbWU7CisKKyAgcmV0dXJuIE5VTEw7Cit9CisgCit2b2lkICBiaW5kdG9kZXZpY2UoY2hhciAqZGV2aWNlLCBpbnQgZmQpCit7CisgIHN0cnVjdCBpZnJlcSBpZnI7CisgIAorICBzdHJjcHkoaWZyLmlmcl9uYW1lLCBkZXZpY2UpOworICAvKiBvbmx5IGFsbG93ZWQgYnkgcm9vdC4gKi8KKyAgaWYgKHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX0JJTkRUT0RFVklDRSwgKHZvaWQgKikmaWZyLCBzaXplb2YoaWZyKSkgPT0gLTEgJiYKKyAgICAgIGVycm5vICE9IEVQRVJNKQorICAgIGRpZShfKCJmYWlsZWQgdG8gc2V0IFNPX0JJTkRUT0RFVklDRSBvbiBESENQIHNvY2tldDogJXMiKSwgTlVMTCwgRUNfQkFETkVUKTsKK30KKyNlbmRpZgorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9wdHRhYl90IHsKKyAgY2hhciAqbmFtZTsKKyAgdTE2IHZhbCwgc2l6ZTsKK30gb3B0dGFiW10gPSB7CisgIHsgIm5ldG1hc2siLCAxLCBPVF9BRERSX0xJU1QgfSwKKyAgeyAidGltZS1vZmZzZXQiLCAyLCA0IH0sCisgIHsgInJvdXRlciIsIDMsIE9UX0FERFJfTElTVCAgfSwKKyAgeyAiZG5zLXNlcnZlciIsIDYsIE9UX0FERFJfTElTVCB9LAorICB7ICJsb2ctc2VydmVyIiwgNywgT1RfQUREUl9MSVNUIH0sCisgIHsgImxwci1zZXJ2ZXIiLCA5LCBPVF9BRERSX0xJU1QgfSwKKyAgeyAiaG9zdG5hbWUiLCAxMiwgT1RfSU5URVJOQUwgfCBPVF9OQU1FIH0sCisgIHsgImJvb3QtZmlsZS1zaXplIiwgMTMsIDIgfCBPVF9ERUMgfSwKKyAgeyAiZG9tYWluLW5hbWUiLCAxNSwgT1RfTkFNRSB9LAorICB7ICJzd2FwLXNlcnZlciIsIDE2LCBPVF9BRERSX0xJU1QgfSwKKyAgeyAicm9vdC1wYXRoIiwgMTcsIE9UX05BTUUgfSwKKyAgeyAiZXh0ZW5zaW9uLXBhdGgiLCAxOCwgT1RfTkFNRSB9LAorICB7ICJpcC1mb3J3YXJkLWVuYWJsZSIsIDE5LCAxIH0sCisgIHsgIm5vbi1sb2NhbC1zb3VyY2Utcm91dGluZyIsIDIwLCAxIH0sCisgIHsgInBvbGljeS1maWx0ZXIiLCAyMSwgT1RfQUREUl9MSVNUIH0sCisgIHsgIm1heC1kYXRhZ3JhbS1yZWFzc2VtYmx5IiwgMjIsIDIgfCBPVF9ERUMgfSwKKyAgeyAiZGVmYXVsdC10dGwiLCAyMywgMSB8IE9UX0RFQyB9LAorICB7ICJtdHUiLCAyNiwgMiB8IE9UX0RFQyB9LAorICB7ICJhbGwtc3VibmV0cy1sb2NhbCIsIDI3LCAxIH0sCisgIHsgImJyb2FkY2FzdCIsIDI4LCBPVF9JTlRFUk5BTCB8IE9UX0FERFJfTElTVCB9LAorICB7ICJyb3V0ZXItZGlzY292ZXJ5IiwgMzEsIDEgfSwKKyAgeyAicm91dGVyLXNvbGljaXRhdGlvbiIsIDMyLCBPVF9BRERSX0xJU1QgfSwKKyAgeyAic3RhdGljLXJvdXRlIiwgMzMsIE9UX0FERFJfTElTVCB9LAorICB7ICJ0cmFpbGVyLWVuY2Fwc3VsYXRpb24iLCAzNCwgMSB9LAorICB7ICJhcnAtdGltZW91dCIsIDM1LCA0IHwgT1RfREVDIH0sCisgIHsgImV0aGVybmV0LWVuY2FwIiwgMzYsIDEgfSwKKyAgeyAidGNwLXR0bCIsIDM3LCAxIH0sCisgIHsgInRjcC1rZWVwYWxpdmUiLCAzOCwgNCB8IE9UX0RFQyB9LAorICB7ICJuaXMtZG9tYWluIiwgNDAsIE9UX05BTUUgfSwKKyAgeyAibmlzLXNlcnZlciIsIDQxLCBPVF9BRERSX0xJU1QgfSwKKyAgeyAibnRwLXNlcnZlciIsIDQyLCBPVF9BRERSX0xJU1QgfSwKKyAgeyAidmVuZG9yLWVuY2FwIiwgNDMsIE9UX0lOVEVSTkFMIH0sCisgIHsgIm5ldGJpb3MtbnMiLCA0NCwgT1RfQUREUl9MSVNUIH0sCisgIHsgIm5ldGJpb3MtZGQiLCA0NSwgT1RfQUREUl9MSVNUIH0sCisgIHsgIm5ldGJpb3Mtbm9kZXR5cGUiLCA0NiwgMSB9LAorICB7ICJuZXRiaW9zLXNjb3BlIiwgNDcsIDAgfSwKKyAgeyAieC13aW5kb3dzLWZzIiwgNDgsIE9UX0FERFJfTElTVCB9LAorICB7ICJ4LXdpbmRvd3MtZG0iLCA0OSwgT1RfQUREUl9MSVNUIH0sCisgIHsgInJlcXVlc3RlZC1hZGRyZXNzIiwgNTAsIE9UX0lOVEVSTkFMIHwgT1RfQUREUl9MSVNUIH0sCisgIHsgImxlYXNlLXRpbWUiLCA1MSwgT1RfSU5URVJOQUwgfCBPVF9USU1FIH0sCisgIHsgIm9wdGlvbi1vdmVybG9hZCIsIDUyLCBPVF9JTlRFUk5BTCB9LAorICB7ICJtZXNzYWdlLXR5cGUiLCA1MywgT1RfSU5URVJOQUwgfCBPVF9ERUMgfSwKKyAgeyAic2VydmVyLWlkZW50aWZpZXIiLCA1NCwgT1RfSU5URVJOQUwgfCBPVF9BRERSX0xJU1QgfSwKKyAgeyAicGFyYW1ldGVyLXJlcXVlc3QiLCA1NSwgT1RfSU5URVJOQUwgfSwKKyAgeyAibWVzc2FnZSIsIDU2LCBPVF9JTlRFUk5BTCB9LAorICB7ICJtYXgtbWVzc2FnZS1zaXplIiwgNTcsIE9UX0lOVEVSTkFMIH0sCisgIHsgIlQxIiwgNTgsIE9UX1RJTUV9LAorICB7ICJUMiIsIDU5LCBPVF9USU1FfSwKKyAgeyAidmVuZG9yLWNsYXNzIiwgNjAsIDAgfSwKKyAgeyAiY2xpZW50LWlkIiwgNjEsIE9UX0lOVEVSTkFMIH0sCisgIHsgIm5pcystZG9tYWluIiwgNjQsIE9UX05BTUUgfSwKKyAgeyAibmlzKy1zZXJ2ZXIiLCA2NSwgT1RfQUREUl9MSVNUIH0sCisgIHsgInRmdHAtc2VydmVyIiwgNjYsIE9UX05BTUUgfSwKKyAgeyAiYm9vdGZpbGUtbmFtZSIsIDY3LCBPVF9OQU1FIH0sCisgIHsgIm1vYmlsZS1pcC1ob21lIiwgNjgsIE9UX0FERFJfTElTVCB9LCAKKyAgeyAic210cC1zZXJ2ZXIiLCA2OSwgT1RfQUREUl9MSVNUIH0sIAorICB7ICJwb3AzLXNlcnZlciIsIDcwLCBPVF9BRERSX0xJU1QgfSwgCisgIHsgIm5udHAtc2VydmVyIiwgNzEsIE9UX0FERFJfTElTVCB9LCAKKyAgeyAiaXJjLXNlcnZlciIsIDc0LCBPVF9BRERSX0xJU1QgfSwgCisgIHsgInVzZXItY2xhc3MiLCA3NywgMCB9LAorICB7ICJGUUROIiwgODEsIE9UX0lOVEVSTkFMIH0sCisgIHsgImFnZW50LWlkIiwgODIsIE9UX0lOVEVSTkFMIH0sCisgIHsgImNsaWVudC1hcmNoIiwgOTMsIDIgfCBPVF9ERUMgfSwKKyAgeyAiY2xpZW50LWludGVyZmFjZS1pZCIsIDk0LCAwIH0sCisgIHsgImNsaWVudC1tYWNoaW5lLWlkIiwgOTcsIDAgfSwKKyAgeyAic3VibmV0LXNlbGVjdCIsIDExOCwgT1RfSU5URVJOQUwgfSwKKyAgeyAiZG9tYWluLXNlYXJjaCIsIDExOSwgT1RfUkZDMTAzNV9OQU1FIH0sCisgIHsgInNpcC1zZXJ2ZXIiLCAxMjAsIDAgfSwKKyAgeyAiY2xhc3NsZXNzLXN0YXRpYy1yb3V0ZSIsIDEyMSwgMCB9LAorICB7ICJ2ZW5kb3ItaWQtZW5jYXAiLCAxMjUsIDAgfSwKKyAgeyAic2VydmVyLWlwLWFkZHJlc3MiLCAyNTUsIE9UX0FERFJfTElTVCB9LCAvKiBzcGVjaWFsLCBpbnRlcm5hbCBvbmx5LCBzZXRzIHNpYWRkciAqLworICB7IE5VTEwsIDAsIDAgfQorfTsKKworI2lmZGVmIEhBVkVfREhDUDYKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0dGFiX3Qgb3B0dGFiNltdID0geworICB7ICJjbGllbnQtaWQiLCAxLCBPVF9JTlRFUk5BTCB9LAorICB7ICJzZXJ2ZXItaWQiLCAyLCBPVF9JTlRFUk5BTCB9LAorICB7ICJpYS1uYSIsIDMsIE9UX0lOVEVSTkFMIH0sCisgIHsgImlhLXRhIiwgNCwgT1RfSU5URVJOQUwgfSwKKyAgeyAiaWFhZGRyIiwgNSwgT1RfSU5URVJOQUwgfSwKKyAgeyAib3JvIiwgNiwgT1RfSU5URVJOQUwgfSwKKyAgeyAicHJlZmVyZW5jZSIsIDcsIE9UX0lOVEVSTkFMIHwgT1RfREVDIH0sCisgIHsgInVuaWNhc3QiLCAxMiwgT1RfSU5URVJOQUwgfSwKKyAgeyAic3RhdHVzIiwgMTMsIE9UX0lOVEVSTkFMIH0sCisgIHsgInJhcGlkLWNvbW1pdCIsIDE0LCBPVF9JTlRFUk5BTCB9LAorICB7ICJ1c2VyLWNsYXNzIiwgMTUsIE9UX0lOVEVSTkFMIHwgT1RfQ1NUUklORyB9LAorICB7ICJ2ZW5kb3ItY2xhc3MiLCAxNiwgT1RfSU5URVJOQUwgfCBPVF9DU1RSSU5HIH0sCisgIHsgInZlbmRvci1vcHRzIiwgMTcsIE9UX0lOVEVSTkFMIH0sCisgIHsgInNpcC1zZXJ2ZXItZG9tYWluIiwgMjEsICBPVF9SRkMxMDM1X05BTUUgfSwKKyAgeyAic2lwLXNlcnZlciIsIDIyLCBPVF9BRERSX0xJU1QgfSwKKyAgeyAiZG5zLXNlcnZlciIsIDIzLCBPVF9BRERSX0xJU1QgfSwKKyAgeyAiZG9tYWluLXNlYXJjaCIsIDI0LCBPVF9SRkMxMDM1X05BTUUgfSwKKyAgeyAibmlzLXNlcnZlciIsIDI3LCBPVF9BRERSX0xJU1QgfSwKKyAgeyAibmlzKy1zZXJ2ZXIiLCAyOCwgT1RfQUREUl9MSVNUIH0sCisgIHsgIm5pcy1kb21haW4iLCAyOSwgIE9UX1JGQzEwMzVfTkFNRSB9LAorICB7ICJuaXMrLWRvbWFpbiIsIDMwLCBPVF9SRkMxMDM1X05BTUUgfSwKKyAgeyAic250cC1zZXJ2ZXIiLCAzMSwgIE9UX0FERFJfTElTVCB9LAorICB7ICJpbmZvcm1hdGlvbi1yZWZyZXNoLXRpbWUiLCAzMiwgT1RfVElNRSB9LAorICB7ICJGUUROIiwgMzksIE9UX0lOVEVSTkFMIHwgT1RfUkZDMTAzNV9OQU1FIH0sCisgIHsgIm50cC1zZXJ2ZXIiLCA1NiwgIDAgfSwKKyAgeyAiYm9vdGZpbGUtdXJsIiwgNTksIE9UX05BTUUgfSwKKyAgeyAiYm9vdGZpbGUtcGFyYW0iLCA2MCwgT1RfQ1NUUklORyB9LAorICB7IE5VTEwsIDAsIDAgfQorfTsKKyNlbmRpZgorCisKKwordm9pZCBkaXNwbGF5X29wdHModm9pZCkKK3sKKyAgaW50IGk7CisgIAorICBwcmludGYoXygiS25vd24gREhDUCBvcHRpb25zOlxuIikpOworICAKKyAgZm9yIChpID0gMDsgb3B0dGFiW2ldLm5hbWU7IGkrKykKKyAgICBpZiAoIShvcHR0YWJbaV0uc2l6ZSAmIE9UX0lOVEVSTkFMKSkKKyAgICAgIHByaW50ZigiJTNkICVzXG4iLCBvcHR0YWJbaV0udmFsLCBvcHR0YWJbaV0ubmFtZSk7Cit9CisKKyNpZmRlZiBIQVZFX0RIQ1A2Cit2b2lkIGRpc3BsYXlfb3B0czYodm9pZCkKK3sKKyAgaW50IGk7CisgIHByaW50ZihfKCJLbm93biBESENQdjYgb3B0aW9uczpcbiIpKTsKKyAgCisgIGZvciAoaSA9IDA7IG9wdHRhYjZbaV0ubmFtZTsgaSsrKQorICAgIGlmICghKG9wdHRhYjZbaV0uc2l6ZSAmIE9UX0lOVEVSTkFMKSkKKyAgICAgIHByaW50ZigiJTNkICVzXG4iLCBvcHR0YWI2W2ldLnZhbCwgb3B0dGFiNltpXS5uYW1lKTsKK30KKyNlbmRpZgorCitpbnQgbG9va3VwX2RoY3Bfb3B0KGludCBwcm90LCBjaGFyICpuYW1lKQoreworICBjb25zdCBzdHJ1Y3Qgb3B0dGFiX3QgKnQ7CisgIGludCBpOworCisgICh2b2lkKXByb3Q7CisKKyNpZmRlZiBIQVZFX0RIQ1A2CisgIGlmIChwcm90ID09IEFGX0lORVQ2KQorICAgIHQgPSBvcHR0YWI2OworICBlbHNlCisjZW5kaWYKKyAgICB0ID0gb3B0dGFiOworCisgIGZvciAoaSA9IDA7IHRbaV0ubmFtZTsgaSsrKQorICAgIGlmIChzdHJjYXNlY21wKHRbaV0ubmFtZSwgbmFtZSkgPT0gMCkKKyAgICAgIHJldHVybiB0W2ldLnZhbDsKKyAgCisgIHJldHVybiAtMTsKK30KKworaW50IGxvb2t1cF9kaGNwX2xlbihpbnQgcHJvdCwgaW50IHZhbCkKK3sKKyAgY29uc3Qgc3RydWN0IG9wdHRhYl90ICp0OworICBpbnQgaTsKKworICAodm9pZClwcm90OworCisjaWZkZWYgSEFWRV9ESENQNgorICBpZiAocHJvdCA9PSBBRl9JTkVUNikKKyAgICB0ID0gb3B0dGFiNjsKKyAgZWxzZQorI2VuZGlmCisgICAgdCA9IG9wdHRhYjsKKworICBmb3IgKGkgPSAwOyB0W2ldLm5hbWU7IGkrKykKKyAgICBpZiAodmFsID09IHRbaV0udmFsKQorICAgICAgcmV0dXJuIHRbaV0uc2l6ZSAmIH5PVF9ERUM7CisKKyAgIHJldHVybiAwOworfQorCitjaGFyICpvcHRpb25fc3RyaW5nKGludCBwcm90LCB1bnNpZ25lZCBpbnQgb3B0LCB1bnNpZ25lZCBjaGFyICp2YWwsIGludCBvcHRfbGVuLCBjaGFyICpidWYsIGludCBidWZfbGVuKQoreworICBpbnQgbywgaSwgaiwgbm9kZWNvZGUgPSAwOworICBjb25zdCBzdHJ1Y3Qgb3B0dGFiX3QgKm90ID0gb3B0dGFiOworCisjaWZkZWYgSEFWRV9ESENQNgorICBpZiAocHJvdCA9PSBBRl9JTkVUNikKKyAgICBvdCA9IG9wdHRhYjY7CisjZW5kaWYKKworICBmb3IgKG8gPSAwOyBvdFtvXS5uYW1lOyBvKyspCisgICAgaWYgKG90W29dLnZhbCA9PSBvcHQpCisgICAgICB7CisJaWYgKGJ1ZikKKwkgIHsKKwkgICAgbWVtc2V0KGJ1ZiwgMCwgYnVmX2xlbik7CisJICAgIAorCSAgICBpZiAob3Rbb10uc2l6ZSAmIE9UX0FERFJfTElTVCkgCisJICAgICAgeworCQlzdHJ1Y3QgYWxsX2FkZHIgYWRkcjsKKwkJaW50IGFkZHJfbGVuID0gSU5BRERSU1o7CisKKyNpZmRlZiBIQVZFX0RIQ1A2CisJCWlmIChwcm90ID09IEFGX0lORVQ2KQorCQkgIGFkZHJfbGVuID0gSU42QUREUlNaOworI2VuZGlmCisJCWZvciAoYnVmWzBdPSAwLCBpID0gMDsgaSA8PSBvcHRfbGVuIC0gYWRkcl9sZW47IGkgKz0gYWRkcl9sZW4pIAorCQkgIHsKKwkJICAgIGlmIChpICE9IDApCisJCSAgICAgIHN0cm5jYXQoYnVmLCAiLCAiLCBidWZfbGVuIC0gc3RybGVuKGJ1ZikpOworCQkgICAgLyogYWxpZ24gKi8KKwkJICAgIG1lbWNweSgmYWRkciwgJnZhbFtpXSwgYWRkcl9sZW4pOyAKKwkJICAgIGluZXRfbnRvcChwcm90LCAmdmFsW2ldLCBkYWVtb24tPmFkZHJidWZmLCBBRERSU1RSTEVOKTsKKwkJICAgIHN0cm5jYXQoYnVmLCBkYWVtb24tPmFkZHJidWZmLCBidWZfbGVuIC0gc3RybGVuKGJ1ZikpOworCQkgIH0KKwkgICAgICB9CisJICAgIGVsc2UgaWYgKG90W29dLnNpemUgJiBPVF9OQU1FKQorCQlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IG9wdF9sZW4gJiYgaiA8IGJ1Zl9sZW4gOyBpKyspCisJCSAgeworCQkgICAgY2hhciBjID0gdmFsW2ldOworCQkgICAgaWYgKGlzcHJpbnQoKGludCljKSkKKwkJICAgICAgYnVmW2orK10gPSBjOworCQkgIH0KKyNpZmRlZiBIQVZFX0RIQ1A2CisJICAgIC8qIFdlIGRvbid0IGhhbmRsZSBjb21wcmVzc2VkIHJmYzEwMzUgbmFtZXMsIHNvIG5vIGdvb2QgaW4gSVB2NCBsYW5kICovCisJICAgIGVsc2UgaWYgKChvdFtvXS5zaXplICYgT1RfUkZDMTAzNV9OQU1FKSAmJiBwcm90ID09IEFGX0lORVQ2KQorCSAgICAgIHsKKwkJaSA9IDAsIGogPSAwOworCQl3aGlsZSAoaSA8IG9wdF9sZW4gJiYgdmFsW2ldICE9IDApCisJCSAgeworCQkgICAgaW50IGssIGwgPSBpICsgdmFsW2ldICsgMTsKKwkJICAgIGZvciAoayA9IGkgKyAxOyBrIDwgb3B0X2xlbiAmJiBrIDwgbCAmJiBqIDwgYnVmX2xlbiA7IGsrKykKKwkJICAgICB7CisJCSAgICAgICBjaGFyIGMgPSB2YWxba107CisJCSAgICAgICBpZiAoaXNwcmludCgoaW50KWMpKQorCQkJIGJ1ZltqKytdID0gYzsKKwkJICAgICB9CisJCSAgICBpID0gbDsKKwkJICAgIGlmICh2YWxbaV0gIT0gMCAmJiBqIDwgYnVmX2xlbikKKwkJICAgICAgYnVmW2orK10gPSAnLic7CisJCSAgfQorCSAgICAgIH0KKwkgICAgZWxzZSBpZiAoKG90W29dLnNpemUgJiBPVF9DU1RSSU5HKSkKKwkgICAgICB7CisJCWludCBrLCBsZW47CisJCXVuc2lnbmVkIGNoYXIgKnA7CisKKwkJaSA9IDAsIGogPSAwOworCQl3aGlsZSAoMSkKKwkJICB7CisJCSAgICBwID0gJnZhbFtpXTsKKwkJICAgIEdFVFNIT1JUKGxlbiwgcCk7CisJCSAgICBmb3IgKGsgPSAwOyBrIDwgbGVuICYmIGogPCBidWZfbGVuOyBrKyspCisJCSAgICAgIHsKKwkJICAgICAgIGNoYXIgYyA9ICpwKys7CisJCSAgICAgICBpZiAoaXNwcmludCgoaW50KWMpKQorCQkJIGJ1ZltqKytdID0gYzsKKwkJICAgICB9CisJCSAgICBpICs9IGxlbiArMjsKKwkJICAgIGlmIChpID49IG9wdF9sZW4pCisJCSAgICAgIGJyZWFrOworCisJCSAgICBpZiAoaiA8IGJ1Zl9sZW4pCisJCSAgICAgIGJ1ZltqKytdID0gJywnOworCQkgIH0KKwkgICAgICB9CSAgICAgIAorI2VuZGlmCisJICAgIGVsc2UgaWYgKChvdFtvXS5zaXplICYgKE9UX0RFQyB8IE9UX1RJTUUpKSAmJiBvcHRfbGVuICE9IDApCisJICAgICAgeworCQl1bnNpZ25lZCBpbnQgZGVjID0gMDsKKwkJCisJCWZvciAoaSA9IDA7IGkgPCBvcHRfbGVuOyBpKyspCisJCSAgZGVjID0gKGRlYyA8PCA4KSB8IHZhbFtpXTsgCisKKwkJaWYgKG90W29dLnNpemUgJiBPVF9USU1FKQorCQkgIHByZXR0eXByaW50X3RpbWUoYnVmLCBkZWMpOworCQllbHNlCisJCSAgc3ByaW50ZihidWYsICIldSIsIGRlYyk7CisJICAgICAgfQorCSAgICBlbHNlCisJICAgICAgbm9kZWNvZGUgPSAxOworCSAgfQorCWJyZWFrOworICAgICAgfQorCisgIGlmIChvcHRfbGVuICE9IDAgJiYgYnVmICYmICghb3Rbb10ubmFtZSB8fCBub2RlY29kZSkpCisgICAgeworICAgICAgaW50IHRydW5jICA9IDA7CisgICAgICBpZiAob3B0X2xlbiA+IDE0KQorCXsKKwkgIHRydW5jID0gMTsKKwkgIG9wdF9sZW4gPSAxNDsKKwl9CisgICAgICBwcmludF9tYWMoYnVmLCB2YWwsIG9wdF9sZW4pOworICAgICAgaWYgKHRydW5jKQorCXN0cm5jYXQoYnVmLCAiLi4uIiwgYnVmX2xlbiAtIHN0cmxlbihidWYpKTsKKyAgICAKKworICAgIH0KKworICByZXR1cm4gb3Rbb10ubmFtZSA/IG90W29dLm5hbWUgOiAiIjsKKworfQorCit2b2lkIGxvZ19jb250ZXh0KGludCBmYW1pbHksIHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQpCit7CisgIC8qIENhbm5vdCB1c2UgZGhjcF9idWZmKiBmb3IgUkEgY29udGV4dHMgKi8KKworICB2b2lkICpzdGFydCA9ICZjb250ZXh0LT5zdGFydDsKKyAgdm9pZCAqZW5kID0gJmNvbnRleHQtPmVuZDsKKyAgY2hhciAqdGVtcGxhdGUgPSAiIiwgKnAgPSBkYWVtb24tPm5hbWVidWZmOworICAKKyAgKnAgPSAwOworICAgIAorI2lmZGVmIEhBVkVfREhDUDYKKyAgaWYgKGZhbWlseSA9PSBBRl9JTkVUNikKKyAgICB7CisgICAgICBzdHJ1Y3QgaW42X2FkZHIgc3VibmV0ID0gY29udGV4dC0+c3RhcnQ2OworICAgICAgaWYgKCEoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX1RFTVBMQVRFKSkKKwlzZXRhZGRyNnBhcnQoJnN1Ym5ldCwgMCk7CisgICAgICBpbmV0X250b3AoQUZfSU5FVDYsICZzdWJuZXQsIGRhZW1vbi0+YWRkcmJ1ZmYsIEFERFJTVFJMRU4pOyAKKyAgICAgIHN0YXJ0ID0gJmNvbnRleHQtPnN0YXJ0NjsKKyAgICAgIGVuZCA9ICZjb250ZXh0LT5lbmQ2OworICAgIH0KKyNlbmRpZgorCisgIGlmIChmYW1pbHkgIT0gQUZfSU5FVCAmJiAoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX0RFUFJFQ0FURSkpCisgICAgc3RyY3B5KGRhZW1vbi0+bmFtZWJ1ZmYsIF8oIiwgcHJlZml4IGRlcHJlY2F0ZWQiKSk7CisgIGVsc2UKKyAgICB7CisgICAgICBwICs9IHNwcmludGYocCwgXygiLCBsZWFzZSB0aW1lICIpKTsKKyAgICAgIHByZXR0eXByaW50X3RpbWUocCwgY29udGV4dC0+bGVhc2VfdGltZSk7CisgICAgICBwICs9IHN0cmxlbihwKTsKKyAgICB9CQorCisjaWZkZWYgSEFWRV9ESENQNgorICBpZiAoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX0NPTlNUUlVDVEVEKQorICAgIHsKKyAgICAgIGNoYXIgaWZybl9uYW1lW0lGTkFNU0laXTsKKyAgICAgIAorICAgICAgdGVtcGxhdGUgPSBwOworICAgICAgcCArPSBzcHJpbnRmKHAsICIsICIpOworICAgICAgCisgICAgICBpZiAoaW5kZXh0b25hbWUoZGFlbW9uLT5pY21wNmZkLCBjb250ZXh0LT5pZl9pbmRleCwgaWZybl9uYW1lKSkKKwlzcHJpbnRmKHAsICIlcyBmb3IgJXMiLCAoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX09MRCkgPyAib2xkIHByZWZpeCIgOiAiY29uc3RydWN0ZWQiLCBpZnJuX25hbWUpOworICAgIH0KKyAgZWxzZSBpZiAoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX1RFTVBMQVRFICYmICEoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX1JBX1NUQVRFTEVTUykpCisgICAgeworICAgICAgdGVtcGxhdGUgPSBwOworICAgICAgcCArPSBzcHJpbnRmKHAsICIsICIpOworICAgICAgCisgICAgICBzcHJpbnRmKHAsICJ0ZW1wbGF0ZSBmb3IgJXMiLCBjb250ZXh0LT50ZW1wbGF0ZV9pbnRlcmZhY2UpOyAgCisgICAgfQorI2VuZGlmCisgICAgIAorICBpZiAoIShjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfT0xEKSAmJgorICAgICAgKChjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfREhDUCkgfHwgZmFtaWx5ID09IEFGX0lORVQpKSAKKyAgICB7CisjaWZkZWYgSEFWRV9ESENQNgorICAgICAgaWYgKGNvbnRleHQtPmZsYWdzICYgQ09OVEVYVF9SQV9TVEFURUxFU1MpCisJeworCSAgaWYgKGNvbnRleHQtPmZsYWdzICYgQ09OVEVYVF9URU1QTEFURSkKKwkgICAgc3RybmNweShkYWVtb24tPmRoY3BfYnVmZiwgY29udGV4dC0+dGVtcGxhdGVfaW50ZXJmYWNlLCBESENQX0JVRkZfU1opOworCSAgZWxzZQorCSAgICBzdHJjcHkoZGFlbW9uLT5kaGNwX2J1ZmYsIGRhZW1vbi0+YWRkcmJ1ZmYpOworCX0KKyAgICAgIGVsc2UgCisjZW5kaWYKKwlpbmV0X250b3AoZmFtaWx5LCBzdGFydCwgZGFlbW9uLT5kaGNwX2J1ZmYsIERIQ1BfQlVGRl9TWik7CisgICAgICBpbmV0X250b3AoZmFtaWx5LCBlbmQsIGRhZW1vbi0+ZGhjcF9idWZmMywgREhDUF9CVUZGX1NaKTsKKyAgICAgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX0lORk8sIAorCQkoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX1JBX1NUQVRFTEVTUykgPyAKKwkJXygiJXMgc3RhdGVsZXNzIG9uICVzJS4wcyUuMHMlcyIpIDoKKwkJKGNvbnRleHQtPmZsYWdzICYgQ09OVEVYVF9TVEFUSUMpID8gCisJCV8oIiVzLCBzdGF0aWMgbGVhc2VzIG9ubHkgb24gJS4wcyVzJXMlLjBzIikgOgorCQkoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX1BST1hZKSA/CisJCV8oIiVzLCBwcm94eSBvbiBzdWJuZXQgJS4wcyVzJS4wcyUuMHMiKSA6CisJCV8oIiVzLCBJUCByYW5nZSAlcyAtLSAlcyVzJS4wcyIpLAorCQkoZmFtaWx5ICE9IEFGX0lORVQpID8gIkRIQ1B2NiIgOiAiREhDUCIsCisJCWRhZW1vbi0+ZGhjcF9idWZmLCBkYWVtb24tPmRoY3BfYnVmZjMsIGRhZW1vbi0+bmFtZWJ1ZmYsIHRlbXBsYXRlKTsKKyAgICB9CisgIAorI2lmZGVmIEhBVkVfREhDUDYKKyAgaWYgKGNvbnRleHQtPmZsYWdzICYgQ09OVEVYVF9URU1QTEFURSkKKyAgICB7CisgICAgICBzdHJjcHkoZGFlbW9uLT5hZGRyYnVmZiwgY29udGV4dC0+dGVtcGxhdGVfaW50ZXJmYWNlKTsKKyAgICAgIHRlbXBsYXRlID0gIiI7CisgICAgfQorCisgIGlmICgoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX1JBX05BTUUpICYmICEoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX09MRCkpCisgICAgbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfSU5GTywgXygiREhDUHY0LWRlcml2ZWQgSVB2NiBuYW1lcyBvbiAlcyVzIiksIGRhZW1vbi0+YWRkcmJ1ZmYsIHRlbXBsYXRlKTsKKyAgCisgIGlmICgoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX1JBKSB8fCAob3B0aW9uX2Jvb2woT1BUX1JBKSAmJiAoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX0RIQ1ApICYmIGZhbWlseSA9PSBBRl9JTkVUNikpIAorICAgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX0lORk8sIF8oInJvdXRlciBhZHZlcnRpc2VtZW50IG9uICVzJXMiKSwgZGFlbW9uLT5hZGRyYnVmZiwgdGVtcGxhdGUpOworI2VuZGlmCisKK30KKwordm9pZCBsb2dfcmVsYXkoaW50IGZhbWlseSwgc3RydWN0IGRoY3BfcmVsYXkgKnJlbGF5KQoreworICBpbmV0X250b3AoZmFtaWx5LCAmcmVsYXktPmxvY2FsLCBkYWVtb24tPmFkZHJidWZmLCBBRERSU1RSTEVOKTsKKyAgaW5ldF9udG9wKGZhbWlseSwgJnJlbGF5LT5zZXJ2ZXIsIGRhZW1vbi0+bmFtZWJ1ZmYsIEFERFJTVFJMRU4pOyAKKworICBpZiAocmVsYXktPmludGVyZmFjZSkKKyAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19JTkZPLCBfKCJESENQIHJlbGF5IGZyb20gJXMgdG8gJXMgdmlhICVzIiksIGRhZW1vbi0+YWRkcmJ1ZmYsIGRhZW1vbi0+bmFtZWJ1ZmYsIHJlbGF5LT5pbnRlcmZhY2UpOworICBlbHNlCisgICAgbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfSU5GTywgXygiREhDUCByZWxheSBmcm9tICVzIHRvICVzIiksIGRhZW1vbi0+YWRkcmJ1ZmYsIGRhZW1vbi0+bmFtZWJ1ZmYpOworfQorICAgCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9kaGNwLXByb3RvY29sLmggYi9zcmMvZGhjcC1wcm90b2NvbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ODZmODcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZGhjcC1wcm90b2NvbC5oCkBAIC0wLDAgKzEsMTAwIEBACisvKiBkbnNtYXNxIGlzIENvcHlyaWdodCAoYykgMjAwMC0yMDE3IFNpbW9uIEtlbGxleQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMgZGF0ZWQgMjkgSnVuZSwgMjAwNy4KKyAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKyNkZWZpbmUgREhDUF9TRVJWRVJfUE9SVCA2NworI2RlZmluZSBESENQX0NMSUVOVF9QT1JUIDY4CisjZGVmaW5lIERIQ1BfU0VSVkVSX0FMVFBPUlQgMTA2NworI2RlZmluZSBESENQX0NMSUVOVF9BTFRQT1JUIDEwNjgKKyNkZWZpbmUgUFhFX1BPUlQgNDAxMQorCisvKiBUaGVzZSBlYWNoIGhvbGQgYSBESENQIG9wdGlvbiBtYXggc2l6ZSAyNTUKKyAgIGFuZCBnZXQgYSB0ZXJtaW5hdGluZyB6ZXJvIGFkZGVkICovCisjZGVmaW5lIERIQ1BfQlVGRl9TWiAyNTYKKworI2RlZmluZSBCT09UUkVRVUVTVCAgICAgICAgICAgICAgMQorI2RlZmluZSBCT09UUkVQTFkgICAgICAgICAgICAgICAgMgorI2RlZmluZSBESENQX0NPT0tJRSAgICAgICAgICAgICAgMHg2MzgyNTM2MworCisvKiBUaGUgTGludXggaW4ta2VybmVsIERIQ1AgY2xpZW50IHNpbGVudGx5IGlnbm9yZXMgYW55IHBhY2tldCAKKyAgIHNtYWxsZXIgdGhhbiB0aGlzLiBTaWdoLi4uLi4uLi4uLi4gICAqLworI2RlZmluZSBNSU5fUEFDS0VUU1ogICAgICAgICAgICAgMzAwCisKKyNkZWZpbmUgT1BUSU9OX1BBRCAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgT1BUSU9OX05FVE1BU0sgICAgICAgICAgIDEKKyNkZWZpbmUgT1BUSU9OX1JPVVRFUiAgICAgICAgICAgIDMKKyNkZWZpbmUgT1BUSU9OX0ROU1NFUlZFUiAgICAgICAgIDYKKyNkZWZpbmUgT1BUSU9OX0hPU1ROQU1FICAgICAgICAgIDEyCisjZGVmaW5lIE9QVElPTl9ET01BSU5OQU1FICAgICAgICAxNQorI2RlZmluZSBPUFRJT05fQlJPQURDQVNUICAgICAgICAgMjgKKyNkZWZpbmUgT1BUSU9OX1ZFTkRPUl9DTEFTU19PUFQgIDQzCisjZGVmaW5lIE9QVElPTl9SRVFVRVNURURfSVAgICAgICA1MCAKKyNkZWZpbmUgT1BUSU9OX0xFQVNFX1RJTUUgICAgICAgIDUxCisjZGVmaW5lIE9QVElPTl9PVkVSTE9BRCAgICAgICAgICA1MgorI2RlZmluZSBPUFRJT05fTUVTU0FHRV9UWVBFICAgICAgNTMKKyNkZWZpbmUgT1BUSU9OX1NFUlZFUl9JREVOVElGSUVSIDU0CisjZGVmaW5lIE9QVElPTl9SRVFVRVNURURfT1BUSU9OUyA1NQorI2RlZmluZSBPUFRJT05fTUVTU0FHRSAgICAgICAgICAgNTYKKyNkZWZpbmUgT1BUSU9OX01BWE1FU1NBR0UgICAgICAgIDU3CisjZGVmaW5lIE9QVElPTl9UMSAgICAgICAgICAgICAgICA1OAorI2RlZmluZSBPUFRJT05fVDIgICAgICAgICAgICAgICAgNTkKKyNkZWZpbmUgT1BUSU9OX1ZFTkRPUl9JRCAgICAgICAgIDYwCisjZGVmaW5lIE9QVElPTl9DTElFTlRfSUQgICAgICAgICA2MQorI2RlZmluZSBPUFRJT05fU05BTUUgICAgICAgICAgICAgNjYKKyNkZWZpbmUgT1BUSU9OX0ZJTEVOQU1FICAgICAgICAgIDY3CisjZGVmaW5lIE9QVElPTl9VU0VSX0NMQVNTICAgICAgICA3NworI2RlZmluZSBPUFRJT05fQ0xJRU5UX0ZRRE4gICAgICAgODEKKyNkZWZpbmUgT1BUSU9OX0FHRU5UX0lEICAgICAgICAgIDgyCisjZGVmaW5lIE9QVElPTl9BUkNIICAgICAgICAgICAgICA5MworI2RlZmluZSBPUFRJT05fUFhFX1VVSUQgICAgICAgICAgOTcKKyNkZWZpbmUgT1BUSU9OX1NVQk5FVF9TRUxFQ1QgICAgIDExOAorI2RlZmluZSBPUFRJT05fRE9NQUlOX1NFQVJDSCAgICAgMTE5CisjZGVmaW5lIE9QVElPTl9TSVBfU0VSVkVSICAgICAgICAxMjAKKyNkZWZpbmUgT1BUSU9OX1ZFTkRPUl9JREVOVCAgICAgIDEyNAorI2RlZmluZSBPUFRJT05fVkVORE9SX0lERU5UX09QVCAgMTI1CisjZGVmaW5lIE9QVElPTl9FTkQgICAgICAgICAgICAgICAyNTUKKworI2RlZmluZSBTVUJPUFRfQ0lSQ1VJVF9JRCAgICAgICAgMQorI2RlZmluZSBTVUJPUFRfUkVNT1RFX0lEICAgICAgICAgMgorI2RlZmluZSBTVUJPUFRfU1VCTkVUX1NFTEVDVCAgICAgNSAgICAgLyogUkZDIDM1MjcgKi8KKyNkZWZpbmUgU1VCT1BUX1NVQlNDUl9JRCAgICAgICAgIDYgICAgIC8qIFJGQyAzMzkzICovCisjZGVmaW5lIFNVQk9QVF9TRVJWRVJfT1IgICAgICAgICAxMSAgICAvKiBSRkMgNTEwNyAqLworCisjZGVmaW5lIFNVQk9QVF9QWEVfQk9PVF9JVEVNICAgICA3MSAgICAvKiBQWEUgc3RhbmRhcmQgKi8KKyNkZWZpbmUgU1VCT1BUX1BYRV9ESVNDT1ZFUlkgICAgIDYKKyNkZWZpbmUgU1VCT1BUX1BYRV9TRVJWRVJTICAgICAgIDgKKyNkZWZpbmUgU1VCT1BUX1BYRV9NRU5VICAgICAgICAgIDkKKyNkZWZpbmUgU1VCT1BUX1BYRV9NRU5VX1BST01QVCAgIDEwCisKKyNkZWZpbmUgREhDUERJU0NPVkVSICAgICAgICAgICAgIDEKKyNkZWZpbmUgREhDUE9GRkVSICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgREhDUFJFUVVFU1QgICAgICAgICAgICAgIDMKKyNkZWZpbmUgREhDUERFQ0xJTkUgICAgICAgICAgICAgIDQKKyNkZWZpbmUgREhDUEFDSyAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgREhDUE5BSyAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgREhDUFJFTEVBU0UgICAgICAgICAgICAgIDcKKyNkZWZpbmUgREhDUElORk9STSAgICAgICAgICAgICAgIDgKKworI2RlZmluZSBCUkRCQU5EX0ZPUlVNX0lBTkEgICAgICAgMzU2MSAvKiBCcm9hZGJhbmQgZm9ydW0gSUFOQSBlbnRlcnByaXNlICovCisKKyNkZWZpbmUgREhDUF9DSEFERFJfTUFYIDE2CisKK3N0cnVjdCBkaGNwX3BhY2tldCB7CisgIHU4IG9wLCBodHlwZSwgaGxlbiwgaG9wczsKKyAgdTMyIHhpZDsKKyAgdTE2IHNlY3MsIGZsYWdzOworICBzdHJ1Y3QgaW5fYWRkciBjaWFkZHIsIHlpYWRkciwgc2lhZGRyLCBnaWFkZHI7CisgIHU4IGNoYWRkcltESENQX0NIQUREUl9NQVhdLCBzbmFtZVs2NF0sIGZpbGVbMTI4XTsKKyAgdTggb3B0aW9uc1szMTJdOworfTsKZGlmZiAtLWdpdCBhL3NyYy9kaGNwLmMgYi9zcmMvZGhjcC5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjlmNTBjNTkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZGhjcC5jCkBAIC0wLDAgKzEsMTA4MCBAQAorLyogZG5zbWFzcSBpcyBDb3B5cmlnaHQgKGMpIDIwMDAtMjAxNyBTaW1vbiBLZWxsZXkKKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgZGF0ZWQgSnVuZSwgMTk5MSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgdmVyc2lvbiAzIGRhdGVkIDI5IEp1bmUsIDIwMDcuCisgCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisKKyNpbmNsdWRlICJkbnNtYXNxLmgiCisKKyNpZmRlZiBIQVZFX0RIQ1AKKworc3RydWN0IGlmYWNlX3BhcmFtIHsKKyAgc3RydWN0IGRoY3BfY29udGV4dCAqY3VycmVudDsKKyAgc3RydWN0IGRoY3BfcmVsYXkgKnJlbGF5OworICBzdHJ1Y3QgaW5fYWRkciByZWxheV9sb2NhbDsKKyAgaW50IGluZDsKK307CisKK3N0cnVjdCBtYXRjaF9wYXJhbSB7CisgIGludCBpbmQsIG1hdGNoZWQ7CisgIHN0cnVjdCBpbl9hZGRyIG5ldG1hc2ssIGJyb2FkY2FzdCwgYWRkcjsKK307CisKK3N0YXRpYyBpbnQgY29tcGxldGVfY29udGV4dChzdHJ1Y3QgaW5fYWRkciBsb2NhbCwgaW50IGlmX2luZGV4LCBjaGFyICpsYWJlbCwKKwkJCSAgICBzdHJ1Y3QgaW5fYWRkciBuZXRtYXNrLCBzdHJ1Y3QgaW5fYWRkciBicm9hZGNhc3QsIHZvaWQgKnZwYXJhbSk7CitzdGF0aWMgaW50IGNoZWNrX2xpc3Rlbl9hZGRycyhzdHJ1Y3QgaW5fYWRkciBsb2NhbCwgaW50IGlmX2luZGV4LCBjaGFyICpsYWJlbCwKKwkJCSAgICAgIHN0cnVjdCBpbl9hZGRyIG5ldG1hc2ssIHN0cnVjdCBpbl9hZGRyIGJyb2FkY2FzdCwgdm9pZCAqdnBhcmFtKTsKK3N0YXRpYyBpbnQgcmVsYXlfdXBzdHJlYW00KHN0cnVjdCBkaGNwX3JlbGF5ICpyZWxheSwgc3RydWN0IGRoY3BfcGFja2V0ICptZXNzLCBzaXplX3Qgc3osIGludCBpZmFjZV9pbmRleCk7CitzdGF0aWMgc3RydWN0IGRoY3BfcmVsYXkgKnJlbGF5X3JlcGx5NChzdHJ1Y3QgZGhjcF9wYWNrZXQgKm1lc3MsIGNoYXIgKmFycml2YWxfaW50ZXJmYWNlKTsKKworc3RhdGljIGludCBtYWtlX2ZkKGludCBwb3J0KQoreworICBpbnQgZmQgPSBzb2NrZXQoUEZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApOworICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2FkZHI7CisgIGludCBvbmVvcHQgPSAxOworI2lmIGRlZmluZWQoSVBfTVRVX0RJU0NPVkVSKSAmJiBkZWZpbmVkKElQX1BNVFVESVNDX0RPTlQpCisgIGludCBtdHUgPSBJUF9QTVRVRElTQ19ET05UOworI2VuZGlmCisjaWYgZGVmaW5lZChJUF9UT1MpICYmIGRlZmluZWQoSVBUT1NfQ0xBU1NfQ1M2KQorICBpbnQgdG9zID0gSVBUT1NfQ0xBU1NfQ1M2OworI2VuZGlmCisKKyAgaWYgKGZkID09IC0xKQorICAgIGRpZSAoXygiY2Fubm90IGNyZWF0ZSBESENQIHNvY2tldDogJXMiKSwgTlVMTCwgRUNfQkFETkVUKTsKKyAgCisgIGlmICghZml4X2ZkKGZkKSB8fAorI2lmIGRlZmluZWQoSVBfTVRVX0RJU0NPVkVSKSAmJiBkZWZpbmVkKElQX1BNVFVESVNDX0RPTlQpCisgICAgICBzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX0lQLCBJUF9NVFVfRElTQ09WRVIsICZtdHUsIHNpemVvZihtdHUpKSA9PSAtMSB8fAorI2VuZGlmCisjaWYgZGVmaW5lZChJUF9UT1MpICYmIGRlZmluZWQoSVBUT1NfQ0xBU1NfQ1M2KQorICAgICAgc2V0c29ja29wdChmZCwgSVBQUk9UT19JUCwgSVBfVE9TLCAmdG9zLCBzaXplb2YodG9zKSkgPT0gLTEgfHwKKyNlbmRpZgorI2lmIGRlZmluZWQoSEFWRV9MSU5VWF9ORVRXT1JLKQorICAgICAgc2V0c29ja29wdChmZCwgSVBQUk9UT19JUCwgSVBfUEtUSU5GTywgJm9uZW9wdCwgc2l6ZW9mKG9uZW9wdCkpID09IC0xIHx8CisjZWxzZQorICAgICAgc2V0c29ja29wdChmZCwgSVBQUk9UT19JUCwgSVBfUkVDVklGLCAmb25lb3B0LCBzaXplb2Yob25lb3B0KSkgPT0gLTEgfHwKKyNlbmRpZgorICAgICAgc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fQlJPQURDQVNULCAmb25lb3B0LCBzaXplb2Yob25lb3B0KSkgPT0gLTEpICAKKyAgICBkaWUoXygiZmFpbGVkIHRvIHNldCBvcHRpb25zIG9uIERIQ1Agc29ja2V0OiAlcyIpLCBOVUxMLCBFQ19CQURORVQpOworICAKKyAgLyogV2hlbiBiaW5kLWludGVyZmFjZXMgaXMgc2V0LCB0aGVyZSBtaWdodCBiZSBtb3JlIHRoYW4gb25lIGRuc21hc3EKKyAgICAgaW5zdGFuY2UgYmluZGluZyBwb3J0IDY3LiBUaGF0J3MgT0sgaWYgdGhleSBzZXJ2ZSBkaWZmZXJlbnQgbmV0d29ya3MuCisgICAgIE5lZWQgdG8gc2V0IFJFVVNFQUREUnxSRVVTRVBPUlQgdG8gbWFrZSB0aGlzIHBvc3NpYmxlLgorICAgICBIYW5kbGUgdGhlIGNhc2UgdGhhdCBSRVVTRVBPUlQgaXMgZGVmaW5lZCwgYnV0IHRoZSBrZXJuZWwgZG9lc24ndCAKKyAgICAgc3VwcG9ydCBpdC4gVGhpcyBoYW5kbGVzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgUkVVU0VQT1JUIG9uIExpbnV4LiAqLworICBpZiAob3B0aW9uX2Jvb2woT1BUX05PV0lMRCkgfHwgb3B0aW9uX2Jvb2woT1BUX0NMRVZFUkJJTkQpKQorICAgIHsKKyAgICAgIGludCByYyA9IDA7CisKKyNpZmRlZiBTT19SRVVTRVBPUlQKKyAgICAgIGlmICgocmMgPSBzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19SRVVTRVBPUlQsICZvbmVvcHQsIHNpemVvZihvbmVvcHQpKSkgPT0gLTEgJiYgCisJICBlcnJubyA9PSBFTk9QUk9UT09QVCkKKwlyYyA9IDA7CisjZW5kaWYKKyAgICAgIAorICAgICAgaWYgKHJjICE9IC0xKQorCXJjID0gc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCAmb25lb3B0LCBzaXplb2Yob25lb3B0KSk7CisgICAgICAKKyAgICAgIGlmIChyYyA9PSAtMSkKKwlkaWUoXygiZmFpbGVkIHRvIHNldCBTT19SRVVTRXtBRERSfFBPUlR9IG9uIERIQ1Agc29ja2V0OiAlcyIpLCBOVUxMLCBFQ19CQURORVQpOworICAgIH0KKyAgCisgIG1lbXNldCgmc2FkZHIsIDAsIHNpemVvZihzYWRkcikpOworICBzYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgc2FkZHIuc2luX3BvcnQgPSBodG9ucyhwb3J0KTsKKyAgc2FkZHIuc2luX2FkZHIuc19hZGRyID0gSU5BRERSX0FOWTsKKyNpZmRlZiBIQVZFX1NPQ0tBRERSX1NBX0xFTgorICBzYWRkci5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisjZW5kaWYKKworICBpZiAoYmluZChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzYWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpKQorICAgIGRpZShfKCJmYWlsZWQgdG8gYmluZCBESENQIHNlcnZlciBzb2NrZXQ6ICVzIiksIE5VTEwsIEVDX0JBRE5FVCk7CisKKyAgcmV0dXJuIGZkOworfQorCit2b2lkIGRoY3BfaW5pdCh2b2lkKQoreworI2lmIGRlZmluZWQoSEFWRV9CU0RfTkVUV09SSykKKyAgaW50IG9uZW9wdCA9IDE7CisjZW5kaWYKKworICBkYWVtb24tPmRoY3BmZCA9IG1ha2VfZmQoZGFlbW9uLT5kaGNwX3NlcnZlcl9wb3J0KTsKKyAgaWYgKGRhZW1vbi0+ZW5hYmxlX3B4ZSkKKyAgICBkYWVtb24tPnB4ZWZkID0gbWFrZV9mZChQWEVfUE9SVCk7CisgIGVsc2UKKyAgICBkYWVtb24tPnB4ZWZkID0gLTE7CisKKyNpZiBkZWZpbmVkKEhBVkVfQlNEX05FVFdPUkspCisgIC8qIFdoZW4gd2UncmUgbm90IHVzaW5nIGNhcGFiaWxpdGllcywgd2UgbmVlZCB0byBkbyB0aGlzIGhlcmUgYmVmb3JlCisgICAgIHdlIGRyb3Agcm9vdC4gQWxzbywgc2V0IGJ1ZmZlciBzaXplIHNtYWxsLCB0byBhdm9pZCB3YXN0aW5nCisgICAgIGtlcm5lbCBidWZmZXJzICovCisgIAorICBpZiAob3B0aW9uX2Jvb2woT1BUX05PX1BJTkcpKQorICAgIGRhZW1vbi0+ZGhjcF9pY21wX2ZkID0gLTE7CisgIGVsc2UgaWYgKChkYWVtb24tPmRoY3BfaWNtcF9mZCA9IG1ha2VfaWNtcF9zb2NrKCkpID09IC0xIHx8CisJICAgc2V0c29ja29wdChkYWVtb24tPmRoY3BfaWNtcF9mZCwgU09MX1NPQ0tFVCwgU09fUkNWQlVGLCAmb25lb3B0LCBzaXplb2Yob25lb3B0KSkgPT0gLTEgKQorICAgIGRpZShfKCJjYW5ub3QgY3JlYXRlIElDTVAgcmF3IHNvY2tldDogJXMuIiksIE5VTEwsIEVDX0JBRE5FVCk7CisgIAorICAvKiBNYWtlIEJQRiByYXcgc2VuZCBzb2NrZXQgKi8KKyAgaW5pdF9icGYoKTsKKyNlbmRpZiAgCit9CisKK3ZvaWQgZGhjcF9wYWNrZXQodGltZV90IG5vdywgaW50IHB4ZV9mZCkKK3sKKyAgaW50IGZkID0gcHhlX2ZkID8gZGFlbW9uLT5weGVmZCA6IGRhZW1vbi0+ZGhjcGZkOworICBzdHJ1Y3QgZGhjcF9wYWNrZXQgKm1lc3M7CisgIHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQ7CisgIHN0cnVjdCBkaGNwX3JlbGF5ICpyZWxheTsKKyAgaW50IGlzX3JlbGF5X3JlcGx5ID0gMDsKKyAgc3RydWN0IGluYW1lICp0bXA7CisgIHN0cnVjdCBpZnJlcSBpZnI7CisgIHN0cnVjdCBtc2doZHIgbXNnOworICBzdHJ1Y3Qgc29ja2FkZHJfaW4gZGVzdDsKKyAgc3RydWN0IGNtc2doZHIgKmNtcHRyOworICBzdHJ1Y3QgaW92ZWMgaW92OworICBzc2l6ZV90IHN6OyAKKyAgaW50IGlmYWNlX2luZGV4ID0gMCwgdW5pY2FzdF9kZXN0ID0gMCwgaXNfaW5mb3JtID0gMCwgbG9vcGJhY2sgPSAwOworICBpbnQgcmN2ZF9pZmFjZV9pbmRleDsKKyAgc3RydWN0IGluX2FkZHIgaWZhY2VfYWRkcjsKKyAgc3RydWN0IGlmYWNlX3BhcmFtIHBhcm07CisgIHRpbWVfdCByZWN2dGltZSA9IG5vdzsKKyNpZmRlZiBIQVZFX0xJTlVYX05FVFdPUksKKyAgc3RydWN0IGFycHJlcSBhcnBfcmVxOworICBzdHJ1Y3QgdGltZXZhbCB0djsKKyNlbmRpZgorICAKKyAgdW5pb24geworICAgIHN0cnVjdCBjbXNnaGRyIGFsaWduOyAvKiB0aGlzIGVuc3VyZXMgYWxpZ25tZW50ICovCisjaWYgZGVmaW5lZChIQVZFX0xJTlVYX05FVFdPUkspCisgICAgY2hhciBjb250cm9sW0NNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBpbl9wa3RpbmZvKSldOworI2VsaWYgZGVmaW5lZChIQVZFX1NPTEFSSVNfTkVUV09SSykKKyAgICBjaGFyIGNvbnRyb2xbQ01TR19TUEFDRShzaXplb2YodW5zaWduZWQgaW50KSldOworI2VsaWYgZGVmaW5lZChIQVZFX0JTRF9ORVRXT1JLKSAKKyAgICBjaGFyIGNvbnRyb2xbQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IHNvY2thZGRyX2RsKSldOworI2VuZGlmCisgIH0gY29udHJvbF91OworICBzdHJ1Y3QgZGhjcF9icmlkZ2UgKmJyaWRnZSwgKmFsaWFzOworCisgIG1zZy5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjb250cm9sX3UpOworICBtc2cubXNnX2NvbnRyb2wgPSBjb250cm9sX3UuY29udHJvbDsKKyAgbXNnLm1zZ19uYW1lID0gJmRlc3Q7CisgIG1zZy5tc2dfbmFtZWxlbiA9IHNpemVvZihkZXN0KTsKKyAgbXNnLm1zZ19pb3YgPSAmZGFlbW9uLT5kaGNwX3BhY2tldDsKKyAgbXNnLm1zZ19pb3ZsZW4gPSAxOworICAKKyAgaWYgKChzeiA9IHJlY3ZfZGhjcF9wYWNrZXQoZmQsICZtc2cpKSA9PSAtMSB8fCAKKyAgICAgIChzeiA8IChzc2l6ZV90KShzaXplb2YoKm1lc3MpIC0gc2l6ZW9mKG1lc3MtPm9wdGlvbnMpKSkpIAorICAgIHJldHVybjsKKyAgICAKKyAgI2lmIGRlZmluZWQgKEhBVkVfTElOVVhfTkVUV09SSykKKyAgaWYgKGlvY3RsKGZkLCBTSU9DR1NUQU1QLCAmdHYpID09IDApCisgICAgcmVjdnRpbWUgPSB0di50dl9zZWM7CisKKyAgaWYgKG1zZy5tc2dfY29udHJvbGxlbiA+PSBzaXplb2Yoc3RydWN0IGNtc2doZHIpKQorICAgIGZvciAoY21wdHIgPSBDTVNHX0ZJUlNUSERSKCZtc2cpOyBjbXB0cjsgY21wdHIgPSBDTVNHX05YVEhEUigmbXNnLCBjbXB0cikpCisgICAgICBpZiAoY21wdHItPmNtc2dfbGV2ZWwgPT0gSVBQUk9UT19JUCAmJiBjbXB0ci0+Y21zZ190eXBlID09IElQX1BLVElORk8pCisJeworCSAgdW5pb24geworCSAgICB1bnNpZ25lZCBjaGFyICpjOworCSAgICBzdHJ1Y3QgaW5fcGt0aW5mbyAqcDsKKwkgIH0gcDsKKwkgIHAuYyA9IENNU0dfREFUQShjbXB0cik7CisJICBpZmFjZV9pbmRleCA9IHAucC0+aXBpX2lmaW5kZXg7CisJICBpZiAocC5wLT5pcGlfYWRkci5zX2FkZHIgIT0gSU5BRERSX0JST0FEQ0FTVCkKKwkgICAgdW5pY2FzdF9kZXN0ID0gMTsKKwl9CisKKyNlbGlmIGRlZmluZWQoSEFWRV9CU0RfTkVUV09SSykgCisgIGlmIChtc2cubXNnX2NvbnRyb2xsZW4gPj0gc2l6ZW9mKHN0cnVjdCBjbXNnaGRyKSkKKyAgICBmb3IgKGNtcHRyID0gQ01TR19GSVJTVEhEUigmbXNnKTsgY21wdHI7IGNtcHRyID0gQ01TR19OWFRIRFIoJm1zZywgY21wdHIpKQorICAgICAgaWYgKGNtcHRyLT5jbXNnX2xldmVsID09IElQUFJPVE9fSVAgJiYgY21wdHItPmNtc2dfdHlwZSA9PSBJUF9SRUNWSUYpCisgICAgICAgIHsKKwkgIHVuaW9uIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmM7CisgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfZGwgKnM7CisgICAgICAgICAgfSBwOworCSAgcC5jID0gQ01TR19EQVRBKGNtcHRyKTsKKwkgIGlmYWNlX2luZGV4ID0gcC5zLT5zZGxfaW5kZXg7CisJfQorICAKKyNlbGlmIGRlZmluZWQoSEFWRV9TT0xBUklTX05FVFdPUkspIAorICBpZiAobXNnLm1zZ19jb250cm9sbGVuID49IHNpemVvZihzdHJ1Y3QgY21zZ2hkcikpCisgICAgZm9yIChjbXB0ciA9IENNU0dfRklSU1RIRFIoJm1zZyk7IGNtcHRyOyBjbXB0ciA9IENNU0dfTlhUSERSKCZtc2csIGNtcHRyKSkKKyAgICAgIGlmIChjbXB0ci0+Y21zZ19sZXZlbCA9PSBJUFBST1RPX0lQICYmIGNtcHRyLT5jbXNnX3R5cGUgPT0gSVBfUkVDVklGKQorCXsKKwkgIHVuaW9uIHsKKwkgICAgdW5zaWduZWQgY2hhciAqYzsKKwkgICAgdW5zaWduZWQgaW50ICppOworCSAgfSBwOworCSAgcC5jID0gQ01TR19EQVRBKGNtcHRyKTsKKwkgIGlmYWNlX2luZGV4ID0gKihwLmkpOworCX0KKyNlbmRpZgorCQorICBpZiAoIWluZGV4dG9uYW1lKGRhZW1vbi0+ZGhjcGZkLCBpZmFjZV9pbmRleCwgaWZyLmlmcl9uYW1lKSB8fAorICAgICAgaW9jdGwoZGFlbW9uLT5kaGNwZmQsIFNJT0NHSUZGTEFHUywgJmlmcikgIT0gMCkKKyAgICByZXR1cm47CisgIAorICBtZXNzID0gKHN0cnVjdCBkaGNwX3BhY2tldCAqKWRhZW1vbi0+ZGhjcF9wYWNrZXQuaW92X2Jhc2U7CisgIGxvb3BiYWNrID0gIW1lc3MtPmdpYWRkci5zX2FkZHIgJiYgKGlmci5pZnJfZmxhZ3MgJiBJRkZfTE9PUEJBQ0spOworICAKKyNpZmRlZiBIQVZFX0xJTlVYX05FVFdPUksKKyAgLyogQVJQIGZpZGRsaW5nIHVzZXMgb3JpZ2luYWwgaW50ZXJmYWNlIGV2ZW4gaWYgd2UgcHJldGVuZCB0byB1c2UgYSBkaWZmZXJlbnQgb25lLiAqLworICBzdHJuY3B5KGFycF9yZXEuYXJwX2RldiwgaWZyLmlmcl9uYW1lLCAxNik7CisjZW5kaWYgCisKKyAgLyogSWYgdGhlIGludGVyZmFjZSBvbiB3aGljaCB0aGUgREhDUCByZXF1ZXN0IHdhcyByZWNlaXZlZCBpcyBhbgorICAgICBhbGlhcyBvZiBzb21lIG90aGVyIGludGVyZmFjZSAoYXMgc3BlY2lmaWVkIGJ5IHRoZQorICAgICAtLWJyaWRnZS1pbnRlcmZhY2Ugb3B0aW9uKSwgY2hhbmdlIGlmci5pZnJfbmFtZSBzbyB0aGF0IHdlIGxvb2sKKyAgICAgZm9yIERIQ1AgY29udGV4dHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBhbGlhc2VkIGludGVyZmFjZSBpbnN0ZWFkCisgICAgIG9mIHdpdGggdGhlIGFsaWFzaW5nIG9uZS4gKi8KKyAgcmN2ZF9pZmFjZV9pbmRleCA9IGlmYWNlX2luZGV4OworICBmb3IgKGJyaWRnZSA9IGRhZW1vbi0+YnJpZGdlczsgYnJpZGdlOyBicmlkZ2UgPSBicmlkZ2UtPm5leHQpCisgICAgeworICAgICAgZm9yIChhbGlhcyA9IGJyaWRnZS0+YWxpYXM7IGFsaWFzOyBhbGlhcyA9IGFsaWFzLT5uZXh0KQorCWlmICh3aWxkY2FyZF9tYXRjaG4oYWxpYXMtPmlmYWNlLCBpZnIuaWZyX25hbWUsIElGX05BTUVTSVpFKSkKKwkgIHsKKwkgICAgaWYgKCEoaWZhY2VfaW5kZXggPSBpZl9uYW1ldG9pbmRleChicmlkZ2UtPmlmYWNlKSkpCisJICAgICAgeworCQlteV9zeXNsb2coTVNfREhDUCB8IExPR19XQVJOSU5HLAorCQkJICBfKCJ1bmtub3duIGludGVyZmFjZSAlcyBpbiBicmlkZ2UtaW50ZXJmYWNlIiksCisJCQkgIGJyaWRnZS0+aWZhY2UpOworCQlyZXR1cm47CisJICAgICAgfQorCSAgICBlbHNlIAorCSAgICAgIHsKKwkJc3RybmNweShpZnIuaWZyX25hbWUsICBicmlkZ2UtPmlmYWNlLCBJRl9OQU1FU0laRSk7CisJCWJyZWFrOworCSAgICAgIH0KKwkgIH0KKyAgICAgIAorICAgICAgaWYgKGFsaWFzKQorCWJyZWFrOworICAgIH0KKworI2lmZGVmIE1TR19CQ0FTVAorICAvKiBPcGVuQlNEIHRlbGxzIHVzIHdoZW4gYSBwYWNrZXQgd2FzIGJyb2FkY2FzdCAqLworICBpZiAoIShtc2cubXNnX2ZsYWdzICYgTVNHX0JDQVNUKSkKKyAgICB1bmljYXN0X2Rlc3QgPSAxOworI2VuZGlmCisgIAorICBpZiAoKHJlbGF5ID0gcmVsYXlfcmVwbHk0KChzdHJ1Y3QgZGhjcF9wYWNrZXQgKilkYWVtb24tPmRoY3BfcGFja2V0Lmlvdl9iYXNlLCBpZnIuaWZyX25hbWUpKSkKKyAgICB7CisgICAgICAvKiBSZXBseSBmcm9tIHNlcnZlciwgdXNpbmcgdXMgYXMgcmVsYXkuICovCisgICAgICByY3ZkX2lmYWNlX2luZGV4ID0gcmVsYXktPmlmYWNlX2luZGV4OworICAgICAgaWYgKCFpbmRleHRvbmFtZShkYWVtb24tPmRoY3BmZCwgcmN2ZF9pZmFjZV9pbmRleCwgaWZyLmlmcl9uYW1lKSkKKwlyZXR1cm47CisgICAgICBpc19yZWxheV9yZXBseSA9IDE7IAorICAgICAgaW92Lmlvdl9sZW4gPSBzejsKKyNpZmRlZiBIQVZFX0xJTlVYX05FVFdPUksKKyAgICAgIHN0cm5jcHkoYXJwX3JlcS5hcnBfZGV2LCBpZnIuaWZyX25hbWUsIDE2KTsKKyNlbmRpZiAKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZnIuaWZyX2FkZHIuc2FfZmFtaWx5ID0gQUZfSU5FVDsKKyAgICAgIGlmIChpb2N0bChkYWVtb24tPmRoY3BmZCwgU0lPQ0dJRkFERFIsICZpZnIpICE9IC0xICkKKwlpZmFjZV9hZGRyID0gKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJmlmci5pZnJfYWRkciktPnNpbl9hZGRyOworICAgICAgZWxzZQorCXsKKwkgIGlmIChpZmFjZV9jaGVjayhBRl9JTkVULCBOVUxMLCBpZnIuaWZyX25hbWUsIE5VTEwpKQorCSAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19XQVJOSU5HLCBfKCJESENQIHBhY2tldCByZWNlaXZlZCBvbiAlcyB3aGljaCBoYXMgbm8gYWRkcmVzcyIpLCBpZnIuaWZyX25hbWUpOworCSAgcmV0dXJuOworCX0KKyAgICAgIAorICAgICAgZm9yICh0bXAgPSBkYWVtb24tPmRoY3BfZXhjZXB0OyB0bXA7IHRtcCA9IHRtcC0+bmV4dCkKKwlpZiAodG1wLT5uYW1lICYmIHdpbGRjYXJkX21hdGNoKHRtcC0+bmFtZSwgaWZyLmlmcl9uYW1lKSkKKwkgIHJldHVybjsKKyAgICAgIAorICAgICAgLyogdW5saW5rZWQgY29udGV4dHMvcmVsYXlzIGFyZSBtYXJrZWQgYnkgY29udGV4dC0+Y3VycmVudCA9PSBjb250ZXh0ICovCisgICAgICBmb3IgKGNvbnRleHQgPSBkYWVtb24tPmRoY3A7IGNvbnRleHQ7IGNvbnRleHQgPSBjb250ZXh0LT5uZXh0KQorCWNvbnRleHQtPmN1cnJlbnQgPSBjb250ZXh0OworICAgICAgCisgICAgICBmb3IgKHJlbGF5ID0gZGFlbW9uLT5yZWxheTQ7IHJlbGF5OyByZWxheSA9IHJlbGF5LT5uZXh0KQorCXJlbGF5LT5jdXJyZW50ID0gcmVsYXk7CisgICAgICAKKyAgICAgIHBhcm0uY3VycmVudCA9IE5VTEw7CisgICAgICBwYXJtLnJlbGF5ID0gTlVMTDsKKyAgICAgIHBhcm0ucmVsYXlfbG9jYWwuc19hZGRyID0gMDsKKyAgICAgIHBhcm0uaW5kID0gaWZhY2VfaW5kZXg7CisgICAgICAKKyAgICAgIGlmICghaWZhY2VfY2hlY2soQUZfSU5FVCwgKHN0cnVjdCBhbGxfYWRkciAqKSZpZmFjZV9hZGRyLCBpZnIuaWZyX25hbWUsIE5VTEwpKQorCXsKKwkgIC8qIElmIHdlIGZhaWxlZCB0byBtYXRjaCB0aGUgcHJpbWFyeSBhZGRyZXNzIG9mIHRoZSBpbnRlcmZhY2UsIHNlZSBpZiB3ZSd2ZSBnb3QgYSAtLWxpc3Rlbi1hZGRyZXNzCisJICAgICBmb3IgYSBzZWNvbmRhcnkgKi8KKwkgIHN0cnVjdCBtYXRjaF9wYXJhbSBtYXRjaDsKKwkgIAorCSAgbWF0Y2gubWF0Y2hlZCA9IDA7CisJICBtYXRjaC5pbmQgPSBpZmFjZV9pbmRleDsKKwkgIAorCSAgaWYgKCFkYWVtb24tPmlmX2FkZHJzIHx8CisJICAgICAgIWlmYWNlX2VudW1lcmF0ZShBRl9JTkVULCAmbWF0Y2gsIGNoZWNrX2xpc3Rlbl9hZGRycykgfHwKKwkgICAgICAhbWF0Y2gubWF0Y2hlZCkKKwkgICAgcmV0dXJuOworCSAgCisJICBpZmFjZV9hZGRyID0gbWF0Y2guYWRkcjsKKwkgIC8qIG1ha2Ugc3VyZSBzZWNvbmRhcnkgYWRkcmVzcyBnZXRzIHByaW9yaXR5IGluIGNhc2UKKwkgICAgIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgYWRkcmVzcyBvbiB0aGUgaW50ZXJmYWNlIGluIHRoZSBzYW1lIHN1Ym5ldCAqLworCSAgY29tcGxldGVfY29udGV4dChtYXRjaC5hZGRyLCBpZmFjZV9pbmRleCwgTlVMTCwgbWF0Y2gubmV0bWFzaywgbWF0Y2guYnJvYWRjYXN0LCAmcGFybSk7CisJfSAgICAKKyAgICAgIAorICAgICAgaWYgKCFpZmFjZV9lbnVtZXJhdGUoQUZfSU5FVCwgJnBhcm0sIGNvbXBsZXRlX2NvbnRleHQpKQorCXJldHVybjsKKworICAgICAgLyogV2UncmUgcmVsYXlpbmcgdGhpcyByZXF1ZXN0ICovCisgICAgICBpZiAgKHBhcm0ucmVsYXlfbG9jYWwuc19hZGRyICE9IDAgJiYKKwkgICByZWxheV91cHN0cmVhbTQocGFybS5yZWxheSwgbWVzcywgKHNpemVfdClzeiwgaWZhY2VfaW5kZXgpKQorCXJldHVybjsKKworICAgICAgLyogTWF5IGhhdmUgY29uZmlndXJlZCByZWxheSwgYnV0IG5vdCBESENQIHNlcnZlciAqLworICAgICAgaWYgKCFkYWVtb24tPmRoY3ApCisJcmV0dXJuOworCisgICAgICBsZWFzZV9wcnVuZShOVUxMLCBub3cpOyAvKiBsb3NlIGFueSBleHBpcmVkIGxlYXNlcyAqLworICAgICAgaW92Lmlvdl9sZW4gPSBkaGNwX3JlcGx5KHBhcm0uY3VycmVudCwgaWZyLmlmcl9uYW1lLCBpZmFjZV9pbmRleCwgKHNpemVfdClzeiwgCisJCQkgICAgICAgbm93LCB1bmljYXN0X2Rlc3QsIGxvb3BiYWNrLCAmaXNfaW5mb3JtLCBweGVfZmQsIGlmYWNlX2FkZHIsIHJlY3Z0aW1lKTsKKyAgICAgIGxlYXNlX3VwZGF0ZV9maWxlKG5vdyk7CisgICAgICBsZWFzZV91cGRhdGVfZG5zKDApOworICAgICAgCisgICAgICBpZiAoaW92Lmlvdl9sZW4gPT0gMCkKKwlyZXR1cm47CisgICAgfQorCisgIG1zZy5tc2dfbmFtZSA9ICZkZXN0OworICBtc2cubXNnX25hbWVsZW4gPSBzaXplb2YoZGVzdCk7CisgIG1zZy5tc2dfY29udHJvbCA9IE5VTEw7CisgIG1zZy5tc2dfY29udHJvbGxlbiA9IDA7CisgIG1zZy5tc2dfaW92ID0gJmlvdjsKKyAgaW92Lmlvdl9iYXNlID0gZGFlbW9uLT5kaGNwX3BhY2tldC5pb3ZfYmFzZTsKKyAgCisgIC8qIHBhY2tldCBidWZmZXIgbWF5IGhhdmUgbW92ZWQgKi8KKyAgbWVzcyA9IChzdHJ1Y3QgZGhjcF9wYWNrZXQgKilkYWVtb24tPmRoY3BfcGFja2V0Lmlvdl9iYXNlOworICAKKyNpZmRlZiBIQVZFX1NPQ0tBRERSX1NBX0xFTgorICBkZXN0LnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyNlbmRpZgorICAKKyAgaWYgKHB4ZV9mZCkKKyAgICB7IAorICAgICAgaWYgKG1lc3MtPmNpYWRkci5zX2FkZHIgIT0gMCkKKwlkZXN0LnNpbl9hZGRyID0gbWVzcy0+Y2lhZGRyOworICAgIH0KKyAgZWxzZSBpZiAobWVzcy0+Z2lhZGRyLnNfYWRkciAmJiAhaXNfcmVsYXlfcmVwbHkpCisgICAgeworICAgICAgLyogU2VuZCB0byBCT09UUCByZWxheSAgKi8KKyAgICAgIGRlc3Quc2luX3BvcnQgPSBodG9ucyhkYWVtb24tPmRoY3Bfc2VydmVyX3BvcnQpOworICAgICAgZGVzdC5zaW5fYWRkciA9IG1lc3MtPmdpYWRkcjsgCisgICAgfQorICBlbHNlIGlmIChtZXNzLT5jaWFkZHIuc19hZGRyKQorICAgIHsKKyAgICAgIC8qIElmIHRoZSBjbGllbnQncyBpZGVhIG9mIGl0cyBvd24gYWRkcmVzcyB0YWxseXMgd2l0aAorCSB0aGUgc291cmNlIGFkZHJlc3MgaW4gdGhlIHJlcXVlc3QgcGFja2V0LCB3ZSBiZWxpZXZlIHRoZQorCSBzb3VyY2UgcG9ydCB0b28sIGFuZCBzZW5kIGJhY2sgdG8gdGhhdC4gIElmIHdlJ3JlIHJlcGx5aW5nIAorCSB0byBhIERIQ1BJTkZPUk0sIHRydXN0IHRoZSBzb3VyY2UgYWRkcmVzcyBhbHdheXMuICovCisgICAgICBpZiAoKCFpc19pbmZvcm0gJiYgZGVzdC5zaW5fYWRkci5zX2FkZHIgIT0gbWVzcy0+Y2lhZGRyLnNfYWRkcikgfHwKKwkgIGRlc3Quc2luX3BvcnQgPT0gMCB8fCBkZXN0LnNpbl9hZGRyLnNfYWRkciA9PSAwIHx8IGlzX3JlbGF5X3JlcGx5KQorCXsKKwkgIGRlc3Quc2luX3BvcnQgPSBodG9ucyhkYWVtb24tPmRoY3BfY2xpZW50X3BvcnQpOyAKKwkgIGRlc3Quc2luX2FkZHIgPSBtZXNzLT5jaWFkZHI7CisJfQorICAgIH0gCisjaWYgZGVmaW5lZChIQVZFX0xJTlVYX05FVFdPUkspCisgIGVsc2UKKyAgICB7CisgICAgICAvKiBmaWxsIGNtc2cgZm9yIG91dGJvdW5kIGludGVyZmFjZSAoYm90aCBicm9hZGNhc3QgJiB1bmljYXN0KSAqLworICAgICAgc3RydWN0IGluX3BrdGluZm8gKnBrdDsKKyAgICAgIG1zZy5tc2dfY29udHJvbCA9IGNvbnRyb2xfdS5jb250cm9sOworICAgICAgbXNnLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGNvbnRyb2xfdSk7CisgICAgICBjbXB0ciA9IENNU0dfRklSU1RIRFIoJm1zZyk7CisgICAgICBwa3QgPSAoc3RydWN0IGluX3BrdGluZm8gKilDTVNHX0RBVEEoY21wdHIpOworICAgICAgcGt0LT5pcGlfaWZpbmRleCA9IHJjdmRfaWZhY2VfaW5kZXg7CisgICAgICBwa3QtPmlwaV9zcGVjX2RzdC5zX2FkZHIgPSAwOworICAgICAgbXNnLm1zZ19jb250cm9sbGVuID0gY21wdHItPmNtc2dfbGVuID0gQ01TR19MRU4oc2l6ZW9mKHN0cnVjdCBpbl9wa3RpbmZvKSk7CisgICAgICBjbXB0ci0+Y21zZ19sZXZlbCA9IElQUFJPVE9fSVA7CisgICAgICBjbXB0ci0+Y21zZ190eXBlID0gSVBfUEtUSU5GTzsKKworICAgICAgaWYgKChudG9ocyhtZXNzLT5mbGFncykgJiAweDgwMDApIHx8IG1lc3MtPmhsZW4gPT0gMCB8fAorICAgICAgICAgbWVzcy0+aGxlbiA+IHNpemVvZihpZnIuaWZyX2FkZHIuc2FfZGF0YSkgfHwgbWVzcy0+aHR5cGUgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIC8qIGJyb2FkY2FzdCB0byAyNTUuMjU1LjI1NS4yNTUgKG9yIG1hYyBhZGRyZXNzIGludmFsaWQpICovCisgICAgICAgICAgZGVzdC5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJfQlJPQURDQVNUOworICAgICAgICAgIGRlc3Quc2luX3BvcnQgPSBodG9ucyhkYWVtb24tPmRoY3BfY2xpZW50X3BvcnQpOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAvKiB1bmljYXN0IHRvIHVuY29uZmlndXJlZCBjbGllbnQuIEluamVjdCBtYWMgYWRkcmVzcyBkaXJlY3QgaW50byBBUlAgY2FjaGUuCisgICAgICAgICAgc3RydWN0IHNvY2thZGRyIGxpbWl0cyBzaXplIHRvIDE0IGJ5dGVzLiAqLworICAgICAgICAgIGRlc3Quc2luX2FkZHIgPSBtZXNzLT55aWFkZHI7CisgICAgICAgICAgZGVzdC5zaW5fcG9ydCA9IGh0b25zKGRhZW1vbi0+ZGhjcF9jbGllbnRfcG9ydCk7CisgICAgICAgICAgbWVtY3B5KCZhcnBfcmVxLmFycF9wYSwgJmRlc3QsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKyAgICAgICAgICBhcnBfcmVxLmFycF9oYS5zYV9mYW1pbHkgPSBtZXNzLT5odHlwZTsKKyAgICAgICAgICBtZW1jcHkoYXJwX3JlcS5hcnBfaGEuc2FfZGF0YSwgbWVzcy0+Y2hhZGRyLCBtZXNzLT5obGVuKTsKKyAgICAgICAgICAvKiBpbnRlcmZhY2UgbmFtZSBhbHJlYWR5IGNvcGllZCBpbiAqLworICAgICAgICAgIGFycF9yZXEuYXJwX2ZsYWdzID0gQVRGX0NPTTsKKyAgICAgICAgICBpZiAoaW9jdGwoZGFlbW9uLT5kaGNwZmQsIFNJT0NTQVJQLCAmYXJwX3JlcSkgPT0gLTEpCisgICAgICAgICAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19FUlIsIF8oIkFSUC1jYWNoZSBpbmplY3Rpb24gZmFpbGVkOiAlcyIpLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICB9CisgICAgfQorI2VsaWYgZGVmaW5lZChIQVZFX1NPTEFSSVNfTkVUV09SSykKKyAgZWxzZSBpZiAoKG50b2hzKG1lc3MtPmZsYWdzKSAmIDB4ODAwMCkgfHwgbWVzcy0+aGxlbiAhPSBFVEhFUl9BRERSX0xFTiB8fCBtZXNzLT5odHlwZSAhPSBBUlBIUkRfRVRIRVIpCisgICAgeworICAgICAgLyogYnJvYWRjYXN0IHRvIDI1NS4yNTUuMjU1LjI1NSAob3IgbWFjIGFkZHJlc3MgaW52YWxpZCkgKi8KKyAgICAgIGRlc3Quc2luX2FkZHIuc19hZGRyID0gSU5BRERSX0JST0FEQ0FTVDsKKyAgICAgIGRlc3Quc2luX3BvcnQgPSBodG9ucyhkYWVtb24tPmRoY3BfY2xpZW50X3BvcnQpOworICAgICAgLyogbm90ZSB0aGF0IHdlIGRvbid0IHNwZWNpZnkgdGhlIGludGVyZmFjZSBoZXJlOiB0aGF0J3MgZG9uZSBieSB0aGUKKwkgSVBfQk9VTkRfSUYgc29ja29wdCBsb3dlciBkb3duLiAqLworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIHVuaWNhc3QgdG8gdW5jb25maWd1cmVkIGNsaWVudC4gSW5qZWN0IG1hYyBhZGRyZXNzIGRpcmVjdCBpbnRvIEFSUCBjYWNoZS4gCisJIE5vdGUgdGhhdCB0aGlzIG9ubHkgd29ya3MgZm9yIGV0aGVybmV0IG9uIHNvbGFyaXMsIGJlY2F1c2Ugd2UgdXNlIFNJT0NTQVJQCisJIGFuZCBub3QgU0lPQ1NYQVJQLCB3aGljaCB3b3VsZCBiZSBwZXJmZWN0LCBleGNlcHQgdGhhdCBpdCByZXR1cm5zIEVOWElPIAorCSBteXN0ZXJpb3VzbHkuIEJhaC4gRmFsbCBiYWNrIHRvIGJyb2FkY2FzdCBmb3Igb3RoZXIgbmV0IHR5cGVzLiAqLworICAgICAgc3RydWN0IGFycHJlcSByZXE7CisgICAgICBkZXN0LnNpbl9hZGRyID0gbWVzcy0+eWlhZGRyOworICAgICAgZGVzdC5zaW5fcG9ydCA9IGh0b25zKGRhZW1vbi0+ZGhjcF9jbGllbnRfcG9ydCk7CisgICAgICAqKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmcmVxLmFycF9wYSkgPSBkZXN0OworICAgICAgcmVxLmFycF9oYS5zYV9mYW1pbHkgPSBBRl9VTlNQRUM7CisgICAgICBtZW1jcHkocmVxLmFycF9oYS5zYV9kYXRhLCBtZXNzLT5jaGFkZHIsIG1lc3MtPmhsZW4pOworICAgICAgcmVxLmFycF9mbGFncyA9IEFURl9DT007CisgICAgICBpb2N0bChkYWVtb24tPmRoY3BmZCwgU0lPQ1NBUlAsICZyZXEpOworICAgIH0KKyNlbGlmIGRlZmluZWQoSEFWRV9CU0RfTkVUV09SSykKKyAgZWxzZSAKKyAgICB7CisgICAgICBzZW5kX3ZpYV9icGYobWVzcywgaW92Lmlvdl9sZW4sIGlmYWNlX2FkZHIsICZpZnIpOworICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorICAgCisjaWZkZWYgSEFWRV9TT0xBUklTX05FVFdPUksKKyAgc2V0c29ja29wdChmZCwgSVBQUk9UT19JUCwgSVBfQk9VTkRfSUYsICZpZmFjZV9pbmRleCwgc2l6ZW9mKGlmYWNlX2luZGV4KSk7CisjZW5kaWYKKyAgCisgIHdoaWxlKHJldHJ5X3NlbmQoc2VuZG1zZyhmZCwgJm1zZywgMCkpKTsKKworICAvKiBUaGlzIGNhbiBmYWlsIHdoZW4sIGVnLCBpcHRhYmxlcyBEUk9QUyBkZXN0aW5hdGlvbiAyNTUuMjU1LjI1NS4yNTUgKi8KKyAgaWYgKGVycm5vICE9IDApCisgICAgbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfV0FSTklORywgXygiRXJyb3Igc2VuZGluZyBESENQIHBhY2tldCB0byAlczogJXMiKSwKKwkgICAgICBpbmV0X250b2EoZGVzdC5zaW5fYWRkciksIHN0cmVycm9yKGVycm5vKSk7Cit9CisKKy8qIGNoZWNrIGFnYWluc3Qgc2Vjb25kYXJ5IGludGVyZmFjZSBhZGRyZXNzZXMgKi8KK3N0YXRpYyBpbnQgY2hlY2tfbGlzdGVuX2FkZHJzKHN0cnVjdCBpbl9hZGRyIGxvY2FsLCBpbnQgaWZfaW5kZXgsIGNoYXIgKmxhYmVsLAorCQkJICAgICAgc3RydWN0IGluX2FkZHIgbmV0bWFzaywgc3RydWN0IGluX2FkZHIgYnJvYWRjYXN0LCB2b2lkICp2cGFyYW0pCit7CisgIHN0cnVjdCBtYXRjaF9wYXJhbSAqcGFyYW0gPSB2cGFyYW07CisgIHN0cnVjdCBpbmFtZSAqdG1wOworCisgICh2b2lkKSBsYWJlbDsKKworICBpZiAoaWZfaW5kZXggPT0gcGFyYW0tPmluZCkKKyAgICB7CisgICAgICBmb3IgKHRtcCA9IGRhZW1vbi0+aWZfYWRkcnM7IHRtcDsgdG1wID0gdG1wLT5uZXh0KQorCWlmICggdG1wLT5hZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUICYmCisJICAgICB0bXAtPmFkZHIuaW4uc2luX2FkZHIuc19hZGRyID09IGxvY2FsLnNfYWRkcikKKwkgIHsKKwkgICAgcGFyYW0tPm1hdGNoZWQgPSAxOworCSAgICBwYXJhbS0+YWRkciA9IGxvY2FsOworCSAgICBwYXJhbS0+bmV0bWFzayA9IG5ldG1hc2s7CisJICAgIHBhcmFtLT5icm9hZGNhc3QgPSBicm9hZGNhc3Q7CisJICAgIGJyZWFrOworCSAgfQorICAgIH0KKyAgCisgIHJldHVybiAxOworfQorCisvKiBUaGlzIGlzIGEgY29tcGxleCByb3V0aW5lOiBpdCBnZXRzIGNhbGxlZCB3aXRoIGVhY2ggKGFkZHJlc3MsbmV0bWFzayxicm9hZGNhc3QpIHRyaXBsZSAKKyAgIG9mIGVhY2ggaW50ZXJmYWNlIChhbmQgYW55IHJlbGF5IGFkZHJlc3MpIGFuZCBkb2VzIHRoZSAgZm9sbG93aW5nIHRoaW5nczoKKworICAgMSkgRGlzY2FyZHMgc3R1ZmYgZm9yIGludGVyZmFjZXMgb3RoZXIgdGhhbiB0aGUgb25lIG9uIHdoaWNoIGEgREhDUCBwYWNrZXQganVzdCBhcnJpdmVkLgorICAgMikgRmlsbHMgaW4gYW55IG5ldG1hc2sgYW5kIGJyb2FkY2FzdCBhZGRyZXNzZXMgd2hpY2ggaGF2ZSBub3QgYmVlbiBleHBsaWNpdGx5IGNvbmZpZ3VyZWQuCisgICAzKSBGaWxscyBpbiBsb2NhbCAodGhpcyBob3N0KSBhbmQgcm91dGVyICh0aGlzIGhvc3Qgb3IgcmVsYXkpIGFkZHJlc3Nlcy4KKyAgIDQpIExpbmtzIGNvbnRleHRzIHdoaWNoIGFyZSB2YWxpZCBmb3IgaG9zdHMgZGlyZWN0bHkgY29ubmVjdGVkIHRvIHRoZSBhcnJpdmFsIGludGVyZmFjZSBvbiAtPmN1cnJlbnQuCisKKyAgIE5vdGUgdGhhdCB0aGUgY3VycmVudCBjaGFpbiBtYXkgYmUgc3VwZXJzZWRlZCBsYXRlciBmb3IgY29uZmlndXJlZCBob3N0cyBvciB0aG9zZSBjb21pbmcgdmlhIGdhdGV3YXlzLiAqLworCitzdGF0aWMgaW50IGNvbXBsZXRlX2NvbnRleHQoc3RydWN0IGluX2FkZHIgbG9jYWwsIGludCBpZl9pbmRleCwgY2hhciAqbGFiZWwsCisJCQkgICAgc3RydWN0IGluX2FkZHIgbmV0bWFzaywgc3RydWN0IGluX2FkZHIgYnJvYWRjYXN0LCB2b2lkICp2cGFyYW0pCit7CisgIHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQ7CisgIHN0cnVjdCBkaGNwX3JlbGF5ICpyZWxheTsKKyAgc3RydWN0IGlmYWNlX3BhcmFtICpwYXJhbSA9IHZwYXJhbTsKKworICAodm9pZClsYWJlbDsKKyAgCisgIGZvciAoY29udGV4dCA9IGRhZW1vbi0+ZGhjcDsgY29udGV4dDsgY29udGV4dCA9IGNvbnRleHQtPm5leHQpCisgICAgeworICAgICAgaWYgKCEoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX05FVE1BU0spICYmCisJICAoaXNfc2FtZV9uZXQobG9jYWwsIGNvbnRleHQtPnN0YXJ0LCBuZXRtYXNrKSB8fAorCSAgIGlzX3NhbWVfbmV0KGxvY2FsLCBjb250ZXh0LT5lbmQsIG5ldG1hc2spKSkKKyAgICAgIHsgCisJaWYgKGNvbnRleHQtPm5ldG1hc2suc19hZGRyICE9IG5ldG1hc2suc19hZGRyICYmCisJICAgICEoaXNfc2FtZV9uZXQobG9jYWwsIGNvbnRleHQtPnN0YXJ0LCBuZXRtYXNrKSAmJgorCSAgICAgIGlzX3NhbWVfbmV0KGxvY2FsLCBjb250ZXh0LT5lbmQsIG5ldG1hc2spKSkKKwkgIHsKKwkgICAgc3RyY3B5KGRhZW1vbi0+ZGhjcF9idWZmLCBpbmV0X250b2EoY29udGV4dC0+c3RhcnQpKTsKKwkgICAgc3RyY3B5KGRhZW1vbi0+ZGhjcF9idWZmMiwgaW5ldF9udG9hKGNvbnRleHQtPmVuZCkpOworCSAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19XQVJOSU5HLCBfKCJESENQIHJhbmdlICVzIC0tICVzIGlzIG5vdCBjb25zaXN0ZW50IHdpdGggbmV0bWFzayAlcyIpLAorCQkgICAgICBkYWVtb24tPmRoY3BfYnVmZiwgZGFlbW9uLT5kaGNwX2J1ZmYyLCBpbmV0X250b2EobmV0bWFzaykpOworCSAgfQkKKyAJY29udGV4dC0+bmV0bWFzayA9IG5ldG1hc2s7CisgICAgICB9CisgICAgICAKKyAgICAgIGlmIChjb250ZXh0LT5uZXRtYXNrLnNfYWRkciAhPSAwICYmCisJICBpc19zYW1lX25ldChsb2NhbCwgY29udGV4dC0+c3RhcnQsIGNvbnRleHQtPm5ldG1hc2spICYmCisJICBpc19zYW1lX25ldChsb2NhbCwgY29udGV4dC0+ZW5kLCBjb250ZXh0LT5uZXRtYXNrKSkKKwl7CisJICAvKiBsaW5rIGl0IG9udG8gdGhlIGN1cnJlbnQgY2hhaW4gaWYgd2UndmUgbm90IHNlZW4gaXQgYmVmb3JlICovCisJICBpZiAoaWZfaW5kZXggPT0gcGFyYW0tPmluZCAmJiBjb250ZXh0LT5jdXJyZW50ID09IGNvbnRleHQpCisJICAgIHsKKwkgICAgICBjb250ZXh0LT5yb3V0ZXIgPSBsb2NhbDsKKwkgICAgICBjb250ZXh0LT5sb2NhbCA9IGxvY2FsOworCSAgICAgIGNvbnRleHQtPmN1cnJlbnQgPSBwYXJhbS0+Y3VycmVudDsKKwkgICAgICBwYXJhbS0+Y3VycmVudCA9IGNvbnRleHQ7CisJICAgIH0KKwkgIAorCSAgaWYgKCEoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX0JSRENBU1QpKQorCSAgICB7CisJICAgICAgaWYgKGlzX3NhbWVfbmV0KGJyb2FkY2FzdCwgY29udGV4dC0+c3RhcnQsIGNvbnRleHQtPm5ldG1hc2spKQorCQljb250ZXh0LT5icm9hZGNhc3QgPSBicm9hZGNhc3Q7CisJICAgICAgZWxzZSAKKwkJY29udGV4dC0+YnJvYWRjYXN0LnNfYWRkciAgPSBjb250ZXh0LT5zdGFydC5zX2FkZHIgfCB+Y29udGV4dC0+bmV0bWFzay5zX2FkZHI7CisJICAgIH0KKwl9CQkKKyAgICB9CisKKyAgZm9yIChyZWxheSA9IGRhZW1vbi0+cmVsYXk0OyByZWxheTsgcmVsYXkgPSByZWxheS0+bmV4dCkKKyAgICBpZiAoaWZfaW5kZXggPT0gcGFyYW0tPmluZCAmJiByZWxheS0+bG9jYWwuYWRkci5hZGRyNC5zX2FkZHIgPT0gbG9jYWwuc19hZGRyICYmIHJlbGF5LT5jdXJyZW50ID09IHJlbGF5ICYmCisJKHBhcmFtLT5yZWxheV9sb2NhbC5zX2FkZHIgPT0gMCB8fCBwYXJhbS0+cmVsYXlfbG9jYWwuc19hZGRyID09IGxvY2FsLnNfYWRkcikpCisgICAgICB7CisJcmVsYXktPmN1cnJlbnQgPSBwYXJhbS0+cmVsYXk7CisJcGFyYW0tPnJlbGF5ID0gcmVsYXk7CisJcGFyYW0tPnJlbGF5X2xvY2FsID0gbG9jYWw7CQorICAgICAgfQorCisgIHJldHVybiAxOworfQorCSAgCitzdHJ1Y3QgZGhjcF9jb250ZXh0ICphZGRyZXNzX2F2YWlsYWJsZShzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0LCAKKwkJCQkgICAgICAgc3RydWN0IGluX2FkZHIgdGFkZHIsCisJCQkJICAgICAgIHN0cnVjdCBkaGNwX25ldGlkICpuZXRpZHMpCit7CisgIC8qIENoZWNrIGlzIGFuIGFkZHJlc3MgaXMgT0sgZm9yIHRoaXMgbmV0d29yaywgY2hlY2sgYWxsCisgICAgIHBvc3NpYmxlIHJhbmdlcy4gTWFrZSBzdXJlIHRoYXQgdGhlIGFkZHJlc3MgaXNuJ3QgaW4gdXNlCisgICAgIGJ5IHRoZSBzZXJ2ZXIgaXRzZWxmLiAqLworICAKKyAgdW5zaWduZWQgaW50IHN0YXJ0LCBlbmQsIGFkZHIgPSBudG9obCh0YWRkci5zX2FkZHIpOworICBzdHJ1Y3QgZGhjcF9jb250ZXh0ICp0bXA7CisKKyAgZm9yICh0bXAgPSBjb250ZXh0OyB0bXA7IHRtcCA9IHRtcC0+Y3VycmVudCkKKyAgICBpZiAodGFkZHIuc19hZGRyID09IGNvbnRleHQtPnJvdXRlci5zX2FkZHIpCisgICAgICByZXR1cm4gTlVMTDsKKyAgCisgIGZvciAodG1wID0gY29udGV4dDsgdG1wOyB0bXAgPSB0bXAtPmN1cnJlbnQpCisgICAgeworICAgICAgc3RhcnQgPSBudG9obCh0bXAtPnN0YXJ0LnNfYWRkcik7CisgICAgICBlbmQgPSBudG9obCh0bXAtPmVuZC5zX2FkZHIpOworCisgICAgICBpZiAoISh0bXAtPmZsYWdzICYgKENPTlRFWFRfU1RBVElDIHwgQ09OVEVYVF9QUk9YWSkpICYmCisJICBhZGRyID49IHN0YXJ0ICYmCisJICBhZGRyIDw9IGVuZCAmJgorCSAgbWF0Y2hfbmV0aWQodG1wLT5maWx0ZXIsIG5ldGlkcywgMSkpCisJcmV0dXJuIHRtcDsKKyAgICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0cnVjdCBkaGNwX2NvbnRleHQgKm5hcnJvd19jb250ZXh0KHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQsIAorCQkJCSAgICBzdHJ1Y3QgaW5fYWRkciB0YWRkciwKKwkJCQkgICAgc3RydWN0IGRoY3BfbmV0aWQgKm5ldGlkcykKK3sKKyAgLyogV2Ugc3RhcnQgb2Ygd2l0aCBhIHNldCBvZiBwb3NzaWJsZSBjb250ZXh0cywgYWxsIG9uIHRoZSBjdXJyZW50IHBoeXNpY2FsIGludGVyZmFjZS4KKyAgICAgVGhlc2UgYXJlIGNoYWluZWQgb24gLT5jdXJyZW50LgorICAgICBIZXJlIHdlIGhhdmUgYW4gYWRkcmVzcywgYW5kIHJldHVybiB0aGUgYWN0dWFsIGNvbnRleHQgY29ycmVzcG9uZGluZyB0byB0aGF0CisgICAgIGFkZHJlc3MuIE5vdGUgdGhhdCBub25lIG1heSBmaXQsIGlmIHRoZSBhZGRyZXNzIGNhbWUgYSBkaGNwLWhvc3QgYW5kIGlzIG91dHNpZGUKKyAgICAgYW55IGRoY3AtcmFuZ2UuIEluIHRoYXQgY2FzZSB3ZSByZXR1cm4gYSBzdGF0aWMgcmFuZ2UgaWYgcG9zc2libGUsIG9yIGZhaWxpbmcgdGhhdCwKKyAgICAgYW55IGNvbnRleHQgb24gdGhlIGNvcnJlY3Qgc3VibmV0LiAoSWYgdGhlcmUncyBtb3JlIHRoYW4gb25lLCB0aGlzIGlzIGEgZG9kZ3kgCisgICAgIGNvbmZpZ3VyYXRpb246IG1heWJlIHRoZXJlIHNob3VsZCBiZSBhIHdhcm5pbmcuKSAqLworICAKKyAgc3RydWN0IGRoY3BfY29udGV4dCAqdG1wOworCisgIGlmICghKHRtcCA9IGFkZHJlc3NfYXZhaWxhYmxlKGNvbnRleHQsIHRhZGRyLCBuZXRpZHMpKSkKKyAgICB7CisgICAgICBmb3IgKHRtcCA9IGNvbnRleHQ7IHRtcDsgdG1wID0gdG1wLT5jdXJyZW50KQorCWlmIChtYXRjaF9uZXRpZCh0bXAtPmZpbHRlciwgbmV0aWRzLCAxKSAmJgorCSAgICBpc19zYW1lX25ldCh0YWRkciwgdG1wLT5zdGFydCwgdG1wLT5uZXRtYXNrKSAmJiAKKwkgICAgKHRtcC0+ZmxhZ3MgJiBDT05URVhUX1NUQVRJQykpCisJICBicmVhazsKKyAgICAgIAorICAgICAgaWYgKCF0bXApCisJZm9yICh0bXAgPSBjb250ZXh0OyB0bXA7IHRtcCA9IHRtcC0+Y3VycmVudCkKKwkgIGlmIChtYXRjaF9uZXRpZCh0bXAtPmZpbHRlciwgbmV0aWRzLCAxKSAmJgorCSAgICAgIGlzX3NhbWVfbmV0KHRhZGRyLCB0bXAtPnN0YXJ0LCB0bXAtPm5ldG1hc2spICYmCisJICAgICAgISh0bXAtPmZsYWdzICYgQ09OVEVYVF9QUk9YWSkpCisJICAgIGJyZWFrOworICAgIH0KKyAgCisgIC8qIE9ubHkgb25lIGNvbnRleHQgYWxsb3dlZCBub3cgKi8KKyAgaWYgKHRtcCkKKyAgICB0bXAtPmN1cnJlbnQgPSBOVUxMOworICAKKyAgcmV0dXJuIHRtcDsKK30KKworc3RydWN0IGRoY3BfY29uZmlnICpjb25maWdfZmluZF9ieV9hZGRyZXNzKHN0cnVjdCBkaGNwX2NvbmZpZyAqY29uZmlncywgc3RydWN0IGluX2FkZHIgYWRkcikKK3sKKyAgc3RydWN0IGRoY3BfY29uZmlnICpjb25maWc7CisgIAorICBmb3IgKGNvbmZpZyA9IGNvbmZpZ3M7IGNvbmZpZzsgY29uZmlnID0gY29uZmlnLT5uZXh0KQorICAgIGlmICgoY29uZmlnLT5mbGFncyAmIENPTkZJR19BRERSKSAmJiBjb25maWctPmFkZHIuc19hZGRyID09IGFkZHIuc19hZGRyKQorICAgICAgcmV0dXJuIGNvbmZpZzsKKworICByZXR1cm4gTlVMTDsKK30KKworLyogQ2hlY2sgaWYgYW5kIGFkZHJlc3MgaXMgaW4gdXNlIGJ5IHNlbmRpbmcgSUNNUCBwaW5nLgorICAgVGhpcyB3cmFwcGVyIGhhbmRsZXMgYSBjYWNoZSBhbmQgbG9hZC1saW1pdGluZy4KKyAgIFJldHVybiBpcyBOVUxMIGlzIGFkZHJlc3MgaW4gdXNlLCBvciBhIHBvaW50ZXIgdG8gYSBjYWNoZSBlbnRyeQorICAgcmVjb3JkaW5nIHRoYXQgaXQgaXNuJ3QuICovCitzdHJ1Y3QgcGluZ19yZXN1bHQgKmRvX2ljbXBfcGluZyh0aW1lX3Qgbm93LCBzdHJ1Y3QgaW5fYWRkciBhZGRyLCB1bnNpZ25lZCBpbnQgaGFzaCwgaW50IGxvb3BiYWNrKQoreworICBzdGF0aWMgc3RydWN0IHBpbmdfcmVzdWx0IGR1bW15OworICBzdHJ1Y3QgcGluZ19yZXN1bHQgKnIsICp2aWN0aW0gPSBOVUxMOworICBpbnQgY291bnQsIG1heCA9IChpbnQpKDAuNiAqICgoKGZsb2F0KVBJTkdfQ0FDSEVfVElNRSkvCisJCQkJKChmbG9hdClQSU5HX1dBSVQpKSk7CisKKyAgLyogY2hlY2sgaWYgd2UgZmFpbGVkIHRvIHBpbmcgYWRkciBzb21ldGltZSBpbiB0aGUgbGFzdAorICAgICBQSU5HX0NBQ0hFX1RJTUUgc2Vjb25kcy4gSWYgc28sIGFzc3VtZSB0aGUgc2FtZSBzaXR1YXRpb24gc3RpbGwgZXhpc3RzLgorICAgICBUaGlzIGF2b2lkcyBwcm9ibGVtcyB3aGVuIGEgc3R1cGlkIGNsaWVudCBiYW5ncworICAgICBvbiB1cyByZXBlYXRlZGx5LiBBcyBhIGZpbmFsIGNoZWNrLCBpZiB3ZSBkaWQgbW9yZQorICAgICB0aGFuIDYwJSBvZiB0aGUgcG9zc2libGUgcGluZyBjaGVja3MgaW4gdGhlIGxhc3QgCisgICAgIFBJTkdfQ0FDSEVfVElNRSwgd2UgYXJlIGluIGhpZ2gtbG9hZCBtb2RlLCBzbyBkb24ndCBkbyBhbnkgbW9yZS4gKi8KKyAgZm9yIChjb3VudCA9IDAsIHIgPSBkYWVtb24tPnBpbmdfcmVzdWx0czsgcjsgciA9IHItPm5leHQpCisgICAgaWYgKGRpZmZ0aW1lKG5vdywgci0+dGltZSkgPiAgKGZsb2F0KVBJTkdfQ0FDSEVfVElNRSkKKyAgICAgIHZpY3RpbSA9IHI7IC8qIG9sZCByZWNvcmQgKi8KKyAgICBlbHNlIAorICAgICAgeworCWNvdW50Kys7CisJaWYgKHItPmFkZHIuc19hZGRyID09IGFkZHIuc19hZGRyKQorCSAgcmV0dXJuIHI7CisgICAgICB9CisgIAorICAvKiBkaWRuJ3QgZmluZCBjYWNoZWQgZW50cnkgKi8KKyAgaWYgKChjb3VudCA+PSBtYXgpIHx8IG9wdGlvbl9ib29sKE9QVF9OT19QSU5HKSB8fCBsb29wYmFjaykKKyAgICB7CisgICAgICAvKiBvdmVybG9hZGVkLCBvciBjb25maWd1cmVkIG5vdCB0byBjaGVjaywgbG9vcGJhY2sgaW50ZXJmYWNlLCByZXR1cm4gIm5vdCBpbiB1c2UiICovCisgICAgICBkdW1teS5oYXNoID0gMDsKKyAgICAgIHJldHVybiAmZHVtbXk7CisgICAgfQorICBlbHNlIGlmIChpY21wX3BpbmcoYWRkcikpCisgICAgcmV0dXJuIE5VTEw7IC8qIGFkZHJlc3MgaW4gdXNlLiAqLworICBlbHNlCisgICAgeworICAgICAgLyogYXQgdGhpcyBwb2ludCB2aWN0aW0gbWF5IGhvbGQgYW4gZXhwaXJlZCByZWNvcmQgKi8KKyAgICAgIGlmICghdmljdGltKQorCXsKKwkgIGlmICgodmljdGltID0gd2hpbmVfbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGluZ19yZXN1bHQpKSkpCisJICAgIHsKKwkgICAgICB2aWN0aW0tPm5leHQgPSBkYWVtb24tPnBpbmdfcmVzdWx0czsKKwkgICAgICBkYWVtb24tPnBpbmdfcmVzdWx0cyA9IHZpY3RpbTsKKwkgICAgfQorCX0KKyAgICAgIAorICAgICAgLyogcmVjb3JkIHRoYXQgdGhpcyBhZGRyZXNzIGlzIE9LIGZvciAzMHMgCisJIHdpdGhvdXQgbW9yZSBwaW5nIGNoZWNrcyAqLworICAgICAgaWYgKHZpY3RpbSkKKwl7CisJICB2aWN0aW0tPmFkZHIgPSBhZGRyOworCSAgdmljdGltLT50aW1lID0gbm93OworCSAgdmljdGltLT5oYXNoID0gaGFzaDsKKwl9CisgICAgICByZXR1cm4gdmljdGltOworICAgIH0KK30KKworaW50IGFkZHJlc3NfYWxsb2NhdGUoc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dCwKKwkJICAgICBzdHJ1Y3QgaW5fYWRkciAqYWRkcnAsIHVuc2lnbmVkIGNoYXIgKmh3YWRkciwgaW50IGh3X2xlbiwgCisJCSAgICAgc3RydWN0IGRoY3BfbmV0aWQgKm5ldGlkcywgdGltZV90IG5vdywgaW50IGxvb3BiYWNrKSAgIAoreworICAvKiBGaW5kIGEgZnJlZSBhZGRyZXNzOiBleGNsdWRlIGFueXRoaW5nIGluIHVzZSBhbmQgYW55dGhpbmcgYWxsb2NhdGVkIHRvCisgICAgIGEgcGFydGljdWxhciBod2FkZHIvY2xpZW50aWQvaG9zdG5hbWUgaW4gb3VyIGNvbmZpZ3VyYXRpb24uCisgICAgIFRyeSB0byByZXR1cm4gZnJvbSBjb250ZXh0cyB3aGljaCBtYXRjaCBuZXRpZHMgZmlyc3QuICovCisKKyAgc3RydWN0IGluX2FkZHIgc3RhcnQsIGFkZHI7CisgIHN0cnVjdCBkaGNwX2NvbnRleHQgKmMsICpkOworICBpbnQgaSwgcGFzczsKKyAgdW5zaWduZWQgaW50IGo7IAorCisgIC8qIGhhc2ggaHdhZGRyOiB1c2UgdGhlIFNEQk0gaGFzaGluZyBhbGdvcml0aG0uICBTZWVtcyB0byBnaXZlIGdvb2QKKyAgICAgZGlzcGVyc2FsIGV2ZW4gd2l0aCBzaW1pbGFybHktdmFsdWVkICJzdHJpbmdzIi4gKi8gCisgIGZvciAoaiA9IDAsIGkgPSAwOyBpIDwgaHdfbGVuOyBpKyspCisgICAgaiA9IGh3YWRkcltpXSArIChqIDw8IDYpICsgKGogPDwgMTYpIC0gajsKKworICAvKiBqID09IDAgaXMgbWFya2VyICovCisgIGlmIChqID09IDApCisgICAgaiA9IDE7CisgIAorICBmb3IgKHBhc3MgPSAwOyBwYXNzIDw9IDE7IHBhc3MrKykKKyAgICBmb3IgKGMgPSBjb250ZXh0OyBjOyBjID0gYy0+Y3VycmVudCkKKyAgICAgIGlmIChjLT5mbGFncyAmIChDT05URVhUX1NUQVRJQyB8IENPTlRFWFRfUFJPWFkpKQorCWNvbnRpbnVlOworICAgICAgZWxzZSBpZiAoIW1hdGNoX25ldGlkKGMtPmZpbHRlciwgbmV0aWRzLCBwYXNzKSkKKwljb250aW51ZTsKKyAgICAgIGVsc2UKKwl7CisJICBpZiAob3B0aW9uX2Jvb2woT1BUX0NPTlNFQ19BRERSKSkKKwkgICAgLyogc2VlZCBpcyBsYXJnZXN0IGV4dGFudCBsZWFzZSBhZGRyIGluIHRoaXMgY29udGV4dCAqLworCSAgICBzdGFydCA9IGxlYXNlX2ZpbmRfbWF4X2FkZHIoYyk7CisJICBlbHNlCisJICAgIC8qIHBpY2sgYSBzZWVkIGJhc2VkIG9uIGh3YWRkciAqLworCSAgICBzdGFydC5zX2FkZHIgPSBodG9ubChudG9obChjLT5zdGFydC5zX2FkZHIpICsgCisJCQkJICgoaiArIGMtPmFkZHJfZXBvY2gpICUgKDEgKyBudG9obChjLT5lbmQuc19hZGRyKSAtIG50b2hsKGMtPnN0YXJ0LnNfYWRkcikpKSk7CisKKwkgIC8qIGl0ZXJhdGUgdW50aWwgd2UgZmluZCBhIGZyZWUgYWRkcmVzcy4gKi8KKwkgIGFkZHIgPSBzdGFydDsKKwkgIAorCSAgZG8geworCSAgICAvKiBlbGltaW5hdGUgYWRkcmVzc2VzIGluIHVzZSBieSB0aGUgc2VydmVyLiAqLworCSAgICBmb3IgKGQgPSBjb250ZXh0OyBkOyBkID0gZC0+Y3VycmVudCkKKwkgICAgICBpZiAoYWRkci5zX2FkZHIgPT0gZC0+cm91dGVyLnNfYWRkcikKKwkJYnJlYWs7CisKKwkgICAgLyogQWRkcmVzc2VzIHdoaWNoIGVuZCBpbiAuMjU1IGFuZCAuMCBhcmUgYnJva2VuIGluIFdpbmRvd3MgZXZlbiB3aGVuIHVzaW5nIAorCSAgICAgICBzdXBlcm5ldHRpbmcuIGllIGRoY3AtcmFuZ2U9MTkyLjE2OC4wLjEsMTkyLjE2OC4xLjI1NCwyNTUsMjU1LDI1NC4wCisJICAgICAgIHRoZW4gMTkyLjE2OC4wLjI1NSBpcyBhIHZhbGlkIElQIGFkZHJlc3MsIGJ1dCBub3QgZm9yIFdpbmRvd3MgYXMgaXQncworCSAgICAgICBpbiB0aGUgY2xhc3MgQyByYW5nZS4gU2VlICBLQjI4MTU3OS4gV2UgdGhlcmVmb3JlIGRvbid0IGFsbG9jYXRlIHRoZXNlIAorCSAgICAgICBhZGRyZXNzZXMgdG8gYXZvaWQgaGFyZC10by1kaWFnbm9zZSBwcm9ibGVtcy4gVGhhbmtzIEJpbGwuICovCSAgICAKKwkgICAgaWYgKCFkICYmCisJCSFsZWFzZV9maW5kX2J5X2FkZHIoYWRkcikgJiYgCisJCSFjb25maWdfZmluZF9ieV9hZGRyZXNzKGRhZW1vbi0+ZGhjcF9jb25mLCBhZGRyKSAmJgorCQkoIUlOX0NMQVNTQyhudG9obChhZGRyLnNfYWRkcikpIHx8IAorCQkgKChudG9obChhZGRyLnNfYWRkcikgJiAweGZmKSAhPSAweGZmICYmICgobnRvaGwoYWRkci5zX2FkZHIpICYgMHhmZikgIT0gMHgwKSkpKQorCSAgICAgIHsKKwkJLyogaW4gY29uc2VjLWlwIG1vZGUsIHNraXAgYWRkcmVzc2VzIGVxdWFsIHRvCisJCSAgIHRoZSBudW1iZXIgb2YgYWRkcmVzc2VzIHJlamVjdGVkIGJ5IGNsaWVudHMuIFRoaXMKKwkJICAgc2hvdWxkIGF2b2lkIHRoZSBzYW1lIGNsaWVudCBiZWluZyBvZmZlcmVkIHRoZSBzYW1lCisJCSAgIGFkZHJlc3MgYWZ0ZXIgaXQgaGFzIHJqZWN0ZWQgaXQuICovCisJCWlmIChvcHRpb25fYm9vbChPUFRfQ09OU0VDX0FERFIpICYmIGMtPmFkZHJfZXBvY2gpCisJCSAgYy0+YWRkcl9lcG9jaC0tOworCQllbHNlCisJCSAgeworCQkgICAgc3RydWN0IHBpbmdfcmVzdWx0ICpyOworCQkgICAgCisJCSAgICBpZiAoKHIgPSBkb19pY21wX3Bpbmcobm93LCBhZGRyLCBqLCBsb29wYmFjaykpKQorCQkgICAgICB7CisJCQkvKiBjb25zZWMtaXAgbW9kZTogd2Ugb2ZmZXJlZCB0aGlzIGFkZHJlc3MgZm9yIGFub3RoZXIgY2xpZW50CisJCQkgICAoZGlmZmVyZW50IGhhc2gpIHJlY2VudGx5LCBkb24ndCBvZmZlciBpdCB0byB0aGlzIG9uZS4gKi8KKwkJCWlmICghb3B0aW9uX2Jvb2woT1BUX0NPTlNFQ19BRERSKSB8fCByLT5oYXNoID09IGopCisJCQkgIHsKKwkJCSAgICAqYWRkcnAgPSBhZGRyOworCQkJICAgIHJldHVybiAxOworCQkJICB9CisJCSAgICAgIH0KKwkJICAgIGVsc2UKKwkJICAgICAgeworCQkJLyogYWRkcmVzcyBpbiB1c2U6IHBlcnR1cmIgYWRkcmVzcyBzZWxlY3Rpb24gc28gdGhhdCB3ZSBhcmUKKwkJCSAgIGxlc3MgbGlrZWx5IHRvIHRyeSB0aGlzIGFkZHJlc3MgYWdhaW4uICovCisJCQlpZiAoIW9wdGlvbl9ib29sKE9QVF9DT05TRUNfQUREUikpCisJCQkgIGMtPmFkZHJfZXBvY2grKzsKKwkJICAgICAgfQorCQkgIH0KKwkgICAgICB9CisJICAgIAorCSAgICBhZGRyLnNfYWRkciA9IGh0b25sKG50b2hsKGFkZHIuc19hZGRyKSArIDEpOworCSAgICAKKwkgICAgaWYgKGFkZHIuc19hZGRyID09IGh0b25sKG50b2hsKGMtPmVuZC5zX2FkZHIpICsgMSkpCisJICAgICAgYWRkciA9IGMtPnN0YXJ0OworCSAgICAKKwkgIH0gd2hpbGUgKGFkZHIuc19hZGRyICE9IHN0YXJ0LnNfYWRkcik7CisJfQorCisgIHJldHVybiAwOworfQorCit2b2lkIGRoY3BfcmVhZF9ldGhlcnModm9pZCkKK3sKKyAgRklMRSAqZiA9IGZvcGVuKEVUSEVSU0ZJTEUsICJyIik7CisgIHVuc2lnbmVkIGludCBmbGFnczsKKyAgY2hhciAqYnVmZiA9IGRhZW1vbi0+bmFtZWJ1ZmY7CisgIGNoYXIgKmlwLCAqY3A7CisgIHN0cnVjdCBpbl9hZGRyIGFkZHI7CisgIHVuc2lnbmVkIGNoYXIgaHdhZGRyW0VUSEVSX0FERFJfTEVOXTsKKyAgc3RydWN0IGRoY3BfY29uZmlnICoqdXAsICp0bXA7CisgIHN0cnVjdCBkaGNwX2NvbmZpZyAqY29uZmlnOworICBpbnQgY291bnQgPSAwLCBsaW5lbm8gPSAwOworCisgIGFkZHIuc19hZGRyID0gMDsgLyogZWxpbWluYXRlIHdhcm5pbmcgKi8KKyAgCisgIGlmICghZikKKyAgICB7CisgICAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19FUlIsIF8oImZhaWxlZCB0byByZWFkICVzOiAlcyIpLCBFVEhFUlNGSUxFLCBzdHJlcnJvcihlcnJubykpOworICAgICAgcmV0dXJuOworICAgIH0KKworICAvKiBUaGlzIGNhbiBiZSBjYWxsZWQgYWdhaW4gb24gU0lHSFVQLCBzbyByZW1vdmUgZW50cmllcyBjcmVhdGVkIGxhc3QgdGltZSByb3VuZC4gKi8KKyAgZm9yICh1cCA9ICZkYWVtb24tPmRoY3BfY29uZiwgY29uZmlnID0gZGFlbW9uLT5kaGNwX2NvbmY7IGNvbmZpZzsgY29uZmlnID0gdG1wKQorICAgIHsKKyAgICAgIHRtcCA9IGNvbmZpZy0+bmV4dDsKKyAgICAgIGlmIChjb25maWctPmZsYWdzICYgQ09ORklHX0ZST01fRVRIRVJTKQorCXsKKwkgICp1cCA9IHRtcDsKKwkgIC8qIGNhbm5vdCBoYXZlIGEgY2xpZCAqLworCSAgaWYgKGNvbmZpZy0+ZmxhZ3MgJiBDT05GSUdfTkFNRSkKKwkgICAgZnJlZShjb25maWctPmhvc3RuYW1lKTsKKwkgIGZyZWUoY29uZmlnLT5od2FkZHIpOworCSAgZnJlZShjb25maWcpOworCX0KKyAgICAgIGVsc2UKKwl1cCA9ICZjb25maWctPm5leHQ7CisgICAgfQorCisgIHdoaWxlIChmZ2V0cyhidWZmLCBNQVhETkFNRSwgZikpCisgICAgeworICAgICAgY2hhciAqaG9zdCA9IE5VTEw7CisgICAgICAKKyAgICAgIGxpbmVubysrOworICAgICAgCisgICAgICB3aGlsZSAoc3RybGVuKGJ1ZmYpID4gMCAmJiBpc3NwYWNlKChpbnQpYnVmZltzdHJsZW4oYnVmZiktMV0pKQorCWJ1ZmZbc3RybGVuKGJ1ZmYpLTFdID0gMDsKKyAgICAgIAorICAgICAgaWYgKCgqYnVmZiA9PSAnIycpIHx8ICgqYnVmZiA9PSAnKycpIHx8ICgqYnVmZiA9PSAwKSkKKwljb250aW51ZTsKKyAgICAgIAorICAgICAgZm9yIChpcCA9IGJ1ZmY7ICppcCAmJiAhaXNzcGFjZSgoaW50KSppcCk7IGlwKyspOworICAgICAgZm9yKDsgKmlwICYmIGlzc3BhY2UoKGludCkqaXApOyBpcCsrKQorCSppcCA9IDA7CisgICAgICBpZiAoISppcCB8fCBwYXJzZV9oZXgoYnVmZiwgaHdhZGRyLCBFVEhFUl9BRERSX0xFTiwgTlVMTCwgTlVMTCkgIT0gRVRIRVJfQUREUl9MRU4pCisJeworCSAgbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfRVJSLCBfKCJiYWQgbGluZSBhdCAlcyBsaW5lICVkIiksIEVUSEVSU0ZJTEUsIGxpbmVubyk7IAorCSAgY29udGludWU7CisJfQorICAgICAgCisgICAgICAvKiBjaGVjayBmb3IgbmFtZSBvciBkb3R0ZWQtcXVhZCAqLworICAgICAgZm9yIChjcCA9IGlwOyAqY3A7IGNwKyspCisJaWYgKCEoKmNwID09ICcuJyB8fCAoKmNwID49JzAnICYmICpjcCA8PSAnOScpKSkKKwkgIGJyZWFrOworICAgICAgCisgICAgICBpZiAoISpjcCkKKwl7CisJICBpZiAoKGFkZHIuc19hZGRyID0gaW5ldF9hZGRyKGlwKSkgPT0gKGluX2FkZHJfdCktMSkKKwkgICAgeworCSAgICAgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX0VSUiwgXygiYmFkIGFkZHJlc3MgYXQgJXMgbGluZSAlZCIpLCBFVEhFUlNGSUxFLCBsaW5lbm8pOyAKKwkgICAgICBjb250aW51ZTsKKwkgICAgfQorCisJICBmbGFncyA9IENPTkZJR19BRERSOworCSAgCisJICBmb3IgKGNvbmZpZyA9IGRhZW1vbi0+ZGhjcF9jb25mOyBjb25maWc7IGNvbmZpZyA9IGNvbmZpZy0+bmV4dCkKKwkgICAgaWYgKChjb25maWctPmZsYWdzICYgQ09ORklHX0FERFIpICYmIGNvbmZpZy0+YWRkci5zX2FkZHIgPT0gYWRkci5zX2FkZHIpCisJICAgICAgYnJlYWs7CisJfQorICAgICAgZWxzZSAKKwl7CisJICBpbnQgbm9tZW07CisJICBpZiAoIShob3N0ID0gY2Fub25pY2FsaXNlKGlwLCAmbm9tZW0pKSB8fCAhbGVnYWxfaG9zdG5hbWUoaG9zdCkpCisJICAgIHsKKwkgICAgICBpZiAoIW5vbWVtKQorCQlteV9zeXNsb2coTVNfREhDUCB8IExPR19FUlIsIF8oImJhZCBuYW1lIGF0ICVzIGxpbmUgJWQiKSwgRVRIRVJTRklMRSwgbGluZW5vKTsgCisJICAgICAgZnJlZShob3N0KTsKKwkgICAgICBjb250aW51ZTsKKwkgICAgfQorCSAgICAgIAorCSAgZmxhZ3MgPSBDT05GSUdfTkFNRTsKKworCSAgZm9yIChjb25maWcgPSBkYWVtb24tPmRoY3BfY29uZjsgY29uZmlnOyBjb25maWcgPSBjb25maWctPm5leHQpCisJICAgIGlmICgoY29uZmlnLT5mbGFncyAmIENPTkZJR19OQU1FKSAmJiBob3N0bmFtZV9pc2VxdWFsKGNvbmZpZy0+aG9zdG5hbWUsIGhvc3QpKQorCSAgICAgIGJyZWFrOworCX0KKworICAgICAgaWYgKGNvbmZpZyAmJiAoY29uZmlnLT5mbGFncyAmIENPTkZJR19GUk9NX0VUSEVSUykpCisJeworCSAgbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfRVJSLCBfKCJpZ25vcmluZyAlcyBsaW5lICVkLCBkdXBsaWNhdGUgbmFtZSBvciBJUCBhZGRyZXNzIiksIEVUSEVSU0ZJTEUsIGxpbmVubyk7IAorCSAgY29udGludWU7CisJfQorCQorICAgICAgaWYgKCFjb25maWcpCisJeyAKKwkgIGZvciAoY29uZmlnID0gZGFlbW9uLT5kaGNwX2NvbmY7IGNvbmZpZzsgY29uZmlnID0gY29uZmlnLT5uZXh0KQorCSAgICB7CisJICAgICAgc3RydWN0IGh3YWRkcl9jb25maWcgKmNvbmZfYWRkciA9IGNvbmZpZy0+aHdhZGRyOworCSAgICAgIGlmIChjb25mX2FkZHIgJiYgCisJCSAgY29uZl9hZGRyLT5uZXh0ID09IE5VTEwgJiYgCisJCSAgY29uZl9hZGRyLT53aWxkY2FyZF9tYXNrID09IDAgJiYKKwkJICBjb25mX2FkZHItPmh3YWRkcl9sZW4gPT0gRVRIRVJfQUREUl9MRU4gJiYKKwkJICAoY29uZl9hZGRyLT5od2FkZHJfdHlwZSA9PSBBUlBIUkRfRVRIRVIgfHwgY29uZl9hZGRyLT5od2FkZHJfdHlwZSA9PSAwKSAmJgorCQkgIG1lbWNtcChjb25mX2FkZHItPmh3YWRkciwgaHdhZGRyLCBFVEhFUl9BRERSX0xFTikgPT0gMCkKKwkJYnJlYWs7CisJICAgIH0KKwkgIAorCSAgaWYgKCFjb25maWcpCisJICAgIHsKKwkgICAgICBpZiAoIShjb25maWcgPSB3aGluZV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBkaGNwX2NvbmZpZykpKSkKKwkJY29udGludWU7CisJICAgICAgY29uZmlnLT5mbGFncyA9IENPTkZJR19GUk9NX0VUSEVSUzsKKwkgICAgICBjb25maWctPmh3YWRkciA9IE5VTEw7CisJICAgICAgY29uZmlnLT5kb21haW4gPSBOVUxMOworCSAgICAgIGNvbmZpZy0+bmV0aWQgPSBOVUxMOworCSAgICAgIGNvbmZpZy0+bmV4dCA9IGRhZW1vbi0+ZGhjcF9jb25mOworCSAgICAgIGRhZW1vbi0+ZGhjcF9jb25mID0gY29uZmlnOworCSAgICB9CisJICAKKwkgIGNvbmZpZy0+ZmxhZ3MgfD0gZmxhZ3M7CisJICAKKwkgIGlmIChmbGFncyAmIENPTkZJR19OQU1FKQorCSAgICB7CisJICAgICAgY29uZmlnLT5ob3N0bmFtZSA9IGhvc3Q7CisJICAgICAgaG9zdCA9IE5VTEw7CisJICAgIH0KKwkgIAorCSAgaWYgKGZsYWdzICYgQ09ORklHX0FERFIpCisJICAgIGNvbmZpZy0+YWRkciA9IGFkZHI7CisJfQorICAgICAgCisgICAgICBjb25maWctPmZsYWdzIHw9IENPTkZJR19OT0NMSUQ7CisgICAgICBpZiAoIWNvbmZpZy0+aHdhZGRyKQorCWNvbmZpZy0+aHdhZGRyID0gd2hpbmVfbWFsbG9jKHNpemVvZihzdHJ1Y3QgaHdhZGRyX2NvbmZpZykpOworICAgICAgaWYgKGNvbmZpZy0+aHdhZGRyKQorCXsKKwkgIG1lbWNweShjb25maWctPmh3YWRkci0+aHdhZGRyLCBod2FkZHIsIEVUSEVSX0FERFJfTEVOKTsKKwkgIGNvbmZpZy0+aHdhZGRyLT5od2FkZHJfbGVuID0gRVRIRVJfQUREUl9MRU47CisJICBjb25maWctPmh3YWRkci0+aHdhZGRyX3R5cGUgPSBBUlBIUkRfRVRIRVI7CisJICBjb25maWctPmh3YWRkci0+d2lsZGNhcmRfbWFzayA9IDA7CisJICBjb25maWctPmh3YWRkci0+bmV4dCA9IE5VTEw7CisJfQorICAgICAgY291bnQrKzsKKyAgICAgIAorICAgICAgZnJlZShob3N0KTsKKworICAgIH0KKyAgCisgIGZjbG9zZShmKTsKKworICBteV9zeXNsb2coTVNfREhDUCB8IExPR19JTkZPLCBfKCJyZWFkICVzIC0gJWQgYWRkcmVzc2VzIiksIEVUSEVSU0ZJTEUsIGNvdW50KTsKK30KKworCisvKiBJZiB3ZSd2ZSBub3QgZm91bmQgYSBob3N0bmFtZSBhbnkgb3RoZXIgd2F5LCB0cnkgYW5kIHNlZSBpZiB0aGVyZSdzIG9uZSBpbiAvZXRjL2hvc3RzCisgICBmb3IgdGhpcyBhZGRyZXNzLiBJZiBpdCBoYXMgYSBkb21haW4gcGFydCwgdGhhdCBtdXN0IG1hdGNoIHRoZSBzZXQgZG9tYWluIGFuZAorICAgaXQgZ2V0cyBzdHJpcHBlZC4gVGhlIHNldCBvZiBsZWdhbCBkb21haW4gbmFtZXMgaXMgYmlnZ2VyIHRoYW4gdGhlIHNldCBvZiBsZWdhbCBob3N0bmFtZXMKKyAgIHNvIGNoZWNrIGhlcmUgdGhhdCB0aGUgZG9tYWluIG5hbWUgaXMgbGVnYWwgYXMgYSBob3N0bmFtZS4gCisgICBOT1RFOiB3ZSdyZSBvbmx5IGFsbG93ZWQgdG8gb3ZlcndyaXRlIGRhZW1vbi0+ZGhjcF9idWZmIGlmIHdlIHN1Y2NlZWQuICovCitjaGFyICpob3N0X2Zyb21fZG5zKHN0cnVjdCBpbl9hZGRyIGFkZHIpCit7CisgIHN0cnVjdCBjcmVjICpsb29rdXA7CisKKyAgaWYgKGRhZW1vbi0+cG9ydCA9PSAwKQorICAgIHJldHVybiBOVUxMOyAvKiBETlMgZGlzYWJsZWQuICovCisgIAorICBsb29rdXAgPSBjYWNoZV9maW5kX2J5X2FkZHIoTlVMTCwgKHN0cnVjdCBhbGxfYWRkciAqKSZhZGRyLCAwLCBGX0lQVjQpOworCisgIGlmIChsb29rdXAgJiYgKGxvb2t1cC0+ZmxhZ3MgJiBGX0hPU1RTKSkKKyAgICB7CisgICAgICBjaGFyICpkb3QsICpob3N0bmFtZSA9IGNhY2hlX2dldF9uYW1lKGxvb2t1cCk7CisgICAgICBkb3QgPSBzdHJjaHIoaG9zdG5hbWUsICcuJyk7CisgICAgICAKKyAgICAgIGlmIChkb3QgJiYgc3RybGVuKGRvdCsxKSAhPSAwKQorCXsKKwkgIGNoYXIgKmQyID0gZ2V0X2RvbWFpbihhZGRyKTsKKwkgIGlmICghZDIgfHwgIWhvc3RuYW1lX2lzZXF1YWwoZG90KzEsIGQyKSkKKwkgICAgcmV0dXJuIE5VTEw7IC8qIHdyb25nIGRvbWFpbiAqLworCX0KKworICAgICAgaWYgKCFsZWdhbF9ob3N0bmFtZShob3N0bmFtZSkpCisJcmV0dXJuIE5VTEw7CisgICAgICAKKyAgICAgIHN0cm5jcHkoZGFlbW9uLT5kaGNwX2J1ZmYsIGhvc3RuYW1lLCAyNTYpOworICAgICAgZGFlbW9uLT5kaGNwX2J1ZmZbMjU1XSA9IDA7CisgICAgICBzdHJpcF9ob3N0bmFtZShkYWVtb24tPmRoY3BfYnVmZik7CisKKyAgICAgIHJldHVybiBkYWVtb24tPmRoY3BfYnVmZjsKKyAgICB9CisgIAorICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCAgcmVsYXlfdXBzdHJlYW00KHN0cnVjdCBkaGNwX3JlbGF5ICpyZWxheSwgc3RydWN0IGRoY3BfcGFja2V0ICptZXNzLCBzaXplX3Qgc3osIGludCBpZmFjZV9pbmRleCkKK3sKKyAgLyogLT5sb2NhbCBpcyBzYW1lIHZhbHVlIGZvciBhbGwgcmVsYXlzIG9uIC0+Y3VycmVudCBjaGFpbiAqLworICBzdHJ1Y3QgYWxsX2FkZHIgZnJvbTsKKyAgCisgIGlmIChtZXNzLT5vcCAhPSBCT09UUkVRVUVTVCkKKyAgICByZXR1cm4gMDsKKworICAvKiBzb3VyY2UgYWRkcmVzcyA9PSByZWxheSBhZGRyZXNzICovCisgIGZyb20uYWRkci5hZGRyNCA9IHJlbGF5LT5sb2NhbC5hZGRyLmFkZHI0OworICAKKyAgLyogYWxyZWFkeSBnYXRld2F5ZWQgPyAqLworICBpZiAobWVzcy0+Z2lhZGRyLnNfYWRkcikKKyAgICB7CisgICAgICAvKiBpZiBzbyBjaGVjayBpZiBieSB1cywgdG8gc3RvbXAgb24gbG9vcHMuICovCisgICAgICBpZiAobWVzcy0+Z2lhZGRyLnNfYWRkciA9PSByZWxheS0+bG9jYWwuYWRkci5hZGRyNC5zX2FkZHIpCisJcmV0dXJuIDE7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogcGx1ZyBpbiBvdXIgYWRkcmVzcyAqLworICAgICAgbWVzcy0+Z2lhZGRyLnNfYWRkciA9IHJlbGF5LT5sb2NhbC5hZGRyLmFkZHI0LnNfYWRkcjsKKyAgICB9CisKKyAgaWYgKChtZXNzLT5ob3BzKyspID4gMjApCisgICAgcmV0dXJuIDE7CisKKyAgZm9yICg7IHJlbGF5OyByZWxheSA9IHJlbGF5LT5jdXJyZW50KQorICAgIHsKKyAgICAgIHVuaW9uIG15c29ja2FkZHIgdG87CisgICAgICAKKyAgICAgIHRvLnNhLnNhX2ZhbWlseSA9IEFGX0lORVQ7CisgICAgICB0by5pbi5zaW5fYWRkciA9IHJlbGF5LT5zZXJ2ZXIuYWRkci5hZGRyNDsKKyAgICAgIHRvLmluLnNpbl9wb3J0ID0gaHRvbnMoZGFlbW9uLT5kaGNwX3NlcnZlcl9wb3J0KTsKKyAgICAgIAorICAgICAgc2VuZF9mcm9tKGRhZW1vbi0+ZGhjcGZkLCAwLCAoY2hhciAqKW1lc3MsIHN6LCAmdG8sICZmcm9tLCAwKTsKKyAgICAgIAorICAgICAgaWYgKG9wdGlvbl9ib29sKE9QVF9MT0dfT1BUUykpCisJeworCSAgaW5ldF9udG9wKEFGX0lORVQsICZyZWxheS0+bG9jYWwsIGRhZW1vbi0+YWRkcmJ1ZmYsIEFERFJTVFJMRU4pOworCSAgbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfSU5GTywgXygiREhDUCByZWxheSAlcyAtPiAlcyIpLCBkYWVtb24tPmFkZHJidWZmLCBpbmV0X250b2EocmVsYXktPnNlcnZlci5hZGRyLmFkZHI0KSk7CisJfQorICAgICAgCisgICAgICAvKiBTYXZlIHRoaXMgZm9yIHJlcGxpZXMgKi8KKyAgICAgIHJlbGF5LT5pZmFjZV9pbmRleCA9IGlmYWNlX2luZGV4OworICAgIH0KKyAgCisgIHJldHVybiAxOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgZGhjcF9yZWxheSAqcmVsYXlfcmVwbHk0KHN0cnVjdCBkaGNwX3BhY2tldCAqbWVzcywgY2hhciAqYXJyaXZhbF9pbnRlcmZhY2UpCit7CisgIHN0cnVjdCBkaGNwX3JlbGF5ICpyZWxheTsKKworICBpZiAobWVzcy0+Z2lhZGRyLnNfYWRkciA9PSAwIHx8IG1lc3MtPm9wICE9IEJPT1RSRVBMWSkKKyAgICByZXR1cm4gTlVMTDsKKworICBmb3IgKHJlbGF5ID0gZGFlbW9uLT5yZWxheTQ7IHJlbGF5OyByZWxheSA9IHJlbGF5LT5uZXh0KQorICAgIHsKKyAgICAgIGlmIChtZXNzLT5naWFkZHIuc19hZGRyID09IHJlbGF5LT5sb2NhbC5hZGRyLmFkZHI0LnNfYWRkcikKKwl7CisJICBpZiAoIXJlbGF5LT5pbnRlcmZhY2UgfHwgd2lsZGNhcmRfbWF0Y2gocmVsYXktPmludGVyZmFjZSwgYXJyaXZhbF9pbnRlcmZhY2UpKQorCSAgICByZXR1cm4gcmVsYXktPmlmYWNlX2luZGV4ICE9IDAgPyByZWxheSA6IE5VTEw7CisJfQorICAgIH0KKyAgCisgIHJldHVybiBOVUxMOwkgCit9ICAgICAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvZGhjcDYtcHJvdG9jb2wuaCBiL3NyYy9kaGNwNi1wcm90b2NvbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZDAzZGQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZGhjcDYtcHJvdG9jb2wuaApAQCAtMCwwICsxLDc1IEBACisvKiBkbnNtYXNxIGlzIENvcHlyaWdodCAoYykgMjAwMC0yMDE3IFNpbW9uIEtlbGxleQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMgZGF0ZWQgMjkgSnVuZSwgMjAwNy4KKyAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2RlZmluZSBESENQVjZfU0VSVkVSX1BPUlQgNTQ3CisjZGVmaW5lIERIQ1BWNl9DTElFTlRfUE9SVCA1NDYKKworI2RlZmluZSBBTExfU0VSVkVSUyAgICAgICAgICAgICAgICAgICJGRjA1OjoxOjMiCisjZGVmaW5lIEFMTF9SRUxBWV9BR0VOVFNfQU5EX1NFUlZFUlMgIkZGMDI6OjE6MiIKKworI2RlZmluZSBESENQNlNPTElDSVQgICAgICAxCisjZGVmaW5lIERIQ1A2QURWRVJUSVNFICAgIDIKKyNkZWZpbmUgREhDUDZSRVFVRVNUICAgICAgMworI2RlZmluZSBESENQNkNPTkZJUk0gICAgICA0CisjZGVmaW5lIERIQ1A2UkVORVcgICAgICAgIDUKKyNkZWZpbmUgREhDUDZSRUJJTkQgICAgICAgNgorI2RlZmluZSBESENQNlJFUExZICAgICAgICA3CisjZGVmaW5lIERIQ1A2UkVMRUFTRSAgICAgIDgKKyNkZWZpbmUgREhDUDZERUNMSU5FICAgICAgOQorI2RlZmluZSBESENQNlJFQ09ORklHVVJFICAxMAorI2RlZmluZSBESENQNklSRVEgICAgICAgICAxMQorI2RlZmluZSBESENQNlJFTEFZRk9SVyAgICAxMgorI2RlZmluZSBESENQNlJFTEFZUkVQTCAgICAxMworCisjZGVmaW5lIE9QVElPTjZfQ0xJRU5UX0lEICAgICAgIDEKKyNkZWZpbmUgT1BUSU9ONl9TRVJWRVJfSUQgICAgICAgMgorI2RlZmluZSBPUFRJT042X0lBX05BICAgICAgICAgICAzCisjZGVmaW5lIE9QVElPTjZfSUFfVEEgICAgICAgICAgIDQKKyNkZWZpbmUgT1BUSU9ONl9JQUFERFIgICAgICAgICAgNQorI2RlZmluZSBPUFRJT042X09STyAgICAgICAgICAgICA2CisjZGVmaW5lIE9QVElPTjZfUFJFRkVSRU5DRSAgICAgIDcKKyNkZWZpbmUgT1BUSU9ONl9FTEFQU0VEX1RJTUUgICAgOAorI2RlZmluZSBPUFRJT042X1JFTEFZX01TRyAgICAgICA5CisjZGVmaW5lIE9QVElPTjZfQVVUSCAgICAgICAgICAgIDExCisjZGVmaW5lIE9QVElPTjZfVU5JQ0FTVCAgICAgICAgIDEyCisjZGVmaW5lIE9QVElPTjZfU1RBVFVTX0NPREUgICAgIDEzCisjZGVmaW5lIE9QVElPTjZfUkFQSURfQ09NTUlUICAgIDE0CisjZGVmaW5lIE9QVElPTjZfVVNFUl9DTEFTUyAgICAgIDE1CisjZGVmaW5lIE9QVElPTjZfVkVORE9SX0NMQVNTICAgIDE2CisjZGVmaW5lIE9QVElPTjZfVkVORE9SX09QVFMgICAgIDE3CisjZGVmaW5lIE9QVElPTjZfSU5URVJGQUNFX0lEICAgIDE4CisjZGVmaW5lIE9QVElPTjZfUkVDT05GSUdVUkVfTVNHIDE5CisjZGVmaW5lIE9QVElPTjZfUkVDT05GX0FDQ0VQVCAgIDIwCisjZGVmaW5lIE9QVElPTjZfRE5TX1NFUlZFUiAgICAgIDIzCisjZGVmaW5lIE9QVElPTjZfRE9NQUlOX1NFQVJDSCAgIDI0CisjZGVmaW5lIE9QVElPTjZfUkVGUkVTSF9USU1FICAgIDMyCisjZGVmaW5lIE9QVElPTjZfUkVNT1RFX0lEICAgICAgIDM3CisjZGVmaW5lIE9QVElPTjZfU1VCU0NSSUJFUl9JRCAgIDM4CisjZGVmaW5lIE9QVElPTjZfRlFETiAgICAgICAgICAgIDM5CisjZGVmaW5lIE9QVElPTjZfQ0xJRU5UX01BQyAgICAgIDc5CisKKy8qIHJlcGxhY2UgdGhpcyB3aXRoIHRoZSByZWFsIG51bWJlciB3aGVuIGFsbG9jYXRlZC4KKyAgIGRlZmluaW5nIHRoaXMgYWxzbyBlbmFibGVzIHRoZSByZWxldmFudCBjb2RlLiAqLyAKKy8qICNkZWZpbmUgT1BUSU9ONl9QUkVGSVhfQ0xBU1MgICAgOTkgKi8KKworCisjZGVmaW5lIERIQ1A2U1VDQ0VTUyAgICAgMAorI2RlZmluZSBESENQNlVOU1BFQyAgICAgIDEKKyNkZWZpbmUgREhDUDZOT0FERFJTICAgICAyCisjZGVmaW5lIERIQ1A2Tk9CSU5ESU5HICAgMworI2RlZmluZSBESENQNk5PVE9OTElOSyAgIDQKKyNkZWZpbmUgREhDUDZVU0VNVUxUSSAgICA1CisKZGlmZiAtLWdpdCBhL3NyYy9kaGNwNi5jIGIvc3JjL2RoY3A2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRjYWVhMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9kaGNwNi5jCkBAIC0wLDAgKzEsNzkwIEBACisvKiBkbnNtYXNxIGlzIENvcHlyaWdodCAoYykgMjAwMC0yMDE3IFNpbW9uIEtlbGxleQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMgZGF0ZWQgMjkgSnVuZSwgMjAwNy4KKyAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2luY2x1ZGUgImRuc21hc3EuaCIKKworI2lmZGVmIEhBVkVfREhDUDYKKworI2luY2x1ZGUgPG5ldGluZXQvaWNtcDYuaD4KKworc3RydWN0IGlmYWNlX3BhcmFtIHsKKyAgc3RydWN0IGRoY3BfY29udGV4dCAqY3VycmVudDsKKyAgc3RydWN0IGRoY3BfcmVsYXkgKnJlbGF5OworICBzdHJ1Y3QgaW42X2FkZHIgZmFsbGJhY2ssIHJlbGF5X2xvY2FsLCBsbF9hZGRyLCB1bGFfYWRkcjsKKyAgaW50IGluZCwgYWRkcl9tYXRjaDsKK307CisKKworc3RhdGljIGludCBjb21wbGV0ZV9jb250ZXh0NihzdHJ1Y3QgaW42X2FkZHIgKmxvY2FsLCAgaW50IHByZWZpeCwKKwkJCSAgICAgaW50IHNjb3BlLCBpbnQgaWZfaW5kZXgsIGludCBmbGFncywgCisJCQkgICAgIHVuc2lnbmVkIGludCBwcmVmZXJyZWQsIHVuc2lnbmVkIGludCB2YWxpZCwgdm9pZCAqdnBhcmFtKTsKK3N0YXRpYyBpbnQgbWFrZV9kdWlkMShpbnQgaW5kZXgsIHVuc2lnbmVkIGludCB0eXBlLCBjaGFyICptYWMsIHNpemVfdCBtYWNsZW4sIHZvaWQgKnBhcm0pOyAKKwordm9pZCBkaGNwNl9pbml0KHZvaWQpCit7CisgIGludCBmZDsKKyAgc3RydWN0IHNvY2thZGRyX2luNiBzYWRkcjsKKyNpZiBkZWZpbmVkKElQVjZfVENMQVNTKSAmJiBkZWZpbmVkKElQVE9TX0NMQVNTX0NTNikKKyAgaW50IGNsYXNzID0gSVBUT1NfQ0xBU1NfQ1M2OworI2VuZGlmCisgIGludCBvbmVvcHQgPSAxOworCisgIGlmICgoZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKSkgPT0gLTEgfHwKKyNpZiBkZWZpbmVkKElQVjZfVENMQVNTKSAmJiBkZWZpbmVkKElQVE9TX0NMQVNTX0NTNikKKyAgICAgIHNldHNvY2tvcHQoZmQsIElQUFJPVE9fSVBWNiwgSVBWNl9UQ0xBU1MsICZjbGFzcywgc2l6ZW9mKGNsYXNzKSkgPT0gLTEgfHwKKyNlbmRpZgorICAgICAgc2V0c29ja29wdChmZCwgSVBQUk9UT19JUFY2LCBJUFY2X1Y2T05MWSwgJm9uZW9wdCwgc2l6ZW9mKG9uZW9wdCkpID09IC0xIHx8CisgICAgICAhZml4X2ZkKGZkKSB8fAorICAgICAgIXNldF9pcHY2cGt0aW5mbyhmZCkpCisgICAgZGllIChfKCJjYW5ub3QgY3JlYXRlIERIQ1B2NiBzb2NrZXQ6ICVzIiksIE5VTEwsIEVDX0JBRE5FVCk7CisgIAorIC8qIFdoZW4gYmluZC1pbnRlcmZhY2VzIGlzIHNldCwgdGhlcmUgbWlnaHQgYmUgbW9yZSB0aGFuIG9uZSBkbnNtYXNxCisgICAgIGluc3RhbmNlIGJpbmRpbmcgcG9ydCA1NDcuIFRoYXQncyBPSyBpZiB0aGV5IHNlcnZlIGRpZmZlcmVudCBuZXR3b3Jrcy4KKyAgICAgTmVlZCB0byBzZXQgUkVVU0VBRERSfFJFVVNFUE9SVCB0byBtYWtlIHRoaXMgcG9zc2libGUuCisgICAgIEhhbmRsZSB0aGUgY2FzZSB0aGF0IFJFVVNFUE9SVCBpcyBkZWZpbmVkLCBidXQgdGhlIGtlcm5lbCBkb2Vzbid0IAorICAgICBzdXBwb3J0IGl0LiBUaGlzIGhhbmRsZXMgdGhlIGludHJvZHVjdGlvbiBvZiBSRVVTRVBPUlQgb24gTGludXguICovCisgIGlmIChvcHRpb25fYm9vbChPUFRfTk9XSUxEKSB8fCBvcHRpb25fYm9vbChPUFRfQ0xFVkVSQklORCkpCisgICAgeworICAgICAgaW50IHJjID0gMDsKKworI2lmZGVmIFNPX1JFVVNFUE9SVAorICAgICAgaWYgKChyYyA9IHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX1JFVVNFUE9SVCwgJm9uZW9wdCwgc2l6ZW9mKG9uZW9wdCkpKSA9PSAtMSAmJgorCSAgZXJybm8gPT0gRU5PUFJPVE9PUFQpCisJcmMgPSAwOworI2VuZGlmCisgICAgICAKKyAgICAgIGlmIChyYyAhPSAtMSkKKwlyYyA9IHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgJm9uZW9wdCwgc2l6ZW9mKG9uZW9wdCkpOworICAgICAgCisgICAgICBpZiAocmMgPT0gLTEpCisJZGllKF8oImZhaWxlZCB0byBzZXQgU09fUkVVU0V7QUREUnxQT1JUfSBvbiBESENQdjYgc29ja2V0OiAlcyIpLCBOVUxMLCBFQ19CQURORVQpOworICAgIH0KKyAgCisgIG1lbXNldCgmc2FkZHIsIDAsIHNpemVvZihzYWRkcikpOworI2lmZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisgIHNhZGRyLnNpbjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworI2VuZGlmCisgIHNhZGRyLnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisgIHNhZGRyLnNpbjZfYWRkciA9IGluNmFkZHJfYW55OworICBzYWRkci5zaW42X3BvcnQgPSBodG9ucyhESENQVjZfU0VSVkVSX1BPUlQpOworICAKKyAgaWYgKGJpbmQoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2FkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkpCisgICAgZGllKF8oImZhaWxlZCB0byBiaW5kIERIQ1B2NiBzZXJ2ZXIgc29ja2V0OiAlcyIpLCBOVUxMLCBFQ19CQURORVQpOworICAKKyAgZGFlbW9uLT5kaGNwNmZkID0gZmQ7Cit9CisKK3ZvaWQgZGhjcDZfcGFja2V0KHRpbWVfdCBub3cpCit7CisgIHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQ7CisgIHN0cnVjdCBkaGNwX3JlbGF5ICpyZWxheTsKKyAgc3RydWN0IGlmYWNlX3BhcmFtIHBhcm07CisgIHN0cnVjdCBjbXNnaGRyICpjbXB0cjsKKyAgc3RydWN0IG1zZ2hkciBtc2c7CisgIGludCBpZl9pbmRleCA9IDA7CisgIHVuaW9uIHsKKyAgICBzdHJ1Y3QgY21zZ2hkciBhbGlnbjsgLyogdGhpcyBlbnN1cmVzIGFsaWdubWVudCAqLworICAgIGNoYXIgY29udHJvbDZbQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IGluNl9wa3RpbmZvKSldOworICB9IGNvbnRyb2xfdTsKKyAgc3RydWN0IHNvY2thZGRyX2luNiBmcm9tOworICBzc2l6ZV90IHN6OyAKKyAgc3RydWN0IGlmcmVxIGlmcjsKKyAgc3RydWN0IGluYW1lICp0bXA7CisgIHVuc2lnbmVkIHNob3J0IHBvcnQ7CisgIHN0cnVjdCBpbjZfYWRkciBkc3RfYWRkcjsKKworICBtZW1zZXQoJmRzdF9hZGRyLCAwLCBzaXplb2YoZHN0X2FkZHIpKTsKKworICBtc2cubXNnX2NvbnRyb2wgPSBjb250cm9sX3UuY29udHJvbDY7CisgIG1zZy5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjb250cm9sX3UpOworICBtc2cubXNnX2ZsYWdzID0gMDsKKyAgbXNnLm1zZ19uYW1lID0gJmZyb207CisgIG1zZy5tc2dfbmFtZWxlbiA9IHNpemVvZihmcm9tKTsKKyAgbXNnLm1zZ19pb3YgPSAgJmRhZW1vbi0+ZGhjcF9wYWNrZXQ7CisgIG1zZy5tc2dfaW92bGVuID0gMTsKKyAgCisgIGlmICgoc3ogPSByZWN2X2RoY3BfcGFja2V0KGRhZW1vbi0+ZGhjcDZmZCwgJm1zZykpID09IC0xKQorICAgIHJldHVybjsKKyAgCisgIGZvciAoY21wdHIgPSBDTVNHX0ZJUlNUSERSKCZtc2cpOyBjbXB0cjsgY21wdHIgPSBDTVNHX05YVEhEUigmbXNnLCBjbXB0cikpCisgICAgaWYgKGNtcHRyLT5jbXNnX2xldmVsID09IElQUFJPVE9fSVBWNiAmJiBjbXB0ci0+Y21zZ190eXBlID09IGRhZW1vbi0+djZwa3RpbmZvKQorICAgICAgeworCXVuaW9uIHsKKwkgIHVuc2lnbmVkIGNoYXIgKmM7CisJICBzdHJ1Y3QgaW42X3BrdGluZm8gKnA7CisJfSBwOworCXAuYyA9IENNU0dfREFUQShjbXB0cik7CisgICAgICAgIAorCWlmX2luZGV4ID0gcC5wLT5pcGk2X2lmaW5kZXg7CisJZHN0X2FkZHIgPSBwLnAtPmlwaTZfYWRkcjsKKyAgICAgIH0KKworICBpZiAoIWluZGV4dG9uYW1lKGRhZW1vbi0+ZGhjcDZmZCwgaWZfaW5kZXgsIGlmci5pZnJfbmFtZSkpCisgICAgcmV0dXJuOworCisgIGlmICgocG9ydCA9IHJlbGF5X3JlcGx5NigmZnJvbSwgc3osIGlmci5pZnJfbmFtZSkpID09IDApCisgICAgeworICAgICAgc3RydWN0IGRoY3BfYnJpZGdlICpicmlkZ2UsICphbGlhczsKKworICAgICAgZm9yICh0bXAgPSBkYWVtb24tPmlmX2V4Y2VwdDsgdG1wOyB0bXAgPSB0bXAtPm5leHQpCisJaWYgKHRtcC0+bmFtZSAmJiB3aWxkY2FyZF9tYXRjaCh0bXAtPm5hbWUsIGlmci5pZnJfbmFtZSkpCisJICByZXR1cm47CisgICAgICAKKyAgICAgIGZvciAodG1wID0gZGFlbW9uLT5kaGNwX2V4Y2VwdDsgdG1wOyB0bXAgPSB0bXAtPm5leHQpCisJaWYgKHRtcC0+bmFtZSAmJiB3aWxkY2FyZF9tYXRjaCh0bXAtPm5hbWUsIGlmci5pZnJfbmFtZSkpCisJICByZXR1cm47CisgICAgICAKKyAgICAgIHBhcm0uY3VycmVudCA9IE5VTEw7CisgICAgICBwYXJtLnJlbGF5ID0gTlVMTDsKKyAgICAgIG1lbXNldCgmcGFybS5yZWxheV9sb2NhbCwgMCwgSU42QUREUlNaKTsKKyAgICAgIHBhcm0uaW5kID0gaWZfaW5kZXg7CisgICAgICBwYXJtLmFkZHJfbWF0Y2ggPSAwOworICAgICAgbWVtc2V0KCZwYXJtLmZhbGxiYWNrLCAwLCBJTjZBRERSU1opOworICAgICAgbWVtc2V0KCZwYXJtLmxsX2FkZHIsIDAsIElONkFERFJTWik7CisgICAgICBtZW1zZXQoJnBhcm0udWxhX2FkZHIsIDAsIElONkFERFJTWik7CisKKyAgICAgIC8qIElmIHRoZSBpbnRlcmZhY2Ugb24gd2hpY2ggdGhlIERIQ1B2NiByZXF1ZXN0IHdhcyByZWNlaXZlZCBpcworICAgICAgICAgYW4gYWxpYXMgb2Ygc29tZSBvdGhlciBpbnRlcmZhY2UgKGFzIHNwZWNpZmllZCBieSB0aGUKKyAgICAgICAgIC0tYnJpZGdlLWludGVyZmFjZSBvcHRpb24pLCBjaGFuZ2UgcGFybS5pbmQgc28gdGhhdCB3ZSBsb29rCisgICAgICAgICBmb3IgREhDUHY2IGNvbnRleHRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgYWxpYXNlZCBpbnRlcmZhY2UKKyAgICAgICAgIGluc3RlYWQgb2Ygd2l0aCB0aGUgYWxpYXNpbmcgb25lLiAqLworICAgICAgZm9yIChicmlkZ2UgPSBkYWVtb24tPmJyaWRnZXM7IGJyaWRnZTsgYnJpZGdlID0gYnJpZGdlLT5uZXh0KQorCXsKKwkgIGZvciAoYWxpYXMgPSBicmlkZ2UtPmFsaWFzOyBhbGlhczsgYWxpYXMgPSBhbGlhcy0+bmV4dCkKKwkgICAgaWYgKHdpbGRjYXJkX21hdGNobihhbGlhcy0+aWZhY2UsIGlmci5pZnJfbmFtZSwgSUZfTkFNRVNJWkUpKQorCSAgICAgIHsKKwkJcGFybS5pbmQgPSBpZl9uYW1ldG9pbmRleChicmlkZ2UtPmlmYWNlKTsKKwkJaWYgKCFwYXJtLmluZCkKKwkJICB7CisJCSAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19XQVJOSU5HLAorCQkJICAgICAgXygidW5rbm93biBpbnRlcmZhY2UgJXMgaW4gYnJpZGdlLWludGVyZmFjZSIpLAorCQkJICAgICAgYnJpZGdlLT5pZmFjZSk7CisJCSAgICByZXR1cm47CisJCSAgfQorCQlicmVhazsKKwkgICAgICB9CisJICBpZiAoYWxpYXMpCisJICAgIGJyZWFrOworCX0KKyAgICAgIAorICAgICAgZm9yIChjb250ZXh0ID0gZGFlbW9uLT5kaGNwNjsgY29udGV4dDsgY29udGV4dCA9IGNvbnRleHQtPm5leHQpCisJaWYgKElONl9JU19BRERSX1VOU1BFQ0lGSUVEKCZjb250ZXh0LT5zdGFydDYpICYmIGNvbnRleHQtPnByZWZpeCA9PSAwKQorCSAgeworCSAgICAvKiB3aWxkY2FyZCBjb250ZXh0IGZvciBESENQLXN0YXRlbGVzcyBvbmx5ICovCisJICAgIHBhcm0uY3VycmVudCA9IGNvbnRleHQ7CisJICAgIGNvbnRleHQtPmN1cnJlbnQgPSBOVUxMOworCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgLyogdW5saW5rZWQgY29udGV4dHMgYXJlIG1hcmtlZCBieSBjb250ZXh0LT5jdXJyZW50ID09IGNvbnRleHQgKi8KKwkgICAgY29udGV4dC0+Y3VycmVudCA9IGNvbnRleHQ7CisJICAgIG1lbXNldCgmY29udGV4dC0+bG9jYWw2LCAwLCBJTjZBRERSU1opOworCSAgfQorCisgICAgICBmb3IgKHJlbGF5ID0gZGFlbW9uLT5yZWxheTY7IHJlbGF5OyByZWxheSA9IHJlbGF5LT5uZXh0KQorCXJlbGF5LT5jdXJyZW50ID0gcmVsYXk7CisgICAgICAKKyAgICAgIGlmICghaWZhY2VfZW51bWVyYXRlKEFGX0lORVQ2LCAmcGFybSwgY29tcGxldGVfY29udGV4dDYpKQorCXJldHVybjsKKworICAgICAgaWYgKGRhZW1vbi0+aWZfbmFtZXMgfHwgZGFlbW9uLT5pZl9hZGRycykKKwl7CisJICAKKwkgIGZvciAodG1wID0gZGFlbW9uLT5pZl9uYW1lczsgdG1wOyB0bXAgPSB0bXAtPm5leHQpCisJICAgIGlmICh0bXAtPm5hbWUgJiYgd2lsZGNhcmRfbWF0Y2godG1wLT5uYW1lLCBpZnIuaWZyX25hbWUpKQorCSAgICAgIGJyZWFrOworCSAgCisJICBpZiAoIXRtcCAmJiAhcGFybS5hZGRyX21hdGNoKQorCSAgICByZXR1cm47CisJfQorICAgICAgCisgICAgICBpZiAocGFybS5yZWxheSkKKwl7CisJICAvKiBJZ25vcmUgcmVxdWVzdHMgc2VudCB0byB0aGUgQUxMX1NFUlZFUlMgbXVsdGljYXN0IGFkZHJlc3MgZm9yIHJlbGF5IHdoZW4KKwkgICAgIHdlJ3JlIGxpc3RlbmluZyB0aGVyZSBmb3IgREhDUHY2IHNlcnZlciByZWFzb25zLiAqLworCSAgc3RydWN0IGluNl9hZGRyIGFsbF9zZXJ2ZXJzOworCSAgCisJICBpbmV0X3B0b24oQUZfSU5FVDYsIEFMTF9TRVJWRVJTLCAmYWxsX3NlcnZlcnMpOworCSAgCisJICBpZiAoIUlONl9BUkVfQUREUl9FUVVBTCgmZHN0X2FkZHIsICZhbGxfc2VydmVycykpCisJICAgIHJlbGF5X3Vwc3RyZWFtNihwYXJtLnJlbGF5LCBzeiwgJmZyb20uc2luNl9hZGRyLCBmcm9tLnNpbjZfc2NvcGVfaWQsIG5vdyk7CisJICByZXR1cm47CisJfQorICAgICAgCisgICAgICAvKiBNYXkgaGF2ZSBjb25maWd1cmVkIHJlbGF5LCBidXQgbm90IERIQ1Agc2VydmVyICovCisgICAgICBpZiAoIWRhZW1vbi0+ZG9pbmdfZGhjcDYpCisJcmV0dXJuOworCisgICAgICBsZWFzZV9wcnVuZShOVUxMLCBub3cpOyAvKiBsb3NlIGFueSBleHBpcmVkIGxlYXNlcyAqLworICAgICAgCisgICAgICBwb3J0ID0gZGhjcDZfcmVwbHkocGFybS5jdXJyZW50LCBpZl9pbmRleCwgaWZyLmlmcl9uYW1lLCAmcGFybS5mYWxsYmFjaywgCisJCQkgJnBhcm0ubGxfYWRkciwgJnBhcm0udWxhX2FkZHIsIHN6LCAmZnJvbS5zaW42X2FkZHIsIG5vdyk7CisgICAgICAKKyAgICAgIGxlYXNlX3VwZGF0ZV9maWxlKG5vdyk7CisgICAgICBsZWFzZV91cGRhdGVfZG5zKDApOworICAgIH0KKwkJCSAgCisgIC8qIFRoZSBwb3J0IGluIHRoZSBzb3VyY2UgYWRkcmVzcyBvZiB0aGUgb3JpZ2luYWwgcmVxdWVzdCBzaG91bGQKKyAgICAgYmUgY29ycmVjdCwgYnV0IGF0IGxlYXN0IG9uY2UgY2xpZW50IHNlbmRzIGZyb20gdGhlIHNlcnZlciBwb3J0LAorICAgICBzbyB3ZSBleHBsaWNpdGx5IHNlbmQgdG8gdGhlIGNsaWVudCBwb3J0IHRvIGEgY2xpZW50LCBhbmQgdGhlCisgICAgIHNlcnZlciBwb3J0IHRvIGEgcmVsYXkuICovCisgIGlmIChwb3J0ICE9IDApCisgICAgeworICAgICAgZnJvbS5zaW42X3BvcnQgPSBodG9ucyhwb3J0KTsKKyAgICAgIHdoaWxlIChyZXRyeV9zZW5kKHNlbmR0byhkYWVtb24tPmRoY3A2ZmQsIGRhZW1vbi0+b3V0cGFja2V0Lmlvdl9iYXNlLCAKKwkJCSAgICAgICBzYXZlX2NvdW50ZXIoMCksIDAsIChzdHJ1Y3Qgc29ja2FkZHIgKikmZnJvbSwgCisJCQkgICAgICAgc2l6ZW9mKGZyb20pKSkpOworICAgIH0KK30KKwordm9pZCBnZXRfY2xpZW50X21hYyhzdHJ1Y3QgaW42X2FkZHIgKmNsaWVudCwgaW50IGlmYWNlLCB1bnNpZ25lZCBjaGFyICptYWMsIHVuc2lnbmVkIGludCAqbWFjbGVucCwgdW5zaWduZWQgaW50ICptYWN0eXBlcCwgdGltZV90IG5vdykKK3sKKyAgLyogUmVjZWl2aW5nIGEgcGFja2V0IGZyb20gYSBob3N0IGRvZXMgbm90IHBvcHVsYXRlIHRoZSBuZWlnaGJvdXIKKyAgICAgY2FjaGUsIHNvIHdlIHNlbmQgYSBuZWlnaGJvdXIgZGlzY292ZXJ5IHJlcXVlc3QgaWYgd2UgY2FuJ3QgCisgICAgIGZpbmQgdGhlIHNlbmRlci4gUmVwZWF0IGEgZmV3IHRpbWVzIGluIGNhc2Ugb2YgcGFja2V0IGxvc3MuICovCisgIAorICBzdHJ1Y3QgbmVpZ2hfcGFja2V0IG5laWdoOworICB1bmlvbiBteXNvY2thZGRyIGFkZHI7CisgIGludCBpLCBtYWNsZW47CisKKyAgbmVpZ2gudHlwZSA9IE5EX05FSUdIQk9SX1NPTElDSVQ7CisgIG5laWdoLmNvZGUgPSAwOworICBuZWlnaC5yZXNlcnZlZCA9IDA7CisgIG5laWdoLnRhcmdldCA9ICpjbGllbnQ7CisgIC8qIFJGQzQ0NDMgc2VjdGlvbi0yLjM6IGNoZWNrc3VtIGhhcyB0byBiZSB6ZXJvIHRvIGJlIGNhbGN1bGF0ZWQgKi8KKyAgbmVpZ2guY2hlY2tzdW0gPSAwOworICAgCisgIG1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTsKKyNpZmRlZiBIQVZFX1NPQ0tBRERSX1NBX0xFTgorICBhZGRyLmluNi5zaW42X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKyNlbmRpZgorICBhZGRyLmluNi5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworICBhZGRyLmluNi5zaW42X3BvcnQgPSBodG9ucyhJUFBST1RPX0lDTVBWNik7CisgIGFkZHIuaW42LnNpbjZfYWRkciA9ICpjbGllbnQ7CisgIGFkZHIuaW42LnNpbjZfc2NvcGVfaWQgPSBpZmFjZTsKKyAgCisgIGZvciAoaSA9IDA7IGkgPCA1OyBpKyspCisgICAgeworICAgICAgc3RydWN0IHRpbWVzcGVjIHRzOworICAgICAgCisgICAgICBpZiAoKG1hY2xlbiA9IGZpbmRfbWFjKCZhZGRyLCBtYWMsIDAsIG5vdykpICE9IDApCisJYnJlYWs7CisJICAKKyAgICAgIHNlbmR0byhkYWVtb24tPmljbXA2ZmQsICZuZWlnaCwgc2l6ZW9mKG5laWdoKSwgMCwgJmFkZHIuc2EsIHNpemVvZihhZGRyKSk7CisgICAgICAKKyAgICAgIHRzLnR2X3NlYyA9IDA7CisgICAgICB0cy50dl9uc2VjID0gMTAwMDAwMDAwOyAvKiAxMDBtcyAqLworICAgICAgbmFub3NsZWVwKCZ0cywgTlVMTCk7CisgICAgfQorCisgICptYWNsZW5wID0gbWFjbGVuOworICAqbWFjdHlwZXAgPSBBUlBIUkRfRVRIRVI7Cit9CisgICAgCitzdGF0aWMgaW50IGNvbXBsZXRlX2NvbnRleHQ2KHN0cnVjdCBpbjZfYWRkciAqbG9jYWwsICBpbnQgcHJlZml4LAorCQkJICAgICBpbnQgc2NvcGUsIGludCBpZl9pbmRleCwgaW50IGZsYWdzLCB1bnNpZ25lZCBpbnQgcHJlZmVycmVkLCAKKwkJCSAgICAgdW5zaWduZWQgaW50IHZhbGlkLCB2b2lkICp2cGFyYW0pCit7CisgIHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQ7CisgIHN0cnVjdCBkaGNwX3JlbGF5ICpyZWxheTsKKyAgc3RydWN0IGlmYWNlX3BhcmFtICpwYXJhbSA9IHZwYXJhbTsKKyAgc3RydWN0IGluYW1lICp0bXA7CisgCisgICh2b2lkKXNjb3BlOyAvKiB3YXJuaW5nICovCisgIAorICBpZiAoaWZfaW5kZXggPT0gcGFyYW0tPmluZCkKKyAgICB7CisgICAgICBpZiAoSU42X0lTX0FERFJfTElOS0xPQ0FMKGxvY2FsKSkKKwlwYXJhbS0+bGxfYWRkciA9ICpsb2NhbDsKKyAgICAgIGVsc2UgaWYgKElONl9JU19BRERSX1VMQShsb2NhbCkpCisJcGFyYW0tPnVsYV9hZGRyID0gKmxvY2FsOworCisgICAgICBpZiAoIUlONl9JU19BRERSX0xPT1BCQUNLKGxvY2FsKSAmJgorCSAgIUlONl9JU19BRERSX0xJTktMT0NBTChsb2NhbCkgJiYKKwkgICFJTjZfSVNfQUREUl9NVUxUSUNBU1QobG9jYWwpKQorCXsKKwkgIC8qIGlmIHdlIGhhdmUgLS1saXN0ZW4tYWRkcmVzcyBjb25maWcsIHNlZSBpZiB0aGUgCisJICAgICBhcnJpdmFsIGludGVyZmFjZSBoYXMgYSBtYXRjaGluZyBhZGRyZXNzLiAqLworCSAgZm9yICh0bXAgPSBkYWVtb24tPmlmX2FkZHJzOyB0bXA7IHRtcCA9IHRtcC0+bmV4dCkKKwkgICAgaWYgKHRtcC0+YWRkci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYgJiYKKwkJSU42X0FSRV9BRERSX0VRVUFMKCZ0bXAtPmFkZHIuaW42LnNpbjZfYWRkciwgbG9jYWwpKQorCSAgICAgIHBhcmFtLT5hZGRyX21hdGNoID0gMTsKKwkgIAorCSAgLyogRGV0ZXJtaW5lIGEgZ2xvYmFsbHkgYWRkcmVzcyBvbiB0aGUgYXJyaXZhbCBpbnRlcmZhY2UsIGV2ZW4KKwkgICAgIGlmIHdlIGhhdmUgbm8gbWF0Y2hpbmcgZGhjcC1jb250ZXh0LCBiZWNhdXNlIHdlJ3JlIG9ubHkKKwkgICAgIGFsbG9jYXRpbmcgb24gcmVtb3RlIHN1Ym5ldHMgdmlhIHJlbGF5cy4gVGhpcworCSAgICAgaXMgdXNlZCBhcyBhIGRlZmF1bHQgZm9yIHRoZSBETlMgc2VydmVyIG9wdGlvbi4gKi8KKwkgIHBhcmFtLT5mYWxsYmFjayA9ICpsb2NhbDsKKwkgIAorCSAgZm9yIChjb250ZXh0ID0gZGFlbW9uLT5kaGNwNjsgY29udGV4dDsgY29udGV4dCA9IGNvbnRleHQtPm5leHQpCisJICAgIHsKKwkgICAgICBpZiAoKGNvbnRleHQtPmZsYWdzICYgQ09OVEVYVF9ESENQKSAmJgorCQkgICEoY29udGV4dC0+ZmxhZ3MgJiAoQ09OVEVYVF9URU1QTEFURSB8IENPTlRFWFRfT0xEKSkgJiYKKwkJICBwcmVmaXggPD0gY29udGV4dC0+cHJlZml4ICYmCisJCSAgaXNfc2FtZV9uZXQ2KGxvY2FsLCAmY29udGV4dC0+c3RhcnQ2LCBjb250ZXh0LT5wcmVmaXgpICYmCisJCSAgaXNfc2FtZV9uZXQ2KGxvY2FsLCAmY29udGV4dC0+ZW5kNiwgY29udGV4dC0+cHJlZml4KSkKKwkJeworCQkgIAorCQkgIAorCQkgIC8qIGxpbmsgaXQgb250byB0aGUgY3VycmVudCBjaGFpbiBpZiB3ZSd2ZSBub3Qgc2VlbiBpdCBiZWZvcmUgKi8KKwkJICBpZiAoY29udGV4dC0+Y3VycmVudCA9PSBjb250ZXh0KQorCQkgICAgeworCQkgICAgICBzdHJ1Y3QgZGhjcF9jb250ZXh0ICp0bXAsICoqdXA7CisJCSAgICAgIAorCQkgICAgICAvKiB1c2UgaW50ZXJmYWNlIHZhbHVlcyBvbmx5IGZvciBjb25zdHJ1Y3RlZCBjb250ZXh0cyAqLworCQkgICAgICBpZiAoIShjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfQ09OU1RSVUNURUQpKQorCQkJcHJlZmVycmVkID0gdmFsaWQgPSAweGZmZmZmZmZmOworCQkgICAgICBlbHNlIGlmIChmbGFncyAmIElGQUNFX0RFUFJFQ0FURUQpCisJCQlwcmVmZXJyZWQgPSAwOworCQkgICAgICAKKwkJICAgICAgaWYgKGNvbnRleHQtPmZsYWdzICYgQ09OVEVYVF9ERVBSRUNBVEUpCisJCQlwcmVmZXJyZWQgPSAwOworCQkgICAgICAKKwkJICAgICAgLyogb3JkZXIgY2hhaW4sIGxvbmdlc3QgcHJlZmVycmVkIHRpbWUgZmlyc3QgKi8KKwkJICAgICAgZm9yICh1cCA9ICZwYXJhbS0+Y3VycmVudCwgdG1wID0gcGFyYW0tPmN1cnJlbnQ7IHRtcDsgdG1wID0gdG1wLT5jdXJyZW50KQorCQkJaWYgKHRtcC0+cHJlZmVycmVkIDw9IHByZWZlcnJlZCkKKwkJCSAgYnJlYWs7CisJCQllbHNlCisJCQkgIHVwID0gJnRtcC0+Y3VycmVudDsKKwkJICAgICAgCisJCSAgICAgIGNvbnRleHQtPmN1cnJlbnQgPSAqdXA7CisJCSAgICAgICp1cCA9IGNvbnRleHQ7CisJCSAgICAgIGNvbnRleHQtPmxvY2FsNiA9ICpsb2NhbDsKKwkJICAgICAgY29udGV4dC0+cHJlZmVycmVkID0gcHJlZmVycmVkOworCQkgICAgICBjb250ZXh0LT52YWxpZCA9IHZhbGlkOworCQkgICAgfQorCQl9CisJICAgIH0KKwl9CisKKyAgICAgIGZvciAocmVsYXkgPSBkYWVtb24tPnJlbGF5NjsgcmVsYXk7IHJlbGF5ID0gcmVsYXktPm5leHQpCisJaWYgKElONl9BUkVfQUREUl9FUVVBTChsb2NhbCwgJnJlbGF5LT5sb2NhbC5hZGRyLmFkZHI2KSAmJiByZWxheS0+Y3VycmVudCA9PSByZWxheSAmJgorCSAgICAoSU42X0lTX0FERFJfVU5TUEVDSUZJRUQoJnBhcmFtLT5yZWxheV9sb2NhbCkgfHwgSU42X0FSRV9BRERSX0VRVUFMKGxvY2FsLCAmcGFyYW0tPnJlbGF5X2xvY2FsKSkpCisJICB7CisJICAgIHJlbGF5LT5jdXJyZW50ID0gcGFyYW0tPnJlbGF5OworCSAgICBwYXJhbS0+cmVsYXkgPSByZWxheTsKKwkgICAgcGFyYW0tPnJlbGF5X2xvY2FsID0gKmxvY2FsOworCSAgfQorICAgICAgCisgICAgfSAgICAgICAgICAKKyAKKyByZXR1cm4gMTsKK30KKworc3RydWN0IGRoY3BfY29uZmlnICpjb25maWdfZmluZF9ieV9hZGRyZXNzNihzdHJ1Y3QgZGhjcF9jb25maWcgKmNvbmZpZ3MsIHN0cnVjdCBpbjZfYWRkciAqbmV0LCBpbnQgcHJlZml4LCB1NjQgYWRkcikKK3sKKyAgc3RydWN0IGRoY3BfY29uZmlnICpjb25maWc7CisgIAorICBmb3IgKGNvbmZpZyA9IGNvbmZpZ3M7IGNvbmZpZzsgY29uZmlnID0gY29uZmlnLT5uZXh0KQorICAgIGlmICgoY29uZmlnLT5mbGFncyAmIENPTkZJR19BRERSNikgJiYKKwlpc19zYW1lX25ldDYoJmNvbmZpZy0+YWRkcjYsIG5ldCwgcHJlZml4KSAmJgorCShwcmVmaXggPT0gMTI4IHx8IGFkZHI2cGFydCgmY29uZmlnLT5hZGRyNikgPT0gYWRkcikpCisgICAgICByZXR1cm4gY29uZmlnOworICAKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0cnVjdCBkaGNwX2NvbnRleHQgKmFkZHJlc3M2X2FsbG9jYXRlKHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQsICB1bnNpZ25lZCBjaGFyICpjbGlkLCBpbnQgY2xpZF9sZW4sIGludCB0ZW1wX2FkZHIsCisJCQkJICAgICAgIGludCBpYWlkLCBpbnQgc2VyaWFsLCBzdHJ1Y3QgZGhjcF9uZXRpZCAqbmV0aWRzLCBpbnQgcGxhaW5fcmFuZ2UsIHN0cnVjdCBpbjZfYWRkciAqYW5zKSAgIAoreworICAvKiBGaW5kIGEgZnJlZSBhZGRyZXNzOiBleGNsdWRlIGFueXRoaW5nIGluIHVzZSBhbmQgYW55dGhpbmcgYWxsb2NhdGVkIHRvCisgICAgIGEgcGFydGljdWxhciBod2FkZHIvY2xpZW50aWQvaG9zdG5hbWUgaW4gb3VyIGNvbmZpZ3VyYXRpb24uCisgICAgIFRyeSB0byByZXR1cm4gZnJvbSBjb250ZXh0cyB3aGljaCBtYXRjaCBuZXRpZHMgZmlyc3QuIAorICAgICAKKyAgICAgTm90ZSB0aGF0IHdlIGFzc3VtZSB0aGUgYWRkcmVzcyBwcmVmaXggbGVuZ3RocyBhcmUgNjQgb3IgZ3JlYXRlciwgc28gd2UgY2FuCisgICAgIGdldCBieSB3aXRoIDY0IGJpdCBhcml0aG1ldGljLgorKi8KKworICB1NjQgc3RhcnQsIGFkZHI7CisgIHN0cnVjdCBkaGNwX2NvbnRleHQgKmMsICpkOworICBpbnQgaSwgcGFzczsKKyAgdTY0IGo7IAorCisgIC8qIGhhc2ggaHdhZGRyOiB1c2UgdGhlIFNEQk0gaGFzaGluZyBhbGdvcml0aG0uICBUaGlzIHdvcmtzCisgICAgIGZvciBNQUMgYWRkcmVzc2VzLCBsZXQncyBzZWUgaG93IGl0IG1hbmFnZXMgd2l0aCBjbGllbnQtaWRzISAKKyAgICAgRm9yIHRlbXBvcmFyeSBhZGRyZXNzZXMsIHdlIGdlbmVyYXRlIGEgbmV3IHJhbmRvbSBvbmUgZWFjaCB0aW1lLiAqLworICBpZiAodGVtcF9hZGRyKQorICAgIGogPSByYW5kNjQoKTsKKyAgZWxzZQorICAgIGZvciAoaiA9IGlhaWQsIGkgPSAwOyBpIDwgY2xpZF9sZW47IGkrKykKKyAgICAgIGogPSBjbGlkW2ldICsgKGogPDwgNikgKyAoaiA8PCAxNikgLSBqOworICAKKyAgZm9yIChwYXNzID0gMDsgcGFzcyA8PSBwbGFpbl9yYW5nZSA/IDEgOiAwOyBwYXNzKyspCisgICAgZm9yIChjID0gY29udGV4dDsgYzsgYyA9IGMtPmN1cnJlbnQpCisgICAgICBpZiAoYy0+ZmxhZ3MgJiAoQ09OVEVYVF9ERVBSRUNBVEUgfCBDT05URVhUX1NUQVRJQyB8IENPTlRFWFRfUkFfU1RBVEVMRVNTIHwgQ09OVEVYVF9VU0VEKSkKKwljb250aW51ZTsKKyAgICAgIGVsc2UgaWYgKCFtYXRjaF9uZXRpZChjLT5maWx0ZXIsIG5ldGlkcywgcGFzcykpCisJY29udGludWU7CisgICAgICBlbHNlCisJeyAKKwkgIGlmICghdGVtcF9hZGRyICYmIG9wdGlvbl9ib29sKE9QVF9DT05TRUNfQUREUikpCisJICAgIHsKKwkgICAgICAvKiBzZWVkIGlzIGxhcmdlc3QgZXh0YW50IGxlYXNlIGFkZHIgaW4gdGhpcyBjb250ZXh0LAorCQkgc2tpcCBhZGRyZXNzZXMgZXF1YWwgdG8gdGhlIG51bWJlciBvZiBhZGRyZXNzZXMgcmVqZWN0ZWQKKwkJIGJ5IGNsaWVudHMuIFRoaXMgc2hvdWxkIGF2b2lkIHRoZSBzYW1lIGNsaWVudCBiZWluZyBvZmZlcmVkIHRoZSBzYW1lCisJCSBhZGRyZXNzIGFmdGVyIGl0IGhhcyByamVjdGVkIGl0LiAqLworCSAgICAgIHN0YXJ0ID0gbGVhc2VfZmluZF9tYXhfYWRkcjYoYykgKyAxICsgc2VyaWFsICsgYy0+YWRkcl9lcG9jaDsKKwkgICAgICBpZiAoYy0+YWRkcl9lcG9jaCkKKwkJYy0+YWRkcl9lcG9jaC0tOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICB1NjQgcmFuZ2UgPSAxICsgYWRkcjZwYXJ0KCZjLT5lbmQ2KSAtIGFkZHI2cGFydCgmYy0+c3RhcnQ2KTsKKwkgICAgICB1NjQgb2Zmc2V0ID0gaiArIGMtPmFkZHJfZXBvY2g7CisKKwkgICAgICAvKiBkb24ndCBkaXZpZGUgYnkgemVybyBpZiByYW5nZSBpcyB3aG9sZSAyXjY0ICovCisJICAgICAgaWYgKHJhbmdlICE9IDApCisJCW9mZnNldCA9IG9mZnNldCAlIHJhbmdlOworCisJICAgICAgc3RhcnQgPSBhZGRyNnBhcnQoJmMtPnN0YXJ0NikgKyBvZmZzZXQ7CisJICAgIH0KKworCSAgLyogaXRlcmF0ZSB1bnRpbCB3ZSBmaW5kIGEgZnJlZSBhZGRyZXNzLiAqLworCSAgYWRkciA9IHN0YXJ0OworCSAgCisJICBkbyB7CisJICAgIC8qIGVsaW1pbmF0ZSBhZGRyZXNzZXMgaW4gdXNlIGJ5IHRoZSBzZXJ2ZXIuICovCisJICAgIGZvciAoZCA9IGNvbnRleHQ7IGQ7IGQgPSBkLT5jdXJyZW50KQorCSAgICAgIGlmIChhZGRyID09IGFkZHI2cGFydCgmZC0+bG9jYWw2KSkKKwkJYnJlYWs7CisKKwkgICAgaWYgKCFkICYmCisJCSFsZWFzZTZfZmluZF9ieV9hZGRyKCZjLT5zdGFydDYsIGMtPnByZWZpeCwgYWRkcikgJiYgCisJCSFjb25maWdfZmluZF9ieV9hZGRyZXNzNihkYWVtb24tPmRoY3BfY29uZiwgJmMtPnN0YXJ0NiwgYy0+cHJlZml4LCBhZGRyKSkKKwkgICAgICB7CisJCSphbnMgPSBjLT5zdGFydDY7CisJCXNldGFkZHI2cGFydCAoYW5zLCBhZGRyKTsKKwkJcmV0dXJuIGM7CisJICAgICAgfQorCQorCSAgICBhZGRyKys7CisJICAgIAorCSAgICBpZiAoYWRkciAgPT0gYWRkcjZwYXJ0KCZjLT5lbmQ2KSArIDEpCisJICAgICAgYWRkciA9IGFkZHI2cGFydCgmYy0+c3RhcnQ2KTsKKwkgICAgCisJICB9IHdoaWxlIChhZGRyICE9IHN0YXJ0KTsKKwl9CisJICAgCisgIHJldHVybiBOVUxMOworfQorCisvKiBjYW4gZHluYW1pY2FsbHkgYWxsb2NhdGUgYWRkciAqLworc3RydWN0IGRoY3BfY29udGV4dCAqYWRkcmVzczZfYXZhaWxhYmxlKHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQsIAorCQkJCQlzdHJ1Y3QgaW42X2FkZHIgKnRhZGRyLAorCQkJCQlzdHJ1Y3QgZGhjcF9uZXRpZCAqbmV0aWRzLAorCQkJCQlpbnQgcGxhaW5fcmFuZ2UpCit7CisgIHU2NCBzdGFydCwgZW5kLCBhZGRyID0gYWRkcjZwYXJ0KHRhZGRyKTsKKyAgc3RydWN0IGRoY3BfY29udGV4dCAqdG1wOworIAorICBmb3IgKHRtcCA9IGNvbnRleHQ7IHRtcDsgdG1wID0gdG1wLT5jdXJyZW50KQorICAgIHsKKyAgICAgIHN0YXJ0ID0gYWRkcjZwYXJ0KCZ0bXAtPnN0YXJ0Nik7CisgICAgICBlbmQgPSBhZGRyNnBhcnQoJnRtcC0+ZW5kNik7CisKKyAgICAgIGlmICghKHRtcC0+ZmxhZ3MgJiAoQ09OVEVYVF9TVEFUSUMgfCBDT05URVhUX1JBX1NUQVRFTEVTUykpICYmCisgICAgICAgICAgaXNfc2FtZV9uZXQ2KCZ0bXAtPnN0YXJ0NiwgdGFkZHIsIHRtcC0+cHJlZml4KSAmJgorCSAgaXNfc2FtZV9uZXQ2KCZ0bXAtPmVuZDYsIHRhZGRyLCB0bXAtPnByZWZpeCkgJiYKKwkgIGFkZHIgPj0gc3RhcnQgJiYKKyAgICAgICAgICBhZGRyIDw9IGVuZCAmJgorICAgICAgICAgIG1hdGNoX25ldGlkKHRtcC0+ZmlsdGVyLCBuZXRpZHMsIHBsYWluX3JhbmdlKSkKKyAgICAgICAgcmV0dXJuIHRtcDsKKyAgICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIGFkZHJlc3MgT0sgaWYgY29uZmlndXJlZCAqLworc3RydWN0IGRoY3BfY29udGV4dCAqYWRkcmVzczZfdmFsaWQoc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dCwgCisJCQkJICAgIHN0cnVjdCBpbjZfYWRkciAqdGFkZHIsCisJCQkJICAgIHN0cnVjdCBkaGNwX25ldGlkICpuZXRpZHMsCisJCQkJICAgIGludCBwbGFpbl9yYW5nZSkKK3sKKyAgc3RydWN0IGRoY3BfY29udGV4dCAqdG1wOworIAorICBmb3IgKHRtcCA9IGNvbnRleHQ7IHRtcDsgdG1wID0gdG1wLT5jdXJyZW50KQorICAgIGlmIChpc19zYW1lX25ldDYoJnRtcC0+c3RhcnQ2LCB0YWRkciwgdG1wLT5wcmVmaXgpICYmCisJbWF0Y2hfbmV0aWQodG1wLT5maWx0ZXIsIG5ldGlkcywgcGxhaW5fcmFuZ2UpKQorICAgICAgcmV0dXJuIHRtcDsKKworICByZXR1cm4gTlVMTDsKK30KKworaW50IGNvbmZpZ192YWxpZChzdHJ1Y3QgZGhjcF9jb25maWcgKmNvbmZpZywgc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dCwgc3RydWN0IGluNl9hZGRyICphZGRyKQoreworICBpZiAoIWNvbmZpZyB8fCAhKGNvbmZpZy0+ZmxhZ3MgJiBDT05GSUdfQUREUjYpKQorICAgIHJldHVybiAwOworCisgIGlmICgoY29uZmlnLT5mbGFncyAmIENPTkZJR19XSUxEQ0FSRCkgJiYgY29udGV4dC0+cHJlZml4ID09IDY0KQorICAgIHsKKyAgICAgICphZGRyID0gY29udGV4dC0+c3RhcnQ2OworICAgICAgc2V0YWRkcjZwYXJ0KGFkZHIsIGFkZHI2cGFydCgmY29uZmlnLT5hZGRyNikpOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICAKKyAgaWYgKGlzX3NhbWVfbmV0NigmY29udGV4dC0+c3RhcnQ2LCAmY29uZmlnLT5hZGRyNiwgY29udGV4dC0+cHJlZml4KSkKKyAgICB7CisgICAgICAqYWRkciA9IGNvbmZpZy0+YWRkcjY7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIAorICByZXR1cm4gMDsKK30KKwordm9pZCBtYWtlX2R1aWQodGltZV90IG5vdykKK3sKKyAgKHZvaWQpbm93OworCisgIGlmIChkYWVtb24tPmR1aWRfY29uZmlnKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIgKnA7CisgICAgICAKKyAgICAgIGRhZW1vbi0+ZHVpZCA9IHAgPSBzYWZlX21hbGxvYyhkYWVtb24tPmR1aWRfY29uZmlnX2xlbiArIDYpOworICAgICAgZGFlbW9uLT5kdWlkX2xlbiA9IGRhZW1vbi0+ZHVpZF9jb25maWdfbGVuICsgNjsKKyAgICAgIFBVVFNIT1JUKDIsIHApOyAvKiBEVUlEX0VOICovCisgICAgICBQVVRMT05HKGRhZW1vbi0+ZHVpZF9lbnRlcnByaXNlLCBwKTsKKyAgICAgIG1lbWNweShwLCBkYWVtb24tPmR1aWRfY29uZmlnLCBkYWVtb24tPmR1aWRfY29uZmlnX2xlbik7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgdGltZV90IG5ld25vdyA9IDA7CisgICAgICAKKyAgICAgIC8qIElmIHdlIGhhdmUgbm8gcGVyc2lzdGVudCBsZWFzZSBkYXRhYmFzZSwgb3IgYSBub24tc3RhYmxlIFJUQywgdXNlIERVSURfTEwgKG5ld25vdyA9PSAwKSAqLworI2lmbmRlZiBIQVZFX0JST0tFTl9SVEMKKyAgICAgIC8qIHJlYmFzZSBlcG9jaCB0byAxLzEvMjAwMCAqLworICAgICAgaWYgKCFvcHRpb25fYm9vbChPUFRfTEVBU0VfUk8pIHx8IGRhZW1vbi0+bGVhc2VfY2hhbmdlX2NvbW1hbmQpCisJbmV3bm93ID0gbm93IC0gOTQ2Njg0ODAwOworI2VuZGlmICAgICAgCisgICAgICAKKyAgICAgIGlmYWNlX2VudW1lcmF0ZShBRl9MT0NBTCwgJm5ld25vdywgbWFrZV9kdWlkMSk7CisgICAgICAKKyAgICAgIGlmKCFkYWVtb24tPmR1aWQpCisJZGllKCJDYW5ub3QgY3JlYXRlIERIQ1B2NiBzZXJ2ZXIgRFVJRDogJXMiLCBOVUxMLCBFQ19NSVNDKTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQgbWFrZV9kdWlkMShpbnQgaW5kZXgsIHVuc2lnbmVkIGludCB0eXBlLCBjaGFyICptYWMsIHNpemVfdCBtYWNsZW4sIHZvaWQgKnBhcm0pCit7CisgIC8qIGNyZWF0ZSBEVUlEIGFzIHNwZWNpZmllZCBpbiBSRkMzMzE1LiBXZSB1c2UgdGhlIE1BQyBvZiB0aGUKKyAgICAgZmlyc3QgaW50ZXJmYWNlIHdlIGZpbmQgdGhhdCBpc24ndCBsb29wYmFjayBvciBQLXRvLVAgYW5kCisgICAgIGhhcyBhZGRyZXNzLXR5cGUgPCAyNTYuIEFkZHJlc3MgdHlwZXMgYWJvdmUgMjU2IGFyZSB0aGluZ3MgbGlrZSAKKyAgICAgdHVubmVscyB3aGljaCBkb24ndCBoYXZlIHVzYWJsZSBNQUMgYWRkcmVzc2VzLiAqLworICAKKyAgdW5zaWduZWQgY2hhciAqcDsKKyAgKHZvaWQpaW5kZXg7CisgICh2b2lkKXBhcm07CisgIHRpbWVfdCBuZXdub3cgPSAqKCh0aW1lX3QgKilwYXJtKTsKKyAgCisgIGlmICh0eXBlID49IDI1NikKKyAgICByZXR1cm4gMTsKKworICBpZiAobmV3bm93ID09IDApCisgICAgeworICAgICAgZGFlbW9uLT5kdWlkID0gcCA9IHNhZmVfbWFsbG9jKG1hY2xlbiArIDQpOworICAgICAgZGFlbW9uLT5kdWlkX2xlbiA9IG1hY2xlbiArIDQ7CisgICAgICBQVVRTSE9SVCgzLCBwKTsgLyogRFVJRF9MTCAqLworICAgICAgUFVUU0hPUlQodHlwZSwgcCk7IC8qIGFkZHJlc3MgdHlwZSAqLworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGRhZW1vbi0+ZHVpZCA9IHAgPSBzYWZlX21hbGxvYyhtYWNsZW4gKyA4KTsKKyAgICAgIGRhZW1vbi0+ZHVpZF9sZW4gPSBtYWNsZW4gKyA4OworICAgICAgUFVUU0hPUlQoMSwgcCk7IC8qIERVSURfTExUICovCisgICAgICBQVVRTSE9SVCh0eXBlLCBwKTsgLyogYWRkcmVzcyB0eXBlICovCisgICAgICBQVVRMT05HKCooKHRpbWVfdCAqKXBhcm0pLCBwKTsgLyogdGltZSAqLworICAgIH0KKyAgCisgIG1lbWNweShwLCBtYWMsIG1hY2xlbik7CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBjcGFyYW0geworICB0aW1lX3Qgbm93OworICBpbnQgbmV3b25lLCBuZXduYW1lOworfTsKKworc3RhdGljIGludCBjb25zdHJ1Y3Rfd29ya2VyKHN0cnVjdCBpbjZfYWRkciAqbG9jYWwsIGludCBwcmVmaXgsIAorCQkJICAgIGludCBzY29wZSwgaW50IGlmX2luZGV4LCBpbnQgZmxhZ3MsIAorCQkJICAgIGludCBwcmVmZXJyZWQsIGludCB2YWxpZCwgdm9pZCAqdnBhcmFtKQoreworICBjaGFyIGlmcm5fbmFtZVtJRk5BTVNJWl07CisgIHN0cnVjdCBpbjZfYWRkciBzdGFydDYsIGVuZDY7CisgIHN0cnVjdCBkaGNwX2NvbnRleHQgKnRlbXBsYXRlLCAqY29udGV4dDsKKworICAodm9pZClzY29wZTsKKyAgKHZvaWQpZmxhZ3M7CisgICh2b2lkKXZhbGlkOworICAodm9pZClwcmVmZXJyZWQ7CisKKyAgc3RydWN0IGNwYXJhbSAqcGFyYW0gPSB2cGFyYW07CisKKyAgaWYgKElONl9JU19BRERSX0xPT1BCQUNLKGxvY2FsKSB8fAorICAgICAgSU42X0lTX0FERFJfTElOS0xPQ0FMKGxvY2FsKSB8fAorICAgICAgSU42X0lTX0FERFJfTVVMVElDQVNUKGxvY2FsKSkKKyAgICByZXR1cm4gMTsKKworICBpZiAoIShmbGFncyAmIElGQUNFX1BFUk1BTkVOVCkpCisgICAgcmV0dXJuIDE7CisKKyAgaWYgKGZsYWdzICYgSUZBQ0VfREVQUkVDQVRFRCkKKyAgICByZXR1cm4gMTsKKworICBpZiAoIWluZGV4dG9uYW1lKGRhZW1vbi0+aWNtcDZmZCwgaWZfaW5kZXgsIGlmcm5fbmFtZSkpCisgICAgcmV0dXJuIDA7CisgIAorICBmb3IgKHRlbXBsYXRlID0gZGFlbW9uLT5kaGNwNjsgdGVtcGxhdGU7IHRlbXBsYXRlID0gdGVtcGxhdGUtPm5leHQpCisgICAgaWYgKCEodGVtcGxhdGUtPmZsYWdzICYgQ09OVEVYVF9URU1QTEFURSkpCisgICAgICB7CisJLyogbm9uLXRlbXBsYXRlIGVudHJpZXMsIGp1c3QgZmlsbCBpbiBpbnRlcmZhY2UgYW5kIGxvY2FsIGFkZHJlc3NlcyAqLworCWlmIChwcmVmaXggPD0gdGVtcGxhdGUtPnByZWZpeCAmJgorCSAgICBpc19zYW1lX25ldDYobG9jYWwsICZ0ZW1wbGF0ZS0+c3RhcnQ2LCB0ZW1wbGF0ZS0+cHJlZml4KSAmJgorCSAgICBpc19zYW1lX25ldDYobG9jYWwsICZ0ZW1wbGF0ZS0+ZW5kNiwgdGVtcGxhdGUtPnByZWZpeCkpCisJICB7CisJICAgIHRlbXBsYXRlLT5pZl9pbmRleCA9IGlmX2luZGV4OworCSAgICB0ZW1wbGF0ZS0+bG9jYWw2ID0gKmxvY2FsOworCSAgfQorCQorICAgICAgfQorICAgIGVsc2UgaWYgKHdpbGRjYXJkX21hdGNoKHRlbXBsYXRlLT50ZW1wbGF0ZV9pbnRlcmZhY2UsIGlmcm5fbmFtZSkgJiYKKwkgICAgIHRlbXBsYXRlLT5wcmVmaXggPj0gcHJlZml4KQorICAgICAgeworCXN0YXJ0NiA9ICpsb2NhbDsKKwlzZXRhZGRyNnBhcnQoJnN0YXJ0NiwgYWRkcjZwYXJ0KCZ0ZW1wbGF0ZS0+c3RhcnQ2KSk7CisJZW5kNiA9ICpsb2NhbDsKKwlzZXRhZGRyNnBhcnQoJmVuZDYsIGFkZHI2cGFydCgmdGVtcGxhdGUtPmVuZDYpKTsKKwkKKwlmb3IgKGNvbnRleHQgPSBkYWVtb24tPmRoY3A2OyBjb250ZXh0OyBjb250ZXh0ID0gY29udGV4dC0+bmV4dCkKKwkgIGlmICgoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX0NPTlNUUlVDVEVEKSAmJgorCSAgICAgIElONl9BUkVfQUREUl9FUVVBTCgmc3RhcnQ2LCAmY29udGV4dC0+c3RhcnQ2KSAmJgorCSAgICAgIElONl9BUkVfQUREUl9FUVVBTCgmZW5kNiwgJmNvbnRleHQtPmVuZDYpKQorCSAgICB7CisJICAgICAgaW50IGZsYWdzID0gY29udGV4dC0+ZmxhZ3M7CisJICAgICAgY29udGV4dC0+ZmxhZ3MgJj0gfihDT05URVhUX0dDIHwgQ09OVEVYVF9PTEQpOworCSAgICAgIGlmIChmbGFncyAmIENPTlRFWFRfT0xEKQorCQl7CisJCSAgLyogYWRkcmVzcyB3ZW50LCBub3cgaXQncyBiYWNrICovCisJCSAgbG9nX2NvbnRleHQoQUZfSU5FVDYsIGNvbnRleHQpOyAKKwkJICAvKiBmYXN0IFJBcyBmb3IgYSB3aGlsZSAqLworCQkgIHJhX3N0YXJ0X3Vuc29saWNpdGVkKHBhcmFtLT5ub3csIGNvbnRleHQpOworCQkgIHBhcmFtLT5uZXdvbmUgPSAxOyAKKwkJICAvKiBBZGQgYWRkcmVzcyB0byBuYW1lIGFnYWluICovCisJCSAgaWYgKGNvbnRleHQtPmZsYWdzICYgQ09OVEVYVF9SQV9OQU1FKQorCQkgICAgcGFyYW0tPm5ld25hbWUgPSAxOworCQl9CisJICAgICAgYnJlYWs7CisJICAgIH0KKwkKKwlpZiAoIWNvbnRleHQgJiYgKGNvbnRleHQgPSB3aGluZV9tYWxsb2Moc2l6ZW9mIChzdHJ1Y3QgZGhjcF9jb250ZXh0KSkpKQorCSAgeworCSAgICAqY29udGV4dCA9ICp0ZW1wbGF0ZTsKKwkgICAgY29udGV4dC0+c3RhcnQ2ID0gc3RhcnQ2OworCSAgICBjb250ZXh0LT5lbmQ2ID0gZW5kNjsKKwkgICAgY29udGV4dC0+ZmxhZ3MgJj0gfkNPTlRFWFRfVEVNUExBVEU7CisJICAgIGNvbnRleHQtPmZsYWdzIHw9IENPTlRFWFRfQ09OU1RSVUNURUQ7CisJICAgIGNvbnRleHQtPmlmX2luZGV4ID0gaWZfaW5kZXg7CisJICAgIGNvbnRleHQtPmxvY2FsNiA9ICpsb2NhbDsKKwkgICAgY29udGV4dC0+c2F2ZWRfdmFsaWQgPSAwOworCSAgICAKKwkgICAgY29udGV4dC0+bmV4dCA9IGRhZW1vbi0+ZGhjcDY7CisJICAgIGRhZW1vbi0+ZGhjcDYgPSBjb250ZXh0OworCisJICAgIHJhX3N0YXJ0X3Vuc29saWNpdGVkKHBhcmFtLT5ub3csIGNvbnRleHQpOworCSAgICAvKiB3ZSBjcmVhdGVkIGEgbmV3IG9uZSwgbmVlZCB0byBjYWxsCisJICAgICAgIGxlYXNlX3VwZGF0ZV9maWxlIHRvIGdldCBwZXJpb2RpYyBmdW5jdGlvbnMgY2FsbGVkICovCisJICAgIHBhcmFtLT5uZXdvbmUgPSAxOyAKKworCSAgICAvKiBXaWxsIG5lZWQgdG8gYWRkIG5ldyBwdXRhdGl2ZSBTTEFBQyBhZGRyZXNzZXMgdG8gZXhpc3RpbmcgbGVhc2VzICovCisJICAgIGlmIChjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfUkFfTkFNRSkKKwkgICAgICBwYXJhbS0+bmV3bmFtZSA9IDE7CisJICAgIAorCSAgICBsb2dfY29udGV4dChBRl9JTkVUNiwgY29udGV4dCk7CisJICB9IAorICAgICAgfQorICAKKyAgcmV0dXJuIDE7Cit9CisKK3ZvaWQgZGhjcF9jb25zdHJ1Y3RfY29udGV4dHModGltZV90IG5vdykKK3sgCisgIHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQsICp0bXAsICoqdXA7CisgIHN0cnVjdCBjcGFyYW0gcGFyYW07CisgIHBhcmFtLm5ld29uZSA9IDA7CisgIHBhcmFtLm5ld25hbWUgPSAwOworICBwYXJhbS5ub3cgPSBub3c7CisKKyAgZm9yIChjb250ZXh0ID0gZGFlbW9uLT5kaGNwNjsgY29udGV4dDsgY29udGV4dCA9IGNvbnRleHQtPm5leHQpCisgICAgaWYgKGNvbnRleHQtPmZsYWdzICYgQ09OVEVYVF9DT05TVFJVQ1RFRCkKKyAgICAgIGNvbnRleHQtPmZsYWdzIHw9IENPTlRFWFRfR0M7CisgICAKKyAgaWZhY2VfZW51bWVyYXRlKEFGX0lORVQ2LCAmcGFyYW0sIGNvbnN0cnVjdF93b3JrZXIpOworCisgIGZvciAodXAgPSAmZGFlbW9uLT5kaGNwNiwgY29udGV4dCA9IGRhZW1vbi0+ZGhjcDY7IGNvbnRleHQ7IGNvbnRleHQgPSB0bXApCisgICAgeworICAgICAgCisgICAgICB0bXAgPSBjb250ZXh0LT5uZXh0OyAKKyAgICAgCisgICAgICBpZiAoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX0dDICYmICEoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX09MRCkpCisJeworCSAgaWYgKChjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfUkEpIHx8IG9wdGlvbl9ib29sKE9QVF9SQSkpCisJICAgIHsKKwkgICAgICAvKiBwcmV2aW91c2x5IGNvbnN0cnVjdGVkIGNvbnRleHQgaGFzIGdvbmUuIGFkdmVydGlzZSBpdCdzIGRlbWlzZSAqLworCSAgICAgIGNvbnRleHQtPmZsYWdzIHw9IENPTlRFWFRfT0xEOworCSAgICAgIGNvbnRleHQtPmFkZHJlc3NfbG9zdF90aW1lID0gbm93OworCSAgICAgIC8qIEFwcGx5IHNhbWUgY2VpbGluZyBvZiBjb25maWd1cmVkIGxlYXNlIHRpbWUgYXMgaW4gcmFkdi5jICovCisJICAgICAgaWYgKGNvbnRleHQtPnNhdmVkX3ZhbGlkID4gY29udGV4dC0+bGVhc2VfdGltZSkKKwkJY29udGV4dC0+c2F2ZWRfdmFsaWQgPSBjb250ZXh0LT5sZWFzZV90aW1lOworCSAgICAgIC8qIG1heGltdW0gdGltZSBpcyAyIGhvdXJzLCBmcm9tIFJGQyAqLworCSAgICAgIGlmIChjb250ZXh0LT5zYXZlZF92YWxpZCA+IDcyMDApIC8qIDIgaG91cnMgKi8KKwkJY29udGV4dC0+c2F2ZWRfdmFsaWQgPSA3MjAwOworCSAgICAgIHJhX3N0YXJ0X3Vuc29saWNpdGVkKG5vdywgY29udGV4dCk7CisJICAgICAgcGFyYW0ubmV3b25lID0gMTsgLyogaW5jbHVkZSBkZWxldGlvbiAqLyAKKwkgICAgICAKKwkgICAgICBpZiAoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX1JBX05BTUUpCisJCXBhcmFtLm5ld25hbWUgPSAxOyAKKwkJCSAgICAgIAorCSAgICAgIGxvZ19jb250ZXh0KEFGX0lORVQ2LCBjb250ZXh0KTsKKwkgICAgICAKKwkgICAgICB1cCA9ICZjb250ZXh0LT5uZXh0OworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAvKiB3ZSB3ZXJlIG5ldmVyIGRvaW5nIFJBIGZvciB0aGlzLCBzbyBmcmVlIG5vdyAqLworCSAgICAgICp1cCA9IGNvbnRleHQtPm5leHQ7CisJICAgICAgZnJlZShjb250ZXh0KTsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwkgdXAgPSAmY29udGV4dC0+bmV4dDsKKyAgICB9CisgIAorICBpZiAocGFyYW0ubmV3b25lKQorICAgIHsKKyAgICAgIGlmIChkYWVtb24tPmRoY3AgfHwgZGFlbW9uLT5kb2luZ19kaGNwNikKKwl7CisJICBpZiAocGFyYW0ubmV3bmFtZSkKKwkgICAgbGVhc2VfdXBkYXRlX3NsYWFjKG5vdyk7CisJICBsZWFzZV91cGRhdGVfZmlsZShub3cpOworCX0KKyAgICAgIGVsc2UgCisJLyogTm90IGRvaW5nIERIQ1AsIHNvIG5vIGxlYXNlIHN5c3RlbSwgbWFuYWdlIGFsYXJtcyBmb3IgcmEgb25seSAqLworCXNlbmRfYWxhcm0ocGVyaW9kaWNfcmEobm93KSwgbm93KTsKKyAgICB9Cit9CisKKyNlbmRpZgorCisKZGlmZiAtLWdpdCBhL3NyYy9kbnMtcHJvdG9jb2wuaCBiL3NyYy9kbnMtcHJvdG9jb2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjFhYmM3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Rucy1wcm90b2NvbC5oCkBAIC0wLDAgKzEsMTU1IEBACisvKiBkbnNtYXNxIGlzIENvcHlyaWdodCAoYykgMjAwMC0yMDE3IFNpbW9uIEtlbGxleQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMgZGF0ZWQgMjkgSnVuZSwgMjAwNy4KKyAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2RlZmluZSBOQU1FU0VSVkVSX1BPUlQgNTMKKyNkZWZpbmUgVEZUUF9QT1JUICAgICAgIDY5CisjZGVmaW5lIE1BWF9QT1JUICAgICAgICA2NTUzNXUKKworI2RlZmluZSBJTjZBRERSU1ogICAgICAgMTYKKyNkZWZpbmUgSU5BRERSU1ogICAgICAgIDQKKworI2RlZmluZSBQQUNLRVRTWgk1MTIJCS8qIG1heGltdW0gcGFja2V0IHNpemUgKi8KKyNkZWZpbmUgTUFYRE5BTUUJMTAyNQkJLyogbWF4aW11bSBwcmVzZW50YXRpb24gZG9tYWluIG5hbWUgKi8KKyNkZWZpbmUgUlJGSVhFRFNaCTEwCQkvKiAjL2J5dGVzIG9mIGZpeGVkIGRhdGEgaW4gciByZWNvcmQgKi8KKyNkZWZpbmUgTUFYTEFCRUwgICAgICAgIDYzICAgICAgICAgICAgICAvKiBtYXhpbXVtIGxlbmd0aCBvZiBkb21haW4gbGFiZWwgKi8KKworI2RlZmluZSBOT0VSUk9SCQkwCQkvKiBubyBlcnJvciAqLworI2RlZmluZSBGT1JNRVJSCQkxCQkvKiBmb3JtYXQgZXJyb3IgKi8KKyNkZWZpbmUgU0VSVkZBSUwJMgkJLyogc2VydmVyIGZhaWx1cmUgKi8KKyNkZWZpbmUgTlhET01BSU4JMwkJLyogbm9uIGV4aXN0ZW50IGRvbWFpbiAqLworI2RlZmluZSBOT1RJTVAJCTQJCS8qIG5vdCBpbXBsZW1lbnRlZCAqLworI2RlZmluZSBSRUZVU0VECQk1CQkvKiBxdWVyeSByZWZ1c2VkICovCisKKyNkZWZpbmUgUVVFUlkgICAgICAgICAgIDAgICAgICAgICAgICAgICAvKiBvcGNvZGUgKi8KKworI2RlZmluZSBDX0lOICAgICAgICAgICAgMSAgICAgICAgICAgICAgIC8qIHRoZSBhcnBhIGludGVybmV0ICovCisjZGVmaW5lIENfQ0hBT1MgICAgICAgICAzICAgICAgICAgICAgICAgLyogZm9yIGNoYW9zIG5ldCAoTUlUKSAqLworI2RlZmluZSBDX0hFU0lPRCAgICAgICAgNCAgICAgICAgICAgICAgIC8qIGhlc2lvZCAqLworI2RlZmluZSBDX0FOWSAgICAgICAgICAgMjU1ICAgICAgICAgICAgIC8qIHdpbGRjYXJkIG1hdGNoICovCisKKyNkZWZpbmUgVF9BCQkxCisjZGVmaW5lIFRfTlMgICAgICAgICAgICAyCisjZGVmaW5lIFRfTUQgICAgICAgICAgICAzCisjZGVmaW5lIFRfTUYgICAgICAgICAgICA0ICAgICAgICAgICAgIAorI2RlZmluZSBUX0NOQU1FCQk1CisjZGVmaW5lIFRfU09BCQk2CisjZGVmaW5lIFRfTUIgICAgICAgICAgICA3CisjZGVmaW5lIFRfTUcgICAgICAgICAgICA4CisjZGVmaW5lIFRfTVIgICAgICAgICAgICA5CisjZGVmaW5lIFRfUFRSCQkxMgorI2RlZmluZSBUX01JTkZPICAgICAgICAgMTQKKyNkZWZpbmUgVF9NWAkJMTUKKyNkZWZpbmUgVF9UWFQJCTE2CisjZGVmaW5lIFRfUlAgICAgICAgICAgICAxNworI2RlZmluZSBUX0FGU0RCICAgICAgICAgMTgKKyNkZWZpbmUgVF9SVCAgICAgICAgICAgIDIxCisjZGVmaW5lIFRfU0lHCQkyNAorI2RlZmluZSBUX1BYICAgICAgICAgICAgMjYKKyNkZWZpbmUgVF9BQUFBCQkyOAorI2RlZmluZSBUX05YVCAgICAgICAgICAgMzAKKyNkZWZpbmUgVF9TUlYJCTMzCisjZGVmaW5lIFRfTkFQVFIJCTM1CisjZGVmaW5lIFRfS1ggICAgICAgICAgICAzNgorI2RlZmluZSBUX0ROQU1FICAgICAgICAgMzkKKyNkZWZpbmUgVF9PUFQJCTQxCisjZGVmaW5lIFRfRFMgICAgICAgICAgICA0MworI2RlZmluZSBUX1JSU0lHICAgICAgICAgNDYKKyNkZWZpbmUgVF9OU0VDICAgICAgICAgIDQ3CisjZGVmaW5lIFRfRE5TS0VZICAgICAgICA0OAorI2RlZmluZSBUX05TRUMzICAgICAgICAgNTAKKyNkZWZpbmUJVF9US0VZCQkyNDkJCQorI2RlZmluZQlUX1RTSUcJCTI1MAorI2RlZmluZSBUX0FYRlIgICAgICAgICAgMjUyCisjZGVmaW5lIFRfTUFJTEIJCTI1MwkKKyNkZWZpbmUgVF9BTlkJCTI1NQorCisjZGVmaW5lIEVETlMwX09QVElPTl9NQUMgICAgICAgICAgICA2NTAwMSAvKiBkeW5kbnMub3JnIHRlbXBvcmFyeSBhc3NpZ25tZW50ICovCisjZGVmaW5lIEVETlMwX09QVElPTl9DTElFTlRfU1VCTkVUICA4ICAgICAvKiBJQU5BICovCisjZGVmaW5lIEVETlMwX09QVElPTl9OT01ERVZJQ0VJRCAgICA2NTA3MyAvKiBOb21pbnVtIHRlbXBvcmFyeSBhc3NpZ25tZW50ICovCisjZGVmaW5lIEVETlMwX09QVElPTl9OT01DUEVJRCAgICAgICA2NTA3NCAvKiBOb21pbnVtIHRlbXBvcmFyeSBhc3NpZ25tZW50ICovCisKK3N0cnVjdCBkbnNfaGVhZGVyIHsKKyAgdTE2IGlkOworICB1OCAgaGIzLGhiNDsKKyAgdTE2IHFkY291bnQsYW5jb3VudCxuc2NvdW50LGFyY291bnQ7Cit9OworCisjZGVmaW5lIEhCM19RUiAgICAgICAweDgwIC8qIFF1ZXJ5ICovCisjZGVmaW5lIEhCM19PUENPREUgICAweDc4CisjZGVmaW5lIEhCM19BQSAgICAgICAweDA0IC8qIEF1dGhvcml0YXRpdmUgQW5zd2VyICovCisjZGVmaW5lIEhCM19UQyAgICAgICAweDAyIC8qIFRydW5DYXRlZCAqLworI2RlZmluZSBIQjNfUkQgICAgICAgMHgwMSAvKiBSZWN1cnNpb24gRGVzaXJlZCAqLworCisjZGVmaW5lIEhCNF9SQSAgICAgICAweDgwIC8qIFJlY3Vyc2lvbiBBdmFpbGFibGUgKi8KKyNkZWZpbmUgSEI0X0FEICAgICAgIDB4MjAgLyogQXV0aGVudGljYXRlZCBEYXRhICovCisjZGVmaW5lIEhCNF9DRCAgICAgICAweDEwIC8qIENoZWNraW5nIERpc2FibGVkICovCisjZGVmaW5lIEhCNF9SQ09ERSAgICAweDBmCisKKyNkZWZpbmUgT1BDT0RFKHgpICAgICAgICAgICgoKHgpLT5oYjMgJiBIQjNfT1BDT0RFKSA+PiAzKQorI2RlZmluZSBTRVRfT1BDT0RFKHgsIGNvZGUpICh4KS0+aGIzID0gKCh4KS0+aGIzICYgfkhCM19PUENPREUpIHwgY29kZQorCisjZGVmaW5lIFJDT0RFKHgpICAgICAgICAgICAoKHgpLT5oYjQgJiBIQjRfUkNPREUpCisjZGVmaW5lIFNFVF9SQ09ERSh4LCBjb2RlKSAoeCktPmhiNCA9ICgoeCktPmhiNCAmIH5IQjRfUkNPREUpIHwgY29kZQorICAKKyNkZWZpbmUgR0VUU0hPUlQocywgY3ApIHsgXAorCXVuc2lnbmVkIGNoYXIgKnRfY3AgPSAodW5zaWduZWQgY2hhciAqKShjcCk7IFwKKwkocykgPSAoKHUxNil0X2NwWzBdIDw8IDgpIFwKKwkgICAgfCAoKHUxNil0X2NwWzFdKSBcCisJICAgIDsgXAorCShjcCkgKz0gMjsgXAorfQorCisjZGVmaW5lIEdFVExPTkcobCwgY3ApIHsgXAorCXVuc2lnbmVkIGNoYXIgKnRfY3AgPSAodW5zaWduZWQgY2hhciAqKShjcCk7IFwKKwkobCkgPSAoKHUzMil0X2NwWzBdIDw8IDI0KSBcCisJICAgIHwgKCh1MzIpdF9jcFsxXSA8PCAxNikgXAorCSAgICB8ICgodTMyKXRfY3BbMl0gPDwgOCkgXAorCSAgICB8ICgodTMyKXRfY3BbM10pIFwKKwkgICAgOyBcCisJKGNwKSArPSA0OyBcCit9CisKKyNkZWZpbmUgUFVUU0hPUlQocywgY3ApIHsgXAorCXUxNiB0X3MgPSAodTE2KShzKTsgXAorCXVuc2lnbmVkIGNoYXIgKnRfY3AgPSAodW5zaWduZWQgY2hhciAqKShjcCk7IFwKKwkqdF9jcCsrID0gdF9zID4+IDg7IFwKKwkqdF9jcCAgID0gdF9zOyBcCisJKGNwKSArPSAyOyBcCit9CisKKyNkZWZpbmUgUFVUTE9ORyhsLCBjcCkgeyBcCisJdTMyIHRfbCA9ICh1MzIpKGwpOyBcCisJdW5zaWduZWQgY2hhciAqdF9jcCA9ICh1bnNpZ25lZCBjaGFyICopKGNwKTsgXAorCSp0X2NwKysgPSB0X2wgPj4gMjQ7IFwKKwkqdF9jcCsrID0gdF9sID4+IDE2OyBcCisJKnRfY3ArKyA9IHRfbCA+PiA4OyBcCisJKnRfY3AgICA9IHRfbDsgXAorCShjcCkgKz0gNDsgXAorfQorCisjZGVmaW5lIENIRUNLX0xFTihoZWFkZXIsIHBwLCBwbGVuLCBsZW4pIFwKKyAgICAoKHNpemVfdCkoKHBwKSAtICh1bnNpZ25lZCBjaGFyICopKGhlYWRlcikgKyAobGVuKSkgPD0gKHBsZW4pKQorCisjZGVmaW5lIEFERF9SRExFTihoZWFkZXIsIHBwLCBwbGVuLCBsZW4pIFwKKyAgKCFDSEVDS19MRU4oaGVhZGVyLCBwcCwgcGxlbiwgbGVuKSA/IDAgOiAoKChwcCkgKz0gKGxlbikpLCAxKSkKKworLyogRXNjYXBlIGNoYXJhY3RlciBpbiBvdXIgcHJlc2VudGF0aW9uIGZvcm1hdCBmb3IgbmFtZXMuCisgICBDYW5ub3QgYmUgJy4nIG9yIC8wMDAgYW5kIG11c3QgYmUgIWlzcHJpbnQoKS4KKyAgIE5vdGUgdGhhdCBlc2NhcGVkIGNoYXJzIGFyZSBzdG9yZWQgYXMKKyAgIDxOQU1FX0VTQ0FQRT4gPG9yaWctY2hhcisxPgorICAgdG8gZW5zdXJlIHRoYXQgdGhlIGVzY2FwZWQgZm9ybSBvZiAvMDAwIGRvZXNuJ3QgaW5jbHVkZSAvMDAwCisqLworI2RlZmluZSBOQU1FX0VTQ0FQRSAxCmRpZmYgLS1naXQgYS9zcmMvZG5zbWFzcS5jIGIvc3JjL2Ruc21hc3EuYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43NzFiZWMxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Ruc21hc3EuYwpAQCAtMCwwICsxLDE4ODggQEAKKy8qIGRuc21hc3EgaXMgQ29weXJpZ2h0IChjKSAyMDAwLTIwMTcgU2ltb24gS2VsbGV5CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIGRhdGVkIEp1bmUsIDE5OTEsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIHZlcnNpb24gMyBkYXRlZCAyOSBKdW5lLCAyMDA3LgorIAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisqLworCisvKiBEZWNsYXJlIHN0YXRpYyBjaGFyICpjb21waWxlcl9vcHRzICBpbiBjb25maWcuaCAqLworI2RlZmluZSBETlNNQVNRX0NPTVBJTEVfT1BUUworCisjaW5jbHVkZSAiZG5zbWFzcS5oIgorCitzdHJ1Y3QgZGFlbW9uICpkYWVtb247CisKK3N0YXRpYyB2b2xhdGlsZSBwaWRfdCBwaWQgPSAwOworc3RhdGljIHZvbGF0aWxlIGludCBwaXBld3JpdGU7CisKK3N0YXRpYyBpbnQgc2V0X2Ruc19saXN0ZW5lcnModGltZV90IG5vdyk7CitzdGF0aWMgdm9pZCBjaGVja19kbnNfbGlzdGVuZXJzKHRpbWVfdCBub3cpOworc3RhdGljIHZvaWQgc2lnX2hhbmRsZXIoaW50IHNpZyk7CitzdGF0aWMgdm9pZCBhc3luY19ldmVudChpbnQgcGlwZSwgdGltZV90IG5vdyk7CitzdGF0aWMgdm9pZCBmYXRhbF9ldmVudChzdHJ1Y3QgZXZlbnRfZGVzYyAqZXYsIGNoYXIgKm1zZyk7CitzdGF0aWMgaW50IHJlYWRfZXZlbnQoaW50IGZkLCBzdHJ1Y3QgZXZlbnRfZGVzYyAqZXZwLCBjaGFyICoqbXNnKTsKK3N0YXRpYyB2b2lkIHBvbGxfcmVzb2x2KGludCBmb3JjZSwgaW50IGRvX3JlbG9hZCwgdGltZV90IG5vdyk7CisKK2ludCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgIGludCBiaW5kX2ZhbGxiYWNrID0gMDsKKyAgdGltZV90IG5vdzsKKyAgc3RydWN0IHNpZ2FjdGlvbiBzaWdhY3Q7CisgIHN0cnVjdCBpbmFtZSAqaWZfdG1wOworICBpbnQgcGlwZXJlYWQsIHBpcGVmZFsyXSwgZXJyX3BpcGVbMl07CisgIHN0cnVjdCBwYXNzd2QgKmVudF9wdyA9IE5VTEw7CisjaWYgZGVmaW5lZChIQVZFX1NDUklQVCkKKyAgdWlkX3Qgc2NyaXB0X3VpZCA9IDA7CisgIGdpZF90IHNjcmlwdF9naWQgPSAwOworI2VuZGlmCisgIHN0cnVjdCBncm91cCAqZ3AgPSBOVUxMOworICBsb25nIGksIG1heF9mZCA9IHN5c2NvbmYoX1NDX09QRU5fTUFYKTsKKyAgY2hhciAqYmFkdXNlciA9IE5VTEw7CisgIGludCBsb2dfZXJyOworI2lmIGRlZmluZWQoSEFWRV9MSU5VWF9ORVRXT1JLKQorICBjYXBfdXNlcl9oZWFkZXJfdCBoZHIgPSBOVUxMOworICBjYXBfdXNlcl9kYXRhX3QgZGF0YSA9IE5VTEw7CisgIGNoYXIgKmJvdW5kX2RldmljZSA9IE5VTEw7CisgIGludCBkaWRfYmluZCA9IDA7CisjZW5kaWYgCisjaWYgZGVmaW5lZChIQVZFX0RIQ1ApIHx8IGRlZmluZWQoSEFWRV9ESENQNikKKyAgc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dDsKKyAgc3RydWN0IGRoY3BfcmVsYXkgKnJlbGF5OworI2VuZGlmCisjaWZkZWYgSEFWRV9URlRQCisgIGludCB0ZnRwX3ByZWZpeF9taXNzaW5nID0gMDsKKyNlbmRpZgorCisjaWZkZWYgTE9DQUxFRElSCisgIHNldGxvY2FsZShMQ19BTEwsICIiKTsKKyAgYmluZHRleHRkb21haW4oImRuc21hc3EiLCBMT0NBTEVESVIpOyAKKyAgdGV4dGRvbWFpbigiZG5zbWFzcSIpOworI2VuZGlmCisKKyAgc2lnYWN0LnNhX2hhbmRsZXIgPSBzaWdfaGFuZGxlcjsKKyAgc2lnYWN0LnNhX2ZsYWdzID0gMDsKKyAgc2lnZW1wdHlzZXQoJnNpZ2FjdC5zYV9tYXNrKTsKKyAgc2lnYWN0aW9uKFNJR1VTUjEsICZzaWdhY3QsIE5VTEwpOworICBzaWdhY3Rpb24oU0lHVVNSMiwgJnNpZ2FjdCwgTlVMTCk7CisgIHNpZ2FjdGlvbihTSUdIVVAsICZzaWdhY3QsIE5VTEwpOworICBzaWdhY3Rpb24oU0lHVEVSTSwgJnNpZ2FjdCwgTlVMTCk7CisgIHNpZ2FjdGlvbihTSUdBTFJNLCAmc2lnYWN0LCBOVUxMKTsKKyAgc2lnYWN0aW9uKFNJR0NITEQsICZzaWdhY3QsIE5VTEwpOworCisgIC8qIGlnbm9yZSBTSUdQSVBFICovCisgIHNpZ2FjdC5zYV9oYW5kbGVyID0gU0lHX0lHTjsKKyAgc2lnYWN0aW9uKFNJR1BJUEUsICZzaWdhY3QsIE5VTEwpOworCisgIHVtYXNrKDAyMik7IC8qIGtub3duIHVtYXNrLCBjcmVhdGUgbGVhc2VzIGFuZCBwaWQgZmlsZXMgYXMgMDY0NCAqLworIAorICByYW5kX2luaXQoKTsgLyogTXVzdCBwcmVjZWRlIHJlYWRfb3B0cygpICovCisgIAorICByZWFkX29wdHMoYXJnYywgYXJndiwgY29tcGlsZV9vcHRzKTsKKyAKKyAgaWYgKGRhZW1vbi0+ZWRuc19wa3RzeiA8IFBBQ0tFVFNaKQorICAgIGRhZW1vbi0+ZWRuc19wa3RzeiA9IFBBQ0tFVFNaOworCisgIC8qIE1pbiBidWZmZXIgc2l6ZTogd2UgY2hlY2sgYWZ0ZXIgYWRkaW5nIGVhY2ggcmVjb3JkLCBzbyB0aGVyZSBtdXN0IGJlIAorICAgICBtZW1vcnkgZm9yIHRoZSBsYXJnZXN0IHBhY2tldCwgYW5kIHRoZSBsYXJnZXN0IHJlY29yZCBzbyB0aGUKKyAgICAgbWluIGZvciBETlMgaXMgUEFDS0VUU1orTUFYRE5BTUUrUlJGSVhFRFNaIHdoaWNoIGlzIDwgMTAwMC4KKyAgICAgVGhpcyBtaWdodCBiZSBpbmNyZWFzZWQgaXMgRUROUyBwYWNrZXQgc2l6ZSBpZiBncmVhdGVyIHRoYW4gdGhlIG1pbmltdW0uICovIAorICBkYWVtb24tPnBhY2tldF9idWZmX3N6ID0gZGFlbW9uLT5lZG5zX3BrdHN6ICsgTUFYRE5BTUUgKyBSUkZJWEVEU1o7CisgIGRhZW1vbi0+cGFja2V0ID0gc2FmZV9tYWxsb2MoZGFlbW9uLT5wYWNrZXRfYnVmZl9zeik7CisgIAorICBkYWVtb24tPmFkZHJidWZmID0gc2FmZV9tYWxsb2MoQUREUlNUUkxFTik7CisgIGlmIChvcHRpb25fYm9vbChPUFRfRVhUUkFMT0cpKQorICAgIGRhZW1vbi0+YWRkcmJ1ZmYyID0gc2FmZV9tYWxsb2MoQUREUlNUUkxFTik7CisgIAorI2lmZGVmIEhBVkVfRE5TU0VDCisgIGlmIChvcHRpb25fYm9vbChPUFRfRE5TU0VDX1ZBTElEKSkKKyAgICB7CisgICAgICAvKiBOb3RlIHRoYXQgYm90aCAvMDAwIGFuZCAnLicgYXJlIGFsbG93ZWQgd2l0aGluIGxhYmVscy4gVGhlc2UgZ2V0CisJIHJlcHJlc2VudGVkIGluIHByZXNlbnRhdGlvbiBmb3JtYXQgdXNpbmcgTkFNRV9FU0NBUEUgYXMgYW4gZXNjYXBlCisJIGNoYXJhY3RlciB3aGVuIGluIEROU1NFQyBtb2RlLiAKKwkgSW4gdGhlb3J5LCBpZiBhbGwgdGhlIGNoYXJhY3RlcnMgaW4gYSBuYW1lIHdlcmUgLzAwMCBvcgorCSAnLicgb3IgTkFNRV9FU0NBUEUgdGhlbiBhbGwgd291bGQgaGF2ZSB0byBiZSBlc2NhcGVkLCBzbyB0aGUgCisJIHByZXNlbnRhdGlvbiBmb3JtYXQgd291bGQgYmUgdHdpY2UgYXMgbG9uZyBhcyB0aGUgc3BlYy4KKworCSBkYWVtb24tPm5hbWVidWZmIHdhcyBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSB0aGUgb3B0aW9uLXJlYWRpbmcKKwkgY29kZSBiZWZvcmUgd2Uga25ldyBpZiB3ZSdyZSBpbiBETlNTRUMgbW9kZSwgc28gcmVhbGxvY2F0ZSBoZXJlLiAqLworICAgICAgZnJlZShkYWVtb24tPm5hbWVidWZmKTsKKyAgICAgIGRhZW1vbi0+bmFtZWJ1ZmYgPSBzYWZlX21hbGxvYyhNQVhETkFNRSAqIDIpOworICAgICAgZGFlbW9uLT5rZXluYW1lID0gc2FmZV9tYWxsb2MoTUFYRE5BTUUgKiAyKTsKKyAgICAgIGRhZW1vbi0+d29ya3NwYWNlbmFtZSA9IHNhZmVfbWFsbG9jKE1BWEROQU1FICogMik7CisgICAgfQorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0RIQ1AKKyAgaWYgKCFkYWVtb24tPmxlYXNlX2ZpbGUpCisgICAgeworICAgICAgaWYgKGRhZW1vbi0+ZGhjcCB8fCBkYWVtb24tPmRoY3A2KQorCWRhZW1vbi0+bGVhc2VfZmlsZSA9IExFQVNFRklMRTsKKyAgICB9CisjZW5kaWYKKyAgCisgIC8qIENsb3NlIGFueSBmaWxlIGRlc2NyaXB0b3JzIHdlIGluaGVyaXRlZCBhcGFydCBmcm9tIHN0ZHtpbnxvdXR8ZXJyfSAKKyAgICAgCisgICAgIEVuc3VyZSB0aGF0IGF0IGxlYXN0IHN0ZGluLCBzdGRvdXQgYW5kIHN0ZGVyciAoZmQgMCwgMSwgMikgZXhpc3QsCisgICAgIG90aGVyd2lzZSBmaWxlIGRlc2NyaXB0b3JzIHdlIGNyZWF0ZSBjYW4gZW5kIHVwIGJlaW5nIDAsIDEsIG9yIDIgCisgICAgIGFuZCB0aGVuIGdldCBhY2NpZGVudGFsbHkgY2xvc2VkIGxhdGVyIHdoZW4gd2UgbWFrZSAwLCAxLCBhbmQgMiAKKyAgICAgb3BlbiB0byAvZGV2L251bGwuIE5vcm1hbGx5IHdlJ2xsIGJlIHN0YXJ0ZWQgd2l0aCAwLCAxIGFuZCAyIG9wZW4sIAorICAgICBidXQgaXQncyBub3QgZ3VhcmFudGVlZC4gQnkgb3BlbmluZyAvZGV2L251bGwgdGhyZWUgdGltZXMsIHdlIAorICAgICBlbnN1cmUgdGhhdCB3ZSdyZSBub3QgdXNpbmcgdGhvc2UgZmRzIGZvciByZWFsIHN0dWZmLiAqLworICBmb3IgKGkgPSAwOyBpIDwgbWF4X2ZkOyBpKyspCisgICAgaWYgKGkgIT0gU1RET1VUX0ZJTEVOTyAmJiBpICE9IFNUREVSUl9GSUxFTk8gJiYgaSAhPSBTVERJTl9GSUxFTk8pCisgICAgICBjbG9zZShpKTsKKyAgICBlbHNlCisgICAgICBvcGVuKCIvZGV2L251bGwiLCBPX1JEV1IpOyAKKworI2lmbmRlZiBIQVZFX0xJTlVYX05FVFdPUksKKyMgIGlmICEoZGVmaW5lZChJUF9SRUNWRFNUQUREUikgJiYgZGVmaW5lZChJUF9SRUNWSUYpICYmIGRlZmluZWQoSVBfU0VORFNSQ0FERFIpKQorICBpZiAoIW9wdGlvbl9ib29sKE9QVF9OT1dJTEQpKQorICAgIHsKKyAgICAgIGJpbmRfZmFsbGJhY2sgPSAxOworICAgICAgc2V0X29wdGlvbl9ib29sKE9QVF9OT1dJTEQpOworICAgIH0KKyMgIGVuZGlmCisgIAorICAvKiAtLSBiaW5kLWR5bmFtaWMgbm90IHN1cHBvcnRlZCBvbiAhTGludXgsIGZhbGwgYmFjayB0byAtLWJpbmQtaW50ZXJmYWNlcyAqLworICBpZiAob3B0aW9uX2Jvb2woT1BUX0NMRVZFUkJJTkQpKQorICAgIHsKKyAgICAgIGJpbmRfZmFsbGJhY2sgPSAxOworICAgICAgc2V0X29wdGlvbl9ib29sKE9QVF9OT1dJTEQpOworICAgICAgcmVzZXRfb3B0aW9uX2Jvb2woT1BUX0NMRVZFUkJJTkQpOworICAgIH0KKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfSU5PVElGWQorICBpZiAoZGFlbW9uLT5keW5hbWljX2RpcnMpCisgICAgZGllKF8oImRoY3AtaG9zdHNkaXIsIGRoY3Atb3B0c2RpciBhbmQgaG9zdHNkaXIgYXJlIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybSIpLCBOVUxMLCBFQ19CQURDT05GKTsKKyNlbmRpZgorICAKKyAgaWYgKG9wdGlvbl9ib29sKE9QVF9ETlNTRUNfVkFMSUQpKQorICAgIHsKKyNpZmRlZiBIQVZFX0ROU1NFQworICAgICAgc3RydWN0IGRzX2NvbmZpZyAqZHM7CisKKyAgICAgIC8qIE11c3QgaGF2ZSBhdCBsZWFzdCBhIHJvb3QgdHJ1c3QgYW5jaG9yLCBvciB0aGUgRE5TU0VDIGNvZGUKKwkgY2FuIGxvb3AgZm9yZXZlci4gKi8KKyAgICAgIGZvciAoZHMgPSBkYWVtb24tPmRzOyBkczsgZHMgPSBkcy0+bmV4dCkKKwlpZiAoZHMtPm5hbWVbMF0gPT0gMCkKKwkgIGJyZWFrOworCisgICAgICBpZiAoIWRzKQorCWRpZShfKCJubyByb290IHRydXN0IGFuY2hvciBwcm92aWRlZCBmb3IgRE5TU0VDIiksIE5VTEwsIEVDX0JBRENPTkYpOworICAgICAgCisgICAgICBpZiAoZGFlbW9uLT5jYWNoZXNpemUgPCBDQUNIRVNJWikKKwlkaWUoXygiY2Fubm90IHJlZHVjZSBjYWNoZSBzaXplIGZyb20gZGVmYXVsdCB3aGVuIEROU1NFQyBlbmFibGVkIiksIE5VTEwsIEVDX0JBRENPTkYpOworI2Vsc2UgCisgICAgICBkaWUoXygiRE5TU0VDIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0ROU1NFQyBpbiBzcmMvY29uZmlnLmgiKSwgTlVMTCwgRUNfQkFEQ09ORik7CisjZW5kaWYKKyAgICB9CisKKyNpZm5kZWYgSEFWRV9URlRQCisgIGlmIChvcHRpb25fYm9vbChPUFRfVEZUUCkpCisgICAgZGllKF8oIlRGVFAgc2VydmVyIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX1RGVFAgaW4gc3JjL2NvbmZpZy5oIiksIE5VTEwsIEVDX0JBRENPTkYpOworI2VuZGlmCisKKyNpZmRlZiBIQVZFX0NPTk5UUkFDSworICBpZiAob3B0aW9uX2Jvb2woT1BUX0NPTk5UUkFDSykgJiYgKGRhZW1vbi0+cXVlcnlfcG9ydCAhPSAwIHx8IGRhZW1vbi0+b3Nwb3J0KSkKKyAgICBkaWUgKF8oImNhbm5vdCB1c2UgLS1jb25udHJhY2sgQU5EIC0tcXVlcnktcG9ydCIpLCBOVUxMLCBFQ19CQURDT05GKTsgCisjZWxzZQorICBpZiAob3B0aW9uX2Jvb2woT1BUX0NPTk5UUkFDSykpCisgICAgZGllKF8oImNvbm50cmFjayBzdXBwb3J0IG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0NPTk5UUkFDSyBpbiBzcmMvY29uZmlnLmgiKSwgTlVMTCwgRUNfQkFEQ09ORik7CisjZW5kaWYKKworI2lmZGVmIEhBVkVfU09MQVJJU19ORVRXT1JLCisgIGlmIChkYWVtb24tPm1heF9sb2dzICE9IDApCisgICAgZGllKF8oImFzeW5jaHJvbm91cyBsb2dnaW5nIGlzIG5vdCBhdmFpbGFibGUgdW5kZXIgU29sYXJpcyIpLCBOVUxMLCBFQ19CQURDT05GKTsKKyNlbmRpZgorICAKKyNpZmRlZiBfX0FORFJPSURfXworICBpZiAoZGFlbW9uLT5tYXhfbG9ncyAhPSAwKQorICAgIGRpZShfKCJhc3luY2hyb25vdXMgbG9nZ2luZyBpcyBub3QgYXZhaWxhYmxlIHVuZGVyIEFuZHJvaWQiKSwgTlVMTCwgRUNfQkFEQ09ORik7CisjZW5kaWYKKworI2lmbmRlZiBIQVZFX0FVVEgKKyAgaWYgKGRhZW1vbi0+YXV0aHNlcnZlcikKKyAgICBkaWUoXygiYXV0aG9yaXRhdGl2ZSBETlMgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfQVVUSCBpbiBzcmMvY29uZmlnLmgiKSwgTlVMTCwgRUNfQkFEQ09ORik7CisjZW5kaWYKKworI2lmbmRlZiBIQVZFX0xPT1AKKyAgaWYgKG9wdGlvbl9ib29sKE9QVF9MT09QX0RFVEVDVCkpCisgICAgZGllKF8oImxvb3AgZGV0ZWN0aW9uIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0xPT1AgaW4gc3JjL2NvbmZpZy5oIiksIE5VTEwsIEVDX0JBRENPTkYpOworI2VuZGlmCisKKyAgaWYgKGRhZW1vbi0+bWF4X3BvcnQgIT0gTUFYX1BPUlQgJiYgZGFlbW9uLT5taW5fcG9ydCA9PSAwKQorICAgIGRhZW1vbi0+bWluX3BvcnQgPSAxMDI0dTsKKworICBpZiAoZGFlbW9uLT5tYXhfcG9ydCA8IGRhZW1vbi0+bWluX3BvcnQpCisgICAgZGllKF8oIm1heF9wb3J0IGNhbm5vdCBiZSBzbWFsbGVyIHRoYW4gbWluX3BvcnQiKSwgTlVMTCwgRUNfQkFEQ09ORik7CisKKyAgbm93ID0gZG5zbWFzcV90aW1lKCk7CisKKyAgLyogQ3JlYXRlIGEgc2VyaWFsIGF0IHN0YXJ0dXAgaWYgbm90IGNvbmZpZ3VyZWQuICovCisgIGlmIChkYWVtb24tPmF1dGhpbnRlcmZhY2UgJiYgZGFlbW9uLT5zb2Ffc24gPT0gMCkKKyNpZmRlZiBIQVZFX0JST0tFTl9SVEMKKyAgICBkaWUoXygiem9uZSBzZXJpYWwgbXVzdCBiZSBjb25maWd1cmVkIGluIC0tYXV0aC1zb2EiKSwgTlVMTCwgRUNfQkFEQ09ORik7CisjZWxzZQorICBkYWVtb24tPnNvYV9zbiA9IG5vdzsKKyNlbmRpZgorICAKKyNpZmRlZiBIQVZFX0RIQ1A2CisgIGlmIChkYWVtb24tPmRoY3A2KQorICAgIHsKKyAgICAgIGRhZW1vbi0+ZG9pbmdfcmEgPSBvcHRpb25fYm9vbChPUFRfUkEpOworICAgICAgCisgICAgICBmb3IgKGNvbnRleHQgPSBkYWVtb24tPmRoY3A2OyBjb250ZXh0OyBjb250ZXh0ID0gY29udGV4dC0+bmV4dCkKKwl7CisJICBpZiAoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX0RIQ1ApCisJICAgIGRhZW1vbi0+ZG9pbmdfZGhjcDYgPSAxOworCSAgaWYgKGNvbnRleHQtPmZsYWdzICYgQ09OVEVYVF9SQSkKKwkgICAgZGFlbW9uLT5kb2luZ19yYSA9IDE7CisjaWYgIWRlZmluZWQoSEFWRV9MSU5VWF9ORVRXT1JLKSAmJiAhZGVmaW5lZChIQVZFX0JTRF9ORVRXT1JLKQorCSAgaWYgKGNvbnRleHQtPmZsYWdzICYgQ09OVEVYVF9URU1QTEFURSkKKwkgICAgZGllIChfKCJkaGNwLXJhbmdlIGNvbnN0cnVjdG9yIG5vdCBhdmFpbGFibGUgb24gdGhpcyBwbGF0Zm9ybSIpLCBOVUxMLCBFQ19CQURDT05GKTsKKyNlbmRpZiAKKwl9CisgICAgfQorI2VuZGlmCisgIAorI2lmZGVmIEhBVkVfREhDUAorICAvKiBOb3RlIHRoYXQgb3JkZXIgbWF0dGVycyBoZXJlLCB3ZSBtdXN0IGNhbGwgbGVhc2VfaW5pdCBiZWZvcmUKKyAgICAgY3JlYXRpbmcgYW55IGZpbGUgZGVzY3JpcHRvcnMgd2hpY2ggc2hvdWxkbid0IGJlIGxlYWtlZAorICAgICB0byB0aGUgbGVhc2Utc2NyaXB0IGluaXQgcHJvY2Vzcy4gV2UgbmVlZCB0byBjYWxsIGNvbW1vbl9pbml0CisgICAgIGJlZm9yZSBsZWFzZV9pbml0IHRvIGFsbG9jYXRlIGJ1ZmZlcnMgaXQgdXNlcy4KKyAgICAgVGhlIHNjcmlwdCBzdWJzeXN0ZW0gcmVsaWVzIG9uIERIQ1AgYnVmZmVycywgaGVuY2UgdGhlIGxhc3QgdHdvCisgICAgIGNvbmRpdGlvbnMgYmVsb3cuICovICAKKyAgaWYgKGRhZW1vbi0+ZGhjcCB8fCBkYWVtb24tPmRvaW5nX2RoY3A2IHx8IGRhZW1vbi0+cmVsYXk0IHx8IAorICAgICAgZGFlbW9uLT5yZWxheTYgfHwgb3B0aW9uX2Jvb2woT1BUX1RGVFApIHx8IG9wdGlvbl9ib29sKE9QVF9TQ1JJUFRfQVJQKSkKKyAgICB7CisgICAgICBkaGNwX2NvbW1vbl9pbml0KCk7CisgICAgICBpZiAoZGFlbW9uLT5kaGNwIHx8IGRhZW1vbi0+ZG9pbmdfZGhjcDYpCisJbGVhc2VfaW5pdChub3cpOworICAgIH0KKyAgCisgIGlmIChkYWVtb24tPmRoY3AgfHwgZGFlbW9uLT5yZWxheTQpCisgICAgZGhjcF9pbml0KCk7CisgIAorIyAgaWZkZWYgSEFWRV9ESENQNgorICBpZiAoZGFlbW9uLT5kb2luZ19yYSB8fCBkYWVtb24tPmRvaW5nX2RoY3A2IHx8IGRhZW1vbi0+cmVsYXk2KQorICAgIHJhX2luaXQobm93KTsKKyAgCisgIGlmIChkYWVtb24tPmRvaW5nX2RoY3A2IHx8IGRhZW1vbi0+cmVsYXk2KQorICAgIGRoY3A2X2luaXQoKTsKKyMgIGVuZGlmCisKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9JUFNFVAorICBpZiAoZGFlbW9uLT5pcHNldHMpCisgICAgaXBzZXRfaW5pdCgpOworI2VuZGlmCisKKyNpZiAgZGVmaW5lZChIQVZFX0xJTlVYX05FVFdPUkspCisgIG5ldGxpbmtfaW5pdCgpOworI2VsaWYgZGVmaW5lZChIQVZFX0JTRF9ORVRXT1JLKQorICByb3V0ZV9pbml0KCk7CisjZW5kaWYKKworICBpZiAob3B0aW9uX2Jvb2woT1BUX05PV0lMRCkgJiYgb3B0aW9uX2Jvb2woT1BUX0NMRVZFUkJJTkQpKQorICAgIGRpZShfKCJjYW5ub3Qgc2V0IC0tYmluZC1pbnRlcmZhY2VzIGFuZCAtLWJpbmQtZHluYW1pYyIpLCBOVUxMLCBFQ19CQURDT05GKTsKKyAgCisgIGlmICghZW51bWVyYXRlX2ludGVyZmFjZXMoMSkgfHwgIWVudW1lcmF0ZV9pbnRlcmZhY2VzKDApKQorICAgIGRpZShfKCJmYWlsZWQgdG8gZmluZCBsaXN0IG9mIGludGVyZmFjZXM6ICVzIiksIE5VTEwsIEVDX01JU0MpOworICAKKyAgaWYgKG9wdGlvbl9ib29sKE9QVF9OT1dJTEQpIHx8IG9wdGlvbl9ib29sKE9QVF9DTEVWRVJCSU5EKSkgCisgICAgeworICAgICAgY3JlYXRlX2JvdW5kX2xpc3RlbmVycygxKTsKKyAgICAgIAorICAgICAgaWYgKCFvcHRpb25fYm9vbChPUFRfQ0xFVkVSQklORCkpCisJZm9yIChpZl90bXAgPSBkYWVtb24tPmlmX25hbWVzOyBpZl90bXA7IGlmX3RtcCA9IGlmX3RtcC0+bmV4dCkKKwkgIGlmIChpZl90bXAtPm5hbWUgJiYgIWlmX3RtcC0+dXNlZCkKKwkgICAgZGllKF8oInVua25vd24gaW50ZXJmYWNlICVzIiksIGlmX3RtcC0+bmFtZSwgRUNfQkFETkVUKTsKKworI2lmIGRlZmluZWQoSEFWRV9MSU5VWF9ORVRXT1JLKSAmJiBkZWZpbmVkKEhBVkVfREhDUCkKKyAgICAgIC8qIGFmdGVyIGVudW1lcmF0ZV9pbnRlcmZhY2VzKCkgICovCisgICAgICBib3VuZF9kZXZpY2UgPSB3aGljaGRldmljZSgpOworICAgICAgCisgICAgICBpZiAoZGFlbW9uLT5kaGNwKQorCXsKKwkgIGlmICghZGFlbW9uLT5yZWxheTQgJiYgYm91bmRfZGV2aWNlKQorCSAgICB7CisJICAgICAgYmluZHRvZGV2aWNlKGJvdW5kX2RldmljZSwgZGFlbW9uLT5kaGNwZmQpOworCSAgICAgIGRpZF9iaW5kID0gMTsKKwkgICAgfQorCSAgaWYgKGRhZW1vbi0+ZW5hYmxlX3B4ZSAmJiBib3VuZF9kZXZpY2UpCisJICAgIHsKKwkgICAgICBiaW5kdG9kZXZpY2UoYm91bmRfZGV2aWNlLCBkYWVtb24tPnB4ZWZkKTsKKwkgICAgICBkaWRfYmluZCA9IDE7CisJICAgIH0KKwl9CisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9MSU5VWF9ORVRXT1JLKSAmJiBkZWZpbmVkKEhBVkVfREhDUDYpCisgICAgICBpZiAoZGFlbW9uLT5kb2luZ19kaGNwNiAmJiAhZGFlbW9uLT5yZWxheTYgJiYgYm91bmRfZGV2aWNlKQorCXsKKwkgIGJpbmR0b2RldmljZShib3VuZF9kZXZpY2UsIGRhZW1vbi0+ZGhjcDZmZCk7CisJICBkaWRfYmluZCA9IDE7CisJfQorI2VuZGlmCisgICAgfQorICBlbHNlIAorICAgIGNyZWF0ZV93aWxkY2FyZF9saXN0ZW5lcnMoKTsKKyAKKyNpZmRlZiBIQVZFX0RIQ1A2CisgIC8qIGFmdGVyIGVudW1lcmF0ZV9pbnRlcmZhY2VzKCkgKi8KKyAgaWYgKGRhZW1vbi0+ZG9pbmdfZGhjcDYgfHwgZGFlbW9uLT5yZWxheTYgfHwgZGFlbW9uLT5kb2luZ19yYSkKKyAgICBqb2luX211bHRpY2FzdCgxKTsKKworICAvKiBBZnRlciBuZXRsaW5rX2luaXQoKSBhbmQgYmVmb3JlIGNyZWF0ZV9oZWxwZXIoKSAqLworICBsZWFzZV9tYWtlX2R1aWQobm93KTsKKyNlbmRpZgorICAKKyAgaWYgKGRhZW1vbi0+cG9ydCAhPSAwKQorICAgIHsKKyAgICAgIGNhY2hlX2luaXQoKTsKKworI2lmZGVmIEhBVkVfRE5TU0VDCisgICAgICBibG9ja2RhdGFfaW5pdCgpOworI2VuZGlmCisgICAgfQorCisjaWZkZWYgSEFWRV9JTk9USUZZCisgIGlmIChkYWVtb24tPnBvcnQgIT0gMCB8fCBkYWVtb24tPmRoY3AgfHwgZGFlbW9uLT5kb2luZ19kaGNwNikKKyAgICBpbm90aWZ5X2Ruc21hc3FfaW5pdCgpOworICBlbHNlCisgICAgZGFlbW9uLT5pbm90aWZ5ZmQgPSAtMTsKKyNlbmRpZgorICAgICAgIAorICBpZiAob3B0aW9uX2Jvb2woT1BUX0RCVVMpKQorI2lmZGVmIEhBVkVfREJVUworICAgIHsKKyAgICAgIGNoYXIgKmVycjsKKyAgICAgIGRhZW1vbi0+ZGJ1cyA9IE5VTEw7CisgICAgICBkYWVtb24tPndhdGNoZXMgPSBOVUxMOworICAgICAgaWYgKChlcnIgPSBkYnVzX2luaXQoKSkpCisJZGllKF8oIkRCdXMgZXJyb3I6ICVzIiksIGVyciwgRUNfTUlTQyk7CisgICAgfQorI2Vsc2UKKyAgZGllKF8oIkRCdXMgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfREJVUyBpbiBzcmMvY29uZmlnLmgiKSwgTlVMTCwgRUNfQkFEQ09ORik7CisjZW5kaWYKKworICBpZiAoZGFlbW9uLT5wb3J0ICE9IDApCisgICAgcHJlX2FsbG9jYXRlX3NmZHMoKTsKKworI2lmIGRlZmluZWQoSEFWRV9TQ1JJUFQpCisgIC8qIE5vdGUgZ2V0cHduYW0gcmV0dXJucyBzdGF0aWMgc3RvcmFnZSAqLworICBpZiAoKGRhZW1vbi0+ZGhjcCB8fCBkYWVtb24tPmRoY3A2KSAmJiAKKyAgICAgIGRhZW1vbi0+c2NyaXB0dXNlciAmJiAKKyAgICAgIChkYWVtb24tPmxlYXNlX2NoYW5nZV9jb21tYW5kIHx8IGRhZW1vbi0+bHVhc2NyaXB0KSkKKyAgICB7CisgICAgICBpZiAoKGVudF9wdyA9IGdldHB3bmFtKGRhZW1vbi0+c2NyaXB0dXNlcikpKQorCXsKKwkgIHNjcmlwdF91aWQgPSBlbnRfcHctPnB3X3VpZDsKKwkgIHNjcmlwdF9naWQgPSBlbnRfcHctPnB3X2dpZDsKKwkgfQorICAgICAgZWxzZQorCWJhZHVzZXIgPSBkYWVtb24tPnNjcmlwdHVzZXI7CisgICAgfQorI2VuZGlmCisgIAorICBpZiAoZGFlbW9uLT51c2VybmFtZSAmJiAhKGVudF9wdyA9IGdldHB3bmFtKGRhZW1vbi0+dXNlcm5hbWUpKSkKKyAgICBiYWR1c2VyID0gZGFlbW9uLT51c2VybmFtZTsKKyAgZWxzZSBpZiAoZGFlbW9uLT5ncm91cG5hbWUgJiYgIShncCA9IGdldGdybmFtKGRhZW1vbi0+Z3JvdXBuYW1lKSkpCisgICAgYmFkdXNlciA9IGRhZW1vbi0+Z3JvdXBuYW1lOworCisgIGlmIChiYWR1c2VyKQorICAgIGRpZShfKCJ1bmtub3duIHVzZXIgb3IgZ3JvdXA6ICVzIiksIGJhZHVzZXIsIEVDX0JBRENPTkYpOworCisgIC8qIGltcGxlbWVudCBncm91cCBkZWZhdWx0cywgImRpcCIgaWYgYXZhaWxhYmxlLCBvciBncm91cCBhc3NvY2lhdGVkIHdpdGggdWlkICovCisgIGlmICghZGFlbW9uLT5ncm91cF9zZXQgJiYgIWdwKQorICAgIHsKKyAgICAgIGlmICghKGdwID0gZ2V0Z3JuYW0oQ0hHUlApKSAmJiBlbnRfcHcpCisJZ3AgPSBnZXRncmdpZChlbnRfcHctPnB3X2dpZCk7CisgICAgICAKKyAgICAgIC8qIGZvciBlcnJvciBtZXNzYWdlICovCisgICAgICBpZiAoZ3ApCisJZGFlbW9uLT5ncm91cG5hbWUgPSBncC0+Z3JfbmFtZTsgCisgICAgfQorCisjaWYgZGVmaW5lZChIQVZFX0xJTlVYX05FVFdPUkspCisgIC8qIGRldGVybWluZSBjYXBhYmlsaXR5IEFQSSB2ZXJzaW9uIGhlcmUsIHdoaWxlIHdlIGNhbiBzdGlsbAorICAgICBjYWxsIHNhZmVfbWFsbG9jICovCisgIGlmIChlbnRfcHcgJiYgZW50X3B3LT5wd191aWQgIT0gMCkKKyAgICB7CisgICAgICBpbnQgY2Fwc2l6ZSA9IDE7IC8qIGZvciBoZWFkZXIgdmVyc2lvbiAxICovCisgICAgICBoZHIgPSBzYWZlX21hbGxvYyhzaXplb2YoKmhkcikpOworCisgICAgICAvKiBmaW5kIHZlcnNpb24gc3VwcG9ydGVkIGJ5IGtlcm5lbCAqLworICAgICAgbWVtc2V0KGhkciwgMCwgc2l6ZW9mKCpoZHIpKTsKKyAgICAgIGNhcGdldChoZHIsIE5VTEwpOworICAgICAgCisgICAgICBpZiAoaGRyLT52ZXJzaW9uICE9IExJTlVYX0NBUEFCSUxJVFlfVkVSU0lPTl8xKQorCXsKKwkgIC8qIGlmIHVua25vd24gdmVyc2lvbiwgdXNlIGxhcmdlc3Qgc3VwcG9ydGVkIHZlcnNpb24gKDMpICovCisJICBpZiAoaGRyLT52ZXJzaW9uICE9IExJTlVYX0NBUEFCSUxJVFlfVkVSU0lPTl8yKQorCSAgICBoZHItPnZlcnNpb24gPSBMSU5VWF9DQVBBQklMSVRZX1ZFUlNJT05fMzsKKwkgIGNhcHNpemUgPSAyOworCX0KKyAgICAgIAorICAgICAgZGF0YSA9IHNhZmVfbWFsbG9jKHNpemVvZigqZGF0YSkgKiBjYXBzaXplKTsKKyAgICAgIG1lbXNldChkYXRhLCAwLCBzaXplb2YoKmRhdGEpICogY2Fwc2l6ZSk7CisgICAgfQorI2VuZGlmCisKKyAgLyogVXNlIGEgcGlwZSB0byBjYXJyeSBzaWduYWxzIGFuZCBvdGhlciBldmVudHMgYmFjayB0byB0aGUgZXZlbnQgbG9vcCAKKyAgICAgaW4gYSByYWNlLWZyZWUgbWFubmVyIGFuZCBhbm90aGVyIHRvIGNhcnJ5IGVycm9ycyB0byBkYWVtb24taW52b2tpbmcgcHJvY2VzcyAqLworICBzYWZlX3BpcGUocGlwZWZkLCAxKTsKKyAgCisgIHBpcGVyZWFkID0gcGlwZWZkWzBdOworICBwaXBld3JpdGUgPSBwaXBlZmRbMV07CisgIC8qIHByaW1lIHRoZSBwaXBlIHRvIGxvYWQgc3R1ZmYgZmlyc3QgdGltZS4gKi8KKyAgc2VuZF9ldmVudChwaXBld3JpdGUsIEVWRU5UX0lOSVQsIDAsIE5VTEwpOyAKKworICBlcnJfcGlwZVsxXSA9IC0xOworICAKKyAgaWYgKCFvcHRpb25fYm9vbChPUFRfREVCVUcpKSAgIAorICAgIHsKKyAgICAgIC8qIFRoZSBmb2xsb3dpbmcgY29kZSAiZGFlbW9uaXplcyIgdGhlIHByb2Nlc3MuIAorCSBTZWUgU3RldmVucyBzZWN0aW9uIDEyLjQgKi8KKyAgICAgIAorICAgICAgaWYgKGNoZGlyKCIvIikgIT0gMCkKKwlkaWUoXygiY2Fubm90IGNoZGlyIHRvIGZpbGVzeXN0ZW0gcm9vdDogJXMiKSwgTlVMTCwgRUNfTUlTQyk7IAorCisjaWZuZGVmIE5PX0ZPUksgICAgICAKKyAgICAgIGlmICghb3B0aW9uX2Jvb2woT1BUX05PX0ZPUkspKQorCXsKKwkgIHBpZF90IHBpZDsKKwkgIAorCSAgLyogcGlwZSB0byBjYXJyeSBlcnJvcnMgYmFjayB0byBvcmlnaW5hbCBwcm9jZXNzLgorCSAgICAgV2hlbiBzdGFydHVwIGlzIGNvbXBsZXRlIHdlIGNsb3NlIHRoaXMgYW5kIHRoZSBwcm9jZXNzIHRlcm1pbmF0ZXMuICovCisJICBzYWZlX3BpcGUoZXJyX3BpcGUsIDApOworCSAgCisJICBpZiAoKHBpZCA9IGZvcmsoKSkgPT0gLTEpCisJICAgIC8qIGZkID09IC0xIHNpbmNlIHdlJ3ZlIG5vdCBmb3JrZWQsIG5ldmVyIHJldHVybnMuICovCisJICAgIHNlbmRfZXZlbnQoLTEsIEVWRU5UX0ZPUktfRVJSLCBlcnJubywgTlVMTCk7CisJICAgCisJICBpZiAocGlkICE9IDApCisJICAgIHsKKwkgICAgICBzdHJ1Y3QgZXZlbnRfZGVzYyBldjsKKwkgICAgICBjaGFyICptc2c7CisKKwkgICAgICAvKiBjbG9zZSBvdXIgY29weSBvZiB3cml0ZS1lbmQgKi8KKwkgICAgICB3aGlsZSAocmV0cnlfc2VuZChjbG9zZShlcnJfcGlwZVsxXSkpKTsKKwkgICAgICAKKwkgICAgICAvKiBjaGVjayBmb3IgZXJyb3JzIGFmdGVyIHRoZSBmb3JrICovCisJICAgICAgaWYgKHJlYWRfZXZlbnQoZXJyX3BpcGVbMF0sICZldiwgJm1zZykpCisJCWZhdGFsX2V2ZW50KCZldiwgbXNnKTsKKwkgICAgICAKKwkgICAgICBfZXhpdChFQ19HT09EKTsKKwkgICAgfSAKKwkgIAorCSAgd2hpbGUgKHJldHJ5X3NlbmQoY2xvc2UoZXJyX3BpcGVbMF0pKSk7CisKKwkgIC8qIE5PIGNhbGxzIHRvIGRpZSgpIGZyb20gaGVyZSBvbi4gKi8KKwkgIAorCSAgc2V0c2lkKCk7CisJIAorCSAgaWYgKChwaWQgPSBmb3JrKCkpID09IC0xKQorCSAgICBzZW5kX2V2ZW50KGVycl9waXBlWzFdLCBFVkVOVF9GT1JLX0VSUiwgZXJybm8sIE5VTEwpOworCSAKKwkgIGlmIChwaWQgIT0gMCkKKwkgICAgX2V4aXQoMCk7CisJfQorI2VuZGlmCisgICAgICAgICAgICAKKyAgICAgIC8qIHdyaXRlIHBpZGZpbGUgX2FmdGVyXyBmb3JraW5nICEgKi8KKyAgICAgIGlmIChkYWVtb24tPnJ1bmZpbGUpCisJeworCSAgaW50IGZkLCBlcnIgPSAwOworCisJICBzcHJpbnRmKGRhZW1vbi0+bmFtZWJ1ZmYsICIlZFxuIiwgKGludCkgZ2V0cGlkKCkpOworCisJICAvKiBFeHBsYW5hdGlvbjogU29tZSBpbnN0YWxsYXRpb25zIG9mIGRuc21hc3EgKGVnIERlYmlhbi9VYnVudHUpIGxvY2F0ZSB0aGUgcGlkLWZpbGUKKwkgICAgIGluIGEgZGlyZWN0b3J5IHdoaWNoIGlzIHdyaXRhYmxlIGJ5IHRoZSBub24tcHJpdmlsZWdlZCB1c2VyIHRoYXQgZG5zbWFzcSBydW5zIGFzLiBUaGlzCisJICAgICBhbGxvd3MgdGhlIGRhZW1vbiB0byBkZWxldGUgdGhlIGZpbGUgYXMgcGFydCBvZiBpdHMgc2h1dGRvd24uIFRoaXMgaXMgYSBzZWN1cml0eSBob2xlIHRvIHRoZSAKKwkgICAgIGV4dGVudCB0aGF0IGFuIGF0dGFja2VyIHJ1bm5pbmcgYXMgdGhlIHVucHJpdmlsZWdlZCAgdXNlciBjb3VsZCByZXBsYWNlIHRoZSBwaWRmaWxlIHdpdGggYSAKKwkgICAgIHN5bWxpbmssIGFuZCBoYXZlIHRoZSB0YXJnZXQgb2YgdGhhdCBzeW1saW5rIG92ZXJ3cml0dGVuIGFzIHJvb3QgbmV4dCB0aW1lIGRuc21hc3Egc3RhcnRzLiAKKworCSAgICAgVGhlIGZvbGxvd2luZyBjb2RlIGZpcnN0IGRlbGV0ZXMgYW55IGV4aXN0aW5nIGZpbGUsIGFuZCB0aGVuIG9wZW5zIGl0IHdpdGggdGhlIE9fRVhDTCBmbGFnLAorCSAgICAgZW5zdXJpbmcgdGhhdCB0aGUgb3BlbigpIGZhaWxzIHNob3VsZCB0aGVyZSBiZSBhbnkgZXhpc3RpbmcgZmlsZSAoYmVjYXVzZSB0aGUgdW5saW5rKCkgZmFpbGVkLCAKKwkgICAgIG9yIGFuIGF0dGFja2VyIGV4cGxvaXRlZCB0aGUgcmFjZSBiZXR3ZWVuIHVubGluaygpIGFuZCBvcGVuKCkpLiBUaGlzIGVuc3VyZXMgdGhhdCBubyBzeW1saW5rCisJICAgICBhdHRhY2sgY2FuIHN1Y2NlZWQuIAorCisJICAgICBBbnkgY29tcHJvbWlzZSBvZiB0aGUgbm9uLXByaXZpbGVnZWQgdXNlciBzdGlsbCB0aGVvcmV0aWNhbGx5IGFsbG93cyB0aGUgcGlkLWZpbGUgdG8gYmUKKwkgICAgIHJlcGxhY2VkIHdoaWxzdCBkbnNtYXNxIGlzIHJ1bm5pbmcuIFRoZSB3b3JzdCB0aGF0IGNvdWxkIGFsbG93IGlzIHRoYXQgdGhlIHVzdWFsIAorCSAgICAgInNodXRkb3duIGRuc21hc3EiIHNoZWxsIGNvbW1hbmQgY291bGQgYmUgdHJpY2tlZCBpbnRvIHN0b3BwaW5nIGFueSBvdGhlciBwcm9jZXNzLgorCisJICAgICBOb3RlIHRoYXQgaWYgZG5zbWFzcSBpcyBzdGFydGVkIGFzIG5vbi1yb290IChlZyBmb3IgdGVzdGluZykgaXQgc2lsZW50bHkgaWdub3JlcyAKKwkgICAgIGZhaWx1cmUgdG8gd3JpdGUgdGhlIHBpZC1maWxlLgorCSAgKi8KKworCSAgdW5saW5rKGRhZW1vbi0+cnVuZmlsZSk7IAorCSAgCisJICBpZiAoKGZkID0gb3BlbihkYWVtb24tPnJ1bmZpbGUsIE9fV1JPTkxZfE9fQ1JFQVR8T19UUlVOQ3xPX0VYQ0wsIFNfSVdVU1J8U19JUlVTUnxTX0lSR1JQfFNfSVJPVEgpKSA9PSAtMSkKKwkgICAgeworCSAgICAgIC8qIG9ubHkgY29tcGxhaW4gaWYgc3RhcnRlZCBhcyByb290ICovCisJICAgICAgaWYgKGdldHVpZCgpID09IDApCisJCWVyciA9IDE7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGlmICghcmVhZF93cml0ZShmZCwgKHVuc2lnbmVkIGNoYXIgKilkYWVtb24tPm5hbWVidWZmLCBzdHJsZW4oZGFlbW9uLT5uYW1lYnVmZiksIDApKQorCQllcnIgPSAxOworCSAgICAgIGVsc2UgCisJCXsKKwkJICB3aGlsZSAocmV0cnlfc2VuZChjbG9zZShmZCkpKTsKKwkJICBpZiAoZXJybm8gIT0gMCkKKwkJICAgIGVyciA9IDE7CisJCX0KKwkgICAgfQorCisJICBpZiAoZXJyKQorCSAgICB7CisJICAgICAgc2VuZF9ldmVudChlcnJfcGlwZVsxXSwgRVZFTlRfUElERklMRSwgZXJybm8sIGRhZW1vbi0+cnVuZmlsZSk7CisJICAgICAgX2V4aXQoMCk7CisJICAgIH0KKwl9CisgICAgfQorICAKKyAgIGxvZ19lcnIgPSBsb2dfc3RhcnQoZW50X3B3LCBlcnJfcGlwZVsxXSk7CisKKyAgIGlmICghb3B0aW9uX2Jvb2woT1BUX0RFQlVHKSkgCisgICAgIHsgICAgICAgCisgICAgICAgLyogb3BlbiAgc3Rkb3V0IGV0YyB0byAvZGV2L251bGwgKi8KKyAgICAgICBpbnQgbnVsbGZkID0gb3BlbigiL2Rldi9udWxsIiwgT19SRFdSKTsKKyAgICAgICBpZiAobnVsbGZkICE9IC0xKQorCSB7CisJICAgZHVwMihudWxsZmQsIFNURE9VVF9GSUxFTk8pOworCSAgIGR1cDIobnVsbGZkLCBTVERFUlJfRklMRU5PKTsKKwkgICBkdXAyKG51bGxmZCwgU1RESU5fRklMRU5PKTsKKwkgICBjbG9zZShudWxsZmQpOworCSB9CisgICAgIH0KKyAgIAorICAgLyogaWYgd2UgYXJlIHRvIHJ1biBzY3JpcHRzLCB3ZSBuZWVkIHRvIGZvcmsgYSBoZWxwZXIgYmVmb3JlIGRyb3BwaW5nIHJvb3QuICovCisgIGRhZW1vbi0+aGVscGVyZmQgPSAtMTsKKyNpZmRlZiBIQVZFX1NDUklQVCAKKyAgaWYgKChkYWVtb24tPmRoY3AgfHwgZGFlbW9uLT5kaGNwNiB8fCBvcHRpb25fYm9vbChPUFRfVEZUUCkgfHwgb3B0aW9uX2Jvb2woT1BUX1NDUklQVF9BUlApKSAmJiAKKyAgICAgIChkYWVtb24tPmxlYXNlX2NoYW5nZV9jb21tYW5kIHx8IGRhZW1vbi0+bHVhc2NyaXB0KSkKKyAgICAgIGRhZW1vbi0+aGVscGVyZmQgPSBjcmVhdGVfaGVscGVyKHBpcGV3cml0ZSwgZXJyX3BpcGVbMV0sIHNjcmlwdF91aWQsIHNjcmlwdF9naWQsIG1heF9mZCk7CisjZW5kaWYKKworICBpZiAoIW9wdGlvbl9ib29sKE9QVF9ERUJVRykgJiYgZ2V0dWlkKCkgPT0gMCkgICAKKyAgICB7CisgICAgICBpbnQgYmFkX2NhcGFiaWxpdGllcyA9IDA7CisgICAgICBnaWRfdCBkdW1teTsKKyAgICAgIAorICAgICAgLyogcmVtb3ZlIGFsbCBzdXBwbGVtZW50YXJ5IGdyb3VwcyAqLworICAgICAgaWYgKGdwICYmIAorCSAgKHNldGdyb3VwcygwLCAmZHVtbXkpID09IC0xIHx8CisJICAgc2V0Z2lkKGdwLT5ncl9naWQpID09IC0xKSkKKwl7CisJICBzZW5kX2V2ZW50KGVycl9waXBlWzFdLCBFVkVOVF9HUk9VUF9FUlIsIGVycm5vLCBkYWVtb24tPmdyb3VwbmFtZSk7CisJICBfZXhpdCgwKTsKKwl9CisgIAorICAgICAgaWYgKGVudF9wdyAmJiBlbnRfcHctPnB3X3VpZCAhPSAwKQorCXsgICAgIAorI2lmIGRlZmluZWQoSEFWRV9MSU5VWF9ORVRXT1JLKQkgIAorCSAgLyogT24gbGludXgsIHdlIGtlZXAgQ0FQX05FVEFETUlOIChmb3IgQVJQLWluamVjdGlvbikgYW5kCisJICAgICBDQVBfTkVUX1JBVyAoZm9yIGljbXApIGlmIHdlJ3JlIGRvaW5nIGRoY3AuIElmIHdlIGhhdmUgeWV0IHRvIGJpbmQgCisJICAgICBwb3J0cyBiZWNhdXNlIG9mIERBRCwgb3Igd2UncmUgZG9pbmcgaXQgZHluYW1pY2FsbHksCisJICAgICB3ZSBuZWVkIENBUF9ORVRfQklORF9TRVJWSUNFIHRvby4gKi8KKwkgIGlmIChpc19kYWRfbGlzdGVuZXJzKCkgfHwgb3B0aW9uX2Jvb2woT1BUX0NMRVZFUkJJTkQpKQorCSAgICBkYXRhLT5lZmZlY3RpdmUgPSBkYXRhLT5wZXJtaXR0ZWQgPSBkYXRhLT5pbmhlcml0YWJsZSA9CisJICAgICAgKDEgPDwgQ0FQX05FVF9BRE1JTikgfCAoMSA8PCBDQVBfTkVUX1JBVykgfCAKKwkgICAgICAoMSA8PCBDQVBfU0VUVUlEKSB8ICgxIDw8IENBUF9ORVRfQklORF9TRVJWSUNFKTsKKwkgIGVsc2UKKwkgICAgZGF0YS0+ZWZmZWN0aXZlID0gZGF0YS0+cGVybWl0dGVkID0gZGF0YS0+aW5oZXJpdGFibGUgPQorCSAgICAgICgxIDw8IENBUF9ORVRfQURNSU4pIHwgKDEgPDwgQ0FQX05FVF9SQVcpIHwgKDEgPDwgQ0FQX1NFVFVJRCk7CisJICAKKwkgIC8qIFRlbGwga2VybmVsIHRvIG5vdCBjbGVhciBjYXBhYmlsaXRpZXMgd2hlbiBkcm9wcGluZyByb290ICovCisJICBpZiAoY2Fwc2V0KGhkciwgZGF0YSkgPT0gLTEgfHwgcHJjdGwoUFJfU0VUX0tFRVBDQVBTLCAxLCAwLCAwLCAwKSA9PSAtMSkKKwkgICAgYmFkX2NhcGFiaWxpdGllcyA9IGVycm5vOworCQkJICAKKyNlbGlmIGRlZmluZWQoSEFWRV9TT0xBUklTX05FVFdPUkspCisJICAvKiBodHRwOi8vZGV2ZWxvcGVycy5zdW4uY29tL3NvbGFyaXMvYXJ0aWNsZXMvcHJvZ3JhbV9wcml2aWxlZ2VzLmh0bWwgKi8KKwkgIHByaXZfc2V0X3QgKnByaXZfc2V0OworCSAgCisJICBpZiAoIShwcml2X3NldCA9IHByaXZfc3RyX3RvX3NldCgiYmFzaWMiLCAiLCIsIE5VTEwpKSB8fAorCSAgICAgIHByaXZfYWRkc2V0KHByaXZfc2V0LCBQUklWX05FVF9JQ01QQUNDRVNTKSA9PSAtMSB8fAorCSAgICAgIHByaXZfYWRkc2V0KHByaXZfc2V0LCBQUklWX1NZU19ORVRfQ09ORklHKSA9PSAtMSkKKwkgICAgYmFkX2NhcGFiaWxpdGllcyA9IGVycm5vOworCisJICBpZiAocHJpdl9zZXQgJiYgYmFkX2NhcGFiaWxpdGllcyA9PSAwKQorCSAgICB7CisJICAgICAgcHJpdl9pbnZlcnNlKHByaXZfc2V0KTsKKwkgIAorCSAgICAgIGlmIChzZXRwcHJpdihQUklWX09GRiwgUFJJVl9MSU1JVCwgcHJpdl9zZXQpID09IC0xKQorCQliYWRfY2FwYWJpbGl0aWVzID0gZXJybm87CisJICAgIH0KKworCSAgaWYgKHByaXZfc2V0KQorCSAgICBwcml2X2ZyZWVzZXQocHJpdl9zZXQpOworCisjZW5kaWYgICAgCisKKwkgIGlmIChiYWRfY2FwYWJpbGl0aWVzICE9IDApCisJICAgIHsKKwkgICAgICBzZW5kX2V2ZW50KGVycl9waXBlWzFdLCBFVkVOVF9DQVBfRVJSLCBiYWRfY2FwYWJpbGl0aWVzLCBOVUxMKTsKKwkgICAgICBfZXhpdCgwKTsKKwkgICAgfQorCSAgCisJICAvKiBmaW5hbGx5IGRyb3Agcm9vdCAqLworCSAgaWYgKHNldHVpZChlbnRfcHctPnB3X3VpZCkgPT0gLTEpCisJICAgIHsKKwkgICAgICBzZW5kX2V2ZW50KGVycl9waXBlWzFdLCBFVkVOVF9VU0VSX0VSUiwgZXJybm8sIGRhZW1vbi0+dXNlcm5hbWUpOworCSAgICAgIF9leGl0KDApOworCSAgICB9ICAgICAKKworI2lmZGVmIEhBVkVfTElOVVhfTkVUV09SSworCSAgaWYgKGlzX2RhZF9saXN0ZW5lcnMoKSB8fCBvcHRpb25fYm9vbChPUFRfQ0xFVkVSQklORCkpCisJICAgZGF0YS0+ZWZmZWN0aXZlID0gZGF0YS0+cGVybWl0dGVkID0KKwkgICAgICgxIDw8IENBUF9ORVRfQURNSU4pIHwgKDEgPDwgQ0FQX05FVF9SQVcpIHwgKDEgPDwgQ0FQX05FVF9CSU5EX1NFUlZJQ0UpOworCSBlbHNlCisJICAgZGF0YS0+ZWZmZWN0aXZlID0gZGF0YS0+cGVybWl0dGVkID0gCisJICAgICAoMSA8PCBDQVBfTkVUX0FETUlOKSB8ICgxIDw8IENBUF9ORVRfUkFXKTsKKwkgIGRhdGEtPmluaGVyaXRhYmxlID0gMDsKKwkgIAorCSAgLyogbG9zZSB0aGUgc2V0dWlkIGFuZCBzZXRnaWQgY2FwYWJpbGl0aWVzICovCisJICBpZiAoY2Fwc2V0KGhkciwgZGF0YSkgPT0gLTEpCisJICAgIHsKKwkgICAgICBzZW5kX2V2ZW50KGVycl9waXBlWzFdLCBFVkVOVF9DQVBfRVJSLCBlcnJubywgTlVMTCk7CisJICAgICAgX2V4aXQoMCk7CisJICAgIH0KKyNlbmRpZgorCSAgCisJfQorICAgIH0KKyAgCisjaWZkZWYgSEFWRV9MSU5VWF9ORVRXT1JLCisgIGZyZWUoaGRyKTsKKyAgZnJlZShkYXRhKTsKKyAgaWYgKG9wdGlvbl9ib29sKE9QVF9ERUJVRykpIAorICAgIHByY3RsKFBSX1NFVF9EVU1QQUJMRSwgMSwgMCwgMCwgMCk7CisjZW5kaWYKKworI2lmZGVmIEhBVkVfVEZUUAorICBpZiAob3B0aW9uX2Jvb2woT1BUX1RGVFApKQorICAgIHsKKyAgICAgIERJUiAqZGlyOworICAgICAgc3RydWN0IHRmdHBfcHJlZml4ICpwOworICAgICAgCisgICAgICBpZiAoZGFlbW9uLT50ZnRwX3ByZWZpeCkKKwl7CisJICBpZiAoISgoZGlyID0gb3BlbmRpcihkYWVtb24tPnRmdHBfcHJlZml4KSkpKQorCSAgICB7CisJICAgICAgdGZ0cF9wcmVmaXhfbWlzc2luZyA9IDE7CisJICAgICAgaWYgKCFvcHRpb25fYm9vbChPUFRfVEZUUF9OT19GQUlMKSkKKwkgICAgICAgIHsKKwkgICAgICAgICAgc2VuZF9ldmVudChlcnJfcGlwZVsxXSwgRVZFTlRfVEZUUF9FUlIsIGVycm5vLCBkYWVtb24tPnRmdHBfcHJlZml4KTsKKwkgICAgICAgICAgX2V4aXQoMCk7CisJICAgICAgICB9CisJICAgIH0KKwkgIGVsc2UKKwkgICAgY2xvc2VkaXIoZGlyKTsKKwl9CisKKyAgICAgIGZvciAocCA9IGRhZW1vbi0+aWZfcHJlZml4OyBwOyBwID0gcC0+bmV4dCkKKwl7CisJICBwLT5taXNzaW5nID0gMDsKKwkgIGlmICghKChkaXIgPSBvcGVuZGlyKHAtPnByZWZpeCkpKSkKKwkgICAgeworCSAgICAgIHAtPm1pc3NpbmcgPSAxOworCSAgICAgIGlmICghb3B0aW9uX2Jvb2woT1BUX1RGVFBfTk9fRkFJTCkpCisJCXsKKwkJICBzZW5kX2V2ZW50KGVycl9waXBlWzFdLCBFVkVOVF9URlRQX0VSUiwgZXJybm8sIHAtPnByZWZpeCk7CisJCSAgX2V4aXQoMCk7CisJCX0KKwkgICAgfQorCSAgZWxzZQorCSAgICBjbG9zZWRpcihkaXIpOworCX0KKyAgICB9CisjZW5kaWYKKworICBpZiAoZGFlbW9uLT5wb3J0ID09IDApCisgICAgbXlfc3lzbG9nKExPR19JTkZPLCBfKCJzdGFydGVkLCB2ZXJzaW9uICVzIEROUyBkaXNhYmxlZCIpLCBWRVJTSU9OKTsKKyAgZWxzZSAKKyAgICB7CisgICAgICBpZiAoZGFlbW9uLT5jYWNoZXNpemUgIT0gMCkKKwlteV9zeXNsb2coTE9HX0lORk8sIF8oInN0YXJ0ZWQsIHZlcnNpb24gJXMgY2FjaGVzaXplICVkIiksIFZFUlNJT04sIGRhZW1vbi0+Y2FjaGVzaXplKTsKKyAgICAgIGVsc2UKKwlteV9zeXNsb2coTE9HX0lORk8sIF8oInN0YXJ0ZWQsIHZlcnNpb24gJXMgY2FjaGUgZGlzYWJsZWQiKSwgVkVSU0lPTik7CisKKyAgICAgIGlmIChvcHRpb25fYm9vbChPUFRfTE9DQUxfU0VSVklDRSkpCisJbXlfc3lzbG9nKExPR19JTkZPLCBfKCJETlMgc2VydmljZSBsaW1pdGVkIHRvIGxvY2FsIHN1Ym5ldHMiKSk7CisgICAgfQorICAKKyAgbXlfc3lzbG9nKExPR19JTkZPLCBfKCJjb21waWxlIHRpbWUgb3B0aW9uczogJXMiKSwgY29tcGlsZV9vcHRzKTsKKyAgCisjaWZkZWYgSEFWRV9EQlVTCisgIGlmIChvcHRpb25fYm9vbChPUFRfREJVUykpCisgICAgeworICAgICAgaWYgKGRhZW1vbi0+ZGJ1cykKKwlteV9zeXNsb2coTE9HX0lORk8sIF8oIkRCdXMgc3VwcG9ydCBlbmFibGVkOiBjb25uZWN0ZWQgdG8gc3lzdGVtIGJ1cyIpKTsKKyAgICAgIGVsc2UKKwlteV9zeXNsb2coTE9HX0lORk8sIF8oIkRCdXMgc3VwcG9ydCBlbmFibGVkOiBidXMgY29ubmVjdGlvbiBwZW5kaW5nIikpOworICAgIH0KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9ETlNTRUMKKyAgaWYgKG9wdGlvbl9ib29sKE9QVF9ETlNTRUNfVkFMSUQpKQorICAgIHsKKyAgICAgIGludCByYzsKKworICAgICAgLyogRGVsYXkgY3JlYXRpbmcgdGhlIHRpbWVzdGFtcCBmaWxlIHVudGlsIGhlcmUsIGFmdGVyIHdlJ3ZlIGNoYW5nZWQgdXNlciwgc28gdGhhdAorCSBpdCBoYXMgdGhlIGNvcnJlY3Qgb3duZXIgdG8gYWxsb3cgdXBkYXRpbmcgdGhlIG10aW1lIGxhdGVyLiAKKwkgVGhpcyBtZWFucyB3ZSBoYXZlIHRvIHJlcG9ydCBmYXRhbCBlcnJvcnMgdmlhIHRoZSBwaXBlLiAqLworICAgICAgaWYgKChyYyA9IHNldHVwX3RpbWVzdGFtcCgpKSA9PSAtMSkKKwl7CisJICBzZW5kX2V2ZW50KGVycl9waXBlWzFdLCBFVkVOVF9USU1FX0VSUiwgZXJybm8sIGRhZW1vbi0+dGltZXN0YW1wX2ZpbGUpOworCSAgX2V4aXQoMCk7CisJfQorICAgICAgCisgICAgICBteV9zeXNsb2coTE9HX0lORk8sIF8oIkROU1NFQyB2YWxpZGF0aW9uIGVuYWJsZWQiKSk7CisgICAgICAKKyAgICAgIGRhZW1vbi0+ZG5zc2VjX25vX3RpbWVfY2hlY2sgPSBvcHRpb25fYm9vbChPUFRfRE5TU0VDX1RJTUUpOworICAgICAgaWYgKG9wdGlvbl9ib29sKE9QVF9ETlNTRUNfVElNRSkgJiYgIWRhZW1vbi0+YmFja190b190aGVfZnV0dXJlKQorCW15X3N5c2xvZyhMT0dfSU5GTywgXygiRE5TU0VDIHNpZ25hdHVyZSB0aW1lc3RhbXBzIG5vdCBjaGVja2VkIHVudGlsIGZpcnN0IGNhY2hlIHJlbG9hZCIpKTsKKyAgICAgIAorICAgICAgaWYgKHJjID09IDEpCisJbXlfc3lzbG9nKExPR19JTkZPLCBfKCJETlNTRUMgc2lnbmF0dXJlIHRpbWVzdGFtcHMgbm90IGNoZWNrZWQgdW50aWwgc3lzdGVtIHRpbWUgdmFsaWQiKSk7CisgICAgfQorI2VuZGlmCisKKyAgaWYgKGxvZ19lcnIgIT0gMCkKKyAgICBteV9zeXNsb2coTE9HX1dBUk5JTkcsIF8oIndhcm5pbmc6IGZhaWxlZCB0byBjaGFuZ2Ugb3duZXIgb2YgJXM6ICVzIiksIAorCSAgICAgIGRhZW1vbi0+bG9nX2ZpbGUsIHN0cmVycm9yKGxvZ19lcnIpKTsKKyAgCisgIGlmIChiaW5kX2ZhbGxiYWNrKQorICAgIG15X3N5c2xvZyhMT0dfV0FSTklORywgXygic2V0dGluZyAtLWJpbmQtaW50ZXJmYWNlcyBvcHRpb24gYmVjYXVzZSBvZiBPUyBsaW1pdGF0aW9ucyIpKTsKKworICBpZiAob3B0aW9uX2Jvb2woT1BUX05PV0lMRCkpCisgICAgd2Fybl9ib3VuZF9saXN0ZW5lcnMoKTsKKyAgZWxzZSBpZiAoIW9wdGlvbl9ib29sKE9QVF9DTEVWRVJCSU5EKSkKKyAgICB3YXJuX3dpbGRfbGFiZWxzKCk7CisKKyAgd2Fybl9pbnRfbmFtZXMoKTsKKyAgCisgIGlmICghb3B0aW9uX2Jvb2woT1BUX05PV0lMRCkpIAorICAgIGZvciAoaWZfdG1wID0gZGFlbW9uLT5pZl9uYW1lczsgaWZfdG1wOyBpZl90bXAgPSBpZl90bXAtPm5leHQpCisgICAgICBpZiAoaWZfdG1wLT5uYW1lICYmICFpZl90bXAtPnVzZWQpCisJbXlfc3lzbG9nKExPR19XQVJOSU5HLCBfKCJ3YXJuaW5nOiBpbnRlcmZhY2UgJXMgZG9lcyBub3QgY3VycmVudGx5IGV4aXN0IiksIGlmX3RtcC0+bmFtZSk7CisgICAKKyAgaWYgKGRhZW1vbi0+cG9ydCAhPSAwICYmIG9wdGlvbl9ib29sKE9QVF9OT19SRVNPTFYpKQorICAgIHsKKyAgICAgIGlmIChkYWVtb24tPnJlc29sdl9maWxlcyAmJiAhZGFlbW9uLT5yZXNvbHZfZmlsZXMtPmlzX2RlZmF1bHQpCisJbXlfc3lzbG9nKExPR19XQVJOSU5HLCBfKCJ3YXJuaW5nOiBpZ25vcmluZyByZXNvbHYtZmlsZSBmbGFnIGJlY2F1c2Ugbm8tcmVzb2x2IGlzIHNldCIpKTsKKyAgICAgIGRhZW1vbi0+cmVzb2x2X2ZpbGVzID0gTlVMTDsKKyAgICAgIGlmICghZGFlbW9uLT5zZXJ2ZXJzKQorCW15X3N5c2xvZyhMT0dfV0FSTklORywgXygid2FybmluZzogbm8gdXBzdHJlYW0gc2VydmVycyBjb25maWd1cmVkIikpOworICAgIH0gCisKKyAgaWYgKGRhZW1vbi0+bWF4X2xvZ3MgIT0gMCkKKyAgICBteV9zeXNsb2coTE9HX0lORk8sIF8oImFzeW5jaHJvbm91cyBsb2dnaW5nIGVuYWJsZWQsIHF1ZXVlIGxpbWl0IGlzICVkIG1lc3NhZ2VzIiksIGRhZW1vbi0+bWF4X2xvZ3MpOworICAKKworI2lmZGVmIEhBVkVfREhDUAorICBmb3IgKGNvbnRleHQgPSBkYWVtb24tPmRoY3A7IGNvbnRleHQ7IGNvbnRleHQgPSBjb250ZXh0LT5uZXh0KQorICAgIGxvZ19jb250ZXh0KEFGX0lORVQsIGNvbnRleHQpOworCisgIGZvciAocmVsYXkgPSBkYWVtb24tPnJlbGF5NDsgcmVsYXk7IHJlbGF5ID0gcmVsYXktPm5leHQpCisgICAgbG9nX3JlbGF5KEFGX0lORVQsIHJlbGF5KTsKKworIyAgaWZkZWYgSEFWRV9ESENQNgorICBmb3IgKGNvbnRleHQgPSBkYWVtb24tPmRoY3A2OyBjb250ZXh0OyBjb250ZXh0ID0gY29udGV4dC0+bmV4dCkKKyAgICBsb2dfY29udGV4dChBRl9JTkVUNiwgY29udGV4dCk7CisKKyAgZm9yIChyZWxheSA9IGRhZW1vbi0+cmVsYXk2OyByZWxheTsgcmVsYXkgPSByZWxheS0+bmV4dCkKKyAgICBsb2dfcmVsYXkoQUZfSU5FVDYsIHJlbGF5KTsKKyAgCisgIGlmIChkYWVtb24tPmRvaW5nX2RoY3A2IHx8IGRhZW1vbi0+ZG9pbmdfcmEpCisgICAgZGhjcF9jb25zdHJ1Y3RfY29udGV4dHMobm93KTsKKyAgCisgIGlmIChvcHRpb25fYm9vbChPUFRfUkEpKQorICAgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX0lORk8sIF8oIklQdjYgcm91dGVyIGFkdmVydGlzZW1lbnQgZW5hYmxlZCIpKTsKKyMgIGVuZGlmCisKKyMgIGlmZGVmIEhBVkVfTElOVVhfTkVUV09SSworICBpZiAoZGlkX2JpbmQpCisgICAgbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfSU5GTywgXygiREhDUCwgc29ja2V0cyBib3VuZCBleGNsdXNpdmVseSB0byBpbnRlcmZhY2UgJXMiKSwgYm91bmRfZGV2aWNlKTsKKyMgIGVuZGlmCisKKyAgLyogYWZ0ZXIgZGhjcF9jb25zdHJ1Y3RfY29udGV4dHMgKi8KKyAgaWYgKGRhZW1vbi0+ZGhjcCB8fCBkYWVtb24tPmRvaW5nX2RoY3A2KQorICAgIGxlYXNlX2ZpbmRfaW50ZXJmYWNlcyhub3cpOworI2VuZGlmCisKKyNpZmRlZiBIQVZFX1RGVFAKKyAgaWYgKG9wdGlvbl9ib29sKE9QVF9URlRQKSkKKyAgICB7CisgICAgICBzdHJ1Y3QgdGZ0cF9wcmVmaXggKnA7CisKKyAgICAgIG15X3N5c2xvZyhNU19URlRQIHwgTE9HX0lORk8sICJURlRQICVzJXMgJXMiLCAKKwkJZGFlbW9uLT50ZnRwX3ByZWZpeCA/IF8oInJvb3QgaXMgIikgOiBfKCJlbmFibGVkIiksCisJCWRhZW1vbi0+dGZ0cF9wcmVmaXggPyBkYWVtb24tPnRmdHBfcHJlZml4OiAiIiwKKwkJb3B0aW9uX2Jvb2woT1BUX1RGVFBfU0VDVVJFKSA/IF8oInNlY3VyZSBtb2RlIikgOiAiIik7CisKKyAgICAgIGlmICh0ZnRwX3ByZWZpeF9taXNzaW5nKQorCW15X3N5c2xvZyhNU19URlRQIHwgTE9HX1dBUk5JTkcsIF8oIndhcm5pbmc6ICVzIGluYWNjZXNzaWJsZSIpLCBkYWVtb24tPnRmdHBfcHJlZml4KTsKKworICAgICAgZm9yIChwID0gZGFlbW9uLT5pZl9wcmVmaXg7IHA7IHAgPSBwLT5uZXh0KQorCWlmIChwLT5taXNzaW5nKQorCSAgIG15X3N5c2xvZyhNU19URlRQIHwgTE9HX1dBUk5JTkcsIF8oIndhcm5pbmc6IFRGVFAgZGlyZWN0b3J5ICVzIGluYWNjZXNzaWJsZSIpLCBwLT5wcmVmaXgpOworCisgICAgICAvKiBUaGlzIGlzIGEgZ3Vlc3MsIGl0IGFzc3VtZXMgdGhhdCBmb3Igc21hbGwgbGltaXRzLCAKKwkgZGlzam9pbnQgZmlsZXMgbWlnaHQgYmUgc2VydmVkLCBidXQgZm9yIGxhcmdlIGxpbWl0cywgCisJIGEgc2luZ2xlIGZpbGUgd2lsbCBiZSBzZW50IHRvIG1heSBjbGllbnRzICh0aGUgZmlsZSBvbmx5IG5lZWRzCisJIG9uZSBmZCkuICovCisKKyAgICAgIG1heF9mZCAtPSAzMDsgLyogdXNlIG90aGVyIHRoYW4gVEZUUCAqLworICAgICAgCisgICAgICBpZiAobWF4X2ZkIDwgMCkKKwltYXhfZmQgPSA1OworICAgICAgZWxzZSBpZiAobWF4X2ZkIDwgMTAwKQorCW1heF9mZCA9IG1heF9mZC8yOworICAgICAgZWxzZQorCW1heF9mZCA9IG1heF9mZCAtIDIwOworICAgICAgCisgICAgICAvKiBpZiB3ZSBoYXZlIHRvIHVzZSBhIGxpbWl0ZWQgcmFuZ2Ugb2YgcG9ydHMsIAorCSB0aGF0IHdpbGwgbGltaXQgdGhlIG51bWJlciBvZiB0cmFuc2ZlcnMgKi8KKyAgICAgIGlmIChkYWVtb24tPnN0YXJ0X3RmdHBfcG9ydCAhPSAwICYmCisJICBkYWVtb24tPmVuZF90ZnRwX3BvcnQgLSBkYWVtb24tPnN0YXJ0X3RmdHBfcG9ydCArIDEgPCBtYXhfZmQpCisJbWF4X2ZkID0gZGFlbW9uLT5lbmRfdGZ0cF9wb3J0IC0gZGFlbW9uLT5zdGFydF90ZnRwX3BvcnQgKyAxOworCisgICAgICBpZiAoZGFlbW9uLT50ZnRwX21heCA+IG1heF9mZCkKKwl7CisJICBkYWVtb24tPnRmdHBfbWF4ID0gbWF4X2ZkOworCSAgbXlfc3lzbG9nKE1TX1RGVFAgfCBMT0dfV0FSTklORywgCisJCSAgICBfKCJyZXN0cmljdGluZyBtYXhpbXVtIHNpbXVsdGFuZW91cyBURlRQIHRyYW5zZmVycyB0byAlZCIpLCAKKwkJICAgIGRhZW1vbi0+dGZ0cF9tYXgpOworCX0KKyAgICB9CisjZW5kaWYKKworICAvKiBmaW5pc2hlZCBzdGFydC11cCAtIHJlbGVhc2Ugb3JpZ2luYWwgcHJvY2VzcyAqLworICBpZiAoZXJyX3BpcGVbMV0gIT0gLTEpCisgICAgd2hpbGUgKHJldHJ5X3NlbmQoY2xvc2UoZXJyX3BpcGVbMV0pKSk7CisgIAorICBpZiAoZGFlbW9uLT5wb3J0ICE9IDApCisgICAgY2hlY2tfc2VydmVycygpOworICAKKyAgcGlkID0gZ2V0cGlkKCk7CisgIAorI2lmZGVmIEhBVkVfSU5PVElGWQorICAvKiBVc2luZyBpbm90aWZ5LCBoYXZlIHRvIHNlbGVjdCBhIHJlc29sdiBmaWxlIGF0IHN0YXJ0dXAgKi8KKyAgcG9sbF9yZXNvbHYoMSwgMCwgbm93KTsKKyNlbmRpZgorICAKKyAgd2hpbGUgKDEpCisgICAgeworICAgICAgaW50IHQsIHRpbWVvdXQgPSAtMTsKKyAgICAgIAorICAgICAgcG9sbF9yZXNldCgpOworICAgICAgCisgICAgICAvKiBpZiB3ZSBhcmUgb3V0IG9mIHJlc291cmNlcywgZmluZCBob3cgbG9uZyB3ZSBoYXZlIHRvIHdhaXQKKwkgZm9yIHNvbWUgdG8gY29tZSBmcmVlLCB3ZSdsbCBsb29wIGFyb3VuZCB0aGVuIGFuZCByZXN0YXJ0CisJIGxpc3RlbmluZyBmb3IgcXVlcmllcyAqLworICAgICAgaWYgKCh0ID0gc2V0X2Ruc19saXN0ZW5lcnMobm93KSkgIT0gMCkKKwl0aW1lb3V0ID0gdCAqIDEwMDA7CisKKyAgICAgIC8qIFdoaWxzdCBwb2xsaW5nIGZvciB0aGUgZGJ1cywgb3IgZG9pbmcgYSB0ZnRwIHRyYW5zZmVyLCB3YWtlIGV2ZXJ5IHF1YXJ0ZXIgc2Vjb25kICovCisgICAgICBpZiAoZGFlbW9uLT50ZnRwX3RyYW5zIHx8CisJICAob3B0aW9uX2Jvb2woT1BUX0RCVVMpICYmICFkYWVtb24tPmRidXMpKQorCXRpbWVvdXQgPSAyNTA7CisKKyAgICAgIC8qIFdha2UgZXZlcnkgc2Vjb25kIHdoaWxzdCB3YWl0aW5nIGZvciBEQUQgdG8gY29tcGxldGUgKi8KKyAgICAgIGVsc2UgaWYgKGlzX2RhZF9saXN0ZW5lcnMoKSkKKwl0aW1lb3V0ID0gMTAwMDsKKworI2lmZGVmIEhBVkVfREJVUworICAgICAgc2V0X2RidXNfbGlzdGVuZXJzKCk7CisjZW5kaWYJCisgIAorI2lmZGVmIEhBVkVfREhDUAorICAgICAgaWYgKGRhZW1vbi0+ZGhjcCB8fCBkYWVtb24tPnJlbGF5NCkKKwl7CisJICBwb2xsX2xpc3RlbihkYWVtb24tPmRoY3BmZCwgUE9MTElOKTsKKwkgIGlmIChkYWVtb24tPnB4ZWZkICE9IC0xKQorCSAgICBwb2xsX2xpc3RlbihkYWVtb24tPnB4ZWZkLCBQT0xMSU4pOworCX0KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9ESENQNgorICAgICAgaWYgKGRhZW1vbi0+ZG9pbmdfZGhjcDYgfHwgZGFlbW9uLT5yZWxheTYpCisJcG9sbF9saXN0ZW4oZGFlbW9uLT5kaGNwNmZkLCBQT0xMSU4pOworCQorICAgICAgaWYgKGRhZW1vbi0+ZG9pbmdfcmEpCisJcG9sbF9saXN0ZW4oZGFlbW9uLT5pY21wNmZkLCBQT0xMSU4pOyAKKyNlbmRpZgorICAgIAorI2lmZGVmIEhBVkVfSU5PVElGWQorICAgICAgaWYgKGRhZW1vbi0+aW5vdGlmeWZkICE9IC0xKQorCXBvbGxfbGlzdGVuKGRhZW1vbi0+aW5vdGlmeWZkLCBQT0xMSU4pOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEhBVkVfTElOVVhfTkVUV09SSykKKyAgICAgIHBvbGxfbGlzdGVuKGRhZW1vbi0+bmV0bGlua2ZkLCBQT0xMSU4pOworI2VsaWYgZGVmaW5lZChIQVZFX0JTRF9ORVRXT1JLKQorICAgICAgcG9sbF9saXN0ZW4oZGFlbW9uLT5yb3V0ZWZkLCBQT0xMSU4pOworI2VuZGlmCisgICAgICAKKyAgICAgIHBvbGxfbGlzdGVuKHBpcGVyZWFkLCBQT0xMSU4pOworCisjaWZkZWYgSEFWRV9TQ1JJUFQKKyMgICAgaWZkZWYgSEFWRV9ESENQCisgICAgICB3aGlsZSAoaGVscGVyX2J1Zl9lbXB0eSgpICYmIGRvX3NjcmlwdF9ydW4obm93KSk7IAorIyAgICBlbmRpZgorCisgICAgICAvKiBSZWZyZXNoIGNhY2hlICovCisgICAgICBpZiAob3B0aW9uX2Jvb2woT1BUX1NDUklQVF9BUlApKQorCWZpbmRfbWFjKE5VTEwsIE5VTEwsIDAsIG5vdyk7CisgICAgICB3aGlsZSAoaGVscGVyX2J1Zl9lbXB0eSgpICYmIGRvX2FycF9zY3JpcHRfcnVuKCkpOworCisjICAgIGlmZGVmIEhBVkVfVEZUUAorICAgICAgd2hpbGUgKGhlbHBlcl9idWZfZW1wdHkoKSAmJiBkb190ZnRwX3NjcmlwdF9ydW4oKSk7CisjICAgIGVuZGlmCisKKyAgICAgIGlmICghaGVscGVyX2J1Zl9lbXB0eSgpKQorCXBvbGxfbGlzdGVuKGRhZW1vbi0+aGVscGVyZmQsIFBPTExPVVQpOworI2Vsc2UKKyAgICAgIC8qIG5lZWQgdGhpcyBmb3Igb3RoZXIgc2lkZS1lZmZlY3RzICovCisjICAgIGlmZGVmIEhBVkVfREhDUAorICAgICAgd2hpbGUgKGRvX3NjcmlwdF9ydW4obm93KSk7CisjICAgIGVuZGlmCisKKyAgICAgIHdoaWxlIChkb19hcnBfc2NyaXB0X3J1bigpKTsKKworIyAgICBpZmRlZiBIQVZFX1RGVFAgCisgICAgICB3aGlsZSAoZG9fdGZ0cF9zY3JpcHRfcnVuKCkpOworIyAgICBlbmRpZgorCisjZW5kaWYKKworICAgCisgICAgICAvKiBtdXN0IGRvIHRoaXMganVzdCBiZWZvcmUgc2VsZWN0KCksIHdoZW4gd2Uga25vdyBubworCSBtb3JlIGNhbGxzIHRvIG15X3N5c2xvZygpIGNhbiBvY2N1ciAqLworICAgICAgc2V0X2xvZ193cml0ZXIoKTsKKyAgICAgIAorICAgICAgaWYgKGRvX3BvbGwodGltZW91dCkgPCAwKQorCWNvbnRpbnVlOworICAgICAgCisgICAgICBub3cgPSBkbnNtYXNxX3RpbWUoKTsKKworICAgICAgY2hlY2tfbG9nX3dyaXRlcigwKTsKKworICAgICAgLyogcHJpbWUuICovCisgICAgICBlbnVtZXJhdGVfaW50ZXJmYWNlcygxKTsKKworICAgICAgLyogQ2hlY2sgdGhlIGludGVyZmFjZXMgdG8gc2VlIGlmIGFueSBoYXZlIGV4aXRlZCBEQUQgc3RhdGUKKwkgYW5kIGlmIHNvLCBiaW5kIHRoZSBhZGRyZXNzLiAqLworICAgICAgaWYgKGlzX2RhZF9saXN0ZW5lcnMoKSkKKwl7CisJICBlbnVtZXJhdGVfaW50ZXJmYWNlcygwKTsKKwkgIC8qIE5CLCBpc19kYWRfbGlzdGVuZXJzKCkgPT0gMSAtLT4gd2UncmUgYmluZGluZyBpbnRlcmZhY2VzICovCisJICBjcmVhdGVfYm91bmRfbGlzdGVuZXJzKDApOworCSAgd2Fybl9ib3VuZF9saXN0ZW5lcnMoKTsKKwl9CisKKyNpZiBkZWZpbmVkKEhBVkVfTElOVVhfTkVUV09SSykKKyAgICAgIGlmIChwb2xsX2NoZWNrKGRhZW1vbi0+bmV0bGlua2ZkLCBQT0xMSU4pKQorCW5ldGxpbmtfbXVsdGljYXN0KCk7CisjZWxpZiBkZWZpbmVkKEhBVkVfQlNEX05FVFdPUkspCisgICAgICBpZiAocG9sbF9jaGVjayhkYWVtb24tPnJvdXRlZmQsIFBPTExJTikpCisJcm91dGVfc29jaygpOworI2VuZGlmCisKKyNpZmRlZiBIQVZFX0lOT1RJRlkKKyAgICAgIGlmICAoZGFlbW9uLT5pbm90aWZ5ZmQgIT0gLTEgJiYgcG9sbF9jaGVjayhkYWVtb24tPmlub3RpZnlmZCwgUE9MTElOKSAmJiBpbm90aWZ5X2NoZWNrKG5vdykpCisJeworCSAgaWYgKGRhZW1vbi0+cG9ydCAhPSAwICYmICFvcHRpb25fYm9vbChPUFRfTk9fUE9MTCkpCisJICAgIHBvbGxfcmVzb2x2KDEsIDEsIG5vdyk7CisJfSAJICAKKyNlbHNlCisgICAgICAvKiBDaGVjayBmb3IgY2hhbmdlcyB0byByZXNvbHYgZmlsZXMgb25jZSBwZXIgc2Vjb25kIG1heC4gKi8KKyAgICAgIC8qIERvbid0IGdvIHNpbGVudCBmb3IgbG9uZyBwZXJpb2RzIGlmIHRoZSBjbG9jayBnb2VzIGJhY2t3YXJkcy4gKi8KKyAgICAgIGlmIChkYWVtb24tPmxhc3RfcmVzb2x2ID09IDAgfHwgCisJICBkaWZmdGltZShub3csIGRhZW1vbi0+bGFzdF9yZXNvbHYpID4gMS4wIHx8IAorCSAgZGlmZnRpbWUobm93LCBkYWVtb24tPmxhc3RfcmVzb2x2KSA8IC0xLjApCisJeworCSAgLyogcG9sbF9yZXNvbHYgZG9lc24ndCBuZWVkIHRvIHJlbG9hZCBmaXJzdCB0aW1lIHRocm91Z2gsIHNpbmNlIAorCSAgICAgdGhhdCdzIHF1ZXVlZCBhbnl3YXkuICovCisKKwkgIHBvbGxfcmVzb2x2KDAsIGRhZW1vbi0+bGFzdF9yZXNvbHYgIT0gMCwgbm93KTsgCSAgCisJICBkYWVtb24tPmxhc3RfcmVzb2x2ID0gbm93OworCX0KKyNlbmRpZgorCisgICAgICBpZiAocG9sbF9jaGVjayhwaXBlcmVhZCwgUE9MTElOKSkKKwlhc3luY19ldmVudChwaXBlcmVhZCwgbm93KTsKKyAgICAgIAorI2lmZGVmIEhBVkVfREJVUworICAgICAgLyogaWYgd2UgZGlkbid0IGNyZWF0ZSBhIERCdXMgY29ubmVjdGlvbiwgcmV0cnkgbm93LiAqLyAKKyAgICAgaWYgKG9wdGlvbl9ib29sKE9QVF9EQlVTKSAmJiAhZGFlbW9uLT5kYnVzKQorCXsKKwkgIGNoYXIgKmVycjsKKwkgIGlmICgoZXJyID0gZGJ1c19pbml0KCkpKQorCSAgICBteV9zeXNsb2coTE9HX1dBUk5JTkcsIF8oIkRCdXMgZXJyb3I6ICVzIiksIGVycik7CisJICBpZiAoZGFlbW9uLT5kYnVzKQorCSAgICBteV9zeXNsb2coTE9HX0lORk8sIF8oImNvbm5lY3RlZCB0byBzeXN0ZW0gREJ1cyIpKTsKKwl9CisgICAgICBjaGVja19kYnVzX2xpc3RlbmVycygpOworI2VuZGlmCisgICAgICAKKyAgICAgIGNoZWNrX2Ruc19saXN0ZW5lcnMobm93KTsKKworI2lmZGVmIEhBVkVfVEZUUAorICAgICAgY2hlY2tfdGZ0cF9saXN0ZW5lcnMobm93KTsKKyNlbmRpZiAgICAgIAorCisjaWZkZWYgSEFWRV9ESENQCisgICAgICBpZiAoZGFlbW9uLT5kaGNwIHx8IGRhZW1vbi0+cmVsYXk0KQorCXsKKwkgIGlmIChwb2xsX2NoZWNrKGRhZW1vbi0+ZGhjcGZkLCBQT0xMSU4pKQorCSAgICBkaGNwX3BhY2tldChub3csIDApOworCSAgaWYgKGRhZW1vbi0+cHhlZmQgIT0gLTEgJiYgcG9sbF9jaGVjayhkYWVtb24tPnB4ZWZkLCBQT0xMSU4pKQorCSAgICBkaGNwX3BhY2tldChub3csIDEpOworCX0KKworI2lmZGVmIEhBVkVfREhDUDYKKyAgICAgIGlmICgoZGFlbW9uLT5kb2luZ19kaGNwNiB8fCBkYWVtb24tPnJlbGF5NikgJiYgcG9sbF9jaGVjayhkYWVtb24tPmRoY3A2ZmQsIFBPTExJTikpCisJZGhjcDZfcGFja2V0KG5vdyk7CisKKyAgICAgIGlmIChkYWVtb24tPmRvaW5nX3JhICYmIHBvbGxfY2hlY2soZGFlbW9uLT5pY21wNmZkLCBQT0xMSU4pKQorCWljbXA2X3BhY2tldChub3cpOworI2VuZGlmCisKKyMgIGlmZGVmIEhBVkVfU0NSSVBUCisgICAgICBpZiAoZGFlbW9uLT5oZWxwZXJmZCAhPSAtMSAmJiBwb2xsX2NoZWNrKGRhZW1vbi0+aGVscGVyZmQsIFBPTExPVVQpKQorCWhlbHBlcl93cml0ZSgpOworIyAgZW5kaWYKKyNlbmRpZgorCisgICAgfQorfQorCitzdGF0aWMgdm9pZCBzaWdfaGFuZGxlcihpbnQgc2lnKQoreworICBpZiAocGlkID09IDApCisgICAgeworICAgICAgLyogaWdub3JlIGFueXRoaW5nIG90aGVyIHRoYW4gVEVSTSBkdXJpbmcgc3RhcnR1cAorCSBhbmQgaW4gaGVscGVyIHByb2MuIChoZWxwZXIgaWdub3JlIFRFUk0gdG9vKSAqLworICAgICAgaWYgKHNpZyA9PSBTSUdURVJNKQorCWV4aXQoRUNfTUlTQyk7CisgICAgfQorICBlbHNlIGlmIChwaWQgIT0gZ2V0cGlkKCkpCisgICAgeworICAgICAgLyogYWxhcm0gaXMgdXNlZCB0byBraWxsIFRDUCBjaGlsZHJlbiBhZnRlciBhIGZpeGVkIHRpbWUuICovCisgICAgICBpZiAoc2lnID09IFNJR0FMUk0pCisJX2V4aXQoMCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogbWFzdGVyIHByb2Nlc3MgKi8KKyAgICAgIGludCBldmVudCwgZXJyc2F2ZSA9IGVycm5vOworICAgICAgCisgICAgICBpZiAoc2lnID09IFNJR0hVUCkKKwlldmVudCA9IEVWRU5UX1JFTE9BRDsKKyAgICAgIGVsc2UgaWYgKHNpZyA9PSBTSUdDSExEKQorCWV2ZW50ID0gRVZFTlRfQ0hJTEQ7CisgICAgICBlbHNlIGlmIChzaWcgPT0gU0lHQUxSTSkKKwlldmVudCA9IEVWRU5UX0FMQVJNOworICAgICAgZWxzZSBpZiAoc2lnID09IFNJR1RFUk0pCisJZXZlbnQgPSBFVkVOVF9URVJNOworICAgICAgZWxzZSBpZiAoc2lnID09IFNJR1VTUjEpCisJZXZlbnQgPSBFVkVOVF9EVU1QOworICAgICAgZWxzZSBpZiAoc2lnID09IFNJR1VTUjIpCisJZXZlbnQgPSBFVkVOVF9SRU9QRU47CisgICAgICBlbHNlCisJcmV0dXJuOworCisgICAgICBzZW5kX2V2ZW50KHBpcGV3cml0ZSwgZXZlbnQsIDAsIE5VTEwpOyAKKyAgICAgIGVycm5vID0gZXJyc2F2ZTsKKyAgICB9Cit9CisKKy8qIG5vdyA9PSAwIC0+IHF1ZXVlIGltbWVkaWF0ZSBjYWxsYmFjayAqLwordm9pZCBzZW5kX2FsYXJtKHRpbWVfdCBldmVudCwgdGltZV90IG5vdykKK3sKKyAgaWYgKG5vdyA9PSAwIHx8IGV2ZW50ICE9IDApCisgICAgeworICAgICAgLyogYWxhcm0oMCkgb3IgYWxhcm0oLXZlKSBkb2Vzbid0IGRvIHdoYXQgd2Ugd2FudC4uLi4gKi8KKyAgICAgIGlmICgobm93ID09IDAgfHwgZGlmZnRpbWUoZXZlbnQsIG5vdykgPD0gMC4wKSkKKwlzZW5kX2V2ZW50KHBpcGV3cml0ZSwgRVZFTlRfQUxBUk0sIDAsIE5VTEwpOworICAgICAgZWxzZSAKKwlhbGFybSgodW5zaWduZWQpZGlmZnRpbWUoZXZlbnQsIG5vdykpOyAKKyAgICB9Cit9CisKK3ZvaWQgcXVldWVfZXZlbnQoaW50IGV2ZW50KQoreworICBzZW5kX2V2ZW50KHBpcGV3cml0ZSwgZXZlbnQsIDAsIE5VTEwpOworfQorCit2b2lkIHNlbmRfZXZlbnQoaW50IGZkLCBpbnQgZXZlbnQsIGludCBkYXRhLCBjaGFyICptc2cpCit7CisgIHN0cnVjdCBldmVudF9kZXNjIGV2OworICBzdHJ1Y3QgaW92ZWMgaW92WzJdOworCisgIGV2LmV2ZW50ID0gZXZlbnQ7CisgIGV2LmRhdGEgPSBkYXRhOworICBldi5tc2dfc3ogPSBtc2cgPyBzdHJsZW4obXNnKSA6IDA7CisgIAorICBpb3ZbMF0uaW92X2Jhc2UgPSAmZXY7CisgIGlvdlswXS5pb3ZfbGVuID0gc2l6ZW9mKGV2KTsKKyAgaW92WzFdLmlvdl9iYXNlID0gbXNnOworICBpb3ZbMV0uaW92X2xlbiA9IGV2Lm1zZ19zejsKKyAgCisgIC8qIGVycm9yIHBpcGUsIGRlYnVnIG1vZGUuICovCisgIGlmIChmZCA9PSAtMSkKKyAgICBmYXRhbF9ldmVudCgmZXYsIG1zZyk7CisgIGVsc2UKKyAgICAvKiBwaXBlIGlzIG5vbi1ibG9ja2luZyBhbmQgc3RydWN0IGV2ZW50X2Rlc2MgaXMgc21hbGxlciB0aGFuCisgICAgICAgUElQRV9CVUYsIHNvIHRoaXMgZWl0aGVyIGZhaWxzIG9yIHdyaXRlcyBldmVyeXRoaW5nICovCisgICAgd2hpbGUgKHdyaXRldihmZCwgaW92LCBtc2cgPyAyIDogMSkgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpOworfQorCisvKiBOT1RFOiB0aGUgbWVtb3J5IHVzZWQgdG8gcmV0dXJuIG1zZyBpcyBsZWFrZWQ6IHVzZSBtc2dzIGluIGV2ZW50cyBvbmx5CisgICB0byBkZXNjcmliZSBmYXRhbCBlcnJvcnMuICovCitzdGF0aWMgaW50IHJlYWRfZXZlbnQoaW50IGZkLCBzdHJ1Y3QgZXZlbnRfZGVzYyAqZXZwLCBjaGFyICoqbXNnKQoreworICBjaGFyICpidWY7CisKKyAgaWYgKCFyZWFkX3dyaXRlKGZkLCAodW5zaWduZWQgY2hhciAqKWV2cCwgc2l6ZW9mKHN0cnVjdCBldmVudF9kZXNjKSwgMSkpCisgICAgcmV0dXJuIDA7CisgIAorICAqbXNnID0gTlVMTDsKKyAgCisgIGlmIChldnAtPm1zZ19zeiAhPSAwICYmIAorICAgICAgKGJ1ZiA9IG1hbGxvYyhldnAtPm1zZ19zeiArIDEpKSAmJgorICAgICAgcmVhZF93cml0ZShmZCwgKHVuc2lnbmVkIGNoYXIgKilidWYsIGV2cC0+bXNnX3N6LCAxKSkKKyAgICB7CisgICAgICBidWZbZXZwLT5tc2dfc3pdID0gMDsKKyAgICAgICptc2cgPSBidWY7CisgICAgfQorCisgIHJldHVybiAxOworfQorICAgIAorc3RhdGljIHZvaWQgZmF0YWxfZXZlbnQoc3RydWN0IGV2ZW50X2Rlc2MgKmV2LCBjaGFyICptc2cpCit7CisgIGVycm5vID0gZXYtPmRhdGE7CisgIAorICBzd2l0Y2ggKGV2LT5ldmVudCkKKyAgICB7CisgICAgY2FzZSBFVkVOVF9ESUU6CisgICAgICBleGl0KDApOworCisgICAgY2FzZSBFVkVOVF9GT1JLX0VSUjoKKyAgICAgIGRpZShfKCJjYW5ub3QgZm9yayBpbnRvIGJhY2tncm91bmQ6ICVzIiksIE5VTEwsIEVDX01JU0MpOworICAKKyAgICBjYXNlIEVWRU5UX1BJUEVfRVJSOgorICAgICAgZGllKF8oImZhaWxlZCB0byBjcmVhdGUgaGVscGVyOiAlcyIpLCBOVUxMLCBFQ19NSVNDKTsKKyAgCisgICAgY2FzZSBFVkVOVF9DQVBfRVJSOgorICAgICAgZGllKF8oInNldHRpbmcgY2FwYWJpbGl0aWVzIGZhaWxlZDogJXMiKSwgTlVMTCwgRUNfTUlTQyk7CisKKyAgICBjYXNlIEVWRU5UX1VTRVJfRVJSOgorICAgICAgZGllKF8oImZhaWxlZCB0byBjaGFuZ2UgdXNlci1pZCB0byAlczogJXMiKSwgbXNnLCBFQ19NSVNDKTsKKworICAgIGNhc2UgRVZFTlRfR1JPVVBfRVJSOgorICAgICAgZGllKF8oImZhaWxlZCB0byBjaGFuZ2UgZ3JvdXAtaWQgdG8gJXM6ICVzIiksIG1zZywgRUNfTUlTQyk7CisgICAgICAKKyAgICBjYXNlIEVWRU5UX1BJREZJTEU6CisgICAgICBkaWUoXygiZmFpbGVkIHRvIG9wZW4gcGlkZmlsZSAlczogJXMiKSwgbXNnLCBFQ19GSUxFKTsKKworICAgIGNhc2UgRVZFTlRfTE9HX0VSUjoKKyAgICAgIGRpZShfKCJjYW5ub3Qgb3BlbiBsb2cgJXM6ICVzIiksIG1zZywgRUNfRklMRSk7CisgICAgCisgICAgY2FzZSBFVkVOVF9MVUFfRVJSOgorICAgICAgZGllKF8oImZhaWxlZCB0byBsb2FkIEx1YSBzY3JpcHQ6ICVzIiksIG1zZywgRUNfTUlTQyk7CisKKyAgICBjYXNlIEVWRU5UX1RGVFBfRVJSOgorICAgICAgZGllKF8oIlRGVFAgZGlyZWN0b3J5ICVzIGluYWNjZXNzaWJsZTogJXMiKSwgbXNnLCBFQ19GSUxFKTsKKyAgICAKKyAgICBjYXNlIEVWRU5UX1RJTUVfRVJSOgorICAgICAgZGllKF8oImNhbm5vdCBjcmVhdGUgdGltZXN0YW1wIGZpbGUgJXM6ICVzIiApLCBtc2csIEVDX0JBRENPTkYpOworICAgIH0KK30JCisgICAgICAKK3N0YXRpYyB2b2lkIGFzeW5jX2V2ZW50KGludCBwaXBlLCB0aW1lX3Qgbm93KQoreworICBwaWRfdCBwOworICBzdHJ1Y3QgZXZlbnRfZGVzYyBldjsKKyAgaW50IGksIGNoZWNrID0gMDsKKyAgY2hhciAqbXNnOworICAKKyAgLyogTk9URTogdGhlIG1lbW9yeSB1c2VkIHRvIHJldHVybiBtc2cgaXMgbGVha2VkOiB1c2UgbXNncyBpbiBldmVudHMgb25seQorICAgICB0byBkZXNjcmliZSBmYXRhbCBlcnJvcnMuICovCisgIAorICBpZiAocmVhZF9ldmVudChwaXBlLCAmZXYsICZtc2cpKQorICAgIHN3aXRjaCAoZXYuZXZlbnQpCisgICAgICB7CisgICAgICBjYXNlIEVWRU5UX1JFTE9BRDoKKwlkYWVtb24tPnNvYV9zbisrOyAvKiBCdW1wIHpvbmUgc2VyaWFsLCBhcyBpdCBtYXkgaGF2ZSBjaGFuZ2VkLiAqLworCisjaWZkZWYgSEFWRV9ETlNTRUMKKwlpZiAoZGFlbW9uLT5kbnNzZWNfbm9fdGltZV9jaGVjayAmJiBvcHRpb25fYm9vbChPUFRfRE5TU0VDX1ZBTElEKSAmJiBvcHRpb25fYm9vbChPUFRfRE5TU0VDX1RJTUUpKQorCSAgeworCSAgICBteV9zeXNsb2coTE9HX0lORk8sIF8oIm5vdyBjaGVja2luZyBETlNTRUMgc2lnbmF0dXJlIHRpbWVzdGFtcHMiKSk7CisJICAgIGRhZW1vbi0+ZG5zc2VjX25vX3RpbWVfY2hlY2sgPSAwOworCSAgfSAKKyNlbmRpZgorCS8qIGZhbGwgdGhyb3VnaCAqLworCQorICAgICAgY2FzZSBFVkVOVF9JTklUOgorCWNsZWFyX2NhY2hlX2FuZF9yZWxvYWQobm93KTsKKwkKKwlpZiAoZGFlbW9uLT5wb3J0ICE9IDApCisJICB7CisJICAgIGlmIChkYWVtb24tPnJlc29sdl9maWxlcyAmJiBvcHRpb25fYm9vbChPUFRfTk9fUE9MTCkpCisJICAgICAgeworCQlyZWxvYWRfc2VydmVycyhkYWVtb24tPnJlc29sdl9maWxlcy0+bmFtZSk7CisJCWNoZWNrID0gMTsKKwkgICAgICB9CisKKwkgICAgaWYgKGRhZW1vbi0+c2VydmVyc19maWxlKQorCSAgICAgIHsKKwkJcmVhZF9zZXJ2ZXJzX2ZpbGUoKTsKKwkJY2hlY2sgPSAxOworCSAgICAgIH0KKworCSAgICBpZiAoY2hlY2spCisJICAgICAgY2hlY2tfc2VydmVycygpOworCSAgfQorCisjaWZkZWYgSEFWRV9ESENQCisJcmVydW5fc2NyaXB0cygpOworI2VuZGlmCisJYnJlYWs7CisJCisgICAgICBjYXNlIEVWRU5UX0RVTVA6CisJaWYgKGRhZW1vbi0+cG9ydCAhPSAwKQorCSAgZHVtcF9jYWNoZShub3cpOworCWJyZWFrOworCQorICAgICAgY2FzZSBFVkVOVF9BTEFSTToKKyNpZmRlZiBIQVZFX0RIQ1AKKwlpZiAoZGFlbW9uLT5kaGNwIHx8IGRhZW1vbi0+ZG9pbmdfZGhjcDYpCisJICB7CisJICAgIGxlYXNlX3BydW5lKE5VTEwsIG5vdyk7CisJICAgIGxlYXNlX3VwZGF0ZV9maWxlKG5vdyk7CisJICB9CisjaWZkZWYgSEFWRV9ESENQNgorCWVsc2UgaWYgKGRhZW1vbi0+ZG9pbmdfcmEpCisJICAvKiBOb3QgZG9pbmcgREhDUCwgc28gbm8gbGVhc2Ugc3lzdGVtLCBtYW5hZ2UgYWxhcm1zIGZvciByYSBvbmx5ICovCisJICAgIHNlbmRfYWxhcm0ocGVyaW9kaWNfcmEobm93KSwgbm93KTsKKyNlbmRpZgorI2VuZGlmCisJYnJlYWs7CisJCQorICAgICAgY2FzZSBFVkVOVF9DSElMRDoKKwkvKiBTZWUgU3RldmVucyA1LjEwICovCisJd2hpbGUgKChwID0gd2FpdHBpZCgtMSwgTlVMTCwgV05PSEFORykpICE9IDApCisJICBpZiAocCA9PSAtMSkKKwkgICAgeworCSAgICAgIGlmIChlcnJubyAhPSBFSU5UUikKKwkJYnJlYWs7CisJICAgIH0gICAgICAKKwkgIGVsc2UgCisJICAgIGZvciAoaSA9IDAgOyBpIDwgTUFYX1BST0NTOyBpKyspCisJICAgICAgaWYgKGRhZW1vbi0+dGNwX3BpZHNbaV0gPT0gcCkKKwkJZGFlbW9uLT50Y3BfcGlkc1tpXSA9IDA7CisJYnJlYWs7CisJCisjaWYgZGVmaW5lZChIQVZFX1NDUklQVCkJCisgICAgICBjYXNlIEVWRU5UX0tJTExFRDoKKwlteV9zeXNsb2coTE9HX1dBUk5JTkcsIF8oInNjcmlwdCBwcm9jZXNzIGtpbGxlZCBieSBzaWduYWwgJWQiKSwgZXYuZGF0YSk7CisJYnJlYWs7CisKKyAgICAgIGNhc2UgRVZFTlRfRVhJVEVEOgorCW15X3N5c2xvZyhMT0dfV0FSTklORywgXygic2NyaXB0IHByb2Nlc3MgZXhpdGVkIHdpdGggc3RhdHVzICVkIiksIGV2LmRhdGEpOworCWJyZWFrOworCisgICAgICBjYXNlIEVWRU5UX0VYRUNfRVJSOgorCW15X3N5c2xvZyhMT0dfRVJSLCBfKCJmYWlsZWQgdG8gZXhlY3V0ZSAlczogJXMiKSwgCisJCSAgZGFlbW9uLT5sZWFzZV9jaGFuZ2VfY29tbWFuZCwgc3RyZXJyb3IoZXYuZGF0YSkpOworCWJyZWFrOworCisgICAgICBjYXNlIEVWRU5UX1NDUklQVF9MT0c6CisJbXlfc3lzbG9nKE1TX1NDUklQVCB8IExPR19ERUJVRywgIiVzIiwgbXNnID8gbXNnIDogIiIpOworICAgICAgICBmcmVlKG1zZyk7CisJbXNnID0gTlVMTDsKKwlicmVhazsKKworCS8qIG5lY2Vzc2FyeSBmb3IgZmF0YWwgZXJyb3JzIGluIGhlbHBlciAqLworICAgICAgY2FzZSBFVkVOVF9VU0VSX0VSUjoKKyAgICAgIGNhc2UgRVZFTlRfRElFOgorICAgICAgY2FzZSBFVkVOVF9MVUFfRVJSOgorCWZhdGFsX2V2ZW50KCZldiwgbXNnKTsKKwlicmVhazsKKyNlbmRpZgorCisgICAgICBjYXNlIEVWRU5UX1JFT1BFTjoKKwkvKiBOb3RlOiB0aGlzIG1heSBsZWF2ZSBUQ1AtaGFuZGxpbmcgcHJvY2Vzc2VzIHdpdGggdGhlIG9sZCBmaWxlIHN0aWxsIG9wZW4uCisJICAgU2luY2UgYW55IHN1Y2ggcHJvY2VzcyB3aWxsIGRpZSBpbiBDSElMRF9MSUZFVElNRSBvciBwcm9iYWJseSBtdWNoIHNvb25lciwKKwkgICB3ZSBsZWF2ZSB0aGVtIGxvZ2dpbmcgdG8gdGhlIG9sZCBmaWxlLiAqLworCWlmIChkYWVtb24tPmxvZ19maWxlICE9IE5VTEwpCisJICBsb2dfcmVvcGVuKGRhZW1vbi0+bG9nX2ZpbGUpOworCWJyZWFrOworCisgICAgICBjYXNlIEVWRU5UX05FV0FERFI6CisJbmV3YWRkcmVzcyhub3cpOworCWJyZWFrOworCisgICAgICBjYXNlIEVWRU5UX05FV1JPVVRFOgorCXJlc2VuZF9xdWVyeSgpOworCS8qIEZvcmNlIHJlLXJlYWRpbmcgcmVzb2x2IGZpbGUgcmlnaHQgbm93LCBmb3IgbHVjay4gKi8KKwlwb2xsX3Jlc29sdigwLCAxLCBub3cpOworCWJyZWFrOworCisgICAgICBjYXNlIEVWRU5UX1RFUk06CisJLyogS25vY2sgYWxsIG91ciBjaGlsZHJlbiBvbiB0aGUgaGVhZC4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1BST0NTOyBpKyspCisJICBpZiAoZGFlbW9uLT50Y3BfcGlkc1tpXSAhPSAwKQorCSAgICBraWxsKGRhZW1vbi0+dGNwX3BpZHNbaV0sIFNJR0FMUk0pOworCQorI2lmIGRlZmluZWQoSEFWRV9TQ1JJUFQpICYmIGRlZmluZWQoSEFWRV9ESENQKQorCS8qIGhhbmRsZSBwZW5kaW5nIGxlYXNlIHRyYW5zaXRpb25zICovCisJaWYgKGRhZW1vbi0+aGVscGVyZmQgIT0gLTEpCisJICB7CisJICAgIC8qIGJsb2NrIGluIHdyaXRlcyB1bnRpbCBhbGwgZG9uZSAqLworCSAgICBpZiAoKGkgPSBmY250bChkYWVtb24tPmhlbHBlcmZkLCBGX0dFVEZMKSkgIT0gLTEpCisJICAgICAgZmNudGwoZGFlbW9uLT5oZWxwZXJmZCwgRl9TRVRGTCwgaSAmIH5PX05PTkJMT0NLKTsgCisJICAgIGRvIHsKKwkgICAgICBoZWxwZXJfd3JpdGUoKTsKKwkgICAgfSB3aGlsZSAoIWhlbHBlcl9idWZfZW1wdHkoKSB8fCBkb19zY3JpcHRfcnVuKG5vdykpOworCSAgICB3aGlsZSAocmV0cnlfc2VuZChjbG9zZShkYWVtb24tPmhlbHBlcmZkKSkpOworCSAgfQorI2VuZGlmCisJCisJaWYgKGRhZW1vbi0+bGVhc2Vfc3RyZWFtKQorCSAgZmNsb3NlKGRhZW1vbi0+bGVhc2Vfc3RyZWFtKTsKKworI2lmZGVmIEhBVkVfRE5TU0VDCisJLyogdXBkYXRlIHRpbWVzdGFtcCBmaWxlIG9uIFRFUk0gaWYgdGltZSBpcyBjb25zaWRlcmVkIHZhbGlkICovCisJaWYgKGRhZW1vbi0+YmFja190b190aGVfZnV0dXJlKQorCSAgeworCSAgICAgaWYgKHV0aW1lcyhkYWVtb24tPnRpbWVzdGFtcF9maWxlLCBOVUxMKSA9PSAtMSkKKwkJbXlfc3lzbG9nKExPR19FUlIsIF8oImZhaWxlZCB0byB1cGRhdGUgbXRpbWUgb24gJXM6ICVzIiksIGRhZW1vbi0+dGltZXN0YW1wX2ZpbGUsIHN0cmVycm9yKGVycm5vKSk7CisJICB9CisjZW5kaWYKKworCWlmIChkYWVtb24tPnJ1bmZpbGUpCisJICB1bmxpbmsoZGFlbW9uLT5ydW5maWxlKTsKKwkKKwlteV9zeXNsb2coTE9HX0lORk8sIF8oImV4aXRpbmcgb24gcmVjZWlwdCBvZiBTSUdURVJNIikpOworCWZsdXNoX2xvZygpOworCWV4aXQoRUNfR09PRCk7CisgICAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHBvbGxfcmVzb2x2KGludCBmb3JjZSwgaW50IGRvX3JlbG9hZCwgdGltZV90IG5vdykKK3sKKyAgc3RydWN0IHJlc29sdmMgKnJlcywgKmxhdGVzdDsKKyAgc3RydWN0IHN0YXQgc3RhdGJ1ZjsKKyAgdGltZV90IGxhc3RfY2hhbmdlID0gMDsKKyAgLyogVGhlcmUgbWF5IGJlIG1vcmUgdGhhbiBvbmUgcG9zc2libGUgZmlsZS4gCisgICAgIEdvIHRocm91Z2ggYW5kIGZpbmQgdGhlIG9uZSB3aGljaCBjaGFuZ2VkIF9sYXN0Xy4KKyAgICAgV2FybiBvZiBhbnkgd2hpY2ggY2FuJ3QgYmUgcmVhZC4gKi8KKworICBpZiAoZGFlbW9uLT5wb3J0ID09IDAgfHwgb3B0aW9uX2Jvb2woT1BUX05PX1BPTEwpKQorICAgIHJldHVybjsKKyAgCisgIGZvciAobGF0ZXN0ID0gTlVMTCwgcmVzID0gZGFlbW9uLT5yZXNvbHZfZmlsZXM7IHJlczsgcmVzID0gcmVzLT5uZXh0KQorICAgIGlmIChzdGF0KHJlcy0+bmFtZSwgJnN0YXRidWYpID09IC0xKQorICAgICAgeworCWlmIChmb3JjZSkKKwkgIHsKKwkgICAgcmVzLT5tdGltZSA9IDA7IAorCSAgICBjb250aW51ZTsKKwkgIH0KKworCWlmICghcmVzLT5sb2dnZWQpCisJICBteV9zeXNsb2coTE9HX1dBUk5JTkcsIF8oImZhaWxlZCB0byBhY2Nlc3MgJXM6ICVzIiksIHJlcy0+bmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwlyZXMtPmxvZ2dlZCA9IDE7CisJCisJaWYgKHJlcy0+bXRpbWUgIT0gMCkKKwkgIHsgCisJICAgIC8qIGV4aXN0aW5nIGZpbGUgZXZhcG9yYXRlZCwgZm9yY2Ugc2VsZWN0aW9uIG9mIHRoZSBsYXRlc3QKKwkgICAgICAgZmlsZSBldmVuIGlmIGl0cyBtdGltZSBoYXNuJ3QgY2hhbmdlZCBzaW5jZSB3ZSBsYXN0IGxvb2tlZCAqLworCSAgICBwb2xsX3Jlc29sdigxLCBkb19yZWxvYWQsIG5vdyk7CisJICAgIHJldHVybjsKKwkgIH0KKyAgICAgIH0KKyAgICBlbHNlCisgICAgICB7CisJcmVzLT5sb2dnZWQgPSAwOworCWlmIChmb3JjZSB8fCAoc3RhdGJ1Zi5zdF9tdGltZSAhPSByZXMtPm10aW1lKSkKKyAgICAgICAgICB7CisgICAgICAgICAgICByZXMtPm10aW1lID0gc3RhdGJ1Zi5zdF9tdGltZTsKKwkgICAgaWYgKGRpZmZ0aW1lKHN0YXRidWYuc3RfbXRpbWUsIGxhc3RfY2hhbmdlKSA+IDAuMCkKKwkgICAgICB7CisJCWxhc3RfY2hhbmdlID0gc3RhdGJ1Zi5zdF9tdGltZTsKKwkJbGF0ZXN0ID0gcmVzOworCSAgICAgIH0KKwkgIH0KKyAgICAgIH0KKyAgCisgIGlmIChsYXRlc3QpCisgICAgeworICAgICAgc3RhdGljIGludCB3YXJuZWQgPSAwOworICAgICAgaWYgKHJlbG9hZF9zZXJ2ZXJzKGxhdGVzdC0+bmFtZSkpCisJeworCSAgbXlfc3lzbG9nKExPR19JTkZPLCBfKCJyZWFkaW5nICVzIiksIGxhdGVzdC0+bmFtZSk7CisJICB3YXJuZWQgPSAwOworCSAgY2hlY2tfc2VydmVycygpOworCSAgaWYgKG9wdGlvbl9ib29sKE9QVF9SRUxPQUQpICYmIGRvX3JlbG9hZCkKKwkgICAgY2xlYXJfY2FjaGVfYW5kX3JlbG9hZChub3cpOworCX0KKyAgICAgIGVsc2UgCisJeworCSAgbGF0ZXN0LT5tdGltZSA9IDA7CisJICBpZiAoIXdhcm5lZCkKKwkgICAgeworCSAgICAgIG15X3N5c2xvZyhMT0dfV0FSTklORywgXygibm8gc2VydmVycyBmb3VuZCBpbiAlcywgd2lsbCByZXRyeSIpLCBsYXRlc3QtPm5hbWUpOworCSAgICAgIHdhcm5lZCA9IDE7CisJICAgIH0KKwl9CisgICAgfQorfSAgICAgICAKKwordm9pZCBjbGVhcl9jYWNoZV9hbmRfcmVsb2FkKHRpbWVfdCBub3cpCit7CisgICh2b2lkKW5vdzsKKworICBpZiAoZGFlbW9uLT5wb3J0ICE9IDApCisgICAgY2FjaGVfcmVsb2FkKCk7CisgIAorI2lmZGVmIEhBVkVfREhDUAorICBpZiAoZGFlbW9uLT5kaGNwIHx8IGRhZW1vbi0+ZG9pbmdfZGhjcDYpCisgICAgeworICAgICAgaWYgKG9wdGlvbl9ib29sKE9QVF9FVEhFUlMpKQorCWRoY3BfcmVhZF9ldGhlcnMoKTsKKyAgICAgIHJlcmVhZF9kaGNwKCk7CisjaWZkZWYgSEFWRV9JTk9USUZZCisgICAgICBzZXRfZHluYW1pY19pbm90aWZ5KEFIX0RIQ1BfSFNUIHwgQUhfREhDUF9PUFQsIDAsIE5VTEwsIDApOworI2VuZGlmCisgICAgICBkaGNwX3VwZGF0ZV9jb25maWdzKGRhZW1vbi0+ZGhjcF9jb25mKTsKKyAgICAgIGxlYXNlX3VwZGF0ZV9mcm9tX2NvbmZpZ3MoKTsgCisgICAgICBsZWFzZV91cGRhdGVfZmlsZShub3cpOyAKKyAgICAgIGxlYXNlX3VwZGF0ZV9kbnMoMSk7CisgICAgfQorI2lmZGVmIEhBVkVfREhDUDYKKyAgZWxzZSBpZiAoZGFlbW9uLT5kb2luZ19yYSkKKyAgICAvKiBOb3QgZG9pbmcgREhDUCwgc28gbm8gbGVhc2Ugc3lzdGVtLCBtYW5hZ2UgCisgICAgICAgYWxhcm1zIGZvciByYSBvbmx5ICovCisgICAgc2VuZF9hbGFybShwZXJpb2RpY19yYShub3cpLCBub3cpOworI2VuZGlmCisjZW5kaWYKK30KKworc3RhdGljIGludCBzZXRfZG5zX2xpc3RlbmVycyh0aW1lX3Qgbm93KQoreworICBzdHJ1Y3Qgc2VydmVyZmQgKnNlcnZlcmZkcDsKKyAgc3RydWN0IGxpc3RlbmVyICpsaXN0ZW5lcjsKKyAgaW50IHdhaXQgPSAwLCBpOworICAKKyNpZmRlZiBIQVZFX1RGVFAKKyAgaW50ICB0ZnRwID0gMDsKKyAgc3RydWN0IHRmdHBfdHJhbnNmZXIgKnRyYW5zZmVyOworICBmb3IgKHRyYW5zZmVyID0gZGFlbW9uLT50ZnRwX3RyYW5zOyB0cmFuc2ZlcjsgdHJhbnNmZXIgPSB0cmFuc2Zlci0+bmV4dCkKKyAgICB7CisgICAgICB0ZnRwKys7CisgICAgICBwb2xsX2xpc3Rlbih0cmFuc2Zlci0+c29ja2ZkLCBQT0xMSU4pOworICAgIH0KKyNlbmRpZgorICAKKyAgLyogd2lsbCB3ZSBiZSBhYmxlIHRvIGdldCBtZW1vcnk/ICovCisgIGlmIChkYWVtb24tPnBvcnQgIT0gMCkKKyAgICBnZXRfbmV3X2ZyZWMobm93LCAmd2FpdCwgMCk7CisgIAorICBmb3IgKHNlcnZlcmZkcCA9IGRhZW1vbi0+c2Zkczsgc2VydmVyZmRwOyBzZXJ2ZXJmZHAgPSBzZXJ2ZXJmZHAtPm5leHQpCisgICAgcG9sbF9saXN0ZW4oc2VydmVyZmRwLT5mZCwgUE9MTElOKTsKKyAgICAKKyAgaWYgKGRhZW1vbi0+cG9ydCAhPSAwICYmICFkYWVtb24tPm9zcG9ydCkKKyAgICBmb3IgKGkgPSAwOyBpIDwgUkFORE9NX1NPQ0tTOyBpKyspCisgICAgICBpZiAoZGFlbW9uLT5yYW5kb21zb2Nrc1tpXS5yZWZjb3VudCAhPSAwKQorCXBvbGxfbGlzdGVuKGRhZW1vbi0+cmFuZG9tc29ja3NbaV0uZmQsIFBPTExJTik7CisJICAKKyAgZm9yIChsaXN0ZW5lciA9IGRhZW1vbi0+bGlzdGVuZXJzOyBsaXN0ZW5lcjsgbGlzdGVuZXIgPSBsaXN0ZW5lci0+bmV4dCkKKyAgICB7CisgICAgICAvKiBvbmx5IGxpc3RlbiBmb3IgcXVlcmllcyBpZiB3ZSBoYXZlIHJlc291cmNlcyAqLworICAgICAgaWYgKGxpc3RlbmVyLT5mZCAhPSAtMSAmJiB3YWl0ID09IDApCisJcG9sbF9saXN0ZW4obGlzdGVuZXItPmZkLCBQT0xMSU4pOworCQorICAgICAgLyogZGVhdGggb2YgYSBjaGlsZCBnb2VzIHRocm91Z2ggdGhlIHNlbGVjdCBsb29wLCBzbworCSB3ZSBkb24ndCBuZWVkIHRvIGV4cGxpY2l0bHkgYXJyYW5nZSB0byB3YWtlIHVwIGhlcmUgKi8KKyAgICAgIGlmICAobGlzdGVuZXItPnRjcGZkICE9IC0xKQorCWZvciAoaSA9IDA7IGkgPCBNQVhfUFJPQ1M7IGkrKykKKwkgIGlmIChkYWVtb24tPnRjcF9waWRzW2ldID09IDApCisJICAgIHsKKwkgICAgICBwb2xsX2xpc3RlbihsaXN0ZW5lci0+dGNwZmQsIFBPTExJTik7CisJICAgICAgYnJlYWs7CisJICAgIH0KKworI2lmZGVmIEhBVkVfVEZUUAorICAgICAgaWYgKHRmdHAgPD0gZGFlbW9uLT50ZnRwX21heCAmJiBsaXN0ZW5lci0+dGZ0cGZkICE9IC0xKQorCXBvbGxfbGlzdGVuKGxpc3RlbmVyLT50ZnRwZmQsIFBPTExJTik7CisjZW5kaWYKKworICAgIH0KKyAgCisgIHJldHVybiB3YWl0OworfQorCitzdGF0aWMgdm9pZCBjaGVja19kbnNfbGlzdGVuZXJzKHRpbWVfdCBub3cpCit7CisgIHN0cnVjdCBzZXJ2ZXJmZCAqc2VydmVyZmRwOworICBzdHJ1Y3QgbGlzdGVuZXIgKmxpc3RlbmVyOworICBpbnQgaTsKKworICBmb3IgKHNlcnZlcmZkcCA9IGRhZW1vbi0+c2Zkczsgc2VydmVyZmRwOyBzZXJ2ZXJmZHAgPSBzZXJ2ZXJmZHAtPm5leHQpCisgICAgaWYgKHBvbGxfY2hlY2soc2VydmVyZmRwLT5mZCwgUE9MTElOKSkKKyAgICAgIHJlcGx5X3F1ZXJ5KHNlcnZlcmZkcC0+ZmQsIHNlcnZlcmZkcC0+c291cmNlX2FkZHIuc2Euc2FfZmFtaWx5LCBub3cpOworICAKKyAgaWYgKGRhZW1vbi0+cG9ydCAhPSAwICYmICFkYWVtb24tPm9zcG9ydCkKKyAgICBmb3IgKGkgPSAwOyBpIDwgUkFORE9NX1NPQ0tTOyBpKyspCisgICAgICBpZiAoZGFlbW9uLT5yYW5kb21zb2Nrc1tpXS5yZWZjb3VudCAhPSAwICYmIAorCSAgcG9sbF9jaGVjayhkYWVtb24tPnJhbmRvbXNvY2tzW2ldLmZkLCBQT0xMSU4pKQorCXJlcGx5X3F1ZXJ5KGRhZW1vbi0+cmFuZG9tc29ja3NbaV0uZmQsIGRhZW1vbi0+cmFuZG9tc29ja3NbaV0uZmFtaWx5LCBub3cpOworICAKKyAgZm9yIChsaXN0ZW5lciA9IGRhZW1vbi0+bGlzdGVuZXJzOyBsaXN0ZW5lcjsgbGlzdGVuZXIgPSBsaXN0ZW5lci0+bmV4dCkKKyAgICB7CisgICAgICBpZiAobGlzdGVuZXItPmZkICE9IC0xICYmIHBvbGxfY2hlY2sobGlzdGVuZXItPmZkLCBQT0xMSU4pKQorCXJlY2VpdmVfcXVlcnkobGlzdGVuZXIsIG5vdyk7IAorICAgICAgCisjaWZkZWYgSEFWRV9URlRQICAgICAKKyAgICAgIGlmIChsaXN0ZW5lci0+dGZ0cGZkICE9IC0xICYmIHBvbGxfY2hlY2sobGlzdGVuZXItPnRmdHBmZCwgUE9MTElOKSkKKwl0ZnRwX3JlcXVlc3QobGlzdGVuZXIsIG5vdyk7CisjZW5kaWYKKworICAgICAgaWYgKGxpc3RlbmVyLT50Y3BmZCAhPSAtMSAmJiBwb2xsX2NoZWNrKGxpc3RlbmVyLT50Y3BmZCwgUE9MTElOKSkKKwl7CisJICBpbnQgY29uZmQsIGNsaWVudF9vayA9IDE7CisJICBzdHJ1Y3QgaXJlYyAqaWZhY2UgPSBOVUxMOworCSAgcGlkX3QgcDsKKwkgIHVuaW9uIG15c29ja2FkZHIgdGNwX2FkZHI7CisJICBzb2NrbGVuX3QgdGNwX2xlbiA9IHNpemVvZih1bmlvbiBteXNvY2thZGRyKTsKKworCSAgd2hpbGUgKChjb25mZCA9IGFjY2VwdChsaXN0ZW5lci0+dGNwZmQsIE5VTEwsIE5VTEwpKSA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUik7CisJICAKKwkgIGlmIChjb25mZCA9PSAtMSkKKwkgICAgY29udGludWU7CisJICAKKwkgIGlmIChnZXRzb2NrbmFtZShjb25mZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZ0Y3BfYWRkciwgJnRjcF9sZW4pID09IC0xKQorCSAgICB7CisJICAgICAgd2hpbGUgKHJldHJ5X3NlbmQoY2xvc2UoY29uZmQpKSk7CisJICAgICAgY29udGludWU7CisJICAgIH0KKwkgIAorCSAgLyogTWFrZSBzdXJlIHRoYXQgdGhlIGludGVyZmFjZSBsaXN0IGlzIHVwLXRvLWRhdGUuCisJICAgICAKKwkgICAgIFdlIGRvIHRoaXMgaGVyZSBhcyB3ZSBtYXkgbmVlZCB0aGUgcmVzdWx0cyBiZWxvdywgYW5kCisJICAgICB0aGUgRE5TIGNvZGUgbmVlZHMgdGhlbSBmb3IgLS1pbnRlcmZhY2UtbmFtZSBzdHVmZi4KKworCSAgICAgTXVsdGlwbGUgY2FsbHMgdG8gZW51bWVyYXRlX2ludGVyZmFjZXMoKSBwZXIgc2VsZWN0IGxvb3AgYXJlCisJICAgICBpbmhpYml0ZWQsIHNvIGNhbGxzIHRvIGl0IGluIHRoZSBjaGlsZCBwcm9jZXNzICh3aGljaCBkb2Vzbid0IHNlbGVjdCgpKQorCSAgICAgaGF2ZSBubyBlZmZlY3QuIFRoaXMgYXZvaWRzIHR3byBwcm9jZXNzZXMgcmVhZGluZyBmcm9tIHRoZSBzYW1lCisJICAgICBuZXRsaW5rIGZkIGFuZCBzY3Jld2luZyB0aGUgcG9vY2ggZW50aXJlbHkuCisJICAqLworIAorCSAgZW51bWVyYXRlX2ludGVyZmFjZXMoMCk7CisJICAKKwkgIGlmIChvcHRpb25fYm9vbChPUFRfTk9XSUxEKSkKKwkgICAgaWZhY2UgPSBsaXN0ZW5lci0+aWZhY2U7IC8qIE1heSBiZSBOVUxMICovCisJICBlbHNlIAorCSAgICB7CisJICAgICAgaW50IGlmX2luZGV4OworCSAgICAgIGNoYXIgaW50cl9uYW1lW0lGX05BTUVTSVpFXTsKKwkgICAgICAKKwkgICAgICAvKiBpZiB3ZSBjYW4gZmluZCB0aGUgYXJyaXZhbCBpbnRlcmZhY2UsIGNoZWNrIGl0J3Mgb25lIHRoYXQncyBhbGxvd2VkICovCisJICAgICAgaWYgKChpZl9pbmRleCA9IHRjcF9pbnRlcmZhY2UoY29uZmQsIHRjcF9hZGRyLnNhLnNhX2ZhbWlseSkpICE9IDAgJiYKKwkJICBpbmRleHRvbmFtZShsaXN0ZW5lci0+dGNwZmQsIGlmX2luZGV4LCBpbnRyX25hbWUpKQorCQl7CisJCSAgc3RydWN0IGFsbF9hZGRyIGFkZHI7CisJCSAgYWRkci5hZGRyLmFkZHI0ID0gdGNwX2FkZHIuaW4uc2luX2FkZHI7CisjaWZkZWYgSEFWRV9JUFY2CisJCSAgaWYgKHRjcF9hZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikKKwkJICAgIGFkZHIuYWRkci5hZGRyNiA9IHRjcF9hZGRyLmluNi5zaW42X2FkZHI7CisjZW5kaWYKKwkJICAKKwkJICBmb3IgKGlmYWNlID0gZGFlbW9uLT5pbnRlcmZhY2VzOyBpZmFjZTsgaWZhY2UgPSBpZmFjZS0+bmV4dCkKKwkJICAgIGlmIChpZmFjZS0+aW5kZXggPT0gaWZfaW5kZXgpCisJCSAgICAgIGJyZWFrOworCQkgIAorCQkgIGlmICghaWZhY2UgJiYgIWxvb3BiYWNrX2V4Y2VwdGlvbihsaXN0ZW5lci0+dGNwZmQsIHRjcF9hZGRyLnNhLnNhX2ZhbWlseSwgJmFkZHIsIGludHJfbmFtZSkpCisJCSAgICBjbGllbnRfb2sgPSAwOworCQl9CisJICAgICAgCisJICAgICAgaWYgKG9wdGlvbl9ib29sKE9QVF9DTEVWRVJCSU5EKSkKKwkJaWZhY2UgPSBsaXN0ZW5lci0+aWZhY2U7IC8qIE1heSBiZSBOVUxMICovCisJICAgICAgZWxzZQorCQl7CisJCSAgLyogQ2hlY2sgZm9yIGFsbG93ZWQgaW50ZXJmYWNlcyB3aGVuIGJpbmRpbmcgdGhlIHdpbGRjYXJkIGFkZHJlc3M6CisJCSAgICAgd2UgZG8gdGhpcyBieSBsb29raW5nIGZvciBhbiBpbnRlcmZhY2Ugd2l0aCB0aGUgc2FtZSBhZGRyZXNzIGFzIAorCQkgICAgIHRoZSBsb2NhbCBhZGRyZXNzIG9mIHRoZSBUQ1AgY29ubmVjdGlvbiwgdGhlbiBsb29raW5nIHRvIHNlZSBpZiB0aGF0J3MKKwkJICAgICBhbiBhbGxvd2VkIGludGVyZmFjZS4gQXMgYSBzaWRlIGVmZmVjdCwgd2UgZ2V0IHRoZSBuZXRtYXNrIG9mIHRoZQorCQkgICAgIGludGVyZmFjZSB0b28sIGZvciBsb2NhbGlzYXRpb24uICovCisJCSAgCisJCSAgZm9yIChpZmFjZSA9IGRhZW1vbi0+aW50ZXJmYWNlczsgaWZhY2U7IGlmYWNlID0gaWZhY2UtPm5leHQpCisJCSAgICBpZiAoc29ja2FkZHJfaXNlcXVhbCgmaWZhY2UtPmFkZHIsICZ0Y3BfYWRkcikpCisJCSAgICAgIGJyZWFrOworCQkgIAorCQkgIGlmICghaWZhY2UpCisJCSAgICBjbGllbnRfb2sgPSAwOworCQl9CisJICAgIH0KKwkgIAorCSAgaWYgKCFjbGllbnRfb2spCisJICAgIHsKKwkgICAgICBzaHV0ZG93bihjb25mZCwgU0hVVF9SRFdSKTsKKwkgICAgICB3aGlsZSAocmV0cnlfc2VuZChjbG9zZShjb25mZCkpKTsKKwkgICAgfQorI2lmbmRlZiBOT19GT1JLCisJICBlbHNlIGlmICghb3B0aW9uX2Jvb2woT1BUX0RFQlVHKSAmJiAocCA9IGZvcmsoKSkgIT0gMCkKKwkgICAgeworCSAgICAgIGlmIChwICE9IC0xKQorCQl7CisJCSAgaW50IGk7CisJCSAgZm9yIChpID0gMDsgaSA8IE1BWF9QUk9DUzsgaSsrKQorCQkgICAgaWYgKGRhZW1vbi0+dGNwX3BpZHNbaV0gPT0gMCkKKwkJICAgICAgeworCQkJZGFlbW9uLT50Y3BfcGlkc1tpXSA9IHA7CisJCQlicmVhazsKKwkJICAgICAgfQorCQl9CisJICAgICAgd2hpbGUgKHJldHJ5X3NlbmQoY2xvc2UoY29uZmQpKSk7CisKKwkgICAgICAvKiBUaGUgY2hpbGQgY2FuIHVzZSB1cCB0byBUQ1BfTUFYX1FVRVJJRVMgaWRzLCBzbyBza2lwIHRoYXQgbWFueS4gKi8KKwkgICAgICBkYWVtb24tPmxvZ19pZCArPSBUQ1BfTUFYX1FVRVJJRVM7CisJICAgIH0KKyNlbmRpZgorCSAgZWxzZQorCSAgICB7CisJICAgICAgdW5zaWduZWQgY2hhciAqYnVmZjsKKwkgICAgICBzdHJ1Y3Qgc2VydmVyICpzOyAKKwkgICAgICBpbnQgZmxhZ3M7CisJICAgICAgc3RydWN0IGluX2FkZHIgbmV0bWFzazsKKwkgICAgICBpbnQgYXV0aF9kbnM7CisKKwkgICAgICBpZiAoaWZhY2UpCisJCXsKKwkJICBuZXRtYXNrID0gaWZhY2UtPm5ldG1hc2s7CisJCSAgYXV0aF9kbnMgPSBpZmFjZS0+ZG5zX2F1dGg7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICBuZXRtYXNrLnNfYWRkciA9IDA7CisJCSAgYXV0aF9kbnMgPSAwOworCQl9CisKKyNpZm5kZWYgTk9fRk9SSworCSAgICAgIC8qIEFycmFuZ2UgZm9yIFNJR0FMUk0gYWZ0ZXIgQ0hJTERfTElGRVRJTUUgc2Vjb25kcyB0bworCQkgdGVybWluYXRlIHRoZSBwcm9jZXNzLiAqLworCSAgICAgIGlmICghb3B0aW9uX2Jvb2woT1BUX0RFQlVHKSkKKwkJYWxhcm0oQ0hJTERfTElGRVRJTUUpOworI2VuZGlmCisKKwkgICAgICAvKiBzdGFydCB3aXRoIG5vIHVwc3RyZWFtIGNvbm5lY3Rpb25zLiAqLworCSAgICAgIGZvciAocyA9IGRhZW1vbi0+c2VydmVyczsgczsgcyA9IHMtPm5leHQpCisJCSBzLT50Y3BmZCA9IC0xOyAKKwkgICAgICAKKwkgICAgICAvKiBUaGUgY29ubmVjdGVkIHNvY2tldCBpbmhlcml0cyBub24tYmxvY2tpbmcKKwkJIGF0dHJpYnV0ZSBmcm9tIHRoZSBsaXN0ZW5pbmcgc29ja2V0LiAKKwkJIFJlc2V0IHRoYXQgaGVyZS4gKi8KKwkgICAgICBpZiAoKGZsYWdzID0gZmNudGwoY29uZmQsIEZfR0VURkwsIDApKSAhPSAtMSkKKwkJZmNudGwoY29uZmQsIEZfU0VURkwsIGZsYWdzICYgfk9fTk9OQkxPQ0spOworCSAgICAgIAorCSAgICAgIGJ1ZmYgPSB0Y3BfcmVxdWVzdChjb25mZCwgbm93LCAmdGNwX2FkZHIsIG5ldG1hc2ssIGF1dGhfZG5zKTsKKwkgICAgICAgCisJICAgICAgc2h1dGRvd24oY29uZmQsIFNIVVRfUkRXUik7CisJICAgICAgd2hpbGUgKHJldHJ5X3NlbmQoY2xvc2UoY29uZmQpKSk7CisJICAgICAgCisJICAgICAgaWYgKGJ1ZmYpCisJCWZyZWUoYnVmZik7CisJICAgICAgCisJICAgICAgZm9yIChzID0gZGFlbW9uLT5zZXJ2ZXJzOyBzOyBzID0gcy0+bmV4dCkKKwkJaWYgKHMtPnRjcGZkICE9IC0xKQorCQkgIHsKKwkJICAgIHNodXRkb3duKHMtPnRjcGZkLCBTSFVUX1JEV1IpOworCQkgICAgd2hpbGUgKHJldHJ5X3NlbmQoY2xvc2Uocy0+dGNwZmQpKSk7CisJCSAgfQorI2lmbmRlZiBOT19GT1JLCQkgICAKKwkgICAgICBpZiAoIW9wdGlvbl9ib29sKE9QVF9ERUJVRykpCisJCXsKKwkJICBmbHVzaF9sb2coKTsKKwkJICBfZXhpdCgwKTsKKwkJfQorI2VuZGlmCisJICAgIH0KKwl9CisgICAgfQorfQorCisjaWZkZWYgSEFWRV9ESENQCitpbnQgbWFrZV9pY21wX3NvY2sodm9pZCkKK3sKKyAgaW50IGZkOworICBpbnQgemVyb29wdCA9IDA7CisKKyAgaWYgKChmZCA9IHNvY2tldCAoQUZfSU5FVCwgU09DS19SQVcsIElQUFJPVE9fSUNNUCkpICE9IC0xKQorICAgIHsKKyAgICAgIGlmICghZml4X2ZkKGZkKSB8fAorCSAgc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fRE9OVFJPVVRFLCAmemVyb29wdCwgc2l6ZW9mKHplcm9vcHQpKSA9PSAtMSkKKwl7CisJICBjbG9zZShmZCk7CisJICBmZCA9IC0xOworCX0KKyAgICB9CisKKyAgcmV0dXJuIGZkOworfQorCitpbnQgaWNtcF9waW5nKHN0cnVjdCBpbl9hZGRyIGFkZHIpCit7CisgIC8qIFRyeSBhbmQgZ2V0IGFuIElDTVAgZWNobyBmcm9tIGEgbWFjaGluZS4gKi8KKworICBpbnQgZmQ7CisgIHN0cnVjdCBzb2NrYWRkcl9pbiBzYWRkcjsKKyAgc3RydWN0IHsgCisgICAgc3RydWN0IGlwIGlwOworICAgIHN0cnVjdCBpY21wIGljbXA7CisgIH0gcGFja2V0OworICB1bnNpZ25lZCBzaG9ydCBpZCA9IHJhbmQxNigpOworICB1bnNpZ25lZCBpbnQgaSwgajsKKyAgaW50IGdvdHJlcGx5ID0gMDsKKworI2lmIGRlZmluZWQoSEFWRV9MSU5VWF9ORVRXT1JLKSB8fCBkZWZpbmVkIChIQVZFX1NPTEFSSVNfTkVUV09SSykKKyAgaWYgKChmZCA9IG1ha2VfaWNtcF9zb2NrKCkpID09IC0xKQorICAgIHJldHVybiAwOworI2Vsc2UKKyAgaW50IG9wdCA9IDIwMDA7CisgIGZkID0gZGFlbW9uLT5kaGNwX2ljbXBfZmQ7CisgIHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX1JDVkJVRiwgJm9wdCwgc2l6ZW9mKG9wdCkpOworI2VuZGlmCisKKyAgc2FkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisgIHNhZGRyLnNpbl9wb3J0ID0gMDsKKyAgc2FkZHIuc2luX2FkZHIgPSBhZGRyOworI2lmZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisgIHNhZGRyLnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyNlbmRpZgorICAKKyAgbWVtc2V0KCZwYWNrZXQuaWNtcCwgMCwgc2l6ZW9mKHBhY2tldC5pY21wKSk7CisgIHBhY2tldC5pY21wLmljbXBfdHlwZSA9IElDTVBfRUNITzsKKyAgcGFja2V0LmljbXAuaWNtcF9pZCA9IGlkOworICBmb3IgKGogPSAwLCBpID0gMDsgaSA8IHNpemVvZihzdHJ1Y3QgaWNtcCkgLyAyOyBpKyspCisgICAgaiArPSAoKHUxNiAqKSZwYWNrZXQuaWNtcClbaV07CisgIHdoaWxlIChqPj4xNikKKyAgICBqID0gKGogJiAweGZmZmYpICsgKGogPj4gMTYpOyAgCisgIHBhY2tldC5pY21wLmljbXBfY2tzdW0gPSAoaiA9PSAweGZmZmYpID8gaiA6IH5qOworICAKKyAgd2hpbGUgKHJldHJ5X3NlbmQoc2VuZHRvKGZkLCAoY2hhciAqKSZwYWNrZXQuaWNtcCwgc2l6ZW9mKHN0cnVjdCBpY21wKSwgMCwgCisJCQkgICAoc3RydWN0IHNvY2thZGRyICopJnNhZGRyLCBzaXplb2Yoc2FkZHIpKSkpOworICAKKyAgZ290cmVwbHkgPSBkZWxheV9kaGNwKGRuc21hc3FfdGltZSgpLCBQSU5HX1dBSVQsIGZkLCBhZGRyLnNfYWRkciwgaWQpOworCisjaWYgZGVmaW5lZChIQVZFX0xJTlVYX05FVFdPUkspIHx8IGRlZmluZWQoSEFWRV9TT0xBUklTX05FVFdPUkspCisgIHdoaWxlIChyZXRyeV9zZW5kKGNsb3NlKGZkKSkpOworI2Vsc2UKKyAgb3B0ID0gMTsKKyAgc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fUkNWQlVGLCAmb3B0LCBzaXplb2Yob3B0KSk7CisjZW5kaWYKKworICByZXR1cm4gZ290cmVwbHk7Cit9CisKK2ludCBkZWxheV9kaGNwKHRpbWVfdCBzdGFydCwgaW50IHNlYywgaW50IGZkLCB1aW50MzJfdCBhZGRyLCB1bnNpZ25lZCBzaG9ydCBpZCkKK3sKKyAgLyogRGVsYXkgcHJvY2Vzc2luZyBESENQIHBhY2tldHMgZm9yICJzZWMiIHNlY29uZHMgY291bnRpbmcgZnJvbSAic3RhcnQiLgorICAgICBJZiAiZmQiIGlzIG5vdCAtMSBpdCB3aWxsIHN0b3Agd2FpdGluZyBpZiBhbiBJQ01QIGVjaG8gcmVwbHkgaXMgcmVjZWl2ZWQKKyAgICAgZnJvbSAiYWRkciIgd2l0aCBJQ01QIElEICJpZCIgYW5kIHJldHVybiAxICovCisKKyAgLyogTm90ZSB0aGF0IHdoaWxzdCB3YWl0aW5nLCB3ZSBjaGVjayBmb3IKKyAgICAgKGFuZCBzZXJ2aWNlKSBldmVudHMgb24gdGhlIEROUyBhbmQgVEZUUCAgc29ja2V0cywgKHNvIGRvaW5nIHRoYXQKKyAgICAgYmV0dGVyIG5vdCB1c2UgYW55IHJlc291cmNlcyBvdXIgY2FsbGVyIGhhcyBpbiB1c2UuLi4pCisgICAgIGJ1dCB3ZSByZW1haW4gZGVhZiB0byBzaWduYWxzIG9yIGZ1cnRoZXIgREhDUCBwYWNrZXRzLiAqLworCisgIC8qIFRoZXJlIGNhbiBiZSBhIHByb2JsZW0gdXNpbmcgZG5zbWFzcV90aW1lKCkgdG8gZW5kIHRoZSBsb29wLCBzaW5jZQorICAgICBpdCdzIG5vdCBtb25vdG9uaWMsIGFuZCBjYW4gZ28gYmFja3dhcmRzIGlmIHRoZSBzeXN0ZW0gY2xvY2sgaXMKKyAgICAgdHdlYWtlZCwgbGVhZGluZyB0byB0aGUgY29kZSBnZXR0aW5nIHN0dWNrIGluIHRoaXMgbG9vcCBhbmQKKyAgICAgaWdub3JpbmcgREhDUCByZXF1ZXN0cy4gVG8gZml4IHRoaXMsIHdlIGNoZWNrIHRvIHNlZSBpZiBzZWxlY3QgcmV0dXJuZWQKKyAgICAgYXMgYSByZXN1bHQgb2YgYSB0aW1lb3V0IHJhdGhlciB0aGFuIGEgc29ja2V0IGJlY29taW5nIGF2YWlsYWJsZS4gV2UKKyAgICAgb25seSBhbGxvdyB0aGlzIHRvIGhhcHBlbiBhcyBtYW55IHRpbWVzIGFzIGl0IHRha2VzIHRvIGdldCB0byB0aGUgd2FpdCB0aW1lCisgICAgIGluIHF1YXJ0ZXItc2Vjb25kIGNodW5rcy4gVGhpcyBwcm92aWRlcyBhIGZhbGxiYWNrIHdheSB0byBlbmQgbG9vcC4gKi8KKworICBpbnQgcmMsIHRpbWVvdXRfY291bnQ7CisgIHRpbWVfdCBub3c7CisKKyAgZm9yIChub3cgPSBkbnNtYXNxX3RpbWUoKSwgdGltZW91dF9jb3VudCA9IDA7CisgICAgICAgKGRpZmZ0aW1lKG5vdywgc3RhcnQpIDw9IChmbG9hdClzZWMpICYmICh0aW1lb3V0X2NvdW50IDwgc2VjICogNCk7KQorICAgIHsKKyAgICAgIHBvbGxfcmVzZXQoKTsKKyAgICAgIGlmIChmZCAhPSAtMSkKKyAgICAgICAgcG9sbF9saXN0ZW4oZmQsIFBPTExJTik7CisgICAgICBzZXRfZG5zX2xpc3RlbmVycyhub3cpOworICAgICAgc2V0X2xvZ193cml0ZXIoKTsKKyAgICAgIAorI2lmZGVmIEhBVkVfREhDUDYKKyAgICAgIGlmIChkYWVtb24tPmRvaW5nX3JhKQorCXBvbGxfbGlzdGVuKGRhZW1vbi0+aWNtcDZmZCwgUE9MTElOKTsgCisjZW5kaWYKKyAgICAgIAorICAgICAgcmMgPSBkb19wb2xsKDI1MCk7CisgICAgICAKKyAgICAgIGlmIChyYyA8IDApCisJY29udGludWU7CisgICAgICBlbHNlIGlmIChyYyA9PSAwKQorCXRpbWVvdXRfY291bnQrKzsKKworICAgICAgbm93ID0gZG5zbWFzcV90aW1lKCk7CisgICAgICAKKyAgICAgIGNoZWNrX2xvZ193cml0ZXIoMCk7CisgICAgICBjaGVja19kbnNfbGlzdGVuZXJzKG5vdyk7CisgICAgICAKKyNpZmRlZiBIQVZFX0RIQ1A2CisgICAgICBpZiAoZGFlbW9uLT5kb2luZ19yYSAmJiBwb2xsX2NoZWNrKGRhZW1vbi0+aWNtcDZmZCwgUE9MTElOKSkKKwlpY21wNl9wYWNrZXQobm93KTsKKyNlbmRpZgorICAgICAgCisjaWZkZWYgSEFWRV9URlRQCisgICAgICBjaGVja190ZnRwX2xpc3RlbmVycyhub3cpOworI2VuZGlmCisKKyAgICAgIGlmIChmZCAhPSAtMSkKKyAgICAgICAgeworICAgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBzdHJ1Y3QgaXAgaXA7CisgICAgICAgICAgICBzdHJ1Y3QgaWNtcCBpY21wOworICAgICAgICAgIH0gcGFja2V0OworICAgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBmYWRkcjsKKyAgICAgICAgICBzb2NrbGVuX3QgbGVuID0gc2l6ZW9mKGZhZGRyKTsKKwkgIAorICAgICAgICAgIGlmIChwb2xsX2NoZWNrKGZkLCBQT0xMSU4pICYmCisJICAgICAgcmVjdmZyb20oZmQsICZwYWNrZXQsIHNpemVvZihwYWNrZXQpLCAwLCAoc3RydWN0IHNvY2thZGRyICopJmZhZGRyLCAmbGVuKSA9PSBzaXplb2YocGFja2V0KSAmJgorCSAgICAgIGFkZHIgPT0gZmFkZHIuc2luX2FkZHIuc19hZGRyICYmCisJICAgICAgcGFja2V0LmljbXAuaWNtcF90eXBlID09IElDTVBfRUNIT1JFUExZICYmCisJICAgICAgcGFja2V0LmljbXAuaWNtcF9zZXEgPT0gMCAmJgorCSAgICAgIHBhY2tldC5pY21wLmljbXBfaWQgPT0gaWQpCisJICAgIHJldHVybiAxOworCX0KKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKworIApkaWZmIC0tZ2l0IGEvc3JjL2Ruc21hc3EuaCBiL3NyYy9kbnNtYXNxLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGQxNjU2MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9kbnNtYXNxLmgKQEAgLTAsMCArMSwxNTY2IEBACisvKiBkbnNtYXNxIGlzIENvcHlyaWdodCAoYykgMjAwMC0yMDE3IFNpbW9uIEtlbGxleQorIAorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgZGF0ZWQgSnVuZSwgMTk5MSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgdmVyc2lvbiAzIGRhdGVkIDI5IEp1bmUsIDIwMDcuCisgCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisjZGVmaW5lIENPUFlSSUdIVCAiQ29weXJpZ2h0IChjKSAyMDAwLTIwMTcgU2ltb24gS2VsbGV5IgorCisvKiBXZSBkbyBkZWZpbmVzIHRoYXQgaW5mbHVlbmNlIGJlaGF2aW9yIG9mIHN0ZGlvLmgsIHNvIGNvbXBsYWluCisgICBpZiBpbmNsdWRlZCB0b28gZWFybHkuICovCisjaWZkZWYgX1NURElPX0gKKyMgIGVycm9yICJIZWFkZXIgZmlsZSBzdGRpby5oIGluY2x1ZGVkIHRvbyBlYXJseSEiCisjZW5kaWYgCisKKyNpZm5kZWYgTk9fTEFSR0VGSUxFCisvKiBFbnN1cmUgd2UgY2FuIHVzZSBmaWxlcyA+MkdCIChsb2cgZmlsZXMgbWF5IGdyb3cgdGhpcyBiaWcpICovCisjICBkZWZpbmUgX0xBUkdFRklMRV9TT1VSQ0UgMQorIyAgZGVmaW5lIF9GSUxFX09GRlNFVF9CSVRTIDY0CisjZW5kaWYKKworLyogR2V0IGxpbnV4IEMgbGlicmFyeSB2ZXJzaW9ucyBhbmQgZGVmaW5lIF9HTlVfU09VUkNFIGZvciBrRnJlZUJTRC4gKi8KKyNpZiBkZWZpbmVkKF9fbGludXhfXykgfHwgZGVmaW5lZChfX0dMSUJDX18pCisjICBpZm5kZWYgX19BTkRST0lEX18KKyMgICAgICBkZWZpbmUgX0dOVV9TT1VSQ0UKKyMgIGVuZGlmCisjICBpbmNsdWRlIDxmZWF0dXJlcy5oPiAKKyNlbmRpZgorCisvKiBOZWVkIHRoZXNlIGRlZmluZWQgZWFybHkgKi8KKyNpZiBkZWZpbmVkKF9fc3VuKSB8fCBkZWZpbmVkKF9fc3VuX18pCisjICBkZWZpbmUgX1hQRzRfMgorIyAgZGVmaW5lIF9fRVhURU5TSU9OU19fCisjZW5kaWYKKworLyogZ2V0IHRoZXNlIGJlZm9yZSBjb25maWcuaCAgZm9yIElQdjYgc3R1ZmYuLi4gKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4gCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorCisjaWZkZWYgX19BUFBMRV9fCisvKiBEZWZpbmUgYmVmb3JlIG5ldGluZXQvaW4uaCB0byBzZWxlY3QgQVBJLiBPU1ggTGlvbiBvbndhcmRzLiAqLworIyAgZGVmaW5lIF9fQVBQTEVfVVNFX1JGQ18zNTQyCisjZW5kaWYKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisKKy8qIEFsc28gbmVlZGVkIGJlZm9yZSBjb25maWcuaC4gKi8KKyNpbmNsdWRlIDxnZXRvcHQuaD4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImlwNmFkZHIuaCIKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHU4OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1MTY7Cit0eXBlZGVmIHVuc2lnbmVkIGludCB1MzI7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1NjQ7CisKKyNkZWZpbmUgY291bnRvZih4KSAgICAgIChsb25nKShzaXplb2YoeCkgLyBzaXplb2YoeFswXSkpCisjZGVmaW5lIE1JTihhLGIpICAgICAgICAoKGEpIDwgKGIpID8gKGEpIDogKGIpKQorCisjaW5jbHVkZSAiZG5zLXByb3RvY29sLmgiCisjaW5jbHVkZSAiZGhjcC1wcm90b2NvbC5oIgorI2lmZGVmIEhBVkVfREhDUDYKKyNpbmNsdWRlICJkaGNwNi1wcm90b2NvbC5oIgorI2luY2x1ZGUgInJhZHYtcHJvdG9jb2wuaCIKKyNlbmRpZgorCisjZGVmaW5lIGdldHRleHRfbm9vcChTKSAoUykKKyNpZm5kZWYgTE9DQUxFRElSCisjICBkZWZpbmUgXyhTKSAoUykKKyNlbHNlCisjICBpbmNsdWRlIDxsaWJpbnRsLmg+CisjICBpbmNsdWRlIDxsb2NhbGUuaD4gICAKKyMgIGRlZmluZSBfKFMpIGdldHRleHQoUykKKyNlbmRpZgorCisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpZiBkZWZpbmVkKEhBVkVfU09MQVJJU19ORVRXT1JLKQorIyAgaW5jbHVkZSA8c3lzL3NvY2tpby5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3BvbGwuaD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3VuLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8bmV0L2lmLmg+CisjaWYgZGVmaW5lZChIQVZFX1NPTEFSSVNfTkVUV09SSykgJiYgIWRlZmluZWQoaWZyX210dSkKKy8qIFNvbWUgc29sYXJpcyBuZXQvaWYuL2ggb21pdCB0aGlzLiAqLworIyAgZGVmaW5lIGlmcl9tdHUgIGlmcl9pZnJ1LmlmcnVfbWV0cmljCisjZW5kaWYKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxwd2QuaD4KKyNpbmNsdWRlIDxncnAuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpZiBkZWZpbmVkKF9fT3BlbkJTRF9fKSB8fCBkZWZpbmVkKF9fTmV0QlNEX18pIHx8IGRlZmluZWQoX19zdW5fXykgfHwgZGVmaW5lZCAoX19zdW4pIHx8IGRlZmluZWQgKF9fQU5EUk9JRF9fKQorIyAgaW5jbHVkZSA8bmV0aW5ldC9pZl9ldGhlci5oPgorI2Vsc2UKKyMgIGluY2x1ZGUgPG5ldC9ldGhlcm5ldC5oPgorI2VuZGlmCisjaW5jbHVkZSA8bmV0L2lmX2FycC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW5fc3lzdG0uaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2lwLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pcF9pY21wLmg+CisjaW5jbHVkZSA8c3lzL3Vpby5oPgorI2luY2x1ZGUgPHN5c2xvZy5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2lmbmRlZiBIQVZFX0xJTlVYX05FVFdPUksKKyMgIGluY2x1ZGUgPG5ldC9pZl9kbC5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEhBVkVfTElOVVhfTkVUV09SSykKKyNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CisvKiBUaGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYSB1bml2ZXJzYWxseS1hdmFpbGFibGUgCisgICB1c2Vyc3BhY2UgaGVhZGVyIGZvciB0aGVzZS4gKi8KK2V4dGVybiBpbnQgY2Fwc2V0KGNhcF91c2VyX2hlYWRlcl90IGhlYWRlciwgY2FwX3VzZXJfZGF0YV90IGRhdGEpOworZXh0ZXJuIGludCBjYXBnZXQoY2FwX3VzZXJfaGVhZGVyX3QgaGVhZGVyLCBjYXBfdXNlcl9kYXRhX3QgZGF0YSk7CisjZGVmaW5lIExJTlVYX0NBUEFCSUxJVFlfVkVSU0lPTl8xICAweDE5OTgwMzMwCisjZGVmaW5lIExJTlVYX0NBUEFCSUxJVFlfVkVSU0lPTl8yICAweDIwMDcxMDI2CisjZGVmaW5lIExJTlVYX0NBUEFCSUxJVFlfVkVSU0lPTl8zICAweDIwMDgwNTIyCisKKyNpbmNsdWRlIDxzeXMvcHJjdGwuaD4KKyNlbGlmIGRlZmluZWQoSEFWRV9TT0xBUklTX05FVFdPUkspCisjaW5jbHVkZSA8cHJpdi5oPgorI2VuZGlmCisKKy8qIGRhZW1vbiBpcyBmdW5jdGlvbiBpbiB0aGUgQyBsaWJyYXJ5Li4uLiAqLworI2RlZmluZSBkYWVtb24gZG5zbWFzcV9kYWVtb24KKworLyogQXN5bmMgZXZlbnQgcXVldWUgKi8KK3N0cnVjdCBldmVudF9kZXNjIHsKKyAgaW50IGV2ZW50LCBkYXRhLCBtc2dfc3o7Cit9OworCisjZGVmaW5lIEVWRU5UX1JFTE9BRCAgICAgMQorI2RlZmluZSBFVkVOVF9EVU1QICAgICAgIDIKKyNkZWZpbmUgRVZFTlRfQUxBUk0gICAgICAzCisjZGVmaW5lIEVWRU5UX1RFUk0gICAgICAgNAorI2RlZmluZSBFVkVOVF9DSElMRCAgICAgIDUKKyNkZWZpbmUgRVZFTlRfUkVPUEVOICAgICA2CisjZGVmaW5lIEVWRU5UX0VYSVRFRCAgICAgNworI2RlZmluZSBFVkVOVF9LSUxMRUQgICAgIDgKKyNkZWZpbmUgRVZFTlRfRVhFQ19FUlIgICA5CisjZGVmaW5lIEVWRU5UX1BJUEVfRVJSICAgMTAKKyNkZWZpbmUgRVZFTlRfVVNFUl9FUlIgICAxMQorI2RlZmluZSBFVkVOVF9DQVBfRVJSICAgIDEyCisjZGVmaW5lIEVWRU5UX1BJREZJTEUgICAgMTMKKyNkZWZpbmUgRVZFTlRfSFVTRVJfRVJSICAxNAorI2RlZmluZSBFVkVOVF9HUk9VUF9FUlIgIDE1CisjZGVmaW5lIEVWRU5UX0RJRSAgICAgICAgMTYKKyNkZWZpbmUgRVZFTlRfTE9HX0VSUiAgICAxNworI2RlZmluZSBFVkVOVF9GT1JLX0VSUiAgIDE4CisjZGVmaW5lIEVWRU5UX0xVQV9FUlIgICAgMTkKKyNkZWZpbmUgRVZFTlRfVEZUUF9FUlIgICAyMAorI2RlZmluZSBFVkVOVF9JTklUICAgICAgIDIxCisjZGVmaW5lIEVWRU5UX05FV0FERFIgICAgMjIKKyNkZWZpbmUgRVZFTlRfTkVXUk9VVEUgICAyMworI2RlZmluZSBFVkVOVF9USU1FX0VSUiAgIDI0CisjZGVmaW5lIEVWRU5UX1NDUklQVF9MT0cgMjUKKworLyogRXhpdCBjb2Rlcy4gKi8KKyNkZWZpbmUgRUNfR09PRCAgICAgICAgMAorI2RlZmluZSBFQ19CQURDT05GICAgICAxCisjZGVmaW5lIEVDX0JBRE5FVCAgICAgIDIKKyNkZWZpbmUgRUNfRklMRSAgICAgICAgMworI2RlZmluZSBFQ19OT01FTSAgICAgICA0CisjZGVmaW5lIEVDX01JU0MgICAgICAgIDUKKyNkZWZpbmUgRUNfSU5JVF9PRkZTRVQgMTAKKworLyogVHJ1c3QgdGhlIGNvbXBpbGVyIGRlYWQtY29kZSBlbGltaW5hdG9yLi4uLiAqLworI2RlZmluZSBvcHRpb25fYm9vbCh4KSAoKCh4KSA8IDMyKSA/IGRhZW1vbi0+b3B0aW9ucyAmICgxdSA8PCAoeCkpIDogZGFlbW9uLT5vcHRpb25zMiAmICgxdSA8PCAoKHgpIC0gMzIpKSkKKworI2RlZmluZSBPUFRfQk9HVVNQUklWICAgICAgMAorI2RlZmluZSBPUFRfRklMVEVSICAgICAgICAgMQorI2RlZmluZSBPUFRfTE9HICAgICAgICAgICAgMgorI2RlZmluZSBPUFRfU0VMRk1YICAgICAgICAgMworI2RlZmluZSBPUFRfTk9fSE9TVFMgICAgICAgNAorI2RlZmluZSBPUFRfTk9fUE9MTCAgICAgICAgNQorI2RlZmluZSBPUFRfREVCVUcgICAgICAgICAgNgorI2RlZmluZSBPUFRfT1JERVIgICAgICAgICAgNworI2RlZmluZSBPUFRfTk9fUkVTT0xWICAgICAgOAorI2RlZmluZSBPUFRfRVhQQU5EICAgICAgICAgOQorI2RlZmluZSBPUFRfTE9DQUxNWCAgICAgICAgMTAKKyNkZWZpbmUgT1BUX05PX05FRyAgICAgICAgIDExCisjZGVmaW5lIE9QVF9OT0RPVFNfTE9DQUwgICAxMgorI2RlZmluZSBPUFRfTk9XSUxEICAgICAgICAgMTMKKyNkZWZpbmUgT1BUX0VUSEVSUyAgICAgICAgIDE0CisjZGVmaW5lIE9QVF9SRVNPTFZfRE9NQUlOICAxNQorI2RlZmluZSBPUFRfTk9fRk9SSyAgICAgICAgMTYKKyNkZWZpbmUgT1BUX0FVVEhPUklUQVRJVkUgIDE3CisjZGVmaW5lIE9QVF9MT0NBTElTRSAgICAgICAxOAorI2RlZmluZSBPUFRfREJVUyAgICAgICAgICAgMTkKKyNkZWZpbmUgT1BUX0RIQ1BfRlFETiAgICAgIDIwCisjZGVmaW5lIE9QVF9OT19QSU5HICAgICAgICAyMQorI2RlZmluZSBPUFRfTEVBU0VfUk8gICAgICAgMjIKKyNkZWZpbmUgT1BUX0FMTF9TRVJWRVJTICAgIDIzCisjZGVmaW5lIE9QVF9SRUxPQUQgICAgICAgICAyNAorI2RlZmluZSBPUFRfTE9DQUxfUkVCSU5EICAgMjUgIAorI2RlZmluZSBPUFRfVEZUUF9TRUNVUkUgICAgMjYKKyNkZWZpbmUgT1BUX1RGVFBfTk9CTE9DSyAgIDI3CisjZGVmaW5lIE9QVF9MT0dfT1BUUyAgICAgICAyOAorI2RlZmluZSBPUFRfVEZUUF9BUFJFRl9JUCAgMjkKKyNkZWZpbmUgT1BUX05PX09WRVJSSURFICAgIDMwCisjZGVmaW5lIE9QVF9OT19SRUJJTkQgICAgICAzMQorI2RlZmluZSBPUFRfQUREX01BQyAgICAgICAgMzIKKyNkZWZpbmUgT1BUX0ROU1NFQ19QUk9YWSAgIDMzCisjZGVmaW5lIE9QVF9DT05TRUNfQUREUiAgICAzNAorI2RlZmluZSBPUFRfQ09OTlRSQUNLICAgICAgMzUKKyNkZWZpbmUgT1BUX0ZRRE5fVVBEQVRFICAgIDM2CisjZGVmaW5lIE9QVF9SQSAgICAgICAgICAgICAzNworI2RlZmluZSBPUFRfVEZUUF9MQyAgICAgICAgMzgKKyNkZWZpbmUgT1BUX0NMRVZFUkJJTkQgICAgIDM5CisjZGVmaW5lIE9QVF9URlRQICAgICAgICAgICA0MAorI2RlZmluZSBPUFRfQ0xJRU5UX1NVQk5FVCAgNDEKKyNkZWZpbmUgT1BUX1FVSUVUX0RIQ1AgICAgIDQyCisjZGVmaW5lIE9QVF9RVUlFVF9ESENQNiAgICA0MworI2RlZmluZSBPUFRfUVVJRVRfUkEJICAgNDQKKyNkZWZpbmUgT1BUX0ROU1NFQ19WQUxJRCAgIDQ1CisjZGVmaW5lIE9QVF9ETlNTRUNfVElNRSAgICA0NgorI2RlZmluZSBPUFRfRE5TU0VDX0RFQlVHICAgNDcKKyNkZWZpbmUgT1BUX0ROU1NFQ19OT19TSUdOIDQ4IAorI2RlZmluZSBPUFRfTE9DQUxfU0VSVklDRSAgNDkKKyNkZWZpbmUgT1BUX0xPT1BfREVURUNUICAgIDUwCisjZGVmaW5lIE9QVF9FWFRSQUxPRyAgICAgICA1MQorI2RlZmluZSBPUFRfVEZUUF9OT19GQUlMICAgNTIKKyNkZWZpbmUgT1BUX1NDUklQVF9BUlAgICAgIDUzCisjZGVmaW5lIE9QVF9NQUNfQjY0ICAgICAgICA1NAorI2RlZmluZSBPUFRfTUFDX0hFWCAgICAgICAgNTUKKyNkZWZpbmUgT1BUX1RGVFBfQVBSRUZfTUFDIDU2CisjZGVmaW5lIE9QVF9MQVNUICAgICAgICAgICA1NworCisvKiBleHRyYSBmbGFncyBmb3IgbXlfc3lzbG9nLCB3ZSB1c2UgYSBjb3VwbGUgb2YgZmFjaWxpdGllcyBzaW5jZSB0aGV5IGFyZSBrbm93biAKKyAgIG5vdCB0byBvY2N1cHkgdGhlIHNhbWUgYml0cyBhcyBwcmlvcml0aWVzLCBubyBtYXR0ZXIgaG93IHN5c2xvZy5oIGlzIHNldCB1cC4gKi8KKyNkZWZpbmUgTVNfVEZUUCAgIExPR19VU0VSCisjZGVmaW5lIE1TX0RIQ1AgICBMT0dfREFFTU9OCisjZGVmaW5lIE1TX1NDUklQVCBMT0dfTUFJTAorCitzdHJ1Y3QgYWxsX2FkZHIgeworICB1bmlvbiB7CisgICAgc3RydWN0IGluX2FkZHIgYWRkcjQ7CisjaWZkZWYgSEFWRV9JUFY2CisgICAgc3RydWN0IGluNl9hZGRyIGFkZHI2OworI2VuZGlmCisgICAgLyogZm9yIGxvZ19xdWVyeSAqLworICAgIHN0cnVjdCB7CisgICAgICB1bnNpZ25lZCBzaG9ydCBrZXl0YWcsIGFsZ28sIGRpZ2VzdDsKKyAgICB9IGxvZzsgCisgICAgLyogZm9yIGNhY2hlX2luc2VydCBvZiBETlNLRVksIERTICovCisgICAgc3RydWN0IHsKKyAgICAgIHVuc2lnbmVkIHNob3J0IGNsYXNzLCB0eXBlOworICAgIH0gZG5zc2VjOyAgICAgIAorICB9IGFkZHI7Cit9OworCitzdHJ1Y3QgYm9ndXNfYWRkciB7CisgIHN0cnVjdCBpbl9hZGRyIGFkZHI7CisgIHN0cnVjdCBib2d1c19hZGRyICpuZXh0OworfTsKKworLyogZG5zIGRvY3RvciBwYXJhbSAqLworc3RydWN0IGRvY3RvciB7CisgIHN0cnVjdCBpbl9hZGRyIGluLCBlbmQsIG91dCwgbWFzazsKKyAgc3RydWN0IGRvY3RvciAqbmV4dDsKK307CisKK3N0cnVjdCBteF9zcnZfcmVjb3JkIHsKKyAgY2hhciAqbmFtZSwgKnRhcmdldDsKKyAgaW50IGlzc3J2LCBzcnZwb3J0LCBwcmlvcml0eSwgd2VpZ2h0OworICB1bnNpZ25lZCBpbnQgb2Zmc2V0OworICBzdHJ1Y3QgbXhfc3J2X3JlY29yZCAqbmV4dDsKK307CisKK3N0cnVjdCBuYXB0ciB7CisgIGNoYXIgKm5hbWUsICpyZXBsYWNlLCAqcmVnZXhwLCAqc2VydmljZXMsICpmbGFnczsKKyAgdW5zaWduZWQgaW50IG9yZGVyLCBwcmVmOworICBzdHJ1Y3QgbmFwdHIgKm5leHQ7Cit9OworCisjaWZuZGVmIE5PX0lECisjZGVmaW5lIFRYVF9TVEFUX0NBQ0hFU0laRSAgICAgMQorI2RlZmluZSBUWFRfU1RBVF9JTlNFUlRTICAgICAgIDIKKyNkZWZpbmUgVFhUX1NUQVRfRVZJQ1RJT05TICAgICAzCisjZGVmaW5lIFRYVF9TVEFUX01JU1NFUyAgICAgICAgNAorI2RlZmluZSBUWFRfU1RBVF9ISVRTICAgICAgICAgIDUKKyNkZWZpbmUgVFhUX1NUQVRfQVVUSCAgICAgICAgICA2CisjZGVmaW5lIFRYVF9TVEFUX1NFUlZFUlMgICAgICAgNworI2VuZGlmCisKK3N0cnVjdCB0eHRfcmVjb3JkIHsKKyAgY2hhciAqbmFtZTsKKyAgdW5zaWduZWQgY2hhciAqdHh0OworICB1bnNpZ25lZCBzaG9ydCBjbGFzcywgbGVuOworICBpbnQgc3RhdDsKKyAgc3RydWN0IHR4dF9yZWNvcmQgKm5leHQ7Cit9OworCitzdHJ1Y3QgcHRyX3JlY29yZCB7CisgIGNoYXIgKm5hbWUsICpwdHI7CisgIHN0cnVjdCBwdHJfcmVjb3JkICpuZXh0OworfTsKKworc3RydWN0IGNuYW1lIHsKKyAgaW50IHR0bCwgZmxhZzsKKyAgY2hhciAqYWxpYXMsICp0YXJnZXQ7CisgIHN0cnVjdCBjbmFtZSAqbmV4dCwgKnRhcmdldHA7Cit9OyAKKworc3RydWN0IGRzX2NvbmZpZyB7CisgIGNoYXIgKm5hbWUsICpkaWdlc3Q7CisgIGludCBkaWdlc3RsZW4sIGNsYXNzLCBhbGdvLCBrZXl0YWcsIGRpZ2VzdF90eXBlOworICBzdHJ1Y3QgZHNfY29uZmlnICpuZXh0OworfTsKKworI2RlZmluZSBBRERSTElTVF9MSVRFUkFMIDEKKyNkZWZpbmUgQUREUkxJU1RfSVBWNiAgICAyCisjZGVmaW5lIEFERFJMSVNUX1JFVk9OTFkgNAorCitzdHJ1Y3QgYWRkcmxpc3QgeworICBzdHJ1Y3QgYWxsX2FkZHIgYWRkcjsKKyAgaW50IGZsYWdzLCBwcmVmaXhsZW47IAorICBzdHJ1Y3QgYWRkcmxpc3QgKm5leHQ7Cit9OworCisjZGVmaW5lIEFVVEg2ICAgICAxCisjZGVmaW5lIEFVVEg0ICAgICAyCisKK3N0cnVjdCBhdXRoX3pvbmUgeworICBjaGFyICpkb21haW47CisgIHN0cnVjdCBhdXRoX25hbWVfbGlzdCB7CisgICAgY2hhciAqbmFtZTsKKyAgICBpbnQgZmxhZ3M7CisgICAgc3RydWN0IGF1dGhfbmFtZV9saXN0ICpuZXh0OworICB9ICppbnRlcmZhY2VfbmFtZXM7CisgIHN0cnVjdCBhZGRybGlzdCAqc3VibmV0OworICBzdHJ1Y3QgYWRkcmxpc3QgKmV4Y2x1ZGU7CisgIHN0cnVjdCBhdXRoX3pvbmUgKm5leHQ7Cit9OworCisKK3N0cnVjdCBob3N0X3JlY29yZCB7CisgIGludCB0dGw7CisgIHN0cnVjdCBuYW1lX2xpc3QgeworICAgIGNoYXIgKm5hbWU7CisgICAgc3RydWN0IG5hbWVfbGlzdCAqbmV4dDsKKyAgfSAqbmFtZXM7CisgIHN0cnVjdCBpbl9hZGRyIGFkZHI7CisjaWZkZWYgSEFWRV9JUFY2CisgIHN0cnVjdCBpbjZfYWRkciBhZGRyNjsKKyNlbmRpZgorICBzdHJ1Y3QgaG9zdF9yZWNvcmQgKm5leHQ7Cit9OworCitzdHJ1Y3QgaW50ZXJmYWNlX25hbWUgeworICBjaGFyICpuYW1lOyAvKiBkb21haW4gbmFtZSAqLworICBjaGFyICppbnRyOyAvKiBpbnRlcmZhY2UgbmFtZSAqLworICBpbnQgZmFtaWx5OyAvKiBBRl9JTkVULCBBRl9JTkVUNiBvciB6ZXJvIGZvciBib3RoICovCisgIHN0cnVjdCBhZGRybGlzdCAqYWRkcjsKKyAgc3RydWN0IGludGVyZmFjZV9uYW1lICpuZXh0OworfTsKKwordW5pb24gYmlnbmFtZSB7CisgIGNoYXIgbmFtZVtNQVhETkFNRV07CisgIHVuaW9uIGJpZ25hbWUgKm5leHQ7IC8qIGZyZWVsaXN0ICovCit9OworCitzdHJ1Y3QgYmxvY2tkYXRhIHsKKyAgc3RydWN0IGJsb2NrZGF0YSAqbmV4dDsKKyAgdW5zaWduZWQgY2hhciBrZXlbS0VZQkxPQ0tfTEVOXTsKK307CisKK3N0cnVjdCBjcmVjIHsgCisgIHN0cnVjdCBjcmVjICpuZXh0LCAqcHJldiwgKmhhc2hfbmV4dDsKKyAgLyogdW5pb24gaXMgMTYgYnl0ZXMgd2hlbiBkb2luZyBJUHY2LCA4IGJ5dGVzIG9uIDMyIGJpdCBtYWNoaW5lcyB3aXRob3V0IElQdjYgKi8KKyAgdW5pb24geworICAgIHN0cnVjdCBhbGxfYWRkciBhZGRyOworICAgIHN0cnVjdCB7CisgICAgICB1bmlvbiB7CisJc3RydWN0IGNyZWMgKmNhY2hlOworCXN0cnVjdCBpbnRlcmZhY2VfbmFtZSAqaW50X25hbWU7CisgICAgICB9IHRhcmdldDsKKyAgICAgIHVuc2lnbmVkIGludCB1aWQ7IC8qIDAgaWYgdW5pb24gaXMgaW50ZXJmYWNlLW5hbWUgKi8KKyAgICB9IGNuYW1lOworICAgIHN0cnVjdCB7CisgICAgICBzdHJ1Y3QgYmxvY2tkYXRhICprZXlkYXRhOworICAgICAgdW5zaWduZWQgc2hvcnQga2V5bGVuLCBmbGFncywga2V5dGFnOworICAgICAgdW5zaWduZWQgY2hhciBhbGdvOworICAgIH0ga2V5OyAKKyAgICBzdHJ1Y3QgeworICAgICAgc3RydWN0IGJsb2NrZGF0YSAqa2V5ZGF0YTsKKyAgICAgIHVuc2lnbmVkIHNob3J0IGtleWxlbiwga2V5dGFnOworICAgICAgdW5zaWduZWQgY2hhciBhbGdvOworICAgICAgdW5zaWduZWQgY2hhciBkaWdlc3Q7IAorICAgIH0gZHM7IAorICB9IGFkZHI7CisgIHRpbWVfdCB0dGQ7IC8qIHRpbWUgdG8gZGllICovCisgIC8qIHVzZWQgYXMgY2xhc3MgaWYgRE5TS0VZL0RTLCBpbmRleCB0byBzb3VyY2UgZm9yIEZfSE9TVFMgKi8KKyAgdW5zaWduZWQgaW50IHVpZDsgCisgIHVuc2lnbmVkIHNob3J0IGZsYWdzOworICB1bmlvbiB7CisgICAgY2hhciBzbmFtZVtTTUFMTEROQU1FXTsKKyAgICB1bmlvbiBiaWduYW1lICpibmFtZTsKKyAgICBjaGFyICpuYW1lcDsKKyAgfSBuYW1lOworfTsKKworI2RlZmluZSBGX0lNTU9SVEFMICAoMXU8PDApCisjZGVmaW5lIEZfTkFNRVAgICAgICgxdTw8MSkKKyNkZWZpbmUgRl9SRVZFUlNFICAgKDF1PDwyKQorI2RlZmluZSBGX0ZPUldBUkQgICAoMXU8PDMpCisjZGVmaW5lIEZfREhDUCAgICAgICgxdTw8NCkKKyNkZWZpbmUgRl9ORUcgICAgICAgKDF1PDw1KSAgICAgICAKKyNkZWZpbmUgRl9IT1NUUyAgICAgKDF1PDw2KQorI2RlZmluZSBGX0lQVjQgICAgICAoMXU8PDcpCisjZGVmaW5lIEZfSVBWNiAgICAgICgxdTw8OCkKKyNkZWZpbmUgRl9CSUdOQU1FICAgKDF1PDw5KQorI2RlZmluZSBGX05YRE9NQUlOICAoMXU8PDEwKQorI2RlZmluZSBGX0NOQU1FICAgICAoMXU8PDExKQorI2RlZmluZSBGX0ROU0tFWSAgICAoMXU8PDEyKQorI2RlZmluZSBGX0NPTkZJRyAgICAoMXU8PDEzKQorI2RlZmluZSBGX0RTICAgICAgICAoMXU8PDE0KQorI2RlZmluZSBGX0ROU1NFQ09LICAoMXU8PDE1KQorCisvKiBiZWxvdyBoZXJlIGFyZSBvbmx5IHZhbGlkIGFzIGFyZ3MgdG8gbG9nX3F1ZXJ5OiBjYWNoZQorICAgZW50cmllcyBhcmUgbGltaXRlZCB0byAxNiBiaXRzICovCisjZGVmaW5lIEZfVVBTVFJFQU0gICgxdTw8MTYpCisjZGVmaW5lIEZfUlJOQU1FICAgICgxdTw8MTcpCisjZGVmaW5lIEZfU0VSVkVSICAgICgxdTw8MTgpCisjZGVmaW5lIEZfUVVFUlkgICAgICgxdTw8MTkpCisjZGVmaW5lIEZfTk9FUlIgICAgICgxdTw8MjApCisjZGVmaW5lIEZfQVVUSCAgICAgICgxdTw8MjEpCisjZGVmaW5lIEZfRE5TU0VDICAgICgxdTw8MjIpCisjZGVmaW5lIEZfS0VZVEFHICAgICgxdTw8MjMpCisjZGVmaW5lIEZfU0VDU1RBVCAgICgxdTw8MjQpCisjZGVmaW5lIEZfTk9fUlIgICAgICgxdTw8MjUpCisjZGVmaW5lIEZfSVBTRVQgICAgICgxdTw8MjYpCisjZGVmaW5lIEZfTk9FWFRSQSAgICgxdTw8MjcpCisKKy8qIFZhbHVlcyBvZiB1aWQgaW4gY3JlY3Mgd2l0aCBGX0NPTkZJRyBiaXQgc2V0LiAqLworI2RlZmluZSBTUkNfSU5URVJGQUNFIDAKKyNkZWZpbmUgU1JDX0NPTkZJRyAgICAxCisjZGVmaW5lIFNSQ19IT1NUUyAgICAgMgorI2RlZmluZSBTUkNfQUggICAgICAgIDMKKworCisvKiBzdHJ1Y3Qgc29ja2FkZHIgaXMgbm90IGxhcmdlIGVub3VnaCB0byBob2xkIGFueSBhZGRyZXNzLAorICAgYW5kIHNwZWNpZmljYWxseSBub3QgYmlnIGVub3VnaCB0byBob2xkIGFuIElQdjYgYWRkcmVzcy4KKyAgIEJsZWNoLiBSb2xsIG91ciBvd24uICovCit1bmlvbiBteXNvY2thZGRyIHsKKyAgc3RydWN0IHNvY2thZGRyIHNhOworICBzdHJ1Y3Qgc29ja2FkZHJfaW4gaW47CisjaWYgZGVmaW5lZChIQVZFX0lQVjYpCisgIHN0cnVjdCBzb2NrYWRkcl9pbjYgaW42OworI2VuZGlmCit9OworCisvKiBiaXRzIGluIGZsYWcgcGFyYW0gdG8gSVB2NiBjYWxsYmFja3MgZnJvbSBpZmFjZV9lbnVtZXJhdGUoKSAqLworI2RlZmluZSBJRkFDRV9URU5UQVRJVkUgICAxCisjZGVmaW5lIElGQUNFX0RFUFJFQ0FURUQgIDIKKyNkZWZpbmUgSUZBQ0VfUEVSTUFORU5UICAgNAorCisKKyNkZWZpbmUgU0VSVl9GUk9NX1JFU09MViAgICAgICAxICAvKiAxIGZvciBzZXJ2ZXJzIGZyb20gcmVzb2x2LCAwIGZvciBjb21tYW5kIGxpbmUuICovCisjZGVmaW5lIFNFUlZfTk9fQUREUiAgICAgICAgICAgMiAgLyogbm8gc2VydmVyLCB0aGlzIGRvbWFpbiBpcyBsb2NhbCBvbmx5ICovCisjZGVmaW5lIFNFUlZfTElURVJBTF9BRERSRVNTICAgNCAgLyogYWRkciBpcyB0aGUgYW5zd2VyLCBub3QgdGhlIHNlcnZlciAqLyAKKyNkZWZpbmUgU0VSVl9IQVNfRE9NQUlOICAgICAgICA4ICAvKiBzZXJ2ZXIgZm9yIG9uZSBkb21haW4gb25seSAqLworI2RlZmluZSBTRVJWX0hBU19TT1VSQ0UgICAgICAgMTYgIC8qIHNvdXJjZSBhZGRyZXNzIGRlZmluZWQgKi8KKyNkZWZpbmUgU0VSVl9GT1JfTk9ET1RTICAgICAgIDMyICAvKiBzZXJ2ZXIgZm9yIG5hbWVzIHdpdGggbm8gZG9tYWluIHBhcnQgb25seSAqLworI2RlZmluZSBTRVJWX1dBUk5FRF9SRUNVUlNJVkUgNjQgIC8qIGF2b2lkIHdhcm5pbmcgc3BhbSAqLworI2RlZmluZSBTRVJWX0ZST01fREJVUyAgICAgICAxMjggIC8qIDEgaWYgc291cmNlIGlzIERCdXMgKi8KKyNkZWZpbmUgU0VSVl9NQVJLICAgICAgICAgICAgMjU2ICAvKiBmb3IgbWFyay1hbmQtZGVsZXRlICovCisjZGVmaW5lIFNFUlZfVFlQRSAgICAoU0VSVl9IQVNfRE9NQUlOIHwgU0VSVl9GT1JfTk9ET1RTKQorI2RlZmluZSBTRVJWX0NPVU5URUQgICAgICAgICA1MTIgIC8qIHdvcmtzcGFjZSBmb3IgbG9nIGNvZGUgKi8KKyNkZWZpbmUgU0VSVl9VU0VfUkVTT0xWICAgICAxMDI0ICAvKiBmb3J3YXJkIHRoaXMgZG9tYWluIGluIHRoZSBub3JtYWwgd2F5ICovCisjZGVmaW5lIFNFUlZfTk9fUkVCSU5EICAgICAgMjA0OCAgLyogaW5oaWJpdCBkbnMtcmViaW5kIHByb3RlY3Rpb24gKi8KKyNkZWZpbmUgU0VSVl9GUk9NX0ZJTEUgICAgICA0MDk2ICAvKiByZWFkIGZyb20gLS1zZXJ2ZXJzLWZpbGUgKi8KKyNkZWZpbmUgU0VSVl9MT09QICAgICAgICAgICA4MTkyICAvKiBzZXJ2ZXIgY2F1c2VzIGZvcndhcmRpbmcgbG9vcCAqLworI2RlZmluZSBTRVJWX0RPX0ROU1NFQyAgICAgMTYzODQgIC8qIFZhbGlkYXRlIEROU1NFQyB3aGVuIHVzaW5nIHRoaXMgc2VydmVyICovCisjZGVmaW5lIFNFUlZfR09UX1RDUCAgICAgICAzMjc2OCAgLyogR290IHNvbWUgZGF0YSBmcm9tIHRoZSBUQ1AgY29ubmVjdGlvbiAqLworCitzdHJ1Y3Qgc2VydmVyZmQgeworICBpbnQgZmQ7CisgIHVuaW9uIG15c29ja2FkZHIgc291cmNlX2FkZHI7CisgIGNoYXIgaW50ZXJmYWNlW0lGX05BTUVTSVpFKzFdOworICB1bnNpZ25lZCBpbnQgaWZpbmRleCwgdXNlZDsKKyAgc3RydWN0IHNlcnZlcmZkICpuZXh0OworfTsKKworc3RydWN0IHJhbmRmZCB7CisgIGludCBmZDsKKyAgdW5zaWduZWQgc2hvcnQgcmVmY291bnQsIGZhbWlseTsKK307CisgIAorc3RydWN0IHNlcnZlciB7CisgIHVuaW9uIG15c29ja2FkZHIgYWRkciwgc291cmNlX2FkZHI7CisgIGNoYXIgaW50ZXJmYWNlW0lGX05BTUVTSVpFKzFdOworICBzdHJ1Y3Qgc2VydmVyZmQgKnNmZDsgCisgIGNoYXIgKmRvbWFpbjsgLyogc2V0IGlmIHRoaXMgc2VydmVyIG9ubHkgaGFuZGxlcyBhIGRvbWFpbi4gKi8gCisgIGludCBmbGFncywgdGNwZmQsIGVkbnNfcGt0c3o7CisgIHVuc2lnbmVkIGludCBxdWVyaWVzLCBmYWlsZWRfcXVlcmllczsKKyNpZmRlZiBIQVZFX0xPT1AKKyAgdTMyIHVpZDsKKyNlbmRpZgorICBzdHJ1Y3Qgc2VydmVyICpuZXh0OyAKK307CisKK3N0cnVjdCBpcHNldHMgeworICBjaGFyICoqc2V0czsKKyAgY2hhciAqZG9tYWluOworICBzdHJ1Y3QgaXBzZXRzICpuZXh0OworfTsKKworc3RydWN0IGlyZWMgeworICB1bmlvbiBteXNvY2thZGRyIGFkZHI7CisgIHN0cnVjdCBpbl9hZGRyIG5ldG1hc2s7IC8qIG9ubHkgdmFsaWQgZm9yIElQdjQgKi8KKyAgaW50IHRmdHBfb2ssIGRoY3Bfb2ssIG10dSwgZG9uZSwgd2FybmVkLCBkYWQsIGRuc19hdXRoLCBpbmRleCwgbXVsdGljYXN0X2RvbmUsIGZvdW5kLCBsYWJlbDsKKyAgY2hhciAqbmFtZTsgCisgIHN0cnVjdCBpcmVjICpuZXh0OworfTsKKworc3RydWN0IGxpc3RlbmVyIHsKKyAgaW50IGZkLCB0Y3BmZCwgdGZ0cGZkLCBmYW1pbHk7CisgIHN0cnVjdCBpcmVjICppZmFjZTsgLyogb25seSBzb21ldGltZXMgdmFsaWQgZm9yIG5vbi13aWxkY2FyZCAqLworICBzdHJ1Y3QgbGlzdGVuZXIgKm5leHQ7Cit9OworCisvKiBpbnRlcmZhY2UgYW5kIGFkZHJlc3MgcGFybXMgZnJvbSBjb21tYW5kIGxpbmUuICovCitzdHJ1Y3QgaW5hbWUgeworICBjaGFyICpuYW1lOworICB1bmlvbiBteXNvY2thZGRyIGFkZHI7CisgIGludCB1c2VkOworICBzdHJ1Y3QgaW5hbWUgKm5leHQ7Cit9OworCisvKiBzdWJuZXQgcGFyYW1ldGVycyBmcm9tIGNvbW1hbmQgbGluZSAqLworc3RydWN0IG15c3VibmV0IHsKKyAgdW5pb24gbXlzb2NrYWRkciBhZGRyOworICBpbnQgYWRkcl91c2VkOworICBpbnQgbWFzazsKK307CisKKy8qIHJlc29sdi1maWxlIHBhcm1zIGZyb20gY29tbWFuZC1saW5lICovCitzdHJ1Y3QgcmVzb2x2YyB7CisgIHN0cnVjdCByZXNvbHZjICpuZXh0OworICBpbnQgaXNfZGVmYXVsdCwgbG9nZ2VkOworICB0aW1lX3QgbXRpbWU7CisgIGNoYXIgKm5hbWU7CisjaWZkZWYgSEFWRV9JTk9USUZZCisgIGludCB3ZDsgLyogaW5vdGlmeSB3YXRjaCBkZXNjcmlwdG9yICovCisgIGNoYXIgKmZpbGU7IC8qIHBvaW50ZXIgdG8gZmlsZSBwYXJ0IGlmIHBhdGggKi8KKyNlbmRpZgorfTsKKworLyogYWRuLWhvc3RzIHBhcm1zIGZyb20gY29tbWFuZC1saW5lIChhbHNvIGRoY3AtaG9zdHNmaWxlIGFuZCBkaGNwLW9wdHNmaWxlIGFuZCBkaGNwLWhvc3RzZGlyKi8KKyNkZWZpbmUgQUhfRElSICAgICAgMQorI2RlZmluZSBBSF9JTkFDVElWRSAyCisjZGVmaW5lIEFIX1dEX0RPTkUgIDQKKyNkZWZpbmUgQUhfSE9TVFMgICAgOAorI2RlZmluZSBBSF9ESENQX0hTVCAxNgorI2RlZmluZSBBSF9ESENQX09QVCAzMgorc3RydWN0IGhvc3RzZmlsZSB7CisgIHN0cnVjdCBob3N0c2ZpbGUgKm5leHQ7CisgIGludCBmbGFnczsKKyAgY2hhciAqZm5hbWU7CisjaWZkZWYgSEFWRV9JTk9USUZZCisgIGludCB3ZDsgLyogaW5vdGlmeSB3YXRjaCBkZXNjcmlwdG9yICovCisjZW5kaWYKKyAgdW5zaWduZWQgaW50IGluZGV4OyAvKiBtYXRjaGVzIHRvIGNhY2hlIGVudHJpZXMgZm9yIGxvZ2dpbmcgKi8KK307CisKKworLyogRE5TU0VDIHN0YXR1cyB2YWx1ZXMuICovCisjZGVmaW5lIFNUQVRfU0VDVVJFICAgICAgICAgICAgIDEKKyNkZWZpbmUgU1RBVF9JTlNFQ1VSRSAgICAgICAgICAgMgorI2RlZmluZSBTVEFUX0JPR1VTICAgICAgICAgICAgICAzCisjZGVmaW5lIFNUQVRfTkVFRF9EUyAgICAgICAgICAgIDQKKyNkZWZpbmUgU1RBVF9ORUVEX0tFWSAgICAgICAgICAgNQorI2RlZmluZSBTVEFUX1RSVU5DQVRFRCAgICAgICAgICA2CisjZGVmaW5lIFNUQVRfU0VDVVJFX1dJTERDQVJEICAgIDcKKyNkZWZpbmUgU1RBVF9PSyAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBTVEFUX0FCQU5ET05FRCAgICAgICAgICA5CisKKyNkZWZpbmUgRlJFQ19OT1JFQklORCAgICAgICAgICAgMQorI2RlZmluZSBGUkVDX0NIRUNLSU5HX0RJU0FCTEVEICAyCisjZGVmaW5lIEZSRUNfSEFTX1NVQk5FVCAgICAgICAgIDQKKyNkZWZpbmUgRlJFQ19ETlNLRVlfUVVFUlkgICAgICAgOAorI2RlZmluZSBGUkVDX0RTX1FVRVJZICAgICAgICAgIDE2CisjZGVmaW5lIEZSRUNfQURfUVVFU1RJT04gICAgICAgMzIKKyNkZWZpbmUgRlJFQ19ET19RVUVTVElPTiAgICAgICA2NAorI2RlZmluZSBGUkVDX0FEREVEX1BIRUFERVIgICAgMTI4CisjZGVmaW5lIEZSRUNfVEVTVF9QS1RTWiAgICAgICAyNTYKKyNkZWZpbmUgRlJFQ19IQVNfRVhUUkFEQVRBICAgIDUxMiAgICAgICAgCisKKyNpZmRlZiBIQVZFX0ROU1NFQworI2RlZmluZSBIQVNIX1NJWkUgMjAgLyogU0hBLTEgZGlnZXN0IHNpemUgKi8KKyNlbHNlCisjZGVmaW5lIEhBU0hfU0laRSBzaXplb2YoaW50KQorI2VuZGlmCisKK3N0cnVjdCBmcmVjIHsKKyAgdW5pb24gbXlzb2NrYWRkciBzb3VyY2U7CisgIHN0cnVjdCBhbGxfYWRkciBkZXN0OworICBzdHJ1Y3Qgc2VydmVyICpzZW50dG87IC8qIE5VTEwgbWVhbnMgZnJlZSAqLworICBzdHJ1Y3QgcmFuZGZkICpyZmQ0OworI2lmZGVmIEhBVkVfSVBWNgorICBzdHJ1Y3QgcmFuZGZkICpyZmQ2OworI2VuZGlmCisgIHVuc2lnbmVkIGludCBpZmFjZTsKKyAgdW5zaWduZWQgc2hvcnQgb3JpZ19pZCwgbmV3X2lkOworICBpbnQgbG9nX2lkLCBmZCwgZm9yd2FyZGFsbCwgZmxhZ3M7CisgIHRpbWVfdCB0aW1lOworICB1bnNpZ25lZCBjaGFyICpoYXNoW0hBU0hfU0laRV07CisjaWZkZWYgSEFWRV9ETlNTRUMgCisgIGludCBjbGFzcywgd29ya19jb3VudGVyOworICBzdHJ1Y3QgYmxvY2tkYXRhICpzdGFzaDsgLyogU2F2ZWQgcmVwbHksIHdoaWxzdCB3ZSB2YWxpZGF0ZSAqLworICBzaXplX3Qgc3Rhc2hfbGVuOworICBzdHJ1Y3QgZnJlYyAqZGVwZW5kZW50OyAvKiBRdWVyeSBhd2FpdGluZyBpbnRlcm5hbGx5LWdlbmVyYXRlZCBETlNLRVkgb3IgRFMgcXVlcnkgKi8KKyAgc3RydWN0IGZyZWMgKmJsb2NraW5nX3F1ZXJ5OyAvKiBRdWVyeSB3aGljaCBpcyBibG9ja2luZyB1cy4gKi8KKyNlbmRpZgorICBzdHJ1Y3QgZnJlYyAqbmV4dDsKK307CisKKy8qIGZsYWdzIGluIHRvcCBvZiBsZW5ndGggZmllbGQgZm9yIERIQ1Atb3B0aW9uIHRhYmxlcyAqLworI2RlZmluZSBPVF9BRERSX0xJU1QgICAgMHg4MDAwCisjZGVmaW5lIE9UX1JGQzEwMzVfTkFNRSAweDQwMDAKKyNkZWZpbmUgT1RfSU5URVJOQUwgICAgIDB4MjAwMAorI2RlZmluZSBPVF9OQU1FICAgICAgICAgMHgxMDAwCisjZGVmaW5lIE9UX0NTVFJJTkcgICAgICAweDA4MDAKKyNkZWZpbmUgT1RfREVDICAgICAgICAgIDB4MDQwMCAKKyNkZWZpbmUgT1RfVElNRSAgICAgICAgIDB4MDIwMAorCisvKiBhY3Rpb25zIGluIHRoZSBkYWVtb24tPmhlbHBlciBSUEMgKi8KKyNkZWZpbmUgQUNUSU9OX0RFTCAgICAgICAgICAgMQorI2RlZmluZSBBQ1RJT05fT0xEX0hPU1ROQU1FICAyCisjZGVmaW5lIEFDVElPTl9PTEQgICAgICAgICAgIDMKKyNkZWZpbmUgQUNUSU9OX0FERCAgICAgICAgICAgNAorI2RlZmluZSBBQ1RJT05fVEZUUCAgICAgICAgICA1CisjZGVmaW5lIEFDVElPTl9BUlAgICAgICAgICAgIDYKKyNkZWZpbmUgQUNUSU9OX0FSUF9ERUwgICAgICAgNworCisjZGVmaW5lIExFQVNFX05FVyAgICAgICAgICAgIDEgIC8qIG5ld2x5IGNyZWF0ZWQgKi8KKyNkZWZpbmUgTEVBU0VfQ0hBTkdFRCAgICAgICAgMiAgLyogbW9kaWZpZWQgKi8KKyNkZWZpbmUgTEVBU0VfQVVYX0NIQU5HRUQgICAgNCAgLyogQ0xJRCBvciBleHBpcnkgY2hhbmdlZCAqLworI2RlZmluZSBMRUFTRV9BVVRIX05BTUUgICAgICA4ICAvKiBob3N0bmFtZSBjYW1lIGZyb20gY29uZmlnLCBub3QgZnJvbSBjbGllbnQgKi8KKyNkZWZpbmUgTEVBU0VfVVNFRCAgICAgICAgICAxNiAgLyogdXNlZCB0aGlzIERIQ1B2NiB0cmFuc2FjdGlvbiAqLworI2RlZmluZSBMRUFTRV9OQSAgICAgICAgICAgIDMyICAvKiBJUHY2IG5vLXRlbXBvcmFyeSBsZWFzZSAqLworI2RlZmluZSBMRUFTRV9UQSAgICAgICAgICAgIDY0ICAvKiBJUHY2IHRlbXBvcmFyeSBsZWFzZSAqLworI2RlZmluZSBMRUFTRV9IQVZFX0hXQUREUiAgMTI4ICAvKiBIYXZlIHNldCBod2FkZHJlc3MgKi8KKworc3RydWN0IGRoY3BfbGVhc2UgeworICBpbnQgY2xpZF9sZW47ICAgICAgICAgIC8qIGxlbmd0aCBvZiBjbGllbnQgaWRlbnRpZmllciAqLworICB1bnNpZ25lZCBjaGFyICpjbGlkOyAgIC8qIGNsaWVudGlkICovCisgIGNoYXIgKmhvc3RuYW1lLCAqZnFkbjsgLyogbmFtZSBmcm9tIGNsaWVudC1ob3N0bmFtZSBvcHRpb24gb3IgY29uZmlnICovCisgIGNoYXIgKm9sZF9ob3N0bmFtZTsgICAgLyogaG9zdG5hbWUgYmVmb3JlIGl0IG1vdmVkIHRvIGFub3RoZXIgbGVhc2UgKi8KKyAgaW50IGZsYWdzOworICB0aW1lX3QgZXhwaXJlczsgICAgICAgIC8qIGxlYXNlIGV4cGlyeSAqLworI2lmZGVmIEhBVkVfQlJPS0VOX1JUQworICB1bnNpZ25lZCBpbnQgbGVuZ3RoOworI2VuZGlmCisgIGludCBod2FkZHJfbGVuLCBod2FkZHJfdHlwZTsKKyAgdW5zaWduZWQgY2hhciBod2FkZHJbREhDUF9DSEFERFJfTUFYXTsgCisgIHN0cnVjdCBpbl9hZGRyIGFkZHIsIG92ZXJyaWRlLCBnaWFkZHI7CisgIHVuc2lnbmVkIGNoYXIgKmV4dHJhZGF0YTsKKyAgdW5zaWduZWQgaW50IGV4dHJhZGF0YV9sZW4sIGV4dHJhZGF0YV9zaXplOworICBpbnQgbGFzdF9pbnRlcmZhY2U7CisgIGludCBuZXdfaW50ZXJmYWNlOyAgICAgLyogc2F2ZSBwb3NzaWJsZSBvcmlnaW5hdGVkIGludGVyZmFjZSAqLworICBpbnQgbmV3X3ByZWZpeGxlbjsgICAgIC8qIGFuZCBpdHMgcHJlZml4IGxlbmd0aCAqLworI2lmZGVmIEhBVkVfREhDUDYKKyAgc3RydWN0IGluNl9hZGRyIGFkZHI2OworICBpbnQgaWFpZDsKKyAgc3RydWN0IHNsYWFjX2FkZHJlc3MgeworICAgIHN0cnVjdCBpbjZfYWRkciBhZGRyOworICAgIHRpbWVfdCBwaW5nX3RpbWU7CisgICAgaW50IGJhY2tvZmY7IC8qIHplcm8gLT4gY29uZmlybWVkICovCisgICAgc3RydWN0IHNsYWFjX2FkZHJlc3MgKm5leHQ7CisgIH0gKnNsYWFjX2FkZHJlc3M7CisgIGludCB2ZW5kb3JjbGFzc19jb3VudDsKKyNlbmRpZgorICB1OCByZXFfb3B0aW9uc1syNTZdOyAgIC8qIGNvdmVyIGFsbCBwb3NzaWJsZSBvcHRpb25zICgwLTI1NCArIE9QVElPTl9FTkQpICovCisgIHN0cnVjdCBkaGNwX2xlYXNlICpuZXh0OworfTsKKworc3RydWN0IGRoY3BfbmV0aWQgeworICBjaGFyICpuZXQ7CisgIHN0cnVjdCBkaGNwX25ldGlkICpuZXh0OworfTsKKworc3RydWN0IGRoY3BfbmV0aWRfbGlzdCB7CisgIHN0cnVjdCBkaGNwX25ldGlkICpsaXN0OworICBzdHJ1Y3QgZGhjcF9uZXRpZF9saXN0ICpuZXh0OworfTsKKworc3RydWN0IHRhZ19pZiB7CisgIHN0cnVjdCBkaGNwX25ldGlkX2xpc3QgKnNldDsKKyAgc3RydWN0IGRoY3BfbmV0aWQgKnRhZzsKKyAgc3RydWN0IHRhZ19pZiAqbmV4dDsKK307CisKK3N0cnVjdCBkZWxheV9jb25maWcgeworICBpbnQgZGVsYXk7CisgIHN0cnVjdCBkaGNwX25ldGlkICpuZXRpZDsKKyAgc3RydWN0IGRlbGF5X2NvbmZpZyAqbmV4dDsKK307CisKK3N0cnVjdCBod2FkZHJfY29uZmlnIHsKKyAgaW50IGh3YWRkcl9sZW4sIGh3YWRkcl90eXBlOworICB1bnNpZ25lZCBjaGFyIGh3YWRkcltESENQX0NIQUREUl9NQVhdOworICB1bnNpZ25lZCBpbnQgd2lsZGNhcmRfbWFzazsKKyAgc3RydWN0IGh3YWRkcl9jb25maWcgKm5leHQ7Cit9OworCitzdHJ1Y3QgZGhjcF9jb25maWcgeworICB1bnNpZ25lZCBpbnQgZmxhZ3M7CisgIGludCBjbGlkX2xlbjsgICAgICAgICAgLyogbGVuZ3RoIG9mIGNsaWVudCBpZGVudGlmaWVyICovCisgIHVuc2lnbmVkIGNoYXIgKmNsaWQ7ICAgLyogY2xpZW50aWQgKi8KKyAgY2hhciAqaG9zdG5hbWUsICpkb21haW47CisgIHN0cnVjdCBkaGNwX25ldGlkX2xpc3QgKm5ldGlkOworI2lmZGVmIEhBVkVfREhDUDYKKyAgc3RydWN0IGluNl9hZGRyIGFkZHI2OworI2VuZGlmCisgIHN0cnVjdCBpbl9hZGRyIGFkZHI7CisgIHRpbWVfdCBkZWNsaW5lX3RpbWU7CisgIHVuc2lnbmVkIGludCBsZWFzZV90aW1lOworICBzdHJ1Y3QgaHdhZGRyX2NvbmZpZyAqaHdhZGRyOworICBzdHJ1Y3QgZGhjcF9jb25maWcgKm5leHQ7Cit9OworCisjZGVmaW5lIGhhdmVfY29uZmlnKGNvbmZpZywgbWFzaykgKChjb25maWcpICYmICgoY29uZmlnKS0+ZmxhZ3MgJiAobWFzaykpKSAKKworI2RlZmluZSBDT05GSUdfRElTQUJMRSAgICAgICAgICAgMQorI2RlZmluZSBDT05GSUdfQ0xJRCAgICAgICAgICAgICAgMgorI2RlZmluZSBDT05GSUdfVElNRSAgICAgICAgICAgICAgOAorI2RlZmluZSBDT05GSUdfTkFNRSAgICAgICAgICAgICAxNgorI2RlZmluZSBDT05GSUdfQUREUiAgICAgICAgICAgICAzMgorI2RlZmluZSBDT05GSUdfTk9DTElEICAgICAgICAgIDEyOAorI2RlZmluZSBDT05GSUdfRlJPTV9FVEhFUlMgICAgIDI1NiAgICAvKiBlbnRyeSBjcmVhdGVkIGJ5IC9ldGMvZXRoZXJzICovCisjZGVmaW5lIENPTkZJR19BRERSX0hPU1RTICAgICAgNTEyICAgIC8qIGFkZHJlc3MgYWRkZWQgYnkgZnJvbSAvZXRjL2hvc3RzICovCisjZGVmaW5lIENPTkZJR19ERUNMSU5FRCAgICAgICAxMDI0ICAgIC8qIGFkZHJlc3MgZGVjbGluZWQgYnkgY2xpZW50ICovCisjZGVmaW5lIENPTkZJR19CQU5LICAgICAgICAgICAyMDQ4ICAgIC8qIGZyb20gZGhjcCBob3N0cyBmaWxlICovCisjZGVmaW5lIENPTkZJR19BRERSNiAgICAgICAgICA0MDk2CisjZGVmaW5lIENPTkZJR19XSUxEQ0FSRCAgICAgICA4MTkyCisKK3N0cnVjdCBkaGNwX29wdCB7CisgIGludCBvcHQsIGxlbiwgZmxhZ3M7CisgIHVuaW9uIHsKKyAgICBpbnQgZW5jYXA7CisgICAgdW5zaWduZWQgaW50IHdpbGRjYXJkX21hc2s7CisgICAgdW5zaWduZWQgY2hhciAqdmVuZG9yX2NsYXNzOworICB9IHU7CisgIHVuc2lnbmVkIGNoYXIgKnZhbDsKKyAgc3RydWN0IGRoY3BfbmV0aWQgKm5ldGlkOworICBzdHJ1Y3QgZGhjcF9vcHQgKm5leHQ7Cit9OworCisjZGVmaW5lIERIT1BUX0FERFIgICAgICAgICAgICAgICAxCisjZGVmaW5lIERIT1BUX1NUUklORyAgICAgICAgICAgICAyCisjZGVmaW5lIERIT1BUX0VOQ0FQU1VMQVRFICAgICAgICA0CisjZGVmaW5lIERIT1BUX0VOQ0FQX01BVENIICAgICAgICA4CisjZGVmaW5lIERIT1BUX0ZPUkNFICAgICAgICAgICAgIDE2CisjZGVmaW5lIERIT1BUX0JBTksgICAgICAgICAgICAgIDMyCisjZGVmaW5lIERIT1BUX0VOQ0FQX0RPTkUgICAgICAgIDY0CisjZGVmaW5lIERIT1BUX01BVENIICAgICAgICAgICAgMTI4CisjZGVmaW5lIERIT1BUX1ZFTkRPUiAgICAgICAgICAgMjU2CisjZGVmaW5lIERIT1BUX0hFWCAgICAgICAgICAgICAgNTEyCisjZGVmaW5lIERIT1BUX1ZFTkRPUl9NQVRDSCAgICAxMDI0CisjZGVmaW5lIERIT1BUX1JGQzM5MjUgICAgICAgICAyMDQ4CisjZGVmaW5lIERIT1BUX1RBR09LICAgICAgICAgICA0MDk2CisjZGVmaW5lIERIT1BUX0FERFI2ICAgICAgICAgICA4MTkyCisKK3N0cnVjdCBkaGNwX2Jvb3QgeworICBjaGFyICpmaWxlLCAqc25hbWUsICp0ZnRwX3NuYW1lOworICBzdHJ1Y3QgaW5fYWRkciBuZXh0X3NlcnZlcjsKKyAgc3RydWN0IGRoY3BfbmV0aWQgKm5ldGlkOworICBzdHJ1Y3QgZGhjcF9ib290ICpuZXh0OworfTsKKworc3RydWN0IHB4ZV9zZXJ2aWNlIHsKKyAgdW5zaWduZWQgc2hvcnQgQ1NBLCB0eXBlOyAKKyAgY2hhciAqbWVudSwgKmJhc2VuYW1lLCAqc25hbWU7CisgIHN0cnVjdCBpbl9hZGRyIHNlcnZlcjsKKyAgc3RydWN0IGRoY3BfbmV0aWQgKm5ldGlkOworICBzdHJ1Y3QgcHhlX3NlcnZpY2UgKm5leHQ7Cit9OworCisjZGVmaW5lIE1BVENIX1ZFTkRPUiAgICAgMQorI2RlZmluZSBNQVRDSF9VU0VSICAgICAgIDIKKyNkZWZpbmUgTUFUQ0hfQ0lSQ1VJVCAgICAzCisjZGVmaW5lIE1BVENIX1JFTU9URSAgICAgNAorI2RlZmluZSBNQVRDSF9TVUJTQ1JJQkVSIDUKKworLyogdmVuZG9yY2xhc3MsIHVzZXJjbGFzcywgcmVtb3RlLWlkIG9yIGNpcmN1aXQtaWQgKi8KK3N0cnVjdCBkaGNwX3ZlbmRvciB7CisgIGludCBsZW4sIG1hdGNoX3R5cGU7CisgIHVuc2lnbmVkIGludCBlbnRlcnByaXNlOworICBjaGFyICpkYXRhOworICBzdHJ1Y3QgZGhjcF9uZXRpZCBuZXRpZDsKKyAgc3RydWN0IGRoY3BfdmVuZG9yICpuZXh0OworfTsKKworc3RydWN0IGRoY3BfbWFjIHsKKyAgdW5zaWduZWQgaW50IG1hc2s7CisgIGludCBod2FkZHJfbGVuLCBod2FkZHJfdHlwZTsKKyAgdW5zaWduZWQgY2hhciBod2FkZHJbREhDUF9DSEFERFJfTUFYXTsKKyAgc3RydWN0IGRoY3BfbmV0aWQgbmV0aWQ7CisgIHN0cnVjdCBkaGNwX21hYyAqbmV4dDsKK307CisKK3N0cnVjdCBkaGNwX2JyaWRnZSB7CisgIGNoYXIgaWZhY2VbSUZfTkFNRVNJWkVdOworICBzdHJ1Y3QgZGhjcF9icmlkZ2UgKmFsaWFzLCAqbmV4dDsKK307CisKK3N0cnVjdCBjb25kX2RvbWFpbiB7CisgIGNoYXIgKmRvbWFpbiwgKnByZWZpeDsKKyAgc3RydWN0IGluX2FkZHIgc3RhcnQsIGVuZDsKKyNpZmRlZiBIQVZFX0lQVjYKKyAgc3RydWN0IGluNl9hZGRyIHN0YXJ0NiwgZW5kNjsKKyNlbmRpZgorICBpbnQgaXM2OworICBzdHJ1Y3QgY29uZF9kb21haW4gKm5leHQ7Cit9OyAKKworI2lmZGVmIE9QVElPTjZfUFJFRklYX0NMQVNTIAorc3RydWN0IHByZWZpeF9jbGFzcyB7CisgIGludCBjbGFzczsKKyAgc3RydWN0IGRoY3BfbmV0aWQgdGFnOworICBzdHJ1Y3QgcHJlZml4X2NsYXNzICpuZXh0OworfTsKKyNlbmRpZgorCitzdHJ1Y3QgcmFfaW50ZXJmYWNlIHsKKyAgY2hhciAqbmFtZTsKKyAgY2hhciAqbXR1X25hbWU7CisgIGludCBpbnRlcnZhbCwgbGlmZXRpbWUsIHByaW8sIG10dTsKKyAgc3RydWN0IHJhX2ludGVyZmFjZSAqbmV4dDsKK307CisKK3N0cnVjdCBkaGNwX2NvbnRleHQgeworICB1bnNpZ25lZCBpbnQgbGVhc2VfdGltZSwgYWRkcl9lcG9jaDsKKyAgc3RydWN0IGluX2FkZHIgbmV0bWFzaywgYnJvYWRjYXN0OworICBzdHJ1Y3QgaW5fYWRkciBsb2NhbCwgcm91dGVyOworICBzdHJ1Y3QgaW5fYWRkciBzdGFydCwgZW5kOyAvKiByYW5nZSBvZiBhdmFpbGFibGUgYWRkcmVzc2VzICovCisjaWZkZWYgSEFWRV9ESENQNgorICBzdHJ1Y3QgaW42X2FkZHIgc3RhcnQ2LCBlbmQ2OyAvKiByYW5nZSBvZiBhdmFpbGFibGUgYWRkcmVzc2VzICovCisgIHN0cnVjdCBpbjZfYWRkciBsb2NhbDY7CisgIGludCBwcmVmaXgsIGlmX2luZGV4OworICB1bnNpZ25lZCBpbnQgdmFsaWQsIHByZWZlcnJlZCwgc2F2ZWRfdmFsaWQ7CisgIHRpbWVfdCByYV90aW1lLCByYV9zaG9ydF9wZXJpb2Rfc3RhcnQsIGFkZHJlc3NfbG9zdF90aW1lOworICBjaGFyICp0ZW1wbGF0ZV9pbnRlcmZhY2U7CisjZW5kaWYKKyAgaW50IGZsYWdzOworICBzdHJ1Y3QgZGhjcF9uZXRpZCBuZXRpZCwgKmZpbHRlcjsKKyAgc3RydWN0IGRoY3BfY29udGV4dCAqbmV4dCwgKmN1cnJlbnQ7Cit9OworCisjZGVmaW5lIENPTlRFWFRfU1RBVElDICAgICAgICAgKDF1PDwwKQorI2RlZmluZSBDT05URVhUX05FVE1BU0sgICAgICAgICgxdTw8MSkKKyNkZWZpbmUgQ09OVEVYVF9CUkRDQVNUICAgICAgICAoMXU8PDIpCisjZGVmaW5lIENPTlRFWFRfUFJPWFkgICAgICAgICAgKDF1PDwzKQorI2RlZmluZSBDT05URVhUX1JBX1JPVVRFUiAgICAgICgxdTw8NCkKKyNkZWZpbmUgQ09OVEVYVF9SQV9ET05FICAgICAgICAoMXU8PDUpCisjZGVmaW5lIENPTlRFWFRfUkFfTkFNRSAgICAgICAgKDF1PDw2KQorI2RlZmluZSBDT05URVhUX1JBX1NUQVRFTEVTUyAgICgxdTw8NykKKyNkZWZpbmUgQ09OVEVYVF9ESENQICAgICAgICAgICAoMXU8PDgpCisjZGVmaW5lIENPTlRFWFRfREVQUkVDQVRFICAgICAgKDF1PDw5KQorI2RlZmluZSBDT05URVhUX1RFTVBMQVRFICAgICAgICgxdTw8MTApICAgIC8qIGNyZWF0ZSBjb250ZXh0cyB1c2luZyBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgQ09OVEVYVF9DT05TVFJVQ1RFRCAgICAoMXU8PDExKQorI2RlZmluZSBDT05URVhUX0dDICAgICAgICAgICAgICgxdTw8MTIpCisjZGVmaW5lIENPTlRFWFRfUkEgICAgICAgICAgICAgKDF1PDwxMykKKyNkZWZpbmUgQ09OVEVYVF9DT05GX1VTRUQgICAgICAoMXU8PDE0KQorI2RlZmluZSBDT05URVhUX1VTRUQgICAgICAgICAgICgxdTw8MTUpCisjZGVmaW5lIENPTlRFWFRfT0xEICAgICAgICAgICAgKDF1PDwxNikKKyNkZWZpbmUgQ09OVEVYVF9WNiAgICAgICAgICAgICAoMXU8PDE3KQorI2RlZmluZSBDT05URVhUX1JBX09GRl9MSU5LICAgICgxdTw8MTgpCisKK3N0cnVjdCBwaW5nX3Jlc3VsdCB7CisgIHN0cnVjdCBpbl9hZGRyIGFkZHI7CisgIHRpbWVfdCB0aW1lOworICB1bnNpZ25lZCBpbnQgaGFzaDsKKyAgc3RydWN0IHBpbmdfcmVzdWx0ICpuZXh0OworfTsKKworc3RydWN0IHRmdHBfZmlsZSB7CisgIGludCByZWZjb3VudCwgZmQ7CisgIG9mZl90IHNpemU7CisgIGRldl90IGRldjsKKyAgaW5vX3QgaW5vZGU7CisgIGNoYXIgZmlsZW5hbWVbXTsKK307CisKK3N0cnVjdCB0ZnRwX3RyYW5zZmVyIHsKKyAgaW50IHNvY2tmZDsKKyAgdGltZV90IHRpbWVvdXQ7CisgIGludCBiYWNrb2ZmOworICB1bnNpZ25lZCBpbnQgYmxvY2ssIGJsb2Nrc2l6ZSwgZXhwYW5zaW9uOworICBvZmZfdCBvZmZzZXQ7CisgIHVuaW9uIG15c29ja2FkZHIgcGVlcjsKKyAgY2hhciBvcHRfYmxvY2tzaXplLCBvcHRfdHJhbnNpemUsIG5ldGFzY2lpLCBjYXJyeWxmOworICBzdHJ1Y3QgdGZ0cF9maWxlICpmaWxlOworICBzdHJ1Y3QgdGZ0cF90cmFuc2ZlciAqbmV4dDsKK307CisKK3N0cnVjdCBhZGRyX2xpc3QgeworICBzdHJ1Y3QgaW5fYWRkciBhZGRyOworICBzdHJ1Y3QgYWRkcl9saXN0ICpuZXh0OworfTsKKworc3RydWN0IHRmdHBfcHJlZml4IHsKKyAgY2hhciAqaW50ZXJmYWNlOworICBjaGFyICpwcmVmaXg7CisgIGludCBtaXNzaW5nOworICBzdHJ1Y3QgdGZ0cF9wcmVmaXggKm5leHQ7Cit9OworCitzdHJ1Y3QgZGhjcF9yZWxheSB7CisgIHN0cnVjdCBhbGxfYWRkciBsb2NhbCwgc2VydmVyOworICBjaGFyICppbnRlcmZhY2U7IC8qIEFsbG93YWJsZSBpbnRlcmZhY2UgZm9yIHJlcGxpZXMgZnJvbSBzZXJ2ZXIsIGFuZCBkZXN0IGZvciBJUHY2IG11bHRpY2FzdCAqLworICBpbnQgaWZhY2VfaW5kZXg7IC8qIHdvcmtpbmcgLSBpbnRlcmZhY2UgaW4gd2hpY2ggcmVxdWVzdHMgYXJyaXZlZCwgZm9yIHJldHVybiAqLworICBzdHJ1Y3QgZGhjcF9yZWxheSAqY3VycmVudCwgKm5leHQ7Cit9OworCitleHRlcm4gc3RydWN0IGRhZW1vbiB7CisgIC8qIGRhdGFzdHVjdHVyZXMgcmVwcmVzZW50aW5nIHRoZSBjb21tYW5kLWxpbmUgYW5kIAorICAgICBjb25maWcgZmlsZSBhcmd1bWVudHMuIEFsbCBzZXQgKGluY2x1ZGluZyBkZWZhdWx0cykKKyAgICAgaW4gb3B0aW9uLmMgKi8KKworICB1bnNpZ25lZCBpbnQgb3B0aW9ucywgb3B0aW9uczI7CisgIHN0cnVjdCByZXNvbHZjIGRlZmF1bHRfcmVzb2x2LCAqcmVzb2x2X2ZpbGVzOworICB0aW1lX3QgbGFzdF9yZXNvbHY7CisgIGNoYXIgKnNlcnZlcnNfZmlsZTsKKyAgc3RydWN0IG14X3Nydl9yZWNvcmQgKm14bmFtZXM7CisgIHN0cnVjdCBuYXB0ciAqbmFwdHI7CisgIHN0cnVjdCB0eHRfcmVjb3JkICp0eHQsICpycjsKKyAgc3RydWN0IHB0cl9yZWNvcmQgKnB0cjsKKyAgc3RydWN0IGhvc3RfcmVjb3JkICpob3N0X3JlY29yZHMsICpob3N0X3JlY29yZHNfdGFpbDsKKyAgc3RydWN0IGNuYW1lICpjbmFtZXM7CisgIHN0cnVjdCBhdXRoX3pvbmUgKmF1dGhfem9uZXM7CisgIHN0cnVjdCBpbnRlcmZhY2VfbmFtZSAqaW50X25hbWVzOworICBjaGFyICpteHRhcmdldDsKKyAgc3RydWN0IG15c3VibmV0ICphZGRfc3VibmV0NDsKKyAgc3RydWN0IG15c3VibmV0ICphZGRfc3VibmV0NjsKKyAgY2hhciAqbGVhc2VfZmlsZTsKKyAgY2hhciAqdXNlcm5hbWUsICpncm91cG5hbWUsICpzY3JpcHR1c2VyOworICBjaGFyICpsdWFzY3JpcHQ7CisgIGNoYXIgKmF1dGhzZXJ2ZXIsICpob3N0bWFzdGVyOworICBzdHJ1Y3QgaW5hbWUgKmF1dGhpbnRlcmZhY2U7CisgIHN0cnVjdCBuYW1lX2xpc3QgKnNlY29uZGFyeV9mb3J3YXJkX3NlcnZlcjsKKyAgaW50IGdyb3VwX3NldCwgb3Nwb3J0OworICBjaGFyICpkb21haW5fc3VmZml4OworICBzdHJ1Y3QgY29uZF9kb21haW4gKmNvbmRfZG9tYWluLCAqc3ludGhfZG9tYWluczsKKyAgY2hhciAqcnVuZmlsZTsgCisgIGNoYXIgKmxlYXNlX2NoYW5nZV9jb21tYW5kOworICBzdHJ1Y3QgaW5hbWUgKmlmX25hbWVzLCAqaWZfYWRkcnMsICppZl9leGNlcHQsICpkaGNwX2V4Y2VwdCwgKmF1dGhfcGVlcnMsICp0ZnRwX2ludGVyZmFjZXM7CisgIHN0cnVjdCBib2d1c19hZGRyICpib2d1c19hZGRyLCAqaWdub3JlX2FkZHI7CisgIHN0cnVjdCBzZXJ2ZXIgKnNlcnZlcnM7CisgIHN0cnVjdCBpcHNldHMgKmlwc2V0czsKKyAgaW50IGxvZ19mYWM7IC8qIGxvZyBmYWNpbGl0eSAqLworICBjaGFyICpsb2dfZmlsZTsgLyogb3B0aW9uYWwgbG9nIGZpbGUgKi8KKyAgaW50IG1heF9sb2dzOyAgLyogcXVldWUgbGltaXQgKi8KKyAgaW50IGNhY2hlc2l6ZSwgZnRhYnNpemU7CisgIGludCBwb3J0LCBxdWVyeV9wb3J0LCBtaW5fcG9ydCwgbWF4X3BvcnQ7CisgIHVuc2lnbmVkIGxvbmcgbG9jYWxfdHRsLCBuZWdfdHRsLCBtYXhfdHRsLCBtaW5fY2FjaGVfdHRsLCBtYXhfY2FjaGVfdHRsLCBhdXRoX3R0bCwgZGhjcF90dGwsIHVzZV9kaGNwX3R0bDsKKyAgY2hhciAqZG5zX2NsaWVudF9pZDsKKyAgc3RydWN0IGhvc3RzZmlsZSAqYWRkbl9ob3N0czsKKyAgc3RydWN0IGRoY3BfY29udGV4dCAqZGhjcCwgKmRoY3A2OworICBzdHJ1Y3QgcmFfaW50ZXJmYWNlICpyYV9pbnRlcmZhY2VzOworICBzdHJ1Y3QgZGhjcF9jb25maWcgKmRoY3BfY29uZjsKKyAgc3RydWN0IGRoY3Bfb3B0ICpkaGNwX29wdHMsICpkaGNwX21hdGNoLCAqZGhjcF9vcHRzNiwgKmRoY3BfbWF0Y2g2OworICBzdHJ1Y3QgZGhjcF92ZW5kb3IgKmRoY3BfdmVuZG9yczsKKyAgc3RydWN0IGRoY3BfbWFjICpkaGNwX21hY3M7CisgIHN0cnVjdCBkaGNwX2Jvb3QgKmJvb3RfY29uZmlnOworICBzdHJ1Y3QgcHhlX3NlcnZpY2UgKnB4ZV9zZXJ2aWNlczsKKyAgc3RydWN0IHRhZ19pZiAqdGFnX2lmOyAKKyAgc3RydWN0IGFkZHJfbGlzdCAqb3ZlcnJpZGVfcmVsYXlzOworICBzdHJ1Y3QgZGhjcF9yZWxheSAqcmVsYXk0LCAqcmVsYXk2OworICBzdHJ1Y3QgZGVsYXlfY29uZmlnICpkZWxheV9jb25mOworICBpbnQgb3ZlcnJpZGU7CisgIGludCBlbmFibGVfcHhlOworICBpbnQgZG9pbmdfcmEsIGRvaW5nX2RoY3A2OworICBzdHJ1Y3QgZGhjcF9uZXRpZF9saXN0ICpkaGNwX2lnbm9yZSwgKmRoY3BfaWdub3JlX25hbWVzLCAqZGhjcF9nZW5fbmFtZXM7IAorICBzdHJ1Y3QgZGhjcF9uZXRpZF9saXN0ICpmb3JjZV9icm9hZGNhc3QsICpib290cF9keW5hbWljOworICBzdHJ1Y3QgaG9zdHNmaWxlICpkaGNwX2hvc3RzX2ZpbGUsICpkaGNwX29wdHNfZmlsZSwgKmR5bmFtaWNfZGlyczsKKyAgaW50IGRoY3BfbWF4LCB0ZnRwX21heCwgdGZ0cF9tdHU7CisgIGludCBkaGNwX3NlcnZlcl9wb3J0LCBkaGNwX2NsaWVudF9wb3J0OworICBpbnQgc3RhcnRfdGZ0cF9wb3J0LCBlbmRfdGZ0cF9wb3J0OyAKKyAgdW5zaWduZWQgaW50IG1pbl9sZWFzZXRpbWU7CisgIHN0cnVjdCBkb2N0b3IgKmRvY3RvcnM7CisgIHVuc2lnbmVkIHNob3J0IGVkbnNfcGt0c3o7CisgIGNoYXIgKnRmdHBfcHJlZml4OyAKKyAgc3RydWN0IHRmdHBfcHJlZml4ICppZl9wcmVmaXg7IC8qIHBlci1pbnRlcmZhY2UgVEZUUCBwcmVmaXhlcyAqLworICB1bnNpZ25lZCBpbnQgZHVpZF9lbnRlcnByaXNlLCBkdWlkX2NvbmZpZ19sZW47CisgIHVuc2lnbmVkIGNoYXIgKmR1aWRfY29uZmlnOworICBjaGFyICpkYnVzX25hbWU7CisgIHVuc2lnbmVkIGxvbmcgc29hX3NuLCBzb2FfcmVmcmVzaCwgc29hX3JldHJ5LCBzb2FfZXhwaXJ5OworI2lmZGVmIE9QVElPTjZfUFJFRklYX0NMQVNTIAorICBzdHJ1Y3QgcHJlZml4X2NsYXNzICpwcmVmaXhfY2xhc3NlczsKKyNlbmRpZgorI2lmZGVmIEhBVkVfRE5TU0VDCisgIHN0cnVjdCBkc19jb25maWcgKmRzOworICBpbnQgZG5zc2VjX25vX3RpbWVfY2hlY2s7CisgIGludCBiYWNrX3RvX3RoZV9mdXR1cmU7CisgIGNoYXIgKnRpbWVzdGFtcF9maWxlOworI2VuZGlmCisKKyAgLyogZ2xvYmFsbHkgdXNlZCBzdHVmZiBmb3IgRE5TICovCisgIGNoYXIgKnBhY2tldDsgLyogcGFja2V0IGJ1ZmZlciAqLworICBpbnQgcGFja2V0X2J1ZmZfc3o7IC8qIHNpemUgb2YgYWJvdmUgKi8KKyAgY2hhciAqbmFtZWJ1ZmY7IC8qIE1BWEROQU1FIHNpemUgYnVmZmVyICovCisjaWZkZWYgSEFWRV9ETlNTRUMKKyAgY2hhciAqa2V5bmFtZTsgLyogTUFYRE5BTUUgc2l6ZSBidWZmZXIgKi8KKyAgY2hhciAqd29ya3NwYWNlbmFtZTsgLyogZGl0dG8gKi8KKyNlbmRpZgorICB1bnNpZ25lZCBpbnQgbG9jYWxfYW5zd2VyLCBxdWVyaWVzX2ZvcndhcmRlZCwgYXV0aF9hbnN3ZXI7CisgIHN0cnVjdCBmcmVjICpmcmVjX2xpc3Q7CisgIHN0cnVjdCBzZXJ2ZXJmZCAqc2ZkczsKKyAgc3RydWN0IGlyZWMgKmludGVyZmFjZXM7CisgIHN0cnVjdCBsaXN0ZW5lciAqbGlzdGVuZXJzOworICBzdHJ1Y3Qgc2VydmVyICpsYXN0X3NlcnZlcjsKKyAgdGltZV90IGZvcndhcmR0aW1lOworICBpbnQgZm9yd2FyZGNvdW50OworICBzdHJ1Y3Qgc2VydmVyICpzcnZfc2F2ZTsgLyogVXNlZCBmb3IgcmVzZW5kIG9uIERvRCAqLworICBzaXplX3QgcGFja2V0X2xlbjsgICAgICAgLyogICAgICAiICAgICAgICAiICAgICAgICAqLworICBzdHJ1Y3QgcmFuZGZkICpyZmRfc2F2ZTsgLyogICAgICAiICAgICAgICAiICAgICAgICAqLworICBwaWRfdCB0Y3BfcGlkc1tNQVhfUFJPQ1NdOworICBzdHJ1Y3QgcmFuZGZkIHJhbmRvbXNvY2tzW1JBTkRPTV9TT0NLU107CisgIGludCB2NnBrdGluZm87IAorICBzdHJ1Y3QgYWRkcmxpc3QgKmludGVyZmFjZV9hZGRyczsgLyogbGlzdCBvZiBhbGwgYWRkcmVzc2VzL3ByZWZpeCBsZW5ndGhzIGFzc29jaWF0ZWQgd2l0aCBhbGwgbG9jYWwgaW50ZXJmYWNlcyAqLworICBpbnQgbG9nX2lkLCBsb2dfZGlzcGxheV9pZDsgLyogaWRzIG9mIHRyYW5zYWN0aW9ucyBmb3IgbG9nZ2luZyAqLworICB1bmlvbiBteXNvY2thZGRyICpsb2dfc291cmNlX2FkZHI7CisKKyAgLyogREhDUCBzdGF0ZSAqLworICBpbnQgZGhjcGZkLCBoZWxwZXJmZCwgcHhlZmQ7IAorI2lmZGVmIEhBVkVfSU5PVElGWQorICBpbnQgaW5vdGlmeWZkOworI2VuZGlmCisjaWYgZGVmaW5lZChIQVZFX0xJTlVYX05FVFdPUkspCisgIGludCBuZXRsaW5rZmQ7CisjZWxpZiBkZWZpbmVkKEhBVkVfQlNEX05FVFdPUkspCisgIGludCBkaGNwX3Jhd19mZCwgZGhjcF9pY21wX2ZkLCByb3V0ZWZkOworI2VuZGlmCisgIHN0cnVjdCBpb3ZlYyBkaGNwX3BhY2tldDsKKyAgY2hhciAqZGhjcF9idWZmLCAqZGhjcF9idWZmMiwgKmRoY3BfYnVmZjM7CisgIHN0cnVjdCBwaW5nX3Jlc3VsdCAqcGluZ19yZXN1bHRzOworICBGSUxFICpsZWFzZV9zdHJlYW07CisgIHN0cnVjdCBkaGNwX2JyaWRnZSAqYnJpZGdlczsKKyNpZmRlZiBIQVZFX0RIQ1A2CisgIGludCBkdWlkX2xlbjsKKyAgdW5zaWduZWQgY2hhciAqZHVpZDsKKyAgc3RydWN0IGlvdmVjIG91dHBhY2tldDsKKyAgaW50IGRoY3A2ZmQsIGljbXA2ZmQ7CisjZW5kaWYKKyAgLyogREJ1cyBzdHVmZiAqLworICAvKiB2b2lkICogaGVyZSB0byBhdm9pZCBkZXBlbmRpbmcgb24gZGJ1cyBoZWFkZXJzIG91dHNpZGUgZGJ1cy5jICovCisgIHZvaWQgKmRidXM7CisjaWZkZWYgSEFWRV9EQlVTCisgIHN0cnVjdCB3YXRjaCAqd2F0Y2hlczsKKyNlbmRpZgorCisgIC8qIFRGVFAgc3R1ZmYgKi8KKyAgc3RydWN0IHRmdHBfdHJhbnNmZXIgKnRmdHBfdHJhbnMsICp0ZnRwX2RvbmVfdHJhbnM7CisKKyAgLyogdXRpbGl0eSBzdHJpbmcgYnVmZmVyLCBob2xkIG1heCBzaXplZCBJUCBhZGRyZXNzIGFzIHN0cmluZyAqLworICBjaGFyICphZGRyYnVmZjsKKyAgY2hhciAqYWRkcmJ1ZmYyOyAvKiBvbmx5IGFsbG9jYXRlZCB3aGVuIE9QVF9FWFRSQUxPRyAqLworCit9ICpkYWVtb247CisKKy8qIGNhY2hlLmMgKi8KK3ZvaWQgY2FjaGVfaW5pdCh2b2lkKTsKK3ZvaWQgbG9nX3F1ZXJ5KHVuc2lnbmVkIGludCBmbGFncywgY2hhciAqbmFtZSwgc3RydWN0IGFsbF9hZGRyICphZGRyLCBjaGFyICphcmcpOyAKK2NoYXIgKnJlY29yZF9zb3VyY2UodW5zaWduZWQgaW50IGluZGV4KTsKK2NoYXIgKnF1ZXJ5c3RyKGNoYXIgKmRlc2MsIHVuc2lnbmVkIHNob3J0IHR5cGUpOworc3RydWN0IGNyZWMgKmNhY2hlX2ZpbmRfYnlfYWRkcihzdHJ1Y3QgY3JlYyAqY3JlY3AsCisJCQkJc3RydWN0IGFsbF9hZGRyICphZGRyLCB0aW1lX3Qgbm93LCAKKwkJCQl1bnNpZ25lZCBpbnQgcHJvdCk7CitzdHJ1Y3QgY3JlYyAqY2FjaGVfZmluZF9ieV9uYW1lKHN0cnVjdCBjcmVjICpjcmVjcCwgCisJCQkJY2hhciAqbmFtZSwgdGltZV90IG5vdywgdW5zaWduZWQgaW50IHByb3QpOwordm9pZCBjYWNoZV9lbmRfaW5zZXJ0KHZvaWQpOwordm9pZCBjYWNoZV9zdGFydF9pbnNlcnQodm9pZCk7CitzdHJ1Y3QgY3JlYyAqY2FjaGVfaW5zZXJ0KGNoYXIgKm5hbWUsIHN0cnVjdCBhbGxfYWRkciAqYWRkciwKKwkJCSAgdGltZV90IG5vdywgdW5zaWduZWQgbG9uZyB0dGwsIHVuc2lnbmVkIHNob3J0IGZsYWdzKTsKK3ZvaWQgY2FjaGVfcmVsb2FkKHZvaWQpOwordm9pZCBjYWNoZV9hZGRfZGhjcF9lbnRyeShjaGFyICpob3N0X25hbWUsIGludCBwcm90LCBzdHJ1Y3QgYWxsX2FkZHIgKmhvc3RfYWRkcmVzcywgdGltZV90IHR0ZCk7CitzdHJ1Y3QgaW5fYWRkciBhX3JlY29yZF9mcm9tX2hvc3RzKGNoYXIgKm5hbWUsIHRpbWVfdCBub3cpOwordm9pZCBjYWNoZV91bmhhc2hfZGhjcCh2b2lkKTsKK3ZvaWQgZHVtcF9jYWNoZSh0aW1lX3Qgbm93KTsKKyNpZm5kZWYgTk9fSUQKK2ludCBjYWNoZV9tYWtlX3N0YXQoc3RydWN0IHR4dF9yZWNvcmQgKnQpOworI2VuZGlmCitjaGFyICpjYWNoZV9nZXRfbmFtZShzdHJ1Y3QgY3JlYyAqY3JlY3ApOworY2hhciAqY2FjaGVfZ2V0X2NuYW1lX3RhcmdldChzdHJ1Y3QgY3JlYyAqY3JlY3ApOworc3RydWN0IGNyZWMgKmNhY2hlX2VudW1lcmF0ZShpbnQgaW5pdCk7CitpbnQgcmVhZF9ob3N0c2ZpbGUoY2hhciAqZmlsZW5hbWUsIHVuc2lnbmVkIGludCBpbmRleCwgaW50IGNhY2hlX3NpemUsIAorCQkgICBzdHJ1Y3QgY3JlYyAqKnJoYXNoLCBpbnQgaGFzaHN6KTsKKworLyogYmxvY2tkYXRhLmMgKi8KKyNpZmRlZiBIQVZFX0ROU1NFQwordm9pZCBibG9ja2RhdGFfaW5pdCh2b2lkKTsKK3ZvaWQgYmxvY2tkYXRhX3JlcG9ydCh2b2lkKTsKK3N0cnVjdCBibG9ja2RhdGEgKmJsb2NrZGF0YV9hbGxvYyhjaGFyICpkYXRhLCBzaXplX3QgbGVuKTsKK3ZvaWQgKmJsb2NrZGF0YV9yZXRyaWV2ZShzdHJ1Y3QgYmxvY2tkYXRhICpibG9jaywgc2l6ZV90IGxlbiwgdm9pZCAqZGF0YSk7Cit2b2lkIGJsb2NrZGF0YV9mcmVlKHN0cnVjdCBibG9ja2RhdGEgKmJsb2Nrcyk7CisjZW5kaWYKKworLyogZG9tYWluLmMgKi8KK2NoYXIgKmdldF9kb21haW4oc3RydWN0IGluX2FkZHIgYWRkcik7CisjaWZkZWYgSEFWRV9JUFY2CitjaGFyICpnZXRfZG9tYWluNihzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpOworI2VuZGlmCitpbnQgaXNfbmFtZV9zeW50aGV0aWMoaW50IGZsYWdzLCBjaGFyICpuYW1lLCBzdHJ1Y3QgYWxsX2FkZHIgKmFkZHIpOworaW50IGlzX3Jldl9zeW50aChpbnQgZmxhZywgc3RydWN0IGFsbF9hZGRyICphZGRyLCBjaGFyICpuYW1lKTsKKworLyogcmZjMTAzNS5jICovCitpbnQgZXh0cmFjdF9uYW1lKHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIsIHNpemVfdCBwbGVuLCB1bnNpZ25lZCBjaGFyICoqcHAsIAorICAgICAgICAgICAgICAgICBjaGFyICpuYW1lLCBpbnQgaXNFeHRyYWN0LCBpbnQgZXh0cmFieXRlcyk7Cit1bnNpZ25lZCBjaGFyICpza2lwX25hbWUodW5zaWduZWQgY2hhciAqYW5zcCwgc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90IHBsZW4sIGludCBleHRyYWJ5dGVzKTsKK3Vuc2lnbmVkIGNoYXIgKnNraXBfcXVlc3Rpb25zKHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIsIHNpemVfdCBwbGVuKTsKK3Vuc2lnbmVkIGNoYXIgKnNraXBfc2VjdGlvbih1bnNpZ25lZCBjaGFyICphbnNwLCBpbnQgY291bnQsIHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIsIHNpemVfdCBwbGVuKTsKK3Vuc2lnbmVkIGludCBleHRyYWN0X3JlcXVlc3Qoc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90IHFsZW4sIAorCQkJICAgICAgIGNoYXIgKm5hbWUsIHVuc2lnbmVkIHNob3J0ICp0eXBlcCk7CitzaXplX3Qgc2V0dXBfcmVwbHkoc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90ICBxbGVuLAorCQkgICBzdHJ1Y3QgYWxsX2FkZHIgKmFkZHJwLCB1bnNpZ25lZCBpbnQgZmxhZ3MsCisJCSAgIHVuc2lnbmVkIGxvbmcgdHRsKTsKK2ludCBleHRyYWN0X2FkZHJlc3NlcyhzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBzaXplX3QgcWxlbiwgY2hhciAqbmFtZSwKKwkJICAgICAgdGltZV90IG5vdywgY2hhciAqKmlwc2V0cywgaW50IGlzX3NpZ24sIGludCBjaGVja19yZWJpbmQsCisJCSAgICAgIGludCBub19jYWNoZV9kbnNzZWMsIGludCBzZWN1cmUsIGludCAqZG9jdG9yZWQpOworc2l6ZV90IGFuc3dlcl9yZXF1ZXN0KHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIsIGNoYXIgKmxpbWl0LCBzaXplX3QgcWxlbiwgIAorCQkgICAgICBzdHJ1Y3QgaW5fYWRkciBsb2NhbF9hZGRyLCBzdHJ1Y3QgaW5fYWRkciBsb2NhbF9uZXRtYXNrLCAKKwkJICAgICAgdGltZV90IG5vdywgaW50IGFkX3JlcWQsIGludCBkb19iaXQsIGludCBoYXZlX3BzZXVkb2hlYWRlcik7CitpbnQgY2hlY2tfZm9yX2JvZ3VzX3dpbGRjYXJkKHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIsIHNpemVfdCBxbGVuLCBjaGFyICpuYW1lLCAKKwkJCSAgICAgc3RydWN0IGJvZ3VzX2FkZHIgKmJhZGRyLCB0aW1lX3Qgbm93KTsKK2ludCBjaGVja19mb3JfaWdub3JlZF9hZGRyZXNzKHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIsIHNpemVfdCBxbGVuLCBzdHJ1Y3QgYm9ndXNfYWRkciAqYmFkZHIpOworaW50IGNoZWNrX2Zvcl9sb2NhbF9kb21haW4oY2hhciAqbmFtZSwgdGltZV90IG5vdyk7Cit1bnNpZ25lZCBpbnQgcXVlc3Rpb25zX2NyYyhzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBzaXplX3QgcGxlbiwgY2hhciAqbmFtZSk7CitzaXplX3QgcmVzaXplX3BhY2tldChzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBzaXplX3QgcGxlbiwgCisJCSAgdW5zaWduZWQgY2hhciAqcGhlYWRlciwgc2l6ZV90IGhsZW4pOworaW50IGFkZF9yZXNvdXJjZV9yZWNvcmQoc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgY2hhciAqbGltaXQsIGludCAqdHJ1bmNwLAorCQkJaW50IG5hbWVvZmZzZXQsIHVuc2lnbmVkIGNoYXIgKipwcCwgdW5zaWduZWQgbG9uZyB0dGwsIAorCQkJaW50ICpvZmZzZXQsIHVuc2lnbmVkIHNob3J0IHR5cGUsIHVuc2lnbmVkIHNob3J0IGNsYXNzLCBjaGFyICpmb3JtYXQsIC4uLik7Cit1bnNpZ25lZCBjaGFyICpza2lwX3F1ZXN0aW9ucyhzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBzaXplX3QgcGxlbik7CitpbnQgZXh0cmFjdF9uYW1lKHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIsIHNpemVfdCBwbGVuLCB1bnNpZ25lZCBjaGFyICoqcHAsIAorCQkgY2hhciAqbmFtZSwgaW50IGlzRXh0cmFjdCwgaW50IGV4dHJhYnl0ZXMpOworaW50IGluX2FycGFfbmFtZV8yX2FkZHIoY2hhciAqbmFtZWluLCBzdHJ1Y3QgYWxsX2FkZHIgKmFkZHJwKTsKK2ludCBwcml2YXRlX25ldChzdHJ1Y3QgaW5fYWRkciBhZGRyLCBpbnQgYmFuX2xvY2FsaG9zdCk7CisKKy8qIGF1dGguYyAqLworI2lmZGVmIEhBVkVfQVVUSAorc2l6ZV90IGFuc3dlcl9hdXRoKHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIsIGNoYXIgKmxpbWl0LCBzaXplX3QgcWxlbiwgCisJCSAgIHRpbWVfdCBub3csIHVuaW9uIG15c29ja2FkZHIgKnBlZXJfYWRkciwgaW50IGxvY2FsX3F1ZXJ5LAorCQkgICBpbnQgZG9fYml0LCBpbnQgaGF2ZV9wc2V1ZG9oZWFkZXIpOworaW50IGluX3pvbmUoc3RydWN0IGF1dGhfem9uZSAqem9uZSwgY2hhciAqbmFtZSwgY2hhciAqKmN1dCk7CisjZW5kaWYKKworLyogZG5zc2VjLmMgKi8KK3NpemVfdCBkbnNzZWNfZ2VuZXJhdGVfcXVlcnkoc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgdW5zaWduZWQgY2hhciAqZW5kLCBjaGFyICpuYW1lLCBpbnQgY2xhc3MsIGludCB0eXBlLCB1bmlvbiBteXNvY2thZGRyICphZGRyLCBpbnQgZWRuc19wa3Rzeik7CitpbnQgZG5zc2VjX3ZhbGlkYXRlX2J5X2RzKHRpbWVfdCBub3csIHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIsIHNpemVfdCBwbGVuLCBjaGFyICpuYW1lLCBjaGFyICprZXluYW1lLCBpbnQgY2xhc3MpOworaW50IGRuc3NlY192YWxpZGF0ZV9kcyh0aW1lX3Qgbm93LCBzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBzaXplX3QgcGxlbiwgY2hhciAqbmFtZSwgY2hhciAqa2V5bmFtZSwgaW50IGNsYXNzKTsKK2ludCBkbnNzZWNfdmFsaWRhdGVfcmVwbHkodGltZV90IG5vdywgc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90IHBsZW4sIGNoYXIgKm5hbWUsIGNoYXIgKmtleW5hbWUsIGludCAqY2xhc3MsCisJCQkgIGludCBjaGVja191bnNpZ25lZCwgaW50ICpuZWdhbnN3ZXIsIGludCAqbm9ucyk7CitpbnQgZG5za2V5X2tleXRhZyhpbnQgYWxnLCBpbnQgZmxhZ3MsIHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbik7CitzaXplX3QgZmlsdGVyX3Jyc2lncyhzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBzaXplX3QgcGxlbik7Cit1bnNpZ25lZCBjaGFyKiBoYXNoX3F1ZXN0aW9ucyhzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBzaXplX3QgcGxlbiwgY2hhciAqbmFtZSk7CitpbnQgc2V0dXBfdGltZXN0YW1wKHZvaWQpOworCisvKiB1dGlsLmMgKi8KK3ZvaWQgcmFuZF9pbml0KHZvaWQpOwordW5zaWduZWQgc2hvcnQgcmFuZDE2KHZvaWQpOwordTMyIHJhbmQzMih2b2lkKTsKK3U2NCByYW5kNjQodm9pZCk7CitpbnQgbGVnYWxfaG9zdG5hbWUoY2hhciAqbmFtZSk7CitjaGFyICpjYW5vbmljYWxpc2UoY2hhciAqaW4sIGludCAqbm9tZW0pOwordW5zaWduZWQgY2hhciAqZG9fcmZjMTAzNV9uYW1lKHVuc2lnbmVkIGNoYXIgKnAsIGNoYXIgKnN2YWwsIGNoYXIgKmxpbWl0KTsKK3ZvaWQgKnNhZmVfbWFsbG9jKHNpemVfdCBzaXplKTsKK3ZvaWQgc2FmZV9waXBlKGludCAqZmQsIGludCByZWFkX25vYmxvY2spOwordm9pZCAqd2hpbmVfbWFsbG9jKHNpemVfdCBzaXplKTsKK2ludCBzYV9sZW4odW5pb24gbXlzb2NrYWRkciAqYWRkcik7CitpbnQgc29ja2FkZHJfaXNlcXVhbCh1bmlvbiBteXNvY2thZGRyICpzMSwgdW5pb24gbXlzb2NrYWRkciAqczIpOworaW50IGhvc3RuYW1lX2lzZXF1YWwoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYik7Cit0aW1lX3QgZG5zbWFzcV90aW1lKHZvaWQpOworaW50IG5ldG1hc2tfbGVuZ3RoKHN0cnVjdCBpbl9hZGRyIG1hc2spOworaW50IGlzX3NhbWVfbmV0KHN0cnVjdCBpbl9hZGRyIGEsIHN0cnVjdCBpbl9hZGRyIGIsIHN0cnVjdCBpbl9hZGRyIG1hc2spOworI2lmZGVmIEhBVkVfSVBWNgoraW50IGlzX3NhbWVfbmV0NihzdHJ1Y3QgaW42X2FkZHIgKmEsIHN0cnVjdCBpbjZfYWRkciAqYiwgaW50IHByZWZpeGxlbik7Cit1NjQgYWRkcjZwYXJ0KHN0cnVjdCBpbjZfYWRkciAqYWRkcik7Cit2b2lkIHNldGFkZHI2cGFydChzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsIHU2NCBob3N0KTsKKyNlbmRpZgoraW50IHJldHJ5X3NlbmQoc3NpemVfdCByYyk7Cit2b2lkIHByZXR0eXByaW50X3RpbWUoY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgdCk7CitpbnQgcHJldHR5cHJpbnRfYWRkcih1bmlvbiBteXNvY2thZGRyICphZGRyLCBjaGFyICpidWYpOworaW50IHBhcnNlX2hleChjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LCBpbnQgbWF4bGVuLCAKKwkgICAgICB1bnNpZ25lZCBpbnQgKndpbGRjYXJkX21hc2ssIGludCAqbWFjX3R5cGUpOworaW50IG1lbWNtcF9tYXNrZWQodW5zaWduZWQgY2hhciAqYSwgdW5zaWduZWQgY2hhciAqYiwgaW50IGxlbiwgCisJCSAgdW5zaWduZWQgaW50IG1hc2spOworaW50IGV4cGFuZF9idWYoc3RydWN0IGlvdmVjICppb3YsIHNpemVfdCBzaXplKTsKK2NoYXIgKnByaW50X21hYyhjaGFyICpidWZmLCB1bnNpZ25lZCBjaGFyICptYWMsIGludCBsZW4pOworaW50IHJlYWRfd3JpdGUoaW50IGZkLCB1bnNpZ25lZCBjaGFyICpwYWNrZXQsIGludCBzaXplLCBpbnQgcncpOworCitpbnQgd2lsZGNhcmRfbWF0Y2goY29uc3QgY2hhciogd2lsZGNhcmQsIGNvbnN0IGNoYXIqIG1hdGNoKTsKK2ludCB3aWxkY2FyZF9tYXRjaG4oY29uc3QgY2hhciogd2lsZGNhcmQsIGNvbnN0IGNoYXIqIG1hdGNoLCBpbnQgbnVtKTsKKworLyogbG9nLmMgKi8KK3ZvaWQgZGllKGNoYXIgKm1lc3NhZ2UsIGNoYXIgKmFyZzEsIGludCBleGl0X2NvZGUpOworaW50IGxvZ19zdGFydChzdHJ1Y3QgcGFzc3dkICplbnRfcHcsIGludCBlcnJmZCk7CitpbnQgbG9nX3Jlb3BlbihjaGFyICpsb2dfZmlsZSk7CisKK3ZvaWQgbXlfc3lzbG9nKGludCBwcmlvcml0eSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOworCit2b2lkIHNldF9sb2dfd3JpdGVyKHZvaWQpOwordm9pZCBjaGVja19sb2dfd3JpdGVyKGludCBmb3JjZSk7Cit2b2lkIGZsdXNoX2xvZyh2b2lkKTsKKworLyogb3B0aW9uLmMgKi8KK3ZvaWQgcmVhZF9vcHRzIChpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGNoYXIgKmNvbXBpbGVfb3B0cyk7CitjaGFyICpvcHRpb25fc3RyaW5nKGludCBwcm90LCB1bnNpZ25lZCBpbnQgb3B0LCB1bnNpZ25lZCBjaGFyICp2YWwsIAorCQkgICAgaW50IG9wdF9sZW4sIGNoYXIgKmJ1ZiwgaW50IGJ1Zl9sZW4pOwordm9pZCByZXJlYWRfZGhjcCh2b2lkKTsKK3ZvaWQgcmVhZF9zZXJ2ZXJzX2ZpbGUodm9pZCk7Cit2b2lkIHNldF9vcHRpb25fYm9vbCh1bnNpZ25lZCBpbnQgb3B0KTsKK3ZvaWQgcmVzZXRfb3B0aW9uX2Jvb2wodW5zaWduZWQgaW50IG9wdCk7CitzdHJ1Y3QgaG9zdHNmaWxlICpleHBhbmRfZmlsZWxpc3Qoc3RydWN0IGhvc3RzZmlsZSAqbGlzdCk7CitjaGFyICpwYXJzZV9zZXJ2ZXIoY2hhciAqYXJnLCB1bmlvbiBteXNvY2thZGRyICphZGRyLCAKKwkJICAgdW5pb24gbXlzb2NrYWRkciAqc291cmNlX2FkZHIsIGNoYXIgKmludGVyZmFjZSwgaW50ICpmbGFncyk7CitpbnQgb3B0aW9uX3JlYWRfZHluZmlsZShjaGFyICpmaWxlLCBpbnQgZmxhZ3MpOworCisvKiBmb3J3YXJkLmMgKi8KK3ZvaWQgcmVwbHlfcXVlcnkoaW50IGZkLCBpbnQgZmFtaWx5LCB0aW1lX3Qgbm93KTsKK3ZvaWQgcmVjZWl2ZV9xdWVyeShzdHJ1Y3QgbGlzdGVuZXIgKmxpc3RlbiwgdGltZV90IG5vdyk7Cit1bnNpZ25lZCBjaGFyICp0Y3BfcmVxdWVzdChpbnQgY29uZmQsIHRpbWVfdCBub3csCisJCQkgICB1bmlvbiBteXNvY2thZGRyICpsb2NhbF9hZGRyLCBzdHJ1Y3QgaW5fYWRkciBuZXRtYXNrLCBpbnQgYXV0aF9kbnMpOwordm9pZCBzZXJ2ZXJfZ29uZShzdHJ1Y3Qgc2VydmVyICpzZXJ2ZXIpOworc3RydWN0IGZyZWMgKmdldF9uZXdfZnJlYyh0aW1lX3Qgbm93LCBpbnQgKndhaXQsIGludCBmb3JjZSk7CitpbnQgc2VuZF9mcm9tKGludCBmZCwgaW50IG5vd2lsZCwgY2hhciAqcGFja2V0LCBzaXplX3QgbGVuLCAKKwkgICAgICAgdW5pb24gbXlzb2NrYWRkciAqdG8sIHN0cnVjdCBhbGxfYWRkciAqc291cmNlLAorCSAgICAgICB1bnNpZ25lZCBpbnQgaWZhY2UpOwordm9pZCByZXNlbmRfcXVlcnkodm9pZCk7CitzdHJ1Y3QgcmFuZGZkICphbGxvY2F0ZV9yZmQoaW50IGZhbWlseSk7Cit2b2lkIGZyZWVfcmZkKHN0cnVjdCByYW5kZmQgKnJmZCk7CisKKy8qIG5ldHdvcmsuYyAqLworaW50IGluZGV4dG9uYW1lKGludCBmZCwgaW50IGluZGV4LCBjaGFyICpuYW1lKTsKK2ludCBsb2NhbF9iaW5kKGludCBmZCwgdW5pb24gbXlzb2NrYWRkciAqYWRkciwgY2hhciAqaW50bmFtZSwgaW50IGlzX3RjcCk7CitpbnQgcmFuZG9tX3NvY2soaW50IGZhbWlseSk7Cit2b2lkIHByZV9hbGxvY2F0ZV9zZmRzKHZvaWQpOworaW50IHJlbG9hZF9zZXJ2ZXJzKGNoYXIgKmZuYW1lKTsKK3ZvaWQgbWFya19zZXJ2ZXJzKGludCBmbGFnKTsKK3ZvaWQgY2xlYW51cF9zZXJ2ZXJzKHZvaWQpOwordm9pZCBhZGRfdXBkYXRlX3NlcnZlcihpbnQgZmxhZ3MsCisJCSAgICAgICB1bmlvbiBteXNvY2thZGRyICphZGRyLAorCQkgICAgICAgdW5pb24gbXlzb2NrYWRkciAqc291cmNlX2FkZHIsCisJCSAgICAgICBjb25zdCBjaGFyICppbnRlcmZhY2UsCisJCSAgICAgICBjb25zdCBjaGFyICpkb21haW4pOwordm9pZCBjaGVja19zZXJ2ZXJzKHZvaWQpOworaW50IGVudW1lcmF0ZV9pbnRlcmZhY2VzKGludCByZXNldCk7Cit2b2lkIGNyZWF0ZV93aWxkY2FyZF9saXN0ZW5lcnModm9pZCk7Cit2b2lkIGNyZWF0ZV9ib3VuZF9saXN0ZW5lcnMoaW50IGRpZW5vdyk7Cit2b2lkIHdhcm5fYm91bmRfbGlzdGVuZXJzKHZvaWQpOwordm9pZCB3YXJuX3dpbGRfbGFiZWxzKHZvaWQpOwordm9pZCB3YXJuX2ludF9uYW1lcyh2b2lkKTsKK2ludCBpc19kYWRfbGlzdGVuZXJzKHZvaWQpOworaW50IGlmYWNlX2NoZWNrKGludCBmYW1pbHksIHN0cnVjdCBhbGxfYWRkciAqYWRkciwgY2hhciAqbmFtZSwgaW50ICphdXRoKTsKK2ludCBsb29wYmFja19leGNlcHRpb24oaW50IGZkLCBpbnQgZmFtaWx5LCBzdHJ1Y3QgYWxsX2FkZHIgKmFkZHIsIGNoYXIgKm5hbWUpOworaW50IGxhYmVsX2V4Y2VwdGlvbihpbnQgaW5kZXgsIGludCBmYW1pbHksIHN0cnVjdCBhbGxfYWRkciAqYWRkcik7CitpbnQgZml4X2ZkKGludCBmZCk7CitpbnQgdGNwX2ludGVyZmFjZShpbnQgZmQsIGludCBhZik7CisjaWZkZWYgSEFWRV9JUFY2CitpbnQgc2V0X2lwdjZwa3RpbmZvKGludCBmZCk7CisjZW5kaWYKKyNpZmRlZiBIQVZFX0RIQ1A2Cit2b2lkIGpvaW5fbXVsdGljYXN0KGludCBkaWVub3cpOworI2VuZGlmCisjaWYgZGVmaW5lZChIQVZFX0xJTlVYX05FVFdPUkspIHx8IGRlZmluZWQoSEFWRV9CU0RfTkVUV09SSykKK3ZvaWQgbmV3YWRkcmVzcyh0aW1lX3Qgbm93KTsKKyNlbmRpZgorCisKKy8qIGRoY3AuYyAqLworI2lmZGVmIEhBVkVfREhDUAordm9pZCBkaGNwX2luaXQodm9pZCk7Cit2b2lkIGRoY3BfcGFja2V0KHRpbWVfdCBub3csIGludCBweGVfZmQpOworc3RydWN0IGRoY3BfY29udGV4dCAqYWRkcmVzc19hdmFpbGFibGUoc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dCwgCisJCQkJICAgICAgIHN0cnVjdCBpbl9hZGRyIHRhZGRyLAorCQkJCSAgICAgICBzdHJ1Y3QgZGhjcF9uZXRpZCAqbmV0aWRzKTsKK3N0cnVjdCBkaGNwX2NvbnRleHQgKm5hcnJvd19jb250ZXh0KHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQsIAorCQkJCSAgICBzdHJ1Y3QgaW5fYWRkciB0YWRkciwKKwkJCQkgICAgc3RydWN0IGRoY3BfbmV0aWQgKm5ldGlkcyk7CitzdHJ1Y3QgcGluZ19yZXN1bHQgKmRvX2ljbXBfcGluZyh0aW1lX3Qgbm93LCBzdHJ1Y3QgaW5fYWRkciBhZGRyLAorCQkJCSB1bnNpZ25lZCBpbnQgaGFzaCwgaW50IGxvb3BiYWNrKTsKK2ludCBhZGRyZXNzX2FsbG9jYXRlKHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQsCisJCSAgICAgc3RydWN0IGluX2FkZHIgKmFkZHJwLCB1bnNpZ25lZCBjaGFyICpod2FkZHIsIGludCBod19sZW4sCisJCSAgICAgc3RydWN0IGRoY3BfbmV0aWQgKm5ldGlkcywgdGltZV90IG5vdywgaW50IGxvb3BiYWNrKTsKK3ZvaWQgZGhjcF9yZWFkX2V0aGVycyh2b2lkKTsKK3N0cnVjdCBkaGNwX2NvbmZpZyAqY29uZmlnX2ZpbmRfYnlfYWRkcmVzcyhzdHJ1Y3QgZGhjcF9jb25maWcgKmNvbmZpZ3MsIHN0cnVjdCBpbl9hZGRyIGFkZHIpOworY2hhciAqaG9zdF9mcm9tX2RucyhzdHJ1Y3QgaW5fYWRkciBhZGRyKTsKKyNlbmRpZgorCisvKiBsZWFzZS5jICovCisjaWZkZWYgSEFWRV9ESENQCit2b2lkIGxlYXNlX3VwZGF0ZV9maWxlKHRpbWVfdCBub3cpOwordm9pZCBsZWFzZV91cGRhdGVfZG5zKGludCBmb3JjZSk7Cit2b2lkIGxlYXNlX2luaXQodGltZV90IG5vdyk7CitzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2U0X2FsbG9jYXRlKHN0cnVjdCBpbl9hZGRyIGFkZHIpOworI2lmZGVmIEhBVkVfREhDUDYKK3N0cnVjdCBkaGNwX2xlYXNlICpsZWFzZTZfYWxsb2NhdGUoc3RydWN0IGluNl9hZGRyICphZGRycCwgaW50IGxlYXNlX3R5cGUpOworc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlNl9maW5kKHVuc2lnbmVkIGNoYXIgKmNsaWQsIGludCBjbGlkX2xlbiwgCisJCQkgICAgICAgaW50IGxlYXNlX3R5cGUsIGludCBpYWlkLCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpOwordm9pZCBsZWFzZTZfcmVzZXQodm9pZCk7CitzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2U2X2ZpbmRfYnlfY2xpZW50KHN0cnVjdCBkaGNwX2xlYXNlICpmaXJzdCwgaW50IGxlYXNlX3R5cGUsIHVuc2lnbmVkIGNoYXIgKmNsaWQsIGludCBjbGlkX2xlbiwgaW50IGlhaWQpOworc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlNl9maW5kX2J5X2FkZHIoc3RydWN0IGluNl9hZGRyICpuZXQsIGludCBwcmVmaXgsIHU2NCBhZGRyKTsKK3U2NCBsZWFzZV9maW5kX21heF9hZGRyNihzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0KTsKK3ZvaWQgbGVhc2VfcGluZ19yZXBseShzdHJ1Y3QgaW42X2FkZHIgKnNlbmRlciwgdW5zaWduZWQgY2hhciAqcGFja2V0LCBjaGFyICppbnRlcmZhY2UpOwordm9pZCBsZWFzZV91cGRhdGVfc2xhYWModGltZV90IG5vdyk7Cit2b2lkIGxlYXNlX3NldF9pYWlkKHN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZSwgaW50IGlhaWQpOwordm9pZCBsZWFzZV9tYWtlX2R1aWQodGltZV90IG5vdyk7CisjZW5kaWYKK3ZvaWQgbGVhc2Vfc2V0X2h3YWRkcihzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2UsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmh3YWRkciwKKwkJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY2xpZCwgaW50IGh3X2xlbiwgaW50IGh3X3R5cGUsCisJCSAgICAgIGludCBjbGlkX2xlbiwgdGltZV90IG5vdywgaW50IGZvcmNlKTsKK3ZvaWQgbGVhc2Vfc2V0X2hvc3RuYW1lKHN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZSwgY29uc3QgY2hhciAqbmFtZSwgaW50IGF1dGgsIGNoYXIgKmRvbWFpbiwgY2hhciAqY29uZmlnX2RvbWFpbik7Cit2b2lkIGxlYXNlX3NldF9leHBpcmVzKHN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZSwgdW5zaWduZWQgaW50IGxlbiwgdGltZV90IG5vdyk7Cit2b2lkIGxlYXNlX3NldF9pbnRlcmZhY2Uoc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlLCBpbnQgaW50ZXJmYWNlLCB0aW1lX3Qgbm93KTsKK3N0cnVjdCBkaGNwX2xlYXNlICpsZWFzZV9maW5kX2J5X2NsaWVudCh1bnNpZ25lZCBjaGFyICpod2FkZHIsIGludCBod19sZW4sIGludCBod190eXBlLCAgCisJCQkJCXVuc2lnbmVkIGNoYXIgKmNsaWQsIGludCBjbGlkX2xlbik7CitzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2VfZmluZF9ieV9hZGRyKHN0cnVjdCBpbl9hZGRyIGFkZHIpOworc3RydWN0IGluX2FkZHIgbGVhc2VfZmluZF9tYXhfYWRkcihzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0KTsKK3ZvaWQgbGVhc2VfcHJ1bmUoc3RydWN0IGRoY3BfbGVhc2UgKnRhcmdldCwgdGltZV90IG5vdyk7Cit2b2lkIGxlYXNlX3VwZGF0ZV9mcm9tX2NvbmZpZ3Modm9pZCk7CitpbnQgZG9fc2NyaXB0X3J1bih0aW1lX3Qgbm93KTsKK3ZvaWQgcmVydW5fc2NyaXB0cyh2b2lkKTsKK3ZvaWQgbGVhc2VfZmluZF9pbnRlcmZhY2VzKHRpbWVfdCBub3cpOworI2lmZGVmIEhBVkVfU0NSSVBUCit2b2lkIGxlYXNlX2FkZF9leHRyYWRhdGEoc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlLCB1bnNpZ25lZCBjaGFyICpkYXRhLCAKKwkJCSB1bnNpZ25lZCBpbnQgbGVuLCBpbnQgZGVsaW0pOworI2VuZGlmCisjZW5kaWYKKworLyogcmZjMjEzMS5jICovCisjaWZkZWYgSEFWRV9ESENQCitzaXplX3QgZGhjcF9yZXBseShzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0LCBjaGFyICppZmFjZV9uYW1lLCBpbnQgaW50X2luZGV4LAorCQkgIHNpemVfdCBzeiwgdGltZV90IG5vdywgaW50IHVuaWNhc3RfZGVzdCwgaW50IGxvb3BiYWNrLAorCQkgIGludCAqaXNfaW5mb3JtLCBpbnQgcHhlLCBzdHJ1Y3QgaW5fYWRkciBmYWxsYmFjaywgdGltZV90IHJlY3Z0aW1lKTsKK3Vuc2lnbmVkIGNoYXIgKmV4dGVuZGVkX2h3YWRkcihpbnQgaHd0eXBlLCBpbnQgaHdsZW4sIHVuc2lnbmVkIGNoYXIgKmh3YWRkciwgCisJCQkgICAgICAgaW50IGNsaWRfbGVuLCB1bnNpZ25lZCBjaGFyICpjbGlkLCBpbnQgKmxlbl9vdXQpOworI2VuZGlmCisKKy8qIGRuc21hc3EuYyAqLworI2lmZGVmIEhBVkVfREhDUAoraW50IG1ha2VfaWNtcF9zb2NrKHZvaWQpOworaW50IGljbXBfcGluZyhzdHJ1Y3QgaW5fYWRkciBhZGRyKTsKK2ludCBkZWxheV9kaGNwKHRpbWVfdCBzdGFydCwgaW50IHNlYywgaW50IGZkLCB1aW50MzJfdCBhZGRyLCB1bnNpZ25lZCBzaG9ydCBpZCk7CisjZW5kaWYKK3ZvaWQgcXVldWVfZXZlbnQoaW50IGV2ZW50KTsKK3ZvaWQgc2VuZF9hbGFybSh0aW1lX3QgZXZlbnQsIHRpbWVfdCBub3cpOwordm9pZCBzZW5kX2V2ZW50KGludCBmZCwgaW50IGV2ZW50LCBpbnQgZGF0YSwgY2hhciAqbXNnKTsKK3ZvaWQgY2xlYXJfY2FjaGVfYW5kX3JlbG9hZCh0aW1lX3Qgbm93KTsKKworLyogbmV0bGluay5jICovCisjaWZkZWYgSEFWRV9MSU5VWF9ORVRXT1JLCit2b2lkIG5ldGxpbmtfaW5pdCh2b2lkKTsKK3ZvaWQgbmV0bGlua19tdWx0aWNhc3Qodm9pZCk7CisjZW5kaWYKKworLyogYnBmLmMgKi8KKyNpZmRlZiBIQVZFX0JTRF9ORVRXT1JLCit2b2lkIGluaXRfYnBmKHZvaWQpOwordm9pZCBzZW5kX3ZpYV9icGYoc3RydWN0IGRoY3BfcGFja2V0ICptZXNzLCBzaXplX3QgbGVuLAorCQkgIHN0cnVjdCBpbl9hZGRyIGlmYWNlX2FkZHIsIHN0cnVjdCBpZnJlcSAqaWZyKTsKK3ZvaWQgcm91dGVfaW5pdCh2b2lkKTsKK3ZvaWQgcm91dGVfc29jayh2b2lkKTsKKyNlbmRpZgorCisvKiBicGYuYyBvciBuZXRsaW5rLmMgKi8KK2ludCBpZmFjZV9lbnVtZXJhdGUoaW50IGZhbWlseSwgdm9pZCAqcGFybSwgaW50IChjYWxsYmFjaykoKSk7CisKKy8qIGRidXMuYyAqLworI2lmZGVmIEhBVkVfREJVUworY2hhciAqZGJ1c19pbml0KHZvaWQpOwordm9pZCBjaGVja19kYnVzX2xpc3RlbmVycyh2b2lkKTsKK3ZvaWQgc2V0X2RidXNfbGlzdGVuZXJzKHZvaWQpOworIyAgaWZkZWYgSEFWRV9ESENQCit2b2lkIGVtaXRfZGJ1c19zaWduYWwoaW50IGFjdGlvbiwgc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlLCBjaGFyICpob3N0bmFtZSk7CisjICBlbmRpZgorI2VuZGlmCisKKy8qIGlwc2V0LmMgKi8KKyNpZmRlZiBIQVZFX0lQU0VUCit2b2lkIGlwc2V0X2luaXQodm9pZCk7CitpbnQgYWRkX3RvX2lwc2V0KGNvbnN0IGNoYXIgKnNldG5hbWUsIGNvbnN0IHN0cnVjdCBhbGxfYWRkciAqaXBhZGRyLCBpbnQgZmxhZ3MsIGludCByZW1vdmUpOworI2VuZGlmCisKKy8qIGhlbHBlci5jICovCisjaWYgZGVmaW5lZChIQVZFX1NDUklQVCkKK2ludCBjcmVhdGVfaGVscGVyKGludCBldmVudF9mZCwgaW50IGVycl9mZCwgdWlkX3QgdWlkLCBnaWRfdCBnaWQsIGxvbmcgbWF4X2ZkKTsKK3ZvaWQgaGVscGVyX3dyaXRlKHZvaWQpOwordm9pZCBxdWV1ZV9zY3JpcHQoaW50IGFjdGlvbiwgc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlLCAKKwkJICBjaGFyICpob3N0bmFtZSwgdGltZV90IG5vdyk7CisjaWZkZWYgSEFWRV9URlRQCit2b2lkIHF1ZXVlX3RmdHAob2ZmX3QgZmlsZV9sZW4sIGNoYXIgKmZpbGVuYW1lLCB1bmlvbiBteXNvY2thZGRyICpwZWVyKTsKKyNlbmRpZgordm9pZCBxdWV1ZV9hcnAoaW50IGFjdGlvbiwgdW5zaWduZWQgY2hhciAqbWFjLCBpbnQgbWFjbGVuLAorCSAgICAgICBpbnQgZmFtaWx5LCBzdHJ1Y3QgYWxsX2FkZHIgKmFkZHIpOworaW50IGhlbHBlcl9idWZfZW1wdHkodm9pZCk7CisjZW5kaWYKKworLyogdGZ0cC5jICovCisjaWZkZWYgSEFWRV9URlRQCit2b2lkIHRmdHBfcmVxdWVzdChzdHJ1Y3QgbGlzdGVuZXIgKmxpc3RlbiwgdGltZV90IG5vdyk7Cit2b2lkIGNoZWNrX3RmdHBfbGlzdGVuZXJzKHRpbWVfdCBub3cpOworaW50IGRvX3RmdHBfc2NyaXB0X3J1bih2b2lkKTsKKyNlbmRpZgorCisvKiBjb25udHJhY2suYyAqLworI2lmZGVmIEhBVkVfQ09OTlRSQUNLCitpbnQgZ2V0X2luY29taW5nX21hcmsodW5pb24gbXlzb2NrYWRkciAqcGVlcl9hZGRyLCBzdHJ1Y3QgYWxsX2FkZHIgKmxvY2FsX2FkZHIsCisJCSAgICAgIGludCBpc3RjcCwgdW5zaWduZWQgaW50ICptYXJrcCk7CisjZW5kaWYKKworLyogZGhjcDYuYyAqLworI2lmZGVmIEhBVkVfREhDUDYKK3ZvaWQgZGhjcDZfaW5pdCh2b2lkKTsKK3ZvaWQgZGhjcDZfcGFja2V0KHRpbWVfdCBub3cpOworc3RydWN0IGRoY3BfY29udGV4dCAqYWRkcmVzczZfYWxsb2NhdGUoc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dCwgIHVuc2lnbmVkIGNoYXIgKmNsaWQsIGludCBjbGlkX2xlbiwgaW50IHRlbXBfYWRkciwKKwkJCQkgICAgICAgaW50IGlhaWQsIGludCBzZXJpYWwsIHN0cnVjdCBkaGNwX25ldGlkICpuZXRpZHMsIGludCBwbGFpbl9yYW5nZSwgc3RydWN0IGluNl9hZGRyICphbnMpOworaW50IGNvbmZpZ192YWxpZChzdHJ1Y3QgZGhjcF9jb25maWcgKmNvbmZpZywgc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dCwgc3RydWN0IGluNl9hZGRyICphZGRyKTsKK3N0cnVjdCBkaGNwX2NvbnRleHQgKmFkZHJlc3M2X2F2YWlsYWJsZShzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0LCAKKwkJCQkJc3RydWN0IGluNl9hZGRyICp0YWRkciwKKwkJCQkJc3RydWN0IGRoY3BfbmV0aWQgKm5ldGlkcywKKwkJCQkJaW50IHBsYWluX3JhbmdlKTsKK3N0cnVjdCBkaGNwX2NvbnRleHQgKmFkZHJlc3M2X3ZhbGlkKHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQsIAorCQkJCSAgICBzdHJ1Y3QgaW42X2FkZHIgKnRhZGRyLAorCQkJCSAgICBzdHJ1Y3QgZGhjcF9uZXRpZCAqbmV0aWRzLAorCQkJCSAgICBpbnQgcGxhaW5fcmFuZ2UpOworc3RydWN0IGRoY3BfY29uZmlnICpjb25maWdfZmluZF9ieV9hZGRyZXNzNihzdHJ1Y3QgZGhjcF9jb25maWcgKmNvbmZpZ3MsIHN0cnVjdCBpbjZfYWRkciAqbmV0LCAKKwkJCQkJICAgIGludCBwcmVmaXgsIHU2NCBhZGRyKTsKK3ZvaWQgbWFrZV9kdWlkKHRpbWVfdCBub3cpOwordm9pZCBkaGNwX2NvbnN0cnVjdF9jb250ZXh0cyh0aW1lX3Qgbm93KTsKK3ZvaWQgZ2V0X2NsaWVudF9tYWMoc3RydWN0IGluNl9hZGRyICpjbGllbnQsIGludCBpZmFjZSwgdW5zaWduZWQgY2hhciAqbWFjLCAKKwkJICAgIHVuc2lnbmVkIGludCAqbWFjbGVucCwgdW5zaWduZWQgaW50ICptYWN0eXBlcCwgdGltZV90IG5vdyk7CisjZW5kaWYKKyAgCisvKiByZmMzMzE1LmMgKi8KKyNpZmRlZiBIQVZFX0RIQ1A2Cit1bnNpZ25lZCBzaG9ydCBkaGNwNl9yZXBseShzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0LCBpbnQgaW50ZXJmYWNlLCBjaGFyICppZmFjZV9uYW1lLCAgCisJCQkgICBzdHJ1Y3QgaW42X2FkZHIgKmZhbGxiYWNrLCBzdHJ1Y3QgaW42X2FkZHIgKmxsX2FkZHIsIHN0cnVjdCBpbjZfYWRkciAqdWxhX2FkZHIsCisJCQkgICBzaXplX3Qgc3osIHN0cnVjdCBpbjZfYWRkciAqY2xpZW50X2FkZHIsIHRpbWVfdCBub3cpOwordm9pZCByZWxheV91cHN0cmVhbTYoc3RydWN0IGRoY3BfcmVsYXkgKnJlbGF5LCBzc2l6ZV90IHN6LCBzdHJ1Y3QgaW42X2FkZHIgKnBlZXJfYWRkcmVzcywgCisJCSAgICAgdTMyIHNjb3BlX2lkLCB0aW1lX3Qgbm93KTsKKwordW5zaWduZWQgc2hvcnQgcmVsYXlfcmVwbHk2KCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpwZWVyLCBzc2l6ZV90IHN6LCBjaGFyICphcnJpdmFsX2ludGVyZmFjZSk7CisjZW5kaWYKKworLyogZGhjcC1jb21tb24uYyAqLworI2lmZGVmIEhBVkVfREhDUAordm9pZCBkaGNwX2NvbW1vbl9pbml0KHZvaWQpOworc3NpemVfdCByZWN2X2RoY3BfcGFja2V0KGludCBmZCwgc3RydWN0IG1zZ2hkciAqbXNnKTsKK3N0cnVjdCBkaGNwX25ldGlkICpydW5fdGFnX2lmKHN0cnVjdCBkaGNwX25ldGlkICp0YWdzKTsKK3N0cnVjdCBkaGNwX25ldGlkICpvcHRpb25fZmlsdGVyKHN0cnVjdCBkaGNwX25ldGlkICp0YWdzLCBzdHJ1Y3QgZGhjcF9uZXRpZCAqY29udGV4dF90YWdzLAorCQkJCSBzdHJ1Y3QgZGhjcF9vcHQgKm9wdHMpOworaW50IG1hdGNoX25ldGlkKHN0cnVjdCBkaGNwX25ldGlkICpjaGVjaywgc3RydWN0IGRoY3BfbmV0aWQgKnBvb2wsIGludCB0YWdub3RuZWVkZWQpOworY2hhciAqc3RyaXBfaG9zdG5hbWUoY2hhciAqaG9zdG5hbWUpOwordm9pZCBsb2dfdGFncyhzdHJ1Y3QgZGhjcF9uZXRpZCAqbmV0aWQsIHUzMiB4aWQpOworaW50IG1hdGNoX2J5dGVzKHN0cnVjdCBkaGNwX29wdCAqbywgdW5zaWduZWQgY2hhciAqcCwgaW50IGxlbik7Cit2b2lkIGRoY3BfdXBkYXRlX2NvbmZpZ3Moc3RydWN0IGRoY3BfY29uZmlnICpjb25maWdzKTsKK3ZvaWQgZGlzcGxheV9vcHRzKHZvaWQpOworaW50IGxvb2t1cF9kaGNwX29wdChpbnQgcHJvdCwgY2hhciAqbmFtZSk7CitpbnQgbG9va3VwX2RoY3BfbGVuKGludCBwcm90LCBpbnQgdmFsKTsKK2NoYXIgKm9wdGlvbl9zdHJpbmcoaW50IHByb3QsIHVuc2lnbmVkIGludCBvcHQsIHVuc2lnbmVkIGNoYXIgKnZhbCwgCisJCSAgICBpbnQgb3B0X2xlbiwgY2hhciAqYnVmLCBpbnQgYnVmX2xlbik7CitzdHJ1Y3QgZGhjcF9jb25maWcgKmZpbmRfY29uZmlnKHN0cnVjdCBkaGNwX2NvbmZpZyAqY29uZmlncywKKwkJCQlzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0LAorCQkJCXVuc2lnbmVkIGNoYXIgKmNsaWQsIGludCBjbGlkX2xlbiwKKwkJCQl1bnNpZ25lZCBjaGFyICpod2FkZHIsIGludCBod19sZW4sIAorCQkJCWludCBod190eXBlLCBjaGFyICpob3N0bmFtZSk7CitpbnQgY29uZmlnX2hhc19tYWMoc3RydWN0IGRoY3BfY29uZmlnICpjb25maWcsIHVuc2lnbmVkIGNoYXIgKmh3YWRkciwgaW50IGxlbiwgaW50IHR5cGUpOworI2lmZGVmIEhBVkVfTElOVVhfTkVUV09SSworY2hhciAqd2hpY2hkZXZpY2Uodm9pZCk7Cit2b2lkIGJpbmR0b2RldmljZShjaGFyICpkZXZpY2UsIGludCBmZCk7CisjZW5kaWYKKyMgIGlmZGVmIEhBVkVfREhDUDYKK3ZvaWQgZGlzcGxheV9vcHRzNih2b2lkKTsKKyMgIGVuZGlmCit2b2lkIGxvZ19jb250ZXh0KGludCBmYW1pbHksIHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQpOwordm9pZCBsb2dfcmVsYXkoaW50IGZhbWlseSwgc3RydWN0IGRoY3BfcmVsYXkgKnJlbGF5KTsKKyNlbmRpZgorCisvKiBvdXRwYWNrZXQuYyAqLworI2lmZGVmIEhBVkVfREhDUDYKK3ZvaWQgZW5kX29wdDYoaW50IGNvbnRhaW5lcik7Cit2b2lkIHJlc2V0X2NvdW50ZXIodm9pZCk7CitpbnQgc2F2ZV9jb3VudGVyKGludCBuZXd2YWwpOwordm9pZCAqZXhwYW5kKHNpemVfdCBoZWFkcm9vbSk7CitpbnQgbmV3X29wdDYoaW50IG9wdCk7Cit2b2lkICpwdXRfb3B0Nih2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKK3ZvaWQgcHV0X29wdDZfbG9uZyh1bnNpZ25lZCBpbnQgdmFsKTsKK3ZvaWQgcHV0X29wdDZfc2hvcnQodW5zaWduZWQgaW50IHZhbCk7Cit2b2lkIHB1dF9vcHQ2X2NoYXIodW5zaWduZWQgaW50IHZhbCk7Cit2b2lkIHB1dF9vcHQ2X3N0cmluZyhjaGFyICpzKTsKKyNlbmRpZgorCisvKiByYWR2LmMgKi8KKyNpZmRlZiBIQVZFX0RIQ1A2Cit2b2lkIHJhX2luaXQodGltZV90IG5vdyk7Cit2b2lkIGljbXA2X3BhY2tldCh0aW1lX3Qgbm93KTsKK3RpbWVfdCBwZXJpb2RpY19yYSh0aW1lX3Qgbm93KTsKK3ZvaWQgcmFfc3RhcnRfdW5zb2xpY2l0ZWQodGltZV90IG5vdywgc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dCk7CisjZW5kaWYKKworLyogc2xhYWMuYyAqLyAKKyNpZmRlZiBIQVZFX0RIQ1A2Cit2b2lkIHNsYWFjX2FkZF9hZGRycyhzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2UsIHRpbWVfdCBub3csIGludCBmb3JjZSk7Cit0aW1lX3QgcGVyaW9kaWNfc2xhYWModGltZV90IG5vdywgc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlcyk7Cit2b2lkIHNsYWFjX3BpbmdfcmVwbHkoc3RydWN0IGluNl9hZGRyICpzZW5kZXIsIHVuc2lnbmVkIGNoYXIgKnBhY2tldCwgY2hhciAqaW50ZXJmYWNlLCBzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2VzKTsKKyNlbmRpZgorCisvKiBsb29wLmMgKi8KKyNpZmRlZiBIQVZFX0xPT1AKK3ZvaWQgbG9vcF9zZW5kX3Byb2Jlcyh2b2lkKTsKK2ludCBkZXRlY3RfbG9vcChjaGFyICpxdWVyeSwgaW50IHR5cGUpOworI2VuZGlmCisKKy8qIGlub3RpZnkuYyAqLworI2lmZGVmIEhBVkVfSU5PVElGWQordm9pZCBpbm90aWZ5X2Ruc21hc3FfaW5pdCh2b2lkKTsKK2ludCBpbm90aWZ5X2NoZWNrKHRpbWVfdCBub3cpOwordm9pZCBzZXRfZHluYW1pY19pbm90aWZ5KGludCBmbGFnLCBpbnQgdG90YWxfc2l6ZSwgc3RydWN0IGNyZWMgKipyaGFzaCwgaW50IHJldmhhc2hzeik7CisjZW5kaWYKKworLyogcG9sbC5jICovCit2b2lkIHBvbGxfcmVzZXQodm9pZCk7CitpbnQgcG9sbF9jaGVjayhpbnQgZmQsIHNob3J0IGV2ZW50KTsKK3ZvaWQgcG9sbF9saXN0ZW4oaW50IGZkLCBzaG9ydCBldmVudCk7CitpbnQgZG9fcG9sbChpbnQgdGltZW91dCk7CisKKy8qIHJyZmlsdGVyLmMgKi8KK3NpemVfdCBycmZpbHRlcihzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBzaXplX3QgcGxlbiwgaW50IG1vZGUpOwordTE2ICpycmZpbHRlcl9kZXNjKGludCB0eXBlKTsKK2ludCBleHBhbmRfd29ya3NwYWNlKHVuc2lnbmVkIGNoYXIgKioqd2tzcGMsIGludCAqc3pwLCBpbnQgbmV3KTsKKworLyogZWRuczAuYyAqLwordW5zaWduZWQgY2hhciAqZmluZF9wc2V1ZG9oZWFkZXIoc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90IHBsZW4sCisJCQkJICAgc2l6ZV90ICpsZW4sIHVuc2lnbmVkIGNoYXIgKipwLCBpbnQgKmlzX3NpZ24sIGludCAqaXNfbGFzdCk7CitzaXplX3QgYWRkX3BzZXVkb2hlYWRlcihzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBzaXplX3QgcGxlbiwgdW5zaWduZWQgY2hhciAqbGltaXQsIAorCQkJdW5zaWduZWQgc2hvcnQgdWRwX3N6LCBpbnQgb3B0bm8sIHVuc2lnbmVkIGNoYXIgKm9wdCwgc2l6ZV90IG9wdGxlbiwgaW50IHNldF9kbywgaW50IHJlcGxhY2UpOworc2l6ZV90IGFkZF9kb19iaXQoc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90IHBsZW4sIHVuc2lnbmVkIGNoYXIgKmxpbWl0KTsKK3NpemVfdCBhZGRfZWRuczBfY29uZmlnKHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIsIHNpemVfdCBwbGVuLCB1bnNpZ25lZCBjaGFyICpsaW1pdCwgCisJCQl1bmlvbiBteXNvY2thZGRyICpzb3VyY2UsIHRpbWVfdCBub3csIGludCAqY2hlY2tfc3VibmV0KTsKK2ludCBjaGVja19zb3VyY2Uoc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90IHBsZW4sIHVuc2lnbmVkIGNoYXIgKnBzZXVkb2hlYWRlciwgdW5pb24gbXlzb2NrYWRkciAqcGVlcik7CisKKy8qIGFycC5jICovCitpbnQgZmluZF9tYWModW5pb24gbXlzb2NrYWRkciAqYWRkciwgdW5zaWduZWQgY2hhciAqbWFjLCBpbnQgbGF6eSwgdGltZV90IG5vdyk7CitpbnQgZG9fYXJwX3NjcmlwdF9ydW4odm9pZCk7CmRpZmYgLS1naXQgYS9zcmMvZG5zc2VjLmMgYi9zcmMvZG5zc2VjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc0ZDAxYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9kbnNzZWMuYwpAQCAtMCwwICsxLDIyNzcgQEAKKy8qIGRuc3NlYy5jIGlzIENvcHlyaWdodCAoYykgMjAxMiBHaW92YW5uaSBCYWpvIDxyYXNreUBkZXZlbGVyLmNvbT4KKyAgICAgICAgICAgYW5kIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFNpbW9uIEtlbGxleQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMgZGF0ZWQgMjkgSnVuZSwgMjAwNy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2luY2x1ZGUgImRuc21hc3EuaCIKKworI2lmZGVmIEhBVkVfRE5TU0VDCisKKyNpbmNsdWRlIDxuZXR0bGUvcnNhLmg+CisjaW5jbHVkZSA8bmV0dGxlL2RzYS5oPgorI2lmbmRlZiBOT19ORVRUTEVfRUNDCisjICBpbmNsdWRlIDxuZXR0bGUvZWNkc2EuaD4KKyMgIGluY2x1ZGUgPG5ldHRsZS9lY2MtY3VydmUuaD4KKyNlbmRpZgorI2luY2x1ZGUgPG5ldHRsZS9uZXR0bGUtbWV0YS5oPgorI2luY2x1ZGUgPG5ldHRsZS9iaWdudW0uaD4KKworLyogTmV0dGxlLTMuMCBtb3ZlZCB0byBhIG5ldyBBUEkgZm9yIERTQS4gV2UgdXNlIGEgbmFtZSB0aGF0J3MgZGVmaW5lZCBpbiB0aGUgbmV3IEFQSQorICAgdG8gZGV0ZWN0IE5ldHRsZS0zLCBhbmQgaW52b2tlIHRoZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBtb2RlLiAqLworI2lmZGVmIGRzYV9wYXJhbXNfaW5pdAorI2luY2x1ZGUgPG5ldHRsZS9kc2EtY29tcGF0Lmg+CisjZW5kaWYKKworI2RlZmluZSBTRVJJQUxfVU5ERUYgIC0xMDAKKyNkZWZpbmUgU0VSSUFMX0VRICAgICAgICAwCisjZGVmaW5lIFNFUklBTF9MVCAgICAgICAtMQorI2RlZmluZSBTRVJJQUxfR1QgICAgICAgIDEKKworLyogaHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9kcy1yci10eXBlcy9kcy1yci10eXBlcy54aHRtbCAqLworc3RhdGljIGNoYXIgKmRzX2RpZ2VzdF9uYW1lKGludCBkaWdlc3QpCit7CisgIHN3aXRjaCAoZGlnZXN0KQorICAgIHsKKyAgICBjYXNlIDE6IHJldHVybiAic2hhMSI7CisgICAgY2FzZSAyOiByZXR1cm4gInNoYTI1NiI7CisgICAgY2FzZSAzOiByZXR1cm4gImdvc3RoYXNoOTQiOworICAgIGNhc2UgNDogcmV0dXJuICJzaGEzODQiOworICAgIGRlZmF1bHQ6IHJldHVybiBOVUxMOworICAgIH0KK30KKyAKKy8qIGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvZG5zLXNlYy1hbGctbnVtYmVycy9kbnMtc2VjLWFsZy1udW1iZXJzLnhodG1sICovCitzdGF0aWMgY2hhciAqYWxnb19kaWdlc3RfbmFtZShpbnQgYWxnbykKK3sKKyAgc3dpdGNoIChhbGdvKQorICAgIHsKKyAgICBjYXNlIDE6IHJldHVybiAibWQ1IjsKKyAgICBjYXNlIDM6IHJldHVybiAic2hhMSI7CisgICAgY2FzZSA1OiByZXR1cm4gInNoYTEiOworICAgIGNhc2UgNjogcmV0dXJuICJzaGExIjsKKyAgICBjYXNlIDc6IHJldHVybiAic2hhMSI7CisgICAgY2FzZSA4OiByZXR1cm4gInNoYTI1NiI7CisgICAgY2FzZSAxMDogcmV0dXJuICJzaGE1MTIiOworICAgIGNhc2UgMTI6IHJldHVybiAiZ29zdGhhc2g5NCI7CisgICAgY2FzZSAxMzogcmV0dXJuICJzaGEyNTYiOworICAgIGNhc2UgMTQ6IHJldHVybiAic2hhMzg0IjsKKyAgICBkZWZhdWx0OiByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisgIAorLyogaHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9kbnNzZWMtbnNlYzMtcGFyYW1ldGVycy9kbnNzZWMtbnNlYzMtcGFyYW1ldGVycy54aHRtbCAqLworc3RhdGljIGNoYXIgKm5zZWMzX2RpZ2VzdF9uYW1lKGludCBkaWdlc3QpCit7CisgIHN3aXRjaCAoZGlnZXN0KQorICAgIHsKKyAgICBjYXNlIDE6IHJldHVybiAic2hhMSI7CisgICAgZGVmYXVsdDogcmV0dXJuIE5VTEw7CisgICAgfQorfQorIAorLyogRmluZCBwb2ludGVyIHRvIGNvcnJlY3QgaGFzaCBmdW5jdGlvbiBpbiBuZXR0bGUgbGlicmFyeSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXR0bGVfaGFzaCAqaGFzaF9maW5kKGNoYXIgKm5hbWUpCit7CisgIGludCBpOworICAKKyAgaWYgKCFuYW1lKQorICAgIHJldHVybiBOVUxMOworICAKKyAgZm9yIChpID0gMDsgbmV0dGxlX2hhc2hlc1tpXTsgaSsrKQorICAgIHsKKyAgICAgIGlmIChzdHJjbXAobmV0dGxlX2hhc2hlc1tpXS0+bmFtZSwgbmFtZSkgPT0gMCkKKwlyZXR1cm4gbmV0dGxlX2hhc2hlc1tpXTsKKyAgICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIGV4cGFuZCBjdHggYW5kIGRpZ2VzdCBtZW1vcnkgYWxsb2NhdGlvbnMgaWYgbmVjZXNzYXJ5IGFuZCBpbml0IGhhc2ggZnVuY3Rpb24gKi8KK3N0YXRpYyBpbnQgaGFzaF9pbml0KGNvbnN0IHN0cnVjdCBuZXR0bGVfaGFzaCAqaGFzaCwgdm9pZCAqKmN0eHAsIHVuc2lnbmVkIGNoYXIgKipkaWdlc3RwKQoreworICBzdGF0aWMgdm9pZCAqY3R4ID0gTlVMTDsKKyAgc3RhdGljIHVuc2lnbmVkIGNoYXIgKmRpZ2VzdCA9IE5VTEw7CisgIHN0YXRpYyB1bnNpZ25lZCBpbnQgY3R4X3N6ID0gMDsKKyAgc3RhdGljIHVuc2lnbmVkIGludCBkaWdlc3Rfc3ogPSAwOworCisgIHZvaWQgKm5ldzsKKworICBpZiAoY3R4X3N6IDwgaGFzaC0+Y29udGV4dF9zaXplKQorICAgIHsKKyAgICAgIGlmICghKG5ldyA9IHdoaW5lX21hbGxvYyhoYXNoLT5jb250ZXh0X3NpemUpKSkKKwlyZXR1cm4gMDsKKyAgICAgIGlmIChjdHgpCisJZnJlZShjdHgpOworICAgICAgY3R4ID0gbmV3OworICAgICAgY3R4X3N6ID0gaGFzaC0+Y29udGV4dF9zaXplOworICAgIH0KKyAgCisgIGlmIChkaWdlc3Rfc3ogPCBoYXNoLT5kaWdlc3Rfc2l6ZSkKKyAgICB7CisgICAgICBpZiAoIShuZXcgPSB3aGluZV9tYWxsb2MoaGFzaC0+ZGlnZXN0X3NpemUpKSkKKwlyZXR1cm4gMDsKKyAgICAgIGlmIChkaWdlc3QpCisJZnJlZShkaWdlc3QpOworICAgICAgZGlnZXN0ID0gbmV3OworICAgICAgZGlnZXN0X3N6ID0gaGFzaC0+ZGlnZXN0X3NpemU7CisgICAgfQorCisgICpjdHhwID0gY3R4OworICAqZGlnZXN0cCA9IGRpZ2VzdDsKKworICBoYXNoLT5pbml0KGN0eCk7CisKKyAgcmV0dXJuIDE7Cit9CisgIAorc3RhdGljIGludCBkbnNtYXNxX3JzYV92ZXJpZnkoc3RydWN0IGJsb2NrZGF0YSAqa2V5X2RhdGEsIHVuc2lnbmVkIGludCBrZXlfbGVuLCB1bnNpZ25lZCBjaGFyICpzaWcsIHNpemVfdCBzaWdfbGVuLAorCQkJICAgICAgdW5zaWduZWQgY2hhciAqZGlnZXN0LCBzaXplX3QgZGlnZXN0X2xlbiwgaW50IGFsZ28pCit7CisgIHVuc2lnbmVkIGNoYXIgKnA7CisgIHNpemVfdCBleHBfbGVuOworICAKKyAgc3RhdGljIHN0cnVjdCByc2FfcHVibGljX2tleSAqa2V5ID0gTlVMTDsKKyAgc3RhdGljIG1wel90IHNpZ19tcHo7CisKKyAgKHZvaWQpZGlnZXN0X2xlbjsKKyAgCisgIGlmIChrZXkgPT0gTlVMTCkKKyAgICB7CisgICAgICBpZiAoIShrZXkgPSB3aGluZV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCByc2FfcHVibGljX2tleSkpKSkKKwlyZXR1cm4gMDsKKyAgICAgIAorICAgICAgbmV0dGxlX3JzYV9wdWJsaWNfa2V5X2luaXQoa2V5KTsKKyAgICAgIG1wel9pbml0KHNpZ19tcHopOworICAgIH0KKyAgCisgIGlmICgoa2V5X2xlbiA8IDMpIHx8ICEocCA9IGJsb2NrZGF0YV9yZXRyaWV2ZShrZXlfZGF0YSwga2V5X2xlbiwgTlVMTCkpKQorICAgIHJldHVybiAwOworICAKKyAga2V5X2xlbi0tOworICBpZiAoKGV4cF9sZW4gPSAqcCsrKSA9PSAwKQorICAgIHsKKyAgICAgIEdFVFNIT1JUKGV4cF9sZW4sIHApOworICAgICAga2V5X2xlbiAtPSAyOworICAgIH0KKyAgCisgIGlmIChleHBfbGVuID49IGtleV9sZW4pCisgICAgcmV0dXJuIDA7CisgIAorICBrZXktPnNpemUgPSAga2V5X2xlbiAtIGV4cF9sZW47CisgIG1wel9pbXBvcnQoa2V5LT5lLCBleHBfbGVuLCAxLCAxLCAwLCAwLCBwKTsKKyAgbXB6X2ltcG9ydChrZXktPm4sIGtleS0+c2l6ZSwgMSwgMSwgMCwgMCwgcCArIGV4cF9sZW4pOworCisgIG1wel9pbXBvcnQoc2lnX21weiwgc2lnX2xlbiwgMSwgMSwgMCwgMCwgc2lnKTsKKyAgCisgIHN3aXRjaCAoYWxnbykKKyAgICB7CisgICAgY2FzZSAxOgorICAgICAgcmV0dXJuIG5ldHRsZV9yc2FfbWQ1X3ZlcmlmeV9kaWdlc3Qoa2V5LCBkaWdlc3QsIHNpZ19tcHopOworICAgIGNhc2UgNTogY2FzZSA3OgorICAgICAgcmV0dXJuIG5ldHRsZV9yc2Ffc2hhMV92ZXJpZnlfZGlnZXN0KGtleSwgZGlnZXN0LCBzaWdfbXB6KTsKKyAgICBjYXNlIDg6CisgICAgICByZXR1cm4gbmV0dGxlX3JzYV9zaGEyNTZfdmVyaWZ5X2RpZ2VzdChrZXksIGRpZ2VzdCwgc2lnX21weik7CisgICAgY2FzZSAxMDoKKyAgICAgIHJldHVybiBuZXR0bGVfcnNhX3NoYTUxMl92ZXJpZnlfZGlnZXN0KGtleSwgZGlnZXN0LCBzaWdfbXB6KTsKKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9ICAKKworc3RhdGljIGludCBkbnNtYXNxX2RzYV92ZXJpZnkoc3RydWN0IGJsb2NrZGF0YSAqa2V5X2RhdGEsIHVuc2lnbmVkIGludCBrZXlfbGVuLCB1bnNpZ25lZCBjaGFyICpzaWcsIHNpemVfdCBzaWdfbGVuLAorCQkJICAgICAgdW5zaWduZWQgY2hhciAqZGlnZXN0LCBzaXplX3QgZGlnZXN0X2xlbiwgaW50IGFsZ28pCit7CisgIHVuc2lnbmVkIGNoYXIgKnA7CisgIHVuc2lnbmVkIGludCB0OworICAKKyAgc3RhdGljIHN0cnVjdCBkc2FfcHVibGljX2tleSAqa2V5ID0gTlVMTDsKKyAgc3RhdGljIHN0cnVjdCBkc2Ffc2lnbmF0dXJlICpzaWdfc3RydWN0OworICAKKyAgKHZvaWQpZGlnZXN0X2xlbjsKKworICBpZiAoa2V5ID09IE5VTEwpCisgICAgeworICAgICAgaWYgKCEoc2lnX3N0cnVjdCA9IHdoaW5lX21hbGxvYyhzaXplb2Yoc3RydWN0IGRzYV9zaWduYXR1cmUpKSkgfHwgCisJICAhKGtleSA9IHdoaW5lX21hbGxvYyhzaXplb2Yoc3RydWN0IGRzYV9wdWJsaWNfa2V5KSkpKSAKKwlyZXR1cm4gMDsKKyAgICAgIAorICAgICAgbmV0dGxlX2RzYV9wdWJsaWNfa2V5X2luaXQoa2V5KTsKKyAgICAgIG5ldHRsZV9kc2Ffc2lnbmF0dXJlX2luaXQoc2lnX3N0cnVjdCk7CisgICAgfQorICAKKyAgaWYgKChzaWdfbGVuIDwgNDEpIHx8ICEocCA9IGJsb2NrZGF0YV9yZXRyaWV2ZShrZXlfZGF0YSwga2V5X2xlbiwgTlVMTCkpKQorICAgIHJldHVybiAwOworICAKKyAgdCA9ICpwKys7CisgIAorICBpZiAoa2V5X2xlbiA8ICgyMTMgKyAodCAqIDI0KSkpCisgICAgcmV0dXJuIDA7CisgIAorICBtcHpfaW1wb3J0KGtleS0+cSwgMjAsIDEsIDEsIDAsIDAsIHApOyBwICs9IDIwOworICBtcHpfaW1wb3J0KGtleS0+cCwgNjQgKyAodCo4KSwgMSwgMSwgMCwgMCwgcCk7IHAgKz0gNjQgKyAodCo4KTsKKyAgbXB6X2ltcG9ydChrZXktPmcsIDY0ICsgKHQqOCksIDEsIDEsIDAsIDAsIHApOyBwICs9IDY0ICsgKHQqOCk7CisgIG1wel9pbXBvcnQoa2V5LT55LCA2NCArICh0KjgpLCAxLCAxLCAwLCAwLCBwKTsgcCArPSA2NCArICh0KjgpOworICAKKyAgbXB6X2ltcG9ydChzaWdfc3RydWN0LT5yLCAyMCwgMSwgMSwgMCwgMCwgc2lnKzEpOworICBtcHpfaW1wb3J0KHNpZ19zdHJ1Y3QtPnMsIDIwLCAxLCAxLCAwLCAwLCBzaWcrMjEpOworICAKKyAgKHZvaWQpYWxnbzsKKyAgCisgIHJldHVybiBuZXR0bGVfZHNhX3NoYTFfdmVyaWZ5X2RpZ2VzdChrZXksIGRpZ2VzdCwgc2lnX3N0cnVjdCk7Cit9IAorIAorI2lmbmRlZiBOT19ORVRUTEVfRUNDCitzdGF0aWMgaW50IGRuc21hc3FfZWNkc2FfdmVyaWZ5KHN0cnVjdCBibG9ja2RhdGEgKmtleV9kYXRhLCB1bnNpZ25lZCBpbnQga2V5X2xlbiwgCisJCQkJdW5zaWduZWQgY2hhciAqc2lnLCBzaXplX3Qgc2lnX2xlbiwKKwkJCQl1bnNpZ25lZCBjaGFyICpkaWdlc3QsIHNpemVfdCBkaWdlc3RfbGVuLCBpbnQgYWxnbykKK3sKKyAgdW5zaWduZWQgY2hhciAqcDsKKyAgdW5zaWduZWQgaW50IHQ7CisgIHN0cnVjdCBlY2NfcG9pbnQgKmtleTsKKworICBzdGF0aWMgc3RydWN0IGVjY19wb2ludCAqa2V5XzI1NiA9IE5VTEwsICprZXlfMzg0ID0gTlVMTDsKKyAgc3RhdGljIG1wel90IHgsIHk7CisgIHN0YXRpYyBzdHJ1Y3QgZHNhX3NpZ25hdHVyZSAqc2lnX3N0cnVjdDsKKyAgCisgIGlmICghc2lnX3N0cnVjdCkKKyAgICB7CisgICAgICBpZiAoIShzaWdfc3RydWN0ID0gd2hpbmVfbWFsbG9jKHNpemVvZihzdHJ1Y3QgZHNhX3NpZ25hdHVyZSkpKSkKKwlyZXR1cm4gMDsKKyAgICAgIAorICAgICAgbmV0dGxlX2RzYV9zaWduYXR1cmVfaW5pdChzaWdfc3RydWN0KTsKKyAgICAgIG1wel9pbml0KHgpOworICAgICAgbXB6X2luaXQoeSk7CisgICAgfQorICAKKyAgc3dpdGNoIChhbGdvKQorICAgIHsKKyAgICBjYXNlIDEzOgorICAgICAgaWYgKCFrZXlfMjU2KQorCXsKKwkgIGlmICghKGtleV8yNTYgPSB3aGluZV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBlY2NfcG9pbnQpKSkpCisJICAgIHJldHVybiAwOworCSAgCisJICBuZXR0bGVfZWNjX3BvaW50X2luaXQoa2V5XzI1NiwgJm5ldHRsZV9zZWNwXzI1NnIxKTsKKwl9CisgICAgICAKKyAgICAgIGtleSA9IGtleV8yNTY7CisgICAgICB0ID0gMzI7CisgICAgICBicmVhazsKKyAgICAgIAorICAgIGNhc2UgMTQ6CisgICAgICBpZiAoIWtleV8zODQpCisJeworCSAgaWYgKCEoa2V5XzM4NCA9IHdoaW5lX21hbGxvYyhzaXplb2Yoc3RydWN0IGVjY19wb2ludCkpKSkKKwkgICAgcmV0dXJuIDA7CisJICAKKwkgIG5ldHRsZV9lY2NfcG9pbnRfaW5pdChrZXlfMzg0LCAmbmV0dGxlX3NlY3BfMzg0cjEpOworCX0KKyAgICAgIAorICAgICAga2V5ID0ga2V5XzM4NDsKKyAgICAgIHQgPSA0ODsKKyAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIDA7CisgICAgfQorICAKKyAgaWYgKHNpZ19sZW4gIT0gMip0IHx8IGtleV9sZW4gIT0gMip0IHx8CisgICAgICAhKHAgPSBibG9ja2RhdGFfcmV0cmlldmUoa2V5X2RhdGEsIGtleV9sZW4sIE5VTEwpKSkKKyAgICByZXR1cm4gMDsKKyAgCisgIG1wel9pbXBvcnQoeCwgdCAsIDEsIDEsIDAsIDAsIHApOworICBtcHpfaW1wb3J0KHksIHQgLCAxLCAxLCAwLCAwLCBwICsgdCk7CisKKyAgaWYgKCFlY2NfcG9pbnRfc2V0KGtleSwgeCwgeSkpCisgICAgcmV0dXJuIDA7CisgIAorICBtcHpfaW1wb3J0KHNpZ19zdHJ1Y3QtPnIsIHQsIDEsIDEsIDAsIDAsIHNpZyk7CisgIG1wel9pbXBvcnQoc2lnX3N0cnVjdC0+cywgdCwgMSwgMSwgMCwgMCwgc2lnICsgdCk7CisgIAorICByZXR1cm4gbmV0dGxlX2VjZHNhX3ZlcmlmeShrZXksIGRpZ2VzdF9sZW4sIGRpZ2VzdCwgc2lnX3N0cnVjdCk7Cit9IAorI2VuZGlmIAorCitzdGF0aWMgaW50ICgqdmVyaWZ5X2Z1bmMoaW50IGFsZ28pKShzdHJ1Y3QgYmxvY2tkYXRhICprZXlfZGF0YSwgdW5zaWduZWQgaW50IGtleV9sZW4sIHVuc2lnbmVkIGNoYXIgKnNpZywgc2l6ZV90IHNpZ19sZW4sCisJCQkJICAgIHVuc2lnbmVkIGNoYXIgKmRpZ2VzdCwgc2l6ZV90IGRpZ2VzdF9sZW4sIGludCBhbGdvKQoreworICAgIAorICAvKiBFbnVyZSBhdCBydW50aW1lIHRoYXQgd2UgaGF2ZSBzdXBwb3J0IGZvciB0aGlzIGRpZ2VzdCAqLworICBpZiAoIWhhc2hfZmluZChhbGdvX2RpZ2VzdF9uYW1lKGFsZ28pKSkKKyAgICByZXR1cm4gTlVMTDsKKyAgCisgIC8qIFRoaXMgc3dpdGNoIGRlZmluZXMgd2hpY2ggc2lnIGFsZ29yaXRobXMgd2Ugc3VwcG9ydCwgY2FuJ3QgaW50cm9zcGVjdCBOZXR0bGUgZm9yIHRoYXQuICovCisgIHN3aXRjaCAoYWxnbykKKyAgICB7CisgICAgY2FzZSAxOiBjYXNlIDU6IGNhc2UgNzogY2FzZSA4OiBjYXNlIDEwOgorICAgICAgcmV0dXJuIGRuc21hc3FfcnNhX3ZlcmlmeTsKKyAgICAgIAorICAgIGNhc2UgMzogY2FzZSA2OiAKKyAgICAgIHJldHVybiBkbnNtYXNxX2RzYV92ZXJpZnk7CisgCisjaWZuZGVmIE5PX05FVFRMRV9FQ0MgICAKKyAgICBjYXNlIDEzOiBjYXNlIDE0OgorICAgICAgcmV0dXJuIGRuc21hc3FfZWNkc2FfdmVyaWZ5OworI2VuZGlmCisgICAgfQorICAKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgdmVyaWZ5KHN0cnVjdCBibG9ja2RhdGEgKmtleV9kYXRhLCB1bnNpZ25lZCBpbnQga2V5X2xlbiwgdW5zaWduZWQgY2hhciAqc2lnLCBzaXplX3Qgc2lnX2xlbiwKKwkJICB1bnNpZ25lZCBjaGFyICpkaWdlc3QsIHNpemVfdCBkaWdlc3RfbGVuLCBpbnQgYWxnbykKK3sKKworICBpbnQgKCpmdW5jKShzdHJ1Y3QgYmxvY2tkYXRhICprZXlfZGF0YSwgdW5zaWduZWQgaW50IGtleV9sZW4sIHVuc2lnbmVkIGNoYXIgKnNpZywgc2l6ZV90IHNpZ19sZW4sCisJICAgICAgdW5zaWduZWQgY2hhciAqZGlnZXN0LCBzaXplX3QgZGlnZXN0X2xlbiwgaW50IGFsZ28pOworICAKKyAgZnVuYyA9IHZlcmlmeV9mdW5jKGFsZ28pOworICAKKyAgaWYgKCFmdW5jKQorICAgIHJldHVybiAwOworCisgIHJldHVybiAoKmZ1bmMpKGtleV9kYXRhLCBrZXlfbGVuLCBzaWcsIHNpZ19sZW4sIGRpZ2VzdCwgZGlnZXN0X2xlbiwgYWxnbyk7Cit9CisKKy8qIENvbnZlcnQgZnJvbSBwcmVzZW50YXRpb24gZm9ybWF0IHRvIHdpcmUgZm9ybWF0LCBpbiBwbGFjZS4KKyAgIEFsc28gbWFwIFVDIC0+IExDLgorICAgTm90ZSB0aGF0IHVzaW5nIGV4dHJhY3RfbmFtZSB0byBnZXQgcHJlc2VudGF0aW9uIGZvcm1hdAorICAgdGhlbiBjYWxsaW5nIHRvX3dpcmUoKSByZW1vdmVzIGNvbXByZXNzaW9uIGFuZCBtYXBzIGNhc2UsCisgICB0aHVzIGdlbmVyYXRpbmcgbmFtZXMgaW4gY2Fub25pY2FsIGZvcm0uCisgICBDYWxsaW5nIHRvX3dpcmUgZm9sbG93ZWQgYnkgZnJvbV93aXJlIGlzIGFsbW9zdCBhbiBpZGVudGl0eSwKKyAgIGV4Y2VwdCB0aGF0IHRoZSBVQyByZW1haW5zIG1hcHBlZCB0byBMQy4gCisKKyAgIE5vdGUgdGhhdCBib3RoIC8wMDAgYW5kICcuJyBhcmUgYWxsb3dlZCB3aXRoaW4gbGFiZWxzLiBUaGVzZSBnZXQKKyAgIHJlcHJlc2VudGVkIGluIHByZXNlbnRhdGlvbiBmb3JtYXQgdXNpbmcgTkFNRV9FU0NBUEUgYXMgYW4gZXNjYXBlCisgICBjaGFyYWN0ZXIuIEluIHRoZW9yeSwgaWYgYWxsIHRoZSBjaGFyYWN0ZXJzIGluIGEgbmFtZSB3ZXJlIC8wMDAgb3IKKyAgICcuJyBvciBOQU1FX0VTQ0FQRSB0aGVuIGFsbCB3b3VsZCBoYXZlIHRvIGJlIGVzY2FwZWQsIHNvIHRoZSAKKyAgIHByZXNlbnRhdGlvbiBmb3JtYXQgd291bGQgYmUgdHdpY2UgYXMgbG9uZyBhcyB0aGUgc3BlYyAoMTAyNCkuIAorICAgVGhlIGJ1ZmZlcnMgYXJlIGFsbCBkZWNsYXJlZCBhcyAyMDQ5IChhbGxvd2luZyBmb3IgdGhlIHRyYWlsaW5nIHplcm8pIAorICAgZm9yIHRoaXMgcmVhc29uLgorKi8KK3N0YXRpYyBpbnQgdG9fd2lyZShjaGFyICpuYW1lKQoreworICB1bnNpZ25lZCBjaGFyICpsLCAqcCwgKnEsIHRlcm07CisgIGludCBsZW47CisKKyAgZm9yIChsID0gKHVuc2lnbmVkIGNoYXIqKW5hbWU7ICpsICE9IDA7IGwgPSBwKQorICAgIHsKKyAgICAgIGZvciAocCA9IGw7ICpwICE9ICcuJyAmJiAqcCAhPSAwOyBwKyspCisJaWYgKCpwID49ICdBJyAmJiAqcCA8PSAnWicpCisJICAqcCA9ICpwIC0gJ0EnICsgJ2EnOworCWVsc2UgaWYgKCpwID09IE5BTUVfRVNDQVBFKQorCSAgeworCSAgICBmb3IgKHEgPSBwOyAqcTsgcSsrKQorCSAgICAgICpxID0gKihxKzEpOworCSAgICAoKnApLS07CisJICB9CisgICAgICB0ZXJtID0gKnA7CisgICAgICAKKyAgICAgIGlmICgobGVuID0gcCAtIGwpICE9IDApCisJbWVtbW92ZShsKzEsIGwsIGxlbik7CisgICAgICAqbCA9IGxlbjsKKyAgICAgIAorICAgICAgcCsrOworICAgICAgCisgICAgICBpZiAodGVybSA9PSAwKQorCSpwID0gMDsKKyAgICB9CisgIAorICByZXR1cm4gbCArIDEgLSAodW5zaWduZWQgY2hhciAqKW5hbWU7Cit9CisKKy8qIE5vdGU6IG5vIGNvbXByZXNzaW9uICBhbGxvd2VkIGluIGlucHV0LiAqLworc3RhdGljIHZvaWQgZnJvbV93aXJlKGNoYXIgKm5hbWUpCit7CisgIHVuc2lnbmVkIGNoYXIgKmwsICpwLCAqbGFzdDsKKyAgaW50IGxlbjsKKyAgCisgIGZvciAobGFzdCA9ICh1bnNpZ25lZCBjaGFyICopbmFtZTsgKmxhc3QgIT0gMDsgbGFzdCArPSAqbGFzdCsxKTsKKyAgCisgIGZvciAobCA9ICh1bnNpZ25lZCBjaGFyICopbmFtZTsgKmwgIT0gMDsgbCArPSBsZW4rMSkKKyAgICB7CisgICAgICBsZW4gPSAqbDsKKyAgICAgIG1lbW1vdmUobCwgbCsxLCBsZW4pOworICAgICAgZm9yIChwID0gbDsgcCA8IGwgKyBsZW47IHArKykKKwlpZiAoKnAgPT0gJy4nIHx8ICpwID09IDAgfHwgKnAgPT0gTkFNRV9FU0NBUEUpCisJICB7CisJICAgIG1lbW1vdmUocCsxLCBwLCAxICsgbGFzdCAtIHApOworCSAgICBsZW4rKzsKKwkgICAgKnArKyA9IE5BTUVfRVNDQVBFOyAKKwkgICAgKCpwKSsrOworCSAgfQorCQorICAgICAgbFtsZW5dID0gJy4nOworICAgIH0KKworICBpZiAoKGNoYXIgKilsICE9IG5hbWUpCisgICAgKihsLTEpID0gMDsKK30KKworLyogSW5wdXQgaW4gcHJlc2VudGF0aW9uIGZvcm1hdCAqLworc3RhdGljIGludCBjb3VudF9sYWJlbHMoY2hhciAqbmFtZSkKK3sKKyAgaW50IGk7CisKKyAgaWYgKCpuYW1lID09IDApCisgICAgcmV0dXJuIDA7CisKKyAgZm9yIChpID0gMDsgKm5hbWU7IG5hbWUrKykKKyAgICBpZiAoKm5hbWUgPT0gJy4nKQorICAgICAgaSsrOworCisgIHJldHVybiBpKzE7Cit9CisKKy8qIEltcGxlbWVudCBSRkMxOTgyIHdyYXBwZWQgY29tcGFyZSBmb3IgMzItYml0IG51bWJlcnMgKi8KK3N0YXRpYyBpbnQgc2VyaWFsX2NvbXBhcmVfMzIodTMyIHMxLCB1MzIgczIpCit7CisgIGlmIChzMSA9PSBzMikKKyAgICByZXR1cm4gU0VSSUFMX0VROworCisgIGlmICgoczEgPCBzMiAmJiAoczIgLSBzMSkgPCAoMVVMPDwzMSkpIHx8CisgICAgICAoczEgPiBzMiAmJiAoczEgLSBzMikgPiAoMVVMPDwzMSkpKQorICAgIHJldHVybiBTRVJJQUxfTFQ7CisgIGlmICgoczEgPCBzMiAmJiAoczIgLSBzMSkgPiAoMVVMPDwzMSkpIHx8CisgICAgICAoczEgPiBzMiAmJiAoczEgLSBzMikgPCAoMVVMPDwzMSkpKQorICAgIHJldHVybiBTRVJJQUxfR1Q7CisgIHJldHVybiBTRVJJQUxfVU5ERUY7Cit9CisKKy8qIENhbGxlZCBhdCBzdGFydHVwLiBJZiB0aGUgdGltZXN0YW1wIGZpbGUgaXMgY29uZmlndXJlZCBhbmQgZXhpc3RzLCBwdXQgaXRzIG10aW1lIG9uCisgICB0aW1lc3RhbXBfdGltZS4gSWYgaXQgZG9lc24ndCBleGlzdCwgY3JlYXRlIGl0LCBhbmQgc2V0IHRoZSBtdGltZSB0byAxLTEtMjAxNS4KKyAgIHJldHVybiAtMSAtPiBDYW5ub3QgY3JlYXRlIGZpbGUuCisgICAgICAgICAgIDAgLT4gbm90IHVzaW5nIHRpbWVzdGFtcCwgb3IgdGltZXN0YW1wIGV4aXN0cyBhbmQgaXMgaW4gcGFzdC4KKyAgICAgICAgICAgMSAtPiB0aW1lc3RhbXAgZXhpc3RzIGFuZCBpcyBpbiBmdXR1cmUuCisqLworCitzdGF0aWMgdGltZV90IHRpbWVzdGFtcF90aW1lOworCitpbnQgc2V0dXBfdGltZXN0YW1wKHZvaWQpCit7CisgIHN0cnVjdCBzdGF0IHN0YXRidWY7CisgIAorICBkYWVtb24tPmJhY2tfdG9fdGhlX2Z1dHVyZSA9IDA7CisgIAorICBpZiAoIWRhZW1vbi0+dGltZXN0YW1wX2ZpbGUpCisgICAgcmV0dXJuIDA7CisgIAorICBpZiAoc3RhdChkYWVtb24tPnRpbWVzdGFtcF9maWxlLCAmc3RhdGJ1ZikgIT0gLTEpCisgICAgeworICAgICAgdGltZXN0YW1wX3RpbWUgPSBzdGF0YnVmLnN0X210aW1lOworICAgIGNoZWNrX2FuZF9leGl0OgorICAgICAgaWYgKGRpZmZ0aW1lKHRpbWVzdGFtcF90aW1lLCB0aW1lKDApKSA8PSAgMCkKKwl7CisJICAvKiB0aW1lIGFscmVhZHkgT0ssIHVwZGF0ZSB0aW1lc3RhbXAsIGFuZCBkbyBrZXkgY2hlY2tpbmcgZnJvbSB0aGUgc3RhcnQuICovCisJICBpZiAodXRpbWVzKGRhZW1vbi0+dGltZXN0YW1wX2ZpbGUsIE5VTEwpID09IC0xKQorCSAgICBteV9zeXNsb2coTE9HX0VSUiwgXygiZmFpbGVkIHRvIHVwZGF0ZSBtdGltZSBvbiAlczogJXMiKSwgZGFlbW9uLT50aW1lc3RhbXBfZmlsZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkgIGRhZW1vbi0+YmFja190b190aGVfZnV0dXJlID0gMTsKKwkgIHJldHVybiAwOworCX0KKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgCisgIGlmIChlcnJubyA9PSBFTk9FTlQpCisgICAgeworICAgICAgLyogTkIuIGZvciBleHBsYW5hdGlvbiBvZiBPX0VYQ0wgZmxhZywgc2VlIGNvbW1lbnQgb24gcGlkZmlsZSBpbiBkbnNtYXNxLmMgKi8gCisgICAgICBpbnQgZmQgPSBvcGVuKGRhZW1vbi0+dGltZXN0YW1wX2ZpbGUsIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fTk9OQkxPQ0sgfCBPX0VYQ0wsIDA2NjYpOworICAgICAgaWYgKGZkICE9IC0xKQorCXsKKwkgIHN0cnVjdCB0aW1ldmFsIHR2WzJdOworCisJICBjbG9zZShmZCk7CisJICAKKwkgIHRpbWVzdGFtcF90aW1lID0gMTQyMDA3MDQwMDsgLyogMS0xLTIwMTUgKi8KKwkgIHR2WzBdLnR2X3NlYyA9IHR2WzFdLnR2X3NlYyA9IHRpbWVzdGFtcF90aW1lOworCSAgdHZbMF0udHZfdXNlYyA9IHR2WzFdLnR2X3VzZWMgPSAwOworCSAgaWYgKHV0aW1lcyhkYWVtb24tPnRpbWVzdGFtcF9maWxlLCB0dikgPT0gMCkKKwkgICAgZ290byBjaGVja19hbmRfZXhpdDsKKwl9CisgICAgfQorCisgIHJldHVybiAtMTsKK30KKworLyogQ2hlY2sgd2hldGhlciB0b2RheS9ub3cgaXMgYmV0d2VlbiBkYXRlX3N0YXJ0IGFuZCBkYXRlX2VuZCAqLworc3RhdGljIGludCBjaGVja19kYXRlX3JhbmdlKHUzMiBkYXRlX3N0YXJ0LCB1MzIgZGF0ZV9lbmQpCit7CisgIHVuc2lnbmVkIGxvbmcgY3VydGltZSA9IHRpbWUoMCk7CisgCisgIC8qIENoZWNraW5nIHRpbWVzdGFtcHMgbWF5IGJlIHRlbXBvcmFyaWx5IGRpc2FibGVkICovCisgICAgCisgIC8qIElmIHRoZSBjdXJyZW50IHRpbWUgaWYgX2JlZm9yZV8gdGhlIHRpbWVzdGFtcAorICAgICBvbiBvdXIgcGVyc2lzdGVudCB0aW1lc3RhbXAgZmlsZSwgdGhlbiBhc3N1bWUgdGhlCisgICAgIHRpbWUgaWYgbm90IHlldCBjb3JyZWN0LCBhbmQgZG9uJ3QgY2hlY2sgdGhlCisgICAgIGtleSB0aW1lc3RhbXBzLiBBcyBzb29uIGFzIHRoZSBjdXJyZW50IHRpbWUgaXMKKyAgICAgbGF0ZXIgdGhlbiB0aGUgdGltZXN0YW1wLCB1cGRhdGUgdGhlIHRpbWVzdGFtcAorICAgICBhbmQgc3RhcnQgY2hlY2tpbmcga2V5cyAqLworICBpZiAoZGFlbW9uLT50aW1lc3RhbXBfZmlsZSkKKyAgICB7CisgICAgICBpZiAoZGFlbW9uLT5iYWNrX3RvX3RoZV9mdXR1cmUgPT0gMCAmJiBkaWZmdGltZSh0aW1lc3RhbXBfdGltZSwgY3VydGltZSkgPD0gMCkKKwl7CisJICBpZiAodXRpbWVzKGRhZW1vbi0+dGltZXN0YW1wX2ZpbGUsIE5VTEwpICE9IDApCisJICAgIG15X3N5c2xvZyhMT0dfRVJSLCBfKCJmYWlsZWQgdG8gdXBkYXRlIG10aW1lIG9uICVzOiAlcyIpLCBkYWVtb24tPnRpbWVzdGFtcF9maWxlLCBzdHJlcnJvcihlcnJubykpOworCSAgCisJICBteV9zeXNsb2coTE9HX0lORk8sIF8oInN5c3RlbSB0aW1lIGNvbnNpZGVyZWQgdmFsaWQsIG5vdyBjaGVja2luZyBETlNTRUMgc2lnbmF0dXJlIHRpbWVzdGFtcHMuIikpOworCSAgZGFlbW9uLT5iYWNrX3RvX3RoZV9mdXR1cmUgPSAxOworCSAgZGFlbW9uLT5kbnNzZWNfbm9fdGltZV9jaGVjayA9IDA7CisJICBxdWV1ZV9ldmVudChFVkVOVF9SRUxPQUQpOyAvKiBwdXJnZSBjYWNoZSAqLworCX0gCisKKyAgICAgIGlmIChkYWVtb24tPmJhY2tfdG9fdGhlX2Z1dHVyZSA9PSAwKQorCXJldHVybiAxOworICAgIH0KKyAgZWxzZSBpZiAoZGFlbW9uLT5kbnNzZWNfbm9fdGltZV9jaGVjaykKKyAgICByZXR1cm4gMTsKKyAgCisgIC8qIFdlIG11c3QgZXhwbGljaXRseSBjaGVjayBhZ2FpbnN0IHdhbnRlZCB2YWx1ZXMsIGJlY2F1c2Ugb2YgU0VSSUFMX1VOREVGICovCisgIHJldHVybiBzZXJpYWxfY29tcGFyZV8zMihjdXJ0aW1lLCBkYXRlX3N0YXJ0KSA9PSBTRVJJQUxfR1QKKyAgICAmJiBzZXJpYWxfY29tcGFyZV8zMihjdXJ0aW1lLCBkYXRlX2VuZCkgPT0gU0VSSUFMX0xUOworfQorCisvKiBSZXR1cm4gYnl0ZXMgb2YgY2Fub25pY2FsaXNlZCByZGF0YSwgd2hlbiB0aGUgcmV0dXJuIHZhbHVlIGlzIHplcm8sIHRoZSByZW1haW5pbmcgCisgICBkYXRhLCBwb2ludGVkIHRvIGJ5ICpwLCBzaG91bGQgYmUgdXNlZCByYXcuICovCitzdGF0aWMgaW50IGdldF9yZGF0YShzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBzaXplX3QgcGxlbiwgdW5zaWduZWQgY2hhciAqZW5kLCBjaGFyICpidWZmLCBpbnQgYnVmZmxlbiwKKwkJICAgICB1bnNpZ25lZCBjaGFyICoqcCwgdTE2ICoqZGVzYykKK3sKKyAgaW50IGQgPSAqKmRlc2M7CisgIAorICAvKiBObyBtb3JlIGRhdGEgbmVlZHMgbWFuZ2xpbmcgKi8KKyAgaWYgKGQgPT0gKHUxNiktMSkKKyAgICB7CisgICAgICAvKiBJZiB0aGVyZSdzIG1vcmUgZGF0YSB0aGFuIHdlIGhhdmUgc3BhY2UgZm9yLCBqdXN0IHJldHVybiB3aGF0IGZpdHMsCisJIHdlJ2xsIGdldCBjYWxsZWQgYWdhaW4gZm9yIG1vcmUgY2h1bmtzICovCisgICAgICBpZiAoZW5kIC0gKnAgPiBidWZmbGVuKQorCXsKKwkgIG1lbWNweShidWZmLCAqcCwgYnVmZmxlbik7CisJICAqcCArPSBidWZmbGVuOworCSAgcmV0dXJuIGJ1ZmZsZW47CisJfQorICAgICAgCisgICAgICByZXR1cm4gMDsKKyAgICB9CisgCisgICgqZGVzYykrKzsKKyAgCisgIGlmIChkID09IDAgJiYgZXh0cmFjdF9uYW1lKGhlYWRlciwgcGxlbiwgcCwgYnVmZiwgMSwgMCkpCisgICAgLyogZG9tYWluLW5hbWUsIGNhbm9uaWNhbGlzZSAqLworICAgIHJldHVybiB0b193aXJlKGJ1ZmYpOworICBlbHNlCisgICAgeyAKKyAgICAgIC8qIHBsYWluIGRhdGEgcHJlY2VkaW5nIGEgZG9tYWluLW5hbWUsIGRvbid0IHJ1biBvZmYgdGhlIGVuZCBvZiB0aGUgZGF0YSAqLworICAgICAgaWYgKChlbmQgLSAqcCkgPCBkKQorCWQgPSBlbmQgLSAqcDsKKyAgICAgIAorICAgICAgaWYgKGQgIT0gMCkKKwl7CisJICBtZW1jcHkoYnVmZiwgKnAsIGQpOworCSAgKnAgKz0gZDsKKwl9CisgICAgICAKKyAgICAgIHJldHVybiBkOworICAgIH0KK30KKworLyogQnViYmxlIHNvcnQgdGhlIFJSc2V0IGludG8gdGhlIGNhbm9uaWNhbCBvcmRlci4gCisgICBOb3RlIHRoYXQgdGhlIGJ5dGUtc3RyZWFtcyBmcm9tIHR3byBSUnMgbWF5IGdldCB1bnN5bmNlZDogY29uc2lkZXIgCisgICBSUnMgd2hpY2ggaGF2ZSB0d28gZG9tYWluLW5hbWVzIGF0IHRoZSBzdGFydCBhbmQgdGhlbiBvdGhlciBkYXRhLgorICAgVGhlIGRvbWFpbi1uYW1lcyBtYXkgaGF2ZSBkaWZmZXJlbnQgbGVuZ3RocyBpbiBlYWNoIFJSLCBidXQgc29ydCBlcXVhbAorCisgICAtLS0tLS0tLS0tLS0KKyAgIHxhYmNkZXxmZ2hpfAorICAgLS0tLS0tLS0tLS0tCisgICB8YWJjZHxlZmdoaXwKKyAgIC0tLS0tLS0tLS0tLQorCisgICBsZWF2aW5nIHRoZSBmb2xsb3dpbmcgYnl0ZXMgYXMgZGVjaWRpbmcgdGhlIG9yZGVyLiBIZW5jZSB0aGUgbmFzdHkgbGVmdDEgYW5kIGxlZnQyIHZhcmlhYmxlcy4KKyovCisKK3N0YXRpYyB2b2lkIHNvcnRfcnJzZXQoc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90IHBsZW4sIHUxNiAqcnJfZGVzYywgaW50IHJyc2V0aWR4LCAKKwkJICAgICAgIHVuc2lnbmVkIGNoYXIgKipycnNldCwgY2hhciAqYnVmZjEsIGNoYXIgKmJ1ZmYyKQoreworICBpbnQgc3dhcCwgcXVpdCwgaTsKKyAgCisgIGRvCisgICAgeworICAgICAgZm9yIChzd2FwID0gMCwgaSA9IDA7IGkgPCBycnNldGlkeC0xOyBpKyspCisJeworCSAgaW50IHJkbGVuMSwgcmRsZW4yLCBsZWZ0MSwgbGVmdDIsIGxlbjEsIGxlbjIsIGxlbiwgcmM7CisJICB1MTYgKmRwMSwgKmRwMjsKKwkgIHVuc2lnbmVkIGNoYXIgKmVuZDEsICplbmQyOworCSAgLyogTm90ZSB0aGF0IHRoZXNlIGhhdmUgYmVlbiBkZXRlcm1pbmVkIHRvIGJlIE9LIHByZXZpb3VzbHksCisJICAgICBzbyB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIGZvciBOVUxMIHJldHVybiBoZXJlLiAqLworCSAgdW5zaWduZWQgY2hhciAqcDEgPSBza2lwX25hbWUocnJzZXRbaV0sIGhlYWRlciwgcGxlbiwgMTApOworCSAgdW5zaWduZWQgY2hhciAqcDIgPSBza2lwX25hbWUocnJzZXRbaSsxXSwgaGVhZGVyLCBwbGVuLCAxMCk7CisJICAKKwkgIHAxICs9IDg7IC8qIHNraXAgY2xhc3MsIHR5cGUsIHR0bCAqLworCSAgR0VUU0hPUlQocmRsZW4xLCBwMSk7CisJICBlbmQxID0gcDEgKyByZGxlbjE7CisJICAKKwkgIHAyICs9IDg7IC8qIHNraXAgY2xhc3MsIHR5cGUsIHR0bCAqLworCSAgR0VUU0hPUlQocmRsZW4yLCBwMik7CisJICBlbmQyID0gcDIgKyByZGxlbjI7IAorCSAgCisJICBkcDEgPSBkcDIgPSBycl9kZXNjOworCSAgCisJICBmb3IgKHF1aXQgPSAwLCBsZWZ0MSA9IDAsIGxlZnQyID0gMCwgbGVuMSA9IDAsIGxlbjIgPSAwOyAhcXVpdDspCisJICAgIHsKKwkgICAgICBpZiAobGVmdDEgIT0gMCkKKwkJbWVtbW92ZShidWZmMSwgYnVmZjEgKyBsZW4xIC0gbGVmdDEsIGxlZnQxKTsKKwkgICAgICAKKwkgICAgICBpZiAoKGxlbjEgPSBnZXRfcmRhdGEoaGVhZGVyLCBwbGVuLCBlbmQxLCBidWZmMSArIGxlZnQxLCAoTUFYRE5BTUUgKiAyKSAtIGxlZnQxLCAmcDEsICZkcDEpKSA9PSAwKQorCQl7CisJCSAgcXVpdCA9IDE7CisJCSAgbGVuMSA9IGVuZDEgLSBwMTsKKwkJICBtZW1jcHkoYnVmZjEgKyBsZWZ0MSwgcDEsIGxlbjEpOworCQl9CisJICAgICAgbGVuMSArPSBsZWZ0MTsKKwkgICAgICAKKwkgICAgICBpZiAobGVmdDIgIT0gMCkKKwkJbWVtbW92ZShidWZmMiwgYnVmZjIgKyBsZW4yIC0gbGVmdDIsIGxlZnQyKTsKKwkgICAgICAKKwkgICAgICBpZiAoKGxlbjIgPSBnZXRfcmRhdGEoaGVhZGVyLCBwbGVuLCBlbmQyLCBidWZmMiArIGxlZnQyLCAoTUFYRE5BTUUgKjIpIC0gbGVmdDIsICZwMiwgJmRwMikpID09IDApCisJCXsKKwkJICBxdWl0ID0gMTsKKwkJICBsZW4yID0gZW5kMiAtIHAyOworCQkgIG1lbWNweShidWZmMiArIGxlZnQyLCBwMiwgbGVuMik7CisJCX0KKwkgICAgICBsZW4yICs9IGxlZnQyOworCSAgICAgICAKKwkgICAgICBpZiAobGVuMSA+IGxlbjIpCisJCWxlZnQxID0gbGVuMSAtIGxlbjIsIGxlZnQyID0gMCwgbGVuID0gbGVuMjsKKwkgICAgICBlbHNlCisJCWxlZnQyID0gbGVuMiAtIGxlbjEsIGxlZnQxID0gMCwgbGVuID0gbGVuMTsKKwkgICAgICAKKwkgICAgICByYyA9IChsZW4gPT0gMCkgPyAwIDogbWVtY21wKGJ1ZmYxLCBidWZmMiwgbGVuKTsKKwkgICAgICAKKwkgICAgICBpZiAocmMgPiAwIHx8IChyYyA9PSAwICYmIHF1aXQgJiYgbGVuMSA+IGxlbjIpKQorCQl7CisJCSAgdW5zaWduZWQgY2hhciAqdG1wID0gcnJzZXRbaSsxXTsKKwkJICBycnNldFtpKzFdID0gcnJzZXRbaV07CisJCSAgcnJzZXRbaV0gPSB0bXA7CisJCSAgc3dhcCA9IHF1aXQgPSAxOworCQl9CisJICAgICAgZWxzZSBpZiAocmMgPCAwKQorCQlxdWl0ID0gMTsKKwkgICAgfQorCX0KKyAgICB9IHdoaWxlIChzd2FwKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgKipycnNldCA9IE5VTEwsICoqc2lncyA9IE5VTEw7CisKKy8qIEdldCBwb2ludGVycyB0byBSUnNldCBtZW1iZXJzIGFuZCBzaWduYXR1cmUocykgZm9yIHNhbWUuCisgICBDaGVjayBzaWduYXR1cmVzLCBhbmQgcmV0dXJuIGtleW5hbWUgYXNzb2NpYXRlZCBpbiBrZXluYW1lLiAqLworc3RhdGljIGludCBleHBsb3JlX3Jyc2V0KHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIsIHNpemVfdCBwbGVuLCBpbnQgY2xhc3MsIGludCB0eXBlLCAKKwkJCSBjaGFyICpuYW1lLCBjaGFyICprZXluYW1lLCBpbnQgKnNpZ2NudCwgaW50ICpycmNudCkKK3sKKyAgc3RhdGljIGludCBycnNldF9zeiA9IDAsIHNpZ19zeiA9IDA7IAorICB1bnNpZ25lZCBjaGFyICpwOworICBpbnQgcnJzZXRpZHgsIHNpZ2lkeCwgaiwgcmRsZW4sIHJlczsKKyAgaW50IGdvdGtleSA9IDA7CisKKyAgaWYgKCEocCA9IHNraXBfcXVlc3Rpb25zKGhlYWRlciwgcGxlbikpKQorICAgIHJldHVybiBTVEFUX0JPR1VTOworCisgICAvKiBsb29rIGZvciBSUlNJR3MgZm9yIHRoaXMgUlJzZXQgYW5kIGdldCBwb2ludGVycyB0byBlYWNoIFJSIGluIHRoZSBzZXQuICovCisgIGZvciAocnJzZXRpZHggPSAwLCBzaWdpZHggPSAwLCBqID0gbnRvaHMoaGVhZGVyLT5hbmNvdW50KSArIG50b2hzKGhlYWRlci0+bnNjb3VudCk7IAorICAgICAgIGogIT0gMDsgai0tKSAKKyAgICB7CisgICAgICB1bnNpZ25lZCBjaGFyICpwc3RhcnQsICpwZGF0YTsKKyAgICAgIGludCBzdHlwZSwgc2NsYXNzLCB0eXBlX2NvdmVyZWQ7CisKKyAgICAgIHBzdGFydCA9IHA7CisgICAgICAKKyAgICAgIGlmICghKHJlcyA9IGV4dHJhY3RfbmFtZShoZWFkZXIsIHBsZW4sICZwLCBuYW1lLCAwLCAxMCkpKQorCXJldHVybiBTVEFUX0JPR1VTOyAvKiBiYWQgcGFja2V0ICovCisgICAgICAKKyAgICAgIEdFVFNIT1JUKHN0eXBlLCBwKTsKKyAgICAgIEdFVFNIT1JUKHNjbGFzcywgcCk7CisgICAgICBwICs9IDQ7IC8qIFRUTCAqLworICAgICAgCisgICAgICBwZGF0YSA9IHA7CisKKyAgICAgIEdFVFNIT1JUKHJkbGVuLCBwKTsKKyAgICAgIAorICAgICAgaWYgKCFDSEVDS19MRU4oaGVhZGVyLCBwLCBwbGVuLCByZGxlbikpCisJcmV0dXJuIDA7IAorICAgICAgCisgICAgICBpZiAocmVzID09IDEgJiYgc2NsYXNzID09IGNsYXNzKQorCXsKKwkgIGlmIChzdHlwZSA9PSB0eXBlKQorCSAgICB7CisJICAgICAgaWYgKCFleHBhbmRfd29ya3NwYWNlKCZycnNldCwgJnJyc2V0X3N6LCBycnNldGlkeCkpCisJCXJldHVybiAwOyAKKwkgICAgICAKKwkgICAgICBycnNldFtycnNldGlkeCsrXSA9IHBzdGFydDsKKwkgICAgfQorCSAgCisJICBpZiAoc3R5cGUgPT0gVF9SUlNJRykKKwkgICAgeworCSAgICAgIGlmIChyZGxlbiA8IDE4KQorCQlyZXR1cm4gMDsgLyogYmFkIHBhY2tldCAqLyAKKwkgICAgICAKKwkgICAgICBHRVRTSE9SVCh0eXBlX2NvdmVyZWQsIHApOworCSAgICAgIHAgKz0gMTY7IC8qIGFsZ28sIGxhYmVscywgb3JpZ190dGwsIHNpZ19leHBpcmF0aW9uLCBzaWdfaW5jZXB0aW9uLCBrZXlfdGFnICovCisJICAgICAgCisJICAgICAgaWYgKGdvdGtleSkKKwkJeworCQkgIC8qIElmIHRoZXJlJ3MgbW9yZSB0aGFuIG9uZSBTSUcsIGVuc3VyZSB0aGV5IGFsbCBoYXZlIHNhbWUga2V5bmFtZSAqLworCQkgIGlmIChleHRyYWN0X25hbWUoaGVhZGVyLCBwbGVuLCAmcCwga2V5bmFtZSwgMCwgMCkgIT0gMSkKKwkJICAgIHJldHVybiAwOworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgZ290a2V5ID0gMTsKKwkJICAKKwkJICBpZiAoIWV4dHJhY3RfbmFtZShoZWFkZXIsIHBsZW4sICZwLCBrZXluYW1lLCAxLCAwKSkKKwkJICAgIHJldHVybiAwOworCQkgIAorCQkgIC8qIFJGQyA0MDM1IDUuMy4xIHNheXMgdGhhdCB0aGUgU2lnbmVyJ3MgTmFtZSBmaWVsZCBNVVNUIGVxdWFsCisJCSAgICAgdGhlIG5hbWUgb2YgdGhlIHpvbmUgY29udGFpbmluZyB0aGUgUlJzZXQuIFdlIGNhbid0IHRlbGwgdGhhdAorCQkgICAgIGZvciBjZXJ0YWluLCBidXQgd2UgY2FuIGNoZWNrIHRoYXQgIHRoZSBSUnNldCBuYW1lIGlzIGVxdWFsIHRvCisJCSAgICAgb3IgZW5jbG9zZXMgdGhlIHNpZ25lcnMgbmFtZSwgd2hpY2ggc2hvdWxkIGJlIGVub3VnaCB0byBzdG9wIAorCQkgICAgIGFuIGF0dGFja2VyIHVzaW5nIHNpZ25hdHVyZXMgbWFkZSB3aXRoIHRoZSBrZXkgb2YgYW4gdW5yZWxhdGVkIAorCQkgICAgIHpvbmUgaGUgY29udHJvbHMuIE5vdGUgdGhhdCB0aGUgcm9vdCBrZXkgaXMgYWx3YXlzIGFsbG93ZWQuICovCisJCSAgaWYgKCprZXluYW1lICE9IDApCisJCSAgICB7CisJCSAgICAgIGNoYXIgKm5hbWVfc3RhcnQ7CisJCSAgICAgIGZvciAobmFtZV9zdGFydCA9IG5hbWU7ICFob3N0bmFtZV9pc2VxdWFsKG5hbWVfc3RhcnQsIGtleW5hbWUpOyApCisJCQlpZiAoKG5hbWVfc3RhcnQgPSBzdHJjaHIobmFtZV9zdGFydCwgJy4nKSkpCisJCQkgIG5hbWVfc3RhcnQrKzsgLyogY2hvcCBhIGxhYmVsIG9mZiBhbmQgdHJ5IGFnYWluICovCisJCQllbHNlCisJCQkgIHJldHVybiAwOworCQkgICAgfQorCQl9CisJCSAgCisJICAgICAgCisJICAgICAgaWYgKHR5cGVfY292ZXJlZCA9PSB0eXBlKQorCQl7CisJCSAgaWYgKCFleHBhbmRfd29ya3NwYWNlKCZzaWdzLCAmc2lnX3N6LCBzaWdpZHgpKQorCQkgICAgcmV0dXJuIDA7IAorCQkgIAorCQkgIHNpZ3Nbc2lnaWR4KytdID0gcGRhdGE7CisJCX0gCisJICAgICAgCisJICAgICAgcCA9IHBkYXRhICsgMjsgLyogcmVzdG9yZSBmb3IgQUREX1JETEVOICovCisJICAgIH0KKwl9CisgICAgICAKKyAgICAgIGlmICghQUREX1JETEVOKGhlYWRlciwgcCwgcGxlbiwgcmRsZW4pKQorCXJldHVybiAwOworICAgIH0KKyAgCisgICpzaWdjbnQgPSBzaWdpZHg7CisgICpycmNudCA9IHJyc2V0aWR4OworCisgIHJldHVybiAxOworfQorCisvKiBWYWxpZGF0ZSBhIHNpbmdsZSBSUnNldCAoY2xhc3MsIHR5cGUsIG5hbWUpIGluIHRoZSBzdXBwbGllZCBETlMgcmVwbHkgCisgICBSZXR1cm4gY29kZToKKyAgIFNUQVRfU0VDVVJFICAgaWYgaXQgdmFsaWRhdGVzLgorICAgU1RBVF9TRUNVUkVfV0lMRENBUkQgaWYgaXQgdmFsaWRhdGVzIGFuZCBpcyB0aGUgcmVzdWx0IG9mIHdpbGRjYXJkIGV4cGFuc2lvbi4KKyAgIChJbiB0aGlzIGNhc2UgKndpbGRjYXJkX291dCBwb2ludHMgdG8gdGhlICJib2R5IiBvZiB0aGUgd2lsZGNhcmQgd2l0aGluIG5hbWUuKSAKKyAgIFNUQVRfQk9HVVMgICAgc2lnbmF0dXJlIGlzIHdyb25nLCBiYWQgcGFja2V0LgorICAgU1RBVF9ORUVEX0tFWSBuZWVkIEROU0tFWSB0byBjb21wbGV0ZSB2YWxpZGF0aW9uIChuYW1lIGlzIHJldHVybmVkIGluIGtleW5hbWUpCisgICBTVEFUX05FRURfRFMgIG5lZWQgRFMgdG8gY29tcGxldGUgdmFsaWRhdGlvbiAobmFtZSBpcyByZXR1cm5lZCBpbiBrZXluYW1lKQorCisgICBJZiBrZXkgaXMgbm9uLU5VTEwsIHVzZSB0aGF0IGtleSwgd2hpY2ggaGFzIHRoZSBhbGdvIGFuZCB0YWcgZ2l2ZW4gaW4gdGhlIHBhcmFtcyBvZiB0aG9zZSBuYW1lcywKKyAgIG90aGVyd2lzZSBmaW5kIHRoZSBrZXkgaW4gdGhlIGNhY2hlLgorCisgICBOYW1lIGlzIHVuY2hhbmdlZCBvbiBleGl0LiBrZXluYW1lIGlzIHVzZWQgYXMgd29ya3NwYWNlIGFuZCB0cmFzaGVkLgorCisgICBDYWxsIGV4cGxvcmVfcnJzZXQgZmlyc3QgdG8gZmluZCBhbmQgY291bnQgUlJzIGFuZCBzaWdzLgorKi8KK3N0YXRpYyBpbnQgdmFsaWRhdGVfcnJzZXQodGltZV90IG5vdywgc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90IHBsZW4sIGludCBjbGFzcywgaW50IHR5cGUsIGludCBzaWdpZHgsIGludCBycnNldGlkeCwgCisJCQkgIGNoYXIgKm5hbWUsIGNoYXIgKmtleW5hbWUsIGNoYXIgKip3aWxkY2FyZF9vdXQsIHN0cnVjdCBibG9ja2RhdGEgKmtleSwgaW50IGtleWxlbiwgaW50IGFsZ29faW4sIGludCBrZXl0YWdfaW4pCit7CisgIHVuc2lnbmVkIGNoYXIgKnA7CisgIGludCByZGxlbiwgaiwgbmFtZV9sYWJlbHMsIGFsZ28sIGxhYmVscywgb3JpZ190dGwsIGtleV90YWc7CisgIHN0cnVjdCBjcmVjICpjcmVjcCA9IE5VTEw7CisgIHUxNiAqcnJfZGVzYyA9IHJyZmlsdGVyX2Rlc2ModHlwZSk7CisgIHUzMiBzaWdfZXhwaXJhdGlvbiwgc2lnX2luY2VwdGlvbgorOworICBpZiAod2lsZGNhcmRfb3V0KQorICAgICp3aWxkY2FyZF9vdXQgPSBOVUxMOworICAKKyAgbmFtZV9sYWJlbHMgPSBjb3VudF9sYWJlbHMobmFtZSk7IC8qIEZvciA0MDM1IDUuMy4yIGNoZWNrICovCisKKyAgLyogU29ydCBSUnNldCByZWNvcmRzIGludG8gY2Fub25pY2FsIG9yZGVyLiAKKyAgICAgTm90ZSB0aGF0IGF0IHRoaXMgcG9pbnQga2V5bmFtZSBhbmQgZGFlbW9uLT53b3Jrc3BhY2VuYW1lIGJ1ZmZzIGFyZQorICAgICB1bnVzZWQsIGFuZCB1c2VkIGFzIHdvcmtzcGFjZSBieSB0aGUgc29ydC4gKi8KKyAgc29ydF9ycnNldChoZWFkZXIsIHBsZW4sIHJyX2Rlc2MsIHJyc2V0aWR4LCBycnNldCwgZGFlbW9uLT53b3Jrc3BhY2VuYW1lLCBrZXluYW1lKTsKKyAgICAgICAgIAorICAvKiBOb3cgdHJ5IGFsbCB0aGUgc2lncyB0byB0cnkgYW5kIGZpbmQgb25lIHdoaWNoIHZhbGlkYXRlcyAqLworICBmb3IgKGogPSAwOyBqIDxzaWdpZHg7IGorKykKKyAgICB7CisgICAgICB1bnNpZ25lZCBjaGFyICpwc2F2LCAqc2lnLCAqZGlnZXN0OworICAgICAgaW50IGksIHdpcmVfbGVuLCBzaWdfbGVuOworICAgICAgY29uc3Qgc3RydWN0IG5ldHRsZV9oYXNoICpoYXNoOworICAgICAgdm9pZCAqY3R4OworICAgICAgY2hhciAqbmFtZV9zdGFydDsKKyAgICAgIHUzMiBuc2lndHRsOworICAgICAgCisgICAgICBwID0gc2lnc1tqXTsKKyAgICAgIEdFVFNIT1JUKHJkbGVuLCBwKTsgLyogcmRsZW4gPj0gMTggY2hlY2tlZCBwcmV2aW91c2x5ICovCisgICAgICBwc2F2ID0gcDsKKyAgICAgIAorICAgICAgcCArPSAyOyAvKiB0eXBlX2NvdmVyZWQgLSBhbHJlYWR5IGNoZWNrZWQgKi8KKyAgICAgIGFsZ28gPSAqcCsrOworICAgICAgbGFiZWxzID0gKnArKzsKKyAgICAgIEdFVExPTkcob3JpZ190dGwsIHApOworICAgICAgR0VUTE9ORyhzaWdfZXhwaXJhdGlvbiwgcCk7CisgICAgICBHRVRMT05HKHNpZ19pbmNlcHRpb24sIHApOworICAgICAgR0VUU0hPUlQoa2V5X3RhZywgcCk7CisgICAgICAKKyAgICAgIGlmICghZXh0cmFjdF9uYW1lKGhlYWRlciwgcGxlbiwgJnAsIGtleW5hbWUsIDEsIDApKQorCXJldHVybiBTVEFUX0JPR1VTOworCisgICAgICBpZiAoIWNoZWNrX2RhdGVfcmFuZ2Uoc2lnX2luY2VwdGlvbiwgc2lnX2V4cGlyYXRpb24pIHx8CisJICBsYWJlbHMgPiBuYW1lX2xhYmVscyB8fAorCSAgIShoYXNoID0gaGFzaF9maW5kKGFsZ29fZGlnZXN0X25hbWUoYWxnbykpKSB8fAorCSAgIWhhc2hfaW5pdChoYXNoLCAmY3R4LCAmZGlnZXN0KSkKKwljb250aW51ZTsKKyAgICAgIAorICAgICAgLyogT0ssIHdlIGhhdmUgdGhlIHNpZ25hdHVyZSByZWNvcmQsIHNlZSBpZiB0aGUgcmVsZXZhbnQgRE5TS0VZIGlzIGluIHRoZSBjYWNoZS4gKi8KKyAgICAgIGlmICgha2V5ICYmICEoY3JlY3AgPSBjYWNoZV9maW5kX2J5X25hbWUoTlVMTCwga2V5bmFtZSwgbm93LCBGX0ROU0tFWSkpKQorCXJldHVybiBTVEFUX05FRURfS0VZOworICAgICAgCisgICAgICBzaWcgPSBwOworICAgICAgc2lnX2xlbiA9IHJkbGVuIC0gKHAgLSBwc2F2KTsKKyAgICAgICAgICAgICAgCisgICAgICBuc2lndHRsID0gaHRvbmwob3JpZ190dGwpOworICAgICAgCisgICAgICBoYXNoLT51cGRhdGUoY3R4LCAxOCwgcHNhdik7CisgICAgICB3aXJlX2xlbiA9IHRvX3dpcmUoa2V5bmFtZSk7CisgICAgICBoYXNoLT51cGRhdGUoY3R4LCAodW5zaWduZWQgaW50KXdpcmVfbGVuLCAodW5zaWduZWQgY2hhciopa2V5bmFtZSk7CisgICAgICBmcm9tX3dpcmUoa2V5bmFtZSk7CisgICAgICAKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBycnNldGlkeDsgKytpKQorCXsKKwkgIGludCBzZWc7CisJICB1bnNpZ25lZCBjaGFyICplbmQsICpjcDsKKwkgIHUxNiBsZW4sICpkcDsKKwkgIAorCSAgcCA9IHJyc2V0W2ldOworCSAgaWYgKCFleHRyYWN0X25hbWUoaGVhZGVyLCBwbGVuLCAmcCwgbmFtZSwgMSwgMTApKSAKKwkgICAgcmV0dXJuIFNUQVRfQk9HVVM7CisKKwkgIG5hbWVfc3RhcnQgPSBuYW1lOworCSAgCisJICAvKiBpZiBtb3JlIGxhYmVscyB0aGFuIGluIFJSc2lnIG5hbWUsIGhhc2ggKi48bm8gbGFiZWxzIGluIHJyc2lnIGxhYmVscyBmaWVsZD4gIDQwMzUgNS4zLjIgKi8KKwkgIGlmIChsYWJlbHMgPCBuYW1lX2xhYmVscykKKwkgICAgeworCSAgICAgIGludCBrOworCSAgICAgIGZvciAoayA9IG5hbWVfbGFiZWxzIC0gbGFiZWxzOyBrICE9IDA7IGstLSkKKwkJeworCQkgIHdoaWxlICgqbmFtZV9zdGFydCAhPSAnLicgJiYgKm5hbWVfc3RhcnQgIT0gMCkKKwkJICAgIG5hbWVfc3RhcnQrKzsKKwkJICBpZiAoayAhPSAxICYmICpuYW1lX3N0YXJ0ID09ICcuJykKKwkJICAgIG5hbWVfc3RhcnQrKzsKKwkJfQorCSAgICAgIAorCSAgICAgIGlmICh3aWxkY2FyZF9vdXQpCisJCSp3aWxkY2FyZF9vdXQgPSBuYW1lX3N0YXJ0KzE7CisKKwkgICAgICBuYW1lX3N0YXJ0LS07CisJICAgICAgKm5hbWVfc3RhcnQgPSAnKic7CisJICAgIH0KKwkgIAorCSAgd2lyZV9sZW4gPSB0b193aXJlKG5hbWVfc3RhcnQpOworCSAgaGFzaC0+dXBkYXRlKGN0eCwgKHVuc2lnbmVkIGludCl3aXJlX2xlbiwgKHVuc2lnbmVkIGNoYXIgKiluYW1lX3N0YXJ0KTsKKwkgIGhhc2gtPnVwZGF0ZShjdHgsIDQsIHApOyAvKiBjbGFzcyBhbmQgdHlwZSAqLworCSAgaGFzaC0+dXBkYXRlKGN0eCwgNCwgKHVuc2lnbmVkIGNoYXIgKikmbnNpZ3R0bCk7CisJICAKKwkgIHAgKz0gODsgLyogc2tpcCBjbGFzcywgdHlwZSwgdHRsICovCisJICBHRVRTSE9SVChyZGxlbiwgcCk7CisJICBpZiAoIUNIRUNLX0xFTihoZWFkZXIsIHAsIHBsZW4sIHJkbGVuKSkKKwkgICAgcmV0dXJuIFNUQVRfQk9HVVM7IAorCSAgCisJICBlbmQgPSBwICsgcmRsZW47CisJICAKKwkgIC8qIGNhbm9uaWNhbGlzZSByZGF0YSBhbmQgY2FsY3VsYXRlIGxlbmd0aCBvZiBzYW1lLCB1c2UgbmFtZSBidWZmZXIgYXMgd29ya3NwYWNlLgorCSAgICAgTm90ZSB0aGF0IG5hbWUgYnVmZmVyIGlzIHR3aWNlIE1BWEROQU1FIGxvbmcgaW4gRE5TU0VDIG1vZGUuICovCisJICBjcCA9IHA7CisJICBkcCA9IHJyX2Rlc2M7CisJICBmb3IgKGxlbiA9IDA7IChzZWcgPSBnZXRfcmRhdGEoaGVhZGVyLCBwbGVuLCBlbmQsIG5hbWUsIE1BWEROQU1FICogMiwgJmNwLCAmZHApKSAhPSAwOyBsZW4gKz0gc2VnKTsKKwkgIGxlbiArPSBlbmQgLSBjcDsKKwkgIGxlbiA9IGh0b25zKGxlbik7CisJICBoYXNoLT51cGRhdGUoY3R4LCAyLCAodW5zaWduZWQgY2hhciAqKSZsZW4pOyAKKwkgIAorCSAgLyogTm93IGNhbm9uaWNhbGlzZSBhZ2FpbiBhbmQgZGlnZXN0LiAqLworCSAgY3AgPSBwOworCSAgZHAgPSBycl9kZXNjOworCSAgd2hpbGUgKChzZWcgPSBnZXRfcmRhdGEoaGVhZGVyLCBwbGVuLCBlbmQsIG5hbWUsIE1BWEROQU1FICogMiwgJmNwLCAmZHApKSkKKwkgICAgaGFzaC0+dXBkYXRlKGN0eCwgc2VnLCAodW5zaWduZWQgY2hhciAqKW5hbWUpOworCSAgaWYgKGNwICE9IGVuZCkKKwkgICAgaGFzaC0+dXBkYXRlKGN0eCwgZW5kIC0gY3AsIGNwKTsKKwl9CisgICAgIAorICAgICAgaGFzaC0+ZGlnZXN0KGN0eCwgaGFzaC0+ZGlnZXN0X3NpemUsIGRpZ2VzdCk7CisgICAgICAKKyAgICAgIC8qIG5hbWVidWZmIHVzZWQgZm9yIHdvcmtzcGFjZSBhYm92ZSwgcmVzdG9yZSB0byBsZWF2ZSB1bmNoYW5nZWQgb24gZXhpdCAqLworICAgICAgcCA9ICh1bnNpZ25lZCBjaGFyKikocnJzZXRbMF0pOworICAgICAgZXh0cmFjdF9uYW1lKGhlYWRlciwgcGxlbiwgJnAsIG5hbWUsIDEsIDApOworCisgICAgICBpZiAoa2V5KQorCXsKKwkgIGlmIChhbGdvX2luID09IGFsZ28gJiYga2V5dGFnX2luID09IGtleV90YWcgJiYKKwkgICAgICB2ZXJpZnkoa2V5LCBrZXlsZW4sIHNpZywgc2lnX2xlbiwgZGlnZXN0LCBoYXNoLT5kaWdlc3Rfc2l6ZSwgYWxnbykpCisJICAgIHJldHVybiBTVEFUX1NFQ1VSRTsKKwl9CisgICAgICBlbHNlCisJeworCSAgLyogaXRlcmF0ZSB0aHJvdWdoIGFsbCBwb3NzaWJsZSBrZXlzIDQwMzUgNS4zLjEgKi8KKwkgIGZvciAoOyBjcmVjcDsgY3JlY3AgPSBjYWNoZV9maW5kX2J5X25hbWUoY3JlY3AsIGtleW5hbWUsIG5vdywgRl9ETlNLRVkpKQorCSAgICBpZiAoY3JlY3AtPmFkZHIua2V5LmFsZ28gPT0gYWxnbyAmJiAKKwkJY3JlY3AtPmFkZHIua2V5LmtleXRhZyA9PSBrZXlfdGFnICYmCisJCWNyZWNwLT51aWQgPT0gKHVuc2lnbmVkIGludCljbGFzcyAmJgorCQl2ZXJpZnkoY3JlY3AtPmFkZHIua2V5LmtleWRhdGEsIGNyZWNwLT5hZGRyLmtleS5rZXlsZW4sIHNpZywgc2lnX2xlbiwgZGlnZXN0LCBoYXNoLT5kaWdlc3Rfc2l6ZSwgYWxnbykpCisJICAgICAgcmV0dXJuIChsYWJlbHMgPCBuYW1lX2xhYmVscykgPyBTVEFUX1NFQ1VSRV9XSUxEQ0FSRCA6IFNUQVRfU0VDVVJFOworCX0KKyAgICB9CisKKyAgcmV0dXJuIFNUQVRfQk9HVVM7Cit9CisgCisKKy8qIFRoZSBETlMgcGFja2V0IGlzIGV4cGVjdGVkIHRvIGNvbnRhaW4gdGhlIGFuc3dlciB0byBhIEROU0tFWSBxdWVyeS4KKyAgIFB1dCBhbGwgRE5TS0VZcyBpbiB0aGUgYW5zd2VyIHdoaWNoIGFyZSB2YWxpZCBpbnRvIHRoZSBjYWNoZS4KKyAgIHJldHVybiBjb2RlczoKKyAgICAgICAgIFNUQVRfT0sgICAgICAgIERvbmUsIGtleShzKSBpbiBjYWNoZS4KKwkgU1RBVF9CT0dVUyAgICAgTm8gRE5TS0VZcyBmb3VuZCwgd2hpY2ggIGNhbiBiZSB2YWxpZGF0ZWQgd2l0aCBEUywKKwkgICAgICAgICAgICAgICAgb3Igc2VsZi1zaWduIGZvciBETlNLRVkgUlJzZXQgaXMgbm90IHZhbGlkLCBiYWQgcGFja2V0LgorCSBTVEFUX05FRURfRFMgICBEUyByZWNvcmRzIHRvIHZhbGlkYXRlIGEga2V5IG5vdCBmb3VuZCwgbmFtZSBpbiBrZXluYW1lIAorCSBTVEFUX05FRURfS0VZICBETlNLRVkgcmVjb3JkcyB0byB2YWxpZGF0ZSBhIGtleSBub3QgZm91bmQsIG5hbWUgaW4ga2V5bmFtZSAKKyovCitpbnQgZG5zc2VjX3ZhbGlkYXRlX2J5X2RzKHRpbWVfdCBub3csIHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIsIHNpemVfdCBwbGVuLCBjaGFyICpuYW1lLCBjaGFyICprZXluYW1lLCBpbnQgY2xhc3MpCit7CisgIHVuc2lnbmVkIGNoYXIgKnBzYXZlLCAqcCA9ICh1bnNpZ25lZCBjaGFyICopKGhlYWRlcisxKTsKKyAgc3RydWN0IGNyZWMgKmNyZWNwLCAqcmVjcDE7CisgIGludCByYywgaiwgcXR5cGUsIHFjbGFzcywgdHRsLCByZGxlbiwgZmxhZ3MsIGFsZ28sIHZhbGlkLCBrZXl0YWc7CisgIHN0cnVjdCBibG9ja2RhdGEgKmtleTsKKyAgc3RydWN0IGFsbF9hZGRyIGE7CisKKyAgaWYgKG50b2hzKGhlYWRlci0+cWRjb3VudCkgIT0gMSB8fAorICAgICAgIWV4dHJhY3RfbmFtZShoZWFkZXIsIHBsZW4sICZwLCBuYW1lLCAxLCA0KSkKKyAgICByZXR1cm4gU1RBVF9CT0dVUzsKKworICBHRVRTSE9SVChxdHlwZSwgcCk7CisgIEdFVFNIT1JUKHFjbGFzcywgcCk7CisgIAorICBpZiAocXR5cGUgIT0gVF9ETlNLRVkgfHwgcWNsYXNzICE9IGNsYXNzIHx8IG50b2hzKGhlYWRlci0+YW5jb3VudCkgPT0gMCkKKyAgICByZXR1cm4gU1RBVF9CT0dVUzsKKworICAvKiBTZWUgaWYgd2UgaGF2ZSBjYWNoZWQgYSBEUyByZWNvcmQgd2hpY2ggdmFsaWRhdGVzIHRoaXMga2V5ICovCisgIGlmICghKGNyZWNwID0gY2FjaGVfZmluZF9ieV9uYW1lKE5VTEwsIG5hbWUsIG5vdywgRl9EUykpKQorICAgIHsKKyAgICAgIHN0cmNweShrZXluYW1lLCBuYW1lKTsKKyAgICAgIHJldHVybiBTVEFUX05FRURfRFM7CisgICAgfQorICAKKyAgLyogTk9URSwgd2UgbmVlZCB0byBmaW5kIE9ORSBETlNLRVkgd2hpY2ggbWF0Y2hlcyB0aGUgRFMgKi8KKyAgZm9yICh2YWxpZCA9IDAsIGogPSBudG9ocyhoZWFkZXItPmFuY291bnQpOyBqICE9IDAgJiYgIXZhbGlkOyBqLS0pIAorICAgIHsKKyAgICAgIC8qIEVuc3VyZSB3ZSBoYXZlIHR5cGUsIGNsYXNzICBUVEwgYW5kIGxlbmd0aCAqLworICAgICAgaWYgKCEocmMgPSBleHRyYWN0X25hbWUoaGVhZGVyLCBwbGVuLCAmcCwgbmFtZSwgMCwgMTApKSkKKwlyZXR1cm4gU1RBVF9CT0dVUzsgLyogYmFkIHBhY2tldCAqLworICAKKyAgICAgIEdFVFNIT1JUKHF0eXBlLCBwKTsgCisgICAgICBHRVRTSE9SVChxY2xhc3MsIHApOworICAgICAgR0VUTE9ORyh0dGwsIHApOworICAgICAgR0VUU0hPUlQocmRsZW4sIHApOworIAorICAgICAgaWYgKCFDSEVDS19MRU4oaGVhZGVyLCBwLCBwbGVuLCByZGxlbikgfHwgcmRsZW4gPCA0KQorCXJldHVybiBTVEFUX0JPR1VTOyAvKiBiYWQgcGFja2V0ICovCisgICAgICAKKyAgICAgIGlmIChxY2xhc3MgIT0gY2xhc3MgfHwgcXR5cGUgIT0gVF9ETlNLRVkgfHwgcmMgPT0gMikKKwl7CisJICBwICs9IHJkbGVuOworCSAgY29udGludWU7CisJfQorICAgICAgICAgICAgCisgICAgICBwc2F2ZSA9IHA7CisgICAgICAKKyAgICAgIEdFVFNIT1JUKGZsYWdzLCBwKTsKKyAgICAgIGlmICgqcCsrICE9IDMpCisJcmV0dXJuIFNUQVRfQk9HVVM7CisgICAgICBhbGdvID0gKnArKzsKKyAgICAgIGtleXRhZyA9IGRuc2tleV9rZXl0YWcoYWxnbywgZmxhZ3MsIHAsIHJkbGVuIC0gNCk7CisgICAgICBrZXkgPSBOVUxMOworICAgICAgCisgICAgICAvKiBrZXkgbXVzdCBoYXZlIHpvbmUga2V5IGZsYWcgc2V0ICovCisgICAgICBpZiAoZmxhZ3MgJiAweDEwMCkKKwlrZXkgPSBibG9ja2RhdGFfYWxsb2MoKGNoYXIqKXAsIHJkbGVuIC0gNCk7CisgICAgICAKKyAgICAgIHAgPSBwc2F2ZTsKKyAgICAgIAorICAgICAgaWYgKCFBRERfUkRMRU4oaGVhZGVyLCBwLCBwbGVuLCByZGxlbikpCisJeworCSAgaWYgKGtleSkKKwkgICAgYmxvY2tkYXRhX2ZyZWUoa2V5KTsKKwkgIHJldHVybiBTVEFUX0JPR1VTOyAvKiBiYWQgcGFja2V0ICovCisJfQorCisgICAgICAvKiBObyB6b25lIGtleSBmbGFnIG9yIG1hbGxvYyBmYWlsdXJlICovCisgICAgICBpZiAoIWtleSkKKwljb250aW51ZTsKKyAgICAgIAorICAgICAgZm9yIChyZWNwMSA9IGNyZWNwOyByZWNwMTsgcmVjcDEgPSBjYWNoZV9maW5kX2J5X25hbWUocmVjcDEsIG5hbWUsIG5vdywgRl9EUykpCisJeworCSAgdm9pZCAqY3R4OworCSAgdW5zaWduZWQgY2hhciAqZGlnZXN0LCAqZHNfZGlnZXN0OworCSAgY29uc3Qgc3RydWN0IG5ldHRsZV9oYXNoICpoYXNoOworCSAgaW50IHNpZ2NudCwgcnJjbnQ7CisKKwkgIGlmIChyZWNwMS0+YWRkci5kcy5hbGdvID09IGFsZ28gJiYgCisJICAgICAgcmVjcDEtPmFkZHIuZHMua2V5dGFnID09IGtleXRhZyAmJgorCSAgICAgIHJlY3AxLT51aWQgPT0gKHVuc2lnbmVkIGludCljbGFzcyAmJgorCSAgICAgIChoYXNoID0gaGFzaF9maW5kKGRzX2RpZ2VzdF9uYW1lKHJlY3AxLT5hZGRyLmRzLmRpZ2VzdCkpKSAmJgorCSAgICAgIGhhc2hfaW5pdChoYXNoLCAmY3R4LCAmZGlnZXN0KSkKKwkgICAgCisJICAgIHsKKwkgICAgICBpbnQgd2lyZV9sZW4gPSB0b193aXJlKG5hbWUpOworCSAgICAgIAorCSAgICAgIC8qIE5vdGUgdGhhdCBkaWdlc3QgbWF5IGJlIGRpZmZlcmVudCBiZXR3ZWVuIERTcywgc28gCisJCSB3ZSBjYW4ndCBtb3ZlIHRoaXMgb3V0c2lkZSB0aGUgbG9vcC4gKi8KKwkgICAgICBoYXNoLT51cGRhdGUoY3R4LCAodW5zaWduZWQgaW50KXdpcmVfbGVuLCAodW5zaWduZWQgY2hhciAqKW5hbWUpOworCSAgICAgIGhhc2gtPnVwZGF0ZShjdHgsICh1bnNpZ25lZCBpbnQpcmRsZW4sIHBzYXZlKTsKKwkgICAgICBoYXNoLT5kaWdlc3QoY3R4LCBoYXNoLT5kaWdlc3Rfc2l6ZSwgZGlnZXN0KTsKKwkgICAgICAKKwkgICAgICBmcm9tX3dpcmUobmFtZSk7CisJICAgICAgCisJICAgICAgaWYgKCEocmVjcDEtPmZsYWdzICYgRl9ORUcpICYmCisJCSAgcmVjcDEtPmFkZHIuZHMua2V5bGVuID09IChpbnQpaGFzaC0+ZGlnZXN0X3NpemUgJiYKKwkJICAoZHNfZGlnZXN0ID0gYmxvY2tkYXRhX3JldHJpZXZlKHJlY3AxLT5hZGRyLmtleS5rZXlkYXRhLCByZWNwMS0+YWRkci5kcy5rZXlsZW4sIE5VTEwpKSAmJgorCQkgIG1lbWNtcChkc19kaWdlc3QsIGRpZ2VzdCwgcmVjcDEtPmFkZHIuZHMua2V5bGVuKSA9PSAwICYmCisJCSAgZXhwbG9yZV9ycnNldChoZWFkZXIsIHBsZW4sIGNsYXNzLCBUX0ROU0tFWSwgbmFtZSwga2V5bmFtZSwgJnNpZ2NudCwgJnJyY250KSAmJgorCQkgIHNpZ2NudCAhPSAwICYmIHJyY250ICE9IDAgJiYKKwkJICB2YWxpZGF0ZV9ycnNldChub3csIGhlYWRlciwgcGxlbiwgY2xhc3MsIFRfRE5TS0VZLCBzaWdjbnQsIHJyY250LCBuYW1lLCBrZXluYW1lLCAKKwkJCQkgTlVMTCwga2V5LCByZGxlbiAtIDQsIGFsZ28sIGtleXRhZykgPT0gU1RBVF9TRUNVUkUpCisJCXsKKwkJICB2YWxpZCA9IDE7CisJCSAgYnJlYWs7CisJCX0KKwkgICAgfQorCX0KKyAgICAgIGJsb2NrZGF0YV9mcmVlKGtleSk7CisgICAgfQorCisgIGlmICh2YWxpZCkKKyAgICB7CisgICAgICAvKiBETlNLRVkgUlJzZXQgZGV0ZXJtaW5lZCB0byBiZSBPSywgbm93IGNhY2hlIGl0LiAqLworICAgICAgY2FjaGVfc3RhcnRfaW5zZXJ0KCk7CisgICAgICAKKyAgICAgIHAgPSBza2lwX3F1ZXN0aW9ucyhoZWFkZXIsIHBsZW4pOworCisgICAgICBmb3IgKGogPSBudG9ocyhoZWFkZXItPmFuY291bnQpOyBqICE9IDA7IGotLSkgCisJeworCSAgLyogRW5zdXJlIHdlIGhhdmUgdHlwZSwgY2xhc3MgIFRUTCBhbmQgbGVuZ3RoICovCisJICBpZiAoIShyYyA9IGV4dHJhY3RfbmFtZShoZWFkZXIsIHBsZW4sICZwLCBuYW1lLCAwLCAxMCkpKQorCSAgICByZXR1cm4gU1RBVF9CT0dVUzsgLyogYmFkIHBhY2tldCAqLworCSAgCisJICBHRVRTSE9SVChxdHlwZSwgcCk7IAorCSAgR0VUU0hPUlQocWNsYXNzLCBwKTsKKwkgIEdFVExPTkcodHRsLCBwKTsKKwkgIEdFVFNIT1JUKHJkbGVuLCBwKTsKKwkgICAgCisJICBpZiAoIUNIRUNLX0xFTihoZWFkZXIsIHAsIHBsZW4sIHJkbGVuKSkKKwkgICAgcmV0dXJuIFNUQVRfQk9HVVM7IC8qIGJhZCBwYWNrZXQgKi8KKwkgIAorCSAgaWYgKHFjbGFzcyA9PSBjbGFzcyAmJiByYyA9PSAxKQorCSAgICB7CisJICAgICAgcHNhdmUgPSBwOworCSAgICAgIAorCSAgICAgIGlmIChxdHlwZSA9PSBUX0ROU0tFWSkKKwkJeworCQkgIGlmIChyZGxlbiA8IDQpCisJCSAgICByZXR1cm4gU1RBVF9CT0dVUzsgLyogYmFkIHBhY2tldCAqLworCQkgIAorCQkgIEdFVFNIT1JUKGZsYWdzLCBwKTsKKwkJICBpZiAoKnArKyAhPSAzKQorCQkgICAgcmV0dXJuIFNUQVRfQk9HVVM7CisJCSAgYWxnbyA9ICpwKys7CisJCSAga2V5dGFnID0gZG5za2V5X2tleXRhZyhhbGdvLCBmbGFncywgcCwgcmRsZW4gLSA0KTsKKwkJICAKKwkJICAvKiBDYWNoZSBuZWVkcyB0byBrbm93biBjbGFzcyBmb3IgRE5TU0VDIHN0dWZmICovCisJCSAgYS5hZGRyLmRuc3NlYy5jbGFzcyA9IGNsYXNzOworCQkgIAorCQkgIGlmICgoa2V5ID0gYmxvY2tkYXRhX2FsbG9jKChjaGFyKilwLCByZGxlbiAtIDQpKSkKKwkJICAgIHsKKwkJICAgICAgaWYgKCEocmVjcDEgPSBjYWNoZV9pbnNlcnQobmFtZSwgJmEsIG5vdywgdHRsLCBGX0ZPUldBUkQgfCBGX0ROU0tFWSB8IEZfRE5TU0VDT0spKSkKKwkJCXsKKwkJCSAgYmxvY2tkYXRhX2ZyZWUoa2V5KTsKKwkJCSAgcmV0dXJuIFNUQVRfQk9HVVM7CisJCQl9CisJCSAgICAgIGVsc2UKKwkJCXsKKwkJCSAgYS5hZGRyLmxvZy5rZXl0YWcgPSBrZXl0YWc7CisJCQkgIGEuYWRkci5sb2cuYWxnbyA9IGFsZ287CisJCQkgIGlmICh2ZXJpZnlfZnVuYyhhbGdvKSkKKwkJCSAgICBsb2dfcXVlcnkoRl9OT0VYVFJBIHwgRl9LRVlUQUcgfCBGX1VQU1RSRUFNLCBuYW1lLCAmYSwgIkROU0tFWSBrZXl0YWcgJWh1LCBhbGdvICVodSIpOworCQkJICBlbHNlCisJCQkgICAgbG9nX3F1ZXJ5KEZfTk9FWFRSQSB8IEZfS0VZVEFHIHwgRl9VUFNUUkVBTSwgbmFtZSwgJmEsICJETlNLRVkga2V5dGFnICVodSwgYWxnbyAlaHUgKG5vdCBzdXBwb3J0ZWQpIik7CisJCQkgIAorCQkJICByZWNwMS0+YWRkci5rZXkua2V5bGVuID0gcmRsZW4gLSA0OworCQkJICByZWNwMS0+YWRkci5rZXkua2V5ZGF0YSA9IGtleTsKKwkJCSAgcmVjcDEtPmFkZHIua2V5LmFsZ28gPSBhbGdvOworCQkJICByZWNwMS0+YWRkci5rZXkua2V5dGFnID0ga2V5dGFnOworCQkJICByZWNwMS0+YWRkci5rZXkuZmxhZ3MgPSBmbGFnczsKKwkJCX0KKwkJICAgIH0KKwkJfQorCSAgICAgIAkgICAgICAKKwkgICAgICBwID0gcHNhdmU7CisJICAgIH0KKworCSAgaWYgKCFBRERfUkRMRU4oaGVhZGVyLCBwLCBwbGVuLCByZGxlbikpCisJICAgIHJldHVybiBTVEFUX0JPR1VTOyAvKiBiYWQgcGFja2V0ICovCisJfQorICAgICAgCisgICAgICAvKiBjb21taXQgY2FjaGUgaW5zZXJ0LiAqLworICAgICAgY2FjaGVfZW5kX2luc2VydCgpOworICAgICAgcmV0dXJuIFNUQVRfT0s7CisgICAgfQorCisgIGxvZ19xdWVyeShGX05PRVhUUkEgfCBGX1VQU1RSRUFNLCBuYW1lLCBOVUxMLCAiQk9HVVMgRE5TS0VZIik7CisgIHJldHVybiBTVEFUX0JPR1VTOworfQorCisvKiBUaGUgRE5TIHBhY2tldCBpcyBleHBlY3RlZCB0byBjb250YWluIHRoZSBhbnN3ZXIgdG8gYSBEUyBxdWVyeQorICAgUHV0IGFsbCBEU3MgaW4gdGhlIGFuc3dlciB3aGljaCBhcmUgdmFsaWQgaW50byB0aGUgY2FjaGUuCisgICBBbHNvIGhhbmRsZXMgcmVwbGllcyB3aGljaCBwcm92ZSB0aGF0IHRoZXJlJ3Mgbm8gRFMgYXQgdGhpcyBsb2NhdGlvbiwgCisgICBlaXRoZXIgYmVjYXVzZSB0aGUgem9uZSBpcyB1bnNpZ25lZCBvciB0aGlzIGlzbid0IGEgem9uZSBjdXQuIFRoZXNlIGFyZQorICAgY2FjaGVkIHRvby4KKyAgIHJldHVybiBjb2RlczoKKyAgIFNUQVRfT0sgICAgICAgICAgQXQgbGVhc3Qgb25lIHZhbGlkIERTIGZvdW5kIGFuZCBpbiBjYWNoZS4KKyAgIFNUQVRfQk9HVVMgICAgICAgbm8gRFMgaW4gcmVwbHkgb3Igbm90IHNpZ25lZCwgZmFpbHMgdmFsaWRhdGlvbiwgYmFkIHBhY2tldC4KKyAgIFNUQVRfTkVFRF9LRVkgICAgRE5TS0VZIHJlY29yZHMgdG8gdmFsaWRhdGUgYSBEUyBub3QgZm91bmQsIG5hbWUgaW4ga2V5bmFtZQorICAgU1RBVF9ORUVEX0RTICAgICBEUyByZWNvcmQgbmVlZGVkLgorKi8KKworaW50IGRuc3NlY192YWxpZGF0ZV9kcyh0aW1lX3Qgbm93LCBzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBzaXplX3QgcGxlbiwgY2hhciAqbmFtZSwgY2hhciAqa2V5bmFtZSwgaW50IGNsYXNzKQoreworICB1bnNpZ25lZCBjaGFyICpwID0gKHVuc2lnbmVkIGNoYXIgKikoaGVhZGVyKzEpOworICBpbnQgcXR5cGUsIHFjbGFzcywgcmMsIGksIG5lZ2Fuc3dlciwgbm9uczsKKyAgaW50IGFjbGFzcywgYXR5cGUsIHJkbGVuOworICB1bnNpZ25lZCBsb25nIHR0bDsKKyAgc3RydWN0IGFsbF9hZGRyIGE7CisKKyAgaWYgKG50b2hzKGhlYWRlci0+cWRjb3VudCkgIT0gMSB8fAorICAgICAgIShwID0gc2tpcF9uYW1lKHAsIGhlYWRlciwgcGxlbiwgNCkpKQorICAgIHJldHVybiBTVEFUX0JPR1VTOworICAKKyAgR0VUU0hPUlQocXR5cGUsIHApOworICBHRVRTSE9SVChxY2xhc3MsIHApOworCisgIGlmIChxdHlwZSAhPSBUX0RTIHx8IHFjbGFzcyAhPSBjbGFzcykKKyAgICByYyA9IFNUQVRfQk9HVVM7CisgIGVsc2UKKyAgICByYyA9IGRuc3NlY192YWxpZGF0ZV9yZXBseShub3csIGhlYWRlciwgcGxlbiwgbmFtZSwga2V5bmFtZSwgTlVMTCwgMCwgJm5lZ2Fuc3dlciwgJm5vbnMpOworICAvKiBOb3RlIGRuc3NlY192YWxpZGF0ZV9yZXBseSgpIHdpbGwgaGF2ZSBjYWNoZWQgcG9zaXRpdmUgYW5zd2VycyAqLworICAKKyAgaWYgKHJjID09IFNUQVRfSU5TRUNVUkUpCisgICAgcmMgPSBTVEFUX0JPR1VTOworIAorICBwID0gKHVuc2lnbmVkIGNoYXIgKikoaGVhZGVyKzEpOworICBleHRyYWN0X25hbWUoaGVhZGVyLCBwbGVuLCAmcCwgbmFtZSwgMSwgNCk7CisgIHAgKz0gNDsgLyogcXR5cGUsIHFjbGFzcyAqLworICAKKyAgLyogSWYgdGhlIGtleSBuZWVkZWQgdG8gdmFsaWRhdGUgdGhlIERTIGlzIG9uIHRoZSBzYW1lIGRvbWFpbiBhcyB0aGUgRFMsIHdlJ2xsCisgICAgIGxvb3AgZ2V0dGluZyBub3doZXJlLiBTdG9wIHRoYXQgbm93LiBUaGlzIGNhbiBoYXBwZW4gb2YgdGhlIERTIGFuc3dlciBjb21lcworICAgICBmcm9tIHRoZSBEUydzIHpvbmUsIGFuZCBub3QgdGhlIHBhcmVudCB6b25lLiAqLworICBpZiAocmMgPT0gU1RBVF9CT0dVUyB8fCAocmMgPT0gU1RBVF9ORUVEX0tFWSAmJiBob3N0bmFtZV9pc2VxdWFsKG5hbWUsIGtleW5hbWUpKSkKKyAgICB7CisgICAgICBsb2dfcXVlcnkoRl9OT0VYVFJBIHwgRl9VUFNUUkVBTSwgbmFtZSwgTlVMTCwgIkJPR1VTIERTIik7CisgICAgICByZXR1cm4gU1RBVF9CT0dVUzsKKyAgICB9CisgIAorICBpZiAocmMgIT0gU1RBVF9TRUNVUkUpCisgICAgcmV0dXJuIHJjOworICAgCisgIGlmICghbmVnYW5zd2VyKQorICAgIHsKKyAgICAgIGNhY2hlX3N0YXJ0X2luc2VydCgpOworICAgICAgCisgICAgICBmb3IgKGkgPSAwOyBpIDwgbnRvaHMoaGVhZGVyLT5hbmNvdW50KTsgaSsrKQorCXsKKwkgIGlmICghKHJjID0gZXh0cmFjdF9uYW1lKGhlYWRlciwgcGxlbiwgJnAsIG5hbWUsIDAsIDEwKSkpCisJICAgIHJldHVybiBTVEFUX0JPR1VTOyAvKiBiYWQgcGFja2V0ICovCisJICAKKwkgIEdFVFNIT1JUKGF0eXBlLCBwKTsKKwkgIEdFVFNIT1JUKGFjbGFzcywgcCk7CisJICBHRVRMT05HKHR0bCwgcCk7CisJICBHRVRTSE9SVChyZGxlbiwgcCk7CisJICAKKwkgIGlmICghQ0hFQ0tfTEVOKGhlYWRlciwgcCwgcGxlbiwgcmRsZW4pKQorCSAgICByZXR1cm4gU1RBVF9CT0dVUzsgLyogYmFkIHBhY2tldCAqLworCSAgCisJICBpZiAoYWNsYXNzID09IGNsYXNzICYmIGF0eXBlID09IFRfRFMgJiYgcmMgPT0gMSkKKwkgICAgeyAKKwkgICAgICBpbnQgYWxnbywgZGlnZXN0LCBrZXl0YWc7CisJICAgICAgdW5zaWduZWQgY2hhciAqcHNhdmUgPSBwOworCSAgICAgIHN0cnVjdCBibG9ja2RhdGEgKmtleTsKKwkgICAgICBzdHJ1Y3QgY3JlYyAqY3JlY3A7CisKKwkgICAgICBpZiAocmRsZW4gPCA0KQorCQlyZXR1cm4gU1RBVF9CT0dVUzsgLyogYmFkIHBhY2tldCAqLworCSAgICAgIAorCSAgICAgIEdFVFNIT1JUKGtleXRhZywgcCk7CisJICAgICAgYWxnbyA9ICpwKys7CisJICAgICAgZGlnZXN0ID0gKnArKzsKKwkgICAgICAKKwkgICAgICAvKiBDYWNoZSBuZWVkcyB0byBrbm93biBjbGFzcyBmb3IgRE5TU0VDIHN0dWZmICovCisJICAgICAgYS5hZGRyLmRuc3NlYy5jbGFzcyA9IGNsYXNzOworCSAgICAgIAorCSAgICAgIGlmICgoa2V5ID0gYmxvY2tkYXRhX2FsbG9jKChjaGFyKilwLCByZGxlbiAtIDQpKSkKKwkJeworCQkgIGlmICghKGNyZWNwID0gY2FjaGVfaW5zZXJ0KG5hbWUsICZhLCBub3csIHR0bCwgRl9GT1JXQVJEIHwgRl9EUyB8IEZfRE5TU0VDT0spKSkKKwkJICAgIHsKKwkJICAgICAgYmxvY2tkYXRhX2ZyZWUoa2V5KTsKKwkJICAgICAgcmV0dXJuIFNUQVRfQk9HVVM7CisJCSAgICB9CisJCSAgZWxzZQorCQkgICAgeworCQkgICAgICBhLmFkZHIubG9nLmtleXRhZyA9IGtleXRhZzsKKwkJICAgICAgYS5hZGRyLmxvZy5hbGdvID0gYWxnbzsKKwkJICAgICAgYS5hZGRyLmxvZy5kaWdlc3QgPSBkaWdlc3Q7CisJCSAgICAgIGlmIChoYXNoX2ZpbmQoZHNfZGlnZXN0X25hbWUoZGlnZXN0KSkgJiYgdmVyaWZ5X2Z1bmMoYWxnbykpCisJCQlsb2dfcXVlcnkoRl9OT0VYVFJBIHwgRl9LRVlUQUcgfCBGX1VQU1RSRUFNLCBuYW1lLCAmYSwgIkRTIGtleXRhZyAlaHUsIGFsZ28gJWh1LCBkaWdlc3QgJWh1Iik7CisJCSAgICAgIGVsc2UKKwkJCWxvZ19xdWVyeShGX05PRVhUUkEgfCBGX0tFWVRBRyB8IEZfVVBTVFJFQU0sIG5hbWUsICZhLCAiRFMga2V5dGFnICVodSwgYWxnbyAlaHUsIGRpZ2VzdCAlaHUgKG5vdCBzdXBwb3J0ZWQpIik7CisJCSAgICAgIAorCQkgICAgICBjcmVjcC0+YWRkci5kcy5kaWdlc3QgPSBkaWdlc3Q7CisJCSAgICAgIGNyZWNwLT5hZGRyLmRzLmtleWRhdGEgPSBrZXk7CisJCSAgICAgIGNyZWNwLT5hZGRyLmRzLmFsZ28gPSBhbGdvOworCQkgICAgICBjcmVjcC0+YWRkci5kcy5rZXl0YWcgPSBrZXl0YWc7CisJCSAgICAgIGNyZWNwLT5hZGRyLmRzLmtleWxlbiA9IHJkbGVuIC0gNDsgCisJCSAgICB9IAorCQl9CisJICAgICAgCisJICAgICAgcCA9IHBzYXZlOworCSAgICB9CisJICBpZiAoIUFERF9SRExFTihoZWFkZXIsIHAsIHBsZW4sIHJkbGVuKSkKKwkgICAgcmV0dXJuIFNUQVRfQk9HVVM7IC8qIGJhZCBwYWNrZXQgKi8KKwl9CisKKyAgICAgIGNhY2hlX2VuZF9pbnNlcnQoKTsKKworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGludCBmbGFncyA9IEZfRk9SV0FSRCB8IEZfRFMgfCBGX05FRyB8IEZfRE5TU0VDT0s7CisgICAgICB1bnNpZ25lZCBsb25nIG1pbnR0bCA9IFVMT05HX01BWDsKKyAgICAgIAorICAgICAgaWYgKCEocCA9IHNraXBfc2VjdGlvbihwLCBudG9ocyhoZWFkZXItPmFuY291bnQpLCBoZWFkZXIsIHBsZW4pKSkKKwlyZXR1cm4gU1RBVF9CT0dVUzsKKyAgICAgIAorICAgICAgaWYgKFJDT0RFKGhlYWRlcikgPT0gTlhET01BSU4pCisJZmxhZ3MgfD0gRl9OWERPTUFJTjsKKyAgICAgIAorICAgICAgLyogV2Ugb25seSBjYWNoZSB2YWxpZGF0ZWQgRFMgcmVjb3JkcywgRE5TU0VDT0sgZmxhZyBoaWphY2tlZCAKKwkgdG8gc3RvcmUgcHJlc2VuY2UvYWJzZW5jZSBvZiBOUy4gKi8KKyAgICAgIGlmIChub25zKQorCWZsYWdzICY9IH5GX0ROU1NFQ09LOworICAgICAgCisgICAgICBmb3IgKGkgPSBudG9ocyhoZWFkZXItPm5zY291bnQpOyBpICE9IDA7IGktLSkKKwl7CisJICBpZiAoIShwID0gc2tpcF9uYW1lKHAsIGhlYWRlciwgcGxlbiwgMCkpKQorCSAgICByZXR1cm4gU1RBVF9CT0dVUzsKKwkgIAorCSAgR0VUU0hPUlQoYXR5cGUsIHApOyAKKwkgIEdFVFNIT1JUKGFjbGFzcywgcCk7CisJICBHRVRMT05HKHR0bCwgcCk7CisJICBHRVRTSE9SVChyZGxlbiwgcCk7CisJICAKKwkgIGlmICghQ0hFQ0tfTEVOKGhlYWRlciwgcCwgcGxlbiwgcmRsZW4pKQorCSAgICByZXR1cm4gU1RBVF9CT0dVUzsgLyogYmFkIHBhY2tldCAqLworCSAgCisJICBpZiAoYWNsYXNzICE9IGNsYXNzIHx8IGF0eXBlICE9IFRfU09BKQorCSAgICB7CisJICAgICAgcCArPSByZGxlbjsKKwkgICAgICBjb250aW51ZTsKKwkgICAgfQorCSAgCisJICBpZiAodHRsIDwgbWludHRsKQorCSAgICBtaW50dGwgPSB0dGw7CisJICAKKwkgIC8qIE1OQU1FICovCisJICBpZiAoIShwID0gc2tpcF9uYW1lKHAsIGhlYWRlciwgcGxlbiwgMCkpKQorCSAgICByZXR1cm4gU1RBVF9CT0dVUzsKKwkgIC8qIFJOQU1FICovCisJICBpZiAoIShwID0gc2tpcF9uYW1lKHAsIGhlYWRlciwgcGxlbiwgMjApKSkKKwkgICAgcmV0dXJuIFNUQVRfQk9HVVM7CisJICBwICs9IDE2OyAvKiBTRVJJQUwgUkVGUkVTSCBSRVRSWSBFWFBJUkUgKi8KKwkgIAorCSAgR0VUTE9ORyh0dGwsIHApOyAvKiBtaW5UVEwgKi8KKwkgIGlmICh0dGwgPCBtaW50dGwpCisJICAgIG1pbnR0bCA9IHR0bDsKKwkgIAorCSAgYnJlYWs7CisJfQorICAgICAgCisgICAgICBpZiAoaSAhPSAwKQorCXsKKwkgIGNhY2hlX3N0YXJ0X2luc2VydCgpOworCSAgCisJICBhLmFkZHIuZG5zc2VjLmNsYXNzID0gY2xhc3M7CisJICBpZiAoIWNhY2hlX2luc2VydChuYW1lLCAmYSwgbm93LCB0dGwsIGZsYWdzKSkKKwkgICAgcmV0dXJuIFNUQVRfQk9HVVM7CisJICAKKwkgIGNhY2hlX2VuZF9pbnNlcnQoKTsgIAorCSAgCisJICBsb2dfcXVlcnkoRl9OT0VYVFJBIHwgRl9VUFNUUkVBTSwgbmFtZSwgTlVMTCwgIm5vIERTIik7CisJfQorICAgIH0KKyAgICAgIAorICByZXR1cm4gU1RBVF9PSzsKK30KKworCisvKiA0MDM0IDYuMSAqLworc3RhdGljIGludCBob3N0bmFtZV9jbXAoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYikKK3sKKyAgY2hhciAqc2EsICplYSwgKmNhLCAqc2IsICplYiwgKmNiOworICB1bnNpZ25lZCBjaGFyIGFjLCBiYzsKKyAgCisgIHNhID0gZWEgPSAoY2hhciAqKWEgKyBzdHJsZW4oYSk7CisgIHNiID0gZWIgPSAoY2hhciAqKWIgKyBzdHJsZW4oYik7CisgCisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIHdoaWxlIChzYSAhPSBhICYmICooc2EtMSkgIT0gJy4nKQorCXNhLS07CisgICAgICAKKyAgICAgIHdoaWxlIChzYiAhPSBiICYmICooc2ItMSkgIT0gJy4nKQorCXNiLS07CisKKyAgICAgIGNhID0gc2E7CisgICAgICBjYiA9IHNiOworCisgICAgICB3aGlsZSAoMSkgCisJeworCSAgaWYgKGNhID09IGVhKQorCSAgICB7CisJICAgICAgaWYgKGNiID09IGViKQorCQlicmVhazsKKwkgICAgICAKKwkgICAgICByZXR1cm4gLTE7CisJICAgIH0KKwkgIAorCSAgaWYgKGNiID09IGViKQorCSAgICByZXR1cm4gMTsKKwkgIAorCSAgYWMgPSAodW5zaWduZWQgY2hhcikgKmNhKys7CisJICBiYyA9ICh1bnNpZ25lZCBjaGFyKSAqY2IrKzsKKwkgIAorCSAgaWYgKGFjID49ICdBJyAmJiBhYyA8PSAnWicpCisJICAgIGFjICs9ICdhJyAtICdBJzsKKwkgIGlmIChiYyA+PSAnQScgJiYgYmMgPD0gJ1onKQorCSAgICBiYyArPSAnYScgLSAnQSc7CisJICAKKwkgIGlmIChhYyA8IGJjKQorCSAgICByZXR1cm4gLTE7CisJICBlbHNlIGlmIChhYyAhPSBiYykKKwkgICAgcmV0dXJuIDE7CisJfQorCisgICAgIAorICAgICAgaWYgKHNhID09IGEpCisJeworCSAgaWYgKHNiID09IGIpCisJICAgIHJldHVybiAwOworCSAgCisJICByZXR1cm4gLTE7CisJfQorICAgICAgCisgICAgICBpZiAoc2IgPT0gYikKKwlyZXR1cm4gMTsKKyAgICAgIAorICAgICAgZWEgPSAtLXNhOworICAgICAgZWIgPSAtLXNiOworICAgIH0KK30KKworc3RhdGljIGludCBwcm92ZV9ub25fZXhpc3RlbmNlX25zZWMoc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90IHBsZW4sIHVuc2lnbmVkIGNoYXIgKipuc2VjcywgaW50IG5zZWNfY291bnQsCisJCQkJICAgIGNoYXIgKndvcmtzcGFjZTEsIGNoYXIgKndvcmtzcGFjZTIsIGNoYXIgKm5hbWUsIGludCB0eXBlLCBpbnQgKm5vbnMpCit7CisgIGludCBpLCByYywgcmRsZW47CisgIHVuc2lnbmVkIGNoYXIgKnAsICpwc2F2ZTsKKyAgaW50IG9mZnNldCA9ICh0eXBlICYgMHhmZikgPj4gMzsKKyAgaW50IG1hc2sgPSAweDgwID4+ICh0eXBlICYgMHgwNyk7CisKKyAgaWYgKG5vbnMpCisgICAgKm5vbnMgPSAxOworICAKKyAgLyogRmluZCBOU0VDIHJlY29yZCB0aGF0IHByb3ZlcyBuYW1lIGRvZXNuJ3QgZXhpc3QgKi8KKyAgZm9yIChpID0gMDsgaSA8IG5zZWNfY291bnQ7IGkrKykKKyAgICB7CisgICAgICBwID0gbnNlY3NbaV07CisgICAgICBpZiAoIWV4dHJhY3RfbmFtZShoZWFkZXIsIHBsZW4sICZwLCB3b3Jrc3BhY2UxLCAxLCAxMCkpCisJcmV0dXJuIDA7CisgICAgICBwICs9IDg7IC8qIGNsYXNzLCB0eXBlLCBUVEwgKi8KKyAgICAgIEdFVFNIT1JUKHJkbGVuLCBwKTsKKyAgICAgIHBzYXZlID0gcDsKKyAgICAgIGlmICghZXh0cmFjdF9uYW1lKGhlYWRlciwgcGxlbiwgJnAsIHdvcmtzcGFjZTIsIDEsIDEwKSkKKwlyZXR1cm4gMDsKKyAgICAgIAorICAgICAgcmMgPSBob3N0bmFtZV9jbXAod29ya3NwYWNlMSwgbmFtZSk7CisgICAgICAKKyAgICAgIGlmIChyYyA9PSAwKQorCXsKKwkgIC8qIDQwMzUgcGFyYSA1LjQuIExhc3Qgc2VudGVuY2UgKi8KKwkgIGlmICh0eXBlID09IFRfTlNFQyB8fCB0eXBlID09IFRfUlJTSUcpCisJICAgIHJldHVybiAxOworCisJICAvKiBOU0VDIHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgUlIgd2UncmUgdGVzdGluZywgY2hlY2sKKwkgICAgIHRoYXQgdGhlIHR5cGUgaW4gcXVlc3Rpb24gZG9lc24ndCBhcHBlYXIgaW4gdGhlIHR5cGUgbWFwICovCisJICByZGxlbiAtPSBwIC0gcHNhdmU7CisJICAvKiByZGxlbiBpcyBub3cgbGVuZ3RoIG9mIHR5cGUgbWFwLCBhbmQgcCBwb2ludHMgdG8gaXQgKi8KKwkgIAorCSAgLyogSWYgd2UgY2FuIHByb3ZlIHRoYXQgdGhlcmUncyBubyBOUyByZWNvcmQsIHJldHVybiB0aGF0IGluZm9ybWF0aW9uLiAqLworCSAgaWYgKG5vbnMgJiYgcmRsZW4gPj0gMiAmJiBwWzBdID09IDAgJiYgKHBbMl0gJiAoMHg4MCA+PiBUX05TKSkgIT0gMCkKKwkgICAgKm5vbnMgPSAwOworCSAgCisJICBpZiAocmRsZW4gPj0gMiAmJiBwWzBdID09IDApCisJICAgIHsKKwkgICAgICAvKiBBIENOQU1FIGFuc3dlciB3b3VsZCBhbHNvIGJlIHZhbGlkLCBzbyBpZiB0aGVyZSdzIGEgQ05BTUUgaXMgc2hvdWxkIAorCQkgaGF2ZSBiZWVuIHJldHVybmVkLiAqLworCSAgICAgIGlmICgocFsyXSAmICgweDgwID4+IFRfQ05BTUUpKSAhPSAwKQorCQlyZXR1cm4gMDsKKwkgICAgICAKKwkgICAgICAvKiBJZiB0aGUgU09BIGJpdCBpcyBzZXQgZm9yIGEgRFMgcmVjb3JkLCB0aGVuIHdlIGhhdmUgdGhlCisJCSBEUyBmcm9tIHRoZSB3cm9uZyBzaWRlIG9mIHRoZSBkZWxlZ2F0aW9uLiAqLworCSAgICAgIGlmICh0eXBlID09IFRfRFMgJiYgKHBbMl0gJiAoMHg4MCA+PiBUX1NPQSkpICE9IDApCisJCXJldHVybiAwOworCSAgICB9CisKKwkgIHdoaWxlIChyZGxlbiA+PSAyKQorCSAgICB7CisJICAgICAgaWYgKCFDSEVDS19MRU4oaGVhZGVyLCBwLCBwbGVuLCByZGxlbikpCisJCXJldHVybiAwOworCSAgICAgIAorCSAgICAgIGlmIChwWzBdID09IHR5cGUgPj4gOCkKKwkJeworCQkgIC8qIERvZXMgdGhlIE5TRUMgc2F5IG91ciB0eXBlIGV4aXN0cz8gKi8KKwkJICBpZiAob2Zmc2V0IDwgcFsxXSAmJiAocFtvZmZzZXQrMl0gJiBtYXNrKSAhPSAwKQorCQkgICAgcmV0dXJuIDA7CisJCSAgCisJCSAgYnJlYWs7IC8qIGZpbmlzaGVkIGNoZWNraW5nICovCisJCX0KKwkgICAgICAKKwkgICAgICByZGxlbiAtPSBwWzFdOworCSAgICAgIHAgKz0gIHBbMV07CisJICAgIH0KKwkgIAorCSAgcmV0dXJuIDE7CisJfQorICAgICAgZWxzZSBpZiAocmMgPT0gLTEpCisJeworCSAgLyogTm9ybWFsIGNhc2UsIG5hbWUgZmFsbHMgYmV0d2VlbiBOU0VDIG5hbWUgYW5kIG5leHQgZG9tYWluIG5hbWUsCisJICAgICB3cmFwIGFyb3VuZCBjYXNlLCBuYW1lIGZhbGxzIGJldHdlZW4gTlNFQyBuYW1lIChyYyA9PSAtMSkgYW5kIGVuZCAqLworCSAgaWYgKGhvc3RuYW1lX2NtcCh3b3Jrc3BhY2UyLCBuYW1lKSA+PSAwIHx8IGhvc3RuYW1lX2NtcCh3b3Jrc3BhY2UxLCB3b3Jrc3BhY2UyKSA+PSAwKQorCSAgICByZXR1cm4gMTsKKwl9CisgICAgICBlbHNlIAorCXsKKwkgIC8qIHdyYXAgYXJvdW5kIGNhc2UsIG5hbWUgZmFsbHMgYmV0d2VlbiBzdGFydCBhbmQgbmV4dCBkb21haW4gbmFtZSAqLworCSAgaWYgKGhvc3RuYW1lX2NtcCh3b3Jrc3BhY2UxLCB3b3Jrc3BhY2UyKSA+PSAwICYmIGhvc3RuYW1lX2NtcCh3b3Jrc3BhY2UyLCBuYW1lKSA+PTAgKQorCSAgICByZXR1cm4gMTsKKwl9CisgICAgfQorICAKKyAgcmV0dXJuIDA7Cit9CisKKy8qIHJldHVybiBkaWdlc3QgbGVuZ3RoLCBvciB6ZXJvIG9uIGVycm9yICovCitzdGF0aWMgaW50IGhhc2hfbmFtZShjaGFyICppbiwgdW5zaWduZWQgY2hhciAqKm91dCwgc3RydWN0IG5ldHRsZV9oYXNoIGNvbnN0ICpoYXNoLCAKKwkJICAgICB1bnNpZ25lZCBjaGFyICpzYWx0LCBpbnQgc2FsdF9sZW4sIGludCBpdGVyYXRpb25zKQoreworICB2b2lkICpjdHg7CisgIHVuc2lnbmVkIGNoYXIgKmRpZ2VzdDsKKyAgaW50IGk7CisKKyAgaWYgKCFoYXNoX2luaXQoaGFzaCwgJmN0eCwgJmRpZ2VzdCkpCisgICAgcmV0dXJuIDA7CisgCisgIGhhc2gtPnVwZGF0ZShjdHgsIHRvX3dpcmUoaW4pLCAodW5zaWduZWQgY2hhciAqKWluKTsKKyAgaGFzaC0+dXBkYXRlKGN0eCwgc2FsdF9sZW4sIHNhbHQpOworICBoYXNoLT5kaWdlc3QoY3R4LCBoYXNoLT5kaWdlc3Rfc2l6ZSwgZGlnZXN0KTsKKworICBmb3IoaSA9IDA7IGkgPCBpdGVyYXRpb25zOyBpKyspCisgICAgeworICAgICAgaGFzaC0+dXBkYXRlKGN0eCwgaGFzaC0+ZGlnZXN0X3NpemUsIGRpZ2VzdCk7CisgICAgICBoYXNoLT51cGRhdGUoY3R4LCBzYWx0X2xlbiwgc2FsdCk7CisgICAgICBoYXNoLT5kaWdlc3QoY3R4LCBoYXNoLT5kaWdlc3Rfc2l6ZSwgZGlnZXN0KTsKKyAgICB9CisgICAKKyAgZnJvbV93aXJlKGluKTsKKworICAqb3V0ID0gZGlnZXN0OworICByZXR1cm4gaGFzaC0+ZGlnZXN0X3NpemU7Cit9CisKKy8qIERlY29kZSBiYXNlMzIgdG8gZmlyc3QgIi4iIG9yIGVuZCBvZiBzdHJpbmcgKi8KK3N0YXRpYyBpbnQgYmFzZTMyX2RlY29kZShjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0KQoreworICBpbnQgb2MsIG9uLCBjLCBtYXNrLCBpOworICB1bnNpZ25lZCBjaGFyICpwID0gb3V0OworIAorICBmb3IgKGMgPSAqaW4sIG9jID0gMCwgb24gPSAwOyBjICE9IDAgJiYgYyAhPSAnLic7IGMgPSAqKytpbikgCisgICAgeworICAgICAgaWYgKGMgPj0gJzAnICYmIGMgPD0gJzknKQorCWMgLT0gJzAnOworICAgICAgZWxzZSBpZiAoYyA+PSAnYScgJiYgYyA8PSAndicpCisJYyAtPSAnYScsIGMgKz0gMTA7CisgICAgICBlbHNlIGlmIChjID49ICdBJyAmJiBjIDw9ICdWJykKKwljIC09ICdBJywgYyArPSAxMDsKKyAgICAgIGVsc2UKKwlyZXR1cm4gMDsKKyAgICAgIAorICAgICAgZm9yIChtYXNrID0gMHgxMCwgaSA9IDA7IGkgPCA1OyBpKyspCisgICAgICAgIHsKKwkgIGlmIChjICYgbWFzaykKKwkgICAgb2MgfD0gMTsKKwkgIG1hc2sgPSBtYXNrID4+IDE7CisJICBpZiAoKCgrK29uKSAmIDcpID09IDApCisJICAgICpwKysgPSBvYzsKKwkgIG9jID0gb2MgPDwgMTsKKwl9CisgICAgfQorICAKKyAgaWYgKChvbiAmIDcpICE9IDApCisgICAgcmV0dXJuIDA7CisKKyAgcmV0dXJuIHAgLSBvdXQ7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfbnNlYzNfY292ZXJhZ2Uoc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90IHBsZW4sIGludCBkaWdlc3RfbGVuLCB1bnNpZ25lZCBjaGFyICpkaWdlc3QsIGludCB0eXBlLAorCQkJCWNoYXIgKndvcmtzcGFjZTEsIGNoYXIgKndvcmtzcGFjZTIsIHVuc2lnbmVkIGNoYXIgKipuc2VjcywgaW50IG5zZWNfY291bnQsIGludCAqbm9ucykKK3sKKyAgaW50IGksIGhhc2hfbGVuLCBzYWx0X2xlbiwgYmFzZTMyX2xlbiwgcmRsZW4sIGZsYWdzOworICB1bnNpZ25lZCBjaGFyICpwLCAqcHNhdmU7CisKKyAgZm9yIChpID0gMDsgaSA8IG5zZWNfY291bnQ7IGkrKykKKyAgICBpZiAoKHAgPSBuc2Vjc1tpXSkpCisgICAgICB7CisgICAgICAgCWlmICghZXh0cmFjdF9uYW1lKGhlYWRlciwgcGxlbiwgJnAsIHdvcmtzcGFjZTEsIDEsIDApIHx8CisJICAgICEoYmFzZTMyX2xlbiA9IGJhc2UzMl9kZWNvZGUod29ya3NwYWNlMSwgKHVuc2lnbmVkIGNoYXIgKil3b3Jrc3BhY2UyKSkpCisJICByZXR1cm4gMDsKKwkKKwlwICs9IDg7IC8qIGNsYXNzLCB0eXBlLCBUVEwgKi8KKwlHRVRTSE9SVChyZGxlbiwgcCk7CisJcHNhdmUgPSBwOworCXArKzsgLyogYWxnbyAqLworCWZsYWdzID0gKnArKzsgLyogZmxhZ3MgKi8KKwlwICs9IDI7IC8qIGl0ZXJhdGlvbnMgKi8KKwlzYWx0X2xlbiA9ICpwKys7IC8qIHNhbHRfbGVuICovCisJcCArPSBzYWx0X2xlbjsgLyogc2FsdCAqLworCWhhc2hfbGVuID0gKnArKzsgLyogcCBub3cgcG9pbnRzIHRvIG5leHQgaGFzaGVkIG5hbWUgKi8KKwkKKwlpZiAoIUNIRUNLX0xFTihoZWFkZXIsIHAsIHBsZW4sIGhhc2hfbGVuKSkKKwkgIHJldHVybiAwOworCQorCWlmIChkaWdlc3RfbGVuID09IGJhc2UzMl9sZW4gJiYgaGFzaF9sZW4gPT0gYmFzZTMyX2xlbikKKwkgIHsKKwkgICAgaW50IHJjID0gbWVtY21wKHdvcmtzcGFjZTIsIGRpZ2VzdCwgZGlnZXN0X2xlbik7CisKKwkgICAgaWYgKHJjID09IDApCisJICAgICAgeworCQkvKiBXZSBmb3VuZCBhbiBOU0VDMyB3aG9zZSBoYXNoZWQgbmFtZSBleGFjdGx5IG1hdGNoZXMgdGhlIHF1ZXJ5LCBzbworCQkgICB3ZSBqdXN0IG5lZWQgdG8gY2hlY2sgdGhlIHR5cGUgbWFwLiBwIHBvaW50cyB0byB0aGUgUlIgZGF0YSBmb3IgdGhlIHJlY29yZC4gKi8KKwkJCisJCWludCBvZmZzZXQgPSAodHlwZSAmIDB4ZmYpID4+IDM7CisJCWludCBtYXNrID0gMHg4MCA+PiAodHlwZSAmIDB4MDcpOworCQkKKwkJcCArPSBoYXNoX2xlbjsgLyogc2tpcCBuZXh0LWRvbWFpbiBoYXNoICovCisJCXJkbGVuIC09IHAgLSBwc2F2ZTsKKworCQlpZiAoIUNIRUNLX0xFTihoZWFkZXIsIHAsIHBsZW4sIHJkbGVuKSkKKwkJICByZXR1cm4gMDsKKwkJCisJCWlmIChyZGxlbiA+PSAyICYmIHBbMF0gPT0gMCkKKwkJICB7CisJCSAgICAvKiBJZiB3ZSBjYW4gcHJvdmUgdGhhdCB0aGVyZSdzIG5vIE5TIHJlY29yZCwgcmV0dXJuIHRoYXQgaW5mb3JtYXRpb24uICovCisJCSAgICBpZiAobm9ucyAmJiAocFsyXSAmICgweDgwID4+IFRfTlMpKSAhPSAwKQorCQkgICAgICAqbm9ucyA9IDA7CisJCQorCQkgICAgLyogQSBDTkFNRSBhbnN3ZXIgd291bGQgYWxzbyBiZSB2YWxpZCwgc28gaWYgdGhlcmUncyBhIENOQU1FIGlzIHNob3VsZCAKKwkJICAgICAgIGhhdmUgYmVlbiByZXR1cm5lZC4gKi8KKwkJICAgIGlmICgocFsyXSAmICgweDgwID4+IFRfQ05BTUUpKSAhPSAwKQorCQkgICAgICByZXR1cm4gMDsKKwkJICAgIAorCQkgICAgLyogSWYgdGhlIFNPQSBiaXQgaXMgc2V0IGZvciBhIERTIHJlY29yZCwgdGhlbiB3ZSBoYXZlIHRoZQorCQkgICAgICAgRFMgZnJvbSB0aGUgd3Jvbmcgc2lkZSBvZiB0aGUgZGVsZWdhdGlvbi4gKi8KKwkJICAgIGlmICh0eXBlID09IFRfRFMgJiYgKHBbMl0gJiAoMHg4MCA+PiBUX1NPQSkpICE9IDApCisJCSAgICAgIHJldHVybiAwOworCQkgIH0KKworCQl3aGlsZSAocmRsZW4gPj0gMikKKwkJICB7CisJCSAgICBpZiAocFswXSA9PSB0eXBlID4+IDgpCisJCSAgICAgIHsKKwkJCS8qIERvZXMgdGhlIE5TRUMzIHNheSBvdXIgdHlwZSBleGlzdHM/ICovCisJCQlpZiAob2Zmc2V0IDwgcFsxXSAmJiAocFtvZmZzZXQrMl0gJiBtYXNrKSAhPSAwKQorCQkJICByZXR1cm4gMDsKKwkJCQorCQkJYnJlYWs7IC8qIGZpbmlzaGVkIGNoZWNraW5nICovCisJCSAgICAgIH0KKwkJICAgIAorCQkgICAgcmRsZW4gLT0gcFsxXTsKKwkJICAgIHAgKz0gIHBbMV07CisJCSAgfQorCQkKKwkJcmV0dXJuIDE7CisJICAgICAgfQorCSAgICBlbHNlIGlmIChyYyA8IDApCisJICAgICAgeworCQkvKiBOb3JtYWwgY2FzZSwgaGFzaCBmYWxscyBiZXR3ZWVuIE5TRUMzIG5hbWUtaGFzaCBhbmQgbmV4dCBkb21haW4gbmFtZS1oYXNoLAorCQkgICB3cmFwIGFyb3VuZCBjYXNlLCBuYW1lLWhhc2ggZmFsbHMgYmV0d2VlbiBOU0VDMyBuYW1lLWhhc2ggYW5kIGVuZCAqLworCQlpZiAobWVtY21wKHAsIGRpZ2VzdCwgZGlnZXN0X2xlbikgPj0gMCB8fCBtZW1jbXAod29ya3NwYWNlMiwgcCwgZGlnZXN0X2xlbikgPj0gMCkKKwkJICB7CisJCSAgICBpZiAoKGZsYWdzICYgMHgwMSkgJiYgbm9ucykgLyogb3B0IG91dCAqLworCQkgICAgICAqbm9ucyA9IDA7CisKKwkJICAgIHJldHVybiAxOworCQkgIH0KKwkgICAgICB9CisJICAgIGVsc2UgCisJICAgICAgeworCQkvKiB3cmFwIGFyb3VuZCBjYXNlLCBuYW1lIGZhbGxzIGJldHdlZW4gc3RhcnQgYW5kIG5leHQgZG9tYWluIG5hbWUgKi8KKwkJaWYgKG1lbWNtcCh3b3Jrc3BhY2UyLCBwLCBkaWdlc3RfbGVuKSA+PSAwICYmIG1lbWNtcChwLCBkaWdlc3QsIGRpZ2VzdF9sZW4pID49IDApCisJCSAgeworCQkgICAgaWYgKChmbGFncyAmIDB4MDEpICYmIG5vbnMpIC8qIG9wdCBvdXQgKi8KKwkJICAgICAgKm5vbnMgPSAwOworCisJCSAgICByZXR1cm4gMTsKKwkJICB9CisJICAgICAgfQorCSAgfQorICAgICAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByb3ZlX25vbl9leGlzdGVuY2VfbnNlYzMoc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90IHBsZW4sIHVuc2lnbmVkIGNoYXIgKipuc2VjcywgaW50IG5zZWNfY291bnQsCisJCQkJICAgICBjaGFyICp3b3Jrc3BhY2UxLCBjaGFyICp3b3Jrc3BhY2UyLCBjaGFyICpuYW1lLCBpbnQgdHlwZSwgY2hhciAqd2lsZG5hbWUsIGludCAqbm9ucykKK3sKKyAgdW5zaWduZWQgY2hhciAqc2FsdCwgKnAsICpkaWdlc3Q7CisgIGludCBkaWdlc3RfbGVuLCBpLCBpdGVyYXRpb25zLCBzYWx0X2xlbiwgYmFzZTMyX2xlbiwgYWxnbyA9IDA7CisgIHN0cnVjdCBuZXR0bGVfaGFzaCBjb25zdCAqaGFzaDsKKyAgY2hhciAqY2xvc2VzdF9lbmNsb3NlciwgKm5leHRfY2xvc2VzdCwgKndpbGRjYXJkOworICAKKyAgaWYgKG5vbnMpCisgICAgKm5vbnMgPSAxOworICAKKyAgLyogTG9vayB0aG91Z2ggdGhlIE5TRUMzIHJlY29yZHMgdG8gZmluZCB0aGUgZmlyc3Qgb25lIHdpdGggCisgICAgIGFuIGFsZ29yaXRobSB3ZSBzdXBwb3J0LgorCisgICAgIFRha2UgdGhlIGFsZ28sIGl0ZXJhdGlvbnMsIGFuZCBzYWx0IG9mIHRoYXQgcmVjb3JkCisgICAgIGFzIHRoZSBvbmVzIHdlJ3JlIGdvaW5nIHRvIHVzZSwgYW5kIHBydW5lIGFueSAKKyAgICAgdGhhdCBkb24ndCBtYXRjaC4gKi8KKyAgCisgIGZvciAoaSA9IDA7IGkgPCBuc2VjX2NvdW50OyBpKyspCisgICAgeworICAgICAgaWYgKCEocCA9IHNraXBfbmFtZShuc2Vjc1tpXSwgaGVhZGVyLCBwbGVuLCAxNSkpKQorCXJldHVybiAwOyAvKiBiYWQgcGFja2V0ICovCisgICAgICAKKyAgICAgIHAgKz0gMTA7IC8qIHR5cGUsIGNsYXNzLCBUVEwsIHJkbGVuICovCisgICAgICBhbGdvID0gKnArKzsKKyAgICAgIAorICAgICAgaWYgKChoYXNoID0gaGFzaF9maW5kKG5zZWMzX2RpZ2VzdF9uYW1lKGFsZ28pKSkpCisJYnJlYWs7IC8qIGtub3duIGFsZ28gKi8KKyAgICB9CisKKyAgLyogTm8gdXNhYmxlIE5TRUMzcyAqLworICBpZiAoaSA9PSBuc2VjX2NvdW50KQorICAgIHJldHVybiAwOworCisgIHArKzsgLyogZmxhZ3MgKi8KKworICBHRVRTSE9SVCAoaXRlcmF0aW9ucywgcCk7CisgIC8qIFVwcGVyLWJvdW5kIGl0ZXJhdGlvbnMsIHRvIGF2b2lkIERvUy4KKyAgICAgU3RyaWN0bHksIHRoZXJlIGFyZSBsb3dlciBib3VuZHMgZm9yIHNtYWxsIGtleXMsIGJ1dAorICAgICBzaW5jZSB3ZSBkb24ndCBoYXZlIGtleSBzaXplIGluZm8gaGVyZSwgYXQgbGVhc3QgbGltaXQKKyAgICAgdG8gdGhlIGxhcmdlc3QgYm91bmQsIGZvciA0MDk2LWJpdCBrZXlzLiBSRkMgNTE1NSAxMC4zICovCisgIGlmIChpdGVyYXRpb25zID4gMjUwMCkKKyAgICByZXR1cm4gMDsKKyAgCisgIHNhbHRfbGVuID0gKnArKzsKKyAgc2FsdCA9IHA7CisgIGlmICghQ0hFQ0tfTEVOKGhlYWRlciwgc2FsdCwgcGxlbiwgc2FsdF9sZW4pKQorICAgIHJldHVybiAwOyAvKiBiYWQgcGFja2V0ICovCisgICAgCisgIC8qIE5vdyBwcnVuZSBzbyB3ZSBvbmx5IGhhdmUgTlNFQzMgcmVjb3JkcyB3aXRoIHNhbWUgaXRlcmF0aW9ucywgc2FsdCBhbmQgYWxnbyAqLworICBmb3IgKGkgPSAwOyBpIDwgbnNlY19jb3VudDsgaSsrKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIgKm5zZWMzcCA9IG5zZWNzW2ldOworICAgICAgaW50IHRoaXNfaXRlciwgZmxhZ3M7CisKKyAgICAgIG5zZWNzW2ldID0gTlVMTDsgLyogU3BlY3VsYXRpdmUsIHdpbGwgYmUgcmVzdG9yZWQgaWYgT0suICovCisgICAgICAKKyAgICAgIGlmICghKHAgPSBza2lwX25hbWUobnNlYzNwLCBoZWFkZXIsIHBsZW4sIDE1KSkpCisJcmV0dXJuIDA7IC8qIGJhZCBwYWNrZXQgKi8KKyAgICAgIAorICAgICAgcCArPSAxMDsgLyogdHlwZSwgY2xhc3MsIFRUTCwgcmRsZW4gKi8KKyAgICAgIAorICAgICAgaWYgKCpwKysgIT0gYWxnbykKKwljb250aW51ZTsKKyAKKyAgICAgIGZsYWdzID0gKnArKzsgLyogZmxhZ3MgKi8KKyAgICAgIAorICAgICAgLyogNTE1NSA4LjIgKi8KKyAgICAgIGlmIChmbGFncyAhPSAwICYmIGZsYWdzICE9IDEpCisJY29udGludWU7CisKKyAgICAgIEdFVFNIT1JUKHRoaXNfaXRlciwgcCk7CisgICAgICBpZiAodGhpc19pdGVyICE9IGl0ZXJhdGlvbnMpCisJY29udGludWU7CisKKyAgICAgIGlmIChzYWx0X2xlbiAhPSAqcCsrKQorCWNvbnRpbnVlOworICAgICAgCisgICAgICBpZiAoIUNIRUNLX0xFTihoZWFkZXIsIHAsIHBsZW4sIHNhbHRfbGVuKSkKKwlyZXR1cm4gMDsgLyogYmFkIHBhY2tldCAqLworCisgICAgICBpZiAobWVtY21wKHAsIHNhbHQsIHNhbHRfbGVuKSAhPSAwKQorCWNvbnRpbnVlOworCisgICAgICAvKiBBbGwgbWF0Y2gsIHB1dCB0aGUgcG9pbnRlciBiYWNrICovCisgICAgICBuc2Vjc1tpXSA9IG5zZWMzcDsKKyAgICB9CisKKyAgaWYgKChkaWdlc3RfbGVuID0gaGFzaF9uYW1lKG5hbWUsICZkaWdlc3QsIGhhc2gsIHNhbHQsIHNhbHRfbGVuLCBpdGVyYXRpb25zKSkgPT0gMCkKKyAgICByZXR1cm4gMDsKKyAgCisgIGlmIChjaGVja19uc2VjM19jb3ZlcmFnZShoZWFkZXIsIHBsZW4sIGRpZ2VzdF9sZW4sIGRpZ2VzdCwgdHlwZSwgd29ya3NwYWNlMSwgd29ya3NwYWNlMiwgbnNlY3MsIG5zZWNfY291bnQsIG5vbnMpKQorICAgIHJldHVybiAxOworCisgIC8qIENhbid0IGZpbmQgYW4gTlNFQzMgd2hpY2ggY292ZXJzIHRoZSBuYW1lIGRpcmVjdGx5LCB3ZSBuZWVkIHRoZSAiY2xvc2VzdCBlbmNsb3NlciBOU0VDMyIgCisgICAgIG9yIGFuIGFuc3dlciBpbmZlcnJlZCBmcm9tIGEgd2lsZGNhcmQgcmVjb3JkLiAqLworICBjbG9zZXN0X2VuY2xvc2VyID0gbmFtZTsKKyAgbmV4dF9jbG9zZXN0ID0gTlVMTDsKKworICBkbworICAgIHsKKyAgICAgIGlmICgqY2xvc2VzdF9lbmNsb3NlciA9PSAnLicpCisJY2xvc2VzdF9lbmNsb3NlcisrOworCisgICAgICBpZiAod2lsZG5hbWUgJiYgaG9zdG5hbWVfaXNlcXVhbChjbG9zZXN0X2VuY2xvc2VyLCB3aWxkbmFtZSkpCisJYnJlYWs7CisKKyAgICAgIGlmICgoZGlnZXN0X2xlbiA9IGhhc2hfbmFtZShjbG9zZXN0X2VuY2xvc2VyLCAmZGlnZXN0LCBoYXNoLCBzYWx0LCBzYWx0X2xlbiwgaXRlcmF0aW9ucykpID09IDApCisJcmV0dXJuIDA7CisgICAgICAKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBuc2VjX2NvdW50OyBpKyspCisJaWYgKChwID0gbnNlY3NbaV0pKQorCSAgeworCSAgICBpZiAoIWV4dHJhY3RfbmFtZShoZWFkZXIsIHBsZW4sICZwLCB3b3Jrc3BhY2UxLCAxLCAwKSB8fAorCQkhKGJhc2UzMl9sZW4gPSBiYXNlMzJfZGVjb2RlKHdvcmtzcGFjZTEsICh1bnNpZ25lZCBjaGFyICopd29ya3NwYWNlMikpKQorCSAgICAgIHJldHVybiAwOworCSAgCisJICAgIGlmIChkaWdlc3RfbGVuID09IGJhc2UzMl9sZW4gJiYKKwkJbWVtY21wKGRpZ2VzdCwgd29ya3NwYWNlMiwgZGlnZXN0X2xlbikgPT0gMCkKKwkgICAgICBicmVhazsgLyogR290aXQgKi8KKwkgIH0KKyAgICAgIAorICAgICAgaWYgKGkgIT0gbnNlY19jb3VudCkKKwlicmVhazsKKyAgICAgIAorICAgICAgbmV4dF9jbG9zZXN0ID0gY2xvc2VzdF9lbmNsb3NlcjsKKyAgICB9CisgIHdoaWxlICgoY2xvc2VzdF9lbmNsb3NlciA9IHN0cmNocihjbG9zZXN0X2VuY2xvc2VyLCAnLicpKSk7CisgIAorICBpZiAoIWNsb3Nlc3RfZW5jbG9zZXIgfHwgIW5leHRfY2xvc2VzdCkKKyAgICByZXR1cm4gMDsKKyAgCisgIC8qIExvb2sgZm9yIE5TRUMzIHRoYXQgcHJvdmVzIHRoZSBub24tZXhpc3RlbmNlIG9mIHRoZSBuZXh0LWNsb3Nlc3QgZW5jbG9zZXIgKi8KKyAgaWYgKChkaWdlc3RfbGVuID0gaGFzaF9uYW1lKG5leHRfY2xvc2VzdCwgJmRpZ2VzdCwgaGFzaCwgc2FsdCwgc2FsdF9sZW4sIGl0ZXJhdGlvbnMpKSA9PSAwKQorICAgIHJldHVybiAwOworCisgIGlmICghY2hlY2tfbnNlYzNfY292ZXJhZ2UoaGVhZGVyLCBwbGVuLCBkaWdlc3RfbGVuLCBkaWdlc3QsIHR5cGUsIHdvcmtzcGFjZTEsIHdvcmtzcGFjZTIsIG5zZWNzLCBuc2VjX2NvdW50LCBOVUxMKSkKKyAgICByZXR1cm4gMDsKKyAgCisgIC8qIEZpbmFsbHksIGNoZWNrIHRoYXQgdGhlcmUncyBubyBzZWF0IG9mIHdpbGRjYXJkIHN5bnRoZXNpcyAqLworICBpZiAoIXdpbGRuYW1lKQorICAgIHsKKyAgICAgIGlmICghKHdpbGRjYXJkID0gc3RyY2hyKG5leHRfY2xvc2VzdCwgJy4nKSkgfHwgd2lsZGNhcmQgPT0gbmV4dF9jbG9zZXN0KQorCXJldHVybiAwOworICAgICAgCisgICAgICB3aWxkY2FyZC0tOworICAgICAgKndpbGRjYXJkID0gJyonOworICAgICAgCisgICAgICBpZiAoKGRpZ2VzdF9sZW4gPSBoYXNoX25hbWUod2lsZGNhcmQsICZkaWdlc3QsIGhhc2gsIHNhbHQsIHNhbHRfbGVuLCBpdGVyYXRpb25zKSkgPT0gMCkKKwlyZXR1cm4gMDsKKyAgICAgIAorICAgICAgaWYgKCFjaGVja19uc2VjM19jb3ZlcmFnZShoZWFkZXIsIHBsZW4sIGRpZ2VzdF9sZW4sIGRpZ2VzdCwgdHlwZSwgd29ya3NwYWNlMSwgd29ya3NwYWNlMiwgbnNlY3MsIG5zZWNfY291bnQsIE5VTEwpKQorCXJldHVybiAwOworICAgIH0KKyAgCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50IHByb3ZlX25vbl9leGlzdGVuY2Uoc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90IHBsZW4sIGNoYXIgKmtleW5hbWUsIGNoYXIgKm5hbWUsIGludCBxdHlwZSwgaW50IHFjbGFzcywgY2hhciAqd2lsZG5hbWUsIGludCAqbm9ucykKK3sKKyAgc3RhdGljIHVuc2lnbmVkIGNoYXIgKipuc2Vjc2V0ID0gTlVMTDsKKyAgc3RhdGljIGludCBuc2Vjc2V0X3N6ID0gMDsKKyAgCisgIGludCB0eXBlX2ZvdW5kID0gMDsKKyAgdW5zaWduZWQgY2hhciAqcCA9IHNraXBfcXVlc3Rpb25zKGhlYWRlciwgcGxlbik7CisgIGludCB0eXBlLCBjbGFzcywgcmRsZW4sIGksIG5zZWNzX2ZvdW5kOworICAKKyAgLyogTW92ZSB0byBOUyBzZWN0aW9uICovCisgIGlmICghcCB8fCAhKHAgPSBza2lwX3NlY3Rpb24ocCwgbnRvaHMoaGVhZGVyLT5hbmNvdW50KSwgaGVhZGVyLCBwbGVuKSkpCisgICAgcmV0dXJuIDA7CisgIAorICBmb3IgKG5zZWNzX2ZvdW5kID0gMCwgaSA9IG50b2hzKGhlYWRlci0+bnNjb3VudCk7IGkgIT0gMDsgaS0tKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIgKnBzdGFydCA9IHA7CisgICAgICAKKyAgICAgIGlmICghKHAgPSBza2lwX25hbWUocCwgaGVhZGVyLCBwbGVuLCAxMCkpKQorCXJldHVybiAwOworICAgICAgCisgICAgICBHRVRTSE9SVCh0eXBlLCBwKTsgCisgICAgICBHRVRTSE9SVChjbGFzcywgcCk7CisgICAgICBwICs9IDQ7IC8qIFRUTCAqLworICAgICAgR0VUU0hPUlQocmRsZW4sIHApOworCisgICAgICBpZiAoY2xhc3MgPT0gcWNsYXNzICYmICh0eXBlID09IFRfTlNFQyB8fCB0eXBlID09IFRfTlNFQzMpKQorCXsKKwkgIC8qIE5vIG1peGVkIE5TRUNpbmcgJ3JvdW5kIGhlcmUsIHRoYW5reW91dmVyeW11Y2ggKi8KKwkgIGlmICh0eXBlX2ZvdW5kICE9IDAgJiYgdHlwZV9mb3VuZCAhPSB0eXBlKQorCSAgICByZXR1cm4gMDsKKworCSAgdHlwZV9mb3VuZCA9IHR5cGU7CisKKwkgIGlmICghZXhwYW5kX3dvcmtzcGFjZSgmbnNlY3NldCwgJm5zZWNzZXRfc3osIG5zZWNzX2ZvdW5kKSkKKwkgICAgcmV0dXJuIDA7IAorCSAgCisJICBuc2Vjc2V0W25zZWNzX2ZvdW5kKytdID0gcHN0YXJ0OworCX0KKyAgICAgIAorICAgICAgaWYgKCFBRERfUkRMRU4oaGVhZGVyLCBwLCBwbGVuLCByZGxlbikpCisJcmV0dXJuIDA7CisgICAgfQorICAKKyAgaWYgKHR5cGVfZm91bmQgPT0gVF9OU0VDKQorICAgIHJldHVybiBwcm92ZV9ub25fZXhpc3RlbmNlX25zZWMoaGVhZGVyLCBwbGVuLCBuc2Vjc2V0LCBuc2Vjc19mb3VuZCwgZGFlbW9uLT53b3Jrc3BhY2VuYW1lLCBrZXluYW1lLCBuYW1lLCBxdHlwZSwgbm9ucyk7CisgIGVsc2UgaWYgKHR5cGVfZm91bmQgPT0gVF9OU0VDMykKKyAgICByZXR1cm4gcHJvdmVfbm9uX2V4aXN0ZW5jZV9uc2VjMyhoZWFkZXIsIHBsZW4sIG5zZWNzZXQsIG5zZWNzX2ZvdW5kLCBkYWVtb24tPndvcmtzcGFjZW5hbWUsIGtleW5hbWUsIG5hbWUsIHF0eXBlLCB3aWxkbmFtZSwgbm9ucyk7CisgIGVsc2UKKyAgICByZXR1cm4gMDsKK30KKworLyogQ2hlY2sgc2lnbmluZyBzdGF0dXMgb2YgbmFtZS4KKyAgIHJldHVybnM6CisgICBTVEFUX1NFQ1VSRSAgIHpvbmUgaXMgc2lnbmVkLgorICAgU1RBVF9JTlNFQ1VSRSB6b25lIHByb3ZlZCB1bnNpZ25lZC4KKyAgIFNUQVRfTkVFRF9EUyAgcmVxdWlyZSBEUyByZWNvcmQgb2YgbmFtZSByZXR1cm5lZCBpbiBrZXluYW1lLgorICAgU1RBVF9ORUVEX0tFWSByZXF1aXJlIEROU0tFWSByZWNvcmQgb2YgbmFtZSByZXR1cm5lZCBpbiBrZXluYW1lLgorICAgbmFtZSByZXR1cm5lZCB1bmFsdGVyZWQuCisqLworc3RhdGljIGludCB6b25lX3N0YXR1cyhjaGFyICpuYW1lLCBpbnQgY2xhc3MsIGNoYXIgKmtleW5hbWUsIHRpbWVfdCBub3cpCit7CisgIGludCBuYW1lX3N0YXJ0ID0gc3RybGVuKG5hbWUpOyAvKiBmb3Igd2hlbiBUQSBpcyByb290ICovCisgIHN0cnVjdCBjcmVjICpjcmVjcDsKKyAgY2hhciAqcDsKKworICAvKiBGaXJzdCwgd29yayB0b3dhcmRzIHRoZSByb290LCBsb29raW5nIGZvciBhIHRydXN0IGFuY2hvci4KKyAgICAgVGhpcyBjYW4gZWl0aGVyIGJlIG9uZSBjb25maWd1cmVkLCBvciBvbmUgcHJldmlvdXNseSBjYWNoZWQuCisgICAgIFdlIGNhbiBhc3N1bWUsIGlmIHdlIGRvbid0IGZpbmQgb25lIGZpcnN0LCB0aGF0IHRoZXJlIGlzCisgICAgIGEgdHJ1c3QgYW5jaG9yIGF0IHRoZSByb290LiAqLworICBmb3IgKHAgPSBuYW1lOyBwOyBwID0gc3RyY2hyKHAsICcuJykpCisgICAgeworICAgICAgaWYgKCpwID09ICcuJykKKwlwKys7CisKKyAgICAgIGlmIChjYWNoZV9maW5kX2J5X25hbWUoTlVMTCwgcCwgbm93LCBGX0RTKSkKKwl7CisJICBuYW1lX3N0YXJ0ID0gcCAtIG5hbWU7CisJICBicmVhazsKKwl9CisgICAgfQorCisgIC8qIE5vdyB3b3JrIGF3YXkgZnJvbSB0aGUgdHJ1c3QgYW5jaG9yICovCisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIHN0cmNweShrZXluYW1lLCAmbmFtZVtuYW1lX3N0YXJ0XSk7CisgICAgICAKKyAgICAgIGlmICghKGNyZWNwID0gY2FjaGVfZmluZF9ieV9uYW1lKE5VTEwsIGtleW5hbWUsIG5vdywgRl9EUykpKQorCXJldHVybiBTVEFUX05FRURfRFM7CisgICAgICAKKyAgICAgICAvKiBGX0ROU1NFQ09LIG1pc3VzZWQgaW4gRFMgY2FjaGUgcmVjb3JkcyB0byBub24tZXhpc3RlbmNlIG9mIE5TIHJlY29yZC4KKwkgIEZfTkVHICYmICFGX0ROU1NFQ09LIGltcGxpZXMgdGhhdCB3ZSd2ZSBwcm92ZWQgdGhlcmUncyBubyBEUyByZWNvcmQgaGVyZSwKKwkgIGJ1dCB0aGF0J3MgYmVjYXVzZSB0aGVyZSdzIG5vIE5TIHJlY29yZCBlaXRoZXIsIGllIHRoaXMgaXNuJ3QgdGhlIHN0YXJ0CisJICBvZiBhIHpvbmUuIFdlIG9ubHkgcHJvdmUgdGhhdCB0aGUgRE5TIHRyZWUgYmVsb3cgYSBub2RlIGlzIHVuc2lnbmVkIHdoZW4KKwkgIHdlIHByb3ZlIHRoYXQgd2UncmUgYXQgYSB6b25lIGN1dCBBTkQgdGhlcmUncyBubyBEUyByZWNvcmQuICovCisgICAgICBpZiAoY3JlY3AtPmZsYWdzICYgRl9ORUcpCisJeworCSAgaWYgKGNyZWNwLT5mbGFncyAmIEZfRE5TU0VDT0spCisJICAgIHJldHVybiBTVEFUX0lOU0VDVVJFOyAvKiBwcm92ZWQgbm8gRFMgaGVyZSAqLworCX0KKyAgICAgIGVsc2UKKwl7CisJICAvKiBJZiBhbGwgdGhlIERTIHJlY29yZHMgaGF2ZSBkaWdlc3QgYW5kL29yIHNpZyBhbGdvcyB3ZSBkb24ndCBzdXBwb3J0LAorCSAgICAgdGhlbiB0aGUgem9uZSBpcyBpbnNlY3VyZS4gTm90ZSB0aGF0IGlmIGFuIGFsZ28KKwkgICAgIGFwcGVhcnMgaW4gdGhlIERTLCB0aGVuIFJSU0lHcyBmb3IgdGhhdCBhbGdvIE1VU1QKKwkgICAgIGV4aXN0IGZvciBlYWNoIFJSc2V0OiA0MDM1IHBhcmEgMi4yICBTbyBpZiB3ZSBmaW5kCisJICAgICBhIERTIGhlcmUgd2l0aCBkaWdlc3QgYW5kIHNpZyB3ZSBjYW4gZG8sIHdlJ3JlIGVudGl0bGVkCisJICAgICB0byBhc3N1bWUgd2UgY2FuIHZhbGlkYXRlIHRoZSB6b25lIGFuZCBpZiB3ZSBjYW4ndCBsYXRlciwKKwkgICAgIGJlY2F1c2UgYW4gUlJTSUcgaXMgbWlzc2luZyB3ZSByZXR1cm4gQk9HVVMuCisJICAqLworCSAgZG8gCisJICAgIHsKKwkgICAgICBpZiAoY3JlY3AtPnVpZCA9PSAodW5zaWduZWQgaW50KWNsYXNzICYmCisJCSAgaGFzaF9maW5kKGRzX2RpZ2VzdF9uYW1lKGNyZWNwLT5hZGRyLmRzLmRpZ2VzdCkpICYmCisJCSAgdmVyaWZ5X2Z1bmMoY3JlY3AtPmFkZHIuZHMuYWxnbykpCisJCWJyZWFrOworCSAgICB9CisJICB3aGlsZSAoKGNyZWNwID0gY2FjaGVfZmluZF9ieV9uYW1lKGNyZWNwLCBrZXluYW1lLCBub3csIEZfRFMpKSk7CisKKwkgIGlmICghY3JlY3ApCisJICAgIHJldHVybiBTVEFUX0lOU0VDVVJFOworCX0KKworICAgICAgaWYgKG5hbWVfc3RhcnQgPT0gMCkKKwlicmVhazsKKworICAgICAgZm9yIChwID0gJm5hbWVbbmFtZV9zdGFydC0yXTsgKCpwICE9ICcuJykgJiYgKHAgIT0gbmFtZSk7IHAtLSk7CisgICAgICAKKyAgICAgIGlmIChwICE9IG5hbWUpCisgICAgICAgIHArKzsKKyAgICAgIAorICAgICAgbmFtZV9zdGFydCA9IHAgLSBuYW1lOworICAgIH0gCisKKyAgcmV0dXJuIFNUQVRfU0VDVVJFOworfQorICAgICAgIAorLyogVmFsaWRhdGUgYWxsIHRoZSBSUnNldHMgaW4gdGhlIGFuc3dlciBhbmQgYXV0aG9yaXR5IHNlY3Rpb25zIG9mIHRoZSByZXBseSAoNDAzNTozLjIuMykgCisgICBSZXR1cm4gY29kZToKKyAgIFNUQVRfU0VDVVJFICAgaWYgaXQgdmFsaWRhdGVzLgorICAgU1RBVF9JTlNFQ1VSRSBhdCBsZWFzdCBvbmUgUlJzZXQgbm90IHZhbGlkYXRlZCwgYmVjYXVzZSBpbiB1bnNpZ25lZCB6b25lLgorICAgU1RBVF9CT0dVUyAgICBzaWduYXR1cmUgaXMgd3JvbmcsIGJhZCBwYWNrZXQsIG5vIHZhbGlkYXRpb24gd2hlcmUgdGhlcmUgc2hvdWxkIGJlLgorICAgU1RBVF9ORUVEX0tFWSBuZWVkIEROU0tFWSB0byBjb21wbGV0ZSB2YWxpZGF0aW9uIChuYW1lIGlzIHJldHVybmVkIGluIGtleW5hbWUsIGNsYXNzIGluICpjbGFzcykKKyAgIFNUQVRfTkVFRF9EUyAgbmVlZCBEUyB0byBjb21wbGV0ZSB2YWxpZGF0aW9uIChuYW1lIGlzIHJldHVybmVkIGluIGtleW5hbWUpIAorKi8KK2ludCBkbnNzZWNfdmFsaWRhdGVfcmVwbHkodGltZV90IG5vdywgc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90IHBsZW4sIGNoYXIgKm5hbWUsIGNoYXIgKmtleW5hbWUsIAorCQkJICBpbnQgKmNsYXNzLCBpbnQgY2hlY2tfdW5zaWduZWQsIGludCAqbmVnYW5zd2VyLCBpbnQgKm5vbnMpCit7CisgIHN0YXRpYyB1bnNpZ25lZCBjaGFyICoqdGFyZ2V0cyA9IE5VTEw7CisgIHN0YXRpYyBpbnQgdGFyZ2V0X3N6ID0gMDsKKworICB1bnNpZ25lZCBjaGFyICphbnNfc3RhcnQsICpwMSwgKnAyOworICBpbnQgdHlwZTEsIGNsYXNzMSwgcmRsZW4xLCB0eXBlMiwgY2xhc3MyLCByZGxlbjIsIHFjbGFzcywgcXR5cGUsIHRhcmdldGlkeDsKKyAgaW50IGksIGosIHJjOworCisgIGlmIChuZWdhbnN3ZXIpCisgICAgKm5lZ2Fuc3dlciA9IDA7CisgIAorICBpZiAoUkNPREUoaGVhZGVyKSA9PSBTRVJWRkFJTCB8fCBudG9ocyhoZWFkZXItPnFkY291bnQpICE9IDEpCisgICAgcmV0dXJuIFNUQVRfQk9HVVM7CisgIAorICBpZiAoUkNPREUoaGVhZGVyKSAhPSBOWERPTUFJTiAmJiBSQ09ERShoZWFkZXIpICE9IE5PRVJST1IpCisgICAgcmV0dXJuIFNUQVRfSU5TRUNVUkU7CisKKyAgcDEgPSAodW5zaWduZWQgY2hhciAqKShoZWFkZXIrMSk7CisgIAorICAgLyogRmluZCBhbGwgdGhlIHRhcmdldHMgd2UncmUgbG9va2luZyBmb3IgYW5zd2VycyB0by4KKyAgICAgVGhlIHplcm90aCBhcnJheSBlbGVtZW50IGlzIGZvciB0aGUgcXVlcnksIHN1YnNlcXVlbnQgb25lcworICAgICBmb3IgQ05BTUUgdGFyZ2V0cywgdW5sZXNzIHRoZSBxdWVyeSBpcyBmb3IgYSBDTkFNRS4gKi8KKworICBpZiAoIWV4cGFuZF93b3Jrc3BhY2UoJnRhcmdldHMsICZ0YXJnZXRfc3osIDApKQorICAgIHJldHVybiBTVEFUX0JPR1VTOworICAKKyAgdGFyZ2V0c1swXSA9IHAxOworICB0YXJnZXRpZHggPSAxOworICAgCisgIGlmICghZXh0cmFjdF9uYW1lKGhlYWRlciwgcGxlbiwgJnAxLCBuYW1lLCAxLCA0KSkKKyAgICByZXR1cm4gU1RBVF9CT0dVUzsKKyAgCisgIEdFVFNIT1JUKHF0eXBlLCBwMSk7CisgIEdFVFNIT1JUKHFjbGFzcywgcDEpOworICBhbnNfc3RhcnQgPSBwMTsKKyAKKyAgLyogQ2FuJ3QgdmFsaWRhdGUgYW4gUlJTSUcgcXVlcnkgKi8KKyAgaWYgKHF0eXBlID09IFRfUlJTSUcpCisgICAgcmV0dXJuIFNUQVRfSU5TRUNVUkU7CisgIAorICBpZiAocXR5cGUgIT0gVF9DTkFNRSkKKyAgICBmb3IgKGogPSBudG9ocyhoZWFkZXItPmFuY291bnQpOyBqICE9IDA7IGotLSkgCisgICAgICB7CisJaWYgKCEocDEgPSBza2lwX25hbWUocDEsIGhlYWRlciwgcGxlbiwgMTApKSkKKwkgIHJldHVybiBTVEFUX0JPR1VTOyAvKiBiYWQgcGFja2V0ICovCisJCisJR0VUU0hPUlQodHlwZTIsIHAxKTsgCisJcDEgKz0gNjsgLyogY2xhc3MsIFRUTCAqLworCUdFVFNIT1JUKHJkbGVuMiwgcDEpOyAgCisJCisJaWYgKHR5cGUyID09IFRfQ05BTUUpCisJICB7CisJICAgIGlmICghZXhwYW5kX3dvcmtzcGFjZSgmdGFyZ2V0cywgJnRhcmdldF9zeiwgdGFyZ2V0aWR4KSkKKwkgICAgICByZXR1cm4gU1RBVF9CT0dVUzsKKwkgICAgCisJICAgIHRhcmdldHNbdGFyZ2V0aWR4KytdID0gcDE7IC8qIHBvaW50ZXIgdG8gdGFyZ2V0IG5hbWUgKi8KKwkgIH0KKwkKKwlpZiAoIUFERF9SRExFTihoZWFkZXIsIHAxLCBwbGVuLCByZGxlbjIpKQorCSAgcmV0dXJuIFNUQVRfQk9HVVM7CisgICAgICB9CisgIAorICBmb3IgKHAxID0gYW5zX3N0YXJ0LCBpID0gMDsgaSA8IG50b2hzKGhlYWRlci0+YW5jb3VudCkgKyBudG9ocyhoZWFkZXItPm5zY291bnQpOyBpKyspCisgICAgeworICAgICAgaWYgKCFleHRyYWN0X25hbWUoaGVhZGVyLCBwbGVuLCAmcDEsIG5hbWUsIDEsIDEwKSkKKwlyZXR1cm4gU1RBVF9CT0dVUzsgLyogYmFkIHBhY2tldCAqLworICAgICAgCisgICAgICBHRVRTSE9SVCh0eXBlMSwgcDEpOworICAgICAgR0VUU0hPUlQoY2xhc3MxLCBwMSk7CisgICAgICBwMSArPSA0OyAvKiBUVEwgKi8KKyAgICAgIEdFVFNIT1JUKHJkbGVuMSwgcDEpOworICAgICAgCisgICAgICAvKiBEb24ndCB0cnkgYW5kIHZhbGlkYXRlIFJSU0lHcyEgKi8KKyAgICAgIGlmICh0eXBlMSAhPSBUX1JSU0lHKQorCXsKKwkgIC8qIENoZWNrIGlmIHdlJ3ZlIGRvbmUgdGhpcyBSUnNldCBhbHJlYWR5ICovCisJICBmb3IgKHAyID0gYW5zX3N0YXJ0LCBqID0gMDsgaiA8IGk7IGorKykKKwkgICAgeworCSAgICAgIGlmICghKHJjID0gZXh0cmFjdF9uYW1lKGhlYWRlciwgcGxlbiwgJnAyLCBuYW1lLCAwLCAxMCkpKQorCQlyZXR1cm4gU1RBVF9CT0dVUzsgLyogYmFkIHBhY2tldCAqLworCSAgICAgIAorCSAgICAgIEdFVFNIT1JUKHR5cGUyLCBwMik7CisJICAgICAgR0VUU0hPUlQoY2xhc3MyLCBwMik7CisJICAgICAgcDIgKz0gNDsgLyogVFRMICovCisJICAgICAgR0VUU0hPUlQocmRsZW4yLCBwMik7CisJICAgICAgCisJICAgICAgaWYgKHR5cGUyID09IHR5cGUxICYmIGNsYXNzMiA9PSBjbGFzczEgJiYgcmMgPT0gMSkKKwkJYnJlYWs7IC8qIERvbmUgaXQgYmVmb3JlOiBuYW1lLCB0eXBlLCBjbGFzcyBhbGwgbWF0Y2guICovCisJICAgICAgCisJICAgICAgaWYgKCFBRERfUkRMRU4oaGVhZGVyLCBwMiwgcGxlbiwgcmRsZW4yKSkKKwkJcmV0dXJuIFNUQVRfQk9HVVM7CisJICAgIH0KKwkgIAorCSAgLyogTm90IGRvbmUsIHZhbGlkYXRlIG5vdyAqLworCSAgaWYgKGogPT0gaSkKKwkgICAgeworCSAgICAgIGludCBzaWdjbnQsIHJyY250OworCSAgICAgIGNoYXIgKndpbGRuYW1lOworCSAgICAgIAorCSAgICAgIGlmICghZXhwbG9yZV9ycnNldChoZWFkZXIsIHBsZW4sIGNsYXNzMSwgdHlwZTEsIG5hbWUsIGtleW5hbWUsICZzaWdjbnQsICZycmNudCkpCisJCXJldHVybiBTVEFUX0JPR1VTOworCisJICAgICAgLyogTm8gc2lnbmF0dXJlcyBmb3IgUlJzZXQuIFdlIGNhbiBiZSBjb25maWd1cmVkIHRvIGFzc3VtZSB0aGlzIGlzIE9LIGFuZCByZXR1cm4gYSBJTlNFQ1VSRSByZXN1bHQuICovCisJICAgICAgaWYgKHNpZ2NudCA9PSAwKQorCQl7CisJCSAgaWYgKGNoZWNrX3Vuc2lnbmVkKQorCQkgICAgeworCQkgICAgICByYyA9IHpvbmVfc3RhdHVzKG5hbWUsIGNsYXNzMSwga2V5bmFtZSwgbm93KTsKKwkJICAgICAgaWYgKHJjID09IFNUQVRfU0VDVVJFKQorCQkJcmMgPSBTVEFUX0JPR1VTOworCQkgICAgICAgaWYgKGNsYXNzKQorCQkJICpjbGFzcyA9IGNsYXNzMTsgLyogQ2xhc3MgZm9yIE5FRURfRFMgb3IgTkVFRF9LRVkgKi8KKwkJICAgIH0KKwkJICBlbHNlIAorCQkgICAgcmMgPSBTVEFUX0lOU0VDVVJFOyAKKwkJICAKKwkJICByZXR1cm4gcmM7CisJCX0KKwkgICAgICAKKwkgICAgICAvKiBleHBsb3JlX3Jyc2V0KCkgZ2l2ZXMgdXMga2V5IG5hbWUgZnJvbSBzaWdzIGluIGtleW5hbWUuCisJCSBDYW4ndCBvdmVyd3JpdGUgbmFtZSBoZXJlLiAqLworCSAgICAgIHN0cmNweShkYWVtb24tPndvcmtzcGFjZW5hbWUsIGtleW5hbWUpOworCSAgICAgIHJjID0gem9uZV9zdGF0dXMoZGFlbW9uLT53b3Jrc3BhY2VuYW1lLCBjbGFzczEsIGtleW5hbWUsIG5vdyk7CisKKwkgICAgICBpZiAocmMgIT0gU1RBVF9TRUNVUkUpCisJCXsKKwkJICAvKiBab25lIGlzIGluc2VjdXJlLCBkb24ndCBuZWVkIHRvIHZhbGlkYXRlIFJSc2V0ICovCisJCSAgaWYgKGNsYXNzKQorCQkgICAgKmNsYXNzID0gY2xhc3MxOyAvKiBDbGFzcyBmb3IgTkVFRF9EUyBvciBORUVEX0tFWSAqLworCQkgIHJldHVybiByYzsKKwkJfSAKKwkgICAgICAKKwkgICAgICByYyA9IHZhbGlkYXRlX3Jyc2V0KG5vdywgaGVhZGVyLCBwbGVuLCBjbGFzczEsIHR5cGUxLCBzaWdjbnQsIHJyY250LCBuYW1lLCBrZXluYW1lLCAmd2lsZG5hbWUsIE5VTEwsIDAsIDAsIDApOworCSAgICAgIAorCSAgICAgIGlmIChyYyA9PSBTVEFUX0JPR1VTIHx8IHJjID09IFNUQVRfTkVFRF9LRVkgfHwgcmMgPT0gU1RBVF9ORUVEX0RTKQorCQl7CisJCSAgaWYgKGNsYXNzKQorCQkgICAgKmNsYXNzID0gY2xhc3MxOyAvKiBDbGFzcyBmb3IgRFMgb3IgRE5TS0VZICovCisJCSAgcmV0dXJuIHJjOworCQl9IAorCSAgICAgIGVsc2UgCisJCXsKKwkJICAvKiByYyBpcyBub3cgU1RBVF9TRUNVUkUgb3IgU1RBVF9TRUNVUkVfV0lMRENBUkQgKi8KKwkJIAorCQkgIC8qIE5vdGUgaWYgd2UndmUgdmFsaWRhdGVkIGVpdGhlciB0aGUgYW5zd2VyIHRvIHRoZSBxdWVzdGlvbgorCQkgICAgIG9yIHRoZSB0YXJnZXQgb2YgYSBDTkFNRS4gQW55IG5vdCBub3RlZCB3aWxsIG5lZWQgTlNFQyBvcgorCQkgICAgIHRvIGJlIGluIHVuc2lnbmVkIHNwYWNlLiAqLworCisJCSAgZm9yIChqID0gMDsgaiA8dGFyZ2V0aWR4OyBqKyspCisJCSAgICBpZiAoKHAyID0gdGFyZ2V0c1tqXSkpCisJCSAgICAgIHsKKwkJCWlmICghKHJjID0gZXh0cmFjdF9uYW1lKGhlYWRlciwgcGxlbiwgJnAyLCBuYW1lLCAwLCAxMCkpKQorCQkJICByZXR1cm4gU1RBVF9CT0dVUzsgLyogYmFkIHBhY2tldCAqLworCQkJCisJCQlpZiAoY2xhc3MxID09IHFjbGFzcyAmJiByYyA9PSAxICYmICh0eXBlMSA9PSBUX0NOQU1FIHx8IHR5cGUxID09IHF0eXBlIHx8IHF0eXBlID09IFRfQU5ZICkpCisJCQkgIHRhcmdldHNbal0gPSBOVUxMOworCQkgICAgICB9CisJCQkgICAgCisJCSAgIC8qIEFuIGF0dGFja2VyIHJlcGxheSBhIHdpbGRjYXJkIGFuc3dlciB3aXRoIGEgZGlmZmVyZW50CisJCSAgICAgIGFuc3dlciBhbmQgb3ZlcmxheSBhIGdlbnVpbmUgUlIuIFRvIHByb3ZlIHRoaXMKKwkJICAgICAgaGFzbid0IGhhcHBlbmVkLCB0aGUgYW5zd2VyIG11c3QgcHJvdmUgdGhhdAorCQkgICAgICB0aGUgZ2VudWluZSByZWNvcmQgZG9lc24ndCBleGlzdC4gQ2hlY2sgdGhhdCBoZXJlLiAKKwkJICAgICAgTm90ZSB0aGF0IHdlIG1heSBub3QgeWV0IGhhdmUgdmFsaWRhdGVkIHRoZSBOU0VDL05TRUMzIFJSc2V0cy4gCisJCSAgICAgIFRoYXQncyBub3QgYSBwcm9ibGVtIHNpbmNlIGlmIHRoZSBSUnNldHMgbGF0ZXIgZmFpbAorCQkgICAgICB3ZSdsbCByZXR1cm4gQk9HVVMgdGhlbi4gKi8KKwkJICBpZiAocmMgPT0gU1RBVF9TRUNVUkVfV0lMRENBUkQgJiYgIXByb3ZlX25vbl9leGlzdGVuY2UoaGVhZGVyLCBwbGVuLCBrZXluYW1lLCBuYW1lLCB0eXBlMSwgY2xhc3MxLCB3aWxkbmFtZSwgTlVMTCkpCisJCSAgICByZXR1cm4gU1RBVF9CT0dVUzsKKwkJfQorCSAgICB9CisJfQorCisgICAgICBpZiAoIUFERF9SRExFTihoZWFkZXIsIHAxLCBwbGVuLCByZGxlbjEpKQorCXJldHVybiBTVEFUX0JPR1VTOworICAgIH0KKworICAvKiBPSywgYWxsIHRoZSBSUnNldHMgdmFsaWRhdGUsIG5vdyBzZWUgaWYgd2UgaGF2ZSBhIG1pc3NpbmcgYW5zd2VyIG9yIENOQU1FIHRhcmdldC4gKi8KKyAgZm9yIChqID0gMDsgaiA8dGFyZ2V0aWR4OyBqKyspCisgICAgaWYgKChwMiA9IHRhcmdldHNbal0pKQorICAgICAgeworCWlmIChuZWdhbnN3ZXIpCisJICAqbmVnYW5zd2VyID0gMTsKKworCWlmICghZXh0cmFjdF9uYW1lKGhlYWRlciwgcGxlbiwgJnAyLCBuYW1lLCAxLCAxMCkpCisJICByZXR1cm4gU1RBVF9CT0dVUzsgLyogYmFkIHBhY2tldCAqLworCSAgICAKKwkvKiBOWERPTUFJTiBvciBOT0RBVEEgcmVwbHksIHVuYW5zd2VyZWQgcXVlc3Rpb24gaXMgKG5hbWUsIHFjbGFzcywgcXR5cGUpICovCisKKwkvKiBGb3IgYW55dGhpbmcgb3RoZXIgdGhhbiBhIERTIHJlY29yZCwgdGhpcyBzaXR1YXRpb24gaXMgT0sgaWYgZWl0aGVyCisJICAgdGhlIGFuc3dlciBpcyBpbiBhbiB1bnNpZ25lZCB6b25lLCBvciB0aGVyZSdzIGEgTlNFQyByZWNvcmRzLiAqLworCWlmICghcHJvdmVfbm9uX2V4aXN0ZW5jZShoZWFkZXIsIHBsZW4sIGtleW5hbWUsIG5hbWUsIHF0eXBlLCBxY2xhc3MsIE5VTEwsIG5vbnMpKQorCSAgeworCSAgICAvKiBFbXB0eSBEUyB3aXRob3V0IE5TRUNTICovCisJICAgIGlmIChxdHlwZSA9PSBUX0RTKQorCSAgICAgIHJldHVybiBTVEFUX0JPR1VTOworCSAgICAKKwkgICAgaWYgKChyYyA9IHpvbmVfc3RhdHVzKG5hbWUsIHFjbGFzcywga2V5bmFtZSwgbm93KSkgIT0gU1RBVF9TRUNVUkUpCisJICAgICAgeworCQlpZiAoY2xhc3MpCisJCSAgKmNsYXNzID0gcWNsYXNzOyAvKiBDbGFzcyBmb3IgTkVFRF9EUyBvciBORUVEX0tFWSAqLworCQlyZXR1cm4gcmM7CisJICAgICAgfSAKKwkgICAgCisJICAgIHJldHVybiBTVEFUX0JPR1VTOyAvKiBzaWduZWQgem9uZSwgbm8gTlNFQ3MgKi8KKwkgIH0KKyAgICAgIH0KKyAgCisgIHJldHVybiBTVEFUX1NFQ1VSRTsKK30KKworCisvKiBDb21wdXRlIGtleXRhZyAoY2hlY2tzdW0gdG8gcXVpY2tseSBpbmRleCBhIGtleSkuIFNlZSBSRkM0MDM0ICovCitpbnQgZG5za2V5X2tleXRhZyhpbnQgYWxnLCBpbnQgZmxhZ3MsIHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbikKK3sKKyAgaWYgKGFsZyA9PSAxKQorICAgIHsKKyAgICAgIC8qIEFsZ29yaXRobSAxIChSU0FNRDUpIGhhcyBhIGRpZmZlcmVudCAob2xkZXIpIGtleXRhZyBjYWxjdWxhdGlvbiBhbGdvcml0aG0uCisgICAgICAgICBTZWUgUkZDNDAzNCwgQXBwZW5kaXggQi4xICovCisgICAgICByZXR1cm4ga2V5W2tleWxlbi00XSAqIDI1NiArIGtleVtrZXlsZW4tM107CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgdW5zaWduZWQgbG9uZyBhYyA9IGZsYWdzICsgMHgzMDAgKyBhbGc7CisgICAgICBpbnQgaTsKKworICAgICAgZm9yIChpID0gMDsgaSA8IGtleWxlbjsgKytpKQorICAgICAgICBhYyArPSAoaSAmIDEpID8ga2V5W2ldIDoga2V5W2ldIDw8IDg7CisKKyAgICAgIGFjICs9IChhYyA+PiAxNikgJiAweGZmZmY7CisgICAgICByZXR1cm4gYWMgJiAweGZmZmY7CisgICAgfQorfQorCitzaXplX3QgZG5zc2VjX2dlbmVyYXRlX3F1ZXJ5KHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIsIHVuc2lnbmVkIGNoYXIgKmVuZCwgY2hhciAqbmFtZSwgaW50IGNsYXNzLCAKKwkJCSAgICAgaW50IHR5cGUsIHVuaW9uIG15c29ja2FkZHIgKmFkZHIsIGludCBlZG5zX3BrdHN6KQoreworICB1bnNpZ25lZCBjaGFyICpwOworICBjaGFyICp0eXBlcyA9IHF1ZXJ5c3RyKCJkbnNzZWMtcXVlcnkiLCB0eXBlKTsKKyAgc2l6ZV90IHJldDsKKworICBpZiAoYWRkci0+c2Euc2FfZmFtaWx5ID09IEFGX0lORVQpIAorICAgIGxvZ19xdWVyeShGX05PRVhUUkEgfCBGX0ROU1NFQyB8IEZfSVBWNCwgbmFtZSwgKHN0cnVjdCBhbGxfYWRkciAqKSZhZGRyLT5pbi5zaW5fYWRkciwgdHlwZXMpOworI2lmZGVmIEhBVkVfSVBWNgorICBlbHNlCisgICAgbG9nX3F1ZXJ5KEZfTk9FWFRSQSB8IEZfRE5TU0VDIHwgRl9JUFY2LCBuYW1lLCAoc3RydWN0IGFsbF9hZGRyICopJmFkZHItPmluNi5zaW42X2FkZHIsIHR5cGVzKTsKKyNlbmRpZgorICAKKyAgaGVhZGVyLT5xZGNvdW50ID0gaHRvbnMoMSk7CisgIGhlYWRlci0+YW5jb3VudCA9IGh0b25zKDApOworICBoZWFkZXItPm5zY291bnQgPSBodG9ucygwKTsKKyAgaGVhZGVyLT5hcmNvdW50ID0gaHRvbnMoMCk7CisKKyAgaGVhZGVyLT5oYjMgPSBIQjNfUkQ7IAorICBTRVRfT1BDT0RFKGhlYWRlciwgUVVFUlkpOworICAvKiBGb3IgZGVidWdnaW5nLCBzZXQgQ2hlY2tpbmcgRGlzYWJsZWQsIG90aGVyd2lzZSwgaGF2ZSB0aGUgdXBzdHJlYW0gY2hlY2sgdG9vLAorICAgICB0aGlzIGFsbG93cyBpdCB0byBzZWxlY3QgYXV0aCBzZXJ2ZXJzIHdoZW4gb25lIGlzIHJldHVybmluZyBiYWQgZGF0YS4gKi8KKyAgaGVhZGVyLT5oYjQgPSBvcHRpb25fYm9vbChPUFRfRE5TU0VDX0RFQlVHKSA/IEhCNF9DRCA6IDA7CisKKyAgLyogSUQgZmlsbGVkIGluIGxhdGVyICovCisKKyAgcCA9ICh1bnNpZ25lZCBjaGFyICopKGhlYWRlcisxKTsKKwkKKyAgcCA9IGRvX3JmYzEwMzVfbmFtZShwLCBuYW1lLCBOVUxMKTsKKyAgKnArKyA9IDA7CisgIFBVVFNIT1JUKHR5cGUsIHApOworICBQVVRTSE9SVChjbGFzcywgcCk7CisKKyAgcmV0ID0gYWRkX2RvX2JpdChoZWFkZXIsIHAgLSAodW5zaWduZWQgY2hhciAqKWhlYWRlciwgZW5kKTsKKworICBpZiAoZmluZF9wc2V1ZG9oZWFkZXIoaGVhZGVyLCByZXQsIE5VTEwsICZwLCBOVUxMLCBOVUxMKSkKKyAgICBQVVRTSE9SVChlZG5zX3BrdHN6LCBwKTsKKworICByZXR1cm4gcmV0OworfQorCit1bnNpZ25lZCBjaGFyKiBoYXNoX3F1ZXN0aW9ucyhzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBzaXplX3QgcGxlbiwgY2hhciAqbmFtZSkKK3sKKyAgaW50IHE7CisgIHVuc2lnbmVkIGludCBsZW47CisgIHVuc2lnbmVkIGNoYXIgKnAgPSAodW5zaWduZWQgY2hhciAqKShoZWFkZXIrMSk7CisgIGNvbnN0IHN0cnVjdCBuZXR0bGVfaGFzaCAqaGFzaDsKKyAgdm9pZCAqY3R4OworICB1bnNpZ25lZCBjaGFyICpkaWdlc3Q7CisgIAorICBpZiAoIShoYXNoID0gaGFzaF9maW5kKCJzaGExIikpIHx8ICFoYXNoX2luaXQoaGFzaCwgJmN0eCwgJmRpZ2VzdCkpCisgICAgcmV0dXJuIE5VTEw7CisgIAorICBmb3IgKHEgPSBudG9ocyhoZWFkZXItPnFkY291bnQpOyBxICE9IDA7IHEtLSkgCisgICAgeworICAgICAgaWYgKCFleHRyYWN0X25hbWUoaGVhZGVyLCBwbGVuLCAmcCwgbmFtZSwgMSwgNCkpCisJYnJlYWs7IC8qIGJhZCBwYWNrZXQgKi8KKyAgICAgIAorICAgICAgbGVuID0gdG9fd2lyZShuYW1lKTsKKyAgICAgIGhhc2gtPnVwZGF0ZShjdHgsIGxlbiwgKHVuc2lnbmVkIGNoYXIgKiluYW1lKTsKKyAgICAgIC8qIENSQyB0aGUgY2xhc3MgYW5kIHR5cGUgYXMgd2VsbCAqLworICAgICAgaGFzaC0+dXBkYXRlKGN0eCwgNCwgcCk7CisKKyAgICAgIHAgKz0gNDsKKyAgICAgIGlmICghQ0hFQ0tfTEVOKGhlYWRlciwgcCwgcGxlbiwgMCkpCisJYnJlYWs7IC8qIGJhZCBwYWNrZXQgKi8KKyAgICB9CisgIAorICBoYXNoLT5kaWdlc3QoY3R4LCBoYXNoLT5kaWdlc3Rfc2l6ZSwgZGlnZXN0KTsKKyAgcmV0dXJuIGRpZ2VzdDsKK30KKworI2VuZGlmIC8qIEhBVkVfRE5TU0VDICovCmRpZmYgLS1naXQgYS9zcmMvZG9tYWluLmMgYi9zcmMvZG9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM0NzYxMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9kb21haW4uYwpAQCAtMCwwICsxLDI0NiBAQAorLyogZG5zbWFzcSBpcyBDb3B5cmlnaHQgKGMpIDIwMDAtMjAxNyBTaW1vbiBLZWxsZXkKKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgZGF0ZWQgSnVuZSwgMTk5MSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgdmVyc2lvbiAzIGRhdGVkIDI5IEp1bmUsIDIwMDcuCisgCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisKKyNpbmNsdWRlICJkbnNtYXNxLmgiCisKKworc3RhdGljIHN0cnVjdCBjb25kX2RvbWFpbiAqc2VhcmNoX2RvbWFpbihzdHJ1Y3QgaW5fYWRkciBhZGRyLCBzdHJ1Y3QgY29uZF9kb21haW4gKmMpOworI2lmZGVmIEhBVkVfSVBWNgorc3RhdGljIHN0cnVjdCBjb25kX2RvbWFpbiAqc2VhcmNoX2RvbWFpbjYoc3RydWN0IGluNl9hZGRyICphZGRyLCBzdHJ1Y3QgY29uZF9kb21haW4gKmMpOworI2VuZGlmCisKKworaW50IGlzX25hbWVfc3ludGhldGljKGludCBmbGFncywgY2hhciAqbmFtZSwgc3RydWN0IGFsbF9hZGRyICphZGRyKQoreworICBjaGFyICpwOworICBzdHJ1Y3QgY29uZF9kb21haW4gKmMgPSBOVUxMOworICBpbnQgcHJvdCA9IEFGX0lORVQ7CisKKyNpZmRlZiBIQVZFX0lQVjYKKyAgaWYgKGZsYWdzICYgRl9JUFY2KQorICAgIHByb3QgPSBBRl9JTkVUNjsKKyNlbmRpZgorCisgIGZvciAoYyA9IGRhZW1vbi0+c3ludGhfZG9tYWluczsgYzsgYyA9IGMtPm5leHQpCisgICAgeworICAgICAgaW50IGZvdW5kID0gMDsKKyAgICAgIGNoYXIgKnRhaWwsICpwcmVmOworICAgICAgCisgICAgICBmb3IgKHRhaWwgPSBuYW1lLCBwcmVmID0gYy0+cHJlZml4OyAqdGFpbCAhPSAwICYmIHByZWYgJiYgKnByZWYgIT0gMDsgdGFpbCsrLCBwcmVmKyspCisJeworCSAgdW5zaWduZWQgaW50IGMxID0gKHVuc2lnbmVkIGNoYXIpICpwcmVmOworCSAgdW5zaWduZWQgaW50IGMyID0gKHVuc2lnbmVkIGNoYXIpICp0YWlsOworCSAgCisJICBpZiAoYzEgPj0gJ0EnICYmIGMxIDw9ICdaJykKKwkgICAgYzEgKz0gJ2EnIC0gJ0EnOworCSAgaWYgKGMyID49ICdBJyAmJiBjMiA8PSAnWicpCisJICAgIGMyICs9ICdhJyAtICdBJzsKKwkgIAorCSAgaWYgKGMxICE9IGMyKQorCSAgICBicmVhazsKKwl9CisgICAgICAKKyAgICAgIGlmIChwcmVmICYmICpwcmVmICE9IDApCisJY29udGludWU7IC8qIHByZWZpeCBtYXRjaCBmYWlsICovCisgICAgICAKKyAgICAgIC8qIE5CLCBtdXN0IG5vdCBhbHRlciBuYW1lIGlmIHdlIHJldHVybiB6ZXJvICovCisgICAgICBmb3IgKHAgPSB0YWlsOyAqcDsgcCsrKQorCXsKKwkgIGNoYXIgYyA9ICpwOworCSAgCisJICBpZiAoKGMgPj0nMCcgJiYgYyA8PSAnOScpIHx8IGMgPT0gJy0nKQorCSAgICBjb250aW51ZTsKKwkgIAorI2lmZGVmIEhBVkVfSVBWNgorCSAgaWYgKHByb3QgPT0gQUZfSU5FVDYgJiYgKChjID49J0EnICYmIGMgPD0gJ0YnKSB8fCAoYyA+PSdhJyAmJiBjIDw9ICdmJykpKSAKKwkgICAgY29udGludWU7CisjZW5kaWYKKwkgIAorCSAgYnJlYWs7CisJfQorICAgICAgCisgICAgICBpZiAoKnAgIT0gJy4nKQorCWNvbnRpbnVlOworICAgICAgCisgICAgICAqcCA9IDA7CQorICAgICAgCisgI2lmZGVmIEhBVkVfSVBWNgorICAgICAgaWYgKHByb3QgPT0gQUZfSU5FVDYgJiYgc3Ryc3RyKHRhaWwsICItLWZmZmYtIikgPT0gdGFpbCkKKwl7CisJICAvKiBzcGVjaWFsIGhhY2sgZm9yIHY0LW1hcHBlZC4gKi8KKwkgIG1lbWNweSh0YWlsLCAiOjpmZmZmOiIsIDcpOworCSAgZm9yIChwID0gdGFpbCArIDc7ICpwOyBwKyspCisJICAgIGlmICgqcCA9PSAnLScpCisJICAgICAgKnAgPSAnLic7CisJfQorICAgICAgZWxzZQorI2VuZGlmCisJeworCSAgLyogc3dhcCAuIG9yIDogZm9yIC0gKi8KKwkgIGZvciAocCA9IHRhaWw7ICpwOyBwKyspCisJICAgIGlmICgqcCA9PSAnLScpCisJICAgICAgeworCQlpZiAocHJvdCA9PSBBRl9JTkVUKQorCQkgICpwID0gJy4nOworI2lmZGVmIEhBVkVfSVBWNgorCQllbHNlCisJCSAgKnAgPSAnOic7CisjZW5kaWYKKwkgICAgICB9CisJfQorCisgICAgICBpZiAoaG9zdG5hbWVfaXNlcXVhbChjLT5kb21haW4sIHArMSkgJiYgaW5ldF9wdG9uKHByb3QsIHRhaWwsIGFkZHIpKQorCXsKKwkgIGlmIChwcm90ID09IEFGX0lORVQpCisJICAgIHsKKwkgICAgICBpZiAoIWMtPmlzNiAmJgorCQkgIG50b2hsKGFkZHItPmFkZHIuYWRkcjQuc19hZGRyKSA+PSBudG9obChjLT5zdGFydC5zX2FkZHIpICYmCisJCSAgbnRvaGwoYWRkci0+YWRkci5hZGRyNC5zX2FkZHIpIDw9IG50b2hsKGMtPmVuZC5zX2FkZHIpKQorCQlmb3VuZCA9IDE7CisJICAgIH0KKyNpZmRlZiBIQVZFX0lQVjYKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIHU2NCBhZGRycGFydCA9IGFkZHI2cGFydCgmYWRkci0+YWRkci5hZGRyNik7CisJICAgICAgCisJICAgICAgaWYgKGMtPmlzNiAmJgorCQkgIGlzX3NhbWVfbmV0NigmYWRkci0+YWRkci5hZGRyNiwgJmMtPnN0YXJ0NiwgNjQpICYmCisJCSAgYWRkcnBhcnQgPj0gYWRkcjZwYXJ0KCZjLT5zdGFydDYpICYmCisJCSAgYWRkcnBhcnQgPD0gYWRkcjZwYXJ0KCZjLT5lbmQ2KSkKKwkJZm91bmQgPSAxOworCSAgICB9CisjZW5kaWYKKwl9CisgICAgICAKKyAgICAgIC8qIHJlc3RvcmUgbmFtZSAqLworICAgICAgZm9yIChwID0gdGFpbDsgKnA7IHArKykKKwlpZiAoKnAgPT0gJy4nIHx8ICpwID09ICc6JykKKwkgICpwID0gJy0nOworICAgICAgCisgICAgICAqcCA9ICcuJzsKKworICAgICAgaWYgKGZvdW5kKQorCXJldHVybiAxOworICAgIH0KKyAgCisgIHJldHVybiAwOworfQorCisKK2ludCBpc19yZXZfc3ludGgoaW50IGZsYWcsIHN0cnVjdCBhbGxfYWRkciAqYWRkciwgY2hhciAqbmFtZSkKK3sKKyAgIHN0cnVjdCBjb25kX2RvbWFpbiAqYzsKKworICAgaWYgKGZsYWcgJiBGX0lQVjQgJiYgKGMgPSBzZWFyY2hfZG9tYWluKGFkZHItPmFkZHIuYWRkcjQsIGRhZW1vbi0+c3ludGhfZG9tYWlucykpKSAKKyAgICAgeworICAgICAgIGNoYXIgKnA7CisgICAgICAgCisgICAgICAgKm5hbWUgPSAwOworICAgICAgIGlmIChjLT5wcmVmaXgpCisJIHN0cm5jcHkobmFtZSwgYy0+cHJlZml4LCBNQVhETkFNRSAtIEFERFJTVFJMRU4pOworICAgICAgIAorICAgICAgIGluZXRfbnRvcChBRl9JTkVULCAmYWRkci0+YWRkci5hZGRyNCwgbmFtZSArIHN0cmxlbihuYW1lKSwgQUREUlNUUkxFTik7CisgICAgICAgZm9yIChwID0gbmFtZTsgKnA7IHArKykKKwkgaWYgKCpwID09ICcuJykKKwkgICAqcCA9ICctJzsKKworICAgICAgIHN0cm5jYXQobmFtZSwgIi4iLCBNQVhETkFNRSk7CisgICAgICAgc3RybmNhdChuYW1lLCBjLT5kb21haW4sIE1BWEROQU1FKTsKKworICAgICAgIHJldHVybiAxOworICAgICB9CisKKyNpZmRlZiBIQVZFX0lQVjYKKyAgIGlmIChmbGFnICYgRl9JUFY2ICYmIChjID0gc2VhcmNoX2RvbWFpbjYoJmFkZHItPmFkZHIuYWRkcjYsIGRhZW1vbi0+c3ludGhfZG9tYWlucykpKSAKKyAgICAgeworICAgICAgIGNoYXIgKnA7CisgICAgICAgCisgICAgICAgKm5hbWUgPSAwOworICAgICAgIGlmIChjLT5wcmVmaXgpCisJIHN0cm5jcHkobmFtZSwgYy0+cHJlZml4LCBNQVhETkFNRSAtIEFERFJTVFJMRU4pOworICAgICAgIAorICAgICAgIGluZXRfbnRvcChBRl9JTkVUNiwgJmFkZHItPmFkZHIuYWRkcjYsIG5hbWUgKyBzdHJsZW4obmFtZSksIEFERFJTVFJMRU4pOworCisgICAgICAgLyogSVB2NiBwcmVzZW50YXRpb24gYWRkcmVzcyBjYW4gc3RhcnQgd2l0aCAiOiIsIGJ1dCB2YWxpZCBkb21haW4gbmFtZXMKKwkgIGNhbm5vdCBzdGFydCB3aXRoICItIiBzbyBwcmVwZW5kIGEgemVybyBpbiB0aGF0IGNhc2UuICovCisgICAgICAgaWYgKCFjLT5wcmVmaXggJiYgKm5hbWUgPT0gJzonKQorCSB7CisJICAgKm5hbWUgPSAnMCc7CisJICAgaW5ldF9udG9wKEFGX0lORVQ2LCAmYWRkci0+YWRkci5hZGRyNiwgbmFtZSsxLCBBRERSU1RSTEVOKTsKKwkgfQorCisgICAgICAgLyogVjQtbWFwcGVkIGhhdmUgcGVyaW9kcy4uLi4gKi8KKyAgICAgICBmb3IgKHAgPSBuYW1lOyAqcDsgcCsrKQorCSBpZiAoKnAgPT0gJzonIHx8ICpwID09ICcuJykKKwkgICAqcCA9ICctJzsKKworICAgICAgIHN0cm5jYXQobmFtZSwgIi4iLCBNQVhETkFNRSk7CisgICAgICAgc3RybmNhdChuYW1lLCBjLT5kb21haW4sIE1BWEROQU1FKTsKKyAgICAgICAKKyAgICAgICByZXR1cm4gMTsKKyAgICAgfQorI2VuZGlmCisgICAKKyAgIHJldHVybiAwOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgY29uZF9kb21haW4gKnNlYXJjaF9kb21haW4oc3RydWN0IGluX2FkZHIgYWRkciwgc3RydWN0IGNvbmRfZG9tYWluICpjKQoreworICBmb3IgKDsgYzsgYyA9IGMtPm5leHQpCisgICAgaWYgKCFjLT5pczYgJiYKKwludG9obChhZGRyLnNfYWRkcikgPj0gbnRvaGwoYy0+c3RhcnQuc19hZGRyKSAmJgorICAgICAgICBudG9obChhZGRyLnNfYWRkcikgPD0gbnRvaGwoYy0+ZW5kLnNfYWRkcikpCisgICAgICByZXR1cm4gYzsKKworICByZXR1cm4gTlVMTDsKK30KKworY2hhciAqZ2V0X2RvbWFpbihzdHJ1Y3QgaW5fYWRkciBhZGRyKQoreworICBzdHJ1Y3QgY29uZF9kb21haW4gKmM7CisKKyAgaWYgKChjID0gc2VhcmNoX2RvbWFpbihhZGRyLCBkYWVtb24tPmNvbmRfZG9tYWluKSkpCisgICAgcmV0dXJuIGMtPmRvbWFpbjsKKworICByZXR1cm4gZGFlbW9uLT5kb21haW5fc3VmZml4OworfSAKKworI2lmZGVmIEhBVkVfSVBWNgorc3RhdGljIHN0cnVjdCBjb25kX2RvbWFpbiAqc2VhcmNoX2RvbWFpbjYoc3RydWN0IGluNl9hZGRyICphZGRyLCBzdHJ1Y3QgY29uZF9kb21haW4gKmMpCit7CisgIHU2NCBhZGRycGFydCA9IGFkZHI2cGFydChhZGRyKTsKKyAgCisgIGZvciAoOyBjOyBjID0gYy0+bmV4dCkKKyAgICBpZiAoYy0+aXM2ICYmCisJaXNfc2FtZV9uZXQ2KGFkZHIsICZjLT5zdGFydDYsIDY0KSAmJgorCWFkZHJwYXJ0ID49IGFkZHI2cGFydCgmYy0+c3RhcnQ2KSAmJgorICAgICAgICBhZGRycGFydCA8PSBhZGRyNnBhcnQoJmMtPmVuZDYpKQorICAgICAgcmV0dXJuIGM7CisgIAorICByZXR1cm4gTlVMTDsKK30KKworY2hhciAqZ2V0X2RvbWFpbjYoc3RydWN0IGluNl9hZGRyICphZGRyKQoreworICBzdHJ1Y3QgY29uZF9kb21haW4gKmM7CisKKyAgaWYgKGFkZHIgJiYgKGMgPSBzZWFyY2hfZG9tYWluNihhZGRyLCBkYWVtb24tPmNvbmRfZG9tYWluKSkpCisgICAgcmV0dXJuIGMtPmRvbWFpbjsKKworICByZXR1cm4gZGFlbW9uLT5kb21haW5fc3VmZml4OworfSAKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2VkbnMwLmMgYi9zcmMvZWRuczAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWQ1YTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2VkbnMwLmMKQEAgLTAsMCArMSw0NDkgQEAKKy8qIGRuc21hc3EgaXMgQ29weXJpZ2h0IChjKSAyMDAwLTIwMTcgU2ltb24gS2VsbGV5CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIGRhdGVkIEp1bmUsIDE5OTEsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIHZlcnNpb24gMyBkYXRlZCAyOSBKdW5lLCAyMDA3LgorIAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisqLworCisjaW5jbHVkZSAiZG5zbWFzcS5oIgorCit1bnNpZ25lZCBjaGFyICpmaW5kX3BzZXVkb2hlYWRlcihzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBzaXplX3QgcGxlbiwgc2l6ZV90ICAqbGVuLCB1bnNpZ25lZCBjaGFyICoqcCwgaW50ICppc19zaWduLCBpbnQgKmlzX2xhc3QpCit7CisgIC8qIFNlZSBpZiBwYWNrZXQgaGFzIGFuIFJGQzI2NzEgcHNldWRvaGVhZGVyLCBhbmQgaWYgc28gcmV0dXJuIGEgcG9pbnRlciB0byBpdC4gCisgICAgIGFsc28gcmV0dXJuIGxlbmd0aCBvZiBwc2V1ZG9oZWFkZXIgaW4gKmxlbiBhbmQgcG9pbnRlciB0byB0aGUgVURQIHNpemUgaW4gKnAKKyAgICAgRmluYWxseSwgY2hlY2sgdG8gc2VlIGlmIGEgcGFja2V0IGlzIHNpZ25lZC4gSWYgaXQgaXMgd2UgY2Fubm90IGNoYW5nZSBhIHNpbmdsZSBiaXQgYmVmb3JlCisgICAgIGZvcndhcmRpbmcuIFdlIGxvb2sgZm9yIFRTSUcgaW4gdGhlIGFkZGl0aW9uIHNlY3Rpb24sIGFuZCBUS0VZIHF1ZXJpZXMgKGZvciBHU1MtVFNJRykgKi8KKyAgCisgIGludCBpLCBhcmNvdW50ID0gbnRvaHMoaGVhZGVyLT5hcmNvdW50KTsKKyAgdW5zaWduZWQgY2hhciAqYW5zcCA9ICh1bnNpZ25lZCBjaGFyICopKGhlYWRlcisxKTsKKyAgdW5zaWduZWQgc2hvcnQgcmRsZW4sIHR5cGUsIGNsYXNzOworICB1bnNpZ25lZCBjaGFyICpyZXQgPSBOVUxMOworCisgIGlmIChpc19zaWduKQorICAgIHsKKyAgICAgICppc19zaWduID0gMDsKKworICAgICAgaWYgKE9QQ09ERShoZWFkZXIpID09IFFVRVJZKQorCXsKKwkgIGZvciAoaSA9IG50b2hzKGhlYWRlci0+cWRjb3VudCk7IGkgIT0gMDsgaS0tKQorCSAgICB7CisJICAgICAgaWYgKCEoYW5zcCA9IHNraXBfbmFtZShhbnNwLCBoZWFkZXIsIHBsZW4sIDQpKSkKKwkJcmV0dXJuIE5VTEw7CisJICAgICAgCisJICAgICAgR0VUU0hPUlQodHlwZSwgYW5zcCk7IAorCSAgICAgIEdFVFNIT1JUKGNsYXNzLCBhbnNwKTsKKwkgICAgICAKKwkgICAgICBpZiAoY2xhc3MgPT0gQ19JTiAmJiB0eXBlID09IFRfVEtFWSkKKwkJKmlzX3NpZ24gPSAxOworCSAgICB9CisJfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmICghKGFuc3AgPSBza2lwX3F1ZXN0aW9ucyhoZWFkZXIsIHBsZW4pKSkKKwlyZXR1cm4gTlVMTDsKKyAgICB9CisgICAgCisgIGlmIChhcmNvdW50ID09IDApCisgICAgcmV0dXJuIE5VTEw7CisgIAorICBpZiAoIShhbnNwID0gc2tpcF9zZWN0aW9uKGFuc3AsIG50b2hzKGhlYWRlci0+YW5jb3VudCkgKyBudG9ocyhoZWFkZXItPm5zY291bnQpLCBoZWFkZXIsIHBsZW4pKSkKKyAgICByZXR1cm4gTlVMTDsgCisgIAorICBmb3IgKGkgPSAwOyBpIDwgYXJjb3VudDsgaSsrKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIgKnNhdmUsICpzdGFydCA9IGFuc3A7CisgICAgICBpZiAoIShhbnNwID0gc2tpcF9uYW1lKGFuc3AsIGhlYWRlciwgcGxlbiwgMTApKSkKKwlyZXR1cm4gTlVMTDsgCisKKyAgICAgIEdFVFNIT1JUKHR5cGUsIGFuc3ApOworICAgICAgc2F2ZSA9IGFuc3A7CisgICAgICBHRVRTSE9SVChjbGFzcywgYW5zcCk7CisgICAgICBhbnNwICs9IDQ7IC8qIFRUTCAqLworICAgICAgR0VUU0hPUlQocmRsZW4sIGFuc3ApOworICAgICAgaWYgKCFBRERfUkRMRU4oaGVhZGVyLCBhbnNwLCBwbGVuLCByZGxlbikpCisJcmV0dXJuIE5VTEw7CisgICAgICBpZiAodHlwZSA9PSBUX09QVCkKKwl7CisJICBpZiAobGVuKQorCSAgICAqbGVuID0gYW5zcCAtIHN0YXJ0OworCisJICBpZiAocCkKKwkgICAgKnAgPSBzYXZlOworCSAgCisJICBpZiAoaXNfbGFzdCkKKwkgICAgKmlzX2xhc3QgPSAoaSA9PSBhcmNvdW50LTEpOworCisJICByZXQgPSBzdGFydDsKKwl9CisgICAgICBlbHNlIGlmIChpc19zaWduICYmIAorCSAgICAgICBpID09IGFyY291bnQgLSAxICYmIAorCSAgICAgICBjbGFzcyA9PSBDX0FOWSAmJiAKKwkgICAgICAgdHlwZSA9PSBUX1RTSUcpCisJKmlzX3NpZ24gPSAxOworICAgIH0KKyAgCisgIHJldHVybiByZXQ7Cit9CisgCisKKy8qIHJlcGxhY2UgPT0gMiAtPmRlbGV0ZSBleGlzdGluZyBvcHRpb24gb25seS4gKi8KK3NpemVfdCBhZGRfcHNldWRvaGVhZGVyKHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIsIHNpemVfdCBwbGVuLCB1bnNpZ25lZCBjaGFyICpsaW1pdCwgCisJCQl1bnNpZ25lZCBzaG9ydCB1ZHBfc3osIGludCBvcHRubywgdW5zaWduZWQgY2hhciAqb3B0LCBzaXplX3Qgb3B0bGVuLCBpbnQgc2V0X2RvLCBpbnQgcmVwbGFjZSkKK3sgCisgIHVuc2lnbmVkIGNoYXIgKmxlbnAsICpkYXRhcCwgKnAsICp1ZHBfbGVuLCAqYnVmZiA9IE5VTEw7CisgIGludCByZGxlbiA9IDAsIGlzX3NpZ24sIGlzX2xhc3Q7CisgIHVuc2lnbmVkIHNob3J0IGZsYWdzID0gc2V0X2RvID8gMHg4MDAwIDogMCwgcmNvZGUgPSAwOworCisgIHAgPSBmaW5kX3BzZXVkb2hlYWRlcihoZWFkZXIsIHBsZW4sIE5VTEwsICZ1ZHBfbGVuLCAmaXNfc2lnbiwgJmlzX2xhc3QpOworICAKKyAgaWYgKGlzX3NpZ24pCisgICAgcmV0dXJuIHBsZW47CisKKyAgaWYgKHApCisgICAgeworICAgICAgLyogRXhpc3RpbmcgaGVhZGVyICovCisgICAgICBpbnQgaTsKKyAgICAgIHVuc2lnbmVkIHNob3J0IGNvZGUsIGxlbjsKKworICAgICAgcCA9IHVkcF9sZW47CisgICAgICBHRVRTSE9SVCh1ZHBfc3osIHApOworICAgICAgR0VUU0hPUlQocmNvZGUsIHApOworICAgICAgR0VUU0hPUlQoZmxhZ3MsIHApOworCisgICAgICBpZiAoc2V0X2RvKQorCXsKKwkgIHAgLT0gMjsKKwkgIGZsYWdzIHw9IDB4ODAwMDsKKwkgIFBVVFNIT1JUKGZsYWdzLCBwKTsKKwl9CisKKyAgICAgIGxlbnAgPSBwOworICAgICAgR0VUU0hPUlQocmRsZW4sIHApOworICAgICAgaWYgKCFDSEVDS19MRU4oaGVhZGVyLCBwLCBwbGVuLCByZGxlbikpCisJcmV0dXJuIHBsZW47IC8qIGJhZCBwYWNrZXQgKi8KKyAgICAgIGRhdGFwID0gcDsKKworICAgICAgIC8qIG5vIG9wdGlvbiB0byBhZGQgKi8KKyAgICAgIGlmIChvcHRubyA9PSAwKQorCXJldHVybiBwbGVuOworICAgICAgCSAgCisgICAgICAvKiBjaGVjayBpZiBvcHRpb24gYWxyZWFkeSB0aGVyZSAqLworICAgICAgZm9yIChpID0gMDsgaSArIDQgPCByZGxlbjspCisJeworCSAgR0VUU0hPUlQoY29kZSwgcCk7CisJICBHRVRTSE9SVChsZW4sIHApOworCSAgCisJICAvKiBtYWxmb3JtZWQgb3B0aW9uLCBkZWxldGUgdGhlIHdob2xlIE9QVCBSUiBhbmQgc3RhcnQgYWdhaW4uICovCisJICBpZiAoaSArIDQgKyBsZW4gPiByZGxlbikKKwkgICAgeworCSAgICAgIHJkbGVuID0gMDsKKwkgICAgICBpc19sYXN0ID0gMDsKKwkgICAgICBicmVhazsKKwkgICAgfQorCSAgCisJICBpZiAoY29kZSA9PSBvcHRubykKKwkgICAgeworCSAgICAgIGlmIChyZXBsYWNlID09IDApCisJCXJldHVybiBwbGVuOworCisJICAgICAgLyogZGVsZXRlIG9wdGlvbiBpZiB3ZSdyZSB0byByZXBsYWNlIGl0LiAqLworCSAgICAgIHAgLT0gNDsKKwkgICAgICByZGxlbiAtPSBsZW4gKyA0OworCSAgICAgIG1lbW1vdmUocCwgcCtsZW4rNCwgcmRsZW4gLSBpKTsKKwkgICAgICBQVVRTSE9SVChyZGxlbiwgbGVucCk7CisJICAgICAgbGVucCAtPSAyOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBwICs9IGxlbjsKKwkgICAgICBpICs9IGxlbiArIDQ7CisJICAgIH0KKwl9CisKKyAgICAgIC8qIElmIHdlJ3JlIGdvaW5nIHRvIGV4dGVuZCB0aGUgUlIsIGl0IGhhcyB0byBiZSB0aGUgbGFzdCBSUiBpbiB0aGUgcGFja2V0ICovCisgICAgICBpZiAoIWlzX2xhc3QpCisJeworCSAgLyogRmlyc3QsIHRha2UgYSBjb3B5IG9mIHRoZSBvcHRpb25zLiAqLworCSAgaWYgKHJkbGVuICE9IDAgJiYgKGJ1ZmYgPSB3aGluZV9tYWxsb2MocmRsZW4pKSkKKwkgICAgbWVtY3B5KGJ1ZmYsIGRhdGFwLCByZGxlbik7CSAgICAgIAorCSAgCisJICAvKiBub3csIGRlbGV0ZSBPUFQgUlIgKi8KKwkgIHBsZW4gPSBycmZpbHRlcihoZWFkZXIsIHBsZW4sIDApOworCSAgCisJICAvKiBOb3csIGZvcmNlIGFkZGl0aW9uIG9mIGEgbmV3IG9uZSAqLworCSAgcCA9IE5VTEw7CSAgCisJfQorICAgIH0KKyAgCisgIGlmICghcCkKKyAgICB7CisgICAgICAvKiBXZSBhcmUgKHJlKWFkZGluZyB0aGUgcHNldWRvaGVhZGVyICovCisgICAgICBpZiAoIShwID0gc2tpcF9xdWVzdGlvbnMoaGVhZGVyLCBwbGVuKSkgfHwKKwkgICEocCA9IHNraXBfc2VjdGlvbihwLCAKKwkJCSAgICAgbnRvaHMoaGVhZGVyLT5hbmNvdW50KSArIG50b2hzKGhlYWRlci0+bnNjb3VudCkgKyBudG9ocyhoZWFkZXItPmFyY291bnQpLCAKKwkJCSAgICAgaGVhZGVyLCBwbGVuKSkpCisgICAgICB7CisJZnJlZShidWZmKTsKKwlyZXR1cm4gcGxlbjsKKyAgICAgIH0KKyAgICAgIGlmIChwICsgMTEgPiBsaW1pdCkKKyAgICAgIHsKKyAgICAgICAgZnJlZShidWZmKTsKKyAgICAgICAgcmV0dXJuIHBsZW47IC8qIFRvbyBiaWcgKi8KKyAgICAgIH0KKyAgICAgICpwKysgPSAwOyAvKiBlbXB0eSBuYW1lICovCisgICAgICBQVVRTSE9SVChUX09QVCwgcCk7CisgICAgICBQVVRTSE9SVCh1ZHBfc3osIHApOyAvKiBtYXggcGFja2V0IGxlbmd0aCwgNTEyIGlmIG5vdCBnaXZlbiBpbiBFRE5TMCBoZWFkZXIgKi8KKyAgICAgIFBVVFNIT1JUKHJjb2RlLCBwKTsgICAgLyogZXh0ZW5kZWQgUkNPREUgYW5kIHZlcnNpb24gKi8KKyAgICAgIFBVVFNIT1JUKGZsYWdzLCBwKTsgLyogRE8gZmxhZyAqLworICAgICAgbGVucCA9IHA7CisgICAgICBQVVRTSE9SVChyZGxlbiwgcCk7ICAgIC8qIFJETEVOICovCisgICAgICBkYXRhcCA9IHA7CisgICAgICAvKiBDb3B5IGJhY2sgYW55IG9wdGlvbnMgKi8KKyAgICAgIGlmIChidWZmKQorCXsKKyAgICAgICAgICBpZiAocCArIHJkbGVuID4gbGltaXQpCisgICAgICAgICAgeworICAgICAgICAgICAgZnJlZShidWZmKTsKKyAgICAgICAgICAgIHJldHVybiBwbGVuOyAvKiBUb28gYmlnICovCisgICAgICAgICAgfQorCSAgbWVtY3B5KHAsIGJ1ZmYsIHJkbGVuKTsKKwkgIGZyZWUoYnVmZik7CisJICBwICs9IHJkbGVuOworCX0KKyAgICAgIAorICAgICAgLyogT25seSBidW1wIGFyY291bnQgaWYgUlIgaXMgZ29pbmcgdG8gZml0ICovIAorICAgICAgaWYgKCgoc3NpemVfdClvcHRsZW4pIDw9IChsaW1pdCAtIChwICsgNCkpKQorCWhlYWRlci0+YXJjb3VudCA9IGh0b25zKG50b2hzKGhlYWRlci0+YXJjb3VudCkgKyAxKTsKKyAgICB9CisgIAorICBpZiAoKChzc2l6ZV90KW9wdGxlbikgPiAobGltaXQgLSAocCArIDQpKSkKKyAgICByZXR1cm4gcGxlbjsgLyogVG9vIGJpZyAqLworICAKKyAgLyogQWRkIG5ldyBvcHRpb24gKi8KKyAgaWYgKG9wdG5vICE9IDAgJiYgcmVwbGFjZSAhPSAyKQorICAgIHsKKyAgICAgIGlmIChwICsgNCA+IGxpbWl0KQorICAgICAgIHJldHVybiBwbGVuOyAvKiBUb28gYmlnICovCisgICAgICBQVVRTSE9SVChvcHRubywgcCk7CisgICAgICBQVVRTSE9SVChvcHRsZW4sIHApOworICAgICAgaWYgKHAgKyBvcHRsZW4gPiBsaW1pdCkKKyAgICAgICByZXR1cm4gcGxlbjsgLyogVG9vIGJpZyAqLworICAgICAgbWVtY3B5KHAsIG9wdCwgb3B0bGVuKTsKKyAgICAgIHAgKz0gb3B0bGVuOyAgCisgICAgICBQVVRTSE9SVChwIC0gZGF0YXAsIGxlbnApOworICAgIH0KKyAgcmV0dXJuIHAgLSAodW5zaWduZWQgY2hhciAqKWhlYWRlcjsKK30KKworc2l6ZV90IGFkZF9kb19iaXQoc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90IHBsZW4sIHVuc2lnbmVkIGNoYXIgKmxpbWl0KQoreworICByZXR1cm4gYWRkX3BzZXVkb2hlYWRlcihoZWFkZXIsIHBsZW4sICh1bnNpZ25lZCBjaGFyICopbGltaXQsIFBBQ0tFVFNaLCAwLCBOVUxMLCAwLCAxLCAwKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgY2hhcjY0KHVuc2lnbmVkIGNoYXIgYykKK3sKKyAgcmV0dXJuICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIltjICYgMHgzZl07Cit9CisKK3N0YXRpYyB2b2lkIGVuY29kZXIodW5zaWduZWQgY2hhciAqaW4sIGNoYXIgKm91dCkKK3sKKyAgb3V0WzBdID0gY2hhcjY0KGluWzBdPj4yKTsKKyAgb3V0WzFdID0gY2hhcjY0KChpblswXTw8NCkgfCAoaW5bMV0+PjQpKTsKKyAgb3V0WzJdID0gY2hhcjY0KChpblsxXTw8MikgfCAoaW5bMl0+PjYpKTsKKyAgb3V0WzNdID0gY2hhcjY0KGluWzJdKTsKK30KKworc3RhdGljIHNpemVfdCBhZGRfZG5zX2NsaWVudChzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBzaXplX3QgcGxlbiwgdW5zaWduZWQgY2hhciAqbGltaXQsIHVuaW9uIG15c29ja2FkZHIgKmwzLCB0aW1lX3Qgbm93KQoreworICBpbnQgbWFjbGVuLCByZXBsYWNlID0gMjsgLyogY2FuJ3QgZ2V0IG1hYyBhZGRyZXNzLCBqdXN0IGRlbGV0ZSBhbnkgaW5jb21pbmcuICovCisgIHVuc2lnbmVkIGNoYXIgbWFjW0RIQ1BfQ0hBRERSX01BWF07CisgIGNoYXIgZW5jb2RlWzE4XTsgLyogaGFuZGxlIDYgYnl0ZSBNQUNzICovCisKKyAgaWYgKChtYWNsZW4gPSBmaW5kX21hYyhsMywgbWFjLCAxLCBub3cpKSA9PSA2KQorICAgIHsKKyAgICAgIHJlcGxhY2UgPSAxOworCisgICAgICBpZiAob3B0aW9uX2Jvb2woT1BUX01BQ19IRVgpKQorCXByaW50X21hYyhlbmNvZGUsIG1hYywgbWFjbGVuKTsKKyAgICAgIGVsc2UKKwl7CisJICBlbmNvZGVyKG1hYywgZW5jb2RlKTsKKwkgIGVuY29kZXIobWFjKzMsIGVuY29kZSs0KTsKKwkgIGVuY29kZVs4XSA9IDA7CisJfQorICAgIH0KKworICByZXR1cm4gYWRkX3BzZXVkb2hlYWRlcihoZWFkZXIsIHBsZW4sIGxpbWl0LCBQQUNLRVRTWiwgRUROUzBfT1BUSU9OX05PTURFVklDRUlELCAodW5zaWduZWQgY2hhciAqKWVuY29kZSwgc3RybGVuKGVuY29kZSksIDAsIHJlcGxhY2UpOyAKK30KKworCitzdGF0aWMgc2l6ZV90IGFkZF9tYWMoc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90IHBsZW4sIHVuc2lnbmVkIGNoYXIgKmxpbWl0LCB1bmlvbiBteXNvY2thZGRyICpsMywgdGltZV90IG5vdykKK3sKKyAgaW50IG1hY2xlbjsKKyAgdW5zaWduZWQgY2hhciBtYWNbREhDUF9DSEFERFJfTUFYXTsKKworICBpZiAoKG1hY2xlbiA9IGZpbmRfbWFjKGwzLCBtYWMsIDEsIG5vdykpICE9IDApCisgICAgcGxlbiA9IGFkZF9wc2V1ZG9oZWFkZXIoaGVhZGVyLCBwbGVuLCBsaW1pdCwgUEFDS0VUU1osIEVETlMwX09QVElPTl9NQUMsIG1hYywgbWFjbGVuLCAwLCAwKTsgCisgICAgCisgIHJldHVybiBwbGVuOyAKK30KKworc3RydWN0IHN1Ym5ldF9vcHQgeworICB1MTYgZmFtaWx5OworICB1OCBzb3VyY2VfbmV0bWFzaywgc2NvcGVfbmV0bWFzazsKKyNpZmRlZiBIQVZFX0lQVjYgCisgIHU4IGFkZHJbSU42QUREUlNaXTsKKyNlbHNlCisgIHU4IGFkZHJbSU5BRERSU1pdOworI2VuZGlmCit9OworCitzdGF0aWMgdm9pZCAqZ2V0X2FkZHJwKHVuaW9uIG15c29ja2FkZHIgKmFkZHIsIGNvbnN0IHNob3J0IGZhbWlseSkgCit7CisjaWZkZWYgSEFWRV9JUFY2CisgIGlmIChmYW1pbHkgPT0gQUZfSU5FVDYpCisgICAgcmV0dXJuICZhZGRyLT5pbjYuc2luNl9hZGRyOworI2VuZGlmCisKKyAgcmV0dXJuICZhZGRyLT5pbi5zaW5fYWRkcjsKK30KKworc3RhdGljIHNpemVfdCBjYWxjX3N1Ym5ldF9vcHQoc3RydWN0IHN1Ym5ldF9vcHQgKm9wdCwgdW5pb24gbXlzb2NrYWRkciAqc291cmNlKQoreworICAvKiBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC12YW5kZXJnYWFzdC1lZG5zLWNsaWVudC1zdWJuZXQtMDIgKi8KKyAgCisgIGludCBsZW47CisgIHZvaWQgKmFkZHJwID0gTlVMTDsKKyAgaW50IHNhX2ZhbWlseSA9IHNvdXJjZS0+c2Euc2FfZmFtaWx5OworCisgIG9wdC0+c291cmNlX25ldG1hc2sgPSAwOworICBvcHQtPnNjb3BlX25ldG1hc2sgPSAwOworCisjaWZkZWYgSEFWRV9JUFY2CisgIGlmIChzb3VyY2UtPnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNiAmJiBkYWVtb24tPmFkZF9zdWJuZXQ2KQorICAgIHsKKyAgICAgIG9wdC0+c291cmNlX25ldG1hc2sgPSBkYWVtb24tPmFkZF9zdWJuZXQ2LT5tYXNrOworICAgICAgaWYgKGRhZW1vbi0+YWRkX3N1Ym5ldDYtPmFkZHJfdXNlZCkgCisJeworCSAgc2FfZmFtaWx5ID0gZGFlbW9uLT5hZGRfc3VibmV0Ni0+YWRkci5zYS5zYV9mYW1pbHk7CisJICBhZGRycCA9IGdldF9hZGRycCgmZGFlbW9uLT5hZGRfc3VibmV0Ni0+YWRkciwgc2FfZmFtaWx5KTsKKwl9IAorICAgICAgZWxzZSAKKwlhZGRycCA9ICZzb3VyY2UtPmluNi5zaW42X2FkZHI7CisgICAgfQorI2VuZGlmCisKKyAgaWYgKHNvdXJjZS0+c2Euc2FfZmFtaWx5ID09IEFGX0lORVQgJiYgZGFlbW9uLT5hZGRfc3VibmV0NCkKKyAgICB7CisgICAgICBvcHQtPnNvdXJjZV9uZXRtYXNrID0gZGFlbW9uLT5hZGRfc3VibmV0NC0+bWFzazsKKyAgICAgIGlmIChkYWVtb24tPmFkZF9zdWJuZXQ0LT5hZGRyX3VzZWQpCisJeworCSAgc2FfZmFtaWx5ID0gZGFlbW9uLT5hZGRfc3VibmV0NC0+YWRkci5zYS5zYV9mYW1pbHk7CisJICBhZGRycCA9IGdldF9hZGRycCgmZGFlbW9uLT5hZGRfc3VibmV0NC0+YWRkciwgc2FfZmFtaWx5KTsKKwl9IAorCWVsc2UgCisJICBhZGRycCA9ICZzb3VyY2UtPmluLnNpbl9hZGRyOworICAgIH0KKyAgCisjaWZkZWYgSEFWRV9JUFY2CisgIG9wdC0+ZmFtaWx5ID0gaHRvbnMoc2FfZmFtaWx5ID09IEFGX0lORVQ2ID8gMiA6IDEpOworI2Vsc2UKKyAgb3B0LT5mYW1pbHkgPSBodG9ucygxKTsKKyNlbmRpZgorICAKKyAgbGVuID0gMDsKKyAgCisgIGlmIChhZGRycCAmJiBvcHQtPnNvdXJjZV9uZXRtYXNrICE9IDApCisgICAgeworICAgICAgbGVuID0gKChvcHQtPnNvdXJjZV9uZXRtYXNrIC0gMSkgPj4gMykgKyAxOworICAgICAgbWVtY3B5KG9wdC0+YWRkciwgYWRkcnAsIGxlbik7CisgICAgICBpZiAob3B0LT5zb3VyY2VfbmV0bWFzayAmIDcpCisJb3B0LT5hZGRyW2xlbi0xXSAmPSAweGZmIDw8ICg4IC0gKG9wdC0+c291cmNlX25ldG1hc2sgJiA3KSk7CisgICAgfQorICAKKyAgcmV0dXJuIGxlbiArIDQ7Cit9CisgCitzdGF0aWMgc2l6ZV90IGFkZF9zb3VyY2VfYWRkcihzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBzaXplX3QgcGxlbiwgdW5zaWduZWQgY2hhciAqbGltaXQsIHVuaW9uIG15c29ja2FkZHIgKnNvdXJjZSkKK3sKKyAgLyogaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtdmFuZGVyZ2Fhc3QtZWRucy1jbGllbnQtc3VibmV0LTAyICovCisgIAorICBpbnQgbGVuOworICBzdHJ1Y3Qgc3VibmV0X29wdCBvcHQ7CisgIAorICBsZW4gPSBjYWxjX3N1Ym5ldF9vcHQoJm9wdCwgc291cmNlKTsKKyAgcmV0dXJuIGFkZF9wc2V1ZG9oZWFkZXIoaGVhZGVyLCBwbGVuLCAodW5zaWduZWQgY2hhciAqKWxpbWl0LCBQQUNLRVRTWiwgRUROUzBfT1BUSU9OX0NMSUVOVF9TVUJORVQsICh1bnNpZ25lZCBjaGFyICopJm9wdCwgbGVuLCAwLCAwKTsKK30KKworaW50IGNoZWNrX3NvdXJjZShzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBzaXplX3QgcGxlbiwgdW5zaWduZWQgY2hhciAqcHNldWRvaGVhZGVyLCB1bmlvbiBteXNvY2thZGRyICpwZWVyKQoreworICAvKiBTZWN0aW9uIDkuMiwgQ2hlY2sgdGhhdCBzdWJuZXQgb3B0aW9uIGluIHJlcGx5IG1hdGNoZXMuICovCisgIAorICBpbnQgbGVuLCBjYWxjX2xlbjsKKyAgc3RydWN0IHN1Ym5ldF9vcHQgb3B0OworICB1bnNpZ25lZCBjaGFyICpwOworICBpbnQgY29kZSwgaSwgcmRsZW47CisgIAorICAgY2FsY19sZW4gPSBjYWxjX3N1Ym5ldF9vcHQoJm9wdCwgcGVlcik7CisgICAKKyAgIGlmICghKHAgPSBza2lwX25hbWUocHNldWRvaGVhZGVyLCBoZWFkZXIsIHBsZW4sIDEwKSkpCisgICAgIHJldHVybiAxOworICAgCisgICBwICs9IDg7IC8qIHNraXAgVURQIGxlbmd0aCBhbmQgUkNPREUgKi8KKyAgIAorICAgR0VUU0hPUlQocmRsZW4sIHApOworICAgaWYgKCFDSEVDS19MRU4oaGVhZGVyLCBwLCBwbGVuLCByZGxlbikpCisgICAgIHJldHVybiAxOyAvKiBiYWQgcGFja2V0ICovCisgICAKKyAgIC8qIGNoZWNrIGlmIG9wdGlvbiB0aGVyZSAqLworICAgZm9yIChpID0gMDsgaSArIDQgPCByZGxlbjsgaSArPSBsZW4gKyA0KQorICAgICB7CisgICAgICAgR0VUU0hPUlQoY29kZSwgcCk7CisgICAgICAgR0VUU0hPUlQobGVuLCBwKTsKKyAgICAgICBpZiAoY29kZSA9PSBFRE5TMF9PUFRJT05fQ0xJRU5UX1NVQk5FVCkKKwkgeworCSAgIC8qIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJ3QgbWlzbWF0Y2guICovCisJICAgb3B0LnNjb3BlX25ldG1hc2sgPSBwWzNdOworCSAgIGlmIChsZW4gIT0gY2FsY19sZW4gfHwgbWVtY21wKHAsICZvcHQsIGxlbikgIT0gMCkKKwkgICAgIHJldHVybiAwOworCSB9CisgICAgICAgcCArPSBsZW47CisgICAgIH0KKyAgIAorICAgcmV0dXJuIDE7Cit9CisKK3NpemVfdCBhZGRfZWRuczBfY29uZmlnKHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIsIHNpemVfdCBwbGVuLCB1bnNpZ25lZCBjaGFyICpsaW1pdCwgCisJCQl1bmlvbiBteXNvY2thZGRyICpzb3VyY2UsIHRpbWVfdCBub3csIGludCAqY2hlY2tfc3VibmV0KSAgICAKK3sKKyAgKmNoZWNrX3N1Ym5ldCA9IDA7CisKKyAgaWYgKG9wdGlvbl9ib29sKE9QVF9BRERfTUFDKSkKKyAgICBwbGVuICA9IGFkZF9tYWMoaGVhZGVyLCBwbGVuLCBsaW1pdCwgc291cmNlLCBub3cpOworICAKKyAgaWYgKG9wdGlvbl9ib29sKE9QVF9NQUNfQjY0KSB8fCBvcHRpb25fYm9vbChPUFRfTUFDX0hFWCkpCisgICAgcGxlbiA9IGFkZF9kbnNfY2xpZW50KGhlYWRlciwgcGxlbiwgbGltaXQsIHNvdXJjZSwgbm93KTsKKworICBpZiAoZGFlbW9uLT5kbnNfY2xpZW50X2lkKQorICAgIHBsZW4gPSBhZGRfcHNldWRvaGVhZGVyKGhlYWRlciwgcGxlbiwgbGltaXQsIFBBQ0tFVFNaLCBFRE5TMF9PUFRJT05fTk9NQ1BFSUQsIAorCQkJICAgICh1bnNpZ25lZCBjaGFyICopZGFlbW9uLT5kbnNfY2xpZW50X2lkLCBzdHJsZW4oZGFlbW9uLT5kbnNfY2xpZW50X2lkKSwgMCwgMSk7CisgIAorICBpZiAob3B0aW9uX2Jvb2woT1BUX0NMSUVOVF9TVUJORVQpKQorICAgIHsKKyAgICAgIHBsZW4gPSBhZGRfc291cmNlX2FkZHIoaGVhZGVyLCBwbGVuLCBsaW1pdCwgc291cmNlKTsgCisgICAgICAqY2hlY2tfc3VibmV0ID0gMTsKKyAgICB9CisJICAKKyAgcmV0dXJuIHBsZW47Cit9CmRpZmYgLS1naXQgYS9zcmMvZm9yd2FyZC5jIGIvc3JjL2ZvcndhcmQuYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45NDJiMDJkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2ZvcndhcmQuYwpAQCAtMCwwICsxLDIyNTkgQEAKKy8qIGRuc21hc3EgaXMgQ29weXJpZ2h0IChjKSAyMDAwLTIwMTcgU2ltb24gS2VsbGV5CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIGRhdGVkIEp1bmUsIDE5OTEsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIHZlcnNpb24gMyBkYXRlZCAyOSBKdW5lLCAyMDA3LgorIAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisqLworCisjaW5jbHVkZSAiZG5zbWFzcS5oIgorCitzdGF0aWMgc3RydWN0IGZyZWMgKmxvb2t1cF9mcmVjKHVuc2lnbmVkIHNob3J0IGlkLCB2b2lkICpoYXNoKTsKK3N0YXRpYyBzdHJ1Y3QgZnJlYyAqbG9va3VwX2ZyZWNfYnlfc2VuZGVyKHVuc2lnbmVkIHNob3J0IGlkLAorCQkJCQkgIHVuaW9uIG15c29ja2FkZHIgKmFkZHIsCisJCQkJCSAgdm9pZCAqaGFzaCk7CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgZ2V0X2lkKHZvaWQpOworc3RhdGljIHZvaWQgZnJlZV9mcmVjKHN0cnVjdCBmcmVjICpmKTsKKworLyogU2VuZCBhIFVEUCBwYWNrZXQgd2l0aCBpdHMgc291cmNlIGFkZHJlc3Mgc2V0IGFzICJzb3VyY2UiIAorICAgdW5sZXNzIG5vd2lsZCBpcyB0cnVlLCB3aGVuIHdlIGp1c3Qgc2VuZCBpdCB3aXRoIHRoZSBrZXJuZWwgZGVmYXVsdCAqLworaW50IHNlbmRfZnJvbShpbnQgZmQsIGludCBub3dpbGQsIGNoYXIgKnBhY2tldCwgc2l6ZV90IGxlbiwgCisJICAgICAgdW5pb24gbXlzb2NrYWRkciAqdG8sIHN0cnVjdCBhbGxfYWRkciAqc291cmNlLAorCSAgICAgIHVuc2lnbmVkIGludCBpZmFjZSkKK3sKKyAgc3RydWN0IG1zZ2hkciBtc2c7CisgIHN0cnVjdCBpb3ZlYyBpb3ZbMV07IAorICB1bmlvbiB7CisgICAgc3RydWN0IGNtc2doZHIgYWxpZ247IC8qIHRoaXMgZW5zdXJlcyBhbGlnbm1lbnQgKi8KKyNpZiBkZWZpbmVkKEhBVkVfTElOVVhfTkVUV09SSykKKyAgICBjaGFyIGNvbnRyb2xbQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IGluX3BrdGluZm8pKV07CisjZWxpZiBkZWZpbmVkKElQX1NFTkRTUkNBRERSKQorICAgIGNoYXIgY29udHJvbFtDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpXTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfSVBWNgorICAgIGNoYXIgY29udHJvbDZbQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IGluNl9wa3RpbmZvKSldOworI2VuZGlmCisgIH0gY29udHJvbF91OworICAKKyAgaW92WzBdLmlvdl9iYXNlID0gcGFja2V0OworICBpb3ZbMF0uaW92X2xlbiA9IGxlbjsKKworICBtc2cubXNnX2NvbnRyb2wgPSBOVUxMOworICBtc2cubXNnX2NvbnRyb2xsZW4gPSAwOworICBtc2cubXNnX2ZsYWdzID0gMDsKKyAgbXNnLm1zZ19uYW1lID0gdG87CisgIG1zZy5tc2dfbmFtZWxlbiA9IHNhX2xlbih0byk7CisgIG1zZy5tc2dfaW92ID0gaW92OworICBtc2cubXNnX2lvdmxlbiA9IDE7CisgIAorICBpZiAoIW5vd2lsZCkKKyAgICB7CisgICAgICBzdHJ1Y3QgY21zZ2hkciAqY21wdHI7CisgICAgICBtc2cubXNnX2NvbnRyb2wgPSAmY29udHJvbF91OworICAgICAgbXNnLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGNvbnRyb2xfdSk7CisgICAgICBjbXB0ciA9IENNU0dfRklSU1RIRFIoJm1zZyk7CisKKyAgICAgIGlmICh0by0+c2Euc2FfZmFtaWx5ID09IEFGX0lORVQpCisJeworI2lmIGRlZmluZWQoSEFWRV9MSU5VWF9ORVRXT1JLKQorCSAgc3RydWN0IGluX3BrdGluZm8gcDsKKwkgIHAuaXBpX2lmaW5kZXggPSAwOworCSAgcC5pcGlfc3BlY19kc3QgPSBzb3VyY2UtPmFkZHIuYWRkcjQ7CisJICBtZW1jcHkoQ01TR19EQVRBKGNtcHRyKSwgJnAsIHNpemVvZihwKSk7CisJICBtc2cubXNnX2NvbnRyb2xsZW4gPSBjbXB0ci0+Y21zZ19sZW4gPSBDTVNHX0xFTihzaXplb2Yoc3RydWN0IGluX3BrdGluZm8pKTsKKwkgIGNtcHRyLT5jbXNnX2xldmVsID0gSVBQUk9UT19JUDsKKwkgIGNtcHRyLT5jbXNnX3R5cGUgPSBJUF9QS1RJTkZPOworI2VsaWYgZGVmaW5lZChJUF9TRU5EU1JDQUREUikKKwkgIG1lbWNweShDTVNHX0RBVEEoY21wdHIpLCAmKHNvdXJjZS0+YWRkci5hZGRyNCksIHNpemVvZihzb3VyY2UtPmFkZHIuYWRkcjQpKTsKKwkgIG1zZy5tc2dfY29udHJvbGxlbiA9IGNtcHRyLT5jbXNnX2xlbiA9IENNU0dfTEVOKHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpOworCSAgY21wdHItPmNtc2dfbGV2ZWwgPSBJUFBST1RPX0lQOworCSAgY21wdHItPmNtc2dfdHlwZSA9IElQX1NFTkRTUkNBRERSOworI2VuZGlmCisJfQorICAgICAgZWxzZQorI2lmZGVmIEhBVkVfSVBWNgorCXsKKwkgIHN0cnVjdCBpbjZfcGt0aW5mbyBwOworCSAgcC5pcGk2X2lmaW5kZXggPSBpZmFjZTsgLyogTmVlZCBpZmFjZSBmb3IgSVB2NiB0byBoYW5kbGUgbGluay1sb2NhbCBhZGRycyAqLworCSAgcC5pcGk2X2FkZHIgPSBzb3VyY2UtPmFkZHIuYWRkcjY7CisJICBtZW1jcHkoQ01TR19EQVRBKGNtcHRyKSwgJnAsIHNpemVvZihwKSk7CisJICBtc2cubXNnX2NvbnRyb2xsZW4gPSBjbXB0ci0+Y21zZ19sZW4gPSBDTVNHX0xFTihzaXplb2Yoc3RydWN0IGluNl9wa3RpbmZvKSk7CisJICBjbXB0ci0+Y21zZ190eXBlID0gZGFlbW9uLT52NnBrdGluZm87CisJICBjbXB0ci0+Y21zZ19sZXZlbCA9IElQUFJPVE9fSVBWNjsKKwl9CisjZWxzZQorICAgICAgKHZvaWQpaWZhY2U7IC8qIGVsaW1pbmF0ZSB3YXJuaW5nICovCisjZW5kaWYKKyAgICB9CisgIAorICB3aGlsZSAocmV0cnlfc2VuZChzZW5kbXNnKGZkLCAmbXNnLCAwKSkpOworCisgIC8qIElmIGludGVyZmFjZSBpcyBzdGlsbCBpbiBEQUQsIEVJTlZBTCByZXN1bHRzIC0gaWdub3JlIHRoYXQuICovCisgIGlmIChlcnJubyAhPSAwICYmIGVycm5vICE9IEVJTlZBTCkKKyAgICB7CisgICAgICBteV9zeXNsb2coTE9HX0VSUiwgXygiZmFpbGVkIHRvIHNlbmQgcGFja2V0OiAlcyIpLCBzdHJlcnJvcihlcnJubykpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICAKKyAgcmV0dXJuIDE7Cit9CisgICAgICAgICAgCitzdGF0aWMgdW5zaWduZWQgaW50IHNlYXJjaF9zZXJ2ZXJzKHRpbWVfdCBub3csIHN0cnVjdCBhbGxfYWRkciAqKmFkZHJwcCwgdW5zaWduZWQgaW50IHF0eXBlLAorCQkJCSAgIGNoYXIgKnFkb21haW4sIGludCAqdHlwZSwgY2hhciAqKmRvbWFpbiwgaW50ICpub3JlYmluZCkKKwkJCSAgICAgIAoreworICAvKiBJZiB0aGUgcXVlcnkgZW5kcyBpbiB0aGUgZG9tYWluIGluIG9uZSBvZiBvdXIgc2VydmVycywgc2V0CisgICAgIGRvbWFpbiB0byBwb2ludCB0byB0aGF0IG5hbWUuIFdlIGZpbmQgdGhlIGxhcmdlc3QgbWF0Y2ggdG8gYWxsb3cgYm90aAorICAgICBkb21haW4ub3JnIGFuZCBzdWIuZG9tYWluLm9yZyB0byBleGlzdC4gKi8KKyAgCisgIHVuc2lnbmVkIGludCBuYW1lbGVuID0gc3RybGVuKHFkb21haW4pOworICB1bnNpZ25lZCBpbnQgbWF0Y2hsZW4gPSAwOworICBzdHJ1Y3Qgc2VydmVyICpzZXJ2OworICB1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwOworICAKKyAgZm9yIChzZXJ2ID0gZGFlbW9uLT5zZXJ2ZXJzOyBzZXJ2OyBzZXJ2PXNlcnYtPm5leHQpCisgICAgaWYgKHF0eXBlID09IEZfRE5TU0VDT0sgJiYgIShzZXJ2LT5mbGFncyAmIFNFUlZfRE9fRE5TU0VDKSkKKyAgICAgIGNvbnRpbnVlOworICAgIC8qIGRvbWFpbiBtYXRjaGVzIHRha2UgcHJpb3JpdHkgb3ZlciBOT0RPVFMgbWF0Y2hlcyAqLworICAgIGVsc2UgaWYgKChzZXJ2LT5mbGFncyAmIFNFUlZfRk9SX05PRE9UUykgJiYgKnR5cGUgIT0gU0VSVl9IQVNfRE9NQUlOICYmICFzdHJjaHIocWRvbWFpbiwgJy4nKSAmJiBuYW1lbGVuICE9IDApCisgICAgICB7CisJdW5zaWduZWQgaW50IHNmbGFnID0gc2Vydi0+YWRkci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCA/IEZfSVBWNCA6IEZfSVBWNjsgCisJKnR5cGUgPSBTRVJWX0ZPUl9OT0RPVFM7CisJaWYgKHNlcnYtPmZsYWdzICYgU0VSVl9OT19BRERSKQorCSAgZmxhZ3MgPSBGX05YRE9NQUlOOworCWVsc2UgaWYgKHNlcnYtPmZsYWdzICYgU0VSVl9MSVRFUkFMX0FERFJFU1MpIAorCSAgeyAKKwkgICAgaWYgKHNmbGFnICYgcXR5cGUpCisJICAgICAgeworCQlmbGFncyA9IHNmbGFnOworCQlpZiAoc2Vydi0+YWRkci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgCisJCSAgKmFkZHJwcCA9IChzdHJ1Y3QgYWxsX2FkZHIgKikmc2Vydi0+YWRkci5pbi5zaW5fYWRkcjsKKyNpZmRlZiBIQVZFX0lQVjYKKwkJZWxzZQorCQkgICphZGRycHAgPSAoc3RydWN0IGFsbF9hZGRyICopJnNlcnYtPmFkZHIuaW42LnNpbjZfYWRkcjsKKyNlbmRpZiAKKwkgICAgICB9CisJICAgIGVsc2UgaWYgKCFmbGFncyB8fCAoZmxhZ3MgJiBGX05YRE9NQUlOKSkKKwkgICAgICBmbGFncyA9IEZfTk9FUlI7CisJICB9IAorICAgICAgfQorICAgIGVsc2UgaWYgKHNlcnYtPmZsYWdzICYgU0VSVl9IQVNfRE9NQUlOKQorICAgICAgeworCXVuc2lnbmVkIGludCBkb21haW5sZW4gPSBzdHJsZW4oc2Vydi0+ZG9tYWluKTsKKwljaGFyICptYXRjaHN0YXJ0ID0gcWRvbWFpbiArIG5hbWVsZW4gLSBkb21haW5sZW47CisJaWYgKG5hbWVsZW4gPj0gZG9tYWlubGVuICYmCisJICAgIGhvc3RuYW1lX2lzZXF1YWwobWF0Y2hzdGFydCwgc2Vydi0+ZG9tYWluKSAmJgorCSAgICAoZG9tYWlubGVuID09IDAgfHwgbmFtZWxlbiA9PSBkb21haW5sZW4gfHwgKihtYXRjaHN0YXJ0LTEpID09ICcuJyApKQorCSAgeworCSAgICBpZiAoKHNlcnYtPmZsYWdzICYgU0VSVl9OT19SRUJJTkQpICYmIG5vcmViaW5kKQkKKwkgICAgICAqbm9yZWJpbmQgPSAxOworCSAgICBlbHNlCisJICAgICAgeworCQl1bnNpZ25lZCBpbnQgc2ZsYWcgPSBzZXJ2LT5hZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUID8gRl9JUFY0IDogRl9JUFY2OworCQkvKiBpbXBsZW1lbnQgcHJpb3JpdHkgcnVsZXMgZm9yIC0tYWRkcmVzcyBhbmQgLS1zZXJ2ZXIgZm9yIHNhbWUgZG9tYWluLgorCQkgICAtLWFkZHJlc3Mgd2lucyBpZiB0aGUgYWRkcmVzcyBpcyBmb3IgdGhlIGNvcnJlY3QgQUYKKwkJICAgLS1zZXJ2ZXIgd2lucyBvdGhlcndpc2UuICovCisJCWlmIChkb21haW5sZW4gIT0gMCAmJiBkb21haW5sZW4gPT0gbWF0Y2hsZW4pCisJCSAgeworCQkgICAgaWYgKChzZXJ2LT5mbGFncyAmIFNFUlZfTElURVJBTF9BRERSRVNTKSkKKwkJICAgICAgeworCQkJaWYgKCEoc2ZsYWcgJiBxdHlwZSkgJiYgZmxhZ3MgPT0gMCkKKwkJCSAgY29udGludWU7CisJCSAgICAgIH0KKwkJICAgIGVsc2UKKwkJICAgICAgeworCQkJaWYgKGZsYWdzICYgKEZfSVBWNCB8IEZfSVBWNikpCisJCQkgIGNvbnRpbnVlOworCQkgICAgICB9CisJCSAgfQorCQkKKwkJaWYgKGRvbWFpbmxlbiA+PSBtYXRjaGxlbikKKwkJICB7CisJCSAgICAqdHlwZSA9IHNlcnYtPmZsYWdzICYgKFNFUlZfSEFTX0RPTUFJTiB8IFNFUlZfVVNFX1JFU09MViB8IFNFUlZfTk9fUkVCSU5EIHwgU0VSVl9ET19ETlNTRUMpOworCQkgICAgKmRvbWFpbiA9IHNlcnYtPmRvbWFpbjsKKwkJICAgIG1hdGNobGVuID0gZG9tYWlubGVuOworCQkgICAgaWYgKHNlcnYtPmZsYWdzICYgU0VSVl9OT19BRERSKQorCQkgICAgICBmbGFncyA9IEZfTlhET01BSU47CisJCSAgICBlbHNlIGlmIChzZXJ2LT5mbGFncyAmIFNFUlZfTElURVJBTF9BRERSRVNTKQorCQkgICAgICB7CisJCQlpZiAoc2ZsYWcgJiBxdHlwZSkKKwkJCSAgeworCQkJICAgIGZsYWdzID0gc2ZsYWc7CisJCQkgICAgaWYgKHNlcnYtPmFkZHIuc2Euc2FfZmFtaWx5ID09IEFGX0lORVQpIAorCQkJICAgICAgKmFkZHJwcCA9IChzdHJ1Y3QgYWxsX2FkZHIgKikmc2Vydi0+YWRkci5pbi5zaW5fYWRkcjsKKyNpZmRlZiBIQVZFX0lQVjYKKwkJCSAgICBlbHNlCisJCQkgICAgICAqYWRkcnBwID0gKHN0cnVjdCBhbGxfYWRkciAqKSZzZXJ2LT5hZGRyLmluNi5zaW42X2FkZHI7CisjZW5kaWYKKwkJCSAgfQorCQkJZWxzZSBpZiAoIWZsYWdzIHx8IChmbGFncyAmIEZfTlhET01BSU4pKQorCQkJICBmbGFncyA9IEZfTk9FUlI7CisJCSAgICAgIH0KKwkJICAgIGVsc2UKKwkJICAgICAgZmxhZ3MgPSAwOworCQkgIH0gCisJICAgICAgfQorCSAgfQorICAgICAgfQorICAKKyAgaWYgKGZsYWdzID09IDAgJiYgIShxdHlwZSAmIChGX1FVRVJZIHwgRl9ETlNTRUNPSykpICYmIAorICAgICAgb3B0aW9uX2Jvb2woT1BUX05PRE9UU19MT0NBTCkgJiYgIXN0cmNocihxZG9tYWluLCAnLicpICYmIG5hbWVsZW4gIT0gMCkKKyAgICAvKiBkb24ndCBmb3J3YXJkIEEgb3IgQUFBQSBxdWVyaWVzIGZvciBzaW1wbGUgbmFtZXMsIGV4Y2VwdCB0aGUgZW1wdHkgbmFtZSAqLworICAgIGZsYWdzID0gRl9OT0VSUjsKKyAgCisgIGlmIChmbGFncyA9PSBGX05YRE9NQUlOICYmIGNoZWNrX2Zvcl9sb2NhbF9kb21haW4ocWRvbWFpbiwgbm93KSkKKyAgICBmbGFncyA9IEZfTk9FUlI7CisKKyAgaWYgKGZsYWdzKQorICAgIHsKKyAgICAgIGludCBsb2dmbGFncyA9IDA7CisgICAgICAKKyAgICAgIGlmIChmbGFncyA9PSBGX05YRE9NQUlOIHx8IGZsYWdzID09IEZfTk9FUlIpCisJbG9nZmxhZ3MgPSBGX05FRyB8IHF0eXBlOworICAKKyAgICAgIGxvZ19xdWVyeShsb2dmbGFncyB8IGZsYWdzIHwgRl9DT05GSUcgfCBGX0ZPUldBUkQsIHFkb21haW4sICphZGRycHAsIE5VTEwpOworICAgIH0KKyAgZWxzZSBpZiAoKCp0eXBlKSAmIFNFUlZfVVNFX1JFU09MVikKKyAgICB7CisgICAgICAqdHlwZSA9IDA7IC8qIHVzZSBub3JtYWwgc2VydmVycyBmb3IgdGhpcyBkb21haW4gKi8KKyAgICAgICpkb21haW4gPSBOVUxMOworICAgIH0KKyAgcmV0dXJuICBmbGFnczsKK30KKworc3RhdGljIGludCBmb3J3YXJkX3F1ZXJ5KGludCB1ZHBmZCwgdW5pb24gbXlzb2NrYWRkciAqdWRwYWRkciwKKwkJCSBzdHJ1Y3QgYWxsX2FkZHIgKmRzdF9hZGRyLCB1bnNpZ25lZCBpbnQgZHN0X2lmYWNlLAorCQkJIHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIsIHNpemVfdCBwbGVuLCB0aW1lX3Qgbm93LCAKKwkJCSBzdHJ1Y3QgZnJlYyAqZm9yd2FyZCwgaW50IGFkX3JlcWQsIGludCBkb19iaXQpCit7CisgIGNoYXIgKmRvbWFpbiA9IE5VTEw7CisgIGludCB0eXBlID0gU0VSVl9ET19ETlNTRUMsIG5vcmViaW5kID0gMDsKKyAgc3RydWN0IGFsbF9hZGRyICphZGRycCA9IE5VTEw7CisgIHVuc2lnbmVkIGludCBmbGFncyA9IDA7CisgIHN0cnVjdCBzZXJ2ZXIgKnN0YXJ0ID0gTlVMTDsKKyNpZmRlZiBIQVZFX0ROU1NFQworICB2b2lkICpoYXNoID0gaGFzaF9xdWVzdGlvbnMoaGVhZGVyLCBwbGVuLCBkYWVtb24tPm5hbWVidWZmKTsKKyAgaW50IGRvX2Ruc3NlYyA9IDA7CisjZWxzZQorICB1bnNpZ25lZCBpbnQgY3JjID0gcXVlc3Rpb25zX2NyYyhoZWFkZXIsIHBsZW4sIGRhZW1vbi0+bmFtZWJ1ZmYpOworICB2b2lkICpoYXNoID0gJmNyYzsKKyNlbmRpZgorIHVuc2lnbmVkIGludCBnb3RuYW1lID0gZXh0cmFjdF9yZXF1ZXN0KGhlYWRlciwgcGxlbiwgZGFlbW9uLT5uYW1lYnVmZiwgTlVMTCk7CisKKyAodm9pZClkb19iaXQ7CisKKyAgLyogbWF5IGJlIG5vIHNlcnZlcnMgYXZhaWxhYmxlLiAqLworICBpZiAoZm9yd2FyZCB8fCAoaGFzaCAmJiAoZm9yd2FyZCA9IGxvb2t1cF9mcmVjX2J5X3NlbmRlcihudG9ocyhoZWFkZXItPmlkKSwgdWRwYWRkciwgaGFzaCkpKSkKKyAgICB7CisgICAgICAvKiBJZiB3ZSBkaWRuJ3QgZ2V0IGFuIGFuc3dlciBhZHZlcnRpc2luZyBhIG1heGltYWwgcGFja2V0IGluIEVETlMsCisJIGZhbGwgYmFjayB0byAxMjgwLCB3aGljaCBzaG91bGQgd29yayBldmVyeXdoZXJlIG9uIElQdjYuCisJIElmIHRoYXQgZ2VuZXJhdGVzIGFuIGFuc3dlciwgaXQgd2lsbCBiZWNvbWUgdGhlIG5ldyBkZWZhdWx0CisJIGZvciB0aGlzIHNlcnZlciAqLworICAgICAgZm9yd2FyZC0+ZmxhZ3MgfD0gRlJFQ19URVNUX1BLVFNaOworICAgICAgCisjaWZkZWYgSEFWRV9ETlNTRUMKKyAgICAgIC8qIElmIHdlJ3ZlIGFscmVhZHkgZ290IGFuIGFuc3dlciB0byB0aGlzIHF1ZXJ5LCBidXQgd2UncmUgYXdhaXRpbmcga2V5cyBmb3IgdmFsaWRhdGlvbiwKKwkgdGhlcmUncyBubyBwb2ludCByZXRyeWluZyB0aGUgcXVlcnksIHJldHJ5IHRoZSBrZXkgcXVlcnkgaW5zdGVhZC4uLi4uLiAqLworICAgICAgaWYgKGZvcndhcmQtPmJsb2NraW5nX3F1ZXJ5KQorCXsKKwkgIGludCBmZCwgaXNfc2lnbjsKKwkgIHVuc2lnbmVkIGNoYXIgKnBoZWFkZXI7CisJICAKKwkgIGZvcndhcmQtPmZsYWdzICY9IH5GUkVDX1RFU1RfUEtUU1o7CisJICAKKwkgIHdoaWxlIChmb3J3YXJkLT5ibG9ja2luZ19xdWVyeSkKKwkgICAgZm9yd2FyZCA9IGZvcndhcmQtPmJsb2NraW5nX3F1ZXJ5OworCSAgIAorCSAgZm9yd2FyZC0+ZmxhZ3MgfD0gRlJFQ19URVNUX1BLVFNaOworCSAgCisJICBibG9ja2RhdGFfcmV0cmlldmUoZm9yd2FyZC0+c3Rhc2gsIGZvcndhcmQtPnN0YXNoX2xlbiwgKHZvaWQgKiloZWFkZXIpOworCSAgcGxlbiA9IGZvcndhcmQtPnN0YXNoX2xlbjsKKwkgIAorCSAgaWYgKGZpbmRfcHNldWRvaGVhZGVyKGhlYWRlciwgcGxlbiwgTlVMTCwgJnBoZWFkZXIsICZpc19zaWduLCBOVUxMKSAmJiAhaXNfc2lnbikKKwkgICAgUFVUU0hPUlQoU0FGRV9QS1RTWiwgcGhlYWRlcik7CisKKwkgIGlmIChmb3J3YXJkLT5zZW50dG8tPmFkZHIuc2Euc2FfZmFtaWx5ID09IEFGX0lORVQpIAorCSAgICBsb2dfcXVlcnkoRl9OT0VYVFJBIHwgRl9ETlNTRUMgfCBGX0lQVjQsICJyZXRyeSIsIChzdHJ1Y3QgYWxsX2FkZHIgKikmZm9yd2FyZC0+c2VudHRvLT5hZGRyLmluLnNpbl9hZGRyLCAiZG5zc2VjIik7CisjaWZkZWYgSEFWRV9JUFY2CisJICBlbHNlCisJICAgIGxvZ19xdWVyeShGX05PRVhUUkEgfCBGX0ROU1NFQyB8IEZfSVBWNiwgInJldHJ5IiwgKHN0cnVjdCBhbGxfYWRkciAqKSZmb3J3YXJkLT5zZW50dG8tPmFkZHIuaW42LnNpbjZfYWRkciwgImRuc3NlYyIpOworI2VuZGlmCisgIAorCSAgaWYgKGZvcndhcmQtPnNlbnR0by0+c2ZkKQorCSAgICBmZCA9IGZvcndhcmQtPnNlbnR0by0+c2ZkLT5mZDsKKwkgIGVsc2UKKwkgICAgeworI2lmZGVmIEhBVkVfSVBWNgorCSAgICAgIGlmIChmb3J3YXJkLT5zZW50dG8tPmFkZHIuc2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KQorCQlmZCA9IGZvcndhcmQtPnJmZDYtPmZkOworCSAgICAgIGVsc2UKKyNlbmRpZgorCQlmZCA9IGZvcndhcmQtPnJmZDQtPmZkOworCSAgICB9CisJICAKKwkgIHdoaWxlIChyZXRyeV9zZW5kKCBzZW5kdG8oZmQsIChjaGFyICopaGVhZGVyLCBwbGVuLCAwLAorCQkJCSAgICAmZm9yd2FyZC0+c2VudHRvLT5hZGRyLnNhLAorCQkJCSAgICBzYV9sZW4oJmZvcndhcmQtPnNlbnR0by0+YWRkcikpKSk7CisJICAKKwkgIHJldHVybiAxOworCX0KKyNlbmRpZgorCisgICAgICAvKiByZXRyeSBvbiBleGlzdGluZyBxdWVyeSwgc2VuZCB0byBhbGwgYXZhaWxhYmxlIHNlcnZlcnMgICovCisgICAgICBkb21haW4gPSBmb3J3YXJkLT5zZW50dG8tPmRvbWFpbjsKKyAgICAgIGZvcndhcmQtPnNlbnR0by0+ZmFpbGVkX3F1ZXJpZXMrKzsKKyAgICAgIGlmICghb3B0aW9uX2Jvb2woT1BUX09SREVSKSkKKwl7CisJICBmb3J3YXJkLT5mb3J3YXJkYWxsID0gMTsKKwkgIGRhZW1vbi0+bGFzdF9zZXJ2ZXIgPSBOVUxMOworCX0KKyAgICAgIHR5cGUgPSBmb3J3YXJkLT5zZW50dG8tPmZsYWdzICYgU0VSVl9UWVBFOworI2lmZGVmIEhBVkVfRE5TU0VDCisgICAgICBkb19kbnNzZWMgPSBmb3J3YXJkLT5zZW50dG8tPmZsYWdzICYgU0VSVl9ET19ETlNTRUM7CisjZW5kaWYKKworICAgICAgaWYgKCEoc3RhcnQgPSBmb3J3YXJkLT5zZW50dG8tPm5leHQpKQorCXN0YXJ0ID0gZGFlbW9uLT5zZXJ2ZXJzOyAvKiBhdCBlbmQgb2YgbGlzdCwgcmVjeWNsZSAqLworICAgICAgaGVhZGVyLT5pZCA9IGh0b25zKGZvcndhcmQtPm5ld19pZCk7CisgICAgfQorICBlbHNlIAorICAgIHsKKyAgICAgIGlmIChnb3RuYW1lKQorCWZsYWdzID0gc2VhcmNoX3NlcnZlcnMobm93LCAmYWRkcnAsIGdvdG5hbWUsIGRhZW1vbi0+bmFtZWJ1ZmYsICZ0eXBlLCAmZG9tYWluLCAmbm9yZWJpbmQpOworICAgICAgCisjaWZkZWYgSEFWRV9ETlNTRUMKKyAgICAgIGRvX2Ruc3NlYyA9IHR5cGUgJiBTRVJWX0RPX0ROU1NFQzsKKyNlbmRpZgorICAgICAgdHlwZSAmPSB+U0VSVl9ET19ETlNTRUM7ICAgICAgCisKKyAgICAgIGlmIChkYWVtb24tPnNlcnZlcnMgJiYgIWZsYWdzKQorCWZvcndhcmQgPSBnZXRfbmV3X2ZyZWMobm93LCBOVUxMLCAwKTsKKyAgICAgIC8qIHRhYmxlIGZ1bGwgLSBmbGFncyA9PSAwLCByZXR1cm4gUkVGVVNFRCAqLworICAgICAgCisgICAgICBpZiAoZm9yd2FyZCkKKwl7CisJICBmb3J3YXJkLT5zb3VyY2UgPSAqdWRwYWRkcjsKKwkgIGZvcndhcmQtPmRlc3QgPSAqZHN0X2FkZHI7CisJICBmb3J3YXJkLT5pZmFjZSA9IGRzdF9pZmFjZTsKKwkgIGZvcndhcmQtPm9yaWdfaWQgPSBudG9ocyhoZWFkZXItPmlkKTsKKwkgIGZvcndhcmQtPm5ld19pZCA9IGdldF9pZCgpOworCSAgZm9yd2FyZC0+ZmQgPSB1ZHBmZDsKKwkgIG1lbWNweShmb3J3YXJkLT5oYXNoLCBoYXNoLCBIQVNIX1NJWkUpOworCSAgZm9yd2FyZC0+Zm9yd2FyZGFsbCA9IDA7CisJICBmb3J3YXJkLT5mbGFncyA9IDA7CisJICBpZiAobm9yZWJpbmQpCisJICAgIGZvcndhcmQtPmZsYWdzIHw9IEZSRUNfTk9SRUJJTkQ7CisJICBpZiAoaGVhZGVyLT5oYjQgJiBIQjRfQ0QpCisJICAgIGZvcndhcmQtPmZsYWdzIHw9IEZSRUNfQ0hFQ0tJTkdfRElTQUJMRUQ7CisJICBpZiAoYWRfcmVxZCkKKwkgICAgZm9yd2FyZC0+ZmxhZ3MgfD0gRlJFQ19BRF9RVUVTVElPTjsKKyNpZmRlZiBIQVZFX0ROU1NFQworCSAgZm9yd2FyZC0+d29ya19jb3VudGVyID0gRE5TU0VDX1dPUks7CisJICBpZiAoZG9fYml0KQorCSAgICBmb3J3YXJkLT5mbGFncyB8PSBGUkVDX0RPX1FVRVNUSU9OOworI2VuZGlmCisJICAKKwkgIGhlYWRlci0+aWQgPSBodG9ucyhmb3J3YXJkLT5uZXdfaWQpOworCSAgCisJICAvKiBJbiBzdHJpY3Rfb3JkZXIgbW9kZSwgYWx3YXlzIHRyeSBzZXJ2ZXJzIGluIHRoZSBvcmRlciAKKwkgICAgIHNwZWNpZmllZCBpbiByZXNvbHYuY29uZiwgaWYgYSBkb21haW4gaXMgZ2l2ZW4gCisJICAgICBhbHdheXMgdHJ5IGFsbCB0aGUgYXZhaWxhYmxlIHNlcnZlcnMsCisJICAgICBvdGhlcndpc2UsIHVzZSB0aGUgb25lIGxhc3Qga25vd24gdG8gd29yay4gKi8KKwkgIAorCSAgaWYgKHR5cGUgPT0gMCkKKwkgICAgeworCSAgICAgIGlmIChvcHRpb25fYm9vbChPUFRfT1JERVIpKQorCQlzdGFydCA9IGRhZW1vbi0+c2VydmVyczsKKwkgICAgICBlbHNlIGlmICghKHN0YXJ0ID0gZGFlbW9uLT5sYXN0X3NlcnZlcikgfHwKKwkJICAgICAgIGRhZW1vbi0+Zm9yd2FyZGNvdW50KysgPiBGT1JXQVJEX1RFU1QgfHwKKwkJICAgICAgIGRpZmZ0aW1lKG5vdywgZGFlbW9uLT5mb3J3YXJkdGltZSkgPiBGT1JXQVJEX1RJTUUpCisJCXsKKwkJICBzdGFydCA9IGRhZW1vbi0+c2VydmVyczsKKwkJICBmb3J3YXJkLT5mb3J3YXJkYWxsID0gMTsKKwkJICBkYWVtb24tPmZvcndhcmRjb3VudCA9IDA7CisJCSAgZGFlbW9uLT5mb3J3YXJkdGltZSA9IG5vdzsKKwkJfQorCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBzdGFydCA9IGRhZW1vbi0+c2VydmVyczsKKwkgICAgICBpZiAoIW9wdGlvbl9ib29sKE9QVF9PUkRFUikpCisJCWZvcndhcmQtPmZvcndhcmRhbGwgPSAxOworCSAgICB9CisJfQorICAgIH0KKworICAvKiBjaGVjayBmb3Igc2VuZCBlcnJvcnMgaGVyZSAobm8gcm91dGUgdG8gaG9zdCkgCisgICAgIGlmIHdlIGZhaWwgdG8gc2VuZCB0byBhbGwgbmFtZXNlcnZlcnMsIHNlbmQgYmFjayBhbiBlcnJvcgorICAgICBwYWNrZXQgc3RyYWlnaHQgYXdheSAoaGVscHMgbW9kZW0gdXNlcnMgd2hlbiBvZmZsaW5lKSAgKi8KKyAgCisgIGlmICghZmxhZ3MgJiYgZm9yd2FyZCkKKyAgICB7CisgICAgICBzdHJ1Y3Qgc2VydmVyICpmaXJzdHNlbnR0byA9IHN0YXJ0OworICAgICAgaW50IHN1Ym5ldCwgZm9yd2FyZGVkID0gMDsKKyAgICAgIHNpemVfdCBlZG5zMF9sZW47CisKKyAgICAgIC8qIElmIGEgcXVlcnkgaXMgcmV0cmllZCwgdXNlIHRoZSBsb2dfaWQgZm9yIHRoZSByZXRyeSB3aGVuIGxvZ2dpbmcgdGhlIGFuc3dlci4gKi8KKyAgICAgIGZvcndhcmQtPmxvZ19pZCA9IGRhZW1vbi0+bG9nX2lkOworICAgICAgCisgICAgICBlZG5zMF9sZW4gID0gYWRkX2VkbnMwX2NvbmZpZyhoZWFkZXIsIHBsZW4sICgodW5zaWduZWQgY2hhciAqKWhlYWRlcikgKyBQQUNLRVRTWiwgJmZvcndhcmQtPnNvdXJjZSwgbm93LCAmc3VibmV0KTsKKyAgICAgIAorICAgICAgaWYgKGVkbnMwX2xlbiAhPSBwbGVuKQorCXsKKwkgIHBsZW4gPSBlZG5zMF9sZW47CisJICBmb3J3YXJkLT5mbGFncyB8PSBGUkVDX0FEREVEX1BIRUFERVI7CisJICAKKwkgIGlmIChzdWJuZXQpCisJICAgIGZvcndhcmQtPmZsYWdzIHw9IEZSRUNfSEFTX1NVQk5FVDsKKwl9CisgICAgICAKKyNpZmRlZiBIQVZFX0ROU1NFQworICAgICAgaWYgKG9wdGlvbl9ib29sKE9QVF9ETlNTRUNfVkFMSUQpICYmIGRvX2Ruc3NlYykKKwl7CisJICBzaXplX3QgbmV3ID0gYWRkX2RvX2JpdChoZWFkZXIsIHBsZW4sICgodW5zaWduZWQgY2hhciAqKSBoZWFkZXIpICsgUEFDS0VUU1opOworCSAKKwkgIGlmIChuZXcgIT0gcGxlbikKKwkgICAgZm9yd2FyZC0+ZmxhZ3MgfD0gRlJFQ19BRERFRF9QSEVBREVSOworCisJICBwbGVuID0gbmV3OworCSAgICAgIAorCSAgLyogRm9yIGRlYnVnZ2luZywgc2V0IENoZWNraW5nIERpc2FibGVkLCBvdGhlcndpc2UsIGhhdmUgdGhlIHVwc3RyZWFtIGNoZWNrIHRvbywKKwkgICAgIHRoaXMgYWxsb3dzIGl0IHRvIHNlbGVjdCBhdXRoIHNlcnZlcnMgd2hlbiBvbmUgaXMgcmV0dXJuaW5nIGJhZCBkYXRhLiAqLworCSAgaWYgKG9wdGlvbl9ib29sKE9QVF9ETlNTRUNfREVCVUcpKQorCSAgICBoZWFkZXItPmhiNCB8PSBIQjRfQ0Q7CisKKwl9CisjZW5kaWYKKworICAgICAgLyogSWYgd2UncmUgc2VuZGluZyBhbiBFRE5TMCB3aXRoIGFueSBvcHRpb25zLCB3ZSBjYW4ndCByZWNyZWF0ZSB0aGUgcXVlcnkgZnJvbSBhIHJlcGx5LiAqLworICAgICAgaWYgKGZpbmRfcHNldWRvaGVhZGVyKGhlYWRlciwgcGxlbiwgJmVkbnMwX2xlbiwgTlVMTCwgTlVMTCwgTlVMTCkgJiYgZWRuczBfbGVuID4gMTEpCisJZm9yd2FyZC0+ZmxhZ3MgfD0gRlJFQ19IQVNfRVhUUkFEQVRBOworICAgICAgCisgICAgICB3aGlsZSAoMSkKKwl7IAorCSAgLyogb25seSBzZW5kIHRvIHNlcnZlcnMgZGVhbGluZyB3aXRoIG91ciBkb21haW4uCisJICAgICBkb21haW4gbWF5IGJlIE5VTEwsIGluIHdoaWNoIGNhc2Ugc2VydmVyLT5kb21haW4gCisJICAgICBtdXN0IGJlIE5VTEwgYWxzby4gKi8KKwkgIAorCSAgaWYgKHR5cGUgPT0gKHN0YXJ0LT5mbGFncyAmIFNFUlZfVFlQRSkgJiYKKwkgICAgICAodHlwZSAhPSBTRVJWX0hBU19ET01BSU4gfHwgaG9zdG5hbWVfaXNlcXVhbChkb21haW4sIHN0YXJ0LT5kb21haW4pKSAmJgorCSAgICAgICEoc3RhcnQtPmZsYWdzICYgKFNFUlZfTElURVJBTF9BRERSRVNTIHwgU0VSVl9MT09QKSkpCisJICAgIHsKKwkgICAgICBpbnQgZmQ7CisKKwkgICAgICAvKiBmaW5kIHNlcnZlciBzb2NrZXQgdG8gdXNlLCBtYXkgbmVlZCB0byBnZXQgcmFuZG9tIG9uZS4gKi8KKwkgICAgICBpZiAoc3RhcnQtPnNmZCkKKwkJZmQgPSBzdGFydC0+c2ZkLT5mZDsKKwkgICAgICBlbHNlIAorCQl7CisjaWZkZWYgSEFWRV9JUFY2CisJCSAgaWYgKHN0YXJ0LT5hZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikKKwkJICAgIHsKKwkJICAgICAgaWYgKCFmb3J3YXJkLT5yZmQ2ICYmCisJCQkgICEoZm9yd2FyZC0+cmZkNiA9IGFsbG9jYXRlX3JmZChBRl9JTkVUNikpKQorCQkJYnJlYWs7CisJCSAgICAgIGRhZW1vbi0+cmZkX3NhdmUgPSBmb3J3YXJkLT5yZmQ2OworCQkgICAgICBmZCA9IGZvcndhcmQtPnJmZDYtPmZkOworCQkgICAgfQorCQkgIGVsc2UKKyNlbmRpZgorCQkgICAgeworCQkgICAgICBpZiAoIWZvcndhcmQtPnJmZDQgJiYKKwkJCSAgIShmb3J3YXJkLT5yZmQ0ID0gYWxsb2NhdGVfcmZkKEFGX0lORVQpKSkKKwkJCWJyZWFrOworCQkgICAgICBkYWVtb24tPnJmZF9zYXZlID0gZm9yd2FyZC0+cmZkNDsKKwkJICAgICAgZmQgPSBmb3J3YXJkLT5yZmQ0LT5mZDsKKwkJICAgIH0KKworI2lmZGVmIEhBVkVfQ09OTlRSQUNLCisJCSAgLyogQ29weSBjb25uZWN0aW9uIG1hcmsgb2YgaW5jb21pbmcgcXVlcnkgdG8gb3V0Z29pbmcgY29ubmVjdGlvbi4gKi8KKwkJICBpZiAob3B0aW9uX2Jvb2woT1BUX0NPTk5UUkFDSykpCisJCSAgICB7CisJCSAgICAgIHVuc2lnbmVkIGludCBtYXJrOworCQkgICAgICBpZiAoZ2V0X2luY29taW5nX21hcmsoJmZvcndhcmQtPnNvdXJjZSwgJmZvcndhcmQtPmRlc3QsIDAsICZtYXJrKSkKKwkJCXNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX01BUkssICZtYXJrLCBzaXplb2YodW5zaWduZWQgaW50KSk7CisJCSAgICB9CisjZW5kaWYKKwkJfQorCSAgICAgIAorI2lmZGVmIEhBVkVfRE5TU0VDCisJICAgICAgaWYgKG9wdGlvbl9ib29sKE9QVF9ETlNTRUNfVkFMSUQpICYmIChmb3J3YXJkLT5mbGFncyAmIEZSRUNfQURERURfUEhFQURFUikpCisJCXsKKwkJICAvKiBEaWZmaWN1bHQgb25lIGhlcmUuIElmIG91ciBjbGllbnQgZGlkbid0IHNlbmQgRUROUzAsIHdlIHdpbGwgaGF2ZSBzZXQgdGhlIFVEUAorCQkgICAgIHBhY2tldCBzaXplIHRvIDUxMi4gQnV0IHRoYXQgd29uJ3QgcHJvdmlkZSBzcGFjZSBmb3IgdGhlIFJSU0lHUyBpbiBtYW55IGNhc2VzLgorCQkgICAgIFRoZSBSUlNJR1Mgd2lsbCBiZSBzdHJpcHBlZCBvdXQgYmVmb3JlIHRoZSBhbnN3ZXIgZ29lcyBiYWNrLCBzbyB0aGUgcGFja2V0IHNob3VsZAorCQkgICAgIHNocmluayBhZ2Fpbi4gU28sIGlmIHdlIGFkZGVkIGEgZG8tYml0LCBidW1wIHRoZSB1ZHAgcGFja2V0IHNpemUgdG8gdGhlIHZhbHVlCisJCSAgICAga25vd24gdG8gYmUgT0sgZm9yIHRoaXMgc2VydmVyLiBXZSBjaGVjayByZXR1cm5lZCBzaXplIGFmdGVyIHN0cmlwcGluZyBhbmQgc2V0CisJCSAgICAgdGhlIHRydW5jYXRlZCBiaXQgaWYgaXQncyBzdGlsbCB0b28gYmlnLiAqLwkJICAKKwkJICB1bnNpZ25lZCBjaGFyICpwaGVhZGVyOworCQkgIGludCBpc19zaWduOworCQkgIGlmIChmaW5kX3BzZXVkb2hlYWRlcihoZWFkZXIsIHBsZW4sIE5VTEwsICZwaGVhZGVyLCAmaXNfc2lnbiwgTlVMTCkgJiYgIWlzX3NpZ24pCisJCSAgICBQVVRTSE9SVChzdGFydC0+ZWRuc19wa3RzeiwgcGhlYWRlcik7CisJCX0KKyNlbmRpZgorCisJICAgICAgaWYgKHJldHJ5X3NlbmQoc2VuZHRvKGZkLCAoY2hhciAqKWhlYWRlciwgcGxlbiwgMCwKKwkJCQkgICAgJnN0YXJ0LT5hZGRyLnNhLAorCQkJCSAgICBzYV9sZW4oJnN0YXJ0LT5hZGRyKSkpKQorCQljb250aW51ZTsKKwkgICAgCisJICAgICAgaWYgKGVycm5vID09IDApCisJCXsKKwkJICAvKiBLZWVwIGluZm8gaW4gY2FzZSB3ZSB3YW50IHRvIHJlLXNlbmQgdGhpcyBwYWNrZXQgKi8KKwkJICBkYWVtb24tPnNydl9zYXZlID0gc3RhcnQ7CisJCSAgZGFlbW9uLT5wYWNrZXRfbGVuID0gcGxlbjsKKwkJICAKKwkJICBpZiAoIWdvdG5hbWUpCisJCSAgICBzdHJjcHkoZGFlbW9uLT5uYW1lYnVmZiwgInF1ZXJ5Iik7CisJCSAgaWYgKHN0YXJ0LT5hZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKQorCQkgICAgbG9nX3F1ZXJ5KEZfU0VSVkVSIHwgRl9JUFY0IHwgRl9GT1JXQVJELCBkYWVtb24tPm5hbWVidWZmLCAKKwkJCSAgICAgIChzdHJ1Y3QgYWxsX2FkZHIgKikmc3RhcnQtPmFkZHIuaW4uc2luX2FkZHIsIE5VTEwpOyAKKyNpZmRlZiBIQVZFX0lQVjYKKwkJICBlbHNlCisJCSAgICBsb2dfcXVlcnkoRl9TRVJWRVIgfCBGX0lQVjYgfCBGX0ZPUldBUkQsIGRhZW1vbi0+bmFtZWJ1ZmYsIAorCQkJICAgICAgKHN0cnVjdCBhbGxfYWRkciAqKSZzdGFydC0+YWRkci5pbjYuc2luNl9hZGRyLCBOVUxMKTsKKyNlbmRpZiAKKwkJICBzdGFydC0+cXVlcmllcysrOworCQkgIGZvcndhcmRlZCA9IDE7CisJCSAgZm9yd2FyZC0+c2VudHRvID0gc3RhcnQ7CisJCSAgaWYgKCFmb3J3YXJkLT5mb3J3YXJkYWxsKSAKKwkJICAgIGJyZWFrOworCQkgIGZvcndhcmQtPmZvcndhcmRhbGwrKzsKKwkJfQorCSAgICB9IAorCSAgCisJICBpZiAoIShzdGFydCA9IHN0YXJ0LT5uZXh0KSkKKyAJICAgIHN0YXJ0ID0gZGFlbW9uLT5zZXJ2ZXJzOworCSAgCisJICBpZiAoc3RhcnQgPT0gZmlyc3RzZW50dG8pCisJICAgIGJyZWFrOworCX0KKyAgICAgIAorICAgICAgaWYgKGZvcndhcmRlZCkKKwlyZXR1cm4gMTsKKyAgICAgIAorICAgICAgLyogY291bGQgbm90IHNlbmQgb24sIHByZXBhcmUgdG8gcmV0dXJuICovIAorICAgICAgaGVhZGVyLT5pZCA9IGh0b25zKGZvcndhcmQtPm9yaWdfaWQpOworICAgICAgZnJlZV9mcmVjKGZvcndhcmQpOyAvKiBjYW5jZWwgKi8KKyAgICB9CSAgCisgIAorICAvKiBjb3VsZCBub3Qgc2VuZCBvbiwgcmV0dXJuIGVtcHR5IGFuc3dlciBvciBhZGRyZXNzIGlmIGtub3duIGZvciB3aG9sZSBkb21haW4gKi8KKyAgaWYgKHVkcGZkICE9IC0xKQorICAgIHsKKyAgICAgIHBsZW4gPSBzZXR1cF9yZXBseShoZWFkZXIsIHBsZW4sIGFkZHJwLCBmbGFncywgZGFlbW9uLT5sb2NhbF90dGwpOworICAgICAgc2VuZF9mcm9tKHVkcGZkLCBvcHRpb25fYm9vbChPUFRfTk9XSUxEKSB8fCBvcHRpb25fYm9vbChPUFRfQ0xFVkVSQklORCksIChjaGFyICopaGVhZGVyLCBwbGVuLCB1ZHBhZGRyLCBkc3RfYWRkciwgZHN0X2lmYWNlKTsKKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzaXplX3QgcHJvY2Vzc19yZXBseShzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCB0aW1lX3Qgbm93LCBzdHJ1Y3Qgc2VydmVyICpzZXJ2ZXIsIHNpemVfdCBuLCBpbnQgY2hlY2tfcmViaW5kLCAKKwkJCSAgICBpbnQgbm9fY2FjaGUsIGludCBjYWNoZV9zZWN1cmUsIGludCBib2d1c2Fuc3dlciwgaW50IGFkX3JlcWQsIGludCBkb19iaXQsIGludCBhZGRlZF9waGVhZGVyLCAKKwkJCSAgICBpbnQgY2hlY2tfc3VibmV0LCB1bmlvbiBteXNvY2thZGRyICpxdWVyeV9zb3VyY2UpCit7CisgIHVuc2lnbmVkIGNoYXIgKnBoZWFkZXIsICpzaXplcDsKKyAgY2hhciAqKnNldHMgPSAwOworICBpbnQgbXVuZ2VkID0gMCwgaXNfc2lnbjsKKyAgc2l6ZV90IHBsZW47IAorCisgICh2b2lkKWFkX3JlcWQ7CisgICh2b2lkKWRvX2JpdDsKKyAgKHZvaWQpYm9ndXNhbnN3ZXI7CisKKyNpZmRlZiBIQVZFX0lQU0VUCisgIGlmIChkYWVtb24tPmlwc2V0cyAmJiBleHRyYWN0X3JlcXVlc3QoaGVhZGVyLCBuLCBkYWVtb24tPm5hbWVidWZmLCBOVUxMKSkKKyAgICB7CisgICAgICAvKiBTaW1pbGFyIGFsZ29yaXRobSB0byBzZWFyY2hfc2VydmVycy4gKi8KKyAgICAgIHN0cnVjdCBpcHNldHMgKmlwc2V0X3BvczsKKyAgICAgIHVuc2lnbmVkIGludCBuYW1lbGVuID0gc3RybGVuKGRhZW1vbi0+bmFtZWJ1ZmYpOworICAgICAgdW5zaWduZWQgaW50IG1hdGNobGVuID0gMDsKKyAgICAgIGZvciAoaXBzZXRfcG9zID0gZGFlbW9uLT5pcHNldHM7IGlwc2V0X3BvczsgaXBzZXRfcG9zID0gaXBzZXRfcG9zLT5uZXh0KSAKKwl7CisJICB1bnNpZ25lZCBpbnQgZG9tYWlubGVuID0gc3RybGVuKGlwc2V0X3Bvcy0+ZG9tYWluKTsKKwkgIGNoYXIgKm1hdGNoc3RhcnQgPSBkYWVtb24tPm5hbWVidWZmICsgbmFtZWxlbiAtIGRvbWFpbmxlbjsKKwkgIGlmIChuYW1lbGVuID49IGRvbWFpbmxlbiAmJiBob3N0bmFtZV9pc2VxdWFsKG1hdGNoc3RhcnQsIGlwc2V0X3Bvcy0+ZG9tYWluKSAmJgorCSAgICAgIChkb21haW5sZW4gPT0gMCB8fCBuYW1lbGVuID09IGRvbWFpbmxlbiB8fCAqKG1hdGNoc3RhcnQgLSAxKSA9PSAnLicgKSAmJgorCSAgICAgIGRvbWFpbmxlbiA+PSBtYXRjaGxlbikgCisJICAgIHsKKwkgICAgICBtYXRjaGxlbiA9IGRvbWFpbmxlbjsKKwkgICAgICBzZXRzID0gaXBzZXRfcG9zLT5zZXRzOworCSAgICB9CisJfQorICAgIH0KKyNlbmRpZgorICAKKyAgaWYgKChwaGVhZGVyID0gZmluZF9wc2V1ZG9oZWFkZXIoaGVhZGVyLCBuLCAmcGxlbiwgJnNpemVwLCAmaXNfc2lnbiwgTlVMTCkpKQorICAgIHsKKyAgICAgIGlmIChjaGVja19zdWJuZXQgJiYgIWNoZWNrX3NvdXJjZShoZWFkZXIsIHBsZW4sIHBoZWFkZXIsIHF1ZXJ5X3NvdXJjZSkpCisJeworCSAgbXlfc3lzbG9nKExPR19XQVJOSU5HLCBfKCJkaXNjYXJkaW5nIEROUyByZXBseTogc3VibmV0IG9wdGlvbiBtaXNtYXRjaCIpKTsKKwkgIHJldHVybiAwOworCX0KKyAgICAgIAorICAgICAgaWYgKCFpc19zaWduKQorCXsKKwkgIGlmIChhZGRlZF9waGVhZGVyKQorCSAgICB7CisJICAgICAgLyogY2xpZW50IGRpZG4ndCBzZW5kIEVETlMwLCB3ZSBhZGRlZCBvbmUsIHN0cmlwIGl0IG9mZiBiZWZvcmUgcmV0dXJuaW5nIGFuc3dlci4gKi8KKwkgICAgICBuID0gcnJmaWx0ZXIoaGVhZGVyLCBuLCAwKTsKKwkgICAgICBwaGVhZGVyID0gTlVMTDsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgdW5zaWduZWQgc2hvcnQgdWRwc3o7CisKKwkgICAgICAvKiBJZiB1cHN0cmVhbSBpcyBhZHZlcnRpc2luZyBhIGxhcmdlciBVRFAgcGFja2V0IHNpemUKKwkJIHRoYW4gd2UgYWxsb3csIHRyaW0gaXQgc28gdGhhdCB3ZSBkb24ndCBnZXQgb3ZlcmxhcmdlCisJCSByZXF1ZXN0cyBmb3IgdGhlIGNsaWVudC4gV2UgY2FuJ3QgZG8gdGhpcyBmb3Igc2lnbmVkIHBhY2tldHMuICovCisJICAgICAgR0VUU0hPUlQodWRwc3osIHNpemVwKTsKKwkgICAgICBpZiAodWRwc3ogPiBkYWVtb24tPmVkbnNfcGt0c3opCisJCXsKKwkJICBzaXplcCAtPSAyOworCQkgIFBVVFNIT1JUKGRhZW1vbi0+ZWRuc19wa3Rzeiwgc2l6ZXApOworCQl9CisKKyNpZmRlZiBIQVZFX0ROU1NFQworCSAgICAgIC8qIElmIHRoZSBjbGllbnQgZGlkbid0IHNldCB0aGUgZG8gYml0LCBidXQgd2UgZGlkLCByZXNldCBpdC4gKi8KKwkgICAgICBpZiAob3B0aW9uX2Jvb2woT1BUX0ROU1NFQ19WQUxJRCkgJiYgIWRvX2JpdCkKKwkJeworCQkgIHVuc2lnbmVkIHNob3J0IGZsYWdzOworCQkgIHNpemVwICs9IDI7IC8qIHNraXAgUkNPREUgKi8KKwkJICBHRVRTSE9SVChmbGFncywgc2l6ZXApOworCQkgIGZsYWdzICY9IH4weDgwMDA7CisJCSAgc2l6ZXAgLT0gMjsKKwkJICBQVVRTSE9SVChmbGFncywgc2l6ZXApOworCQl9CisjZW5kaWYKKwkgICAgfQorCX0KKyAgICB9CisgIAorICAvKiBSRkMgNDAzNSBzZWN0IDQuNiBwYXJhIDMgKi8KKyAgaWYgKCFpc19zaWduICYmICFvcHRpb25fYm9vbChPUFRfRE5TU0VDX1BST1hZKSkKKyAgICAgaGVhZGVyLT5oYjQgJj0gfkhCNF9BRDsKKyAgCisgIGlmIChPUENPREUoaGVhZGVyKSAhPSBRVUVSWSB8fCAoUkNPREUoaGVhZGVyKSAhPSBOT0VSUk9SICYmIFJDT0RFKGhlYWRlcikgIT0gTlhET01BSU4pKQorICAgIHJldHVybiByZXNpemVfcGFja2V0KGhlYWRlciwgbiwgcGhlYWRlciwgcGxlbik7CisgIAorICAvKiBDb21wbGFpbiBsb3VkbHkgaWYgdGhlIHVwc3RyZWFtIHNlcnZlciBpcyBub24tcmVjdXJzaXZlLiAqLworICBpZiAoIShoZWFkZXItPmhiNCAmIEhCNF9SQSkgJiYgUkNPREUoaGVhZGVyKSA9PSBOT0VSUk9SICYmCisgICAgICBzZXJ2ZXIgJiYgIShzZXJ2ZXItPmZsYWdzICYgU0VSVl9XQVJORURfUkVDVVJTSVZFKSkKKyAgICB7CisgICAgICBwcmV0dHlwcmludF9hZGRyKCZzZXJ2ZXItPmFkZHIsIGRhZW1vbi0+bmFtZWJ1ZmYpOworICAgICAgbXlfc3lzbG9nKExPR19XQVJOSU5HLCBfKCJuYW1lc2VydmVyICVzIHJlZnVzZWQgdG8gZG8gYSByZWN1cnNpdmUgcXVlcnkiKSwgZGFlbW9uLT5uYW1lYnVmZik7CisgICAgICBpZiAoIW9wdGlvbl9ib29sKE9QVF9MT0cpKQorCXNlcnZlci0+ZmxhZ3MgfD0gU0VSVl9XQVJORURfUkVDVVJTSVZFOworICAgIH0gIAorCisgIGlmIChkYWVtb24tPmJvZ3VzX2FkZHIgJiYgUkNPREUoaGVhZGVyKSAhPSBOWERPTUFJTiAmJgorICAgICAgY2hlY2tfZm9yX2JvZ3VzX3dpbGRjYXJkKGhlYWRlciwgbiwgZGFlbW9uLT5uYW1lYnVmZiwgZGFlbW9uLT5ib2d1c19hZGRyLCBub3cpKQorICAgIHsKKyAgICAgIG11bmdlZCA9IDE7CisgICAgICBTRVRfUkNPREUoaGVhZGVyLCBOWERPTUFJTik7CisgICAgICBoZWFkZXItPmhiMyAmPSB+SEIzX0FBOworICAgICAgY2FjaGVfc2VjdXJlID0gMDsKKyAgICB9CisgIGVsc2UgCisgICAgeworICAgICAgaW50IGRvY3RvcmVkID0gMDsKKyAgICAgIAorICAgICAgaWYgKFJDT0RFKGhlYWRlcikgPT0gTlhET01BSU4gJiYgCisJICBleHRyYWN0X3JlcXVlc3QoaGVhZGVyLCBuLCBkYWVtb24tPm5hbWVidWZmLCBOVUxMKSAmJgorCSAgY2hlY2tfZm9yX2xvY2FsX2RvbWFpbihkYWVtb24tPm5hbWVidWZmLCBub3cpKQorCXsKKwkgIC8qIGlmIHdlIGZvcndhcmRlZCBhIHF1ZXJ5IGZvciBhIGxvY2FsbHkga25vd24gbmFtZSAoYmVjYXVzZSBpdCB3YXMgZm9yIAorCSAgICAgYW4gdW5rbm93biB0eXBlKSBhbmQgdGhlIGFuc3dlciBpcyBOWERPTUFJTiwgY29udmVydCB0aGF0IHRvIE5PREFUQSwKKwkgICAgIHNpbmNlIHdlIGtub3cgdGhhdCB0aGUgZG9tYWluIGV4aXN0cywgZXZlbiBpZiB1cHN0cmVhbSBkb2Vzbid0ICovCisJICBtdW5nZWQgPSAxOworCSAgaGVhZGVyLT5oYjMgfD0gSEIzX0FBOworCSAgU0VUX1JDT0RFKGhlYWRlciwgTk9FUlJPUik7CisJICBjYWNoZV9zZWN1cmUgPSAwOworCX0KKyAgICAgIAorICAgICAgaWYgKGV4dHJhY3RfYWRkcmVzc2VzKGhlYWRlciwgbiwgZGFlbW9uLT5uYW1lYnVmZiwgbm93LCBzZXRzLCBpc19zaWduLCBjaGVja19yZWJpbmQsIG5vX2NhY2hlLCBjYWNoZV9zZWN1cmUsICZkb2N0b3JlZCkpCisJeworCSAgbXlfc3lzbG9nKExPR19XQVJOSU5HLCBfKCJwb3NzaWJsZSBETlMtcmViaW5kIGF0dGFjayBkZXRlY3RlZDogJXMiKSwgZGFlbW9uLT5uYW1lYnVmZik7CisJICBtdW5nZWQgPSAxOworCSAgY2FjaGVfc2VjdXJlID0gMDsKKwl9CisKKyAgICAgIGlmIChkb2N0b3JlZCkKKwljYWNoZV9zZWN1cmUgPSAwOworICAgIH0KKyAgCisjaWZkZWYgSEFWRV9ETlNTRUMKKyAgaWYgKGJvZ3VzYW5zd2VyICYmICEoaGVhZGVyLT5oYjQgJiBIQjRfQ0QpICYmICFvcHRpb25fYm9vbChPUFRfRE5TU0VDX0RFQlVHKSkKKyAgICB7CisgICAgICAvKiBCb2d1cyByZXBseSwgdHVybiBpbnRvIFNFUlZGQUlMICovCisgICAgICBTRVRfUkNPREUoaGVhZGVyLCBTRVJWRkFJTCk7CisgICAgICBtdW5nZWQgPSAxOworICAgIH0KKworICBpZiAob3B0aW9uX2Jvb2woT1BUX0ROU1NFQ19WQUxJRCkpCisgICAgeworICAgICAgaGVhZGVyLT5oYjQgJj0gfkhCNF9BRDsKKyAgICAgIAorICAgICAgaWYgKCEoaGVhZGVyLT5oYjQgJiBIQjRfQ0QpICYmIGFkX3JlcWQgJiYgY2FjaGVfc2VjdXJlKQorCWhlYWRlci0+aGI0IHw9IEhCNF9BRDsKKyAgICAgIAorICAgICAgLyogSWYgdGhlIHJlcXVlc3RvciBkaWRuJ3Qgc2V0IHRoZSBETyBiaXQsIGRvbid0IHJldHVybiBETlNTRUMgaW5mby4gKi8KKyAgICAgIGlmICghZG9fYml0KQorCW4gPSBycmZpbHRlcihoZWFkZXIsIG4sIDEpOworICAgIH0KKyNlbmRpZgorCisgIC8qIGRvIHRoaXMgYWZ0ZXIgZXh0cmFjdF9hZGRyZXNzZXMuIEVuc3VyZSBOT0RBVEEgcmVwbHkgYW5kIHJlbW92ZQorICAgICBuYW1lc2VydmVyIGluZm8uICovCisgIAorICBpZiAobXVuZ2VkKQorICAgIHsKKyAgICAgIGhlYWRlci0+YW5jb3VudCA9IGh0b25zKDApOworICAgICAgaGVhZGVyLT5uc2NvdW50ID0gaHRvbnMoMCk7CisgICAgICBoZWFkZXItPmFyY291bnQgPSBodG9ucygwKTsKKyAgICAgIGhlYWRlci0+aGIzICY9IH5IQjNfVEM7CisgICAgfQorICAKKyAgLyogdGhlIGJvZ3VzLW54ZG9tYWluIHN0dWZmLCBkb2N0b3IgYW5kIE5YRE9NQUlOLT5OT0RBVEEgbXVuZ2luZyBjYW4gYWxsIGVsaWRlCisgICAgIHNlY3Rpb25zIG9mIHRoZSBwYWNrZXQuIEZpbmQgdGhlIG5ldyBsZW5ndGggaGVyZSBhbmQgcHV0IGJhY2sgcHNldWRvaGVhZGVyCisgICAgIGlmIGl0IHdhcyByZW1vdmVkLiAqLworICByZXR1cm4gcmVzaXplX3BhY2tldChoZWFkZXIsIG4sIHBoZWFkZXIsIHBsZW4pOworfQorCisvKiBzZXRzIG5ldyBsYXN0X3NlcnZlciAqLwordm9pZCByZXBseV9xdWVyeShpbnQgZmQsIGludCBmYW1pbHksIHRpbWVfdCBub3cpCit7CisgIC8qIHBhY2tldCBmcm9tIHBlZXIgc2VydmVyLCBleHRyYWN0IGRhdGEgZm9yIGNhY2hlLCBhbmQgc2VuZCB0bworICAgICBvcmlnaW5hbCByZXF1ZXN0ZXIgKi8KKyAgc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlcjsKKyAgdW5pb24gbXlzb2NrYWRkciBzZXJ2ZXJhZGRyOworICBzdHJ1Y3QgZnJlYyAqZm9yd2FyZDsKKyAgc29ja2xlbl90IGFkZHJsZW4gPSBzaXplb2Yoc2VydmVyYWRkcik7CisgIHNzaXplX3QgbiA9IHJlY3Zmcm9tKGZkLCBkYWVtb24tPnBhY2tldCwgZGFlbW9uLT5wYWNrZXRfYnVmZl9zeiwgMCwgJnNlcnZlcmFkZHIuc2EsICZhZGRybGVuKTsKKyAgc2l6ZV90IG5uOworICBzdHJ1Y3Qgc2VydmVyICpzZXJ2ZXI7CisgIHZvaWQgKmhhc2g7CisjaWZuZGVmIEhBVkVfRE5TU0VDCisgIHVuc2lnbmVkIGludCBjcmM7CisjZW5kaWYKKworICAvKiBwYWNrZXQgYnVmZmVyIG92ZXJ3cml0dGVuICovCisgIGRhZW1vbi0+c3J2X3NhdmUgPSBOVUxMOworICAKKyAgLyogRGV0ZXJtaW5lIHRoZSBhZGRyZXNzIG9mIHRoZSBzZXJ2ZXIgcmVwbHlpbmcgIHNvIHRoYXQgd2UgY2FuIG1hcmsgdGhhdCBhcyBnb29kICovCisgIHNlcnZlcmFkZHIuc2Euc2FfZmFtaWx5ID0gZmFtaWx5OworI2lmZGVmIEhBVkVfSVBWNgorICBpZiAoc2VydmVyYWRkci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpCisgICAgc2VydmVyYWRkci5pbjYuc2luNl9mbG93aW5mbyA9IDA7CisjZW5kaWYKKyAgCisgIGhlYWRlciA9IChzdHJ1Y3QgZG5zX2hlYWRlciAqKWRhZW1vbi0+cGFja2V0OworICAKKyAgaWYgKG4gPCAoaW50KXNpemVvZihzdHJ1Y3QgZG5zX2hlYWRlcikgfHwgIShoZWFkZXItPmhiMyAmIEhCM19RUikpCisgICAgcmV0dXJuOworICAKKyAgLyogc3Bvb2YgY2hlY2s6IGFuc3dlciBtdXN0IGNvbWUgZnJvbSBrbm93biBzZXJ2ZXIsICovCisgIGZvciAoc2VydmVyID0gZGFlbW9uLT5zZXJ2ZXJzOyBzZXJ2ZXI7IHNlcnZlciA9IHNlcnZlci0+bmV4dCkKKyAgICBpZiAoIShzZXJ2ZXItPmZsYWdzICYgKFNFUlZfTElURVJBTF9BRERSRVNTIHwgU0VSVl9OT19BRERSKSkgJiYKKwlzb2NrYWRkcl9pc2VxdWFsKCZzZXJ2ZXItPmFkZHIsICZzZXJ2ZXJhZGRyKSkKKyAgICAgIGJyZWFrOworICAKKyAgaWYgKCFzZXJ2ZXIpCisgICAgcmV0dXJuOworICAKKyNpZmRlZiBIQVZFX0ROU1NFQworICBoYXNoID0gaGFzaF9xdWVzdGlvbnMoaGVhZGVyLCBuLCBkYWVtb24tPm5hbWVidWZmKTsKKyNlbHNlCisgIGhhc2ggPSAmY3JjOworICBjcmMgPSBxdWVzdGlvbnNfY3JjKGhlYWRlciwgbiwgZGFlbW9uLT5uYW1lYnVmZik7CisjZW5kaWYKKyAgCisgIGlmICghKGZvcndhcmQgPSBsb29rdXBfZnJlYyhudG9ocyhoZWFkZXItPmlkKSwgaGFzaCkpKQorICAgIHJldHVybjsKKyAgCisgIC8qIGxvZ19xdWVyeSBnZXRzIGNhbGxlZCBpbmRpcmVjdGx5IGFsbCBvdmVyIHRoZSBwbGFjZSwgc28gCisgICAgIHBhc3MgdGhlc2UgaW4gZ2xvYmFsIHZhcmlhYmxlcyAtIHNvcnJ5LiAqLworICBkYWVtb24tPmxvZ19kaXNwbGF5X2lkID0gZm9yd2FyZC0+bG9nX2lkOworICBkYWVtb24tPmxvZ19zb3VyY2VfYWRkciA9ICZmb3J3YXJkLT5zb3VyY2U7CisgIAorICBpZiAoZGFlbW9uLT5pZ25vcmVfYWRkciAmJiBSQ09ERShoZWFkZXIpID09IE5PRVJST1IgJiYKKyAgICAgIGNoZWNrX2Zvcl9pZ25vcmVkX2FkZHJlc3MoaGVhZGVyLCBuLCBkYWVtb24tPmlnbm9yZV9hZGRyKSkKKyAgICByZXR1cm47CisKKyAgLyogTm90ZTogaWYgd2Ugc2VuZCBleHRyYSBvcHRpb25zIGluIHRoZSBFRE5TMCBoZWFkZXIsIHdlIGNhbid0IHJlY3JlYXRlCisgICAgIHRoZSBxdWVyeSBmcm9tIHRoZSByZXBseS4gKi8KKyAgaWYgKFJDT0RFKGhlYWRlcikgPT0gUkVGVVNFRCAmJgorICAgICAgZm9yd2FyZC0+Zm9yd2FyZGFsbCA9PSAwICYmCisgICAgICAhKGZvcndhcmQtPmZsYWdzICYgRlJFQ19IQVNfRVhUUkFEQVRBKSkKKyAgICAvKiBmb3IgYnJva2VuIHNlcnZlcnMsIGF0dGVtcHQgdG8gc2VuZCB0byBhbm90aGVyIG9uZS4gKi8KKyAgICB7CisgICAgICB1bnNpZ25lZCBjaGFyICpwaGVhZGVyOworICAgICAgc2l6ZV90IHBsZW47CisgICAgICBpbnQgaXNfc2lnbjsKKyAgICAgIAorICAgICAgLyogcmVjcmVhdGUgcXVlcnkgZnJvbSByZXBseSAqLworICAgICAgcGhlYWRlciA9IGZpbmRfcHNldWRvaGVhZGVyKGhlYWRlciwgKHNpemVfdCluLCAmcGxlbiwgTlVMTCwgJmlzX3NpZ24sIE5VTEwpOworICAgICAgaWYgKCFpc19zaWduKQorCXsKKwkgIGhlYWRlci0+YW5jb3VudCA9IGh0b25zKDApOworCSAgaGVhZGVyLT5uc2NvdW50ID0gaHRvbnMoMCk7CisJICBoZWFkZXItPmFyY291bnQgPSBodG9ucygwKTsKKwkgIGlmICgobm4gPSByZXNpemVfcGFja2V0KGhlYWRlciwgKHNpemVfdCluLCBwaGVhZGVyLCBwbGVuKSkpCisJICAgIHsKKwkgICAgICBoZWFkZXItPmhiMyAmPSB+KEhCM19RUiB8IEhCM19BQSB8IEhCM19UQyk7CisJICAgICAgaGVhZGVyLT5oYjQgJj0gfihIQjRfUkEgfCBIQjRfUkNPREUgfCBIQjRfQ0QgfCBIQjRfQUQpOworCSAgICAgIGlmIChmb3J3YXJkLT5mbGFncyAmIEZSRUNfQ0hFQ0tJTkdfRElTQUJMRUQpCisJCWhlYWRlci0+aGI0IHw9IEhCNF9DRDsKKwkgICAgICBpZiAoZm9yd2FyZC0+ZmxhZ3MgJiBGUkVDX0FEX1FVRVNUSU9OKQorCQloZWFkZXItPmhiNCB8PSBIQjRfQUQ7CisJICAgICAgaWYgKGZvcndhcmQtPmZsYWdzICYgRlJFQ19ET19RVUVTVElPTikKKwkJYWRkX2RvX2JpdChoZWFkZXIsIG5uLCAgKHVuc2lnbmVkIGNoYXIgKilwaGVhZGVyICsgcGxlbik7CisJICAgICAgZm9yd2FyZF9xdWVyeSgtMSwgTlVMTCwgTlVMTCwgMCwgaGVhZGVyLCBubiwgbm93LCBmb3J3YXJkLCBmb3J3YXJkLT5mbGFncyAmIEZSRUNfQURfUVVFU1RJT04sIGZvcndhcmQtPmZsYWdzICYgRlJFQ19ET19RVUVTVElPTik7CisJICAgICAgcmV0dXJuOworCSAgICB9CisJfQorICAgIH0gICAKKyAgIAorICBzZXJ2ZXIgPSBmb3J3YXJkLT5zZW50dG87CisgIGlmICgoZm9yd2FyZC0+c2VudHRvLT5mbGFncyAmIFNFUlZfVFlQRSkgPT0gMCkKKyAgICB7CisgICAgICBpZiAoUkNPREUoaGVhZGVyKSA9PSBSRUZVU0VEKQorCXNlcnZlciA9IE5VTEw7CisgICAgICBlbHNlCisJeworCSAgc3RydWN0IHNlcnZlciAqbGFzdF9zZXJ2ZXI7CisJICAKKwkgIC8qIGZpbmQgZ29vZCBzZXJ2ZXIgYnkgYWRkcmVzcyBpZiBwb3NzaWJsZSwgb3RoZXJ3aXNlIGFzc3VtZSB0aGUgbGFzdCBvbmUgd2Ugc2VudCB0byAqLyAKKwkgIGZvciAobGFzdF9zZXJ2ZXIgPSBkYWVtb24tPnNlcnZlcnM7IGxhc3Rfc2VydmVyOyBsYXN0X3NlcnZlciA9IGxhc3Rfc2VydmVyLT5uZXh0KQorCSAgICBpZiAoIShsYXN0X3NlcnZlci0+ZmxhZ3MgJiAoU0VSVl9MSVRFUkFMX0FERFJFU1MgfCBTRVJWX0hBU19ET01BSU4gfCBTRVJWX0ZPUl9OT0RPVFMgfCBTRVJWX05PX0FERFIpKSAmJgorCQlzb2NrYWRkcl9pc2VxdWFsKCZsYXN0X3NlcnZlci0+YWRkciwgJnNlcnZlcmFkZHIpKQorCSAgICAgIHsKKwkJc2VydmVyID0gbGFzdF9zZXJ2ZXI7CisJCWJyZWFrOworCSAgICAgIH0KKwl9IAorICAgICAgaWYgKCFvcHRpb25fYm9vbChPUFRfQUxMX1NFUlZFUlMpKQorCWRhZW1vbi0+bGFzdF9zZXJ2ZXIgPSBzZXJ2ZXI7CisgICAgfQorIAorICAvKiBXZSB0cmllZCByZXNlbmRpbmcgdG8gdGhpcyBzZXJ2ZXIgd2l0aCBhIHNtYWxsZXIgbWF4aW11bSBzaXplIGFuZCBnb3QgYW4gYW5zd2VyLgorICAgICBNYWtlIHRoYXQgcGVybWFuZW50LiBUbyBhdm9pZCByZWR1eGluZyB0aGUgcGFja2V0IHNpemUgZm9yIGFuIHNpbmdsZSBkcm9wcGVkIHBhY2tldCwKKyAgICAgb25seSBkbyB0aGlzIHdoZW4gd2UgZ2V0IGEgdHJ1bmNhdGVkIGFuc3dlciwgb3Igb25lIGxhcmdlciB0aGFuIHRoZSBzYWZlIHNpemUuICovCisgIGlmIChzZXJ2ZXIgJiYgKGZvcndhcmQtPmZsYWdzICYgRlJFQ19URVNUX1BLVFNaKSAmJiAKKyAgICAgICgoaGVhZGVyLT5oYjMgJiBIQjNfVEMpIHx8IG4gPj0gU0FGRV9QS1RTWikpCisgICAgc2VydmVyLT5lZG5zX3BrdHN6ID0gU0FGRV9QS1RTWjsKKyAgCisgIC8qIElmIHRoZSBhbnN3ZXIgaXMgYW4gZXJyb3IsIGtlZXAgdGhlIGZvcndhcmQgcmVjb3JkIGluIHBsYWNlIGluIGNhc2UKKyAgICAgd2UgZ2V0IGEgZ29vZCByZXBseSBmcm9tIGFub3RoZXIgc2VydmVyLiBLaWxsIGl0IHdoZW4gd2UndmUKKyAgICAgaGFkIHJlcGxpZXMgZnJvbSBhbGwgdG8gYXZvaWQgZmlsbGluZyB0aGUgZm9yd2FyZGluZyB0YWJsZSB3aGVuCisgICAgIGV2ZXJ5dGhpbmcgaXMgYnJva2VuICovCisgIGlmIChmb3J3YXJkLT5mb3J3YXJkYWxsID09IDAgfHwgLS1mb3J3YXJkLT5mb3J3YXJkYWxsID09IDEgfHwKKyAgICAgIChSQ09ERShoZWFkZXIpICE9IFJFRlVTRUQgJiYgUkNPREUoaGVhZGVyKSAhPSBTRVJWRkFJTCkpCisgICAgeworICAgICAgaW50IGNoZWNrX3JlYmluZCA9IDAsIG5vX2NhY2hlX2Ruc3NlYyA9IDAsIGNhY2hlX3NlY3VyZSA9IDAsIGJvZ3VzYW5zd2VyID0gMDsKKworICAgICAgaWYgKG9wdGlvbl9ib29sKE9QVF9OT19SRUJJTkQpKQorCWNoZWNrX3JlYmluZCA9ICEoZm9yd2FyZC0+ZmxhZ3MgJiBGUkVDX05PUkVCSU5EKTsKKyAgICAgIAorICAgICAgLyogICBEb24ndCBjYWNoZSByZXBsaWVzIHdoZXJlIEROU1NFQyB2YWxpZGF0aW9uIHdhcyB0dXJuZWQgb2ZmLCBlaXRoZXIKKwkgICB0aGUgdXBzdHJlYW0gc2VydmVyIHRvbGQgdXMgc28sIG9yIHRoZSBvcmlnaW5hbCBxdWVyeSBzcGVjaWZpZWQgaXQuICAqLworICAgICAgaWYgKChoZWFkZXItPmhiNCAmIEhCNF9DRCkgfHwgKGZvcndhcmQtPmZsYWdzICYgRlJFQ19DSEVDS0lOR19ESVNBQkxFRCkpCisJbm9fY2FjaGVfZG5zc2VjID0gMTsKKyAgICAgIAorI2lmZGVmIEhBVkVfRE5TU0VDCisgICAgICBpZiAoc2VydmVyICYmIChzZXJ2ZXItPmZsYWdzICYgU0VSVl9ET19ETlNTRUMpICYmIAorCSAgb3B0aW9uX2Jvb2woT1BUX0ROU1NFQ19WQUxJRCkgJiYgIShmb3J3YXJkLT5mbGFncyAmIEZSRUNfQ0hFQ0tJTkdfRElTQUJMRUQpKQorCXsKKwkgIGludCBzdGF0dXMgPSAwOworCisJICAvKiBXZSd2ZSBoYWQgYSByZXBseSBhbHJlYWR5LCB3aGljaCB3ZSdyZSB2YWxpZGF0aW5nLiBJZ25vcmUgdGhpcyBkdXBsaWNhdGUgKi8KKwkgIGlmIChmb3J3YXJkLT5ibG9ja2luZ19xdWVyeSkKKwkgICAgcmV0dXJuOworCSAgCisJICAgLyogVHJ1bmNhdGVkIGFuc3dlciBjYW4ndCBiZSB2YWxpZGF0ZWQuCisJICAgICAgSWYgdGhpcyBpcyBhbiBhbnN3ZXIgdG8gYSBETlNTRUMtZ2VuZXJhdGVkIHF1ZXJ5LCB3ZSBzdGlsbAorCSAgICAgIG5lZWQgdG8gZ2V0IHRoZSBjbGllbnQgdG8gcmV0cnkgb3ZlciBUQ1AsIHNvIHJldHVybgorCSAgICAgIGFuIGFuc3dlciB3aXRoIHRoZSBUQyBiaXQgc2V0LCBldmVuIGlmIHRoZSBhY3R1YWwgYW5zd2VyIGZpdHMuCisJICAgKi8KKwkgIGlmIChoZWFkZXItPmhiMyAmIEhCM19UQykKKwkgICAgc3RhdHVzID0gU1RBVF9UUlVOQ0FURUQ7CisJICAKKwkgIHdoaWxlICgxKQorCSAgICB7CisJICAgICAgLyogQXMgc29vbiBhcyBhbnl0aGluZyByZXR1cm5zIEJPR1VTLCB3ZSBzdG9wIGFuZCB1bndpbmQsIHRvIGRvIG90aGVyd2lzZQorCQkgd291bGQgaW52aXRlIGluZmluaXRlIGxvb3BzLCBzaW5jZSB0aGUgYW5zd2VycyB0byBETlNLRVkgYW5kIERTIHF1ZXJpZXMKKwkJIHdpbGwgbm90IGJlIGNhY2hlZCwgc28gdGhleSdsbCBiZSByZXBlYXRlZC4gKi8KKwkgICAgICBpZiAoc3RhdHVzICE9IFNUQVRfQk9HVVMgJiYgc3RhdHVzICE9IFNUQVRfVFJVTkNBVEVEICYmIHN0YXR1cyAhPSBTVEFUX0FCQU5ET05FRCkKKwkJeworCQkgIGlmIChmb3J3YXJkLT5mbGFncyAmIEZSRUNfRE5TS0VZX1FVRVJZKQorCQkgICAgc3RhdHVzID0gZG5zc2VjX3ZhbGlkYXRlX2J5X2RzKG5vdywgaGVhZGVyLCBuLCBkYWVtb24tPm5hbWVidWZmLCBkYWVtb24tPmtleW5hbWUsIGZvcndhcmQtPmNsYXNzKTsKKwkJICBlbHNlIGlmIChmb3J3YXJkLT5mbGFncyAmIEZSRUNfRFNfUVVFUlkpCisJCSAgICBzdGF0dXMgPSBkbnNzZWNfdmFsaWRhdGVfZHMobm93LCBoZWFkZXIsIG4sIGRhZW1vbi0+bmFtZWJ1ZmYsIGRhZW1vbi0+a2V5bmFtZSwgZm9yd2FyZC0+Y2xhc3MpOworCQkgIGVsc2UKKwkJICAgIHN0YXR1cyA9IGRuc3NlY192YWxpZGF0ZV9yZXBseShub3csIGhlYWRlciwgbiwgZGFlbW9uLT5uYW1lYnVmZiwgZGFlbW9uLT5rZXluYW1lLCAmZm9yd2FyZC0+Y2xhc3MsIAorCQkJCQkJICAgb3B0aW9uX2Jvb2woT1BUX0ROU1NFQ19OT19TSUdOKSAmJiAoc2VydmVyLT5mbGFncyAmIFNFUlZfRE9fRE5TU0VDKSwgTlVMTCwgTlVMTCk7CisJCX0KKwkgICAgICAKKwkgICAgICAvKiBDYW4ndCB2YWxpZGF0ZSwgYXMgd2UncmUgbWlzc2luZyBrZXkgZGF0YS4gUHV0IHRoaXMKKwkJIGFuc3dlciBhc2lkZSwgd2hpbHN0IHdlIGdldCB0aGF0LiAqLyAgICAgCisJICAgICAgaWYgKHN0YXR1cyA9PSBTVEFUX05FRURfRFMgfHwgc3RhdHVzID09IFNUQVRfTkVFRF9LRVkpCisJCXsKKwkJICBzdHJ1Y3QgZnJlYyAqbmV3LCAqb3JpZzsKKwkJICAKKwkJICAvKiBGcmVlIGFueSBzYXZlZCBxdWVyeSAqLworCQkgIGlmIChmb3J3YXJkLT5zdGFzaCkKKwkJICAgIGJsb2NrZGF0YV9mcmVlKGZvcndhcmQtPnN0YXNoKTsKKwkJICAKKwkJICAvKiBOb3cgc2F2ZSByZXBseSBwZW5kaW5nIHJlY2VpcHQgb2Yga2V5IGRhdGEgKi8KKwkJICBpZiAoIShmb3J3YXJkLT5zdGFzaCA9IGJsb2NrZGF0YV9hbGxvYygoY2hhciAqKWhlYWRlciwgbikpKQorCQkgICAgcmV0dXJuOworCQkgIGZvcndhcmQtPnN0YXNoX2xlbiA9IG47CisJCSAgCisJCSAgLyogRmluZCB0aGUgb3JpZ2luYWwgcXVlcnkgdGhhdCBzdGFydGVkIGl0IGFsbC4uLi4gKi8KKwkJICBmb3IgKG9yaWcgPSBmb3J3YXJkOyBvcmlnLT5kZXBlbmRlbnQ7IG9yaWcgPSBvcmlnLT5kZXBlbmRlbnQpOworCQkgIAorCQkgIGlmICgtLW9yaWctPndvcmtfY291bnRlciA9PSAwIHx8ICEobmV3ID0gZ2V0X25ld19mcmVjKG5vdywgTlVMTCwgMSkpKQorCQkgICAgc3RhdHVzID0gU1RBVF9BQkFORE9ORUQ7CisJCSAgZWxzZQorCQkgICAgeworCQkgICAgICBpbnQgZmQsIHR5cGUgPSBTRVJWX0RPX0ROU1NFQzsKKwkJICAgICAgc3RydWN0IGZyZWMgKm5leHQgPSBuZXctPm5leHQ7CisJCSAgICAgIGNoYXIgKmRvbWFpbjsKKwkJICAgICAgCisJCSAgICAgICpuZXcgPSAqZm9yd2FyZDsgLyogY29weSBldmVyeXRoaW5nLCB0aGVuIG92ZXJ3cml0ZSAqLworCQkgICAgICBuZXctPm5leHQgPSBuZXh0OworCQkgICAgICBuZXctPmJsb2NraW5nX3F1ZXJ5ID0gTlVMTDsKKworCQkgICAgICAvKiBGaW5kIHNlcnZlciB0byBmb3J3YXJkIHRvLiBUaGlzIHdpbGwgbm9ybWFsbHkgYmUgdGhlIAorCQkJIHNhbWUgYXMgZm9yIHRoZSBvcmlnaW5hbCBxdWVyeSwgYnV0IG1heSBiZSBhbm90aGVyIGlmCisJCQkgc2VydmVycyBmb3IgZG9tYWlucyBhcmUgaW52b2x2ZWQuICovCQkgICAgICAKKwkJICAgICAgaWYgKHNlYXJjaF9zZXJ2ZXJzKG5vdywgTlVMTCwgRl9ETlNTRUNPSywgZGFlbW9uLT5rZXluYW1lLCAmdHlwZSwgJmRvbWFpbiwgTlVMTCkgPT0gMCkKKwkJCXsKKwkJCSAgc3RydWN0IHNlcnZlciAqc3RhcnQgPSBzZXJ2ZXIsICpuZXdfc2VydmVyID0gTlVMTDsKKwkJCSAgCisJCQkgIHdoaWxlICgxKQorCQkJICAgIHsKKwkJCSAgICAgIGlmICh0eXBlID09IChzdGFydC0+ZmxhZ3MgJiAoU0VSVl9UWVBFIHwgU0VSVl9ET19ETlNTRUMpKSAmJgorCQkJCSAgKHR5cGUgIT0gU0VSVl9IQVNfRE9NQUlOIHx8IGhvc3RuYW1lX2lzZXF1YWwoZG9tYWluLCBzdGFydC0+ZG9tYWluKSkgJiYKKwkJCQkgICEoc3RhcnQtPmZsYWdzICYgKFNFUlZfTElURVJBTF9BRERSRVNTIHwgU0VSVl9MT09QKSkpCisJCQkJeworCQkJCSAgbmV3X3NlcnZlciA9IHN0YXJ0OworCQkJCSAgaWYgKHNlcnZlciA9PSBzdGFydCkKKwkJCQkgICAgeworCQkJCSAgICAgIG5ld19zZXJ2ZXIgPSBOVUxMOworCQkJCSAgICAgIGJyZWFrOworCQkJCSAgICB9CisJCQkJfQorCQkJICAgICAgCisJCQkgICAgICBpZiAoIShzdGFydCA9IHN0YXJ0LT5uZXh0KSkKKwkJCQlzdGFydCA9IGRhZW1vbi0+c2VydmVyczsKKwkJCSAgICAgIGlmIChzdGFydCA9PSBzZXJ2ZXIpCisJCQkJYnJlYWs7CisJCQkgICAgfQorCQkJICAKKwkJCSAgaWYgKG5ld19zZXJ2ZXIpCisJCQkgICAgc2VydmVyID0gbmV3X3NlcnZlcjsKKwkJCX0KKwkJICAgICAgCisJCSAgICAgIG5ldy0+c2VudHRvID0gc2VydmVyOworCQkgICAgICBuZXctPnJmZDQgPSBOVUxMOworI2lmZGVmIEhBVkVfSVBWNgorCQkgICAgICBuZXctPnJmZDYgPSBOVUxMOworI2VuZGlmCisJCSAgICAgIG5ldy0+ZmxhZ3MgJj0gfihGUkVDX0ROU0tFWV9RVUVSWSB8IEZSRUNfRFNfUVVFUlkpOworCQkgICAgICAKKwkJICAgICAgbmV3LT5kZXBlbmRlbnQgPSBmb3J3YXJkOyAvKiB0byBmaW5kIHF1ZXJ5IGF3YWl0aW5nIG5ldyBvbmUuICovCisJCSAgICAgIGZvcndhcmQtPmJsb2NraW5nX3F1ZXJ5ID0gbmV3OyAvKiBmb3IgZ2FyYmFnZSBjbGVhbmluZyAqLworCQkgICAgICAvKiB2YWxpZGF0ZSByb3V0aW5lcyBsZWF2ZSBuYW1lIG9mIHJlcXVpcmVkIHJlY29yZCBpbiBkYWVtb24tPmtleW5hbWUgKi8KKwkJICAgICAgaWYgKHN0YXR1cyA9PSBTVEFUX05FRURfS0VZKQorCQkJeworCQkJICBuZXctPmZsYWdzIHw9IEZSRUNfRE5TS0VZX1FVRVJZOyAKKwkJCSAgbm4gPSBkbnNzZWNfZ2VuZXJhdGVfcXVlcnkoaGVhZGVyLCAoKHVuc2lnbmVkIGNoYXIgKikgaGVhZGVyKSArIHNlcnZlci0+ZWRuc19wa3RzeiwKKwkJCQkJCSAgICAgZGFlbW9uLT5rZXluYW1lLCBmb3J3YXJkLT5jbGFzcywgVF9ETlNLRVksICZzZXJ2ZXItPmFkZHIsIHNlcnZlci0+ZWRuc19wa3Rzeik7CisJCQl9CisJCSAgICAgIGVsc2UgCisJCQl7CisJCQkgIG5ldy0+ZmxhZ3MgfD0gRlJFQ19EU19RVUVSWTsKKwkJCSAgbm4gPSBkbnNzZWNfZ2VuZXJhdGVfcXVlcnkoaGVhZGVyLCgodW5zaWduZWQgY2hhciAqKSBoZWFkZXIpICsgc2VydmVyLT5lZG5zX3BrdHN6LAorCQkJCQkJICAgICBkYWVtb24tPmtleW5hbWUsIGZvcndhcmQtPmNsYXNzLCBUX0RTLCAmc2VydmVyLT5hZGRyLCBzZXJ2ZXItPmVkbnNfcGt0c3opOworCQkJfQorCQkgICAgICBpZiAoKGhhc2ggPSBoYXNoX3F1ZXN0aW9ucyhoZWFkZXIsIG5uLCBkYWVtb24tPm5hbWVidWZmKSkpCisJCQltZW1jcHkobmV3LT5oYXNoLCBoYXNoLCBIQVNIX1NJWkUpOworCQkgICAgICBuZXctPm5ld19pZCA9IGdldF9pZCgpOworCQkgICAgICBoZWFkZXItPmlkID0gaHRvbnMobmV3LT5uZXdfaWQpOworCQkgICAgICAvKiBTYXZlIHF1ZXJ5IGZvciByZXRyYW5zbWlzc2lvbiAqLworCQkgICAgICBuZXctPnN0YXNoID0gYmxvY2tkYXRhX2FsbG9jKChjaGFyICopaGVhZGVyLCBubik7CisJCSAgICAgIG5ldy0+c3Rhc2hfbGVuID0gbm47CisJCSAgICAgIAorCQkgICAgICAvKiBEb24ndCByZXNlbmQgdGhpcy4gKi8KKwkJICAgICAgZGFlbW9uLT5zcnZfc2F2ZSA9IE5VTEw7CisJCSAgICAgIAorCQkgICAgICBpZiAoc2VydmVyLT5zZmQpCisJCQlmZCA9IHNlcnZlci0+c2ZkLT5mZDsKKwkJICAgICAgZWxzZQorCQkJeworCQkJICBmZCA9IC0xOworI2lmZGVmIEhBVkVfSVBWNgorCQkJICBpZiAoc2VydmVyLT5hZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikKKwkJCSAgICB7CisJCQkgICAgICBpZiAobmV3LT5yZmQ2IHx8IChuZXctPnJmZDYgPSBhbGxvY2F0ZV9yZmQoQUZfSU5FVDYpKSkKKwkJCQlmZCA9IG5ldy0+cmZkNi0+ZmQ7CisJCQkgICAgfQorCQkJICBlbHNlCisjZW5kaWYKKwkJCSAgICB7CisJCQkgICAgICBpZiAobmV3LT5yZmQ0IHx8IChuZXctPnJmZDQgPSBhbGxvY2F0ZV9yZmQoQUZfSU5FVCkpKQorCQkJCWZkID0gbmV3LT5yZmQ0LT5mZDsKKwkJCSAgICB9CisJCQl9CisJCSAgICAgIAorCQkgICAgICBpZiAoZmQgIT0gLTEpCisJCQl7CisjaWZkZWYgSEFWRV9DT05OVFJBQ0sKKwkJCSAgLyogQ29weSBjb25uZWN0aW9uIG1hcmsgb2YgaW5jb21pbmcgcXVlcnkgdG8gb3V0Z29pbmcgY29ubmVjdGlvbi4gKi8KKwkJCSAgaWYgKG9wdGlvbl9ib29sKE9QVF9DT05OVFJBQ0spKQorCQkJICAgIHsKKwkJCSAgICAgIHVuc2lnbmVkIGludCBtYXJrOworCQkJICAgICAgaWYgKGdldF9pbmNvbWluZ19tYXJrKCZvcmlnLT5zb3VyY2UsICZvcmlnLT5kZXN0LCAwLCAmbWFyaykpCisJCQkJc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fTUFSSywgJm1hcmssIHNpemVvZih1bnNpZ25lZCBpbnQpKTsKKwkJCSAgICB9CisjZW5kaWYKKwkJCSAgd2hpbGUgKHJldHJ5X3NlbmQoc2VuZHRvKGZkLCAoY2hhciAqKWhlYWRlciwgbm4sIDAsIAorCQkJCQkJICAgJnNlcnZlci0+YWRkci5zYSwgCisJCQkJCQkgICBzYV9sZW4oJnNlcnZlci0+YWRkcikpKSk7IAorCQkJICBzZXJ2ZXItPnF1ZXJpZXMrKzsKKwkJCX0KKwkJICAgIH0JCSAgCisJCSAgcmV0dXJuOworCQl9CisJICAKKwkgICAgICAvKiBWYWxpZGF0ZWQgb3JpZ2luYWwgYW5zd2VyLCBhbGwgZG9uZS4gKi8KKwkgICAgICBpZiAoIWZvcndhcmQtPmRlcGVuZGVudCkKKwkJYnJlYWs7CisJICAgICAgCisJICAgICAgLyogdmFsaWRhdGVkIHN1YnNpZGlhcnkgcXVlcnksIChhbmQgY2FjaGVkIHJlc3VsdCkKKwkJIHBvcCB0aGF0IGFuZCByZXR1cm4gdG8gdGhlIHByZXZpb3VzIHF1ZXJ5IHdlIHdlcmUgd29ya2luZyBvbi4gKi8KKwkgICAgICBzdHJ1Y3QgZnJlYyAqcHJldiA9IGZvcndhcmQtPmRlcGVuZGVudDsKKwkgICAgICBmcmVlX2ZyZWMoZm9yd2FyZCk7CisJICAgICAgZm9yd2FyZCA9IHByZXY7CisJICAgICAgZm9yd2FyZC0+YmxvY2tpbmdfcXVlcnkgPSBOVUxMOyAvKiBhbHJlYWR5IGdvbmUgKi8KKwkgICAgICBibG9ja2RhdGFfcmV0cmlldmUoZm9yd2FyZC0+c3Rhc2gsIGZvcndhcmQtPnN0YXNoX2xlbiwgKHZvaWQgKiloZWFkZXIpOworCSAgICAgIG4gPSBmb3J3YXJkLT5zdGFzaF9sZW47CisJICAgIH0KKwkKKwkgIAorCSAgbm9fY2FjaGVfZG5zc2VjID0gMDsKKwkgIAorCSAgaWYgKHN0YXR1cyA9PSBTVEFUX1RSVU5DQVRFRCkKKwkgICAgaGVhZGVyLT5oYjMgfD0gSEIzX1RDOworCSAgZWxzZQorCSAgICB7CisJICAgICAgY2hhciAqcmVzdWx0LCAqZG9tYWluID0gInJlc3VsdCI7CisJICAgICAgCisJICAgICAgaWYgKHN0YXR1cyA9PSBTVEFUX0FCQU5ET05FRCkKKwkJeworCQkgIHJlc3VsdCA9ICJBQkFORE9ORUQiOworCQkgIHN0YXR1cyA9IFNUQVRfQk9HVVM7CisJCX0KKwkgICAgICBlbHNlCisJCXJlc3VsdCA9IChzdGF0dXMgPT0gU1RBVF9TRUNVUkUgPyAiU0VDVVJFIiA6IChzdGF0dXMgPT0gU1RBVF9JTlNFQ1VSRSA/ICJJTlNFQ1VSRSIgOiAiQk9HVVMiKSk7CisJICAgICAgCisJICAgICAgaWYgKHN0YXR1cyA9PSBTVEFUX0JPR1VTICYmIGV4dHJhY3RfcmVxdWVzdChoZWFkZXIsIG4sIGRhZW1vbi0+bmFtZWJ1ZmYsIE5VTEwpKQorCQlkb21haW4gPSBkYWVtb24tPm5hbWVidWZmOworCSAgICAgIAorCSAgICAgIGxvZ19xdWVyeShGX0tFWVRBRyB8IEZfU0VDU1RBVCwgZG9tYWluLCBOVUxMLCByZXN1bHQpOworCSAgICB9CisJICAKKwkgIGlmIChzdGF0dXMgPT0gU1RBVF9TRUNVUkUpCisJICAgIGNhY2hlX3NlY3VyZSA9IDE7CisJICBlbHNlIGlmIChzdGF0dXMgPT0gU1RBVF9CT0dVUykKKwkgICAgeworCSAgICAgIG5vX2NhY2hlX2Ruc3NlYyA9IDE7CisJICAgICAgYm9ndXNhbnN3ZXIgPSAxOworCSAgICB9CisJfQorI2VuZGlmICAgICAKKyAgICAgIAorICAgICAgLyogcmVzdG9yZSBDRCBiaXQgdG8gdGhlIHZhbHVlIGluIHRoZSBxdWVyeSAqLworICAgICAgaWYgKGZvcndhcmQtPmZsYWdzICYgRlJFQ19DSEVDS0lOR19ESVNBQkxFRCkKKwloZWFkZXItPmhiNCB8PSBIQjRfQ0Q7CisgICAgICBlbHNlCisJaGVhZGVyLT5oYjQgJj0gfkhCNF9DRDsKKyAgICAgIAorICAgICAgaWYgKChubiA9IHByb2Nlc3NfcmVwbHkoaGVhZGVyLCBub3csIGZvcndhcmQtPnNlbnR0bywgKHNpemVfdCluLCBjaGVja19yZWJpbmQsIG5vX2NhY2hlX2Ruc3NlYywgY2FjaGVfc2VjdXJlLCBib2d1c2Fuc3dlciwgCisJCQkgICAgICBmb3J3YXJkLT5mbGFncyAmIEZSRUNfQURfUVVFU1RJT04sIGZvcndhcmQtPmZsYWdzICYgRlJFQ19ET19RVUVTVElPTiwgCisJCQkgICAgICBmb3J3YXJkLT5mbGFncyAmIEZSRUNfQURERURfUEhFQURFUiwgZm9yd2FyZC0+ZmxhZ3MgJiBGUkVDX0hBU19TVUJORVQsICZmb3J3YXJkLT5zb3VyY2UpKSkKKwl7CisJICBoZWFkZXItPmlkID0gaHRvbnMoZm9yd2FyZC0+b3JpZ19pZCk7CisJICBoZWFkZXItPmhiNCB8PSBIQjRfUkE7IC8qIHJlY3Vyc2lvbiBpZiBhdmFpbGFibGUgKi8KKyNpZmRlZiBIQVZFX0ROU1NFQworCSAgLyogV2UgYWRkZWQgYW4gRUROU08gaGVhZGVyIGZvciB0aGUgcHVycG9zZSBvZiBnZXR0aW5nIEROU1NFQyBSUnMsIGFuZCBzZXQgdGhlIHZhbHVlIG9mIHRoZSBVRFAgcGF5bG9hZCBzaXplCisJICAgICBncmVhdGVyIHRoYW4gdGhlIG5vLUVETlMwLWltcGxpZWQgNTEyIHRvIGhhdmUgaWYgc3BhY2UgZm9yIHRoZSBSUlNJR1MuIElmLCBoYXZpbmcgc3RyaXBwZWQgdGhlbSBhbmQgdGhlIEVETlMwCisgICAgICAgICAgICAgaGVhZGVyLCB0aGUgYW5zd2VyIGlzIHN0aWxsIGJpZ2dlciB0aGFuIDUxMiwgdHJ1bmNhdGUgaXQgYW5kIG1hcmsgaXQgc28uIFRoZSBjbGllbnQgdGhlbiByZXRyaWVzIHdpdGggVENQLiAqLworCSAgaWYgKG9wdGlvbl9ib29sKE9QVF9ETlNTRUNfVkFMSUQpICYmIChmb3J3YXJkLT5mbGFncyAmIEZSRUNfQURERURfUEhFQURFUikgJiYgKG5uID4gUEFDS0VUU1opKQorCSAgICB7CisJICAgICAgaGVhZGVyLT5hbmNvdW50ID0gaHRvbnMoMCk7CisJICAgICAgaGVhZGVyLT5uc2NvdW50ID0gaHRvbnMoMCk7CisJICAgICAgaGVhZGVyLT5hcmNvdW50ID0gaHRvbnMoMCk7CisJICAgICAgaGVhZGVyLT5oYjMgfD0gSEIzX1RDOworCSAgICAgIG5uID0gcmVzaXplX3BhY2tldChoZWFkZXIsIG5uLCBOVUxMLCAwKTsKKwkgICAgfQorI2VuZGlmCisJICBzZW5kX2Zyb20oZm9yd2FyZC0+ZmQsIG9wdGlvbl9ib29sKE9QVF9OT1dJTEQpIHx8IG9wdGlvbl9ib29sIChPUFRfQ0xFVkVSQklORCksIGRhZW1vbi0+cGFja2V0LCBubiwgCisJCSAgICAmZm9yd2FyZC0+c291cmNlLCAmZm9yd2FyZC0+ZGVzdCwgZm9yd2FyZC0+aWZhY2UpOworCX0KKyAgICAgIGZyZWVfZnJlYyhmb3J3YXJkKTsgLyogY2FuY2VsICovCisgICAgfQorfQorCisKK3ZvaWQgcmVjZWl2ZV9xdWVyeShzdHJ1Y3QgbGlzdGVuZXIgKmxpc3RlbiwgdGltZV90IG5vdykKK3sKKyAgc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciA9IChzdHJ1Y3QgZG5zX2hlYWRlciAqKWRhZW1vbi0+cGFja2V0OworICB1bmlvbiBteXNvY2thZGRyIHNvdXJjZV9hZGRyOworICB1bnNpZ25lZCBjaGFyICpwaGVhZGVyOworICB1bnNpZ25lZCBzaG9ydCB0eXBlLCB1ZHBfc2l6ZSA9IFBBQ0tFVFNaOyAvKiBkZWZhdWx0IGlmIG5vIEVETlMwICovCisgIHN0cnVjdCBhbGxfYWRkciBkc3RfYWRkcjsKKyAgc3RydWN0IGluX2FkZHIgbmV0bWFzaywgZHN0X2FkZHJfNDsKKyAgc2l6ZV90IG07CisgIHNzaXplX3QgbjsKKyAgaW50IGlmX2luZGV4ID0gMCwgYXV0aF9kbnMgPSAwLCBkb19iaXQgPSAwLCBoYXZlX3BzZXVkb2hlYWRlciA9IDA7CisjaWZkZWYgSEFWRV9BVVRICisgIGludCBsb2NhbF9hdXRoID0gMDsKKyNlbmRpZgorICBzdHJ1Y3QgaW92ZWMgaW92WzFdOworICBzdHJ1Y3QgbXNnaGRyIG1zZzsKKyAgc3RydWN0IGNtc2doZHIgKmNtcHRyOworICB1bmlvbiB7CisgICAgc3RydWN0IGNtc2doZHIgYWxpZ247IC8qIHRoaXMgZW5zdXJlcyBhbGlnbm1lbnQgKi8KKyNpZmRlZiBIQVZFX0lQVjYKKyAgICBjaGFyIGNvbnRyb2w2W0NNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBpbjZfcGt0aW5mbykpXTsKKyNlbmRpZgorI2lmIGRlZmluZWQoSEFWRV9MSU5VWF9ORVRXT1JLKQorICAgIGNoYXIgY29udHJvbFtDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3QgaW5fcGt0aW5mbykpXTsKKyNlbGlmIGRlZmluZWQoSVBfUkVDVkRTVEFERFIpICYmIGRlZmluZWQoSEFWRV9TT0xBUklTX05FVFdPUkspCisgICAgY2hhciBjb250cm9sW0NNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSkgKworCQkgQ01TR19TUEFDRShzaXplb2YodW5zaWduZWQgaW50KSldOworI2VsaWYgZGVmaW5lZChJUF9SRUNWRFNUQUREUikKKyAgICBjaGFyIGNvbnRyb2xbQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IGluX2FkZHIpKSArCisJCSBDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfZGwpKV07CisjZW5kaWYKKyAgfSBjb250cm9sX3U7CisjaWZkZWYgSEFWRV9JUFY2CisgICAvKiBDYW4gYWx3YXlzIGdldCByZWN2ZCBpbnRlcmZhY2UgZm9yIElQdjYgKi8KKyAgaW50IGNoZWNrX2RzdCA9ICFvcHRpb25fYm9vbChPUFRfTk9XSUxEKSB8fCBsaXN0ZW4tPmZhbWlseSA9PSBBRl9JTkVUNjsKKyNlbHNlCisgIGludCBjaGVja19kc3QgPSAhb3B0aW9uX2Jvb2woT1BUX05PV0lMRCk7CisjZW5kaWYKKworICAvKiBwYWNrZXQgYnVmZmVyIG92ZXJ3cml0dGVuICovCisgIGRhZW1vbi0+c3J2X3NhdmUgPSBOVUxMOworICAKKyAgZHN0X2FkZHJfNC5zX2FkZHIgPSBkc3RfYWRkci5hZGRyLmFkZHI0LnNfYWRkciA9IDA7CisgIG5ldG1hc2suc19hZGRyID0gMDsKKyAgCisgIGlmIChvcHRpb25fYm9vbChPUFRfTk9XSUxEKSAmJiBsaXN0ZW4tPmlmYWNlKQorICAgIHsKKyAgICAgIGF1dGhfZG5zID0gbGlzdGVuLT5pZmFjZS0+ZG5zX2F1dGg7CisgICAgIAorICAgICAgaWYgKGxpc3Rlbi0+ZmFtaWx5ID09IEFGX0lORVQpCisJeworCSAgZHN0X2FkZHJfNCA9IGRzdF9hZGRyLmFkZHIuYWRkcjQgPSBsaXN0ZW4tPmlmYWNlLT5hZGRyLmluLnNpbl9hZGRyOworCSAgbmV0bWFzayA9IGxpc3Rlbi0+aWZhY2UtPm5ldG1hc2s7CisJfQorICAgIH0KKyAgCisgIGlvdlswXS5pb3ZfYmFzZSA9IGRhZW1vbi0+cGFja2V0OworICBpb3ZbMF0uaW92X2xlbiA9IGRhZW1vbi0+ZWRuc19wa3RzejsKKyAgICAKKyAgbXNnLm1zZ19jb250cm9sID0gY29udHJvbF91LmNvbnRyb2w7CisgIG1zZy5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjb250cm9sX3UpOworICBtc2cubXNnX2ZsYWdzID0gMDsKKyAgbXNnLm1zZ19uYW1lID0gJnNvdXJjZV9hZGRyOworICBtc2cubXNnX25hbWVsZW4gPSBzaXplb2Yoc291cmNlX2FkZHIpOworICBtc2cubXNnX2lvdiA9IGlvdjsKKyAgbXNnLm1zZ19pb3ZsZW4gPSAxOworICAKKyAgaWYgKChuID0gcmVjdm1zZyhsaXN0ZW4tPmZkLCAmbXNnLCAwKSkgPT0gLTEpCisgICAgcmV0dXJuOworICAKKyAgaWYgKG4gPCAoaW50KXNpemVvZihzdHJ1Y3QgZG5zX2hlYWRlcikgfHwgCisgICAgICAobXNnLm1zZ19mbGFncyAmIE1TR19UUlVOQykgfHwKKyAgICAgIChoZWFkZXItPmhiMyAmIEhCM19RUikpCisgICAgcmV0dXJuOworCisgIC8qIENsZWFyIGJ1ZmZlciBiZXlvbmQgcmVxdWVzdCB0byBhdm9pZCByaXNrIG9mCisgICAgIGluZm9ybWF0aW9uIGRpc2Nsb3N1cmUuICovCisgIG1lbXNldChkYWVtb24tPnBhY2tldCArIG4sIDAsIGRhZW1vbi0+ZWRuc19wa3RzeiAtIG4pOworICAKKyAgc291cmNlX2FkZHIuc2Euc2FfZmFtaWx5ID0gbGlzdGVuLT5mYW1pbHk7CisgIAorICBpZiAobGlzdGVuLT5mYW1pbHkgPT0gQUZfSU5FVCkKKyAgICB7CisgICAgICAgLyogU291cmNlLXBvcnQgPT0gMCBpcyBhbiBlcnJvciwgd2UgY2FuJ3Qgc2VuZCBiYWNrIHRvIHRoYXQuIAorCSAgaHR0cDovL3d3dy5pZXRmLm9yZy9tYWlsLWFyY2hpdmUvd2ViL2Ruc29wL2N1cnJlbnQvbXNnMTE0NDEuaHRtbCAqLworICAgICAgaWYgKHNvdXJjZV9hZGRyLmluLnNpbl9wb3J0ID09IDApCisJcmV0dXJuOworICAgIH0KKyNpZmRlZiBIQVZFX0lQVjYKKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIFNvdXJjZS1wb3J0ID09IDAgaXMgYW4gZXJyb3IsIHdlIGNhbid0IHNlbmQgYmFjayB0byB0aGF0LiAqLworICAgICAgaWYgKHNvdXJjZV9hZGRyLmluNi5zaW42X3BvcnQgPT0gMCkKKwlyZXR1cm47CisgICAgICBzb3VyY2VfYWRkci5pbjYuc2luNl9mbG93aW5mbyA9IDA7CisgICAgfQorI2VuZGlmCisgIAorICAvKiBXZSBjYW4gYmUgY29uZmlndXJlZCB0byBvbmx5IGFjY2VwdCBxdWVyaWVzIGZyb20gYXQtbW9zdC1vbmUtaG9wLWF3YXkgYWRkcmVzc2VzLiAqLworICBpZiAob3B0aW9uX2Jvb2woT1BUX0xPQ0FMX1NFUlZJQ0UpKQorICAgIHsKKyAgICAgIHN0cnVjdCBhZGRybGlzdCAqYWRkcjsKKyNpZmRlZiBIQVZFX0lQVjYKKyAgICAgIGlmIChsaXN0ZW4tPmZhbWlseSA9PSBBRl9JTkVUNikgCisJeworCSAgZm9yIChhZGRyID0gZGFlbW9uLT5pbnRlcmZhY2VfYWRkcnM7IGFkZHI7IGFkZHIgPSBhZGRyLT5uZXh0KQorCSAgICBpZiAoKGFkZHItPmZsYWdzICYgQUREUkxJU1RfSVBWNikgJiYKKwkJaXNfc2FtZV9uZXQ2KCZhZGRyLT5hZGRyLmFkZHIuYWRkcjYsICZzb3VyY2VfYWRkci5pbjYuc2luNl9hZGRyLCBhZGRyLT5wcmVmaXhsZW4pKQorCSAgICAgIGJyZWFrOworCX0KKyAgICAgIGVsc2UKKyNlbmRpZgorCXsKKwkgIHN0cnVjdCBpbl9hZGRyIG5ldG1hc2s7CisJICBmb3IgKGFkZHIgPSBkYWVtb24tPmludGVyZmFjZV9hZGRyczsgYWRkcjsgYWRkciA9IGFkZHItPm5leHQpCisJICAgIHsKKwkgICAgICBuZXRtYXNrLnNfYWRkciA9IGh0b25sKH4oaW5fYWRkcl90KTAgPDwgKDMyIC0gYWRkci0+cHJlZml4bGVuKSk7CisJICAgICAgaWYgKCEoYWRkci0+ZmxhZ3MgJiBBRERSTElTVF9JUFY2KSAmJgorCQkgIGlzX3NhbWVfbmV0KGFkZHItPmFkZHIuYWRkci5hZGRyNCwgc291cmNlX2FkZHIuaW4uc2luX2FkZHIsIG5ldG1hc2spKQorCQlicmVhazsKKwkgICAgfQorCX0KKyAgICAgIGlmICghYWRkcikKKwl7CisJICBzdGF0aWMgaW50IHdhcm5lZCA9IDA7CisJICBpZiAoIXdhcm5lZCkKKwkgICAgeworCSAgICAgIG15X3N5c2xvZyhMT0dfV0FSTklORywgXygiSWdub3JpbmcgcXVlcnkgZnJvbSBub24tbG9jYWwgbmV0d29yayIpKTsKKwkgICAgICB3YXJuZWQgPSAxOworCSAgICB9CisJICByZXR1cm47CisJfQorICAgIH0KKwkJCisgIGlmIChjaGVja19kc3QpCisgICAgeworICAgICAgc3RydWN0IGlmcmVxIGlmcjsKKworICAgICAgaWYgKG1zZy5tc2dfY29udHJvbGxlbiA8IHNpemVvZihzdHJ1Y3QgY21zZ2hkcikpCisJcmV0dXJuOworCisjaWYgZGVmaW5lZChIQVZFX0xJTlVYX05FVFdPUkspCisgICAgICBpZiAobGlzdGVuLT5mYW1pbHkgPT0gQUZfSU5FVCkKKwlmb3IgKGNtcHRyID0gQ01TR19GSVJTVEhEUigmbXNnKTsgY21wdHI7IGNtcHRyID0gQ01TR19OWFRIRFIoJm1zZywgY21wdHIpKQorCSAgaWYgKGNtcHRyLT5jbXNnX2xldmVsID09IElQUFJPVE9fSVAgJiYgY21wdHItPmNtc2dfdHlwZSA9PSBJUF9QS1RJTkZPKQorCSAgICB7CisJICAgICAgdW5pb24geworCQl1bnNpZ25lZCBjaGFyICpjOworCQlzdHJ1Y3QgaW5fcGt0aW5mbyAqcDsKKwkgICAgICB9IHA7CisJICAgICAgcC5jID0gQ01TR19EQVRBKGNtcHRyKTsKKwkgICAgICBkc3RfYWRkcl80ID0gZHN0X2FkZHIuYWRkci5hZGRyNCA9IHAucC0+aXBpX3NwZWNfZHN0OworCSAgICAgIGlmX2luZGV4ID0gcC5wLT5pcGlfaWZpbmRleDsKKwkgICAgfQorI2VsaWYgZGVmaW5lZChJUF9SRUNWRFNUQUREUikgJiYgZGVmaW5lZChJUF9SRUNWSUYpCisgICAgICBpZiAobGlzdGVuLT5mYW1pbHkgPT0gQUZfSU5FVCkKKwl7CisJICBmb3IgKGNtcHRyID0gQ01TR19GSVJTVEhEUigmbXNnKTsgY21wdHI7IGNtcHRyID0gQ01TR19OWFRIRFIoJm1zZywgY21wdHIpKQorCSAgICB7CisJICAgICAgdW5pb24geworCQl1bnNpZ25lZCBjaGFyICpjOworCQl1bnNpZ25lZCBpbnQgKmk7CisJCXN0cnVjdCBpbl9hZGRyICphOworI2lmbmRlZiBIQVZFX1NPTEFSSVNfTkVUV09SSworCQlzdHJ1Y3Qgc29ja2FkZHJfZGwgKnM7CisjZW5kaWYKKwkgICAgICB9IHA7CisJICAgICAgIHAuYyA9IENNU0dfREFUQShjbXB0cik7CisJICAgICAgIGlmIChjbXB0ci0+Y21zZ19sZXZlbCA9PSBJUFBST1RPX0lQICYmIGNtcHRyLT5jbXNnX3R5cGUgPT0gSVBfUkVDVkRTVEFERFIpCisJCSBkc3RfYWRkcl80ID0gZHN0X2FkZHIuYWRkci5hZGRyNCA9ICoocC5hKTsKKwkgICAgICAgZWxzZSBpZiAoY21wdHItPmNtc2dfbGV2ZWwgPT0gSVBQUk9UT19JUCAmJiBjbXB0ci0+Y21zZ190eXBlID09IElQX1JFQ1ZJRikKKyNpZmRlZiBIQVZFX1NPTEFSSVNfTkVUV09SSworCQkgaWZfaW5kZXggPSAqKHAuaSk7CisjZWxzZQorICAJICAgICAgICAgaWZfaW5kZXggPSBwLnMtPnNkbF9pbmRleDsKKyNlbmRpZgorCSAgICB9CisJfQorI2VuZGlmCisgICAgICAKKyNpZmRlZiBIQVZFX0lQVjYKKyAgICAgIGlmIChsaXN0ZW4tPmZhbWlseSA9PSBBRl9JTkVUNikKKwl7CisJICBmb3IgKGNtcHRyID0gQ01TR19GSVJTVEhEUigmbXNnKTsgY21wdHI7IGNtcHRyID0gQ01TR19OWFRIRFIoJm1zZywgY21wdHIpKQorCSAgICBpZiAoY21wdHItPmNtc2dfbGV2ZWwgPT0gSVBQUk9UT19JUFY2ICYmIGNtcHRyLT5jbXNnX3R5cGUgPT0gZGFlbW9uLT52NnBrdGluZm8pCisJICAgICAgeworCQl1bmlvbiB7CisJCSAgdW5zaWduZWQgY2hhciAqYzsKKwkJICBzdHJ1Y3QgaW42X3BrdGluZm8gKnA7CisJCX0gcDsKKwkJcC5jID0gQ01TR19EQVRBKGNtcHRyKTsKKwkJICAKKwkJZHN0X2FkZHIuYWRkci5hZGRyNiA9IHAucC0+aXBpNl9hZGRyOworCQlpZl9pbmRleCA9IHAucC0+aXBpNl9pZmluZGV4OworCSAgICAgIH0KKwl9CisjZW5kaWYKKyAgICAgIAorICAgICAgLyogZW5mb3JjZSBhdmFpbGFibGUgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gKi8KKyAgICAgIAorICAgICAgaWYgKCFpbmRleHRvbmFtZShsaXN0ZW4tPmZkLCBpZl9pbmRleCwgaWZyLmlmcl9uYW1lKSkKKwlyZXR1cm47CisgICAgICAKKyAgICAgIGlmICghaWZhY2VfY2hlY2sobGlzdGVuLT5mYW1pbHksICZkc3RfYWRkciwgaWZyLmlmcl9uYW1lLCAmYXV0aF9kbnMpKQorCXsKKwkgICBpZiAoIW9wdGlvbl9ib29sKE9QVF9DTEVWRVJCSU5EKSkKKwkgICAgIGVudW1lcmF0ZV9pbnRlcmZhY2VzKDApOyAKKwkgICBpZiAoIWxvb3BiYWNrX2V4Y2VwdGlvbihsaXN0ZW4tPmZkLCBsaXN0ZW4tPmZhbWlseSwgJmRzdF9hZGRyLCBpZnIuaWZyX25hbWUpICYmCisJICAgICAgICFsYWJlbF9leGNlcHRpb24oaWZfaW5kZXgsIGxpc3Rlbi0+ZmFtaWx5LCAmZHN0X2FkZHIpKQorCSAgICAgcmV0dXJuOworCX0KKworICAgICAgaWYgKGxpc3Rlbi0+ZmFtaWx5ID09IEFGX0lORVQgJiYgb3B0aW9uX2Jvb2woT1BUX0xPQ0FMSVNFKSkKKwl7CisJICBzdHJ1Y3QgaXJlYyAqaWZhY2U7CisJICAKKwkgIC8qIGdldCB0aGUgbmV0bWFzayBvZiB0aGUgaW50ZXJmYWNlIHdoaWNoIGhhcyB0aGUgYWRkcmVzcyB3ZSB3ZXJlIHNlbnQgdG8uCisJICAgICBUaGlzIGlzIG5vIG5lY2Vzc2FyaWx5IHRoZSBpbnRlcmZhY2Ugd2UgYXJyaXZlZCBvbi4gKi8KKwkgIAorCSAgZm9yIChpZmFjZSA9IGRhZW1vbi0+aW50ZXJmYWNlczsgaWZhY2U7IGlmYWNlID0gaWZhY2UtPm5leHQpCisJICAgIGlmIChpZmFjZS0+YWRkci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCAmJgorCQlpZmFjZS0+YWRkci5pbi5zaW5fYWRkci5zX2FkZHIgPT0gZHN0X2FkZHJfNC5zX2FkZHIpCisJICAgICAgYnJlYWs7CisJICAKKwkgIC8qIGludGVyZmFjZSBtYXkgYmUgbmV3ICovCisJICBpZiAoIWlmYWNlICYmICFvcHRpb25fYm9vbChPUFRfQ0xFVkVSQklORCkpCisJICAgIGVudW1lcmF0ZV9pbnRlcmZhY2VzKDApOyAKKwkgIAorCSAgZm9yIChpZmFjZSA9IGRhZW1vbi0+aW50ZXJmYWNlczsgaWZhY2U7IGlmYWNlID0gaWZhY2UtPm5leHQpCisJICAgIGlmIChpZmFjZS0+YWRkci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCAmJgorCQlpZmFjZS0+YWRkci5pbi5zaW5fYWRkci5zX2FkZHIgPT0gZHN0X2FkZHJfNC5zX2FkZHIpCisJICAgICAgYnJlYWs7CisJICAKKwkgIC8qIElmIHdlIGZhaWxlZCwgYWJhbmRvbiBsb2NhbGlzYXRpb24gKi8KKwkgIGlmIChpZmFjZSkKKwkgICAgbmV0bWFzayA9IGlmYWNlLT5uZXRtYXNrOworCSAgZWxzZQorCSAgICBkc3RfYWRkcl80LnNfYWRkciA9IDA7CisJfQorICAgIH0KKyAgIAorICAvKiBsb2dfcXVlcnkgZ2V0cyBjYWxsZWQgaW5kaXJlY3RseSBhbGwgb3ZlciB0aGUgcGxhY2UsIHNvIAorICAgICBwYXNzIHRoZXNlIGluIGdsb2JhbCB2YXJpYWJsZXMgLSBzb3JyeS4gKi8KKyAgZGFlbW9uLT5sb2dfZGlzcGxheV9pZCA9ICsrZGFlbW9uLT5sb2dfaWQ7CisgIGRhZW1vbi0+bG9nX3NvdXJjZV9hZGRyID0gJnNvdXJjZV9hZGRyOworICAKKyAgaWYgKGV4dHJhY3RfcmVxdWVzdChoZWFkZXIsIChzaXplX3QpbiwgZGFlbW9uLT5uYW1lYnVmZiwgJnR5cGUpKQorICAgIHsKKyNpZmRlZiBIQVZFX0FVVEgKKyAgICAgIHN0cnVjdCBhdXRoX3pvbmUgKnpvbmU7CisjZW5kaWYKKyAgICAgIGNoYXIgKnR5cGVzID0gcXVlcnlzdHIoYXV0aF9kbnMgPyAiYXV0aCIgOiAicXVlcnkiLCB0eXBlKTsKKyAgICAgIAorICAgICAgaWYgKGxpc3Rlbi0+ZmFtaWx5ID09IEFGX0lORVQpIAorCWxvZ19xdWVyeShGX1FVRVJZIHwgRl9JUFY0IHwgRl9GT1JXQVJELCBkYWVtb24tPm5hbWVidWZmLCAKKwkJICAoc3RydWN0IGFsbF9hZGRyICopJnNvdXJjZV9hZGRyLmluLnNpbl9hZGRyLCB0eXBlcyk7CisjaWZkZWYgSEFWRV9JUFY2CisgICAgICBlbHNlCisJbG9nX3F1ZXJ5KEZfUVVFUlkgfCBGX0lQVjYgfCBGX0ZPUldBUkQsIGRhZW1vbi0+bmFtZWJ1ZmYsIAorCQkgIChzdHJ1Y3QgYWxsX2FkZHIgKikmc291cmNlX2FkZHIuaW42LnNpbjZfYWRkciwgdHlwZXMpOworI2VuZGlmCisKKyNpZmRlZiBIQVZFX0FVVEgKKyAgICAgIC8qIGZpbmQgcXVlcmllcyBmb3Igem9uZXMgd2UncmUgYXV0aG9yaXRhdGl2ZSBmb3IsIGFuZCBhbnN3ZXIgdGhlbSBkaXJlY3RseSAqLworICAgICAgaWYgKCFhdXRoX2RucyAmJiAhb3B0aW9uX2Jvb2woT1BUX0xPQ0FMSVNFKSkKKwlmb3IgKHpvbmUgPSBkYWVtb24tPmF1dGhfem9uZXM7IHpvbmU7IHpvbmUgPSB6b25lLT5uZXh0KQorCSAgaWYgKGluX3pvbmUoem9uZSwgZGFlbW9uLT5uYW1lYnVmZiwgTlVMTCkpCisJICAgIHsKKwkgICAgICBhdXRoX2RucyA9IDE7CisJICAgICAgbG9jYWxfYXV0aCA9IDE7CisJICAgICAgYnJlYWs7CisJICAgIH0KKyNlbmRpZgorICAgICAgCisjaWZkZWYgSEFWRV9MT09QCisgICAgICAvKiBDaGVjayBmb3IgZm9yd2FyZGluZyBsb29wICovCisgICAgICBpZiAoZGV0ZWN0X2xvb3AoZGFlbW9uLT5uYW1lYnVmZiwgdHlwZSkpCisJcmV0dXJuOworI2VuZGlmCisgICAgfQorICAKKyAgaWYgKGZpbmRfcHNldWRvaGVhZGVyKGhlYWRlciwgKHNpemVfdCluLCBOVUxMLCAmcGhlYWRlciwgTlVMTCwgTlVMTCkpCisgICAgeyAKKyAgICAgIHVuc2lnbmVkIHNob3J0IGZsYWdzOworICAgICAgCisgICAgICBoYXZlX3BzZXVkb2hlYWRlciA9IDE7CisgICAgICBHRVRTSE9SVCh1ZHBfc2l6ZSwgcGhlYWRlcik7CisgICAgICBwaGVhZGVyICs9IDI7IC8qIGV4dF9yY29kZSAqLworICAgICAgR0VUU0hPUlQoZmxhZ3MsIHBoZWFkZXIpOworICAgICAgCisgICAgICBpZiAoZmxhZ3MgJiAweDgwMDApCisJZG9fYml0ID0gMTsvKiBkbyBiaXQgKi8gCisJCisgICAgICAvKiBJZiB0aGUgY2xpZW50IHByb3ZpZGVzIGFuIEVETlMwIFVEUCBzaXplLCB1c2UgdGhhdCB0byBsaW1pdCBvdXIgcmVwbHkuCisJIChib3VuZGVkIGJ5IHRoZSBtYXhpbXVtIGNvbmZpZ3VyZWQpLiBJZiBubyBFRE5TMCwgdGhlbiBpdAorCSBkZWZhdWx0cyB0byA1MTIgKi8KKyAgICAgIGlmICh1ZHBfc2l6ZSA+IGRhZW1vbi0+ZWRuc19wa3RzeikKKwl1ZHBfc2l6ZSA9IGRhZW1vbi0+ZWRuc19wa3RzejsKKyAgICAgIGVsc2UgaWYgKHVkcF9zaXplIDwgUEFDS0VUU1opCisJdWRwX3NpemUgPSBQQUNLRVRTWjsgLyogU2FuaXR5IGNoZWNrIC0gY2FuJ3QgcmVkdWNlIGJlbG93IGRlZmF1bHQuIFJGQyA2ODkxIDYuMi4zICovCisgICAgfQorCisjaWZkZWYgSEFWRV9BVVRICisgIGlmIChhdXRoX2RucykKKyAgICB7CisgICAgICBtID0gYW5zd2VyX2F1dGgoaGVhZGVyLCAoKGNoYXIgKikgaGVhZGVyKSArIHVkcF9zaXplLCAoc2l6ZV90KW4sIG5vdywgJnNvdXJjZV9hZGRyLCAKKwkJICAgICAgbG9jYWxfYXV0aCwgZG9fYml0LCBoYXZlX3BzZXVkb2hlYWRlcik7CisgICAgICBpZiAobSA+PSAxKQorCXsKKwkgIHNlbmRfZnJvbShsaXN0ZW4tPmZkLCBvcHRpb25fYm9vbChPUFRfTk9XSUxEKSB8fCBvcHRpb25fYm9vbChPUFRfQ0xFVkVSQklORCksCisJCSAgICAoY2hhciAqKWhlYWRlciwgbSwgJnNvdXJjZV9hZGRyLCAmZHN0X2FkZHIsIGlmX2luZGV4KTsKKwkgIGRhZW1vbi0+YXV0aF9hbnN3ZXIrKzsKKwl9CisgICAgfQorICBlbHNlCisjZW5kaWYKKyAgICB7CisgICAgICBpbnQgYWRfcmVxZCA9IGRvX2JpdDsKKyAgICAgICAvKiBSRkMgNjg0MCA1LjcgKi8KKyAgICAgIGlmIChoZWFkZXItPmhiNCAmIEhCNF9BRCkKKwlhZF9yZXFkID0gMTsKKworICAgICAgbSA9IGFuc3dlcl9yZXF1ZXN0KGhlYWRlciwgKChjaGFyICopIGhlYWRlcikgKyB1ZHBfc2l6ZSwgKHNpemVfdCluLCAKKwkJCSBkc3RfYWRkcl80LCBuZXRtYXNrLCBub3csIGFkX3JlcWQsIGRvX2JpdCwgaGF2ZV9wc2V1ZG9oZWFkZXIpOworICAgICAgCisgICAgICBpZiAobSA+PSAxKQorCXsKKwkgIHNlbmRfZnJvbShsaXN0ZW4tPmZkLCBvcHRpb25fYm9vbChPUFRfTk9XSUxEKSB8fCBvcHRpb25fYm9vbChPUFRfQ0xFVkVSQklORCksCisJCSAgICAoY2hhciAqKWhlYWRlciwgbSwgJnNvdXJjZV9hZGRyLCAmZHN0X2FkZHIsIGlmX2luZGV4KTsKKwkgIGRhZW1vbi0+bG9jYWxfYW5zd2VyKys7CisJfQorICAgICAgZWxzZSBpZiAoZm9yd2FyZF9xdWVyeShsaXN0ZW4tPmZkLCAmc291cmNlX2FkZHIsICZkc3RfYWRkciwgaWZfaW5kZXgsCisJCQkgICAgIGhlYWRlciwgKHNpemVfdCluLCBub3csIE5VTEwsIGFkX3JlcWQsIGRvX2JpdCkpCisJZGFlbW9uLT5xdWVyaWVzX2ZvcndhcmRlZCsrOworICAgICAgZWxzZQorCWRhZW1vbi0+bG9jYWxfYW5zd2VyKys7CisgICAgfQorfQorCisjaWZkZWYgSEFWRV9ETlNTRUMKKy8qIFJlY3Vyc2UgdXAgdGhlIGtleSBoaWVyYXJjaHkgKi8KK3N0YXRpYyBpbnQgdGNwX2tleV9yZWN1cnNlKHRpbWVfdCBub3csIGludCBzdGF0dXMsIHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIsIHNpemVfdCBuLCAKKwkJCSAgIGludCBjbGFzcywgY2hhciAqbmFtZSwgY2hhciAqa2V5bmFtZSwgc3RydWN0IHNlcnZlciAqc2VydmVyLCAKKwkJCSAgIGludCBoYXZlX21hcmssIHVuc2lnbmVkIGludCBtYXJrLCBpbnQgKmtleWNvdW50KQoreworICBpbnQgbmV3X3N0YXR1czsKKyAgdW5zaWduZWQgY2hhciAqcGFja2V0ID0gTlVMTDsKKyAgdW5zaWduZWQgY2hhciAqcGF5bG9hZCA9IE5VTEw7CisgIHN0cnVjdCBkbnNfaGVhZGVyICpuZXdfaGVhZGVyID0gTlVMTDsKKyAgdTE2ICpsZW5ndGggPSBOVUxMOworIAorICB3aGlsZSAoMSkKKyAgICB7CisgICAgICBpbnQgdHlwZSA9IFNFUlZfRE9fRE5TU0VDOworICAgICAgY2hhciAqZG9tYWluOworICAgICAgc2l6ZV90IG07IAorICAgICAgdW5zaWduZWQgY2hhciBjMSwgYzI7CisgICAgICBzdHJ1Y3Qgc2VydmVyICpmaXJzdHNlbmR0byA9IE5VTEw7CisgICAgICAKKyAgICAgIC8qIGxpbWl0IHRoZSBhbW91bnQgb2Ygd29yayB3ZSBkbywgdG8gYXZvaWQgY3ljbGluZyBmb3JldmVyIG9uIGxvb3BzIGluIHRoZSBETlMgKi8KKyAgICAgIGlmICgtLSgqa2V5Y291bnQpID09IDApCisJbmV3X3N0YXR1cyA9IFNUQVRfQUJBTkRPTkVEOworICAgICAgZWxzZSBpZiAoc3RhdHVzID09IFNUQVRfTkVFRF9LRVkpCisJbmV3X3N0YXR1cyA9IGRuc3NlY192YWxpZGF0ZV9ieV9kcyhub3csIGhlYWRlciwgbiwgbmFtZSwga2V5bmFtZSwgY2xhc3MpOworICAgICAgZWxzZSBpZiAoc3RhdHVzID09IFNUQVRfTkVFRF9EUykKKwluZXdfc3RhdHVzID0gZG5zc2VjX3ZhbGlkYXRlX2RzKG5vdywgaGVhZGVyLCBuLCBuYW1lLCBrZXluYW1lLCBjbGFzcyk7CisgICAgICBlbHNlIAorCW5ld19zdGF0dXMgPSBkbnNzZWNfdmFsaWRhdGVfcmVwbHkobm93LCBoZWFkZXIsIG4sIG5hbWUsIGtleW5hbWUsICZjbGFzcywKKwkJCQkJICAgb3B0aW9uX2Jvb2woT1BUX0ROU1NFQ19OT19TSUdOKSAmJiAoc2VydmVyLT5mbGFncyAmIFNFUlZfRE9fRE5TU0VDKSwgTlVMTCwgTlVMTCk7CisgICAgICAKKyAgICAgIGlmIChuZXdfc3RhdHVzICE9IFNUQVRfTkVFRF9EUyAmJiBuZXdfc3RhdHVzICE9IFNUQVRfTkVFRF9LRVkpCisJYnJlYWs7CisKKyAgICAgIC8qIENhbid0IHZhbGlkYXRlIGJlY2F1c2Ugd2UgbmVlZCBhIGtleS9EUyB3aG9zZSBuYW1lIG5vdyBpbiBrZXluYW1lLgorCSBNYWtlIHF1ZXJ5IGZvciBzYW1lLCBhbmQgcmVjdXJzZSB0byB2YWxpZGF0ZSAqLworICAgICAgaWYgKCFwYWNrZXQpCisJeworCSAgcGFja2V0ID0gd2hpbmVfbWFsbG9jKDY1NTM2ICsgTUFYRE5BTUUgKyBSUkZJWEVEU1ogKyBzaXplb2YodTE2KSk7CisJICBwYXlsb2FkID0gJnBhY2tldFsyXTsKKwkgIG5ld19oZWFkZXIgPSAoc3RydWN0IGRuc19oZWFkZXIgKilwYXlsb2FkOworCSAgbGVuZ3RoID0gKHUxNiAqKXBhY2tldDsKKwl9CisgICAgICAKKyAgICAgIGlmICghcGFja2V0KQorCXsKKwkgIG5ld19zdGF0dXMgPSBTVEFUX0FCQU5ET05FRDsKKwkgIGJyZWFrOworCX0KKwkgCisgICAgICBtID0gZG5zc2VjX2dlbmVyYXRlX3F1ZXJ5KG5ld19oZWFkZXIsICgodW5zaWduZWQgY2hhciAqKSBuZXdfaGVhZGVyKSArIDY1NTM2LCBrZXluYW1lLCBjbGFzcywgCisJCQkJbmV3X3N0YXR1cyA9PSBTVEFUX05FRURfS0VZID8gVF9ETlNLRVkgOiBUX0RTLCAmc2VydmVyLT5hZGRyLCBzZXJ2ZXItPmVkbnNfcGt0c3opOworICAgICAgCisgICAgICAqbGVuZ3RoID0gaHRvbnMobSk7CisKKyAgICAgIC8qIEZpbmQgc2VydmVyIHRvIGZvcndhcmQgdG8uIFRoaXMgd2lsbCBub3JtYWxseSBiZSB0aGUgCisJIHNhbWUgYXMgZm9yIHRoZSBvcmlnaW5hbCBxdWVyeSwgYnV0IG1heSBiZSBhbm90aGVyIGlmCisJIHNlcnZlcnMgZm9yIGRvbWFpbnMgYXJlIGludm9sdmVkLiAqLwkJICAgICAgCisgICAgICBpZiAoc2VhcmNoX3NlcnZlcnMobm93LCBOVUxMLCBGX0ROU1NFQ09LLCBrZXluYW1lLCAmdHlwZSwgJmRvbWFpbiwgTlVMTCkgIT0gMCkKKwl7CisJICBuZXdfc3RhdHVzID0gU1RBVF9BQkFORE9ORUQ7CisJICBicmVhazsKKwl9CisJCisgICAgICB3aGlsZSAoMSkKKwl7CisJICBpZiAoIWZpcnN0c2VuZHRvKQorCSAgICBmaXJzdHNlbmR0byA9IHNlcnZlcjsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGlmICghKHNlcnZlciA9IHNlcnZlci0+bmV4dCkpCisJCXNlcnZlciA9IGRhZW1vbi0+c2VydmVyczsKKwkgICAgICBpZiAoc2VydmVyID09IGZpcnN0c2VuZHRvKQorCQl7CisJCSAgLyogY2FuJ3QgZmluZCBzZXJ2ZXIgdG8gYWNjZXB0IG91ciBxdWVyeS4gKi8KKwkJICBuZXdfc3RhdHVzID0gU1RBVF9BQkFORE9ORUQ7CisJCSAgYnJlYWs7CisJCX0KKwkgICAgfQorCSAgCisJICBpZiAodHlwZSAhPSAoc2VydmVyLT5mbGFncyAmIChTRVJWX1RZUEUgfCBTRVJWX0RPX0ROU1NFQykpIHx8CisJICAgICAgKHR5cGUgPT0gU0VSVl9IQVNfRE9NQUlOICYmICFob3N0bmFtZV9pc2VxdWFsKGRvbWFpbiwgc2VydmVyLT5kb21haW4pKSB8fAorCSAgICAgIChzZXJ2ZXItPmZsYWdzICYgKFNFUlZfTElURVJBTF9BRERSRVNTIHwgU0VSVl9MT09QKSkpCisJICAgIGNvbnRpbnVlOworCSAgICAKKwkgIHJldHJ5OgorCSAgICAvKiBtYXkgbmVlZCB0byBtYWtlIG5ldyBjb25uZWN0aW9uLiAqLworCSAgICBpZiAoc2VydmVyLT50Y3BmZCA9PSAtMSkKKwkgICAgICB7CisJCWlmICgoc2VydmVyLT50Y3BmZCA9IHNvY2tldChzZXJ2ZXItPmFkZHIuc2Euc2FfZmFtaWx5LCBTT0NLX1NUUkVBTSwgMCkpID09IC0xKQorCQkgIGNvbnRpbnVlOyAvKiBObyBnb29kLCBuZXh0IHNlcnZlciAqLworCQkKKyNpZmRlZiBIQVZFX0NPTk5UUkFDSworCQkvKiBDb3B5IGNvbm5lY3Rpb24gbWFyayBvZiBpbmNvbWluZyBxdWVyeSB0byBvdXRnb2luZyBjb25uZWN0aW9uLiAqLworCQlpZiAoaGF2ZV9tYXJrKQorCQkgIHNldHNvY2tvcHQoc2VydmVyLT50Y3BmZCwgU09MX1NPQ0tFVCwgU09fTUFSSywgJm1hcmssIHNpemVvZih1bnNpZ25lZCBpbnQpKTsKKyNlbmRpZgkKKwkJCisJCWlmICghbG9jYWxfYmluZChzZXJ2ZXItPnRjcGZkLCAgJnNlcnZlci0+c291cmNlX2FkZHIsIHNlcnZlci0+aW50ZXJmYWNlLCAxKSB8fAorCQkgICAgY29ubmVjdChzZXJ2ZXItPnRjcGZkLCAmc2VydmVyLT5hZGRyLnNhLCBzYV9sZW4oJnNlcnZlci0+YWRkcikpID09IC0xKQorCQkgIHsKKwkJICAgIGNsb3NlKHNlcnZlci0+dGNwZmQpOworCQkgICAgc2VydmVyLT50Y3BmZCA9IC0xOworCQkgICAgY29udGludWU7IC8qIE5vIGdvb2QsIG5leHQgc2VydmVyICovCisJCSAgfQorCQkKKwkJc2VydmVyLT5mbGFncyAmPSB+U0VSVl9HT1RfVENQOworCSAgICAgIH0KKwkgIAorCSAgaWYgKCFyZWFkX3dyaXRlKHNlcnZlci0+dGNwZmQsIHBhY2tldCwgbSArIHNpemVvZih1MTYpLCAwKSB8fAorCSAgICAgICFyZWFkX3dyaXRlKHNlcnZlci0+dGNwZmQsICZjMSwgMSwgMSkgfHwKKwkgICAgICAhcmVhZF93cml0ZShzZXJ2ZXItPnRjcGZkLCAmYzIsIDEsIDEpIHx8CisJICAgICAgIXJlYWRfd3JpdGUoc2VydmVyLT50Y3BmZCwgcGF5bG9hZCwgKGMxIDw8IDgpIHwgYzIsIDEpKQorCSAgICB7CisJICAgICAgY2xvc2Uoc2VydmVyLT50Y3BmZCk7CisJICAgICAgc2VydmVyLT50Y3BmZCA9IC0xOworCSAgICAgIC8qIFdlIGdldCBkYXRhIHRoZW4gRU9GLCByZW9wZW4gY29ubmVjdGlvbiB0byBzYW1lIHNlcnZlciwKKwkJIGVsc2UgdHJ5IG5leHQuIFRoaXMgYXZvaWRzIERvUyBmcm9tIGEgc2VydmVyIHdoaWNoIGFjY2VwdHMKKwkJIGNvbm5lY3Rpb25zIGFuZCB0aGVuIGNsb3NlcyB0aGVtLiAqLworCSAgICAgIGlmIChzZXJ2ZXItPmZsYWdzICYgU0VSVl9HT1RfVENQKQorCQlnb3RvIHJldHJ5OworCSAgICAgIGVsc2UKKwkJY29udGludWU7CisJICAgIH0KKwkgIAorCSAgc2VydmVyLT5mbGFncyB8PSBTRVJWX0dPVF9UQ1A7CisJICAKKwkgIG0gPSAoYzEgPDwgOCkgfCBjMjsKKwkgIG5ld19zdGF0dXMgPSB0Y3Bfa2V5X3JlY3Vyc2Uobm93LCBuZXdfc3RhdHVzLCBuZXdfaGVhZGVyLCBtLCBjbGFzcywgbmFtZSwga2V5bmFtZSwgc2VydmVyLCBoYXZlX21hcmssIG1hcmssIGtleWNvdW50KTsKKwkgIGJyZWFrOworCX0KKyAgICAgIAorICAgICAgaWYgKG5ld19zdGF0dXMgIT0gU1RBVF9PSykKKwlicmVhazsKKyAgICB9CisgICAgCisgIGlmIChwYWNrZXQpCisgICAgZnJlZShwYWNrZXQpOworICAgIAorICByZXR1cm4gbmV3X3N0YXR1czsKK30KKyNlbmRpZgorCisKKy8qIFRoZSBkYWVtb24gZm9ya3MgYmVmb3JlIGNhbGxpbmcgdGhpczogaXQgc2hvdWxkIGRlYWwgd2l0aCBvbmUgY29ubmVjdGlvbiwKKyAgIGJsb2NraW5nIGFzIG5lY2Vzc2FyeSwgYW5kIHRoZW4gcmV0dXJuLiBOb3RlLCBuZWVkIHRvIGJlIGEgYml0IGNhcmVmdWwKKyAgIGFib3V0IHJlc291cmNlcyBmb3IgZGVidWcgbW9kZSwgd2hlbiB0aGUgZm9yayBpcyBzdXBwcmVzc2VkOiB0aGF0J3MKKyAgIGRvbmUgYnkgdGhlIGNhbGxlci4gKi8KK3Vuc2lnbmVkIGNoYXIgKnRjcF9yZXF1ZXN0KGludCBjb25mZCwgdGltZV90IG5vdywKKwkJCSAgIHVuaW9uIG15c29ja2FkZHIgKmxvY2FsX2FkZHIsIHN0cnVjdCBpbl9hZGRyIG5ldG1hc2ssIGludCBhdXRoX2RucykKK3sKKyAgc2l6ZV90IHNpemUgPSAwOworICBpbnQgbm9yZWJpbmQgPSAwOworI2lmZGVmIEhBVkVfQVVUSAorICBpbnQgbG9jYWxfYXV0aCA9IDA7CisjZW5kaWYKKyAgaW50IGNoZWNraW5nX2Rpc2FibGVkLCBkb19iaXQsIGFkZGVkX3BoZWFkZXIgPSAwLCBoYXZlX3BzZXVkb2hlYWRlciA9IDA7CisgIGludCBjaGVja19zdWJuZXQsIG5vX2NhY2hlX2Ruc3NlYyA9IDAsIGNhY2hlX3NlY3VyZSA9IDAsIGJvZ3VzYW5zd2VyID0gMDsKKyAgc2l6ZV90IG07CisgIHVuc2lnbmVkIHNob3J0IHF0eXBlOworICB1bnNpZ25lZCBpbnQgZ290bmFtZTsKKyAgdW5zaWduZWQgY2hhciBjMSwgYzI7CisgIC8qIE1heCBUQ1AgcGFja2V0ICsgc2xvcCArIHNpemUgKi8KKyAgdW5zaWduZWQgY2hhciAqcGFja2V0ID0gd2hpbmVfbWFsbG9jKDY1NTM2ICsgTUFYRE5BTUUgKyBSUkZJWEVEU1ogKyBzaXplb2YodTE2KSk7CisgIHVuc2lnbmVkIGNoYXIgKnBheWxvYWQgPSAmcGFja2V0WzJdOworICAvKiBsYXJnZXN0IGZpZWxkIGluIGhlYWRlciBpcyAxNi1iaXRzLCBzbyB0aGlzIGlzIHN0aWxsIHN1ZmZpY2llbnRseSBhbGlnbmVkICovCisgIHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIgPSAoc3RydWN0IGRuc19oZWFkZXIgKilwYXlsb2FkOworICB1MTYgKmxlbmd0aCA9ICh1MTYgKilwYWNrZXQ7CisgIHN0cnVjdCBzZXJ2ZXIgKmxhc3Rfc2VydmVyOworICBzdHJ1Y3QgaW5fYWRkciBkc3RfYWRkcl80OworICB1bmlvbiBteXNvY2thZGRyIHBlZXJfYWRkcjsKKyAgc29ja2xlbl90IHBlZXJfbGVuID0gc2l6ZW9mKHVuaW9uIG15c29ja2FkZHIpOworICBpbnQgcXVlcnlfY291bnQgPSAwOworICB1bnNpZ25lZCBjaGFyICpwaGVhZGVyOworICB1bnNpZ25lZCBpbnQgbWFyayA9IDA7CisgIGludCBoYXZlX21hcmsgPSAwOworCisgICh2b2lkKW1hcms7CisgICh2b2lkKWhhdmVfbWFyazsKKworICBpZiAoZ2V0cGVlcm5hbWUoY29uZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmcGVlcl9hZGRyLCAmcGVlcl9sZW4pID09IC0xKQorICAgIHJldHVybiBwYWNrZXQ7CisKKyNpZmRlZiBIQVZFX0NPTk5UUkFDSworICAvKiBHZXQgY29ubmVjdGlvbiBtYXJrIG9mIGluY29taW5nIHF1ZXJ5IHRvIHNldCBvbiBvdXRnb2luZyBjb25uZWN0aW9ucy4gKi8KKyAgaWYgKG9wdGlvbl9ib29sKE9QVF9DT05OVFJBQ0spKQorICAgIHsKKyAgICAgIHN0cnVjdCBhbGxfYWRkciBsb2NhbDsKKyNpZmRlZiBIQVZFX0lQVjYJCSAgICAgIAorICAgICAgaWYgKGxvY2FsX2FkZHItPnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikKKwlsb2NhbC5hZGRyLmFkZHI2ID0gbG9jYWxfYWRkci0+aW42LnNpbjZfYWRkcjsKKyAgICAgIGVsc2UKKyNlbmRpZgorCWxvY2FsLmFkZHIuYWRkcjQgPSBsb2NhbF9hZGRyLT5pbi5zaW5fYWRkcjsKKyAgICAgIAorICAgICAgaGF2ZV9tYXJrID0gZ2V0X2luY29taW5nX21hcmsoJnBlZXJfYWRkciwgJmxvY2FsLCAxLCAmbWFyayk7CisgICAgfQorI2VuZGlmCQorCisgIC8qIFdlIGNhbiBiZSBjb25maWd1cmVkIHRvIG9ubHkgYWNjZXB0IHF1ZXJpZXMgZnJvbSBhdC1tb3N0LW9uZS1ob3AtYXdheSBhZGRyZXNzZXMuICovCisgIGlmIChvcHRpb25fYm9vbChPUFRfTE9DQUxfU0VSVklDRSkpCisgICAgeworICAgICAgc3RydWN0IGFkZHJsaXN0ICphZGRyOworI2lmZGVmIEhBVkVfSVBWNgorICAgICAgaWYgKHBlZXJfYWRkci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIAorCXsKKwkgIGZvciAoYWRkciA9IGRhZW1vbi0+aW50ZXJmYWNlX2FkZHJzOyBhZGRyOyBhZGRyID0gYWRkci0+bmV4dCkKKwkgICAgaWYgKChhZGRyLT5mbGFncyAmIEFERFJMSVNUX0lQVjYpICYmCisJCWlzX3NhbWVfbmV0NigmYWRkci0+YWRkci5hZGRyLmFkZHI2LCAmcGVlcl9hZGRyLmluNi5zaW42X2FkZHIsIGFkZHItPnByZWZpeGxlbikpCisJICAgICAgYnJlYWs7CisJfQorICAgICAgZWxzZQorI2VuZGlmCisJeworCSAgc3RydWN0IGluX2FkZHIgbmV0bWFzazsKKwkgIGZvciAoYWRkciA9IGRhZW1vbi0+aW50ZXJmYWNlX2FkZHJzOyBhZGRyOyBhZGRyID0gYWRkci0+bmV4dCkKKwkgICAgeworCSAgICAgIG5ldG1hc2suc19hZGRyID0gaHRvbmwofihpbl9hZGRyX3QpMCA8PCAoMzIgLSBhZGRyLT5wcmVmaXhsZW4pKTsKKwkgICAgICBpZiAoIShhZGRyLT5mbGFncyAmIEFERFJMSVNUX0lQVjYpICYmIAorCQkgIGlzX3NhbWVfbmV0KGFkZHItPmFkZHIuYWRkci5hZGRyNCwgcGVlcl9hZGRyLmluLnNpbl9hZGRyLCBuZXRtYXNrKSkKKwkJYnJlYWs7CisJICAgIH0KKwl9CisgICAgICBpZiAoIWFkZHIpCisJeworCSAgbXlfc3lzbG9nKExPR19XQVJOSU5HLCBfKCJJZ25vcmluZyBxdWVyeSBmcm9tIG5vbi1sb2NhbCBuZXR3b3JrIikpOworCSAgcmV0dXJuIHBhY2tldDsKKwl9CisgICAgfQorCisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIGlmIChxdWVyeV9jb3VudCA9PSBUQ1BfTUFYX1FVRVJJRVMgfHwKKwkgICFwYWNrZXQgfHwKKwkgICFyZWFkX3dyaXRlKGNvbmZkLCAmYzEsIDEsIDEpIHx8ICFyZWFkX3dyaXRlKGNvbmZkLCAmYzIsIDEsIDEpIHx8CisJICAhKHNpemUgPSBjMSA8PCA4IHwgYzIpIHx8CisJICAhcmVhZF93cml0ZShjb25mZCwgcGF5bG9hZCwgc2l6ZSwgMSkpCisgICAgICAgCXJldHVybiBwYWNrZXQ7IAorICAKKyAgICAgIGlmIChzaXplIDwgKGludClzaXplb2Yoc3RydWN0IGRuc19oZWFkZXIpKQorCWNvbnRpbnVlOworCisgICAgICAvKiBDbGVhciBidWZmZXIgYmV5b25kIHJlcXVlc3QgdG8gYXZvaWQgcmlzayBvZgorCSBpbmZvcm1hdGlvbiBkaXNjbG9zdXJlLiAqLworICAgICAgbWVtc2V0KHBheWxvYWQgKyBzaXplLCAwLCA2NTUzNiAtIHNpemUpOworICAgICAgCisgICAgICBxdWVyeV9jb3VudCsrOworCisgICAgICAvKiBsb2dfcXVlcnkgZ2V0cyBjYWxsZWQgaW5kaXJlY3RseSBhbGwgb3ZlciB0aGUgcGxhY2UsIHNvIAorCSBwYXNzIHRoZXNlIGluIGdsb2JhbCB2YXJpYWJsZXMgLSBzb3JyeS4gKi8KKyAgICAgIGRhZW1vbi0+bG9nX2Rpc3BsYXlfaWQgPSArK2RhZW1vbi0+bG9nX2lkOworICAgICAgZGFlbW9uLT5sb2dfc291cmNlX2FkZHIgPSAmcGVlcl9hZGRyOworICAgICAgCisgICAgICAvKiBzYXZlIHN0YXRlIG9mICJjZCIgZmxhZyBpbiBxdWVyeSAqLworICAgICAgaWYgKChjaGVja2luZ19kaXNhYmxlZCA9IGhlYWRlci0+aGI0ICYgSEI0X0NEKSkKKwlub19jYWNoZV9kbnNzZWMgPSAxOworICAgICAgIAorICAgICAgaWYgKChnb3RuYW1lID0gZXh0cmFjdF9yZXF1ZXN0KGhlYWRlciwgKHVuc2lnbmVkIGludClzaXplLCBkYWVtb24tPm5hbWVidWZmLCAmcXR5cGUpKSkKKwl7CisjaWZkZWYgSEFWRV9BVVRICisJICBzdHJ1Y3QgYXV0aF96b25lICp6b25lOworI2VuZGlmCisJICBjaGFyICp0eXBlcyA9IHF1ZXJ5c3RyKGF1dGhfZG5zID8gImF1dGgiIDogInF1ZXJ5IiwgcXR5cGUpOworCSAgCisJICBpZiAocGVlcl9hZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKSAKKwkgICAgbG9nX3F1ZXJ5KEZfUVVFUlkgfCBGX0lQVjQgfCBGX0ZPUldBUkQsIGRhZW1vbi0+bmFtZWJ1ZmYsIAorCQkgICAgICAoc3RydWN0IGFsbF9hZGRyICopJnBlZXJfYWRkci5pbi5zaW5fYWRkciwgdHlwZXMpOworI2lmZGVmIEhBVkVfSVBWNgorCSAgZWxzZQorCSAgICBsb2dfcXVlcnkoRl9RVUVSWSB8IEZfSVBWNiB8IEZfRk9SV0FSRCwgZGFlbW9uLT5uYW1lYnVmZiwgCisJCSAgICAgIChzdHJ1Y3QgYWxsX2FkZHIgKikmcGVlcl9hZGRyLmluNi5zaW42X2FkZHIsIHR5cGVzKTsKKyNlbmRpZgorCSAgCisjaWZkZWYgSEFWRV9BVVRICisJICAvKiBmaW5kIHF1ZXJpZXMgZm9yIHpvbmVzIHdlJ3JlIGF1dGhvcml0YXRpdmUgZm9yLCBhbmQgYW5zd2VyIHRoZW0gZGlyZWN0bHkgKi8KKwkgIGlmICghYXV0aF9kbnMgJiYgIW9wdGlvbl9ib29sKE9QVF9MT0NBTElTRSkpCisJICAgIGZvciAoem9uZSA9IGRhZW1vbi0+YXV0aF96b25lczsgem9uZTsgem9uZSA9IHpvbmUtPm5leHQpCisJICAgICAgaWYgKGluX3pvbmUoem9uZSwgZGFlbW9uLT5uYW1lYnVmZiwgTlVMTCkpCisJCXsKKwkJICBhdXRoX2RucyA9IDE7CisJCSAgbG9jYWxfYXV0aCA9IDE7CisJCSAgYnJlYWs7CisJCX0KKyNlbmRpZgorCX0KKyAgICAgIAorICAgICAgaWYgKGxvY2FsX2FkZHItPnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKQorCWRzdF9hZGRyXzQgPSBsb2NhbF9hZGRyLT5pbi5zaW5fYWRkcjsKKyAgICAgIGVsc2UKKwlkc3RfYWRkcl80LnNfYWRkciA9IDA7CisgICAgICAKKyAgICAgIGRvX2JpdCA9IDA7CisKKyAgICAgIGlmIChmaW5kX3BzZXVkb2hlYWRlcihoZWFkZXIsIChzaXplX3Qpc2l6ZSwgTlVMTCwgJnBoZWFkZXIsIE5VTEwsIE5VTEwpKQorCXsgCisJICB1bnNpZ25lZCBzaG9ydCBmbGFnczsKKwkgIAorCSAgaGF2ZV9wc2V1ZG9oZWFkZXIgPSAxOworCSAgcGhlYWRlciArPSA0OyAvKiB1ZHBfc2l6ZSwgZXh0X3Jjb2RlICovCisJICBHRVRTSE9SVChmbGFncywgcGhlYWRlcik7CisgICAgICAKKwkgIGlmIChmbGFncyAmIDB4ODAwMCkKKwkgICAgZG9fYml0ID0gMTsgLyogZG8gYml0ICovIAorCX0KKworI2lmZGVmIEhBVkVfQVVUSAorICAgICAgaWYgKGF1dGhfZG5zKQorCW0gPSBhbnN3ZXJfYXV0aChoZWFkZXIsICgoY2hhciAqKSBoZWFkZXIpICsgNjU1MzYsIChzaXplX3Qpc2l6ZSwgbm93LCAmcGVlcl9hZGRyLCAKKwkJCWxvY2FsX2F1dGgsIGRvX2JpdCwgaGF2ZV9wc2V1ZG9oZWFkZXIpOworICAgICAgZWxzZQorI2VuZGlmCisJeworCSAgIGludCBhZF9yZXFkID0gZG9fYml0OworCSAgIC8qIFJGQyA2ODQwIDUuNyAqLworCSAgIGlmIChoZWFkZXItPmhiNCAmIEhCNF9BRCkKKwkgICAgIGFkX3JlcWQgPSAxOworCSAgIAorCSAgIC8qIG0gPiAwIGlmIGFuc3dlcmVkIGZyb20gY2FjaGUgKi8KKwkgICBtID0gYW5zd2VyX3JlcXVlc3QoaGVhZGVyLCAoKGNoYXIgKikgaGVhZGVyKSArIDY1NTM2LCAoc2l6ZV90KXNpemUsIAorCQkJICAgICAgZHN0X2FkZHJfNCwgbmV0bWFzaywgbm93LCBhZF9yZXFkLCBkb19iaXQsIGhhdmVfcHNldWRvaGVhZGVyKTsKKwkgIAorCSAgLyogRG8gdGhpcyBieSBzdGVhbSBub3cgd2UncmUgbm90IGluIHRoZSBzZWxlY3QoKSBsb29wICovCisJICBjaGVja19sb2dfd3JpdGVyKDEpOyAKKwkgIAorCSAgaWYgKG0gPT0gMCkKKwkgICAgeworCSAgICAgIHVuc2lnbmVkIGludCBmbGFncyA9IDA7CisJICAgICAgc3RydWN0IGFsbF9hZGRyICphZGRycCA9IE5VTEw7CisJICAgICAgaW50IHR5cGUgPSBTRVJWX0RPX0ROU1NFQzsKKwkgICAgICBjaGFyICpkb21haW4gPSBOVUxMOworCSAgICAgIHNpemVfdCBuZXdfc2l6ZSA9IGFkZF9lZG5zMF9jb25maWcoaGVhZGVyLCBzaXplLCAoKHVuc2lnbmVkIGNoYXIgKikgaGVhZGVyKSArIDY1NTM2LCAmcGVlcl9hZGRyLCBub3csICZjaGVja19zdWJuZXQpOworCisJICAgICAgaWYgKHNpemUgIT0gbmV3X3NpemUpCisJCXsKKwkJICBhZGRlZF9waGVhZGVyID0gMTsKKwkJICBzaXplID0gbmV3X3NpemU7CisJCX0KKwkgICAgICAKKwkgICAgICBpZiAoZ290bmFtZSkKKwkJZmxhZ3MgPSBzZWFyY2hfc2VydmVycyhub3csICZhZGRycCwgZ290bmFtZSwgZGFlbW9uLT5uYW1lYnVmZiwgJnR5cGUsICZkb21haW4sICZub3JlYmluZCk7CisJICAgICAgCisJICAgICAgdHlwZSAmPSB+U0VSVl9ET19ETlNTRUM7CisJICAgICAgCisJICAgICAgaWYgKHR5cGUgIT0gMCAgfHwgb3B0aW9uX2Jvb2woT1BUX09SREVSKSB8fCAhZGFlbW9uLT5sYXN0X3NlcnZlcikKKwkJbGFzdF9zZXJ2ZXIgPSBkYWVtb24tPnNlcnZlcnM7CisJICAgICAgZWxzZQorCQlsYXN0X3NlcnZlciA9IGRhZW1vbi0+bGFzdF9zZXJ2ZXI7CisJICAgICAgCisJICAgICAgaWYgKCFmbGFncyAmJiBsYXN0X3NlcnZlcikKKwkJeworCQkgIHN0cnVjdCBzZXJ2ZXIgKmZpcnN0c2VuZHRvID0gTlVMTDsKKyNpZmRlZiBIQVZFX0ROU1NFQworCQkgIHVuc2lnbmVkIGNoYXIgKm5ld2hhc2gsIGhhc2hbSEFTSF9TSVpFXTsKKwkJICBpZiAoKG5ld2hhc2ggPSBoYXNoX3F1ZXN0aW9ucyhoZWFkZXIsICh1bnNpZ25lZCBpbnQpc2l6ZSwgZGFlbW9uLT5uYW1lYnVmZikpKQorCQkgICAgbWVtY3B5KGhhc2gsIG5ld2hhc2gsIEhBU0hfU0laRSk7CisJCSAgZWxzZQorCQkgICAgbWVtc2V0KGhhc2gsIDAsIEhBU0hfU0laRSk7CisjZWxzZQorCQkgIHVuc2lnbmVkIGludCBjcmMgPSBxdWVzdGlvbnNfY3JjKGhlYWRlciwgKHVuc2lnbmVkIGludClzaXplLCBkYWVtb24tPm5hbWVidWZmKTsKKyNlbmRpZgkJICAKKwkJICAvKiBMb29wIHJvdW5kIGF2YWlsYWJsZSBzZXJ2ZXJzIHVudGlsIHdlIHN1Y2NlZWQgaW4gY29ubmVjdGluZyB0byBvbmUuCisJCSAgICAgTm90ZSB0aGF0IHRoaXMgY29kZSBzdWJ0bHkgZW5zdXJlcyB0aGF0IGNvbnNlY3V0aXZlIHF1ZXJpZXMgb24gdGhpcyBjb25uZWN0aW9uCisJCSAgICAgd2hpY2ggY2FuIGdvIHRvIHRoZSBzYW1lIHNlcnZlciwgZG8gc28uICovCisJCSAgd2hpbGUgKDEpIAorCQkgICAgeworCQkgICAgICBpZiAoIWZpcnN0c2VuZHRvKQorCQkJZmlyc3RzZW5kdG8gPSBsYXN0X3NlcnZlcjsKKwkJICAgICAgZWxzZQorCQkJeworCQkJICBpZiAoIShsYXN0X3NlcnZlciA9IGxhc3Rfc2VydmVyLT5uZXh0KSkKKwkJCSAgICBsYXN0X3NlcnZlciA9IGRhZW1vbi0+c2VydmVyczsKKwkJCSAgCisJCQkgIGlmIChsYXN0X3NlcnZlciA9PSBmaXJzdHNlbmR0bykKKwkJCSAgICBicmVhazsKKwkJCX0KKwkJICAgICAgCisJCSAgICAgIC8qIHNlcnZlciBmb3Igd3JvbmcgZG9tYWluICovCisJCSAgICAgIGlmICh0eXBlICE9IChsYXN0X3NlcnZlci0+ZmxhZ3MgJiBTRVJWX1RZUEUpIHx8CisJCQkgICh0eXBlID09IFNFUlZfSEFTX0RPTUFJTiAmJiAhaG9zdG5hbWVfaXNlcXVhbChkb21haW4sIGxhc3Rfc2VydmVyLT5kb21haW4pKSB8fAorCQkJICAobGFzdF9zZXJ2ZXItPmZsYWdzICYgKFNFUlZfTElURVJBTF9BRERSRVNTIHwgU0VSVl9MT09QKSkpCisJCQljb250aW51ZTsKKworCQkgICAgcmV0cnk6CisJCSAgICAgIGlmIChsYXN0X3NlcnZlci0+dGNwZmQgPT0gLTEpCisJCQl7CisJCQkgIGlmICgobGFzdF9zZXJ2ZXItPnRjcGZkID0gc29ja2V0KGxhc3Rfc2VydmVyLT5hZGRyLnNhLnNhX2ZhbWlseSwgU09DS19TVFJFQU0sIDApKSA9PSAtMSkKKwkJCSAgICBjb250aW51ZTsKKwkJCSAgCisjaWZkZWYgSEFWRV9DT05OVFJBQ0sKKwkJCSAgLyogQ29weSBjb25uZWN0aW9uIG1hcmsgb2YgaW5jb21pbmcgcXVlcnkgdG8gb3V0Z29pbmcgY29ubmVjdGlvbi4gKi8KKwkJCSAgaWYgKGhhdmVfbWFyaykKKwkJCSAgICBzZXRzb2Nrb3B0KGxhc3Rfc2VydmVyLT50Y3BmZCwgU09MX1NPQ0tFVCwgU09fTUFSSywgJm1hcmssIHNpemVvZih1bnNpZ25lZCBpbnQpKTsKKyNlbmRpZgkKKwkJICAgICAgCisJCQkgIGlmICgoIWxvY2FsX2JpbmQobGFzdF9zZXJ2ZXItPnRjcGZkLCAgJmxhc3Rfc2VydmVyLT5zb3VyY2VfYWRkciwgbGFzdF9zZXJ2ZXItPmludGVyZmFjZSwgMSkgfHwKKwkJCSAgICAgICBjb25uZWN0KGxhc3Rfc2VydmVyLT50Y3BmZCwgJmxhc3Rfc2VydmVyLT5hZGRyLnNhLCBzYV9sZW4oJmxhc3Rfc2VydmVyLT5hZGRyKSkgPT0gLTEpKQorCQkJICAgIHsKKwkJCSAgICAgIGNsb3NlKGxhc3Rfc2VydmVyLT50Y3BmZCk7CisJCQkgICAgICBsYXN0X3NlcnZlci0+dGNwZmQgPSAtMTsKKwkJCSAgICAgIGNvbnRpbnVlOworCQkJICAgIH0KKwkJCSAgCisJCQkgIGxhc3Rfc2VydmVyLT5mbGFncyAmPSB+U0VSVl9HT1RfVENQOworCQkJfQorCQkgICAgICAKKyNpZmRlZiBIQVZFX0ROU1NFQworCQkgICAgICBpZiAob3B0aW9uX2Jvb2woT1BUX0ROU1NFQ19WQUxJRCkgJiYgKGxhc3Rfc2VydmVyLT5mbGFncyAmIFNFUlZfRE9fRE5TU0VDKSkKKwkJCXsKKwkJCSAgbmV3X3NpemUgPSBhZGRfZG9fYml0KGhlYWRlciwgc2l6ZSwgKCh1bnNpZ25lZCBjaGFyICopIGhlYWRlcikgKyA2NTUzNik7CisJCQkgIAorCQkJICBpZiAoc2l6ZSAhPSBuZXdfc2l6ZSkKKwkJCSAgICB7CisJCQkgICAgICBhZGRlZF9waGVhZGVyID0gMTsKKwkJCSAgICAgIHNpemUgPSBuZXdfc2l6ZTsKKwkJCSAgICB9CisJCQkgIAorCQkJICAvKiBGb3IgZGVidWdnaW5nLCBzZXQgQ2hlY2tpbmcgRGlzYWJsZWQsIG90aGVyd2lzZSwgaGF2ZSB0aGUgdXBzdHJlYW0gY2hlY2sgdG9vLAorCQkJICAgICB0aGlzIGFsbG93cyBpdCB0byBzZWxlY3QgYXV0aCBzZXJ2ZXJzIHdoZW4gb25lIGlzIHJldHVybmluZyBiYWQgZGF0YS4gKi8KKwkJCSAgaWYgKG9wdGlvbl9ib29sKE9QVF9ETlNTRUNfREVCVUcpKQorCQkJICAgIGhlYWRlci0+aGI0IHw9IEhCNF9DRDsKKwkJCX0KKyNlbmRpZgorCQkJCQkgICAgICAKKwkJICAgICAgKmxlbmd0aCA9IGh0b25zKHNpemUpOworCisJCSAgICAgIC8qIGdldCBxdWVyeSBuYW1lIGFnYWluIGZvciBsb2dnaW5nIC0gbWF5IGhhdmUgYmVlbiBvdmVyd3JpdHRlbiAqLworCQkgICAgICBpZiAoIShnb3RuYW1lID0gZXh0cmFjdF9yZXF1ZXN0KGhlYWRlciwgKHVuc2lnbmVkIGludClzaXplLCBkYWVtb24tPm5hbWVidWZmLCAmcXR5cGUpKSkKKwkJCXN0cmNweShkYWVtb24tPm5hbWVidWZmLCAicXVlcnkiKTsKKwkJICAgICAgCisJCSAgICAgIGlmICghcmVhZF93cml0ZShsYXN0X3NlcnZlci0+dGNwZmQsIHBhY2tldCwgc2l6ZSArIHNpemVvZih1MTYpLCAwKSB8fAorCQkJICAhcmVhZF93cml0ZShsYXN0X3NlcnZlci0+dGNwZmQsICZjMSwgMSwgMSkgfHwKKwkJCSAgIXJlYWRfd3JpdGUobGFzdF9zZXJ2ZXItPnRjcGZkLCAmYzIsIDEsIDEpIHx8CisJCQkgICFyZWFkX3dyaXRlKGxhc3Rfc2VydmVyLT50Y3BmZCwgcGF5bG9hZCwgKGMxIDw8IDgpIHwgYzIsIDEpKQorCQkJeworCQkJICBjbG9zZShsYXN0X3NlcnZlci0+dGNwZmQpOworCQkJICBsYXN0X3NlcnZlci0+dGNwZmQgPSAtMTsKKwkJCSAgLyogV2UgZ2V0IGRhdGEgdGhlbiBFT0YsIHJlb3BlbiBjb25uZWN0aW9uIHRvIHNhbWUgc2VydmVyLAorCQkJICAgICBlbHNlIHRyeSBuZXh0LiBUaGlzIGF2b2lkcyBEb1MgZnJvbSBhIHNlcnZlciB3aGljaCBhY2NlcHRzCisJCQkgICAgIGNvbm5lY3Rpb25zIGFuZCB0aGVuIGNsb3NlcyB0aGVtLiAqLworCQkJICBpZiAobGFzdF9zZXJ2ZXItPmZsYWdzICYgU0VSVl9HT1RfVENQKQorCQkJICAgIGdvdG8gcmV0cnk7CisJCQkgIGVsc2UKKwkJCSAgICBjb250aW51ZTsKKwkJCX0KKwkJICAgICAgCisJCSAgICAgIGxhc3Rfc2VydmVyLT5mbGFncyB8PSBTRVJWX0dPVF9UQ1A7CisKKwkJICAgICAgbSA9IChjMSA8PCA4KSB8IGMyOworCQkgICAgICAKKwkJICAgICAgaWYgKGxhc3Rfc2VydmVyLT5hZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKQorCQkJbG9nX3F1ZXJ5KEZfU0VSVkVSIHwgRl9JUFY0IHwgRl9GT1JXQVJELCBkYWVtb24tPm5hbWVidWZmLCAKKwkJCQkgIChzdHJ1Y3QgYWxsX2FkZHIgKikmbGFzdF9zZXJ2ZXItPmFkZHIuaW4uc2luX2FkZHIsIE5VTEwpOyAKKyNpZmRlZiBIQVZFX0lQVjYKKwkJICAgICAgZWxzZQorCQkJbG9nX3F1ZXJ5KEZfU0VSVkVSIHwgRl9JUFY2IHwgRl9GT1JXQVJELCBkYWVtb24tPm5hbWVidWZmLCAKKwkJCQkgIChzdHJ1Y3QgYWxsX2FkZHIgKikmbGFzdF9zZXJ2ZXItPmFkZHIuaW42LnNpbjZfYWRkciwgTlVMTCk7CisjZW5kaWYgCisKKyNpZmRlZiBIQVZFX0ROU1NFQworCQkgICAgICBpZiAob3B0aW9uX2Jvb2woT1BUX0ROU1NFQ19WQUxJRCkgJiYgIWNoZWNraW5nX2Rpc2FibGVkICYmIChsYXN0X3NlcnZlci0+ZmxhZ3MgJiBTRVJWX0RPX0ROU1NFQykpCisJCQl7CisJCQkgIGludCBrZXljb3VudCA9IEROU1NFQ19XT1JLOyAvKiBMaW1pdCB0byBudW1iZXIgb2YgRE5TU0VDIHF1ZXN0aW9ucywgdG8gY2F0Y2ggbG9vcHMgYW5kIGF2b2lkIGZpbGxpbmcgY2FjaGUuICovCisJCQkgIGludCBzdGF0dXMgPSB0Y3Bfa2V5X3JlY3Vyc2Uobm93LCBTVEFUX09LLCBoZWFkZXIsIG0sIDAsIGRhZW1vbi0+bmFtZWJ1ZmYsIGRhZW1vbi0+a2V5bmFtZSwgCisJCQkJCQkgICAgICAgbGFzdF9zZXJ2ZXIsIGhhdmVfbWFyaywgbWFyaywgJmtleWNvdW50KTsKKwkJCSAgY2hhciAqcmVzdWx0LCAqZG9tYWluID0gInJlc3VsdCI7CisJCQkgIAorCQkJICBpZiAoc3RhdHVzID09IFNUQVRfQUJBTkRPTkVEKQorCQkJICAgIHsKKwkJCSAgICAgIHJlc3VsdCA9ICJBQkFORE9ORUQiOworCQkJICAgICAgc3RhdHVzID0gU1RBVF9CT0dVUzsKKwkJCSAgICB9CisJCQkgIGVsc2UKKwkJCSAgICByZXN1bHQgPSAoc3RhdHVzID09IFNUQVRfU0VDVVJFID8gIlNFQ1VSRSIgOiAoc3RhdHVzID09IFNUQVRfSU5TRUNVUkUgPyAiSU5TRUNVUkUiIDogIkJPR1VTIikpOworCQkJICAKKwkJCSAgaWYgKHN0YXR1cyA9PSBTVEFUX0JPR1VTICYmIGV4dHJhY3RfcmVxdWVzdChoZWFkZXIsIG0sIGRhZW1vbi0+bmFtZWJ1ZmYsIE5VTEwpKQorCQkJICAgIGRvbWFpbiA9IGRhZW1vbi0+bmFtZWJ1ZmY7CisKKwkJCSAgbG9nX3F1ZXJ5KEZfS0VZVEFHIHwgRl9TRUNTVEFULCBkb21haW4sIE5VTEwsIHJlc3VsdCk7CisJCQkgIAorCQkJICBpZiAoc3RhdHVzID09IFNUQVRfQk9HVVMpCisJCQkgICAgeworCQkJICAgICAgbm9fY2FjaGVfZG5zc2VjID0gMTsKKwkJCSAgICAgIGJvZ3VzYW5zd2VyID0gMTsKKwkJCSAgICB9CisKKwkJCSAgaWYgKHN0YXR1cyA9PSBTVEFUX1NFQ1VSRSkKKwkJCSAgICBjYWNoZV9zZWN1cmUgPSAxOworCQkJfQorI2VuZGlmCisKKwkJICAgICAgLyogcmVzdG9yZSBDRCBiaXQgdG8gdGhlIHZhbHVlIGluIHRoZSBxdWVyeSAqLworCQkgICAgICBpZiAoY2hlY2tpbmdfZGlzYWJsZWQpCisJCQloZWFkZXItPmhiNCB8PSBIQjRfQ0Q7CisJCSAgICAgIGVsc2UKKwkJCWhlYWRlci0+aGI0ICY9IH5IQjRfQ0Q7CisJCSAgICAgIAorCQkgICAgICAvKiBUaGVyZSdzIG5vIHBvaW50IGluIHVwZGF0aW5nIHRoZSBjYWNoZSwgc2luY2UgdGhpcyBwcm9jZXNzIHdpbGwgZXhpdCBhbmQKKwkJCSBsb3NlIHRoZSBpbmZvcm1hdGlvbiBhZnRlciBhIGZldyBxdWVyaWVzLiBXZSBtYWtlIHRoaXMgY2FsbCBmb3IgdGhlIGFsaWFzIGFuZCAKKwkJCSBib2d1cy1ueGRvbWFpbiBzaWRlLWVmZmVjdHMuICovCisJCSAgICAgIC8qIElmIHRoZSBjcmMgb2YgdGhlIHF1ZXN0aW9uIHNlY3Rpb24gZG9lc24ndCBtYXRjaCB0aGUgY3JjIHdlIHNlbnQsIHRoZW4KKwkJCSBzb21lb25lIG1pZ2h0IGJlIGF0dGVtcHRpbmcgdG8gaW5zZXJ0IGJvZ3VzIHZhbHVlcyBpbnRvIHRoZSBjYWNoZSBieSAKKwkJCSBzZW5kaW5nIHJlcGxpZXMgY29udGFpbmluZyBxdWVzdGlvbnMgYW5kIGJvZ3VzIGFuc3dlcnMuICovCisjaWZkZWYgSEFWRV9ETlNTRUMKKwkJICAgICAgbmV3aGFzaCA9IGhhc2hfcXVlc3Rpb25zKGhlYWRlciwgKHVuc2lnbmVkIGludCltLCBkYWVtb24tPm5hbWVidWZmKTsKKwkJICAgICAgaWYgKCFuZXdoYXNoIHx8IG1lbWNtcChoYXNoLCBuZXdoYXNoLCBIQVNIX1NJWkUpICE9IDApCisJCQl7IAorCQkJICBtID0gMDsKKwkJCSAgYnJlYWs7CisJCQl9CisjZWxzZQkJCSAgCisJCSAgICAgIGlmIChjcmMgIT0gcXVlc3Rpb25zX2NyYyhoZWFkZXIsICh1bnNpZ25lZCBpbnQpbSwgZGFlbW9uLT5uYW1lYnVmZikpCisJCQl7CisJCQkgIG0gPSAwOworCQkJICBicmVhazsKKwkJCX0KKyNlbmRpZgorCisJCSAgICAgIG0gPSBwcm9jZXNzX3JlcGx5KGhlYWRlciwgbm93LCBsYXN0X3NlcnZlciwgKHVuc2lnbmVkIGludCltLCAKKwkJCQkJb3B0aW9uX2Jvb2woT1BUX05PX1JFQklORCkgJiYgIW5vcmViaW5kLCBub19jYWNoZV9kbnNzZWMsIGNhY2hlX3NlY3VyZSwgYm9ndXNhbnN3ZXIsCisJCQkJCWFkX3JlcWQsIGRvX2JpdCwgYWRkZWRfcGhlYWRlciwgY2hlY2tfc3VibmV0LCAmcGVlcl9hZGRyKTsgCisJCSAgICAgIAorCQkgICAgICBicmVhazsKKwkJICAgIH0KKwkJfQorCQorCSAgICAgIC8qIEluIGNhc2Ugb2YgbG9jYWwgYW5zd2VyIG9yIG5vIGNvbm5lY3Rpb25zIG1hZGUuICovCisJICAgICAgaWYgKG0gPT0gMCkKKwkJbSA9IHNldHVwX3JlcGx5KGhlYWRlciwgKHVuc2lnbmVkIGludClzaXplLCBhZGRycCwgZmxhZ3MsIGRhZW1vbi0+bG9jYWxfdHRsKTsKKwkgICAgfQorCX0KKwkgIAorICAgICAgY2hlY2tfbG9nX3dyaXRlcigxKTsKKyAgICAgIAorICAgICAgKmxlbmd0aCA9IGh0b25zKG0pOworICAgICAgICAgICAKKyAgICAgIGlmIChtID09IDAgfHwgIXJlYWRfd3JpdGUoY29uZmQsIHBhY2tldCwgbSArIHNpemVvZih1MTYpLCAwKSkKKwlyZXR1cm4gcGFja2V0OworICAgIH0KK30KKworc3RhdGljIHN0cnVjdCBmcmVjICphbGxvY2F0ZV9mcmVjKHRpbWVfdCBub3cpCit7CisgIHN0cnVjdCBmcmVjICpmOworICAKKyAgaWYgKChmID0gKHN0cnVjdCBmcmVjICopd2hpbmVfbWFsbG9jKHNpemVvZihzdHJ1Y3QgZnJlYykpKSkKKyAgICB7CisgICAgICBmLT5uZXh0ID0gZGFlbW9uLT5mcmVjX2xpc3Q7CisgICAgICBmLT50aW1lID0gbm93OworICAgICAgZi0+c2VudHRvID0gTlVMTDsKKyAgICAgIGYtPnJmZDQgPSBOVUxMOworICAgICAgZi0+ZmxhZ3MgPSAwOworI2lmZGVmIEhBVkVfSVBWNgorICAgICAgZi0+cmZkNiA9IE5VTEw7CisjZW5kaWYKKyNpZmRlZiBIQVZFX0ROU1NFQworICAgICAgZi0+ZGVwZW5kZW50ID0gTlVMTDsKKyAgICAgIGYtPmJsb2NraW5nX3F1ZXJ5ID0gTlVMTDsKKyAgICAgIGYtPnN0YXNoID0gTlVMTDsKKyNlbmRpZgorICAgICAgZGFlbW9uLT5mcmVjX2xpc3QgPSBmOworICAgIH0KKworICByZXR1cm4gZjsKK30KKworc3RydWN0IHJhbmRmZCAqYWxsb2NhdGVfcmZkKGludCBmYW1pbHkpCit7CisgIHN0YXRpYyBpbnQgZmluZ2VyID0gMDsKKyAgaW50IGk7CisKKyAgLyogbGltaXQgdGhlIG51bWJlciBvZiBzb2NrZXRzIHdlIGhhdmUgb3BlbiB0byBhdm9pZCBzdGFydmF0aW9uIG9mIAorICAgICAoZWcpIFRGVFAuIE9uY2Ugd2UgaGF2ZSBhIHJlYXNvbmFibGUgbnVtYmVyLCByYW5kb21uZXNzIHNob3VsZCBiZSBPSyAqLworCisgIGZvciAoaSA9IDA7IGkgPCBSQU5ET01fU09DS1M7IGkrKykKKyAgICBpZiAoZGFlbW9uLT5yYW5kb21zb2Nrc1tpXS5yZWZjb3VudCA9PSAwKQorICAgICAgeworCWlmICgoZGFlbW9uLT5yYW5kb21zb2Nrc1tpXS5mZCA9IHJhbmRvbV9zb2NrKGZhbWlseSkpID09IC0xKQorCSAgYnJlYWs7CisgICAgICAKKwlkYWVtb24tPnJhbmRvbXNvY2tzW2ldLnJlZmNvdW50ID0gMTsKKwlkYWVtb24tPnJhbmRvbXNvY2tzW2ldLmZhbWlseSA9IGZhbWlseTsKKwlyZXR1cm4gJmRhZW1vbi0+cmFuZG9tc29ja3NbaV07CisgICAgICB9CisKKyAgLyogTm8gZnJlZSBvbmVzIG9yIGNhbm5vdCBnZXQgbmV3IHNvY2tldCwgZ3JhYiBhbiBleGlzdGluZyBvbmUgKi8KKyAgZm9yIChpID0gMDsgaSA8IFJBTkRPTV9TT0NLUzsgaSsrKQorICAgIHsKKyAgICAgIGludCBqID0gKGkrZmluZ2VyKSAlIFJBTkRPTV9TT0NLUzsKKyAgICAgIGlmIChkYWVtb24tPnJhbmRvbXNvY2tzW2pdLnJlZmNvdW50ICE9IDAgJiYKKwkgIGRhZW1vbi0+cmFuZG9tc29ja3Nbal0uZmFtaWx5ID09IGZhbWlseSAmJiAKKwkgIGRhZW1vbi0+cmFuZG9tc29ja3Nbal0ucmVmY291bnQgIT0gMHhmZmZmKQorCXsKKwkgIGZpbmdlciA9IGo7CisJICBkYWVtb24tPnJhbmRvbXNvY2tzW2pdLnJlZmNvdW50Kys7CisJICByZXR1cm4gJmRhZW1vbi0+cmFuZG9tc29ja3Nbal07CisJfQorICAgIH0KKworICByZXR1cm4gTlVMTDsgLyogZG9vbSAqLworfQorCit2b2lkIGZyZWVfcmZkKHN0cnVjdCByYW5kZmQgKnJmZCkKK3sKKyAgaWYgKHJmZCAmJiAtLShyZmQtPnJlZmNvdW50KSA9PSAwKQorICAgIGNsb3NlKHJmZC0+ZmQpOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2ZyZWMoc3RydWN0IGZyZWMgKmYpCit7CisgIGZyZWVfcmZkKGYtPnJmZDQpOworICBmLT5yZmQ0ID0gTlVMTDsKKyAgZi0+c2VudHRvID0gTlVMTDsKKyAgZi0+ZmxhZ3MgPSAwOworICAKKyNpZmRlZiBIQVZFX0lQVjYKKyAgZnJlZV9yZmQoZi0+cmZkNik7CisgIGYtPnJmZDYgPSBOVUxMOworI2VuZGlmCisKKyNpZmRlZiBIQVZFX0ROU1NFQworICBpZiAoZi0+c3Rhc2gpCisgICAgeworICAgICAgYmxvY2tkYXRhX2ZyZWUoZi0+c3Rhc2gpOworICAgICAgZi0+c3Rhc2ggPSBOVUxMOworICAgIH0KKworICAvKiBBbnl0aGluZyB3ZSdyZSB3YWl0aW5nIG9uIGlzIHBvaW50bGVzcyBub3csIHRvbyAqLworICBpZiAoZi0+YmxvY2tpbmdfcXVlcnkpCisgICAgZnJlZV9mcmVjKGYtPmJsb2NraW5nX3F1ZXJ5KTsKKyAgZi0+YmxvY2tpbmdfcXVlcnkgPSBOVUxMOworICBmLT5kZXBlbmRlbnQgPSBOVUxMOworI2VuZGlmCit9CisKKworCisvKiBpZiB3YWl0PT1OVUxMIHJldHVybiBhIGZyZWUgb3Igb2xkZXIgdGhhbiBUSU1FT1VUIHJlY29yZC4KKyAgIGVsc2UgcmV0dXJuICp3YWl0IHplcm8gaWYgb25lIGF2YWlsYWJsZSwgb3IgKndhaXQgaXMgZGVsYXkgdG8KKyAgIHdoZW4gdGhlIG9sZGVzdCBpbi11c2UgcmVjb3JkIHdpbGwgZXhwaXJlLiBJbXBvc2UgYW4gYWJzb2x1dGUKKyAgIGxpbWl0IG9mIDQqVElNRU9VVCBiZWZvcmUgd2Ugd2lwZSB0aGluZ3MgKGZvciByYW5kb20gc29ja2V0cykuCisgICBJZiBmb3JjZSBpcyBzZXQsIGFsd2F5cyByZXR1cm4gYSByZXN1bHQsIGV2ZW4gaWYgd2UgaGF2ZQorICAgdG8gYWxsb2NhdGUgYWJvdmUgdGhlIGxpbWl0LiAqLworc3RydWN0IGZyZWMgKmdldF9uZXdfZnJlYyh0aW1lX3Qgbm93LCBpbnQgKndhaXQsIGludCBmb3JjZSkKK3sKKyAgc3RydWN0IGZyZWMgKmYsICpvbGRlc3QsICp0YXJnZXQ7CisgIGludCBjb3VudDsKKyAgCisgIGlmICh3YWl0KQorICAgICp3YWl0ID0gMDsKKworICBmb3IgKGYgPSBkYWVtb24tPmZyZWNfbGlzdCwgb2xkZXN0ID0gTlVMTCwgdGFyZ2V0ID0gIE5VTEwsIGNvdW50ID0gMDsgZjsgZiA9IGYtPm5leHQsIGNvdW50KyspCisgICAgaWYgKCFmLT5zZW50dG8pCisgICAgICB0YXJnZXQgPSBmOworICAgIGVsc2UgCisgICAgICB7CisjaWZkZWYgSEFWRV9ETlNTRUMKKwkgICAgLyogRG9uJ3QgZnJlZSBETlNTRUMgc3ViLXF1ZXJpZXMgaGVyZSwgYXMgd2UgbWF5IGVuZCB1cCB3aXRoCisJICAgICAgIGRhbmdsaW5nIHJlZmVyZW5jZXMgdG8gdGhlbS4gVGhleSdsbCBnbyB3aGVuIHRoZWlyICJyZWFsIiBxdWVyeSAKKwkgICAgICAgaXMgZnJlZWQuICovCisJICAgIGlmICghZi0+ZGVwZW5kZW50KQorI2VuZGlmCisJICAgICAgeworCQlpZiAoZGlmZnRpbWUobm93LCBmLT50aW1lKSA+PSA0KlRJTUVPVVQpCisJCSAgeworCQkgICAgZnJlZV9mcmVjKGYpOworCQkgICAgdGFyZ2V0ID0gZjsKKwkJICB9CisJICAgICAKKwkgICAgCisJCWlmICghb2xkZXN0IHx8IGRpZmZ0aW1lKGYtPnRpbWUsIG9sZGVzdC0+dGltZSkgPD0gMCkKKwkJICBvbGRlc3QgPSBmOworCSAgICAgIH0KKyAgICAgIH0KKworICBpZiAodGFyZ2V0KQorICAgIHsKKyAgICAgIHRhcmdldC0+dGltZSA9IG5vdzsKKyAgICAgIHJldHVybiB0YXJnZXQ7CisgICAgfQorICAKKyAgLyogY2FuJ3QgZmluZCBlbXB0eSBvbmUsIHVzZSBvbGRlc3QgaWYgdGhlcmUgaXMgb25lCisgICAgIGFuZCBpdCdzIG9sZGVyIHRoYW4gdGltZW91dCAqLworICBpZiAoIWZvcmNlICYmIG9sZGVzdCAmJiAoKGludClkaWZmdGltZShub3csIG9sZGVzdC0+dGltZSkpID49IFRJTUVPVVQpCisgICAgeyAKKyAgICAgIC8qIGtlZXAgc3R1ZmYgZm9yIHR3aWNlIHRpbWVvdXQgaWYgd2UgY2FuIGJ5IGFsbG9jYXRpbmcgYSBuZXcKKwkgcmVjb3JkIGluc3RlYWQgKi8KKyAgICAgIGlmIChkaWZmdGltZShub3csIG9sZGVzdC0+dGltZSkgPCAyKlRJTUVPVVQgJiYgCisJICBjb3VudCA8PSBkYWVtb24tPmZ0YWJzaXplICYmCisJICAoZiA9IGFsbG9jYXRlX2ZyZWMobm93KSkpCisJcmV0dXJuIGY7CisKKyAgICAgIGlmICghd2FpdCkKKwl7CisJICBmcmVlX2ZyZWMob2xkZXN0KTsKKwkgIG9sZGVzdC0+dGltZSA9IG5vdzsKKwl9CisgICAgICByZXR1cm4gb2xkZXN0OworICAgIH0KKyAgCisgIC8qIG5vbmUgYXZhaWxhYmxlLCBjYWxjdWxhdGUgdGltZSAndGlsbCBvbGRlc3QgcmVjb3JkIGV4cGlyZXMgKi8KKyAgaWYgKCFmb3JjZSAmJiBjb3VudCA+IGRhZW1vbi0+ZnRhYnNpemUpCisgICAgeworICAgICAgc3RhdGljIHRpbWVfdCBsYXN0X2xvZyA9IDA7CisgICAgICAKKyAgICAgIGlmIChvbGRlc3QgJiYgd2FpdCkKKwkqd2FpdCA9IG9sZGVzdC0+dGltZSArICh0aW1lX3QpVElNRU9VVCAtIG5vdzsKKyAgICAgIAorICAgICAgaWYgKChpbnQpZGlmZnRpbWUobm93LCBsYXN0X2xvZykgPiA1KQorCXsKKwkgIGxhc3RfbG9nID0gbm93OworCSAgbXlfc3lzbG9nKExPR19XQVJOSU5HLCBfKCJNYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IEROUyBxdWVyaWVzIHJlYWNoZWQgKG1heDogJWQpIiksIGRhZW1vbi0+ZnRhYnNpemUpOworCX0KKworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAKKyAgaWYgKCEoZiA9IGFsbG9jYXRlX2ZyZWMobm93KSkgJiYgd2FpdCkKKyAgICAvKiB3YWl0IG9uZSBzZWNvbmQgb24gbWFsbG9jIGZhaWx1cmUgKi8KKyAgICAqd2FpdCA9IDE7CisKKyAgcmV0dXJuIGY7IC8qIE9LIGlmIG1hbGxvYyBmYWlscyBhbmQgdGhpcyBpcyBOVUxMICovCit9CisKKy8qIGNyYyBpcyBhbGwtb25lcyBpZiBub3Qga25vd24uICovCitzdGF0aWMgc3RydWN0IGZyZWMgKmxvb2t1cF9mcmVjKHVuc2lnbmVkIHNob3J0IGlkLCB2b2lkICpoYXNoKQoreworICBzdHJ1Y3QgZnJlYyAqZjsKKworICBmb3IoZiA9IGRhZW1vbi0+ZnJlY19saXN0OyBmOyBmID0gZi0+bmV4dCkKKyAgICBpZiAoZi0+c2VudHRvICYmIGYtPm5ld19pZCA9PSBpZCAmJiAKKwkoIWhhc2ggfHwgbWVtY21wKGhhc2gsIGYtPmhhc2gsIEhBU0hfU0laRSkgPT0gMCkpCisgICAgICByZXR1cm4gZjsKKyAgICAgIAorICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBmcmVjICpsb29rdXBfZnJlY19ieV9zZW5kZXIodW5zaWduZWQgc2hvcnQgaWQsCisJCQkJCSAgdW5pb24gbXlzb2NrYWRkciAqYWRkciwKKwkJCQkJICB2b2lkICpoYXNoKQoreworICBzdHJ1Y3QgZnJlYyAqZjsKKyAgCisgIGZvcihmID0gZGFlbW9uLT5mcmVjX2xpc3Q7IGY7IGYgPSBmLT5uZXh0KQorICAgIGlmIChmLT5zZW50dG8gJiYKKwlmLT5vcmlnX2lkID09IGlkICYmIAorCW1lbWNtcChoYXNoLCBmLT5oYXNoLCBIQVNIX1NJWkUpID09IDAgJiYKKwlzb2NrYWRkcl9pc2VxdWFsKCZmLT5zb3VyY2UsIGFkZHIpKQorICAgICAgcmV0dXJuIGY7CisgICAKKyAgcmV0dXJuIE5VTEw7Cit9CisgCisvKiBTZW5kIHF1ZXJ5IHBhY2tldCBhZ2FpbiwgaWYgd2UgY2FuLiAqLwordm9pZCByZXNlbmRfcXVlcnkoKQoreworICBpZiAoZGFlbW9uLT5zcnZfc2F2ZSkKKyAgICB7CisgICAgICBpbnQgZmQ7CisgICAgICAKKyAgICAgIGlmIChkYWVtb24tPnNydl9zYXZlLT5zZmQpCisJZmQgPSBkYWVtb24tPnNydl9zYXZlLT5zZmQtPmZkOworICAgICAgZWxzZSBpZiAoZGFlbW9uLT5yZmRfc2F2ZSAmJiBkYWVtb24tPnJmZF9zYXZlLT5yZWZjb3VudCAhPSAwKQorCWZkID0gZGFlbW9uLT5yZmRfc2F2ZS0+ZmQ7CisgICAgICBlbHNlCisJcmV0dXJuOworICAgICAgCisgICAgICB3aGlsZShyZXRyeV9zZW5kKHNlbmR0byhmZCwgZGFlbW9uLT5wYWNrZXQsIGRhZW1vbi0+cGFja2V0X2xlbiwgMCwKKwkJCSAgICAgICZkYWVtb24tPnNydl9zYXZlLT5hZGRyLnNhLCAKKwkJCSAgICAgIHNhX2xlbigmZGFlbW9uLT5zcnZfc2F2ZS0+YWRkcikpKSk7IAorICAgIH0KK30KKworLyogQSBzZXJ2ZXIgcmVjb3JkIGlzIGdvaW5nIGF3YXksIHJlbW92ZSByZWZlcmVuY2VzIHRvIGl0ICovCit2b2lkIHNlcnZlcl9nb25lKHN0cnVjdCBzZXJ2ZXIgKnNlcnZlcikKK3sKKyAgc3RydWN0IGZyZWMgKmY7CisgIAorICBmb3IgKGYgPSBkYWVtb24tPmZyZWNfbGlzdDsgZjsgZiA9IGYtPm5leHQpCisgICAgaWYgKGYtPnNlbnR0byAmJiBmLT5zZW50dG8gPT0gc2VydmVyKQorICAgICAgZnJlZV9mcmVjKGYpOworICAKKyAgaWYgKGRhZW1vbi0+bGFzdF9zZXJ2ZXIgPT0gc2VydmVyKQorICAgIGRhZW1vbi0+bGFzdF9zZXJ2ZXIgPSBOVUxMOworCisgIGlmIChkYWVtb24tPnNydl9zYXZlID09IHNlcnZlcikKKyAgICBkYWVtb24tPnNydl9zYXZlID0gTlVMTDsKK30KKworLyogcmV0dXJuIHVuaXF1ZSByYW5kb20gaWRzLiAqLworc3RhdGljIHVuc2lnbmVkIHNob3J0IGdldF9pZCh2b2lkKQoreworICB1bnNpZ25lZCBzaG9ydCByZXQgPSAwOworICAKKyAgZG8gCisgICAgcmV0ID0gcmFuZDE2KCk7CisgIHdoaWxlIChsb29rdXBfZnJlYyhyZXQsIE5VTEwpKTsKKyAgCisgIHJldHVybiByZXQ7Cit9CisKKworCisKKwpkaWZmIC0tZ2l0IGEvc3JjL2hlbHBlci5jIGIvc3JjL2hlbHBlci5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIzNmY5MTYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaGVscGVyLmMKQEAgLTAsMCArMSw4OTggQEAKKy8qIGRuc21hc3EgaXMgQ29weXJpZ2h0IChjKSAyMDAwLTIwMTcgU2ltb24gS2VsbGV5CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIGRhdGVkIEp1bmUsIDE5OTEsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIHZlcnNpb24gMyBkYXRlZCAyOSBKdW5lLCAyMDA3LgorIAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisqLworCisjaW5jbHVkZSAiZG5zbWFzcS5oIgorCisjaWZkZWYgSEFWRV9TQ1JJUFQKKworLyogVGhpcyBmaWxlIGhhcyBjb2RlIHRvIGZvcmsgYSBoZWxwZXIgcHJvY2VzcyB3aGljaCByZWNlaXZlcyBkYXRhIHZpYSBhIHBpcGUgCisgICBzaGFyZWQgd2l0aCB0aGUgbWFpbiBwcm9jZXNzIGFuZCB3aGljaCBpcyByZXNwb25zaWJsZSBmb3IgY2FsbGluZyBhIHNjcmlwdCB3aGVuCisgICBESENQIGxlYXNlcyBjaGFuZ2UuCisKKyAgIFRoZSBoZWxwZXIgcHJvY2VzcyBpcyBmb3JrZWQgYmVmb3JlIHRoZSBtYWluIHByb2Nlc3MgZHJvcHMgcm9vdCwgc28gaXQgcmV0YWlucyByb290IAorICAgcHJpdnMgdG8gcGFzcyBvbiB0byB0aGUgc2NyaXB0LiBGb3IgdGhpcyByZWFzb24gaXQgdHJpZXMgdG8gYmUgcGFyYW5vaWQgYWJvdXQgCisgICBkYXRhIHJlY2VpdmVkIGZyb20gdGhlIG1haW4gcHJvY2VzcywgaW4gY2FzZSB0aGF0IGhhcyBiZWVuIGNvbXByb21pc2VkLiBXZSBkb24ndAorICAgd2FudCB0aGUgaGVscGVyIHRvIGdpdmUgYW4gYXR0YWNrZXIgcm9vdC4gSW4gcGFydGljdWxhciwgdGhlIHNjcmlwdCB0byBiZSBydW4gaXMKKyAgIG5vdCBzZXR0YWJsZSB2aWEgdGhlIHBpcGUsIG9uY2UgdGhlIGZvcmsgaGFzIHRha2VuIHBsYWNlIGl0IGlzIG5vdCBhbHRlcmFibGUgYnkgdGhlIAorICAgbWFpbiBwcm9jZXNzLgorKi8KKworc3RhdGljIHZvaWQgbXlfc2V0ZW52KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlLCBpbnQgKmVycm9yKTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICpncmFiX2V4dHJhZGF0YSh1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGNoYXIgKmVuZCwgIGNoYXIgKmVudiwgaW50ICplcnIpOworCisjaWZkZWYgSEFWRV9MVUFTQ1JJUFQKKyNkZWZpbmUgTFVBX0NPTVBBVF9BTEwKKyNpbmNsdWRlIDxsdWEuaD4gIAorI2luY2x1ZGUgPGx1YWxpYi5oPiAgCisjaW5jbHVkZSA8bGF1eGxpYi5oPiAgCisKKyNpZm5kZWYgbHVhX29wZW4KKyNkZWZpbmUgbHVhX29wZW4oKSAgICAgbHVhTF9uZXdzdGF0ZSgpCisjZW5kaWYKKworbHVhX1N0YXRlICpsdWE7CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICpncmFiX2V4dHJhZGF0YV9sdWEodW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBjaGFyICplbmQsIGNoYXIgKmZpZWxkKTsKKyNlbmRpZgorCisKK3N0cnVjdCBzY3JpcHRfZGF0YQoreworICBpbnQgZmxhZ3M7CisgIGludCBhY3Rpb24sIGh3YWRkcl9sZW4sIGh3YWRkcl90eXBlOworICBpbnQgY2xpZF9sZW4sIGhvc3RuYW1lX2xlbiwgZWRfbGVuOworICBzdHJ1Y3QgaW5fYWRkciBhZGRyLCBnaWFkZHI7CisgIHVuc2lnbmVkIGludCByZW1haW5pbmdfdGltZTsKKyNpZmRlZiBIQVZFX0JST0tFTl9SVEMKKyAgdW5zaWduZWQgaW50IGxlbmd0aDsKKyNlbHNlCisgIHRpbWVfdCBleHBpcmVzOworI2VuZGlmCisjaWZkZWYgSEFWRV9URlRQCisgIG9mZl90IGZpbGVfbGVuOworI2VuZGlmCisjaWZkZWYgSEFWRV9JUFY2CisgIHN0cnVjdCBpbjZfYWRkciBhZGRyNjsKKyNlbmRpZgorI2lmZGVmIEhBVkVfREhDUDYKKyAgaW50IGlhaWQsIHZlbmRvcmNsYXNzX2NvdW50OworI2VuZGlmCisgIHVuc2lnbmVkIGNoYXIgaHdhZGRyW0RIQ1BfQ0hBRERSX01BWF07CisgIGNoYXIgaW50ZXJmYWNlW0lGX05BTUVTSVpFXTsKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2NyaXB0X2RhdGEgKmJ1ZiA9IE5VTEw7CitzdGF0aWMgc2l6ZV90IGJ5dGVzX2luX2J1ZiA9IDAsIGJ1Zl9zaXplID0gMDsKKworaW50IGNyZWF0ZV9oZWxwZXIoaW50IGV2ZW50X2ZkLCBpbnQgZXJyX2ZkLCB1aWRfdCB1aWQsIGdpZF90IGdpZCwgbG9uZyBtYXhfZmQpCit7CisgIHBpZF90IHBpZDsKKyAgaW50IGksIHBpcGVmZFsyXTsKKyAgc3RydWN0IHNpZ2FjdGlvbiBzaWdhY3Q7CisgIHVuc2lnbmVkIGNoYXIgKmFsbG9jX2J1ZmYgPSBOVUxMOworICAKKyAgLyogY3JlYXRlIHRoZSBwaXBlIHRocm91Z2ggd2hpY2ggdGhlIG1haW4gcHJvZ3JhbSBzZW5kcyB1cyBjb21tYW5kcywKKyAgICAgdGhlbiBmb3JrIG91ciBwcm9jZXNzLiAqLworICBpZiAocGlwZShwaXBlZmQpID09IC0xIHx8ICFmaXhfZmQocGlwZWZkWzFdKSB8fCAocGlkID0gZm9yaygpKSA9PSAtMSkKKyAgICB7CisgICAgICBzZW5kX2V2ZW50KGVycl9mZCwgRVZFTlRfUElQRV9FUlIsIGVycm5vLCBOVUxMKTsKKyAgICAgIF9leGl0KDApOworICAgIH0KKworICBpZiAocGlkICE9IDApCisgICAgeworICAgICAgY2xvc2UocGlwZWZkWzBdKTsgLyogY2xvc2UgcmVhZGVyIHNpZGUgKi8KKyAgICAgIHJldHVybiBwaXBlZmRbMV07CisgICAgfQorCisgIC8qIGlnbm9yZSBTSUdURVJNLCBzbyB0aGF0IHdlIGNhbiBjbGVhbiB1cCB3aGVuIHRoZSBtYWluIHByb2Nlc3MgZ2V0cyBoaXQKKyAgICAgYW5kIFNJR0FMUk0gc28gdGhhdCB3ZSBjYW4gdXNlIHNsZWVwKCkgKi8KKyAgc2lnYWN0LnNhX2hhbmRsZXIgPSBTSUdfSUdOOworICBzaWdhY3Quc2FfZmxhZ3MgPSAwOworICBzaWdlbXB0eXNldCgmc2lnYWN0LnNhX21hc2spOworICBzaWdhY3Rpb24oU0lHVEVSTSwgJnNpZ2FjdCwgTlVMTCk7CisgIHNpZ2FjdGlvbihTSUdBTFJNLCAmc2lnYWN0LCBOVUxMKTsKKworICBpZiAoIW9wdGlvbl9ib29sKE9QVF9ERUJVRykgJiYgdWlkICE9IDApCisgICAgeworICAgICAgZ2lkX3QgZHVtbXk7CisgICAgICBpZiAoc2V0Z3JvdXBzKDAsICZkdW1teSkgPT0gLTEgfHwgCisJICBzZXRnaWQoZ2lkKSA9PSAtMSB8fCAKKwkgIHNldHVpZCh1aWQpID09IC0xKQorCXsKKwkgIGlmIChvcHRpb25fYm9vbChPUFRfTk9fRk9SSykpCisJICAgIC8qIHNlbmQgZXJyb3IgdG8gZGFlbW9uIHByb2Nlc3MgaWYgbm8tZm9yayAqLworCSAgICBzZW5kX2V2ZW50KGV2ZW50X2ZkLCBFVkVOVF9VU0VSX0VSUiwgZXJybm8sIGRhZW1vbi0+c2NyaXB0dXNlcik7CisJICBlbHNlCisJICAgIHsKKwkgICAgICAvKiBraWxsIGRhZW1vbiAqLworCSAgICAgIHNlbmRfZXZlbnQoZXZlbnRfZmQsIEVWRU5UX0RJRSwgMCwgTlVMTCk7CisJICAgICAgLyogcmV0dXJuIGVycm9yICovCisJICAgICAgc2VuZF9ldmVudChlcnJfZmQsIEVWRU5UX1VTRVJfRVJSLCBlcnJubywgZGFlbW9uLT5zY3JpcHR1c2VyKTsKKwkgICAgfQorCSAgX2V4aXQoMCk7CisJfQorICAgIH0KKworICAvKiBjbG9zZSBhbGwgdGhlIHNvY2tldHMgZXRjLCB3ZSBkb24ndCBuZWVkIHRoZW0gaGVyZS4gCisgICAgIERvbid0IGNsb3NlIGVycl9mZCwgaW4gY2FzZSB0aGUgbHVhLWluaXQgZmFpbHMuCisgICAgIE5vdGUgdGhhdCB3ZSBoYXZlIHRvIGRvIHRoaXMgYmVmb3JlIGx1YSBpbml0CisgICAgIHNvIHdlIGRvbid0IGNsb3NlIGFueSBsdWEgZmRzLiAqLworICBmb3IgKG1heF9mZC0tOyBtYXhfZmQgPj0gMDsgbWF4X2ZkLS0pCisgICAgaWYgKG1heF9mZCAhPSBTVERPVVRfRklMRU5PICYmIG1heF9mZCAhPSBTVERFUlJfRklMRU5PICYmIAorCW1heF9mZCAhPSBTVERJTl9GSUxFTk8gJiYgbWF4X2ZkICE9IHBpcGVmZFswXSAmJiAKKwltYXhfZmQgIT0gZXZlbnRfZmQgJiYgbWF4X2ZkICE9IGVycl9mZCkKKyAgICAgIGNsb3NlKG1heF9mZCk7CisKKyNpZmRlZiBIQVZFX0xVQVNDUklQVAorICBpZiAoZGFlbW9uLT5sdWFzY3JpcHQpCisgICAgeworICAgICAgY29uc3QgY2hhciAqbHVhX2VyciA9IE5VTEw7CisgICAgICBsdWEgPSBsdWFfb3BlbigpOworICAgICAgbHVhTF9vcGVubGlicyhsdWEpOworICAgICAgCisgICAgICAvKiBnZXQgTHVhIHRvIGxvYWQgb3VyIHNjcmlwdCBmaWxlICovCisgICAgICBpZiAobHVhTF9kb2ZpbGUobHVhLCBkYWVtb24tPmx1YXNjcmlwdCkgIT0gMCkKKwlsdWFfZXJyID0gbHVhX3Rvc3RyaW5nKGx1YSwgLTEpOworICAgICAgZWxzZQorCXsKKwkgIGx1YV9nZXRnbG9iYWwobHVhLCAibGVhc2UiKTsKKwkgIGlmIChsdWFfdHlwZShsdWEsIC0xKSAhPSBMVUFfVEZVTkNUSU9OKSAKKwkgICAgbHVhX2VyciA9IF8oImxlYXNlKCkgZnVuY3Rpb24gbWlzc2luZyBpbiBMdWEgc2NyaXB0Iik7CisJfQorICAgICAgCisgICAgICBpZiAobHVhX2VycikKKwl7CisJICBpZiAob3B0aW9uX2Jvb2woT1BUX05PX0ZPUkspIHx8IG9wdGlvbl9ib29sKE9QVF9ERUJVRykpCisJICAgIC8qIHNlbmQgZXJyb3IgdG8gZGFlbW9uIHByb2Nlc3MgaWYgbm8tZm9yayAqLworCSAgICBzZW5kX2V2ZW50KGV2ZW50X2ZkLCBFVkVOVF9MVUFfRVJSLCAwLCAoY2hhciAqKWx1YV9lcnIpOworCSAgZWxzZQorCSAgICB7CisJICAgICAgLyoga2lsbCBkYWVtb24gKi8KKwkgICAgICBzZW5kX2V2ZW50KGV2ZW50X2ZkLCBFVkVOVF9ESUUsIDAsIE5VTEwpOworCSAgICAgIC8qIHJldHVybiBlcnJvciAqLworCSAgICAgIHNlbmRfZXZlbnQoZXJyX2ZkLCBFVkVOVF9MVUFfRVJSLCAwLCAoY2hhciAqKWx1YV9lcnIpOworCSAgICB9CisJICBfZXhpdCgwKTsKKwl9CisgICAgICAKKyAgICAgIGx1YV9wb3AobHVhLCAxKTsgIC8qIHJlbW92ZSBuaWwgZnJvbSBzdGFjayAqLworICAgICAgbHVhX2dldGdsb2JhbChsdWEsICJpbml0Iik7CisgICAgICBpZiAobHVhX3R5cGUobHVhLCAtMSkgPT0gTFVBX1RGVU5DVElPTikKKwlsdWFfY2FsbChsdWEsIDAsIDApOworICAgICAgZWxzZQorCWx1YV9wb3AobHVhLCAxKTsgIC8qIHJlbW92ZSBuaWwgZnJvbSBzdGFjayAqLwkKKyAgICB9CisjZW5kaWYKKworICAvKiBBbGwgaW5pdCBkb25lLCBjbG9zZSBvdXIgY29weSBvZiB0aGUgZXJyb3IgcGlwZSwgc28gdGhhdCBtYWluIHByb2Nlc3MgY2FuIHJldHVybiAqLworICBpZiAoZXJyX2ZkICE9IC0xKQorICAgIGNsb3NlKGVycl9mZCk7CisgICAgCisgIC8qIGxvb3AgaGVyZSAqLworICB3aGlsZSgxKQorICAgIHsKKyAgICAgIHN0cnVjdCBzY3JpcHRfZGF0YSBkYXRhOworICAgICAgY2hhciAqcCwgKmFjdGlvbl9zdHIsICpob3N0bmFtZSA9IE5VTEwsICpkb21haW4gPSBOVUxMOworICAgICAgdW5zaWduZWQgY2hhciAqYnVmID0gKHVuc2lnbmVkIGNoYXIgKilkYWVtb24tPm5hbWVidWZmOworICAgICAgdW5zaWduZWQgY2hhciAqZW5kLCAqZXh0cmFkYXRhOworICAgICAgaW50IGlzNiwgZXJyID0gMDsKKyAgICAgIGludCBwaXBlb3V0WzJdOworCisgICAgICAvKiBGcmVlIHJhcmVseS1hbGxvY2F0ZWQgbWVtb3J5IGZyb20gcHJldmlvdXMgaXRlcmF0aW9uLiAqLworICAgICAgaWYgKGFsbG9jX2J1ZmYpCisgICAgICAgeworICAgICAgICAgZnJlZShhbGxvY19idWZmKTsKKyAgICAgICAgIGFsbG9jX2J1ZmYgPSBOVUxMOworICAgICAgIH0KKyAgICAgIAorICAgICAgLyogd2UgcmVhZCB6ZXJvIGJ5dGVzIHdoZW4gcGlwZSBjbG9zZWQ6IHRoaXMgaXMgb3VyIHNpZ25hbCB0byBleGl0ICovIAorICAgICAgaWYgKCFyZWFkX3dyaXRlKHBpcGVmZFswXSwgKHVuc2lnbmVkIGNoYXIgKikmZGF0YSwgc2l6ZW9mKGRhdGEpLCAxKSkKKwl7CisjaWZkZWYgSEFWRV9MVUFTQ1JJUFQKKwkgIGlmIChkYWVtb24tPmx1YXNjcmlwdCkKKwkgICAgeworCSAgICAgIGx1YV9nZXRnbG9iYWwobHVhLCAic2h1dGRvd24iKTsKKwkgICAgICBpZiAobHVhX3R5cGUobHVhLCAtMSkgPT0gTFVBX1RGVU5DVElPTikKKwkJbHVhX2NhbGwobHVhLCAwLCAwKTsKKwkgICAgfQorI2VuZGlmCisJICBfZXhpdCgwKTsKKwl9CisgCisgICAgICBpczYgPSAhIShkYXRhLmZsYWdzICYgKExFQVNFX1RBIHwgTEVBU0VfTkEpKTsKKyAgICAgIAorICAgICAgaWYgKGRhdGEuYWN0aW9uID09IEFDVElPTl9ERUwpCisJYWN0aW9uX3N0ciA9ICJkZWwiOworICAgICAgZWxzZSBpZiAoZGF0YS5hY3Rpb24gPT0gQUNUSU9OX0FERCkKKwlhY3Rpb25fc3RyID0gImFkZCI7CisgICAgICBlbHNlIGlmIChkYXRhLmFjdGlvbiA9PSBBQ1RJT05fT0xEIHx8IGRhdGEuYWN0aW9uID09IEFDVElPTl9PTERfSE9TVE5BTUUpCisJYWN0aW9uX3N0ciA9ICJvbGQiOworICAgICAgZWxzZSBpZiAoZGF0YS5hY3Rpb24gPT0gQUNUSU9OX1RGVFApCisJeworCSAgYWN0aW9uX3N0ciA9ICJ0ZnRwIjsKKwkgIGlzNiA9IChkYXRhLmZsYWdzICE9IEFGX0lORVQpOworCX0KKyAgICAgIGVsc2UgaWYgKGRhdGEuYWN0aW9uID09IEFDVElPTl9BUlApCisJeworCSAgYWN0aW9uX3N0ciA9ICJhcnAtYWRkIjsKKwkgIGlzNiA9IChkYXRhLmZsYWdzICE9IEFGX0lORVQpOworCX0KKyAgICAgICBlbHNlIGlmIChkYXRhLmFjdGlvbiA9PSBBQ1RJT05fQVJQX0RFTCkKKwl7CisJICBhY3Rpb25fc3RyID0gImFycC1kZWwiOworCSAgaXM2ID0gKGRhdGEuZmxhZ3MgIT0gQUZfSU5FVCk7CisJICBkYXRhLmFjdGlvbiA9IEFDVElPTl9BUlA7CisJfQorICAgICAgIGVsc2UgCisJY29udGludWU7CisKKyAgICAgIAkKKyAgICAgIC8qIHN0cmluZ2lmeSBNQUMgaW50byBkaGNwX2J1ZmYgKi8KKyAgICAgIHAgPSBkYWVtb24tPmRoY3BfYnVmZjsKKyAgICAgIGlmIChkYXRhLmh3YWRkcl90eXBlICE9IEFSUEhSRF9FVEhFUiB8fCBkYXRhLmh3YWRkcl9sZW4gPT0gMCkgCisJcCArPSBzcHJpbnRmKHAsICIlLjJ4LSIsIGRhdGEuaHdhZGRyX3R5cGUpOworICAgICAgZm9yIChpID0gMDsgKGkgPCBkYXRhLmh3YWRkcl9sZW4pICYmIChpIDwgREhDUF9DSEFERFJfTUFYKTsgaSsrKQorCXsKKwkgIHAgKz0gc3ByaW50ZihwLCAiJS4yeCIsIGRhdGEuaHdhZGRyW2ldKTsKKwkgIGlmIChpICE9IGRhdGEuaHdhZGRyX2xlbiAtIDEpCisJICAgIHAgKz0gc3ByaW50ZihwLCAiOiIpOworCX0KKyAgICAgIAorICAgICAgLyogc3VwcGxpZWQgZGF0YSBtYXkganVzdCBleGNlZWQgbm9ybWFsIGJ1ZmZlciAodW5saWtlbHkpICovCisgICAgICBpZiAoKGRhdGEuaG9zdG5hbWVfbGVuICsgZGF0YS5lZF9sZW4gKyBkYXRhLmNsaWRfbGVuKSA+IE1BWEROQU1FICYmIAorCSAgIShhbGxvY19idWZmID0gYnVmID0gbWFsbG9jKGRhdGEuaG9zdG5hbWVfbGVuICsgZGF0YS5lZF9sZW4gKyBkYXRhLmNsaWRfbGVuKSkpCisJY29udGludWU7CisgICAgICAKKyAgICAgIGlmICghcmVhZF93cml0ZShwaXBlZmRbMF0sIGJ1ZiwgCisJCSAgICAgIGRhdGEuaG9zdG5hbWVfbGVuICsgZGF0YS5lZF9sZW4gKyBkYXRhLmNsaWRfbGVuLCAxKSkKKwljb250aW51ZTsKKworICAgICAgLyogQ0xJRCBpbnRvIHBhY2tldCAqLworICAgICAgZm9yIChwID0gZGFlbW9uLT5wYWNrZXQsIGkgPSAwOyBpIDwgZGF0YS5jbGlkX2xlbjsgaSsrKQorCXsKKwkgIHAgKz0gc3ByaW50ZihwLCAiJS4yeCIsIGJ1ZltpXSk7CisJICBpZiAoaSAhPSBkYXRhLmNsaWRfbGVuIC0gMSkgCisJICAgICAgcCArPSBzcHJpbnRmKHAsICI6Iik7CisJfQorCisjaWZkZWYgSEFWRV9ESENQNgorICAgICAgaWYgKGlzNikKKwl7CisJICAvKiBvciBJQUlEIGFuZCBzZXJ2ZXIgRFVJRCBmb3IgSVB2NiAqLworCSAgc3ByaW50ZihkYWVtb24tPmRoY3BfYnVmZjMsICIlcyV1IiwgZGF0YS5mbGFncyAmIExFQVNFX1RBID8gIlQiIDogIiIsIGRhdGEuaWFpZCk7CQorCSAgZm9yIChwID0gZGFlbW9uLT5kaGNwX3BhY2tldC5pb3ZfYmFzZSwgaSA9IDA7IGkgPCBkYWVtb24tPmR1aWRfbGVuOyBpKyspCisJICAgIHsKKwkgICAgICBwICs9IHNwcmludGYocCwgIiUuMngiLCBkYWVtb24tPmR1aWRbaV0pOworCSAgICAgIGlmIChpICE9IGRhZW1vbi0+ZHVpZF9sZW4gLSAxKSAKKwkJcCArPSBzcHJpbnRmKHAsICI6Iik7CisJICAgIH0KKworCX0KKyNlbmRpZgorCisgICAgICBidWYgKz0gZGF0YS5jbGlkX2xlbjsKKworICAgICAgaWYgKGRhdGEuaG9zdG5hbWVfbGVuICE9IDApCisJeworCSAgY2hhciAqZG90OworCSAgaG9zdG5hbWUgPSAoY2hhciAqKWJ1ZjsKKwkgIGhvc3RuYW1lW2RhdGEuaG9zdG5hbWVfbGVuIC0gMV0gPSAwOworCSAgaWYgKGRhdGEuYWN0aW9uICE9IEFDVElPTl9URlRQKQorCSAgICB7CisJICAgICAgaWYgKCFsZWdhbF9ob3N0bmFtZShob3N0bmFtZSkpCisJCWhvc3RuYW1lID0gTlVMTDsKKwkgICAgICBlbHNlIGlmICgoZG90ID0gc3RyY2hyKGhvc3RuYW1lLCAnLicpKSkKKwkJeworCQkgIGRvbWFpbiA9IGRvdCsxOworCQkgICpkb3QgPSAwOworCQl9IAorCSAgICB9CisJfQorICAgIAorICAgICAgZXh0cmFkYXRhID0gYnVmICsgZGF0YS5ob3N0bmFtZV9sZW47CisgICAgCisgICAgICBpZiAoIWlzNikKKwlpbmV0X250b3AoQUZfSU5FVCwgJmRhdGEuYWRkciwgZGFlbW9uLT5hZGRyYnVmZiwgQUREUlNUUkxFTik7CisjaWZkZWYgSEFWRV9JUFY2CisgICAgICBlbHNlCisJaW5ldF9udG9wKEFGX0lORVQ2LCAmZGF0YS5hZGRyNiwgZGFlbW9uLT5hZGRyYnVmZiwgQUREUlNUUkxFTik7CisjZW5kaWYKKworI2lmZGVmIEhBVkVfVEZUUAorICAgICAgLyogZmlsZSBsZW5ndGggKi8KKyAgICAgIGlmIChkYXRhLmFjdGlvbiA9PSBBQ1RJT05fVEZUUCkKKwlzcHJpbnRmKGlzNiA/IGRhZW1vbi0+cGFja2V0IDogZGFlbW9uLT5kaGNwX2J1ZmYsICIlbHUiLCAodW5zaWduZWQgbG9uZylkYXRhLmZpbGVfbGVuKTsKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9MVUFTQ1JJUFQKKyAgICAgIGlmIChkYWVtb24tPmx1YXNjcmlwdCkKKwl7CisJICBpZiAoZGF0YS5hY3Rpb24gPT0gQUNUSU9OX1RGVFApCisJICAgIHsKKwkgICAgICBsdWFfZ2V0Z2xvYmFsKGx1YSwgInRmdHAiKTsgCisJICAgICAgaWYgKGx1YV90eXBlKGx1YSwgLTEpICE9IExVQV9URlVOQ1RJT04pCisJCWx1YV9wb3AobHVhLCAxKTsgLyogdGZ0cCBmdW5jdGlvbiBvcHRpb25hbCAqLworCSAgICAgIGVsc2UKKwkJeworCQkgIGx1YV9wdXNoc3RyaW5nKGx1YSwgYWN0aW9uX3N0cik7IC8qIGFyZzEgLSBhY3Rpb24gKi8KKwkJICBsdWFfbmV3dGFibGUobHVhKTsgICAgICAgICAgICAgICAvKiBhcmcyIC0gZGF0YSB0YWJsZSAqLworCQkgIGx1YV9wdXNoc3RyaW5nKGx1YSwgZGFlbW9uLT5hZGRyYnVmZik7CisJCSAgbHVhX3NldGZpZWxkKGx1YSwgLTIsICJkZXN0aW5hdGlvbl9hZGRyZXNzIik7CisJCSAgbHVhX3B1c2hzdHJpbmcobHVhLCBob3N0bmFtZSk7CisJCSAgbHVhX3NldGZpZWxkKGx1YSwgLTIsICJmaWxlX25hbWUiKTsgCisJCSAgbHVhX3B1c2hzdHJpbmcobHVhLCBpczYgPyBkYWVtb24tPnBhY2tldCA6IGRhZW1vbi0+ZGhjcF9idWZmKTsKKwkJICBsdWFfc2V0ZmllbGQobHVhLCAtMiwgImZpbGVfc2l6ZSIpOworCQkgIGx1YV9jYWxsKGx1YSwgMiwgMCk7CS8qIHBhc3MgMiB2YWx1ZXMsIGV4cGVjdCAwICovCisJCX0KKwkgICAgfQorCSAgZWxzZSBpZiAoZGF0YS5hY3Rpb24gPT0gQUNUSU9OX0FSUCkKKwkgICAgeworCSAgICAgIGx1YV9nZXRnbG9iYWwobHVhLCAiYXJwIik7IAorCSAgICAgIGlmIChsdWFfdHlwZShsdWEsIC0xKSAhPSBMVUFfVEZVTkNUSU9OKQorCQlsdWFfcG9wKGx1YSwgMSk7IC8qIGFycCBmdW5jdGlvbiBvcHRpb25hbCAqLworCSAgICAgIGVsc2UKKwkJeworCQkgIGx1YV9wdXNoc3RyaW5nKGx1YSwgYWN0aW9uX3N0cik7IC8qIGFyZzEgLSBhY3Rpb24gKi8KKwkJICBsdWFfbmV3dGFibGUobHVhKTsgICAgICAgICAgICAgICAvKiBhcmcyIC0gZGF0YSB0YWJsZSAqLworCQkgIGx1YV9wdXNoc3RyaW5nKGx1YSwgZGFlbW9uLT5hZGRyYnVmZik7CisJCSAgbHVhX3NldGZpZWxkKGx1YSwgLTIsICJjbGllbnRfYWRkcmVzcyIpOworCQkgIGx1YV9wdXNoc3RyaW5nKGx1YSwgZGFlbW9uLT5kaGNwX2J1ZmYpOworCQkgIGx1YV9zZXRmaWVsZChsdWEsIC0yLCAibWFjX2FkZHJlc3MiKTsKKwkJICBsdWFfY2FsbChsdWEsIDIsIDApOwkvKiBwYXNzIDIgdmFsdWVzLCBleHBlY3QgMCAqLworCQl9CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGx1YV9nZXRnbG9iYWwobHVhLCAibGVhc2UiKTsgICAgIC8qIGZ1bmN0aW9uIHRvIGNhbGwgKi8KKwkgICAgICBsdWFfcHVzaHN0cmluZyhsdWEsIGFjdGlvbl9zdHIpOyAvKiBhcmcxIC0gYWN0aW9uICovCisJICAgICAgbHVhX25ld3RhYmxlKGx1YSk7ICAgICAgICAgICAgICAgLyogYXJnMiAtIGRhdGEgdGFibGUgKi8KKwkgICAgICAKKwkgICAgICBpZiAoaXM2KQorCQl7CisJCSAgbHVhX3B1c2hzdHJpbmcobHVhLCBkYWVtb24tPnBhY2tldCk7CisJCSAgbHVhX3NldGZpZWxkKGx1YSwgLTIsICJjbGllbnRfZHVpZCIpOworCQkgIGx1YV9wdXNoc3RyaW5nKGx1YSwgZGFlbW9uLT5kaGNwX3BhY2tldC5pb3ZfYmFzZSk7CisJCSAgbHVhX3NldGZpZWxkKGx1YSwgLTIsICJzZXJ2ZXJfZHVpZCIpOworCQkgIGx1YV9wdXNoc3RyaW5nKGx1YSwgZGFlbW9uLT5kaGNwX2J1ZmYzKTsKKwkJICBsdWFfc2V0ZmllbGQobHVhLCAtMiwgImlhaWQiKTsKKwkJfQorCSAgICAgIAorCSAgICAgIGlmICghaXM2ICYmIGRhdGEuY2xpZF9sZW4gIT0gMCkKKwkJeworCQkgIGx1YV9wdXNoc3RyaW5nKGx1YSwgZGFlbW9uLT5wYWNrZXQpOworCQkgIGx1YV9zZXRmaWVsZChsdWEsIC0yLCAiY2xpZW50X2lkIik7CisJCX0KKwkgICAgICAKKwkgICAgICBpZiAoc3RybGVuKGRhdGEuaW50ZXJmYWNlKSAhPSAwKQorCQl7CisJCSAgbHVhX3B1c2hzdHJpbmcobHVhLCBkYXRhLmludGVyZmFjZSk7CisJCSAgbHVhX3NldGZpZWxkKGx1YSwgLTIsICJpbnRlcmZhY2UiKTsKKwkJfQorCSAgICAgIAorI2lmZGVmIEhBVkVfQlJPS0VOX1JUQwkKKwkgICAgICBsdWFfcHVzaG51bWJlcihsdWEsIGRhdGEubGVuZ3RoKTsKKwkgICAgICBsdWFfc2V0ZmllbGQobHVhLCAtMiwgImxlYXNlX2xlbmd0aCIpOworI2Vsc2UKKwkgICAgICBsdWFfcHVzaG51bWJlcihsdWEsIGRhdGEuZXhwaXJlcyk7CisJICAgICAgbHVhX3NldGZpZWxkKGx1YSwgLTIsICJsZWFzZV9leHBpcmVzIik7CisjZW5kaWYKKwkgICAgICAKKwkgICAgICBpZiAoaG9zdG5hbWUpCisJCXsKKwkJICBsdWFfcHVzaHN0cmluZyhsdWEsIGhvc3RuYW1lKTsKKwkJICBsdWFfc2V0ZmllbGQobHVhLCAtMiwgImhvc3RuYW1lIik7CisJCX0KKwkgICAgICAKKwkgICAgICBpZiAoZG9tYWluKQorCQl7CisJCSAgbHVhX3B1c2hzdHJpbmcobHVhLCBkb21haW4pOworCQkgIGx1YV9zZXRmaWVsZChsdWEsIC0yLCAiZG9tYWluIik7CisJCX0KKwkgICAgICAKKwkgICAgICBlbmQgPSBleHRyYWRhdGEgKyBkYXRhLmVkX2xlbjsKKwkgICAgICBidWYgPSBleHRyYWRhdGE7CisJICAgICAgCisJICAgICAgaWYgKCFpczYpCisJCWJ1ZiA9IGdyYWJfZXh0cmFkYXRhX2x1YShidWYsIGVuZCwgInZlbmRvcl9jbGFzcyIpOworI2lmZGVmIEhBVkVfREhDUDYKKwkgICAgICBlbHNlICBpZiAoZGF0YS52ZW5kb3JjbGFzc19jb3VudCAhPSAwKQorCQl7CisJCSAgc3ByaW50ZihkYWVtb24tPmRoY3BfYnVmZjIsICJ2ZW5kb3JfY2xhc3NfaWQiKTsKKwkJICBidWYgPSBncmFiX2V4dHJhZGF0YV9sdWEoYnVmLCBlbmQsIGRhZW1vbi0+ZGhjcF9idWZmMik7CisJCSAgZm9yIChpID0gMDsgaSA8IGRhdGEudmVuZG9yY2xhc3NfY291bnQgLSAxOyBpKyspCisJCSAgICB7CisJCSAgICAgIHNwcmludGYoZGFlbW9uLT5kaGNwX2J1ZmYyLCAidmVuZG9yX2NsYXNzJWkiLCBpKTsKKwkJICAgICAgYnVmID0gZ3JhYl9leHRyYWRhdGFfbHVhKGJ1ZiwgZW5kLCBkYWVtb24tPmRoY3BfYnVmZjIpOworCQkgICAgfQorCQl9CisjZW5kaWYKKwkgICAgICAKKwkgICAgICBidWYgPSBncmFiX2V4dHJhZGF0YV9sdWEoYnVmLCBlbmQsICJzdXBwbGllZF9ob3N0bmFtZSIpOworCSAgICAgIAorCSAgICAgIGlmICghaXM2KQorCQl7CisJCSAgYnVmID0gZ3JhYl9leHRyYWRhdGFfbHVhKGJ1ZiwgZW5kLCAiY3Bld2FuX291aSIpOworCQkgIGJ1ZiA9IGdyYWJfZXh0cmFkYXRhX2x1YShidWYsIGVuZCwgImNwZXdhbl9zZXJpYWwiKTsgICAKKwkJICBidWYgPSBncmFiX2V4dHJhZGF0YV9sdWEoYnVmLCBlbmQsICJjcGV3YW5fY2xhc3MiKTsKKwkJICBidWYgPSBncmFiX2V4dHJhZGF0YV9sdWEoYnVmLCBlbmQsICJjaXJjdWl0X2lkIik7CisJCSAgYnVmID0gZ3JhYl9leHRyYWRhdGFfbHVhKGJ1ZiwgZW5kLCAic3Vic2NyaWJlcl9pZCIpOworCQkgIGJ1ZiA9IGdyYWJfZXh0cmFkYXRhX2x1YShidWYsIGVuZCwgInJlbW90ZV9pZCIpOworCQl9CisJICAgICAgCisJICAgICAgYnVmID0gZ3JhYl9leHRyYWRhdGFfbHVhKGJ1ZiwgZW5kLCAidGFncyIpOworCSAgICAgIAorCSAgICAgIGlmIChpczYpCisJCWJ1ZiA9IGdyYWJfZXh0cmFkYXRhX2x1YShidWYsIGVuZCwgInJlbGF5X2FkZHJlc3MiKTsKKwkgICAgICBlbHNlIGlmIChkYXRhLmdpYWRkci5zX2FkZHIgIT0gMCkKKwkJeworCQkgIGx1YV9wdXNoc3RyaW5nKGx1YSwgaW5ldF9udG9hKGRhdGEuZ2lhZGRyKSk7CisJCSAgbHVhX3NldGZpZWxkKGx1YSwgLTIsICJyZWxheV9hZGRyZXNzIik7CisJCX0KKwkgICAgICAKKwkgICAgICBmb3IgKGkgPSAwOyBidWY7IGkrKykKKwkJeworCQkgIHNwcmludGYoZGFlbW9uLT5kaGNwX2J1ZmYyLCAidXNlcl9jbGFzcyVpIiwgaSk7CisJCSAgYnVmID0gZ3JhYl9leHRyYWRhdGFfbHVhKGJ1ZiwgZW5kLCBkYWVtb24tPmRoY3BfYnVmZjIpOworCQl9CisJICAgICAgCisJICAgICAgaWYgKGRhdGEuYWN0aW9uICE9IEFDVElPTl9ERUwgJiYgZGF0YS5yZW1haW5pbmdfdGltZSAhPSAwKQorCQl7CisJCSAgbHVhX3B1c2hudW1iZXIobHVhLCBkYXRhLnJlbWFpbmluZ190aW1lKTsKKwkJICBsdWFfc2V0ZmllbGQobHVhLCAtMiwgInRpbWVfcmVtYWluaW5nIik7CisJCX0KKwkgICAgICAKKwkgICAgICBpZiAoZGF0YS5hY3Rpb24gPT0gQUNUSU9OX09MRF9IT1NUTkFNRSAmJiBob3N0bmFtZSkKKwkJeworCQkgIGx1YV9wdXNoc3RyaW5nKGx1YSwgaG9zdG5hbWUpOworCQkgIGx1YV9zZXRmaWVsZChsdWEsIC0yLCAib2xkX2hvc3RuYW1lIik7CisJCX0KKwkgICAgICAKKwkgICAgICBpZiAoIWlzNiB8fCBkYXRhLmh3YWRkcl9sZW4gIT0gMCkKKwkJeworCQkgIGx1YV9wdXNoc3RyaW5nKGx1YSwgZGFlbW9uLT5kaGNwX2J1ZmYpOworCQkgIGx1YV9zZXRmaWVsZChsdWEsIC0yLCAibWFjX2FkZHJlc3MiKTsKKwkJfQorCSAgICAgIAorCSAgICAgIGx1YV9wdXNoc3RyaW5nKGx1YSwgZGFlbW9uLT5hZGRyYnVmZik7CisJICAgICAgbHVhX3NldGZpZWxkKGx1YSwgLTIsICJpcF9hZGRyZXNzIik7CisJICAgIAorCSAgICAgIGx1YV9jYWxsKGx1YSwgMiwgMCk7CS8qIHBhc3MgMiB2YWx1ZXMsIGV4cGVjdCAwICovCisJICAgIH0KKwl9CisjZW5kaWYKKworICAgICAgLyogbm8gc2NyaXB0LCBqdXN0IGx1YSAqLworICAgICAgaWYgKCFkYWVtb24tPmxlYXNlX2NoYW5nZV9jb21tYW5kKQorCWNvbnRpbnVlOworCisgICAgICAvKiBQaXBlIHRvIGNhcHR1cmUgc3Rkb3V0IGFuZCBzdGRlcnIgZnJvbSBzY3JpcHQgKi8KKyAgICAgIGlmICghb3B0aW9uX2Jvb2woT1BUX0RFQlVHKSAmJiBwaXBlKHBpcGVvdXQpID09IC0xKQorCWNvbnRpbnVlOworICAgICAgCisgICAgICAvKiBwb3NzaWJsZSBmb3JrIGVycm9ycyBhcmUgYWxsIHRlbXBvcmFyeSByZXNvdXJjZSBwcm9ibGVtcyAqLworICAgICAgd2hpbGUgKChwaWQgPSBmb3JrKCkpID09IC0xICYmIChlcnJubyA9PSBFQUdBSU4gfHwgZXJybm8gPT0gRU5PTUVNKSkKKwlzbGVlcCgyKTsKKworICAgICAgaWYgKHBpZCA9PSAtMSkKKyAgICAgICAgeworCSAgaWYgKCFvcHRpb25fYm9vbChPUFRfREVCVUcpKQorCSAgICB7CisJICAgICAgY2xvc2UocGlwZW91dFswXSk7CisJICAgICAgY2xvc2UocGlwZW91dFsxXSk7CisJICAgIH0KKwkgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAKKyAgICAgIC8qIHdhaXQgZm9yIGNoaWxkIHRvIGNvbXBsZXRlICovCisgICAgICBpZiAocGlkICE9IDApCisJeworCSAgaWYgKCFvcHRpb25fYm9vbChPUFRfREVCVUcpKQorCSAgICB7CisJICAgICAgRklMRSAqZnA7CisJICAKKwkgICAgICBjbG9zZShwaXBlb3V0WzFdKTsKKwkgICAgICAKKwkgICAgICAvKiBSZWFkIGxpbmVzIHNlbnQgdG8gc3Rkb3V0L2VyciBieSB0aGUgc2NyaXB0IGFuZCBwYXNzIHRoZW0gYmFjayB0byBiZSBsb2dnZWQgKi8KKwkgICAgICBpZiAoIShmcCA9IGZkb3BlbihwaXBlb3V0WzBdLCAiciIpKSkKKwkJY2xvc2UocGlwZW91dFswXSk7CisJICAgICAgZWxzZQorCQl7CisJCSAgd2hpbGUgKGZnZXRzKGRhZW1vbi0+cGFja2V0LCBkYWVtb24tPnBhY2tldF9idWZmX3N6LCBmcCkpCisJCSAgICB7CisJCSAgICAgIC8qIGRvIG5vdCBpbmNsdWRlIG5ldyBsaW5lcywgbG9nIHdpbGwgYXBwZW5kIHRoZW0gKi8KKwkJICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbihkYWVtb24tPnBhY2tldCk7CisJCSAgICAgIGlmIChsZW4gPiAwKQorCQkJeworCQkJICAtLWxlbjsKKwkJCSAgaWYgKGRhZW1vbi0+cGFja2V0W2xlbl0gPT0gJ1xuJykKKwkJCSAgICBkYWVtb24tPnBhY2tldFtsZW5dID0gMDsKKwkJCX0KKwkJICAgICAgc2VuZF9ldmVudChldmVudF9mZCwgRVZFTlRfU0NSSVBUX0xPRywgMCwgZGFlbW9uLT5wYWNrZXQpOworCQkgICAgfQorCQkgIGZjbG9zZShmcCk7CisJCX0KKwkgICAgfQorCSAgCisJICAvKiByZWFwIG91ciBjaGlsZHJlbidzIGNoaWxkcmVuLCBpZiBuZWNlc3NhcnkgKi8KKwkgIHdoaWxlICgxKQorCSAgICB7CisJICAgICAgaW50IHN0YXR1czsKKwkgICAgICBwaWRfdCByYyA9IHdhaXQoJnN0YXR1cyk7CisJICAgICAgCisJICAgICAgaWYgKHJjID09IHBpZCkKKwkJeworCQkgIC8qIE9uIGVycm9yIHNlbmQgZXZlbnQgYmFjayB0byBtYWluIHByb2Nlc3MgZm9yIGxvZ2dpbmcgKi8KKwkJICBpZiAoV0lGU0lHTkFMRUQoc3RhdHVzKSkKKwkJICAgIHNlbmRfZXZlbnQoZXZlbnRfZmQsIEVWRU5UX0tJTExFRCwgV1RFUk1TSUcoc3RhdHVzKSwgTlVMTCk7CisJCSAgZWxzZSBpZiAoV0lGRVhJVEVEKHN0YXR1cykgJiYgV0VYSVRTVEFUVVMoc3RhdHVzKSAhPSAwKQorCQkgICAgc2VuZF9ldmVudChldmVudF9mZCwgRVZFTlRfRVhJVEVELCBXRVhJVFNUQVRVUyhzdGF0dXMpLCBOVUxMKTsKKwkJICBicmVhazsKKwkJfQorCSAgICAgIAorCSAgICAgIGlmIChyYyA9PSAtMSAmJiBlcnJubyAhPSBFSU5UUikKKwkJYnJlYWs7CisJICAgIH0KKwkgIAorCSAgY29udGludWU7CisJfQorCisgICAgICBpZiAoIW9wdGlvbl9ib29sKE9QVF9ERUJVRykpCisJeworCSAgLyogbWFwIHN0ZG91dC9zdGRlcnIgb2Ygc2NyaXB0IHRvIHBpcGVvdXQgKi8KKwkgIGNsb3NlKHBpcGVvdXRbMF0pOworCSAgZHVwMihwaXBlb3V0WzFdLCBTVERPVVRfRklMRU5PKTsKKwkgIGR1cDIocGlwZW91dFsxXSwgU1RERVJSX0ZJTEVOTyk7CisJICBjbG9zZShwaXBlb3V0WzFdKTsKKwl9CisgICAgICAKKyAgICAgIGlmIChkYXRhLmFjdGlvbiAhPSBBQ1RJT05fVEZUUCAmJiBkYXRhLmFjdGlvbiAhPSBBQ1RJT05fQVJQKQorCXsKKyNpZmRlZiBIQVZFX0RIQ1A2CisJICBteV9zZXRlbnYoIkROU01BU1FfSUFJRCIsIGlzNiA/IGRhZW1vbi0+ZGhjcF9idWZmMyA6IE5VTEwsICZlcnIpOworCSAgbXlfc2V0ZW52KCJETlNNQVNRX1NFUlZFUl9EVUlEIiwgaXM2ID8gZGFlbW9uLT5kaGNwX3BhY2tldC5pb3ZfYmFzZSA6IE5VTEwsICZlcnIpOyAKKwkgIG15X3NldGVudigiRE5TTUFTUV9NQUMiLCBpczYgJiYgZGF0YS5od2FkZHJfbGVuICE9IDAgPyBkYWVtb24tPmRoY3BfYnVmZiA6IE5VTEwsICZlcnIpOworI2VuZGlmCisJICAKKwkgIG15X3NldGVudigiRE5TTUFTUV9DTElFTlRfSUQiLCAhaXM2ICYmIGRhdGEuY2xpZF9sZW4gIT0gMCA/IGRhZW1vbi0+cGFja2V0IDogTlVMTCwgJmVycik7CisJICBteV9zZXRlbnYoIkROU01BU1FfSU5URVJGQUNFIiwgc3RybGVuKGRhdGEuaW50ZXJmYWNlKSAhPSAwID8gZGF0YS5pbnRlcmZhY2UgOiBOVUxMLCAmZXJyKTsKKwkgIAorI2lmZGVmIEhBVkVfQlJPS0VOX1JUQworCSAgc3ByaW50ZihkYWVtb24tPmRoY3BfYnVmZjIsICIldSIsIGRhdGEubGVuZ3RoKTsKKwkgIG15X3NldGVudigiRE5TTUFTUV9MRUFTRV9MRU5HVEgiLCBkYWVtb24tPmRoY3BfYnVmZjIsICZlcnIpOworI2Vsc2UKKwkgIHNwcmludGYoZGFlbW9uLT5kaGNwX2J1ZmYyLCAiJWx1IiwgKHVuc2lnbmVkIGxvbmcpZGF0YS5leHBpcmVzKTsKKwkgIG15X3NldGVudigiRE5TTUFTUV9MRUFTRV9FWFBJUkVTIiwgZGFlbW9uLT5kaGNwX2J1ZmYyLCAmZXJyKTsgCisjZW5kaWYKKwkgIAorCSAgbXlfc2V0ZW52KCJETlNNQVNRX0RPTUFJTiIsIGRvbWFpbiwgJmVycik7CisJICAKKwkgIGVuZCA9IGV4dHJhZGF0YSArIGRhdGEuZWRfbGVuOworCSAgYnVmID0gZXh0cmFkYXRhOworCSAgCisJICBpZiAoIWlzNikKKwkgICAgYnVmID0gZ3JhYl9leHRyYWRhdGEoYnVmLCBlbmQsICJETlNNQVNRX1ZFTkRPUl9DTEFTUyIsICZlcnIpOworI2lmZGVmIEhBVkVfREhDUDYKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGlmIChkYXRhLnZlbmRvcmNsYXNzX2NvdW50ICE9IDApCisJCXsKKwkJICBidWYgPSBncmFiX2V4dHJhZGF0YShidWYsIGVuZCwgIkROU01BU1FfVkVORE9SX0NMQVNTX0lEIiwgJmVycik7CisJCSAgZm9yIChpID0gMDsgaSA8IGRhdGEudmVuZG9yY2xhc3NfY291bnQgLSAxOyBpKyspCisJCSAgICB7CisJCSAgICAgIHNwcmludGYoZGFlbW9uLT5kaGNwX2J1ZmYyLCAiRE5TTUFTUV9WRU5ET1JfQ0xBU1MlaSIsIGkpOworCQkgICAgICBidWYgPSBncmFiX2V4dHJhZGF0YShidWYsIGVuZCwgZGFlbW9uLT5kaGNwX2J1ZmYyLCAmZXJyKTsKKwkJICAgIH0KKwkJfQorCSAgICB9CisjZW5kaWYKKwkgIAorCSAgYnVmID0gZ3JhYl9leHRyYWRhdGEoYnVmLCBlbmQsICJETlNNQVNRX1NVUFBMSUVEX0hPU1ROQU1FIiwgJmVycik7CisJICAKKwkgIGlmICghaXM2KQorCSAgICB7CisJICAgICAgYnVmID0gZ3JhYl9leHRyYWRhdGEoYnVmLCBlbmQsICJETlNNQVNRX0NQRVdBTl9PVUkiLCAmZXJyKTsKKwkgICAgICBidWYgPSBncmFiX2V4dHJhZGF0YShidWYsIGVuZCwgIkROU01BU1FfQ1BFV0FOX1NFUklBTCIsICZlcnIpOyAgIAorCSAgICAgIGJ1ZiA9IGdyYWJfZXh0cmFkYXRhKGJ1ZiwgZW5kLCAiRE5TTUFTUV9DUEVXQU5fQ0xBU1MiLCAmZXJyKTsKKwkgICAgICBidWYgPSBncmFiX2V4dHJhZGF0YShidWYsIGVuZCwgIkROU01BU1FfQ0lSQ1VJVF9JRCIsICZlcnIpOworCSAgICAgIGJ1ZiA9IGdyYWJfZXh0cmFkYXRhKGJ1ZiwgZW5kLCAiRE5TTUFTUV9TVUJTQ1JJQkVSX0lEIiwgJmVycik7CisJICAgICAgYnVmID0gZ3JhYl9leHRyYWRhdGEoYnVmLCBlbmQsICJETlNNQVNRX1JFTU9URV9JRCIsICZlcnIpOworCSAgICAgIGJ1ZiA9IGdyYWJfZXh0cmFkYXRhKGJ1ZiwgZW5kLCAiRE5TTUFTUV9SRVFVRVNURURfT1BUSU9OUyIsICZlcnIpOworCSAgICB9CisJICAKKwkgIGJ1ZiA9IGdyYWJfZXh0cmFkYXRhKGJ1ZiwgZW5kLCAiRE5TTUFTUV9UQUdTIiwgJmVycik7CisKKwkgIGlmIChpczYpCisJICAgIGJ1ZiA9IGdyYWJfZXh0cmFkYXRhKGJ1ZiwgZW5kLCAiRE5TTUFTUV9SRUxBWV9BRERSRVNTIiwgJmVycik7CisJICBlbHNlIAorCSAgICBteV9zZXRlbnYoIkROU01BU1FfUkVMQVlfQUREUkVTUyIsIGRhdGEuZ2lhZGRyLnNfYWRkciAhPSAwID8gaW5ldF9udG9hKGRhdGEuZ2lhZGRyKSA6IE5VTEwsICZlcnIpOyAKKwkgIAorCSAgZm9yIChpID0gMDsgYnVmOyBpKyspCisJICAgIHsKKwkgICAgICBzcHJpbnRmKGRhZW1vbi0+ZGhjcF9idWZmMiwgIkROU01BU1FfVVNFUl9DTEFTUyVpIiwgaSk7CisJICAgICAgYnVmID0gZ3JhYl9leHRyYWRhdGEoYnVmLCBlbmQsIGRhZW1vbi0+ZGhjcF9idWZmMiwgJmVycik7CisJICAgIH0KKwkgIAorCSAgc3ByaW50ZihkYWVtb24tPmRoY3BfYnVmZjIsICIldSIsIGRhdGEucmVtYWluaW5nX3RpbWUpOworCSAgbXlfc2V0ZW52KCJETlNNQVNRX1RJTUVfUkVNQUlOSU5HIiwgZGF0YS5hY3Rpb24gIT0gQUNUSU9OX0RFTCAmJiBkYXRhLnJlbWFpbmluZ190aW1lICE9IDAgPyBkYWVtb24tPmRoY3BfYnVmZjIgOiBOVUxMLCAmZXJyKTsKKwkgIAorCSAgbXlfc2V0ZW52KCJETlNNQVNRX09MRF9IT1NUTkFNRSIsIGRhdGEuYWN0aW9uID09IEFDVElPTl9PTERfSE9TVE5BTUUgPyBob3N0bmFtZSA6IE5VTEwsICZlcnIpOworCSAgaWYgKGRhdGEuYWN0aW9uID09IEFDVElPTl9PTERfSE9TVE5BTUUpCisJICAgIGhvc3RuYW1lID0gTlVMTDsKKwkgIAorCSAgbXlfc2V0ZW52KCJETlNNQVNRX0xPR19ESENQIiwgb3B0aW9uX2Jvb2woT1BUX0xPR19PUFRTKSA/ICIxIiA6IE5VTEwsICZlcnIpOworCX0KKyAgICAgIAorICAgICAgLyogd2UgbmVlZCB0byBoYXZlIHRoZSBldmVudF9mZCBhcm91bmQgaWYgZXhlYyBmYWlscyAqLworICAgICAgaWYgKChpID0gZmNudGwoZXZlbnRfZmQsIEZfR0VURkQpKSAhPSAtMSkKKwlmY250bChldmVudF9mZCwgRl9TRVRGRCwgaSB8IEZEX0NMT0VYRUMpOworICAgICAgY2xvc2UocGlwZWZkWzBdKTsKKworICAgICAgcCA9ICBzdHJyY2hyKGRhZW1vbi0+bGVhc2VfY2hhbmdlX2NvbW1hbmQsICcvJyk7CisgICAgICBpZiAoZXJyID09IDApCisJeworCSAgZXhlY2woZGFlbW9uLT5sZWFzZV9jaGFuZ2VfY29tbWFuZCwgCisJCXAgPyBwKzEgOiBkYWVtb24tPmxlYXNlX2NoYW5nZV9jb21tYW5kLCBhY3Rpb25fc3RyLCAKKwkJKGlzNiAmJiBkYXRhLmFjdGlvbiAhPSBBQ1RJT05fQVJQKSA/IGRhZW1vbi0+cGFja2V0IDogZGFlbW9uLT5kaGNwX2J1ZmYsIAorCQlkYWVtb24tPmFkZHJidWZmLCBob3N0bmFtZSwgKGNoYXIqKU5VTEwpOworCSAgZXJyID0gZXJybm87CisJfQorICAgICAgLyogZmFpbGVkLCBzZW5kIGV2ZW50IHNvIHRoZSBtYWluIHByb2Nlc3MgbG9ncyB0aGUgcHJvYmxlbSAqLworICAgICAgc2VuZF9ldmVudChldmVudF9mZCwgRVZFTlRfRVhFQ19FUlIsIGVyciwgTlVMTCk7CisgICAgICBfZXhpdCgwKTsgCisgICAgfQorfQorCitzdGF0aWMgdm9pZCBteV9zZXRlbnYoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUsIGludCAqZXJyb3IpCit7CisgIGlmICgqZXJyb3IgPT0gMCkKKyAgICB7CisgICAgICBpZiAoIXZhbHVlKQorCXVuc2V0ZW52KG5hbWUpOworICAgICAgZWxzZSBpZiAoc2V0ZW52KG5hbWUsIHZhbHVlLCAxKSAhPSAwKQorCSplcnJvciA9IGVycm5vOworICAgIH0KK30KKyAKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICpncmFiX2V4dHJhZGF0YSh1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGNoYXIgKmVuZCwgIGNoYXIgKmVudiwgaW50ICplcnIpCit7CisgIHVuc2lnbmVkIGNoYXIgKm5leHQgPSBOVUxMOworICBjaGFyICp2YWwgPSBOVUxMOworCisgIGlmIChidWYgJiYgKGJ1ZiAhPSBlbmQpKQorICAgIHsKKyAgICAgIGZvciAobmV4dCA9IGJ1ZjsgOyBuZXh0KyspCisJaWYgKG5leHQgPT0gZW5kKQorCSAgeworCSAgICBuZXh0ID0gTlVMTDsKKwkgICAgYnJlYWs7CisJICB9CisJZWxzZSBpZiAoKm5leHQgPT0gMCkKKwkgIGJyZWFrOworCisgICAgICBpZiAobmV4dCAmJiAobmV4dCAhPSBidWYpKQorCXsKKwkgIGNoYXIgKnA7CisJICAvKiBObyAiPSIgaW4gdmFsdWUgKi8KKwkgIGlmICgocCA9IHN0cmNocigoY2hhciAqKWJ1ZiwgJz0nKSkpCisJICAgICpwID0gMDsKKwkgIHZhbCA9IChjaGFyICopYnVmOworCX0KKyAgICB9CisgIAorICBteV9zZXRlbnYoZW52LCB2YWwsIGVycik7CisgICAKKyAgcmV0dXJuIG5leHQgPyBuZXh0ICsgMSA6IE5VTEw7Cit9CisKKyNpZmRlZiBIQVZFX0xVQVNDUklQVAorc3RhdGljIHVuc2lnbmVkIGNoYXIgKmdyYWJfZXh0cmFkYXRhX2x1YSh1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGNoYXIgKmVuZCwgY2hhciAqZmllbGQpCit7CisgIHVuc2lnbmVkIGNoYXIgKm5leHQ7CisKKyAgaWYgKCFidWYgfHwgKGJ1ZiA9PSBlbmQpKQorICAgIHJldHVybiBOVUxMOworCisgIGZvciAobmV4dCA9IGJ1ZjsgKm5leHQgIT0gMDsgbmV4dCsrKQorICAgIGlmIChuZXh0ID09IGVuZCkKKyAgICAgIHJldHVybiBOVUxMOworICAKKyAgaWYgKG5leHQgIT0gYnVmKQorICAgIHsKKyAgICAgIGx1YV9wdXNoc3RyaW5nKGx1YSwgIChjaGFyICopYnVmKTsKKyAgICAgIGx1YV9zZXRmaWVsZChsdWEsIC0yLCBmaWVsZCk7CisgICAgfQorCisgIHJldHVybiBuZXh0ICsgMTsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBidWZmX2FsbG9jKHNpemVfdCBzaXplKQoreworICBpZiAoc2l6ZSA+IGJ1Zl9zaXplKQorICAgIHsKKyAgICAgIHN0cnVjdCBzY3JpcHRfZGF0YSAqbmV3OworICAgICAgCisgICAgICAvKiBzdGFydCB3aXRoIHJlYXNvbmFibGUgc2l6ZSwgd2lsbCBhbG1vc3QgbmV2ZXIgbmVlZCBleHRlbmRpbmcuICovCisgICAgICBpZiAoc2l6ZSA8IHNpemVvZihzdHJ1Y3Qgc2NyaXB0X2RhdGEpICsgMjAwKQorCXNpemUgPSBzaXplb2Yoc3RydWN0IHNjcmlwdF9kYXRhKSArIDIwMDsKKworICAgICAgaWYgKCEobmV3ID0gd2hpbmVfbWFsbG9jKHNpemUpKSkKKwlyZXR1cm47CisgICAgICBpZiAoYnVmKQorCWZyZWUoYnVmKTsKKyAgICAgIGJ1ZiA9IG5ldzsKKyAgICAgIGJ1Zl9zaXplID0gc2l6ZTsKKyAgICB9Cit9CisKKy8qIHBhY2sgdXAgbGVhc2UgZGF0YSBpbnRvIGEgYnVmZmVyICovICAgIAordm9pZCBxdWV1ZV9zY3JpcHQoaW50IGFjdGlvbiwgc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlLCBjaGFyICpob3N0bmFtZSwgdGltZV90IG5vdykKK3sKKyAgdW5zaWduZWQgY2hhciAqcDsKKyAgdW5zaWduZWQgaW50IGhvc3RuYW1lX2xlbiA9IDAsIGNsaWRfbGVuID0gMCwgZWRfbGVuID0gMDsKKyAgaW50IGZkID0gZGFlbW9uLT5kaGNwZmQ7CisjaWZkZWYgSEFWRV9ESENQNiAKKyAgaWYgKCFkYWVtb24tPmRoY3ApCisgICAgZmQgPSBkYWVtb24tPmRoY3A2ZmQ7CisjZW5kaWYKKworICAvKiBubyBzY3JpcHQgKi8KKyAgaWYgKGRhZW1vbi0+aGVscGVyZmQgPT0gLTEpCisgICAgcmV0dXJuOworCisgIGlmIChsZWFzZS0+ZXh0cmFkYXRhKQorICAgIGVkX2xlbiA9IGxlYXNlLT5leHRyYWRhdGFfbGVuOworICBpZiAobGVhc2UtPmNsaWQpCisgICAgY2xpZF9sZW4gPSBsZWFzZS0+Y2xpZF9sZW47CisgIGlmIChob3N0bmFtZSkKKyAgICBob3N0bmFtZV9sZW4gPSBzdHJsZW4oaG9zdG5hbWUpICsgMTsKKworICBidWZmX2FsbG9jKHNpemVvZihzdHJ1Y3Qgc2NyaXB0X2RhdGEpICsgIGNsaWRfbGVuICsgZWRfbGVuICsgaG9zdG5hbWVfbGVuKTsKKworICBidWYtPmFjdGlvbiA9IGFjdGlvbjsKKyAgYnVmLT5mbGFncyA9IGxlYXNlLT5mbGFnczsKKyNpZmRlZiBIQVZFX0RIQ1A2IAorICBidWYtPnZlbmRvcmNsYXNzX2NvdW50ID0gbGVhc2UtPnZlbmRvcmNsYXNzX2NvdW50OworICBidWYtPmFkZHI2ID0gbGVhc2UtPmFkZHI2OworICBidWYtPmlhaWQgPSBsZWFzZS0+aWFpZDsKKyNlbmRpZgorICBidWYtPmh3YWRkcl9sZW4gPSBsZWFzZS0+aHdhZGRyX2xlbjsKKyAgYnVmLT5od2FkZHJfdHlwZSA9IGxlYXNlLT5od2FkZHJfdHlwZTsKKyAgYnVmLT5jbGlkX2xlbiA9IGNsaWRfbGVuOworICBidWYtPmVkX2xlbiA9IGVkX2xlbjsKKyAgYnVmLT5ob3N0bmFtZV9sZW4gPSBob3N0bmFtZV9sZW47CisgIGJ1Zi0+YWRkciA9IGxlYXNlLT5hZGRyOworICBidWYtPmdpYWRkciA9IGxlYXNlLT5naWFkZHI7CisgIG1lbWNweShidWYtPmh3YWRkciwgbGVhc2UtPmh3YWRkciwgREhDUF9DSEFERFJfTUFYKTsKKyAgaWYgKCFpbmRleHRvbmFtZShmZCwgbGVhc2UtPmxhc3RfaW50ZXJmYWNlLCBidWYtPmludGVyZmFjZSkpCisgICAgYnVmLT5pbnRlcmZhY2VbMF0gPSAwOworICAKKyNpZmRlZiBIQVZFX0JST0tFTl9SVEMgCisgIGJ1Zi0+bGVuZ3RoID0gbGVhc2UtPmxlbmd0aDsKKyNlbHNlCisgIGJ1Zi0+ZXhwaXJlcyA9IGxlYXNlLT5leHBpcmVzOworI2VuZGlmCisKKyAgaWYgKGxlYXNlLT5leHBpcmVzICE9IDApCisgICAgYnVmLT5yZW1haW5pbmdfdGltZSA9ICh1bnNpZ25lZCBpbnQpZGlmZnRpbWUobGVhc2UtPmV4cGlyZXMsIG5vdyk7CisgIGVsc2UKKyAgICBidWYtPnJlbWFpbmluZ190aW1lID0gMDsKKworICBwID0gKHVuc2lnbmVkIGNoYXIgKikoYnVmKzEpOworICBpZiAoY2xpZF9sZW4gIT0gMCkKKyAgICB7CisgICAgICBtZW1jcHkocCwgbGVhc2UtPmNsaWQsIGNsaWRfbGVuKTsKKyAgICAgIHAgKz0gY2xpZF9sZW47CisgICAgfQorICBpZiAoaG9zdG5hbWVfbGVuICE9IDApCisgICAgeworICAgICAgbWVtY3B5KHAsIGhvc3RuYW1lLCBob3N0bmFtZV9sZW4pOworICAgICAgcCArPSBob3N0bmFtZV9sZW47CisgICAgfQorICBpZiAoZWRfbGVuICE9IDApCisgICAgeworICAgICAgbWVtY3B5KHAsIGxlYXNlLT5leHRyYWRhdGEsIGVkX2xlbik7CisgICAgICBwICs9IGVkX2xlbjsKKyAgICB9CisgIGJ5dGVzX2luX2J1ZiA9IHAgLSAodW5zaWduZWQgY2hhciAqKWJ1ZjsKK30KKworI2lmZGVmIEhBVkVfVEZUUAorLyogVGhpcyBuYXN0aWx5IHJlLXVzZXMgREhDUC1maWVsZHMgZm9yIFRGVFAgc3R1ZmYgKi8KK3ZvaWQgcXVldWVfdGZ0cChvZmZfdCBmaWxlX2xlbiwgY2hhciAqZmlsZW5hbWUsIHVuaW9uIG15c29ja2FkZHIgKnBlZXIpCit7CisgIHVuc2lnbmVkIGludCBmaWxlbmFtZV9sZW47CisKKyAgLyogbm8gc2NyaXB0ICovCisgIGlmIChkYWVtb24tPmhlbHBlcmZkID09IC0xKQorICAgIHJldHVybjsKKyAgCisgIGZpbGVuYW1lX2xlbiA9IHN0cmxlbihmaWxlbmFtZSkgKyAxOworICBidWZmX2FsbG9jKHNpemVvZihzdHJ1Y3Qgc2NyaXB0X2RhdGEpICsgIGZpbGVuYW1lX2xlbik7CisgIG1lbXNldChidWYsIDAsIHNpemVvZihzdHJ1Y3Qgc2NyaXB0X2RhdGEpKTsKKworICBidWYtPmFjdGlvbiA9IEFDVElPTl9URlRQOworICBidWYtPmhvc3RuYW1lX2xlbiA9IGZpbGVuYW1lX2xlbjsKKyAgYnVmLT5maWxlX2xlbiA9IGZpbGVfbGVuOworCisgIGlmICgoYnVmLT5mbGFncyA9IHBlZXItPnNhLnNhX2ZhbWlseSkgPT0gQUZfSU5FVCkKKyAgICBidWYtPmFkZHIgPSBwZWVyLT5pbi5zaW5fYWRkcjsKKyNpZmRlZiBIQVZFX0lQVjYKKyAgZWxzZQorICAgIGJ1Zi0+YWRkcjYgPSBwZWVyLT5pbjYuc2luNl9hZGRyOworI2VuZGlmCisKKyAgbWVtY3B5KCh1bnNpZ25lZCBjaGFyICopKGJ1ZisxKSwgZmlsZW5hbWUsIGZpbGVuYW1lX2xlbik7CisgIAorICBieXRlc19pbl9idWYgPSBzaXplb2Yoc3RydWN0IHNjcmlwdF9kYXRhKSArICBmaWxlbmFtZV9sZW47Cit9CisjZW5kaWYKKwordm9pZCBxdWV1ZV9hcnAoaW50IGFjdGlvbiwgdW5zaWduZWQgY2hhciAqbWFjLCBpbnQgbWFjbGVuLCBpbnQgZmFtaWx5LCBzdHJ1Y3QgYWxsX2FkZHIgKmFkZHIpCit7CisgIC8qIG5vIHNjcmlwdCAqLworICBpZiAoZGFlbW9uLT5oZWxwZXJmZCA9PSAtMSkKKyAgICByZXR1cm47CisgIAorICBidWZmX2FsbG9jKHNpemVvZihzdHJ1Y3Qgc2NyaXB0X2RhdGEpKTsKKyAgbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKHN0cnVjdCBzY3JpcHRfZGF0YSkpOworCisgIGJ1Zi0+YWN0aW9uID0gYWN0aW9uOworICBidWYtPmh3YWRkcl9sZW4gPSBtYWNsZW47CisgIGJ1Zi0+aHdhZGRyX3R5cGUgPSAgQVJQSFJEX0VUSEVSOyAKKyAgaWYgKChidWYtPmZsYWdzID0gZmFtaWx5KSA9PSBBRl9JTkVUKQorICAgIGJ1Zi0+YWRkciA9IGFkZHItPmFkZHIuYWRkcjQ7CisjaWZkZWYgSEFWRV9JUFY2CisgIGVsc2UKKyAgICBidWYtPmFkZHI2ID0gYWRkci0+YWRkci5hZGRyNjsKKyNlbmRpZgorICAKKyAgbWVtY3B5KGJ1Zi0+aHdhZGRyLCBtYWMsIG1hY2xlbik7CisgIAorICBieXRlc19pbl9idWYgPSBzaXplb2Yoc3RydWN0IHNjcmlwdF9kYXRhKTsKK30KKworaW50IGhlbHBlcl9idWZfZW1wdHkodm9pZCkKK3sKKyAgcmV0dXJuIGJ5dGVzX2luX2J1ZiA9PSAwOworfQorCit2b2lkIGhlbHBlcl93cml0ZSh2b2lkKQoreworICBzc2l6ZV90IHJjOworCisgIGlmIChieXRlc19pbl9idWYgPT0gMCkKKyAgICByZXR1cm47CisgIAorICBpZiAoKHJjID0gd3JpdGUoZGFlbW9uLT5oZWxwZXJmZCwgYnVmLCBieXRlc19pbl9idWYpKSAhPSAtMSkKKyAgICB7CisgICAgICBpZiAoYnl0ZXNfaW5fYnVmICE9IChzaXplX3QpcmMpCisJbWVtbW92ZShidWYsIGJ1ZiArIHJjLCBieXRlc19pbl9idWYgLSByYyk7IAorICAgICAgYnl0ZXNfaW5fYnVmIC09IHJjOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChlcnJubyA9PSBFQUdBSU4gfHwgZXJybm8gPT0gRUlOVFIpCisJcmV0dXJuOworICAgICAgYnl0ZXNfaW5fYnVmID0gMDsKKyAgICB9Cit9CisKKyNlbmRpZgorCisKKwpkaWZmIC0tZ2l0IGEvc3JjL2lub3RpZnkuYyBiL3NyYy9pbm90aWZ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVhMTdkZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbm90aWZ5LmMKQEAgLTAsMCArMSwyOTYgQEAKKy8qIGRuc21hc3EgaXMgQ29weXJpZ2h0IChjKSAyMDAwLTIwMTcgU2ltb24gS2VsbGV5CisgCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMgZGF0ZWQgMjkgSnVuZSwgMjAwNy4KKyAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2luY2x1ZGUgImRuc21hc3EuaCIKKyNpZmRlZiBIQVZFX0lOT1RJRlkKKworI2luY2x1ZGUgPHN5cy9pbm90aWZ5Lmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+IC8qIEZvciBNQVhTWU1MSU5LUyAqLworCisvKiB0aGUgc3RyYXRlZ3kgaXMgdG8gc2V0IGEgaW5vdGlmeSBvbiB0aGUgZGlyZWN0b3JpZXMgY29udGFpbmluZworICAgcmVzb2x2IGZpbGVzLCBmb3IgYW55IGZpbGVzIGluIHRoZSBkaXJlY3Rvcnkgd2hpY2ggYXJlIGNsb3NlLXdyaXRlIAorICAgb3IgbW92ZWQgaW50byB0aGUgZGlyZWN0b3J5LgorICAgCisgICBXaGVuIGVpdGhlciBvZiB0aG9zZSBoYXBwZW4sIHdlIGxvb2sgdG8gc2VlIGlmIHRoZSBmaWxlIGludm9sdmVkCisgICBpcyBhY3R1YWxseSBhIHJlc29sdi1maWxlLCBhbmQgaWYgc28sIGNhbGwgcG9sbC1yZXNvbHYgd2l0aAorICAgdGhlICJmb3JjZSIgYXJndW1lbnQsIHRvIGVuc3VyZSBpdCdzIHJlYWQuCisKKyAgIFRoaXMgYWRkcyBvbmUgbmV3IGVycm9yIGNvbmRpdGlvbjogdGhlIGRpcmVjdG9yaWVzIGNvbnRhaW5pbmcKKyAgIGFsbCBzcGVjaWZpZWQgcmVzb2x2LWZpbGVzIG11c3QgZXhpc3QgYXQgc3RhcnQtdXAsIGV2ZW4gaWYgdGhlIGFjdHVhbAorICAgZmlsZXMgZG9uJ3QuIAorKi8KKworc3RhdGljIGNoYXIgKmlub3RpZnlfYnVmZmVyOworI2RlZmluZSBJTk9USUZZX1NaIChzaXplb2Yoc3RydWN0IGlub3RpZnlfZXZlbnQpICsgTkFNRV9NQVggKyAxKQorCisvKiBJZiBwYXRoIGlzIGEgc3ltYm9saWMgbGluaywgcmV0dXJuIHRoZSBwYXRoIGl0CisgICBwb2ludHMgdG8sIG1hZGUgYWJzb2x1dGUgaWYgcmVsYXRpdmUuCisgICBJZiBwYXRoIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgbm90IGEgc3ltbGluaywgcmV0dXJuIE5VTEwuCisgICBSZXR1cm4gdmFsdWUgaXMgbWFsbG9jJ2VkICovCitzdGF0aWMgY2hhciAqbXlfcmVhZGxpbmsoY2hhciAqcGF0aCkKK3sKKyAgc3NpemVfdCByYywgc2l6ZSA9IDY0OworICBjaGFyICpidWY7CisKKyAgd2hpbGUgKDEpCisgICAgeworICAgICAgYnVmID0gc2FmZV9tYWxsb2Moc2l6ZSk7CisgICAgICByYyA9IHJlYWRsaW5rKHBhdGgsIGJ1ZiwgKHNpemVfdClzaXplKTsKKyAgICAgIAorICAgICAgaWYgKHJjID09IC0xKQorCXsKKwkgIC8qIE5vdCBsaW5rIG9yIGRvZXNuJ3QgZXhpc3QuICovCisJICBpZiAoZXJybm8gPT0gRUlOVkFMIHx8IGVycm5vID09IEVOT0VOVCkKKwkgICAgeworCSAgICAgIGZyZWUoYnVmKTsKKwkgICAgICByZXR1cm4gTlVMTDsKKwkgICAgfQorCSAgZWxzZQorCSAgICBkaWUoXygiY2Fubm90IGFjY2VzcyBwYXRoICVzOiAlcyIpLCBwYXRoLCBFQ19NSVNDKTsKKwl9CisgICAgICBlbHNlIGlmIChyYyA8IHNpemUtMSkKKwl7CisJICBjaGFyICpkOworCSAgCisJICBidWZbcmNdID0gMDsKKwkgIGlmIChidWZbMF0gIT0gJy8nICYmICgoZCA9IHN0cnJjaHIocGF0aCwgJy8nKSkpKQorCSAgICB7CisJICAgICAgLyogQWRkIHBhdGggdG8gcmVsYXRpdmUgbGluayAqLworCSAgICAgIGNoYXIgKm5ld19idWYgPSBzYWZlX21hbGxvYygoZCAtIHBhdGgpICsgc3RybGVuKGJ1ZikgKyAyKTsKKwkgICAgICAqKGQrMSkgPSAwOworCSAgICAgIHN0cmNweShuZXdfYnVmLCBwYXRoKTsKKwkgICAgICBzdHJjYXQobmV3X2J1ZiwgYnVmKTsKKwkgICAgICBmcmVlKGJ1Zik7CisJICAgICAgYnVmID0gbmV3X2J1ZjsKKwkgICAgfQorCSAgcmV0dXJuIGJ1ZjsKKwl9CisKKyAgICAgIC8qIEJ1ZmZlciB0b28gc21hbGwsIGluY3JlYXNlIGFuZCByZXRyeSAqLworICAgICAgc2l6ZSArPSA2NDsKKyAgICAgIGZyZWUoYnVmKTsKKyAgICB9Cit9CisKK3ZvaWQgaW5vdGlmeV9kbnNtYXNxX2luaXQoKQoreworICBzdHJ1Y3QgcmVzb2x2YyAqcmVzOworICBpbm90aWZ5X2J1ZmZlciA9IHNhZmVfbWFsbG9jKElOT1RJRllfU1opOworICBkYWVtb24tPmlub3RpZnlmZCA9IGlub3RpZnlfaW5pdDEoSU5fTk9OQkxPQ0sgfCBJTl9DTE9FWEVDKTsKKyAgCisgIGlmIChkYWVtb24tPmlub3RpZnlmZCA9PSAtMSkKKyAgICBkaWUoXygiZmFpbGVkIHRvIGNyZWF0ZSBpbm90aWZ5OiAlcyIpLCBOVUxMLCBFQ19NSVNDKTsKKworICBpZiAob3B0aW9uX2Jvb2woT1BUX05PX1JFU09MVikpCisgICAgcmV0dXJuOworICAKKyAgZm9yIChyZXMgPSBkYWVtb24tPnJlc29sdl9maWxlczsgcmVzOyByZXMgPSByZXMtPm5leHQpCisgICAgeworICAgICAgY2hhciAqZCwgKm5ld19wYXRoLCAqcGF0aCA9IHNhZmVfbWFsbG9jKHN0cmxlbihyZXMtPm5hbWUpICsgMSk7CisgICAgICBpbnQgbGlua3MgPSBNQVhTWU1MSU5LUzsKKworICAgICAgc3RyY3B5KHBhdGgsIHJlcy0+bmFtZSk7CisKKyAgICAgIC8qIEZvbGxvdyBzeW1saW5rcyB1bnRpbCB3ZSByZWFjaCBhIG5vbi1zeW1saW5rLCBvciBhIG5vbi1leGlzdGVudCBmaWxlLiAqLworICAgICAgd2hpbGUgKChuZXdfcGF0aCA9IG15X3JlYWRsaW5rKHBhdGgpKSkKKwl7CisJICBpZiAobGlua3MtLSA9PSAwKQorCSAgICBkaWUoXygidG9vIG1hbnkgc3ltbGlua3MgZm9sbG93aW5nICVzIiksIHJlcy0+bmFtZSwgRUNfTUlTQyk7CisJICBmcmVlKHBhdGgpOworCSAgcGF0aCA9IG5ld19wYXRoOworCX0KKworICAgICAgcmVzLT53ZCA9IC0xOworCisgICAgICBpZiAoKGQgPSBzdHJyY2hyKHBhdGgsICcvJykpKQorCXsKKwkgICpkID0gMDsgLyogbWFrZSBwYXRoIGp1c3QgZGlyZWN0b3J5ICovCisJICByZXMtPndkID0gaW5vdGlmeV9hZGRfd2F0Y2goZGFlbW9uLT5pbm90aWZ5ZmQsIHBhdGgsIElOX0NMT1NFX1dSSVRFIHwgSU5fTU9WRURfVE8pOworCisJICByZXMtPmZpbGUgPSBkKzE7IC8qIHBvaW50ZXIgdG8gZmlsZW5hbWUgKi8KKwkgICpkID0gJy8nOworCSAgCisJICBpZiAocmVzLT53ZCA9PSAtMSAmJiBlcnJubyA9PSBFTk9FTlQpCisJICAgIGRpZShfKCJkaXJlY3RvcnkgJXMgZm9yIHJlc29sdi1maWxlIGlzIG1pc3NpbmcsIGNhbm5vdCBwb2xsIiksIHJlcy0+bmFtZSwgRUNfTUlTQyk7CisJfQkgIAorCSAKKyAgICAgIGlmIChyZXMtPndkID09IC0xKQorCWRpZShfKCJmYWlsZWQgdG8gY3JlYXRlIGlub3RpZnkgZm9yICVzOiAlcyIpLCByZXMtPm5hbWUsIEVDX01JU0MpOworCQorICAgIH0KK30KKworCisvKiBpbml0aWFsaXNhdGlvbiBmb3IgZHluYW1pYy1kaXIuIFNldCBpbm90aWZ5IHdhdGNoIGZvciBlYWNoIGRpcmVjdG9yeSwgYW5kIHJlYWQgcHJlLWV4aXN0aW5nIGZpbGVzICovCit2b2lkIHNldF9keW5hbWljX2lub3RpZnkoaW50IGZsYWcsIGludCB0b3RhbF9zaXplLCBzdHJ1Y3QgY3JlYyAqKnJoYXNoLCBpbnQgcmV2aGFzaHN6KQoreworICBzdHJ1Y3QgaG9zdHNmaWxlICphaDsKKyAgCisgIGZvciAoYWggPSBkYWVtb24tPmR5bmFtaWNfZGlyczsgYWg7IGFoID0gYWgtPm5leHQpCisgICAgeworICAgICAgRElSICpkaXJfc3RyZWFtID0gTlVMTDsKKyAgICAgIHN0cnVjdCBkaXJlbnQgKmVudDsKKyAgICAgIHN0cnVjdCBzdGF0IGJ1ZjsKKyAgICAgCisgICAgICBpZiAoIShhaC0+ZmxhZ3MgJiBmbGFnKSkKKwljb250aW51ZTsKKyAKKyAgICAgIGlmIChzdGF0KGFoLT5mbmFtZSwgJmJ1ZikgPT0gLTEgfHwgIShTX0lTRElSKGJ1Zi5zdF9tb2RlKSkpCisJeworCSAgbXlfc3lzbG9nKExPR19FUlIsIF8oImJhZCBkeW5hbWljIGRpcmVjdG9yeSAlczogJXMiKSwgCisJCSAgICBhaC0+Zm5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJICBjb250aW51ZTsKKwl9CisgICAgICAKKyAgICAgICBpZiAoIShhaC0+ZmxhZ3MgJiBBSF9XRF9ET05FKSkKKwkgeworCSAgIGFoLT53ZCA9IGlub3RpZnlfYWRkX3dhdGNoKGRhZW1vbi0+aW5vdGlmeWZkLCBhaC0+Zm5hbWUsIElOX0NMT1NFX1dSSVRFIHwgSU5fTU9WRURfVE8pOworCSAgIGFoLT5mbGFncyB8PSBBSF9XRF9ET05FOworCSB9CisKKyAgICAgICAvKiBSZWFkIGNvbnRlbnRzIG9mIGRpciBfYWZ0ZXJfIGNhbGxpbmcgYWRkX3dhdGNoLCBpbiB0aGUgaG9wZSBvZiBhdm9pZGluZworCSAgYSByYWNlIHdoaWNoIG1pc3NlcyBmaWxlcyBiZWluZyBhZGRlZCBhcyB3ZSBzdGFydCAqLworICAgICAgIGlmIChhaC0+d2QgPT0gLTEgfHwgIShkaXJfc3RyZWFtID0gb3BlbmRpcihhaC0+Zm5hbWUpKSkKKwkgeworCSAgIG15X3N5c2xvZyhMT0dfRVJSLCBfKCJmYWlsZWQgdG8gY3JlYXRlIGlub3RpZnkgZm9yICVzOiAlcyIpLAorCQkgICAgIGFoLT5mbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkgICBjb250aW51ZTsKKwkgfQorCisgICAgICAgd2hpbGUgKChlbnQgPSByZWFkZGlyKGRpcl9zdHJlYW0pKSkKKwkgeworCSAgIHNpemVfdCBsZW5kaXIgPSBzdHJsZW4oYWgtPmZuYW1lKTsKKwkgICBzaXplX3QgbGVuZmlsZSA9IHN0cmxlbihlbnQtPmRfbmFtZSk7CisJICAgY2hhciAqcGF0aDsKKwkgICAKKwkgICAvKiBpZ25vcmUgZW1hY3MgYmFja3VwcyBhbmQgZG90ZmlsZXMgKi8KKwkgICBpZiAobGVuZmlsZSA9PSAwIHx8IAorCSAgICAgICBlbnQtPmRfbmFtZVtsZW5maWxlIC0gMV0gPT0gJ34nIHx8CisJICAgICAgIChlbnQtPmRfbmFtZVswXSA9PSAnIycgJiYgZW50LT5kX25hbWVbbGVuZmlsZSAtIDFdID09ICcjJykgfHwKKwkgICAgICAgZW50LT5kX25hbWVbMF0gPT0gJy4nKQorCSAgICAgY29udGludWU7CisJICAgCisJICAgaWYgKChwYXRoID0gd2hpbmVfbWFsbG9jKGxlbmRpciArIGxlbmZpbGUgKyAyKSkpCisJICAgICB7CisJICAgICAgIHN0cmNweShwYXRoLCBhaC0+Zm5hbWUpOworCSAgICAgICBzdHJjYXQocGF0aCwgIi8iKTsKKwkgICAgICAgc3RyY2F0KHBhdGgsIGVudC0+ZF9uYW1lKTsKKwkgICAgICAgCisJICAgICAgIC8qIGlnbm9yZSBub24tcmVndWxhciBmaWxlcyAqLworCSAgICAgICBpZiAoc3RhdChwYXRoLCAmYnVmKSAhPSAtMSAmJiBTX0lTUkVHKGJ1Zi5zdF9tb2RlKSkKKwkJIHsKKwkJICAgaWYgKGFoLT5mbGFncyAmIEFIX0hPU1RTKQorCQkgICAgIHRvdGFsX3NpemUgPSByZWFkX2hvc3RzZmlsZShwYXRoLCBhaC0+aW5kZXgsIHRvdGFsX3NpemUsIHJoYXNoLCByZXZoYXNoc3opOworI2lmZGVmIEhBVkVfREhDUAorCQkgICBlbHNlIGlmIChhaC0+ZmxhZ3MgJiAoQUhfREhDUF9IU1QgfCBBSF9ESENQX09QVCkpCisJCSAgICAgb3B0aW9uX3JlYWRfZHluZmlsZShwYXRoLCBhaC0+ZmxhZ3MpOworI2VuZGlmCQkgICAKKwkJIH0KKworCSAgICAgICBmcmVlKHBhdGgpOworCSAgICAgfQorCSB9CisKKyAgICAgICBjbG9zZWRpcihkaXJfc3RyZWFtKTsKKyAgICB9Cit9CisKK2ludCBpbm90aWZ5X2NoZWNrKHRpbWVfdCBub3cpCit7CisgIGludCBoaXQgPSAwOworICBzdHJ1Y3QgaG9zdHNmaWxlICphaDsKKworICB3aGlsZSAoMSkKKyAgICB7CisgICAgICBpbnQgcmM7CisgICAgICBjaGFyICpwOworICAgICAgc3RydWN0IHJlc29sdmMgKnJlczsKKyAgICAgIHN0cnVjdCBpbm90aWZ5X2V2ZW50ICppbjsKKworICAgICAgd2hpbGUgKChyYyA9IHJlYWQoZGFlbW9uLT5pbm90aWZ5ZmQsIGlub3RpZnlfYnVmZmVyLCBJTk9USUZZX1NaKSkgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpOworICAgICAgCisgICAgICBpZiAocmMgPD0gMCkKKwlicmVhazsKKyAgICAgIAorICAgICAgZm9yIChwID0gaW5vdGlmeV9idWZmZXI7IHJjIC0gKHAgLSBpbm90aWZ5X2J1ZmZlcikgPj0gKGludClzaXplb2Yoc3RydWN0IGlub3RpZnlfZXZlbnQpOyBwICs9IHNpemVvZihzdHJ1Y3QgaW5vdGlmeV9ldmVudCkgKyBpbi0+bGVuKSAKKwl7CisJICBpbiA9IChzdHJ1Y3QgaW5vdGlmeV9ldmVudCopcDsKKwkgIAorCSAgZm9yIChyZXMgPSBkYWVtb24tPnJlc29sdl9maWxlczsgcmVzOyByZXMgPSByZXMtPm5leHQpCisJICAgIGlmIChyZXMtPndkID09IGluLT53ZCAmJiBpbi0+bGVuICE9IDAgJiYgc3RyY21wKHJlcy0+ZmlsZSwgaW4tPm5hbWUpID09IDApCisJICAgICAgaGl0ID0gMTsKKworCSAgLyogaWdub3JlIGVtYWNzIGJhY2t1cHMgYW5kIGRvdGZpbGVzICovCisJICBpZiAoaW4tPmxlbiA9PSAwIHx8IAorCSAgICAgIGluLT5uYW1lW2luLT5sZW4gLSAxXSA9PSAnficgfHwKKwkgICAgICAoaW4tPm5hbWVbMF0gPT0gJyMnICYmIGluLT5uYW1lW2luLT5sZW4gLSAxXSA9PSAnIycpIHx8CisJICAgICAgaW4tPm5hbWVbMF0gPT0gJy4nKQorCSAgICBjb250aW51ZTsKKwkgIAorCSAgZm9yIChhaCA9IGRhZW1vbi0+ZHluYW1pY19kaXJzOyBhaDsgYWggPSBhaC0+bmV4dCkKKwkgICAgaWYgKGFoLT53ZCA9PSBpbi0+d2QpCisJICAgICAgeworCQlzaXplX3QgbGVuZGlyID0gc3RybGVuKGFoLT5mbmFtZSk7CisJCWNoYXIgKnBhdGg7CisJCQorCQlpZiAoKHBhdGggPSB3aGluZV9tYWxsb2MobGVuZGlyICsgaW4tPmxlbiArIDIpKSkKKwkJICB7CisJCSAgICBzdHJjcHkocGF0aCwgYWgtPmZuYW1lKTsKKwkJICAgIHN0cmNhdChwYXRoLCAiLyIpOworCQkgICAgc3RyY2F0KHBhdGgsIGluLT5uYW1lKTsKKwkJICAgICAKKwkJICAgIG15X3N5c2xvZyhMT0dfSU5GTywgXygiaW5vdGlmeSwgbmV3IG9yIGNoYW5nZWQgZmlsZSAlcyIpLCBwYXRoKTsKKworCQkgICAgaWYgKGFoLT5mbGFncyAmIEFIX0hPU1RTKQorCQkgICAgICB7CisJCQlyZWFkX2hvc3RzZmlsZShwYXRoLCBhaC0+aW5kZXgsIDAsIE5VTEwsIDApOworI2lmZGVmIEhBVkVfREhDUAorCQkJaWYgKGRhZW1vbi0+ZGhjcCB8fCBkYWVtb24tPmRvaW5nX2RoY3A2KSAKKwkJCSAgeworCQkJICAgIC8qIFByb3BhZ2F0ZSB0aGUgY29uc2VxdWVuY2VzIG9mIGxvYWRpbmcgYSBuZXcgZGhjcC1ob3N0ICovCisJCQkgICAgZGhjcF91cGRhdGVfY29uZmlncyhkYWVtb24tPmRoY3BfY29uZik7CisJCQkgICAgbGVhc2VfdXBkYXRlX2Zyb21fY29uZmlncygpOyAKKwkJCSAgICBsZWFzZV91cGRhdGVfZmlsZShub3cpOyAKKwkJCSAgICBsZWFzZV91cGRhdGVfZG5zKDEpOworCQkJICB9CisjZW5kaWYKKwkJICAgICAgfQorI2lmZGVmIEhBVkVfREhDUAorCQkgICAgZWxzZSBpZiAoYWgtPmZsYWdzICYgQUhfREhDUF9IU1QpCisJCSAgICAgIHsKKwkJCWlmIChvcHRpb25fcmVhZF9keW5maWxlKHBhdGgsIEFIX0RIQ1BfSFNUKSkKKwkJCSAgeworCQkJICAgIC8qIFByb3BhZ2F0ZSB0aGUgY29uc2VxdWVuY2VzIG9mIGxvYWRpbmcgYSBuZXcgZGhjcC1ob3N0ICovCisJCQkgICAgZGhjcF91cGRhdGVfY29uZmlncyhkYWVtb24tPmRoY3BfY29uZik7CisJCQkgICAgbGVhc2VfdXBkYXRlX2Zyb21fY29uZmlncygpOyAKKwkJCSAgICBsZWFzZV91cGRhdGVfZmlsZShub3cpOyAKKwkJCSAgICBsZWFzZV91cGRhdGVfZG5zKDEpOworCQkJICB9CisJCSAgICAgIH0KKwkJICAgIGVsc2UgaWYgKGFoLT5mbGFncyAmIEFIX0RIQ1BfT1BUKQorCQkgICAgICBvcHRpb25fcmVhZF9keW5maWxlKHBhdGgsIEFIX0RIQ1BfT1BUKTsKKyNlbmRpZgorCQkgICAgCisJCSAgICBmcmVlKHBhdGgpOworCQkgIH0KKwkgICAgICB9CisJfQorICAgIH0KKyAgcmV0dXJuIGhpdDsKK30KKworI2VuZGlmICAvKiBJTk9USUZZICovCisgIApkaWZmIC0tZ2l0IGEvc3JjL2lwNmFkZHIuaCBiL3NyYy9pcDZhZGRyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJmMmE1NwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pcDZhZGRyLmgKQEAgLTAsMCArMSwzNCBAQAorLyogZG5zbWFzcSBpcyBDb3B5cmlnaHQgKGMpIDIwMDAtMjAxNyBTaW1vbiBLZWxsZXkKKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgZGF0ZWQgSnVuZSwgMTk5MSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgdmVyc2lvbiAzIGRhdGVkIDI5IEp1bmUsIDIwMDcuCisgCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisKKworCisjZGVmaW5lIElONl9JU19BRERSX1VMQShhKSBcCisgICAgICAgICgoKChfX2NvbnN0IHVpbnQzMl90ICopIChhKSlbMF0gJiBodG9ubCAoMHhmZjAwMDAwMCkpICAgICAgICAgICAgICAgICBcCisgICAgICAgICA9PSBodG9ubCAoMHhmZDAwMDAwMCkpCisKKyNkZWZpbmUgSU42X0lTX0FERFJfVUxBX1pFUk8oYSkgXAorICAgICAgICAoKChfX2NvbnN0IHVpbnQzMl90ICopIChhKSlbMF0gPT0gaHRvbmwgKDB4ZmQwMDAwMDApICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgJiYgKChfX2NvbnN0IHVpbnQzMl90ICopIChhKSlbMV0gPT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgJiYgKChfX2NvbnN0IHVpbnQzMl90ICopIChhKSlbMl0gPT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgJiYgKChfX2NvbnN0IHVpbnQzMl90ICopIChhKSlbM10gPT0gMCkKKworI2RlZmluZSBJTjZfSVNfQUREUl9MSU5LX0xPQ0FMX1pFUk8oYSkgXAorICAgICAgICAoKChfX2NvbnN0IHVpbnQzMl90ICopIChhKSlbMF0gPT0gaHRvbmwgKDB4ZmU4MDAwMDApICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgJiYgKChfX2NvbnN0IHVpbnQzMl90ICopIChhKSlbMV0gPT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgJiYgKChfX2NvbnN0IHVpbnQzMl90ICopIChhKSlbMl0gPT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgJiYgKChfX2NvbnN0IHVpbnQzMl90ICopIChhKSlbM10gPT0gMCkKKwpkaWZmIC0tZ2l0IGEvc3JjL2lwc2V0LmMgYi9zcmMvaXBzZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTVlY2M1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2lwc2V0LmMKQEAgLTAsMCArMSwyMzggQEAKKy8qIGlwc2V0LmMgaXMgQ29weXJpZ2h0IChjKSAyMDEzIEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgZGF0ZWQgSnVuZSwgMTk5MSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgdmVyc2lvbiAzIGRhdGVkIDI5IEp1bmUsIDIwMDcuCisgCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisKKyNpbmNsdWRlICJkbnNtYXNxLmgiCisKKyNpZiBkZWZpbmVkKEhBVkVfSVBTRVQpICYmIGRlZmluZWQoSEFWRV9MSU5VWF9ORVRXT1JLKQorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgorCisvKiBXZSB3YW50IHRvIGJlIGFibGUgdG8gY29tcGlsZSBhZ2FpbnN0IG9sZCBoZWFkZXIgZmlsZXMKKyAgIEtlcm5lbCB2ZXJzaW9uIGlzIGhhbmRsZWQgYXQgcnVuLXRpbWUuICovCisKKyNkZWZpbmUgTkZOTF9TVUJTWVNfSVBTRVQgNgorCisjZGVmaW5lIElQU0VUX0FUVFJfREFUQSA3CisjZGVmaW5lIElQU0VUX0FUVFJfSVAgMQorI2RlZmluZSBJUFNFVF9BVFRSX0lQQUREUl9JUFY0IDEKKyNkZWZpbmUgSVBTRVRfQVRUUl9JUEFERFJfSVBWNiAyCisjZGVmaW5lIElQU0VUX0FUVFJfUFJPVE9DT0wgMQorI2RlZmluZSBJUFNFVF9BVFRSX1NFVE5BTUUgMgorI2RlZmluZSBJUFNFVF9DTURfQUREIDkKKyNkZWZpbmUgSVBTRVRfQ01EX0RFTCAxMAorI2RlZmluZSBJUFNFVF9NQVhOQU1FTEVOIDMyCisjZGVmaW5lIElQU0VUX1BST1RPQ09MIDYKKworI2lmbmRlZiBORk5FVExJTktfVjAKKyNkZWZpbmUgTkZORVRMSU5LX1YwICAgIDAKKyNlbmRpZgorCisjaWZuZGVmIE5MQV9GX05FU1RFRAorI2RlZmluZSBOTEFfRl9ORVNURUQJCSgxIDw8IDE1KQorI2VuZGlmCisKKyNpZm5kZWYgTkxBX0ZfTkVUX0JZVEVPUkRFUgorI2RlZmluZSBOTEFfRl9ORVRfQllURU9SREVSCSgxIDw8IDE0KQorI2VuZGlmCisKK3N0cnVjdCBteV9ubGF0dHIgeworICAgICAgICBfX3UxNiAgICAgICAgICAgbmxhX2xlbjsKKyAgICAgICAgX191MTYgICAgICAgICAgIG5sYV90eXBlOworfTsKKworc3RydWN0IG15X25mZ2VubXNnIHsKKyAgICAgICAgX191OCAgbmZnZW5fZmFtaWx5OyAgICAgICAgICAgICAvKiBBRl94eHggKi8KKyAgICAgICAgX191OCAgdmVyc2lvbjsgICAgICAgICAgLyogbmZuZXRsaW5rIHZlcnNpb24gKi8KKyAgICAgICAgX19iZTE2ICAgIHJlc19pZDsgICAgICAgICAgICAgICAvKiByZXNvdXJjZSBpZCAqLworfTsKKworCisvKiBkYXRhIHN0cnVjdHVyZSBzaXplIGluIGhlcmUgaXMgZml4ZWQgKi8KKyNkZWZpbmUgQlVGRl9TWiAyNTYKKworI2RlZmluZSBOTF9BTElHTihsZW4pICgoKGxlbikrMykgJiB+KDMpKQorc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9ubCBzbmwgPSB7IC5ubF9mYW1pbHkgPSBBRl9ORVRMSU5LIH07CitzdGF0aWMgaW50IGlwc2V0X3NvY2ssIG9sZF9rZXJuZWw7CitzdGF0aWMgY2hhciAqYnVmZmVyOworCitzdGF0aWMgaW5saW5lIHZvaWQgYWRkX2F0dHIoc3RydWN0IG5sbXNnaGRyICpubGgsIHVpbnQxNl90IHR5cGUsIHNpemVfdCBsZW4sIGNvbnN0IHZvaWQgKmRhdGEpCit7CisgIHN0cnVjdCBteV9ubGF0dHIgKmF0dHIgPSAodm9pZCAqKW5saCArIE5MX0FMSUdOKG5saC0+bmxtc2dfbGVuKTsKKyAgdWludDE2X3QgcGF5bG9hZF9sZW4gPSBOTF9BTElHTihzaXplb2Yoc3RydWN0IG15X25sYXR0cikpICsgbGVuOworICBhdHRyLT5ubGFfdHlwZSA9IHR5cGU7CisgIGF0dHItPm5sYV9sZW4gPSBwYXlsb2FkX2xlbjsKKyAgbWVtY3B5KCh2b2lkICopYXR0ciArIE5MX0FMSUdOKHNpemVvZihzdHJ1Y3QgbXlfbmxhdHRyKSksIGRhdGEsIGxlbik7CisgIG5saC0+bmxtc2dfbGVuICs9IE5MX0FMSUdOKHBheWxvYWRfbGVuKTsKK30KKwordm9pZCBpcHNldF9pbml0KHZvaWQpCit7CisgIHN0cnVjdCB1dHNuYW1lIHV0c25hbWU7CisgIGludCB2ZXJzaW9uOworICBjaGFyICpzcGxpdDsKKyAgCisgIGlmICh1bmFtZSgmdXRzbmFtZSkgPCAwKQorICAgIGRpZShfKCJmYWlsZWQgdG8gZmluZCBrZXJuZWwgdmVyc2lvbjogJXMiKSwgTlVMTCwgRUNfTUlTQyk7CisgIAorICBzcGxpdCA9IHN0cnRvayh1dHNuYW1lLnJlbGVhc2UsICIuIik7CisgIHZlcnNpb24gPSAoc3BsaXQgPyBhdG9pKHNwbGl0KSA6IDApOworICBzcGxpdCA9IHN0cnRvayhOVUxMLCAiLiIpOworICB2ZXJzaW9uID0gdmVyc2lvbiAqIDI1NiArIChzcGxpdCA/IGF0b2koc3BsaXQpIDogMCk7CisgIHNwbGl0ID0gc3RydG9rKE5VTEwsICIuIik7CisgIHZlcnNpb24gPSB2ZXJzaW9uICogMjU2ICsgKHNwbGl0ID8gYXRvaShzcGxpdCkgOiAwKTsKKyAgb2xkX2tlcm5lbCA9ICh2ZXJzaW9uIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDMyKSk7CisgIAorICBpZiAob2xkX2tlcm5lbCAmJiAoaXBzZXRfc29jayA9IHNvY2tldChBRl9JTkVULCBTT0NLX1JBVywgSVBQUk9UT19SQVcpKSAhPSAtMSkKKyAgICByZXR1cm47CisgIAorICBpZiAoIW9sZF9rZXJuZWwgJiYgCisgICAgICAoYnVmZmVyID0gc2FmZV9tYWxsb2MoQlVGRl9TWikpICYmCisgICAgICAoaXBzZXRfc29jayA9IHNvY2tldChBRl9ORVRMSU5LLCBTT0NLX1JBVywgTkVUTElOS19ORVRGSUxURVIpKSAhPSAtMSAmJgorICAgICAgKGJpbmQoaXBzZXRfc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZzbmwsIHNpemVvZihzbmwpKSAhPSAtMSkpCisgICAgcmV0dXJuOworICAKKyAgZGllIChfKCJmYWlsZWQgdG8gY3JlYXRlIElQc2V0IGNvbnRyb2wgc29ja2V0OiAlcyIpLCBOVUxMLCBFQ19NSVNDKTsKK30KKworc3RhdGljIGludCBuZXdfYWRkX3RvX2lwc2V0KGNvbnN0IGNoYXIgKnNldG5hbWUsIGNvbnN0IHN0cnVjdCBhbGxfYWRkciAqaXBhZGRyLCBpbnQgYWYsIGludCByZW1vdmUpCit7CisgIHN0cnVjdCBubG1zZ2hkciAqbmxoOworICBzdHJ1Y3QgbXlfbmZnZW5tc2cgKm5mZzsKKyAgc3RydWN0IG15X25sYXR0ciAqbmVzdGVkWzJdOworICB1aW50OF90IHByb3RvOworICBpbnQgYWRkcnN6ID0gSU5BRERSU1o7CisKKyNpZmRlZiBIQVZFX0lQVjYKKyAgaWYgKGFmID09IEFGX0lORVQ2KQorICAgIGFkZHJzeiA9IElONkFERFJTWjsKKyNlbmRpZgorICAgIAorICBpZiAoc3RybGVuKHNldG5hbWUpID49IElQU0VUX01BWE5BTUVMRU4pIAorICAgIHsKKyAgICAgIGVycm5vID0gRU5BTUVUT09MT05HOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgCisgIG1lbXNldChidWZmZXIsIDAsIEJVRkZfU1opOworCisgIG5saCA9IChzdHJ1Y3Qgbmxtc2doZHIgKilidWZmZXI7CisgIG5saC0+bmxtc2dfbGVuID0gTkxfQUxJR04oc2l6ZW9mKHN0cnVjdCBubG1zZ2hkcikpOworICBubGgtPm5sbXNnX3R5cGUgPSAocmVtb3ZlID8gSVBTRVRfQ01EX0RFTCA6IElQU0VUX0NNRF9BREQpIHwgKE5GTkxfU1VCU1lTX0lQU0VUIDw8IDgpOworICBubGgtPm5sbXNnX2ZsYWdzID0gTkxNX0ZfUkVRVUVTVDsKKyAgCisgIG5mZyA9IChzdHJ1Y3QgbXlfbmZnZW5tc2cgKikoYnVmZmVyICsgbmxoLT5ubG1zZ19sZW4pOworICBubGgtPm5sbXNnX2xlbiArPSBOTF9BTElHTihzaXplb2Yoc3RydWN0IG15X25mZ2VubXNnKSk7CisgIG5mZy0+bmZnZW5fZmFtaWx5ID0gYWY7CisgIG5mZy0+dmVyc2lvbiA9IE5GTkVUTElOS19WMDsKKyAgbmZnLT5yZXNfaWQgPSBodG9ucygwKTsKKyAgCisgIHByb3RvID0gSVBTRVRfUFJPVE9DT0w7CisgIGFkZF9hdHRyKG5saCwgSVBTRVRfQVRUUl9QUk9UT0NPTCwgc2l6ZW9mKHByb3RvKSwgJnByb3RvKTsKKyAgYWRkX2F0dHIobmxoLCBJUFNFVF9BVFRSX1NFVE5BTUUsIHN0cmxlbihzZXRuYW1lKSArIDEsIHNldG5hbWUpOworICBuZXN0ZWRbMF0gPSAoc3RydWN0IG15X25sYXR0ciAqKShidWZmZXIgKyBOTF9BTElHTihubGgtPm5sbXNnX2xlbikpOworICBubGgtPm5sbXNnX2xlbiArPSBOTF9BTElHTihzaXplb2Yoc3RydWN0IG15X25sYXR0cikpOworICBuZXN0ZWRbMF0tPm5sYV90eXBlID0gTkxBX0ZfTkVTVEVEIHwgSVBTRVRfQVRUUl9EQVRBOworICBuZXN0ZWRbMV0gPSAoc3RydWN0IG15X25sYXR0ciAqKShidWZmZXIgKyBOTF9BTElHTihubGgtPm5sbXNnX2xlbikpOworICBubGgtPm5sbXNnX2xlbiArPSBOTF9BTElHTihzaXplb2Yoc3RydWN0IG15X25sYXR0cikpOworICBuZXN0ZWRbMV0tPm5sYV90eXBlID0gTkxBX0ZfTkVTVEVEIHwgSVBTRVRfQVRUUl9JUDsKKyAgYWRkX2F0dHIobmxoLCAKKwkgICAoYWYgPT0gQUZfSU5FVCA/IElQU0VUX0FUVFJfSVBBRERSX0lQVjQgOiBJUFNFVF9BVFRSX0lQQUREUl9JUFY2KSB8IE5MQV9GX05FVF9CWVRFT1JERVIsCisJICAgYWRkcnN6LCAmaXBhZGRyLT5hZGRyKTsKKyAgbmVzdGVkWzFdLT5ubGFfbGVuID0gKHZvaWQgKilidWZmZXIgKyBOTF9BTElHTihubGgtPm5sbXNnX2xlbikgLSAodm9pZCAqKW5lc3RlZFsxXTsKKyAgbmVzdGVkWzBdLT5ubGFfbGVuID0gKHZvaWQgKilidWZmZXIgKyBOTF9BTElHTihubGgtPm5sbXNnX2xlbikgLSAodm9pZCAqKW5lc3RlZFswXTsKKwkKKyAgd2hpbGUgKHJldHJ5X3NlbmQoc2VuZHRvKGlwc2V0X3NvY2ssIGJ1ZmZlciwgbmxoLT5ubG1zZ19sZW4sIDAsCisJCQkgICAoc3RydWN0IHNvY2thZGRyICopJnNubCwgc2l6ZW9mKHNubCkpKSk7CisJCQkJCQkJCSAgICAKKyAgcmV0dXJuIGVycm5vID09IDAgPyAwIDogLTE7Cit9CisKKworc3RhdGljIGludCBvbGRfYWRkX3RvX2lwc2V0KGNvbnN0IGNoYXIgKnNldG5hbWUsIGNvbnN0IHN0cnVjdCBhbGxfYWRkciAqaXBhZGRyLCBpbnQgcmVtb3ZlKQoreworICBzb2NrbGVuX3Qgc2l6ZTsKKyAgc3RydWN0IGlwX3NldF9yZXFfYWR0X2dldCB7CisgICAgdW5zaWduZWQgb3A7CisgICAgdW5zaWduZWQgdmVyc2lvbjsKKyAgICB1bmlvbiB7CisgICAgICBjaGFyIG5hbWVbSVBTRVRfTUFYTkFNRUxFTl07CisgICAgICB1aW50MTZfdCBpbmRleDsKKyAgICB9IHNldDsKKyAgICBjaGFyIHR5cGVuYW1lW0lQU0VUX01BWE5BTUVMRU5dOworICB9IHJlcV9hZHRfZ2V0OworICBzdHJ1Y3QgaXBfc2V0X3JlcV9hZHQgeworICAgIHVuc2lnbmVkIG9wOworICAgIHVpbnQxNl90IGluZGV4OworICAgIHVpbnQzMl90IGlwOworICB9IHJlcV9hZHQ7CisgIAorICBpZiAoc3RybGVuKHNldG5hbWUpID49IHNpemVvZihyZXFfYWR0X2dldC5zZXQubmFtZSkpIAorICAgIHsKKyAgICAgIGVycm5vID0gRU5BTUVUT09MT05HOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgCisgIHJlcV9hZHRfZ2V0Lm9wID0gMHgxMDsKKyAgcmVxX2FkdF9nZXQudmVyc2lvbiA9IDM7CisgIHN0cmNweShyZXFfYWR0X2dldC5zZXQubmFtZSwgc2V0bmFtZSk7CisgIHNpemUgPSBzaXplb2YocmVxX2FkdF9nZXQpOworICBpZiAoZ2V0c29ja29wdChpcHNldF9zb2NrLCBTT0xfSVAsIDgzLCAmcmVxX2FkdF9nZXQsICZzaXplKSA8IDApCisgICAgcmV0dXJuIC0xOworICByZXFfYWR0Lm9wID0gcmVtb3ZlID8gMHgxMDIgOiAweDEwMTsKKyAgcmVxX2FkdC5pbmRleCA9IHJlcV9hZHRfZ2V0LnNldC5pbmRleDsKKyAgcmVxX2FkdC5pcCA9IG50b2hsKGlwYWRkci0+YWRkci5hZGRyNC5zX2FkZHIpOworICBpZiAoc2V0c29ja29wdChpcHNldF9zb2NrLCBTT0xfSVAsIDgzLCAmcmVxX2FkdCwgc2l6ZW9mKHJlcV9hZHQpKSA8IDApCisgICAgcmV0dXJuIC0xOworICAKKyAgcmV0dXJuIDA7Cit9CisKKworCitpbnQgYWRkX3RvX2lwc2V0KGNvbnN0IGNoYXIgKnNldG5hbWUsIGNvbnN0IHN0cnVjdCBhbGxfYWRkciAqaXBhZGRyLCBpbnQgZmxhZ3MsIGludCByZW1vdmUpCit7CisgIGludCByZXQgPSAwLCBhZiA9IEFGX0lORVQ7CisKKyNpZmRlZiBIQVZFX0lQVjYKKyAgaWYgKGZsYWdzICYgRl9JUFY2KQorICAgIHsKKyAgICAgIGFmID0gQUZfSU5FVDY7CisgICAgICAvKiBvbGQgbWV0aG9kIG9ubHkgc3VwcG9ydHMgSVB2NCAqLworICAgICAgaWYgKG9sZF9rZXJuZWwpCisJeworCSAgZXJybm8gPSBFQUZOT1NVUFBPUlQgOworCSAgcmV0ID0gLTE7CisJfQorICAgIH0KKyNlbmRpZgorICAKKyAgaWYgKHJldCAhPSAtMSkgCisgICAgcmV0ID0gb2xkX2tlcm5lbCA/IG9sZF9hZGRfdG9faXBzZXQoc2V0bmFtZSwgaXBhZGRyLCByZW1vdmUpIDogbmV3X2FkZF90b19pcHNldChzZXRuYW1lLCBpcGFkZHIsIGFmLCByZW1vdmUpOworCisgIGlmIChyZXQgPT0gLTEpCisgICAgIG15X3N5c2xvZyhMT0dfRVJSLCBfKCJmYWlsZWQgdG8gdXBkYXRlIGlwc2V0ICVzOiAlcyIpLCBzZXRuYW1lLCBzdHJlcnJvcihlcnJubykpOworCisgIHJldHVybiByZXQ7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2xlYXNlLmMgYi9zcmMvbGVhc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41YjY3MDc1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2xlYXNlLmMKQEAgLTAsMCArMSwxMjA1IEBACisvKiBkbnNtYXNxIGlzIENvcHlyaWdodCAoYykgMjAwMC0yMDE3IFNpbW9uIEtlbGxleQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMgZGF0ZWQgMjkgSnVuZSwgMjAwNy4KKyAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2luY2x1ZGUgImRuc21hc3EuaCIKKworI2lmZGVmIEhBVkVfREhDUAorCitzdGF0aWMgc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlcyA9IE5VTEwsICpvbGRfbGVhc2VzID0gTlVMTDsKK3N0YXRpYyBpbnQgZG5zX2RpcnR5LCBmaWxlX2RpcnR5LCBsZWFzZXNfbGVmdDsKKworc3RhdGljIGludCByZWFkX2xlYXNlcyh0aW1lX3Qgbm93LCBGSUxFICpsZWFzZXN0cmVhbSkKK3sKKyAgdW5zaWduZWQgbG9uZyBlaTsKKyAgc3RydWN0IGFsbF9hZGRyIGFkZHI7CisgIHN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZTsKKyAgaW50IGNsaWRfbGVuLCBod19sZW4sIGh3X3R5cGU7CisgIGludCBpdGVtczsKKyAgY2hhciAqZG9tYWluID0gTlVMTDsKKworICAqZGFlbW9uLT5kaGNwX2J1ZmYzID0gKmRhZW1vbi0+ZGhjcF9idWZmMiA9ICdcMCc7CisKKyAgLyogY2xpZW50LWlkIG1heCBsZW5ndGggaXMgMjU1IHdoaWNoIGlzIDI1NSoyIGRpZ2l0cyArIDI1NCBjb2xvbnMKKyAgICAgYm9ycm93IEROUyBwYWNrZXQgYnVmZmVyIHdoaWNoIGlzIGFsd2F5cyBsYXJnZXIgdGhhbiAxMDAwIGJ5dGVzCisKKyAgICAgQ2hlY2sgdmFyaW91cyBidWZmZXJzIGFyZSBiaWcgZW5vdWdoIGZvciB0aGUgY29kZSBiZWxvdyAqLworCisjaWYgKERIQ1BfQlVGRl9TWiA8IDI1NSkgfHwgKE1BWEROQU1FIDwgNjQpIHx8IChQQUNLRVRTWitNQVhETkFNRStSUkZJWEVEU1ogIDwgNzY0KQorIyBlcnJvciBCdWZmZXIgc2l6ZSBicmVha2FnZSBpbiBsZWFzZWZpbGUgcGFyc2luZy4KKyNlbmRpZgorCisgICAgd2hpbGUgKChpdGVtcz1mc2NhbmYobGVhc2VzdHJlYW0sICIlMjU1cyAlMjU1cyIsIGRhZW1vbi0+ZGhjcF9idWZmMywgZGFlbW9uLT5kaGNwX2J1ZmYyKSkgPT0gMikKKyAgICAgIHsKKwkqZGFlbW9uLT5uYW1lYnVmZiA9ICpkYWVtb24tPmRoY3BfYnVmZiA9ICpkYWVtb24tPnBhY2tldCA9ICdcMCc7CisJaHdfbGVuID0gaHdfdHlwZSA9IGNsaWRfbGVuID0gMDsKKwkKKyNpZmRlZiBIQVZFX0RIQ1A2CisJaWYgKHN0cmNtcChkYWVtb24tPmRoY3BfYnVmZjMsICJkdWlkIikgPT0gMCkKKwkgIHsKKwkgICAgZGFlbW9uLT5kdWlkX2xlbiA9IHBhcnNlX2hleChkYWVtb24tPmRoY3BfYnVmZjIsICh1bnNpZ25lZCBjaGFyICopZGFlbW9uLT5kaGNwX2J1ZmYyLCAxMzAsIE5VTEwsIE5VTEwpOworCSAgICBpZiAoZGFlbW9uLT5kdWlkX2xlbiA8IDApCisJICAgICAgcmV0dXJuIDA7CisJICAgIGRhZW1vbi0+ZHVpZCA9IHNhZmVfbWFsbG9jKGRhZW1vbi0+ZHVpZF9sZW4pOworCSAgICBtZW1jcHkoZGFlbW9uLT5kdWlkLCBkYWVtb24tPmRoY3BfYnVmZjIsIGRhZW1vbi0+ZHVpZF9sZW4pOworCSAgICBjb250aW51ZTsKKwkgIH0KKyNlbmRpZgorCQorCWlmIChmc2NhbmYobGVhc2VzdHJlYW0sICIgJTY0cyAlMjU1cyAlNzY0cyAlKnMiLAorCQkgICBkYWVtb24tPm5hbWVidWZmLCBkYWVtb24tPmRoY3BfYnVmZiwgZGFlbW9uLT5wYWNrZXQpICE9IDMpCisJICByZXR1cm4gMDsKKwkKKwlpZiAoaW5ldF9wdG9uKEFGX0lORVQsIGRhZW1vbi0+bmFtZWJ1ZmYsICZhZGRyLmFkZHIuYWRkcjQpKQorCSAgeworCSAgICBpZiAoKGxlYXNlID0gbGVhc2U0X2FsbG9jYXRlKGFkZHIuYWRkci5hZGRyNCkpKQorCSAgICAgIGRvbWFpbiA9IGdldF9kb21haW4obGVhc2UtPmFkZHIpOworCSAgICAKKwkgICAgaHdfbGVuID0gcGFyc2VfaGV4KGRhZW1vbi0+ZGhjcF9idWZmMiwgKHVuc2lnbmVkIGNoYXIgKilkYWVtb24tPmRoY3BfYnVmZjIsIERIQ1BfQ0hBRERSX01BWCwgTlVMTCwgJmh3X3R5cGUpOworCSAgICAvKiBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIG5vIGV4cGxpY2l0IE1BQyBhZGRyZXNzIHR5cGUgbWVhbnMgZXRoZXIuICovCisJICAgIGlmIChod190eXBlID09IDAgJiYgaHdfbGVuICE9IDApCisJICAgICAgaHdfdHlwZSA9IEFSUEhSRF9FVEhFUjsgCisJICB9CisjaWZkZWYgSEFWRV9ESENQNgorCWVsc2UgaWYgKGluZXRfcHRvbihBRl9JTkVUNiwgZGFlbW9uLT5uYW1lYnVmZiwgJmFkZHIuYWRkci5hZGRyNikpCisJICB7CisJICAgIGNoYXIgKnMgPSBkYWVtb24tPmRoY3BfYnVmZjI7CisJICAgIGludCBsZWFzZV90eXBlID0gTEVBU0VfTkE7CisKKwkgICAgaWYgKHNbMF0gPT0gJ1QnKQorCSAgICAgIHsKKwkJbGVhc2VfdHlwZSA9IExFQVNFX1RBOworCQlzKys7CisJICAgICAgfQorCSAgICAKKwkgICAgaWYgKChsZWFzZSA9IGxlYXNlNl9hbGxvY2F0ZSgmYWRkci5hZGRyLmFkZHI2LCBsZWFzZV90eXBlKSkpCisJICAgICAgeworCQlsZWFzZV9zZXRfaWFpZChsZWFzZSwgc3RydG91bChzLCBOVUxMLCAxMCkpOworCQlkb21haW4gPSBnZXRfZG9tYWluNigoc3RydWN0IGluNl9hZGRyICopbGVhc2UtPmh3YWRkcik7CisJICAgICAgfQorCSAgfQorI2VuZGlmCisJZWxzZQorCSAgcmV0dXJuIDA7CisKKwlpZiAoIWxlYXNlKQorCSAgZGllIChfKCJ0b28gbWFueSBzdG9yZWQgbGVhc2VzIiksIE5VTEwsIEVDX01JU0MpOworCisJaWYgKHN0cmNtcChkYWVtb24tPnBhY2tldCwgIioiKSAhPSAwKQorCSAgY2xpZF9sZW4gPSBwYXJzZV9oZXgoZGFlbW9uLT5wYWNrZXQsICh1bnNpZ25lZCBjaGFyICopZGFlbW9uLT5wYWNrZXQsIDI1NSwgTlVMTCwgTlVMTCk7CisJCisJbGVhc2Vfc2V0X2h3YWRkcihsZWFzZSwgKHVuc2lnbmVkIGNoYXIgKilkYWVtb24tPmRoY3BfYnVmZjIsICh1bnNpZ25lZCBjaGFyICopZGFlbW9uLT5wYWNrZXQsIAorCQkJIGh3X2xlbiwgaHdfdHlwZSwgY2xpZF9sZW4sIG5vdywgMCk7CisJCisJaWYgKHN0cmNtcChkYWVtb24tPmRoY3BfYnVmZiwgIioiKSAhPSAgMCkKKwkgIGxlYXNlX3NldF9ob3N0bmFtZShsZWFzZSwgZGFlbW9uLT5kaGNwX2J1ZmYsIDAsIGRvbWFpbiwgTlVMTCk7CisKKwllaSA9IGF0b2woZGFlbW9uLT5kaGNwX2J1ZmYzKTsKKworI2lmZGVmIEhBVkVfQlJPS0VOX1JUQworCWlmIChlaSAhPSAwKQorCSAgbGVhc2UtPmV4cGlyZXMgPSAodGltZV90KWVpICsgbm93OworCWVsc2UKKwkgIGxlYXNlLT5leHBpcmVzID0gKHRpbWVfdCkwOworCWxlYXNlLT5sZW5ndGggPSBlaTsKKyNlbHNlCisJLyogc3RyaWN0bHkgdGltZV90IGlzIG9wYXF1ZSwgYnV0IHRoaXMgaGFjayBzaG91bGQgd29yayBvbiBhbGwgc2FuZSBzeXN0ZW1zLAorCSAgIGV2ZW4gd2hlbiBzaXplb2YodGltZV90KSA9PSA4ICovCisJbGVhc2UtPmV4cGlyZXMgPSAodGltZV90KWVpOworI2VuZGlmCisJCisJLyogc2V0IHRoZXNlIGNvcnJlY3RseTogdGhlICJvbGQiIGV2ZW50cyBhcmUgZ2VuZXJhdGVkIGxhdGVyIGZyb20KKwkgICB0aGUgc3RhcnR1cCBzeW50aGVzaXNlZCBTSUdIVVAuICovCisJbGVhc2UtPmZsYWdzICY9IH4oTEVBU0VfTkVXIHwgTEVBU0VfQ0hBTkdFRCk7CisJCisJKmRhZW1vbi0+ZGhjcF9idWZmMyA9ICpkYWVtb24tPmRoY3BfYnVmZjIgPSAnXDAnOworICAgICAgfQorICAgIAorICAgIHJldHVybiAoaXRlbXMgPT0gMCB8fCBpdGVtcyA9PSBFT0YpOworfQorCit2b2lkIGxlYXNlX2luaXQodGltZV90IG5vdykKK3sKKyAgRklMRSAqbGVhc2VzdHJlYW07CisKKyAgbGVhc2VzX2xlZnQgPSBkYWVtb24tPmRoY3BfbWF4OworCisgIGlmIChvcHRpb25fYm9vbChPUFRfTEVBU0VfUk8pKQorICAgIHsKKyAgICAgIC8qIHJ1biAiPGxlYXNlX2NoYW5nZV9zY3JpcHQ+IGluaXQiIG9uY2UgdG8gZ2V0IHRoZQorCSBpbml0aWFsIHN0YXRlIG9mIHRoZSBkYXRhYmFzZS4gSWYgbGVhc2VmaWxlLXJvIGlzCisJIHNldCB3aXRob3V0IGEgc2NyaXB0LCB3ZSBqdXN0IGRvIHdpdGhvdXQgYW55CisJIGxlYXNlIGRhdGFiYXNlLiAqLworI2lmZGVmIEhBVkVfU0NSSVBUCisgICAgICBpZiAoZGFlbW9uLT5sZWFzZV9jaGFuZ2VfY29tbWFuZCkKKwl7CisJICBzdHJjcHkoZGFlbW9uLT5kaGNwX2J1ZmYsIGRhZW1vbi0+bGVhc2VfY2hhbmdlX2NvbW1hbmQpOworCSAgc3RyY2F0KGRhZW1vbi0+ZGhjcF9idWZmLCAiIGluaXQiKTsKKwkgIGxlYXNlc3RyZWFtID0gcG9wZW4oZGFlbW9uLT5kaGNwX2J1ZmYsICJyIik7CisJfQorICAgICAgZWxzZQorI2VuZGlmCisJeworICAgICAgICAgIGZpbGVfZGlydHkgPSBkbnNfZGlydHkgPSAwOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogTk9URTogbmVlZCBhKyBtb2RlIHRvIGNyZWF0ZSBmaWxlIGlmIGl0IGRvZXNuJ3QgZXhpc3QgKi8KKyAgICAgIGxlYXNlc3RyZWFtID0gZGFlbW9uLT5sZWFzZV9zdHJlYW0gPSBmb3BlbihkYWVtb24tPmxlYXNlX2ZpbGUsICJhKyIpOworCisgICAgICBpZiAoIWxlYXNlc3RyZWFtKQorCWRpZShfKCJjYW5ub3Qgb3BlbiBvciBjcmVhdGUgbGVhc2UgZmlsZSAlczogJXMiKSwgZGFlbW9uLT5sZWFzZV9maWxlLCBFQ19GSUxFKTsKKworICAgICAgLyogYSsgbW9kZSBsZWF2ZXMgcG9pbnRlciBhdCBlbmQuICovCisgICAgICByZXdpbmQobGVhc2VzdHJlYW0pOworICAgIH0KKworICBpZiAobGVhc2VzdHJlYW0pCisgICAgeworICAgICAgaWYgKCFyZWFkX2xlYXNlcyhub3csIGxlYXNlc3RyZWFtKSkKKwlteV9zeXNsb2coTVNfREhDUCB8IExPR19FUlIsIF8oImZhaWxlZCB0byBwYXJzZSBsZWFzZSBkYXRhYmFzZSwgaW52YWxpZCBsaW5lOiAlcyAlcyAlcyAlcyAuLi4iKSwKKwkJICBkYWVtb24tPmRoY3BfYnVmZjMsIGRhZW1vbi0+ZGhjcF9idWZmMiwKKwkJICBkYWVtb24tPm5hbWVidWZmLCBkYWVtb24tPmRoY3BfYnVmZik7CisKKyAgICAgIGlmIChmZXJyb3IobGVhc2VzdHJlYW0pKQorCWRpZShfKCJmYWlsZWQgdG8gcmVhZCBsZWFzZSBmaWxlICVzOiAlcyIpLCBkYWVtb24tPmxlYXNlX2ZpbGUsIEVDX0ZJTEUpOworICAgIH0KKyAgCisjaWZkZWYgSEFWRV9TQ1JJUFQKKyAgaWYgKCFkYWVtb24tPmxlYXNlX3N0cmVhbSkKKyAgICB7CisgICAgICBpbnQgcmMgPSAwOworCisgICAgICAvKiBzaGVsbCByZXR1cm5zIDEyNyBmb3IgImNvbW1hbmQgbm90IGZvdW5kIiwgMTI2IGZvciBiYWQgcGVybWlzc2lvbnMuICovCisgICAgICBpZiAoIWxlYXNlc3RyZWFtIHx8IChyYyA9IHBjbG9zZShsZWFzZXN0cmVhbSkpID09IC0xIHx8IFdFWElUU1RBVFVTKHJjKSA9PSAxMjcgfHwgV0VYSVRTVEFUVVMocmMpID09IDEyNikKKwl7CisJICBpZiAoV0VYSVRTVEFUVVMocmMpID09IDEyNykKKwkgICAgZXJybm8gPSBFTk9FTlQ7CisJICBlbHNlIGlmIChXRVhJVFNUQVRVUyhyYykgPT0gMTI2KQorCSAgICBlcnJubyA9IEVBQ0NFUzsKKworCSAgZGllKF8oImNhbm5vdCBydW4gbGVhc2UtaW5pdCBzY3JpcHQgJXM6ICVzIiksIGRhZW1vbi0+bGVhc2VfY2hhbmdlX2NvbW1hbmQsIEVDX0ZJTEUpOworCX0KKyAgICAgIAorICAgICAgaWYgKFdFWElUU1RBVFVTKHJjKSAhPSAwKQorCXsKKwkgIHNwcmludGYoZGFlbW9uLT5kaGNwX2J1ZmYsICIlZCIsIFdFWElUU1RBVFVTKHJjKSk7CisJICBkaWUoXygibGVhc2UtaW5pdCBzY3JpcHQgcmV0dXJuZWQgZXhpdCBjb2RlICVzIiksIGRhZW1vbi0+ZGhjcF9idWZmLCBXRVhJVFNUQVRVUyhyYykgKyBFQ19JTklUX09GRlNFVCk7CisJfQorICAgIH0KKyNlbmRpZgorCisgIC8qIFNvbWUgbGVhc2VzIG1heSBoYXZlIGV4cGlyZWQgKi8KKyAgZmlsZV9kaXJ0eSA9IDA7CisgIGxlYXNlX3BydW5lKE5VTEwsIG5vdyk7CisgIGRuc19kaXJ0eSA9IDE7Cit9CisKK3ZvaWQgbGVhc2VfdXBkYXRlX2Zyb21fY29uZmlncyh2b2lkKQoreworICAvKiBjaGFuZ2VzIHRvIHRoZSBjb25maWcgbWF5IGNoYW5nZSBjdXJyZW50IGxlYXNlcy4gKi8KKyAgCisgIHN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZTsKKyAgc3RydWN0IGRoY3BfY29uZmlnICpjb25maWc7CisgIGNoYXIgKm5hbWU7CisgIAorICBmb3IgKGxlYXNlID0gbGVhc2VzOyBsZWFzZTsgbGVhc2UgPSBsZWFzZS0+bmV4dCkKKyAgICBpZiAobGVhc2UtPmZsYWdzICYgKExFQVNFX1RBIHwgTEVBU0VfTkEpKQorICAgICAgY29udGludWU7CisgICAgZWxzZSBpZiAoKGNvbmZpZyA9IGZpbmRfY29uZmlnKGRhZW1vbi0+ZGhjcF9jb25mLCBOVUxMLCBsZWFzZS0+Y2xpZCwgbGVhc2UtPmNsaWRfbGVuLCAKKwkJCQkgICBsZWFzZS0+aHdhZGRyLCBsZWFzZS0+aHdhZGRyX2xlbiwgbGVhc2UtPmh3YWRkcl90eXBlLCBOVUxMKSkgJiYgCisJICAgICAoY29uZmlnLT5mbGFncyAmIENPTkZJR19OQU1FKSAmJgorCSAgICAgKCEoY29uZmlnLT5mbGFncyAmIENPTkZJR19BRERSKSB8fCBjb25maWctPmFkZHIuc19hZGRyID09IGxlYXNlLT5hZGRyLnNfYWRkcikpCisgICAgICBsZWFzZV9zZXRfaG9zdG5hbWUobGVhc2UsIGNvbmZpZy0+aG9zdG5hbWUsIDEsIGdldF9kb21haW4obGVhc2UtPmFkZHIpLCBOVUxMKTsKKyAgICBlbHNlIGlmICgobmFtZSA9IGhvc3RfZnJvbV9kbnMobGVhc2UtPmFkZHIpKSkKKyAgICAgIGxlYXNlX3NldF9ob3N0bmFtZShsZWFzZSwgbmFtZSwgMSwgZ2V0X2RvbWFpbihsZWFzZS0+YWRkciksIE5VTEwpOyAvKiB1cGRhdGVzIGF1dGggZmxhZyBvbmx5ICovCit9CisKK3N0YXRpYyB2b2lkIG91cnByaW50ZihpbnQgKmVycnAsIGNoYXIgKmZvcm1hdCwgLi4uKQoreworICB2YV9saXN0IGFwOworICAKKyAgdmFfc3RhcnQoYXAsIGZvcm1hdCk7CisgIGlmICghKCplcnJwKSAmJiB2ZnByaW50ZihkYWVtb24tPmxlYXNlX3N0cmVhbSwgZm9ybWF0LCBhcCkgPCAwKQorICAgICplcnJwID0gZXJybm87CisgIHZhX2VuZChhcCk7Cit9CisKK3ZvaWQgbGVhc2VfdXBkYXRlX2ZpbGUodGltZV90IG5vdykKK3sKKyAgc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlOworICB0aW1lX3QgbmV4dF9ldmVudDsKKyAgaW50IGksIGVyciA9IDA7CisKKyAgaWYgKGZpbGVfZGlydHkgIT0gMCAmJiBkYWVtb24tPmxlYXNlX3N0cmVhbSkKKyAgICB7CisgICAgICBlcnJubyA9IDA7CisgICAgICByZXdpbmQoZGFlbW9uLT5sZWFzZV9zdHJlYW0pOworICAgICAgaWYgKGVycm5vICE9IDAgfHwgZnRydW5jYXRlKGZpbGVubyhkYWVtb24tPmxlYXNlX3N0cmVhbSksIDApICE9IDApCisJZXJyID0gZXJybm87CisgICAgICAKKyAgICAgIGZvciAobGVhc2UgPSBsZWFzZXM7IGxlYXNlOyBsZWFzZSA9IGxlYXNlLT5uZXh0KQorCXsKKworI2lmZGVmIEhBVkVfREhDUDYKKwkgIGlmIChsZWFzZS0+ZmxhZ3MgJiAoTEVBU0VfVEEgfCBMRUFTRV9OQSkpCisJICAgIGNvbnRpbnVlOworI2VuZGlmCisKKyNpZmRlZiBIQVZFX0JST0tFTl9SVEMKKwkgIG91cnByaW50ZigmZXJyLCAiJXUgIiwgbGVhc2UtPmxlbmd0aCk7CisjZWxzZQorCSAgb3VycHJpbnRmKCZlcnIsICIlbHUgIiwgKHVuc2lnbmVkIGxvbmcpbGVhc2UtPmV4cGlyZXMpOworI2VuZGlmCisKKwkgIGlmIChsZWFzZS0+aHdhZGRyX3R5cGUgIT0gQVJQSFJEX0VUSEVSIHx8IGxlYXNlLT5od2FkZHJfbGVuID09IDApIAorCSAgICBvdXJwcmludGYoJmVyciwgIiUuMngtIiwgbGVhc2UtPmh3YWRkcl90eXBlKTsKKwkgIGZvciAoaSA9IDA7IGkgPCBsZWFzZS0+aHdhZGRyX2xlbjsgaSsrKQorCSAgICB7CisJICAgICAgb3VycHJpbnRmKCZlcnIsICIlLjJ4IiwgbGVhc2UtPmh3YWRkcltpXSk7CisJICAgICAgaWYgKGkgIT0gbGVhc2UtPmh3YWRkcl9sZW4gLSAxKQorCQlvdXJwcmludGYoJmVyciwgIjoiKTsKKwkgICAgfQorCSAgCisJICBpbmV0X250b3AoQUZfSU5FVCwgJmxlYXNlLT5hZGRyLCBkYWVtb24tPmFkZHJidWZmLCBBRERSU1RSTEVOKTsgCisKKwkgIG91cnByaW50ZigmZXJyLCAiICVzICIsIGRhZW1vbi0+YWRkcmJ1ZmYpOworCSAgb3VycHJpbnRmKCZlcnIsICIlcyAiLCBsZWFzZS0+aG9zdG5hbWUgPyBsZWFzZS0+aG9zdG5hbWUgOiAiKiIpOworCSAgCSAgCisJICBpZiAobGVhc2UtPmNsaWQgJiYgbGVhc2UtPmNsaWRfbGVuICE9IDApCisJICAgIHsKKwkgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVhc2UtPmNsaWRfbGVuIC0gMTsgaSsrKQorCQlvdXJwcmludGYoJmVyciwgIiUuMng6IiwgbGVhc2UtPmNsaWRbaV0pOworCSAgICAgIG91cnByaW50ZigmZXJyLCAiJS4yeCAiLCBsZWFzZS0+Y2xpZFtpXSk7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgb3VycHJpbnRmKCZlcnIsICIqICIpOworCisJICB7CisJICAgIHVuc2lnbmVkIGNoYXIgKnA7CisJICAgIGlmIChsZWFzZS0+cmVxX29wdGlvbnNbMF0gPT0gT1BUSU9OX0VORCkKKwkgICAgICBvdXJwcmludGYoJmVyciwgIioiKTsKKwkgICAgZWxzZQorCSAgICB7CisJICAgICAgZm9yIChwID0gbGVhc2UtPnJlcV9vcHRpb25zOyAqcCAhPSBPUFRJT05fRU5EOyBwKyspCisJICAgICAgeworCQlpZiAocCAhPSBsZWFzZS0+cmVxX29wdGlvbnMpIG91cnByaW50ZigmZXJyLCAiLCIpOworCQlvdXJwcmludGYoJmVyciwgIiV1IiwgKnApOworCSAgICAgIH0KKwkgICAgfQorCSAgICBvdXJwcmludGYoJmVyciwgIlxuIik7CisJICB9CisJfQorICAgICAgCisjaWZkZWYgSEFWRV9ESENQNiAgCisgICAgICBpZiAoZGFlbW9uLT5kdWlkKQorCXsKKwkgIG91cnByaW50ZigmZXJyLCAiZHVpZCAiKTsKKwkgIGZvciAoaSA9IDA7IGkgPCBkYWVtb24tPmR1aWRfbGVuIC0gMTsgaSsrKQorCSAgICBvdXJwcmludGYoJmVyciwgIiUuMng6IiwgZGFlbW9uLT5kdWlkW2ldKTsKKwkgIG91cnByaW50ZigmZXJyLCAiJS4yeFxuIiwgZGFlbW9uLT5kdWlkW2ldKTsKKwkgIAorCSAgZm9yIChsZWFzZSA9IGxlYXNlczsgbGVhc2U7IGxlYXNlID0gbGVhc2UtPm5leHQpCisJICAgIHsKKwkgICAgICAKKwkgICAgICBpZiAoIShsZWFzZS0+ZmxhZ3MgJiAoTEVBU0VfVEEgfCBMRUFTRV9OQSkpKQorCQljb250aW51ZTsKKworI2lmZGVmIEhBVkVfQlJPS0VOX1JUQworCSAgICAgIG91cnByaW50ZigmZXJyLCAiJXUgIiwgbGVhc2UtPmxlbmd0aCk7CisjZWxzZQorCSAgICAgIG91cnByaW50ZigmZXJyLCAiJWx1ICIsICh1bnNpZ25lZCBsb25nKWxlYXNlLT5leHBpcmVzKTsKKyNlbmRpZgorICAgIAorCSAgICAgIGluZXRfbnRvcChBRl9JTkVUNiwgJmxlYXNlLT5hZGRyNiwgZGFlbW9uLT5hZGRyYnVmZiwgQUREUlNUUkxFTik7CisJIAorCSAgICAgIG91cnByaW50ZigmZXJyLCAiJXMldSAlcyAiLCAobGVhc2UtPmZsYWdzICYgTEVBU0VfVEEpID8gIlQiIDogIiIsCisJCQlsZWFzZS0+aWFpZCwgZGFlbW9uLT5hZGRyYnVmZik7CisJICAgICAgb3VycHJpbnRmKCZlcnIsICIlcyAiLCBsZWFzZS0+aG9zdG5hbWUgPyBsZWFzZS0+aG9zdG5hbWUgOiAiKiIpOworCSAgICAgIAorCSAgICAgIGlmIChsZWFzZS0+Y2xpZCAmJiBsZWFzZS0+Y2xpZF9sZW4gIT0gMCkKKwkJeworCQkgIGZvciAoaSA9IDA7IGkgPCBsZWFzZS0+Y2xpZF9sZW4gLSAxOyBpKyspCisJCSAgICBvdXJwcmludGYoJmVyciwgIiUuMng6IiwgbGVhc2UtPmNsaWRbaV0pOworCQkgIG91cnByaW50ZigmZXJyLCAiJS4yeFxuIiwgbGVhc2UtPmNsaWRbaV0pOworCQl9CisJICAgICAgZWxzZQorCQlvdXJwcmludGYoJmVyciwgIipcbiIpOwkgIAorCSAgICB9CisJfQorI2VuZGlmICAgICAgCisJICAKKyAgICAgIGlmIChmZmx1c2goZGFlbW9uLT5sZWFzZV9zdHJlYW0pICE9IDAgfHwKKwkgIGZzeW5jKGZpbGVubyhkYWVtb24tPmxlYXNlX3N0cmVhbSkpIDwgMCkKKwllcnIgPSBlcnJubzsKKyAgICAgIAorICAgICAgaWYgKCFlcnIpCisJZmlsZV9kaXJ0eSA9IDA7CisgICAgfQorICAKKyAgLyogU2V0IGFsYXJtIGZvciB3aGVuIHRoZSBmaXJzdCBsZWFzZSBleHBpcmVzLiAqLworICBuZXh0X2V2ZW50ID0gMDsKKworI2lmZGVmIEhBVkVfREhDUDYKKyAgLyogZG8gdGltZWQgUkFzIGFuZCBkZXRlcm1pbmUgd2hlbiB0aGUgbmV4dCBpcywgYWxzbyBwaW5ncyB0byBwb3RlbnRpYWwgU0xBQUMgYWRkcmVzc2VzICovCisgIGlmIChkYWVtb24tPmRvaW5nX3JhKQorICAgIHsKKyAgICAgIHRpbWVfdCBldmVudDsKKyAgICAgIAorICAgICAgaWYgKChldmVudCA9IHBlcmlvZGljX3NsYWFjKG5vdywgbGVhc2VzKSkgIT0gMCkKKwl7CisJICBpZiAobmV4dF9ldmVudCA9PSAwIHx8IGRpZmZ0aW1lKG5leHRfZXZlbnQsIGV2ZW50KSA+IDAuMCkKKwkgICAgbmV4dF9ldmVudCA9IGV2ZW50OworCX0KKyAgICAgIAorICAgICAgaWYgKChldmVudCA9IHBlcmlvZGljX3JhKG5vdykpICE9IDApCisJeworCSAgaWYgKG5leHRfZXZlbnQgPT0gMCB8fCBkaWZmdGltZShuZXh0X2V2ZW50LCBldmVudCkgPiAwLjApCisJICAgIG5leHRfZXZlbnQgPSBldmVudDsKKwl9CisgICAgfQorI2VuZGlmCisKKyAgZm9yIChsZWFzZSA9IGxlYXNlczsgbGVhc2U7IGxlYXNlID0gbGVhc2UtPm5leHQpCisgICAgaWYgKGxlYXNlLT5leHBpcmVzICE9IDAgJiYKKwkobmV4dF9ldmVudCA9PSAwIHx8IGRpZmZ0aW1lKG5leHRfZXZlbnQsIGxlYXNlLT5leHBpcmVzKSA+IDAuMCkpCisgICAgICBuZXh0X2V2ZW50ID0gbGVhc2UtPmV4cGlyZXM7CisgICAKKyAgaWYgKGVycikKKyAgICB7CisgICAgICBpZiAobmV4dF9ldmVudCA9PSAwIHx8IGRpZmZ0aW1lKG5leHRfZXZlbnQsIExFQVNFX1JFVFJZICsgbm93KSA+IDAuMCkKKwluZXh0X2V2ZW50ID0gTEVBU0VfUkVUUlkgKyBub3c7CisgICAgICAKKyAgICAgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX0VSUiwgXygiZmFpbGVkIHRvIHdyaXRlICVzOiAlcyAocmV0cnkgaW4gJXVzKSIpLCAKKwkJZGFlbW9uLT5sZWFzZV9maWxlLCBzdHJlcnJvcihlcnIpLAorCQkodW5zaWduZWQgaW50KWRpZmZ0aW1lKG5leHRfZXZlbnQsIG5vdykpOworICAgIH0KKworICBzZW5kX2FsYXJtKG5leHRfZXZlbnQsIG5vdyk7Cit9CisKKworc3RhdGljIGludCBmaW5kX2ludGVyZmFjZV92NChzdHJ1Y3QgaW5fYWRkciBsb2NhbCwgaW50IGlmX2luZGV4LCBjaGFyICpsYWJlbCwKKwkJCSAgICAgc3RydWN0IGluX2FkZHIgbmV0bWFzaywgc3RydWN0IGluX2FkZHIgYnJvYWRjYXN0LCB2b2lkICp2cGFyYW0pCit7CisgIHN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZTsKKyAgaW50IHByZWZpeCA9IG5ldG1hc2tfbGVuZ3RoKG5ldG1hc2spOworCisgICh2b2lkKSBsYWJlbDsKKyAgKHZvaWQpIGJyb2FkY2FzdDsKKyAgKHZvaWQpIHZwYXJhbTsKKworICBmb3IgKGxlYXNlID0gbGVhc2VzOyBsZWFzZTsgbGVhc2UgPSBsZWFzZS0+bmV4dCkKKyAgICBpZiAoIShsZWFzZS0+ZmxhZ3MgJiAoTEVBU0VfVEEgfCBMRUFTRV9OQSkpICYmCisJaXNfc2FtZV9uZXQobG9jYWwsIGxlYXNlLT5hZGRyLCBuZXRtYXNrKSAmJiAKKwlwcmVmaXggPiBsZWFzZS0+bmV3X3ByZWZpeGxlbikgCisgICAgICB7CisJbGVhc2UtPm5ld19pbnRlcmZhY2UgPSBpZl9pbmRleDsKKyAgICAgICAgbGVhc2UtPm5ld19wcmVmaXhsZW4gPSBwcmVmaXg7CisgICAgICB9CisKKyAgcmV0dXJuIDE7Cit9CisKKyNpZmRlZiBIQVZFX0RIQ1A2CitzdGF0aWMgaW50IGZpbmRfaW50ZXJmYWNlX3Y2KHN0cnVjdCBpbjZfYWRkciAqbG9jYWwsICBpbnQgcHJlZml4LAorCQkJICAgICBpbnQgc2NvcGUsIGludCBpZl9pbmRleCwgaW50IGZsYWdzLCAKKwkJCSAgICAgaW50IHByZWZlcnJlZCwgaW50IHZhbGlkLCB2b2lkICp2cGFyYW0pCit7CisgIHN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZTsKKworICAodm9pZClzY29wZTsKKyAgKHZvaWQpZmxhZ3M7CisgICh2b2lkKXByZWZlcnJlZDsKKyAgKHZvaWQpdmFsaWQ7CisgICh2b2lkKXZwYXJhbTsKKworICBmb3IgKGxlYXNlID0gbGVhc2VzOyBsZWFzZTsgbGVhc2UgPSBsZWFzZS0+bmV4dCkKKyAgICBpZiAoKGxlYXNlLT5mbGFncyAmIChMRUFTRV9UQSB8IExFQVNFX05BKSkpCisgICAgICBpZiAoaXNfc2FtZV9uZXQ2KGxvY2FsLCAmbGVhc2UtPmFkZHI2LCBwcmVmaXgpICYmIHByZWZpeCA+IGxlYXNlLT5uZXdfcHJlZml4bGVuKSB7CisgICAgICAgIC8qIHNhdmUgcHJlZml4IGxlbmd0aCBmb3IgY29tcGFyaXNvbiwgYXMgd2UgbWlnaHQgZ2V0IHNob3J0ZXIgbWF0Y2hpbmcKKyAgICAgICAgICogcHJlZml4IGluIHVwY29taW5nIG5ldGxpbmsgR0VUQUREUiByZXNwb25zZXMKKyAgICAgICAgICogKi8KKyAgICAgICAgbGVhc2UtPm5ld19pbnRlcmZhY2UgPSBpZl9pbmRleDsKKyAgICAgICAgbGVhc2UtPm5ld19wcmVmaXhsZW4gPSBwcmVmaXg7CisgICAgICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3ZvaWQgbGVhc2VfcGluZ19yZXBseShzdHJ1Y3QgaW42X2FkZHIgKnNlbmRlciwgdW5zaWduZWQgY2hhciAqcGFja2V0LCBjaGFyICppbnRlcmZhY2UpCit7CisgIC8qIFdlIG1heSBiZSBkb2luZyBSQSBidXQgbm90IERIQ1B2NCwgaW4gd2hpY2ggY2FzZSB0aGUgbGVhc2UKKyAgICAgZGF0YWJhc2UgbWF5IG5vdCBleGlzdCBhbmQgd2UgaGF2ZSBub3RoaW5nIHRvIGRvIGFueXdheSAqLworICBpZiAoZGFlbW9uLT5kaGNwKQorICAgIHNsYWFjX3BpbmdfcmVwbHkoc2VuZGVyLCBwYWNrZXQsIGludGVyZmFjZSwgbGVhc2VzKTsKK30KKwordm9pZCBsZWFzZV91cGRhdGVfc2xhYWModGltZV90IG5vdykKK3sKKyAgLyogQ2FsbGVkIHdoZW4gd2UgY29uc3RydWN0IGEgbmV3IFJBLW5hbWVzIGNvbnRleHQsIHRvIGFkZCBwdXRhdGl2ZQorICAgICBuZXcgU0xBQUMgYWRkcmVzc2VzIHRvIGV4aXN0aW5nIGxlYXNlcy4gKi8KKworICBzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2U7CisgIAorICBpZiAoZGFlbW9uLT5kaGNwKQorICAgIGZvciAobGVhc2UgPSBsZWFzZXM7IGxlYXNlOyBsZWFzZSA9IGxlYXNlLT5uZXh0KQorICAgICAgc2xhYWNfYWRkX2FkZHJzKGxlYXNlLCBub3csIDApOworfQorCisjZW5kaWYKKworCisvKiBGaW5kIGludGVyZmFjZXMgYXNzb2NpYXRlZCB3aXRoIGxlYXNlcyBhdCBzdGFydC11cC4gVGhpcyBnZXRzIHVwZGF0ZWQgYXMKKyAgIHdlIGRvIERIQ1AgdHJhbnNhY3Rpb25zLCBidXQgaW5mb3JtYXRpb24gYWJvdXQgZGlyZWN0bHktY29ubmVjdGVkIHN1Ym5ldHMKKyAgIGlzIHVzZWZ1bCBmcm9tIHNjcmlwcyBhbmQgbmVjZXNzYXJ5IGZvciBkZXRlcm1pbmluZyBTTEFBQyBhZGRyZXNzZXMgZnJvbQorICAgc3RhcnQtdGltZS4gKi8KK3ZvaWQgbGVhc2VfZmluZF9pbnRlcmZhY2VzKHRpbWVfdCBub3cpCit7CisgIHN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZTsKKyAgCisgIGZvciAobGVhc2UgPSBsZWFzZXM7IGxlYXNlOyBsZWFzZSA9IGxlYXNlLT5uZXh0KQorICAgIGxlYXNlLT5uZXdfcHJlZml4bGVuID0gbGVhc2UtPm5ld19pbnRlcmZhY2UgPSAwOworCisgIGlmYWNlX2VudW1lcmF0ZShBRl9JTkVULCAmbm93LCBmaW5kX2ludGVyZmFjZV92NCk7CisjaWZkZWYgSEFWRV9ESENQNgorICBpZmFjZV9lbnVtZXJhdGUoQUZfSU5FVDYsICZub3csIGZpbmRfaW50ZXJmYWNlX3Y2KTsKKyNlbmRpZgorCisgIGZvciAobGVhc2UgPSBsZWFzZXM7IGxlYXNlOyBsZWFzZSA9IGxlYXNlLT5uZXh0KQorICAgIGlmIChsZWFzZS0+bmV3X2ludGVyZmFjZSAhPSAwKSAKKyAgICAgIGxlYXNlX3NldF9pbnRlcmZhY2UobGVhc2UsIGxlYXNlLT5uZXdfaW50ZXJmYWNlLCBub3cpOworfQorCisjaWZkZWYgSEFWRV9ESENQNgordm9pZCBsZWFzZV9tYWtlX2R1aWQodGltZV90IG5vdykKK3sKKyAgLyogSWYgd2UncmUgbm90IGRvaW5nIERIQ1B2NiwgYW5kIHRoZXJlIGFyZSBub3QgdjYgbGVhc2VzLCBkb24ndCBhZGQgdGhlIERVSUQgdG8gdGhlIGRhdGFiYXNlICovCisgIGlmICghZGFlbW9uLT5kdWlkICYmIGRhZW1vbi0+ZG9pbmdfZGhjcDYpCisgICAgeworICAgICAgZmlsZV9kaXJ0eSA9IDE7CisgICAgICBtYWtlX2R1aWQobm93KTsKKyAgICB9Cit9CisjZW5kaWYKKworCisKKwordm9pZCBsZWFzZV91cGRhdGVfZG5zKGludCBmb3JjZSkKK3sKKyAgc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlOworCisgIGlmIChkYWVtb24tPnBvcnQgIT0gMCAmJiAoZG5zX2RpcnR5IHx8IGZvcmNlKSkKKyAgICB7CisjaWZuZGVmIEhBVkVfQlJPS0VOX1JUQworICAgICAgLyogZm9yY2UgdHJhbnNmZXIgdG8gYXV0aG9yaXRhdGl2ZSBzZWNvbmRhcmllcyAqLworICAgICAgZGFlbW9uLT5zb2Ffc24rKzsKKyNlbmRpZgorICAgICAgCisgICAgICBjYWNoZV91bmhhc2hfZGhjcCgpOworCisgICAgICBmb3IgKGxlYXNlID0gbGVhc2VzOyBsZWFzZTsgbGVhc2UgPSBsZWFzZS0+bmV4dCkKKwl7CisJICBpbnQgcHJvdCA9IEFGX0lORVQ7CisJICAKKyNpZmRlZiBIQVZFX0RIQ1A2CisJICBpZiAobGVhc2UtPmZsYWdzICYgKExFQVNFX1RBIHwgTEVBU0VfTkEpKQorCSAgICBwcm90ID0gQUZfSU5FVDY7CisJICBlbHNlIGlmIChsZWFzZS0+aG9zdG5hbWUgfHwgbGVhc2UtPmZxZG4pCisJICAgIHsKKwkgICAgICBzdHJ1Y3Qgc2xhYWNfYWRkcmVzcyAqc2xhYWM7CisKKwkgICAgICBmb3IgKHNsYWFjID0gbGVhc2UtPnNsYWFjX2FkZHJlc3M7IHNsYWFjOyBzbGFhYyA9IHNsYWFjLT5uZXh0KQorCQlpZiAoc2xhYWMtPmJhY2tvZmYgPT0gMCkKKwkJICB7CisJCSAgICBpZiAobGVhc2UtPmZxZG4pCisJCSAgICAgIGNhY2hlX2FkZF9kaGNwX2VudHJ5KGxlYXNlLT5mcWRuLCBBRl9JTkVUNiwgKHN0cnVjdCBhbGxfYWRkciAqKSZzbGFhYy0+YWRkciwgbGVhc2UtPmV4cGlyZXMpOworCQkgICAgaWYgKCFvcHRpb25fYm9vbChPUFRfREhDUF9GUUROKSAmJiBsZWFzZS0+aG9zdG5hbWUpCisJCSAgICAgIGNhY2hlX2FkZF9kaGNwX2VudHJ5KGxlYXNlLT5ob3N0bmFtZSwgQUZfSU5FVDYsIChzdHJ1Y3QgYWxsX2FkZHIgKikmc2xhYWMtPmFkZHIsIGxlYXNlLT5leHBpcmVzKTsKKwkJICB9CisJICAgIH0KKwkgIAorCSAgaWYgKGxlYXNlLT5mcWRuKQorCSAgICBjYWNoZV9hZGRfZGhjcF9lbnRyeShsZWFzZS0+ZnFkbiwgcHJvdCwgCisJCQkJIHByb3QgPT0gQUZfSU5FVCA/IChzdHJ1Y3QgYWxsX2FkZHIgKikmbGVhc2UtPmFkZHIgOiAoc3RydWN0IGFsbF9hZGRyICopJmxlYXNlLT5hZGRyNiwKKwkJCQkgbGVhc2UtPmV4cGlyZXMpOworCSAgICAgCisJICBpZiAoIW9wdGlvbl9ib29sKE9QVF9ESENQX0ZRRE4pICYmIGxlYXNlLT5ob3N0bmFtZSkKKwkgICAgY2FjaGVfYWRkX2RoY3BfZW50cnkobGVhc2UtPmhvc3RuYW1lLCBwcm90LCAKKwkJCQkgcHJvdCA9PSBBRl9JTkVUID8gKHN0cnVjdCBhbGxfYWRkciAqKSZsZWFzZS0+YWRkciA6IChzdHJ1Y3QgYWxsX2FkZHIgKikmbGVhc2UtPmFkZHI2LCAKKwkJCQkgbGVhc2UtPmV4cGlyZXMpOworICAgICAgIAorI2Vsc2UKKwkgIGlmIChsZWFzZS0+ZnFkbikKKwkgICAgY2FjaGVfYWRkX2RoY3BfZW50cnkobGVhc2UtPmZxZG4sIHByb3QsIChzdHJ1Y3QgYWxsX2FkZHIgKikmbGVhc2UtPmFkZHIsIGxlYXNlLT5leHBpcmVzKTsKKwkgIAorCSAgaWYgKCFvcHRpb25fYm9vbChPUFRfREhDUF9GUUROKSAmJiBsZWFzZS0+aG9zdG5hbWUpCisJICAgIGNhY2hlX2FkZF9kaGNwX2VudHJ5KGxlYXNlLT5ob3N0bmFtZSwgcHJvdCwgKHN0cnVjdCBhbGxfYWRkciAqKSZsZWFzZS0+YWRkciwgbGVhc2UtPmV4cGlyZXMpOworI2VuZGlmCisJfQorICAgICAgCisgICAgICBkbnNfZGlydHkgPSAwOworICAgIH0KK30KKwordm9pZCBsZWFzZV9wcnVuZShzdHJ1Y3QgZGhjcF9sZWFzZSAqdGFyZ2V0LCB0aW1lX3Qgbm93KQoreworICBzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2UsICp0bXAsICoqdXA7CisKKyAgZm9yIChsZWFzZSA9IGxlYXNlcywgdXAgPSAmbGVhc2VzOyBsZWFzZTsgbGVhc2UgPSB0bXApCisgICAgeworICAgICAgdG1wID0gbGVhc2UtPm5leHQ7CisgICAgICBpZiAoKGxlYXNlLT5leHBpcmVzICE9IDAgJiYgZGlmZnRpbWUobm93LCBsZWFzZS0+ZXhwaXJlcykgPiAwKSB8fCBsZWFzZSA9PSB0YXJnZXQpCisJeworCSAgZmlsZV9kaXJ0eSA9IDE7CisJICBpZiAobGVhc2UtPmhvc3RuYW1lKQorCSAgICBkbnNfZGlydHkgPSAxOworCSAgCisgCSAgKnVwID0gbGVhc2UtPm5leHQ7IC8qIHVubGluayAqLworCSAgCisJICAvKiBQdXQgb24gb2xkX2xlYXNlcyBsaXN0ICd0aWxsIHdlCisJICAgICBjYW4gcnVuIHRoZSBzY3JpcHQgKi8KKwkgIGxlYXNlLT5uZXh0ID0gb2xkX2xlYXNlczsKKwkgIG9sZF9sZWFzZXMgPSBsZWFzZTsKKwkgIAorCSAgbGVhc2VzX2xlZnQrKzsKKwl9CisgICAgICBlbHNlCisJdXAgPSAmbGVhc2UtPm5leHQ7CisgICAgfQorfSAKKwkKKyAgCitzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2VfZmluZF9ieV9jbGllbnQodW5zaWduZWQgY2hhciAqaHdhZGRyLCBpbnQgaHdfbGVuLCBpbnQgaHdfdHlwZSwKKwkJCQkJdW5zaWduZWQgY2hhciAqY2xpZCwgaW50IGNsaWRfbGVuKQoreworICBzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2U7CisKKyAgaWYgKGNsaWQpCisgICAgZm9yIChsZWFzZSA9IGxlYXNlczsgbGVhc2U7IGxlYXNlID0gbGVhc2UtPm5leHQpCisgICAgICB7CisjaWZkZWYgSEFWRV9ESENQNgorCWlmIChsZWFzZS0+ZmxhZ3MgJiAoTEVBU0VfVEEgfCBMRUFTRV9OQSkpCisJICBjb250aW51ZTsKKyNlbmRpZgorCWlmIChsZWFzZS0+Y2xpZCAmJiBjbGlkX2xlbiA9PSBsZWFzZS0+Y2xpZF9sZW4gJiYKKwkgICAgbWVtY21wKGNsaWQsIGxlYXNlLT5jbGlkLCBjbGlkX2xlbikgPT0gMCkKKwkgIHJldHVybiBsZWFzZTsKKyAgICAgIH0KKyAgCisgIGZvciAobGVhc2UgPSBsZWFzZXM7IGxlYXNlOyBsZWFzZSA9IGxlYXNlLT5uZXh0KQkKKyAgICB7CisjaWZkZWYgSEFWRV9ESENQNgorICAgICAgaWYgKGxlYXNlLT5mbGFncyAmIChMRUFTRV9UQSB8IExFQVNFX05BKSkKKwljb250aW51ZTsKKyNlbmRpZiAgIAorICAgICAgaWYgKCghbGVhc2UtPmNsaWQgfHwgIWNsaWQpICYmIAorCSAgaHdfbGVuICE9IDAgJiYgCisJICBsZWFzZS0+aHdhZGRyX2xlbiA9PSBod19sZW4gJiYKKwkgIGxlYXNlLT5od2FkZHJfdHlwZSA9PSBod190eXBlICYmCisJICBtZW1jbXAoaHdhZGRyLCBsZWFzZS0+aHdhZGRyLCBod19sZW4pID09IDApCisJcmV0dXJuIGxlYXNlOworICAgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlX2ZpbmRfYnlfYWRkcihzdHJ1Y3QgaW5fYWRkciBhZGRyKQoreworICBzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2U7CisKKyAgZm9yIChsZWFzZSA9IGxlYXNlczsgbGVhc2U7IGxlYXNlID0gbGVhc2UtPm5leHQpCisgICAgeworI2lmZGVmIEhBVkVfREhDUDYKKyAgICAgIGlmIChsZWFzZS0+ZmxhZ3MgJiAoTEVBU0VfVEEgfCBMRUFTRV9OQSkpCisJY29udGludWU7CisjZW5kaWYgIAorICAgICAgaWYgKGxlYXNlLT5hZGRyLnNfYWRkciA9PSBhZGRyLnNfYWRkcikKKwlyZXR1cm4gbGVhc2U7CisgICAgfQorCisgIHJldHVybiBOVUxMOworfQorCisjaWZkZWYgSEFWRV9ESENQNgorLyogZmluZCBhZGRyZXNzIGZvciB7Q0xJRCwgSUFJRCwgYWRkcmVzc30gKi8KK3N0cnVjdCBkaGNwX2xlYXNlICpsZWFzZTZfZmluZCh1bnNpZ25lZCBjaGFyICpjbGlkLCBpbnQgY2xpZF9sZW4sIAorCQkJICAgICAgIGludCBsZWFzZV90eXBlLCBpbnQgaWFpZCwgc3RydWN0IGluNl9hZGRyICphZGRyKQoreworICBzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2U7CisgIAorICBmb3IgKGxlYXNlID0gbGVhc2VzOyBsZWFzZTsgbGVhc2UgPSBsZWFzZS0+bmV4dCkKKyAgICB7CisgICAgICBpZiAoIShsZWFzZS0+ZmxhZ3MgJiBsZWFzZV90eXBlKSB8fCBsZWFzZS0+aWFpZCAhPSBpYWlkKQorCWNvbnRpbnVlOworCisgICAgICBpZiAoIUlONl9BUkVfQUREUl9FUVVBTCgmbGVhc2UtPmFkZHI2LCBhZGRyKSkKKwljb250aW51ZTsKKyAgICAgIAorICAgICAgaWYgKChjbGlkX2xlbiAhPSBsZWFzZS0+Y2xpZF9sZW4gfHwKKwkgICBtZW1jbXAoY2xpZCwgbGVhc2UtPmNsaWQsIGNsaWRfbGVuKSAhPSAwKSkKKwljb250aW51ZTsKKyAgICAgIAorICAgICAgcmV0dXJuIGxlYXNlOworICAgIH0KKyAgCisgIHJldHVybiBOVUxMOworfQorCisvKiByZXNldCAiVVNFRCBmbGFncyAqLwordm9pZCBsZWFzZTZfcmVzZXQodm9pZCkKK3sKKyAgc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlOworICAKKyAgZm9yIChsZWFzZSA9IGxlYXNlczsgbGVhc2U7IGxlYXNlID0gbGVhc2UtPm5leHQpCisgICAgbGVhc2UtPmZsYWdzICY9IH5MRUFTRV9VU0VEOworfQorCisvKiBlbnVtZXJhdGUgYWxsIGxlYXNlcyBiZWxvbmdpbmcgdG8ge0NMSUQsIElBSUR9ICovCitzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2U2X2ZpbmRfYnlfY2xpZW50KHN0cnVjdCBkaGNwX2xlYXNlICpmaXJzdCwgaW50IGxlYXNlX3R5cGUsIHVuc2lnbmVkIGNoYXIgKmNsaWQsIGludCBjbGlkX2xlbiwgaW50IGlhaWQpCit7CisgIHN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZTsKKworICBpZiAoIWZpcnN0KQorICAgIGZpcnN0ID0gbGVhc2VzOworICBlbHNlCisgICAgZmlyc3QgPSBmaXJzdC0+bmV4dDsKKworICBmb3IgKGxlYXNlID0gZmlyc3Q7IGxlYXNlOyBsZWFzZSA9IGxlYXNlLT5uZXh0KQorICAgIHsKKyAgICAgIGlmIChsZWFzZS0+ZmxhZ3MgJiBMRUFTRV9VU0VEKQorCWNvbnRpbnVlOworCisgICAgICBpZiAoIShsZWFzZS0+ZmxhZ3MgJiBsZWFzZV90eXBlKSB8fCBsZWFzZS0+aWFpZCAhPSBpYWlkKQorCWNvbnRpbnVlOworIAorICAgICAgaWYgKChjbGlkX2xlbiAhPSBsZWFzZS0+Y2xpZF9sZW4gfHwKKwkgICBtZW1jbXAoY2xpZCwgbGVhc2UtPmNsaWQsIGNsaWRfbGVuKSAhPSAwKSkKKwljb250aW51ZTsKKworICAgICAgcmV0dXJuIGxlYXNlOworICAgIH0KKyAgCisgIHJldHVybiBOVUxMOworfQorCitzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2U2X2ZpbmRfYnlfYWRkcihzdHJ1Y3QgaW42X2FkZHIgKm5ldCwgaW50IHByZWZpeCwgdTY0IGFkZHIpCit7CisgIHN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZTsKKyAgICAKKyAgZm9yIChsZWFzZSA9IGxlYXNlczsgbGVhc2U7IGxlYXNlID0gbGVhc2UtPm5leHQpCisgICAgeworICAgICAgaWYgKCEobGVhc2UtPmZsYWdzICYgKExFQVNFX1RBIHwgTEVBU0VfTkEpKSkKKwljb250aW51ZTsKKyAgICAgIAorICAgICAgaWYgKGlzX3NhbWVfbmV0NigmbGVhc2UtPmFkZHI2LCBuZXQsIHByZWZpeCkgJiYKKwkgIChwcmVmaXggPT0gMTI4IHx8IGFkZHI2cGFydCgmbGVhc2UtPmFkZHI2KSA9PSBhZGRyKSkKKwlyZXR1cm4gbGVhc2U7CisgICAgfQorICAKKyAgcmV0dXJuIE5VTEw7Cit9IAorCisvKiBGaW5kIGxhcmdlc3QgYXNzaWduZWQgYWRkcmVzcyBpbiBjb250ZXh0ICovCit1NjQgbGVhc2VfZmluZF9tYXhfYWRkcjYoc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dCkKK3sKKyAgc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlOworICB1NjQgYWRkciA9IGFkZHI2cGFydCgmY29udGV4dC0+c3RhcnQ2KTsKKyAgCisgIGlmICghKGNvbnRleHQtPmZsYWdzICYgKENPTlRFWFRfU1RBVElDIHwgQ09OVEVYVF9QUk9YWSkpKQorICAgIGZvciAobGVhc2UgPSBsZWFzZXM7IGxlYXNlOyBsZWFzZSA9IGxlYXNlLT5uZXh0KQorICAgICAgeworCWlmICghKGxlYXNlLT5mbGFncyAmIChMRUFTRV9UQSB8IExFQVNFX05BKSkpCisJICBjb250aW51ZTsKKworCWlmIChpc19zYW1lX25ldDYoJmxlYXNlLT5hZGRyNiwgJmNvbnRleHQtPnN0YXJ0NiwgNjQpICYmCisJICAgIGFkZHI2cGFydCgmbGVhc2UtPmFkZHI2KSA+IGFkZHI2cGFydCgmY29udGV4dC0+c3RhcnQ2KSAmJgorCSAgICBhZGRyNnBhcnQoJmxlYXNlLT5hZGRyNikgPD0gYWRkcjZwYXJ0KCZjb250ZXh0LT5lbmQ2KSAmJgorCSAgICBhZGRyNnBhcnQoJmxlYXNlLT5hZGRyNikgPiBhZGRyKQorCSAgYWRkciA9IGFkZHI2cGFydCgmbGVhc2UtPmFkZHI2KTsKKyAgICAgIH0KKyAgCisgIHJldHVybiBhZGRyOworfQorCisjZW5kaWYKKworLyogRmluZCBsYXJnZXN0IGFzc2lnbmVkIGFkZHJlc3MgaW4gY29udGV4dCAqLworc3RydWN0IGluX2FkZHIgbGVhc2VfZmluZF9tYXhfYWRkcihzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0KQoreworICBzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2U7CisgIHN0cnVjdCBpbl9hZGRyIGFkZHIgPSBjb250ZXh0LT5zdGFydDsKKyAgCisgIGlmICghKGNvbnRleHQtPmZsYWdzICYgKENPTlRFWFRfU1RBVElDIHwgQ09OVEVYVF9QUk9YWSkpKQorICAgIGZvciAobGVhc2UgPSBsZWFzZXM7IGxlYXNlOyBsZWFzZSA9IGxlYXNlLT5uZXh0KQorICAgICAgeworI2lmZGVmIEhBVkVfREhDUDYKKwlpZiAobGVhc2UtPmZsYWdzICYgKExFQVNFX1RBIHwgTEVBU0VfTkEpKQorCSAgY29udGludWU7CisjZW5kaWYKKwlpZiAoKCh1bnNpZ25lZCludG9obChsZWFzZS0+YWRkci5zX2FkZHIpKSA+ICgodW5zaWduZWQpbnRvaGwoY29udGV4dC0+c3RhcnQuc19hZGRyKSkgJiYKKwkgICAgKCh1bnNpZ25lZCludG9obChsZWFzZS0+YWRkci5zX2FkZHIpKSA8PSAoKHVuc2lnbmVkKW50b2hsKGNvbnRleHQtPmVuZC5zX2FkZHIpKSAmJgorCSAgICAoKHVuc2lnbmVkKW50b2hsKGxlYXNlLT5hZGRyLnNfYWRkcikpID4gKCh1bnNpZ25lZCludG9obChhZGRyLnNfYWRkcikpKQorCSAgYWRkciA9IGxlYXNlLT5hZGRyOworICAgICAgfQorICAKKyAgcmV0dXJuIGFkZHI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2VfYWxsb2NhdGUodm9pZCkKK3sKKyAgc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlOworICBpZiAoIWxlYXNlc19sZWZ0IHx8ICEobGVhc2UgPSB3aGluZV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBkaGNwX2xlYXNlKSkpKQorICAgIHJldHVybiBOVUxMOworCisgIG1lbXNldChsZWFzZSwgMCwgc2l6ZW9mKHN0cnVjdCBkaGNwX2xlYXNlKSk7CisgIGxlYXNlLT5mbGFncyA9IExFQVNFX05FVzsKKyAgbGVhc2UtPmV4cGlyZXMgPSAxOworI2lmZGVmIEhBVkVfQlJPS0VOX1JUQworICBsZWFzZS0+bGVuZ3RoID0gMHhmZmZmZmZmZjsgLyogaWxsZWdhbCB2YWx1ZSAqLworI2VuZGlmCisgIGxlYXNlLT5od2FkZHJfbGVuID0gMjU2OyAvKiBpbGxlZ2FsIHZhbHVlICovCisgIGxlYXNlLT5yZXFfb3B0aW9uc1swXSA9IE9QVElPTl9FTkQ7CisgIGxlYXNlLT5uZXh0ID0gbGVhc2VzOworICBsZWFzZXMgPSBsZWFzZTsKKyAgCisgIGZpbGVfZGlydHkgPSAxOworICBsZWFzZXNfbGVmdC0tOworCisgIHJldHVybiBsZWFzZTsKK30KKworc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlNF9hbGxvY2F0ZShzdHJ1Y3QgaW5fYWRkciBhZGRyKQoreworICBzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2UgPSBsZWFzZV9hbGxvY2F0ZSgpOworICBpZiAobGVhc2UpCisgICAgbGVhc2UtPmFkZHIgPSBhZGRyOworICAKKyAgcmV0dXJuIGxlYXNlOworfQorCisjaWZkZWYgSEFWRV9ESENQNgorc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlNl9hbGxvY2F0ZShzdHJ1Y3QgaW42X2FkZHIgKmFkZHJwLCBpbnQgbGVhc2VfdHlwZSkKK3sKKyAgc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlID0gbGVhc2VfYWxsb2NhdGUoKTsKKworICBpZiAobGVhc2UpCisgICAgeworICAgICAgbGVhc2UtPmFkZHI2ID0gKmFkZHJwOworICAgICAgbGVhc2UtPmZsYWdzIHw9IGxlYXNlX3R5cGU7CisgICAgICBsZWFzZS0+aWFpZCA9IDA7CisgICAgfQorCisgIHJldHVybiBsZWFzZTsKK30KKyNlbmRpZgorCit2b2lkIGxlYXNlX3NldF9leHBpcmVzKHN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZSwgdW5zaWduZWQgaW50IGxlbiwgdGltZV90IG5vdykKK3sKKyAgdGltZV90IGV4cDsKKworICBpZiAobGVuID09IDB4ZmZmZmZmZmYpCisgICAgeworICAgICAgZXhwID0gMDsKKyAgICAgIGxlbiA9IDA7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgZXhwID0gbm93ICsgKHRpbWVfdClsZW47CisgICAgICAvKiBDaGVjayBmb3IgMjAzOCBvdmVyZmxvdy4gTWFrZSB0aGUgbGVhc2UKKwkgaW5maW5pdGUgaW4gdGhhdCBjYXNlLCBhcyB0aGUgbGVhc3QgZGlzcnVwdGl2ZQorCSB0aGluZyB3ZSBjYW4gZG8uICovCisgICAgICBpZiAoZGlmZnRpbWUoZXhwLCBub3cpIDw9IDAuMCkKKwlleHAgPSAwOworICAgIH0KKworICBpZiAoZXhwICE9IGxlYXNlLT5leHBpcmVzKQorICAgIHsKKyAgICAgIGRuc19kaXJ0eSA9IDE7CisgICAgICBsZWFzZS0+ZXhwaXJlcyA9IGV4cDsKKyNpZm5kZWYgSEFWRV9CUk9LRU5fUlRDCisgICAgICBsZWFzZS0+ZmxhZ3MgfD0gTEVBU0VfQVVYX0NIQU5HRUQ7CisgICAgICBmaWxlX2RpcnR5ID0gMTsKKyNlbmRpZgorICAgIH0KKyAgCisjaWZkZWYgSEFWRV9CUk9LRU5fUlRDCisgIGlmIChsZW4gIT0gbGVhc2UtPmxlbmd0aCkKKyAgICB7CisgICAgICBsZWFzZS0+bGVuZ3RoID0gbGVuOworICAgICAgbGVhc2UtPmZsYWdzIHw9IExFQVNFX0FVWF9DSEFOR0VEOworICAgICAgZmlsZV9kaXJ0eSA9IDE7IAorICAgIH0KKyNlbmRpZgorfSAKKworI2lmZGVmIEhBVkVfREhDUDYKK3ZvaWQgbGVhc2Vfc2V0X2lhaWQoc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlLCBpbnQgaWFpZCkKK3sKKyAgaWYgKGxlYXNlLT5pYWlkICE9IGlhaWQpCisgICAgeworICAgICAgbGVhc2UtPmlhaWQgPSBpYWlkOworICAgICAgbGVhc2UtPmZsYWdzIHw9IExFQVNFX0NIQU5HRUQ7CisgICAgfQorfQorI2VuZGlmCisKK3ZvaWQgbGVhc2Vfc2V0X2h3YWRkcihzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2UsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmh3YWRkciwKKwkJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY2xpZCwgaW50IGh3X2xlbiwgaW50IGh3X3R5cGUsCisJCSAgICAgIGludCBjbGlkX2xlbiwgdGltZV90IG5vdywgaW50IGZvcmNlKQoreworI2lmZGVmIEhBVkVfREhDUDYKKyAgaW50IGNoYW5nZSA9IGZvcmNlOworICBsZWFzZS0+ZmxhZ3MgfD0gTEVBU0VfSEFWRV9IV0FERFI7CisjZW5kaWYKKworICAodm9pZClmb3JjZTsKKyAgKHZvaWQpbm93OworCisgIGlmIChod19sZW4gIT0gbGVhc2UtPmh3YWRkcl9sZW4gfHwKKyAgICAgIGh3X3R5cGUgIT0gbGVhc2UtPmh3YWRkcl90eXBlIHx8IAorICAgICAgKGh3X2xlbiAhPSAwICYmIG1lbWNtcChsZWFzZS0+aHdhZGRyLCBod2FkZHIsIGh3X2xlbikgIT0gMCkpCisgICAgeworICAgICAgaWYgKGh3X2xlbiAhPSAwKQorCW1lbWNweShsZWFzZS0+aHdhZGRyLCBod2FkZHIsIGh3X2xlbik7CisgICAgICBsZWFzZS0+aHdhZGRyX2xlbiA9IGh3X2xlbjsKKyAgICAgIGxlYXNlLT5od2FkZHJfdHlwZSA9IGh3X3R5cGU7CisgICAgICBsZWFzZS0+ZmxhZ3MgfD0gTEVBU0VfQ0hBTkdFRDsKKyAgICAgIGZpbGVfZGlydHkgPSAxOyAvKiBydW4gc2NyaXB0IG9uIGNoYW5nZSAqLworICAgIH0KKworICAvKiBvbmx5IHVwZGF0ZSBjbGlkIHdoZW4gb25lIGlzIGF2YWlsYWJsZSwgc3RvcHMgcGFja2V0cworICAgICB3aXRob3V0IGEgY2xpZCByZW1vdmluZyB0aGUgcmVjb3JkLiBMZWFzZSBpbml0IHVzZXMKKyAgICAgY2xpZF9sZW4gPT0gMCBmb3Igbm8gY2xpZC4gKi8KKyAgaWYgKGNsaWRfbGVuICE9IDAgJiYgY2xpZCkKKyAgICB7CisgICAgICBpZiAoIWxlYXNlLT5jbGlkKQorCWxlYXNlLT5jbGlkX2xlbiA9IDA7CisKKyAgICAgIGlmIChsZWFzZS0+Y2xpZF9sZW4gIT0gY2xpZF9sZW4pCisJeworCSAgbGVhc2UtPmZsYWdzIHw9IExFQVNFX0FVWF9DSEFOR0VEOworCSAgZmlsZV9kaXJ0eSA9IDE7CisJICBmcmVlKGxlYXNlLT5jbGlkKTsKKwkgIGlmICghKGxlYXNlLT5jbGlkID0gd2hpbmVfbWFsbG9jKGNsaWRfbGVuKSkpCisJICAgIHJldHVybjsKKyNpZmRlZiBIQVZFX0RIQ1A2CisJICBjaGFuZ2UgPSAxOworI2VuZGlmCSAgIAorCX0KKyAgICAgIGVsc2UgaWYgKG1lbWNtcChsZWFzZS0+Y2xpZCwgY2xpZCwgY2xpZF9sZW4pICE9IDApCisJeworCSAgbGVhc2UtPmZsYWdzIHw9IExFQVNFX0FVWF9DSEFOR0VEOworCSAgZmlsZV9kaXJ0eSA9IDE7CisjaWZkZWYgSEFWRV9ESENQNgorCSAgY2hhbmdlID0gMTsKKyNlbmRpZgkKKwl9CisgICAgICAKKyAgICAgIGxlYXNlLT5jbGlkX2xlbiA9IGNsaWRfbGVuOworICAgICAgbWVtY3B5KGxlYXNlLT5jbGlkLCBjbGlkLCBjbGlkX2xlbik7CisgICAgfQorICAKKyNpZmRlZiBIQVZFX0RIQ1A2CisgIGlmIChjaGFuZ2UpCisgICAgc2xhYWNfYWRkX2FkZHJzKGxlYXNlLCBub3csIGZvcmNlKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBraWxsX25hbWUoc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlKQoreworICAvKiBydW4gc2NyaXB0IHRvIHNheSB3ZSBsb3N0IG91ciBvbGQgbmFtZSAqLworICAKKyAgLyogdGhpcyBzaG91bGRuJ3QgaGFwcGVuIHVubGVzcyB1cGRhdGVzIGFyZSB2ZXJ5IHF1aWNrIGFuZCB0aGUKKyAgICAgc2NyaXB0IHZlcnkgc2xvdywgd2UganVzdCBhdm9pZCBhIG1lbW9yeSBsZWFrIGlmIGl0IGRvZXMuICovCisgIGZyZWUobGVhc2UtPm9sZF9ob3N0bmFtZSk7CisgIAorICAvKiBJZiB3ZSBrbm93IHRoZSBmcWRuLCBwYXNzIHRoYXQuIFRoZSBoZWxwZXIgd2lsbCBkZXJpdmUgdGhlCisgICAgIHVucXVhbGlmaWVkIG5hbWUgZnJvbSBpdCwgZnJlZSB0aGUgdW5xdWFsaWZpZWQgbmFtZSBoZXJlLiAqLworCisgIGlmIChsZWFzZS0+ZnFkbikKKyAgICB7CisgICAgICBsZWFzZS0+b2xkX2hvc3RuYW1lID0gbGVhc2UtPmZxZG47CisgICAgICBmcmVlKGxlYXNlLT5ob3N0bmFtZSk7CisgICAgfQorICBlbHNlCisgICAgbGVhc2UtPm9sZF9ob3N0bmFtZSA9IGxlYXNlLT5ob3N0bmFtZTsKKworICBsZWFzZS0+aG9zdG5hbWUgPSBsZWFzZS0+ZnFkbiA9IE5VTEw7Cit9CisKK3ZvaWQgbGVhc2Vfc2V0X2hvc3RuYW1lKHN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZSwgY29uc3QgY2hhciAqbmFtZSwgaW50IGF1dGgsIGNoYXIgKmRvbWFpbiwgY2hhciAqY29uZmlnX2RvbWFpbikKK3sKKyAgc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlX3RtcDsKKyAgY2hhciAqbmV3X25hbWUgPSBOVUxMLCAqbmV3X2ZxZG4gPSBOVUxMOworCisgIGlmIChjb25maWdfZG9tYWluICYmICghZG9tYWluIHx8ICFob3N0bmFtZV9pc2VxdWFsKGRvbWFpbiwgY29uZmlnX2RvbWFpbikpKQorICAgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX1dBUk5JTkcsIF8oIklnbm9yaW5nIGRvbWFpbiAlcyBmb3IgREhDUCBob3N0IG5hbWUgJXMiKSwgY29uZmlnX2RvbWFpbiwgbmFtZSk7CisgIAorICBpZiAobGVhc2UtPmhvc3RuYW1lICYmIG5hbWUgJiYgaG9zdG5hbWVfaXNlcXVhbChsZWFzZS0+aG9zdG5hbWUsIG5hbWUpKQorICAgIHsKKyAgICAgIGlmIChhdXRoKQorCWxlYXNlLT5mbGFncyB8PSBMRUFTRV9BVVRIX05BTUU7CisgICAgICByZXR1cm47CisgICAgfQorICAKKyAgaWYgKCFuYW1lICYmICFsZWFzZS0+aG9zdG5hbWUpCisgICAgcmV0dXJuOworCisgIC8qIElmIGEgbWFjaGluZSB0dXJucyB1cCBvbiBhIG5ldyBuZXQgd2l0aG91dCBkcm9wcGluZyB0aGUgb2xkIGxlYXNlLAorICAgICBvciB0d28gbWFjaGluZXMgY2xhaW0gdGhlIHNhbWUgbmFtZSwgdGhlbiB3ZSBlbmQgdXAgd2l0aCB0d28gaW50ZXJmYWNlcyB3aXRoCisgICAgIHRoZSBzYW1lIG5hbWUuIENoZWNrIGZvciB0aGF0IGhlcmUgYW5kIHJlbW92ZSB0aGUgbmFtZSBmcm9tIHRoZSBvbGQgbGVhc2UuCisgICAgIE5vdGUgdGhhdCBJUHY2IGxlYXNlcyBhcmUgZGlmZmVyZW50LiBBbGwgdGhlIGxlYXNlcyB0byB0aGUgc2FtZSBEVUlEIGFyZSAKKyAgICAgYWxsb3dlZCB0aGUgc2FtZSBuYW1lLgorCisgICAgIERvbid0IGFsbG93IGEgbmFtZSBmcm9tIHRoZSBjbGllbnQgdG8gb3ZlcnJpZGUgYSBuYW1lIGZyb20gZG5zbWFzcSBjb25maWcuICovCisgIAorICBpZiAobmFtZSkKKyAgICB7CisgICAgICBpZiAoKG5ld19uYW1lID0gd2hpbmVfbWFsbG9jKHN0cmxlbihuYW1lKSArIDEpKSkKKwl7CisJICBzdHJjcHkobmV3X25hbWUsIG5hbWUpOworCSAgaWYgKGRvbWFpbiAmJiAobmV3X2ZxZG4gPSB3aGluZV9tYWxsb2Moc3RybGVuKG5ld19uYW1lKSArIHN0cmxlbihkb21haW4pICsgMikpKQorCSAgICB7CisJICAgICAgc3RyY3B5KG5ld19mcWRuLCBuYW1lKTsKKwkgICAgICBzdHJjYXQobmV3X2ZxZG4sICIuIik7CisJICAgICAgc3RyY2F0KG5ld19mcWRuLCBkb21haW4pOworCSAgICB9CisJfQorCSAgCisgICAgICAvKiBEZXBlbmRpbmcgb24gbW9kZSwgd2UgY2hlY2sgZWl0aGVyIHVucXVhbGlmaWVkIG5hbWUgb3IgRlFETi4gKi8KKyAgICAgIGZvciAobGVhc2VfdG1wID0gbGVhc2VzOyBsZWFzZV90bXA7IGxlYXNlX3RtcCA9IGxlYXNlX3RtcC0+bmV4dCkKKwl7CisJICBpZiAob3B0aW9uX2Jvb2woT1BUX0RIQ1BfRlFETikpCisJICAgIHsKKwkgICAgICBpZiAoIW5ld19mcWRuIHx8ICFsZWFzZV90bXAtPmZxZG4gfHwgIWhvc3RuYW1lX2lzZXF1YWwobGVhc2VfdG1wLT5mcWRuLCBuZXdfZnFkbikpCisJCWNvbnRpbnVlOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBpZiAoIW5ld19uYW1lIHx8ICFsZWFzZV90bXAtPmhvc3RuYW1lIHx8ICFob3N0bmFtZV9pc2VxdWFsKGxlYXNlX3RtcC0+aG9zdG5hbWUsIG5ld19uYW1lKSApCisJCWNvbnRpbnVlOyAKKwkgICAgfQorCisJICBpZiAobGVhc2UtPmZsYWdzICYgKExFQVNFX1RBIHwgTEVBU0VfTkEpKQorCSAgICB7CisJICAgICAgaWYgKCEobGVhc2VfdG1wLT5mbGFncyAmIChMRUFTRV9UQSB8IExFQVNFX05BKSkpCisJCWNvbnRpbnVlOworCisJICAgICAgLyogYW5vdGhlciBsZWFzZSBmb3IgdGhlIHNhbWUgRFVJRCBpcyBPSyBmb3IgSVB2NiAqLworCSAgICAgIGlmIChsZWFzZS0+Y2xpZF9sZW4gPT0gbGVhc2VfdG1wLT5jbGlkX2xlbiAmJgorCQkgIGxlYXNlLT5jbGlkICYmIGxlYXNlX3RtcC0+Y2xpZCAmJgorCQkgIG1lbWNtcChsZWFzZS0+Y2xpZCwgbGVhc2VfdG1wLT5jbGlkLCBsZWFzZS0+Y2xpZF9sZW4pID09IDApCisJCWNvbnRpbnVlOwkgICAgICAKKwkgICAgfQorCSAgZWxzZSBpZiAobGVhc2VfdG1wLT5mbGFncyAmIChMRUFTRV9UQSB8IExFQVNFX05BKSkKKwkgICAgY29udGludWU7CisJCSAgIAorCSAgaWYgKChsZWFzZV90bXAtPmZsYWdzICYgTEVBU0VfQVVUSF9OQU1FKSAmJiAhYXV0aCkKKwkgICAgeworCSAgICAgIGZyZWUobmV3X25hbWUpOworCSAgICAgIGZyZWUobmV3X2ZxZG4pOworCSAgICAgIHJldHVybjsKKwkgICAgfQorCQorCSAga2lsbF9uYW1lKGxlYXNlX3RtcCk7CisJICBicmVhazsKKwl9CisgICAgfQorCisgIGlmIChsZWFzZS0+aG9zdG5hbWUpCisgICAga2lsbF9uYW1lKGxlYXNlKTsKKworICBsZWFzZS0+aG9zdG5hbWUgPSBuZXdfbmFtZTsKKyAgbGVhc2UtPmZxZG4gPSBuZXdfZnFkbjsKKyAgCisgIGlmIChhdXRoKQorICAgIGxlYXNlLT5mbGFncyB8PSBMRUFTRV9BVVRIX05BTUU7CisgIAorICBmaWxlX2RpcnR5ID0gMTsKKyAgZG5zX2RpcnR5ID0gMTsgCisgIGxlYXNlLT5mbGFncyB8PSBMRUFTRV9DSEFOR0VEOyAvKiBydW4gc2NyaXB0IG9uIGNoYW5nZSAqLworfQorCit2b2lkIGxlYXNlX3NldF9pbnRlcmZhY2Uoc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlLCBpbnQgaW50ZXJmYWNlLCB0aW1lX3Qgbm93KQoreworICAodm9pZClub3c7CisKKyAgaWYgKGxlYXNlLT5sYXN0X2ludGVyZmFjZSA9PSBpbnRlcmZhY2UpCisgICAgcmV0dXJuOworCisgIGxlYXNlLT5sYXN0X2ludGVyZmFjZSA9IGludGVyZmFjZTsKKyAgbGVhc2UtPmZsYWdzIHw9IExFQVNFX0NIQU5HRUQ7IAorCisjaWZkZWYgSEFWRV9ESENQNgorICBzbGFhY19hZGRfYWRkcnMobGVhc2UsIG5vdywgMCk7CisjZW5kaWYKK30KKwordm9pZCByZXJ1bl9zY3JpcHRzKHZvaWQpCit7CisgIHN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZTsKKyAgCisgIGZvciAobGVhc2UgPSBsZWFzZXM7IGxlYXNlOyBsZWFzZSA9IGxlYXNlLT5uZXh0KQorICAgIGxlYXNlLT5mbGFncyB8PSBMRUFTRV9DSEFOR0VEOyAKK30KKworLyogZGVsZXRlZCBsZWFzZXMgZ2V0IHRyYW5zZmVycmVkIHRvIHRoZSBvbGRfbGVhc2VzIGxpc3QuCisgICByZW1vdmUgdGhlbSBoZXJlLCBhZnRlciBjYWxsaW5nIHRoZSBsZWFzZSBjaGFuZ2UKKyAgIHNjcmlwdC4gQWxzbyBydW4gdGhlIGxlYXNlIGNoYW5nZSBzY3JpcHQgb24gbmV3L21vZGlmaWVkIGxlYXNlcy4KKworICAgUmV0dXJuIHplcm8gaWYgbm90aGluZyB0byBkby4gKi8KK2ludCBkb19zY3JpcHRfcnVuKHRpbWVfdCBub3cpCit7CisgIHN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZTsKKworICAodm9pZClub3c7CisKKyNpZmRlZiBIQVZFX0RCVVMKKyAgLyogSWYgd2UncmUgZ29pbmcgdG8gYmUgc2VuZGluZyBEQnVzIHNpZ25hbHMsIGJ1dCB0aGUgY29ubmVjdGlvbiBpcyBub3QgeWV0IHVwLAorICAgICBkZWxheSBldmVyeXRoaW5nIHVudGlsIGl0IGlzLiAqLworICBpZiAob3B0aW9uX2Jvb2woT1BUX0RCVVMpICYmICFkYWVtb24tPmRidXMpCisgICAgcmV0dXJuIDA7CisjZW5kaWYKKworICBpZiAob2xkX2xlYXNlcykKKyAgICB7CisgICAgICBsZWFzZSA9IG9sZF9sZWFzZXM7CisgICAgICAgICAgICAgICAgICAKKyAgICAgIC8qIElmIHRoZSBsZWFzZSBzdGlsbCBoYXMgYW4gb2xkX2hvc3RuYW1lLCBkbyB0aGUgIm9sZCIgYWN0aW9uIG9uIHRoYXQgZmlyc3QgKi8KKyAgICAgIGlmIChsZWFzZS0+b2xkX2hvc3RuYW1lKQorCXsKKyNpZmRlZiBIQVZFX1NDUklQVAorCSAgcXVldWVfc2NyaXB0KEFDVElPTl9PTERfSE9TVE5BTUUsIGxlYXNlLCBsZWFzZS0+b2xkX2hvc3RuYW1lLCBub3cpOworI2VuZGlmCisJICBmcmVlKGxlYXNlLT5vbGRfaG9zdG5hbWUpOworCSAgbGVhc2UtPm9sZF9ob3N0bmFtZSA9IE5VTEw7CisJICByZXR1cm4gMTsKKwl9CisgICAgICBlbHNlIAorCXsKKyNpZmRlZiBIQVZFX0RIQ1A2CisJICBzdHJ1Y3Qgc2xhYWNfYWRkcmVzcyAqc2xhYWMsICp0bXA7CisJICBmb3IgKHNsYWFjID0gbGVhc2UtPnNsYWFjX2FkZHJlc3M7IHNsYWFjOyBzbGFhYyA9IHRtcCkKKwkgICAgeworCSAgICAgIHRtcCA9IHNsYWFjLT5uZXh0OworCSAgICAgIGZyZWUoc2xhYWMpOworCSAgICB9CisjZW5kaWYKKwkgIGtpbGxfbmFtZShsZWFzZSk7CisjaWZkZWYgSEFWRV9TQ1JJUFQKKwkgIHF1ZXVlX3NjcmlwdChBQ1RJT05fREVMLCBsZWFzZSwgbGVhc2UtPm9sZF9ob3N0bmFtZSwgbm93KTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfREJVUworCSAgZW1pdF9kYnVzX3NpZ25hbChBQ1RJT05fREVMLCBsZWFzZSwgbGVhc2UtPm9sZF9ob3N0bmFtZSk7CisjZW5kaWYKKwkgIG9sZF9sZWFzZXMgPSBsZWFzZS0+bmV4dDsKKwkgIAorCSAgZnJlZShsZWFzZS0+b2xkX2hvc3RuYW1lKTsgCisJICBmcmVlKGxlYXNlLT5jbGlkKTsKKwkgIGZyZWUobGVhc2UtPmV4dHJhZGF0YSk7CisJICBmcmVlKGxlYXNlKTsKKwkgICAgCisJICByZXR1cm4gMTsgCisJfQorICAgIH0KKyAgCisgIC8qIG1ha2Ugc3VyZSB3ZSBhbm5vdW5jZSB0aGUgbG9zcyBvZiBhIGhvc3RuYW1lIGJlZm9yZSBpdHMgbmV3IGxvY2F0aW9uLiAqLworICBmb3IgKGxlYXNlID0gbGVhc2VzOyBsZWFzZTsgbGVhc2UgPSBsZWFzZS0+bmV4dCkKKyAgICBpZiAobGVhc2UtPm9sZF9ob3N0bmFtZSkKKyAgICAgIHsJCisjaWZkZWYgSEFWRV9TQ1JJUFQKKwlxdWV1ZV9zY3JpcHQoQUNUSU9OX09MRF9IT1NUTkFNRSwgbGVhc2UsIGxlYXNlLT5vbGRfaG9zdG5hbWUsIG5vdyk7CisjZW5kaWYKKwlmcmVlKGxlYXNlLT5vbGRfaG9zdG5hbWUpOworCWxlYXNlLT5vbGRfaG9zdG5hbWUgPSBOVUxMOworCXJldHVybiAxOworICAgICAgfQorICAKKyAgZm9yIChsZWFzZSA9IGxlYXNlczsgbGVhc2U7IGxlYXNlID0gbGVhc2UtPm5leHQpCisgICAgaWYgKChsZWFzZS0+ZmxhZ3MgJiAoTEVBU0VfTkVXIHwgTEVBU0VfQ0hBTkdFRCkpIHx8IAorCSgobGVhc2UtPmZsYWdzICYgTEVBU0VfQVVYX0NIQU5HRUQpICYmIG9wdGlvbl9ib29sKE9QVF9MRUFTRV9STykpKQorICAgICAgeworI2lmZGVmIEhBVkVfU0NSSVBUCisJcXVldWVfc2NyaXB0KChsZWFzZS0+ZmxhZ3MgJiBMRUFTRV9ORVcpID8gQUNUSU9OX0FERCA6IEFDVElPTl9PTEQsIGxlYXNlLCAKKwkJICAgICBsZWFzZS0+ZnFkbiA/IGxlYXNlLT5mcWRuIDogbGVhc2UtPmhvc3RuYW1lLCBub3cpOworI2VuZGlmCisjaWZkZWYgSEFWRV9EQlVTCisJZW1pdF9kYnVzX3NpZ25hbCgobGVhc2UtPmZsYWdzICYgTEVBU0VfTkVXKSA/IEFDVElPTl9BREQgOiBBQ1RJT05fT0xELCBsZWFzZSwKKwkJCSBsZWFzZS0+ZnFkbiA/IGxlYXNlLT5mcWRuIDogbGVhc2UtPmhvc3RuYW1lKTsKKyNlbmRpZgorCWxlYXNlLT5mbGFncyAmPSB+KExFQVNFX05FVyB8IExFQVNFX0NIQU5HRUQgfCBMRUFTRV9BVVhfQ0hBTkdFRCk7CisJCisJLyogdGhpcyBpcyB1c2VkIGZvciB0aGUgImFkZCIgY2FsbCwgdGhlbiBqdW5rZWQsIHNpbmNlIHRoZXkncmUgbm90IGluIHRoZSBkYXRhYmFzZSAqLworCWZyZWUobGVhc2UtPmV4dHJhZGF0YSk7CisJbGVhc2UtPmV4dHJhZGF0YSA9IE5VTEw7CisJCisJcmV0dXJuIDE7CisgICAgICB9CisKKyAgcmV0dXJuIDA7IC8qIG5vdGhpbmcgdG8gZG8gKi8KK30KKworI2lmZGVmIEhBVkVfU0NSSVBUCisvKiBkZWxpbSA9PSAtMSAtPiBkZWxpbSA9IDAsIGJ1dCBlbWJlZGRlZCAwcywgY3JlYXRpbmcgZXh0cmEgcmVjb3JkcywgYXJlIE9LLiAqLwordm9pZCBsZWFzZV9hZGRfZXh0cmFkYXRhKHN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZSwgdW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgaW50IGxlbiwgaW50IGRlbGltKQoreworICB1bnNpZ25lZCBpbnQgaTsKKyAgCisgIGlmIChkZWxpbSA9PSAtMSkKKyAgICBkZWxpbSA9IDA7CisgIGVsc2UKKyAgICAvKiBjaGVjayBmb3IgZW1iZWRkZWQgTlVMTHMgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisgICAgICBpZiAoZGF0YVtpXSA9PSAwKQorCXsKKwkgIGxlbiA9IGk7CisJICBicmVhazsKKwl9CisgIAorICBpZiAoKGxlYXNlLT5leHRyYWRhdGFfc2l6ZSAtIGxlYXNlLT5leHRyYWRhdGFfbGVuKSA8IChsZW4gKyAxKSkKKyAgICB7CisgICAgICBzaXplX3QgbmV3c3ogPSBsZWFzZS0+ZXh0cmFkYXRhX2xlbiArIGxlbiArIDEwMDsKKyAgICAgIHVuc2lnbmVkIGNoYXIgKm5ldyA9IHdoaW5lX21hbGxvYyhuZXdzeik7CisgIAorICAgICAgaWYgKCFuZXcpCisJcmV0dXJuOworICAgICAgCisgICAgICBpZiAobGVhc2UtPmV4dHJhZGF0YSkKKwl7CisJICBtZW1jcHkobmV3LCBsZWFzZS0+ZXh0cmFkYXRhLCBsZWFzZS0+ZXh0cmFkYXRhX2xlbik7CisJICBmcmVlKGxlYXNlLT5leHRyYWRhdGEpOworCX0KKworICAgICAgbGVhc2UtPmV4dHJhZGF0YSA9IG5ldzsKKyAgICAgIGxlYXNlLT5leHRyYWRhdGFfc2l6ZSA9IG5ld3N6OworICAgIH0KKworICBpZiAobGVuICE9IDApCisgICAgbWVtY3B5KGxlYXNlLT5leHRyYWRhdGEgKyBsZWFzZS0+ZXh0cmFkYXRhX2xlbiwgZGF0YSwgbGVuKTsKKyAgbGVhc2UtPmV4dHJhZGF0YVtsZWFzZS0+ZXh0cmFkYXRhX2xlbiArIGxlbl0gPSBkZWxpbTsKKyAgbGVhc2UtPmV4dHJhZGF0YV9sZW4gKz0gbGVuICsgMTsgCit9CisjZW5kaWYKKworI2VuZGlmCisJICAKKworICAgICAgCisKZGlmZiAtLWdpdCBhL3NyYy9sb2cuYyBiL3NyYy9sb2cuYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45OTNkMDY0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2xvZy5jCkBAIC0wLDAgKzEsNDg1IEBACisvKiBkbnNtYXNxIGlzIENvcHlyaWdodCAoYykgMjAwMC0yMDE3IFNpbW9uIEtlbGxleQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMgZGF0ZWQgMjkgSnVuZSwgMjAwNy4KKyAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2luY2x1ZGUgImRuc21hc3EuaCIKKworI2lmZGVmIF9fQU5EUk9JRF9fCisjaWZkZWYgRVVSRUtBCisjaW5jbHVkZSA8Y3V0aWxzL2xvZy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxhbmRyb2lkL2xvZy5oPgorI2VuZGlmCisjZW5kaWYKKworLyogSW1wbGVtZW50IGxvZ2dpbmcgdG8gL2Rldi9sb2cgYXN5bmNocm9ub3VzbHkuIElmIHN5c2xvZ2QgaXMgCisgICBtYWtpbmcgRE5TIGxvb2t1cHMgdGhyb3VnaCBkbnNtYXNxLCBhbmQgZG5zbWFzcSBibG9ja3MgYXdhaXRpbmcKKyAgIHN5c2xvZ2QsIHRoZW4gdGhlIHR3byBkYWVtb25zIGNhbiBkZWFkbG9jay4gV2UgZ2V0IGFyb3VuZCB0aGlzCisgICBieSBub3QgYmxvY2tpbmcgd2hlbiB0YWxraW5nIHRvIHN5c2xvZywgaW5zdGVhZCB3ZSBxdWV1ZSB1cCB0byAKKyAgIE1BWF9MT0dTIG1lc3NhZ2VzLiBJZiBtb3JlIGFyZSBxdWV1ZWQsIHRoZXkgd2lsbCBiZSBkcm9wcGVkLAorICAgYW5kIHRoZSBkcm9wIGV2ZW50IGl0c2VsZiBsb2dnZWQuICovCisKKy8qIFRoZSAid2lyZSIgcHJvdG9jb2wgZm9yIGxvZ2dpbmcgaXMgZGVmaW5lZCBpbiBSRkMgMzE2NCAqLworCisvKiBGcm9tIFJGQyAzMTY0ICovCisjZGVmaW5lIE1BWF9NRVNTQUdFIDEwMjQKKworLyogZGVmYXVsdHMgaW4gY2FzZSB3ZSBkaWUoKSBiZWZvcmUgd2UgbG9nX3N0YXJ0KCkgKi8KK3N0YXRpYyBpbnQgbG9nX2ZhYyA9IExPR19EQUVNT047CitzdGF0aWMgaW50IGxvZ19zdGRlcnIgPSAwOworc3RhdGljIGludCBlY2hvX3N0ZGVyciA9IDA7CitzdGF0aWMgaW50IGxvZ19mZCA9IC0xOworc3RhdGljIGludCBsb2dfdG9fZmlsZSA9IDA7CitzdGF0aWMgaW50IGVudHJpZXNfYWxsb2NlZCA9IDA7CitzdGF0aWMgaW50IGVudHJpZXNfbG9zdCA9IDA7CitzdGF0aWMgaW50IGNvbm5lY3Rpb25fZ29vZCA9IDE7CitzdGF0aWMgaW50IG1heF9sb2dzID0gMDsKK3N0YXRpYyBpbnQgY29ubmVjdGlvbl90eXBlID0gU09DS19ER1JBTTsKKworc3RydWN0IGxvZ19lbnRyeSB7CisgIGludCBvZmZzZXQsIGxlbmd0aDsKKyAgcGlkX3QgcGlkOyAvKiB0byBhdm9pZCBkdXBsaWNhdGVzIG92ZXIgYSBmb3JrICovCisgIHN0cnVjdCBsb2dfZW50cnkgKm5leHQ7CisgIGNoYXIgcGF5bG9hZFtNQVhfTUVTU0FHRV07Cit9OworCitzdGF0aWMgc3RydWN0IGxvZ19lbnRyeSAqZW50cmllcyA9IE5VTEw7CitzdGF0aWMgc3RydWN0IGxvZ19lbnRyeSAqZnJlZV9lbnRyaWVzID0gTlVMTDsKKworCitpbnQgbG9nX3N0YXJ0KHN0cnVjdCBwYXNzd2QgKmVudF9wdywgaW50IGVycmZkKQoreworICBpbnQgcmV0ID0gMDsKKworICBlY2hvX3N0ZGVyciA9IG9wdGlvbl9ib29sKE9QVF9ERUJVRyk7CisKKyAgaWYgKGRhZW1vbi0+bG9nX2ZhYyAhPSAtMSkKKyAgICBsb2dfZmFjID0gZGFlbW9uLT5sb2dfZmFjOworI2lmZGVmIExPR19MT0NBTDAKKyAgZWxzZSBpZiAob3B0aW9uX2Jvb2woT1BUX0RFQlVHKSkKKyAgICBsb2dfZmFjID0gTE9HX0xPQ0FMMDsKKyNlbmRpZgorCisgIGlmIChkYWVtb24tPmxvZ19maWxlKQorICAgIHsgCisgICAgICBsb2dfdG9fZmlsZSA9IDE7CisgICAgICBkYWVtb24tPm1heF9sb2dzID0gMDsKKyAgICAgIGlmIChzdHJjbXAoZGFlbW9uLT5sb2dfZmlsZSwgIi0iKSA9PSAwKQorCXsKKwkgIGxvZ19zdGRlcnIgPSAxOworCSAgZWNob19zdGRlcnIgPSAwOworCSAgbG9nX2ZkID0gZHVwKFNUREVSUl9GSUxFTk8pOworCX0KKyAgICB9CisgIAorICBtYXhfbG9ncyA9IGRhZW1vbi0+bWF4X2xvZ3M7CisKKyAgaWYgKCFsb2dfcmVvcGVuKGRhZW1vbi0+bG9nX2ZpbGUpKQorICAgIHsKKyAgICAgIHNlbmRfZXZlbnQoZXJyZmQsIEVWRU5UX0xPR19FUlIsIGVycm5vLCBkYWVtb24tPmxvZ19maWxlID8gZGFlbW9uLT5sb2dfZmlsZSA6ICIiKTsKKyAgICAgIF9leGl0KDApOworICAgIH0KKworICAvKiBpZiBxdWV1aW5nIGlzIGluaGliaXRlZCwgbWFrZSBzdXJlIHdlIGFsbG9jYXRlCisgICAgIHRoZSBvbmUgcmVxdWlyZWQgYnVmZmVyIG5vdy4gKi8KKyAgaWYgKG1heF9sb2dzID09IDApCisgICAgeyAgCisgICAgICBmcmVlX2VudHJpZXMgPSBzYWZlX21hbGxvYyhzaXplb2Yoc3RydWN0IGxvZ19lbnRyeSkpOworICAgICAgZnJlZV9lbnRyaWVzLT5uZXh0ID0gTlVMTDsKKyAgICAgIGVudHJpZXNfYWxsb2NlZCA9IDE7CisgICAgfQorCisgIC8qIElmIHdlJ3JlIHJ1bm5pbmcgYXMgcm9vdCBhbmQgZ29pbmcgdG8gY2hhbmdlIHVpZCBsYXRlciwKKyAgICAgY2hhbmdlIHRoZSBvd25lcnNoaXAgaGVyZSBzbyB0aGF0IHRoZSBmaWxlIGlzIGFsd2F5cyBvd25lZCBieQorICAgICB0aGUgZG5zbWFzcSB1c2VyLiBUaGVuIGxvZ3JvdGF0ZSBjYW4ganVzdCBjb3B5IHRoZSBvd25lci4KKyAgICAgRmFpbHVyZSBvZiB0aGUgY2hvd24gY2FsbCBpcyBPSywgKGZvciBpbnN0YW5jZSB3aGVuIHN0YXJ0ZWQgYXMgbm9uLXJvb3QpICovCisgIGlmIChsb2dfdG9fZmlsZSAmJiAhbG9nX3N0ZGVyciAmJiBlbnRfcHcgJiYgZW50X3B3LT5wd191aWQgIT0gMCAmJiAKKyAgICAgIGZjaG93bihsb2dfZmQsIGVudF9wdy0+cHdfdWlkLCAtMSkgIT0gMCkKKyAgICByZXQgPSBlcnJubzsKKworICByZXR1cm4gcmV0OworfQorCitpbnQgbG9nX3Jlb3BlbihjaGFyICpsb2dfZmlsZSkKK3sKKyAgaWYgKCFsb2dfc3RkZXJyKQorICAgIHsgICAgICAKKyAgICAgIGlmIChsb2dfZmQgIT0gLTEpCisJY2xvc2UobG9nX2ZkKTsKKyAgICAgIAorICAgICAgLyogTk9URTogdW1hc2sgaXMgc2V0IHRvIDAyMiBieSB0aGUgdGltZSB0aGlzIGdldHMgY2FsbGVkICovCisgICAgICAKKyAgICAgIGlmIChsb2dfZmlsZSkKKwlsb2dfZmQgPSBvcGVuKGxvZ19maWxlLCBPX1dST05MWXxPX0NSRUFUfE9fQVBQRU5ELCBTX0lSVVNSfFNfSVdVU1J8U19JUkdSUCk7ICAgICAgCisgICAgICBlbHNlCisJeworI2lmIGRlZmluZWQoSEFWRV9TT0xBUklTX05FVFdPUkspIHx8IGRlZmluZWQoX19BTkRST0lEX18pCisJICAvKiBTb2xhcmlzIGxvZ2dpbmcgaXMgImRpZmZlcmVudCIsIC9kZXYvbG9nIGlzIG5vdCB1bml4LWRvbWFpbiBzb2NrZXQuCisJICAgICBKdXN0IGxlYXZlIGxvZ19mZCA9PSAtMSBhbmQgdXNlIHRoZSB2c3lzbG9nIGNhbGwgZm9yIGV2ZXJ5dGhpbmcuLi4uICovCisjaWZuZGVmIF9QQVRIX0xPRworIyAgIGRlZmluZSBfUEFUSF9MT0cgIiIgIC8qIGR1bW15ICovCisjZW5kaWYKKwkgIHJldHVybiAxOworI2Vsc2UKKwkgIGludCBmbGFnczsKKwkgIGxvZ19mZCA9IHNvY2tldChBRl9VTklYLCBjb25uZWN0aW9uX3R5cGUsIDApOworCSAgCisJICAvKiBpZiBtYXhfbG9ncyBpcyB6ZXJvLCBsZWF2ZSB0aGUgc29ja2V0IGJsb2NraW5nICovCisJICBpZiAobG9nX2ZkICE9IC0xICYmIG1heF9sb2dzICE9IDAgJiYgKGZsYWdzID0gZmNudGwobG9nX2ZkLCBGX0dFVEZMKSkgIT0gLTEpCisJICAgIGZjbnRsKGxvZ19mZCwgRl9TRVRGTCwgZmxhZ3MgfCBPX05PTkJMT0NLKTsKKyNlbmRpZgorCX0KKyAgICB9CisgIAorICByZXR1cm4gbG9nX2ZkICE9IC0xOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2VudHJ5KHZvaWQpCit7CisgIHN0cnVjdCBsb2dfZW50cnkgKnRtcCA9IGVudHJpZXM7CisgIGVudHJpZXMgPSB0bXAtPm5leHQ7CisgIHRtcC0+bmV4dCA9IGZyZWVfZW50cmllczsKKyAgZnJlZV9lbnRyaWVzID0gdG1wOworfSAgICAgIAorCitzdGF0aWMgdm9pZCBsb2dfd3JpdGUodm9pZCkKK3sKKyAgc3NpemVfdCByYzsKKyAgIAorICB3aGlsZSAoZW50cmllcykKKyAgICB7CisgICAgICAvKiBUaGUgZGF0YSBpbiB0aGUgcGF5bG9hZCBpcyB3cml0dGVuIHdpdGggYSB0ZXJtaW5hdGluZyB6ZXJvIGNoYXJhY3RlciAKKwkgYW5kIHRoZSBsZW5ndGggcmVmbGVjdHMgdGhpcy4gRm9yIGEgc3RyZWFtIGNvbm5lY3Rpb24gd2UgbmVlZCB0byAKKwkgc2VuZCB0aGUgemVybyBhcyBhIHJlY29yZCB0ZXJtaW5hdG9yLCBidXQgdGhpcyBpc24ndCBkb25lIGZvciBhIAorCSBkYXRhZ3JhbSBjb25uZWN0aW9uLCBzbyB0cmVhdCB0aGUgbGVuZ3RoIGFzIG9uZSBsZXNzIHRoYW4gcmVhbGl0eSAKKwkgdG8gZWxpZGUgdGhlIHplcm8uIElmIHdlJ3JlIGxvZ2dpbmcgdG8gYSBmaWxlLCB0dXJuIHRoZSB6ZXJvIGludG8gCisJIGEgbmV3bGluZSwgYW5kIGxlYXZlIHRoZSBsZW5ndGggYWxvbmUuICovCisgICAgICBpbnQgbGVuX2FkanVzdCA9IDA7CisKKyAgICAgIGlmIChsb2dfdG9fZmlsZSkKKwllbnRyaWVzLT5wYXlsb2FkW2VudHJpZXMtPm9mZnNldCArIGVudHJpZXMtPmxlbmd0aCAtIDFdID0gJ1xuJzsKKyAgICAgIGVsc2UgaWYgKGNvbm5lY3Rpb25fdHlwZSA9PSBTT0NLX0RHUkFNKQorCWxlbl9hZGp1c3QgPSAxOworCisgICAgICAvKiBBdm9pZCBkdXBsaWNhdGVzIG92ZXIgYSBmb3JrKCkgKi8KKyAgICAgIGlmIChlbnRyaWVzLT5waWQgIT0gZ2V0cGlkKCkpCisJeworCSAgZnJlZV9lbnRyeSgpOworCSAgY29udGludWU7CisJfQorCisgICAgICBjb25uZWN0aW9uX2dvb2QgPSAxOworCisgICAgICBpZiAoKHJjID0gd3JpdGUobG9nX2ZkLCBlbnRyaWVzLT5wYXlsb2FkICsgZW50cmllcy0+b2Zmc2V0LCBlbnRyaWVzLT5sZW5ndGggLSBsZW5fYWRqdXN0KSkgIT0gLTEpCisJeworCSAgZW50cmllcy0+bGVuZ3RoIC09IHJjOworCSAgZW50cmllcy0+b2Zmc2V0ICs9IHJjOworCSAgaWYgKGVudHJpZXMtPmxlbmd0aCA9PSBsZW5fYWRqdXN0KQorCSAgICB7CisJICAgICAgZnJlZV9lbnRyeSgpOworCSAgICAgIGlmIChlbnRyaWVzX2xvc3QgIT0gMCkKKwkJeworCQkgIGludCBlID0gZW50cmllc19sb3N0OworCQkgIGVudHJpZXNfbG9zdCA9IDA7IC8qIGF2b2lkIHdpbGQgcmVjdXJzaW9uICovCisJCSAgbXlfc3lzbG9nKExPR19XQVJOSU5HLCBfKCJvdmVyZmxvdzogJWQgbG9nIGVudHJpZXMgbG9zdCIpLCBlKTsKKwkJfQkgIAorCSAgICB9CisJICBjb250aW51ZTsKKwl9CisgICAgICAKKyAgICAgIGlmIChlcnJubyA9PSBFSU5UUikKKwljb250aW51ZTsKKworICAgICAgaWYgKGVycm5vID09IEVBR0FJTiB8fCBlcnJubyA9PSBFV09VTERCTE9DSykKKwlyZXR1cm47IC8qIHN5c2xvZ2QgYnVzeSwgZ28gYWdhaW4gd2hlbiBzZWxlY3QoKSBvciBwb2xsKCkgc2F5cyBzbyAqLworICAgICAgCisgICAgICBpZiAoZXJybm8gPT0gRU5PQlVGUykKKwl7CisJICBjb25uZWN0aW9uX2dvb2QgPSAwOworCSAgcmV0dXJuOworCX0KKworICAgICAgLyogZXJyb3JzIGhhbmRsaW5nIGFmdGVyIHRoaXMgYXNzdW1lcyBzb2NrZXRzICovIAorICAgICAgaWYgKCFsb2dfdG9fZmlsZSkKKwl7CisJICAvKiBPbmNlIGEgc3RyZWFtIHNvY2tldCBoaXRzIEVQSVBFLCB3ZSBoYXZlIHRvIGNsb3NlIGFuZCByZS1vcGVuCisJICAgICAod2UgaWdub3JlIFNJR1BJUEUpICovCisJICBpZiAoZXJybm8gPT0gRVBJUEUpCisJICAgIHsKKwkgICAgICBpZiAobG9nX3Jlb3BlbihOVUxMKSkKKwkJY29udGludWU7CisJICAgIH0KKwkgIGVsc2UgaWYgKGVycm5vID09IEVDT05OUkVGVVNFRCB8fCAKKwkJICAgZXJybm8gPT0gRU5PVENPTk4gfHwgCisJCSAgIGVycm5vID09IEVERVNUQUREUlJFUSB8fCAKKwkJICAgZXJybm8gPT0gRUNPTk5SRVNFVCkKKwkgICAgeworCSAgICAgIC8qIHNvY2tldCB3ZW50IChzeXNsb2dkIGRvd24/KSwgdHJ5IGFuZCByZWNvbm5lY3QuIElmIHdlIGZhaWwsCisJCSBzdG9wIHRyeWluZyB1bnRpbCB0aGUgbmV4dCBjYWxsIHRvIG15X3N5c2xvZygpIAorCQkgRUNPTk5SRUZVU0VEIC0+IGNvbm5lY3Rpb24gd2VudCBkb3duCisJCSBFTk9UQ09OTiAtPiBub2JvZHkgbGlzdGVuaW5nCisJCSAoRUNPTk5SRVNFVCwgRURFU1RBRERSUkVRIGFyZSAqQlNEIGVxdWl2YWxlbnRzKSAqLworCSAgICAgIAorCSAgICAgIHN0cnVjdCBzb2NrYWRkcl91biBsb2dhZGRyOworCSAgICAgIAorI2lmZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisJICAgICAgbG9nYWRkci5zdW5fbGVuID0gc2l6ZW9mKGxvZ2FkZHIpIC0gc2l6ZW9mKGxvZ2FkZHIuc3VuX3BhdGgpICsgc3RybGVuKF9QQVRIX0xPRykgKyAxOyAKKyNlbmRpZgorCSAgICAgIGxvZ2FkZHIuc3VuX2ZhbWlseSA9IEFGX1VOSVg7CisJICAgICAgc3RybmNweShsb2dhZGRyLnN1bl9wYXRoLCBfUEFUSF9MT0csIHNpemVvZihsb2dhZGRyLnN1bl9wYXRoKSk7CisJICAgICAgCisJICAgICAgLyogR290IGNvbm5lY3Rpb24gYmFjaz8gdHJ5IGFnYWluLiAqLworCSAgICAgIGlmIChjb25uZWN0KGxvZ19mZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZsb2dhZGRyLCBzaXplb2YobG9nYWRkcikpICE9IC0xKQorCQljb250aW51ZTsKKwkgICAgICAKKwkgICAgICAvKiBlcnJvcnMgZnJvbSBjb25uZWN0IHdoaWNoIG1lYW4gd2Ugc2hvdWxkIGtlZXAgdHJ5aW5nICovCisJICAgICAgaWYgKGVycm5vID09IEVOT0VOVCB8fCAKKwkJICBlcnJubyA9PSBFQUxSRUFEWSB8fCAKKwkJICBlcnJubyA9PSBFQ09OTlJFRlVTRUQgfHwKKwkJICBlcnJubyA9PSBFSVNDT05OIHx8IAorCQkgIGVycm5vID09IEVJTlRSIHx8CisJCSAgZXJybm8gPT0gRUFHQUlOIHx8IAorCQkgIGVycm5vID09IEVXT1VMREJMT0NLKQorCQl7CisJCSAgLyogdHJ5IGFnYWluIG9uIG5leHQgc3lzbG9nKCkgY2FsbCAqLworCQkgIGNvbm5lY3Rpb25fZ29vZCA9IDA7CisJCSAgcmV0dXJuOworCQl9CisJICAgICAgCisJICAgICAgLyogdHJ5IHRoZSBvdGhlciBzb3J0IG9mIHNvY2tldC4uLiAqLworCSAgICAgIGlmIChlcnJubyA9PSBFUFJPVE9UWVBFKQorCQl7CisJCSAgY29ubmVjdGlvbl90eXBlID0gY29ubmVjdGlvbl90eXBlID09IFNPQ0tfREdSQU0gPyBTT0NLX1NUUkVBTSA6IFNPQ0tfREdSQU07CisJCSAgaWYgKGxvZ19yZW9wZW4oTlVMTCkpCisJCSAgICBjb250aW51ZTsKKwkJfQorCSAgICB9CisJfQorCisgICAgICAvKiBnaXZlIHVwIC0gZmFsbCBiYWNrIHRvIHN5c2xvZygpIC0gdGhpcyBoYW5kbGVzIG91dC1vZi1zcGFjZQorCSB3aGVuIGxvZ2dpbmcgdG8gYSBmaWxlLCBmb3IgaW5zdGFuY2UuICovCisgICAgICBsb2dfZmQgPSAtMTsKKyAgICAgIG15X3N5c2xvZyhMT0dfQ1JJVCwgXygibG9nIGZhaWxlZDogJXMiKSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgIHJldHVybjsKKyAgICB9Cit9CisKKy8qIHByaW9yaXR5IGlzIG9uZSBvZiBMT0dfREVCVUcsIExPR19JTkZPLCBMT0dfTk9USUNFLCBldGMuIFNlZSBzeXMvc3lzbG9nLmguCisgICBPUidkIHRvIHByaW9yaXR5IGNhbiBiZSBNU19URlRQLCBNU19ESENQLCAuLi4gdG8gYmUgYWJsZSB0byBkbyBsb2cgc2VwYXJhdGlvbiBiZXR3ZWVuCisgICBETlMsIERIQ1AgYW5kIFRGVFAgc2VydmljZXMuCisqLwordm9pZCBteV9zeXNsb2coaW50IHByaW9yaXR5LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcDsKKyAgc3RydWN0IGxvZ19lbnRyeSAqZW50cnk7CisgIHRpbWVfdCB0aW1lX25vdzsKKyAgY2hhciAqcDsKKyAgc2l6ZV90IGxlbjsKKyAgcGlkX3QgcGlkID0gZ2V0cGlkKCk7CisgIGNoYXIgKmZ1bmMgPSAiIjsKKworICBpZiAoKExPR19GQUNNQVNLICYgcHJpb3JpdHkpID09IE1TX1RGVFApCisgICAgZnVuYyA9ICItdGZ0cCI7CisgIGVsc2UgaWYgKChMT0dfRkFDTUFTSyAmIHByaW9yaXR5KSA9PSBNU19ESENQKQorICAgIGZ1bmMgPSAiLWRoY3AiOworICBlbHNlIGlmICgoTE9HX0ZBQ01BU0sgJiBwcmlvcml0eSkgPT0gTVNfU0NSSVBUKQorICAgIGZ1bmMgPSAiLXNjcmlwdCI7CisJICAgIAorI2lmZGVmIExPR19QUkkKKyAgcHJpb3JpdHkgPSBMT0dfUFJJKHByaW9yaXR5KTsKKyNlbHNlCisgIC8qIFNvbGFyaXMgZG9lc24ndCBoYXZlIExPR19QUkkgKi8KKyAgcHJpb3JpdHkgJj0gTE9HX1BSSU1BU0s7CisjZW5kaWYKKworICBpZiAoZWNob19zdGRlcnIpIAorICAgIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiZG5zbWFzcSVzOiAiLCBmdW5jKTsKKyAgICAgIHZhX3N0YXJ0KGFwLCBmb3JtYXQpOworICAgICAgdmZwcmludGYoc3RkZXJyLCBmb3JtYXQsIGFwKTsKKyAgICAgIHZhX2VuZChhcCk7CisgICAgICBmcHV0YygnXG4nLCBzdGRlcnIpOworICAgIH0KKworICBpZiAobG9nX2ZkID09IC0xKQorICAgIHsKKyNpZmRlZiBfX0FORFJPSURfXworICAgICAgLyogZG8gYW5kcm9pZC1zcGVjaWZpYyBsb2dnaW5nLiAKKwkgbG9nX2ZkIGlzIGFsd2F5cyAtMSBvbiBBbmRyb2lkIGV4Y2VwdCB3aGVuIGxvZ2dpbmcgdG8gYSBmaWxlLiAqLworICAgICAgaW50IGFsb2dfbHZsOworICAgICAgCisgICAgICBpZiAocHJpb3JpdHkgPD0gTE9HX0VSUikKKwlhbG9nX2x2bCA9IEFORFJPSURfTE9HX0VSUk9SOworICAgICAgZWxzZSBpZiAocHJpb3JpdHkgPT0gTE9HX1dBUk5JTkcpCisJYWxvZ19sdmwgPSBBTkRST0lEX0xPR19XQVJOOworICAgICAgZWxzZSBpZiAocHJpb3JpdHkgPD0gTE9HX0lORk8pCisJYWxvZ19sdmwgPSBBTkRST0lEX0xPR19JTkZPOworICAgICAgZWxzZQorCWFsb2dfbHZsID0gQU5EUk9JRF9MT0dfREVCVUc7CisKKyAgICAgIHZhX3N0YXJ0KGFwLCBmb3JtYXQpOworI2lmZGVmIEVVUkVLQQorICAgICAgX19hbmRyb2lkX2xvZ19idWZfdnByaW50KExPR19JRF9TWVNURU0sIGFsb2dfbHZsLCAiZG5zbWFzcSIsIGZvcm1hdCwgYXApOworI2Vsc2UKKyAgICAgIF9fYW5kcm9pZF9sb2dfdnByaW50KGFsb2dfbHZsLCAiZG5zbWFzcSIsIGZvcm1hdCwgYXApOworI2VuZGlmCisgICAgICB2YV9lbmQoYXApOworI2Vsc2UKKyAgICAgIC8qIGZhbGwtYmFjayB0byBzeXNsb2cgaWYgd2UgZGllIGR1cmluZyBzdGFydHVwIG9yIAorCSBmYWlsIGR1cmluZyBydW5uaW5nIChhbHdheXMgb24gU29sYXJpcykuICovCisgICAgICBzdGF0aWMgaW50IGlzb3BlbiA9IDA7CisKKyAgICAgIGlmICghaXNvcGVuKQorCXsKKwkgIG9wZW5sb2coImRuc21hc3EiLCBMT0dfUElELCBsb2dfZmFjKTsKKwkgIGlzb3BlbiA9IDE7CisJfQorICAgICAgdmFfc3RhcnQoYXAsIGZvcm1hdCk7ICAKKyAgICAgIHZzeXNsb2cocHJpb3JpdHksIGZvcm1hdCwgYXApOworICAgICAgdmFfZW5kKGFwKTsKKyNlbmRpZgorCisgICAgICByZXR1cm47CisgICAgfQorICAKKyAgaWYgKChlbnRyeSA9IGZyZWVfZW50cmllcykpCisgICAgZnJlZV9lbnRyaWVzID0gZW50cnktPm5leHQ7CisgIGVsc2UgaWYgKGVudHJpZXNfYWxsb2NlZCA8IG1heF9sb2dzICYmIChlbnRyeSA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGxvZ19lbnRyeSkpKSkKKyAgICBlbnRyaWVzX2FsbG9jZWQrKzsKKyAgCisgIGlmICghZW50cnkpCisgICAgZW50cmllc19sb3N0Kys7CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBhZGQgdG8gZW5kIG9mIGxpc3QsIGNvbnN1bWVkIGZyb20gdGhlIHN0YXJ0ICovCisgICAgICBlbnRyeS0+bmV4dCA9IE5VTEw7CisgICAgICBpZiAoIWVudHJpZXMpCisJZW50cmllcyA9IGVudHJ5OworICAgICAgZWxzZQorCXsKKwkgIHN0cnVjdCBsb2dfZW50cnkgKnRtcDsKKwkgIGZvciAodG1wID0gZW50cmllczsgdG1wLT5uZXh0OyB0bXAgPSB0bXAtPm5leHQpOworCSAgdG1wLT5uZXh0ID0gZW50cnk7CisJfQorICAgICAgCisgICAgICB0aW1lKCZ0aW1lX25vdyk7CisgICAgICBwID0gZW50cnktPnBheWxvYWQ7CisgICAgICBpZiAoIWxvZ190b19maWxlKQorCXAgKz0gc3ByaW50ZihwLCAiPCVkPiIsIHByaW9yaXR5IHwgbG9nX2ZhYyk7CisKKyAgICAgIC8qIE9taXQgdGltZXN0YW1wIGZvciBkZWZhdWx0IGRhZW1vbnRvb2xzIHNpdHVhdGlvbiAqLworICAgICAgaWYgKCFsb2dfc3RkZXJyIHx8ICFvcHRpb25fYm9vbChPUFRfTk9fRk9SSykpIAorCXAgKz0gc3ByaW50ZihwLCAiJS4xNXMgIiwgY3RpbWUoJnRpbWVfbm93KSArIDQpOworICAgICAgCisgICAgICBwICs9IHNwcmludGYocCwgImRuc21hc3Elc1slZF06ICIsIGZ1bmMsIChpbnQpcGlkKTsKKyAgICAgICAgCisgICAgICBsZW4gPSBwIC0gZW50cnktPnBheWxvYWQ7CisgICAgICB2YV9zdGFydChhcCwgZm9ybWF0KTsgIAorICAgICAgbGVuICs9IHZzbnByaW50ZihwLCBNQVhfTUVTU0FHRSAtIGxlbiwgZm9ybWF0LCBhcCkgKyAxOyAvKiBpbmNsdWRlIHplcm8tdGVybWluYXRvciAqLworICAgICAgdmFfZW5kKGFwKTsKKyAgICAgIGVudHJ5LT5sZW5ndGggPSBsZW4gPiBNQVhfTUVTU0FHRSA/IE1BWF9NRVNTQUdFIDogbGVuOworICAgICAgZW50cnktPm9mZnNldCA9IDA7CisgICAgICBlbnRyeS0+cGlkID0gcGlkOworICAgIH0KKyAgCisgIC8qIGFsbW9zdCBhbHdheXMsIGxvZ2dpbmcgd29uJ3QgYmxvY2ssIHNvIHRyeSBhbmQgd3JpdGUgdGhpcyBub3csCisgICAgIHRvIHNhdmUgY29sbGVjdGluZyB0b28gbWFueSBsb2cgbWVzc2FnZXMgZHVyaW5nIGEgc2VsZWN0IGxvb3AuICovCisgIGxvZ193cml0ZSgpOworICAKKyAgLyogU2luY2Ugd2UncmUgZG9pbmcgdGhpbmdzIGFzeW5jaHJvbm91c2x5LCBhIGNhY2hlLWR1bXAsIGZvciBpbnN0YW5jZSwKKyAgICAgY2FuIG5vdyBnZW5lcmF0ZSBsb2cgbGluZXMgdmVyeSBmYXN0LiBXaXRoIGEgc21hbGwgYnVmZmVyIChkZXNpcmFibGUpLAorICAgICB0aGF0IG1lYW5zIGl0IGNhbiBvdmVyZmxvdyB0aGUgbG9nLWJ1ZmZlciB2ZXJ5IHF1aWNrbHksCisgICAgIHNvIHRoYXQgdGhlIGNhY2hlIGR1bXAgYmVjb21lcyBtYWlubHkgYSBjb3VudCBvZiBob3cgbWFueSBsaW5lcyAKKyAgICAgb3ZlcmZsb3dlZC4gVG8gYXZvaWQgdGhpcywgd2UgZGVsYXkgaGVyZSwgdGhlIGRlbGF5IGlzIGNvbnRyb2xsZWQgCisgICAgIGJ5IHF1ZXVlLW9jY3VwYW5jeSwgYW5kIGdyb3dzIGV4cG9uZW50aWFsbHkuIFRoZSBkZWxheSBpcyBsaW1pdGVkIHRvICgyXjgpbXMuCisgICAgIFRoZSBzY2FsaW5nIHN0dWZmIGVuc3VyZXMgdGhhdCB3aGVuIHRoZSBxdWV1ZSBpcyBiaWdnZXIgdGhhbiA4LCB0aGUgZGVsYXkKKyAgICAgb25seSBvY2N1cnMgZm9yIHRoZSBsYXN0IDggZW50cmllcy4gT25jZSB0aGUgcXVldWUgaXMgZnVsbCwgd2Ugc3RvcCBkZWxheWluZworICAgICB0byBwcmVzZXJ2ZSBwZXJmb3JtYW5jZS4KKyAgKi8KKworICBpZiAoZW50cmllcyAmJiBtYXhfbG9ncyAhPSAwKQorICAgIHsKKyAgICAgIGludCBkOworICAgICAgCisgICAgICBmb3IgKGQgPSAwLGVudHJ5ID0gZW50cmllczsgZW50cnk7IGVudHJ5ID0gZW50cnktPm5leHQsIGQrKyk7CisgICAgICAKKyAgICAgIGlmIChkID09IG1heF9sb2dzKQorCWQgPSAwOworICAgICAgZWxzZSBpZiAobWF4X2xvZ3MgPiA4KQorCWQgLT0gbWF4X2xvZ3MgLSA4OworCisgICAgICBpZiAoZCA+IDApCisJeworCSAgc3RydWN0IHRpbWVzcGVjIHdhaXRlcjsKKwkgIHdhaXRlci50dl9zZWMgPSAwOworCSAgd2FpdGVyLnR2X25zZWMgPSAxMDAwMDAwIDw8IChkIC0gMSk7IC8qIDEgbXMgKi8KKwkgIG5hbm9zbGVlcCgmd2FpdGVyLCBOVUxMKTsKKyAgICAgIAorCSAgLyogSGF2ZSBhbm90aGVyIGdvIG5vdyAqLworCSAgbG9nX3dyaXRlKCk7CisJfQorICAgIH0gCit9CisKK3ZvaWQgc2V0X2xvZ193cml0ZXIodm9pZCkKK3sKKyAgaWYgKGVudHJpZXMgJiYgbG9nX2ZkICE9IC0xICYmIGNvbm5lY3Rpb25fZ29vZCkKKyAgICBwb2xsX2xpc3Rlbihsb2dfZmQsIFBPTExPVVQpOworfQorCit2b2lkIGNoZWNrX2xvZ193cml0ZXIoaW50IGZvcmNlKQoreworICBpZiAobG9nX2ZkICE9IC0xICYmIChmb3JjZSB8fCBwb2xsX2NoZWNrKGxvZ19mZCwgUE9MTE9VVCkpKQorICAgIGxvZ193cml0ZSgpOworfQorCit2b2lkIGZsdXNoX2xvZyh2b2lkKQoreworICAvKiB3cml0ZSB1bnRpbCBxdWV1ZSBlbXB0eSwgYnV0IGRvbid0IGxvb3AgZm9yZXZlciBpZiB0aGVyZSdzCisgICBubyBjb25uZWN0aW9uIHRvIHRoZSBzeXNsb2cgaW4gZXhpc3RlbmNlICovCisgIHdoaWxlIChsb2dfZmQgIT0gLTEpCisgICAgeworICAgICAgc3RydWN0IHRpbWVzcGVjIHdhaXRlcjsKKyAgICAgIGxvZ193cml0ZSgpOworICAgICAgaWYgKCFlbnRyaWVzIHx8ICFjb25uZWN0aW9uX2dvb2QpCisJeworCSAgY2xvc2UobG9nX2ZkKTsJCisJICBicmVhazsKKwl9CisgICAgICB3YWl0ZXIudHZfc2VjID0gMDsKKyAgICAgIHdhaXRlci50dl9uc2VjID0gMTAwMDAwMDsgLyogMSBtcyAqLworICAgICAgbmFub3NsZWVwKCZ3YWl0ZXIsIE5VTEwpOworICAgIH0KK30KKwordm9pZCBkaWUoY2hhciAqbWVzc2FnZSwgY2hhciAqYXJnMSwgaW50IGV4aXRfY29kZSkKK3sKKyAgY2hhciAqZXJybWVzcyA9IHN0cmVycm9yKGVycm5vKTsKKyAgCisgIGlmICghYXJnMSkKKyAgICBhcmcxID0gZXJybWVzczsKKworICBpZiAoIWxvZ19zdGRlcnIpCisgICAgeworICAgICAgZWNob19zdGRlcnIgPSAxOyAvKiBwcmludCBhcyB3ZWxsIGFzIGxvZyB3aGVuIHdlIGRpZS4uLi4gKi8KKyAgICAgIGZwdXRjKCdcbicsIHN0ZGVycik7IC8qIHByZXR0eWZ5ICBzdGFydHVwLXNjcmlwdCBtZXNzYWdlICovCisgICAgfQorICBteV9zeXNsb2coTE9HX0NSSVQsIG1lc3NhZ2UsIGFyZzEsIGVycm1lc3MpOworICBlY2hvX3N0ZGVyciA9IDA7CisgIG15X3N5c2xvZyhMT0dfQ1JJVCwgXygiRkFJTEVEIHRvIHN0YXJ0IHVwIikpOworICBmbHVzaF9sb2coKTsKKyAgCisgIGV4aXQoZXhpdF9jb2RlKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9sb29wLmMgYi9zcmMvbG9vcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ZjlhYWEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbG9vcC5jCkBAIC0wLDAgKzEsMTE3IEBACisvKiBkbnNtYXNxIGlzIENvcHlyaWdodCAoYykgMjAwMC0yMDE3IFNpbW9uIEtlbGxleQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMgZGF0ZWQgMjkgSnVuZSwgMjAwNy4KKyAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2luY2x1ZGUgImRuc21hc3EuaCIKKworI2lmZGVmIEhBVkVfTE9PUAorc3RhdGljIHNzaXplX3QgbG9vcF9tYWtlX3Byb2JlKHUzMiB1aWQpOworCit2b2lkIGxvb3Bfc2VuZF9wcm9iZXMoKQoreworICAgc3RydWN0IHNlcnZlciAqc2VydjsKKyAgIAorICAgaWYgKCFvcHRpb25fYm9vbChPUFRfTE9PUF9ERVRFQ1QpKQorICAgICByZXR1cm47CisKKyAgIC8qIExvb3AgdGhyb3VnaCBhbGwgdXBzdHJlYW0gc2VydmVycyBub3QgZm9yIHBhcnRpY3VsYXIgZG9tYWlucywgYW5kIHNlbmQgYSBxdWVyeSB0byB0aGF0IHNlcnZlciB3aGljaCBpcworICAgICAgaWRlbnRpZmlhYmxlLCB2aWEgdGhlIHVpZC4gSWYgd2Ugc2VlIHRoYXQgcXVlcnkgYmFjayBhZ2FpbiwgdGhlbiB0aGUgc2VydmVyIGlzIGxvb3BpbmcsIGFuZCB3ZSBzaG91bGQgbm90IHVzZSBpdC4gKi8KKyAgIGZvciAoc2VydiA9IGRhZW1vbi0+c2VydmVyczsgc2Vydjsgc2VydiA9IHNlcnYtPm5leHQpCisgICAgIGlmICghKHNlcnYtPmZsYWdzICYgCisJICAgKFNFUlZfTElURVJBTF9BRERSRVNTIHwgU0VSVl9OT19BRERSIHwgU0VSVl9VU0VfUkVTT0xWIHwgU0VSVl9OT19SRUJJTkQgfCBTRVJWX0hBU19ET01BSU4gfCBTRVJWX0ZPUl9OT0RPVFMgfCBTRVJWX0xPT1ApKSkKKyAgICAgICB7CisJIHNzaXplX3QgbGVuID0gbG9vcF9tYWtlX3Byb2JlKHNlcnYtPnVpZCk7CisJIGludCBmZDsKKwkgc3RydWN0IHJhbmRmZCAqcmZkID0gTlVMTDsKKwkgCisJIGlmIChzZXJ2LT5zZmQpCisJICAgZmQgPSBzZXJ2LT5zZmQtPmZkOworCSBlbHNlIAorCSAgIHsKKwkgICAgIGlmICghKHJmZCA9IGFsbG9jYXRlX3JmZChzZXJ2LT5hZGRyLnNhLnNhX2ZhbWlseSkpKQorCSAgICAgICBjb250aW51ZTsKKwkgICAgIGZkID0gcmZkLT5mZDsKKwkgICB9CisKKwkgd2hpbGUgKHJldHJ5X3NlbmQoc2VuZHRvKGZkLCBkYWVtb24tPnBhY2tldCwgbGVuLCAwLCAKKwkJCQkgICZzZXJ2LT5hZGRyLnNhLCBzYV9sZW4oJnNlcnYtPmFkZHIpKSkpOworCSAKKwkgZnJlZV9yZmQocmZkKTsKKyAgICAgICB9Cit9CisgIAorc3RhdGljIHNzaXplX3QgbG9vcF9tYWtlX3Byb2JlKHUzMiB1aWQpCit7CisgIHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIgPSAoc3RydWN0IGRuc19oZWFkZXIgKilkYWVtb24tPnBhY2tldDsKKyAgdW5zaWduZWQgY2hhciAqcCA9ICh1bnNpZ25lZCBjaGFyICopKGhlYWRlcisxKTsKKworICAvKiBwYWNrZXQgYnVmZmVyIG92ZXJ3cml0dGVuICovCisgIGRhZW1vbi0+c3J2X3NhdmUgPSBOVUxMOworICAKKyAgaGVhZGVyLT5pZCA9IHJhbmQxNigpOworICBoZWFkZXItPmFuY291bnQgPSBoZWFkZXItPm5zY291bnQgPSBoZWFkZXItPmFyY291bnQgPSBodG9ucygwKTsKKyAgaGVhZGVyLT5xZGNvdW50ID0gaHRvbnMoMSk7CisgIGhlYWRlci0+aGIzID0gSEIzX1JEOworICBoZWFkZXItPmhiNCA9IDA7CisgIFNFVF9PUENPREUoaGVhZGVyLCBRVUVSWSk7CisKKyAgKnArKyA9IDg7CisgIHNwcmludGYoKGNoYXIgKilwLCAiJS44eCIsIHVpZCk7CisgIHAgKz0gODsKKyAgKnArKyA9IHN0cmxlbihMT09QX1RFU1RfRE9NQUlOKTsKKyAgc3RyY3B5KChjaGFyICopcCwgTE9PUF9URVNUX0RPTUFJTik7IC8qIEFkZCB0ZXJtaW5hdGluZyB6ZXJvICovCisgIHAgKz0gc3RybGVuKExPT1BfVEVTVF9ET01BSU4pICsgMTsKKworICBQVVRTSE9SVChMT09QX1RFU1RfVFlQRSwgcCk7CisgIFBVVFNIT1JUKENfSU4sIHApOworCisgIHJldHVybiBwIC0gKHVuc2lnbmVkIGNoYXIgKiloZWFkZXI7Cit9CisgIAorCitpbnQgZGV0ZWN0X2xvb3AoY2hhciAqcXVlcnksIGludCB0eXBlKQoreworICBpbnQgaTsKKyAgdTMyIHVpZDsKKyAgc3RydWN0IHNlcnZlciAqc2VydjsKKyAgCisgIGlmICghb3B0aW9uX2Jvb2woT1BUX0xPT1BfREVURUNUKSkKKyAgICByZXR1cm4gMDsKKworICBpZiAodHlwZSAhPSBMT09QX1RFU1RfVFlQRSB8fAorICAgICAgc3RybGVuKExPT1BfVEVTVF9ET01BSU4pICsgOSAhPSBzdHJsZW4ocXVlcnkpIHx8CisgICAgICBzdHJzdHIocXVlcnksIExPT1BfVEVTVF9ET01BSU4pICE9IHF1ZXJ5ICsgOSkKKyAgICByZXR1cm4gMDsKKworICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorICAgIGlmICghaXN4ZGlnaXQocXVlcnlbaV0pKQorICAgICAgcmV0dXJuIDA7CisKKyAgdWlkID0gc3RydG9sKHF1ZXJ5LCBOVUxMLCAxNik7CisKKyAgZm9yIChzZXJ2ID0gZGFlbW9uLT5zZXJ2ZXJzOyBzZXJ2OyBzZXJ2ID0gc2Vydi0+bmV4dCkKKyAgICAgaWYgKCEoc2Vydi0+ZmxhZ3MgJiAKKwkgICAoU0VSVl9MSVRFUkFMX0FERFJFU1MgfCBTRVJWX05PX0FERFIgfCBTRVJWX1VTRV9SRVNPTFYgfCBTRVJWX05PX1JFQklORCB8IFNFUlZfSEFTX0RPTUFJTiB8IFNFUlZfRk9SX05PRE9UUyB8IFNFUlZfTE9PUCkpICYmCisJIHVpZCA9PSBzZXJ2LT51aWQpCisgICAgICAgeworCSBzZXJ2LT5mbGFncyB8PSBTRVJWX0xPT1A7CisJIGNoZWNrX3NlcnZlcnMoKTsgLyogbG9nIG5ldyBzdGF0ZSAqLworCSByZXR1cm4gMTsKKyAgICAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL25hbWVzZXIuaCBiL3NyYy9uYW1lc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM3NTE5YwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9uYW1lc2VyLmgKQEAgLTAsMCArMSwzOTggQEAKKy8qCSRPcGVuQlNEOiBuYW1lc2VyLmgsdiAxLjExIDIwMDUvMTIvMjAgMDI6MDY6NTYgbWlsbGVydCBFeHAgJAkqLworCisvKgorICogKytDb3B5cmlnaHQrKyAxOTgzLCAxOTg5LCAxOTkzCisgKiAtCisgKiBDb3B5cmlnaHQgKGMpIDE5ODMsIDE5ODksIDE5OTMKKyAqICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICogLQorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTkzIGJ5IERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uLgorICogCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0CisgKiB0aGUgbmFtZSBvZiBEaWdpdGFsIEVxdWlwbWVudCBDb3Jwb3JhdGlvbiBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgorICogcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBkb2N1bWVudCBvciBzb2Z0d2FyZSB3aXRob3V0CisgKiBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorICogCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgRElHSVRBTCBFUVVJUE1FTlQgQ09SUC4gRElTQ0xBSU1TIEFMTAorICogV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgIElOIE5PIEVWRU5UIFNIQUxMIERJR0lUQUwgRVFVSVBNRU5UCisgKiBDT1JQT1JBVElPTiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IKKyAqIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTCisgKiBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLgorICogLQorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk1IGJ5IEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMsIEluYy4KKyAqCisgKiBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzLCBJbmMuIChoZXJlaW5hZnRlciBjYWxsZWQgSUJNKSBncmFudHMKKyAqIHBlcm1pc3Npb24gdW5kZXIgaXRzIGNvcHlyaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIFNvZnR3YXJlIHdpdGggb3Igd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kCisgKiBhbGwgcGFyYWdyYXBocyBvZiB0aGlzIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgdGhlIG5hbWUgb2YgSUJNCisgKiBub3QgYmUgdXNlZCBpbiBjb25uZWN0aW9uIHdpdGggdGhlIG1hcmtldGluZyBvZiBhbnkgcHJvZHVjdCBpbmNvcnBvcmF0aW5nCisgKiB0aGUgU29mdHdhcmUgb3IgbW9kaWZpY2F0aW9ucyB0aGVyZW9mLCB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCisgKiBwZXJtaXNzaW9uLgorICoKKyAqIFRvIHRoZSBleHRlbnQgaXQgaGFzIGEgcmlnaHQgdG8gZG8gc28sIElCTSBncmFudHMgYW4gaW1tdW5pdHkgZnJvbSBzdWl0CisgKiB1bmRlciBpdHMgcGF0ZW50cywgaWYgYW55LCBmb3IgdGhlIHVzZSwgc2FsZSBvciBtYW51ZmFjdHVyZSBvZiBwcm9kdWN0cyB0bworICogdGhlIGV4dGVudCB0aGF0IHN1Y2ggcHJvZHVjdHMgYXJlIHVzZWQgZm9yIHBlcmZvcm1pbmcgRG9tYWluIE5hbWUgU3lzdGVtCisgKiBkeW5hbWljIHVwZGF0ZXMgaW4gVENQL0lQIG5ldHdvcmtzIGJ5IG1lYW5zIG9mIHRoZSBTb2Z0d2FyZS4gIE5vIGltbXVuaXR5IGlzCisgKiBncmFudGVkIGZvciBhbnkgcHJvZHVjdCBwZXIgc2Ugb3IgZm9yIGFueSBvdGhlciBmdW5jdGlvbiBvZiBhbnkgcHJvZHVjdC4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgQU5EIElCTSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEKKyAqIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIElOIE5PIEVWRU5UIFNIQUxMIElCTSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLAorICogRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgQVJJU0lORworICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4KKyAqIElGIElCTSBJUyBBUFBSSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorICogLS1Db3B5cmlnaHQtLQorICovCisKKy8qCisgKiAgICAgIEAoIyluYW1lc2VyLmgJOC4xIChCZXJrZWxleSkgNi8yLzkzCisgKgkkRnJvbTogbmFtZXNlci5oLHYgOC4xMSAxOTk2LzEwLzA4IDA0OjUxOjAyIHZpeGllIEV4cCAkCisgKi8KKworI2lmbmRlZiBfTkFNRVNFUl9IXworI2RlZmluZSBfTkFNRVNFUl9IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisKKy8qCisgKiByZXZpc2lvbiBpbmZvcm1hdGlvbi4gIHRoaXMgaXMgdGhlIHJlbGVhc2UgZGF0ZSBpbiBZWVlZTU1ERCBmb3JtYXQuCisgKiBpdCBjYW4gY2hhbmdlIGV2ZXJ5IGRheSBzbyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8gd2l0aCBpdCBpcyB1c2UgaXQKKyAqIGluIHByZXByb2Nlc3NvciBjb21tYW5kcyBzdWNoIGFzICIjaWYgKF9fQklORCA+IDE5OTMxMTA0KSIuICBkbyBub3QKKyAqIGNvbXBhcmUgZm9yIGVxdWFsaXR5OyByYXRoZXIsIHVzZSBpdCB0byBkZXRlcm1pbmUgd2hldGhlciB5b3VyIHJlc29sdmVyCisgKiBpcyBuZXcgZW5vdWdoIHRvIGNvbnRhaW4gYSBjZXJ0YWluIGZlYXR1cmUuCisgKi8KKworI2RlZmluZSBfX0JJTkQJCTE5OTYwODAxCS8qIGludGVyZmFjZSB2ZXJzaW9uIHN0YW1wICovCisKKy8qCisgKiBEZWZpbmUgY29uc3RhbnRzIGJhc2VkIG9uIHJmYzg4MworICovCisjZGVmaW5lIFBBQ0tFVFNaCTUxMgkJLyogbWF4aW11bSBwYWNrZXQgc2l6ZSAqLworI2RlZmluZSBNQVhETkFNRQkxMDI1CQkvKiBtYXhpbXVtIHByZXNlbnRhdGlvbiBkb21haW4gbmFtZSAqLworI2RlZmluZSBNQVhDRE5BTUUJMjU1CQkvKiBtYXhpbXVtIGNvbXByZXNzZWQgZG9tYWluIG5hbWUgKi8KKyNkZWZpbmUgTUFYTEFCRUwJNjMJCS8qIG1heGltdW0gbGVuZ3RoIG9mIGRvbWFpbiBsYWJlbCAqLworI2RlZmluZSBIRklYRURTWgkxMgkJLyogIy9ieXRlcyBvZiBmaXhlZCBkYXRhIGluIGhlYWRlciAqLworI2RlZmluZSBRRklYRURTWgk0CQkvKiAjL2J5dGVzIG9mIGZpeGVkIGRhdGEgaW4gcXVlcnkgKi8KKyNkZWZpbmUgUlJGSVhFRFNaCTEwCQkvKiAjL2J5dGVzIG9mIGZpeGVkIGRhdGEgaW4gciByZWNvcmQgKi8KKyNkZWZpbmUgSU5UMzJTWgkJNAkJLyogZm9yIHN5c3RlbXMgd2l0aG91dCAzMi1iaXQgaW50cyAqLworI2RlZmluZSBJTlQxNlNaCQkyCQkvKiBmb3Igc3lzdGVtcyB3aXRob3V0IDE2LWJpdCBpbnRzICovCisjZGVmaW5lIElOQUREUlNaCTQJCS8qIElQdjQgVF9BICovCisjZGVmaW5lIElONkFERFJTWgkxNgkJLyogSVB2NiBUX0FBQUEgKi8KKworLyoKKyAqIEludGVybmV0IG5hbWVzZXJ2ZXIgcG9ydCBudW1iZXIKKyAqLworI2RlZmluZSBOQU1FU0VSVkVSX1BPUlQJNTMKKworLyoKKyAqIEN1cnJlbnRseSBkZWZpbmVkIG9wY29kZXMKKyAqLworI2RlZmluZSBRVUVSWQkJMHgwCQkvKiBzdGFuZGFyZCBxdWVyeSAqLworI2RlZmluZSBJUVVFUlkJCTB4MQkJLyogaW52ZXJzZSBxdWVyeSAqLworI2RlZmluZSBTVEFUVVMJCTB4MgkJLyogbmFtZXNlcnZlciBzdGF0dXMgcXVlcnkgKi8KKy8qI2RlZmluZSB4eHgJCTB4MyovCQkvKiAweDMgcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgTlNfTk9USUZZX09QCTB4NAkJLyogbm90aWZ5IHNlY29uZGFyeSBvZiBTT0EgY2hhbmdlICovCisvKgorICogQ3VycmVudGx5IGRlZmluZWQgcmVzcG9uc2UgY29kZXMKKyAqLworI2RlZmluZSBOT0VSUk9SCQkwCQkvKiBubyBlcnJvciAqLworI2RlZmluZSBGT1JNRVJSCQkxCQkvKiBmb3JtYXQgZXJyb3IgKi8KKyNkZWZpbmUgU0VSVkZBSUwJMgkJLyogc2VydmVyIGZhaWx1cmUgKi8KKyNkZWZpbmUgTlhET01BSU4JMwkJLyogbm9uIGV4aXN0ZW50IGRvbWFpbiAqLworI2RlZmluZSBOT1RJTVAJCTQJCS8qIG5vdCBpbXBsZW1lbnRlZCAqLworI2RlZmluZSBSRUZVU0VECQk1CQkvKiBxdWVyeSByZWZ1c2VkICovCisKKy8qCisgKiBUeXBlIHZhbHVlcyBmb3IgcmVzb3VyY2VzIGFuZCBxdWVyaWVzCisgKi8KKyNkZWZpbmUgVF9BCQkxCQkvKiBob3N0IGFkZHJlc3MgKi8KKyNkZWZpbmUgVF9OUwkJMgkJLyogYXV0aG9yaXRhdGl2ZSBzZXJ2ZXIgKi8KKyNkZWZpbmUgVF9NRAkJMwkJLyogbWFpbCBkZXN0aW5hdGlvbiAqLworI2RlZmluZSBUX01GCQk0CQkvKiBtYWlsIGZvcndhcmRlciAqLworI2RlZmluZSBUX0NOQU1FCQk1CQkvKiBjYW5vbmljYWwgbmFtZSAqLworI2RlZmluZSBUX1NPQQkJNgkJLyogc3RhcnQgb2YgYXV0aG9yaXR5IHpvbmUgKi8KKyNkZWZpbmUgVF9NQgkJNwkJLyogbWFpbGJveCBkb21haW4gbmFtZSAqLworI2RlZmluZSBUX01HCQk4CQkvKiBtYWlsIGdyb3VwIG1lbWJlciAqLworI2RlZmluZSBUX01SCQk5CQkvKiBtYWlsIHJlbmFtZSBuYW1lICovCisjZGVmaW5lIFRfTlVMTAkJMTAJCS8qIG51bGwgcmVzb3VyY2UgcmVjb3JkICovCisjZGVmaW5lIFRfV0tTCQkxMQkJLyogd2VsbCBrbm93biBzZXJ2aWNlICovCisjZGVmaW5lIFRfUFRSCQkxMgkJLyogZG9tYWluIG5hbWUgcG9pbnRlciAqLworI2RlZmluZSBUX0hJTkZPCQkxMwkJLyogaG9zdCBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBUX01JTkZPCQkxNAkJLyogbWFpbGJveCBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBUX01YCQkxNQkJLyogbWFpbCByb3V0aW5nIGluZm9ybWF0aW9uICovCisjZGVmaW5lIFRfVFhUCQkxNgkJLyogdGV4dCBzdHJpbmdzICovCisjZGVmaW5lIFRfUlAJCTE3CQkvKiByZXNwb25zaWJsZSBwZXJzb24gKi8KKyNkZWZpbmUgVF9BRlNEQgkJMTgJCS8qIEFGUyBjZWxsIGRhdGFiYXNlICovCisjZGVmaW5lIFRfWDI1CQkxOQkJLyogWF8yNSBjYWxsaW5nIGFkZHJlc3MgKi8KKyNkZWZpbmUgVF9JU0ROCQkyMAkJLyogSVNETiBjYWxsaW5nIGFkZHJlc3MgKi8KKyNkZWZpbmUgVF9SVAkJMjEJCS8qIHJvdXRlciAqLworI2RlZmluZSBUX05TQVAJCTIyCQkvKiBOU0FQIGFkZHJlc3MgKi8KKyNkZWZpbmUgVF9OU0FQX1BUUgkyMwkJLyogcmV2ZXJzZSBOU0FQIGxvb2t1cCAoZGVwcmVjYXRlZCkgKi8KKyNkZWZpbmUgVF9TSUcJCTI0CQkvKiBzZWN1cml0eSBzaWduYXR1cmUgKi8KKyNkZWZpbmUgVF9LRVkJCTI1CQkvKiBzZWN1cml0eSBrZXkgKi8KKyNkZWZpbmUgVF9QWAkJMjYJCS8qIFguNDAwIG1haWwgbWFwcGluZyAqLworI2RlZmluZSBUX0dQT1MJCTI3CQkvKiBnZW9ncmFwaGljYWwgcG9zaXRpb24gKHdpdGhkcmF3bikgKi8KKyNkZWZpbmUgVF9BQUFBCQkyOAkJLyogSVA2IEFkZHJlc3MgKi8KKyNkZWZpbmUgVF9MT0MJCTI5CQkvKiBMb2NhdGlvbiBJbmZvcm1hdGlvbiAqLworI2RlZmluZSBUX05YVAkJMzAJCS8qIE5leHQgVmFsaWQgTmFtZSBpbiBab25lICovCisjZGVmaW5lIFRfRUlECQkzMQkJLyogRW5kcG9pbnQgaWRlbnRpZmllciAqLworI2RlZmluZSBUX05JTUxPQwkzMgkJLyogTmltcm9kIGxvY2F0b3IgKi8KKyNkZWZpbmUgVF9TUlYJCTMzCQkvKiBTZXJ2ZXIgc2VsZWN0aW9uICovCisjZGVmaW5lIFRfQVRNQQkJMzQJCS8qIEFUTSBBZGRyZXNzICovCisjZGVmaW5lIFRfTkFQVFIJCTM1CQkvKiBOYW1pbmcgQXV0aG9yaXR5IFBvaW5UZVIgKi8KKyNkZWZpbmUgVF9LWAkJMzYJCS8qIEtleSBFeGNoYW5nZXIgKi8KKyNkZWZpbmUgVF9DRVJUCQkzNwkJLyogQ0VSVCAqLworI2RlZmluZSBUX0E2CQkzOAkJLyogQTYgKi8KKyNkZWZpbmUgVF9ETkFNRQkJMzkJCS8qIEROQU1FICovCisjZGVmaW5lIFRfU0lOSwkJNDAJCS8qIFNJTksgKi8KKyNkZWZpbmUgVF9PUFQJCTQxCQkvKiBPUFQgcHNldWRvLVJSLCBSRkMyNjcxICovCisjZGVmaW5lIFRfQVBMCQk0MgkJLyogQVBMICovCisjZGVmaW5lIFRfRFMJCTQzCQkvKiBEZWxlZ2F0aW9uIFNpZ25lciAqLworI2RlZmluZSBUX1NTSEZQCQk0NAkJLyogU1NIIEtleSBGaW5nZXJwcmludCAqLworI2RlZmluZSBUX1JSU0lHCQk0NgkJLyogUlJTSUcgKi8KKyNkZWZpbmUgVF9OU0VDCQk0NwkJLyogTlNFQyAqLworI2RlZmluZSBUX0ROU0tFWQk0OAkJLyogRE5TS0VZICovCisJLyogbm9uIHN0YW5kYXJkICovCisjZGVmaW5lIFRfVUlORk8JCTEwMAkJLyogdXNlciAoZmluZ2VyKSBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBUX1VJRAkJMTAxCQkvKiB1c2VyIElEICovCisjZGVmaW5lIFRfR0lECQkxMDIJCS8qIGdyb3VwIElEICovCisjZGVmaW5lIFRfVU5TUEVDCTEwMwkJLyogVW5zcGVjaWZpZWQgZm9ybWF0IChiaW5hcnkgZGF0YSkgKi8KKwkvKiBRdWVyeSB0eXBlIHZhbHVlcyB3aGljaCBkbyBub3QgYXBwZWFyIGluIHJlc291cmNlIHJlY29yZHMgKi8KKyNkZWZpbmUJVF9US0VZCQkyNDkJCS8qIFRyYW5zYWN0aW9uIEtleSAqLworI2RlZmluZQlUX1RTSUcJCTI1MAkJLyogVHJhbnNhY3Rpb24gU2lnbmF0dXJlICovCisjZGVmaW5lCVRfSVhGUgkJMjUxCQkvKiBpbmNyZW1lbnRhbCB6b25lIHRyYW5zZmVyICovCisjZGVmaW5lIFRfQVhGUgkJMjUyCQkvKiB0cmFuc2ZlciB6b25lIG9mIGF1dGhvcml0eSAqLworI2RlZmluZSBUX01BSUxCCQkyNTMJCS8qIHRyYW5zZmVyIG1haWxib3ggcmVjb3JkcyAqLworI2RlZmluZSBUX01BSUxBCQkyNTQJCS8qIHRyYW5zZmVyIG1haWwgYWdlbnQgcmVjb3JkcyAqLworI2RlZmluZSBUX0FOWQkJMjU1CQkvKiB3aWxkY2FyZCBtYXRjaCAqLworCisvKgorICogVmFsdWVzIGZvciBjbGFzcyBmaWVsZAorICovCisKKyNkZWZpbmUgQ19JTgkJMQkJLyogdGhlIGFycGEgaW50ZXJuZXQgKi8KKyNkZWZpbmUgQ19DSEFPUwkJMwkJLyogZm9yIGNoYW9zIG5ldCAoTUlUKSAqLworI2RlZmluZSBDX0hTCQk0CQkvKiBmb3IgSGVzaW9kIG5hbWUgc2VydmVyIChNSVQpIChYWFgpICovCisJLyogUXVlcnkgY2xhc3MgdmFsdWVzIHdoaWNoIGRvIG5vdCBhcHBlYXIgaW4gcmVzb3VyY2UgcmVjb3JkcyAqLworI2RlZmluZSBDX0FOWQkJMjU1CQkvKiB3aWxkY2FyZCBtYXRjaCAqLworCisvKgorICogRmxhZ3MgZmllbGQgb2YgdGhlIEtFWSBSUiByZGF0YQorICovCisjZGVmaW5lCUtFWUZMQUdfVFlQRU1BU0sJMHhDMDAwCS8qIE1hc2sgZm9yICJ0eXBlIiBiaXRzICovCisjZGVmaW5lCUtFWUZMQUdfVFlQRV9BVVRIX0NPTkYJMHgwMDAwCS8qIEtleSB1c2FibGUgZm9yIGJvdGggKi8KKyNkZWZpbmUJS0VZRkxBR19UWVBFX0NPTkZfT05MWQkweDgwMDAJLyogS2V5IHVzYWJsZSBmb3IgY29uZmlkZW50aWFsaXR5ICovCisjZGVmaW5lCUtFWUZMQUdfVFlQRV9BVVRIX09OTFkJMHg0MDAwCS8qIEtleSB1c2FibGUgZm9yIGF1dGhlbnRpY2F0aW9uICovCisjZGVmaW5lCUtFWUZMQUdfVFlQRV9OT19LRVkJMHhDMDAwCS8qIE5vIGtleSB1c2FibGUgZm9yIGVpdGhlcjsgbm8ga2V5ICovCisvKiBUaGUgdHlwZSBiaXRzIGNhbiBhbHNvIGJlIGludGVycHJldGVkIGluZGVwZW5kZW50bHksIGFzIHNpbmdsZSBiaXRzOiAqLworI2RlZmluZQlLRVlGTEFHX05PX0FVVEgJCTB4ODAwMAkvKiBLZXkgbm90IHVzYWJsZSBmb3IgYXV0aGVudGljYXRpb24gKi8KKyNkZWZpbmUJS0VZRkxBR19OT19DT05GCQkweDQwMDAJLyogS2V5IG5vdCB1c2FibGUgZm9yIGNvbmZpZGVudGlhbGl0eSAqLworCisjZGVmaW5lCUtFWUZMQUdfRVhQRVJJTUVOVEFMCTB4MjAwMAkvKiBTZWN1cml0eSBpcyAqbWFuZGF0b3J5KiBpZiBiaXQ9MCAqLworI2RlZmluZQlLRVlGTEFHX1JFU0VSVkVEMwkweDEwMDAgIC8qIHJlc2VydmVkIC0gbXVzdCBiZSB6ZXJvICovCisjZGVmaW5lCUtFWUZMQUdfUkVTRVJWRUQ0CTB4MDgwMCAgLyogcmVzZXJ2ZWQgLSBtdXN0IGJlIHplcm8gKi8KKyNkZWZpbmUJS0VZRkxBR19VU0VSQUNDT1VOVAkweDA0MDAJLyoga2V5IGlzIGFzc29jLiB3aXRoIGEgdXNlciBhY2N0ICovCisjZGVmaW5lCUtFWUZMQUdfRU5USVRZCQkweDAyMDAJLyoga2V5IGlzIGFzc29jLiB3aXRoIGVudGl0eSBlZyBob3N0ICovCisjZGVmaW5lCUtFWUZMQUdfWk9ORUtFWQkJMHgwMTAwCS8qIGtleSBpcyB6b25lIGtleSBmb3IgdGhlIHpvbmUgbmFtZWQgKi8KKyNkZWZpbmUJS0VZRkxBR19JUFNFQwkJMHgwMDgwICAvKiBrZXkgaXMgZm9yIElQU0VDIHVzZSAoaG9zdCBvciB1c2VyKSovCisjZGVmaW5lCUtFWUZMQUdfRU1BSUwJCTB4MDA0MCAgLyoga2V5IGlzIGZvciBlbWFpbCAoTUlNRSBzZWN1cml0eSkgKi8KKyNkZWZpbmUJS0VZRkxBR19SRVNFUlZFRDEwCTB4MDAyMCAgLyogcmVzZXJ2ZWQgLSBtdXN0IGJlIHplcm8gKi8KKyNkZWZpbmUJS0VZRkxBR19SRVNFUlZFRDExCTB4MDAxMCAgLyogcmVzZXJ2ZWQgLSBtdXN0IGJlIHplcm8gKi8KKyNkZWZpbmUJS0VZRkxBR19TSUdOQVRPUllNQVNLCTB4MDAwRgkvKiBrZXkgY2FuIHNpZ24gRE5TIFJSJ3Mgb2Ygc2FtZSBuYW1lICovCisKKyNkZWZpbmUgIEtFWUZMQUdfUkVTRVJWRURfQklUTUFTSyAoIEtFWUZMQUdfUkVTRVJWRUQzIHwgXAorCQkJCSAgICBLRVlGTEFHX1JFU0VSVkVENCB8IFwKKwkJCQkgICAgS0VZRkxBR19SRVNFUlZFRDEwfCBLRVlGTEFHX1JFU0VSVkVEMTEpIAorCisvKiBUaGUgQWxnb3JpdGhtIGZpZWxkIG9mIHRoZSBLRVkgYW5kIFNJRyBSUidzIGlzIGFuIGludGVnZXIsIHsxLi4yNTR9ICovCisjZGVmaW5lCUFMR09SSVRITV9NRDVSU0EJMQkvKiBNRDUgd2l0aCBSU0EgKi8KKyNkZWZpbmUJQUxHT1JJVEhNX0VYUElSRV9PTkxZCTI1MwkvKiBObyBhbGcsIG5vIHNlY3VyaXR5ICovCisjZGVmaW5lCUFMR09SSVRITV9QUklWQVRFX09JRAkyNTQJLyogS2V5IGJlZ2lucyB3aXRoIE9JRCBpbmRpY2F0aW5nIGFsZyAqLworCisvKiBTaWduYXR1cmVzICovCisJCQkJCS8qIFNpemUgb2YgYSBtb2Qgb3IgZXhwIGluIGJpdHMgKi8KKyNkZWZpbmUJTUlOX01ENVJTQV9LRVlfUEFSVF9CSVRTCSA1MTIKKyNkZWZpbmUJTUFYX01ENVJTQV9LRVlfUEFSVF9CSVRTCTI1NTIKKwkJCQkJLyogVG90YWwgb2YgYmluYXJ5IG1vZCBhbmQgZXhwLCBieXRlcyAqLworI2RlZmluZQlNQVhfTUQ1UlNBX0tFWV9CWVRFUwkJKChNQVhfTUQ1UlNBX0tFWV9QQVJUX0JJVFMrNy84KSoyKzMpCisJCQkJCS8qIE1heCBsZW5ndGggb2YgdGV4dCBzaWcgYmxvY2sgKi8KKyNkZWZpbmUJTUFYX0tFWV9CQVNFNjQJCQkoKChNQVhfTUQ1UlNBX0tFWV9CWVRFUysyKS8zKSo0KQorCisvKgorICogRUROUzAgWi1maWVsZCBleHRlbmRlZCBmbGFncworICovCisjZGVmaW5lIEROU19NRVNTQUdFRVhURkxBR19ETwkweDgwMDBVCisKKy8qCisgKiBTdGF0dXMgcmV0dXJuIGNvZGVzIGZvciBUX1VOU1BFQyBjb252ZXJzaW9uIHJvdXRpbmVzCisgKi8KKyNkZWZpbmUgQ09OVl9TVUNDRVNTCTAKKyNkZWZpbmUgQ09OVl9PVkVSRkxPVwkoLTEpCisjZGVmaW5lIENPTlZfQkFERk1UCSgtMikKKyNkZWZpbmUgQ09OVl9CQURDS1NVTQkoLTMpCisjZGVmaW5lIENPTlZfQkFEQlVGTEVOCSgtNCkKKworLy8gR09PR0xFVFYgLSBfQllURV9PUkRFUiBpcyBkZWZpbmVkIGJ5IEFuZHJvaWQuCisvLyBUeXBpY2FsIEdOVSB0b29sY2hhaW4gZGVmaW5lcyBfX0JZVEVfT1JERVIgYW5kIEJZVEVfT1JERVIsIG5vdCBfQllURV9PUkRFUgorLy8gV2UgY291bGQgZml4IHRoaXMgaW4gdGhlIHRvb2xjaGFpbiwgYnV0IGl0IHNlZW1zIGluYXBwcm9wcmlhdGUuCisjaWYgIWRlZmluZWQoX0JZVEVfT1JERVIpCisjaWYgIWRlZmluZWQoX19CWVRFX09SREVSKQorI2Vycm9yIF9CWVRFX09SREVSIEFORCBfX0JZVEVfT1JERVIgYXJlIHVuZGVmaW5lZAorI2Vsc2UKKyNkZWZpbmUgX0JZVEVfT1JERVIgX19CWVRFX09SREVSCisjZW5kaWYKKyNlbmRpZgorCisvLyBEaXR0byBmb3IgX0JJR19FTkRJQU4gYW5kIF9MSVRUTEVfRU5ESUFOCisjaWYgIWRlZmluZWQoX0JJR19FTkRJQU4pCisjaWYgIWRlZmluZWQoX19CSUdfRU5ESUFOKQorI2Vycm9yIF9CSUdfRU5ESUFOIEFORCBfX0JJR19FTkRJQU4gYXJlIHVuZGVmaW5lZAorI2Vsc2UKKyNkZWZpbmUgX0JJR19FTkRJQU4gX19CSUdfRU5ESUFOCisjZW5kaWYKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX0xJVFRMRV9FTkRJQU4pCisjaWYgIWRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorI2Vycm9yIF9MSVRUTEVfRU5ESUFOIEFORCBfX0xJVFRMRV9FTkRJQU4gYXJlIHVuZGVmaW5lZAorI2Vsc2UKKyNkZWZpbmUgX0xJVFRMRV9FTkRJQU4gX19MSVRUTEVfRU5ESUFOCisjZW5kaWYKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX0JZVEVfT1JERVIpIHx8IFwKKyAgICAoX0JZVEVfT1JERVIgIT0gX0JJR19FTkRJQU4gJiYgX0JZVEVfT1JERVIgIT0gX0xJVFRMRV9FTkRJQU4gJiYgXAorICAgIF9CWVRFX09SREVSICE9IF9QRFBfRU5ESUFOKQorCS8qIHlvdSBtdXN0IGRldGVybWluZSB3aGF0IHRoZSBjb3JyZWN0IGJpdCBvcmRlciBpcyBmb3IKKwkgKiB5b3VyIGNvbXBpbGVyIC0gdGhlIG5leHQgbGluZSBpcyBhbiBpbnRlbnRpb25hbCBlcnJvcgorCSAqIHdoaWNoIHdpbGwgZm9yY2UgeW91ciBjb21waWxlcyB0byBib21iIHVudGlsIHlvdSBmaXgKKwkgKiB0aGUgYWJvdmUgbWFjcm9zLgorCSAqLworI2Vycm9yICJVbmRlZmluZWQgb3IgaW52YWxpZCBfQllURV9PUkRFUiI7CisjZW5kaWYKKworLyoKKyAqIFN0cnVjdHVyZSBmb3IgcXVlcnkgaGVhZGVyLiAgVGhlIG9yZGVyIG9mIHRoZSBmaWVsZHMgaXMgbWFjaGluZS0gYW5kCisgKiBjb21waWxlci1kZXBlbmRlbnQsIGRlcGVuZGluZyBvbiB0aGUgYnl0ZS9iaXQgb3JkZXIgYW5kIHRoZSBsYXlvdXQKKyAqIG9mIGJpdCBmaWVsZHMuICBXZSB1c2UgYml0IGZpZWxkcyBvbmx5IGluIGludCB2YXJpYWJsZXMsIGFzIHRoaXMKKyAqIGlzIGFsbCBBTlNJIHJlcXVpcmVzLiAgVGhpcyByZXF1aXJlcyBhIHNvbWV3aGF0IGNvbmZ1c2luZyByZWFycmFuZ2VtZW50LgorICovCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZAlpZCA6MTY7CQkvKiBxdWVyeSBpZGVudGlmaWNhdGlvbiBudW1iZXIgKi8KKyNpZiBfQllURV9PUkRFUiA9PSBfQklHX0VORElBTgorCQkJLyogZmllbGRzIGluIHRoaXJkIGJ5dGUgKi8KKwl1bnNpZ25lZAlxcjogMTsJCS8qIHJlc3BvbnNlIGZsYWcgKi8KKwl1bnNpZ25lZAlvcGNvZGU6IDQ7CS8qIHB1cnBvc2Ugb2YgbWVzc2FnZSAqLworCXVuc2lnbmVkCWFhOiAxOwkJLyogYXV0aG9yaXRpdmUgYW5zd2VyICovCisJdW5zaWduZWQJdGM6IDE7CQkvKiB0cnVuY2F0ZWQgbWVzc2FnZSAqLworCXVuc2lnbmVkCXJkOiAxOwkJLyogcmVjdXJzaW9uIGRlc2lyZWQgKi8KKwkJCS8qIGZpZWxkcyBpbiBmb3VydGggYnl0ZSAqLworCXVuc2lnbmVkCXJhOiAxOwkJLyogcmVjdXJzaW9uIGF2YWlsYWJsZSAqLworCXVuc2lnbmVkCXVudXNlZCA6MTsJLyogdW51c2VkIGJpdHMgKE1CWiBhcyBvZiA0LjkuM2EzKSAqLworCXVuc2lnbmVkCWFkOiAxOwkJLyogYXV0aGVudGljIGRhdGEgZnJvbSBuYW1lZCAqLworCXVuc2lnbmVkCWNkOiAxOwkJLyogY2hlY2tpbmcgZGlzYWJsZWQgYnkgcmVzb2x2ZXIgKi8KKwl1bnNpZ25lZAlyY29kZSA6NDsJLyogcmVzcG9uc2UgY29kZSAqLworI2VuZGlmCisjaWYgX0JZVEVfT1JERVIgPT0gX0xJVFRMRV9FTkRJQU4gfHwgX0JZVEVfT1JERVIgPT0gX1BEUF9FTkRJQU4KKwkJCS8qIGZpZWxkcyBpbiB0aGlyZCBieXRlICovCisJdW5zaWduZWQJcmQgOjE7CQkvKiByZWN1cnNpb24gZGVzaXJlZCAqLworCXVuc2lnbmVkCXRjIDoxOwkJLyogdHJ1bmNhdGVkIG1lc3NhZ2UgKi8KKwl1bnNpZ25lZAlhYSA6MTsJCS8qIGF1dGhvcml0aXZlIGFuc3dlciAqLworCXVuc2lnbmVkCW9wY29kZSA6NDsJLyogcHVycG9zZSBvZiBtZXNzYWdlICovCisJdW5zaWduZWQJcXIgOjE7CQkvKiByZXNwb25zZSBmbGFnICovCisJCQkvKiBmaWVsZHMgaW4gZm91cnRoIGJ5dGUgKi8KKwl1bnNpZ25lZAlyY29kZSA6NDsJLyogcmVzcG9uc2UgY29kZSAqLworCXVuc2lnbmVkCWNkOiAxOwkJLyogY2hlY2tpbmcgZGlzYWJsZWQgYnkgcmVzb2x2ZXIgKi8KKwl1bnNpZ25lZAlhZDogMTsJCS8qIGF1dGhlbnRpYyBkYXRhIGZyb20gbmFtZWQgKi8KKwl1bnNpZ25lZAl1bnVzZWQgOjE7CS8qIHVudXNlZCBiaXRzIChNQlogYXMgb2YgNC45LjNhMykgKi8KKwl1bnNpZ25lZAlyYSA6MTsJCS8qIHJlY3Vyc2lvbiBhdmFpbGFibGUgKi8KKyNlbmRpZgorCQkJLyogcmVtYWluaW5nIGJ5dGVzICovCisJdW5zaWduZWQJcWRjb3VudCA6MTY7CS8qIG51bWJlciBvZiBxdWVzdGlvbiBlbnRyaWVzICovCisJdW5zaWduZWQJYW5jb3VudCA6MTY7CS8qIG51bWJlciBvZiBhbnN3ZXIgZW50cmllcyAqLworCXVuc2lnbmVkCW5zY291bnQgOjE2OwkvKiBudW1iZXIgb2YgYXV0aG9yaXR5IGVudHJpZXMgKi8KKwl1bnNpZ25lZAlhcmNvdW50IDoxNjsJLyogbnVtYmVyIG9mIHJlc291cmNlIGVudHJpZXMgKi8KK30gSEVBREVSOworCisvKgorICogRGVmaW5lcyBmb3IgaGFuZGxpbmcgY29tcHJlc3NlZCBkb21haW4gbmFtZXMKKyAqLworI2RlZmluZSBJTkRJUl9NQVNLCTB4YzAKKworZXh0ZXJuCXVfaW50MTZfdAlfZ2V0c2hvcnQoY29uc3QgdW5zaWduZWQgY2hhciAqKTsKK2V4dGVybgl1X2ludDMyX3QJX2dldGxvbmcoY29uc3QgdW5zaWduZWQgY2hhciAqKTsKKworLyoKKyAqIElubGluZSB2ZXJzaW9ucyBvZiBnZXQvcHV0IHNob3J0L2xvbmcuICBQb2ludGVyIGlzIGFkdmFuY2VkLgorICoKKyAqIFRoZXNlIG1hY3JvcyBkZW1vbnN0cmF0ZSB0aGUgcHJvcGVydHkgb2YgQyB3aGVyZWJ5IGl0IGNhbiBiZQorICogcG9ydGFibGUgb3IgaXQgY2FuIGJlIGVsZWdhbnQgYnV0IHJhcmVseSBib3RoLgorICovCisjZGVmaW5lIEdFVFNIT1JUKHMsIGNwKSB7IFwKKwl1bnNpZ25lZCBjaGFyICp0X2NwID0gKHVuc2lnbmVkIGNoYXIgKikoY3ApOyBcCisJKHMpID0gKCh1X2ludDE2X3QpdF9jcFswXSA8PCA4KSBcCisJICAgIHwgKCh1X2ludDE2X3QpdF9jcFsxXSkgXAorCSAgICA7IFwKKwkoY3ApICs9IElOVDE2U1o7IFwKK30KKworI2RlZmluZSBHRVRMT05HKGwsIGNwKSB7IFwKKwl1bnNpZ25lZCBjaGFyICp0X2NwID0gKHVuc2lnbmVkIGNoYXIgKikoY3ApOyBcCisJKGwpID0gKCh1X2ludDMyX3QpdF9jcFswXSA8PCAyNCkgXAorCSAgICB8ICgodV9pbnQzMl90KXRfY3BbMV0gPDwgMTYpIFwKKwkgICAgfCAoKHVfaW50MzJfdCl0X2NwWzJdIDw8IDgpIFwKKwkgICAgfCAoKHVfaW50MzJfdCl0X2NwWzNdKSBcCisJICAgIDsgXAorCShjcCkgKz0gSU5UMzJTWjsgXAorfQorCisjZGVmaW5lIFBVVFNIT1JUKHMsIGNwKSB7IFwKKwl1X2ludDE2X3QgdF9zID0gKHVfaW50MTZfdCkocyk7IFwKKwl1bnNpZ25lZCBjaGFyICp0X2NwID0gKHVuc2lnbmVkIGNoYXIgKikoY3ApOyBcCisJKnRfY3ArKyA9IHRfcyA+PiA4OyBcCisJKnRfY3AgICA9IHRfczsgXAorCShjcCkgKz0gSU5UMTZTWjsgXAorfQorCisjZGVmaW5lIFBVVExPTkcobCwgY3ApIHsgXAorCXVfaW50MzJfdCB0X2wgPSAodV9pbnQzMl90KShsKTsgXAorCXVuc2lnbmVkIGNoYXIgKnRfY3AgPSAodW5zaWduZWQgY2hhciAqKShjcCk7IFwKKwkqdF9jcCsrID0gdF9sID4+IDI0OyBcCisJKnRfY3ArKyA9IHRfbCA+PiAxNjsgXAorCSp0X2NwKysgPSB0X2wgPj4gODsgXAorCSp0X2NwICAgPSB0X2w7IFwKKwkoY3ApICs9IElOVDMyU1o7IFwKK30KKworI2VuZGlmIC8qICFfTkFNRVNFUl9IXyAqLwpkaWZmIC0tZ2l0IGEvc3JjL25ldGxpbmsuYyBiL3NyYy9uZXRsaW5rLmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGQ0Y2E1NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9uZXRsaW5rLmMKQEAgLTAsMCArMSwzNzQgQEAKKy8qIGRuc21hc3EgaXMgQ29weXJpZ2h0IChjKSAyMDAwLTIwMTcgU2ltb24gS2VsbGV5CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIGRhdGVkIEp1bmUsIDE5OTEsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIHZlcnNpb24gMyBkYXRlZCAyOSBKdW5lLCAyMDA3LgorIAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisqLworCisjaW5jbHVkZSAiZG5zbWFzcS5oIgorCisjaWZkZWYgSEFWRV9MSU5VWF9ORVRXT1JLCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KKyNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KKworLyogbGludXggMi42LjE5IGJ1Z2dlcnMgdXAgdGhlIGhlYWRlcnMsIHBhdGNoIGl0IHVwIGhlcmUuICovIAorI2lmbmRlZiBJRkFfUlRBCisjICBkZWZpbmUgSUZBX1JUQShyKSAgXAorICAgICAgICgoc3RydWN0IHJ0YXR0ciopKCgoY2hhciopKHIpKSArIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgaWZhZGRybXNnKSkpKQorCisjICBpbmNsdWRlIDxsaW51eC9pZl9hZGRyLmg+CisjZW5kaWYKKworI2lmbmRlZiBOREFfUlRBCisjICBkZWZpbmUgTkRBX1JUQShyKSAoKHN0cnVjdCBydGF0dHIqKSgoKGNoYXIqKShyKSkgKyBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IG5kbXNnKSkpKSAKKyNlbmRpZiAKKworCitzdGF0aWMgc3RydWN0IGlvdmVjIGlvdjsKK3N0YXRpYyB1MzIgbmV0bGlua19waWQ7CisKK3N0YXRpYyB2b2lkIG5sX2FzeW5jKHN0cnVjdCBubG1zZ2hkciAqaCk7CisKK3ZvaWQgbmV0bGlua19pbml0KHZvaWQpCit7CisgIHN0cnVjdCBzb2NrYWRkcl9ubCBhZGRyOworICBzb2NrbGVuX3Qgc2xlbiA9IHNpemVvZihhZGRyKTsKKworICBhZGRyLm5sX2ZhbWlseSA9IEFGX05FVExJTks7CisgIGFkZHIubmxfcGFkID0gMDsKKyAgYWRkci5ubF9waWQgPSAwOyAvKiBhdXRvYmluZCAqLworICBhZGRyLm5sX2dyb3VwcyA9IFJUTUdSUF9JUFY0X1JPVVRFOworICBpZiAob3B0aW9uX2Jvb2woT1BUX0NMRVZFUkJJTkQpKQorICAgIGFkZHIubmxfZ3JvdXBzIHw9IFJUTUdSUF9JUFY0X0lGQUREUjsgIAorI2lmZGVmIEhBVkVfSVBWNgorICBhZGRyLm5sX2dyb3VwcyB8PSBSVE1HUlBfSVBWNl9ST1VURTsKKyAgaWYgKG9wdGlvbl9ib29sKE9QVF9DTEVWRVJCSU5EKSkKKyAgICBhZGRyLm5sX2dyb3VwcyB8PSBSVE1HUlBfSVBWNl9JRkFERFI7CisjZW5kaWYKKyNpZmRlZiBIQVZFX0RIQ1A2CisgIGlmIChkYWVtb24tPmRvaW5nX3JhIHx8IGRhZW1vbi0+ZG9pbmdfZGhjcDYpCisgICAgYWRkci5ubF9ncm91cHMgfD0gUlRNR1JQX0lQVjZfSUZBRERSOworI2VuZGlmCisgIAorICAvKiBNYXkgbm90IGJlIGFibGUgdG8gaGF2ZSBwZXJtaXNzaW9uIHRvIHNldCBtdWx0aWNhc3QgZ3JvdXBzIGRvbid0IGRpZSBpbiB0aGF0IGNhc2UgKi8KKyAgaWYgKChkYWVtb24tPm5ldGxpbmtmZCA9IHNvY2tldChBRl9ORVRMSU5LLCBTT0NLX1JBVywgTkVUTElOS19ST1VURSkpICE9IC0xKQorICAgIHsKKyAgICAgIGlmIChiaW5kKGRhZW1vbi0+bmV0bGlua2ZkLCAoc3RydWN0IHNvY2thZGRyICopJmFkZHIsIHNpemVvZihhZGRyKSkgPT0gLTEpCisJeworCSAgYWRkci5ubF9ncm91cHMgPSAwOworCSAgaWYgKGVycm5vICE9IEVQRVJNIHx8IGJpbmQoZGFlbW9uLT5uZXRsaW5rZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkciwgc2l6ZW9mKGFkZHIpKSA9PSAtMSkKKwkgICAgZGFlbW9uLT5uZXRsaW5rZmQgPSAtMTsKKwl9CisgICAgfQorICAKKyAgaWYgKGRhZW1vbi0+bmV0bGlua2ZkID09IC0xIHx8IAorICAgICAgZ2V0c29ja25hbWUoZGFlbW9uLT5uZXRsaW5rZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkciwgJnNsZW4pID09IC0xKQorICAgIGRpZShfKCJjYW5ub3QgY3JlYXRlIG5ldGxpbmsgc29ja2V0OiAlcyIpLCBOVUxMLCBFQ19NSVNDKTsKKyAgIAorICAvKiBzYXZlIHBpZCBhc3NpZ25lZCBieSBiaW5kKCkgYW5kIHJldHJpZXZlZCBieSBnZXRzb2NrbmFtZSgpICovIAorICBuZXRsaW5rX3BpZCA9IGFkZHIubmxfcGlkOworICAKKyAgaW92Lmlvdl9sZW4gPSAxMDA7CisgIGlvdi5pb3ZfYmFzZSA9IHNhZmVfbWFsbG9jKGlvdi5pb3ZfbGVuKTsKK30KKworc3RhdGljIHNzaXplX3QgbmV0bGlua19yZWN2KHZvaWQpCit7CisgIHN0cnVjdCBtc2doZHIgbXNnOworICBzdHJ1Y3Qgc29ja2FkZHJfbmwgbmxhZGRyOworICBzc2l6ZV90IHJjOworCisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIG1zZy5tc2dfY29udHJvbCA9IE5VTEw7CisgICAgICBtc2cubXNnX2NvbnRyb2xsZW4gPSAwOworICAgICAgbXNnLm1zZ19uYW1lID0gJm5sYWRkcjsKKyAgICAgIG1zZy5tc2dfbmFtZWxlbiA9IHNpemVvZihubGFkZHIpOworICAgICAgbXNnLm1zZ19pb3YgPSAmaW92OworICAgICAgbXNnLm1zZ19pb3ZsZW4gPSAxOworICAgICAgbXNnLm1zZ19mbGFncyA9IDA7CisgICAgICAKKyAgICAgIHdoaWxlICgocmMgPSByZWN2bXNnKGRhZW1vbi0+bmV0bGlua2ZkLCAmbXNnLCBNU0dfUEVFSyB8IE1TR19UUlVOQykpID09IC0xICYmIGVycm5vID09IEVJTlRSKTsKKyAgICAgIAorICAgICAgLyogbWFrZSBidWZmZXIgYmlnIGVub3VnaCAqLworICAgICAgaWYgKHJjICE9IC0xICYmIChtc2cubXNnX2ZsYWdzICYgTVNHX1RSVU5DKSkKKwl7CisJICAvKiBWZXJ5IG5ldyBMaW51eCBrZXJuZWxzIHJldHVybiB0aGUgYWN0dWFsIHNpemUgbmVlZGVkLCBvbGRlciBvbmVzIGFsd2F5cyByZXR1cm4gdHJ1bmNhdGVkIHNpemUgKi8KKwkgIGlmICgoc2l6ZV90KXJjID09IGlvdi5pb3ZfbGVuKQorCSAgICB7CisJICAgICAgaWYgKGV4cGFuZF9idWYoJmlvdiwgcmMgKyAxMDApKQorCQljb250aW51ZTsKKwkgICAgfQorCSAgZWxzZQorCSAgICBleHBhbmRfYnVmKCZpb3YsIHJjKTsKKwl9CisKKyAgICAgIC8qIHJlYWQgaXQgZm9yIHJlYWwgKi8KKyAgICAgIG1zZy5tc2dfZmxhZ3MgPSAwOworICAgICAgd2hpbGUgKChyYyA9IHJlY3Ztc2coZGFlbW9uLT5uZXRsaW5rZmQsICZtc2csIDApKSA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUik7CisgICAgICAKKyAgICAgIC8qIE1ha2Ugc3VyZSB0aGlzIGlzIGZyb20gdGhlIGtlcm5lbCAqLworICAgICAgaWYgKHJjID09IC0xIHx8IG5sYWRkci5ubF9waWQgPT0gMCkKKwlicmVhazsKKyAgICB9CisgICAgICAKKyAgLyogZGlzY2FyZCBzdHVmZiB3aGljaCBpcyB0cnVuY2F0ZWQgYXQgdGhpcyBwb2ludCAoZXhwYW5kX2J1ZigpIG1heSBmYWlsKSAqLworICBpZiAobXNnLm1zZ19mbGFncyAmIE1TR19UUlVOQykKKyAgICB7CisgICAgICByYyA9IC0xOworICAgICAgZXJybm8gPSBFTk9NRU07CisgICAgfQorICAKKyAgcmV0dXJuIHJjOworfQorICAKKworLyogZmFtaWx5ID0gQUZfVU5TUEVDIGZpbmRzIEFSUCB0YWJsZSBlbnRyaWVzLgorICAgZmFtaWx5ID0gQUZfTE9DQUwgZmluZHMgTUFDIGFkZHJlc3Nlcy4gKi8KK2ludCBpZmFjZV9lbnVtZXJhdGUoaW50IGZhbWlseSwgdm9pZCAqcGFybSwgaW50ICgqY2FsbGJhY2spKCkpCit7CisgIHN0cnVjdCBzb2NrYWRkcl9ubCBhZGRyOworICBzdHJ1Y3Qgbmxtc2doZHIgKmg7CisgIHNzaXplX3QgbGVuOworICBzdGF0aWMgdW5zaWduZWQgaW50IHNlcSA9IDA7CisgIGludCBjYWxsYmFja19vayA9IDE7CisKKyAgc3RydWN0IHsKKyAgICBzdHJ1Y3Qgbmxtc2doZHIgbmxoOworICAgIHN0cnVjdCBydGdlbm1zZyBnOyAKKyAgfSByZXE7CisKKyAgYWRkci5ubF9mYW1pbHkgPSBBRl9ORVRMSU5LOworICBhZGRyLm5sX3BhZCA9IDA7CisgIGFkZHIubmxfZ3JvdXBzID0gMDsKKyAgYWRkci5ubF9waWQgPSAwOyAvKiBhZGRyZXNzIHRvIGtlcm5lbCAqLworIAorIGFnYWluOiAKKyAgaWYgKGZhbWlseSA9PSBBRl9VTlNQRUMpCisgICAgcmVxLm5saC5ubG1zZ190eXBlID0gUlRNX0dFVE5FSUdIOworICBlbHNlIGlmIChmYW1pbHkgPT0gQUZfTE9DQUwpCisgICAgcmVxLm5saC5ubG1zZ190eXBlID0gUlRNX0dFVExJTks7CisgIGVsc2UKKyAgICByZXEubmxoLm5sbXNnX3R5cGUgPSBSVE1fR0VUQUREUjsKKworICByZXEubmxoLm5sbXNnX2xlbiA9IHNpemVvZihyZXEpOworICByZXEubmxoLm5sbXNnX2ZsYWdzID0gTkxNX0ZfUk9PVCB8IE5MTV9GX01BVENIIHwgTkxNX0ZfUkVRVUVTVCB8IE5MTV9GX0FDSzsgCisgIHJlcS5ubGgubmxtc2dfcGlkID0gMDsKKyAgcmVxLm5saC5ubG1zZ19zZXEgPSArK3NlcTsKKyAgcmVxLmcucnRnZW5fZmFtaWx5ID0gZmFtaWx5OyAKKworICAvKiBEb24ndCBibG9jayBpbiByZWN2ZnJvbSBpZiBzZW5kIGZhaWxzICovCisgIHdoaWxlKHJldHJ5X3NlbmQoc2VuZHRvKGRhZW1vbi0+bmV0bGlua2ZkLCAodm9pZCAqKSZyZXEsIHNpemVvZihyZXEpLCAwLCAKKwkJCSAgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLCBzaXplb2YoYWRkcikpKSk7CisKKyAgaWYgKGVycm5vICE9IDApCisgICAgcmV0dXJuIDA7CisgICAgCisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIGlmICgobGVuID0gbmV0bGlua19yZWN2KCkpID09IC0xKQorCXsKKwkgIGlmIChlcnJubyA9PSBFTk9CVUZTKQorCSAgICB7CisJICAgICAgc2xlZXAoMSk7CisJICAgICAgZ290byBhZ2FpbjsKKwkgICAgfQorCSAgcmV0dXJuIDA7CisJfQorCisgICAgICBmb3IgKGggPSAoc3RydWN0IG5sbXNnaGRyICopaW92Lmlvdl9iYXNlOyBOTE1TR19PSyhoLCAoc2l6ZV90KWxlbik7IGggPSBOTE1TR19ORVhUKGgsIGxlbikpCisJaWYgKGgtPm5sbXNnX3BpZCAhPSBuZXRsaW5rX3BpZCB8fCBoLT5ubG1zZ190eXBlID09IE5MTVNHX0VSUk9SKQorCSAgeworCSAgICAvKiBNYXkgYmUgbXVsdGljYXN0IGFycml2aW5nIGFzeW5jICovCisJICAgIG5sX2FzeW5jKGgpOworCSAgfQorCWVsc2UgaWYgKGgtPm5sbXNnX3NlcSAhPSBzZXEpCisJICB7CisJICAgIC8qIE1heSBiZSBwYXJ0IG9mIGluY29tcGxldGUgcmVzcG9uc2UgdG8gcHJldmlvdXMgcmVxdWVzdCBhZnRlcgorCSAgICAgICBFTk9CVUZTLiBEcm9wIGl0LiAqLworCSAgICBjb250aW51ZTsKKwkgIH0KKwllbHNlIGlmIChoLT5ubG1zZ190eXBlID09IE5MTVNHX0RPTkUpCisJICByZXR1cm4gY2FsbGJhY2tfb2s7CisJZWxzZSBpZiAoaC0+bmxtc2dfdHlwZSA9PSBSVE1fTkVXQUREUiAmJiBmYW1pbHkgIT0gQUZfVU5TUEVDICYmIGZhbWlseSAhPSBBRl9MT0NBTCkKKwkgIHsKKwkgICAgc3RydWN0IGlmYWRkcm1zZyAqaWZhID0gTkxNU0dfREFUQShoKTsgIAorCSAgICBzdHJ1Y3QgcnRhdHRyICpydGEgPSBJRkFfUlRBKGlmYSk7CisJICAgIHVuc2lnbmVkIGludCBsZW4xID0gaC0+bmxtc2dfbGVuIC0gTkxNU0dfTEVOR1RIKHNpemVvZigqaWZhKSk7CisJICAgIAorCSAgICBpZiAoaWZhLT5pZmFfZmFtaWx5ID09IGZhbWlseSkKKwkgICAgICB7CisJCWlmIChpZmEtPmlmYV9mYW1pbHkgPT0gQUZfSU5FVCkKKwkJICB7CisJCSAgICBzdHJ1Y3QgaW5fYWRkciBuZXRtYXNrLCBhZGRyLCBicm9hZGNhc3Q7CisJCSAgICBjaGFyICpsYWJlbCA9IE5VTEw7CisKKwkJICAgIG5ldG1hc2suc19hZGRyID0gaHRvbmwofihpbl9hZGRyX3QpMCA8PCAoMzIgLSBpZmEtPmlmYV9wcmVmaXhsZW4pKTsKKworCQkgICAgYWRkci5zX2FkZHIgPSAwOworCQkgICAgYnJvYWRjYXN0LnNfYWRkciA9IDA7CisJCSAgICAKKwkJICAgIHdoaWxlIChSVEFfT0socnRhLCBsZW4xKSkKKwkJICAgICAgeworCQkJaWYgKHJ0YS0+cnRhX3R5cGUgPT0gSUZBX0xPQ0FMKQorCQkJICBhZGRyID0gKigoc3RydWN0IGluX2FkZHIgKikocnRhKzEpKTsKKwkJCWVsc2UgaWYgKHJ0YS0+cnRhX3R5cGUgPT0gSUZBX0JST0FEQ0FTVCkKKwkJCSAgYnJvYWRjYXN0ID0gKigoc3RydWN0IGluX2FkZHIgKikocnRhKzEpKTsKKwkJCWVsc2UgaWYgKHJ0YS0+cnRhX3R5cGUgPT0gSUZBX0xBQkVMKQorCQkJICBsYWJlbCA9IFJUQV9EQVRBKHJ0YSk7CisJCQkKKwkJCXJ0YSA9IFJUQV9ORVhUKHJ0YSwgbGVuMSk7CisJCSAgICAgIH0KKwkJICAgIAorCQkgICAgaWYgKGFkZHIuc19hZGRyICYmIGNhbGxiYWNrX29rKQorCQkgICAgICBpZiAoISgoKmNhbGxiYWNrKShhZGRyLCBpZmEtPmlmYV9pbmRleCwgbGFiZWwsICBuZXRtYXNrLCBicm9hZGNhc3QsIHBhcm0pKSkKKwkJCWNhbGxiYWNrX29rID0gMDsKKwkJICB9CisjaWZkZWYgSEFWRV9JUFY2CisJCWVsc2UgaWYgKGlmYS0+aWZhX2ZhbWlseSA9PSBBRl9JTkVUNikKKwkJICB7CisJCSAgICBzdHJ1Y3QgaW42X2FkZHIgKmFkZHJwID0gTlVMTDsKKwkJICAgIHUzMiB2YWxpZCA9IDAsIHByZWZlcnJlZCA9IDA7CisJCSAgICBpbnQgZmxhZ3MgPSAwOworCQkgICAgCisJCSAgICB3aGlsZSAoUlRBX09LKHJ0YSwgbGVuMSkpCisJCSAgICAgIHsKKwkJCWlmIChydGEtPnJ0YV90eXBlID09IElGQV9BRERSRVNTKQorCQkJICBhZGRycCA9ICgoc3RydWN0IGluNl9hZGRyICopKHJ0YSsxKSk7IAorCQkJZWxzZSBpZiAocnRhLT5ydGFfdHlwZSA9PSBJRkFfQ0FDSEVJTkZPKQorCQkJICB7CisJCQkgICAgc3RydWN0IGlmYV9jYWNoZWluZm8gKmlmYyA9IChzdHJ1Y3QgaWZhX2NhY2hlaW5mbyAqKShydGErMSk7CisJCQkgICAgcHJlZmVycmVkID0gaWZjLT5pZmFfcHJlZmVyZWQ7CisJCQkgICAgdmFsaWQgPSBpZmMtPmlmYV92YWxpZDsKKwkJCSAgfQorCQkJcnRhID0gUlRBX05FWFQocnRhLCBsZW4xKTsKKwkJICAgICAgfQorCQkgICAgCisJCSAgICBpZiAoaWZhLT5pZmFfZmxhZ3MgJiBJRkFfRl9URU5UQVRJVkUpCisJCSAgICAgIGZsYWdzIHw9IElGQUNFX1RFTlRBVElWRTsKKwkJICAgIAorCQkgICAgaWYgKGlmYS0+aWZhX2ZsYWdzICYgSUZBX0ZfREVQUkVDQVRFRCkKKwkJICAgICAgZmxhZ3MgfD0gSUZBQ0VfREVQUkVDQVRFRDsKKwkJICAgIAorCQkgICAgaWYgKCEoaWZhLT5pZmFfZmxhZ3MgJiBJRkFfRl9URU1QT1JBUlkpKQorCQkgICAgICBmbGFncyB8PSBJRkFDRV9QRVJNQU5FTlQ7CisgICAgCQkgICAgCisJCSAgICBpZiAoYWRkcnAgJiYgY2FsbGJhY2tfb2spCisJCSAgICAgIGlmICghKCgqY2FsbGJhY2spKGFkZHJwLCAoaW50KShpZmEtPmlmYV9wcmVmaXhsZW4pLCAoaW50KShpZmEtPmlmYV9zY29wZSksIAorCQkJCQkoaW50KShpZmEtPmlmYV9pbmRleCksIGZsYWdzLCAKKwkJCQkJKGludCkgcHJlZmVycmVkLCAoaW50KXZhbGlkLCBwYXJtKSkpCisJCQljYWxsYmFja19vayA9IDA7CisJCSAgfQorI2VuZGlmCisJICAgICAgfQorCSAgfQorCWVsc2UgaWYgKGgtPm5sbXNnX3R5cGUgPT0gUlRNX05FV05FSUdIICYmIGZhbWlseSA9PSBBRl9VTlNQRUMpCisJICB7CisJICAgIHN0cnVjdCBuZG1zZyAqbmVpZ2ggPSBOTE1TR19EQVRBKGgpOyAgCisJICAgIHN0cnVjdCBydGF0dHIgKnJ0YSA9IE5EQV9SVEEobmVpZ2gpOworCSAgICB1bnNpZ25lZCBpbnQgbGVuMSA9IGgtPm5sbXNnX2xlbiAtIE5MTVNHX0xFTkdUSChzaXplb2YoKm5laWdoKSk7CisJICAgIHNpemVfdCBtYWNsZW4gPSAwOworCSAgICBjaGFyICppbmFkZHIgPSBOVUxMLCAqbWFjID0gTlVMTDsKKwkgICAgCisJICAgIHdoaWxlIChSVEFfT0socnRhLCBsZW4xKSkKKwkgICAgICB7CisJCWlmIChydGEtPnJ0YV90eXBlID09IE5EQV9EU1QpCisJCSAgaW5hZGRyID0gKGNoYXIgKikocnRhKzEpOworCQllbHNlIGlmIChydGEtPnJ0YV90eXBlID09IE5EQV9MTEFERFIpCisJCSAgeworCQkgICAgbWFjbGVuID0gcnRhLT5ydGFfbGVuIC0gc2l6ZW9mKHN0cnVjdCBydGF0dHIpOworCQkgICAgbWFjID0gKGNoYXIgKikocnRhKzEpOworCQkgIH0KKwkJCisJCXJ0YSA9IFJUQV9ORVhUKHJ0YSwgbGVuMSk7CisJICAgICAgfQorCisJICAgIGlmICghKG5laWdoLT5uZG1fc3RhdGUgJiAoTlVEX05PQVJQIHwgTlVEX0lOQ09NUExFVEUgfCBOVURfRkFJTEVEKSkgJiYKKwkJaW5hZGRyICYmIG1hYyAmJiBjYWxsYmFja19vaykKKwkgICAgICBpZiAoISgoKmNhbGxiYWNrKShuZWlnaC0+bmRtX2ZhbWlseSwgaW5hZGRyLCBtYWMsIG1hY2xlbiwgcGFybSkpKQorCQljYWxsYmFja19vayA9IDA7CisJICB9CisjaWZkZWYgSEFWRV9ESENQNgorCWVsc2UgaWYgKGgtPm5sbXNnX3R5cGUgPT0gUlRNX05FV0xJTksgJiYgZmFtaWx5ID09IEFGX0xPQ0FMKQorCSAgeworCSAgICBzdHJ1Y3QgaWZpbmZvbXNnICpsaW5rID0gIE5MTVNHX0RBVEEoaCk7CisJICAgIHN0cnVjdCBydGF0dHIgKnJ0YSA9IElGTEFfUlRBKGxpbmspOworCSAgICB1bnNpZ25lZCBpbnQgbGVuMSA9IGgtPm5sbXNnX2xlbiAtIE5MTVNHX0xFTkdUSChzaXplb2YoKmxpbmspKTsKKwkgICAgY2hhciAqbWFjID0gTlVMTDsKKwkgICAgc2l6ZV90IG1hY2xlbiA9IDA7CisKKwkgICAgd2hpbGUgKFJUQV9PSyhydGEsIGxlbjEpKQorCSAgICAgIHsKKwkJaWYgKHJ0YS0+cnRhX3R5cGUgPT0gSUZMQV9BRERSRVNTKQorCQkgIHsKKwkJICAgIG1hY2xlbiA9IHJ0YS0+cnRhX2xlbiAtIHNpemVvZihzdHJ1Y3QgcnRhdHRyKTsKKwkJICAgIG1hYyA9IChjaGFyICopKHJ0YSsxKTsKKwkJICB9CisJCQorCQlydGEgPSBSVEFfTkVYVChydGEsIGxlbjEpOworCSAgICAgIH0KKworCSAgICBpZiAobWFjICYmIGNhbGxiYWNrX29rICYmICEoKGxpbmstPmlmaV9mbGFncyAmIChJRkZfTE9PUEJBQ0sgfCBJRkZfUE9JTlRPUE9JTlQpKSkgJiYgCisJCSEoKCpjYWxsYmFjaykoKGludClsaW5rLT5pZmlfaW5kZXgsICh1bnNpZ25lZCBpbnQpbGluay0+aWZpX3R5cGUsIG1hYywgbWFjbGVuLCBwYXJtKSkpCisJICAgICAgY2FsbGJhY2tfb2sgPSAwOworCSAgfQorI2VuZGlmCisgICAgfQorfQorCit2b2lkIG5ldGxpbmtfbXVsdGljYXN0KHZvaWQpCit7CisgIHNzaXplX3QgbGVuOworICBzdHJ1Y3Qgbmxtc2doZHIgKmg7CisgIGludCBmbGFnczsKKyAgCisgIC8qIGRvbid0IHJpc2sgYmxvY2tpbmcgcmVhZGluZyBuZXRsaW5rIG1lc3NhZ2VzIGhlcmUuICovCisgIGlmICgoZmxhZ3MgPSBmY250bChkYWVtb24tPm5ldGxpbmtmZCwgRl9HRVRGTCkpID09IC0xIHx8CisgICAgICBmY250bChkYWVtb24tPm5ldGxpbmtmZCwgRl9TRVRGTCwgZmxhZ3MgfCBPX05PTkJMT0NLKSA9PSAtMSkgCisgICAgcmV0dXJuOworICAKKyAgaWYgKChsZW4gPSBuZXRsaW5rX3JlY3YoKSkgIT0gLTEpCisgICAgZm9yIChoID0gKHN0cnVjdCBubG1zZ2hkciAqKWlvdi5pb3ZfYmFzZTsgTkxNU0dfT0soaCwgKHNpemVfdClsZW4pOyBoID0gTkxNU0dfTkVYVChoLCBsZW4pKQorICAgICAgbmxfYXN5bmMoaCk7CisgIAorICAvKiByZXN0b3JlIG5vbi1ibG9ja2luZyBzdGF0dXMgKi8KKyAgZmNudGwoZGFlbW9uLT5uZXRsaW5rZmQsIEZfU0VURkwsIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgbmxfYXN5bmMoc3RydWN0IG5sbXNnaGRyICpoKQoreworICBpZiAoaC0+bmxtc2dfdHlwZSA9PSBOTE1TR19FUlJPUikKKyAgICB7CisgICAgICBzdHJ1Y3Qgbmxtc2dlcnIgKmVyciA9IE5MTVNHX0RBVEEoaCk7CisgICAgICBpZiAoZXJyLT5lcnJvciAhPSAwKQorCW15X3N5c2xvZyhMT0dfRVJSLCBfKCJuZXRsaW5rIHJldHVybnMgZXJyb3I6ICVzIiksIHN0cmVycm9yKC0oZXJyLT5lcnJvcikpKTsKKyAgICB9CisgIGVsc2UgaWYgKGgtPm5sbXNnX3BpZCA9PSAwICYmIGgtPm5sbXNnX3R5cGUgPT0gUlRNX05FV1JPVVRFKSAKKyAgICB7CisgICAgICAvKiBXZSBhcnJhbmdlIHRvIHJlY2VpdmUgbmV0bGluayBtdWx0aWNhc3QgbWVzc2FnZXMgd2hlbmV2ZXIgdGhlIG5ldHdvcmsgcm91dGUgaXMgYWRkZWQuCisJIElmIHRoaXMgaGFwcGVucyBhbmQgd2Ugc3RpbGwgaGF2ZSBhIEROUyBwYWNrZXQgaW4gdGhlIGJ1ZmZlciwgd2UgcmUtc2VuZCBpdC4KKwkgVGhpcyBoZWxwcyBvbiBEb0QgbGlua3MsIHdoZXJlIGZyZXF1ZW50bHkgdGhlIHBhY2tldCB3aGljaCB0cmlnZ2VycyBkaWFsbGluZyBpcworCSBhIEROUyBxdWVyeSwgd2hpY2ggdGhlbiBnZXRzIGxvc3QuIEJ5IHJlLXNlbmRpbmcsIHdlIGNhbiBhdm9pZCB0aGUgbG9va3VwCisJIGZhaWxpbmcuICovIAorICAgICAgc3RydWN0IHJ0bXNnICpydG0gPSBOTE1TR19EQVRBKGgpOworICAgICAgCisgICAgICBpZiAocnRtLT5ydG1fdHlwZSA9PSBSVE5fVU5JQ0FTVCAmJiBydG0tPnJ0bV9zY29wZSA9PSBSVF9TQ09QRV9MSU5LKQorCXF1ZXVlX2V2ZW50KEVWRU5UX05FV1JPVVRFKTsKKyAgICB9CisgIGVsc2UgaWYgKGgtPm5sbXNnX3R5cGUgPT0gUlRNX05FV0FERFIgfHwgaC0+bmxtc2dfdHlwZSA9PSBSVE1fREVMQUREUikgCisgICAgcXVldWVfZXZlbnQoRVZFTlRfTkVXQUREUik7Cit9CisjZW5kaWYKKworICAgICAgCmRpZmYgLS1naXQgYS9zcmMvbmV0d29yay5jIGIvc3JjL25ldHdvcmsuYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jODdiODc5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL25ldHdvcmsuYwpAQCAtMCwwICsxLDE3MTMgQEAKKy8qIGRuc21hc3EgaXMgQ29weXJpZ2h0IChjKSAyMDAwLTIwMTcgU2ltb24gS2VsbGV5CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIGRhdGVkIEp1bmUsIDE5OTEsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIHZlcnNpb24gMyBkYXRlZCAyOSBKdW5lLCAyMDA3LgorIAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisqLworCisjaW5jbHVkZSAiZG5zbWFzcS5oIgorCisjaWZkZWYgSEFWRV9MSU5VWF9ORVRXT1JLCisKK2ludCBpbmRleHRvbmFtZShpbnQgZmQsIGludCBpbmRleCwgY2hhciAqbmFtZSkKK3sKKyAgc3RydWN0IGlmcmVxIGlmcjsKKyAgCisgIGlmIChpbmRleCA9PSAwKQorICAgIHJldHVybiAwOworCisgIGlmci5pZnJfaWZpbmRleCA9IGluZGV4OworICBpZiAoaW9jdGwoZmQsIFNJT0NHSUZOQU1FLCAmaWZyKSA9PSAtMSkKKyAgICByZXR1cm4gMDsKKworICBzdHJuY3B5KG5hbWUsIGlmci5pZnJfbmFtZSwgSUZfTkFNRVNJWkUpOworCisgIHJldHVybiAxOworfQorCisKKyNlbGlmIGRlZmluZWQoSEFWRV9TT0xBUklTX05FVFdPUkspCisKKyNpbmNsdWRlIDx6b25lLmg+CisjaW5jbHVkZSA8YWxsb2NhLmg+CisjaWZuZGVmIExJRkNfVU5ERVJfSVBNUAorIyAgZGVmaW5lIExJRkNfVU5ERVJfSVBNUCAwCisjZW5kaWYKKworaW50IGluZGV4dG9uYW1lKGludCBmZCwgaW50IGluZGV4LCBjaGFyICpuYW1lKQoreworICBpbnQ2NF90IGxpZmNfZmxhZ3M7CisgIHN0cnVjdCBsaWZudW0gbGlmbjsKKyAgaW50IG51bWlmcywgYnVmc2l6ZSwgaTsKKyAgc3RydWN0IGxpZmNvbmYgbGlmYzsKKyAgc3RydWN0IGxpZnJlcSAqbGlmcnA7CisgIAorICBpZiAoaW5kZXggPT0gMCkKKyAgICByZXR1cm4gMDsKKyAgCisgIGlmIChnZXR6b25laWQoKSA9PSBHTE9CQUxfWk9ORUlEKSAKKyAgICB7CisgICAgICBpZiAoIWlmX2luZGV4dG9uYW1lKGluZGV4LCBuYW1lKSkKKwlyZXR1cm4gMDsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgCisgIGxpZmNfZmxhZ3MgPSBMSUZDX05PWE1JVCB8IExJRkNfVEVNUE9SQVJZIHwgTElGQ19BTExaT05FUyB8IExJRkNfVU5ERVJfSVBNUDsKKyAgbGlmbi5saWZuX2ZhbWlseSA9IEFGX1VOU1BFQzsKKyAgbGlmbi5saWZuX2ZsYWdzID0gbGlmY19mbGFnczsKKyAgaWYgKGlvY3RsKGZkLCBTSU9DR0xJRk5VTSwgJmxpZm4pIDwgMCkgCisgICAgcmV0dXJuIDA7CisgIAorICBudW1pZnMgPSBsaWZuLmxpZm5fY291bnQ7CisgIGJ1ZnNpemUgPSBudW1pZnMgKiBzaXplb2Yoc3RydWN0IGxpZnJlcSk7CisgIAorICBsaWZjLmxpZmNfZmFtaWx5ID0gQUZfVU5TUEVDOworICBsaWZjLmxpZmNfZmxhZ3MgPSBsaWZjX2ZsYWdzOworICBsaWZjLmxpZmNfbGVuID0gYnVmc2l6ZTsKKyAgbGlmYy5saWZjX2J1ZiA9IGFsbG9jYShidWZzaXplKTsKKyAgCisgIGlmIChpb2N0bChmZCwgU0lPQ0dMSUZDT05GLCAmbGlmYykgPCAwKSAgCisgICAgcmV0dXJuIDA7CisgIAorICBsaWZycCA9IGxpZmMubGlmY19yZXE7CisgIGZvciAoaSA9IGxpZmMubGlmY19sZW4gLyBzaXplb2Yoc3RydWN0IGxpZnJlcSk7IGk7IGktLSwgbGlmcnArKykgCisgICAgeworICAgICAgc3RydWN0IGxpZnJlcSBsaWZyOworICAgICAgc3RybmNweShsaWZyLmxpZnJfbmFtZSwgbGlmcnAtPmxpZnJfbmFtZSwgSUZfTkFNRVNJWkUpOworICAgICAgaWYgKGlvY3RsKGZkLCBTSU9DR0xJRklOREVYLCAmbGlmcikgPCAwKSAKKwlyZXR1cm4gMDsKKyAgICAgIAorICAgICAgaWYgKGxpZnIubGlmcl9pbmRleCA9PSBpbmRleCkgeworCXN0cm5jcHkobmFtZSwgbGlmci5saWZyX25hbWUsIElGX05BTUVTSVpFKTsKKwlyZXR1cm4gMTsKKyAgICAgIH0KKyAgICB9CisgIHJldHVybiAwOworfQorCisKKyNlbHNlCisKK2ludCBpbmRleHRvbmFtZShpbnQgZmQsIGludCBpbmRleCwgY2hhciAqbmFtZSkKK3sgCisgICh2b2lkKWZkOworCisgIGlmIChpbmRleCA9PSAwIHx8ICFpZl9pbmRleHRvbmFtZShpbmRleCwgbmFtZSkpCisgICAgcmV0dXJuIDA7CisKKyAgcmV0dXJuIDE7Cit9CisKKyNlbmRpZgorCitpbnQgaWZhY2VfY2hlY2soaW50IGZhbWlseSwgc3RydWN0IGFsbF9hZGRyICphZGRyLCBjaGFyICpuYW1lLCBpbnQgKmF1dGgpCit7CisgIHN0cnVjdCBpbmFtZSAqdG1wOworICBpbnQgcmV0ID0gMSwgbWF0Y2hfYWRkciA9IDA7CisKKyAgLyogTm90ZTogaGF2ZSB0byBjaGVjayBhbGwgYW5kIG5vdCBiYWlsIG91dCBlYXJseSwgc28gdGhhdCB3ZSBzZXQgdGhlCisgICAgICJ1c2VkIiBmbGFncy4KKworICAgICBNYXkgYmUgY2FsbGVkIHdpdGggZmFtaWx5ID09IEFGX0xPQ0FMdG8gY2hlY2sgaW50ZXJmYWNlIGJ5IG5hbWUgb25seS4gKi8KKyAgCisgIGlmIChhdXRoKQorICAgICphdXRoID0gMDsKKyAgCisgIGlmIChkYWVtb24tPmlmX25hbWVzIHx8IGRhZW1vbi0+aWZfYWRkcnMpCisgICAgeworICAgICAgcmV0ID0gMDsKKworICAgICAgZm9yICh0bXAgPSBkYWVtb24tPmlmX25hbWVzOyB0bXA7IHRtcCA9IHRtcC0+bmV4dCkKKwlpZiAodG1wLT5uYW1lICYmIHdpbGRjYXJkX21hdGNoKHRtcC0+bmFtZSwgbmFtZSkpCisJICByZXQgPSB0bXAtPnVzZWQgPSAxOworCSAgICAgICAgCisgICAgICBpZiAoYWRkcikKKwlmb3IgKHRtcCA9IGRhZW1vbi0+aWZfYWRkcnM7IHRtcDsgdG1wID0gdG1wLT5uZXh0KQorCSAgaWYgKHRtcC0+YWRkci5zYS5zYV9mYW1pbHkgPT0gZmFtaWx5KQorCSAgICB7CisJICAgICAgaWYgKGZhbWlseSA9PSBBRl9JTkVUICYmCisJCSAgdG1wLT5hZGRyLmluLnNpbl9hZGRyLnNfYWRkciA9PSBhZGRyLT5hZGRyLmFkZHI0LnNfYWRkcikKKwkJcmV0ID0gbWF0Y2hfYWRkciA9IHRtcC0+dXNlZCA9IDE7CisjaWZkZWYgSEFWRV9JUFY2CisJICAgICAgZWxzZSBpZiAoZmFtaWx5ID09IEFGX0lORVQ2ICYmCisJCSAgICAgICBJTjZfQVJFX0FERFJfRVFVQUwoJnRtcC0+YWRkci5pbjYuc2luNl9hZGRyLCAKKwkJCQkJICAmYWRkci0+YWRkci5hZGRyNikpCisJCXJldCA9IG1hdGNoX2FkZHIgPSB0bXAtPnVzZWQgPSAxOworI2VuZGlmCisJICAgIH0gICAgICAgICAgCisgICAgfQorICAKKyAgaWYgKCFtYXRjaF9hZGRyKQorICAgIGZvciAodG1wID0gZGFlbW9uLT5pZl9leGNlcHQ7IHRtcDsgdG1wID0gdG1wLT5uZXh0KQorICAgICAgaWYgKHRtcC0+bmFtZSAmJiB3aWxkY2FyZF9tYXRjaCh0bXAtPm5hbWUsIG5hbWUpKQorCXJldCA9IDA7CisgICAgCisKKyAgZm9yICh0bXAgPSBkYWVtb24tPmF1dGhpbnRlcmZhY2U7IHRtcDsgdG1wID0gdG1wLT5uZXh0KQorICAgIGlmICh0bXAtPm5hbWUpCisgICAgICB7CisJaWYgKHN0cmNtcCh0bXAtPm5hbWUsIG5hbWUpID09IDAgJiYKKwkgICAgKHRtcC0+YWRkci5zYS5zYV9mYW1pbHkgPT0gMCB8fCB0bXAtPmFkZHIuc2Euc2FfZmFtaWx5ID09IGZhbWlseSkpCisJICBicmVhazsKKyAgICAgIH0KKyAgICBlbHNlIGlmIChhZGRyICYmIHRtcC0+YWRkci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCAmJiBmYW1pbHkgPT0gQUZfSU5FVCAmJgorCSAgICAgdG1wLT5hZGRyLmluLnNpbl9hZGRyLnNfYWRkciA9PSBhZGRyLT5hZGRyLmFkZHI0LnNfYWRkcikKKyAgICAgIGJyZWFrOworI2lmZGVmIEhBVkVfSVBWNgorICAgIGVsc2UgaWYgKGFkZHIgJiYgdG1wLT5hZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNiAmJiBmYW1pbHkgPT0gQUZfSU5FVDYgJiYKKwkgICAgIElONl9BUkVfQUREUl9FUVVBTCgmdG1wLT5hZGRyLmluNi5zaW42X2FkZHIsICZhZGRyLT5hZGRyLmFkZHI2KSkKKyAgICAgIGJyZWFrOworI2VuZGlmICAgICAgCisKKyAgaWYgKHRtcCAmJiBhdXRoKSAKKyAgICB7CisgICAgICAqYXV0aCA9IDE7CisgICAgICByZXQgPSAxOworICAgIH0KKworICByZXR1cm4gcmV0OyAKK30KKworCisvKiBGaXggZm9yIHByb2JsZW0gdGhhdCB0aGUga2VybmVsIHNvbWV0aW1lcyByZXBvcnRzIHRoZSBsb29wYmFjayBpbnRlcmZhY2UgYXMgdGhlCisgICBhcnJpdmFsIGludGVyZmFjZSB3aGVuIGEgcGFja2V0IG9yaWdpbmF0ZXMgbG9jYWxseSwgZXZlbiB3aGVuIHNlbnQgdG8gYWRkcmVzcyBvZiAKKyAgIGFuIGludGVyZmFjZSBvdGhlciB0aGFuIHRoZSBsb29wYmFjay4gQWNjZXB0IHBhY2tldCBpZiBpdCBhcnJpdmVkIHZpYSBhIGxvb3BiYWNrIAorICAgaW50ZXJmYWNlLCBldmVuIHdoZW4gd2UncmUgbm90IGFjY2VwdGluZyBwYWNrZXRzIHRoYXQgd2F5LCBhcyBsb25nIGFzIHRoZSBkZXN0aW5hdGlvbgorICAgYWRkcmVzcyBpcyBvbmUgd2UncmUgYmVsaWV2aW5nLiBJbnRlcmZhY2UgbGlzdCBtdXN0IGJlIHVwLXRvLWRhdGUgYmVmb3JlIGNhbGxpbmcuICovCitpbnQgbG9vcGJhY2tfZXhjZXB0aW9uKGludCBmZCwgaW50IGZhbWlseSwgc3RydWN0IGFsbF9hZGRyICphZGRyLCBjaGFyICpuYW1lKSAgICAKK3sKKyAgc3RydWN0IGlmcmVxIGlmcjsKKyAgc3RydWN0IGlyZWMgKmlmYWNlOworCisgIHN0cm5jcHkoaWZyLmlmcl9uYW1lLCBuYW1lLCBJRl9OQU1FU0laRSk7CisgIGlmIChpb2N0bChmZCwgU0lPQ0dJRkZMQUdTLCAmaWZyKSAhPSAtMSAmJgorICAgICAgaWZyLmlmcl9mbGFncyAmIElGRl9MT09QQkFDSykKKyAgICB7CisgICAgICBmb3IgKGlmYWNlID0gZGFlbW9uLT5pbnRlcmZhY2VzOyBpZmFjZTsgaWZhY2UgPSBpZmFjZS0+bmV4dCkKKwlpZiAoaWZhY2UtPmFkZHIuc2Euc2FfZmFtaWx5ID09IGZhbWlseSkKKwkgIHsKKwkgICAgaWYgKGZhbWlseSA9PSBBRl9JTkVUKQorCSAgICAgIHsKKwkJaWYgKGlmYWNlLT5hZGRyLmluLnNpbl9hZGRyLnNfYWRkciA9PSBhZGRyLT5hZGRyLmFkZHI0LnNfYWRkcikKKwkJICByZXR1cm4gMTsKKwkgICAgICB9CisjaWZkZWYgSEFWRV9JUFY2CisJICAgIGVsc2UgaWYgKElONl9BUkVfQUREUl9FUVVBTCgmaWZhY2UtPmFkZHIuaW42LnNpbjZfYWRkciwgJmFkZHItPmFkZHIuYWRkcjYpKQorCSAgICAgIHJldHVybiAxOworI2VuZGlmCisJICAgIAorCSAgfQorICAgIH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qIElmIHdlJ3JlIGNvbmZpZ3VyZWQgd2l0aCBzb21ldGhpbmcgbGlrZSAtLWludGVyZmFjZT1ldGgwOjAgdGhlbiB3ZSdsbCBsaXN0ZW4gY29ycmVjdGx5CisgICBvbiB0aGUgcmVsZXZhbnQgYWRkcmVzcywgYnV0IHRoZSBuYW1lIG9mIHRoZSBhcnJpdmFsIGludGVyZmFjZSwgZGVyaXZlZCBmcm9tIHRoZQorICAgaW5kZXggd29uJ3QgbWF0Y2ggdGhlIGNvbmZpZy4gQ2hlY2sgdGhhdCB3ZSBmb3VuZCBhbiBpbnRlcmZhY2UgYWRkcmVzcyBmb3IgdGhlIGFycml2YWwgCisgICBpbnRlcmZhY2U6IGRhZW1vbi0+aW50ZXJmYWNlcyBtdXN0IGJlIHVwLXRvLWRhdGUuICovCitpbnQgbGFiZWxfZXhjZXB0aW9uKGludCBpbmRleCwgaW50IGZhbWlseSwgc3RydWN0IGFsbF9hZGRyICphZGRyKQoreworICBzdHJ1Y3QgaXJlYyAqaWZhY2U7CisKKyAgLyogbGFiZWxzIG9ubHkgc3VwcG9ydGVkIG9uIElQdjQgYWRkcmVzc2VzLiAqLworICBpZiAoZmFtaWx5ICE9IEFGX0lORVQpCisgICAgcmV0dXJuIDA7CisKKyAgZm9yIChpZmFjZSA9IGRhZW1vbi0+aW50ZXJmYWNlczsgaWZhY2U7IGlmYWNlID0gaWZhY2UtPm5leHQpCisgICAgaWYgKGlmYWNlLT5pbmRleCA9PSBpbmRleCAmJiBpZmFjZS0+YWRkci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCAmJgorCWlmYWNlLT5hZGRyLmluLnNpbl9hZGRyLnNfYWRkciA9PSBhZGRyLT5hZGRyLmFkZHI0LnNfYWRkcikKKyAgICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitzdHJ1Y3QgaWZhY2VfcGFyYW0geworICBzdHJ1Y3QgYWRkcmxpc3QgKnNwYXJlOworICBpbnQgZmQ7Cit9OworCitzdGF0aWMgaW50IGlmYWNlX2FsbG93ZWQoc3RydWN0IGlmYWNlX3BhcmFtICpwYXJhbSwgaW50IGlmX2luZGV4LCBjaGFyICpsYWJlbCwKKwkJCSB1bmlvbiBteXNvY2thZGRyICphZGRyLCBzdHJ1Y3QgaW5fYWRkciBuZXRtYXNrLCBpbnQgcHJlZml4bGVuLCBpbnQgaWZhY2VfZmxhZ3MpIAoreworICBzdHJ1Y3QgaXJlYyAqaWZhY2U7CisgIGludCBtdHUgPSAwLCBsb29wYmFjazsKKyAgc3RydWN0IGlmcmVxIGlmcjsKKyAgaW50IHRmdHBfb2sgPSAhIW9wdGlvbl9ib29sKE9QVF9URlRQKTsKKyAgaW50IGRoY3Bfb2sgPSAxOworICBpbnQgYXV0aF9kbnMgPSAwOworICBpbnQgaXNfbGFiZWwgPSAwOworI2lmIGRlZmluZWQoSEFWRV9ESENQKSB8fCBkZWZpbmVkKEhBVkVfVEZUUCkKKyAgc3RydWN0IGluYW1lICp0bXA7CisjZW5kaWYKKworICAodm9pZClwcmVmaXhsZW47CisKKyAgaWYgKCFpbmRleHRvbmFtZShwYXJhbS0+ZmQsIGlmX2luZGV4LCBpZnIuaWZyX25hbWUpIHx8CisgICAgICBpb2N0bChwYXJhbS0+ZmQsIFNJT0NHSUZGTEFHUywgJmlmcikgPT0gLTEpCisgICAgcmV0dXJuIDA7CisgICAKKyAgbG9vcGJhY2sgPSBpZnIuaWZyX2ZsYWdzICYgSUZGX0xPT1BCQUNLOworICAKKyAgaWYgKGxvb3BiYWNrKQorICAgIGRoY3Bfb2sgPSAwOworICAKKyAgaWYgKGlvY3RsKHBhcmFtLT5mZCwgU0lPQ0dJRk1UVSwgJmlmcikgIT0gLTEpCisgICAgbXR1ID0gaWZyLmlmcl9tdHU7CisgIAorICBpZiAoIWxhYmVsKQorICAgIGxhYmVsID0gaWZyLmlmcl9uYW1lOworICBlbHNlCisgICAgaXNfbGFiZWwgPSBzdHJjbXAobGFiZWwsIGlmci5pZnJfbmFtZSk7CisgCisgIC8qIG1haW50YWluIGEgbGlzdCBvZiBhbGwgYWRkcmVzc2VzIG9uIGFsbCBpbnRlcmZhY2VzIGZvciAtLWxvY2FsLXNlcnZpY2Ugb3B0aW9uICovCisgIGlmIChvcHRpb25fYm9vbChPUFRfTE9DQUxfU0VSVklDRSkpCisgICAgeworICAgICAgc3RydWN0IGFkZHJsaXN0ICphbDsKKworICAgICAgaWYgKHBhcmFtLT5zcGFyZSkKKwl7CisJICBhbCA9IHBhcmFtLT5zcGFyZTsKKwkgIHBhcmFtLT5zcGFyZSA9IGFsLT5uZXh0OworCX0KKyAgICAgIGVsc2UKKwlhbCA9IHdoaW5lX21hbGxvYyhzaXplb2Yoc3RydWN0IGFkZHJsaXN0KSk7CisgICAgICAKKyAgICAgIGlmIChhbCkKKwl7CisJICBhbC0+bmV4dCA9IGRhZW1vbi0+aW50ZXJmYWNlX2FkZHJzOworCSAgZGFlbW9uLT5pbnRlcmZhY2VfYWRkcnMgPSBhbDsKKwkgIGFsLT5wcmVmaXhsZW4gPSBwcmVmaXhsZW47CisJICAKKwkgIGlmIChhZGRyLT5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCkKKwkgICAgeworCSAgICAgIGFsLT5hZGRyLmFkZHIuYWRkcjQgPSBhZGRyLT5pbi5zaW5fYWRkcjsKKwkgICAgICBhbC0+ZmxhZ3MgPSAwOworCSAgICB9CisjaWZkZWYgSEFWRV9JUFY2CisJICBlbHNlCisJICAgIHsKKwkgICAgICBhbC0+YWRkci5hZGRyLmFkZHI2ID0gYWRkci0+aW42LnNpbjZfYWRkcjsKKwkgICAgICBhbC0+ZmxhZ3MgPSBBRERSTElTVF9JUFY2OworCSAgICB9IAorI2VuZGlmCisJfQorICAgIH0KKyAgCisjaWZkZWYgSEFWRV9JUFY2CisgIGlmIChhZGRyLT5zYS5zYV9mYW1pbHkgIT0gQUZfSU5FVDYgfHwgIUlONl9JU19BRERSX0xJTktMT0NBTCgmYWRkci0+aW42LnNpbjZfYWRkcikpCisjZW5kaWYKKyAgICB7CisgICAgICBzdHJ1Y3QgaW50ZXJmYWNlX25hbWUgKmludF9uYW1lOworICAgICAgc3RydWN0IGFkZHJsaXN0ICphbDsKKyNpZmRlZiBIQVZFX0FVVEgKKyAgICAgIHN0cnVjdCBhdXRoX3pvbmUgKnpvbmU7CisgICAgICBzdHJ1Y3QgYXV0aF9uYW1lX2xpc3QgKm5hbWU7CisKKyAgICAgIC8qIEZpbmQgc3VibmV0cyBpbiBhdXRoX3pvbmVzICovCisgICAgICBmb3IgKHpvbmUgPSBkYWVtb24tPmF1dGhfem9uZXM7IHpvbmU7IHpvbmUgPSB6b25lLT5uZXh0KQorCWZvciAobmFtZSA9IHpvbmUtPmludGVyZmFjZV9uYW1lczsgbmFtZTsgbmFtZSA9IG5hbWUtPm5leHQpCisJICBpZiAod2lsZGNhcmRfbWF0Y2gobmFtZS0+bmFtZSwgbGFiZWwpKQorCSAgICB7CisJICAgICAgaWYgKGFkZHItPnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUICYmIChuYW1lLT5mbGFncyAmIEFVVEg0KSkKKwkJeworCQkgIGlmIChwYXJhbS0+c3BhcmUpCisJCSAgICB7CisJCSAgICAgIGFsID0gcGFyYW0tPnNwYXJlOworCQkgICAgICBwYXJhbS0+c3BhcmUgPSBhbC0+bmV4dDsKKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICBhbCA9IHdoaW5lX21hbGxvYyhzaXplb2Yoc3RydWN0IGFkZHJsaXN0KSk7CisJCSAgCisJCSAgaWYgKGFsKQorCQkgICAgeworCQkgICAgICBhbC0+bmV4dCA9IHpvbmUtPnN1Ym5ldDsKKwkJICAgICAgem9uZS0+c3VibmV0ID0gYWw7CisJCSAgICAgIGFsLT5wcmVmaXhsZW4gPSBwcmVmaXhsZW47CisJCSAgICAgIGFsLT5hZGRyLmFkZHIuYWRkcjQgPSBhZGRyLT5pbi5zaW5fYWRkcjsKKwkJICAgICAgYWwtPmZsYWdzID0gMDsKKwkJICAgIH0KKwkJfQorCSAgICAgIAorI2lmZGVmIEhBVkVfSVBWNgorCSAgICAgIGlmIChhZGRyLT5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYgJiYgKG5hbWUtPmZsYWdzICYgQVVUSDYpKQorCQl7CisJCSAgaWYgKHBhcmFtLT5zcGFyZSkKKwkJICAgIHsKKwkJICAgICAgYWwgPSBwYXJhbS0+c3BhcmU7CisJCSAgICAgIHBhcmFtLT5zcGFyZSA9IGFsLT5uZXh0OworCQkgICAgfQorCQkgIGVsc2UKKwkJICAgIGFsID0gd2hpbmVfbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWRkcmxpc3QpKTsKKwkJICAKKwkJICBpZiAoYWwpCisJCSAgICB7CisJCSAgICAgIGFsLT5uZXh0ID0gem9uZS0+c3VibmV0OworCQkgICAgICB6b25lLT5zdWJuZXQgPSBhbDsKKwkJICAgICAgYWwtPnByZWZpeGxlbiA9IHByZWZpeGxlbjsKKwkJICAgICAgYWwtPmFkZHIuYWRkci5hZGRyNiA9IGFkZHItPmluNi5zaW42X2FkZHI7CisJCSAgICAgIGFsLT5mbGFncyA9IEFERFJMSVNUX0lQVjY7CisJCSAgICB9CisJCX0gCisjZW5kaWYKKwkgICAgICAKKwkgICAgfQorI2VuZGlmCisgICAgICAgCisgICAgICAvKiBVcGRhdGUgYWRkcmVzc2VzIGZyb20gaW50ZXJmYWNlX25hbWVzLiBUaGVzZSBhcmUgYSBzZXQgaW5kZXBlbmRlbnQKKwkgb2YgdGhlIHNldCB3ZSdyZSBsaXN0ZW5pbmcgb24uICovICAKKyAgICAgIGZvciAoaW50X25hbWUgPSBkYWVtb24tPmludF9uYW1lczsgaW50X25hbWU7IGludF9uYW1lID0gaW50X25hbWUtPm5leHQpCisJaWYgKHN0cm5jbXAobGFiZWwsIGludF9uYW1lLT5pbnRyLCBJRl9OQU1FU0laRSkgPT0gMCAmJiAKKwkgICAgKGFkZHItPnNhLnNhX2ZhbWlseSA9PSBpbnRfbmFtZS0+ZmFtaWx5IHx8IGludF9uYW1lLT5mYW1pbHkgPT0gMCkpCisJICB7CisJICAgIGlmIChwYXJhbS0+c3BhcmUpCisJICAgICAgeworCQlhbCA9IHBhcmFtLT5zcGFyZTsKKwkJcGFyYW0tPnNwYXJlID0gYWwtPm5leHQ7CisJICAgICAgfQorCSAgICBlbHNlCisJICAgICAgYWwgPSB3aGluZV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBhZGRybGlzdCkpOworCSAgICAKKwkgICAgaWYgKGFsKQorCSAgICAgIHsKKwkJYWwtPm5leHQgPSBpbnRfbmFtZS0+YWRkcjsKKwkJaW50X25hbWUtPmFkZHIgPSBhbDsKKwkJCisJCWlmIChhZGRyLT5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCkKKwkJICB7CisJCSAgICBhbC0+YWRkci5hZGRyLmFkZHI0ID0gYWRkci0+aW4uc2luX2FkZHI7CisJCSAgICBhbC0+ZmxhZ3MgPSAwOworCQkgIH0KKyNpZmRlZiBIQVZFX0lQVjYKKwkJZWxzZQorCQkgeworCQkgICAgYWwtPmFkZHIuYWRkci5hZGRyNiA9IGFkZHItPmluNi5zaW42X2FkZHI7CisJCSAgICBhbC0+ZmxhZ3MgPSBBRERSTElTVF9JUFY2OworCQkgICAgLyogUHJpdmFjeSBhZGRyZXNzZXMgYW5kIGFkZHJlc3NlcyBzdGlsbCB1bmRlcmdvaW5nIERBRCBhbmQgZGVwcmVjYXRlZCBhZGRyZXNzZXMKKwkJICAgICAgIGRvbid0IGFwcGVhciBpbiBmb3J3YXJkIHF1ZXJpZXMsIGJ1dCB3aWxsIGluIHJldmVyc2Ugb25lcy4gKi8KKwkJICAgIGlmICghKGlmYWNlX2ZsYWdzICYgSUZBQ0VfUEVSTUFORU5UKSB8fCAoaWZhY2VfZmxhZ3MgJiAoSUZBQ0VfREVQUkVDQVRFRCB8IElGQUNFX1RFTlRBVElWRSkpKQorCQkgICAgICBhbC0+ZmxhZ3MgfD0gQUREUkxJU1RfUkVWT05MWTsKKwkJIH0gCisjZW5kaWYKKwkgICAgICB9CisJICB9CisgICAgfQorIAorICAvKiBjaGVjayB3aGV0aGVyIHRoZSBpbnRlcmZhY2UgSVAgaGFzIGJlZW4gYWRkZWQgYWxyZWFkeSAKKyAgICAgd2UgY2FsbCB0aGlzIHJvdXRpbmUgbXVsdGlwbGUgdGltZXMuICovCisgIGZvciAoaWZhY2UgPSBkYWVtb24tPmludGVyZmFjZXM7IGlmYWNlOyBpZmFjZSA9IGlmYWNlLT5uZXh0KSAKKyAgICBpZiAoc29ja2FkZHJfaXNlcXVhbCgmaWZhY2UtPmFkZHIsIGFkZHIpKQorICAgICAgeworCWlmYWNlLT5kYWQgPSAhIShpZmFjZV9mbGFncyAmIElGQUNFX1RFTlRBVElWRSk7CisJaWZhY2UtPmZvdW5kID0gMTsgLyogZm9yIGdhcmJhZ2UgY29sbGVjdGlvbiAqLworCXJldHVybiAxOworICAgICAgfQorCisgLyogSWYgd2UgYXJlIHJlc3RyaWN0aW5nIHRoZSBzZXQgb2YgaW50ZXJmYWNlcyB0byB1c2UsIG1ha2UKKyAgICAgc3VyZSB0aGF0IGxvb3BiYWNrIGludGVyZmFjZXMgYXJlIGluIHRoYXQgc2V0LiAqLworICBpZiAoZGFlbW9uLT5pZl9uYW1lcyAmJiBsb29wYmFjaykKKyAgICB7CisgICAgICBzdHJ1Y3QgaW5hbWUgKmxvOworICAgICAgZm9yIChsbyA9IGRhZW1vbi0+aWZfbmFtZXM7IGxvOyBsbyA9IGxvLT5uZXh0KQorCWlmIChsby0+bmFtZSAmJiBzdHJjbXAobG8tPm5hbWUsIGlmci5pZnJfbmFtZSkgPT0gMCkKKwkgIGJyZWFrOworICAgICAgCisgICAgICBpZiAoIWxvICYmIChsbyA9IHdoaW5lX21hbGxvYyhzaXplb2Yoc3RydWN0IGluYW1lKSkpKSAKKwl7CisJICBpZiAoKGxvLT5uYW1lID0gd2hpbmVfbWFsbG9jKHN0cmxlbihpZnIuaWZyX25hbWUpKzEpKSkKKwkgICAgeworCSAgICAgIHN0cmNweShsby0+bmFtZSwgaWZyLmlmcl9uYW1lKTsKKwkgICAgICBsby0+dXNlZCA9IDE7CisJICAgICAgbG8tPm5leHQgPSBkYWVtb24tPmlmX25hbWVzOworCSAgICAgIGRhZW1vbi0+aWZfbmFtZXMgPSBsbzsKKwkgICAgfQorCSAgZWxzZQorCSAgICBmcmVlKGxvKTsKKwl9CisgICAgfQorICAKKyAgaWYgKGFkZHItPnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUICYmCisgICAgICAhaWZhY2VfY2hlY2soQUZfSU5FVCwgKHN0cnVjdCBhbGxfYWRkciAqKSZhZGRyLT5pbi5zaW5fYWRkciwgbGFiZWwsICZhdXRoX2RucykpCisgICAgcmV0dXJuIDE7CisKKyNpZmRlZiBIQVZFX0lQVjYKKyAgaWYgKGFkZHItPnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNiAmJgorICAgICAgIWlmYWNlX2NoZWNrKEFGX0lORVQ2LCAoc3RydWN0IGFsbF9hZGRyICopJmFkZHItPmluNi5zaW42X2FkZHIsIGxhYmVsLCAmYXV0aF9kbnMpKQorICAgIHJldHVybiAxOworI2VuZGlmCisgICAgCisjaWZkZWYgSEFWRV9ESENQCisgIC8qIE5vIERIQ1Agd2hlcmUgd2UncmUgZG9pbmcgYXV0aCBETlMuICovCisgIGlmIChhdXRoX2RucykKKyAgICB7CisgICAgICB0ZnRwX29rID0gMDsKKyAgICAgIGRoY3Bfb2sgPSAwOworICAgIH0KKyAgZWxzZQorICAgIGZvciAodG1wID0gZGFlbW9uLT5kaGNwX2V4Y2VwdDsgdG1wOyB0bXAgPSB0bXAtPm5leHQpCisgICAgICBpZiAodG1wLT5uYW1lICYmIHdpbGRjYXJkX21hdGNoKHRtcC0+bmFtZSwgaWZyLmlmcl9uYW1lKSkKKwl7CisJICB0ZnRwX29rID0gMDsKKwkgIGRoY3Bfb2sgPSAwOworCX0KKyNlbmRpZgorIAorICAKKyNpZmRlZiBIQVZFX1RGVFAKKyAgaWYgKGRhZW1vbi0+dGZ0cF9pbnRlcmZhY2VzKQorICAgIHsKKyAgICAgIC8qIGRlZGljYXRlZCB0ZnRwIGludGVyZmFjZSBsaXN0ICovCisgICAgICB0ZnRwX29rID0gMDsKKyAgICAgIGZvciAodG1wID0gZGFlbW9uLT50ZnRwX2ludGVyZmFjZXM7IHRtcDsgdG1wID0gdG1wLT5uZXh0KQorCWlmICh0bXAtPm5hbWUgJiYgd2lsZGNhcmRfbWF0Y2godG1wLT5uYW1lLCBpZnIuaWZyX25hbWUpKQorCSAgdGZ0cF9vayA9IDE7CisgICAgfQorI2VuZGlmCisgIAorICAvKiBhZGQgdG8gbGlzdCAqLworICBpZiAoKGlmYWNlID0gd2hpbmVfbWFsbG9jKHNpemVvZihzdHJ1Y3QgaXJlYykpKSkKKyAgICB7CisgICAgICBpZmFjZS0+YWRkciA9ICphZGRyOworICAgICAgaWZhY2UtPm5ldG1hc2sgPSBuZXRtYXNrOworICAgICAgaWZhY2UtPnRmdHBfb2sgPSB0ZnRwX29rOworICAgICAgaWZhY2UtPmRoY3Bfb2sgPSBkaGNwX29rOworICAgICAgaWZhY2UtPmRuc19hdXRoID0gYXV0aF9kbnM7CisgICAgICBpZmFjZS0+bXR1ID0gbXR1OworICAgICAgaWZhY2UtPmRhZCA9ICEhKGlmYWNlX2ZsYWdzICYgSUZBQ0VfVEVOVEFUSVZFKTsKKyAgICAgIGlmYWNlLT5mb3VuZCA9IDE7CisgICAgICBpZmFjZS0+ZG9uZSA9IGlmYWNlLT5tdWx0aWNhc3RfZG9uZSA9IGlmYWNlLT53YXJuZWQgPSAwOworICAgICAgaWZhY2UtPmluZGV4ID0gaWZfaW5kZXg7CisgICAgICBpZmFjZS0+bGFiZWwgPSBpc19sYWJlbDsKKyAgICAgIGlmICgoaWZhY2UtPm5hbWUgPSB3aGluZV9tYWxsb2Moc3RybGVuKGlmci5pZnJfbmFtZSkrMSkpKQorCXsKKwkgIHN0cmNweShpZmFjZS0+bmFtZSwgaWZyLmlmcl9uYW1lKTsKKwkgIGlmYWNlLT5uZXh0ID0gZGFlbW9uLT5pbnRlcmZhY2VzOworCSAgZGFlbW9uLT5pbnRlcmZhY2VzID0gaWZhY2U7CisJICByZXR1cm4gMTsKKwl9CisgICAgICBmcmVlKGlmYWNlKTsKKworICAgIH0KKyAgCisgIGVycm5vID0gRU5PTUVNOyAKKyAgcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBIQVZFX0lQVjYKK3N0YXRpYyBpbnQgaWZhY2VfYWxsb3dlZF92NihzdHJ1Y3QgaW42X2FkZHIgKmxvY2FsLCBpbnQgcHJlZml4LCAKKwkJCSAgICBpbnQgc2NvcGUsIGludCBpZl9pbmRleCwgaW50IGZsYWdzLCAKKwkJCSAgICBpbnQgcHJlZmVycmVkLCBpbnQgdmFsaWQsIHZvaWQgKnZwYXJhbSkKK3sKKyAgdW5pb24gbXlzb2NrYWRkciBhZGRyOworICBzdHJ1Y3QgaW5fYWRkciBuZXRtYXNrOyAvKiBkdW1teSAqLworICBuZXRtYXNrLnNfYWRkciA9IDA7CisKKyAgKHZvaWQpc2NvcGU7IC8qIHdhcm5pbmcgKi8KKyAgKHZvaWQpcHJlZmVycmVkOworICAodm9pZCl2YWxpZDsKKyAgCisgIG1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTsKKyNpZmRlZiBIQVZFX1NPQ0tBRERSX1NBX0xFTgorICBhZGRyLmluNi5zaW42X2xlbiA9IHNpemVvZihhZGRyLmluNik7CisjZW5kaWYKKyAgYWRkci5pbjYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgYWRkci5pbjYuc2luNl9hZGRyID0gKmxvY2FsOworICBhZGRyLmluNi5zaW42X3BvcnQgPSBodG9ucyhkYWVtb24tPnBvcnQpOworICAvKiBGcmVlQlNEIGluc2lzdHMgdGhpcyBpcyB6ZXJvIGZvciBub24tbGlua2xvY2FsIGFkZHJlc3NlcyAqLworICBpZiAoSU42X0lTX0FERFJfTElOS0xPQ0FMKGxvY2FsKSkKKyAgICBhZGRyLmluNi5zaW42X3Njb3BlX2lkID0gaWZfaW5kZXg7CisgIGVsc2UKKyAgICBhZGRyLmluNi5zaW42X3Njb3BlX2lkID0gMDsKKyAgCisgIHJldHVybiBpZmFjZV9hbGxvd2VkKChzdHJ1Y3QgaWZhY2VfcGFyYW0gKil2cGFyYW0sIGlmX2luZGV4LCBOVUxMLCAmYWRkciwgbmV0bWFzaywgcHJlZml4LCBmbGFncyk7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBpZmFjZV9hbGxvd2VkX3Y0KHN0cnVjdCBpbl9hZGRyIGxvY2FsLCBpbnQgaWZfaW5kZXgsIGNoYXIgKmxhYmVsLAorCQkJICAgIHN0cnVjdCBpbl9hZGRyIG5ldG1hc2ssIHN0cnVjdCBpbl9hZGRyIGJyb2FkY2FzdCwgdm9pZCAqdnBhcmFtKQoreworICB1bmlvbiBteXNvY2thZGRyIGFkZHI7CisgIGludCBwcmVmaXgsIGJpdDsKKyAKKyAgKHZvaWQpYnJvYWRjYXN0OyAvKiB3YXJuaW5nICovCisKKyAgbWVtc2V0KCZhZGRyLCAwLCBzaXplb2YoYWRkcikpOworI2lmZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisgIGFkZHIuaW4uc2luX2xlbiA9IHNpemVvZihhZGRyLmluKTsKKyNlbmRpZgorICBhZGRyLmluLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICBhZGRyLmluLnNpbl9hZGRyID0gbG9jYWw7CisgIGFkZHIuaW4uc2luX3BvcnQgPSBodG9ucyhkYWVtb24tPnBvcnQpOworCisgIC8qIGRldGVybWluZSBwcmVmaXggbGVuZ3RoIGZyb20gbmV0bWFzayAqLworICBmb3IgKHByZWZpeCA9IDMyLCBiaXQgPSAxOyAoYml0ICYgbnRvaGwobmV0bWFzay5zX2FkZHIpKSA9PSAwICYmIHByZWZpeCAhPSAwOyBiaXQgPSBiaXQgPDwgMSwgcHJlZml4LS0pOworCisgIHJldHVybiBpZmFjZV9hbGxvd2VkKChzdHJ1Y3QgaWZhY2VfcGFyYW0gKil2cGFyYW0sIGlmX2luZGV4LCBsYWJlbCwgJmFkZHIsIG5ldG1hc2ssIHByZWZpeCwgMCk7Cit9CisgICAKK2ludCBlbnVtZXJhdGVfaW50ZXJmYWNlcyhpbnQgcmVzZXQpCit7CisgIHN0YXRpYyBzdHJ1Y3QgYWRkcmxpc3QgKnNwYXJlID0gTlVMTDsKKyAgc3RhdGljIGludCBkb25lID0gMDsKKyAgc3RydWN0IGlmYWNlX3BhcmFtIHBhcmFtOworICBpbnQgZXJyc2F2ZSwgcmV0ID0gMTsKKyAgc3RydWN0IGFkZHJsaXN0ICphZGRyLCAqdG1wOworICBzdHJ1Y3QgaW50ZXJmYWNlX25hbWUgKmludG5hbWU7CisgIHN0cnVjdCBpcmVjICppZmFjZTsKKyNpZmRlZiBIQVZFX0FVVEgKKyAgc3RydWN0IGF1dGhfem9uZSAqem9uZTsKKyNlbmRpZgorCisgIC8qIERvIHRoaXMgbWF4IG9uY2UgcGVyIHNlbGVjdCBjeWNsZSAgLSBhbHNvIGluaGliaXRzIG5ldGxpbmsgc29ja2V0IHVzZQorICAgaW4gVENQIGNoaWxkIHByb2Nlc3Nlcy4gKi8KKworICBpZiAocmVzZXQpCisgICAgeworICAgICAgZG9uZSA9IDA7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgaWYgKGRvbmUpCisgICAgcmV0dXJuIDE7CisKKyAgZG9uZSA9IDE7CisKKyAgaWYgKChwYXJhbS5mZCA9IHNvY2tldChQRl9JTkVULCBTT0NLX0RHUkFNLCAwKSkgPT0gLTEpCisgICAgcmV0dXJuIDA7CisgCisgIC8qIE1hcmsgaW50ZXJmYWNlcyBmb3IgZ2FyYmFnZSBjb2xsZWN0aW9uICovCisgIGZvciAoaWZhY2UgPSBkYWVtb24tPmludGVyZmFjZXM7IGlmYWNlOyBpZmFjZSA9IGlmYWNlLT5uZXh0KSAKKyAgICBpZmFjZS0+Zm91bmQgPSAwOworCisgIC8qIHJlbW92ZSBhZGRyZXNzZXMgc3RvcmVkIGFnYWluc3QgaW50ZXJmYWNlX25hbWVzICovCisgIGZvciAoaW50bmFtZSA9IGRhZW1vbi0+aW50X25hbWVzOyBpbnRuYW1lOyBpbnRuYW1lID0gaW50bmFtZS0+bmV4dCkKKyAgICB7CisgICAgICBmb3IgKGFkZHIgPSBpbnRuYW1lLT5hZGRyOyBhZGRyOyBhZGRyID0gdG1wKQorCXsKKwkgIHRtcCA9IGFkZHItPm5leHQ7CisJICBhZGRyLT5uZXh0ID0gc3BhcmU7CisJICBzcGFyZSA9IGFkZHI7CisJfQorICAgICAgCisgICAgICBpbnRuYW1lLT5hZGRyID0gTlVMTDsKKyAgICB9CisKKyAgLyogUmVtb3ZlIGxpc3Qgb2YgYWRkcmVzc2VzIG9mIGxvY2FsIGludGVyZmFjZXMgKi8KKyAgZm9yIChhZGRyID0gZGFlbW9uLT5pbnRlcmZhY2VfYWRkcnM7IGFkZHI7IGFkZHIgPSB0bXApCisgICAgeworICAgICAgdG1wID0gYWRkci0+bmV4dDsKKyAgICAgIGFkZHItPm5leHQgPSBzcGFyZTsKKyAgICAgIHNwYXJlID0gYWRkcjsKKyAgICB9CisgIGRhZW1vbi0+aW50ZXJmYWNlX2FkZHJzID0gTlVMTDsKKyAgCisjaWZkZWYgSEFWRV9BVVRICisgIC8qIHJlbW92ZSBhZGRyZXNzZXMgc3RvcmVkIGFnYWluc3QgYXV0aF96b25lIHN1Ym5ldHMsIGJ1dCBub3QgCisgICBvbmVzIGNvbmZpZ3VyZWQgYXMgYWRkcmVzcyBsaXRlcmFscyAqLworICBmb3IgKHpvbmUgPSBkYWVtb24tPmF1dGhfem9uZXM7IHpvbmU7IHpvbmUgPSB6b25lLT5uZXh0KQorICAgIGlmICh6b25lLT5pbnRlcmZhY2VfbmFtZXMpCisgICAgICB7CisJc3RydWN0IGFkZHJsaXN0ICoqdXA7CisJZm9yICh1cCA9ICZ6b25lLT5zdWJuZXQsIGFkZHIgPSB6b25lLT5zdWJuZXQ7IGFkZHI7IGFkZHIgPSB0bXApCisJICB7CisJICAgIHRtcCA9IGFkZHItPm5leHQ7CisJICAgIGlmIChhZGRyLT5mbGFncyAmIEFERFJMSVNUX0xJVEVSQUwpCisJICAgICAgdXAgPSAmYWRkci0+bmV4dDsKKwkgICAgZWxzZQorCSAgICAgIHsKKwkJKnVwID0gYWRkci0+bmV4dDsKKwkJYWRkci0+bmV4dCA9IHNwYXJlOworCQlzcGFyZSA9IGFkZHI7CisJICAgICAgfQorCSAgfQorICAgICAgfQorI2VuZGlmCisKKyAgcGFyYW0uc3BhcmUgPSBzcGFyZTsKKyAgCisjaWZkZWYgSEFWRV9JUFY2CisgIHJldCA9IGlmYWNlX2VudW1lcmF0ZShBRl9JTkVUNiwgJnBhcmFtLCBpZmFjZV9hbGxvd2VkX3Y2KTsKKyNlbmRpZgorCisgIGlmIChyZXQpCisgICAgcmV0ID0gaWZhY2VfZW51bWVyYXRlKEFGX0lORVQsICZwYXJhbSwgaWZhY2VfYWxsb3dlZF92NCk7IAorIAorICBlcnJzYXZlID0gZXJybm87CisgIGNsb3NlKHBhcmFtLmZkKTsKKyAgCisgIGlmIChvcHRpb25fYm9vbChPUFRfQ0xFVkVSQklORCkpCisgICAgeyAKKyAgICAgIC8qIEdhcmJhZ2UtY29sbGVjdCBsaXN0ZW5lcnMgbGlzdGVuaW5nIG9uIGFkZHJlc3NlcyB0aGF0IG5vIGxvbmdlciBleGlzdC4KKwkgRG9lcyBub3RoaW5nIHdoZW4gbm90IGJpbmRpbmcgaW50ZXJmYWNlcyBvciBmb3IgbGlzdGVuZXJzIG9uIGxvY2FsaG9zdCwgCisJIHNpbmNlIHRoZSAtPmlmYWNlIGZpZWxkIGlzIE5VTEwuIE5vdGUgdGhhdCB0aGlzIG5lZWRzIHRoZSBwcm90ZWN0aW9ucworCSBhZ2FpbnN0IHJlZW50cmFuY3ksIGhlbmNlIGl0J3MgaGVyZS4gIEl0IGFsc28gbWVhbnMgdGhlcmUncyBhIHBvc3NpYmlsaXR5LAorCSBpbiBPUFRfQ0xFVkVSQklORCBtb2RlLCB0aGF0IGF0IGxpc3RlbmVyIHdpbGwganVzdCBkaXNhcHBlYXIgYWZ0ZXIKKwkgYSBjYWxsIHRvIGVudW1lcmF0ZV9pbnRlcmZhY2VzLCB0aGlzIGlzIGNoZWNrZWQgT0sgb24gYWxsIGNhbGxzLiAqLworICAgICAgc3RydWN0IGxpc3RlbmVyICpsLCAqdG1wLCAqKnVwOworICAgICAgCisgICAgICBmb3IgKHVwID0gJmRhZW1vbi0+bGlzdGVuZXJzLCBsID0gZGFlbW9uLT5saXN0ZW5lcnM7IGw7IGwgPSB0bXApCisJeworCSAgdG1wID0gbC0+bmV4dDsKKwkgIAorCSAgaWYgKCFsLT5pZmFjZSB8fCBsLT5pZmFjZS0+Zm91bmQpCisJICAgIHVwID0gJmwtPm5leHQ7CisJICBlbHNlCisJICAgIHsKKwkgICAgICAqdXAgPSBsLT5uZXh0OworCSAgICAgIAorCSAgICAgIC8qIEluIGNhc2UgaXQgZXZlciByZXR1cm5zICovCisJICAgICAgbC0+aWZhY2UtPmRvbmUgPSAwOworCSAgICAgIAorCSAgICAgIGlmIChsLT5mZCAhPSAtMSkKKwkJY2xvc2UobC0+ZmQpOworCSAgICAgIGlmIChsLT50Y3BmZCAhPSAtMSkKKwkJY2xvc2UobC0+dGNwZmQpOworCSAgICAgIGlmIChsLT50ZnRwZmQgIT0gLTEpCisJCWNsb3NlKGwtPnRmdHBmZCk7CisJICAgICAgCisJICAgICAgZnJlZShsKTsKKwkgICAgfQorCX0KKyAgICB9CisgIAorICBlcnJubyA9IGVycnNhdmU7CisgIHNwYXJlID0gcGFyYW0uc3BhcmU7CisgICAgCisgIHJldHVybiByZXQ7Cit9CisKKy8qIHNldCBOT05CTE9DSyBiaXQgb24gZmQ6IFNlZSBTdGV2ZW5zIDE2LjYgKi8KK2ludCBmaXhfZmQoaW50IGZkKQoreworICBpbnQgZmxhZ3M7CisKKyAgaWYgKChmbGFncyA9IGZjbnRsKGZkLCBGX0dFVEZMKSkgPT0gLTEgfHwKKyAgICAgIGZjbnRsKGZkLCBGX1NFVEZMLCBmbGFncyB8IE9fTk9OQkxPQ0spID09IC0xKQorICAgIHJldHVybiAwOworICAKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgbWFrZV9zb2NrKHVuaW9uIG15c29ja2FkZHIgKmFkZHIsIGludCB0eXBlLCBpbnQgZGllbm93KQoreworICBpbnQgZmFtaWx5ID0gYWRkci0+c2Euc2FfZmFtaWx5OworICBpbnQgZmQsIHJjLCBvcHQgPSAxOworICAKKyAgaWYgKChmZCA9IHNvY2tldChmYW1pbHksIHR5cGUsIDApKSA9PSAtMSkKKyAgICB7CisgICAgICBpbnQgcG9ydCwgZXJyc2F2ZTsKKyAgICAgIGNoYXIgKnM7CisKKyAgICAgIC8qIE5vIGVycm9yIGlmIHRoZSBrZXJuZWwganVzdCBkb2Vzbid0IHN1cHBvcnQgdGhpcyBJUCBmbGF2b3VyICovCisgICAgICBpZiAoZXJybm8gPT0gRVBST1RPTk9TVVBQT1JUIHx8CisJICBlcnJubyA9PSBFQUZOT1NVUFBPUlQgfHwKKwkgIGVycm5vID09IEVJTlZBTCkKKwlyZXR1cm4gLTE7CisgICAgICAKKyAgICBlcnI6CisgICAgICBlcnJzYXZlID0gZXJybm87CisgICAgICBwb3J0ID0gcHJldHR5cHJpbnRfYWRkcihhZGRyLCBkYWVtb24tPmFkZHJidWZmKTsKKyAgICAgIGlmICghb3B0aW9uX2Jvb2woT1BUX05PV0lMRCkgJiYgIW9wdGlvbl9ib29sKE9QVF9DTEVWRVJCSU5EKSkKKwlzcHJpbnRmKGRhZW1vbi0+YWRkcmJ1ZmYsICJwb3J0ICVkIiwgcG9ydCk7CisgICAgICBzID0gXygiZmFpbGVkIHRvIGNyZWF0ZSBsaXN0ZW5pbmcgc29ja2V0IGZvciAlczogJXMiKTsKKyAgICAgIAorICAgICAgaWYgKGZkICE9IC0xKQorCWNsb3NlIChmZCk7CisJCisgICAgICBlcnJubyA9IGVycnNhdmU7CisKKyAgICAgIGlmIChkaWVub3cpCisJeworCSAgLyogZmFpbHVyZSB0byBiaW5kIGFkZHJlc3NlcyBnaXZlbiBieSAtLWxpc3Rlbi1hZGRyZXNzIGF0IHRoaXMgcG9pbnQKKwkgICAgIGlzIE9LIGlmIHdlJ3JlIGRvaW5nIGJpbmQtZHluYW1pYyAqLworCSAgaWYgKCFvcHRpb25fYm9vbChPUFRfQ0xFVkVSQklORCkpCisJICAgIGRpZShzLCBkYWVtb24tPmFkZHJidWZmLCBFQ19CQURORVQpOworCX0KKyAgICAgIGVsc2UKKwlteV9zeXNsb2coTE9HX1dBUk5JTkcsIHMsIGRhZW1vbi0+YWRkcmJ1ZmYsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CQorICAKKyAgaWYgKHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgJm9wdCwgc2l6ZW9mKG9wdCkpID09IC0xIHx8ICFmaXhfZmQoZmQpKQorICAgIGdvdG8gZXJyOworICAKKyNpZmRlZiBIQVZFX0lQVjYKKyAgaWYgKGZhbWlseSA9PSBBRl9JTkVUNiAmJiBzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX0lQVjYsIElQVjZfVjZPTkxZLCAmb3B0LCBzaXplb2Yob3B0KSkgPT0gLTEpCisgICAgZ290byBlcnI7CisjZW5kaWYKKyAgCisgIGlmICgocmMgPSBiaW5kKGZkLCAoc3RydWN0IHNvY2thZGRyICopYWRkciwgc2FfbGVuKGFkZHIpKSkgPT0gLTEpCisgICAgZ290byBlcnI7CisgIAorICBpZiAodHlwZSA9PSBTT0NLX1NUUkVBTSkKKyAgICB7CisgICAgICBpZiAobGlzdGVuKGZkLCBUQ1BfQkFDS0xPRykgPT0gLTEpCisJZ290byBlcnI7CisgICAgfQorICBlbHNlIGlmIChmYW1pbHkgPT0gQUZfSU5FVCkKKyAgICB7CisgICAgICBpZiAoIW9wdGlvbl9ib29sKE9QVF9OT1dJTEQpKQorCXsKKyNpZiBkZWZpbmVkKEhBVkVfTElOVVhfTkVUV09SSykgCisJICBpZiAoc2V0c29ja29wdChmZCwgSVBQUk9UT19JUCwgSVBfUEtUSU5GTywgJm9wdCwgc2l6ZW9mKG9wdCkpID09IC0xKQorCSAgICBnb3RvIGVycjsKKyNlbGlmIGRlZmluZWQoSVBfUkVDVkRTVEFERFIpICYmIGRlZmluZWQoSVBfUkVDVklGKQorCSAgaWYgKHNldHNvY2tvcHQoZmQsIElQUFJPVE9fSVAsIElQX1JFQ1ZEU1RBRERSLCAmb3B0LCBzaXplb2Yob3B0KSkgPT0gLTEgfHwKKwkgICAgICBzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX0lQLCBJUF9SRUNWSUYsICZvcHQsIHNpemVvZihvcHQpKSA9PSAtMSkKKwkgICAgZ290byBlcnI7CisjZW5kaWYKKwl9CisgICAgfQorI2lmZGVmIEhBVkVfSVBWNgorICBlbHNlIGlmICghc2V0X2lwdjZwa3RpbmZvKGZkKSkKKyAgICBnb3RvIGVycjsKKyNlbmRpZgorICAKKyAgcmV0dXJuIGZkOworfQorCisjaWZkZWYgSEFWRV9JUFY2ICAKK2ludCBzZXRfaXB2NnBrdGluZm8oaW50IGZkKQoreworICBpbnQgb3B0ID0gMTsKKworICAvKiBUaGUgQVBJIGNoYW5nZWQgYXJvdW5kIExpbnV4IDIuNi4xNCBidXQgdGhlIG9sZCBBQkkgaXMgc3RpbGwgc3VwcG9ydGVkOgorICAgICBoYW5kbGUgYWxsIGNvbWJpbmF0aW9ucyBvZiBoZWFkZXJzIGFuZCBrZXJuZWwuCisgICAgIE9wZW5XcnQgbm90ZSB0aGF0IHRoaXMgZml4ZXMgdGhlIHByb2JsZW0gYWRkcmVzc2VkIGJ5IHlvdXIgdmVyeSBicm9rZW4gcGF0Y2guICovCisgIGRhZW1vbi0+djZwa3RpbmZvID0gSVBWNl9QS1RJTkZPOworICAKKyNpZmRlZiBJUFY2X1JFQ1ZQS1RJTkZPCisgIGlmIChzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX0lQVjYsIElQVjZfUkVDVlBLVElORk8sICZvcHQsIHNpemVvZihvcHQpKSAhPSAtMSkKKyAgICByZXR1cm4gMTsKKyMgaWZkZWYgSVBWNl8yMjkyUEtUSU5GTworICBlbHNlIGlmIChlcnJubyA9PSBFTk9QUk9UT09QVCAmJiBzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX0lQVjYsIElQVjZfMjI5MlBLVElORk8sICZvcHQsIHNpemVvZihvcHQpKSAhPSAtMSkKKyAgICB7CisgICAgICBkYWVtb24tPnY2cGt0aW5mbyA9IElQVjZfMjI5MlBLVElORk87CisgICAgICByZXR1cm4gMTsKKyAgICB9CisjIGVuZGlmIAorI2Vsc2UKKyAgaWYgKHNldHNvY2tvcHQoZmQsIElQUFJPVE9fSVBWNiwgSVBWNl9QS1RJTkZPLCAmb3B0LCBzaXplb2Yob3B0KSkgIT0gLTEpCisgICAgcmV0dXJuIDE7CisjZW5kaWYKKworICByZXR1cm4gMDsKK30KKyNlbmRpZgorCisKKy8qIEZpbmQgdGhlIGludGVyZmFjZSBvbiB3aGljaCBhIFRDUCBjb25uZWN0aW9uIGFycml2ZWQsIGlmIHBvc3NpYmxlLCBvciB6ZXJvIG90aGVyd2lzZS4gKi8KK2ludCB0Y3BfaW50ZXJmYWNlKGludCBmZCwgaW50IGFmKQoreyAKKyAgaW50IGlmX2luZGV4ID0gMDsKKworI2lmZGVmIEhBVkVfTElOVVhfTkVUV09SSworICBpbnQgb3B0ID0gMTsKKyAgc3RydWN0IGNtc2doZHIgKmNtcHRyOworICBzdHJ1Y3QgbXNnaGRyIG1zZzsKKyAgc29ja2xlbl90IGxlbjsKKyAgCisgIC8qIHVzZSBtc2hkciBzbyB0aGF0IHRoZSBDTVNER18qIG1hY3JvcyBhcmUgYXZhaWxhYmxlICovCisgIG1zZy5tc2dfY29udHJvbCA9IGRhZW1vbi0+cGFja2V0OworICBtc2cubXNnX2NvbnRyb2xsZW4gPSBsZW4gPSBkYWVtb24tPnBhY2tldF9idWZmX3N6OworICAKKyAgLyogd2Ugb3Zlcndyb3RlIHRoZSBidWZmZXIuLi4gKi8KKyAgZGFlbW9uLT5zcnZfc2F2ZSA9IE5VTEw7CisgIAorICBpZiAoYWYgPT0gQUZfSU5FVCkKKyAgICB7CisgICAgICBpZiAoc2V0c29ja29wdChmZCwgSVBQUk9UT19JUCwgSVBfUEtUSU5GTywgJm9wdCwgc2l6ZW9mKG9wdCkpICE9IC0xICYmCisJICBnZXRzb2Nrb3B0KGZkLCBJUFBST1RPX0lQLCBJUF9QS1RPUFRJT05TLCBtc2cubXNnX2NvbnRyb2wsICZsZW4pICE9IC0xKQorCXsKKwkgIG1zZy5tc2dfY29udHJvbGxlbiA9IGxlbjsKKwkgIGZvciAoY21wdHIgPSBDTVNHX0ZJUlNUSERSKCZtc2cpOyBjbXB0cjsgY21wdHIgPSBDTVNHX05YVEhEUigmbXNnLCBjbXB0cikpCisJICAgIGlmIChjbXB0ci0+Y21zZ19sZXZlbCA9PSBJUFBST1RPX0lQICYmIGNtcHRyLT5jbXNnX3R5cGUgPT0gSVBfUEtUSU5GTykKKwkgICAgICB7CisJCXVuaW9uIHsKKwkJICB1bnNpZ25lZCBjaGFyICpjOworCQkgIHN0cnVjdCBpbl9wa3RpbmZvICpwOworCQl9IHA7CisJCQorCQlwLmMgPSBDTVNHX0RBVEEoY21wdHIpOworCQlpZl9pbmRleCA9IHAucC0+aXBpX2lmaW5kZXg7CisJICAgICAgfQorCX0KKyAgICB9CisjaWZkZWYgSEFWRV9JUFY2CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBPbmx5IHRoZSBSRkMtMjI5MiBBUEkgaGFzIHRoZSBhYmlsaXR5IHRvIGZpbmQgdGhlIGludGVyZmFjZSBmb3IgVENQIGNvbm5lY3Rpb25zLAorCSBpdCB3YXMgcmVtb3ZlZCBpbiBSRkMtMzU0MiAhISEhIAorCisJIEZvcnR1bmF0ZWx5LCBMaW51eCBrZXB0IHRoZSAyMjkyIEFCSSB3aGVuIGl0IG1vdmVkIHRvIDM1NDIuIFRoZSBmb2xsb3dpbmcgY29kZSBhbHdheXMKKwkgdXNlcyB0aGUgb2xkIEFCSSwgYW5kIHNob3VsZCB3b3JrIHdpdGggcHJlLSBhbmQgcG9zdC0zNTQyIGtlcm5lbCBoZWFkZXJzICovCisKKyNpZmRlZiBJUFY2XzIyOTJQS1RPUFRJT05TICAgCisjICBkZWZpbmUgUEtUT1BUSU9OUyBJUFY2XzIyOTJQS1RPUFRJT05TCisjZWxzZQorIyAgZGVmaW5lIFBLVE9QVElPTlMgSVBWNl9QS1RPUFRJT05TCisjZW5kaWYKKworICAgICAgaWYgKHNldF9pcHY2cGt0aW5mbyhmZCkgJiYKKwkgIGdldHNvY2tvcHQoZmQsIElQUFJPVE9fSVBWNiwgUEtUT1BUSU9OUywgbXNnLm1zZ19jb250cm9sLCAmbGVuKSAhPSAtMSkKKwl7CisgICAgICAgICAgbXNnLm1zZ19jb250cm9sbGVuID0gbGVuOworCSAgZm9yIChjbXB0ciA9IENNU0dfRklSU1RIRFIoJm1zZyk7IGNtcHRyOyBjbXB0ciA9IENNU0dfTlhUSERSKCZtc2csIGNtcHRyKSkKKyAgICAgICAgICAgIGlmIChjbXB0ci0+Y21zZ19sZXZlbCA9PSBJUFBST1RPX0lQVjYgJiYgY21wdHItPmNtc2dfdHlwZSA9PSBkYWVtb24tPnY2cGt0aW5mbykKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmM7CisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaW42X3BrdGluZm8gKnA7CisgICAgICAgICAgICAgICAgfSBwOworICAgICAgICAgICAgICAgIHAuYyA9IENNU0dfREFUQShjbXB0cik7CisJCQorCQlpZl9pbmRleCA9IHAucC0+aXBpNl9pZmluZGV4OworICAgICAgICAgICAgICB9CisJfQorICAgIH0KKyNlbmRpZiAvKiBJUFY2ICovCisjZW5kaWYgLyogTGludXggKi8KKyAKKyAgcmV0dXJuIGlmX2luZGV4OworfQorICAgICAgCitzdGF0aWMgc3RydWN0IGxpc3RlbmVyICpjcmVhdGVfbGlzdGVuZXJzKHVuaW9uIG15c29ja2FkZHIgKmFkZHIsIGludCBkb190ZnRwLCBpbnQgZGllbm93KQoreworICBzdHJ1Y3QgbGlzdGVuZXIgKmwgPSBOVUxMOworICBpbnQgZmQgPSAtMSwgdGNwZmQgPSAtMSwgdGZ0cGZkID0gLTE7CisKKyAgKHZvaWQpZG9fdGZ0cDsKKworICBpZiAoZGFlbW9uLT5wb3J0ICE9IDApCisgICAgeworICAgICAgZmQgPSBtYWtlX3NvY2soYWRkciwgU09DS19ER1JBTSwgZGllbm93KTsKKyAgICAgIHRjcGZkID0gbWFrZV9zb2NrKGFkZHIsIFNPQ0tfU1RSRUFNLCBkaWVub3cpOworICAgIH0KKyAgCisjaWZkZWYgSEFWRV9URlRQCisgIGlmIChkb190ZnRwKQorICAgIHsKKyAgICAgIGlmIChhZGRyLT5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCkKKwl7CisJICAvKiBwb3J0IG11c3QgYmUgcmVzdG9yZWQgdG8gRE5TIHBvcnQgZm9yIFRDUCBjb2RlICovCisJICBzaG9ydCBzYXZlID0gYWRkci0+aW4uc2luX3BvcnQ7CisJICBhZGRyLT5pbi5zaW5fcG9ydCA9IGh0b25zKFRGVFBfUE9SVCk7CisJICB0ZnRwZmQgPSBtYWtlX3NvY2soYWRkciwgU09DS19ER1JBTSwgZGllbm93KTsKKwkgIGFkZHItPmluLnNpbl9wb3J0ID0gc2F2ZTsKKwl9CisjICBpZmRlZiBIQVZFX0lQVjYKKyAgICAgIGVsc2UKKwl7CisJICBzaG9ydCBzYXZlID0gYWRkci0+aW42LnNpbjZfcG9ydDsKKwkgIGFkZHItPmluNi5zaW42X3BvcnQgPSBodG9ucyhURlRQX1BPUlQpOworCSAgdGZ0cGZkID0gbWFrZV9zb2NrKGFkZHIsIFNPQ0tfREdSQU0sIGRpZW5vdyk7CisJICBhZGRyLT5pbjYuc2luNl9wb3J0ID0gc2F2ZTsKKwl9ICAKKyMgIGVuZGlmCisgICAgfQorI2VuZGlmCisKKyAgaWYgKGZkICE9IC0xIHx8IHRjcGZkICE9IC0xIHx8IHRmdHBmZCAhPSAtMSkKKyAgICB7CisgICAgICBsID0gc2FmZV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBsaXN0ZW5lcikpOworICAgICAgbC0+bmV4dCA9IE5VTEw7CisgICAgICBsLT5mYW1pbHkgPSBhZGRyLT5zYS5zYV9mYW1pbHk7CisgICAgICBsLT5mZCA9IGZkOworICAgICAgbC0+dGNwZmQgPSB0Y3BmZDsKKyAgICAgIGwtPnRmdHBmZCA9IHRmdHBmZDsJCisgICAgICBsLT5pZmFjZSA9IE5VTEw7CisgICAgfQorCisgIHJldHVybiBsOworfQorCit2b2lkIGNyZWF0ZV93aWxkY2FyZF9saXN0ZW5lcnModm9pZCkKK3sKKyAgdW5pb24gbXlzb2NrYWRkciBhZGRyOworICBzdHJ1Y3QgbGlzdGVuZXIgKmwsICpsNjsKKworICBtZW1zZXQoJmFkZHIsIDAsIHNpemVvZihhZGRyKSk7CisjaWZkZWYgSEFWRV9TT0NLQUREUl9TQV9MRU4KKyAgYWRkci5pbi5zaW5fbGVuID0gc2l6ZW9mKGFkZHIuaW4pOworI2VuZGlmCisgIGFkZHIuaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7CisgIGFkZHIuaW4uc2luX2FkZHIuc19hZGRyID0gSU5BRERSX0FOWTsKKyAgYWRkci5pbi5zaW5fcG9ydCA9IGh0b25zKGRhZW1vbi0+cG9ydCk7CisKKyAgbCA9IGNyZWF0ZV9saXN0ZW5lcnMoJmFkZHIsICEhb3B0aW9uX2Jvb2woT1BUX1RGVFApLCAxKTsKKworI2lmZGVmIEhBVkVfSVBWNgorICBtZW1zZXQoJmFkZHIsIDAsIHNpemVvZihhZGRyKSk7CisjICBpZmRlZiBIQVZFX1NPQ0tBRERSX1NBX0xFTgorICBhZGRyLmluNi5zaW42X2xlbiA9IHNpemVvZihhZGRyLmluNik7CisjICBlbmRpZgorICBhZGRyLmluNi5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworICBhZGRyLmluNi5zaW42X2FkZHIgPSBpbjZhZGRyX2FueTsKKyAgYWRkci5pbjYuc2luNl9wb3J0ID0gaHRvbnMoZGFlbW9uLT5wb3J0KTsKKyAKKyAgbDYgPSBjcmVhdGVfbGlzdGVuZXJzKCZhZGRyLCAhIW9wdGlvbl9ib29sKE9QVF9URlRQKSwgMSk7CisgIGlmIChsKSAKKyAgICBsLT5uZXh0ID0gbDY7CisgIGVsc2UgCisgICAgbCA9IGw2OworI2VuZGlmCisKKyAgZGFlbW9uLT5saXN0ZW5lcnMgPSBsOworfQorCit2b2lkIGNyZWF0ZV9ib3VuZF9saXN0ZW5lcnMoaW50IGRpZW5vdykKK3sKKyAgc3RydWN0IGxpc3RlbmVyICpuZXc7CisgIHN0cnVjdCBpcmVjICppZmFjZTsKKyAgc3RydWN0IGluYW1lICppZl90bXA7CisKKyAgZm9yIChpZmFjZSA9IGRhZW1vbi0+aW50ZXJmYWNlczsgaWZhY2U7IGlmYWNlID0gaWZhY2UtPm5leHQpCisgICAgaWYgKCFpZmFjZS0+ZG9uZSAmJiAhaWZhY2UtPmRhZCAmJiBpZmFjZS0+Zm91bmQgJiYKKwkobmV3ID0gY3JlYXRlX2xpc3RlbmVycygmaWZhY2UtPmFkZHIsIGlmYWNlLT50ZnRwX29rLCBkaWVub3cpKSkKKyAgICAgIHsKKwluZXctPmlmYWNlID0gaWZhY2U7CisJbmV3LT5uZXh0ID0gZGFlbW9uLT5saXN0ZW5lcnM7CisJZGFlbW9uLT5saXN0ZW5lcnMgPSBuZXc7CisJaWZhY2UtPmRvbmUgPSAxOworICAgICAgfQorCisgIC8qIENoZWNrIGZvciAtLWxpc3Rlbi1hZGRyZXNzIG9wdGlvbnMgdGhhdCBoYXZlbid0IGJlZW4gdXNlZCBiZWNhdXNlIHRoZXJlJ3MKKyAgICAgbm8gaW50ZXJmYWNlIHdpdGggYSBtYXRjaGluZyBhZGRyZXNzLiBUaGVzZSBtYXkgYmUgdmFsaWQ6IGVnIGl0J3MgcG9zc2libGUKKyAgICAgdG8gbGlzdGVuIG9uIDEyNy4wLjEuMSBldmVuIGlmIHRoZSBsb29wYmFjayBpbnRlcmZhY2UgaXMgMTI3LjAuMC4xCisKKyAgICAgSWYgdGhlIGFkZHJlc3MgaXNuJ3QgdmFsaWQgdGhlIGJpbmQoKSB3aWxsIGZhaWwgYW5kIHdlJ2xsIGRpZSgpIAorICAgICAoZXhjZXB0IGluIGJpbmQtZHluYW1pYyBtb2RlLCB3aGVuIHdlJ2xsIGNvbXBsYWluIGJ1dCBrZWVwIHRyeWluZy4pCisKKyAgICAgVGhlIHJlc3VsdGluZyBsaXN0ZW5lcnMgaGF2ZSB0aGUgLT5pZmFjZSBmaWVsZCBOVUxMLCBhbmQgdGhpcyBoYXMgdG8gYmUKKyAgICAgaGFuZGxlZCBieSB0aGUgRE5TIGFuZCBURlRQIGNvZGUuIEl0IGRpc2FibGVzIC0tbG9jYWxpc2UtcXVlcmllcyBwcm9jZXNzaW5nCisgICAgIChubyBuZXRtYXNrKSBhbmQgc29tZSBNVFUgbG9naW4gdGhlIHRmdHAgY29kZS4gKi8KKworICBmb3IgKGlmX3RtcCA9IGRhZW1vbi0+aWZfYWRkcnM7IGlmX3RtcDsgaWZfdG1wID0gaWZfdG1wLT5uZXh0KQorICAgIGlmICghaWZfdG1wLT51c2VkICYmIAorCShuZXcgPSBjcmVhdGVfbGlzdGVuZXJzKCZpZl90bXAtPmFkZHIsICEhb3B0aW9uX2Jvb2woT1BUX1RGVFApLCBkaWVub3cpKSkKKyAgICAgIHsKKwluZXctPm5leHQgPSBkYWVtb24tPmxpc3RlbmVyczsKKwlkYWVtb24tPmxpc3RlbmVycyA9IG5ldzsKKyAgICAgIH0KK30KKworLyogSW4gLS1iaW5kLWludGVyZmFjZXMsIHRoZSBvbmx5IGFjY2VzcyBjb250cm9sIGlzIHRoZSBhZGRyZXNzZXMgd2UncmUgbGlzdGVuaW5nIG9uLiAKKyAgIFRoZXJlJ3Mgbm90aGluZyB0byBhdm9pZCBhIHF1ZXJ5IHRvIHRoZSBhZGRyZXNzIG9mIGFuIGludGVybmFsIGludGVyZmFjZSBhcnJpdmluZyB2aWEKKyAgIGFuIGV4dGVybmFsIGludGVyZmFjZSB3aGVyZSB3ZSBkb24ndCB3YW50IHRvIGFjY2VwdCBxdWVyaWVzLCBleGNlcHQgdGhhdCBpbiB0aGUgdXN1YWwgCisgICBjYXNlIHRoZSBhZGRyZXNzZXMgb2YgaW50ZXJuYWwgaW50ZXJmYWNlcyBhcmUgUkZDMTkxOC4gV2hlbiBiaW5kLWludGVyZmFjZXMgaW4gdXNlLCAKKyAgIGFuZCB3ZSBsaXN0ZW4gb24gYW4gYWRkcmVzcyB0aGF0IGxvb2tzIGxpa2UgaXQncyBwcm9iYWJseSBnbG9iYWxseSByb3V0ZWFibGUsIHNob3V0LgorCisgICBUaGUgZml4IGlzIHRvIHVzZSAtLWJpbmQtZHluYW1pYywgd2hpY2ggYWN0dWFsbHkgY2hlY2tzIHRoZSBhcnJpdmFsIGludGVyZmFjZSB0b28uCisgICBUb3VnaCBpZiB5b3VyIHBsYXRmb3JtIGRvZXNuJ3Qgc3VwcG9ydCB0aGlzLgorCisgICBOb3RlIHRoYXQgY2hlY2tpbmcgdGhlIGFycml2YWwgaW50ZXJmYWNlIGlzIHN1cHBvcnRlZCBpbiB0aGUgc3RhbmRhcmQgSVB2NiBBUEkgYW5kCisgICBhbHdheXMgZG9uZSwgc28gd2UgZG9uJ3Qgd2FybiBhYm91dCBhbnkgSVB2NiBhZGRyZXNzZXMgaGVyZS4KKyovCisKK3ZvaWQgd2Fybl9ib3VuZF9saXN0ZW5lcnModm9pZCkKK3sKKyAgc3RydWN0IGlyZWMgKmlmYWNlOyAJCisgIGludCBhZHZpY2UgPSAwOworCisgIGZvciAoaWZhY2UgPSBkYWVtb24tPmludGVyZmFjZXM7IGlmYWNlOyBpZmFjZSA9IGlmYWNlLT5uZXh0KQorICAgIGlmICghaWZhY2UtPmRuc19hdXRoKQorICAgICAgeworCWlmIChpZmFjZS0+YWRkci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCkKKwkgIHsKKwkgICAgaWYgKCFwcml2YXRlX25ldChpZmFjZS0+YWRkci5pbi5zaW5fYWRkciwgMSkpCisJICAgICAgeworCQlpbmV0X250b3AoQUZfSU5FVCwgJmlmYWNlLT5hZGRyLmluLnNpbl9hZGRyLCBkYWVtb24tPmFkZHJidWZmLCBBRERSU1RSTEVOKTsKKwkJaWZhY2UtPndhcm5lZCA9IGFkdmljZSA9IDE7CisJCW15X3N5c2xvZyhMT0dfV0FSTklORywgCisJCQkgIF8oIkxPVUQgV0FSTklORzogbGlzdGVuaW5nIG9uICVzIG1heSBhY2NlcHQgcmVxdWVzdHMgdmlhIGludGVyZmFjZXMgb3RoZXIgdGhhbiAlcyIpLAorCQkJICBkYWVtb24tPmFkZHJidWZmLCBpZmFjZS0+bmFtZSk7CisJICAgICAgfQorCSAgfQorICAgICAgfQorICAKKyAgaWYgKGFkdmljZSkKKyAgICBteV9zeXNsb2coTE9HX1dBUk5JTkcsIF8oIkxPVUQgV0FSTklORzogdXNlIC0tYmluZC1keW5hbWljIHJhdGhlciB0aGFuIC0tYmluZC1pbnRlcmZhY2VzIHRvIGF2b2lkIEROUyBhbXBsaWZpY2F0aW9uIGF0dGFja3MgdmlhIHRoZXNlIGludGVyZmFjZShzKSIpKTsgCit9CisKK3ZvaWQgd2Fybl93aWxkX2xhYmVscyh2b2lkKQoreworICBzdHJ1Y3QgaXJlYyAqaWZhY2U7CisKKyAgZm9yIChpZmFjZSA9IGRhZW1vbi0+aW50ZXJmYWNlczsgaWZhY2U7IGlmYWNlID0gaWZhY2UtPm5leHQpCisgICAgaWYgKGlmYWNlLT5mb3VuZCAmJiBpZmFjZS0+bmFtZSAmJiBpZmFjZS0+bGFiZWwpCisgICAgICBteV9zeXNsb2coTE9HX1dBUk5JTkcsIF8oIndhcm5pbmc6IHVzaW5nIGludGVyZmFjZSAlcyBpbnN0ZWFkIiksIGlmYWNlLT5uYW1lKTsKK30KKwordm9pZCB3YXJuX2ludF9uYW1lcyh2b2lkKQoreworICBzdHJ1Y3QgaW50ZXJmYWNlX25hbWUgKmludG5hbWU7CisgCisgIGZvciAoaW50bmFtZSA9IGRhZW1vbi0+aW50X25hbWVzOyBpbnRuYW1lOyBpbnRuYW1lID0gaW50bmFtZS0+bmV4dCkKKyAgICBpZiAoIWludG5hbWUtPmFkZHIpCisgICAgICBteV9zeXNsb2coTE9HX1dBUk5JTkcsIF8oIndhcm5pbmc6IG5vIGFkZHJlc3NlcyBmb3VuZCBmb3IgaW50ZXJmYWNlICVzIiksIGludG5hbWUtPmludHIpOworfQorIAoraW50IGlzX2RhZF9saXN0ZW5lcnModm9pZCkKK3sKKyAgc3RydWN0IGlyZWMgKmlmYWNlOworICAKKyAgaWYgKG9wdGlvbl9ib29sKE9QVF9OT1dJTEQpKQorICAgIGZvciAoaWZhY2UgPSBkYWVtb24tPmludGVyZmFjZXM7IGlmYWNlOyBpZmFjZSA9IGlmYWNlLT5uZXh0KQorICAgICAgaWYgKGlmYWNlLT5kYWQgJiYgIWlmYWNlLT5kb25lKQorCXJldHVybiAxOworICAKKyAgcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBIQVZFX0RIQ1A2Cit2b2lkIGpvaW5fbXVsdGljYXN0KGludCBkaWVub3cpICAgICAgCit7CisgIHN0cnVjdCBpcmVjICppZmFjZSwgKnRtcDsKKworICBmb3IgKGlmYWNlID0gZGFlbW9uLT5pbnRlcmZhY2VzOyBpZmFjZTsgaWZhY2UgPSBpZmFjZS0+bmV4dCkKKyAgICBpZiAoaWZhY2UtPmFkZHIuc2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2ICYmIGlmYWNlLT5kaGNwX29rICYmICFpZmFjZS0+bXVsdGljYXN0X2RvbmUpCisgICAgICB7CisJLyogVGhlcmUncyBhbiBpcmVjIHBlciBhZGRyZXNzIGJ1dCB3ZSBvbmx5IHdhbnQgdG8gam9pbiBmb3IgbXVsdGljYXN0IAorCSAgIG9uY2UgcGVyIGludGVyZmFjZS4gV2VlZCBvdXQgZHVwbGljYXRlcy4gKi8KKwlmb3IgKHRtcCA9IGRhZW1vbi0+aW50ZXJmYWNlczsgdG1wOyB0bXAgPSB0bXAtPm5leHQpCisJICBpZiAodG1wLT5tdWx0aWNhc3RfZG9uZSAmJiB0bXAtPmluZGV4ID09IGlmYWNlLT5pbmRleCkKKwkgICAgYnJlYWs7CisJCisJaWZhY2UtPm11bHRpY2FzdF9kb25lID0gMTsKKwkKKwlpZiAoIXRtcCkKKwkgIHsKKwkgICAgc3RydWN0IGlwdjZfbXJlcSBtcmVxOworCSAgICBpbnQgZXJyID0gMDsKKworCSAgICBtcmVxLmlwdjZtcl9pbnRlcmZhY2UgPSBpZmFjZS0+aW5kZXg7CisJICAgIAorCSAgICBpbmV0X3B0b24oQUZfSU5FVDYsIEFMTF9SRUxBWV9BR0VOVFNfQU5EX1NFUlZFUlMsICZtcmVxLmlwdjZtcl9tdWx0aWFkZHIpOworCSAgICAKKwkgICAgaWYgKChkYWVtb24tPmRvaW5nX2RoY3A2IHx8IGRhZW1vbi0+cmVsYXk2KSAmJgorCQlzZXRzb2Nrb3B0KGRhZW1vbi0+ZGhjcDZmZCwgSVBQUk9UT19JUFY2LCBJUFY2X0pPSU5fR1JPVVAsICZtcmVxLCBzaXplb2YobXJlcSkpID09IC0xKQorCSAgICAgIGVyciA9IGVycm5vOworCSAgICAKKwkgICAgaW5ldF9wdG9uKEFGX0lORVQ2LCBBTExfU0VSVkVSUywgJm1yZXEuaXB2Nm1yX211bHRpYWRkcik7CisJICAgIAorCSAgICBpZiAoZGFlbW9uLT5kb2luZ19kaGNwNiAmJiAKKwkJc2V0c29ja29wdChkYWVtb24tPmRoY3A2ZmQsIElQUFJPVE9fSVBWNiwgSVBWNl9KT0lOX0dST1VQLCAmbXJlcSwgc2l6ZW9mKG1yZXEpKSA9PSAtMSkKKwkgICAgICBlcnIgPSBlcnJubzsKKwkgICAgCisJICAgIGluZXRfcHRvbihBRl9JTkVUNiwgQUxMX1JPVVRFUlMsICZtcmVxLmlwdjZtcl9tdWx0aWFkZHIpOworCSAgICAKKwkgICAgaWYgKGRhZW1vbi0+ZG9pbmdfcmEgJiYKKwkJc2V0c29ja29wdChkYWVtb24tPmljbXA2ZmQsIElQUFJPVE9fSVBWNiwgSVBWNl9KT0lOX0dST1VQLCAmbXJlcSwgc2l6ZW9mKG1yZXEpKSA9PSAtMSkKKwkgICAgICBlcnIgPSBlcnJubzsKKwkgICAgCisJICAgIGlmIChlcnIpCisJICAgICAgeworCQljaGFyICpzID0gXygiaW50ZXJmYWNlICVzIGZhaWxlZCB0byBqb2luIERIQ1B2NiBtdWx0aWNhc3QgZ3JvdXA6ICVzIik7CisJCWVycm5vID0gZXJyOworCisjaWZkZWYgSEFWRV9MSU5VWF9ORVRXT1JLCisJCWlmIChlcnJubyA9PSBFTk9NRU0pCisJCSAgbXlfc3lzbG9nKExPR19FUlIsIF8oInRyeSBpbmNyZWFzaW5nIC9wcm9jL3N5cy9uZXQvY29yZS9vcHRtZW1fbWF4IikpOworI2VuZGlmCisKKwkJaWYgKGRpZW5vdykKKwkJICBkaWUocywgaWZhY2UtPm5hbWUsIEVDX0JBRE5FVCk7CisJCWVsc2UKKwkJICBteV9zeXNsb2coTE9HX0VSUiwgcywgaWZhY2UtPm5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJICAgICAgfQorCSAgfQorICAgICAgfQorfQorI2VuZGlmCisKKy8qIHJldHVybiBhIFVEUCBzb2NrZXQgYm91bmQgdG8gYSByYW5kb20gcG9ydCwgaGF2ZSB0byBjb3BlIHdpdGggc3RyYXlpbmcgaW50bworICAgb2NjdXBpZWQgcG9ydCBub3MgYW5kIHJlc2VydmVkIG9uZXMuICovCitpbnQgcmFuZG9tX3NvY2soaW50IGZhbWlseSkKK3sKKyAgaW50IGZkOworCisgIGlmICgoZmQgPSBzb2NrZXQoZmFtaWx5LCBTT0NLX0RHUkFNLCAwKSkgIT0gLTEpCisgICAgeworICAgICAgdW5pb24gbXlzb2NrYWRkciBhZGRyOworICAgICAgdW5zaWduZWQgaW50IHBvcnRzX2F2YWlsID0gKCh1bnNpZ25lZCBzaG9ydClkYWVtb24tPm1heF9wb3J0IC0gKHVuc2lnbmVkIHNob3J0KWRhZW1vbi0+bWluX3BvcnQpICsgMTsKKyAgICAgIGludCB0cmllcyA9IHBvcnRzX2F2YWlsIDwgMzAgPyAzICogcG9ydHNfYXZhaWwgOiAxMDA7CisKKyAgICAgIG1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTsKKyAgICAgIGFkZHIuc2Euc2FfZmFtaWx5ID0gZmFtaWx5OworCisgICAgICAvKiBkb24ndCBsb29wIGZvcmV2ZXIgaWYgYWxsIHBvcnRzIGluIHVzZS4gKi8KKworICAgICAgaWYgKGZpeF9mZChmZCkpCisJd2hpbGUodHJpZXMtLSkKKwkgIHsKKwkgICAgdW5zaWduZWQgc2hvcnQgcG9ydCA9IHJhbmQxNigpOworCSAgICAKKyAgICAgICAgICAgIGlmIChkYWVtb24tPm1pbl9wb3J0ICE9IDAgfHwgZGFlbW9uLT5tYXhfcG9ydCAhPSBNQVhfUE9SVCkKKyAgICAgICAgICAgICAgcG9ydCA9IGh0b25zKGRhZW1vbi0+bWluX3BvcnQgKyAocG9ydCAlICgodW5zaWduZWQgc2hvcnQpcG9ydHNfYXZhaWwpKSk7CisJICAgIAorCSAgICBpZiAoZmFtaWx5ID09IEFGX0lORVQpIAorCSAgICAgIHsKKwkJYWRkci5pbi5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJfQU5ZOworCQlhZGRyLmluLnNpbl9wb3J0ID0gcG9ydDsKKyNpZmRlZiBIQVZFX1NPQ0tBRERSX1NBX0xFTgorCQlhZGRyLmluLnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyNlbmRpZgorCSAgICAgIH0KKyNpZmRlZiBIQVZFX0lQVjYKKwkgICAgZWxzZQorCSAgICAgIHsKKwkJYWRkci5pbjYuc2luNl9hZGRyID0gaW42YWRkcl9hbnk7IAorCQlhZGRyLmluNi5zaW42X3BvcnQgPSBwb3J0OworI2lmZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisJCWFkZHIuaW42LnNpbjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworI2VuZGlmCisJICAgICAgfQorI2VuZGlmCisJICAgIAorCSAgICBpZiAoYmluZChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLCBzYV9sZW4oJmFkZHIpKSA9PSAwKQorCSAgICAgIHJldHVybiBmZDsKKwkgICAgCisJICAgIGlmIChlcnJubyAhPSBFQUREUklOVVNFICYmIGVycm5vICE9IEVBQ0NFUykKKwkgICAgICBicmVhazsKKwkgIH0KKworICAgICAgY2xvc2UoZmQpOworICAgIH0KKworICByZXR1cm4gLTE7IAorfQorICAKKworaW50IGxvY2FsX2JpbmQoaW50IGZkLCB1bmlvbiBteXNvY2thZGRyICphZGRyLCBjaGFyICppbnRuYW1lLCBpbnQgaXNfdGNwKQoreworICB1bmlvbiBteXNvY2thZGRyIGFkZHJfY29weSA9ICphZGRyOworCisgIC8qIGNhbm5vdCBzZXQgc291cmNlIF9wb3J0XyBmb3IgVENQIGNvbm5lY3Rpb25zLiAqLworICBpZiAoaXNfdGNwKQorICAgIHsKKyAgICAgIGlmIChhZGRyX2NvcHkuc2Euc2FfZmFtaWx5ID09IEFGX0lORVQpCisJYWRkcl9jb3B5LmluLnNpbl9wb3J0ID0gMDsKKyNpZmRlZiBIQVZFX0lQVjYKKyAgICAgIGVsc2UKKwlhZGRyX2NvcHkuaW42LnNpbjZfcG9ydCA9IDA7CisjZW5kaWYKKyAgICB9CisgIAorICBpZiAoYmluZChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyX2NvcHksIHNhX2xlbigmYWRkcl9jb3B5KSkgPT0gLTEpCisgICAgcmV0dXJuIDA7CisgICAgCisjaWYgZGVmaW5lZChTT19CSU5EVE9ERVZJQ0UpCisgIGlmIChpbnRuYW1lWzBdICE9IDAgJiYKKyAgICAgIHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX0JJTkRUT0RFVklDRSwgaW50bmFtZSwgSUZfTkFNRVNJWkUpID09IC0xKQorICAgIHJldHVybiAwOworI2VuZGlmCisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2VydmVyZmQgKmFsbG9jYXRlX3NmZCh1bmlvbiBteXNvY2thZGRyICphZGRyLCBjaGFyICppbnRuYW1lKQoreworICBzdHJ1Y3Qgc2VydmVyZmQgKnNmZDsKKyAgdW5zaWduZWQgaW50IGlmaW5kZXggPSAwOworICBpbnQgZXJyc2F2ZTsKKworICAvKiB3aGVuIHVzaW5nIHJhbmRvbSBwb3J0cywgc2VydmVycyB3aGljaCB3b3VsZCBvdGhlcndpc2UgdXNlCisgICAgIHRoZSBJTkFERFJfQU5ZL3BvcnQwIHNvY2tldCBoYXZlIHNmZCBzZXQgdG8gTlVMTCAqLworICBpZiAoIWRhZW1vbi0+b3Nwb3J0ICYmIGludG5hbWVbMF0gPT0gMCkKKyAgICB7CisgICAgICBlcnJubyA9IDA7CisgICAgICAKKyAgICAgIGlmIChhZGRyLT5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCAmJgorCSAgYWRkci0+aW4uc2luX2FkZHIuc19hZGRyID09IElOQUREUl9BTlkgJiYKKwkgIGFkZHItPmluLnNpbl9wb3J0ID09IGh0b25zKDApKSAKKwlyZXR1cm4gTlVMTDsKKworI2lmZGVmIEhBVkVfSVBWNgorICAgICAgaWYgKGFkZHItPnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNiAmJgorCSAgbWVtY21wKCZhZGRyLT5pbjYuc2luNl9hZGRyLCAmaW42YWRkcl9hbnksIHNpemVvZihpbjZhZGRyX2FueSkpID09IDAgJiYKKwkgIGFkZHItPmluNi5zaW42X3BvcnQgPT0gaHRvbnMoMCkpIAorCXJldHVybiBOVUxMOworI2VuZGlmCisgICAgfQorCisgIGlmIChpbnRuYW1lICYmIHN0cmxlbihpbnRuYW1lKSAhPSAwKQorICAgIGlmaW5kZXggPSBpZl9uYW1ldG9pbmRleChpbnRuYW1lKTsgLyogaW5kZXggPT0gMCB3aGVuIG5vdCBiaW5kaW5nIHRvIGFuIGludGVyZmFjZSAqLworICAgICAgCisgIC8qIG1heSBoYXZlIGEgc3VpdGFibGUgb25lIGFscmVhZHkgKi8KKyAgZm9yIChzZmQgPSBkYWVtb24tPnNmZHM7IHNmZDsgc2ZkID0gc2ZkLT5uZXh0ICkKKyAgICBpZiAoc29ja2FkZHJfaXNlcXVhbCgmc2ZkLT5zb3VyY2VfYWRkciwgYWRkcikgJiYKKwlzdHJjbXAoaW50bmFtZSwgc2ZkLT5pbnRlcmZhY2UpID09IDAgJiYKKwlpZmluZGV4ID09IHNmZC0+aWZpbmRleCkgCisgICAgICByZXR1cm4gc2ZkOworICAKKyAgLyogbmVlZCB0byBtYWtlIGEgbmV3IG9uZS4gKi8KKyAgZXJybm8gPSBFTk9NRU07IC8qIGluIGNhc2UgbWFsbG9jIGZhaWxzLiAqLworICBpZiAoIShzZmQgPSB3aGluZV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBzZXJ2ZXJmZCkpKSkKKyAgICByZXR1cm4gTlVMTDsKKyAgCisgIGlmICgoc2ZkLT5mZCA9IHNvY2tldChhZGRyLT5zYS5zYV9mYW1pbHksIFNPQ0tfREdSQU0sIDApKSA9PSAtMSkKKyAgICB7CisgICAgICBmcmVlKHNmZCk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgIAorICBpZiAoIWxvY2FsX2JpbmQoc2ZkLT5mZCwgYWRkciwgaW50bmFtZSwgMCkgfHwgIWZpeF9mZChzZmQtPmZkKSkKKyAgICB7IAorICAgICAgZXJyc2F2ZSA9IGVycm5vOyAvKiBzYXZlIGVycm9yIGZyb20gYmluZC4gKi8KKyAgICAgIGNsb3NlKHNmZC0+ZmQpOworICAgICAgZnJlZShzZmQpOworICAgICAgZXJybm8gPSBlcnJzYXZlOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgIHN0cmNweShzZmQtPmludGVyZmFjZSwgaW50bmFtZSk7IAorICBzZmQtPnNvdXJjZV9hZGRyID0gKmFkZHI7CisgIHNmZC0+bmV4dCA9IGRhZW1vbi0+c2ZkczsKKyAgc2ZkLT5pZmluZGV4ID0gaWZpbmRleDsKKyAgZGFlbW9uLT5zZmRzID0gc2ZkOworCisgIHJldHVybiBzZmQ7IAorfQorCisvKiBjcmVhdGUgdXBzdHJlYW0gc29ja2V0cyBkdXJpbmcgc3RhcnR1cCwgYmVmb3JlIHJvb3QgaXMgZHJvcHBlZCB3aGljaCBtYXkgYmUgbmVlZGVkCisgICB0aGlzIGFsbG93cyBxdWVyeV9wb3J0IHRvIGJlIGEgbG93IHBvcnQgYW5kIGludGVyZmFjZSBiaW5kaW5nICovCit2b2lkIHByZV9hbGxvY2F0ZV9zZmRzKHZvaWQpCit7CisgIHN0cnVjdCBzZXJ2ZXIgKnNydjsKKyAgCisgIGlmIChkYWVtb24tPnF1ZXJ5X3BvcnQgIT0gMCkKKyAgICB7CisgICAgICB1bmlvbiAgbXlzb2NrYWRkciBhZGRyOworICAgICAgbWVtc2V0KCZhZGRyLCAwLCBzaXplb2YoYWRkcikpOworICAgICAgYWRkci5pbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgICAgIGFkZHIuaW4uc2luX2FkZHIuc19hZGRyID0gSU5BRERSX0FOWTsKKyAgICAgIGFkZHIuaW4uc2luX3BvcnQgPSBodG9ucyhkYWVtb24tPnF1ZXJ5X3BvcnQpOworI2lmZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisgICAgICBhZGRyLmluLnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyNlbmRpZgorICAgICAgYWxsb2NhdGVfc2ZkKCZhZGRyLCAiIik7CisjaWZkZWYgSEFWRV9JUFY2CisgICAgICBtZW1zZXQoJmFkZHIsIDAsIHNpemVvZihhZGRyKSk7CisgICAgICBhZGRyLmluNi5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworICAgICAgYWRkci5pbjYuc2luNl9hZGRyID0gaW42YWRkcl9hbnk7CisgICAgICBhZGRyLmluNi5zaW42X3BvcnQgPSBodG9ucyhkYWVtb24tPnF1ZXJ5X3BvcnQpOworI2lmZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisgICAgICBhZGRyLmluNi5zaW42X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKyNlbmRpZgorICAgICAgYWxsb2NhdGVfc2ZkKCZhZGRyLCAiIik7CisjZW5kaWYKKyAgICB9CisgIAorICBmb3IgKHNydiA9IGRhZW1vbi0+c2VydmVyczsgc3J2OyBzcnYgPSBzcnYtPm5leHQpCisgICAgaWYgKCEoc3J2LT5mbGFncyAmIChTRVJWX0xJVEVSQUxfQUREUkVTUyB8IFNFUlZfTk9fQUREUiB8IFNFUlZfVVNFX1JFU09MViB8IFNFUlZfTk9fUkVCSU5EKSkgJiYKKwkhYWxsb2NhdGVfc2ZkKCZzcnYtPnNvdXJjZV9hZGRyLCBzcnYtPmludGVyZmFjZSkgJiYKKwllcnJubyAhPSAwICYmCisJb3B0aW9uX2Jvb2woT1BUX05PV0lMRCkpCisgICAgICB7CisJcHJldHR5cHJpbnRfYWRkcigmc3J2LT5zb3VyY2VfYWRkciwgZGFlbW9uLT5uYW1lYnVmZik7CisJaWYgKHNydi0+aW50ZXJmYWNlWzBdICE9IDApCisJICB7CisJICAgIHN0cmNhdChkYWVtb24tPm5hbWVidWZmLCAiICIpOworCSAgICBzdHJjYXQoZGFlbW9uLT5uYW1lYnVmZiwgc3J2LT5pbnRlcmZhY2UpOworCSAgfQorCWRpZShfKCJmYWlsZWQgdG8gYmluZCBzZXJ2ZXIgc29ja2V0IGZvciAlczogJXMiKSwKKwkgICAgZGFlbW9uLT5uYW1lYnVmZiwgRUNfQkFETkVUKTsKKyAgICAgIH0gIAorfQorCit2b2lkIG1hcmtfc2VydmVycyhpbnQgZmxhZykKK3sKKyAgc3RydWN0IHNlcnZlciAqc2VydjsKKworICAvKiBtYXJrIGV2ZXJ5dGhpbmcgd2l0aCBhcmd1bWVudCBmbGFnICovCisgIGZvciAoc2VydiA9IGRhZW1vbi0+c2VydmVyczsgc2Vydjsgc2VydiA9IHNlcnYtPm5leHQpCisgICAgeworICAgICAgaWYgKHNlcnYtPmZsYWdzICYgZmxhZykKKwlzZXJ2LT5mbGFncyB8PSBTRVJWX01BUks7CisjaWZkZWYgSEFWRV9MT09QCisgICAgICAvKiBHaXZlIGxvb3BlZCBzZXJ2ZXJzIGFub3RoZXIgY2hhbmNlICovCisgICAgICBzZXJ2LT5mbGFncyAmPSB+U0VSVl9MT09QOworI2VuZGlmCisgICAgfQorfQorCit2b2lkIGNsZWFudXBfc2VydmVycyh2b2lkKQoreworICBzdHJ1Y3Qgc2VydmVyICpzZXJ2LCAqdG1wLCAqKnVwOworCisgIC8qIHVubGluayBhbmQgZnJlZSBhbnl0aGluZyBzdGlsbCBtYXJrZWQuICovCisgIGZvciAoc2VydiA9IGRhZW1vbi0+c2VydmVycywgdXAgPSAmZGFlbW9uLT5zZXJ2ZXJzOyBzZXJ2OyBzZXJ2ID0gdG1wKSAKKyAgICB7CisgICAgICB0bXAgPSBzZXJ2LT5uZXh0OworICAgICAgaWYgKHNlcnYtPmZsYWdzICYgU0VSVl9NQVJLKQorICAgICAgIHsKKyAgICAgICAgIHNlcnZlcl9nb25lKHNlcnYpOworICAgICAgICAgKnVwID0gc2Vydi0+bmV4dDsKKyAgICAgICAgIGlmIChzZXJ2LT5kb21haW4pCisJICAgZnJlZShzZXJ2LT5kb21haW4pOworCSBmcmVlKHNlcnYpOworICAgICAgIH0KKyAgICAgIGVsc2UgCisgICAgICAgdXAgPSAmc2Vydi0+bmV4dDsKKyAgICB9CisKKyNpZmRlZiBIQVZFX0xPT1AKKyAgLyogTm93IHdlIGhhdmUgYSBuZXcgc2V0IG9mIHNlcnZlcnMsIHRlc3QgZm9yIGxvb3BzLiAqLworICBsb29wX3NlbmRfcHJvYmVzKCk7CisjZW5kaWYKK30KKwordm9pZCBhZGRfdXBkYXRlX3NlcnZlcihpbnQgZmxhZ3MsCisJCSAgICAgICB1bmlvbiBteXNvY2thZGRyICphZGRyLAorCQkgICAgICAgdW5pb24gbXlzb2NrYWRkciAqc291cmNlX2FkZHIsCisJCSAgICAgICBjb25zdCBjaGFyICppbnRlcmZhY2UsCisJCSAgICAgICBjb25zdCBjaGFyICpkb21haW4pCit7CisgIHN0cnVjdCBzZXJ2ZXIgKnNlcnYsICpuZXh0ID0gTlVMTDsKKyAgY2hhciAqZG9tYWluX3N0ciA9IE5VTEw7CisgIAorICAvKiBTZWUgaWYgdGhlcmUgaXMgYSBzdWl0YWJsZSBjYW5kaWRhdGUsIGFuZCB1bm1hcmsgKi8KKyAgZm9yIChzZXJ2ID0gZGFlbW9uLT5zZXJ2ZXJzOyBzZXJ2OyBzZXJ2ID0gc2Vydi0+bmV4dCkKKyAgICBpZiAoc2Vydi0+ZmxhZ3MgJiBTRVJWX01BUkspCisgICAgICB7CisJaWYgKGRvbWFpbikKKwkgIHsKKwkgICAgaWYgKCEoc2Vydi0+ZmxhZ3MgJiBTRVJWX0hBU19ET01BSU4pIHx8ICFob3N0bmFtZV9pc2VxdWFsKGRvbWFpbiwgc2Vydi0+ZG9tYWluKSkKKwkgICAgICBjb250aW51ZTsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIGlmIChzZXJ2LT5mbGFncyAmIFNFUlZfSEFTX0RPTUFJTikKKwkgICAgICBjb250aW51ZTsKKwkgIH0KKwkKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgaWYgKHNlcnYpCisgICAgeworICAgICAgZG9tYWluX3N0ciA9IHNlcnYtPmRvbWFpbjsKKyAgICAgIG5leHQgPSBzZXJ2LT5uZXh0OworICAgIH0KKyAgZWxzZSBpZiAoKHNlcnYgPSB3aGluZV9tYWxsb2Moc2l6ZW9mIChzdHJ1Y3Qgc2VydmVyKSkpKQorICAgIHsKKyAgICAgIC8qIE5vdCBmb3VuZCwgY3JlYXRlIGEgbmV3IG9uZS4gKi8KKyAgICAgIGlmIChkb21haW4gJiYgIShkb21haW5fc3RyID0gd2hpbmVfbWFsbG9jKHN0cmxlbihkb21haW4pKzEpKSkKKwl7CisJICBmcmVlKHNlcnYpOworICAgICAgICAgIHNlcnYgPSBOVUxMOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKwkgIHN0cnVjdCBzZXJ2ZXIgKnM7CisJICAvKiBBZGQgdG8gdGhlIGVuZCBvZiB0aGUgY2hhaW4sIGZvciBvcmRlciAqLworCSAgaWYgKCFkYWVtb24tPnNlcnZlcnMpCisJICAgIGRhZW1vbi0+c2VydmVycyA9IHNlcnY7CisJICBlbHNlCisJICAgIHsKKwkgICAgICBmb3IgKHMgPSBkYWVtb24tPnNlcnZlcnM7IHMtPm5leHQ7IHMgPSBzLT5uZXh0KTsKKwkgICAgICBzLT5uZXh0ID0gc2VydjsKKwkgICAgfQorCSAgaWYgKGRvbWFpbikKKwkgICAgc3RyY3B5KGRvbWFpbl9zdHIsIGRvbWFpbik7CisJfQorICAgIH0KKyAgCisgIGlmIChzZXJ2KQorICAgIHsKKyAgICAgIG1lbXNldChzZXJ2LCAwLCBzaXplb2Yoc3RydWN0IHNlcnZlcikpOworICAgICAgc2Vydi0+ZmxhZ3MgPSBmbGFnczsKKyAgICAgIHNlcnYtPmRvbWFpbiA9IGRvbWFpbl9zdHI7CisgICAgICBzZXJ2LT5uZXh0ID0gbmV4dDsKKyAgICAgIHNlcnYtPnF1ZXJpZXMgPSBzZXJ2LT5mYWlsZWRfcXVlcmllcyA9IDA7CisjaWZkZWYgSEFWRV9MT09QCisgICAgICBzZXJ2LT51aWQgPSByYW5kMzIoKTsKKyNlbmRpZiAgICAgIAorCisgICAgICBpZiAoZG9tYWluKQorCXNlcnYtPmZsYWdzIHw9IFNFUlZfSEFTX0RPTUFJTjsKKyAgICAgIAorICAgICAgaWYgKGludGVyZmFjZSkKKwlzdHJjcHkoc2Vydi0+aW50ZXJmYWNlLCBpbnRlcmZhY2UpOyAgICAgIAorICAgICAgaWYgKGFkZHIpCisJc2Vydi0+YWRkciA9ICphZGRyOworICAgICAgaWYgKHNvdXJjZV9hZGRyKQorCXNlcnYtPnNvdXJjZV9hZGRyID0gKnNvdXJjZV9hZGRyOworICAgIH0KK30KKwordm9pZCBjaGVja19zZXJ2ZXJzKHZvaWQpCit7CisgIHN0cnVjdCBpcmVjICppZmFjZTsKKyAgc3RydWN0IHNlcnZlciAqc2VydjsKKyAgc3RydWN0IHNlcnZlcmZkICpzZmQsICp0bXAsICoqdXA7CisgIGludCBwb3J0ID0gMCwgY291bnQ7CisgIGludCBsb2NhbHMgPSAwOworCisgIC8qIGludGVyZmFjZSBtYXkgYmUgbmV3IHNpbmNlIHN0YXJ0dXAgKi8KKyAgaWYgKCFvcHRpb25fYm9vbChPUFRfTk9XSUxEKSkKKyAgICBlbnVtZXJhdGVfaW50ZXJmYWNlcygwKTsKKyAgCisgIGZvciAoc2ZkID0gZGFlbW9uLT5zZmRzOyBzZmQ7IHNmZCA9IHNmZC0+bmV4dCkKKyAgICBzZmQtPnVzZWQgPSAwOworCisjaWZkZWYgSEFWRV9ETlNTRUMKKyAvKiBEaXNhYmxlIEROU1NFQyB2YWxpZGF0aW9uIHdoZW4gdXNpbmcgc2VydmVyPS9kb21haW4vLi4uLiBzZXJ2ZXJzCisgICAgdW5sZXNzIHRoZXJlJ3MgYSBjb25maWd1cmVkIHRydXN0IGFuY2hvci4gKi8KKyAgZm9yIChzZXJ2ID0gZGFlbW9uLT5zZXJ2ZXJzOyBzZXJ2OyBzZXJ2ID0gc2Vydi0+bmV4dCkKKyAgICBzZXJ2LT5mbGFncyB8PSBTRVJWX0RPX0ROU1NFQzsKKyNlbmRpZgorCisgIGZvciAoY291bnQgPSAwLCBzZXJ2ID0gZGFlbW9uLT5zZXJ2ZXJzOyBzZXJ2OyBzZXJ2ID0gc2Vydi0+bmV4dCkKKyAgICB7CisgICAgICBpZiAoIShzZXJ2LT5mbGFncyAmIChTRVJWX0xJVEVSQUxfQUREUkVTUyB8IFNFUlZfTk9fQUREUiB8IFNFUlZfVVNFX1JFU09MViB8IFNFUlZfTk9fUkVCSU5EKSkpCisJeworCSAgLyogSW5pdCBlZG5zX3BrdHN6IGZvciBuZXdseSBjcmVhdGVkIHNlcnZlciByZWNvcmRzLiAqLworCSAgaWYgKHNlcnYtPmVkbnNfcGt0c3ogPT0gMCkKKwkgICAgc2Vydi0+ZWRuc19wa3RzeiA9IGRhZW1vbi0+ZWRuc19wa3RzejsKKwkgIAorI2lmZGVmIEhBVkVfRE5TU0VDCisJICBpZiAob3B0aW9uX2Jvb2woT1BUX0ROU1NFQ19WQUxJRCkpCisJICAgIHsgCisJICAgICAgaWYgKHNlcnYtPmZsYWdzICYgU0VSVl9IQVNfRE9NQUlOKQorCQl7CisJCSAgc3RydWN0IGRzX2NvbmZpZyAqZHM7CisJCSAgY2hhciAqZG9tYWluID0gc2Vydi0+ZG9tYWluOworCQkgIAorCQkgIC8qIC5leGFtcGxlLmNvbSBpcyB2YWxpZCAqLworCQkgIHdoaWxlICgqZG9tYWluID09ICcuJykKKwkJICAgIGRvbWFpbisrOworCQkgIAorCQkgIGZvciAoZHMgPSBkYWVtb24tPmRzOyBkczsgZHMgPSBkcy0+bmV4dCkKKwkJICAgIGlmIChkcy0+bmFtZVswXSAhPSAwICYmIGhvc3RuYW1lX2lzZXF1YWwoZG9tYWluLCBkcy0+bmFtZSkpCisJCSAgICAgIGJyZWFrOworCQkgIAorCQkgIGlmICghZHMpCisJCSAgICBzZXJ2LT5mbGFncyAmPSB+U0VSVl9ET19ETlNTRUM7CisJCX0KKwkgICAgICBlbHNlIGlmIChzZXJ2LT5mbGFncyAmIFNFUlZfRk9SX05PRE9UUykgCisJCXNlcnYtPmZsYWdzICY9IH5TRVJWX0RPX0ROU1NFQzsKKwkgICAgfQorI2VuZGlmCisKKwkgIHBvcnQgPSBwcmV0dHlwcmludF9hZGRyKCZzZXJ2LT5hZGRyLCBkYWVtb24tPm5hbWVidWZmKTsKKwkgIAorCSAgLyogMC4wLjAuMCBpcyBub3RoaW5nLCB0aGUgc3RhY2sgdHJlYXRzIGl0IGxpa2UgMTI3LjAuMC4xICovCisJICBpZiAoc2Vydi0+YWRkci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCAmJgorCSAgICAgIHNlcnYtPmFkZHIuaW4uc2luX2FkZHIuc19hZGRyID09IDApCisJICAgIHsKKwkgICAgICBzZXJ2LT5mbGFncyB8PSBTRVJWX01BUks7CisJICAgICAgY29udGludWU7CisJICAgIH0KKworCSAgZm9yIChpZmFjZSA9IGRhZW1vbi0+aW50ZXJmYWNlczsgaWZhY2U7IGlmYWNlID0gaWZhY2UtPm5leHQpCisJICAgIGlmIChzb2NrYWRkcl9pc2VxdWFsKCZzZXJ2LT5hZGRyLCAmaWZhY2UtPmFkZHIpKQorCSAgICAgIGJyZWFrOworCSAgaWYgKGlmYWNlKQorCSAgICB7CisJICAgICAgbXlfc3lzbG9nKExPR19XQVJOSU5HLCBfKCJpZ25vcmluZyBuYW1lc2VydmVyICVzIC0gbG9jYWwgaW50ZXJmYWNlIiksIGRhZW1vbi0+bmFtZWJ1ZmYpOworCSAgICAgIHNlcnYtPmZsYWdzIHw9IFNFUlZfTUFSSzsKKwkgICAgICBjb250aW51ZTsKKwkgICAgfQorCSAgCisJICAvKiBEbyB3ZSBuZWVkIGEgc29ja2V0IHNldD8gKi8KKwkgIGlmICghc2Vydi0+c2ZkICYmIAorCSAgICAgICEoc2Vydi0+c2ZkID0gYWxsb2NhdGVfc2ZkKCZzZXJ2LT5zb3VyY2VfYWRkciwgc2Vydi0+aW50ZXJmYWNlKSkgJiYKKwkgICAgICBlcnJubyAhPSAwKQorCSAgICB7CisJICAgICAgbXlfc3lzbG9nKExPR19XQVJOSU5HLCAKKwkJCV8oImlnbm9yaW5nIG5hbWVzZXJ2ZXIgJXMgLSBjYW5ub3QgbWFrZS9iaW5kIHNvY2tldDogJXMiKSwKKwkJCWRhZW1vbi0+bmFtZWJ1ZmYsIHN0cmVycm9yKGVycm5vKSk7CisJICAgICAgc2Vydi0+ZmxhZ3MgfD0gU0VSVl9NQVJLOworCSAgICAgIGNvbnRpbnVlOworCSAgICB9CisJICAKKwkgIGlmIChzZXJ2LT5zZmQpCisJICAgIHNlcnYtPnNmZC0+dXNlZCA9IDE7CisJfQorICAgICAgCisgICAgICBpZiAoIShzZXJ2LT5mbGFncyAmIFNFUlZfTk9fUkVCSU5EKSAmJiAhKHNlcnYtPmZsYWdzICYgU0VSVl9MSVRFUkFMX0FERFJFU1MpKQorCXsKKwkgIGlmICgrK2NvdW50ID4gU0VSVkVSU19MT0dHRUQpCisJICAgIGNvbnRpbnVlOworCSAgCisJICBpZiAoc2Vydi0+ZmxhZ3MgJiAoU0VSVl9IQVNfRE9NQUlOIHwgU0VSVl9GT1JfTk9ET1RTIHwgU0VSVl9VU0VfUkVTT0xWKSkKKwkgICAgeworCSAgICAgIGNoYXIgKnMxLCAqczIsICpzMyA9ICIiOworI2lmZGVmIEhBVkVfRE5TU0VDCisJICAgICAgaWYgKG9wdGlvbl9ib29sKE9QVF9ETlNTRUNfVkFMSUQpICYmICEoc2Vydi0+ZmxhZ3MgJiBTRVJWX0RPX0ROU1NFQykpCisJCXMzID0gXygiKG5vIEROU1NFQykiKTsKKyNlbmRpZgorCSAgICAgIGlmICghKHNlcnYtPmZsYWdzICYgU0VSVl9IQVNfRE9NQUlOKSkKKwkJczEgPSBfKCJ1bnF1YWxpZmllZCIpLCBzMiA9IF8oIm5hbWVzIik7CisJICAgICAgZWxzZSBpZiAoc3RybGVuKHNlcnYtPmRvbWFpbikgPT0gMCkKKwkJczEgPSBfKCJkZWZhdWx0IiksIHMyID0gIiI7CisJICAgICAgZWxzZQorCQlzMSA9IF8oImRvbWFpbiIpLCBzMiA9IHNlcnYtPmRvbWFpbjsKKwkgICAgICAKKwkgICAgICBpZiAoc2Vydi0+ZmxhZ3MgJiBTRVJWX05PX0FERFIpCisJCXsKKwkJICBjb3VudC0tOworCQkgIGlmICgrK2xvY2FscyA8PSBMT0NBTFNfTE9HR0VEKQorCQkJbXlfc3lzbG9nKExPR19JTkZPLCBfKCJ1c2luZyBsb2NhbCBhZGRyZXNzZXMgb25seSBmb3IgJXMgJXMiKSwgczEsIHMyKTsKKwkgICAgICAgIH0KKwkgICAgICBlbHNlIGlmIChzZXJ2LT5mbGFncyAmIFNFUlZfVVNFX1JFU09MVikKKwkJbXlfc3lzbG9nKExPR19JTkZPLCBfKCJ1c2luZyBzdGFuZGFyZCBuYW1lc2VydmVycyBmb3IgJXMgJXMiKSwgczEsIHMyKTsKKwkgICAgICBlbHNlIAorCQlteV9zeXNsb2coTE9HX0lORk8sIF8oInVzaW5nIG5hbWVzZXJ2ZXIgJXMjJWQgZm9yICVzICVzICVzIiksIGRhZW1vbi0+bmFtZWJ1ZmYsIHBvcnQsIHMxLCBzMiwgczMpOworCSAgICB9CisjaWZkZWYgSEFWRV9MT09QCisJICBlbHNlIGlmIChzZXJ2LT5mbGFncyAmIFNFUlZfTE9PUCkKKwkgICAgbXlfc3lzbG9nKExPR19JTkZPLCBfKCJOT1QgdXNpbmcgbmFtZXNlcnZlciAlcyMlZCAtIHF1ZXJ5IGxvb3AgZGV0ZWN0ZWQiKSwgZGFlbW9uLT5uYW1lYnVmZiwgcG9ydCk7IAorI2VuZGlmCisJICBlbHNlIGlmIChzZXJ2LT5pbnRlcmZhY2VbMF0gIT0gMCkKKwkgICAgbXlfc3lzbG9nKExPR19JTkZPLCBfKCJ1c2luZyBuYW1lc2VydmVyICVzIyVkKHZpYSAlcykiKSwgZGFlbW9uLT5uYW1lYnVmZiwgcG9ydCwgc2Vydi0+aW50ZXJmYWNlKTsgCisJICBlbHNlCisJICAgIG15X3N5c2xvZyhMT0dfSU5GTywgXygidXNpbmcgbmFtZXNlcnZlciAlcyMlZCIpLCBkYWVtb24tPm5hbWVidWZmLCBwb3J0KTsgCisJfQorICAgIH0KKyAgCisgIGlmIChsb2NhbHMgPiBMT0NBTFNfTE9HR0VEKQorICAgIG15X3N5c2xvZyhMT0dfSU5GTywgXygidXNpbmcgJWQgbW9yZSBsb2NhbCBhZGRyZXNzZXMiKSwgbG9jYWxzIC0gTE9DQUxTX0xPR0dFRCk7CisgIGlmIChjb3VudCAtIDEgPiBTRVJWRVJTX0xPR0dFRCkKKyAgICBteV9zeXNsb2coTE9HX0lORk8sIF8oInVzaW5nICVkIG1vcmUgbmFtZXNlcnZlcnMiKSwgY291bnQgLSBTRVJWRVJTX0xPR0dFRCAtIDEpOworCisgIC8qIFJlbW92ZSB1bnVzZWQgc2ZkcyAqLworICBmb3IgKHNmZCA9IGRhZW1vbi0+c2ZkcywgdXAgPSAmZGFlbW9uLT5zZmRzOyBzZmQ7IHNmZCA9IHRtcCkKKyAgICB7CisgICAgICAgdG1wID0gc2ZkLT5uZXh0OworICAgICAgIGlmICghc2ZkLT51c2VkKSAKKwl7CisJICAqdXAgPSBzZmQtPm5leHQ7CisJICBjbG9zZShzZmQtPmZkKTsKKwkgIGZyZWUoc2ZkKTsKKwl9IAorICAgICAgZWxzZQorCXVwID0gJnNmZC0+bmV4dDsKKyAgICB9CisgIAorICBjbGVhbnVwX3NlcnZlcnMoKTsKK30KKworLyogUmV0dXJuIHplcm8gaWYgbm8gc2VydmVycyBmb3VuZCwgaW4gdGhhdCBjYXNlIHdlIGtlZXAgcG9sbGluZy4KKyAgIFRoaXMgaXMgYSBwcm90ZWN0aW9uIGFnYWluc3QgYW4gdXBkYXRlLXRpbWUvd3JpdGUgcmFjZSBvbiByZXNvbHYuY29uZiAqLworaW50IHJlbG9hZF9zZXJ2ZXJzKGNoYXIgKmZuYW1lKQoreworICBGSUxFICpmOworICBjaGFyICpsaW5lOworICBpbnQgZ290b25lID0gMDsKKworICAvKiBidWZmIGhhcHBlbnMgdG8gYmUgTUFYRE5BTUUgbG9uZy4uLiAqLworICBpZiAoIShmID0gZm9wZW4oZm5hbWUsICJyIikpKQorICAgIHsKKyAgICAgIG15X3N5c2xvZyhMT0dfRVJSLCBfKCJmYWlsZWQgdG8gcmVhZCAlczogJXMiKSwgZm5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAKKyAgbWFya19zZXJ2ZXJzKFNFUlZfRlJPTV9SRVNPTFYpOworICAgIAorICB3aGlsZSAoKGxpbmUgPSBmZ2V0cyhkYWVtb24tPm5hbWVidWZmLCBNQVhETkFNRSwgZikpKQorICAgIHsKKyAgICAgIHVuaW9uIG15c29ja2FkZHIgYWRkciwgc291cmNlX2FkZHI7CisgICAgICBjaGFyICp0b2tlbiA9IHN0cnRvayhsaW5lLCAiIFx0XG5cciIpOworICAgICAgCisgICAgICBpZiAoIXRva2VuKQorCWNvbnRpbnVlOworICAgICAgaWYgKHN0cmNtcCh0b2tlbiwgIm5hbWVzZXJ2ZXIiKSAhPSAwICYmIHN0cmNtcCh0b2tlbiwgInNlcnZlciIpICE9IDApCisJY29udGludWU7CisgICAgICBpZiAoISh0b2tlbiA9IHN0cnRvayhOVUxMLCAiIFx0XG5cciIpKSkKKwljb250aW51ZTsKKyAgICAgIAorICAgICAgbWVtc2V0KCZhZGRyLCAwLCBzaXplb2YoYWRkcikpOworICAgICAgbWVtc2V0KCZzb3VyY2VfYWRkciwgMCwgc2l6ZW9mKHNvdXJjZV9hZGRyKSk7CisgICAgICAKKyAgICAgIGlmICgoYWRkci5pbi5zaW5fYWRkci5zX2FkZHIgPSBpbmV0X2FkZHIodG9rZW4pKSAhPSAoaW5fYWRkcl90KSAtMSkKKwl7CisjaWZkZWYgSEFWRV9TT0NLQUREUl9TQV9MRU4KKwkgIHNvdXJjZV9hZGRyLmluLnNpbl9sZW4gPSBhZGRyLmluLnNpbl9sZW4gPSBzaXplb2Yoc291cmNlX2FkZHIuaW4pOworI2VuZGlmCisJICBzb3VyY2VfYWRkci5pbi5zaW5fZmFtaWx5ID0gYWRkci5pbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKwkgIGFkZHIuaW4uc2luX3BvcnQgPSBodG9ucyhOQU1FU0VSVkVSX1BPUlQpOworCSAgc291cmNlX2FkZHIuaW4uc2luX2FkZHIuc19hZGRyID0gSU5BRERSX0FOWTsKKwkgIHNvdXJjZV9hZGRyLmluLnNpbl9wb3J0ID0gaHRvbnMoZGFlbW9uLT5xdWVyeV9wb3J0KTsKKwl9CisjaWZkZWYgSEFWRV9JUFY2CisgICAgICBlbHNlIAorCXsJCisJICBpbnQgc2NvcGVfaW5kZXggPSAwOworCSAgY2hhciAqc2NvcGVfaWQgPSBzdHJjaHIodG9rZW4sICclJyk7CisJICAKKwkgIGlmIChzY29wZV9pZCkKKwkgICAgeworCSAgICAgICooc2NvcGVfaWQrKykgPSAwOworCSAgICAgIHNjb3BlX2luZGV4ID0gaWZfbmFtZXRvaW5kZXgoc2NvcGVfaWQpOworCSAgICB9CisJICAKKwkgIGlmIChpbmV0X3B0b24oQUZfSU5FVDYsIHRva2VuLCAmYWRkci5pbjYuc2luNl9hZGRyKSA+IDApCisJICAgIHsKKyNpZmRlZiBIQVZFX1NPQ0tBRERSX1NBX0xFTgorCSAgICAgIHNvdXJjZV9hZGRyLmluNi5zaW42X2xlbiA9IGFkZHIuaW42LnNpbjZfbGVuID0gc2l6ZW9mKHNvdXJjZV9hZGRyLmluNik7CisjZW5kaWYKKwkgICAgICBzb3VyY2VfYWRkci5pbjYuc2luNl9mYW1pbHkgPSBhZGRyLmluNi5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworCSAgICAgIHNvdXJjZV9hZGRyLmluNi5zaW42X2Zsb3dpbmZvID0gYWRkci5pbjYuc2luNl9mbG93aW5mbyA9IDA7CisJICAgICAgYWRkci5pbjYuc2luNl9wb3J0ID0gaHRvbnMoTkFNRVNFUlZFUl9QT1JUKTsKKwkgICAgICBhZGRyLmluNi5zaW42X3Njb3BlX2lkID0gc2NvcGVfaW5kZXg7CisJICAgICAgc291cmNlX2FkZHIuaW42LnNpbjZfYWRkciA9IGluNmFkZHJfYW55OworCSAgICAgIHNvdXJjZV9hZGRyLmluNi5zaW42X3BvcnQgPSBodG9ucyhkYWVtb24tPnF1ZXJ5X3BvcnQpOworCSAgICAgIHNvdXJjZV9hZGRyLmluNi5zaW42X3Njb3BlX2lkID0gMDsKKwkgICAgfQorCSAgZWxzZQorCSAgICBjb250aW51ZTsKKwl9CisjZWxzZSAvKiBJUFY2ICovCisgICAgICBlbHNlCisJY29udGludWU7CisjZW5kaWYgCisKKyAgICAgIGFkZF91cGRhdGVfc2VydmVyKFNFUlZfRlJPTV9SRVNPTFYsICZhZGRyLCAmc291cmNlX2FkZHIsIE5VTEwsIE5VTEwpOworICAgICAgZ290b25lID0gMTsKKyAgICB9CisgIAorICBmY2xvc2UoZik7CisgIGNsZWFudXBfc2VydmVycygpOworCisgIHJldHVybiBnb3RvbmU7Cit9CisKKy8qIENhbGxlZCB3aGVuIGFkZHJlc3NlcyBhcmUgYWRkZWQgb3IgZGVsZXRlZCBmcm9tIGFuIGludGVyZmFjZSAqLwordm9pZCBuZXdhZGRyZXNzKHRpbWVfdCBub3cpCit7CisgICh2b2lkKW5vdzsKKyAgCisgIGlmIChvcHRpb25fYm9vbChPUFRfQ0xFVkVSQklORCkgfHwgb3B0aW9uX2Jvb2woT1BUX0xPQ0FMX1NFUlZJQ0UpIHx8CisgICAgICBkYWVtb24tPmRvaW5nX2RoY3A2IHx8IGRhZW1vbi0+cmVsYXk2IHx8IGRhZW1vbi0+ZG9pbmdfcmEpCisgICAgZW51bWVyYXRlX2ludGVyZmFjZXMoMCk7CisgIAorICBpZiAob3B0aW9uX2Jvb2woT1BUX0NMRVZFUkJJTkQpKQorICAgIGNyZWF0ZV9ib3VuZF9saXN0ZW5lcnMoMCk7CisgIAorI2lmZGVmIEhBVkVfREhDUDYKKyAgaWYgKGRhZW1vbi0+ZG9pbmdfZGhjcDYgfHwgZGFlbW9uLT5yZWxheTYgfHwgZGFlbW9uLT5kb2luZ19yYSkKKyAgICBqb2luX211bHRpY2FzdCgwKTsKKyAgCisgIGlmIChkYWVtb24tPmRvaW5nX2RoY3A2IHx8IGRhZW1vbi0+ZG9pbmdfcmEpCisgICAgZGhjcF9jb25zdHJ1Y3RfY29udGV4dHMobm93KTsKKyAgCisgIGlmIChkYWVtb24tPmRvaW5nX2RoY3A2KQorICAgIGxlYXNlX2ZpbmRfaW50ZXJmYWNlcyhub3cpOworI2VuZGlmCit9CisKKworCisKKwpkaWZmIC0tZ2l0IGEvc3JjL29wdGlvbi5jIGIvc3JjL29wdGlvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY0ZDIyYTIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvb3B0aW9uLmMKQEAgLTAsMCArMSw0OTI1IEBACisvKiBkbnNtYXNxIGlzIENvcHlyaWdodCAoYykgMjAwMC0yMDE3IFNpbW9uIEtlbGxleQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMgZGF0ZWQgMjkgSnVuZSwgMjAwNy4KKyAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworLyogZGVmaW5lIHRoaXMgdG8gZ2V0IGZhY2lsaXR5bmFtZXMgKi8KKyNkZWZpbmUgU1lTTE9HX05BTUVTCisjaW5jbHVkZSAiZG5zbWFzcS5oIgorI2luY2x1ZGUgPHNldGptcC5oPgorCitzdGF0aWMgdm9sYXRpbGUgaW50IG1lbV9yZWNvdmVyID0gMDsKK3N0YXRpYyBqbXBfYnVmIG1lbV9qbXA7CitzdGF0aWMgaW50IG9uZV9maWxlKGNoYXIgKmZpbGUsIGludCBoYXJkX29wdCk7CisKKy8qIFNvbGFyaXMgaGVhZGVycyBkb24ndCBoYXZlIGZhY2lsaXR5IG5hbWVzLiAqLworI2lmZGVmIEhBVkVfU09MQVJJU19ORVRXT1JLCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKyAgY2hhciAqY19uYW1lOworICB1bnNpZ25lZCBpbnQgY192YWw7Cit9ICBmYWNpbGl0eW5hbWVzW10gPSB7CisgIHsgImtlcm4iLCAgIExPR19LRVJOIH0sCisgIHsgInVzZXIiLCAgIExPR19VU0VSIH0sCisgIHsgIm1haWwiLCAgIExPR19NQUlMIH0sCisgIHsgImRhZW1vbiIsIExPR19EQUVNT04gfSwKKyAgeyAiYXV0aCIsICAgTE9HX0FVVEggfSwKKyAgeyAic3lzbG9nIiwgTE9HX1NZU0xPRyB9LAorICB7ICJscHIiLCAgICBMT0dfTFBSIH0sCisgIHsgIm5ld3MiLCAgIExPR19ORVdTIH0sCisgIHsgInV1Y3AiLCAgIExPR19VVUNQIH0sCisgIHsgImF1ZGl0IiwgIExPR19BVURJVCB9LAorICB7ICJjcm9uIiwgICBMT0dfQ1JPTiB9LAorICB7ICJsb2NhbDAiLCBMT0dfTE9DQUwwIH0sCisgIHsgImxvY2FsMSIsIExPR19MT0NBTDEgfSwKKyAgeyAibG9jYWwyIiwgTE9HX0xPQ0FMMiB9LAorICB7ICJsb2NhbDMiLCBMT0dfTE9DQUwzIH0sCisgIHsgImxvY2FsNCIsIExPR19MT0NBTDQgfSwKKyAgeyAibG9jYWw1IiwgTE9HX0xPQ0FMNSB9LAorICB7ICJsb2NhbDYiLCBMT0dfTE9DQUw2IH0sCisgIHsgImxvY2FsNyIsIExPR19MT0NBTDcgfSwKKyAgeyBOVUxMLCAwIH0KK307CisjZW5kaWYKKworI2lmbmRlZiBIQVZFX0dFVE9QVF9MT05HCitzdHJ1Y3QgbXlvcHRpb24geworICBjb25zdCBjaGFyICpuYW1lOworICBpbnQgaGFzX2FyZzsKKyAgaW50ICpmbGFnOworICBpbnQgdmFsOworfTsKKyNlbmRpZgorCisjZGVmaW5lIE9QVFNUUklORyAiOTUxeVpETkxFUkt6b3dlZm5idmhka3FyOm06cDpjOmw6czppOnQ6dTpnOmE6eDpTOkM6QTpUOkg6UTpJOkI6RjpHOk86TTpYOlY6VTpqOlA6SjpXOlk6Mjo0OjY6Nzo4OjA6MzoiCisKKy8qIG9wdGlvbnMgd2hpY2ggZG9uJ3QgaGF2ZSBhIG9uZS1jaGFyIHZlcnNpb24gKi8KKyNkZWZpbmUgTE9QVF9SRUxPQUQgICAgICAgIDI1NgorI2RlZmluZSBMT1BUX05PX05BTUVTICAgICAgMjU3CisjZGVmaW5lIExPUFRfVEZUUCAgICAgICAgICAyNTgKKyNkZWZpbmUgTE9QVF9TRUNVUkUgICAgICAgIDI1OQorI2RlZmluZSBMT1BUX1BSRUZJWCAgICAgICAgMjYwCisjZGVmaW5lIExPUFRfUFRSICAgICAgICAgICAyNjEKKyNkZWZpbmUgTE9QVF9CUklER0UgICAgICAgIDI2MgorI2RlZmluZSBMT1BUX1RGVFBfTUFYICAgICAgMjYzCisjZGVmaW5lIExPUFRfRk9SQ0UgICAgICAgICAyNjQKKyNkZWZpbmUgTE9QVF9OT0JMT0NLICAgICAgIDI2NQorI2RlZmluZSBMT1BUX0xPR19PUFRTICAgICAgMjY2CisjZGVmaW5lIExPUFRfTUFYX0xPR1MgICAgICAyNjcKKyNkZWZpbmUgTE9QVF9DSVJDVUlUICAgICAgIDI2OAorI2RlZmluZSBMT1BUX1JFTU9URSAgICAgICAgMjY5CisjZGVmaW5lIExPUFRfU1VCU0NSICAgICAgICAyNzAKKyNkZWZpbmUgTE9QVF9JTlROQU1FICAgICAgIDI3MQorI2RlZmluZSBMT1BUX0JBTksgICAgICAgICAgMjcyCisjZGVmaW5lIExPUFRfREhDUF9IT1NUICAgICAyNzMKKyNkZWZpbmUgTE9QVF9BUFJFRiAgICAgICAgIDI3NAorI2RlZmluZSBMT1BUX09WRVJSSURFICAgICAgMjc1CisjZGVmaW5lIExPUFRfVEZUUFBPUlRTICAgICAyNzYKKyNkZWZpbmUgTE9QVF9SRUJJTkQgICAgICAgIDI3NworI2RlZmluZSBMT1BUX05PTEFTVCAgICAgICAgMjc4CisjZGVmaW5lIExPUFRfT1BUUyAgICAgICAgICAyNzkKKyNkZWZpbmUgTE9QVF9ESENQX09QVFMgICAgIDI4MAorI2RlZmluZSBMT1BUX01BVENIICAgICAgICAgMjgxCisjZGVmaW5lIExPUFRfQlJPQURDQVNUICAgICAyODIKKyNkZWZpbmUgTE9QVF9ORUdUVEwgICAgICAgIDI4MworI2RlZmluZSBMT1BUX0FMVFBPUlQgICAgICAgMjg0CisjZGVmaW5lIExPUFRfU0NSSVBUVVNSICAgICAyODUKKyNkZWZpbmUgTE9QVF9MT0NBTCAgICAgICAgIDI4NgorI2RlZmluZSBMT1BUX05BUFRSICAgICAgICAgMjg3CisjZGVmaW5lIExPUFRfTUlOUE9SVCAgICAgICAyODgKKyNkZWZpbmUgTE9QVF9ESENQX0ZRRE4gICAgIDI4OQorI2RlZmluZSBMT1BUX0NOQU1FICAgICAgICAgMjkwCisjZGVmaW5lIExPUFRfUFhFX1BST01UICAgICAyOTEKKyNkZWZpbmUgTE9QVF9QWEVfU0VSViAgICAgIDI5MgorI2RlZmluZSBMT1BUX1RFU1QgICAgICAgICAgMjkzCisjZGVmaW5lIExPUFRfVEFHX0lGICAgICAgICAyOTQKKyNkZWZpbmUgTE9QVF9QUk9YWSAgICAgICAgIDI5NQorI2RlZmluZSBMT1BUX0dFTl9OQU1FUyAgICAgMjk2CisjZGVmaW5lIExPUFRfTUFYVFRMICAgICAgICAyOTcKKyNkZWZpbmUgTE9QVF9OT19SRUJJTkQgICAgIDI5OAorI2RlZmluZSBMT1BUX0xPQ19SRUJORCAgICAgMjk5CisjZGVmaW5lIExPUFRfQUREX01BQyAgICAgICAzMDAKKyNkZWZpbmUgTE9QVF9ETlNTRUMgICAgICAgIDMwMQorI2RlZmluZSBMT1BUX0lOQ1JfQUREUiAgICAgMzAyCisjZGVmaW5lIExPUFRfQ09OTlRSQUNLICAgICAzMDMKKyNkZWZpbmUgTE9QVF9GUUROICAgICAgICAgIDMwNAorI2RlZmluZSBMT1BUX0xVQVNDUklQVCAgICAgMzA1CisjZGVmaW5lIExPUFRfUkEgICAgICAgICAgICAzMDYKKyNkZWZpbmUgTE9QVF9EVUlEICAgICAgICAgIDMwNworI2RlZmluZSBMT1BUX0hPU1RfUkVDICAgICAgMzA4CisjZGVmaW5lIExPUFRfVEZUUF9MQyAgICAgICAzMDkKKyNkZWZpbmUgTE9QVF9SUiAgICAgICAgICAgIDMxMAorI2RlZmluZSBMT1BUX0NMVkVSQklORCAgICAgMzExCisjZGVmaW5lIExPUFRfTUFYQ1RUTCAgICAgICAzMTIKKyNkZWZpbmUgTE9QVF9BVVRIWk9ORSAgICAgIDMxMworI2RlZmluZSBMT1BUX0FVVEhTRVJWICAgICAgMzE0CisjZGVmaW5lIExPUFRfQVVUSFRUTCAgICAgICAzMTUKKyNkZWZpbmUgTE9QVF9BVVRIU09BICAgICAgIDMxNgorI2RlZmluZSBMT1BUX0FVVEhTRlMgICAgICAgMzE3CisjZGVmaW5lIExPUFRfQVVUSFBFRVIgICAgICAzMTgKKyNkZWZpbmUgTE9QVF9JUFNFVCAgICAgICAgIDMxOQorI2RlZmluZSBMT1BUX1NZTlRIICAgICAgICAgMzIwCisjaWZkZWYgT1BUSU9ONl9QUkVGSVhfQ0xBU1MgCisjZGVmaW5lIExPUFRfUFJFRl9DTFNTICAgICAzMjEKKyNlbmRpZgorI2RlZmluZSBMT1BUX1JFTEFZICAgICAgICAgMzIzCisjZGVmaW5lIExPUFRfUkFfUEFSQU0gICAgICAzMjQKKyNkZWZpbmUgTE9QVF9BRERfU0JORVQgICAgIDMyNQorI2RlZmluZSBMT1BUX1FVSUVUX0RIQ1AgICAgMzI2CisjZGVmaW5lIExPUFRfUVVJRVRfREhDUDYgICAzMjcKKyNkZWZpbmUgTE9QVF9RVUlFVF9SQSAgICAgIDMyOAorI2RlZmluZSBMT1BUX1NFQ19WQUxJRCAgICAgMzI5CisjZGVmaW5lIExPUFRfVFJVU1RfQU5DSE9SICAzMzAKKyNkZWZpbmUgTE9QVF9ETlNTRUNfREVCVUcgIDMzMQorI2RlZmluZSBMT1BUX1JFVl9TRVJWICAgICAgMzMyCisjZGVmaW5lIExPUFRfU0VSVkVSU19GSUxFICAzMzMKKyNkZWZpbmUgTE9QVF9ETlNTRUNfQ0hFQ0sgIDMzNAorI2RlZmluZSBMT1BUX0xPQ0FMX1NFUlZJQ0UgMzM1CisjZGVmaW5lIExPUFRfRE5TU0VDX1RJTUUgICAzMzYKKyNkZWZpbmUgTE9QVF9MT09QX0RFVEVDVCAgIDMzNworI2RlZmluZSBMT1BUX0lHTk9SRV9BRERSICAgMzM4CisjZGVmaW5lIExPUFRfTUlOQ1RUTCAgICAgICAzMzkKKyNkZWZpbmUgTE9QVF9ESENQX0lOT1RJRlkgIDM0MAorI2RlZmluZSBMT1BUX0RIT1BUX0lOT1RJRlkgMzQxCisjZGVmaW5lIExPUFRfSE9TVF9JTk9USUZZICAzNDIKKyNkZWZpbmUgTE9QVF9ETlNTRUNfU1RBTVAgIDM0MworI2RlZmluZSBMT1BUX1RGVFBfTk9fRkFJTCAgMzQ0CisjZGVmaW5lIExPUFRfTUFYUE9SVCAgICAgICAzNDUKKyNkZWZpbmUgTE9QVF9DUEVfSUQgICAgICAgIDM0NgorI2RlZmluZSBMT1BUX1NDUklQVF9BUlAgICAgMzQ3CisjZGVmaW5lIExPUFRfREhDUFRUTCAgICAgICAzNDgKKyNkZWZpbmUgTE9QVF9URlRQX01UVSAgICAgIDM0OQorI2RlZmluZSBMT1BUX1JFUExZX0RFTEFZICAgMzUwCisgCisjaWZkZWYgSEFWRV9HRVRPUFRfTE9ORworc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gb3B0c1tdID0gIAorI2Vsc2UKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXlvcHRpb24gb3B0c1tdID0gCisjZW5kaWYKKyAgeyAKKyAgICB7ICJ2ZXJzaW9uIiwgMCwgMCwgJ3YnIH0sCisgICAgeyAibm8taG9zdHMiLCAwLCAwLCAnaCcgfSwKKyAgICB7ICJuby1wb2xsIiwgMCwgMCwgJ24nIH0sCisgICAgeyAiaGVscCIsIDAsIDAsICd3JyB9LAorICAgIHsgIm5vLWRhZW1vbiIsIDAsIDAsICdkJyB9LAorICAgIHsgImxvZy1xdWVyaWVzIiwgMiwgMCwgJ3EnIH0sCisgICAgeyAidXNlciIsIDIsIDAsICd1JyB9LAorICAgIHsgImdyb3VwIiwgMiwgMCwgJ2cnIH0sCisgICAgeyAicmVzb2x2LWZpbGUiLCAyLCAwLCAncicgfSwKKyAgICB7ICJzZXJ2ZXJzLWZpbGUiLCAxLCAwLCBMT1BUX1NFUlZFUlNfRklMRSB9LAorICAgIHsgIm14LWhvc3QiLCAxLCAwLCAnbScgfSwKKyAgICB7ICJteC10YXJnZXQiLCAxLCAwLCAndCcgfSwKKyAgICB7ICJjYWNoZS1zaXplIiwgMiwgMCwgJ2MnIH0sCisgICAgeyAicG9ydCIsIDEsIDAsICdwJyB9LAorICAgIHsgImRoY3AtbGVhc2VmaWxlIiwgMiwgMCwgJ2wnIH0sCisgICAgeyAiZGhjcC1sZWFzZSIsIDEsIDAsICdsJyB9LAorICAgIHsgImRoY3AtaG9zdCIsIDEsIDAsICdHJyB9LAorICAgIHsgImRoY3AtcmFuZ2UiLCAxLCAwLCAnRicgfSwKKyAgICB7ICJkaGNwLW9wdGlvbiIsIDEsIDAsICdPJyB9LAorICAgIHsgImRoY3AtYm9vdCIsIDEsIDAsICdNJyB9LAorICAgIHsgImRvbWFpbiIsIDEsIDAsICdzJyB9LAorICAgIHsgImRvbWFpbi1zdWZmaXgiLCAxLCAwLCAncycgfSwKKyAgICB7ICJpbnRlcmZhY2UiLCAxLCAwLCAnaScgfSwKKyAgICB7ICJsaXN0ZW4tYWRkcmVzcyIsIDEsIDAsICdhJyB9LAorICAgIHsgImxvY2FsLXNlcnZpY2UiLCAwLCAwLCBMT1BUX0xPQ0FMX1NFUlZJQ0UgfSwKKyAgICB7ICJib2d1cy1wcml2IiwgMCwgMCwgJ2InIH0sCisgICAgeyAiYm9ndXMtbnhkb21haW4iLCAxLCAwLCAnQicgfSwKKyAgICB7ICJpZ25vcmUtYWRkcmVzcyIsIDEsIDAsIExPUFRfSUdOT1JFX0FERFIgfSwKKyAgICB7ICJzZWxmbXgiLCAwLCAwLCAnZScgfSwKKyAgICB7ICJmaWx0ZXJ3aW4yayIsIDAsIDAsICdmJyB9LAorICAgIHsgInBpZC1maWxlIiwgMiwgMCwgJ3gnIH0sCisgICAgeyAic3RyaWN0LW9yZGVyIiwgMCwgMCwgJ28nIH0sCisgICAgeyAic2VydmVyIiwgMSwgMCwgJ1MnIH0sCisgICAgeyAicmV2LXNlcnZlciIsIDEsIDAsIExPUFRfUkVWX1NFUlYgfSwKKyAgICB7ICJsb2NhbCIsIDEsIDAsIExPUFRfTE9DQUwgfSwKKyAgICB7ICJhZGRyZXNzIiwgMSwgMCwgJ0EnIH0sCisgICAgeyAiY29uZi1maWxlIiwgMiwgMCwgJ0MnIH0sCisgICAgeyAibm8tcmVzb2x2IiwgMCwgMCwgJ1InIH0sCisgICAgeyAiZXhwYW5kLWhvc3RzIiwgMCwgMCwgJ0UnIH0sCisgICAgeyAibG9jYWxteCIsIDAsIDAsICdMJyB9LAorICAgIHsgImxvY2FsLXR0bCIsIDEsIDAsICdUJyB9LAorICAgIHsgIm5vLW5lZ2NhY2hlIiwgMCwgMCwgJ04nIH0sCisgICAgeyAiYWRkbi1ob3N0cyIsIDEsIDAsICdIJyB9LAorICAgIHsgImhvc3RzZGlyIiwgMSwgMCwgTE9QVF9IT1NUX0lOT1RJRlkgfSwKKyAgICB7ICJxdWVyeS1wb3J0IiwgMSwgMCwgJ1EnIH0sCisgICAgeyAiZXhjZXB0LWludGVyZmFjZSIsIDEsIDAsICdJJyB9LAorICAgIHsgIm5vLWRoY3AtaW50ZXJmYWNlIiwgMSwgMCwgJzInIH0sCisgICAgeyAiZG9tYWluLW5lZWRlZCIsIDAsIDAsICdEJyB9LAorICAgIHsgImRoY3AtbGVhc2UtbWF4IiwgMSwgMCwgJ1gnIH0sCisgICAgeyAiYmluZC1pbnRlcmZhY2VzIiwgMCwgMCwgJ3onIH0sCisgICAgeyAicmVhZC1ldGhlcnMiLCAwLCAwLCAnWicgfSwKKyAgICB7ICJhbGlhcyIsIDEsIDAsICdWJyB9LAorICAgIHsgImRoY3AtdmVuZG9yY2xhc3MiLCAxLCAwLCAnVScgfSwKKyAgICB7ICJkaGNwLXVzZXJjbGFzcyIsIDEsIDAsICdqJyB9LAorICAgIHsgImRoY3AtaWdub3JlIiwgMSwgMCwgJ0onIH0sCisgICAgeyAiZWRucy1wYWNrZXQtbWF4IiwgMSwgMCwgJ1AnIH0sCisgICAgeyAia2VlcC1pbi1mb3JlZ3JvdW5kIiwgMCwgMCwgJ2snIH0sCisgICAgeyAiZGhjcC1hdXRob3JpdGF0aXZlIiwgMCwgMCwgJ0snIH0sCisgICAgeyAic3J2LWhvc3QiLCAxLCAwLCAnVycgfSwKKyAgICB7ICJsb2NhbGlzZS1xdWVyaWVzIiwgMCwgMCwgJ3knIH0sCisgICAgeyAidHh0LXJlY29yZCIsIDEsIDAsICdZJyB9LAorICAgIHsgImRucy1yciIsIDEsIDAsIExPUFRfUlIgfSwKKyAgICB7ICJlbmFibGUtZGJ1cyIsIDIsIDAsICcxJyB9LAorICAgIHsgImJvb3RwLWR5bmFtaWMiLCAyLCAwLCAnMycgfSwKKyAgICB7ICJkaGNwLW1hYyIsIDEsIDAsICc0JyB9LAorICAgIHsgIm5vLXBpbmciLCAwLCAwLCAnNScgfSwKKyAgICB7ICJkaGNwLXNjcmlwdCIsIDEsIDAsICc2JyB9LAorICAgIHsgImNvbmYtZGlyIiwgMSwgMCwgJzcnIH0sCisgICAgeyAibG9nLWZhY2lsaXR5IiwgMSwgMCAsJzgnIH0sCisgICAgeyAibGVhc2VmaWxlLXJvIiwgMCwgMCwgJzknIH0sCisgICAgeyAiZG5zLWZvcndhcmQtbWF4IiwgMSwgMCwgJzAnIH0sCisgICAgeyAiY2xlYXItb24tcmVsb2FkIiwgMCwgMCwgTE9QVF9SRUxPQUQgfSwKKyAgICB7ICJkaGNwLWlnbm9yZS1uYW1lcyIsIDIsIDAsIExPUFRfTk9fTkFNRVMgfSwKKyAgICB7ICJlbmFibGUtdGZ0cCIsIDIsIDAsIExPUFRfVEZUUCB9LAorICAgIHsgInRmdHAtc2VjdXJlIiwgMCwgMCwgTE9QVF9TRUNVUkUgfSwKKyAgICB7ICJ0ZnRwLW5vLWZhaWwiLCAwLCAwLCBMT1BUX1RGVFBfTk9fRkFJTCB9LAorICAgIHsgInRmdHAtdW5pcXVlLXJvb3QiLCAyLCAwLCBMT1BUX0FQUkVGIH0sCisgICAgeyAidGZ0cC1yb290IiwgMSwgMCwgTE9QVF9QUkVGSVggfSwKKyAgICB7ICJ0ZnRwLW1heCIsIDEsIDAsIExPUFRfVEZUUF9NQVggfSwKKyAgICB7ICJ0ZnRwLW10dSIsIDEsIDAsIExPUFRfVEZUUF9NVFUgfSwKKyAgICB7ICJ0ZnRwLWxvd2VyY2FzZSIsIDAsIDAsIExPUFRfVEZUUF9MQyB9LAorICAgIHsgInB0ci1yZWNvcmQiLCAxLCAwLCBMT1BUX1BUUiB9LAorICAgIHsgIm5hcHRyLXJlY29yZCIsIDEsIDAsIExPUFRfTkFQVFIgfSwKKyAgICB7ICJicmlkZ2UtaW50ZXJmYWNlIiwgMSwgMCAsIExPUFRfQlJJREdFIH0sCisgICAgeyAiZGhjcC1vcHRpb24tZm9yY2UiLCAxLCAwLCBMT1BUX0ZPUkNFIH0sCisgICAgeyAidGZ0cC1uby1ibG9ja3NpemUiLCAwLCAwLCBMT1BUX05PQkxPQ0sgfSwKKyAgICB7ICJsb2ctZGhjcCIsIDAsIDAsIExPUFRfTE9HX09QVFMgfSwKKyAgICB7ICJsb2ctYXN5bmMiLCAyLCAwLCBMT1BUX01BWF9MT0dTIH0sCisgICAgeyAiZGhjcC1jaXJjdWl0aWQiLCAxLCAwLCBMT1BUX0NJUkNVSVQgfSwKKyAgICB7ICJkaGNwLXJlbW90ZWlkIiwgMSwgMCwgTE9QVF9SRU1PVEUgfSwKKyAgICB7ICJkaGNwLXN1YnNjcmlkIiwgMSwgMCwgTE9QVF9TVUJTQ1IgfSwKKyAgICB7ICJpbnRlcmZhY2UtbmFtZSIsIDEsIDAsIExPUFRfSU5UTkFNRSB9LAorICAgIHsgImRoY3AtaG9zdHNmaWxlIiwgMSwgMCwgTE9QVF9ESENQX0hPU1QgfSwKKyAgICB7ICJkaGNwLW9wdHNmaWxlIiwgMSwgMCwgTE9QVF9ESENQX09QVFMgfSwKKyAgICB7ICJkaGNwLWhvc3RzZGlyIiwgMSwgMCwgTE9QVF9ESENQX0lOT1RJRlkgfSwKKyAgICB7ICJkaGNwLW9wdHNkaXIiLCAxLCAwLCBMT1BUX0RIT1BUX0lOT1RJRlkgfSwKKyAgICB7ICJkaGNwLW5vLW92ZXJyaWRlIiwgMCwgMCwgTE9QVF9PVkVSUklERSB9LAorICAgIHsgInRmdHAtcG9ydC1yYW5nZSIsIDEsIDAsIExPUFRfVEZUUFBPUlRTIH0sCisgICAgeyAic3RvcC1kbnMtcmViaW5kIiwgMCwgMCwgTE9QVF9SRUJJTkQgfSwKKyAgICB7ICJyZWJpbmQtZG9tYWluLW9rIiwgMSwgMCwgTE9QVF9OT19SRUJJTkQgfSwKKyAgICB7ICJhbGwtc2VydmVycyIsIDAsIDAsIExPUFRfTk9MQVNUIH0sIAorICAgIHsgImRoY3AtbWF0Y2giLCAxLCAwLCBMT1BUX01BVENIIH0sIAorICAgIHsgImRoY3AtYnJvYWRjYXN0IiwgMiwgMCwgTE9QVF9CUk9BRENBU1QgfSwKKyAgICB7ICJuZWctdHRsIiwgMSwgMCwgTE9QVF9ORUdUVEwgfSwKKyAgICB7ICJtYXgtdHRsIiwgMSwgMCwgTE9QVF9NQVhUVEwgfSwKKyAgICB7ICJtaW4tY2FjaGUtdHRsIiwgMSwgMCwgTE9QVF9NSU5DVFRMIH0sCisgICAgeyAibWF4LWNhY2hlLXR0bCIsIDEsIDAsIExPUFRfTUFYQ1RUTCB9LAorICAgIHsgImRoY3AtYWx0ZXJuYXRlLXBvcnQiLCAyLCAwLCBMT1BUX0FMVFBPUlQgfSwKKyAgICB7ICJkaGNwLXNjcmlwdHVzZXIiLCAxLCAwLCBMT1BUX1NDUklQVFVTUiB9LAorICAgIHsgIm1pbi1wb3J0IiwgMSwgMCwgTE9QVF9NSU5QT1JUIH0sCisgICAgeyAibWF4LXBvcnQiLCAxLCAwLCBMT1BUX01BWFBPUlQgfSwKKyAgICB7ICJkaGNwLWZxZG4iLCAwLCAwLCBMT1BUX0RIQ1BfRlFETiB9LAorICAgIHsgImNuYW1lIiwgMSwgMCwgTE9QVF9DTkFNRSB9LAorICAgIHsgInB4ZS1wcm9tcHQiLCAxLCAwLCBMT1BUX1BYRV9QUk9NVCB9LAorICAgIHsgInB4ZS1zZXJ2aWNlIiwgMSwgMCwgTE9QVF9QWEVfU0VSViB9LAorICAgIHsgInRlc3QiLCAwLCAwLCBMT1BUX1RFU1QgfSwKKyAgICB7ICJ0YWctaWYiLCAxLCAwLCBMT1BUX1RBR19JRiB9LAorICAgIHsgImRoY3AtcHJveHkiLCAyLCAwLCBMT1BUX1BST1hZIH0sCisgICAgeyAiZGhjcC1nZW5lcmF0ZS1uYW1lcyIsIDIsIDAsIExPUFRfR0VOX05BTUVTIH0sCisgICAgeyAicmViaW5kLWxvY2FsaG9zdC1vayIsIDAsIDAsICBMT1BUX0xPQ19SRUJORCB9LAorICAgIHsgImFkZC1tYWMiLCAyLCAwLCBMT1BUX0FERF9NQUMgfSwKKyAgICB7ICJhZGQtc3VibmV0IiwgMiwgMCwgTE9QVF9BRERfU0JORVQgfSwKKyAgICB7ICJhZGQtY3BlLWlkIiwgMSwgMCAsIExPUFRfQ1BFX0lEIH0sCisgICAgeyAicHJveHktZG5zc2VjIiwgMCwgMCwgTE9QVF9ETlNTRUMgfSwKKyAgICB7ICJkaGNwLXNlcXVlbnRpYWwtaXAiLCAwLCAwLCAgTE9QVF9JTkNSX0FERFIgfSwKKyAgICB7ICJjb25udHJhY2siLCAwLCAwLCBMT1BUX0NPTk5UUkFDSyB9LAorICAgIHsgImRoY3AtY2xpZW50LXVwZGF0ZSIsIDAsIDAsIExPUFRfRlFETiB9LAorICAgIHsgImRoY3AtbHVhc2NyaXB0IiwgMSwgMCwgTE9QVF9MVUFTQ1JJUFQgfSwKKyAgICB7ICJlbmFibGUtcmEiLCAwLCAwLCBMT1BUX1JBIH0sCisgICAgeyAiZGhjcC1kdWlkIiwgMSwgMCwgTE9QVF9EVUlEIH0sCisgICAgeyAiaG9zdC1yZWNvcmQiLCAxLCAwLCBMT1BUX0hPU1RfUkVDIH0sCisgICAgeyAiYmluZC1keW5hbWljIiwgMCwgMCwgTE9QVF9DTFZFUkJJTkQgfSwKKyAgICB7ICJhdXRoLXpvbmUiLCAxLCAwLCBMT1BUX0FVVEhaT05FIH0sCisgICAgeyAiYXV0aC1zZXJ2ZXIiLCAxLCAwLCBMT1BUX0FVVEhTRVJWIH0sCisgICAgeyAiYXV0aC10dGwiLCAxLCAwLCBMT1BUX0FVVEhUVEwgfSwKKyAgICB7ICJhdXRoLXNvYSIsIDEsIDAsIExPUFRfQVVUSFNPQSB9LAorICAgIHsgImF1dGgtc2VjLXNlcnZlcnMiLCAxLCAwLCBMT1BUX0FVVEhTRlMgfSwKKyAgICB7ICJhdXRoLXBlZXIiLCAxLCAwLCBMT1BUX0FVVEhQRUVSIH0sIAorICAgIHsgImlwc2V0IiwgMSwgMCwgTE9QVF9JUFNFVCB9LAorICAgIHsgInN5bnRoLWRvbWFpbiIsIDEsIDAsIExPUFRfU1lOVEggfSwKKyAgICB7ICJkbnNzZWMiLCAwLCAwLCBMT1BUX1NFQ19WQUxJRCB9LAorICAgIHsgInRydXN0LWFuY2hvciIsIDEsIDAsIExPUFRfVFJVU1RfQU5DSE9SIH0sCisgICAgeyAiZG5zc2VjLWRlYnVnIiwgMCwgMCwgTE9QVF9ETlNTRUNfREVCVUcgfSwKKyAgICB7ICJkbnNzZWMtY2hlY2stdW5zaWduZWQiLCAwLCAwLCBMT1BUX0ROU1NFQ19DSEVDSyB9LAorICAgIHsgImRuc3NlYy1uby10aW1lY2hlY2siLCAwLCAwLCBMT1BUX0ROU1NFQ19USU1FIH0sCisgICAgeyAiZG5zc2VjLXRpbWVzdGFtcCIsIDEsIDAsIExPUFRfRE5TU0VDX1NUQU1QIH0sCisjaWZkZWYgT1BUSU9ONl9QUkVGSVhfQ0xBU1MgCisgICAgeyAiZGhjcC1wcmVmaXgtY2xhc3MiLCAxLCAwLCBMT1BUX1BSRUZfQ0xTUyB9LAorI2VuZGlmCisgICAgeyAiZGhjcC1yZWxheSIsIDEsIDAsIExPUFRfUkVMQVkgfSwKKyAgICB7ICJyYS1wYXJhbSIsIDEsIDAsIExPUFRfUkFfUEFSQU0gfSwKKyAgICB7ICJxdWlldC1kaGNwIiwgMCwgMCwgTE9QVF9RVUlFVF9ESENQIH0sCisgICAgeyAicXVpZXQtZGhjcDYiLCAwLCAwLCBMT1BUX1FVSUVUX0RIQ1A2IH0sCisgICAgeyAicXVpZXQtcmEiLCAwLCAwLCBMT1BUX1FVSUVUX1JBIH0sCisgICAgeyAiZG5zLWxvb3AtZGV0ZWN0IiwgMCwgMCwgTE9QVF9MT09QX0RFVEVDVCB9LAorICAgIHsgInNjcmlwdC1hcnAiLCAwLCAwLCBMT1BUX1NDUklQVF9BUlAgfSwKKyAgICB7ICJkaGNwLXR0bCIsIDEsIDAgLCBMT1BUX0RIQ1BUVEwgfSwKKyAgICB7ICJkaGNwLXJlcGx5LWRlbGF5IiwgMSwgMCwgTE9QVF9SRVBMWV9ERUxBWSB9LAorICAgIHsgTlVMTCwgMCwgMCwgMCB9CisgIH07CisKKworI2RlZmluZSBBUkdfRFVQICAgICAgIE9QVF9MQVNUCisjZGVmaW5lIEFSR19PTkUgICAgICAgT1BUX0xBU1QgKyAxCisjZGVmaW5lIEFSR19VU0VEX0NMICAgT1BUX0xBU1QgKyAyCisjZGVmaW5lIEFSR19VU0VEX0ZJTEUgT1BUX0xBU1QgKyAzCisKK3N0YXRpYyBzdHJ1Y3QgeworICBpbnQgb3B0OworICB1bnNpZ25lZCBpbnQgcmVwdDsKKyAgY2hhciAqIGNvbnN0IGZsYWdkZXNjOworICBjaGFyICogY29uc3QgZGVzYzsKKyAgY2hhciAqIGNvbnN0IGFyZzsKK30gdXNhZ2VbXSA9IHsKKyAgeyAnYScsIEFSR19EVVAsICI8aXBhZGRyPiIsICBnZXR0ZXh0X25vb3AoIlNwZWNpZnkgbG9jYWwgYWRkcmVzcyhlcykgdG8gbGlzdGVuIG9uLiIpLCBOVUxMIH0sCisgIHsgJ0EnLCBBUkdfRFVQLCAiLzxkb21haW4+LzxpcGFkZHI+IiwgZ2V0dGV4dF9ub29wKCJSZXR1cm4gaXBhZGRyIGZvciBhbGwgaG9zdHMgaW4gc3BlY2lmaWVkIGRvbWFpbnMuIiksIE5VTEwgfSwKKyAgeyAnYicsIE9QVF9CT0dVU1BSSVYsIE5VTEwsIGdldHRleHRfbm9vcCgiRmFrZSByZXZlcnNlIGxvb2t1cHMgZm9yIFJGQzE5MTggcHJpdmF0ZSBhZGRyZXNzIHJhbmdlcy4iKSwgTlVMTCB9LAorICB7ICdCJywgQVJHX0RVUCwgIjxpcGFkZHI+IiwgZ2V0dGV4dF9ub29wKCJUcmVhdCBpcGFkZHIgYXMgTlhET01BSU4gKGRlZmVhdHMgVmVyaXNpZ24gd2lsZGNhcmQpLiIpLCBOVUxMIH0sIAorICB7ICdjJywgQVJHX09ORSwgIjxpbnRlZ2VyPiIsIGdldHRleHRfbm9vcCgiU3BlY2lmeSB0aGUgc2l6ZSBvZiB0aGUgY2FjaGUgaW4gZW50cmllcyAoZGVmYXVsdHMgdG8gJXMpLiIpLCAiJCIgfSwKKyAgeyAnQycsIEFSR19EVVAsICI8cGF0aD4iLCBnZXR0ZXh0X25vb3AoIlNwZWNpZnkgY29uZmlndXJhdGlvbiBmaWxlIChkZWZhdWx0cyB0byAlcykuIiksIENPTkZGSUxFIH0sCisgIHsgJ2QnLCBPUFRfREVCVUcsIE5VTEwsIGdldHRleHRfbm9vcCgiRG8gTk9UIGZvcmsgaW50byB0aGUgYmFja2dyb3VuZDogcnVuIGluIGRlYnVnIG1vZGUuIiksIE5VTEwgfSwKKyAgeyAnRCcsIE9QVF9OT0RPVFNfTE9DQUwsIE5VTEwsIGdldHRleHRfbm9vcCgiRG8gTk9UIGZvcndhcmQgcXVlcmllcyB3aXRoIG5vIGRvbWFpbiBwYXJ0LiIpLCBOVUxMIH0sIAorICB7ICdlJywgT1BUX1NFTEZNWCwgTlVMTCwgZ2V0dGV4dF9ub29wKCJSZXR1cm4gc2VsZi1wb2ludGluZyBNWCByZWNvcmRzIGZvciBsb2NhbCBob3N0cy4iKSwgTlVMTCB9LAorICB7ICdFJywgT1BUX0VYUEFORCwgTlVMTCwgZ2V0dGV4dF9ub29wKCJFeHBhbmQgc2ltcGxlIG5hbWVzIGluIC9ldGMvaG9zdHMgd2l0aCBkb21haW4tc3VmZml4LiIpLCBOVUxMIH0sCisgIHsgJ2YnLCBPUFRfRklMVEVSLCBOVUxMLCBnZXR0ZXh0X25vb3AoIkRvbid0IGZvcndhcmQgc3B1cmlvdXMgRE5TIHJlcXVlc3RzIGZyb20gV2luZG93cyBob3N0cy4iKSwgTlVMTCB9LAorICB7ICdGJywgQVJHX0RVUCwgIjxpcGFkZHI+LC4uLiIsIGdldHRleHRfbm9vcCgiRW5hYmxlIERIQ1AgaW4gdGhlIHJhbmdlIGdpdmVuIHdpdGggbGVhc2UgZHVyYXRpb24uIiksIE5VTEwgfSwKKyAgeyAnZycsIEFSR19PTkUsICI8Z3JvdXBuYW1lPiIsIGdldHRleHRfbm9vcCgiQ2hhbmdlIHRvIHRoaXMgZ3JvdXAgYWZ0ZXIgc3RhcnR1cCAoZGVmYXVsdHMgdG8gJXMpLiIpLCBDSEdSUCB9LAorICB7ICdHJywgQVJHX0RVUCwgIjxob3N0c3BlYz4iLCBnZXR0ZXh0X25vb3AoIlNldCBhZGRyZXNzIG9yIGhvc3RuYW1lIGZvciBhIHNwZWNpZmllZCBtYWNoaW5lLiIpLCBOVUxMIH0sCisgIHsgTE9QVF9ESENQX0hPU1QsIEFSR19EVVAsICI8cGF0aD4iLCBnZXR0ZXh0X25vb3AoIlJlYWQgREhDUCBob3N0IHNwZWNzIGZyb20gZmlsZS4iKSwgTlVMTCB9LAorICB7IExPUFRfREhDUF9PUFRTLCBBUkdfRFVQLCAiPHBhdGg+IiwgZ2V0dGV4dF9ub29wKCJSZWFkIERIQ1Agb3B0aW9uIHNwZWNzIGZyb20gZmlsZS4iKSwgTlVMTCB9LAorICB7IExPUFRfREhDUF9JTk9USUZZLCBBUkdfRFVQLCAiPHBhdGg+IiwgZ2V0dGV4dF9ub29wKCJSZWFkIERIQ1AgaG9zdCBzcGVjcyBmcm9tIGEgZGlyZWN0b3J5LiIpLCBOVUxMIH0sIAorICB7IExPUFRfREhPUFRfSU5PVElGWSwgQVJHX0RVUCwgIjxwYXRoPiIsIGdldHRleHRfbm9vcCgiUmVhZCBESENQIG9wdGlvbnMgZnJvbSBhIGRpcmVjdG9yeS4iKSwgTlVMTCB9LCAKKyAgeyBMT1BUX1RBR19JRiwgQVJHX0RVUCwgInRhZy1leHByZXNzaW9uIiwgZ2V0dGV4dF9ub29wKCJFdmFsdWF0ZSBjb25kaXRpb25hbCB0YWcgZXhwcmVzc2lvbi4iKSwgTlVMTCB9LAorICB7ICdoJywgT1BUX05PX0hPU1RTLCBOVUxMLCBnZXR0ZXh0X25vb3AoIkRvIE5PVCBsb2FkICVzIGZpbGUuIiksIEhPU1RTRklMRSB9LAorICB7ICdIJywgQVJHX0RVUCwgIjxwYXRoPiIsIGdldHRleHRfbm9vcCgiU3BlY2lmeSBhIGhvc3RzIGZpbGUgdG8gYmUgcmVhZCBpbiBhZGRpdGlvbiB0byAlcy4iKSwgSE9TVFNGSUxFIH0sCisgIHsgTE9QVF9IT1NUX0lOT1RJRlksIEFSR19EVVAsICI8cGF0aD4iLCBnZXR0ZXh0X25vb3AoIlJlYWQgaG9zdHMgZmlsZXMgZnJvbSBhIGRpcmVjdG9yeS4iKSwgTlVMTCB9LAorICB7ICdpJywgQVJHX0RVUCwgIjxpbnRlcmZhY2U+IiwgZ2V0dGV4dF9ub29wKCJTcGVjaWZ5IGludGVyZmFjZShzKSB0byBsaXN0ZW4gb24uIiksIE5VTEwgfSwKKyAgeyAnSScsIEFSR19EVVAsICI8aW50ZXJmYWNlPiIsIGdldHRleHRfbm9vcCgiU3BlY2lmeSBpbnRlcmZhY2UocykgTk9UIHRvIGxpc3RlbiBvbi4iKSAsIE5VTEwgfSwKKyAgeyAnaicsIEFSR19EVVAsICJzZXQ6PHRhZz4sPGNsYXNzPiIsIGdldHRleHRfbm9vcCgiTWFwIERIQ1AgdXNlciBjbGFzcyB0byB0YWcuIiksIE5VTEwgfSwKKyAgeyBMT1BUX0NJUkNVSVQsIEFSR19EVVAsICJzZXQ6PHRhZz4sPGNpcmN1aXQ+IiwgZ2V0dGV4dF9ub29wKCJNYXAgUkZDMzA0NiBjaXJjdWl0LWlkIHRvIHRhZy4iKSwgTlVMTCB9LAorICB7IExPUFRfUkVNT1RFLCBBUkdfRFVQLCAic2V0Ojx0YWc+LDxyZW1vdGU+IiwgZ2V0dGV4dF9ub29wKCJNYXAgUkZDMzA0NiByZW1vdGUtaWQgdG8gdGFnLiIpLCBOVUxMIH0sCisgIHsgTE9QVF9TVUJTQ1IsIEFSR19EVVAsICJzZXQ6PHRhZz4sPHJlbW90ZT4iLCBnZXR0ZXh0X25vb3AoIk1hcCBSRkMzOTkzIHN1YnNjcmliZXItaWQgdG8gdGFnLiIpLCBOVUxMIH0sCisgIHsgJ0onLCBBUkdfRFVQLCAidGFnOjx0YWc+Li4uIiwgZ2V0dGV4dF9ub29wKCJEb24ndCBkbyBESENQIGZvciBob3N0cyB3aXRoIHRhZyBzZXQuIiksIE5VTEwgfSwKKyAgeyBMT1BUX0JST0FEQ0FTVCwgQVJHX0RVUCwgIls9dGFnOjx0YWc+Li4uXSIsIGdldHRleHRfbm9vcCgiRm9yY2UgYnJvYWRjYXN0IHJlcGxpZXMgZm9yIGhvc3RzIHdpdGggdGFnIHNldC4iKSwgTlVMTCB9LCAKKyAgeyAnaycsIE9QVF9OT19GT1JLLCBOVUxMLCBnZXR0ZXh0X25vb3AoIkRvIE5PVCBmb3JrIGludG8gdGhlIGJhY2tncm91bmQsIGRvIE5PVCBydW4gaW4gZGVidWcgbW9kZS4iKSwgTlVMTCB9LAorICB7ICdLJywgT1BUX0FVVEhPUklUQVRJVkUsIE5VTEwsIGdldHRleHRfbm9vcCgiQXNzdW1lIHdlIGFyZSB0aGUgb25seSBESENQIHNlcnZlciBvbiB0aGUgbG9jYWwgbmV0d29yay4iKSwgTlVMTCB9LAorICB7ICdsJywgQVJHX09ORSwgIjxwYXRoPiIsIGdldHRleHRfbm9vcCgiU3BlY2lmeSB3aGVyZSB0byBzdG9yZSBESENQIGxlYXNlcyAoZGVmYXVsdHMgdG8gJXMpLiIpLCBMRUFTRUZJTEUgfSwKKyAgeyAnTCcsIE9QVF9MT0NBTE1YLCBOVUxMLCBnZXR0ZXh0X25vb3AoIlJldHVybiBNWCByZWNvcmRzIGZvciBsb2NhbCBob3N0cy4iKSwgTlVMTCB9LAorICB7ICdtJywgQVJHX0RVUCwgIjxob3N0X25hbWU+LDx0YXJnZXQ+LDxwcmVmPiIsIGdldHRleHRfbm9vcCgiU3BlY2lmeSBhbiBNWCByZWNvcmQuIiksIE5VTEwgfSwKKyAgeyAnTScsIEFSR19EVVAsICI8Ym9vdHAgb3B0cz4iLCBnZXR0ZXh0X25vb3AoIlNwZWNpZnkgQk9PVFAgb3B0aW9ucyB0byBESENQIHNlcnZlci4iKSwgTlVMTCB9LAorICB7ICduJywgT1BUX05PX1BPTEwsIE5VTEwsIGdldHRleHRfbm9vcCgiRG8gTk9UIHBvbGwgJXMgZmlsZSwgcmVsb2FkIG9ubHkgb24gU0lHSFVQLiIpLCBSRVNPTFZGSUxFIH0sIAorICB7ICdOJywgT1BUX05PX05FRywgTlVMTCwgZ2V0dGV4dF9ub29wKCJEbyBOT1QgY2FjaGUgZmFpbGVkIHNlYXJjaCByZXN1bHRzLiIpLCBOVUxMIH0sCisgIHsgJ28nLCBPUFRfT1JERVIsIE5VTEwsIGdldHRleHRfbm9vcCgiVXNlIG5hbWVzZXJ2ZXJzIHN0cmljdGx5IGluIHRoZSBvcmRlciBnaXZlbiBpbiAlcy4iKSwgUkVTT0xWRklMRSB9LAorICB7ICdPJywgQVJHX0RVUCwgIjxvcHRzcGVjPiIsIGdldHRleHRfbm9vcCgiU3BlY2lmeSBvcHRpb25zIHRvIGJlIHNlbnQgdG8gREhDUCBjbGllbnRzLiIpLCBOVUxMIH0sCisgIHsgTE9QVF9GT1JDRSwgQVJHX0RVUCwgIjxvcHRzcGVjPiIsIGdldHRleHRfbm9vcCgiREhDUCBvcHRpb24gc2VudCBldmVuIGlmIHRoZSBjbGllbnQgZG9lcyBub3QgcmVxdWVzdCBpdC4iKSwgTlVMTH0sCisgIHsgJ3AnLCBBUkdfT05FLCAiPGludGVnZXI+IiwgZ2V0dGV4dF9ub29wKCJTcGVjaWZ5IHBvcnQgdG8gbGlzdGVuIGZvciBETlMgcmVxdWVzdHMgb24gKGRlZmF1bHRzIHRvIDUzKS4iKSwgTlVMTCB9LAorICB7ICdQJywgQVJHX09ORSwgIjxpbnRlZ2VyPiIsIGdldHRleHRfbm9vcCgiTWF4aW11bSBzdXBwb3J0ZWQgVURQIHBhY2tldCBzaXplIGZvciBFRE5TLjAgKGRlZmF1bHRzIHRvICVzKS4iKSwgIioiIH0sCisgIHsgJ3EnLCBBUkdfRFVQLCBOVUxMLCBnZXR0ZXh0X25vb3AoIkxvZyBETlMgcXVlcmllcy4iKSwgTlVMTCB9LAorICB7ICdRJywgQVJHX09ORSwgIjxpbnRlZ2VyPiIsIGdldHRleHRfbm9vcCgiRm9yY2UgdGhlIG9yaWdpbmF0aW5nIHBvcnQgZm9yIHVwc3RyZWFtIEROUyBxdWVyaWVzLiIpLCBOVUxMIH0sCisgIHsgJ1InLCBPUFRfTk9fUkVTT0xWLCBOVUxMLCBnZXR0ZXh0X25vb3AoIkRvIE5PVCByZWFkIHJlc29sdi5jb25mLiIpLCBOVUxMIH0sCisgIHsgJ3InLCBBUkdfRFVQLCAiPHBhdGg+IiwgZ2V0dGV4dF9ub29wKCJTcGVjaWZ5IHBhdGggdG8gcmVzb2x2LmNvbmYgKGRlZmF1bHRzIHRvICVzKS4iKSwgUkVTT0xWRklMRSB9LCAKKyAgeyBMT1BUX1NFUlZFUlNfRklMRSwgQVJHX09ORSwgIjxwYXRoPiIsIGdldHRleHRfbm9vcCgiU3BlY2lmeSBwYXRoIHRvIGZpbGUgd2l0aCBzZXJ2ZXI9IG9wdGlvbnMiKSwgTlVMTCB9LAorICB7ICdTJywgQVJHX0RVUCwgIi88ZG9tYWluPi88aXBhZGRyPiIsIGdldHRleHRfbm9vcCgiU3BlY2lmeSBhZGRyZXNzKGVzKSBvZiB1cHN0cmVhbSBzZXJ2ZXJzIHdpdGggb3B0aW9uYWwgZG9tYWlucy4iKSwgTlVMTCB9LAorICB7IExPUFRfUkVWX1NFUlYsIEFSR19EVVAsICI8YWRkcj4vPHByZWZpeD4sPGlwYWRkcj4iLCBnZXR0ZXh0X25vb3AoIlNwZWNpZnkgYWRkcmVzcyBvZiB1cHN0cmVhbSBzZXJ2ZXJzIGZvciByZXZlcnNlIGFkZHJlc3MgcXVlcmllcyIpLCBOVUxMIH0sCisgIHsgTE9QVF9MT0NBTCwgQVJHX0RVUCwgIi88ZG9tYWluPi8iLCBnZXR0ZXh0X25vb3AoIk5ldmVyIGZvcndhcmQgcXVlcmllcyB0byBzcGVjaWZpZWQgZG9tYWlucy4iKSwgTlVMTCB9LAorICB7ICdzJywgQVJHX0RVUCwgIjxkb21haW4+Wyw8cmFuZ2U+XSIsIGdldHRleHRfbm9vcCgiU3BlY2lmeSB0aGUgZG9tYWluIHRvIGJlIGFzc2lnbmVkIGluIERIQ1AgbGVhc2VzLiIpLCBOVUxMIH0sCisgIHsgJ3QnLCBBUkdfT05FLCAiPGhvc3RfbmFtZT4iLCBnZXR0ZXh0X25vb3AoIlNwZWNpZnkgZGVmYXVsdCB0YXJnZXQgaW4gYW4gTVggcmVjb3JkLiIpLCBOVUxMIH0sCisgIHsgJ1QnLCBBUkdfT05FLCAiPGludGVnZXI+IiwgZ2V0dGV4dF9ub29wKCJTcGVjaWZ5IHRpbWUtdG8tbGl2ZSBpbiBzZWNvbmRzIGZvciByZXBsaWVzIGZyb20gL2V0Yy9ob3N0cy4iKSwgTlVMTCB9LAorICB7IExPUFRfTkVHVFRMLCBBUkdfT05FLCAiPGludGVnZXI+IiwgZ2V0dGV4dF9ub29wKCJTcGVjaWZ5IHRpbWUtdG8tbGl2ZSBpbiBzZWNvbmRzIGZvciBuZWdhdGl2ZSBjYWNoaW5nLiIpLCBOVUxMIH0sCisgIHsgTE9QVF9NQVhUVEwsIEFSR19PTkUsICI8aW50ZWdlcj4iLCBnZXR0ZXh0X25vb3AoIlNwZWNpZnkgdGltZS10by1saXZlIGluIHNlY29uZHMgZm9yIG1heGltdW0gVFRMIHRvIHNlbmQgdG8gY2xpZW50cy4iKSwgTlVMTCB9LAorICB7IExPUFRfTUFYQ1RUTCwgQVJHX09ORSwgIjxpbnRlZ2VyPiIsIGdldHRleHRfbm9vcCgiU3BlY2lmeSB0aW1lLXRvLWxpdmUgY2VpbGluZyBmb3IgY2FjaGUuIiksIE5VTEwgfSwKKyAgeyBMT1BUX01JTkNUVEwsIEFSR19PTkUsICI8aW50ZWdlcj4iLCBnZXR0ZXh0X25vb3AoIlNwZWNpZnkgdGltZS10by1saXZlIGZsb29yIGZvciBjYWNoZS4iKSwgTlVMTCB9LAorICB7ICd1JywgQVJHX09ORSwgIjx1c2VybmFtZT4iLCBnZXR0ZXh0X25vb3AoIkNoYW5nZSB0byB0aGlzIHVzZXIgYWZ0ZXIgc3RhcnR1cC4gKGRlZmF1bHRzIHRvICVzKS4iKSwgQ0hVU0VSIH0sIAorICB7ICdVJywgQVJHX0RVUCwgInNldDo8dGFnPiw8Y2xhc3M+IiwgZ2V0dGV4dF9ub29wKCJNYXAgREhDUCB2ZW5kb3IgY2xhc3MgdG8gdGFnLiIpLCBOVUxMIH0sCisgIHsgJ3YnLCAwLCBOVUxMLCBnZXR0ZXh0X25vb3AoIkRpc3BsYXkgZG5zbWFzcSB2ZXJzaW9uIGFuZCBjb3B5cmlnaHQgaW5mb3JtYXRpb24uIiksIE5VTEwgfSwKKyAgeyAnVicsIEFSR19EVVAsICI8aXBhZGRyPiw8aXBhZGRyPiw8bmV0bWFzaz4iLCBnZXR0ZXh0X25vb3AoIlRyYW5zbGF0ZSBJUHY0IGFkZHJlc3NlcyBmcm9tIHVwc3RyZWFtIHNlcnZlcnMuIiksIE5VTEwgfSwKKyAgeyAnVycsIEFSR19EVVAsICI8bmFtZT4sPHRhcmdldD4sLi4uIiwgZ2V0dGV4dF9ub29wKCJTcGVjaWZ5IGEgU1JWIHJlY29yZC4iKSwgTlVMTCB9LAorICB7ICd3JywgMCwgTlVMTCwgZ2V0dGV4dF9ub29wKCJEaXNwbGF5IHRoaXMgbWVzc2FnZS4gVXNlIC0taGVscCBkaGNwIG9yIC0taGVscCBkaGNwNiBmb3Iga25vd24gREhDUCBvcHRpb25zLiIpLCBOVUxMIH0sCisgIHsgJ3gnLCBBUkdfT05FLCAiPHBhdGg+IiwgZ2V0dGV4dF9ub29wKCJTcGVjaWZ5IHBhdGggb2YgUElEIGZpbGUgKGRlZmF1bHRzIHRvICVzKS4iKSwgUlVORklMRSB9LAorICB7ICdYJywgQVJHX09ORSwgIjxpbnRlZ2VyPiIsIGdldHRleHRfbm9vcCgiU3BlY2lmeSBtYXhpbXVtIG51bWJlciBvZiBESENQIGxlYXNlcyAoZGVmYXVsdHMgdG8gJXMpLiIpLCAiJiIgfSwKKyAgeyAneScsIE9QVF9MT0NBTElTRSwgTlVMTCwgZ2V0dGV4dF9ub29wKCJBbnN3ZXIgRE5TIHF1ZXJpZXMgYmFzZWQgb24gdGhlIGludGVyZmFjZSBhIHF1ZXJ5IHdhcyBzZW50IHRvLiIpLCBOVUxMIH0sCisgIHsgJ1knLCBBUkdfRFVQLCAiPG5hbWU+LDx0eHQ+Wyw8dHh0XSIsIGdldHRleHRfbm9vcCgiU3BlY2lmeSBUWFQgRE5TIHJlY29yZC4iKSwgTlVMTCB9LAorICB7IExPUFRfUFRSLCBBUkdfRFVQLCAiPG5hbWU+LDx0YXJnZXQ+IiwgZ2V0dGV4dF9ub29wKCJTcGVjaWZ5IFBUUiBETlMgcmVjb3JkLiIpLCBOVUxMIH0sCisgIHsgTE9QVF9JTlROQU1FLCBBUkdfRFVQLCAiPG5hbWU+LDxpbnRlcmZhY2U+IiwgZ2V0dGV4dF9ub29wKCJHaXZlIEROUyBuYW1lIHRvIElQdjQgYWRkcmVzcyBvZiBpbnRlcmZhY2UuIiksIE5VTEwgfSwKKyAgeyAneicsIE9QVF9OT1dJTEQsIE5VTEwsIGdldHRleHRfbm9vcCgiQmluZCBvbmx5IHRvIGludGVyZmFjZXMgaW4gdXNlLiIpLCBOVUxMIH0sCisgIHsgJ1onLCBPUFRfRVRIRVJTLCBOVUxMLCBnZXR0ZXh0X25vb3AoIlJlYWQgREhDUCBzdGF0aWMgaG9zdCBpbmZvcm1hdGlvbiBmcm9tICVzLiIpLCBFVEhFUlNGSUxFIH0sCisgIHsgJzEnLCBBUkdfT05FLCAiWz08YnVzbmFtZT5dIiwgZ2V0dGV4dF9ub29wKCJFbmFibGUgdGhlIERCdXMgaW50ZXJmYWNlIGZvciBzZXR0aW5nIHVwc3RyZWFtIHNlcnZlcnMsIGV0Yy4iKSwgTlVMTCB9LAorICB7ICcyJywgQVJHX0RVUCwgIjxpbnRlcmZhY2U+IiwgZ2V0dGV4dF9ub29wKCJEbyBub3QgcHJvdmlkZSBESENQIG9uIHRoaXMgaW50ZXJmYWNlLCBvbmx5IHByb3ZpZGUgRE5TLiIpLCBOVUxMIH0sCisgIHsgJzMnLCBBUkdfRFVQLCAiWz10YWc6PHRhZz5dLi4uIiwgZ2V0dGV4dF9ub29wKCJFbmFibGUgZHluYW1pYyBhZGRyZXNzIGFsbG9jYXRpb24gZm9yIGJvb3RwLiIpLCBOVUxMIH0sCisgIHsgJzQnLCBBUkdfRFVQLCAic2V0Ojx0YWc+LDxtYWMgYWRkcmVzcz4iLCBnZXR0ZXh0X25vb3AoIk1hcCBNQUMgYWRkcmVzcyAod2l0aCB3aWxkY2FyZHMpIHRvIG9wdGlvbiBzZXQuIiksIE5VTEwgfSwKKyAgeyBMT1BUX0JSSURHRSwgQVJHX0RVUCwgIjxpZmFjZT4sPGFsaWFzPi4uIiwgZ2V0dGV4dF9ub29wKCJUcmVhdCBESENQIHJlcXVlc3RzIG9uIGFsaWFzZXMgYXMgYXJyaXZpbmcgZnJvbSBpbnRlcmZhY2UuIiksIE5VTEwgfSwKKyAgeyAnNScsIE9QVF9OT19QSU5HLCBOVUxMLCBnZXR0ZXh0X25vb3AoIkRpc2FibGUgSUNNUCBlY2hvIGFkZHJlc3MgY2hlY2tpbmcgaW4gdGhlIERIQ1Agc2VydmVyLiIpLCBOVUxMIH0sCisgIHsgJzYnLCBBUkdfT05FLCAiPHBhdGg+IiwgZ2V0dGV4dF9ub29wKCJTaGVsbCBzY3JpcHQgdG8gcnVuIG9uIERIQ1AgbGVhc2UgY3JlYXRpb24gYW5kIGRlc3RydWN0aW9uLiIpLCBOVUxMIH0sCisgIHsgTE9QVF9MVUFTQ1JJUFQsIEFSR19EVVAsICJwYXRoIiwgZ2V0dGV4dF9ub29wKCJMdWEgc2NyaXB0IHRvIHJ1biBvbiBESENQIGxlYXNlIGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbi4iKSwgTlVMTCB9LAorICB7IExPUFRfU0NSSVBUVVNSLCBBUkdfT05FLCAiPHVzZXJuYW1lPiIsIGdldHRleHRfbm9vcCgiUnVuIGxlYXNlLWNoYW5nZSBzY3JpcHRzIGFzIHRoaXMgdXNlci4iKSwgTlVMTCB9LAorICB7IExPUFRfU0NSSVBUX0FSUCwgT1BUX1NDUklQVF9BUlAsIE5VTEwsIGdldHRleHRfbm9vcCgiQ2FsbCBkaGNwLXNjcmlwdCB3aXRoIGNoYW5nZXMgdG8gbG9jYWwgQVJQIHRhYmxlLiIpLCBOVUxMIH0sCisgIHsgJzcnLCBBUkdfRFVQLCAiPHBhdGg+IiwgZ2V0dGV4dF9ub29wKCJSZWFkIGNvbmZpZ3VyYXRpb24gZnJvbSBhbGwgdGhlIGZpbGVzIGluIHRoaXMgZGlyZWN0b3J5LiIpLCBOVUxMIH0sCisgIHsgJzgnLCBBUkdfT05FLCAiPGZhY2lsaXR5Pnw8ZmlsZT4iLCBnZXR0ZXh0X25vb3AoIkxvZyB0byB0aGlzIHN5c2xvZyBmYWNpbGl0eSBvciBmaWxlLiAoZGVmYXVsdHMgdG8gREFFTU9OKSIpLCBOVUxMIH0sCisgIHsgJzknLCBPUFRfTEVBU0VfUk8sIE5VTEwsIGdldHRleHRfbm9vcCgiRG8gbm90IHVzZSBsZWFzZWZpbGUuIiksIE5VTEwgfSwKKyAgeyAnMCcsIEFSR19PTkUsICI8aW50ZWdlcj4iLCBnZXR0ZXh0X25vb3AoIk1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgRE5TIHF1ZXJpZXMuIChkZWZhdWx0cyB0byAlcykiKSwgIiEiIH0sIAorICB7IExPUFRfUkVMT0FELCBPUFRfUkVMT0FELCBOVUxMLCBnZXR0ZXh0X25vb3AoIkNsZWFyIEROUyBjYWNoZSB3aGVuIHJlbG9hZGluZyAlcy4iKSwgUkVTT0xWRklMRSB9LAorICB7IExPUFRfTk9fTkFNRVMsIEFSR19EVVAsICJbPXRhZzo8dGFnPl0uLi4iLCBnZXR0ZXh0X25vb3AoIklnbm9yZSBob3N0bmFtZXMgcHJvdmlkZWQgYnkgREhDUCBjbGllbnRzLiIpLCBOVUxMIH0sCisgIHsgTE9QVF9PVkVSUklERSwgT1BUX05PX09WRVJSSURFLCBOVUxMLCBnZXR0ZXh0X25vb3AoIkRvIE5PVCByZXVzZSBmaWxlbmFtZSBhbmQgc2VydmVyIGZpZWxkcyBmb3IgZXh0cmEgREhDUCBvcHRpb25zLiIpLCBOVUxMIH0sCisgIHsgTE9QVF9URlRQLCBBUkdfRFVQLCAiWz08aW50cj5bLDxpbnRyPl1dIiwgZ2V0dGV4dF9ub29wKCJFbmFibGUgaW50ZWdyYXRlZCByZWFkLW9ubHkgVEZUUCBzZXJ2ZXIuIiksIE5VTEwgfSwKKyAgeyBMT1BUX1BSRUZJWCwgQVJHX0RVUCwgIjxkaXI+Wyw8aWZhY2U+XSIsIGdldHRleHRfbm9vcCgiRXhwb3J0IGZpbGVzIGJ5IFRGVFAgb25seSBmcm9tIHRoZSBzcGVjaWZpZWQgc3VidHJlZS4iKSwgTlVMTCB9LAorICB7IExPUFRfQVBSRUYsIEFSR19EVVAsICJbPWlwfG1hY10iLCBnZXR0ZXh0X25vb3AoIkFkZCBjbGllbnQgSVAgb3IgaGFyZHdhcmUgYWRkcmVzcyB0byB0ZnRwLXJvb3QuIiksIE5VTEwgfSwKKyAgeyBMT1BUX1NFQ1VSRSwgT1BUX1RGVFBfU0VDVVJFLCBOVUxMLCBnZXR0ZXh0X25vb3AoIkFsbG93IGFjY2VzcyBvbmx5IHRvIGZpbGVzIG93bmVkIGJ5IHRoZSB1c2VyIHJ1bm5pbmcgZG5zbWFzcS4iKSwgTlVMTCB9LAorICB7IExPUFRfVEZUUF9OT19GQUlMLCBPUFRfVEZUUF9OT19GQUlMLCBOVUxMLCBnZXR0ZXh0X25vb3AoIkRvIG5vdCB0ZXJtaW5hdGUgdGhlIHNlcnZpY2UgaWYgVEZUUCBkaXJlY3RvcmllcyBhcmUgaW5hY2Nlc3NpYmxlLiIpLCBOVUxMIH0sCisgIHsgTE9QVF9URlRQX01BWCwgQVJHX09ORSwgIjxpbnRlZ2VyPiIsIGdldHRleHRfbm9vcCgiTWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCBURlRQIHRyYW5zZmVycyAoZGVmYXVsdHMgdG8gJXMpLiIpLCAiIyIgfSwKKyAgeyBMT1BUX1RGVFBfTVRVLCBBUkdfT05FLCAiPGludGVnZXI+IiwgZ2V0dGV4dF9ub29wKCJNYXhpbXVtIE1UVSB0byB1c2UgZm9yIFRGVFAgdHJhbnNmZXJzLiIpLCBOVUxMIH0sCisgIHsgTE9QVF9OT0JMT0NLLCBPUFRfVEZUUF9OT0JMT0NLLCBOVUxMLCBnZXR0ZXh0X25vb3AoIkRpc2FibGUgdGhlIFRGVFAgYmxvY2tzaXplIGV4dGVuc2lvbi4iKSwgTlVMTCB9LAorICB7IExPUFRfVEZUUF9MQywgT1BUX1RGVFBfTEMsIE5VTEwsIGdldHRleHRfbm9vcCgiQ29udmVydCBURlRQIGZpbGVuYW1lcyB0byBsb3dlcmNhc2UiKSwgTlVMTCB9LAorICB7IExPUFRfVEZUUFBPUlRTLCBBUkdfT05FLCAiPHN0YXJ0Piw8ZW5kPiIsIGdldHRleHRfbm9vcCgiRXBoZW1lcmFsIHBvcnQgcmFuZ2UgZm9yIHVzZSBieSBURlRQIHRyYW5zZmVycy4iKSwgTlVMTCB9LAorICB7IExPUFRfTE9HX09QVFMsIE9QVF9MT0dfT1BUUywgTlVMTCwgZ2V0dGV4dF9ub29wKCJFeHRyYSBsb2dnaW5nIGZvciBESENQLiIpLCBOVUxMIH0sCisgIHsgTE9QVF9NQVhfTE9HUywgQVJHX09ORSwgIls9PGludGVnZXI+XSIsIGdldHRleHRfbm9vcCgiRW5hYmxlIGFzeW5jLiBsb2dnaW5nOyBvcHRpb25hbGx5IHNldCBxdWV1ZSBsZW5ndGguIiksIE5VTEwgfSwKKyAgeyBMT1BUX1JFQklORCwgT1BUX05PX1JFQklORCwgTlVMTCwgZ2V0dGV4dF9ub29wKCJTdG9wIEROUyByZWJpbmRpbmcuIEZpbHRlciBwcml2YXRlIElQIHJhbmdlcyB3aGVuIHJlc29sdmluZy4iKSwgTlVMTCB9LAorICB7IExPUFRfTE9DX1JFQk5ELCBPUFRfTE9DQUxfUkVCSU5ELCBOVUxMLCBnZXR0ZXh0X25vb3AoIkFsbG93IHJlYmluZGluZyBvZiAxMjcuMC4wLjAvOCwgZm9yIFJCTCBzZXJ2ZXJzLiIpLCBOVUxMIH0sCisgIHsgTE9QVF9OT19SRUJJTkQsIEFSR19EVVAsICIvPGRvbWFpbj4vIiwgZ2V0dGV4dF9ub29wKCJJbmhpYml0IEROUy1yZWJpbmQgcHJvdGVjdGlvbiBvbiB0aGlzIGRvbWFpbi4iKSwgTlVMTCB9LAorICB7IExPUFRfTk9MQVNULCBPUFRfQUxMX1NFUlZFUlMsIE5VTEwsIGdldHRleHRfbm9vcCgiQWx3YXlzIHBlcmZvcm0gRE5TIHF1ZXJpZXMgdG8gYWxsIHNlcnZlcnMuIiksIE5VTEwgfSwKKyAgeyBMT1BUX01BVENILCBBUkdfRFVQLCAic2V0Ojx0YWc+LDxvcHRzcGVjPiIsIGdldHRleHRfbm9vcCgiU2V0IHRhZyBpZiBjbGllbnQgaW5jbHVkZXMgbWF0Y2hpbmcgb3B0aW9uIGluIHJlcXVlc3QuIiksIE5VTEwgfSwKKyAgeyBMT1BUX0FMVFBPUlQsIEFSR19PTkUsICJbPTxwb3J0cz5dIiwgZ2V0dGV4dF9ub29wKCJVc2UgYWx0ZXJuYXRpdmUgcG9ydHMgZm9yIERIQ1AuIiksIE5VTEwgfSwKKyAgeyBMT1BUX05BUFRSLCBBUkdfRFVQLCAiPG5hbWU+LDxuYXB0cj4iLCBnZXR0ZXh0X25vb3AoIlNwZWNpZnkgTkFQVFIgRE5TIHJlY29yZC4iKSwgTlVMTCB9LAorICB7IExPUFRfTUlOUE9SVCwgQVJHX09ORSwgIjxwb3J0PiIsIGdldHRleHRfbm9vcCgiU3BlY2lmeSBsb3dlc3QgcG9ydCBhdmFpbGFibGUgZm9yIEROUyBxdWVyeSB0cmFuc21pc3Npb24uIiksIE5VTEwgfSwKKyAgeyBMT1BUX01BWFBPUlQsIEFSR19PTkUsICI8cG9ydD4iLCBnZXR0ZXh0X25vb3AoIlNwZWNpZnkgaGlnaGVzdCBwb3J0IGF2YWlsYWJsZSBmb3IgRE5TIHF1ZXJ5IHRyYW5zbWlzc2lvbi4iKSwgTlVMTCB9LAorICB7IExPUFRfREhDUF9GUUROLCBPUFRfREhDUF9GUUROLCBOVUxMLCBnZXR0ZXh0X25vb3AoIlVzZSBvbmx5IGZ1bGx5IHF1YWxpZmllZCBkb21haW4gbmFtZXMgZm9yIERIQ1AgY2xpZW50cy4iKSwgTlVMTCB9LAorICB7IExPUFRfR0VOX05BTUVTLCBBUkdfRFVQLCAiWz10YWc6PHRhZz5dIiwgZ2V0dGV4dF9ub29wKCJHZW5lcmF0ZSBob3N0bmFtZXMgYmFzZWQgb24gTUFDIGFkZHJlc3MgZm9yIG5hbWVsZXNzIGNsaWVudHMuIiksIE5VTEx9LAorICB7IExPUFRfUFJPWFksIEFSR19EVVAsICJbPTxpcGFkZHI+XS4uLiIsIGdldHRleHRfbm9vcCgiVXNlIHRoZXNlIERIQ1AgcmVsYXlzIGFzIGZ1bGwgcHJveGllcy4iKSwgTlVMTCB9LAorICB7IExPUFRfUkVMQVksIEFSR19EVVAsICI8bG9jYWwtYWRkcj4sPHNlcnZlcj5bLDxpZmFjZT5dIiwgZ2V0dGV4dF9ub29wKCJSZWxheSBESENQIHJlcXVlc3RzIHRvIGEgcmVtb3RlIHNlcnZlciIpLCBOVUxMfSwKKyAgeyBMT1BUX0NOQU1FLCBBUkdfRFVQLCAiPGFsaWFzPiw8dGFyZ2V0PlssPHR0bD5dIiwgZ2V0dGV4dF9ub29wKCJTcGVjaWZ5IGFsaWFzIG5hbWUgZm9yIExPQ0FMIEROUyBuYW1lLiIpLCBOVUxMIH0sCisgIHsgTE9QVF9QWEVfUFJPTVQsIEFSR19EVVAsICI8cHJvbXB0PixbPHRpbWVvdXQ+XSIsIGdldHRleHRfbm9vcCgiUHJvbXB0IHRvIHNlbmQgdG8gUFhFIGNsaWVudHMuIiksIE5VTEwgfSwKKyAgeyBMT1BUX1BYRV9TRVJWLCBBUkdfRFVQLCAiPHNlcnZpY2U+IiwgZ2V0dGV4dF9ub29wKCJCb290IHNlcnZpY2UgZm9yIFBYRSBtZW51LiIpLCBOVUxMIH0sCisgIHsgTE9QVF9URVNULCAwLCBOVUxMLCBnZXR0ZXh0X25vb3AoIkNoZWNrIGNvbmZpZ3VyYXRpb24gc3ludGF4LiIpLCBOVUxMIH0sCisgIHsgTE9QVF9BRERfTUFDLCBBUkdfRFVQLCAiWz1iYXNlNjR8dGV4dF0iLCBnZXR0ZXh0X25vb3AoIkFkZCByZXF1ZXN0b3IncyBNQUMgYWRkcmVzcyB0byBmb3J3YXJkZWQgRE5TIHF1ZXJpZXMuIiksIE5VTEwgfSwKKyAgeyBMT1BUX0FERF9TQk5FVCwgQVJHX09ORSwgIjx2NCBwcmVmPlssPHY2IHByZWY+XSIsIGdldHRleHRfbm9vcCgiQWRkIHNwZWNpZmllZCBJUCBzdWJuZXQgdG8gZm9yd2FyZGVkIEROUyBxdWVyaWVzLiIpLCBOVUxMIH0sCisgIHsgTE9QVF9DUEVfSUQsIEFSR19PTkUsICI8dGV4dD4iLCBnZXR0ZXh0X25vb3AoIkFkZCBjbGllbnQgaWRlbnRpZmljYXRpb24gdG8gZm9yd2FyZGVkIEROUyBxdWVyaWVzLiIpLCBOVUxMIH0sCisgIHsgTE9QVF9ETlNTRUMsIE9QVF9ETlNTRUNfUFJPWFksIE5VTEwsIGdldHRleHRfbm9vcCgiUHJveHkgRE5TU0VDIHZhbGlkYXRpb24gcmVzdWx0cyBmcm9tIHVwc3RyZWFtIG5hbWVzZXJ2ZXJzLiIpLCBOVUxMIH0sCisgIHsgTE9QVF9JTkNSX0FERFIsIE9QVF9DT05TRUNfQUREUiwgTlVMTCwgZ2V0dGV4dF9ub29wKCJBdHRlbXB0IHRvIGFsbG9jYXRlIHNlcXVlbnRpYWwgSVAgYWRkcmVzc2VzIHRvIERIQ1AgY2xpZW50cy4iKSwgTlVMTCB9LAorICB7IExPUFRfQ09OTlRSQUNLLCBPUFRfQ09OTlRSQUNLLCBOVUxMLCBnZXR0ZXh0X25vb3AoIkNvcHkgY29ubmVjdGlvbi10cmFjayBtYXJrIGZyb20gcXVlcmllcyB0byB1cHN0cmVhbSBjb25uZWN0aW9ucy4iKSwgTlVMTCB9LAorICB7IExPUFRfRlFETiwgT1BUX0ZRRE5fVVBEQVRFLCBOVUxMLCBnZXR0ZXh0X25vb3AoIkFsbG93IERIQ1AgY2xpZW50cyB0byBkbyB0aGVpciBvd24gREROUyB1cGRhdGVzLiIpLCBOVUxMIH0sCisgIHsgTE9QVF9SQSwgT1BUX1JBLCBOVUxMLCBnZXR0ZXh0X25vb3AoIlNlbmQgcm91dGVyLWFkdmVydGlzZW1lbnRzIGZvciBpbnRlcmZhY2VzIGRvaW5nIERIQ1B2NiIpLCBOVUxMIH0sCisgIHsgTE9QVF9EVUlELCBBUkdfT05FLCAiPGVudGVycHJpc2U+LDxkdWlkPiIsIGdldHRleHRfbm9vcCgiU3BlY2lmeSBEVUlEX0VOLXR5cGUgREhDUHY2IHNlcnZlciBEVUlEIiksIE5VTEwgfSwKKyAgeyBMT1BUX0hPU1RfUkVDLCBBUkdfRFVQLCAiPG5hbWU+LDxhZGRyZXNzPlssPHR0bD5dIiwgZ2V0dGV4dF9ub29wKCJTcGVjaWZ5IGhvc3QgKEEvQUFBQSBhbmQgUFRSKSByZWNvcmRzIiksIE5VTEwgfSwKKyAgeyBMT1BUX1JSLCBBUkdfRFVQLCAiPG5hbWU+LDxSUi1udW1iZXI+LFs8ZGF0YT5dIiwgZ2V0dGV4dF9ub29wKCJTcGVjaWZ5IGFyYml0cmFyeSBETlMgcmVzb3VyY2UgcmVjb3JkIiksIE5VTEwgfSwKKyAgeyBMT1BUX0NMVkVSQklORCwgT1BUX0NMRVZFUkJJTkQsIE5VTEwsIGdldHRleHRfbm9vcCgiQmluZCB0byBpbnRlcmZhY2VzIGluIHVzZSAtIGNoZWNrIGZvciBuZXcgaW50ZXJmYWNlcyIpLCBOVUxMIH0sCisgIHsgTE9QVF9BVVRIU0VSViwgQVJHX09ORSwgIjxOUz4sPGludGVyZmFjZT4iLCBnZXR0ZXh0X25vb3AoIkV4cG9ydCBsb2NhbCBuYW1lcyB0byBnbG9iYWwgRE5TIiksIE5VTEwgfSwKKyAgeyBMT1BUX0FVVEhaT05FLCBBUkdfRFVQLCAiPGRvbWFpbj4sWzxzdWJuZXQ+Li4uXSIsIGdldHRleHRfbm9vcCgiRG9tYWluIHRvIGV4cG9ydCB0byBnbG9iYWwgRE5TIiksIE5VTEwgfSwKKyAgeyBMT1BUX0FVVEhUVEwsIEFSR19PTkUsICI8aW50ZWdlcj4iLCBnZXR0ZXh0X25vb3AoIlNldCBUVEwgZm9yIGF1dGhvcml0YXRpdmUgcmVwbGllcyIpLCBOVUxMIH0sCisgIHsgTE9QVF9BVVRIU09BLCBBUkdfT05FLCAiPHNlcmlhbD5bLC4uLl0iLCBnZXR0ZXh0X25vb3AoIlNldCBhdXRob3JpdGF0aXZlIHpvbmUgaW5mb3JtYXRpb24iKSwgTlVMTCB9LAorICB7IExPUFRfQVVUSFNGUywgQVJHX0RVUCwgIjxOUz5bLDxOUz4uLi5dIiwgZ2V0dGV4dF9ub29wKCJTZWNvbmRhcnkgYXV0aG9yaXRhdGl2ZSBuYW1lc2VydmVycyBmb3IgZm9yd2FyZCBkb21haW5zIiksIE5VTEwgfSwKKyAgeyBMT1BUX0FVVEhQRUVSLCBBUkdfRFVQLCAiPGlwYWRkcj5bLDxpcGFkZHI+Li4uXSIsIGdldHRleHRfbm9vcCgiUGVlcnMgd2hpY2ggYXJlIGFsbG93ZWQgdG8gZG8gem9uZSB0cmFuc2ZlciIpLCBOVUxMIH0sCisgIHsgTE9QVF9JUFNFVCwgQVJHX0RVUCwgIi88ZG9tYWluPlsvPGRvbWFpbj4uLi5dLzxpcHNldD4uLi4iLCBnZXR0ZXh0X25vb3AoIlNwZWNpZnkgaXBzZXRzIHRvIHdoaWNoIG1hdGNoaW5nIGRvbWFpbnMgc2hvdWxkIGJlIGFkZGVkIiksIE5VTEwgfSwKKyAgeyBMT1BUX1NZTlRILCBBUkdfRFVQLCAiPGRvbWFpbj4sPHJhbmdlPixbPHByZWZpeD5dIiwgZ2V0dGV4dF9ub29wKCJTcGVjaWZ5IGEgZG9tYWluIGFuZCBhZGRyZXNzIHJhbmdlIGZvciBzeW50aGVzaXNlZCBuYW1lcyIpLCBOVUxMIH0sCisgIHsgTE9QVF9TRUNfVkFMSUQsIE9QVF9ETlNTRUNfVkFMSUQsIE5VTEwsIGdldHRleHRfbm9vcCgiQWN0aXZhdGUgRE5TU0VDIHZhbGlkYXRpb24iKSwgTlVMTCB9LAorICB7IExPUFRfVFJVU1RfQU5DSE9SLCBBUkdfRFVQLCAiPGRvbWFpbj4sWzxjbGFzcz5dLC4uLiIsIGdldHRleHRfbm9vcCgiU3BlY2lmeSB0cnVzdCBhbmNob3Iga2V5IGRpZ2VzdC4iKSwgTlVMTCB9LAorICB7IExPUFRfRE5TU0VDX0RFQlVHLCBPUFRfRE5TU0VDX0RFQlVHLCBOVUxMLCBnZXR0ZXh0X25vb3AoIkRpc2FibGUgdXBzdHJlYW0gY2hlY2tpbmcgZm9yIEROU1NFQyBkZWJ1Z2dpbmcuIiksIE5VTEwgfSwKKyAgeyBMT1BUX0ROU1NFQ19DSEVDSywgT1BUX0ROU1NFQ19OT19TSUdOLCBOVUxMLCBnZXR0ZXh0X25vb3AoIkVuc3VyZSBhbnN3ZXJzIHdpdGhvdXQgRE5TU0VDIGFyZSBpbiB1bnNpZ25lZCB6b25lcy4iKSwgTlVMTCB9LAorICB7IExPUFRfRE5TU0VDX1RJTUUsIE9QVF9ETlNTRUNfVElNRSwgTlVMTCwgZ2V0dGV4dF9ub29wKCJEb24ndCBjaGVjayBETlNTRUMgc2lnbmF0dXJlIHRpbWVzdGFtcHMgdW50aWwgZmlyc3QgY2FjaGUtcmVsb2FkIiksIE5VTEwgfSwKKyAgeyBMT1BUX0ROU1NFQ19TVEFNUCwgQVJHX09ORSwgIjxwYXRoPiIsIGdldHRleHRfbm9vcCgiVGltZXN0YW1wIGZpbGUgdG8gdmVyaWZ5IHN5c3RlbSBjbG9jayBmb3IgRE5TU0VDIiksIE5VTEwgfSwKKyNpZmRlZiBPUFRJT042X1BSRUZJWF9DTEFTUyAKKyAgeyBMT1BUX1BSRUZfQ0xTUywgQVJHX0RVUCwgInNldDp0YWcsPGNsYXNzPiIsIGdldHRleHRfbm9vcCgiU3BlY2lmeSBESENQdjYgcHJlZml4IGNsYXNzIiksIE5VTEwgfSwKKyNlbmRpZgorICB7IExPUFRfUkFfUEFSQU0sIEFSR19EVVAsICI8aWZhY2U+LFttdHU6PHZhbHVlPnw8aW50ZXJmYWNlPnxvZmYsXVs8cHJpbz4sXTxpbnR2YWw+Wyw8bGlmZXRpbWU+XSIsIGdldHRleHRfbm9vcCgiU2V0IE1UVSwgcHJpb3JpdHksIHJlc2VuZC1pbnRlcnZhbCBhbmQgcm91dGVyLWxpZmV0aW1lIiksIE5VTEwgfSwKKyAgeyBMT1BUX1FVSUVUX0RIQ1AsIE9QVF9RVUlFVF9ESENQLCBOVUxMLCBnZXR0ZXh0X25vb3AoIkRvIG5vdCBsb2cgcm91dGluZSBESENQLiIpLCBOVUxMIH0sCisgIHsgTE9QVF9RVUlFVF9ESENQNiwgT1BUX1FVSUVUX0RIQ1A2LCBOVUxMLCBnZXR0ZXh0X25vb3AoIkRvIG5vdCBsb2cgcm91dGluZSBESENQdjYuIiksIE5VTEwgfSwKKyAgeyBMT1BUX1FVSUVUX1JBLCBPUFRfUVVJRVRfUkEsIE5VTEwsIGdldHRleHRfbm9vcCgiRG8gbm90IGxvZyBSQS4iKSwgTlVMTCB9LAorICB7IExPUFRfTE9DQUxfU0VSVklDRSwgT1BUX0xPQ0FMX1NFUlZJQ0UsIE5VTEwsIGdldHRleHRfbm9vcCgiQWNjZXB0IHF1ZXJpZXMgb25seSBmcm9tIGRpcmVjdGx5LWNvbm5lY3RlZCBuZXR3b3Jrcy4iKSwgTlVMTCB9LAorICB7IExPUFRfTE9PUF9ERVRFQ1QsIE9QVF9MT09QX0RFVEVDVCwgTlVMTCwgZ2V0dGV4dF9ub29wKCJEZXRlY3QgYW5kIHJlbW92ZSBETlMgZm9yd2FyZGluZyBsb29wcy4iKSwgTlVMTCB9LAorICB7IExPUFRfSUdOT1JFX0FERFIsIEFSR19EVVAsICI8aXBhZGRyPiIsIGdldHRleHRfbm9vcCgiSWdub3JlIEROUyByZXNwb25zZXMgY29udGFpbmluZyBpcGFkZHIuIiksIE5VTEwgfSwgCisgIHsgTE9QVF9ESENQVFRMLCBBUkdfT05FLCAiPHR0bD4iLCBnZXR0ZXh0X25vb3AoIlNldCBUVEwgaW4gRE5TIHJlc3BvbnNlcyB3aXRoIERIQ1AtZGVyaXZlZCBhZGRyZXNzZXMuIiksIE5VTEwgfSwgCisgIHsgTE9QVF9SRVBMWV9ERUxBWSwgQVJHX09ORSwgIjxpbnRlZ2VyPiIsIGdldHRleHRfbm9vcCgiRGVsYXkgREhDUCByZXBsaWVzIGZvciBhdCBsZWFzdCBudW1iZXIgb2Ygc2Vjb25kcy4iKSwgTlVMTCB9LAorICB7IDAsIDAsIE5VTEwsIE5VTEwsIE5VTEwgfQorfTsgCisKKy8qIFdlIGhpZGUgbWV0YWNoYXJhY3RlcnMgaW4gcXVvdGVkIHN0cmluZ3MgYnkgbWFwcGluZyB0aGVtIGludG8gdGhlIEFTQ0lJIGNvbnRyb2wKKyAgIGNoYXJhY3RlciBzcGFjZS4gTm90ZSB0aGF0IHRoZSBcMCwgXHQgXGIgXHIgXDAzMyBhbmQgXG4gY2hhcmFjdGVycyBhcmUgY2FyZWZ1bGx5IHBsYWNlZCBpbiB0aGUKKyAgIGZvbGxvd2luZyBzZXF1ZW5jZSBzbyB0aGF0IHRoZXkgbWFwIHRvIHRoZW1zZWx2ZXM6IGl0IGlzIHRoZXJlZm9yZSBwb3NzaWJsZSB0byBjYWxsCisgICB1bmhpZGVfbWV0YXMgcmVwZWF0ZWRseSBvbiBzdHJpbmcgd2l0aG91dCBicmVha2luZyB0aGluZ3MuCisgICBUaGUgdHJhbnNmb3JtYXRpb24gZ2V0cyB1bmRvbmUgYnkgb3B0X2Nhbm9uaWNhbGlzZSwgYXRvaV9jaGVjayBhbmQgb3B0X3N0cmluZ19hbGxvYywgYW5kIGEgCisgICBjb3VwbGUgb2Ygb3RoZXIgcGxhY2VzLiAKKyAgIE5vdGUgdGhhdCBzcGFjZSBpcyBpbmNsdWRlZCBoZXJlIHNvIHRoYXQKKyAgIC0tZGhjcC1vcHRpb249Mywgc3RyaW5nCisgICBoYXMgZml2ZSBjaGFyYWN0ZXJzLCB3aGlsc3QKKyAgIC0tZGhjcC1vcHRpb249MywiIHN0cmluZyIKKyAgIGhhcyBzaXguCisqLworCitzdGF0aWMgY29uc3QgY2hhciBtZXRhW10gPSAiXDAwMDEyMzQ1NiBcYlx0XG43OFxyOTBhYmNkZWZBQkNERVwwMzNGOiwuIjsKKworc3RhdGljIGNoYXIgaGlkZV9tZXRhKGNoYXIgYykKK3sKKyAgdW5zaWduZWQgaW50IGk7CisKKyAgZm9yIChpID0gMDsgaSA8IChzaXplb2YobWV0YSkgLSAxKTsgaSsrKQorICAgIGlmIChjID09IG1ldGFbaV0pCisgICAgICByZXR1cm4gKGNoYXIpaTsKKyAgCisgIHJldHVybiBjOworfQorCitzdGF0aWMgY2hhciB1bmhpZGVfbWV0YShjaGFyIGNyKQoreyAKKyAgdW5zaWduZWQgaW50IGMgPSBjcjsKKyAgCisgIGlmIChjIDwgKHNpemVvZihtZXRhKSAtIDEpKQorICAgIGNyID0gbWV0YVtjXTsKKyAgCisgIHJldHVybiBjcjsKK30KKworc3RhdGljIHZvaWQgdW5oaWRlX21ldGFzKGNoYXIgKmNwKQoreworICBpZiAoY3ApCisgICAgZm9yKDsgKmNwOyBjcCsrKQorICAgICAgKmNwID0gdW5oaWRlX21ldGEoKmNwKTsKK30KKworc3RhdGljIHZvaWQgKm9wdF9tYWxsb2Moc2l6ZV90IHNpemUpCit7CisgIHZvaWQgKnJldDsKKworICBpZiAobWVtX3JlY292ZXIpCisgICAgeworICAgICAgcmV0ID0gd2hpbmVfbWFsbG9jKHNpemUpOworICAgICAgaWYgKCFyZXQpCisJbG9uZ2ptcChtZW1fam1wLCAxKTsKKyAgICB9CisgIGVsc2UKKyAgICByZXQgPSBzYWZlX21hbGxvYyhzaXplKTsKKyAgCisgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjaGFyICpvcHRfc3RyaW5nX2FsbG9jKGNoYXIgKmNwKQoreworICBjaGFyICpyZXQgPSBOVUxMOworICAKKyAgaWYgKGNwICYmIHN0cmxlbihjcCkgIT0gMCkKKyAgICB7CisgICAgICByZXQgPSBvcHRfbWFsbG9jKHN0cmxlbihjcCkrMSk7CisgICAgICBzdHJjcHkocmV0LCBjcCk7IAorICAgICAgCisgICAgICAvKiByZXN0b3JlIGhpZGRlbiBtZXRhY2hhcnMgKi8KKyAgICAgIHVuaGlkZV9tZXRhcyhyZXQpOworICAgIH0KKyAgICAKKyAgcmV0dXJuIHJldDsKK30KKworCisvKiBmaW5kIG5leHQgY29tbWEsIHNwbGl0IHN0cmluZyB3aXRoIHplcm8gYW5kIGVsaW1pbmF0ZSBzcGFjZXMuCisgICByZXR1cm4gc3RhcnQgb2Ygc3RyaW5nIGZvbGxvd2luZyBjb21tYSAqLworCitzdGF0aWMgY2hhciAqc3BsaXRfY2hyKGNoYXIgKnMsIGNoYXIgYykKK3sKKyAgY2hhciAqY29tbWEsICpwOworCisgIGlmICghcyB8fCAhKGNvbW1hID0gc3RyY2hyKHMsIGMpKSkKKyAgICByZXR1cm4gTlVMTDsKKyAgCisgIHAgPSBjb21tYTsKKyAgKmNvbW1hID0gJyAnOworICAKKyAgZm9yICg7ICpjb21tYSA9PSAnICc7IGNvbW1hKyspOworIAorICBmb3IgKDsgKHAgPj0gcykgJiYgKnAgPT0gJyAnOyBwLS0pCisgICAgKnAgPSAwOworICAgIAorICByZXR1cm4gY29tbWE7Cit9CisKK3N0YXRpYyBjaGFyICpzcGxpdChjaGFyICpzKQoreworICByZXR1cm4gc3BsaXRfY2hyKHMsICcsJyk7Cit9CisKK3N0YXRpYyBjaGFyICpjYW5vbmljYWxpc2Vfb3B0KGNoYXIgKnMpCit7CisgIGNoYXIgKnJldDsKKyAgaW50IG5vbWVtOworCisgIGlmICghcykKKyAgICByZXR1cm4gMDsKKworICB1bmhpZGVfbWV0YXMocyk7CisgIGlmICghKHJldCA9IGNhbm9uaWNhbGlzZShzLCAmbm9tZW0pKSAmJiBub21lbSkKKyAgICB7CisgICAgICBpZiAobWVtX3JlY292ZXIpCisJbG9uZ2ptcChtZW1fam1wLCAxKTsKKyAgICAgIGVsc2UKKwlkaWUoXygiY291bGQgbm90IGdldCBtZW1vcnkiKSwgTlVMTCwgRUNfTk9NRU0pOworICAgIH0KKworICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF0b2lfY2hlY2soY2hhciAqYSwgaW50ICpyZXMpCit7CisgIGNoYXIgKnA7CisKKyAgaWYgKCFhKQorICAgIHJldHVybiAwOworCisgIHVuaGlkZV9tZXRhcyhhKTsKKyAgCisgIGZvciAocCA9IGE7ICpwOyBwKyspCisgICAgIGlmICgqcCA8ICcwJyB8fCAqcCA+ICc5JykKKyAgICAgICByZXR1cm4gMDsKKworICAqcmVzID0gYXRvaShhKTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgYXRvaV9jaGVjazE2KGNoYXIgKmEsIGludCAqcmVzKQoreworICBpZiAoIShhdG9pX2NoZWNrKGEsIHJlcykpIHx8CisgICAgICAqcmVzIDwgMCB8fAorICAgICAgKnJlcyA+IDB4ZmZmZikKKyAgICByZXR1cm4gMDsKKworICByZXR1cm4gMTsKK30KKworI2lmZGVmIEhBVkVfRE5TU0VDCitzdGF0aWMgaW50IGF0b2lfY2hlY2s4KGNoYXIgKmEsIGludCAqcmVzKQoreworICBpZiAoIShhdG9pX2NoZWNrKGEsIHJlcykpIHx8CisgICAgICAqcmVzIDwgMCB8fAorICAgICAgKnJlcyA+IDB4ZmYpCisgICAgcmV0dXJuIDA7CisKKyAgcmV0dXJuIDE7Cit9CisjZW5kaWYKKworI2lmbmRlZiBOT19JRAorc3RhdGljIHZvaWQgYWRkX3R4dChjaGFyICpuYW1lLCBjaGFyICp0eHQsIGludCBzdGF0KQoreworICBzdHJ1Y3QgdHh0X3JlY29yZCAqciA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCB0eHRfcmVjb3JkKSk7CisKKyAgaWYgKHR4dCkKKyAgICB7CisgICAgICBzaXplX3QgbGVuID0gc3RybGVuKHR4dCk7CisgICAgICByLT50eHQgPSBvcHRfbWFsbG9jKGxlbisxKTsKKyAgICAgIHItPmxlbiA9IGxlbisxOworICAgICAgKihyLT50eHQpID0gbGVuOworICAgICAgbWVtY3B5KChyLT50eHQpKzEsIHR4dCwgbGVuKTsKKyAgICB9CisKKyAgci0+c3RhdCA9IHN0YXQ7CisgIHItPm5hbWUgPSBvcHRfc3RyaW5nX2FsbG9jKG5hbWUpOworICByLT5uZXh0ID0gZGFlbW9uLT50eHQ7CisgIGRhZW1vbi0+dHh0ID0gcjsKKyAgci0+Y2xhc3MgPSBDX0NIQU9TOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGRvX3VzYWdlKHZvaWQpCit7CisgIGNoYXIgYnVmZlsxMDBdOworICBpbnQgaSwgajsKKworICBzdHJ1Y3QgeworICAgIGNoYXIgaGFuZGxlOworICAgIGludCB2YWw7CisgIH0gdGFiW10gPSB7CisgICAgeyAnJCcsIENBQ0hFU0laIH0sCisgICAgeyAnKicsIEVETlNfUEtUU1ogfSwKKyAgICB7ICcmJywgTUFYTEVBU0VTIH0sCisgICAgeyAnIScsIEZUQUJTSVogfSwKKyAgICB7ICcjJywgVEZUUF9NQVhfQ09OTkVDVElPTlMgfSwKKyAgICB7ICdcMCcsIDAgfQorICB9OworCisgIHByaW50ZihfKCJVc2FnZTogZG5zbWFzcSBbb3B0aW9uc11cblxuIikpOworI2lmbmRlZiBIQVZFX0dFVE9QVF9MT05HCisgIHByaW50ZihfKCJVc2Ugc2hvcnQgb3B0aW9ucyBvbmx5IG9uIHRoZSBjb21tYW5kIGxpbmUuXG4iKSk7CisjZW5kaWYKKyAgcHJpbnRmKF8oIlZhbGlkIG9wdGlvbnMgYXJlOlxuIikpOworICAKKyAgZm9yIChpID0gMDsgdXNhZ2VbaV0ub3B0ICE9IDA7IGkrKykKKyAgICB7CisgICAgICBjaGFyICpkZXNjID0gdXNhZ2VbaV0uZmxhZ2Rlc2M7IAorICAgICAgY2hhciAqZXEgPSAiPSI7CisgICAgICAKKyAgICAgIGlmICghZGVzYyB8fCAqZGVzYyA9PSAnWycpCisJZXEgPSAiIjsKKyAgICAgIAorICAgICAgaWYgKCFkZXNjKQorCWRlc2MgPSAiIjsKKworICAgICAgZm9yICggaiA9IDA7IG9wdHNbal0ubmFtZTsgaisrKQorCWlmIChvcHRzW2pdLnZhbCA9PSB1c2FnZVtpXS5vcHQpCisJICBicmVhazsKKyAgICAgIGlmICh1c2FnZVtpXS5vcHQgPCAyNTYpCisJc3ByaW50ZihidWZmLCAiLSVjLCAiLCB1c2FnZVtpXS5vcHQpOworICAgICAgZWxzZQorCXNwcmludGYoYnVmZiwgIiAgICAiKTsKKyAgICAgIAorICAgICAgc3ByaW50ZihidWZmKzQsICItLSVzJXMlcyIsIG9wdHNbal0ubmFtZSwgZXEsIGRlc2MpOworICAgICAgcHJpbnRmKCIlLTU1LjU1cyIsIGJ1ZmYpOworCSAgICAgCisgICAgICBpZiAodXNhZ2VbaV0uYXJnKQorCXsKKwkgIHN0cmNweShidWZmLCB1c2FnZVtpXS5hcmcpOworCSAgZm9yIChqID0gMDsgdGFiW2pdLmhhbmRsZTsgaisrKQorCSAgICBpZiAodGFiW2pdLmhhbmRsZSA9PSAqKHVzYWdlW2ldLmFyZykpCisJICAgICAgc3ByaW50ZihidWZmLCAiJWQiLCB0YWJbal0udmFsKTsKKwl9CisgICAgICBwcmludGYoXyh1c2FnZVtpXS5kZXNjKSwgYnVmZik7CisgICAgICBwcmludGYoIlxuIik7CisgICAgfQorfQorCisjZGVmaW5lIHJldF9lcnIoeCkgZG8geyBzdHJjcHkoZXJyc3RyLCAoeCkpOyByZXR1cm4gMDsgfSB3aGlsZSAoMCkKKworc3RhdGljIGNoYXIgKnBhcnNlX215c29ja2FkZHIoY2hhciAqYXJnLCB1bmlvbiBteXNvY2thZGRyICphZGRyKSAKK3sKKyAgaWYgKGluZXRfcHRvbihBRl9JTkVULCBhcmcsICZhZGRyLT5pbi5zaW5fYWRkcikgPiAwKQorICAgIGFkZHItPnNhLnNhX2ZhbWlseSA9IEFGX0lORVQ7CisjaWZkZWYgSEFWRV9JUFY2CisgIGVsc2UgaWYgKGluZXRfcHRvbihBRl9JTkVUNiwgYXJnLCAmYWRkci0+aW42LnNpbjZfYWRkcikgPiAwKQorICAgIGFkZHItPnNhLnNhX2ZhbWlseSA9IEFGX0lORVQ2OworI2VuZGlmCisgIGVsc2UKKyAgICByZXR1cm4gXygiYmFkIGFkZHJlc3MiKTsKKyAgIAorICByZXR1cm4gTlVMTDsKK30KKworY2hhciAqcGFyc2Vfc2VydmVyKGNoYXIgKmFyZywgdW5pb24gbXlzb2NrYWRkciAqYWRkciwgdW5pb24gbXlzb2NrYWRkciAqc291cmNlX2FkZHIsIGNoYXIgKmludGVyZmFjZSwgaW50ICpmbGFncykKK3sKKyAgaW50IHNvdXJjZV9wb3J0ID0gMCwgc2Vydl9wb3J0ID0gTkFNRVNFUlZFUl9QT1JUOworICBjaGFyICpwb3J0bm8sICpzb3VyY2U7CisgIGNoYXIgKmludGVyZmFjZV9vcHQgPSBOVUxMOworI2lmZGVmIEhBVkVfSVBWNgorICBpbnQgc2NvcGVfaW5kZXggPSAwOworICBjaGFyICpzY29wZV9pZDsKKyNlbmRpZgorICAKKyAgaWYgKCFhcmcgfHwgc3RybGVuKGFyZykgPT0gMCkKKyAgICB7CisgICAgICAqZmxhZ3MgfD0gU0VSVl9OT19BRERSOworICAgICAgKmludGVyZmFjZSA9IDA7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgaWYgKChzb3VyY2UgPSBzcGxpdF9jaHIoYXJnLCAnQCcpKSAmJiAvKiBpcyB0aGVyZSBhIHNvdXJjZS4gKi8KKyAgICAgIChwb3J0bm8gPSBzcGxpdF9jaHIoc291cmNlLCAnIycpKSAmJgorICAgICAgIWF0b2lfY2hlY2sxNihwb3J0bm8sICZzb3VyY2VfcG9ydCkpCisgICAgcmV0dXJuIF8oImJhZCBwb3J0Iik7CisgIAorICBpZiAoKHBvcnRubyA9IHNwbGl0X2NocihhcmcsICcjJykpICYmIC8qIGlzIHRoZXJlIGEgcG9ydCBuby4gKi8KKyAgICAgICFhdG9pX2NoZWNrMTYocG9ydG5vLCAmc2Vydl9wb3J0KSkKKyAgICByZXR1cm4gXygiYmFkIHBvcnQiKTsKKyAgCisjaWZkZWYgSEFWRV9JUFY2CisgIHNjb3BlX2lkID0gc3BsaXRfY2hyKGFyZywgJyUnKTsKKyNlbmRpZgorICAKKyAgaWYgKHNvdXJjZSkgeworICAgIGludGVyZmFjZV9vcHQgPSBzcGxpdF9jaHIoc291cmNlLCAnQCcpOworCisgICAgaWYgKGludGVyZmFjZV9vcHQpCisgICAgICB7CisjaWYgZGVmaW5lZChTT19CSU5EVE9ERVZJQ0UpCisJc3RybmNweShpbnRlcmZhY2UsIGludGVyZmFjZV9vcHQsIElGX05BTUVTSVpFIC0gMSk7CisjZWxzZQorCXJldHVybiBfKCJpbnRlcmZhY2UgYmluZGluZyBub3Qgc3VwcG9ydGVkIik7CisjZW5kaWYKKyAgICAgIH0KKyAgfQorCisgIGlmIChpbmV0X3B0b24oQUZfSU5FVCwgYXJnLCAmYWRkci0+aW4uc2luX2FkZHIpID4gMCkKKyAgICB7CisgICAgICBhZGRyLT5pbi5zaW5fcG9ydCA9IGh0b25zKHNlcnZfcG9ydCk7CQorICAgICAgYWRkci0+c2Euc2FfZmFtaWx5ID0gc291cmNlX2FkZHItPnNhLnNhX2ZhbWlseSA9IEFGX0lORVQ7CisjaWZkZWYgSEFWRV9TT0NLQUREUl9TQV9MRU4KKyAgICAgIHNvdXJjZV9hZGRyLT5pbi5zaW5fbGVuID0gYWRkci0+aW4uc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlmCisgICAgICBzb3VyY2VfYWRkci0+aW4uc2luX2FkZHIuc19hZGRyID0gSU5BRERSX0FOWTsKKyAgICAgIHNvdXJjZV9hZGRyLT5pbi5zaW5fcG9ydCA9IGh0b25zKGRhZW1vbi0+cXVlcnlfcG9ydCk7CisgICAgICAKKyAgICAgIGlmIChzb3VyY2UpCisJeworCSAgaWYgKGZsYWdzKQorCSAgICAqZmxhZ3MgfD0gU0VSVl9IQVNfU09VUkNFOworCSAgc291cmNlX2FkZHItPmluLnNpbl9wb3J0ID0gaHRvbnMoc291cmNlX3BvcnQpOworCSAgaWYgKCEoaW5ldF9wdG9uKEFGX0lORVQsIHNvdXJjZSwgJnNvdXJjZV9hZGRyLT5pbi5zaW5fYWRkcikgPiAwKSkKKwkgICAgeworI2lmIGRlZmluZWQoU09fQklORFRPREVWSUNFKQorCSAgICAgIGlmIChpbnRlcmZhY2Vfb3B0KQorCQlyZXR1cm4gXygiaW50ZXJmYWNlIGNhbiBvbmx5IGJlIHNwZWNpZmllZCBvbmNlIik7CisJICAgICAgCisJICAgICAgc291cmNlX2FkZHItPmluLnNpbl9hZGRyLnNfYWRkciA9IElOQUREUl9BTlk7CisJICAgICAgc3RybmNweShpbnRlcmZhY2UsIHNvdXJjZSwgSUZfTkFNRVNJWkUgLSAxKTsKKyNlbHNlCisJICAgICAgcmV0dXJuIF8oImludGVyZmFjZSBiaW5kaW5nIG5vdCBzdXBwb3J0ZWQiKTsKKyNlbmRpZgorCSAgICB9CisJfQorICAgIH0KKyNpZmRlZiBIQVZFX0lQVjYKKyAgZWxzZSBpZiAoaW5ldF9wdG9uKEFGX0lORVQ2LCBhcmcsICZhZGRyLT5pbjYuc2luNl9hZGRyKSA+IDApCisgICAgeworICAgICAgaWYgKHNjb3BlX2lkICYmIChzY29wZV9pbmRleCA9IGlmX25hbWV0b2luZGV4KHNjb3BlX2lkKSkgPT0gMCkKKwlyZXR1cm4gXygiYmFkIGludGVyZmFjZSBuYW1lIik7CisgICAgICAKKyAgICAgIGFkZHItPmluNi5zaW42X3BvcnQgPSBodG9ucyhzZXJ2X3BvcnQpOworICAgICAgYWRkci0+aW42LnNpbjZfc2NvcGVfaWQgPSBzY29wZV9pbmRleDsKKyAgICAgIHNvdXJjZV9hZGRyLT5pbjYuc2luNl9hZGRyID0gaW42YWRkcl9hbnk7IAorICAgICAgc291cmNlX2FkZHItPmluNi5zaW42X3BvcnQgPSBodG9ucyhkYWVtb24tPnF1ZXJ5X3BvcnQpOworICAgICAgc291cmNlX2FkZHItPmluNi5zaW42X3Njb3BlX2lkID0gMDsKKyAgICAgIGFkZHItPnNhLnNhX2ZhbWlseSA9IHNvdXJjZV9hZGRyLT5zYS5zYV9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICAgIGFkZHItPmluNi5zaW42X2Zsb3dpbmZvID0gc291cmNlX2FkZHItPmluNi5zaW42X2Zsb3dpbmZvID0gMDsKKyNpZmRlZiBIQVZFX1NPQ0tBRERSX1NBX0xFTgorICAgICAgYWRkci0+aW42LnNpbjZfbGVuID0gc291cmNlX2FkZHItPmluNi5zaW42X2xlbiA9IHNpemVvZihhZGRyLT5pbjYpOworI2VuZGlmCisgICAgICBpZiAoc291cmNlKQorCXsKKwkgIGlmIChmbGFncykKKwkgICAgKmZsYWdzIHw9IFNFUlZfSEFTX1NPVVJDRTsKKwkgIHNvdXJjZV9hZGRyLT5pbjYuc2luNl9wb3J0ID0gaHRvbnMoc291cmNlX3BvcnQpOworCSAgaWYgKGluZXRfcHRvbihBRl9JTkVUNiwgc291cmNlLCAmc291cmNlX2FkZHItPmluNi5zaW42X2FkZHIpID09IDApCisJICAgIHsKKyNpZiBkZWZpbmVkKFNPX0JJTkRUT0RFVklDRSkKKwkgICAgICBpZiAoaW50ZXJmYWNlX29wdCkKKwkJcmV0dXJuIF8oImludGVyZmFjZSBjYW4gb25seSBiZSBzcGVjaWZpZWQgb25jZSIpOworCSAgICAgIAorCSAgICAgIHNvdXJjZV9hZGRyLT5pbjYuc2luNl9hZGRyID0gaW42YWRkcl9hbnk7CisJICAgICAgc3RybmNweShpbnRlcmZhY2UsIHNvdXJjZSwgSUZfTkFNRVNJWkUgLSAxKTsKKyNlbHNlCisJICAgICAgcmV0dXJuIF8oImludGVyZmFjZSBiaW5kaW5nIG5vdCBzdXBwb3J0ZWQiKTsKKyNlbmRpZgorCSAgICB9CisJfQorICAgIH0KKyNlbmRpZgorICBlbHNlCisgICAgcmV0dXJuIF8oImJhZCBhZGRyZXNzIik7CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2VydmVyICphZGRfcmV2NChzdHJ1Y3QgaW5fYWRkciBhZGRyLCBpbnQgbXNpemUpCit7CisgIHN0cnVjdCBzZXJ2ZXIgKnNlcnYgPSBvcHRfbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2VydmVyKSk7CisgIGluX2FkZHJfdCAgYSA9IG50b2hsKGFkZHIuc19hZGRyKTsKKyAgY2hhciAqcDsKKworICBtZW1zZXQoc2VydiwgMCwgc2l6ZW9mKHN0cnVjdCBzZXJ2ZXIpKTsKKyAgcCA9IHNlcnYtPmRvbWFpbiA9IG9wdF9tYWxsb2MoMjkpOyAvKiBzdHJsZW4oInh4eC55eXkuenp6LnR0dC5pbi1hZGRyLmFycGEiKSsxICovCisKKyAgc3dpdGNoIChtc2l6ZSkKKyAgICB7CisgICAgY2FzZSAzMjoKKyAgICAgIHAgKz0gc3ByaW50ZihwLCAiJXUuIiwgYSAmIDB4ZmYpOworICAgICAgLyogZmFsbCB0aHJvdWdoICovCisgICAgY2FzZSAyNDoKKyAgICAgIHAgKz0gc3ByaW50ZihwLCAiJWQuIiwgKGEgPj4gOCkgJiAweGZmKTsKKyAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLworICAgIGNhc2UgMTY6CisgICAgICBwICs9IHNwcmludGYocCwgIiVkLiIsIChhID4+IDE2KSAmIDB4ZmYpOworICAgICAgLyogZmFsbCB0aHJvdWdoICovCisgICAgY2FzZSA4OgorICAgICAgcCArPSBzcHJpbnRmKHAsICIlZC4iLCAoYSA+PiAyNCkgJiAweGZmKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgcCArPSBzcHJpbnRmKHAsICJpbi1hZGRyLmFycGEiKTsKKyAgCisgIHNlcnYtPmZsYWdzID0gU0VSVl9IQVNfRE9NQUlOOworICBzZXJ2LT5uZXh0ID0gZGFlbW9uLT5zZXJ2ZXJzOworICBkYWVtb24tPnNlcnZlcnMgPSBzZXJ2OworCisgIHJldHVybiBzZXJ2OworCit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2VydmVyICphZGRfcmV2NihzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsIGludCBtc2l6ZSkKK3sKKyAgc3RydWN0IHNlcnZlciAqc2VydiA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBzZXJ2ZXIpKTsKKyAgY2hhciAqcDsKKyAgaW50IGk7CisJCQkJICAKKyAgbWVtc2V0KHNlcnYsIDAsIHNpemVvZihzdHJ1Y3Qgc2VydmVyKSk7CisgIHAgPSBzZXJ2LT5kb21haW4gPSBvcHRfbWFsbG9jKDczKTsgLyogc3RybGVuKCIzMio8bi4+aXA2LmFycGEiKSsxICovCisgIAorICBmb3IgKGkgPSBtc2l6ZS0xOyBpID49IDA7IGkgLT0gNCkKKyAgICB7IAorICAgICAgaW50IGRpZyA9ICgodW5zaWduZWQgY2hhciAqKWFkZHIpW2k+PjNdOworICAgICAgcCArPSBzcHJpbnRmKHAsICIlLjF4LiIsIChpPj4yKSAmIDEgPyBkaWcgJiAxNSA6IGRpZyA+PiA0KTsKKyAgICB9CisgIHAgKz0gc3ByaW50ZihwLCAiaXA2LmFycGEiKTsKKyAgCisgIHNlcnYtPmZsYWdzID0gU0VSVl9IQVNfRE9NQUlOOworICBzZXJ2LT5uZXh0ID0gZGFlbW9uLT5zZXJ2ZXJzOworICBkYWVtb24tPnNlcnZlcnMgPSBzZXJ2OworICAKKyAgcmV0dXJuIHNlcnY7Cit9CisKKyNpZmRlZiBIQVZFX0RIQ1AKKworc3RhdGljIGludCBpc190YWdfcHJlZml4KGNoYXIgKmFyZykKK3sKKyAgaWYgKGFyZyAmJiAoc3Ryc3RyKGFyZywgIm5ldDoiKSA9PSBhcmcgfHwgc3Ryc3RyKGFyZywgInRhZzoiKSA9PSBhcmcpKQorICAgIHJldHVybiAxOworICAKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjaGFyICpzZXRfcHJlZml4KGNoYXIgKmFyZykKK3sKKyAgIGlmIChzdHJzdHIoYXJnLCAic2V0OiIpID09IGFyZykKKyAgICAgcmV0dXJuIGFyZys0OworICAgCisgICByZXR1cm4gYXJnOworfQorCisvKiBUaGlzIGlzIHRvbyBpbnNhbmVseSBsYXJnZSB0byBrZWVwIGluLWxpbmUgaW4gdGhlIHN3aXRjaCAqLworc3RhdGljIGludCBwYXJzZV9kaGNwX29wdChjaGFyICplcnJzdHIsIGNoYXIgKmFyZywgaW50IGZsYWdzKQoreworICBzdHJ1Y3QgZGhjcF9vcHQgKm5ldyA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBkaGNwX29wdCkpOworICBjaGFyIGxlbmNoYXIgPSAwLCAqY3A7CisgIGludCBhZGRycywgZGlncywgaXNfYWRkciwgaXNfYWRkcjYsIGlzX2hleCwgaXNfZGVjLCBpc19zdHJpbmcsIGRvdHM7CisgIGNoYXIgKmNvbW1hID0gTlVMTDsKKyAgc3RydWN0IGRoY3BfbmV0aWQgKm5wID0gTlVMTDsKKyAgdTE2IG9wdF9sZW4gPSAwOworICBpbnQgaXM2ID0gMDsKKyAgaW50IG9wdGlvbl9vayA9IDA7CisKKyAgbmV3LT5sZW4gPSAwOworICBuZXctPmZsYWdzID0gZmxhZ3M7CisgIG5ldy0+bmV0aWQgPSBOVUxMOworICBuZXctPnZhbCA9IE5VTEw7CisgIG5ldy0+b3B0ID0gMDsKKyAgCisgIHdoaWxlIChhcmcpCisgICAgeworICAgICAgY29tbWEgPSBzcGxpdChhcmcpOyAgICAgIAorCisgICAgICBmb3IgKGNwID0gYXJnOyAqY3A7IGNwKyspCisJaWYgKCpjcCA8ICcwJyB8fCAqY3AgPiAnOScpCisJICBicmVhazsKKyAgICAgIAorICAgICAgaWYgKCEqY3ApCisJeworCSAgbmV3LT5vcHQgPSBhdG9pKGFyZyk7CisJICBvcHRfbGVuID0gMDsKKwkgIG9wdGlvbl9vayA9IDE7CisJICBicmVhazsKKwl9CisgICAgICAKKyAgICAgIGlmIChzdHJzdHIoYXJnLCAib3B0aW9uOiIpID09IGFyZykKKwl7CisJICBpZiAoKG5ldy0+b3B0ID0gbG9va3VwX2RoY3Bfb3B0KEFGX0lORVQsIGFyZys3KSkgIT0gLTEpCisJICAgIHsKKwkgICAgICBvcHRfbGVuID0gbG9va3VwX2RoY3BfbGVuKEFGX0lORVQsIG5ldy0+b3B0KTsKKwkgICAgICAvKiBvcHRpb246PG9wdG5hbWU+IG11c3QgZm9sbG93IHRhZyBhbmQgdmVuZG9yIHN0cmluZy4gKi8KKwkgICAgICBpZiAoIShvcHRfbGVuICYgT1RfSU5URVJOQUwpIHx8IGZsYWdzID09IERIT1BUX01BVENIKQorCQlvcHRpb25fb2sgPSAxOworCSAgICB9CisJICBicmVhazsKKwl9CisjaWZkZWYgSEFWRV9ESENQNgorICAgICAgZWxzZSBpZiAoc3Ryc3RyKGFyZywgIm9wdGlvbjY6IikgPT0gYXJnKQorCXsKKwkgIGZvciAoY3AgPSBhcmcrODsgKmNwOyBjcCsrKQorCSAgICBpZiAoKmNwIDwgJzAnIHx8ICpjcCA+ICc5JykKKwkgICAgICBicmVhazsKKwkgCisJICBpZiAoISpjcCkKKwkgICAgeworCSAgICAgIG5ldy0+b3B0ID0gYXRvaShhcmcrOCk7CisJICAgICAgb3B0X2xlbiA9IDA7CisJICAgICAgb3B0aW9uX29rID0gMTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgaWYgKChuZXctPm9wdCA9IGxvb2t1cF9kaGNwX29wdChBRl9JTkVUNiwgYXJnKzgpKSAhPSAtMSkKKwkJeworCQkgIG9wdF9sZW4gPSBsb29rdXBfZGhjcF9sZW4oQUZfSU5FVDYsIG5ldy0+b3B0KTsKKwkJICBpZiAoIShvcHRfbGVuICYgT1RfSU5URVJOQUwpIHx8IGZsYWdzID09IERIT1BUX01BVENIKQorCQkgICAgb3B0aW9uX29rID0gMTsKKwkJfQorCSAgICB9CisJICAvKiBvcHRpb242OjxvcHQ+fDxvcHRuYW1lPiBtdXN0IGZvbGxvdyB0YWcgYW5kIHZlbmRvciBzdHJpbmcuICovCisJICBpczYgPSAxOworCSAgYnJlYWs7CisJfQorI2VuZGlmCisgICAgICBlbHNlIGlmIChzdHJzdHIoYXJnLCAidmVuZG9yOiIpID09IGFyZykKKwl7CisJICBuZXctPnUudmVuZG9yX2NsYXNzID0gKHVuc2lnbmVkIGNoYXIgKilvcHRfc3RyaW5nX2FsbG9jKGFyZys3KTsKKwkgIG5ldy0+ZmxhZ3MgfD0gREhPUFRfVkVORE9SOworCX0KKyAgICAgIGVsc2UgaWYgKHN0cnN0cihhcmcsICJlbmNhcDoiKSA9PSBhcmcpCisJeworCSAgbmV3LT51LmVuY2FwID0gYXRvaShhcmcrNik7CisJICBuZXctPmZsYWdzIHw9IERIT1BUX0VOQ0FQU1VMQVRFOworCX0KKyAgICAgIGVsc2UgaWYgKHN0cnN0cihhcmcsICJ2aS1lbmNhcDoiKSA9PSBhcmcpCisJeworCSAgbmV3LT51LmVuY2FwID0gYXRvaShhcmcrOSk7CisJICBuZXctPmZsYWdzIHw9IERIT1BUX1JGQzM5MjU7CisJICBpZiAoZmxhZ3MgPT0gREhPUFRfTUFUQ0gpCisJICAgIHsKKwkgICAgICBvcHRpb25fb2sgPSAxOworCSAgICAgIGJyZWFrOworCSAgICB9CisJfQorICAgICAgZWxzZQorCXsKKwkgIG5ldy0+bmV0aWQgPSBvcHRfbWFsbG9jKHNpemVvZiAoc3RydWN0IGRoY3BfbmV0aWQpKTsKKwkgIC8qIGFsbG93IG9wdGlvbmFsICJuZXQ6IiBvciAidGFnOiIgZm9yIGNvbnNpc3RlbmN5ICovCisJICBpZiAoaXNfdGFnX3ByZWZpeChhcmcpKQorCSAgICBuZXctPm5ldGlkLT5uZXQgPSBvcHRfc3RyaW5nX2FsbG9jKGFyZys0KTsKKwkgIGVsc2UKKwkgICAgbmV3LT5uZXRpZC0+bmV0ID0gb3B0X3N0cmluZ19hbGxvYyhzZXRfcHJlZml4KGFyZykpOworCSAgbmV3LT5uZXRpZC0+bmV4dCA9IG5wOworCSAgbnAgPSBuZXctPm5ldGlkOworCX0KKyAgICAgIAorICAgICAgYXJnID0gY29tbWE7IAorICAgIH0KKworI2lmZGVmIEhBVkVfREhDUDYKKyAgaWYgKGlzNikKKyAgICB7CisgICAgICBpZiAobmV3LT5mbGFncyAmIChESE9QVF9WRU5ET1IgfCBESE9QVF9FTkNBUFNVTEFURSkpCisJcmV0X2VycihfKCJ1bnN1cHBvcnRlZCBlbmNhcHN1bGF0aW9uIGZvciBJUHY2IG9wdGlvbiIpKTsKKyAgICAgIAorICAgICAgaWYgKG9wdF9sZW4gPT0gMCAmJgorCSAgIShuZXctPmZsYWdzICYgREhPUFRfUkZDMzkyNSkpCisJb3B0X2xlbiA9IGxvb2t1cF9kaGNwX2xlbihBRl9JTkVUNiwgbmV3LT5vcHQpOworICAgIH0KKyAgZWxzZQorI2VuZGlmCisgICAgaWYgKG9wdF9sZW4gPT0gMCAmJgorCSEobmV3LT5mbGFncyAmIChESE9QVF9WRU5ET1IgfCBESE9QVF9FTkNBUFNVTEFURSB8IERIT1BUX1JGQzM5MjUpKSkKKyAgICAgIG9wdF9sZW4gPSBsb29rdXBfZGhjcF9sZW4oQUZfSU5FVCwgbmV3LT5vcHQpOworICAKKyAgLyogb3B0aW9uIG1heSBiZSBtaXNzaW5nIHdpdGggcmZjMzkyNSBtYXRjaCAqLworICBpZiAoIW9wdGlvbl9vaykKKyAgICByZXRfZXJyKF8oImJhZCBkaGNwLW9wdGlvbiIpKTsKKyAgCisgIGlmIChjb21tYSkKKyAgICB7CisgICAgICAvKiBjaGFyYWN0ZXJpc2UgdGhlIHZhbHVlICovCisgICAgICBjaGFyIGM7CisgICAgICBpbnQgZm91bmRfZGlnID0gMDsKKyAgICAgIGlzX2FkZHIgPSBpc19hZGRyNiA9IGlzX2hleCA9IGlzX2RlYyA9IGlzX3N0cmluZyA9IDE7CisgICAgICBhZGRycyA9IGRpZ3MgPSAxOworICAgICAgZG90cyA9IDA7CisgICAgICBmb3IgKGNwID0gY29tbWE7IChjID0gKmNwKTsgY3ArKykKKwlpZiAoYyA9PSAnLCcpCisJICB7CisJICAgIGFkZHJzKys7CisJICAgIGlzX2RlYyA9IGlzX2hleCA9IDA7CisJICB9CisJZWxzZSBpZiAoYyA9PSAnOicpCisJICB7CisJICAgIGRpZ3MrKzsKKwkgICAgaXNfZGVjID0gaXNfYWRkciA9IDA7CisJICB9CisJZWxzZSBpZiAoYyA9PSAnLycpIAorCSAgeworCSAgICBpc19hZGRyNiA9IGlzX2RlYyA9IGlzX2hleCA9IDA7CisJICAgIGlmIChjcCA9PSBjb21tYSkgLyogbGVhZGluZyAvIG1lYW5zIGEgcGF0aG5hbWUgKi8KKwkgICAgICBpc19hZGRyID0gMDsKKwkgIH0gCisJZWxzZSBpZiAoYyA9PSAnLicpCQorCSAgeworCSAgICBpc19hZGRyNiA9IGlzX2RlYyA9IGlzX2hleCA9IDA7CisJICAgIGRvdHMrKzsKKwkgIH0KKwllbHNlIGlmIChjID09ICctJykKKwkgIGlzX2hleCA9IGlzX2FkZHIgPSBpc19hZGRyNiA9IDA7CisJZWxzZSBpZiAoYyA9PSAnICcpCisJICBpc19kZWMgPSBpc19oZXggPSAwOworCWVsc2UgaWYgKCEoYyA+PScwJyAmJiBjIDw9ICc5JykpCisJICB7CisJICAgIGlzX2FkZHIgPSAwOworCSAgICBpZiAoY3BbMV0gPT0gMCAmJiBpc19kZWMgJiYKKwkJKGMgPT0gJ2InIHx8IGMgPT0gJ3MnIHx8IGMgPT0gJ2knKSkKKwkgICAgICB7CisJCWxlbmNoYXIgPSBjOworCQkqY3AgPSAwOworCSAgICAgIH0KKwkgICAgZWxzZQorCSAgICAgIGlzX2RlYyA9IDA7CisJICAgIGlmICghKChjID49J0EnICYmIGMgPD0gJ0YnKSB8fAorCQkgIChjID49J2EnICYmIGMgPD0gJ2YnKSB8fCAKKwkJICAoYyA9PSAnKicgJiYgKGZsYWdzICYgREhPUFRfTUFUQ0gpKSkpCisJICAgICAgeworCQlpc19oZXggPSAwOworCQlpZiAoYyAhPSAnWycgJiYgYyAhPSAnXScpCisJCSAgaXNfYWRkcjYgPSAwOworCSAgICAgIH0KKwkgIH0KKwllbHNlCisJICBmb3VuZF9kaWcgPSAxOworICAgICAKKyAgICAgIGlmICghZm91bmRfZGlnKQorCWlzX2RlYyA9IGlzX2FkZHIgPSAwOworICAgICAKKyAgICAgIC8qIFdlIGtub3cgdGhhdCBzb21lIG9wdGlvbnMgdGFrZSBhZGRyZXNzZXMgKi8KKyAgICAgIGlmIChvcHRfbGVuICYgT1RfQUREUl9MSVNUKQorCXsKKwkgIGlzX3N0cmluZyA9IGlzX2RlYyA9IGlzX2hleCA9IDA7CisJICAKKwkgIGlmICghaXM2ICYmICghaXNfYWRkciB8fCBkb3RzID09IDApKQorCSAgICByZXRfZXJyKF8oImJhZCBJUCBhZGRyZXNzIikpOworCisJICAgaWYgKGlzNiAmJiAhaXNfYWRkcjYpCisJICAgICByZXRfZXJyKF8oImJhZCBJUHY2IGFkZHJlc3MiKSk7CisJfQorICAgICAgLyogb3IgbmFtZXMgKi8KKyAgICAgIGVsc2UgaWYgKG9wdF9sZW4gJiAoT1RfTkFNRSB8IE9UX1JGQzEwMzVfTkFNRSB8IE9UX0NTVFJJTkcpKQorCWlzX2FkZHI2ID0gaXNfYWRkciA9IGlzX2RlYyA9IGlzX2hleCA9IDA7CisgICAgICAKKyAgICAgIGlmIChmb3VuZF9kaWcgJiYgKG9wdF9sZW4gJiBPVF9USU1FKSAmJiBzdHJsZW4oY29tbWEpID4gMCkKKwl7CisJICBpbnQgdmFsLCBmYWMgPSAxOworCisJICBzd2l0Y2ggKGNvbW1hW3N0cmxlbihjb21tYSkgLSAxXSkKKwkgICAgeworCSAgICBjYXNlICd3JzoKKwkgICAgY2FzZSAnVyc6CisJICAgICAgZmFjICo9IDc7CisJICAgICAgLyogZmFsbCB0aHJvdWdoICovCisJICAgIGNhc2UgJ2QnOgorCSAgICBjYXNlICdEJzoKKwkgICAgICBmYWMgKj0gMjQ7CisJICAgICAgLyogZmFsbCB0aG91Z2ggKi8KKwkgICAgY2FzZSAnaCc6CisJICAgIGNhc2UgJ0gnOgorCSAgICAgIGZhYyAqPSA2MDsKKwkgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKwkgICAgY2FzZSAnbSc6CisJICAgIGNhc2UgJ00nOgorCSAgICAgIGZhYyAqPSA2MDsKKwkgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKwkgICAgY2FzZSAncyc6CisJICAgIGNhc2UgJ1MnOgorCSAgICAgIGNvbW1hW3N0cmxlbihjb21tYSkgLSAxXSA9IDA7CisJICAgIH0KKwkgIAorCSAgbmV3LT5sZW4gPSA0OworCSAgbmV3LT52YWwgPSBvcHRfbWFsbG9jKDQpOworCSAgdmFsID0gYXRvaShjb21tYSk7CisJICAqKChpbnQgKiluZXctPnZhbCkgPSBodG9ubCh2YWwgKiBmYWMpOwkgIAorCX0gIAorICAgICAgZWxzZSBpZiAoaXNfaGV4ICYmIGRpZ3MgPiAxKQorCXsKKwkgIG5ldy0+bGVuID0gZGlnczsKKwkgIG5ldy0+dmFsID0gb3B0X21hbGxvYyhuZXctPmxlbik7CisJICBwYXJzZV9oZXgoY29tbWEsIG5ldy0+dmFsLCBkaWdzLCAoZmxhZ3MgJiBESE9QVF9NQVRDSCkgPyAmbmV3LT51LndpbGRjYXJkX21hc2sgOiBOVUxMLCBOVUxMKTsKKwkgIG5ldy0+ZmxhZ3MgfD0gREhPUFRfSEVYOworCX0KKyAgICAgIGVsc2UgaWYgKGlzX2RlYykKKwl7CisJICBpbnQgaSwgdmFsID0gYXRvaShjb21tYSk7CisJICAvKiBhc3N1bWUgbnVtZXJpYyBhcmcgaXMgMSBieXRlIGV4Y2VwdCBmb3IKKwkgICAgIG9wdGlvbnMgd2hlcmUgaXQgaXMga25vd24gb3RoZXJ3aXNlLgorCSAgICAgRm9yIHZlbmRvciBjbGFzcyBvcHRpb24sIHdlIGhhdmUgdG8gaGFjay4gKi8KKwkgIGlmIChvcHRfbGVuICE9IDApCisJICAgIG5ldy0+bGVuID0gb3B0X2xlbjsKKwkgIGVsc2UgaWYgKHZhbCAmIDB4ZmZmZjAwMDApCisJICAgIG5ldy0+bGVuID0gNDsKKwkgIGVsc2UgaWYgKHZhbCAmIDB4ZmYwMCkKKwkgICAgbmV3LT5sZW4gPSAyOworCSAgZWxzZQorCSAgICBuZXctPmxlbiA9IDE7CisKKwkgIGlmIChsZW5jaGFyID09ICdiJykKKwkgICAgbmV3LT5sZW4gPSAxOworCSAgZWxzZSBpZiAobGVuY2hhciA9PSAncycpCisJICAgIG5ldy0+bGVuID0gMjsKKwkgIGVsc2UgaWYgKGxlbmNoYXIgPT0gJ2knKQorCSAgICBuZXctPmxlbiA9IDQ7CisJICAKKwkgIG5ldy0+dmFsID0gb3B0X21hbGxvYyhuZXctPmxlbik7CisJICBmb3IgKGk9MDsgaTxuZXctPmxlbjsgaSsrKQorCSAgICBuZXctPnZhbFtpXSA9IHZhbD4+KChuZXctPmxlbiAtIGkgLSAxKSo4KTsKKwl9CisgICAgICBlbHNlIGlmIChpc19hZGRyICYmICFpczYpCQorCXsKKwkgIHN0cnVjdCBpbl9hZGRyIGluOworCSAgdW5zaWduZWQgY2hhciAqb3A7CisJICBjaGFyICpzbGFzaDsKKwkgIC8qIG1heCBsZW5ndGggb2YgYWRkcmVzcy9zdWJuZXQgZGVzY3JpcHRvciBpcyBmaXZlIGJ5dGVzLAorCSAgICAgYWRkIG9uZSBmb3IgdGhlIG9wdGlvbiAxMjAgZW5jIGJ5dGUgdG9vICovCisJICBuZXctPnZhbCA9IG9wID0gb3B0X21hbGxvYygoNSAqIGFkZHJzKSArIDEpOworCSAgbmV3LT5mbGFncyB8PSBESE9QVF9BRERSOworCisJICBpZiAoIShuZXctPmZsYWdzICYgKERIT1BUX0VOQ0FQU1VMQVRFIHwgREhPUFRfVkVORE9SIHwgREhPUFRfUkZDMzkyNSkpICYmIAorCSAgICAgIG5ldy0+b3B0ID09IE9QVElPTl9TSVBfU0VSVkVSKQorCSAgICB7CisJICAgICAgKihvcCsrKSA9IDE7IC8qIFJGQyAzMzYxICJlbmMgYnl0ZSIgKi8KKwkgICAgICBuZXctPmZsYWdzICY9IH5ESE9QVF9BRERSOworCSAgICB9CisJICB3aGlsZSAoYWRkcnMtLSkgCisJICAgIHsKKwkgICAgICBjcCA9IGNvbW1hOworCSAgICAgIGNvbW1hID0gc3BsaXQoY3ApOworCSAgICAgIHNsYXNoID0gc3BsaXRfY2hyKGNwLCAnLycpOworCSAgICAgIGlmICghaW5ldF9wdG9uKEFGX0lORVQsIGNwLCAmaW4pKQorCQlyZXRfZXJyKF8oImJhZCBJUHY0IGFkZHJlc3MiKSk7CisJICAgICAgaWYgKCFzbGFzaCkKKwkJeworCQkgIG1lbWNweShvcCwgJmluLCBJTkFERFJTWik7CisJCSAgb3AgKz0gSU5BRERSU1o7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICB1bnNpZ25lZCBjaGFyICpwID0gKHVuc2lnbmVkIGNoYXIgKikmaW47CisJCSAgaW50IG5ldHNpemUgPSBhdG9pKHNsYXNoKTsKKwkJICAqb3ArKyA9IG5ldHNpemU7CisJCSAgaWYgKG5ldHNpemUgPiAwKQorCQkgICAgKm9wKysgPSAqcCsrOworCQkgIGlmIChuZXRzaXplID4gOCkKKwkJICAgICpvcCsrID0gKnArKzsKKwkJICBpZiAobmV0c2l6ZSA+IDE2KQorCQkgICAgKm9wKysgPSAqcCsrOworCQkgIGlmIChuZXRzaXplID4gMjQpCisJCSAgICAqb3ArKyA9ICpwKys7CisJCSAgbmV3LT5mbGFncyAmPSB+REhPUFRfQUREUjsgLyogY2Fubm90IHJlLXdyaXRlIGRlc2NyaXB0b3IgZm9ybWF0ICovCisJCX0gCisJICAgIH0KKwkgIG5ldy0+bGVuID0gb3AgLSBuZXctPnZhbDsKKwl9CisgICAgICBlbHNlIGlmIChpc19hZGRyNiAmJiBpczYpCisJeworCSAgdW5zaWduZWQgY2hhciAqb3A7CisJICBuZXctPnZhbCA9IG9wID0gb3B0X21hbGxvYygxNiAqIGFkZHJzKTsKKwkgIG5ldy0+ZmxhZ3MgfD0gREhPUFRfQUREUjY7CisJICB3aGlsZSAoYWRkcnMtLSkgCisJICAgIHsKKwkgICAgICBjcCA9IGNvbW1hOworCSAgICAgIGNvbW1hID0gc3BsaXQoY3ApOworCSAgICAgIAorCSAgICAgIC8qIGNoZWNrIGZvciBbMTIzNDo6N10gKi8KKwkgICAgICBpZiAoKmNwID09ICdbJykKKwkJY3ArKzsKKwkgICAgICBpZiAoc3RybGVuKGNwKSA+IDEgJiYgY3Bbc3RybGVuKGNwKS0xXSA9PSAnXScpCisJCWNwW3N0cmxlbihjcCktMV0gPSAwOworCSAgICAgIAorCSAgICAgIGlmIChpbmV0X3B0b24oQUZfSU5FVDYsIGNwLCBvcCkpCisJCXsKKwkJICBvcCArPSBJTjZBRERSU1o7CisJCSAgY29udGludWU7CisJCX0KKwkgIAorCSAgICAgIHJldF9lcnIoXygiYmFkIElQdjYgYWRkcmVzcyIpKTsKKwkgICAgfSAKKwkgIG5ldy0+bGVuID0gb3AgLSBuZXctPnZhbDsKKwl9CisgICAgICBlbHNlIGlmIChpc19zdHJpbmcpCisJeworIAkgIC8qIHRleHQgYXJnICovCisJICBpZiAoKG5ldy0+b3B0ID09IE9QVElPTl9ET01BSU5fU0VBUkNIIHx8IG5ldy0+b3B0ID09IE9QVElPTl9TSVBfU0VSVkVSKSAmJgorCSAgICAgICFpczYgJiYgIShuZXctPmZsYWdzICYgKERIT1BUX0VOQ0FQU1VMQVRFIHwgREhPUFRfVkVORE9SIHwgREhPUFRfUkZDMzkyNSkpKQorCSAgICB7CisJICAgICAgLyogZG5zIHNlYXJjaCwgUkZDIDMzOTcsIG9yIFNJUCwgUkZDIDMzNjEgKi8KKwkgICAgICB1bnNpZ25lZCBjaGFyICpxLCAqciwgKnRhaWw7CisJICAgICAgdW5zaWduZWQgY2hhciAqcCwgKm0gPSBOVUxMLCAqbmV3cDsKKwkgICAgICBzaXplX3QgbmV3bGVuLCBsZW4gPSAwOworCSAgICAgIGludCBoZWFkZXJfc2l6ZSA9IChuZXctPm9wdCA9PSBPUFRJT05fRE9NQUlOX1NFQVJDSCkgPyAwIDogMTsKKwkgICAgICAKKwkgICAgICBhcmcgPSBjb21tYTsKKwkgICAgICBjb21tYSA9IHNwbGl0KGFyZyk7CisJICAgICAgCisJICAgICAgd2hpbGUgKGFyZyAmJiAqYXJnKQorCQl7CisJCSAgY2hhciAqaW4sICpkb20gPSBOVUxMOworCQkgIHNpemVfdCBkb21sZW4gPSAxOworCQkgIC8qIEFsbG93ICIuIiBhcyBhbiBlbXB0eSBkb21haW4gKi8KKwkJICBpZiAoc3RyY21wIChhcmcsICIuIikgIT0gMCkKKwkJICAgIHsKKwkJICAgICAgaWYgKCEoZG9tID0gY2Fub25pY2FsaXNlX29wdChhcmcpKSkKKwkJCXJldF9lcnIoXygiYmFkIGRvbWFpbiBpbiBkaGNwLW9wdGlvbiIpKTsKKwkJCQorCQkgICAgICBkb21sZW4gPSBzdHJsZW4oZG9tKSArIDI7CisJCSAgICB9CisJCSAgICAgIAorCQkgIG5ld3AgPSBvcHRfbWFsbG9jKGxlbiArIGRvbWxlbiArIGhlYWRlcl9zaXplKTsKKwkJICBpZiAobSkKKwkJICAgIHsKKwkJICAgICAgbWVtY3B5KG5ld3AsIG0sIGhlYWRlcl9zaXplICsgbGVuKTsKKwkJICAgICAgZnJlZShtKTsKKwkJICAgIH0KKwkJICBtID0gbmV3cDsKKwkJICBwID0gbSArIGhlYWRlcl9zaXplOworCQkgIHEgPSBwICsgbGVuOworCQkgIAorCQkgIC8qIGFkZCBzdHJpbmcgb24gdGhlIGVuZCBpbiBSRkMxMDM1IGZvcm1hdCAqLworCQkgIGZvciAoaW4gPSBkb207IGluICYmICppbjspIAorCQkgICAgeworCQkgICAgICB1bnNpZ25lZCBjaGFyICpjcCA9IHErKzsKKwkJICAgICAgaW50IGo7CisJCSAgICAgIGZvciAoaiA9IDA7ICppbiAmJiAoKmluICE9ICcuJyk7IGluKyssIGorKykKKwkJCSpxKysgPSAqaW47CisJCSAgICAgICpjcCA9IGo7CisJCSAgICAgIGlmICgqaW4pCisJCQlpbisrOworCQkgICAgfQorCQkgICpxKysgPSAwOworCQkgIGZyZWUoZG9tKTsKKwkJICAKKwkJICAvKiBOb3cgdGFpbC1jb21wcmVzcyB1c2luZyBlYXJsaWVyIG5hbWVzLiAqLworCQkgIG5ld2xlbiA9IHEgLSBwOworCQkgIGZvciAodGFpbCA9IHAgKyBsZW47ICp0YWlsOyB0YWlsICs9ICgqdGFpbCkgKyAxKQorCQkgICAgZm9yIChyID0gcDsgciAtIHAgPCAoaW50KWxlbjsgciArPSAoKnIpICsgMSkKKwkJICAgICAgaWYgKHN0cmNtcCgoY2hhciAqKXIsIChjaGFyICopdGFpbCkgPT0gMCkKKwkJCXsKKwkJCSAgUFVUU0hPUlQoKHIgLSBwKSB8IDB4YzAwMCwgdGFpbCk7IAorCQkJICBuZXdsZW4gPSB0YWlsIC0gcDsKKwkJCSAgZ290byBlbmQ7CisJCQl9CisJCWVuZDoKKwkJICBsZW4gPSBuZXdsZW47CisJCSAgCisJCSAgYXJnID0gY29tbWE7CisJCSAgY29tbWEgPSBzcGxpdChhcmcpOworCQl9CisgICAgICAKKwkgICAgICAvKiBSRkMgMzM2MSwgZW5jIGJ5dGUgaXMgemVybyBmb3IgbmFtZXMgKi8KKwkgICAgICBpZiAobmV3LT5vcHQgPT0gT1BUSU9OX1NJUF9TRVJWRVIpCisJCW1bMF0gPSAwOworCSAgICAgIG5ldy0+bGVuID0gKGludCkgbGVuICsgaGVhZGVyX3NpemU7CisJICAgICAgbmV3LT52YWwgPSBtOworCSAgICB9CisjaWZkZWYgSEFWRV9ESENQNgorCSAgZWxzZSBpZiAoY29tbWEgJiYgKG9wdF9sZW4gJiBPVF9DU1RSSU5HKSkKKwkgICAgeworCSAgICAgIC8qIGxlbmd0aCBmaWVsZHMgYXJlIHR3byBieXRlcyBzbyBuZWVkIDE2IGJpdHMgZm9yIGVhY2ggc3RyaW5nICovCisJICAgICAgaW50IGksIGNvbW1hcyA9IDE7CisJICAgICAgdW5zaWduZWQgY2hhciAqcCwgKm5ld3A7CisKKwkgICAgICBmb3IgKGkgPSAwOyBjb21tYVtpXTsgaSsrKQorCQlpZiAoY29tbWFbaV0gPT0gJywnKQorCQkgIGNvbW1hcysrOworCSAgICAgIAorCSAgICAgIG5ld3AgPSBvcHRfbWFsbG9jKHN0cmxlbihjb21tYSkrKDIqY29tbWFzKSk7CSAgCisJICAgICAgcCA9IG5ld3A7CisJICAgICAgYXJnID0gY29tbWE7CisJICAgICAgY29tbWEgPSBzcGxpdChhcmcpOworCSAgICAgIAorCSAgICAgIHdoaWxlIChhcmcgJiYgKmFyZykKKwkJeworCQkgIHUxNiBsZW4gPSBzdHJsZW4oYXJnKTsKKwkJICB1bmhpZGVfbWV0YXMoYXJnKTsKKwkJICBQVVRTSE9SVChsZW4sIHApOworCQkgIG1lbWNweShwLCBhcmcsIGxlbik7CisJCSAgcCArPSBsZW47IAorCisJCSAgYXJnID0gY29tbWE7CisJCSAgY29tbWEgPSBzcGxpdChhcmcpOworCQl9CisKKwkgICAgICBuZXctPnZhbCA9IG5ld3A7CisJICAgICAgbmV3LT5sZW4gPSBwIC0gbmV3cDsKKwkgICAgfQorCSAgZWxzZSBpZiAoY29tbWEgJiYgKG9wdF9sZW4gJiBPVF9SRkMxMDM1X05BTUUpKQorCSAgICB7CisJICAgICAgdW5zaWduZWQgY2hhciAqcCA9IE5VTEwsICpuZXdwLCAqZW5kOworCSAgICAgIGludCBsZW4gPSAwOworCSAgICAgIGFyZyA9IGNvbW1hOworCSAgICAgIGNvbW1hID0gc3BsaXQoYXJnKTsKKwkgICAgICAKKwkgICAgICB3aGlsZSAoYXJnICYmICphcmcpCisJCXsKKwkJICBjaGFyICpkb20gPSBjYW5vbmljYWxpc2Vfb3B0KGFyZyk7CisJCSAgaWYgKCFkb20pCisJCSAgICByZXRfZXJyKF8oImJhZCBkb21haW4gaW4gZGhjcC1vcHRpb24iKSk7CisJCSAgICAJCSAgCisJCSAgbmV3cCA9IG9wdF9tYWxsb2MobGVuICsgc3RybGVuKGRvbSkgKyAyKTsKKwkJICAKKwkJICBpZiAocCkKKwkJICAgIHsKKwkJICAgICAgbWVtY3B5KG5ld3AsIHAsIGxlbik7CisJCSAgICAgIGZyZWUocCk7CisJCSAgICB9CisJCSAgCisJCSAgcCA9IG5ld3A7CisJCSAgZW5kID0gZG9fcmZjMTAzNV9uYW1lKHAgKyBsZW4sIGRvbSwgTlVMTCk7CisJCSAgKmVuZCsrID0gMDsKKwkJICBsZW4gPSBlbmQgLSBwOworCQkgIGZyZWUoZG9tKTsKKworCQkgIGFyZyA9IGNvbW1hOworCQkgIGNvbW1hID0gc3BsaXQoYXJnKTsKKwkJfQorCSAgICAgIAorCSAgICAgIG5ldy0+dmFsID0gcDsKKwkgICAgICBuZXctPmxlbiA9IGxlbjsKKwkgICAgfQorI2VuZGlmCisJICBlbHNlCisJICAgIHsKKwkgICAgICBuZXctPmxlbiA9IHN0cmxlbihjb21tYSk7CisJICAgICAgLyoga2VlcCB0ZXJtaW5hdGluZyB6ZXJvIG9uIHN0cmluZyAqLworCSAgICAgIG5ldy0+dmFsID0gKHVuc2lnbmVkIGNoYXIgKilvcHRfc3RyaW5nX2FsbG9jKGNvbW1hKTsKKwkgICAgICBuZXctPmZsYWdzIHw9IERIT1BUX1NUUklORzsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgaWYgKCFpczYgJiYgCisgICAgICAoKG5ldy0+bGVuID4gMjU1KSB8fCAKKyAgICAgIChuZXctPmxlbiA+IDI1MyAmJiAobmV3LT5mbGFncyAmIChESE9QVF9WRU5ET1IgfCBESE9QVF9FTkNBUFNVTEFURSkpKSB8fAorICAgICAgIChuZXctPmxlbiA+IDI1MCAmJiAobmV3LT5mbGFncyAmIERIT1BUX1JGQzM5MjUpKSkpCisgICAgcmV0X2VycihfKCJkaGNwLW9wdGlvbiB0b28gbG9uZyIpKTsKKyAgCisgIGlmIChmbGFncyA9PSBESE9QVF9NQVRDSCkKKyAgICB7CisgICAgICBpZiAoKG5ldy0+ZmxhZ3MgJiAoREhPUFRfRU5DQVBTVUxBVEUgfCBESE9QVF9WRU5ET1IpKSB8fAorCSAgIW5ldy0+bmV0aWQgfHwKKwkgIG5ldy0+bmV0aWQtPm5leHQpCisJcmV0X2VycihfKCJpbGxlZ2FsIGRoY3AtbWF0Y2giKSk7CisgICAgICAgCisgICAgICBpZiAoaXM2KQorCXsKKwkgIG5ldy0+bmV4dCA9IGRhZW1vbi0+ZGhjcF9tYXRjaDY7CisJICBkYWVtb24tPmRoY3BfbWF0Y2g2ID0gbmV3OworCX0KKyAgICAgIGVsc2UKKwl7CisJICBuZXctPm5leHQgPSBkYWVtb24tPmRoY3BfbWF0Y2g7CisJICBkYWVtb24tPmRoY3BfbWF0Y2ggPSBuZXc7CisJfQorICAgIH0KKyAgZWxzZSBpZiAoaXM2KQorICAgIHsKKyAgICAgIG5ldy0+bmV4dCA9IGRhZW1vbi0+ZGhjcF9vcHRzNjsKKyAgICAgIGRhZW1vbi0+ZGhjcF9vcHRzNiA9IG5ldzsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBuZXctPm5leHQgPSBkYWVtb24tPmRoY3Bfb3B0czsKKyAgICAgIGRhZW1vbi0+ZGhjcF9vcHRzID0gbmV3OworICAgIH0KKyAgICAKKyAgcmV0dXJuIDE7Cit9CisKKyNlbmRpZgorCit2b2lkIHNldF9vcHRpb25fYm9vbCh1bnNpZ25lZCBpbnQgb3B0KQoreworICBpZiAob3B0IDwgMzIpCisgICAgZGFlbW9uLT5vcHRpb25zIHw9IDF1IDw8IG9wdDsKKyAgZWxzZQorICAgIGRhZW1vbi0+b3B0aW9uczIgfD0gMXUgPDwgKG9wdCAtIDMyKTsKK30KKwordm9pZCByZXNldF9vcHRpb25fYm9vbCh1bnNpZ25lZCBpbnQgb3B0KQoreworICBpZiAob3B0IDwgMzIpCisgICAgZGFlbW9uLT5vcHRpb25zICY9IH4oMXUgPDwgb3B0KTsKKyAgZWxzZQorICAgIGRhZW1vbi0+b3B0aW9uczIgJj0gfigxdSA8PCAob3B0IC0gMzIpKTsKK30KKworc3RhdGljIGludCBvbmVfb3B0KGludCBvcHRpb24sIGNoYXIgKmFyZywgY2hhciAqZXJyc3RyLCBjaGFyICpnZW5fZXJyLCBpbnQgY29tbWFuZF9saW5lLCBpbnQgc2VydmVyc19vbmx5KQoreyAgICAgIAorICBpbnQgaTsKKyAgY2hhciAqY29tbWE7CisKKyAgaWYgKG9wdGlvbiA9PSAnPycpCisgICAgcmV0X2VycihnZW5fZXJyKTsKKyAgCisgIGZvciAoaT0wOyB1c2FnZVtpXS5vcHQgIT0gMDsgaSsrKQorICAgIGlmICh1c2FnZVtpXS5vcHQgPT0gb3B0aW9uKQorICAgICAgeworCSBpbnQgcmVwdCA9IHVzYWdlW2ldLnJlcHQ7CisJIAorCSBpZiAoY29tbWFuZF9saW5lKQorCSAgIHsKKwkgICAgIC8qIGNvbW1hbmQgbGluZSAqLworCSAgICAgaWYgKHJlcHQgPT0gQVJHX1VTRURfQ0wpCisJICAgICAgIHJldF9lcnIoXygiaWxsZWdhbCByZXBlYXRlZCBmbGFnIikpOworCSAgICAgaWYgKHJlcHQgPT0gQVJHX09ORSkKKwkgICAgICAgdXNhZ2VbaV0ucmVwdCA9IEFSR19VU0VEX0NMOworCSAgIH0KKwkgZWxzZQorCSAgIHsKKwkgICAgIC8qIGFsbG93IGZpbGUgdG8gb3ZlcnJpZGUgY29tbWFuZCBsaW5lICovCisJICAgICBpZiAocmVwdCA9PSBBUkdfVVNFRF9GSUxFKQorCSAgICAgICByZXRfZXJyKF8oImlsbGVnYWwgcmVwZWF0ZWQga2V5d29yZCIpKTsKKwkgICAgIGlmIChyZXB0ID09IEFSR19VU0VEX0NMIHx8IHJlcHQgPT0gQVJHX09ORSkKKwkgICAgICAgdXNhZ2VbaV0ucmVwdCA9IEFSR19VU0VEX0ZJTEU7CisJICAgfQorCisJIGlmIChyZXB0ICE9IEFSR19EVVAgJiYgcmVwdCAhPSBBUkdfT05FICYmIHJlcHQgIT0gQVJHX1VTRURfQ0wpIAorCSAgIHsKKwkgICAgIHNldF9vcHRpb25fYm9vbChyZXB0KTsKKwkgICAgIHJldHVybiAxOworCSAgIH0KKyAgICAgICAKKwkgYnJlYWs7CisgICAgICB9CisgIAorICBzd2l0Y2ggKG9wdGlvbikKKyAgICB7IAorICAgIGNhc2UgJ0MnOiAvKiAtLWNvbmYtZmlsZSAqLworICAgICAgeworCWNoYXIgKmZpbGUgPSBvcHRfc3RyaW5nX2FsbG9jKGFyZyk7CisJaWYgKGZpbGUpCisJICB7CisJICAgIG9uZV9maWxlKGZpbGUsIDApOworCSAgICBmcmVlKGZpbGUpOworCSAgfQorCWJyZWFrOworICAgICAgfQorCisgICAgY2FzZSAnNyc6IC8qIC0tY29uZi1kaXIgKi8JICAgICAgCisgICAgICB7CisJRElSICpkaXJfc3RyZWFtOworCXN0cnVjdCBkaXJlbnQgKmVudDsKKwljaGFyICpkaXJlY3RvcnksICpwYXRoOworCXN0cnVjdCBsaXN0IHsKKwkgIGNoYXIgKnN1ZmZpeDsKKwkgIHN0cnVjdCBsaXN0ICpuZXh0OworCX0gKmlnbm9yZV9zdWZmaXggPSBOVUxMLCAqbWF0Y2hfc3VmZml4ID0gTlVMTCwgKmxpOworCQorCWNvbW1hID0gc3BsaXQoYXJnKTsKKwlpZiAoIShkaXJlY3RvcnkgPSBvcHRfc3RyaW5nX2FsbG9jKGFyZykpKQorCSAgYnJlYWs7CisJCisJZm9yIChhcmcgPSBjb21tYTsgYXJnOyBhcmcgPSBjb21tYSkgCisJICB7CisJICAgIGNvbW1hID0gc3BsaXQoYXJnKTsKKwkgICAgaWYgKHN0cmxlbihhcmcpICE9IDApCisJICAgICAgeworCQlsaSA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBsaXN0KSk7CisJCWlmICgqYXJnID09ICcqJykKKwkJICB7CisJCSAgICAvKiAiKiIgd2l0aCBubyBzdWZmaXggaXMgYSBuby1vcCAqLworCQkgICAgaWYgKGFyZ1sxXSA9PSAwKQorCQkgICAgICBmcmVlKGxpKTsKKwkJICAgIGVsc2UKKwkJICAgICAgeworCQkJbGktPm5leHQgPSBtYXRjaF9zdWZmaXg7CisJCQltYXRjaF9zdWZmaXggPSBsaTsKKwkJCS8qIEhhdmUgdG8gY29weTogYnVmZmVyIGlzIG92ZXJ3cml0dGVuICovCisJCQlsaS0+c3VmZml4ID0gb3B0X3N0cmluZ19hbGxvYyhhcmcrMSk7CisJCSAgICAgIH0KKwkJICB9CisJCWVsc2UKKwkJICB7CisJCSAgICBsaS0+bmV4dCA9IGlnbm9yZV9zdWZmaXg7CisJCSAgICBpZ25vcmVfc3VmZml4ID0gbGk7CisJCSAgICAvKiBIYXZlIHRvIGNvcHk6IGJ1ZmZlciBpcyBvdmVyd3JpdHRlbiAqLworCQkgICAgbGktPnN1ZmZpeCA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKTsKKwkJICB9CisJICAgICAgfQorCSAgfQorCQorCWlmICghKGRpcl9zdHJlYW0gPSBvcGVuZGlyKGRpcmVjdG9yeSkpKQorCSAgZGllKF8oImNhbm5vdCBhY2Nlc3MgZGlyZWN0b3J5ICVzOiAlcyIpLCBkaXJlY3RvcnksIEVDX0ZJTEUpOworCQorCXdoaWxlICgoZW50ID0gcmVhZGRpcihkaXJfc3RyZWFtKSkpCisJICB7CisJICAgIHNpemVfdCBsZW4gPSBzdHJsZW4oZW50LT5kX25hbWUpOworCSAgICBzdHJ1Y3Qgc3RhdCBidWY7CisJICAgIAorCSAgICAvKiBpZ25vcmUgZW1hY3MgYmFja3VwcyBhbmQgZG90ZmlsZXMgKi8KKwkgICAgaWYgKGxlbiA9PSAwIHx8CisJCWVudC0+ZF9uYW1lW2xlbiAtIDFdID09ICd+JyB8fAorCQkoZW50LT5kX25hbWVbMF0gPT0gJyMnICYmIGVudC0+ZF9uYW1lW2xlbiAtIDFdID09ICcjJykgfHwKKwkJZW50LT5kX25hbWVbMF0gPT0gJy4nKQorCSAgICAgIGNvbnRpbnVlOworCisJICAgIGlmIChtYXRjaF9zdWZmaXgpCisJICAgICAgeworCQlmb3IgKGxpID0gbWF0Y2hfc3VmZml4OyBsaTsgbGkgPSBsaS0+bmV4dCkKKwkJICB7CisJCSAgICAvKiBjaGVjayBmb3IgcmVxdWlyZWQgc3VmZmljZXMgKi8KKwkJICAgIHNpemVfdCBscyA9IHN0cmxlbihsaS0+c3VmZml4KTsKKwkJICAgIGlmIChsZW4gPiBscyAmJgorCQkJc3RyY21wKGxpLT5zdWZmaXgsICZlbnQtPmRfbmFtZVtsZW4gLSBsc10pID09IDApCisJCSAgICAgIGJyZWFrOworCQkgIH0KKwkJaWYgKCFsaSkKKwkJICBjb250aW51ZTsKKwkgICAgICB9CisJICAgIAorCSAgICBmb3IgKGxpID0gaWdub3JlX3N1ZmZpeDsgbGk7IGxpID0gbGktPm5leHQpCisJICAgICAgeworCQkvKiBjaGVjayBmb3IgcHJvc2NyaWJlZCBzdWZmaWNlcyAqLworCQlzaXplX3QgbHMgPSBzdHJsZW4obGktPnN1ZmZpeCk7CisJCWlmIChsZW4gPiBscyAmJgorCQkgICAgc3RyY21wKGxpLT5zdWZmaXgsICZlbnQtPmRfbmFtZVtsZW4gLSBsc10pID09IDApCisJCSAgYnJlYWs7CisJICAgICAgfQorCSAgICBpZiAobGkpCisJICAgICAgY29udGludWU7CisJICAgIAorCSAgICBwYXRoID0gb3B0X21hbGxvYyhzdHJsZW4oZGlyZWN0b3J5KSArIGxlbiArIDIpOworCSAgICBzdHJjcHkocGF0aCwgZGlyZWN0b3J5KTsKKwkgICAgc3RyY2F0KHBhdGgsICIvIik7CisJICAgIHN0cmNhdChwYXRoLCBlbnQtPmRfbmFtZSk7CisKKwkgICAgLyogZmlsZXMgbXVzdCBiZSByZWFkYWJsZSAqLworCSAgICBpZiAoc3RhdChwYXRoLCAmYnVmKSA9PSAtMSkKKwkgICAgICBkaWUoXygiY2Fubm90IGFjY2VzcyAlczogJXMiKSwgcGF0aCwgRUNfRklMRSk7CisJICAgIAorCSAgICAvKiBvbmx5IHJlZyBmaWxlcyBhbGxvd2VkLiAqLworCSAgICBpZiAoU19JU1JFRyhidWYuc3RfbW9kZSkpCisJICAgICAgb25lX2ZpbGUocGF0aCwgMCk7CisJICAgIAorCSAgICBmcmVlKHBhdGgpOworCSAgfQorICAgICAKKwljbG9zZWRpcihkaXJfc3RyZWFtKTsKKwlmcmVlKGRpcmVjdG9yeSk7CisJZm9yKDsgaWdub3JlX3N1ZmZpeDsgaWdub3JlX3N1ZmZpeCA9IGxpKQorCSAgeworCSAgICBsaSA9IGlnbm9yZV9zdWZmaXgtPm5leHQ7CisJICAgIGZyZWUoaWdub3JlX3N1ZmZpeC0+c3VmZml4KTsKKwkgICAgZnJlZShpZ25vcmVfc3VmZml4KTsKKwkgIH0KKwlmb3IoOyBtYXRjaF9zdWZmaXg7IG1hdGNoX3N1ZmZpeCA9IGxpKQorCSAgeworCSAgICBsaSA9IG1hdGNoX3N1ZmZpeC0+bmV4dDsKKwkgICAgZnJlZShtYXRjaF9zdWZmaXgtPnN1ZmZpeCk7CisJICAgIGZyZWUobWF0Y2hfc3VmZml4KTsKKwkgIH0KKwlicmVhazsKKyAgICAgIH0KKworICAgIGNhc2UgTE9QVF9BRERfU0JORVQ6IC8qIC0tYWRkLXN1Ym5ldCAqLworICAgICAgc2V0X29wdGlvbl9ib29sKE9QVF9DTElFTlRfU1VCTkVUKTsKKyAgICAgIGlmIChhcmcpCisJeworICAgICAgICAgIGNoYXIgKmVyciwgKmVuZDsKKwkgIGNvbW1hID0gc3BsaXQoYXJnKTsKKworICAgICAgICAgIHN0cnVjdCBteXN1Ym5ldCogbmV3ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IG15c3VibmV0KSk7CisgICAgICAgICAgaWYgKChlbmQgPSBzcGxpdF9jaHIoYXJnLCAnLycpKSkKKwkgICAgeworCSAgICAgIC8qIGhhcyBzdWJuZXQrbGVuICovCisJICAgICAgZXJyID0gcGFyc2VfbXlzb2NrYWRkcihhcmcsICZuZXctPmFkZHIpOworCSAgICAgIGlmIChlcnIpCisJCXJldF9lcnIoZXJyKTsKKwkgICAgICBpZiAoIWF0b2lfY2hlY2soZW5kLCAmbmV3LT5tYXNrKSkKKwkJcmV0X2VycihnZW5fZXJyKTsKKwkgICAgICBuZXctPmFkZHJfdXNlZCA9IDE7CisJICAgIH0gCisJICBlbHNlIGlmICghYXRvaV9jaGVjayhhcmcsICZuZXctPm1hc2spKQorCSAgICByZXRfZXJyKGdlbl9lcnIpOworCSAgICAKKyAgICAgICAgICBkYWVtb24tPmFkZF9zdWJuZXQ0ID0gbmV3OworCisgICAgICAgICAgaWYgKGNvbW1hKQorICAgICAgICAgICAgeworCSAgICAgIG5ldyA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBteXN1Ym5ldCkpOworCSAgICAgIGlmICgoZW5kID0gc3BsaXRfY2hyKGNvbW1hLCAnLycpKSkKKwkJeworCQkgIC8qIGhhcyBzdWJuZXQrbGVuICovCisgICAgICAgICAgICAgICAgICBlcnIgPSBwYXJzZV9teXNvY2thZGRyKGNvbW1hLCAmbmV3LT5hZGRyKTsKKyAgICAgICAgICAgICAgICAgIGlmIChlcnIpCisgICAgICAgICAgICAgICAgICAgIHJldF9lcnIoZXJyKTsKKyAgICAgICAgICAgICAgICAgIGlmICghYXRvaV9jaGVjayhlbmQsICZuZXctPm1hc2spKQorICAgICAgICAgICAgICAgICAgICByZXRfZXJyKGdlbl9lcnIpOworICAgICAgICAgICAgICAgICAgbmV3LT5hZGRyX3VzZWQgPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGlmICghYXRvaV9jaGVjayhjb21tYSwgJm5ldy0+bWFzaykpCisgICAgICAgICAgICAgICAgICAgIHJldF9lcnIoZ2VuX2Vycik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgIAorCSAgICAgIGRhZW1vbi0+YWRkX3N1Ym5ldDYgPSBuZXc7CisJICAgIH0KKwl9CisgICAgICBicmVhazsKKworICAgIGNhc2UgJzEnOiAvKiAtLWVuYWJsZS1kYnVzICovCisgICAgICBzZXRfb3B0aW9uX2Jvb2woT1BUX0RCVVMpOworICAgICAgaWYgKGFyZykKKwlkYWVtb24tPmRidXNfbmFtZSA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKTsKKyAgICAgIGVsc2UKKwlkYWVtb24tPmRidXNfbmFtZSA9IEROU01BU1FfU0VSVklDRTsKKyAgICAgIGJyZWFrOworICAgICAgCisgICAgY2FzZSAnOCc6IC8qIC0tbG9nLWZhY2lsaXR5ICovCisgICAgICAvKiBtYXkgYmUgYSBmaWxlbmFtZSAqLworICAgICAgaWYgKHN0cmNocihhcmcsICcvJykgfHwgc3RyY21wIChhcmcsICItIikgPT0gMCkKKwlkYWVtb24tPmxvZ19maWxlID0gb3B0X3N0cmluZ19hbGxvYyhhcmcpOworICAgICAgZWxzZQorCXsJICAKKyNpZmRlZiBfX0FORFJPSURfXworCSAgcmV0X2VycihfKCJzZXR0aW5nIGxvZyBmYWNpbGl0eSBpcyBub3QgcG9zc2libGUgdW5kZXIgQW5kcm9pZCIpKTsKKyNlbHNlCisJICBmb3IgKGkgPSAwOyBmYWNpbGl0eW5hbWVzW2ldLmNfbmFtZTsgaSsrKQorCSAgICBpZiAoaG9zdG5hbWVfaXNlcXVhbCgoY2hhciAqKWZhY2lsaXR5bmFtZXNbaV0uY19uYW1lLCBhcmcpKQorCSAgICAgIGJyZWFrOworCSAgCisJICBpZiAoZmFjaWxpdHluYW1lc1tpXS5jX25hbWUpCisJICAgIGRhZW1vbi0+bG9nX2ZhYyA9IGZhY2lsaXR5bmFtZXNbaV0uY192YWw7CisJICBlbHNlCisJICAgIHJldF9lcnIoXygiYmFkIGxvZyBmYWNpbGl0eSIpKTsKKyNlbmRpZgorCX0KKyAgICAgIGJyZWFrOworICAgICAgCisgICAgY2FzZSAneCc6IC8qIC0tcGlkLWZpbGUgKi8KKyAgICAgIGRhZW1vbi0+cnVuZmlsZSA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAncic6IC8qIC0tcmVzb2x2LWZpbGUgKi8KKyAgICAgIHsKKwljaGFyICpuYW1lID0gb3B0X3N0cmluZ19hbGxvYyhhcmcpOworCXN0cnVjdCByZXNvbHZjICpuZXcsICpsaXN0ID0gZGFlbW9uLT5yZXNvbHZfZmlsZXM7CisJCisJaWYgKGxpc3QgJiYgbGlzdC0+aXNfZGVmYXVsdCkKKwkgIHsKKwkgICAgLyogcmVwbGFjZSBkZWZhdWx0IHJlc29sdiBmaWxlIC0gcG9zc2libHkgd2l0aCBub3RoaW5nICovCisJICAgIGlmIChuYW1lKQorCSAgICAgIHsKKwkJbGlzdC0+aXNfZGVmYXVsdCA9IDA7CisJCWxpc3QtPm5hbWUgPSBuYW1lOworCSAgICAgIH0KKwkgICAgZWxzZQorCSAgICAgIGxpc3QgPSBOVUxMOworCSAgfQorCWVsc2UgaWYgKG5hbWUpCisJICB7CisJICAgIG5ldyA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCByZXNvbHZjKSk7CisJICAgIG5ldy0+bmV4dCA9IGxpc3Q7CisJICAgIG5ldy0+bmFtZSA9IG5hbWU7CisJICAgIG5ldy0+aXNfZGVmYXVsdCA9IDA7CisJICAgIG5ldy0+bXRpbWUgPSAwOworCSAgICBuZXctPmxvZ2dlZCA9IDA7CisJICAgIGxpc3QgPSBuZXc7CisJICB9CisJZGFlbW9uLT5yZXNvbHZfZmlsZXMgPSBsaXN0OworCWJyZWFrOworICAgICAgfQorCisgICAgY2FzZSBMT1BUX1NFUlZFUlNfRklMRToKKyAgICAgIGRhZW1vbi0+c2VydmVyc19maWxlID0gb3B0X3N0cmluZ19hbGxvYyhhcmcpOworICAgICAgYnJlYWs7CisgICAgICAKKyAgICBjYXNlICdtJzogIC8qIC0tbXgtaG9zdCAqLworICAgICAgeworCWludCBwcmVmID0gMTsKKwlzdHJ1Y3QgbXhfc3J2X3JlY29yZCAqbmV3OworCWNoYXIgKm5hbWUsICp0YXJnZXQgPSBOVUxMOworCisJaWYgKChjb21tYSA9IHNwbGl0KGFyZykpKQorCSAgeworCSAgICBjaGFyICpwcmVmc3RyOworCSAgICBpZiAoKHByZWZzdHIgPSBzcGxpdChjb21tYSkpICYmICFhdG9pX2NoZWNrMTYocHJlZnN0ciwgJnByZWYpKQorCSAgICAgIHJldF9lcnIoXygiYmFkIE1YIHByZWZlcmVuY2UiKSk7CisJICB9CisJCisJaWYgKCEobmFtZSA9IGNhbm9uaWNhbGlzZV9vcHQoYXJnKSkgfHwgCisJICAgIChjb21tYSAmJiAhKHRhcmdldCA9IGNhbm9uaWNhbGlzZV9vcHQoY29tbWEpKSkpCisJICByZXRfZXJyKF8oImJhZCBNWCBuYW1lIikpOworCQorCW5ldyA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBteF9zcnZfcmVjb3JkKSk7CisJbmV3LT5uZXh0ID0gZGFlbW9uLT5teG5hbWVzOworCWRhZW1vbi0+bXhuYW1lcyA9IG5ldzsKKwluZXctPmlzc3J2ID0gMDsKKwluZXctPm5hbWUgPSBuYW1lOworCW5ldy0+dGFyZ2V0ID0gdGFyZ2V0OyAvKiBtYXkgYmUgTlVMTCAqLworCW5ldy0+d2VpZ2h0ID0gcHJlZjsKKwlicmVhazsKKyAgICAgIH0KKyAgICAgIAorICAgIGNhc2UgJ3QnOiAvKiAgLS1teC10YXJnZXQgKi8KKyAgICAgIGlmICghKGRhZW1vbi0+bXh0YXJnZXQgPSBjYW5vbmljYWxpc2Vfb3B0KGFyZykpKQorCXJldF9lcnIoXygiYmFkIE1YIHRhcmdldCIpKTsKKyAgICAgIGJyZWFrOworCisjaWZkZWYgSEFWRV9ESENQICAgICAgCisgICAgY2FzZSAnbCc6ICAvKiAtLWRoY3AtbGVhc2VmaWxlICovCisgICAgICBkYWVtb24tPmxlYXNlX2ZpbGUgPSBvcHRfc3RyaW5nX2FsbG9jKGFyZyk7CisgICAgICBicmVhazsKKyAgICAgIAorICAgICAgLyogU29ycnkgYWJvdXQgdGhlIGdyb3NzIHByZS1wcm9jZXNzb3IgYWJ1c2UgKi8KKyAgICBjYXNlICc2JzogICAgICAgICAgICAgLyogLS1kaGNwLXNjcmlwdCAqLworICAgIGNhc2UgTE9QVF9MVUFTQ1JJUFQ6ICAvKiAtLWRoY3AtbHVhc2NyaXB0ICovCisjICBpZiBkZWZpbmVkKE5PX0ZPUkspCisgICAgICByZXRfZXJyKF8oImNhbm5vdCBydW4gc2NyaXB0cyB1bmRlciB1Q2xpbnV4IikpOworIyAgZWxpZiAhZGVmaW5lZChIQVZFX1NDUklQVCkKKyAgICAgIHJldF9lcnIoXygicmVjb21waWxlIHdpdGggSEFWRV9TQ1JJUFQgZGVmaW5lZCB0byBlbmFibGUgbGVhc2UtY2hhbmdlIHNjcmlwdHMiKSk7CisjICBlbHNlCisgICAgICBpZiAob3B0aW9uID09IExPUFRfTFVBU0NSSVBUKQorIyAgICBpZiAhZGVmaW5lZChIQVZFX0xVQVNDUklQVCkKKwlyZXRfZXJyKF8oInJlY29tcGlsZSB3aXRoIEhBVkVfTFVBU0NSSVBUIGRlZmluZWQgdG8gZW5hYmxlIEx1YSBzY3JpcHRzIikpOworIyAgICBlbHNlCisgICAgICAgIGRhZW1vbi0+bHVhc2NyaXB0ID0gb3B0X3N0cmluZ19hbGxvYyhhcmcpOworIyAgICBlbmRpZgorICAgICAgZWxzZQorICAgICAgICBkYWVtb24tPmxlYXNlX2NoYW5nZV9jb21tYW5kID0gb3B0X3N0cmluZ19hbGxvYyhhcmcpOworIyAgZW5kaWYKKyAgICAgIGJyZWFrOworI2VuZGlmIC8qIEhBVkVfREhDUCAqLworCisgICAgY2FzZSBMT1BUX0RIQ1BfSE9TVDogICAgIC8qIC0tZGhjcC1ob3N0c2ZpbGUgKi8KKyAgICBjYXNlIExPUFRfREhDUF9PUFRTOiAgICAgLyogLS1kaGNwLW9wdHNmaWxlICovCisgICAgY2FzZSBMT1BUX0RIQ1BfSU5PVElGWTogIC8qIC0tZGhjcC1ob3N0c2RpciAqLworICAgIGNhc2UgTE9QVF9ESE9QVF9JTk9USUZZOiAvKiAtLWRoY3Atb3B0c2RpciAqLworICAgIGNhc2UgTE9QVF9IT1NUX0lOT1RJRlk6ICAvKiAtLWhvc3RzZGlyICovCisgICAgY2FzZSAnSCc6ICAgICAgICAgICAgICAgIC8qIC0tYWRkbi1ob3N0cyAqLworICAgICAgeworCXN0cnVjdCBob3N0c2ZpbGUgKm5ldyA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBob3N0c2ZpbGUpKTsKKwlzdGF0aWMgdW5zaWduZWQgaW50IGhvc3RzX2luZGV4ID0gU1JDX0FIOworCW5ldy0+Zm5hbWUgPSBvcHRfc3RyaW5nX2FsbG9jKGFyZyk7CisJbmV3LT5pbmRleCA9IGhvc3RzX2luZGV4Kys7CisJbmV3LT5mbGFncyA9IDA7CisJaWYgKG9wdGlvbiA9PSAnSCcpCisJICB7CisJICAgIG5ldy0+bmV4dCA9IGRhZW1vbi0+YWRkbl9ob3N0czsKKwkgICAgZGFlbW9uLT5hZGRuX2hvc3RzID0gbmV3OworCSAgfQorCWVsc2UgaWYgKG9wdGlvbiA9PSBMT1BUX0RIQ1BfSE9TVCkKKwkgIHsKKwkgICAgbmV3LT5uZXh0ID0gZGFlbW9uLT5kaGNwX2hvc3RzX2ZpbGU7CisJICAgIGRhZW1vbi0+ZGhjcF9ob3N0c19maWxlID0gbmV3OworCSAgfQorCWVsc2UgaWYgKG9wdGlvbiA9PSBMT1BUX0RIQ1BfT1BUUykKKwkgIHsKKwkgICAgbmV3LT5uZXh0ID0gZGFlbW9uLT5kaGNwX29wdHNfZmlsZTsKKwkgICAgZGFlbW9uLT5kaGNwX29wdHNfZmlsZSA9IG5ldzsKKwkgIH0gCSAgCisJZWxzZSAKKwkgIHsKKwkgICAgbmV3LT5uZXh0ID0gZGFlbW9uLT5keW5hbWljX2RpcnM7CisJICAgIGRhZW1vbi0+ZHluYW1pY19kaXJzID0gbmV3OyAKKwkgICAgaWYgKG9wdGlvbiA9PSBMT1BUX0RIQ1BfSU5PVElGWSkKKwkgICAgICBuZXctPmZsYWdzIHw9IEFIX0RIQ1BfSFNUOworCSAgICBlbHNlIGlmIChvcHRpb24gPT0gTE9QVF9ESE9QVF9JTk9USUZZKQorCSAgICAgIG5ldy0+ZmxhZ3MgfD0gQUhfREhDUF9PUFQ7CisJICAgIGVsc2UgaWYgKG9wdGlvbiA9PSBMT1BUX0hPU1RfSU5PVElGWSkKKwkgICAgICBuZXctPmZsYWdzIHw9IEFIX0hPU1RTOworCSAgfQorCQorCWJyZWFrOworICAgICAgfQorICAgICAgCisKKyNpZmRlZiBIQVZFX0FVVEgKKyAgICBjYXNlIExPUFRfQVVUSFNFUlY6IC8qIC0tYXV0aC1zZXJ2ZXIgKi8KKyAgICAgIGlmICghKGNvbW1hID0gc3BsaXQoYXJnKSkpCisJcmV0X2VycihnZW5fZXJyKTsKKyAgICAgIAorICAgICAgZGFlbW9uLT5hdXRoc2VydmVyID0gb3B0X3N0cmluZ19hbGxvYyhhcmcpOworICAgICAgYXJnID0gY29tbWE7CisgICAgICBkbyB7CisJc3RydWN0IGluYW1lICpuZXcgPSBvcHRfbWFsbG9jKHNpemVvZihzdHJ1Y3QgaW5hbWUpKTsKKwljb21tYSA9IHNwbGl0KGFyZyk7CisJbmV3LT5uYW1lID0gTlVMTDsKKwl1bmhpZGVfbWV0YXMoYXJnKTsKKwlpZiAoaW5ldF9wdG9uKEFGX0lORVQsIGFyZywgJm5ldy0+YWRkci5pbi5zaW5fYWRkcikgPiAwKQorCSAgbmV3LT5hZGRyLnNhLnNhX2ZhbWlseSA9IEFGX0lORVQ7CisjaWZkZWYgSEFWRV9JUFY2CisJZWxzZSBpZiAoaW5ldF9wdG9uKEFGX0lORVQ2LCBhcmcsICZuZXctPmFkZHIuaW42LnNpbjZfYWRkcikgPiAwKQorCSAgbmV3LT5hZGRyLnNhLnNhX2ZhbWlseSA9IEFGX0lORVQ2OworI2VuZGlmCisJZWxzZQorCSAgeworCSAgICBjaGFyICpmYW0gPSBzcGxpdF9jaHIoYXJnLCAnLycpOworCSAgICBuZXctPm5hbWUgPSBvcHRfc3RyaW5nX2FsbG9jKGFyZyk7CisJICAgIG5ldy0+YWRkci5zYS5zYV9mYW1pbHkgPSAwOworCSAgICBpZiAoZmFtKQorCSAgICAgIHsKKwkJaWYgKHN0cmNtcChmYW0sICI0IikgPT0gMCkKKwkJICBuZXctPmFkZHIuc2Euc2FfZmFtaWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBIQVZFX0lQVjYKKwkJZWxzZSBpZiAoc3RyY21wKGZhbSwgIjYiKSA9PSAwKQorCQkgIG5ldy0+YWRkci5zYS5zYV9mYW1pbHkgPSBBRl9JTkVUNjsKKyNlbmRpZgorCQllbHNlCisJCSAgcmV0X2VycihnZW5fZXJyKTsKKwkgICAgICB9IAorCSAgfQorCW5ldy0+bmV4dCA9IGRhZW1vbi0+YXV0aGludGVyZmFjZTsKKwlkYWVtb24tPmF1dGhpbnRlcmZhY2UgPSBuZXc7CisJCisJYXJnID0gY29tbWE7CisgICAgICB9IHdoaWxlIChhcmcpOworICAgICAgICAgICAgCisgICAgICBicmVhazsKKworICAgIGNhc2UgTE9QVF9BVVRIU0ZTOiAvKiAtLWF1dGgtc2VjLXNlcnZlcnMgKi8KKyAgICAgIHsKKwlzdHJ1Y3QgbmFtZV9saXN0ICpuZXc7CisKKwlkbyB7CisJICBjb21tYSA9IHNwbGl0KGFyZyk7CisJICBuZXcgPSBvcHRfbWFsbG9jKHNpemVvZihzdHJ1Y3QgbmFtZV9saXN0KSk7CisJICBuZXctPm5hbWUgPSBvcHRfc3RyaW5nX2FsbG9jKGFyZyk7CisJICBuZXctPm5leHQgPSBkYWVtb24tPnNlY29uZGFyeV9mb3J3YXJkX3NlcnZlcjsKKwkgIGRhZW1vbi0+c2Vjb25kYXJ5X2ZvcndhcmRfc2VydmVyID0gbmV3OworCSAgYXJnID0gY29tbWE7CisJfSB3aGlsZSAoYXJnKTsKKwlicmVhazsKKyAgICAgIH0KKwkKKyAgICBjYXNlIExPUFRfQVVUSFpPTkU6IC8qIC0tYXV0aC16b25lICovCisgICAgICB7CisJc3RydWN0IGF1dGhfem9uZSAqbmV3OworCQorCWNvbW1hID0gc3BsaXQoYXJnKTsKKwkJCisJbmV3ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IGF1dGhfem9uZSkpOworCW5ldy0+ZG9tYWluID0gb3B0X3N0cmluZ19hbGxvYyhhcmcpOworCW5ldy0+c3VibmV0ID0gTlVMTDsKKwluZXctPmV4Y2x1ZGUgPSBOVUxMOworCW5ldy0+aW50ZXJmYWNlX25hbWVzID0gTlVMTDsKKwluZXctPm5leHQgPSBkYWVtb24tPmF1dGhfem9uZXM7CisJZGFlbW9uLT5hdXRoX3pvbmVzID0gbmV3OworCisJd2hpbGUgKChhcmcgPSBjb21tYSkpCisJICB7CisJICAgIGludCBwcmVmaXhsZW4gPSAwOworCSAgICBpbnQgaXNfZXhjbHVkZSA9IDA7CisJICAgIGNoYXIgKnByZWZpeDsKKwkgICAgc3RydWN0IGFkZHJsaXN0ICpzdWJuZXQgPSAgTlVMTDsKKwkgICAgc3RydWN0IGFsbF9hZGRyIGFkZHI7CisKKwkgICAgY29tbWEgPSBzcGxpdChhcmcpOworCSAgICBwcmVmaXggPSBzcGxpdF9jaHIoYXJnLCAnLycpOworCSAgICAKKwkgICAgaWYgKHByZWZpeCAmJiAhYXRvaV9jaGVjayhwcmVmaXgsICZwcmVmaXhsZW4pKQorCSAgICAgIHJldF9lcnIoZ2VuX2Vycik7CisJICAgIAorCSAgICBpZiAoc3Ryc3RyKGFyZywgImV4Y2x1ZGU6IikgPT0gYXJnKQorCSAgICAgIHsKKwkJICAgIGlzX2V4Y2x1ZGUgPSAxOworCQkgICAgYXJnID0gYXJnKzg7CisJICAgICAgfQorCisJICAgIGlmIChpbmV0X3B0b24oQUZfSU5FVCwgYXJnLCAmYWRkci5hZGRyLmFkZHI0KSkKKwkgICAgICB7CisJCXN1Ym5ldCA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBhZGRybGlzdCkpOworCQlzdWJuZXQtPnByZWZpeGxlbiA9IChwcmVmaXhsZW4gPT0gMCkgPyAyNCA6IHByZWZpeGxlbjsKKwkJc3VibmV0LT5mbGFncyA9IEFERFJMSVNUX0xJVEVSQUw7CisJICAgICAgfQorI2lmZGVmIEhBVkVfSVBWNgorCSAgICBlbHNlIGlmIChpbmV0X3B0b24oQUZfSU5FVDYsIGFyZywgJmFkZHIuYWRkci5hZGRyNikpCisJICAgICAgeworCQlzdWJuZXQgPSBvcHRfbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWRkcmxpc3QpKTsKKwkJc3VibmV0LT5wcmVmaXhsZW4gPSAocHJlZml4bGVuID09IDApID8gNjQgOiBwcmVmaXhsZW47CisJCXN1Ym5ldC0+ZmxhZ3MgPSBBRERSTElTVF9MSVRFUkFMIHwgQUREUkxJU1RfSVBWNjsKKwkgICAgICB9CisjZW5kaWYKKwkgICAgZWxzZSAKKwkgICAgICB7CisJCXN0cnVjdCBhdXRoX25hbWVfbGlzdCAqbmFtZSA9ICBvcHRfbWFsbG9jKHNpemVvZihzdHJ1Y3QgYXV0aF9uYW1lX2xpc3QpKTsKKwkJbmFtZS0+bmFtZSA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKTsKKwkJbmFtZS0+ZmxhZ3MgPSBBVVRINCB8IEFVVEg2OworCQluYW1lLT5uZXh0ID0gbmV3LT5pbnRlcmZhY2VfbmFtZXM7CisJCW5ldy0+aW50ZXJmYWNlX25hbWVzID0gbmFtZTsKKwkJaWYgKHByZWZpeCkKKwkJICB7CisJCSAgICBpZiAocHJlZml4bGVuID09IDQpCisJCSAgICAgIG5hbWUtPmZsYWdzICY9IH5BVVRINjsKKyNpZmRlZiBIQVZFX0lQVjYKKwkJICAgIGVsc2UgaWYgKHByZWZpeGxlbiA9PSA2KQorCQkgICAgICBuYW1lLT5mbGFncyAmPSB+QVVUSDQ7CisjZW5kaWYKKwkJICAgIGVsc2UKKwkJICAgICAgcmV0X2VycihnZW5fZXJyKTsKKwkJICB9CisJICAgICAgfQorCSAgICAKKwkgICAgaWYgKHN1Ym5ldCkKKwkgICAgICB7CisJCXN1Ym5ldC0+YWRkciA9IGFkZHI7CisKKwkJaWYgKGlzX2V4Y2x1ZGUpCisJCSAgeworCQkgICAgc3VibmV0LT5uZXh0ID0gbmV3LT5leGNsdWRlOworCQkgICAgbmV3LT5leGNsdWRlID0gc3VibmV0OworCQkgIH0KKwkJZWxzZQorCQkgIHsKKwkJICAgIHN1Ym5ldC0+bmV4dCA9IG5ldy0+c3VibmV0OworCQkgICAgbmV3LT5zdWJuZXQgPSBzdWJuZXQ7CisJCSAgfQorCSAgICAgIH0KKwkgIH0KKwlicmVhazsKKyAgICAgIH0KKyAgICAgIAorICAgIGNhc2UgIExPUFRfQVVUSFNPQTogLyogLS1hdXRoLXNvYSAqLworICAgICAgY29tbWEgPSBzcGxpdChhcmcpOworICAgICAgZGFlbW9uLT5zb2Ffc24gPSAodTMyKWF0b2koYXJnKTsKKyAgICAgIGlmIChjb21tYSkKKwl7CisJICBjaGFyICpjcDsKKwkgIGFyZyA9IGNvbW1hOworCSAgY29tbWEgPSBzcGxpdChhcmcpOworCSAgZGFlbW9uLT5ob3N0bWFzdGVyID0gb3B0X3N0cmluZ19hbGxvYyhhcmcpOworCSAgZm9yIChjcCA9IGRhZW1vbi0+aG9zdG1hc3RlcjsgKmNwOyBjcCsrKQorCSAgICBpZiAoKmNwID09ICdAJykKKwkgICAgICAqY3AgPSAnLic7CisKKwkgIGlmIChjb21tYSkKKwkgICAgeworCSAgICAgIGFyZyA9IGNvbW1hOworCSAgICAgIGNvbW1hID0gc3BsaXQoYXJnKTsgCisJICAgICAgZGFlbW9uLT5zb2FfcmVmcmVzaCA9ICh1MzIpYXRvaShhcmcpOworCSAgICAgIGlmIChjb21tYSkKKwkJeworCQkgIGFyZyA9IGNvbW1hOworCQkgIGNvbW1hID0gc3BsaXQoYXJnKTsgCisJCSAgZGFlbW9uLT5zb2FfcmV0cnkgPSAodTMyKWF0b2koYXJnKTsKKwkJICBpZiAoY29tbWEpCisJCSAgICBkYWVtb24tPnNvYV9leHBpcnkgPSAodTMyKWF0b2koY29tbWEpOworCQl9CisJICAgIH0KKwl9CisKKyAgICAgIGJyZWFrOworI2VuZGlmCisKKyAgICBjYXNlICdzJzogICAgICAgICAvKiAtLWRvbWFpbiAqLworICAgIGNhc2UgTE9QVF9TWU5USDogIC8qIC0tc3ludGgtZG9tYWluICovCisgICAgICBpZiAoc3RyY21wIChhcmcsICIjIikgPT0gMCkKKwlzZXRfb3B0aW9uX2Jvb2woT1BUX1JFU09MVl9ET01BSU4pOworICAgICAgZWxzZQorCXsKKwkgIGNoYXIgKmQ7CisJICBjb21tYSA9IHNwbGl0KGFyZyk7CisJICBpZiAoIShkID0gY2Fub25pY2FsaXNlX29wdChhcmcpKSkKKwkgICAgcmV0X2VycihnZW5fZXJyKTsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGlmIChjb21tYSkKKwkJeworCQkgIHN0cnVjdCBjb25kX2RvbWFpbiAqbmV3ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IGNvbmRfZG9tYWluKSk7CisJCSAgY2hhciAqbmV0cGFydDsKKwkJICAKKwkJICBuZXctPnByZWZpeCA9IE5VTEw7CisKKwkJICB1bmhpZGVfbWV0YXMoY29tbWEpOworCQkgIGlmICgobmV0cGFydCA9IHNwbGl0X2Nocihjb21tYSwgJy8nKSkpCisJCSAgICB7CisJCSAgICAgIGludCBtc2l6ZTsKKworCQkgICAgICBhcmcgPSBzcGxpdChuZXRwYXJ0KTsKKwkJICAgICAgaWYgKCFhdG9pX2NoZWNrKG5ldHBhcnQsICZtc2l6ZSkpCisJCQlyZXRfZXJyKGdlbl9lcnIpOworCQkgICAgICBlbHNlIGlmIChpbmV0X3B0b24oQUZfSU5FVCwgY29tbWEsICZuZXctPnN0YXJ0KSkKKwkJCXsKKwkJCSAgaW50IG1hc2sgPSAoMSA8PCAoMzIgLSBtc2l6ZSkpIC0gMTsKKwkJCSAgbmV3LT5pczYgPSAwOyAJCQkgIAorCQkJICBuZXctPnN0YXJ0LnNfYWRkciA9IG50b2hsKGh0b25sKG5ldy0+c3RhcnQuc19hZGRyKSAmIH5tYXNrKTsKKwkJCSAgbmV3LT5lbmQuc19hZGRyID0gbmV3LT5zdGFydC5zX2FkZHIgfCBodG9ubChtYXNrKTsKKwkJCSAgaWYgKGFyZykKKwkJCSAgICB7CisJCQkgICAgICBpZiAob3B0aW9uICE9ICdzJykKKwkJCQl7CisJCQkJICBpZiAoIShuZXctPnByZWZpeCA9IGNhbm9uaWNhbGlzZV9vcHQoYXJnKSkgfHwKKwkJCQkgICAgICBzdHJsZW4obmV3LT5wcmVmaXgpID4gTUFYTEFCRUwgLSBJTkVUX0FERFJTVFJMRU4pCisJCQkJICAgIHJldF9lcnIoXygiYmFkIHByZWZpeCIpKTsKKwkJCQl9CisJCQkgICAgICBlbHNlIGlmIChzdHJjbXAoYXJnLCAibG9jYWwiKSAhPSAwIHx8CisJCQkJICAgICAgIChtc2l6ZSAhPSA4ICYmIG1zaXplICE9IDE2ICYmIG1zaXplICE9IDI0KSkKKwkJCQlyZXRfZXJyKGdlbl9lcnIpOworCQkJICAgICAgZWxzZQorCQkJCXsKKwkJCQkgICAvKiBnZW5lcmF0ZSB0aGUgZXF1aXZhbGVudCBvZgorCQkJCSAgICAgIGxvY2FsPS94eHgueXl5Lnp6ei5pbi1hZGRyLmFycGEvICovCisJCQkJICBzdHJ1Y3Qgc2VydmVyICpzZXJ2ID0gYWRkX3JldjQobmV3LT5zdGFydCwgbXNpemUpOworCQkJCSAgaWYgKCFzZXJ2KQorCQkJCSAgICByZXRfZXJyKF8oImJhZCBwcmVmaXgiKSk7CisKKwkJCQkgIHNlcnYtPmZsYWdzIHw9IFNFUlZfTk9fQUREUjsKKworCQkJCSAgLyogbG9jYWw9Lzxkb21haW4+LyAqLworCQkJCSAgc2VydiA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBzZXJ2ZXIpKTsKKwkJCQkgIG1lbXNldChzZXJ2LCAwLCBzaXplb2Yoc3RydWN0IHNlcnZlcikpOworCQkJCSAgc2Vydi0+ZG9tYWluID0gZDsKKwkJCQkgIHNlcnYtPmZsYWdzID0gU0VSVl9IQVNfRE9NQUlOIHwgU0VSVl9OT19BRERSOworCQkJCSAgc2Vydi0+bmV4dCA9IGRhZW1vbi0+c2VydmVyczsKKwkJCQkgIGRhZW1vbi0+c2VydmVycyA9IHNlcnY7CisJCQkJfQorCQkJICAgIH0KKwkJCX0KKyNpZmRlZiBIQVZFX0lQVjYKKwkJICAgICAgZWxzZSBpZiAoaW5ldF9wdG9uKEFGX0lORVQ2LCBjb21tYSwgJm5ldy0+c3RhcnQ2KSkKKwkJCXsKKwkJCSAgdTY0IG1hc2sgPSAoMUxMVSA8PCAoMTI4IC0gbXNpemUpKSAtIDFMTFU7CisJCQkgIHU2NCBhZGRycGFydCA9IGFkZHI2cGFydCgmbmV3LT5zdGFydDYpOworCQkJICBuZXctPmlzNiA9IDE7CisJCQkgIAorCQkJICAvKiBwcmVmaXg9PTY0IG92ZXJmbG93cyB0aGUgbWFzayBjYWxjdWxhdGlvbiBhYm92ZSAqLworCQkJICBpZiAobXNpemUgPT0gNjQpCisJCQkgICAgbWFzayA9ICh1NjQpLTFMTDsKKwkJCSAgCisJCQkgIG5ldy0+ZW5kNiA9IG5ldy0+c3RhcnQ2OworCQkJICBzZXRhZGRyNnBhcnQoJm5ldy0+c3RhcnQ2LCBhZGRycGFydCAmIH5tYXNrKTsKKwkJCSAgc2V0YWRkcjZwYXJ0KCZuZXctPmVuZDYsIGFkZHJwYXJ0IHwgbWFzayk7CisJCQkgIAorCQkJICBpZiAobXNpemUgPCA2NCkKKwkJCSAgICByZXRfZXJyKGdlbl9lcnIpOworCQkJICBlbHNlIGlmIChhcmcpCisJCQkgICAgeworCQkJICAgICAgaWYgKG9wdGlvbiAhPSAncycpCisJCQkJeworCQkJCSAgaWYgKCEobmV3LT5wcmVmaXggPSBjYW5vbmljYWxpc2Vfb3B0KGFyZykpIHx8CisJCQkJICAgICAgc3RybGVuKG5ldy0+cHJlZml4KSA+IE1BWExBQkVMIC0gSU5FVDZfQUREUlNUUkxFTikKKwkJCQkgICAgcmV0X2VycihfKCJiYWQgcHJlZml4IikpOworCQkJCX0JCisJCQkgICAgICBlbHNlIGlmIChzdHJjbXAoYXJnLCAibG9jYWwiKSAhPSAwIHx8ICgobXNpemUgJiA0KSAhPSAwKSkKKwkJCQlyZXRfZXJyKGdlbl9lcnIpOworCQkJICAgICAgZWxzZSAKKwkJCQl7CisJCQkJICAvKiBnZW5lcmF0ZSB0aGUgZXF1aXZhbGVudCBvZgorCQkJCSAgICAgbG9jYWw9L3h4eC55eXkuenp6LmlwNi5hcnBhLyAqLworCQkJCSAgc3RydWN0IHNlcnZlciAqc2VydiA9IGFkZF9yZXY2KCZuZXctPnN0YXJ0NiwgbXNpemUpOworCQkJCSAgc2Vydi0+ZmxhZ3MgfD0gU0VSVl9OT19BRERSOworCQkJCSAgCisJCQkJICAvKiBsb2NhbD0vPGRvbWFpbj4vICovCisJCQkJICBzZXJ2ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IHNlcnZlcikpOworCQkJCSAgbWVtc2V0KHNlcnYsIDAsIHNpemVvZihzdHJ1Y3Qgc2VydmVyKSk7CisJCQkJICBzZXJ2LT5kb21haW4gPSBkOworCQkJCSAgc2Vydi0+ZmxhZ3MgPSBTRVJWX0hBU19ET01BSU4gfCBTRVJWX05PX0FERFI7CisJCQkJICBzZXJ2LT5uZXh0ID0gZGFlbW9uLT5zZXJ2ZXJzOworCQkJCSAgZGFlbW9uLT5zZXJ2ZXJzID0gc2VydjsKKwkJCQl9CisJCQkgICAgfQorCQkJfQorI2VuZGlmCisJCSAgICAgIGVsc2UKKwkJCXJldF9lcnIoZ2VuX2Vycik7CisJCSAgICB9CisJCSAgZWxzZQorCQkgICAgeworCQkgICAgICBjaGFyICpwcmVmc3RyOworCQkgICAgICBhcmcgPSBzcGxpdChjb21tYSk7CisJCSAgICAgIHByZWZzdHIgPSBzcGxpdChhcmcpOworCisJCSAgICAgIGlmIChpbmV0X3B0b24oQUZfSU5FVCwgY29tbWEsICZuZXctPnN0YXJ0KSkKKwkJCXsKKwkJCSAgbmV3LT5pczYgPSAwOworCQkJICBpZiAoIWFyZykKKwkJCSAgICBuZXctPmVuZC5zX2FkZHIgPSBuZXctPnN0YXJ0LnNfYWRkcjsKKwkJCSAgZWxzZSBpZiAoIWluZXRfcHRvbihBRl9JTkVULCBhcmcsICZuZXctPmVuZCkpCisJCQkgICAgcmV0X2VycihnZW5fZXJyKTsKKwkJCX0KKyNpZmRlZiBIQVZFX0lQVjYKKwkJICAgICAgZWxzZSBpZiAoaW5ldF9wdG9uKEFGX0lORVQ2LCBjb21tYSwgJm5ldy0+c3RhcnQ2KSkKKwkJCXsKKwkJCSAgbmV3LT5pczYgPSAxOworCQkJICBpZiAoIWFyZykKKwkJCSAgICBtZW1jcHkoJm5ldy0+ZW5kNiwgJm5ldy0+c3RhcnQ2LCBJTjZBRERSU1opOworCQkJICBlbHNlIGlmICghaW5ldF9wdG9uKEFGX0lORVQ2LCBhcmcsICZuZXctPmVuZDYpKQorCQkJICAgIHJldF9lcnIoZ2VuX2Vycik7CisJCQl9CisjZW5kaWYKKwkJICAgICAgZWxzZSAKKwkJCXJldF9lcnIoZ2VuX2Vycik7CisKKwkJICAgICAgaWYgKG9wdGlvbiAhPSAncycgJiYgcHJlZnN0cikKKwkJCXsKKwkJCSAgaWYgKCEobmV3LT5wcmVmaXggPSBjYW5vbmljYWxpc2Vfb3B0KHByZWZzdHIpKSB8fAorCQkJICAgICAgc3RybGVuKG5ldy0+cHJlZml4KSA+IE1BWExBQkVMIC0gSU5FVF9BRERSU1RSTEVOKQorCQkJICAgIHJldF9lcnIoXygiYmFkIHByZWZpeCIpKTsKKwkJCX0KKwkJICAgIH0KKworCQkgIG5ldy0+ZG9tYWluID0gZDsKKwkJICBpZiAob3B0aW9uICA9PSAncycpCisJCSAgICB7CisJCSAgICAgIG5ldy0+bmV4dCA9IGRhZW1vbi0+Y29uZF9kb21haW47CisJCSAgICAgIGRhZW1vbi0+Y29uZF9kb21haW4gPSBuZXc7CisJCSAgICB9CisJCSAgZWxzZQorCQkgICAgeworCQkgICAgICBuZXctPm5leHQgPSBkYWVtb24tPnN5bnRoX2RvbWFpbnM7CisJCSAgICAgIGRhZW1vbi0+c3ludGhfZG9tYWlucyA9IG5ldzsKKwkJICAgIH0KKwkJfQorCSAgICAgIGVsc2UgaWYgKG9wdGlvbiA9PSAncycpCisJCWRhZW1vbi0+ZG9tYWluX3N1ZmZpeCA9IGQ7CisJICAgICAgZWxzZSAKKwkJcmV0X2VycihnZW5fZXJyKTsKKwkgICAgfQorCX0KKyAgICAgIGJyZWFrOworICAgICAgCisgICAgY2FzZSBMT1BUX0NQRV9JRDogLyogLS1hZGQtZG5zLWNsaWVudCAqLworICAgICAgaWYgKGFyZykKKwlkYWVtb24tPmRuc19jbGllbnRfaWQgPSBvcHRfc3RyaW5nX2FsbG9jKGFyZyk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgTE9QVF9BRERfTUFDOiAvKiAtLWFkZC1tYWMgKi8KKyAgICAgIGlmICghYXJnKQorCXNldF9vcHRpb25fYm9vbChPUFRfQUREX01BQyk7CisgICAgICBlbHNlCisJeworCSAgdW5oaWRlX21ldGFzKGFyZyk7CisJICBpZiAoc3RyY21wKGFyZywgImJhc2U2NCIpID09IDApCisJICAgIHNldF9vcHRpb25fYm9vbChPUFRfTUFDX0I2NCk7CisJICBlbHNlIGlmIChzdHJjbXAoYXJnLCAidGV4dCIpID09IDApCisJICAgIHNldF9vcHRpb25fYm9vbChPUFRfTUFDX0hFWCk7CisJICBlbHNlCisJICAgIHJldF9lcnIoZ2VuX2Vycik7CisJfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlICd1JzogIC8qIC0tdXNlciAqLworICAgICAgZGFlbW9uLT51c2VybmFtZSA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKTsKKyAgICAgIGJyZWFrOworICAgICAgCisgICAgY2FzZSAnZyc6ICAvKiAtLWdyb3VwICovCisgICAgICBkYWVtb24tPmdyb3VwbmFtZSA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKTsKKyAgICAgIGRhZW1vbi0+Z3JvdXBfc2V0ID0gMTsKKyAgICAgIGJyZWFrOworCisjaWZkZWYgSEFWRV9ESENQCisgICAgY2FzZSBMT1BUX1NDUklQVFVTUjogLyogLS1zY3JpcHR1c2VyICovCisgICAgICBkYWVtb24tPnNjcmlwdHVzZXIgPSBvcHRfc3RyaW5nX2FsbG9jKGFyZyk7CisgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgCisgICAgY2FzZSAnaSc6ICAvKiAtLWludGVyZmFjZSAqLworICAgICAgZG8geworCXN0cnVjdCBpbmFtZSAqbmV3ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IGluYW1lKSk7CisJY29tbWEgPSBzcGxpdChhcmcpOworCW5ldy0+bmV4dCA9IGRhZW1vbi0+aWZfbmFtZXM7CisJZGFlbW9uLT5pZl9uYW1lcyA9IG5ldzsKKwkvKiBuZXctPm5hbWUgbWF5IGJlIE5VTEwgaWYgc29tZW9uZSBkb2VzCisJICAgImludGVyZmFjZT0iIHRvIGRpc2FibGUgYWxsIGludGVyZmFjZXMgZXhjZXB0IGxvb3AuICovCisJbmV3LT5uYW1lID0gb3B0X3N0cmluZ19hbGxvYyhhcmcpOworCW5ldy0+dXNlZCA9IDA7CisJYXJnID0gY29tbWE7CisgICAgICB9IHdoaWxlIChhcmcpOworICAgICAgYnJlYWs7CisgICAgICAKKyAgICBjYXNlIExPUFRfVEZUUDogLyogLS1lbmFibGUtdGZ0cCAqLworICAgICAgc2V0X29wdGlvbl9ib29sKE9QVF9URlRQKTsKKyAgICAgIGlmICghYXJnKQorCWJyZWFrOworICAgICAgLyogZmFsbCB0aHJvdWdoICovCisKKyAgICBjYXNlICdJJzogIC8qIC0tZXhjZXB0LWludGVyZmFjZSAqLworICAgIGNhc2UgJzInOiAgLyogLS1uby1kaGNwLWludGVyZmFjZSAqLworICAgICAgZG8geworCXN0cnVjdCBpbmFtZSAqbmV3ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IGluYW1lKSk7CisJY29tbWEgPSBzcGxpdChhcmcpOworCW5ldy0+bmFtZSA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKTsKKwlpZiAob3B0aW9uID09ICdJJykKKwkgIHsKKwkgICAgbmV3LT5uZXh0ID0gZGFlbW9uLT5pZl9leGNlcHQ7CisJICAgIGRhZW1vbi0+aWZfZXhjZXB0ID0gbmV3OworCSAgfQorCWVsc2UgaWYgKG9wdGlvbiA9PSBMT1BUX1RGVFApCisJICAgeworCSAgICBuZXctPm5leHQgPSBkYWVtb24tPnRmdHBfaW50ZXJmYWNlczsKKwkgICAgZGFlbW9uLT50ZnRwX2ludGVyZmFjZXMgPSBuZXc7CisJICB9CisJZWxzZQorCSAgeworCSAgICBuZXctPm5leHQgPSBkYWVtb24tPmRoY3BfZXhjZXB0OworCSAgICBkYWVtb24tPmRoY3BfZXhjZXB0ID0gbmV3OworCSAgfQorCWFyZyA9IGNvbW1hOworICAgICAgfSB3aGlsZSAoYXJnKTsKKyAgICAgIGJyZWFrOworICAgICAgCisgICAgY2FzZSAnQic6ICAvKiAtLWJvZ3VzLW54ZG9tYWluICovCisgICAgY2FzZSBMT1BUX0lHTk9SRV9BRERSOiAvKiAtLWlnbm9yZS1hZGRyZXNzICovCisgICAgIHsKKwlzdHJ1Y3QgaW5fYWRkciBhZGRyOworCXVuaGlkZV9tZXRhcyhhcmcpOworCWlmIChhcmcgJiYgKGluZXRfcHRvbihBRl9JTkVULCBhcmcsICZhZGRyKSA+IDApKQorCSAgeworCSAgICBzdHJ1Y3QgYm9ndXNfYWRkciAqYmFkZHIgPSBvcHRfbWFsbG9jKHNpemVvZihzdHJ1Y3QgYm9ndXNfYWRkcikpOworCSAgICBpZiAob3B0aW9uID09ICdCJykKKwkgICAgICB7CisJCWJhZGRyLT5uZXh0ID0gZGFlbW9uLT5ib2d1c19hZGRyOworCQlkYWVtb24tPmJvZ3VzX2FkZHIgPSBiYWRkcjsKKwkgICAgICB9CisJICAgIGVsc2UKKwkgICAgICB7CisJCWJhZGRyLT5uZXh0ID0gZGFlbW9uLT5pZ25vcmVfYWRkcjsKKwkJZGFlbW9uLT5pZ25vcmVfYWRkciA9IGJhZGRyOworCSAgICAgIH0KKwkgICAgYmFkZHItPmFkZHIgPSBhZGRyOworCSAgfQorCWVsc2UKKwkgIHJldF9lcnIoZ2VuX2Vycik7IC8qIGVycm9yICovCisJYnJlYWs7CQorICAgICAgfQorICAgICAgCisgICAgY2FzZSAnYSc6ICAvKiAtLWxpc3Rlbi1hZGRyZXNzICovCisgICAgY2FzZSBMT1BUX0FVVEhQRUVSOiAvKiAtLWF1dGgtcGVlciAqLworICAgICAgZG8geworCXN0cnVjdCBpbmFtZSAqbmV3ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IGluYW1lKSk7CisJY29tbWEgPSBzcGxpdChhcmcpOworCXVuaGlkZV9tZXRhcyhhcmcpOworCWlmIChhcmcgJiYgKGluZXRfcHRvbihBRl9JTkVULCBhcmcsICZuZXctPmFkZHIuaW4uc2luX2FkZHIpID4gMCkpCisJICB7CisJICAgIG5ldy0+YWRkci5zYS5zYV9mYW1pbHkgPSBBRl9JTkVUOworCSAgICBuZXctPmFkZHIuaW4uc2luX3BvcnQgPSAwOworI2lmZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisJICAgIG5ldy0+YWRkci5pbi5zaW5fbGVuID0gc2l6ZW9mKG5ldy0+YWRkci5pbik7CisjZW5kaWYKKwkgIH0KKyNpZmRlZiBIQVZFX0lQVjYKKwllbHNlIGlmIChhcmcgJiYgaW5ldF9wdG9uKEFGX0lORVQ2LCBhcmcsICZuZXctPmFkZHIuaW42LnNpbjZfYWRkcikgPiAwKQorCSAgeworCSAgICBuZXctPmFkZHIuc2Euc2FfZmFtaWx5ID0gQUZfSU5FVDY7CisJICAgIG5ldy0+YWRkci5pbjYuc2luNl9mbG93aW5mbyA9IDA7CisJICAgIG5ldy0+YWRkci5pbjYuc2luNl9zY29wZV9pZCA9IDA7CisJICAgIG5ldy0+YWRkci5pbjYuc2luNl9wb3J0ID0gMDsKKyNpZmRlZiBIQVZFX1NPQ0tBRERSX1NBX0xFTgorCSAgICBuZXctPmFkZHIuaW42LnNpbjZfbGVuID0gc2l6ZW9mKG5ldy0+YWRkci5pbjYpOworI2VuZGlmCisJICB9CisjZW5kaWYKKwllbHNlCisJICByZXRfZXJyKGdlbl9lcnIpOworCisJbmV3LT51c2VkID0gMDsKKwlpZiAob3B0aW9uID09ICdhJykKKwkgIHsKKwkgICAgbmV3LT5uZXh0ID0gZGFlbW9uLT5pZl9hZGRyczsKKwkgICAgZGFlbW9uLT5pZl9hZGRycyA9IG5ldzsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIG5ldy0+bmV4dCA9IGRhZW1vbi0+YXV0aF9wZWVyczsKKwkgICAgZGFlbW9uLT5hdXRoX3BlZXJzID0gbmV3OworCSAgfSAKKwlhcmcgPSBjb21tYTsKKyAgICAgIH0gd2hpbGUgKGFyZyk7CisgICAgICBicmVhazsKKyAgICAgIAorICAgIGNhc2UgJ1MnOiAgICAgICAgICAgIC8qICAtLXNlcnZlciAqLworICAgIGNhc2UgTE9QVF9MT0NBTDogICAgIC8qICAtLWxvY2FsICovCisgICAgY2FzZSAnQSc6ICAgICAgICAgICAgLyogIC0tYWRkcmVzcyAqLworICAgIGNhc2UgTE9QVF9OT19SRUJJTkQ6IC8qICAtLXJlYmluZC1kb21haW4tb2sgKi8KKyAgICAgIHsKKwlzdHJ1Y3Qgc2VydmVyICpzZXJ2LCAqbmV3bGlzdCA9IE5VTEw7CisJCisJdW5oaWRlX21ldGFzKGFyZyk7CisJCisJaWYgKGFyZyAmJiAoKmFyZyA9PSAnLycgfHwgb3B0aW9uID09IExPUFRfTk9fUkVCSU5EKSkKKwkgIHsKKwkgICAgaW50IHJlYmluZCA9ICEoKmFyZyA9PSAnLycpOworCSAgICBjaGFyICplbmQgPSBOVUxMOworCSAgICBpZiAoIXJlYmluZCkKKwkgICAgICBhcmcrKzsKKwkgICAgd2hpbGUgKHJlYmluZCB8fCAoZW5kID0gc3BsaXRfY2hyKGFyZywgJy8nKSkpCisJICAgICAgeworCQljaGFyICpkb21haW4gPSBOVUxMOworCQkvKiBlbGlkZSBsZWFkaW5nIGRvdHMgLSB0aGV5IGFyZSBpbXBsaWVkIGluIHRoZSBzZWFyY2ggYWxnb3JpdGhtICovCisJCXdoaWxlICgqYXJnID09ICcuJykgYXJnKys7CisJCS8qICMgbWF0Y2hlcyBldmVyeXRoaW5nIGFuZCBiZWNvbWVzIGEgemVybyBsZW5ndGggZG9tYWluIHN0cmluZyAqLworCQlpZiAoc3RyY21wKGFyZywgIiMiKSA9PSAwKQorCQkgIGRvbWFpbiA9ICIiOworCQllbHNlIGlmIChzdHJsZW4gKGFyZykgIT0gMCAmJiAhKGRvbWFpbiA9IGNhbm9uaWNhbGlzZV9vcHQoYXJnKSkpCisJCSAgb3B0aW9uID0gJz8nOworCQlzZXJ2ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IHNlcnZlcikpOworCQltZW1zZXQoc2VydiwgMCwgc2l6ZW9mKHN0cnVjdCBzZXJ2ZXIpKTsKKwkJc2Vydi0+bmV4dCA9IG5ld2xpc3Q7CisJCW5ld2xpc3QgPSBzZXJ2OworCQlzZXJ2LT5kb21haW4gPSBkb21haW47CisJCXNlcnYtPmZsYWdzID0gZG9tYWluID8gU0VSVl9IQVNfRE9NQUlOIDogU0VSVl9GT1JfTk9ET1RTOworCQlhcmcgPSBlbmQ7CisJCWlmIChyZWJpbmQpCisJCSAgYnJlYWs7CisJICAgICAgfQorCSAgICBpZiAoIW5ld2xpc3QpCisJICAgICAgcmV0X2VycihnZW5fZXJyKTsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIG5ld2xpc3QgPSBvcHRfbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2VydmVyKSk7CisJICAgIG1lbXNldChuZXdsaXN0LCAwLCBzaXplb2Yoc3RydWN0IHNlcnZlcikpOworI2lmZGVmIEhBVkVfTE9PUAorCSAgICBuZXdsaXN0LT51aWQgPSByYW5kMzIoKTsKKyNlbmRpZgorCSAgfQorCQorCWlmIChzZXJ2ZXJzX29ubHkgJiYgb3B0aW9uID09ICdTJykKKwkgIG5ld2xpc3QtPmZsYWdzIHw9IFNFUlZfRlJPTV9GSUxFOworCQorCWlmIChvcHRpb24gPT0gJ0EnKQorCSAgeworCSAgICBuZXdsaXN0LT5mbGFncyB8PSBTRVJWX0xJVEVSQUxfQUREUkVTUzsKKwkgICAgaWYgKCEobmV3bGlzdC0+ZmxhZ3MgJiBTRVJWX1RZUEUpKQorCSAgICAgIHJldF9lcnIoZ2VuX2Vycik7CisJICB9CisJZWxzZSBpZiAob3B0aW9uID09IExPUFRfTk9fUkVCSU5EKQorCSAgbmV3bGlzdC0+ZmxhZ3MgfD0gU0VSVl9OT19SRUJJTkQ7CisJCisJaWYgKCFhcmcgfHwgISphcmcpCisJICB7CisJICAgIGlmICghKG5ld2xpc3QtPmZsYWdzICYgU0VSVl9OT19SRUJJTkQpKQorCSAgICAgIG5ld2xpc3QtPmZsYWdzIHw9IFNFUlZfTk9fQUREUjsgLyogbm8gc2VydmVyICovCisJICB9CisKKwllbHNlIGlmIChzdHJjbXAoYXJnLCAiIyIpID09IDApCisJICB7CisJICAgIG5ld2xpc3QtPmZsYWdzIHw9IFNFUlZfVVNFX1JFU09MVjsgLyogdHJlYXQgaW4gb3JkaW5hcnkgd2F5ICovCisJICAgIGlmIChuZXdsaXN0LT5mbGFncyAmIFNFUlZfTElURVJBTF9BRERSRVNTKQorCSAgICAgIHJldF9lcnIoZ2VuX2Vycik7CisJICB9CisJZWxzZQorCSAgeworCSAgICBjaGFyICplcnIgPSBwYXJzZV9zZXJ2ZXIoYXJnLCAmbmV3bGlzdC0+YWRkciwgJm5ld2xpc3QtPnNvdXJjZV9hZGRyLCBuZXdsaXN0LT5pbnRlcmZhY2UsICZuZXdsaXN0LT5mbGFncyk7CisJICAgIGlmIChlcnIpCisJICAgICAgcmV0X2VycihlcnIpOworCSAgfQorCQorCXNlcnYgPSBuZXdsaXN0OworCXdoaWxlIChzZXJ2LT5uZXh0KQorCSAgeworCSAgICBzZXJ2LT5uZXh0LT5mbGFncyA9IHNlcnYtPmZsYWdzOworCSAgICBzZXJ2LT5uZXh0LT5hZGRyID0gc2Vydi0+YWRkcjsKKwkgICAgc2Vydi0+bmV4dC0+c291cmNlX2FkZHIgPSBzZXJ2LT5zb3VyY2VfYWRkcjsKKwkgICAgc3RyY3B5KHNlcnYtPm5leHQtPmludGVyZmFjZSwgc2Vydi0+aW50ZXJmYWNlKTsKKwkgICAgc2VydiA9IHNlcnYtPm5leHQ7CisJICB9CisJc2Vydi0+bmV4dCA9IGRhZW1vbi0+c2VydmVyczsKKwlkYWVtb24tPnNlcnZlcnMgPSBuZXdsaXN0OworCWJyZWFrOworICAgICAgfQorCisgICAgY2FzZSBMT1BUX1JFVl9TRVJWOiAvKiAtLXJldi1zZXJ2ZXIgKi8KKyAgICAgIHsKKwljaGFyICpzdHJpbmc7CisJaW50IHNpemU7CisJc3RydWN0IHNlcnZlciAqc2VydjsKKwlzdHJ1Y3QgaW5fYWRkciBhZGRyNDsKKyNpZmRlZiBIQVZFX0lQVjYKKwlzdHJ1Y3QgaW42X2FkZHIgYWRkcjY7CisjZW5kaWYKKyAKKwl1bmhpZGVfbWV0YXMoYXJnKTsKKwlpZiAoIWFyZyB8fCAhKGNvbW1hPXNwbGl0KGFyZykpIHx8ICEoc3RyaW5nID0gc3BsaXRfY2hyKGFyZywgJy8nKSkgfHwgIWF0b2lfY2hlY2soc3RyaW5nLCAmc2l6ZSkpCisJICByZXRfZXJyKGdlbl9lcnIpOworCisJaWYgKGluZXRfcHRvbihBRl9JTkVULCBhcmcsICZhZGRyNCkpCisJICB7CisJICAgIHNlcnYgPSBhZGRfcmV2NChhZGRyNCwgc2l6ZSk7CisJICAgIGlmICghc2VydikKKwkgICAgICByZXRfZXJyKF8oImJhZCBwcmVmaXgiKSk7CisJICB9CisjaWZkZWYgSEFWRV9JUFY2CisJZWxzZSBpZiAoaW5ldF9wdG9uKEFGX0lORVQ2LCBhcmcsICZhZGRyNikpCisJICBzZXJ2ID0gYWRkX3JldjYoJmFkZHI2LCBzaXplKTsKKyNlbmRpZgorCWVsc2UKKwkgIHJldF9lcnIoZ2VuX2Vycik7CisgCisJc3RyaW5nID0gcGFyc2Vfc2VydmVyKGNvbW1hLCAmc2Vydi0+YWRkciwgJnNlcnYtPnNvdXJjZV9hZGRyLCBzZXJ2LT5pbnRlcmZhY2UsICZzZXJ2LT5mbGFncyk7CisJCisJaWYgKHN0cmluZykKKwkgIHJldF9lcnIoc3RyaW5nKTsKKwkKKwlpZiAoc2VydmVyc19vbmx5KQorCSAgc2Vydi0+ZmxhZ3MgfD0gU0VSVl9GUk9NX0ZJTEU7CisJCisJYnJlYWs7CisgICAgICB9CisKKyAgICBjYXNlIExPUFRfSVBTRVQ6IC8qIC0taXBzZXQgKi8KKyNpZm5kZWYgSEFWRV9JUFNFVAorICAgICAgcmV0X2VycihfKCJyZWNvbXBpbGUgd2l0aCBIQVZFX0lQU0VUIGRlZmluZWQgdG8gZW5hYmxlIGlwc2V0IGRpcmVjdGl2ZXMiKSk7CisgICAgICBicmVhazsKKyNlbHNlCisgICAgICB7CisJIHN0cnVjdCBpcHNldHMgaXBzZXRzX2hlYWQ7CisJIHN0cnVjdCBpcHNldHMgKmlwc2V0cyA9ICZpcHNldHNfaGVhZDsKKwkgaW50IHNpemU7CisJIGNoYXIgKmVuZDsKKwkgY2hhciAqKnNldHMsICoqc2V0c19wb3M7CisJIG1lbXNldChpcHNldHMsIDAsIHNpemVvZihzdHJ1Y3QgaXBzZXRzKSk7CisJIHVuaGlkZV9tZXRhcyhhcmcpOworCSBpZiAoYXJnICYmICphcmcgPT0gJy8nKSAKKwkgICB7CisJICAgICBhcmcrKzsKKwkgICAgIHdoaWxlICgoZW5kID0gc3BsaXRfY2hyKGFyZywgJy8nKSkpIAorCSAgICAgICB7CisJCSBjaGFyICpkb21haW4gPSBOVUxMOworCQkgLyogZWxpZGUgbGVhZGluZyBkb3RzIC0gdGhleSBhcmUgaW1wbGllZCBpbiB0aGUgc2VhcmNoIGFsZ29yaXRobSAqLworCQkgd2hpbGUgKCphcmcgPT0gJy4nKQorCQkgICBhcmcrKzsKKwkJIC8qICMgbWF0Y2hlcyBldmVyeXRoaW5nIGFuZCBiZWNvbWVzIGEgemVybyBsZW5ndGggZG9tYWluIHN0cmluZyAqLworCQkgaWYgKHN0cmNtcChhcmcsICIjIikgPT0gMCB8fCAhKmFyZykKKwkJICAgZG9tYWluID0gIiI7CisJCSBlbHNlIGlmIChzdHJsZW4oYXJnKSAhPSAwICYmICEoZG9tYWluID0gY2Fub25pY2FsaXNlX29wdChhcmcpKSkKKwkJICAgb3B0aW9uID0gJz8nOworCQkgaXBzZXRzLT5uZXh0ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IGlwc2V0cykpOworCQkgaXBzZXRzID0gaXBzZXRzLT5uZXh0OworCQkgbWVtc2V0KGlwc2V0cywgMCwgc2l6ZW9mKHN0cnVjdCBpcHNldHMpKTsKKwkJIGlwc2V0cy0+ZG9tYWluID0gZG9tYWluOworCQkgYXJnID0gZW5kOworCSAgICAgICB9CisJICAgfSAKKwkgZWxzZSAKKwkgICB7CisJICAgICBpcHNldHMtPm5leHQgPSBvcHRfbWFsbG9jKHNpemVvZihzdHJ1Y3QgaXBzZXRzKSk7CisJICAgICBpcHNldHMgPSBpcHNldHMtPm5leHQ7CisJICAgICBtZW1zZXQoaXBzZXRzLCAwLCBzaXplb2Yoc3RydWN0IGlwc2V0cykpOworCSAgICAgaXBzZXRzLT5kb21haW4gPSAiIjsKKwkgICB9CisJIGlmICghYXJnIHx8ICEqYXJnKQorCSAgIHsKKwkgICAgIG9wdGlvbiA9ICc/JzsKKwkgICAgIGJyZWFrOworCSAgIH0KKwkgc2l6ZSA9IDI7CisJIGZvciAoZW5kID0gYXJnOyAqZW5kOyArK2VuZCkgCisJICAgaWYgKCplbmQgPT0gJywnKQorCSAgICAgICArK3NpemU7CisgICAgIAorCSBzZXRzID0gc2V0c19wb3MgPSBvcHRfbWFsbG9jKHNpemVvZihjaGFyICopICogc2l6ZSk7CisJIAorCSBkbyB7CisJICAgZW5kID0gc3BsaXQoYXJnKTsKKwkgICAqc2V0c19wb3MrKyA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKTsKKwkgICBhcmcgPSBlbmQ7CisJIH0gd2hpbGUgKGVuZCk7CisJICpzZXRzX3BvcyA9IDA7CisJIGZvciAoaXBzZXRzID0gJmlwc2V0c19oZWFkOyBpcHNldHMtPm5leHQ7IGlwc2V0cyA9IGlwc2V0cy0+bmV4dCkKKwkgICBpcHNldHMtPm5leHQtPnNldHMgPSBzZXRzOworCSBpcHNldHMtPm5leHQgPSBkYWVtb24tPmlwc2V0czsKKwkgZGFlbW9uLT5pcHNldHMgPSBpcHNldHNfaGVhZC5uZXh0OworCSAKKwkgYnJlYWs7CisgICAgICB9CisjZW5kaWYKKyAgICAgIAorICAgIGNhc2UgJ2MnOiAgLyogLS1jYWNoZS1zaXplICovCisgICAgICB7CisJaW50IHNpemU7CisJCisJaWYgKCFhdG9pX2NoZWNrKGFyZywgJnNpemUpKQorCSAgcmV0X2VycihnZW5fZXJyKTsKKwllbHNlCisJICB7CisJICAgIC8qIHplcm8gaXMgT0ssIGFuZCBtZWFucyBubyBjYWNoaW5nLiAqLworCSAgICAKKwkgICAgaWYgKHNpemUgPCAwKQorCSAgICAgIHNpemUgPSAwOworCSAgICBlbHNlIGlmIChzaXplID4gMTAwMDApCisJICAgICAgc2l6ZSA9IDEwMDAwOworCSAgICAKKwkgICAgZGFlbW9uLT5jYWNoZXNpemUgPSBzaXplOworCSAgfQorCWJyZWFrOworICAgICAgfQorICAgICAgCisgICAgY2FzZSAncCc6ICAvKiAtLXBvcnQgKi8KKyAgICAgIGlmICghYXRvaV9jaGVjazE2KGFyZywgJmRhZW1vbi0+cG9ydCkpCisJcmV0X2VycihnZW5fZXJyKTsKKyAgICAgIGJyZWFrOworICAgIAorICAgIGNhc2UgTE9QVF9NSU5QT1JUOiAgLyogLS1taW4tcG9ydCAqLworICAgICAgaWYgKCFhdG9pX2NoZWNrMTYoYXJnLCAmZGFlbW9uLT5taW5fcG9ydCkpCisJcmV0X2VycihnZW5fZXJyKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBMT1BUX01BWFBPUlQ6ICAvKiAtLW1heC1wb3J0ICovCisgICAgICBpZiAoIWF0b2lfY2hlY2sxNihhcmcsICZkYWVtb24tPm1heF9wb3J0KSkKKwlyZXRfZXJyKGdlbl9lcnIpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlICcwJzogIC8qIC0tZG5zLWZvcndhcmQtbWF4ICovCisgICAgICBpZiAoIWF0b2lfY2hlY2soYXJnLCAmZGFlbW9uLT5mdGFic2l6ZSkpCisJcmV0X2VycihnZW5fZXJyKTsKKyAgICAgIGJyZWFrOyAgCisgICAgCisgICAgY2FzZSAncSc6IC8qIC0tbG9nLXF1ZXJpZXMgKi8KKyAgICAgIHNldF9vcHRpb25fYm9vbChPUFRfTE9HKTsKKyAgICAgIGlmIChhcmcgJiYgc3RyY21wKGFyZywgImV4dHJhIikgPT0gMCkKKwlzZXRfb3B0aW9uX2Jvb2woT1BUX0VYVFJBTE9HKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBMT1BUX01BWF9MT0dTOiAgLyogLS1sb2ctYXN5bmMgKi8KKyAgICAgIGRhZW1vbi0+bWF4X2xvZ3MgPSBMT0dfTUFYOyAvKiBkZWZhdWx0ICovCisgICAgICBpZiAoYXJnICYmICFhdG9pX2NoZWNrKGFyZywgJmRhZW1vbi0+bWF4X2xvZ3MpKQorCXJldF9lcnIoZ2VuX2Vycik7CisgICAgICBlbHNlIGlmIChkYWVtb24tPm1heF9sb2dzID4gMTAwKQorCWRhZW1vbi0+bWF4X2xvZ3MgPSAxMDA7CisgICAgICBicmVhazsgIAorCisgICAgY2FzZSAnUCc6IC8qIC0tZWRucy1wYWNrZXQtbWF4ICovCisgICAgICB7CisJaW50IGk7CisJaWYgKCFhdG9pX2NoZWNrKGFyZywgJmkpKQorCSAgcmV0X2VycihnZW5fZXJyKTsKKwlkYWVtb24tPmVkbnNfcGt0c3ogPSAodW5zaWduZWQgc2hvcnQpaTsJCisJYnJlYWs7CisgICAgICB9CisgICAgICAKKyAgICBjYXNlICdRJzogIC8qIC0tcXVlcnktcG9ydCAqLworICAgICAgaWYgKCFhdG9pX2NoZWNrMTYoYXJnLCAmZGFlbW9uLT5xdWVyeV9wb3J0KSkKKwlyZXRfZXJyKGdlbl9lcnIpOworICAgICAgLyogaWYgZXhwbGljaXRseSBzZXQgdG8gemVybywgdXNlIHNpbmdsZSBPUyBlcGhlbWVyYWwgcG9ydAorCSBhbmQgZGlzYWJsZSByYW5kb20gcG9ydHMgKi8KKyAgICAgIGlmIChkYWVtb24tPnF1ZXJ5X3BvcnQgPT0gMCkKKwlkYWVtb24tPm9zcG9ydCA9IDE7CisgICAgICBicmVhazsKKyAgICAgIAorICAgIGNhc2UgJ1QnOiAgICAgICAgIC8qIC0tbG9jYWwtdHRsICovCisgICAgY2FzZSBMT1BUX05FR1RUTDogLyogLS1uZWctdHRsICovCisgICAgY2FzZSBMT1BUX01BWFRUTDogLyogLS1tYXgtdHRsICovCisgICAgY2FzZSBMT1BUX01JTkNUVEw6IC8qIC0tbWluLWNhY2hlLXR0bCAqLworICAgIGNhc2UgTE9QVF9NQVhDVFRMOiAvKiAtLW1heC1jYWNoZS10dGwgKi8KKyAgICBjYXNlIExPUFRfQVVUSFRUTDogLyogLS1hdXRoLXR0bCAqLworICAgIGNhc2UgTE9QVF9ESENQVFRMOiAvKiAtLWRoY3AtdHRsICovCisgICAgICB7CisJaW50IHR0bDsKKwlpZiAoIWF0b2lfY2hlY2soYXJnLCAmdHRsKSkKKwkgIHJldF9lcnIoZ2VuX2Vycik7CisJZWxzZSBpZiAob3B0aW9uID09IExPUFRfTkVHVFRMKQorCSAgZGFlbW9uLT5uZWdfdHRsID0gKHVuc2lnbmVkIGxvbmcpdHRsOworCWVsc2UgaWYgKG9wdGlvbiA9PSBMT1BUX01BWFRUTCkKKwkgIGRhZW1vbi0+bWF4X3R0bCA9ICh1bnNpZ25lZCBsb25nKXR0bDsKKwllbHNlIGlmIChvcHRpb24gPT0gTE9QVF9NSU5DVFRMKQorCSAgeworCSAgICBpZiAodHRsID4gVFRMX0ZMT09SX0xJTUlUKQorCSAgICAgIHR0bCA9IFRUTF9GTE9PUl9MSU1JVDsKKwkgICAgZGFlbW9uLT5taW5fY2FjaGVfdHRsID0gKHVuc2lnbmVkIGxvbmcpdHRsOworCSAgfQorCWVsc2UgaWYgKG9wdGlvbiA9PSBMT1BUX01BWENUVEwpCisJICBkYWVtb24tPm1heF9jYWNoZV90dGwgPSAodW5zaWduZWQgbG9uZyl0dGw7CisJZWxzZSBpZiAob3B0aW9uID09IExPUFRfQVVUSFRUTCkKKwkgIGRhZW1vbi0+YXV0aF90dGwgPSAodW5zaWduZWQgbG9uZyl0dGw7CisJZWxzZSBpZiAob3B0aW9uID09IExPUFRfREhDUFRUTCkKKwkgIHsKKwkgICAgZGFlbW9uLT5kaGNwX3R0bCA9ICh1bnNpZ25lZCBsb25nKXR0bDsKKwkgICAgZGFlbW9uLT51c2VfZGhjcF90dGwgPSAxOworCSAgfQorCWVsc2UKKwkgIGRhZW1vbi0+bG9jYWxfdHRsID0gKHVuc2lnbmVkIGxvbmcpdHRsOworCWJyZWFrOworICAgICAgfQorICAgICAgCisjaWZkZWYgSEFWRV9ESENQCisgICAgY2FzZSAnWCc6IC8qIC0tZGhjcC1sZWFzZS1tYXggKi8KKyAgICAgIGlmICghYXRvaV9jaGVjayhhcmcsICZkYWVtb24tPmRoY3BfbWF4KSkKKwlyZXRfZXJyKGdlbl9lcnIpOworICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgIAorI2lmZGVmIEhBVkVfVEZUUAorICAgIGNhc2UgTE9QVF9URlRQX01BWDogIC8qICAtLXRmdHAtbWF4ICovCisgICAgICBpZiAoIWF0b2lfY2hlY2soYXJnLCAmZGFlbW9uLT50ZnRwX21heCkpCisJcmV0X2VycihnZW5fZXJyKTsKKyAgICAgIGJyZWFrOyAgCisKKyAgICBjYXNlIExPUFRfVEZUUF9NVFU6ICAvKiAgLS10ZnRwLW10dSAqLworICAgICAgaWYgKCFhdG9pX2NoZWNrKGFyZywgJmRhZW1vbi0+dGZ0cF9tdHUpKQorCXJldF9lcnIoZ2VuX2Vycik7CisgICAgICBicmVhazsKKworICAgIGNhc2UgTE9QVF9QUkVGSVg6IC8qIC0tdGZ0cC1wcmVmaXggKi8KKyAgICAgIGNvbW1hID0gc3BsaXQoYXJnKTsKKyAgICAgIGlmIChjb21tYSkKKwl7CisJICBzdHJ1Y3QgdGZ0cF9wcmVmaXggKm5ldyA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCB0ZnRwX3ByZWZpeCkpOworCSAgbmV3LT5pbnRlcmZhY2UgPSBvcHRfc3RyaW5nX2FsbG9jKGNvbW1hKTsKKwkgIG5ldy0+cHJlZml4ID0gb3B0X3N0cmluZ19hbGxvYyhhcmcpOworCSAgbmV3LT5uZXh0ID0gZGFlbW9uLT5pZl9wcmVmaXg7CisJICBkYWVtb24tPmlmX3ByZWZpeCA9IG5ldzsKKwl9CisgICAgICBlbHNlCisJZGFlbW9uLT50ZnRwX3ByZWZpeCA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBMT1BUX1RGVFBQT1JUUzogLyogLS10ZnRwLXBvcnQtcmFuZ2UgKi8KKyAgICAgIGlmICghKGNvbW1hID0gc3BsaXQoYXJnKSkgfHwgCisJICAhYXRvaV9jaGVjazE2KGFyZywgJmRhZW1vbi0+c3RhcnRfdGZ0cF9wb3J0KSB8fAorCSAgIWF0b2lfY2hlY2sxNihjb21tYSwgJmRhZW1vbi0+ZW5kX3RmdHBfcG9ydCkpCisJcmV0X2VycihfKCJiYWQgcG9ydCByYW5nZSIpKTsKKyAgICAgIAorICAgICAgaWYgKGRhZW1vbi0+c3RhcnRfdGZ0cF9wb3J0ID4gZGFlbW9uLT5lbmRfdGZ0cF9wb3J0KQorCXsKKwkgIGludCB0bXAgPSBkYWVtb24tPnN0YXJ0X3RmdHBfcG9ydDsKKwkgIGRhZW1vbi0+c3RhcnRfdGZ0cF9wb3J0ID0gZGFlbW9uLT5lbmRfdGZ0cF9wb3J0OworCSAgZGFlbW9uLT5lbmRfdGZ0cF9wb3J0ID0gdG1wOworCX0gCisgICAgICAKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBMT1BUX0FQUkVGOiAvKiAtLXRmdHAtdW5pcXVlLXJvb3QgKi8KKyAgICAgIGlmICghYXJnIHx8IHN0cmNhc2VjbXAoYXJnLCAiaXAiKSA9PSAwKQorICAgICAgICBzZXRfb3B0aW9uX2Jvb2woT1BUX1RGVFBfQVBSRUZfSVApOworICAgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChhcmcsICJtYWMiKSA9PSAwKQorICAgICAgICBzZXRfb3B0aW9uX2Jvb2woT1BUX1RGVFBfQVBSRUZfTUFDKTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmV0X2VycihnZW5fZXJyKTsKKyAgICAgIGJyZWFrOworI2VuZGlmCisJICAgICAgCisgICAgY2FzZSBMT1BUX0JSSURHRTogICAvKiAtLWJyaWRnZS1pbnRlcmZhY2UgKi8KKyAgICAgIHsKKwlzdHJ1Y3QgZGhjcF9icmlkZ2UgKm5ldyA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBkaGNwX2JyaWRnZSkpOworCWlmICghKGNvbW1hID0gc3BsaXQoYXJnKSkgfHwgc3RybGVuKGFyZykgPiBJRl9OQU1FU0laRSAtIDEgKQorCSAgcmV0X2VycihfKCJiYWQgYnJpZGdlLWludGVyZmFjZSIpKTsKKwkKKwlzdHJjcHkobmV3LT5pZmFjZSwgYXJnKTsKKwluZXctPmFsaWFzID0gTlVMTDsKKwluZXctPm5leHQgPSBkYWVtb24tPmJyaWRnZXM7CisJZGFlbW9uLT5icmlkZ2VzID0gbmV3OworCisJZG8geworCSAgYXJnID0gY29tbWE7CisJICBjb21tYSA9IHNwbGl0KGFyZyk7CisJICBpZiAoc3RybGVuKGFyZykgIT0gMCAmJiBzdHJsZW4oYXJnKSA8PSBJRl9OQU1FU0laRSAtIDEpCisJICAgIHsKKwkgICAgICBzdHJ1Y3QgZGhjcF9icmlkZ2UgKmIgPSBvcHRfbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGhjcF9icmlkZ2UpKTsgCisJICAgICAgYi0+bmV4dCA9IG5ldy0+YWxpYXM7CisJICAgICAgbmV3LT5hbGlhcyA9IGI7CisJICAgICAgc3RyY3B5KGItPmlmYWNlLCBhcmcpOworCSAgICB9CisJfSB3aGlsZSAoY29tbWEpOworCQorCWJyZWFrOworICAgICAgfQorCisjaWZkZWYgSEFWRV9ESENQCisgICAgY2FzZSAnRic6ICAvKiAtLWRoY3AtcmFuZ2UgKi8KKyAgICAgIHsKKwlpbnQgaywgbGVhc2Vwb3MgPSAyOworCWNoYXIgKmNwLCAqYVs4XSA9IHsgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9OworCXN0cnVjdCBkaGNwX2NvbnRleHQgKm5ldyA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBkaGNwX2NvbnRleHQpKTsKKwkKKwltZW1zZXQgKG5ldywgMCwgc2l6ZW9mKCpuZXcpKTsKKwluZXctPmxlYXNlX3RpbWUgPSBERUZMRUFTRTsKKwkKKwlpZiAoIWFyZykKKwkgIHsKKwkgICAgb3B0aW9uID0gJz8nOworCSAgICBicmVhazsKKwkgIH0KKwkKKwl3aGlsZSgxKQorCSAgeworCSAgICBmb3IgKGNwID0gYXJnOyAqY3A7IGNwKyspCisJICAgICAgaWYgKCEoKmNwID09ICcgJyB8fCAqY3AgPT0gJy4nIHx8ICpjcCA9PSAnOicgfHwgCisJCSAgICAoKmNwID49ICdhJyAmJiAqY3AgPD0gJ2YnKSB8fCAoKmNwID49ICdBJyAmJiAqY3AgPD0gJ0YnKSB8fAorCQkgICAgKCpjcCA+PScwJyAmJiAqY3AgPD0gJzknKSkpCisJCWJyZWFrOworCSAgICAKKwkgICAgaWYgKCpjcCAhPSAnLCcgJiYgKGNvbW1hID0gc3BsaXQoYXJnKSkpCisJICAgICAgeworCQlpZiAoaXNfdGFnX3ByZWZpeChhcmcpKQorCQkgIHsKKwkJICAgIHN0cnVjdCBkaGNwX25ldGlkICp0dCA9IG9wdF9tYWxsb2Moc2l6ZW9mIChzdHJ1Y3QgZGhjcF9uZXRpZCkpOworCQkgICAgdHQtPm5ldCA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKzQpOworCQkgICAgdHQtPm5leHQgPSBuZXctPmZpbHRlcjsKKwkJICAgIC8qIGlnbm9yZSBlbXB0eSB0YWcgKi8KKwkJICAgIGlmICh0dC0+bmV0KQorCQkgICAgICBuZXctPmZpbHRlciA9IHR0OworCQkgIH0KKwkJZWxzZQorCQkgIHsKKwkJICAgIGlmIChuZXctPm5ldGlkLm5ldCkKKwkJICAgICAgcmV0X2VycihfKCJvbmx5IG9uZSB0YWcgYWxsb3dlZCIpKTsKKwkJICAgIGVsc2UgaWYgKHN0cnN0cihhcmcsICJzZXQ6IikgPT0gYXJnKQorCQkgICAgICBuZXctPm5ldGlkLm5ldCA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKzQpOworCQkgICAgZWxzZQorCQkgICAgICBuZXctPm5ldGlkLm5ldCA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKTsKKwkJICB9CisJCWFyZyA9IGNvbW1hOworCSAgICAgIH0KKwkgICAgZWxzZQorCSAgICAgIHsKKwkJYVswXSA9IGFyZzsKKwkJYnJlYWs7CisJICAgICAgfQorCSAgfQorCQorCWZvciAoayA9IDE7IGsgPCA4OyBrKyspCisJICBpZiAoIShhW2tdID0gc3BsaXQoYVtrLTFdKSkpCisJICAgIGJyZWFrOworCQorCWlmIChrIDwgMikKKwkgIHJldF9lcnIoXygiYmFkIGRoY3AtcmFuZ2UiKSk7CisJCisJaWYgKGluZXRfcHRvbihBRl9JTkVULCBhWzBdLCAmbmV3LT5zdGFydCkpCisJICB7CisJICAgIG5ldy0+bmV4dCA9IGRhZW1vbi0+ZGhjcDsKKwkgICAgZGFlbW9uLT5kaGNwID0gbmV3OworCSAgICBuZXctPmVuZCA9IG5ldy0+c3RhcnQ7CisJICAgIGlmIChzdHJjbXAoYVsxXSwgInN0YXRpYyIpID09IDApCisJICAgICAgbmV3LT5mbGFncyB8PSBDT05URVhUX1NUQVRJQzsKKwkgICAgZWxzZSBpZiAoc3RyY21wKGFbMV0sICJwcm94eSIpID09IDApCisJICAgICAgbmV3LT5mbGFncyB8PSBDT05URVhUX1BST1hZOworCSAgICBlbHNlIGlmICghaW5ldF9wdG9uKEFGX0lORVQsIGFbMV0sICZuZXctPmVuZCkpCisJICAgICAgcmV0X2VycihfKCJiYWQgZGhjcC1yYW5nZSIpKTsKKwkgICAgCisJICAgIGlmIChudG9obChuZXctPnN0YXJ0LnNfYWRkcikgPiBudG9obChuZXctPmVuZC5zX2FkZHIpKQorCSAgICAgIHsKKwkJc3RydWN0IGluX2FkZHIgdG1wID0gbmV3LT5zdGFydDsKKwkJbmV3LT5zdGFydCA9IG5ldy0+ZW5kOworCQluZXctPmVuZCA9IHRtcDsKKwkgICAgICB9CisJICAgIAorCSAgICBpZiAoayA+PSAzICYmIHN0cmNocihhWzJdLCAnLicpICYmICAKKwkJKGluZXRfcHRvbihBRl9JTkVULCBhWzJdLCAmbmV3LT5uZXRtYXNrKSA+IDApKQorCSAgICAgIHsKKwkJbmV3LT5mbGFncyB8PSBDT05URVhUX05FVE1BU0s7CisJCWxlYXNlcG9zID0gMzsKKwkJaWYgKCFpc19zYW1lX25ldChuZXctPnN0YXJ0LCBuZXctPmVuZCwgbmV3LT5uZXRtYXNrKSkKKwkJICByZXRfZXJyKF8oImluY29uc2lzdGVudCBESENQIHJhbmdlIikpOworCQkKKwkgICAgCisJCWlmIChrID49IDQgJiYgc3RyY2hyKGFbM10sICcuJykgJiYgIAorCQkgICAgKGluZXRfcHRvbihBRl9JTkVULCBhWzNdLCAmbmV3LT5icm9hZGNhc3QpID4gMCkpCisJCSAgeworCQkgICAgbmV3LT5mbGFncyB8PSBDT05URVhUX0JSRENBU1Q7CisJCSAgICBsZWFzZXBvcyA9IDQ7CisJCSAgfQorCSAgICAgIH0KKwkgIH0KKyNpZmRlZiBIQVZFX0RIQ1A2CisJZWxzZSBpZiAoaW5ldF9wdG9uKEFGX0lORVQ2LCBhWzBdLCAmbmV3LT5zdGFydDYpKQorCSAgeworCSAgICBuZXctPmZsYWdzIHw9IENPTlRFWFRfVjY7IAorCSAgICBuZXctPnByZWZpeCA9IDY0OyAvKiBkZWZhdWx0ICovCisJICAgIG5ldy0+ZW5kNiA9IG5ldy0+c3RhcnQ2OworCSAgICBuZXctPm5leHQgPSBkYWVtb24tPmRoY3A2OworCSAgICBkYWVtb24tPmRoY3A2ID0gbmV3OworCisJICAgIGZvciAobGVhc2Vwb3MgPSAxOyBsZWFzZXBvcyA8IGs7IGxlYXNlcG9zKyspCisJICAgICAgeworCQlpZiAoc3RyY21wKGFbbGVhc2Vwb3NdLCAic3RhdGljIikgPT0gMCkKKwkJICBuZXctPmZsYWdzIHw9IENPTlRFWFRfU1RBVElDIHwgQ09OVEVYVF9ESENQOworCQllbHNlIGlmIChzdHJjbXAoYVtsZWFzZXBvc10sICJyYS1vbmx5IikgPT0gMCB8fCBzdHJjbXAoYVtsZWFzZXBvc10sICJzbGFhYyIpID09IDAgKQorCQkgIG5ldy0+ZmxhZ3MgfD0gQ09OVEVYVF9SQTsKKwkJZWxzZSBpZiAoc3RyY21wKGFbbGVhc2Vwb3NdLCAicmEtbmFtZXMiKSA9PSAwKQorCQkgIG5ldy0+ZmxhZ3MgfD0gQ09OVEVYVF9SQV9OQU1FIHwgQ09OVEVYVF9SQTsKKwkJZWxzZSBpZiAoc3RyY21wKGFbbGVhc2Vwb3NdLCAicmEtYWR2cm91dGVyIikgPT0gMCkKKwkJICBuZXctPmZsYWdzIHw9IENPTlRFWFRfUkFfUk9VVEVSIHwgQ09OVEVYVF9SQTsKKwkJZWxzZSBpZiAoc3RyY21wKGFbbGVhc2Vwb3NdLCAicmEtc3RhdGVsZXNzIikgPT0gMCkKKwkJICBuZXctPmZsYWdzIHw9IENPTlRFWFRfUkFfU1RBVEVMRVNTIHwgQ09OVEVYVF9ESENQIHwgQ09OVEVYVF9SQTsKKwkJZWxzZSBpZiAoc3RyY21wKGFbbGVhc2Vwb3NdLCAib2ZmLWxpbmsiKSA9PSAwKQorCQkgIG5ldy0+ZmxhZ3MgfD0gQ09OVEVYVF9SQV9PRkZfTElOSzsKKwkJZWxzZSBpZiAobGVhc2Vwb3MgPT0gMSAmJiBpbmV0X3B0b24oQUZfSU5FVDYsIGFbbGVhc2Vwb3NdLCAmbmV3LT5lbmQ2KSkKKwkJICBuZXctPmZsYWdzIHw9IENPTlRFWFRfREhDUDsgCisJCWVsc2UgaWYgKHN0cnN0cihhW2xlYXNlcG9zXSwgImNvbnN0cnVjdG9yOiIpID09IGFbbGVhc2Vwb3NdKQorCQkgIHsKKwkJICAgIG5ldy0+dGVtcGxhdGVfaW50ZXJmYWNlID0gb3B0X3N0cmluZ19hbGxvYyhhW2xlYXNlcG9zXSArIDEyKTsKKwkJICAgIG5ldy0+ZmxhZ3MgfD0gQ09OVEVYVF9URU1QTEFURTsKKwkJICB9CisJCWVsc2UgIAorCQkgIGJyZWFrOworCSAgICAgIH0KKwkgICAJICAgIAkgICAgIAorCSAgICAvKiBiYXJlIGludGVnZXIgPCAxMjggaXMgcHJlZml4IHZhbHVlICovCisJICAgIGlmIChsZWFzZXBvcyA8IGspCisJICAgICAgeworCQlpbnQgcHJlZjsKKwkJZm9yIChjcCA9IGFbbGVhc2Vwb3NdOyAqY3A7IGNwKyspCisJCSAgaWYgKCEoKmNwID49ICcwJyAmJiAqY3AgPD0gJzknKSkKKwkJICAgIGJyZWFrOworCQlpZiAoISpjcCAmJiAocHJlZiA9IGF0b2koYVtsZWFzZXBvc10pKSA8PSAxMjgpCisJCSAgeworCQkgICAgbmV3LT5wcmVmaXggPSBwcmVmOworCQkgICAgbGVhc2Vwb3MrKzsKKwkJICB9CisJICAgICAgfQorCSAgICAKKwkgICAgaWYgKG5ldy0+cHJlZml4ICE9IDY0KQorCSAgICAgIHsKKwkJaWYgKG5ldy0+ZmxhZ3MgJiBDT05URVhUX1JBKQorCQkgIHJldF9lcnIoXygicHJlZml4IGxlbmd0aCBtdXN0IGJlIGV4YWN0bHkgNjQgZm9yIFJBIHN1Ym5ldHMiKSk7CisJCWVsc2UgaWYgKG5ldy0+ZmxhZ3MgJiBDT05URVhUX1RFTVBMQVRFKQorCQkgIHJldF9lcnIoXygicHJlZml4IGxlbmd0aCBtdXN0IGJlIGV4YWN0bHkgNjQgZm9yIHN1Ym5ldCBjb25zdHJ1Y3RvcnMiKSk7CisJICAgICAgfQorCisJICAgIGlmIChuZXctPnByZWZpeCA8IDY0KQorCSAgICAgIHJldF9lcnIoXygicHJlZml4IGxlbmd0aCBtdXN0IGJlIGF0IGxlYXN0IDY0IikpOworCSAgICAKKwkgICAgaWYgKCFpc19zYW1lX25ldDYoJm5ldy0+c3RhcnQ2LCAmbmV3LT5lbmQ2LCBuZXctPnByZWZpeCkpCisJICAgICAgcmV0X2VycihfKCJpbmNvbnNpc3RlbnQgREhDUHY2IHJhbmdlIikpOworCisJICAgIC8qIGRoY3AtcmFuZ2U9OjogZW5hYmxlcyBESENQIHN0YXRlbGVzcyBvbiBhbnkgaW50ZXJmYWNlICovCisJICAgIGlmIChJTjZfSVNfQUREUl9VTlNQRUNJRklFRCgmbmV3LT5zdGFydDYpICYmICEobmV3LT5mbGFncyAmIENPTlRFWFRfVEVNUExBVEUpKQorCSAgICAgIG5ldy0+cHJlZml4ID0gMDsKKwkgICAgCisJICAgIGlmIChuZXctPmZsYWdzICYgQ09OVEVYVF9URU1QTEFURSkKKwkgICAgICB7CisJCXN0cnVjdCBpbjZfYWRkciB6ZXJvOworCQltZW1zZXQoJnplcm8sIDAsIHNpemVvZih6ZXJvKSk7CisJCWlmICghaXNfc2FtZV9uZXQ2KCZ6ZXJvLCAmbmV3LT5zdGFydDYsIG5ldy0+cHJlZml4KSkKKwkJICByZXRfZXJyKF8oInByZWZpeCBtdXN0IGJlIHplcm8gd2l0aCBcImNvbnN0cnVjdG9yOlwiIGFyZ3VtZW50IikpOworCSAgICAgIH0KKwkgICAgCisJICAgIGlmIChhZGRyNnBhcnQoJm5ldy0+c3RhcnQ2KSA+IGFkZHI2cGFydCgmbmV3LT5lbmQ2KSkKKwkgICAgICB7CisJCXN0cnVjdCBpbjZfYWRkciB0bXAgPSBuZXctPnN0YXJ0NjsKKwkJbmV3LT5zdGFydDYgPSBuZXctPmVuZDY7CisJCW5ldy0+ZW5kNiA9IHRtcDsKKwkgICAgICB9CisJICB9CisjZW5kaWYKKwllbHNlCisJICByZXRfZXJyKF8oImJhZCBkaGNwLXJhbmdlIikpOworCQorCWlmIChsZWFzZXBvcyA8IGspCisJICB7CisJICAgIGlmIChsZWFzZXBvcyAhPSBrLTEpCisJICAgICAgcmV0X2VycihfKCJiYWQgZGhjcC1yYW5nZSIpKTsKKwkgICAgCisJICAgIGlmIChzdHJjbXAoYVtsZWFzZXBvc10sICJpbmZpbml0ZSIpID09IDApCisJICAgICAgbmV3LT5sZWFzZV90aW1lID0gMHhmZmZmZmZmZjsKKwkgICAgZWxzZSBpZiAoc3RyY21wKGFbbGVhc2Vwb3NdLCAiZGVwcmVjYXRlZCIpID09IDApCisJICAgICAgbmV3LT5mbGFncyB8PSBDT05URVhUX0RFUFJFQ0FURTsKKwkgICAgZWxzZQorCSAgICAgIHsKKwkJaW50IGZhYyA9IDE7CisJCWlmIChzdHJsZW4oYVtsZWFzZXBvc10pID4gMCkKKwkJICB7CisJCSAgICBzd2l0Y2ggKGFbbGVhc2Vwb3NdW3N0cmxlbihhW2xlYXNlcG9zXSkgLSAxXSkKKwkJICAgICAgeworCQkgICAgICBjYXNlICd3JzoKKwkJICAgICAgY2FzZSAnVyc6CisJCQlmYWMgKj0gNzsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQkgICAgICBjYXNlICdkJzoKKwkJICAgICAgY2FzZSAnRCc6CisJCQlmYWMgKj0gMjQ7CisJCQkvKiBmYWxsIHRob3VnaCAqLworCQkgICAgICBjYXNlICdoJzoKKwkJICAgICAgY2FzZSAnSCc6CisJCQlmYWMgKj0gNjA7CisJCQkvKiBmYWxsIHRocm91Z2ggKi8KKwkJICAgICAgY2FzZSAnbSc6CisJCSAgICAgIGNhc2UgJ00nOgorCQkJZmFjICo9IDYwOworCQkJLyogZmFsbCB0aHJvdWdoICovCisJCSAgICAgIGNhc2UgJ3MnOgorCQkgICAgICBjYXNlICdTJzoKKwkJCWFbbGVhc2Vwb3NdW3N0cmxlbihhW2xlYXNlcG9zXSkgLSAxXSA9IDA7CisJCSAgICAgIH0KKwkJICAgIAorCQkgICAgZm9yIChjcCA9IGFbbGVhc2Vwb3NdOyAqY3A7IGNwKyspCisJCSAgICAgIGlmICghKCpjcCA+PSAnMCcgJiYgKmNwIDw9ICc5JykpCisJCQlicmVhazsKKworCQkgICAgaWYgKCpjcCB8fCAobGVhc2Vwb3MrMSA8IGspKQorCQkgICAgICByZXRfZXJyKF8oImJhZCBkaGNwLXJhbmdlIikpOworCQkgICAgCisJCSAgICBuZXctPmxlYXNlX3RpbWUgPSBhdG9pKGFbbGVhc2Vwb3NdKSAqIGZhYzsKKwkJICAgIC8qIExlYXNlcyBvZiBhIG1pbnV0ZSBvciBsZXNzIGNvbmZ1c2UKKwkJICAgICAgIHNvbWUgY2xpZW50cywgbm90YWJseSBBcHBsZSdzICovCisJCSAgICBpZiAobmV3LT5sZWFzZV90aW1lIDwgMTIwKQorCQkgICAgICBuZXctPmxlYXNlX3RpbWUgPSAxMjA7CisJCSAgfQorCSAgICAgIH0KKwkgIH0KKwlicmVhazsKKyAgICAgIH0KKworICAgIGNhc2UgTE9QVF9CQU5LOgorICAgIGNhc2UgJ0cnOiAgLyogLS1kaGNwLWhvc3QgKi8KKyAgICAgIHsKKwlpbnQgaiwgayA9IDA7CisJY2hhciAqYVs3XSA9IHsgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9OworCXN0cnVjdCBkaGNwX2NvbmZpZyAqbmV3OworCXN0cnVjdCBpbl9hZGRyIGluOworCQorCW5ldyA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBkaGNwX2NvbmZpZykpOworCQorCW5ldy0+bmV4dCA9IGRhZW1vbi0+ZGhjcF9jb25mOworCW5ldy0+ZmxhZ3MgPSAob3B0aW9uID09IExPUFRfQkFOSykgPyBDT05GSUdfQkFOSyA6IDA7CisJbmV3LT5od2FkZHIgPSBOVUxMOworCW5ldy0+bmV0aWQgPSBOVUxMOworCisJaWYgKChhWzBdID0gYXJnKSkKKwkgIGZvciAoayA9IDE7IGsgPCA3OyBrKyspCisJICAgIGlmICghKGFba10gPSBzcGxpdChhW2stMV0pKSkKKwkgICAgICBicmVhazsKKwkKKwlmb3IgKGogPSAwOyBqIDwgazsgaisrKQorCSAgaWYgKHN0cmNocihhW2pdLCAnOicpKSAvKiBldGhlcm5ldCBhZGRyZXNzLCBuZXRpZCBvciBiaW5hcnkgQ0xJRCAqLworCSAgICB7CisJICAgICAgY2hhciAqYXJnID0gYVtqXTsKKwkgICAgICAKKwkgICAgICBpZiAoKGFyZ1swXSA9PSAnaScgfHwgYXJnWzBdID09ICdJJykgJiYKKwkJICAoYXJnWzFdID09ICdkJyB8fCBhcmdbMV0gPT0gJ0QnKSAmJgorCQkgIGFyZ1syXSA9PSAnOicpCisJCXsKKwkJICBpZiAoYXJnWzNdID09ICcqJykKKwkJICAgIG5ldy0+ZmxhZ3MgfD0gQ09ORklHX05PQ0xJRDsKKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIGludCBsZW47CisJCSAgICAgIGFyZyArPSAzOyAvKiBkdW1wIGlkOiAqLworCQkgICAgICBpZiAoc3RyY2hyKGFyZywgJzonKSkKKwkJCWxlbiA9IHBhcnNlX2hleChhcmcsICh1bnNpZ25lZCBjaGFyICopYXJnLCAtMSwgTlVMTCwgTlVMTCk7CisJCSAgICAgIGVsc2UKKwkJCXsKKwkJCSAgdW5oaWRlX21ldGFzKGFyZyk7CisJCQkgIGxlbiA9IChpbnQpIHN0cmxlbihhcmcpOworCQkJfQorCisJCSAgICAgIGlmIChsZW4gPT0gLTEpCisJCQlyZXRfZXJyKF8oImJhZCBoZXggY29uc3RhbnQiKSk7CisJCSAgICAgIGVsc2UgaWYgKChuZXctPmNsaWQgPSBvcHRfbWFsbG9jKGxlbikpKQorCQkJeworCQkJICBuZXctPmZsYWdzIHw9IENPTkZJR19DTElEOworCQkJICBuZXctPmNsaWRfbGVuID0gbGVuOworCQkJICBtZW1jcHkobmV3LT5jbGlkLCBhcmcsIGxlbik7CisJCQl9CisJCSAgICB9CisJCX0KKwkgICAgICAvKiBkaGNwLWhvc3QgaGFzIHN0cmFuZ2UgYmFja3dhcmRzLWNvbXBhdCBuZWVkcy4gKi8KKwkgICAgICBlbHNlIGlmIChzdHJzdHIoYXJnLCAibmV0OiIpID09IGFyZyB8fCBzdHJzdHIoYXJnLCAic2V0OiIpID09IGFyZykKKwkJeworCQkgIHN0cnVjdCBkaGNwX25ldGlkICpuZXd0YWcgPSBvcHRfbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGhjcF9uZXRpZCkpOworCQkgIHN0cnVjdCBkaGNwX25ldGlkX2xpc3QgKm5ld2xpc3QgPSBvcHRfbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGhjcF9uZXRpZF9saXN0KSk7CisJCSAgbmV3dGFnLT5uZXQgPSBvcHRfbWFsbG9jKHN0cmxlbihhcmcgKyA0KSArIDEpOworCQkgIG5ld2xpc3QtPm5leHQgPSBuZXctPm5ldGlkOworCQkgIG5ldy0+bmV0aWQgPSBuZXdsaXN0OworCQkgIG5ld2xpc3QtPmxpc3QgPSBuZXd0YWc7CisJCSAgc3RyY3B5KG5ld3RhZy0+bmV0LCBhcmcrNCk7CisJCSAgdW5oaWRlX21ldGFzKG5ld3RhZy0+bmV0KTsKKwkJfQorCSAgICAgIGVsc2UgaWYgKHN0cnN0cihhcmcsICJ0YWc6IikgPT0gYXJnKQorCQlyZXRfZXJyKF8oImNhbm5vdCBtYXRjaCB0YWdzIGluIC0tZGhjcC1ob3N0IikpOworI2lmZGVmIEhBVkVfREhDUDYKKwkgICAgICBlbHNlIGlmIChhcmdbMF0gPT0gJ1snICYmIGFyZ1tzdHJsZW4oYXJnKS0xXSA9PSAnXScpCisJCXsKKwkJICBhcmdbc3RybGVuKGFyZyktMV0gPSAwOworCQkgIGFyZysrOworCQkgIAorCQkgIGlmICghaW5ldF9wdG9uKEFGX0lORVQ2LCBhcmcsICZuZXctPmFkZHI2KSkKKwkJICAgIHJldF9lcnIoXygiYmFkIElQdjYgYWRkcmVzcyIpKTsKKworCQkgIGZvciAoaT0gMDsgaSA8IDg7IGkrKykKKwkJICAgIGlmIChuZXctPmFkZHI2LnM2X2FkZHJbaV0gIT0gMCkKKwkJICAgICAgYnJlYWs7CisKKwkJICAvKiBzZXQgV0lMRENBUkQgaWYgbmV0d29yayBwYXJ0IGFsbCB6ZXJvcyAqLworCQkgIGlmIChpID09IDgpCisJCSAgICBuZXctPmZsYWdzIHw9IENPTkZJR19XSUxEQ0FSRDsKKwkJICAKKwkJICBuZXctPmZsYWdzIHw9IENPTkZJR19BRERSNjsKKwkJfQorI2VuZGlmCisJICAgICAgZWxzZQorCQl7CisJCSAgc3RydWN0IGh3YWRkcl9jb25maWcgKm5ld2h3ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IGh3YWRkcl9jb25maWcpKTsKKwkJICBpZiAoKG5ld2h3LT5od2FkZHJfbGVuID0gcGFyc2VfaGV4KGFbal0sIG5ld2h3LT5od2FkZHIsIERIQ1BfQ0hBRERSX01BWCwgCisJCQkJCQkgICAgICZuZXdody0+d2lsZGNhcmRfbWFzaywgJm5ld2h3LT5od2FkZHJfdHlwZSkpID09IC0xKQorCQkgICAgcmV0X2VycihfKCJiYWQgaGV4IGNvbnN0YW50IikpOworCQkgIGVsc2UKKwkJICAgIHsKKwkJICAgICAgCisJCSAgICAgIG5ld2h3LT5uZXh0ID0gbmV3LT5od2FkZHI7CisJCSAgICAgIG5ldy0+aHdhZGRyID0gbmV3aHc7CisJCSAgICB9CQkgICAgCisJCX0KKwkgICAgfQorCSAgZWxzZSBpZiAoc3RyY2hyKGFbal0sICcuJykgJiYgKGluZXRfcHRvbihBRl9JTkVULCBhW2pdLCAmaW4pID4gMCkpCisJICAgIHsKKwkgICAgICBzdHJ1Y3QgZGhjcF9jb25maWcgKmNvbmZpZ3M7CisJICAgICAgCisJICAgICAgbmV3LT5hZGRyID0gaW47CisJICAgICAgbmV3LT5mbGFncyB8PSBDT05GSUdfQUREUjsKKworCSAgICAgIC8qIElmIHRoZSBzYW1lIElQIGFwcGVhcnMgaW4gbW9yZSB0aGFuIG9uZSBob3N0IGNvbmZpZywgdGhlbiBESVNDT1ZFUgorCQkgZm9yIG9uZSBvZiB0aGUgaG9zdHMgd2lsbCBnZXQgdGhlIGFkZHJlc3MsIGJ1dCBSRVFVRVNUIHdpbGwgYmUgTkFLZWQsCisJCSBzaW5jZSB0aGUgYWRkcmVzcyBpcyByZXNlcnZlZCBieSB0aGUgb3RoZXIgb25lIC0+IHByb3RvY29sIGxvb3AuICovCisJICAgICAgZm9yIChjb25maWdzID0gZGFlbW9uLT5kaGNwX2NvbmY7IGNvbmZpZ3M7IGNvbmZpZ3MgPSBjb25maWdzLT5uZXh0KSAKKwkJaWYgKChjb25maWdzLT5mbGFncyAmIENPTkZJR19BRERSKSAmJiBjb25maWdzLT5hZGRyLnNfYWRkciA9PSBpbi5zX2FkZHIpCisJCSAgeworCQkgICAgc3ByaW50ZihlcnJzdHIsIF8oImR1cGxpY2F0ZSBkaGNwLWhvc3QgSVAgYWRkcmVzcyAlcyIpLCAgaW5ldF9udG9hKGluKSk7CisJCSAgICByZXR1cm4gMDsKKwkJICB9CSAgICAgIAorCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBjaGFyICpjcCwgKmxhc3RwID0gTlVMTCwgbGFzdCA9IDA7CisJICAgICAgaW50IGZhYyA9IDEsIGlzZGlnID0gMDsKKwkgICAgICAKKwkgICAgICBpZiAoc3RybGVuKGFbal0pID4gMSkKKwkJeworCQkgIGxhc3RwID0gYVtqXSArIHN0cmxlbihhW2pdKSAtIDE7CisJCSAgbGFzdCA9ICpsYXN0cDsKKwkJICBzd2l0Y2ggKGxhc3QpCisJCSAgICB7CisJCSAgICBjYXNlICd3JzoKKwkJICAgIGNhc2UgJ1cnOgorCQkgICAgICBmYWMgKj0gNzsKKwkJICAgICAgLyogZmFsbCB0aHJvdWdoICovCisJCSAgICBjYXNlICdkJzoKKwkJICAgIGNhc2UgJ0QnOgorCQkgICAgICBmYWMgKj0gMjQ7CisJCSAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLworCQkgICAgY2FzZSAnaCc6CisJCSAgICBjYXNlICdIJzoKKwkJICAgICAgZmFjICo9IDYwOworCQkgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKwkJICAgIGNhc2UgJ20nOgorCQkgICAgY2FzZSAnTSc6CisJCSAgICAgIGZhYyAqPSA2MDsKKwkJICAgICAgLyogZmFsbCB0aHJvdWdoICovCisJCSAgICBjYXNlICdzJzoKKwkJICAgIGNhc2UgJ1MnOgorCQkgICAgICAqbGFzdHAgPSAwOworCQkgICAgfQorCQl9CisJICAgICAgCisJICAgICAgZm9yIChjcCA9IGFbal07ICpjcDsgY3ArKykKKwkJaWYgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKmNwKSkKKwkJICBpc2RpZyA9IDE7CisJCWVsc2UgaWYgKCpjcCAhPSAnICcpCisJCSAgYnJlYWs7CisKKwkgICAgICBpZiAoKmNwKQorCQl7CisJCSAgaWYgKGxhc3RwKQorCQkgICAgKmxhc3RwID0gbGFzdDsKKwkJICBpZiAoc3RyY21wKGFbal0sICJpbmZpbml0ZSIpID09IDApCisJCSAgICB7CisJCSAgICAgIG5ldy0+bGVhc2VfdGltZSA9IDB4ZmZmZmZmZmY7CisJCSAgICAgIG5ldy0+ZmxhZ3MgfD0gQ09ORklHX1RJTUU7CisJCSAgICB9CisJCSAgZWxzZSBpZiAoc3RyY21wKGFbal0sICJpZ25vcmUiKSA9PSAwKQorCQkgICAgbmV3LT5mbGFncyB8PSBDT05GSUdfRElTQUJMRTsKKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIGlmICghKG5ldy0+aG9zdG5hbWUgPSBjYW5vbmljYWxpc2Vfb3B0KGFbal0pKSB8fAorCQkJICAhbGVnYWxfaG9zdG5hbWUobmV3LT5ob3N0bmFtZSkpCisJCQlyZXRfZXJyKF8oImJhZCBESENQIGhvc3QgbmFtZSIpKTsKKwkJICAgICAKKwkJICAgICAgbmV3LT5mbGFncyB8PSBDT05GSUdfTkFNRTsKKwkJICAgICAgbmV3LT5kb21haW4gPSBzdHJpcF9ob3N0bmFtZShuZXctPmhvc3RuYW1lKTsJCQkKKwkJICAgIH0KKwkJfQorCSAgICAgIGVsc2UgaWYgKGlzZGlnKQorCQl7CisJCSAgbmV3LT5sZWFzZV90aW1lID0gYXRvaShhW2pdKSAqIGZhYzsgCisJCSAgLyogTGVhc2VzIG9mIGEgbWludXRlIG9yIGxlc3MgY29uZnVzZQorCQkgICAgIHNvbWUgY2xpZW50cywgbm90YWJseSBBcHBsZSdzICovCisJCSAgaWYgKG5ldy0+bGVhc2VfdGltZSA8IDEyMCkKKwkJICAgIG5ldy0+bGVhc2VfdGltZSA9IDEyMDsKKwkJICBuZXctPmZsYWdzIHw9IENPTkZJR19USU1FOworCQl9CisJICAgIH0KKwkKKwlkYWVtb24tPmRoY3BfY29uZiA9IG5ldzsKKwlicmVhazsKKyAgICAgIH0KKworICAgIGNhc2UgTE9QVF9UQUdfSUY6ICAvKiAtLXRhZy1pZiAqLworICAgICAgeworCXN0cnVjdCB0YWdfaWYgKm5ldyA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCB0YWdfaWYpKTsKKwkJCisJbmV3LT50YWcgPSBOVUxMOworCW5ldy0+c2V0ID0gTlVMTDsKKwluZXctPm5leHQgPSBOVUxMOworCQorCS8qIHByZXNlcnZlIG9yZGVyICovCisJaWYgKCFkYWVtb24tPnRhZ19pZikKKwkgIGRhZW1vbi0+dGFnX2lmID0gbmV3OworCWVsc2UKKwkgIHsKKwkgICAgc3RydWN0IHRhZ19pZiAqdG1wOworCSAgICBmb3IgKHRtcCA9IGRhZW1vbi0+dGFnX2lmOyB0bXAtPm5leHQ7IHRtcCA9IHRtcC0+bmV4dCk7CisJICAgIHRtcC0+bmV4dCA9IG5ldzsKKwkgIH0KKworCXdoaWxlIChhcmcpCisJICB7CisJICAgIHNpemVfdCBsZW47CisKKwkgICAgY29tbWEgPSBzcGxpdChhcmcpOworCSAgICBsZW4gPSBzdHJsZW4oYXJnKTsKKworCSAgICBpZiAobGVuIDwgNSkKKwkgICAgICB7CisJCW5ldy0+c2V0ID0gTlVMTDsKKwkJYnJlYWs7CisJICAgICAgfQorCSAgICBlbHNlCisJICAgICAgeworCQlzdHJ1Y3QgZGhjcF9uZXRpZCAqbmV3dGFnID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IGRoY3BfbmV0aWQpKTsKKwkJbmV3dGFnLT5uZXQgPSBvcHRfbWFsbG9jKGxlbiAtIDMpOworCQlzdHJjcHkobmV3dGFnLT5uZXQsIGFyZys0KTsKKwkJdW5oaWRlX21ldGFzKG5ld3RhZy0+bmV0KTsKKworCQlpZiAoc3Ryc3RyKGFyZywgInNldDoiKSA9PSBhcmcpCisJCSAgeworCQkgICAgc3RydWN0IGRoY3BfbmV0aWRfbGlzdCAqbmV3bGlzdCA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBkaGNwX25ldGlkX2xpc3QpKTsKKwkJICAgIG5ld2xpc3QtPm5leHQgPSBuZXctPnNldDsKKwkJICAgIG5ldy0+c2V0ID0gbmV3bGlzdDsKKwkJICAgIG5ld2xpc3QtPmxpc3QgPSBuZXd0YWc7CisJCSAgfQorCQllbHNlIGlmIChzdHJzdHIoYXJnLCAidGFnOiIpID09IGFyZykKKwkJICB7CisJCSAgICBuZXd0YWctPm5leHQgPSBuZXctPnRhZzsKKwkJICAgIG5ldy0+dGFnID0gbmV3dGFnOworCQkgIH0KKwkJZWxzZSAKKwkJICB7CisJCSAgICBuZXctPnNldCA9IE5VTEw7CisJCSAgICBmcmVlKG5ld3RhZyk7CisJCSAgICBicmVhazsKKwkJICB9CisJICAgICAgfQorCSAgICAKKwkgICAgYXJnID0gY29tbWE7CisJICB9CisKKwlpZiAoIW5ldy0+c2V0KQorCSAgcmV0X2VycihfKCJiYWQgdGFnLWlmIikpOworCSAgCisJYnJlYWs7CisgICAgICB9CisKKyAgICAgIAorICAgIGNhc2UgJ08nOiAgICAgICAgICAgLyogLS1kaGNwLW9wdGlvbiAqLworICAgIGNhc2UgTE9QVF9GT1JDRTogICAgLyogLS1kaGNwLW9wdGlvbi1mb3JjZSAqLworICAgIGNhc2UgTE9QVF9PUFRTOgorICAgIGNhc2UgTE9QVF9NQVRDSDogICAgLyogLS1kaGNwLW1hdGNoICovCisgICAgICByZXR1cm4gcGFyc2VfZGhjcF9vcHQoZXJyc3RyLCBhcmcsIAorCQkJICAgIG9wdGlvbiA9PSBMT1BUX0ZPUkNFID8gREhPUFRfRk9SQ0UgOiAKKwkJCSAgICAob3B0aW9uID09IExPUFRfTUFUQ0ggPyBESE9QVF9NQVRDSCA6CisJCQkgICAgIChvcHRpb24gPT0gTE9QVF9PUFRTID8gREhPUFRfQkFOSyA6IDApKSk7CisgICAgIAorICAgIGNhc2UgJ00nOiAvKiAtLWRoY3AtYm9vdCAqLworICAgICAgeworCXN0cnVjdCBkaGNwX25ldGlkICppZCA9IE5VTEw7CisJd2hpbGUgKGlzX3RhZ19wcmVmaXgoYXJnKSkKKwkgIHsKKwkgICAgc3RydWN0IGRoY3BfbmV0aWQgKm5ld2lkID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IGRoY3BfbmV0aWQpKTsKKwkgICAgbmV3aWQtPm5leHQgPSBpZDsKKwkgICAgaWQgPSBuZXdpZDsKKwkgICAgY29tbWEgPSBzcGxpdChhcmcpOworCSAgICBuZXdpZC0+bmV0ID0gb3B0X3N0cmluZ19hbGxvYyhhcmcrNCk7CisJICAgIGFyZyA9IGNvbW1hOworCSAgfTsKKwkKKwlpZiAoIWFyZykKKwkgIHJldF9lcnIoZ2VuX2Vycik7CisJZWxzZSAKKwkgIHsKKwkgICAgY2hhciAqZGhjcF9maWxlLCAqZGhjcF9zbmFtZSA9IE5VTEwsICp0ZnRwX3NuYW1lID0gTlVMTDsKKwkgICAgc3RydWN0IGluX2FkZHIgZGhjcF9uZXh0X3NlcnZlcjsKKwkgICAgc3RydWN0IGRoY3BfYm9vdCAqbmV3OworCSAgICBjb21tYSA9IHNwbGl0KGFyZyk7CisJICAgIGRoY3BfZmlsZSA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKTsKKwkgICAgZGhjcF9uZXh0X3NlcnZlci5zX2FkZHIgPSAwOworCSAgICBpZiAoY29tbWEpCisJICAgICAgeworCQlhcmcgPSBjb21tYTsKKwkJY29tbWEgPSBzcGxpdChhcmcpOworCQlkaGNwX3NuYW1lID0gb3B0X3N0cmluZ19hbGxvYyhhcmcpOworCQlpZiAoY29tbWEpCisJCSAgeworCQkgICAgdW5oaWRlX21ldGFzKGNvbW1hKTsKKwkJICAgIGlmICghKGluZXRfcHRvbihBRl9JTkVULCBjb21tYSwgJmRoY3BfbmV4dF9zZXJ2ZXIpID4gMCkpCisJCSAgICAgIHsKKwkJCS8qCisJCQkgKiBUaGUgdXNlciBtYXkgaGF2ZSBzcGVjaWZpZWQgdGhlIHRmdHAgaG9zdG5hbWUgaGVyZS4KKwkJCSAqIHNhdmUgaXQgc28gdGhhdCBpdCBjYW4gYmUgcmVzb2x2ZWQvbG9va2VkIHVwIGR1cmluZworCQkJICogYWN0dWFsIGRoY3BfcmVwbHkoKS4KKwkJCSAqLwkKKwkJCQorCQkJdGZ0cF9zbmFtZSA9IG9wdF9zdHJpbmdfYWxsb2MoY29tbWEpOworCQkJZGhjcF9uZXh0X3NlcnZlci5zX2FkZHIgPSAwOworCQkgICAgICB9CisJCSAgfQorCSAgICAgIH0KKwkgICAgCisJICAgIG5ldyA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBkaGNwX2Jvb3QpKTsKKwkgICAgbmV3LT5maWxlID0gZGhjcF9maWxlOworCSAgICBuZXctPnNuYW1lID0gZGhjcF9zbmFtZTsKKwkgICAgbmV3LT50ZnRwX3NuYW1lID0gdGZ0cF9zbmFtZTsKKwkgICAgbmV3LT5uZXh0X3NlcnZlciA9IGRoY3BfbmV4dF9zZXJ2ZXI7CisJICAgIG5ldy0+bmV0aWQgPSBpZDsKKwkgICAgbmV3LT5uZXh0ID0gZGFlbW9uLT5ib290X2NvbmZpZzsKKwkgICAgZGFlbW9uLT5ib290X2NvbmZpZyA9IG5ldzsKKwkgIH0KKyAgICAgIAorCWJyZWFrOworICAgICAgfQorCisgICAgY2FzZSBMT1BUX1JFUExZX0RFTEFZOiAvKiAtLWRoY3AtcmVwbHktZGVsYXkgKi8KKyAgICAgIHsKKwlzdHJ1Y3QgZGhjcF9uZXRpZCAqaWQgPSBOVUxMOworCXdoaWxlIChpc190YWdfcHJlZml4KGFyZykpCisJICB7CisJICAgIHN0cnVjdCBkaGNwX25ldGlkICpuZXdpZCA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBkaGNwX25ldGlkKSk7CisJICAgIG5ld2lkLT5uZXh0ID0gaWQ7CisJICAgIGlkID0gbmV3aWQ7CisJICAgIGNvbW1hID0gc3BsaXQoYXJnKTsKKwkgICAgbmV3aWQtPm5ldCA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKzQpOworCSAgICBhcmcgPSBjb21tYTsKKwkgIH07CisJCisJaWYgKCFhcmcpCisJICByZXRfZXJyKGdlbl9lcnIpOworCWVsc2UKKwkgIHsKKwkgICAgc3RydWN0IGRlbGF5X2NvbmZpZyAqbmV3OworCSAgICBpbnQgZGVsYXk7CisJICAgIGlmICghYXRvaV9jaGVjayhhcmcsICZkZWxheSkpCisgICAgICAgICAgICAgIHJldF9lcnIoZ2VuX2Vycik7CisJICAgIAorCSAgICBuZXcgPSBvcHRfbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGVsYXlfY29uZmlnKSk7CisJICAgIG5ldy0+ZGVsYXkgPSBkZWxheTsKKwkgICAgbmV3LT5uZXRpZCA9IGlkOworICAgICAgICAgICAgbmV3LT5uZXh0ID0gZGFlbW9uLT5kZWxheV9jb25mOworICAgICAgICAgICAgZGFlbW9uLT5kZWxheV9jb25mID0gbmV3OworCSAgfQorCQorCWJyZWFrOworICAgICAgfQorICAgICAgCisgICAgY2FzZSBMT1BUX1BYRV9QUk9NVDogIC8qIC0tcHhlLXByb21wdCAqLworICAgICAgIHsKKwkgc3RydWN0IGRoY3Bfb3B0ICpuZXcgPSBvcHRfbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGhjcF9vcHQpKTsKKwkgaW50IHRpbWVvdXQ7CisJIAorCSBuZXctPm5ldGlkID0gTlVMTDsKKwkgbmV3LT5vcHQgPSAxMDsgLyogUFhFX01FTlVfUFJPTVBUICovCisKKwkgd2hpbGUgKGlzX3RhZ19wcmVmaXgoYXJnKSkKKwkgIHsKKwkgICAgIHN0cnVjdCBkaGNwX25ldGlkICpubiA9IG9wdF9tYWxsb2Moc2l6ZW9mIChzdHJ1Y3QgZGhjcF9uZXRpZCkpOworCSAgICAgY29tbWEgPSBzcGxpdChhcmcpOworCSAgICAgbm4tPm5leHQgPSBuZXctPm5ldGlkOworCSAgICAgbmV3LT5uZXRpZCA9IG5uOworCSAgICAgbm4tPm5ldCA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKzQpOworCSAgICAgYXJnID0gY29tbWE7CisJICAgfQorCSAKKwkgaWYgKCFhcmcpCisJICAgcmV0X2VycihnZW5fZXJyKTsKKwkgZWxzZQorCSAgIHsKKwkgICAgIGNvbW1hID0gc3BsaXQoYXJnKTsKKwkgICAgIHVuaGlkZV9tZXRhcyhhcmcpOworCSAgICAgbmV3LT5sZW4gPSBzdHJsZW4oYXJnKSArIDE7CisJICAgICBuZXctPnZhbCA9IG9wdF9tYWxsb2MobmV3LT5sZW4pOworCSAgICAgbWVtY3B5KG5ldy0+dmFsICsgMSwgYXJnLCBuZXctPmxlbiAtIDEpOworCSAgICAgCisJICAgICBuZXctPnUudmVuZG9yX2NsYXNzID0gKHVuc2lnbmVkIGNoYXIgKikiUFhFQ2xpZW50IjsKKwkgICAgIG5ldy0+ZmxhZ3MgPSBESE9QVF9WRU5ET1I7CisJICAgICAKKwkgICAgIGlmIChjb21tYSAmJiBhdG9pX2NoZWNrKGNvbW1hLCAmdGltZW91dCkpCisJICAgICAgICoobmV3LT52YWwpID0gdGltZW91dDsKKwkgICAgIGVsc2UKKwkgICAgICAgKihuZXctPnZhbCkgPSAyNTU7CisKKwkgICAgIG5ldy0+bmV4dCA9IGRhZW1vbi0+ZGhjcF9vcHRzOworCSAgICAgZGFlbW9uLT5kaGNwX29wdHMgPSBuZXc7CisJICAgICBkYWVtb24tPmVuYWJsZV9weGUgPSAxOworCSAgIH0KKwkgCisJIGJyZWFrOworICAgICAgIH0KKyAgICAgICAKKyAgICBjYXNlIExPUFRfUFhFX1NFUlY6ICAvKiAtLXB4ZS1zZXJ2aWNlICovCisgICAgICAgeworCSBzdHJ1Y3QgcHhlX3NlcnZpY2UgKm5ldyA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBweGVfc2VydmljZSkpOworCSBjaGFyICpDU0FbXSA9IHsgIng4NlBDIiwgIlBDOTgiLCAiSUE2NF9FRkkiLCAiQWxwaGEiLCAiQXJjX3g4NiIsICJJbnRlbF9MZWFuX0NsaWVudCIsCisJCQkgIklBMzJfRUZJIiwgIng4Ni02NF9FRkkiLCAiWHNjYWxlX0VGSSIsICJCQ19FRkkiLAorCQkJICJBUk0zMl9FRkkiLCAiQVJNNjRfRUZJIiwgTlVMTCB9OyAgCisJIHN0YXRpYyBpbnQgYm9vdHR5cGUgPSAzMjc2ODsKKwkgCisJIG5ldy0+bmV0aWQgPSBOVUxMOworCSBuZXctPnNuYW1lID0gTlVMTDsKKwkgbmV3LT5zZXJ2ZXIuc19hZGRyID0gMDsKKworCSB3aGlsZSAoaXNfdGFnX3ByZWZpeChhcmcpKQorCSAgIHsKKwkgICAgIHN0cnVjdCBkaGNwX25ldGlkICpubiA9IG9wdF9tYWxsb2Moc2l6ZW9mIChzdHJ1Y3QgZGhjcF9uZXRpZCkpOworCSAgICAgY29tbWEgPSBzcGxpdChhcmcpOworCSAgICAgbm4tPm5leHQgPSBuZXctPm5ldGlkOworCSAgICAgbmV3LT5uZXRpZCA9IG5uOworCSAgICAgbm4tPm5ldCA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKzQpOworCSAgICAgYXJnID0gY29tbWE7CisJICAgfQorICAgICAgIAorCSBpZiAoYXJnICYmIChjb21tYSA9IHNwbGl0KGFyZykpKQorCSAgIHsKKwkgICAgIGZvciAoaSA9IDA7IENTQVtpXTsgaSsrKQorCSAgICAgICBpZiAoc3RyY2FzZWNtcChDU0FbaV0sIGFyZykgPT0gMCkKKwkJIGJyZWFrOworCSAgICAgCisJICAgICBpZiAoQ1NBW2ldIHx8IGF0b2lfY2hlY2soYXJnLCAmaSkpCisJICAgICAgIHsKKwkJIGFyZyA9IGNvbW1hOworCQkgY29tbWEgPSBzcGxpdChhcmcpOworCQkgCisJCSBuZXctPkNTQSA9IGk7CisJCSBuZXctPm1lbnUgPSBvcHRfc3RyaW5nX2FsbG9jKGFyZyk7CisJCSAKKwkJIGlmICghY29tbWEpCisJCSAgIHsKKwkJICAgICBuZXctPnR5cGUgPSAwOyAvKiBsb2NhbCBib290ICovCisJCSAgICAgbmV3LT5iYXNlbmFtZSA9IE5VTEw7CisJCSAgIH0KKwkJIGVsc2UKKwkJICAgeworCQkgICAgIGFyZyA9IGNvbW1hOworCQkgICAgIGNvbW1hID0gc3BsaXQoYXJnKTsKKwkJICAgICBpZiAoYXRvaV9jaGVjayhhcmcsICZpKSkKKwkJICAgICAgIHsKKwkJCSBuZXctPnR5cGUgPSBpOworCQkJIG5ldy0+YmFzZW5hbWUgPSBOVUxMOworCQkgICAgICAgfQorCQkgICAgIGVsc2UKKwkJICAgICAgIHsKKwkJCSBuZXctPnR5cGUgPSBib290dHlwZSsrOworCQkJIG5ldy0+YmFzZW5hbWUgPSBvcHRfc3RyaW5nX2FsbG9jKGFyZyk7CisJCSAgICAgICB9CisJCSAgICAgCisJCSAgICAgaWYgKGNvbW1hKQorCQkgICAgICAgeworCQkJIGlmICghaW5ldF9wdG9uKEFGX0lORVQsIGNvbW1hLCAmbmV3LT5zZXJ2ZXIpKQorCQkJICAgeworCQkJICAgICBuZXctPnNlcnZlci5zX2FkZHIgPSAwOworCQkJICAgICBuZXctPnNuYW1lID0gb3B0X3N0cmluZ19hbGxvYyhjb21tYSk7CisJCQkgICB9CisJCSAgICAgICAKKwkJICAgICAgIH0KKwkJICAgfQorCQkgCisJCSAvKiBPcmRlciBtYXR0ZXJzICovCisJCSBuZXctPm5leHQgPSBOVUxMOworCQkgaWYgKCFkYWVtb24tPnB4ZV9zZXJ2aWNlcykKKwkJICAgZGFlbW9uLT5weGVfc2VydmljZXMgPSBuZXc7IAorCQkgZWxzZQorCQkgICB7CisJCSAgICAgc3RydWN0IHB4ZV9zZXJ2aWNlICpzOworCQkgICAgIGZvciAocyA9IGRhZW1vbi0+cHhlX3NlcnZpY2VzOyBzLT5uZXh0OyBzID0gcy0+bmV4dCk7CisJCSAgICAgcy0+bmV4dCA9IG5ldzsKKwkJICAgfQorCQkgCisJCSBkYWVtb24tPmVuYWJsZV9weGUgPSAxOworCQkgYnJlYWs7CisJCQorCSAgICAgICB9CisJICAgfQorCSAKKwkgcmV0X2VycihnZW5fZXJyKTsKKyAgICAgICB9CisJIAorICAgIGNhc2UgJzQnOiAgLyogLS1kaGNwLW1hYyAqLworICAgICAgeworCWlmICghKGNvbW1hID0gc3BsaXQoYXJnKSkpCisJICByZXRfZXJyKGdlbl9lcnIpOworCWVsc2UKKwkgIHsKKwkgICAgc3RydWN0IGRoY3BfbWFjICpuZXcgPSBvcHRfbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGhjcF9tYWMpKTsKKwkgICAgbmV3LT5uZXRpZC5uZXQgPSBvcHRfc3RyaW5nX2FsbG9jKHNldF9wcmVmaXgoYXJnKSk7CisJICAgIHVuaGlkZV9tZXRhcyhjb21tYSk7CisJICAgIG5ldy0+aHdhZGRyX2xlbiA9IHBhcnNlX2hleChjb21tYSwgbmV3LT5od2FkZHIsIERIQ1BfQ0hBRERSX01BWCwgJm5ldy0+bWFzaywgJm5ldy0+aHdhZGRyX3R5cGUpOworCSAgICBpZiAobmV3LT5od2FkZHJfbGVuID09IC0xKQorCSAgICAgIHJldF9lcnIoZ2VuX2Vycik7CisJICAgIGVsc2UKKwkgICAgICB7CisJCW5ldy0+bmV4dCA9IGRhZW1vbi0+ZGhjcF9tYWNzOworCQlkYWVtb24tPmRoY3BfbWFjcyA9IG5ldzsKKwkgICAgICB9CisJICB9CisgICAgICB9CisgICAgICBicmVhazsKKworI2lmZGVmIE9QVElPTjZfUFJFRklYX0NMQVNTIAorICAgIGNhc2UgTE9QVF9QUkVGX0NMU1M6IC8qIC0tZGhjcC1wcmVmaXgtY2xhc3MgKi8KKyAgICAgIHsKKwlzdHJ1Y3QgcHJlZml4X2NsYXNzICpuZXcgPSBvcHRfbWFsbG9jKHNpemVvZihzdHJ1Y3QgcHJlZml4X2NsYXNzKSk7CisJCisJaWYgKCEoY29tbWEgPSBzcGxpdChhcmcpKSB8fAorCSAgICAhYXRvaV9jaGVjazE2KGNvbW1hLCAmbmV3LT5jbGFzcykpCisJICByZXRfZXJyKGdlbl9lcnIpOworCQorCW5ldy0+dGFnLm5ldCA9IG9wdF9zdHJpbmdfYWxsb2Moc2V0X3ByZWZpeChhcmcpKTsKKwluZXctPm5leHQgPSBkYWVtb24tPnByZWZpeF9jbGFzc2VzOworCWRhZW1vbi0+cHJlZml4X2NsYXNzZXMgPSBuZXc7CisJCisJYnJlYWs7CisgICAgICB9CisjZW5kaWYKKwkJCSAgICAgIAorCisgICAgY2FzZSAnVSc6ICAgICAgICAgICAvKiAtLWRoY3AtdmVuZG9yY2xhc3MgKi8KKyAgICBjYXNlICdqJzogICAgICAgICAgIC8qIC0tZGhjcC11c2VyY2xhc3MgKi8KKyAgICBjYXNlIExPUFRfQ0lSQ1VJVDogIC8qIC0tZGhjcC1jaXJjdWl0aWQgKi8KKyAgICBjYXNlIExPUFRfUkVNT1RFOiAgIC8qIC0tZGhjcC1yZW1vdGVpZCAqLworICAgIGNhc2UgTE9QVF9TVUJTQ1I6ICAgLyogLS1kaGNwLXN1YnNjcmlkICovCisgICAgICB7CisJIHVuc2lnbmVkIGNoYXIgKnA7CisJIGludCBkaWcgPSAwOworCSBzdHJ1Y3QgZGhjcF92ZW5kb3IgKm5ldyA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBkaGNwX3ZlbmRvcikpOworCSAKKwkgaWYgKCEoY29tbWEgPSBzcGxpdChhcmcpKSkKKwkgICByZXRfZXJyKGdlbl9lcnIpOworCQorCSBuZXctPm5ldGlkLm5ldCA9IG9wdF9zdHJpbmdfYWxsb2Moc2V0X3ByZWZpeChhcmcpKTsKKwkgLyogY2hlY2sgZm9yIGhleCBzdHJpbmcgLSBtdXN0IGRpZ2l0cyBtYXkgaW5jbHVkZSA6IG11c3Qgbm90IGhhdmUgbm90aGluZyBlbHNlLCAKKwkgICAgb25seSBhbGxvd2VkIGZvciBhZ2VudC1vcHRpb25zLiAqLworCSAKKwkgYXJnID0gY29tbWE7CisJIGlmICgoY29tbWEgPSBzcGxpdChhcmcpKSkKKwkgICB7CisJICAgICBpZiAob3B0aW9uICAhPSAnVScgfHwgc3Ryc3RyKGFyZywgImVudGVycHJpc2U6IikgIT0gYXJnKQorCSAgICAgICByZXRfZXJyKGdlbl9lcnIpOworCSAgICAgZWxzZQorCSAgICAgICBuZXctPmVudGVycHJpc2UgPSBhdG9pKGFyZysxMSk7CisJICAgfQorCSBlbHNlCisJICAgY29tbWEgPSBhcmc7CisJIAorCSBmb3IgKHAgPSAodW5zaWduZWQgY2hhciAqKWNvbW1hOyAqcDsgcCsrKQorCSAgIGlmIChpc3hkaWdpdCgqcCkpCisJICAgICBkaWcgPSAxOworCSAgIGVsc2UgaWYgKCpwICE9ICc6JykKKwkgICAgIGJyZWFrOworCSB1bmhpZGVfbWV0YXMoY29tbWEpOworCSBpZiAob3B0aW9uID09ICdVJyB8fCBvcHRpb24gPT0gJ2onIHx8ICpwIHx8ICFkaWcpCisJICAgeworCSAgICAgbmV3LT5sZW4gPSBzdHJsZW4oY29tbWEpOyAgCisJICAgICBuZXctPmRhdGEgPSBvcHRfbWFsbG9jKG5ldy0+bGVuKTsKKwkgICAgIG1lbWNweShuZXctPmRhdGEsIGNvbW1hLCBuZXctPmxlbik7CisJICAgfQorCSBlbHNlCisJICAgeworCSAgICAgbmV3LT5sZW4gPSBwYXJzZV9oZXgoY29tbWEsICh1bnNpZ25lZCBjaGFyICopY29tbWEsIHN0cmxlbihjb21tYSksIE5VTEwsIE5VTEwpOworCSAgICAgbmV3LT5kYXRhID0gb3B0X21hbGxvYyhuZXctPmxlbik7CisJICAgICBtZW1jcHkobmV3LT5kYXRhLCBjb21tYSwgbmV3LT5sZW4pOworCSAgIH0KKwkgCisJIHN3aXRjaCAob3B0aW9uKQorCSAgIHsKKwkgICBjYXNlICdqJzoKKwkgICAgIG5ldy0+bWF0Y2hfdHlwZSA9IE1BVENIX1VTRVI7CisJICAgICBicmVhazsKKwkgICBjYXNlICdVJzoKKwkgICAgIG5ldy0+bWF0Y2hfdHlwZSA9IE1BVENIX1ZFTkRPUjsKKwkgICAgIGJyZWFrOyAKKwkgICBjYXNlIExPUFRfQ0lSQ1VJVDoKKwkgICAgIG5ldy0+bWF0Y2hfdHlwZSA9IE1BVENIX0NJUkNVSVQ7CisJICAgICBicmVhazsKKwkgICBjYXNlIExPUFRfUkVNT1RFOgorCSAgICAgbmV3LT5tYXRjaF90eXBlID0gTUFUQ0hfUkVNT1RFOworCSAgICAgYnJlYWs7CisJICAgY2FzZSBMT1BUX1NVQlNDUjoKKwkgICAgIG5ldy0+bWF0Y2hfdHlwZSA9IE1BVENIX1NVQlNDUklCRVI7CisJICAgICBicmVhazsKKwkgICB9CisJIG5ldy0+bmV4dCA9IGRhZW1vbi0+ZGhjcF92ZW5kb3JzOworCSBkYWVtb24tPmRoY3BfdmVuZG9ycyA9IG5ldzsKKworCSBicmVhazsKKyAgICAgIH0KKyAgICAgIAorICAgIGNhc2UgTE9QVF9BTFRQT1JUOiAgIC8qIC0tZGhjcC1hbHRlcm5hdGUtcG9ydCAqLworICAgICAgaWYgKCFhcmcpCisJeworCSAgZGFlbW9uLT5kaGNwX3NlcnZlcl9wb3J0ID0gREhDUF9TRVJWRVJfQUxUUE9SVDsKKwkgIGRhZW1vbi0+ZGhjcF9jbGllbnRfcG9ydCA9IERIQ1BfQ0xJRU5UX0FMVFBPUlQ7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGNvbW1hID0gc3BsaXQoYXJnKTsKKwkgIGlmICghYXRvaV9jaGVjazE2KGFyZywgJmRhZW1vbi0+ZGhjcF9zZXJ2ZXJfcG9ydCkgfHwgCisJICAgICAgKGNvbW1hICYmICFhdG9pX2NoZWNrMTYoY29tbWEsICZkYWVtb24tPmRoY3BfY2xpZW50X3BvcnQpKSkKKwkgICAgcmV0X2VycihfKCJpbnZhbGlkIHBvcnQgbnVtYmVyIikpOworCSAgaWYgKCFjb21tYSkKKwkgICAgZGFlbW9uLT5kaGNwX2NsaWVudF9wb3J0ID0gZGFlbW9uLT5kaGNwX3NlcnZlcl9wb3J0KzE7IAorCX0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAnSic6ICAgICAgICAgICAgLyogLS1kaGNwLWlnbm9yZSAqLworICAgIGNhc2UgTE9QVF9OT19OQU1FUzogIC8qIC0tZGhjcC1pZ25vcmUtbmFtZXMgKi8KKyAgICBjYXNlIExPUFRfQlJPQURDQVNUOiAvKiAtLWRoY3AtYnJvYWRjYXN0ICovCisgICAgY2FzZSAnMyc6ICAgICAgICAgICAgLyogLS1ib290cC1keW5hbWljICovCisgICAgY2FzZSBMT1BUX0dFTl9OQU1FUzogLyogLS1kaGNwLWdlbmVyYXRlLW5hbWVzICovCisgICAgICB7CisJc3RydWN0IGRoY3BfbmV0aWRfbGlzdCAqbmV3ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IGRoY3BfbmV0aWRfbGlzdCkpOworCXN0cnVjdCBkaGNwX25ldGlkICpsaXN0ID0gTlVMTDsKKwlpZiAob3B0aW9uID09ICdKJykKKwkgIHsKKwkgICAgbmV3LT5uZXh0ID0gZGFlbW9uLT5kaGNwX2lnbm9yZTsKKwkgICAgZGFlbW9uLT5kaGNwX2lnbm9yZSA9IG5ldzsKKwkgIH0KKwllbHNlIGlmIChvcHRpb24gPT0gTE9QVF9CUk9BRENBU1QpCisJICB7CisJICAgIG5ldy0+bmV4dCA9IGRhZW1vbi0+Zm9yY2VfYnJvYWRjYXN0OworCSAgICBkYWVtb24tPmZvcmNlX2Jyb2FkY2FzdCA9IG5ldzsKKwkgIH0KKwllbHNlIGlmIChvcHRpb24gPT0gJzMnKQorCSAgeworCSAgICBuZXctPm5leHQgPSBkYWVtb24tPmJvb3RwX2R5bmFtaWM7CisJICAgIGRhZW1vbi0+Ym9vdHBfZHluYW1pYyA9IG5ldzsKKwkgIH0KKwllbHNlIGlmIChvcHRpb24gPT0gTE9QVF9HRU5fTkFNRVMpCisJICB7CisJICAgIG5ldy0+bmV4dCA9IGRhZW1vbi0+ZGhjcF9nZW5fbmFtZXM7CisJICAgIGRhZW1vbi0+ZGhjcF9nZW5fbmFtZXMgPSBuZXc7CisJICB9CisJZWxzZQorCSAgeworCSAgICBuZXctPm5leHQgPSBkYWVtb24tPmRoY3BfaWdub3JlX25hbWVzOworCSAgICBkYWVtb24tPmRoY3BfaWdub3JlX25hbWVzID0gbmV3OworCSAgfQorCQorCXdoaWxlIChhcmcpIHsKKwkgIHN0cnVjdCBkaGNwX25ldGlkICptZW1iZXIgPSBvcHRfbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGhjcF9uZXRpZCkpOworCSAgY29tbWEgPSBzcGxpdChhcmcpOworCSAgbWVtYmVyLT5uZXh0ID0gbGlzdDsKKwkgIGxpc3QgPSBtZW1iZXI7CisJICBpZiAoaXNfdGFnX3ByZWZpeChhcmcpKQorCSAgICBtZW1iZXItPm5ldCA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKzQpOworCSAgZWxzZQorCSAgICBtZW1iZXItPm5ldCA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKTsKKwkgIGFyZyA9IGNvbW1hOworCX0KKwkKKwluZXctPmxpc3QgPSBsaXN0OworCWJyZWFrOworICAgICAgfQorCisgICAgY2FzZSBMT1BUX1BST1hZOiAvKiAtLWRoY3AtcHJveHkgKi8KKyAgICAgIGRhZW1vbi0+b3ZlcnJpZGUgPSAxOworICAgICAgd2hpbGUgKGFyZykgeworCXN0cnVjdCBhZGRyX2xpc3QgKm5ldyA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBhZGRyX2xpc3QpKTsKKwljb21tYSA9IHNwbGl0KGFyZyk7CisJaWYgKCEoaW5ldF9wdG9uKEFGX0lORVQsIGFyZywgJm5ldy0+YWRkcikgPiAwKSkKKwkgIHJldF9lcnIoXygiYmFkIGRoY3AtcHJveHkgYWRkcmVzcyIpKTsKKwluZXctPm5leHQgPSBkYWVtb24tPm92ZXJyaWRlX3JlbGF5czsKKwlkYWVtb24tPm92ZXJyaWRlX3JlbGF5cyA9IG5ldzsKKwlhcmcgPSBjb21tYTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBMT1BUX1JFTEFZOiAvKiAtLWRoY3AtcmVsYXkgKi8KKyAgICAgIHsKKwlzdHJ1Y3QgZGhjcF9yZWxheSAqbmV3ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IGRoY3BfcmVsYXkpKTsKKwljb21tYSA9IHNwbGl0KGFyZyk7CisJbmV3LT5pbnRlcmZhY2UgPSBvcHRfc3RyaW5nX2FsbG9jKHNwbGl0KGNvbW1hKSk7CisJbmV3LT5pZmFjZV9pbmRleCA9IDA7CisJaWYgKGluZXRfcHRvbihBRl9JTkVULCBhcmcsICZuZXctPmxvY2FsKSAmJiBpbmV0X3B0b24oQUZfSU5FVCwgY29tbWEsICZuZXctPnNlcnZlcikpCisJICB7CisJICAgIG5ldy0+bmV4dCA9IGRhZW1vbi0+cmVsYXk0OworCSAgICBkYWVtb24tPnJlbGF5NCA9IG5ldzsKKwkgIH0KKyNpZmRlZiBIQVZFX0RIQ1A2CisJZWxzZSBpZiAoaW5ldF9wdG9uKEFGX0lORVQ2LCBhcmcsICZuZXctPmxvY2FsKSAmJiBpbmV0X3B0b24oQUZfSU5FVDYsIGNvbW1hLCAmbmV3LT5zZXJ2ZXIpKQorCSAgeworCSAgICBuZXctPm5leHQgPSBkYWVtb24tPnJlbGF5NjsKKwkgICAgZGFlbW9uLT5yZWxheTYgPSBuZXc7CisJICB9CisjZW5kaWYKKwllbHNlCisJICByZXRfZXJyKF8oIkJhZCBkaGNwLXJlbGF5IikpOworCQorCWJyZWFrOworICAgICAgfQorCisjZW5kaWYKKyAgICAgIAorI2lmZGVmIEhBVkVfREhDUDYKKyAgICBjYXNlIExPUFRfUkFfUEFSQU06IC8qIC0tcmEtcGFyYW0gKi8KKyAgICAgIGlmICgoY29tbWEgPSBzcGxpdChhcmcpKSkKKwl7CisJICBzdHJ1Y3QgcmFfaW50ZXJmYWNlICpuZXcgPSBvcHRfbWFsbG9jKHNpemVvZihzdHJ1Y3QgcmFfaW50ZXJmYWNlKSk7CisJICBuZXctPmxpZmV0aW1lID0gLTE7CisJICBuZXctPnByaW8gPSAwOworCSAgbmV3LT5tdHUgPSAwOworCSAgbmV3LT5tdHVfbmFtZSA9IE5VTEw7CisJICBuZXctPm5hbWUgPSBvcHRfc3RyaW5nX2FsbG9jKGFyZyk7CisJICBpZiAoc3RyY2FzZXN0cihjb21tYSwgIm10dToiKSA9PSBjb21tYSkKKwkgICAgeworCSAgICAgIGFyZyA9IGNvbW1hICsgNDsKKwkgICAgICBpZiAoIShjb21tYSA9IHNwbGl0KGNvbW1hKSkpCisJICAgICAgICBnb3RvIGVycjsKKwkgICAgICBpZiAoIXN0cmNhc2VjbXAoYXJnLCAib2ZmIikpCisJICAgICAgICBuZXctPm10dSA9IC0xOworCSAgICAgIGVsc2UgaWYgKCFhdG9pX2NoZWNrKGFyZywgJm5ldy0+bXR1KSkKKwkgICAgICAgIG5ldy0+bXR1X25hbWUgPSBvcHRfc3RyaW5nX2FsbG9jKGFyZyk7CisJICAgICAgZWxzZSBpZiAobmV3LT5tdHUgPCAxMjgwKQorCSAgICAgICAgZ290byBlcnI7CisJICAgIH0KKwkgIGlmIChzdHJjYXNlc3RyKGNvbW1hLCAiaGlnaCIpID09IGNvbW1hIHx8IHN0cmNhc2VzdHIoY29tbWEsICJsb3ciKSA9PSBjb21tYSkKKwkgICAgeworCSAgICAgIGlmICgqY29tbWEgPT0gJ2wnIHx8ICpjb21tYSA9PSAnTCcpCisJCW5ldy0+cHJpbyA9IDB4MTg7CisJICAgICAgZWxzZQorCQluZXctPnByaW8gPSAweDA4OworCSAgICAgIGNvbW1hID0gc3BsaXQoY29tbWEpOworCSAgICB9CisJICAgYXJnID0gc3BsaXQoY29tbWEpOworCSAgIGlmICghYXRvaV9jaGVjayhjb21tYSwgJm5ldy0+aW50ZXJ2YWwpIHx8IAorCSAgICAgIChhcmcgJiYgIWF0b2lfY2hlY2soYXJnLCAmbmV3LT5saWZldGltZSkpKQorZXJyOgorCSAgICByZXRfZXJyKF8oImJhZCBSQS1wYXJhbXMiKSk7CisJICAKKwkgIG5ldy0+bmV4dCA9IGRhZW1vbi0+cmFfaW50ZXJmYWNlczsKKwkgIGRhZW1vbi0+cmFfaW50ZXJmYWNlcyA9IG5ldzsKKwl9CisgICAgICBicmVhazsKKyAgICAgIAorICAgIGNhc2UgTE9QVF9EVUlEOiAvKiAtLWRoY3AtZHVpZCAqLworICAgICAgaWYgKCEoY29tbWEgPSBzcGxpdChhcmcpKSB8fCAhYXRvaV9jaGVjayhhcmcsIChpbnQgKikmZGFlbW9uLT5kdWlkX2VudGVycHJpc2UpKQorCXJldF9lcnIoXygiYmFkIERVSUQiKSk7CisgICAgICBlbHNlCisJeworCSAgZGFlbW9uLT5kdWlkX2NvbmZpZ19sZW4gPSBwYXJzZV9oZXgoY29tbWEsKHVuc2lnbmVkIGNoYXIgKiljb21tYSwgc3RybGVuKGNvbW1hKSwgTlVMTCwgTlVMTCk7CisJICBkYWVtb24tPmR1aWRfY29uZmlnID0gb3B0X21hbGxvYyhkYWVtb24tPmR1aWRfY29uZmlnX2xlbik7CisJICBtZW1jcHkoZGFlbW9uLT5kdWlkX2NvbmZpZywgY29tbWEsIGRhZW1vbi0+ZHVpZF9jb25maWdfbGVuKTsKKwl9CisgICAgICBicmVhazsKKyNlbmRpZgorCisgICAgY2FzZSAnVic6ICAvKiAtLWFsaWFzICovCisgICAgICB7CisJY2hhciAqZGFzaCwgKmFbM10gPSB7IE5VTEwsIE5VTEwsIE5VTEwgfTsKKwlpbnQgayA9IDA7CisJc3RydWN0IGRvY3RvciAqbmV3ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IGRvY3RvcikpOworCW5ldy0+bmV4dCA9IGRhZW1vbi0+ZG9jdG9yczsKKwlkYWVtb24tPmRvY3RvcnMgPSBuZXc7CisJbmV3LT5tYXNrLnNfYWRkciA9IDB4ZmZmZmZmZmY7CisJbmV3LT5lbmQuc19hZGRyID0gMDsKKworCWlmICgoYVswXSA9IGFyZykpCisJICBmb3IgKGsgPSAxOyBrIDwgMzsgaysrKQorCSAgICB7CisJICAgICAgaWYgKCEoYVtrXSA9IHNwbGl0KGFbay0xXSkpKQorCQlicmVhazsKKwkgICAgICB1bmhpZGVfbWV0YXMoYVtrXSk7CisJICAgIH0KKwkKKwlkYXNoID0gc3BsaXRfY2hyKGFbMF0sICctJyk7CisKKwlpZiAoKGsgPCAyKSB8fCAKKwkgICAgKCEoaW5ldF9wdG9uKEFGX0lORVQsIGFbMF0sICZuZXctPmluKSA+IDApKSB8fAorCSAgICAoIShpbmV0X3B0b24oQUZfSU5FVCwgYVsxXSwgJm5ldy0+b3V0KSA+IDApKSkKKwkgIG9wdGlvbiA9ICc/JzsKKwkKKwlpZiAoayA9PSAzICYmICFpbmV0X3B0b24oQUZfSU5FVCwgYVsyXSwgJm5ldy0+bWFzaykpCisJICBvcHRpb24gPSAnPyc7CisJCisJaWYgKGRhc2ggJiYgCisJICAgICghKGluZXRfcHRvbihBRl9JTkVULCBkYXNoLCAmbmV3LT5lbmQpID4gMCkgfHwKKwkgICAgICFpc19zYW1lX25ldChuZXctPmluLCBuZXctPmVuZCwgbmV3LT5tYXNrKSB8fAorCSAgICAgbnRvaGwobmV3LT5pbi5zX2FkZHIpID4gbnRvaGwobmV3LT5lbmQuc19hZGRyKSkpCisJICByZXRfZXJyKF8oImludmFsaWQgYWxpYXMgcmFuZ2UiKSk7CisJCisJYnJlYWs7CisgICAgICB9CisgICAgICAKKyAgICBjYXNlIExPUFRfSU5UTkFNRTogIC8qIC0taW50ZXJmYWNlLW5hbWUgKi8KKyAgICAgIHsKKwlzdHJ1Y3QgaW50ZXJmYWNlX25hbWUgKm5ldywgKip1cDsKKwljaGFyICpkb21haW4gPSBOVUxMOworCisJY29tbWEgPSBzcGxpdChhcmcpOworCQorCWlmICghY29tbWEgfHwgIShkb21haW4gPSBjYW5vbmljYWxpc2Vfb3B0KGFyZykpKQorCSAgcmV0X2VycihfKCJiYWQgaW50ZXJmYWNlIG5hbWUiKSk7CisJCisJbmV3ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IGludGVyZmFjZV9uYW1lKSk7CisJbmV3LT5uZXh0ID0gTlVMTDsKKwluZXctPmFkZHIgPSBOVUxMOworCQorCS8qIEFkZCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LCBzbyB0aGF0IGZpcnN0IG5hbWUKKwkgICBvZiBhbiBpbnRlcmZhY2UgaXMgdXNlZCBmb3IgUFRSIGxvb2t1cHMuICovCisJZm9yICh1cCA9ICZkYWVtb24tPmludF9uYW1lczsgKnVwOyB1cCA9ICYoKCp1cCktPm5leHQpKTsKKwkqdXAgPSBuZXc7CisJbmV3LT5uYW1lID0gZG9tYWluOworCW5ldy0+ZmFtaWx5ID0gMDsKKwlhcmcgPSBzcGxpdF9jaHIoY29tbWEsICcvJyk7CisJaWYgKGFyZykKKwkgIHsKKwkgICAgaWYgKHN0cmNtcChhcmcsICI0IikgPT0gMCkKKwkgICAgICBuZXctPmZhbWlseSA9IEFGX0lORVQ7CisjaWZkZWYgSEFWRV9JUFY2CisJICAgIGVsc2UgaWYgKHN0cmNtcChhcmcsICI2IikgPT0gMCkKKwkgICAgICBuZXctPmZhbWlseSA9IEFGX0lORVQ2OworI2VuZGlmCisJICAgIGVsc2UKKwkgICAgICByZXRfZXJyKGdlbl9lcnIpOworCSAgfSAKKwluZXctPmludHIgPSBvcHRfc3RyaW5nX2FsbG9jKGNvbW1hKTsKKwlicmVhazsKKyAgICAgIH0KKyAgICAgIAorICAgIGNhc2UgTE9QVF9DTkFNRTogLyogLS1jbmFtZSAqLworICAgICAgeworCXN0cnVjdCBjbmFtZSAqbmV3OworCWNoYXIgKmFsaWFzLCAqdGFyZ2V0LCAqbGFzdCwgKnBlbjsKKwlpbnQgdHRsID0gLTE7CisKKwlmb3IgKGxhc3QgPSBwZW4gPSBOVUxMLCBjb21tYSA9IGFyZzsgY29tbWE7IGNvbW1hID0gc3BsaXQoY29tbWEpKQorCSAgeworCSAgICBwZW4gPSBsYXN0OworCSAgICBsYXN0ID0gY29tbWE7CisJICB9CisKKwlpZiAoIXBlbikKKwkgIHJldF9lcnIoXygiYmFkIENOQU1FIikpOworCQorCWlmIChwZW4gIT0gYXJnICYmIGF0b2lfY2hlY2sobGFzdCwgJnR0bCkpCisJICBsYXN0ID0gcGVuOworCSAgCQorICAgIAl0YXJnZXQgPSBjYW5vbmljYWxpc2Vfb3B0KGxhc3QpOworCisJd2hpbGUgKGFyZyAhPSBsYXN0KQorCSAgeworCSAgICBhbGlhcyA9IGNhbm9uaWNhbGlzZV9vcHQoYXJnKTsKKworCSAgICBpZiAoIWFsaWFzIHx8ICF0YXJnZXQpCisJICAgICAgcmV0X2VycihfKCJiYWQgQ05BTUUiKSk7CisJICAgIAorCSAgICBmb3IgKG5ldyA9IGRhZW1vbi0+Y25hbWVzOyBuZXc7IG5ldyA9IG5ldy0+bmV4dCkKKwkgICAgICBpZiAoaG9zdG5hbWVfaXNlcXVhbChuZXctPmFsaWFzLCBhbGlhcykpCisJCXJldF9lcnIoXygiZHVwbGljYXRlIENOQU1FIikpOworCSAgICBuZXcgPSBvcHRfbWFsbG9jKHNpemVvZihzdHJ1Y3QgY25hbWUpKTsKKwkgICAgbmV3LT5uZXh0ID0gZGFlbW9uLT5jbmFtZXM7CisJICAgIGRhZW1vbi0+Y25hbWVzID0gbmV3OworCSAgICBuZXctPmFsaWFzID0gYWxpYXM7CisJICAgIG5ldy0+dGFyZ2V0ID0gdGFyZ2V0OworCSAgICBuZXctPnR0bCA9IHR0bDsKKworCSAgICBhcmcgKz0gc3RybGVuKGFyZykrMTsKKwkgIH0KKyAgICAgIAorCWJyZWFrOworICAgICAgfQorCisgICAgY2FzZSBMT1BUX1BUUjogIC8qIC0tcHRyLXJlY29yZCAqLworICAgICAgeworCXN0cnVjdCBwdHJfcmVjb3JkICpuZXc7CisJY2hhciAqZG9tLCAqdGFyZ2V0ID0gTlVMTDsKKworCWNvbW1hID0gc3BsaXQoYXJnKTsKKwkKKwlpZiAoIShkb20gPSBjYW5vbmljYWxpc2Vfb3B0KGFyZykpIHx8CisJICAgIChjb21tYSAmJiAhKHRhcmdldCA9IGNhbm9uaWNhbGlzZV9vcHQoY29tbWEpKSkpCisJICByZXRfZXJyKF8oImJhZCBQVFIgcmVjb3JkIikpOworCWVsc2UKKwkgIHsKKwkgICAgbmV3ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IHB0cl9yZWNvcmQpKTsKKwkgICAgbmV3LT5uZXh0ID0gZGFlbW9uLT5wdHI7CisJICAgIGRhZW1vbi0+cHRyID0gbmV3OworCSAgICBuZXctPm5hbWUgPSBkb207CisJICAgIG5ldy0+cHRyID0gdGFyZ2V0OworCSAgfQorCWJyZWFrOworICAgICAgfQorCisgICAgY2FzZSBMT1BUX05BUFRSOiAvKiAtLW5hcHRyLXJlY29yZCAqLworICAgICAgeworCWNoYXIgKmFbN10gPSB7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfTsKKwlpbnQgayA9IDA7CisJc3RydWN0IG5hcHRyICpuZXc7CisJaW50IG9yZGVyLCBwcmVmOworCWNoYXIgKm5hbWUsICpyZXBsYWNlID0gTlVMTDsKKworCWlmICgoYVswXSA9IGFyZykpCisJICBmb3IgKGsgPSAxOyBrIDwgNzsgaysrKQorCSAgICBpZiAoIShhW2tdID0gc3BsaXQoYVtrLTFdKSkpCisJICAgICAgYnJlYWs7CisJCisJCisJaWYgKGsgPCA2IHx8IAorCSAgICAhKG5hbWUgPSBjYW5vbmljYWxpc2Vfb3B0KGFbMF0pKSB8fAorCSAgICAhYXRvaV9jaGVjazE2KGFbMV0sICZvcmRlcikgfHwgCisJICAgICFhdG9pX2NoZWNrMTYoYVsyXSwgJnByZWYpIHx8CisJICAgIChrID09IDcgJiYgIShyZXBsYWNlID0gY2Fub25pY2FsaXNlX29wdChhWzZdKSkpKQorCSAgcmV0X2VycihfKCJiYWQgTkFQVFIgcmVjb3JkIikpOworCWVsc2UKKwkgIHsKKwkgICAgbmV3ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IG5hcHRyKSk7CisJICAgIG5ldy0+bmV4dCA9IGRhZW1vbi0+bmFwdHI7CisJICAgIGRhZW1vbi0+bmFwdHIgPSBuZXc7CisJICAgIG5ldy0+bmFtZSA9IG5hbWU7CisJICAgIG5ldy0+ZmxhZ3MgPSBvcHRfc3RyaW5nX2FsbG9jKGFbM10pOworCSAgICBuZXctPnNlcnZpY2VzID0gb3B0X3N0cmluZ19hbGxvYyhhWzRdKTsKKwkgICAgbmV3LT5yZWdleHAgPSBvcHRfc3RyaW5nX2FsbG9jKGFbNV0pOworCSAgICBuZXctPnJlcGxhY2UgPSByZXBsYWNlOworCSAgICBuZXctPm9yZGVyID0gb3JkZXI7CisJICAgIG5ldy0+cHJlZiA9IHByZWY7CisJICB9CisJYnJlYWs7CisgICAgICB9CisKKyAgICBjYXNlIExPUFRfUlI6IC8qIGRucy1yciAqLworICAgICAgeworICAgICAgIAlzdHJ1Y3QgdHh0X3JlY29yZCAqbmV3OworCXNpemVfdCBsZW4gPSAwOworCWNoYXIgKmRhdGE7CisJaW50IHZhbDsKKworCWNvbW1hID0gc3BsaXQoYXJnKTsKKwlkYXRhID0gc3BsaXQoY29tbWEpOworCQkKKwluZXcgPSBvcHRfbWFsbG9jKHNpemVvZihzdHJ1Y3QgdHh0X3JlY29yZCkpOworCW5ldy0+bmV4dCA9IGRhZW1vbi0+cnI7CisJZGFlbW9uLT5yciA9IG5ldzsKKwkKKwlpZiAoIWF0b2lfY2hlY2soY29tbWEsICZ2YWwpIHx8IAorCSAgICAhKG5ldy0+bmFtZSA9IGNhbm9uaWNhbGlzZV9vcHQoYXJnKSkgfHwKKwkgICAgKGRhdGEgJiYgKGxlbiA9IHBhcnNlX2hleChkYXRhLCAodW5zaWduZWQgY2hhciAqKWRhdGEsIC0xLCBOVUxMLCBOVUxMKSkgPT0gLTFVKSkKKwkgIHJldF9lcnIoXygiYmFkIFJSIHJlY29yZCIpKTsKKwkgICAJCisJbmV3LT5jbGFzcyA9IHZhbDsKKwluZXctPmxlbiA9IDA7CisJCisJaWYgKGRhdGEpCisJICB7CisJICAgIG5ldy0+dHh0PW9wdF9tYWxsb2MobGVuKTsKKwkgICAgbmV3LT5sZW4gPSBsZW47CisJICAgIG1lbWNweShuZXctPnR4dCwgZGF0YSwgbGVuKTsKKwkgIH0KKwkKKwlicmVhazsKKyAgICAgIH0KKworICAgIGNhc2UgJ1knOiAgLyogLS10eHQtcmVjb3JkICovCisgICAgICB7CisJc3RydWN0IHR4dF9yZWNvcmQgKm5ldzsKKwl1bnNpZ25lZCBjaGFyICpwLCAqY250OworCXNpemVfdCBsZW47CisKKwljb21tYSA9IHNwbGl0KGFyZyk7CisJCQorCW5ldyA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCB0eHRfcmVjb3JkKSk7CisJbmV3LT5uZXh0ID0gZGFlbW9uLT50eHQ7CisJZGFlbW9uLT50eHQgPSBuZXc7CisJbmV3LT5jbGFzcyA9IENfSU47CisJbmV3LT5zdGF0ID0gMDsKKworCWlmICghKG5ldy0+bmFtZSA9IGNhbm9uaWNhbGlzZV9vcHQoYXJnKSkpCisJICByZXRfZXJyKF8oImJhZCBUWFQgcmVjb3JkIikpOworCQorCWxlbiA9IGNvbW1hID8gc3RybGVuKGNvbW1hKSA6IDA7CisJbGVuICs9IChsZW4vMjU1KSArIDE7IC8qIHJvb20gZm9yIGV4dHJhIGNvdW50cyAqLworCW5ldy0+dHh0ID0gcCA9IG9wdF9tYWxsb2MobGVuKTsKKworCWNudCA9IHArKzsKKwkqY250ID0gMDsKKwkKKwl3aGlsZSAoY29tbWEgJiYgKmNvbW1hKQorCSAgeworCSAgICB1bnNpZ25lZCBjaGFyIGMgPSAodW5zaWduZWQgY2hhcikqY29tbWErKzsKKworCSAgICBpZiAoYyA9PSAnLCcgfHwgKmNudCA9PSAyNTUpCisJICAgICAgeworCQlpZiAoYyAhPSAnLCcpCisJCSAgY29tbWEtLTsKKwkJY250ID0gcCsrOworCQkqY250ID0gMDsKKwkgICAgICB9CisJICAgIGVsc2UKKwkgICAgICB7CisJCSpwKysgPSB1bmhpZGVfbWV0YShjKTsKKwkJKCpjbnQpKys7CisJICAgICAgfQorCSAgfQorCisJbmV3LT5sZW4gPSBwIC0gbmV3LT50eHQ7CisKKwlicmVhazsKKyAgICAgIH0KKyAgICAgIAorICAgIGNhc2UgJ1cnOiAgLyogLS1zcnYtaG9zdCAqLworICAgICAgeworCWludCBwb3J0ID0gMSwgcHJpb3JpdHkgPSAwLCB3ZWlnaHQgPSAwOworCWNoYXIgKm5hbWUsICp0YXJnZXQgPSBOVUxMOworCXN0cnVjdCBteF9zcnZfcmVjb3JkICpuZXc7CisJCisJY29tbWEgPSBzcGxpdChhcmcpOworCQorCWlmICghKG5hbWUgPSBjYW5vbmljYWxpc2Vfb3B0KGFyZykpKQorCSAgcmV0X2VycihfKCJiYWQgU1JWIHJlY29yZCIpKTsKKwkKKwlpZiAoY29tbWEpCisJICB7CisJICAgIGFyZyA9IGNvbW1hOworCSAgICBjb21tYSA9IHNwbGl0KGFyZyk7CisJICAgIGlmICghKHRhcmdldCA9IGNhbm9uaWNhbGlzZV9vcHQoYXJnKSkpCisJICAgICAgcmV0X2VycihfKCJiYWQgU1JWIHRhcmdldCIpKTsKKwkJCisJICAgIGlmIChjb21tYSkKKwkgICAgICB7CisJCWFyZyA9IGNvbW1hOworCQljb21tYSA9IHNwbGl0KGFyZyk7CisJCWlmICghYXRvaV9jaGVjazE2KGFyZywgJnBvcnQpKQorCQkgIHJldF9lcnIoXygiaW52YWxpZCBwb3J0IG51bWJlciIpKTsKKwkJCisJCWlmIChjb21tYSkKKwkJICB7CisJCSAgICBhcmcgPSBjb21tYTsKKwkJICAgIGNvbW1hID0gc3BsaXQoYXJnKTsKKwkJICAgIGlmICghYXRvaV9jaGVjazE2KGFyZywgJnByaW9yaXR5KSkKKwkJICAgICAgcmV0X2VycihfKCJpbnZhbGlkIHByaW9yaXR5IikpOworCQkJCisJCSAgICBpZiAoY29tbWEgJiYgIWF0b2lfY2hlY2sxNihjb21tYSwgJndlaWdodCkpCisJCSAgICAgIHJldF9lcnIoXygiaW52YWxpZCB3ZWlnaHQiKSk7CisJCSAgfQorCSAgICAgIH0KKwkgIH0KKwkKKwluZXcgPSBvcHRfbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXhfc3J2X3JlY29yZCkpOworCW5ldy0+bmV4dCA9IGRhZW1vbi0+bXhuYW1lczsKKwlkYWVtb24tPm14bmFtZXMgPSBuZXc7CisJbmV3LT5pc3NydiA9IDE7CisJbmV3LT5uYW1lID0gbmFtZTsKKwluZXctPnRhcmdldCA9IHRhcmdldDsKKwluZXctPnNydnBvcnQgPSBwb3J0OworCW5ldy0+cHJpb3JpdHkgPSBwcmlvcml0eTsKKwluZXctPndlaWdodCA9IHdlaWdodDsKKwlicmVhazsKKyAgICAgIH0KKyAgICAgIAorICAgIGNhc2UgTE9QVF9IT1NUX1JFQzogLyogLS1ob3N0LXJlY29yZCAqLworICAgICAgeworCXN0cnVjdCBob3N0X3JlY29yZCAqbmV3ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IGhvc3RfcmVjb3JkKSk7CisJbWVtc2V0KG5ldywgMCwgc2l6ZW9mKHN0cnVjdCBob3N0X3JlY29yZCkpOworCW5ldy0+dHRsID0gLTE7CisKKwlpZiAoIWFyZyB8fCAhKGNvbW1hID0gc3BsaXQoYXJnKSkpCisJICByZXRfZXJyKF8oIkJhZCBob3N0LXJlY29yZCIpKTsKKwkKKwl3aGlsZSAoYXJnKQorCSAgeworCSAgICBzdHJ1Y3QgYWxsX2FkZHIgYWRkcjsKKwkgICAgY2hhciAqZGlnOworCisJICAgIGZvciAoZGlnID0gYXJnOyAqZGlnICE9IDA7IGRpZysrKQorCSAgICAgIGlmICgqZGlnIDwgJzAnIHx8ICpkaWcgPiAnOScpCisJCWJyZWFrOworCSAgICBpZiAoKmRpZyA9PSAwKQorCSAgICAgIG5ldy0+dHRsID0gYXRvaShhcmcpOworCSAgICBlbHNlIGlmIChpbmV0X3B0b24oQUZfSU5FVCwgYXJnLCAmYWRkcikpCisJICAgICAgbmV3LT5hZGRyID0gYWRkci5hZGRyLmFkZHI0OworI2lmZGVmIEhBVkVfSVBWNgorCSAgICBlbHNlIGlmIChpbmV0X3B0b24oQUZfSU5FVDYsIGFyZywgJmFkZHIpKQorCSAgICAgIG5ldy0+YWRkcjYgPSBhZGRyLmFkZHIuYWRkcjY7CisjZW5kaWYKKwkgICAgZWxzZQorCSAgICAgIHsKKwkJaW50IG5vbWVtOworCQljaGFyICpjYW5vbiA9IGNhbm9uaWNhbGlzZShhcmcsICZub21lbSk7CisJCXN0cnVjdCBuYW1lX2xpc3QgKm5sID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IG5hbWVfbGlzdCkpOworCQlpZiAoIWNhbm9uKQorCQkgIHJldF9lcnIoXygiQmFkIG5hbWUgaW4gaG9zdC1yZWNvcmQiKSk7CisKKwkJbmwtPm5hbWUgPSBjYW5vbjsKKwkJLyoga2VlcCBvcmRlciwgc28gdGhhdCBQVFIgcmVjb3JkIGdvZXMgdG8gZmlyc3QgbmFtZSAqLworCQlubC0+bmV4dCA9IE5VTEw7CisJCWlmICghbmV3LT5uYW1lcykKKwkJICBuZXctPm5hbWVzID0gbmw7CisJCWVsc2UKKwkJICB7IAorCQkgICAgc3RydWN0IG5hbWVfbGlzdCAqdG1wOworCQkgICAgZm9yICh0bXAgPSBuZXctPm5hbWVzOyB0bXAtPm5leHQ7IHRtcCA9IHRtcC0+bmV4dCk7CisJCSAgICB0bXAtPm5leHQgPSBubDsKKwkJICB9CisJICAgICAgfQorCSAgICAKKwkgICAgYXJnID0gY29tbWE7CisJICAgIGNvbW1hID0gc3BsaXQoYXJnKTsKKwkgIH0KKworCS8qIEtlZXAgbGlzdCBvcmRlciAqLworCWlmICghZGFlbW9uLT5ob3N0X3JlY29yZHNfdGFpbCkKKwkgIGRhZW1vbi0+aG9zdF9yZWNvcmRzID0gbmV3OworCWVsc2UKKwkgIGRhZW1vbi0+aG9zdF9yZWNvcmRzX3RhaWwtPm5leHQgPSBuZXc7CisJbmV3LT5uZXh0ID0gTlVMTDsKKwlkYWVtb24tPmhvc3RfcmVjb3Jkc190YWlsID0gbmV3OworCWJyZWFrOworICAgICAgfQorCisjaWZkZWYgSEFWRV9ETlNTRUMKKyAgICBjYXNlIExPUFRfRE5TU0VDX1NUQU1QOgorICAgICAgZGFlbW9uLT50aW1lc3RhbXBfZmlsZSA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKTsgCisgICAgICBicmVhazsKKworICAgIGNhc2UgTE9QVF9UUlVTVF9BTkNIT1I6CisgICAgICB7CisJc3RydWN0IGRzX2NvbmZpZyAqbmV3ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IGRzX2NvbmZpZykpOworICAgICAgCWNoYXIgKmNwLCAqY3AxLCAqa2V5aGV4LCAqZGlnZXN0LCAqYWxnbyA9IE5VTEw7CisJaW50IGxlbjsKKwkKKwluZXctPmNsYXNzID0gQ19JTjsKKworCWlmICgoY29tbWEgPSBzcGxpdChhcmcpKSAmJiAoYWxnbyA9IHNwbGl0KGNvbW1hKSkpCisJICB7CisJICAgIGludCBjbGFzcyA9IDA7CisJICAgIGlmIChzdHJjbXAoY29tbWEsICJJTiIpID09IDApCisJICAgICAgY2xhc3MgPSBDX0lOOworCSAgICBlbHNlIGlmIChzdHJjbXAoY29tbWEsICJDSCIpID09IDApCisJICAgICAgY2xhc3MgPSBDX0NIQU9TOworCSAgICBlbHNlIGlmIChzdHJjbXAoY29tbWEsICJIUyIpID09IDApCisJICAgICAgY2xhc3MgPSBDX0hFU0lPRDsKKwkgICAgCisJICAgIGlmIChjbGFzcyAhPSAwKQorCSAgICAgIHsKKwkJbmV3LT5jbGFzcyA9IGNsYXNzOworCQljb21tYSA9IGFsZ287CisJCWFsZ28gPSBzcGxpdChjb21tYSk7CisJICAgICAgfQorCSAgfQorCQkgIAorICAgICAgIAlpZiAoIWNvbW1hIHx8ICFhbGdvIHx8ICEoZGlnZXN0ID0gc3BsaXQoYWxnbykpIHx8ICEoa2V5aGV4ID0gc3BsaXQoZGlnZXN0KSkgfHwKKwkgICAgIWF0b2lfY2hlY2sxNihjb21tYSwgJm5ldy0+a2V5dGFnKSB8fCAKKwkgICAgIWF0b2lfY2hlY2s4KGFsZ28sICZuZXctPmFsZ28pIHx8CisJICAgICFhdG9pX2NoZWNrOChkaWdlc3QsICZuZXctPmRpZ2VzdF90eXBlKSB8fAorCSAgICAhKG5ldy0+bmFtZSA9IGNhbm9uaWNhbGlzZV9vcHQoYXJnKSkpCisJICByZXRfZXJyKF8oImJhZCB0cnVzdCBhbmNob3IiKSk7CisJICAgIAorCS8qIFVwcGVyIGJvdW5kIG9uIGxlbmd0aCAqLworCWxlbiA9ICgyKnN0cmxlbihrZXloZXgpKSsxOworCW5ldy0+ZGlnZXN0ID0gb3B0X21hbGxvYyhsZW4pOworCXVuaGlkZV9tZXRhcyhrZXloZXgpOworCS8qIDQwMzQ6ICJXaGl0ZXNwYWNlIGlzIGFsbG93ZWQgd2l0aGluIGRpZ2l0cyIgKi8KKwlmb3IgKGNwID0ga2V5aGV4OyAqY3A7ICkKKwkgIGlmIChpc3NwYWNlKCpjcCkpCisJICAgIGZvciAoY3AxID0gY3A7ICpjcDE7IGNwMSsrKQorCSAgICAgICpjcDEgPSAqKGNwMSsxKTsKKwkgIGVsc2UKKwkgICAgY3ArKzsKKwlpZiAoKG5ldy0+ZGlnZXN0bGVuID0gcGFyc2VfaGV4KGtleWhleCwgKHVuc2lnbmVkIGNoYXIgKiluZXctPmRpZ2VzdCwgbGVuLCBOVUxMLCBOVUxMKSkgPT0gLTEpCisJICByZXRfZXJyKF8oImJhZCBIRVggaW4gdHJ1c3QgYW5jaG9yIikpOworCQorCW5ldy0+bmV4dCA9IGRhZW1vbi0+ZHM7CisJZGFlbW9uLT5kcyA9IG5ldzsKKwkKKwlicmVhazsKKyAgICAgIH0KKyNlbmRpZgorCQkKKyAgICBkZWZhdWx0OgorICAgICAgcmV0X2VycihfKCJ1bnN1cHBvcnRlZCBvcHRpb24gKGNoZWNrIHRoYXQgZG5zbWFzcSB3YXMgY29tcGlsZWQgd2l0aCBESENQL1RGVFAvRE5TU0VDL0RCdXMgc3VwcG9ydCkiKSk7CisgICAgICAKKyAgICB9CisgIAorICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgcmVhZF9maWxlKGNoYXIgKmZpbGUsIEZJTEUgKmYsIGludCBoYXJkX29wdCkJCit7CisgIHZvbGF0aWxlIGludCBsaW5lbm8gPSAwOworICBjaGFyICpidWZmID0gZGFlbW9uLT5uYW1lYnVmZjsKKyAgCisgIHdoaWxlIChmZ2V0cyhidWZmLCBNQVhETkFNRSwgZikpCisgICAgeworICAgICAgaW50IHdoaXRlLCBpOworICAgICAgdm9sYXRpbGUgaW50IG9wdGlvbiA9IChoYXJkX29wdCA9PSBMT1BUX1JFVl9TRVJWKSA/IDAgOiBoYXJkX29wdDsKKyAgICAgIGNoYXIgKmVycm1lc3MsICpwLCAqYXJnLCAqc3RhcnQ7CisgICAgICBzaXplX3QgbGVuOworCisgICAgICAvKiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIGxvbmdqbXBzIGhlcmUgaWYgbWVtX3JlY292ZXIgPT0gMSAqLyAKKyAgICAgIGlmIChvcHRpb24gIT0gMCB8fCBoYXJkX29wdCA9PSBMT1BUX1JFVl9TRVJWKQorCXsKKwkgIGlmIChzZXRqbXAobWVtX2ptcCkpCisJICAgIGNvbnRpbnVlOworCSAgbWVtX3JlY292ZXIgPSAxOworCX0KKyAgICAgIAorICAgICAgYXJnID0gTlVMTDsKKyAgICAgIGxpbmVubysrOworICAgICAgZXJybWVzcyA9IE5VTEw7CisgICAgICAKKyAgICAgIC8qIEltcGxlbWVudCBxdW90ZXMsIGluc2lkZSBxdW90ZXMgd2UgYWxsb3cgXFwgXCIgXG4gYW5kIFx0IAorCSBtZXRhY2hhcmFjdGVycyBnZXQgaGlkZGVuIGFsc28gc3RyaXAgY29tbWVudHMgKi8KKyAgICAgIGZvciAod2hpdGUgPSAxLCBwID0gYnVmZjsgKnA7IHArKykKKwl7CisJICBpZiAoKnAgPT0gJyInKQorCSAgICB7CisJICAgICAgbWVtbW92ZShwLCBwKzEsIHN0cmxlbihwKzEpKzEpOworCisJICAgICAgZm9yKDsgKnAgJiYgKnAgIT0gJyInOyBwKyspCisJCXsKKwkJICBpZiAoKnAgPT0gJ1xcJyAmJiBzdHJjaHIoIlwidG5lYnJcXCIsIHBbMV0pKQorCQkgICAgeworCQkgICAgICBpZiAocFsxXSA9PSAndCcpCisJCQlwWzFdID0gJ1x0JzsKKwkJICAgICAgZWxzZSBpZiAocFsxXSA9PSAnbicpCisJCQlwWzFdID0gJ1xuJzsKKwkJICAgICAgZWxzZSBpZiAocFsxXSA9PSAnYicpCisJCQlwWzFdID0gJ1xiJzsKKwkJICAgICAgZWxzZSBpZiAocFsxXSA9PSAncicpCisJCQlwWzFdID0gJ1xyJzsKKwkJICAgICAgZWxzZSBpZiAocFsxXSA9PSAnZScpIC8qIGVzY2FwZSAqLworCQkJcFsxXSA9ICdcMDMzJzsKKwkJICAgICAgbWVtbW92ZShwLCBwKzEsIHN0cmxlbihwKzEpKzEpOworCQkgICAgfQorCQkgICpwID0gaGlkZV9tZXRhKCpwKTsKKwkJfQorCisJICAgICAgaWYgKCpwID09IDApIAorCQl7CisJCSAgZXJybWVzcyA9IF8oIm1pc3NpbmcgXCIiKTsKKwkJICBnb3RvIG9vcHM7IAorCQl9CisKKwkgICAgICBtZW1tb3ZlKHAsIHArMSwgc3RybGVuKHArMSkrMSk7CisJICAgIH0KKworCSAgaWYgKGlzc3BhY2UoKnApKQorCSAgICB7CisJICAgICAgKnAgPSAnICc7CisJICAgICAgd2hpdGUgPSAxOworCSAgICB9CisJICBlbHNlIAorCSAgICB7CisJICAgICAgaWYgKHdoaXRlICYmICpwID09ICcjJykKKwkJeyAKKwkJICAqcCA9IDA7CisJCSAgYnJlYWs7CisJCX0KKwkgICAgICB3aGl0ZSA9IDA7CisJICAgIH0gCisJfQorCisgICAgICAKKyAgICAgIC8qIHN0cmlwIGxlYWRpbmcgc3BhY2VzICovCisgICAgICBmb3IgKHN0YXJ0ID0gYnVmZjsgKnN0YXJ0ICYmICpzdGFydCA9PSAnICc7IHN0YXJ0KyspOworICAgICAgCisgICAgICAvKiBzdHJpcCB0cmFpbGluZyBzcGFjZXMgKi8KKyAgICAgIGZvciAobGVuID0gc3RybGVuKHN0YXJ0KTsgKGxlbiAhPSAwKSAmJiAoc3RhcnRbbGVuLTFdID09ICcgJyk7IGxlbi0tKTsKKyAgICAgIAorICAgICAgaWYgKGxlbiA9PSAwKQorCWNvbnRpbnVlOyAKKyAgICAgIGVsc2UKKwlzdGFydFtsZW5dID0gMDsKKyAgICAgIAorICAgICAgaWYgKG9wdGlvbiAhPSAwKQorCWFyZyA9IHN0YXJ0OworICAgICAgZWxzZSBpZiAoKHA9c3RyY2hyKHN0YXJ0LCAnPScpKSkKKwl7CisJICAvKiBhbGxvdyBzcGFjZXMgYXJvdW5kICI9IiAqLworCSAgZm9yIChhcmcgPSBwKzE7ICphcmcgPT0gJyAnOyBhcmcrKyk7CisJICBmb3IgKDsgcCA+PSBzdGFydCAmJiAoKnAgPT0gJyAnIHx8ICpwID09ICc9Jyk7IHAtLSkKKwkgICAgKnAgPSAwOworCX0KKyAgICAgIGVsc2UKKwlhcmcgPSBOVUxMOworCisgICAgICBpZiAob3B0aW9uID09IDApCisJeworCSAgZm9yIChvcHRpb24gPSAwLCBpID0gMDsgb3B0c1tpXS5uYW1lOyBpKyspIAorCSAgICBpZiAoc3RyY21wKG9wdHNbaV0ubmFtZSwgc3RhcnQpID09IDApCisJICAgICAgeworCQlvcHRpb24gPSBvcHRzW2ldLnZhbDsKKwkJYnJlYWs7CisJICAgICAgfQorCSAgCisJICBpZiAoIW9wdGlvbikKKwkgICAgZXJybWVzcyA9IF8oImJhZCBvcHRpb24iKTsKKwkgIGVsc2UgaWYgKG9wdHNbaV0uaGFzX2FyZyA9PSAwICYmIGFyZykKKwkgICAgZXJybWVzcyA9IF8oImV4dHJhbmVvdXMgcGFyYW1ldGVyIik7CisJICBlbHNlIGlmIChvcHRzW2ldLmhhc19hcmcgPT0gMSAmJiAhYXJnKQorCSAgICBlcnJtZXNzID0gXygibWlzc2luZyBwYXJhbWV0ZXIiKTsKKwkgIGVsc2UgaWYgKGhhcmRfb3B0ID09IExPUFRfUkVWX1NFUlYgJiYgb3B0aW9uICE9ICdTJyAmJiBvcHRpb24gIT0gTE9QVF9SRVZfU0VSVikKKwkgICAgZXJybWVzcyA9IF8oImlsbGVnYWwgb3B0aW9uIik7CisJfQorCisgICAgb29wczoKKyAgICAgIGlmIChlcnJtZXNzKQorCXN0cmNweShkYWVtb24tPm5hbWVidWZmLCBlcnJtZXNzKTsKKwkgIAorICAgICAgaWYgKGVycm1lc3MgfHwgIW9uZV9vcHQob3B0aW9uLCBhcmcsIGJ1ZmYsIF8oImVycm9yIiksIDAsIGhhcmRfb3B0ID09IExPUFRfUkVWX1NFUlYpKQorCXsKKwkgIHNwcmludGYoZGFlbW9uLT5uYW1lYnVmZiArIHN0cmxlbihkYWVtb24tPm5hbWVidWZmKSwgXygiIGF0IGxpbmUgJWQgb2YgJXMiKSwgbGluZW5vLCBmaWxlKTsKKwkgIGlmIChoYXJkX29wdCAhPSAwKQorCSAgICBteV9zeXNsb2coTE9HX0VSUiwgIiVzIiwgZGFlbW9uLT5uYW1lYnVmZik7CisJICBlbHNlCisJICAgIGRpZSgiJXMiLCBkYWVtb24tPm5hbWVidWZmLCBFQ19CQURDT05GKTsKKwl9CisgICAgfQorCisgIG1lbV9yZWNvdmVyID0gMDsKKyAgZmNsb3NlKGYpOworfQorCisjaWZkZWYgSEFWRV9ESENQCitpbnQgb3B0aW9uX3JlYWRfZHluZmlsZShjaGFyICpmaWxlLCBpbnQgZmxhZ3MpCit7CisgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX0lORk8sIF8oInJlYWQgJXMiKSwgZmlsZSk7CisgIAorICBpZiAoZmxhZ3MgJiBBSF9ESENQX0hTVCkKKyAgICByZXR1cm4gb25lX2ZpbGUoZmlsZSwgTE9QVF9CQU5LKTsKKyAgZWxzZSBpZiAoZmxhZ3MgJiBBSF9ESENQX09QVCkKKyAgICByZXR1cm4gb25lX2ZpbGUoZmlsZSwgTE9QVF9PUFRTKTsKKyAgCisgIHJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgb25lX2ZpbGUoY2hhciAqZmlsZSwgaW50IGhhcmRfb3B0KQoreworICBGSUxFICpmOworICBpbnQgbm9maWxlX29rID0gMDsKKyAgc3RhdGljIGludCByZWFkX3N0ZGluID0gMDsKKyAgc3RhdGljIHN0cnVjdCBmaWxlcmVhZCB7CisgICAgZGV2X3QgZGV2OworICAgIGlub190IGlubzsKKyAgICBzdHJ1Y3QgZmlsZXJlYWQgKm5leHQ7CisgIH0gKmZpbGVzcmVhZCA9IE5VTEw7CisgIAorICBpZiAoaGFyZF9vcHQgPT0gJzcnKQorICAgIHsKKyAgICAgIC8qIGRlZmF1bHQgY29uZi1maWxlIHJlYWRpbmcgKi8KKyAgICAgIGhhcmRfb3B0ID0gMDsKKyAgICAgIG5vZmlsZV9vayA9IDE7CisgICAgfQorCisgIGlmIChoYXJkX29wdCA9PSAwICYmIHN0cmNtcChmaWxlLCAiLSIpID09IDApCisgICAgeworICAgICAgaWYgKHJlYWRfc3RkaW4gPT0gMSkKKwlyZXR1cm4gMTsKKyAgICAgIHJlYWRfc3RkaW4gPSAxOworICAgICAgZmlsZSA9ICJzdGRpbiI7CisgICAgICBmID0gc3RkaW47CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogaWdub3JlIHJlcGVhdGVkIGZpbGVzLiAqLworICAgICAgc3RydWN0IHN0YXQgc3RhdGJ1ZjsKKyAgICAKKyAgICAgIGlmIChoYXJkX29wdCA9PSAwICYmIHN0YXQoZmlsZSwgJnN0YXRidWYpID09IDApCisJeworCSAgc3RydWN0IGZpbGVyZWFkICpyOworCSAgCisJICBmb3IgKHIgPSBmaWxlc3JlYWQ7IHI7IHIgPSByLT5uZXh0KQorCSAgICBpZiAoci0+ZGV2ID09IHN0YXRidWYuc3RfZGV2ICYmIHItPmlubyA9PSBzdGF0YnVmLnN0X2lubykKKwkgICAgICByZXR1cm4gMTsKKwkgIAorCSAgciA9IHNhZmVfbWFsbG9jKHNpemVvZihzdHJ1Y3QgZmlsZXJlYWQpKTsKKwkgIHItPm5leHQgPSBmaWxlc3JlYWQ7CisJICBmaWxlc3JlYWQgPSByOworCSAgci0+ZGV2ID0gc3RhdGJ1Zi5zdF9kZXY7CisJICByLT5pbm8gPSBzdGF0YnVmLnN0X2lubzsKKwl9CisgICAgICAKKyAgICAgIGlmICghKGYgPSBmb3BlbihmaWxlLCAiciIpKSkKKwl7ICAgCisJICBpZiAoZXJybm8gPT0gRU5PRU5UICYmIG5vZmlsZV9vaykKKwkgICAgcmV0dXJuIDE7IC8qIE5vIGNvbmZmaWxlLCBhbGwgZG9uZS4gKi8KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGNoYXIgKnN0ciA9IF8oImNhbm5vdCByZWFkICVzOiAlcyIpOworCSAgICAgIGlmIChoYXJkX29wdCAhPSAwKQorCQl7CisJCSAgbXlfc3lzbG9nKExPR19FUlIsIHN0ciwgZmlsZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJICByZXR1cm4gMDsKKwkJfQorCSAgICAgIGVsc2UKKwkJZGllKHN0ciwgZmlsZSwgRUNfRklMRSk7CisJICAgIH0KKwl9IAorICAgIH0KKyAgCisgIHJlYWRfZmlsZShmaWxlLCBmLCBoYXJkX29wdCk7CisgIHJldHVybiAxOworfQorCisvKiBleHBhbmQgYW55IG5hbWUgd2hpY2ggaXMgYSBkaXJlY3RvcnkgKi8KK3N0cnVjdCBob3N0c2ZpbGUgKmV4cGFuZF9maWxlbGlzdChzdHJ1Y3QgaG9zdHNmaWxlICpsaXN0KQoreworICB1bnNpZ25lZCBpbnQgaTsKKyAgc3RydWN0IGhvc3RzZmlsZSAqYWg7CisKKyAgLyogZmluZCBsYXJnZXN0IHVzZWQgaW5kZXggKi8KKyAgZm9yIChpID0gU1JDX0FILCBhaCA9IGxpc3Q7IGFoOyBhaCA9IGFoLT5uZXh0KQorICAgIHsKKyAgICAgIGlmIChpIDw9IGFoLT5pbmRleCkKKwlpID0gYWgtPmluZGV4ICsgMTsKKworICAgICAgaWYgKGFoLT5mbGFncyAmIEFIX0RJUikKKwlhaC0+ZmxhZ3MgfD0gQUhfSU5BQ1RJVkU7CisgICAgICBlbHNlCisJYWgtPmZsYWdzICY9IH5BSF9JTkFDVElWRTsKKyAgICB9CisKKyAgZm9yIChhaCA9IGxpc3Q7IGFoOyBhaCA9IGFoLT5uZXh0KQorICAgIGlmICghKGFoLT5mbGFncyAmIEFIX0lOQUNUSVZFKSkKKyAgICAgIHsKKwlzdHJ1Y3Qgc3RhdCBidWY7CisJaWYgKHN0YXQoYWgtPmZuYW1lLCAmYnVmKSAhPSAtMSAmJiBTX0lTRElSKGJ1Zi5zdF9tb2RlKSkKKwkgIHsKKwkgICAgRElSICpkaXJfc3RyZWFtOworCSAgICBzdHJ1Y3QgZGlyZW50ICplbnQ7CisJICAgIAorCSAgICAvKiBkb24ndCByZWFkIHRoaXMgYXMgYSBmaWxlICovCisJICAgIGFoLT5mbGFncyB8PSBBSF9JTkFDVElWRTsKKwkgICAgCisJICAgIGlmICghKGRpcl9zdHJlYW0gPSBvcGVuZGlyKGFoLT5mbmFtZSkpKQorCSAgICAgIG15X3N5c2xvZyhMT0dfRVJSLCBfKCJjYW5ub3QgYWNjZXNzIGRpcmVjdG9yeSAlczogJXMiKSwgCisJCQlhaC0+Zm5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJICAgIGVsc2UKKwkgICAgICB7CisJCXdoaWxlICgoZW50ID0gcmVhZGRpcihkaXJfc3RyZWFtKSkpCisJCSAgeworCQkgICAgc2l6ZV90IGxlbmRpciA9IHN0cmxlbihhaC0+Zm5hbWUpOworCQkgICAgc2l6ZV90IGxlbmZpbGUgPSBzdHJsZW4oZW50LT5kX25hbWUpOworCQkgICAgc3RydWN0IGhvc3RzZmlsZSAqYWgxOworCQkgICAgY2hhciAqcGF0aDsKKwkJICAgIAorCQkgICAgLyogaWdub3JlIGVtYWNzIGJhY2t1cHMgYW5kIGRvdGZpbGVzICovCisJCSAgICBpZiAobGVuZmlsZSA9PSAwIHx8IAorCQkJZW50LT5kX25hbWVbbGVuZmlsZSAtIDFdID09ICd+JyB8fAorCQkJKGVudC0+ZF9uYW1lWzBdID09ICcjJyAmJiBlbnQtPmRfbmFtZVtsZW5maWxlIC0gMV0gPT0gJyMnKSB8fAorCQkJZW50LT5kX25hbWVbMF0gPT0gJy4nKQorCQkgICAgICBjb250aW51ZTsKKwkJICAgIAorCQkgICAgLyogc2VlIGlmIHdlIGhhdmUgYW4gZXhpc3RpbmcgcmVjb3JkLgorCQkgICAgICAgZGlyIGlzIGFoLT5mbmFtZSAKKwkJICAgICAgIGZpbGUgaXMgZW50LT5kX25hbWUKKwkJICAgICAgIHBhdGggdG8gbWF0Y2ggaXMgYWgxLT5mbmFtZSAqLworCQkgICAgCisJCSAgICBmb3IgKGFoMSA9IGxpc3Q7IGFoMTsgYWgxID0gYWgxLT5uZXh0KQorCQkgICAgICB7CisJCQlpZiAobGVuZGlyIDwgc3RybGVuKGFoMS0+Zm5hbWUpICYmCisJCQkgICAgc3Ryc3RyKGFoMS0+Zm5hbWUsIGFoLT5mbmFtZSkgPT0gYWgxLT5mbmFtZSAmJgorCQkJICAgIGFoMS0+Zm5hbWVbbGVuZGlyXSA9PSAnLycgJiYKKwkJCSAgICBzdHJjbXAoYWgxLT5mbmFtZSArIGxlbmRpciArIDEsIGVudC0+ZF9uYW1lKSA9PSAwKQorCQkJICB7CisJCQkgICAgYWgxLT5mbGFncyAmPSB+QUhfSU5BQ1RJVkU7CisJCQkgICAgYnJlYWs7CisJCQkgIH0KKwkJICAgICAgfQorCQkgICAgCisJCSAgICAvKiBtYWtlIG5ldyByZWNvcmQgKi8KKwkJICAgIGlmICghYWgxKQorCQkgICAgICB7CisJCQlpZiAoIShhaDEgPSB3aGluZV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBob3N0c2ZpbGUpKSkpCisJCQkgIGNvbnRpbnVlOworCQkJCisJCQlpZiAoIShwYXRoID0gd2hpbmVfbWFsbG9jKGxlbmRpciArIGxlbmZpbGUgKyAyKSkpCisJCQkgIHsKKwkJCSAgICBmcmVlKGFoMSk7CisJCQkgICAgY29udGludWU7CisJCQkgIH0KKwkJICAgICAgCQorCQkJc3RyY3B5KHBhdGgsIGFoLT5mbmFtZSk7CisJCQlzdHJjYXQocGF0aCwgIi8iKTsKKwkJCXN0cmNhdChwYXRoLCBlbnQtPmRfbmFtZSk7CisJCQlhaDEtPmZuYW1lID0gcGF0aDsKKwkJCWFoMS0+aW5kZXggPSBpKys7CisJCQlhaDEtPmZsYWdzID0gQUhfRElSOworCQkJYWgxLT5uZXh0ID0gbGlzdDsKKwkJCWxpc3QgPSBhaDE7CisJCSAgICAgIH0KKwkJICAgIAorCQkgICAgLyogaW5hY3RpdmF0ZSByZWNvcmQgaWYgbm90IHJlZ3VsYXIgZmlsZSAqLworCQkgICAgaWYgKChhaDEtPmZsYWdzICYgQUhfRElSKSAmJiBzdGF0KGFoMS0+Zm5hbWUsICZidWYpICE9IC0xICYmICFTX0lTUkVHKGJ1Zi5zdF9tb2RlKSkKKwkJICAgICAgYWgxLT5mbGFncyB8PSBBSF9JTkFDVElWRTsgCisJCSAgICAKKwkJICB9CisJCWNsb3NlZGlyKGRpcl9zdHJlYW0pOworCSAgICAgIH0KKwkgIH0KKyAgICAgIH0KKyAgCisgIHJldHVybiBsaXN0OworfQorCit2b2lkIHJlYWRfc2VydmVyc19maWxlKHZvaWQpCit7CisgIEZJTEUgKmY7CisKKyAgaWYgKCEoZiA9IGZvcGVuKGRhZW1vbi0+c2VydmVyc19maWxlLCAiciIpKSkKKyAgICB7CisgICAgICAgbXlfc3lzbG9nKExPR19FUlIsIF8oImNhbm5vdCByZWFkICVzOiAlcyIpLCBkYWVtb24tPnNlcnZlcnNfZmlsZSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICByZXR1cm47CisgICAgfQorICAKKyAgbWFya19zZXJ2ZXJzKFNFUlZfRlJPTV9GSUxFKTsKKyAgY2xlYW51cF9zZXJ2ZXJzKCk7CisgIAorICByZWFkX2ZpbGUoZGFlbW9uLT5zZXJ2ZXJzX2ZpbGUsIGYsIExPUFRfUkVWX1NFUlYpOworfQorIAorCisjaWZkZWYgSEFWRV9ESENQCit2b2lkIHJlcmVhZF9kaGNwKHZvaWQpCit7CisgIHN0cnVjdCBob3N0c2ZpbGUgKmhmOworCisgIGlmIChkYWVtb24tPmRoY3BfaG9zdHNfZmlsZSkKKyAgICB7CisgICAgICBzdHJ1Y3QgZGhjcF9jb25maWcgKmNvbmZpZ3MsICpjcCwgKip1cDsKKyAgCisgICAgICAvKiByZW1vdmUgZXhpc3RpbmcuLi4gKi8KKyAgICAgIGZvciAodXAgPSAmZGFlbW9uLT5kaGNwX2NvbmYsIGNvbmZpZ3MgPSBkYWVtb24tPmRoY3BfY29uZjsgY29uZmlnczsgY29uZmlncyA9IGNwKQorCXsKKwkgIGNwID0gY29uZmlncy0+bmV4dDsKKwkgIAorCSAgaWYgKGNvbmZpZ3MtPmZsYWdzICYgQ09ORklHX0JBTkspCisJICAgIHsKKwkgICAgICBzdHJ1Y3QgaHdhZGRyX2NvbmZpZyAqbWFjLCAqdG1wOworCSAgICAgIHN0cnVjdCBkaGNwX25ldGlkX2xpc3QgKmxpc3QsICp0bXBsaXN0OworCSAgICAgIAorCSAgICAgIGZvciAobWFjID0gY29uZmlncy0+aHdhZGRyOyBtYWM7IG1hYyA9IHRtcCkKKwkJeworCQkgIHRtcCA9IG1hYy0+bmV4dDsKKwkJICBmcmVlKG1hYyk7CisJCX0KKworCSAgICAgIGlmIChjb25maWdzLT5mbGFncyAmIENPTkZJR19DTElEKQorCQlmcmVlKGNvbmZpZ3MtPmNsaWQpOworCisJICAgICAgZm9yIChsaXN0ID0gY29uZmlncy0+bmV0aWQ7IGxpc3Q7IGxpc3QgPSB0bXBsaXN0KQorCQl7CisJCSAgZnJlZShsaXN0LT5saXN0KTsKKwkJICB0bXBsaXN0ID0gbGlzdC0+bmV4dDsKKwkJICBmcmVlKGxpc3QpOworCQl9CisJICAgICAgCisJICAgICAgaWYgKGNvbmZpZ3MtPmZsYWdzICYgQ09ORklHX05BTUUpCisJCWZyZWUoY29uZmlncy0+aG9zdG5hbWUpOworCSAgICAgIAorCSAgICAgICp1cCA9IGNvbmZpZ3MtPm5leHQ7CisJICAgICAgZnJlZShjb25maWdzKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB1cCA9ICZjb25maWdzLT5uZXh0OworCX0KKyAgICAgIAorICAgICAgZGFlbW9uLT5kaGNwX2hvc3RzX2ZpbGUgPSBleHBhbmRfZmlsZWxpc3QoZGFlbW9uLT5kaGNwX2hvc3RzX2ZpbGUpOworICAgICAgZm9yIChoZiA9IGRhZW1vbi0+ZGhjcF9ob3N0c19maWxlOyBoZjsgaGYgPSBoZi0+bmV4dCkKKwkgaWYgKCEoaGYtPmZsYWdzICYgQUhfSU5BQ1RJVkUpKQorCSAgIHsKKwkgICAgIGlmIChvbmVfZmlsZShoZi0+Zm5hbWUsIExPUFRfQkFOSykpICAKKwkgICAgICAgbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfSU5GTywgXygicmVhZCAlcyIpLCBoZi0+Zm5hbWUpOworCSAgIH0KKyAgICB9CisKKyAgaWYgKGRhZW1vbi0+ZGhjcF9vcHRzX2ZpbGUpCisgICAgeworICAgICAgc3RydWN0IGRoY3Bfb3B0ICpvcHRzLCAqY3AsICoqdXA7CisgICAgICBzdHJ1Y3QgZGhjcF9uZXRpZCAqaWQsICpuZXh0OworCisgICAgICBmb3IgKHVwID0gJmRhZW1vbi0+ZGhjcF9vcHRzLCBvcHRzID0gZGFlbW9uLT5kaGNwX29wdHM7IG9wdHM7IG9wdHMgPSBjcCkKKwl7CisJICBjcCA9IG9wdHMtPm5leHQ7CisJICAKKwkgIGlmIChvcHRzLT5mbGFncyAmIERIT1BUX0JBTkspCisJICAgIHsKKwkgICAgICBpZiAoKG9wdHMtPmZsYWdzICYgREhPUFRfVkVORE9SKSkKKwkJZnJlZShvcHRzLT51LnZlbmRvcl9jbGFzcyk7CisJICAgICAgZnJlZShvcHRzLT52YWwpOworCSAgICAgIGZvciAoaWQgPSBvcHRzLT5uZXRpZDsgaWQ7IGlkID0gbmV4dCkKKwkJeworCQkgIG5leHQgPSBpZC0+bmV4dDsKKwkJICBmcmVlKGlkLT5uZXQpOworCQkgIGZyZWUoaWQpOworCQl9CisJICAgICAgKnVwID0gb3B0cy0+bmV4dDsKKwkgICAgICBmcmVlKG9wdHMpOworCSAgICB9CisJICBlbHNlCisJICAgIHVwID0gJm9wdHMtPm5leHQ7CisJfQorICAgICAgCisgICAgICBkYWVtb24tPmRoY3Bfb3B0c19maWxlID0gZXhwYW5kX2ZpbGVsaXN0KGRhZW1vbi0+ZGhjcF9vcHRzX2ZpbGUpOworICAgICAgZm9yIChoZiA9IGRhZW1vbi0+ZGhjcF9vcHRzX2ZpbGU7IGhmOyBoZiA9IGhmLT5uZXh0KQorCWlmICghKGhmLT5mbGFncyAmIEFIX0lOQUNUSVZFKSkKKwkgIHsKKwkgICAgaWYgKG9uZV9maWxlKGhmLT5mbmFtZSwgTE9QVF9PUFRTKSkgIAorCSAgICAgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX0lORk8sIF8oInJlYWQgJXMiKSwgaGYtPmZuYW1lKTsKKwkgIH0KKyAgICB9Cit9CisjZW5kaWYKKyAgICAKK3ZvaWQgcmVhZF9vcHRzKGludCBhcmdjLCBjaGFyICoqYXJndiwgY2hhciAqY29tcGlsZV9vcHRzKQoreworICBjaGFyICpidWZmID0gb3B0X21hbGxvYyhNQVhETkFNRSk7CisgIGludCBvcHRpb24sIGNvbmZmaWxlX29wdCA9ICc3JywgdGVzdG1vZGUgPSAwOworICBjaGFyICphcmcsICpjb25mZmlsZSA9IENPTkZGSUxFOworICAgICAgCisgIG9wdGVyciA9IDA7CisKKyAgZGFlbW9uID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IGRhZW1vbikpOworICBtZW1zZXQoZGFlbW9uLCAwLCBzaXplb2Yoc3RydWN0IGRhZW1vbikpOworICBkYWVtb24tPm5hbWVidWZmID0gYnVmZjsKKworICAvKiBTZXQgZGVmYXVsdHMgLSBldmVyeXRoaW5nIGVsc2UgaXMgemVybyBvciBOVUxMICovCisgIGRhZW1vbi0+Y2FjaGVzaXplID0gQ0FDSEVTSVo7CisgIGRhZW1vbi0+ZnRhYnNpemUgPSBGVEFCU0laOworICBkYWVtb24tPnBvcnQgPSBOQU1FU0VSVkVSX1BPUlQ7CisgIGRhZW1vbi0+ZGhjcF9jbGllbnRfcG9ydCA9IERIQ1BfQ0xJRU5UX1BPUlQ7CisgIGRhZW1vbi0+ZGhjcF9zZXJ2ZXJfcG9ydCA9IERIQ1BfU0VSVkVSX1BPUlQ7CisgIGRhZW1vbi0+ZGVmYXVsdF9yZXNvbHYuaXNfZGVmYXVsdCA9IDE7CisgIGRhZW1vbi0+ZGVmYXVsdF9yZXNvbHYubmFtZSA9IFJFU09MVkZJTEU7CisgIGRhZW1vbi0+cmVzb2x2X2ZpbGVzID0gJmRhZW1vbi0+ZGVmYXVsdF9yZXNvbHY7CisgIGRhZW1vbi0+dXNlcm5hbWUgPSBDSFVTRVI7CisgIGRhZW1vbi0+cnVuZmlsZSA9ICBSVU5GSUxFOworICBkYWVtb24tPmRoY3BfbWF4ID0gTUFYTEVBU0VTOworICBkYWVtb24tPnRmdHBfbWF4ID0gVEZUUF9NQVhfQ09OTkVDVElPTlM7CisgIGRhZW1vbi0+ZWRuc19wa3RzeiA9IEVETlNfUEtUU1o7CisgIGRhZW1vbi0+bG9nX2ZhYyA9IC0xOworICBkYWVtb24tPmF1dGhfdHRsID0gQVVUSF9UVEw7IAorICBkYWVtb24tPnNvYV9yZWZyZXNoID0gU09BX1JFRlJFU0g7CisgIGRhZW1vbi0+c29hX3JldHJ5ID0gU09BX1JFVFJZOworICBkYWVtb24tPnNvYV9leHBpcnkgPSBTT0FfRVhQSVJZOworICBkYWVtb24tPm1heF9wb3J0ID0gTUFYX1BPUlQ7CisKKyNpZm5kZWYgTk9fSUQKKyAgYWRkX3R4dCgidmVyc2lvbi5iaW5kIiwgImRuc21hc3EtIiBWRVJTSU9OLCAwICk7CisgIGFkZF90eHQoImF1dGhvcnMuYmluZCIsICJTaW1vbiBLZWxsZXkiLCAwKTsKKyAgYWRkX3R4dCgiY29weXJpZ2h0LmJpbmQiLCBDT1BZUklHSFQsIDApOworICBhZGRfdHh0KCJjYWNoZXNpemUuYmluZCIsIE5VTEwsIFRYVF9TVEFUX0NBQ0hFU0laRSk7CisgIGFkZF90eHQoImluc2VydGlvbnMuYmluZCIsIE5VTEwsIFRYVF9TVEFUX0lOU0VSVFMpOworICBhZGRfdHh0KCJldmljdGlvbnMuYmluZCIsIE5VTEwsIFRYVF9TVEFUX0VWSUNUSU9OUyk7CisgIGFkZF90eHQoIm1pc3Nlcy5iaW5kIiwgTlVMTCwgVFhUX1NUQVRfTUlTU0VTKTsKKyAgYWRkX3R4dCgiaGl0cy5iaW5kIiwgTlVMTCwgVFhUX1NUQVRfSElUUyk7CisjaWZkZWYgSEFWRV9BVVRICisgIGFkZF90eHQoImF1dGguYmluZCIsIE5VTEwsIFRYVF9TVEFUX0FVVEgpOworI2VuZGlmCisgIGFkZF90eHQoInNlcnZlcnMuYmluZCIsIE5VTEwsIFRYVF9TVEFUX1NFUlZFUlMpOworI2VuZGlmCisKKyAgd2hpbGUgKDEpIAorICAgIHsKKyNpZmRlZiBIQVZFX0dFVE9QVF9MT05HCisgICAgICBvcHRpb24gPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCBPUFRTVFJJTkcsIG9wdHMsIE5VTEwpOworI2Vsc2UKKyAgICAgIG9wdGlvbiA9IGdldG9wdChhcmdjLCBhcmd2LCBPUFRTVFJJTkcpOworI2VuZGlmCisgICAgICAKKyAgICAgIGlmIChvcHRpb24gPT0gLTEpCisJeworCSAgZm9yICg7IG9wdGluZCA8IGFyZ2M7IG9wdGluZCsrKQorCSAgICB7CisJICAgICAgdW5zaWduZWQgY2hhciAqYyA9ICh1bnNpZ25lZCBjaGFyICopYXJndltvcHRpbmRdOworCSAgICAgIGZvciAoOyAqYyAhPSAwOyBjKyspCisJCWlmICghaXNzcGFjZSgqYykpCisJCSAgZGllKF8oImp1bmsgZm91bmQgaW4gY29tbWFuZCBsaW5lIiksIE5VTEwsIEVDX0JBRENPTkYpOworCSAgICB9CisJICBicmVhazsKKwl9CisKKyAgICAgIC8qIENvcHkgb3B0YXJnIHNvIHRoYXQgYXJndiBkb2Vzbid0IGdldCBjaGFuZ2VkICovCisgICAgICBpZiAob3B0YXJnKQorCXsKKwkgIHN0cm5jcHkoYnVmZiwgb3B0YXJnLCBNQVhETkFNRSk7CisJICBidWZmW01BWEROQU1FLTFdID0gMDsKKwkgIGFyZyA9IGJ1ZmY7CisJfQorICAgICAgZWxzZQorCWFyZyA9IE5VTEw7CisgICAgICAKKyAgICAgIC8qIGNvbW1hbmQtbGluZSBvbmx5IHN0dWZmICovCisgICAgICBpZiAob3B0aW9uID09IExPUFRfVEVTVCkKKwl0ZXN0bW9kZSA9IDE7CisgICAgICBlbHNlIGlmIChvcHRpb24gPT0gJ3cnKQorCXsKKyNpZmRlZiBIQVZFX0RIQ1AKKwkgIGlmIChhcmdjID09IDMgJiYgc3RyY21wKGFyZ3ZbMl0sICJkaGNwIikgPT0gMCkKKwkgICAgZGlzcGxheV9vcHRzKCk7CisjaWZkZWYgSEFWRV9ESENQNgorCSAgZWxzZSBpZiAoYXJnYyA9PSAzICYmIHN0cmNtcChhcmd2WzJdLCAiZGhjcDYiKSA9PSAwKQorCSAgICBkaXNwbGF5X29wdHM2KCk7CisjZW5kaWYKKwkgIGVsc2UKKyNlbmRpZgorCSAgICBkb191c2FnZSgpOworCisJICBleGl0KDApOworCX0KKyAgICAgIGVsc2UgaWYgKG9wdGlvbiA9PSAndicpCisJeworCSAgcHJpbnRmKF8oIkRuc21hc3EgdmVyc2lvbiAlcyAgJXNcbiIpLCBWRVJTSU9OLCBDT1BZUklHSFQpOworCSAgcHJpbnRmKF8oIkNvbXBpbGUgdGltZSBvcHRpb25zOiAlc1xuXG4iKSwgY29tcGlsZV9vcHRzKTsgCisJICBwcmludGYoXygiVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuXG4iKSk7CisJICBwcmludGYoXygiRG5zbWFzcSBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdFxuIikpOworCSAgcHJpbnRmKF8oInVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiBvciAzLlxuIikpOworICAgICAgICAgIGV4aXQoMCk7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKG9wdGlvbiA9PSAnQycpCisJeworCSAgY29uZmZpbGVfb3B0ID0gMDsgLyogZmlsZSBtdXN0IGV4aXN0ICovCisJICBjb25mZmlsZSA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKTsKKwl9CisgICAgICBlbHNlCisJeworI2lmZGVmIEhBVkVfR0VUT1BUX0xPTkcKKwkgIGlmICghb25lX29wdChvcHRpb24sIGFyZywgZGFlbW9uLT5uYW1lYnVmZiwgXygidHJ5IC0taGVscCIpLCAxLCAwKSkKKyNlbHNlIAorCSAgICBpZiAoIW9uZV9vcHQob3B0aW9uLCBhcmcsIGRhZW1vbi0+bmFtZWJ1ZmYsIF8oInRyeSAtdyIpLCAxLCAwKSkgCisjZW5kaWYgIAorCSAgICBkaWUoXygiYmFkIGNvbW1hbmQgbGluZSBvcHRpb25zOiAlcyIpLCBkYWVtb24tPm5hbWVidWZmLCBFQ19CQURDT05GKTsKKwl9CisgICAgfQorCisgIGlmIChjb25mZmlsZSkKKyAgICB7CisgICAgICBvbmVfZmlsZShjb25mZmlsZSwgY29uZmZpbGVfb3B0KTsKKyAgICAgIGlmIChjb25mZmlsZV9vcHQgPT0gMCkKKwlmcmVlKGNvbmZmaWxlKTsKKyAgICB9CisKKyAgLyogcG9ydCBtaWdodCBub3QgYmUga25vd24gd2hlbiB0aGUgYWRkcmVzcyBpcyBwYXJzZWQgLSBmaWxsIGluIGhlcmUgKi8KKyAgaWYgKGRhZW1vbi0+c2VydmVycykKKyAgICB7CisgICAgICBzdHJ1Y3Qgc2VydmVyICp0bXA7CisgICAgICBmb3IgKHRtcCA9IGRhZW1vbi0+c2VydmVyczsgdG1wOyB0bXAgPSB0bXAtPm5leHQpCisJaWYgKCEodG1wLT5mbGFncyAmIFNFUlZfSEFTX1NPVVJDRSkpCisJICB7CisJICAgIGlmICh0bXAtPnNvdXJjZV9hZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKQorCSAgICAgIHRtcC0+c291cmNlX2FkZHIuaW4uc2luX3BvcnQgPSBodG9ucyhkYWVtb24tPnF1ZXJ5X3BvcnQpOworI2lmZGVmIEhBVkVfSVBWNgorCSAgICBlbHNlIGlmICh0bXAtPnNvdXJjZV9hZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikKKwkgICAgICB0bXAtPnNvdXJjZV9hZGRyLmluNi5zaW42X3BvcnQgPSBodG9ucyhkYWVtb24tPnF1ZXJ5X3BvcnQpOworI2VuZGlmIAorCSAgfQorICAgIH0gCisgIAorICBpZiAoZGFlbW9uLT5ob3N0X3JlY29yZHMpCisgICAgeworICAgICAgc3RydWN0IGhvc3RfcmVjb3JkICpocjsKKyAgICAgIAorICAgICAgZm9yIChociA9IGRhZW1vbi0+aG9zdF9yZWNvcmRzOyBocjsgaHIgPSBoci0+bmV4dCkKKwlpZiAoaHItPnR0bCA9PSAtMSkKKwkgIGhyLT50dGwgPSBkYWVtb24tPmxvY2FsX3R0bDsKKyAgICB9CisKKyAgaWYgKGRhZW1vbi0+Y25hbWVzKQorICAgIHsKKyAgICAgIHN0cnVjdCBjbmFtZSAqY24sICpjbjIsICpjbjM7CisKKyNkZWZpbmUgTk9MT09QIDEKKyNkZWZpbmUgVEVTVExPT1AgMiAgICAgIAorCisgICAgICAvKiBGaWxsIGluIFRUTCBmb3IgQ05BTUVTIG5vZSB3ZSBoYXZlIGxvY2FsX3R0bC4KKwkgQWxzbyBwcmVwYXJlIHRvIGRvIGxvb3AgZGV0ZWN0aW9uLiAqLworICAgICAgZm9yIChjbiA9IGRhZW1vbi0+Y25hbWVzOyBjbjsgY24gPSBjbi0+bmV4dCkKKwl7CisJICBpZiAoY24tPnR0bCA9PSAtMSkKKwkgICAgY24tPnR0bCA9IGRhZW1vbi0+bG9jYWxfdHRsOworCSAgY24tPmZsYWcgPSAwOworCSAgY24tPnRhcmdldHAgPSBOVUxMOworCSAgZm9yIChjbjIgPSBkYWVtb24tPmNuYW1lczsgY24yOyBjbjIgPSBjbjItPm5leHQpCisJICAgIGlmIChob3N0bmFtZV9pc2VxdWFsKGNuLT50YXJnZXQsIGNuMi0+YWxpYXMpKQorCSAgICAgIHsKKwkJY24tPnRhcmdldHAgPSBjbjI7CisJCWJyZWFrOworCSAgICAgIH0KKwl9CisgICAgICAKKyAgICAgIC8qIEZpbmQgYW55IENOQU1FIGxvb3BzLiovCisgICAgICBmb3IgKGNuID0gZGFlbW9uLT5jbmFtZXM7IGNuOyBjbiA9IGNuLT5uZXh0KQorCXsKKwkgIGZvciAoY24yID0gY24tPnRhcmdldHA7IGNuMjsgY24yID0gY24yLT50YXJnZXRwKQorCSAgICB7CisJICAgICAgaWYgKGNuMi0+ZmxhZyA9PSBOT0xPT1ApCisJCWJyZWFrOworCSAgICAgIAorCSAgICAgIGlmIChjbjItPmZsYWcgPT0gVEVTVExPT1ApCisJCWRpZShfKCJDTkFNRSBsb29wIGludm9sdmluZyAlcyIpLCBjbi0+YWxpYXMsIEVDX0JBRENPTkYpOworCSAgICAgIAorCSAgICAgIGNuMi0+ZmxhZyA9IFRFU1RMT09QOworCSAgICB9CisJICAKKwkgIGZvciAoY24zID0gY24tPnRhcmdldHA7IGNuMyAhPSBjbjI7IGNuMyA9IGNuMy0+dGFyZ2V0cCkKKwkgICAgY24zLT5mbGFnID0gTk9MT09QOworCX0KKyAgICB9CisKKyAgaWYgKGRhZW1vbi0+aWZfYWRkcnMpCisgICAgeyAgCisgICAgICBzdHJ1Y3QgaW5hbWUgKnRtcDsKKyAgICAgIGZvcih0bXAgPSBkYWVtb24tPmlmX2FkZHJzOyB0bXA7IHRtcCA9IHRtcC0+bmV4dCkKKwlpZiAodG1wLT5hZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKQorCSAgdG1wLT5hZGRyLmluLnNpbl9wb3J0ID0gaHRvbnMoZGFlbW9uLT5wb3J0KTsKKyNpZmRlZiBIQVZFX0lQVjYKKwllbHNlIGlmICh0bXAtPmFkZHIuc2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KQorCSAgdG1wLT5hZGRyLmluNi5zaW42X3BvcnQgPSBodG9ucyhkYWVtb24tPnBvcnQpOworI2VuZGlmIC8qIElQdjYgKi8KKyAgICB9CisJCisgIC8qIGNyZWF0ZSBkZWZhdWx0LCBpZiBub3Qgc3BlY2lmaWVkICovCisgIGlmIChkYWVtb24tPmF1dGhzZXJ2ZXIgJiYgIWRhZW1vbi0+aG9zdG1hc3RlcikKKyAgICB7CisgICAgICBzdHJjcHkoYnVmZiwgImhvc3RtYXN0ZXIuIik7CisgICAgICBzdHJjYXQoYnVmZiwgZGFlbW9uLT5hdXRoc2VydmVyKTsKKyAgICAgIGRhZW1vbi0+aG9zdG1hc3RlciA9IG9wdF9zdHJpbmdfYWxsb2MoYnVmZik7CisgICAgfQorICAKKyAgLyogb25seSBvbmUgb2YgdGhlc2UgbmVlZCBiZSBzcGVjaWZpZWQ6IHRoZSBvdGhlciBkZWZhdWx0cyB0byB0aGUgaG9zdC1uYW1lICovCisgIGlmIChvcHRpb25fYm9vbChPUFRfTE9DQUxNWCkgfHwgZGFlbW9uLT5teG5hbWVzIHx8IGRhZW1vbi0+bXh0YXJnZXQpCisgICAgeworICAgICAgc3RydWN0IG14X3Nydl9yZWNvcmQgKm14OworICAgICAgCisgICAgICBpZiAoZ2V0aG9zdG5hbWUoYnVmZiwgTUFYRE5BTUUpID09IC0xKQorCWRpZShfKCJjYW5ub3QgZ2V0IGhvc3QtbmFtZTogJXMiKSwgTlVMTCwgRUNfTUlTQyk7CisgICAgICAKKyAgICAgIGZvciAobXggPSBkYWVtb24tPm14bmFtZXM7IG14OyBteCA9IG14LT5uZXh0KQorCWlmICghbXgtPmlzc3J2ICYmIGhvc3RuYW1lX2lzZXF1YWwobXgtPm5hbWUsIGJ1ZmYpKQorCSAgYnJlYWs7CisgICAgICAKKyAgICAgIGlmICgoZGFlbW9uLT5teHRhcmdldCB8fCBvcHRpb25fYm9vbChPUFRfTE9DQUxNWCkpICYmICFteCkKKwl7CisJICBteCA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBteF9zcnZfcmVjb3JkKSk7CisJICBteC0+bmV4dCA9IGRhZW1vbi0+bXhuYW1lczsKKwkgIG14LT5pc3NydiA9IDA7CisJICBteC0+dGFyZ2V0ID0gTlVMTDsKKwkgIG14LT5uYW1lID0gb3B0X3N0cmluZ19hbGxvYyhidWZmKTsKKwkgIGRhZW1vbi0+bXhuYW1lcyA9IG14OworCX0KKyAgICAgIAorICAgICAgaWYgKCFkYWVtb24tPm14dGFyZ2V0KQorCWRhZW1vbi0+bXh0YXJnZXQgPSBvcHRfc3RyaW5nX2FsbG9jKGJ1ZmYpOworCisgICAgICBmb3IgKG14ID0gZGFlbW9uLT5teG5hbWVzOyBteDsgbXggPSBteC0+bmV4dCkKKwlpZiAoIW14LT5pc3NydiAmJiAhbXgtPnRhcmdldCkKKwkgIG14LT50YXJnZXQgPSBkYWVtb24tPm14dGFyZ2V0OworICAgIH0KKworICBpZiAoIW9wdGlvbl9ib29sKE9QVF9OT19SRVNPTFYpICYmCisgICAgICBkYWVtb24tPnJlc29sdl9maWxlcyAmJiAKKyAgICAgIGRhZW1vbi0+cmVzb2x2X2ZpbGVzLT5uZXh0ICYmIAorICAgICAgb3B0aW9uX2Jvb2woT1BUX05PX1BPTEwpKQorICAgIGRpZShfKCJvbmx5IG9uZSByZXNvbHYuY29uZiBmaWxlIGFsbG93ZWQgaW4gbm8tcG9sbCBtb2RlLiIpLCBOVUxMLCBFQ19CQURDT05GKTsKKyAgCisgIGlmIChvcHRpb25fYm9vbChPUFRfUkVTT0xWX0RPTUFJTikpCisgICAgeworICAgICAgY2hhciAqbGluZTsKKyAgICAgIEZJTEUgKmY7CisKKyAgICAgIGlmIChvcHRpb25fYm9vbChPUFRfTk9fUkVTT0xWKSB8fAorCSAgIWRhZW1vbi0+cmVzb2x2X2ZpbGVzIHx8IAorCSAgKGRhZW1vbi0+cmVzb2x2X2ZpbGVzKS0+bmV4dCkKKwlkaWUoXygibXVzdCBoYXZlIGV4YWN0bHkgb25lIHJlc29sdi5jb25mIHRvIHJlYWQgZG9tYWluIGZyb20uIiksIE5VTEwsIEVDX0JBRENPTkYpOworICAgICAgCisgICAgICBpZiAoIShmID0gZm9wZW4oKGRhZW1vbi0+cmVzb2x2X2ZpbGVzKS0+bmFtZSwgInIiKSkpCisJZGllKF8oImZhaWxlZCB0byByZWFkICVzOiAlcyIpLCAoZGFlbW9uLT5yZXNvbHZfZmlsZXMpLT5uYW1lLCBFQ19GSUxFKTsKKyAgICAgIAorICAgICAgd2hpbGUgKChsaW5lID0gZmdldHMoYnVmZiwgTUFYRE5BTUUsIGYpKSkKKwl7CisJICBjaGFyICp0b2tlbiA9IHN0cnRvayhsaW5lLCAiIFx0XG5cciIpOworCSAgCisJICBpZiAoIXRva2VuIHx8IHN0cmNtcCh0b2tlbiwgInNlYXJjaCIpICE9IDApCisJICAgIGNvbnRpbnVlOworCSAgCisJICBpZiAoKHRva2VuID0gc3RydG9rKE5VTEwsICIgXHRcblxyIikpICYmICAKKwkgICAgICAoZGFlbW9uLT5kb21haW5fc3VmZml4ID0gY2Fub25pY2FsaXNlX29wdCh0b2tlbikpKQorCSAgICBicmVhazsKKwl9CisKKyAgICAgIGZjbG9zZShmKTsKKworICAgICAgaWYgKCFkYWVtb24tPmRvbWFpbl9zdWZmaXgpCisJZGllKF8oIm5vIHNlYXJjaCBkaXJlY3RpdmUgZm91bmQgaW4gJXMiKSwgKGRhZW1vbi0+cmVzb2x2X2ZpbGVzKS0+bmFtZSwgRUNfTUlTQyk7CisgICAgfQorCisgIGlmIChkYWVtb24tPmRvbWFpbl9zdWZmaXgpCisgICAgeworICAgICAgIC8qIGFkZCBkb21haW4gZm9yIGFueSBzcnYgcmVjb3JkIHdpdGhvdXQgb25lLiAqLworICAgICAgc3RydWN0IG14X3Nydl9yZWNvcmQgKnNydjsKKyAgICAgIAorICAgICAgZm9yIChzcnYgPSBkYWVtb24tPm14bmFtZXM7IHNydjsgc3J2ID0gc3J2LT5uZXh0KQorCWlmIChzcnYtPmlzc3J2ICYmCisJICAgIHN0cmNocihzcnYtPm5hbWUsICcuJykgJiYgCisJICAgIHN0cmNocihzcnYtPm5hbWUsICcuJykgPT0gc3RycmNocihzcnYtPm5hbWUsICcuJykpCisJICB7CisJICAgIHN0cmNweShidWZmLCBzcnYtPm5hbWUpOworCSAgICBzdHJjYXQoYnVmZiwgIi4iKTsKKwkgICAgc3RyY2F0KGJ1ZmYsIGRhZW1vbi0+ZG9tYWluX3N1ZmZpeCk7CisJICAgIGZyZWUoc3J2LT5uYW1lKTsKKwkgICAgc3J2LT5uYW1lID0gb3B0X3N0cmluZ19hbGxvYyhidWZmKTsKKwkgIH0KKyAgICB9CisgIGVsc2UgaWYgKG9wdGlvbl9ib29sKE9QVF9ESENQX0ZRRE4pKQorICAgIGRpZShfKCJ0aGVyZSBtdXN0IGJlIGEgZGVmYXVsdCBkb21haW4gd2hlbiAtLWRoY3AtZnFkbiBpcyBzZXQiKSwgTlVMTCwgRUNfQkFEQ09ORik7CisKKyAgLyogSWYgdGhlcmUncyBhY2Nlc3MtY29udHJvbCBjb25maWcsIHRoZW4gaWdub3JlIC0tbG9jYWwtc2VydmljZSwgaXQncyBpbnRlbmRlZAorICAgICBhcyBhIHN5c3RlbSBkZWZhdWx0IHRvIGtlZXAgb3RoZXJ3aXNlIHVuY29uZmlndXJlZCBpbnN0YWxsYXRpb25zIHNhZmUuICovCisgIGlmIChkYWVtb24tPmlmX25hbWVzIHx8IGRhZW1vbi0+aWZfZXhjZXB0IHx8IGRhZW1vbi0+aWZfYWRkcnMgfHwgZGFlbW9uLT5hdXRoc2VydmVyKQorICAgIHJlc2V0X29wdGlvbl9ib29sKE9QVF9MT0NBTF9TRVJWSUNFKTsgCisKKyAgaWYgKHRlc3Rtb2RlKQorICAgIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiZG5zbWFzcTogJXMuXG4iLCBfKCJzeW50YXggY2hlY2sgT0siKSk7CisgICAgICBleGl0KDApOworICAgIH0KK30gIApkaWZmIC0tZ2l0IGEvc3JjL291dHBhY2tldC5jIGIvc3JjL291dHBhY2tldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNGJkZTAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvb3V0cGFja2V0LmMKQEAgLTAsMCArMSwxMTggQEAKKy8qIGRuc21hc3EgaXMgQ29weXJpZ2h0IChjKSAyMDAwLTIwMTcgU2ltb24gS2VsbGV5CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIGRhdGVkIEp1bmUsIDE5OTEsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIHZlcnNpb24gMyBkYXRlZCAyOSBKdW5lLCAyMDA3LgorIAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisqLworCisKKyNpbmNsdWRlICJkbnNtYXNxLmgiCisgCisjaWZkZWYgSEFWRV9ESENQNgorCitzdGF0aWMgc2l6ZV90IG91dHBhY2tldF9jb3VudGVyOworCit2b2lkIGVuZF9vcHQ2KGludCBjb250YWluZXIpCit7CisgICB2b2lkICpwID0gZGFlbW9uLT5vdXRwYWNrZXQuaW92X2Jhc2UgKyBjb250YWluZXIgKyAyOworICAgdTE2IGxlbiA9IG91dHBhY2tldF9jb3VudGVyIC0gY29udGFpbmVyIC0gNCA7CisgICAKKyAgIFBVVFNIT1JUKGxlbiwgcCk7Cit9CisKK3ZvaWQgcmVzZXRfY291bnRlcih2b2lkKQoreworICAvKiBDbGVhciBvdXQgYnVmZmVyIHdoZW4gc3RhcnRpbmcgZnJvbSBiZWdpbm5pbmcgKi8KKyAgaWYgKGRhZW1vbi0+b3V0cGFja2V0Lmlvdl9iYXNlKQorICAgIG1lbXNldChkYWVtb24tPm91dHBhY2tldC5pb3ZfYmFzZSwgMCwgZGFlbW9uLT5vdXRwYWNrZXQuaW92X2xlbik7CisgCisgIHNhdmVfY291bnRlcigwKTsKK30KKworaW50IHNhdmVfY291bnRlcihpbnQgbmV3dmFsKQoreworICBpbnQgcmV0ID0gb3V0cGFja2V0X2NvdW50ZXI7CisgIAorICBpZiAobmV3dmFsICE9IC0xKQorICAgIG91dHBhY2tldF9jb3VudGVyID0gbmV3dmFsOworCisgIHJldHVybiByZXQ7Cit9CisKK3ZvaWQgKmV4cGFuZChzaXplX3QgaGVhZHJvb20pCit7CisgIHZvaWQgKnJldDsKKworICBpZiAoZXhwYW5kX2J1ZigmZGFlbW9uLT5vdXRwYWNrZXQsIG91dHBhY2tldF9jb3VudGVyICsgaGVhZHJvb20pKQorICAgIHsKKyAgICAgIHJldCA9IGRhZW1vbi0+b3V0cGFja2V0Lmlvdl9iYXNlICsgb3V0cGFja2V0X2NvdW50ZXI7CisgICAgICBvdXRwYWNrZXRfY291bnRlciArPSBoZWFkcm9vbTsKKyAgICAgIHJldHVybiByZXQ7CisgICAgfQorICAKKyAgcmV0dXJuIE5VTEw7Cit9CisgICAgCitpbnQgbmV3X29wdDYoaW50IG9wdCkKK3sKKyAgaW50IHJldCA9IG91dHBhY2tldF9jb3VudGVyOworICB2b2lkICpwOworCisgIGlmICgocCA9IGV4cGFuZCg0KSkpCisgICAgeworICAgICAgUFVUU0hPUlQob3B0LCBwKTsKKyAgICAgIFBVVFNIT1JUKDAsIHApOworICAgIH0KKworICByZXR1cm4gcmV0OworfQorCit2b2lkICpwdXRfb3B0Nih2b2lkICpkYXRhLCBzaXplX3QgbGVuKQoreworICB2b2lkICpwOworCisgIGlmICgocCA9IGV4cGFuZChsZW4pKSAmJiBkYXRhKQorICAgIG1lbWNweShwLCBkYXRhLCBsZW4pOyAgIAorICAKKyAgcmV0dXJuIHA7Cit9CisgIAordm9pZCBwdXRfb3B0Nl9sb25nKHVuc2lnbmVkIGludCB2YWwpCit7CisgIHZvaWQgKnA7CisgIAorICBpZiAoKHAgPSBleHBhbmQoNCkpKSAgCisgICAgUFVUTE9ORyh2YWwsIHApOworfQorCit2b2lkIHB1dF9vcHQ2X3Nob3J0KHVuc2lnbmVkIGludCB2YWwpCit7CisgIHZvaWQgKnA7CisKKyAgaWYgKChwID0gZXhwYW5kKDIpKSkKKyAgICBQVVRTSE9SVCh2YWwsIHApOyAgIAorfQorCit2b2lkIHB1dF9vcHQ2X2NoYXIodW5zaWduZWQgaW50IHZhbCkKK3sKKyAgdW5zaWduZWQgY2hhciAqcDsKKworICBpZiAoKHAgPSBleHBhbmQoMSkpKQorICAgICpwID0gdmFsOyAgIAorfQorCit2b2lkIHB1dF9vcHQ2X3N0cmluZyhjaGFyICpzKQoreworICBwdXRfb3B0NihzLCBzdHJsZW4ocykpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9wb2xsLmMgYi9zcmMvcG9sbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3Y2E5OTkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcG9sbC5jCkBAIC0wLDAgKzEsMTI1IEBACisvKiBkbnNtYXNxIGlzIENvcHlyaWdodCAoYykgMjAwMC0yMDE3IFNpbW9uIEtlbGxleQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMgZGF0ZWQgMjkgSnVuZSwgMjAwNy4KKyAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2luY2x1ZGUgImRuc21hc3EuaCIKKworLyogV3JhcHBlciBmb3IgcG9sbCgpLiBBbGxvY2F0ZXMgYW5kIGV4dGVuZHMgYXJyYXkgb2Ygc3RydWN0IHBvbGxmZHMsCisgICBrZWVwcyB0aGVtIGluIGZkIG9yZGVyIHNvIHRoYXQgd2UgY2FuIHNldCBhbmQgdGVzdCBjb25kaXRpb25zIG9uCisgICBmZCB1c2luZyBhIHNpbXBsZSBidXQgZWZmaWNpZW50IGJpbmFyeSBjaG9wLiAqLworCisvKiBwb2xsX3Jlc2V0KCkKKyAgIHBvbGxfbGlzdGVuKGZkLCBldmVudCkKKyAgIC4KKyAgIC4KKyAgIHBvbGxfbGlzdGVuKGZkLCBldmVudCk7CisKKyAgIGhpdHMgPSBkb19wb2xsKHRpbWVvdXQpOworCisgICBpZiAocG9sbF9jaGVjayhmZCwgZXZlbnQpCisgICAgLgorICAgIC4KKworICAgaWYgKHBvbGxfY2hlY2soZmQsIGV2ZW50KQorICAgIC4KKyAgICAuCisKKyAgICBldmVudCBpcyBPUiBvZiBQT0xMSU4sIFBPTExPVVQsIFBPTExFUlIsIGV0YworKi8KKworc3RhdGljIHN0cnVjdCBwb2xsZmQgKnBvbGxmZHMgPSBOVUxMOworc3RhdGljIG5mZHNfdCBuZmRzLCBhcnJzaXplID0gMDsKKworLyogQmluYXJ5IHNlYXJjaC4gUmV0dXJucyBlaXRoZXIgdGhlIHBvbGxmZCB3aXRoIGZkLCBvcgorICAgaWYgdGhlIGZkIGRvZXNuJ3QgbWF0Y2gsIG9yIHJldHVybiBlcXVhbHMgbmZkcywgdGhlIGVudHJ5CisgICB0byB0aGUgbGVmdCBvZiB3aGljaCBhIG5ldyByZWNvcmQgc2hvdWxkIGJlIGluc2VydGVkLiAqLworc3RhdGljIG5mZHNfdCBmZF9zZWFyY2goaW50IGZkKQoreworICBuZmRzX3QgbGVmdCwgcmlnaHQsIG1pZDsKKyAgCisgIGlmICgocmlnaHQgPSBuZmRzKSA9PSAwKQorICAgIHJldHVybiAwOworICAKKyAgbGVmdCA9IDA7CisgIAorICB3aGlsZSAoMSkKKyAgICB7CisgICAgICBpZiAocmlnaHQgPT0gbGVmdCArIDEpCisJcmV0dXJuIChwb2xsZmRzW2xlZnRdLmZkID49IGZkKSA/IGxlZnQgOiByaWdodDsKKyAgICAgIAorICAgICAgbWlkID0gKGxlZnQgKyByaWdodCkvMjsKKyAgICAgIAorICAgICAgaWYgKHBvbGxmZHNbbWlkXS5mZCA+IGZkKQorCXJpZ2h0ID0gbWlkOworICAgICAgZWxzZSAKKwlsZWZ0ID0gbWlkOworICAgIH0KK30KKwordm9pZCBwb2xsX3Jlc2V0KHZvaWQpCit7CisgIG5mZHMgPSAwOworfQorCitpbnQgZG9fcG9sbChpbnQgdGltZW91dCkKK3sKKyAgcmV0dXJuIHBvbGwocG9sbGZkcywgbmZkcywgdGltZW91dCk7Cit9CisKK2ludCBwb2xsX2NoZWNrKGludCBmZCwgc2hvcnQgZXZlbnQpCit7CisgIG5mZHNfdCBpID0gZmRfc2VhcmNoKGZkKTsKKyAgCisgIGlmIChpIDwgbmZkcyAmJiBwb2xsZmRzW2ldLmZkID09IGZkKQorICAgIHJldHVybiBwb2xsZmRzW2ldLnJldmVudHMgJiBldmVudDsKKworICByZXR1cm4gMDsKK30KKwordm9pZCBwb2xsX2xpc3RlbihpbnQgZmQsIHNob3J0IGV2ZW50KQoreworICAgbmZkc190IGkgPSBmZF9zZWFyY2goZmQpOworICAKKyAgIGlmIChpIDwgbmZkcyAmJiBwb2xsZmRzW2ldLmZkID09IGZkKQorICAgICBwb2xsZmRzW2ldLmV2ZW50cyB8PSBldmVudDsKKyAgIGVsc2UKKyAgICAgeworICAgICAgIGlmIChhcnJzaXplICE9IG5mZHMpCisJIG1lbW1vdmUoJnBvbGxmZHNbaSsxXSwgJnBvbGxmZHNbaV0sIChuZmRzIC0gaSkgKiBzaXplb2Yoc3RydWN0IHBvbGxmZCkpOworICAgICAgIGVsc2UKKwkgeworCSAgIC8qIEFycmF5IHRvbyBzbWFsbCwgZXh0ZW5kLiAqLworCSAgIHN0cnVjdCBwb2xsZmQgKm5ldzsKKworCSAgIGFycnNpemUgPSAoYXJyc2l6ZSA9PSAwKSA/IDY0IDogYXJyc2l6ZSAqIDI7CisKKwkgICBpZiAoIShuZXcgPSB3aGluZV9tYWxsb2MoYXJyc2l6ZSAqIHNpemVvZihzdHJ1Y3QgcG9sbGZkKSkpKQorCSAgICAgcmV0dXJuOworCisJICAgaWYgKHBvbGxmZHMpCisJICAgICB7CisJICAgICAgIG1lbWNweShuZXcsIHBvbGxmZHMsIGkgKiBzaXplb2Yoc3RydWN0IHBvbGxmZCkpOworCSAgICAgICBtZW1jcHkoJm5ld1tpKzFdLCAmcG9sbGZkc1tpXSwgKG5mZHMgLSBpKSAqIHNpemVvZihzdHJ1Y3QgcG9sbGZkKSk7CisJICAgICAgIGZyZWUocG9sbGZkcyk7CisJICAgICB9CisJICAgCisJICAgcG9sbGZkcyA9IG5ldzsKKwkgfQorICAgICAgIAorICAgICAgIHBvbGxmZHNbaV0uZmQgPSBmZDsKKyAgICAgICBwb2xsZmRzW2ldLmV2ZW50cyA9IGV2ZW50OworICAgICAgIG5mZHMrKzsKKyAgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3JjL3JhZHYtcHJvdG9jb2wuaCBiL3NyYy9yYWR2LXByb3RvY29sLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVjNTEzNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9yYWR2LXByb3RvY29sLmgKQEAgLTAsMCArMSw1OCBAQAorLyogZG5zbWFzcSBpcyBDb3B5cmlnaHQgKGMpIDIwMDAtMjAxNyBTaW1vbiBLZWxsZXkKKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgZGF0ZWQgSnVuZSwgMTk5MSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgdmVyc2lvbiAzIGRhdGVkIDI5IEp1bmUsIDIwMDcuCisgCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisKKyNkZWZpbmUgQUxMX05PREVTICAgICAgICAgICAgICAgICAiRkYwMjo6MSIKKyNkZWZpbmUgQUxMX1JPVVRFUlMgICAgICAgICAgICAgICAiRkYwMjo6MiIKKworc3RydWN0IHBpbmdfcGFja2V0IHsKKyAgdTggdHlwZSwgY29kZTsKKyAgdTE2IGNoZWNrc3VtOworICB1MTYgaWRlbnRpZmllcjsKKyAgdTE2IHNlcXVlbmNlX25vOworfTsKKworc3RydWN0IHJhX3BhY2tldCB7CisgIHU4IHR5cGUsIGNvZGU7CisgIHUxNiBjaGVja3N1bTsKKyAgdTggaG9wX2xpbWl0LCBmbGFnczsKKyAgdTE2IGxpZmV0aW1lOworICB1MzIgcmVhY2hhYmxlX3RpbWU7CisgIHUzMiByZXRyYW5zX3RpbWU7Cit9OworCitzdHJ1Y3QgbmVpZ2hfcGFja2V0IHsKKyAgdTggdHlwZSwgY29kZTsKKyAgdTE2IGNoZWNrc3VtOworICB1MTYgcmVzZXJ2ZWQ7CisgIHN0cnVjdCBpbjZfYWRkciB0YXJnZXQ7Cit9OworCitzdHJ1Y3QgcHJlZml4X29wdCB7CisgIHU4IHR5cGUsIGxlbiwgcHJlZml4X2xlbiwgZmxhZ3M7CisgIHUzMiB2YWxpZF9saWZldGltZSwgcHJlZmVycmVkX2xpZmV0aW1lLCByZXNlcnZlZDsKKyAgc3RydWN0IGluNl9hZGRyIHByZWZpeDsKK307CisKKyNkZWZpbmUgSUNNUDZfT1BUX1NPVVJDRV9NQUMgICAxCisjZGVmaW5lIElDTVA2X09QVF9QUkVGSVggICAgICAgMworI2RlZmluZSBJQ01QNl9PUFRfTVRVICAgICAgICAgIDUKKyNkZWZpbmUgSUNNUDZfT1BUX0FEVl9JTlRFUlZBTCA3CisjZGVmaW5lIElDTVA2X09QVF9SVF9JTkZPICAgICAyNAorI2RlZmluZSBJQ01QNl9PUFRfUkROU1MgICAgICAgMjUKKyNkZWZpbmUgSUNNUDZfT1BUX0ROU1NMICAgICAgIDMxCisKKworCmRpZmYgLS1naXQgYS9zcmMvcmFkdi5jIGIvc3JjL3JhZHYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjdlNTJjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3JhZHYuYwpAQCAtMCwwICsxLDEwMDAgQEAKKy8qIGRuc21hc3EgaXMgQ29weXJpZ2h0IChjKSAyMDAwLTIwMTcgU2ltb24gS2VsbGV5CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIGRhdGVkIEp1bmUsIDE5OTEsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIHZlcnNpb24gMyBkYXRlZCAyOSBKdW5lLCAyMDA3LgorIAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisqLworCisKKy8qIE5CLiBUaGlzIGNvZGUgbWF5IGJlIGNhbGxlZCBkdXJpbmcgYSBESENQdjQgb3IgdHJhbnNhY3Rpb24gd2hpY2ggaXMgaW4gcGluZy13YWl0CisgICBJdCB0aGVyZWZvcmUgY2Fubm90IHVzZSBhbnkgREhDUCBidWZmZXIgcmVzb3VyY2VzIGV4Y2VwdCBvdXRwYWNrZXQsIHdoaWNoIGlzCisgICBub3QgdXNlZCBieSBESENQdjQgY29kZS4gVGhpcyBjb2RlIG1heSBhbHNvIGJlIGNhbGxlZCB3aGVuIERIQ1AgNCBvciA2IGlzbid0CisgICBhY3RpdmUsIHNvIHdlIGVuc3VyZSB0aGF0IG91dHBhY2tldCBpcyBhbGxvY2F0ZWQgaGVyZSB0b28gKi8KKworI2luY2x1ZGUgImRuc21hc3EuaCIKKworI2lmZGVmIEhBVkVfREhDUDYKKworI2luY2x1ZGUgPG5ldGluZXQvaWNtcDYuaD4KKworc3RydWN0IHJhX3BhcmFtIHsKKyAgdGltZV90IG5vdzsKKyAgaW50IGluZCwgbWFuYWdlZCwgb3RoZXIsIGZpcnN0LCBhZHZfcm91dGVyOworICBjaGFyICppZl9uYW1lOworICBzdHJ1Y3QgZGhjcF9uZXRpZCAqdGFnczsKKyAgc3RydWN0IGluNl9hZGRyIGxpbmtfbG9jYWwsIGxpbmtfZ2xvYmFsLCB1bGE7CisgIHVuc2lnbmVkIGludCBnbG9iX3ByZWZfdGltZSwgbGlua19wcmVmX3RpbWUsIHVsYV9wcmVmX3RpbWUsIGFkdl9pbnRlcnZhbCwgcHJpbzsKKyAgc3RydWN0IGRoY3BfY29udGV4dCAqZm91bmRfY29udGV4dDsKK307CisKK3N0cnVjdCBzZWFyY2hfcGFyYW0geworICB0aW1lX3Qgbm93OyBpbnQgaWZhY2U7CisgIGNoYXIgbmFtZVtJRl9OQU1FU0laRSsxXTsKK307CisKK3N0cnVjdCBhbGlhc19wYXJhbSB7CisgIGludCBpZmFjZTsKKyAgc3RydWN0IGRoY3BfYnJpZGdlICpicmlkZ2U7CisgIGludCBudW1fYWxpYXNfaWZzOworICBpbnQgbWF4X2FsaWFzX2lmczsKKyAgaW50ICphbGlhc19pZnM7Cit9OworCitzdGF0aWMgdm9pZCBzZW5kX3JhKHRpbWVfdCBub3csIGludCBpZmFjZSwgY2hhciAqaWZhY2VfbmFtZSwgc3RydWN0IGluNl9hZGRyICpkZXN0KTsKK3N0YXRpYyB2b2lkIHNlbmRfcmFfYWxpYXModGltZV90IG5vdywgaW50IGlmYWNlLCBjaGFyICppZmFjZV9uYW1lLCBzdHJ1Y3QgaW42X2FkZHIgKmRlc3QsCisgICAgICAgICAgICAgICAgICAgIGludCBzZW5kX2lmYWNlKTsKK3N0YXRpYyBpbnQgc2VuZF9yYV90b19hbGlhc2VzKGludCBpbmRleCwgdW5zaWduZWQgaW50IHR5cGUsIGNoYXIgKm1hYywgc2l6ZV90IG1hY2xlbiwgdm9pZCAqcGFybSk7CitzdGF0aWMgaW50IGFkZF9wcmVmaXhlcyhzdHJ1Y3QgaW42X2FkZHIgKmxvY2FsLCAgaW50IHByZWZpeCwKKwkJCWludCBzY29wZSwgaW50IGlmX2luZGV4LCBpbnQgZmxhZ3MsIAorCQkJdW5zaWduZWQgaW50IHByZWZlcnJlZCwgdW5zaWduZWQgaW50IHZhbGlkLCB2b2lkICp2cGFyYW0pOworc3RhdGljIGludCBpZmFjZV9zZWFyY2goc3RydWN0IGluNl9hZGRyICpsb2NhbCwgIGludCBwcmVmaXgsCisJCQlpbnQgc2NvcGUsIGludCBpZl9pbmRleCwgaW50IGZsYWdzLCAKKwkJCWludCBwcmVmZXJlZCwgaW50IHZhbGlkLCB2b2lkICp2cGFyYW0pOworc3RhdGljIGludCBhZGRfbGxhKGludCBpbmRleCwgdW5zaWduZWQgaW50IHR5cGUsIGNoYXIgKm1hYywgc2l6ZV90IG1hY2xlbiwgdm9pZCAqcGFybSk7CitzdGF0aWMgdm9pZCBuZXdfdGltZW91dChzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0LCBjaGFyICppZmFjZV9uYW1lLCB0aW1lX3Qgbm93KTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2FsY19saWZldGltZShzdHJ1Y3QgcmFfaW50ZXJmYWNlICpyYSk7CitzdGF0aWMgdW5zaWduZWQgaW50IGNhbGNfaW50ZXJ2YWwoc3RydWN0IHJhX2ludGVyZmFjZSAqcmEpOworc3RhdGljIHVuc2lnbmVkIGludCBjYWxjX3ByaW8oc3RydWN0IHJhX2ludGVyZmFjZSAqcmEpOworc3RhdGljIHN0cnVjdCByYV9pbnRlcmZhY2UgKmZpbmRfaWZhY2VfcGFyYW0oY2hhciAqaWZhY2UpOworCitzdGF0aWMgaW50IGhvcF9saW1pdDsKKwordm9pZCByYV9pbml0KHRpbWVfdCBub3cpCit7CisgIHN0cnVjdCBpY21wNl9maWx0ZXIgZmlsdGVyOworICBpbnQgZmQ7CisjaWYgZGVmaW5lZChJUFY2X1RDTEFTUykgJiYgZGVmaW5lZChJUFRPU19DTEFTU19DUzYpCisgIGludCBjbGFzcyA9IElQVE9TX0NMQVNTX0NTNjsKKyNlbmRpZgorICBpbnQgdmFsID0gMjU1OyAvKiByYWR2ZCB1c2VzIHRoaXMgdmFsdWUgKi8KKyAgc29ja2xlbl90IGxlbiA9IHNpemVvZihpbnQpOworICBzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0OworICAKKyAgLyogZW5zdXJlIHRoaXMgaXMgYXJvdW5kIGV2ZW4gaWYgd2UncmUgbm90IGRvaW5nIERIQ1B2NiAqLworICBleHBhbmRfYnVmKCZkYWVtb24tPm91dHBhY2tldCwgc2l6ZW9mKHN0cnVjdCBkaGNwX3BhY2tldCkpOworIAorICAvKiBTZWUgaWYgd2UncmUgZ3Vlc3NpbmcgU0xBQUMgYWRkcmVzc2VzLCBpZiBzbyB3ZSBuZWVkIHRvIHJlY2VpdmUgcGluZyByZXBsaWVzICovCisgIGZvciAoY29udGV4dCA9IGRhZW1vbi0+ZGhjcDY7IGNvbnRleHQ7IGNvbnRleHQgPSBjb250ZXh0LT5uZXh0KQorICAgIGlmICgoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX1JBX05BTUUpKQorICAgICAgYnJlYWs7CisgIAorICAvKiBOZWVkIElDTVA2IHNvY2tldCBmb3IgdHJhbnNtaXNzaW9uIGZvciBESENQdjYgZXZlbiB3aGVuIG5vdCBkb2luZyBSQS4gKi8KKworICBJQ01QNl9GSUxURVJfU0VUQkxPQ0tBTEwoJmZpbHRlcik7CisgIGlmIChkYWVtb24tPmRvaW5nX3JhKQorICAgIHsKKyAgICAgIElDTVA2X0ZJTFRFUl9TRVRQQVNTKE5EX1JPVVRFUl9TT0xJQ0lULCAmZmlsdGVyKTsKKyAgICAgIGlmIChjb250ZXh0KQorCUlDTVA2X0ZJTFRFUl9TRVRQQVNTKElDTVA2X0VDSE9fUkVQTFksICZmaWx0ZXIpOworICAgIH0KKyAgCisgIGlmICgoZmQgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfUkFXLCBJUFBST1RPX0lDTVBWNikpID09IC0xIHx8CisgICAgICBnZXRzb2Nrb3B0KGZkLCBJUFBST1RPX0lQVjYsIElQVjZfVU5JQ0FTVF9IT1BTLCAmaG9wX2xpbWl0LCAmbGVuKSB8fAorI2lmIGRlZmluZWQoSVBWNl9UQ0xBU1MpICYmIGRlZmluZWQoSVBUT1NfQ0xBU1NfQ1M2KQorICAgICAgc2V0c29ja29wdChmZCwgSVBQUk9UT19JUFY2LCBJUFY2X1RDTEFTUywgJmNsYXNzLCBzaXplb2YoY2xhc3MpKSA9PSAtMSB8fAorI2VuZGlmCisgICAgICAhZml4X2ZkKGZkKSB8fAorICAgICAgIXNldF9pcHY2cGt0aW5mbyhmZCkgfHwKKyAgICAgIHNldHNvY2tvcHQoZmQsIElQUFJPVE9fSVBWNiwgSVBWNl9VTklDQVNUX0hPUFMsICZ2YWwsIHNpemVvZih2YWwpKSB8fAorICAgICAgc2V0c29ja29wdChmZCwgSVBQUk9UT19JUFY2LCBJUFY2X01VTFRJQ0FTVF9IT1BTLCAmdmFsLCBzaXplb2YodmFsKSkgfHwKKyAgICAgIHNldHNvY2tvcHQoZmQsIElQUFJPVE9fSUNNUFY2LCBJQ01QNl9GSUxURVIsICZmaWx0ZXIsIHNpemVvZihmaWx0ZXIpKSA9PSAtMSkKKyAgICBkaWUgKF8oImNhbm5vdCBjcmVhdGUgSUNNUHY2IHNvY2tldDogJXMiKSwgTlVMTCwgRUNfQkFETkVUKTsKKyAgCisgICBkYWVtb24tPmljbXA2ZmQgPSBmZDsKKyAgIAorICAgaWYgKGRhZW1vbi0+ZG9pbmdfcmEpCisgICAgIHJhX3N0YXJ0X3Vuc29saWNpdGVkKG5vdywgTlVMTCk7Cit9CisKK3ZvaWQgcmFfc3RhcnRfdW5zb2xpY2l0ZWQodGltZV90IG5vdywgc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dCkKK3sgICAKKyAgIC8qIGluaXQgdGltZXJzIHNvIHRoYXQgd2UgZG8gcmEncyBmb3Igc29tZS9hbGwgc29vbi4gc29tZSByYV90aW1lcyB3aWxsIGVuZCB1cCB6ZXJvZWQKKyAgICAgaWYgaXQncyBub3QgYXBwcm9wcmlhdGUgdG8gYWR2ZXJ0aXNlIHRob3NlIGNvbnRleHRzLgorICAgICBUaGlzIGdldHMgcmUtY2FsbGVkIG9uIGEgbmV0bGluayByb3V0ZS1jaGFuZ2UgdG8gcmUtZG8gdGhlIGFkdmVydGlzZW1lbnQKKyAgICAgYW5kIHBpY2sgdXAgbmV3IGludGVyZmFjZXMgKi8KKyAgCisgIGlmIChjb250ZXh0KQorICAgIGNvbnRleHQtPnJhX3Nob3J0X3BlcmlvZF9zdGFydCA9IGNvbnRleHQtPnJhX3RpbWUgPSBub3c7CisgIGVsc2UKKyAgICBmb3IgKGNvbnRleHQgPSBkYWVtb24tPmRoY3A2OyBjb250ZXh0OyBjb250ZXh0ID0gY29udGV4dC0+bmV4dCkKKyAgICAgIGlmICghKGNvbnRleHQtPmZsYWdzICYgQ09OVEVYVF9URU1QTEFURSkpCisJeworCSAgY29udGV4dC0+cmFfdGltZSA9IG5vdyArIChyYW5kMTYoKS8xMzAwMCk7IC8qIHJhbmdlIDAgLSA1ICovCisJICAvKiByZS1kbyBmcmVxdWVudGx5IGZvciBhIG1pbnV0ZSBvciBzbywgaW4gY2FzZSB0aGUgZmlyc3QgZ2V0cyBsb3N0LiAqLworCSAgY29udGV4dC0+cmFfc2hvcnRfcGVyaW9kX3N0YXJ0ID0gbm93OworCX0KK30KKwordm9pZCBpY21wNl9wYWNrZXQodGltZV90IG5vdykKK3sKKyAgY2hhciBpbnRlcmZhY2VbSUZfTkFNRVNJWkUrMV07CisgIHNzaXplX3Qgc3o7IAorICBpbnQgaWZfaW5kZXggPSAwOworICBzdHJ1Y3QgY21zZ2hkciAqY21wdHI7CisgIHN0cnVjdCBtc2doZHIgbXNnOworICB1bmlvbiB7CisgICAgc3RydWN0IGNtc2doZHIgYWxpZ247IC8qIHRoaXMgZW5zdXJlcyBhbGlnbm1lbnQgKi8KKyAgICBjaGFyIGNvbnRyb2w2W0NNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBpbjZfcGt0aW5mbykpXTsKKyAgfSBjb250cm9sX3U7CisgIHN0cnVjdCBzb2NrYWRkcl9pbjYgZnJvbTsKKyAgdW5zaWduZWQgY2hhciAqcGFja2V0OworICBzdHJ1Y3QgaW5hbWUgKnRtcDsKKworICAvKiBOb3RlOiB1c2Ugb3V0cGFja2V0IGZvciBpbnB1dCBidWZmZXIgKi8KKyAgbXNnLm1zZ19jb250cm9sID0gY29udHJvbF91LmNvbnRyb2w2OworICBtc2cubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY29udHJvbF91KTsKKyAgbXNnLm1zZ19mbGFncyA9IDA7CisgIG1zZy5tc2dfbmFtZSA9ICZmcm9tOworICBtc2cubXNnX25hbWVsZW4gPSBzaXplb2YoZnJvbSk7CisgIG1zZy5tc2dfaW92ID0gJmRhZW1vbi0+b3V0cGFja2V0OworICBtc2cubXNnX2lvdmxlbiA9IDE7CisgIAorICBpZiAoKHN6ID0gcmVjdl9kaGNwX3BhY2tldChkYWVtb24tPmljbXA2ZmQsICZtc2cpKSA9PSAtMSB8fCBzeiA8IDgpCisgICAgcmV0dXJuOworICAgCisgIHBhY2tldCA9ICh1bnNpZ25lZCBjaGFyICopZGFlbW9uLT5vdXRwYWNrZXQuaW92X2Jhc2U7CisgIAorICBmb3IgKGNtcHRyID0gQ01TR19GSVJTVEhEUigmbXNnKTsgY21wdHI7IGNtcHRyID0gQ01TR19OWFRIRFIoJm1zZywgY21wdHIpKQorICAgIGlmIChjbXB0ci0+Y21zZ19sZXZlbCA9PSBJUFBST1RPX0lQVjYgJiYgY21wdHItPmNtc2dfdHlwZSA9PSBkYWVtb24tPnY2cGt0aW5mbykKKyAgICAgIHsKKwl1bmlvbiB7CisJICB1bnNpZ25lZCBjaGFyICpjOworCSAgc3RydWN0IGluNl9wa3RpbmZvICpwOworCX0gcDsKKwlwLmMgPSBDTVNHX0RBVEEoY21wdHIpOworICAgICAgICAKKwlpZl9pbmRleCA9IHAucC0+aXBpNl9pZmluZGV4OworICAgICAgfQorICAKKyAgaWYgKCFpbmRleHRvbmFtZShkYWVtb24tPmljbXA2ZmQsIGlmX2luZGV4LCBpbnRlcmZhY2UpKQorICAgIHJldHVybjsKKyAgICAKKyAgaWYgKCFpZmFjZV9jaGVjayhBRl9MT0NBTCwgTlVMTCwgaW50ZXJmYWNlLCBOVUxMKSkKKyAgICByZXR1cm47CisgIAorICBmb3IgKHRtcCA9IGRhZW1vbi0+ZGhjcF9leGNlcHQ7IHRtcDsgdG1wID0gdG1wLT5uZXh0KQorICAgIGlmICh0bXAtPm5hbWUgJiYgd2lsZGNhcmRfbWF0Y2godG1wLT5uYW1lLCBpbnRlcmZhY2UpKQorICAgICAgcmV0dXJuOworIAorICBpZiAocGFja2V0WzFdICE9IDApCisgICAgcmV0dXJuOworICAKKyAgaWYgKHBhY2tldFswXSA9PSBJQ01QNl9FQ0hPX1JFUExZKQorICAgIGxlYXNlX3BpbmdfcmVwbHkoJmZyb20uc2luNl9hZGRyLCBwYWNrZXQsIGludGVyZmFjZSk7IAorICBlbHNlIGlmIChwYWNrZXRbMF0gPT0gTkRfUk9VVEVSX1NPTElDSVQpCisgICAgeworICAgICAgY2hhciAqbWFjID0gIiI7CisgICAgICBzdHJ1Y3QgZGhjcF9icmlkZ2UgKmJyaWRnZSwgKmFsaWFzOworICAgICAgCisgICAgICAvKiBsb29rIGZvciBsaW5rLWxheWVyIGFkZHJlc3Mgb3B0aW9uIGZvciBsb2dnaW5nICovCisgICAgICBpZiAoc3ogPj0gMTYgJiYgcGFja2V0WzhdID09IElDTVA2X09QVF9TT1VSQ0VfTUFDICYmIChwYWNrZXRbOV0gKiA4KSArIDggPD0gc3opCisJeworCSAgaWYgKChwYWNrZXRbOV0gKiA4IC0gMikgKiAzIC0gMSA+PSBNQVhETkFNRSkgeworCSAgICByZXR1cm47CisJICB9CisJICBwcmludF9tYWMoZGFlbW9uLT5uYW1lYnVmZiwgJnBhY2tldFsxMF0sIChwYWNrZXRbOV0gKiA4KSAtIDIpOworCSAgbWFjID0gZGFlbW9uLT5uYW1lYnVmZjsKKwl9CisgICAgICAgICAKKyAgICAgIGlmICghb3B0aW9uX2Jvb2woT1BUX1FVSUVUX1JBKSkKKwlteV9zeXNsb2coTVNfREhDUCB8IExPR19JTkZPLCAiUlRSLVNPTElDSVQoJXMpICVzIiwgaW50ZXJmYWNlLCBtYWMpOworCisgICAgICAvKiBJZiB0aGUgaW5jb21pbmcgaW50ZXJmYWNlIGlzIGFuIGFsaWFzIG9mIHNvbWUgb3RoZXIgb25lIChhcworICAgICAgICAgc3BlY2lmaWVkIGJ5IHRoZSAtLWJyaWRnZS1pbnRlcmZhY2Ugb3B0aW9uKSwgc2VuZCBhbiBSQSB1c2luZworICAgICAgICAgdGhlIGNvbnRleHQgb2YgdGhlIGFsaWFzZWQgaW50ZXJmYWNlLiAqLworICAgICAgZm9yIChicmlkZ2UgPSBkYWVtb24tPmJyaWRnZXM7IGJyaWRnZTsgYnJpZGdlID0gYnJpZGdlLT5uZXh0KQorICAgICAgICB7CisgICAgICAgICAgaW50IGJyaWRnZV9pbmRleCA9IGlmX25hbWV0b2luZGV4KGJyaWRnZS0+aWZhY2UpOworICAgICAgICAgIGlmIChicmlkZ2VfaW5kZXgpCisJICAgIHsKKwkgICAgICBmb3IgKGFsaWFzID0gYnJpZGdlLT5hbGlhczsgYWxpYXM7IGFsaWFzID0gYWxpYXMtPm5leHQpCisJCWlmICh3aWxkY2FyZF9tYXRjaG4oYWxpYXMtPmlmYWNlLCBpbnRlcmZhY2UsIElGX05BTUVTSVpFKSkKKwkJICB7CisJCSAgICAvKiBTZW5kIGFuIFJBIG9uIGlmX2luZGV4IHdpdGggaW5mb3JtYXRpb24gZnJvbQorCQkgICAgICAgYnJpZGdlX2luZGV4LiAqLworCQkgICAgc2VuZF9yYV9hbGlhcyhub3csIGJyaWRnZV9pbmRleCwgYnJpZGdlLT5pZmFjZSwgTlVMTCwgaWZfaW5kZXgpOworCQkgICAgYnJlYWs7CisJCSAgfQorCSAgICAgIGlmIChhbGlhcykKKwkJYnJlYWs7CisJICAgIH0KKyAgICAgICAgfQorCisgICAgICAvKiBJZiB0aGUgaW5jb21pbmcgaW50ZXJmYWNlIHdhc24ndCBhbiBhbGlhcywgc2VuZCBhbiBSQSB1c2luZworCSB0aGUgY29udGV4dCBvZiB0aGUgaW5jb21pbmcgaW50ZXJmYWNlLiAqLworICAgICAgaWYgKCFicmlkZ2UpCisJLyogc291cmNlIGFkZHJlc3MgbWF5IG5vdCBiZSB2YWxpZCBpbiBzb2xpY2l0IHJlcXVlc3QuICovCisJc2VuZF9yYShub3csIGlmX2luZGV4LCBpbnRlcmZhY2UsICFJTjZfSVNfQUREUl9VTlNQRUNJRklFRCgmZnJvbS5zaW42X2FkZHIpID8gJmZyb20uc2luNl9hZGRyIDogTlVMTCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBzZW5kX3JhX2FsaWFzKHRpbWVfdCBub3csIGludCBpZmFjZSwgY2hhciAqaWZhY2VfbmFtZSwgc3RydWN0IGluNl9hZGRyICpkZXN0LCBpbnQgc2VuZF9pZmFjZSkKK3sKKyAgc3RydWN0IHJhX3BhY2tldCAqcmE7CisgIHN0cnVjdCByYV9wYXJhbSBwYXJtOworICBzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHI7CisgIHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQsICp0bXAsICAqKnVwOworICBzdHJ1Y3QgZGhjcF9uZXRpZCBpZmFjZV9pZDsKKyAgc3RydWN0IGRoY3Bfb3B0ICpvcHRfY2ZnOworICBzdHJ1Y3QgcmFfaW50ZXJmYWNlICpyYV9wYXJhbSA9IGZpbmRfaWZhY2VfcGFyYW0oaWZhY2VfbmFtZSk7CisgIGludCBkb25lX2RucyA9IDAsIG9sZF9wcmVmaXggPSAwLCBtdHUgPSAwOworICB1bnNpZ25lZCBpbnQgbWluX3ByZWZfdGltZTsKKyNpZmRlZiBIQVZFX0xJTlVYX05FVFdPUksKKyAgRklMRSAqZjsKKyNlbmRpZgorICAKKyAgcGFybS5pbmQgPSBpZmFjZTsKKyAgcGFybS5tYW5hZ2VkID0gMDsKKyAgcGFybS5vdGhlciA9IDA7CisgIHBhcm0uZm91bmRfY29udGV4dCA9IE5VTEw7CisgIHBhcm0uYWR2X3JvdXRlciA9IDA7CisgIHBhcm0uaWZfbmFtZSA9IGlmYWNlX25hbWU7CisgIHBhcm0uZmlyc3QgPSAxOworICBwYXJtLm5vdyA9IG5vdzsKKyAgcGFybS5nbG9iX3ByZWZfdGltZSA9IHBhcm0ubGlua19wcmVmX3RpbWUgPSBwYXJtLnVsYV9wcmVmX3RpbWUgPSAwOworICBwYXJtLmFkdl9pbnRlcnZhbCA9IGNhbGNfaW50ZXJ2YWwocmFfcGFyYW0pOworICBwYXJtLnByaW8gPSBjYWxjX3ByaW8ocmFfcGFyYW0pOworICAKKyAgcmVzZXRfY291bnRlcigpOworICAKKyAgaWYgKCEocmEgPSBleHBhbmQoc2l6ZW9mKHN0cnVjdCByYV9wYWNrZXQpKSkpCisgICAgcmV0dXJuOworICAKKyAgcmEtPnR5cGUgPSBORF9ST1VURVJfQURWRVJUOworICByYS0+Y29kZSA9IDA7CisgIHJhLT5ob3BfbGltaXQgPSBob3BfbGltaXQ7CisgIHJhLT5mbGFncyA9IHBhcm0ucHJpbzsKKyAgcmEtPmxpZmV0aW1lID0gaHRvbnMoY2FsY19saWZldGltZShyYV9wYXJhbSkpOworICByYS0+cmVhY2hhYmxlX3RpbWUgPSAwOworICByYS0+cmV0cmFuc190aW1lID0gMDsKKworICAvKiBzZXQgdGFnIHdpdGggbmFtZSA9PSBpbnRlcmZhY2UgKi8KKyAgaWZhY2VfaWQubmV0ID0gaWZhY2VfbmFtZTsKKyAgaWZhY2VfaWQubmV4dCA9IE5VTEw7CisgIHBhcm0udGFncyA9ICZpZmFjZV9pZDsgCisgIAorICBmb3IgKGNvbnRleHQgPSBkYWVtb24tPmRoY3A2OyBjb250ZXh0OyBjb250ZXh0ID0gY29udGV4dC0+bmV4dCkKKyAgICB7CisgICAgICBjb250ZXh0LT5mbGFncyAmPSB+Q09OVEVYVF9SQV9ET05FOworICAgICAgY29udGV4dC0+bmV0aWQubmV4dCA9ICZjb250ZXh0LT5uZXRpZDsKKyAgICB9CisKKyAgaWYgKCFpZmFjZV9lbnVtZXJhdGUoQUZfSU5FVDYsICZwYXJtLCBhZGRfcHJlZml4ZXMpKQorICAgIHJldHVybjsKKworICAvKiBGaW5kIHNtYWxsZXN0IHByZWZlcnJlZCB0aW1lIHdpdGhpbiBhZGRyZXNzIGNsYXNzZXMsCisgICAgIHRvIHVzZSBhcyBsaWZldGltZSBmb3Igb3B0aW9ucy4gVGhpcyBpcyBhIHJhdGhlciBhcmJpdHJhcnkgY2hvaWNlLiAqLworICBtaW5fcHJlZl90aW1lID0gMHhmZmZmZmZmZjsKKyAgaWYgKHBhcm0uZ2xvYl9wcmVmX3RpbWUgIT0gMCAmJiBwYXJtLmdsb2JfcHJlZl90aW1lIDwgbWluX3ByZWZfdGltZSkKKyAgICBtaW5fcHJlZl90aW1lID0gcGFybS5nbG9iX3ByZWZfdGltZTsKKyAgCisgIGlmIChwYXJtLnVsYV9wcmVmX3RpbWUgIT0gMCAmJiBwYXJtLnVsYV9wcmVmX3RpbWUgPCBtaW5fcHJlZl90aW1lKQorICAgIG1pbl9wcmVmX3RpbWUgPSBwYXJtLnVsYV9wcmVmX3RpbWU7CisKKyAgaWYgKHBhcm0ubGlua19wcmVmX3RpbWUgIT0gMCAmJiBwYXJtLmxpbmtfcHJlZl90aW1lIDwgbWluX3ByZWZfdGltZSkKKyAgICBtaW5fcHJlZl90aW1lID0gcGFybS5saW5rX3ByZWZfdGltZTsKKworICAvKiBMb29rIGZvciBjb25zdHJ1Y3RlZCBjb250ZXh0cyBhc3NvY2lhdGVkIHdpdGggYWRkcmVzc2VzIHdoaWNoIGhhdmUgZ29uZSwgCisgICAgIGFuZCBhZHZlcnRpc2UgdGhlbSB3aXRoIHByZWZlcnJlZF90aW1lID09IDAgIFJGQyA2MjA0IDQuMyBMLTEzICovCisgIGZvciAodXAgPSAmZGFlbW9uLT5kaGNwNiwgY29udGV4dCA9IGRhZW1vbi0+ZGhjcDY7IGNvbnRleHQ7IGNvbnRleHQgPSB0bXApCisgICAgeworICAgICAgdG1wID0gY29udGV4dC0+bmV4dDsKKworICAgICAgaWYgKGNvbnRleHQtPmlmX2luZGV4ID09IGlmYWNlICYmIChjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfT0xEKSkKKwl7CisJICB1bnNpZ25lZCBpbnQgb2xkID0gZGlmZnRpbWUobm93LCBjb250ZXh0LT5hZGRyZXNzX2xvc3RfdGltZSk7CisJICAKKwkgIGlmIChvbGQgPiBjb250ZXh0LT5zYXZlZF92YWxpZCkKKwkgICAgeyAKKwkgICAgICAvKiBXZSd2ZSBhZHZlcnRpc2VkIHRoaXMgZW5vdWdoLCB0aW1lIHRvIGdvICovCisJICAgICAKKwkgICAgICAvKiBJZiB0aGlzIGNvbnRleHQgaGVsZCB0aGUgdGltZW91dCwgYW5kIHRoZXJlJ3MgYW5vdGhlciBjb250ZXh0IGluIHVzZQorCQkgdHJhbnNmZXIgdGhlIHRpbWVvdXQgdGhlcmUuICovCisJICAgICAgaWYgKGNvbnRleHQtPnJhX3RpbWUgIT0gMCAmJiBwYXJtLmZvdW5kX2NvbnRleHQgJiYgcGFybS5mb3VuZF9jb250ZXh0LT5yYV90aW1lID09IDApCisJCW5ld190aW1lb3V0KHBhcm0uZm91bmRfY29udGV4dCwgaWZhY2VfbmFtZSwgbm93KTsKKwkgICAgICAKKwkgICAgICAqdXAgPSBjb250ZXh0LT5uZXh0OworCSAgICAgIGZyZWUoY29udGV4dCk7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIHN0cnVjdCBwcmVmaXhfb3B0ICpvcHQ7CisJICAgICAgc3RydWN0IGluNl9hZGRyIGxvY2FsID0gY29udGV4dC0+c3RhcnQ2OworCSAgICAgIGludCBkb19zbGFhYyA9IDA7CisKKwkgICAgICBvbGRfcHJlZml4ID0gMTsKKworCSAgICAgIC8qIHplcm8gbmV0IHBhcnQgb2YgYWRkcmVzcyAqLworCSAgICAgIHNldGFkZHI2cGFydCgmbG9jYWwsIGFkZHI2cGFydCgmbG9jYWwpICYgfigoY29udGV4dC0+cHJlZml4ID09IDY0KSA/ICh1NjQpLTFMTCA6ICgxTExVIDw8ICgxMjggLSBjb250ZXh0LT5wcmVmaXgpKSAtIDFMTFUpKTsKKwkgICAgIAorCSAgICAgIAorCSAgICAgIGlmIChjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfUkEpCisJCXsKKwkJICBkb19zbGFhYyA9IDE7CisJCSAgaWYgKGNvbnRleHQtPmZsYWdzICYgQ09OVEVYVF9ESENQKQorCQkgICAgeworCQkgICAgICBwYXJtLm90aGVyID0gMTsgCisJCSAgICAgIGlmICghKGNvbnRleHQtPmZsYWdzICYgQ09OVEVYVF9SQV9TVEFURUxFU1MpKQorCQkJcGFybS5tYW5hZ2VkID0gMTsKKwkJICAgIH0KKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIC8qIGRvbid0IGRvIFJBIGZvciBub24tcmEtb25seSB1bmxlc3MgLS1lbmFibGUtcmEgaXMgc2V0ICovCisJCSAgaWYgKG9wdGlvbl9ib29sKE9QVF9SQSkpCisJCSAgICB7CisJCSAgICAgIHBhcm0ubWFuYWdlZCA9IDE7CisJCSAgICAgIHBhcm0ub3RoZXIgPSAxOworCQkgICAgfQorCQl9CisKKwkgICAgICBpZiAoKG9wdCA9IGV4cGFuZChzaXplb2Yoc3RydWN0IHByZWZpeF9vcHQpKSkpCisJCXsKKwkJICBvcHQtPnR5cGUgPSBJQ01QNl9PUFRfUFJFRklYOworCQkgIG9wdC0+bGVuID0gNDsKKwkJICBvcHQtPnByZWZpeF9sZW4gPSBjb250ZXh0LT5wcmVmaXg7CisJCSAgLyogYXV0b25vbW91cyBvbmx5IGlmIHdlJ3JlIG5vdCBkb2luZyBkaGNwLCBzZXQKKyAgICAgICAgICAgICAgICAgICAgICJvbi1saW5rIiB1bmxlc3MgIm9mZi1saW5rIiB3YXMgc3BlY2lmaWVkICovCisJCSAgb3B0LT5mbGFncyA9IChkb19zbGFhYyA/IDB4NDAgOiAwKSB8CisgICAgICAgICAgICAgICAgICAgICgoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX1JBX09GRl9MSU5LKSA/IDAgOiAweDgwKTsKKwkJICBvcHQtPnZhbGlkX2xpZmV0aW1lID0gaHRvbmwoY29udGV4dC0+c2F2ZWRfdmFsaWQgLSBvbGQpOworCQkgIG9wdC0+cHJlZmVycmVkX2xpZmV0aW1lID0gaHRvbmwoMCk7CisJCSAgb3B0LT5yZXNlcnZlZCA9IDA7IAorCQkgIG9wdC0+cHJlZml4ID0gbG9jYWw7CisJCSAgCisJCSAgaW5ldF9udG9wKEFGX0lORVQ2LCAmbG9jYWwsIGRhZW1vbi0+YWRkcmJ1ZmYsIEFERFJTVFJMRU4pOworCQkgIGlmICghb3B0aW9uX2Jvb2woT1BUX1FVSUVUX1JBKSkKKwkJICAgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX0lORk8sICJSVFItQURWRVJUKCVzKSAlcyBvbGQgcHJlZml4IiwgaWZhY2VfbmFtZSwgZGFlbW9uLT5hZGRyYnVmZik7IAkJICAgIAorCQl9CisJICAgCisJICAgICAgdXAgPSAmY29udGV4dC0+bmV4dDsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwl1cCA9ICZjb250ZXh0LT5uZXh0OworICAgIH0KKyAgICAKKyAgLyogSWYgd2UncmUgYWR2ZXJ0aXNpbmcgb25seSBvbGQgcHJlZml4ZXMsIHNldCByb3V0ZXIgbGlmZXRpbWUgdG8gemVyby4gKi8KKyAgaWYgKG9sZF9wcmVmaXggJiYgIXBhcm0uZm91bmRfY29udGV4dCkKKyAgICByYS0+bGlmZXRpbWUgPSBodG9ucygwKTsKKworICAvKiBObyBwcmVmaXhlcyB0byBhZHZlcnRpc2UuICovCisgIGlmICghb2xkX3ByZWZpeCAmJiAhcGFybS5mb3VuZF9jb250ZXh0KQorICAgIHJldHVybjsgCisgIAorICAvKiBJZiB3ZSdyZSBzZW5kaW5nIHJvdXRlciBhZGRyZXNzIGluc3RlYWQgb2YgcHJlZml4IGluIGF0IGxlYXN0IG9uIHByZWZpeCwKKyAgICAgaW5jbHVkZSB0aGUgYWR2ZXJ0aXNlbWVudCBpbnRlcnZhbCBvcHRpb24uICovCisgIGlmIChwYXJtLmFkdl9yb3V0ZXIpCisgICAgeworICAgICAgcHV0X29wdDZfY2hhcihJQ01QNl9PUFRfQURWX0lOVEVSVkFMKTsKKyAgICAgIHB1dF9vcHQ2X2NoYXIoMSk7CisgICAgICBwdXRfb3B0Nl9zaG9ydCgwKTsKKyAgICAgIC8qIGludGVydmFsIHZhbHVlIGlzIGluIG1pbGxpc2Vjb25kcyAqLworICAgICAgcHV0X29wdDZfbG9uZygxMDAwICogY2FsY19pbnRlcnZhbChmaW5kX2lmYWNlX3BhcmFtKGlmYWNlX25hbWUpKSk7CisgICAgfQorCisgIC8qIFNldCB0aGUgTVRVIGZyb20gcmFfcGFyYW0gaWYgYW55LCBhbiBNVFUgb2YgMCBtZWFuIGF1dG9tYXRpYyBmb3IgbGludXgsICovCisgIC8qIGFuIE1UVSBvZiAtMSBwcmV2ZW50cyB0aGUgb3B0aW9uIGZyb20gYmVpbmcgc2VudC4gKi8KKyAgaWYgKHJhX3BhcmFtKQorICAgIG10dSA9IHJhX3BhcmFtLT5tdHU7CisjaWZkZWYgSEFWRV9MSU5VWF9ORVRXT1JLCisgIC8qIE5vdGUgdGhhdCBJUHY2IE1UVSBpcyBub3QgbmVjY2Vzc2FyaWx5IHRoZSBzYW1lIGFzIHRoZSBJUHY0IE1UVQorICAgICBhdmFpbGFibGUgZnJvbSBTSU9DR0lGTVRVICovCisgIGlmIChtdHUgPT0gMCkKKyAgICB7CisgICAgICBjaGFyICptdHVfbmFtZSA9IHJhX3BhcmFtID8gcmFfcGFyYW0tPm10dV9uYW1lIDogTlVMTDsKKyAgICAgIHNwcmludGYoZGFlbW9uLT5uYW1lYnVmZiwgIi9wcm9jL3N5cy9uZXQvaXB2Ni9jb25mLyVzL210dSIsIG10dV9uYW1lID8gOiBpZmFjZV9uYW1lKTsKKyAgICAgIGlmICgoZiA9IGZvcGVuKGRhZW1vbi0+bmFtZWJ1ZmYsICJyIikpKQorICAgICAgICB7CisgICAgICAgICAgaWYgKGZnZXRzKGRhZW1vbi0+bmFtZWJ1ZmYsIE1BWEROQU1FLCBmKSkKKyAgICAgICAgICAgIG10dSA9IGF0b2koZGFlbW9uLT5uYW1lYnVmZik7CisgICAgICAgICAgZmNsb3NlKGYpOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisgIGlmIChtdHUgPiAwKQorICAgIHsKKyAgICAgIHB1dF9vcHQ2X2NoYXIoSUNNUDZfT1BUX01UVSk7CisgICAgICBwdXRfb3B0Nl9jaGFyKDEpOworICAgICAgcHV0X29wdDZfc2hvcnQoMCk7CisgICAgICBwdXRfb3B0Nl9sb25nKG10dSk7CisgICAgfQorICAgICAKKyAgaWZhY2VfZW51bWVyYXRlKEFGX0xPQ0FMLCAmc2VuZF9pZmFjZSwgYWRkX2xsYSk7CisgCisgIC8qIFJETlNTLCBSRkMgNjEwNiwgdXNlIHJlbGV2YW50IERIQ1A2IG9wdGlvbnMgKi8KKyAgKHZvaWQpb3B0aW9uX2ZpbHRlcihwYXJtLnRhZ3MsIE5VTEwsIGRhZW1vbi0+ZGhjcF9vcHRzNik7CisgIAorICBmb3IgKG9wdF9jZmcgPSBkYWVtb24tPmRoY3Bfb3B0czY7IG9wdF9jZmc7IG9wdF9jZmcgPSBvcHRfY2ZnLT5uZXh0KQorICAgIHsKKyAgICAgIGludCBpOworICAgICAgCisgICAgICAvKiBuZXRpZHMgbWF0Y2ggYW5kIG5vdCBlbmNhcHN1bGF0ZWQ/ICovCisgICAgICBpZiAoIShvcHRfY2ZnLT5mbGFncyAmIERIT1BUX1RBR09LKSkKKyAgICAgICAgY29udGludWU7CisgICAgICAKKyAgICAgIGlmIChvcHRfY2ZnLT5vcHQgPT0gT1BUSU9ONl9ETlNfU0VSVkVSKQorICAgICAgICB7CisJICBzdHJ1Y3QgaW42X2FkZHIgKmE7CisJICBpbnQgbGVuOworCisJICBkb25lX2RucyA9IDE7CisKKyAgICAgICAgICBpZiAob3B0X2NmZy0+bGVuID09IDApCisJICAgIGNvbnRpbnVlOworCSAgCisJICAvKiByZWR1Y2UgbGVuIGZvciBhbnkgYWRkcmVzc2VzIHdlIGNhbid0IHN1YnN0aXR1dGUgKi8KKwkgIGZvciAoYSA9IChzdHJ1Y3QgaW42X2FkZHIgKilvcHRfY2ZnLT52YWwsIGxlbiA9IG9wdF9jZmctPmxlbiwgaSA9IDA7IAorCSAgICAgICBpIDwgb3B0X2NmZy0+bGVuOyBpICs9IElONkFERFJTWiwgYSsrKQorCSAgICBpZiAoKElONl9JU19BRERSX1VOU1BFQ0lGSUVEKGEpICYmIHBhcm0uZ2xvYl9wcmVmX3RpbWUgPT0gMCkgfHwKKwkJKElONl9JU19BRERSX1VMQV9aRVJPKGEpICYmIHBhcm0udWxhX3ByZWZfdGltZSA9PSAwKSB8fAorCQkoSU42X0lTX0FERFJfTElOS19MT0NBTF9aRVJPKGEpICYmIHBhcm0ubGlua19wcmVmX3RpbWUgPT0gMCkpCisJICAgICAgbGVuIC09IElONkFERFJTWjsKKworCSAgaWYgKGxlbiAhPSAwKQorCSAgICB7CisJICAgICAgcHV0X29wdDZfY2hhcihJQ01QNl9PUFRfUkROU1MpOworCSAgICAgIHB1dF9vcHQ2X2NoYXIoKGxlbi84KSArIDEpOworCSAgICAgIHB1dF9vcHQ2X3Nob3J0KDApOworCSAgICAgIHB1dF9vcHQ2X2xvbmcobWluX3ByZWZfdGltZSk7CisJIAorCSAgICAgIGZvciAoYSA9IChzdHJ1Y3QgaW42X2FkZHIgKilvcHRfY2ZnLT52YWwsIGkgPSAwOyBpIDwgIG9wdF9jZmctPmxlbjsgaSArPSBJTjZBRERSU1osIGErKykKKwkJaWYgKElONl9JU19BRERSX1VOU1BFQ0lGSUVEKGEpKQorCQkgIHsKKwkJICAgIGlmIChwYXJtLmdsb2JfcHJlZl90aW1lICE9IDApCisJCSAgICAgIHB1dF9vcHQ2KCZwYXJtLmxpbmtfZ2xvYmFsLCBJTjZBRERSU1opOworCQkgIH0KKwkJZWxzZSBpZiAoSU42X0lTX0FERFJfVUxBX1pFUk8oYSkpCisJCSAgeworCQkgICAgaWYgKHBhcm0udWxhX3ByZWZfdGltZSAhPSAwKQorCQkgICAgcHV0X29wdDYoJnBhcm0udWxhLCBJTjZBRERSU1opOworCQkgIH0KKwkJZWxzZSBpZiAoSU42X0lTX0FERFJfTElOS19MT0NBTF9aRVJPKGEpKQorCQkgIHsKKwkJICAgIGlmIChwYXJtLmxpbmtfcHJlZl90aW1lICE9IDApCisJCSAgICAgIHB1dF9vcHQ2KCZwYXJtLmxpbmtfbG9jYWwsIElONkFERFJTWik7CisJCSAgfQorCQllbHNlCisJCSAgcHV0X29wdDYoYSwgSU42QUREUlNaKTsKKwkgICAgfQorCX0KKyAgICAgIAorICAgICAgaWYgKG9wdF9jZmctPm9wdCA9PSBPUFRJT042X0RPTUFJTl9TRUFSQ0ggJiYgb3B0X2NmZy0+bGVuICE9IDApCisJeworCSAgaW50IGxlbiA9ICgob3B0X2NmZy0+bGVuKzcpLzgpOworCSAgCisJICBwdXRfb3B0Nl9jaGFyKElDTVA2X09QVF9ETlNTTCk7CisJICBwdXRfb3B0Nl9jaGFyKGxlbiArIDEpOworCSAgcHV0X29wdDZfc2hvcnQoMCk7CisJICBwdXRfb3B0Nl9sb25nKG1pbl9wcmVmX3RpbWUpOyAKKwkgIHB1dF9vcHQ2KG9wdF9jZmctPnZhbCwgb3B0X2NmZy0+bGVuKTsKKwkgIAorCSAgLyogcGFkICovCisJICBmb3IgKGkgPSBvcHRfY2ZnLT5sZW47IGkgPCBsZW4gKiA4OyBpKyspCisJICAgIHB1dF9vcHQ2X2NoYXIoMCk7CisJfQorICAgIH0KKwkKKyAgaWYgKGRhZW1vbi0+cG9ydCA9PSBOQU1FU0VSVkVSX1BPUlQgJiYgIWRvbmVfZG5zICYmIHBhcm0ubGlua19wcmVmX3RpbWUgIT0gMCkKKyAgICB7CisgICAgICAvKiBkZWZhdWx0ID09IHVzLCBhcyBsb25nIGFzIHdlIGFyZSBzdXBwbHlpbmcgRE5TIHNlcnZpY2UuICovCisgICAgICBwdXRfb3B0Nl9jaGFyKElDTVA2X09QVF9SRE5TUyk7CisgICAgICBwdXRfb3B0Nl9jaGFyKDMpOworICAgICAgcHV0X29wdDZfc2hvcnQoMCk7CisgICAgICBwdXRfb3B0Nl9sb25nKG1pbl9wcmVmX3RpbWUpOyAKKyAgICAgIHB1dF9vcHQ2KCZwYXJtLmxpbmtfbG9jYWwsIElONkFERFJTWik7CisgICAgfQorCisgIC8qIHNldCBtYW5hZ2VkIGJpdHMgdW5sZXNzIHdlJ3JlIHByb3ZpZGluZyBvbmx5IFJBIG9uIHRoaXMgbGluayAqLworICBpZiAocGFybS5tYW5hZ2VkKQorICAgIHJhLT5mbGFncyB8PSAweDgwOyAvKiBNIGZsYWcsIG1hbmFnZWQsICovCisgICBpZiAocGFybS5vdGhlcikKKyAgICByYS0+ZmxhZ3MgfD0gMHg0MDsgLyogTyBmbGFnLCBvdGhlciAqLyAKKwkJCQorICAvKiBkZWNpZGUgd2hlcmUgd2UncmUgc2VuZGluZyAqLworICBtZW1zZXQoJmFkZHIsIDAsIHNpemVvZihhZGRyKSk7CisjaWZkZWYgSEFWRV9TT0NLQUREUl9TQV9MRU4KKyAgYWRkci5zaW42X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKyNlbmRpZgorICBhZGRyLnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisgIGFkZHIuc2luNl9wb3J0ID0gaHRvbnMoSVBQUk9UT19JQ01QVjYpOworICBpZiAoZGVzdCkKKyAgICB7CisgICAgICBhZGRyLnNpbjZfYWRkciA9ICpkZXN0OworICAgICAgaWYgKElONl9JU19BRERSX0xJTktMT0NBTChkZXN0KSB8fAorCSAgSU42X0lTX0FERFJfTUNfTElOS0xPQ0FMKGRlc3QpKQorCWFkZHIuc2luNl9zY29wZV9pZCA9IGlmYWNlOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGluZXRfcHRvbihBRl9JTkVUNiwgQUxMX05PREVTLCAmYWRkci5zaW42X2FkZHIpOyAKKyAgICAgIHNldHNvY2tvcHQoZGFlbW9uLT5pY21wNmZkLCBJUFBST1RPX0lQVjYsIElQVjZfTVVMVElDQVNUX0lGLCAmc2VuZF9pZmFjZSwgc2l6ZW9mKHNlbmRfaWZhY2UpKTsKKyAgICB9CisgIAorICB3aGlsZSAocmV0cnlfc2VuZChzZW5kdG8oZGFlbW9uLT5pY21wNmZkLCBkYWVtb24tPm91dHBhY2tldC5pb3ZfYmFzZSwgCisJCQkgICBzYXZlX2NvdW50ZXIoLTEpLCAwLCAoc3RydWN0IHNvY2thZGRyICopJmFkZHIsIAorCQkJICAgc2l6ZW9mKGFkZHIpKSkpOworICAKK30KKworc3RhdGljIHZvaWQgc2VuZF9yYSh0aW1lX3Qgbm93LCBpbnQgaWZhY2UsIGNoYXIgKmlmYWNlX25hbWUsIHN0cnVjdCBpbjZfYWRkciAqZGVzdCkKK3sKKyAgLyogU2VuZCBhbiBSQSBvbiB0aGUgc2FtZSBpbnRlcmZhY2UgdGhhdCB0aGUgUkEgY29udGVudCBpcyBiYXNlZAorICAgICBvbi4gKi8KKyAgc2VuZF9yYV9hbGlhcyhub3csIGlmYWNlLCBpZmFjZV9uYW1lLCBkZXN0LCBpZmFjZSk7Cit9CisKK3N0YXRpYyBpbnQgYWRkX3ByZWZpeGVzKHN0cnVjdCBpbjZfYWRkciAqbG9jYWwsICBpbnQgcHJlZml4LAorCQkJaW50IHNjb3BlLCBpbnQgaWZfaW5kZXgsIGludCBmbGFncywgCisJCQl1bnNpZ25lZCBpbnQgcHJlZmVycmVkLCB1bnNpZ25lZCBpbnQgdmFsaWQsIHZvaWQgKnZwYXJhbSkKK3sKKyAgc3RydWN0IHJhX3BhcmFtICpwYXJhbSA9IHZwYXJhbTsKKworICAodm9pZClzY29wZTsgLyogd2FybmluZyAqLworICAKKyAgaWYgKGlmX2luZGV4ID09IHBhcmFtLT5pbmQpCisgICAgeworICAgICAgaWYgKElONl9JU19BRERSX0xJTktMT0NBTChsb2NhbCkpCisJeworCSAgLyogQ2FuIHRoZXJlIGJlIG1vcmUgdGhhbiBvbmUgTEwgYWRkcmVzcz8KKwkgICAgIFNlbGVjdCB0aGUgb25lIHdpdGggdGhlIGxvbmdlc3QgcHJlZmVycmVkIHRpbWUgCisJICAgICBpZiB0aGVyZSBpcy4gKi8KKwkgIGlmIChwcmVmZXJyZWQgPiBwYXJhbS0+bGlua19wcmVmX3RpbWUpCisJICAgIHsKKwkgICAgICBwYXJhbS0+bGlua19wcmVmX3RpbWUgPSBwcmVmZXJyZWQ7CisJICAgICAgcGFyYW0tPmxpbmtfbG9jYWwgPSAqbG9jYWw7CisJICAgIH0KKwl9CisgICAgICBlbHNlIGlmICghSU42X0lTX0FERFJfTE9PUEJBQ0sobG9jYWwpICYmCisJICAgICAgICFJTjZfSVNfQUREUl9NVUxUSUNBU1QobG9jYWwpKQorCXsKKwkgIGludCByZWFsX3ByZWZpeCA9IDA7CisJICBpbnQgZG9fc2xhYWMgPSAwOworCSAgaW50IGRlcHJlY2F0ZSAgPSAwOworCSAgaW50IGNvbnN0cnVjdGVkID0gMDsKKwkgIGludCBhZHZfcm91dGVyID0gMDsKKwkgIGludCBvZmZfbGluayA9IDA7CisJICB1bnNpZ25lZCBpbnQgdGltZSA9IDB4ZmZmZmZmZmY7CisJICBzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0OworCSAgCisJICBmb3IgKGNvbnRleHQgPSBkYWVtb24tPmRoY3A2OyBjb250ZXh0OyBjb250ZXh0ID0gY29udGV4dC0+bmV4dCkKKwkgICAgaWYgKCEoY29udGV4dC0+ZmxhZ3MgJiAoQ09OVEVYVF9URU1QTEFURSB8IENPTlRFWFRfT0xEKSkgJiYKKwkJcHJlZml4IDw9IGNvbnRleHQtPnByZWZpeCAmJgorCQlpc19zYW1lX25ldDYobG9jYWwsICZjb250ZXh0LT5zdGFydDYsIGNvbnRleHQtPnByZWZpeCkgJiYKKwkJaXNfc2FtZV9uZXQ2KGxvY2FsLCAmY29udGV4dC0+ZW5kNiwgY29udGV4dC0+cHJlZml4KSkKKwkgICAgICB7CisJCWNvbnRleHQtPnNhdmVkX3ZhbGlkID0gdmFsaWQ7CisKKwkJaWYgKGNvbnRleHQtPmZsYWdzICYgQ09OVEVYVF9SQSkgCisJCSAgeworCQkgICAgZG9fc2xhYWMgPSAxOworCQkgICAgaWYgKGNvbnRleHQtPmZsYWdzICYgQ09OVEVYVF9ESENQKQorCQkgICAgICB7CisJCQlwYXJhbS0+b3RoZXIgPSAxOyAKKwkJCWlmICghKGNvbnRleHQtPmZsYWdzICYgQ09OVEVYVF9SQV9TVEFURUxFU1MpKQorCQkJICBwYXJhbS0+bWFuYWdlZCA9IDE7CisJCSAgICAgIH0KKwkJICB9CisJCWVsc2UKKwkJICB7CisJCSAgICAvKiBkb24ndCBkbyBSQSBmb3Igbm9uLXJhLW9ubHkgdW5sZXNzIC0tZW5hYmxlLXJhIGlzIHNldCAqLworCQkgICAgaWYgKCFvcHRpb25fYm9vbChPUFRfUkEpKQorCQkgICAgICBjb250aW51ZTsKKwkJICAgIHBhcmFtLT5tYW5hZ2VkID0gMTsKKwkJICAgIHBhcmFtLT5vdGhlciA9IDE7CisJCSAgfQorCisJCS8qIENvbmZpZ3VyZWQgdG8gYWR2ZXJ0aXNlIHJvdXRlciBhZGRyZXNzLCBub3QgcHJlZml4LiBTZWUgUkZDIDM3NzUgNy4yIAorCQkgSW4gdGhpcyBjYXNlIHdlIGRvIGFsbCBhZGRyZXNzZXMgYXNzb2NpYXRlZCB3aXRoIGEgY29udGV4dCwgCisJCSBoZW5jZSB0aGUgcmVhbF9wcmVmaXggc2V0dGluZyBoZXJlLiAqLworCQlpZiAoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX1JBX1JPVVRFUikKKwkJICB7CisJCSAgICBhZHZfcm91dGVyID0gMTsKKwkJICAgIHBhcmFtLT5hZHZfcm91dGVyID0gMTsKKwkJICAgIHJlYWxfcHJlZml4ID0gY29udGV4dC0+cHJlZml4OworCQkgIH0KKworCQkvKiBmaW5kIGZsb29yIHRpbWUsIGRvbid0IHJlZHVjZSBiZWxvdyAzICogUkEgaW50ZXJ2YWwuICovCisJCWlmICh0aW1lID4gY29udGV4dC0+bGVhc2VfdGltZSkKKwkJICB7CisJCSAgICB0aW1lID0gY29udGV4dC0+bGVhc2VfdGltZTsKKwkJICAgIGlmICh0aW1lIDwgKCh1bnNpZ25lZCBpbnQpKDMgKiBwYXJhbS0+YWR2X2ludGVydmFsKSkpCisJCSAgICAgIHRpbWUgPSAzICogcGFyYW0tPmFkdl9pbnRlcnZhbDsKKwkJICB9CisKKwkJaWYgKGNvbnRleHQtPmZsYWdzICYgQ09OVEVYVF9ERVBSRUNBVEUpCisJCSAgZGVwcmVjYXRlID0gMTsKKwkJCisJCWlmIChjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfQ09OU1RSVUNURUQpCisJCSAgY29uc3RydWN0ZWQgPSAxOworCisKKwkJLyogY29sbGVjdCBkaGNwLXJhbmdlIHRhZ3MgKi8KKwkJaWYgKGNvbnRleHQtPm5ldGlkLm5leHQgPT0gJmNvbnRleHQtPm5ldGlkICYmIGNvbnRleHQtPm5ldGlkLm5ldCkKKwkJICB7CisJCSAgICBjb250ZXh0LT5uZXRpZC5uZXh0ID0gcGFyYW0tPnRhZ3M7CisJCSAgICBwYXJhbS0+dGFncyA9ICZjb250ZXh0LT5uZXRpZDsKKwkJICB9CisJCSAgCisJCS8qIHN1YnNlcXVlbnQgcHJlZml4ZXMgb24gdGhlIHNhbWUgaW50ZXJmYWNlIAorCQkgICBhbmQgc3Vic2VxdWVudCBpbnN0YW5jZXMgb2YgdGhpcyBwcmVmaXggZG9uJ3QgbmVlZCB0aW1lcnMuCisJCSAgIEJlIGNhcmVmdWwgbm90IHRvIGZpbmQgdGhlIHNhbWUgcHJlZml4IHR3aWNlIHdpdGggZGlmZmVyZW50CisJCSAgIGFkZHJlc3NlcyB1bmxlc3Mgd2UncmUgYWR2ZXJ0aXNpbmcgdGhlIGFjdHVhbCBhZGRyZXNzZXMuICovCisJCWlmICghKGNvbnRleHQtPmZsYWdzICYgQ09OVEVYVF9SQV9ET05FKSkKKwkJICB7CisJCSAgICBpZiAoIXBhcmFtLT5maXJzdCkKKwkJICAgICAgY29udGV4dC0+cmFfdGltZSA9IDA7CisJCSAgICBjb250ZXh0LT5mbGFncyB8PSBDT05URVhUX1JBX0RPTkU7CisJCSAgICByZWFsX3ByZWZpeCA9IGNvbnRleHQtPnByZWZpeDsKKyAgICAgICAgICAgICAgICAgICAgb2ZmX2xpbmsgPSAoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX1JBX09GRl9MSU5LKTsKKwkJICB9CisKKwkJcGFyYW0tPmZpcnN0ID0gMDsKKwkJLyogZm91bmRfY29udGV4dCBpcyB0aGUgX2xhc3RfIG9uZSB3ZSBmb3VuZCwgc28gaWYgdGhlcmUncyAKKwkJICAgbW9yZSB0aGFuIG9uZSwgaXQncyBub3QgdGhlIGZpcnN0LiAqLworCQlwYXJhbS0+Zm91bmRfY29udGV4dCA9IGNvbnRleHQ7CisJICAgICAgfQorCisJICAvKiBjb25maWd1cmVkIHRpbWUgaXMgY2VpbGluZyAqLworCSAgaWYgKCFjb25zdHJ1Y3RlZCB8fCB2YWxpZCA+IHRpbWUpCisJICAgIHZhbGlkID0gdGltZTsKKwkgIAorCSAgaWYgKGZsYWdzICYgSUZBQ0VfREVQUkVDQVRFRCkKKwkgICAgcHJlZmVycmVkID0gMDsKKwkgIAorCSAgaWYgKGRlcHJlY2F0ZSkKKwkgICAgdGltZSA9IDA7CisJICAKKwkgIC8qIGNvbmZpZ3VyZWQgdGltZSBpcyBjZWlsaW5nICovCisJICBpZiAoIWNvbnN0cnVjdGVkIHx8IHByZWZlcnJlZCA+IHRpbWUpCisJICAgIHByZWZlcnJlZCA9IHRpbWU7CisJICAKKwkgIGlmIChJTjZfSVNfQUREUl9VTEEobG9jYWwpKQorCSAgICB7CisJICAgICAgaWYgKHByZWZlcnJlZCA+IHBhcmFtLT51bGFfcHJlZl90aW1lKQorCQl7CisJCSAgcGFyYW0tPnVsYV9wcmVmX3RpbWUgPSBwcmVmZXJyZWQ7CisJCSAgcGFyYW0tPnVsYSA9ICpsb2NhbDsKKwkJfQorCSAgICB9CisJICBlbHNlIAorCSAgICB7CisJICAgICAgaWYgKHByZWZlcnJlZCA+IHBhcmFtLT5nbG9iX3ByZWZfdGltZSkKKwkJeworCQkgIHBhcmFtLT5nbG9iX3ByZWZfdGltZSA9IHByZWZlcnJlZDsKKwkJICBwYXJhbS0+bGlua19nbG9iYWwgPSAqbG9jYWw7CisJCX0KKwkgICAgfQorCSAgCisJICBpZiAocmVhbF9wcmVmaXggIT0gMCkKKwkgICAgeworCSAgICAgIHN0cnVjdCBwcmVmaXhfb3B0ICpvcHQ7CisJICAgICAJICAgICAgCisJICAgICAgaWYgKChvcHQgPSBleHBhbmQoc2l6ZW9mKHN0cnVjdCBwcmVmaXhfb3B0KSkpKQorCQl7CisJCSAgLyogemVybyBuZXQgcGFydCBvZiBhZGRyZXNzICovCisJCSAgaWYgKCFhZHZfcm91dGVyKQorCQkgICAgc2V0YWRkcjZwYXJ0KGxvY2FsLCBhZGRyNnBhcnQobG9jYWwpICYgfigocmVhbF9wcmVmaXggPT0gNjQpID8gKHU2NCktMUxMIDogKDFMTFUgPDwgKDEyOCAtIHJlYWxfcHJlZml4KSkgLSAxTExVKSk7CisJCSAgCisJCSAgb3B0LT50eXBlID0gSUNNUDZfT1BUX1BSRUZJWDsKKwkJICBvcHQtPmxlbiA9IDQ7CisJCSAgb3B0LT5wcmVmaXhfbGVuID0gcmVhbF9wcmVmaXg7CisJCSAgLyogYXV0b25vbW91cyBvbmx5IGlmIHdlJ3JlIG5vdCBkb2luZyBkaGNwLCBzZXQKKyAgICAgICAgICAgICAgICAgICAgICJvbi1saW5rIiB1bmxlc3MgIm9mZi1saW5rIiB3YXMgc3BlY2lmaWVkICovCisJCSAgb3B0LT5mbGFncyA9IChvZmZfbGluayA/IDAgOiAweDgwKTsKKwkJICBpZiAoZG9fc2xhYWMpCisJCSAgICBvcHQtPmZsYWdzIHw9IDB4NDA7CisJCSAgaWYgKGFkdl9yb3V0ZXIpCisJCSAgICBvcHQtPmZsYWdzIHw9IDB4MjA7CisJCSAgb3B0LT52YWxpZF9saWZldGltZSA9IGh0b25sKHZhbGlkKTsKKwkJICBvcHQtPnByZWZlcnJlZF9saWZldGltZSA9IGh0b25sKHByZWZlcnJlZCk7CisJCSAgb3B0LT5yZXNlcnZlZCA9IDA7IAorCQkgIG9wdC0+cHJlZml4ID0gKmxvY2FsOworCQkgIAorCQkgIGluZXRfbnRvcChBRl9JTkVUNiwgbG9jYWwsIGRhZW1vbi0+YWRkcmJ1ZmYsIEFERFJTVFJMRU4pOworCQkgIGlmICghb3B0aW9uX2Jvb2woT1BUX1FVSUVUX1JBKSkKKwkJICAgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX0lORk8sICJSVFItQURWRVJUKCVzKSAlcyIsIHBhcmFtLT5pZl9uYW1lLCBkYWVtb24tPmFkZHJidWZmKTsgCQkgICAgCisJCX0KKwkgICAgfQorCX0KKyAgICB9ICAgICAgICAgIAorICByZXR1cm4gMTsKK30KKworc3RhdGljIGludCBhZGRfbGxhKGludCBpbmRleCwgdW5zaWduZWQgaW50IHR5cGUsIGNoYXIgKm1hYywgc2l6ZV90IG1hY2xlbiwgdm9pZCAqcGFybSkKK3sKKyAgKHZvaWQpdHlwZTsKKworICBpZiAoaW5kZXggPT0gKigoaW50ICopcGFybSkpCisgICAgeworICAgICAgLyogc2l6ZSBpcyBpbiB1bml0cyBvZiA4IG9jdGV0cyBhbmQgaW5jbHVkZXMgdHlwZSBhbmQgbGVuZ3RoICgyIGJ5dGVzKQorCSBhZGQgNyB0byByb3VuZCB1cCAqLworICAgICAgaW50IGxlbiA9IChtYWNsZW4gKyA5KSA+PiAzOworICAgICAgdW5zaWduZWQgY2hhciAqcCA9IGV4cGFuZChsZW4gPDwgMyk7CisgICAgICBtZW1zZXQocCwgMCwgbGVuIDw8IDMpOworICAgICAgKnArKyA9IElDTVA2X09QVF9TT1VSQ0VfTUFDOworICAgICAgKnArKyA9IGxlbjsKKyAgICAgIG1lbWNweShwLCBtYWMsIG1hY2xlbik7CisKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICByZXR1cm4gMTsKK30KKwordGltZV90IHBlcmlvZGljX3JhKHRpbWVfdCBub3cpCit7CisgIHN0cnVjdCBzZWFyY2hfcGFyYW0gcGFyYW07CisgIHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQ7CisgIHRpbWVfdCBuZXh0X2V2ZW50OworICBzdHJ1Y3QgYWxpYXNfcGFyYW0gYXBhcmFtOworICAgIAorICBwYXJhbS5ub3cgPSBub3c7CisgIHBhcmFtLmlmYWNlID0gMDsKKworICB3aGlsZSAoMSkKKyAgICB7CisgICAgICAvKiBmaW5kIG92ZXJkdWUgZXZlbnRzLCBhbmQgdGltZSBvZiBmaXJzdCBmdXR1cmUgZXZlbnQgKi8KKyAgICAgIGZvciAobmV4dF9ldmVudCA9IDAsIGNvbnRleHQgPSBkYWVtb24tPmRoY3A2OyBjb250ZXh0OyBjb250ZXh0ID0gY29udGV4dC0+bmV4dCkKKwlpZiAoY29udGV4dC0+cmFfdGltZSAhPSAwKQorCSAgeworCSAgICBpZiAoZGlmZnRpbWUoY29udGV4dC0+cmFfdGltZSwgbm93KSA8PSAwLjApCisJICAgICAgYnJlYWs7IC8qIG92ZXJkdWUgKi8KKwkgICAgCisJICAgIGlmIChuZXh0X2V2ZW50ID09IDAgfHwgZGlmZnRpbWUobmV4dF9ldmVudCwgY29udGV4dC0+cmFfdGltZSkgPiAwLjApCisJICAgICAgbmV4dF9ldmVudCA9IGNvbnRleHQtPnJhX3RpbWU7CisJICB9CisgICAgICAKKyAgICAgIC8qIG5vbmUgb3ZlcmR1ZSAqLworICAgICAgaWYgKCFjb250ZXh0KQorCWJyZWFrOworICAgICAgCisgICAgICBpZiAoKGNvbnRleHQtPmZsYWdzICYgQ09OVEVYVF9PTEQpICYmIAorCSAgY29udGV4dC0+aWZfaW5kZXggIT0gMCAmJiAKKwkgIGluZGV4dG9uYW1lKGRhZW1vbi0+aWNtcDZmZCwgY29udGV4dC0+aWZfaW5kZXgsIHBhcmFtLm5hbWUpKQorCXsKKwkgIC8qIEEgY29udGV4dCBmb3IgYW4gb2xkIGFkZHJlc3MuIFdlJ2xsIG5vdCBmaW5kIHRoZSBpbnRlcmZhY2UgYnkgCisJICAgICBsb29raW5nIGZvciBhZGRyZXNzZXMsIGJ1dCB3ZSBrbm93IGl0IGFueXdheSwgc2luY2UgdGhlIGNvbnRleHQgaXMKKwkgICAgIGNvbnN0cnVjdGVkICovCisJICBwYXJhbS5pZmFjZSA9IGNvbnRleHQtPmlmX2luZGV4OworCSAgbmV3X3RpbWVvdXQoY29udGV4dCwgcGFyYW0ubmFtZSwgbm93KTsKKwl9CisgICAgICBlbHNlIGlmIChpZmFjZV9lbnVtZXJhdGUoQUZfSU5FVDYsICZwYXJhbSwgaWZhY2Vfc2VhcmNoKSkKKwkvKiBUaGVyZSdzIGEgY29udGV4dCBvdmVyZHVlLCBidXQgd2UgY2FuJ3QgZmluZCBhbiBpbnRlcmZhY2UKKwkgICBhc3NvY2lhdGVkIHdpdGggaXQsIGJlY2F1c2UgaXQncyBmb3IgYSBzdWJuZXQgd2UgZG9udCAKKwkgICBoYXZlIGFuIGludGVyZmFjZSBvbi4gUHJvYmFibHkgd2UncmUgZG9pbmcgREhDUCBvbgorCSAgIGEgcmVtb3RlIHN1Ym5ldCB2aWEgYSByZWxheS4gWmVybyB0aGUgdGltZXIsIHNpbmNlIHdlIHdvbid0CisJICAgZXZlciBiZSBhYmxlIHRvIHNlbmQgcmEncyBhbmQgc2F0aXNmeSBpdC4gKi8KKwljb250ZXh0LT5yYV90aW1lID0gMDsKKyAgICAgIAorICAgICAgaWYgKHBhcmFtLmlmYWNlICE9IDAgJiYKKwkgIGlmYWNlX2NoZWNrKEFGX0xPQ0FMLCBOVUxMLCBwYXJhbS5uYW1lLCBOVUxMKSkKKwl7CisJICBzdHJ1Y3QgaW5hbWUgKnRtcDsKKwkgIGZvciAodG1wID0gZGFlbW9uLT5kaGNwX2V4Y2VwdDsgdG1wOyB0bXAgPSB0bXAtPm5leHQpCisJICAgIGlmICh0bXAtPm5hbWUgJiYgd2lsZGNhcmRfbWF0Y2godG1wLT5uYW1lLCBwYXJhbS5uYW1lKSkKKwkgICAgICBicmVhazsKKwkgIGlmICghdG1wKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBzZW5kX3JhKG5vdywgcGFyYW0uaWZhY2UsIHBhcmFtLm5hbWUsIE5VTEwpOyAKKworICAgICAgICAgICAgICAvKiBBbHNvIHNlbmQgb24gYWxsIGludGVyZmFjZXMgdGhhdCBhcmUgYWxpYXNlcyBvZiB0aGlzCisgICAgICAgICAgICAgICAgIG9uZS4gKi8KKyAgICAgICAgICAgICAgZm9yIChhcGFyYW0uYnJpZGdlID0gZGFlbW9uLT5icmlkZ2VzOworICAgICAgICAgICAgICAgICAgIGFwYXJhbS5icmlkZ2U7CisgICAgICAgICAgICAgICAgICAgYXBhcmFtLmJyaWRnZSA9IGFwYXJhbS5icmlkZ2UtPm5leHQpCisgICAgICAgICAgICAgICAgaWYgKChpbnQpaWZfbmFtZXRvaW5kZXgoYXBhcmFtLmJyaWRnZS0+aWZhY2UpID09IHBhcmFtLmlmYWNlKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvKiBDb3VudCB0aGUgbnVtYmVyIG9mIGFsaWFzIGludGVyZmFjZXMgZm9yIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgJ2JyaWRnZScsIGJ5IGNhbGxpbmcgaWZhY2VfZW51bWVyYXRlIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgc2VuZF9yYV90b19hbGlhc2VzIGFuZCBOVUxMIGFsaWFzX2lmcy4gKi8KKyAgICAgICAgICAgICAgICAgICAgYXBhcmFtLmlmYWNlID0gcGFyYW0uaWZhY2U7CisgICAgICAgICAgICAgICAgICAgIGFwYXJhbS5hbGlhc19pZnMgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICBhcGFyYW0ubnVtX2FsaWFzX2lmcyA9IDA7CisgICAgICAgICAgICAgICAgICAgIGlmYWNlX2VudW1lcmF0ZShBRl9MT0NBTCwgJmFwYXJhbSwgc2VuZF9yYV90b19hbGlhc2VzKTsKKyAgICAgICAgICAgICAgICAgICAgbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfSU5GTywgIlJUUi1BRFZFUlQoJXMpICVzID0+ICVkIGFsaWFzKGVzKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS5uYW1lLCBkYWVtb24tPmFkZHJidWZmLCBhcGFyYW0ubnVtX2FsaWFzX2lmcyk7CisKKyAgICAgICAgICAgICAgICAgICAgLyogQWxsb2NhdGUgbWVtb3J5IHRvIHN0b3JlIHRoZSBhbGlhcyBpbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlcy4gKi8KKyAgICAgICAgICAgICAgICAgICAgYXBhcmFtLmFsaWFzX2lmcyA9IChpbnQgKil3aGluZV9tYWxsb2MoYXBhcmFtLm51bV9hbGlhc19pZnMgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoaW50KSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChhcGFyYW0uYWxpYXNfaWZzKQorICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVzZSBpZmFjZV9lbnVtZXJhdGUgYWdhaW4gdG8gZ2V0IHRoZSBhbGlhcworICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlIGluZGljZXMsIHRoZW4gc2VuZCBvbiBlYWNoIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0aG9zZS4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGFwYXJhbS5tYXhfYWxpYXNfaWZzID0gYXBhcmFtLm51bV9hbGlhc19pZnM7CisgICAgICAgICAgICAgICAgICAgICAgICBhcGFyYW0ubnVtX2FsaWFzX2lmcyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBpZmFjZV9lbnVtZXJhdGUoQUZfTE9DQUwsICZhcGFyYW0sIHNlbmRfcmFfdG9fYWxpYXNlcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgYXBhcmFtLm51bV9hbGlhc19pZnM7IGFwYXJhbS5udW1fYWxpYXNfaWZzLS0pCisgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19JTkZPLCAiUlRSLUFEVkVSVCglcykgJXMgPT4gaS9mICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0ubmFtZSwgZGFlbW9uLT5hZGRyYnVmZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBhcmFtLmFsaWFzX2lmc1thcGFyYW0ubnVtX2FsaWFzX2lmcyAtIDFdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kX3JhX2FsaWFzKG5vdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLmlmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0ubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcGFyYW0uYWxpYXNfaWZzW2FwYXJhbS5udW1fYWxpYXNfaWZzIC0gMV0pOworICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBmcmVlKGFwYXJhbS5hbGlhc19pZnMpOworICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvKiBUaGUgc291cmNlIGludGVyZmFjZSBjYW4gb25seSBhcHBlYXIgaW4gYXQgbW9zdAorICAgICAgICAgICAgICAgICAgICAgICBvbmUgLS1icmlkZ2UtaW50ZXJmYWNlLiAqLworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwl9CisgICAgfSAgICAgIAorICByZXR1cm4gbmV4dF9ldmVudDsKK30KKworc3RhdGljIGludCBzZW5kX3JhX3RvX2FsaWFzZXMoaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgdHlwZSwgY2hhciAqbWFjLCBzaXplX3QgbWFjbGVuLCB2b2lkICpwYXJtKQoreworICBzdHJ1Y3QgYWxpYXNfcGFyYW0gKmFwYXJhbSA9IChzdHJ1Y3QgYWxpYXNfcGFyYW0gKilwYXJtOworICBjaGFyIGlmcm5fbmFtZVtJRk5BTVNJWl07CisgIHN0cnVjdCBkaGNwX2JyaWRnZSAqYWxpYXM7CisKKyAgKHZvaWQpdHlwZTsKKyAgKHZvaWQpbWFjOworICAodm9pZCltYWNsZW47CisKKyAgaWYgKGlmX2luZGV4dG9uYW1lKGluZGV4LCBpZnJuX25hbWUpKQorICAgIGZvciAoYWxpYXMgPSBhcGFyYW0tPmJyaWRnZS0+YWxpYXM7IGFsaWFzOyBhbGlhcyA9IGFsaWFzLT5uZXh0KQorICAgICAgaWYgKHdpbGRjYXJkX21hdGNobihhbGlhcy0+aWZhY2UsIGlmcm5fbmFtZSwgSUZOQU1TSVopKQorICAgICAgICB7CisgICAgICAgICAgaWYgKGFwYXJhbS0+YWxpYXNfaWZzICYmIChhcGFyYW0tPm51bV9hbGlhc19pZnMgPCBhcGFyYW0tPm1heF9hbGlhc19pZnMpKQorICAgICAgICAgICAgYXBhcmFtLT5hbGlhc19pZnNbYXBhcmFtLT5udW1fYWxpYXNfaWZzXSA9IGluZGV4OworICAgICAgICAgIGFwYXJhbS0+bnVtX2FsaWFzX2lmcysrOworICAgICAgICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgaWZhY2Vfc2VhcmNoKHN0cnVjdCBpbjZfYWRkciAqbG9jYWwsICBpbnQgcHJlZml4LAorCQkJaW50IHNjb3BlLCBpbnQgaWZfaW5kZXgsIGludCBmbGFncywgCisJCQlpbnQgcHJlZmVycmVkLCBpbnQgdmFsaWQsIHZvaWQgKnZwYXJhbSkKK3sKKyAgc3RydWN0IHNlYXJjaF9wYXJhbSAqcGFyYW0gPSB2cGFyYW07CisgIHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQ7CisKKyAgKHZvaWQpc2NvcGU7CisgICh2b2lkKXByZWZlcnJlZDsKKyAgKHZvaWQpdmFsaWQ7CisgCisgIGZvciAoY29udGV4dCA9IGRhZW1vbi0+ZGhjcDY7IGNvbnRleHQ7IGNvbnRleHQgPSBjb250ZXh0LT5uZXh0KQorICAgIGlmICghKGNvbnRleHQtPmZsYWdzICYgKENPTlRFWFRfVEVNUExBVEUgfCBDT05URVhUX09MRCkpICYmCisJcHJlZml4IDw9IGNvbnRleHQtPnByZWZpeCAmJgorCWlzX3NhbWVfbmV0Nihsb2NhbCwgJmNvbnRleHQtPnN0YXJ0NiwgY29udGV4dC0+cHJlZml4KSAmJgorCWlzX3NhbWVfbmV0Nihsb2NhbCwgJmNvbnRleHQtPmVuZDYsIGNvbnRleHQtPnByZWZpeCkgJiYKKwljb250ZXh0LT5yYV90aW1lICE9IDAgJiYgCisJZGlmZnRpbWUoY29udGV4dC0+cmFfdGltZSwgcGFyYW0tPm5vdykgPD0gMC4wKQorICAgICAgeworCS8qIGZvdW5kIGFuIGludGVyZmFjZSB0aGF0J3Mgb3ZlcmR1ZSBmb3IgUkEgZGV0ZXJtaW5lIG5ldyAKKwkgICB0aW1lb3V0IHZhbHVlIGFuZCBhcnJhbmdlIGZvciBSQSB0byBiZSBzZW50IHVubGVzcyBpbnRlcmZhY2UgaXMKKwkgICBzdGlsbCBkb2luZyBEQUQuKi8KKwkKKwlpZiAoIShmbGFncyAmIElGQUNFX1RFTlRBVElWRSkpCisJICBwYXJhbS0+aWZhY2UgPSBpZl9pbmRleDsKKwkKKwkvKiBzaG91bGQgbmV2ZXIgZmFpbCAqLworCWlmICghaW5kZXh0b25hbWUoZGFlbW9uLT5pY21wNmZkLCBpZl9pbmRleCwgcGFyYW0tPm5hbWUpKQorCSAgeworCSAgICBwYXJhbS0+aWZhY2UgPSAwOworCSAgICByZXR1cm4gMDsKKwkgIH0KKwkKKwluZXdfdGltZW91dChjb250ZXh0LCBwYXJhbS0+bmFtZSwgcGFyYW0tPm5vdyk7CisJCisJLyogemVybyB0aW1lcnMgZm9yIG90aGVyIGNvbnRleHRzIG9uIHRoZSBzYW1lIHN1Ym5ldCwgc28gdGhleSBkb24ndCB0aW1lb3V0IAorCSAgIGluZGVwZW5kZW50bHkgKi8KKwlmb3IgKGNvbnRleHQgPSBjb250ZXh0LT5uZXh0OyBjb250ZXh0OyBjb250ZXh0ID0gY29udGV4dC0+bmV4dCkKKwkgIGlmIChwcmVmaXggPD0gY29udGV4dC0+cHJlZml4ICYmCisJICAgICAgaXNfc2FtZV9uZXQ2KGxvY2FsLCAmY29udGV4dC0+c3RhcnQ2LCBjb250ZXh0LT5wcmVmaXgpICYmCisJICAgICAgaXNfc2FtZV9uZXQ2KGxvY2FsLCAmY29udGV4dC0+ZW5kNiwgY29udGV4dC0+cHJlZml4KSkKKwkgICAgY29udGV4dC0+cmFfdGltZSA9IDA7CisJCisJcmV0dXJuIDA7IC8qIGZvdW5kLCBhYm9ydCAqLworICAgICAgfQorICAKKyAgcmV0dXJuIDE7IC8qIGtlZXAgc2VhcmNoaW5nICovCit9CisgCitzdGF0aWMgdm9pZCBuZXdfdGltZW91dChzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0LCBjaGFyICppZmFjZV9uYW1lLCB0aW1lX3Qgbm93KQoreworICBpZiAoZGlmZnRpbWUobm93LCBjb250ZXh0LT5yYV9zaG9ydF9wZXJpb2Rfc3RhcnQpIDwgNjAuMCkKKyAgICAvKiByYW5nZSA1IC0gMjAgKi8KKyAgICBjb250ZXh0LT5yYV90aW1lID0gbm93ICsgNSArIChyYW5kMTYoKS80NDAwKTsKKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIHJhbmdlIDMvNCAtIDEgdGltZXMgTWF4UnRyQWR2SW50ZXJ2YWwgKi8KKyAgICAgIHVuc2lnbmVkIGludCBhZHZfaW50ZXJ2YWwgPSBjYWxjX2ludGVydmFsKGZpbmRfaWZhY2VfcGFyYW0oaWZhY2VfbmFtZSkpOworICAgICAgY29udGV4dC0+cmFfdGltZSA9IG5vdyArICgzICogYWR2X2ludGVydmFsKS80ICsgKChhZHZfaW50ZXJ2YWwgKiAodW5zaWduZWQgaW50KXJhbmQxNigpKSA+PiAxOCk7CisgICAgfQorfQorCitzdGF0aWMgc3RydWN0IHJhX2ludGVyZmFjZSAqZmluZF9pZmFjZV9wYXJhbShjaGFyICppZmFjZSkKK3sKKyAgc3RydWN0IHJhX2ludGVyZmFjZSAqcmE7CisgIAorICBmb3IgKHJhID0gZGFlbW9uLT5yYV9pbnRlcmZhY2VzOyByYTsgcmEgPSByYS0+bmV4dCkKKyAgICBpZiAod2lsZGNhcmRfbWF0Y2gocmEtPm5hbWUsIGlmYWNlKSkKKyAgICAgIHJldHVybiByYTsKKworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBjYWxjX2ludGVydmFsKHN0cnVjdCByYV9pbnRlcmZhY2UgKnJhKQoreworICBpbnQgaW50ZXJ2YWwgPSA2MDA7CisgIAorICBpZiAocmEgJiYgcmEtPmludGVydmFsICE9IDApCisgICAgeworICAgICAgaW50ZXJ2YWwgPSByYS0+aW50ZXJ2YWw7CisgICAgICBpZiAoaW50ZXJ2YWwgPiAxODAwKQorCWludGVydmFsID0gMTgwMDsKKyAgICAgIGVsc2UgaWYgKGludGVydmFsIDwgNCkKKwlpbnRlcnZhbCA9IDQ7CisgICAgfQorICAKKyAgcmV0dXJuICh1bnNpZ25lZCBpbnQpaW50ZXJ2YWw7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2FsY19saWZldGltZShzdHJ1Y3QgcmFfaW50ZXJmYWNlICpyYSkKK3sKKyAgaW50IGxpZmV0aW1lLCBpbnRlcnZhbCA9IChpbnQpY2FsY19pbnRlcnZhbChyYSk7CisgIAorICBpZiAoIXJhIHx8IHJhLT5saWZldGltZSA9PSAtMSkgLyogbm90IHNwZWNpZmllZCAqLworICAgIGxpZmV0aW1lID0gMyAqIGludGVydmFsOworICBlbHNlCisgICAgeworICAgICAgbGlmZXRpbWUgPSByYS0+bGlmZXRpbWU7CisgICAgICBpZiAobGlmZXRpbWUgPCBpbnRlcnZhbCAmJiBsaWZldGltZSAhPSAwKQorCWxpZmV0aW1lID0gaW50ZXJ2YWw7CisgICAgICBlbHNlIGlmIChsaWZldGltZSA+IDkwMDApCisJbGlmZXRpbWUgPSA5MDAwOworICAgIH0KKyAgCisgIHJldHVybiAodW5zaWduZWQgaW50KWxpZmV0aW1lOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGNhbGNfcHJpbyhzdHJ1Y3QgcmFfaW50ZXJmYWNlICpyYSkKK3sKKyAgaWYgKHJhKQorICAgIHJldHVybiByYS0+cHJpbzsKKyAgCisgIHJldHVybiAwOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9yZmMxMDM1LmMgYi9zcmMvcmZjMTAzNS5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU2YWI4OGIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcmZjMTAzNS5jCkBAIC0wLDAgKzEsMTk1NiBAQAorLyogZG5zbWFzcSBpcyBDb3B5cmlnaHQgKGMpIDIwMDAtMjAxNyBTaW1vbiBLZWxsZXkKKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgZGF0ZWQgSnVuZSwgMTk5MSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgdmVyc2lvbiAzIGRhdGVkIDI5IEp1bmUsIDIwMDcuCisgCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisKKyNpbmNsdWRlICJkbnNtYXNxLmgiCisKK2ludCBleHRyYWN0X25hbWUoc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90IHBsZW4sIHVuc2lnbmVkIGNoYXIgKipwcCwgCisJCSBjaGFyICpuYW1lLCBpbnQgaXNFeHRyYWN0LCBpbnQgZXh0cmFieXRlcykKK3sKKyAgdW5zaWduZWQgY2hhciAqY3AgPSAodW5zaWduZWQgY2hhciAqKW5hbWUsICpwID0gKnBwLCAqcDEgPSBOVUxMOworICB1bnNpZ25lZCBpbnQgaiwgbCwgbmFtZWxlbiA9IDAsIGhvcHMgPSAwOworICBpbnQgcmV0dmFsdWUgPSAxOworICAKKyAgaWYgKGlzRXh0cmFjdCkKKyAgICAqY3AgPSAwOworCisgIHdoaWxlICgxKQorICAgIHsgCisgICAgICB1bnNpZ25lZCBpbnQgbGFiZWxfdHlwZTsKKworICAgICAgaWYgKCFDSEVDS19MRU4oaGVhZGVyLCBwLCBwbGVuLCAxKSkKKwlyZXR1cm4gMDsKKyAgICAgIAorICAgICAgaWYgKChsID0gKnArKykgPT0gMCkgCisJLyogZW5kIG1hcmtlciAqLworCXsKKwkgIC8qIGNoZWNrIHRoYXQgdGhlcmUgYXJlIHRoZSBjb3JyZWN0IG5vIG9mIGJ5dGVzIGFmdGVyIHRoZSBuYW1lICovCisJICBpZiAoIUNIRUNLX0xFTihoZWFkZXIsIHAxID8gcDEgOiBwLCBwbGVuLCBleHRyYWJ5dGVzKSkKKwkgICAgcmV0dXJuIDA7CisJICAKKwkgIGlmIChpc0V4dHJhY3QpCisJICAgIHsKKwkgICAgICBpZiAoY3AgIT0gKHVuc2lnbmVkIGNoYXIgKiluYW1lKQorCQljcC0tOworCSAgICAgICpjcCA9IDA7IC8qIHRlcm1pbmF0ZTogbG9zZSBmaW5hbCBwZXJpb2QgKi8KKwkgICAgfQorCSAgZWxzZSBpZiAoKmNwICE9IDApCisJICAgIHJldHZhbHVlID0gMjsKKwkgIAorCSAgaWYgKHAxKSAvKiB3ZSBqdW1wZWQgdmlhIGNvbXByZXNzaW9uICovCisJICAgICpwcCA9IHAxOworCSAgZWxzZQorCSAgICAqcHAgPSBwOworCSAgCisJICByZXR1cm4gcmV0dmFsdWU7CisJfQorCisgICAgICBsYWJlbF90eXBlID0gbCAmIDB4YzA7CisgICAgICAKKyAgICAgIGlmIChsYWJlbF90eXBlID09IDB4YzApIC8qIHBvaW50ZXIgKi8KKwl7IAorCSAgaWYgKCFDSEVDS19MRU4oaGVhZGVyLCBwLCBwbGVuLCAxKSkKKwkgICAgcmV0dXJuIDA7CisJICAgICAgCisJICAvKiBnZXQgb2Zmc2V0ICovCisJICBsID0gKGwmMHgzZikgPDwgODsKKwkgIGwgfD0gKnArKzsKKwkgIAorCSAgaWYgKCFwMSkgLyogZmlyc3QganVtcCwgc2F2ZSBsb2NhdGlvbiB0byBnbyBiYWNrIHRvICovCisJICAgIHAxID0gcDsKKwkgICAgICAKKwkgIGhvcHMrKzsgLyogYnJlYWsgbWFsaWNpb3VzIGluZmluaXRlIGxvb3BzICovCisJICBpZiAoaG9wcyA+IDI1NSkKKwkgICAgcmV0dXJuIDA7CisJICAKKwkgIHAgPSBsICsgKHVuc2lnbmVkIGNoYXIgKiloZWFkZXI7CisJfQorICAgICAgZWxzZSBpZiAobGFiZWxfdHlwZSA9PSAweDAwKQorCXsgLyogbGFiZWxfdHlwZSA9IDAgLT4gbGFiZWwuICovCisJICBuYW1lbGVuICs9IGwgKyAxOyAvKiBpbmNsdWRlIHBlcmlvZCAqLworCSAgaWYgKG5hbWVsZW4gPj0gTUFYRE5BTUUpCisJICAgIHJldHVybiAwOworCSAgaWYgKCFDSEVDS19MRU4oaGVhZGVyLCBwLCBwbGVuLCBsKSkKKwkgICAgcmV0dXJuIDA7CisJICAKKwkgIGZvcihqPTA7IGo8bDsgaisrLCBwKyspCisJICAgIGlmIChpc0V4dHJhY3QpCisJICAgICAgeworCQl1bnNpZ25lZCBjaGFyIGMgPSAqcDsKKyNpZmRlZiBIQVZFX0ROU1NFQworCQlpZiAob3B0aW9uX2Jvb2woT1BUX0ROU1NFQ19WQUxJRCkpCisJCSAgeworCQkgICAgaWYgKGMgPT0gMCB8fCBjID09ICcuJyB8fCBjID09IE5BTUVfRVNDQVBFKQorCQkgICAgICB7CisJCQkqY3ArKyA9IE5BTUVfRVNDQVBFOworCQkJKmNwKysgPSBjKzE7CisJCSAgICAgIH0KKwkJICAgIGVsc2UKKwkJICAgICAgKmNwKysgPSBjOyAKKwkJICB9CisJCWVsc2UKKyNlbmRpZgorCQlpZiAoYyAhPSAwICYmIGMgIT0gJy4nKQorCQkgICpjcCsrID0gYzsKKwkJZWxzZQorCQkgIHJldHVybiAwOworCSAgICAgIH0KKwkgICAgZWxzZSAKKwkgICAgICB7CisJCXVuc2lnbmVkIGNoYXIgYzEgPSAqY3AsIGMyID0gKnA7CisJCQorCQlpZiAoYzEgPT0gMCkKKwkJICByZXR2YWx1ZSA9IDI7CisJCWVsc2UgCisJCSAgeworCQkgICAgY3ArKzsKKwkJICAgIGlmIChjMSA+PSAnQScgJiYgYzEgPD0gJ1onKQorCQkgICAgICBjMSArPSAnYScgLSAnQSc7CisjaWZkZWYgSEFWRV9ETlNTRUMKKwkJICAgIGlmIChvcHRpb25fYm9vbChPUFRfRE5TU0VDX1ZBTElEKSAmJiBjMSA9PSBOQU1FX0VTQ0FQRSkKKwkJICAgICAgYzEgPSAoKmNwKyspLTE7CisjZW5kaWYKKwkJICAgIAorCQkgICAgaWYgKGMyID49ICdBJyAmJiBjMiA8PSAnWicpCisJCSAgICAgIGMyICs9ICdhJyAtICdBJzsKKwkJICAgICAKKwkJICAgIGlmIChjMSAhPSBjMikKKwkJICAgICAgcmV0dmFsdWUgPSAgMjsKKwkJICB9CisJICAgICAgfQorCSAgICAKKwkgIGlmIChpc0V4dHJhY3QpCisJICAgICpjcCsrID0gJy4nOworCSAgZWxzZSBpZiAoKmNwICE9IDAgJiYgKmNwKysgIT0gJy4nKQorCSAgICByZXR2YWx1ZSA9IDI7CisJfQorICAgICAgZWxzZQorCXJldHVybiAwOyAvKiBsYWJlbCB0eXBlcyAweDQwIGFuZCAweDgwIG5vdCBzdXBwb3J0ZWQgKi8KKyAgICB9Cit9CisgCisvKiBNYXggc2l6ZSBvZiBpbnB1dCBzdHJpbmcgKGZvciBJUHY2KSBpcyA3NSBjaGFycy4pICovCisjZGVmaW5lIE1BWEFSUEFOQU1FIDc1CitpbnQgaW5fYXJwYV9uYW1lXzJfYWRkcihjaGFyICpuYW1laW4sIHN0cnVjdCBhbGxfYWRkciAqYWRkcnApCit7CisgIGludCBqOworICBjaGFyIG5hbWVbTUFYQVJQQU5BTUUrMV0sICpjcDE7CisgIHVuc2lnbmVkIGNoYXIgKmFkZHIgPSAodW5zaWduZWQgY2hhciAqKWFkZHJwOworICBjaGFyICpsYXN0Y2h1bmsgPSBOVUxMLCAqcGVuY2h1bmsgPSBOVUxMOworICAKKyAgaWYgKHN0cmxlbihuYW1laW4pID4gTUFYQVJQQU5BTUUpCisgICAgcmV0dXJuIDA7CisKKyAgbWVtc2V0KGFkZHJwLCAwLCBzaXplb2Yoc3RydWN0IGFsbF9hZGRyKSk7CisKKyAgLyogdHVybiBuYW1lIGludG8gYSBzZXJpZXMgb2YgYXNjaWl6IHN0cmluZ3MgKi8KKyAgLyogaiBjb3VudHMgbm8gb2YgbGFiZWxzICovCisgIGZvcihqID0gMSxjcDEgPSBuYW1lOyAqbmFtZWluOyBjcDErKywgbmFtZWluKyspCisgICAgaWYgKCpuYW1laW4gPT0gJy4nKQorICAgICAgeworCXBlbmNodW5rID0gbGFzdGNodW5rOworICAgICAgICBsYXN0Y2h1bmsgPSBjcDEgKyAxOworCSpjcDEgPSAwOworCWorKzsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICAqY3AxID0gKm5hbWVpbjsKKyAgCisgICpjcDEgPSAwOworCisgIGlmIChqPDMpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKGhvc3RuYW1lX2lzZXF1YWwobGFzdGNodW5rLCAiYXJwYSIpICYmIGhvc3RuYW1lX2lzZXF1YWwocGVuY2h1bmssICJpbi1hZGRyIikpCisgICAgeworICAgICAgLyogSVAgdjQgKi8KKyAgICAgIC8qIGFkZHJlc3MgYXJyaXZlcyBhcyBhIG5hbWUgb2YgdGhlIGZvcm0KKwkgd3d3Lnh4eC55eXkuenp6LmluLWFkZHIuYXJwYQorCSBzb21lIG9mIHRoZSBsb3cgb3JkZXIgYWRkcmVzcyBvY3RldHMgbWlnaHQgYmUgbWlzc2luZworCSBhbmQgc2hvdWxkIGJlIHNldCB0byB6ZXJvLiAqLworICAgICAgZm9yIChjcDEgPSBuYW1lOyBjcDEgIT0gcGVuY2h1bms7IGNwMSArPSBzdHJsZW4oY3AxKSsxKQorCXsKKwkgIC8qIGNoZWNrIGZvciBkaWdpdHMgb25seSAod2VlZHMgb3V0IHRoaW5ncyBsaWtlCisJICAgICA1MC4wLzI0LjY3LjI4LjY0LmluLWFkZHIuYXJwYSB3aGljaCBhcmUgdXNlZCAKKwkgICAgIGFzIENOQU1FIHRhcmdldHMgYWNjb3JkaW5nIHRvIFJGQyAyMzE3ICovCisJICBjaGFyICpjcDsKKwkgIGZvciAoY3AgPSBjcDE7ICpjcDsgY3ArKykKKwkgICAgaWYgKCFpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSpjcCkpCisJICAgICAgcmV0dXJuIDA7CisJICAKKwkgIGFkZHJbM10gPSBhZGRyWzJdOworCSAgYWRkclsyXSA9IGFkZHJbMV07CisJICBhZGRyWzFdID0gYWRkclswXTsKKwkgIGFkZHJbMF0gPSBhdG9pKGNwMSk7CisJfQorCisgICAgICByZXR1cm4gRl9JUFY0OworICAgIH0KKyNpZmRlZiBIQVZFX0lQVjYKKyAgZWxzZSBpZiAoaG9zdG5hbWVfaXNlcXVhbChwZW5jaHVuaywgImlwNiIpICYmIAorCSAgIChob3N0bmFtZV9pc2VxdWFsKGxhc3RjaHVuaywgImludCIpIHx8IGhvc3RuYW1lX2lzZXF1YWwobGFzdGNodW5rLCAiYXJwYSIpKSkKKyAgICB7CisgICAgICAvKiBJUCB2NjoKKyAgICAgICAgIEFkZHJlc3MgYXJyaXZlcyBhcyAwLjEuMi4zLjQuNS42LjcuOC45LmEuYi5jLmQuZS5mLmlwNi5baW50fGFycGFdCisgICAgCSBvciBcW3hmZWRjYmE5ODc2NTQzMjEwZmVkY2JhOTg3NjU0MzIxMC8xMjhdLmlwNi5baW50fGFycGFdCisgICAgICAKKwkgTm90ZSB0aGF0IG1vc3Qgb2YgdGhlc2UgdGhlIHZhcmlvdXMgcmVwcmVzZW50YXRpb25zIGFyZSBvYnNvbGV0ZSBhbmQgCisJIGxlZnQtb3ZlciBmcm9tIHRoZSBtYW55IEROUy1mb3ItSVB2NiB3YXJzLiBXZSBzdXBwb3J0IGFsbCB0aGUgZm9ybWF0cworCSB0aGF0IHdlIGNhbiBzaW5jZSB0aGVyZSBpcyBubyByZWFzb24gbm90IHRvLgorICAgICAgKi8KKworICAgICAgaWYgKCpuYW1lID09ICdcXCcgJiYgKihuYW1lKzEpID09ICdbJyAmJiAKKwkgICgqKG5hbWUrMikgPT0gJ3gnIHx8ICoobmFtZSsyKSA9PSAnWCcpKQorCXsJICAKKwkgIGZvciAoaiA9IDAsIGNwMSA9IG5hbWUrMzsgKmNwMSAmJiBpc3hkaWdpdCgodW5zaWduZWQgY2hhcikgKmNwMSkgJiYgaiA8IDMyOyBjcDErKywgaisrKQorCSAgICB7CisJICAgICAgY2hhciB4ZGlnWzJdOworCSAgICAgIHhkaWdbMF0gPSAqY3AxOworCSAgICAgIHhkaWdbMV0gPSAwOworCSAgICAgIGlmIChqJTIpCisJCWFkZHJbai8yXSB8PSBzdHJ0b2woeGRpZywgTlVMTCwgMTYpOworCSAgICAgIGVsc2UKKwkJYWRkcltqLzJdID0gc3RydG9sKHhkaWcsIE5VTEwsIDE2KSA8PCA0OworCSAgICB9CisJICAKKwkgIGlmICgqY3AxID09ICcvJyAmJiBqID09IDMyKQorCSAgICByZXR1cm4gRl9JUFY2OworCX0KKyAgICAgIGVsc2UKKwl7CisJICBmb3IgKGNwMSA9IG5hbWU7IGNwMSAhPSBwZW5jaHVuazsgY3AxICs9IHN0cmxlbihjcDEpKzEpCisJICAgIHsKKwkgICAgICBpZiAoKihjcDErMSkgfHwgIWlzeGRpZ2l0KCh1bnNpZ25lZCBjaGFyKSpjcDEpKQorCQlyZXR1cm4gMDsKKwkgICAgICAKKwkgICAgICBmb3IgKGogPSBzaXplb2Yoc3RydWN0IGFsbF9hZGRyKS0xOyBqPjA7IGotLSkKKwkJYWRkcltqXSA9IChhZGRyW2pdID4+IDQpIHwgKGFkZHJbai0xXSA8PCA0KTsKKwkgICAgICBhZGRyWzBdID0gKGFkZHJbMF0gPj4gNCkgfCAoc3RydG9sKGNwMSwgTlVMTCwgMTYpIDw8IDQpOworCSAgICB9CisJICAKKwkgIHJldHVybiBGX0lQVjY7CisJfQorICAgIH0KKyNlbmRpZgorICAKKyAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGNoYXIgKnNraXBfbmFtZSh1bnNpZ25lZCBjaGFyICphbnNwLCBzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBzaXplX3QgcGxlbiwgaW50IGV4dHJhYnl0ZXMpCit7CisgIHdoaWxlKDEpCisgICAgeworICAgICAgdW5zaWduZWQgaW50IGxhYmVsX3R5cGU7CisgICAgICAKKyAgICAgIGlmICghQ0hFQ0tfTEVOKGhlYWRlciwgYW5zcCwgcGxlbiwgMSkpCisJcmV0dXJuIE5VTEw7CisgICAgICAKKyAgICAgIGxhYmVsX3R5cGUgPSAoKmFuc3ApICYgMHhjMDsKKworICAgICAgaWYgKGxhYmVsX3R5cGUgPT0gMHhjMCkKKwl7CisJICAvKiBwb2ludGVyIGZvciBjb21wcmVzc2lvbi4gKi8KKwkgIGFuc3AgKz0gMjsJCisJICBicmVhazsKKwl9CisgICAgICBlbHNlIGlmIChsYWJlbF90eXBlID09IDB4ODApCisJcmV0dXJuIE5VTEw7IC8qIHJlc2VydmVkICovCisgICAgICBlbHNlIGlmIChsYWJlbF90eXBlID09IDB4NDApCisJeworCSAgLyogRXh0ZW5kZWQgbGFiZWwgdHlwZSAqLworCSAgdW5zaWduZWQgaW50IGNvdW50OworCSAgCisJICBpZiAoIUNIRUNLX0xFTihoZWFkZXIsIGFuc3AsIHBsZW4sIDIpKQorCSAgICByZXR1cm4gTlVMTDsKKwkgIAorCSAgaWYgKCgoKmFuc3ArKykgJiAweDNmKSAhPSAxKQorCSAgICByZXR1cm4gTlVMTDsgLyogd2Ugb25seSB1bmRlcnN0YW5kIGJpdHN0cmluZ3MgKi8KKwkgIAorCSAgY291bnQgPSAqKGFuc3ArKyk7IC8qIEJpdHMgaW4gYml0c3RyaW5nICovCisJICAKKwkgIGlmIChjb3VudCA9PSAwKSAvKiBjb3VudCA9PSAwIG1lYW5zIDI1NiBiaXRzICovCisJICAgIGFuc3AgKz0gMzI7CisJICBlbHNlCisJICAgIGFuc3AgKz0gKChjb3VudC0xKT4+MykrMTsKKwl9CisgICAgICBlbHNlCisJeyAvKiBsYWJlbCB0eXBlID09IDAgQm90dG9tIHNpeCBiaXRzIGlzIGxlbmd0aCAqLworCSAgdW5zaWduZWQgaW50IGxlbiA9ICgqYW5zcCsrKSAmIDB4M2Y7CisJICAKKwkgIGlmICghQUREX1JETEVOKGhlYWRlciwgYW5zcCwgcGxlbiwgbGVuKSkKKwkgICAgcmV0dXJuIE5VTEw7CisKKwkgIGlmIChsZW4gPT0gMCkKKwkgICAgYnJlYWs7IC8qIHplcm8gbGVuZ3RoIGxhYmVsIG1hcmtzIHRoZSBlbmQuICovCisJfQorICAgIH0KKworICBpZiAoIUNIRUNLX0xFTihoZWFkZXIsIGFuc3AsIHBsZW4sIGV4dHJhYnl0ZXMpKQorICAgIHJldHVybiBOVUxMOworICAKKyAgcmV0dXJuIGFuc3A7Cit9CisKK3Vuc2lnbmVkIGNoYXIgKnNraXBfcXVlc3Rpb25zKHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIsIHNpemVfdCBwbGVuKQoreworICBpbnQgcTsKKyAgdW5zaWduZWQgY2hhciAqYW5zcCA9ICh1bnNpZ25lZCBjaGFyICopKGhlYWRlcisxKTsKKworICBmb3IgKHEgPSBudG9ocyhoZWFkZXItPnFkY291bnQpOyBxICE9IDA7IHEtLSkKKyAgICB7CisgICAgICBpZiAoIShhbnNwID0gc2tpcF9uYW1lKGFuc3AsIGhlYWRlciwgcGxlbiwgNCkpKQorCXJldHVybiBOVUxMOworICAgICAgYW5zcCArPSA0OyAvKiBjbGFzcyBhbmQgdHlwZSAqLworICAgIH0KKyAgCisgIHJldHVybiBhbnNwOworfQorCit1bnNpZ25lZCBjaGFyICpza2lwX3NlY3Rpb24odW5zaWduZWQgY2hhciAqYW5zcCwgaW50IGNvdW50LCBzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBzaXplX3QgcGxlbikKK3sKKyAgaW50IGksIHJkbGVuOworICAKKyAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgaWYgKCEoYW5zcCA9IHNraXBfbmFtZShhbnNwLCBoZWFkZXIsIHBsZW4sIDEwKSkpCisJcmV0dXJuIE5VTEw7IAorICAgICAgYW5zcCArPSA4OyAvKiB0eXBlLCBjbGFzcywgVFRMICovCisgICAgICBHRVRTSE9SVChyZGxlbiwgYW5zcCk7CisgICAgICBpZiAoIUFERF9SRExFTihoZWFkZXIsIGFuc3AsIHBsZW4sIHJkbGVuKSkKKwlyZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgcmV0dXJuIGFuc3A7Cit9CisKKy8qIENSQyB0aGUgcXVlc3Rpb24gc2VjdGlvbi4gVGhpcyBpcyB1c2VkIHRvIHNhZmVseSBkZXRlY3QgcXVlcnkgCisgICByZXRyYW5zbWlzc2lvbiBhbmQgdG8gZGV0ZWN0IGFuc3dlcnMgdG8gcXVlc3Rpb25zIHdlIGRpZG4ndCBhc2ssIHdoaWNoIAorICAgbWlnaHQgYmUgcG9pc29uaW5nIGF0dGFja3MuIE5vdGUgdGhhdCB3ZSBkZWNvZGUgdGhlIG5hbWUgcmF0aGVyIAorICAgdGhhbiBDUkMgdGhlIHJhdyBieXRlcywgc2luY2UgcmVwbGllcyBtaWdodCBiZSBjb21wcmVzc2VkIGRpZmZlcmVudGx5LiAKKyAgIFdlIGlnbm9yZSBjYXNlIGluIHRoZSBuYW1lcyBmb3IgdGhlIHNhbWUgcmVhc29uLiBSZXR1cm4gYWxsLW9uZXMKKyAgIGlmIHRoZXJlIGlzIG5vdCBxdWVzdGlvbiBzZWN0aW9uLiAqLworI2lmbmRlZiBIQVZFX0ROU1NFQwordW5zaWduZWQgaW50IHF1ZXN0aW9uc19jcmMoc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90IHBsZW4sIGNoYXIgKm5hbWUpCit7CisgIGludCBxOworICB1bnNpZ25lZCBpbnQgY3JjID0gMHhmZmZmZmZmZjsKKyAgdW5zaWduZWQgY2hhciAqcDEsICpwID0gKHVuc2lnbmVkIGNoYXIgKikoaGVhZGVyKzEpOworCisgIGZvciAocSA9IG50b2hzKGhlYWRlci0+cWRjb3VudCk7IHEgIT0gMDsgcS0tKSAKKyAgICB7CisgICAgICBpZiAoIWV4dHJhY3RfbmFtZShoZWFkZXIsIHBsZW4sICZwLCBuYW1lLCAxLCA0KSkKKwlyZXR1cm4gY3JjOyAvKiBiYWQgcGFja2V0ICovCisgICAgICAKKyAgICAgIGZvciAocDEgPSAodW5zaWduZWQgY2hhciAqKW5hbWU7ICpwMTsgcDErKykKKwl7CisJICBpbnQgaSA9IDg7CisJICBjaGFyIGMgPSAqcDE7CisKKwkgIGlmIChjID49ICdBJyAmJiBjIDw9ICdaJykKKwkgICAgYyArPSAnYScgLSAnQSc7CisKKwkgIGNyYyBePSBjIDw8IDI0OworCSAgd2hpbGUgKGktLSkKKwkgICAgY3JjID0gY3JjICYgMHg4MDAwMDAwMCA/IChjcmMgPDwgMSkgXiAweDA0YzExZGI3IDogY3JjIDw8IDE7CisJfQorICAgICAgCisgICAgICAvKiBDUkMgdGhlIGNsYXNzIGFuZCB0eXBlIGFzIHdlbGwgKi8KKyAgICAgIGZvciAocDEgPSBwOyBwMSA8IHArNDsgcDErKykKKwl7CisJICBpbnQgaSA9IDg7CisJICBjcmMgXj0gKnAxIDw8IDI0OworCSAgd2hpbGUgKGktLSkKKwkgICAgY3JjID0gY3JjICYgMHg4MDAwMDAwMCA/IChjcmMgPDwgMSkgXiAweDA0YzExZGI3IDogY3JjIDw8IDE7CisJfQorCisgICAgICBwICs9IDQ7CisgICAgICBpZiAoIUNIRUNLX0xFTihoZWFkZXIsIHAsIHBsZW4sIDApKQorCXJldHVybiBjcmM7IC8qIGJhZCBwYWNrZXQgKi8KKyAgICB9CisKKyAgcmV0dXJuIGNyYzsKK30KKyNlbmRpZgorCitzaXplX3QgcmVzaXplX3BhY2tldChzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBzaXplX3QgcGxlbiwgdW5zaWduZWQgY2hhciAqcGhlYWRlciwgc2l6ZV90IGhsZW4pCit7CisgIHVuc2lnbmVkIGNoYXIgKmFuc3AgPSBza2lwX3F1ZXN0aW9ucyhoZWFkZXIsIHBsZW4pOworICAgIAorICAvKiBpZiBwYWNrZXQgaXMgbWFsZm9ybWVkLCBqdXN0IHJldHVybiBhcy1pcy4gKi8KKyAgaWYgKCFhbnNwKQorICAgIHJldHVybiBwbGVuOworICAKKyAgaWYgKCEoYW5zcCA9IHNraXBfc2VjdGlvbihhbnNwLCBudG9ocyhoZWFkZXItPmFuY291bnQpICsgbnRvaHMoaGVhZGVyLT5uc2NvdW50KSArIG50b2hzKGhlYWRlci0+YXJjb3VudCksCisJCQkgICAgaGVhZGVyLCBwbGVuKSkpCisgICAgcmV0dXJuIHBsZW47CisgICAgCisgIC8qIHJlc3RvcmUgcHNldWRvaGVhZGVyICovCisgIGlmIChwaGVhZGVyICYmIG50b2hzKGhlYWRlci0+YXJjb3VudCkgPT0gMCkKKyAgICB7CisgICAgICAvKiBtdXN0IHVzZSBtZW1tb3ZlLCBtYXkgb3ZlcmxhcCAqLworICAgICAgbWVtbW92ZShhbnNwLCBwaGVhZGVyLCBobGVuKTsKKyAgICAgIGhlYWRlci0+YXJjb3VudCA9IGh0b25zKDEpOworICAgICAgYW5zcCArPSBobGVuOworICAgIH0KKworICByZXR1cm4gYW5zcCAtICh1bnNpZ25lZCBjaGFyICopaGVhZGVyOworfQorCisvKiBpcyBhZGRyIGluIHRoZSBub24tZ2xvYmFsbHktcm91dGVkIElQIHNwYWNlPyAqLyAKK2ludCBwcml2YXRlX25ldChzdHJ1Y3QgaW5fYWRkciBhZGRyLCBpbnQgYmFuX2xvY2FsaG9zdCkgCit7CisgIGluX2FkZHJfdCBpcF9hZGRyID0gbnRvaGwoYWRkci5zX2FkZHIpOworCisgIHJldHVybgorICAgICgoKGlwX2FkZHIgJiAweEZGMDAwMDAwKSA9PSAweDdGMDAwMDAwKSAmJiBiYW5fbG9jYWxob3N0KSAgLyogMTI3LjAuMC4wLzggICAgKGxvb3BiYWNrKSAqLyB8fAorICAgICgoaXBfYWRkciAmIDB4RkYwMDAwMDApID09IDB4MDAwMDAwMDApICAvKiBSRkMgNTczNSBzZWN0aW9uIDMuICJoZXJlIiBuZXR3b3JrICovIHx8CisgICAgKChpcF9hZGRyICYgMHhGRjAwMDAwMCkgPT0gMHgwQTAwMDAwMCkgIC8qIDEwLjAuMC4wLzggICAgIChwcml2YXRlKSAgKi8gfHwKKyAgICAoKGlwX2FkZHIgJiAweEZGRjAwMDAwKSA9PSAweEFDMTAwMDAwKSAgLyogMTcyLjE2LjAuMC8xMiAgKHByaXZhdGUpICAqLyB8fAorICAgICgoaXBfYWRkciAmIDB4RkZGRjAwMDApID09IDB4QzBBODAwMDApICAvKiAxOTIuMTY4LjAuMC8xNiAocHJpdmF0ZSkgICovIHx8CisgICAgKChpcF9hZGRyICYgMHhGRkZGMDAwMCkgPT0gMHhBOUZFMDAwMCkgIC8qIDE2OS4yNTQuMC4wLzE2ICh6ZXJvY29uZikgKi8gfHwKKyAgICAoKGlwX2FkZHIgJiAweEZGRkZGRjAwKSA9PSAweEMwMDAwMjAwKSAgLyogMTkyLjAuMi4wLzI0ICAgKHRlc3QtbmV0KSAqLyB8fAorICAgICgoaXBfYWRkciAmIDB4RkZGRkZGMDApID09IDB4QzYzMzY0MDApICAvKiAxOTguNTEuMTAwLjAvMjQodGVzdC1uZXQpICovIHx8CisgICAgKChpcF9hZGRyICYgMHhGRkZGRkYwMCkgPT0gMHhDQjAwNzEwMCkgIC8qIDIwMy4wLjExMy4wLzI0ICh0ZXN0LW5ldCkgKi8gfHwKKyAgICAoKGlwX2FkZHIgJiAweEZGRkZGRkZGKSA9PSAweEZGRkZGRkZGKSAgLyogMjU1LjI1NS4yNTUuMjU1LzMyIChicm9hZGNhc3QpKi8gOworfQorCisjaWZkZWYgSEFWRV9JUFY2CitzdGF0aWMgaW50IHByaXZhdGVfbmV0NihzdHJ1Y3QgaW42X2FkZHIgKmEpCit7CisgIHJldHVybiAKKyAgICBJTjZfSVNfQUREUl9VTlNQRUNJRklFRChhKSB8fCAvKiBSRkMgNjMwMyA0LjMgKi8KKyAgICBJTjZfSVNfQUREUl9MT09QQkFDSyhhKSB8fCAgICAvKiBSRkMgNjMwMyA0LjMgKi8KKyAgICBJTjZfSVNfQUREUl9MSU5LTE9DQUwoYSkgfHwgICAvKiBSRkMgNjMwMyA0LjUgKi8KKyAgICAoKHVuc2lnbmVkIGNoYXIgKilhKVswXSA9PSAweGZkIHx8ICAgLyogUkZDIDYzMDMgNC40ICovCisgICAgKCh1MzIgKilhKVswXSA9PSBodG9ubCgweDIwMDEwZGI4KTsgLyogUkZDIDYzMDMgNC42ICovCit9CisjZW5kaWYKKworCitzdGF0aWMgdW5zaWduZWQgY2hhciAqZG9fZG9jdG9yKHVuc2lnbmVkIGNoYXIgKnAsIGludCBjb3VudCwgc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90IHFsZW4sIGNoYXIgKm5hbWUsIGludCAqZG9jdG9yZWQpCit7CisgIGludCBpLCBxdHlwZSwgcWNsYXNzLCByZGxlbjsKKworICBmb3IgKGkgPSBjb3VudDsgaSAhPSAwOyBpLS0pCisgICAgeworICAgICAgaWYgKG5hbWUgJiYgb3B0aW9uX2Jvb2woT1BUX0xPRykpCisJeworCSAgaWYgKCFleHRyYWN0X25hbWUoaGVhZGVyLCBxbGVuLCAmcCwgbmFtZSwgMSwgMTApKQorCSAgICByZXR1cm4gMDsKKwl9CisgICAgICBlbHNlIGlmICghKHAgPSBza2lwX25hbWUocCwgaGVhZGVyLCBxbGVuLCAxMCkpKQorCXJldHVybiAwOyAvKiBiYWQgcGFja2V0ICovCisgICAgICAKKyAgICAgIEdFVFNIT1JUKHF0eXBlLCBwKTsgCisgICAgICBHRVRTSE9SVChxY2xhc3MsIHApOworICAgICAgcCArPSA0OyAvKiB0dGwgKi8KKyAgICAgIEdFVFNIT1JUKHJkbGVuLCBwKTsKKyAgICAgIAorICAgICAgaWYgKHFjbGFzcyA9PSBDX0lOICYmIHF0eXBlID09IFRfQSkKKwl7CisJICBzdHJ1Y3QgZG9jdG9yICpkb2N0b3I7CisJICBzdHJ1Y3QgaW5fYWRkciBhZGRyOworCSAgCisJICBpZiAoIUNIRUNLX0xFTihoZWFkZXIsIHAsIHFsZW4sIElOQUREUlNaKSkKKwkgICAgcmV0dXJuIDA7CisJICAKKwkgIC8qIGFsaWdubWVudCAqLworCSAgbWVtY3B5KCZhZGRyLCBwLCBJTkFERFJTWik7CisJICAKKwkgIGZvciAoZG9jdG9yID0gZGFlbW9uLT5kb2N0b3JzOyBkb2N0b3I7IGRvY3RvciA9IGRvY3Rvci0+bmV4dCkKKwkgICAgeworCSAgICAgIGlmIChkb2N0b3ItPmVuZC5zX2FkZHIgPT0gMCkKKwkJeworCQkgIGlmICghaXNfc2FtZV9uZXQoZG9jdG9yLT5pbiwgYWRkciwgZG9jdG9yLT5tYXNrKSkKKwkJICAgIGNvbnRpbnVlOworCQl9CisJICAgICAgZWxzZSBpZiAobnRvaGwoZG9jdG9yLT5pbi5zX2FkZHIpID4gbnRvaGwoYWRkci5zX2FkZHIpIHx8IAorCQkgICAgICAgbnRvaGwoZG9jdG9yLT5lbmQuc19hZGRyKSA8IG50b2hsKGFkZHIuc19hZGRyKSkKKwkJY29udGludWU7CisJICAgICAgCisJICAgICAgYWRkci5zX2FkZHIgJj0gfmRvY3Rvci0+bWFzay5zX2FkZHI7CisJICAgICAgYWRkci5zX2FkZHIgfD0gKGRvY3Rvci0+b3V0LnNfYWRkciAmIGRvY3Rvci0+bWFzay5zX2FkZHIpOworCSAgICAgIC8qIFNpbmNlIHdlIG11bmdlZCB0aGUgZGF0YSwgdGhlIHNlcnZlciBpdCBjYW1lIGZyb20gaXMgbm8gbG9uZ2VyIGF1dGhvcml0YXRpdmUgKi8KKwkgICAgICBoZWFkZXItPmhiMyAmPSB+SEIzX0FBOworCSAgICAgICpkb2N0b3JlZCA9IDE7CisJICAgICAgbWVtY3B5KHAsICZhZGRyLCBJTkFERFJTWik7CisJICAgICAgYnJlYWs7CisJICAgIH0KKwl9CisgICAgICBlbHNlIGlmIChxdHlwZSA9PSBUX1RYVCAmJiBuYW1lICYmIG9wdGlvbl9ib29sKE9QVF9MT0cpKQorCXsKKwkgIHVuc2lnbmVkIGNoYXIgKnAxID0gcDsKKwkgIGlmICghQ0hFQ0tfTEVOKGhlYWRlciwgcDEsIHFsZW4sIHJkbGVuKSkKKwkgICAgcmV0dXJuIDA7CisJICB3aGlsZSAoKHAxIC0gcCkgPCByZGxlbikKKwkgICAgeworCSAgICAgIHVuc2lnbmVkIGludCBpLCBsZW4gPSAqcDE7CisJICAgICAgdW5zaWduZWQgY2hhciAqcDIgPSBwMTsKKwkgICAgICBpZiAoKHAxICsgbGVuIC0gcCkgPj0gcmRsZW4pCisJICAgICAgICByZXR1cm4gMDsgLyogYmFkIHBhY2tldCAqLworCSAgICAgIC8qIG1ha2UgY291bnRlZCBzdHJpbmcgemVyby10ZXJtICBhbmQgc2FuaXRpc2UgKi8KKwkgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCXsKKwkJICBpZiAoIWlzcHJpbnQoKGludCkqKHAyKzEpKSkKKwkJICAgIGJyZWFrOworCQkgIAorCQkgICpwMiA9ICoocDIrMSk7CisJCSAgcDIrKzsKKwkJfQorCSAgICAgICpwMiA9IDA7CisJICAgICAgbXlfc3lzbG9nKExPR19JTkZPLCAicmVwbHkgJXMgaXMgJXMiLCBuYW1lLCBwMSk7CisJICAgICAgLyogcmVzdG9yZSAqLworCSAgICAgIG1lbW1vdmUocDEgKyAxLCBwMSwgaSk7CisJICAgICAgKnAxID0gbGVuOworCSAgICAgIHAxICs9IGxlbisxOworCSAgICB9CisJfQkJICAKKyAgICAgIAorICAgICAgaWYgKCFBRERfUkRMRU4oaGVhZGVyLCBwLCBxbGVuLCByZGxlbikpCisJIHJldHVybiAwOyAvKiBiYWQgcGFja2V0ICovCisgICAgfQorICAKKyAgcmV0dXJuIHA7IAorfQorCitzdGF0aWMgaW50IGZpbmRfc29hKHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIsIHNpemVfdCBxbGVuLCBjaGFyICpuYW1lLCBpbnQgKmRvY3RvcmVkKQoreworICB1bnNpZ25lZCBjaGFyICpwOworICBpbnQgcXR5cGUsIHFjbGFzcywgcmRsZW47CisgIHVuc2lnbmVkIGxvbmcgdHRsLCBtaW50dGwgPSBVTE9OR19NQVg7CisgIGludCBpLCBmb3VuZF9zb2EgPSAwOworICAKKyAgLyogZmlyc3QgbW92ZSB0byBOUyBzZWN0aW9uIGFuZCBmaW5kIFRUTCBmcm9tIGFueSBTT0Egc2VjdGlvbiAqLworICBpZiAoIShwID0gc2tpcF9xdWVzdGlvbnMoaGVhZGVyLCBxbGVuKSkgfHwKKyAgICAgICEocCA9IGRvX2RvY3RvcihwLCBudG9ocyhoZWFkZXItPmFuY291bnQpLCBoZWFkZXIsIHFsZW4sIG5hbWUsIGRvY3RvcmVkKSkpCisgICAgcmV0dXJuIDA7ICAvKiBiYWQgcGFja2V0ICovCisgIAorICBmb3IgKGkgPSBudG9ocyhoZWFkZXItPm5zY291bnQpOyBpICE9IDA7IGktLSkKKyAgICB7CisgICAgICBpZiAoIShwID0gc2tpcF9uYW1lKHAsIGhlYWRlciwgcWxlbiwgMTApKSkKKwlyZXR1cm4gMDsgLyogYmFkIHBhY2tldCAqLworICAgICAgCisgICAgICBHRVRTSE9SVChxdHlwZSwgcCk7IAorICAgICAgR0VUU0hPUlQocWNsYXNzLCBwKTsKKyAgICAgIEdFVExPTkcodHRsLCBwKTsKKyAgICAgIEdFVFNIT1JUKHJkbGVuLCBwKTsKKyAgICAgIAorICAgICAgaWYgKChxY2xhc3MgPT0gQ19JTikgJiYgKHF0eXBlID09IFRfU09BKSkKKwl7CisJICBmb3VuZF9zb2EgPSAxOworCSAgaWYgKHR0bCA8IG1pbnR0bCkKKwkgICAgbWludHRsID0gdHRsOworCisJICAvKiBNTkFNRSAqLworCSAgaWYgKCEocCA9IHNraXBfbmFtZShwLCBoZWFkZXIsIHFsZW4sIDApKSkKKwkgICAgcmV0dXJuIDA7CisJICAvKiBSTkFNRSAqLworCSAgaWYgKCEocCA9IHNraXBfbmFtZShwLCBoZWFkZXIsIHFsZW4sIDIwKSkpCisJICAgIHJldHVybiAwOworCSAgcCArPSAxNjsgLyogU0VSSUFMIFJFRlJFU0ggUkVUUlkgRVhQSVJFICovCisJICAKKwkgIEdFVExPTkcodHRsLCBwKTsgLyogbWluVFRMICovCisJICBpZiAodHRsIDwgbWludHRsKQorCSAgICBtaW50dGwgPSB0dGw7CisJfQorICAgICAgZWxzZSBpZiAoIUFERF9SRExFTihoZWFkZXIsIHAsIHFsZW4sIHJkbGVuKSkKKwlyZXR1cm4gMDsgLyogYmFkIHBhY2tldCAqLworICAgIH0KKyAgCisgIC8qIHJld3JpdGUgYWRkcmVzc2VzIGluIGFkZGl0aW9uYWwgc2VjdGlvbiB0b28gKi8KKyAgaWYgKCFkb19kb2N0b3IocCwgbnRvaHMoaGVhZGVyLT5hcmNvdW50KSwgaGVhZGVyLCBxbGVuLCBOVUxMLCBkb2N0b3JlZCkpCisgICAgcmV0dXJuIDA7CisgIAorICBpZiAoIWZvdW5kX3NvYSkKKyAgICBtaW50dGwgPSBkYWVtb24tPm5lZ190dGw7CisKKyAgcmV0dXJuIG1pbnR0bDsKK30KKworLyogTm90ZSB0aGF0IHRoZSBmb2xsb3dpbmcgY29kZSBjYW4gY3JlYXRlIENOQU1FIGNoYWlucyB0aGF0IGRvbid0IHBvaW50IHRvIGEgcmVhbCByZWNvcmQsCisgICBlaXRoZXIgYmVjYXVzZSBvZiBsYWNrIG9mIG1lbW9yeSwgb3IgbGFjayBvZiBTT0EgcmVjb3Jkcy4gIFRoZXNlIGFyZSB0cmVhdGVkIGJ5IHRoZSBjYWNoZSBjb2RlIGFzIAorICAgZXhwaXJlZCBhbmQgY2xlYW5lZCBvdXQgdGhhdCB3YXkuIAorICAgUmV0dXJuIDEgaWYgd2UgcmVqZWN0IGFuIGFkZHJlc3MgYmVjYXVzZSBpdCBsb29rIGxpa2UgcGFydCBvZiBkbnMtcmViaW5kaW5nIGF0dGFjay4gKi8KK2ludCBleHRyYWN0X2FkZHJlc3NlcyhzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBzaXplX3QgcWxlbiwgY2hhciAqbmFtZSwgdGltZV90IG5vdywgCisJCSAgICAgIGNoYXIgKippcHNldHMsIGludCBpc19zaWduLCBpbnQgY2hlY2tfcmViaW5kLCBpbnQgbm9fY2FjaGVfZG5zc2VjLCBpbnQgc2VjdXJlLCBpbnQgKmRvY3RvcmVkKQoreworICB1bnNpZ25lZCBjaGFyICpwLCAqcDEsICplbmRyciwgKm5hbWVwOworICBpbnQgaSwgaiwgcXR5cGUsIHFjbGFzcywgYXF0eXBlLCBhcWNsYXNzLCBhcmRsZW4sIHJlcywgc2VhcmNoZWRfc29hID0gMDsKKyAgdW5zaWduZWQgbG9uZyB0dGwgPSAwOworICBzdHJ1Y3QgYWxsX2FkZHIgYWRkcjsKKyNpZmRlZiBIQVZFX0lQU0VUCisgIGNoYXIgKippcHNldHNfY3VyOworI2Vsc2UKKyAgKHZvaWQpaXBzZXRzOyAvKiB1bnVzZWQgKi8KKyNlbmRpZgorICAKKyAgY2FjaGVfc3RhcnRfaW5zZXJ0KCk7CisKKyAgLyogZmluZF9zb2EgaXMgbmVlZGVkIGZvciBkbnNfZG9jdG9yIGFuZCBsb2dnaW5nIHNpZGUtZWZmZWN0cywgc28gZG9uJ3QgY2FsbCBpdCBsYXppbHkgaWYgdGhlcmUgYXJlIGFueS4gKi8KKyAgaWYgKGRhZW1vbi0+ZG9jdG9ycyB8fCBvcHRpb25fYm9vbChPUFRfTE9HKSB8fCBvcHRpb25fYm9vbChPUFRfRE5TU0VDX1ZBTElEKSkKKyAgICB7CisgICAgICBzZWFyY2hlZF9zb2EgPSAxOworICAgICAgdHRsID0gZmluZF9zb2EoaGVhZGVyLCBxbGVuLCBuYW1lLCBkb2N0b3JlZCk7CisjaWZkZWYgSEFWRV9ETlNTRUMKKyAgICAgIGlmICgqZG9jdG9yZWQgJiYgc2VjdXJlKQorCXJldHVybiAwOworI2VuZGlmCisgICAgfQorICAKKyAgLyogZ28gdGhyb3VnaCB0aGUgcXVlc3Rpb25zLiAqLworICBwID0gKHVuc2lnbmVkIGNoYXIgKikoaGVhZGVyKzEpOworICAKKyAgZm9yIChpID0gbnRvaHMoaGVhZGVyLT5xZGNvdW50KTsgaSAhPSAwOyBpLS0pCisgICAgeworICAgICAgaW50IGZvdW5kID0gMCwgY25hbWVfY291bnQgPSBDTkFNRV9DSEFJTjsKKyAgICAgIHN0cnVjdCBjcmVjICpjcHAgPSBOVUxMOworICAgICAgaW50IGZsYWdzID0gUkNPREUoaGVhZGVyKSA9PSBOWERPTUFJTiA/IEZfTlhET01BSU4gOiAwOworICAgICAgaW50IHNlY2ZsYWcgPSBzZWN1cmUgPyAgRl9ETlNTRUNPSyA6IDA7CisgICAgICB1bnNpZ25lZCBsb25nIGN0dGwgPSBVTE9OR19NQVgsIGF0dGw7CisKKyAgICAgIG5hbWVwID0gcDsKKyAgICAgIGlmICghZXh0cmFjdF9uYW1lKGhlYWRlciwgcWxlbiwgJnAsIG5hbWUsIDEsIDQpKQorCXJldHVybiAwOyAvKiBiYWQgcGFja2V0ICovCisgICAgICAgICAgIAorICAgICAgR0VUU0hPUlQocXR5cGUsIHApOyAKKyAgICAgIEdFVFNIT1JUKHFjbGFzcywgcCk7CisgICAgICAKKyAgICAgIGlmIChxY2xhc3MgIT0gQ19JTikKKwljb250aW51ZTsKKworICAgICAgLyogUFRSczogd2UgY2hhc2UgQ05BTUVzIGhlcmUsIHNpbmNlIHdlIGhhdmUgbm8gd2F5IHRvIAorCSByZXByZXNlbnQgdGhlbSBpbiB0aGUgY2FjaGUuICovCisgICAgICBpZiAocXR5cGUgPT0gVF9QVFIpCisJeyAKKwkgIGludCBuYW1lX2VuY29kaW5nID0gaW5fYXJwYV9uYW1lXzJfYWRkcihuYW1lLCAmYWRkcik7CisJICAKKwkgIGlmICghbmFtZV9lbmNvZGluZykKKwkgICAgY29udGludWU7CisKKwkgIGlmICghKGZsYWdzICYgRl9OWERPTUFJTikpCisJICAgIHsKKwkgICAgY25hbWVfbG9vcDoKKwkgICAgICBpZiAoIShwMSA9IHNraXBfcXVlc3Rpb25zKGhlYWRlciwgcWxlbikpKQorCQlyZXR1cm4gMDsKKwkgICAgICAKKwkgICAgICBmb3IgKGogPSBudG9ocyhoZWFkZXItPmFuY291bnQpOyBqICE9IDA7IGotLSkgCisJCXsKKwkJICB1bnNpZ25lZCBjaGFyICp0bXAgPSBuYW1lcDsKKwkJICAvKiB0aGUgbG9vcCBib2R5IG92ZXJ3cml0ZXMgdGhlIG9yaWdpbmFsIG5hbWUsIHNvIGdldCBpdCBiYWNrIGhlcmUuICovCisJCSAgaWYgKCFleHRyYWN0X25hbWUoaGVhZGVyLCBxbGVuLCAmdG1wLCBuYW1lLCAxLCAwKSB8fAorCQkgICAgICAhKHJlcyA9IGV4dHJhY3RfbmFtZShoZWFkZXIsIHFsZW4sICZwMSwgbmFtZSwgMCwgMTApKSkKKwkJICAgIHJldHVybiAwOyAvKiBiYWQgcGFja2V0ICovCisJCSAgCisJCSAgR0VUU0hPUlQoYXF0eXBlLCBwMSk7IAorCQkgIEdFVFNIT1JUKGFxY2xhc3MsIHAxKTsKKwkJICBHRVRMT05HKGF0dGwsIHAxKTsKKwkJICBpZiAoKGRhZW1vbi0+bWF4X3R0bCAhPSAwKSAmJiAoYXR0bCA+IGRhZW1vbi0+bWF4X3R0bCkgJiYgIWlzX3NpZ24pCisJCSAgICB7CisJCSAgICAgIChwMSkgLT0gNDsKKwkJICAgICAgUFVUTE9ORyhkYWVtb24tPm1heF90dGwsIHAxKTsKKwkJICAgIH0KKwkJICBHRVRTSE9SVChhcmRsZW4sIHAxKTsKKwkJICBlbmRyciA9IHAxK2FyZGxlbjsKKwkJICAKKwkJICAvKiBUVEwgb2YgcmVjb3JkIGlzIG1pbmltdW0gb2YgQ05BTUVTIGFuZCBQVFIgKi8KKwkJICBpZiAoYXR0bCA8IGN0dGwpCisJCSAgICBjdHRsID0gYXR0bDsKKworCQkgIGlmIChhcWNsYXNzID09IENfSU4gJiYgcmVzICE9IDIgJiYgKGFxdHlwZSA9PSBUX0NOQU1FIHx8IGFxdHlwZSA9PSBUX1BUUikpCisJCSAgICB7CisJCSAgICAgIGlmICghZXh0cmFjdF9uYW1lKGhlYWRlciwgcWxlbiwgJnAxLCBuYW1lLCAxLCAwKSkKKwkJCXJldHVybiAwOworCQkgICAgICAKKwkJICAgICAgaWYgKGFxdHlwZSA9PSBUX0NOQU1FKQorCQkJeworCQkJICBpZiAoIWNuYW1lX2NvdW50LS0gfHwgc2VjdXJlKQorCQkJICAgIHJldHVybiAwOyAvKiBsb29wZWQgQ05BTUVTLCBvciBETlNTRUMsIHdoaWNoIHdlIGNhbid0IGNhY2hlLiAqLworCQkJICBnb3RvIGNuYW1lX2xvb3A7CisJCQl9CisJCSAgICAgIAorCQkgICAgICBjYWNoZV9pbnNlcnQobmFtZSwgJmFkZHIsIG5vdywgY3R0bCwgbmFtZV9lbmNvZGluZyB8IHNlY2ZsYWcgfCBGX1JFVkVSU0UpOworCQkgICAgICBmb3VuZCA9IDE7IAorCQkgICAgfQorCQkgIAorCQkgIHAxID0gZW5kcnI7CisJCSAgaWYgKCFDSEVDS19MRU4oaGVhZGVyLCBwMSwgcWxlbiwgMCkpCisJCSAgICByZXR1cm4gMDsgLyogYmFkIHBhY2tldCAqLworCQl9CisJICAgIH0KKwkgIAorCSAgIGlmICghZm91bmQgJiYgIW9wdGlvbl9ib29sKE9QVF9OT19ORUcpKQorCSAgICB7CisJICAgICAgaWYgKCFzZWFyY2hlZF9zb2EpCisJCXsKKwkJICBzZWFyY2hlZF9zb2EgPSAxOworCQkgIHR0bCA9IGZpbmRfc29hKGhlYWRlciwgcWxlbiwgTlVMTCwgZG9jdG9yZWQpOworCQl9CisJICAgICAgaWYgKHR0bCkKKwkJY2FjaGVfaW5zZXJ0KE5VTEwsICZhZGRyLCBub3csIHR0bCwgbmFtZV9lbmNvZGluZyB8IEZfUkVWRVJTRSB8IEZfTkVHIHwgZmxhZ3MgfCBzZWNmbGFnKTsJCisJICAgIH0KKwl9CisgICAgICBlbHNlCisJeworCSAgLyogZXZlcnl0aGluZyBvdGhlciB0aGFuIFBUUiAqLworCSAgc3RydWN0IGNyZWMgKm5ld2M7CisJICBpbnQgYWRkcmxlbjsKKworCSAgaWYgKHF0eXBlID09IFRfQSkKKwkgICAgeworCSAgICAgIGFkZHJsZW4gPSBJTkFERFJTWjsKKwkgICAgICBmbGFncyB8PSBGX0lQVjQ7CisJICAgIH0KKyNpZmRlZiBIQVZFX0lQVjYKKwkgIGVsc2UgaWYgKHF0eXBlID09IFRfQUFBQSkKKwkgICAgeworCSAgICAgIGFkZHJsZW4gPSBJTjZBRERSU1o7CisJICAgICAgZmxhZ3MgfD0gRl9JUFY2OworCSAgICB9CisjZW5kaWYKKwkgIGVsc2UgCisJICAgIGNvbnRpbnVlOworCSAgICAKKwljbmFtZV9sb29wMToKKwkgIGlmICghKHAxID0gc2tpcF9xdWVzdGlvbnMoaGVhZGVyLCBxbGVuKSkpCisJICAgIHJldHVybiAwOworCSAgCisJICBmb3IgKGogPSBudG9ocyhoZWFkZXItPmFuY291bnQpOyBqICE9IDA7IGotLSkgCisJICAgIHsKKwkgICAgICBpZiAoIShyZXMgPSBleHRyYWN0X25hbWUoaGVhZGVyLCBxbGVuLCAmcDEsIG5hbWUsIDAsIDEwKSkpCisJCXJldHVybiAwOyAvKiBiYWQgcGFja2V0ICovCisJICAgICAgCisJICAgICAgR0VUU0hPUlQoYXF0eXBlLCBwMSk7IAorCSAgICAgIEdFVFNIT1JUKGFxY2xhc3MsIHAxKTsKKwkgICAgICBHRVRMT05HKGF0dGwsIHAxKTsKKwkgICAgICBpZiAoKGRhZW1vbi0+bWF4X3R0bCAhPSAwKSAmJiAoYXR0bCA+IGRhZW1vbi0+bWF4X3R0bCkgJiYgIWlzX3NpZ24pCisJCXsKKwkJICAocDEpIC09IDQ7CisJCSAgUFVUTE9ORyhkYWVtb24tPm1heF90dGwsIHAxKTsKKwkJfQorCSAgICAgIEdFVFNIT1JUKGFyZGxlbiwgcDEpOworCSAgICAgIGVuZHJyID0gcDErYXJkbGVuOworCSAgICAgIAorCSAgICAgIGlmIChhcWNsYXNzID09IENfSU4gJiYgcmVzICE9IDIgJiYgKGFxdHlwZSA9PSBUX0NOQU1FIHx8IGFxdHlwZSA9PSBxdHlwZSkpCisJCXsKKwkJICBpZiAoYXF0eXBlID09IFRfQ05BTUUpCisJCSAgICB7CisJCSAgICAgIGlmICghY25hbWVfY291bnQtLSkKKwkJCXJldHVybiAwOyAvKiBsb29wZWQgQ05BTUVTICovCisJCSAgICAgIG5ld2MgPSBjYWNoZV9pbnNlcnQobmFtZSwgTlVMTCwgbm93LCBhdHRsLCBGX0NOQU1FIHwgRl9GT1JXQVJEIHwgc2VjZmxhZyk7CisJCSAgICAgIGlmIChuZXdjKQorCQkJeworCQkJICBuZXdjLT5hZGRyLmNuYW1lLnRhcmdldC5jYWNoZSA9IE5VTEw7CisJCQkgIC8qIGFueXRoaW5nIG90aGVyIHRoYW4gemVybywgdG8gYXZvaWQgYmVpbmcgbWlzdGFrZW4gZm9yIENOQU1FIHRvIGludGVyZmFjZS1uYW1lICovIAorCQkJICBuZXdjLT5hZGRyLmNuYW1lLnVpZCA9IDE7IAorCQkJICBpZiAoY3BwKQorCQkJICAgIHsKKwkJCSAgICAgIGNwcC0+YWRkci5jbmFtZS50YXJnZXQuY2FjaGUgPSBuZXdjOworCQkJICAgICAgY3BwLT5hZGRyLmNuYW1lLnVpZCA9IG5ld2MtPnVpZDsKKwkJCSAgICB9CisJCQl9CisJCSAgICAgIAorCQkgICAgICBjcHAgPSBuZXdjOworCQkgICAgICBpZiAoYXR0bCA8IGN0dGwpCisJCQljdHRsID0gYXR0bDsKKwkJICAgICAgCisJCSAgICAgIGlmICghZXh0cmFjdF9uYW1lKGhlYWRlciwgcWxlbiwgJnAxLCBuYW1lLCAxLCAwKSkKKwkJCXJldHVybiAwOworCQkgICAgICBnb3RvIGNuYW1lX2xvb3AxOworCQkgICAgfQorCQkgIGVsc2UgaWYgKCEoZmxhZ3MgJiBGX05YRE9NQUlOKSkKKwkJICAgIHsKKwkJICAgICAgZm91bmQgPSAxOworCQkgICAgICAKKwkJICAgICAgLyogY29weSBhZGRyZXNzIGludG8gYWxpZ25lZCBzdG9yYWdlICovCisJCSAgICAgIGlmICghQ0hFQ0tfTEVOKGhlYWRlciwgcDEsIHFsZW4sIGFkZHJsZW4pKQorCQkJcmV0dXJuIDA7IC8qIGJhZCBwYWNrZXQgKi8KKwkJICAgICAgbWVtY3B5KCZhZGRyLCBwMSwgYWRkcmxlbik7CisJCSAgICAgIAorCQkgICAgICAvKiBjaGVjayBmb3IgcmV0dXJuZWQgYWRkcmVzcyBpbiBwcml2YXRlIHNwYWNlICovCisJCSAgICAgIGlmIChjaGVja19yZWJpbmQpCisJCQl7CisJCQkgIGlmICgoZmxhZ3MgJiBGX0lQVjQpICYmCisJCQkgICAgICBwcml2YXRlX25ldChhZGRyLmFkZHIuYWRkcjQsICFvcHRpb25fYm9vbChPUFRfTE9DQUxfUkVCSU5EKSkpCisJCQkgICAgcmV0dXJuIDE7CisJCQkgIAorI2lmZGVmIEhBVkVfSVBWNgorCQkJICBpZiAoKGZsYWdzICYgRl9JUFY2KSAmJgorCQkJICAgICAgSU42X0lTX0FERFJfVjRNQVBQRUQoJmFkZHIuYWRkci5hZGRyNikpCisJCQkgICAgeworCQkJICAgICAgc3RydWN0IGluX2FkZHIgdjQ7CisJCQkgICAgICB2NC5zX2FkZHIgPSAoKGNvbnN0IHVpbnQzMl90ICopICgmYWRkci5hZGRyLmFkZHI2KSlbM107CisJCQkgICAgICBpZiAocHJpdmF0ZV9uZXQodjQsICFvcHRpb25fYm9vbChPUFRfTE9DQUxfUkVCSU5EKSkpCisJCQkJcmV0dXJuIDE7CisJCQkgICAgfQorI2VuZGlmCisJCQl9CisJCSAgICAgIAorI2lmZGVmIEhBVkVfSVBTRVQKKwkJICAgICAgaWYgKGlwc2V0cyAmJiAoZmxhZ3MgJiAoRl9JUFY0IHwgRl9JUFY2KSkpCisJCQl7CisJCQkgIGlwc2V0c19jdXIgPSBpcHNldHM7CisJCQkgIHdoaWxlICgqaXBzZXRzX2N1cikKKwkJCSAgICB7CisJCQkgICAgICBsb2dfcXVlcnkoKGZsYWdzICYgKEZfSVBWNCB8IEZfSVBWNikpIHwgRl9JUFNFVCwgbmFtZSwgJmFkZHIsICppcHNldHNfY3VyKTsKKwkJCSAgICAgIGFkZF90b19pcHNldCgqaXBzZXRzX2N1cisrLCAmYWRkciwgZmxhZ3MsIDApOworCQkJICAgIH0KKwkJCX0KKyNlbmRpZgorCQkgICAgICAKKwkJICAgICAgbmV3YyA9IGNhY2hlX2luc2VydChuYW1lLCAmYWRkciwgbm93LCBhdHRsLCBmbGFncyB8IEZfRk9SV0FSRCB8IHNlY2ZsYWcpOworCQkgICAgICBpZiAobmV3YyAmJiBjcHApCisJCQl7CisJCQkgIGNwcC0+YWRkci5jbmFtZS50YXJnZXQuY2FjaGUgPSBuZXdjOworCQkJICBjcHAtPmFkZHIuY25hbWUudWlkID0gbmV3Yy0+dWlkOworCQkJfQorCQkgICAgICBjcHAgPSBOVUxMOworCQkgICAgfQorCQl9CisJICAgICAgCisJICAgICAgcDEgPSBlbmRycjsKKwkgICAgICBpZiAoIUNIRUNLX0xFTihoZWFkZXIsIHAxLCBxbGVuLCAwKSkKKwkJcmV0dXJuIDA7IC8qIGJhZCBwYWNrZXQgKi8KKwkgICAgfQorCSAgCisJICBpZiAoIWZvdW5kICYmICFvcHRpb25fYm9vbChPUFRfTk9fTkVHKSkKKwkgICAgeworCSAgICAgIGlmICghc2VhcmNoZWRfc29hKQorCQl7CisJCSAgc2VhcmNoZWRfc29hID0gMTsKKwkJICB0dGwgPSBmaW5kX3NvYShoZWFkZXIsIHFsZW4sIE5VTEwsIGRvY3RvcmVkKTsKKwkJfQorCSAgICAgIC8qIElmIHRoZXJlJ3Mgbm8gU09BIHRvIGdldCB0aGUgVFRMIGZyb20sIGJ1dCB0aGVyZSBpcyBhIENOQU1FIAorCQkgcG9pbnRpbmcgYXQgdGhpcywgaW5oZXJpdCBpdHMgVFRMICovCisJICAgICAgaWYgKHR0bCB8fCBjcHApCisJCXsKKwkJICBuZXdjID0gY2FjaGVfaW5zZXJ0KG5hbWUsIE5VTEwsIG5vdywgdHRsID8gdHRsIDogY3R0bCwgRl9GT1JXQVJEIHwgRl9ORUcgfCBmbGFncyB8IHNlY2ZsYWcpOwkKKwkJICBpZiAobmV3YyAmJiBjcHApCisJCSAgICB7CisJCSAgICAgIGNwcC0+YWRkci5jbmFtZS50YXJnZXQuY2FjaGUgPSBuZXdjOworCQkgICAgICBjcHAtPmFkZHIuY25hbWUudWlkID0gbmV3Yy0+dWlkOworCQkgICAgfQorCQl9CisJICAgIH0KKwl9CisgICAgfQorICAKKyAgLyogRG9uJ3QgcHV0IHN0dWZmIGZyb20gYSB0cnVuY2F0ZWQgcGFja2V0IGludG8gdGhlIGNhY2hlLgorICAgICBEb24ndCBjYWNoZSByZXBsaWVzIGZyb20gbm9uLXJlY3Vyc2l2ZSBuYW1lc2VydmVycywgc2luY2Ugd2UgbWF5IGdldCBhIAorICAgICByZXBseSBjb250YWluaW5nIGEgQ05BTUUgYnV0IG5vdCBpdHMgdGFyZ2V0LCBldmVuIHRob3VnaCB0aGUgdGFyZ2V0IAorICAgICBkb2VzIGV4aXN0LiAqLworICBpZiAoIShoZWFkZXItPmhiMyAmIEhCM19UQykgJiYgCisgICAgICAhKGhlYWRlci0+aGI0ICYgSEI0X0NEKSAmJgorICAgICAgKGhlYWRlci0+aGI0ICYgSEI0X1JBKSAmJgorICAgICAgIW5vX2NhY2hlX2Ruc3NlYykKKyAgICBjYWNoZV9lbmRfaW5zZXJ0KCk7CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qIElmIHRoZSBwYWNrZXQgaG9sZHMgZXhhY3RseSBvbmUgcXVlcnkKKyAgIHJldHVybiBGX0lQVjQgb3IgRl9JUFY2ICBhbmQgbGVhdmUgdGhlIG5hbWUgZnJvbSB0aGUgcXVlcnkgaW4gbmFtZSAqLwordW5zaWduZWQgaW50IGV4dHJhY3RfcmVxdWVzdChzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBzaXplX3QgcWxlbiwgY2hhciAqbmFtZSwgdW5zaWduZWQgc2hvcnQgKnR5cGVwKQoreworICB1bnNpZ25lZCBjaGFyICpwID0gKHVuc2lnbmVkIGNoYXIgKikoaGVhZGVyKzEpOworICBpbnQgcXR5cGUsIHFjbGFzczsKKworICBpZiAodHlwZXApCisgICAgKnR5cGVwID0gMDsKKworICBpZiAobnRvaHMoaGVhZGVyLT5xZGNvdW50KSAhPSAxIHx8IE9QQ09ERShoZWFkZXIpICE9IFFVRVJZKQorICAgIHJldHVybiAwOyAvKiBtdXN0IGJlIGV4YWN0bHkgb25lIHF1ZXJ5LiAqLworICAKKyAgaWYgKCFleHRyYWN0X25hbWUoaGVhZGVyLCBxbGVuLCAmcCwgbmFtZSwgMSwgNCkpCisgICAgcmV0dXJuIDA7IC8qIGJhZCBwYWNrZXQgKi8KKyAgIAorICBHRVRTSE9SVChxdHlwZSwgcCk7IAorICBHRVRTSE9SVChxY2xhc3MsIHApOworCisgIGlmICh0eXBlcCkKKyAgICAqdHlwZXAgPSBxdHlwZTsKKworICBpZiAocWNsYXNzID09IENfSU4pCisgICAgeworICAgICAgaWYgKHF0eXBlID09IFRfQSkKKwlyZXR1cm4gRl9JUFY0OworICAgICAgaWYgKHF0eXBlID09IFRfQUFBQSkKKwlyZXR1cm4gRl9JUFY2OworICAgICAgaWYgKHF0eXBlID09IFRfQU5ZKQorCXJldHVybiAgRl9JUFY0IHwgRl9JUFY2OworICAgIH0KKyAgCisgIHJldHVybiBGX1FVRVJZOworfQorCisKK3NpemVfdCBzZXR1cF9yZXBseShzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBzaXplX3QgcWxlbiwKKwkJc3RydWN0IGFsbF9hZGRyICphZGRycCwgdW5zaWduZWQgaW50IGZsYWdzLCB1bnNpZ25lZCBsb25nIHR0bCkKK3sKKyAgdW5zaWduZWQgY2hhciAqcDsKKworICBpZiAoIShwID0gc2tpcF9xdWVzdGlvbnMoaGVhZGVyLCBxbGVuKSkpCisgICAgcmV0dXJuIDA7CisgIAorICAvKiBjbGVhciBhdXRob3JpdGF0aXZlIGFuZCB0cnVuY2F0ZWQgZmxhZ3MsIHNldCBRUiBmbGFnICovCisgIGhlYWRlci0+aGIzID0gKGhlYWRlci0+aGIzICYgfihIQjNfQUEgfCBIQjNfVEMpKSB8IEhCM19RUjsKKyAgLyogc2V0IFJBIGZsYWcgKi8KKyAgaGVhZGVyLT5oYjQgfD0gSEI0X1JBOworCisgIGhlYWRlci0+bnNjb3VudCA9IGh0b25zKDApOworICBoZWFkZXItPmFyY291bnQgPSBodG9ucygwKTsKKyAgaGVhZGVyLT5hbmNvdW50ID0gaHRvbnMoMCk7IC8qIG5vIGFuc3dlcnMgdW5sZXNzIGNoYW5nZWQgYmVsb3cgKi8KKyAgaWYgKGZsYWdzID09IEZfTk9FUlIpCisgICAgU0VUX1JDT0RFKGhlYWRlciwgTk9FUlJPUik7IC8qIGVtcHR5IGRvbWFpbiAqLworICBlbHNlIGlmIChmbGFncyA9PSBGX05YRE9NQUlOKQorICAgIFNFVF9SQ09ERShoZWFkZXIsIE5YRE9NQUlOKTsKKyAgZWxzZSBpZiAoZmxhZ3MgPT0gRl9JUFY0KQorICAgIHsgLyogd2Uga25vdyB0aGUgYWRkcmVzcyAqLworICAgICAgU0VUX1JDT0RFKGhlYWRlciwgTk9FUlJPUik7CisgICAgICBoZWFkZXItPmFuY291bnQgPSBodG9ucygxKTsKKyAgICAgIGhlYWRlci0+aGIzIHw9IEhCM19BQTsKKyAgICAgIGFkZF9yZXNvdXJjZV9yZWNvcmQoaGVhZGVyLCBOVUxMLCBOVUxMLCBzaXplb2Yoc3RydWN0IGRuc19oZWFkZXIpLCAmcCwgdHRsLCBOVUxMLCBUX0EsIENfSU4sICI0IiwgYWRkcnApOworICAgIH0KKyNpZmRlZiBIQVZFX0lQVjYKKyAgZWxzZSBpZiAoZmxhZ3MgPT0gRl9JUFY2KQorICAgIHsKKyAgICAgIFNFVF9SQ09ERShoZWFkZXIsIE5PRVJST1IpOworICAgICAgaGVhZGVyLT5hbmNvdW50ID0gaHRvbnMoMSk7CisgICAgICBoZWFkZXItPmhiMyB8PSBIQjNfQUE7CisgICAgICBhZGRfcmVzb3VyY2VfcmVjb3JkKGhlYWRlciwgTlVMTCwgTlVMTCwgc2l6ZW9mKHN0cnVjdCBkbnNfaGVhZGVyKSwgJnAsIHR0bCwgTlVMTCwgVF9BQUFBLCBDX0lOLCAiNiIsIGFkZHJwKTsKKyAgICB9CisjZW5kaWYKKyAgZWxzZSAvKiBub3doZXJlIHRvIGZvcndhcmQgdG8gKi8KKyAgICBTRVRfUkNPREUoaGVhZGVyLCBSRUZVU0VEKTsKKyAKKyAgcmV0dXJuIHAgLSAodW5zaWduZWQgY2hhciAqKWhlYWRlcjsKK30KKworLyogY2hlY2sgaWYgbmFtZSBtYXRjaGVzIGxvY2FsIG5hbWVzIGllIGZyb20gL2V0Yy9ob3N0cyBvciBESENQIG9yIGxvY2FsIG14IG5hbWVzLiAqLworaW50IGNoZWNrX2Zvcl9sb2NhbF9kb21haW4oY2hhciAqbmFtZSwgdGltZV90IG5vdykKK3sKKyAgc3RydWN0IGNyZWMgKmNyZWNwOworICBzdHJ1Y3QgbXhfc3J2X3JlY29yZCAqbXg7CisgIHN0cnVjdCB0eHRfcmVjb3JkICp0eHQ7CisgIHN0cnVjdCBpbnRlcmZhY2VfbmFtZSAqaW50cjsKKyAgc3RydWN0IHB0cl9yZWNvcmQgKnB0cjsKKyAgc3RydWN0IG5hcHRyICpuYXB0cjsKKworICAvKiBOb3RlOiB0aGUgY2FsbCB0byBjYWNoZV9maW5kX2J5X25hbWUgaXMgaW50ZW5kZWQgdG8gZmluZCBhbnkgcmVjb3JkIHdoaWNoIG1hdGNoZXMKKyAgICAgaWUgQSwgQUFBQSwgQ05BTUUuICovCisKKyAgaWYgKChjcmVjcCA9IGNhY2hlX2ZpbmRfYnlfbmFtZShOVUxMLCBuYW1lLCBub3csIEZfSVBWNCB8IEZfSVBWNiB8IEZfQ05BTUUgfEZfTk9fUlIpKSAmJgorICAgICAgKGNyZWNwLT5mbGFncyAmIChGX0hPU1RTIHwgRl9ESENQIHwgRl9DT05GSUcpKSkKKyAgICByZXR1cm4gMTsKKyAgCisgIGZvciAobmFwdHIgPSBkYWVtb24tPm5hcHRyOyBuYXB0cjsgbmFwdHIgPSBuYXB0ci0+bmV4dCkKKyAgICAgaWYgKGhvc3RuYW1lX2lzZXF1YWwobmFtZSwgbmFwdHItPm5hbWUpKQorICAgICAgcmV0dXJuIDE7CisKKyAgIGZvciAobXggPSBkYWVtb24tPm14bmFtZXM7IG14OyBteCA9IG14LT5uZXh0KQorICAgIGlmIChob3N0bmFtZV9pc2VxdWFsKG5hbWUsIG14LT5uYW1lKSkKKyAgICAgIHJldHVybiAxOworCisgIGZvciAodHh0ID0gZGFlbW9uLT50eHQ7IHR4dDsgdHh0ID0gdHh0LT5uZXh0KQorICAgIGlmIChob3N0bmFtZV9pc2VxdWFsKG5hbWUsIHR4dC0+bmFtZSkpCisgICAgICByZXR1cm4gMTsKKworICBmb3IgKGludHIgPSBkYWVtb24tPmludF9uYW1lczsgaW50cjsgaW50ciA9IGludHItPm5leHQpCisgICAgaWYgKGhvc3RuYW1lX2lzZXF1YWwobmFtZSwgaW50ci0+bmFtZSkpCisgICAgICByZXR1cm4gMTsKKworICBmb3IgKHB0ciA9IGRhZW1vbi0+cHRyOyBwdHI7IHB0ciA9IHB0ci0+bmV4dCkKKyAgICBpZiAoaG9zdG5hbWVfaXNlcXVhbChuYW1lLCBwdHItPm5hbWUpKQorICAgICAgcmV0dXJuIDE7CisgCisgIHJldHVybiAwOworfQorCisvKiBJcyB0aGUgcGFja2V0IGEgcmVwbHkgd2l0aCB0aGUgYW5zd2VyIGFkZHJlc3MgZXF1YWwgdG8gYWRkcj8KKyAgIElmIHNvIG11bmcgaXMgaW50byBhbiBOWERPTUFJTiByZXBseSBhbmQgYWxzbyBwdXQgdGhhdCBpbmZvcm1hdGlvbgorICAgaW4gdGhlIGNhY2hlLiAqLworaW50IGNoZWNrX2Zvcl9ib2d1c193aWxkY2FyZChzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBzaXplX3QgcWxlbiwgY2hhciAqbmFtZSwgCisJCQkgICAgIHN0cnVjdCBib2d1c19hZGRyICpiYWRkciwgdGltZV90IG5vdykKK3sKKyAgdW5zaWduZWQgY2hhciAqcDsKKyAgaW50IGksIHF0eXBlLCBxY2xhc3MsIHJkbGVuOworICB1bnNpZ25lZCBsb25nIHR0bDsKKyAgc3RydWN0IGJvZ3VzX2FkZHIgKmJhZGRycDsKKworICAvKiBza2lwIG92ZXIgcXVlc3Rpb25zICovCisgIGlmICghKHAgPSBza2lwX3F1ZXN0aW9ucyhoZWFkZXIsIHFsZW4pKSkKKyAgICByZXR1cm4gMDsgLyogYmFkIHBhY2tldCAqLworCisgIGZvciAoaSA9IG50b2hzKGhlYWRlci0+YW5jb3VudCk7IGkgIT0gMDsgaS0tKQorICAgIHsKKyAgICAgIGlmICghZXh0cmFjdF9uYW1lKGhlYWRlciwgcWxlbiwgJnAsIG5hbWUsIDEsIDEwKSkKKwlyZXR1cm4gMDsgLyogYmFkIHBhY2tldCAqLworICAKKyAgICAgIEdFVFNIT1JUKHF0eXBlLCBwKTsgCisgICAgICBHRVRTSE9SVChxY2xhc3MsIHApOworICAgICAgR0VUTE9ORyh0dGwsIHApOworICAgICAgR0VUU0hPUlQocmRsZW4sIHApOworICAgICAgCisgICAgICBpZiAocWNsYXNzID09IENfSU4gJiYgcXR5cGUgPT0gVF9BKQorCXsKKwkgIGlmICghQ0hFQ0tfTEVOKGhlYWRlciwgcCwgcWxlbiwgSU5BRERSU1opKQorCSAgICByZXR1cm4gMDsKKwkgIAorCSAgZm9yIChiYWRkcnAgPSBiYWRkcjsgYmFkZHJwOyBiYWRkcnAgPSBiYWRkcnAtPm5leHQpCisJICAgIGlmIChtZW1jbXAoJmJhZGRycC0+YWRkciwgcCwgSU5BRERSU1opID09IDApCisJICAgICAgeworCQkvKiBGb3VuZCBhIGJvZ3VzIGFkZHJlc3MuIEluc2VydCB0aGF0IGluZm8gaGVyZSwgc2luY2UgdGhlcmUgbm8gU09BIHJlY29yZAorCQkgICB0byBnZXQgdGhlIHR0bCBmcm9tIGluIHRoZSBub3JtYWwgcHJvY2Vzc2luZyAqLworCQljYWNoZV9zdGFydF9pbnNlcnQoKTsKKwkJY2FjaGVfaW5zZXJ0KG5hbWUsIE5VTEwsIG5vdywgdHRsLCBGX0lQVjQgfCBGX0ZPUldBUkQgfCBGX05FRyB8IEZfTlhET01BSU4pOworCQljYWNoZV9lbmRfaW5zZXJ0KCk7CisJCQorCQlyZXR1cm4gMTsKKwkgICAgICB9CisJfQorICAgICAgCisgICAgICBpZiAoIUFERF9SRExFTihoZWFkZXIsIHAsIHFsZW4sIHJkbGVuKSkKKwlyZXR1cm4gMDsKKyAgICB9CisgIAorICByZXR1cm4gMDsKK30KKworaW50IGNoZWNrX2Zvcl9pZ25vcmVkX2FkZHJlc3Moc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90IHFsZW4sIHN0cnVjdCBib2d1c19hZGRyICpiYWRkcikKK3sKKyAgdW5zaWduZWQgY2hhciAqcDsKKyAgaW50IGksIHF0eXBlLCBxY2xhc3MsIHJkbGVuOworICBzdHJ1Y3QgYm9ndXNfYWRkciAqYmFkZHJwOworCisgIC8qIHNraXAgb3ZlciBxdWVzdGlvbnMgKi8KKyAgaWYgKCEocCA9IHNraXBfcXVlc3Rpb25zKGhlYWRlciwgcWxlbikpKQorICAgIHJldHVybiAwOyAvKiBiYWQgcGFja2V0ICovCisKKyAgZm9yIChpID0gbnRvaHMoaGVhZGVyLT5hbmNvdW50KTsgaSAhPSAwOyBpLS0pCisgICAgeworICAgICAgaWYgKCEocCA9IHNraXBfbmFtZShwLCBoZWFkZXIsIHFsZW4sIDEwKSkpCisJcmV0dXJuIDA7IC8qIGJhZCBwYWNrZXQgKi8KKyAgICAgIAorICAgICAgR0VUU0hPUlQocXR5cGUsIHApOyAKKyAgICAgIEdFVFNIT1JUKHFjbGFzcywgcCk7CisgICAgICBwICs9IDQ7IC8qIFRUTCAqLworICAgICAgR0VUU0hPUlQocmRsZW4sIHApOworICAgICAgCisgICAgICBpZiAocWNsYXNzID09IENfSU4gJiYgcXR5cGUgPT0gVF9BKQorCXsKKwkgIGlmICghQ0hFQ0tfTEVOKGhlYWRlciwgcCwgcWxlbiwgSU5BRERSU1opKQorCSAgICByZXR1cm4gMDsKKwkgIAorCSAgZm9yIChiYWRkcnAgPSBiYWRkcjsgYmFkZHJwOyBiYWRkcnAgPSBiYWRkcnAtPm5leHQpCisJICAgIGlmIChtZW1jbXAoJmJhZGRycC0+YWRkciwgcCwgSU5BRERSU1opID09IDApCisJICAgICAgcmV0dXJuIDE7CisJfQorICAgICAgCisgICAgICBpZiAoIUFERF9SRExFTihoZWFkZXIsIHAsIHFsZW4sIHJkbGVuKSkKKwlyZXR1cm4gMDsKKyAgICB9CisgIAorICByZXR1cm4gMDsKK30KKworCitpbnQgYWRkX3Jlc291cmNlX3JlY29yZChzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBjaGFyICpsaW1pdCwgaW50ICp0cnVuY3AsIGludCBuYW1lb2Zmc2V0LCB1bnNpZ25lZCBjaGFyICoqcHAsIAorCQkJdW5zaWduZWQgbG9uZyB0dGwsIGludCAqb2Zmc2V0LCB1bnNpZ25lZCBzaG9ydCB0eXBlLCB1bnNpZ25lZCBzaG9ydCBjbGFzcywgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXA7CisgIHVuc2lnbmVkIGNoYXIgKnNhdiwgKnAgPSAqcHA7CisgIGludCBqOworICB1bnNpZ25lZCBzaG9ydCB1c3ZhbDsKKyAgbG9uZyBsdmFsOworICBjaGFyICpzdmFsOworI2RlZmluZSBDSEVDS19MSU1JVChzaXplKSBcCisgIGlmIChsaW1pdCAmJiBwICsgKHNpemUpID4gKHVuc2lnbmVkIGNoYXIqKWxpbWl0KSBcCisgICAgeyBcCisgICAgICB2YV9lbmQoYXApOyBcCisgICAgICBnb3RvIHRydW5jYXRlZDsgXAorICAgIH0KKworICBpZiAodHJ1bmNwICYmICp0cnVuY3ApCisgICAgcmV0dXJuIDA7CisKKyAgdmFfc3RhcnQoYXAsIGZvcm1hdCk7ICAgLyogbWFrZSBhcCBwb2ludCB0byAxc3QgdW5hbWVkIGFyZ3VtZW50ICovCisKKyAgaWYgKG5hbWVvZmZzZXQgPiAwKQorICAgIHsKKyAgICAgIENIRUNLX0xJTUlUKDIpOworICAgICAgUFVUU0hPUlQobmFtZW9mZnNldCB8IDB4YzAwMCwgcCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgY2hhciAqbmFtZSA9IHZhX2FyZyhhcCwgY2hhciAqKTsKKyAgICAgIGlmIChuYW1lICYmICEocCA9IGRvX3JmYzEwMzVfbmFtZShwLCBuYW1lLCBsaW1pdCkpKQorCXsKKwkgIHZhX2VuZChhcCk7CisJICBnb3RvIHRydW5jYXRlZDsKKwl9CisgICAgICAKKyAgICAgIGlmIChuYW1lb2Zmc2V0IDwgMCkKKwl7CisJICBDSEVDS19MSU1JVCgyKTsKKwkgIFBVVFNIT1JUKC1uYW1lb2Zmc2V0IHwgMHhjMDAwLCBwKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgQ0hFQ0tfTElNSVQoMSk7CisJICAqcCsrID0gMDsKKwl9CisgICAgfQorCisgIC8qIHR5cGUgKDIpICsgY2xhc3MgKDIpICsgdHRsICg0KSArIHJkbGVuICgyKSAqLworICBDSEVDS19MSU1JVCgxMCk7CisgIAorICBQVVRTSE9SVCh0eXBlLCBwKTsKKyAgUFVUU0hPUlQoY2xhc3MsIHApOworICBQVVRMT05HKHR0bCwgcCk7ICAgICAgLyogVFRMICovCisKKyAgc2F2ID0gcDsgICAgICAgICAgICAgIC8qIFNhdmUgcG9pbnRlciB0byBSRExlbmd0aCBmaWVsZCAqLworICBQVVRTSE9SVCgwLCBwKTsgICAgICAgLyogUGxhY2Vob2xkZXIgUkRMZW5ndGggKi8KKworICBmb3IgKDsgKmZvcm1hdDsgZm9ybWF0KyspCisgICAgc3dpdGNoICgqZm9ybWF0KQorICAgICAgeworI2lmZGVmIEhBVkVfSVBWNgorICAgICAgY2FzZSAnNic6CisgICAgICAgIENIRUNLX0xJTUlUKElONkFERFJTWik7CisJc3ZhbCA9IHZhX2FyZyhhcCwgY2hhciAqKTsgCisJbWVtY3B5KHAsIHN2YWwsIElONkFERFJTWik7CisJcCArPSBJTjZBRERSU1o7CisJYnJlYWs7CisjZW5kaWYKKwkKKyAgICAgIGNhc2UgJzQnOgorICAgICAgICBDSEVDS19MSU1JVChJTkFERFJTWik7CisJc3ZhbCA9IHZhX2FyZyhhcCwgY2hhciAqKTsgCisJbWVtY3B5KHAsIHN2YWwsIElOQUREUlNaKTsKKwlwICs9IElOQUREUlNaOworCWJyZWFrOworCQorICAgICAgY2FzZSAnYic6CisgICAgICAgIENIRUNLX0xJTUlUKDEpOworCXVzdmFsID0gdmFfYXJnKGFwLCBpbnQpOworCSpwKysgPSB1c3ZhbDsKKwlicmVhazsKKwkKKyAgICAgIGNhc2UgJ3MnOgorICAgICAgICBDSEVDS19MSU1JVCgyKTsKKwl1c3ZhbCA9IHZhX2FyZyhhcCwgaW50KTsKKwlQVVRTSE9SVCh1c3ZhbCwgcCk7CisJYnJlYWs7CisJCisgICAgICBjYXNlICdsJzoKKyAgICAgICAgQ0hFQ0tfTElNSVQoNCk7CisJbHZhbCA9IHZhX2FyZyhhcCwgbG9uZyk7CisJUFVUTE9ORyhsdmFsLCBwKTsKKwlicmVhazsKKwkKKyAgICAgIGNhc2UgJ2QnOgorICAgICAgICAvKiBnZXQgZG9tYWluLW5hbWUgYW5zd2VyIGFyZyBhbmQgc3RvcmUgaXQgaW4gUkRBVEEgZmllbGQgKi8KKyAgICAgICAgaWYgKG9mZnNldCkKKyAgICAgICAgICAqb2Zmc2V0ID0gcCAtICh1bnNpZ25lZCBjaGFyICopaGVhZGVyOworICAgICAgICBwID0gZG9fcmZjMTAzNV9uYW1lKHAsIHZhX2FyZyhhcCwgY2hhciAqKSwgbGltaXQpOworICAgICAgICBpZiAoIXApCisgICAgICAgICAgeworICAgICAgICAgICAgdmFfZW5kKGFwKTsKKyAgICAgICAgICAgIGdvdG8gdHJ1bmNhdGVkOworICAgICAgICAgIH0KKyAgICAgICAgQ0hFQ0tfTElNSVQoMSk7CisgICAgICAgICpwKysgPSAwOworCWJyZWFrOworCQorICAgICAgY2FzZSAndCc6CisJdXN2YWwgPSB2YV9hcmcoYXAsIGludCk7CisgICAgICAgIENIRUNLX0xJTUlUKHVzdmFsKTsKKwlzdmFsID0gdmFfYXJnKGFwLCBjaGFyICopOworCWlmICh1c3ZhbCAhPSAwKQorCSAgbWVtY3B5KHAsIHN2YWwsIHVzdmFsKTsKKwlwICs9IHVzdmFsOworCWJyZWFrOworCisgICAgICBjYXNlICd6JzoKKwlzdmFsID0gdmFfYXJnKGFwLCBjaGFyICopOworCXVzdmFsID0gc3ZhbCA/IHN0cmxlbihzdmFsKSA6IDA7CisJaWYgKHVzdmFsID4gMjU1KQorCSAgdXN2YWwgPSAyNTU7CisgICAgICAgIENIRUNLX0xJTUlUKHVzdmFsICsgMSk7CisJKnArKyA9ICh1bnNpZ25lZCBjaGFyKXVzdmFsOworCW1lbWNweShwLCBzdmFsLCB1c3ZhbCk7CisJcCArPSB1c3ZhbDsKKwlicmVhazsKKyAgICAgIH0KKworI3VuZGVmIENIRUNLX0xJTUlUCisgIHZhX2VuZChhcCk7CS8qIGNsZWFuIHVwIHZhcmlhYmxlIGFyZ3VtZW50IHBvaW50ZXIgKi8KKyAgCisgIGogPSBwIC0gc2F2IC0gMjsKKyAvKiB0aGlzIGhhcyBhbHJlYWR5IGJlZW4gY2hlY2tlZCBhZ2FpbnN0IGxpbWl0IGJlZm9yZSAqLworIFBVVFNIT1JUKGosIHNhdik7ICAgICAvKiBOb3csIHN0b3JlIHJlYWwgUkRMZW5ndGggKi8KKyAgCisgIC8qIGNoZWNrIGZvciBvdmVyZmxvdyBvZiBidWZmZXIgKi8KKyAgaWYgKGxpbWl0ICYmICgodW5zaWduZWQgY2hhciAqKWxpbWl0IC0gcCkgPCAwKQorICAgIHsKK3RydW5jYXRlZDoKKyAgICAgIGlmICh0cnVuY3ApCisJKnRydW5jcCA9IDE7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIAorICAqcHAgPSBwOworICByZXR1cm4gMTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY3JlY190dGwoc3RydWN0IGNyZWMgKmNyZWNwLCB0aW1lX3Qgbm93KQoreworICAvKiBSZXR1cm4gMCB0dGwgZm9yIERIQ1AgZW50cmllcywgd2hpY2ggbWlnaHQgY2hhbmdlCisgICAgIGJlZm9yZSB0aGUgbGVhc2UgZXhwaXJlcywgdW5sZXNzIGNvbmZpZ3VyZWQgb3RoZXJ3aXNlLiAqLworCisgIGlmIChjcmVjcC0+ZmxhZ3MgJiBGX0RIQ1ApCisgICAgeworICAgICAgaW50IGNvbmZfdHRsID0gZGFlbW9uLT51c2VfZGhjcF90dGwgPyBkYWVtb24tPmRoY3BfdHRsIDogZGFlbW9uLT5sb2NhbF90dGw7CisgICAgICAKKyAgICAgIC8qIEFwcGx5IGNlaWxpbmcgb2YgYWN0dWFsIGxlYXNlIGxlbmd0aCB0byBjb25maWd1cmVkIFRUTC4gKi8KKyAgICAgIGlmICghKGNyZWNwLT5mbGFncyAmIEZfSU1NT1JUQUwpICYmIChjcmVjcC0+dHRkIC0gbm93KSA8IGNvbmZfdHRsKQorCXJldHVybiBjcmVjcC0+dHRkIC0gbm93OworICAgICAgCisgICAgICByZXR1cm4gY29uZl90dGw7CisgICAgfQkgIAorICAKKyAgLyogSW1tb3J0YWwgZW50cmllcyBvdGhlciB0aGFuIERIQ1AgYXJlIGxvY2FsLCBhbmQgaG9sZCBUVEwgaW4gVFREIGZpZWxkLiAqLworICBpZiAoY3JlY3AtPmZsYWdzICYgRl9JTU1PUlRBTCkKKyAgICByZXR1cm4gY3JlY3AtPnR0ZDsKKworICAvKiBSZXR1cm4gdGhlIE1heCBUVEwgdmFsdWUgaWYgaXQgaXMgbG93ZXIgdGhhbiB0aGUgYWN0dWFsIFRUTCAqLworICBpZiAoZGFlbW9uLT5tYXhfdHRsID09IDAgfHwgKCh1bnNpZ25lZCkoY3JlY3AtPnR0ZCAtIG5vdykgPCBkYWVtb24tPm1heF90dGwpKQorICAgIHJldHVybiBjcmVjcC0+dHRkIC0gbm93OworICBlbHNlCisgICAgcmV0dXJuIGRhZW1vbi0+bWF4X3R0bDsKK30KKyAgCisKKy8qIHJldHVybiB6ZXJvIGlmIHdlIGNhbid0IGFuc3dlciBmcm9tIGNhY2hlLCBvciBwYWNrZXQgc2l6ZSBpZiB3ZSBjYW4gKi8KK3NpemVfdCBhbnN3ZXJfcmVxdWVzdChzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBjaGFyICpsaW1pdCwgc2l6ZV90IHFsZW4sICAKKwkJICAgICAgc3RydWN0IGluX2FkZHIgbG9jYWxfYWRkciwgc3RydWN0IGluX2FkZHIgbG9jYWxfbmV0bWFzaywgCisJCSAgICAgIHRpbWVfdCBub3csIGludCBhZF9yZXFkLCBpbnQgZG9fYml0LCBpbnQgaGF2ZV9wc2V1ZG9oZWFkZXIpIAoreworICBjaGFyICpuYW1lID0gZGFlbW9uLT5uYW1lYnVmZjsKKyAgdW5zaWduZWQgY2hhciAqcCwgKmFuc3A7CisgIHVuc2lnbmVkIGludCBxdHlwZSwgcWNsYXNzOworICBzdHJ1Y3QgYWxsX2FkZHIgYWRkcjsKKyAgaW50IG5hbWVvZmZzZXQ7CisgIHVuc2lnbmVkIHNob3J0IGZsYWc7CisgIGludCBxLCBhbnMsIGFuc2NvdW50ID0gMCwgYWRkbmNvdW50ID0gMDsKKyAgaW50IGRyeXJ1biA9IDA7CisgIHN0cnVjdCBjcmVjICpjcmVjcDsKKyAgaW50IG54ZG9tYWluID0gMCwgYXV0aCA9IDEsIHRydW5jID0gMCwgc2VjX2RhdGEgPSAxOworICBzdHJ1Y3QgbXhfc3J2X3JlY29yZCAqcmVjOworICBzaXplX3QgbGVuOworCisgIGlmIChudG9ocyhoZWFkZXItPmFuY291bnQpICE9IDAgfHwKKyAgICAgIG50b2hzKGhlYWRlci0+bnNjb3VudCkgIT0gMCB8fAorICAgICAgbnRvaHMoaGVhZGVyLT5xZGNvdW50KSA9PSAwIHx8IAorICAgICAgT1BDT0RFKGhlYWRlcikgIT0gUVVFUlkgKQorICAgIHJldHVybiAwOworICAKKyAgLyogRG9uJ3QgcmV0dXJuIEFEIHNldCBpZiBjaGVja2luZyBkaXNhYmxlZC4gKi8KKyAgaWYgKGhlYWRlci0+aGI0ICYgSEI0X0NEKQorICAgIHNlY19kYXRhID0gMDsKKyAgCisgIC8qIElmIHRoZXJlIGlzIGFuICBhZGRpdGlvbmFsIGRhdGEgc2VjdGlvbiB0aGVuIGl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkKKyAgICAgcGFydGlhbCByZXBsaWVzLCBzbyB3ZSBoYXZlIHRvIGRvIGEgZHJ5IHJ1biB0byBzZWUgaWYgd2UgY2FuIGFuc3dlcgorICAgICB0aGUgcXVlcnkuICovCisgIGlmIChudG9ocyhoZWFkZXItPmFyY291bnQpICE9IDApCisgICAgZHJ5cnVuID0gMTsKKworICBmb3IgKHJlYyA9IGRhZW1vbi0+bXhuYW1lczsgcmVjOyByZWMgPSByZWMtPm5leHQpCisgICAgcmVjLT5vZmZzZXQgPSAwOworICAKKyByZXJ1bjoKKyAgLyogZGV0ZXJtaW5lIGVuZCBvZiBxdWVzdGlvbiBzZWN0aW9uICh3ZSBwdXQgYW5zd2VycyB0aGVyZSkgKi8KKyAgaWYgKCEoYW5zcCA9IHNraXBfcXVlc3Rpb25zKGhlYWRlciwgcWxlbikpKQorICAgIHJldHVybiAwOyAvKiBiYWQgcGFja2V0ICovCisgICAKKyAgLyogbm93IHByb2Nlc3MgZWFjaCBxdWVzdGlvbiwgYW5zd2VycyBnbyBpbiBSUnMgYWZ0ZXIgdGhlIHF1ZXN0aW9uICovCisgIHAgPSAodW5zaWduZWQgY2hhciAqKShoZWFkZXIrMSk7CisKKyAgZm9yIChxID0gbnRvaHMoaGVhZGVyLT5xZGNvdW50KTsgcSAhPSAwOyBxLS0pCisgICAgeworICAgICAgLyogc2F2ZSBwb2ludGVyIHRvIG5hbWUgZm9yIGNvcHlpbmcgaW50byBhbnN3ZXJzICovCisgICAgICBuYW1lb2Zmc2V0ID0gcCAtICh1bnNpZ25lZCBjaGFyICopaGVhZGVyOworCisgICAgICAvKiBub3cgZXh0cmFjdCBuYW1lIGFzIC4tY29uY2F0ZW5hdGVkIHN0cmluZyBpbnRvIG5hbWUgKi8KKyAgICAgIGlmICghZXh0cmFjdF9uYW1lKGhlYWRlciwgcWxlbiwgJnAsIG5hbWUsIDEsIDQpKQorCXJldHVybiAwOyAvKiBiYWQgcGFja2V0ICovCisgICAgICAgICAgICAKKyAgICAgIEdFVFNIT1JUKHF0eXBlLCBwKTsgCisgICAgICBHRVRTSE9SVChxY2xhc3MsIHApOworCisgICAgICBhbnMgPSAwOyAvKiBoYXZlIHdlIGFuc3dlcmVkIHRoaXMgcXVlc3Rpb24gKi8KKyAgICAgIAorICAgICAgaWYgKHF0eXBlID09IFRfVFhUIHx8IHF0eXBlID09IFRfQU5ZKQorCXsKKwkgIHN0cnVjdCB0eHRfcmVjb3JkICp0OworCSAgZm9yKHQgPSBkYWVtb24tPnR4dDsgdCA7IHQgPSB0LT5uZXh0KQorCSAgICB7CisJICAgICAgaWYgKHQtPmNsYXNzID09IHFjbGFzcyAmJiBob3N0bmFtZV9pc2VxdWFsKG5hbWUsIHQtPm5hbWUpKQorCQl7CisJCSAgYW5zID0gMTsKKwkJICBpZiAoIWRyeXJ1bikKKwkJICAgIHsKKwkJICAgICAgdW5zaWduZWQgbG9uZyB0dGwgPSBkYWVtb24tPmxvY2FsX3R0bDsKKwkJICAgICAgaW50IG9rID0gMTsKKwkJICAgICAgbG9nX3F1ZXJ5KEZfQ09ORklHIHwgRl9SUk5BTUUsIG5hbWUsIE5VTEwsICI8VFhUPiIpOworI2lmbmRlZiBOT19JRAorCQkgICAgICAvKiBEeW5hbWljYWxseSBnZW5lcmF0ZSBzdGF0IHJlY29yZCAqLworCQkgICAgICBpZiAodC0+c3RhdCAhPSAwKQorCQkJeworCQkJICB0dGwgPSAwOworCQkJICBpZiAoIWNhY2hlX21ha2Vfc3RhdCh0KSkKKwkJCSAgICBvayA9IDA7CisJCQl9CisjZW5kaWYKKwkJICAgICAgaWYgKG9rICYmIGFkZF9yZXNvdXJjZV9yZWNvcmQoaGVhZGVyLCBsaW1pdCwgJnRydW5jLCBuYW1lb2Zmc2V0LCAmYW5zcCwgCisJCQkJCQkgICAgdHRsLCBOVUxMLAorCQkJCQkJICAgIFRfVFhULCB0LT5jbGFzcywgInQiLCB0LT5sZW4sIHQtPnR4dCkpCisJCQlhbnNjb3VudCsrOworCisJCSAgICB9CisJCX0KKwkgICAgfQorCX0KKworICAgICAgaWYgKHFjbGFzcyA9PSBDX0lOKQorCXsKKwkgIHN0cnVjdCB0eHRfcmVjb3JkICp0OworCisJICBmb3IgKHQgPSBkYWVtb24tPnJyOyB0OyB0ID0gdC0+bmV4dCkKKwkgICAgaWYgKCh0LT5jbGFzcyA9PSBxdHlwZSB8fCBxdHlwZSA9PSBUX0FOWSkgJiYgaG9zdG5hbWVfaXNlcXVhbChuYW1lLCB0LT5uYW1lKSkKKwkgICAgICB7CisJCWFucyA9IDE7CisJCXNlY19kYXRhID0gMDsKKwkJaWYgKCFkcnlydW4pCisJCSAgeworCQkgICAgbG9nX3F1ZXJ5KEZfQ09ORklHIHwgRl9SUk5BTUUsIG5hbWUsIE5VTEwsICI8UlI+Iik7CisJCSAgICBpZiAoYWRkX3Jlc291cmNlX3JlY29yZChoZWFkZXIsIGxpbWl0LCAmdHJ1bmMsIG5hbWVvZmZzZXQsICZhbnNwLCAKKwkJCQkJICAgIGRhZW1vbi0+bG9jYWxfdHRsLCBOVUxMLAorCQkJCQkgICAgdC0+Y2xhc3MsIENfSU4sICJ0IiwgdC0+bGVuLCB0LT50eHQpKQorCQkgICAgICBhbnNjb3VudCArKzsKKwkJICB9CisJICAgICAgfQorCQkKKwkgIGlmIChxdHlwZSA9PSBUX1BUUiB8fCBxdHlwZSA9PSBUX0FOWSkKKwkgICAgeworCSAgICAgIC8qIHNlZSBpZiBpdCdzIHcuei55LnouaW4tYWRkci5hcnBhIGZvcm1hdCAqLworCSAgICAgIGludCBpc19hcnBhID0gaW5fYXJwYV9uYW1lXzJfYWRkcihuYW1lLCAmYWRkcik7CisJICAgICAgc3RydWN0IHB0cl9yZWNvcmQgKnB0cjsKKwkgICAgICBzdHJ1Y3QgaW50ZXJmYWNlX25hbWUqIGludHIgPSBOVUxMOworCisJICAgICAgZm9yIChwdHIgPSBkYWVtb24tPnB0cjsgcHRyOyBwdHIgPSBwdHItPm5leHQpCisJCWlmIChob3N0bmFtZV9pc2VxdWFsKG5hbWUsIHB0ci0+bmFtZSkpCisJCSAgYnJlYWs7CisKKwkgICAgICBpZiAoaXNfYXJwYSA9PSBGX0lQVjQpCisJCWZvciAoaW50ciA9IGRhZW1vbi0+aW50X25hbWVzOyBpbnRyOyBpbnRyID0gaW50ci0+bmV4dCkKKwkJICB7CisJCSAgICBzdHJ1Y3QgYWRkcmxpc3QgKmFkZHJsaXN0OworCQkgICAgCisJCSAgICBmb3IgKGFkZHJsaXN0ID0gaW50ci0+YWRkcjsgYWRkcmxpc3Q7IGFkZHJsaXN0ID0gYWRkcmxpc3QtPm5leHQpCisJCSAgICAgIGlmICghKGFkZHJsaXN0LT5mbGFncyAmIEFERFJMSVNUX0lQVjYpICYmIGFkZHIuYWRkci5hZGRyNC5zX2FkZHIgPT0gYWRkcmxpc3QtPmFkZHIuYWRkci5hZGRyNC5zX2FkZHIpCisJCQlicmVhazsKKwkJICAgIAorCQkgICAgaWYgKGFkZHJsaXN0KQorCQkgICAgICBicmVhazsKKwkJICAgIGVsc2UKKwkJICAgICAgd2hpbGUgKGludHItPm5leHQgJiYgc3RyY21wKGludHItPmludHIsIGludHItPm5leHQtPmludHIpID09IDApCisJCQlpbnRyID0gaW50ci0+bmV4dDsKKwkJICB9CisjaWZkZWYgSEFWRV9JUFY2CisJICAgICAgZWxzZSBpZiAoaXNfYXJwYSA9PSBGX0lQVjYpCisJCWZvciAoaW50ciA9IGRhZW1vbi0+aW50X25hbWVzOyBpbnRyOyBpbnRyID0gaW50ci0+bmV4dCkKKwkJICB7CisJCSAgICBzdHJ1Y3QgYWRkcmxpc3QgKmFkZHJsaXN0OworCQkgICAgCisJCSAgICBmb3IgKGFkZHJsaXN0ID0gaW50ci0+YWRkcjsgYWRkcmxpc3Q7IGFkZHJsaXN0ID0gYWRkcmxpc3QtPm5leHQpCisJCSAgICAgIGlmICgoYWRkcmxpc3QtPmZsYWdzICYgQUREUkxJU1RfSVBWNikgJiYgSU42X0FSRV9BRERSX0VRVUFMKCZhZGRyLmFkZHIuYWRkcjYsICZhZGRybGlzdC0+YWRkci5hZGRyLmFkZHI2KSkKKwkJCWJyZWFrOworCQkgICAgCisJCSAgICBpZiAoYWRkcmxpc3QpCisJCSAgICAgIGJyZWFrOworCQkgICAgZWxzZQorCQkgICAgICB3aGlsZSAoaW50ci0+bmV4dCAmJiBzdHJjbXAoaW50ci0+aW50ciwgaW50ci0+bmV4dC0+aW50cikgPT0gMCkKKwkJCWludHIgPSBpbnRyLT5uZXh0OworCQkgIH0KKyNlbmRpZgorCSAgICAgIAorCSAgICAgIGlmIChpbnRyKQorCQl7CisJCSAgc2VjX2RhdGEgPSAwOworCQkgIGFucyA9IDE7CisJCSAgaWYgKCFkcnlydW4pCisJCSAgICB7CisJCSAgICAgIGxvZ19xdWVyeShpc19hcnBhIHwgRl9SRVZFUlNFIHwgRl9DT05GSUcsIGludHItPm5hbWUsICZhZGRyLCBOVUxMKTsKKwkJICAgICAgaWYgKGFkZF9yZXNvdXJjZV9yZWNvcmQoaGVhZGVyLCBsaW1pdCwgJnRydW5jLCBuYW1lb2Zmc2V0LCAmYW5zcCwgCisJCQkJCSAgICAgIGRhZW1vbi0+bG9jYWxfdHRsLCBOVUxMLAorCQkJCQkgICAgICBUX1BUUiwgQ19JTiwgImQiLCBpbnRyLT5uYW1lKSkKKwkJCWFuc2NvdW50Kys7CisJCSAgICB9CisJCX0KKwkgICAgICBlbHNlIGlmIChwdHIpCisJCXsKKwkJICBhbnMgPSAxOworCQkgIHNlY19kYXRhID0gMDsKKwkJICBpZiAoIWRyeXJ1bikKKwkJICAgIHsKKwkJICAgICAgbG9nX3F1ZXJ5KEZfQ09ORklHIHwgRl9SUk5BTUUsIG5hbWUsIE5VTEwsICI8UFRSPiIpOworCQkgICAgICBmb3IgKHB0ciA9IGRhZW1vbi0+cHRyOyBwdHI7IHB0ciA9IHB0ci0+bmV4dCkKKwkJCWlmIChob3N0bmFtZV9pc2VxdWFsKG5hbWUsIHB0ci0+bmFtZSkgJiYKKwkJCSAgICBhZGRfcmVzb3VyY2VfcmVjb3JkKGhlYWRlciwgbGltaXQsICZ0cnVuYywgbmFtZW9mZnNldCwgJmFuc3AsIAorCQkJCQkJZGFlbW9uLT5sb2NhbF90dGwsIE5VTEwsCisJCQkJCQlUX1BUUiwgQ19JTiwgImQiLCBwdHItPnB0cikpCisJCQkgIGFuc2NvdW50Kys7CisJCQkgCisJCSAgICB9CisJCX0KKwkgICAgICBlbHNlIGlmICgoY3JlY3AgPSBjYWNoZV9maW5kX2J5X2FkZHIoTlVMTCwgJmFkZHIsIG5vdywgaXNfYXJwYSkpKQorCQl7CisJCSAgLyogRG9uJ3QgdXNlIGNhY2hlIHdoZW4gRE5TU0VDIGRhdGEgcmVxdWlyZWQsIHVubGVzcyB3ZSBrbm93IHRoYXQKKwkJICAgICB0aGUgem9uZSBpcyB1bnNpZ25lZCwgd2hpY2ggaW1wbGllcyB0aGF0IHdlJ3JlIGRvaW5nCisJCSAgICAgdmFsaWRhdGlvbi4gKi8KKwkJICBpZiAoKGNyZWNwLT5mbGFncyAmIChGX0hPU1RTIHwgRl9ESENQIHwgRl9DT05GSUcpKSB8fCAKKwkJICAgICAgIWRvX2JpdCB8fCAKKwkJICAgICAgKG9wdGlvbl9ib29sKE9QVF9ETlNTRUNfVkFMSUQpICYmICEoY3JlY3AtPmZsYWdzICYgRl9ETlNTRUNPSykpKQorCQkgICAgeworCQkgICAgICBkbyAKKwkJCXsgCisJCQkgIC8qIGRvbid0IGFuc3dlciB3aWxkY2FyZCBxdWVyaWVzIHdpdGggZGF0YSBub3QgZnJvbSAvZXRjL2hvc3RzIG9yIGRoY3AgbGVhc2VzICovCisJCQkgIGlmIChxdHlwZSA9PSBUX0FOWSAmJiAhKGNyZWNwLT5mbGFncyAmIChGX0hPU1RTIHwgRl9ESENQKSkpCisJCQkgICAgY29udGludWU7CisJCQkgIAorCQkJICBpZiAoIShjcmVjcC0+ZmxhZ3MgJiBGX0ROU1NFQ09LKSkKKwkJCSAgICBzZWNfZGF0YSA9IDA7CisJCQkgICAKKwkJCSAgYW5zID0gMTsKKwkJCSAgIAorCQkJICBpZiAoY3JlY3AtPmZsYWdzICYgRl9ORUcpCisJCQkgICAgeworCQkJICAgICAgYXV0aCA9IDA7CisJCQkgICAgICBpZiAoY3JlY3AtPmZsYWdzICYgRl9OWERPTUFJTikKKwkJCQlueGRvbWFpbiA9IDE7CisJCQkgICAgICBpZiAoIWRyeXJ1bikKKwkJCQlsb2dfcXVlcnkoY3JlY3AtPmZsYWdzICYgfkZfRk9SV0FSRCwgbmFtZSwgJmFkZHIsIE5VTEwpOworCQkJICAgIH0KKwkJCSAgZWxzZQorCQkJICAgIHsKKwkJCSAgICAgIGlmICghKGNyZWNwLT5mbGFncyAmIChGX0hPU1RTIHwgRl9ESENQKSkpCisJCQkJYXV0aCA9IDA7CisJCQkgICAgICBpZiAoIWRyeXJ1bikKKwkJCQl7CisJCQkJICBsb2dfcXVlcnkoY3JlY3AtPmZsYWdzICYgfkZfRk9SV0FSRCwgY2FjaGVfZ2V0X25hbWUoY3JlY3ApLCAmYWRkciwgCisJCQkJCSAgICByZWNvcmRfc291cmNlKGNyZWNwLT51aWQpKTsKKwkJCQkgIAorCQkJCSAgaWYgKGFkZF9yZXNvdXJjZV9yZWNvcmQoaGVhZGVyLCBsaW1pdCwgJnRydW5jLCBuYW1lb2Zmc2V0LCAmYW5zcCwgCisJCQkJCQkJICBjcmVjX3R0bChjcmVjcCwgbm93KSwgTlVMTCwKKwkJCQkJCQkgIFRfUFRSLCBDX0lOLCAiZCIsIGNhY2hlX2dldF9uYW1lKGNyZWNwKSkpCisJCQkJICAgIGFuc2NvdW50Kys7CisJCQkJfQorCQkJICAgIH0KKwkJCX0gd2hpbGUgKChjcmVjcCA9IGNhY2hlX2ZpbmRfYnlfYWRkcihjcmVjcCwgJmFkZHIsIG5vdywgaXNfYXJwYSkpKTsKKwkJICAgIH0KKwkJfQorCSAgICAgIGVsc2UgaWYgKGlzX3Jldl9zeW50aChpc19hcnBhLCAmYWRkciwgbmFtZSkpCisJCXsKKwkJICBhbnMgPSAxOworCQkgIHNlY19kYXRhID0gMDsKKwkJICBpZiAoIWRyeXJ1bikKKwkJICAgIHsKKwkJICAgICAgbG9nX3F1ZXJ5KEZfQ09ORklHIHwgRl9SRVZFUlNFIHwgaXNfYXJwYSwgbmFtZSwgJmFkZHIsIE5VTEwpOyAKKwkJICAgICAgCisJCSAgICAgIGlmIChhZGRfcmVzb3VyY2VfcmVjb3JkKGhlYWRlciwgbGltaXQsICZ0cnVuYywgbmFtZW9mZnNldCwgJmFuc3AsIAorCQkJCQkgICAgICBkYWVtb24tPmxvY2FsX3R0bCwgTlVMTCwKKwkJCQkJICAgICAgVF9QVFIsIENfSU4sICJkIiwgbmFtZSkpCisJCQkgICAgICBhbnNjb3VudCsrOworCQkgICAgfQorCQl9CisJICAgICAgZWxzZSBpZiAob3B0aW9uX2Jvb2woT1BUX0JPR1VTUFJJVikgJiYgKAorI2lmZGVmIEhBVkVfSVBWNgorCQkgICAgICAgKGlzX2FycGEgPT0gRl9JUFY2ICYmIHByaXZhdGVfbmV0NigmYWRkci5hZGRyLmFkZHI2KSkgfHwKKyNlbmRpZgorCQkgICAgICAgKGlzX2FycGEgPT0gRl9JUFY0ICYmIHByaXZhdGVfbmV0KGFkZHIuYWRkci5hZGRyNCwgMSkpKSkKKwkJeworCQkgIHN0cnVjdCBzZXJ2ZXIgKnNlcnY7CisJCSAgdW5zaWduZWQgaW50IG5hbWVsZW4gPSBzdHJsZW4obmFtZSk7CisJCSAgY2hhciAqbmFtZWVuZCA9IG5hbWUgKyBuYW1lbGVuOworCisJCSAgLyogc2VlIGlmIGhhdmUgcmV2LXNlcnZlciBzZXQgKi8KKwkJICBmb3IgKHNlcnYgPSBkYWVtb24tPnNlcnZlcnM7IHNlcnY7IHNlcnYgPSBzZXJ2LT5uZXh0KQorCQkgICAgeworCQkgICAgICB1bnNpZ25lZCBpbnQgZG9tYWlubGVuOworCQkgICAgICBjaGFyICptYXRjaHN0YXJ0OworCisJCSAgICAgIGlmICgoc2Vydi0+ZmxhZ3MgJiAoU0VSVl9IQVNfRE9NQUlOIHwgU0VSVl9OT19BRERSKSkgIT0gU0VSVl9IQVNfRE9NQUlOKQorCQkgICAgICAgIGNvbnRpbnVlOworCisJCSAgICAgIGRvbWFpbmxlbiA9IHN0cmxlbihzZXJ2LT5kb21haW4pOworCQkgICAgICBpZiAoZG9tYWlubGVuID09IDAgfHwgZG9tYWlubGVuID4gbmFtZWxlbikKKwkJICAgICAgICBjb250aW51ZTsKKworCQkgICAgICBtYXRjaHN0YXJ0ID0gbmFtZWVuZCAtIGRvbWFpbmxlbjsKKwkJICAgICAgaWYgKGhvc3RuYW1lX2lzZXF1YWwobWF0Y2hzdGFydCwgc2Vydi0+ZG9tYWluKSAmJgorCQkgICAgICAgICAgKG5hbWVsZW4gPT0gZG9tYWlubGVuIHx8ICoobWF0Y2hzdGFydC0xKSA9PSAnLicgKSkKKwkJCWJyZWFrOworCQkgICAgfQorCisJCSAgLyogaWYgbm8gY29uZmlndXJlZCBzZXJ2ZXIsIG5vdCBpbiBjYWNoZSwgZW5hYmxlZCBhbmQgcHJpdmF0ZSBJUFY0IGFkZHJlc3MsIHJldHVybiBOWERPTUFJTiAqLworCQkgIGlmICghc2VydikKKwkJICAgIHsKKwkJICAgICAgYW5zID0gMTsKKwkJICAgICAgc2VjX2RhdGEgPSAwOworCQkgICAgICBueGRvbWFpbiA9IDE7CisJCSAgICAgIGlmICghZHJ5cnVuKQorCQkJbG9nX3F1ZXJ5KEZfQ09ORklHIHwgRl9SRVZFUlNFIHwgaXNfYXJwYSB8IEZfTkVHIHwgRl9OWERPTUFJTiwKKwkJCQkgIG5hbWUsICZhZGRyLCBOVUxMKTsKKwkJICAgIH0KKwkJfQorCSAgICB9CisJICAKKwkgIGZvciAoZmxhZyA9IEZfSVBWNDsgZmxhZzsgZmxhZyA9IChmbGFnID09IEZfSVBWNCkgPyBGX0lQVjYgOiAwKQorCSAgICB7CisJICAgICAgdW5zaWduZWQgc2hvcnQgdHlwZSA9IFRfQTsKKwkgICAgICBzdHJ1Y3QgaW50ZXJmYWNlX25hbWUgKmludHI7CisKKwkgICAgICBpZiAoZmxhZyA9PSBGX0lQVjYpCisjaWZkZWYgSEFWRV9JUFY2CisJCXR5cGUgPSBUX0FBQUE7CisjZWxzZQorCSAgICAgICAgYnJlYWs7CisjZW5kaWYKKwkgICAgICAKKwkgICAgICBpZiAocXR5cGUgIT0gdHlwZSAmJiBxdHlwZSAhPSBUX0FOWSkKKwkJY29udGludWU7CisJICAgICAgCisJICAgICAgLyogQ2hlY2sgZm9yICJBIGZvciBBIiAgcXVlcmllczsgYmUgcmF0aGVyIGNvbnNlcnZhdGl2ZSAKKwkJIGFib3V0IHdoYXQgbG9va3MgbGlrZSBkb3R0ZWQtcXVhZC4gICovCisJICAgICAgaWYgKHF0eXBlID09IFRfQSkKKwkJeworCQkgIGNoYXIgKmNwOworCQkgIHVuc2lnbmVkIGludCBpLCBhOworCQkgIGludCB4OworCisJCSAgZm9yIChjcCA9IG5hbWUsIGkgPSAwLCBhID0gMDsgKmNwOyBpKyspCisJCSAgICB7CisJCSAgICAgIGlmICghaXNkaWdpdCgodW5zaWduZWQgY2hhcikqY3ApIHx8ICh4ID0gc3RydG9sKGNwLCAmY3AsIDEwKSkgPiAyNTUpIAorCQkJeworCQkJICBpID0gNTsKKwkJCSAgYnJlYWs7CisJCQl9CisJCSAgICAgIAorCQkgICAgICBhID0gKGEgPDwgOCkgKyB4OworCQkgICAgICAKKwkJICAgICAgaWYgKCpjcCA9PSAnLicpIAorCQkJY3ArKzsKKwkJICAgIH0KKwkJICAKKwkJICBpZiAoaSA9PSA0KQorCQkgICAgeworCQkgICAgICBhbnMgPSAxOworCQkgICAgICBzZWNfZGF0YSA9IDA7CisJCSAgICAgIGlmICghZHJ5cnVuKQorCQkJeworCQkJICBhZGRyLmFkZHIuYWRkcjQuc19hZGRyID0gaHRvbmwoYSk7CisJCQkgIGxvZ19xdWVyeShGX0ZPUldBUkQgfCBGX0NPTkZJRyB8IEZfSVBWNCwgbmFtZSwgJmFkZHIsIE5VTEwpOworCQkJICBpZiAoYWRkX3Jlc291cmNlX3JlY29yZChoZWFkZXIsIGxpbWl0LCAmdHJ1bmMsIG5hbWVvZmZzZXQsICZhbnNwLCAKKwkJCQkJCSAgZGFlbW9uLT5sb2NhbF90dGwsIE5VTEwsIHR5cGUsIENfSU4sICI0IiwgJmFkZHIpKQorCQkJICAgIGFuc2NvdW50Kys7CisJCQl9CisJCSAgICAgIGNvbnRpbnVlOworCQkgICAgfQorCQl9CisKKwkgICAgICAvKiBpbnRlcmZhY2UgbmFtZSBzdHVmZiAqLworCSAgICBpbnRuYW1lX3Jlc3RhcnQ6CisJICAgICAgZm9yIChpbnRyID0gZGFlbW9uLT5pbnRfbmFtZXM7IGludHI7IGludHIgPSBpbnRyLT5uZXh0KQorCQlpZiAoaG9zdG5hbWVfaXNlcXVhbChuYW1lLCBpbnRyLT5uYW1lKSkKKwkJICBicmVhazsKKwkgICAgICAKKwkgICAgICBpZiAoaW50cikKKwkJeworCQkgIHN0cnVjdCBhZGRybGlzdCAqYWRkcmxpc3Q7CisJCSAgaW50IGdvdGl0ID0gMCwgbG9jYWxpc2UgPSAwOworCisJCSAgZW51bWVyYXRlX2ludGVyZmFjZXMoMCk7CisJCSAgICAKKwkJICAvKiBTZWUgaWYgYSBwdXRhdGl2ZSBhZGRyZXNzIGlzIG9uIHRoZSBuZXR3b3JrIGZyb20gd2hpY2ggd2UgcmVjZWl2ZWQKKwkJICAgICB0aGUgcXVlcnksIGlzIHNvIHdlJ2xsIGZpbHRlciBvdGhlciBhbnN3ZXJzLiAqLworCQkgIGlmIChsb2NhbF9hZGRyLnNfYWRkciAhPSAwICYmIG9wdGlvbl9ib29sKE9QVF9MT0NBTElTRSkgJiYgdHlwZSA9PSBUX0EpCisJCSAgICBmb3IgKGludHIgPSBkYWVtb24tPmludF9uYW1lczsgaW50cjsgaW50ciA9IGludHItPm5leHQpCisJCSAgICAgIGlmIChob3N0bmFtZV9pc2VxdWFsKG5hbWUsIGludHItPm5hbWUpKQorCQkJZm9yIChhZGRybGlzdCA9IGludHItPmFkZHI7IGFkZHJsaXN0OyBhZGRybGlzdCA9IGFkZHJsaXN0LT5uZXh0KQorI2lmZGVmIEhBVkVfSVBWNgorCQkJICBpZiAoIShhZGRybGlzdC0+ZmxhZ3MgJiBBRERSTElTVF9JUFY2KSkKKyNlbmRpZgorCQkJICAgIGlmIChpc19zYW1lX25ldCgqKChzdHJ1Y3QgaW5fYWRkciAqKSZhZGRybGlzdC0+YWRkciksIGxvY2FsX2FkZHIsIGxvY2FsX25ldG1hc2spKQorCQkJICAgICAgeworCQkJCWxvY2FsaXNlID0gMTsKKwkJCQlicmVhazsKKwkJCSAgICAgIH0KKwkJICAKKwkJICBmb3IgKGludHIgPSBkYWVtb24tPmludF9uYW1lczsgaW50cjsgaW50ciA9IGludHItPm5leHQpCisJCSAgICBpZiAoaG9zdG5hbWVfaXNlcXVhbChuYW1lLCBpbnRyLT5uYW1lKSkKKwkJICAgICAgeworCQkJZm9yIChhZGRybGlzdCA9IGludHItPmFkZHI7IGFkZHJsaXN0OyBhZGRybGlzdCA9IGFkZHJsaXN0LT5uZXh0KQorI2lmZGVmIEhBVkVfSVBWNgorCQkJICBpZiAoKChhZGRybGlzdC0+ZmxhZ3MgJiBBRERSTElTVF9JUFY2KSA/IFRfQUFBQSA6IFRfQSkgPT0gdHlwZSkKKyNlbmRpZgorCQkJICAgIHsKKwkJCSAgICAgIGlmIChsb2NhbGlzZSAmJiAKKwkJCQkgICFpc19zYW1lX25ldCgqKChzdHJ1Y3QgaW5fYWRkciAqKSZhZGRybGlzdC0+YWRkciksIGxvY2FsX2FkZHIsIGxvY2FsX25ldG1hc2spKQorCQkJCWNvbnRpbnVlOworCisjaWZkZWYgSEFWRV9JUFY2CisJCQkgICAgICBpZiAoYWRkcmxpc3QtPmZsYWdzICYgQUREUkxJU1RfUkVWT05MWSkKKwkJCQljb250aW51ZTsKKyNlbmRpZgkKKwkJCSAgICAgIGFucyA9IDE7CQorCQkJICAgICAgc2VjX2RhdGEgPSAwOworCQkJICAgICAgaWYgKCFkcnlydW4pCisJCQkJeworCQkJCSAgZ290aXQgPSAxOworCQkJCSAgbG9nX3F1ZXJ5KEZfRk9SV0FSRCB8IEZfQ09ORklHIHwgZmxhZywgbmFtZSwgJmFkZHJsaXN0LT5hZGRyLCBOVUxMKTsKKwkJCQkgIGlmIChhZGRfcmVzb3VyY2VfcmVjb3JkKGhlYWRlciwgbGltaXQsICZ0cnVuYywgbmFtZW9mZnNldCwgJmFuc3AsIAorCQkJCQkJCSAgZGFlbW9uLT5sb2NhbF90dGwsIE5VTEwsIHR5cGUsIENfSU4sIAorCQkJCQkJCSAgdHlwZSA9PSBUX0EgPyAiNCIgOiAiNiIsICZhZGRybGlzdC0+YWRkcikpCisJCQkJICAgIGFuc2NvdW50Kys7CisJCQkJfQorCQkJICAgIH0KKwkJICAgICAgfQorCQkgIAorCQkgIGlmICghZHJ5cnVuICYmICFnb3RpdCkKKwkJICAgIGxvZ19xdWVyeShGX0ZPUldBUkQgfCBGX0NPTkZJRyB8IGZsYWcgfCBGX05FRywgbmFtZSwgTlVMTCwgTlVMTCk7CisJCSAgICAgCisJCSAgY29udGludWU7CisJCX0KKworCSAgICBjbmFtZV9yZXN0YXJ0OgorCSAgICAgIGlmICgoY3JlY3AgPSBjYWNoZV9maW5kX2J5X25hbWUoTlVMTCwgbmFtZSwgbm93LCBmbGFnIHwgRl9DTkFNRSB8IChkcnlydW4gPyBGX05PX1JSIDogMCkpKSkKKwkJeworCQkgIGludCBsb2NhbGlzZSA9IDA7CisJCSAgCisJCSAgLyogU2VlIGlmIGEgcHV0YXRpdmUgYWRkcmVzcyBpcyBvbiB0aGUgbmV0d29yayBmcm9tIHdoaWNoIHdlIHJlY2VpdmVkCisJCSAgICAgdGhlIHF1ZXJ5LCBpcyBzbyB3ZSdsbCBmaWx0ZXIgb3RoZXIgYW5zd2Vycy4gKi8KKwkJICBpZiAobG9jYWxfYWRkci5zX2FkZHIgIT0gMCAmJiBvcHRpb25fYm9vbChPUFRfTE9DQUxJU0UpICYmIGZsYWcgPT0gRl9JUFY0KQorCQkgICAgeworCQkgICAgICBzdHJ1Y3QgY3JlYyAqc2F2ZSA9IGNyZWNwOworCQkgICAgICBkbyB7CisJCQlpZiAoKGNyZWNwLT5mbGFncyAmIEZfSE9TVFMpICYmCisJCQkgICAgaXNfc2FtZV9uZXQoKigoc3RydWN0IGluX2FkZHIgKikmY3JlY3AtPmFkZHIpLCBsb2NhbF9hZGRyLCBsb2NhbF9uZXRtYXNrKSkKKwkJCSAgeworCQkJICAgIGxvY2FsaXNlID0gMTsKKwkJCSAgICBicmVhazsKKwkJCSAgfSAKKwkJCX0gd2hpbGUgKChjcmVjcCA9IGNhY2hlX2ZpbmRfYnlfbmFtZShjcmVjcCwgbmFtZSwgbm93LCBmbGFnIHwgRl9DTkFNRSkpKTsKKwkJICAgICAgY3JlY3AgPSBzYXZlOworCQkgICAgfQorCisJCSAgLyogSWYgdGhlIGNsaWVudCBhc2tlZCBmb3IgRE5TU0VDICBkb24ndCB1c2UgY2FjaGVkIGRhdGEuICovCisJCSAgaWYgKChjcmVjcC0+ZmxhZ3MgJiAoRl9IT1NUUyB8IEZfREhDUCB8IEZfQ09ORklHKSkgfHwgIWRvX2JpdCB8fCAhKGNyZWNwLT5mbGFncyAmIEZfRE5TU0VDT0spKQorCQkgICAgZG8KKwkJICAgICAgeyAKKwkJCS8qIGRvbid0IGFuc3dlciB3aWxkY2FyZCBxdWVyaWVzIHdpdGggZGF0YSBub3QgZnJvbSAvZXRjL2hvc3RzCisJCQkgICBvciBESENQIGxlYXNlcyAqLworCQkJaWYgKHF0eXBlID09IFRfQU5ZICYmICEoY3JlY3AtPmZsYWdzICYgKEZfSE9TVFMgfCBGX0RIQ1AgfCBGX0NPTkZJRykpKQorCQkJICBicmVhazsKKwkJCQorCQkJaWYgKCEoY3JlY3AtPmZsYWdzICYgRl9ETlNTRUNPSykpCisJCQkgIHNlY19kYXRhID0gMDsKKwkJCQorCQkJaWYgKGNyZWNwLT5mbGFncyAmIEZfQ05BTUUpCisJCQkgIHsKKwkJCSAgICBjaGFyICpjbmFtZV90YXJnZXQgPSBjYWNoZV9nZXRfY25hbWVfdGFyZ2V0KGNyZWNwKTsKKwkJCSAgICAKKwkJCSAgICBpZiAoIWRyeXJ1bikKKwkJCSAgICAgIHsKKwkJCQlsb2dfcXVlcnkoY3JlY3AtPmZsYWdzLCBuYW1lLCBOVUxMLCByZWNvcmRfc291cmNlKGNyZWNwLT51aWQpKTsKKwkJCQlpZiAoYWRkX3Jlc291cmNlX3JlY29yZChoZWFkZXIsIGxpbWl0LCAmdHJ1bmMsIG5hbWVvZmZzZXQsICZhbnNwLCAKKwkJCQkJCQljcmVjX3R0bChjcmVjcCwgbm93KSwgJm5hbWVvZmZzZXQsCisJCQkJCQkJVF9DTkFNRSwgQ19JTiwgImQiLCBjbmFtZV90YXJnZXQpKQorCQkJCSAgYW5zY291bnQrKzsKKwkJCSAgICAgIH0KKwkJCSAgICAKKwkJCSAgICBzdHJjcHkobmFtZSwgY25hbWVfdGFyZ2V0KTsKKwkJCSAgICAvKiBjaGVjayBpZiB0YXJnZXQgaW50ZXJmYWNlX25hbWUgKi8KKwkJCSAgICBpZiAoY3JlY3AtPmFkZHIuY25hbWUudWlkID09IFNSQ19JTlRFUkZBQ0UpCisJCQkgICAgICBnb3RvIGludG5hbWVfcmVzdGFydDsKKwkJCSAgICBlbHNlCisJCQkgICAgICBnb3RvIGNuYW1lX3Jlc3RhcnQ7CisJCQkgIH0KKwkJCQorCQkJaWYgKGNyZWNwLT5mbGFncyAmIEZfTkVHKQorCQkJICB7CisJCQkgICAgYW5zID0gMTsKKwkJCSAgICBhdXRoID0gMDsKKwkJCSAgICBpZiAoY3JlY3AtPmZsYWdzICYgRl9OWERPTUFJTikKKwkJCSAgICAgIG54ZG9tYWluID0gMTsKKwkJCSAgICBpZiAoIWRyeXJ1bikKKwkJCSAgICAgIGxvZ19xdWVyeShjcmVjcC0+ZmxhZ3MsIG5hbWUsIE5VTEwsIE5VTEwpOworCQkJICB9CisJCQllbHNlIAorCQkJICB7CisJCQkgICAgLyogSWYgd2UgYXJlIHJldHVybmluZyBsb2NhbCBhbnN3ZXJzIGRlcGVuZGluZyBvbiBuZXR3b3JrLAorCQkJICAgICAgIGZpbHRlciBoZXJlLiAqLworCQkJICAgIGlmIChsb2NhbGlzZSAmJiAKKwkJCQkoY3JlY3AtPmZsYWdzICYgRl9IT1NUUykgJiYKKwkJCQkhaXNfc2FtZV9uZXQoKigoc3RydWN0IGluX2FkZHIgKikmY3JlY3AtPmFkZHIpLCBsb2NhbF9hZGRyLCBsb2NhbF9uZXRtYXNrKSkKKwkJCSAgICAgIGNvbnRpbnVlOworCQkJICAgIAorCQkJICAgIGlmICghKGNyZWNwLT5mbGFncyAmIChGX0hPU1RTIHwgRl9ESENQKSkpCisJCQkgICAgICBhdXRoID0gMDsKKwkJCSAgICAKKwkJCSAgICBhbnMgPSAxOworCQkJICAgIGlmICghZHJ5cnVuKQorCQkJICAgICAgeworCQkJCWxvZ19xdWVyeShjcmVjcC0+ZmxhZ3MgJiB+Rl9SRVZFUlNFLCBuYW1lLCAmY3JlY3AtPmFkZHIuYWRkciwKKwkJCQkJICByZWNvcmRfc291cmNlKGNyZWNwLT51aWQpKTsKKwkJCQkKKwkJCQlpZiAoYWRkX3Jlc291cmNlX3JlY29yZChoZWFkZXIsIGxpbWl0LCAmdHJ1bmMsIG5hbWVvZmZzZXQsICZhbnNwLCAKKwkJCQkJCQljcmVjX3R0bChjcmVjcCwgbm93KSwgTlVMTCwgdHlwZSwgQ19JTiwgCisJCQkJCQkJdHlwZSA9PSBUX0EgPyAiNCIgOiAiNiIsICZjcmVjcC0+YWRkcikpCisJCQkJICBhbnNjb3VudCsrOworCQkJICAgICAgfQorCQkJICB9CisJCSAgICAgIH0gd2hpbGUgKChjcmVjcCA9IGNhY2hlX2ZpbmRfYnlfbmFtZShjcmVjcCwgbmFtZSwgbm93LCBmbGFnIHwgRl9DTkFNRSkpKTsKKwkJfQorCSAgICAgIGVsc2UgaWYgKGlzX25hbWVfc3ludGhldGljKGZsYWcsIG5hbWUsICZhZGRyKSkKKwkJeworCQkgIGFucyA9IDE7CisJCSAgaWYgKCFkcnlydW4pCisJCSAgICB7CisJCSAgICAgIGxvZ19xdWVyeShGX0ZPUldBUkQgfCBGX0NPTkZJRyB8IGZsYWcsIG5hbWUsICZhZGRyLCBOVUxMKTsKKwkJICAgICAgaWYgKGFkZF9yZXNvdXJjZV9yZWNvcmQoaGVhZGVyLCBsaW1pdCwgJnRydW5jLCBuYW1lb2Zmc2V0LCAmYW5zcCwgCisJCQkJCSAgICAgIGRhZW1vbi0+bG9jYWxfdHRsLCBOVUxMLCB0eXBlLCBDX0lOLCB0eXBlID09IFRfQSA/ICI0IiA6ICI2IiwgJmFkZHIpKQorCQkJYW5zY291bnQrKzsKKwkJICAgIH0KKwkJfQorCSAgICB9CisKKwkgIGlmIChxdHlwZSA9PSBUX0NOQU1FIHx8IHF0eXBlID09IFRfQU5ZKQorCSAgICB7CisJICAgICAgaWYgKChjcmVjcCA9IGNhY2hlX2ZpbmRfYnlfbmFtZShOVUxMLCBuYW1lLCBub3csIEZfQ05BTUUpKSAmJgorCQkgIChxdHlwZSA9PSBUX0NOQU1FIHx8IChjcmVjcC0+ZmxhZ3MgJiAoRl9IT1NUUyB8IEZfREhDUCB8IEZfQ09ORklHICB8IChkcnlydW4gPyBGX05PX1JSIDogMCkpKSkpCisJCXsKKwkJICBpZiAoIShjcmVjcC0+ZmxhZ3MgJiBGX0ROU1NFQ09LKSkKKwkJICAgIHNlY19kYXRhID0gMDsKKwkJICAKKwkJICBhbnMgPSAxOworCQkgIGlmICghZHJ5cnVuKQorCQkgICAgeworCQkgICAgICBsb2dfcXVlcnkoY3JlY3AtPmZsYWdzLCBuYW1lLCBOVUxMLCByZWNvcmRfc291cmNlKGNyZWNwLT51aWQpKTsKKwkJICAgICAgaWYgKGFkZF9yZXNvdXJjZV9yZWNvcmQoaGVhZGVyLCBsaW1pdCwgJnRydW5jLCBuYW1lb2Zmc2V0LCAmYW5zcCwgCisJCQkJCSAgICAgIGNyZWNfdHRsKGNyZWNwLCBub3cpLCAmbmFtZW9mZnNldCwKKwkJCQkJICAgICAgVF9DTkFNRSwgQ19JTiwgImQiLCBjYWNoZV9nZXRfY25hbWVfdGFyZ2V0KGNyZWNwKSkpCisJCQlhbnNjb3VudCsrOworCQkgICAgfQorCQl9CisJICAgIH0KKworCSAgaWYgKHF0eXBlID09IFRfTVggfHwgcXR5cGUgPT0gVF9BTlkpCisJICAgIHsKKwkgICAgICBpbnQgZm91bmQgPSAwOworCSAgICAgIGZvciAocmVjID0gZGFlbW9uLT5teG5hbWVzOyByZWM7IHJlYyA9IHJlYy0+bmV4dCkKKwkJaWYgKCFyZWMtPmlzc3J2ICYmIGhvc3RuYW1lX2lzZXF1YWwobmFtZSwgcmVjLT5uYW1lKSkKKwkJICB7CisJCSAgYW5zID0gZm91bmQgPSAxOworCQkgIGlmICghZHJ5cnVuKQorCQkgICAgeworCQkgICAgICBpbnQgb2Zmc2V0OworCQkgICAgICBsb2dfcXVlcnkoRl9DT05GSUcgfCBGX1JSTkFNRSwgbmFtZSwgTlVMTCwgIjxNWD4iKTsKKwkJICAgICAgaWYgKGFkZF9yZXNvdXJjZV9yZWNvcmQoaGVhZGVyLCBsaW1pdCwgJnRydW5jLCBuYW1lb2Zmc2V0LCAmYW5zcCwgZGFlbW9uLT5sb2NhbF90dGwsCisJCQkJCSAgICAgICZvZmZzZXQsIFRfTVgsIENfSU4sICJzZCIsIHJlYy0+d2VpZ2h0LCByZWMtPnRhcmdldCkpCisJCQl7CisJCQkgIGFuc2NvdW50Kys7CisJCQkgIGlmIChyZWMtPnRhcmdldCkKKwkJCSAgICByZWMtPm9mZnNldCA9IG9mZnNldDsKKwkJCX0KKwkJICAgIH0KKwkJICB9CisJICAgICAgCisJICAgICAgaWYgKCFmb3VuZCAmJiAob3B0aW9uX2Jvb2woT1BUX1NFTEZNWCkgfHwgb3B0aW9uX2Jvb2woT1BUX0xPQ0FMTVgpKSAmJiAKKwkJICBjYWNoZV9maW5kX2J5X25hbWUoTlVMTCwgbmFtZSwgbm93LCBGX0hPU1RTIHwgRl9ESENQIHwgRl9OT19SUikpCisJCXsgCisJCSAgYW5zID0gMTsKKwkJICBpZiAoIWRyeXJ1bikKKwkJICAgIHsKKwkJICAgICAgbG9nX3F1ZXJ5KEZfQ09ORklHIHwgRl9SUk5BTUUsIG5hbWUsIE5VTEwsICI8TVg+Iik7CisJCSAgICAgIGlmIChhZGRfcmVzb3VyY2VfcmVjb3JkKGhlYWRlciwgbGltaXQsICZ0cnVuYywgbmFtZW9mZnNldCwgJmFuc3AsIGRhZW1vbi0+bG9jYWxfdHRsLCBOVUxMLCAKKwkJCQkJICAgICAgVF9NWCwgQ19JTiwgInNkIiwgMSwgCisJCQkJCSAgICAgIG9wdGlvbl9ib29sKE9QVF9TRUxGTVgpID8gbmFtZSA6IGRhZW1vbi0+bXh0YXJnZXQpKQorCQkJYW5zY291bnQrKzsKKwkJICAgIH0KKwkJfQorCSAgICB9CisJICAJICAKKwkgIGlmIChxdHlwZSA9PSBUX1NSViB8fCBxdHlwZSA9PSBUX0FOWSkKKwkgICAgeworCSAgICAgIGludCBmb3VuZCA9IDA7CisJICAgICAgc3RydWN0IG14X3Nydl9yZWNvcmQgKm1vdmUgPSBOVUxMLCAqKnVwID0gJmRhZW1vbi0+bXhuYW1lczsKKworCSAgICAgIGZvciAocmVjID0gZGFlbW9uLT5teG5hbWVzOyByZWM7IHJlYyA9IHJlYy0+bmV4dCkKKwkJaWYgKHJlYy0+aXNzcnYgJiYgaG9zdG5hbWVfaXNlcXVhbChuYW1lLCByZWMtPm5hbWUpKQorCQkgIHsKKwkJICAgIGZvdW5kID0gYW5zID0gMTsKKwkJICAgIGlmICghZHJ5cnVuKQorCQkgICAgICB7CisJCQlpbnQgb2Zmc2V0OworCQkJbG9nX3F1ZXJ5KEZfQ09ORklHIHwgRl9SUk5BTUUsIG5hbWUsIE5VTEwsICI8U1JWPiIpOworCQkJaWYgKGFkZF9yZXNvdXJjZV9yZWNvcmQoaGVhZGVyLCBsaW1pdCwgJnRydW5jLCBuYW1lb2Zmc2V0LCAmYW5zcCwgZGFlbW9uLT5sb2NhbF90dGwsIAorCQkJCQkJJm9mZnNldCwgVF9TUlYsIENfSU4sICJzc3NkIiwgCisJCQkJCQlyZWMtPnByaW9yaXR5LCByZWMtPndlaWdodCwgcmVjLT5zcnZwb3J0LCByZWMtPnRhcmdldCkpCisJCQkgIHsKKwkJCSAgICBhbnNjb3VudCsrOworCQkJICAgIGlmIChyZWMtPnRhcmdldCkKKwkJCSAgICAgIHJlYy0+b2Zmc2V0ID0gb2Zmc2V0OworCQkJICB9CisJCSAgICAgIH0KKwkJICAgIAorCQkgICAgLyogdW5saW5rIGZpcnN0IFNSViByZWNvcmQgZm91bmQgKi8KKwkJICAgIGlmICghbW92ZSkKKwkJICAgICAgeworCQkJbW92ZSA9IHJlYzsKKwkJCSp1cCA9IHJlYy0+bmV4dDsKKwkJICAgICAgfQorCQkgICAgZWxzZQorCQkgICAgICB1cCA9ICZyZWMtPm5leHQ7ICAgICAgCisJCSAgfQorCQllbHNlCisJCSAgdXAgPSAmcmVjLT5uZXh0OworCisJICAgICAgLyogcHV0IGZpcnN0IFNSViByZWNvcmQgYmFjayBhdCB0aGUgZW5kLiAqLworCSAgICAgIGlmIChtb3ZlKQorCQl7CisJCSAgKnVwID0gbW92ZTsKKwkJICBtb3ZlLT5uZXh0ID0gTlVMTDsKKwkJfQorCSAgICAgIAorCSAgICAgIGlmICghZm91bmQgJiYgb3B0aW9uX2Jvb2woT1BUX0ZJTFRFUikgJiYgKHF0eXBlID09IFRfU1JWIHx8IChxdHlwZSA9PSBUX0FOWSAmJiBzdHJjaHIobmFtZSwgJ18nKSkpKQorCQl7CisJCSAgYW5zID0gMTsKKwkJICBpZiAoIWRyeXJ1bikKKwkJICAgIGxvZ19xdWVyeShGX0NPTkZJRyB8IEZfTkVHLCBuYW1lLCBOVUxMLCBOVUxMKTsKKwkJfQorCSAgICB9CisKKwkgIGlmIChxdHlwZSA9PSBUX05BUFRSIHx8IHF0eXBlID09IFRfQU5ZKQorCSAgICB7CisJICAgICAgc3RydWN0IG5hcHRyICpuYTsKKwkgICAgICBmb3IgKG5hID0gZGFlbW9uLT5uYXB0cjsgbmE7IG5hID0gbmEtPm5leHQpCisJCWlmIChob3N0bmFtZV9pc2VxdWFsKG5hbWUsIG5hLT5uYW1lKSkKKwkJICB7CisJCSAgICBhbnMgPSAxOworCQkgICAgaWYgKCFkcnlydW4pCisJCSAgICAgIHsKKwkJCWxvZ19xdWVyeShGX0NPTkZJRyB8IEZfUlJOQU1FLCBuYW1lLCBOVUxMLCAiPE5BUFRSPiIpOworCQkJaWYgKGFkZF9yZXNvdXJjZV9yZWNvcmQoaGVhZGVyLCBsaW1pdCwgJnRydW5jLCBuYW1lb2Zmc2V0LCAmYW5zcCwgZGFlbW9uLT5sb2NhbF90dGwsIAorCQkJCQkJTlVMTCwgVF9OQVBUUiwgQ19JTiwgInNzenp6ZCIsIAorCQkJCQkJbmEtPm9yZGVyLCBuYS0+cHJlZiwgbmEtPmZsYWdzLCBuYS0+c2VydmljZXMsIG5hLT5yZWdleHAsIG5hLT5yZXBsYWNlKSkKKwkJCSAgYW5zY291bnQrKzsKKwkJICAgICAgfQorCQkgIH0KKwkgICAgfQorCSAgCisJICBpZiAocXR5cGUgPT0gVF9NQUlMQikKKwkgICAgYW5zID0gMSwgbnhkb21haW4gPSAxOworCisJICBpZiAocXR5cGUgPT0gVF9TT0EgJiYgb3B0aW9uX2Jvb2woT1BUX0ZJTFRFUikpCisJICAgIHsKKwkgICAgICBhbnMgPSAxOyAKKwkgICAgICBpZiAoIWRyeXJ1bikKKwkJbG9nX3F1ZXJ5KEZfQ09ORklHIHwgRl9ORUcsIG5hbWUsICZhZGRyLCBOVUxMKTsKKwkgICAgfQorCX0KKworICAgICAgaWYgKCFhbnMpCisJcmV0dXJuIDA7IC8qIGZhaWxlZCB0byBhbnN3ZXIgYSBxdWVzdGlvbiAqLworICAgIH0KKyAgCisgIGlmIChkcnlydW4pCisgICAgeworICAgICAgZHJ5cnVuID0gMDsKKyAgICAgIGdvdG8gcmVydW47CisgICAgfQorICAKKyAgLyogY3JlYXRlIGFuIGFkZGl0aW9uYWwgZGF0YSBzZWN0aW9uLCBmb3Igc3R1ZmYgaW4gU1JWIGFuZCBNWCByZWNvcmQgcmVwbGllcy4gKi8KKyAgZm9yIChyZWMgPSBkYWVtb24tPm14bmFtZXM7IHJlYzsgcmVjID0gcmVjLT5uZXh0KQorICAgIGlmIChyZWMtPm9mZnNldCAhPSAwKQorICAgICAgeworCS8qIHNxdWFzaCBkdXBlcyAqLworCXN0cnVjdCBteF9zcnZfcmVjb3JkICp0bXA7CisJZm9yICh0bXAgPSByZWMtPm5leHQ7IHRtcDsgdG1wID0gdG1wLT5uZXh0KQorCSAgaWYgKHRtcC0+b2Zmc2V0ICE9IDAgJiYgaG9zdG5hbWVfaXNlcXVhbChyZWMtPnRhcmdldCwgdG1wLT50YXJnZXQpKQorCSAgICB0bXAtPm9mZnNldCA9IDA7CisJCisJY3JlY3AgPSBOVUxMOworCXdoaWxlICgoY3JlY3AgPSBjYWNoZV9maW5kX2J5X25hbWUoY3JlY3AsIHJlYy0+dGFyZ2V0LCBub3csIEZfSVBWNCB8IEZfSVBWNikpKQorCSAgeworI2lmZGVmIEhBVkVfSVBWNgorCSAgICBpbnQgdHlwZSA9ICBjcmVjcC0+ZmxhZ3MgJiBGX0lQVjQgPyBUX0EgOiBUX0FBQUE7CisjZWxzZQorCSAgICBpbnQgdHlwZSA9IFRfQTsKKyNlbmRpZgorCSAgICBpZiAoY3JlY3AtPmZsYWdzICYgRl9ORUcpCisJICAgICAgY29udGludWU7CisKKwkgICAgaWYgKGFkZF9yZXNvdXJjZV9yZWNvcmQoaGVhZGVyLCBsaW1pdCwgTlVMTCwgcmVjLT5vZmZzZXQsICZhbnNwLCAKKwkJCQkgICAgY3JlY190dGwoY3JlY3AsIG5vdyksIE5VTEwsIHR5cGUsIENfSU4sIAorCQkJCSAgICBjcmVjcC0+ZmxhZ3MgJiBGX0lQVjQgPyAiNCIgOiAiNiIsICZjcmVjcC0+YWRkcikpCisJICAgICAgYWRkbmNvdW50Kys7CisJICB9CisgICAgICB9CisgIAorICAvKiBkb25lIGFsbCBxdWVzdGlvbnMsIHNldCB1cCBoZWFkZXIgYW5kIHJldHVybiBsZW5ndGggb2YgcmVzdWx0ICovCisgIC8qIGNsZWFyIGF1dGhvcml0YXRpdmUgYW5kIHRydW5jYXRlZCBmbGFncywgc2V0IFFSIGZsYWcgKi8KKyAgaGVhZGVyLT5oYjMgPSAoaGVhZGVyLT5oYjMgJiB+KEhCM19BQSB8IEhCM19UQykpIHwgSEIzX1FSOworICAvKiBzZXQgUkEgZmxhZyAqLworICBoZWFkZXItPmhiNCB8PSBIQjRfUkE7CisgICAKKyAgLyogYXV0aG9yaXRhdGl2ZSAtIG9ubHkgaG9zdHMgYW5kIERIQ1AgZGVyaXZlZCBuYW1lcy4gKi8KKyAgaWYgKGF1dGgpCisgICAgaGVhZGVyLT5oYjMgfD0gSEIzX0FBOworICAKKyAgLyogdHJ1bmNhdGlvbiAqLworICBpZiAodHJ1bmMpCisgICAgaGVhZGVyLT5oYjMgfD0gSEIzX1RDOworICAKKyAgaWYgKG54ZG9tYWluKQorICAgIFNFVF9SQ09ERShoZWFkZXIsIE5YRE9NQUlOKTsKKyAgZWxzZQorICAgIFNFVF9SQ09ERShoZWFkZXIsIE5PRVJST1IpOyAvKiBubyBlcnJvciAqLworICBoZWFkZXItPmFuY291bnQgPSBodG9ucyhhbnNjb3VudCk7CisgIGhlYWRlci0+bnNjb3VudCA9IGh0b25zKDApOworICBoZWFkZXItPmFyY291bnQgPSBodG9ucyhhZGRuY291bnQpOworCisgIGxlbiA9IGFuc3AgLSAodW5zaWduZWQgY2hhciAqKWhlYWRlcjsKKyAgCisgIC8qIEFkdmVydGlzZSBvdXIgcGFja2V0IHNpemUgbGltaXQgaW4gb3VyIHJlcGx5ICovCisgIGlmIChoYXZlX3BzZXVkb2hlYWRlcikKKyAgICBsZW4gPSBhZGRfcHNldWRvaGVhZGVyKGhlYWRlciwgbGVuLCAodW5zaWduZWQgY2hhciAqKWxpbWl0LCBkYWVtb24tPmVkbnNfcGt0c3osIDAsIE5VTEwsIDAsIGRvX2JpdCwgMCk7CisgIAorICBpZiAoYWRfcmVxZCAmJiBzZWNfZGF0YSkKKyAgICBoZWFkZXItPmhiNCB8PSBIQjRfQUQ7CisgIGVsc2UKKyAgICBoZWFkZXItPmhiNCAmPSB+SEI0X0FEOworICAKKyAgcmV0dXJuIGxlbjsKK30KZGlmZiAtLWdpdCBhL3NyYy9yZmMyMTMxLmMgYi9zcmMvcmZjMjEzMS5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIyOTQxZDkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcmZjMjEzMS5jCkBAIC0wLDAgKzEsMjY3MiBAQAorLyogZG5zbWFzcSBpcyBDb3B5cmlnaHQgKGMpIDIwMDAtMjAxNyBTaW1vbiBLZWxsZXkKKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgZGF0ZWQgSnVuZSwgMTk5MSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgdmVyc2lvbiAzIGRhdGVkIDI5IEp1bmUsIDIwMDcuCisgCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisKKyNpbmNsdWRlICJkbnNtYXNxLmgiCisKKyNpZmRlZiBIQVZFX0RIQ1AKKworI2RlZmluZSBvcHRpb25fbGVuKG9wdCkgKChpbnQpKCgodW5zaWduZWQgY2hhciAqKShvcHQpKVsxXSkpCisjZGVmaW5lIG9wdGlvbl9wdHIob3B0LCBpKSAoKHZvaWQgKikmKCgodW5zaWduZWQgY2hhciAqKShvcHQpKVsydSsodW5zaWduZWQgaW50KShpKV0pKQorCisjaWZkZWYgSEFWRV9TQ1JJUFQKK3N0YXRpYyB2b2lkIGFkZF9leHRyYWRhdGFfb3B0KHN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZSwgdW5zaWduZWQgY2hhciAqb3B0KTsKKyNlbmRpZgorCitzdGF0aWMgaW50IHNhbml0aXNlKHVuc2lnbmVkIGNoYXIgKm9wdCwgY2hhciAqYnVmKTsKK3N0YXRpYyBzdHJ1Y3QgaW5fYWRkciBzZXJ2ZXJfaWQoc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dCwgc3RydWN0IGluX2FkZHIgb3ZlcnJpZGUsIHN0cnVjdCBpbl9hZGRyIGZhbGxiYWNrKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2FsY190aW1lKHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQsIHN0cnVjdCBkaGNwX2NvbmZpZyAqY29uZmlnLCB1bnNpZ25lZCBjaGFyICpvcHQpOworc3RhdGljIHZvaWQgb3B0aW9uX3B1dChzdHJ1Y3QgZGhjcF9wYWNrZXQgKm1lc3MsIHVuc2lnbmVkIGNoYXIgKmVuZCwgaW50IG9wdCwgaW50IGxlbiwgdW5zaWduZWQgaW50IHZhbCk7CitzdGF0aWMgdm9pZCBvcHRpb25fcHV0X3N0cmluZyhzdHJ1Y3QgZGhjcF9wYWNrZXQgKm1lc3MsIHVuc2lnbmVkIGNoYXIgKmVuZCwgCisJCQkgICAgICBpbnQgb3B0LCBjaGFyICpzdHJpbmcsIGludCBudWxsX3Rlcm0pOworc3RhdGljIHN0cnVjdCBpbl9hZGRyIG9wdGlvbl9hZGRyKHVuc2lnbmVkIGNoYXIgKm9wdCk7CitzdGF0aWMgdW5zaWduZWQgaW50IG9wdGlvbl91aW50KHVuc2lnbmVkIGNoYXIgKm9wdCwgaW50IG9mZnNldCwgaW50IHNpemUpOworc3RhdGljIHZvaWQgbG9nX3BhY2tldChjaGFyICp0eXBlLCB2b2lkICphZGRyLCB1bnNpZ25lZCBjaGFyICpleHRfbWFjLCAKKwkJICAgICAgIGludCBtYWNfbGVuLCBjaGFyICppbnRlcmZhY2UsIGNoYXIgKnN0cmluZywgY2hhciAqZXJyLCB1MzIgeGlkKTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICpvcHRpb25fZmluZChzdHJ1Y3QgZGhjcF9wYWNrZXQgKm1lc3MsIHNpemVfdCBzaXplLCBpbnQgb3B0X3R5cGUsIGludCBtaW5zaXplKTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICpvcHRpb25fZmluZDEodW5zaWduZWQgY2hhciAqcCwgdW5zaWduZWQgY2hhciAqZW5kLCBpbnQgb3B0LCBpbnQgbWluc2l6ZSk7CitzdGF0aWMgc2l6ZV90IGRoY3BfcGFja2V0X3NpemUoc3RydWN0IGRoY3BfcGFja2V0ICptZXNzLCB1bnNpZ25lZCBjaGFyICphZ2VudF9pZCwgdW5zaWduZWQgY2hhciAqcmVhbF9lbmQpOworc3RhdGljIHZvaWQgY2xlYXJfcGFja2V0KHN0cnVjdCBkaGNwX3BhY2tldCAqbWVzcywgdW5zaWduZWQgY2hhciAqZW5kKTsKK3N0YXRpYyBpbnQgaW5fbGlzdCh1bnNpZ25lZCBjaGFyICpsaXN0LCBpbnQgb3B0KTsKK3N0YXRpYyB2b2lkIGRvX29wdGlvbnMoc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dCwKKwkJICAgICAgIHN0cnVjdCBkaGNwX3BhY2tldCAqbWVzcywKKwkJICAgICAgIHVuc2lnbmVkIGNoYXIgKmVuZCwKKwkJICAgICAgIHVuc2lnbmVkIGNoYXIgKnJlcV9vcHRpb25zLAorCQkgICAgICAgY2hhciAqaG9zdG5hbWUsIAorCQkgICAgICAgY2hhciAqZG9tYWluLAorCQkgICAgICAgc3RydWN0IGRoY3BfbmV0aWQgKm5ldGlkLAorCQkgICAgICAgc3RydWN0IGluX2FkZHIgc3VibmV0X2FkZHIsIAorCQkgICAgICAgdW5zaWduZWQgY2hhciBmcWRuX2ZsYWdzLAorCQkgICAgICAgaW50IG51bGxfdGVybSwgaW50IHB4ZV9hcmNoLAorCQkgICAgICAgdW5zaWduZWQgY2hhciAqdXVpZCwKKwkJICAgICAgIGludCB2ZW5kb3JfY2xhc3NfbGVuLAorCQkgICAgICAgdGltZV90IG5vdywKKwkJICAgICAgIHVuc2lnbmVkIGludCBsZWFzZV90aW1lLAorCQkgICAgICAgdW5zaWduZWQgc2hvcnQgZnV6eik7CisKKworc3RhdGljIHZvaWQgbWF0Y2hfdmVuZG9yX29wdHModW5zaWduZWQgY2hhciAqb3B0LCBzdHJ1Y3QgZGhjcF9vcHQgKmRvcHQpOyAKK3N0YXRpYyBpbnQgZG9fZW5jYXBfb3B0cyhzdHJ1Y3QgZGhjcF9vcHQgKm9wdCwgaW50IGVuY2FwLCBpbnQgZmxhZywgc3RydWN0IGRoY3BfcGFja2V0ICptZXNzLCB1bnNpZ25lZCBjaGFyICplbmQsIGludCBudWxsX3Rlcm0pOworc3RhdGljIHZvaWQgcHhlX21pc2Moc3RydWN0IGRoY3BfcGFja2V0ICptZXNzLCB1bnNpZ25lZCBjaGFyICplbmQsIHVuc2lnbmVkIGNoYXIgKnV1aWQpOworc3RhdGljIGludCBwcnVuZV92ZW5kb3Jfb3B0cyhzdHJ1Y3QgZGhjcF9uZXRpZCAqbmV0aWQpOworc3RhdGljIHN0cnVjdCBkaGNwX29wdCAqcHhlX29wdHMoaW50IHB4ZV9hcmNoLCBzdHJ1Y3QgZGhjcF9uZXRpZCAqbmV0aWQsIHN0cnVjdCBpbl9hZGRyIGxvY2FsLCB0aW1lX3Qgbm93KTsKK3N0cnVjdCBkaGNwX2Jvb3QgKmZpbmRfYm9vdChzdHJ1Y3QgZGhjcF9uZXRpZCAqbmV0aWQpOworc3RhdGljIGludCBweGVfdWVmaV93b3JrYXJvdW5kKGludCBweGVfYXJjaCwgc3RydWN0IGRoY3BfbmV0aWQgKm5ldGlkLCBzdHJ1Y3QgZGhjcF9wYWNrZXQgKm1lc3MsIHN0cnVjdCBpbl9hZGRyIGxvY2FsLCB0aW1lX3Qgbm93LCBpbnQgcHhlKTsKK3N0YXRpYyB2b2lkIGFwcGx5X2RlbGF5KHUzMiB4aWQsIHRpbWVfdCByZWN2dGltZSwgc3RydWN0IGRoY3BfbmV0aWQgKm5ldGlkKTsKKworc2l6ZV90IGRoY3BfcmVwbHkoc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dCwgY2hhciAqaWZhY2VfbmFtZSwgaW50IGludF9pbmRleCwKKwkJICBzaXplX3Qgc3osIHRpbWVfdCBub3csIGludCB1bmljYXN0X2Rlc3QsIGludCBsb29wYmFjaywKKwkJICBpbnQgKmlzX2luZm9ybSwgaW50IHB4ZSwgc3RydWN0IGluX2FkZHIgZmFsbGJhY2ssIHRpbWVfdCByZWN2dGltZSkKK3sKKyAgdW5zaWduZWQgY2hhciAqb3B0LCAqY2xpZCA9IE5VTEw7CisgIHN0cnVjdCBkaGNwX2xlYXNlICpsdG1wLCAqbGVhc2UgPSBOVUxMOworICBzdHJ1Y3QgZGhjcF92ZW5kb3IgKnZlbmRvcjsKKyAgc3RydWN0IGRoY3BfbWFjICptYWM7CisgIHN0cnVjdCBkaGNwX25ldGlkX2xpc3QgKmlkX2xpc3Q7CisgIGludCBjbGlkX2xlbiA9IDAsIGlnbm9yZSA9IDAsIGRvX2NsYXNzZXMgPSAwLCBzZWxlY3RpbmcgPSAwLCBweGVhcmNoID0gLTE7CisgIHN0cnVjdCBkaGNwX3BhY2tldCAqbWVzcyA9IChzdHJ1Y3QgZGhjcF9wYWNrZXQgKilkYWVtb24tPmRoY3BfcGFja2V0Lmlvdl9iYXNlOworICB1bnNpZ25lZCBjaGFyICplbmQgPSAodW5zaWduZWQgY2hhciAqKShtZXNzICsgMSk7IAorICB1bnNpZ25lZCBjaGFyICpyZWFsX2VuZCA9ICh1bnNpZ25lZCBjaGFyICopKG1lc3MgKyAxKTsgCisgIGNoYXIgKmhvc3RuYW1lID0gTlVMTCwgKm9mZmVyX2hvc3RuYW1lID0gTlVMTCwgKmNsaWVudF9ob3N0bmFtZSA9IE5VTEwsICpkb21haW4gPSBOVUxMOworICBpbnQgaG9zdG5hbWVfYXV0aCA9IDAsIGJvcmtlbl9vcHQgPSAwOworICB1bnNpZ25lZCBjaGFyICpyZXFfb3B0aW9ucyA9IE5VTEw7CisgIGNoYXIgKm1lc3NhZ2UgPSBOVUxMOworICB1bnNpZ25lZCBpbnQgdGltZTsKKyAgc3RydWN0IGRoY3BfY29uZmlnICpjb25maWc7CisgIHN0cnVjdCBkaGNwX25ldGlkICpuZXRpZCwgKnRhZ2lmX25ldGlkOworICBzdHJ1Y3QgaW5fYWRkciBzdWJuZXRfYWRkciwgb3ZlcnJpZGU7CisgIHVuc2lnbmVkIHNob3J0IGZ1enogPSAwOworICB1bnNpZ25lZCBpbnQgbWVzc190eXBlID0gMDsKKyAgdW5zaWduZWQgY2hhciBmcWRuX2ZsYWdzID0gMDsKKyAgdW5zaWduZWQgY2hhciAqYWdlbnRfaWQgPSBOVUxMLCAqdXVpZCA9IE5VTEw7CisgIHVuc2lnbmVkIGNoYXIgKmVtYWMgPSBOVUxMOworICBpbnQgdmVuZG9yX2NsYXNzX2xlbiA9IDAsIGVtYWNfbGVuID0gMDsKKyAgc3RydWN0IGRoY3BfbmV0aWQga25vd25faWQsIGlmYWNlX2lkLCBjcGV3YW5faWQ7CisgIHN0cnVjdCBkaGNwX29wdCAqbzsKKyAgdW5zaWduZWQgY2hhciBweGVfdXVpZFsxN107CisgIHVuc2lnbmVkIGNoYXIgKm91aSA9IE5VTEwsICpzZXJpYWwgPSBOVUxMOworI2lmZGVmIEhBVkVfU0NSSVBUCisgIHVuc2lnbmVkIGNoYXIgKmNsYXNzID0gTlVMTDsKKyNlbmRpZgorCisgIHN1Ym5ldF9hZGRyLnNfYWRkciA9IG92ZXJyaWRlLnNfYWRkciA9IDA7CisKKyAgLyogc2V0IHRhZyB3aXRoIG5hbWUgPT0gaW50ZXJmYWNlICovCisgIGlmYWNlX2lkLm5ldCA9IGlmYWNlX25hbWU7CisgIGlmYWNlX2lkLm5leHQgPSBOVUxMOworICBuZXRpZCA9ICZpZmFjZV9pZDsgCisgIAorICBpZiAobWVzcy0+b3AgIT0gQk9PVFJFUVVFU1QgfHwgbWVzcy0+aGxlbiA+IERIQ1BfQ0hBRERSX01BWCkKKyAgICByZXR1cm4gMDsKKyAgIAorICBpZiAobWVzcy0+aHR5cGUgPT0gMCAmJiBtZXNzLT5obGVuICE9IDApCisgICAgcmV0dXJuIDA7CisKKyAgLyogY2hlY2sgZm9yIERIQ1AgcmF0aGVyIHRoYW4gQk9PVFAgKi8KKyAgaWYgKChvcHQgPSBvcHRpb25fZmluZChtZXNzLCBzeiwgT1BUSU9OX01FU1NBR0VfVFlQRSwgMSkpKQorICAgIHsKKyAgICAgIHUzMiBjb29raWUgPSBodG9ubChESENQX0NPT0tJRSk7CisgICAgICAKKyAgICAgIC8qIG9ubHkgaW5zaXN0IG9uIGEgY29va2llIGZvciBESENQLiAqLworICAgICAgaWYgKG1lbWNtcChtZXNzLT5vcHRpb25zLCAmY29va2llLCBzaXplb2YodTMyKSkgIT0gMCkKKwlyZXR1cm4gMDsKKyAgICAgIAorICAgICAgbWVzc190eXBlID0gb3B0aW9uX3VpbnQob3B0LCAwLCAxKTsKKyAgICAgIAorICAgICAgLyogdHdvIHRoaW5ncyB0byBub3RlIGhlcmU6IGV4cGFuZF9idWYgbWF5IG1vdmUgdGhlIHBhY2tldCwKKwkgc28gcmVhc3NpZ24gbWVzcyBmcm9tIGRhZW1vbi0+cGFja2V0LiBBbHNvLCB0aGUgc2l6ZQorCSBzZW50IGluY2x1ZGVzIHRoZSBJUCBhbmQgVURQIGhlYWRlcnMsIGhlbmNlIHRoZSBtYWdpYyAiLTI4IiAqLworICAgICAgaWYgKChvcHQgPSBvcHRpb25fZmluZChtZXNzLCBzeiwgT1BUSU9OX01BWE1FU1NBR0UsIDIpKSkKKwl7CisJICBzaXplX3Qgc2l6ZSA9IChzaXplX3Qpb3B0aW9uX3VpbnQob3B0LCAwLCAyKSAtIDI4OworCSAgCisJICBpZiAoc2l6ZSA+IERIQ1BfUEFDS0VUX01BWCkKKwkgICAgc2l6ZSA9IERIQ1BfUEFDS0VUX01BWDsKKwkgIGVsc2UgaWYgKHNpemUgPCBzaXplb2Yoc3RydWN0IGRoY3BfcGFja2V0KSkKKwkgICAgc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZGhjcF9wYWNrZXQpOworCSAgCisJICBpZiAoZXhwYW5kX2J1ZigmZGFlbW9uLT5kaGNwX3BhY2tldCwgc2l6ZSkpCisJICAgIHsKKwkgICAgICBtZXNzID0gKHN0cnVjdCBkaGNwX3BhY2tldCAqKWRhZW1vbi0+ZGhjcF9wYWNrZXQuaW92X2Jhc2U7CisJICAgICAgcmVhbF9lbmQgPSBlbmQgPSAoKHVuc2lnbmVkIGNoYXIgKiltZXNzKSArIHNpemU7CisJICAgIH0KKwl9CisKKyAgICAgIC8qIFNvbWUgYnVnZ3kgY2xpZW50cyBzZXQgY2lhZGRyIHdoZW4gdGhleSBzaG91bGRuJ3QsIHNvIGNsZWFyIHRoYXQgaGVyZSBzaW5jZQorCSBpdCBjYW4gYWZmZWN0IHRoZSBjb250ZXh0LWRldGVybWluYXRpb24gY29kZS4gKi8KKyAgICAgIGlmICgob3B0aW9uX2ZpbmQobWVzcywgc3osIE9QVElPTl9SRVFVRVNURURfSVAsIElOQUREUlNaKSB8fCBtZXNzX3R5cGUgPT0gREhDUERJU0NPVkVSKSkKKwltZXNzLT5jaWFkZHIuc19hZGRyID0gMDsKKworICAgICAgLyogc2VhcmNoIGZvciBkZXZpY2UgaWRlbnRpdHkgZnJvbSBDUEVXQU4gZGV2aWNlcywgd2UgcGFzcyB0aGlzIHRocm91Z2ggdG8gdGhlIHNjcmlwdCAqLworICAgICAgaWYgKChvcHQgPSBvcHRpb25fZmluZChtZXNzLCBzeiwgT1BUSU9OX1ZFTkRPUl9JREVOVF9PUFQsIDUpKSkKKwl7CisJICB1bnNpZ25lZCAgaW50IGVsZW4sIG9mZnNldCwgbGVuID0gb3B0aW9uX2xlbihvcHQpOworCSAgCisJICBmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IChsZW4gLSA1KTsgb2Zmc2V0ICs9IGVsZW4gKyA1KQorCSAgICB7CisJICAgICAgZWxlbiA9IG9wdGlvbl91aW50KG9wdCwgb2Zmc2V0ICsgNCAsIDEpOworCSAgICAgIGlmIChvcHRpb25fdWludChvcHQsIG9mZnNldCwgNCkgPT0gQlJEQkFORF9GT1JVTV9JQU5BICYmIG9mZnNldCArIGVsZW4gKyA1IDw9IGxlbikKKwkJeworCQkgIHVuc2lnbmVkIGNoYXIgKnggPSBvcHRpb25fcHRyKG9wdCwgb2Zmc2V0ICsgNSk7CisJCSAgdW5zaWduZWQgY2hhciAqeSA9IG9wdGlvbl9wdHIob3B0LCBvZmZzZXQgKyBlbGVuICsgNSk7CisJCSAgb3VpID0gb3B0aW9uX2ZpbmQxKHgsIHksIDEsIDEpOworCQkgIHNlcmlhbCA9IG9wdGlvbl9maW5kMSh4LCB5LCAyLCAxKTsKKyNpZmRlZiBIQVZFX1NDUklQVAorCQkgIGNsYXNzID0gb3B0aW9uX2ZpbmQxKHgsIHksIDMsIDEpOwkJICAKKyNlbmRpZgorCQkgIC8qIElmIFRSMDY5LWlkIGlzIHByZXNlbnQgc2V0IHRoZSB0YWcgImNwZXdhbi1pZCIgdG8gZmFjaWxpdGF0ZSBlY2hvaW5nIAorCQkgICAgIHRoZSBnYXRld2F5IGlkIGJhY2suIE5vdGUgdGhhdCB0aGUgZGV2aWNlIGNsYXNzIGlzIG9wdGlvbmFsICovCisJCSAgaWYgKG91aSAmJiBzZXJpYWwpCisJCSAgICB7CisJCSAgICAgIGNwZXdhbl9pZC5uZXQgPSAiY3Bld2FuLWlkIjsKKwkJICAgICAgY3Bld2FuX2lkLm5leHQgPSBuZXRpZDsKKwkJICAgICAgbmV0aWQgPSAmY3Bld2FuX2lkOworCQkgICAgfQorCQkgIGJyZWFrOworCQl9CisJICAgIH0KKwl9CisgICAgICAKKyAgICAgIGlmICgob3B0ID0gb3B0aW9uX2ZpbmQobWVzcywgc3osIE9QVElPTl9BR0VOVF9JRCwgMSkpKQorCXsKKwkgIC8qIEFueSBhZ2VudC1pZCBuZWVkcyB0byBiZSBjb3BpZWQgYmFjayBvdXQsIHZlcmJhdGltLCBhcyB0aGUgbGFzdCBvcHRpb24KKwkgICAgIGluIHRoZSBwYWNrZXQuIEhlcmUsIHdlIHNoaWZ0IGl0IHRvIHRoZSB2ZXJ5IGVuZCBvZiB0aGUgYnVmZmVyLCBpZiBpdCBkb2Vzbid0CisJICAgICBnZXQgb3ZlcndyaXR0ZW4sIHRoZW4gaXQgd2lsbCBiZSBzaHVmZmxlZCBiYWNrIGF0IHRoZSBlbmQgb2YgcHJvY2Vzc2luZy4KKwkgICAgIE5vdGUgdGhhdCB0aGUgaW5jb21pbmcgb3B0aW9ucyBtdXN0IG5vdCBiZSBvdmVyd3JpdHRlbiBoZXJlLCBzbyB0aGVyZSBoYXMgdG8gCisJICAgICBiZSBlbm91Z2ggZnJlZSBzcGFjZSBhdCB0aGUgZW5kIG9mIHRoZSBwYWNrZXQgdG8gY29weSB0aGUgb3B0aW9uLiAqLworCSAgdW5zaWduZWQgY2hhciAqc29wdDsKKwkgIHVuc2lnbmVkIGludCB0b3RhbCA9IG9wdGlvbl9sZW4ob3B0KSArIDI7CisJICB1bnNpZ25lZCBjaGFyICpsYXN0X29wdCA9IG9wdGlvbl9maW5kMSgmbWVzcy0+b3B0aW9uc1swXSArIHNpemVvZih1MzIpLCAoKHVuc2lnbmVkIGNoYXIgKiltZXNzKSArIHN6LAorCQkJCQkJIE9QVElPTl9FTkQsIDApOworCSAgaWYgKGxhc3Rfb3B0ICYmIGxhc3Rfb3B0IDwgZW5kIC0gdG90YWwpCisJICAgIHsKKwkgICAgICBlbmQgLT0gdG90YWw7CisJICAgICAgYWdlbnRfaWQgPSBlbmQ7CisJICAgICAgbWVtY3B5KGFnZW50X2lkLCBvcHQsIHRvdGFsKTsKKwkgICAgfQorCisJICAvKiBsb29rIGZvciBSRkMzNTI3IExpbmsgc2VsZWN0aW9uIHN1Yi1vcHRpb24gKi8KKwkgIGlmICgoc29wdCA9IG9wdGlvbl9maW5kMShvcHRpb25fcHRyKG9wdCwgMCksIG9wdGlvbl9wdHIob3B0LCBvcHRpb25fbGVuKG9wdCkpLCBTVUJPUFRfU1VCTkVUX1NFTEVDVCwgSU5BRERSU1opKSkKKwkgICAgc3VibmV0X2FkZHIgPSBvcHRpb25fYWRkcihzb3B0KTsKKworCSAgLyogbG9vayBmb3IgUkZDNTEwNyBzZXJ2ZXItaWRlbnRpZmllci1vdmVycmlkZSAqLworCSAgaWYgKChzb3B0ID0gb3B0aW9uX2ZpbmQxKG9wdGlvbl9wdHIob3B0LCAwKSwgb3B0aW9uX3B0cihvcHQsIG9wdGlvbl9sZW4ob3B0KSksIFNVQk9QVF9TRVJWRVJfT1IsIElOQUREUlNaKSkpCisJICAgIG92ZXJyaWRlID0gb3B0aW9uX2FkZHIoc29wdCk7CisJICAKKwkgIC8qIGlmIGEgY2lyY3VpdC1pZCBvciByZW1vdGUtaXMgb3B0aW9uIGlzIHByb3ZpZGVkLCBleGFjdC1tYXRjaCB0byBvcHRpb25zLiAqLyAKKwkgIGZvciAodmVuZG9yID0gZGFlbW9uLT5kaGNwX3ZlbmRvcnM7IHZlbmRvcjsgdmVuZG9yID0gdmVuZG9yLT5uZXh0KQorCSAgICB7CisJICAgICAgaW50IHNlYXJjaDsKKwkgICAgICAKKwkgICAgICBpZiAodmVuZG9yLT5tYXRjaF90eXBlID09IE1BVENIX0NJUkNVSVQpCisJCXNlYXJjaCA9IFNVQk9QVF9DSVJDVUlUX0lEOworCSAgICAgIGVsc2UgaWYgKHZlbmRvci0+bWF0Y2hfdHlwZSA9PSBNQVRDSF9SRU1PVEUpCisJCXNlYXJjaCA9IFNVQk9QVF9SRU1PVEVfSUQ7CisJICAgICAgZWxzZSBpZiAodmVuZG9yLT5tYXRjaF90eXBlID09IE1BVENIX1NVQlNDUklCRVIpCisJCXNlYXJjaCA9IFNVQk9QVF9TVUJTQ1JfSUQ7CisJICAgICAgZWxzZSAKKwkJY29udGludWU7CisKKwkgICAgICBpZiAoKHNvcHQgPSBvcHRpb25fZmluZDEob3B0aW9uX3B0cihvcHQsIDApLCBvcHRpb25fcHRyKG9wdCwgb3B0aW9uX2xlbihvcHQpKSwgc2VhcmNoLCAxKSkgJiYKKwkJICB2ZW5kb3ItPmxlbiA9PSBvcHRpb25fbGVuKHNvcHQpICYmCisJCSAgbWVtY21wKG9wdGlvbl9wdHIoc29wdCwgMCksIHZlbmRvci0+ZGF0YSwgdmVuZG9yLT5sZW4pID09IDApCisJCXsKKwkJICB2ZW5kb3ItPm5ldGlkLm5leHQgPSBuZXRpZDsKKwkJICBuZXRpZCA9ICZ2ZW5kb3ItPm5ldGlkOworCQl9IAorCSAgICB9CisJfQorCisgICAgICAvKiBDaGVjayBmb3IgUkZDMzAxMSBzdWJuZXQgc2VsZWN0b3IgLSBvbmx5IGlmIFJGQzM1Mjcgb25lIG5vdCBwcmVzZW50ICovCisgICAgICBpZiAoc3VibmV0X2FkZHIuc19hZGRyID09IDAgJiYgKG9wdCA9IG9wdGlvbl9maW5kKG1lc3MsIHN6LCBPUFRJT05fU1VCTkVUX1NFTEVDVCwgSU5BRERSU1opKSkKKwlzdWJuZXRfYWRkciA9IG9wdGlvbl9hZGRyKG9wdCk7CisgICAgICAKKyAgICAgIC8qIElmIHRoZXJlIGlzIG5vIGNsaWVudCBpZGVudGlmaWVyIG9wdGlvbiwgdXNlIHRoZSBoYXJkd2FyZSBhZGRyZXNzICovCisgICAgICBpZiAoKG9wdCA9IG9wdGlvbl9maW5kKG1lc3MsIHN6LCBPUFRJT05fQ0xJRU5UX0lELCAxKSkpCisJeworCSAgY2xpZF9sZW4gPSBvcHRpb25fbGVuKG9wdCk7CisJICBjbGlkID0gb3B0aW9uX3B0cihvcHQsIDApOworCX0KKworICAgICAgLyogZG8gd2UgaGF2ZSBhIGxlYXNlIGluIHN0b3JlPyAqLworICAgICAgbGVhc2UgPSBsZWFzZV9maW5kX2J5X2NsaWVudChtZXNzLT5jaGFkZHIsIG1lc3MtPmhsZW4sIG1lc3MtPmh0eXBlLCBjbGlkLCBjbGlkX2xlbik7CisKKyAgICAgIC8qIElmIHRoaXMgcmVxdWVzdCBpcyBtaXNzaW5nIGEgY2xpZCwgYnV0IHdlJ3ZlIHNlZW4gb25lIGJlZm9yZSwgCisJIHVzZSBpdCBhZ2FpbiBmb3Igb3B0aW9uIG1hdGNoaW5nIGV0Yy4gKi8KKyAgICAgIGlmIChsZWFzZSAmJiAhY2xpZCAmJiBsZWFzZS0+Y2xpZCkKKwl7CisJICBjbGlkX2xlbiA9IGxlYXNlLT5jbGlkX2xlbjsKKwkgIGNsaWQgPSBsZWFzZS0+Y2xpZDsKKwl9CisKKyAgICAgIC8qIGZpbmQgbWFjIHRvIHVzZSBmb3IgbG9nZ2luZyBhbmQgaGFzaGluZyAqLworICAgICAgZW1hYyA9IGV4dGVuZGVkX2h3YWRkcihtZXNzLT5odHlwZSwgbWVzcy0+aGxlbiwgbWVzcy0+Y2hhZGRyLCBjbGlkX2xlbiwgY2xpZCwgJmVtYWNfbGVuKTsKKyAgICB9CisgIAorICBmb3IgKG1hYyA9IGRhZW1vbi0+ZGhjcF9tYWNzOyBtYWM7IG1hYyA9IG1hYy0+bmV4dCkKKyAgICBpZiAobWFjLT5od2FkZHJfbGVuID09IG1lc3MtPmhsZW4gJiYKKwkobWFjLT5od2FkZHJfdHlwZSA9PSBtZXNzLT5odHlwZSB8fCBtYWMtPmh3YWRkcl90eXBlID09IDApICYmCisJbWVtY21wX21hc2tlZChtYWMtPmh3YWRkciwgbWVzcy0+Y2hhZGRyLCBtZXNzLT5obGVuLCBtYWMtPm1hc2spKQorICAgICAgeworCW1hYy0+bmV0aWQubmV4dCA9IG5ldGlkOworCW5ldGlkID0gJm1hYy0+bmV0aWQ7CisgICAgICB9CisgIAorICAvKiBEZXRlcm1pbmUgbmV0d29yayBmb3IgdGhpcyBwYWNrZXQuIE91ciBjYWxsZXIgd2lsbCBoYXZlIGFscmVhZHkgbGlua2VkIGFsbCB0aGUgCisgICAgIGNvbnRleHRzIHdoaWNoIG1hdGNoIHRoZSBhZGRyZXNzZXMgb2YgdGhlIHJlY2VpdmluZyBpbnRlcmZhY2UgYnV0IGlmIHRoZSAKKyAgICAgbWFjaGluZSBoYXMgYW4gYWRkcmVzcyBhbHJlYWR5LCBvciBjYW1lIHZpYSBhIHJlbGF5LCBvciB3ZSBoYXZlIGEgc3VibmV0IHNlbGVjdG9yLCAKKyAgICAgd2Ugc2VhcmNoIGFnYWluLiBJZiB3ZSBkb24ndCBoYXZlIGhhdmUgYSBnaWFkZHIgb3IgZXhwbGljaXQgc3VibmV0IHNlbGVjdG9yLCAKKyAgICAgdXNlIHRoZSBjaWFkZHIuIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgYSAgbWFjaGluZSB3aGljaCBnb3QgYSBsZWFzZSB2aWEgYSAKKyAgICAgcmVsYXkgd29uJ3QgdXNlIHRoZSByZWxheSB0byByZW5ldy4gSWYgbWF0Y2hpbmcgYSBjaWFkZHIgZmFpbHMgYnV0IHdlIGhhdmUgYSBjb250ZXh0IAorICAgICBmcm9tIHRoZSBwaHlzaWNhbCBuZXR3b3JrLCBjb250aW51ZSB1c2luZyB0aGF0IHRvIGFsbG93IGNvcnJlY3QgREhDUE5BSyBnZW5lcmF0aW9uIGxhdGVyLiAqLworICBpZiAobWVzcy0+Z2lhZGRyLnNfYWRkciB8fCBzdWJuZXRfYWRkci5zX2FkZHIgfHwgbWVzcy0+Y2lhZGRyLnNfYWRkcikKKyAgICB7CisgICAgICBzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0X3RtcCwgKmNvbnRleHRfbmV3ID0gTlVMTDsKKyAgICAgIHN0cnVjdCBpbl9hZGRyIGFkZHI7CisgICAgICBpbnQgZm9yY2UgPSAwOworICAgICAgCisgICAgICBpZiAoc3VibmV0X2FkZHIuc19hZGRyKQorCXsKKwkgIGFkZHIgPSBzdWJuZXRfYWRkcjsKKwkgIGZvcmNlID0gMTsKKwl9CisgICAgICBlbHNlIGlmIChtZXNzLT5naWFkZHIuc19hZGRyKQorCXsKKwkgIGFkZHIgPSBtZXNzLT5naWFkZHI7CisJICBmb3JjZSA9IDE7CisJfQorICAgICAgZWxzZQorCXsKKwkgIC8qIElmIGNpYWRkciBpcyBpbiB0aGUgaGFyZHdhcmUgZGVyaXZlZCBzZXQgb2YgY29udGV4dHMsIGxlYXZlIHRoYXQgdW5jaGFuZ2VkICovCisJICBhZGRyID0gbWVzcy0+Y2lhZGRyOworCSAgZm9yIChjb250ZXh0X3RtcCA9IGNvbnRleHQ7IGNvbnRleHRfdG1wOyBjb250ZXh0X3RtcCA9IGNvbnRleHRfdG1wLT5jdXJyZW50KQorCSAgICBpZiAoY29udGV4dF90bXAtPm5ldG1hc2suc19hZGRyICYmIAorCQlpc19zYW1lX25ldChhZGRyLCBjb250ZXh0X3RtcC0+c3RhcnQsIGNvbnRleHRfdG1wLT5uZXRtYXNrKSAmJgorCQlpc19zYW1lX25ldChhZGRyLCBjb250ZXh0X3RtcC0+ZW5kLCBjb250ZXh0X3RtcC0+bmV0bWFzaykpCisJICAgICAgeworCQljb250ZXh0X25ldyA9IGNvbnRleHQ7CisJCWJyZWFrOworCSAgICAgIH0KKwl9IAorCQkKKyAgICAgIGlmICghY29udGV4dF9uZXcpCisJZm9yIChjb250ZXh0X3RtcCA9IGRhZW1vbi0+ZGhjcDsgY29udGV4dF90bXA7IGNvbnRleHRfdG1wID0gY29udGV4dF90bXAtPm5leHQpCisJICB7CisJICAgIHN0cnVjdCBpbl9hZGRyIG5ldG1hc2sgPSBjb250ZXh0X3RtcC0+bmV0bWFzazsKKworCSAgICAvKiBndWVzcyB0aGUgbmV0bWFzayBmb3IgcmVsYXllZCBuZXR3b3JrcyAqLworCSAgICBpZiAoIShjb250ZXh0X3RtcC0+ZmxhZ3MgJiBDT05URVhUX05FVE1BU0spICYmIGNvbnRleHRfdG1wLT5uZXRtYXNrLnNfYWRkciA9PSAwKQorCSAgICAgIHsKKwkJaWYgKElOX0NMQVNTQShudG9obChjb250ZXh0X3RtcC0+c3RhcnQuc19hZGRyKSkgJiYgSU5fQ0xBU1NBKG50b2hsKGNvbnRleHRfdG1wLT5lbmQuc19hZGRyKSkpCisJCSAgbmV0bWFzay5zX2FkZHIgPSBodG9ubCgweGZmMDAwMDAwKTsKKwkJZWxzZSBpZiAoSU5fQ0xBU1NCKG50b2hsKGNvbnRleHRfdG1wLT5zdGFydC5zX2FkZHIpKSAmJiBJTl9DTEFTU0IobnRvaGwoY29udGV4dF90bXAtPmVuZC5zX2FkZHIpKSkKKwkJICBuZXRtYXNrLnNfYWRkciA9IGh0b25sKDB4ZmZmZjAwMDApOworCQllbHNlIGlmIChJTl9DTEFTU0MobnRvaGwoY29udGV4dF90bXAtPnN0YXJ0LnNfYWRkcikpICYmIElOX0NMQVNTQyhudG9obChjb250ZXh0X3RtcC0+ZW5kLnNfYWRkcikpKQorCQkgIG5ldG1hc2suc19hZGRyID0gaHRvbmwoMHhmZmZmZmYwMCk7IAorCSAgICAgIH0KKwkgICAgCisJICAgIC8qIFRoaXMgc2VjdGlvbiBmaWxscyBpbiBjb250ZXh0IG1haW5seSB3aGVuIGEgY2xpZW50IHdoaWNoIGlzIG9uIGEgcmVtb3RlIChyZWxheWVkKQorCSAgICAgICBuZXR3b3JrIHJlbmV3cyBhIGxlYXNlIHdpdGhvdXQgdXNpbmcgdGhlIHJlbGF5LCBhZnRlciBkbnNtYXNxIGhhcyByZXN0YXJ0ZWQuICovCisJICAgIGlmIChuZXRtYXNrLnNfYWRkciAhPSAwICAmJiAKKwkJaXNfc2FtZV9uZXQoYWRkciwgY29udGV4dF90bXAtPnN0YXJ0LCBuZXRtYXNrKSAmJgorCQlpc19zYW1lX25ldChhZGRyLCBjb250ZXh0X3RtcC0+ZW5kLCBuZXRtYXNrKSkKKwkgICAgICB7CisJCWNvbnRleHRfdG1wLT5uZXRtYXNrID0gbmV0bWFzazsKKwkJaWYgKGNvbnRleHRfdG1wLT5sb2NhbC5zX2FkZHIgPT0gMCkKKwkJICBjb250ZXh0X3RtcC0+bG9jYWwgPSBmYWxsYmFjazsKKwkJaWYgKGNvbnRleHRfdG1wLT5yb3V0ZXIuc19hZGRyID09IDApCisJCSAgY29udGV4dF90bXAtPnJvdXRlciA9IG1lc3MtPmdpYWRkcjsKKwkgICAKKwkJLyogZmlsbCBpbiBtaXNzaW5nIGJyb2FkY2FzdCBhZGRyZXNzZXMgZm9yIHJlbGF5ZWQgcmFuZ2VzICovCisJCWlmICghKGNvbnRleHRfdG1wLT5mbGFncyAmIENPTlRFWFRfQlJEQ0FTVCkgJiYgY29udGV4dF90bXAtPmJyb2FkY2FzdC5zX2FkZHIgPT0gMCApCisJCSAgY29udGV4dF90bXAtPmJyb2FkY2FzdC5zX2FkZHIgPSBjb250ZXh0X3RtcC0+c3RhcnQuc19hZGRyIHwgfmNvbnRleHRfdG1wLT5uZXRtYXNrLnNfYWRkcjsKKwkJCisJCWNvbnRleHRfdG1wLT5jdXJyZW50ID0gY29udGV4dF9uZXc7CisJCWNvbnRleHRfbmV3ID0gY29udGV4dF90bXA7CisJICAgICAgfQorCSAgfQorICAgICAgCisgICAgICBpZiAoY29udGV4dF9uZXcgfHwgZm9yY2UpCisJY29udGV4dCA9IGNvbnRleHRfbmV3OyAKKyAgICB9CisgIAorICBpZiAoIWNvbnRleHQpCisgICAgeworICAgICAgbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfV0FSTklORywgXygibm8gYWRkcmVzcyByYW5nZSBhdmFpbGFibGUgZm9yIERIQ1AgcmVxdWVzdCAlcyAlcyIpLCAKKwkJc3VibmV0X2FkZHIuc19hZGRyID8gXygid2l0aCBzdWJuZXQgc2VsZWN0b3IiKSA6IF8oInZpYSIpLAorCQlzdWJuZXRfYWRkci5zX2FkZHIgPyBpbmV0X250b2Eoc3VibmV0X2FkZHIpIDogKG1lc3MtPmdpYWRkci5zX2FkZHIgPyBpbmV0X250b2EobWVzcy0+Z2lhZGRyKSA6IGlmYWNlX25hbWUpKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICBpZiAob3B0aW9uX2Jvb2woT1BUX0xPR19PUFRTKSkKKyAgICB7CisgICAgICBzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0X3RtcDsKKyAgICAgIGZvciAoY29udGV4dF90bXAgPSBjb250ZXh0OyBjb250ZXh0X3RtcDsgY29udGV4dF90bXAgPSBjb250ZXh0X3RtcC0+Y3VycmVudCkKKwl7CisJICBzdHJjcHkoZGFlbW9uLT5uYW1lYnVmZiwgaW5ldF9udG9hKGNvbnRleHRfdG1wLT5zdGFydCkpOworCSAgaWYgKGNvbnRleHRfdG1wLT5mbGFncyAmIChDT05URVhUX1NUQVRJQyB8IENPTlRFWFRfUFJPWFkpKQorCSAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19JTkZPLCBfKCIldSBhdmFpbGFibGUgREhDUCBzdWJuZXQ6ICVzLyVzIiksCisJCSAgICAgIG50b2hsKG1lc3MtPnhpZCksIGRhZW1vbi0+bmFtZWJ1ZmYsIGluZXRfbnRvYShjb250ZXh0X3RtcC0+bmV0bWFzaykpOworCSAgZWxzZQorCSAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19JTkZPLCBfKCIldSBhdmFpbGFibGUgREhDUCByYW5nZTogJXMgLS0gJXMiKSwgCisJCSAgICAgIG50b2hsKG1lc3MtPnhpZCksIGRhZW1vbi0+bmFtZWJ1ZmYsIGluZXRfbnRvYShjb250ZXh0X3RtcC0+ZW5kKSk7CisJfQorICAgIH0KKyAgCisgIC8qIGRoY3AtbWF0Y2guIElmIHdlIGhhdmUgaGV4LWFuZC13aWxkY2FyZHMsIGxvb2sgZm9yIGEgbGVmdC1hbmNob3JlZCBtYXRjaC4KKyAgICAgT3RoZXJ3aXNlIGFzc3VtZSB0aGUgb3B0aW9uIGlzIGFuIGFycmF5LCBhbmQgbG9vayBmb3IgYSBtYXRjaGluZyBlbGVtZW50LiAKKyAgICAgSWYgbm8gZGF0YSBnaXZlbiwgZXhpc3RlbmNlIG9mIHRoZSBvcHRpb24gaXMgZW5vdWdoLiBUaGlzIGNvZGUgaGFuZGxlcyAKKyAgICAgcmZjMzkyNSBWLUkgY2xhc3NlcyB0b28uICovCisgIGZvciAobyA9IGRhZW1vbi0+ZGhjcF9tYXRjaDsgbzsgbyA9IG8tPm5leHQpCisgICAgeworICAgICAgdW5zaWduZWQgaW50IGxlbiwgZWxlbiwgbWF0Y2ggPSAwOworICAgICAgc2l6ZV90IG9mZnNldCwgbzI7CisKKyAgICAgIGlmIChvLT5mbGFncyAmIERIT1BUX1JGQzM5MjUpCisJeworCSAgaWYgKCEob3B0ID0gb3B0aW9uX2ZpbmQobWVzcywgc3osIE9QVElPTl9WRU5ET1JfSURFTlQsIDUpKSkKKwkgICAgY29udGludWU7CisJICAKKwkgIGZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgKG9wdGlvbl9sZW4ob3B0KSAtIDV1KTsgb2Zmc2V0ICs9IGxlbiArIDUpCisJICAgIHsKKwkgICAgICBsZW4gPSBvcHRpb25fdWludChvcHQsIG9mZnNldCArIDQgLCAxKTsKKwkgICAgICAvKiBOZWVkIHRvIHRha2UgY2FyZSB0aGF0IGJhZCBkYXRhIGNhbid0IHJ1biB1cyBvZmYgdGhlIGVuZCBvZiB0aGUgcGFja2V0ICovCisJICAgICAgaWYgKChvZmZzZXQgKyBsZW4gKyA1IDw9ICh1bnNpZ25lZCkob3B0aW9uX2xlbihvcHQpKSkgJiYKKwkJICAob3B0aW9uX3VpbnQob3B0LCBvZmZzZXQsIDQpID09ICh1bnNpZ25lZCBpbnQpby0+dS5lbmNhcCkpCisJCWZvciAobzIgPSBvZmZzZXQgKyA1OyBvMiA8IG9mZnNldCArIGxlbiArIDU7IG8yICs9IGVsZW4gKyAxKQorCQkgIHsgCisJCSAgICBlbGVuID0gb3B0aW9uX3VpbnQob3B0LCBvMiwgMSk7CisJCSAgICBpZiAoKG8yICsgZWxlbiArIDEgPD0gb3B0aW9uX2xlbihvcHQpKSAmJgorCQkJKG1hdGNoID0gbWF0Y2hfYnl0ZXMobywgb3B0aW9uX3B0cihvcHQsIG8yICsgMSksIGVsZW4pKSkKKwkJICAgICAgYnJlYWs7CisJCSAgfQorCSAgICAgIGlmIChtYXRjaCkgCisJCWJyZWFrOworCSAgICB9CSAgCisJfQorICAgICAgZWxzZQorCXsKKwkgIGlmICghKG9wdCA9IG9wdGlvbl9maW5kKG1lc3MsIHN6LCBvLT5vcHQsIDEpKSkKKwkgICAgY29udGludWU7CisJICAKKwkgIG1hdGNoID0gbWF0Y2hfYnl0ZXMobywgb3B0aW9uX3B0cihvcHQsIDApLCBvcHRpb25fbGVuKG9wdCkpOworCX0gCisKKyAgICAgIGlmIChtYXRjaCkKKwl7CisJICBvLT5uZXRpZC0+bmV4dCA9IG5ldGlkOworCSAgbmV0aWQgPSBvLT5uZXRpZDsKKwl9CisgICAgfQorCQorICAvKiB1c2VyLWNsYXNzIG9wdGlvbnMgYXJlLCBhY2NvcmRpbmcgdG8gUkZDMzAwNCwgc3VwcG9zZWQgdG8gY29udGFpbgorICAgICBhIHNldCBvZiBjb3VudGVkIHN0cmluZ3MuIEhlcmUgd2UgY2hlY2sgdGhhdCB0aGlzIGlzIHNvIChieSBzZWVpbmcKKyAgICAgaWYgdGhlIGNvdW50cyBhcmUgY29uc2lzdGVudCB3aXRoIHRoZSBvdmVyYWxsIG9wdGlvbiBsZW5ndGgpIGFuZCBpZgorICAgICBzbyB6ZXJvIHRoZSBjb3VudHMgc28gdGhhdCB3ZSBkb24ndCBnZXQgc3B1cmlvdXMgbWF0Y2hlcyBiZXR3ZWVuIAorICAgICB0aGUgdmVuZG9yIHN0cmluZyBhbmQgdGhlIGNvdW50cy4gSWYgdGhlIGxlbmd0aHMgZG9uJ3QgYWRkIHVwLCB3ZQorICAgICBhc3N1bWUgdGhhdCB0aGUgb3B0aW9uIGlzIGEgc2luZ2xlIHN0cmluZyBhbmQgbm9uIFJGQzMwMDQgY29tcGxpYW50IAorICAgICBhbmQganVzdCBkbyB0aGUgc3Vic3RyaW5nIG1hdGNoLiBkaGNsaWVudCBwcm92aWRlcyB0aGVzZSBicm9rZW4gb3B0aW9ucy4KKyAgICAgVGhlIGNvZGUsIGxhdGVyLCB3aGljaCBzZW5kcyB1c2VyLWNsYXNzIGRhdGEgdG8gdGhlIGxlYXNlLWNoYW5nZSBzY3JpcHQKKyAgICAgcmVsaWVzIG9uIHRoZSB0cmFuc2Zvcm1hdGlvbiBkb25lIGhlcmUuCisgICovCisKKyAgaWYgKChvcHQgPSBvcHRpb25fZmluZChtZXNzLCBzeiwgT1BUSU9OX1VTRVJfQ0xBU1MsIDEpKSkKKyAgICB7CisgICAgICB1bnNpZ25lZCBjaGFyICp1Y3AgPSBvcHRpb25fcHRyKG9wdCwgMCk7CisgICAgICBpbnQgdG1wLCBqOworICAgICAgZm9yIChqID0gMDsgaiA8IG9wdGlvbl9sZW4ob3B0KTsgaiArPSB1Y3Bbal0gKyAxKTsKKyAgICAgIGlmIChqID09IG9wdGlvbl9sZW4ob3B0KSkKKwlmb3IgKGogPSAwOyBqIDwgb3B0aW9uX2xlbihvcHQpOyBqID0gdG1wKQorCSAgeworCSAgICB0bXAgPSBqICsgdWNwW2pdICsgMTsKKwkgICAgdWNwW2pdID0gMDsKKwkgIH0KKyAgICB9CisgICAgCisgIGZvciAodmVuZG9yID0gZGFlbW9uLT5kaGNwX3ZlbmRvcnM7IHZlbmRvcjsgdmVuZG9yID0gdmVuZG9yLT5uZXh0KQorICAgIHsKKyAgICAgIGludCBtb3B0OworICAgICAgCisgICAgICBpZiAodmVuZG9yLT5tYXRjaF90eXBlID09IE1BVENIX1ZFTkRPUikKKwltb3B0ID0gT1BUSU9OX1ZFTkRPUl9JRDsKKyAgICAgIGVsc2UgaWYgKHZlbmRvci0+bWF0Y2hfdHlwZSA9PSBNQVRDSF9VU0VSKQorCW1vcHQgPSBPUFRJT05fVVNFUl9DTEFTUzsgCisgICAgICBlbHNlCisJY29udGludWU7CisKKyAgICAgIGlmICgob3B0ID0gb3B0aW9uX2ZpbmQobWVzcywgc3osIG1vcHQsIDEpKSkKKwl7CisJICBpbnQgaTsKKwkgIGZvciAoaSA9IDA7IGkgPD0gKG9wdGlvbl9sZW4ob3B0KSAtIHZlbmRvci0+bGVuKTsgaSsrKQorCSAgICBpZiAobWVtY21wKHZlbmRvci0+ZGF0YSwgb3B0aW9uX3B0cihvcHQsIGkpLCB2ZW5kb3ItPmxlbikgPT0gMCkKKwkgICAgICB7CisJCXZlbmRvci0+bmV0aWQubmV4dCA9IG5ldGlkOworCQluZXRpZCA9ICZ2ZW5kb3ItPm5ldGlkOworCQlicmVhazsKKwkgICAgICB9CisJfQorICAgIH0KKworICAvKiBtYXJrIHZlbmRvci1lbmNhcHN1bGF0ZWQgb3B0aW9ucyB3aGljaCBtYXRjaCB0aGUgY2xpZW50LXN1cHBsaWVkIHZlbmRvciBjbGFzcywKKyAgICAgc2F2ZSBjbGllbnQtc3VwcGxpZWQgdmVuZG9yIGNsYXNzICovCisgIGlmICgob3B0ID0gb3B0aW9uX2ZpbmQobWVzcywgc3osIE9QVElPTl9WRU5ET1JfSUQsIDEpKSkKKyAgICB7CisgICAgICBtZW1jcHkoZGFlbW9uLT5kaGNwX2J1ZmYzLCBvcHRpb25fcHRyKG9wdCwgMCksIG9wdGlvbl9sZW4ob3B0KSk7CisgICAgICB2ZW5kb3JfY2xhc3NfbGVuID0gb3B0aW9uX2xlbihvcHQpOworICAgIH0KKyAgbWF0Y2hfdmVuZG9yX29wdHMob3B0LCBkYWVtb24tPmRoY3Bfb3B0cyk7CisgIAorICBpZiAob3B0aW9uX2Jvb2woT1BUX0xPR19PUFRTKSkKKyAgICB7CisgICAgICBpZiAoc2FuaXRpc2Uob3B0LCBkYWVtb24tPm5hbWVidWZmKSkKKwlteV9zeXNsb2coTVNfREhDUCB8IExPR19JTkZPLCBfKCIldSB2ZW5kb3IgY2xhc3M6ICVzIiksIG50b2hsKG1lc3MtPnhpZCksIGRhZW1vbi0+bmFtZWJ1ZmYpOworICAgICAgaWYgKHNhbml0aXNlKG9wdGlvbl9maW5kKG1lc3MsIHN6LCBPUFRJT05fVVNFUl9DTEFTUywgMSksIGRhZW1vbi0+bmFtZWJ1ZmYpKQorCW15X3N5c2xvZyhNU19ESENQIHwgTE9HX0lORk8sIF8oIiV1IHVzZXIgY2xhc3M6ICVzIiksIG50b2hsKG1lc3MtPnhpZCksIGRhZW1vbi0+bmFtZWJ1ZmYpOworICAgIH0KKworICBtZXNzLT5vcCA9IEJPT1RSRVBMWTsKKyAgCisgIGNvbmZpZyA9IGZpbmRfY29uZmlnKGRhZW1vbi0+ZGhjcF9jb25mLCBjb250ZXh0LCBjbGlkLCBjbGlkX2xlbiwgCisJCSAgICAgICBtZXNzLT5jaGFkZHIsIG1lc3MtPmhsZW4sIG1lc3MtPmh0eXBlLCBOVUxMKTsKKworICAvKiBzZXQgImtub3duIiB0YWcgZm9yIGtub3duIGhvc3RzICovCisgIGlmIChjb25maWcpCisgICAgeworICAgICAga25vd25faWQubmV0ID0gImtub3duIjsKKyAgICAgIGtub3duX2lkLm5leHQgPSBuZXRpZDsKKyAgICAgIG5ldGlkID0gJmtub3duX2lkOworICAgIH0KKyAgZWxzZSBpZiAoZmluZF9jb25maWcoZGFlbW9uLT5kaGNwX2NvbmYsIE5VTEwsIGNsaWQsIGNsaWRfbGVuLCAKKwkJICAgICAgIG1lc3MtPmNoYWRkciwgbWVzcy0+aGxlbiwgbWVzcy0+aHR5cGUsIE5VTEwpKQorICAgIHsKKyAgICAgIGtub3duX2lkLm5ldCA9ICJrbm93bi1vdGhlcm5ldCI7CisgICAgICBrbm93bl9pZC5uZXh0ID0gbmV0aWQ7CisgICAgICBuZXRpZCA9ICZrbm93bl9pZDsKKyAgICB9CisgIAorICBpZiAobWVzc190eXBlID09IDAgJiYgIXB4ZSkKKyAgICB7CisgICAgICAvKiBCT09UUCByZXF1ZXN0ICovCisgICAgICBzdHJ1Y3QgZGhjcF9uZXRpZCBpZCwgYm9vdHBfaWQ7CisgICAgICBzdHJ1Y3QgaW5fYWRkciAqbG9nYWRkciA9IE5VTEw7CisKKyAgICAgIC8qIG11c3QgaGF2ZSBhIE1BQyBhZGRyIGZvciBib290cCAqLworICAgICAgaWYgKG1lc3MtPmh0eXBlID09IDAgfHwgbWVzcy0+aGxlbiA9PSAwIHx8IChjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfUFJPWFkpKQorCXJldHVybiAwOworICAgICAgCisgICAgICBpZiAoaGF2ZV9jb25maWcoY29uZmlnLCBDT05GSUdfRElTQUJMRSkpCisJbWVzc2FnZSA9IF8oImRpc2FibGVkIik7CisKKyAgICAgIGVuZCA9IG1lc3MtPm9wdGlvbnMgKyA2NDsgLyogQk9PVFAgdmVuZCBhcmVhIGlzIG9ubHkgNjQgYnl0ZXMgKi8KKyAgICAgICAgICAgIAorICAgICAgaWYgKGhhdmVfY29uZmlnKGNvbmZpZywgQ09ORklHX05BTUUpKQorCXsKKwkgIGhvc3RuYW1lID0gY29uZmlnLT5ob3N0bmFtZTsKKwkgIGRvbWFpbiA9IGNvbmZpZy0+ZG9tYWluOworCX0KKworICAgICAgaWYgKGNvbmZpZykKKwl7CisJICBzdHJ1Y3QgZGhjcF9uZXRpZF9saXN0ICpsaXN0OworCisJICBmb3IgKGxpc3QgPSBjb25maWctPm5ldGlkOyBsaXN0OyBsaXN0ID0gbGlzdC0+bmV4dCkKKwkgICAgeworCSAgICAgIGxpc3QtPmxpc3QtPm5leHQgPSBuZXRpZDsKKwkgICAgICBuZXRpZCA9IGxpc3QtPmxpc3Q7CisJICAgIH0KKwl9CisKKyAgICAgIC8qIE1hdGNoIGluY29taW5nIGZpbGVuYW1lIGZpZWxkIGFzIGEgbmV0aWQuICovCisgICAgICBpZiAobWVzcy0+ZmlsZVswXSkKKwl7CisJICBtZW1jcHkoZGFlbW9uLT5kaGNwX2J1ZmYyLCBtZXNzLT5maWxlLCBzaXplb2YobWVzcy0+ZmlsZSkpOworCSAgZGFlbW9uLT5kaGNwX2J1ZmYyW3NpemVvZihtZXNzLT5maWxlKSArIDFdID0gMDsgLyogZW5zdXJlIHplcm8gdGVybS4gKi8KKwkgIGlkLm5ldCA9IChjaGFyICopZGFlbW9uLT5kaGNwX2J1ZmYyOworCSAgaWQubmV4dCA9IG5ldGlkOworCSAgbmV0aWQgPSAmaWQ7CisJfQorCisgICAgICAvKiBBZGQgImJvb3RwIiBhcyBhIHRhZyB0byBhbGxvdyBkaWZmZXJlbnQgb3B0aW9ucywgYWRkcmVzcyByYW5nZXMgZXRjCisJIGZvciBCT09UUCBjbGllbnRzICovCisgICAgICBib290cF9pZC5uZXQgPSAiYm9vdHAiOworICAgICAgYm9vdHBfaWQubmV4dCA9IG5ldGlkOworICAgICAgbmV0aWQgPSAmYm9vdHBfaWQ7CisgICAgICAKKyAgICAgIHRhZ2lmX25ldGlkID0gcnVuX3RhZ19pZihuZXRpZCk7CisKKyAgICAgIGZvciAoaWRfbGlzdCA9IGRhZW1vbi0+ZGhjcF9pZ25vcmU7IGlkX2xpc3Q7IGlkX2xpc3QgPSBpZF9saXN0LT5uZXh0KQorCWlmIChtYXRjaF9uZXRpZChpZF9saXN0LT5saXN0LCB0YWdpZl9uZXRpZCwgMCkpCisJICBtZXNzYWdlID0gXygiaWdub3JlZCIpOworICAgICAgCisgICAgICBpZiAoIW1lc3NhZ2UpCisJeworCSAgaW50IG5haWxlZCA9IDA7CisKKwkgIGlmIChoYXZlX2NvbmZpZyhjb25maWcsIENPTkZJR19BRERSKSkKKwkgICAgeworCSAgICAgIG5haWxlZCA9IDE7CisJICAgICAgbG9nYWRkciA9ICZjb25maWctPmFkZHI7CisJICAgICAgbWVzcy0+eWlhZGRyID0gY29uZmlnLT5hZGRyOworCSAgICAgIGlmICgobGVhc2UgPSBsZWFzZV9maW5kX2J5X2FkZHIoY29uZmlnLT5hZGRyKSkgJiYKKwkJICAobGVhc2UtPmh3YWRkcl9sZW4gIT0gbWVzcy0+aGxlbiB8fAorCQkgICBsZWFzZS0+aHdhZGRyX3R5cGUgIT0gbWVzcy0+aHR5cGUgfHwKKwkJICAgbWVtY21wKGxlYXNlLT5od2FkZHIsIG1lc3MtPmNoYWRkciwgbGVhc2UtPmh3YWRkcl9sZW4pICE9IDApKQorCQltZXNzYWdlID0gXygiYWRkcmVzcyBpbiB1c2UiKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgaWYgKCEobGVhc2UgPSBsZWFzZV9maW5kX2J5X2NsaWVudChtZXNzLT5jaGFkZHIsIG1lc3MtPmhsZW4sIG1lc3MtPmh0eXBlLCBOVUxMLCAwKSkgfHwKKwkJICAhYWRkcmVzc19hdmFpbGFibGUoY29udGV4dCwgbGVhc2UtPmFkZHIsIHRhZ2lmX25ldGlkKSkKKwkJeworCQkgICBpZiAobGVhc2UpCisJCSAgICAgeworCQkgICAgICAgLyogbGVhc2UgZXhpc3RzLCB3cm9uZyBuZXR3b3JrLiAqLworCQkgICAgICAgbGVhc2VfcHJ1bmUobGVhc2UsIG5vdyk7CisJCSAgICAgICBsZWFzZSA9IE5VTEw7CisJCSAgICAgfQorCQkgICBpZiAoIWFkZHJlc3NfYWxsb2NhdGUoY29udGV4dCwgJm1lc3MtPnlpYWRkciwgbWVzcy0+Y2hhZGRyLCBtZXNzLT5obGVuLCB0YWdpZl9uZXRpZCwgbm93LCBsb29wYmFjaykpCisJCSAgICAgbWVzc2FnZSA9IF8oIm5vIGFkZHJlc3MgYXZhaWxhYmxlIik7CisJCX0KKwkgICAgICBlbHNlCisJCW1lc3MtPnlpYWRkciA9IGxlYXNlLT5hZGRyOworCSAgICB9CisJICAKKwkgIGlmICghbWVzc2FnZSAmJiAhKGNvbnRleHQgPSBuYXJyb3dfY29udGV4dChjb250ZXh0LCBtZXNzLT55aWFkZHIsIG5ldGlkKSkpCisJICAgIG1lc3NhZ2UgPSBfKCJ3cm9uZyBuZXR3b3JrIik7CisJICBlbHNlIGlmIChjb250ZXh0LT5uZXRpZC5uZXQpCisJICAgIHsKKwkgICAgICBjb250ZXh0LT5uZXRpZC5uZXh0ID0gbmV0aWQ7CisJICAgICAgdGFnaWZfbmV0aWQgPSBydW5fdGFnX2lmKCZjb250ZXh0LT5uZXRpZCk7CisJICAgIH0KKworCSAgbG9nX3RhZ3ModGFnaWZfbmV0aWQsIG50b2hsKG1lc3MtPnhpZCkpOworCSAgICAKKwkgIGlmICghbWVzc2FnZSAmJiAhbmFpbGVkKQorCSAgICB7CisJICAgICAgZm9yIChpZF9saXN0ID0gZGFlbW9uLT5ib290cF9keW5hbWljOyBpZF9saXN0OyBpZF9saXN0ID0gaWRfbGlzdC0+bmV4dCkKKwkJaWYgKCghaWRfbGlzdC0+bGlzdCkgfHwgbWF0Y2hfbmV0aWQoaWRfbGlzdC0+bGlzdCwgdGFnaWZfbmV0aWQsIDApKQorCQkgIGJyZWFrOworCSAgICAgIGlmICghaWRfbGlzdCkKKwkJbWVzc2FnZSA9IF8oIm5vIGFkZHJlc3MgY29uZmlndXJlZCIpOworCSAgICB9CisKKwkgIGlmICghbWVzc2FnZSAmJiAKKwkgICAgICAhbGVhc2UgJiYgCisJICAgICAgKCEobGVhc2UgPSBsZWFzZTRfYWxsb2NhdGUobWVzcy0+eWlhZGRyKSkpKQorCSAgICBtZXNzYWdlID0gXygibm8gbGVhc2VzIGxlZnQiKTsKKwkgIAorCSAgaWYgKCFtZXNzYWdlKQorCSAgICB7CisJICAgICAgbG9nYWRkciA9ICZtZXNzLT55aWFkZHI7CisJCQorCSAgICAgIGxlYXNlX3NldF9od2FkZHIobGVhc2UsIG1lc3MtPmNoYWRkciwgTlVMTCwgbWVzcy0+aGxlbiwgbWVzcy0+aHR5cGUsIDAsIG5vdywgMSk7CisJICAgICAgaWYgKGhvc3RuYW1lKQorCQlsZWFzZV9zZXRfaG9zdG5hbWUobGVhc2UsIGhvc3RuYW1lLCAxLCBnZXRfZG9tYWluKGxlYXNlLT5hZGRyKSwgZG9tYWluKTsgCisJICAgICAgLyogaW5maW5pdGUgbGVhc2UgdW5sZXNzIG5haWxlZCBpbiBkaGNwLWhvc3QgbGluZS4gKi8KKwkgICAgICBsZWFzZV9zZXRfZXhwaXJlcyhsZWFzZSwgIAorCQkJCWhhdmVfY29uZmlnKGNvbmZpZywgQ09ORklHX1RJTUUpID8gY29uZmlnLT5sZWFzZV90aW1lIDogMHhmZmZmZmZmZiwgCisJCQkJbm93KTsgCisJICAgICAgbGVhc2Vfc2V0X2ludGVyZmFjZShsZWFzZSwgaW50X2luZGV4LCBub3cpOworCSAgICAgIAorCSAgICAgIGNsZWFyX3BhY2tldChtZXNzLCBlbmQpOworCSAgICAgIGRvX29wdGlvbnMoY29udGV4dCwgbWVzcywgZW5kLCBOVUxMLCBob3N0bmFtZSwgZ2V0X2RvbWFpbihtZXNzLT55aWFkZHIpLCAKKwkJCSBuZXRpZCwgc3VibmV0X2FkZHIsIDAsIDAsIC0xLCBOVUxMLCB2ZW5kb3JfY2xhc3NfbGVuLCBub3csIDB4ZmZmZmZmZmYsIDApOworCSAgICB9CisJfQorICAgICAgCisgICAgICBsb2dfcGFja2V0KCJCT09UUCIsIGxvZ2FkZHIsIG1lc3MtPmNoYWRkciwgbWVzcy0+aGxlbiwgaWZhY2VfbmFtZSwgTlVMTCwgbWVzc2FnZSwgbWVzcy0+eGlkKTsKKyAgICAgIAorICAgICAgcmV0dXJuIG1lc3NhZ2UgPyAwIDogZGhjcF9wYWNrZXRfc2l6ZShtZXNzLCBhZ2VudF9pZCwgcmVhbF9lbmQpOworICAgIH0KKyAgICAgIAorICBpZiAoKG9wdCA9IG9wdGlvbl9maW5kKG1lc3MsIHN6LCBPUFRJT05fQ0xJRU5UX0ZRRE4sIDMpKSkKKyAgICB7CisgICAgICAvKiBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvd2cvZGhjL2RyYWZ0LWlldGYtZGhjLWZxZG4tb3B0aW9uL2RyYWZ0LWlldGYtZGhjLWZxZG4tb3B0aW9uLTEwLnR4dCAqLworICAgICAgaW50IGxlbiA9IG9wdGlvbl9sZW4ob3B0KTsKKyAgICAgIGNoYXIgKnBxID0gZGFlbW9uLT5kaGNwX2J1ZmY7CisgICAgICB1bnNpZ25lZCBjaGFyICpwcCwgKm9wID0gb3B0aW9uX3B0cihvcHQsIDApOworICAgICAgCisgICAgICBmcWRuX2ZsYWdzID0gKm9wOworICAgICAgbGVuIC09IDM7CisgICAgICBvcCArPSAzOworICAgICAgcHAgPSBvcDsKKyAgICAgIAorICAgICAgLyogTkIsIHRoZSBmb2xsb3dpbmcgYWx3YXlzIHNldHMgYXQgbGVhc3Qgb25lIGJpdCAqLworICAgICAgaWYgKG9wdGlvbl9ib29sKE9QVF9GUUROX1VQREFURSkpCisJeworCSAgaWYgKGZxZG5fZmxhZ3MgJiAweDAxKQorCSAgICB7CisJICAgICAgZnFkbl9mbGFncyB8PSAweDAyOyAvKiBzZXQgTyAqLworCSAgICAgIGZxZG5fZmxhZ3MgJj0gfjB4MDE7IC8qIGNsZWFyIFMgKi8KKwkgICAgfQorCSAgZnFkbl9mbGFncyB8PSAweDA4OyAvKiBzZXQgTiAqLworCX0KKyAgICAgIGVsc2UgCisJeworCSAgaWYgKCEoZnFkbl9mbGFncyAmIDB4MDEpKQorCSAgICBmcWRuX2ZsYWdzIHw9IDB4MDM7IC8qIHNldCBTIGFuZCBPICovCisJICBmcWRuX2ZsYWdzICY9IH4weDA4OyAvKiBjbGVhciBOICovCisJfQorICAgICAgCisgICAgICBpZiAoZnFkbl9mbGFncyAmIDB4MDQpCisJd2hpbGUgKCpvcCAhPSAwICYmICgob3AgKyAoKm9wKSkgLSBwcCkgPCBsZW4pCisJICB7CisJICAgIG1lbWNweShwcSwgb3ArMSwgKm9wKTsKKwkgICAgcHEgKz0gKm9wOworCSAgICBvcCArPSAoKm9wKSsxOworCSAgICAqKHBxKyspID0gJy4nOworCSAgfQorICAgICAgZWxzZQorCXsKKwkgIG1lbWNweShwcSwgb3AsIGxlbik7CisJICBpZiAobGVuID4gMCAmJiBvcFtsZW4tMV0gPT0gMCkKKwkgICAgYm9ya2VuX29wdCA9IDE7CisJICBwcSArPSBsZW4gKyAxOworCX0KKyAgICAgIAorICAgICAgaWYgKHBxICE9IGRhZW1vbi0+ZGhjcF9idWZmKQorCXBxLS07CisgICAgICAKKyAgICAgICpwcSA9IDA7CisgICAgICAKKyAgICAgIGlmIChsZWdhbF9ob3N0bmFtZShkYWVtb24tPmRoY3BfYnVmZikpCisJb2ZmZXJfaG9zdG5hbWUgPSBjbGllbnRfaG9zdG5hbWUgPSBkYWVtb24tPmRoY3BfYnVmZjsKKyAgICB9CisgIGVsc2UgaWYgKChvcHQgPSBvcHRpb25fZmluZChtZXNzLCBzeiwgT1BUSU9OX0hPU1ROQU1FLCAxKSkpCisgICAgeworICAgICAgaW50IGxlbiA9IG9wdGlvbl9sZW4ob3B0KTsKKyAgICAgIG1lbWNweShkYWVtb24tPmRoY3BfYnVmZiwgb3B0aW9uX3B0cihvcHQsIDApLCBsZW4pOworICAgICAgLyogTWljcm9zb2Z0IGNsaWVudHMgYXJlIGJyb2tlbiwgYW5kIG5lZWQgemVyby10ZXJtaW5hdGVkIHN0cmluZ3MKKwkgaW4gb3B0aW9ucy4gV2UgZGV0ZWN0IHRoaXMgc3RhdGUgaGVyZSwgYW5kIGRvIHRoZSBzYW1lIGluCisJIGFueSBvcHRpb25zIHdlIHNlbmQgKi8KKyAgICAgIGlmIChsZW4gPiAwICYmIGRhZW1vbi0+ZGhjcF9idWZmW2xlbi0xXSA9PSAwKQorCWJvcmtlbl9vcHQgPSAxOworICAgICAgZWxzZQorCWRhZW1vbi0+ZGhjcF9idWZmW2xlbl0gPSAwOworICAgICAgaWYgKGxlZ2FsX2hvc3RuYW1lKGRhZW1vbi0+ZGhjcF9idWZmKSkKKwljbGllbnRfaG9zdG5hbWUgPSBkYWVtb24tPmRoY3BfYnVmZjsKKyAgICB9CisKKyAgaWYgKGNsaWVudF9ob3N0bmFtZSAmJiBvcHRpb25fYm9vbChPUFRfTE9HX09QVFMpKQorICAgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX0lORk8sIF8oIiV1IGNsaWVudCBwcm92aWRlcyBuYW1lOiAlcyIpLCBudG9obChtZXNzLT54aWQpLCBjbGllbnRfaG9zdG5hbWUpOworICAKKyAgaWYgKGhhdmVfY29uZmlnKGNvbmZpZywgQ09ORklHX05BTUUpKQorICAgIHsKKyAgICAgIGhvc3RuYW1lID0gY29uZmlnLT5ob3N0bmFtZTsKKyAgICAgIGRvbWFpbiA9IGNvbmZpZy0+ZG9tYWluOworICAgICAgaG9zdG5hbWVfYXV0aCA9IDE7CisgICAgICAvKiBiZSBjYXJlZnVsIG5vdCB0byBzZW5kIGFuIE9GRkVSIHdpdGggYSBob3N0bmFtZSBub3QgbWF0Y2hpbmcgdGhlIERJU0NPVkVSLiAqLworICAgICAgaWYgKGZxZG5fZmxhZ3MgIT0gMCB8fCAhY2xpZW50X2hvc3RuYW1lIHx8IGhvc3RuYW1lX2lzZXF1YWwoaG9zdG5hbWUsIGNsaWVudF9ob3N0bmFtZSkpCisgICAgICAgIG9mZmVyX2hvc3RuYW1lID0gaG9zdG5hbWU7CisgICAgfQorICBlbHNlIGlmIChjbGllbnRfaG9zdG5hbWUpCisgICAgeworICAgICAgZG9tYWluID0gc3RyaXBfaG9zdG5hbWUoY2xpZW50X2hvc3RuYW1lKTsKKyAgICAgIAorICAgICAgaWYgKHN0cmxlbihjbGllbnRfaG9zdG5hbWUpICE9IDApCisJeworCSAgaG9zdG5hbWUgPSBjbGllbnRfaG9zdG5hbWU7CisJICBpZiAoIWNvbmZpZykKKwkgICAgeworCSAgICAgIC8qIFNlYXJjaCBhZ2FpbiBub3cgd2UgaGF2ZSBhIGhvc3RuYW1lLiAKKwkJIE9ubHkgYWNjZXB0IGNvbmZpZ3Mgd2l0aG91dCBDTElEIGFuZCBIV0FERFIgaGVyZSwgKHRoZXkgd29uJ3QgbWF0Y2gpCisJCSB0byBhdm9pZCBpbXBlcnNvbmF0aW9uIGJ5IG5hbWUuICovCisJICAgICAgc3RydWN0IGRoY3BfY29uZmlnICpuZXcgPSBmaW5kX2NvbmZpZyhkYWVtb24tPmRoY3BfY29uZiwgY29udGV4dCwgTlVMTCwgMCwKKwkJCQkJCSAgICBtZXNzLT5jaGFkZHIsIG1lc3MtPmhsZW4sIAorCQkJCQkJICAgIG1lc3MtPmh0eXBlLCBob3N0bmFtZSk7CisJICAgICAgaWYgKG5ldyAmJiAhaGF2ZV9jb25maWcobmV3LCBDT05GSUdfQ0xJRCkgJiYgIW5ldy0+aHdhZGRyKQorCQl7CisJCSAgY29uZmlnID0gbmV3OworCQkgIC8qIHNldCAia25vd24iIHRhZyBmb3Iga25vd24gaG9zdHMgKi8KKwkJICBrbm93bl9pZC5uZXQgPSAia25vd24iOworCQkgIGtub3duX2lkLm5leHQgPSBuZXRpZDsKKwkJICBuZXRpZCA9ICZrbm93bl9pZDsKKwkJfQorCSAgICB9CisJfQorICAgIH0KKyAgCisgIGlmIChjb25maWcpCisgICAgeworICAgICAgc3RydWN0IGRoY3BfbmV0aWRfbGlzdCAqbGlzdDsKKyAgICAgIAorICAgICAgZm9yIChsaXN0ID0gY29uZmlnLT5uZXRpZDsgbGlzdDsgbGlzdCA9IGxpc3QtPm5leHQpCisJeworCSAgbGlzdC0+bGlzdC0+bmV4dCA9IG5ldGlkOworCSAgbmV0aWQgPSBsaXN0LT5saXN0OworCX0KKyAgICB9CisgIAorICB0YWdpZl9uZXRpZCA9IHJ1bl90YWdfaWYobmV0aWQpOworICAKKyAgLyogaWYgYWxsIHRoZSBuZXRpZHMgaW4gdGhlIGlnbm9yZSBsaXN0IGFyZSBwcmVzZW50LCBpZ25vcmUgdGhpcyBjbGllbnQgKi8KKyAgZm9yIChpZF9saXN0ID0gZGFlbW9uLT5kaGNwX2lnbm9yZTsgaWRfbGlzdDsgaWRfbGlzdCA9IGlkX2xpc3QtPm5leHQpCisgICAgaWYgKG1hdGNoX25ldGlkKGlkX2xpc3QtPmxpc3QsIHRhZ2lmX25ldGlkLCAwKSkKKyAgICAgIGlnbm9yZSA9IDE7CisKKyAgLyogSWYgY29uZmlndXJlZCwgd2UgY2FuIG92ZXJyaWRlIHRoZSBzZXJ2ZXItaWQgdG8gYmUgdGhlIGFkZHJlc3Mgb2YgdGhlIHJlbGF5LCAKKyAgICAgc28gdGhhdCBhbGwgdHJhZmZpYyBnb2VzIHZpYSB0aGUgcmVsYXkgYW5kIGNhbiBwaWNrIHVwIGFnZW50LWlkIGluZm8uIFRoaXMgY2FuIGJlCisgICAgIGNvbmZpZ3VyZWQgZm9yIGFsbCByZWxheXMsIG9yIGJ5IGFkZHJlc3MuICovCisgIGlmIChkYWVtb24tPm92ZXJyaWRlICYmIG1lc3MtPmdpYWRkci5zX2FkZHIgIT0gMCAmJiBvdmVycmlkZS5zX2FkZHIgPT0gMCkKKyAgICB7CisgICAgICBpZiAoIWRhZW1vbi0+b3ZlcnJpZGVfcmVsYXlzKQorCW92ZXJyaWRlID0gbWVzcy0+Z2lhZGRyOworICAgICAgZWxzZQorCXsKKwkgIHN0cnVjdCBhZGRyX2xpc3QgKmw7CisJICBmb3IgKGwgPSBkYWVtb24tPm92ZXJyaWRlX3JlbGF5czsgbDsgbCA9IGwtPm5leHQpCisJICAgIGlmIChsLT5hZGRyLnNfYWRkciA9PSBtZXNzLT5naWFkZHIuc19hZGRyKQorCSAgICAgIGJyZWFrOworCSAgaWYgKGwpCisJICAgIG92ZXJyaWRlID0gbWVzcy0+Z2lhZGRyOworCX0KKyAgICB9CisKKyAgLyogQ2FuIGhhdmUgc2V0dGluZyB0byBpZ25vcmUgdGhlIGNsaWVudCBJRCBmb3IgYSBwYXJ0aWN1bGFyIE1BQyBhZGRyZXNzIG9yIGhvc3RuYW1lICovCisgIGlmIChoYXZlX2NvbmZpZyhjb25maWcsIENPTkZJR19OT0NMSUQpKQorICAgIGNsaWQgPSBOVUxMOworICAgICAgICAgIAorICAvKiBDaGVjayBpZiBjbGllbnQgaXMgUFhFIGNsaWVudC4gKi8KKyAgaWYgKGRhZW1vbi0+ZW5hYmxlX3B4ZSAmJiAKKyAgICAgIChvcHQgPSBvcHRpb25fZmluZChtZXNzLCBzeiwgT1BUSU9OX1ZFTkRPUl9JRCwgOSkpICYmIAorICAgICAgc3RybmNtcChvcHRpb25fcHRyKG9wdCwgMCksICJQWEVDbGllbnQiLCA5KSA9PSAwKQorICAgIHsKKyAgICAgIGlmICgob3B0ID0gb3B0aW9uX2ZpbmQobWVzcywgc3osIE9QVElPTl9QWEVfVVVJRCwgMTcpKSkKKwl7CisJICBtZW1jcHkocHhlX3V1aWQsIG9wdGlvbl9wdHIob3B0LCAwKSwgMTcpOworCSAgdXVpZCA9IHB4ZV91dWlkOworCX0KKworICAgICAgLyogQ2hlY2sgaWYgdGhpcyBpcyByZWFsbHkgYSBQWEUgYm9vdHNlcnZlciByZXF1ZXN0LCBhbmQgaGFuZGxlIHNwZWNpYWxseSBpZiBzby4gKi8KKyAgICAgIGlmICgobWVzc190eXBlID09IERIQ1BSRVFVRVNUIHx8IG1lc3NfdHlwZSA9PSBESENQSU5GT1JNKSAmJgorCSAgKG9wdCA9IG9wdGlvbl9maW5kKG1lc3MsIHN6LCBPUFRJT05fVkVORE9SX0NMQVNTX09QVCwgMSkpICYmCisJICAob3B0ID0gb3B0aW9uX2ZpbmQxKG9wdGlvbl9wdHIob3B0LCAwKSwgb3B0aW9uX3B0cihvcHQsIG9wdGlvbl9sZW4ob3B0KSksIFNVQk9QVF9QWEVfQk9PVF9JVEVNLCA0KSkpCisJeworCSAgc3RydWN0IHB4ZV9zZXJ2aWNlICpzZXJ2aWNlOworCSAgaW50IHR5cGUgPSBvcHRpb25fdWludChvcHQsIDAsIDIpOworCSAgaW50IGxheWVyID0gb3B0aW9uX3VpbnQob3B0LCAyLCAyKTsKKwkgIHVuc2lnbmVkIGNoYXIgc2F2ZTcxWzRdOworCSAgc3RydWN0IGRoY3Bfb3B0IG9wdDcxOworCisJICBpZiAoaWdub3JlKQorCSAgICByZXR1cm4gMDsKKworCSAgaWYgKGxheWVyICYgMHg4MDAwKQorCSAgICB7CisJICAgICAgbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfRVJSLCBfKCJQWEUgQklTIG5vdCBzdXBwb3J0ZWQiKSk7CisJICAgICAgcmV0dXJuIDA7CisJICAgIH0KKworCSAgbWVtY3B5KHNhdmU3MSwgb3B0aW9uX3B0cihvcHQsIDApLCA0KTsKKwkgIAorCSAgZm9yIChzZXJ2aWNlID0gZGFlbW9uLT5weGVfc2VydmljZXM7IHNlcnZpY2U7IHNlcnZpY2UgPSBzZXJ2aWNlLT5uZXh0KQorCSAgICBpZiAoc2VydmljZS0+dHlwZSA9PSB0eXBlKQorCSAgICAgIGJyZWFrOworCSAgCisJICBmb3IgKDsgY29udGV4dDsgY29udGV4dCA9IGNvbnRleHQtPmN1cnJlbnQpCisJICAgIGlmIChtYXRjaF9uZXRpZChjb250ZXh0LT5maWx0ZXIsIHRhZ2lmX25ldGlkLCAxKSAmJgorCQlpc19zYW1lX25ldChtZXNzLT5jaWFkZHIsIGNvbnRleHQtPnN0YXJ0LCBjb250ZXh0LT5uZXRtYXNrKSkKKwkgICAgICBicmVhazsKKwkgIAorCSAgaWYgKCFzZXJ2aWNlIHx8ICFzZXJ2aWNlLT5iYXNlbmFtZSB8fCAhY29udGV4dCkKKwkgICAgcmV0dXJuIDA7CisJICAJICAKKwkgIGNsZWFyX3BhY2tldChtZXNzLCBlbmQpOworCSAgCisJICBtZXNzLT55aWFkZHIgPSBtZXNzLT5jaWFkZHI7CisJICBtZXNzLT5jaWFkZHIuc19hZGRyID0gMDsKKwkgIGlmIChzZXJ2aWNlLT5zbmFtZSkKKwkgICAgbWVzcy0+c2lhZGRyID0gYV9yZWNvcmRfZnJvbV9ob3N0cyhzZXJ2aWNlLT5zbmFtZSwgbm93KTsKKwkgIGVsc2UgaWYgKHNlcnZpY2UtPnNlcnZlci5zX2FkZHIgIT0gMCkKKwkgICAgbWVzcy0+c2lhZGRyID0gc2VydmljZS0+c2VydmVyOyAKKwkgIGVsc2UKKwkgICAgbWVzcy0+c2lhZGRyID0gY29udGV4dC0+bG9jYWw7IAorCSAgCisJICBpZiAoc3RyY2hyKHNlcnZpY2UtPmJhc2VuYW1lLCAnLicpKQorCSAgICBzbnByaW50ZigoY2hhciAqKW1lc3MtPmZpbGUsIHNpemVvZihtZXNzLT5maWxlKSwKKwkJIiVzIiwgc2VydmljZS0+YmFzZW5hbWUpOworCSAgZWxzZQorCSAgICBzbnByaW50ZigoY2hhciAqKW1lc3MtPmZpbGUsIHNpemVvZihtZXNzLT5maWxlKSwKKwkJIiVzLiVkIiwgc2VydmljZS0+YmFzZW5hbWUsIGxheWVyKTsKKwkgIAorCSAgb3B0aW9uX3B1dChtZXNzLCBlbmQsIE9QVElPTl9NRVNTQUdFX1RZUEUsIDEsIERIQ1BBQ0spOworCSAgb3B0aW9uX3B1dChtZXNzLCBlbmQsIE9QVElPTl9TRVJWRVJfSURFTlRJRklFUiwgSU5BRERSU1osIGh0b25sKGNvbnRleHQtPmxvY2FsLnNfYWRkcikpOworCSAgcHhlX21pc2MobWVzcywgZW5kLCB1dWlkKTsKKwkgIAorCSAgcHJ1bmVfdmVuZG9yX29wdHModGFnaWZfbmV0aWQpOworCSAgb3B0NzEudmFsID0gc2F2ZTcxOworCSAgb3B0NzEub3B0ID0gU1VCT1BUX1BYRV9CT09UX0lURU07CisJICBvcHQ3MS5sZW4gPSA0OworCSAgb3B0NzEuZmxhZ3MgPSBESE9QVF9WRU5ET1JfTUFUQ0g7CisJICBvcHQ3MS5uZXRpZCA9IE5VTEw7CisJICBvcHQ3MS5uZXh0ID0gZGFlbW9uLT5kaGNwX29wdHM7CisJICBkb19lbmNhcF9vcHRzKCZvcHQ3MSwgT1BUSU9OX1ZFTkRPUl9DTEFTU19PUFQsIERIT1BUX1ZFTkRPUl9NQVRDSCwgbWVzcywgZW5kLCAwKTsKKwkgIAorCSAgbG9nX3BhY2tldCgiUFhFIiwgJm1lc3MtPnlpYWRkciwgZW1hYywgZW1hY19sZW4sIGlmYWNlX25hbWUsIChjaGFyICopbWVzcy0+ZmlsZSwgTlVMTCwgbWVzcy0+eGlkKTsKKwkgIGxvZ190YWdzKHRhZ2lmX25ldGlkLCBudG9obChtZXNzLT54aWQpKTsKKwkgIHJldHVybiBkaGNwX3BhY2tldF9zaXplKG1lc3MsIGFnZW50X2lkLCByZWFsX2VuZCk7CSAgCisJfQorICAgICAgCisgICAgICBpZiAoKG9wdCA9IG9wdGlvbl9maW5kKG1lc3MsIHN6LCBPUFRJT05fQVJDSCwgMikpKQorCXsKKwkgIHB4ZWFyY2ggPSBvcHRpb25fdWludChvcHQsIDAsIDIpOworCisJICAvKiBwcm94eSBESENQIGhlcmUuICovCisJICBpZiAoKG1lc3NfdHlwZSA9PSBESENQRElTQ09WRVIgfHwgKHB4ZSAmJiBtZXNzX3R5cGUgPT0gREhDUFJFUVVFU1QpKSkKKwkgICAgeworCSAgICAgIHN0cnVjdCBkaGNwX2NvbnRleHQgKnRtcDsKKwkgICAgICBpbnQgd29ya2Fyb3VuZCA9IDA7CisJICAgICAgCisJICAgICAgZm9yICh0bXAgPSBjb250ZXh0OyB0bXA7IHRtcCA9IHRtcC0+Y3VycmVudCkKKwkJaWYgKCh0bXAtPmZsYWdzICYgQ09OVEVYVF9QUk9YWSkgJiYKKwkJICAgIG1hdGNoX25ldGlkKHRtcC0+ZmlsdGVyLCB0YWdpZl9uZXRpZCwgMSkpCisJCSAgYnJlYWs7CisJICAgICAgCisJICAgICAgaWYgKHRtcCkKKwkJeworCQkgIHN0cnVjdCBkaGNwX2Jvb3QgKmJvb3Q7CisJCSAgaW50IHJlZGlyZWN0NDAxMSA9IDA7CisKKwkJICBpZiAodG1wLT5uZXRpZC5uZXQpCisJCSAgICB7CisJCSAgICAgIHRtcC0+bmV0aWQubmV4dCA9IG5ldGlkOworCQkgICAgICB0YWdpZl9uZXRpZCA9IHJ1bl90YWdfaWYoJnRtcC0+bmV0aWQpOworCQkgICAgfQorCQkgIAorCQkgIGJvb3QgPSBmaW5kX2Jvb3QodGFnaWZfbmV0aWQpOworCQkgIAorCQkgIG1lc3MtPnlpYWRkci5zX2FkZHIgPSAwOworCQkgIGlmICAobWVzc190eXBlID09IERIQ1BESVNDT1ZFUiB8fCBtZXNzLT5jaWFkZHIuc19hZGRyID09IDApCisJCSAgICB7CisJCSAgICAgIG1lc3MtPmNpYWRkci5zX2FkZHIgPSAwOworCQkgICAgICBtZXNzLT5mbGFncyB8PSBodG9ucygweDgwMDApOyAvKiBicm9hZGNhc3QgKi8KKwkJICAgIH0KKwkJICAKKwkJICBjbGVhcl9wYWNrZXQobWVzcywgZW5kKTsKKwkJICAKKwkJICAvKiBSZWRpcmVjdCBFRkkgY2xpZW50cyB0byBwb3J0IDQwMTEgKi8KKwkJICBpZiAocHhlYXJjaCA+PSA2KQorCQkgICAgeworCQkgICAgICByZWRpcmVjdDQwMTEgPSAxOworCQkgICAgICBtZXNzLT5zaWFkZHIgPSB0bXAtPmxvY2FsOworCQkgICAgfQorCQkgIAorCQkgIC8qIFJldHVybnMgdHJ1ZSBpZiBvbmx5IG9uZSBtYXRjaGluZyBzZXJ2aWNlIGlzIGF2YWlsYWJsZS4gT24gcG9ydCA0MDExLCAKKwkJICAgICBpdCBhbHNvIGluc2VydHMgdGhlIGJvb3QgZmlsZSBhbmQgc2VydmVyIG5hbWUuICovCisJCSAgd29ya2Fyb3VuZCA9IHB4ZV91ZWZpX3dvcmthcm91bmQocHhlYXJjaCwgdGFnaWZfbmV0aWQsIG1lc3MsIHRtcC0+bG9jYWwsIG5vdywgcHhlKTsKKwkJICAKKwkJICBpZiAoIXdvcmthcm91bmQgJiYgYm9vdCkKKwkJICAgIHsKKwkJICAgICAgLyogUHJvdmlkZSB0aGUgYm9vdGZpbGUgaGVyZSwgZm9yIGdQWEUsIGFuZCBpbiBjYXNlIHdlIGhhdmUgbm8gbWVudSBpdGVtcworCQkJIGFuZCBzZXQgZGlzY292ZXJ5X2NvbnRyb2wgPSA4ICovCisJCSAgICAgIGlmIChib290LT5uZXh0X3NlcnZlci5zX2FkZHIpIAorCQkJbWVzcy0+c2lhZGRyID0gYm9vdC0+bmV4dF9zZXJ2ZXI7CisJCSAgICAgIGVsc2UgaWYgKGJvb3QtPnRmdHBfc25hbWUpIAorCQkJbWVzcy0+c2lhZGRyID0gYV9yZWNvcmRfZnJvbV9ob3N0cyhib290LT50ZnRwX3NuYW1lLCBub3cpOworCQkgICAgICAKKwkJICAgICAgaWYgKGJvb3QtPmZpbGUpCisJCQlzdHJuY3B5KChjaGFyICopbWVzcy0+ZmlsZSwgYm9vdC0+ZmlsZSwgc2l6ZW9mKG1lc3MtPmZpbGUpLTEpOworCQkgICAgfQorCQkgIAorCQkgIG9wdGlvbl9wdXQobWVzcywgZW5kLCBPUFRJT05fTUVTU0FHRV9UWVBFLCAxLCAKKwkJCSAgICAgbWVzc190eXBlID09IERIQ1BESVNDT1ZFUiA/IERIQ1BPRkZFUiA6IERIQ1BBQ0spOworCQkgIG9wdGlvbl9wdXQobWVzcywgZW5kLCBPUFRJT05fU0VSVkVSX0lERU5USUZJRVIsIElOQUREUlNaLCBodG9ubCh0bXAtPmxvY2FsLnNfYWRkcikpOworCQkgIHB4ZV9taXNjKG1lc3MsIGVuZCwgdXVpZCk7CisJCSAgcHJ1bmVfdmVuZG9yX29wdHModGFnaWZfbmV0aWQpOworCQkgIGlmICgocHhlICYmICF3b3JrYXJvdW5kKSB8fCAhcmVkaXJlY3Q0MDExKQorCQkgICAgZG9fZW5jYXBfb3B0cyhweGVfb3B0cyhweGVhcmNoLCB0YWdpZl9uZXRpZCwgdG1wLT5sb2NhbCwgbm93KSwgT1BUSU9OX1ZFTkRPUl9DTEFTU19PUFQsIERIT1BUX1ZFTkRPUl9NQVRDSCwgbWVzcywgZW5kLCAwKTsKKwkgICAgCisJCSAgbG9nX3BhY2tldCgiUFhFIiwgTlVMTCwgZW1hYywgZW1hY19sZW4sIGlmYWNlX25hbWUsIGlnbm9yZSA/ICJwcm94eS1pZ25vcmVkIiA6ICJwcm94eSIsIE5VTEwsIG1lc3MtPnhpZCk7CisJCSAgbG9nX3RhZ3ModGFnaWZfbmV0aWQsIG50b2hsKG1lc3MtPnhpZCkpOworCQkgIGlmICghaWdub3JlKQorCQkgICAgYXBwbHlfZGVsYXkobWVzcy0+eGlkLCByZWN2dGltZSwgdGFnaWZfbmV0aWQpOworCQkgIHJldHVybiBpZ25vcmUgPyAwIDogZGhjcF9wYWNrZXRfc2l6ZShtZXNzLCBhZ2VudF9pZCwgcmVhbF9lbmQpOwkgIAorCQl9CisJICAgIH0KKwl9CisgICAgfQorCisgIC8qIGlmIHdlJ3JlIGp1c3QgYSBwcm94eSBzZXJ2ZXIsIGdvIG5vIGZ1cnRoZXIgKi8KKyAgaWYgKChjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfUFJPWFkpIHx8IHB4ZSkKKyAgICByZXR1cm4gMDsKKyAgCisgIGlmICgob3B0ID0gb3B0aW9uX2ZpbmQobWVzcywgc3osIE9QVElPTl9SRVFVRVNURURfT1BUSU9OUywgMCkpKQorICAgIHsKKyAgICAgIHJlcV9vcHRpb25zID0gKHVuc2lnbmVkIGNoYXIgKilkYWVtb24tPmRoY3BfYnVmZjI7CisgICAgICBtZW1jcHkocmVxX29wdGlvbnMsIG9wdGlvbl9wdHIob3B0LCAwKSwgb3B0aW9uX2xlbihvcHQpKTsKKyAgICAgIHJlcV9vcHRpb25zW29wdGlvbl9sZW4ob3B0KV0gPSBPUFRJT05fRU5EOworICAgIH0KKyAgCisgIHN3aXRjaCAobWVzc190eXBlKQorICAgIHsKKyAgICBjYXNlIERIQ1BERUNMSU5FOgorICAgICAgaWYgKCEob3B0ID0gb3B0aW9uX2ZpbmQobWVzcywgc3osIE9QVElPTl9TRVJWRVJfSURFTlRJRklFUiwgSU5BRERSU1opKSB8fAorCSAgb3B0aW9uX2FkZHIob3B0KS5zX2FkZHIgIT0gc2VydmVyX2lkKGNvbnRleHQsIG92ZXJyaWRlLCBmYWxsYmFjaykuc19hZGRyKQorCXJldHVybiAwOworICAgICAgCisgICAgICAvKiBzYW5pdGlzZSBhbnkgbWVzc2FnZS4gUGFyYW5vaWQ/IE1vaT8gKi8KKyAgICAgIHNhbml0aXNlKG9wdGlvbl9maW5kKG1lc3MsIHN6LCBPUFRJT05fTUVTU0FHRSwgMSksIGRhZW1vbi0+ZGhjcF9idWZmKTsKKyAgICAgIAorICAgICAgaWYgKCEob3B0ID0gb3B0aW9uX2ZpbmQobWVzcywgc3osIE9QVElPTl9SRVFVRVNURURfSVAsIElOQUREUlNaKSkpCisJcmV0dXJuIDA7CisgICAgICAKKyAgICAgIGxvZ19wYWNrZXQoIkRIQ1BERUNMSU5FIiwgb3B0aW9uX3B0cihvcHQsIDApLCBlbWFjLCBlbWFjX2xlbiwgaWZhY2VfbmFtZSwgTlVMTCwgZGFlbW9uLT5kaGNwX2J1ZmYsIG1lc3MtPnhpZCk7CisgICAgICAKKyAgICAgIGlmIChsZWFzZSAmJiBsZWFzZS0+YWRkci5zX2FkZHIgPT0gb3B0aW9uX2FkZHIob3B0KS5zX2FkZHIpCisJbGVhc2VfcHJ1bmUobGVhc2UsIG5vdyk7CisgICAgICAKKyAgICAgIGlmIChoYXZlX2NvbmZpZyhjb25maWcsIENPTkZJR19BRERSKSAmJiAKKwkgIGNvbmZpZy0+YWRkci5zX2FkZHIgPT0gb3B0aW9uX2FkZHIob3B0KS5zX2FkZHIpCisJeworCSAgcHJldHR5cHJpbnRfdGltZShkYWVtb24tPmRoY3BfYnVmZiwgREVDTElORV9CQUNLT0ZGKTsKKwkgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX1dBUk5JTkcsIF8oImRpc2FibGluZyBESENQIHN0YXRpYyBhZGRyZXNzICVzIGZvciAlcyIpLCAKKwkJICAgIGluZXRfbnRvYShjb25maWctPmFkZHIpLCBkYWVtb24tPmRoY3BfYnVmZik7CisJICBjb25maWctPmZsYWdzIHw9IENPTkZJR19ERUNMSU5FRDsKKwkgIGNvbmZpZy0+ZGVjbGluZV90aW1lID0gbm93OworCX0KKyAgICAgIGVsc2UKKwkvKiBtYWtlIHN1cmUgdGhpcyBob3N0IGdldHMgYSBkaWZmZXJlbnQgYWRkcmVzcyBuZXh0IHRpbWUuICovCisJZm9yICg7IGNvbnRleHQ7IGNvbnRleHQgPSBjb250ZXh0LT5jdXJyZW50KQorCSAgY29udGV4dC0+YWRkcl9lcG9jaCsrOworICAgICAgCisgICAgICByZXR1cm4gMDsKKworICAgIGNhc2UgREhDUFJFTEVBU0U6CisgICAgICBpZiAoIShjb250ZXh0ID0gbmFycm93X2NvbnRleHQoY29udGV4dCwgbWVzcy0+Y2lhZGRyLCB0YWdpZl9uZXRpZCkpIHx8CisJICAhKG9wdCA9IG9wdGlvbl9maW5kKG1lc3MsIHN6LCBPUFRJT05fU0VSVkVSX0lERU5USUZJRVIsIElOQUREUlNaKSkgfHwKKwkgIG9wdGlvbl9hZGRyKG9wdCkuc19hZGRyICE9IHNlcnZlcl9pZChjb250ZXh0LCBvdmVycmlkZSwgZmFsbGJhY2spLnNfYWRkcikKKwlyZXR1cm4gMDsKKyAgICAgIAorICAgICAgaWYgKGxlYXNlICYmIGxlYXNlLT5hZGRyLnNfYWRkciA9PSBtZXNzLT5jaWFkZHIuc19hZGRyKQorCWxlYXNlX3BydW5lKGxlYXNlLCBub3cpOworICAgICAgZWxzZQorCW1lc3NhZ2UgPSBfKCJ1bmtub3duIGxlYXNlIik7CisKKyAgICAgIGxvZ19wYWNrZXQoIkRIQ1BSRUxFQVNFIiwgJm1lc3MtPmNpYWRkciwgZW1hYywgZW1hY19sZW4sIGlmYWNlX25hbWUsIE5VTEwsIG1lc3NhZ2UsIG1lc3MtPnhpZCk7CisJCisgICAgICByZXR1cm4gMDsKKyAgICAgIAorICAgIGNhc2UgREhDUERJU0NPVkVSOgorICAgICAgaWYgKGlnbm9yZSB8fCBoYXZlX2NvbmZpZyhjb25maWcsIENPTkZJR19ESVNBQkxFKSkKKwl7CisJICBpZiAob3B0aW9uX2Jvb2woT1BUX1FVSUVUX0RIQ1ApKQorCSAgICByZXR1cm4gMDsKKwkgIG1lc3NhZ2UgPSBfKCJpZ25vcmVkIik7CisJICBvcHQgPSBOVUxMOworCX0KKyAgICAgIGVsc2UgCisJeworCSAgc3RydWN0IGluX2FkZHIgYWRkciwgY29uZjsKKwkgIAorCSAgYWRkci5zX2FkZHIgPSBjb25mLnNfYWRkciA9IDA7CisKKwkgIGlmICgob3B0ID0gb3B0aW9uX2ZpbmQobWVzcywgc3osIE9QVElPTl9SRVFVRVNURURfSVAsIElOQUREUlNaKSkpCSAKKwkgICAgYWRkciA9IG9wdGlvbl9hZGRyKG9wdCk7CisJICAKKwkgIGlmIChoYXZlX2NvbmZpZyhjb25maWcsIENPTkZJR19BRERSKSkKKwkgICAgeworCSAgICAgIGNoYXIgKmFkZHJzID0gaW5ldF9udG9hKGNvbmZpZy0+YWRkcik7CisJICAgICAgCisJICAgICAgaWYgKChsdG1wID0gbGVhc2VfZmluZF9ieV9hZGRyKGNvbmZpZy0+YWRkcikpICYmIAorCQkgIGx0bXAgIT0gbGVhc2UgJiYKKwkJICAhY29uZmlnX2hhc19tYWMoY29uZmlnLCBsdG1wLT5od2FkZHIsIGx0bXAtPmh3YWRkcl9sZW4sIGx0bXAtPmh3YWRkcl90eXBlKSkKKwkJeworCQkgIGludCBsZW47CisJCSAgdW5zaWduZWQgY2hhciAqbWFjID0gZXh0ZW5kZWRfaHdhZGRyKGx0bXAtPmh3YWRkcl90eXBlLCBsdG1wLT5od2FkZHJfbGVuLAorCQkJCQkJICAgICAgIGx0bXAtPmh3YWRkciwgbHRtcC0+Y2xpZF9sZW4sIGx0bXAtPmNsaWQsICZsZW4pOworCQkgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX1dBUk5JTkcsIF8oIm5vdCB1c2luZyBjb25maWd1cmVkIGFkZHJlc3MgJXMgYmVjYXVzZSBpdCBpcyBsZWFzZWQgdG8gJXMiKSwKKwkJCSAgICBhZGRycywgcHJpbnRfbWFjKGRhZW1vbi0+bmFtZWJ1ZmYsIG1hYywgbGVuKSk7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICBzdHJ1Y3QgZGhjcF9jb250ZXh0ICp0bXA7CisJCSAgZm9yICh0bXAgPSBjb250ZXh0OyB0bXA7IHRtcCA9IHRtcC0+Y3VycmVudCkKKwkJICAgIGlmIChjb250ZXh0LT5yb3V0ZXIuc19hZGRyID09IGNvbmZpZy0+YWRkci5zX2FkZHIpCisJCSAgICAgIGJyZWFrOworCQkgIGlmICh0bXApCisJCSAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19XQVJOSU5HLCBfKCJub3QgdXNpbmcgY29uZmlndXJlZCBhZGRyZXNzICVzIGJlY2F1c2UgaXQgaXMgaW4gdXNlIGJ5IHRoZSBzZXJ2ZXIgb3IgcmVsYXkiKSwgYWRkcnMpOworCQkgIGVsc2UgaWYgKGhhdmVfY29uZmlnKGNvbmZpZywgQ09ORklHX0RFQ0xJTkVEKSAmJgorCQkJICAgZGlmZnRpbWUobm93LCBjb25maWctPmRlY2xpbmVfdGltZSkgPCAoZmxvYXQpREVDTElORV9CQUNLT0ZGKQorCQkgICAgbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfV0FSTklORywgXygibm90IHVzaW5nIGNvbmZpZ3VyZWQgYWRkcmVzcyAlcyBiZWNhdXNlIGl0IHdhcyBwcmV2aW91c2x5IGRlY2xpbmVkIiksIGFkZHJzKTsKKwkJICBlbHNlCisJCSAgICBjb25mID0gY29uZmlnLT5hZGRyOworCQl9CisJICAgIH0KKwkgIAorCSAgaWYgKGNvbmYuc19hZGRyKQorCSAgICBtZXNzLT55aWFkZHIgPSBjb25mOworCSAgZWxzZSBpZiAobGVhc2UgJiYgCisJCSAgIGFkZHJlc3NfYXZhaWxhYmxlKGNvbnRleHQsIGxlYXNlLT5hZGRyLCB0YWdpZl9uZXRpZCkgJiYgCisJCSAgICFjb25maWdfZmluZF9ieV9hZGRyZXNzKGRhZW1vbi0+ZGhjcF9jb25mLCBsZWFzZS0+YWRkcikpCisJICAgIG1lc3MtPnlpYWRkciA9IGxlYXNlLT5hZGRyOworCSAgZWxzZSBpZiAob3B0ICYmIGFkZHJlc3NfYXZhaWxhYmxlKGNvbnRleHQsIGFkZHIsIHRhZ2lmX25ldGlkKSAmJiAhbGVhc2VfZmluZF9ieV9hZGRyKGFkZHIpICYmIAorCQkgICAhY29uZmlnX2ZpbmRfYnlfYWRkcmVzcyhkYWVtb24tPmRoY3BfY29uZiwgYWRkcikgJiYgZG9faWNtcF9waW5nKG5vdywgYWRkciwgMCwgbG9vcGJhY2spKQorCSAgICBtZXNzLT55aWFkZHIgPSBhZGRyOworCSAgZWxzZSBpZiAoZW1hY19sZW4gPT0gMCkKKwkgICAgbWVzc2FnZSA9IF8oIm5vIHVuaXF1ZS1pZCIpOworCSAgZWxzZSBpZiAoIWFkZHJlc3NfYWxsb2NhdGUoY29udGV4dCwgJm1lc3MtPnlpYWRkciwgZW1hYywgZW1hY19sZW4sIHRhZ2lmX25ldGlkLCBub3csIGxvb3BiYWNrKSkKKwkgICAgbWVzc2FnZSA9IF8oIm5vIGFkZHJlc3MgYXZhaWxhYmxlIik7ICAgICAgCisJfQorICAgICAgCisgICAgICBsb2dfcGFja2V0KCJESENQRElTQ09WRVIiLCBvcHQgPyBvcHRpb25fcHRyKG9wdCwgMCkgOiBOVUxMLCBlbWFjLCBlbWFjX2xlbiwgaWZhY2VfbmFtZSwgTlVMTCwgbWVzc2FnZSwgbWVzcy0+eGlkKTsgCisKKyAgICAgIGlmIChtZXNzYWdlIHx8ICEoY29udGV4dCA9IG5hcnJvd19jb250ZXh0KGNvbnRleHQsIG1lc3MtPnlpYWRkciwgdGFnaWZfbmV0aWQpKSkKKwlyZXR1cm4gMDsKKworICAgICAgaWYgKGNvbnRleHQtPm5ldGlkLm5ldCkKKwl7CisJICBjb250ZXh0LT5uZXRpZC5uZXh0ID0gbmV0aWQ7CisJICB0YWdpZl9uZXRpZCA9IHJ1bl90YWdfaWYoJmNvbnRleHQtPm5ldGlkKTsKKwl9CisKKyAgICAgIGxvZ190YWdzKHRhZ2lmX25ldGlkLCBudG9obChtZXNzLT54aWQpKTsKKyAgICAgIGFwcGx5X2RlbGF5KG1lc3MtPnhpZCwgcmVjdnRpbWUsIHRhZ2lmX25ldGlkKTsKKyAgICAgIGxvZ19wYWNrZXQoIkRIQ1BPRkZFUiIgLCAmbWVzcy0+eWlhZGRyLCBlbWFjLCBlbWFjX2xlbiwgaWZhY2VfbmFtZSwgTlVMTCwgTlVMTCwgbWVzcy0+eGlkKTsKKyAgICAgIAorICAgICAgdGltZSA9IGNhbGNfdGltZShjb250ZXh0LCBjb25maWcsIG9wdGlvbl9maW5kKG1lc3MsIHN6LCBPUFRJT05fTEVBU0VfVElNRSwgNCkpOworICAgICAgY2xlYXJfcGFja2V0KG1lc3MsIGVuZCk7CisgICAgICBvcHRpb25fcHV0KG1lc3MsIGVuZCwgT1BUSU9OX01FU1NBR0VfVFlQRSwgMSwgREhDUE9GRkVSKTsKKyAgICAgIG9wdGlvbl9wdXQobWVzcywgZW5kLCBPUFRJT05fU0VSVkVSX0lERU5USUZJRVIsIElOQUREUlNaLCBudG9obChzZXJ2ZXJfaWQoY29udGV4dCwgb3ZlcnJpZGUsIGZhbGxiYWNrKS5zX2FkZHIpKTsKKyAgICAgIG9wdGlvbl9wdXQobWVzcywgZW5kLCBPUFRJT05fTEVBU0VfVElNRSwgNCwgdGltZSk7CisgICAgICAvKiBUMSBhbmQgVDIgYXJlIHJlcXVpcmVkIGluIERIQ1BPRkZFUiBieSBIUCdzIHdhY2t5IEpldGRpcmVjdCBjbGllbnQuICovCisgICAgICBkb19vcHRpb25zKGNvbnRleHQsIG1lc3MsIGVuZCwgcmVxX29wdGlvbnMsIG9mZmVyX2hvc3RuYW1lLCBnZXRfZG9tYWluKG1lc3MtPnlpYWRkciksIAorCQkgbmV0aWQsIHN1Ym5ldF9hZGRyLCBmcWRuX2ZsYWdzLCBib3JrZW5fb3B0LCBweGVhcmNoLCB1dWlkLCB2ZW5kb3JfY2xhc3NfbGVuLCBub3csIHRpbWUsIGZ1enopOworICAgICAgCisgICAgICByZXR1cm4gZGhjcF9wYWNrZXRfc2l6ZShtZXNzLCBhZ2VudF9pZCwgcmVhbF9lbmQpOworICAgICAgCisgICAgY2FzZSBESENQUkVRVUVTVDoKKyAgICAgIGlmIChpZ25vcmUgfHwgaGF2ZV9jb25maWcoY29uZmlnLCBDT05GSUdfRElTQUJMRSkpCisJcmV0dXJuIDA7CisgICAgICBpZiAoKG9wdCA9IG9wdGlvbl9maW5kKG1lc3MsIHN6LCBPUFRJT05fUkVRVUVTVEVEX0lQLCBJTkFERFJTWikpKQorCXsKKwkgIC8qIFNFTEVDVElORyAgb3IgSU5JVF9SRUJPT1QgKi8KKwkgIG1lc3MtPnlpYWRkciA9IG9wdGlvbl9hZGRyKG9wdCk7CisJICAKKwkgIC8qIHNlbmQgdmVuZG9yIGFuZCB1c2VyIGNsYXNzIGluZm8gZm9yIG5ldyBvciByZWNyZWF0ZWQgbGVhc2UgKi8KKwkgIGRvX2NsYXNzZXMgPSAxOworCSAgCisJICBpZiAoKG9wdCA9IG9wdGlvbl9maW5kKG1lc3MsIHN6LCBPUFRJT05fU0VSVkVSX0lERU5USUZJRVIsIElOQUREUlNaKSkpCisJICAgIHsKKwkgICAgICAvKiBTRUxFQ1RJTkcgKi8KKwkgICAgICBzZWxlY3RpbmcgPSAxOworCSAgICAgIAorCSAgICAgIGlmIChvdmVycmlkZS5zX2FkZHIgIT0gMCkKKwkJeworCQkgIGlmIChvcHRpb25fYWRkcihvcHQpLnNfYWRkciAhPSBvdmVycmlkZS5zX2FkZHIpCisJCSAgICByZXR1cm4gMDsKKwkJfQorCSAgICAgIGVsc2UgCisJCXsKKwkJICBmb3IgKDsgY29udGV4dDsgY29udGV4dCA9IGNvbnRleHQtPmN1cnJlbnQpCisJCSAgICBpZiAoY29udGV4dC0+bG9jYWwuc19hZGRyID09IG9wdGlvbl9hZGRyKG9wdCkuc19hZGRyKQorCQkgICAgICBicmVhazsKKwkJICAKKwkJICBpZiAoIWNvbnRleHQpCisJCSAgICB7CisJCSAgICAgIC8qIEhhbmRsZSB2ZXJ5IHN0cmFuZ2UgY29uZmlncyB3aGVyZSBjbGllbnRzIGhhdmUgbW9yZSB0aGFuIG9uZSByb3V0ZSB0byB0aGUgc2VydmVyLgorCQkJIElmIGEgY2xpZW50cyBpZGVhIG9mIGl0cyBzZXJ2ZXItaWQgbWF0Y2hlcyBhbnkgb2Ygb3VyIERIQ1AgaW50ZXJmYWNlcywgd2UgbGV0IGl0IHBhc3MuCisJCQkgSGF2ZSB0byBzZXQgb3ZlcnJpZGUgdG8gbWFrZSBzdXJlIHdlIGVjaG8gYmFjayB0aGUgY29ycmVjdCBzZXJ2ZXItaWQgKi8KKwkJICAgICAgc3RydWN0IGlyZWMgKmludHI7CisJCSAgICAgIAorCQkgICAgICBlbnVtZXJhdGVfaW50ZXJmYWNlcygwKTsKKworCQkgICAgICBmb3IgKGludHIgPSBkYWVtb24tPmludGVyZmFjZXM7IGludHI7IGludHIgPSBpbnRyLT5uZXh0KQorCQkJaWYgKGludHItPmFkZHIuc2Euc2FfZmFtaWx5ID09IEFGX0lORVQgJiYKKwkJCSAgICBpbnRyLT5hZGRyLmluLnNpbl9hZGRyLnNfYWRkciA9PSBvcHRpb25fYWRkcihvcHQpLnNfYWRkciAmJgorCQkJICAgIGludHItPnRmdHBfb2spCisJCQkgIGJyZWFrOworCisJCSAgICAgIGlmIChpbnRyKQorCQkJb3ZlcnJpZGUgPSBpbnRyLT5hZGRyLmluLnNpbl9hZGRyOworCQkgICAgICBlbHNlCisJCQl7CisJCQkgIC8qIEluIGF1dGggbW9kZSwgYSBSRVFVRVNUIHNlbnQgdG8gdGhlIHdyb25nIHNlcnZlcgorCQkJICAgICBzaG91bGQgYmUgZmF1bHRlZCwgc28gdGhhdCB0aGUgY2xpZW50IGVzdGFibGlzaGVzIAorCQkJICAgICBjb21tdW5pY2F0aW9uIHdpdGggdXMsIG90aGVyd2lzZSwgc2lsZW50bHkgaWdub3JlLiAqLworCQkJICBpZiAoIW9wdGlvbl9ib29sKE9QVF9BVVRIT1JJVEFUSVZFKSkKKwkJCSAgICByZXR1cm4gMDsKKwkJCSAgbWVzc2FnZSA9IF8oIndyb25nIHNlcnZlci1JRCIpOworCQkJfQorCQkgICAgfQorCQl9CisKKwkgICAgICAvKiBJZiBhIGxlYXNlIGV4aXN0cyBmb3IgdGhpcyBob3N0IGFuZCBhbm90aGVyIGFkZHJlc3MsIHNxdWFzaCBpdC4gKi8KKwkgICAgICBpZiAobGVhc2UgJiYgbGVhc2UtPmFkZHIuc19hZGRyICE9IG1lc3MtPnlpYWRkci5zX2FkZHIpCisJCXsKKwkJICBsZWFzZV9wcnVuZShsZWFzZSwgbm93KTsKKwkJICBsZWFzZSA9IE5VTEw7CisJCX0KKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgLyogSU5JVC1SRUJPT1QgKi8KKwkgICAgICBpZiAoIWxlYXNlICYmICFvcHRpb25fYm9vbChPUFRfQVVUSE9SSVRBVElWRSkpCisJCXJldHVybiAwOworCSAgICAgIAorCSAgICAgIGlmIChsZWFzZSAmJiBsZWFzZS0+YWRkci5zX2FkZHIgIT0gbWVzcy0+eWlhZGRyLnNfYWRkcikKKwkJbWVzc2FnZSA9IF8oIndyb25nIGFkZHJlc3MiKTsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwl7CisJICAvKiBSRU5FV0lORyBvciBSRUJJTkRJTkcgKi8gCisJICAvKiBDaGVjayBleGlzdGluZyBsZWFzZSBmb3IgdGhpcyBhZGRyZXNzLgorCSAgICAgV2UgYWxsb3cgaXQgdG8gYmUgbWlzc2luZyBpZiBkaGNwLWF1dGhvcml0YXRpdmUgbW9kZQorCSAgICAgYXMgbG9uZyBhcyB3ZSBjYW4gYWxsb2NhdGUgdGhlIGxlYXNlIG5vdyAtIGNoZWNrZWQgYmVsb3cuCisJICAgICBUaGlzIG1ha2VzIGZvciBhIHNtb290aCByZWNvdmVyeSBmcm9tIGEgbG9zdCBsZWFzZSBEQiAqLworCSAgaWYgKChsZWFzZSAmJiBtZXNzLT5jaWFkZHIuc19hZGRyICE9IGxlYXNlLT5hZGRyLnNfYWRkcikgfHwKKwkgICAgICAoIWxlYXNlICYmICFvcHRpb25fYm9vbChPUFRfQVVUSE9SSVRBVElWRSkpKQorCSAgICB7CisJICAgICAgLyogQSBjbGllbnQgcmViaW5kaW5nIHdpbGwgYnJvYWRjYXN0IHRoZSByZXF1ZXN0LCBzbyB3ZSBtYXkgc2VlIGl0IGV2ZW4gCisJCSBpZiB0aGUgbGVhc2UgaXMgaGVsZCBieSBhbm90aGVyIHNlcnZlci4gSnVzdCBpZ25vcmUgaXQgaW4gdGhhdCBjYXNlLiAKKwkJIElmIHRoZSByZXF1ZXN0IGlzIHVuaWNhc3QgdG8gdXMsIHRoZW4gc29tZXRoaW5ncyB3cm9uZywgTkFLICovCisJICAgICAgaWYgKCF1bmljYXN0X2Rlc3QpCisJCXJldHVybiAwOworCSAgICAgIG1lc3NhZ2UgPSBfKCJsZWFzZSBub3QgZm91bmQiKTsKKwkgICAgICAvKiBlbnN1cmUgd2UgYnJvYWRjYXN0IE5BSyAqLworCSAgICAgIHVuaWNhc3RfZGVzdCA9IDA7CisJICAgIH0KKworCSAgLyogZGVzeW5jaHJvbmlzZSByZW5ld2FscyAqLworCSAgZnV6eiA9IHJhbmQxNigpOworCSAgbWVzcy0+eWlhZGRyID0gbWVzcy0+Y2lhZGRyOworCX0KKyAgICAgIAorICAgICAgbG9nX3BhY2tldCgiREhDUFJFUVVFU1QiLCAmbWVzcy0+eWlhZGRyLCBlbWFjLCBlbWFjX2xlbiwgaWZhY2VfbmFtZSwgTlVMTCwgTlVMTCwgbWVzcy0+eGlkKTsKKyAKKyAgICAgIGlmICghbWVzc2FnZSkKKwl7CisJICBzdHJ1Y3QgZGhjcF9jb25maWcgKmFkZHJfY29uZmlnOworCSAgc3RydWN0IGRoY3BfY29udGV4dCAqdG1wID0gTlVMTDsKKwkgIAorCSAgaWYgKGhhdmVfY29uZmlnKGNvbmZpZywgQ09ORklHX0FERFIpKQorCSAgICBmb3IgKHRtcCA9IGNvbnRleHQ7IHRtcDsgdG1wID0gdG1wLT5jdXJyZW50KQorCSAgICAgIGlmIChjb250ZXh0LT5yb3V0ZXIuc19hZGRyID09IGNvbmZpZy0+YWRkci5zX2FkZHIpCisJCWJyZWFrOworCSAgCisJICBpZiAoIShjb250ZXh0ID0gbmFycm93X2NvbnRleHQoY29udGV4dCwgbWVzcy0+eWlhZGRyLCB0YWdpZl9uZXRpZCkpKQorCSAgICB7CisJICAgICAgLyogSWYgYSBtYWNoaW5lIG1vdmVzIG5ldHdvcmtzIHdoaWxzdCBpdCBoYXMgYSBsZWFzZSwgd2UgY2F0Y2ggdGhhdCBoZXJlLiAqLworCSAgICAgIG1lc3NhZ2UgPSBfKCJ3cm9uZyBuZXR3b3JrIik7CisJICAgICAgLyogZW5zdXJlIHdlIGJyb2FkY2FzdCBOQUsgKi8KKwkgICAgICB1bmljYXN0X2Rlc3QgPSAwOworCSAgICB9CisJICAKKwkgIC8qIENoZWNrIGZvciByZW5ld2FsIG9mIGEgbGVhc2Ugd2hpY2ggaXMgb3V0c2lkZSB0aGUgYWxsb3dlZCByYW5nZS4gKi8KKwkgIGVsc2UgaWYgKCFhZGRyZXNzX2F2YWlsYWJsZShjb250ZXh0LCBtZXNzLT55aWFkZHIsIHRhZ2lmX25ldGlkKSAmJgorCQkgICAoIWhhdmVfY29uZmlnKGNvbmZpZywgQ09ORklHX0FERFIpIHx8IGNvbmZpZy0+YWRkci5zX2FkZHIgIT0gbWVzcy0+eWlhZGRyLnNfYWRkcikpCisJICAgIG1lc3NhZ2UgPSBfKCJhZGRyZXNzIG5vdCBhdmFpbGFibGUiKTsKKwkgIAorCSAgLyogQ2hlY2sgaWYgYSBuZXcgc3RhdGljIGFkZHJlc3MgaGFzIGJlZW4gY29uZmlndXJlZC4gQmUgdmVyeSBzdXJlIHRoYXQKKwkgICAgIHdoZW4gdGhlIGNsaWVudCBkb2VzIERJU0NPVkVSLCBpdCB3aWxsIGdldCB0aGUgc3RhdGljIGFkZHJlc3MsIG90aGVyd2lzZQorCSAgICAgYW4gZW5kbGVzcyBwcm90b2NvbCBsb29wIHdpbGwgZW5zdWUuICovCisJICBlbHNlIGlmICghdG1wICYmICFzZWxlY3RpbmcgJiYKKwkJICAgaGF2ZV9jb25maWcoY29uZmlnLCBDT05GSUdfQUREUikgJiYgCisJCSAgICghaGF2ZV9jb25maWcoY29uZmlnLCBDT05GSUdfREVDTElORUQpIHx8CisJCSAgICBkaWZmdGltZShub3csIGNvbmZpZy0+ZGVjbGluZV90aW1lKSA+IChmbG9hdClERUNMSU5FX0JBQ0tPRkYpICYmCisJCSAgIGNvbmZpZy0+YWRkci5zX2FkZHIgIT0gbWVzcy0+eWlhZGRyLnNfYWRkciAmJgorCQkgICAoIShsdG1wID0gbGVhc2VfZmluZF9ieV9hZGRyKGNvbmZpZy0+YWRkcikpIHx8IGx0bXAgPT0gbGVhc2UpKQorCSAgICBtZXNzYWdlID0gXygic3RhdGljIGxlYXNlIGF2YWlsYWJsZSIpOworCisJICAvKiBDaGVjayB0byBzZWUgaWYgdGhlIGFkZHJlc3MgaXMgcmVzZXJ2ZWQgYXMgYSBzdGF0aWMgYWRkcmVzcyBmb3IgYW5vdGhlciBob3N0ICovCisJICBlbHNlIGlmICgoYWRkcl9jb25maWcgPSBjb25maWdfZmluZF9ieV9hZGRyZXNzKGRhZW1vbi0+ZGhjcF9jb25mLCBtZXNzLT55aWFkZHIpKSAmJiBhZGRyX2NvbmZpZyAhPSBjb25maWcpCisJICAgIG1lc3NhZ2UgPSBfKCJhZGRyZXNzIHJlc2VydmVkIik7CisKKwkgIGVsc2UgaWYgKCFsZWFzZSAmJiAobHRtcCA9IGxlYXNlX2ZpbmRfYnlfYWRkcihtZXNzLT55aWFkZHIpKSkKKwkgICAgeworCSAgICAgIC8qIElmIGEgaG9zdCBpcyBjb25maWd1cmVkIHdpdGggbW9yZSB0aGFuIG9uZSBNQUMgYWRkcmVzcywgaXQncyBPSyB0byAnbml4IAorCQkgYSBsZWFzZSBmcm9tIG9uZSBvZiBpdCdzIE1BQ3MgdG8gZ2l2ZSB0aGUgYWRkcmVzcyB0byBhbm90aGVyLiAqLworCSAgICAgIGlmIChjb25maWcgJiYgY29uZmlnX2hhc19tYWMoY29uZmlnLCBsdG1wLT5od2FkZHIsIGx0bXAtPmh3YWRkcl9sZW4sIGx0bXAtPmh3YWRkcl90eXBlKSkKKwkJeworCQkgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX0lORk8sIF8oImFiYW5kb25pbmcgbGVhc2UgdG8gJXMgb2YgJXMiKSwKKwkJCSAgICBwcmludF9tYWMoZGFlbW9uLT5uYW1lYnVmZiwgbHRtcC0+aHdhZGRyLCBsdG1wLT5od2FkZHJfbGVuKSwgCisJCQkgICAgaW5ldF9udG9hKGx0bXAtPmFkZHIpKTsKKwkJICBsZWFzZSA9IGx0bXA7CisJCX0KKwkgICAgICBlbHNlCisJCW1lc3NhZ2UgPSBfKCJhZGRyZXNzIGluIHVzZSIpOworCSAgICB9CisKKwkgIGlmICghbWVzc2FnZSkKKwkgICAgeworCSAgICAgIGlmIChlbWFjX2xlbiA9PSAwKQorCQltZXNzYWdlID0gXygibm8gdW5pcXVlLWlkIik7CisJICAgICAgCisJICAgICAgZWxzZSBpZiAoIWxlYXNlKQorCQl7CSAgICAgCisJCSAgaWYgKChsZWFzZSA9IGxlYXNlNF9hbGxvY2F0ZShtZXNzLT55aWFkZHIpKSkKKwkJICAgIGRvX2NsYXNzZXMgPSAxOworCQkgIGVsc2UKKwkJICAgIG1lc3NhZ2UgPSBfKCJubyBsZWFzZXMgbGVmdCIpOworCQl9CisJICAgIH0KKwl9CisKKyAgICAgIGlmIChtZXNzYWdlKQorCXsKKwkgIGxvZ19wYWNrZXQoIkRIQ1BOQUsiLCAmbWVzcy0+eWlhZGRyLCBlbWFjLCBlbWFjX2xlbiwgaWZhY2VfbmFtZSwgTlVMTCwgbWVzc2FnZSwgbWVzcy0+eGlkKTsKKwkgIAorCSAgbWVzcy0+eWlhZGRyLnNfYWRkciA9IDA7CisJICBjbGVhcl9wYWNrZXQobWVzcywgZW5kKTsKKwkgIG9wdGlvbl9wdXQobWVzcywgZW5kLCBPUFRJT05fTUVTU0FHRV9UWVBFLCAxLCBESENQTkFLKTsKKwkgIG9wdGlvbl9wdXQobWVzcywgZW5kLCBPUFRJT05fU0VSVkVSX0lERU5USUZJRVIsIElOQUREUlNaLCBudG9obChzZXJ2ZXJfaWQoY29udGV4dCwgb3ZlcnJpZGUsIGZhbGxiYWNrKS5zX2FkZHIpKTsKKwkgIG9wdGlvbl9wdXRfc3RyaW5nKG1lc3MsIGVuZCwgT1BUSU9OX01FU1NBR0UsIG1lc3NhZ2UsIGJvcmtlbl9vcHQpOworCSAgLyogVGhpcyBmaXhlcyBhIHByb2JsZW0gd2l0aCB0aGUgREhDUCBzcGVjLCBicm9hZGNhc3RpbmcgYSBOQUsgdG8gYSBob3N0IG9uIAorCSAgICAgYSBkaXN0YW50IHN1Ym5ldCB3aGljaCB1bmljYXN0IGEgUkVRIHRvIHVzIHdvbid0IHdvcmsuICovCisJICBpZiAoIXVuaWNhc3RfZGVzdCB8fCBtZXNzLT5naWFkZHIuc19hZGRyICE9IDAgfHwgCisJICAgICAgbWVzcy0+Y2lhZGRyLnNfYWRkciA9PSAwIHx8IGlzX3NhbWVfbmV0KGNvbnRleHQtPmxvY2FsLCBtZXNzLT5jaWFkZHIsIGNvbnRleHQtPm5ldG1hc2spKQorCSAgICB7CisJICAgICAgbWVzcy0+ZmxhZ3MgfD0gaHRvbnMoMHg4MDAwKTsgLyogYnJvYWRjYXN0ICovCisJICAgICAgbWVzcy0+Y2lhZGRyLnNfYWRkciA9IDA7CisJICAgIH0KKwl9CisgICAgICBlbHNlCisJeworCSAgaWYgKGNvbnRleHQtPm5ldGlkLm5ldCkKKwkgICAgeworCSAgICAgIGNvbnRleHQtPm5ldGlkLm5leHQgPSBuZXRpZDsKKwkgICAgICB0YWdpZl9uZXRpZCA9IHJ1bl90YWdfaWYoICZjb250ZXh0LT5uZXRpZCk7CisJICAgIH0KKworCSAgbG9nX3RhZ3ModGFnaWZfbmV0aWQsIG50b2hsKG1lc3MtPnhpZCkpOworCSAgCisJICBpZiAoZG9fY2xhc3NlcykKKwkgICAgeworCSAgICAgIC8qIHBpY2sgdXAgSU5JVC1SRUJPT1QgZXZlbnRzLiAqLworCSAgICAgIGxlYXNlLT5mbGFncyB8PSBMRUFTRV9DSEFOR0VEOworCisJICAgICAgaWYgKChvcHQgPSBvcHRpb25fZmluZChtZXNzLCBzeiwgT1BUSU9OX1JFUVVFU1RFRF9PUFRJT05TLCAwKSkpCisJCXsKKwkJICBpbnQgbGVuID0gc2l6ZW9mKGxlYXNlLT5yZXFfb3B0aW9ucykgLSAxOworCQkgIGlmIChvcHRpb25fbGVuKG9wdCkgPCBsZW4pIHsKKwkJICAgIGxlbiA9IG9wdGlvbl9sZW4ob3B0KTsKKwkJICB9CisJCSAgbWVtY3B5KGxlYXNlLT5yZXFfb3B0aW9ucywgb3B0aW9uX3B0cihvcHQsIDApLCBsZW4pOworCQkgIGxlYXNlLT5yZXFfb3B0aW9uc1tsZW5dID0gT1BUSU9OX0VORDsKKwkJfQorCisjaWZkZWYgSEFWRV9TQ1JJUFQKKwkgICAgICBpZiAoZGFlbW9uLT5sZWFzZV9jaGFuZ2VfY29tbWFuZCkKKwkJeworCQkgIHN0cnVjdCBkaGNwX25ldGlkICpuOworCQkgIAorCQkgIGlmIChtZXNzLT5naWFkZHIuc19hZGRyKQorCQkgICAgbGVhc2UtPmdpYWRkciA9IG1lc3MtPmdpYWRkcjsKKwkJICAKKwkJICBmcmVlKGxlYXNlLT5leHRyYWRhdGEpOworCQkgIGxlYXNlLT5leHRyYWRhdGEgPSBOVUxMOworCQkgIGxlYXNlLT5leHRyYWRhdGFfc2l6ZSA9IGxlYXNlLT5leHRyYWRhdGFfbGVuID0gMDsKKwkJICAKKwkJICBhZGRfZXh0cmFkYXRhX29wdChsZWFzZSwgb3B0aW9uX2ZpbmQobWVzcywgc3osIE9QVElPTl9WRU5ET1JfSUQsIDEpKTsKKwkJICBhZGRfZXh0cmFkYXRhX29wdChsZWFzZSwgb3B0aW9uX2ZpbmQobWVzcywgc3osIE9QVElPTl9IT1NUTkFNRSwgMSkpOworCQkgIGFkZF9leHRyYWRhdGFfb3B0KGxlYXNlLCBvdWkpOworCQkgIGFkZF9leHRyYWRhdGFfb3B0KGxlYXNlLCBzZXJpYWwpOworCQkgIGFkZF9leHRyYWRhdGFfb3B0KGxlYXNlLCBjbGFzcyk7CisKKwkJICBpZiAoKG9wdCA9IG9wdGlvbl9maW5kKG1lc3MsIHN6LCBPUFRJT05fQUdFTlRfSUQsIDEpKSkKKwkJICAgIHsKKwkJICAgICAgYWRkX2V4dHJhZGF0YV9vcHQobGVhc2UsIG9wdGlvbl9maW5kMShvcHRpb25fcHRyKG9wdCwgMCksIG9wdGlvbl9wdHIob3B0LCBvcHRpb25fbGVuKG9wdCkpLCBTVUJPUFRfQ0lSQ1VJVF9JRCwgMSkpOworCQkgICAgICBhZGRfZXh0cmFkYXRhX29wdChsZWFzZSwgb3B0aW9uX2ZpbmQxKG9wdGlvbl9wdHIob3B0LCAwKSwgb3B0aW9uX3B0cihvcHQsIG9wdGlvbl9sZW4ob3B0KSksIFNVQk9QVF9TVUJTQ1JfSUQsIDEpKTsKKwkJICAgICAgYWRkX2V4dHJhZGF0YV9vcHQobGVhc2UsIG9wdGlvbl9maW5kMShvcHRpb25fcHRyKG9wdCwgMCksIG9wdGlvbl9wdHIob3B0LCBvcHRpb25fbGVuKG9wdCkpLCBTVUJPUFRfUkVNT1RFX0lELCAxKSk7CisJCSAgICB9CisJCSAgZWxzZQorCQkgICAgeworCQkgICAgICBhZGRfZXh0cmFkYXRhX29wdChsZWFzZSwgTlVMTCk7CisJCSAgICAgIGFkZF9leHRyYWRhdGFfb3B0KGxlYXNlLCBOVUxMKTsKKwkJICAgICAgYWRkX2V4dHJhZGF0YV9vcHQobGVhc2UsIE5VTEwpOworCQkgICAgfQorCisJCSAgLyogRE5TTUFTUV9SRVFVRVNURURfT1BUSU9OUyAqLworCQkgIGlmICgob3B0ID0gb3B0aW9uX2ZpbmQobWVzcywgc3osIE9QVElPTl9SRVFVRVNURURfT1BUSU9OUywgMSkpKQorCQkgICAgeworCQkgICAgICBpbnQgbGVuID0gb3B0aW9uX2xlbihvcHQpOworCQkgICAgICB1bnNpZ25lZCBjaGFyICpyb3AgPSBvcHRpb25fcHRyKG9wdCwgMCk7CisJCSAgICAgIGNoYXIgKnEgPSBkYWVtb24tPm5hbWVidWZmOworCQkgICAgICBpbnQgaTsKKwkJICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQkgICAgICAgIHsKKwkJICAgICAgICAgIHEgKz0gc25wcmludGYocSwgTUFYRE5BTUUgLSAocSAtIGRhZW1vbi0+bmFtZWJ1ZmYpLCAiJWQlcyIsIHJvcFtpXSwgaSArIDEgPT0gbGVuID8gIiIgOiAiLCIpOworCQkgICAgICAgIH0KKwkJICAgICAgbGVhc2VfYWRkX2V4dHJhZGF0YShsZWFzZSwgKHVuc2lnbmVkIGNoYXIgKilkYWVtb24tPm5hbWVidWZmLCAocSAtIGRhZW1vbi0+bmFtZWJ1ZmYpLCAwKTsgCisJCSAgICB9CisJCSAgZWxzZQorCQkgICAgeworCQkgICAgICBhZGRfZXh0cmFkYXRhX29wdChsZWFzZSwgTlVMTCk7CisJCSAgICB9CisKKwkJICAvKiBzcGFjZS1jb25jYXQgdGFnIHNldCAqLworCQkgIGlmICghdGFnaWZfbmV0aWQpCisJCSAgICBhZGRfZXh0cmFkYXRhX29wdChsZWFzZSwgTlVMTCk7CisJCSAgZWxzZQorCQkgICAgZm9yIChuID0gdGFnaWZfbmV0aWQ7IG47IG4gPSBuLT5uZXh0KQorCQkgICAgICB7CisJCQlzdHJ1Y3QgZGhjcF9uZXRpZCAqbjE7CisJCQkvKiBraWxsIGR1cGVzICovCisJCQlmb3IgKG4xID0gbi0+bmV4dDsgbjE7IG4xID0gbjEtPm5leHQpCisJCQkgIGlmIChzdHJjbXAobi0+bmV0LCBuMS0+bmV0KSA9PSAwKQorCQkJICAgIGJyZWFrOworCQkJaWYgKCFuMSkKKwkJCSAgbGVhc2VfYWRkX2V4dHJhZGF0YShsZWFzZSwgKHVuc2lnbmVkIGNoYXIgKiluLT5uZXQsIHN0cmxlbihuLT5uZXQpLCBuLT5uZXh0ID8gJyAnIDogMCk7IAorCQkgICAgICB9CisJCSAgCisJCSAgaWYgKChvcHQgPSBvcHRpb25fZmluZChtZXNzLCBzeiwgT1BUSU9OX1VTRVJfQ0xBU1MsIDEpKSkKKwkJICAgIHsKKwkJICAgICAgaW50IGxlbiA9IG9wdGlvbl9sZW4ob3B0KTsKKwkJICAgICAgdW5zaWduZWQgY2hhciAqdWNwID0gb3B0aW9uX3B0cihvcHQsIDApOworCQkgICAgICAvKiBJZiB0aGUgdXNlci1jbGFzcyBvcHRpb24gc3RhcnRlZCBhcyBjb3VudGVkIHN0cmluZ3MsIHRoZSBmaXJzdCBieXRlIHdpbGwgYmUgemVyby4gKi8KKwkJICAgICAgaWYgKGxlbiAhPSAwICYmIHVjcFswXSA9PSAwKQorCQkJdWNwKyssIGxlbi0tOworCQkgICAgICBsZWFzZV9hZGRfZXh0cmFkYXRhKGxlYXNlLCB1Y3AsIGxlbiwgLTEpOworCQkgICAgfQorCQl9CisjZW5kaWYKKwkgICAgfQorCSAgCisJICBpZiAoIWhvc3RuYW1lX2F1dGggJiYgKGNsaWVudF9ob3N0bmFtZSA9IGhvc3RfZnJvbV9kbnMobWVzcy0+eWlhZGRyKSkpCisJICAgIHsKKwkgICAgICBkb21haW4gPSBnZXRfZG9tYWluKG1lc3MtPnlpYWRkcik7CisJICAgICAgaG9zdG5hbWUgPSBjbGllbnRfaG9zdG5hbWU7CisJICAgICAgaG9zdG5hbWVfYXV0aCA9IDE7CisJICAgIH0KKwkgIAorCSAgdGltZSA9IGNhbGNfdGltZShjb250ZXh0LCBjb25maWcsIG9wdGlvbl9maW5kKG1lc3MsIHN6LCBPUFRJT05fTEVBU0VfVElNRSwgNCkpOworCSAgbGVhc2Vfc2V0X2h3YWRkcihsZWFzZSwgbWVzcy0+Y2hhZGRyLCBjbGlkLCBtZXNzLT5obGVuLCBtZXNzLT5odHlwZSwgY2xpZF9sZW4sIG5vdywgZG9fY2xhc3Nlcyk7CisJICAKKwkgIC8qIGlmIGFsbCB0aGUgbmV0aWRzIGluIHRoZSBpZ25vcmVfbmFtZSBsaXN0IGFyZSBwcmVzZW50LCBpZ25vcmUgY2xpZW50LXN1cHBsaWVkIG5hbWUgKi8KKwkgIGlmICghaG9zdG5hbWVfYXV0aCkKKwkgICAgeworCSAgICAgIGZvciAoaWRfbGlzdCA9IGRhZW1vbi0+ZGhjcF9pZ25vcmVfbmFtZXM7IGlkX2xpc3Q7IGlkX2xpc3QgPSBpZF9saXN0LT5uZXh0KQorCQlpZiAoKCFpZF9saXN0LT5saXN0KSB8fCBtYXRjaF9uZXRpZChpZF9saXN0LT5saXN0LCB0YWdpZl9uZXRpZCwgMCkpCisJCSAgYnJlYWs7CisJICAgICAgaWYgKGlkX2xpc3QpCisJCWhvc3RuYW1lID0gTlVMTDsKKwkgICAgfQorCSAgCisJICAvKiBMYXN0IGRpdGNoLCBpZiBjb25maWd1cmVkLCBnZW5lcmF0ZSBob3N0bmFtZSBmcm9tIG1hYyBhZGRyZXNzICovCisJICBpZiAoIWhvc3RuYW1lICYmIGVtYWNfbGVuICE9IDApCisJICAgIHsKKwkgICAgICBmb3IgKGlkX2xpc3QgPSBkYWVtb24tPmRoY3BfZ2VuX25hbWVzOyBpZF9saXN0OyBpZF9saXN0ID0gaWRfbGlzdC0+bmV4dCkKKwkJaWYgKCghaWRfbGlzdC0+bGlzdCkgfHwgbWF0Y2hfbmV0aWQoaWRfbGlzdC0+bGlzdCwgdGFnaWZfbmV0aWQsIDApKQorCQkgIGJyZWFrOworCSAgICAgIGlmIChpZF9saXN0KQorCQl7CisJCSAgaW50IGk7CisKKwkJICBob3N0bmFtZSA9IGRhZW1vbi0+ZGhjcF9idWZmOworCQkgIC8qIGJ1ZmZlciBpcyAyNTYgYnl0ZXMsIDMgYnl0ZXMgcGVyIG9jdGV0ICovCisJCSAgZm9yIChpID0gMDsgKGkgPCBlbWFjX2xlbikgJiYgKGkgPCA4MCk7IGkrKykKKwkJICAgIGhvc3RuYW1lICs9IHNwcmludGYoaG9zdG5hbWUsICIlLjJ4JXMiLCBlbWFjW2ldLCAoaSA9PSBlbWFjX2xlbiAtIDEpID8gIiIgOiAiLSIpOworCQkgIGhvc3RuYW1lID0gZGFlbW9uLT5kaGNwX2J1ZmY7CisJCX0KKwkgICAgfQorCisJICBpZiAoaG9zdG5hbWUpCisJICAgIGxlYXNlX3NldF9ob3N0bmFtZShsZWFzZSwgaG9zdG5hbWUsIGhvc3RuYW1lX2F1dGgsIGdldF9kb21haW4obGVhc2UtPmFkZHIpLCBkb21haW4pOworCSAgCisJICBsZWFzZV9zZXRfZXhwaXJlcyhsZWFzZSwgdGltZSwgbm93KTsKKwkgIGxlYXNlX3NldF9pbnRlcmZhY2UobGVhc2UsIGludF9pbmRleCwgbm93KTsKKworCSAgaWYgKG92ZXJyaWRlLnNfYWRkciAhPSAwKQorCSAgICBsZWFzZS0+b3ZlcnJpZGUgPSBvdmVycmlkZTsKKwkgIGVsc2UKKwkgICAgb3ZlcnJpZGUgPSBsZWFzZS0+b3ZlcnJpZGU7CisKKwkgIGxvZ19wYWNrZXQoIkRIQ1BBQ0siLCAmbWVzcy0+eWlhZGRyLCBlbWFjLCBlbWFjX2xlbiwgaWZhY2VfbmFtZSwgaG9zdG5hbWUsIE5VTEwsIG1lc3MtPnhpZCk7ICAKKwkgIAorCSAgY2xlYXJfcGFja2V0KG1lc3MsIGVuZCk7CisJICBvcHRpb25fcHV0KG1lc3MsIGVuZCwgT1BUSU9OX01FU1NBR0VfVFlQRSwgMSwgREhDUEFDSyk7CisJICBvcHRpb25fcHV0KG1lc3MsIGVuZCwgT1BUSU9OX1NFUlZFUl9JREVOVElGSUVSLCBJTkFERFJTWiwgbnRvaGwoc2VydmVyX2lkKGNvbnRleHQsIG92ZXJyaWRlLCBmYWxsYmFjaykuc19hZGRyKSk7CisJICBvcHRpb25fcHV0KG1lc3MsIGVuZCwgT1BUSU9OX0xFQVNFX1RJTUUsIDQsIHRpbWUpOworCSAgZG9fb3B0aW9ucyhjb250ZXh0LCBtZXNzLCBlbmQsIHJlcV9vcHRpb25zLCBob3N0bmFtZSwgZ2V0X2RvbWFpbihtZXNzLT55aWFkZHIpLCAKKwkJICAgICBuZXRpZCwgc3VibmV0X2FkZHIsIGZxZG5fZmxhZ3MsIGJvcmtlbl9vcHQsIHB4ZWFyY2gsIHV1aWQsIHZlbmRvcl9jbGFzc19sZW4sIG5vdywgdGltZSwgZnV6eik7CisJfQorCisgICAgICByZXR1cm4gZGhjcF9wYWNrZXRfc2l6ZShtZXNzLCBhZ2VudF9pZCwgcmVhbF9lbmQpOyAKKyAgICAgIAorICAgIGNhc2UgREhDUElORk9STToKKyAgICAgIGlmIChpZ25vcmUgfHwgaGF2ZV9jb25maWcoY29uZmlnLCBDT05GSUdfRElTQUJMRSkpCisJbWVzc2FnZSA9IF8oImlnbm9yZWQiKTsKKyAgICAgIAorICAgICAgbG9nX3BhY2tldCgiREhDUElORk9STSIsICZtZXNzLT5jaWFkZHIsIGVtYWMsIGVtYWNfbGVuLCBpZmFjZV9uYW1lLCBtZXNzYWdlLCBOVUxMLCBtZXNzLT54aWQpOworICAgICAKKyAgICAgIGlmIChtZXNzYWdlIHx8IG1lc3MtPmNpYWRkci5zX2FkZHIgPT0gMCkKKwlyZXR1cm4gMDsKKworICAgICAgLyogRm9yIERIQ1BJTkZPUk0gb25seSwgY29wZSB3aXRob3V0IGEgdmFsaWQgY29udGV4dCAqLworICAgICAgY29udGV4dCA9IG5hcnJvd19jb250ZXh0KGNvbnRleHQsIG1lc3MtPmNpYWRkciwgdGFnaWZfbmV0aWQpOworICAgICAgCisgICAgICAvKiBGaW5kIGEgbGVhc3QgYmFzZWQgb24gSVAgYWRkcmVzcyBpZiB3ZSBkaWRuJ3QKKwkgZ2V0IG9uZSBmcm9tIE1BQyBhZGRyZXNzL2NsaWVudC1kICovCisgICAgICBpZiAoIWxlYXNlICYmCisJICAobGVhc2UgPSBsZWFzZV9maW5kX2J5X2FkZHIobWVzcy0+Y2lhZGRyKSkgJiYgCisJICBsZWFzZS0+aG9zdG5hbWUpCisJaG9zdG5hbWUgPSBsZWFzZS0+aG9zdG5hbWU7CisgICAgICAKKyAgICAgIGlmICghaG9zdG5hbWUpCisJaG9zdG5hbWUgPSBob3N0X2Zyb21fZG5zKG1lc3MtPmNpYWRkcik7CisgICAgICAKKyAgICAgIGlmIChjb250ZXh0ICYmIGNvbnRleHQtPm5ldGlkLm5ldCkKKwl7CisJICBjb250ZXh0LT5uZXRpZC5uZXh0ID0gbmV0aWQ7CisJICB0YWdpZl9uZXRpZCA9IHJ1bl90YWdfaWYoJmNvbnRleHQtPm5ldGlkKTsKKwl9CisKKyAgICAgIGxvZ190YWdzKHRhZ2lmX25ldGlkLCBudG9obChtZXNzLT54aWQpKTsKKyAgICAgIAorICAgICAgbG9nX3BhY2tldCgiREhDUEFDSyIsICZtZXNzLT5jaWFkZHIsIGVtYWMsIGVtYWNfbGVuLCBpZmFjZV9uYW1lLCBob3N0bmFtZSwgTlVMTCwgbWVzcy0+eGlkKTsKKyAgICAgIAorICAgICAgaWYgKGxlYXNlKQorCXsKKwkgIGxlYXNlX3NldF9pbnRlcmZhY2UobGVhc2UsIGludF9pbmRleCwgbm93KTsKKwkgIGlmIChvdmVycmlkZS5zX2FkZHIgIT0gMCkKKwkgICAgbGVhc2UtPm92ZXJyaWRlID0gb3ZlcnJpZGU7CisJICBlbHNlCisJICAgIG92ZXJyaWRlID0gbGVhc2UtPm92ZXJyaWRlOworCX0KKworICAgICAgY2xlYXJfcGFja2V0KG1lc3MsIGVuZCk7CisgICAgICBvcHRpb25fcHV0KG1lc3MsIGVuZCwgT1BUSU9OX01FU1NBR0VfVFlQRSwgMSwgREhDUEFDSyk7CisgICAgICBvcHRpb25fcHV0KG1lc3MsIGVuZCwgT1BUSU9OX1NFUlZFUl9JREVOVElGSUVSLCBJTkFERFJTWiwgbnRvaGwoc2VydmVyX2lkKGNvbnRleHQsIG92ZXJyaWRlLCBmYWxsYmFjaykuc19hZGRyKSk7CisgICAgIAorICAgICAgLyogUkZDIDIxMzEgc2F5cyB0aGF0IERIQ1BJTkZPUk0gc2hvdWxkbid0IGluY2x1ZGUgbGVhc2UtdGltZSBwYXJhbWV0ZXJzLCBidXQgCisJIHdlIHN1cHBseSBhIHV0aWxpdHkgd2hpY2ggbWFrZXMgREhDUElORk9STSByZXF1ZXN0cyB0byBnZXQgdGhpcyBpbmZvcm1hdGlvbi4KKwkgT25seSBpbmNsdWRlIGxlYXNlIHRpbWUgaWYgT1BUSU9OX0xFQVNFX1RJTUUgaXMgaW4gdGhlIHBhcmFtZXRlciByZXF1ZXN0IGxpc3QsCisJIHdoaWNoIHdvbid0IGJlIHRydWUgZm9yIG9yZGluYXJ5IGNsaWVudHMsIGJ1dCB3aWxsIGJlIHRydWUgZm9yIHRoZSAKKwkgZGhjcF9sZWFzZV90aW1lIHV0aWxpdHkuICovCisgICAgICBpZiAobGVhc2UgJiYgaW5fbGlzdChyZXFfb3B0aW9ucywgT1BUSU9OX0xFQVNFX1RJTUUpKQorCXsKKwkgIGlmIChsZWFzZS0+ZXhwaXJlcyA9PSAwKQorCSAgICB0aW1lID0gMHhmZmZmZmZmZjsKKwkgIGVsc2UKKwkgICAgdGltZSA9ICh1bnNpZ25lZCBpbnQpZGlmZnRpbWUobGVhc2UtPmV4cGlyZXMsIG5vdyk7CisJICBvcHRpb25fcHV0KG1lc3MsIGVuZCwgT1BUSU9OX0xFQVNFX1RJTUUsIDQsIHRpbWUpOworCX0KKworICAgICAgZG9fb3B0aW9ucyhjb250ZXh0LCBtZXNzLCBlbmQsIHJlcV9vcHRpb25zLCBob3N0bmFtZSwgZ2V0X2RvbWFpbihtZXNzLT5jaWFkZHIpLAorCQkgbmV0aWQsIHN1Ym5ldF9hZGRyLCBmcWRuX2ZsYWdzLCBib3JrZW5fb3B0LCBweGVhcmNoLCB1dWlkLCB2ZW5kb3JfY2xhc3NfbGVuLCBub3csIDB4ZmZmZmZmZmYsIDApOworICAgICAgCisgICAgICAqaXNfaW5mb3JtID0gMTsgLyogaGFuZGxlIHJlcGx5IGRpZmZlcmVudGx5ICovCisgICAgICByZXR1cm4gZGhjcF9wYWNrZXRfc2l6ZShtZXNzLCBhZ2VudF9pZCwgcmVhbF9lbmQpOyAKKyAgICB9CisgIAorICByZXR1cm4gMDsKK30KKworLyogZmluZCBhIGdvb2QgdmFsdWUgdG8gdXNlIGFzIE1BQyBhZGRyZXNzIGZvciBsb2dnaW5nIGFuZCBhZGRyZXNzLWFsbG9jYXRpb24gaGFzaGluZy4KKyAgIFRoaXMgaXMgbm9ybWFsbHkganVzdCB0aGUgY2hhZGRyIGZpZWxkIGZyb20gdGhlIERIQ1AgcGFja2V0LAorICAgYnV0IGVnIEZpcmV3aXJlIHdpbGwgaGF2ZSBobGVuID09IDAgYW5kIHVzZSB0aGUgY2xpZW50LWlkIGluc3RlYWQuIAorICAgVGhpcyBjb3VsZCBiZSBhbnl0aGluZywgYnV0IHdpbGwgbm9ybWFsbHkgYmUgRVVJNjQgZm9yIEZpcmV3aXJlLgorICAgV2UgYXNzdW1lIHRoYXQgaWYgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIGNsaWVudC1pZCBlcXVhbHMgdGhlIGh0eXBlIGJ5dGUKKyAgIHRoZW4gdGhlIGNsaWVudC1pZCBpcyB1c2luZyB0aGUgdXN1YWwgZW5jb2RpbmcgYW5kIHVzZSB0aGUgcmVzdCBvZiB0aGUgCisgICBjbGllbnQtaWQ6IGlmIG5vdCB3ZSBjYW4gdXNlIHRoZSB3aG9sZSBjbGllbnQtaWQuIFRoaXMgc2hvdWxkIGdpdmUKKyAgIHNhbmUgTUFDIGFkZHJlc3MgbG9ncy4gKi8KK3Vuc2lnbmVkIGNoYXIgKmV4dGVuZGVkX2h3YWRkcihpbnQgaHd0eXBlLCBpbnQgaHdsZW4sIHVuc2lnbmVkIGNoYXIgKmh3YWRkciwgCisJCQkJICAgICAgaW50IGNsaWRfbGVuLCB1bnNpZ25lZCBjaGFyICpjbGlkLCBpbnQgKmxlbl9vdXQpCit7CisgIGlmIChod2xlbiA9PSAwICYmIGNsaWQgJiYgY2xpZF9sZW4gPiAzKQorICAgIHsKKyAgICAgIGlmIChjbGlkWzBdICA9PSBod3R5cGUpCisJeworCSAgKmxlbl9vdXQgPSBjbGlkX2xlbiAtIDEgOworCSAgcmV0dXJuIGNsaWQgKyAxOworCX0KKworI2lmIGRlZmluZWQoQVJQSFJEX0VVSTY0KSAmJiBkZWZpbmVkKEFSUEhSRF9JRUVFMTM5NCkKKyAgICAgIGlmIChjbGlkWzBdID09ICBBUlBIUkRfRVVJNjQgJiYgaHd0eXBlID09IEFSUEhSRF9JRUVFMTM5NCkKKwl7CisJICAqbGVuX291dCA9IGNsaWRfbGVuIC0gMSA7CisJICByZXR1cm4gY2xpZCArIDE7CisJfQorI2VuZGlmCisgICAgICAKKyAgICAgICpsZW5fb3V0ID0gY2xpZF9sZW47CisgICAgICByZXR1cm4gY2xpZDsKKyAgICB9CisgIAorICAqbGVuX291dCA9IGh3bGVuOworICByZXR1cm4gaHdhZGRyOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGNhbGNfdGltZShzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0LCBzdHJ1Y3QgZGhjcF9jb25maWcgKmNvbmZpZywgdW5zaWduZWQgY2hhciAqb3B0KQoreworICB1bnNpZ25lZCBpbnQgdGltZSA9IGhhdmVfY29uZmlnKGNvbmZpZywgQ09ORklHX1RJTUUpID8gY29uZmlnLT5sZWFzZV90aW1lIDogY29udGV4dC0+bGVhc2VfdGltZTsKKyAgCisgIGlmIChvcHQpCisgICAgeyAKKyAgICAgIHVuc2lnbmVkIGludCByZXFfdGltZSA9IG9wdGlvbl91aW50KG9wdCwgMCwgNCk7CisgICAgICBpZiAocmVxX3RpbWUgPCAxMjAgKQorCXJlcV90aW1lID0gMTIwOyAvKiBzYW5pdHkgKi8KKyAgICAgIGlmICh0aW1lID09IDB4ZmZmZmZmZmYgfHwgKHJlcV90aW1lICE9IDB4ZmZmZmZmZmYgJiYgcmVxX3RpbWUgPCB0aW1lKSkKKwl0aW1lID0gcmVxX3RpbWU7CisgICAgfQorCisgIHJldHVybiB0aW1lOworfQorCitzdGF0aWMgc3RydWN0IGluX2FkZHIgc2VydmVyX2lkKHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQsIHN0cnVjdCBpbl9hZGRyIG92ZXJyaWRlLCBzdHJ1Y3QgaW5fYWRkciBmYWxsYmFjaykKK3sKKyAgaWYgKG92ZXJyaWRlLnNfYWRkciAhPSAwKQorICAgIHJldHVybiBvdmVycmlkZTsKKyAgZWxzZSBpZiAoY29udGV4dCAmJiBjb250ZXh0LT5sb2NhbC5zX2FkZHIgIT0gMCkKKyAgICByZXR1cm4gY29udGV4dC0+bG9jYWw7CisgIGVsc2UKKyAgICByZXR1cm4gZmFsbGJhY2s7Cit9CisKK3N0YXRpYyBpbnQgc2FuaXRpc2UodW5zaWduZWQgY2hhciAqb3B0LCBjaGFyICpidWYpCit7CisgIGNoYXIgKnA7CisgIGludCBpOworICAKKyAgKmJ1ZiA9IDA7CisgIAorICBpZiAoIW9wdCkKKyAgICByZXR1cm4gMDsKKworICBwID0gb3B0aW9uX3B0cihvcHQsIDApOworCisgIGZvciAoaSA9IG9wdGlvbl9sZW4ob3B0KTsgaSA+IDA7IGktLSkKKyAgICB7CisgICAgICBjaGFyIGMgPSAqcCsrOworICAgICAgaWYgKGlzcHJpbnQoKGludCljKSkKKwkqYnVmKysgPSBjOworICAgIH0KKyAgKmJ1ZiA9IDA7IC8qIGFkZCB0ZXJtaW5hdG9yICovCisgIAorICByZXR1cm4gMTsKK30KKworI2lmZGVmIEhBVkVfU0NSSVBUCitzdGF0aWMgdm9pZCBhZGRfZXh0cmFkYXRhX29wdChzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2UsIHVuc2lnbmVkIGNoYXIgKm9wdCkKK3sKKyAgaWYgKCFvcHQpCisgICAgbGVhc2VfYWRkX2V4dHJhZGF0YShsZWFzZSwgTlVMTCwgMCwgMCk7CisgIGVsc2UKKyAgICBsZWFzZV9hZGRfZXh0cmFkYXRhKGxlYXNlLCBvcHRpb25fcHRyKG9wdCwgMCksIG9wdGlvbl9sZW4ob3B0KSwgMCk7IAorfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGxvZ19wYWNrZXQoY2hhciAqdHlwZSwgdm9pZCAqYWRkciwgdW5zaWduZWQgY2hhciAqZXh0X21hYywgCisJCSAgICAgICBpbnQgbWFjX2xlbiwgY2hhciAqaW50ZXJmYWNlLCBjaGFyICpzdHJpbmcsIGNoYXIgKmVyciwgdTMyIHhpZCkKK3sKKyAgc3RydWN0IGluX2FkZHIgYTsKKyAKKyAgaWYgKCFlcnIgJiYgIW9wdGlvbl9ib29sKE9QVF9MT0dfT1BUUykgJiYgb3B0aW9uX2Jvb2woT1BUX1FVSUVUX0RIQ1ApKQorICAgIHJldHVybjsKKyAgCisgIC8qIGFkZHIgbWF5IGJlIG1pc2FsaWduZWQgKi8KKyAgaWYgKGFkZHIpCisgICAgbWVtY3B5KCZhLCBhZGRyLCBzaXplb2YoYSkpOworICAKKyAgcHJpbnRfbWFjKGRhZW1vbi0+bmFtZWJ1ZmYsIGV4dF9tYWMsIG1hY19sZW4pOworICAKKyAgaWYob3B0aW9uX2Jvb2woT1BUX0xPR19PUFRTKSkKKyAgICAgbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfSU5GTywgIiV1ICVzKCVzKSAlcyVzJXMgJXMlcyIsCisJICAgICAgIG50b2hsKHhpZCksIAorCSAgICAgICB0eXBlLAorCSAgICAgICBpbnRlcmZhY2UsIAorCSAgICAgICBhZGRyID8gaW5ldF9udG9hKGEpIDogIiIsCisJICAgICAgIGFkZHIgPyAiICIgOiAiIiwKKwkgICAgICAgZGFlbW9uLT5uYW1lYnVmZiwKKwkgICAgICAgc3RyaW5nID8gc3RyaW5nIDogIiIsCisJICAgICAgIGVyciA/IGVyciA6ICIiKTsKKyAgZWxzZQorICAgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX0lORk8sICIlcyglcykgJXMlcyVzICVzJXMiLAorCSAgICAgIHR5cGUsCisJICAgICAgaW50ZXJmYWNlLCAKKwkgICAgICBhZGRyID8gaW5ldF9udG9hKGEpIDogIiIsCisJICAgICAgYWRkciA/ICIgIiA6ICIiLAorCSAgICAgIGRhZW1vbi0+bmFtZWJ1ZmYsCisJICAgICAgc3RyaW5nID8gc3RyaW5nIDogIiIsCisJICAgICAgZXJyID8gZXJyIDogIiIpOworfQorCitzdGF0aWMgdm9pZCBsb2dfb3B0aW9ucyh1bnNpZ25lZCBjaGFyICpzdGFydCwgdTMyIHhpZCkKK3sKKyAgd2hpbGUgKCpzdGFydCAhPSBPUFRJT05fRU5EKQorICAgIHsKKyAgICAgIGNoYXIgKm9wdG5hbWUgPSBvcHRpb25fc3RyaW5nKEFGX0lORVQsIHN0YXJ0WzBdLCBvcHRpb25fcHRyKHN0YXJ0LCAwKSwgb3B0aW9uX2xlbihzdGFydCksIGRhZW1vbi0+bmFtZWJ1ZmYsIE1BWEROQU1FKTsKKyAgICAgIAorICAgICAgbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfSU5GTywgIiV1IHNlbnQgc2l6ZTolM2Qgb3B0aW9uOiUzZCAlcyAgJXMiLCAKKwkJbnRvaGwoeGlkKSwgb3B0aW9uX2xlbihzdGFydCksIHN0YXJ0WzBdLCBvcHRuYW1lLCBkYWVtb24tPm5hbWVidWZmKTsKKyAgICAgIHN0YXJ0ICs9IHN0YXJ0WzFdICsgMjsKKyAgICB9Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICpvcHRpb25fZmluZDEodW5zaWduZWQgY2hhciAqcCwgdW5zaWduZWQgY2hhciAqZW5kLCBpbnQgb3B0LCBpbnQgbWluc2l6ZSkKK3sKKyAgd2hpbGUgKDEpIAorICAgIHsKKyAgICAgIGlmIChwID49IGVuZCkKKwlyZXR1cm4gTlVMTDsKKyAgICAgIGVsc2UgaWYgKCpwID09IE9QVElPTl9FTkQpCisJcmV0dXJuIG9wdCA9PSBPUFRJT05fRU5EID8gcCA6IE5VTEw7CisgICAgICBlbHNlIGlmICgqcCA9PSBPUFRJT05fUEFEKQorCXArKzsKKyAgICAgIGVsc2UgCisJeyAKKwkgIGludCBvcHRfbGVuOworCSAgaWYgKHAgPiBlbmQgLSAyKQorCSAgICByZXR1cm4gTlVMTDsgLyogbWFsZm9ybWVkIHBhY2tldCAqLworCSAgb3B0X2xlbiA9IG9wdGlvbl9sZW4ocCk7CisJICBpZiAocCA+IGVuZCAtICgyICsgb3B0X2xlbikpCisJICAgIHJldHVybiBOVUxMOyAvKiBtYWxmb3JtZWQgcGFja2V0ICovCisJICBpZiAoKnAgPT0gb3B0ICYmIG9wdF9sZW4gPj0gbWluc2l6ZSkKKwkgICAgcmV0dXJuIHA7CisJICBwICs9IG9wdF9sZW4gKyAyOworCX0KKyAgICB9Cit9CisgCitzdGF0aWMgdW5zaWduZWQgY2hhciAqb3B0aW9uX2ZpbmQoc3RydWN0IGRoY3BfcGFja2V0ICptZXNzLCBzaXplX3Qgc2l6ZSwgaW50IG9wdF90eXBlLCBpbnQgbWluc2l6ZSkKK3sKKyAgdW5zaWduZWQgY2hhciAqcmV0LCAqb3ZlcmxvYWQ7CisgIAorICAvKiBza2lwIG92ZXIgREhDUCBjb29raWU7ICovCisgIGlmICgocmV0ID0gb3B0aW9uX2ZpbmQxKCZtZXNzLT5vcHRpb25zWzBdICsgc2l6ZW9mKHUzMiksICgodW5zaWduZWQgY2hhciAqKW1lc3MpICsgc2l6ZSwgb3B0X3R5cGUsIG1pbnNpemUpKSkKKyAgICByZXR1cm4gcmV0OworCisgIC8qIGxvb2sgZm9yIG92ZXJsb2FkIG9wdGlvbi4gKi8KKyAgaWYgKCEob3ZlcmxvYWQgPSBvcHRpb25fZmluZDEoJm1lc3MtPm9wdGlvbnNbMF0gKyBzaXplb2YodTMyKSwgKCh1bnNpZ25lZCBjaGFyICopbWVzcykgKyBzaXplLCBPUFRJT05fT1ZFUkxPQUQsIDEpKSkKKyAgICByZXR1cm4gTlVMTDsKKyAgCisgIC8qIENhbiB3ZSBsb29rIGluIGZpbGVuYW1lIGFyZWEgPyAqLworICBpZiAoKG92ZXJsb2FkWzJdICYgMSkgJiYKKyAgICAgIChyZXQgPSBvcHRpb25fZmluZDEoJm1lc3MtPmZpbGVbMF0sICZtZXNzLT5maWxlWzEyOF0sIG9wdF90eXBlLCBtaW5zaXplKSkpCisgICAgcmV0dXJuIHJldDsKKworICAvKiBmaW5hbGx5IHRyeSBzbmFtZSBhcmVhICovCisgIGlmICgob3ZlcmxvYWRbMl0gJiAyKSAmJgorICAgICAgKHJldCA9IG9wdGlvbl9maW5kMSgmbWVzcy0+c25hbWVbMF0sICZtZXNzLT5zbmFtZVs2NF0sIG9wdF90eXBlLCBtaW5zaXplKSkpCisgICAgcmV0dXJuIHJldDsKKworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBpbl9hZGRyIG9wdGlvbl9hZGRyKHVuc2lnbmVkIGNoYXIgKm9wdCkKK3sKKyAgIC8qIHRoaXMgd29ycmllcyBhYm91dCB1bmFsaWduZWQgZGF0YSBpbiB0aGUgb3B0aW9uLiAqLworICAvKiBzdHJ1Y3QgaW5fYWRkciBpcyBuZXR3b3JrIGJ5dGUgb3JkZXIgKi8KKyAgc3RydWN0IGluX2FkZHIgcmV0OworCisgIG1lbWNweSgmcmV0LCBvcHRpb25fcHRyKG9wdCwgMCksIElOQUREUlNaKTsKKworICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IG9wdGlvbl91aW50KHVuc2lnbmVkIGNoYXIgKm9wdCwgaW50IG9mZnNldCwgaW50IHNpemUpCit7CisgIC8qIHRoaXMgd29ycmllcyBhYm91dCB1bmFsaWduZWQgZGF0YSBhbmQgYnl0ZSBvcmRlciAqLworICB1bnNpZ25lZCBpbnQgcmV0ID0gMDsKKyAgaW50IGk7CisgIHVuc2lnbmVkIGNoYXIgKnAgPSBvcHRpb25fcHRyKG9wdCwgb2Zmc2V0KTsKKyAgCisgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCisgICAgcmV0ID0gKHJldCA8PCA4KSB8ICpwKys7CisKKyAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgKmRoY3Bfc2tpcF9vcHRzKHVuc2lnbmVkIGNoYXIgKnN0YXJ0KQoreworICB3aGlsZSAoKnN0YXJ0ICE9IDApCisgICAgc3RhcnQgKz0gc3RhcnRbMV0gKyAyOworICByZXR1cm4gc3RhcnQ7Cit9CisKKy8qIG9ubHkgZm9yIHVzZSB3aGVuIGJ1aWxkaW5nIHBhY2tldDogZG9lc24ndCBjaGVjayBmb3IgYmFkIGRhdGEuICovIAorc3RhdGljIHVuc2lnbmVkIGNoYXIgKmZpbmRfb3ZlcmxvYWQoc3RydWN0IGRoY3BfcGFja2V0ICptZXNzKQoreworICB1bnNpZ25lZCBjaGFyICpwID0gJm1lc3MtPm9wdGlvbnNbMF0gKyBzaXplb2YodTMyKTsKKyAgCisgIHdoaWxlICgqcCAhPSAwKQorICAgIHsKKyAgICAgIGlmICgqcCA9PSBPUFRJT05fT1ZFUkxPQUQpCisJcmV0dXJuIHA7CisgICAgICBwICs9IHBbMV0gKyAyOworICAgIH0KKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzaXplX3QgZGhjcF9wYWNrZXRfc2l6ZShzdHJ1Y3QgZGhjcF9wYWNrZXQgKm1lc3MsIHVuc2lnbmVkIGNoYXIgKmFnZW50X2lkLCB1bnNpZ25lZCBjaGFyICpyZWFsX2VuZCkKK3sKKyAgdW5zaWduZWQgY2hhciAqcCA9IGRoY3Bfc2tpcF9vcHRzKCZtZXNzLT5vcHRpb25zWzBdICsgc2l6ZW9mKHUzMikpOworICB1bnNpZ25lZCBjaGFyICpvdmVybG9hZDsKKyAgc2l6ZV90IHJldDsKKyAgCisgIC8qIG1vdmUgYWdlbnRfaWQgYmFjayBkb3duIHRvIHRoZSBlbmQgb2YgdGhlIHBhY2tldCAqLworICBpZiAoYWdlbnRfaWQpCisgICAgeworICAgICAgbWVtbW92ZShwLCBhZ2VudF9pZCwgcmVhbF9lbmQgLSBhZ2VudF9pZCk7CisgICAgICBwICs9IHJlYWxfZW5kIC0gYWdlbnRfaWQ7CisgICAgICBtZW1zZXQocCwgMCwgcmVhbF9lbmQgLSBwKTsgLyogaW4gY2FzZSBvZiBvdmVybGFwICovCisgICAgfQorICAKKyAgLyogYWRkIEVORCBvcHRpb25zIHRvIHRoZSByZWdpb25zLiAqLworICBvdmVybG9hZCA9IGZpbmRfb3ZlcmxvYWQobWVzcyk7CisgIAorICBpZiAob3ZlcmxvYWQgJiYgKG9wdGlvbl91aW50KG92ZXJsb2FkLCAwLCAxKSAmIDEpKQorICAgIHsKKyAgICAgICpkaGNwX3NraXBfb3B0cyhtZXNzLT5maWxlKSA9IE9QVElPTl9FTkQ7CisgICAgICBpZiAob3B0aW9uX2Jvb2woT1BUX0xPR19PUFRTKSkKKwlsb2dfb3B0aW9ucyhtZXNzLT5maWxlLCBtZXNzLT54aWQpOworICAgIH0KKyAgZWxzZSBpZiAob3B0aW9uX2Jvb2woT1BUX0xPR19PUFRTKSAmJiBzdHJsZW4oKGNoYXIgKiltZXNzLT5maWxlKSAhPSAwKQorICAgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX0lORk8sIF8oIiV1IGJvb3RmaWxlIG5hbWU6ICVzIiksIG50b2hsKG1lc3MtPnhpZCksIChjaGFyICopbWVzcy0+ZmlsZSk7CisgIAorICBpZiAob3ZlcmxvYWQgJiYgKG9wdGlvbl91aW50KG92ZXJsb2FkLCAwLCAxKSAmIDIpKQorICAgIHsKKyAgICAgICpkaGNwX3NraXBfb3B0cyhtZXNzLT5zbmFtZSkgPSBPUFRJT05fRU5EOworICAgICAgaWYgKG9wdGlvbl9ib29sKE9QVF9MT0dfT1BUUykpCisJbG9nX29wdGlvbnMobWVzcy0+c25hbWUsIG1lc3MtPnhpZCk7CisgICAgfQorICBlbHNlIGlmIChvcHRpb25fYm9vbChPUFRfTE9HX09QVFMpICYmIHN0cmxlbigoY2hhciAqKW1lc3MtPnNuYW1lKSAhPSAwKQorICAgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX0lORk8sIF8oIiV1IHNlcnZlciBuYW1lOiAlcyIpLCBudG9obChtZXNzLT54aWQpLCAoY2hhciAqKW1lc3MtPnNuYW1lKTsKKworCisgICpwKysgPSBPUFRJT05fRU5EOworICAKKyAgaWYgKG9wdGlvbl9ib29sKE9QVF9MT0dfT1BUUykpCisgICAgeworICAgICAgaWYgKG1lc3MtPnNpYWRkci5zX2FkZHIgIT0gMCkKKwlteV9zeXNsb2coTVNfREhDUCB8IExPR19JTkZPLCBfKCIldSBuZXh0IHNlcnZlcjogJXMiKSwgbnRvaGwobWVzcy0+eGlkKSwgaW5ldF9udG9hKG1lc3MtPnNpYWRkcikpOworICAgICAgCisgICAgICBpZiAoKG1lc3MtPmZsYWdzICYgaHRvbnMoMHg4MDAwKSkgJiYgbWVzcy0+Y2lhZGRyLnNfYWRkciA9PSAwKQorCW15X3N5c2xvZyhNU19ESENQIHwgTE9HX0lORk8sIF8oIiV1IGJyb2FkY2FzdCByZXNwb25zZSIpLCBudG9obChtZXNzLT54aWQpKTsKKyAgICAgIAorICAgICAgbG9nX29wdGlvbnMoJm1lc3MtPm9wdGlvbnNbMF0gKyBzaXplb2YodTMyKSwgbWVzcy0+eGlkKTsKKyAgICB9IAorICAKKyAgcmV0ID0gKHNpemVfdCkocCAtICh1bnNpZ25lZCBjaGFyICopbWVzcyk7CisgIAorICBpZiAocmV0IDwgTUlOX1BBQ0tFVFNaKQorICAgIHJldCA9IE1JTl9QQUNLRVRTWjsKKyAgCisgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICpmcmVlX3NwYWNlKHN0cnVjdCBkaGNwX3BhY2tldCAqbWVzcywgdW5zaWduZWQgY2hhciAqZW5kLCBpbnQgb3B0LCBpbnQgbGVuKQoreworICB1bnNpZ25lZCBjaGFyICpwID0gZGhjcF9za2lwX29wdHMoJm1lc3MtPm9wdGlvbnNbMF0gKyBzaXplb2YodTMyKSk7CisgIAorICBpZiAocCArIGxlbiArIDMgPj0gZW5kKQorICAgIC8qIG5vdCBlbm91Z2ggc3BhY2UgaW4gb3B0aW9ucyBhcmVhLCB0cnkgYW5kIHVzZSBvdmVybG9hZCwgaWYgcG9zcyAqLworICAgIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIgKm92ZXJsb2FkOworICAgICAgCisgICAgICBpZiAoIShvdmVybG9hZCA9IGZpbmRfb3ZlcmxvYWQobWVzcykpICYmCisJICAobWVzcy0+ZmlsZVswXSA9PSAwIHx8IG1lc3MtPnNuYW1lWzBdID09IDApKQorCXsKKwkgIC8qIGF0dGVtcHQgdG8gb3ZlcmxvYWQgZm5hbWUgYW5kIHNuYW1lIGFyZWFzLCB3ZSd2ZSByZXNlcnZlZCBzcGFjZSBmb3IgdGhlCisJICAgICBvdmVyZmxvdyBvcHRpb24gcHJldml1b3VzbHkuICovCisJICBvdmVybG9hZCA9IHA7CisJICAqKHArKykgPSBPUFRJT05fT1ZFUkxPQUQ7CisJICAqKHArKykgPSAxOworCX0KKyAgICAgIAorICAgICAgcCA9IE5VTEw7CisgICAgICAKKyAgICAgIC8qIHVzaW5nIGZpbGVuYW1lIGZpZWxkID8gKi8KKyAgICAgIGlmIChvdmVybG9hZCkKKwl7CisJICBpZiAobWVzcy0+ZmlsZVswXSA9PSAwKQorCSAgICBvdmVybG9hZFsyXSB8PSAxOworCSAgCisJICBpZiAob3ZlcmxvYWRbMl0gJiAxKQorCSAgICB7CisJICAgICAgcCA9IGRoY3Bfc2tpcF9vcHRzKG1lc3MtPmZpbGUpOworCSAgICAgIGlmIChwICsgbGVuICsgMyA+PSBtZXNzLT5maWxlICsgc2l6ZW9mKG1lc3MtPmZpbGUpKQorCQlwID0gTlVMTDsKKwkgICAgfQorCSAgCisJICBpZiAoIXApCisJICAgIHsKKwkgICAgICAvKiB0cnkgdG8gYnJpbmcgc25hbWUgaW50byBwbGF5IChpdCBtYXkgYmUgYWxyZWFkeSkgKi8KKwkgICAgICBpZiAobWVzcy0+c25hbWVbMF0gPT0gMCkKKwkJb3ZlcmxvYWRbMl0gfD0gMjsKKwkgICAgICAKKwkgICAgICBpZiAob3ZlcmxvYWRbMl0gJiAyKQorCQl7CisJCSAgcCA9IGRoY3Bfc2tpcF9vcHRzKG1lc3MtPnNuYW1lKTsKKwkJICBpZiAocCArIGxlbiArIDMgPj0gbWVzcy0+c25hbWUgKyBzaXplb2YobWVzcy0+c25hbWUpKQorCQkgICAgcCA9IE5VTEw7CisJCX0KKwkgICAgfQorCX0KKyAgICAgIAorICAgICAgaWYgKCFwKQorCW15X3N5c2xvZyhNU19ESENQIHwgTE9HX1dBUk5JTkcsIF8oImNhbm5vdCBzZW5kIERIQ1AvQk9PVFAgb3B0aW9uICVkOiBubyBzcGFjZSBsZWZ0IGluIHBhY2tldCIpLCBvcHQpOworICAgIH0KKyAKKyAgaWYgKHApCisgICAgeworICAgICAgKihwKyspID0gb3B0OworICAgICAgKihwKyspID0gbGVuOworICAgIH0KKworICByZXR1cm4gcDsKK30KKwkgICAgICAKK3N0YXRpYyB2b2lkIG9wdGlvbl9wdXQoc3RydWN0IGRoY3BfcGFja2V0ICptZXNzLCB1bnNpZ25lZCBjaGFyICplbmQsIGludCBvcHQsIGludCBsZW4sIHVuc2lnbmVkIGludCB2YWwpCit7CisgIGludCBpOworICB1bnNpZ25lZCBjaGFyICpwID0gZnJlZV9zcGFjZShtZXNzLCBlbmQsIG9wdCwgbGVuKTsKKyAgCisgIGlmIChwKSAKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisgICAgICAqKHArKykgPSB2YWwgPj4gKDggKiAobGVuIC0gKGkgKyAxKSkpOworfQorCitzdGF0aWMgdm9pZCBvcHRpb25fcHV0X3N0cmluZyhzdHJ1Y3QgZGhjcF9wYWNrZXQgKm1lc3MsIHVuc2lnbmVkIGNoYXIgKmVuZCwgaW50IG9wdCwgCisJCQkgICAgICBjaGFyICpzdHJpbmcsIGludCBudWxsX3Rlcm0pCit7CisgIHVuc2lnbmVkIGNoYXIgKnA7CisgIHNpemVfdCBsZW4gPSBzdHJsZW4oc3RyaW5nKTsKKworICBpZiAobnVsbF90ZXJtICYmIGxlbiAhPSAyNTUpCisgICAgbGVuKys7CisKKyAgaWYgKChwID0gZnJlZV9zcGFjZShtZXNzLCBlbmQsIG9wdCwgbGVuKSkpCisgICAgbWVtY3B5KHAsIHN0cmluZywgbGVuKTsKK30KKworLyogcmV0dXJuIGxlbmd0aCwgbm90ZSB0aGlzIG9ubHkgZG9lcyB0aGUgZGF0YSBwYXJ0ICovCitzdGF0aWMgaW50IGRvX29wdChzdHJ1Y3QgZGhjcF9vcHQgKm9wdCwgdW5zaWduZWQgY2hhciAqcCwgc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dCwgaW50IG51bGxfdGVybSkKK3sKKyAgaW50IGxlbiA9IG9wdC0+bGVuOworICAKKyAgaWYgKChvcHQtPmZsYWdzICYgREhPUFRfU1RSSU5HKSAmJiBudWxsX3Rlcm0gJiYgbGVuICE9IDI1NSkKKyAgICBsZW4rKzsKKworICBpZiAocCAmJiBsZW4gIT0gMCkKKyAgICB7CisgICAgICBpZiAoY29udGV4dCAmJiAob3B0LT5mbGFncyAmIERIT1BUX0FERFIpKQorCXsKKwkgIGludCBqOworCSAgc3RydWN0IGluX2FkZHIgKmEgPSAoc3RydWN0IGluX2FkZHIgKilvcHQtPnZhbDsKKwkgIGZvciAoaiA9IDA7IGogPCBvcHQtPmxlbjsgais9SU5BRERSU1osIGErKykKKwkgICAgeworCSAgICAgIC8qIHplcm8gbWVhbnMgInNlbGYiIChidXQgbm90IGluIHZlbmRvcmNsYXNzIG9wdGlvbnMuKSAqLworCSAgICAgIGlmIChhLT5zX2FkZHIgPT0gMCkKKwkJbWVtY3B5KHAsICZjb250ZXh0LT5sb2NhbCwgSU5BRERSU1opOworCSAgICAgIGVsc2UKKwkJbWVtY3B5KHAsIGEsIElOQUREUlNaKTsKKwkgICAgICBwICs9IElOQUREUlNaOworCSAgICB9CisJfQorICAgICAgZWxzZQorCS8qIGVtcHR5IHN0cmluZyBtYXkgYmUgZXh0ZW5kZWQgdG8gIlwwIiBieSBudWxsX3Rlcm0gKi8KKwltZW1jcHkocCwgb3B0LT52YWwgPyBvcHQtPnZhbCA6ICh1bnNpZ25lZCBjaGFyICopIiIsIGxlbik7CisgICAgfSAgCisgIHJldHVybiBsZW47Cit9CisKK3N0YXRpYyBpbnQgaW5fbGlzdCh1bnNpZ25lZCBjaGFyICpsaXN0LCBpbnQgb3B0KQoreworICBpbnQgaTsKKworICAgLyogSWYgbm8gcmVxdWVzdGVkIG9wdGlvbnMsIHNlbmQgZXZlcnl0aGluZywgbm90IG5vdGhpbmcuICovCisgIGlmICghbGlzdCkKKyAgICByZXR1cm4gMTsKKyAgCisgIGZvciAoaSA9IDA7IGxpc3RbaV0gIT0gT1BUSU9OX0VORDsgaSsrKQorICAgIGlmIChvcHQgPT0gbGlzdFtpXSkKKyAgICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRoY3Bfb3B0ICpvcHRpb25fZmluZDIoaW50IG9wdCkKK3sKKyAgc3RydWN0IGRoY3Bfb3B0ICpvcHRzOworICAKKyAgZm9yIChvcHRzID0gZGFlbW9uLT5kaGNwX29wdHM7IG9wdHM7IG9wdHMgPSBvcHRzLT5uZXh0KQorICAgIGlmIChvcHRzLT5vcHQgPT0gb3B0ICYmIChvcHRzLT5mbGFncyAmIERIT1BUX1RBR09LKSkKKyAgICAgIHJldHVybiBvcHRzOworICAKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIG1hcmsgdmVuZG9yLWVuY2Fwc3VsYXRlZCBvcHRpb25zIHdoaWNoIG1hdGNoIHRoZSBjbGllbnQtc3VwcGxpZWQgIG9yCisgICBjb25maWctc3VwcGxpZWQgdmVuZG9yIGNsYXNzICovCitzdGF0aWMgdm9pZCBtYXRjaF92ZW5kb3Jfb3B0cyh1bnNpZ25lZCBjaGFyICpvcHQsIHN0cnVjdCBkaGNwX29wdCAqZG9wdCkKK3sKKyAgZm9yICg7IGRvcHQ7IGRvcHQgPSBkb3B0LT5uZXh0KQorICAgIHsKKyAgICAgIGRvcHQtPmZsYWdzICY9IH5ESE9QVF9WRU5ET1JfTUFUQ0g7CisgICAgICBpZiAob3B0ICYmIChkb3B0LT5mbGFncyAmIERIT1BUX1ZFTkRPUikpCisJeworCSAgaW50IGksIGxlbiA9IDA7CisJICBpZiAoZG9wdC0+dS52ZW5kb3JfY2xhc3MpCisJICAgIGxlbiA9IHN0cmxlbigoY2hhciAqKWRvcHQtPnUudmVuZG9yX2NsYXNzKTsKKwkgIGZvciAoaSA9IDA7IGkgPD0gKG9wdGlvbl9sZW4ob3B0KSAtIGxlbik7IGkrKykKKwkgICAgaWYgKGxlbiA9PSAwIHx8IG1lbWNtcChkb3B0LT51LnZlbmRvcl9jbGFzcywgb3B0aW9uX3B0cihvcHQsIGkpLCBsZW4pID09IDApCisJICAgICAgeworCQlkb3B0LT5mbGFncyB8PSBESE9QVF9WRU5ET1JfTUFUQ0g7CisJCWJyZWFrOworCSAgICAgIH0KKwl9CisgICAgfQorfQorCitzdGF0aWMgaW50IGRvX2VuY2FwX29wdHMoc3RydWN0IGRoY3Bfb3B0ICpvcHQsIGludCBlbmNhcCwgaW50IGZsYWcsICAKKwkJCSBzdHJ1Y3QgZGhjcF9wYWNrZXQgKm1lc3MsIHVuc2lnbmVkIGNoYXIgKmVuZCwgaW50IG51bGxfdGVybSkKK3sKKyAgaW50IGxlbiwgZW5jX2xlbiwgcmV0ID0gMDsKKyAgc3RydWN0IGRoY3Bfb3B0ICpzdGFydDsKKyAgdW5zaWduZWQgY2hhciAqcDsKKyAgICAKKyAgLyogZmluZCBzaXplIGluIGFkdmFuY2UgKi8KKyAgZm9yIChlbmNfbGVuID0gMCwgc3RhcnQgPSBvcHQ7IG9wdDsgb3B0ID0gb3B0LT5uZXh0KQorICAgIGlmIChvcHQtPmZsYWdzICYgZmxhZykKKyAgICAgIHsKKwlpbnQgbmV3ID0gZG9fb3B0KG9wdCwgTlVMTCwgTlVMTCwgbnVsbF90ZXJtKSArIDI7CisJcmV0ICA9IDE7CisJaWYgKGVuY19sZW4gKyBuZXcgPD0gMjU1KQorCSAgZW5jX2xlbiArPSBuZXc7CisJZWxzZQorCSAgeworCSAgICBwID0gZnJlZV9zcGFjZShtZXNzLCBlbmQsIGVuY2FwLCBlbmNfbGVuKTsKKwkgICAgZm9yICg7IHN0YXJ0ICYmIHN0YXJ0ICE9IG9wdDsgc3RhcnQgPSBzdGFydC0+bmV4dCkKKwkgICAgICBpZiAocCAmJiAoc3RhcnQtPmZsYWdzICYgZmxhZykpCisJCXsKKwkJICBsZW4gPSBkb19vcHQoc3RhcnQsIHAgKyAyLCBOVUxMLCBudWxsX3Rlcm0pOworCQkgICoocCsrKSA9IHN0YXJ0LT5vcHQ7CisJCSAgKihwKyspID0gbGVuOworCQkgIHAgKz0gbGVuOworCQl9CisJICAgIGVuY19sZW4gPSBuZXc7CisJICAgIHN0YXJ0ID0gb3B0OworCSAgfQorICAgICAgfQorICAKKyAgaWYgKGVuY19sZW4gIT0gMCAmJgorICAgICAgKHAgPSBmcmVlX3NwYWNlKG1lc3MsIGVuZCwgZW5jYXAsIGVuY19sZW4gKyAxKSkpCisgICAgeworICAgICAgZm9yICg7IHN0YXJ0OyBzdGFydCA9IHN0YXJ0LT5uZXh0KQorCWlmIChzdGFydC0+ZmxhZ3MgJiBmbGFnKQorCSAgeworCSAgICBsZW4gPSBkb19vcHQoc3RhcnQsIHAgKyAyLCBOVUxMLCBudWxsX3Rlcm0pOworCSAgICAqKHArKykgPSBzdGFydC0+b3B0OworCSAgICAqKHArKykgPSBsZW47CisJICAgIHAgKz0gbGVuOworCSAgfQorICAgICAgKnAgPSBPUFRJT05fRU5EOworICAgIH0KKworICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBweGVfbWlzYyhzdHJ1Y3QgZGhjcF9wYWNrZXQgKm1lc3MsIHVuc2lnbmVkIGNoYXIgKmVuZCwgdW5zaWduZWQgY2hhciAqdXVpZCkKK3sKKyAgdW5zaWduZWQgY2hhciAqcDsKKworICBvcHRpb25fcHV0X3N0cmluZyhtZXNzLCBlbmQsIE9QVElPTl9WRU5ET1JfSUQsICJQWEVDbGllbnQiLCAwKTsKKyAgaWYgKHV1aWQgJiYgKHAgPSBmcmVlX3NwYWNlKG1lc3MsIGVuZCwgT1BUSU9OX1BYRV9VVUlELCAxNykpKQorICAgIG1lbWNweShwLCB1dWlkLCAxNyk7Cit9CisKK3N0YXRpYyBpbnQgcHJ1bmVfdmVuZG9yX29wdHMoc3RydWN0IGRoY3BfbmV0aWQgKm5ldGlkKQoreworICBpbnQgZm9yY2UgPSAwOworICBzdHJ1Y3QgZGhjcF9vcHQgKm9wdDsKKworICAvKiBwcnVuZSB2ZW5kb3ItZW5jYXBzdWxhdGVkIG9wdGlvbnMgYmFzZWQgb24gbmV0aWQsIGFuZCBsb29rIGlmIHdlJ3JlIGZvcmNpbmcgdGhlbSB0byBiZSBzZW50ICovCisgIGZvciAob3B0ID0gZGFlbW9uLT5kaGNwX29wdHM7IG9wdDsgb3B0ID0gb3B0LT5uZXh0KQorICAgIGlmIChvcHQtPmZsYWdzICYgREhPUFRfVkVORE9SX01BVENIKQorICAgICAgeworCWlmICghbWF0Y2hfbmV0aWQob3B0LT5uZXRpZCwgbmV0aWQsIDEpKQorCSAgb3B0LT5mbGFncyAmPSB+REhPUFRfVkVORE9SX01BVENIOworCWVsc2UgaWYgKG9wdC0+ZmxhZ3MgJiBESE9QVF9GT1JDRSkKKwkgIGZvcmNlID0gMTsKKyAgICAgIH0KKyAgcmV0dXJuIGZvcmNlOworfQorCisKKy8qIE1hbnkgVUVGSSBQWEUgaW1wbGVtZW50YXRpb25zIGhhdmUgYmFkbHkgYnJva2VuIG1lbnUgY29kZS4KKyAgIElmIHRoZXJlJ3MgZXhhY3RseSBvbmUgcmVsZXZhbnQgbWVudSBpdGVtLCB3ZSBhYmFuZG9uIHRoZSBtZW51IHN5c3RlbSwKKyAgIGFuZCBqYW1iIHRoZSBkYXRhIGRpcmVjdCBpbnRvIHRoZSBESENQIGZpbGUsIHNpYWRkciBhbmQgc25hbWUgZmllbGRzLgorICAgTm90ZSB0aGF0IGluIHRoaXMgY2FzZSwgd2UgaGF2ZSB0byBhc3N1bWUgdGhhdCBsYXllciB6ZXJvIHdvdWxkIGJlIHJlcXVlc3RlZAorICAgYnkgdGhlIGNsaWVudCBQWEUgc3RhY2suICovCitzdGF0aWMgaW50IHB4ZV91ZWZpX3dvcmthcm91bmQoaW50IHB4ZV9hcmNoLCBzdHJ1Y3QgZGhjcF9uZXRpZCAqbmV0aWQsIHN0cnVjdCBkaGNwX3BhY2tldCAqbWVzcywgc3RydWN0IGluX2FkZHIgbG9jYWwsIHRpbWVfdCBub3csIGludCBweGUpCit7CisgIHN0cnVjdCBweGVfc2VydmljZSAqc2VydmljZSwgKmZvdW5kOworCisgIC8qIE9ubHkgd29ya2Fyb3VuZCBVRUZJIGFyY2hzLiAqLworICBpZiAocHhlX2FyY2ggPCA2KQorICAgIHJldHVybiAwOworICAKKyAgZm9yIChmb3VuZCA9IE5VTEwsIHNlcnZpY2UgPSBkYWVtb24tPnB4ZV9zZXJ2aWNlczsgc2VydmljZTsgc2VydmljZSA9IHNlcnZpY2UtPm5leHQpCisgICAgaWYgKHB4ZV9hcmNoID09IHNlcnZpY2UtPkNTQSAmJiBzZXJ2aWNlLT5iYXNlbmFtZSAmJiBtYXRjaF9uZXRpZChzZXJ2aWNlLT5uZXRpZCwgbmV0aWQsIDEpKQorICAgICAgeworCWlmIChmb3VuZCkKKwkgIHJldHVybiAwOyAvKiBNb3JlIHRoYW4gb25lIHJlbGV2YW50IG1lbnUgaXRlbSAqLworCSAgCisJZm91bmQgPSBzZXJ2aWNlOworICAgICAgfQorCisgIGlmICghZm91bmQpCisgICAgcmV0dXJuIDA7IC8qIE5vIHJlbGV2YW50IG1lbnUgaXRlbXMuICovCisgIAorICBpZiAoIXB4ZSkKKyAgICAgcmV0dXJuIDE7CisgIAorICBpZiAoZm91bmQtPnNuYW1lKQorICAgIHsKKyAgICAgIG1lc3MtPnNpYWRkciA9IGFfcmVjb3JkX2Zyb21faG9zdHMoZm91bmQtPnNuYW1lLCBub3cpOworICAgICAgc25wcmludGYoKGNoYXIgKiltZXNzLT5zbmFtZSwgc2l6ZW9mKG1lc3MtPnNuYW1lKSwgIiVzIiwgZm91bmQtPnNuYW1lKTsKKyAgICB9CisgIGVsc2UgCisgICAgeworICAgICAgaWYgKGZvdW5kLT5zZXJ2ZXIuc19hZGRyICE9IDApCisJbWVzcy0+c2lhZGRyID0gZm91bmQtPnNlcnZlcjsgCisgICAgICBlbHNlCisJbWVzcy0+c2lhZGRyID0gbG9jYWw7CisgIAorICAgICAgaW5ldF9udG9wKEFGX0lORVQsICZtZXNzLT5zaWFkZHIsIChjaGFyICopbWVzcy0+c25hbWUsIElORVRfQUREUlNUUkxFTik7CisgICAgfQorICAKKyAgc25wcmludGYoKGNoYXIgKiltZXNzLT5maWxlLCBzaXplb2YobWVzcy0+ZmlsZSksIAorCSAgIHN0cmNocihmb3VuZC0+YmFzZW5hbWUsICcuJykgPyAiJXMiIDogIiVzLjAiLCBmb3VuZC0+YmFzZW5hbWUpOworICAKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGhjcF9vcHQgKnB4ZV9vcHRzKGludCBweGVfYXJjaCwgc3RydWN0IGRoY3BfbmV0aWQgKm5ldGlkLCBzdHJ1Y3QgaW5fYWRkciBsb2NhbCwgdGltZV90IG5vdykKK3sKKyNkZWZpbmUgTlVNX09QVFMgNCAgCisKKyAgdW5zaWduZWQgIGNoYXIgKnAsICpxOworICBzdHJ1Y3QgcHhlX3NlcnZpY2UgKnNlcnZpY2U7CisgIHN0YXRpYyBzdHJ1Y3QgZGhjcF9vcHQgKm8sICpyZXQ7CisgIGludCBpLCBqID0gTlVNX09QVFMgLSAxOworICBzdHJ1Y3QgaW5fYWRkciBib290X3NlcnZlcjsKKyAgCisgIC8qIFdlIHBhc3MgYmFjayByZWZlcmVuY2VzIHRvIHRoZXNlLCBoZW5jZSB0aGV5IGFyZSBkZWNsYXJlZCBzdGF0aWMgKi8KKyAgc3RhdGljIHVuc2lnbmVkIGNoYXIgZGlzY292ZXJ5X2NvbnRyb2w7CisgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGZha2VfcHJvbXB0W10gPSB7IDAsICdQJywgJ1gnLCAnRScgfTsgCisgIHN0YXRpYyBzdHJ1Y3QgZGhjcF9vcHQgKmZha2Vfb3B0cyA9IE5VTEw7CisgIAorICAvKiBEaXNhYmxlIG11bHRpY2FzdCwgc2luY2Ugd2UgZG9uJ3Qgc3VwcG9ydCBpdCwgYW5kIGJyb2FkY2FzdAorICAgICB1bmxlc3Mgd2UgbmVlZCBpdCAqLworICBkaXNjb3ZlcnlfY29udHJvbCA9IDM7CisgIAorICByZXQgPSBkYWVtb24tPmRoY3Bfb3B0czsKKyAgCisgIGlmICghZmFrZV9vcHRzICYmICEoZmFrZV9vcHRzID0gd2hpbmVfbWFsbG9jKE5VTV9PUFRTICogc2l6ZW9mKHN0cnVjdCBkaGNwX29wdCkpKSkKKyAgICByZXR1cm4gcmV0OworCisgIGZvciAoaSA9IDA7IGkgPCBOVU1fT1BUUzsgaSsrKQorICAgIHsKKyAgICAgIGZha2Vfb3B0c1tpXS5mbGFncyA9IERIT1BUX1ZFTkRPUl9NQVRDSDsKKyAgICAgIGZha2Vfb3B0c1tpXS5uZXRpZCA9IE5VTEw7CisgICAgICBmYWtlX29wdHNbaV0ubmV4dCA9IGkgPT0gKE5VTV9PUFRTIC0gMSkgPyByZXQgOiAmZmFrZV9vcHRzW2krMV07CisgICAgfQorICAKKyAgLyogY3JlYXRlIHRoZSBkYXRhIGZvciB0aGUgUFhFX01FTlUgYW5kIFBYRV9TRVJWRVJTIG9wdGlvbnMuICovCisgIHAgPSAodW5zaWduZWQgY2hhciAqKWRhZW1vbi0+ZGhjcF9idWZmOworICBxID0gKHVuc2lnbmVkIGNoYXIgKilkYWVtb24tPmRoY3BfYnVmZjM7CisKKyAgZm9yIChpID0gMCwgc2VydmljZSA9IGRhZW1vbi0+cHhlX3NlcnZpY2VzOyBzZXJ2aWNlOyBzZXJ2aWNlID0gc2VydmljZS0+bmV4dCkKKyAgICBpZiAocHhlX2FyY2ggPT0gc2VydmljZS0+Q1NBICYmIG1hdGNoX25ldGlkKHNlcnZpY2UtPm5ldGlkLCBuZXRpZCwgMSkpCisgICAgICB7CisJc2l6ZV90IGxlbiA9IHN0cmxlbihzZXJ2aWNlLT5tZW51KTsKKwkvKiBvcHQgNDMgbWF4IHNpemUgaXMgMjU1LiBlbmNhcHN1bGF0ZWQgb3B0aW9uIGhhcyB0eXBlIGFuZCBsZW5ndGgKKwkgICBieXRlcywgc28gaXRzIG1heCBzaXplIGlzIDI1My4gKi8KKwlpZiAocCAtICh1bnNpZ25lZCBjaGFyICopZGFlbW9uLT5kaGNwX2J1ZmYgKyBsZW4gKyAzIDwgMjUzKQorCSAgeworCSAgICAqKHArKykgPSBzZXJ2aWNlLT50eXBlID4+IDg7CisJICAgICoocCsrKSA9IHNlcnZpY2UtPnR5cGU7CisJICAgICoocCsrKSA9IGxlbjsKKwkgICAgbWVtY3B5KHAsIHNlcnZpY2UtPm1lbnUsIGxlbik7CisJICAgIHAgKz0gbGVuOworCSAgICBpKys7CisJICB9CisJZWxzZQorCSAgeworCSAgdG9vYmlnOgorCSAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19FUlIsIF8oIlBYRSBtZW51IHRvbyBsYXJnZSIpKTsKKwkgICAgcmV0dXJuIGRhZW1vbi0+ZGhjcF9vcHRzOworCSAgfQorCQorCWJvb3Rfc2VydmVyID0gc2VydmljZS0+YmFzZW5hbWUgPyBsb2NhbCA6IAorCSAgKHNlcnZpY2UtPnNuYW1lID8gYV9yZWNvcmRfZnJvbV9ob3N0cyhzZXJ2aWNlLT5zbmFtZSwgbm93KSA6IHNlcnZpY2UtPnNlcnZlcik7CisJCisJaWYgKGJvb3Rfc2VydmVyLnNfYWRkciAhPSAwKQorCSAgeworCSAgICBpZiAocSAtICh1bnNpZ25lZCBjaGFyICopZGFlbW9uLT5kaGNwX2J1ZmYzICsgMyArIElOQUREUlNaID49IDI1MykKKwkgICAgICBnb3RvIHRvb2JpZzsKKwkgICAgCisJICAgIC8qIEJvb3Qgc2VydmljZSB3aXRoIGtub3duIGFkZHJlc3MgLSBnaXZlIGl0ICovCisJICAgICoocSsrKSA9IHNlcnZpY2UtPnR5cGUgPj4gODsKKwkgICAgKihxKyspID0gc2VydmljZS0+dHlwZTsKKwkgICAgKihxKyspID0gMTsKKwkgICAgLyogZGVzdCBtaXNhbGlnbmVkICovCisJICAgIG1lbWNweShxLCAmYm9vdF9zZXJ2ZXIuc19hZGRyLCBJTkFERFJTWik7CisJICAgIHEgKz0gSU5BRERSU1o7CisJICB9CisJZWxzZSBpZiAoc2VydmljZS0+dHlwZSAhPSAwKQorCSAgLyogV2UgZG9uJ3Qga25vdyB0aGUgc2VydmVyIGZvciBhIHNlcnZpY2UgdHlwZSwgc28gd2UnbGwKKwkgICAgIGFsbG93IHRoZSBjbGllbnQgdG8gYnJvYWRjYXN0IGZvciBpdCAqLworCSAgZGlzY292ZXJ5X2NvbnRyb2wgPSAyOworICAgICAgfQorCisgIC8qIGlmIG5vIHByb21wdCwgd2FpdCBmb3JldmVyIGlmIHRoZXJlJ3MgYSBjaG9pY2UgKi8KKyAgZmFrZV9wcm9tcHRbMF0gPSAoaSA+IDEpID8gMjU1IDogMDsKKyAgCisgIGlmIChpID09IDApCisgICAgZGlzY292ZXJ5X2NvbnRyb2wgPSA4OyAvKiBubyBtZW51IC0ganVzdCB1c2UgdXNlIG1lc3MtPmZpbGVuYW1lICovCisgIGVsc2UKKyAgICB7CisgICAgICByZXQgPSAmZmFrZV9vcHRzW2otLV07CisgICAgICByZXQtPmxlbiA9IHAgLSAodW5zaWduZWQgY2hhciAqKWRhZW1vbi0+ZGhjcF9idWZmOworICAgICAgcmV0LT52YWwgPSAodW5zaWduZWQgY2hhciAqKWRhZW1vbi0+ZGhjcF9idWZmOworICAgICAgcmV0LT5vcHQgPSBTVUJPUFRfUFhFX01FTlU7CisKKyAgICAgIGlmIChxIC0gKHVuc2lnbmVkIGNoYXIgKilkYWVtb24tPmRoY3BfYnVmZjMgIT0gMCkKKwl7CisJICByZXQgPSAmZmFrZV9vcHRzW2otLV07IAorCSAgcmV0LT5sZW4gPSBxIC0gKHVuc2lnbmVkIGNoYXIgKilkYWVtb24tPmRoY3BfYnVmZjM7CisJICByZXQtPnZhbCA9ICh1bnNpZ25lZCBjaGFyICopZGFlbW9uLT5kaGNwX2J1ZmYzOworCSAgcmV0LT5vcHQgPSBTVUJPUFRfUFhFX1NFUlZFUlM7CisJfQorICAgIH0KKworICBmb3IgKG8gPSBkYWVtb24tPmRoY3Bfb3B0czsgbzsgbyA9IG8tPm5leHQpCisgICAgaWYgKChvLT5mbGFncyAmIERIT1BUX1ZFTkRPUl9NQVRDSCkgJiYgby0+b3B0ID09IFNVQk9QVF9QWEVfTUVOVV9QUk9NUFQpCisgICAgICBicmVhazsKKyAgCisgIGlmICghbykKKyAgICB7CisgICAgICByZXQgPSAmZmFrZV9vcHRzW2otLV07IAorICAgICAgcmV0LT5sZW4gPSBzaXplb2YoZmFrZV9wcm9tcHQpOworICAgICAgcmV0LT52YWwgPSBmYWtlX3Byb21wdDsKKyAgICAgIHJldC0+b3B0ID0gU1VCT1BUX1BYRV9NRU5VX1BST01QVDsKKyAgICB9CisgIAorICByZXQgPSAmZmFrZV9vcHRzW2otLV07IAorICByZXQtPmxlbiA9IDE7CisgIHJldC0+b3B0ID0gU1VCT1BUX1BYRV9ESVNDT1ZFUlk7CisgIHJldC0+dmFsPSAmZGlzY292ZXJ5X2NvbnRyb2w7CisgCisgIHJldHVybiByZXQ7Cit9CisgIAorc3RhdGljIHZvaWQgY2xlYXJfcGFja2V0KHN0cnVjdCBkaGNwX3BhY2tldCAqbWVzcywgdW5zaWduZWQgY2hhciAqZW5kKQoreworICBtZW1zZXQobWVzcy0+c25hbWUsIDAsIHNpemVvZihtZXNzLT5zbmFtZSkpOworICBtZW1zZXQobWVzcy0+ZmlsZSwgMCwgc2l6ZW9mKG1lc3MtPmZpbGUpKTsKKyAgbWVtc2V0KCZtZXNzLT5vcHRpb25zWzBdICsgc2l6ZW9mKHUzMiksIDAsIGVuZCAtICgmbWVzcy0+b3B0aW9uc1swXSArIHNpemVvZih1MzIpKSk7CisgIG1lc3MtPnNpYWRkci5zX2FkZHIgPSAwOworfQorCitzdHJ1Y3QgZGhjcF9ib290ICpmaW5kX2Jvb3Qoc3RydWN0IGRoY3BfbmV0aWQgKm5ldGlkKQoreworICBzdHJ1Y3QgZGhjcF9ib290ICpib290OworCisgIC8qIGRlY2lkZSB3aGljaCBkaGNwLWJvb3Qgb3B0aW9uIHdlJ3JlIHVzaW5nICovCisgIGZvciAoYm9vdCA9IGRhZW1vbi0+Ym9vdF9jb25maWc7IGJvb3Q7IGJvb3QgPSBib290LT5uZXh0KQorICAgIGlmIChtYXRjaF9uZXRpZChib290LT5uZXRpZCwgbmV0aWQsIDApKQorICAgICAgYnJlYWs7CisgIGlmICghYm9vdCkKKyAgICAvKiBObyBtYXRjaCwgbG9vayBmb3Igb25lIHdpdGhvdXQgYSBuZXRpZCAqLworICAgIGZvciAoYm9vdCA9IGRhZW1vbi0+Ym9vdF9jb25maWc7IGJvb3Q7IGJvb3QgPSBib290LT5uZXh0KQorICAgICAgaWYgKG1hdGNoX25ldGlkKGJvb3QtPm5ldGlkLCBuZXRpZCwgMSkpCisJYnJlYWs7CisKKyAgcmV0dXJuIGJvb3Q7Cit9CisKK3N0YXRpYyB2b2lkIGRvX29wdGlvbnMoc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dCwKKwkJICAgICAgIHN0cnVjdCBkaGNwX3BhY2tldCAqbWVzcywKKwkJICAgICAgIHVuc2lnbmVkIGNoYXIgKmVuZCwgCisJCSAgICAgICB1bnNpZ25lZCBjaGFyICpyZXFfb3B0aW9ucywKKwkJICAgICAgIGNoYXIgKmhvc3RuYW1lLCAKKwkJICAgICAgIGNoYXIgKmRvbWFpbiwKKwkJICAgICAgIHN0cnVjdCBkaGNwX25ldGlkICpuZXRpZCwKKwkJICAgICAgIHN0cnVjdCBpbl9hZGRyIHN1Ym5ldF9hZGRyLAorCQkgICAgICAgdW5zaWduZWQgY2hhciBmcWRuX2ZsYWdzLAorCQkgICAgICAgaW50IG51bGxfdGVybSwgaW50IHB4ZV9hcmNoLAorCQkgICAgICAgdW5zaWduZWQgY2hhciAqdXVpZCwKKwkJICAgICAgIGludCB2ZW5kb3JfY2xhc3NfbGVuLAorCQkgICAgICAgdGltZV90IG5vdywKKwkJICAgICAgIHVuc2lnbmVkIGludCBsZWFzZV90aW1lLAorCQkgICAgICAgdW5zaWduZWQgc2hvcnQgZnV6eikKK3sKKyAgc3RydWN0IGRoY3Bfb3B0ICpvcHQsICpjb25maWdfb3B0cyA9IGRhZW1vbi0+ZGhjcF9vcHRzOworICBzdHJ1Y3QgZGhjcF9ib290ICpib290OworICB1bnNpZ25lZCBjaGFyICpwOworICBpbnQgaSwgbGVuLCBmb3JjZV9lbmNhcCA9IDA7CisgIHVuc2lnbmVkIGNoYXIgZjAgPSAwLCBzMCA9IDA7CisgIGludCBkb25lX2ZpbGUgPSAwLCBkb25lX3NlcnZlciA9IDA7CisgIGludCBkb25lX3ZlbmRvcl9jbGFzcyA9IDA7CisgIHN0cnVjdCBkaGNwX25ldGlkICp0YWdpZjsKKyAgc3RydWN0IGRoY3BfbmV0aWRfbGlzdCAqaWRfbGlzdDsKKworICAvKiBmaWx0ZXIgb3B0aW9ucyBiYXNlZCBvbiB0YWdzLCB0aG9zZSB3ZSB3YW50IGdldCBESE9QVF9UQUdPSyBiaXQgc2V0ICovCisgIGlmIChjb250ZXh0KQorICAgIGNvbnRleHQtPm5ldGlkLm5leHQgPSBOVUxMOworICB0YWdpZiA9IG9wdGlvbl9maWx0ZXIobmV0aWQsIGNvbnRleHQgJiYgY29udGV4dC0+bmV0aWQubmV0ID8gJmNvbnRleHQtPm5ldGlkIDogTlVMTCwgY29uZmlnX29wdHMpOworCQorICAvKiBsb2dnaW5nICovCisgIGlmIChvcHRpb25fYm9vbChPUFRfTE9HX09QVFMpICYmIHJlcV9vcHRpb25zKQorICAgIHsKKyAgICAgIGNoYXIgKnEgPSBkYWVtb24tPm5hbWVidWZmOworICAgICAgZm9yIChpID0gMDsgcmVxX29wdGlvbnNbaV0gIT0gT1BUSU9OX0VORDsgaSsrKQorCXsKKwkgIGNoYXIgKnMgPSBvcHRpb25fc3RyaW5nKEFGX0lORVQsIHJlcV9vcHRpb25zW2ldLCBOVUxMLCAwLCBOVUxMLCAwKTsKKwkgIHEgKz0gc25wcmludGYocSwgTUFYRE5BTUUgLSAocSAtIGRhZW1vbi0+bmFtZWJ1ZmYpLAorCQkJIiVkJXMlcyVzIiwgCisJCQlyZXFfb3B0aW9uc1tpXSwKKwkJCXN0cmxlbihzKSAhPSAwID8gIjoiIDogIiIsCisJCQlzLCAKKwkJCXJlcV9vcHRpb25zW2krMV0gPT0gT1BUSU9OX0VORCA/ICIiIDogIiwgIik7CisJICBpZiAocmVxX29wdGlvbnNbaSsxXSA9PSBPUFRJT05fRU5EIHx8IChxIC0gZGFlbW9uLT5uYW1lYnVmZikgPiA0MCkKKwkgICAgeworCSAgICAgIHEgPSBkYWVtb24tPm5hbWVidWZmOworCSAgICAgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX0lORk8sIF8oIiV1IHJlcXVlc3RlZCBvcHRpb25zOiAlcyIpLCBudG9obChtZXNzLT54aWQpLCBkYWVtb24tPm5hbWVidWZmKTsKKwkgICAgfQorCX0KKyAgICB9CisgICAgICAKKyAgZm9yIChpZF9saXN0ID0gZGFlbW9uLT5mb3JjZV9icm9hZGNhc3Q7IGlkX2xpc3Q7IGlkX2xpc3QgPSBpZF9saXN0LT5uZXh0KQorICAgIGlmICgoIWlkX2xpc3QtPmxpc3QpIHx8IG1hdGNoX25ldGlkKGlkX2xpc3QtPmxpc3QsIG5ldGlkLCAwKSkKKyAgICAgIGJyZWFrOworICBpZiAoaWRfbGlzdCkKKyAgICBtZXNzLT5mbGFncyB8PSBodG9ucygweDgwMDApOyAvKiBmb3JjZSBicm9hZGNhc3QgKi8KKyAgCisgIGlmIChjb250ZXh0KQorICAgIG1lc3MtPnNpYWRkciA9IGNvbnRleHQtPmxvY2FsOworICAKKyAgLyogU2VlIGlmIHdlIGNhbiBzZW5kIHRoZSBib290IHN0dWZmIGFzIG9wdGlvbnMuCisgICAgIFRvIGRvIHRoaXMgd2UgbmVlZCBhIHJlcXVlc3RlZCBvcHRpb24gbGlzdCwgQk9PVFAKKyAgICAgYW5kIHZlcnkgb2xkIERIQ1AgY2xpZW50cyB3b24ndCBoYXZlIHRoaXMsIHdlIGFsc28gCisgICAgIHByb3ZpZGUgYW4gbWFudWFsIG9wdGlvbiB0byBkaXNhYmxlIGl0LgorICAgICBTb21lIFBYRSBST01zIGhhdmUgYnVncyAoc3VycHJpc2UhKSBhbmQgbmVlZCB6ZXJvLXRlcm1pbmF0ZWQgCisgICAgIG5hbWVzLCBzbyB3ZSBhbHdheXMgc2VuZCB0aG9zZS4gICovCisgIGlmICgoYm9vdCA9IGZpbmRfYm9vdCh0YWdpZikpKQorICAgIHsKKyAgICAgIGlmIChib290LT5zbmFtZSkKKwl7CSAgCisJICBpZiAoIW9wdGlvbl9ib29sKE9QVF9OT19PVkVSUklERSkgJiYKKwkgICAgICByZXFfb3B0aW9ucyAmJiAKKwkgICAgICBpbl9saXN0KHJlcV9vcHRpb25zLCBPUFRJT05fU05BTUUpKQorCSAgICBvcHRpb25fcHV0X3N0cmluZyhtZXNzLCBlbmQsIE9QVElPTl9TTkFNRSwgYm9vdC0+c25hbWUsIDEpOworCSAgZWxzZQorCSAgICBzdHJuY3B5KChjaGFyICopbWVzcy0+c25hbWUsIGJvb3QtPnNuYW1lLCBzaXplb2YobWVzcy0+c25hbWUpLTEpOworCX0KKyAgICAgIAorICAgICAgaWYgKGJvb3QtPmZpbGUpCisJeworCSAgaWYgKCFvcHRpb25fYm9vbChPUFRfTk9fT1ZFUlJJREUpICYmCisJICAgICAgcmVxX29wdGlvbnMgJiYgCisJICAgICAgaW5fbGlzdChyZXFfb3B0aW9ucywgT1BUSU9OX0ZJTEVOQU1FKSkKKwkgICAgb3B0aW9uX3B1dF9zdHJpbmcobWVzcywgZW5kLCBPUFRJT05fRklMRU5BTUUsIGJvb3QtPmZpbGUsIDEpOworCSAgZWxzZQorCSAgICBzdHJuY3B5KChjaGFyICopbWVzcy0+ZmlsZSwgYm9vdC0+ZmlsZSwgc2l6ZW9mKG1lc3MtPmZpbGUpLTEpOworCX0KKyAgICAgIAorICAgICAgaWYgKGJvb3QtPm5leHRfc2VydmVyLnNfYWRkcikgCisJbWVzcy0+c2lhZGRyID0gYm9vdC0+bmV4dF9zZXJ2ZXI7CisgICAgICBlbHNlIGlmIChib290LT50ZnRwX3NuYW1lKQorCW1lc3MtPnNpYWRkciA9IGFfcmVjb3JkX2Zyb21faG9zdHMoYm9vdC0+dGZ0cF9zbmFtZSwgbm93KTsKKyAgICB9CisgIGVsc2UKKyAgICAvKiBVc2UgdGhlIHZhbHVlcyBvZiB0aGUgcmVsZXZhbnQgb3B0aW9ucyBpZiBubyBkaGNwLWJvb3QgZ2l2ZW4gYW5kCisgICAgICAgdGhleSdyZSBub3QgZXhwbGljaXRseSBhc2tlZCBmb3IgYXMgb3B0aW9ucy4gT1BUSU9OX0VORCBpcyB1c2VkCisgICAgICAgYXMgYW4gaW50ZXJuYWwgd2F5IHRvIHNwZWNpZnkgc2lhZGRyIHdpdGhvdXQgdXNpbmcgZGhjcC1ib290LCBmb3IgdXNlIGluCisgICAgICAgZGhjcC1vcHRzZmlsZS4gKi8KKyAgICB7CisgICAgICBpZiAoKCFyZXFfb3B0aW9ucyB8fCAhaW5fbGlzdChyZXFfb3B0aW9ucywgT1BUSU9OX0ZJTEVOQU1FKSkgJiYKKwkgIChvcHQgPSBvcHRpb25fZmluZDIoT1BUSU9OX0ZJTEVOQU1FKSkgJiYgIShvcHQtPmZsYWdzICYgREhPUFRfRk9SQ0UpKQorCXsKKwkgIHN0cm5jcHkoKGNoYXIgKiltZXNzLT5maWxlLCAoY2hhciAqKW9wdC0+dmFsLCBzaXplb2YobWVzcy0+ZmlsZSktMSk7CisJICBkb25lX2ZpbGUgPSAxOworCX0KKyAgICAgIAorICAgICAgaWYgKCghcmVxX29wdGlvbnMgfHwgIWluX2xpc3QocmVxX29wdGlvbnMsIE9QVElPTl9TTkFNRSkpICYmCisJICAob3B0ID0gb3B0aW9uX2ZpbmQyKE9QVElPTl9TTkFNRSkpICYmICEob3B0LT5mbGFncyAmIERIT1BUX0ZPUkNFKSkKKwl7CisJICBzdHJuY3B5KChjaGFyICopbWVzcy0+c25hbWUsIChjaGFyICopb3B0LT52YWwsIHNpemVvZihtZXNzLT5zbmFtZSktMSk7CisJICBkb25lX3NlcnZlciA9IDE7CisJfQorICAgICAgCisgICAgICBpZiAoKG9wdCA9IG9wdGlvbl9maW5kMihPUFRJT05fRU5EKSkpCisJbWVzcy0+c2lhZGRyLnNfYWRkciA9ICgoc3RydWN0IGluX2FkZHIgKilvcHQtPnZhbCktPnNfYWRkcjsJCisgICAgfQorICAgICAgICAKKyAgLyogV2UgZG9uJ3Qgd2FudCB0byBkbyBvcHRpb24tb3ZlcmxvYWQgZm9yIEJPT1RQLCBzbyBtYWtlIHRoZSBmaWxlIGFuZCBzbmFtZQorICAgICBmaWVsZHMgbG9vayBsaWtlIHRoZXkgYXJlIGluIHVzZSwgZXZlbiB3aGVuIHRoZXkgYXJlbid0LiBUaGlzIGdldHMgcmVzdG9yZWQKKyAgICAgYXQgdGhlIGVuZCBvZiB0aGlzIGZ1bmN0aW9uLiAqLworCisgIGlmICghcmVxX29wdGlvbnMgfHwgb3B0aW9uX2Jvb2woT1BUX05PX09WRVJSSURFKSkKKyAgICB7CisgICAgICBmMCA9IG1lc3MtPmZpbGVbMF07CisgICAgICBtZXNzLT5maWxlWzBdID0gMTsKKyAgICAgIHMwID0gbWVzcy0+c25hbWVbMF07CisgICAgICBtZXNzLT5zbmFtZVswXSA9IDE7CisgICAgfQorICAgICAgCisgIC8qIEF0IHRoaXMgcG9pbnQsIGlmIG1lc3MtPnNuYW1lIG9yIG1lc3MtPmZpbGUgYXJlIHplcm9lZCwgdGhleSBhcmUgYXZhaWxhYmxlCisgICAgIGZvciBvcHRpb24gb3ZlcmxvYWQsIHJlc2VydmUgc3BhY2UgZm9yIHRoZSBvdmVybG9hZCBvcHRpb24uICovCisgIGlmIChtZXNzLT5maWxlWzBdID09IDAgfHwgbWVzcy0+c25hbWVbMF0gPT0gMCkKKyAgICBlbmQgLT0gMzsKKworICAvKiByZmMzMDExIHNheXMgdGhpcyBkb2Vzbid0IG5lZWQgdG8gYmUgaW4gdGhlIHJlcXVlc3RlZCBvcHRpb25zIGxpc3QuICovCisgIGlmIChzdWJuZXRfYWRkci5zX2FkZHIpCisgICAgb3B0aW9uX3B1dChtZXNzLCBlbmQsIE9QVElPTl9TVUJORVRfU0VMRUNULCBJTkFERFJTWiwgbnRvaGwoc3VibmV0X2FkZHIuc19hZGRyKSk7CisgICAKKyAgaWYgKGxlYXNlX3RpbWUgIT0gMHhmZmZmZmZmZikKKyAgICB7IAorICAgICAgdW5zaWduZWQgaW50IHQxdmFsID0gbGVhc2VfdGltZS8yOyAKKyAgICAgIHVuc2lnbmVkIGludCB0MnZhbCA9IChsZWFzZV90aW1lKjcpLzg7CisgICAgICB1bnNpZ25lZCBpbnQgaHZhbDsKKyAgICAgIAorICAgICAgLyogSWYgc2V0IGJ5IHVzZXIsIHNhbml0eSBjaGVjaywgc28gbm90IGxvbmdlciB0aGFuIGxlYXNlLiAqLworICAgICAgaWYgKChvcHQgPSBvcHRpb25fZmluZDIoT1BUSU9OX1QxKSkpCisJeworCSAgaHZhbCA9IG50b2hsKCooKHVuc2lnbmVkIGludCAqKW9wdC0+dmFsKSk7CisJICBpZiAoaHZhbCA8IGxlYXNlX3RpbWUgJiYgaHZhbCA+IDIpCisJICAgIHQxdmFsID0gaHZhbDsKKwl9CisKKyAgICAgICBpZiAoKG9wdCA9IG9wdGlvbl9maW5kMihPUFRJT05fVDIpKSkKKwl7CisJICBodmFsID0gbnRvaGwoKigodW5zaWduZWQgaW50ICopb3B0LT52YWwpKTsKKwkgIGlmIChodmFsIDwgbGVhc2VfdGltZSAmJiBodmFsID4gMikKKwkgICAgdDJ2YWwgPSBodmFsOworCX0KKyAgICAgICAJICAKKyAgICAgICAvKiBlbnN1cmUgVDEgaXMgc3RpbGwgPCBUMiAqLworICAgICAgIGlmICh0MnZhbCA8PSB0MXZhbCkKKwkgdDF2YWwgPSB0MnZhbCAtIDE7IAorCisgICAgICAgd2hpbGUgKGZ1enogPiAodDF2YWwvOCkpCisJIGZ1enogPSBmdXp6LzI7CisJIAorICAgICAgIHQxdmFsIC09IGZ1eno7CisgICAgICAgdDJ2YWwgLT0gZnV6ejsKKyAgICAgICAKKyAgICAgICBvcHRpb25fcHV0KG1lc3MsIGVuZCwgT1BUSU9OX1QxLCA0LCB0MXZhbCk7CisgICAgICAgb3B0aW9uX3B1dChtZXNzLCBlbmQsIE9QVElPTl9UMiwgNCwgdDJ2YWwpOworICAgIH0KKworICAvKiByZXBsaWVzIHRvIERIQ1BJTkZPUk0gbWF5IG5vdCBoYXZlIGEgdmFsaWQgY29udGV4dCAqLworICBpZiAoY29udGV4dCkKKyAgICB7CisgICAgICBpZiAoIW9wdGlvbl9maW5kMihPUFRJT05fTkVUTUFTSykpCisJb3B0aW9uX3B1dChtZXNzLCBlbmQsIE9QVElPTl9ORVRNQVNLLCBJTkFERFJTWiwgbnRvaGwoY29udGV4dC0+bmV0bWFzay5zX2FkZHIpKTsKKyAgCisgICAgICAvKiBNYXkgbm90IGhhdmUgYSAiZ3Vlc3NlZCIgYnJvYWRjYXN0IGFkZHJlc3MgaWYgd2UgZ290IG5vIHBhY2tldHMgdmlhIGEgcmVsYXkKKwkgZnJvbSB0aGlzIG5ldCB5ZXQgKGllIGp1c3QgdW5pY2FzdCByZW5ld2FscyBhZnRlciBhIHJlc3RhcnQgKi8KKyAgICAgIGlmIChjb250ZXh0LT5icm9hZGNhc3Quc19hZGRyICYmCisJICAhb3B0aW9uX2ZpbmQyKE9QVElPTl9CUk9BRENBU1QpKQorCW9wdGlvbl9wdXQobWVzcywgZW5kLCBPUFRJT05fQlJPQURDQVNULCBJTkFERFJTWiwgbnRvaGwoY29udGV4dC0+YnJvYWRjYXN0LnNfYWRkcikpOworICAgICAgCisgICAgICAvKiBTYW1lIGNvbW1lbnRzIGFzIGJyb2FkY2FzdCBhcHBseSwgYW5kIGFsc28gbWF5IG5vdCBiZSBhYmxlIHRvIGdldCBhIHNlbnNpYmxlCisJIGRlZmF1bHQgd2hlbiB1c2luZyBzdWJuZXQgc2VsZWN0LiAgVXNlciBtdXN0IGNvbmZpZ3VyZSBieSBzdGVhbSBpbiB0aGF0IGNhc2UuICovCisgICAgICBpZiAoY29udGV4dC0+cm91dGVyLnNfYWRkciAmJgorCSAgaW5fbGlzdChyZXFfb3B0aW9ucywgT1BUSU9OX1JPVVRFUikgJiYKKwkgICFvcHRpb25fZmluZDIoT1BUSU9OX1JPVVRFUikpCisJb3B0aW9uX3B1dChtZXNzLCBlbmQsIE9QVElPTl9ST1VURVIsIElOQUREUlNaLCBudG9obChjb250ZXh0LT5yb3V0ZXIuc19hZGRyKSk7CisgICAgICAKKyAgICAgIGlmIChkYWVtb24tPnBvcnQgPT0gTkFNRVNFUlZFUl9QT1JUICYmCisJICBpbl9saXN0KHJlcV9vcHRpb25zLCBPUFRJT05fRE5TU0VSVkVSKSAmJgorCSAgIW9wdGlvbl9maW5kMihPUFRJT05fRE5TU0VSVkVSKSkKKwlvcHRpb25fcHV0KG1lc3MsIGVuZCwgT1BUSU9OX0ROU1NFUlZFUiwgSU5BRERSU1osIG50b2hsKGNvbnRleHQtPmxvY2FsLnNfYWRkcikpOworICAgIH0KKworICBpZiAoZG9tYWluICYmIGluX2xpc3QocmVxX29wdGlvbnMsIE9QVElPTl9ET01BSU5OQU1FKSAmJiAKKyAgICAgICFvcHRpb25fZmluZDIoT1BUSU9OX0RPTUFJTk5BTUUpKQorICAgIG9wdGlvbl9wdXRfc3RyaW5nKG1lc3MsIGVuZCwgT1BUSU9OX0RPTUFJTk5BTUUsIGRvbWFpbiwgbnVsbF90ZXJtKTsKKyAKKyAgLyogTm90ZSB0aGF0IHdlIGlnbm9yZSBhdHRlbXB0cyB0byBzZXQgdGhlIGZxZG4gdXNpbmcgLS1kaGMtb3B0aW9uPTgxLDxuYW1lPiAqLworICBpZiAoaG9zdG5hbWUpCisgICAgeworICAgICAgaWYgKGluX2xpc3QocmVxX29wdGlvbnMsIE9QVElPTl9IT1NUTkFNRSkgJiYKKwkgICFvcHRpb25fZmluZDIoT1BUSU9OX0hPU1ROQU1FKSkKKwlvcHRpb25fcHV0X3N0cmluZyhtZXNzLCBlbmQsIE9QVElPTl9IT1NUTkFNRSwgaG9zdG5hbWUsIG51bGxfdGVybSk7CisgICAgICAKKyAgICAgIGlmIChmcWRuX2ZsYWdzICE9IDApCisJeworCSAgbGVuID0gc3RybGVuKGhvc3RuYW1lKSArIDM7CisJICAKKwkgIGlmIChmcWRuX2ZsYWdzICYgMHgwNCkKKwkgICAgbGVuICs9IDI7CisJICBlbHNlIGlmIChudWxsX3Rlcm0pCisJICAgIGxlbisrOworCisJICBpZiAoZG9tYWluKQorCSAgICBsZW4gKz0gc3RybGVuKGRvbWFpbikgKyAxOworCSAgZWxzZSBpZiAoZnFkbl9mbGFncyAmIDB4MDQpCisJICAgIGxlbi0tOworCisJICBpZiAoKHAgPSBmcmVlX3NwYWNlKG1lc3MsIGVuZCwgT1BUSU9OX0NMSUVOVF9GUUROLCBsZW4pKSkKKwkgICAgeworCSAgICAgICoocCsrKSA9IGZxZG5fZmxhZ3MgJiAweDBmOyAvKiBNQlogYml0cyB0byB6ZXJvICovIAorCSAgICAgICoocCsrKSA9IDI1NTsKKwkgICAgICAqKHArKykgPSAyNTU7CisKKwkgICAgICBpZiAoZnFkbl9mbGFncyAmIDB4MDQpCisJCXsKKwkJICBwID0gZG9fcmZjMTAzNV9uYW1lKHAsIGhvc3RuYW1lLCBOVUxMKTsKKwkJICBpZiAoZG9tYWluKQorCQkgICAgeworCQkgICAgICBwID0gZG9fcmZjMTAzNV9uYW1lKHAsIGRvbWFpbiwgTlVMTCk7CisJCSAgICAgICpwKysgPSAwOworCQkgICAgfQorCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgbWVtY3B5KHAsIGhvc3RuYW1lLCBzdHJsZW4oaG9zdG5hbWUpKTsKKwkJICBwICs9IHN0cmxlbihob3N0bmFtZSk7CisJCSAgaWYgKGRvbWFpbikKKwkJICAgIHsKKwkJICAgICAgKihwKyspID0gJy4nOworCQkgICAgICBtZW1jcHkocCwgZG9tYWluLCBzdHJsZW4oZG9tYWluKSk7CisJCSAgICAgIHAgKz0gc3RybGVuKGRvbWFpbik7CisJCSAgICB9CisJCSAgaWYgKG51bGxfdGVybSkKKwkJICAgICoocCsrKSA9IDA7CisJCX0KKwkgICAgfQorCX0KKyAgICB9ICAgICAgCisKKyAgZm9yIChvcHQgPSBjb25maWdfb3B0czsgb3B0OyBvcHQgPSBvcHQtPm5leHQpCisgICAgeworICAgICAgaW50IG9wdG5vID0gb3B0LT5vcHQ7CisKKyAgICAgIC8qIG5ldGlkcyBtYXRjaCBhbmQgbm90IGVuY2Fwc3VsYXRlZD8gKi8KKyAgICAgIGlmICghKG9wdC0+ZmxhZ3MgJiBESE9QVF9UQUdPSykpCisJY29udGludWU7CisgICAgICAKKyAgICAgIC8qIHdhcyBpdCBhc2tlZCBmb3IsIG9yIGFyZSB3ZSBzZW5kaW5nIGl0IGFueXdheT8gKi8KKyAgICAgIGlmICghKG9wdC0+ZmxhZ3MgJiBESE9QVF9GT1JDRSkgJiYgIWluX2xpc3QocmVxX29wdGlvbnMsIG9wdG5vKSkKKwljb250aW51ZTsKKyAgICAgIAorICAgICAgLyogcHJvaGliaXQgc29tZSB1c2VkLWludGVybmFsbHkgb3B0aW9ucy4gVDEgYW5kIFQyIGFscmVhZHkgaGFuZGxlZC4gKi8KKyAgICAgIGlmIChvcHRubyA9PSBPUFRJT05fQ0xJRU5UX0ZRRE4gfHwKKwkgIG9wdG5vID09IE9QVElPTl9NQVhNRVNTQUdFIHx8CisJICBvcHRubyA9PSBPUFRJT05fT1ZFUkxPQUQgfHwKKwkgIG9wdG5vID09IE9QVElPTl9QQUQgfHwKKwkgIG9wdG5vID09IE9QVElPTl9FTkQgfHwKKwkgIG9wdG5vID09IE9QVElPTl9UMSB8fAorCSAgb3B0bm8gPT0gT1BUSU9OX1QyKQorCWNvbnRpbnVlOworCisgICAgICBpZiAob3B0bm8gPT0gT1BUSU9OX1NOQU1FICYmIGRvbmVfc2VydmVyKQorCWNvbnRpbnVlOworCisgICAgICBpZiAob3B0bm8gPT0gT1BUSU9OX0ZJTEVOQU1FICYmIGRvbmVfZmlsZSkKKwljb250aW51ZTsKKyAgICAgIAorICAgICAgLyogRm9yIHRoZSBvcHRpb25zIHdlIGhhdmUgZGVmYXVsdCB2YWx1ZXMgb24KKwkgZGhjLW9wdGlvbj08b3B0aW9ubm8+IG1lYW5zICJkb24ndCBpbmNsdWRlIHRoaXMgb3B0aW9uIgorCSBub3QgImluY2x1ZGUgYSB6ZXJvLWxlbmd0aCBvcHRpb24iICovCisgICAgICBpZiAob3B0LT5sZW4gPT0gMCAmJiAKKwkgIChvcHRubyA9PSBPUFRJT05fTkVUTUFTSyB8fAorCSAgIG9wdG5vID09IE9QVElPTl9CUk9BRENBU1QgfHwKKwkgICBvcHRubyA9PSBPUFRJT05fUk9VVEVSIHx8CisJICAgb3B0bm8gPT0gT1BUSU9OX0ROU1NFUlZFUiB8fCAKKwkgICBvcHRubyA9PSBPUFRJT05fRE9NQUlOTkFNRSB8fAorCSAgIG9wdG5vID09IE9QVElPTl9IT1NUTkFNRSkpCisJY29udGludWU7CisKKyAgICAgIC8qIHZlbmRvci1jbGFzcyBjb21lcyBmcm9tIGVsc2V3aGVyZSBmb3IgUFhFICovCisgICAgICBpZiAocHhlX2FyY2ggIT0gLTEgJiYgb3B0bm8gPT0gT1BUSU9OX1ZFTkRPUl9JRCkKKwljb250aW51ZTsKKyAgICAgIAorICAgICAgLyogYWx3YXlzIGZvcmNlIG51bGwtdGVybSBmb3IgZmlsZW5hbWUgYW5kIHNlcnZlcm5hbWUgLSBidWdneSBQWEUgYWdhaW4uICovCisgICAgICBsZW4gPSBkb19vcHQob3B0LCBOVUxMLCBjb250ZXh0LCAKKwkJICAgKG9wdG5vID09IE9QVElPTl9TTkFNRSB8fCBvcHRubyA9PSBPUFRJT05fRklMRU5BTUUpID8gMSA6IG51bGxfdGVybSk7CisKKyAgICAgIGlmICgocCA9IGZyZWVfc3BhY2UobWVzcywgZW5kLCBvcHRubywgbGVuKSkpCisJeworCSAgZG9fb3B0KG9wdCwgcCwgY29udGV4dCwgCisJCSAob3B0bm8gPT0gT1BUSU9OX1NOQU1FIHx8IG9wdG5vID09IE9QVElPTl9GSUxFTkFNRSkgPyAxIDogbnVsbF90ZXJtKTsKKwkgIAorCSAgLyogSWYgd2Ugc2VuZCBhIHZlbmRvci1pZCwgcmV2aXNpdCB3aGljaCB2ZW5kb3Itb3BzIHdlIGNvbnNpZGVyIAorCSAgICAgaXQgYXBwcm9wcmlhdGUgdG8gc2VuZC4gKi8KKwkgIGlmIChvcHRubyA9PSBPUFRJT05fVkVORE9SX0lEKQorCSAgICB7CisJICAgICAgbWF0Y2hfdmVuZG9yX29wdHMocCAtIDIsIGNvbmZpZ19vcHRzKTsKKwkgICAgICBkb25lX3ZlbmRvcl9jbGFzcyA9IDE7CisJICAgIH0KKwl9ICAKKyAgICB9CisKKyAgLyogTm93IHNlbmQgb3B0aW9ucyB0byBiZSBlbmNhcHN1bGF0ZWQgaW4gYXJiaXRyYXJ5IG9wdGlvbnMsIAorICAgICBlZyBkaGNwLW9wdGlvbj1lbmNhcDoxNzIsMTcsLi4uLi4uLgorICAgICBBbHNvIGhhbmRsZSB2ZW5kb3ItaWRlbnRpZnlpbmcgdmVuZG9yLWVuY2Fwc3VsYXRlZCBvcHRpb25zLAorICAgICBkaGNwLW9wdGlvbiA9IHZpLWVuY2FwOjEzLDE3LC4uLi4uLi4KKyAgICAgVGhlIG1heSBiZSBtb3JlIHRoYXQgb25lICJvdXRlciIgdG8gZG8sIHNvIGdyb3VwCisgICAgIGFsbCB0aGUgb3B0aW9ucyB3aGljaCBtYXRjaCBlYWNoIG91dGVyIGluIHR1cm4uICovCisgIGZvciAob3B0ID0gY29uZmlnX29wdHM7IG9wdDsgb3B0ID0gb3B0LT5uZXh0KQorICAgIG9wdC0+ZmxhZ3MgJj0gfkRIT1BUX0VOQ0FQX0RPTkU7CisgIAorICBmb3IgKG9wdCA9IGNvbmZpZ19vcHRzOyBvcHQ7IG9wdCA9IG9wdC0+bmV4dCkKKyAgICB7CisgICAgICBpbnQgZmxhZ3M7CisgICAgICAKKyAgICAgIGlmICgoZmxhZ3MgPSAob3B0LT5mbGFncyAmIChESE9QVF9FTkNBUFNVTEFURSB8IERIT1BUX1JGQzM5MjUpKSkpCisJeworCSAgaW50IGZvdW5kID0gMDsKKwkgIHN0cnVjdCBkaGNwX29wdCAqbzsKKworCSAgaWYgKG9wdC0+ZmxhZ3MgJiBESE9QVF9FTkNBUF9ET05FKQorCSAgICBjb250aW51ZTsKKworCSAgZm9yIChsZW4gPSAwLCBvID0gY29uZmlnX29wdHM7IG87IG8gPSBvLT5uZXh0KQorCSAgICB7CisJICAgICAgaW50IG91dGVyID0gZmxhZ3MgJiBESE9QVF9FTkNBUFNVTEFURSA/IG8tPnUuZW5jYXAgOiBPUFRJT05fVkVORE9SX0lERU5UX09QVDsKKworCSAgICAgIG8tPmZsYWdzICY9IH5ESE9QVF9FTkNBUF9NQVRDSDsKKwkgICAgICAKKwkgICAgICBpZiAoIShvLT5mbGFncyAmIGZsYWdzKSB8fCBvcHQtPnUuZW5jYXAgIT0gby0+dS5lbmNhcCkKKwkJY29udGludWU7CisJICAgICAgCisJICAgICAgby0+ZmxhZ3MgfD0gREhPUFRfRU5DQVBfRE9ORTsKKwkgICAgICBpZiAobWF0Y2hfbmV0aWQoby0+bmV0aWQsIHRhZ2lmLCAxKSAmJgorCQkgICgoby0+ZmxhZ3MgJiBESE9QVF9GT1JDRSkgfHwgaW5fbGlzdChyZXFfb3B0aW9ucywgb3V0ZXIpKSkKKwkJeworCQkgIG8tPmZsYWdzIHw9IERIT1BUX0VOQ0FQX01BVENIOworCQkgIGZvdW5kID0gMTsKKwkJICBsZW4gKz0gZG9fb3B0KG8sIE5VTEwsIE5VTEwsIDApICsgMjsKKwkJfQorCSAgICB9IAorCSAgCisJICBpZiAoZm91bmQpCisJICAgIHsgCisJICAgICAgaWYgKGZsYWdzICYgREhPUFRfRU5DQVBTVUxBVEUpCisJCWRvX2VuY2FwX29wdHMoY29uZmlnX29wdHMsIG9wdC0+dS5lbmNhcCwgREhPUFRfRU5DQVBfTUFUQ0gsIG1lc3MsIGVuZCwgbnVsbF90ZXJtKTsKKwkgICAgICBlbHNlIGlmIChsZW4gPiAyNTApCisJCW15X3N5c2xvZyhNU19ESENQIHwgTE9HX1dBUk5JTkcsIF8oImNhbm5vdCBzZW5kIFJGQzM5MjUgb3B0aW9uOiB0b28gbWFueSBvcHRpb25zIGZvciBlbnRlcnByaXNlIG51bWJlciAlZCIpLCBvcHQtPnUuZW5jYXApOworCSAgICAgIGVsc2UgaWYgKChwID0gZnJlZV9zcGFjZShtZXNzLCBlbmQsICBPUFRJT05fVkVORE9SX0lERU5UX09QVCwgbGVuICsgNSkpKQorCQl7CisJCSAgaW50IHN3YXBfZW50ID0gaHRvbmwob3B0LT51LmVuY2FwKTsKKwkJICBtZW1jcHkocCwgJnN3YXBfZW50LCA0KTsKKwkJICBwICs9IDQ7CisJCSAgKihwKyspID0gbGVuOworCQkgIGZvciAobyA9IGNvbmZpZ19vcHRzOyBvOyBvID0gby0+bmV4dCkKKwkJICAgIGlmIChvLT5mbGFncyAmIERIT1BUX0VOQ0FQX01BVENIKQorCQkgICAgICB7CisJCQlsZW4gPSBkb19vcHQobywgcCArIDIsIE5VTEwsIDApOworCQkJKihwKyspID0gby0+b3B0OworCQkJKihwKyspID0gbGVuOworCQkJcCArPSBsZW47CisJCSAgICAgIH0gICAgIAorCQl9CisJICAgIH0KKwl9CisgICAgfSAgICAgIAorCisgIGZvcmNlX2VuY2FwID0gcHJ1bmVfdmVuZG9yX29wdHModGFnaWYpOworICAKKyAgaWYgKGNvbnRleHQgJiYgcHhlX2FyY2ggIT0gLTEpCisgICAgeworICAgICAgcHhlX21pc2MobWVzcywgZW5kLCB1dWlkKTsKKyAgICAgIGlmICghcHhlX3VlZmlfd29ya2Fyb3VuZChweGVfYXJjaCwgdGFnaWYsIG1lc3MsIGNvbnRleHQtPmxvY2FsLCBub3csIDApKQorCWNvbmZpZ19vcHRzID0gcHhlX29wdHMocHhlX2FyY2gsIHRhZ2lmLCBjb250ZXh0LT5sb2NhbCwgbm93KTsKKyAgICB9CisKKyAgaWYgKChmb3JjZV9lbmNhcCB8fCBpbl9saXN0KHJlcV9vcHRpb25zLCBPUFRJT05fVkVORE9SX0NMQVNTX09QVCkpICYmCisgICAgICBkb19lbmNhcF9vcHRzKGNvbmZpZ19vcHRzLCBPUFRJT05fVkVORE9SX0NMQVNTX09QVCwgREhPUFRfVkVORE9SX01BVENILCBtZXNzLCBlbmQsIG51bGxfdGVybSkgJiYgCisgICAgICBweGVfYXJjaCA9PSAtMSAmJiAhZG9uZV92ZW5kb3JfY2xhc3MgJiYgdmVuZG9yX2NsYXNzX2xlbiAhPSAwICYmCisgICAgICAocCA9IGZyZWVfc3BhY2UobWVzcywgZW5kLCBPUFRJT05fVkVORE9SX0lELCB2ZW5kb3JfY2xhc3NfbGVuKSkpCisgICAgLyogSWYgd2Ugc2VuZCB2ZW5kb3IgZW5jYXBzdWxhdGVkIG9wdGlvbnMsIGFuZCBoYXZlbid0IGFscmVhZHkgc2VudCBvcHRpb24gNjAsCisgICAgICAgZWNobyBiYWNrIHRoZSB2YWx1ZSB3ZSBnb3QgZnJvbSB0aGUgY2xpZW50LiAqLworICAgIG1lbWNweShwLCBkYWVtb24tPmRoY3BfYnVmZjMsIHZlbmRvcl9jbGFzc19sZW4pOwkgICAgCisgICAKKyAgIC8qIHJlc3RvcmUgQk9PVFAgYW50aS1vdmVybG9hZCBoYWNrICovCisgIGlmICghcmVxX29wdGlvbnMgfHwgb3B0aW9uX2Jvb2woT1BUX05PX09WRVJSSURFKSkKKyAgICB7CisgICAgICBtZXNzLT5maWxlWzBdID0gZjA7CisgICAgICBtZXNzLT5zbmFtZVswXSA9IHMwOworICAgIH0KK30KKworc3RhdGljIHZvaWQgYXBwbHlfZGVsYXkodTMyIHhpZCwgdGltZV90IHJlY3Z0aW1lLCBzdHJ1Y3QgZGhjcF9uZXRpZCAqbmV0aWQpCit7CisgIHN0cnVjdCBkZWxheV9jb25maWcgKmRlbGF5X2NvbmY7CisgIAorICAvKiBEZWNpZGUgd2hpY2ggZGVsYXlfY29uZmlnIG9wdGlvbiB3ZSdyZSB1c2luZyAqLworICBmb3IgKGRlbGF5X2NvbmYgPSBkYWVtb24tPmRlbGF5X2NvbmY7IGRlbGF5X2NvbmY7IGRlbGF5X2NvbmYgPSBkZWxheV9jb25mLT5uZXh0KQorICAgIGlmIChtYXRjaF9uZXRpZChkZWxheV9jb25mLT5uZXRpZCwgbmV0aWQsIDApKQorICAgICAgYnJlYWs7CisgIAorICBpZiAoIWRlbGF5X2NvbmYpCisgICAgLyogTm8gbWF0Y2gsIGxvb2sgZm9yIG9uZSB3aXRob3V0IGEgbmV0aWQgKi8KKyAgICBmb3IgKGRlbGF5X2NvbmYgPSBkYWVtb24tPmRlbGF5X2NvbmY7IGRlbGF5X2NvbmY7IGRlbGF5X2NvbmYgPSBkZWxheV9jb25mLT5uZXh0KQorICAgICAgaWYgKG1hdGNoX25ldGlkKGRlbGF5X2NvbmYtPm5ldGlkLCBuZXRpZCwgMSkpCisgICAgICAgIGJyZWFrOworCisgIGlmIChkZWxheV9jb25mKQorICAgIHsKKyAgICAgIGlmICghb3B0aW9uX2Jvb2woT1BUX1FVSUVUX0RIQ1ApKQorCW15X3N5c2xvZyhNU19ESENQIHwgTE9HX0lORk8sIF8oIiV1IHJlcGx5IGRlbGF5OiAlZCIpLCBudG9obCh4aWQpLCBkZWxheV9jb25mLT5kZWxheSk7CisgICAgICBkZWxheV9kaGNwKHJlY3Z0aW1lLCBkZWxheV9jb25mLT5kZWxheSwgLTEsIDAsIDApOworICAgIH0KK30KKworI2VuZGlmCisgIAorCisgIAorICAKKworCisgIApkaWZmIC0tZ2l0IGEvc3JjL3JmYzMzMTUuYyBiL3NyYy9yZmMzMzE1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNhNDNlMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9yZmMzMzE1LmMKQEAgLTAsMCArMSwyMTk3IEBACisvKiBkbnNtYXNxIGlzIENvcHlyaWdodCAoYykgMjAwMC0yMDE3IFNpbW9uIEtlbGxleQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMgZGF0ZWQgMjkgSnVuZSwgMjAwNy4KKyAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworCisjaW5jbHVkZSAiZG5zbWFzcS5oIgorCisjaWZkZWYgSEFWRV9ESENQNgorCitzdHJ1Y3Qgc3RhdGUgeworICB1bnNpZ25lZCBjaGFyICpjbGlkOworICBpbnQgY2xpZF9sZW4sIGlhaWQsIGlhX3R5cGUsIGludGVyZmFjZSwgaG9zdG5hbWVfYXV0aCwgbGVhc2VfYWxsb2NhdGU7CisgIGNoYXIgKmNsaWVudF9ob3N0bmFtZSwgKmhvc3RuYW1lLCAqZG9tYWluLCAqc2VuZF9kb21haW47CisgIHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQ7CisgIHN0cnVjdCBpbjZfYWRkciAqbGlua19hZGRyZXNzLCAqZmFsbGJhY2ssICpsbF9hZGRyLCAqdWxhX2FkZHI7CisgIHVuc2lnbmVkIGludCB4aWQsIGZxZG5fZmxhZ3M7CisgIGNoYXIgKmlmYWNlX25hbWU7CisgIHZvaWQgKnBhY2tldF9vcHRpb25zLCAqZW5kOworICBzdHJ1Y3QgZGhjcF9uZXRpZCAqdGFncywgKmNvbnRleHRfdGFnczsKKyAgdW5zaWduZWQgY2hhciBtYWNbREhDUF9DSEFERFJfTUFYXTsKKyAgdW5zaWduZWQgaW50IG1hY19sZW4sIG1hY190eXBlOworI2lmZGVmIE9QVElPTjZfUFJFRklYX0NMQVNTCisgIHN0cnVjdCBwcmVmaXhfY2xhc3MgKnNlbmRfcHJlZml4X2NsYXNzOworI2VuZGlmCit9OworCitzdGF0aWMgaW50IGRoY3A2X21heWJlX3JlbGF5KHN0cnVjdCBzdGF0ZSAqc3RhdGUsIHZvaWQgKmluYnVmZiwgc2l6ZV90IHN6LCAKKwkJCSAgICAgc3RydWN0IGluNl9hZGRyICpjbGllbnRfYWRkciwgaW50IGlzX3VuaWNhc3QsIHRpbWVfdCBub3cpOworc3RhdGljIGludCBkaGNwNl9ub19yZWxheShzdHJ1Y3Qgc3RhdGUgKnN0YXRlLCBpbnQgbXNnX3R5cGUsIHZvaWQgKmluYnVmZiwgc2l6ZV90IHN6LCBpbnQgaXNfdW5pY2FzdCwgdGltZV90IG5vdyk7CitzdGF0aWMgdm9pZCBsb2c2X29wdHMoaW50IG5lc3QsIHVuc2lnbmVkIGludCB4aWQsIHZvaWQgKnN0YXJ0X29wdHMsIHZvaWQgKmVuZF9vcHRzKTsKK3N0YXRpYyB2b2lkIGxvZzZfcGFja2V0KHN0cnVjdCBzdGF0ZSAqc3RhdGUsIGNoYXIgKnR5cGUsIHN0cnVjdCBpbjZfYWRkciAqYWRkciwgY2hhciAqc3RyaW5nKTsKK3N0YXRpYyB2b2lkIGxvZzZfcXVpZXQoc3RydWN0IHN0YXRlICpzdGF0ZSwgY2hhciAqdHlwZSwgc3RydWN0IGluNl9hZGRyICphZGRyLCBjaGFyICpzdHJpbmcpOworc3RhdGljIHZvaWQgKm9wdDZfZmluZCAodm9pZCAqb3B0cywgdm9pZCAqZW5kLCB1bnNpZ25lZCBpbnQgc2VhcmNoLCB1bnNpZ25lZCBpbnQgbWluc2l6ZSk7CitzdGF0aWMgdm9pZCAqb3B0Nl9uZXh0KHZvaWQgKm9wdHMsIHZvaWQgKmVuZCk7CitzdGF0aWMgdW5zaWduZWQgaW50IG9wdDZfdWludCh1bnNpZ25lZCBjaGFyICpvcHQsIGludCBvZmZzZXQsIGludCBzaXplKTsKK3N0YXRpYyB2b2lkIGdldF9jb250ZXh0X3RhZyhzdHJ1Y3Qgc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0KTsKK3N0YXRpYyBpbnQgY2hlY2tfaWEoc3RydWN0IHN0YXRlICpzdGF0ZSwgdm9pZCAqb3B0LCB2b2lkICoqZW5kcCwgdm9pZCAqKmlhX29wdGlvbik7CitzdGF0aWMgaW50IGJ1aWxkX2lhKHN0cnVjdCBzdGF0ZSAqc3RhdGUsIGludCAqdDFjbnRyKTsKK3N0YXRpYyB2b2lkIGVuZF9pYShpbnQgdDFjbnRyLCB1bnNpZ25lZCBpbnQgbWluX3RpbWUsIGludCBkb19mdXp6KTsKKyNpZmRlZiBPUFRJT042X1BSRUZJWF9DTEFTUworc3RhdGljIHN0cnVjdCBwcmVmaXhfY2xhc3MgKnByZWZpeF9jbGFzc19mcm9tX2NvbnRleHQoc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dCk7CisjZW5kaWYKK3N0YXRpYyB2b2lkIG1hcmtfY29udGV4dF91c2VkKHN0cnVjdCBzdGF0ZSAqc3RhdGUsIHN0cnVjdCBpbjZfYWRkciAqYWRkcik7CitzdGF0aWMgdm9pZCBtYXJrX2NvbmZpZ191c2VkKHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQsIHN0cnVjdCBpbjZfYWRkciAqYWRkcik7CitzdGF0aWMgaW50IGNoZWNrX2FkZHJlc3Moc3RydWN0IHN0YXRlICpzdGF0ZSwgc3RydWN0IGluNl9hZGRyICphZGRyKTsKK3N0YXRpYyB2b2lkIGFkZF9hZGRyZXNzKHN0cnVjdCBzdGF0ZSAqc3RhdGUsIHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQsIHVuc2lnbmVkIGludCBsZWFzZV90aW1lLCB2b2lkICppYV9vcHRpb24sIAorCQkJdW5zaWduZWQgaW50ICptaW5fdGltZSwgc3RydWN0IGluNl9hZGRyICphZGRyLCB0aW1lX3Qgbm93KTsKK3N0YXRpYyB2b2lkIHVwZGF0ZV9sZWFzZXMoc3RydWN0IHN0YXRlICpzdGF0ZSwgc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dCwgc3RydWN0IGluNl9hZGRyICphZGRyLCB1bnNpZ25lZCBpbnQgbGVhc2VfdGltZSwgdGltZV90IG5vdyk7CitzdGF0aWMgaW50IGFkZF9sb2NhbF9hZGRycyhzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0KTsKK3N0YXRpYyBzdHJ1Y3QgZGhjcF9uZXRpZCAqYWRkX29wdGlvbnMoc3RydWN0IHN0YXRlICpzdGF0ZSwgaW50IGRvX3JlZnJlc2gpOworc3RhdGljIHZvaWQgY2FsY3VsYXRlX3RpbWVzKHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQsIHVuc2lnbmVkIGludCAqbWluX3RpbWUsIHVuc2lnbmVkIGludCAqdmFsaWRfdGltZXAsIAorCQkJICAgIHVuc2lnbmVkIGludCAqcHJlZmVycmVkX3RpbWVwLCB1bnNpZ25lZCBpbnQgbGVhc2VfdGltZSk7CisKKyNkZWZpbmUgb3B0Nl9sZW4ob3B0KSAoKGludCkob3B0Nl91aW50KG9wdCwgLTIsIDIpKSkKKyNkZWZpbmUgb3B0Nl90eXBlKG9wdCkgKG9wdDZfdWludChvcHQsIC00LCAyKSkKKyNkZWZpbmUgb3B0Nl9wdHIob3B0LCBpKSAoKHZvaWQgKikmKCgodW5zaWduZWQgY2hhciAqKShvcHQpKVs0KyhpKV0pKQorCisjZGVmaW5lIG9wdDZfdXNlcl92ZW5kb3JfcHRyKG9wdCwgaSkgKCh2b2lkICopJigoKHVuc2lnbmVkIGNoYXIgKikob3B0KSlbMisoaSldKSkKKyNkZWZpbmUgb3B0Nl91c2VyX3ZlbmRvcl9sZW4ob3B0KSAoKGludCkob3B0Nl91aW50KG9wdCwgLTQsIDIpKSkKKyNkZWZpbmUgb3B0Nl91c2VyX3ZlbmRvcl9uZXh0KG9wdCwgZW5kKSAob3B0Nl9uZXh0KCgodm9pZCAqKSBvcHQpIC0gMiwgZW5kKSkKKyAKKwordW5zaWduZWQgc2hvcnQgZGhjcDZfcmVwbHkoc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dCwgaW50IGludGVyZmFjZSwgY2hhciAqaWZhY2VfbmFtZSwKKwkJCSAgIHN0cnVjdCBpbjZfYWRkciAqZmFsbGJhY2ssICBzdHJ1Y3QgaW42X2FkZHIgKmxsX2FkZHIsIHN0cnVjdCBpbjZfYWRkciAqdWxhX2FkZHIsCisJCQkgICBzaXplX3Qgc3osIHN0cnVjdCBpbjZfYWRkciAqY2xpZW50X2FkZHIsIHRpbWVfdCBub3cpCit7CisgIHN0cnVjdCBkaGNwX3ZlbmRvciAqdmVuZG9yOworICBpbnQgbXNnX3R5cGU7CisgIHN0cnVjdCBzdGF0ZSBzdGF0ZTsKKyAgCisgIGlmIChzeiA8PSA0KQorICAgIHJldHVybiAwOworICAKKyAgbXNnX3R5cGUgPSAqKCh1bnNpZ25lZCBjaGFyICopZGFlbW9uLT5kaGNwX3BhY2tldC5pb3ZfYmFzZSk7CisgIAorICAvKiBNYXJrIHRoZXNlIHNvIHdlIG9ubHkgbWF0Y2ggZWFjaCBhdCBtb3N0IG9uY2UsIHRvIGF2b2lkIHRhbmdsZWQgbGlua2VkIGxpc3RzICovCisgIGZvciAodmVuZG9yID0gZGFlbW9uLT5kaGNwX3ZlbmRvcnM7IHZlbmRvcjsgdmVuZG9yID0gdmVuZG9yLT5uZXh0KQorICAgIHZlbmRvci0+bmV0aWQubmV4dCA9ICZ2ZW5kb3ItPm5ldGlkOworICAKKyAgcmVzZXRfY291bnRlcigpOworICBzdGF0ZS5jb250ZXh0ID0gY29udGV4dDsKKyAgc3RhdGUuaW50ZXJmYWNlID0gaW50ZXJmYWNlOworICBzdGF0ZS5pZmFjZV9uYW1lID0gaWZhY2VfbmFtZTsKKyAgc3RhdGUuZmFsbGJhY2sgPSBmYWxsYmFjazsKKyAgc3RhdGUubGxfYWRkciA9IGxsX2FkZHI7CisgIHN0YXRlLnVsYV9hZGRyID0gdWxhX2FkZHI7CisgIHN0YXRlLm1hY19sZW4gPSAwOworICBzdGF0ZS50YWdzID0gTlVMTDsKKyAgc3RhdGUubGlua19hZGRyZXNzID0gTlVMTDsKKworICBpZiAoZGhjcDZfbWF5YmVfcmVsYXkoJnN0YXRlLCBkYWVtb24tPmRoY3BfcGFja2V0Lmlvdl9iYXNlLCBzeiwgY2xpZW50X2FkZHIsIAorCQkJSU42X0lTX0FERFJfTVVMVElDQVNUKGNsaWVudF9hZGRyKSwgbm93KSkKKyAgICByZXR1cm4gbXNnX3R5cGUgPT0gREhDUDZSRUxBWUZPUlcgPyBESENQVjZfU0VSVkVSX1BPUlQgOiBESENQVjZfQ0xJRU5UX1BPUlQ7CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qIFRoaXMgY29zdCBtZSBibG9vZCB0byB3cml0ZSwgaXQgd2lsbCBwcm9iYWJseSBjb3N0IHlvdSBibG9vZCB0byB1bmRlcnN0YW5kIC0gc3JrLiAqLworc3RhdGljIGludCBkaGNwNl9tYXliZV9yZWxheShzdHJ1Y3Qgc3RhdGUgKnN0YXRlLCB2b2lkICppbmJ1ZmYsIHNpemVfdCBzeiwgCisJCQkgICAgIHN0cnVjdCBpbjZfYWRkciAqY2xpZW50X2FkZHIsIGludCBpc191bmljYXN0LCB0aW1lX3Qgbm93KQoreworICB2b2lkICplbmQgPSBpbmJ1ZmYgKyBzejsKKyAgdm9pZCAqb3B0cyA9IGluYnVmZiArIDM0OworICBpbnQgbXNnX3R5cGUgPSAqKCh1bnNpZ25lZCBjaGFyICopaW5idWZmKTsKKyAgdW5zaWduZWQgY2hhciAqb3V0bXNndHlwZXA7CisgIHZvaWQgKm9wdDsKKyAgc3RydWN0IGRoY3BfdmVuZG9yICp2ZW5kb3I7CisKKyAgLyogaWYgbm90IGFuIGVuY2Fwc3VsYXRlZCByZWxheWVkIG1lc3NhZ2UsIGp1c3QgZG8gdGhlIHN0dWZmICovCisgIGlmIChtc2dfdHlwZSAhPSBESENQNlJFTEFZRk9SVykKKyAgICB7CisgICAgICAvKiBpZiBsaW5rX2FkZHJlc3MgIT0gTlVMTCBpZiBwb2ludHMgdG8gdGhlIGxpbmsgYWRkcmVzcyBmaWVsZCBvZiB0aGUgCisJIGlubmVybW9zdCBuZXN0ZWQgUkVMQVlGT1JXIG1lc3NhZ2UsIHdoaWNoIGlzIHdoZXJlIHdlIGZpbmQgdGhlCisJIGFkZHJlc3Mgb2YgdGhlIG5ldHdvcmsgb24gd2hpY2ggd2UgY2FuIGFsbG9jYXRlIGFuIGFkZHJlc3MuCisJIFJlY2FsY3VsYXRlIHRoZSBhdmFpbGFibGUgY29udGV4dHMgdXNpbmcgdGhhdCBpbmZvcm1hdGlvbi4gCisKKyAgICAgIGxpbmtfYWRkcmVzcyA9PSBOVUxMIG1lYW5zIHRoZXJlJ3Mgbm8gcmVsYXkgaW4gdXNlLCBzbyB3ZSB0cnkgYW5kIGZpbmQgdGhlIGNsaWVudCdzIAorICAgICAgTUFDIGFkZHJlc3MgZnJvbSB0aGUgbG9jYWwgTkQgY2FjaGUuICovCisgICAgICAKKyAgICAgIGlmICghc3RhdGUtPmxpbmtfYWRkcmVzcykKKwlnZXRfY2xpZW50X21hYyhjbGllbnRfYWRkciwgc3RhdGUtPmludGVyZmFjZSwgc3RhdGUtPm1hYywgJnN0YXRlLT5tYWNfbGVuLCAmc3RhdGUtPm1hY190eXBlLCBub3cpOworICAgICAgZWxzZQorCXsKKwkgIHN0cnVjdCBkaGNwX2NvbnRleHQgKmM7CisJICBzdGF0ZS0+Y29udGV4dCA9IE5VTEw7CisJICAgCisJICBpZiAoIUlONl9JU19BRERSX0xPT1BCQUNLKHN0YXRlLT5saW5rX2FkZHJlc3MpICYmCisJICAgICAgIUlONl9JU19BRERSX0xJTktMT0NBTChzdGF0ZS0+bGlua19hZGRyZXNzKSAmJgorCSAgICAgICFJTjZfSVNfQUREUl9NVUxUSUNBU1Qoc3RhdGUtPmxpbmtfYWRkcmVzcykpCisJICAgIGZvciAoYyA9IGRhZW1vbi0+ZGhjcDY7IGM7IGMgPSBjLT5uZXh0KQorCSAgICAgIGlmICgoYy0+ZmxhZ3MgJiBDT05URVhUX0RIQ1ApICYmCisJCSAgIShjLT5mbGFncyAmIChDT05URVhUX1RFTVBMQVRFIHwgQ09OVEVYVF9PTEQpKSAmJgorCQkgIGlzX3NhbWVfbmV0NihzdGF0ZS0+bGlua19hZGRyZXNzLCAmYy0+c3RhcnQ2LCBjLT5wcmVmaXgpICYmCisJCSAgaXNfc2FtZV9uZXQ2KHN0YXRlLT5saW5rX2FkZHJlc3MsICZjLT5lbmQ2LCBjLT5wcmVmaXgpKQorCQl7CisJCSAgYy0+cHJlZmVycmVkID0gYy0+dmFsaWQgPSAweGZmZmZmZmZmOworCQkgIGMtPmN1cnJlbnQgPSBzdGF0ZS0+Y29udGV4dDsKKwkJICBzdGF0ZS0+Y29udGV4dCA9IGM7CisJCX0KKwkgIAorCSAgaWYgKCFzdGF0ZS0+Y29udGV4dCkKKwkgICAgeworCSAgICAgIGluZXRfbnRvcChBRl9JTkVUNiwgc3RhdGUtPmxpbmtfYWRkcmVzcywgZGFlbW9uLT5hZGRyYnVmZiwgQUREUlNUUkxFTik7IAorCSAgICAgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX1dBUk5JTkcsIAorCQkJXygibm8gYWRkcmVzcyByYW5nZSBhdmFpbGFibGUgZm9yIERIQ1B2NiByZXF1ZXN0IGZyb20gcmVsYXkgYXQgJXMiKSwKKwkJCWRhZW1vbi0+YWRkcmJ1ZmYpOworCSAgICAgIHJldHVybiAwOworCSAgICB9CisJfQorCSAgCisgICAgICBpZiAoIXN0YXRlLT5jb250ZXh0KQorCXsKKwkgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX1dBUk5JTkcsIAorCQkgICAgXygibm8gYWRkcmVzcyByYW5nZSBhdmFpbGFibGUgZm9yIERIQ1B2NiByZXF1ZXN0IHZpYSAlcyIpLCBzdGF0ZS0+aWZhY2VfbmFtZSk7CisJICByZXR1cm4gMDsKKwl9CisKKyAgICAgIHJldHVybiBkaGNwNl9ub19yZWxheShzdGF0ZSwgbXNnX3R5cGUsIGluYnVmZiwgc3osIGlzX3VuaWNhc3QsIG5vdyk7CisgICAgfQorCisgIC8qIG11c3QgaGF2ZSBhdCBsZWFzdCBtc2dfdHlwZStob3Bjb3VudCtsaW5rX2FkZHJlc3MrcGVlcl9hZGRyZXNzK21pbmltYWwgc2l6ZSBvcHRpb24KKyAgICAgd2hpY2ggaXMgICAgICAgICAgICAgICAxICAgKyAgICAxICAgKyAgICAxNiAgICAgICsgICAgIDE2ICAgICArIDIgKyAyID0gMzggKi8KKyAgaWYgKHN6IDwgMzgpCisgICAgcmV0dXJuIDA7CisgIAorICAvKiBjb3B5IGhlYWRlciBzdHVmZiBpbnRvIHJlcGx5IG1lc3NhZ2UgYW5kIHNldCB0eXBlIHRvIHJlcGx5ICovCisgIGlmICghKG91dG1zZ3R5cGVwID0gcHV0X29wdDYoaW5idWZmLCAzNCkpKQorICAgIHJldHVybiAwOworICAqb3V0bXNndHlwZXAgPSBESENQNlJFTEFZUkVQTDsKKworICAvKiBsb29rIGZvciByZWxheSBvcHRpb25zIGFuZCBzZXQgdGFncyBpZiBmb3VuZC4gKi8KKyAgZm9yICh2ZW5kb3IgPSBkYWVtb24tPmRoY3BfdmVuZG9yczsgdmVuZG9yOyB2ZW5kb3IgPSB2ZW5kb3ItPm5leHQpCisgICAgeworICAgICAgaW50IG1vcHQ7CisgICAgICAKKyAgICAgIGlmICh2ZW5kb3ItPm1hdGNoX3R5cGUgPT0gTUFUQ0hfU1VCU0NSSUJFUikKKwltb3B0ID0gT1BUSU9ONl9TVUJTQ1JJQkVSX0lEOworICAgICAgZWxzZSBpZiAodmVuZG9yLT5tYXRjaF90eXBlID09IE1BVENIX1JFTU9URSkKKwltb3B0ID0gT1BUSU9ONl9SRU1PVEVfSUQ7IAorICAgICAgZWxzZQorCWNvbnRpbnVlOworCisgICAgICBpZiAoKG9wdCA9IG9wdDZfZmluZChvcHRzLCBlbmQsIG1vcHQsIDEpKSAmJgorCSAgdmVuZG9yLT5sZW4gPT0gb3B0Nl9sZW4ob3B0KSAmJgorCSAgbWVtY21wKHZlbmRvci0+ZGF0YSwgb3B0Nl9wdHIob3B0LCAwKSwgdmVuZG9yLT5sZW4pID09IDAgJiYKKwkgIHZlbmRvci0+bmV0aWQubmV4dCAhPSAmdmVuZG9yLT5uZXRpZCkKKwl7CisJICB2ZW5kb3ItPm5ldGlkLm5leHQgPSBzdGF0ZS0+dGFnczsKKwkgIHN0YXRlLT50YWdzID0gJnZlbmRvci0+bmV0aWQ7CisJICBicmVhazsKKwl9CisgICAgfQorICAKKyAgLyogUkZDLTY5MzkgKi8KKyAgaWYgKChvcHQgPSBvcHQ2X2ZpbmQob3B0cywgZW5kLCBPUFRJT042X0NMSUVOVF9NQUMsIDMpKSkKKyAgICB7CisgICAgICBpZiAob3B0Nl9sZW4ob3B0KSAtIDIgPiBESENQX0NIQUREUl9NQVgpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisgICAgICBzdGF0ZS0+bWFjX3R5cGUgPSBvcHQ2X3VpbnQob3B0LCAwLCAyKTsKKyAgICAgIHN0YXRlLT5tYWNfbGVuID0gb3B0Nl9sZW4ob3B0KSAtIDI7CisgICAgICBtZW1jcHkoJnN0YXRlLT5tYWNbMF0sIG9wdDZfcHRyKG9wdCwgMiksIHN0YXRlLT5tYWNfbGVuKTsKKyAgICB9CisgIAorICBmb3IgKG9wdCA9IG9wdHM7IG9wdDsgb3B0ID0gb3B0Nl9uZXh0KG9wdCwgZW5kKSkKKyAgICB7CisgICAgICBpZiAob3B0Nl9wdHIob3B0LCAwKSArIG9wdDZfbGVuKG9wdCkgPj0gZW5kKSB7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgICAgaW50IG8gPSBuZXdfb3B0NihvcHQ2X3R5cGUob3B0KSk7CisgICAgICBpZiAob3B0Nl90eXBlKG9wdCkgPT0gT1BUSU9ONl9SRUxBWV9NU0cpCisJeworCSAgc3RydWN0IGluNl9hZGRyIGFsaWduOworCSAgLyogdGhlIHBhY2tldCBkYXRhIGlzIHVuYWxpZ25lZCwgY29weSB0byBhbGlnbmVkIHN0b3JhZ2UgKi8KKwkgIG1lbWNweSgmYWxpZ24sIGluYnVmZiArIDIsIElONkFERFJTWik7IAorCSAgc3RhdGUtPmxpbmtfYWRkcmVzcyA9ICZhbGlnbjsKKwkgIC8qIHplcm8gaXNfdW5pY2FzdCBzaW5jZSB0aGF0IGlzIG5vdyBrbm93biB0byByZWZlciB0byB0aGUgCisJICAgICByZWxheWVkIHBhY2tldCwgbm90IHRoZSBvcmlnaW5hbCBzZW50IGJ5IHRoZSBjbGllbnQgKi8KKwkgIGlmICghZGhjcDZfbWF5YmVfcmVsYXkoc3RhdGUsIG9wdDZfcHRyKG9wdCwgMCksIG9wdDZfbGVuKG9wdCksIGNsaWVudF9hZGRyLCAwLCBub3cpKQorCSAgICByZXR1cm4gMDsKKwl9CisgICAgICBlbHNlIGlmIChvcHQ2X3R5cGUob3B0KSAhPSBPUFRJT042X0NMSUVOVF9NQUMpCisJcHV0X29wdDYob3B0Nl9wdHIob3B0LCAwKSwgb3B0Nl9sZW4ob3B0KSk7CisgICAgICBlbmRfb3B0NihvKTsJICAgIAorICAgIH0KKyAgCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50IGRoY3A2X25vX3JlbGF5KHN0cnVjdCBzdGF0ZSAqc3RhdGUsIGludCBtc2dfdHlwZSwgdm9pZCAqaW5idWZmLCBzaXplX3Qgc3osIGludCBpc191bmljYXN0LCB0aW1lX3Qgbm93KQoreworICB2b2lkICpvcHQ7CisgIGludCBpLCBvLCBvMSwgc3RhcnRfb3B0czsKKyAgc3RydWN0IGRoY3Bfb3B0ICpvcHRfY2ZnOworICBzdHJ1Y3QgZGhjcF9uZXRpZCAqdGFnaWY7CisgIHN0cnVjdCBkaGNwX2NvbmZpZyAqY29uZmlnID0gTlVMTDsKKyAgc3RydWN0IGRoY3BfbmV0aWQga25vd25faWQsIGlmYWNlX2lkLCB2Nl9pZDsKKyAgdW5zaWduZWQgY2hhciAqb3V0bXNndHlwZXA7CisgIHN0cnVjdCBkaGNwX3ZlbmRvciAqdmVuZG9yOworICBzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0X3RtcDsKKyAgc3RydWN0IGRoY3BfbWFjICptYWNfb3B0OworICB1bnNpZ25lZCBpbnQgaWdub3JlID0gMDsKKyNpZmRlZiBPUFRJT042X1BSRUZJWF9DTEFTUworICBzdHJ1Y3QgcHJlZml4X2NsYXNzICpwOworICBpbnQgZHVtcF9hbGxfcHJlZml4X2NsYXNzZXMgPSAwOworI2VuZGlmCisKKyAgc3RhdGUtPnBhY2tldF9vcHRpb25zID0gaW5idWZmICsgNDsKKyAgc3RhdGUtPmVuZCA9IGluYnVmZiArIHN6OworICBzdGF0ZS0+Y2xpZCA9IE5VTEw7CisgIHN0YXRlLT5jbGlkX2xlbiA9IDA7CisgIHN0YXRlLT5sZWFzZV9hbGxvY2F0ZSA9IDA7CisgIHN0YXRlLT5jb250ZXh0X3RhZ3MgPSBOVUxMOworICBzdGF0ZS0+ZG9tYWluID0gTlVMTDsKKyAgc3RhdGUtPnNlbmRfZG9tYWluID0gTlVMTDsKKyAgc3RhdGUtPmhvc3RuYW1lX2F1dGggPSAwOworICBzdGF0ZS0+aG9zdG5hbWUgPSBOVUxMOworICBzdGF0ZS0+Y2xpZW50X2hvc3RuYW1lID0gTlVMTDsKKyAgc3RhdGUtPmZxZG5fZmxhZ3MgPSAweDAxOyAvKiBkZWZhdWx0IHRvIHNlbmQgaWYgd2UgcmVjZWl2ZSBubyBGUUROIG9wdGlvbiAqLworI2lmZGVmIE9QVElPTjZfUFJFRklYX0NMQVNTCisgIHN0YXRlLT5zZW5kX3ByZWZpeF9jbGFzcyA9IE5VTEw7CisjZW5kaWYKKworICAvKiBzZXQgdGFnIHdpdGggbmFtZSA9PSBpbnRlcmZhY2UgKi8KKyAgaWZhY2VfaWQubmV0ID0gc3RhdGUtPmlmYWNlX25hbWU7CisgIGlmYWNlX2lkLm5leHQgPSBzdGF0ZS0+dGFnczsKKyAgc3RhdGUtPnRhZ3MgPSAmaWZhY2VfaWQ7IAorCisgIC8qIHNldCB0YWcgImRoY3B2NiIgKi8KKyAgdjZfaWQubmV0ID0gImRoY3B2NiI7CisgIHY2X2lkLm5leHQgPSBzdGF0ZS0+dGFnczsKKyAgc3RhdGUtPnRhZ3MgPSAmdjZfaWQ7CisKKyAgLyogY29weSBvdmVyIHRyYW5zYWN0aW9uLWlkLCBhbmQgc2F2ZSBwb2ludGVyIHRvIG1lc3NhZ2UgdHlwZSAqLworICBpZiAoIShvdXRtc2d0eXBlcCA9IHB1dF9vcHQ2KGluYnVmZiwgNCkpKQorICAgIHJldHVybiAwOworICBzdGFydF9vcHRzID0gc2F2ZV9jb3VudGVyKC0xKTsKKyAgc3RhdGUtPnhpZCA9IG91dG1zZ3R5cGVwWzNdIHwgb3V0bXNndHlwZXBbMl0gPDwgOCB8IG91dG1zZ3R5cGVwWzFdIDw8IDE2OworICAgCisgIC8qIFdlJ3JlIGdvaW5nIHRvIGJlIGxpbmtpbmcgdGFncyBmcm9tIGFsbCBjb250ZXh0IHdlIHVzZS4gCisgICAgIG1hcmsgdGhlbSBhcyB1bnVzZWQgc28gd2UgZG9uJ3QgbGluayBvbmUgdHdpY2UgYW5kIGJyZWFrIHRoZSBsaXN0ICovCisgIGZvciAoY29udGV4dF90bXAgPSBzdGF0ZS0+Y29udGV4dDsgY29udGV4dF90bXA7IGNvbnRleHRfdG1wID0gY29udGV4dF90bXAtPmN1cnJlbnQpCisgICAgeworICAgICAgY29udGV4dF90bXAtPm5ldGlkLm5leHQgPSAmY29udGV4dF90bXAtPm5ldGlkOworCisgICAgICBpZiAob3B0aW9uX2Jvb2woT1BUX0xPR19PUFRTKSkKKwl7CisJICAgaW5ldF9udG9wKEFGX0lORVQ2LCAmY29udGV4dF90bXAtPnN0YXJ0NiwgZGFlbW9uLT5kaGNwX2J1ZmYsIEFERFJTVFJMRU4pOyAKKwkgICBpbmV0X250b3AoQUZfSU5FVDYsICZjb250ZXh0X3RtcC0+ZW5kNiwgZGFlbW9uLT5kaGNwX2J1ZmYyLCBBRERSU1RSTEVOKTsgCisJICAgaWYgKGNvbnRleHRfdG1wLT5mbGFncyAmIChDT05URVhUX1NUQVRJQykpCisJICAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19JTkZPLCBfKCIldSBhdmFpbGFibGUgREhDUHY2IHN1Ym5ldDogJXMvJWQiKSwKKwkJICAgICAgIHN0YXRlLT54aWQsIGRhZW1vbi0+ZGhjcF9idWZmLCBjb250ZXh0X3RtcC0+cHJlZml4KTsKKwkgICBlbHNlCisJICAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19JTkZPLCBfKCIldSBhdmFpbGFibGUgREhDUCByYW5nZTogJXMgLS0gJXMiKSwgCisJCSAgICAgICBzdGF0ZS0+eGlkLCBkYWVtb24tPmRoY3BfYnVmZiwgZGFlbW9uLT5kaGNwX2J1ZmYyKTsKKwl9CisgICAgfQorCisgIGlmICgob3B0ID0gb3B0Nl9maW5kKHN0YXRlLT5wYWNrZXRfb3B0aW9ucywgc3RhdGUtPmVuZCwgT1BUSU9ONl9DTElFTlRfSUQsIDEpKSkKKyAgICB7CisgICAgICBzdGF0ZS0+Y2xpZCA9IG9wdDZfcHRyKG9wdCwgMCk7CisgICAgICBzdGF0ZS0+Y2xpZF9sZW4gPSBvcHQ2X2xlbihvcHQpOworICAgICAgbyA9IG5ld19vcHQ2KE9QVElPTjZfQ0xJRU5UX0lEKTsKKyAgICAgIHB1dF9vcHQ2KHN0YXRlLT5jbGlkLCBzdGF0ZS0+Y2xpZF9sZW4pOworICAgICAgZW5kX29wdDYobyk7CisgICAgfQorICBlbHNlIGlmIChtc2dfdHlwZSAhPSBESENQNklSRVEpCisgICAgcmV0dXJuIDA7CisKKyAgLyogc2VydmVyLWlkIG11c3QgbWF0Y2ggZXhjZXB0IGZvciBTT0xJQ0lULCBDT05GSVJNIGFuZCBSRUJJTkQgbWVzc2FnZXMgKi8KKyAgaWYgKG1zZ190eXBlICE9IERIQ1A2U09MSUNJVCAmJiBtc2dfdHlwZSAhPSBESENQNkNPTkZJUk0gJiYgbXNnX3R5cGUgIT0gREhDUDZJUkVRICYmIG1zZ190eXBlICE9IERIQ1A2UkVCSU5EICYmCisgICAgICAoIShvcHQgPSBvcHQ2X2ZpbmQoc3RhdGUtPnBhY2tldF9vcHRpb25zLCBzdGF0ZS0+ZW5kLCBPUFRJT042X1NFUlZFUl9JRCwgMSkpIHx8CisgICAgICAgb3B0Nl9sZW4ob3B0KSAhPSBkYWVtb24tPmR1aWRfbGVuIHx8CisgICAgICAgbWVtY21wKG9wdDZfcHRyKG9wdCwgMCksIGRhZW1vbi0+ZHVpZCwgZGFlbW9uLT5kdWlkX2xlbikgIT0gMCkpCisgICAgcmV0dXJuIDA7CisgIAorICBvID0gbmV3X29wdDYoT1BUSU9ONl9TRVJWRVJfSUQpOworICBwdXRfb3B0NihkYWVtb24tPmR1aWQsIGRhZW1vbi0+ZHVpZF9sZW4pOworICBlbmRfb3B0NihvKTsKKworICBpZiAoaXNfdW5pY2FzdCAmJgorICAgICAgKG1zZ190eXBlID09IERIQ1A2UkVRVUVTVCB8fCBtc2dfdHlwZSA9PSBESENQNlJFTkVXIHx8IG1zZ190eXBlID09IERIQ1A2UkVMRUFTRSB8fCBtc2dfdHlwZSA9PSBESENQNkRFQ0xJTkUpKQorICAgIAorICAgIHsgIAorICAgICAgKm91dG1zZ3R5cGVwID0gREhDUDZSRVBMWTsKKyAgICAgIG8xID0gbmV3X29wdDYoT1BUSU9ONl9TVEFUVVNfQ09ERSk7CisgICAgICBwdXRfb3B0Nl9zaG9ydChESENQNlVTRU1VTFRJKTsKKyAgICAgIHB1dF9vcHQ2X3N0cmluZygiVXNlIG11bHRpY2FzdCIpOworICAgICAgZW5kX29wdDYobzEpOworICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgIC8qIG1hdGNoIHZlbmRvciBhbmQgdXNlciBjbGFzcyBvcHRpb25zICovCisgIGZvciAodmVuZG9yID0gZGFlbW9uLT5kaGNwX3ZlbmRvcnM7IHZlbmRvcjsgdmVuZG9yID0gdmVuZG9yLT5uZXh0KQorICAgIHsKKyAgICAgIGludCBtb3B0OworICAgICAgCisgICAgICBpZiAodmVuZG9yLT5tYXRjaF90eXBlID09IE1BVENIX1ZFTkRPUikKKwltb3B0ID0gT1BUSU9ONl9WRU5ET1JfQ0xBU1M7CisgICAgICBlbHNlIGlmICh2ZW5kb3ItPm1hdGNoX3R5cGUgPT0gTUFUQ0hfVVNFUikKKwltb3B0ID0gT1BUSU9ONl9VU0VSX0NMQVNTOyAKKyAgICAgIGVsc2UKKwljb250aW51ZTsKKworICAgICAgaWYgKChvcHQgPSBvcHQ2X2ZpbmQoc3RhdGUtPnBhY2tldF9vcHRpb25zLCBzdGF0ZS0+ZW5kLCBtb3B0LCAyKSkpCisJeworCSAgdm9pZCAqZW5jX29wdCwgKmVuY19lbmQgPSBvcHQ2X3B0cihvcHQsIG9wdDZfbGVuKG9wdCkpOworCSAgaW50IG9mZnNldCA9IDA7CisJICAKKwkgIGlmIChtb3B0ID09IE9QVElPTjZfVkVORE9SX0NMQVNTKQorCSAgICB7CisJICAgICAgaWYgKG9wdDZfbGVuKG9wdCkgPCA0KQorCQljb250aW51ZTsKKwkgICAgICAKKwkgICAgICBpZiAodmVuZG9yLT5lbnRlcnByaXNlICE9IG9wdDZfdWludChvcHQsIDAsIDQpKQorCQljb250aW51ZTsKKwkgICAgCisJICAgICAgb2Zmc2V0ID0gNDsKKwkgICAgfQorIAorCSAgLyogTm90ZSB0aGF0IGZvcm1hdCBpZiB1c2VyL3ZlbmRvciBjbGFzc2VzIGlzIGRpZmZlcmVudCB0byBESENQIG9wdGlvbnMgLSBubyBvcHRpb24gdHlwZXMuICovCisJICBmb3IgKGVuY19vcHQgPSBvcHQ2X3B0cihvcHQsIG9mZnNldCk7IGVuY19vcHQ7IGVuY19vcHQgPSBvcHQ2X3VzZXJfdmVuZG9yX25leHQoZW5jX29wdCwgZW5jX2VuZCkpCisJICAgIGZvciAoaSA9IDA7IGkgPD0gKG9wdDZfdXNlcl92ZW5kb3JfbGVuKGVuY19vcHQpIC0gdmVuZG9yLT5sZW4pOyBpKyspCisJICAgICAgaWYgKG1lbWNtcCh2ZW5kb3ItPmRhdGEsIG9wdDZfdXNlcl92ZW5kb3JfcHRyKGVuY19vcHQsIGkpLCB2ZW5kb3ItPmxlbikgPT0gMCkKKwkJeworCQkgIHZlbmRvci0+bmV0aWQubmV4dCA9IHN0YXRlLT50YWdzOworCQkgIHN0YXRlLT50YWdzID0gJnZlbmRvci0+bmV0aWQ7CisJCSAgYnJlYWs7CisJCX0KKwl9CisgICAgfQorCisgIGlmIChvcHRpb25fYm9vbChPUFRfTE9HX09QVFMpICYmIChvcHQgPSBvcHQ2X2ZpbmQoc3RhdGUtPnBhY2tldF9vcHRpb25zLCBzdGF0ZS0+ZW5kLCBPUFRJT042X1ZFTkRPUl9DTEFTUywgNCkpKQorICAgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX0lORk8sIF8oIiV1IHZlbmRvciBjbGFzczogJXUiKSwgc3RhdGUtPnhpZCwgb3B0Nl91aW50KG9wdCwgMCwgNCkpOworICAKKyAgLyogZGhjcC1tYXRjaC4gSWYgd2UgaGF2ZSBoZXgtYW5kLXdpbGRjYXJkcywgbG9vayBmb3IgYSBsZWZ0LWFuY2hvcmVkIG1hdGNoLgorICAgICBPdGhlcndpc2UgYXNzdW1lIHRoZSBvcHRpb24gaXMgYW4gYXJyYXksIGFuZCBsb29rIGZvciBhIG1hdGNoaW5nIGVsZW1lbnQuIAorICAgICBJZiBubyBkYXRhIGdpdmVuLCBleGlzdGVuY2Ugb2YgdGhlIG9wdGlvbiBpcyBlbm91Z2guIFRoaXMgY29kZSBoYW5kbGVzIAorICAgICBWLUkgb3B0cyB0b28uICovCisgIGZvciAob3B0X2NmZyA9IGRhZW1vbi0+ZGhjcF9tYXRjaDY7IG9wdF9jZmc7IG9wdF9jZmcgPSBvcHRfY2ZnLT5uZXh0KQorICAgIHsKKyAgICAgIGludCBtYXRjaCA9IDA7CisgICAgICAKKyAgICAgIGlmIChvcHRfY2ZnLT5mbGFncyAmIERIT1BUX1JGQzM5MjUpCisJeworCSAgZm9yIChvcHQgPSBvcHQ2X2ZpbmQoc3RhdGUtPnBhY2tldF9vcHRpb25zLCBzdGF0ZS0+ZW5kLCBPUFRJT042X1ZFTkRPUl9PUFRTLCA0KTsKKwkgICAgICAgb3B0OworCSAgICAgICBvcHQgPSBvcHQ2X2ZpbmQob3B0Nl9uZXh0KG9wdCwgc3RhdGUtPmVuZCksIHN0YXRlLT5lbmQsIE9QVElPTjZfVkVORE9SX09QVFMsIDQpKQorCSAgICB7CisJICAgICAgdm9pZCAqdm9wdDsKKwkgICAgICB2b2lkICp2ZW5kID0gb3B0Nl9wdHIob3B0LCBvcHQ2X2xlbihvcHQpKTsKKwkgICAgICAKKwkgICAgICBmb3IgKHZvcHQgPSBvcHQ2X2ZpbmQob3B0Nl9wdHIob3B0LCA0KSwgdmVuZCwgb3B0X2NmZy0+b3B0LCAwKTsKKwkJICAgdm9wdDsKKwkJICAgdm9wdCA9IG9wdDZfZmluZChvcHQ2X25leHQodm9wdCwgdmVuZCksIHZlbmQsIG9wdF9jZmctPm9wdCwgMCkpCisJCWlmICgobWF0Y2ggPSBtYXRjaF9ieXRlcyhvcHRfY2ZnLCBvcHQ2X3B0cih2b3B0LCAwKSwgb3B0Nl9sZW4odm9wdCkpKSkKKwkJICBicmVhazsKKwkgICAgfQorCSAgaWYgKG1hdGNoKQorCSAgICBicmVhazsKKwl9CisgICAgICBlbHNlCisJeworCSAgaWYgKCEob3B0ID0gb3B0Nl9maW5kKHN0YXRlLT5wYWNrZXRfb3B0aW9ucywgc3RhdGUtPmVuZCwgb3B0X2NmZy0+b3B0LCAxKSkpCisJICAgIGNvbnRpbnVlOworCSAgCisJICBtYXRjaCA9IG1hdGNoX2J5dGVzKG9wdF9jZmcsIG9wdDZfcHRyKG9wdCwgMCksIG9wdDZfbGVuKG9wdCkpOworCX0gCisgIAorICAgICAgaWYgKG1hdGNoKQorCXsKKwkgIG9wdF9jZmctPm5ldGlkLT5uZXh0ID0gc3RhdGUtPnRhZ3M7CisJICBzdGF0ZS0+dGFncyA9IG9wdF9jZmctPm5ldGlkOworCX0KKyAgICB9CisKKyAgaWYgKHN0YXRlLT5tYWNfbGVuICE9IDApCisgICAgeworICAgICAgaWYgKG9wdGlvbl9ib29sKE9QVF9MT0dfT1BUUykpCisJeworCSAgcHJpbnRfbWFjKGRhZW1vbi0+ZGhjcF9idWZmLCBzdGF0ZS0+bWFjLCBzdGF0ZS0+bWFjX2xlbik7CisJICBteV9zeXNsb2coTVNfREhDUCB8IExPR19JTkZPLCBfKCIldSBjbGllbnQgTUFDIGFkZHJlc3M6ICVzIiksIHN0YXRlLT54aWQsIGRhZW1vbi0+ZGhjcF9idWZmKTsKKwl9CisKKyAgICAgIGZvciAobWFjX29wdCA9IGRhZW1vbi0+ZGhjcF9tYWNzOyBtYWNfb3B0OyBtYWNfb3B0ID0gbWFjX29wdC0+bmV4dCkKKwlpZiAoKHVuc2lnbmVkKW1hY19vcHQtPmh3YWRkcl9sZW4gPT0gc3RhdGUtPm1hY19sZW4gJiYKKwkgICAgKCh1bnNpZ25lZCltYWNfb3B0LT5od2FkZHJfdHlwZSA9PSBzdGF0ZS0+bWFjX3R5cGUgfHwgbWFjX29wdC0+aHdhZGRyX3R5cGUgPT0gMCkgJiYKKwkgICAgbWVtY21wX21hc2tlZChtYWNfb3B0LT5od2FkZHIsIHN0YXRlLT5tYWMsIHN0YXRlLT5tYWNfbGVuLCBtYWNfb3B0LT5tYXNrKSkKKwkgIHsKKwkgICAgbWFjX29wdC0+bmV0aWQubmV4dCA9IHN0YXRlLT50YWdzOworCSAgICBzdGF0ZS0+dGFncyA9ICZtYWNfb3B0LT5uZXRpZDsKKwkgIH0KKyAgICB9CisgIAorICBpZiAoKG9wdCA9IG9wdDZfZmluZChzdGF0ZS0+cGFja2V0X29wdGlvbnMsIHN0YXRlLT5lbmQsIE9QVElPTjZfRlFETiwgMSkpKQorICAgIHsKKyAgICAgIC8qIFJGQzQ3MDQgcmVmZXJzICovCisgICAgICAgaW50IGxlbiA9IG9wdDZfbGVuKG9wdCkgLSAxOworICAgICAgIAorICAgICAgIHN0YXRlLT5mcWRuX2ZsYWdzID0gb3B0Nl91aW50KG9wdCwgMCwgMSk7CisgICAgICAgCisgICAgICAgLyogQWx3YXlzIGZvcmNlIHVwZGF0ZSwgc2luY2UgdGhlIGNsaWVudCBoYXMgbm8gd2F5IHRvIGRvIGl0IGl0c2VsZi4gKi8KKyAgICAgICBpZiAoIW9wdGlvbl9ib29sKE9QVF9GUUROX1VQREFURSkgJiYgIShzdGF0ZS0+ZnFkbl9mbGFncyAmIDB4MDEpKQorCSBzdGF0ZS0+ZnFkbl9mbGFncyB8PSAweDAzOworIAorICAgICAgIHN0YXRlLT5mcWRuX2ZsYWdzICY9IH4weDA0OworCisgICAgICAgaWYgKGxlbiAhPSAwICYmIGxlbiA8IDI1NSkKKwkgeworCSAgIHVuc2lnbmVkIGNoYXIgKnBwLCAqb3AgPSBvcHQ2X3B0cihvcHQsIDEpOworCSAgIGNoYXIgKnBxID0gZGFlbW9uLT5kaGNwX2J1ZmY7CisJICAgCisJICAgcHAgPSBvcDsKKwkgICB3aGlsZSAoKm9wICE9IDAgJiYgKChvcCArICgqb3ApKSAtIHBwKSA8IGxlbikKKwkgICAgIHsKKwkgICAgICAgbWVtY3B5KHBxLCBvcCsxLCAqb3ApOworCSAgICAgICBwcSArPSAqb3A7CisJICAgICAgIG9wICs9ICgqb3ApKzE7CisJICAgICAgICoocHErKykgPSAnLic7CisJICAgICB9CisJICAgCisJICAgaWYgKHBxICE9IGRhZW1vbi0+ZGhjcF9idWZmKQorCSAgICAgcHEtLTsKKwkgICAqcHEgPSAwOworCSAgIAorCSAgIGlmIChsZWdhbF9ob3N0bmFtZShkYWVtb24tPmRoY3BfYnVmZikpCisJICAgICB7CisJICAgICAgIHN0YXRlLT5jbGllbnRfaG9zdG5hbWUgPSBkYWVtb24tPmRoY3BfYnVmZjsKKwkgICAgICAgaWYgKG9wdGlvbl9ib29sKE9QVF9MT0dfT1BUUykpCisJCSBteV9zeXNsb2coTVNfREhDUCB8IExPR19JTkZPLCBfKCIldSBjbGllbnQgcHJvdmlkZXMgbmFtZTogJXMiKSwgc3RhdGUtPnhpZCwgc3RhdGUtPmNsaWVudF9ob3N0bmFtZSk7IAorCSAgICAgfQorCSB9CisgICAgfQkgCisgIAorICBpZiAoc3RhdGUtPmNsaWQpCisgICAgeworICAgICAgY29uZmlnID0gZmluZF9jb25maWcoZGFlbW9uLT5kaGNwX2NvbmYsIHN0YXRlLT5jb250ZXh0LCBzdGF0ZS0+Y2xpZCwgc3RhdGUtPmNsaWRfbGVuLCBzdGF0ZS0+bWFjLCBzdGF0ZS0+bWFjX2xlbiwgc3RhdGUtPm1hY190eXBlLCBOVUxMKTsKKyAgICAgIAorICAgICAgaWYgKGhhdmVfY29uZmlnKGNvbmZpZywgQ09ORklHX05BTUUpKQorCXsKKwkgIHN0YXRlLT5ob3N0bmFtZSA9IGNvbmZpZy0+aG9zdG5hbWU7CisJICBzdGF0ZS0+ZG9tYWluID0gY29uZmlnLT5kb21haW47CisJICBzdGF0ZS0+aG9zdG5hbWVfYXV0aCA9IDE7CisJfQorICAgICAgZWxzZSBpZiAoc3RhdGUtPmNsaWVudF9ob3N0bmFtZSkKKwl7CisJICBzdGF0ZS0+ZG9tYWluID0gc3RyaXBfaG9zdG5hbWUoc3RhdGUtPmNsaWVudF9ob3N0bmFtZSk7CisJICAKKwkgIGlmIChzdHJsZW4oc3RhdGUtPmNsaWVudF9ob3N0bmFtZSkgIT0gMCkKKwkgICAgeworCSAgICAgIHN0YXRlLT5ob3N0bmFtZSA9IHN0YXRlLT5jbGllbnRfaG9zdG5hbWU7CisJICAgICAgaWYgKCFjb25maWcpCisJCXsKKwkJICAvKiBTZWFyY2ggYWdhaW4gbm93IHdlIGhhdmUgYSBob3N0bmFtZS4gCisJCSAgICAgT25seSBhY2NlcHQgY29uZmlncyB3aXRob3V0IENMSUQgaGVyZSwgKGl0IHdvbid0IG1hdGNoKQorCQkgICAgIHRvIGF2b2lkIGltcGVyc29uYXRpb24gYnkgbmFtZS4gKi8KKwkJICBzdHJ1Y3QgZGhjcF9jb25maWcgKm5ldyA9IGZpbmRfY29uZmlnKGRhZW1vbi0+ZGhjcF9jb25mLCBzdGF0ZS0+Y29udGV4dCwgTlVMTCwgMCwgTlVMTCwgMCwgMCwgc3RhdGUtPmhvc3RuYW1lKTsKKwkJICBpZiAobmV3ICYmICFoYXZlX2NvbmZpZyhuZXcsIENPTkZJR19DTElEKSAmJiAhbmV3LT5od2FkZHIpCisJCSAgICBjb25maWcgPSBuZXc7CisJCX0KKwkgICAgfQorCX0KKyAgICB9CisKKyAgaWYgKGNvbmZpZykKKyAgICB7CisgICAgICBzdHJ1Y3QgZGhjcF9uZXRpZF9saXN0ICpsaXN0OworICAgICAgCisgICAgICBmb3IgKGxpc3QgPSBjb25maWctPm5ldGlkOyBsaXN0OyBsaXN0ID0gbGlzdC0+bmV4dCkKKyAgICAgICAgeworICAgICAgICAgIGxpc3QtPmxpc3QtPm5leHQgPSBzdGF0ZS0+dGFnczsKKyAgICAgICAgICBzdGF0ZS0+dGFncyA9IGxpc3QtPmxpc3Q7CisgICAgICAgIH0KKworICAgICAgLyogc2V0ICJrbm93biIgdGFnIGZvciBrbm93biBob3N0cyAqLworICAgICAga25vd25faWQubmV0ID0gImtub3duIjsKKyAgICAgIGtub3duX2lkLm5leHQgPSBzdGF0ZS0+dGFnczsKKyAgICAgIHN0YXRlLT50YWdzID0gJmtub3duX2lkOworCisgICAgICBpZiAoaGF2ZV9jb25maWcoY29uZmlnLCBDT05GSUdfRElTQUJMRSkpCisJaWdub3JlID0gMTsKKyAgICB9CisgIGVsc2UgaWYgKHN0YXRlLT5jbGlkICYmCisJICAgZmluZF9jb25maWcoZGFlbW9uLT5kaGNwX2NvbmYsIE5VTEwsIHN0YXRlLT5jbGlkLCBzdGF0ZS0+Y2xpZF9sZW4sIHN0YXRlLT5tYWMsIHN0YXRlLT5tYWNfbGVuLCBzdGF0ZS0+bWFjX3R5cGUsIE5VTEwpKQorICAgIHsKKyAgICAgIGtub3duX2lkLm5ldCA9ICJrbm93bi1vdGhlcm5ldCI7CisgICAgICBrbm93bl9pZC5uZXh0ID0gc3RhdGUtPnRhZ3M7CisgICAgICBzdGF0ZS0+dGFncyA9ICZrbm93bl9pZDsKKyAgICB9CisgIAorI2lmZGVmIE9QVElPTjZfUFJFRklYX0NMQVNTCisgIC8qIE9QVElPTl9QUkVGSVhfQ0xBU1MgaW4gT1JPLCBzZW5kIGFkZHJlc3NlcyBpbiBhbGwgcHJlZml4IGNsYXNzZXMgKi8KKyAgaWYgKGRhZW1vbi0+cHJlZml4X2NsYXNzZXMgJiYgKG1zZ190eXBlID09IERIQ1A2U09MSUNJVCB8fCBtc2dfdHlwZSA9PSBESENQNlJFUVVFU1QpKQorICAgIHsKKyAgICAgIHZvaWQgKm9ybzsKKyAgICAgIAorICAgICAgaWYgKChvcm8gPSBvcHQ2X2ZpbmQoc3RhdGUtPnBhY2tldF9vcHRpb25zLCBzdGF0ZS0+ZW5kLCBPUFRJT042X09STywgMCkpKQorCWZvciAoaSA9IDA7IGkgPCAgb3B0Nl9sZW4ob3JvKSAtIDE7IGkgKz0gMikKKwkgIGlmIChvcHQ2X3VpbnQob3JvLCBpLCAyKSA9PSBPUFRJT042X1BSRUZJWF9DTEFTUykKKwkgICAgeworCSAgICAgIGR1bXBfYWxsX3ByZWZpeF9jbGFzc2VzID0gMTsKKwkgICAgICBicmVhazsKKwkgICAgfQorICAgICAgCisgICAgICBpZiAobXNnX3R5cGUgIT0gREhDUDZTT0xJQ0lUIHx8IGR1bXBfYWxsX3ByZWZpeF9jbGFzc2VzKQorCS8qIEFkZCB0aGUgdGFncyBhc3NvY2lhdGVkIHdpdGggcHJlZml4IGNsYXNzZXMgc28gd2UgY2FuIHVzZSB0aGUgREhDUCByYW5nZXMuCisJICAgTm90IGRvbmUgZm9yIFNPTElDSVQgYXMgd2UgYWRkIHRoZW0gIG9uZS1hdC10aW1lLiAqLworCWZvciAocCA9IGRhZW1vbi0+cHJlZml4X2NsYXNzZXM7IHAgOyBwID0gcC0+bmV4dCkKKwkgIHsKKwkgICAgcC0+dGFnLm5leHQgPSBzdGF0ZS0+dGFnczsKKwkgICAgc3RhdGUtPnRhZ3MgPSAmcC0+dGFnOworCSAgfQorICAgIH0gICAgCisjZW5kaWYKKworICB0YWdpZiA9IHJ1bl90YWdfaWYoc3RhdGUtPnRhZ3MpOworICAKKyAgLyogaWYgYWxsIHRoZSBuZXRpZHMgaW4gdGhlIGlnbm9yZSBsaXN0IGFyZSBwcmVzZW50LCBpZ25vcmUgdGhpcyBjbGllbnQgKi8KKyAgaWYgKGRhZW1vbi0+ZGhjcF9pZ25vcmUpCisgICAgeworICAgICAgc3RydWN0IGRoY3BfbmV0aWRfbGlzdCAqaWRfbGlzdDsKKyAgICAgCisgICAgICBmb3IgKGlkX2xpc3QgPSBkYWVtb24tPmRoY3BfaWdub3JlOyBpZF9saXN0OyBpZF9saXN0ID0gaWRfbGlzdC0+bmV4dCkKKwlpZiAobWF0Y2hfbmV0aWQoaWRfbGlzdC0+bGlzdCwgdGFnaWYsIDApKQorCSAgaWdub3JlID0gMTsKKyAgICB9CisgIAorICAvKiBpZiBhbGwgdGhlIG5ldGlkcyBpbiB0aGUgaWdub3JlX25hbWUgbGlzdCBhcmUgcHJlc2VudCwgaWdub3JlIGNsaWVudC1zdXBwbGllZCBuYW1lICovCisgIGlmICghc3RhdGUtPmhvc3RuYW1lX2F1dGgpCisgICAgeworICAgICAgIHN0cnVjdCBkaGNwX25ldGlkX2xpc3QgKmlkX2xpc3Q7CisgICAgICAgCisgICAgICAgZm9yIChpZF9saXN0ID0gZGFlbW9uLT5kaGNwX2lnbm9yZV9uYW1lczsgaWRfbGlzdDsgaWRfbGlzdCA9IGlkX2xpc3QtPm5leHQpCisJIGlmICgoIWlkX2xpc3QtPmxpc3QpIHx8IG1hdGNoX25ldGlkKGlkX2xpc3QtPmxpc3QsIHRhZ2lmLCAwKSkKKwkgICBicmVhazsKKyAgICAgICBpZiAoaWRfbGlzdCkKKwkgc3RhdGUtPmhvc3RuYW1lID0gTlVMTDsKKyAgICB9CisgIAorCisgIHN3aXRjaCAobXNnX3R5cGUpCisgICAgeworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gMDsKKyAgICAgIAorICAgICAgCisgICAgY2FzZSBESENQNlNPTElDSVQ6CisgICAgICB7CisgICAgICAJaW50IGFkZHJlc3NfYXNzaWduZWQgPSAwOworCS8qIHRhZ3Mgd2l0aG91dCBhbGwgcHJlZml4LWNsYXNzIHRhZ3MgKi8KKwlzdHJ1Y3QgZGhjcF9uZXRpZCAqc29saWNpdF90YWdzOworCXN0cnVjdCBkaGNwX2NvbnRleHQgKmM7CisJCisJKm91dG1zZ3R5cGVwID0gREhDUDZBRFZFUlRJU0U7CisJCisJaWYgKG9wdDZfZmluZChzdGF0ZS0+cGFja2V0X29wdGlvbnMsIHN0YXRlLT5lbmQsIE9QVElPTjZfUkFQSURfQ09NTUlULCAwKSkKKwkgIHsKKwkgICAgKm91dG1zZ3R5cGVwID0gREhDUDZSRVBMWTsKKwkgICAgc3RhdGUtPmxlYXNlX2FsbG9jYXRlID0gMTsKKwkgICAgbyA9IG5ld19vcHQ2KE9QVElPTjZfUkFQSURfQ09NTUlUKTsKKwkgICAgZW5kX29wdDYobyk7CisJICB9CisJCisgIAlsb2c2X3F1aWV0KHN0YXRlLCAiREhDUFNPTElDSVQiLCBOVUxMLCBpZ25vcmUgPyBfKCJpZ25vcmVkIikgOiBOVUxMKTsKKworICAgICAgcmVxdWVzdF9ub19hZGRyZXNzOgorCXNvbGljaXRfdGFncyA9IHRhZ2lmOworCQorCWlmIChpZ25vcmUpCisJICByZXR1cm4gMDsKKwkKKwkvKiByZXNldCBVU0VEIGJpdHMgaW4gbGVhc2VzICovCisJbGVhc2U2X3Jlc2V0KCk7CisKKwkvKiBDYW4gdXNlIGNvbmZpZ3VyZWQgYWRkcmVzcyBtYXggb25jZSBwZXIgcHJlZml4ICovCisJZm9yIChjID0gc3RhdGUtPmNvbnRleHQ7IGM7IGMgPSBjLT5jdXJyZW50KQorCSAgYy0+ZmxhZ3MgJj0gfkNPTlRFWFRfQ09ORl9VU0VEOworCisJZm9yIChvcHQgPSBzdGF0ZS0+cGFja2V0X29wdGlvbnM7IG9wdDsgb3B0ID0gb3B0Nl9uZXh0KG9wdCwgc3RhdGUtPmVuZCkpCisJICB7ICAgCisJICAgIHZvaWQgKmlhX29wdGlvbiwgKmlhX2VuZDsKKwkgICAgdW5zaWduZWQgaW50IG1pbl90aW1lID0gMHhmZmZmZmZmZjsKKwkgICAgaW50IHQxY250cjsKKwkgICAgaW50IGlhX2NvdW50ZXI7CisJICAgIC8qIHNldCB1bmxlc3Mgd2UncmUgc2VuZGluZyBhIHBhcnRpY3VsYXIgcHJlZml4LWNsYXNzLCB3aGVuIHdlCisJICAgICAgIHdhbnQgb25seSBkaGNwLXJhbmdlcyB3aXRoIHRoZSBjb3JyZWN0IHRhZ3Mgc2V0IGFuZCBub3QgdGhvc2Ugd2l0aG91dCBhbnkgdGFncy4gKi8KKwkgICAgaW50IHBsYWluX3JhbmdlID0gMTsKKwkgICAgdTMyIGxlYXNlX3RpbWU7CisJICAgIHN0cnVjdCBkaGNwX2xlYXNlICpsdG1wOworCSAgICBzdHJ1Y3QgaW42X2FkZHIgKnJlcV9hZGRyOworCSAgICBzdHJ1Y3QgaW42X2FkZHIgYWRkcjsKKworCSAgICBpZiAoIWNoZWNrX2lhKHN0YXRlLCBvcHQsICZpYV9lbmQsICZpYV9vcHRpb24pKQorCSAgICAgIGNvbnRpbnVlOworCSAgICAKKwkgICAgLyogcmVzZXQgVVNFRCBiaXRzIGluIGNvbnRleHRzIC0gb25lIGFkZHJlc3MgcGVyIHByZWZpeCBwZXIgSUFJRCAqLworCSAgICBmb3IgKGMgPSBzdGF0ZS0+Y29udGV4dDsgYzsgYyA9IGMtPmN1cnJlbnQpCisJICAgICAgYy0+ZmxhZ3MgJj0gfkNPTlRFWFRfVVNFRDsKKworI2lmZGVmIE9QVElPTjZfUFJFRklYX0NMQVNTCisJICAgIGlmIChkYWVtb24tPnByZWZpeF9jbGFzc2VzICYmIHN0YXRlLT5pYV90eXBlID09IE9QVElPTjZfSUFfTkEpCisJICAgICAgeworCQl2b2lkICpwcmVmaXhfb3B0OworCQlpbnQgcHJlZml4X2NsYXNzOworCQkKKwkJaWYgKGR1bXBfYWxsX3ByZWZpeF9jbGFzc2VzKQorCQkgIC8qIE9QVElPTl9QUkVGSVhfQ0xBU1MgaW4gT1JPLCBzZW5kIGFkZHJlc3NlcyBpbiBhbGwgcHJlZml4IGNsYXNzZXMgKi8KKwkJICBwbGFpbl9yYW5nZSA9IDA7CisJCWVsc2UgCisJCSAgeyAKKwkJICAgIGlmICgocHJlZml4X29wdCA9IG9wdDZfZmluZChvcHQ2X3B0cihvcHQsIDEyKSwgaWFfZW5kLCBPUFRJT042X1BSRUZJWF9DTEFTUywgMikpKQorCQkgICAgICB7CisJCQkKKwkJCXByZWZpeF9jbGFzcyA9IG9wdDZfdWludChwcmVmaXhfb3B0LCAwLCAyKTsKKwkJCQorCQkJZm9yIChwID0gZGFlbW9uLT5wcmVmaXhfY2xhc3NlczsgcCA7IHAgPSBwLT5uZXh0KQorCQkJICBpZiAocC0+Y2xhc3MgPT0gcHJlZml4X2NsYXNzKQorCQkJICAgIGJyZWFrOworCQkJCisJCQlpZiAoIXApCisJCQkgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX1dBUk5JTkcsIF8oInVua25vd24gcHJlZml4LWNsYXNzICVkIiksIHByZWZpeF9jbGFzcyk7CisJCQllbHNlCisJCQkgIHsKKwkJCSAgICAvKiBhZGQgdGFnIHRvIGxpc3QsIGFuZCBleGNsdWRlIHVuZGVjb3JhdGVkIGRoY3AtcmFuZ2VzICovCisJCQkgICAgcC0+dGFnLm5leHQgPSBzdGF0ZS0+dGFnczsKKwkJCSAgICBzb2xpY2l0X3RhZ3MgPSBydW5fdGFnX2lmKCZwLT50YWcpOworCQkJICAgIHBsYWluX3JhbmdlID0gMDsKKwkJCSAgICBzdGF0ZS0+c2VuZF9wcmVmaXhfY2xhc3MgPSBwOworCQkJICB9CisJCSAgICAgIH0KKwkJICAgIGVsc2UKKwkJICAgICAgeworCQkJLyogY2xpZW50IGRpZG4ndCBhc2sgZm9yIGEgcHJlZml4IGNsYXNzLCBsZXRzIHNlZSBpZiB3ZSBjYW4gZmluZCBvbmUuICovCisJCQlmb3IgKHAgPSBkYWVtb24tPnByZWZpeF9jbGFzc2VzOyBwIDsgcCA9IHAtPm5leHQpCisJCQkgIHsKKwkJCSAgICBwLT50YWcubmV4dCA9IE5VTEw7CisJCQkgICAgaWYgKG1hdGNoX25ldGlkKCZwLT50YWcsIHNvbGljaXRfdGFncywgMSkpCisJCQkgICAgICBicmVhazsKKwkJCSAgfQorCQkJCisJCQlpZiAocCkKKwkJCSAgeworCQkJICAgIHBsYWluX3JhbmdlID0gMDsKKwkJCSAgICBzdGF0ZS0+c2VuZF9wcmVmaXhfY2xhc3MgPSBwOworCQkJICB9CisJCSAgICAgIH0KKworCQkgICAgaWYgKHAgJiYgb3B0aW9uX2Jvb2woT1BUX0xPR19PUFRTKSkKKwkJICAgICAgbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfSU5GTywgIiV1IHByZWZpeCBjbGFzcyAlZCB0YWc6JXMiLCBzdGF0ZS0+eGlkLCBwLT5jbGFzcywgcC0+dGFnLm5ldCk7IAorCQkgIH0KKwkgICAgICB9CisjZW5kaWYKKworCSAgICBvID0gYnVpbGRfaWEoc3RhdGUsICZ0MWNudHIpOworCSAgICBpZiAoYWRkcmVzc19hc3NpZ25lZCkKKwkJYWRkcmVzc19hc3NpZ25lZCA9IDI7CisKKwkgICAgZm9yIChpYV9jb3VudGVyID0gMDsgaWFfb3B0aW9uOyBpYV9jb3VudGVyKyssIGlhX29wdGlvbiA9IG9wdDZfZmluZChvcHQ2X25leHQoaWFfb3B0aW9uLCBpYV9lbmQpLCBpYV9lbmQsIE9QVElPTjZfSUFBRERSLCAyNCkpCisJICAgICAgeworCQlyZXFfYWRkciA9IG9wdDZfcHRyKGlhX29wdGlvbiwgMCk7CisJCQkJCisJCWlmICgoYyA9IGFkZHJlc3M2X3ZhbGlkKHN0YXRlLT5jb250ZXh0LCByZXFfYWRkciwgc29saWNpdF90YWdzLCBwbGFpbl9yYW5nZSkpKQorCQkgIHsKKwkJICAgIGxlYXNlX3RpbWUgPSBjLT5sZWFzZV90aW1lOworCQkgICAgLyogSWYgdGhlIGNsaWVudCBhc2tzIGZvciBhbiBhZGRyZXNzIG9uIHRoZSBzYW1lIG5ldHdvcmsgYXMgYSBjb25maWd1cmVkIGFkZHJlc3MsIAorCQkgICAgICAgb2ZmZXIgdGhlIGNvbmZpZ3VyZWQgYWRkcmVzcyBpbnN0ZWFkLCB0byBtYWtlIG1vdmluZyB0byBuZXdseS1jb25maWd1cmVkCisJCSAgICAgICBhZGRyZXNzZXMgYXV0b21hdGljLiAqLworCQkgICAgaWYgKCEoYy0+ZmxhZ3MgJiBDT05URVhUX0NPTkZfVVNFRCkgJiYgY29uZmlnX3ZhbGlkKGNvbmZpZywgYywgJmFkZHIpICYmIGNoZWNrX2FkZHJlc3Moc3RhdGUsICZhZGRyKSkKKwkJICAgICAgeworCQkJcmVxX2FkZHIgPSAmYWRkcjsKKwkJCW1hcmtfY29uZmlnX3VzZWQoYywgJmFkZHIpOworCQkJaWYgKGhhdmVfY29uZmlnKGNvbmZpZywgQ09ORklHX1RJTUUpKQorCQkJICBsZWFzZV90aW1lID0gY29uZmlnLT5sZWFzZV90aW1lOworCQkgICAgICB9CisJCSAgICBlbHNlIGlmICghKGMgPSBhZGRyZXNzNl9hdmFpbGFibGUoc3RhdGUtPmNvbnRleHQsIHJlcV9hZGRyLCBzb2xpY2l0X3RhZ3MsIHBsYWluX3JhbmdlKSkpCisJCSAgICAgIGNvbnRpbnVlOyAvKiBub3QgYW4gYWRkcmVzcyB3ZSdyZSBhbGxvd2VkICovCisJCSAgICBlbHNlIGlmICghY2hlY2tfYWRkcmVzcyhzdGF0ZSwgcmVxX2FkZHIpKQorCQkgICAgICBjb250aW51ZTsgLyogYWRkcmVzcyBsZWFzZWQgZWxzZXdoZXJlICovCisJCSAgICAKKwkJICAgIC8qIGFkZCBhZGRyZXNzIHRvIG91dHB1dCBwYWNrZXQgKi8KKyNpZmRlZiBPUFRJT042X1BSRUZJWF9DTEFTUworCQkgICAgaWYgKGR1bXBfYWxsX3ByZWZpeF9jbGFzc2VzICYmIHN0YXRlLT5pYV90eXBlID09IE9QVElPTjZfSUFfTkEpCisJCSAgICAgIHN0YXRlLT5zZW5kX3ByZWZpeF9jbGFzcyA9IHByZWZpeF9jbGFzc19mcm9tX2NvbnRleHQoYyk7CisjZW5kaWYJCSAgICAKKwkJICAgIGFkZF9hZGRyZXNzKHN0YXRlLCBjLCBsZWFzZV90aW1lLCBpYV9vcHRpb24sICZtaW5fdGltZSwgcmVxX2FkZHIsIG5vdyk7CisJCSAgICBtYXJrX2NvbnRleHRfdXNlZChzdGF0ZSwgcmVxX2FkZHIpOworCQkgICAgZ2V0X2NvbnRleHRfdGFnKHN0YXRlLCBjKTsKKwkJICAgIGFkZHJlc3NfYXNzaWduZWQgPSAxOworCQkgIH0KKwkgICAgICB9CisJICAgIAorCSAgICAvKiBTdWdnZXN0IGNvbmZpZ3VyZWQgYWRkcmVzcyhlcykgKi8KKwkgICAgZm9yIChjID0gc3RhdGUtPmNvbnRleHQ7IGM7IGMgPSBjLT5jdXJyZW50KSAKKwkgICAgICBpZiAoIShjLT5mbGFncyAmIENPTlRFWFRfQ09ORl9VU0VEKSAmJgorCQkgIG1hdGNoX25ldGlkKGMtPmZpbHRlciwgc29saWNpdF90YWdzLCBwbGFpbl9yYW5nZSkgJiYKKwkJICBjb25maWdfdmFsaWQoY29uZmlnLCBjLCAmYWRkcikgJiYgCisJCSAgY2hlY2tfYWRkcmVzcyhzdGF0ZSwgJmFkZHIpKQorCQl7CisJCSAgbWFya19jb25maWdfdXNlZChzdGF0ZS0+Y29udGV4dCwgJmFkZHIpOworCQkgIGlmIChoYXZlX2NvbmZpZyhjb25maWcsIENPTkZJR19USU1FKSkKKwkJICAgIGxlYXNlX3RpbWUgPSBjb25maWctPmxlYXNlX3RpbWU7CisJCSAgZWxzZQorCQkgICAgbGVhc2VfdGltZSA9IGMtPmxlYXNlX3RpbWU7CisJCSAgLyogYWRkIGFkZHJlc3MgdG8gb3V0cHV0IHBhY2tldCAqLworI2lmZGVmIE9QVElPTjZfUFJFRklYX0NMQVNTCisJCSAgaWYgKGR1bXBfYWxsX3ByZWZpeF9jbGFzc2VzICYmIHN0YXRlLT5pYV90eXBlID09IE9QVElPTjZfSUFfTkEpCisJCSAgICBzdGF0ZS0+c2VuZF9wcmVmaXhfY2xhc3MgPSBwcmVmaXhfY2xhc3NfZnJvbV9jb250ZXh0KGMpOworI2VuZGlmCisJCSAgYWRkX2FkZHJlc3Moc3RhdGUsIGMsIGxlYXNlX3RpbWUsIE5VTEwsICZtaW5fdGltZSwgJmFkZHIsIG5vdyk7CisJCSAgbWFya19jb250ZXh0X3VzZWQoc3RhdGUsICZhZGRyKTsKKwkJICBnZXRfY29udGV4dF90YWcoc3RhdGUsIGMpOworCQkgIGFkZHJlc3NfYXNzaWduZWQgPSAxOworCQl9CisJICAgIAorCSAgICAvKiByZXR1cm4gYWRkcmVzc2VzIGZvciBleGlzdGluZyBsZWFzZXMgKi8KKwkgICAgbHRtcCA9IE5VTEw7CisJICAgIHdoaWxlICgobHRtcCA9IGxlYXNlNl9maW5kX2J5X2NsaWVudChsdG1wLCBzdGF0ZS0+aWFfdHlwZSA9PSBPUFRJT042X0lBX05BID8gTEVBU0VfTkEgOiBMRUFTRV9UQSwgc3RhdGUtPmNsaWQsIHN0YXRlLT5jbGlkX2xlbiwgc3RhdGUtPmlhaWQpKSkKKwkgICAgICB7CisJCXJlcV9hZGRyID0gJmx0bXAtPmFkZHI2OworCQlpZiAoKGMgPSBhZGRyZXNzNl9hdmFpbGFibGUoc3RhdGUtPmNvbnRleHQsIHJlcV9hZGRyLCBzb2xpY2l0X3RhZ3MsIHBsYWluX3JhbmdlKSkpCisJCSAgeworI2lmZGVmIE9QVElPTjZfUFJFRklYX0NMQVNTCisJCSAgICBpZiAoZHVtcF9hbGxfcHJlZml4X2NsYXNzZXMgJiYgc3RhdGUtPmlhX3R5cGUgPT0gT1BUSU9ONl9JQV9OQSkKKwkJICAgICAgc3RhdGUtPnNlbmRfcHJlZml4X2NsYXNzID0gcHJlZml4X2NsYXNzX2Zyb21fY29udGV4dChjKTsKKyNlbmRpZgorCQkgICAgYWRkX2FkZHJlc3Moc3RhdGUsIGMsIGMtPmxlYXNlX3RpbWUsIE5VTEwsICZtaW5fdGltZSwgcmVxX2FkZHIsIG5vdyk7CisJCSAgICBtYXJrX2NvbnRleHRfdXNlZChzdGF0ZSwgcmVxX2FkZHIpOworCQkgICAgZ2V0X2NvbnRleHRfdGFnKHN0YXRlLCBjKTsKKwkJICAgIGFkZHJlc3NfYXNzaWduZWQgPSAxOworCQkgIH0KKwkgICAgICB9CisJCSAJICAgCisJICAgIC8qIFJldHVybiBhZGRyZXNzZXMgZm9yIGFsbCB2YWxpZCBjb250ZXh0cyB3aGljaCBkb24ndCB5ZXQgaGF2ZSBvbmUgKi8KKwkgICAgd2hpbGUgKChjID0gYWRkcmVzczZfYWxsb2NhdGUoc3RhdGUtPmNvbnRleHQsIHN0YXRlLT5jbGlkLCBzdGF0ZS0+Y2xpZF9sZW4sIHN0YXRlLT5pYV90eXBlID09IE9QVElPTjZfSUFfVEEsCisJCQkJCSAgc3RhdGUtPmlhaWQsIGlhX2NvdW50ZXIsIHNvbGljaXRfdGFncywgcGxhaW5fcmFuZ2UsICZhZGRyKSkpCisJICAgICAgeworI2lmZGVmIE9QVElPTjZfUFJFRklYX0NMQVNTCisJCWlmIChkdW1wX2FsbF9wcmVmaXhfY2xhc3NlcyAmJiBzdGF0ZS0+aWFfdHlwZSA9PSBPUFRJT042X0lBX05BKQorCQkgIHN0YXRlLT5zZW5kX3ByZWZpeF9jbGFzcyA9IHByZWZpeF9jbGFzc19mcm9tX2NvbnRleHQoYyk7CisjZW5kaWYKKwkJYWRkX2FkZHJlc3Moc3RhdGUsIGMsIGMtPmxlYXNlX3RpbWUsIE5VTEwsICZtaW5fdGltZSwgJmFkZHIsIG5vdyk7CisJCW1hcmtfY29udGV4dF91c2VkKHN0YXRlLCAmYWRkcik7CisJCWdldF9jb250ZXh0X3RhZyhzdGF0ZSwgYyk7CisJCWFkZHJlc3NfYXNzaWduZWQgPSAxOworCSAgICAgIH0KKwkgICAgCisJICAgIGlmIChhZGRyZXNzX2Fzc2lnbmVkICE9IDEpCisJICAgICAgeworCQkvKiBJZiB0aGUgc2VydmVyIHdpbGwgbm90IGFzc2lnbiBhbnkgYWRkcmVzc2VzIHRvIGFueSBJQXMgaW4gYQorCQkgICBzdWJzZXF1ZW50IFJlcXVlc3QgZnJvbSB0aGUgY2xpZW50LCB0aGUgc2VydmVyIE1VU1Qgc2VuZCBhbiBBZHZlcnRpc2UKKwkJICAgbWVzc2FnZSB0byB0aGUgY2xpZW50IHRoYXQgZG9lc24ndCBpbmNsdWRlIGFueSBJQSBvcHRpb25zLiAqLworCQlpZiAoIXN0YXRlLT5sZWFzZV9hbGxvY2F0ZSkKKwkJICB7CisJCSAgICBzYXZlX2NvdW50ZXIobyk7CisJCSAgICBjb250aW51ZTsKKwkJICB9CisJCQorCQkvKiBJZiB0aGUgc2VydmVyIGNhbm5vdCBhc3NpZ24gYW55IGFkZHJlc3NlcyB0byBhbiBJQSBpbiB0aGUgbWVzc2FnZQorCQkgICBmcm9tIHRoZSBjbGllbnQsIHRoZSBzZXJ2ZXIgTVVTVCBpbmNsdWRlIHRoZSBJQSBpbiB0aGUgUmVwbHkgbWVzc2FnZQorCQkgICB3aXRoIG5vIGFkZHJlc3NlcyBpbiB0aGUgSUEgYW5kIGEgU3RhdHVzIENvZGUgb3B0aW9uIGluIHRoZSBJQQorCQkgICBjb250YWluaW5nIHN0YXR1cyBjb2RlIE5vQWRkcnNBdmFpbC4gKi8KKwkJbzEgPSBuZXdfb3B0NihPUFRJT042X1NUQVRVU19DT0RFKTsKKwkJcHV0X29wdDZfc2hvcnQoREhDUDZOT0FERFJTKTsKKwkJcHV0X29wdDZfc3RyaW5nKF8oImFkZHJlc3MgdW5hdmFpbGFibGUiKSk7CisJCWVuZF9vcHQ2KG8xKTsKKwkgICAgICB9CisJICAgIAorCSAgICBlbmRfaWEodDFjbnRyLCBtaW5fdGltZSwgMCk7CisJICAgIGVuZF9vcHQ2KG8pOwkKKwkgIH0KKworCWlmIChhZGRyZXNzX2Fzc2lnbmVkKSAKKwkgIHsKKwkgICAgbzEgPSBuZXdfb3B0NihPUFRJT042X1NUQVRVU19DT0RFKTsKKwkgICAgcHV0X29wdDZfc2hvcnQoREhDUDZTVUNDRVNTKTsKKwkgICAgcHV0X29wdDZfc3RyaW5nKF8oInN1Y2Nlc3MiKSk7CisJICAgIGVuZF9vcHQ2KG8xKTsKKwkgICAgCisJICAgIC8qIElmIC0tZGhjcC1hdXRob3JpdGF0aXZlIGlzIHNldCwgd2UgY2FuIHRlbGwgY2xpZW50IG5vdCB0byB3YWl0IGZvcgorCSAgICAgICBvdGhlciBwb3NzaWJsZSBzZXJ2ZXJzICovCisJICAgIG8gPSBuZXdfb3B0NihPUFRJT042X1BSRUZFUkVOQ0UpOworCSAgICBwdXRfb3B0Nl9jaGFyKG9wdGlvbl9ib29sKE9QVF9BVVRIT1JJVEFUSVZFKSA/IDI1NSA6IDApOworCSAgICBlbmRfb3B0NihvKTsKKwkgICAgdGFnaWYgPSBhZGRfb3B0aW9ucyhzdGF0ZSwgMCk7CisJICB9CisJZWxzZQorCSAgeyAKKwkgICAgLyogbm8gYWRkcmVzcywgcmV0dXJuIGVycm9yICovCisJICAgIG8xID0gbmV3X29wdDYoT1BUSU9ONl9TVEFUVVNfQ09ERSk7CisJICAgIHB1dF9vcHQ2X3Nob3J0KERIQ1A2Tk9BRERSUyk7CisJICAgIHB1dF9vcHQ2X3N0cmluZyhfKCJubyBhZGRyZXNzZXMgYXZhaWxhYmxlIikpOworCSAgICBlbmRfb3B0NihvMSk7CisKKwkgICAgLyogU29tZSBjbGllbnRzIHdpbGwgYXNrIHJlcGVhdGVkbHkgd2hlbiB3ZSdyZSBub3QgZ2l2aW5nCisJICAgICAgIG91dCBhZGRyZXNzZXMgYmVjYXVzZSB3ZSdyZSBpbiBzdGF0ZWxlc3MgbW9kZS4gQXZvaWQgc3BhbW1pbmcKKwkgICAgICAgdGhlIGxvZyBpbiB0aGF0IGNhc2UuICovCisJICAgIGZvciAoYyA9IHN0YXRlLT5jb250ZXh0OyBjOyBjID0gYy0+Y3VycmVudCkKKwkgICAgICBpZiAoIShjLT5mbGFncyAmIENPTlRFWFRfUkFfU1RBVEVMRVNTKSkKKwkJeworCQkgIGxvZzZfcGFja2V0KHN0YXRlLCBzdGF0ZS0+bGVhc2VfYWxsb2NhdGUgPyAiREhDUFJFUExZIiA6ICJESENQQURWRVJUSVNFIiwgTlVMTCwgXygibm8gYWRkcmVzc2VzIGF2YWlsYWJsZSIpKTsKKwkJICBicmVhazsKKwkJfQorCSAgfQorCisJYnJlYWs7CisgICAgICB9CisgICAgICAKKyAgICBjYXNlIERIQ1A2UkVRVUVTVDoKKyAgICAgIHsKKwlpbnQgYWRkcmVzc19hc3NpZ25lZCA9IDA7CisJaW50IHN0YXJ0ID0gc2F2ZV9jb3VudGVyKC0xKTsKKworCS8qIHNldCByZXBseSBtZXNzYWdlIHR5cGUgKi8KKwkqb3V0bXNndHlwZXAgPSBESENQNlJFUExZOworCXN0YXRlLT5sZWFzZV9hbGxvY2F0ZSA9IDE7CisKKwlsb2c2X3F1aWV0KHN0YXRlLCAiREhDUFJFUVVFU1QiLCBOVUxMLCBpZ25vcmUgPyBfKCJpZ25vcmVkIikgOiBOVUxMKTsKKwkKKwlpZiAoaWdub3JlKQorCSAgcmV0dXJuIDA7CisJCisJZm9yIChvcHQgPSBzdGF0ZS0+cGFja2V0X29wdGlvbnM7IG9wdDsgb3B0ID0gb3B0Nl9uZXh0KG9wdCwgc3RhdGUtPmVuZCkpCisJICB7ICAgCisJICAgIHZvaWQgKmlhX29wdGlvbiwgKmlhX2VuZDsKKwkgICAgdW5zaWduZWQgaW50IG1pbl90aW1lID0gMHhmZmZmZmZmZjsKKwkgICAgaW50IHQxY250cjsKKwkgICAgCisJICAgICBpZiAoIWNoZWNrX2lhKHN0YXRlLCBvcHQsICZpYV9lbmQsICZpYV9vcHRpb24pKQorCSAgICAgICBjb250aW51ZTsKKworCSAgICAgaWYgKCFpYV9vcHRpb24pCisJICAgICAgIHsKKwkJIC8qIElmIHdlIGdldCBhIHJlcXVlc3Qgd2l0aCBhIElBXypBIHdpdGhvdXQgYWRkcmVzc2VzLCB0cmVhdCBpdCBleGFjdGx5IGxpa2UKKwkJICAgIGEgU09MSUNUIHdpdGggcmFwaWQgY29tbWl0IHNldC4gKi8KKwkJIHNhdmVfY291bnRlcihzdGFydCk7CisJCSBnb3RvIHJlcXVlc3Rfbm9fYWRkcmVzczsgCisJICAgICAgIH0KKworCSAgICBvID0gYnVpbGRfaWEoc3RhdGUsICZ0MWNudHIpOworCSAgICAgIAorCSAgICBmb3IgKDsgaWFfb3B0aW9uOyBpYV9vcHRpb24gPSBvcHQ2X2ZpbmQob3B0Nl9uZXh0KGlhX29wdGlvbiwgaWFfZW5kKSwgaWFfZW5kLCBPUFRJT042X0lBQUREUiwgMjQpKQorCSAgICAgIHsKKwkJc3RydWN0IGluNl9hZGRyICpyZXFfYWRkciA9IG9wdDZfcHRyKGlhX29wdGlvbiwgMCk7CisJCXN0cnVjdCBkaGNwX2NvbnRleHQgKmR5bmFtaWMsICpjOworCQl1bnNpZ25lZCBpbnQgbGVhc2VfdGltZTsKKwkJc3RydWN0IGluNl9hZGRyIGFkZHI7CisJCWludCBjb25maWdfb2sgPSAwOworCQkKKwkJaWYgKChjID0gYWRkcmVzczZfdmFsaWQoc3RhdGUtPmNvbnRleHQsIHJlcV9hZGRyLCB0YWdpZiwgMSkpKQorCQkgIGNvbmZpZ19vayA9IGNvbmZpZ192YWxpZChjb25maWcsIGMsICZhZGRyKSAmJiBJTjZfQVJFX0FERFJfRVFVQUwoJmFkZHIsIHJlcV9hZGRyKTsKKwkJCisJCWlmICgoZHluYW1pYyA9IGFkZHJlc3M2X2F2YWlsYWJsZShzdGF0ZS0+Y29udGV4dCwgcmVxX2FkZHIsIHRhZ2lmLCAxKSkgfHwgYykKKwkJICB7CisJCSAgICBpZiAoIWR5bmFtaWMgJiYgIWNvbmZpZ19vaykKKwkJICAgICAgeworCQkJLyogU3RhdGljIHJhbmdlLCBub3QgY29uZmlndXJlZC4gKi8KKwkJCW8xID0gbmV3X29wdDYoT1BUSU9ONl9TVEFUVVNfQ09ERSk7CisJCQlwdXRfb3B0Nl9zaG9ydChESENQNk5PQUREUlMpOworCQkJcHV0X29wdDZfc3RyaW5nKF8oImFkZHJlc3MgdW5hdmFpbGFibGUiKSk7CisJCQllbmRfb3B0NihvMSk7CisJCSAgICAgIH0KKwkJICAgIGVsc2UgaWYgKCFjaGVja19hZGRyZXNzKHN0YXRlLCByZXFfYWRkcikpCisJCSAgICAgIHsKKwkJCS8qIEFkZHJlc3MgbGVhc2VkIHRvIGFub3RoZXIgRFVJRC9JQUlEICovCisJCQlvMSA9IG5ld19vcHQ2KE9QVElPTjZfU1RBVFVTX0NPREUpOworCQkJcHV0X29wdDZfc2hvcnQoREhDUDZVTlNQRUMpOworCQkJcHV0X29wdDZfc3RyaW5nKF8oImFkZHJlc3MgaW4gdXNlIikpOworCQkJZW5kX29wdDYobzEpOworCQkgICAgICB9IAorCQkgICAgZWxzZSAKKwkJICAgICAgeworCQkJaWYgKCFkeW5hbWljKQorCQkJICBkeW5hbWljID0gYzsKKworCQkJbGVhc2VfdGltZSA9IGR5bmFtaWMtPmxlYXNlX3RpbWU7CisJCQkKKwkJCWlmIChjb25maWdfb2sgJiYgaGF2ZV9jb25maWcoY29uZmlnLCBDT05GSUdfVElNRSkpCisJCQkgIGxlYXNlX3RpbWUgPSBjb25maWctPmxlYXNlX3RpbWU7CisKKyNpZmRlZiBPUFRJT042X1BSRUZJWF9DTEFTUworCQkJaWYgKGR1bXBfYWxsX3ByZWZpeF9jbGFzc2VzICYmIHN0YXRlLT5pYV90eXBlID09IE9QVElPTjZfSUFfTkEpCisJCQkgIHN0YXRlLT5zZW5kX3ByZWZpeF9jbGFzcyA9IHByZWZpeF9jbGFzc19mcm9tX2NvbnRleHQoYyk7CisjZW5kaWYKKwkJCWFkZF9hZGRyZXNzKHN0YXRlLCBkeW5hbWljLCBsZWFzZV90aW1lLCBpYV9vcHRpb24sICZtaW5fdGltZSwgcmVxX2FkZHIsIG5vdyk7CisJCQlnZXRfY29udGV4dF90YWcoc3RhdGUsIGR5bmFtaWMpOworCQkJYWRkcmVzc19hc3NpZ25lZCA9IDE7CisJCSAgICAgIH0KKwkJICB9CisJCWVsc2UgCisJCSAgeworCQkgICAgLyogcmVxdWVzdGVkIGFkZHJlc3Mgbm90IG9uIHRoZSBjb3JyZWN0IGxpbmsgKi8KKwkJICAgIG8xID0gbmV3X29wdDYoT1BUSU9ONl9TVEFUVVNfQ09ERSk7CisJCSAgICBwdXRfb3B0Nl9zaG9ydChESENQNk5PVE9OTElOSyk7CisJCSAgICBwdXRfb3B0Nl9zdHJpbmcoXygibm90IG9uIGxpbmsiKSk7CisJCSAgICBlbmRfb3B0NihvMSk7CisJCSAgfQorCSAgICAgIH0KKwkgCisJICAgIGVuZF9pYSh0MWNudHIsIG1pbl90aW1lLCAwKTsKKwkgICAgZW5kX29wdDYobyk7CQorCSAgfQorCisJaWYgKGFkZHJlc3NfYXNzaWduZWQpIAorCSAgeworCSAgICBvMSA9IG5ld19vcHQ2KE9QVElPTjZfU1RBVFVTX0NPREUpOworCSAgICBwdXRfb3B0Nl9zaG9ydChESENQNlNVQ0NFU1MpOworCSAgICBwdXRfb3B0Nl9zdHJpbmcoXygic3VjY2VzcyIpKTsKKwkgICAgZW5kX29wdDYobzEpOworCSAgfQorCWVsc2UKKwkgIHsgCisJICAgIC8qIG5vIGFkZHJlc3MsIHJldHVybiBlcnJvciAqLworCSAgICBvMSA9IG5ld19vcHQ2KE9QVElPTjZfU1RBVFVTX0NPREUpOworCSAgICBwdXRfb3B0Nl9zaG9ydChESENQNk5PQUREUlMpOworCSAgICBwdXRfb3B0Nl9zdHJpbmcoXygibm8gYWRkcmVzc2VzIGF2YWlsYWJsZSIpKTsKKwkgICAgZW5kX29wdDYobzEpOworCSAgICBsb2c2X3BhY2tldChzdGF0ZSwgIkRIQ1BSRVBMWSIsIE5VTEwsIF8oIm5vIGFkZHJlc3NlcyBhdmFpbGFibGUiKSk7CisJICB9CisKKwl0YWdpZiA9IGFkZF9vcHRpb25zKHN0YXRlLCAwKTsKKwlicmVhazsKKyAgICAgIH0KKyAgICAgIAorICAKKyAgICBjYXNlIERIQ1A2UkVORVc6CisgICAgICB7CisJLyogc2V0IHJlcGx5IG1lc3NhZ2UgdHlwZSAqLworCSpvdXRtc2d0eXBlcCA9IERIQ1A2UkVQTFk7CisJCisJbG9nNl9xdWlldChzdGF0ZSwgIkRIQ1BSRU5FVyIsIE5VTEwsIE5VTEwpOworCisJZm9yIChvcHQgPSBzdGF0ZS0+cGFja2V0X29wdGlvbnM7IG9wdDsgb3B0ID0gb3B0Nl9uZXh0KG9wdCwgc3RhdGUtPmVuZCkpCisJICB7CisJICAgIHZvaWQgKmlhX29wdGlvbiwgKmlhX2VuZDsKKwkgICAgdW5zaWduZWQgaW50IG1pbl90aW1lID0gMHhmZmZmZmZmZjsKKwkgICAgaW50IHQxY250ciwgaWFjbnRyOworCSAgICAKKwkgICAgaWYgKCFjaGVja19pYShzdGF0ZSwgb3B0LCAmaWFfZW5kLCAmaWFfb3B0aW9uKSkKKwkgICAgICBjb250aW51ZTsKKwkgICAgCisJICAgIG8gPSBidWlsZF9pYShzdGF0ZSwgJnQxY250cik7CisJICAgIGlhY250ciA9IHNhdmVfY291bnRlcigtMSk7IAorCSAgICAKKwkgICAgZm9yICg7IGlhX29wdGlvbjsgaWFfb3B0aW9uID0gb3B0Nl9maW5kKG9wdDZfbmV4dChpYV9vcHRpb24sIGlhX2VuZCksIGlhX2VuZCwgT1BUSU9ONl9JQUFERFIsIDI0KSkKKwkgICAgICB7CisJCXN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZSA9IE5VTEw7CisJCXN0cnVjdCBpbjZfYWRkciAqcmVxX2FkZHIgPSBvcHQ2X3B0cihpYV9vcHRpb24sIDApOworCQl1bnNpZ25lZCBpbnQgcHJlZmVycmVkX3RpbWUgPSAgb3B0Nl91aW50KGlhX29wdGlvbiwgMTYsIDQpOworCQl1bnNpZ25lZCBpbnQgdmFsaWRfdGltZSA9ICBvcHQ2X3VpbnQoaWFfb3B0aW9uLCAyMCwgNCk7CisJCWNoYXIgKm1lc3NhZ2UgPSBOVUxMOworCQlzdHJ1Y3QgZGhjcF9jb250ZXh0ICp0aGlzX2NvbnRleHQ7CisJCQorCQlpZiAoIShsZWFzZSA9IGxlYXNlNl9maW5kKHN0YXRlLT5jbGlkLCBzdGF0ZS0+Y2xpZF9sZW4sCisJCQkJCSAgc3RhdGUtPmlhX3R5cGUgPT0gT1BUSU9ONl9JQV9OQSA/IExFQVNFX05BIDogTEVBU0VfVEEsIAorCQkJCQkgIHN0YXRlLT5pYWlkLCByZXFfYWRkcikpKQorCQkgIHsKKwkJICAgIC8qIElmIHRoZSBzZXJ2ZXIgY2Fubm90IGZpbmQgYSBjbGllbnQgZW50cnkgZm9yIHRoZSBJQSB0aGUgc2VydmVyCisJCSAgICAgICByZXR1cm5zIHRoZSBJQSBjb250YWluaW5nIG5vIGFkZHJlc3NlcyB3aXRoIGEgU3RhdHVzIENvZGUgb3B0aW9uIHNldAorCQkgICAgICAgdG8gTm9CaW5kaW5nIGluIHRoZSBSZXBseSBtZXNzYWdlLiAqLworCQkgICAgc2F2ZV9jb3VudGVyKGlhY250cik7CisJCSAgICB0MWNudHIgPSAwOworCQkgICAgCisJCSAgICBsb2c2X3BhY2tldChzdGF0ZSwgIkRIQ1BSRVBMWSIsIHJlcV9hZGRyLCBfKCJsZWFzZSBub3QgZm91bmQiKSk7CisJCSAgICAKKwkJICAgIG8xID0gbmV3X29wdDYoT1BUSU9ONl9TVEFUVVNfQ09ERSk7CisJCSAgICBwdXRfb3B0Nl9zaG9ydChESENQNk5PQklORElORyk7CisJCSAgICBwdXRfb3B0Nl9zdHJpbmcoXygibm8gYmluZGluZyBmb3VuZCIpKTsKKwkJICAgIGVuZF9vcHQ2KG8xKTsKKworCQkgICAgcHJlZmVycmVkX3RpbWUgPSB2YWxpZF90aW1lID0gMDsKKwkJICAgIGJyZWFrOworCQkgIH0KKwkJCisJCQorCQlpZiAoKHRoaXNfY29udGV4dCA9IGFkZHJlc3M2X2F2YWlsYWJsZShzdGF0ZS0+Y29udGV4dCwgcmVxX2FkZHIsIHRhZ2lmLCAxKSkgfHwKKwkJICAgICh0aGlzX2NvbnRleHQgPSBhZGRyZXNzNl92YWxpZChzdGF0ZS0+Y29udGV4dCwgcmVxX2FkZHIsIHRhZ2lmLCAxKSkpCisJCSAgeworCQkgICAgc3RydWN0IGluNl9hZGRyIGFkZHI7CisJCSAgICB1bnNpZ25lZCBpbnQgbGVhc2VfdGltZTsKKworCQkgICAgZ2V0X2NvbnRleHRfdGFnKHN0YXRlLCB0aGlzX2NvbnRleHQpOworCQkgICAgCisJCSAgICBpZiAoY29uZmlnX3ZhbGlkKGNvbmZpZywgdGhpc19jb250ZXh0LCAmYWRkcikgJiYgSU42X0FSRV9BRERSX0VRVUFMKCZhZGRyLCByZXFfYWRkcikgJiYgaGF2ZV9jb25maWcoY29uZmlnLCBDT05GSUdfVElNRSkpCisJCSAgICAgIGxlYXNlX3RpbWUgPSBjb25maWctPmxlYXNlX3RpbWU7CisJCSAgICBlbHNlIAorCQkgICAgICBsZWFzZV90aW1lID0gdGhpc19jb250ZXh0LT5sZWFzZV90aW1lOworCQkgICAgCisJCSAgICBjYWxjdWxhdGVfdGltZXModGhpc19jb250ZXh0LCAmbWluX3RpbWUsICZ2YWxpZF90aW1lLCAmcHJlZmVycmVkX3RpbWUsIGxlYXNlX3RpbWUpOyAKKwkJICAgIAorCQkgICAgbGVhc2Vfc2V0X2V4cGlyZXMobGVhc2UsIHZhbGlkX3RpbWUsIG5vdyk7CisJCSAgICAvKiBVcGRhdGUgTUFDIHJlY29yZCBpbiBjYXNlIGl0J3MgbmV3IGluZm9ybWF0aW9uLiAqLworCQkgICAgaWYgKHN0YXRlLT5tYWNfbGVuICE9IDApCisJCSAgICAgIGxlYXNlX3NldF9od2FkZHIobGVhc2UsIHN0YXRlLT5tYWMsIHN0YXRlLT5jbGlkLCBzdGF0ZS0+bWFjX2xlbiwgc3RhdGUtPm1hY190eXBlLCBzdGF0ZS0+Y2xpZF9sZW4sIG5vdywgMCk7CisJCSAgICBpZiAoc3RhdGUtPmlhX3R5cGUgPT0gT1BUSU9ONl9JQV9OQSAmJiBzdGF0ZS0+aG9zdG5hbWUpCisJCSAgICAgIHsKKwkJCWNoYXIgKmFkZHJfZG9tYWluID0gZ2V0X2RvbWFpbjYocmVxX2FkZHIpOworCQkJaWYgKCFzdGF0ZS0+c2VuZF9kb21haW4pCisJCQkgIHN0YXRlLT5zZW5kX2RvbWFpbiA9IGFkZHJfZG9tYWluOworCQkJbGVhc2Vfc2V0X2hvc3RuYW1lKGxlYXNlLCBzdGF0ZS0+aG9zdG5hbWUsIHN0YXRlLT5ob3N0bmFtZV9hdXRoLCBhZGRyX2RvbWFpbiwgc3RhdGUtPmRvbWFpbik7IAorCQkJbWVzc2FnZSA9IHN0YXRlLT5ob3N0bmFtZTsKKwkJICAgICAgfQorCQkgICAgCisJCSAgICAKKwkJICAgIGlmIChwcmVmZXJyZWRfdGltZSA9PSAwKQorCQkgICAgICBtZXNzYWdlID0gXygiZGVwcmVjYXRlZCIpOworCQkgIH0KKwkJZWxzZQorCQkgIHsKKwkJICAgIHByZWZlcnJlZF90aW1lID0gdmFsaWRfdGltZSA9IDA7CisJCSAgICBtZXNzYWdlID0gXygiYWRkcmVzcyBpbnZhbGlkIik7CisJCSAgfSAKKworCQlpZiAobWVzc2FnZSAmJiAobWVzc2FnZSAhPSBzdGF0ZS0+aG9zdG5hbWUpKQorCQkgIGxvZzZfcGFja2V0KHN0YXRlLCAiREhDUFJFUExZIiwgcmVxX2FkZHIsIG1lc3NhZ2UpOwkKKwkJZWxzZQorCQkgIGxvZzZfcXVpZXQoc3RhdGUsICJESENQUkVQTFkiLCByZXFfYWRkciwgbWVzc2FnZSk7CisJCisJCW8xID0gIG5ld19vcHQ2KE9QVElPTjZfSUFBRERSKTsKKwkJcHV0X29wdDYocmVxX2FkZHIsIHNpemVvZigqcmVxX2FkZHIpKTsKKwkJcHV0X29wdDZfbG9uZyhwcmVmZXJyZWRfdGltZSk7CisJCXB1dF9vcHQ2X2xvbmcodmFsaWRfdGltZSk7CisJCWVuZF9vcHQ2KG8xKTsKKwkgICAgICB9CisJICAgIAorCSAgICBlbmRfaWEodDFjbnRyLCBtaW5fdGltZSwgMSk7CisJICAgIGVuZF9vcHQ2KG8pOworCSAgfQorCQorCXRhZ2lmID0gYWRkX29wdGlvbnMoc3RhdGUsIDApOworCWJyZWFrOworCQorICAgICAgfQorICAgICAgCisgICAgY2FzZSBESENQNkNPTkZJUk06CisgICAgICB7CisJaW50IGdvb2RfYWRkciA9IDA7CisKKwkvKiBzZXQgcmVwbHkgbWVzc2FnZSB0eXBlICovCisJKm91dG1zZ3R5cGVwID0gREhDUDZSRVBMWTsKKwkKKwlsb2c2X3F1aWV0KHN0YXRlLCAiREhDUENPTkZJUk0iLCBOVUxMLCBOVUxMKTsKKwkKKwlmb3IgKG9wdCA9IHN0YXRlLT5wYWNrZXRfb3B0aW9uczsgb3B0OyBvcHQgPSBvcHQ2X25leHQob3B0LCBzdGF0ZS0+ZW5kKSkKKwkgIHsKKwkgICAgdm9pZCAqaWFfb3B0aW9uLCAqaWFfZW5kOworCSAgICAKKwkgICAgZm9yIChjaGVja19pYShzdGF0ZSwgb3B0LCAmaWFfZW5kLCAmaWFfb3B0aW9uKTsKKwkJIGlhX29wdGlvbjsKKwkJIGlhX29wdGlvbiA9IG9wdDZfZmluZChvcHQ2X25leHQoaWFfb3B0aW9uLCBpYV9lbmQpLCBpYV9lbmQsIE9QVElPTjZfSUFBRERSLCAyNCkpCisJICAgICAgeworCQlzdHJ1Y3QgaW42X2FkZHIgKnJlcV9hZGRyID0gb3B0Nl9wdHIoaWFfb3B0aW9uLCAwKTsKKwkJCisJCWlmICghYWRkcmVzczZfdmFsaWQoc3RhdGUtPmNvbnRleHQsIHJlcV9hZGRyLCB0YWdpZiwgMSkpCisJCSAgeworCQkgICAgbzEgPSBuZXdfb3B0NihPUFRJT042X1NUQVRVU19DT0RFKTsKKwkJICAgIHB1dF9vcHQ2X3Nob3J0KERIQ1A2Tk9UT05MSU5LKTsKKwkJICAgIHB1dF9vcHQ2X3N0cmluZyhfKCJjb25maXJtIGZhaWxlZCIpKTsKKwkJICAgIGVuZF9vcHQ2KG8xKTsKKwkJICAgIHJldHVybiAxOworCQkgIH0KKworCQlnb29kX2FkZHIgPSAxOworCQlsb2c2X3F1aWV0KHN0YXRlLCAiREhDUFJFUExZIiwgcmVxX2FkZHIsIHN0YXRlLT5ob3N0bmFtZSk7CisJICAgICAgfQorCSAgfQkgCisJCisJLyogTm8gYWRkcmVzc2VzLCBubyByZXBseTogUkZDIDMzMTUgMTguMi4yICovCisJaWYgKCFnb29kX2FkZHIpCisJICByZXR1cm4gMDsKKworCW8xID0gbmV3X29wdDYoT1BUSU9ONl9TVEFUVVNfQ09ERSk7CisJcHV0X29wdDZfc2hvcnQoREhDUDZTVUNDRVNTICk7CisJcHV0X29wdDZfc3RyaW5nKF8oImFsbCBhZGRyZXNzZXMgc3RpbGwgb24gbGluayIpKTsKKwllbmRfb3B0NihvMSk7CisJYnJlYWs7CisgICAgfQorICAgICAgCisgICAgY2FzZSBESENQNklSRVE6CisgICAgICB7CisJLyogV2UgY2FuJ3QgZGlzY3JpbWluYXRlIGNvbnRleHRzIGJhc2VkIG9uIGFkZHJlc3MsIGFzIHdlIGRvbid0IGtub3cgaXQuCisJICAgSWYgdGhlcmUgaXMgb25seSBvbmUgcG9zc2libGUgY29udGV4dCwgd2UgY2FuIHVzZSBpdHMgdGFncyAqLworCWlmIChzdGF0ZS0+Y29udGV4dCAmJiBzdGF0ZS0+Y29udGV4dC0+bmV0aWQubmV0ICYmICFzdGF0ZS0+Y29udGV4dC0+Y3VycmVudCkKKwkgIHsKKwkgICAgc3RhdGUtPmNvbnRleHQtPm5ldGlkLm5leHQgPSBOVUxMOworCSAgICBzdGF0ZS0+Y29udGV4dF90YWdzID0gICZzdGF0ZS0+Y29udGV4dC0+bmV0aWQ7CisJICB9CisKKwkvKiBTaW1pbGFybHksIHdlIGNhbid0IGRldGVybWluZSBkb21haW4gZnJvbSBhZGRyZXNzLCBidXQgaWYgdGhlIEZRRE4gaXMKKwkgICBnaXZlbiBpbiAtLWRoY3AtaG9zdCwgd2UgY2FuIHVzZSB0aGF0LCBhbmQgZmFpbGluZyB0aGF0IHdlIGNhbiB1c2UgdGhlIAorCSAgIHVucXVhbGlmaWVkIGNvbmZpZ3VyZWQgZG9tYWluLCBpZiBhbnkuICovCisJaWYgKHN0YXRlLT5ob3N0bmFtZV9hdXRoKQorCSAgc3RhdGUtPnNlbmRfZG9tYWluID0gc3RhdGUtPmRvbWFpbjsKKwllbHNlCisJICBzdGF0ZS0+c2VuZF9kb21haW4gPSBnZXRfZG9tYWluNihOVUxMKTsKKworCWxvZzZfcXVpZXQoc3RhdGUsICJESENQSU5GT1JNQVRJT04tUkVRVUVTVCIsIE5VTEwsIGlnbm9yZSA/IF8oImlnbm9yZWQiKSA6IHN0YXRlLT5ob3N0bmFtZSk7CisJaWYgKGlnbm9yZSkKKwkgIHJldHVybiAwOworCSpvdXRtc2d0eXBlcCA9IERIQ1A2UkVQTFk7CisJdGFnaWYgPSBhZGRfb3B0aW9ucyhzdGF0ZSwgMSk7CisJYnJlYWs7CisgICAgICB9CisgICAgICAKKyAgICAgIAorICAgIGNhc2UgREhDUDZSRUxFQVNFOgorICAgICAgeworCS8qIHNldCByZXBseSBtZXNzYWdlIHR5cGUgKi8KKwkqb3V0bXNndHlwZXAgPSBESENQNlJFUExZOworCisJbG9nNl9xdWlldChzdGF0ZSwgIkRIQ1BSRUxFQVNFIiwgTlVMTCwgTlVMTCk7CisKKwlmb3IgKG9wdCA9IHN0YXRlLT5wYWNrZXRfb3B0aW9uczsgb3B0OyBvcHQgPSBvcHQ2X25leHQob3B0LCBzdGF0ZS0+ZW5kKSkKKwkgIHsKKwkgICAgdm9pZCAqaWFfb3B0aW9uLCAqaWFfZW5kOworCSAgICBpbnQgbWFkZV9pYSA9IDA7CisJICAgIAkgICAgCisJICAgIGZvciAoY2hlY2tfaWEoc3RhdGUsIG9wdCwgJmlhX2VuZCwgJmlhX29wdGlvbik7CisJCSBpYV9vcHRpb247CisJCSBpYV9vcHRpb24gPSBvcHQ2X2ZpbmQob3B0Nl9uZXh0KGlhX29wdGlvbiwgaWFfZW5kKSwgaWFfZW5kLCBPUFRJT042X0lBQUREUiwgMjQpKSAKKwkgICAgICB7CisJCXN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZTsKKwkJCisJCWlmICgobGVhc2UgPSBsZWFzZTZfZmluZChzdGF0ZS0+Y2xpZCwgc3RhdGUtPmNsaWRfbGVuLCBzdGF0ZS0+aWFfdHlwZSA9PSBPUFRJT042X0lBX05BID8gTEVBU0VfTkEgOiBMRUFTRV9UQSwKKwkJCQkJIHN0YXRlLT5pYWlkLCBvcHQ2X3B0cihpYV9vcHRpb24sIDApKSkpCisJCSAgbGVhc2VfcHJ1bmUobGVhc2UsIG5vdyk7CisJCWVsc2UKKwkJICB7CisJCSAgICBpZiAoIW1hZGVfaWEpCisJCSAgICAgIHsKKwkJCW8gPSBuZXdfb3B0NihzdGF0ZS0+aWFfdHlwZSk7CisJCQlwdXRfb3B0Nl9sb25nKHN0YXRlLT5pYWlkKTsKKwkJCWlmIChzdGF0ZS0+aWFfdHlwZSA9PSBPUFRJT042X0lBX05BKQorCQkJICB7CisJCQkgICAgcHV0X29wdDZfbG9uZygwKTsKKwkJCSAgICBwdXRfb3B0Nl9sb25nKDApOyAKKwkJCSAgfQorCQkJbWFkZV9pYSA9IDE7CisJCSAgICAgIH0KKwkJICAgIAorCQkgICAgbzEgPSBuZXdfb3B0NihPUFRJT042X0lBQUREUik7CisJCSAgICBwdXRfb3B0NihvcHQ2X3B0cihpYV9vcHRpb24sIDApLCBJTjZBRERSU1opOworCQkgICAgcHV0X29wdDZfbG9uZygwKTsKKwkJICAgIHB1dF9vcHQ2X2xvbmcoMCk7CisJCSAgICBlbmRfb3B0NihvMSk7CisJCSAgfQorCSAgICAgIH0KKwkgICAgCisJICAgIGlmIChtYWRlX2lhKQorCSAgICAgIHsKKwkJbzEgPSBuZXdfb3B0NihPUFRJT042X1NUQVRVU19DT0RFKTsKKwkJcHV0X29wdDZfc2hvcnQoREhDUDZOT0JJTkRJTkcpOworCQlwdXRfb3B0Nl9zdHJpbmcoXygibm8gYmluZGluZyBmb3VuZCIpKTsKKwkJZW5kX29wdDYobzEpOworCQkKKwkJZW5kX29wdDYobyk7CisJICAgICAgfQorCSAgfQorCQorCW8xID0gbmV3X29wdDYoT1BUSU9ONl9TVEFUVVNfQ09ERSk7CisJcHV0X29wdDZfc2hvcnQoREhDUDZTVUNDRVNTKTsKKwlwdXRfb3B0Nl9zdHJpbmcoXygicmVsZWFzZSByZWNlaXZlZCIpKTsKKwllbmRfb3B0NihvMSk7CisJCisJYnJlYWs7CisgICAgICB9CisKKyAgICBjYXNlIERIQ1A2REVDTElORToKKyAgICAgIHsKKwkvKiBzZXQgcmVwbHkgbWVzc2FnZSB0eXBlICovCisJKm91dG1zZ3R5cGVwID0gREhDUDZSRVBMWTsKKwkKKwlsb2c2X3F1aWV0KHN0YXRlLCAiREhDUERFQ0xJTkUiLCBOVUxMLCBOVUxMKTsKKworCWZvciAob3B0ID0gc3RhdGUtPnBhY2tldF9vcHRpb25zOyBvcHQ7IG9wdCA9IG9wdDZfbmV4dChvcHQsIHN0YXRlLT5lbmQpKQorCSAgeworCSAgICB2b2lkICppYV9vcHRpb24sICppYV9lbmQ7CisJICAgIGludCBtYWRlX2lhID0gMDsKKwkgICAgCSAgICAKKwkgICAgZm9yIChjaGVja19pYShzdGF0ZSwgb3B0LCAmaWFfZW5kLCAmaWFfb3B0aW9uKTsKKwkJIGlhX29wdGlvbjsKKwkJIGlhX29wdGlvbiA9IG9wdDZfZmluZChvcHQ2X25leHQoaWFfb3B0aW9uLCBpYV9lbmQpLCBpYV9lbmQsIE9QVElPTjZfSUFBRERSLCAyNCkpIAorCSAgICAgIHsKKwkJc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlOworCQlzdHJ1Y3QgaW42X2FkZHIgKmFkZHJwID0gb3B0Nl9wdHIoaWFfb3B0aW9uLCAwKTsKKworCQlpZiAoaGF2ZV9jb25maWcoY29uZmlnLCBDT05GSUdfQUREUjYpICYmIElONl9BUkVfQUREUl9FUVVBTCgmY29uZmlnLT5hZGRyNiwgYWRkcnApKQorCQkgIHsKKwkJICAgIHByZXR0eXByaW50X3RpbWUoZGFlbW9uLT5kaGNwX2J1ZmYzLCBERUNMSU5FX0JBQ0tPRkYpOworCQkgICAgaW5ldF9udG9wKEFGX0lORVQ2LCBhZGRycCwgZGFlbW9uLT5hZGRyYnVmZiwgQUREUlNUUkxFTik7CisJCSAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19XQVJOSU5HLCBfKCJkaXNhYmxpbmcgREhDUCBzdGF0aWMgYWRkcmVzcyAlcyBmb3IgJXMiKSwgCisJCQkgICAgICBkYWVtb24tPmFkZHJidWZmLCBkYWVtb24tPmRoY3BfYnVmZjMpOworCQkgICAgY29uZmlnLT5mbGFncyB8PSBDT05GSUdfREVDTElORUQ7CisJCSAgICBjb25maWctPmRlY2xpbmVfdGltZSA9IG5vdzsKKwkJICB9CisJCWVsc2UKKwkJICAvKiBtYWtlIHN1cmUgdGhpcyBob3N0IGdldHMgYSBkaWZmZXJlbnQgYWRkcmVzcyBuZXh0IHRpbWUuICovCisJCSAgZm9yIChjb250ZXh0X3RtcCA9IHN0YXRlLT5jb250ZXh0OyBjb250ZXh0X3RtcDsgY29udGV4dF90bXAgPSBjb250ZXh0X3RtcC0+Y3VycmVudCkKKwkJICAgIGNvbnRleHRfdG1wLT5hZGRyX2Vwb2NoKys7CisJCQorCQlpZiAoKGxlYXNlID0gbGVhc2U2X2ZpbmQoc3RhdGUtPmNsaWQsIHN0YXRlLT5jbGlkX2xlbiwgc3RhdGUtPmlhX3R5cGUgPT0gT1BUSU9ONl9JQV9OQSA/IExFQVNFX05BIDogTEVBU0VfVEEsCisJCQkJCSBzdGF0ZS0+aWFpZCwgb3B0Nl9wdHIoaWFfb3B0aW9uLCAwKSkpKQorCQkgIGxlYXNlX3BydW5lKGxlYXNlLCBub3cpOworCQllbHNlCisJCSAgeworCQkgICAgaWYgKCFtYWRlX2lhKQorCQkgICAgICB7CisJCQlvID0gbmV3X29wdDYoc3RhdGUtPmlhX3R5cGUpOworCQkJcHV0X29wdDZfbG9uZyhzdGF0ZS0+aWFpZCk7CisJCQlpZiAoc3RhdGUtPmlhX3R5cGUgPT0gT1BUSU9ONl9JQV9OQSkKKwkJCSAgeworCQkJICAgIHB1dF9vcHQ2X2xvbmcoMCk7CisJCQkgICAgcHV0X29wdDZfbG9uZygwKTsgCisJCQkgIH0KKwkJCW1hZGVfaWEgPSAxOworCQkgICAgICB9CisJCSAgICAKKwkJICAgIG8xID0gbmV3X29wdDYoT1BUSU9ONl9JQUFERFIpOworCQkgICAgcHV0X29wdDYob3B0Nl9wdHIoaWFfb3B0aW9uLCAwKSwgSU42QUREUlNaKTsKKwkJICAgIHB1dF9vcHQ2X2xvbmcoMCk7CisJCSAgICBwdXRfb3B0Nl9sb25nKDApOworCQkgICAgZW5kX29wdDYobzEpOworCQkgIH0KKwkgICAgICB9CisJICAgIAorCSAgICBpZiAobWFkZV9pYSkKKwkgICAgICB7CisJCW8xID0gbmV3X29wdDYoT1BUSU9ONl9TVEFUVVNfQ09ERSk7CisJCXB1dF9vcHQ2X3Nob3J0KERIQ1A2Tk9CSU5ESU5HKTsKKwkJcHV0X29wdDZfc3RyaW5nKF8oIm5vIGJpbmRpbmcgZm91bmQiKSk7CisJCWVuZF9vcHQ2KG8xKTsKKwkJCisJCWVuZF9vcHQ2KG8pOworCSAgICAgIH0KKwkgICAgCisJICB9CisKKwkvKiBXZSBtdXN0IGFuc3dlciB3aXRoICdzdWNjZXNzJyBpbiBnbG9iYWwgc2VjdGlvbiBhbnl3YXkgKi8KKwlvMSA9IG5ld19vcHQ2KE9QVElPTjZfU1RBVFVTX0NPREUpOworCXB1dF9vcHQ2X3Nob3J0KERIQ1A2U1VDQ0VTUyk7CisJcHV0X29wdDZfc3RyaW5nKF8oInN1Y2Nlc3MiKSk7CisJZW5kX29wdDYobzEpOworCWJyZWFrOworICAgICAgfQorCisgICAgfQorICAKKyAgbG9nX3RhZ3ModGFnaWYsIHN0YXRlLT54aWQpOworICBsb2c2X29wdHMoMCwgc3RhdGUtPnhpZCwgZGFlbW9uLT5vdXRwYWNrZXQuaW92X2Jhc2UgKyBzdGFydF9vcHRzLCBkYWVtb24tPm91dHBhY2tldC5pb3ZfYmFzZSArIHNhdmVfY291bnRlcigtMSkpOworICAKKyAgcmV0dXJuIDE7CisKK30KKworc3RhdGljIHN0cnVjdCBkaGNwX25ldGlkICphZGRfb3B0aW9ucyhzdHJ1Y3Qgc3RhdGUgKnN0YXRlLCBpbnQgZG9fcmVmcmVzaCkgIAoreworICB2b2lkICpvcm87CisgIC8qIGZpbHRlciBvcHRpb25zIGJhc2VkIG9uIHRhZ3MsIHRob3NlIHdlIHdhbnQgZ2V0IERIT1BUX1RBR09LIGJpdCBzZXQgKi8KKyAgc3RydWN0IGRoY3BfbmV0aWQgKnRhZ2lmID0gb3B0aW9uX2ZpbHRlcihzdGF0ZS0+dGFncywgc3RhdGUtPmNvbnRleHRfdGFncywgZGFlbW9uLT5kaGNwX29wdHM2KTsKKyAgc3RydWN0IGRoY3Bfb3B0ICpvcHRfY2ZnOworICBpbnQgZG9uZV9kbnMgPSAwLCBkb25lX3JlZnJlc2ggPSAhZG9fcmVmcmVzaCwgZG9fZW5jYXAgPSAwOworICBpbnQgaSwgbywgbzE7CisKKyAgb3JvID0gb3B0Nl9maW5kKHN0YXRlLT5wYWNrZXRfb3B0aW9ucywgc3RhdGUtPmVuZCwgT1BUSU9ONl9PUk8sIDApOworICAKKyAgZm9yIChvcHRfY2ZnID0gZGFlbW9uLT5kaGNwX29wdHM2OyBvcHRfY2ZnOyBvcHRfY2ZnID0gb3B0X2NmZy0+bmV4dCkKKyAgICB7CisgICAgICAvKiBuZXRpZHMgbWF0Y2ggYW5kIG5vdCBlbmNhcHN1bGF0ZWQ/ICovCisgICAgICBpZiAoIShvcHRfY2ZnLT5mbGFncyAmIERIT1BUX1RBR09LKSkKKwljb250aW51ZTsKKyAgICAgIAorICAgICAgaWYgKCEob3B0X2NmZy0+ZmxhZ3MgJiBESE9QVF9GT1JDRSkgJiYgb3JvKQorCXsKKwkgIGZvciAoaSA9IDA7IGkgPCAgb3B0Nl9sZW4ob3JvKSAtIDE7IGkgKz0gMikKKwkgICAgaWYgKG9wdDZfdWludChvcm8sIGksIDIpID09ICh1bnNpZ25lZClvcHRfY2ZnLT5vcHQpCisJICAgICAgYnJlYWs7CisJICAKKwkgIC8qIG9wdGlvbiBub3QgcmVxdWVzdGVkICovCisJICBpZiAoaSA+PSAgb3B0Nl9sZW4ob3JvKSAtIDEpCisJICAgIGNvbnRpbnVlOworCX0KKyAgICAgIAorICAgICAgaWYgKG9wdF9jZmctPm9wdCA9PSBPUFRJT042X1JFRlJFU0hfVElNRSkKKwlkb25lX3JlZnJlc2ggPSAxOworICAgICAgIAorICAgICAgaWYgKG9wdF9jZmctPm9wdCA9PSBPUFRJT042X0ROU19TRVJWRVIpCisJZG9uZV9kbnMgPSAxOworICAgICAgCisgICAgICBpZiAob3B0X2NmZy0+ZmxhZ3MgJiBESE9QVF9BRERSNikKKwl7CisJICBpbnQgbGVuLCBqOworCSAgc3RydWN0IGluNl9hZGRyICphOworCSAgCisJICBmb3IgKGEgPSAoc3RydWN0IGluNl9hZGRyICopb3B0X2NmZy0+dmFsLCBsZW4gPSBvcHRfY2ZnLT5sZW4sIGogPSAwOyAKKwkgICAgICAgaiA8IG9wdF9jZmctPmxlbjsgaiArPSBJTjZBRERSU1osIGErKykKKwkgICAgaWYgKChJTjZfSVNfQUREUl9VTEFfWkVSTyhhKSAmJiBJTjZfSVNfQUREUl9VTlNQRUNJRklFRChzdGF0ZS0+dWxhX2FkZHIpKSB8fAorCQkoSU42X0lTX0FERFJfTElOS19MT0NBTF9aRVJPKGEpICYmIElONl9JU19BRERSX1VOU1BFQ0lGSUVEKHN0YXRlLT5sbF9hZGRyKSkpCisJICAgICAgbGVuIC09IElONkFERFJTWjsKKwkgIAorCSAgaWYgKGxlbiAhPSAwKQorCSAgICB7CisJICAgICAgCisJICAgICAgbyA9IG5ld19vcHQ2KG9wdF9jZmctPm9wdCk7CisJICAgICAgCSAgCisJICAgICAgZm9yIChhID0gKHN0cnVjdCBpbjZfYWRkciAqKW9wdF9jZmctPnZhbCwgaiA9IDA7IGogPCBvcHRfY2ZnLT5sZW47IGorPUlONkFERFJTWiwgYSsrKQorCQl7CisJCSAgaWYgKElONl9JU19BRERSX1VOU1BFQ0lGSUVEKGEpKQorCQkgICAgeworCQkgICAgICBpZiAoIWFkZF9sb2NhbF9hZGRycyhzdGF0ZS0+Y29udGV4dCkpCisJCQlwdXRfb3B0NihzdGF0ZS0+ZmFsbGJhY2ssIElONkFERFJTWik7CisJCSAgICB9CisJCSAgZWxzZSBpZiAoSU42X0lTX0FERFJfVUxBX1pFUk8oYSkpCisJCSAgICB7CisJCSAgICAgIGlmICghSU42X0lTX0FERFJfVU5TUEVDSUZJRUQoc3RhdGUtPnVsYV9hZGRyKSkKKwkJCXB1dF9vcHQ2KHN0YXRlLT51bGFfYWRkciwgSU42QUREUlNaKTsKKwkJICAgIH0KKwkJICBlbHNlIGlmIChJTjZfSVNfQUREUl9MSU5LX0xPQ0FMX1pFUk8oYSkpCisJCSAgICB7CisJCSAgICAgIGlmICghSU42X0lTX0FERFJfVU5TUEVDSUZJRUQoc3RhdGUtPmxsX2FkZHIpKQorCQkJcHV0X29wdDYoc3RhdGUtPmxsX2FkZHIsIElONkFERFJTWik7CisJCSAgICB9CisJCSAgZWxzZQorCQkgICAgcHV0X29wdDYoYSwgSU42QUREUlNaKTsKKwkJfQorCisJICAgICAgZW5kX29wdDYobyk7CisJICAgIH0KKwl9CisgICAgICBlbHNlCisJeworCSAgbyA9IG5ld19vcHQ2KG9wdF9jZmctPm9wdCk7CisJICBpZiAob3B0X2NmZy0+dmFsKQorCSAgICBwdXRfb3B0NihvcHRfY2ZnLT52YWwsIG9wdF9jZmctPmxlbik7CisJICBlbmRfb3B0NihvKTsKKwl9CisgICAgfQorICAKKyAgaWYgKGRhZW1vbi0+cG9ydCA9PSBOQU1FU0VSVkVSX1BPUlQgJiYgIWRvbmVfZG5zKQorICAgIHsKKyAgICAgIG8gPSBuZXdfb3B0NihPUFRJT042X0ROU19TRVJWRVIpOworICAgICAgaWYgKCFhZGRfbG9jYWxfYWRkcnMoc3RhdGUtPmNvbnRleHQpKQorCXB1dF9vcHQ2KHN0YXRlLT5mYWxsYmFjaywgSU42QUREUlNaKTsKKyAgICAgIGVuZF9vcHQ2KG8pOyAKKyAgICB9CisKKyAgaWYgKHN0YXRlLT5jb250ZXh0ICYmICFkb25lX3JlZnJlc2gpCisgICAgeworICAgICAgc3RydWN0IGRoY3BfY29udGV4dCAqYzsKKyAgICAgIHVuc2lnbmVkIGludCBsZWFzZV90aW1lID0gMHhmZmZmZmZmZjsKKyAgICAgIAorICAgICAgLyogRmluZCB0aGUgc21hbGxlc3QgbGVhc2UgdGllIG9mIGFsbCBjb250ZXh0cywKKwkgc3ViamVjdCB0byB0aGUgUkZDLTQyNDIgc3RpcHVsYXRpb24gdGhhdCB0aGlzIG11c3Qgbm90IAorCSBiZSBsZXNzIHRoYW4gNjAwLiAqLworICAgICAgZm9yIChjID0gc3RhdGUtPmNvbnRleHQ7IGM7IGMgPSBjLT5uZXh0KQorCWlmIChjLT5sZWFzZV90aW1lIDwgbGVhc2VfdGltZSkKKwkgIHsKKwkgICAgaWYgKGMtPmxlYXNlX3RpbWUgPCA2MDApCisJICAgICAgbGVhc2VfdGltZSA9IDYwMDsKKwkgICAgZWxzZQorCSAgICAgIGxlYXNlX3RpbWUgPSBjLT5sZWFzZV90aW1lOworCSAgfQorCisgICAgICBvID0gbmV3X29wdDYoT1BUSU9ONl9SRUZSRVNIX1RJTUUpOworICAgICAgcHV0X29wdDZfbG9uZyhsZWFzZV90aW1lKTsKKyAgICAgIGVuZF9vcHQ2KG8pOyAKKyAgICB9CisgICAKKyAgICAvKiBoYW5kbGUgdmVuZG9yLWlkZW50aWZ5aW5nIHZlbmRvci1lbmNhcHN1bGF0ZWQgb3B0aW9ucywKKyAgICAgICBkaGNwLW9wdGlvbiA9IHZpLWVuY2FwOjEzLDE3LC4uLi4uLi4gKi8KKyAgZm9yIChvcHRfY2ZnID0gZGFlbW9uLT5kaGNwX29wdHM2OyBvcHRfY2ZnOyBvcHRfY2ZnID0gb3B0X2NmZy0+bmV4dCkKKyAgICBvcHRfY2ZnLT5mbGFncyAmPSB+REhPUFRfRU5DQVBfRE9ORTsKKyAgICAKKyAgaWYgKG9ybykKKyAgICBmb3IgKGkgPSAwOyBpIDwgIG9wdDZfbGVuKG9ybykgLSAxOyBpICs9IDIpCisgICAgICBpZiAob3B0Nl91aW50KG9ybywgaSwgMikgPT0gT1BUSU9ONl9WRU5ET1JfT1BUUykKKwlkb19lbmNhcCA9IDE7CisgIAorICBmb3IgKG9wdF9jZmcgPSBkYWVtb24tPmRoY3Bfb3B0czY7IG9wdF9jZmc7IG9wdF9jZmcgPSBvcHRfY2ZnLT5uZXh0KQorICAgIHsgCisgICAgICBpZiAob3B0X2NmZy0+ZmxhZ3MgJiBESE9QVF9SRkMzOTI1KQorCXsKKwkgIGludCBmb3VuZCA9IDA7CisJICBzdHJ1Y3QgZGhjcF9vcHQgKm9jOworCSAgCisJICBpZiAob3B0X2NmZy0+ZmxhZ3MgJiBESE9QVF9FTkNBUF9ET05FKQorCSAgICBjb250aW51ZTsKKwkgIAorCSAgZm9yIChvYyA9IGRhZW1vbi0+ZGhjcF9vcHRzNjsgb2M7IG9jID0gb2MtPm5leHQpCisJICAgIHsKKwkgICAgICBvYy0+ZmxhZ3MgJj0gfkRIT1BUX0VOQ0FQX01BVENIOworCSAgICAgIAorCSAgICAgIGlmICghKG9jLT5mbGFncyAmIERIT1BUX1JGQzM5MjUpIHx8IG9wdF9jZmctPnUuZW5jYXAgIT0gb2MtPnUuZW5jYXApCisJCWNvbnRpbnVlOworCSAgICAgIAorCSAgICAgIG9jLT5mbGFncyB8PSBESE9QVF9FTkNBUF9ET05FOworCSAgICAgIGlmIChtYXRjaF9uZXRpZChvYy0+bmV0aWQsIHRhZ2lmLCAxKSkKKwkJeworCQkgIC8qIG9wdGlvbiByZXF1ZXN0ZWQvZm9yY2VkPyAqLworCQkgIGlmICghb3JvIHx8IGRvX2VuY2FwIHx8IChvYy0+ZmxhZ3MgJiBESE9QVF9GT1JDRSkpCisJCSAgICB7CisJCSAgICAgIG9jLT5mbGFncyB8PSBESE9QVF9FTkNBUF9NQVRDSDsKKwkJICAgICAgZm91bmQgPSAxOworCQkgICAgfQorCQl9IAorCSAgICB9CisJICAKKwkgIGlmIChmb3VuZCkKKwkgICAgeyAKKwkgICAgICBvID0gbmV3X29wdDYoT1BUSU9ONl9WRU5ET1JfT1BUUyk7CSAgICAgIAorCSAgICAgIHB1dF9vcHQ2X2xvbmcob3B0X2NmZy0+dS5lbmNhcCk7CQorCSAgICAgCisJICAgICAgZm9yIChvYyA9IGRhZW1vbi0+ZGhjcF9vcHRzNjsgb2M7IG9jID0gb2MtPm5leHQpCisJCWlmIChvYy0+ZmxhZ3MgJiBESE9QVF9FTkNBUF9NQVRDSCkKKwkJICB7CisJCSAgICBvMSA9IG5ld19vcHQ2KG9jLT5vcHQpOworCQkgICAgcHV0X29wdDYob2MtPnZhbCwgb2MtPmxlbik7CisJCSAgICBlbmRfb3B0NihvMSk7CisJCSAgfQorCSAgICAgIGVuZF9vcHQ2KG8pOworCSAgICB9CisJfQorICAgIH0gICAgICAKKworCisgIGlmIChzdGF0ZS0+aG9zdG5hbWUpCisgICAgeworICAgICAgdW5zaWduZWQgY2hhciAqcDsKKyAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4oc3RhdGUtPmhvc3RuYW1lKTsKKyAgICAgIAorICAgICAgaWYgKHN0YXRlLT5zZW5kX2RvbWFpbikKKwlsZW4gKz0gc3RybGVuKHN0YXRlLT5zZW5kX2RvbWFpbikgKyAyOworCisgICAgICBvID0gbmV3X29wdDYoT1BUSU9ONl9GUUROKTsKKyAgICAgIGlmICgocCA9IGV4cGFuZChsZW4gKyAyKSkpCisJeworCSAgKihwKyspID0gc3RhdGUtPmZxZG5fZmxhZ3M7CisJICBwID0gZG9fcmZjMTAzNV9uYW1lKHAsIHN0YXRlLT5ob3N0bmFtZSwgTlVMTCk7CisJICBpZiAoc3RhdGUtPnNlbmRfZG9tYWluKQorCSAgICB7CisJICAgICAgcCA9IGRvX3JmYzEwMzVfbmFtZShwLCBzdGF0ZS0+c2VuZF9kb21haW4sIE5VTEwpOworCSAgICAgICpwID0gMDsKKwkgICAgfQorCX0KKyAgICAgIGVuZF9vcHQ2KG8pOworICAgIH0KKworCisgIC8qIGxvZ2dpbmcgKi8KKyAgaWYgKG9wdGlvbl9ib29sKE9QVF9MT0dfT1BUUykgJiYgb3JvKQorICAgIHsKKyAgICAgIGNoYXIgKnEgPSBkYWVtb24tPm5hbWVidWZmOworICAgICAgZm9yIChpID0gMDsgaSA8ICBvcHQ2X2xlbihvcm8pIC0gMTsgaSArPSAyKQorCXsKKwkgIGNoYXIgKnMgPSBvcHRpb25fc3RyaW5nKEFGX0lORVQ2LCBvcHQ2X3VpbnQob3JvLCBpLCAyKSwgTlVMTCwgMCwgTlVMTCwgMCk7CisJICBxICs9IHNucHJpbnRmKHEsIE1BWEROQU1FIC0gKHEgLSBkYWVtb24tPm5hbWVidWZmKSwKKwkJCSIlZCVzJXMlcyIsIAorCQkJb3B0Nl91aW50KG9ybywgaSwgMiksCisJCQlzdHJsZW4ocykgIT0gMCA/ICI6IiA6ICIiLAorCQkJcywgCisJCQkoaSA+IG9wdDZfbGVuKG9ybykgLSAzKSA/ICIiIDogIiwgIik7CisJICBpZiAoIGkgPiAgb3B0Nl9sZW4ob3JvKSAtIDMgfHwgKHEgLSBkYWVtb24tPm5hbWVidWZmKSA+IDQwKQorCSAgICB7CisJICAgICAgcSA9IGRhZW1vbi0+bmFtZWJ1ZmY7CisJICAgICAgbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfSU5GTywgXygiJXUgcmVxdWVzdGVkIG9wdGlvbnM6ICVzIiksIHN0YXRlLT54aWQsIGRhZW1vbi0+bmFtZWJ1ZmYpOworCSAgICB9CisJfQorICAgIH0gCisKKyAgcmV0dXJuIHRhZ2lmOworfQorIAorc3RhdGljIGludCBhZGRfbG9jYWxfYWRkcnMoc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dCkKK3sKKyAgaW50IGRvbmUgPSAwOworICAKKyAgZm9yICg7IGNvbnRleHQ7IGNvbnRleHQgPSBjb250ZXh0LT5jdXJyZW50KQorICAgIGlmICgoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX1VTRUQpICYmICFJTjZfSVNfQUREUl9VTlNQRUNJRklFRCgmY29udGV4dC0+bG9jYWw2KSkKKyAgICAgIHsKKwkvKiBzcXVhc2ggZHVwbGljYXRlcyAqLworCXN0cnVjdCBkaGNwX2NvbnRleHQgKmM7CisJZm9yIChjID0gY29udGV4dC0+Y3VycmVudDsgYzsgYyA9IGMtPmN1cnJlbnQpCisJICBpZiAoKGMtPmZsYWdzICYgQ09OVEVYVF9VU0VEKSAmJgorCSAgICAgIElONl9BUkVfQUREUl9FUVVBTCgmY29udGV4dC0+bG9jYWw2LCAmYy0+bG9jYWw2KSkKKwkgICAgYnJlYWs7CisJCisJaWYgKCFjKQorCSAgeyAKKwkgICAgZG9uZSA9IDE7CisJICAgIHB1dF9vcHQ2KCZjb250ZXh0LT5sb2NhbDYsIElONkFERFJTWik7CisJICB9CisgICAgICB9CisKKyAgcmV0dXJuIGRvbmU7Cit9CisKKworc3RhdGljIHZvaWQgZ2V0X2NvbnRleHRfdGFnKHN0cnVjdCBzdGF0ZSAqc3RhdGUsIHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQpCit7CisgIC8qIGdldCB0YWdzIGZyb20gY29udGV4dCBpZiB3ZSd2ZSBub3QgdXNlZCBpdCBiZWZvcmUgKi8KKyAgaWYgKGNvbnRleHQtPm5ldGlkLm5leHQgPT0gJmNvbnRleHQtPm5ldGlkICYmIGNvbnRleHQtPm5ldGlkLm5ldCkKKyAgICB7CisgICAgICBjb250ZXh0LT5uZXRpZC5uZXh0ID0gc3RhdGUtPmNvbnRleHRfdGFnczsKKyAgICAgIHN0YXRlLT5jb250ZXh0X3RhZ3MgPSAmY29udGV4dC0+bmV0aWQ7CisgICAgICBpZiAoIXN0YXRlLT5ob3N0bmFtZV9hdXRoKQorCXsKKwkgIHN0cnVjdCBkaGNwX25ldGlkX2xpc3QgKmlkX2xpc3Q7CisJICAKKwkgIGZvciAoaWRfbGlzdCA9IGRhZW1vbi0+ZGhjcF9pZ25vcmVfbmFtZXM7IGlkX2xpc3Q7IGlkX2xpc3QgPSBpZF9saXN0LT5uZXh0KQorCSAgICBpZiAoKCFpZF9saXN0LT5saXN0KSB8fCBtYXRjaF9uZXRpZChpZF9saXN0LT5saXN0LCAmY29udGV4dC0+bmV0aWQsIDApKQorCSAgICAgIGJyZWFrOworCSAgaWYgKGlkX2xpc3QpCisJICAgIHN0YXRlLT5ob3N0bmFtZSA9IE5VTEw7CisJfQorICAgIH0KK30gCisKKyNpZmRlZiBPUFRJT042X1BSRUZJWF9DTEFTUworc3RhdGljIHN0cnVjdCBwcmVmaXhfY2xhc3MgKnByZWZpeF9jbGFzc19mcm9tX2NvbnRleHQoc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dCkKK3sKKyAgc3RydWN0IHByZWZpeF9jbGFzcyAqcDsKKyAgc3RydWN0IGRoY3BfbmV0aWQgKnQ7CisgIAorICBmb3IgKHAgPSBkYWVtb24tPnByZWZpeF9jbGFzc2VzOyBwIDsgcCA9IHAtPm5leHQpCisgICAgZm9yICh0ID0gY29udGV4dC0+ZmlsdGVyOyB0OyB0ID0gdC0+bmV4dCkKKyAgICAgIGlmIChzdHJjbXAocC0+dGFnLm5ldCwgdC0+bmV0KSA9PSAwKQorCXJldHVybiBwOworICAKKyByZXR1cm4gTlVMTDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IGNoZWNrX2lhKHN0cnVjdCBzdGF0ZSAqc3RhdGUsIHZvaWQgKm9wdCwgdm9pZCAqKmVuZHAsIHZvaWQgKippYV9vcHRpb24pCit7CisgIHN0YXRlLT5pYV90eXBlID0gb3B0Nl90eXBlKG9wdCk7CisgICppYV9vcHRpb24gPSBOVUxMOworCisgIGlmIChzdGF0ZS0+aWFfdHlwZSAhPSBPUFRJT042X0lBX05BICYmIHN0YXRlLT5pYV90eXBlICE9IE9QVElPTjZfSUFfVEEpCisgICAgcmV0dXJuIDA7CisgIAorICBpZiAoc3RhdGUtPmlhX3R5cGUgPT0gT1BUSU9ONl9JQV9OQSAmJiBvcHQ2X2xlbihvcHQpIDwgMTIpCisgICAgcmV0dXJuIDA7CisJICAgIAorICBpZiAoc3RhdGUtPmlhX3R5cGUgPT0gT1BUSU9ONl9JQV9UQSAmJiBvcHQ2X2xlbihvcHQpIDwgNCkKKyAgICByZXR1cm4gMDsKKyAgCisgICplbmRwID0gb3B0Nl9wdHIob3B0LCBvcHQ2X2xlbihvcHQpKTsKKyAgc3RhdGUtPmlhaWQgPSBvcHQ2X3VpbnQob3B0LCAwLCA0KTsKKyAgKmlhX29wdGlvbiA9IG9wdDZfZmluZChvcHQ2X3B0cihvcHQsIHN0YXRlLT5pYV90eXBlID09IE9QVElPTjZfSUFfTkEgPyAxMiA6IDQpLCAqZW5kcCwgT1BUSU9ONl9JQUFERFIsIDI0KTsKKworICByZXR1cm4gMTsKK30KKworCitzdGF0aWMgaW50IGJ1aWxkX2lhKHN0cnVjdCBzdGF0ZSAqc3RhdGUsIGludCAqdDFjbnRyKQoreworICBpbnQgIG8gPSBuZXdfb3B0NihzdGF0ZS0+aWFfdHlwZSk7CisgCisgIHB1dF9vcHQ2X2xvbmcoc3RhdGUtPmlhaWQpOworICAqdDFjbnRyID0gMDsKKwkgICAgCisgIGlmIChzdGF0ZS0+aWFfdHlwZSA9PSBPUFRJT042X0lBX05BKQorICAgIHsKKyAgICAgIC8qIHNhdmUgcG9pbnRlciAqLworICAgICAgKnQxY250ciA9IHNhdmVfY291bnRlcigtMSk7CisgICAgICAvKiBzbyB3ZSBjYW4gZmlsbCB0aGVzZSBpbiBsYXRlciAqLworICAgICAgcHV0X29wdDZfbG9uZygwKTsKKyAgICAgIHB1dF9vcHQ2X2xvbmcoMCk7IAorICAgIH0KKworICByZXR1cm4gbzsKK30KKworc3RhdGljIHZvaWQgZW5kX2lhKGludCB0MWNudHIsIHVuc2lnbmVkIGludCBtaW5fdGltZSwgaW50IGRvX2Z1enopCit7CisgIGlmICh0MWNudHIgIT0gMCkKKyAgICB7CisgICAgICAvKiBnbyBiYWNrIGFuIGZpbGwgaW4gZmllbGRzIGluIElBX05BIG9wdGlvbiAqLworICAgICAgaW50IHNhdiA9IHNhdmVfY291bnRlcih0MWNudHIpOworICAgICAgdW5zaWduZWQgaW50IHQxLCB0MiwgZnV6eiA9IDA7CisKKyAgICAgIGlmIChkb19mdXp6KQorCXsKKwkgIGZ1enogPSByYW5kMTYoKTsKKyAgICAgIAorCSAgd2hpbGUgKGZ1enogPiAobWluX3RpbWUvMTYpKQorCSAgICBmdXp6ID0gZnV6ei8yOworCX0KKyAgICAgIAorICAgICAgdDEgPSAobWluX3RpbWUgPT0gMHhmZmZmZmZmZikgPyAweGZmZmZmZmZmIDogbWluX3RpbWUvMiAtIGZ1eno7CisgICAgICB0MiA9IChtaW5fdGltZSA9PSAweGZmZmZmZmZmKSA/IDB4ZmZmZmZmZmYgOiAoKG1pbl90aW1lLzgpKjcpIC0gZnV6ejsKKyAgICAgIHB1dF9vcHQ2X2xvbmcodDEpOworICAgICAgcHV0X29wdDZfbG9uZyh0Mik7CisgICAgICBzYXZlX2NvdW50ZXIoc2F2KTsKKyAgICB9CQorfQorCitzdGF0aWMgdm9pZCBhZGRfYWRkcmVzcyhzdHJ1Y3Qgc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0LCB1bnNpZ25lZCBpbnQgbGVhc2VfdGltZSwgdm9pZCAqaWFfb3B0aW9uLCAKKwkJCXVuc2lnbmVkIGludCAqbWluX3RpbWUsIHN0cnVjdCBpbjZfYWRkciAqYWRkciwgdGltZV90IG5vdykKK3sKKyAgdW5zaWduZWQgaW50IHZhbGlkX3RpbWUgPSAwLCBwcmVmZXJyZWRfdGltZSA9IDA7CisgIGludCBvID0gbmV3X29wdDYoT1BUSU9ONl9JQUFERFIpOworICBzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2U7CisKKyAgLyogZ2V0IGNsaWVudCByZXF1ZXN0ZWQgdGltZXMgKi8KKyAgaWYgKGlhX29wdGlvbikKKyAgICB7CisgICAgICBwcmVmZXJyZWRfdGltZSA9ICBvcHQ2X3VpbnQoaWFfb3B0aW9uLCAxNiwgNCk7CisgICAgICB2YWxpZF90aW1lID0gIG9wdDZfdWludChpYV9vcHRpb24sIDIwLCA0KTsKKyAgICB9CisKKyAgY2FsY3VsYXRlX3RpbWVzKGNvbnRleHQsIG1pbl90aW1lLCAmdmFsaWRfdGltZSwgJnByZWZlcnJlZF90aW1lLCBsZWFzZV90aW1lKTsgCisgIAorICBwdXRfb3B0NihhZGRyLCBzaXplb2YoKmFkZHIpKTsKKyAgcHV0X29wdDZfbG9uZyhwcmVmZXJyZWRfdGltZSk7CisgIHB1dF9vcHQ2X2xvbmcodmFsaWRfdGltZSk7IAkJICAgIAorICAKKyNpZmRlZiBPUFRJT042X1BSRUZJWF9DTEFTUworICBpZiAoc3RhdGUtPnNlbmRfcHJlZml4X2NsYXNzKQorICAgIHsKKyAgICAgIGludCBvMSA9IG5ld19vcHQ2KE9QVElPTjZfUFJFRklYX0NMQVNTKTsKKyAgICAgIHB1dF9vcHQ2X3Nob3J0KHN0YXRlLT5zZW5kX3ByZWZpeF9jbGFzcy0+Y2xhc3MpOworICAgICAgZW5kX29wdDYobzEpOworICAgIH0KKyNlbmRpZgorCisgIGVuZF9vcHQ2KG8pOworICAKKyAgaWYgKHN0YXRlLT5sZWFzZV9hbGxvY2F0ZSkKKyAgICB1cGRhdGVfbGVhc2VzKHN0YXRlLCBjb250ZXh0LCBhZGRyLCB2YWxpZF90aW1lLCBub3cpOworCisgIGlmICgobGVhc2UgPSBsZWFzZTZfZmluZF9ieV9hZGRyKGFkZHIsIDEyOCwgMCkpKQorICAgIGxlYXNlLT5mbGFncyB8PSBMRUFTRV9VU0VEOworCisgIC8qIGdldCB0YWdzIGZyb20gY29udGV4dCBpZiB3ZSd2ZSBub3QgdXNlZCBpdCBiZWZvcmUgKi8KKyAgaWYgKGNvbnRleHQtPm5ldGlkLm5leHQgPT0gJmNvbnRleHQtPm5ldGlkICYmIGNvbnRleHQtPm5ldGlkLm5ldCkKKyAgICB7CisgICAgICBjb250ZXh0LT5uZXRpZC5uZXh0ID0gc3RhdGUtPmNvbnRleHRfdGFnczsKKyAgICAgIHN0YXRlLT5jb250ZXh0X3RhZ3MgPSAmY29udGV4dC0+bmV0aWQ7CisgICAgICAKKyAgICAgIGlmICghc3RhdGUtPmhvc3RuYW1lX2F1dGgpCisJeworCSAgc3RydWN0IGRoY3BfbmV0aWRfbGlzdCAqaWRfbGlzdDsKKwkgIAorCSAgZm9yIChpZF9saXN0ID0gZGFlbW9uLT5kaGNwX2lnbm9yZV9uYW1lczsgaWRfbGlzdDsgaWRfbGlzdCA9IGlkX2xpc3QtPm5leHQpCisJICAgIGlmICgoIWlkX2xpc3QtPmxpc3QpIHx8IG1hdGNoX25ldGlkKGlkX2xpc3QtPmxpc3QsICZjb250ZXh0LT5uZXRpZCwgMCkpCisJICAgICAgYnJlYWs7CisJICBpZiAoaWRfbGlzdCkKKwkgICAgc3RhdGUtPmhvc3RuYW1lID0gTlVMTDsKKwl9CisgICAgfQorCisgIGxvZzZfcXVpZXQoc3RhdGUsIHN0YXRlLT5sZWFzZV9hbGxvY2F0ZSA/ICJESENQUkVQTFkiIDogIkRIQ1BBRFZFUlRJU0UiLCBhZGRyLCBzdGF0ZS0+aG9zdG5hbWUpOworCit9CisKK3N0YXRpYyB2b2lkIG1hcmtfY29udGV4dF91c2VkKHN0cnVjdCBzdGF0ZSAqc3RhdGUsIHN0cnVjdCBpbjZfYWRkciAqYWRkcikKK3sKKyAgc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dDsKKworICAvKiBNYXJrIHRoYXQgd2UgaGF2ZSBhbiBhZGRyZXNzIGZvciB0aGlzIHByZWZpeC4gKi8KKyNpZmRlZiBPUFRJT042X1BSRUZJWF9DTEFTUworICBmb3IgKGNvbnRleHQgPSBzdGF0ZS0+Y29udGV4dDsgY29udGV4dDsgY29udGV4dCA9IGNvbnRleHQtPmN1cnJlbnQpCisgICAgaWYgKGlzX3NhbWVfbmV0NihhZGRyLCAmY29udGV4dC0+c3RhcnQ2LCBjb250ZXh0LT5wcmVmaXgpICYmCisJKCFzdGF0ZS0+c2VuZF9wcmVmaXhfY2xhc3MgfHwgc3RhdGUtPnNlbmRfcHJlZml4X2NsYXNzID09IHByZWZpeF9jbGFzc19mcm9tX2NvbnRleHQoY29udGV4dCkpKQorICAgICAgY29udGV4dC0+ZmxhZ3MgfD0gQ09OVEVYVF9VU0VEOworI2Vsc2UKKyAgZm9yIChjb250ZXh0ID0gc3RhdGUtPmNvbnRleHQ7IGNvbnRleHQ7IGNvbnRleHQgPSBjb250ZXh0LT5jdXJyZW50KQorICAgIGlmIChpc19zYW1lX25ldDYoYWRkciwgJmNvbnRleHQtPnN0YXJ0NiwgY29udGV4dC0+cHJlZml4KSkKKyAgICAgIGNvbnRleHQtPmZsYWdzIHw9IENPTlRFWFRfVVNFRDsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBtYXJrX2NvbmZpZ191c2VkKHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQsIHN0cnVjdCBpbjZfYWRkciAqYWRkcikKK3sKKyAgZm9yICg7IGNvbnRleHQ7IGNvbnRleHQgPSBjb250ZXh0LT5jdXJyZW50KQorICAgIGlmIChpc19zYW1lX25ldDYoYWRkciwgJmNvbnRleHQtPnN0YXJ0NiwgY29udGV4dC0+cHJlZml4KSkKKyAgICAgIGNvbnRleHQtPmZsYWdzIHw9IENPTlRFWFRfQ09ORl9VU0VEOworfQorCisvKiBtYWtlIHN1cmUgYWRkcmVzcyBub3QgbGVhc2VkIHRvIGFub3RoZXIgQ0xJRC9JQUlEICovCitzdGF0aWMgaW50IGNoZWNrX2FkZHJlc3Moc3RydWN0IHN0YXRlICpzdGF0ZSwgc3RydWN0IGluNl9hZGRyICphZGRyKQoreyAKKyAgc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlOworCisgIGlmICghKGxlYXNlID0gbGVhc2U2X2ZpbmRfYnlfYWRkcihhZGRyLCAxMjgsIDApKSkKKyAgICByZXR1cm4gMTsKKworICBpZiAobGVhc2UtPmNsaWRfbGVuICE9IHN0YXRlLT5jbGlkX2xlbiB8fCAKKyAgICAgIG1lbWNtcChsZWFzZS0+Y2xpZCwgc3RhdGUtPmNsaWQsIHN0YXRlLT5jbGlkX2xlbikgIT0gMCB8fAorICAgICAgbGVhc2UtPmlhaWQgIT0gc3RhdGUtPmlhaWQpCisgICAgcmV0dXJuIDA7CisKKyAgcmV0dXJuIDE7Cit9CisKKworLyogQ2FsY3VsYXRlIHZhbGlkIGFuZCBwcmVmZXJyZWQgdGltZXMgdG8gc2VuZCBpbiBsZWFzZXMvcmVuZXdhbHMuIAorCisgICBJbnB1dHMgYXJlOgorCisgICAqdmFsaWRfdGltZXAsICpwcmVmZXJyZWRfdGltZXAgLSByZXF1ZXN0ZWQgdGltZXMgZnJvbSBJQUFERFIgb3B0aW9ucy4KKyAgIGNvbnRleHQtPnZhbGlkLCBjb250ZXh0LT5wcmVmZXJyZWQgLSB0aW1lcyBhc3NvY2lhdGVkIHdpdGggc3VibmV0IGFkZHJlc3Mgb24gbG9jYWwgaW50ZXJmYWNlLgorICAgY29udGV4dC0+ZmxhZ3MgfCBDT05URVhUX0RFUFJFQ0FURSAtICJkZXByZWNhdGVkIiBmbGFnIGluIGRoY3AtcmFuZ2UuCisgICBsZWFzZV90aW1lIC0gY29uZmlndXJlZCB0aW1lIGZvciBjb250ZXh0IGZvciBpbmRpdmlkdWFsIGNsaWVudC4KKyAgICptaW5fdGltZSAtIHNtYWxsZXN0IHZhbGlkIHRpbWUgc2VudCBzbyBmYXIuCisKKyAgIE91dHB1dHMgYXJlIDoKKyAgIAorICAgKnZhbGlkX3RpbWVwLCAqcHJlZmVycmVkX3RpbWVwIC0gdGltZXMgdG8gYmUgc2VuZCBpbiBJQUFERFIgb3B0aW9uLgorICAgKm1pbl90aW1lIC0gc21hbGxlc3QgdmFsaWQgdGltZSBzZW50IHNvIGZhciwgdG8gY2FsY3VsYXRlIFQxIGFuZCBUMi4KKyAgIAorICAgKi8KK3N0YXRpYyB2b2lkIGNhbGN1bGF0ZV90aW1lcyhzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0LCB1bnNpZ25lZCBpbnQgKm1pbl90aW1lLCB1bnNpZ25lZCBpbnQgKnZhbGlkX3RpbWVwLCAKKwkJCSAgICB1bnNpZ25lZCBpbnQgKnByZWZlcnJlZF90aW1lcCwgdW5zaWduZWQgaW50IGxlYXNlX3RpbWUpCit7CisgIHVuc2lnbmVkIGludCByZXFfcHJlZmVycmVkID0gKnByZWZlcnJlZF90aW1lcCwgcmVxX3ZhbGlkID0gKnZhbGlkX3RpbWVwOworICB1bnNpZ25lZCBpbnQgdmFsaWRfdGltZSA9IGxlYXNlX3RpbWUsIHByZWZlcnJlZF90aW1lID0gbGVhc2VfdGltZTsKKyAgCisgIC8qIFJGQyAzMzE1OiAiQSBzZXJ2ZXIgaWdub3JlcyB0aGUgbGlmZXRpbWVzIHNldAorICAgICBieSB0aGUgY2xpZW50IGlmIHRoZSBwcmVmZXJyZWQgbGlmZXRpbWUgaXMgZ3JlYXRlciB0aGFuIHRoZSB2YWxpZAorICAgICBsaWZldGltZS4gKi8KKyAgaWYgKHJlcV9wcmVmZXJyZWQgPD0gcmVxX3ZhbGlkKQorICAgIHsKKyAgICAgIGlmIChyZXFfcHJlZmVycmVkICE9IDApCisJeworCSAgLyogMCA9PSAibm8gcHJlZmVyZW5jZSBmcm9tIGNsaWVudCIgKi8KKwkgIGlmIChyZXFfcHJlZmVycmVkIDwgMTIwdSkKKwkgICAgcmVxX3ByZWZlcnJlZCA9IDEyMHU7IC8qIHNhbml0eSAqLworCSAgCisJICBpZiAocmVxX3ByZWZlcnJlZCA8IHByZWZlcnJlZF90aW1lKQorCSAgICBwcmVmZXJyZWRfdGltZSA9IHJlcV9wcmVmZXJyZWQ7CisJfQorICAgICAgCisgICAgICBpZiAocmVxX3ZhbGlkICE9IDApCisJLyogMCA9PSAibm8gcHJlZmVyZW5jZSBmcm9tIGNsaWVudCIgKi8KKwl7CisJICBpZiAocmVxX3ZhbGlkIDwgMTIwdSkKKwkgICAgcmVxX3ZhbGlkID0gMTIwdTsgLyogc2FuaXR5ICovCisJICAKKwkgIGlmIChyZXFfdmFsaWQgPCB2YWxpZF90aW1lKQorCSAgICB2YWxpZF90aW1lID0gcmVxX3ZhbGlkOworCX0KKyAgICB9CisKKyAgLyogZGVwcmVjYXRlIChwcmVmZXJyZWQgPT0gMCkgd2hpY2ggY29uZmlndXJlZCwgb3Igd2hlbiBsb2NhbCBhZGRyZXNzIAorICAgICBpcyBkZXByZWNhdGVkICovCisgIGlmICgoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX0RFUFJFQ0FURSkgfHwgY29udGV4dC0+cHJlZmVycmVkID09IDApCisgICAgcHJlZmVycmVkX3RpbWUgPSAwOworICAKKyAgaWYgKHByZWZlcnJlZF90aW1lICE9IDAgJiYgcHJlZmVycmVkX3RpbWUgPCAqbWluX3RpbWUpCisgICAgKm1pbl90aW1lID0gcHJlZmVycmVkX3RpbWU7CisgIAorICBpZiAodmFsaWRfdGltZSAhPSAwICYmIHZhbGlkX3RpbWUgPCAqbWluX3RpbWUpCisgICAgKm1pbl90aW1lID0gdmFsaWRfdGltZTsKKyAgCisgICp2YWxpZF90aW1lcCA9IHZhbGlkX3RpbWU7CisgICpwcmVmZXJyZWRfdGltZXAgPSBwcmVmZXJyZWRfdGltZTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX2xlYXNlcyhzdHJ1Y3Qgc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0LCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsIHVuc2lnbmVkIGludCBsZWFzZV90aW1lLCB0aW1lX3Qgbm93KQoreworICBzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2UgPSBsZWFzZTZfZmluZF9ieV9hZGRyKGFkZHIsIDEyOCwgMCk7CisjaWZkZWYgSEFWRV9TQ1JJUFQKKyAgc3RydWN0IGRoY3BfbmV0aWQgKnRhZ2lmID0gcnVuX3RhZ19pZihzdGF0ZS0+dGFncyk7CisjZW5kaWYKKworICAodm9pZCljb250ZXh0OworCisgIGlmICghbGVhc2UpCisgICAgbGVhc2UgPSBsZWFzZTZfYWxsb2NhdGUoYWRkciwgc3RhdGUtPmlhX3R5cGUgPT0gT1BUSU9ONl9JQV9OQSA/IExFQVNFX05BIDogTEVBU0VfVEEpOworICAKKyAgaWYgKGxlYXNlKQorICAgIHsKKyAgICAgIGxlYXNlX3NldF9leHBpcmVzKGxlYXNlLCBsZWFzZV90aW1lLCBub3cpOworICAgICAgbGVhc2Vfc2V0X2lhaWQobGVhc2UsIHN0YXRlLT5pYWlkKTsgCisgICAgICBsZWFzZV9zZXRfaHdhZGRyKGxlYXNlLCBzdGF0ZS0+bWFjLCBzdGF0ZS0+Y2xpZCwgc3RhdGUtPm1hY19sZW4sIHN0YXRlLT5tYWNfdHlwZSwgc3RhdGUtPmNsaWRfbGVuLCBub3csIDApOworICAgICAgbGVhc2Vfc2V0X2ludGVyZmFjZShsZWFzZSwgc3RhdGUtPmludGVyZmFjZSwgbm93KTsKKyAgICAgIGlmIChzdGF0ZS0+aG9zdG5hbWUgJiYgc3RhdGUtPmlhX3R5cGUgPT0gT1BUSU9ONl9JQV9OQSkKKwl7CisJICBjaGFyICphZGRyX2RvbWFpbiA9IGdldF9kb21haW42KGFkZHIpOworCSAgaWYgKCFzdGF0ZS0+c2VuZF9kb21haW4pCisJICAgIHN0YXRlLT5zZW5kX2RvbWFpbiA9IGFkZHJfZG9tYWluOworCSAgbGVhc2Vfc2V0X2hvc3RuYW1lKGxlYXNlLCBzdGF0ZS0+aG9zdG5hbWUsIHN0YXRlLT5ob3N0bmFtZV9hdXRoLCBhZGRyX2RvbWFpbiwgc3RhdGUtPmRvbWFpbik7CisJfQorICAgICAgCisjaWZkZWYgSEFWRV9TQ1JJUFQKKyAgICAgIGlmIChkYWVtb24tPmxlYXNlX2NoYW5nZV9jb21tYW5kKQorCXsKKwkgIHZvaWQgKmNsYXNzX29wdDsKKwkgIGxlYXNlLT5mbGFncyB8PSBMRUFTRV9DSEFOR0VEOworCSAgZnJlZShsZWFzZS0+ZXh0cmFkYXRhKTsKKwkgIGxlYXNlLT5leHRyYWRhdGEgPSBOVUxMOworCSAgbGVhc2UtPmV4dHJhZGF0YV9zaXplID0gbGVhc2UtPmV4dHJhZGF0YV9sZW4gPSAwOworCSAgbGVhc2UtPnZlbmRvcmNsYXNzX2NvdW50ID0gMDsgCisJICAKKwkgIGlmICgoY2xhc3Nfb3B0ID0gb3B0Nl9maW5kKHN0YXRlLT5wYWNrZXRfb3B0aW9ucywgc3RhdGUtPmVuZCwgT1BUSU9ONl9WRU5ET1JfQ0xBU1MsIDQpKSkKKwkgICAgeworCSAgICAgIHZvaWQgKmVuY19vcHQsICplbmNfZW5kID0gb3B0Nl9wdHIoY2xhc3Nfb3B0LCBvcHQ2X2xlbihjbGFzc19vcHQpKTsKKwkgICAgICBsZWFzZS0+dmVuZG9yY2xhc3NfY291bnQrKzsKKwkgICAgICAvKiBzZW5kIGVudGVycHJpc2UgbnVtYmVyIGZpcnN0ICAqLworCSAgICAgIHNwcmludGYoZGFlbW9uLT5kaGNwX2J1ZmYyLCAiJXUiLCBvcHQ2X3VpbnQoY2xhc3Nfb3B0LCAwLCA0KSk7CisJICAgICAgbGVhc2VfYWRkX2V4dHJhZGF0YShsZWFzZSwgKHVuc2lnbmVkIGNoYXIgKilkYWVtb24tPmRoY3BfYnVmZjIsIHN0cmxlbihkYWVtb24tPmRoY3BfYnVmZjIpLCAwKTsKKwkgICAgICAKKwkgICAgICBpZiAob3B0Nl9sZW4oY2xhc3Nfb3B0KSA+PSA2KSAKKwkJZm9yIChlbmNfb3B0ID0gb3B0Nl9wdHIoY2xhc3Nfb3B0LCA0KTsgZW5jX29wdDsgZW5jX29wdCA9IG9wdDZfbmV4dChlbmNfb3B0LCBlbmNfZW5kKSkKKwkJICB7CisJCSAgICBsZWFzZS0+dmVuZG9yY2xhc3NfY291bnQrKzsKKwkJICAgIGxlYXNlX2FkZF9leHRyYWRhdGEobGVhc2UsIG9wdDZfcHRyKGVuY19vcHQsIDApLCBvcHQ2X2xlbihlbmNfb3B0KSwgMCk7CisJCSAgfQorCSAgICB9CisJICAKKwkgIGxlYXNlX2FkZF9leHRyYWRhdGEobGVhc2UsICh1bnNpZ25lZCBjaGFyICopc3RhdGUtPmNsaWVudF9ob3N0bmFtZSwgCisJCQkgICAgICBzdGF0ZS0+Y2xpZW50X2hvc3RuYW1lID8gc3RybGVuKHN0YXRlLT5jbGllbnRfaG9zdG5hbWUpIDogMCwgMCk7CQkJCQorCSAgCisJICAvKiBzcGFjZS1jb25jYXQgdGFnIHNldCAqLworCSAgaWYgKCF0YWdpZiAmJiAhY29udGV4dC0+bmV0aWQubmV0KQorCSAgICBsZWFzZV9hZGRfZXh0cmFkYXRhKGxlYXNlLCBOVUxMLCAwLCAwKTsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGlmIChjb250ZXh0LT5uZXRpZC5uZXQpCisJCWxlYXNlX2FkZF9leHRyYWRhdGEobGVhc2UsICh1bnNpZ25lZCBjaGFyICopY29udGV4dC0+bmV0aWQubmV0LCBzdHJsZW4oY29udGV4dC0+bmV0aWQubmV0KSwgdGFnaWYgPyAnICcgOiAwKTsKKwkgICAgICAKKwkgICAgICBpZiAodGFnaWYpCisJCXsKKwkJICBzdHJ1Y3QgZGhjcF9uZXRpZCAqbjsKKwkJICBmb3IgKG4gPSB0YWdpZjsgbjsgbiA9IG4tPm5leHQpCisJCSAgICB7CisJCSAgICAgIHN0cnVjdCBkaGNwX25ldGlkICpuMTsKKwkJICAgICAgLyoga2lsbCBkdXBlcyAqLworCQkgICAgICBmb3IgKG4xID0gbi0+bmV4dDsgbjE7IG4xID0gbjEtPm5leHQpCisJCQlpZiAoc3RyY21wKG4tPm5ldCwgbjEtPm5ldCkgPT0gMCkKKwkJCSAgYnJlYWs7CisJCSAgICAgIGlmICghbjEpCisJCQlsZWFzZV9hZGRfZXh0cmFkYXRhKGxlYXNlLCAodW5zaWduZWQgY2hhciAqKW4tPm5ldCwgc3RybGVuKG4tPm5ldCksIG4tPm5leHQgPyAnICcgOiAwKTsgCisJCSAgICB9CisJCX0KKwkgICAgfQorCSAgCisJICBpZiAoc3RhdGUtPmxpbmtfYWRkcmVzcykKKwkgICAgaW5ldF9udG9wKEFGX0lORVQ2LCBzdGF0ZS0+bGlua19hZGRyZXNzLCBkYWVtb24tPmFkZHJidWZmLCBBRERSU1RSTEVOKTsKKwkgIAorCSAgbGVhc2VfYWRkX2V4dHJhZGF0YShsZWFzZSwgKHVuc2lnbmVkIGNoYXIgKilkYWVtb24tPmFkZHJidWZmLCBzdGF0ZS0+bGlua19hZGRyZXNzID8gc3RybGVuKGRhZW1vbi0+YWRkcmJ1ZmYpIDogMCwgMCk7CisJICAKKwkgIGlmICgoY2xhc3Nfb3B0ID0gb3B0Nl9maW5kKHN0YXRlLT5wYWNrZXRfb3B0aW9ucywgc3RhdGUtPmVuZCwgT1BUSU9ONl9VU0VSX0NMQVNTLCAyKSkpCisJICAgIHsKKwkgICAgICB2b2lkICplbmNfb3B0LCAqZW5jX2VuZCA9IG9wdDZfcHRyKGNsYXNzX29wdCwgb3B0Nl9sZW4oY2xhc3Nfb3B0KSk7CisJICAgICAgZm9yIChlbmNfb3B0ID0gb3B0Nl9wdHIoY2xhc3Nfb3B0LCAwKTsgZW5jX29wdDsgZW5jX29wdCA9IG9wdDZfbmV4dChlbmNfb3B0LCBlbmNfZW5kKSkKKwkJbGVhc2VfYWRkX2V4dHJhZGF0YShsZWFzZSwgb3B0Nl9wdHIoZW5jX29wdCwgMCksIG9wdDZfbGVuKGVuY19vcHQpLCAwKTsKKwkgICAgfQorCX0KKyNlbmRpZgkKKyAgICAgIAorICAgIH0KK30KKwkJCSAgCisJCQkKKwkKK3N0YXRpYyB2b2lkIGxvZzZfb3B0cyhpbnQgbmVzdCwgdW5zaWduZWQgaW50IHhpZCwgdm9pZCAqc3RhcnRfb3B0cywgdm9pZCAqZW5kX29wdHMpCit7CisgIHZvaWQgKm9wdDsKKyAgY2hhciAqZGVzYyA9IG5lc3QgPyAibmVzdCIgOiAic2VudCI7CisgIAorICBpZiAoIW9wdGlvbl9ib29sKE9QVF9MT0dfT1BUUykgfHwgc3RhcnRfb3B0cyA9PSBlbmRfb3B0cykKKyAgICByZXR1cm47CisgIAorICBmb3IgKG9wdCA9IHN0YXJ0X29wdHM7IG9wdDsgb3B0ID0gb3B0Nl9uZXh0KG9wdCwgZW5kX29wdHMpKQorICAgIHsKKyAgICAgIGludCB0eXBlID0gb3B0Nl90eXBlKG9wdCk7CisgICAgICB2b2lkICppYV9vcHRpb25zID0gTlVMTDsKKyAgICAgIGNoYXIgKm9wdG5hbWU7CisgICAgICAKKyAgICAgIGlmICh0eXBlID09IE9QVElPTjZfSUFfTkEpCisJeworCSAgc3ByaW50ZihkYWVtb24tPm5hbWVidWZmLCAiSUFJRD0ldSBUMT0ldSBUMj0ldSIsCisJCSAgb3B0Nl91aW50KG9wdCwgMCwgNCksIG9wdDZfdWludChvcHQsIDQsIDQpLCBvcHQ2X3VpbnQob3B0LCA4LCA0KSk7CisJICBvcHRuYW1lID0gImlhLW5hIjsKKwkgIGlhX29wdGlvbnMgPSBvcHQ2X3B0cihvcHQsIDEyKTsKKwl9CisgICAgICBlbHNlIGlmICh0eXBlID09IE9QVElPTjZfSUFfVEEpCisJeworCSAgc3ByaW50ZihkYWVtb24tPm5hbWVidWZmLCAiSUFJRD0ldSIsIG9wdDZfdWludChvcHQsIDAsIDQpKTsKKwkgIG9wdG5hbWUgPSAiaWEtdGEiOworCSAgaWFfb3B0aW9ucyA9IG9wdDZfcHRyKG9wdCwgNCk7CisJfQorICAgICAgZWxzZSBpZiAodHlwZSA9PSBPUFRJT042X0lBQUREUikKKwl7CisJICBpbmV0X250b3AoQUZfSU5FVDYsIG9wdDZfcHRyKG9wdCwgMCksIGRhZW1vbi0+YWRkcmJ1ZmYsIEFERFJTVFJMRU4pOworCSAgc3ByaW50ZihkYWVtb24tPm5hbWVidWZmLCAiJXMgUEw9JXUgVkw9JXUiLCAKKwkJICBkYWVtb24tPmFkZHJidWZmLCBvcHQ2X3VpbnQob3B0LCAxNiwgNCksIG9wdDZfdWludChvcHQsIDIwLCA0KSk7CisJICBvcHRuYW1lID0gImlhYWRkciI7CisJICBpYV9vcHRpb25zID0gb3B0Nl9wdHIob3B0LCAyNCk7CisJfQorI2lmZGVmIE9QVElPTjZfUFJFRklYX0NMQVNTCisgICAgICBlbHNlIGlmICh0eXBlID09IE9QVElPTjZfUFJFRklYX0NMQVNTKQorCXsKKwkgIG9wdG5hbWUgPSAicHJlZml4LWNsYXNzIjsKKwkgIHNwcmludGYoZGFlbW9uLT5uYW1lYnVmZiwgImNsYXNzPSV1Iiwgb3B0Nl91aW50KG9wdCwgMCwgMikpOworCX0KKyNlbmRpZgorICAgICAgZWxzZSBpZiAodHlwZSA9PSBPUFRJT042X1NUQVRVU19DT0RFKQorCXsKKwkgIGludCBsZW4gPSBzcHJpbnRmKGRhZW1vbi0+bmFtZWJ1ZmYsICIldSAiLCBvcHQ2X3VpbnQob3B0LCAwLCAyKSk7CisJICBtZW1jcHkoZGFlbW9uLT5uYW1lYnVmZiArIGxlbiwgb3B0Nl9wdHIob3B0LCAyKSwgb3B0Nl9sZW4ob3B0KS0yKTsKKwkgIGRhZW1vbi0+bmFtZWJ1ZmZbbGVuICsgb3B0Nl9sZW4ob3B0KSAtIDJdID0gMDsKKwkgIG9wdG5hbWUgPSAic3RhdHVzIjsKKwl9CisgICAgICBlbHNlCisJeworCSAgLyogYWNjb3VudCBmb3IgZmxhZyBieXRlIG9uIEZRRE4gKi8KKwkgIGludCBvZmZzZXQgPSB0eXBlID09IE9QVElPTjZfRlFETiA/IDEgOiAwOworCSAgb3B0bmFtZSA9IG9wdGlvbl9zdHJpbmcoQUZfSU5FVDYsIHR5cGUsIG9wdDZfcHRyKG9wdCwgb2Zmc2V0KSwgb3B0Nl9sZW4ob3B0KSAtIG9mZnNldCwgZGFlbW9uLT5uYW1lYnVmZiwgTUFYRE5BTUUpOworCX0KKyAgICAgIAorICAgICAgbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfSU5GTywgIiV1ICVzIHNpemU6JTNkIG9wdGlvbjolM2QgJXMgICVzIiwgCisJCXhpZCwgZGVzYywgb3B0Nl9sZW4ob3B0KSwgdHlwZSwgb3B0bmFtZSwgZGFlbW9uLT5uYW1lYnVmZik7CisgICAgICAKKyAgICAgIGlmIChpYV9vcHRpb25zKQorCWxvZzZfb3B0cygxLCB4aWQsIGlhX29wdGlvbnMsIG9wdDZfcHRyKG9wdCwgb3B0Nl9sZW4ob3B0KSkpOworICAgIH0KK30JCSAKKyAKK3N0YXRpYyB2b2lkIGxvZzZfcXVpZXQoc3RydWN0IHN0YXRlICpzdGF0ZSwgY2hhciAqdHlwZSwgc3RydWN0IGluNl9hZGRyICphZGRyLCBjaGFyICpzdHJpbmcpCit7CisgIGlmIChvcHRpb25fYm9vbChPUFRfTE9HX09QVFMpIHx8ICFvcHRpb25fYm9vbChPUFRfUVVJRVRfREhDUDYpKQorICAgIGxvZzZfcGFja2V0KHN0YXRlLCB0eXBlLCBhZGRyLCBzdHJpbmcpOworfQorCitzdGF0aWMgdm9pZCBsb2c2X3BhY2tldChzdHJ1Y3Qgc3RhdGUgKnN0YXRlLCBjaGFyICp0eXBlLCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsIGNoYXIgKnN0cmluZykKK3sKKyAgaW50IGNsaWRfbGVuID0gc3RhdGUtPmNsaWRfbGVuOworCisgIC8qIGF2b2lkIGJ1ZmZlciBvdmVyZmxvdyAqLworICBpZiAoY2xpZF9sZW4gPiAxMDApCisgICAgY2xpZF9sZW4gPSAxMDA7CisgIAorICBwcmludF9tYWMoZGFlbW9uLT5uYW1lYnVmZiwgc3RhdGUtPmNsaWQsIGNsaWRfbGVuKTsKKworICBpZiAoYWRkcikKKyAgICB7CisgICAgICBpbmV0X250b3AoQUZfSU5FVDYsIGFkZHIsIGRhZW1vbi0+ZGhjcF9idWZmMiwgREhDUF9CVUZGX1NaIC0gMSk7CisgICAgICBzdHJjYXQoZGFlbW9uLT5kaGNwX2J1ZmYyLCAiICIpOworICAgIH0KKyAgZWxzZQorICAgIGRhZW1vbi0+ZGhjcF9idWZmMlswXSA9IDA7CisKKyAgaWYob3B0aW9uX2Jvb2woT1BUX0xPR19PUFRTKSkKKyAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19JTkZPLCAiJXUgJXMoJXMpICVzJXMgJXMiLAorCSAgICAgIHN0YXRlLT54aWQsIAorCSAgICAgIHR5cGUsCisJICAgICAgc3RhdGUtPmlmYWNlX25hbWUsIAorCSAgICAgIGRhZW1vbi0+ZGhjcF9idWZmMiwKKwkgICAgICBkYWVtb24tPm5hbWVidWZmLAorCSAgICAgIHN0cmluZyA/IHN0cmluZyA6ICIiKTsKKyAgZWxzZQorICAgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX0lORk8sICIlcyglcykgJXMlcyAlcyIsCisJICAgICAgdHlwZSwKKwkgICAgICBzdGF0ZS0+aWZhY2VfbmFtZSwgCisJICAgICAgZGFlbW9uLT5kaGNwX2J1ZmYyLAorCSAgICAgIGRhZW1vbi0+bmFtZWJ1ZmYsCisJICAgICAgc3RyaW5nID8gc3RyaW5nIDogIiIpOworfQorCitzdGF0aWMgdm9pZCAqb3B0Nl9maW5kICh2b2lkICpvcHRzLCB2b2lkICplbmQsIHVuc2lnbmVkIGludCBzZWFyY2gsIHVuc2lnbmVkIGludCBtaW5zaXplKQoreworICB1MTYgb3B0LCBvcHRfbGVuOworICB2b2lkICpzdGFydDsKKyAgCisgIGlmICghb3B0cykKKyAgICByZXR1cm4gTlVMTDsKKyAgICAKKyAgd2hpbGUgKDEpCisgICAgeworICAgICAgaWYgKGVuZCAtIG9wdHMgPCA0KSAKKwlyZXR1cm4gTlVMTDsKKyAgICAgIAorICAgICAgc3RhcnQgPSBvcHRzOworICAgICAgR0VUU0hPUlQob3B0LCBvcHRzKTsKKyAgICAgIEdFVFNIT1JUKG9wdF9sZW4sIG9wdHMpOworICAgICAgCisgICAgICBpZiAob3B0X2xlbiA+IChlbmQgLSBvcHRzKSkKKwlyZXR1cm4gTlVMTDsKKyAgICAgIAorICAgICAgaWYgKG9wdCA9PSBzZWFyY2ggJiYgKG9wdF9sZW4gPj0gbWluc2l6ZSkpCisJcmV0dXJuIHN0YXJ0OworICAgICAgCisgICAgICBvcHRzICs9IG9wdF9sZW47CisgICAgfQorfQorCitzdGF0aWMgdm9pZCAqb3B0Nl9uZXh0KHZvaWQgKm9wdHMsIHZvaWQgKmVuZCkKK3sKKyAgdTE2IG9wdF9sZW47CisgIAorICBpZiAoZW5kIC0gb3B0cyA8IDQpIAorICAgIHJldHVybiBOVUxMOworICAKKyAgb3B0cyArPSAyOworICBHRVRTSE9SVChvcHRfbGVuLCBvcHRzKTsKKyAgCisgIGlmIChvcHRfbGVuID49IChlbmQgLSBvcHRzKSkKKyAgICByZXR1cm4gTlVMTDsKKyAgCisgIHJldHVybiBvcHRzICsgb3B0X2xlbjsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBvcHQ2X3VpbnQodW5zaWduZWQgY2hhciAqb3B0LCBpbnQgb2Zmc2V0LCBpbnQgc2l6ZSkKK3sKKyAgLyogdGhpcyB3b3JyaWVzIGFib3V0IHVuYWxpZ25lZCBkYXRhIGFuZCBieXRlIG9yZGVyICovCisgIHVuc2lnbmVkIGludCByZXQgPSAwOworICBpbnQgaTsKKyAgdW5zaWduZWQgY2hhciAqcCA9IG9wdDZfcHRyKG9wdCwgb2Zmc2V0KTsKKyAgCisgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCisgICAgcmV0ID0gKHJldCA8PCA4KSB8ICpwKys7CisgIAorICByZXR1cm4gcmV0OworfSAKKwordm9pZCByZWxheV91cHN0cmVhbTYoc3RydWN0IGRoY3BfcmVsYXkgKnJlbGF5LCBzc2l6ZV90IHN6LCAKKwkJICAgICBzdHJ1Y3QgaW42X2FkZHIgKnBlZXJfYWRkcmVzcywgdTMyIHNjb3BlX2lkLCB0aW1lX3Qgbm93KQoreworICAvKiAtPmxvY2FsIGlzIHNhbWUgdmFsdWUgZm9yIGFsbCByZWxheXMgb24gLT5jdXJyZW50IGNoYWluICovCisgIAorICBzdHJ1Y3QgYWxsX2FkZHIgZnJvbTsKKyAgdW5zaWduZWQgY2hhciAqaGVhZGVyOworICB1bnNpZ25lZCBjaGFyICppbmJ1ZmYgPSBkYWVtb24tPmRoY3BfcGFja2V0Lmlvdl9iYXNlOworICBpbnQgbXNnX3R5cGUgPSAqaW5idWZmOworICBpbnQgaG9wY291bnQ7CisgIHN0cnVjdCBpbjZfYWRkciBtdWx0aWNhc3Q7CisgIHVuc2lnbmVkIGludCBtYWNsZW4sIG1hY3R5cGU7CisgIHVuc2lnbmVkIGNoYXIgbWFjW0RIQ1BfQ0hBRERSX01BWF07CisKKyAgaW5ldF9wdG9uKEFGX0lORVQ2LCBBTExfU0VSVkVSUywgJm11bHRpY2FzdCk7CisgIGdldF9jbGllbnRfbWFjKHBlZXJfYWRkcmVzcywgc2NvcGVfaWQsIG1hYywgJm1hY2xlbiwgJm1hY3R5cGUsIG5vdyk7CisKKyAgLyogc291cmNlIGFkZHJlc3MgPT0gcmVsYXkgYWRkcmVzcyAqLworICBmcm9tLmFkZHIuYWRkcjYgPSByZWxheS0+bG9jYWwuYWRkci5hZGRyNjsKKyAgICAKKyAgLyogR2V0IGhvcCBjb3VudCBmcm9tIG5lc3RlZCByZWxheWVkIG1lc3NhZ2UgKi8gCisgIGlmIChtc2dfdHlwZSA9PSBESENQNlJFTEFZRk9SVykKKyAgICBob3Bjb3VudCA9ICooKHVuc2lnbmVkIGNoYXIgKilpbmJ1ZmYrMSkgKyAxOworICBlbHNlCisgICAgaG9wY291bnQgPSAwOworCisgIC8qIFJGQyAzMzE1IEhPUF9DT1VOVF9MSU1JVCAqLworICBpZiAoaG9wY291bnQgPiAzMikKKyAgICByZXR1cm47CisKKyAgcmVzZXRfY291bnRlcigpOworCisgIGlmICgoaGVhZGVyID0gcHV0X29wdDYoTlVMTCwgMzQpKSkKKyAgICB7CisgICAgICBpbnQgbzsKKworICAgICAgaGVhZGVyWzBdID0gREhDUDZSRUxBWUZPUlc7CisgICAgICBoZWFkZXJbMV0gPSBob3Bjb3VudDsKKyAgICAgIG1lbWNweSgmaGVhZGVyWzJdLCAgJnJlbGF5LT5sb2NhbC5hZGRyLmFkZHI2LCBJTjZBRERSU1opOworICAgICAgbWVtY3B5KCZoZWFkZXJbMThdLCBwZWVyX2FkZHJlc3MsIElONkFERFJTWik7CisgCisgICAgICAvKiBSRkMtNjkzOSAqLworICAgICAgaWYgKG1hY2xlbiAhPSAwKQorCXsKKwkgIG8gPSBuZXdfb3B0NihPUFRJT042X0NMSUVOVF9NQUMpOworCSAgcHV0X29wdDZfc2hvcnQobWFjdHlwZSk7CisJICBwdXRfb3B0NihtYWMsIG1hY2xlbik7CisJICBlbmRfb3B0NihvKTsKKwl9CisgICAgICAKKyAgICAgIG8gPSBuZXdfb3B0NihPUFRJT042X1JFTEFZX01TRyk7CisgICAgICBwdXRfb3B0NihpbmJ1ZmYsIHN6KTsKKyAgICAgIGVuZF9vcHQ2KG8pOworICAgICAgCisgICAgICBmb3IgKDsgcmVsYXk7IHJlbGF5ID0gcmVsYXktPmN1cnJlbnQpCisJeworCSAgdW5pb24gbXlzb2NrYWRkciB0bzsKKwkgIAorCSAgdG8uc2Euc2FfZmFtaWx5ID0gQUZfSU5FVDY7CisJICB0by5pbjYuc2luNl9hZGRyID0gcmVsYXktPnNlcnZlci5hZGRyLmFkZHI2OworCSAgdG8uaW42LnNpbjZfcG9ydCA9IGh0b25zKERIQ1BWNl9TRVJWRVJfUE9SVCk7CisJICB0by5pbjYuc2luNl9mbG93aW5mbyA9IDA7CisJICB0by5pbjYuc2luNl9zY29wZV9pZCA9IDA7CisKKwkgIGlmIChJTjZfQVJFX0FERFJfRVFVQUwoJnJlbGF5LT5zZXJ2ZXIuYWRkci5hZGRyNiwgJm11bHRpY2FzdCkpCisJICAgIHsKKwkgICAgICBpbnQgbXVsdGljYXN0X2lmYWNlOworCSAgICAgIGlmICghcmVsYXktPmludGVyZmFjZSB8fCBzdHJjaHIocmVsYXktPmludGVyZmFjZSwgJyonKSB8fAorCQkgIChtdWx0aWNhc3RfaWZhY2UgPSBpZl9uYW1ldG9pbmRleChyZWxheS0+aW50ZXJmYWNlKSkgPT0gMCB8fAorCQkgIHNldHNvY2tvcHQoZGFlbW9uLT5kaGNwNmZkLCBJUFBST1RPX0lQVjYsIElQVjZfTVVMVElDQVNUX0lGLCAmbXVsdGljYXN0X2lmYWNlLCBzaXplb2YobXVsdGljYXN0X2lmYWNlKSkgPT0gLTEpCisJCW15X3N5c2xvZyhNU19ESENQIHwgTE9HX0VSUiwgXygiQ2Fubm90IG11bHRpY2FzdCB0byBESENQdjYgc2VydmVyIHdpdGhvdXQgY29ycmVjdCBpbnRlcmZhY2UiKSk7CisJICAgIH0KKwkJCisJICBzZW5kX2Zyb20oZGFlbW9uLT5kaGNwNmZkLCAwLCBkYWVtb24tPm91dHBhY2tldC5pb3ZfYmFzZSwgc2F2ZV9jb3VudGVyKC0xKSwgJnRvLCAmZnJvbSwgMCk7CisJICAKKwkgIGlmIChvcHRpb25fYm9vbChPUFRfTE9HX09QVFMpKQorCSAgICB7CisJICAgICAgaW5ldF9udG9wKEFGX0lORVQ2LCAmcmVsYXktPmxvY2FsLCBkYWVtb24tPmFkZHJidWZmLCBBRERSU1RSTEVOKTsKKwkgICAgICBpbmV0X250b3AoQUZfSU5FVDYsICZyZWxheS0+c2VydmVyLCBkYWVtb24tPm5hbWVidWZmLCBBRERSU1RSTEVOKTsKKwkgICAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19JTkZPLCBfKCJESENQIHJlbGF5ICVzIC0+ICVzIiksIGRhZW1vbi0+YWRkcmJ1ZmYsIGRhZW1vbi0+bmFtZWJ1ZmYpOworCSAgICB9CisKKwkgIC8qIFNhdmUgdGhpcyBmb3IgcmVwbGllcyAqLworCSAgcmVsYXktPmlmYWNlX2luZGV4ID0gc2NvcGVfaWQ7CisJfQorICAgIH0KK30KKwordW5zaWduZWQgc2hvcnQgcmVsYXlfcmVwbHk2KHN0cnVjdCBzb2NrYWRkcl9pbjYgKnBlZXIsIHNzaXplX3Qgc3osIGNoYXIgKmFycml2YWxfaW50ZXJmYWNlKQoreworICBzdHJ1Y3QgZGhjcF9yZWxheSAqcmVsYXk7CisgIHN0cnVjdCBpbjZfYWRkciBsaW5rOworICB1bnNpZ25lZCBjaGFyICppbmJ1ZmYgPSBkYWVtb24tPmRoY3BfcGFja2V0Lmlvdl9iYXNlOworICAKKyAgLyogbXVzdCBoYXZlIGF0IGxlYXN0IG1zZ190eXBlK2hvcGNvdW50K2xpbmtfYWRkcmVzcytwZWVyX2FkZHJlc3MrbWluaW1hbCBzaXplIG9wdGlvbgorICAgICB3aGljaCBpcyAgICAgICAgICAgICAgIDEgICArICAgIDEgICArICAgIDE2ICAgICAgKyAgICAgMTYgICAgICsgMiArIDIgPSAzOCAqLworICAKKyAgaWYgKHN6IDwgMzggfHwgKmluYnVmZiAhPSBESENQNlJFTEFZUkVQTCkKKyAgICByZXR1cm4gMDsKKyAgCisgIG1lbWNweSgmbGluaywgJmluYnVmZlsyXSwgSU42QUREUlNaKTsgCisgIAorICBmb3IgKHJlbGF5ID0gZGFlbW9uLT5yZWxheTY7IHJlbGF5OyByZWxheSA9IHJlbGF5LT5uZXh0KQorICAgIGlmIChJTjZfQVJFX0FERFJfRVFVQUwoJmxpbmssICZyZWxheS0+bG9jYWwuYWRkci5hZGRyNikgJiYKKwkoIXJlbGF5LT5pbnRlcmZhY2UgfHwgd2lsZGNhcmRfbWF0Y2gocmVsYXktPmludGVyZmFjZSwgYXJyaXZhbF9pbnRlcmZhY2UpKSkKKyAgICAgIGJyZWFrOworICAgICAgCisgIHJlc2V0X2NvdW50ZXIoKTsKKworICBpZiAocmVsYXkpCisgICAgeworICAgICAgdm9pZCAqb3B0LCAqb3B0cyA9IGluYnVmZiArIDM0OworICAgICAgdm9pZCAqZW5kID0gaW5idWZmICsgc3o7CisgICAgICBmb3IgKG9wdCA9IG9wdHM7IG9wdDsgb3B0ID0gb3B0Nl9uZXh0KG9wdCwgZW5kKSkKKwlpZiAob3B0Nl90eXBlKG9wdCkgPT0gT1BUSU9ONl9SRUxBWV9NU0cgJiYgb3B0Nl9sZW4ob3B0KSA+IDApCisJICB7CisJICAgIGludCBlbmNhcF90eXBlID0gKigodW5zaWduZWQgY2hhciAqKW9wdDZfcHRyKG9wdCwgMCkpOworCSAgICBwdXRfb3B0NihvcHQ2X3B0cihvcHQsIDApLCBvcHQ2X2xlbihvcHQpKTsKKwkgICAgbWVtY3B5KCZwZWVyLT5zaW42X2FkZHIsICZpbmJ1ZmZbMThdLCBJTjZBRERSU1opOyAKKwkgICAgcGVlci0+c2luNl9zY29wZV9pZCA9IHJlbGF5LT5pZmFjZV9pbmRleDsKKwkgICAgcmV0dXJuIGVuY2FwX3R5cGUgPT0gREhDUDZSRUxBWVJFUEwgPyBESENQVjZfU0VSVkVSX1BPUlQgOiBESENQVjZfQ0xJRU5UX1BPUlQ7CisJICB9CisgICAgfQorCisgIHJldHVybiAwOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9ycmZpbHRlci5jIGIvc3JjL3JyZmlsdGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZmZjM0NwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9ycmZpbHRlci5jCkBAIC0wLDAgKzEsMzM5IEBACisvKiBkbnNtYXNxIGlzIENvcHlyaWdodCAoYykgMjAwMC0yMDE3IFNpbW9uIEtlbGxleQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMgZGF0ZWQgMjkgSnVuZSwgMjAwNy4KKyAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworLyogQ29kZSB0byBzYWZlbHkgcmVtb3ZlIFJScyBmcm9tIGFuIEROUyBhbnN3ZXIgKi8gCisKKyNpbmNsdWRlICJkbnNtYXNxLmgiCisKKy8qIEdvIHRocm91Z2ggYSBkb21haW4gbmFtZSwgZmluZCAicG9pbnRlcnMiIGFuZCBmaXggdGhlbSB1cCBiYXNlZCBvbiBob3cgbWFueSBieXRlcworICAgd2UndmUgY2hvcHBlZCBvdXQgb2YgdGhlIHBhY2tldCwgb3IgY2hlY2sgdGhleSBkb24ndCBwb2ludCBpbnRvIGFuIGVsaWRlZCBwYXJ0LiAgKi8KK3N0YXRpYyBpbnQgY2hlY2tfbmFtZSh1bnNpZ25lZCBjaGFyICoqbmFtZXAsIHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIsIHNpemVfdCBwbGVuLCBpbnQgZml4dXAsIHVuc2lnbmVkIGNoYXIgKipycnMsIGludCBycl9jb3VudCkKK3sKKyAgdW5zaWduZWQgY2hhciAqYW5zcCA9ICpuYW1lcDsKKworICB3aGlsZSgxKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGludCBsYWJlbF90eXBlOworICAgICAgCisgICAgICBpZiAoIUNIRUNLX0xFTihoZWFkZXIsIGFuc3AsIHBsZW4sIDEpKQorCXJldHVybiAwOworICAgICAgCisgICAgICBsYWJlbF90eXBlID0gKCphbnNwKSAmIDB4YzA7CisKKyAgICAgIGlmIChsYWJlbF90eXBlID09IDB4YzApCisJeworCSAgLyogcG9pbnRlciBmb3IgY29tcHJlc3Npb24uICovCisJICB1bnNpZ25lZCBpbnQgb2Zmc2V0OworCSAgaW50IGk7CisJICB1bnNpZ25lZCBjaGFyICpwOworCSAgCisJICBpZiAoIUNIRUNLX0xFTihoZWFkZXIsIGFuc3AsIHBsZW4sIDIpKQorCSAgICByZXR1cm4gMDsKKworCSAgb2Zmc2V0ID0gKCgqYW5zcCsrKSAmIDB4M2YpIDw8IDg7CisJICBvZmZzZXQgfD0gKmFuc3ArKzsKKworCSAgcCA9IG9mZnNldCArICh1bnNpZ25lZCBjaGFyICopaGVhZGVyOworCSAgCisJICBmb3IgKGkgPSAwOyBpIDwgcnJfY291bnQ7IGkrKykKKwkgICAgaWYgKHAgPCBycnNbaV0pCisJICAgICAgYnJlYWs7CisJICAgIGVsc2UKKwkgICAgICBpZiAoaSAmIDEpCisJCW9mZnNldCAtPSBycnNbaV0gLSBycnNbaS0xXTsKKworCSAgLyogZG9lcyB0aGUgcG9pbnRlciBlbmQgdXAgaW4gYW4gZWxpZGVkIFJSPyAqLworCSAgaWYgKGkgJiAxKQorCSAgICByZXR1cm4gMDsKKworCSAgLyogTm8sIHNjYWxlIHRoZSBwb2ludGVyICovCisJICBpZiAoZml4dXApCisJICAgIHsKKwkgICAgICBhbnNwIC09IDI7CisJICAgICAgKmFuc3ArKyA9IChvZmZzZXQgPj4gOCkgfCAweGMwOworCSAgICAgICphbnNwKysgPSBvZmZzZXQgJiAweGZmOworCSAgICB9CisJICBicmVhazsKKwl9CisgICAgICBlbHNlIGlmIChsYWJlbF90eXBlID09IDB4ODApCisJcmV0dXJuIDA7IC8qIHJlc2VydmVkICovCisgICAgICBlbHNlIGlmIChsYWJlbF90eXBlID09IDB4NDApCisJeworCSAgLyogRXh0ZW5kZWQgbGFiZWwgdHlwZSAqLworCSAgdW5zaWduZWQgaW50IGNvdW50OworCSAgCisJICBpZiAoIUNIRUNLX0xFTihoZWFkZXIsIGFuc3AsIHBsZW4sIDIpKQorCSAgICByZXR1cm4gMDsKKwkgIAorCSAgaWYgKCgoKmFuc3ArKykgJiAweDNmKSAhPSAxKQorCSAgICByZXR1cm4gMDsgLyogd2Ugb25seSB1bmRlcnN0YW5kIGJpdHN0cmluZ3MgKi8KKwkgIAorCSAgY291bnQgPSAqKGFuc3ArKyk7IC8qIEJpdHMgaW4gYml0c3RyaW5nICovCisJICAKKwkgIGlmIChjb3VudCA9PSAwKSAvKiBjb3VudCA9PSAwIG1lYW5zIDI1NiBiaXRzICovCisJICAgIGFuc3AgKz0gMzI7CisJICBlbHNlCisJICAgIGFuc3AgKz0gKChjb3VudC0xKT4+MykrMTsKKwl9CisgICAgICBlbHNlCisJeyAvKiBsYWJlbCB0eXBlID09IDAgQm90dG9tIHNpeCBiaXRzIGlzIGxlbmd0aCAqLworCSAgdW5zaWduZWQgaW50IGxlbiA9ICgqYW5zcCsrKSAmIDB4M2Y7CisJICAKKwkgIGlmICghQUREX1JETEVOKGhlYWRlciwgYW5zcCwgcGxlbiwgbGVuKSkKKwkgICAgcmV0dXJuIDA7CisKKwkgIGlmIChsZW4gPT0gMCkKKwkgICAgYnJlYWs7IC8qIHplcm8gbGVuZ3RoIGxhYmVsIG1hcmtzIHRoZSBlbmQuICovCisJfQorICAgIH0KKworICAqbmFtZXAgPSBhbnNwOworCisgIHJldHVybiAxOworfQorCisvKiBHbyB0aHJvdWdoIFJScyBhbmQgY2hlY2sgb3IgZml4dXAgdGhlIGRvbWFpbiBuYW1lcyBjb250YWluZWQgd2l0aGluICovCitzdGF0aWMgaW50IGNoZWNrX3Jycyh1bnNpZ25lZCBjaGFyICpwLCBzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBzaXplX3QgcGxlbiwgaW50IGZpeHVwLCB1bnNpZ25lZCBjaGFyICoqcnJzLCBpbnQgcnJfY291bnQpCit7CisgIGludCBpLCBqLCB0eXBlLCBjbGFzcywgcmRsZW47CisgIHVuc2lnbmVkIGNoYXIgKnBwOworICAKKyAgZm9yIChpID0gMDsgaSA8IG50b2hzKGhlYWRlci0+YW5jb3VudCkgKyBudG9ocyhoZWFkZXItPm5zY291bnQpICsgbnRvaHMoaGVhZGVyLT5hcmNvdW50KTsgaSsrKQorICAgIHsKKyAgICAgIHBwID0gcDsKKworICAgICAgaWYgKCEocCA9IHNraXBfbmFtZShwLCBoZWFkZXIsIHBsZW4sIDEwKSkpCisJcmV0dXJuIDA7CisgICAgICAKKyAgICAgIEdFVFNIT1JUKHR5cGUsIHApOyAKKyAgICAgIEdFVFNIT1JUKGNsYXNzLCBwKTsKKyAgICAgIHAgKz0gNDsgLyogVFRMICovCisgICAgICBHRVRTSE9SVChyZGxlbiwgcCk7CisKKyAgICAgIC8qIElmIHRoaXMgUlIgaXMgdG8gYmUgZWxpZGVkLCBkb24ndCBmaXggdXAgaXRzIGNvbnRlbnRzICovCisgICAgICBmb3IgKGogPSAwOyBqIDwgcnJfY291bnQ7IGogKz0gMikKKwlpZiAocnJzW2pdID09IHBwKQorCSAgYnJlYWs7CisKKyAgICAgIGlmIChqID49IHJyX2NvdW50KQorCXsKKwkgIC8qIGZpeHVwIG5hbWUgb2YgUlIgKi8KKwkgIGlmICghY2hlY2tfbmFtZSgmcHAsIGhlYWRlciwgcGxlbiwgZml4dXAsIHJycywgcnJfY291bnQpKQorCSAgICByZXR1cm4gMDsKKwkgIAorCSAgaWYgKGNsYXNzID09IENfSU4pCisJICAgIHsKKwkgICAgICB1MTYgKmQ7CisgCisJICAgICAgZm9yIChwcCA9IHAsIGQgPSBycmZpbHRlcl9kZXNjKHR5cGUpOyAqZCAhPSAodTE2KS0xOyBkKyspCisJCXsKKwkJICBpZiAoKmQgIT0gMCkKKwkJICAgIHBwICs9ICpkOworCQkgIGVsc2UgaWYgKCFjaGVja19uYW1lKCZwcCwgaGVhZGVyLCBwbGVuLCBmaXh1cCwgcnJzLCBycl9jb3VudCkpCisJCSAgICByZXR1cm4gMDsKKwkJfQorCSAgICB9CisJfQorICAgICAgCisgICAgICBpZiAoIUFERF9SRExFTihoZWFkZXIsIHAsIHBsZW4sIHJkbGVuKSkKKwlyZXR1cm4gMDsKKyAgICB9CisgIAorICByZXR1cm4gMTsKK30KKwkKKworLyogbW9kZSBpcyAwIHRvIHJlbW92ZSBFRE5TMCwgMSB0byBmaWx0ZXIgRE5TU0VDIFJScyAqLworc2l6ZV90IHJyZmlsdGVyKHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIsIHNpemVfdCBwbGVuLCBpbnQgbW9kZSkKK3sKKyAgc3RhdGljIHVuc2lnbmVkIGNoYXIgKipycnM7CisgIHN0YXRpYyBpbnQgcnJfc3ogPSAwOworCisgIHVuc2lnbmVkIGNoYXIgKnAgPSAodW5zaWduZWQgY2hhciAqKShoZWFkZXIrMSk7CisgIGludCBpLCByZGxlbiwgcXR5cGUsIHFjbGFzcywgcnJfZm91bmQsIGNob3BfYW4sIGNob3BfbnMsIGNob3BfYXI7CisKKyAgaWYgKG50b2hzKGhlYWRlci0+cWRjb3VudCkgIT0gMSB8fAorICAgICAgIShwID0gc2tpcF9uYW1lKHAsIGhlYWRlciwgcGxlbiwgNCkpKQorICAgIHJldHVybiBwbGVuOworICAKKyAgR0VUU0hPUlQocXR5cGUsIHApOworICBHRVRTSE9SVChxY2xhc3MsIHApOworCisgIC8qIEZpcnN0IHBhc3MsIGZpbmQgcG9pbnRlcnMgdG8gc3RhcnQgYW5kIGVuZCBvZiBhbGwgdGhlIHJlY29yZHMgd2Ugd2lzaCB0byBlbGlkZToKKyAgICAgcmVjb3JkcyBhZGRlZCBmb3IgRE5TU0VDLCB1bmxlc3MgZXhwbGljaXRseSBxdWVyaWVkIGZvciAqLworICBmb3IgKHJyX2ZvdW5kID0gMCwgY2hvcF9ucyA9IDAsIGNob3BfYW4gPSAwLCBjaG9wX2FyID0gMCwgaSA9IDA7IAorICAgICAgIGkgPCBudG9ocyhoZWFkZXItPmFuY291bnQpICsgbnRvaHMoaGVhZGVyLT5uc2NvdW50KSArIG50b2hzKGhlYWRlci0+YXJjb3VudCk7CisgICAgICAgaSsrKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIgKnBzdGFydCA9IHA7CisgICAgICBpbnQgdHlwZSwgY2xhc3M7CisKKyAgICAgIGlmICghKHAgPSBza2lwX25hbWUocCwgaGVhZGVyLCBwbGVuLCAxMCkpKQorCXJldHVybiBwbGVuOworICAgICAgCisgICAgICBHRVRTSE9SVCh0eXBlLCBwKTsgCisgICAgICBHRVRTSE9SVChjbGFzcywgcCk7CisgICAgICBwICs9IDQ7IC8qIFRUTCAqLworICAgICAgR0VUU0hPUlQocmRsZW4sIHApOworICAgICAgICAKKyAgICAgIGlmICghQUREX1JETEVOKGhlYWRlciwgcCwgcGxlbiwgcmRsZW4pKQorCXJldHVybiBwbGVuOworCisgICAgICAvKiBEb24ndCByZW1vdmUgdGhlIGFuc3dlci4gKi8KKyAgICAgIGlmIChpIDwgbnRvaHMoaGVhZGVyLT5hbmNvdW50KSAmJiB0eXBlID09IHF0eXBlICYmIGNsYXNzID09IHFjbGFzcykKKwljb250aW51ZTsKKyAgICAgIAorICAgICAgaWYgKG1vZGUgPT0gMCkgLyogRUROUyAqLworCXsKKwkgIC8qIEVETlMgbW9kZSwgcmVtb3ZlIFRfT1BUIGZyb20gYWRkaXRpb25hbCBzZWN0aW9uIG9ubHkgKi8KKwkgIGlmIChpIDwgKG50b2hzKGhlYWRlci0+bnNjb3VudCkgKyBudG9ocyhoZWFkZXItPmFuY291bnQpKSB8fCB0eXBlICE9IFRfT1BUKQorCSAgICBjb250aW51ZTsKKwl9CisgICAgICBlbHNlIGlmICh0eXBlICE9IFRfTlNFQyAmJiB0eXBlICE9IFRfTlNFQzMgJiYgdHlwZSAhPSBUX1JSU0lHKQorCS8qIEROU1NFQyBtb2RlLCByZW1vdmUgU0lHcyBhbmQgTlNFQ3MgZnJvbSBhbGwgdGhyZWUgc2VjdGlvbnMuICovCisJY29udGludWU7CisgICAgICAKKyAgICAgIAorICAgICAgaWYgKCFleHBhbmRfd29ya3NwYWNlKCZycnMsICZycl9zeiwgcnJfZm91bmQgKyAxKSkKKwlyZXR1cm4gcGxlbjsgCisgICAgICAKKyAgICAgIHJyc1tycl9mb3VuZCsrXSA9IHBzdGFydDsKKyAgICAgIHJyc1tycl9mb3VuZCsrXSA9IHA7CisgICAgICAKKyAgICAgIGlmIChpIDwgbnRvaHMoaGVhZGVyLT5hbmNvdW50KSkKKwljaG9wX2FuKys7CisgICAgICBlbHNlIGlmIChpIDwgKG50b2hzKGhlYWRlci0+bnNjb3VudCkgKyBudG9ocyhoZWFkZXItPmFuY291bnQpKSkKKwljaG9wX25zKys7CisgICAgICBlbHNlCisJY2hvcF9hcisrOworICAgIH0KKyAgCisgIC8qIE5vdGhpbmcgdG8gZG8uICovCisgIGlmIChycl9mb3VuZCA9PSAwKQorICAgIHJldHVybiBwbGVuOworCisgIC8qIFNlY29uZCBwYXNzLCBsb29rIGZvciBwb2ludGVycyBpbiBuYW1lcyBpbiB0aGUgcmVjb3JkcyB3ZSdyZSBrZWVwaW5nIGFuZCBtYWtlIHN1cmUgdGhleSBkb24ndAorICAgICBwb2ludCB0byByZWNvcmRzIHdlJ3JlIGdvaW5nIHRvIGVsaWRlLiBUaGlzIGlzIHRoZW9yZXRpY2FsbHkgcG9zc2libGUsIGJ1dCB1bmxpa2VseS4gSWYKKyAgICAgaXQgaGFwcGVucywgd2UgZ2l2ZSB1cCBhbmQgbGVhdmUgdGhlIGFuc3dlciB1bmNoYW5nZWQuICovCisgIHAgPSAodW5zaWduZWQgY2hhciAqKShoZWFkZXIrMSk7CisgIAorICAvKiBxdWVzdGlvbiBmaXJzdCAqLworICBpZiAoIWNoZWNrX25hbWUoJnAsIGhlYWRlciwgcGxlbiwgMCwgcnJzLCBycl9mb3VuZCkpCisgICAgcmV0dXJuIHBsZW47CisgIHAgKz0gNDsgLyogcWNsYXNzLCBxdHlwZSAqLworICAKKyAgLyogTm93IGFuc3dlcnMgYW5kIE5TICovCisgIGlmICghY2hlY2tfcnJzKHAsIGhlYWRlciwgcGxlbiwgMCwgcnJzLCBycl9mb3VuZCkpCisgICAgcmV0dXJuIHBsZW47CisgIAorICAvKiBUaGlyZCBwYXNzLCBhY3R1YWxseSBmaXggdXAgcG9pbnRlcnMgaW4gdGhlIHJlY29yZHMgKi8KKyAgcCA9ICh1bnNpZ25lZCBjaGFyICopKGhlYWRlcisxKTsKKyAgCisgIGNoZWNrX25hbWUoJnAsIGhlYWRlciwgcGxlbiwgMSwgcnJzLCBycl9mb3VuZCk7CisgIHAgKz0gNDsgLyogcWNsYXNzLCBxdHlwZSAqLworICAKKyAgY2hlY2tfcnJzKHAsIGhlYWRlciwgcGxlbiwgMSwgcnJzLCBycl9mb3VuZCk7CisKKyAgLyogIEZvdXRoIHBhc3MsIGVsaWRlIHJlY29yZHMgKi8KKyAgZm9yIChwID0gcnJzWzBdLCBpID0gMTsgaSA8IHJyX2ZvdW5kOyBpICs9IDIpCisgICAgeworICAgICAgdW5zaWduZWQgY2hhciAqc3RhcnQgPSBycnNbaV07CisgICAgICB1bnNpZ25lZCBjaGFyICplbmQgPSAoaSAhPSBycl9mb3VuZCAtIDEpID8gcnJzW2krMV0gOiAoKHVuc2lnbmVkIGNoYXIgKiloZWFkZXIpICsgcGxlbjsKKyAgICAgIAorICAgICAgbWVtbW92ZShwLCBzdGFydCwgZW5kLXN0YXJ0KTsKKyAgICAgIHAgKz0gZW5kLXN0YXJ0OworICAgIH0KKyAgICAgCisgIHBsZW4gPSBwIC0gKHVuc2lnbmVkIGNoYXIgKiloZWFkZXI7CisgIGhlYWRlci0+YW5jb3VudCA9IGh0b25zKG50b2hzKGhlYWRlci0+YW5jb3VudCkgLSBjaG9wX2FuKTsKKyAgaGVhZGVyLT5uc2NvdW50ID0gaHRvbnMobnRvaHMoaGVhZGVyLT5uc2NvdW50KSAtIGNob3BfbnMpOworICBoZWFkZXItPmFyY291bnQgPSBodG9ucyhudG9ocyhoZWFkZXItPmFyY291bnQpIC0gY2hvcF9hcik7CisKKyAgcmV0dXJuIHBsZW47Cit9CisKKy8qIFRoaXMgaXMgdXNlZCBpbiB0aGUgRE5TU0VDIGNvZGUgdG9vLCBoZW5jZSBpdCdzIGV4cG9ydGVkICovCit1MTYgKnJyZmlsdGVyX2Rlc2MoaW50IHR5cGUpCit7CisgIC8qIExpc3Qgb2YgUlJ0eXBlcyB3aGljaCBpbmNsdWRlIGRvbWFpbnMgaW4gdGhlIGRhdGEuCisgICAgIDAgLT4gZG9tYWluCisgICAgIGludGVnZXIgLT4gbm8gb2YgcGxhaW4gYnl0ZXMKKyAgICAgLTEgLT4gZW5kCisKKyAgICAgemVybyBpcyBub3QgYSB2YWxpZCBSUnR5cGUsIHNvIHRoZSBmaW5hbCBlbnRyeSBpcyByZXR1cm5lZCBmb3IKKyAgICAgYW55dGhpbmcgd2hpY2ggbmVlZHMgbm8gbWFuZ2xpbmcuCisgICovCisgIAorICBzdGF0aWMgdTE2IHJyX2Rlc2NbXSA9IAorICAgIHsgCisgICAgICBUX05TLCAwLCAtMSwgCisgICAgICBUX01ELCAwLCAtMSwKKyAgICAgIFRfTUYsIDAsIC0xLAorICAgICAgVF9DTkFNRSwgMCwgLTEsCisgICAgICBUX1NPQSwgMCwgMCwgLTEsCisgICAgICBUX01CLCAwLCAtMSwKKyAgICAgIFRfTUcsIDAsIC0xLAorICAgICAgVF9NUiwgMCwgLTEsCisgICAgICBUX1BUUiwgMCwgLTEsCisgICAgICBUX01JTkZPLCAwLCAwLCAtMSwKKyAgICAgIFRfTVgsIDIsIDAsIC0xLAorICAgICAgVF9SUCwgMCwgMCwgLTEsCisgICAgICBUX0FGU0RCLCAyLCAwLCAtMSwKKyAgICAgIFRfUlQsIDIsIDAsIC0xLAorICAgICAgVF9TSUcsIDE4LCAwLCAtMSwKKyAgICAgIFRfUFgsIDIsIDAsIDAsIC0xLAorICAgICAgVF9OWFQsIDAsIC0xLAorICAgICAgVF9LWCwgMiwgMCwgLTEsCisgICAgICBUX1NSViwgNiwgMCwgLTEsCisgICAgICBUX0ROQU1FLCAwLCAtMSwKKyAgICAgIDAsIC0xIC8qIHdpbGRjYXJkL2NhdGNoYWxsICovCisgICAgfTsgCisgIAorICB1MTYgKnAgPSBycl9kZXNjOworICAKKyAgd2hpbGUgKCpwICE9IHR5cGUgJiYgKnAgIT0gMCkKKyAgICB3aGlsZSAoKnArKyAhPSAodTE2KS0xKTsKKworICByZXR1cm4gcCsxOworfQorCitpbnQgZXhwYW5kX3dvcmtzcGFjZSh1bnNpZ25lZCBjaGFyICoqKndrc3BjLCBpbnQgKnN6cCwgaW50IG5ldykKK3sKKyAgdW5zaWduZWQgY2hhciAqKnA7CisgIGludCBvbGQgPSAqc3pwOworCisgIGlmIChvbGQgPj0gbmV3KzEpCisgICAgcmV0dXJuIDE7CisKKyAgaWYgKG5ldyA+PSAxMDApCisgICAgcmV0dXJuIDA7CisKKyAgbmV3ICs9IDU7CisgIAorICBpZiAoIShwID0gd2hpbmVfbWFsbG9jKG5ldyAqIHNpemVvZih1bnNpZ25lZCBjaGFyICopKSkpCisgICAgcmV0dXJuIDA7ICAKKyAgCisgIGlmIChvbGQgIT0gMCAmJiAqd2tzcGMpCisgICAgeworICAgICAgbWVtY3B5KHAsICp3a3NwYywgb2xkICogc2l6ZW9mKHVuc2lnbmVkIGNoYXIgKikpOworICAgICAgZnJlZSgqd2tzcGMpOworICAgIH0KKyAgCisgICp3a3NwYyA9IHA7CisgICpzenAgPSBuZXc7CisKKyAgcmV0dXJuIDE7Cit9CmRpZmYgLS1naXQgYS9zcmMvc2xhYWMuYyBiL3NyYy9zbGFhYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwYzU4YWEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvc2xhYWMuYwpAQCAtMCwwICsxLDIxMiBAQAorLyogZG5zbWFzcSBpcyBDb3B5cmlnaHQgKGMpIDIwMDAtMjAxNyBTaW1vbiBLZWxsZXkKKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgZGF0ZWQgSnVuZSwgMTk5MSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgdmVyc2lvbiAzIGRhdGVkIDI5IEp1bmUsIDIwMDcuCisgCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisKKyNpbmNsdWRlICJkbnNtYXNxLmgiCisKKyNpZmRlZiBIQVZFX0RIQ1A2CisKKyNpbmNsdWRlIDxuZXRpbmV0L2ljbXA2Lmg+CisKK3N0YXRpYyBpbnQgcGluZ19pZCA9IDA7CisKK3ZvaWQgc2xhYWNfYWRkX2FkZHJzKHN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZSwgdGltZV90IG5vdywgaW50IGZvcmNlKQoreworICBzdHJ1Y3Qgc2xhYWNfYWRkcmVzcyAqc2xhYWMsICpvbGQsICoqdXA7CisgIHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQ7CisgIGludCBkbnNfZGlydHkgPSAwOworICAKKyAgaWYgKCEobGVhc2UtPmZsYWdzICYgTEVBU0VfSEFWRV9IV0FERFIpIHx8IAorICAgICAgKGxlYXNlLT5mbGFncyAmIChMRUFTRV9UQSB8IExFQVNFX05BKSkgfHwKKyAgICAgIGxlYXNlLT5sYXN0X2ludGVyZmFjZSA9PSAwIHx8CisgICAgICAhbGVhc2UtPmhvc3RuYW1lKQorICAgIHJldHVybiA7CisgIAorICBvbGQgPSBsZWFzZS0+c2xhYWNfYWRkcmVzczsKKyAgbGVhc2UtPnNsYWFjX2FkZHJlc3MgPSBOVUxMOworCisgIGZvciAoY29udGV4dCA9IGRhZW1vbi0+ZGhjcDY7IGNvbnRleHQ7IGNvbnRleHQgPSBjb250ZXh0LT5uZXh0KSAKKyAgICBpZiAoKGNvbnRleHQtPmZsYWdzICYgQ09OVEVYVF9SQV9OQU1FKSAmJiAKKwkhKGNvbnRleHQtPmZsYWdzICYgQ09OVEVYVF9PTEQpICYmCisJbGVhc2UtPmxhc3RfaW50ZXJmYWNlID09IGNvbnRleHQtPmlmX2luZGV4KQorICAgICAgeworCXN0cnVjdCBpbjZfYWRkciBhZGRyID0gY29udGV4dC0+c3RhcnQ2OworCWlmIChsZWFzZS0+aHdhZGRyX2xlbiA9PSA2ICYmCisJICAgIChsZWFzZS0+aHdhZGRyX3R5cGUgPT0gQVJQSFJEX0VUSEVSIHx8IGxlYXNlLT5od2FkZHJfdHlwZSA9PSBBUlBIUkRfSUVFRTgwMikpCisJICB7CisJICAgIC8qIGNvbnZlcnQgTUFDIGFkZHJlc3MgdG8gRVVJLTY0ICovCisJICAgIG1lbWNweSgmYWRkci5zNl9hZGRyWzhdLCBsZWFzZS0+aHdhZGRyLCAzKTsKKwkgICAgbWVtY3B5KCZhZGRyLnM2X2FkZHJbMTNdLCAmbGVhc2UtPmh3YWRkclszXSwgMyk7CisJICAgIGFkZHIuczZfYWRkclsxMV0gPSAweGZmOworCSAgICBhZGRyLnM2X2FkZHJbMTJdID0gMHhmZTsKKwkgIH0KKyNpZiBkZWZpbmVkKEFSUEhSRF9FVUk2NCkKKwllbHNlIGlmIChsZWFzZS0+aHdhZGRyX2xlbiA9PSA4ICYmCisJCSBsZWFzZS0+aHdhZGRyX3R5cGUgPT0gQVJQSFJEX0VVSTY0KQorCSAgbWVtY3B5KCZhZGRyLnM2X2FkZHJbOF0sIGxlYXNlLT5od2FkZHIsIDgpOworI2VuZGlmCisjaWYgZGVmaW5lZChBUlBIUkRfSUVFRTEzOTQpICYmIGRlZmluZWQoQVJQSFJEX0VVSTY0KQorCWVsc2UgaWYgKGxlYXNlLT5jbGlkX2xlbiA9PSA5ICYmIAorCQkgbGVhc2UtPmNsaWRbMF0gPT0gIEFSUEhSRF9FVUk2NCAmJgorCQkgbGVhc2UtPmh3YWRkcl90eXBlID09IEFSUEhSRF9JRUVFMTM5NCkKKwkgIC8qIGZpcmV3aXJlIGhhcyBFVUktNjQgaWRlbnRpZmllciBhcyBjbGlkICovCisJICBtZW1jcHkoJmFkZHIuczZfYWRkcls4XSwgJmxlYXNlLT5jbGlkWzFdLCA4KTsKKyNlbmRpZgorCWVsc2UKKwkgIGNvbnRpbnVlOworCQorCWFkZHIuczZfYWRkcls4XSBePSAweDAyOworCQorCS8qIGNoZWNrIGlmIHdlIGFscmVhZHkgaGF2ZSB0aGlzIG9uZSAqLworCWZvciAodXAgPSAmb2xkLCBzbGFhYyA9IG9sZDsgc2xhYWM7IHNsYWFjID0gc2xhYWMtPm5leHQpCisJICB7CisJICAgIGlmIChJTjZfQVJFX0FERFJfRVFVQUwoJmFkZHIsICZzbGFhYy0+YWRkcikpCisJICAgICAgeworCQkqdXAgPSBzbGFhYy0+bmV4dDsKKwkJLyogcmVjaGVjayB3aGVuIERIQ1B2NCBnb2VzIHRocm91Z2ggaW5pdC1yZWJvb3QgKi8KKwkJaWYgKGZvcmNlKQorCQkgIHsKKwkJICAgIHNsYWFjLT5waW5nX3RpbWUgPSBub3c7CisJCSAgICBzbGFhYy0+YmFja29mZiA9IDE7CisJCSAgICBkbnNfZGlydHkgPSAxOworCQkgIH0KKwkJYnJlYWs7CisJICAgICAgfQorCSAgICB1cCA9ICZzbGFhYy0+bmV4dDsKKwkgIH0KKwkgICAgCisJLyogTm8sIG1ha2UgbmV3IG9uZSAqLworCWlmICghc2xhYWMgJiYgKHNsYWFjID0gd2hpbmVfbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2xhYWNfYWRkcmVzcykpKSkKKwkgIHsKKwkgICAgc2xhYWMtPnBpbmdfdGltZSA9IG5vdzsKKwkgICAgc2xhYWMtPmJhY2tvZmYgPSAxOworCSAgICBzbGFhYy0+YWRkciA9IGFkZHI7CisJICAgIC8qIERvIFJBJ3MgdG8gcHJvZCBpdCAqLworCSAgICByYV9zdGFydF91bnNvbGljaXRlZChub3csIGNvbnRleHQpOworCSAgfQorCQorCWlmIChzbGFhYykKKwkgIHsKKwkgICAgc2xhYWMtPm5leHQgPSBsZWFzZS0+c2xhYWNfYWRkcmVzczsKKwkgICAgbGVhc2UtPnNsYWFjX2FkZHJlc3MgPSBzbGFhYzsKKwkgIH0KKyAgICAgIH0KKyAgCisgIGlmIChvbGQgfHwgZG5zX2RpcnR5KQorICAgIGxlYXNlX3VwZGF0ZV9kbnMoMSk7CisgIAorICAvKiBGcmVlIGFueSBubyByZXVzZWQgKi8KKyAgZm9yICg7IG9sZDsgb2xkID0gc2xhYWMpCisgICAgeworICAgICAgc2xhYWMgPSBvbGQtPm5leHQ7CisgICAgICBmcmVlKG9sZCk7CisgICAgfQorfQorCisKK3RpbWVfdCBwZXJpb2RpY19zbGFhYyh0aW1lX3Qgbm93LCBzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2VzKQoreworICBzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0OworICBzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2U7CisgIHN0cnVjdCBzbGFhY19hZGRyZXNzICpzbGFhYzsKKyAgdGltZV90IG5leHRfZXZlbnQgPSAwOworICAKKyAgZm9yIChjb250ZXh0ID0gZGFlbW9uLT5kaGNwNjsgY29udGV4dDsgY29udGV4dCA9IGNvbnRleHQtPm5leHQpCisgICAgaWYgKChjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfUkFfTkFNRSkgJiYgIShjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfT0xEKSkKKyAgICAgIGJyZWFrOworCisgIC8qIG5vdGhpbmcgY29uZmlndXJlZCAqLworICBpZiAoIWNvbnRleHQpCisgICAgcmV0dXJuIDA7CisKKyAgd2hpbGUgKHBpbmdfaWQgPT0gMCkKKyAgICBwaW5nX2lkID0gcmFuZDE2KCk7CisKKyAgZm9yIChsZWFzZSA9IGxlYXNlczsgbGVhc2U7IGxlYXNlID0gbGVhc2UtPm5leHQpCisgICAgZm9yIChzbGFhYyA9IGxlYXNlLT5zbGFhY19hZGRyZXNzOyBzbGFhYzsgc2xhYWMgPSBzbGFhYy0+bmV4dCkKKyAgICAgIHsKKwkvKiBjb25maXJtZWQgb3IgZ2l2ZW4gdXA/ICovCisJaWYgKHNsYWFjLT5iYWNrb2ZmID09IDAgfHwgc2xhYWMtPnBpbmdfdGltZSA9PSAwKQorCSAgY29udGludWU7CisJCisJaWYgKGRpZmZ0aW1lKHNsYWFjLT5waW5nX3RpbWUsIG5vdykgPD0gMC4wKQorCSAgeworCSAgICBzdHJ1Y3QgcGluZ19wYWNrZXQgKnBpbmc7CisJICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkcjsKKyAKKwkgICAgcmVzZXRfY291bnRlcigpOworCisJICAgIGlmICghKHBpbmcgPSBleHBhbmQoc2l6ZW9mKHN0cnVjdCBwaW5nX3BhY2tldCkpKSkKKwkgICAgICBjb250aW51ZTsKKworCSAgICBwaW5nLT50eXBlID0gSUNNUDZfRUNIT19SRVFVRVNUOworCSAgICBwaW5nLT5jb2RlID0gMDsKKwkgICAgcGluZy0+aWRlbnRpZmllciA9IHBpbmdfaWQ7CisJICAgIHBpbmctPnNlcXVlbmNlX25vID0gc2xhYWMtPmJhY2tvZmY7CisJICAgIAorCSAgICBtZW1zZXQoJmFkZHIsIDAsIHNpemVvZihhZGRyKSk7CisjaWZkZWYgSEFWRV9TT0NLQUREUl9TQV9MRU4KKwkgICAgYWRkci5zaW42X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKyNlbmRpZgorCSAgICBhZGRyLnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisJICAgIGFkZHIuc2luNl9wb3J0ID0gaHRvbnMoSVBQUk9UT19JQ01QVjYpOworCSAgICBhZGRyLnNpbjZfYWRkciA9IHNsYWFjLT5hZGRyOworCSAgICAKKwkgICAgaWYgKHNlbmR0byhkYWVtb24tPmljbXA2ZmQsIGRhZW1vbi0+b3V0cGFja2V0Lmlvdl9iYXNlLCBzYXZlX2NvdW50ZXIoLTEpLCAwLAorCQkgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLCAgc2l6ZW9mKGFkZHIpKSA9PSAtMSAmJgorCQllcnJubyA9PSBFSE9TVFVOUkVBQ0gpCisJICAgICAgc2xhYWMtPnBpbmdfdGltZSA9IDA7IC8qIEdpdmUgdXAgKi8gCisJICAgIGVsc2UKKwkgICAgICB7CisJCXNsYWFjLT5waW5nX3RpbWUgKz0gKDEgPDwgKHNsYWFjLT5iYWNrb2ZmIC0gMSkpICsgKHJhbmQxNigpLzIxNzg1KTsgLyogMCAtIDMgKi8KKwkJaWYgKHNsYWFjLT5iYWNrb2ZmID4gNCkKKwkJICBzbGFhYy0+cGluZ190aW1lICs9IHJhbmQxNigpLzQwMDA7IC8qIDAgLSAxNSAqLworCQlpZiAoc2xhYWMtPmJhY2tvZmYgPCAxMikKKwkJICBzbGFhYy0+YmFja29mZisrOworCSAgICAgIH0KKwkgIH0KKwkKKwlpZiAoc2xhYWMtPnBpbmdfdGltZSAhPSAwICYmCisJICAgIChuZXh0X2V2ZW50ID09IDAgfHwgZGlmZnRpbWUobmV4dF9ldmVudCwgc2xhYWMtPnBpbmdfdGltZSkgPj0gMC4wKSkKKwkgIG5leHRfZXZlbnQgPSBzbGFhYy0+cGluZ190aW1lOworICAgICAgfQorCisgIHJldHVybiBuZXh0X2V2ZW50OworfQorCisKK3ZvaWQgc2xhYWNfcGluZ19yZXBseShzdHJ1Y3QgaW42X2FkZHIgKnNlbmRlciwgdW5zaWduZWQgY2hhciAqcGFja2V0LCBjaGFyICppbnRlcmZhY2UsIHN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZXMpCit7CisgIHN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZTsKKyAgc3RydWN0IHNsYWFjX2FkZHJlc3MgKnNsYWFjOworICBzdHJ1Y3QgcGluZ19wYWNrZXQgKnBpbmcgPSAoc3RydWN0IHBpbmdfcGFja2V0ICopcGFja2V0OworICBpbnQgZ290b25lID0gMDsKKyAgCisgIGlmIChwaW5nLT5pZGVudGlmaWVyID09IHBpbmdfaWQpCisgICAgZm9yIChsZWFzZSA9IGxlYXNlczsgbGVhc2U7IGxlYXNlID0gbGVhc2UtPm5leHQpCisgICAgICBmb3IgKHNsYWFjID0gbGVhc2UtPnNsYWFjX2FkZHJlc3M7IHNsYWFjOyBzbGFhYyA9IHNsYWFjLT5uZXh0KQorCWlmIChzbGFhYy0+YmFja29mZiAhPSAwICYmIElONl9BUkVfQUREUl9FUVVBTChzZW5kZXIsICZzbGFhYy0+YWRkcikpCisJICB7CisJICAgIHNsYWFjLT5iYWNrb2ZmID0gMDsKKwkgICAgZ290b25lID0gMTsKKwkgICAgaW5ldF9udG9wKEFGX0lORVQ2LCBzZW5kZXIsIGRhZW1vbi0+YWRkcmJ1ZmYsIEFERFJTVFJMRU4pOworCSAgICBpZiAoIW9wdGlvbl9ib29sKE9QVF9RVUlFVF9ESENQNikpCisJICAgICAgbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfSU5GTywgIlNMQUFDLUNPTkZJUk0oJXMpICVzICVzIiwgaW50ZXJmYWNlLCBkYWVtb24tPmFkZHJidWZmLCBsZWFzZS0+aG9zdG5hbWUpOyAKKwkgIH0KKyAgCisgIGxlYXNlX3VwZGF0ZV9kbnMoZ290b25lKTsKK30KKwkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL3RhYmxlcy5jIGIvc3JjL3RhYmxlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMzgyY2UKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGFibGVzLmMKQEAgLTAsMCArMSwxNDUgQEAKKy8qIHRhYmxlcy5jIGlzIENvcHlyaWdodCAoYykgMjAxNCBTdmVuIEZhbGVtcGluICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBBdXRob3IncyBlbWFpbDogc2ZhbGVtcGluQGNpdHlwYXNzZW5nZXIuY29tIAorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMgZGF0ZWQgMjkgSnVuZSwgMjAwNy4KKyAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2luY2x1ZGUgImRuc21hc3EuaCIKKworI2lmIGRlZmluZWQoSEFWRV9JUFNFVCkgJiYgZGVmaW5lZChIQVZFX0JTRF9ORVRXT1JLKQorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKworI2luY2x1ZGUgPG5ldC9pZi5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxuZXQvcGZ2YXIuaD4KKworI2luY2x1ZGUgPGVyci5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKworI2RlZmluZSBVTlVTRUQoeCkgKHZvaWQpKHgpCisKK3N0YXRpYyBjaGFyICpwZl9kZXZpY2UgPSAiL2Rldi9wZiI7CitzdGF0aWMgaW50IGRldiA9IC0xOworCitzdGF0aWMgY2hhciAqcGZyX3N0cmVycm9yKGludCBlcnJudW0pCit7CisgIHN3aXRjaCAoZXJybnVtKSAKKyAgICB7CisgICAgY2FzZSBFU1JDSDoKKyAgICAgIHJldHVybiAiVGFibGUgZG9lcyBub3QgZXhpc3QiOworICAgIGNhc2UgRU5PRU5UOgorICAgICAgcmV0dXJuICJBbmNob3Igb3IgUnVsZXNldCBkb2VzIG5vdCBleGlzdCI7CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBzdHJlcnJvcihlcnJudW0pOworICAgIH0KK30KKworCit2b2lkIGlwc2V0X2luaXQodm9pZCkgCit7CisgIGRldiA9IG9wZW4oIHBmX2RldmljZSwgT19SRFdSKTsKKyAgaWYgKGRldiA9PSAtMSkKKyAgICB7CisgICAgICBlcnIoMSwgIiVzIiwgcGZfZGV2aWNlKTsKKyAgICAgIGRpZSAoXygiZmFpbGVkIHRvIGFjY2VzcyBwZiBkZXZpY2VzOiAlcyIpLCBOVUxMLCBFQ19NSVNDKTsKKyAgICB9Cit9CisKK2ludCBhZGRfdG9faXBzZXQoY29uc3QgY2hhciAqc2V0bmFtZSwgY29uc3Qgc3RydWN0IGFsbF9hZGRyICppcGFkZHIsCisJCSBpbnQgZmxhZ3MsIGludCByZW1vdmUpCit7CisgIHN0cnVjdCBwZnJfYWRkciBhZGRyOworICBzdHJ1Y3QgcGZpb2NfdGFibGUgaW87CisgIHN0cnVjdCBwZnJfdGFibGUgdGFibGU7CisKKyAgaWYgKGRldiA9PSAtMSkgCisgICAgeworICAgICAgbXlfc3lzbG9nKExPR19FUlIsIF8oIndhcm5pbmc6IG5vIG9wZW5lZCBwZiBkZXZpY2VzICVzIiksIHBmX2RldmljZSk7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgIGJ6ZXJvKCZ0YWJsZSwgc2l6ZW9mKHN0cnVjdCBwZnJfdGFibGUpKTsKKyAgdGFibGUucGZydF9mbGFncyB8PSBQRlJfVEZMQUdfUEVSU0lTVDsKKyAgaWYgKHN0cmxlbihzZXRuYW1lKSA+PSBQRl9UQUJMRV9OQU1FX1NJWkUpCisgICAgeworICAgICAgbXlfc3lzbG9nKExPR19FUlIsIF8oImVycm9yOiBjYW5ub3QgdXNlIHRhYmxlIG5hbWUgJXMiKSwgc2V0bmFtZSk7CisgICAgICBlcnJubyA9IEVOQU1FVE9PTE9ORzsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIAorICBpZiAoc3RybGNweSh0YWJsZS5wZnJ0X25hbWUsIHNldG5hbWUsCisJICAgICAgc2l6ZW9mKHRhYmxlLnBmcnRfbmFtZSkpID49IHNpemVvZih0YWJsZS5wZnJ0X25hbWUpKSAKKyAgICB7CisgICAgICBteV9zeXNsb2coTE9HX0VSUiwgXygiZXJyb3I6IGNhbm5vdCBzdHJsY3B5IHRhYmxlIG5hbWUgJXMiKSwgc2V0bmFtZSk7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorICAKKyAgYnplcm8oJmlvLCBzaXplb2YgaW8pOworICBpby5wZnJpb19mbGFncyA9IDA7CisgIGlvLnBmcmlvX2J1ZmZlciA9ICZ0YWJsZTsKKyAgaW8ucGZyaW9fZXNpemUgPSBzaXplb2YodGFibGUpOworICBpby5wZnJpb19zaXplID0gMTsKKyAgaWYgKGlvY3RsKGRldiwgRElPQ1JBRERUQUJMRVMsICZpbykpCisgICAgeworICAgICAgbXlfc3lzbG9nKExPR19XQVJOSU5HLCBfKCJJUHNldDogZXJyb3I6JXMiKSwgcGZyX3N0cmVycm9yKGVycm5vKSk7CisgICAgICAKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIAorICB0YWJsZS5wZnJ0X2ZsYWdzICY9IH5QRlJfVEZMQUdfUEVSU0lTVDsKKyAgaWYgKGlvLnBmcmlvX25hZGQpCisgICAgbXlfc3lzbG9nKExPR19JTkZPLCBfKCJpbmZvOiB0YWJsZSBjcmVhdGVkIikpOworIAorICBiemVybygmYWRkciwgc2l6ZW9mKGFkZHIpKTsKKyNpZmRlZiBIQVZFX0lQVjYKKyAgaWYgKGZsYWdzICYgRl9JUFY2KSAKKyAgICB7CisgICAgICBhZGRyLnBmcmFfYWYgPSBBRl9JTkVUNjsKKyAgICAgIGFkZHIucGZyYV9uZXQgPSAweDgwOworICAgICAgbWVtY3B5KCYoYWRkci5wZnJhX2lwNmFkZHIpLCAmKGlwYWRkci0+YWRkciksIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKKyAgICB9IAorICBlbHNlIAorI2VuZGlmCisgICAgeworICAgICAgYWRkci5wZnJhX2FmID0gQUZfSU5FVDsKKyAgICAgIGFkZHIucGZyYV9uZXQgPSAweDIwOworICAgICAgYWRkci5wZnJhX2lwNGFkZHIuc19hZGRyID0gaXBhZGRyLT5hZGRyLmFkZHI0LnNfYWRkcjsKKyAgICB9CisKKyAgYnplcm8oJmlvLCBzaXplb2YoaW8pKTsKKyAgaW8ucGZyaW9fZmxhZ3MgPSAwOworICBpby5wZnJpb190YWJsZSA9IHRhYmxlOworICBpby5wZnJpb19idWZmZXIgPSAmYWRkcjsKKyAgaW8ucGZyaW9fZXNpemUgPSBzaXplb2YoYWRkcik7CisgIGlvLnBmcmlvX3NpemUgPSAxOworICBpZiAoaW9jdGwoZGV2LCAoIHJlbW92ZSA/IERJT0NSREVMQUREUlMgOiBESU9DUkFEREFERFJTICksICZpbykpIAorICAgIHsKKyAgICAgIG15X3N5c2xvZyhMT0dfV0FSTklORywgXygid2FybmluZzogRElPQ1Ilc0FERFJTOiAlcyIpLCAoIHJlbW92ZSA/ICJERUwiIDogIkFERCIgKSwgcGZyX3N0cmVycm9yKGVycm5vKSk7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorICAKKyAgbXlfc3lzbG9nKExPR19JTkZPLCBfKCIlZCBhZGRyZXNzZXMgJXMiKSwKKyAgICAgICAgICAgIGlvLnBmcmlvX25hZGQsICggcmVtb3ZlID8gInJlbW92ZWQiIDogImFkZGVkIiApKTsKKyAgCisgIHJldHVybiBpby5wZnJpb19uYWRkOworfQorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL3RmdHAuYyBiL3NyYy90ZnRwLmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTMxZTZkZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZnRwLmMKQEAgLTAsMCArMSw4MTkgQEAKKy8qIGRuc21hc3EgaXMgQ29weXJpZ2h0IChjKSAyMDAwLTIwMTcgU2ltb24gS2VsbGV5CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIGRhdGVkIEp1bmUsIDE5OTEsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIHZlcnNpb24gMyBkYXRlZCAyOSBKdW5lLCAyMDA3LgorIAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisqLworCisjaW5jbHVkZSAiZG5zbWFzcS5oIgorCisjaWZkZWYgSEFWRV9URlRQCisKK3N0YXRpYyBzdHJ1Y3QgdGZ0cF9maWxlICpjaGVja190ZnRwX2ZpbGVwZXJtKHNzaXplX3QgKmxlbiwgY2hhciAqcHJlZml4KTsKK3N0YXRpYyB2b2lkIGZyZWVfdHJhbnNmZXIoc3RydWN0IHRmdHBfdHJhbnNmZXIgKnRyYW5zZmVyKTsKK3N0YXRpYyBzc2l6ZV90IHRmdHBfZXJyKGludCBlcnIsIGNoYXIgKnBhY2tldCwgY2hhciAqbWVzc2FnZSwgY2hhciAqZmlsZSk7CitzdGF0aWMgc3NpemVfdCB0ZnRwX2Vycl9vb3BzKGNoYXIgKnBhY2tldCwgY2hhciAqZmlsZSk7CitzdGF0aWMgc3NpemVfdCBnZXRfYmxvY2soY2hhciAqcGFja2V0LCBzdHJ1Y3QgdGZ0cF90cmFuc2ZlciAqdHJhbnNmZXIpOworc3RhdGljIGNoYXIgKm5leHQoY2hhciAqKnAsIGNoYXIgKmVuZCk7CitzdGF0aWMgdm9pZCBzYW5pdGlzZShjaGFyICpidWYpOworCisjZGVmaW5lIE9QX1JSUSAgMQorI2RlZmluZSBPUF9XUlEgIDIKKyNkZWZpbmUgT1BfREFUQSAzCisjZGVmaW5lIE9QX0FDSyAgNAorI2RlZmluZSBPUF9FUlIgIDUKKyNkZWZpbmUgT1BfT0FDSyA2CisKKyNkZWZpbmUgRVJSX05PVERFRiAwCisjZGVmaW5lIEVSUl9GTkYgICAgMQorI2RlZmluZSBFUlJfUEVSTSAgIDIKKyNkZWZpbmUgRVJSX0ZVTEwgICAzCisjZGVmaW5lIEVSUl9JTEwgICAgNAorCit2b2lkIHRmdHBfcmVxdWVzdChzdHJ1Y3QgbGlzdGVuZXIgKmxpc3RlbiwgdGltZV90IG5vdykKK3sKKyAgc3NpemVfdCBsZW47CisgIGNoYXIgKnBhY2tldCA9IGRhZW1vbi0+cGFja2V0OworICBjaGFyICpmaWxlbmFtZSwgKm1vZGUsICpwLCAqZW5kLCAqb3B0OworICB1bmlvbiBteXNvY2thZGRyIGFkZHIsIHBlZXI7CisgIHN0cnVjdCBtc2doZHIgbXNnOworICBzdHJ1Y3QgaW92ZWMgaW92OworICBzdHJ1Y3QgaWZyZXEgaWZyOworICBpbnQgaXNfZXJyID0gMSwgaWZfaW5kZXggPSAwLCBtdHUgPSAwOworICBzdHJ1Y3QgaW5hbWUgKnRtcDsKKyAgc3RydWN0IHRmdHBfdHJhbnNmZXIgKnRyYW5zZmVyOworICBpbnQgcG9ydCA9IGRhZW1vbi0+c3RhcnRfdGZ0cF9wb3J0OyAvKiBtYXkgYmUgemVybyB0byB1c2UgZXBoZW1lcmFsIHBvcnQgKi8KKyNpZiBkZWZpbmVkKElQX01UVV9ESVNDT1ZFUikgJiYgZGVmaW5lZChJUF9QTVRVRElTQ19ET05UKQorICBpbnQgbXR1ZmxhZyA9IElQX1BNVFVESVNDX0RPTlQ7CisjZW5kaWYKKyAgY2hhciBuYW1lYnVmZltJRl9OQU1FU0laRV07CisgIGNoYXIgKm5hbWUgPSBOVUxMOworICBjaGFyICpwcmVmaXggPSBkYWVtb24tPnRmdHBfcHJlZml4OworICBzdHJ1Y3QgdGZ0cF9wcmVmaXggKnByZWY7CisgIHN0cnVjdCBhbGxfYWRkciBhZGRyYTsKKyNpZmRlZiBIQVZFX0lQVjYKKyAgLyogQ2FuIGFsd2F5cyBnZXQgcmVjdmQgaW50ZXJmYWNlIGZvciBJUHY2ICovCisgIGludCBjaGVja19kZXN0ID0gIW9wdGlvbl9ib29sKE9QVF9OT1dJTEQpIHx8IGxpc3Rlbi0+ZmFtaWx5ID09IEFGX0lORVQ2OworI2Vsc2UKKyAgaW50IGNoZWNrX2Rlc3QgPSAhb3B0aW9uX2Jvb2woT1BUX05PV0lMRCk7CisjZW5kaWYKKyAgdW5pb24geworICAgIHN0cnVjdCBjbXNnaGRyIGFsaWduOyAvKiB0aGlzIGVuc3VyZXMgYWxpZ25tZW50ICovCisjaWZkZWYgSEFWRV9JUFY2CisgICAgY2hhciBjb250cm9sNltDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3QgaW42X3BrdGluZm8pKV07CisjZW5kaWYKKyNpZiBkZWZpbmVkKEhBVkVfTElOVVhfTkVUV09SSykKKyAgICBjaGFyIGNvbnRyb2xbQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IGluX3BrdGluZm8pKV07CisjZWxpZiBkZWZpbmVkKEhBVkVfU09MQVJJU19ORVRXT1JLKQorICAgIGNoYXIgY29udHJvbFtDTVNHX1NQQUNFKHNpemVvZih1bnNpZ25lZCBpbnQpKV07CisjZWxpZiBkZWZpbmVkKElQX1JFQ1ZEU1RBRERSKSAmJiBkZWZpbmVkKElQX1JFQ1ZJRikKKyAgICBjaGFyIGNvbnRyb2xbQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IHNvY2thZGRyX2RsKSldOworI2VuZGlmCisgIH0gY29udHJvbF91OyAKKworICBtc2cubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY29udHJvbF91KTsKKyAgbXNnLm1zZ19jb250cm9sID0gY29udHJvbF91LmNvbnRyb2w7CisgIG1zZy5tc2dfZmxhZ3MgPSAwOworICBtc2cubXNnX25hbWUgPSAmcGVlcjsKKyAgbXNnLm1zZ19uYW1lbGVuID0gc2l6ZW9mKHBlZXIpOworICBtc2cubXNnX2lvdiA9ICZpb3Y7CisgIG1zZy5tc2dfaW92bGVuID0gMTsKKworICBpb3YuaW92X2Jhc2UgPSBwYWNrZXQ7CisgIGlvdi5pb3ZfbGVuID0gZGFlbW9uLT5wYWNrZXRfYnVmZl9zejsKKworICAvKiB3ZSBvdmVyd3JvdGUgdGhlIGJ1ZmZlci4uLiAqLworICBkYWVtb24tPnNydl9zYXZlID0gTlVMTDsKKworICBpZiAoKGxlbiA9IHJlY3Ztc2cobGlzdGVuLT50ZnRwZmQsICZtc2csIDApKSA8IDIpCisgICAgcmV0dXJuOworCisgIC8qIENhbiBhbHdheXMgZ2V0IHJlY3ZkIGludGVyZmFjZSBmb3IgSVB2NiAqLworICBpZiAoIWNoZWNrX2Rlc3QpCisgICAgeworICAgICAgaWYgKGxpc3Rlbi0+aWZhY2UpCisJeworCSAgYWRkciA9IGxpc3Rlbi0+aWZhY2UtPmFkZHI7CisJICBuYW1lID0gbGlzdGVuLT5pZmFjZS0+bmFtZTsKKwkgIG10dSA9IGxpc3Rlbi0+aWZhY2UtPm10dTsKKwkgIGlmIChkYWVtb24tPnRmdHBfbXR1ICE9IDAgJiYgZGFlbW9uLT50ZnRwX210dSA8IG10dSkKKwkgICAgbXR1ID0gZGFlbW9uLT50ZnRwX210dTsKKwl9CisgICAgICBlbHNlCisJeworCSAgLyogd2UncmUgbGlzdGVuaW5nIG9uIGFuIGFkZHJlc3MgdGhhdCBkb2Vzbid0IGFwcGVhciBvbiBhbiBpbnRlcmZhY2UsCisJICAgICBhc2sgdGhlIGtlcm5lbCB3aGF0IHRoZSBzb2NrZXQgaXMgYm91bmQgdG8gKi8KKwkgIHNvY2tsZW5fdCB0Y3BfbGVuID0gc2l6ZW9mKHVuaW9uIG15c29ja2FkZHIpOworCSAgaWYgKGdldHNvY2tuYW1lKGxpc3Rlbi0+dGZ0cGZkLCAoc3RydWN0IHNvY2thZGRyICopJmFkZHIsICZ0Y3BfbGVuKSA9PSAtMSkKKwkgICAgcmV0dXJuOworCX0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBzdHJ1Y3QgY21zZ2hkciAqY21wdHI7CisKKyAgICAgIGlmIChtc2cubXNnX2NvbnRyb2xsZW4gPCBzaXplb2Yoc3RydWN0IGNtc2doZHIpKQorICAgICAgICByZXR1cm47CisgICAgICAKKyAgICAgIGFkZHIuc2Euc2FfZmFtaWx5ID0gbGlzdGVuLT5mYW1pbHk7CisgICAgICAKKyNpZiBkZWZpbmVkKEhBVkVfTElOVVhfTkVUV09SSykKKyAgICAgIGlmIChsaXN0ZW4tPmZhbWlseSA9PSBBRl9JTkVUKQorCWZvciAoY21wdHIgPSBDTVNHX0ZJUlNUSERSKCZtc2cpOyBjbXB0cjsgY21wdHIgPSBDTVNHX05YVEhEUigmbXNnLCBjbXB0cikpCisJICBpZiAoY21wdHItPmNtc2dfbGV2ZWwgPT0gSVBQUk9UT19JUCAmJiBjbXB0ci0+Y21zZ190eXBlID09IElQX1BLVElORk8pCisJICAgIHsKKwkgICAgICB1bmlvbiB7CisJCXVuc2lnbmVkIGNoYXIgKmM7CisJCXN0cnVjdCBpbl9wa3RpbmZvICpwOworCSAgICAgIH0gcDsKKwkgICAgICBwLmMgPSBDTVNHX0RBVEEoY21wdHIpOworCSAgICAgIGFkZHIuaW4uc2luX2FkZHIgPSBwLnAtPmlwaV9zcGVjX2RzdDsKKwkgICAgICBpZl9pbmRleCA9IHAucC0+aXBpX2lmaW5kZXg7CisJICAgIH0KKyAgICAgIAorI2VsaWYgZGVmaW5lZChIQVZFX1NPTEFSSVNfTkVUV09SSykKKyAgICAgIGlmIChsaXN0ZW4tPmZhbWlseSA9PSBBRl9JTkVUKQorCWZvciAoY21wdHIgPSBDTVNHX0ZJUlNUSERSKCZtc2cpOyBjbXB0cjsgY21wdHIgPSBDTVNHX05YVEhEUigmbXNnLCBjbXB0cikpCisJICB7CisJICAgIHVuaW9uIHsKKwkgICAgICB1bnNpZ25lZCBjaGFyICpjOworCSAgICAgIHN0cnVjdCBpbl9hZGRyICphOworCSAgICAgIHVuc2lnbmVkIGludCAqaTsKKwkgICAgfSBwOworCSAgICBwLmMgPSBDTVNHX0RBVEEoY21wdHIpOworCSAgICBpZiAoY21wdHItPmNtc2dfbGV2ZWwgPT0gSVBQUk9UT19JUCAmJiBjbXB0ci0+Y21zZ190eXBlID09IElQX1JFQ1ZEU1RBRERSKQorCSAgICBhZGRyLmluLnNpbl9hZGRyID0gKihwLmEpOworCSAgICBlbHNlIGlmIChjbXB0ci0+Y21zZ19sZXZlbCA9PSBJUFBST1RPX0lQICYmIGNtcHRyLT5jbXNnX3R5cGUgPT0gSVBfUkVDVklGKQorCSAgICBpZl9pbmRleCA9ICoocC5pKTsKKwkgIH0KKyAgICAgIAorI2VsaWYgZGVmaW5lZChJUF9SRUNWRFNUQUREUikgJiYgZGVmaW5lZChJUF9SRUNWSUYpCisgICAgICBpZiAobGlzdGVuLT5mYW1pbHkgPT0gQUZfSU5FVCkKKwlmb3IgKGNtcHRyID0gQ01TR19GSVJTVEhEUigmbXNnKTsgY21wdHI7IGNtcHRyID0gQ01TR19OWFRIRFIoJm1zZywgY21wdHIpKQorCSAgeworCSAgICB1bmlvbiB7CisJICAgICAgdW5zaWduZWQgY2hhciAqYzsKKwkgICAgICBzdHJ1Y3QgaW5fYWRkciAqYTsKKwkgICAgICBzdHJ1Y3Qgc29ja2FkZHJfZGwgKnM7CisJICAgIH0gcDsKKwkgICAgcC5jID0gQ01TR19EQVRBKGNtcHRyKTsKKwkgICAgaWYgKGNtcHRyLT5jbXNnX2xldmVsID09IElQUFJPVE9fSVAgJiYgY21wdHItPmNtc2dfdHlwZSA9PSBJUF9SRUNWRFNUQUREUikKKwkgICAgICBhZGRyLmluLnNpbl9hZGRyID0gKihwLmEpOworCSAgICBlbHNlIGlmIChjbXB0ci0+Y21zZ19sZXZlbCA9PSBJUFBST1RPX0lQICYmIGNtcHRyLT5jbXNnX3R5cGUgPT0gSVBfUkVDVklGKQorCSAgICAgIGlmX2luZGV4ID0gcC5zLT5zZGxfaW5kZXg7CisJICB9CisJICAKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9JUFY2CisgICAgICBpZiAobGlzdGVuLT5mYW1pbHkgPT0gQUZfSU5FVDYpCisgICAgICAgIHsKKyAgICAgICAgICBmb3IgKGNtcHRyID0gQ01TR19GSVJTVEhEUigmbXNnKTsgY21wdHI7IGNtcHRyID0gQ01TR19OWFRIRFIoJm1zZywgY21wdHIpKQorICAgICAgICAgICAgaWYgKGNtcHRyLT5jbXNnX2xldmVsID09IElQUFJPVE9fSVBWNiAmJiBjbXB0ci0+Y21zZ190eXBlID09IGRhZW1vbi0+djZwa3RpbmZvKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdW5pb24geworICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYzsKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBpbjZfcGt0aW5mbyAqcDsKKyAgICAgICAgICAgICAgICB9IHA7CisgICAgICAgICAgICAgICAgcC5jID0gQ01TR19EQVRBKGNtcHRyKTsKKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGFkZHIuaW42LnNpbjZfYWRkciA9IHAucC0+aXBpNl9hZGRyOworICAgICAgICAgICAgICAgIGlmX2luZGV4ID0gcC5wLT5pcGk2X2lmaW5kZXg7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmCisgICAgICAKKyAgICAgIGlmICghaW5kZXh0b25hbWUobGlzdGVuLT50ZnRwZmQsIGlmX2luZGV4LCBuYW1lYnVmZikpCisJcmV0dXJuOworCisgICAgICBuYW1lID0gbmFtZWJ1ZmY7CisgICAgICAKKyAgICAgIGFkZHJhLmFkZHIuYWRkcjQgPSBhZGRyLmluLnNpbl9hZGRyOworCisjaWZkZWYgSEFWRV9JUFY2CisgICAgICBpZiAobGlzdGVuLT5mYW1pbHkgPT0gQUZfSU5FVDYpCisJYWRkcmEuYWRkci5hZGRyNiA9IGFkZHIuaW42LnNpbjZfYWRkcjsKKyNlbmRpZgorCisgICAgICBpZiAoZGFlbW9uLT50ZnRwX2ludGVyZmFjZXMpCisJeworCSAgLyogZGVkaWNhdGVkIHRmdHAgaW50ZXJmYWNlIGxpc3QgKi8KKwkgIGZvciAodG1wID0gZGFlbW9uLT50ZnRwX2ludGVyZmFjZXM7IHRtcDsgdG1wID0gdG1wLT5uZXh0KQorCSAgICBpZiAodG1wLT5uYW1lICYmIHdpbGRjYXJkX21hdGNoKHRtcC0+bmFtZSwgbmFtZSkpCisJICAgICAgYnJlYWs7CisKKwkgIGlmICghdG1wKQorCSAgICByZXR1cm47CisJfQorICAgICAgZWxzZQorCXsKKwkgIC8qIERvIHRoZSBzYW1lIGFzIERIQ1AgKi8KKwkgIGlmICghaWZhY2VfY2hlY2sobGlzdGVuLT5mYW1pbHksICZhZGRyYSwgbmFtZSwgTlVMTCkpCisJICAgIHsKKwkgICAgICBpZiAoIW9wdGlvbl9ib29sKE9QVF9DTEVWRVJCSU5EKSkKKwkJZW51bWVyYXRlX2ludGVyZmFjZXMoMCk7IAorCSAgICAgIGlmICghbG9vcGJhY2tfZXhjZXB0aW9uKGxpc3Rlbi0+dGZ0cGZkLCBsaXN0ZW4tPmZhbWlseSwgJmFkZHJhLCBuYW1lKSAmJgorCQkgICFsYWJlbF9leGNlcHRpb24oaWZfaW5kZXgsIGxpc3Rlbi0+ZmFtaWx5LCAmYWRkcmEpICkKKwkJcmV0dXJuOworCSAgICB9CisJICAKKyNpZmRlZiBIQVZFX0RIQ1AgICAgICAKKwkgIC8qIGFsbG93ZWQgaW50ZXJmYWNlcyBhcmUgdGhlIHNhbWUgYXMgZm9yIERIQ1AgKi8KKwkgIGZvciAodG1wID0gZGFlbW9uLT5kaGNwX2V4Y2VwdDsgdG1wOyB0bXAgPSB0bXAtPm5leHQpCisJICAgIGlmICh0bXAtPm5hbWUgJiYgd2lsZGNhcmRfbWF0Y2godG1wLT5uYW1lLCBuYW1lKSkKKwkgICAgICByZXR1cm47CisjZW5kaWYKKwl9CisKKyAgICAgIHN0cm5jcHkoaWZyLmlmcl9uYW1lLCBuYW1lLCBJRl9OQU1FU0laRSk7CisgICAgICBpZiAoaW9jdGwobGlzdGVuLT50ZnRwZmQsIFNJT0NHSUZNVFUsICZpZnIpICE9IC0xKQorCXsKKwkgIG10dSA9IGlmci5pZnJfbXR1OyAgCisJICBpZiAoZGFlbW9uLT50ZnRwX210dSAhPSAwICYmIGRhZW1vbi0+dGZ0cF9tdHUgPCBtdHUpCisJICAgIG10dSA9IGRhZW1vbi0+dGZ0cF9tdHU7ICAgIAorCX0KKyAgICB9CisKKyAgLyogRmFpbGVkIHRvIGdldCBpbnRlcmZhY2UgbXR1IC0gY2FuIHVzZSBjb25maWd1cmVkIHZhbHVlLiAqLworICBpZiAobXR1ID09IDApCisgICAgbXR1ID0gZGFlbW9uLT50ZnRwX210dTsKKworICBpZiAobmFtZSkKKyAgICB7CisgICAgICAvKiBjaGVjayBmb3IgcGVyLWludGVyZmFjZSBwcmVmaXggKi8gCisgICAgICBmb3IgKHByZWYgPSBkYWVtb24tPmlmX3ByZWZpeDsgcHJlZjsgcHJlZiA9IHByZWYtPm5leHQpCisJaWYgKHN0cmNtcChwcmVmLT5pbnRlcmZhY2UsIG5hbWUpID09IDApCisJICBwcmVmaXggPSBwcmVmLT5wcmVmaXg7ICAKKyAgICB9CisKKyAgaWYgKGxpc3Rlbi0+ZmFtaWx5ID09IEFGX0lORVQpCisgICAgeworICAgICAgYWRkci5pbi5zaW5fcG9ydCA9IGh0b25zKHBvcnQpOworI2lmZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisgICAgICBhZGRyLmluLnNpbl9sZW4gPSBzaXplb2YoYWRkci5pbik7CisjZW5kaWYKKyAgICB9CisjaWZkZWYgSEFWRV9JUFY2CisgIGVsc2UKKyAgICB7CisgICAgICBhZGRyLmluNi5zaW42X3BvcnQgPSBodG9ucyhwb3J0KTsKKyAgICAgIGFkZHIuaW42LnNpbjZfZmxvd2luZm8gPSAwOworICAgICAgYWRkci5pbjYuc2luNl9zY29wZV9pZCA9IDA7CisjaWZkZWYgSEFWRV9TT0NLQUREUl9TQV9MRU4KKyAgICAgIGFkZHIuaW42LnNpbjZfbGVuID0gc2l6ZW9mKGFkZHIuaW42KTsKKyNlbmRpZgorICAgIH0KKyNlbmRpZgorCisgIGlmICghKHRyYW5zZmVyID0gd2hpbmVfbWFsbG9jKHNpemVvZihzdHJ1Y3QgdGZ0cF90cmFuc2ZlcikpKSkKKyAgICByZXR1cm47CisgIAorICBpZiAoKHRyYW5zZmVyLT5zb2NrZmQgPSBzb2NrZXQobGlzdGVuLT5mYW1pbHksIFNPQ0tfREdSQU0sIDApKSA9PSAtMSkKKyAgICB7CisgICAgICBmcmVlKHRyYW5zZmVyKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIAorICB0cmFuc2Zlci0+cGVlciA9IHBlZXI7CisgIHRyYW5zZmVyLT50aW1lb3V0ID0gbm93ICsgMjsKKyAgdHJhbnNmZXItPmJhY2tvZmYgPSAxOworICB0cmFuc2Zlci0+YmxvY2sgPSAxOworICB0cmFuc2Zlci0+YmxvY2tzaXplID0gNTEyOworICB0cmFuc2Zlci0+b2Zmc2V0ID0gMDsKKyAgdHJhbnNmZXItPmZpbGUgPSBOVUxMOworICB0cmFuc2Zlci0+b3B0X2Jsb2Nrc2l6ZSA9IHRyYW5zZmVyLT5vcHRfdHJhbnNpemUgPSAwOworICB0cmFuc2Zlci0+bmV0YXNjaWkgPSB0cmFuc2Zlci0+Y2FycnlsZiA9IDA7CisgCisgIHByZXR0eXByaW50X2FkZHIoJnBlZXIsIGRhZW1vbi0+YWRkcmJ1ZmYpOworICAKKyAgLyogaWYgd2UgaGF2ZSBhIG5haWxlZC1kb3duIHJhbmdlLCBpdGVyYXRlIHVudGlsIHdlIGZpbmQgYSBmcmVlIG9uZS4gKi8KKyAgd2hpbGUgKDEpCisgICAgeworICAgICAgaWYgKGJpbmQodHJhbnNmZXItPnNvY2tmZCwgJmFkZHIuc2EsIHNhX2xlbigmYWRkcikpID09IC0xIHx8CisjaWYgZGVmaW5lZChJUF9NVFVfRElTQ09WRVIpICYmIGRlZmluZWQoSVBfUE1UVURJU0NfRE9OVCkKKwkgIHNldHNvY2tvcHQodHJhbnNmZXItPnNvY2tmZCwgSVBQUk9UT19JUCwgSVBfTVRVX0RJU0NPVkVSLCAmbXR1ZmxhZywgc2l6ZW9mKG10dWZsYWcpKSA9PSAtMSB8fAorI2VuZGlmCisJICAhZml4X2ZkKHRyYW5zZmVyLT5zb2NrZmQpKQorCXsKKwkgIGlmIChlcnJubyA9PSBFQUREUklOVVNFICYmIGRhZW1vbi0+c3RhcnRfdGZ0cF9wb3J0ICE9IDApCisJICAgIHsKKwkgICAgICBpZiAoKytwb3J0IDw9IGRhZW1vbi0+ZW5kX3RmdHBfcG9ydCkKKwkJeyAKKwkJICBpZiAobGlzdGVuLT5mYW1pbHkgPT0gQUZfSU5FVCkKKwkJICAgIGFkZHIuaW4uc2luX3BvcnQgPSBodG9ucyhwb3J0KTsKKyNpZmRlZiBIQVZFX0lQVjYKKwkJICBlbHNlCisJCSAgICAgYWRkci5pbjYuc2luNl9wb3J0ID0gaHRvbnMocG9ydCk7CisjZW5kaWYKKwkJICBjb250aW51ZTsKKwkJfQorCSAgICAgIG15X3N5c2xvZyhNU19URlRQIHwgTE9HX0VSUiwgXygidW5hYmxlIHRvIGdldCBmcmVlIHBvcnQgZm9yIFRGVFAiKSk7CisJICAgIH0KKwkgIGZyZWVfdHJhbnNmZXIodHJhbnNmZXIpOworCSAgcmV0dXJuOworCX0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgCisgIHAgPSBwYWNrZXQgKyAyOworICBlbmQgPSBwYWNrZXQgKyBsZW47CisKKyAgaWYgKG50b2hzKCooKHVuc2lnbmVkIHNob3J0ICopcGFja2V0KSkgIT0gT1BfUlJRIHx8CisgICAgICAhKGZpbGVuYW1lID0gbmV4dCgmcCwgZW5kKSkgfHwKKyAgICAgICEobW9kZSA9IG5leHQoJnAsIGVuZCkpIHx8CisgICAgICAoc3RyY2FzZWNtcChtb2RlLCAib2N0ZXQiKSAhPSAwICYmIHN0cmNhc2VjbXAobW9kZSwgIm5ldGFzY2lpIikgIT0gMCkpCisgICAgeworICAgICAgbGVuID0gdGZ0cF9lcnIoRVJSX0lMTCwgcGFja2V0LCBfKCJ1bnN1cHBvcnRlZCByZXF1ZXN0IGZyb20gJXMiKSwgZGFlbW9uLT5hZGRyYnVmZik7CisgICAgICBpc19lcnIgPSAxOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChzdHJjYXNlY21wKG1vZGUsICJuZXRhc2NpaSIpID09IDApCisJdHJhbnNmZXItPm5ldGFzY2lpID0gMTsKKyAgICAgIAorICAgICAgd2hpbGUgKChvcHQgPSBuZXh0KCZwLCBlbmQpKSkKKwl7CisJICBpZiAoc3RyY2FzZWNtcChvcHQsICJibGtzaXplIikgPT0gMCkKKwkgICAgeworCSAgICAgIGlmICgob3B0ID0gbmV4dCgmcCwgZW5kKSkgJiYgIW9wdGlvbl9ib29sKE9QVF9URlRQX05PQkxPQ0spKQorCQl7CisJCSAgLyogMzIgYnl0ZXMgZm9yIElQLCBVRFAgYW5kIFRGVFAgaGVhZGVycywgNTIgYnl0ZXMgZm9yIElQdjYgKi8KKwkJICBpbnQgb3ZlcmhlYWQgPSAobGlzdGVuLT5mYW1pbHkgPT0gQUZfSU5FVCkgPyAzMiA6IDUyOworCQkgIHRyYW5zZmVyLT5ibG9ja3NpemUgPSBhdG9pKG9wdCk7CisJCSAgaWYgKHRyYW5zZmVyLT5ibG9ja3NpemUgPCAxKQorCQkgICAgdHJhbnNmZXItPmJsb2Nrc2l6ZSA9IDE7CisJCSAgaWYgKHRyYW5zZmVyLT5ibG9ja3NpemUgPiAodW5zaWduZWQpZGFlbW9uLT5wYWNrZXRfYnVmZl9zeiAtIDQpCisJCSAgICB0cmFuc2Zlci0+YmxvY2tzaXplID0gKHVuc2lnbmVkKWRhZW1vbi0+cGFja2V0X2J1ZmZfc3ogLSA0OworCQkgIGlmIChtdHUgIT0gMCAmJiB0cmFuc2Zlci0+YmxvY2tzaXplID4gKHVuc2lnbmVkKW10dSAtIG92ZXJoZWFkKQorCQkgICAgdHJhbnNmZXItPmJsb2Nrc2l6ZSA9ICh1bnNpZ25lZCltdHUgLSBvdmVyaGVhZDsKKwkJICB0cmFuc2Zlci0+b3B0X2Jsb2Nrc2l6ZSA9IDE7CisJCSAgdHJhbnNmZXItPmJsb2NrID0gMDsKKwkJfQorCSAgICB9CisJICBlbHNlIGlmIChzdHJjYXNlY21wKG9wdCwgInRzaXplIikgPT0gMCAmJiBuZXh0KCZwLCBlbmQpICYmICF0cmFuc2Zlci0+bmV0YXNjaWkpCisJICAgIHsKKwkgICAgICB0cmFuc2Zlci0+b3B0X3RyYW5zaXplID0gMTsKKwkgICAgICB0cmFuc2Zlci0+YmxvY2sgPSAwOworCSAgICB9CisJfQorCisgICAgICAvKiBjb3BlIHdpdGggYmFja3NsYXNoZXMgZnJvbSB3aW5kb3dzIGJveGVuLiAqLworICAgICAgZm9yIChwID0gZmlsZW5hbWU7ICpwOyBwKyspCisJaWYgKCpwID09ICdcXCcpCisJICAqcCA9ICcvJzsKKwllbHNlIGlmIChvcHRpb25fYm9vbChPUFRfVEZUUF9MQykpCisJICAqcCA9IHRvbG93ZXIoKnApOworCQkKKyAgICAgIHN0cmNweShkYWVtb24tPm5hbWVidWZmLCAiLyIpOworICAgICAgaWYgKHByZWZpeCkKKwl7CisJICBpZiAocHJlZml4WzBdID09ICcvJykKKwkgICAgZGFlbW9uLT5uYW1lYnVmZlswXSA9IDA7CisJICBzdHJuY2F0KGRhZW1vbi0+bmFtZWJ1ZmYsIHByZWZpeCwgKE1BWEROQU1FLTEpIC0gc3RybGVuKGRhZW1vbi0+bmFtZWJ1ZmYpKTsKKwkgIGlmIChwcmVmaXhbc3RybGVuKHByZWZpeCktMV0gIT0gJy8nKQorCSAgICBzdHJuY2F0KGRhZW1vbi0+bmFtZWJ1ZmYsICIvIiwgKE1BWEROQU1FLTEpIC0gc3RybGVuKGRhZW1vbi0+bmFtZWJ1ZmYpKTsKKworCSAgaWYgKG9wdGlvbl9ib29sKE9QVF9URlRQX0FQUkVGX0lQKSkKKwkgICAgeworCSAgICAgIHNpemVfdCBvbGRsZW4gPSBzdHJsZW4oZGFlbW9uLT5uYW1lYnVmZik7CisJICAgICAgc3RydWN0IHN0YXQgc3RhdGJ1ZjsKKwkgICAgICAKKwkgICAgICBzdHJuY2F0KGRhZW1vbi0+bmFtZWJ1ZmYsIGRhZW1vbi0+YWRkcmJ1ZmYsIChNQVhETkFNRS0xKSAtIHN0cmxlbihkYWVtb24tPm5hbWVidWZmKSk7CisJICAgICAgc3RybmNhdChkYWVtb24tPm5hbWVidWZmLCAiLyIsIChNQVhETkFNRS0xKSAtIHN0cmxlbihkYWVtb24tPm5hbWVidWZmKSk7CisJICAgICAgCisJICAgICAgLyogcmVtb3ZlIHVuaXF1ZS1kaXJlY3RvcnkgaWYgaXQgZG9lc24ndCBleGlzdCAqLworCSAgICAgIGlmIChzdGF0KGRhZW1vbi0+bmFtZWJ1ZmYsICZzdGF0YnVmKSA9PSAtMSB8fCAhU19JU0RJUihzdGF0YnVmLnN0X21vZGUpKQorCQlkYWVtb24tPm5hbWVidWZmW29sZGxlbl0gPSAwOworCSAgICB9CisJICAKKwkgIGlmIChvcHRpb25fYm9vbChPUFRfVEZUUF9BUFJFRl9NQUMpKQorCSAgICB7CisJICAgICAgdW5zaWduZWQgY2hhciAqbWFjYWRkciA9IE5VTEw7CisJICAgICAgdW5zaWduZWQgY2hhciBtYWNidWZbREhDUF9DSEFERFJfTUFYXTsKKwkgICAgICAKKyNpZmRlZiBIQVZFX0RIQ1AKKwkgICAgICBpZiAoZGFlbW9uLT5kaGNwICYmIHBlZXIuc2Euc2FfZmFtaWx5ID09IEFGX0lORVQpCisJICAgICAgICB7CisJCSAgLyogQ2hlY2sgaWYgdGhlIGNsaWVudCBJUCBpcyBpbiBvdXIgbGVhc2UgZGF0YWJhc2UgKi8KKwkJICBzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2UgPSBsZWFzZV9maW5kX2J5X2FkZHIocGVlci5pbi5zaW5fYWRkcik7CisJCSAgaWYgKGxlYXNlICYmIGxlYXNlLT5od2FkZHJfdHlwZSA9PSBBUlBIUkRfRVRIRVIgJiYgbGVhc2UtPmh3YWRkcl9sZW4gPT0gRVRIRVJfQUREUl9MRU4pCisJCSAgICBtYWNhZGRyID0gbGVhc2UtPmh3YWRkcjsKKwkJfQorI2VuZGlmCisJICAgICAgCisJICAgICAgLyogSWYgbm8gbHVjaywgdHJ5IHRvIGZpbmQgaW4gQVJQIHRhYmxlLiBUaGlzIG9ubHkgd29ya3MgaWYgY2xpZW50IGlzIGluIHNhbWUgKFYpTEFOICovCisJICAgICAgaWYgKCFtYWNhZGRyICYmIGZpbmRfbWFjKCZwZWVyLCBtYWNidWYsIDEsIG5vdykgPiAwKQorCQltYWNhZGRyID0gbWFjYnVmOworCSAgICAgIAorCSAgICAgIGlmIChtYWNhZGRyKQorCSAgICAgICAgeworCQkgIHNpemVfdCBvbGRsZW4gPSBzdHJsZW4oZGFlbW9uLT5uYW1lYnVmZik7CisJCSAgc3RydWN0IHN0YXQgc3RhdGJ1ZjsKKworCQkgIHNucHJpbnRmKGRhZW1vbi0+bmFtZWJ1ZmYgKyBvbGRsZW4sIChNQVhETkFNRS0xKSAtIG9sZGxlbiwgIiUuMngtJS4yeC0lLjJ4LSUuMngtJS4yeC0lLjJ4LyIsCisJCQkgICBtYWNhZGRyWzBdLCBtYWNhZGRyWzFdLCBtYWNhZGRyWzJdLCBtYWNhZGRyWzNdLCBtYWNhZGRyWzRdLCBtYWNhZGRyWzVdKTsKKwkJICAKKwkJICAvKiByZW1vdmUgdW5pcXVlLWRpcmVjdG9yeSBpZiBpdCBkb2Vzbid0IGV4aXN0ICovCisJCSAgaWYgKHN0YXQoZGFlbW9uLT5uYW1lYnVmZiwgJnN0YXRidWYpID09IC0xIHx8ICFTX0lTRElSKHN0YXRidWYuc3RfbW9kZSkpCisJCSAgICBkYWVtb24tPm5hbWVidWZmW29sZGxlbl0gPSAwOworCQl9CisJICAgIH0KKwkgIAorCSAgLyogQWJzb2x1dGUgcGF0aG5hbWVzIE9LIGlmIHRoZXkgbWF0Y2ggcHJlZml4ICovCisJICBpZiAoZmlsZW5hbWVbMF0gPT0gJy8nKQorCSAgICB7CisJICAgICAgaWYgKHN0cnN0cihmaWxlbmFtZSwgZGFlbW9uLT5uYW1lYnVmZikgPT0gZmlsZW5hbWUpCisJCWRhZW1vbi0+bmFtZWJ1ZmZbMF0gPSAwOworCSAgICAgIGVsc2UKKwkJZmlsZW5hbWUrKzsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UgaWYgKGZpbGVuYW1lWzBdID09ICcvJykKKwlkYWVtb24tPm5hbWVidWZmWzBdID0gMDsKKyAgICAgIHN0cm5jYXQoZGFlbW9uLT5uYW1lYnVmZiwgZmlsZW5hbWUsIChNQVhETkFNRS0xKSAtIHN0cmxlbihkYWVtb24tPm5hbWVidWZmKSk7CisgICAgICAKKyAgICAgIC8qIGNoZWNrIHBlcm1pc3Npb25zIGFuZCBvcGVuIGZpbGUgKi8KKyAgICAgIGlmICgodHJhbnNmZXItPmZpbGUgPSBjaGVja190ZnRwX2ZpbGVwZXJtKCZsZW4sIHByZWZpeCkpKQorCXsKKwkgIGlmICgobGVuID0gZ2V0X2Jsb2NrKHBhY2tldCwgdHJhbnNmZXIpKSA9PSAtMSkKKwkgICAgbGVuID0gdGZ0cF9lcnJfb29wcyhwYWNrZXQsIGRhZW1vbi0+bmFtZWJ1ZmYpOworCSAgZWxzZQorCSAgICBpc19lcnIgPSAwOworCX0KKyAgICB9CisgIAorICB3aGlsZSAoc2VuZHRvKHRyYW5zZmVyLT5zb2NrZmQsIHBhY2tldCwgbGVuLCAwLCAKKwkJKHN0cnVjdCBzb2NrYWRkciAqKSZwZWVyLCBzYV9sZW4oJnBlZXIpKSA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUik7CisgIAorICBpZiAoaXNfZXJyKQorICAgIGZyZWVfdHJhbnNmZXIodHJhbnNmZXIpOworICBlbHNlCisgICAgeworICAgICAgdHJhbnNmZXItPm5leHQgPSBkYWVtb24tPnRmdHBfdHJhbnM7CisgICAgICBkYWVtb24tPnRmdHBfdHJhbnMgPSB0cmFuc2ZlcjsKKyAgICB9Cit9CisgCitzdGF0aWMgc3RydWN0IHRmdHBfZmlsZSAqY2hlY2tfdGZ0cF9maWxlcGVybShzc2l6ZV90ICpsZW4sIGNoYXIgKnByZWZpeCkKK3sKKyAgY2hhciAqcGFja2V0ID0gZGFlbW9uLT5wYWNrZXQsICpuYW1lYnVmZiA9IGRhZW1vbi0+bmFtZWJ1ZmY7CisgIHN0cnVjdCB0ZnRwX2ZpbGUgKmZpbGU7CisgIHN0cnVjdCB0ZnRwX3RyYW5zZmVyICp0OworICB1aWRfdCB1aWQgPSBnZXRldWlkKCk7CisgIHN0cnVjdCBzdGF0IHN0YXRidWY7CisgIGludCBmZCA9IC0xOworCisgIC8qIHRyaWNrIHRvIGJhbiBtb3Zpbmcgb3V0IG9mIHRoZSBzdWJ0cmVlICovCisgIGlmIChwcmVmaXggJiYgc3Ryc3RyKG5hbWVidWZmLCAiLy4uLyIpKQorICAgIGdvdG8gcGVybTsKKyAgCisgIGlmICgoZmQgPSBvcGVuKG5hbWVidWZmLCBPX1JET05MWSkpID09IC0xKQorICAgIHsKKyAgICAgIGlmIChlcnJubyA9PSBFTk9FTlQpCisJeworCSAgKmxlbiA9IHRmdHBfZXJyKEVSUl9GTkYsIHBhY2tldCwgXygiZmlsZSAlcyBub3QgZm91bmQiKSwgbmFtZWJ1ZmYpOworCSAgcmV0dXJuIE5VTEw7CisJfQorICAgICAgZWxzZSBpZiAoZXJybm8gPT0gRUFDQ0VTKQorCWdvdG8gcGVybTsKKyAgICAgIGVsc2UKKwlnb3RvIG9vcHM7CisgICAgfQorICAKKyAgLyogc3RhdCB0aGUgZmlsZSBkZXNjcmlwdG9yIHRvIGF2b2lkIHN0YXQtPm9wZW4gcmFjZXMgKi8KKyAgaWYgKGZzdGF0KGZkLCAmc3RhdGJ1ZikgPT0gLTEpCisgICAgZ290byBvb3BzOworICAKKyAgLyogcnVubmluZyBhcyByb290LCBtdXN0IGJlIHdvcmxkLXJlYWRhYmxlICovCisgIGlmICh1aWQgPT0gMCkKKyAgICB7CisgICAgICBpZiAoIShzdGF0YnVmLnN0X21vZGUgJiBTX0lST1RIKSkKKwlnb3RvIHBlcm07CisgICAgfQorICAvKiBpbiBzZWN1cmUgbW9kZSwgbXVzdCBiZSBvd25lZCBieSB1c2VyIHJ1bm5pbmcgZG5zbWFzcSAqLworICBlbHNlIGlmIChvcHRpb25fYm9vbChPUFRfVEZUUF9TRUNVUkUpICYmIHVpZCAhPSBzdGF0YnVmLnN0X3VpZCkKKyAgICBnb3RvIHBlcm07CisgICAgICAKKyAgLyogSWYgd2UncmUgZG9pbmcgbWFueSB0cmFuc2ZlcnMgZnJvbSB0aGUgc2FtZSBmaWxlLCBvbmx5IAorICAgICBvcGVuIGl0IG9uY2UgdGhpcyBzYXZlcyBsb3RzIG9mIGZpbGUgZGVzY3JpcHRvcnMgCisgICAgIHdoZW4gbWFzcy1ib290aW5nIGEgYmlnIGNsdXN0ZXIsIGZvciBpbnN0YW5jZS4gCisgICAgIEJlIGNvbnNlcnZhdGl2ZSBhbmQgb25seSBzaGFyZSB3aGVuIGlub2RlIGFuZCBuYW1lIG1hdGNoCisgICAgIHRoaXMga2VlcHMgZXJyb3IgbWVzc2FnZXMgc2FuZS4gKi8KKyAgZm9yICh0ID0gZGFlbW9uLT50ZnRwX3RyYW5zOyB0OyB0ID0gdC0+bmV4dCkKKyAgICBpZiAodC0+ZmlsZS0+ZGV2ID09IHN0YXRidWYuc3RfZGV2ICYmIAorCXQtPmZpbGUtPmlub2RlID09IHN0YXRidWYuc3RfaW5vICYmCisJc3RyY21wKHQtPmZpbGUtPmZpbGVuYW1lLCBuYW1lYnVmZikgPT0gMCkKKyAgICAgIHsKKwljbG9zZShmZCk7CisJdC0+ZmlsZS0+cmVmY291bnQrKzsKKwlyZXR1cm4gdC0+ZmlsZTsKKyAgICAgIH0KKyAgCisgIGlmICghKGZpbGUgPSB3aGluZV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCB0ZnRwX2ZpbGUpICsgc3RybGVuKG5hbWVidWZmKSArIDEpKSkKKyAgICB7CisgICAgICBlcnJubyA9IEVOT01FTTsKKyAgICAgIGdvdG8gb29wczsKKyAgICB9CisKKyAgZmlsZS0+ZmQgPSBmZDsKKyAgZmlsZS0+c2l6ZSA9IHN0YXRidWYuc3Rfc2l6ZTsKKyAgZmlsZS0+ZGV2ID0gc3RhdGJ1Zi5zdF9kZXY7CisgIGZpbGUtPmlub2RlID0gc3RhdGJ1Zi5zdF9pbm87CisgIGZpbGUtPnJlZmNvdW50ID0gMTsKKyAgc3RyY3B5KGZpbGUtPmZpbGVuYW1lLCBuYW1lYnVmZik7CisgIHJldHVybiBmaWxlOworICAKKyBwZXJtOgorICBlcnJubyA9IEVBQ0NFUzsKKyAgKmxlbiA9ICB0ZnRwX2VycihFUlJfUEVSTSwgcGFja2V0LCBfKCJjYW5ub3QgYWNjZXNzICVzOiAlcyIpLCBuYW1lYnVmZik7CisgIGlmIChmZCAhPSAtMSkKKyAgICBjbG9zZShmZCk7CisgIHJldHVybiBOVUxMOworCisgb29wczoKKyAgKmxlbiA9ICB0ZnRwX2Vycl9vb3BzKHBhY2tldCwgbmFtZWJ1ZmYpOworICBpZiAoZmQgIT0gLTEpCisgICAgY2xvc2UoZmQpOworICByZXR1cm4gTlVMTDsKK30KKwordm9pZCBjaGVja190ZnRwX2xpc3RlbmVycyh0aW1lX3Qgbm93KQoreworICBzdHJ1Y3QgdGZ0cF90cmFuc2ZlciAqdHJhbnNmZXIsICp0bXAsICoqdXA7CisgIHNzaXplX3QgbGVuOworICAKKyAgc3RydWN0IGFjayB7CisgICAgdW5zaWduZWQgc2hvcnQgb3AsIGJsb2NrOworICB9ICptZXNzID0gKHN0cnVjdCBhY2sgKilkYWVtb24tPnBhY2tldDsKKyAgCisgIC8qIENoZWNrIGZvciBhY3Rpdml0eSBvbiBhbnkgZXhpc3RpbmcgdHJhbnNmZXJzICovCisgIGZvciAodHJhbnNmZXIgPSBkYWVtb24tPnRmdHBfdHJhbnMsIHVwID0gJmRhZW1vbi0+dGZ0cF90cmFuczsgdHJhbnNmZXI7IHRyYW5zZmVyID0gdG1wKQorICAgIHsKKyAgICAgIHRtcCA9IHRyYW5zZmVyLT5uZXh0OworICAgICAgCisgICAgICBwcmV0dHlwcmludF9hZGRyKCZ0cmFuc2Zlci0+cGVlciwgZGFlbW9uLT5hZGRyYnVmZik7CisgICAgIAorICAgICAgaWYgKHBvbGxfY2hlY2sodHJhbnNmZXItPnNvY2tmZCwgUE9MTElOKSkKKwl7CisJICAvKiB3ZSBvdmVyd3JvdGUgdGhlIGJ1ZmZlci4uLiAqLworCSAgZGFlbW9uLT5zcnZfc2F2ZSA9IE5VTEw7CisJICAKKwkgIGlmICgobGVuID0gcmVjdih0cmFuc2Zlci0+c29ja2ZkLCBkYWVtb24tPnBhY2tldCwgZGFlbW9uLT5wYWNrZXRfYnVmZl9zeiwgMCkpID49IChzc2l6ZV90KXNpemVvZihzdHJ1Y3QgYWNrKSkKKwkgICAgeworCSAgICAgIGlmIChudG9ocyhtZXNzLT5vcCkgPT0gT1BfQUNLICYmIG50b2hzKG1lc3MtPmJsb2NrKSA9PSAodW5zaWduZWQgc2hvcnQpdHJhbnNmZXItPmJsb2NrKSAKKwkJeworCQkgIC8qIEdvdCBhY2ssIGVuc3VyZSB3ZSB0YWtlIHRoZSAocmUpdHJhbnNtaXQgcGF0aCAqLworCQkgIHRyYW5zZmVyLT50aW1lb3V0ID0gbm93OworCQkgIHRyYW5zZmVyLT5iYWNrb2ZmID0gMDsKKwkJICBpZiAodHJhbnNmZXItPmJsb2NrKysgIT0gMCkKKwkJICAgIHRyYW5zZmVyLT5vZmZzZXQgKz0gdHJhbnNmZXItPmJsb2Nrc2l6ZSAtIHRyYW5zZmVyLT5leHBhbnNpb247CisJCX0KKwkgICAgICBlbHNlIGlmIChudG9ocyhtZXNzLT5vcCkgPT0gT1BfRVJSKQorCQl7CisJCSAgY2hhciAqcCA9IGRhZW1vbi0+cGFja2V0ICsgc2l6ZW9mKHN0cnVjdCBhY2spOworCQkgIGNoYXIgKmVuZCA9IGRhZW1vbi0+cGFja2V0ICsgbGVuOworCQkgIGNoYXIgKmVyciA9IG5leHQoJnAsIGVuZCk7CisJCSAgCisJCSAgLyogU2FuaXRpc2UgZXJyb3IgbWVzc2FnZSAqLworCQkgIGlmICghZXJyKQorCQkgICAgZXJyID0gIiI7CisJCSAgZWxzZQorCQkgICAgc2FuaXRpc2UoZXJyKTsKKwkJICAKKwkJICBteV9zeXNsb2coTVNfVEZUUCB8IExPR19FUlIsIF8oImVycm9yICVkICVzIHJlY2VpdmVkIGZyb20gJXMiKSwKKwkJCSAgICAoaW50KW50b2hzKG1lc3MtPmJsb2NrKSwgZXJyLCAKKwkJCSAgICBkYWVtb24tPmFkZHJidWZmKTsJCisJCSAgCisJCSAgLyogR290IGVyciwgZW5zdXJlIHdlIHRha2UgYWJvcnQgKi8KKwkJICB0cmFuc2Zlci0+dGltZW91dCA9IG5vdzsKKwkJICB0cmFuc2Zlci0+YmFja29mZiA9IDEwMDsKKwkJfQorCSAgICB9CisJfQorICAgICAgCisgICAgICBpZiAoZGlmZnRpbWUobm93LCB0cmFuc2Zlci0+dGltZW91dCkgPj0gMC4wKQorCXsKKwkgIGludCBlbmRjb24gPSAwOworCisJICAvKiB0aW1lb3V0LCByZXRyYW5zbWl0ICovCisJICB0cmFuc2Zlci0+dGltZW91dCArPSAxICsgKDE8PHRyYW5zZmVyLT5iYWNrb2ZmKTsKKwkgIAkgIAorCSAgLyogd2Ugb3Zlcndyb3RlIHRoZSBidWZmZXIuLi4gKi8KKwkgIGRhZW1vbi0+c3J2X3NhdmUgPSBOVUxMOworCSAKKwkgIGlmICgobGVuID0gZ2V0X2Jsb2NrKGRhZW1vbi0+cGFja2V0LCB0cmFuc2ZlcikpID09IC0xKQorCSAgICB7CisJICAgICAgbGVuID0gdGZ0cF9lcnJfb29wcyhkYWVtb24tPnBhY2tldCwgdHJhbnNmZXItPmZpbGUtPmZpbGVuYW1lKTsKKwkgICAgICBlbmRjb24gPSAxOworCSAgICB9CisJICAvKiBkb24ndCBjb21wbGFpbiBhYm91dCB0aW1lb3V0IHdoZW4gd2UncmUgYXdhaXRpbmcgdGhlIGxhc3QKKwkgICAgIEFDSywgc29tZSBjbGllbnRzIG5ldmVyIHNlbmQgaXQgKi8KKwkgIGVsc2UgaWYgKCsrdHJhbnNmZXItPmJhY2tvZmYgPiA3ICYmIGxlbiAhPSAwKQorCSAgICB7CisJICAgICAgZW5kY29uID0gMTsKKwkgICAgICBsZW4gPSAwOworCSAgICB9CisKKwkgIGlmIChsZW4gIT0gMCkKKwkgICAgd2hpbGUoc2VuZHRvKHRyYW5zZmVyLT5zb2NrZmQsIGRhZW1vbi0+cGFja2V0LCBsZW4sIDAsIAorCQkJIChzdHJ1Y3Qgc29ja2FkZHIgKikmdHJhbnNmZXItPnBlZXIsIHNhX2xlbigmdHJhbnNmZXItPnBlZXIpKSA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUik7CisJICAKKwkgIGlmIChlbmRjb24gfHwgbGVuID09IDApCisJICAgIHsKKwkgICAgICBzdHJjcHkoZGFlbW9uLT5uYW1lYnVmZiwgdHJhbnNmZXItPmZpbGUtPmZpbGVuYW1lKTsKKwkgICAgICBzYW5pdGlzZShkYWVtb24tPm5hbWVidWZmKTsKKwkgICAgICBteV9zeXNsb2coTVNfVEZUUCB8IExPR19JTkZPLCBlbmRjb24gPyBfKCJmYWlsZWQgc2VuZGluZyAlcyB0byAlcyIpIDogXygic2VudCAlcyB0byAlcyIpLCBkYWVtb24tPm5hbWVidWZmLCBkYWVtb24tPmFkZHJidWZmKTsKKwkgICAgICAvKiB1bmxpbmsgKi8KKwkgICAgICAqdXAgPSB0bXA7CisJICAgICAgaWYgKGVuZGNvbikKKwkJZnJlZV90cmFuc2Zlcih0cmFuc2Zlcik7CisJICAgICAgZWxzZQorCQl7CisJCSAgLyogcHV0IG9uIHF1ZXVlIHRvIGJlIHNlbnQgdG8gc2NyaXB0IGFuZCBkZWxldGVkICovCisJCSAgdHJhbnNmZXItPm5leHQgPSBkYWVtb24tPnRmdHBfZG9uZV90cmFuczsKKwkJICBkYWVtb24tPnRmdHBfZG9uZV90cmFucyA9IHRyYW5zZmVyOworCQl9CisJICAgICAgY29udGludWU7CisJICAgIH0KKwl9CisKKyAgICAgIHVwID0gJnRyYW5zZmVyLT5uZXh0OworICAgIH0gICAgCit9CisKK3N0YXRpYyB2b2lkIGZyZWVfdHJhbnNmZXIoc3RydWN0IHRmdHBfdHJhbnNmZXIgKnRyYW5zZmVyKQoreworICBjbG9zZSh0cmFuc2Zlci0+c29ja2ZkKTsKKyAgaWYgKHRyYW5zZmVyLT5maWxlICYmICgtLXRyYW5zZmVyLT5maWxlLT5yZWZjb3VudCkgPT0gMCkKKyAgICB7CisgICAgICBjbG9zZSh0cmFuc2Zlci0+ZmlsZS0+ZmQpOworICAgICAgZnJlZSh0cmFuc2Zlci0+ZmlsZSk7CisgICAgfQorICBmcmVlKHRyYW5zZmVyKTsKK30KKworc3RhdGljIGNoYXIgKm5leHQoY2hhciAqKnAsIGNoYXIgKmVuZCkKK3sKKyAgY2hhciAqcmV0ID0gKnA7CisgIHNpemVfdCBsZW47CisKKyAgaWYgKCooZW5kLTEpICE9IDAgfHwgCisgICAgICAqcCA9PSBlbmQgfHwKKyAgICAgIChsZW4gPSBzdHJsZW4ocmV0KSkgPT0gMCkKKyAgICByZXR1cm4gTlVMTDsKKworICAqcCArPSBsZW4gKyAxOworICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBzYW5pdGlzZShjaGFyICpidWYpCit7CisgIHVuc2lnbmVkIGNoYXIgKnEsICpyOworICBmb3IgKHEgPSByID0gKHVuc2lnbmVkIGNoYXIgKilidWY7ICpyOyByKyspCisgICAgaWYgKGlzcHJpbnQoKGludCkqcikpCisgICAgICAqKHErKykgPSAqcjsKKyAgKnEgPSAwOworCit9CisKKyNkZWZpbmUgTUFYTUVTU0FHRSA1MDAgLyogbGltaXQgdG8gbWFrZSBwYWNrZXQgPCA1MTIgYnl0ZXMgYW5kIGRlZmluaXRlbHkgc21hbGxlciB0aGFuIGJ1ZmZlciAqLyAKK3N0YXRpYyBzc2l6ZV90IHRmdHBfZXJyKGludCBlcnIsIGNoYXIgKnBhY2tldCwgY2hhciAqbWVzc2FnZSwgY2hhciAqZmlsZSkKK3sKKyAgc3RydWN0IGVycm1lc3MgeworICAgIHVuc2lnbmVkIHNob3J0IG9wLCBlcnI7CisgICAgY2hhciBtZXNzYWdlW107CisgIH0gKm1lc3MgPSAoc3RydWN0IGVycm1lc3MgKilwYWNrZXQ7CisgIHNzaXplX3QgbGVuLCByZXQgPSA0OworICBjaGFyICplcnJzdHIgPSBzdHJlcnJvcihlcnJubyk7CisgIAorICBtZW1zZXQocGFja2V0LCAwLCBkYWVtb24tPnBhY2tldF9idWZmX3N6KTsKKyAgc2FuaXRpc2UoZmlsZSk7CisgIAorICBtZXNzLT5vcCA9IGh0b25zKE9QX0VSUik7CisgIG1lc3MtPmVyciA9IGh0b25zKGVycik7CisgIGxlbiA9IHNucHJpbnRmKG1lc3MtPm1lc3NhZ2UsIE1BWE1FU1NBR0UsICBtZXNzYWdlLCBmaWxlLCBlcnJzdHIpOworICByZXQgKz0gKGxlbiA8IE1BWE1FU1NBR0UpID8gbGVuICsgMSA6IE1BWE1FU1NBR0U7IC8qIGluY2x1ZGUgdGVybWluYXRpbmcgemVybyAqLworICAKKyAgbXlfc3lzbG9nKE1TX1RGVFAgfCBMT0dfRVJSLCAiJXMiLCBtZXNzLT5tZXNzYWdlKTsKKyAgCisgIHJldHVybiAgcmV0OworfQorCitzdGF0aWMgc3NpemVfdCB0ZnRwX2Vycl9vb3BzKGNoYXIgKnBhY2tldCwgY2hhciAqZmlsZSkKK3sKKyAgLyogTWF5IGhhdmUgPjEgcmVmcyB0byBmaWxlLCBzbyBwb3RlbnRpYWxseSBtYW5nbGUgYSBjb3B5IG9mIHRoZSBuYW1lICovCisgIHN0cmNweShkYWVtb24tPm5hbWVidWZmLCBmaWxlKTsKKyAgcmV0dXJuIHRmdHBfZXJyKEVSUl9OT1RERUYsIHBhY2tldCwgXygiY2Fubm90IHJlYWQgJXM6ICVzIiksIGRhZW1vbi0+bmFtZWJ1ZmYpOworfQorCisvKiByZXR1cm4gLTEgZm9yIGVycm9yLCB6ZXJvIGZvciBkb25lLiAqLworc3RhdGljIHNzaXplX3QgZ2V0X2Jsb2NrKGNoYXIgKnBhY2tldCwgc3RydWN0IHRmdHBfdHJhbnNmZXIgKnRyYW5zZmVyKQoreworICBtZW1zZXQocGFja2V0LCAwLCBkYWVtb24tPnBhY2tldF9idWZmX3N6KTsKKyAgCisgIGlmICh0cmFuc2Zlci0+YmxvY2sgPT0gMCkKKyAgICB7CisgICAgICAvKiBzZW5kIE9BQ0sgKi8KKyAgICAgIGNoYXIgKnA7CisgICAgICBzdHJ1Y3Qgb2Fja21lc3MgeworCXVuc2lnbmVkIHNob3J0IG9wOworCWNoYXIgZGF0YVtdOworICAgICAgfSAqbWVzcyA9IChzdHJ1Y3Qgb2Fja21lc3MgKilwYWNrZXQ7CisgICAgICAKKyAgICAgIHAgPSBtZXNzLT5kYXRhOworICAgICAgbWVzcy0+b3AgPSBodG9ucyhPUF9PQUNLKTsKKyAgICAgIGlmICh0cmFuc2Zlci0+b3B0X2Jsb2Nrc2l6ZSkKKwl7CisJICBwICs9IChzcHJpbnRmKHAsICJibGtzaXplIikgKyAxKTsKKwkgIHAgKz0gKHNwcmludGYocCwgIiV1IiwgdHJhbnNmZXItPmJsb2Nrc2l6ZSkgKyAxKTsKKwl9CisgICAgICBpZiAodHJhbnNmZXItPm9wdF90cmFuc2l6ZSkKKwl7CisJICBwICs9IChzcHJpbnRmKHAsInRzaXplIikgKyAxKTsKKwkgIHAgKz0gKHNwcmludGYocCwgIiV1IiwgKHVuc2lnbmVkIGludCl0cmFuc2Zlci0+ZmlsZS0+c2l6ZSkgKyAxKTsKKwl9CisKKyAgICAgIHJldHVybiBwIC0gcGFja2V0OworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIHNlbmQgZGF0YSBwYWNrZXQgKi8KKyAgICAgIHN0cnVjdCBkYXRhbWVzcyB7CisJdW5zaWduZWQgc2hvcnQgb3AsIGJsb2NrOworCXVuc2lnbmVkIGNoYXIgZGF0YVtdOworICAgICAgfSAqbWVzcyA9IChzdHJ1Y3QgZGF0YW1lc3MgKilwYWNrZXQ7CisgICAgICAKKyAgICAgIHNpemVfdCBzaXplID0gdHJhbnNmZXItPmZpbGUtPnNpemUgLSB0cmFuc2Zlci0+b2Zmc2V0OyAKKyAgICAgIAorICAgICAgaWYgKHRyYW5zZmVyLT5vZmZzZXQgPiB0cmFuc2Zlci0+ZmlsZS0+c2l6ZSkKKwlyZXR1cm4gMDsgLyogZmluaXNoZWQgKi8KKyAgICAgIAorICAgICAgaWYgKHNpemUgPiB0cmFuc2Zlci0+YmxvY2tzaXplKQorCXNpemUgPSB0cmFuc2Zlci0+YmxvY2tzaXplOworICAgICAgCisgICAgICBtZXNzLT5vcCA9IGh0b25zKE9QX0RBVEEpOworICAgICAgbWVzcy0+YmxvY2sgPSBodG9ucygodW5zaWduZWQgc2hvcnQpKHRyYW5zZmVyLT5ibG9jaykpOworICAgICAgCisgICAgICBpZiAobHNlZWsodHJhbnNmZXItPmZpbGUtPmZkLCB0cmFuc2Zlci0+b2Zmc2V0LCBTRUVLX1NFVCkgPT0gKG9mZl90KS0xIHx8CisJICAhcmVhZF93cml0ZSh0cmFuc2Zlci0+ZmlsZS0+ZmQsIG1lc3MtPmRhdGEsIHNpemUsIDEpKQorCXJldHVybiAtMTsKKyAgICAgIAorICAgICAgdHJhbnNmZXItPmV4cGFuc2lvbiA9IDA7CisgICAgICAKKyAgICAgIC8qIE1hcCAnXG4nIHRvIENSLUxGIGluIG5ldGFzY2lpIG1vZGUgKi8KKyAgICAgIGlmICh0cmFuc2Zlci0+bmV0YXNjaWkpCisJeworCSAgc2l6ZV90IGk7CisJICBpbnQgbmV3Y2FycnlsZjsKKworCSAgZm9yIChpID0gMCwgbmV3Y2FycnlsZiA9IDA7IGkgPCBzaXplOyBpKyspCisJICAgIGlmIChtZXNzLT5kYXRhW2ldID09ICdcbicgJiYgKCBpICE9IDAgfHwgIXRyYW5zZmVyLT5jYXJyeWxmKSkKKwkgICAgICB7CisJCXRyYW5zZmVyLT5leHBhbnNpb24rKzsKKworCQlpZiAoc2l6ZSAhPSB0cmFuc2Zlci0+YmxvY2tzaXplKQorCQkgIHNpemUrKzsgLyogcm9vbSBpbiB0aGlzIGJsb2NrICovCisJCWVsc2UgIGlmIChpID09IHNpemUgLSAxKQorCQkgIG5ld2NhcnJ5bGYgPSAxOyAvKiBkb24ndCBleHBhbmQgTEYgYWdhaW4gaWYgaXQgbW92ZXMgdG8gdGhlIG5leHQgYmxvY2sgKi8KKwkJICAKKwkJLyogbWFrZSBzcGFjZSBhbmQgaW5zZXJ0IENSICovCisJCW1lbW1vdmUoJm1lc3MtPmRhdGFbaSsxXSwgJm1lc3MtPmRhdGFbaV0sIHNpemUgLSAoaSArIDEpKTsKKwkJbWVzcy0+ZGF0YVtpXSA9ICdccic7CisJCQorCQlpKys7CisJICAgICAgfQorCSAgdHJhbnNmZXItPmNhcnJ5bGYgPSBuZXdjYXJyeWxmOworCSAgCisJfQorCisgICAgICByZXR1cm4gc2l6ZSArIDQ7CisgICAgfQorfQorCisKK2ludCBkb190ZnRwX3NjcmlwdF9ydW4odm9pZCkKK3sKKyAgc3RydWN0IHRmdHBfdHJhbnNmZXIgKnRyYW5zZmVyOworCisgIGlmICgodHJhbnNmZXIgPSBkYWVtb24tPnRmdHBfZG9uZV90cmFucykpCisgICAgeworICAgICAgZGFlbW9uLT50ZnRwX2RvbmVfdHJhbnMgPSB0cmFuc2Zlci0+bmV4dDsKKyNpZmRlZiBIQVZFX1NDUklQVAorICAgICAgcXVldWVfdGZ0cCh0cmFuc2Zlci0+ZmlsZS0+c2l6ZSwgdHJhbnNmZXItPmZpbGUtPmZpbGVuYW1lLCAmdHJhbnNmZXItPnBlZXIpOworI2VuZGlmCisgICAgICBmcmVlX3RyYW5zZmVyKHRyYW5zZmVyKTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKworICByZXR1cm4gMDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL3V0aWwuYyBiL3NyYy91dGlsLmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmExZDQ0OAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy91dGlsLmMKQEAgLTAsMCArMSw3MDEgQEAKKy8qIGRuc21hc3EgaXMgQ29weXJpZ2h0IChjKSAyMDAwLTIwMTcgU2ltb24gS2VsbGV5CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIGRhdGVkIEp1bmUsIDE5OTEsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIHZlcnNpb24gMyBkYXRlZCAyOSBKdW5lLCAyMDA3LgorIAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworLyogVGhlIFNVUkYgcmFuZG9tIG51bWJlciBnZW5lcmF0b3Igd2FzIHRha2VuIGZyb20gZGpiZG5zLTEuMDUsIGJ5IAorICAgRGFuaWVsIEogQmVybnN0ZWluLCB3aGljaCBpcyBwdWJsaWMgZG9tYWluLiAqLworCisKKyNpbmNsdWRlICJkbnNtYXNxLmgiCisKKyNpZmRlZiBIQVZFX0JST0tFTl9SVEMKKyNpbmNsdWRlIDxzeXMvdGltZXMuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChIQVZFX0xJQklETjIpCisjaW5jbHVkZSA8aWRuMi5oPgorI2VsaWYgZGVmaW5lZChIQVZFX0lETikKKyNpbmNsdWRlIDxpZG5hLmg+CisjZW5kaWYKKworLyogU1VSRiByYW5kb20gbnVtYmVyIGdlbmVyYXRvciAqLworCitzdGF0aWMgdTMyIHNlZWRbMzJdOworc3RhdGljIHUzMiBpblsxMl07CitzdGF0aWMgdTMyIG91dFs4XTsKK3N0YXRpYyBpbnQgb3V0bGVmdCA9IDA7CisKK3ZvaWQgcmFuZF9pbml0KCkKK3sKKyAgaW50IGZkID0gb3BlbihSQU5ERklMRSwgT19SRE9OTFkpOworICAKKyAgaWYgKGZkID09IC0xIHx8CisgICAgICAhcmVhZF93cml0ZShmZCwgKHVuc2lnbmVkIGNoYXIgKikmc2VlZCwgc2l6ZW9mKHNlZWQpLCAxKSB8fAorICAgICAgIXJlYWRfd3JpdGUoZmQsICh1bnNpZ25lZCBjaGFyICopJmluLCBzaXplb2YoaW4pLCAxKSkKKyAgICBkaWUoXygiZmFpbGVkIHRvIHNlZWQgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yOiAlcyIpLCBOVUxMLCBFQ19NSVNDKTsKKyAgCisgIGNsb3NlKGZkKTsKK30KKworI2RlZmluZSBST1RBVEUoeCxiKSAoKCh4KSA8PCAoYikpIHwgKCh4KSA+PiAoMzIgLSAoYikpKSkKKyNkZWZpbmUgTVVTSChpLGIpIHggPSB0W2ldICs9ICgoKHggXiBzZWVkW2ldKSArIHN1bSkgXiBST1RBVEUoeCxiKSk7CisKK3N0YXRpYyB2b2lkIHN1cmYodm9pZCkKK3sKKyAgdTMyIHRbMTJdOyB1MzIgeDsgdTMyIHN1bSA9IDA7CisgIGludCByOyBpbnQgaTsgaW50IGxvb3A7CisKKyAgZm9yIChpID0gMDtpIDwgMTI7KytpKSB0W2ldID0gaW5baV0gXiBzZWVkWzEyICsgaV07CisgIGZvciAoaSA9IDA7aSA8IDg7KytpKSBvdXRbaV0gPSBzZWVkWzI0ICsgaV07CisgIHggPSB0WzExXTsKKyAgZm9yIChsb29wID0gMDtsb29wIDwgMjsrK2xvb3ApIHsKKyAgICBmb3IgKHIgPSAwO3IgPCAxNjsrK3IpIHsKKyAgICAgIHN1bSArPSAweDllMzc3OWI5OworICAgICAgTVVTSCgwLDUpIE1VU0goMSw3KSBNVVNIKDIsOSkgTVVTSCgzLDEzKQorICAgICAgTVVTSCg0LDUpIE1VU0goNSw3KSBNVVNIKDYsOSkgTVVTSCg3LDEzKQorICAgICAgTVVTSCg4LDUpIE1VU0goOSw3KSBNVVNIKDEwLDkpIE1VU0goMTEsMTMpCisgICAgfQorICAgIGZvciAoaSA9IDA7aSA8IDg7KytpKSBvdXRbaV0gXj0gdFtpICsgNF07CisgIH0KK30KKwordW5zaWduZWQgc2hvcnQgcmFuZDE2KHZvaWQpCit7CisgIGlmICghb3V0bGVmdCkgCisgICAgeworICAgICAgaWYgKCErK2luWzBdKSBpZiAoISsraW5bMV0pIGlmICghKytpblsyXSkgKytpblszXTsKKyAgICAgIHN1cmYoKTsKKyAgICAgIG91dGxlZnQgPSA4OworICAgIH0KKyAgCisgIHJldHVybiAodW5zaWduZWQgc2hvcnQpIG91dFstLW91dGxlZnRdOworfQorCit1MzIgcmFuZDMyKHZvaWQpCit7CisgaWYgKCFvdXRsZWZ0KSAKKyAgICB7CisgICAgICBpZiAoISsraW5bMF0pIGlmICghKytpblsxXSkgaWYgKCErK2luWzJdKSArK2luWzNdOworICAgICAgc3VyZigpOworICAgICAgb3V0bGVmdCA9IDg7CisgICAgfQorICAKKyAgcmV0dXJuIG91dFstLW91dGxlZnRdOyAKK30KKwordTY0IHJhbmQ2NCh2b2lkKQoreworICBzdGF0aWMgaW50IG91dGxlZnQgPSAwOworCisgIGlmIChvdXRsZWZ0IDwgMikKKyAgICB7CisgICAgICBpZiAoISsraW5bMF0pIGlmICghKytpblsxXSkgaWYgKCErK2luWzJdKSArK2luWzNdOworICAgICAgc3VyZigpOworICAgICAgb3V0bGVmdCA9IDg7CisgICAgfQorICAKKyAgb3V0bGVmdCAtPSAyOworCisgIHJldHVybiAodTY0KW91dFtvdXRsZWZ0KzFdICsgKCgodTY0KW91dFtvdXRsZWZ0XSkgPDwgMzIpOworfQorCisvKiByZXR1cm5zIDIgaWYgbmFtZXMgaXMgT0sgYnV0IGNvbnRhaW5zIG9uZSBvciBtb3JlIHVuZGVyc2NvcmVzICovCitzdGF0aWMgaW50IGNoZWNrX25hbWUoY2hhciAqaW4pCit7CisgIC8qIHJlbW92ZSB0cmFpbGluZyAuIAorICAgICBhbHNvIGZhaWwgZW1wdHkgc3RyaW5nIGFuZCBsYWJlbCA+IDYzIGNoYXJzICovCisgIHNpemVfdCBkb3RnYXAgPSAwLCBsID0gc3RybGVuKGluKTsKKyAgY2hhciBjOworICBpbnQgbm93aGl0ZSA9IDA7CisgIGludCBoYXN1c2NvcmUgPSAwOworICAKKyAgaWYgKGwgPT0gMCB8fCBsID4gTUFYRE5BTUUpIHJldHVybiAwOworICAKKyAgaWYgKGluW2wtMV0gPT0gJy4nKQorICAgIHsKKyAgICAgIGluW2wtMV0gPSAwOworICAgICAgbm93aGl0ZSA9IDE7CisgICAgfQorCisgIGZvciAoOyAoYyA9ICppbik7IGluKyspCisgICAgeworICAgICAgaWYgKGMgPT0gJy4nKQorCWRvdGdhcCA9IDA7CisgICAgICBlbHNlIGlmICgrK2RvdGdhcCA+IE1BWExBQkVMKQorCXJldHVybiAwOworICAgICAgZWxzZSBpZiAoaXNhc2NpaSgodW5zaWduZWQgY2hhciljKSAmJiBpc2NudHJsKCh1bnNpZ25lZCBjaGFyKWMpKSAKKwkvKiBpc2NudHJsIG9ubHkgZ2l2ZXMgZXhwZWN0ZWQgcmVzdWx0cyBmb3IgYXNjaWkgKi8KKwlyZXR1cm4gMDsKKyNpZiAhZGVmaW5lZChIQVZFX0lETikgJiYgIWRlZmluZWQoSEFWRV9MSUJJRE4yKQorICAgICAgZWxzZSBpZiAoIWlzYXNjaWkoKHVuc2lnbmVkIGNoYXIpYykpCisJcmV0dXJuIDA7CisjZW5kaWYKKyAgICAgIGVsc2UgaWYgKGMgIT0gJyAnKQorCXsKKwkgIG5vd2hpdGUgPSAxOworCSAgaWYgKGMgPT0gJ18nKQorCSAgICBoYXN1c2NvcmUgPSAxOworCX0KKyAgICB9CisKKyAgaWYgKCFub3doaXRlKQorICAgIHJldHVybiAwOworCisgIHJldHVybiBoYXN1c2NvcmUgPyAyIDogMTsKK30KKworLyogSG9zdG5hbWVzIGhhdmUgYSBtb3JlIGxpbWl0ZWQgdmFsaWQgY2hhcnNldCB0aGFuIGRvbWFpbiBuYW1lcworICAgc28gY2hlY2sgZm9yIGxlZ2FsIGNoYXIgYS16IEEtWiAwLTkgLSBfIAorICAgTm90ZSB0aGF0IHRoaXMgbWF5IHJlY2VpdmUgYSBGUUROLCBzbyBvbmx5IGNoZWNrIHRoZSBmaXJzdCBsYWJlbCAKKyAgIGZvciB0aGUgdGlnaHRlciBjcml0ZXJpYS4gKi8KK2ludCBsZWdhbF9ob3N0bmFtZShjaGFyICpuYW1lKQoreworICBjaGFyIGM7CisgIGludCBmaXJzdDsKKworICBpZiAoIWNoZWNrX25hbWUobmFtZSkpCisgICAgcmV0dXJuIDA7CisKKyAgZm9yIChmaXJzdCA9IDE7IChjID0gKm5hbWUpOyBuYW1lKyssIGZpcnN0ID0gMCkKKyAgICAvKiBjaGVjayBmb3IgbGVnYWwgY2hhciBhLXogQS1aIDAtOSAtIF8gLiAqLworICAgIHsKKyAgICAgIGlmICgoYyA+PSAnQScgJiYgYyA8PSAnWicpIHx8CisJICAoYyA+PSAnYScgJiYgYyA8PSAneicpIHx8CisJICAoYyA+PSAnMCcgJiYgYyA8PSAnOScpKQorCWNvbnRpbnVlOworCisgICAgICBpZiAoIWZpcnN0ICYmIChjID09ICctJyB8fCBjID09ICdfJykpCisJY29udGludWU7CisgICAgICAKKyAgICAgIC8qIGVuZCBvZiBob3N0bmFtZSBwYXJ0ICovCisgICAgICBpZiAoYyA9PSAnLicpCisJcmV0dXJuIDE7CisgICAgICAKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgCisgIHJldHVybiAxOworfQorICAKK2NoYXIgKmNhbm9uaWNhbGlzZShjaGFyICppbiwgaW50ICpub21lbSkKK3sKKyAgY2hhciAqcmV0ID0gTlVMTDsKKyAgaW50IHJjOworICAKKyAgaWYgKG5vbWVtKQorICAgICpub21lbSA9IDA7CisgIAorICBpZiAoIShyYyA9IGNoZWNrX25hbWUoaW4pKSkKKyAgICByZXR1cm4gTlVMTDsKKyAgCisjaWYgZGVmaW5lZChIQVZFX0xJQklETjIpICYmICghZGVmaW5lZChJRE4yX1ZFUlNJT05fTlVNQkVSKSB8fCBJRE4yX1ZFUlNJT05fTlVNQkVSIDwgMHgwMjAwMDAwMykKKyAgLyogb2xkZXIgbGliaWRuMiBzdHJpcHMgdW5kZXJzY29yZXMsIHNvIGRvbid0IGRvIElETiBwcm9jZXNzaW5nCisgICAgIGlmIHRoZSBuYW1lIGhhcyBhbiB1bmRlcnNjb3JlIChjaGVja19uYW1lKCkgcmV0dXJuZWQgMikgKi8KKyAgaWYgKHJjICE9IDIpCisjZW5kaWYKKyNpZiBkZWZpbmVkKEhBVkVfSUROKSB8fCBkZWZpbmVkKEhBVkVfTElCSUROMikKKyAgICB7CisjICBpZmRlZiBIQVZFX0xJQklETjIKKyAgICAgIHJjID0gaWRuMl90b19hc2NpaV9seihpbiwgJnJldCwgSUROMl9OT05UUkFOU0lUSU9OQUwpOworICAgICAgaWYgKHJjID09IElETjJfRElTQUxMT1dFRCkKKwlyYyA9IGlkbjJfdG9fYXNjaWlfbHooaW4sICZyZXQsIElETjJfVFJBTlNJVElPTkFMKTsKKyMgIGVsc2UKKyAgICAgIHJjID0gaWRuYV90b19hc2NpaV9seihpbiwgJnJldCwgMCk7CisjICBlbmRpZgorICAgICAgaWYgKHJjICE9IElETkFfU1VDQ0VTUykKKwl7CisJICBpZiAocmV0KQorCSAgICBmcmVlKHJldCk7CisJICAKKwkgIGlmIChub21lbSAmJiAocmMgPT0gSUROQV9NQUxMT0NfRVJST1IgfHwgcmMgPT0gSUROQV9ETE9QRU5fRVJST1IpKQorCSAgICB7CisJICAgICAgbXlfc3lzbG9nKExPR19FUlIsIF8oImZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkiKSk7CisJICAgICAgKm5vbWVtID0gMTsKKwkgICAgfQorCSAgCisJICByZXR1cm4gTlVMTDsKKwl9CisgICAgICAKKyAgICAgIHJldHVybiByZXQ7CisgICAgfQorI2VuZGlmCisgIAorICBpZiAoKHJldCA9IHdoaW5lX21hbGxvYyhzdHJsZW4oaW4pKzEpKSkKKyAgICBzdHJjcHkocmV0LCBpbik7CisgIGVsc2UgaWYgKG5vbWVtKQorICAgICpub21lbSA9IDE7ICAgIAorCisgIHJldHVybiByZXQ7Cit9CisKK3Vuc2lnbmVkIGNoYXIgKmRvX3JmYzEwMzVfbmFtZSh1bnNpZ25lZCBjaGFyICpwLCBjaGFyICpzdmFsLCBjaGFyICpsaW1pdCkKK3sKKyAgaW50IGo7CisgIAorICB3aGlsZSAoc3ZhbCAmJiAqc3ZhbCkKKyAgICB7CisgICAgICBpZiAobGltaXQgJiYgcCArIDEgPiAodW5zaWduZWQgY2hhciopbGltaXQpCisgICAgICAgIHJldHVybiBwOworCisgICAgICB1bnNpZ25lZCBjaGFyICpjcCA9IHArKzsKKyAgICAgIGZvciAoaiA9IDA7ICpzdmFsICYmICgqc3ZhbCAhPSAnLicpOyBzdmFsKyssIGorKykKKwl7CisgICAgICAgICAgaWYgKGxpbWl0ICYmIHAgKyAxID4gKHVuc2lnbmVkIGNoYXIqKWxpbWl0KQorICAgICAgICAgICAgcmV0dXJuIHA7CisjaWZkZWYgSEFWRV9ETlNTRUMKKwkgIGlmIChvcHRpb25fYm9vbChPUFRfRE5TU0VDX1ZBTElEKSAmJiAqc3ZhbCA9PSBOQU1FX0VTQ0FQRSkKKwkgICAgKnArKyA9ICgqKCsrc3ZhbCkpLTE7CisJICBlbHNlCisjZW5kaWYJCQorCSAgICAqcCsrID0gKnN2YWw7CisJfQorICAgICAgKmNwICA9IGo7CisgICAgICBpZiAoKnN2YWwpCisJc3ZhbCsrOworICAgIH0KKyAgcmV0dXJuIHA7Cit9CisKKy8qIGZvciB1c2UgZHVyaW5nIHN0YXJ0dXAgKi8KK3ZvaWQgKnNhZmVfbWFsbG9jKHNpemVfdCBzaXplKQoreworICB2b2lkICpyZXQgPSBjYWxsb2MoMSwgc2l6ZSk7CisgIAorICBpZiAoIXJldCkKKyAgICBkaWUoXygiY291bGQgbm90IGdldCBtZW1vcnkiKSwgTlVMTCwgRUNfTk9NRU0pOworICAgICAgCisgIHJldHVybiByZXQ7Cit9ICAgIAorCit2b2lkIHNhZmVfcGlwZShpbnQgKmZkLCBpbnQgcmVhZF9ub2Jsb2NrKQoreworICBpZiAocGlwZShmZCkgPT0gLTEgfHwgCisgICAgICAhZml4X2ZkKGZkWzFdKSB8fAorICAgICAgKHJlYWRfbm9ibG9jayAmJiAhZml4X2ZkKGZkWzBdKSkpCisgICAgZGllKF8oImNhbm5vdCBjcmVhdGUgcGlwZTogJXMiKSwgTlVMTCwgRUNfTUlTQyk7Cit9CisKK3ZvaWQgKndoaW5lX21hbGxvYyhzaXplX3Qgc2l6ZSkKK3sKKyAgdm9pZCAqcmV0ID0gY2FsbG9jKDEsIHNpemUpOworCisgIGlmICghcmV0KQorICAgIG15X3N5c2xvZyhMT0dfRVJSLCBfKCJmYWlsZWQgdG8gYWxsb2NhdGUgJWQgYnl0ZXMiKSwgKGludCkgc2l6ZSk7CisgIAorICByZXR1cm4gcmV0OworfQorCitpbnQgc29ja2FkZHJfaXNlcXVhbCh1bmlvbiBteXNvY2thZGRyICpzMSwgdW5pb24gbXlzb2NrYWRkciAqczIpCit7CisgIGlmIChzMS0+c2Euc2FfZmFtaWx5ID09IHMyLT5zYS5zYV9mYW1pbHkpCisgICAgeyAKKyAgICAgIGlmIChzMS0+c2Euc2FfZmFtaWx5ID09IEFGX0lORVQgJiYKKwkgIHMxLT5pbi5zaW5fcG9ydCA9PSBzMi0+aW4uc2luX3BvcnQgJiYKKwkgIHMxLT5pbi5zaW5fYWRkci5zX2FkZHIgPT0gczItPmluLnNpbl9hZGRyLnNfYWRkcikKKwlyZXR1cm4gMTsKKyNpZmRlZiBIQVZFX0lQVjYgICAgICAKKyAgICAgIGlmIChzMS0+c2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2ICYmCisJICBzMS0+aW42LnNpbjZfcG9ydCA9PSBzMi0+aW42LnNpbjZfcG9ydCAmJgorCSAgczEtPmluNi5zaW42X3Njb3BlX2lkID09IHMyLT5pbjYuc2luNl9zY29wZV9pZCAmJgorCSAgSU42X0FSRV9BRERSX0VRVUFMKCZzMS0+aW42LnNpbjZfYWRkciwgJnMyLT5pbjYuc2luNl9hZGRyKSkKKwlyZXR1cm4gMTsKKyNlbmRpZgorICAgIH0KKyAgcmV0dXJuIDA7Cit9CisKK2ludCBzYV9sZW4odW5pb24gbXlzb2NrYWRkciAqYWRkcikKK3sKKyNpZmRlZiBIQVZFX1NPQ0tBRERSX1NBX0xFTgorICByZXR1cm4gYWRkci0+c2Euc2FfbGVuOworI2Vsc2UKKyNpZmRlZiBIQVZFX0lQVjYKKyAgaWYgKGFkZHItPnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikKKyAgICByZXR1cm4gc2l6ZW9mKGFkZHItPmluNik7CisgIGVsc2UKKyNlbmRpZgorICAgIHJldHVybiBzaXplb2YoYWRkci0+aW4pOyAKKyNlbmRpZgorfQorCisvKiBkb24ndCB1c2Ugc3RyY2FzZWNtcCBhbmQgZnJpZW5kcyBoZXJlIC0gdGhleSBtYXkgYmUgbWVzc2VkIHVwIGJ5IExPQ0FMRSAqLworaW50IGhvc3RuYW1lX2lzZXF1YWwoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYikKK3sKKyAgdW5zaWduZWQgaW50IGMxLCBjMjsKKyAgCisgIGRvIHsKKyAgICBjMSA9ICh1bnNpZ25lZCBjaGFyKSAqYSsrOworICAgIGMyID0gKHVuc2lnbmVkIGNoYXIpICpiKys7CisgICAgCisgICAgaWYgKGMxID49ICdBJyAmJiBjMSA8PSAnWicpCisgICAgICBjMSArPSAnYScgLSAnQSc7CisgICAgaWYgKGMyID49ICdBJyAmJiBjMiA8PSAnWicpCisgICAgICBjMiArPSAnYScgLSAnQSc7CisgICAgCisgICAgaWYgKGMxICE9IGMyKQorICAgICAgcmV0dXJuIDA7CisgIH0gd2hpbGUgKGMxKTsKKyAgCisgIHJldHVybiAxOworfQorCit0aW1lX3QgZG5zbWFzcV90aW1lKHZvaWQpCit7CisjaWZkZWYgSEFWRV9CUk9LRU5fUlRDCisgIHN0cnVjdCB0bXMgZHVtbXk7CisgIHN0YXRpYyBsb25nIHRwcyA9IDA7CisKKyAgaWYgKHRwcyA9PSAwKQorICAgIHRwcyA9IHN5c2NvbmYoX1NDX0NMS19UQ0spOworCisgIHJldHVybiAodGltZV90KSh0aW1lcygmZHVtbXkpL3Rwcyk7CisjZWxzZQorICByZXR1cm4gdGltZShOVUxMKTsKKyNlbmRpZgorfQorCitpbnQgbmV0bWFza19sZW5ndGgoc3RydWN0IGluX2FkZHIgbWFzaykKK3sKKyAgaW50IHplcm9fY291bnQgPSAwOworCisgIHdoaWxlICgweDAgPT0gKG1hc2suc19hZGRyICYgMHgxKSAmJiB6ZXJvX2NvdW50IDwgMzIpIAorICAgIHsKKyAgICAgIG1hc2suc19hZGRyID4+PSAxOworICAgICAgemVyb19jb3VudCsrOworICAgIH0KKyAgCisgIHJldHVybiAzMiAtIHplcm9fY291bnQ7Cit9CisKK2ludCBpc19zYW1lX25ldChzdHJ1Y3QgaW5fYWRkciBhLCBzdHJ1Y3QgaW5fYWRkciBiLCBzdHJ1Y3QgaW5fYWRkciBtYXNrKQoreworICByZXR1cm4gKGEuc19hZGRyICYgbWFzay5zX2FkZHIpID09IChiLnNfYWRkciAmIG1hc2suc19hZGRyKTsKK30gCisKKyNpZmRlZiBIQVZFX0lQVjYKK2ludCBpc19zYW1lX25ldDYoc3RydWN0IGluNl9hZGRyICphLCBzdHJ1Y3QgaW42X2FkZHIgKmIsIGludCBwcmVmaXhsZW4pCit7CisgIGludCBwZmJ5dGVzID0gcHJlZml4bGVuID4+IDM7CisgIGludCBwZmJpdHMgPSBwcmVmaXhsZW4gJiA3OworCisgIGlmIChtZW1jbXAoJmEtPnM2X2FkZHIsICZiLT5zNl9hZGRyLCBwZmJ5dGVzKSAhPSAwKQorICAgIHJldHVybiAwOworCisgIGlmIChwZmJpdHMgPT0gMCB8fAorICAgICAgKGEtPnM2X2FkZHJbcGZieXRlc10gPj4gKDggLSBwZmJpdHMpID09IGItPnM2X2FkZHJbcGZieXRlc10gPj4gKDggLSBwZmJpdHMpKSkKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworLyogcmV0dXJuIGxlYXN0IHNpZ25pZmljYW50IDY0IGJpdHMgaWYgSVB2NiBhZGRyZXNzICovCit1NjQgYWRkcjZwYXJ0KHN0cnVjdCBpbjZfYWRkciAqYWRkcikKK3sKKyAgaW50IGk7CisgIHU2NCByZXQgPSAwOworCisgIGZvciAoaSA9IDg7IGkgPCAxNjsgaSsrKQorICAgIHJldCA9IChyZXQgPDwgOCkgKyBhZGRyLT5zNl9hZGRyW2ldOworCisgIHJldHVybiByZXQ7Cit9CisKK3ZvaWQgc2V0YWRkcjZwYXJ0KHN0cnVjdCBpbjZfYWRkciAqYWRkciwgdTY0IGhvc3QpCit7CisgIGludCBpOworCisgIGZvciAoaSA9IDE1OyBpID49IDg7IGktLSkKKyAgICB7CisgICAgICBhZGRyLT5zNl9hZGRyW2ldID0gaG9zdDsKKyAgICAgIGhvc3QgPSBob3N0ID4+IDg7CisgICAgfQorfQorCisjZW5kaWYKKyAKKworLyogcmV0dXJucyBwb3J0IG51bWJlciBmcm9tIGFkZHJlc3MgKi8KK2ludCBwcmV0dHlwcmludF9hZGRyKHVuaW9uIG15c29ja2FkZHIgKmFkZHIsIGNoYXIgKmJ1ZikKK3sKKyAgaW50IHBvcnQgPSAwOworICAKKyNpZmRlZiBIQVZFX0lQVjYKKyAgaWYgKGFkZHItPnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKQorICAgIHsKKyAgICAgIGluZXRfbnRvcChBRl9JTkVULCAmYWRkci0+aW4uc2luX2FkZHIsIGJ1ZiwgQUREUlNUUkxFTik7CisgICAgICBwb3J0ID0gbnRvaHMoYWRkci0+aW4uc2luX3BvcnQpOworICAgIH0KKyAgZWxzZSBpZiAoYWRkci0+c2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KQorICAgIHsKKyAgICAgIGNoYXIgbmFtZVtJRl9OQU1FU0laRV07CisgICAgICBpbmV0X250b3AoQUZfSU5FVDYsICZhZGRyLT5pbjYuc2luNl9hZGRyLCBidWYsIEFERFJTVFJMRU4pOworICAgICAgaWYgKGFkZHItPmluNi5zaW42X3Njb3BlX2lkICE9IDAgJiYKKwkgIGlmX2luZGV4dG9uYW1lKGFkZHItPmluNi5zaW42X3Njb3BlX2lkLCBuYW1lKSAmJgorCSAgc3RybGVuKGJ1ZikgKyBzdHJsZW4obmFtZSkgKyAyIDw9IEFERFJTVFJMRU4pCisJeworCSAgc3RyY2F0KGJ1ZiwgIiUiKTsKKwkgIHN0cmNhdChidWYsIG5hbWUpOworCX0KKyAgICAgIHBvcnQgPSBudG9ocyhhZGRyLT5pbjYuc2luNl9wb3J0KTsKKyAgICB9CisjZWxzZQorICBzdHJjcHkoYnVmLCBpbmV0X250b2EoYWRkci0+aW4uc2luX2FkZHIpKTsKKyAgcG9ydCA9IG50b2hzKGFkZHItPmluLnNpbl9wb3J0KTsgCisjZW5kaWYKKyAgCisgIHJldHVybiBwb3J0OworfQorCit2b2lkIHByZXR0eXByaW50X3RpbWUoY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgdCkKK3sKKyAgaWYgKHQgPT0gMHhmZmZmZmZmZikKKyAgICBzcHJpbnRmKGJ1ZiwgXygiaW5maW5pdGUiKSk7CisgIGVsc2UKKyAgICB7CisgICAgICB1bnNpZ25lZCBpbnQgeCwgcCA9IDA7CisgICAgICAgaWYgKCh4ID0gdC84NjQwMCkpCisJcCArPSBzcHJpbnRmKCZidWZbcF0sICIldWQiLCB4KTsKKyAgICAgICBpZiAoKHggPSAodC8zNjAwKSUyNCkpCisJcCArPSBzcHJpbnRmKCZidWZbcF0sICIldWgiLCB4KTsKKyAgICAgIGlmICgoeCA9ICh0LzYwKSU2MCkpCisJcCArPSBzcHJpbnRmKCZidWZbcF0sICIldW0iLCB4KTsKKyAgICAgIGlmICgoeCA9IHQlNjApKQorCXAgKz0gc3ByaW50ZigmYnVmW3BdLCAiJXVzIiwgeCk7CisgICAgfQorfQorCisKKy8qIGluIG1heSBlcXVhbCBvdXQsIHdoZW4gbWF4bGVuIG1heSBiZSAtMSAoTm8gbWF4IGxlbikuIAorICAgUmV0dXJuIC0xIGZvciBleHRyYW5lb3VzIG5vLWhleCBjaGFycyBmb3VuZC4gKi8KK2ludCBwYXJzZV9oZXgoY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwgaW50IG1heGxlbiwgCisJICAgICAgdW5zaWduZWQgaW50ICp3aWxkY2FyZF9tYXNrLCBpbnQgKm1hY190eXBlKQoreworICBpbnQgbWFzayA9IDAsIGkgPSAwOworICBjaGFyICpyOworICAgIAorICBpZiAobWFjX3R5cGUpCisgICAgKm1hY190eXBlID0gMDsKKyAgCisgIHdoaWxlIChtYXhsZW4gPT0gLTEgfHwgaSA8IG1heGxlbikKKyAgICB7CisgICAgICBmb3IgKHIgPSBpbjsgKnIgIT0gMCAmJiAqciAhPSAnOicgJiYgKnIgIT0gJy0nICYmICpyICE9ICcgJzsgcisrKQorCWlmICgqciAhPSAnKicgJiYgIWlzeGRpZ2l0KCh1bnNpZ25lZCBjaGFyKSpyKSkKKwkgIHJldHVybiAtMTsKKyAgICAgIAorICAgICAgaWYgKCpyID09IDApCisJbWF4bGVuID0gaTsKKyAgICAgIAorICAgICAgaWYgKHIgIT0gaW4gKQorCXsKKwkgIGlmICgqciA9PSAnLScgJiYgaSA9PSAwICYmIG1hY190eXBlKQorCSAgIHsKKwkgICAgICAqciA9IDA7CisJICAgICAgKm1hY190eXBlID0gc3RydG9sKGluLCBOVUxMLCAxNik7CisJICAgICAgbWFjX3R5cGUgPSBOVUxMOworCSAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgICpyID0gMDsKKwkgICAgICBpZiAoc3RyY21wKGluLCAiKiIpID09IDApCisJCXsKKwkJICBtYXNrID0gKG1hc2sgPDwgMSkgfCAxOworCQkgIGkrKzsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIGludCBqLCBieXRlcyA9ICgxICsgKHIgLSBpbikpLzI7CisJCSAgZm9yIChqID0gMDsgaiA8IGJ5dGVzOyBqKyspCisJCSAgICB7IAorCQkgICAgICBjaGFyIHNhdiA9IHNhdjsKKwkJICAgICAgaWYgKGogPCBieXRlcyAtIDEpCisJCQl7CisJCQkgIHNhdiA9IGluWyhqKzEpKjJdOworCQkJICBpblsoaisxKSoyXSA9IDA7CisJCQl9CisJCSAgICAgIC8qIGNoZWNrcyBhYm92ZSBhbGxvdyBtaXggb2YgaGV4ZGlnaXQgYW5kICosIHdoaWNoCisJCQkgaXMgaWxsZWdhbC4gKi8KKwkJICAgICAgaWYgKHN0cmNocigmaW5baioyXSwgJyonKSkKKwkJCXJldHVybiAtMTsKKwkJICAgICAgb3V0W2ldID0gc3RydG9sKCZpbltqKjJdLCBOVUxMLCAxNik7CisJCSAgICAgIG1hc2sgPSBtYXNrIDw8IDE7CisJCSAgICAgIGlmICgrK2kgPT0gbWF4bGVuKQorCQkJYnJlYWs7IAorCQkgICAgICBpZiAoaiA8IGJ5dGVzIC0gMSkKKwkJCWluWyhqKzEpKjJdID0gc2F2OworCQkgICAgfQorCQl9CisJICAgIH0KKwl9CisgICAgICBpbiA9IHIrMTsKKyAgICB9CisgIAorICBpZiAod2lsZGNhcmRfbWFzaykKKyAgICAqd2lsZGNhcmRfbWFzayA9IG1hc2s7CisKKyAgcmV0dXJuIGk7Cit9CisKKy8qIHJldHVybiAwIGZvciBubyBtYXRjaCwgb3IgKG5vIG1hdGNoZWQgb2N0ZXRzKSArIDEgKi8KK2ludCBtZW1jbXBfbWFza2VkKHVuc2lnbmVkIGNoYXIgKmEsIHVuc2lnbmVkIGNoYXIgKmIsIGludCBsZW4sIHVuc2lnbmVkIGludCBtYXNrKQoreworICBpbnQgaSwgY291bnQ7CisgIGZvciAoY291bnQgPSAxLCBpID0gbGVuIC0gMTsgaSA+PSAwOyBpLS0sIG1hc2sgPSBtYXNrID4+IDEpCisgICAgaWYgKCEobWFzayAmIDEpKQorICAgICAgeworCWlmIChhW2ldID09IGJbaV0pCisJICBjb3VudCsrOworCWVsc2UKKwkgIHJldHVybiAwOworICAgICAgfQorICByZXR1cm4gY291bnQ7Cit9CisKKy8qIF9ub3RlXyBtYXkgY29weSBidWZmZXIgKi8KK2ludCBleHBhbmRfYnVmKHN0cnVjdCBpb3ZlYyAqaW92LCBzaXplX3Qgc2l6ZSkKK3sKKyAgdm9pZCAqbmV3OworCisgIGlmIChzaXplIDw9IChzaXplX3QpaW92LT5pb3ZfbGVuKQorICAgIHJldHVybiAxOworCisgIGlmICghKG5ldyA9IHdoaW5lX21hbGxvYyhzaXplKSkpCisgICAgeworICAgICAgZXJybm8gPSBFTk9NRU07CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgaWYgKGlvdi0+aW92X2Jhc2UpCisgICAgeworICAgICAgbWVtY3B5KG5ldywgaW92LT5pb3ZfYmFzZSwgaW92LT5pb3ZfbGVuKTsKKyAgICAgIGZyZWUoaW92LT5pb3ZfYmFzZSk7CisgICAgfQorCisgIGlvdi0+aW92X2Jhc2UgPSBuZXc7CisgIGlvdi0+aW92X2xlbiA9IHNpemU7CisKKyAgcmV0dXJuIDE7Cit9CisKK2NoYXIgKnByaW50X21hYyhjaGFyICpidWZmLCB1bnNpZ25lZCBjaGFyICptYWMsIGludCBsZW4pCit7CisgIGNoYXIgKnAgPSBidWZmOworICBpbnQgaTsKKyAgIAorICBpZiAobGVuID09IDApCisgICAgc3ByaW50ZihwLCAiPG51bGw+Iik7CisgIGVsc2UKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisgICAgICBwICs9IHNwcmludGYocCwgIiUuMnglcyIsIG1hY1tpXSwgKGkgPT0gbGVuIC0gMSkgPyAiIiA6ICI6Iik7CisgIAorICByZXR1cm4gYnVmZjsKK30KKworLyogcmMgaXMgcmV0dXJuIGZyb20gc2VuZHRvIGFuZCBmcmllbmRzLgorICAgUmV0dXJuIDEgaWYgd2Ugc2hvdWxkIHJldHJ5LgorICAgU2V0IGVycm5vIHRvIHplcm8gaWYgd2Ugc3VjY2VlZGVkLiAqLworaW50IHJldHJ5X3NlbmQoc3NpemVfdCByYykKK3sKKyAgc3RhdGljIGludCByZXRyaWVzID0gMDsKKyAgc3RydWN0IHRpbWVzcGVjIHdhaXRlcjsKKyAgCisgIGlmIChyYyAhPSAtMSkKKyAgICB7CisgICAgICByZXRyaWVzID0gMDsKKyAgICAgIGVycm5vID0gMDsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgCisgIC8qIExpbnV4IGtlcm5lbHMgY2FuIHJldHVybiBFQUdBSU4gaW4gcGVycGV0dWl0eSB3aGVuIGNhbGxpbmcKKyAgICAgc2VuZG1zZygpIGFuZCB0aGUgcmVsZXZhbnQgaW50ZXJmYWNlIGhhcyBnb25lLiBIZXJlIHdlIGxvb3AKKyAgICAgcmV0cnlpbmcgaW4gRUFHQUlOIGZvciAxIHNlY29uZCBtYXgsIHRvIGF2b2lkIHRoaXMgaGFuZ2luZyAKKyAgICAgZG5zbWFzcS4gKi8KKworICBpZiAoZXJybm8gPT0gRUFHQUlOIHx8IGVycm5vID09IEVXT1VMREJMT0NLKQorICAgICB7CisgICAgICAgd2FpdGVyLnR2X3NlYyA9IDA7CisgICAgICAgd2FpdGVyLnR2X25zZWMgPSAxMDAwMDsKKyAgICAgICBuYW5vc2xlZXAoJndhaXRlciwgTlVMTCk7CisgICAgICAgaWYgKHJldHJpZXMrKyA8IDEwMDApCisJIHJldHVybiAxOworICAgICB9CisgIAorICByZXRyaWVzID0gMDsKKyAgCisgIGlmIChlcnJubyA9PSBFSU5UUikKKyAgICByZXR1cm4gMTsKKyAgCisgIHJldHVybiAwOworfQorCitpbnQgcmVhZF93cml0ZShpbnQgZmQsIHVuc2lnbmVkIGNoYXIgKnBhY2tldCwgaW50IHNpemUsIGludCBydykKK3sKKyAgc3NpemVfdCBuLCBkb25lOworICAKKyAgZm9yIChkb25lID0gMDsgZG9uZSA8IHNpemU7IGRvbmUgKz0gbikKKyAgICB7CisgICAgICBkbyB7IAorCWlmIChydykKKwkgIG4gPSByZWFkKGZkLCAmcGFja2V0W2RvbmVdLCAoc2l6ZV90KShzaXplIC0gZG9uZSkpOworCWVsc2UKKwkgIG4gPSB3cml0ZShmZCwgJnBhY2tldFtkb25lXSwgKHNpemVfdCkoc2l6ZSAtIGRvbmUpKTsKKwkKKwlpZiAobiA9PSAwKQorCSAgcmV0dXJuIDA7CisJCisgICAgICB9IHdoaWxlIChyZXRyeV9zZW5kKG4pIHx8IGVycm5vID09IEVOT01FTSB8fCBlcnJubyA9PSBFTk9CVUZTKTsKKworICAgICAgaWYgKGVycm5vICE9IDApCisJcmV0dXJuIDA7CisgICAgfQorICAgICAKKyAgcmV0dXJuIDE7Cit9CisKKy8qIEJhc2ljYWxseSBtYXRjaCBhIHN0cmluZyB2YWx1ZSBhZ2FpbnN0IGEgd2lsZGNhcmQgcGF0dGVybi4gICovCitpbnQgd2lsZGNhcmRfbWF0Y2goY29uc3QgY2hhciogd2lsZGNhcmQsIGNvbnN0IGNoYXIqIG1hdGNoKQoreworICB3aGlsZSAoKndpbGRjYXJkICYmICptYXRjaCkKKyAgICB7CisgICAgICBpZiAoKndpbGRjYXJkID09ICcqJykKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgIGlmICgqd2lsZGNhcmQgIT0gKm1hdGNoKQorICAgICAgICByZXR1cm4gMDsgCisKKyAgICAgICsrd2lsZGNhcmQ7CisgICAgICArK21hdGNoOworICAgIH0KKworICByZXR1cm4gKndpbGRjYXJkID09ICptYXRjaDsKK30KKworLyogVGhlIHNhbWUgYnV0IGNvbXBhcmluZyBhIG1heGltdW0gb2YgTlVNIGNoYXJhY3RlcnMsIGxpa2Ugc3RybmNtcC4gICovCitpbnQgd2lsZGNhcmRfbWF0Y2huKGNvbnN0IGNoYXIqIHdpbGRjYXJkLCBjb25zdCBjaGFyKiBtYXRjaCwgaW50IG51bSkKK3sKKyAgd2hpbGUgKCp3aWxkY2FyZCAmJiAqbWF0Y2ggJiYgbnVtKQorICAgIHsKKyAgICAgIGlmICgqd2lsZGNhcmQgPT0gJyonKQorICAgICAgICByZXR1cm4gMTsKKworICAgICAgaWYgKCp3aWxkY2FyZCAhPSAqbWF0Y2gpCisgICAgICAgIHJldHVybiAwOyAKKworICAgICAgKyt3aWxkY2FyZDsKKyAgICAgICsrbWF0Y2g7CisgICAgICAtLW51bTsKKyAgICB9CisKKyAgcmV0dXJuICghbnVtKSB8fCAoKndpbGRjYXJkID09ICptYXRjaCk7Cit9CmRpZmYgLS1naXQgYS90cnVzdC1hbmNob3JzLmNvbmYgYi90cnVzdC1hbmNob3JzLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY4MDdjZgotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0LWFuY2hvcnMuY29uZgpAQCAtMCwwICsxLDEwIEBACisjIFRoZSByb290IEROU1NFQyB0cnVzdCBhbmNob3IsIHZhbGlkIGFzIGF0IDEwLzAyLzIwMTcKKworIyBOb3RlIHRoYXQgdGhpcyBpcyBhIERTIHJlY29yZCAoaWUgYSBoYXNoIG9mIHRoZSByb290IFpvbmUgU2lnbmluZyBLZXkpIAorIyBJZiB3YXMgZG93bmxvYWRlZCBmcm9tIGh0dHBzOi8vZGF0YS5pYW5hLm9yZy9yb290LWFuY2hvcnMvcm9vdC1hbmNob3JzLnhtbAorCit0cnVzdC1hbmNob3I9LiwxOTAzNiw4LDIsNDlBQUMxMUQ3QjZGNjQ0NjcwMkU1NEExNjA3MzcxNjA3QTFBNDE4NTUyMDBGRDJDRTFDRERFMzJGMjRFOEZCNQordHJ1c3QtYW5jaG9yPS4sMjAzMjYsOCwyLEUwNkQ0NEI4MEI4RjFEMzlBOTVDMEIwRDdDNjVEMDg0NThFODgwNDA5QkJDNjgzNDU3MTA0MjM3QzdGOEVDOEQKKworCisK