VGhpcyBmaWxlIGNvbnRhaW5zIGJyaWVmIGluZm9ybWF0aW9uIGFib3V0IHRoZSBTQ1NJIHRhcGUgZHJpdmVyLgpUaGUgZHJpdmVyIGlzIGN1cnJlbnRseSBtYWludGFpbmVkIGJ5IEthaSBN5Gtpc2FyYSAoZW1haWwKS2FpLk1ha2lzYXJhQGtvbHVtYnVzLmZpKQoKTGFzdCBtb2RpZmllZDogTW9uIE1hciAgNyAyMToxNDo0NCAyMDA1IGJ5IGthaS5tYWtpc2FyYQoKCkJBU0lDUwoKVGhlIGRyaXZlciBpcyBnZW5lcmljLCBpLmUuLCBpdCBkb2VzIG5vdCBjb250YWluIGFueSBjb2RlIHRhaWxvcmVkCnRvIGFueSBzcGVjaWZpYyB0YXBlIGRyaXZlLiBUaGUgdGFwZSBwYXJhbWV0ZXJzIGNhbiBiZSBzcGVjaWZpZWQgd2l0aApvbmUgb2YgdGhlIGZvbGxvd2luZyB0aHJlZSBtZXRob2RzOgoKMS4gRWFjaCB1c2VyIGNhbiBzcGVjaWZ5IHRoZSB0YXBlIHBhcmFtZXRlcnMgaGUvc2hlIHdhbnRzIHRvIHVzZQpkaXJlY3RseSB3aXRoIGlvY3Rscy4gVGhpcyBpcyBhZG1pbmlzdHJhdGl2ZWx5IGEgdmVyeSBzaW1wbGUgYW5kCmZsZXhpYmxlIG1ldGhvZCBhbmQgYXBwbGljYWJsZSB0byBzaW5nbGUtdXNlciB3b3Jrc3RhdGlvbnMuIEhvd2V2ZXIsCmluIGEgbXVsdGl1c2VyIGVudmlyb25tZW50IHRoZSBuZXh0IHVzZXIgZmluZHMgdGhlIHRhcGUgcGFyYW1ldGVycyBpbgpzdGF0ZSB0aGUgcHJldmlvdXMgdXNlciBsZWZ0IHRoZW0uCgoyLiBUaGUgc3lzdGVtIG1hbmFnZXIgKHJvb3QpIGNhbiBkZWZpbmUgZGVmYXVsdCB2YWx1ZXMgZm9yIHNvbWUgdGFwZQpwYXJhbWV0ZXJzLCBsaWtlIGJsb2NrIHNpemUgYW5kIGRlbnNpdHkgdXNpbmcgdGhlIE1UU0VURFJWQlVGRkVSIGlvY3RsLgpUaGVzZSBwYXJhbWV0ZXJzIGNhbiBiZSBwcm9ncmFtbWVkIHRvIGNvbWUgaW50byBlZmZlY3QgZWl0aGVyIHdoZW4gYQpuZXcgdGFwZSBpcyBsb2FkZWQgaW50byB0aGUgZHJpdmUgb3IgaWYgd3JpdGluZyBiZWdpbnMgYXQgdGhlCmJlZ2lubmluZyBvZiB0aGUgdGFwZS4gVGhlIHNlY29uZCBtZXRob2QgaXMgYXBwbGljYWJsZSBpZiB0aGUgdGFwZQpkcml2ZSBwZXJmb3JtcyBhdXRvLWRldGVjdGlvbiBvZiB0aGUgdGFwZSBmb3JtYXQgd2VsbCAobGlrZSBzb21lClFJQy1kcml2ZXMpLiBUaGUgcmVzdWx0IGlzIHRoYXQgYW55IHRhcGUgY2FuIGJlIHJlYWQsIHdyaXRpbmcgY2FuIGJlCmNvbnRpbnVlZCB1c2luZyBleGlzdGluZyBmb3JtYXQsIGFuZCB0aGUgZGVmYXVsdCBmb3JtYXQgaXMgdXNlZCBpZgp0aGUgdGFwZSBpcyByZXdyaXR0ZW4gZnJvbSB0aGUgYmVnaW5uaW5nIChvciBhIG5ldyB0YXBlIGlzIHdyaXR0ZW4KZm9yIHRoZSBmaXJzdCB0aW1lKS4gVGhlIGZpcnN0IG1ldGhvZCBpcyBhcHBsaWNhYmxlIGlmIHRoZSBkcml2ZQpkb2VzIG5vdCBwZXJmb3JtIGF1dG8tZGV0ZWN0aW9uIHdlbGwgZW5vdWdoIGFuZCB0aGVyZSBpcyBhIHNpbmdsZQoic2Vuc2libGUiIG1vZGUgZm9yIHRoZSBkZXZpY2UuIEFuIGV4YW1wbGUgaXMgYSBEQVQgZHJpdmUgdGhhdCBpcwp1c2VkIG9ubHkgaW4gdmFyaWFibGUgYmxvY2sgbW9kZSAoSSBkb24ndCBrbm93IGlmIHRoaXMgaXMgc2Vuc2libGUKb3Igbm90IDotKS4KClRoZSB1c2VyIGNhbiBvdmVycmlkZSB0aGUgcGFyYW1ldGVycyBkZWZpbmVkIGJ5IHRoZSBzeXN0ZW0KbWFuYWdlci4gVGhlIGNoYW5nZXMgcGVyc2lzdCB1bnRpbCB0aGUgZGVmYXVsdHMgYWdhaW4gY29tZSBpbnRvCmVmZmVjdC4KCjMuIEJ5IGRlZmF1bHQsIHVwIHRvIGZvdXIgbW9kZXMgY2FuIGJlIGRlZmluZWQgYW5kIHNlbGVjdGVkIHVzaW5nIHRoZSBtaW5vcgpudW1iZXIgKGJpdHMgNSBhbmQgNikuIFRoZSBudW1iZXIgb2YgbW9kZXMgY2FuIGJlIGNoYW5nZWQgYnkgY2hhbmdpbmcKU1RfTkJSX01PREVfQklUUyBpbiBzdC5oLiBNb2RlIDAgY29ycmVzcG9uZHMgdG8gdGhlIGRlZmF1bHRzIGRpc2N1c3NlZAphYm92ZS4gQWRkaXRpb25hbCBtb2RlcyBhcmUgZG9ybWFudCB1bnRpbCB0aGV5IGFyZSBkZWZpbmVkIGJ5IHRoZQpzeXN0ZW0gbWFuYWdlciAocm9vdCkuIFdoZW4gc3BlY2lmaWNhdGlvbiBvZiBhIG5ldyBtb2RlIGlzIHN0YXJ0ZWQsCnRoZSBjb25maWd1cmF0aW9uIG9mIG1vZGUgMCBpcyB1c2VkIHRvIHByb3ZpZGUgYSBzdGFydGluZyBwb2ludCBmb3IKZGVmaW5pdGlvbiBvZiB0aGUgbmV3IG1vZGUuCgpVc2luZyB0aGUgbW9kZXMgYWxsb3dzIHRoZSBzeXN0ZW0gbWFuYWdlciB0byBnaXZlIHRoZSB1c2VycyBjaG9pY2VzCm92ZXIgc29tZSBvZiB0aGUgYnVmZmVyaW5nIHBhcmFtZXRlcnMgbm90IGRpcmVjdGx5IGFjY2Vzc2libGUgdG8gdGhlCnVzZXJzIChidWZmZXJlZCBhbmQgYXN5bmNocm9ub3VzIHdyaXRlcykuIFRoZSBtb2RlcyBhbHNvIGFsbG93IGNob2ljZXMKYmV0d2VlbiBmb3JtYXRzIGluIG11bHRpLXRhcGUgb3BlcmF0aW9ucyAodGhlIGV4cGxpY2l0bHkgb3ZlcnJpZGRlbgpwYXJhbWV0ZXJzIGFyZSByZXNldCB3aGVuIGEgbmV3IHRhcGUgaXMgbG9hZGVkKS4KCklmIG1vcmUgdGhhbiBvbmUgbW9kZSBpcyB1c2VkLCBhbGwgbW9kZXMgc2hvdWxkIGNvbnRhaW4gZGVmaW5pdGlvbnMKZm9yIHRoZSBzYW1lIHNldCBvZiBwYXJhbWV0ZXJzLgoKTWFueSBVbmljZXMgY29udGFpbiBpbnRlcm5hbCB0YWJsZXMgdGhhdCBhc3NvY2lhdGUgZGlmZmVyZW50IG1vZGVzIHRvCnN1cHBvcnRlZCBkZXZpY2VzLiBUaGUgTGludXggU0NTSSB0YXBlIGRyaXZlciBkb2VzIG5vdCBjb250YWluIHN1Y2gKdGFibGVzIChhbmQgd2lsbCBub3QgZG8gdGhhdCBpbiBmdXR1cmUpLiBJbnN0ZWFkIG9mIHRoYXQsIGEgdXRpbGl0eQpwcm9ncmFtIGNhbiBiZSBtYWRlIHRoYXQgZmV0Y2hlcyB0aGUgaW5xdWlyeSBkYXRhIHNlbnQgYnkgdGhlIGRldmljZSwKc2NhbnMgaXRzIGRhdGFiYXNlLCBhbmQgc2V0cyB1cCB0aGUgbW9kZXMgdXNpbmcgdGhlIGlvY3Rscy4gQW5vdGhlcgphbHRlcm5hdGl2ZSBpcyB0byBtYWtlIGEgc21hbGwgc2NyaXB0IHRoYXQgdXNlcyBtdCB0byBzZXQgdGhlIGRlZmF1bHRzCnRhaWxvcmVkIHRvIHRoZSBzeXN0ZW0uCgpUaGUgZHJpdmVyIHN1cHBvcnRzIGZpeGVkIGFuZCB2YXJpYWJsZSBibG9jayBzaXplICh3aXRoaW4gYnVmZmVyCmxpbWl0cykuIEJvdGggdGhlIGF1dG8tcmV3aW5kIChtaW5vciBlcXVhbHMgZGV2aWNlIG51bWJlcikgYW5kCm5vbi1yZXdpbmQgZGV2aWNlcyAobWlub3IgaXMgMTI4ICsgZGV2aWNlIG51bWJlcikgYXJlIGltcGxlbWVudGVkLgoKSW4gdmFyaWFibGUgYmxvY2sgbW9kZSwgdGhlIGJ5dGUgY291bnQgaW4gd3JpdGUoKSBkZXRlcm1pbmVzIHRoZSBzaXplCm9mIHRoZSBwaHlzaWNhbCBibG9jayBvbiB0YXBlLiBXaGVuIHJlYWRpbmcsIHRoZSBkcml2ZSByZWFkcyB0aGUgbmV4dAp0YXBlIGJsb2NrIGFuZCByZXR1cm5zIHRvIHRoZSB1c2VyIHRoZSBkYXRhIGlmIHRoZSByZWFkKCkgYnl0ZSBjb3VudAppcyBhdCBsZWFzdCB0aGUgYmxvY2sgc2l6ZS4gT3RoZXJ3aXNlLCBlcnJvciBFTk9NRU0gaXMgcmV0dXJuZWQuCgpJbiBmaXhlZCBibG9jayBtb2RlLCB0aGUgZGF0YSB0cmFuc2ZlciBiZXR3ZWVuIHRoZSBkcml2ZSBhbmQgdGhlCmRyaXZlciBpcyBpbiBtdWx0aXBsZXMgb2YgdGhlIGJsb2NrIHNpemUuIFRoZSB3cml0ZSgpIGJ5dGUgY291bnQgbXVzdApiZSBhIG11bHRpcGxlIG9mIHRoZSBibG9jayBzaXplLiBUaGlzIGlzIG5vdCByZXF1aXJlZCB3aGVuIHJlYWRpbmcgYnV0Cm1heSBiZSBhZHZpc2FibGUgZm9yIHBvcnRhYmlsaXR5LgoKU3VwcG9ydCBpcyBwcm92aWRlZCBmb3IgY2hhbmdpbmcgdGhlIHRhcGUgcGFydGl0aW9uIGFuZCBwYXJ0aXRpb25pbmcKb2YgdGhlIHRhcGUgd2l0aCBvbmUgb3IgdHdvIHBhcnRpdGlvbnMuIEJ5IGRlZmF1bHQgc3VwcG9ydCBmb3IKcGFydGl0aW9uZWQgdGFwZSBpcyBkaXNhYmxlZCBmb3IgZWFjaCBkcml2ZXIgYW5kIGl0IGNhbiBiZSBlbmFibGVkCndpdGggdGhlIGlvY3RsIE1UU0VURFJWQlVGRkVSLgoKQnkgZGVmYXVsdCB0aGUgZHJpdmVyIHdyaXRlcyBvbmUgZmlsZW1hcmsgd2hlbiB0aGUgZGV2aWNlIGlzIGNsb3NlZCBhZnRlcgp3cml0aW5nIGFuZCB0aGUgbGFzdCBvcGVyYXRpb24gaGFzIGJlZW4gYSB3cml0ZS4gVHdvIGZpbGVtYXJrcyBjYW4gYmUKb3B0aW9uYWxseSB3cml0dGVuLiBJbiBib3RoIGNhc2VzIGVuZCBvZiBkYXRhIGlzIHNpZ25pZmllZCBieQpyZXR1cm5pbmcgemVybyBieXRlcyBmb3IgdHdvIGNvbnNlY3V0aXZlIHJlYWRzLgoKSWYgcmV3aW5kLCBvZmZsaW5lLCBic2YsIG9yIHNlZWsgaXMgZG9uZSBhbmQgcHJldmlvdXMgdGFwZSBvcGVyYXRpb24gd2FzCndyaXRlLCBhIGZpbGVtYXJrIGlzIHdyaXR0ZW4gYmVmb3JlIG1vdmluZyB0YXBlLgoKVGhlIGNvbXBpbGUgb3B0aW9ucyBhcmUgZGVmaW5lZCBpbiB0aGUgZmlsZSBsaW51eC9kcml2ZXJzL3Njc2kvc3Rfb3B0aW9ucy5oLgoKNC4gSWYgdGhlIG9wZW4gb3B0aW9uIE9fTk9OQkxPQ0sgaXMgdXNlZCwgb3BlbiBzdWNjZWVkcyBldmVuIGlmIHRoZQpkcml2ZSBpcyBub3QgcmVhZHkuIElmIE9fTk9OQkxPQ0sgaXMgbm90IHVzZWQsIHRoZSBkcml2ZXIgd2FpdHMgZm9yCnRoZSBkcml2ZSB0byBiZWNvbWUgcmVhZHkuIElmIHRoaXMgZG9lcyBub3QgaGFwcGVuIGluIFNUX0JMT0NLX1NFQ09ORFMKc2Vjb25kcywgb3BlbiBmYWlscyB3aXRoIHRoZSBlcnJubyB2YWx1ZSBFSU8uIFdpdGggT19OT05CTE9DSyB0aGUKZGV2aWNlIGNhbiBiZSBvcGVuZWQgZm9yIHdyaXRpbmcgZXZlbiBpZiB0aGVyZSBpcyBhIHdyaXRlIHByb3RlY3RlZAp0YXBlIGluIHRoZSBkcml2ZSAoY29tbWFuZHMgdHJ5aW5nIHRvIHdyaXRlIHNvbWV0aGluZyByZXR1cm4gZXJyb3IgaWYKYXR0ZW1wdGVkKS4KCgpNSU5PUiBOVU1CRVJTCgpUaGUgdGFwZSBkcml2ZXIgY3VycmVudGx5IHN1cHBvcnRzIDEyOCBkcml2ZXMgYnkgZGVmYXVsdC4gVGhpcyBudW1iZXIKY2FuIGJlIGluY3JlYXNlZCBieSBlZGl0aW5nIHN0LmggYW5kIHJlY29tcGlsaW5nIHRoZSBkcml2ZXIgaWYKbmVjZXNzYXJ5LiBUaGUgdXBwZXIgbGltaXQgaXMgMl4xNyBkcml2ZXMgaWYgNCBtb2RlcyBmb3IgZWFjaCBkcml2ZQphcmUgdXNlZC4KClRoZSBtaW5vciBudW1iZXJzIGNvbnNpc3Qgb2YgdGhlIGZvbGxvd2luZyBiaXQgZmllbGRzOgoKZGV2X3VwcGVyIG5vbi1yZXcgbW9kZSBkZXYtbG93ZXIKICAyMCAtICA4ICAgICA3ICAgIDYgNSAgNCAgICAgIDAKVGhlIG5vbi1yZXdpbmQgYml0IGlzIGFsd2F5cyBiaXQgNyAodGhlIHVwcGVybW9zdCBiaXQgaW4gdGhlIGxvd2VybW9zdApieXRlKS4gVGhlIGJpdHMgZGVmaW5pbmcgdGhlIG1vZGUgYXJlIGJlbG93IHRoZSBub24tcmV3aW5kIGJpdC4gVGhlCnJlbWFpbmluZyBiaXRzIGRlZmluZSB0aGUgdGFwZSBkZXZpY2UgbnVtYmVyLiBUaGlzIG51bWJlcmluZyBpcwpiYWNrd2FyZCBjb21wYXRpYmxlIHdpdGggdGhlIG51bWJlcmluZyB1c2VkIHdoZW4gdGhlIG1pbm9yIG51bWJlciB3YXMKb25seSA4IGJpdHMgd2lkZS4KCgpTWVNGUyBTVVBQT1JUCgpUaGUgZHJpdmVyIGNyZWF0ZXMgdGhlIGRpcmVjdG9yeSAvc3lzL2NsYXNzL3Njc2lfdGFwZSBhbmQgcG9wdWxhdGVzIGl0IHdpdGgKZGlyZWN0b3JpZXMgY29ycmVzcG9uZGluZyB0byB0aGUgZXhpc3RpbmcgdGFwZSBkZXZpY2VzLiBUaGVyZSBhcmUgYXV0b3Jld2luZAphbmQgbm9uLXJld2luZCBlbnRyaWVzIGZvciBlYWNoIG1vZGUuIFRoZSBuYW1lcyBhcmUgc3R4eSBhbmQgbnN0eHksIHdoZXJlIHgKaXMgdGhlIHRhcGUgbnVtYmVyIGFuZCB5IGEgY2hhcmFjdGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1vZGUgKG5vbmUsIGwsIG0sCmEpLiBGb3IgZXhhbXBsZSwgdGhlIGRpcmVjdG9yaWVzIGZvciB0aGUgZmlyc3QgdGFwZSBkZXZpY2UgYXJlIChhc3N1bWluZyBmb3VyCm1vZGVzKTogc3QwICBuc3QwICBzdDBsICBuc3QwbCAgc3QwbSAgbnN0MG0gIHN0MGEgIG5zdDBhLgoKRWFjaCBkaXJlY3RvcnkgY29udGFpbnMgdGhlIGVudHJpZXM6IGRlZmF1bHRfYmxrc2l6ZSAgZGVmYXVsdF9jb21wcmVzc2lvbgpkZWZhdWx0X2RlbnNpdHkgIGRlZmluZWQgIGRldiAgZGV2aWNlICBkcml2ZXIuIFRoZSBmaWxlICdkZWZpbmVkJyBjb250YWlucyAxCmlmIHRoZSBtb2RlIGlzIGRlZmluZWQgYW5kIHplcm8gaWYgbm90IGRlZmluZWQuIFRoZSBmaWxlcyAnZGVmYXVsdF8qJyBjb250YWluCnRoZSBkZWZhdWx0cyBzZXQgYnkgdGhlIHVzZXIuIFRoZSB2YWx1ZSAtMSBtZWFucyB0aGUgZGVmYXVsdCBpcyBub3Qgc2V0LiBUaGUKZmlsZSAnZGV2JyBjb250YWlucyB0aGUgZGV2aWNlIG51bWJlcnMgY29ycmVzcG9uZGluZyB0byB0aGlzIGRldmljZS4gVGhlIGxpbmtzCidkZXZpY2UnIGFuZCAnZHJpdmVyJyBwb2ludCB0byB0aGUgU0NTSSBkZXZpY2UgYW5kIGRyaXZlciBlbnRyaWVzLgoKQSBsaW5rIG5hbWVkICd0YXBlJyBpcyBtYWRlIGZyb20gdGhlIFNDU0kgZGV2aWNlIGRpcmVjdG9yeSB0byB0aGUgY2xhc3MKZGlyZWN0b3J5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1vZGUgMCBhdXRvLXJld2luZCBkZXZpY2UgKGUuZy4sIHN0MCkuIAoKCkJTRCBBTkQgU1lTIFYgU0VNQU5USUNTCgpUaGUgdXNlciBjYW4gY2hvb3NlIGJldHdlZW4gdGhlc2UgdHdvIGJlaGF2aW91cnMgb2YgdGhlIHRhcGUgZHJpdmVyIGJ5CmRlZmluaW5nIHRoZSB2YWx1ZSBvZiB0aGUgc3ltYm9sIFNUX1NZU1YuIFRoZSBzZW1hbnRpY3MgZGlmZmVyIHdoZW4gYQpmaWxlIGJlaW5nIHJlYWQgaXMgY2xvc2VkLiBUaGUgQlNEIHNlbWFudGljcyBsZWF2ZXMgdGhlIHRhcGUgd2hlcmUgaXQKY3VycmVudGx5IGlzIHdoZXJlYXMgdGhlIFNZUyBWIHNlbWFudGljcyBtb3ZlcyB0aGUgdGFwZSBwYXN0IHRoZSBuZXh0CmZpbGVtYXJrIHVubGVzcyB0aGUgZmlsZW1hcmsgaGFzIGp1c3QgYmVlbiBjcm9zc2VkLgoKVGhlIGRlZmF1bHQgaXMgQlNEIHNlbWFudGljcy4KCgpCVUZGRVJJTkcKClRoZSBkcml2ZXIgdHJpZXMgdG8gZG8gdHJhbnNmZXJzIGRpcmVjdGx5IHRvL2Zyb20gdXNlciBzcGFjZS4gSWYgdGhpcwppcyBub3QgcG9zc2libGUsIGEgZHJpdmVyIGJ1ZmZlciBhbGxvY2F0ZWQgYXQgcnVuLXRpbWUgaXMgdXNlZC4gSWYKZGlyZWN0IGkvbyBpcyBub3QgcG9zc2libGUgZm9yIHRoZSB3aG9sZSB0cmFuc2ZlciwgdGhlIGRyaXZlciBidWZmZXIKaXMgdXNlZCAoaS5lLiwgYm91bmNlIGJ1ZmZlcnMgZm9yIGluZGl2aWR1YWwgcGFnZXMgYXJlIG5vdAp1c2VkKS4gRGlyZWN0IGkvbyBjYW4gYmUgaW1wb3NzaWJsZSBiZWNhdXNlIG9mIHNldmVyYWwgcmVhc29ucywgZS5nLjoKLSBvbmUgb3IgbW9yZSBwYWdlcyBhcmUgYXQgYWRkcmVzc2VzIG5vdCByZWFjaGFibGUgYnkgdGhlIEhCQQotIHRoZSBudW1iZXIgb2YgcGFnZXMgaW4gdGhlIHRyYW5zZmVyIGV4Y2VlZHMgdGhlIG51bWJlciBvZgogIHNjYXR0ZXIvZ2F0aGVyIHNlZ21lbnRzIHBlcm1pdHRlZCBieSB0aGUgSEJBCi0gb25lIG9yIG1vcmUgcGFnZXMgY2FuJ3QgYmUgbG9ja2VkIGludG8gbWVtb3J5IChzaG91bGQgbm90IGhhcHBlbiBpbgogIGFueSByZWFzb25hYmxlIHNpdHVhdGlvbikKClRoZSBzaXplIG9mIHRoZSBkcml2ZXIgYnVmZmVycyBpcyBhbHdheXMgYXQgbGVhc3Qgb25lIHRhcGUgYmxvY2suIEluIGZpeGVkCmJsb2NrIG1vZGUsIHRoZSBtaW5pbXVtIGJ1ZmZlciBzaXplIGlzIGRlZmluZWQgKGluIDEwMjQgYnl0ZSB1bml0cykgYnkKU1RfRklYRURfQlVGRkVSX0JMT0NLUy4gV2l0aCBzbWFsbCBibG9jayBzaXplIHRoaXMgYWxsb3dzIGJ1ZmZlcmluZyBvZgpzZXZlcmFsIGJsb2NrcyBhbmQgdXNpbmcgb25lIFNDU0kgcmVhZCBvciB3cml0ZSB0byB0cmFuc2ZlciBhbGwgb2YgdGhlCmJsb2Nrcy4gQnVmZmVyaW5nIG9mIGRhdGEgYWNyb3NzIHdyaXRlIGNhbGxzIGluIGZpeGVkIGJsb2NrIG1vZGUgaXMKYWxsb3dlZCBpZiBTVF9CVUZGRVJfV1JJVEVTIGlzIG5vbi16ZXJvIGFuZCBkaXJlY3QgaS9vIGlzIG5vdCB1c2VkLgpCdWZmZXIgYWxsb2NhdGlvbiB1c2VzIGNodW5rcyBvZiBtZW1vcnkgaGF2aW5nIHNpemVzIDJebiAqIChwYWdlCnNpemUpLiBCZWNhdXNlIG9mIHRoaXMgdGhlIGFjdHVhbCBidWZmZXIgc2l6ZSBtYXkgYmUgbGFyZ2VyIHRoYW4gdGhlCm1pbmltdW0gYWxsb3dhYmxlIGJ1ZmZlciBzaXplLgoKTk9URSB0aGF0IGlmIGRpcmVjdCBpL28gaXMgdXNlZCwgdGhlIHNtYWxsIHdyaXRlcyBhcmUgbm90IGJ1ZmZlcmVkLiBUaGlzIG1heQpjYXVzZSBhIHN1cnByaXNlIHdoZW4gbW92aW5nIGZyb20gMi40LiBUaGVyZSBzbWFsbCB3cml0ZXMgKGUuZy4sIHRhciB3aXRob3V0Ci1iIG9wdGlvbikgbWF5IGhhdmUgaGFkIGdvb2QgdGhyb3VnaHB1dCBidXQgdGhpcyBpcyBub3QgdHJ1ZSBhbnkgbW9yZSB3aXRoCjIuNi4gRGlyZWN0IGkvbyBjYW4gYmUgdHVybmVkIG9mZiB0byBzb2x2ZSB0aGlzIHByb2JsZW0gYnV0IGEgYmV0dGVyIHNvbHV0aW9uCmlzIHRvIHVzZSBiaWdnZXIgd3JpdGUoKSBieXRlIGNvdW50cyAoZS5nLiwgdGFyIC1iIDY0KS4KCkFzeW5jaHJvbm91cyB3cml0aW5nLiBXcml0aW5nIHRoZSBidWZmZXIgY29udGVudHMgdG8gdGhlIHRhcGUgaXMKc3RhcnRlZCBhbmQgdGhlIHdyaXRlIGNhbGwgcmV0dXJucyBpbW1lZGlhdGVseS4gVGhlIHN0YXR1cyBpcyBjaGVja2VkCmF0IHRoZSBuZXh0IHRhcGUgb3BlcmF0aW9uLiBBc3luY2hyb25vdXMgd3JpdGVzIGFyZSBub3QgZG9uZSB3aXRoCmRpcmVjdCBpL28gYW5kIG5vdCBpbiBmaXhlZCBibG9jayBtb2RlLgoKQnVmZmVyZWQgd3JpdGVzIGFuZCBhc3luY2hyb25vdXMgd3JpdGVzIG1heSBpbiBzb21lIHJhcmUgY2FzZXMgY2F1c2UKcHJvYmxlbXMgaW4gbXVsdGl2b2x1bWUgb3BlcmF0aW9ucyBpZiB0aGVyZSBpcyBub3QgZW5vdWdoIHNwYWNlIG9uIHRoZQp0YXBlIGFmdGVyIHRoZSBlYXJseS13YXJuaW5nIG1hcmsgdG8gZmx1c2ggdGhlIGRyaXZlciBidWZmZXIuCgpSZWFkIGFoZWFkIGZvciBmaXhlZCBibG9jayBtb2RlIChTVF9SRUFEX0FIRUFEKS4gRmlsbGluZyB0aGUgYnVmZmVyIGlzCmF0dGVtcHRlZCBldmVuIGlmIHRoZSB1c2VyIGRvZXMgbm90IHdhbnQgdG8gZ2V0IGFsbCBvZiB0aGUgZGF0YSBhdAp0aGlzIHJlYWQgY29tbWFuZC4gU2hvdWxkIGJlIGRpc2FibGVkIGZvciB0aG9zZSBkcml2ZXMgdGhhdCBkb24ndCBsaWtlCmEgZmlsZW1hcmsgdG8gdHJ1bmNhdGUgYSByZWFkIHJlcXVlc3Qgb3IgdGhhdCBkb24ndCBsaWtlIGJhY2tzcGFjaW5nLgoKU2NhdHRlci9nYXRoZXIgYnVmZmVycyAoYnVmZmVycyB0aGF0IGNvbnNpc3Qgb2YgY2h1bmtzIG5vbi1jb250aWd1b3VzCmluIHRoZSBwaHlzaWNhbCBtZW1vcnkpIGFyZSB1c2VkIGlmIGNvbnRpZ3VvdXMgYnVmZmVycyBjYW4ndCBiZQphbGxvY2F0ZWQuIFRvIHN1cHBvcnQgYWxsIFNDU0kgYWRhcHRlcnMgKGluY2x1ZGluZyB0aG9zZSBub3QKc3VwcG9ydGluZyBzY2F0dGVyL2dhdGhlciksIGJ1ZmZlciBhbGxvY2F0aW9uIGlzIHVzaW5nIHRoZSBmb2xsb3dpbmcKdGhyZWUga2luZHMgb2YgY2h1bmtzOgoxLiBUaGUgaW5pdGlhbCBzZWdtZW50IHRoYXQgaXMgdXNlZCBmb3IgYWxsIFNDU0kgYWRhcHRlcnMgaW5jbHVkaW5nCnRob3NlIG5vdCBzdXBwb3J0aW5nIHNjYXR0ZXIvZ2F0aGVyLiBUaGUgc2l6ZSBvZiB0aGlzIGJ1ZmZlciB3aWxsIGJlCihQQUdFX1NJWkUgPDwgU1RfRklSU1RfT1JERVIpIGJ5dGVzIGlmIHRoZSBzeXN0ZW0gY2FuIGdpdmUgYSBjaHVuayBvZgp0aGlzIHNpemUgKGFuZCBpdCBpcyBub3QgbGFyZ2VyIHRoYW4gdGhlIGJ1ZmZlciBzaXplIHNwZWNpZmllZCBieQpTVF9CVUZGRVJfQkxPQ0tTKS4gSWYgdGhpcyBzaXplIGlzIG5vdCBhdmFpbGFibGUsIHRoZSBkcml2ZXIgaGFsdmVzCnRoZSBzaXplIGFuZCB0cmllcyBhZ2FpbiB1bnRpbCB0aGUgc2l6ZSBvZiBvbmUgcGFnZS4gVGhlIGRlZmF1bHQKc2V0dGluZ3MgaW4gc3Rfb3B0aW9ucy5oIG1ha2UgdGhlIGRyaXZlciB0byB0cnkgdG8gYWxsb2NhdGUgYWxsIG9mIHRoZQpidWZmZXIgYXMgb25lIGNodW5rLgoyLiBUaGUgc2NhdHRlci9nYXRoZXIgc2VnbWVudHMgdG8gZmlsbCB0aGUgc3BlY2lmaWVkIGJ1ZmZlciBzaXplIGFyZQphbGxvY2F0ZWQgc28gdGhhdCBhcyBtYW55IHNlZ21lbnRzIGFzIHBvc3NpYmxlIGFyZSB1c2VkIGJ1dCB0aGUgbnVtYmVyCm9mIHNlZ21lbnRzIGRvZXMgbm90IGV4Y2VlZCBTVF9GSVJTVF9TRy4KMy4gVGhlIHJlbWFpbmluZyBzZWdtZW50cyBiZXR3ZWVuIFNUX01BWF9TRyAob3IgdGhlIG1vZHVsZSBwYXJhbWV0ZXIKbWF4X3NnX3NlZ3MpIGFuZCB0aGUgbnVtYmVyIG9mIHNlZ21lbnRzIHVzZWQgaW4gcGhhc2VzIDEgYW5kIDIKYXJlIHVzZWQgdG8gZXh0ZW5kIHRoZSBidWZmZXIgYXQgcnVuLXRpbWUgaWYgdGhpcyBpcyBuZWNlc3NhcnkuIFRoZQpudW1iZXIgb2Ygc2NhdHRlci9nYXRoZXIgc2VnbWVudHMgYWxsb3dlZCBmb3IgdGhlIFNDU0kgYWRhcHRlciBpcyBub3QKZXhjZWVkZWQgaWYgaXQgaXMgc21hbGxlciB0aGFuIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzY2F0dGVyL2dhdGhlcgpzZWdtZW50cyBzcGVjaWZpZWQuIElmIHRoZSBtYXhpbXVtIG51bWJlciBhbGxvd2VkIGZvciB0aGUgU0NTSSBhZGFwdGVyCmlzIHNtYWxsZXIgdGhhbiB0aGUgbnVtYmVyIG9mIHNlZ21lbnRzIHVzZWQgaW4gcGhhc2VzIDEgYW5kIDIsCmV4dGVuZGluZyB0aGUgYnVmZmVyIHdpbGwgYWx3YXlzIGZhaWwuCgoKRU9NIEJFSEFWSU9VUiBXSEVOIFdSSVRJTkcKCldoZW4gdGhlIGVuZCBvZiBtZWRpdW0gZWFybHkgd2FybmluZyBpcyBlbmNvdW50ZXJlZCwgdGhlIGN1cnJlbnQgd3JpdGUKaXMgZmluaXNoZWQgYW5kIHRoZSBudW1iZXIgb2YgYnl0ZXMgaXMgcmV0dXJuZWQuIFRoZSBuZXh0IHdyaXRlCnJldHVybnMgLTEgYW5kIGVycm5vIGlzIHNldCB0byBFTk9TUEMuIFRvIGVuYWJsZSB3cml0aW5nIGEgdHJhaWxlciwKdGhlIG5leHQgd3JpdGUgaXMgYWxsb3dlZCB0byBwcm9jZWVkIGFuZCwgaWYgc3VjY2Vzc2Z1bCwgdGhlIG51bWJlciBvZgpieXRlcyBpcyByZXR1cm5lZC4gQWZ0ZXIgdGhpcywgLTEgYW5kIHRoZSBudW1iZXIgb2YgYnl0ZXMgYXJlCmFsdGVybmF0ZWx5IHJldHVybmVkIHVudGlsIHRoZSBwaHlzaWNhbCBlbmQgb2YgbWVkaXVtIChvciBzb21lIG90aGVyCmVycm9yKSBpcyBlbmNvdW50ZXJlZC4KCgpNT0RVTEUgUEFSQU1FVEVSUwoKVGhlIGJ1ZmZlciBzaXplLCB3cml0ZSB0aHJlc2hvbGQsIGFuZCB0aGUgbWF4aW11bSBudW1iZXIgb2YgYWxsb2NhdGVkIGJ1ZmZlcnMKYXJlIGNvbmZpZ3VyYWJsZSB3aGVuIHRoZSBkcml2ZXIgaXMgbG9hZGVkIGFzIGEgbW9kdWxlLiBUaGUga2V5d29yZHMgYXJlOgoKYnVmZmVyX2ticz14eHggICAgICAgICAgICAgdGhlIGJ1ZmZlciBzaXplIGZvciBmaXhlZCBibG9jayBtb2RlIGlzIHNldAoJCQkgICB0byB4eHgga2lsb2J5dGVzCndyaXRlX3RocmVzaG9sZF9rYnM9eHh4ICAgIHRoZSB3cml0ZSB0aHJlc2hvbGQgaW4ga2lsb2J5dGVzIHNldCB0byB4eHgKbWF4X3NnX3NlZ3M9eHh4CQkgICB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc2NhdHRlci9nYXRoZXIKCQkJICAgc2VnbWVudHMKdHJ5X2RpcmVjdF9pbz14CQkgICB0cnkgZGlyZWN0IHRyYW5zZmVyIGJldHdlZW4gdXNlciBidWZmZXIgYW5kCgkJCSAgIHRhcGUgZHJpdmUgaWYgdGhpcyBpcyBub24temVybwoKTm90ZSB0aGF0IGlmIHRoZSBidWZmZXIgc2l6ZSBpcyBjaGFuZ2VkIGJ1dCB0aGUgd3JpdGUgdGhyZXNob2xkIGlzIG5vdApzZXQsIHRoZSB3cml0ZSB0aHJlc2hvbGQgaXMgc2V0IHRvIHRoZSBuZXcgYnVmZmVyIHNpemUgLSAyIGtCLgoKCkJPT1QgVElNRSBDT05GSUdVUkFUSU9OCgpJZiB0aGUgZHJpdmVyIGlzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCwgdGhlIHNhbWUgcGFyYW1ldGVycyBjYW4gYmUKYWxzbyBzZXQgdXNpbmcsIGUuZy4sIHRoZSBMSUxPIGNvbW1hbmQgbGluZS4gVGhlIHByZWZlcnJlZCBzeW50YXggaXMKaXMgdG8gdXNlIHRoZSBzYW1lIGtleXdvcmQgdXNlZCB3aGVuIGxvYWRpbmcgYXMgbW9kdWxlIGJ1dCBwcmVwZW5kZWQKd2l0aCAnc3QuJy4gRm9yIGluc3RhbmNlLCB0byBzZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIHNjYXR0ZXIvZ2F0aGVyCnNlZ21lbnRzLCB0aGUgcGFyYW1ldGVyICdzdC5tYXhfc2dfc2Vncz14eCcgc2hvdWxkIGJlIHVzZWQgKHh4IGlzIHRoZQpudW1iZXIgb2Ygc2NhdHRlci9nYXRoZXIgc2VnbWVudHMpLgoKRm9yIGNvbXBhdGliaWxpdHksIHRoZSBvbGQgc3ludGF4IGZyb20gZWFybHkgMi41IGFuZCAyLjQga2VybmVsCnZlcnNpb25zIGlzIHN1cHBvcnRlZC4gVGhlIHNhbWUga2V5d29yZHMgY2FuIGJlIHVzZWQgYXMgd2hlbiBsb2FkaW5nCnRoZSBkcml2ZXIgYXMgbW9kdWxlLiBJZiBzZXZlcmFsIHBhcmFtZXRlcnMgYXJlIHNldCwgdGhlIGtleXdvcmQtdmFsdWUKcGFpcnMgYXJlIHNlcGFyYXRlZCB3aXRoIGEgY29tbWEgKG5vIHNwYWNlcyBhbGxvd2VkKS4gQSBjb2xvbiBjYW4gYmUKdXNlZCBpbnN0ZWFkIG9mIHRoZSBlcXVhbCBtYXJrLiBUaGUgZGVmaW5pdGlvbiBpcyBwcmVwZW5kZWQgYnkgdGhlCnN0cmluZyBzdD0uIEhlcmUgaXMgYW4gZXhhbXBsZToKCglzdD1idWZmZXJfa2JzOjY0LHdyaXRlX3RocmVob2xkX2ticzo2MAoKVGhlIGZvbGxvd2luZyBzeW50YXggdXNlZCBieSB0aGUgb2xkIGtlcm5lbCB2ZXJzaW9ucyBpcyBhbHNvIHN1cHBvcnRlZDoKCiAgICAgICAgICAgc3Q9YWFbLGJiWyxkZF1dCgp3aGVyZQogIGFhIGlzIHRoZSBidWZmZXIgc2l6ZSBmb3IgZml4ZWQgYmxvY2sgbW9kZSBpbiAxMDI0IGJ5dGUgdW5pdHMKICBiYiBpcyB0aGUgd3JpdGUgdGhyZXNob2xkIGluIDEwMjQgYnl0ZSB1bml0cwogIGRkIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzY2F0dGVyL2dhdGhlciBzZWdtZW50cwoKCklPQ1RMUwoKVGhlIHRhcGUgaXMgcG9zaXRpb25lZCBhbmQgdGhlIGRyaXZlIHBhcmFtZXRlcnMgYXJlIHNldCB3aXRoIGlvY3RscwpkZWZpbmVkIGluIG10aW8uaCBUaGUgdGFwZSBjb250cm9sIHByb2dyYW0gJ210JyB1c2VzIHRoZXNlIGlvY3Rscy4gVHJ5CnRvIGZpbmQgYW4gbXQgdGhhdCBzdXBwb3J0cyBhbGwgb2YgdGhlIExpbnV4IFNDU0kgdGFwZSBpb2N0bHMgYW5kCm9wZW5zIHRoZSBkZXZpY2UgZm9yIHdyaXRpbmcgaWYgdGhlIHRhcGUgY29udGVudHMgd2lsbCBiZSBtb2RpZmllZAoobG9vayBmb3IgYSBwYWNrYWdlIG10LXN0KiBmcm9tIHRoZSBMaW51eCBmdHAgc2l0ZXM7IHRoZSBHTlUgbXQgZG9lcwpub3Qgb3BlbiBmb3Igd3JpdGluZyBmb3IsIGUuZy4sIGVyYXNlKS4KClRoZSBzdXBwb3J0ZWQgaW9jdGxzIGFyZToKClRoZSBmb2xsb3dpbmcgdXNlIHRoZSBzdHJ1Y3R1cmUgbXRvcDoKCk1URlNGICAgU3BhY2UgZm9yd2FyZCBvdmVyIGNvdW50IGZpbGVtYXJrcy4gVGFwZSBwb3NpdGlvbmVkIGFmdGVyIGZpbGVtYXJrLgpNVEZTRk0gIEFzIGFib3ZlIGJ1dCB0YXBlIHBvc2l0aW9uZWQgYmVmb3JlIGZpbGVtYXJrLgpNVEJTRglTcGFjZSBiYWNrd2FyZCBvdmVyIGNvdW50IGZpbGVtYXJrcy4gVGFwZSBwb3NpdGlvbmVkIGJlZm9yZQogICAgICAgIGZpbGVtYXJrLgpNVEJTRk0gIEFzIGFib3ZlIGJ1dCBhcGUgcG9zaXRpb25lZCBhZnRlciBmaWxlbWFyay4KTVRGU1IgICBTcGFjZSBmb3J3YXJkIG92ZXIgY291bnQgcmVjb3Jkcy4KTVRCU1IgICBTcGFjZSBiYWNrd2FyZCBvdmVyIGNvdW50IHJlY29yZHMuCk1URlNTICAgU3BhY2UgZm9yd2FyZCBvdmVyIGNvdW50IHNldG1hcmtzLgpNVEJTUyAgIFNwYWNlIGJhY2t3YXJkIG92ZXIgY291bnQgc2V0bWFya3MuCk1UV0VPRiAgV3JpdGUgY291bnQgZmlsZW1hcmtzLgpNVFdTTSAgIFdyaXRlIGNvdW50IHNldG1hcmtzLgpNVFJFVyAgIFJld2luZCB0YXBlLgpNVE9GRkwgIFNldCBkZXZpY2Ugb2ZmIGxpbmUgKG9mdGVuIHJld2luZCBwbHVzIGVqZWN0KS4KTVROT1AgICBEbyBub3RoaW5nIGV4Y2VwdCBmbHVzaCB0aGUgYnVmZmVycy4KTVRSRVRFTiBSZS10ZW5zaW9uIHRhcGUuCk1URU9NICAgU3BhY2UgdG8gZW5kIG9mIHJlY29yZGVkIGRhdGEuCk1URVJBU0UgRXJhc2UgdGFwZS4gSWYgdGhlIGFyZ3VtZW50IGlzIHplcm8sIHRoZSBzaG9ydCBlcmFzZSBjb21tYW5kCglpcyB1c2VkLiBUaGUgbG9uZyBlcmFzZSBjb21tYW5kIGlzIHVzZWQgd2l0aCBhbGwgb3RoZXIgdmFsdWVzCglvZiB0aGUgYXJndW1lbnQuCk1UU0VFSwlTZWVrIHRvIHRhcGUgYmxvY2sgY291bnQuIFVzZXMgVGFuZGJlcmctY29tcGF0aWJsZSBzZWVrIChRRkEpCiAgICAgICAgZm9yIFNDU0ktMSBkcml2ZXMgYW5kIFNDU0ktMiBzZWVrIGZvciBTQ1NJLTIgZHJpdmVzLiBUaGUgZmlsZSBhbmQKCWJsb2NrIG51bWJlcnMgaW4gdGhlIHN0YXR1cyBhcmUgbm90IHZhbGlkIGFmdGVyIGEgc2Vlay4KTVRTRVRCTEsgU2V0IHRoZSBkcml2ZSBibG9jayBzaXplLiBTZXR0aW5nIHRvIHplcm8gc2V0cyB0aGUgZHJpdmUgaW50bwogICAgICAgIHZhcmlhYmxlIGJsb2NrIG1vZGUgKGlmIGFwcGxpY2FibGUpLgpNVFNFVERFTlNJVFkgU2V0cyB0aGUgZHJpdmUgZGVuc2l0eSBjb2RlIHRvIGFyZy4gU2VlIGRyaXZlCiAgICAgICAgZG9jdW1lbnRhdGlvbiBmb3IgYXZhaWxhYmxlIGNvZGVzLgpNVExPQ0sgYW5kIE1UVU5MT0NLIEV4cGxpY2l0bHkgbG9jay91bmxvY2sgdGhlIHRhcGUgZHJpdmUgZG9vci4KTVRMT0FEIGFuZCBNVFVOTE9BRCBFeHBsaWNpdGx5IGxvYWQgYW5kIHVubG9hZCB0aGUgdGFwZS4gSWYgdGhlCgljb21tYW5kIGFyZ3VtZW50IHggaXMgYmV0d2VlbiBNVF9TVF9IUExPQURFUl9PRkZTRVQgKyAxIGFuZAoJTVRfU1RfSFBMT0FERVJfT0ZGU0VUICsgNiwgdGhlIG51bWJlciB4IGlzIHVzZWQgc2VudCB0byB0aGUKCWRyaXZlIHdpdGggdGhlIGNvbW1hbmQgYW5kIGl0IHNlbGVjdHMgdGhlIHRhcGUgc2xvdCB0byB1c2Ugb2YKCUhQIEMxNTUzQSBjaGFuZ2VyLgpNVENPTVBSRVNTSU9OIFNldHMgY29tcHJlc3Npbmcgb3IgdW5jb21wcmVzc2luZyBkcml2ZSBtb2RlIHVzaW5nIHRoZQoJU0NTSSBtb2RlIHBhZ2UgMTUuIE5vdGUgdGhhdCBzb21lIGRyaXZlcyBvdGhlciBtZXRob2RzIGZvcgoJY29udHJvbCBvZiBjb21wcmVzc2lvbi4gU29tZSBkcml2ZXMgKGxpa2UgdGhlIEV4YWJ5dGVzKSB1c2UKCWRlbnNpdHkgY29kZXMgZm9yIGNvbXByZXNzaW9uIGNvbnRyb2wuIFNvbWUgZHJpdmVzIHVzZSBhbm90aGVyCgltb2RlIHBhZ2UgYnV0IHRoaXMgcGFnZSBoYXMgbm90IGJlZW4gaW1wbGVtZW50ZWQgaW4gdGhlCglkcml2ZXIuIFNvbWUgZHJpdmVzIHdpdGhvdXQgY29tcHJlc3Npb24gY2FwYWJpbGl0eSB3aWxsIGFjY2VwdAoJYW55IGNvbXByZXNzaW9uIG1vZGUgd2l0aG91dCBlcnJvci4KTVRTRVRQQVJUIE1vdmVzIHRoZSB0YXBlIHRvIHRoZSBwYXJ0aXRpb24gZ2l2ZW4gYnkgdGhlIGFyZ3VtZW50IGF0IHRoZQoJbmV4dCB0YXBlIG9wZXJhdGlvbi4gVGhlIGJsb2NrIGF0IHdoaWNoIHRoZSB0YXBlIGlzIHBvc2l0aW9uZWQKCWlzIHRoZSBibG9jayB3aGVyZSB0aGUgdGFwZSB3YXMgcHJldmlvdXNseSBwb3NpdGlvbmVkIGluIHRoZQoJbmV3IGFjdGl2ZSBwYXJ0aXRpb24gdW5sZXNzIHRoZSBuZXh0IHRhcGUgb3BlcmF0aW9uIGlzCglNVFNFRUsuIEluIHRoaXMgY2FzZSB0aGUgdGFwZSBpcyBtb3ZlZCBkaXJlY3RseSB0byB0aGUgYmxvY2sKCXNwZWNpZmllZCBieSBNVFNFRUsuIE1UU0VUUEFSVCBpcyBpbmFjdGl2ZSB1bmxlc3MKCU1UX1NUX0NBTl9QQVJUSVRJT05TIHNldC4KTVRNS1BBUlQgRm9ybWF0cyB0aGUgdGFwZSB3aXRoIG9uZSBwYXJ0aXRpb24gKGFyZ3VtZW50IHplcm8pIG9yIHR3bwoJcGFydGl0aW9ucyAodGhlIGFyZ3VtZW50IGdpdmVzIGluIG1lZ2FieXRlcyB0aGUgc2l6ZSBvZgoJcGFydGl0aW9uIDEgdGhhdCBpcyBwaHlzaWNhbGx5IHRoZSBmaXJzdCBwYXJ0aXRpb24gb2YgdGhlCgl0YXBlKS4gVGhlIGRyaXZlIGhhcyB0byBzdXBwb3J0IHBhcnRpdGlvbnMgd2l0aCBzaXplIHNwZWNpZmllZAoJYnkgdGhlIGluaXRpYXRvci4gSW5hY3RpdmUgdW5sZXNzIE1UX1NUX0NBTl9QQVJUSVRJT05TIHNldC4KTVRTRVREUlZCVUZGRVIKCUlzIHVzZWQgZm9yIHNldmVyYWwgcHVycG9zZXMuIFRoZSBjb21tYW5kIGlzIG9idGFpbmVkIGZyb20gY291bnQKICAgICAgICB3aXRoIG1hc2sgTVRfU0VUX09QVElPTlMsIHRoZSBsb3cgb3JkZXIgYml0cyBhcmUgdXNlZCBhcyBhcmd1bWVudC4KCVRoaXMgY29tbWFuZCBpcyBvbmx5IGFsbG93ZWQgZm9yIHRoZSBzdXBlcnVzZXIgKHJvb3QpLiBUaGUKCXN1YmNvbW1hbmRzIGFyZToKCTAKICAgICAgICAgICBUaGUgZHJpdmUgYnVmZmVyIG9wdGlvbiBpcyBzZXQgdG8gdGhlIGFyZ3VtZW50LiBaZXJvIG1lYW5zCiAgICAgICAgICAgbm8gYnVmZmVyaW5nLgogICAgICAgIE1UX1NUX0JPT0xFQU5TCiAgICAgICAgICAgU2V0cyB0aGUgYnVmZmVyaW5nIG9wdGlvbnMuIFRoZSBiaXRzIGFyZSB0aGUgbmV3IHN0YXRlcwogICAgICAgICAgIChlbmFibGVkL2Rpc2FibGVkKSB0aGUgZm9sbG93aW5nIG9wdGlvbnMgKGluIHRoZQoJICAgcGFyZW50aGVzaXMgaXMgc3BlY2lmaWVkIHdoZXRoZXIgdGhlIG9wdGlvbiBpcyBnbG9iYWwgb3IKCSAgIGNhbiBiZSBzcGVjaWZpZWQgZGlmZmVyZW50bHkgZm9yIGVhY2ggbW9kZSk6CgkgICAgIE1UX1NUX0JVRkZFUl9XUklURVMgd3JpdGUgYnVmZmVyaW5nIChtb2RlKQoJICAgICBNVF9TVF9BU1lOQ19XUklURVMgYXN5bmNocm9ub3VzIHdyaXRlcyAobW9kZSkKICAgICAgICAgICAgIE1UX1NUX1JFQURfQUhFQUQgIHJlYWQgYWhlYWQgKG1vZGUpCiAgICAgICAgICAgICBNVF9TVF9UV09fRk0gd3JpdGluZyBvZiB0d28gZmlsZW1hcmtzIChnbG9iYWwpCgkgICAgIE1UX1NUX0ZBU1RfRU9NIHVzaW5nIHRoZSBTQ1NJIHNwYWNpbmcgdG8gRU9EIChnbG9iYWwpCgkgICAgIE1UX1NUX0FVVE9fTE9DSyBhdXRvbWF0aWMgbG9ja2luZyBvZiB0aGUgZHJpdmUgZG9vciAoZ2xvYmFsKQogICAgICAgICAgICAgTVRfU1RfREVGX1dSSVRFUyB0aGUgZGVmYXVsdHMgYXJlIG1lYW50IG9ubHkgZm9yIHdyaXRlcyAobW9kZSkKCSAgICAgTVRfU1RfQ0FOX0JTUiBiYWNrc3BhY2luZyBvdmVyIG1vcmUgdGhhbiBvbmUgcmVjb3JkcyBjYW4KCQliZSB1c2VkIGZvciByZXBvc2l0aW9uaW5nIHRoZSB0YXBlIChnbG9iYWwpCgkgICAgIE1UX1NUX05PX0JMS0xJTVMgdGhlIGRyaXZlciBkb2VzIG5vdCBhc2sgdGhlIGJsb2NrIGxpbWl0cwoJCWZyb20gdGhlIGRyaXZlIChibG9jayBzaXplIGNhbiBiZSBjaGFuZ2VkIG9ubHkgdG8KCQl2YXJpYWJsZSkgKGdsb2JhbCkKCSAgICAgTVRfU1RfQ0FOX1BBUlRJVElPTlMgZW5hYmxlcyBzdXBwb3J0IGZvciBwYXJ0aXRpb25lZAoJCXRhcGVzIChnbG9iYWwpCgkgICAgIE1UX1NUX1NDU0kyTE9HSUNBTCB0aGUgbG9naWNhbCBibG9jayBudW1iZXIgaXMgdXNlZCBpbgoJCXRoZSBNVFNFRUsgYW5kIE1USU9DUE9TIGZvciBTQ1NJLTIgZHJpdmVzIGluc3RlYWQgb2YKCQl0aGUgZGV2aWNlIGRlcGVuZGVudCBhZGRyZXNzLiBJdCBpcyByZWNvbW1lbmRlZCB0byBzZXQKCQl0aGlzIGZsYWcgdW5sZXNzIHRoZXJlIGFyZSB0YXBlcyB1c2luZyB0aGUgZGV2aWNlCgkJZGVwZW5kZW50IChmcm9tIHRoZSBvbGQgdGltZXMpIChnbG9iYWwpCgkgICAgIE1UX1NUX1NZU1Ygc2V0cyB0aGUgU1lTViBzZW1hdGljcyAobW9kZSkKCSAgICAgTVRfU1RfTk9XQUlUIGVuYWJsZXMgaW1tZWRpYXRlIG1vZGUgKGkuZS4sIGRvbid0IHdhaXQgZm9yCgkgICAgICAgIHRoZSBjb21tYW5kIHRvIGZpbmlzaCkgZm9yIHNvbWUgY29tbWFuZHMgKGUuZy4sIHJld2luZCkKCSAgICAgTVRfU1RfREVCVUdHSU5HIGRlYnVnZ2luZyAoZ2xvYmFsOyBkZWJ1Z2dpbmcgbXVzdCBiZQoJCWNvbXBpbGVkIGludG8gdGhlIGRyaXZlcikKCU1UX1NUX1NFVEJPT0xFQU5TCglNVF9TVF9DTEVBUkJPT0xFQU5TCgkgICBTZXRzIG9yIGNsZWFycyB0aGUgb3B0aW9uIGJpdHMuCiAgICAgICAgTVRfU1RfV1JJVEVfVEhSRVNIT0xECiAgICAgICAgICAgU2V0cyB0aGUgd3JpdGUgdGhyZXNob2xkIGZvciB0aGlzIGRldmljZSB0byBraWxvYnl0ZXMKICAgICAgICAgICBzcGVjaWZpZWQgYnkgdGhlIGxvd2VzdCBiaXRzLgoJTVRfU1RfREVGX0JMS1NJWkUKCSAgIERlZmluZXMgdGhlIGRlZmF1bHQgYmxvY2sgc2l6ZSBzZXQgYXV0b21hdGljYWxseS4gVmFsdWUKCSAgIDB4ZmZmZmZmIG1lYW5zIHRoYXQgdGhlIGRlZmF1bHQgaXMgbm90IHVzZWQgYW55IG1vcmUuCglNVF9TVF9ERUZfREVOU0lUWQoJTVRfU1RfREVGX0RSVkJVRkZFUgoJICAgVXNlZCB0byBzZXQgb3IgY2xlYXIgdGhlIGRlbnNpdHkgKDggYml0cyksIGFuZCBkcml2ZSBidWZmZXIKCSAgIHN0YXRlICgzIGJpdHMpLiBJZiB0aGUgdmFsdWUgaXMgTVRfU1RfQ0xFQVJfREVGQVVMVAoJICAgKDB4ZmZmZmYpIHRoZSBkZWZhdWx0IHdpbGwgbm90IGJlIHVzZWQgYW55IG1vcmUuIE90aGVyd2lzZQoJICAgdGhlIGxvd2VybW9zdCBiaXRzIG9mIHRoZSB2YWx1ZSBjb250YWluIHRoZSBuZXcgdmFsdWUgb2YKCSAgIHRoZSBwYXJhbWV0ZXIuCglNVF9TVF9ERUZfQ09NUFJFU1NJT04KCSAgIFRoZSBjb21wcmVzc2lvbiBkZWZhdWx0IHdpbGwgbm90IGJlIHVzZWQgaWYgdGhlIHZhbHVlIG9mCgkgICB0aGUgbG93ZXJtb3N0IGJ5dGUgaXMgMHhmZi4gT3RoZXJ3aXNlIHRoZSBsb3dlcm1vc3QgYml0CgkgICBjb250YWlucyB0aGUgbmV3IGRlZmF1bHQuIElmIHRoZSBiaXRzIDgtMTUgYXJlIHNldCB0byBhCgkgICBub24temVybyBudW1iZXIsIGFuZCB0aGlzIG51bWJlciBpcyBub3QgMHhmZiwgdGhlIG51bWJlciBpcwoJICAgdXNlZCBhcyB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtLiBUaGUgdmFsdWUKCSAgIE1UX1NUX0NMRUFSX0RFRkFVTFQgY2FuIGJlIHVzZWQgdG8gY2xlYXIgdGhlIGNvbXByZXNzaW9uCgkgICBkZWZhdWx0LgoJTVRfU1RfU0VUX1RJTUVPVVQKCSAgIFNldCB0aGUgbm9ybWFsIHRpbWVvdXQgaW4gc2Vjb25kcyBmb3IgdGhpcyBkZXZpY2UuIFRoZQoJICAgZGVmYXVsdCBpcyA5MDAgc2Vjb25kcyAoMTUgbWludXRlcykuIFRoZSB0aW1lb3V0IHNob3VsZCBiZQoJICAgbG9uZyBlbm91Z2ggZm9yIHRoZSByZXRyaWVzIGRvbmUgYnkgdGhlIGRldmljZSB3aGlsZQoJICAgcmVhZGluZy93cml0aW5nLgoJTVRfU1RfU0VUX0xPTkdfVElNRU9VVAoJICAgU2V0IHRoZSBsb25nIHRpbWVvdXQgdGhhdCBpcyB1c2VkIGZvciBvcGVyYXRpb25zIHRoYXQgYXJlCgkgICBrbm93biB0byB0YWtlIGEgbG9uZyB0aW1lLiBUaGUgZGVmYXVsdCBpcyAxNDAwMCBzZWNvbmRzCgkgICAoMy45IGhvdXJzKS4gRm9yIGVyYXNlIHRoaXMgdmFsdWUgaXMgZnVydGhlciBtdWx0aXBsaWVkIGJ5CgkgICBlaWdodC4KCU1UX1NUX1NFVF9DTE4KCSAgIFNldCB0aGUgY2xlYW5pbmcgcmVxdWVzdCBpbnRlcnByZXRhdGlvbiBwYXJhbWV0ZXJzIHVzaW5nCgkgICB0aGUgbG93ZXN0IDI0IGJpdHMgb2YgdGhlIGFyZ3VtZW50LiBUaGUgZHJpdmVyIGNhbiBzZXQgdGhlCgkgICBnZW5lcmljIHN0YXR1cyBiaXQgR01UX0NMTiBpZiBhIGNsZWFuaW5nIHJlcXVlc3QgYml0IHBhdHRlcm4KCSAgIGlzIGZvdW5kIGZyb20gdGhlIGV4dGVuZGVkIHNlbnNlIGRhdGEuIE1hbnkgZHJpdmVzIHNldCBvbmUgb3IKCSAgIG1vcmUgYml0cyBpbiB0aGUgZXh0ZW5kZWQgc2Vuc2UgZGF0YSB3aGVuIHRoZSBkcml2ZSBuZWVkcwoJICAgY2xlYW5pbmcuIFRoZSBiaXRzIGFyZSBkZXZpY2UtZGVwZW5kZW50LiBUaGUgZHJpdmVyIGlzCgkgICBnaXZlbiB0aGUgbnVtYmVyIG9mIHRoZSBzZW5zZSBkYXRhIGJ5dGUgKHRoZSBsb3dlc3QgZWlnaHQKCSAgIGJpdHMgb2YgdGhlIGFyZ3VtZW50OyBtdXN0IGJlID49IDE4ICh2YWx1ZXMgMSAtIDE3CgkgICByZXNlcnZlZCkgYW5kIDw9IHRoZSBtYXhpbXVtIHJlcXVlc3RlZCBzZW5zZSBkYXRhIHNpeGUpLCAKCSAgIGEgbWFzayB0byBzZWxlY3QgdGhlIHJlbGV2YW50IGJpdHMgKHRoZSBiaXRzIDktMTYpLCBhbmQgdGhlCgkgICBiaXQgcGF0dGVybiAoYml0cyAxNy0yMykuIElmIHRoZSBiaXQgcGF0dGVybiBpcyB6ZXJvLCBvbmUKCSAgIG9yIG1vcmUgYml0cyB1bmRlciB0aGUgbWFzayBpbmRpY2F0ZSBjbGVhbmluZyByZXF1ZXN0LiBJZgoJICAgdGhlIHBhdHRlcm4gaXMgbm9uLXplcm8sIHRoZSBwYXR0ZXJuIG11c3QgbWF0Y2ggdGhlIG1hc2tlZAoJICAgc2Vuc2UgZGF0YSBieXRlLgoKCSAgIChUaGUgY2xlYW5pbmcgYml0IGlzIHNldCBpZiB0aGUgYWRkaXRpb25hbCBzZW5zZSBjb2RlIGFuZAoJICAgcXVhbGlmaWVyIDAwaCAxN2ggYXJlIHNlZW4gcmVnYXJkbGVzcyBvZiB0aGUgc2V0dGluZyBvZgoJICAgTVRfU1RfU0VUX0NMTi4pCgpUaGUgZm9sbG93aW5nIGlvY3RsIHVzZXMgdGhlIHN0cnVjdHVyZSBtdHBvczoKTVRJT0NQT1MgUmVhZHMgdGhlIGN1cnJlbnQgcG9zaXRpb24gZnJvbSB0aGUgZHJpdmUuIFVzZXMKICAgICAgICBUYW5kYmVyZy1jb21wYXRpYmxlIFFGQSBmb3IgU0NTSS0xIGRyaXZlcyBhbmQgdGhlIFNDU0ktMgogICAgICAgIGNvbW1hbmQgZm9yIHRoZSBTQ1NJLTIgZHJpdmVzLgoKVGhlIGZvbGxvd2luZyBpb2N0bCB1c2VzIHRoZSBzdHJ1Y3R1cmUgbXRnZXQgdG8gcmV0dXJuIHRoZSBzdGF0dXM6Ck1USU9DR0VUIFJldHVybnMgc29tZSBzdGF0dXMgaW5mb3JtYXRpb24uCiAgICAgICAgVGhlIGZpbGUgbnVtYmVyIGFuZCBibG9jayBudW1iZXIgd2l0aGluIGZpbGUgYXJlIHJldHVybmVkLiBUaGUKICAgICAgICBibG9jayBpcyAtMSB3aGVuIGl0IGNhbid0IGJlIGRldGVybWluZWQgKGUuZy4sIGFmdGVyIE1UQlNGKS4KICAgICAgICBUaGUgZHJpdmUgdHlwZSBpcyBlaXRoZXIgTVRJU1NDU0kxIG9yIE1USVNTQ1NJMi4KICAgICAgICBUaGUgbnVtYmVyIG9mIHJlY292ZXJlZCBlcnJvcnMgc2luY2UgdGhlIHByZXZpb3VzIHN0YXR1cyBjYWxsCiAgICAgICAgaXMgc3RvcmVkIGluIHRoZSBsb3dlciB3b3JkIG9mIHRoZSBmaWVsZCBtdF9lcnJlZy4KICAgICAgICBUaGUgY3VycmVudCBibG9jayBzaXplIGFuZCB0aGUgZGVuc2l0eSBjb2RlIGFyZSBzdG9yZWQgaW4gdGhlIGZpZWxkCiAgICAgICAgbXRfZHNyZWcgKHNoaWZ0cyBmb3IgdGhlIHN1YmZpZWxkcyBhcmUgTVRfU1RfQkxLU0laRV9TSElGVCBhbmQKICAgICAgICBNVF9TVF9ERU5TSVRZX1NISUZUKS4KCVRoZSBHTVRfeHh4IHN0YXR1cyBiaXRzIHJlZmxlY3QgdGhlIGRyaXZlIHN0YXR1cy4gR01UX0RSX09QRU4KCWlzIHNldCBpZiB0aGVyZSBpcyBubyB0YXBlIGluIHRoZSBkcml2ZS4gR01UX0VPRCBtZWFucyBlaXRoZXIKCWVuZCBvZiByZWNvcmRlZCBkYXRhIG9yIGVuZCBvZiB0YXBlLiBHTVRfRU9UIG1lYW5zIGVuZCBvZiB0YXBlLgoKCk1JU0NFTExBTkVPVVMgQ09NUElMRSBPUFRJT05TCgpUaGUgcmVjb3ZlcmVkIHdyaXRlIGVycm9ycyBhcmUgY29uc2lkZXJlZCBmYXRhbCBpZiBTVF9SRUNPVkVSRURfV1JJVEVfRkFUQUwKaXMgZGVmaW5lZC4KClRoZSBtYXhpbXVtIG51bWJlciBvZiB0YXBlIGRldmljZXMgaXMgZGV0ZXJtaW5lZCBieSB0aGUgZGVmaW5lClNUX01BWF9UQVBFUy4gSWYgbW9yZSB0YXBlcyBhcmUgZGV0ZWN0ZWQgYXQgZHJpdmVyIGluaXRpYWxpemF0aW9uLCB0aGUKbWF4aW11bSBpcyBhZGp1c3RlZCBhY2NvcmRpbmdseS4KCkltbWVkaWF0ZSByZXR1cm4gZnJvbSB0YXBlIHBvc2l0aW9uaW5nIFNDU0kgY29tbWFuZHMgY2FuIGJlIGVuYWJsZWQgYnkKZGVmaW5pbmcgU1RfTk9XQUlULiBJZiB0aGlzIGlzIGRlZmluZWQsIHRoZSB1c2VyIHNob3VsZCB0YWtlIGNhcmUgdGhhdAp0aGUgbmV4dCB0YXBlIG9wZXJhdGlvbiBpcyBub3Qgc3RhcnRlZCBiZWZvcmUgdGhlIHByZXZpb3VzIG9uZSBoYXMKZmluaXNoZWQuIFRoZSBkcml2ZXMgYW5kIFNDU0kgYWRhcHRlcnMgc2hvdWxkIGhhbmRsZSB0aGlzIGNvbmRpdGlvbgpncmFjZWZ1bGx5LCBidXQgc29tZSBkcml2ZS9hZGFwdGVyIGNvbWJpbmF0aW9ucyBhcmUga25vd24gdG8gaGFuZyB0aGUKU0NTSSBidXMgaW4gdGhpcyBjYXNlLgoKVGhlIE1URU9NIGNvbW1hbmQgaXMgYnkgZGVmYXVsdCBpbXBsZW1lbnRlZCBhcyBzcGFjaW5nIG92ZXIgMzI3NjcKZmlsZW1hcmtzLiBXaXRoIHRoaXMgbWV0aG9kIHRoZSBmaWxlIG51bWJlciBpbiB0aGUgc3RhdHVzIGlzCmNvcnJlY3QuIFRoZSB1c2VyIGNhbiByZXF1ZXN0IHVzaW5nIGRpcmVjdCBzcGFjaW5nIHRvIEVPRCBieSBzZXR0aW5nClNUX0ZBU1RfRU9NIDEgKG9yIHVzaW5nIHRoZSBNVF9TVF9PUFRJT05TIGlvY3RsKS4gSW4gdGhpcyBjYXNlIHRoZSBmaWxlCm51bWJlciB3aWxsIGJlIGludmFsaWQuCgpXaGVuIHVzaW5nIHJlYWQgYWhlYWQgb3IgYnVmZmVyZWQgd3JpdGVzIHRoZSBwb3NpdGlvbiB3aXRoaW4gdGhlIGZpbGUKbWF5IG5vdCBiZSBjb3JyZWN0IGFmdGVyIHRoZSBmaWxlIGlzIGNsb3NlZCAoY29ycmVjdCBwb3NpdGlvbiBtYXkKcmVxdWlyZSBiYWNrc3BhY2luZyBvdmVyIG1vcmUgdGhhbiBvbmUgcmVjb3JkKS4gVGhlIGNvcnJlY3QgcG9zaXRpb24Kd2l0aGluIGZpbGUgY2FuIGJlIG9idGFpbmVkIGlmIFNUX0lOX0ZJTEVfUE9TIGlzIGRlZmluZWQgYXQgY29tcGlsZQp0aW1lIG9yIHRoZSBNVF9TVF9DQU5fQlNSIGJpdCBpcyBzZXQgZm9yIHRoZSBkcml2ZSB3aXRoIGFuIGlvY3RsLgooVGhlIGRyaXZlciBhbHdheXMgYmFja3Mgb3ZlciBhIGZpbGVtYXJrIGNyb3NzZWQgYnkgcmVhZCBhaGVhZCBpZiB0aGUKdXNlciBkb2VzIG5vdCByZXF1ZXN0IGRhdGEgdGhhdCBmYXIuKQoKCkRFQlVHR0lORyBISU5UUwoKVG8gZW5hYmxlIGRlYnVnZ2luZyBtZXNzYWdlcywgZWRpdCBzdC5jIGFuZCAjZGVmaW5lIERFQlVHIDEuIEFzIHNlZW4KYWJvdmUsIGRlYnVnZ2luZyBjYW4gYmUgc3dpdGNoZWQgb2ZmIHdpdGggYW4gaW9jdGwgaWYgZGVidWdnaW5nIGlzCmNvbXBpbGVkIGludG8gdGhlIGRyaXZlci4gVGhlIGRlYnVnZ2luZyBvdXRwdXQgaXMgbm90IHZvbHVtaW5vdXMuCgpJZiB0aGUgdGFwZSBzZWVtcyB0byBoYW5nLCBJIHdvdWxkIGJlIHZlcnkgaW50ZXJlc3RlZCB0byBoZWFyIHdoZXJlCnRoZSBkcml2ZXIgaXMgd2FpdGluZy4gV2l0aCB0aGUgY29tbWFuZCAncHMgLWwnIHlvdSBjYW4gc2VlIHRoZSBzdGF0ZQpvZiB0aGUgcHJvY2VzcyB1c2luZyB0aGUgdGFwZS4gSWYgdGhlIHN0YXRlIGlzIEQsIHRoZSBwcm9jZXNzIGlzCndhaXRpbmcgZm9yIHNvbWV0aGluZy4gVGhlIGZpZWxkIFdDSEFOIHRlbGxzIHdoZXJlIHRoZSBkcml2ZXIgaXMKd2FpdGluZy4gSWYgeW91IGhhdmUgdGhlIGN1cnJlbnQgU3lzdGVtLm1hcCBpbiB0aGUgY29ycmVjdCBwbGFjZSAoaW4KL2Jvb3QgZm9yIHRoZSBwcm9jcHMgSSB1c2UpIG9yIGhhdmUgdXBkYXRlZCAvZXRjL3BzZGF0YWJhc2UgKGZvciBrbWVtCnBzKSwgcHMgd3JpdGVzIHRoZSBmdW5jdGlvbiBuYW1lIGluIHRoZSBXQ0hBTiBmaWVsZC4gSWYgbm90LCB5b3UgaGF2ZQp0byBsb29rIHVwIHRoZSBmdW5jdGlvbiBmcm9tIFN5c3RlbS5tYXAuCgpOb3RlIGFsc28gdGhhdCB0aGUgdGltZW91dHMgYXJlIHZlcnkgbG9uZyBjb21wYXJlZCB0byBtb3N0IG90aGVyCmRyaXZlcnMuIFRoaXMgbWVhbnMgdGhhdCB0aGUgTGludXggZHJpdmVyIG1heSBhcHBlYXIgaHVuZyBhbHRob3VnaCB0aGUKcmVhbCByZWFzb24gaXMgdGhhdCB0aGUgdGFwZSBmaXJtd2FyZSBoYXMgZ290IGNvbmZ1c2VkLgo=