ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtYWxpMTUzNSBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtYWxpMTUzNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGIzYjRjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1hbGkxNTM1CkBAIC0wLDAgKzEsNDIgQEAKK0tlcm5lbCBkcml2ZXIgaTJjLWFsaTE1MzUKKworU3VwcG9ydGVkIGFkYXB0ZXJzOgorICAqIEFjZXIgTGFicywgSW5jLiBBTEkgMTUzNSAoc291dGggYnJpZGdlKQorICAgIERhdGFzaGVldDogTm93IHVuZGVyIE5EQQorCWh0dHA6Ly93d3cuYWxpLmNvbS50dy9lbmcvc3VwcG9ydC9kYXRhc2hlZXRfcmVxdWVzdC5waHAKKworQXV0aG9yczoKKwlGcm9kbyBMb29pamFhcmQgPGZyb2RvbEBkZHMubmw+LCAKKwlQaGlsaXAgRWRlbGJyb2NrIDxwaGlsQG5ldHJvZWRnZS5jb20+LAorCU1hcmsgRC4gU3R1ZGViYWtlciA8bWRzeHl6MTIzQHlhaG9vLmNvbT4sCisJRGFuIEVhdG9uIDxkYW4uZWF0b25Acm9ja2V0bG9naXguY29tPiwKKwlTdGVwaGVuIFJvdXNzZXQ8c3RlcGhlbi5yb3Vzc2V0QHJvY2tldGxvZ2l4LmNvbT4KKwkJCQkJCQkJCQkJCQorRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK1RoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIFNNQiBIb3N0IGNvbnRyb2xsZXIgb24gQWNlciBMYWJzIEluYy4gKEFMSSkKK00xNTM1IFNvdXRoIEJyaWRnZS4KKworVGhlIE0xNTM1IGlzIGEgU291dGggYnJpZGdlIGZvciBwb3J0YWJsZSBzeXN0ZW1zLiBJdCBpcyB2ZXJ5IHNpbWlsYXIgdG8gdGhlCitNMTV4MyBTb3V0aCBicmlkZ2VzIGFsc28gcHJvZHVjZWQgYnkgQWNlciBMYWJzIEluYy4gIFNvbWUgb2YgdGhlIHJlZ2lzdGVycword2l0aGluIHRoZSBwYXJ0IGhhdmUgbW92ZWQgYW5kIHNvbWUgaGF2ZSBiZWVuIHJlZGVmaW5lZCBzbGlnaHRseS4KK0FkZGl0aW9uYWxseSwgdGhlIHNlcXVlbmNpbmcgb2YgdGhlIFNNQnVzIHRyYW5zYWN0aW9ucyBoYXMgYmVlbiBtb2RpZmllZCB0bworYmUgbW9yZSBjb25zaXN0ZW50IHdpdGggdGhlIHNlcXVlbmNpbmcgcmVjb21tZW5kZWQgYnkgdGhlIG1hbnVmYWN0dXJlciBhbmQKK29ic2VydmVkIHRocm91Z2ggdGVzdGluZy4gIFRoZXNlIGNoYW5nZXMgYXJlIHJlZmxlY3RlZCBpbiB0aGlzIGRyaXZlciBhbmQKK2NhbiBiZSBpZGVudGlmaWVkIGJ5IGNvbXBhcmluZyB0aGlzIGRyaXZlciB0byB0aGUgaTJjLWFsaTE1eDMgZHJpdmVyLiBGb3IKK2FuIG92ZXJ2aWV3IG9mIHRoZXNlIGNoaXBzIHNlZSBodHRwOi8vd3d3LmFjZXJsYWJzLmNvbQorCitUaGUgU01CIGNvbnRyb2xsZXIgaXMgcGFydCBvZiB0aGUgTTcxMDEgZGV2aWNlLCB3aGljaCBpcyBhbiBBQ1BJLWNvbXBsaWFudAorUG93ZXIgTWFuYWdlbWVudCBVbml0IChQTVUpLgorCitUaGUgd2hvbGUgTTcxMDEgZGV2aWNlIGhhcyB0byBiZSBlbmFibGVkIGZvciB0aGUgU01CIHRvIHdvcmsuIFlvdSBjYW4ndAoranVzdCBlbmFibGUgdGhlIFNNQiBhbG9uZS4gVGhlIFNNQiBhbmQgdGhlIEFDUEkgaGF2ZSBzZXBhcmF0ZSBJL08gc3BhY2VzLgorV2UgbWFrZSBzdXJlIHRoYXQgdGhlIFNNQiBpcyBlbmFibGVkLiBXZSBsZWF2ZSB0aGUgQUNQSSBhbG9uZS4KKworCitGZWF0dXJlcworLS0tLS0tLS0KKworVGhpcyBkcml2ZXIgY29udHJvbHMgdGhlIFNNQiBIb3N0IG9ubHkuIFRoaXMgZHJpdmVyIGRvZXMgbm90IHVzZQoraW50ZXJydXB0cy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtYWxpMTU2MyBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtYWxpMTU2MwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWFkNGI5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1hbGkxNTYzCkBAIC0wLDAgKzEsMjcgQEAKK0tlcm5lbCBkcml2ZXIgaTJjLWFsaTE1NjMKKworU3VwcG9ydGVkIGFkYXB0ZXJzOgorICAqIEFjZXIgTGFicywgSW5jLiBBTEkgMTU2MyAoc291dGggYnJpZGdlKQorICAgIERhdGFzaGVldDogTm93IHVuZGVyIE5EQQorCWh0dHA6Ly93d3cuYWxpLmNvbS50dy9lbmcvc3VwcG9ydC9kYXRhc2hlZXRfcmVxdWVzdC5waHAKKworQXV0aG9yOiBQYXRyaWNrIE1vY2hlbCA8bW9jaGVsQGRpZ2l0YWxpbXBsYW50Lm9yZz4KKworRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK1RoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIFNNQiBIb3N0IGNvbnRyb2xsZXIgb24gQWNlciBMYWJzIEluYy4gKEFMSSkKK00xNTYzIFNvdXRoIEJyaWRnZS4KKworRm9yIGFuIG92ZXJ2aWV3IG9mIHRoZXNlIGNoaXBzIHNlZSBodHRwOi8vd3d3LmFjZXJsYWJzLmNvbQorCitUaGUgTTE1NjMgc291dGhicmlkZ2UgaXMgZGVjZXB0aXZlbHkgc2ltaWxhciB0byB0aGUgTTE1MzMsIHdpdGggYSBmZXcKK25vdGFibGUgZXhjZXB0aW9ucy4gT25lIG9mIHRob3NlIGhhcHBlbnMgdG8gYmUgdGhlIGZhY3QgdGhleSB1cGdyYWRlZCB0aGUKK2kyYyBjb3JlIHRvIGJlIFNNQnVzIDIuMCBjb21wbGlhbnQsIGFuZCBoYXBwZW5zIHRvIGJlIGFsbW9zdCBpZGVudGljYWwgdG8KK3RoZSBpMmMgY29udHJvbGxlciBmb3VuZCBpbiB0aGUgSW50ZWwgODAxIHNvdXRoIGJyaWRnZXMuIAorCitGZWF0dXJlcworLS0tLS0tLS0KKworVGhpcyBkcml2ZXIgY29udHJvbHMgdGhlIFNNQiBIb3N0IG9ubHkuIFRoaXMgZHJpdmVyIGRvZXMgbm90IHVzZQoraW50ZXJydXB0cy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtYWxpMTV4MyBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtYWxpMTV4MwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjI4ZDM4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1hbGkxNXgzCkBAIC0wLDAgKzEsMTEyIEBACitLZXJuZWwgZHJpdmVyIGkyYy1hbGkxNXgzCisKK1N1cHBvcnRlZCBhZGFwdGVyczoKKyAgKiBBY2VyIExhYnMsIEluYy4gQUxJIDE1MzMgYW5kIDE1NDNDIChzb3V0aCBicmlkZ2UpCisgICAgRGF0YXNoZWV0OiBOb3cgdW5kZXIgTkRBCisJaHR0cDovL3d3dy5hbGkuY29tLnR3L2VuZy9zdXBwb3J0L2RhdGFzaGVldF9yZXF1ZXN0LnBocAorCitBdXRob3JzOgorCUZyb2RvIExvb2lqYWFyZCA8ZnJvZG9sQGRkcy5ubD4sIAorCVBoaWxpcCBFZGVsYnJvY2sgPHBoaWxAbmV0cm9lZGdlLmNvbT4sIAorCU1hcmsgRC4gU3R1ZGViYWtlciA8bWRzeHl6MTIzQHlhaG9vLmNvbT4KKworTW9kdWxlIFBhcmFtZXRlcnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKyogZm9yY2VfYWRkcjogaW50CisgIEluaXRpYWxpemUgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgaTJjIGNvbnRyb2xsZXIKKworCitOb3RlcworLS0tLS0KKworVGhlIGZvcmNlX2FkZHIgcGFyYW1ldGVyIGlzIHVzZWZ1bCBmb3IgYm9hcmRzIHRoYXQgZG9uJ3Qgc2V0IHRoZSBhZGRyZXNzIGluCit0aGUgQklPUy4gRG9lcyBub3QgZG8gYSBQQ0kgZm9yY2U7IHRoZSBkZXZpY2UgbXVzdCBzdGlsbCBiZSBwcmVzZW50IGluCitsc3BjaS4gRG9uJ3QgdXNlIHRoaXMgdW5sZXNzIHRoZSBkcml2ZXIgY29tcGxhaW5zIHRoYXQgdGhlIGJhc2UgYWRkcmVzcyBpcworbm90IHNldC4KKworRXhhbXBsZTogJ21vZHByb2JlIGkyYy1hbGkxNXgzIGZvcmNlX2FkZHI9MHhlODAwJworCitTTUJ1cyBwZXJpb2RpY2FsbHkgaGFuZ3Mgb24gQVNVUyBQNUEgbW90aGVyYm9hcmRzIGFuZCBjYW4gb25seSBiZSBjbGVhcmVkCitieSBhIHBvd2VyIGN5Y2xlLiBDYXVzZSB1bmtub3duIChzZWUgSXNzdWVzIGJlbG93KS4KKworCitEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0KKworVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgU01CIEhvc3QgY29udHJvbGxlciBvbiBBY2VyIExhYnMgSW5jLiAoQUxJKQorTTE1NDEgYW5kIE0xNTQzQyBTb3V0aCBCcmlkZ2VzLgorCitUaGUgTTE1NDNDIGlzIGEgU291dGggYnJpZGdlIGZvciBkZXNrdG9wIHN5c3RlbXMuCitUaGUgTTE1NDEgaXMgYSBTb3V0aCBicmlkZ2UgZm9yIHBvcnRhYmxlIHN5c3RlbXMuCitUaGV5IGFyZSBwYXJ0IG9mIHRoZSBmb2xsb3dpbmcgQUxJIGNoaXBzZXRzOgorICAgCisgKiAiQWxhZGRpbiBQcm8gMiIgaW5jbHVkZXMgdGhlIE0xNjIxIFNsb3QgMSBOb3J0aCBicmlkZ2Ugd2l0aCBBR1AgYW5kIAorIAkJMTAwTUh6IENQVSBGcm9udCBTaWRlIGJ1cworICogIkFsYWRkaW4gViIgaW5jbHVkZXMgdGhlIE0xNTQxIFNvY2tldCA3IE5vcnRoIGJyaWRnZSB3aXRoIEFHUCBhbmQgMTAwTUh6IAorIAkJQ1BVIEZyb250IFNpZGUgYnVzCisgICBTb21lIEFsYWRkaW4gViBtb3RoZXJib2FyZHM6CisJQXN1cyBQNUEKKwlBdHJlbmQgQVRDLTUyMjAKKwlCQ00vR1ZDIFZQMTU0MQorCUJpb3N0YXIgTTVBTEEKKwlHaWdhYnl0ZSBHQS01QVggKCoqIEdlbmVyYWxseSBkb2Vzbid0IHdvcmsgYmVjYXVzZSB0aGUgQklPUyBkb2Vzbid0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlIHRoZSA3MTAxIGRldmljZSEgKiopCisJSXdpbGwgWEExMDAgUGx1cworCU1pY3JvbmljcyBDMjAwCisJTWljcm9zdGFyIChNU0kpIE1TLTUxNjkKKworICAqICJBbGFkZGluIElWIiBpbmNsdWRlcyB0aGUgTTE1NDEgU29ja2V0IDcgTm9ydGggYnJpZGdlCisgICAJCXdpdGggaG9zdCBidXMgdXAgdG8gODMuMyBNSHouCisKK0ZvciBhbiBvdmVydmlldyBvZiB0aGVzZSBjaGlwcyBzZWUgaHR0cDovL3d3dy5hY2VybGFicy5jb20uIEF0IHRoaXMgdGltZSB0aGUKK2Z1bGwgZGF0YSBzaGVldHMgb24gdGhlIHdlYiBzaXRlIGFyZSBwYXNzd29yZCBwcm90ZWN0ZWQsIGhvd2V2ZXIgaWYgeW91Citjb250YWN0IHRoZSBBTEkgb2ZmaWNlIGluIFNhbiBKb3NlIHRoZXkgbWF5IGdpdmUgeW91IHRoZSBwYXNzd29yZC4KKworVGhlIE0xNTMzL00xNTQzQyBkZXZpY2VzIGFwcGVhciBhcyBGT1VSIHNlcGFyYXRlIGRldmljZXMgb24gdGhlIFBDSSBidXMuIEFuCitvdXRwdXQgb2YgbHNwY2kgd2lsbCBzaG93IHNvbWV0aGluZyBzaW1pbGFyIHRvIHRoZSBmb2xsb3dpbmc6CisKKyAgMDA6MDIuMCBVU0IgQ29udHJvbGxlcjogQWNlciBMYWJvcmF0b3JpZXMgSW5jLiBNNTIzNyAocmV2IDAzKQorICAwMDowMy4wIEJyaWRnZTogQWNlciBMYWJvcmF0b3JpZXMgSW5jLiBNNzEwMSAgICAgIDw9IFRISVMgSVMgVEhFIE9ORSBXRSBORUVECisgIDAwOjA3LjAgSVNBIGJyaWRnZTogQWNlciBMYWJvcmF0b3JpZXMgSW5jLiBNMTUzMyAocmV2IGMzKQorICAwMDowZi4wIElERSBpbnRlcmZhY2U6IEFjZXIgTGFib3JhdG9yaWVzIEluYy4gTTUyMjkgKHJldiBjMSkKKworKiogSU1QT1JUQU5UICoqCisqKiBJZiB5b3UgaGF2ZSBhIE0xNTMzIG9yIE0xNTQzQyBvbiB0aGUgYm9hcmQgYW5kIHlvdSBnZXQKKyoqICJhbGkxNXgzOiBFcnJvcjogQ2FuJ3QgZGV0ZWN0IGFsaTE1eDMhIgorKiogdGhlbiBydW4gbHNwY2kuCisqKiBJZiB5b3Ugc2VlIHRoZSAxNTMzIGFuZCA1MjI5IGRldmljZXMgYnV0IE5PVCB0aGUgNzEwMSBkZXZpY2UsCisqKiB0aGVuIHlvdSBtdXN0IGVuYWJsZSBBQ1BJLCB0aGUgUE1VLCBTTUIsIG9yIHNvbWV0aGluZyBzaW1pbGFyCisqKiBpbiB0aGUgQklPUy4gCisqKiBUaGUgZHJpdmVyIHdvbid0IHdvcmsgaWYgaXQgY2FuJ3QgZmluZCB0aGUgTTcxMDEgZGV2aWNlLgorCitUaGUgU01CIGNvbnRyb2xsZXIgaXMgcGFydCBvZiB0aGUgTTcxMDEgZGV2aWNlLCB3aGljaCBpcyBhbiBBQ1BJLWNvbXBsaWFudAorUG93ZXIgTWFuYWdlbWVudCBVbml0IChQTVUpLgorCitUaGUgd2hvbGUgTTcxMDEgZGV2aWNlIGhhcyB0byBiZSBlbmFibGVkIGZvciB0aGUgU01CIHRvIHdvcmsuIFlvdSBjYW4ndAoranVzdCBlbmFibGUgdGhlIFNNQiBhbG9uZS4gVGhlIFNNQiBhbmQgdGhlIEFDUEkgaGF2ZSBzZXBhcmF0ZSBJL08gc3BhY2VzLgorV2UgbWFrZSBzdXJlIHRoYXQgdGhlIFNNQiBpcyBlbmFibGVkLiBXZSBsZWF2ZSB0aGUgQUNQSSBhbG9uZS4KKworRmVhdHVyZXMgCistLS0tLS0tLSAKKworVGhpcyBkcml2ZXIgY29udHJvbHMgdGhlIFNNQiBIb3N0IG9ubHkuIFRoZSBTTUIgU2xhdmUKK2NvbnRyb2xsZXIgb24gdGhlIE0xNVgzIGlzIG5vdCBlbmFibGVkLiBUaGlzIGRyaXZlciBkb2VzIG5vdCB1c2UKK2ludGVycnVwdHMuCisKKworSXNzdWVzCistLS0tLS0KKworVGhpcyBkcml2ZXIgcmVxdWVzdHMgdGhlIEkvTyBzcGFjZSBmb3Igb25seSB0aGUgU01CCityZWdpc3RlcnMuIEl0IGRvZXNuJ3QgdXNlIHRoZSBBQ1BJIHJlZ2lvbi4KKworT24gdGhlIEFTVVMgUDVBIG1vdGhlcmJvYXJkLCB0aGVyZSBhcmUgc2V2ZXJhbCByZXBvcnRzIHRoYXQKK3RoZSBTTUJ1cyB3aWxsIGhhbmcgYW5kIHRoaXMgY2FuIG9ubHkgYmUgcmVzb2x2ZWQgYnkKK3Bvd2VyaW5nIG9mZiB0aGUgY29tcHV0ZXIuIEl0IGFwcGVhcnMgdG8gYmUgd29yc2Ugd2hlbiB0aGUgYm9hcmQKK2dldHMgaG90LCBmb3IgZXhhbXBsZSB1bmRlciBoZWF2eSBDUFUgbG9hZCwgb3IgaW4gdGhlIHN1bW1lci4KK1RoZXJlIG1heSBiZSBlbGVjdHJpY2FsIHByb2JsZW1zIG9uIHRoaXMgYm9hcmQuCitPbiB0aGUgUDVBLCB0aGUgVzgzNzgxRCBzZW5zb3IgY2hpcCBpcyBvbiBib3RoIHRoZSBJU0EgYW5kCitTTUJ1cy4gVGhlcmVmb3JlIHRoZSBTTUJ1cyBoYW5ncyBjYW4gZ2VuZXJhbGx5IGJlIGF2b2lkZWQKK2J5IGFjY2Vzc2luZyB0aGUgVzgzNzgxRCBvbiB0aGUgSVNBIGJ1cyBvbmx5LgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLWFtZDc1NiBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtYW1kNzU2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZjMwODcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLWFtZDc1NgpAQCAtMCwwICsxLDI1IEBACitLZXJuZWwgZHJpdmVyIGkyYy1hbWQ3NTYKKworU3VwcG9ydGVkIGFkYXB0ZXJzOgorICAqIEFNRCA3NTYKKyAgKiBBTUQgNzY2CisgICogQU1EIDc2OAorICAqIEFNRCA4MTExCisgICAgRGF0YXNoZWV0czogUHVibGljbHkgYXZhaWxhYmxlIG9uIEFNRCB3ZWJzaXRlCisKKyAgKiBuVmlkaWEgbkZvcmNlCisgICAgRGF0YXNoZWV0OiBVbmF2YWlsYWJsZQorCitBdXRob3JzOgorCUZyb2RvIExvb2lqYWFyZCA8ZnJvZG9sQGRkcy5ubD4sCisJUGhpbGlwIEVkZWxicm9jayA8cGhpbEBuZXRyb2VkZ2UuY29tPiAKKworRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK1RoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBBTUQgNzU2LCA3NjYsIDc2OCBhbmQgODExMSBQZXJpcGhlcmFsIEJ1cworQ29udHJvbGxlcnMsIGFuZCB0aGUgblZpZGlhIG5Gb3JjZS4KKworTm90ZSB0aGF0IGZvciB0aGUgODExMSwgdGhlcmUgYXJlIHR3byBTTUJ1cyBhZGFwdGVycy4gVGhlIFNNQnVzIDEuMCBhZGFwdGVyCitpcyBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIsIGFuZCB0aGUgU01CdXMgMi4wIGFkYXB0ZXIgaXMgc3VwcG9ydGVkIGJ5IHRoZQoraTJjLWFtZDgxMTEgZHJpdmVyLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1hbWQ4MTExIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1hbWQ4MTExCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiMjk0ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLWFtZDgxMTEKQEAgLTAsMCArMSw0MSBAQAorS2VybmVsIGRyaXZlciBpMmMtYWRtODExMQorCitTdXBwb3J0ZWQgYWRhcHRlcnM6CisgICAgKiBBTUQtODExMSBTTUJ1cyAyLjAgUENJIGludGVyZmFjZQorCitEYXRhc2hlZXRzOgorCUFNRCBkYXRhc2hlZXQgbm90IHlldCBhdmFpbGFibGUsIGJ1dCBhbG1vc3QgZXZlcnl0aGluZyBjYW4gYmUgZm91bmQKKwlpbiBwdWJsaWNhbGx5IGF2YWlsYWJsZSBBQ1BJIDIuMCBzcGVjaWZpY2F0aW9uLCB3aGljaCB0aGUgYWRhcHRlciAKKwlmb2xsb3dzLgorCitBdXRob3I6IFZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHN1c2UuY3o+CisKK0Rlc2NyaXB0aW9uCistLS0tLS0tLS0tLQorCitJZiB5b3Ugc2VlIHNvbWV0aGluZyBsaWtlIHRoaXM6CisKKzAwOjA3LjIgU01CdXM6IEFkdmFuY2VkIE1pY3JvIERldmljZXMgW0FNRF0gQU1ELTgxMTEgU01CdXMgMi4wIChyZXYgMDIpCisgICAgICAgIFN1YnN5c3RlbTogQWR2YW5jZWQgTWljcm8gRGV2aWNlcyBbQU1EXSBBTUQtODExMSBTTUJ1cyAyLjAKKyAgICAgICAgRmxhZ3M6IG1lZGl1bSBkZXZzZWwsIElSUSAxOQorICAgICAgICBJL08gcG9ydHMgYXQgZDQwMCBbc2l6ZT0zMl0KKworaW4geW91ciAnbHNwY2kgLXYnLCB0aGVuIHRoaXMgZHJpdmVyIGlzIGZvciB5b3VyIGNoaXBzZXQuCisKK1Byb2Nlc3MgQ2FsbCBTdXBwb3J0CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTdXBwb3J0ZWQuCisKK1NNQnVzIDIuMCBTdXBwb3J0CistLS0tLS0tLS0tLS0tLS0tLQorCitTdXBwb3J0ZWQuIEJvdGggUEVDIGFuZCBibG9jayBwcm9jZXNzIGNhbGwgc3VwcG9ydCBpcyBpbXBsZW1lbnRlZC4gU2xhdmUKK21vZGUgb3IgaG9zdCBub3RpZmljYXRpb24gYXJlIG5vdCB5ZXQgaW1wbGVtZW50ZWQuCisKK05vdGVzCistLS0tLQorCitOb3RlIHRoYXQgZm9yIHRoZSA4MTExLCB0aGVyZSBhcmUgdHdvIFNNQnVzIGFkYXB0ZXJzLiBUaGUgU01CdXMgMi4wIGFkYXB0ZXIKK2lzIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlciwgYW5kIHRoZSBTTUJ1cyAxLjAgYWRhcHRlciBpcyBzdXBwb3J0ZWQgYnkgdGhlCitpMmMtYW1kNzU2IGRyaXZlci4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtaTgwMSBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtaTgwMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDRiMjcxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1pODAxCkBAIC0wLDAgKzEsODAgQEAKK0tlcm5lbCBkcml2ZXIgaTJjLWk4MDEKKworU3VwcG9ydGVkIGFkYXB0ZXJzOgorICAqIEludGVsIDgyODAxQUEgYW5kIDgyODAxQUIgKElDSCBhbmQgSUNIMCAtIHBhcnQgb2YgdGhlCisgICAgJzgxMCcgYW5kICc4MTBFJyBjaGlwc2V0cykKKyAgKiBJbnRlbCA4MjgwMUJBIChJQ0gyIC0gcGFydCBvZiB0aGUgJzgxNUUnIGNoaXBzZXQpCisgICogSW50ZWwgODI4MDFDQS9DQU0gKElDSDMpCisgICogSW50ZWwgODI4MDFEQiAoSUNINCkgKEhXIFBFQyBzdXBwb3J0ZWQsIDMyIGJ5dGUgYnVmZmVyIG5vdCBzdXBwb3J0ZWQpCisgICogSW50ZWwgODI4MDFFQi9FUiAoSUNINSkgKEhXIFBFQyBzdXBwb3J0ZWQsIDMyIGJ5dGUgYnVmZmVyIG5vdCBzdXBwb3J0ZWQpCisgICogSW50ZWwgNjMwMEVTQgorICAqIEludGVsIDgyODAxRkIvRlIvRlcvRlJXIChJQ0g2KQorICAqIEludGVsIElDSDcKKyAgICBEYXRhc2hlZXRzOiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIEludGVsIHdlYnNpdGUKKworQXV0aG9yczogCisJRnJvZG8gTG9vaWphYXJkIDxmcm9kb2xAZGRzLm5sPiwgCisJUGhpbGlwIEVkZWxicm9jayA8cGhpbEBuZXRyb2VkZ2UuY29tPiwgCisJTWFyayBTdHVkZWJha2VyIDxtZHN4eXoxMjNAeWFob28uY29tPgorCisKK01vZHVsZSBQYXJhbWV0ZXJzCistLS0tLS0tLS0tLS0tLS0tLQorCisqIGZvcmNlX2FkZHI6IGludAorICBGb3JjaWJseSBlbmFibGUgdGhlIElDSCBhdCB0aGUgZ2l2ZW4gYWRkcmVzcy4gRVhUUkVNRUxZIERBTkdFUk9VUyEKKworCitEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0KKworVGhlIElDSCAocHJvcGVybHkga25vd24gYXMgdGhlIDgyODAxQUEpLCBJQ0gwICg4MjgwMUFCKSwgSUNIMiAoODI4MDFCQSksCitJQ0gzICg4MjgwMUNBL0NBTSkgYW5kIGxhdGVyIGRldmljZXMgYXJlIEludGVsIGNoaXBzIHRoYXQgYXJlIGEgcGFydCBvZgorSW50ZWwncyAnODEwJyBjaGlwc2V0IGZvciBDZWxlcm9uLWJhc2VkIFBDcywgJzgxMEUnIGNoaXBzZXQgZm9yCitQZW50aXVtLWJhc2VkIFBDcywgJzgxNUUnIGNoaXBzZXQsIGFuZCBvdGhlcnMuCisKK1RoZSBJQ0ggY2hpcHMgY29udGFpbiBhdCBsZWFzdCBTRVZFTiBzZXBhcmF0ZSBQQ0kgZnVuY3Rpb25zIGluIFRXTyBsb2dpY2FsCitQQ0kgZGV2aWNlcy4gQW4gb3V0cHV0IG9mIGxzcGNpIHdpbGwgc2hvdyBzb21ldGhpbmcgc2ltaWxhciB0byB0aGUKK2ZvbGxvd2luZzoKKworICAwMDoxZS4wIFBDSSBicmlkZ2U6IEludGVsIENvcnBvcmF0aW9uOiBVbmtub3duIGRldmljZSAyNDE4IChyZXYgMDEpCisgIDAwOjFmLjAgSVNBIGJyaWRnZTogSW50ZWwgQ29ycG9yYXRpb246IFVua25vd24gZGV2aWNlIDI0MTAgKHJldiAwMSkKKyAgMDA6MWYuMSBJREUgaW50ZXJmYWNlOiBJbnRlbCBDb3Jwb3JhdGlvbjogVW5rbm93biBkZXZpY2UgMjQxMSAocmV2IDAxKQorICAwMDoxZi4yIFVTQiBDb250cm9sbGVyOiBJbnRlbCBDb3Jwb3JhdGlvbjogVW5rbm93biBkZXZpY2UgMjQxMiAocmV2IDAxKQorICAwMDoxZi4zIFVua25vd24gY2xhc3MgWzBjMDVdOiBJbnRlbCBDb3Jwb3JhdGlvbjogVW5rbm93biBkZXZpY2UgMjQxMyAocmV2IDAxKQorCitUaGUgU01CdXMgY29udHJvbGxlciBpcyBmdW5jdGlvbiAzIGluIGRldmljZSAxZi4gQ2xhc3MgMGMwNSBpcyBTTUJ1cyBTZXJpYWwKK0NvbnRyb2xsZXIuCisKK0lmIHlvdSBkbyBOT1Qgc2VlIHRoZSAyNHgzIGRldmljZSBhdCBmdW5jdGlvbiAzLCBhbmQgeW91IGNhbid0IGZpZ3VyZSBvdXQKK2FueSB3YXkgaW4gdGhlIEJJT1MgdG8gZW5hYmxlIGl0LAorCitUaGUgSUNIIGNoaXBzIGFyZSBxdWl0ZSBzaW1pbGFyIHRvIEludGVsJ3MgUElJWDQgY2hpcCwgYXQgbGVhc3QgaW4gdGhlCitTTUJ1cyBjb250cm9sbGVyLgorCitTZWUgdGhlIGZpbGUgaTJjLXBpaXg0IGZvciBzb21lIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCisKKworUHJvY2VzcyBDYWxsIFN1cHBvcnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vdCBzdXBwb3J0ZWQuCisKKworSTJDIEJsb2NrIFJlYWQgU3VwcG9ydAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOb3Qgc3VwcG9ydGVkIGF0IHRoZSBtb21lbnQuCisKKworU01CdXMgMi4wIFN1cHBvcnQKKy0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSA4MjgwMURCIChJQ0g0KSBhbmQgbGF0ZXIgY2hpcHMgc3VwcG9ydCBzZXZlcmFsIFNNQnVzIDIuMCBmZWF0dXJlcy4KKworKioqKioqKioqKioqKioqKioqKioqKgorVGhlIGxtX3NlbnNvcnMgcHJvamVjdCBncmF0ZWZ1bGx5IGFja25vd2xlZGdlcyB0aGUgc3VwcG9ydCBvZiBUZXhhcworSW5zdHJ1bWVudHMgaW4gdGhlIGluaXRpYWwgZGV2ZWxvcG1lbnQgb2YgdGhpcyBkcml2ZXIuCisKK1RoZSBsbV9zZW5zb3JzIHByb2plY3QgZ3JhdGVmdWxseSBhY2tub3dsZWRnZXMgdGhlIHN1cHBvcnQgb2YgSW50ZWwgaW4gdGhlCitkZXZlbG9wbWVudCBvZiBTTUJ1cyAyLjAgLyBJQ0g0IGZlYXR1cmVzIG9mIHRoaXMgZHJpdmVyLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1pODEwIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1pODEwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NDRlYjMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLWk4MTAKQEAgLTAsMCArMSw0NiBAQAorS2VybmVsIGRyaXZlciBpMmMtaTgxMAorCitTdXBwb3J0ZWQgYWRhcHRlcnM6CisgICogSW50ZWwgODI4MTAsIDgyODEwLURDMTAwLCA4MjgxMEUsIGFuZCA4MjgxNSAoR01DSCkKKworQXV0aG9yczogCisJRnJvZG8gTG9vaWphYXJkIDxmcm9kb2xAZGRzLm5sPiwgCisJUGhpbGlwIEVkZWxicm9jayA8cGhpbEBuZXRyb2VkZ2UuY29tPiwKKyAgICAgICAgS3n2c3RpIE3kbGtraSA8a21hbGtraUBjYy5odXQuZmk+LAorCVJhbHBoIE1ldHpsZXIgPHJqa21AdGhwLnVuaS1rb2Vsbi5kZT4sCisJTWFyayBELiBTdHVkZWJha2VyIDxtZHN4eXoxMjNAeWFob28uY29tPgorCitNYWluIGNvbnRhY3Q6IE1hcmsgU3R1ZGViYWtlciA8bWRzeHl6MTIzQHlhaG9vLmNvbT4KKworRGVzY3JpcHRpb24gCistLS0tLS0tLS0tLSAKKworV0FSTklORzogSWYgeW91IGhhdmUgYW4gJzgxMCcgb3IgJzgxNScgbW90aGVyYm9hcmQsIHlvdXIgc3RhbmRhcmQgSTJDCit0ZW1wZXJhdHVyZSBzZW5zb3JzIGFyZSBtb3N0IGxpa2VseSBvbiB0aGUgODAxJ3MgSTJDIGJ1cy4gWW91IHdhbnQgdGhlCitpMmMtaTgwMSBkcml2ZXIgZm9yIHRob3NlLCBub3QgdGhpcyBkcml2ZXIuCisKK05vdyBmb3IgdGhlIGkyYy1pODEwLi4uCisKK1RoZSBHTUNIIGNoaXAgY29udGFpbnMgdHdvIEkyQyBpbnRlcmZhY2VzLgorCitUaGUgZmlyc3QgaW50ZXJmYWNlIGlzIHVzZWQgZm9yIEREQyAoRGF0YSBEaXNwbGF5IENoYW5uZWwpIHdoaWNoIGlzIGEKK3NlcmlhbCBjaGFubmVsIHRocm91Z2ggdGhlIFZHQSBtb25pdG9yIGNvbm5lY3RvciB0byBhIEREQy1jb21wbGlhbnQKK21vbml0b3IuIFRoaXMgaW50ZXJmYWNlIGlzIGRlZmluZWQgYnkgdGhlIFZpZGVvIEVsZWN0cm9uaWNzIFN0YW5kYXJkcworQXNzb2NpYXRpb24gKFZFU0EpLiBUaGUgc3RhbmRhcmRzIGFyZSBhdmFpbGFibGUgZm9yIHB1cmNoYXNlIGF0CitodHRwOi8vd3d3LnZlc2Eub3JnIC4KKworVGhlIHNlY29uZCBpbnRlcmZhY2UgaXMgYSBnZW5lcmFsLXB1cnBvc2UgSTJDIGJ1cy4gSXQgbWF5IGJlIGNvbm5lY3RlZCB0byBhCitUVi1vdXQgY2hpcCBzdWNoIGFzIHRoZSBCVDg2OSBvciBwb3NzaWJseSB0byBhIGRpZ2l0YWwgZmxhdC1wYW5lbCBkaXNwbGF5LgorCitGZWF0dXJlcworLS0tLS0tLS0gCisKK0JvdGggYnVzc2VzIHVzZSB0aGUgaTJjLWFsZ28tYml0IGRyaXZlciBmb3IgJ2JpdCBiYW5naW5nJworYW5kIHN1cHBvcnQgZm9yIHNwZWNpZmljIHRyYW5zYWN0aW9ucyBpcyBwcm92aWRlZCBieSBpMmMtYWxnby1iaXQuCisKK0lzc3VlcworLS0tLS0tCisKK0lmIHlvdSBlbmFibGUgYnVzIHRlc3RpbmcgaW4gaTJjLWFsZ28tYml0IChpbnNtb2QgaTJjLWFsZ28tYml0IGJpdF90ZXN0PTEpLAordGhlIHRlc3QgbWF5IGZhaWw7IGlmIHNvLCB0aGUgaTJjLWk4MTAgZHJpdmVyIHdvbid0IGJlIGluc2VydGVkLiBIb3dldmVyLAord2UgdGhpbmsgdGhpcyBoYXMgYmVlbiBmaXhlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtbmZvcmNlMiBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtbmZvcmNlMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzc5ZTE4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1uZm9yY2UyCkBAIC0wLDAgKzEsNDEgQEAKK0tlcm5lbCBkcml2ZXIgaTJjLW5mb3JjZTIKKworU3VwcG9ydGVkIGFkYXB0ZXJzOgorICAqIG5Gb3JjZTIgTUNQICAgICAgICAgICAgICAgIDEwZGU6MDA2NCAKKyAgKiBuRm9yY2UyIFVsdHJhIDQwMCBNQ1AgICAgICAxMGRlOjAwODQgCisgICogbkZvcmNlMyBQcm8xNTAgTUNQICAgICAgICAgMTBkZTowMEQ0IAorICAqIG5Gb3JjZTMgMjUwR2IgTUNQICAgICAgICAgIDEwZGU6MDBFNCAKKyAgKiBuRm9yY2U0IE1DUAkgICAgICAgCSAgICAgICAxMGRlOjAwNTIKKworRGF0YXNoZWV0OiBub3QgcHVibGljYWxseSBhdmFpbGFibGUsIGJ1dCBzZWVtcyB0byBiZSBzaW1pbGFyIHRvIHRoZQorICAgICAgICAgICBBTUQtODExMSBTTUJ1cyAyLjAgYWRhcHRlci4KKworQXV0aG9yczoKKwlIYW5zLUZyaWVkZXIgVm9ndCA8aGZ2b2d0QGFyY29yLmRlPiwgCisJVGhvbWFzIExlaWJvbGQgPHRob21hc0BwbHguY29tPiwgCisgICAgICAgIFBhdHJpY2sgRHJla2VyIDxwYXRyaWNrQGRyZWtlci5kZT4KKwkKK0Rlc2NyaXB0aW9uCistLS0tLS0tLS0tLQorCitpMmMtbmZvcmNlMiBpcyBhIGRyaXZlciBmb3IgdGhlIFNNQnVzZXMgaW5jbHVkZWQgaW4gdGhlIG5WaWRpYSBuRm9yY2UyIE1DUC4KKworSWYgeW91ciAnbHNwY2kgLXYnIGxpc3Rpbmcgc2hvd3Mgc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZywKKworMDA6MDEuMSBTTUJ1czogblZpZGlhIENvcnBvcmF0aW9uOiBVbmtub3duIGRldmljZSAwMDY0IChyZXYgYTIpCisgICAgICAgIFN1YnN5c3RlbTogQXN1c3RlayBDb21wdXRlciwgSW5jLjogVW5rbm93biBkZXZpY2UgMGMxMQorICAgICAgICBGbGFnczogNjZNaHosIGZhc3QgZGV2c2VsLCBJUlEgNQorICAgICAgICBJL08gcG9ydHMgYXQgYzAwMCBbc2l6ZT0zMl0KKyAgICAgICAgQ2FwYWJpbGl0aWVzOiA8YXZhaWxhYmxlIG9ubHkgdG8gcm9vdD4KKwordGhlbiB0aGlzIGRyaXZlciBzaG91bGQgc3VwcG9ydCB0aGUgU01CdXNlcyBvZiB5b3VyIG1vdGhlcmJvYXJkLgorCisKK05vdGVzCistLS0tLQorCitUaGUgU01CdXMgYWRhcHRlciBpbiB0aGUgbkZvcmNlMiBjaGlwc2V0IHNlZW1zIHRvIGJlIHZlcnkgc2ltaWxhciB0byB0aGUKK1NNQnVzIDIuMCBhZGFwdGVyIGluIHRoZSBBTUQtODExMSBzb3V0aGJyaWRnZS4gSG93ZXZlciwgSSBjb3VsZCBvbmx5IGdldAordGhlIGRyaXZlciB0byB3b3JrIHdpdGggZGlyZWN0IEkvTyBhY2Nlc3MsIHdoaWNoIGlzIGRpZmZlcmVudCB0byB0aGUgRUMKK2ludGVyZmFjZSBvZiB0aGUgQU1ELTgxMTEuIFRlc3RlZCBvbiBBc3VzIEE3TjhYLiBUaGUgQUNQSSBEU0RUIHRhYmxlIG9mIHRoZQorQXN1cyBBN044WCBsaXN0cyB0d28gU01CdXNlcywgYm90aCBvZiB3aGljaCBhcmUgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0IGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmMWQwMDgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQKQEAgLTAsMCArMSwxNTQgQEAKK0tlcm5lbCBkcml2ZXIgaTJjLXBhcnBvcnQKKworQXV0aG9yOiBKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9yZz4gCisKK1RoaXMgaXMgYSB1bmlmaWVkIGRyaXZlciBmb3Igc2V2ZXJhbCBpMmMtb3Zlci1wYXJhbGxlbC1wb3J0IGFkYXB0ZXJzLAorc3VjaCBhcyB0aGUgb25lcyBtYWRlIGJ5IFBoaWxpcHMsIFZlbGxlbWFuIG9yIEVMVi4gVGhpcyBkcml2ZXIgaXMKK21lYW50IGFzIGEgcmVwbGFjZW1lbnQgZm9yIHRoZSBvbGRlciwgaW5kaXZpZHVhbCBkcml2ZXJzOgorICogaTJjLXBoaWxpcHMtcGFyCisgKiBpMmMtZWx2CisgKiBpMmMtdmVsbGVtYW4KKyAqIHZpZGVvL2kyYy1wYXJwb3J0IChOT1QgdGhlIHNhbWUgYXMgdGhpcyBvbmUsIGRlZGljYXRlZCB0byBob21lIGJyZXcKKyAgICAgICAgICAgICAgICAgICAgICB0ZWxldGV4dCBhZGFwdGVycykKKworSXQgY3VycmVudGx5IHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgZGV2aWNlczoKKyAqIFBoaWxpcHMgYWRhcHRlcgorICogaG9tZSBicmV3IHRlbGV0ZXh0IGFkYXB0ZXIKKyAqIFZlbGxlbWFuIEs4MDAwIGFkYXB0ZXIKKyAqIEVMViBhZGFwdGVyCisgKiBBbmFsb2cgRGV2aWNlcyBldmFsdWF0aW9uIGJvYXJkcyAoQURNMTAyNSwgQURNMTAzMCwgQURNMTAzMSwgQURNMTAzMikKKworVGhlc2UgZGV2aWNlcyB1c2UgZGlmZmVyZW50IHBpbm91dCBjb25maWd1cmF0aW9ucywgc28geW91IGhhdmUgdG8gdGVsbAordGhlIGRyaXZlciB3aGF0IHlvdSBoYXZlLCB1c2luZyB0aGUgdHlwZSBtb2R1bGUgcGFyYW1ldGVyLiBUaGVyZSBpcyBubword2F5IHRvIGF1dG9kZXRlY3QgdGhlIGRldmljZXMuIFN1cHBvcnQgZm9yIGRpZmZlcmVudCBwaW5vdXQgY29uZmlndXJhdGlvbnMKK2NhbiBiZSBlYXNpbHkgYWRkZWQgd2hlbiBuZWVkZWQuCisKKworQnVpbGRpbmcgeW91ciBvd24gYWRhcHRlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3Ugd2FudCB0byBidWlsZCB5b3Ugb3duIGkyYy1vdmVyLXBhcmFsbGVsLXBvcnQgYWRhcHRlciwgaGVyZSBpcworYSBzYW1wbGUgZWxlY3Ryb25pY3Mgc2NoZW1hIChjcmVkaXRzIGdvIHRvIFN5bHZhaW4gTXVuYXV0KToKKworRGV2aWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEMKK1NpZGUgICAgICAgICAgX19fX19fX19fX19fX19fX19fX1ZkZCAoKykgICAgICAgICAgICAgICAgICAgIFNpZGUKKyAgICAgICAgICAgICAgIHwgICAgfCAgICAgICAgIHwKKyAgICAgICAgICAgICAgLS0tICAtLS0gICAgICAgLS0tCisgICAgICAgICAgICAgIHwgfCAgfCB8ICAgICAgIHwgfAorICAgICAgICAgICAgICB8UnwgIHxSfCAgICAgICB8UnwKKyAgICAgICAgICAgICAgfCB8ICB8IHwgICAgICAgfCB8CisgICAgICAgICAgICAgIC0tLSAgLS0tICAgICAgIC0tLQorICAgICAgICAgICAgICAgfCAgICB8ICAgICAgICAgfAorICAgICAgICAgICAgICAgfCAgICB8ICAgIC98ICAgfAorU0NMICAtLS0tLS0tLS0teC0tLS0tLS0tbyB8LS0tLS0tLS0tLS14LS0tLS0tLS0tLS0tLS0tLS0tLSAgcGluIDIKKyAgICAgICAgICAgICAgICAgICAgfCAgICBcfCAgIHwgICAgICAgfAorICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCAgICAgICB8CisgICAgICAgICAgICAgICAgICAgIHwgICB8XCAgICB8ICAgICAgIHwKK1NEQSAgLS0tLS0tLS0tLXgtLS0teC0tLXwgby0tLXgtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIHBpbiAxMworICAgICAgICAgICAgICAgfCAgICAgICAgfC8gICAgICAgICAgICB8CisgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgIHwgICAgICAgICAvfCAgICAgICAgICAgfAorICAgICAgICAgICAgICAgLS0tLS0tLS0tbyB8LS0tLS0tLS0tLS0tLS0tLXgtLS0tLS0tLS0tLS0tLSAgcGluIDMKKyAgICAgICAgICAgICAgICAgICAgICAgICBcfCAgICAgICAgICAgfCAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLSAgLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8ICB8IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8UnwgIHxSfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgfCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tICAtLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICB8IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIyAgIyMjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR05EICBHTkQKKyAgICAgICAgCitSZW1hcmtzOgorIC0gVGhpcyBpcyB0aGUgZXhhY3QgcGlub3V0IGFuZCBlbGVjdHJvbmljcyB1c2VkIG9uIHRoZSBBbmFsb2cgRGV2aWNlcworICAgZXZhbHVhdGlvbiBib2FyZHMuCisgICAgICAgICAgICAgICAgICAgL3wKKyAtIEFsbCBpbnZlcnRlcnMgLW8gfC0gbXVzdCBiZSA3NEhDMDUsIHRoZXkgbXVzdCBiZSBvcGVuIGNvbGxlY3RvciBvdXRwdXQuCisgICAgICAgICAgICAgICAgICAgXHwKKyAtIEFsbCByZXNpdG9ycyBhcmUgMTBrLgorIC0gUGlucyAxOC0yNSBvZiB0aGUgcGFyYWxsZWwgcG9ydCBjb25uZWN0ZWQgdG8gR05ELgorIC0gUGlucyA0LTkgKEQyLUQ3KSBjb3VsZCBiZSB1c2VkIGFzIFZERCBpcyB0aGUgZHJpdmVyIGRyaXZlcyB0aGVtIGhpZ2guCisgICBUaGUgQURNMTAzMiBldmFsdWF0aW9uIGJvYXJkIHVzZXMgRDQtRDcuIEJld2FyZSB0aGF0IHRoZSBhbW91bnQgb2YKKyAgIGN1cnJlbnQgeW91IGNhbiBkcmF3IGZyb20gdGhlIHBhcmFsbGVsIHBvcnQgaXMgbGltaXRlZC4gQWxzbyBub3RlIHRoYXQKKyAgIGFsbCBjb25uZWN0ZWQgbGluZXMgTVVTVCBCRSBkcml2ZW4gYXQgdGhlIHNhbWUgc3RhdGUsIGVsc2UgeW91J2xsIHNob3J0CisgICBjaXJjdWl0IHRoZSBvdXRwdXQgYnVmZmVycyEgU28gcGx1Z2dpbmcgdGhlIEkyQyBhZGFwdGVyIGFmdGVyIGxvYWRpbmcKKyAgIHRoZSBpMmMtcGFycG9ydCBtb2R1bGUgbWlnaHQgYmUgYSBnb29kIHNhZmV0eSBzaW5jZSBkYXRhIGxpbmUgc3RhdGUKKyAgIHByaW9yIHRvIGluaXQgbWF5IGJlIHVua25vd24uIAorIC0gVGhpcyBpcyA1ViEKKyAtIE9idmlvdXNseSB5b3UgY2Fubm90IHJlYWQgU0NMIChzbyBpdCdzIG5vdCByZWFsbHkgc3RhbmRhcmQtY29tcGxpYW50KS4KKyAgIFByZXR0eSBlYXN5IHRvIGFkZCwganVzdCBjb3B5IHRoZSBTREEgcGFydCBhbmQgdXNlIGFub3RoZXIgaW5wdXQgcGluLgorICAgVGhhdCB3b3VsZCBnaXZlIChFTFYgY29tcGF0aWJsZSBwaW5vdXQpOgorCisKK0RldmljZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDCitTaWRlICAgICAgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1ZkZCAoKykgICAgICAgICBTaWRlCisgICAgICAgICAgICAgICB8ICAgIHwgICAgICAgICAgICB8ICAgIHwKKyAgICAgICAgICAgICAgLS0tICAtLS0gICAgICAgICAgLS0tICAtLS0KKyAgICAgICAgICAgICAgfCB8ICB8IHwgICAgICAgICAgfCB8ICB8IHwKKyAgICAgICAgICAgICAgfFJ8ICB8UnwgICAgICAgICAgfFJ8ICB8UnwKKyAgICAgICAgICAgICAgfCB8ICB8IHwgICAgICAgICAgfCB8ICB8IHwKKyAgICAgICAgICAgICAgLS0tICAtLS0gICAgICAgICAgLS0tICAtLS0KKyAgICAgICAgICAgICAgIHwgICAgfCAgICAgICAgICAgIHwgICAgfAorICAgICAgICAgICAgICAgfCAgICB8ICAgICAgfFwgICAgfCAgICB8CitTQ0wgIC0tLS0tLS0tLS14LS0tLS0tLS14LS18IG8tLS14LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBwaW4gMTUKKyAgICAgICAgICAgICAgICAgICAgfCAgIHwgIHwvICAgICAgICAgfCAKKyAgICAgICAgICAgICAgICAgICAgfCAgIHwgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICB8ICAgfCAgIC98ICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgIHwgICAtLS1vIHwtLS0tLS0tLS0tLS0teC0tLS0tLS0tLS0tLS0tICBwaW4gMgorICAgICAgICAgICAgICAgICAgICB8ICAgICAgIFx8ICAgICAgICB8ICAgIHwKKyAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCAgICB8CisgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgICAgfAorICAgICAgICAgICAgICAgICAgICB8ICAgICAgfFwgICAgICAgICB8ICAgIHwKK1NEQSAgLS0tLS0tLS0tLS0tLS0teC0tLXgtLXwgby0tLS0tLS0teC0tLS0tLS0tLS0tLS0tLS0tLS0gIHBpbiAxMAorICAgICAgICAgICAgICAgICAgICAgICAgfCAgfC8gICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICB8ICAgL3wgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgLS0tbyB8LS0tLS0tLS0tLS0tLS0tLS0teC0tLS0tLS0tLSAgcGluIDMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcfCAgICAgICAgICAgICB8ICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLSAgLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgIHwgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFJ8ICB8UnwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgfCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0gIC0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgfCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIyAgIyMjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTkQgIEdORAorCisKK0lmIHBvc3NpYmxlLCB5b3Ugc2hvdWxkIHVzZSB0aGUgc2FtZSBwaW5vdXQgY29uZmlndXJhdGlvbiBhcyBleGlzdGluZworYWRhcHRlcnMgZG8sIHNvIHlvdSB3b24ndCBldmVuIGhhdmUgdG8gY2hhbmdlIHRoZSBjb2RlLgorCisKK1NpbWlsYXIgKGJ1dCBkaWZmZXJlbnQpIGRyaXZlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBkcml2ZXIgaXMgTk9UIHRoZSBzYW1lIGFzIHRoZSBpMmMtcHBvcnQgZHJpdmVyIGZvdW5kIGluIHRoZSBpMmMKK3BhY2thZ2UuIFRoZSBpMmMtcHBvcnQgZHJpdmVyIG1ha2VzIHVzZSBvZiBtb2Rlcm4gcGFyYWxsZWwgcG9ydCBmZWF0dXJlcyBzbwordGhhdCB5b3UgZG9uJ3QgbmVlZCBhZGRpdGlvbmFsIGVsZWN0cm9uaWNzLiBJdCBoYXMgb3RoZXIgcmVzdHJpY3Rpb25zCitob3dldmVyLCBhbmQgd2FzIG5vdCBwb3J0ZWQgdG8gTGludXggMi42ICh5ZXQpLgorCitUaGlzIGRyaXZlciBpcyBhbHNvIE5PVCB0aGUgc2FtZSBhcyB0aGUgaTJjLXBjZi1lcHAgZHJpdmVyIGZvdW5kIGluIHRoZQorbG1fc2Vuc29ycyBwYWNrYWdlLiBUaGUgaTJjLXBjZi1lcHAgZHJpdmVyIGRvZXNuJ3QgdXNlIHRoZSBwYXJhbGxlbCBwb3J0IGFzCithbiBJMkMgYnVzIGRpcmVjdGx5LiBJbnN0ZWFkLCBpdCB1c2VzIGl0IHRvIGNvbnRyb2wgYW4gZXh0ZXJuYWwgSTJDIGJ1cworbWFzdGVyLiBUaGF0IGRyaXZlciB3YXMgbm90IHBvcnRlZCB0byBMaW51eCAyLjYgKHlldCkgZWl0aGVyLgorCisKK0xlZ2FjeSBkb2N1bWVudGF0aW9uIGZvciBWZWxsZW1hbiBhZGFwdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVc2VmdWwgbGlua3M6CitWZWxsZW1hbiAgICAgICAgICAgICAgICBodHRwOi8vd3d3LnZlbGxlbWFuLmJlLworVmVsbGVtYW4gSzgwMDAgSG93dG8gICAgaHR0cDovL2hvd3RvLmh0bHcxNi5hYy5hdC9rODAwMC1ob3d0by5odG1sCisKK1RoZSBwcm9qZWN0IGhhcyBsZWFkIHRvIG5ldyBsaWJzIGZvciB0aGUgVmVsbGVtYW4gSzgwMDAgYW5kIEs4MDA1OgorICBMSUJLODAwMCB2MS45OS4xIGFuZCBMSUJLODAwNSB2MC4yMQorV2l0aCB0aGVzZSBsaWJzLCB5b3UgY2FuIGNvbnRyb2wgdGhlIEs4MDAwIGludGVyZmFjZSBjYXJkIGFuZCB0aGUgSzgwMDUKK3N0ZXBwZXIgbW90b3IgY2FyZCB3aXRoIHRoZSBzaW1wbGUgY29tbWFuZHMgd2hpY2ggYXJlIGluIHRoZSBvcmlnaW5hbAorVmVsbGVtYW4gc29mdHdhcmUsIGxpa2UgU2V0SU9jaGFubmVsLCBSZWFkQURjaGFubmVsLCBTZW5kU3RlcENDV0Z1bGwgYW5kCittYW55IG1vcmUsIHVzaW5nIC9kZXYvdmVsbGVtYW4uCisgIGh0dHA6Ly9ob21lLndhbmFkb28ubmwvaGloaWhpL2xpYms4MDAwLmh0bQorICBodHRwOi8vaG9tZS53YW5hZG9vLm5sL2hpaGloaS9saWJrODAwNS5odG0KKyAgaHR0cDovL3N0cnV5dmUubWluZS5udTo4MDgwL2luZGV4LnBocD9ibG9jaz1rODAwMAorICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2xpYms4MDA1LwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LWxpZ2h0IGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LWxpZ2h0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NzQzNjQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQtbGlnaHQKQEAgLTAsMCArMSwxMSBAQAorS2VybmVsIGRyaXZlciBpMmMtcGFycG9ydC1saWdodAorCitBdXRob3I6IEplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPiAKKworVGhpcyBkcml2ZXIgaXMgYSBsaWdodCB2ZXJzaW9uIG9mIGkyYy1wYXJwb3J0LiBJdCBkb2Vzbid0IGRlcGVuZCAgICAgICAgCitvbiB0aGUgcGFycG9ydCBkcml2ZXIsIGFuZCB1c2VzIGRpcmVjdCBJL08gYWNjZXNzIGluc3RlYWQuIFRoaXMgbWlnaHQgYmUKK3ByZWZlcmVkIG9uIGVtYmVkZGVkIHN5c3RlbXMgd2hlcmUgd2FzdGluZyBtZW1vcnkgZm9yIHRoZSBjbGVhbiBidXQgaGVhdnkKK3BhcnBvcnQgaGFuZGxpbmcgaXMgbm90IGFuIG9wdGlvbi4gVGhlIGRyYXdiYWNrIGlzIGEgcmVkdWNlZCBwb3J0YWJpbGl0eQorYW5kIHRoZSBpbXBvc3NpYmlsaXR5IHRvIGRhaXN5LWNoYWluIG90aGVyIHBhcmFsbGVsIHBvcnQgZGV2aWNlcy4gICAgICAgICAgICAgICAgIAorICAKK1BsZWFzZSBzZWUgaTJjLXBhcnBvcnQgZm9yIGRvY3VtZW50YXRpb24uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXBjYS1pc2EgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXBjYS1pc2EKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZjOGY0YwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtcGNhLWlzYQpAQCAtMCwwICsxLDIzIEBACitLZXJuZWwgZHJpdmVyIGkyYy1wY2EtaXNhCisKK1N1cHBvcnRlZCBhZGFwdGVyczoKK1RoaXMgZHJpdmVyIHN1cHBvcnRzIElTQSBib2FyZHMgdXNpbmcgdGhlIFBoaWxpcHMgUENBIDk1NjQgCitQYXJhbGxlbCBidXMgdG8gSTJDIGJ1cyBjb250cm9sbGVyIAorCitBdXRob3I6IElhbiBDYW1wYmVsbCA8aWNhbXBiZWxsQGFyY29tLmNvbT4sIEFyY29tIENvbnRyb2wgU3lzdGVtcyAKKworTW9kdWxlIFBhcmFtZXRlcnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKyogYmFzZSBpbnQKKyBJL08gYmFzZSBhZGRyZXNzCisqIGlycSBpbnQKKyBJUlEgaW50ZXJydXB0IAorKiBjbG9jayBpbnQgCisgQ2xvY2sgcmF0ZSBhcyBkZXNjcmliZWQgaW4gdGFibGUgMSBvZiBQQ0E5NTY0IGRhdGFzaGVldAorCitEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0KKworVGhpcyBkcml2ZXIgc3VwcG9ydHMgSVNBIGJvYXJkcyB1c2luZyB0aGUgUGhpbGlwcyBQQ0EgOTU2NCAKK1BhcmFsbGVsIGJ1cyB0byBJMkMgYnVzIGNvbnRyb2xsZXIgCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXBpaXg0IGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1waWl4NApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTZiNGI4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1waWl4NApAQCAtMCwwICsxLDcyIEBACitLZXJuZWwgZHJpdmVyIGkyYy1waWl4NAorCitTdXBwb3J0ZWQgYWRhcHRlcnM6CisgICogSW50ZWwgODIzNzFBQiBQSUlYNCBhbmQgUElJWDRFCisgICogSW50ZWwgODI0NDNNWCAoNDQwTVgpCisgICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIEludGVsIHdlYnNpdGUKKyAgKiBTZXJ2ZXJXb3JrcyBPU0I0LCBDU0I1IGFuZCBDU0I2IHNvdXRoYnJpZGdlcworICAgIERhdGFzaGVldDogT25seSBhdmFpbGFibGUgdmlhIE5EQSBmcm9tIFNlcnZlcldvcmtzCisgICogU3RhbmRhcmQgTWljcm9zeXN0ZW1zIChTTVNDKSBTTEM5MEU2NiAoVmljdG9yeTY2KSBzb3V0aGJyaWRnZQorICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBTTVNDIHdlYnNpdGUgaHR0cDovL3d3dy5zbXNjLmNvbQorCitBdXRob3JzOiAKKwlGcm9kbyBMb29pamFhcmQgPGZyb2RvbEBkZHMubmw+CisJUGhpbGlwIEVkZWxicm9jayA8cGhpbEBuZXRyb2VkZ2UuY29tPgorCisKK01vZHVsZSBQYXJhbWV0ZXJzCistLS0tLS0tLS0tLS0tLS0tLQorCisqIGZvcmNlOiBpbnQKKyAgRm9yY2libHkgZW5hYmxlIHRoZSBQSUlYNC4gREFOR0VST1VTIQorKiBmb3JjZV9hZGRyOiBpbnQKKyAgRm9yY2libHkgZW5hYmxlIHRoZSBQSUlYNCBhdCB0aGUgZ2l2ZW4gYWRkcmVzcy4gRVhUUkVNRUxZIERBTkdFUk9VUyEKKyogZml4X2hzdGNmZzogaW50CisgIEZpeCBjb25maWcgcmVnaXN0ZXIuIE5lZWRlZCBvbiBzb21lIGJvYXJkcyAoRm9yY2UgQ1BDSTczNSkuCisKKworRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK1RoZSBQSUlYNCAocHJvcGVybHkga25vd24gYXMgdGhlIDgyMzcxQUIpIGlzIGFuIEludGVsIGNoaXAgd2l0aCBhIGxvdCBvZgorZnVuY3Rpb25hbGl0eS4gQW1vbmcgb3RoZXIgdGhpbmdzLCBpdCBpbXBsZW1lbnRzIHRoZSBQQ0kgYnVzLiBPbmUgb2YgaXRzCittaW5vciBmdW5jdGlvbnMgaXMgaW1wbGVtZW50aW5nIGEgU3lzdGVtIE1hbmFnZW1lbnQgQnVzLiBUaGlzIGlzIGEgdHJ1ZSAKK1NNQnVzIC0geW91IGNhbiBub3QgYWNjZXNzIGl0IG9uIEkyQyBsZXZlbHMuIFRoZSBnb29kIG5ld3MgaXMgdGhhdCBpdAorbmF0aXZlbHkgdW5kZXJzdGFuZHMgU01CdXMgY29tbWFuZHMgYW5kIHlvdSBkbyBub3QgaGF2ZSB0byB3b3JyeSBhYm91dAordGltaW5nIHByb2JsZW1zLiBUaGUgYmFkIG5ld3MgaXMgdGhhdCBub24tU01CdXMgZGV2aWNlcyBjb25uZWN0ZWQgdG8gaXQgY2FuCitjb25mdXNlIGl0IG1pZ2h0aWx5LiBZZXMsIHRoaXMgaXMga25vd24gdG8gaGFwcGVuLi4uCisKK0RvICdsc3BjaSAtdicgYW5kIHNlZSB3aGV0aGVyIGl0IGNvbnRhaW5zIGFuIGVudHJ5IGxpa2UgdGhpczoKKworMDAwMDowMDowMi4zIEJyaWRnZTogSW50ZWwgQ29ycC4gODIzNzFBQi9FQi9NQiBQSUlYNCBBQ1BJIChyZXYgMDIpCisJICAgICBGbGFnczogbWVkaXVtIGRldnNlbCwgSVJRIDkKKworQnVzIGFuZCBkZXZpY2UgbnVtYmVycyBtYXkgZGlmZmVyLCBidXQgdGhlIGZ1bmN0aW9uIG51bWJlciBtdXN0IGJlCitpZGVudGljYWwgKGxpa2UgbWFueSBQQ0kgZGV2aWNlcywgdGhlIFBJSVg0IGluY29ycG9yYXRlcyBhIG51bWJlciBvZgorZGlmZmVyZW50ICdmdW5jdGlvbnMnLCB3aGljaCBjYW4gYmUgY29uc2lkZXJlZCBhcyBzZXBhcmF0ZSBkZXZpY2VzKS4gSWYgeW91CitmaW5kIHN1Y2ggYW4gZW50cnksIHlvdSBoYXZlIGEgUElJWDQgU01CdXMgY29udHJvbGxlci4KKworT24gc29tZSBjb21wdXRlcnMgKG1vc3Qgbm90YWJseSwgc29tZSBEZWxscyksIHRoZSBTTUJ1cyBpcyBkaXNhYmxlZCBieQorZGVmYXVsdC4gSWYgeW91IHVzZSB0aGUgaW5zbW9kIHBhcmFtZXRlciAnZm9yY2U9MScsIHRoZSBrZXJuZWwgbW9kdWxlIHdpbGwKK3RyeSB0byBlbmFibGUgaXQuIFRISVMgSVMgVkVSWSBEQU5HRVJPVVMhIElmIHRoZSBCSU9TIGRpZCBub3Qgc2V0IHVwIGEKK2NvcnJlY3QgYWRkcmVzcyBmb3IgdGhpcyBtb2R1bGUsIHlvdSBjb3VsZCBnZXQgaW4gYmlnIHRyb3VibGUgKHJlYWQ6CitjcmFzaGVzLCBkYXRhIGNvcnJ1cHRpb24sIGV0Yy4pLiBUcnkgdGhpcyBvbmx5IGFzIGEgbGFzdCByZXNvcnQgKHRyeSBCSU9TCit1cGRhdGVzIGZpcnN0LCBmb3IgZXhhbXBsZSksIGFuZCBiYWNrdXAgZmlyc3QhIEFuIGV2ZW4gbW9yZSBkYW5nZXJvdXMKK29wdGlvbiBpcyAnZm9yY2VfYWRkcj08SU9QT1JUPicuIFRoaXMgd2lsbCBub3Qgb25seSBlbmFibGUgdGhlIFBJSVg0IGxpa2UKKydmb3JjZScgZm9lcywgYnV0IGl0IHdpbGwgYWxzbyBzZXQgYSBuZXcgYmFzZSBJL08gcG9ydCBhZGRyZXNzLiBUaGUgU01CdXMKK3BhcnRzIG9mIHRoZSBQSUlYNCBuZWVkcyBhIHJhbmdlIG9mIDggb2YgdGhlc2UgYWRkcmVzc2VzIHRvIGZ1bmN0aW9uCitjb3JyZWN0bHkuIElmIHRoZXNlIGFkZHJlc3NlcyBhcmUgYWxyZWFkeSByZXNlcnZlZCBieSBzb21lIG90aGVyIGRldmljZSwKK3lvdSB3aWxsIGdldCBpbnRvIGJpZyB0cm91YmxlISBET04nVCBVU0UgVEhJUyBJRiBZT1UgQVJFIE5PVCBWRVJZIFNVUkUKK0FCT1VUIFdIQVQgWU9VIEFSRSBET0lORyEKKworVGhlIFBJSVg0RSBpcyBqdXN0IGFuIG5ldyB2ZXJzaW9uIG9mIHRoZSBQSUlYNDsgaXQgaXMgc3VwcG9ydGVkIGFzIHdlbGwuCitUaGUgUElJWC9QSUlYMyBkb2VzIG5vdCBpbXBsZW1lbnQgYW4gU01CdXMgb3IgSTJDIGJ1cywgc28geW91IGNhbid0IHVzZQordGhpcyBkcml2ZXIgb24gdGhvc2UgbWFpbmJvYXJkcy4KKworVGhlIFNlcnZlcldvcmtzIFNvdXRoYnJpZGdlcywgdGhlIEludGVsIDQ0ME1YLCBhbmQgdGhlIFZpY3Rvcnk3NjYgYXJlCitpZGVudGljYWwgdG8gdGhlIFBJSVg0IGluIEkyQy9TTUJ1cyBzdXBwb3J0LgorCitBIGZldyBPU0I0IHNvdXRoYnJpZGdlcyBhcmUga25vd24gdG8gYmUgbWlzY29uZmlndXJlZCBieSB0aGUgQklPUy4gSW4gdGhpcworY2FzZSwgeW91IGhhdmUgeW91IHVzZSB0aGUgZml4X2hzdGNmZyBtb2R1bGUgcGFyYW1ldGVyLiBEbyBub3QgdXNlIGl0Cit1bmxlc3MgeW91IGtub3cgeW91IGhhdmUgdG8sIGJlY2F1c2UgaW4gc29tZSBjYXNlcyBpdCBhbHNvIGJyZWFrcworY29uZmlndXJhdGlvbiBvbiBzb3V0aGJyaWRnZXMgdGhhdCBkb24ndCBuZWVkIGl0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1wcm9zYXZhZ2UgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXByb3NhdmFnZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDM2ODc5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1wcm9zYXZhZ2UKQEAgLTAsMCArMSwyMyBAQAorS2VybmVsIGRyaXZlciBpMmMtcHJvc2F2YWdlCisKK1N1cHBvcnRlZCBhZGFwdGVyczoKKwkKKwlTMy9WSUEgS00yNjYvVlQ4Mzc1IGFrYSBQcm9TYXZhZ2U4IAorCVMzL1ZJQSBLTTEzMy9WVDgzNjUgYWthIFNhdmFnZTQgCisKK0F1dGhvcjogSGVuayBWZXJnb25ldCA8aGVua0Bnb2QuZHluZG5zLm9yZz4KKworRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK1RoZSBTYXZhZ2U0IGNoaXBzIGNvbnRhaW4gdHdvIEkyQyBpbnRlcmZhY2VzIChha2EgYSBJMkMgJ21hc3Rlcicgb3IKKydob3N0JykuIAorCitUaGUgZmlyc3QgaW50ZXJmYWNlIGlzIHVzZWQgZm9yIEREQyAoRGF0YSBEaXNwbGF5IENoYW5uZWwpIHdoaWNoIGlzIGEKK3NlcmlhbCBjaGFubmVsIHRocm91Z2ggdGhlIFZHQSBtb25pdG9yIGNvbm5lY3RvciB0byBhIEREQy1jb21wbGlhbnQKK21vbml0b3IuIFRoaXMgaW50ZXJmYWNlIGlzIGRlZmluZWQgYnkgdGhlIFZpZGVvIEVsZWN0cm9uaWNzIFN0YW5kYXJkcworQXNzb2NpYXRpb24gKFZFU0EpLiBUaGUgc3RhbmRhcmRzIGFyZSBhdmFpbGFibGUgZm9yIHB1cmNoYXNlIGF0CitodHRwOi8vd3d3LnZlc2Eub3JnIC4gVGhlIHNlY29uZCBpbnRlcmZhY2UgaXMgYSBnZW5lcmFsLXB1cnBvc2UgSTJDIGJ1cy4KKworVXNlZnVsbCBmb3IgZ2FpbmluZyBhY2Nlc3MgdG8gdGhlIFRWIEVuY29kZXIgY2hpcHMuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtc2F2YWdlNCBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtc2F2YWdlNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWNjZWFiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1zYXZhZ2U0CkBAIC0wLDAgKzEsMjYgQEAKK0tlcm5lbCBkcml2ZXIgaTJjLXNhdmFnZTQKKworU3VwcG9ydGVkIGFkYXB0ZXJzOgorICAqIFNhdmFnZTQKKyAgKiBTYXZhZ2UyMDAwCisKK0F1dGhvcnM6IAorCUFsZXhhbmRlciBXb2xkIDxhd29sZEBiaWdmb290LmNvbT4sCisJTWFyayBELiBTdHVkZWJha2VyIDxtZHN4eXoxMjNAeWFob28uY29tPiAKKworRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK1RoZSBTYXZhZ2U0IGNoaXBzIGNvbnRhaW4gdHdvIEkyQyBpbnRlcmZhY2VzIChha2EgYSBJMkMgJ21hc3RlcicKK29yICdob3N0JykuIAorCitUaGUgZmlyc3QgaW50ZXJmYWNlIGlzIHVzZWQgZm9yIEREQyAoRGF0YSBEaXNwbGF5IENoYW5uZWwpIHdoaWNoIGlzIGEKK3NlcmlhbCBjaGFubmVsIHRocm91Z2ggdGhlIFZHQSBtb25pdG9yIGNvbm5lY3RvciB0byBhIEREQy1jb21wbGlhbnQKK21vbml0b3IuIFRoaXMgaW50ZXJmYWNlIGlzIGRlZmluZWQgYnkgdGhlIFZpZGVvIEVsZWN0cm9uaWNzIFN0YW5kYXJkcworQXNzb2NpYXRpb24gKFZFU0EpLiBUaGUgc3RhbmRhcmRzIGFyZSBhdmFpbGFibGUgZm9yIHB1cmNoYXNlIGF0CitodHRwOi8vd3d3LnZlc2Eub3JnIC4gVGhlIEREQyBidXMgaXMgbm90IHlldCBzdXBwb3J0ZWQgYmVjYXVzZSBpdHMgcmVnaXN0ZXIKK2lzIG5vdCBkaXJlY3RseSBtZW1vcnktbWFwcGVkLgorCitUaGUgc2Vjb25kIGludGVyZmFjZSBpcyBhIGdlbmVyYWwtcHVycG9zZSBJMkMgYnVzLiBUaGlzIGlzIHRoZSBvbmx5CitpbnRlcmZhY2Ugc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgYXQgdGhlIG1vbWVudC4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1zaXM1NTk1IGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1zaXM1NTk1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNDdkYjcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXNpczU1OTUKQEAgLTAsMCArMSw1OSBAQAorS2VybmVsIGRyaXZlciBpMmMtc2lzNTU5NQorCitBdXRob3JzOiAKKwlGcm9kbyBMb29pamFhcmQgPGZyb2RvbEBkZHMubmw+LAorICAgICAgICBNYXJrIEQuIFN0dWRlYmFrZXIgPG1kc3h5ejEyM0B5YWhvby5jb20+LAorCVBoaWxpcCBFZGVsYnJvY2sgPHBoaWxAbmV0cm9lZGdlLmNvbT4gCisKK1N1cHBvcnRlZCBhZGFwdGVyczoKKyAgKiBTaWxpY29uIEludGVncmF0ZWQgU3lzdGVtcyBDb3JwLiBTaVM1NTk1IFNvdXRoYnJpZGdlCisgICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIFNpbGljb24gSW50ZWdyYXRlZCBTeXN0ZW1zIENvcnAuIHNpdGUuCisKK05vdGU6IGFsbCBoYXZlIG1mci4gSUQgMHgxMDM5LiAKKworICAgU1VQUE9SVEVEICAgICAgICAgICAgUENJIElEICAgICAgICAgICAKKyAgICAgICAgNTU5NSAgICAgICAgICAgIDAwMDggCisgCisgICBOb3RlOiB0aGVzZSBjaGlwcyBjb250YWluIGEgMDAwOCBkZXZpY2Ugd2hpY2ggaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlIAorICAgICAgICAgNTU5NS4gV2UgcmVjb2duaXplIHRoZXNlIGJ5IHRoZSBwcmVzZW5jZSBvZiB0aGUgbGlzdGVkIAorICAgICAgICAgImJsYWNrbGlzdCIgUENJIElEIGFuZCByZWZ1c2UgdG8gbG9hZC4gCisgCisgICBOT1QgU1VQUE9SVEVEICAgICAgICBQQ0kgSUQgICAgICAgICAgQkxBQ0tMSVNUIFBDSSBJRCAgICAgICAgIAorICAgICAgICAgNTQwICAgICAgICAgICAgMDAwOCAgICAgICAgICAgIDA1NDAgCisgICAgICAgICA1NTAgICAgICAgICAgICAwMDA4ICAgICAgICAgICAgMDU1MCAKKyAgICAgICAgNTUxMyAgICAgICAgICAgIDAwMDggICAgICAgICAgICA1NTExIAorICAgICAgICA1NTgxICAgICAgICAgICAgMDAwOCAgICAgICAgICAgIDU1OTcgCisgICAgICAgIDU1ODIgICAgICAgICAgICAwMDA4ICAgICAgICAgICAgNTU5NyAKKyAgICAgICAgNTU5NyAgICAgICAgICAgIDAwMDggICAgICAgICAgICA1NTk3IAorICAgICAgICA1NTk4ICAgICAgICAgICAgMDAwOCAgICAgICAgICAgIDU1OTcvNTU5OCAKKyAgICAgICAgIDYzMCAgICAgICAgICAgIDAwMDggICAgICAgICAgICAwNjMwIAorICAgICAgICAgNjQ1ICAgICAgICAgICAgMDAwOCAgICAgICAgICAgIDA2NDUgCisgICAgICAgICA2NDYgICAgICAgICAgICAwMDA4ICAgICAgICAgICAgMDY0NiAKKyAgICAgICAgIDY0OCAgICAgICAgICAgIDAwMDggICAgICAgICAgICAwNjQ4IAorICAgICAgICAgNjUwICAgICAgICAgICAgMDAwOCAgICAgICAgICAgIDA2NTAgCisgICAgICAgICA2NTEgICAgICAgICAgICAwMDA4ICAgICAgICAgICAgMDY1MSAKKyAgICAgICAgIDczMCAgICAgICAgICAgIDAwMDggICAgICAgICAgICAwNzMwIAorICAgICAgICAgNzM1ICAgICAgICAgICAgMDAwOCAgICAgICAgICAgIDA3MzUgCisgICAgICAgICA3NDUgICAgICAgICAgICAwMDA4ICAgICAgICAgICAgMDc0NSAKKyAgICAgICAgIDc0NiAgICAgICAgICAgIDAwMDggICAgICAgICAgICAwNzQ2IAorCitNb2R1bGUgUGFyYW1ldGVycworLS0tLS0tLS0tLS0tLS0tLS0KKworKiBmb3JjZV9hZGRyPTB4YWRkcglTZXQgdGhlIEkvTyBiYXNlIGFkZHJlc3MuIFVzZWZ1bCBmb3IgYm9hcmRzCisJCQl0aGF0IGRvbid0IHNldCB0aGUgYWRkcmVzcyBpbiB0aGUgQklPUy4gRG9lcyBub3QgZG8gYQorCQkJUENJIGZvcmNlOyB0aGUgZGV2aWNlIG11c3Qgc3RpbGwgYmUgcHJlc2VudCBpbiBsc3BjaS4KKwkJCURvbid0IHVzZSB0aGlzIHVubGVzcyB0aGUgZHJpdmVyIGNvbXBsYWlucyB0aGF0IHRoZQorCQkJYmFzZSBhZGRyZXNzIGlzIG5vdCBzZXQuCisKK0Rlc2NyaXB0aW9uCistLS0tLS0tLS0tLQorCitpMmMtc2lzNTU5NSBpcyBhIHRydWUgU01CdXMgaG9zdCBkcml2ZXIgZm9yIG1vdGhlcmJvYXJkcyB3aXRoIHRoZSBTaVM1NTk1Citzb3V0aGJyaWRnZXMuCisKK1dBUk5JTkc6IElmIHlvdSBhcmUgdHJ5aW5nIHRvIGFjY2VzcyB0aGUgaW50ZWdyYXRlZCBzZW5zb3JzIG9uIHRoZSBTaVM1NTk1CitjaGlwLCB5b3Ugd2FudCB0aGUgc2lzNTU5NSBkcml2ZXIgZm9yIHRob3NlLCBub3QgdGhpcyBkcml2ZXIuIFRoaXMgZHJpdmVyCitpcyBhIEJVUyBkcml2ZXIsIG5vdCBhIENISVAgZHJpdmVyLiBBIEJVUyBkcml2ZXIgaXMgdXNlZCBieSBvdGhlciBDSElQCitkcml2ZXJzIHRvIGFjY2VzcyBjaGlwcyBvbiB0aGUgYnVzLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXNpczYzMCBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtc2lzNjMwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhY2E2ODgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXNpczYzMApAQCAtMCwwICsxLDQ5IEBACitLZXJuZWwgZHJpdmVyIGkyYy1zaXM2MzAKKworU3VwcG9ydGVkIGFkYXB0ZXJzOgorICAqIFNpbGljb24gSW50ZWdyYXRlZCBTeXN0ZW1zIENvcnAgKFNpUykKKwk2MzAgY2hpcHNldCAoRGF0YXNoZWV0OiBhdmFpbGFibGUgYXQgaHR0cDovL2FtYWx5c2guYmVpLnQtb25saW5lLmRlL2RvY3MvU0lTLykKKwk3MzAgY2hpcHNldAorICAqIFBvc3NpYmxlIG90aGVyIFNpUyBjaGlwc2V0cyA/CisKK0F1dGhvcjogQWxleGFuZGVyIE1hbHlzaCA8YW1hbHlzaEB3ZWIuZGU+CisKK01vZHVsZSBQYXJhbWV0ZXJzCistLS0tLS0tLS0tLS0tLS0tLQorCisqIGZvcmNlID0gWzF8MF0gRm9yY2libHkgZW5hYmxlIHRoZSBTSVM2MzAuIERBTkdFUk9VUyEKKwkJVGhpcyBjYW4gYmUgaW50ZXJlc3RpbmcgZm9yIGNoaXBzZXRzIG5vdCBuYW1lZAorCQlhYm92ZSB0byBjaGVjayBpZiBpdCB3b3JrcyBmb3IgeW91IGNoaXBzZXQsIGJ1dCBEQU5HRVJPVVMhCisJCQorKiBoaWdoX2Nsb2NrID0gWzF8MF0gRm9yY2libHkgc2V0IEhvc3QgTWFzdGVyIENsb2NrIHRvIDU2S0h6IChkZWZhdWx0LCAKKwkJCXdoYXQgeW91ciBCSU9TIHVzZSkuIERBTkdFUk9VUyEgVGhpcyBzaG91bGQgYmUgYSBiaXQgCisJCQlmYXN0ZXIsIGJ1dCBmcmVlemUgc29tZSBzeXN0ZW1zIChpLmUuIG15IExhcHRvcCkuCisKKworRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK1RoaXMgU01CdXMgb25seSBkcml2ZXIgaXMga25vd24gdG8gd29yayBvbiBtb3RoZXJib2FyZHMgd2l0aCB0aGUgYWJvdmUKK25hbWVkIGNoaXBzZXRzLgorCitJZiB5b3Ugc2VlIHNvbWV0aGluZyBsaWtlIHRoaXM6CisKKzAwOjAwLjAgSG9zdCBicmlkZ2U6IFNpbGljb24gSW50ZWdyYXRlZCBTeXN0ZW1zIFtTaVNdIDYzMCBIb3N0IChyZXYgMzEpCiswMDowMS4wIElTQSBicmlkZ2U6IFNpbGljb24gSW50ZWdyYXRlZCBTeXN0ZW1zIFtTaVNdIDg1QzUwMy81NTEzCisKK29yIGxpa2UgdGhpczoKKworMDA6MDAuMCBIb3N0IGJyaWRnZTogU2lsaWNvbiBJbnRlZ3JhdGVkIFN5c3RlbXMgW1NpU10gNzMwIEhvc3QgKHJldiAwMikKKzAwOjAxLjAgSVNBIGJyaWRnZTogU2lsaWNvbiBJbnRlZ3JhdGVkIFN5c3RlbXMgW1NpU10gODVDNTAzLzU1MTMKKworaW4geW91ciAnbHNwY2knIG91dHB1dCAsIHRoZW4gdGhpcyBkcml2ZXIgaXMgZm9yIHlvdXIgY2hpcHNldC4KKworVGhhbmsgWW91CistLS0tLS0tLS0KK1BoaWxpcCBFZGVsYnJvY2sgPHBoaWxAbmV0cm9lZGdlLmNvbT4KKy0gdGVzdGluZyBTaVM3MzAgc3VwcG9ydAorTWFyayBNLiBIb2ZmbWFuIDxtaG9mZm1hbkBsaWdodGxpbmsuY29tPgorLSBidWcgZml4ZXMKKyAKK1RvIGFueW9uZSBlbHNlIHdoaWNoIEkgZm9yZ290IGhlcmUgOyksIHRoYW5rcyEKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1zaXM2OXggYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXNpczY5eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmU0ODc2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1zaXM2OXgKQEAgLTAsMCArMSw3MyBAQAorS2VybmVsIGRyaXZlciBpMmMtc2lzOTZ4CisKK1JlcGxhY2VzIDIuNC54IGkyYy1zaXM2NDUKKworU3VwcG9ydGVkIGFkYXB0ZXJzOgorICAqIFNpbGljb24gSW50ZWdyYXRlZCBTeXN0ZW1zIENvcnAgKFNpUykKKyAgICBBbnkgY29tYmluYXRpb24gb2YgdGhlc2UgaG9zdCBicmlkZ2VzOgorCTY0NSwgNjQ1RFggKGFrYSA2NDYpLCA2NDgsIDY1MCwgNjUxLCA2NTUsIDczNSwgNzQ1LCA3NDYKKyAgICBhbmQgdGhlc2Ugc291dGggYnJpZGdlczoKKyAgICAJOTYxLCA5NjIsIDk2MyhMKSAKKworQXV0aG9yOiBNYXJrIE0uIEhvZmZtYW4gPG1ob2ZmbWFuQGxpZ2h0bGluay5jb20+CisKK0Rlc2NyaXB0aW9uCistLS0tLS0tLS0tLQorCitUaGlzIFNNQnVzIG9ubHkgZHJpdmVyIGlzIGtub3duIHRvIHdvcmsgb24gbW90aGVyYm9hcmRzIHdpdGggdGhlIGFib3ZlCituYW1lZCBjaGlwc2V0IGNvbWJpbmF0aW9ucy4gVGhlIGRyaXZlciB3YXMgZGV2ZWxvcGVkIHdpdGhvdXQgYmVuZWZpdCBvZiBhCitwcm9wZXIgZGF0YXNoZWV0IGZyb20gU2lTLiBUaGUgU01CdXMgcmVnaXN0ZXJzIGFyZSBhc3N1bWVkIGNvbXBhdGlibGUgd2l0aAordGhvc2Ugb2YgdGhlIFNpUzYzMCwgYWx0aG91Z2ggdGhleSBhcmUgbG9jYXRlZCBpbiBhIGNvbXBsZXRlbHkgZGlmZmVyZW50CitwbGFjZS4gVGhhbmtzIHRvIEFsZXhhbmRlciBNYWx5c2ggPGFtYWx5c2hAd2ViLmRlPiBmb3IgcHJvdmlkaW5nIHRoZQorU2lTNjMwIGRhdGFzaGVldCAoYW5kICBkcml2ZXIpLgorCitUaGUgY29tbWFuZCAibHNwY2kiIGFzIHJvb3Qgc2hvdWxkIHByb2R1Y2Ugc29tZXRoaW5nIGxpa2UgdGhlc2UgbGluZXM6CisKKzAwOjAwLjAgSG9zdCBicmlkZ2U6IFNpbGljb24gSW50ZWdyYXRlZCBTeXN0ZW1zIFtTaVNdOiBVbmtub3duIGRldmljZSAwNjQ1CiswMDowMi4wIElTQSBicmlkZ2U6IFNpbGljb24gSW50ZWdyYXRlZCBTeXN0ZW1zIFtTaVNdIDg1QzUwMy81NTEzCiswMDowMi4xIFNNQnVzOiBTaWxpY29uIEludGVncmF0ZWQgU3lzdGVtcyBbU2lTXTogVW5rbm93biBkZXZpY2UgMDAxNgorCitvciBwZXJoYXBzIHRoaXMuLi4KKworMDA6MDAuMCBIb3N0IGJyaWRnZTogU2lsaWNvbiBJbnRlZ3JhdGVkIFN5c3RlbXMgW1NpU106IFVua25vd24gZGV2aWNlIDA2NDUgCiswMDowMi4wIElTQSBicmlkZ2U6IFNpbGljb24gSW50ZWdyYXRlZCBTeXN0ZW1zIFtTaVNdOiBVbmtub3duIGRldmljZSAwOTYxCiswMDowMi4xIFNNQnVzOiBTaWxpY29uIEludGVncmF0ZWQgU3lzdGVtcyBbU2lTXTogVW5rbm93biBkZXZpY2UgMDAxNgorCisoa2VybmVsIHZlcnNpb25zIGxhdGVyIHRoYW4gMi40LjE4IG1heSBmaWxsIGluIHRoZSAiVW5rbm93biJzKQorCitJZiB5b3UgY2FudCBzZWUgaXQgcGxlYXNlIGxvb2sgb24gcXVpcmtfc2lzXzk2eF9zbWJ1cworKGRyaXZlcnMvcGNpL3F1aXJrcy5jKSAoYWxzbyBpZiBzb3V0aGJyaWRnZSBkZXRlY3Rpb24gZmFpbHMpCisKK0kgc3VzcGVjdCB0aGF0IHRoaXMgZHJpdmVyIGNvdWxkIGJlIG1hZGUgdG8gd29yayBmb3IgdGhlIGZvbGxvd2luZyBTaVMKK2NoaXBzZXRzIGFzIHdlbGw6IDYzNSwgYW5kIDYzNVQuIElmIGFueW9uZSBvd25zIGEgYm9hcmQgd2l0aCB0aG9zZSBjaGlwcworQU5EIGlzIHdpbGxpbmcgdG8gcmlzayBjcmFzaGluZyAmIGJ1cm5pbmcgYW4gb3RoZXJ3aXNlIHdlbGwtYmVoYXZlZCBrZXJuZWwKK2luIHRoZSBuYW1lIG9mIHByb2dyZXNzLi4uIHBsZWFzZSBjb250YWN0IG1lIGF0IDxtaG9mZm1hbkBsaWdodGxpbmsuY29tPiBvcgordmlhIHRoZSBwcm9qZWN0J3MgbWFpbGluZyBsaXN0OiA8c2Vuc29yc0BzdGltcHkubmV0cm9lZGdlLmNvbT4uICBQbGVhc2UKK3NlbmQgYnVnIHJlcG9ydHMgYW5kL29yIHN1Y2Nlc3Mgc3RvcmllcyBhcyB3ZWxsLgorCisKK1RPIERPcworLS0tLS0tCisKKyogVGhlIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IFNNQnVzIGJsb2NrIHJlYWRzL3dyaXRlczsgSSBtYXkgYWRkIHRoZW0gaWYgYQorc2NlbmFyaW8gaXMgZm91bmQgd2hlcmUgdGhleSdyZSBuZWVkZWQuCisKKworVGhhbmsgWW91CistLS0tLS0tLS0KKworTWFyayBELiBTdHVkZWJha2VyIDxtZHN4eXoxMjNAeWFob28uY29tPgorIC0gZGVzaWduIGhpbnRzIGFuZCBidWcgZml4ZXMKK0FsZXhhbmRlciBNYXlsc2ggPGFtYWx5c2hAd2ViLmRlPgorIC0gZGl0dG8sIHBsdXMgYW4gaW1wb3J0YW50IGRhdGFzaGVldC4uLiBhbG1vc3QgdGhlIG9uZSBJIHJlYWxseSB3YW50ZWQKK0hhbnMtR/xudGVyIEz8dGtlIFVwaHVlcyA8aGdfbHVAdC1vbmxpbmUuZGU+CisgLSBwYXRjaCBmb3IgU2lTNzM1CitSb2JlcnQgWndlcnVzIDxhcnppZUBkZHMubmw+CisgLSB0ZXN0aW5nIGZvciBTaVM2NDVEWAorS2lhbnVzY2ggU2F5YWggS2FyYWRqaSA8a2lhbnVzY2hAc2stdGVjaC5uZXQ+CisgLSBwYXRjaCBmb3IgU2lTNjQ1RFgvOTYyCitLZW4gSGVhbHkKKyAtIHBhdGNoIGZvciBTaVM2NTUKKworVG8gYW55b25lIGVsc2Ugd2hvIGhhcyB3cml0dGVuIHcvIGZlZWRiYWNrLCB0aGFua3MhCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtdmlhIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy12aWEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVlZGZlMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtdmlhCkBAIC0wLDAgKzEsMzQgQEAKK0tlcm5lbCBkcml2ZXIgaTJjLXZpYQorCitTdXBwb3J0ZWQgYWRhcHRlcnM6CisgICogVklBIFRlY2hub2xvZ2llcywgSW5DLiBWVDgyQzU4NkIKKyAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgVklBIHdlYnNpdGUKKworQXV0aG9yOiBLefZzdGkgTeRsa2tpIDxrbWFsa2tpQGNjLmh1dC5maT4KKworRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK2kyYy12aWEgaXMgYW4gaTJjIGJ1cyBkcml2ZXIgZm9yIG1vdGhlcmJvYXJkcyB3aXRoIFZJQSBjaGlwc2V0LgorCitUaGUgZm9sbG93aW5nIFZJQSBwY2kgY2hpcHNldHMgYXJlIHN1cHBvcnRlZDoKKyAtIE1WUDMsIFZQMywgVlAyLzk3LCBWUFgvOTcgCisgLSBvdGhlcnMgd2l0aCBTb3V0aCBicmlkZ2UgVlQ4MkM1ODZCCisKK1lvdXIgbHNwY2kgbGlzdGluZyBtdXN0IHNob3cgdGhpcyA6CisKKyBCcmlkZ2U6IFZJQSBUZWNobm9sb2dpZXMsIEluYy4gVlQ4MkM1ODZCIEFDUEkgKHJldiAxMCkKKworICAgIFByb2JsZW1zPworIAorIFE6IFlvdSBoYXZlIFZUODJDNTg2QiBvbiB0aGUgbW90aGVyYm9hcmQsIGJ1dCBub3QgaW4gdGhlIGxpc3RpbmcuIAorIAorIEE6IEdvIHRvIHlvdXIgQklPUyBzZXR1cCwgc2VjdGlvbiBQQ0kgZGV2aWNlcyBvciBzaW1pbGFyLgorICAgIFR1cm4gVVNCIHN1cHBvcnQgb24sIGFuZCB0cnkgYWdhaW4uIAorCisgUTogTm8gZXJyb3IgbWVzc2FnZXMsIGJ1dCBzdGlsbCBpMmMgZG9lc24ndCBzZWVtIHRvIHdvcmsuCisKKyBBOiBUaGlzIGNhbiBoYXBwZW4uIFRoaXMgZHJpdmVyIHVzZXMgdGhlIHBpbnMgVklBIHJlY29tbWVuZHMgaW4gdGhlaXIKKyAgICBkYXRhc2hlZXRzLCBidXQgdGhlcmUgYXJlIHNldmVyYWwgd2F5cyB0aGUgbW90aGVyYm9hcmQgbWFudWZhY3R1cmVyCisgICAgY2FuIGFjdHVhbGx5IHdpcmUgdGhlIGxpbmVzLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXZpYXBybyBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtdmlhcHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMmY1YWMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXZpYXBybwpAQCAtMCwwICsxLDQ3IEBACitLZXJuZWwgZHJpdmVyIGkyYy12aWFwcm8KKworU3VwcG9ydGVkIGFkYXB0ZXJzOgorICAqIFZJQSBUZWNobm9sb2dpZXMsIEluYy4gVlQ4MkM1OTZBL0IKKyAgICBEYXRhc2hlZXQ6IFNvbWV0aW1lcyBhdmFpbGFibGUgYXQgdGhlIFZJQSB3ZWJzaXRlCisKKyAgKiBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIFZUODJDNjg2QS9CIAorICAgIERhdGFzaGVldDogU29tZXRpbWVzIGF2YWlsYWJsZSBhdCB0aGUgVklBIHdlYnNpdGUKKworICAqIFZJQSBUZWNobm9sb2dpZXMsIEluYy4gVlQ4MjMxLCBWVDgyMzMsIFZUODIzM0EsIFZUODIzNSwgVlQ4MjM3CisgICAgRGF0YXNoZWV0OiBhdmFpbGFibGUgb24gcmVxdWVzdCBmcm9tIFZpYQorCitBdXRob3JzOgorCUZyb2RvIExvb2lqYWFyZCA8ZnJvZG9sQGRkcy5ubD4sICAKKwlQaGlsaXAgRWRlbGJyb2NrIDxwaGlsQG5ldHJvZWRnZS5jb20+LCAKKwlLefZzdGkgTeRsa2tpIDxrbWFsa2tpQGNjLmh1dC5maT4sIAorCU1hcmsgRC4gU3R1ZGViYWtlciA8bWRzeHl6MTIzQHlhaG9vLmNvbT4gCisKK01vZHVsZSBQYXJhbWV0ZXJzCistLS0tLS0tLS0tLS0tLS0tLQorCisqIGZvcmNlOiBpbnQKKyAgRm9yY2libHkgZW5hYmxlIHRoZSBTTUJ1cyBjb250cm9sbGVyLiBEQU5HRVJPVVMhCisqIGZvcmNlX2FkZHI6IGludAorICBGb3JjaWJseSBlbmFibGUgdGhlIFNNQnVzIGF0IHRoZSBnaXZlbiBhZGRyZXNzLiBFWFRSRU1FTFkgREFOR0VST1VTIQorCitEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0KKworaTJjLXZpYXBybyBpcyBhIHRydWUgU01CdXMgaG9zdCBkcml2ZXIgZm9yIG1vdGhlcmJvYXJkcyB3aXRoIG9uZSBvZiB0aGUKK3N1cHBvcnRlZCBWSUEgc291dGhicmlkZ2VzLgorCitZb3VyIGxzcGNpIC1uIGxpc3RpbmcgbXVzdCBzaG93IG9uZSBvZiB0aGVzZSA6CisKKyBkZXZpY2UgMTEwNjozMDUwICAgKFZUODJDNTk2IGZ1bmN0aW9uIDMpCisgZGV2aWNlIDExMDY6MzA1MSAgIChWVDgyQzU5NiBmdW5jdGlvbiAzKQorIGRldmljZSAxMTA2OjMwNTcgICAoVlQ4MkM2ODYgZnVuY3Rpb24gNCkKKyBkZXZpY2UgMTEwNjozMDc0ICAgKFZUODIzMykKKyBkZXZpY2UgMTEwNjozMTQ3ICAgKFZUODIzM0EpCisgZGV2aWNlIDExMDY6ODIzNSAgIChWVDgyMzEpCisgZGV2aWRlIDExMDY6MzE3NyAgIChWVDgyMzUpCisgZGV2aWRlIDExMDY6MzIyNyAgIChWVDgyMzcpCisKK0lmIG5vbmUgb2YgdGhlc2Ugc2hvdyB1cCwgeW91IHNob3VsZCBsb29rIGluIHRoZSBCSU9TIGZvciBzZXR0aW5ncyBsaWtlCitlbmFibGUgQUNQSSAvIFNNQnVzIG9yIGV2ZW4gVVNCLgorCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtdm9vZG9vMyBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtdm9vZG9vMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmQ5MGE0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy12b29kb28zCkBAIC0wLDAgKzEsNjIgQEAKK0tlcm5lbCBkcml2ZXIgaTJjLXZvb2RvbzMKKworU3VwcG9ydGVkIGFkYXB0ZXJzOgorICAqIDNkZnggVm9vZG9vMyBiYXNlZCBjYXJkcworICAqIFZvb2RvbyBCYW5zaGVlIGJhc2VkIGNhcmRzCisKK0F1dGhvcnM6IAorCUZyb2RvIExvb2lqYWFyZCA8ZnJvZG9sQGRkcy5ubD4sIAorCVBoaWxpcCBFZGVsYnJvY2sgPHBoaWxAbmV0cm9lZGdlLmNvbT4sIAorCVJhbHBoIE1ldHpsZXIgPHJqa21AdGhwLnVuaS1rb2Vsbi5kZT4sCisJTWFyayBELiBTdHVkZWJha2VyIDxtZHN4eXoxMjNAeWFob28uY29tPgorCitNYWluIGNvbnRhY3Q6IFBoaWxpcCBFZGVsYnJvY2sgPHBoaWxAbmV0cm9lZGdlLmNvbT4KKwkKK1RoZSBjb2RlIGlzIGJhc2VkIHVwb24gUmFscGgncyB0ZXN0IGNvZGUgKGhlIGRpZCB0aGUgaGFyZCBzdHVmZiA7JykKKworRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK1RoZSAzZGZ4IFZvb2RvbzMgY2hpcCBjb250YWlucyB0d28gSTJDIGludGVyZmFjZXMgKGFrYSBhIEkyQyAnbWFzdGVyJyBvcgorJ2hvc3QnKS4gCisKK1RoZSBmaXJzdCBpbnRlcmZhY2UgaXMgdXNlZCBmb3IgRERDIChEYXRhIERpc3BsYXkgQ2hhbm5lbCkgd2hpY2ggaXMgYQorc2VyaWFsIGNoYW5uZWwgdGhyb3VnaCB0aGUgVkdBIG1vbml0b3IgY29ubmVjdG9yIHRvIGEgRERDLWNvbXBsaWFudAorbW9uaXRvci4gVGhpcyBpbnRlcmZhY2UgaXMgZGVmaW5lZCBieSB0aGUgVmlkZW8gRWxlY3Ryb25pY3MgU3RhbmRhcmRzCitBc3NvY2lhdGlvbiAoVkVTQSkuIFRoZSBzdGFuZGFyZHMgYXJlIGF2YWlsYWJsZSBmb3IgcHVyY2hhc2UgYXQKK2h0dHA6Ly93d3cudmVzYS5vcmcgLgorCitUaGUgc2Vjb25kIGludGVyZmFjZSBpcyBhIGdlbmVyYWwtcHVycG9zZSBJMkMgYnVzLiBUaGUgaW50ZW50IGJ5IDNkZnggd2FzCit0byBhbGxvdyBtYW51ZmFjdHVyZXJzIHRvIGFkZCBleHRyYSBjaGlwcyB0byB0aGUgdmlkZW8gY2FyZCBzdWNoIGFzIGEKK1RWLW91dCBjaGlwIHN1Y2ggYXMgdGhlIEJUODY5IG9yIHBvc3NpYmx5IGV2ZW4gSTJDIGJhc2VkIHRlbXBlcmF0dXJlCitzZW5zb3JzIGxpa2UgdGhlIEFETTEwMjEgb3IgTE03NS4KKworU3RhYmlsaXR5CistLS0tLS0tLS0KKworU2VlbXMgdG8gYmUgc3RhYmxlIG9uIHRoZSB0ZXN0IG1hY2hpbmUsIGJ1dCBuZWVkcyBtb3JlIHRlc3Rpbmcgb24gb3RoZXIKK21hY2hpbmVzLiBTaW11bHRhbmVvdXMgYWNjZXNzZXMgb2YgdGhlIEREQyBhbmQgSTJDIGJ1c3NlcyBtYXkgY2F1c2UgZXJyb3JzLgorCitTdXBwb3J0ZWQgRGV2aWNlcworLS0tLS0tLS0tLS0tLS0tLS0KKworU3BlY2lmaWNhbGx5LCB0aGlzIGRyaXZlciB3YXMgd3JpdHRlbiBhbmQgdGVzdGVkIG9uIHRoZSAnM2RmeCBWb29kb28zIEFHUAorMzAwMCcgd2hpY2ggaGFzIGEgdHYtb3V0IGZlYXR1cmUgKHMtdmlkZW8gb3IgY29tcG9zaXRlKS4gIEFjY29yZGluZyB0byB0aGUKK2RvY3MgYW5kIGRpc2N1c3Npb25zLCB0aGlzIGNvZGUgc2hvdWxkIHdvcmsgZm9yIGFueSBWb29kb28zIGJhc2VkIGNhcmRzIGFzCit3ZWxsIGFzIFZvb2RvbyBCYW5zaGVlIGJhc2VkIGNhcmRzLiAgVGhlIEREQyBpbnRlcmZhY2UgaGFzIGJlZW4gdGVzdGVkIG9uIGEKK1Zvb2RvbyBCYW5zaGVlIGNhcmQuCisJCitJc3N1ZXMKKy0tLS0tLQorCitQcm9iYWJseSBtYW55LCBidXQgaXQgc2VlbXMgdG8gd29yayBPSyBvbiBteSBzeXN0ZW0uIDonKQorCisKK0V4dGVybmFsIERldmljZSBDb25uZWN0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZGlnaXRhbCB2aWRlbyBpbnB1dCBqdW1wZXJzIGdpdmUgYXZhaWxhYmlsaXR5IHRvIHRoZSBJMkMgYnVzLiAKK1NwZWNpZmljYWxseSwgcGlucyAxMyBhbmQgMjUgKGJvdHRvbSByb3cgbWlkZGxlLCBhbmQgYm90dG9tIHJpZ2h0LWVuZCkgYXJlICAgICAKK3RoZSBJMkMgY2xvY2sgYW5kIEkyQyBkYXRhIGxpbmVzLCByZXNwZWN0aXZlbHkuICs1ViBhbmQgR05EIGFyZSBwcm9iYWJseQorYWxzbyBlYXNpbHkgYXZhaWxhYmxlIG1ha2luZyB0aGUgYWRkaXRpb24gb2YgZXh0cmEgSTJDL1NNQnVzIGRldmljZXMgZWFzeQordG8gaW1wbGVtZW50LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL3NjeDIwMF9hY2IgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvc2N4MjAwX2FjYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGM4Y2QxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL3NjeDIwMF9hY2IKQEAgLTAsMCArMSwxNCBAQAorS2VybmVsIGRyaXZlciBzY3gyMDBfYWNiCisKK0F1dGhvcjogQ2hyaXN0ZXIgV2VpbmlnZWwgPHdpbmdlbEBuYW5vLXN5c3RlbS5jb20+CisKK01vZHVsZSBQYXJhbWV0ZXJzCistLS0tLS0tLS0tLS0tLS0tLQorCisqIGJhc2U6IGludAorICBCYXNlIGFkZHJlc3NlcyBmb3IgdGhlIEFDQ0VTUy5idXMgY29udHJvbGxlcnMKKworRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK0VuYWJsZSB0aGUgdXNlIG9mIHRoZSBBQ0NFU1MuYnVzIGNvbnRyb2xsZXJzIG9mIGEgU0N4MjAwIHByb2Nlc3Nvci4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2NoaXBzL3Ntc2M0N2IzOTcudHh0IGIvRG9jdW1lbnRhdGlvbi9pMmMvY2hpcHMvc21zYzQ3YjM5Ny50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg5ZWRhZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaTJjL2NoaXBzL3Ntc2M0N2IzOTcudHh0CkBAIC0wLDAgKzEsMTQ2IEBACitOb3ZlbWJlciAyMywgMjAwNAorCitUaGUgZm9sbG93aW5nIHNwZWNpZmljYXRpb24gZGVzY3JpYmVzIHRoZSBTTVNDIExQQzQ3QjM5Ny1OQyBzZW5zb3IgY2hpcAorKGZvciB3aGljaCB0aGVyZSBpcyBubyBwdWJsaWMgZGF0YXNoZWV0IGF2YWlsYWJsZSkuICBUaGlzIGRvY3VtZW50IHdhcworcHJvdmlkZWQgYnkgQ3JhaWcgS2VsbHkgKEluLVN0b3JlIEJyb2FkY2FzdCBOZXR3b3JrKSBhbmQgZWRpdGVkL2NvcnJlY3RlZAorYnkgTWFyayBNLiBIb2ZmbWFuIDxtaG9mZm1hbkBsaWdodGxpbmsuY29tPi4KKworKiAqICogKiAqCisKK01ldGhvZHMgZm9yIGRldGVjdGluZyB0aGUgSFAgU0lPIGFuZCByZWFkaW5nIHRoZSB0aGVybWFsIGRhdGEgb24gYSBkYzcxMDAuCisKK1RoZSB0aGVybWFsIGluZm9ybWF0aW9uIG9uIHRoZSBkYzcxMDAgaXMgY29udGFpbmVkIGluIHRoZSBTSU8gSGFyZHdhcmUgTW9uaXRvcgorKEhXTSkuICBUaGUgaW5mb3JtYXRpb24gaXMgYWNjZXNzZWQgdGhyb3VnaCBhbiBpbmRleC9kYXRhIHBhaXIuICBUaGUgaW5kZXgvZGF0YQorcGFpciBpcyBsb2NhdGVkIGF0IHRoZSBIV00gQmFzZSBBZGRyZXNzICsgMCBhbmQgdGhlIEhXTSBCYXNlIEFkZHJlc3MgKyAxLiAgVGhlCitIV00gQmFzZSBhZGRyZXNzIGNhbiBiZSBvYnRhaW5lZCBmcm9tIExvZ2ljYWwgRGV2aWNlIDgsIHJlZ2lzdGVycyAweDYwIChNU0IpCithbmQgMHg2MSAoTFNCKS4gIEN1cnJlbnRseSB3ZSBhcmUgdXNpbmcgMHg0ODAgZm9yIHRoZSBIV00gQmFzZSBBZGRyZXNzIGFuZAorMHg0ODAgYW5kIDB4NDgxIGZvciB0aGUgaW5kZXgvZGF0YSBwYWlyLgorCitSZWFkaW5nIHRlbXBlcmF0dXJlIGluZm9ybWF0aW9uLgorVGhlIHRlbXBlcmF0dXJlIGluZm9ybWF0aW9uIGlzIGxvY2F0ZWQgaW4gdGhlIGZvbGxvd2luZyByZWdpc3RlcnM6CitUZW1wMQkJMHgyNQkoQ3VycmVudGx5LCB0aGlzIHJlZmxlY3RzIHRoZSBDUFUgdGVtcCBvbiBhbGwgc3lzdGVtcykuCitUZW1wMgkJMHgyNgorVGVtcDMJCTB4MjcKK1RlbXA0CQkweDgwCisKK1Byb2dyYW1taW5nIEV4YW1wbGUKK1RoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBvZiBob3cgdG8gcmVhZCB0aGUgSFdNIHRlbXBlcmF0dXJlIHJlZ2lzdGVyczoKK01PVglEWCw0ODBICitNT1YJQVgsMjVICitPVVQJRFgsQUwKK01PVglEWCw0ODFICitJTglBTCxEWAorCitBTCBjb250YWlucyB0aGUgZGF0YSBpbiBoZXgsIHRoZSB0ZW1wZXJhdHVyZSBpbiBDZWxzaXVzIGlzIHRoZSBkZWNpbWFsCitlcXVpdmFsZW50LgorCitFeDogSWYgQUwgY29udGFpbnMgMHgyQSwgdGhlIHRlbXBlcmF0dXJlIGlzIDQyIGRlZ3JlZXMgQy4KKworUmVhZGluZyB0YWNoIGluZm9ybWF0aW9uLgorVGhlIGZhbiBzcGVlZCBpbmZvcm1hdGlvbiBpcyBsb2NhdGVkIGluIHRoZSBmb2xsb3dpbmcgcmVnaXN0ZXJzOgorCQlMU0IJTVNCCitUYWNoMQkJMHgyOAkweDI5CShDdXJyZW50bHksIHRoaXMgcmVmbGVjdHMgdGhlIENQVQorCQkJCWZhbiBzcGVlZCBvbiBhbGwgc3lzdGVtcykuCitUYWNoMgkJMHgyQQkweDJCCitUYWNoMwkJMHgyQwkweDJECitUYWNoNAkJMHgyRQkweDJGCisKK0ltcG9ydGFudCEhIQorUmVhZGluZyB0aGUgdGFjaCBMU0IgbG9ja3MgdGhlIHRhY2ggTVNCLgorVGhlIExTQiBNdXN0IGJlIHJlYWQgZmlyc3QuCisKK0hvdyB0byBjb252ZXJ0IHRoZSB0YWNoIHJlYWRpbmcgdG8gUlBNLgorVGhlIHRhY2ggcmVhZGluZyAoVENvdW50KSBpcyBnaXZlbiBieTogIChUYWNoIE1TQiAqIDI1NikgKyAoVGFjaCBMU0IpCitUaGUgU0lPIGNvdW50cyB0aGUgbnVtYmVyIG9mIDkwa0h6ICgxMS4xMTF1cykgcHVsc2VzIHBlciByZXZvbHV0aW9uLgorUlBNID0gNjAvKFRDb3VudCAqIDExLjExMXVzKQorCitFeGFtcGxlOgorUmVnIDB4MjggPSAweDlCCitSZWcgMHgyOSA9IDB4MDgKKworVENvdW50ID0gMHg4OUIgPSAyMjAzCisKK1JQTSA9IDYwIC8gKDIyMDMgKiAxMS4xMTExMSBFLTYpID0gMjQ1MSBSUE0KKworT2J0YWluaW5nIHRoZSBTSU8gdmVyc2lvbi4KKworQ09ORklHVVJBVElPTiBTRVFVRU5DRQorVG8gcHJvZ3JhbSB0aGUgY29uZmlndXJhdGlvbiByZWdpc3RlcnMsIHRoZSBmb2xsb3dpbmcgc2VxdWVuY2UgbXVzdCBiZSBmb2xsb3dlZDoKKzEuIEVudGVyIENvbmZpZ3VyYXRpb24gTW9kZQorMi4gQ29uZmlndXJlIHRoZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVycworMy4gRXhpdCBDb25maWd1cmF0aW9uIE1vZGUuCisKK0VudGVyIENvbmZpZ3VyYXRpb24gTW9kZQorVG8gcGxhY2UgdGhlIGNoaXAgaW50byB0aGUgQ29uZmlndXJhdGlvbiBTdGF0ZSBUaGUgY29uZmlnIGtleSAoMHg1NSkgaXMgd3JpdHRlbgordG8gdGhlIENPTkZJRyBQT1JUICgweDJFKS4gCisKK0NvbmZpZ3VyYXRpb24gTW9kZQorSW4gY29uZmlndXJhdGlvbiBtb2RlLCB0aGUgSU5ERVggUE9SVCBpcyBsb2NhdGVkIGF0IHRoZSBDT05GSUcgUE9SVCBhZGRyZXNzIGFuZAordGhlIERBVEEgUE9SVCBpcyBhdCBJTkRFWCBQT1JUIGFkZHJlc3MgKyAxLgorCitUaGUgZGVzaXJlZCBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyBhcmUgYWNjZXNzZWQgaW4gdHdvIHN0ZXBzOiAKK2EuCVdyaXRlIHRoZSBpbmRleCBvZiB0aGUgTG9naWNhbCBEZXZpY2UgTnVtYmVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKKwkoaS5lLiwgMHgwNykgdG8gdGhlIElOREVYIFBPUlQgYW5kIHRoZW4gd3JpdGUgdGhlIG51bWJlciBvZiB0aGUKKwlkZXNpcmVkIGxvZ2ljYWwgZGV2aWNlIHRvIHRoZSBEQVRBIFBPUlQuCisKK2IuCVdyaXRlIHRoZSBhZGRyZXNzIG9mIHRoZSBkZXNpcmVkIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgd2l0aGluIHRoZQorCWxvZ2ljYWwgZGV2aWNlIHRvIHRoZSBJTkRFWCBQT1JUIGFuZCB0aGVuIHdyaXRlIG9yIHJlYWQgdGhlIGNvbmZpZy0KKwl1cmF0aW9uIHJlZ2lzdGVyIHRocm91Z2ggdGhlIERBVEEgUE9SVC4gIAorCitOb3RlOiBJZiBhY2Nlc3NpbmcgdGhlIEdsb2JhbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVycywgc3RlcCAoYSkgaXMgbm90IHJlcXVpcmVkLgorCitFeGl0IENvbmZpZ3VyYXRpb24gTW9kZQorVG8gZXhpdCB0aGUgQ29uZmlndXJhdGlvbiBTdGF0ZSB0aGUgd3JpdGUgMHhBQSB0byB0aGUgQ09ORklHIFBPUlQgKDB4MkUpLgorVGhlIGNoaXAgcmV0dXJucyB0byB0aGUgUlVOIFN0YXRlLiAgKFRoaXMgaXMgaW1wb3J0YW50KS4KKworUHJvZ3JhbW1pbmcgRXhhbXBsZQorVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIGhvdyB0byByZWFkIHRoZSBTSU8gRGV2aWNlIElEIGxvY2F0ZWQgYXQgMHgyMAorCis7IEVOVEVSIENPTkZJR1VSQVRJT04gTU9ERSAgIAorTU9WCURYLDAyRUgKK01PVglBWCwwNTVICitPVVQJRFgsQUwKKzsgR0xPQkFMIENPTkZJR1VSQVRJT04gIFJFR0lTVEVSIAorTU9WCURYLDAyRUgKK01PVglBTCwyMEgKK09VVAlEWCxBTCAKKzsgUkVBRCBUSEUgREFUQQorTU9WCURYLDAyRkgKK0lOCUFMLERYCis7IEVYSVQgQ09ORklHVVJBVElPTiBNT0RFICAgICAKK01PVglEWCwwMkVICitNT1YJQVgsMEFBSAorT1VUCURYLEFMCisKK1RoZSByZWdpc3RlcnMgb2YgaW50ZXJlc3QgZm9yIGlkZW50aWZ5aW5nIHRoZSBTSU8gb24gdGhlIGRjNzEwMCBhcmUgRGV2aWNlIElECisoMHgyMCkgYW5kIERldmljZSBSZXYgICgweDIxKS4KKworVGhlIERldmljZSBJRCB3aWxsIHJlYWQgMFg2RgorVGhlIERldmljZSBSZXYgY3VycmVudGx5IHJlYWRzIDB4MDEKKworT2J0YWluaW5nIHRoZSBIV00gQmFzZSBBZGRyZXNzLgorVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIGhvdyB0byByZWFkIHRoZSBIV00gQmFzZSBBZGRyZXNzIGxvY2F0ZWQgaW4KK0xvZ2ljYWwgRGV2aWNlIDguCisKKzsgRU5URVIgQ09ORklHVVJBVElPTiBNT0RFICAgCitNT1YJRFgsMDJFSAorTU9WCUFYLDA1NUgKK09VVAlEWCxBTAorOyBDT05GSUdVUkUgUkVHSVNURVIgQ1JFMCwgICAKKzsgTE9HSUNBTCBERVZJQ0UgOCAgICAgICAgICAgCitNT1YJRFgsMDJFSAorTU9WCUFMLDA3SAorT1VUCURYLEFMIDtQb2ludCB0byBMRCMgQ29uZmlnIFJlZworTU9WCURYLDAyRkgKK01PVglBTCwgMDhICitPVVQJRFgsQUw7UG9pbnQgdG8gTG9naWNhbCBEZXZpY2UgOAorOworTU9WCURYLDAyRUggCitNT1YJQUwsNjBICitPVVQJRFgsQUwJOyBQb2ludCB0byBIV00gQmFzZSBBZGRyIE1TQgorTU9WCURYLDAyRkgKK0lOCUFMLERYCTsgR2V0IE1TQiBvZiBIV00gQmFzZSBBZGRyCis7IEVYSVQgQ09ORklHVVJBVElPTiBNT0RFICAgICAKK01PVglEWCwwMkVICitNT1YJQVgsMEFBSAorT1VUCURYLEFMCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9kZXYtaW50ZXJmYWNlIGIvRG9jdW1lbnRhdGlvbi9pMmMvZGV2LWludGVyZmFjZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWQ2Y2RhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvZGV2LWludGVyZmFjZQpAQCAtMCwwICsxLDE0NiBAQAorVXN1YWxseSwgaTJjIGRldmljZXMgYXJlIGNvbnRyb2xsZWQgYnkgYSBrZXJuZWwgZHJpdmVyLiBCdXQgaXQgaXMgYWxzbworcG9zc2libGUgdG8gYWNjZXNzIGFsbCBkZXZpY2VzIG9uIGFuIGFkYXB0ZXIgZnJvbSB1c2Vyc3BhY2UsIHRocm91Z2gKK3RoZSAvZGV2IGludGVyZmFjZS4gWW91IG5lZWQgdG8gbG9hZCBtb2R1bGUgaTJjLWRldiBmb3IgdGhpcy4KKworRWFjaCByZWdpc3RlcmVkIGkyYyBhZGFwdGVyIGdldHMgYSBudW1iZXIsIGNvdW50aW5nIGZyb20gMC4gWW91IGNhbgorZXhhbWluZSAvc3lzL2NsYXNzL2kyYy1kZXYvIHRvIHNlZSB3aGF0IG51bWJlciBjb3JyZXNwb25kcyB0byB3aGljaCBhZGFwdGVyLgorSTJDIGRldmljZSBmaWxlcyBhcmUgY2hhcmFjdGVyIGRldmljZSBmaWxlcyB3aXRoIG1ham9yIGRldmljZSBudW1iZXIgODkKK2FuZCBhIG1pbm9yIGRldmljZSBudW1iZXIgY29ycmVzcG9uZGluZyB0byB0aGUgbnVtYmVyIGFzc2lnbmVkIGFzIAorZXhwbGFpbmVkIGFib3ZlLiBUaGV5IHNob3VsZCBiZSBjYWxsZWQgImkyYy0lZCIgKGkyYy0wLCBpMmMtMSwgLi4uLCAKK2kyYy0xMCwgLi4uKS4gQWxsIDI1NiBtaW5vciBkZXZpY2UgbnVtYmVycyBhcmUgcmVzZXJ2ZWQgZm9yIGkyYy4KKworCitDIGV4YW1wbGUKKz09PT09PT09PQorCitTbyBsZXQncyBzYXkgeW91IHdhbnQgdG8gYWNjZXNzIGFuIGkyYyBhZGFwdGVyIGZyb20gYSBDIHByb2dyYW0uIFRoZQorZmlyc3QgdGhpbmcgdG8gZG8gaXMgYCNpbmNsdWRlIDxsaW51eC9pMmMuaD4iIGFuZCAiI2luY2x1ZGUgPGxpbnV4L2kyYy1kZXYuaD4uIAorWWVzLCBJIGtub3csIHlvdSBzaG91bGQgbmV2ZXIgaW5jbHVkZSBrZXJuZWwgaGVhZGVyIGZpbGVzLCBidXQgdW50aWwgZ2xpYmMgCitrbm93cyBhYm91dCBpMmMsIHRoZXJlIGlzIG5vdCBtdWNoIGNob2ljZS4KKworTm93LCB5b3UgaGF2ZSB0byBkZWNpZGUgd2hpY2ggYWRhcHRlciB5b3Ugd2FudCB0byBhY2Nlc3MuIFlvdSBzaG91bGQKK2luc3BlY3QgL3N5cy9jbGFzcy9pMmMtZGV2LyB0byBkZWNpZGUgdGhpcy4gQWRhcHRlciBudW1iZXJzIGFyZSBhc3NpZ25lZAorc29tZXdoYXQgZHluYW1pY2FsbHksIHNvIHlvdSBjYW4gbm90IGV2ZW4gYXNzdW1lIC9kZXYvaTJjLTAgaXMgdGhlCitmaXJzdCBhZGFwdGVyLgorCitOZXh0IHRoaW5nLCBvcGVuIHRoZSBkZXZpY2UgZmlsZSwgYXMgZm9sbG93czoKKyAgaW50IGZpbGU7CisgIGludCBhZGFwdGVyX25yID0gMjsgLyogcHJvYmFibHkgZHluYW1pY2FsbHkgZGV0ZXJtaW5lZCAqLworICBjaGFyIGZpbGVuYW1lWzIwXTsKKyAgCisgIHNwcmludGYoZmlsZW5hbWUsIi9kZXYvaTJjLSVkIixhZGFwdGVyX25yKTsKKyAgaWYgKChmaWxlID0gb3BlbihmaWxlbmFtZSxPX1JEV1IpKSA8IDApIHsKKyAgICAvKiBFUlJPUiBIQU5ETElORzsgeW91IGNhbiBjaGVjayBlcnJubyB0byBzZWUgd2hhdCB3ZW50IHdyb25nICovCisgICAgZXhpdCgxKTsKKyAgfQorCitXaGVuIHlvdSBoYXZlIG9wZW5lZCB0aGUgZGV2aWNlLCB5b3UgbXVzdCBzcGVjaWZ5IHdpdGggd2hhdCBkZXZpY2UKK2FkZHJlc3MgeW91IHdhbnQgdG8gY29tbXVuaWNhdGU6CisgIGludCBhZGRyID0gMHg0MDsgLyogVGhlIEkyQyBhZGRyZXNzICovCisgIGlmIChpb2N0bChmaWxlLEkyQ19TTEFWRSxhZGRyKSA8IDApIHsKKyAgICAvKiBFUlJPUiBIQU5ETElORzsgeW91IGNhbiBjaGVjayBlcnJubyB0byBzZWUgd2hhdCB3ZW50IHdyb25nICovCisgICAgZXhpdCgxKTsKKyAgfQorCitXZWxsLCB5b3UgYXJlIGFsbCBzZXQgdXAgbm93LiBZb3UgY2FuIG5vdyB1c2UgU01CdXMgY29tbWFuZHMgb3IgcGxhaW4KK0kyQyB0byBjb21tdW5pY2F0ZSB3aXRoIHlvdXIgZGV2aWNlLiBTTUJ1cyBjb21tYW5kcyBhcmUgcHJlZmVycmVkIGlmCit0aGUgZGV2aWNlIHN1cHBvcnRzIHRoZW0uIEJvdGggYXJlIGlsbHVzdHJhdGVkIGJlbG93LgorICBfX3U4IHJlZ2lzdGVyID0gMHgxMDsgLyogRGV2aWNlIHJlZ2lzdGVyIHRvIGFjY2VzcyAqLworICBfX3MzMiByZXM7CisgIGNoYXIgYnVmWzEwXTsKKyAgLyogVXNpbmcgU01CdXMgY29tbWFuZHMgKi8KKyAgcmVzID0gaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKGZpbGUscmVnaXN0ZXIpOworICBpZiAocmVzIDwgMCkgeworICAgIC8qIEVSUk9SIEhBTkRMSU5HOiBpMmMgdHJhbnNhY3Rpb24gZmFpbGVkICovCisgIH0gZWxzZSB7CisgICAgLyogcmVzIGNvbnRhaW5zIHRoZSByZWFkIHdvcmQgKi8KKyAgfQorICAvKiBVc2luZyBJMkMgV3JpdGUsIGVxdWl2YWxlbnQgb2YgCisgICAgICAgICAgIGkyY19zbWJ1c193cml0ZV93b3JkX2RhdGEoZmlsZSxyZWdpc3RlciwweDY1NDMpICovCisgIGJ1ZlswXSA9IHJlZ2lzdGVyOworICBidWZbMV0gPSAweDQzOworICBidWZbMl0gPSAweDY1OworICBpZiAoIHdyaXRlKGZpbGUsYnVmLDMpICE9IDMpIHsKKyAgICAvKiBFUlJPUiBIQU5ETElORzogaTJjIHRyYW5zYWN0aW9uIGZhaWxlZCAqLworICB9CisgIC8qIFVzaW5nIEkyQyBSZWFkLCBlcXVpdmFsZW50IG9mIGkyY19zbWJ1c19yZWFkX2J5dGUoZmlsZSkgKi8KKyAgaWYgKHJlYWQoZmlsZSxidWYsMSkgIT0gMSkgeworICAgIC8qIEVSUk9SIEhBTkRMSU5HOiBpMmMgdHJhbnNhY3Rpb24gZmFpbGVkICovCisgIH0gZWxzZSB7CisgICAgLyogYnVmWzBdIGNvbnRhaW5zIHRoZSByZWFkIGJ5dGUgKi8KKyAgfQorCitJTVBPUlRBTlQ6IGJlY2F1c2Ugb2YgdGhlIHVzZSBvZiBpbmxpbmUgZnVuY3Rpb25zLCB5b3UgKmhhdmUqIHRvIHVzZQorJy1PJyBvciBzb21lIHZhcmlhdGlvbiB3aGVuIHlvdSBjb21waWxlIHlvdXIgcHJvZ3JhbSEKKworCitGdWxsIGludGVyZmFjZSBkZXNjcmlwdGlvbgorPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGZvbGxvd2luZyBJT0NUTHMgYXJlIGRlZmluZWQgYW5kIGZ1bGx5IHN1cHBvcnRlZCAKKyhzZWUgYWxzbyBpMmMtZGV2LmggYW5kIGkyYy5oKToKKworaW9jdGwoZmlsZSxJMkNfU0xBVkUsbG9uZyBhZGRyKQorICBDaGFuZ2Ugc2xhdmUgYWRkcmVzcy4gVGhlIGFkZHJlc3MgaXMgcGFzc2VkIGluIHRoZSA3IGxvd2VyIGJpdHMgb2YgdGhlCisgIGFyZ3VtZW50IChleGNlcHQgZm9yIDEwIGJpdCBhZGRyZXNzZXMsIHBhc3NlZCBpbiB0aGUgMTAgbG93ZXIgYml0cyBpbiB0aGlzCisgIGNhc2UpLgorCitpb2N0bChmaWxlLEkyQ19URU5CSVQsbG9uZyBzZWxlY3QpCisgIFNlbGVjdHMgdGVuIGJpdCBhZGRyZXNzZXMgaWYgc2VsZWN0IG5vdCBlcXVhbHMgMCwgc2VsZWN0cyBub3JtYWwgNyBiaXQKKyAgYWRkcmVzc2VzIGlmIHNlbGVjdCBlcXVhbHMgMC4gRGVmYXVsdCAwLgorCitpb2N0bChmaWxlLEkyQ19QRUMsbG9uZyBzZWxlY3QpCisgIFNlbGVjdHMgU01CdXMgUEVDIChwYWNrZXQgZXJyb3IgY2hlY2tpbmcpIGdlbmVyYXRpb24gYW5kIHZlcmlmaWNhdGlvbgorICBpZiBzZWxlY3Qgbm90IGVxdWFscyAwLCBkaXNhYmxlcyBpZiBzZWxlY3QgZXF1YWxzIDAuIERlZmF1bHQgMC4KKyAgVXNlZCBvbmx5IGZvciBTTUJ1cyB0cmFuc2FjdGlvbnMuCisKK2lvY3RsKGZpbGUsSTJDX0ZVTkNTLHVuc2lnbmVkIGxvbmcgKmZ1bmNzKQorICBHZXRzIHRoZSBhZGFwdGVyIGZ1bmN0aW9uYWxpdHkgYW5kIHB1dHMgaXQgaW4gKmZ1bmNzLgorCitpb2N0bChmaWxlLEkyQ19SRFdSLHN0cnVjdCBpMmNfaW9jdGxfcmR3cl9kYXRhICptc2dzZXQpCisKKyAgRG8gY29tYmluZWQgcmVhZC93cml0ZSB0cmFuc2FjdGlvbiB3aXRob3V0IHN0b3AgaW4gYmV0d2Vlbi4KKyAgVGhlIGFyZ3VtZW50IGlzIGEgcG9pbnRlciB0byBhIHN0cnVjdCBpMmNfaW9jdGxfcmR3cl9kYXRhIHsKKworICAgICAgc3RydWN0IGkyY19tc2cgKm1zZ3M7ICAvKiBwdHIgdG8gYXJyYXkgb2Ygc2ltcGxlIG1lc3NhZ2VzICovCisgICAgICBpbnQgbm1zZ3M7ICAgICAgICAgICAgIC8qIG51bWJlciBvZiBtZXNzYWdlcyB0byBleGNoYW5nZSAqLworICB9CisKKyAgVGhlIG1zZ3NbXSB0aGVtc2VsdmVzIGNvbnRhaW4gZnVydGhlciBwb2ludGVycyBpbnRvIGRhdGEgYnVmZmVycy4KKyAgVGhlIGZ1bmN0aW9uIHdpbGwgd3JpdGUgb3IgcmVhZCBkYXRhIHRvIG9yIGZyb20gdGhhdCBidWZmZXJzIGRlcGVuZGluZworICBvbiB3aGV0aGVyIHRoZSBJMkNfTV9SRCBmbGFnIGlzIHNldCBpbiBhIHBhcnRpY3VsYXIgbWVzc2FnZSBvciBub3QuCisgIFRoZSBzbGF2ZSBhZGRyZXNzIGFuZCB3aGV0aGVyIHRvIHVzZSB0ZW4gYml0IGFkZHJlc3MgbW9kZSBoYXMgdG8gYmUKKyAgc2V0IGluIGVhY2ggbWVzc2FnZSwgb3ZlcnJpZGluZyB0aGUgdmFsdWVzIHNldCB3aXRoIHRoZSBhYm92ZSBpb2N0bCdzLgorCisKK090aGVyIHZhbHVlcyBhcmUgTk9UIHN1cHBvcnRlZCBhdCB0aGlzIG1vbWVudCwgZXhjZXB0IGZvciBJMkNfU01CVVMsCit3aGljaCB5b3Ugc2hvdWxkIG5ldmVyIGRpcmVjdGx5IGNhbGw7IGluc3RlYWQsIHVzZSB0aGUgYWNjZXNzIGZ1bmN0aW9ucworYmVsb3cuCisKK1lvdSBjYW4gZG8gcGxhaW4gaTJjIHRyYW5zYWN0aW9ucyBieSB1c2luZyByZWFkKDIpIGFuZCB3cml0ZSgyKSBjYWxscy4KK1lvdSBkbyBub3QgbmVlZCB0byBwYXNzIHRoZSBhZGRyZXNzIGJ5dGU7IGluc3RlYWQsIHNldCBpdCB0aHJvdWdoCitpb2N0bCBJMkNfU0xBVkUgYmVmb3JlIHlvdSB0cnkgdG8gYWNjZXNzIHRoZSBkZXZpY2UuCisKK1lvdSBjYW4gZG8gU01CdXMgbGV2ZWwgdHJhbnNhY3Rpb25zIChzZWUgZG9jdW1lbnRhdGlvbiBmaWxlIHNtYnVzLXByb3RvY29sIAorZm9yIGRldGFpbHMpIHRocm91Z2ggdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisgIF9fczMyIGkyY19zbWJ1c193cml0ZV9xdWljayhpbnQgZmlsZSwgX191OCB2YWx1ZSk7CisgIF9fczMyIGkyY19zbWJ1c19yZWFkX2J5dGUoaW50IGZpbGUpOworICBfX3MzMiBpMmNfc21idXNfd3JpdGVfYnl0ZShpbnQgZmlsZSwgX191OCB2YWx1ZSk7CisgIF9fczMyIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShpbnQgZmlsZSwgX191OCBjb21tYW5kKTsKKyAgX19zMzIgaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShpbnQgZmlsZSwgX191OCBjb21tYW5kLCBfX3U4IHZhbHVlKTsKKyAgX19zMzIgaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKGludCBmaWxlLCBfX3U4IGNvbW1hbmQpOworICBfX3MzMiBpMmNfc21idXNfd3JpdGVfd29yZF9kYXRhKGludCBmaWxlLCBfX3U4IGNvbW1hbmQsIF9fdTE2IHZhbHVlKTsKKyAgX19zMzIgaTJjX3NtYnVzX3Byb2Nlc3NfY2FsbChpbnQgZmlsZSwgX191OCBjb21tYW5kLCBfX3UxNiB2YWx1ZSk7CisgIF9fczMyIGkyY19zbWJ1c19yZWFkX2Jsb2NrX2RhdGEoaW50IGZpbGUsIF9fdTggY29tbWFuZCwgX191OCAqdmFsdWVzKTsKKyAgX19zMzIgaTJjX3NtYnVzX3dyaXRlX2Jsb2NrX2RhdGEoaW50IGZpbGUsIF9fdTggY29tbWFuZCwgX191OCBsZW5ndGgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3U4ICp2YWx1ZXMpOworQWxsIHRoZXNlIHRyYW5zYWN0aW9ucyByZXR1cm4gLTEgb24gZmFpbHVyZTsgeW91IGNhbiByZWFkIGVycm5vIHRvIHNlZQord2hhdCBoYXBwZW5lZC4gVGhlICd3cml0ZScgdHJhbnNhY3Rpb25zIHJldHVybiAwIG9uIHN1Y2Nlc3M7IHRoZQorJ3JlYWQnIHRyYW5zYWN0aW9ucyByZXR1cm4gdGhlIHJlYWQgdmFsdWUsIGV4Y2VwdCBmb3IgcmVhZF9ibG9jaywgd2hpY2gKK3JldHVybnMgdGhlIG51bWJlciBvZiB2YWx1ZXMgcmVhZC4gVGhlIGJsb2NrIGJ1ZmZlcnMgbmVlZCBub3QgYmUgbG9uZ2VyCit0aGFuIDMyIGJ5dGVzLgorCitUaGUgYWJvdmUgZnVuY3Rpb25zIGFyZSBhbGwgbWFjcm9zLCB0aGF0IHJlc29sdmUgdG8gY2FsbHMgdG8gdGhlCitpMmNfc21idXNfYWNjZXNzIGZ1bmN0aW9uLCB0aGF0IG9uIGl0cyB0dXJuIGNhbGxzIGEgc3BlY2lmaWMgaW9jdGwKK3dpdGggdGhlIGRhdGEgaW4gYSBzcGVjaWZpYyBmb3JtYXQuIFJlYWQgdGhlIHNvdXJjZSBjb2RlIGlmIHlvdQord2FudCB0byBrbm93IHdoYXQgaGFwcGVucyBiZWhpbmQgdGhlIHNjcmVlbnMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9mdW5jdGlvbmFsaXR5IGIvRG9jdW1lbnRhdGlvbi9pMmMvZnVuY3Rpb25hbGl0eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTc4YTk1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvZnVuY3Rpb25hbGl0eQpAQCAtMCwwICsxLDEzNSBAQAorSU5UUk9EVUNUSU9OCistLS0tLS0tLS0tLS0KKworQmVjYXVzZSBub3QgZXZlcnkgSTJDIG9yIFNNQnVzIGFkYXB0ZXIgaW1wbGVtZW50cyBldmVyeXRoaW5nIGluIHRoZSAKK0kyQyBzcGVjaWZpY2F0aW9ucywgYSBjbGllbnQgY2FuIG5vdCB0cnVzdCB0aGF0IGV2ZXJ5dGhpbmcgaXQgbmVlZHMKK2lzIGltcGxlbWVudGVkIHdoZW4gaXQgaXMgZ2l2ZW4gdGhlIG9wdGlvbiB0byBhdHRhY2ggdG8gYW4gYWRhcHRlcjoKK3RoZSBjbGllbnQgbmVlZHMgc29tZSB3YXkgdG8gY2hlY2sgd2hldGhlciBhbiBhZGFwdGVyIGhhcyB0aGUgbmVlZGVkCitmdW5jdGlvbmFsaXR5LiAKKworCitGVU5DVElPTkFMSVRZIENPTlNUQU5UUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRm9yIHRoZSBtb3N0IHVwLXRvLWRhdGUgbGlzdCBvZiBmdW5jdGlvbmFsaXR5IGNvbnN0YW50cywgcGxlYXNlIGNoZWNrCis8bGludXgvaTJjLmg+IQorCisgIEkyQ19GVU5DX0kyQyAgICAgICAgICAgICAgICAgICAgUGxhaW4gaTJjLWxldmVsIGNvbW1hbmRzIChQdXJlIFNNQnVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlcnMgdHlwaWNhbGx5IGNhbiBub3QgZG8gdGhlc2UpCisgIEkyQ19GVU5DXzEwQklUX0FERFIgICAgICAgICAgICAgSGFuZGxlcyB0aGUgMTAtYml0IGFkZHJlc3MgZXh0ZW5zaW9ucworICBJMkNfRlVOQ19QUk9UT0NPTF9NQU5HTElORyAgICAgIEtub3dzIGFib3V0IHRoZSBJMkNfTV9SRVZfRElSX0FERFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX01fUkVWX0RJUl9BRERSIGFuZCBJMkNfTV9SRVZfRElSX05PU1RBUlQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyAod2hpY2ggbW9kaWZ5IHRoZSBpMmMgcHJvdG9jb2whKQorICBJMkNfRlVOQ19TTUJVU19RVUlDSyAgICAgICAgICAgIEhhbmRsZXMgdGhlIFNNQnVzIHdyaXRlX3F1aWNrIGNvbW1hbmQKKyAgSTJDX0ZVTkNfU01CVVNfUkVBRF9CWVRFICAgICAgICBIYW5kbGVzIHRoZSBTTUJ1cyByZWFkX2J5dGUgY29tbWFuZAorICBJMkNfRlVOQ19TTUJVU19XUklURV9CWVRFICAgICAgIEhhbmRsZXMgdGhlIFNNQnVzIHdyaXRlX2J5dGUgY29tbWFuZAorICBJMkNfRlVOQ19TTUJVU19SRUFEX0JZVEVfREFUQSAgIEhhbmRsZXMgdGhlIFNNQnVzIHJlYWRfYnl0ZV9kYXRhIGNvbW1hbmQKKyAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURV9EQVRBICBIYW5kbGVzIHRoZSBTTUJ1cyB3cml0ZV9ieXRlX2RhdGEgY29tbWFuZAorICBJMkNfRlVOQ19TTUJVU19SRUFEX1dPUkRfREFUQSAgIEhhbmRsZXMgdGhlIFNNQnVzIHJlYWRfd29yZF9kYXRhIGNvbW1hbmQKKyAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfV09SRF9EQVRBICBIYW5kbGVzIHRoZSBTTUJ1cyB3cml0ZV9ieXRlX2RhdGEgY29tbWFuZAorICBJMkNfRlVOQ19TTUJVU19QUk9DX0NBTEwgICAgICAgIEhhbmRsZXMgdGhlIFNNQnVzIHByb2Nlc3NfY2FsbCBjb21tYW5kCisgIEkyQ19GVU5DX1NNQlVTX1JFQURfQkxPQ0tfREFUQSAgSGFuZGxlcyB0aGUgU01CdXMgcmVhZF9ibG9ja19kYXRhIGNvbW1hbmQKKyAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQkxPQ0tfREFUQSBIYW5kbGVzIHRoZSBTTUJ1cyB3cml0ZV9ibG9ja19kYXRhIGNvbW1hbmQKKyAgSTJDX0ZVTkNfU01CVVNfUkVBRF9JMkNfQkxPQ0sgICBIYW5kbGVzIHRoZSBTTUJ1cyByZWFkX2kyY19ibG9ja19kYXRhIGNvbW1hbmQKKyAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfSTJDX0JMT0NLICBIYW5kbGVzIHRoZSBTTUJ1cyB3cml0ZV9pMmNfYmxvY2tfZGF0YSBjb21tYW5kCisKK0EgZmV3IGNvbWJpbmF0aW9ucyBvZiB0aGUgYWJvdmUgZmxhZ3MgYXJlIGFsc28gZGVmaW5lZCBmb3IgeW91ciBjb252ZW5pZW5jZToKKworICBJMkNfRlVOQ19TTUJVU19CWVRFICAgICAgICAgICAgIEhhbmRsZXMgdGhlIFNNQnVzIHJlYWRfYnl0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB3cml0ZV9ieXRlIGNvbW1hbmRzCisgIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSAgICAgICAgSGFuZGxlcyB0aGUgU01CdXMgcmVhZF9ieXRlX2RhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgd3JpdGVfYnl0ZV9kYXRhIGNvbW1hbmRzCisgIEkyQ19GVU5DX1NNQlVTX1dPUkRfREFUQSAgICAgICAgSGFuZGxlcyB0aGUgU01CdXMgcmVhZF93b3JkX2RhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgd3JpdGVfd29yZF9kYXRhIGNvbW1hbmRzCisgIEkyQ19GVU5DX1NNQlVTX0JMT0NLX0RBVEEgICAgICAgSGFuZGxlcyB0aGUgU01CdXMgcmVhZF9ibG9ja19kYXRhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHdyaXRlX2Jsb2NrX2RhdGEgY29tbWFuZHMKKyAgSTJDX0ZVTkNfU01CVVNfSTJDX0JMT0NLICAgICAgICBIYW5kbGVzIHRoZSBTTUJ1cyByZWFkX2kyY19ibG9ja19kYXRhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHdyaXRlX2kyY19ibG9ja19kYXRhIGNvbW1hbmRzCisgIEkyQ19GVU5DX1NNQlVTX0VNVUwgICAgICAgICAgICAgSGFuZGxlcyBhbGwgU01CdXMgY29tbWFuZHMgdGhhbiBjYW4gYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbXVsYXRlZCBieSBhIHJlYWwgSTJDIGFkYXB0ZXIgKHVzaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHRyYW5zcGFyZW50IGVtdWxhdGlvbiBsYXllcikKKworCitBTEdPUklUSE0vQURBUFRFUiBJTVBMRU1FTlRBVElPTgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiB5b3Ugd3JpdGUgYSBuZXcgYWxnb3JpdGhtIGRyaXZlciwgeW91IHdpbGwgaGF2ZSB0byBpbXBsZW1lbnQgYQorZnVuY3Rpb24gY2FsbGJhY2sgYGZ1bmN0aW9uYWxpdHknLCB0aGF0IGdldHMgYW4gaTJjX2FkYXB0ZXIgc3RydWN0dXJlCitwb2ludGVyIGFzIGl0cyBvbmx5IHBhcmFtZXRlcjoKKworICBzdHJ1Y3QgaTJjX2FsZ29yaXRobSB7CisJLyogTWFueSBvdGhlciB0aGluZ3Mgb2YgY291cnNlOyBjaGVjayA8bGludXgvaTJjLmg+ISAqLworCXUzMiAoKmZ1bmN0aW9uYWxpdHkpIChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKik7CisgIH0KKworQSB0eXBpY2FsbHkgaW1wbGVtZW50YXRpb24gaXMgZ2l2ZW4gYmVsb3csIGZyb20gaTJjLWFsZ28tYml0LmM6CisKKyAgc3RhdGljIHUzMiBiaXRfZnVuYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCisgIHsKKwlyZXR1cm4gSTJDX0ZVTkNfU01CVVNfRU1VTCB8IEkyQ19GVU5DXzEwQklUX0FERFIgfCAKKwkgICAgICAgSTJDX0ZVTkNfUFJPVE9DT0xfTUFOR0xJTkc7CisgIH0KKworCisKK0NMSUVOVCBDSEVDS0lORworLS0tLS0tLS0tLS0tLS0tCisKK0JlZm9yZSBhIGNsaWVudCB0cmllcyB0byBhdHRhY2ggdG8gYW4gYWRhcHRlciwgb3IgZXZlbiBkbyB0ZXN0cyB0byBjaGVjaword2hldGhlciBvbmUgb2YgdGhlIGRldmljZXMgaXQgc3VwcG9ydHMgaXMgcHJlc2VudCBvbiBhbiBhZGFwdGVyLCBpdCBzaG91bGQKK2NoZWNrIHdoZXRoZXIgdGhlIG5lZWRlZCBmdW5jdGlvbmFsaXR5IGlzIHByZXNlbnQuIFRoZXJlIGFyZSB0d28gZnVuY3Rpb25zCitkZWZpbmVkIHdoaWNoIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgY2FsbGluZyB0aGUgZnVuY3Rpb25hbGl0eSBob29rCitpbiB0aGUgYWxnb3JpdGhtIHN0cnVjdHVyZSBkaXJlY3RseToKKworICAvKiBSZXR1cm4gdGhlIGZ1bmN0aW9uYWxpdHkgbWFzayAqLworICBleHRlcm4gdTMyIGkyY19nZXRfZnVuY3Rpb25hbGl0eSAoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKTsKKworICAvKiBSZXR1cm4gMSBpZiBhZGFwdGVyIHN1cHBvcnRzIGV2ZXJ5dGhpbmcgd2UgbmVlZCwgMCBpZiBub3QuICovCisgIGV4dGVybiBpbnQgaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkgKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwgdTMyIGZ1bmMpOworCitUaGlzIGlzIGEgdHlwaWNhbCB3YXkgdG8gdXNlIHRoZXNlIGZ1bmN0aW9ucyAoZnJvbSB0aGUgd3JpdGluZy1jbGllbnRzCitkb2N1bWVudCk6CisgIGludCBmb29fZGV0ZWN0X2NsaWVudChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyZXNzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgZmxhZ3MsIGludCBraW5kKQorICB7CisJLyogRGVmaW5lIG5lZWRlZCB2YXJpYWJsZXMgKi8KKworCS8qIEFzIHRoZSB2ZXJ5IGZpcnN0IGFjdGlvbiwgd2UgY2hlY2sgd2hldGhlciB0aGUgYWRhcHRlciBoYXMgdGhlCisJICAgbmVlZGVkIGZ1bmN0aW9uYWxpdHk6IHdlIG5lZWQgdGhlIFNNQnVzIHJlYWRfd29yZF9kYXRhLAorICAgICAgICAgICB3cml0ZV93b3JkX2RhdGEgYW5kIHdyaXRlX2J5dGUgZnVuY3Rpb25zIGluIHRoaXMgZXhhbXBsZS4gKi8KKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsSTJDX0ZVTkNfU01CVVNfV09SRF9EQVRBIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURSkpCisJCWdvdG8gRVJST1IwOworCisJLyogTm93IHdlIGNhbiBkbyB0aGUgcmVhbCBkZXRlY3Rpb24gKi8KKworCUVSUk9SMDoKKwkJLyogUmV0dXJuIGFuIGVycm9yICovCisgIH0KKworCisKK0NIRUNLSU5HIFRIUk9VR0ggL0RFVgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSB0cnkgdG8gYWNjZXNzIGFuIGFkYXB0ZXIgZnJvbSBhIHVzZXJzcGFjZSBwcm9ncmFtLCB5b3Ugd2lsbCBoYXZlCit0byB1c2UgdGhlIC9kZXYgaW50ZXJmYWNlLiBZb3Ugd2lsbCBzdGlsbCBoYXZlIHRvIGNoZWNrIHdoZXRoZXIgdGhlCitmdW5jdGlvbmFsaXR5IHlvdSBuZWVkIGlzIHN1cHBvcnRlZCwgb2YgY291cnNlLiBUaGlzIGlzIGRvbmUgdXNpbmcKK3RoZSBJMkNfRlVOQ1MgaW9jdGwuIEFuIGV4YW1wbGUsIGFkYXB0ZWQgZnJvbSB0aGUgbG1fc2Vuc29ycyBpMmNfZGV0ZWN0Citwcm9ncmFtLCBpcyBiZWxvdzoKKworICBpbnQgZmlsZTsKKyAgaWYgKGZpbGUgPSBvcGVuKCIvZGV2L2kyYy0wIixPX1JEV1IpIDwgMCkgeworCS8qIFNvbWUga2luZCBvZiBlcnJvciBoYW5kbGluZyAqLworCWV4aXQoMSk7CisgIH0KKyAgaWYgKGlvY3RsKGZpbGUsSTJDX0ZVTkNTLCZmdW5jcykgPCAwKSB7CisJLyogU29tZSBraW5kIG9mIGVycm9yIGhhbmRsaW5nICovCisJZXhpdCgxKTsKKyAgfQorICBpZiAoISAoZnVuY3MgJiBJMkNfRlVOQ19TTUJVU19RVUlDSykpIHsKKwkvKiBPb3BzLCB0aGUgbmVlZGVkIGZ1bmN0aW9uYWxpdHkgKFNNQnVzIHdyaXRlX3F1aWNrIGZ1bmN0aW9uKSBpcworICAgICAgICAgICBub3QgYXZhaWxhYmxlISAqLworCWV4aXQoMSk7CisgIH0KKyAgLyogTm93IGl0IGlzIHNhZmUgdG8gdXNlIHRoZSBTTUJ1cyB3cml0ZV9xdWljayBjb21tYW5kICovCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9pMmMtcHJvdG9jb2wgYi9Eb2N1bWVudGF0aW9uL2kyYy9pMmMtcHJvdG9jb2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQwMjJjOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaTJjL2kyYy1wcm90b2NvbApAQCAtMCwwICsxLDc2IEBACitUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgaTJjIHByb3RvY29sLiBPciB3aWxsLCB3aGVuIGl0IGlzIGZpbmlzaGVkIDotKQorCitLZXkgdG8gc3ltYm9scworPT09PT09PT09PT09PT0KKworUyAgICAgKDEgYml0KSA6IFN0YXJ0IGJpdAorUCAgICAgKDEgYml0KSA6IFN0b3AgYml0CitSZC9XciAoMSBiaXQpIDogUmVhZC9Xcml0ZSBiaXQuIFJkIGVxdWFscyAxLCBXciBlcXVhbHMgMC4KK0EsIE5BICgxIGJpdCkgOiBBY2NlcHQgYW5kIHJldmVyc2UgYWNjZXB0IGJpdC4gCitBZGRyICAoNyBiaXRzKTogSTJDIDcgYml0IGFkZHJlc3MuIE5vdGUgdGhhdCB0aGlzIGNhbiBiZSBleHBhbmRlZCBhcyB1c3VhbCB0byAKKyAgICAgICAgICAgICAgICBnZXQgYSAxMCBiaXQgSTJDIGFkZHJlc3MuCitDb21tICAoOCBiaXRzKTogQ29tbWFuZCBieXRlLCBhIGRhdGEgYnl0ZSB3aGljaCBvZnRlbiBzZWxlY3RzIGEgcmVnaXN0ZXIgb24KKyAgICAgICAgICAgICAgICB0aGUgZGV2aWNlLgorRGF0YSAgKDggYml0cyk6IEEgcGxhaW4gZGF0YSBieXRlLiBTb21ldGltZXMsIEkgd3JpdGUgRGF0YUxvdywgRGF0YUhpZ2gKKyAgICAgICAgICAgICAgICBmb3IgMTYgYml0IGRhdGEuCitDb3VudCAoOCBiaXRzKTogQSBkYXRhIGJ5dGUgY29udGFpbmluZyB0aGUgbGVuZ3RoIG9mIGEgYmxvY2sgb3BlcmF0aW9uLgorCitbLi5dOiBEYXRhIHNlbnQgYnkgSTJDIGRldmljZSwgYXMgb3Bwb3NlZCB0byBkYXRhIHNlbnQgYnkgdGhlIGhvc3QgYWRhcHRlci4KKworCitTaW1wbGUgc2VuZCB0cmFuc2FjdGlvbgorPT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGNvcnJlc3BvbmRzIHRvIGkyY19tYXN0ZXJfc2VuZC4KKworICBTIEFkZHIgV3IgW0FdIERhdGEgW0FdIERhdGEgW0FdIC4uLiBbQV0gRGF0YSBbQV0gUAorCisKK1NpbXBsZSByZWNlaXZlIHRyYW5zYWN0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBjb3JyZXNwb25kcyB0byBpMmNfbWFzdGVyX3JlY3YKKworICBTIEFkZHIgUmQgW0FdIFtEYXRhXSBBIFtEYXRhXSBBIC4uLiBBIFtEYXRhXSBOQSBQCisKKworQ29tYmluZWQgdHJhbnNhY3Rpb25zCis9PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGNvcnJlc3BvbmRzIHRvIGkyY190cmFuc2ZlcgorCitUaGV5IGFyZSBqdXN0IGxpa2UgdGhlIGFib3ZlIHRyYW5zYWN0aW9ucywgYnV0IGluc3RlYWQgb2YgYSBzdG9wIGJpdCBQCithIHN0YXJ0IGJpdCBTIGlzIHNlbnQgYW5kIHRoZSB0cmFuc2FjdGlvbiBjb250aW51ZXMuIEFuIGV4YW1wbGUgb2YKK2EgYnl0ZSByZWFkLCBmb2xsb3dlZCBieSBhIGJ5dGUgd3JpdGU6CisKKyAgUyBBZGRyIFJkIFtBXSBbRGF0YV0gTkEgUyBBZGRyIFdyIFtBXSBEYXRhIFtBXSBQCisKKworTW9kaWZpZWQgdHJhbnNhY3Rpb25zCis9PT09PT09PT09PT09PT09PT09PT0KKworV2UgaGF2ZSBmb3VuZCBzb21lIEkyQyBkZXZpY2VzIHRoYXQgbmVlZHMgdGhlIGZvbGxvd2luZyBtb2RpZmljYXRpb25zOgorCisgIEZsYWcgSTJDX01fTk9TVEFSVDogCisgICAgSW4gYSBjb21iaW5lZCB0cmFuc2FjdGlvbiwgbm8gJ1MgQWRkciBXci9SZCBbQV0nIGlzIGdlbmVyYXRlZCBhdCBzb21lCisgICAgcG9pbnQuIEZvciBleGFtcGxlLCBzZXR0aW5nIEkyQ19NX05PU1RBUlQgb24gdGhlIHNlY29uZCBwYXJ0aWFsIG1lc3NhZ2UKKyAgICBnZW5lcmF0ZXMgc29tZXRoaW5nIGxpa2U6CisgICAgICBTIEFkZHIgUmQgW0FdIFtEYXRhXSBOQSBEYXRhIFtBXSBQCisgICAgSWYgeW91IHNldCB0aGUgSTJDX01fTk9TVEFSVCB2YXJpYWJsZSBmb3IgdGhlIGZpcnN0IHBhcnRpYWwgbWVzc2FnZSwKKyAgICB3ZSBkbyBub3QgZ2VuZXJhdGUgQWRkciwgYnV0IHdlIGRvIGdlbmVyYXRlIHRoZSBzdGFydGJpdCBTLiBUaGlzIHdpbGwKKyAgICBwcm9iYWJseSBjb25mdXNlIGFsbCBvdGhlciBjbGllbnRzIG9uIHlvdXIgYnVzLCBzbyBkb24ndCB0cnkgdGhpcy4KKworICBGbGFncyBJMkNfTV9SRVZfRElSX0FERFIKKyAgICBUaGlzIHRvZ2dsZXMgdGhlIFJkL1dyIGZsYWcuIFRoYXQgaXMsIGlmIHlvdSB3YW50IHRvIGRvIGEgd3JpdGUsIGJ1dAorICAgIG5lZWQgdG8gZW1pdCBhbiBSZCBpbnN0ZWFkIG9mIGEgV3IsIG9yIHZpY2UgdmVyc2EsIHlvdSBzZXQgdGhpcworICAgIGZsYWcuIEZvciBleGFtcGxlOgorICAgICAgUyBBZGRyIFJkIFtBXSBEYXRhIFtBXSBEYXRhIFtBXSAuLi4gW0FdIERhdGEgW0FdIFAKKworICBGbGFncyBJMkNfTV9JR05PUkVfTkFLCisgICAgTm9ybWFsbHkgbWVzc2FnZSBpcyBpbnRlcnJ1cHRlZCBpbW1lZGlhdGVseSBpZiB0aGVyZSBpcyBbTkFdIGZyb20gdGhlCisgICAgY2xpZW50LiBTZXR0aW5nIHRoaXMgZmxhZyB0cmVhdHMgYW55IFtOQV0gYXOgW0FdLCBhbmQgYWxsIG9mCisgICAgbWVzc2FnZSBpcyBzZW50LgorICAgIFRoZXNlIG1lc3NhZ2VzIG1heSBzdGlsbCBmYWlsIHRvIFNDTCBsby0+aGkgdGltZW91dC4KKworICBGbGFncyBJMkNfTV9OT19SRF9BQ0sKKyAgICBJbiBhIHJlYWQgbWVzc2FnZSwgbWFzdGVyIEEvTkEgYml0IGlzIHNraXBwZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9pMmMtc3R1YiBiL0RvY3VtZW50YXRpb24vaTJjL2kyYy1zdHViCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2ZGNiMTMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9pMmMtc3R1YgpAQCAtMCwwICsxLDM4IEBACitNT0RVTEU6IGkyYy1zdHViCisKK0RFU0NSSVBUSU9OOgorCitUaGlzIG1vZHVsZSBpcyBhIHZlcnkgc2ltcGxlIGZha2UgSTJDL1NNQnVzIGRyaXZlci4gIEl0IGltcGxlbWVudHMgZm91cgordHlwZXMgb2YgU01CdXMgY29tbWFuZHM6IHdyaXRlIHF1aWNrLCAoci93KSBieXRlLCAoci93KSBieXRlIGRhdGEsIGFuZAorKHIvdykgd29yZCBkYXRhLgorCitObyBoYXJkd2FyZSBpcyBuZWVkZWQgbm9yIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1vZHVsZS4gIEl0IHdpbGwgYWNjZXB0IHdyaXRlCitxdWljayBjb21tYW5kcyB0byBhbGwgYWRkcmVzc2VzOyBpdCB3aWxsIHJlc3BvbmQgdG8gdGhlIG90aGVyIGNvbW1hbmRzIChhbHNvCit0byBhbGwgYWRkcmVzc2VzKSBieSByZWFkaW5nIGZyb20gb3Igd3JpdGluZyB0byBhbiBhcnJheSBpbiBtZW1vcnkuICBJdCB3aWxsCithbHNvIHNwYW0gdGhlIGtlcm5lbCBsb2dzIGZvciBldmVyeSBjb21tYW5kIGl0IGhhbmRsZXMuCisKK0EgcG9pbnRlciByZWdpc3RlciB3aXRoIGF1dG8taW5jcmVtZW50IGlzIGltcGxlbWVudGVkIGZvciBhbGwgYnl0ZQorb3BlcmF0aW9ucy4gIFRoaXMgYWxsb3dzIGZvciBjb250aW51b3VzIGJ5dGUgcmVhZHMgbGlrZSB0aG9zZSBzdXBwb3J0ZWQgYnkKK0VFUFJPTXMsIGFtb25nIG90aGVycy4KKworVGhlIHR5cGljYWwgdXNlLWNhc2UgaXMgbGlrZSB0aGlzOgorCTEuIGxvYWQgdGhpcyBtb2R1bGUKKwkyLiB1c2UgaTJjc2V0IChmcm9tIGxtX3NlbnNvcnMgcHJvamVjdCkgdG8gcHJlLWxvYWQgc29tZSBkYXRhCisJMy4gbG9hZCB0aGUgdGFyZ2V0IHNlbnNvcnMgY2hpcCBkcml2ZXIgbW9kdWxlCisJNC4gb2JzZXJ2ZSBpdHMgYmVoYXZpb3IgaW4gdGhlIGtlcm5lbCBsb2cKKworQ0FWRUFUUzoKKworVGhlcmUgYXJlIGluZGVwZW5kZW50IGFycmF5cyBmb3IgYnl0ZS9kYXRhIGFuZCB3b3JkL2RhdGEgY29tbWFuZHMuICBEZXBlbmRpbmcKK29uIGlmL2hvdyBhIHRhcmdldCBkcml2ZXIgbWl4ZXMgdGhlbSwgeW91J2xsIG5lZWQgdG8gYmUgY2FyZWZ1bC4KKworSWYgeW91ciB0YXJnZXQgZHJpdmVyIHBvbGxzIHNvbWUgYnl0ZSBvciB3b3JkIHdhaXRpbmcgZm9yIGl0IHRvIGNoYW5nZSwgdGhlCitzdHViIGNvdWxkIGxvY2sgaXQgdXAuICBVc2UgaTJjc2V0IHRvIHVubG9jayBpdC4KKworSWYgdGhlIGhhcmR3YXJlIGZvciB5b3VyIGRyaXZlciBoYXMgYmFua2VkIHJlZ2lzdGVycyAoZS5nLiBXaW5ib25kIHNlbnNvcnMKK2NoaXBzKSB0aGlzIG1vZHVsZSB3aWxsIG5vdCB3b3JrIHdlbGwgLSBhbHRob3VnaCBpdCBjb3VsZCBiZSBleHRlbmRlZCB0bworc3VwcG9ydCB0aGF0IHByZXR0eSBlYXNpbHkuCisKK0lmIHlvdSBzcGFtIGl0IGhhcmQgZW5vdWdoLCBwcmludGsgY2FuIGJlIGxvc3N5LiAgVGhpcyBtb2R1bGUgcmVhbGx5IHdhbnRzCitzb21ldGhpbmcgbGlrZSByZWxheWZzLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9wb3J0aW5nLWNsaWVudHMgYi9Eb2N1bWVudGF0aW9uL2kyYy9wb3J0aW5nLWNsaWVudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY0MDQ5MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaTJjL3BvcnRpbmctY2xpZW50cwpAQCAtMCwwICsxLDEzMyBAQAorUmV2aXNpb24gNCwgMjAwNC0wMy0zMAorSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CitHcmVnIEtIIDxncmVnQGtyb2FoLmNvbT4KKworVGhpcyBpcyBhIGd1aWRlIG9uIGhvdyB0byBjb252ZXJ0IEkyQyBjaGlwIGRyaXZlcnMgZnJvbSBMaW51eCAyLjQgdG8KK0xpbnV4IDIuNi4gSSBoYXZlIGJlZW4gdXNpbmcgZXhpc3RpbmcgZHJpdmVycyAobG03NSwgbG03OCkgYXMgZXhhbXBsZXMuCitUaGVuIEkgY29udmVydGVkIGEgZHJpdmVyIG15c2VsZiAobG04MykgYW5kIHVwZGF0ZWQgdGhpcyBkb2N1bWVudC4KKworVGhlcmUgYXJlIHR3byBzZXRzIG9mIHBvaW50cyBiZWxvdy4gVGhlIGZpcnN0IHNldCBjb25jZXJucyB0ZWNobmljYWwKK2NoYW5nZXMuIFRoZSBzZWNvbmQgc2V0IGNvbmNlcm5zIGNvZGluZyBwb2xpY3kuIEJvdGggYXJlIG1hbmRhdG9yeS4KKworQWx0aG91Z2ggcmVhZGluZyB0aGlzIGd1aWRlIHdpbGwgaGVscCB5b3UgcG9ydGluZyBkcml2ZXJzLCBJIHN1Z2dlc3QKK3lvdSBrZWVwIGFuIGV5ZSBvbiBhbiBhbHJlYWR5IHBvcnRlZCBkcml2ZXIgd2hpbGUgcG9ydGluZyB5b3VyIG93bgorZHJpdmVyLiBUaGlzIHdpbGwgaGVscCB5b3UgYSBsb3QgdW5kZXJzdGFuZGluZyB3aGF0IHRoaXMgZ3VpZGUKK2V4YWN0bHkgbWVhbnMuIENob29zZSB0aGUgY2hpcCBkcml2ZXIgdGhhdCBpcyB0aGUgbW9yZSBzaW1pbGFyIHRvCit5b3VycyBmb3IgYmVzdCByZXN1bHRzLgorCitUZWNobmljYWwgY2hhbmdlczoKKworKiBbSW5jbHVkZXNdIEdldCByaWQgb2YgInZlcnNpb24uaCIuIFJlcGxhY2UgPGxpbnV4L2kyYy1wcm9jLmg+IHdpdGgKKyAgPGxpbnV4L2kyYy1zZW5zb3IuaD4uIEluY2x1ZGVzIHR5cGljYWxseSBsb29rIGxpa2UgdGhhdDoKKyAgI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorICAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorICAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorICAjaW5jbHVkZSA8bGludXgvaTJjLmg+CisgICNpbmNsdWRlIDxsaW51eC9pMmMtc2Vuc29yLmg+CisgICNpbmNsdWRlIDxsaW51eC9pMmMtdmlkLmg+CS8qIGlmIHlvdSBuZWVkIFZSTSBzdXBwb3J0ICovCisgICNpbmNsdWRlIDxhc20vaW8uaD4JCS8qIGlmIHlvdSBoYXZlIEkvTyBvcGVyYXRpb25zICovCisgIFBsZWFzZSByZXNwZWN0IHRoaXMgaW5jbHVzaW9uIG9yZGVyLiBTb21lIGV4dHJhIGhlYWRlcnMgbWF5IGJlCisgIHJlcXVpcmVkIGZvciBhIGdpdmVuIGRyaXZlciAoZS5nLiAibG03NS5oIikuCisKKyogW0FkZHJlc3Nlc10gU0VOU09SU19JMkNfRU5EIGJlY29tZXMgSTJDX0NMSUVOVF9FTkQsIFNFTlNPUlNfSVNBX0VORAorICBiZWNvbWVzIEkyQ19DTElFTlRfSVNBX0VORC4KKworKiBbQ2xpZW50IGRhdGFdIEdldCByaWQgb2Ygc3lzY3RsX2lkLiBUcnkgdXNpbmcgc3RhbmRhcmQgbmFtZXMgZm9yCisgIHJlZ2lzdGVyIHZhbHVlcyAoZm9yIGV4YW1wbGUsIHRlbXBfb3MgYmVjb21lcyB0ZW1wX21heCkuIFlvdSdyZQorICBzdGlsbCByZWxhdGl2ZWx5IGZyZWUgaGVyZSwgYnV0IHlvdSAqaGF2ZSogdG8gZm9sbG93IHRoZSBzdGFuZGFyZAorICBuYW1lcyBmb3Igc3lzZnMgZmlsZXMgKHNlZSB0aGUgU3lzY3RsIHNlY3Rpb24gYmVsb3cpLgorCisqIFtGdW5jdGlvbiBwcm90b3R5cGVzXSBUaGUgZGV0ZWN0IGZ1bmN0aW9ucyBsb3NlcyBpdHMgZmxhZ3MKKyAgcGFyYW1ldGVyLiBTeXNjdGwgKGUuZy4gbG03NV90ZW1wKSBhbmQgbWlzY2VsbGFuZW91cyBmdW5jdGlvbnMKKyAgYXJlIG9mZiB0aGUgbGlzdCBvZiBwcm90b3R5cGVzLiBUaGlzIHVzdWFsbHkgbGVhdmVzIGZpdmUKKyAgcHJvdG90eXBlczoKKyAgc3RhdGljIGludCBsbTc1X2F0dGFjaF9hZGFwdGVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcik7CisgIHN0YXRpYyBpbnQgbG03NV9kZXRlY3Qoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcmVzcywKKyAgICAgIGludCBraW5kKTsKKyAgc3RhdGljIHZvaWQgbG03NV9pbml0X2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKKyAgc3RhdGljIGludCBsbTc1X2RldGFjaF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CisgIHN0YXRpYyB2b2lkIGxtNzVfdXBkYXRlX2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKKworKiBbU3lzY3RsXSBBbGwgc3lzY3RsIHN0dWZmIGlzIG9mIGNvdXJzZSBnb25lIChkZWZpbmVzLCBjdGxfdGFibGUKKyAgYW5kIGZ1bmN0aW9ucykuIEluc3RlYWQsIHlvdSBoYXZlIHRvIGRlZmluZSBzaG93IGFuZCBzZXQgZnVuY3Rpb25zIGZvcgorICBlYWNoIHN5c2ZzIGZpbGUuIE9ubHkgZGVmaW5lIHNldCBmb3Igd3JpdGFibGUgdmFsdWVzLiBUYWtlIGEgbG9vayBhdCBhbgorICBleGlzdGluZyAyLjYgZHJpdmVyIGZvciBkZXRhaWxzIChsbTc4IGZvciBleGFtcGxlKS4gRG9uJ3QgZm9yZ2V0CisgIHRvIGRlZmluZSB0aGUgYXR0cmlidXRlcyBmb3IgZWFjaCBmaWxlICh0aGlzIGlzIHRoYXQgc3RlcCB0aGF0CisgIGxpbmtzIGNhbGxiYWNrIGZ1bmN0aW9ucykuIFVzZSB0aGUgZmlsZSBuYW1lcyBzcGVjaWZpZWQgaW4KKyAgRG9jdW1lbnRhdGlvbi9pMmMvc3lzZnMtaW50ZXJmYWNlIGZvciB0aGUgaW5kaXZpZHVhbCBmaWxlcy4gQWxzbworICBjb252ZXJ0IHRoZSB1bml0cyB0aGVzZSBmaWxlcyByZWFkIGFuZCB3cml0ZSB0byB0aGUgc3BlY2lmaWVkIG9uZXMuCisgIElmIHlvdSBuZWVkIHRvIGFkZCBhIG5ldyB0eXBlIG9mIGZpbGUsIHBsZWFzZSBkaXNjdXNzIGl0IG9uIHRoZQorICBzZW5zb3JzIG1haWxpbmcgbGlzdCA8c2Vuc29yc0BzdGltcHkubmV0cm9lZGdlLmNvbT4gYnkgcHJvdmlkaW5nIGEKKyAgcGF0Y2ggdG8gdGhlIERvY3VtZW50YXRpb24vaTJjL3N5c2ZzLWludGVyZmFjZSBmaWxlLgorCisqIFtBdHRhY2hdIEZvciBJMkMgZHJpdmVycywgdGhlIGF0dGFjaCBmdW5jdGlvbiBzaG91bGQgbWFrZSBzdXJlCisgIHRoYXQgdGhlIGFkYXB0ZXIncyBjbGFzcyBoYXMgSTJDX0NMQVNTX0hXTU9OLCB1c2luZyB0aGUKKyAgZm9sbG93aW5nIGNvbnN0cnVjdDoKKyAgaWYgKCEoYWRhcHRlci0+Y2xhc3MgJiBJMkNfQ0xBU1NfSFdNT04pKQorICAgICAgICAgIHJldHVybiAwOworICBJU0Etb25seSBkcml2ZXJzIG9mIGNvdXJzZSBkb24ndCBuZWVkIHRoaXMuCisKKyogW0RldGVjdF0gQXMgbWVudGlvbmVkIGVhcmxpZXIsIHRoZSBmbGFncyBwYXJhbWV0ZXIgaXMgZ29uZS4KKyAgVGhlIHR5cGVfbmFtZSBhbmQgY2xpZW50X25hbWUgc3RyaW5ncyBhcmUgcmVwbGFjZWQgYnkgYSBzaW5nbGUKKyAgbmFtZSBzdHJpbmcsIHdoaWNoIHdpbGwgYmUgZmlsbGVkIHdpdGggYSBsb3dlcmNhc2UsIHNob3J0IHN0cmluZworICAodHlwaWNhbGx5IHRoZSBkcml2ZXIgbmFtZSwgZS5nLiAibG03NSIpLgorICBJbiBpMmMtb25seSBkcml2ZXJzLCBkcm9wIHRoZSBpMmNfaXNfaXNhX2FkYXB0ZXIgY2hlY2ssIGl0J3MKKyAgdXNlbGVzcy4KKyAgVGhlIGVycm9yTiBsYWJlbHMgYXJlIHJlZHVjZWQgdG8gdGhlIG51bWJlciBuZWVkZWQuIElmIHRoYXQgbnVtYmVyCisgIGlzIDIgKGkyYy1vbmx5IGRyaXZlcnMpLCBpdCBpcyBhZHZpc2VkIHRoYXQgdGhlIGxhYmVscyBhcmUgbmFtZWQKKyAgZXhpdCBhbmQgZXhpdF9mcmVlLiBGb3IgaTJjK2lzYSBkcml2ZXJzLCBsYWJlbHMgc2hvdWxkIGJlIG5hbWVkCisgIEVSUk9SMCwgRVJST1IxIGFuZCBFUlJPUjIuIERvbid0IGZvcmdldCB0byBwcm9wZXJseSBzZXQgZXJyIGJlZm9yZQorICBqdW1waW5nIHRvIGVycm9yIGxhYmVscy4gQnkgdGhlIHdheSwgbGFiZWxzIHNob3VsZCBiZSBsZWZ0LWFsaWduZWQuCisgIFVzZSBtZW1zZXQgdG8gZmlsbCB0aGUgY2xpZW50IGFuZCBkYXRhIGFyZWEgd2l0aCAweDAwLgorICBVc2UgaTJjX3NldF9jbGllbnRkYXRhIHRvIHNldCB0aGUgY2xpZW50IGRhdGEgKGFzIG9wcG9zZWQgdG8KKyAgYSBkaXJlY3QgYWNjZXNzIHRvIGNsaWVudC0+ZGF0YSkuCisgIFVzZSBzdHJsY3B5IGluc3RlYWQgb2Ygc3RyY3B5IHRvIGNvcHkgdGhlIGNsaWVudCBuYW1lLgorICBSZXBsYWNlIHRoZSBzeXNjdGwgZGlyZWN0b3J5IHJlZ2lzdHJhdGlvbiBieSBjYWxscyB0bworICBkZXZpY2VfY3JlYXRlX2ZpbGUuIE1vdmUgdGhlIGRyaXZlciBpbml0aWFsaXphdGlvbiBiZWZvcmUgYW55CisgIHN5c2ZzIGZpbGUgY3JlYXRpb24uCisgIERyb3AgY2xpZW50LT5pZC4KKworKiBbSW5pdF0gTGltaXRzIG11c3Qgbm90IGJlIHNldCBieSB0aGUgZHJpdmVyIChjYW4gYmUgZG9uZSBsYXRlciBpbgorICB1c2VyLXNwYWNlKS4gQ2hpcCBzaG91bGQgbm90IGJlIHJlc2V0IGRlZmF1bHQgKGFsdGhvdWdoIGEgbW9kdWxlCisgIHBhcmFtZXRlciBtYXkgYmUgdXNlZCB0byBmb3JjZSBpcyksIGFuZCBpbml0aWFsaXphdGlvbiBzaG91bGQgYmUKKyAgbGltaXRlZCB0byB0aGUgc3RyaWN0bHkgbmVjZXNzYXJ5IHN0ZXBzLgorCisqIFtEZXRhY2hdIEdldCByaWQgb2YgZGF0YSwgcmVtb3ZlIHRoZSBjYWxsIHRvCisgIGkyY19kZXJlZ2lzdGVyX2VudHJ5LgorCisqIFtVcGRhdGVdIERvbid0IGFjY2VzcyBjbGllbnQtPmRhdGEgZGlyZWN0bHksIHVzZQorICBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSBpbnN0ZWFkLgorCisqIFtJbnRlcmZhY2VdIEluaXQgZnVuY3Rpb24gc2hvdWxkIG5vdCBwcmludCBhbnl0aGluZy4gTWFrZSBzdXJlCisgIHRoZXJlIGlzIGEgTU9EVUxFX0xJQ0VOU0UoKSBsaW5lLCBhdCB0aGUgYm90dG9tIG9mIHRoZSBmaWxlCisgIChhZnRlciBNT0RVTEVfQVVUSE9SKCkgYW5kIE1PRFVMRV9ERVNDUklQVElPTigpLCBpbiB0aGlzIG9yZGVyKS4KKworQ29kaW5nIHBvbGljeToKKworKiBbQ29weXJpZ2h0XSBVc2UgKEMpLCBub3QgKGMpLCBmb3IgY29weXJpZ2h0LgorCisqIFtEZWJ1Zy9sb2ddIEdldCByaWQgb2YgI2lmZGVmIERFQlVHLyNlbmRpZiBjb25zdHJ1Y3RzIHdoZW5ldmVyIHlvdQorICBjYW4uIENhbGxzIHRvIHByaW50ay9wcl9kZWJ1ZyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIGFyZSByZXBsYWNlZAorICBieSBjYWxscyB0byBkZXZfZGJnLiBIZXJlIGlzIGFuIGV4YW1wbGUgb24gaG93IHRvIGNhbGwgaXQgKHRha2VuCisgIGZyb20gbG03NV9kZXRlY3QpOgorICBkZXZfZGJnKCZjbGllbnQtPmRldiwgIlN0YXJ0aW5nIGxtNzUgdXBkYXRlXG4iKTsKKyAgUmVwbGFjZSBvdGhlciBwcmludGsgY2FsbHMgd2l0aCB0aGUgZGV2X2luZm8sIGRldl9lcnIgb3IgZGV2X3dhcm4KKyAgZnVuY3Rpb24sIGFzIGFwcHJvcHJpYXRlLgorCisqIFtDb25zdGFudHNdIENvbnN0YW50cyBkZWZpbmVzIChyZWdpc3RlcnMsIGNvbnZlcnNpb25zLCBpbml0aWFsCisgIHZhbHVlcykgc2hvdWxkIGJlIGFsaWduZWQuIFRoaXMgZ3JlYXRseSBpbXByb3ZlcyByZWFkYWJpbGl0eS4KKyAgU2FtZSBnb2VzIGZvciB2YXJpYWJsZXMgZGVjbGFyYXRpb25zLiBBbGlnbm1lbnRzIGFyZSBhY2hpZXZlZCBieSB0aGUKKyAgbWVhbnMgb2YgdGFicywgbm90IHNwYWNlcy4gUmVtZW1iZXIgdGhhdCB0YWJzIGFyZSBzZXQgdG8gOCBpbiB0aGUKKyAgTGludXgga2VybmVsIGNvZGUuCisKKyogW1N0cnVjdHVyZSBkZWZpbml0aW9uXSBUaGUgbmFtZSBmaWVsZCBzaG91bGQgYmUgc3RhbmRhcmRpemVkLiBBbGwKKyAgbG93ZXJjYXNlIGFuZCBhcyBzaW1wbGUgYXMgdGhlIGRyaXZlciBuYW1lIGl0c2VsZiAoZS5nLiAibG03NSIpLgorCisqIFtMYXlvdXRdIEF2b2lkIGV4dHJhIGVtcHR5IGxpbmVzIGJldHdlZW4gY29tbWVudHMgYW5kIHdoYXQgdGhleQorICBjb21tZW50LiBSZXNwZWN0IHRoZSBjb2Rpbmcgc3R5bGUgKHNlZSBEb2N1bWVudGF0aW9uL0NvZGluZ1N0eWxlKSwKKyAgaW4gcGFydGljdWxhciB3aGVuIGl0IGNvbWVzIHRvIHBsYWNpbmcgY3VybHkgYnJhY2VzLgorCisqIFtDb21tZW50c10gTWFrZSBzdXJlIHRoYXQgbm8gY29tbWVudCByZWZlcnMgdG8gYSBmaWxlIHRoYXQgaXNuJ3QKKyAgcGFydCBvZiB0aGUgTGludXggc291cmNlIHRyZWUgKHR5cGljYWxseSBkb2MvY2hpcHMvPGNoaXAgbmFtZT4pLAorICBhbmQgdGhhdCByZW1haW5pbmcgY29tbWVudHMgc3RpbGwgbWF0Y2ggdGhlIGNvZGUuIE1lcmdpbmcgY29tbWVudAorICBsaW5lcyB3aGVuIHBvc3NpYmxlIGlzIGVuY291cmFnZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9zbWJ1cy1wcm90b2NvbCBiL0RvY3VtZW50YXRpb24vaTJjL3NtYnVzLXByb3RvY29sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ZjVlNWMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9zbWJ1cy1wcm90b2NvbApAQCAtMCwwICsxLDIxNiBAQAorU01CdXMgUHJvdG9jb2wgU3VtbWFyeQorPT09PT09PT09PT09PT09PT09PT09PQorVGhlIGZvbGxvd2luZyBpcyBhIHN1bW1hcnkgb2YgdGhlIFNNQnVzIHByb3RvY29sLiBJdCBhcHBsaWVzIHRvCithbGwgcmV2aXNpb25zIG9mIHRoZSBwcm90b2NvbCAoMS4wLCAxLjEsIGFuZCAyLjApLgorQ2VydGFpbiBwcm90b2NvbCBmZWF0dXJlcyB3aGljaCBhcmUgbm90IHN1cHBvcnRlZCBieQordGhpcyBwYWNrYWdlIGFyZSBicmllZmx5IGRlc2NyaWJlZCBhdCB0aGUgZW5kIG9mIHRoaXMgZG9jdW1lbnQuCisKK1NvbWUgYWRhcHRlcnMgdW5kZXJzdGFuZCBvbmx5IHRoZSBTTUJ1cyAoU3lzdGVtIE1hbmFnZW1lbnQgQnVzKSBwcm90b2NvbCwKK3doaWNoIGlzIGEgc3Vic2V0IGZyb20gdGhlIEkyQyBwcm90b2NvbC4gRm9ydHVuYXRlbHksIG1hbnkgZGV2aWNlcyB1c2UKK29ubHkgdGhlIHNhbWUgc3Vic2V0LCB3aGljaCBtYWtlcyBpdCBwb3NzaWJsZSB0byBwdXQgdGhlbSBvbiBhbiBTTUJ1cy4KK0lmIHlvdSB3cml0ZSBhIGRyaXZlciBmb3Igc29tZSBJMkMgZGV2aWNlLCBwbGVhc2UgdHJ5IHRvIHVzZSB0aGUgU01CdXMKK2NvbW1hbmRzIGlmIGF0IGFsbCBwb3NzaWJsZSAoaWYgdGhlIGRldmljZSB1c2VzIG9ubHkgdGhhdCBzdWJzZXQgb2YgdGhlCitJMkMgcHJvdG9jb2wpLiBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHVzZSB0aGUgZGV2aWNlIGRyaXZlciBvbiBib3RoCitTTUJ1cyBhZGFwdGVycyBhbmQgSTJDIGFkYXB0ZXJzICh0aGUgU01CdXMgY29tbWFuZCBzZXQgaXMgYXV0b21hdGljYWxseQordHJhbnNsYXRlZCB0byBJMkMgb24gSTJDIGFkYXB0ZXJzLCBidXQgcGxhaW4gSTJDIGNvbW1hbmRzIGNhbiBub3QgYmUKK2hhbmRsZWQgYXQgYWxsIG9uIG1vc3QgcHVyZSBTTUJ1cyBhZGFwdGVycykuCisKK0JlbG93IGlzIGEgbGlzdCBvZiBTTUJ1cyBjb21tYW5kcy4KKworS2V5IHRvIHN5bWJvbHMKKz09PT09PT09PT09PT09CisKK1MgICAgICgxIGJpdCkgOiBTdGFydCBiaXQKK1AgICAgICgxIGJpdCkgOiBTdG9wIGJpdAorUmQvV3IgKDEgYml0KSA6IFJlYWQvV3JpdGUgYml0LiBSZCBlcXVhbHMgMSwgV3IgZXF1YWxzIDAuCitBLCBOQSAoMSBiaXQpIDogQWNjZXB0IGFuZCByZXZlcnNlIGFjY2VwdCBiaXQuIAorQWRkciAgKDcgYml0cyk6IEkyQyA3IGJpdCBhZGRyZXNzLiBOb3RlIHRoYXQgdGhpcyBjYW4gYmUgZXhwYW5kZWQgYXMgdXN1YWwgdG8gCisgICAgICAgICAgICAgICAgZ2V0IGEgMTAgYml0IEkyQyBhZGRyZXNzLgorQ29tbSAgKDggYml0cyk6IENvbW1hbmQgYnl0ZSwgYSBkYXRhIGJ5dGUgd2hpY2ggb2Z0ZW4gc2VsZWN0cyBhIHJlZ2lzdGVyIG9uCisgICAgICAgICAgICAgICAgdGhlIGRldmljZS4KK0RhdGEgICg4IGJpdHMpOiBBIHBsYWluIGRhdGEgYnl0ZS4gU29tZXRpbWVzLCBJIHdyaXRlIERhdGFMb3csIERhdGFIaWdoCisgICAgICAgICAgICAgICAgZm9yIDE2IGJpdCBkYXRhLgorQ291bnQgKDggYml0cyk6IEEgZGF0YSBieXRlIGNvbnRhaW5pbmcgdGhlIGxlbmd0aCBvZiBhIGJsb2NrIG9wZXJhdGlvbi4KKworWy4uXTogRGF0YSBzZW50IGJ5IEkyQyBkZXZpY2UsIGFzIG9wcG9zZWQgdG8gZGF0YSBzZW50IGJ5IHRoZSBob3N0IGFkYXB0ZXIuCisKKworU01CdXMgV3JpdGUgUXVpY2sKKz09PT09PT09PT09PT09PT09CisKK1RoaXMgc2VuZHMgYSBzaW5nbGUgYml0IHRvIHRoZSBkZXZpY2UsIGF0IHRoZSBwbGFjZSBvZiB0aGUgUmQvV3IgYml0LgorVGhlcmUgaXMgbm8gZXF1aXZhbGVudCBSZWFkIFF1aWNrIGNvbW1hbmQuCisKK0EgQWRkciBSZC9XciBbQV0gUAorCisKK1NNQnVzIFJlYWQgQnl0ZQorPT09PT09PT09PT09PT09CisKK1RoaXMgcmVhZHMgYSBzaW5nbGUgYnl0ZSBmcm9tIGEgZGV2aWNlLCB3aXRob3V0IHNwZWNpZnlpbmcgYSBkZXZpY2UKK3JlZ2lzdGVyLiBTb21lIGRldmljZXMgYXJlIHNvIHNpbXBsZSB0aGF0IHRoaXMgaW50ZXJmYWNlIGlzIGVub3VnaDsgZm9yCitvdGhlcnMsIGl0IGlzIGEgc2hvcnRoYW5kIGlmIHlvdSB3YW50IHRvIHJlYWQgdGhlIHNhbWUgcmVnaXN0ZXIgYXMgaW4KK3RoZSBwcmV2aW91cyBTTUJ1cyBjb21tYW5kLgorCitTIEFkZHIgUmQgW0FdIFtEYXRhXSBOQSBQCisKKworU01CdXMgV3JpdGUgQnl0ZQorPT09PT09PT09PT09PT09PQorCitUaGlzIGlzIHRoZSByZXZlcnNlIG9mIFJlYWQgQnl0ZTogaXQgc2VuZHMgYSBzaW5nbGUgYnl0ZSB0byBhIGRldmljZS4KK1NlZSBSZWFkIEJ5dGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK1MgQWRkciBXciBbQV0gRGF0YSBbQV0gUAorCisKK1NNQnVzIFJlYWQgQnl0ZSBEYXRhCis9PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHJlYWRzIGEgc2luZ2xlIGJ5dGUgZnJvbSBhIGRldmljZSwgZnJvbSBhIGRlc2lnbmF0ZWQgcmVnaXN0ZXIuCitUaGUgcmVnaXN0ZXIgaXMgc3BlY2lmaWVkIHRocm91Z2ggdGhlIENvbW0gYnl0ZS4KKworUyBBZGRyIFdyIFtBXSBDb21tIFtBXSBTIEFkZHIgUmQgW0FdIFtEYXRhXSBOQSBQCisKKworU01CdXMgUmVhZCBXb3JkIERhdGEKKz09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgY29tbWFuZCBpcyB2ZXJ5IGxpa2UgUmVhZCBCeXRlIERhdGE7IGFnYWluLCBkYXRhIGlzIHJlYWQgZnJvbSBhCitkZXZpY2UsIGZyb20gYSBkZXNpZ25hdGVkIHJlZ2lzdGVyIHRoYXQgaXMgc3BlY2lmaWVkIHRocm91Z2ggdGhlIENvbW0KK2J5dGUuIEJ1dCB0aGlzIHRpbWUsIHRoZSBkYXRhIGlzIGEgY29tcGxldGUgd29yZCAoMTYgYml0cykuCisKK1MgQWRkciBXciBbQV0gQ29tbSBbQV0gUyBBZGRyIFJkIFtBXSBbRGF0YUxvd10gQSBbRGF0YUhpZ2hdIE5BIFAKKworCitTTUJ1cyBXcml0ZSBCeXRlIERhdGEKKz09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHdyaXRlcyBhIHNpbmdsZSBieXRlIHRvIGEgZGV2aWNlLCB0byBhIGRlc2lnbmF0ZWQgcmVnaXN0ZXIuIFRoZQorcmVnaXN0ZXIgaXMgc3BlY2lmaWVkIHRocm91Z2ggdGhlIENvbW0gYnl0ZS4gVGhpcyBpcyB0aGUgb3Bwb3NpdGUgb2YKK3RoZSBSZWFkIEJ5dGUgRGF0YSBjb21tYW5kLgorCitTIEFkZHIgV3IgW0FdIENvbW0gW0FdIERhdGEgW0FdIFAKKworCitTTUJ1cyBXcml0ZSBXb3JkIERhdGEKKz09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGlzIHRoZSBvcHBvc2l0ZSBvcGVyYXRpb24gb2YgdGhlIFJlYWQgV29yZCBEYXRhIGNvbW1hbmQuIDE2IGJpdHMKK29mIGRhdGEgaXMgcmVhZCBmcm9tIGEgZGV2aWNlLCBmcm9tIGEgZGVzaWduYXRlZCByZWdpc3RlciB0aGF0IGlzIAorc3BlY2lmaWVkIHRocm91Z2ggdGhlIENvbW0gYnl0ZS4gCisKK1MgQWRkciBXciBbQV0gQ29tbSBbQV0gRGF0YUxvdyBbQV0gRGF0YUhpZ2ggW0FdIFAKKworCitTTUJ1cyBQcm9jZXNzIENhbGwKKz09PT09PT09PT09PT09PT09PQorCitUaGlzIGNvbW1hbmQgc2VsZWN0cyBhIGRldmljZSByZWdpc3RlciAodGhyb3VnaCB0aGUgQ29tbSBieXRlKSwgc2VuZHMKKzE2IGJpdHMgb2YgZGF0YSB0byBpdCwgYW5kIHJlYWRzIDE2IGJpdHMgb2YgZGF0YSBpbiByZXR1cm4uCisKK1MgQWRkciBXciBbQV0gQ29tbSBbQV0gRGF0YUxvdyBbQV0gRGF0YUhpZ2ggW0FdIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIEFkZHIgUmQgW0FdIFtEYXRhTG93XSBBIFtEYXRhSGlnaF0gTkEgUAorCisKK1NNQnVzIEJsb2NrIFJlYWQKKz09PT09PT09PT09PT09PT0KKworVGhpcyBjb21tYW5kIHJlYWRzIGEgYmxvY2sgb2YgdXAgdG8gMzIgYnl0ZXMgZnJvbSBhIGRldmljZSwgZnJvbSBhIAorZGVzaWduYXRlZCByZWdpc3RlciB0aGF0IGlzIHNwZWNpZmllZCB0aHJvdWdoIHRoZSBDb21tIGJ5dGUuIFRoZSBhbW91bnQKK29mIGRhdGEgaXMgc3BlY2lmaWVkIGJ5IHRoZSBkZXZpY2UgaW4gdGhlIENvdW50IGJ5dGUuCisKK1MgQWRkciBXciBbQV0gQ29tbSBbQV0gCisgICAgICAgICAgIFMgQWRkciBSZCBbQV0gW0NvdW50XSBBIFtEYXRhXSBBIFtEYXRhXSBBIC4uLiBBIFtEYXRhXSBOQSBQCisKKworU01CdXMgQmxvY2sgV3JpdGUKKz09PT09PT09PT09PT09PT09CisKK1RoZSBvcHBvc2l0ZSBvZiB0aGUgQmxvY2sgUmVhZCBjb21tYW5kLCB0aGlzIHdyaXRlcyB1cCB0byAzMiBieXRlcyB0byAKK2EgZGV2aWNlLCB0byBhIGRlc2lnbmF0ZWQgcmVnaXN0ZXIgdGhhdCBpcyBzcGVjaWZpZWQgdGhyb3VnaCB0aGUKK0NvbW0gYnl0ZS4gVGhlIGFtb3VudCBvZiBkYXRhIGlzIHNwZWNpZmllZCBpbiB0aGUgQ291bnQgYnl0ZS4KKworUyBBZGRyIFdyIFtBXSBDb21tIFtBXSBDb3VudCBbQV0gRGF0YSBbQV0gRGF0YSBbQV0gLi4uIFtBXSBEYXRhIFtBXSBQCisKKworU01CdXMgQmxvY2sgUHJvY2VzcyBDYWxsCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworU01CdXMgQmxvY2sgUHJvY2VzcyBDYWxsIHdhcyBpbnRyb2R1Y2VkIGluIFJldmlzaW9uIDIuMCBvZiB0aGUgc3BlY2lmaWNhdGlvbi4KKworVGhpcyBjb21tYW5kIHNlbGVjdHMgYSBkZXZpY2UgcmVnaXN0ZXIgKHRocm91Z2ggdGhlIENvbW0gYnl0ZSksIHNlbmRzCisxIHRvIDMxIGJ5dGVzIG9mIGRhdGEgdG8gaXQsIGFuZCByZWFkcyAxIHRvIDMxIGJ5dGVzIG9mIGRhdGEgaW4gcmV0dXJuLgorCitTIEFkZHIgV3IgW0FdIENvbW0gW0FdIENvdW50IFtBXSBEYXRhIFtBXSAuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBBZGRyIFJkIFtBXSBbQ291bnRdIEEgW0RhdGFdIC4uLiBBIFAKKworCitTTUJ1cyBIb3N0IE5vdGlmeQorPT09PT09PT09PT09PT09PT0KKworVGhpcyBjb21tYW5kIGlzIHNlbnQgZnJvbSBhIFNNQnVzIGRldmljZSBhY3RpbmcgYXMgYSBtYXN0ZXIgdG8gdGhlCitTTUJ1cyBob3N0IGFjdGluZyBhcyBhIHNsYXZlLgorSXQgaXMgdGhlIHNhbWUgZm9ybSBhcyBXcml0ZSBXb3JkLCB3aXRoIHRoZSBjb21tYW5kIGNvZGUgcmVwbGFjZWQgYnkgdGhlCithbGVydGluZyBkZXZpY2UncyBhZGRyZXNzLgorCitbU10gW0hvc3RBZGRyXSBbV3JdIEEgW0RldkFkZHJdIEEgW0RhdGFMb3ddIEEgW0RhdGFIaWdoXSBBIFtQXQorCisKK1BhY2tldCBFcnJvciBDaGVja2luZyAoUEVDKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09CitQYWNrZXQgRXJyb3IgQ2hlY2tpbmcgd2FzIGludHJvZHVjZWQgaW4gUmV2aXNpb24gMS4xIG9mIHRoZSBzcGVjaWZpY2F0aW9uLgorCitQRUMgYWRkcyBhIENSQy04IGVycm9yLWNoZWNraW5nIGJ5dGUgdG8gYWxsIHRyYW5zZmVycy4KKworCitBZGRyZXNzIFJlc29sdXRpb24gUHJvdG9jb2wgKEFSUCkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVGhlIEFkZHJlc3MgUmVzb2x1dGlvbiBQcm90b2NvbCB3YXMgaW50cm9kdWNlZCBpbiBSZXZpc2lvbiAyLjAgb2YKK3RoZSBzcGVjaWZpY2F0aW9uLiBJdCBpcyBhIGhpZ2hlci1sYXllciBwcm90b2NvbCB3aGljaCB1c2VzIHRoZQorbWVzc2FnZXMgYWJvdmUuCisKK0FSUCBhZGRzIGRldmljZSBlbnVtZXJhdGlvbiBhbmQgZHluYW1pYyBhZGRyZXNzIGFzc2lnbm1lbnQgdG8KK3RoZSBwcm90b2NvbC4gQWxsIEFSUCBjb21tdW5pY2F0aW9ucyB1c2Ugc2xhdmUgYWRkcmVzcyAweDYxIGFuZAorcmVxdWlyZSBQRUMgY2hlY2tzdW1zLgorCisKK0kyQyBCbG9jayBUcmFuc2FjdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT0KK1RoZSBmb2xsb3dpbmcgSTJDIGJsb2NrIHRyYW5zYWN0aW9ucyBhcmUgc3VwcG9ydGVkIGJ5IHRoZQorU01CdXMgbGF5ZXIgYW5kIGFyZSBkZXNjcmliZWQgaGVyZSBmb3IgY29tcGxldGVuZXNzLgorSTJDIGJsb2NrIHRyYW5zYWN0aW9ucyBkbyBub3QgbGltaXQgdGhlIG51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZAorYnV0IHRoZSBTTUJ1cyBsYXllciBwbGFjZXMgYSBsaW1pdCBvZiAzMiBieXRlcy4KKworCitJMkMgQmxvY2sgUmVhZAorPT09PT09PT09PT09PT0KKworVGhpcyBjb21tYW5kIHJlYWRzIGEgYmxvY2sgb2YgYnl0ZXMgZnJvbSBhIGRldmljZSwgZnJvbSBhIAorZGVzaWduYXRlZCByZWdpc3RlciB0aGF0IGlzIHNwZWNpZmllZCB0aHJvdWdoIHRoZSBDb21tIGJ5dGUuCisKK1MgQWRkciBXciBbQV0gQ29tbSBbQV0gCisgICAgICAgICAgIFMgQWRkciBSZCBbQV0gW0RhdGFdIEEgW0RhdGFdIEEgLi4uIEEgW0RhdGFdIE5BIFAKKworCitJMkMgQmxvY2sgUmVhZCAoMiBDb21tIGJ5dGVzKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBjb21tYW5kIHJlYWRzIGEgYmxvY2sgb2YgYnl0ZXMgZnJvbSBhIGRldmljZSwgZnJvbSBhIAorZGVzaWduYXRlZCByZWdpc3RlciB0aGF0IGlzIHNwZWNpZmllZCB0aHJvdWdoIHRoZSB0d28gQ29tbSBieXRlcy4KKworUyBBZGRyIFdyIFtBXSBDb21tMSBbQV0gQ29tbTIgW0FdIAorICAgICAgICAgICBTIEFkZHIgUmQgW0FdIFtEYXRhXSBBIFtEYXRhXSBBIC4uLiBBIFtEYXRhXSBOQSBQCisKKworSTJDIEJsb2NrIFdyaXRlCis9PT09PT09PT09PT09PT0KKworVGhlIG9wcG9zaXRlIG9mIHRoZSBCbG9jayBSZWFkIGNvbW1hbmQsIHRoaXMgd3JpdGVzIGJ5dGVzIHRvIAorYSBkZXZpY2UsIHRvIGEgZGVzaWduYXRlZCByZWdpc3RlciB0aGF0IGlzIHNwZWNpZmllZCB0aHJvdWdoIHRoZQorQ29tbSBieXRlLiBOb3RlIHRoYXQgY29tbWFuZCBsZW5ndGhzIG9mIDAsIDIsIG9yIG1vcmUgYnl0ZXMgYXJlCitzdXBwb3J0ZWQgYXMgdGhleSBhcmUgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBkYXRhLgorCitTIEFkZHIgV3IgW0FdIENvbW0gW0FdIERhdGEgW0FdIERhdGEgW0FdIC4uLiBbQV0gRGF0YSBbQV0gUAorCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL3N1bW1hcnkgYi9Eb2N1bWVudGF0aW9uL2kyYy9zdW1tYXJ5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxZGRlODcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9zdW1tYXJ5CkBAIC0wLDAgKzEsNzUgQEAKK1RoaXMgaXMgYW4gZXhwbGFuYXRpb24gb2Ygd2hhdCBpMmMgaXMsIGFuZCB3aGF0IGlzIHN1cHBvcnRlZCBpbiB0aGlzIHBhY2thZ2UuCisKK0kyQyBhbmQgU01CdXMKKz09PT09PT09PT09PT0KKworSTJDIChwcm9ub3VuY2U6IEkgc3F1YXJlZCBDKSBpcyBhIHByb3RvY29sIGRldmVsb3BlZCBieSBQaGlsaXBzLiBJdCBpcyBhIAorc2xvdyB0d28td2lyZSBwcm90b2NvbCAoMTAtNDAwIGtIeiksIGJ1dCBpdCBzdWZmaWNlcyBmb3IgbWFueSB0eXBlcyBvZiAKK2RldmljZXMuCisKK1NNQnVzIChTeXN0ZW0gTWFuYWdlbWVudCBCdXMpIGlzIGEgc3Vic2V0IG9mIHRoZSBJMkMgcHJvdG9jb2wuIE1hbnkKK21vZGVybiBtYWluYm9hcmRzIGhhdmUgYSBTeXN0ZW0gTWFuYWdlbWVudCBCdXMuIFRoZXJlIGFyZSBhIGxvdCBvZiAKK2RldmljZXMgd2hpY2ggY2FuIGJlIGNvbm5lY3RlZCB0byBhIFNNQnVzOyB0aGUgbW9zdCBub3RhYmxlIGFyZSBtb2Rlcm4gCittZW1vcnkgY2hpcHMgd2l0aCBFRVBST00gbWVtb3JpZXMgYW5kIGNoaXBzIGZvciBoYXJkd2FyZSBtb25pdG9yaW5nLgorCitCZWNhdXNlIHRoZSBTTUJ1cyBpcyBqdXN0IGEgc3BlY2lhbCBjYXNlIG9mIHRoZSBnZW5lcmFsaXplZCBJMkMgYnVzLCB3ZQorY2FuIHNpbXVsYXRlIHRoZSBTTUJ1cyBwcm90b2NvbCBvbiBwbGFpbiBJMkMgYnVzc2VzLiBUaGUgcmV2ZXJzZSBpcworcmVncmV0ZnVsbHkgaW1wb3NzaWJsZS4KKworCitUZXJtaW5vbG9neQorPT09PT09PT09PT0KKworV2hlbiB3ZSB0YWxrIGFib3V0IEkyQywgd2UgdXNlIHRoZSBmb2xsb3dpbmcgdGVybXM6CisgIEJ1cyAgICAtPiBBbGdvcml0aG0KKyAgICAgICAgICAgIEFkYXB0ZXIKKyAgRGV2aWNlIC0+IERyaXZlcgorICAgICAgICAgICAgQ2xpZW50CisKK0FuIEFsZ29yaXRobSBkcml2ZXIgY29udGFpbnMgZ2VuZXJhbCBjb2RlIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGEgd2hvbGUgY2xhc3MKK29mIEkyQyBhZGFwdGVycy4gRWFjaCBzcGVjaWZpYyBhZGFwdGVyIGRyaXZlciBkZXBlbmRzIG9uIG9uZSBhbGdvcml0aG0KK2RyaXZlci4KK0EgRHJpdmVyIGRyaXZlciAoeWVzLCB0aGlzIHNvdW5kcyByaWRpY3Vsb3VzLCBzb3JyeSkgY29udGFpbnMgdGhlIGdlbmVyYWwKK2NvZGUgdG8gYWNjZXNzIHNvbWUgdHlwZSBvZiBkZXZpY2UuIEVhY2ggZGV0ZWN0ZWQgZGV2aWNlIGdldHMgaXRzIG93bgorZGF0YSBpbiB0aGUgQ2xpZW50IHN0cnVjdHVyZS4gVXN1YWxseSwgRHJpdmVyIGFuZCBDbGllbnQgYXJlIG1vcmUgY2xvc2VseQoraW50ZWdyYXRlZCB0aGFuIEFsZ29yaXRobSBhbmQgQWRhcHRlci4KKworRm9yIGEgZ2l2ZW4gY29uZmlndXJhdGlvbiwgeW91IHdpbGwgbmVlZCBhIGRyaXZlciBmb3IgeW91ciBJMkMgYnVzICh1c3VhbGx5CithIHNlcGFyYXRlIEFkYXB0ZXIgYW5kIEFsZ29yaXRobSBkcml2ZXIpLCBhbmQgZHJpdmVycyBmb3IgeW91ciBJMkMgZGV2aWNlcworKHVzdWFsbHkgb25lIGRyaXZlciBmb3IgZWFjaCBkZXZpY2UpLiBUaGVyZSBhcmUgbm8gSTJDIGRldmljZSBkcml2ZXJzCitpbiB0aGlzIHBhY2thZ2UuIFNlZSB0aGUgbG1fc2Vuc29ycyBwcm9qZWN0IGh0dHA6Ly93d3cubG0tc2Vuc29ycy5udQorZm9yIGRldmljZSBkcml2ZXJzLgorCisKK0luY2x1ZGVkIEJ1cyBEcml2ZXJzCis9PT09PT09PT09PT09PT09PT09PQorTm90ZSB0aGF0IG9ubHkgc3RhYmxlIGRyaXZlcnMgYXJlIHBhdGNoZWQgaW50byB0aGUga2VybmVsIGJ5ICdta3BhdGNoJy4KKworCitCYXNlIG1vZHVsZXMKKy0tLS0tLS0tLS0tLQorCitpMmMtY29yZTogVGhlIGJhc2ljIEkyQyBjb2RlLCBpbmNsdWRpbmcgdGhlIC9wcm9jL2J1cy9pMmMqIGludGVyZmFjZQoraTJjLWRldjogIFRoZSAvZGV2L2kyYy0qIGludGVyZmFjZQoraTJjLXByb2M6IFRoZSAvcHJvYy9zeXMvZGV2L3NlbnNvcnMgaW50ZXJmYWNlIGZvciBkZXZpY2UgKGNsaWVudCkgZHJpdmVycworCitBbGdvcml0aG0gZHJpdmVycworLS0tLS0tLS0tLS0tLS0tLS0KKworaTJjLWFsZ28tOHh4OiAgICBBbiBhbGdvcml0aG0gZm9yIENQTSdzIEkyQyBkZXZpY2UgaW4gTW90b3JvbGEgOHh4IHByb2Nlc3NvcnMgKE5PVCBCVUlMVCBCWSBERUZBVUxUKQoraTJjLWFsZ28tYml0OiAgICBBIGJpdC1iYW5naW5nIGFsZ29yaXRobQoraTJjLWFsZ28tcGNmOiAgICBBIFBDRiA4NTg0IHN0eWxlIGFsZ29yaXRobQoraTJjLWFsZ28taWJtX29jcDogQW4gYWxnb3JpdGhtIGZvciB0aGUgSTJDIGRldmljZSBpbiBJQk0gNHh4IHByb2Nlc3NvcnMgKE5PVCBCVUlMVCBCWSBERUZBVUxUKQorCitBZGFwdGVyIGRyaXZlcnMKKy0tLS0tLS0tLS0tLS0tLQorCitpMmMtZWxla3RvcjogICAgIEVsZWt0b3IgSVNBIGNhcmQgKHVzZXMgaTJjLWFsZ28tcGNmKQoraTJjLWVsdjogICAgICAgICBFTFYgcGFyYWxsZWwgcG9ydCBhZGFwdGVyICh1c2VzIGkyYy1hbGdvLWJpdCkKK2kyYy1wY2YtZXBwOiAgICAgUENGODU4NCBvbiBhIEVQUCBwYXJhbGxlbCBwb3J0ICh1c2VzIGkyYy1hbGdvLXBjZikgKE5PVCBta3BhdGNoZWQpCitpMmMtcGhpbGlwcy1wYXI6IFBoaWxpcHMgc3R5bGUgcGFyYWxsZWwgcG9ydCBhZGFwdGVyICh1c2VzIGkyYy1hbGdvLWJpdCkKK2kyYy1hZGFwLWlibV9vY3A6IElCTSA0eHggcHJvY2Vzc29yIEkyQyBkZXZpY2UgKHVzZXMgaTJjLWFsZ28taWJtX29jcCkgKE5PVCBCVUlMVCBCWSBERUZBVUxUKQoraTJjLXBwb3J0OiAgICAgICBQcmltaXRpdmUgcGFyYWxsZWwgcG9ydCBhZGFwdGVyICh1c2VzIGkyYy1hbGdvLWJpdCkKK2kyYy1ycHg6ICAgICAgICAgUlBYIGJvYXJkIE1vdG9yb2xhIDh4eCBJMkMgZGV2aWNlICh1c2VzIGkyYy1hbGdvLTh4eCkgKE5PVCBCVUlMVCBCWSBERUZBVUxUKQoraTJjLXZlbGxlbWFuOiAgICBWZWxsZW1hbiBLODAwMCBwYXJhbGxlbCBwb3J0IGFkYXB0ZXIgKHVzZXMgaTJjLWFsZ28tYml0KQorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9zeXNmcy1pbnRlcmZhY2UgYi9Eb2N1bWVudGF0aW9uL2kyYy9zeXNmcy1pbnRlcmZhY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ2NDAwNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaTJjL3N5c2ZzLWludGVyZmFjZQpAQCAtMCwwICsxLDI3NCBAQAorTmFtaW5nIGFuZCBkYXRhIGZvcm1hdCBzdGFuZGFyZHMgZm9yIHN5c2ZzIGZpbGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGxpYnNlbnNvcnMgbGlicmFyeSBvZmZlcnMgYW4gaW50ZXJmYWNlIHRvIHRoZSByYXcgc2Vuc29ycyBkYXRhCit0aHJvdWdoIHRoZSBzeXNmcyBpbnRlcmZhY2UuIFNlZSBsaWJzZW5zb3JzIGRvY3VtZW50YXRpb24gYW5kIHNvdXJjZSBmb3IKK21vcmUgZnVydGhlciBpbmZvcm1hdGlvbi4gQXMgb2Ygd3JpdGluZyB0aGlzIGRvY3VtZW50LCBsaWJzZW5zb3JzCisoZnJvbSBsbV9zZW5zb3JzIDIuOC4zKSBpcyBoZWF2aWx5IGNoaXAtZGVwZW5kYW50LiBBZGRpbmcgb3IgdXBkYXRpbmcKK3N1cHBvcnQgZm9yIGFueSBnaXZlbiBjaGlwIHJlcXVpcmVzIG1vZGlmeWluZyB0aGUgbGlicmFyeSdzIGNvZGUuCitUaGlzIGlzIGJlY2F1c2UgbGlic2Vuc29ycyB3YXMgd3JpdHRlbiBmb3IgdGhlIHByb2NmcyBpbnRlcmZhY2UKK29sZGVyIGtlcm5lbCBtb2R1bGVzIHdlcmUgdXNpbmcsIHdoaWNoIHdhc24ndCBzdGFuZGFyZGl6ZWQgZW5vdWdoLgorUmVjZW50IHZlcnNpb25zIG9mIGxpYnNlbnNvcnMgKGZyb20gbG1fc2Vuc29ycyAyLjguMiBhbmQgbGF0ZXIpIGhhdmUKK3N1cHBvcnQgZm9yIHRoZSBzeXNmcyBpbnRlcmZhY2UsIHRob3VnaC4KKworVGhlIG5ldyBzeXNmcyBpbnRlcmZhY2Ugd2FzIGRlc2lnbmVkIHRvIGJlIGFzIGNoaXAtaW5kZXBlbmRhbnQgYXMKK3Bvc3NpYmxlLgorCitOb3RlIHRoYXQgbW90aGVyYm9hcmRzIHZhcnkgd2lkZWx5IGluIHRoZSBjb25uZWN0aW9ucyB0byBzZW5zb3IgY2hpcHMuCitUaGVyZSBpcyBubyBzdGFuZGFyZCB0aGF0IGVuc3VyZXMsIGZvciBleGFtcGxlLCB0aGF0IHRoZSBzZWNvbmQKK3RlbXBlcmF0dXJlIHNlbnNvciBpcyBjb25uZWN0ZWQgdG8gdGhlIENQVSwgb3IgdGhhdCB0aGUgc2Vjb25kIGZhbiBpcyBvbgordGhlIENQVS4gQWxzbywgc29tZSB2YWx1ZXMgcmVwb3J0ZWQgYnkgdGhlIGNoaXBzIG5lZWQgc29tZSBjb21wdXRhdGlvbgorYmVmb3JlIHRoZXkgbWFrZSBmdWxsIHNlbnNlLiBGb3IgZXhhbXBsZSwgbW9zdCBjaGlwcyBjYW4gb25seSBtZWFzdXJlCit2b2x0YWdlcyBiZXR3ZWVuIDAgYW5kICs0Vi4gT3RoZXIgdm9sdGFnZXMgYXJlIHNjYWxlZCBiYWNrIGludG8gdGhhdAorcmFuZ2UgdXNpbmcgZXh0ZXJuYWwgcmVzaXN0b3JzLiBTaW5jZSB0aGUgdmFsdWVzIG9mIHRoZXNlIHJlc2lzdG9ycworY2FuIGNoYW5nZSBmcm9tIG1vdGhlcmJvYXJkIHRvIG1vdGhlcmJvYXJkLCB0aGUgY29udmVyc2lvbnMgY2Fubm90IGJlCitoYXJkIGNvZGVkIGludG8gdGhlIGRyaXZlciBhbmQgaGF2ZSB0byBiZSBkb25lIGluIHVzZXIgc3BhY2UuCisKK0ZvciB0aGlzIHJlYXNvbiwgZXZlbiBpZiB3ZSBhaW0gYXQgYSBjaGlwLWluZGVwZW5kYW50IGxpYnNlbnNvcnMsIGl0IHdpbGwKK3N0aWxsIHJlcXVpcmUgYSBjb25maWd1cmF0aW9uIGZpbGUgKGUuZy4gL2V0Yy9zZW5zb3JzLmNvbmYpIGZvciBwcm9wZXIKK3ZhbHVlcyBjb252ZXJzaW9uLCBsYWJlbGluZyBvZiBpbnB1dHMgYW5kIGhpZGluZyBvZiB1bnVzZWQgaW5wdXRzLgorCitBbiBhbHRlcm5hdGl2ZSBtZXRob2QgdGhhdCBzb21lIHByb2dyYW1zIHVzZSBpcyB0byBhY2Nlc3MgdGhlIHN5c2ZzCitmaWxlcyBkaXJlY3RseS4gVGhpcyBkb2N1bWVudCBicmllZmx5IGRlc2NyaWJlcyB0aGUgc3RhbmRhcmRzIHRoYXQgdGhlCitkcml2ZXJzIGZvbGxvdywgc28gdGhhdCBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtIGNhbiBzY2FuIGZvciBlbnRyaWVzIGFuZAorYWNjZXNzIHRoaXMgZGF0YSBpbiBhIHNpbXBsZSBhbmQgY29uc2lzdGVudCB3YXkuIFRoYXQgc2FpZCwgc3VjaCBwcm9ncmFtcword2lsbCBoYXZlIHRvIGltcGxlbWVudCBjb252ZXJzaW9uLCBsYWJlbGluZyBhbmQgaGlkaW5nIG9mIGlucHV0cy4gRm9yCit0aGlzIHJlYXNvbiwgaXQgaXMgc3RpbGwgbm90IHJlY29tbWVuZGVkIHRvIGJ5cGFzcyB0aGUgbGlicmFyeS4KKworSWYgeW91IGFyZSBkZXZlbG9waW5nIGEgdXNlcnNwYWNlIGFwcGxpY2F0aW9uIHBsZWFzZSBzZW5kIHVzIGZlZWRiYWNrIG9uCit0aGlzIHN0YW5kYXJkLgorCitOb3RlIHRoYXQgdGhpcyBzdGFuZGFyZCBpc24ndCBjb21wbGV0ZWx5IGVzdGFibGlzaGVkIHlldCwgc28gaXQgaXMgc3ViamVjdAordG8gY2hhbmdlcywgZXZlbiBpbXBvcnRhbnQgb25lcy4gT25lIG1vcmUgcmVhc29uIHRvIHVzZSB0aGUgbGlicmFyeSBpbnN0ZWFkCitvZiBhY2Nlc3Npbmcgc3lzZnMgZmlsZXMgZGlyZWN0bHkuCisKK0VhY2ggY2hpcCBnZXRzIGl0cyBvd24gZGlyZWN0b3J5IGluIHRoZSBzeXNmcyAvc3lzL2RldmljZXMgdHJlZS4gIFRvCitmaW5kIGFsbCBzZW5zb3IgY2hpcHMsIGl0IGlzIGVhc2llciB0byBmb2xsb3cgdGhlIHN5bWxpbmtzIGZyb20KKy9zeXMvaTJjL2RldmljZXMvCisKK0FsbCBzeXNmcyB2YWx1ZXMgYXJlIGZpeGVkIHBvaW50IG51bWJlcnMuICBUbyBnZXQgdGhlIHRydWUgdmFsdWUgb2Ygc29tZQorb2YgdGhlIHZhbHVlcywgeW91IHNob3VsZCBkaXZpZGUgYnkgdGhlIHNwZWNpZmllZCB2YWx1ZS4KKworVGhlcmUgaXMgb25seSBvbmUgdmFsdWUgcGVyIGZpbGUsIHVubGlrZSB0aGUgb2xkZXIgL3Byb2Mgc3BlY2lmaWNhdGlvbi4KK1RoZSBjb21tb24gc2NoZW1lIGZvciBmaWxlcyBuYW1pbmcgaXM6IDx0eXBlPjxudW1iZXI+XzxpdGVtPi4gVXN1YWwKK3R5cGVzIGZvciBzZW5zb3IgY2hpcHMgYXJlICJpbiIgKHZvbHRhZ2UpLCAidGVtcCIgKHRlbXBlcmF0dXJlKSBhbmQKKyJmYW4iIChmYW4pLiBVc3VhbCBpdGVtcyBhcmUgImlucHV0IiAobWVhc3VyZWQgdmFsdWUpLCAibWF4IiAoaGlnaAordGhyZXNob2xkLCAibWluIiAobG93IHRocmVzaG9sZCkuIE51bWJlcmluZyB1c3VhbGx5IHN0YXJ0cyBmcm9tIDEsCitleGNlcHQgZm9yIHZvbHRhZ2VzIHdoaWNoIHN0YXJ0IGZyb20gMCAoYmVjYXVzZSBtb3N0IGRhdGEgc2hlZXRzIHVzZQordGhpcykuIEEgbnVtYmVyIGlzIGFsd2F5cyB1c2VkIGZvciBlbGVtZW50cyB0aGF0IGNhbiBiZSBwcmVzZW50IG1vcmUKK3RoYW4gb25jZSwgZXZlbiBpZiB0aGVyZSBpcyBhIHNpbmdsZSBlbGVtZW50IG9mIHRoZSBnaXZlbiB0eXBlIG9uIHRoZQorc3BlY2lmaWMgY2hpcC4gT3RoZXIgZmlsZXMgZG8gbm90IHJlZmVyIHRvIGEgc3BlY2lmaWMgZWxlbWVudCwgc28KK3RoZXkgaGF2ZSBhIHNpbXBsZSBuYW1lLCBhbmQgbm8gbnVtYmVyLgorCitBbGFybXMgYXJlIGRpcmVjdCBpbmRpY2F0aW9ucyByZWFkIGZyb20gdGhlIGNoaXBzLiBUaGUgZHJpdmVycyBkbyBOT1QKK21ha2UgY29tcGFyaXNvbnMgb2YgcmVhZGluZ3MgdG8gdGhyZXNob2xkcy4gVGhpcyBhbGxvd3MgdmlvbGF0aW9ucworYmV0d2VlbiByZWFkaW5ncyB0byBiZSBjYXVnaHQgYW5kIGFsYXJtZWQuIFRoZSBleGFjdCBkZWZpbml0aW9uIG9mIGFuCithbGFybSAoZm9yIGV4YW1wbGUsIHdoZXRoZXIgYSB0aHJlc2hvbGQgbXVzdCBiZSBtZXQgb3IgbXVzdCBiZSBleGNlZWRlZAordG8gY2F1c2UgYW4gYWxhcm0pIGlzIGNoaXAtZGVwZW5kZW50LgorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKioqKioqKioqKioqCisqIFZvbHRhZ2VzICoKKyoqKioqKioqKioqKgorCitpblswLThdX21pbglWb2x0YWdlIG1pbiB2YWx1ZS4KKwkJVW5pdDogbWlsbGl2b2x0CisJCVJlYWQvV3JpdGUKKwkJCitpblswLThdX21heAlWb2x0YWdlIG1heCB2YWx1ZS4KKwkJVW5pdDogbWlsbGl2b2x0CisJCVJlYWQvV3JpdGUKKwkJCitpblswLThdX2lucHV0CVZvbHRhZ2UgaW5wdXQgdmFsdWUuCisJCVVuaXQ6IG1pbGxpdm9sdAorCQlSZWFkIG9ubHkKKwkJQWN0dWFsIHZvbHRhZ2UgZGVwZW5kcyBvbiB0aGUgc2NhbGluZyByZXNpc3RvcnMgb24gdGhlCisJCW1vdGhlcmJvYXJkLCBhcyByZWNvbW1lbmRlZCBpbiB0aGUgY2hpcCBkYXRhc2hlZXQuCisJCVRoaXMgdmFyaWVzIGJ5IGNoaXAgYW5kIGJ5IG1vdGhlcmJvYXJkLgorCQlCZWNhdXNlIG9mIHRoaXMgdmFyaWF0aW9uLCB2YWx1ZXMgYXJlIGdlbmVyYWxseSBOT1Qgc2NhbGVkCisJCWJ5IHRoZSBjaGlwIGRyaXZlciwgYW5kIG11c3QgYmUgZG9uZSBieSB0aGUgYXBwbGljYXRpb24uCisJCUhvd2V2ZXIsIHNvbWUgZHJpdmVycyAobm90YWJseSBsbTg3IGFuZCB2aWE2ODZhKQorCQlkbyBzY2FsZSwgd2l0aCB2YXJpb3VzIGRlZ3JlZXMgb2Ygc3VjY2Vzcy4KKwkJVGhlc2UgZHJpdmVycyB3aWxsIG91dHB1dCB0aGUgYWN0dWFsIHZvbHRhZ2UuCisKKwkJVHlwaWNhbCB1c2FnZToKKwkJCWluMF8qCUNQVSAjMSB2b2x0YWdlIChub3Qgc2NhbGVkKQorCQkJaW4xXyoJQ1BVICMyIHZvbHRhZ2UgKG5vdCBzY2FsZWQpCisJCQlpbjJfKgkzLjNWIG5vbWluYWwgKG5vdCBzY2FsZWQpCisJCQlpbjNfKgk1LjBWIG5vbWluYWwgKHNjYWxlZCkKKwkJCWluNF8qCTEyLjBWIG5vbWluYWwgKHNjYWxlZCkKKwkJCWluNV8qCS0xMi4wViBub21pbmFsIChzY2FsZWQpCisJCQlpbjZfKgktNS4wViBub21pbmFsIChzY2FsZWQpCisJCQlpbjdfKgl2YXJpZXMKKwkJCWluOF8qCXZhcmllcworCitjcHVbMC0xXV92aWQJQ1BVIGNvcmUgcmVmZXJlbmNlIHZvbHRhZ2UuCisJCVVuaXQ6IG1pbGxpdm9sdAorCQlSZWFkIG9ubHkuCisJCU5vdCBhbHdheXMgY29ycmVjdC4KKwordnJtCQlWb2x0YWdlIFJlZ3VsYXRvciBNb2R1bGUgdmVyc2lvbiBudW1iZXIuIAorCQlSZWFkIG9ubHkuCisJCVR3byBkaWdpdCBudW1iZXIsIGZpcnN0IGlzIG1ham9yIHZlcnNpb24sIHNlY29uZCBpcworCQltaW5vciB2ZXJzaW9uLgorCQlBZmZlY3RzIHRoZSB3YXkgdGhlIGRyaXZlciBjYWxjdWxhdGVzIHRoZSBDUFUgY29yZSByZWZlcmVuY2UKKwkJdm9sdGFnZSBmcm9tIHRoZSB2aWQgcGlucy4KKworCisqKioqKioqKgorKiBGYW5zICoKKyoqKioqKioqCisKK2ZhblsxLTNdX21pbglGYW4gbWluaW11bSB2YWx1ZQorCQlVbml0OiByZXZvbHV0aW9uL21pbiAoUlBNKQorCQlSZWFkL1dyaXRlLgorCitmYW5bMS0zXV9pbnB1dAlGYW4gaW5wdXQgdmFsdWUuCisJCVVuaXQ6IHJldm9sdXRpb24vbWluIChSUE0pCisJCVJlYWQgb25seS4KKworZmFuWzEtM11fZGl2CUZhbiBkaXZpc29yLgorCQlJbnRlZ2VyIHZhbHVlIGluIHBvd2VycyBvZiB0d28gKDEsIDIsIDQsIDgsIDE2LCAzMiwgNjQsIDEyOCkuCisJCVNvbWUgY2hpcHMgb25seSBzdXBwb3J0IHZhbHVlcyAxLCAyLCA0IGFuZCA4LgorCQlOb3RlIHRoYXQgdGhpcyBpcyBhY3R1YWxseSBhbiBpbnRlcm5hbCBjbG9jayBkaXZpc29yLCB3aGljaAorCQlhZmZlY3RzIHRoZSBtZWFzdXJhYmxlIHNwZWVkIHJhbmdlLCBub3QgdGhlIHJlYWQgdmFsdWUuCisKKyoqKioqKioKKyogUFdNICoKKyoqKioqKioKKworcHdtWzEtM10JUHVsc2Ugd2lkdGggbW9kdWxhdGlvbiBmYW4gY29udHJvbC4KKwkJSW50ZWdlciB2YWx1ZSBpbiB0aGUgcmFuZ2UgMCB0byAyNTUKKwkJUmVhZC9Xcml0ZQorCQkyNTUgaXMgbWF4IG9yIDEwMCUuCisKK3B3bVsxLTNdX2VuYWJsZQorCQlTd2l0Y2ggUFdNIG9uIGFuZCBvZmYuCisJCU5vdCBhbHdheXMgcHJlc2VudCBldmVuIGlmIGZhbipfcHdtIGlzLgorCQkwIHRvIHR1cm4gb2ZmCisJCTEgdG8gdHVybiBvbiBpbiBtYW51YWwgbW9kZQorCQkyIHRvIHR1cm4gb24gaW4gYXV0b21hdGljIG1vZGUKKwkJUmVhZC9Xcml0ZQorCitwd21bMS0qXV9hdXRvX2NoYW5uZWxzX3RlbXAKKwkJU2VsZWN0IHdoaWNoIHRlbXBlcmF0dXJlIGNoYW5uZWxzIGFmZmVjdCB0aGlzIFBXTSBvdXRwdXQgaW4KKwkJYXV0byBtb2RlLiBCaXRmaWVsZCwgMSBpcyB0ZW1wMSwgMiBpcyB0ZW1wMiwgNCBpcyB0ZW1wMyBldGMuLi4KKwkJV2hpY2ggdmFsdWVzIGFyZSBwb3NzaWJsZSBkZXBlbmQgb24gdGhlIGNoaXAgdXNlZC4KKworcHdtWzEtKl1fYXV0b19wb2ludFsxLSpdX3B3bQorcHdtWzEtKl1fYXV0b19wb2ludFsxLSpdX3RlbXAKK3B3bVsxLSpdX2F1dG9fcG9pbnRbMS0qXV90ZW1wX2h5c3QKKwkJRGVmaW5lIHRoZSBQV00gdnMgdGVtcGVyYXR1cmUgY3VydmUuIE51bWJlciBvZiB0cmlwIHBvaW50cyBpcworCQljaGlwLWRlcGVuZGVudC4gVXNlIHRoaXMgZm9yIGNoaXBzIHdoaWNoIGFzc29jaWF0ZSB0cmlwIHBvaW50cworCQl0byBQV00gb3V0cHV0IGNoYW5uZWxzLgorCitPUgorCit0ZW1wWzEtKl1fYXV0b19wb2ludFsxLSpdX3B3bQordGVtcFsxLSpdX2F1dG9fcG9pbnRbMS0qXV90ZW1wCit0ZW1wWzEtKl1fYXV0b19wb2ludFsxLSpdX3RlbXBfaHlzdAorCQlEZWZpbmUgdGhlIFBXTSB2cyB0ZW1wZXJhdHVyZSBjdXJ2ZS4gTnVtYmVyIG9mIHRyaXAgcG9pbnRzIGlzCisJCWNoaXAtZGVwZW5kZW50LiBVc2UgdGhpcyBmb3IgY2hpcHMgd2hpY2ggYXNzb2NpYXRlIHRyaXAgcG9pbnRzCisJCXRvIHRlbXBlcmF0dXJlIGNoYW5uZWxzLgorCisKKyoqKioqKioqKioqKioqKioKKyogVGVtcGVyYXR1cmVzICoKKyoqKioqKioqKioqKioqKioKKwordGVtcFsxLTNdX3R5cGUJU2Vuc29yIHR5cGUgc2VsZWN0aW9uLgorCQlJbnRlZ2VycyAxLCAyLCAzIG9yIHRoZXJtaXN0b3IgQmV0YSB2YWx1ZSAoMzQzNSkKKwkJUmVhZC9Xcml0ZS4KKwkJMTogUElJL0NlbGVyb24gRGlvZGUKKwkJMjogMzkwNCB0cmFuc2lzdG9yCisJCTM6IHRoZXJtYWwgZGlvZGUKKwkJTm90IGFsbCB0eXBlcyBhcmUgc3VwcG9ydGVkIGJ5IGFsbCBjaGlwcworCit0ZW1wWzEtNF1fbWF4CVRlbXBlcmF0dXJlIG1heCB2YWx1ZS4KKwkJVW5pdDogbWlsbGlkZWdyZWUgQ2VsY2l1cworCQlSZWFkL1dyaXRlIHZhbHVlLgorCit0ZW1wWzEtM11fbWluCVRlbXBlcmF0dXJlIG1pbiB2YWx1ZS4KKwkJVW5pdDogbWlsbGlkZWdyZWUgQ2VsY2l1cworCQlSZWFkL1dyaXRlIHZhbHVlLgorCit0ZW1wWzEtM11fbWF4X2h5c3QKKwkJVGVtcGVyYXR1cmUgaHlzdGVyZXNpcyB2YWx1ZSBmb3IgbWF4IGxpbWl0LgorCQlVbml0OiBtaWxsaWRlZ3JlZSBDZWxjaXVzCisJCU11c3QgYmUgcmVwb3J0ZWQgYXMgYW4gYWJzb2x1dGUgdGVtcGVyYXR1cmUsIE5PVCBhIGRlbHRhCisJCWZyb20gdGhlIG1heCB2YWx1ZS4KKwkJUmVhZC9Xcml0ZSB2YWx1ZS4KKwordGVtcFsxLTRdX2lucHV0IFRlbXBlcmF0dXJlIGlucHV0IHZhbHVlLgorCQlVbml0OiBtaWxsaWRlZ3JlZSBDZWxjaXVzCisJCVJlYWQgb25seSB2YWx1ZS4KKwordGVtcFsxLTRdX2NyaXQJVGVtcGVyYXR1cmUgY3JpdGljYWwgdmFsdWUsIHR5cGljYWxseSBncmVhdGVyIHRoYW4KKwkJY29ycmVzcG9uZGluZyB0ZW1wX21heCB2YWx1ZXMuCisJCVVuaXQ6IG1pbGxpZGVncmVlIENlbGNpdXMKKwkJUmVhZC9Xcml0ZSB2YWx1ZS4KKwordGVtcFsxLTJdX2NyaXRfaHlzdAorCQlUZW1wZXJhdHVyZSBoeXN0ZXJlc2lzIHZhbHVlIGZvciBjcml0aWNhbCBsaW1pdC4KKwkJVW5pdDogbWlsbGlkZWdyZWUgQ2VsY2l1cworCQlNdXN0IGJlIHJlcG9ydGVkIGFzIGFuIGFic29sdXRlIHRlbXBlcmF0dXJlLCBOT1QgYSBkZWx0YQorCQlmcm9tIHRoZSBjcml0aWNhbCB2YWx1ZS4KKwkJUmVhZC9Xcml0ZSB2YWx1ZS4KKworCQlJZiB0aGVyZSBhcmUgbXVsdGlwbGUgdGVtcGVyYXR1cmUgc2Vuc29ycywgdGVtcDFfKiBpcworCQlnZW5lcmFsbHkgdGhlIHNlbnNvciBpbnNpZGUgdGhlIGNoaXAgaXRzZWxmLAorCQlyZXBvcnRlZCBhcyAibW90aGVyYm9hcmQgdGVtcGVyYXR1cmUiLiAgdGVtcDJfKiB0bworCQl0ZW1wNF8qIGFyZSBnZW5lcmFsbHkgc2Vuc29ycyBleHRlcm5hbCB0byB0aGUgY2hpcAorCQlpdHNlbGYsIGZvciBleGFtcGxlIHRoZSB0aGVybWFsIGRpb2RlIGluc2lkZSB0aGUgQ1BVIG9yCisJCWEgdGhlcm1pc3RvciBuZWFyYnkuCisKKworKioqKioqKioqKioqCisqIEN1cnJlbnRzICoKKyoqKioqKioqKioqKgorCitOb3RlIHRoYXQgbm8ga25vd24gY2hpcCBwcm92aWRlcyBjdXJyZW50IG1lYXN1cmVtZW50cyBhcyBvZiB3cml0aW5nLAorc28gdGhpcyBwYXJ0IGlzIHRoZW9yZXRpY2FsLCBzbyB0byBzYXkuCisKK2N1cnJbMS1uXV9tYXgJQ3VycmVudCBtYXggdmFsdWUKKwkJVW5pdDogbWlsbGlhbXBlcmUKKwkJUmVhZC9Xcml0ZS4KKworY3VyclsxLW5dX21pbglDdXJyZW50IG1pbiB2YWx1ZS4KKwkJVW5pdDogbWlsbGlhbXBlcmUKKwkJUmVhZC9Xcml0ZS4KKworY3VyclsxLW5dX2lucHV0CUN1cnJlbnQgaW5wdXQgdmFsdWUKKwkJVW5pdDogbWlsbGlhbXBlcmUKKwkJUmVhZCBvbmx5LgorCisKKyoqKioqKioqKgorKiBPdGhlciAqCisqKioqKioqKioKKworYWxhcm1zCQlBbGFybSBiaXRtYXNrLgorCQlSZWFkIG9ubHkuCisJCUludGVnZXIgcmVwcmVzZW50YXRpb24gb2Ygb25lIHRvIGZvdXIgYnl0ZXMuCisJCUEgJzEnIGJpdCBtZWFucyBhbiBhbGFybS4KKwkJQ2hpcHMgc2hvdWxkIGJlIHByb2dyYW1tZWQgZm9yICdjb21wYXJhdG9yJyBtb2RlIHNvIHRoYXQKKwkJdGhlIGFsYXJtIHdpbGwgJ2NvbWUgYmFjaycgYWZ0ZXIgeW91IHJlYWQgdGhlIHJlZ2lzdGVyCisJCWlmIGl0IGlzIHN0aWxsIHZhbGlkLgorCQlHZW5lcmFsbHkgYSBkaXJlY3QgcmVwcmVzZW50YXRpb24gb2YgYSBjaGlwJ3MgaW50ZXJuYWwKKwkJYWxhcm0gcmVnaXN0ZXJzOyB0aGVyZSBpcyBubyBzdGFuZGFyZCBmb3IgdGhlIHBvc2l0aW9uCisJCW9mIGluZGl2aWR1YWwgYml0cy4KKwkJQml0cyBhcmUgZGVmaW5lZCBpbiBrZXJuZWwvaW5jbHVkZS9zZW5zb3JzLmguCisKK2JlZXBfZW5hYmxlCUJlZXAvaW50ZXJydXB0IGVuYWJsZQorCQkwIHRvIGRpc2FibGUuCisJCTEgdG8gZW5hYmxlLgorCQlSZWFkL1dyaXRlCisKK2JlZXBfbWFzawlCaXRtYXNrIGZvciBiZWVwLgorCQlTYW1lIGZvcm1hdCBhcyAnYWxhcm1zJyB3aXRoIHRoZSBzYW1lIGJpdCBsb2NhdGlvbnMuCisJCVJlYWQvV3JpdGUKKworZWVwcm9tCQlSYXcgRUVQUk9NIGRhdGEgaW4gYmluYXJ5IGZvcm0uCisJCVJlYWQgb25seS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL3Rlbi1iaXQtYWRkcmVzc2VzIGIvRG9jdW1lbnRhdGlvbi9pMmMvdGVuLWJpdC1hZGRyZXNzZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAwMDc0ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaTJjL3Rlbi1iaXQtYWRkcmVzc2VzCkBAIC0wLDAgKzEsMjIgQEAKK1RoZSBJMkMgcHJvdG9jb2wga25vd3MgYWJvdXQgdHdvIGtpbmRzIG9mIGRldmljZSBhZGRyZXNzZXM6IG5vcm1hbCA3IGJpdCAKK2FkZHJlc3NlcywgYW5kIGFuIGV4dGVuZGVkIHNldCBvZiAxMCBiaXQgYWRkcmVzc2VzLiBUaGUgc2V0cyBvZiBhZGRyZXNzZXMKK2RvIG5vdCBpbnRlcnNlY3Q6IHRoZSA3IGJpdCBhZGRyZXNzIDB4MTAgaXMgbm90IHRoZSBzYW1lIGFzIHRoZSAxMCBiaXQKK2FkZHJlc3MgMHgxMCAodGhvdWdoIGEgc2luZ2xlIGRldmljZSBjb3VsZCByZXNwb25kIHRvIGJvdGggb2YgdGhlbSkuIFlvdQorc2VsZWN0IGEgMTAgYml0IGFkZHJlc3MgYnkgYWRkaW5nIGFuIGV4dHJhIGJ5dGUgYWZ0ZXIgdGhlIGFkZHJlc3MKK2J5dGU6CisgIFMgQWRkcjcgUmQvV3IgLi4uLiAgCitiZWNvbWVzCisgIFMgMTExMTAgQWRkcjEwIFJkL1dyCitTIGlzIHRoZSBzdGFydCBiaXQsIFJkL1dyIHRoZSByZWFkL3dyaXRlIGJpdCwgYW5kIGlmIHlvdSBjb3VudCB0aGUgbnVtYmVyCitvZiBiaXRzLCB5b3Ugd2lsbCBzZWUgdGhlIHRoZXJlIGFyZSA4IGFmdGVyIHRoZSBTIGJpdCBmb3IgNyBiaXQgYWRkcmVzc2VzLAorYW5kIDE2IGFmdGVyIHRoZSBTIGJpdCBmb3IgMTAgYml0IGFkZHJlc3Nlcy4KKworV0FSTklORyEgVGhlIGN1cnJlbnQgMTAgYml0IGFkZHJlc3Mgc3VwcG9ydCBpcyBFWFBFUklNRU5UQUwuIFRoZXJlIGFyZSAKK3NldmVyYWwgcGxhY2VzIGluIHRoZSBjb2RlIHRoYXQgd2lsbCBjYXVzZSBTRVZFUkUgUFJPQkxFTVMgd2l0aCAxMCBiaXQKK2FkZHJlc3NlcywgZXZlbiB0aG91Z2ggdGhlcmUgaXMgc29tZSBiYXNpYyBoYW5kbGluZyBhbmQgaG9va3MuIEFsc28sCithbG1vc3Qgbm8gc3VwcG9ydGVkIGFkYXB0ZXIgaGFuZGxlcyB0aGUgMTAgYml0IGFkZHJlc3NlcyBjb3JyZWN0bHkuCisKK0FzIHNvb24gYXMgYSByZWFsIDEwIGJpdCBhZGRyZXNzIGRldmljZSBpcyBzcG90dGVkICdpbiB0aGUgd2lsZCcsIHdlCitjYW4gYW5kIHdpbGwgYWRkIHByb3BlciBzdXBwb3J0LiBSaWdodCBub3csIDEwIGJpdCBhZGRyZXNzIGRldmljZXMKK2FyZSBkZWZpbmVkIGJ5IHRoZSBJMkMgcHJvdG9jb2wsIGJ1dCB3ZSBoYXZlIG5ldmVyIHNlZW4gYSBzaW5nbGUgZGV2aWNlCit3aGljaCBzdXBwb3J0cyB0aGVtLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvd3JpdGluZy1jbGllbnRzIGIvRG9jdW1lbnRhdGlvbi9pMmMvd3JpdGluZy1jbGllbnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMjc1MTEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy93cml0aW5nLWNsaWVudHMKQEAgLTAsMCArMSw4MTYgQEAKK1RoaXMgaXMgYSBzbWFsbCBndWlkZSBmb3IgdGhvc2Ugd2hvIHdhbnQgdG8gd3JpdGUga2VybmVsIGRyaXZlcnMgZm9yIEkyQworb3IgU01CdXMgZGV2aWNlcy4KKworVG8gc2V0IHVwIGEgZHJpdmVyLCB5b3UgbmVlZCB0byBkbyBzZXZlcmFsIHRoaW5ncy4gU29tZSBhcmUgb3B0aW9uYWwsIGFuZAorc29tZSB0aGluZ3MgY2FuIGJlIGRvbmUgc2xpZ2h0bHkgb3IgY29tcGxldGVseSBkaWZmZXJlbnQuIFVzZSB0aGlzIGFzIGEKK2d1aWRlLCBub3QgYXMgYSBydWxlIGJvb2shCisKKworR2VuZXJhbCByZW1hcmtzCis9PT09PT09PT09PT09PT0KKworVHJ5IHRvIGtlZXAgdGhlIGtlcm5lbCBuYW1lc3BhY2UgYXMgY2xlYW4gYXMgcG9zc2libGUuIFRoZSBiZXN0IHdheSB0bworZG8gdGhpcyBpcyB0byB1c2UgYSB1bmlxdWUgcHJlZml4IGZvciBhbGwgZ2xvYmFsIHN5bWJvbHMuIFRoaXMgaXMgCitlc3BlY2lhbGx5IGltcG9ydGFudCBmb3IgZXhwb3J0ZWQgc3ltYm9scywgYnV0IGl0IGlzIGEgZ29vZCBpZGVhIHRvIGRvCitpdCBmb3Igbm9uLWV4cG9ydGVkIHN5bWJvbHMgdG9vLiBXZSB3aWxsIHVzZSB0aGUgcHJlZml4IGBmb29fJyBpbiB0aGlzCit0dXRvcmlhbCwgYW5kIGBGT09fJyBmb3IgcHJlcHJvY2Vzc29yIHZhcmlhYmxlcy4KKworCitUaGUgZHJpdmVyIHN0cnVjdHVyZQorPT09PT09PT09PT09PT09PT09PT0KKworVXN1YWxseSwgeW91IHdpbGwgaW1wbGVtZW50IGEgc2luZ2xlIGRyaXZlciBzdHJ1Y3R1cmUsIGFuZCBpbnN0YW50aWF0ZQorYWxsIGNsaWVudHMgZnJvbSBpdC4gUmVtZW1iZXIsIGEgZHJpdmVyIHN0cnVjdHVyZSBjb250YWlucyBnZW5lcmFsIGFjY2VzcyAKK3JvdXRpbmVzLCBhIGNsaWVudCBzdHJ1Y3R1cmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gbGlrZSB0aGUgYWN0dWFsIEkyQworYWRkcmVzcy4KKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGZvb19kcml2ZXIgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5uYW1lCQk9ICJGb28gdmVyc2lvbiAyLjMgZHJpdmVyIiwKKwkuaWQJCT0gSTJDX0RSSVZFUklEX0ZPTywgLyogZnJvbSBpMmMtaWQuaCwgb3B0aW9uYWwgKi8KKwkuZmxhZ3MJCT0gSTJDX0RGX05PVElGWSwKKwkuYXR0YWNoX2FkYXB0ZXIJPSAmZm9vX2F0dGFjaF9hZGFwdGVyLAorCS5kZXRhY2hfY2xpZW50CT0gJmZvb19kZXRhY2hfY2xpZW50LAorCS5jb21tYW5kCT0gJmZvb19jb21tYW5kIC8qIG1heSBiZSBOVUxMICovCit9CisgCitUaGUgbmFtZSBjYW4gYmUgY2hvc2VuIGZyZWVseSwgYW5kIG1heSBiZSB1cHRvIDQwIGNoYXJhY3RlcnMgbG9uZy4gUGxlYXNlCit1c2Ugc29tZXRoaW5nIGRlc2NyaXB0aXZlIGhlcmUuCisKK0lmIHVzZWQsIHRoZSBpZCBzaG91bGQgYmUgYSB1bmlxdWUgSUQuIFRoZSByYW5nZSAweGYwMDAgdG8gMHhmZmZmIGlzCityZXNlcnZlZCBmb3IgbG9jYWwgdXNlLCBhbmQgeW91IGNhbiB1c2Ugb25lIG9mIHRob3NlIHVudGlsIHlvdSBzdGFydAorZGlzdHJpYnV0aW5nIHRoZSBkcml2ZXIsIGF0IHdoaWNoIHRpbWUgeW91IHNob3VsZCBjb250YWN0IHRoZSBpMmMgYXV0aG9ycwordG8gZ2V0IHlvdXIgb3duIElEKHMpLiBOb3RlIHRoYXQgbW9zdCBvZiB0aGUgdGltZSB5b3UgZG9uJ3QgbmVlZCBhbiBJRAorYXQgYWxsIHNvIHlvdSBjYW4ganVzdCBvbWl0IGl0LgorCitEb24ndCB3b3JyeSBhYm91dCB0aGUgZmxhZ3MgZmllbGQ7IGp1c3QgcHV0IEkyQ19ERl9OT1RJRlkgaW50byBpdC4gVGhpcworbWVhbnMgdGhhdCB5b3VyIGRyaXZlciB3aWxsIGJlIG5vdGlmaWVkIHdoZW4gbmV3IGFkYXB0ZXJzIGFyZSBmb3VuZC4KK1RoaXMgaXMgYWxtb3N0IGFsd2F5cyB3aGF0IHlvdSB3YW50LgorCitBbGwgb3RoZXIgZmllbGRzIGFyZSBmb3IgY2FsbC1iYWNrIGZ1bmN0aW9ucyB3aGljaCB3aWxsIGJlIGV4cGxhaW5lZCAKK2JlbG93LgorCitUaGVyZSB1c2UgdG8gYmUgdHdvIGFkZGl0aW9uYWwgZmllbGRzIGluIHRoaXMgc3RydWN0dXJlLCBpbmNfdXNlIGV0IGRlY191c2UsCitmb3IgbW9kdWxlIHVzYWdlIGNvdW50LCBidXQgdGhlc2UgZmllbGRzIHdlcmUgb2Jzb2xldGVkIGFuZCByZW1vdmVkLgorCisKK0V4dHJhIGNsaWVudCBkYXRhCis9PT09PT09PT09PT09PT09PQorCitUaGUgY2xpZW50IHN0cnVjdHVyZSBoYXMgYSBzcGVjaWFsIGBkYXRhJyBmaWVsZCB0aGF0IGNhbiBwb2ludCB0byBhbnkKK3N0cnVjdHVyZSBhdCBhbGwuIFlvdSBjYW4gdXNlIHRoaXMgdG8ga2VlcCBjbGllbnQtc3BlY2lmaWMgZGF0YS4gWW91CitkbyBub3QgYWx3YXlzIG5lZWQgdGhpcywgYnV0IGVzcGVjaWFsbHkgZm9yIGBzZW5zb3JzJyBkcml2ZXJzLCBpdCBjYW4KK2JlIHZlcnkgdXNlZnVsLgorCitBbiBleGFtcGxlIHN0cnVjdHVyZSBpcyBiZWxvdy4KKworICBzdHJ1Y3QgZm9vX2RhdGEgeworICAgIHN0cnVjdCBzZW1hcGhvcmUgbG9jazsgLyogRm9yIElTQSBhY2Nlc3MgaW4gYHNlbnNvcnMnIGRyaXZlcnMuICovCisgICAgaW50IHN5c2N0bF9pZDsgICAgICAgICAvKiBUbyBrZWVwIHRoZSAvcHJvYyBkaXJlY3RvcnkgZW50cnkgZm9yIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHNlbnNvcnMnIGRyaXZlcnMuICovCisgICAgZW51bSBjaGlwcyB0eXBlOyAgICAgICAvKiBUbyBrZWVwIHRoZSBjaGlwcyB0eXBlIGZvciBgc2Vuc29ycycgZHJpdmVycy4gKi8KKyAgIAorICAgIC8qIEJlY2F1c2UgdGhlIGkyYyBidXMgaXMgc2xvdywgaXQgaXMgb2Z0ZW4gdXNlZnVsIHRvIGNhY2hlIHRoZSByZWFkCisgICAgICAgaW5mb3JtYXRpb24gb2YgYSBjaGlwIGZvciBzb21lIHRpbWUgKGZvciBleGFtcGxlLCAxIG9yIDIgc2Vjb25kcykuCisgICAgICAgSXQgZGVwZW5kcyBvZiBjb3Vyc2Ugb24gdGhlIGRldmljZSB3aGV0aGVyIHRoaXMgaXMgcmVhbGx5IHdvcnRod2hpbGUKKyAgICAgICBvciBldmVuIHNlbnNpYmxlLiAqLworICAgIHN0cnVjdCBzZW1hcGhvcmUgdXBkYXRlX2xvY2s7IC8qIFdoZW4gd2UgYXJlIHJlYWRpbmcgbG90cyBvZiBpbmZvcm1hdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm90aGVyIHByb2Nlc3Mgc2hvdWxkIG5vdCB1cGRhdGUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVsb3cgaW5mb3JtYXRpb24gKi8KKyAgICBjaGFyIHZhbGlkOyAgICAgICAgICAgICAgICAgICAvKiAhPSAwIGlmIHRoZSBmb2xsb3dpbmcgZmllbGRzIGFyZSB2YWxpZC4gKi8KKyAgICB1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlZDsgICAvKiBJbiBqaWZmaWVzICovCisgICAgLyogQWRkIHRoZSByZWFkIGluZm9ybWF0aW9uIGhlcmUgdG9vICovCisgIH07CisKKworQWNjZXNzaW5nIHRoZSBjbGllbnQKKz09PT09PT09PT09PT09PT09PT09CisKK0xldCdzIHNheSB3ZSBoYXZlIGEgdmFsaWQgY2xpZW50IHN0cnVjdHVyZS4gQXQgc29tZSB0aW1lLCB3ZSB3aWxsIG5lZWQKK3RvIGdhdGhlciBpbmZvcm1hdGlvbiBmcm9tIHRoZSBjbGllbnQsIG9yIHdyaXRlIG5ldyBpbmZvcm1hdGlvbiB0byB0aGUKK2NsaWVudC4gSG93IHdlIHdpbGwgZXhwb3J0IHRoaXMgaW5mb3JtYXRpb24gdG8gdXNlci1zcGFjZSBpcyBsZXNzIAoraW1wb3J0YW50IGF0IHRoaXMgbW9tZW50IChwZXJoYXBzIHdlIGRvIG5vdCBuZWVkIHRvIGRvIHRoaXMgYXQgYWxsIGZvcgorc29tZSBvYnNjdXJlIGNsaWVudHMpLiBCdXQgd2UgbmVlZCBnZW5lcmljIHJlYWRpbmcgYW5kIHdyaXRpbmcgcm91dGluZXMuCisKK0kgaGF2ZSBmb3VuZCBpdCB1c2VmdWwgdG8gZGVmaW5lIGZvb19yZWFkIGFuZCBmb29fd3JpdGUgZnVuY3Rpb24gZm9yIHRoaXMuCitGb3Igc29tZSBjYXNlcywgaXQgd2lsbCBiZSBlYXNpZXIgdG8gY2FsbCB0aGUgaTJjIGZ1bmN0aW9ucyBkaXJlY3RseSwKK2J1dCBtYW55IGNoaXBzIGhhdmUgc29tZSBraW5kIG9mIHJlZ2lzdGVyLXZhbHVlIGlkZWEgdGhhdCBjYW4gZWFzaWx5CitiZSBlbmNhcHN1bGF0ZWQuIEFsc28sIHNvbWUgY2hpcHMgaGF2ZSBib3RoIElTQSBhbmQgSTJDIGludGVyZmFjZXMsIGFuZAoraXQgdXNlZnVsIHRvIGFic3RyYWN0IGZyb20gdGhpcyAob25seSBmb3IgYHNlbnNvcnMnIGRyaXZlcnMpLgorCitUaGUgYmVsb3cgZnVuY3Rpb25zIGFyZSBzaW1wbGUgZXhhbXBsZXMsIGFuZCBzaG91bGQgbm90IGJlIGNvcGllZAorbGl0ZXJhbGx5LgorCisgIGludCBmb29fcmVhZF92YWx1ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpCisgIHsKKyAgICBpZiAocmVnIDwgMHgxMCkgLyogYnl0ZS1zaXplZCByZWdpc3RlciAqLworICAgICAgcmV0dXJuIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQscmVnKTsKKyAgICBlbHNlIC8qIHdvcmQtc2l6ZWQgcmVnaXN0ZXIgKi8KKyAgICAgIHJldHVybiBpMmNfc21idXNfcmVhZF93b3JkX2RhdGEoY2xpZW50LHJlZyk7CisgIH0KKworICBpbnQgZm9vX3dyaXRlX3ZhbHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTE2IHZhbHVlKQorICB7CisgICAgaWYgKHJlZyA9PSAweDEwKSAvKiBJbXBvc3NpYmxlIHRvIHdyaXRlIC0gZHJpdmVyIGVycm9yISAqLyB7CisgICAgICByZXR1cm4gLTE7CisgICAgZWxzZSBpZiAocmVnIDwgMHgxMCkgLyogYnl0ZS1zaXplZCByZWdpc3RlciAqLworICAgICAgcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LHJlZyx2YWx1ZSk7CisgICAgZWxzZSAvKiB3b3JkLXNpemVkIHJlZ2lzdGVyICovCisgICAgICByZXR1cm4gaTJjX3NtYnVzX3dyaXRlX3dvcmRfZGF0YShjbGllbnQscmVnLHZhbHVlKTsKKyAgfQorCitGb3Igc2Vuc29ycyBjb2RlLCB5b3UgbWF5IGhhdmUgdG8gY29wZSB3aXRoIElTQSByZWdpc3RlcnMgdG9vLiBTb21ldGhpbmcKK2xpa2UgdGhlIGJlbG93IG9mdGVuIHdvcmtzLiBOb3RlIHRoZSBsb2NraW5nISAKKworICBpbnQgZm9vX3JlYWRfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnKQorICB7CisgICAgaW50IHJlczsKKyAgICBpZiAoaTJjX2lzX2lzYV9jbGllbnQoY2xpZW50KSkgeworICAgICAgZG93bigmKCgoc3RydWN0IGZvb19kYXRhICopIChjbGllbnQtPmRhdGEpKSAtPiBsb2NrKSk7CisgICAgICBvdXRiX3AocmVnLGNsaWVudC0+YWRkciArIEZPT19BRERSX1JFR19PRkZTRVQpOworICAgICAgcmVzID0gaW5iX3AoY2xpZW50LT5hZGRyICsgRk9PX0RBVEFfUkVHX09GRlNFVCk7CisgICAgICB1cCgmKCgoc3RydWN0IGZvb19kYXRhICopIChjbGllbnQtPmRhdGEpKSAtPiBsb2NrKSk7CisgICAgICByZXR1cm4gcmVzOworICAgIH0gZWxzZQorICAgICAgcmV0dXJuIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQscmVnKTsKKyAgfQorCitXcml0aW5nIGlzIGRvbmUgdGhlIHNhbWUgd2F5LgorCisKK1Byb2JpbmcgYW5kIGF0dGFjaGluZworPT09PT09PT09PT09PT09PT09PT09CisKK01vc3QgaTJjIGRldmljZXMgY2FuIGJlIHByZXNlbnQgb24gc2V2ZXJhbCBpMmMgYWRkcmVzc2VzOyBmb3Igc29tZSB0aGlzCitpcyBkZXRlcm1pbmVkIGluIGhhcmR3YXJlIChieSBzb2xkZXJpbmcgc29tZSBjaGlwIHBpbnMgdG8gVmNjIG9yIEdyb3VuZCksCitmb3Igb3RoZXJzIHRoaXMgY2FuIGJlIGNoYW5nZWQgaW4gc29mdHdhcmUgKGJ5IHdyaXRpbmcgdG8gc3BlY2lmaWMgY2xpZW50CityZWdpc3RlcnMpLiBTb21lIGRldmljZXMgYXJlIHVzdWFsbHkgb24gYSBzcGVjaWZpYyBhZGRyZXNzLCBidXQgbm90IGFsd2F5czsKK2FuZCBzb21lIGFyZSBldmVuIG1vcmUgdHJpY2t5LiBTbyB5b3Ugd2lsbCBwcm9iYWJseSBuZWVkIHRvIHNjYW4gc2V2ZXJhbAoraTJjIGFkZHJlc3NlcyBmb3IgeW91ciBjbGllbnRzLCBhbmQgZG8gc29tZSBzb3J0IG9mIGRldGVjdGlvbiB0byBzZWUKK3doZXRoZXIgaXQgaXMgYWN0dWFsbHkgYSBkZXZpY2Ugc3VwcG9ydGVkIGJ5IHlvdXIgZHJpdmVyLgorCitUbyBnaXZlIHRoZSB1c2VyIGEgbWF4aW11bSBvZiBwb3NzaWJpbGl0aWVzLCBzb21lIGRlZmF1bHQgbW9kdWxlIHBhcmFtZXRlcnMKK2FyZSBkZWZpbmVkIHRvIGhlbHAgZGV0ZXJtaW5lIHdoYXQgYWRkcmVzc2VzIGFyZSBzY2FubmVkLiBTZXZlcmFsIG1hY3JvcworYXJlIGRlZmluZWQgaW4gaTJjLmggdG8gaGVscCB5b3Ugc3VwcG9ydCB0aGVtLCBhcyB3ZWxsIGFzIGEgZ2VuZXJpYworZGV0ZWN0aW9uIGFsZ29yaXRobS4KKworWW91IGRvIG5vdCBoYXZlIHRvIHVzZSB0aGlzIHBhcmFtZXRlciBpbnRlcmZhY2U7IGJ1dCBkb24ndCB0cnkgdG8gdXNlCitmdW5jdGlvbiBpMmNfcHJvYmUoKSAob3IgaTJjX2RldGVjdCgpKSBpZiB5b3UgZG9uJ3QuCisKK05PVEU6IElmIHlvdSB3YW50IHRvIHdyaXRlIGEgYHNlbnNvcnMnIGRyaXZlciwgdGhlIGludGVyZmFjZSBpcyBzbGlnaHRseQorICAgICAgZGlmZmVyZW50ISBTZWUgYmVsb3cuCisKKworCitQcm9iaW5nIGNsYXNzZXMgKGkyYykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbGwgcGFyYW1ldGVycyBhcmUgZ2l2ZW4gYXMgbGlzdHMgb2YgdW5zaWduZWQgMTYtYml0IGludGVnZXJzLiBMaXN0cyBhcmUKK3Rlcm1pbmF0ZWQgYnkgSTJDX0NMSUVOVF9FTkQuCitUaGUgZm9sbG93aW5nIGxpc3RzIGFyZSB1c2VkIGludGVybmFsbHk6CisKKyAgbm9ybWFsX2kyYzogZmlsbGVkIGluIGJ5IHRoZSBtb2R1bGUgd3JpdGVyLiAKKyAgICAgQSBsaXN0IG9mIEkyQyBhZGRyZXNzZXMgd2hpY2ggc2hvdWxkIG5vcm1hbGx5IGJlIGV4YW1pbmVkLgorICAgbm9ybWFsX2kyY19yYW5nZTogZmlsbGVkIGluIGJ5IHRoZSBtb2R1bGUgd3JpdGVyLgorICAgICBBIGxpc3Qgb2YgcGFpcnMgb2YgSTJDIGFkZHJlc3NlcywgZWFjaCBwYWlyIGJlaW5nIGFuIGluY2x1c2l2ZSByYW5nZSBvZgorICAgICBhZGRyZXNzZXMgd2hpY2ggc2hvdWxkIG5vcm1hbGx5IGJlIGV4YW1pbmVkLgorICAgcHJvYmU6IGluc21vZCBwYXJhbWV0ZXIuIAorICAgICBBIGxpc3Qgb2YgcGFpcnMuIFRoZSBmaXJzdCB2YWx1ZSBpcyBhIGJ1cyBudW1iZXIgKC0xIGZvciBhbnkgSTJDIGJ1cyksIAorICAgICB0aGUgc2Vjb25kIGlzIHRoZSBhZGRyZXNzLiBUaGVzZSBhZGRyZXNzZXMgYXJlIGFsc28gcHJvYmVkLCBhcyBpZiB0aGV5IAorICAgICB3ZXJlIGluIHRoZSAnbm9ybWFsJyBsaXN0LgorICAgcHJvYmVfcmFuZ2U6IGluc21vZCBwYXJhbWV0ZXIuIAorICAgICBBIGxpc3Qgb2YgdHJpcGxlcy4gVGhlIGZpcnN0IHZhbHVlIGlzIGEgYnVzIG51bWJlciAoLTEgZm9yIGFueSBJMkMgYnVzKSwgCisgICAgIHRoZSBzZWNvbmQgYW5kIHRoaXJkIGFyZSBhZGRyZXNzZXMuICBUaGVzZSBmb3JtIGFuIGluY2x1c2l2ZSByYW5nZSBvZiAKKyAgICAgYWRkcmVzc2VzIHRoYXQgYXJlIGFsc28gcHJvYmVkLCBhcyBpZiB0aGV5IHdlcmUgaW4gdGhlICdub3JtYWwnIGxpc3QuCisgICBpZ25vcmU6IGluc21vZCBwYXJhbWV0ZXIuCisgICAgIEEgbGlzdCBvZiBwYWlycy4gVGhlIGZpcnN0IHZhbHVlIGlzIGEgYnVzIG51bWJlciAoLTEgZm9yIGFueSBJMkMgYnVzKSwgCisgICAgIHRoZSBzZWNvbmQgaXMgdGhlIEkyQyBhZGRyZXNzLiBUaGVzZSBhZGRyZXNzZXMgYXJlIG5ldmVyIHByb2JlZC4gCisgICAgIFRoaXMgcGFyYW1ldGVyIG92ZXJydWxlcyAnbm9ybWFsJyBhbmQgJ3Byb2JlJywgYnV0IG5vdCB0aGUgJ2ZvcmNlJyBsaXN0cy4KKyAgIGlnbm9yZV9yYW5nZTogaW5zbW9kIHBhcmFtZXRlci4gCisgICAgIEEgbGlzdCBvZiB0cmlwbGVzLiBUaGUgZmlyc3QgdmFsdWUgaXMgYSBidXMgbnVtYmVyICgtMSBmb3IgYW55IEkyQyBidXMpLCAKKyAgICAgdGhlIHNlY29uZCBhbmQgdGhpcmQgYXJlIGFkZHJlc3Nlcy4gVGhlc2UgZm9ybSBhbiBpbmNsdXNpdmUgcmFuZ2Ugb2YgCisgICAgIEkyQyBhZGRyZXNzZXMgdGhhdCBhcmUgbmV2ZXIgcHJvYmVkLgorICAgICBUaGlzIHBhcmFtZXRlciBvdmVycnVsZXMgJ25vcm1hbCcgYW5kICdwcm9iZScsIGJ1dCBub3QgdGhlICdmb3JjZScgbGlzdHMuCisgICBmb3JjZTogaW5zbW9kIHBhcmFtZXRlci4gCisgICAgIEEgbGlzdCBvZiBwYWlycy4gVGhlIGZpcnN0IHZhbHVlIGlzIGEgYnVzIG51bWJlciAoLTEgZm9yIGFueSBJMkMgYnVzKSwKKyAgICAgdGhlIHNlY29uZCBpcyB0aGUgSTJDIGFkZHJlc3MuIEEgZGV2aWNlIGlzIGJsaW5kbHkgYXNzdW1lZCB0byBiZSBvbgorICAgICB0aGUgZ2l2ZW4gYWRkcmVzcywgbm8gcHJvYmluZyBpcyBkb25lLiAKKworRm9ydHVuYXRlbHksIGFzIGEgbW9kdWxlIHdyaXRlciwgeW91IGp1c3QgaGF2ZSB0byBkZWZpbmUgdGhlIGBub3JtYWwnIAorYW5kL29yIGBub3JtYWxfcmFuZ2UnIHBhcmFtZXRlcnMuIFRoZSBjb21wbGV0ZSBkZWNsYXJhdGlvbiBjb3VsZCBsb29rCitsaWtlIHRoaXM6CisKKyAgLyogU2NhbiAweDIwIHRvIDB4MmYsIDB4MzcsIGFuZCAweDQwIHRvIDB4NGYgKi8KKyAgc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgzNyxJMkNfQ0xJRU5UX0VORCB9OyAKKyAgc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNfcmFuZ2VbXSA9IHsgMHgyMCwgMHgyZiwgMHg0MCwgMHg0ZiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19DTElFTlRfRU5EIH07CisKKyAgLyogTWFnaWMgZGVmaW5pdGlvbiBvZiBhbGwgb3RoZXIgdmFyaWFibGVzIGFuZCB0aGluZ3MgKi8KKyAgSTJDX0NMSUVOVF9JTlNNT0Q7CisKK05vdGUgdGhhdCB5b3UgKmhhdmUqIHRvIGNhbGwgdGhlIHR3byBkZWZpbmVkIHZhcmlhYmxlcyBgbm9ybWFsX2kyYycgYW5kCitgbm9ybWFsX2kyY19yYW5nZScsIHdpdGhvdXQgYW55IHByZWZpeCEKKworCitQcm9iaW5nIGNsYXNzZXMgKHNlbnNvcnMpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSB3cml0ZSBhIGBzZW5zb3JzJyBkcml2ZXIsIHlvdSB1c2UgYSBzbGlnaHRseSBkaWZmZXJlbnQgaW50ZXJmYWNlLgorQXMgd2VsbCBhcyBJMkMgYWRkcmVzc2VzLCB3ZSBoYXZlIHRvIGNvcGUgd2l0aCBJU0EgYWRkcmVzc2VzLiBBbHNvLCB3ZQordXNlIGEgZW51bSBvZiBjaGlwIHR5cGVzLiBEb24ndCBmb3JnZXQgdG8gaW5jbHVkZSBgc2Vuc29ycy5oJy4KKworVGhlIGZvbGxvd2luZyBsaXN0cyBhcmUgdXNlZCBpbnRlcm5hbGx5LiBUaGV5IGFyZSBhbGwgbGlzdHMgb2YgaW50ZWdlcnMuCisKKyAgIG5vcm1hbF9pMmM6IGZpbGxlZCBpbiBieSB0aGUgbW9kdWxlIHdyaXRlci4gVGVybWluYXRlZCBieSBTRU5TT1JTX0kyQ19FTkQuCisgICAgIEEgbGlzdCBvZiBJMkMgYWRkcmVzc2VzIHdoaWNoIHNob3VsZCBub3JtYWxseSBiZSBleGFtaW5lZC4KKyAgIG5vcm1hbF9pMmNfcmFuZ2U6IGZpbGxlZCBpbiBieSB0aGUgbW9kdWxlIHdyaXRlci4gVGVybWluYXRlZCBieSAKKyAgICAgU0VOU09SU19JMkNfRU5ECisgICAgIEEgbGlzdCBvZiBwYWlycyBvZiBJMkMgYWRkcmVzc2VzLCBlYWNoIHBhaXIgYmVpbmcgYW4gaW5jbHVzaXZlIHJhbmdlIG9mCisgICAgIGFkZHJlc3NlcyB3aGljaCBzaG91bGQgbm9ybWFsbHkgYmUgZXhhbWluZWQuCisgICBub3JtYWxfaXNhOiBmaWxsZWQgaW4gYnkgdGhlIG1vZHVsZSB3cml0ZXIuIFRlcm1pbmF0ZWQgYnkgU0VOU09SU19JU0FfRU5ELgorICAgICBBIGxpc3Qgb2YgSVNBIGFkZHJlc3NlcyB3aGljaCBzaG91bGQgbm9ybWFsbHkgYmUgZXhhbWluZWQuCisgICBub3JtYWxfaXNhX3JhbmdlOiBmaWxsZWQgaW4gYnkgdGhlIG1vZHVsZSB3cml0ZXIuIFRlcm1pbmF0ZWQgYnkgCisgICAgIFNFTlNPUlNfSVNBX0VORAorICAgICBBIGxpc3Qgb2YgdHJpcGxlcy4gVGhlIGZpcnN0IHR3byBlbGVtZW50cyBhcmUgSVNBIGFkZHJlc3NlcywgYmVpbmcgYW4KKyAgICAgcmFuZ2Ugb2YgYWRkcmVzc2VzIHdoaWNoIHNob3VsZCBub3JtYWxseSBiZSBleGFtaW5lZC4gVGhlIHRoaXJkIGlzIHRoZQorICAgICBtb2R1bG8gcGFyYW1ldGVyOiBvbmx5IGFkZHJlc3NlcyB3aGljaCBhcmUgMCBtb2R1bGUgdGhpcyB2YWx1ZSByZWxhdGl2ZQorICAgICB0byB0aGUgZmlyc3QgYWRkcmVzcyBvZiB0aGUgcmFuZ2UgYXJlIGFjdHVhbGx5IGNvbnNpZGVyZWQuCisgICBwcm9iZTogaW5zbW9kIHBhcmFtZXRlci4gSW5pdGlhbGl6ZSB0aGlzIGxpc3Qgd2l0aCBTRU5TT1JTX0kyQ19FTkQgdmFsdWVzLgorICAgICBBIGxpc3Qgb2YgcGFpcnMuIFRoZSBmaXJzdCB2YWx1ZSBpcyBhIGJ1cyBudW1iZXIgKFNFTlNPUlNfSVNBX0JVUyBmb3IKKyAgICAgdGhlIElTQSBidXMsIC0xIGZvciBhbnkgSTJDIGJ1cyksIHRoZSBzZWNvbmQgaXMgdGhlIGFkZHJlc3MuIFRoZXNlCisgICAgIGFkZHJlc3NlcyBhcmUgYWxzbyBwcm9iZWQsIGFzIGlmIHRoZXkgd2VyZSBpbiB0aGUgJ25vcm1hbCcgbGlzdC4KKyAgIHByb2JlX3JhbmdlOiBpbnNtb2QgcGFyYW1ldGVyLiBJbml0aWFsaXplIHRoaXMgbGlzdCB3aXRoIFNFTlNPUlNfSTJDX0VORCAKKyAgICAgdmFsdWVzLgorICAgICBBIGxpc3Qgb2YgdHJpcGxlcy4gVGhlIGZpcnN0IHZhbHVlIGlzIGEgYnVzIG51bWJlciAoU0VOU09SU19JU0FfQlVTIGZvcgorICAgICB0aGUgSVNBIGJ1cywgLTEgZm9yIGFueSBJMkMgYnVzKSwgdGhlIHNlY29uZCBhbmQgdGhpcmQgYXJlIGFkZHJlc3Nlcy4gCisgICAgIFRoZXNlIGZvcm0gYW4gaW5jbHVzaXZlIHJhbmdlIG9mIGFkZHJlc3NlcyB0aGF0IGFyZSBhbHNvIHByb2JlZCwgYXMKKyAgICAgaWYgdGhleSB3ZXJlIGluIHRoZSAnbm9ybWFsJyBsaXN0LgorICAgaWdub3JlOiBpbnNtb2QgcGFyYW1ldGVyLiBJbml0aWFsaXplIHRoaXMgbGlzdCB3aXRoIFNFTlNPUlNfSTJDX0VORCB2YWx1ZXMuCisgICAgIEEgbGlzdCBvZiBwYWlycy4gVGhlIGZpcnN0IHZhbHVlIGlzIGEgYnVzIG51bWJlciAoU0VOU09SU19JU0FfQlVTIGZvcgorICAgICB0aGUgSVNBIGJ1cywgLTEgZm9yIGFueSBJMkMgYnVzKSwgdGhlIHNlY29uZCBpcyB0aGUgSTJDIGFkZHJlc3MuIFRoZXNlCisgICAgIGFkZHJlc3NlcyBhcmUgbmV2ZXIgcHJvYmVkLiBUaGlzIHBhcmFtZXRlciBvdmVycnVsZXMgJ25vcm1hbCcgYW5kIAorICAgICAncHJvYmUnLCBidXQgbm90IHRoZSAnZm9yY2UnIGxpc3RzLgorICAgaWdub3JlX3JhbmdlOiBpbnNtb2QgcGFyYW1ldGVyLiBJbml0aWFsaXplIHRoaXMgbGlzdCB3aXRoIFNFTlNPUlNfSTJDX0VORCAKKyAgICAgIHZhbHVlcy4KKyAgICAgQSBsaXN0IG9mIHRyaXBsZXMuIFRoZSBmaXJzdCB2YWx1ZSBpcyBhIGJ1cyBudW1iZXIgKFNFTlNPUlNfSVNBX0JVUyBmb3IKKyAgICAgdGhlIElTQSBidXMsIC0xIGZvciBhbnkgSTJDIGJ1cyksIHRoZSBzZWNvbmQgYW5kIHRoaXJkIGFyZSBhZGRyZXNzZXMuIAorICAgICBUaGVzZSBmb3JtIGFuIGluY2x1c2l2ZSByYW5nZSBvZiBJMkMgYWRkcmVzc2VzIHRoYXQgYXJlIG5ldmVyIHByb2JlZC4KKyAgICAgVGhpcyBwYXJhbWV0ZXIgb3ZlcnJ1bGVzICdub3JtYWwnIGFuZCAncHJvYmUnLCBidXQgbm90IHRoZSAnZm9yY2UnIGxpc3RzLgorCitBbHNvIHVzZWQgaXMgYSBsaXN0IG9mIHBvaW50ZXJzIHRvIHNlbnNvcnNfZm9yY2VfZGF0YSBzdHJ1Y3R1cmVzOgorICAgZm9yY2VfZGF0YTogaW5zbW9kIHBhcmFtZXRlcnMuIEEgbGlzdCwgZW5kaW5nIHdpdGggYW4gZWxlbWVudCBvZiB3aGljaAorICAgICB0aGUgZm9yY2UgZmllbGQgaXMgTlVMTC4KKyAgICAgRWFjaCBlbGVtZW50IGNvbnRhaW5zIHRoZSB0eXBlIG9mIGNoaXAgYW5kIGEgbGlzdCBvZiBwYWlycy4KKyAgICAgVGhlIGZpcnN0IHZhbHVlIGlzIGEgYnVzIG51bWJlciAoU0VOU09SU19JU0FfQlVTIGZvciB0aGUgSVNBIGJ1cywgCisgICAgIC0xIGZvciBhbnkgSTJDIGJ1cyksIHRoZSBzZWNvbmQgaXMgdGhlIGFkZHJlc3MuIAorICAgICBUaGVzZSBhcmUgYXV0b21hdGljYWxseSB0cmFuc2xhdGVkIHRvIGluc21vZCB2YXJpYWJsZXMgb2YgdGhlIGZvcm0KKyAgICAgZm9yY2VfZm9vLgorCitTbyB3ZSBoYXZlIGEgZ2VuZXJpYyBpbnNtb2QgdmFyaWFibGVkIGBmb3JjZScsIGFuZCBjaGlwLXNwZWNpZmljIHZhcmlhYmxlcworYGZvcmNlX0NISVBOQU1FJy4KKworRm9ydHVuYXRlbHksIGFzIGEgbW9kdWxlIHdyaXRlciwgeW91IGp1c3QgaGF2ZSB0byBkZWZpbmUgdGhlIGBub3JtYWwnIAorYW5kL29yIGBub3JtYWxfcmFuZ2UnIHBhcmFtZXRlcnMsIGFuZCBkZWZpbmUgd2hhdCBjaGlwIG5hbWVzIGFyZSB1c2VkLiAKK1RoZSBjb21wbGV0ZSBkZWNsYXJhdGlvbiBjb3VsZCBsb29rIGxpa2UgdGhpczoKKyAgLyogU2NhbiBpMmMgYWRkcmVzc2VzIDB4MjAgdG8gMHgyZiwgMHgzNywgYW5kIDB4NDAgdG8gMHg0ZgorICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0gezB4MzcsU0VOU09SU19JMkNfRU5EfTsKKyAgc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNfcmFuZ2VbXSA9IHsweDIwLDB4MmYsMHg0MCwweDRmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFTlNPUlNfSTJDX0VORH07CisgIC8qIFNjYW4gSVNBIGFkZHJlc3MgMHgyOTAgKi8KKyAgc3RhdGljIHVuc2lnbmVkIGludCBub3JtYWxfaXNhW10gPSB7MHgwMjkwLFNFTlNPUlNfSVNBX0VORH07CisgIHN0YXRpYyB1bnNpZ25lZCBpbnQgbm9ybWFsX2lzYV9yYW5nZVtdID0ge1NFTlNPUlNfSVNBX0VORH07CisKKyAgLyogRGVmaW5lIGNoaXBzIGZvbyBhbmQgYmFyLCBhcyB3ZWxsIGFzIGFsbCBtb2R1bGUgcGFyYW1ldGVycyBhbmQgdGhpbmdzICovCisgIFNFTlNPUlNfSU5TTU9EXzIoZm9vLGJhcik7CisKK0lmIHlvdSBoYXZlIG9uZSBjaGlwLCB5b3UgdXNlIG1hY3JvIFNFTlNPUlNfSU5TTU9EXzEoY2hpcCksIGlmIHlvdSBoYXZlIDIKK3lvdSB1c2UgbWFjcm8gU0VOU09SU19JTlNNT0RfMihjaGlwMSxjaGlwMiksIGV0Yy4gSWYgeW91IGRvIG5vdCB3YW50IHRvCitib3RoZXIgd2l0aCBjaGlwIHR5cGVzLCB5b3UgY2FuIHVzZSBTRU5TT1JTX0lOU01PRF8wLgorCitBIGVudW0gaXMgYXV0b21hdGljYWxseSBkZWZpbmVkIGFzIGZvbGxvd3M6CisgIGVudW0gY2hpcHMgeyBhbnlfY2hpcCwgY2hpcDEsIGNoaXAyLCAuLi4gfQorCisKK0F0dGFjaGluZyB0byBhbiBhZGFwdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuZXZlciBhIG5ldyBhZGFwdGVyIGlzIGluc2VydGVkLCBvciBmb3IgYWxsIGFkYXB0ZXJzIGlmIHRoZSBkcml2ZXIgaXMKK2JlaW5nIHJlZ2lzdGVyZWQsIHRoZSBjYWxsYmFjayBhdHRhY2hfYWRhcHRlcigpIGlzIGNhbGxlZC4gTm93IGlzIHRoZQordGltZSB0byBkZXRlcm1pbmUgd2hhdCBkZXZpY2VzIGFyZSBwcmVzZW50IG9uIHRoZSBhZGFwdGVyLCBhbmQgdG8gcmVnaXN0ZXIKK2EgY2xpZW50IGZvciBlYWNoIG9mIHRoZW0uCisKK1RoZSBhdHRhY2hfYWRhcHRlciBjYWxsYmFjayBpcyByZWFsbHkgZWFzeTogd2UganVzdCBjYWxsIHRoZSBnZW5lcmljCitkZXRlY3Rpb24gZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gd2lsbCBzY2FuIHRoZSBidXMgZm9yIHVzLCB1c2luZyB0aGUKK2luZm9ybWF0aW9uIGFzIGRlZmluZWQgaW4gdGhlIGxpc3RzIGV4cGxhaW5lZCBhYm92ZS4gSWYgYSBkZXZpY2UgaXMKK2RldGVjdGVkIGF0IGEgc3BlY2lmaWMgYWRkcmVzcywgYW5vdGhlciBjYWxsYmFjayBpcyBjYWxsZWQuCisKKyAgaW50IGZvb19hdHRhY2hfYWRhcHRlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCisgIHsKKyAgICByZXR1cm4gaTJjX3Byb2JlKGFkYXB0ZXIsJmFkZHJfZGF0YSwmZm9vX2RldGVjdF9jbGllbnQpOworICB9CisKK0ZvciBgc2Vuc29ycycgZHJpdmVycywgdXNlIHRoZSBpMmNfZGV0ZWN0IGZ1bmN0aW9uIGluc3RlYWQ6CisgIAorICBpbnQgZm9vX2F0dGFjaF9hZGFwdGVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKKyAgeyAKKyAgICByZXR1cm4gaTJjX2RldGVjdChhZGFwdGVyLCZhZGRyX2RhdGEsJmZvb19kZXRlY3RfY2xpZW50KTsKKyAgfQorCitSZW1lbWJlciwgc3RydWN0dXJlIGBhZGRyX2RhdGEnIGlzIGRlZmluZWQgYnkgdGhlIG1hY3JvcyBleHBsYWluZWQgYWJvdmUsCitzbyB5b3UgZG8gbm90IGhhdmUgdG8gZGVmaW5lIGl0IHlvdXJzZWxmLgorCitUaGUgaTJjX3Byb2JlIG9yIGkyY19kZXRlY3QgZnVuY3Rpb24gd2lsbCBjYWxsIHRoZSBmb29fZGV0ZWN0X2NsaWVudAorZnVuY3Rpb24gb25seSBmb3IgdGhvc2UgaTJjIGFkZHJlc3NlcyB0aGF0IGFjdHVhbGx5IGhhdmUgYSBkZXZpY2Ugb24KK3RoZW0gKHVubGVzcyBhIGBmb3JjZScgcGFyYW1ldGVyIHdhcyB1c2VkKS4gSW4gYWRkaXRpb24sIGFkZHJlc3NlcyB0aGF0CithcmUgYWxyZWFkeSBpbiB1c2UgKGJ5IHNvbWUgb3RoZXIgcmVnaXN0ZXJlZCBjbGllbnQpIGFyZSBza2lwcGVkLgorCisKK1RoZSBkZXRlY3QgY2xpZW50IGZ1bmN0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZGV0ZWN0IGNsaWVudCBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgaTJjX3Byb2JlIG9yIGkyY19kZXRlY3QuCitUaGUgYGtpbmQnIHBhcmFtZXRlciBjb250YWlucyAwIGlmIHRoaXMgY2FsbCBpcyBkdWUgdG8gYSBgZm9yY2UnCitwYXJhbWV0ZXIsIGFuZCAtMSBvdGhlcndpc2UgKGZvciBpMmNfZGV0ZWN0LCBpdCBjb250YWlucyAwIGlmCit0aGlzIGNhbGwgaXMgZHVlIHRvIHRoZSBnZW5lcmljIGBmb3JjZScgcGFyYW1ldGVyLCBhbmQgdGhlIGNoaXAgdHlwZQorbnVtYmVyIGlmIGl0IGlzIGR1ZSB0byBhIHNwZWNpZmljIGBmb3JjZScgcGFyYW1ldGVyKS4KKworQmVsb3csIHNvbWUgdGhpbmdzIGFyZSBvbmx5IG5lZWRlZCBpZiB0aGlzIGlzIGEgYHNlbnNvcnMnIGRyaXZlci4gVGhvc2UKK3BhcnRzIGFyZSBiZXR3ZWVuIC8qIFNFTlNPUlMgT05MWSBTVEFSVCAqLyBhbmQgLyogU0VOU09SUyBPTkxZIEVORCAqLworbWFya2Vycy4gCisKK1RoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgcmV0dXJuIGFuIGVycm9yIChhbnkgdmFsdWUgIT0gMCkgaWYgdGhlcmUgaXMKK3NvbWUgcmVhc29uIHdoeSBubyBtb3JlIGRldGVjdGlvbiBzaG91bGQgYmUgZG9uZSBhbnltb3JlLiBJZiB0aGUKK2RldGVjdGlvbiBqdXN0IGZhaWxzIGZvciB0aGlzIGFkZHJlc3MsIHJldHVybiAwLgorCitGb3Igbm93LCB5b3UgY2FuIGlnbm9yZSB0aGUgYGZsYWdzJyBwYXJhbWV0ZXIuIEl0IGlzIHRoZXJlIGZvciBmdXR1cmUgdXNlLgorCisgIGludCBmb29fZGV0ZWN0X2NsaWVudChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyZXNzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGZsYWdzLCBpbnQga2luZCkKKyAgeworICAgIGludCBlcnIgPSAwOworICAgIGludCBpOworICAgIHN0cnVjdCBpMmNfY2xpZW50ICpuZXdfY2xpZW50OworICAgIHN0cnVjdCBmb29fZGF0YSAqZGF0YTsKKyAgICBjb25zdCBjaGFyICpjbGllbnRfbmFtZSA9ICIiOyAvKiBGb3Igbm9uLWBzZW5zb3JzJyBkcml2ZXJzLCBwdXQgdGhlIHJlYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lIGhlcmUhICovCisgICAKKyAgICAvKiBMZXQncyBzZWUgd2hldGhlciB0aGlzIGFkYXB0ZXIgY2FuIHN1cHBvcnQgd2hhdCB3ZSBuZWVkLgorICAgICAgIFBsZWFzZSBzdWJzdGl0dXRlIHRoZSB0aGluZ3MgeW91IG5lZWQgaGVyZSEgCisgICAgICAgRm9yIGBzZW5zb3JzJyBkcml2ZXJzLCBhZGQgYCEgaXNfaXNhICYmJyB0byB0aGUgaWYgc3RhdGVtZW50ICovCisgICAgaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLEkyQ19GVU5DX1NNQlVTX1dPUkRfREFUQSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURSkpCisgICAgICAgZ290byBFUlJPUjA7CisKKyAgICAvKiBTRU5TT1JTIE9OTFkgU1RBUlQgKi8KKyAgICBjb25zdCBjaGFyICp0eXBlX25hbWUgPSAiIjsKKyAgICBpbnQgaXNfaXNhID0gaTJjX2lzX2lzYV9hZGFwdGVyKGFkYXB0ZXIpOworCisgICAgaWYgKGlzX2lzYSkgeworCisgICAgICAvKiBJZiB0aGlzIGNsaWVudCBjYW4ndCBiZSBvbiB0aGUgSVNBIGJ1cyBhdCBhbGwsIHdlIGNhbiBzdG9wIG5vdworICAgICAgICAgKGNhbGwgYGdvdG8gRVJST1IwJykuIEJ1dCBmb3Iga2lja3MsIHdlIHdpbGwgYXNzdW1lIGl0IGlzIGFsbAorICAgICAgICAgcmlnaHQuICovCisKKyAgICAgIC8qIERpc2NhcmQgaW1tZWRpYXRlbHkgaWYgdGhpcyBJU0EgcmFuZ2UgaXMgYWxyZWFkeSB1c2VkICovCisgICAgICBpZiAoY2hlY2tfcmVnaW9uKGFkZHJlc3MsRk9PX0VYVEVOVCkpCisgICAgICAgIGdvdG8gRVJST1IwOworCisgICAgICAvKiBQcm9iZSB3aGV0aGVyIHRoZXJlIGlzIGFueXRoaW5nIG9uIHRoaXMgYWRkcmVzcy4KKyAgICAgICAgIFNvbWUgZXhhbXBsZSBjb2RlIGlzIGJlbG93LCBidXQgeW91IHdpbGwgaGF2ZSB0byBhZGFwdCB0aGlzCisgICAgICAgICBmb3IgeW91ciBvd24gZHJpdmVyICovCisKKyAgICAgIGlmIChraW5kIDwgMCkgLyogT25seSBpZiBubyBmb3JjZSBwYXJhbWV0ZXIgd2FzIHVzZWQgKi8geworICAgICAgICAvKiBXZSBtYXkgbmVlZCBsb25nIHRpbWVvdXRzIGF0IGxlYXN0IGZvciBzb21lIGNoaXBzLiAqLworICAgICAgICAjZGVmaW5lIFJFQUxMWV9TTE9XX0lPCisgICAgICAgIGkgPSBpbmJfcChhZGRyZXNzICsgMSk7CisgICAgICAgIGlmIChpbmJfcChhZGRyZXNzICsgMikgIT0gaSkKKyAgICAgICAgICBnb3RvIEVSUk9SMDsKKyAgICAgICAgaWYgKGluYl9wKGFkZHJlc3MgKyAzKSAhPSBpKQorICAgICAgICAgIGdvdG8gRVJST1IwOworICAgICAgICBpZiAoaW5iX3AoYWRkcmVzcyArIDcpICE9IGkpCisgICAgICAgICAgZ290byBFUlJPUjA7CisgICAgICAgICN1bmRlZiBSRUFMTFlfU0xPV19JTworCisgICAgICAgIC8qIExldCdzIGp1c3QgaG9wZSBub3RoaW5nIGJyZWFrcyBoZXJlICovCisgICAgICAgIGkgPSBpbmJfcChhZGRyZXNzICsgNSkgJiAweDdmOworICAgICAgICBvdXRiX3AofmkgJiAweDdmLGFkZHJlc3MrNSk7CisgICAgICAgIGlmICgoaW5iX3AoYWRkcmVzcyArIDUpICYgMHg3ZikgIT0gKH5pICYgMHg3ZikpIHsKKyAgICAgICAgICBvdXRiX3AoaSxhZGRyZXNzKzUpOworICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgLyogU0VOU09SUyBPTkxZIEVORCAqLworCisgICAgLyogT0suIEZvciBub3csIHdlIHByZXN1bWUgd2UgaGF2ZSBhIHZhbGlkIGNsaWVudC4gV2Ugbm93IGNyZWF0ZSB0aGUKKyAgICAgICBjbGllbnQgc3RydWN0dXJlLCBldmVuIHRob3VnaCB3ZSBjYW5ub3QgZmlsbCBpdCBjb21wbGV0ZWx5IHlldC4KKyAgICAgICBCdXQgaXQgYWxsb3dzIHVzIHRvIGFjY2VzcyBzZXZlcmFsIGkyYyBmdW5jdGlvbnMgc2FmZWx5ICovCisgICAgCisgICAgLyogTm90ZSB0aGF0IHdlIHJlc2VydmUgc29tZSBzcGFjZSBmb3IgZm9vX2RhdGEgdG9vLiBJZiB5b3UgZG9uJ3QKKyAgICAgICBuZWVkIGl0LCByZW1vdmUgaXQuIFdlIGRvIGl0IGhlcmUgdG8gaGVscCB0byBsZXNzZW4gbWVtb3J5CisgICAgICAgZnJhZ21lbnRhdGlvbi4gKi8KKyAgICBpZiAoISAobmV3X2NsaWVudCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSArIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGZvb19kYXRhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0ZQX0tFUk5FTCkpKSB7CisgICAgICBlcnIgPSAtRU5PTUVNOworICAgICAgZ290byBFUlJPUjA7CisgICAgfQorCisgICAgLyogVGhpcyBpcyB0cmlja3ksIGJ1dCBpdCB3aWxsIHNldCB0aGUgZGF0YSB0byB0aGUgcmlnaHQgdmFsdWUuICovCisgICAgY2xpZW50LT5kYXRhID0gbmV3X2NsaWVudCArIDE7CisgICAgZGF0YSA9IChzdHJ1Y3QgZm9vX2RhdGEgKikgKGNsaWVudC0+ZGF0YSk7CisKKyAgICBuZXdfY2xpZW50LT5hZGRyID0gYWRkcmVzczsKKyAgICBuZXdfY2xpZW50LT5kYXRhID0gZGF0YTsKKyAgICBuZXdfY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKKyAgICBuZXdfY2xpZW50LT5kcml2ZXIgPSAmZm9vX2RyaXZlcjsKKyAgICBuZXdfY2xpZW50LT5mbGFncyA9IDA7CisKKyAgICAvKiBOb3csIHdlIGRvIHRoZSByZW1haW5pbmcgZGV0ZWN0aW9uLiBJZiBubyBgZm9yY2UnIHBhcmFtZXRlciBpcyB1c2VkLiAqLworCisgICAgLyogRmlyc3QsIHRoZSBnZW5lcmljIGRldGVjdGlvbiAoaWYgYW55KSwgdGhhdCBpcyBza2lwcGVkIGlmIGFueSBmb3JjZQorICAgICAgIHBhcmFtZXRlciB3YXMgdXNlZC4gKi8KKyAgICBpZiAoa2luZCA8IDApIHsKKyAgICAgIC8qIFRoZSBiZWxvdyBpcyBvZiBjb3Vyc2UgYm9ndXMgKi8KKyAgICAgIGlmIChmb29fcmVhZChuZXdfY2xpZW50LEZPT19SRUdfR0VORVJJQykgIT0gRk9PX0dFTkVSSUNfVkFMVUUpCisgICAgICAgICBnb3RvIEVSUk9SMTsKKyAgICB9CisKKyAgICAvKiBTRU5TT1JTIE9OTFkgU1RBUlQgKi8KKworICAgIC8qIE5leHQsIHNwZWNpZmljIGRldGVjdGlvbi4gVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBmb3IgYHNlbnNvcnMnCisgICAgICAgZGV2aWNlcy4gKi8KKworICAgIC8qIERldGVybWluZSB0aGUgY2hpcCB0eXBlLiBOb3QgbmVlZGVkIGlmIGEgYGZvcmNlX0NISVBUWVBFJyBwYXJhbWV0ZXIKKyAgICAgICB3YXMgdXNlZC4gKi8KKyAgICBpZiAoa2luZCA8PSAwKSB7CisgICAgICBpID0gZm9vX3JlYWQobmV3X2NsaWVudCxGT09fUkVHX0NISVBUWVBFKTsKKyAgICAgIGlmIChpID09IEZPT19UWVBFXzEpIAorICAgICAgICBraW5kID0gY2hpcDE7IC8qIEFzIGRlZmluZWQgaW4gdGhlIGVudW0gKi8KKyAgICAgIGVsc2UgaWYgKGkgPT0gRk9PX1RZUEVfMikKKyAgICAgICAga2luZCA9IGNoaXAyOworICAgICAgZWxzZSB7CisgICAgICAgIHByaW50aygiZm9vOiBJZ25vcmluZyAnZm9yY2UnIHBhcmFtZXRlciBmb3IgdW5rbm93biBjaGlwIGF0ICIKKyAgICAgICAgICAgICAgICJhZGFwdGVyICVkLCBhZGRyZXNzIDB4JTAyeFxuIixpMmNfYWRhcHRlcl9pZChhZGFwdGVyKSxhZGRyZXNzKTsKKyAgICAgICAgZ290byBFUlJPUjE7CisgICAgICB9CisgICAgfQorCisgICAgLyogTm93IHNldCB0aGUgdHlwZSBhbmQgY2hpcCBuYW1lcyAqLworICAgIGlmIChraW5kID09IGNoaXAxKSB7CisgICAgICB0eXBlX25hbWUgPSAiY2hpcDEiOyAvKiBGb3IgL3Byb2MgZW50cnkgKi8KKyAgICAgIGNsaWVudF9uYW1lID0gIkNISVAgMSI7CisgICAgfSBlbHNlIGlmIChraW5kID09IGNoaXAyKSB7CisgICAgICB0eXBlX25hbWUgPSAiY2hpcDIiOyAvKiBGb3IgL3Byb2MgZW50cnkgKi8KKyAgICAgIGNsaWVudF9uYW1lID0gIkNISVAgMiI7CisgICAgfQorICAgCisgICAgLyogUmVzZXJ2ZSB0aGUgSVNBIHJlZ2lvbiAqLworICAgIGlmIChpc19pc2EpCisgICAgICByZXF1ZXN0X3JlZ2lvbihhZGRyZXNzLEZPT19FWFRFTlQsdHlwZV9uYW1lKTsKKworICAgIC8qIFNFTlNPUlMgT05MWSBFTkQgKi8KKworICAgIC8qIEZpbGwgaW4gdGhlIHJlbWFpbmluZyBjbGllbnQgZmllbGRzLiAqLworICAgIHN0cmNweShuZXdfY2xpZW50LT5uYW1lLGNsaWVudF9uYW1lKTsKKworICAgIC8qIFNFTlNPUlMgT05MWSBCRUdJTiAqLworICAgIGRhdGEtPnR5cGUgPSBraW5kOworICAgIC8qIFNFTlNPUlMgT05MWSBFTkQgKi8KKworICAgIGRhdGEtPnZhbGlkID0gMDsgLyogT25seSBpZiB5b3UgdXNlIHRoaXMgZmllbGQgKi8KKyAgICBpbml0X01VVEVYKCZkYXRhLT51cGRhdGVfbG9jayk7IC8qIE9ubHkgaWYgeW91IHVzZSB0aGlzIGZpZWxkICovCisKKyAgICAvKiBBbnkgb3RoZXIgaW5pdGlhbGl6YXRpb25zIGluIGRhdGEgbXVzdCBiZSBkb25lIGhlcmUgdG9vLiAqLworCisgICAgLyogVGVsbCB0aGUgaTJjIGxheWVyIGEgbmV3IGNsaWVudCBoYXMgYXJyaXZlZCAqLworICAgIGlmICgoZXJyID0gaTJjX2F0dGFjaF9jbGllbnQobmV3X2NsaWVudCkpKQorICAgICAgZ290byBFUlJPUjM7CisKKyAgICAvKiBTRU5TT1JTIE9OTFkgQkVHSU4gKi8KKyAgICAvKiBSZWdpc3RlciBhIG5ldyBkaXJlY3RvcnkgZW50cnkgd2l0aCBtb2R1bGUgc2Vuc29ycy4gU2VlIGJlbG93IGZvcgorICAgICAgIHRoZSBgdGVtcGxhdGUnIHN0cnVjdHVyZS4gKi8KKyAgICBpZiAoKGkgPSBpMmNfcmVnaXN0ZXJfZW50cnkobmV3X2NsaWVudCwgdHlwZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9vX2Rpcl90YWJsZV90ZW1wbGF0ZSxUSElTX01PRFVMRSkpIDwgMCkgeworICAgICAgZXJyID0gaTsKKyAgICAgIGdvdG8gRVJST1I0OworICAgIH0KKyAgICBkYXRhLT5zeXNjdGxfaWQgPSBpOworCisgICAgLyogU0VOU09SUyBPTkxZIEVORCAqLworCisgICAgLyogVGhpcyBmdW5jdGlvbiBjYW4gd3JpdGUgZGVmYXVsdCB2YWx1ZXMgdG8gdGhlIGNsaWVudCByZWdpc3RlcnMsIGlmCisgICAgICAgbmVlZGVkLiAqLworICAgIGZvb19pbml0X2NsaWVudChuZXdfY2xpZW50KTsKKyAgICByZXR1cm4gMDsKKworICAgIC8qIE9LLCB0aGlzIGlzIG5vdCBleGFjdGx5IGdvb2QgcHJvZ3JhbW1pbmcgcHJhY3RpY2UsIHVzdWFsbHkuIEJ1dCBpdCBpcworICAgICAgIHZlcnkgY29kZS1lZmZpY2llbnQgaW4gdGhpcyBjYXNlLiAqLworCisgICAgRVJST1I0OgorICAgICAgaTJjX2RldGFjaF9jbGllbnQobmV3X2NsaWVudCk7CisgICAgRVJST1IzOgorICAgIEVSUk9SMjoKKyAgICAvKiBTRU5TT1JTIE9OTFkgU1RBUlQgKi8KKyAgICAgIGlmIChpc19pc2EpCisgICAgICAgIHJlbGVhc2VfcmVnaW9uKGFkZHJlc3MsRk9PX0VYVEVOVCk7CisgICAgLyogU0VOU09SUyBPTkxZIEVORCAqLworICAgIEVSUk9SMToKKyAgICAgIGtmcmVlKG5ld19jbGllbnQpOworICAgIEVSUk9SMDoKKyAgICAgIHJldHVybiBlcnI7CisgIH0KKworCitSZW1vdmluZyB0aGUgY2xpZW50Cis9PT09PT09PT09PT09PT09PT09CisKK1RoZSBkZXRhY2hfY2xpZW50IGNhbGwgYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhIGNsaWVudCBzaG91bGQgYmUKK3JlbW92ZWQuIEl0IG1heSBhY3R1YWxseSBmYWlsLCBidXQgb25seSB3aGVuIHBhbmlja2luZy4gVGhpcyBjb2RlIGlzCittdWNoIHNpbXBsZXIgdGhhbiB0aGUgYXR0YWNobWVudCBjb2RlLCBmb3J0dW5hdGVseSEKKworICBpbnQgZm9vX2RldGFjaF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKKyAgeworICAgIGludCBlcnIsaTsKKworICAgIC8qIFNFTlNPUlMgT05MWSBTVEFSVCAqLworICAgIC8qIERlcmVnaXN0ZXIgd2l0aCB0aGUgYGkyYy1wcm9jJyBtb2R1bGUuICovCisgICAgaTJjX2RlcmVnaXN0ZXJfZW50cnkoKChzdHJ1Y3QgbG03OF9kYXRhICopKGNsaWVudC0+ZGF0YSkpLT5zeXNjdGxfaWQpOworICAgIC8qIFNFTlNPUlMgT05MWSBFTkQgKi8KKworICAgIC8qIFRyeSB0byBkZXRhY2ggdGhlIGNsaWVudCBmcm9tIGkyYyBzcGFjZSAqLworICAgIGlmICgoZXJyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KSkpIHsKKyAgICAgIHByaW50aygiZm9vLm86IENsaWVudCBkZXJlZ2lzdHJhdGlvbiBmYWlsZWQsIGNsaWVudCBub3QgZGV0YWNoZWQuXG4iKTsKKyAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgLyogU0VOU09SUyBPTkxZIFNUQVJUICovCisgICAgaWYgaTJjX2lzX2lzYV9jbGllbnQoY2xpZW50KQorICAgICAgcmVsZWFzZV9yZWdpb24oY2xpZW50LT5hZGRyLExNNzhfRVhURU5UKTsKKyAgICAvKiBTRU5TT1JTIE9OTFkgRU5EICovCisKKyAgICBrZnJlZShjbGllbnQpOyAvKiBGcmVlcyBjbGllbnQgZGF0YSB0b28sIGlmIGFsbG9jYXRlZCBhdCB0aGUgc2FtZSB0aW1lICovCisgICAgcmV0dXJuIDA7CisgIH0KKworCitJbml0aWFsaXppbmcgdGhlIG1vZHVsZSBvciBrZXJuZWwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitXaGVuIHRoZSBrZXJuZWwgaXMgYm9vdGVkLCBvciB3aGVuIHlvdXIgZm9vIGRyaXZlciBtb2R1bGUgaXMgaW5zZXJ0ZWQsIAoreW91IGhhdmUgdG8gZG8gc29tZSBpbml0aWFsaXppbmcuIEZvcnR1bmF0ZWx5LCBqdXN0IGF0dGFjaGluZyAocmVnaXN0ZXJpbmcpCit0aGUgZHJpdmVyIG1vZHVsZSBpcyB1c3VhbGx5IGVub3VnaC4KKworICAvKiBLZWVwIHRyYWNrIG9mIGhvdyBmYXIgd2UgZ290IGluIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBJZiBzZXZlcmFsCisgICAgIHRoaW5ncyBoYXZlIHRvIGluaXRpYWxpemVkLCBhbmQgd2UgZmFpbCBoYWxmd2F5LCBvbmx5IHRob3NlIHRoaW5ncworICAgICBoYXZlIHRvIGJlIGNsZWFuZWQgdXAhICovCisgIHN0YXRpYyBpbnQgX19pbml0ZGF0YSBmb29faW5pdGlhbGl6ZWQgPSAwOworCisgIHN0YXRpYyBpbnQgX19pbml0IGZvb19pbml0KHZvaWQpCisgIHsKKyAgICBpbnQgcmVzOworICAgIHByaW50aygiZm9vIHZlcnNpb24gJXMgKCVzKVxuIixGT09fVkVSU0lPTixGT09fREFURSk7CisgICAgCisgICAgaWYgKChyZXMgPSBpMmNfYWRkX2RyaXZlcigmZm9vX2RyaXZlcikpKSB7CisgICAgICBwcmludGsoImZvbzogRHJpdmVyIHJlZ2lzdHJhdGlvbiBmYWlsZWQsIG1vZHVsZSBub3QgaW5zZXJ0ZWQuXG4iKTsKKyAgICAgIGZvb19jbGVhbnVwKCk7CisgICAgICByZXR1cm4gcmVzOworICAgIH0KKyAgICBmb29faW5pdGlhbGl6ZWQgKys7CisgICAgcmV0dXJuIDA7CisgIH0KKworICB2b2lkIGZvb19jbGVhbnVwKHZvaWQpCisgIHsKKyAgICBpZiAoZm9vX2luaXRpYWxpemVkID09IDEpIHsKKyAgICAgIGlmICgocmVzID0gaTJjX2RlbF9kcml2ZXIoJmZvb19kcml2ZXIpKSkgeworICAgICAgICBwcmludGsoImZvbzogRHJpdmVyIHJlZ2lzdHJhdGlvbiBmYWlsZWQsIG1vZHVsZSBub3QgcmVtb3ZlZC5cbiIpOworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICBmb29faW5pdGlhbGl6ZWQgLS07CisgICAgfQorICB9CisKKyAgLyogU3Vic3RpdHV0ZSB5b3VyIG93biBuYW1lIGFuZCBlbWFpbCBhZGRyZXNzICovCisgIE1PRFVMRV9BVVRIT1IoIkZyb2RvIExvb2lqYWFyZCA8ZnJvZG9sQGRkcy5ubD4iCisgIE1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBCYXJmIEluYy4gRm9vIEkyQyBkZXZpY2VzIik7CisKKyAgbW9kdWxlX2luaXQoZm9vX2luaXQpOworICBtb2R1bGVfZXhpdChmb29fY2xlYW51cCk7CisKK05vdGUgdGhhdCBzb21lIGZ1bmN0aW9ucyBhcmUgbWFya2VkIGJ5IGBfX2luaXQnLCBhbmQgc29tZSBkYXRhIHN0cnVjdHVyZXMKK2J5IGBfX2luaXRfZGF0YScuICBIb3NlIGZ1bmN0aW9ucyBhbmQgc3RydWN0dXJlcyBjYW4gYmUgcmVtb3ZlZCBhZnRlcgora2VybmVsIGJvb3RpbmcgKG9yIG1vZHVsZSBsb2FkaW5nKSBpcyBjb21wbGV0ZWQuCisKK0NvbW1hbmQgZnVuY3Rpb24KKz09PT09PT09PT09PT09PT0KKworQSBnZW5lcmljIGlvY3RsLWxpa2UgZnVuY3Rpb24gY2FsbCBiYWNrIGlzIHN1cHBvcnRlZC4gWW91IHdpbGwgc2VsZG9tCituZWVkIHRoaXMuIFlvdSBtYXkgZXZlbiBzZXQgaXQgdG8gTlVMTC4KKworICAvKiBObyBjb21tYW5kcyBkZWZpbmVkICovCisgIGludCBmb29fY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCisgIHsKKyAgICByZXR1cm4gMDsKKyAgfQorCisKK1NlbmRpbmcgYW5kIHJlY2VpdmluZworPT09PT09PT09PT09PT09PT09PT09CisKK0lmIHlvdSB3YW50IHRvIGNvbW11bmljYXRlIHdpdGggeW91ciBkZXZpY2UsIHRoZXJlIGFyZSBzZXZlcmFsIGZ1bmN0aW9ucwordG8gZG8gdGhpcy4gWW91IGNhbiBmaW5kIGFsbCBvZiB0aGVtIGluIGkyYy5oLgorCitJZiB5b3UgY2FuIGNob29zZSBiZXR3ZWVuIHBsYWluIGkyYyBjb21tdW5pY2F0aW9uIGFuZCBTTUJ1cyBsZXZlbAorY29tbXVuaWNhdGlvbiwgcGxlYXNlIHVzZSB0aGUgbGFzdC4gQWxsIGFkYXB0ZXJzIHVuZGVyc3RhbmQgU01CdXMgbGV2ZWwKK2NvbW1hbmRzLCBidXQgb25seSBzb21lIG9mIHRoZW0gdW5kZXJzdGFuZCBwbGFpbiBpMmMhCisKKworUGxhaW4gaTJjIGNvbW11bmljYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgZXh0ZXJuIGludCBpMmNfbWFzdGVyX3NlbmQoc3RydWN0IGkyY19jbGllbnQgKixjb25zdCBjaGFyKiAsaW50KTsKKyAgZXh0ZXJuIGludCBpMmNfbWFzdGVyX3JlY3Yoc3RydWN0IGkyY19jbGllbnQgKixjaGFyKiAsaW50KTsKKworVGhlc2Ugcm91dGluZXMgcmVhZCBhbmQgd3JpdGUgc29tZSBieXRlcyBmcm9tL3RvIGEgY2xpZW50LiBUaGUgY2xpZW50Citjb250YWlucyB0aGUgaTJjIGFkZHJlc3MsIHNvIHlvdSBkbyBub3QgaGF2ZSB0byBpbmNsdWRlIGl0LiBUaGUgc2Vjb25kCitwYXJhbWV0ZXIgY29udGFpbnMgdGhlIGJ5dGVzIHRoZSByZWFkL3dyaXRlLCB0aGUgdGhpcmQgdGhlIGxlbmd0aCBvZiB0aGUKK2J1ZmZlci4gUmV0dXJuZWQgaXMgdGhlIGFjdHVhbCBudW1iZXIgb2YgYnl0ZXMgcmVhZC93cml0dGVuLgorICAKKyAgZXh0ZXJuIGludCBpMmNfdHJhbnNmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCBzdHJ1Y3QgaTJjX21zZyAqbXNnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtKTsKKworVGhpcyBzZW5kcyBhIHNlcmllcyBvZiBtZXNzYWdlcy4gRWFjaCBtZXNzYWdlIGNhbiBiZSBhIHJlYWQgb3Igd3JpdGUsCithbmQgdGhleSBjYW4gYmUgbWl4ZWQgaW4gYW55IHdheS4gVGhlIHRyYW5zYWN0aW9ucyBhcmUgY29tYmluZWQ6IG5vCitzdG9wIGJpdCBpcyBzZW50IGJldHdlZW4gdHJhbnNhY3Rpb24uIFRoZSBpMmNfbXNnIHN0cnVjdHVyZSBjb250YWlucworZm9yIGVhY2ggbWVzc2FnZSB0aGUgY2xpZW50IGFkZHJlc3MsIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2YgdGhlIG1lc3NhZ2UKK2FuZCB0aGUgbWVzc2FnZSBkYXRhIGl0c2VsZi4KKworWW91IGNhbiByZWFkIHRoZSBmaWxlIGBpMmMtcHJvdG9jb2wnIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZQorYWN0dWFsIGkyYyBwcm90b2NvbC4KKworCitTTUJ1cyBjb21tdW5pY2F0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgZXh0ZXJuIHMzMiBpMmNfc21idXNfeGZlciAoc3RydWN0IGkyY19hZGFwdGVyICogYWRhcHRlciwgdTE2IGFkZHIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciByZWFkX3dyaXRlLCB1OCBjb21tYW5kLCBpbnQgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pb24gaTJjX3NtYnVzX2RhdGEgKiBkYXRhKTsKKworICBUaGlzIGlzIHRoZSBnZW5lcmljIFNNQnVzIGZ1bmN0aW9uLiBBbGwgZnVuY3Rpb25zIGJlbG93IGFyZSBpbXBsZW1lbnRlZAorICBpbiB0ZXJtcyBvZiBpdC4gTmV2ZXIgdXNlIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkhCisKKworICBleHRlcm4gczMyIGkyY19zbWJ1c193cml0ZV9xdWljayhzdHJ1Y3QgaTJjX2NsaWVudCAqIGNsaWVudCwgdTggdmFsdWUpOworICBleHRlcm4gczMyIGkyY19zbWJ1c19yZWFkX2J5dGUoc3RydWN0IGkyY19jbGllbnQgKiBjbGllbnQpOworICBleHRlcm4gczMyIGkyY19zbWJ1c193cml0ZV9ieXRlKHN0cnVjdCBpMmNfY2xpZW50ICogY2xpZW50LCB1OCB2YWx1ZSk7CisgIGV4dGVybiBzMzIgaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICogY2xpZW50LCB1OCBjb21tYW5kKTsKKyAgZXh0ZXJuIHMzMiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICogY2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggY29tbWFuZCwgdTggdmFsdWUpOworICBleHRlcm4gczMyIGkyY19zbWJ1c19yZWFkX3dvcmRfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqIGNsaWVudCwgdTggY29tbWFuZCk7CisgIGV4dGVybiBzMzIgaTJjX3NtYnVzX3dyaXRlX3dvcmRfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqIGNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGNvbW1hbmQsIHUxNiB2YWx1ZSk7CisgIGV4dGVybiBzMzIgaTJjX3NtYnVzX3dyaXRlX2Jsb2NrX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKiBjbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggY29tbWFuZCwgdTggbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4ICp2YWx1ZXMpOworCitUaGVzZSBvbmVzIHdlcmUgcmVtb3ZlZCBpbiBMaW51eCAyLjYuMTAgYmVjYXVzZSB0aGV5IGhhZCBubyB1c2VycywgYnV0IGNvdWxkCitiZSBhZGRlZCBiYWNrIGxhdGVyIGlmIG5lZWRlZDoKKworICBleHRlcm4gczMyIGkyY19zbWJ1c19yZWFkX2kyY19ibG9ja19kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICogY2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGNvbW1hbmQsIHU4ICp2YWx1ZXMpOworICBleHRlcm4gczMyIGkyY19zbWJ1c19yZWFkX2Jsb2NrX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKiBjbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBjb21tYW5kLCB1OCAqdmFsdWVzKTsKKyAgZXh0ZXJuIHMzMiBpMmNfc21idXNfd3JpdGVfaTJjX2Jsb2NrX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKiBjbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGNvbW1hbmQsIHU4IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggKnZhbHVlcyk7CisgIGV4dGVybiBzMzIgaTJjX3NtYnVzX3Byb2Nlc3NfY2FsbChzdHJ1Y3QgaTJjX2NsaWVudCAqIGNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGNvbW1hbmQsIHUxNiB2YWx1ZSk7CisgIGV4dGVybiBzMzIgaTJjX3NtYnVzX2Jsb2NrX3Byb2Nlc3NfY2FsbChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggY29tbWFuZCwgdTggbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggKnZhbHVlcykKKworQWxsIHRoZXNlIHRyYW5zYWN0aW9ucyByZXR1cm4gLTEgb24gZmFpbHVyZS4gVGhlICd3cml0ZScgdHJhbnNhY3Rpb25zIAorcmV0dXJuIDAgb24gc3VjY2VzczsgdGhlICdyZWFkJyB0cmFuc2FjdGlvbnMgcmV0dXJuIHRoZSByZWFkIHZhbHVlLCBleGNlcHQgCitmb3IgcmVhZF9ibG9jaywgd2hpY2ggcmV0dXJucyB0aGUgbnVtYmVyIG9mIHZhbHVlcyByZWFkLiBUaGUgYmxvY2sgYnVmZmVycyAKK25lZWQgbm90IGJlIGxvbmdlciB0aGFuIDMyIGJ5dGVzLgorCitZb3UgY2FuIHJlYWQgdGhlIGZpbGUgYHNtYnVzLXByb3RvY29sJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUKK2FjdHVhbCBTTUJ1cyBwcm90b2NvbC4KKworCitHZW5lcmFsIHB1cnBvc2Ugcm91dGluZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitCZWxvdyBhbGwgZ2VuZXJhbCBwdXJwb3NlIHJvdXRpbmVzIGFyZSBsaXN0ZWQsIHRoYXQgd2VyZSBub3QgbWVudGlvbmVkCitiZWZvcmUuCisKKyAgLyogVGhpcyBjYWxsIHJldHVybnMgYSB1bmlxdWUgbG93IGlkZW50aWZpZXIgZm9yIGVhY2ggcmVnaXN0ZXJlZCBhZGFwdGVyLAorICAgKiBvciAtMSBpZiB0aGUgYWRhcHRlciB3YXMgbm90IHJlZ2lzdGVyZWQuCisgICAqLworICBleHRlcm4gaW50IGkyY19hZGFwdGVyX2lkKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCk7CisKKworVGhlIHNlbnNvcnMgc3lzY3RsL3Byb2MgaW50ZXJmYWNlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBzZWN0aW9uIG9ubHkgYXBwbGllcyBpZiB5b3Ugd3JpdGUgYHNlbnNvcnMnIGRyaXZlcnMuCisKK0VhY2ggc2Vuc29ycyBkcml2ZXIgY3JlYXRlcyBhIGRpcmVjdG9yeSBpbiAvcHJvYy9zeXMvZGV2L3NlbnNvcnMgZm9yIGVhY2gKK3JlZ2lzdGVyZWQgY2xpZW50LiBUaGUgZGlyZWN0b3J5IGlzIGNhbGxlZCBzb21ldGhpbmcgbGlrZSBmb28taTJjLTQtNjUuCitUaGUgc2Vuc29ycyBtb2R1bGUgaGVscHMgeW91IHRvIGRvIHRoaXMgYXMgZWFzaWx5IGFzIHBvc3NpYmxlLgorCitUaGUgdGVtcGxhdGUKKy0tLS0tLS0tLS0tLQorCitZb3Ugd2lsbCBuZWVkIHRvIGRlZmluZSBhIGN0bF90YWJsZSB0ZW1wbGF0ZS4gVGhpcyB0ZW1wbGF0ZSB3aWxsIGF1dG9tYXRpY2FsbHkKK2JlIGNvcGllZCB0byBhIG5ld2x5IGFsbG9jYXRlZCBzdHJ1Y3R1cmUgYW5kIGZpbGxlZCBpbiB3aGVyZSBuZWNlc3Nhcnkgd2hlbgoreW91IGNhbGwgc2Vuc29yc19yZWdpc3Rlcl9lbnRyeS4KKworRmlyc3QsIEkgd2lsbCBnaXZlIGFuIGV4YW1wbGUgZGVmaW5pdGlvbi4KKyAgc3RhdGljIGN0bF90YWJsZSBmb29fZGlyX3RhYmxlX3RlbXBsYXRlW10gPSB7CisgICAgeyBGT09fU1lTQ1RMX0ZVTkMxLCAiZnVuYzEiLCBOVUxMLCAwLCAwNjQ0LCBOVUxMLCAmaTJjX3Byb2NfcmVhbCwKKyAgICAgICZpMmNfc3lzY3RsX3JlYWwsTlVMTCwmZm9vX2Z1bmMgfSwKKyAgICB7IEZPT19TWVNDVExfRlVOQzIsICJmdW5jMiIsIE5VTEwsIDAsIDA2NDQsIE5VTEwsICZpMmNfcHJvY19yZWFsLAorICAgICAgJmkyY19zeXNjdGxfcmVhbCxOVUxMLCZmb29fZnVuYyB9LAorICAgIHsgRk9PX1NZU0NUTF9EQVRBLCAiZGF0YSIsIE5VTEwsIDAsIDA2NDQsIE5VTEwsICZpMmNfcHJvY19yZWFsLAorICAgICAgJmkyY19zeXNjdGxfcmVhbCxOVUxMLCZmb29fZGF0YSB9LAorICAgIHsgMCB9CisgIH07CisKK0luIHRoZSBhYm92ZSBleGFtcGxlLCB0aHJlZSBlbnRyaWVzIGFyZSBkZWZpbmVkLiBUaGV5IGNhbiBlaXRoZXIgYmUKK2FjY2Vzc2VkIHRocm91Z2ggdGhlIC9wcm9jIGludGVyZmFjZSwgaW4gdGhlIC9wcm9jL3N5cy9kZXYvc2Vuc29ycy8qCitkaXJlY3RvcmllcywgYXMgZmlsZXMgbmFtZWQgZnVuYzEsIGZ1bmMyIGFuZCBkYXRhLCBvciBhbHRlcm5hdGl2ZWx5IAordGhyb3VnaCB0aGUgc3lzY3RsIGludGVyZmFjZSwgaW4gdGhlIGFwcHJvcHJpYXRlIHRhYmxlLCB3aXRoIGlkZW50aWZpZXJzCitGT09fU1lTQ1RMX0ZVTkMxLCBGT09fU1lTQ1RMX0ZVTkMyIGFuZCBGT09fU1lTQ1RMX0RBVEEuCisKK1RoZSB0aGlyZCwgc2l4dGggYW5kIG5pbnRoIHBhcmFtZXRlcnMgc2hvdWxkIGFsd2F5cyBiZSBOVUxMLCBhbmQgdGhlCitmb3VydGggc2hvdWxkIGFsd2F5cyBiZSAwLiBUaGUgZmlmdGggaXMgdGhlIG1vZGUgb2YgdGhlIC9wcm9jIGZpbGU7CiswNjQ0IGlzIHNhZmUsIGFzIHRoZSBmaWxlIHdpbGwgYmUgb3duZWQgYnkgcm9vdDpyb290LiAKKworVGhlIHNldmVudGggYW5kIGVpZ2h0aCBwYXJhbWV0ZXJzIHNob3VsZCBiZSAmaTJjX3Byb2NfcmVhbCBhbmQKKyZpMmNfc3lzY3RsX3JlYWwgaWYgeW91IHdhbnQgdG8gZXhwb3J0IGxpc3RzIG9mIHJlYWxzIChzY2FsZWQKK2ludGVnZXJzKS4gWW91IGNhbiBhbHNvIHVzZSB5b3VyIG93biBmdW5jdGlvbiBmb3IgdGhlbSwgYXMgdXN1YWwuCitGaW5hbGx5LCB0aGUgbGFzdCBwYXJhbWV0ZXIgaXMgdGhlIGNhbGwtYmFjayB0byBnYXRoZXIgdGhlIGRhdGEKKyhzZWUgYmVsb3cpIGlmIHlvdSB1c2UgdGhlICpfcHJvY19yZWFsIGZ1bmN0aW9ucy4gCisKKworR2F0aGVyaW5nIHRoZSBkYXRhCistLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGNhbGwgYmFjayBmdW5jdGlvbnMgKGZvb19mdW5jIGFuZCBmb29fZGF0YSBpbiB0aGUgYWJvdmUgZXhhbXBsZSkKK2NhbiBiZSBjYWxsZWQgaW4gc2V2ZXJhbCB3YXlzOyB0aGUgb3BlcmF0aW9uIHBhcmFtZXRlciBkZXRlcm1pbmVzCit3aGF0IHNob3VsZCBiZSBkb25lOgorCisgICogSWYgb3BlcmF0aW9uID09IFNFTlNPUlNfUFJPQ19SRUFMX0lORk8sIHlvdSBtdXN0IHJldHVybiB0aGUKKyAgICBtYWduaXR1ZGUgKHNjYWxpbmcpIGluIG5yZWxzX21hZzsKKyAgKiBJZiBvcGVyYXRpb24gPT0gU0VOU09SU19QUk9DX1JFQUxfUkVBRCwgeW91IG11c3QgcmVhZCBpbmZvcm1hdGlvbgorICAgIGZyb20gdGhlIGNoaXAgYW5kIHJldHVybiBpdCBpbiByZXN1bHRzLiBUaGUgbnVtYmVyIG9mIGludGVnZXJzCisgICAgdG8gZGlzcGxheSBzaG91bGQgYmUgcHV0IGluIG5yZWxzX21hZzsKKyAgKiBJZiBvcGVyYXRpb24gPT0gU0VOU09SU19QUk9DX1JFQUxfV1JJVEUsIHlvdSBtdXN0IHdyaXRlIHRoZQorICAgIHN1cHBsaWVkIGluZm9ybWF0aW9uIHRvIHRoZSBjaGlwLiBucmVsc19tYWcgd2lsbCBjb250YWluIHRoZSBudW1iZXIKKyAgICBvZiBpbnRlZ2VycywgcmVzdWx0cyB0aGUgaW50ZWdlcnMgdGhlbXNlbHZlcy4KKworVGhlICpfcHJvY19yZWFsIGZ1bmN0aW9ucyB3aWxsIGRpc3BsYXkgdGhlIGVsZW1lbnRzIGFzIHJlYWxzIGZvciB0aGUKKy9wcm9jIGludGVyZmFjZS4gSWYgeW91IHNldCB0aGUgbWFnbml0dWRlIHRvIDIsIGFuZCBzdXBwbHkgMzQ1IGZvcgorU0VOU09SU19QUk9DX1JFQUxfUkVBRCwgaXQgd291bGQgZGlzcGxheSAzLjQ1OyBhbmQgaWYgdGhlIHVzZXIgd291bGQKK3dyaXRlIDQ1LjYgdG8gdGhlIC9wcm9jIGZpbGUsIGl0IHdvdWxkIGJlIHJldHVybmVkIGFzIDQ1NjAgZm9yCitTRU5TT1JTX1BST0NfUkVBTF9XUklURS4gQSBtYWduaXR1ZGUgbWF5IGV2ZW4gYmUgbmVnYXRpdmUhCisKK0FuIGV4YW1wbGUgZnVuY3Rpb246CisKKyAgLyogRk9PX0ZST01fUkVHIGFuZCBGT09fVE9fUkVHIHRyYW5zbGF0ZSBiZXR3ZWVuIHNjYWxlZCB2YWx1ZXMgYW5kCisgICAgIHJlZ2lzdGVyIHZhbHVlcy4gTm90ZSB0aGUgdXNlIG9mIHRoZSByZWFkIGNhY2hlLiAqLworICB2b2lkIGZvb19pbihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgb3BlcmF0aW9uLCBpbnQgY3RsX25hbWUsIAorICAgICAgICAgICAgICBpbnQgKm5yZWxzX21hZywgbG9uZyAqcmVzdWx0cykKKyAgeworICAgIHN0cnVjdCBmb29fZGF0YSAqZGF0YSA9IGNsaWVudC0+ZGF0YTsKKyAgICBpbnQgbnIgPSBjdGxfbmFtZSAtIEZPT19TWVNDVExfRlVOQzE7IC8qIHJlZHVjZSB0byAwIHVwd2FyZHMgKi8KKyAgICAKKyAgICBpZiAob3BlcmF0aW9uID09IFNFTlNPUlNfUFJPQ19SRUFMX0lORk8pCisgICAgICAqbnJlbHNfbWFnID0gMjsKKyAgICBlbHNlIGlmIChvcGVyYXRpb24gPT0gU0VOU09SU19QUk9DX1JFQUxfUkVBRCkgeworICAgICAgLyogVXBkYXRlIHRoZSByZWFkaW5ncyBjYWNoZSAoaWYgbmVjZXNzYXJ5KSAqLworICAgICAgZm9vX3VwZGF0ZV9jbGllbnQoY2xpZW50KTsKKyAgICAgIC8qIEdldCB0aGUgcmVhZGluZ3MgZnJvbSB0aGUgY2FjaGUgKi8KKyAgICAgIHJlc3VsdHNbMF0gPSBGT09fRlJPTV9SRUcoZGF0YS0+Zm9vX2Z1bmNfYmFzZVtucl0pOworICAgICAgcmVzdWx0c1sxXSA9IEZPT19GUk9NX1JFRyhkYXRhLT5mb29fZnVuY19tb3JlW25yXSk7CisgICAgICByZXN1bHRzWzJdID0gRk9PX0ZST01fUkVHKGRhdGEtPmZvb19mdW5jX3JlYWRvbmx5W25yXSk7CisgICAgICAqbnJlbHNfbWFnID0gMjsKKyAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PSBTRU5TT1JTX1BST0NfUkVBTF9XUklURSkgeworICAgICAgaWYgKCpucmVsc19tYWcgPj0gMSkgeworICAgICAgICAvKiBVcGRhdGUgdGhlIGNhY2hlICovCisgICAgICAgIGRhdGEtPmZvb19iYXNlW25yXSA9IEZPT19UT19SRUcocmVzdWx0c1swXSk7CisgICAgICAgIC8qIFVwZGF0ZSB0aGUgY2hpcCAqLworICAgICAgICBmb29fd3JpdGVfdmFsdWUoY2xpZW50LEZPT19SRUdfRlVOQ19CQVNFKG5yKSxkYXRhLT5mb29fYmFzZVtucl0pOworICAgICAgfQorICAgICAgaWYgKCpucmVsc19tYWcgPj0gMikgeworICAgICAgICAvKiBVcGRhdGUgdGhlIGNhY2hlICovCisgICAgICAgIGRhdGEtPmZvb19tb3JlW25yXSA9IEZPT19UT19SRUcocmVzdWx0c1sxXSk7CisgICAgICAgIC8qIFVwZGF0ZSB0aGUgY2hpcCAqLworICAgICAgICBmb29fd3JpdGVfdmFsdWUoY2xpZW50LEZPT19SRUdfRlVOQ19NT1JFKG5yKSxkYXRhLT5mb29fbW9yZVtucl0pOworICAgICAgfQorICAgIH0KKyAgfQo=