XGlucHV0IHRleGluZm8gQGMgLSotIHRleGluZm8gLSotCkBjICUqKnN0YXJ0IG9mIGhlYWRlcgpAc2V0ZmlsZW5hbWUgcWVtdS1kb2MuaW5mbwpAc2V0dGl0bGUgUUVNVSBFbXVsYXRvciBVc2VyIERvY3VtZW50YXRpb24KQGV4YW1wbGVpbmRlbnQgMApAcGFyYWdyYXBoaW5kZW50IDAKQGMgJSoqZW5kIG9mIGhlYWRlcgoKQGlmdGV4CkB0aXRsZXBhZ2UKQHNwIDcKQGNlbnRlciBAdGl0bGVmb250e1FFTVUgRW11bGF0b3J9CkBzcCAxCkBjZW50ZXIgQHRpdGxlZm9udHtVc2VyIERvY3VtZW50YXRpb259CkBzcCAzCkBlbmQgdGl0bGVwYWdlCkBlbmQgaWZ0ZXgKCkBpZm5vdHRleApAbm9kZSBUb3AKQHRvcAoKQG1lbnUKKiBJbnRyb2R1Y3Rpb246OgoqIEluc3RhbGxhdGlvbjo6CiogUUVNVSBQQyBTeXN0ZW0gZW11bGF0b3I6OgoqIFFFTVUgU3lzdGVtIGVtdWxhdG9yIGZvciBub24gUEMgdGFyZ2V0czo6CiogUUVNVSBVc2VyIHNwYWNlIGVtdWxhdG9yOjoKKiBjb21waWxhdGlvbjo6IENvbXBpbGF0aW9uIGZyb20gdGhlIHNvdXJjZXMKKiBJbmRleDo6CkBlbmQgbWVudQpAZW5kIGlmbm90dGV4CgpAY29udGVudHMKCkBub2RlIEludHJvZHVjdGlvbgpAY2hhcHRlciBJbnRyb2R1Y3Rpb24KCkBtZW51CiogaW50cm9fZmVhdHVyZXM6OiBGZWF0dXJlcwpAZW5kIG1lbnUKCkBub2RlIGludHJvX2ZlYXR1cmVzCkBzZWN0aW9uIEZlYXR1cmVzCgpRRU1VIGlzIGEgRkFTVCEgcHJvY2Vzc29yIGVtdWxhdG9yIHVzaW5nIGR5bmFtaWMgdHJhbnNsYXRpb24gdG8KYWNoaWV2ZSBnb29kIGVtdWxhdGlvbiBzcGVlZC4KClFFTVUgaGFzIHR3byBvcGVyYXRpbmcgbW9kZXM6CgpAaXRlbWl6ZSBAbWludXMKCkBpdGVtCkZ1bGwgc3lzdGVtIGVtdWxhdGlvbi4gSW4gdGhpcyBtb2RlLCBRRU1VIGVtdWxhdGVzIGEgZnVsbCBzeXN0ZW0gKGZvcgpleGFtcGxlIGEgUEMpLCBpbmNsdWRpbmcgb25lIG9yIHNldmVyYWwgcHJvY2Vzc29ycyBhbmQgdmFyaW91cwpwZXJpcGhlcmFscy4gSXQgY2FuIGJlIHVzZWQgdG8gbGF1bmNoIGRpZmZlcmVudCBPcGVyYXRpbmcgU3lzdGVtcwp3aXRob3V0IHJlYm9vdGluZyB0aGUgUEMgb3IgdG8gZGVidWcgc3lzdGVtIGNvZGUuCgpAaXRlbQpVc2VyIG1vZGUgZW11bGF0aW9uLiBJbiB0aGlzIG1vZGUsIFFFTVUgY2FuIGxhdW5jaApwcm9jZXNzZXMgY29tcGlsZWQgZm9yIG9uZSBDUFUgb24gYW5vdGhlciBDUFUuIEl0IGNhbiBiZSB1c2VkIHRvCmxhdW5jaCB0aGUgV2luZSBXaW5kb3dzIEFQSSBlbXVsYXRvciAoQHVybHtodHRwOi8vd3d3LndpbmVocS5vcmd9KSBvcgp0byBlYXNlIGNyb3NzLWNvbXBpbGF0aW9uIGFuZCBjcm9zcy1kZWJ1Z2dpbmcuCgpAZW5kIGl0ZW1pemUKClFFTVUgY2FuIHJ1biB3aXRob3V0IGFuIGhvc3Qga2VybmVsIGRyaXZlciBhbmQgeWV0IGdpdmVzIGFjY2VwdGFibGUKcGVyZm9ybWFuY2UuCgpGb3Igc3lzdGVtIGVtdWxhdGlvbiwgdGhlIGZvbGxvd2luZyBoYXJkd2FyZSB0YXJnZXRzIGFyZSBzdXBwb3J0ZWQ6CkBpdGVtaXplCkBpdGVtIFBDICh4ODYgb3IgeDg2XzY0IHByb2Nlc3NvcikKQGl0ZW0gSVNBIFBDIChvbGQgc3R5bGUgUEMgd2l0aG91dCBQQ0kgYnVzKQpAaXRlbSBQUkVQIChQb3dlclBDIHByb2Nlc3NvcikKQGl0ZW0gRzMgQmVpZ2UgUG93ZXJNYWMgKFBvd2VyUEMgcHJvY2Vzc29yKQpAaXRlbSBNYWM5OSBQb3dlck1hYyAoUG93ZXJQQyBwcm9jZXNzb3IsIGluIHByb2dyZXNzKQpAaXRlbSBTdW40bS9TdW40Yy9TdW40ZCAoMzItYml0IFNwYXJjIHByb2Nlc3NvcikKQGl0ZW0gU3VuNHUvU3VuNHYgKDY0LWJpdCBTcGFyYyBwcm9jZXNzb3IsIGluIHByb2dyZXNzKQpAaXRlbSBNYWx0YSBib2FyZCAoMzItYml0IGFuZCA2NC1iaXQgTUlQUyBwcm9jZXNzb3JzKQpAaXRlbSBNSVBTIE1hZ251bSAoNjQtYml0IE1JUFMgcHJvY2Vzc29yKQpAaXRlbSBBUk0gSW50ZWdyYXRvci9DUCAoQVJNKQpAaXRlbSBBUk0gVmVyc2F0aWxlIGJhc2Vib2FyZCAoQVJNKQpAaXRlbSBBUk0gUmVhbFZpZXcgRW11bGF0aW9uIGJhc2Vib2FyZCAoQVJNKQpAaXRlbSBTcGl0eiwgQWtpdGEsIEJvcnpvaSwgVGVycmllciBhbmQgVG9zYSBQREFzIChQWEEyNzAgcHJvY2Vzc29yKQpAaXRlbSBMdW1pbmFyeSBNaWNybyBMTTNTODExRVZCIChBUk0gQ29ydGV4LU0zKQpAaXRlbSBMdW1pbmFyeSBNaWNybyBMTTNTNjk2NUVWQiAoQVJNIENvcnRleC1NMykKQGl0ZW0gRnJlZXNjYWxlIE1DRjUyMDhFVkIgKENvbGRGaXJlIFYyKS4KQGl0ZW0gQXJuZXdzaCBNQ0Y1MjA2IGV2YWx1YXRpb24gYm9hcmQgKENvbGRGaXJlIFYyKS4KQGl0ZW0gUGFsbSBUdW5nc3RlbnxFIFBEQSAoT01BUDMxMCBwcm9jZXNzb3IpCkBpdGVtIE44MDAgYW5kIE44MTAgdGFibGV0cyAoT01BUDI0MjAgcHJvY2Vzc29yKQpAaXRlbSBNdXNpY1BhbCAoTVY4OFc4NjE4IEFSTSBwcm9jZXNzb3IpCkBpdGVtIEd1bXN0aXggIkNvbm5leCIgYW5kICJWZXJkZXgiIG1vdGhlcmJvYXJkcyAoUFhBMjU1LzI3MCkuCkBpdGVtIFNpZW1lbnMgU1gxIHNtYXJ0cGhvbmUgKE9NQVAzMTAgcHJvY2Vzc29yKQpAaXRlbSBTeWJvcmcgU1ZQIGJhc2UgbW9kZWwgKEFSTSBDb3J0ZXgtQTgpLgpAaXRlbSBBWElTLURldmJvYXJkODggKENSSVN2MzIgRVRSQVgtRlMpLgpAaXRlbSBQZXRhbG9naXggU3BhcnRhbiAzYURTUDE4MDAgTU1VIHJlZiBkZXNpZ24gKE1pY3JvQmxhemUpLgpAZW5kIGl0ZW1pemUKCkZvciB1c2VyIGVtdWxhdGlvbiwgeDg2LCBQb3dlclBDLCBBUk0sIDMyLWJpdCBNSVBTLCBTcGFyYzMyLzY0LCBDb2xkRmlyZShtNjhrKSwgQ1JJU3YzMiBhbmQgTWljcm9CbGF6ZSBDUFVzIGFyZSBzdXBwb3J0ZWQuCgpAbm9kZSBJbnN0YWxsYXRpb24KQGNoYXB0ZXIgSW5zdGFsbGF0aW9uCgpJZiB5b3Ugd2FudCB0byBjb21waWxlIFFFTVUgeW91cnNlbGYsIHNlZSBAcmVme2NvbXBpbGF0aW9ufS4KCkBtZW51CiogaW5zdGFsbF9saW51eDo6ICAgTGludXgKKiBpbnN0YWxsX3dpbmRvd3M6OiBXaW5kb3dzCiogaW5zdGFsbF9tYWM6OiAgICAgTWFjaW50b3NoCkBlbmQgbWVudQoKQG5vZGUgaW5zdGFsbF9saW51eApAc2VjdGlvbiBMaW51eAoKSWYgYSBwcmVjb21waWxlZCBwYWNrYWdlIGlzIGF2YWlsYWJsZSBmb3IgeW91ciBkaXN0cmlidXRpb24gLSB5b3UganVzdApoYXZlIHRvIGluc3RhbGwgaXQuIE90aGVyd2lzZSwgc2VlIEByZWZ7Y29tcGlsYXRpb259LgoKQG5vZGUgaW5zdGFsbF93aW5kb3dzCkBzZWN0aW9uIFdpbmRvd3MKCkRvd25sb2FkIHRoZSBleHBlcmltZW50YWwgYmluYXJ5IGluc3RhbGxlciBhdApAdXJse2h0dHA6Ly93d3cuZnJlZS5vc3pvby5vcmcvQC9kb3dubG9hZC5odG1sfS4KCkBub2RlIGluc3RhbGxfbWFjCkBzZWN0aW9uIE1hYyBPUyBYCgpEb3dubG9hZCB0aGUgZXhwZXJpbWVudGFsIGJpbmFyeSBpbnN0YWxsZXIgYXQKQHVybHtodHRwOi8vd3d3LmZyZWUub3N6b28ub3JnL0AvZG93bmxvYWQuaHRtbH0uCgpAbm9kZSBRRU1VIFBDIFN5c3RlbSBlbXVsYXRvcgpAY2hhcHRlciBRRU1VIFBDIFN5c3RlbSBlbXVsYXRvcgoKQG1lbnUKKiBwY3N5c19pbnRyb2R1Y3Rpb246OiBJbnRyb2R1Y3Rpb24KKiBwY3N5c19xdWlja3N0YXJ0OjogICBRdWljayBTdGFydAoqIHNlY19pbnZvY2F0aW9uOjogICAgIEludm9jYXRpb24KKiBwY3N5c19rZXlzOjogICAgICAgICBLZXlzCiogcGNzeXNfbW9uaXRvcjo6ICAgICAgUUVNVSBNb25pdG9yCiogZGlza19pbWFnZXM6OiAgICAgICAgRGlzayBJbWFnZXMKKiBwY3N5c19uZXR3b3JrOjogICAgICBOZXR3b3JrIGVtdWxhdGlvbgoqIGRpcmVjdF9saW51eF9ib290OjogIERpcmVjdCBMaW51eCBCb290CiogcGNzeXNfdXNiOjogICAgICAgICAgVVNCIGVtdWxhdGlvbgoqIHZuY19zZWN1cml0eTo6ICAgICAgIFZOQyBzZWN1cml0eQoqIGdkYl91c2FnZTo6ICAgICAgICAgIEdEQiB1c2FnZQoqIHBjc3lzX29zX3NwZWNpZmljOjogIFRhcmdldCBPUyBzcGVjaWZpYyBpbmZvcm1hdGlvbgpAZW5kIG1lbnUKCkBub2RlIHBjc3lzX2ludHJvZHVjdGlvbgpAc2VjdGlvbiBJbnRyb2R1Y3Rpb24KCkBjIG1hbiBiZWdpbiBERVNDUklQVElPTgoKVGhlIFFFTVUgUEMgU3lzdGVtIGVtdWxhdG9yIHNpbXVsYXRlcyB0aGUKZm9sbG93aW5nIHBlcmlwaGVyYWxzOgoKQGl0ZW1pemUgQG1pbnVzCkBpdGVtCmk0NDBGWCBob3N0IFBDSSBicmlkZ2UgYW5kIFBJSVgzIFBDSSB0byBJU0EgYnJpZGdlCkBpdGVtCkNpcnJ1cyBDTEdEIDU0NDYgUENJIFZHQSBjYXJkIG9yIGR1bW15IFZHQSBjYXJkIHdpdGggQm9jaHMgVkVTQQpleHRlbnNpb25zIChoYXJkd2FyZSBsZXZlbCwgaW5jbHVkaW5nIGFsbCBub24gc3RhbmRhcmQgbW9kZXMpLgpAaXRlbQpQUy8yIG1vdXNlIGFuZCBrZXlib2FyZApAaXRlbQoyIFBDSSBJREUgaW50ZXJmYWNlcyB3aXRoIGhhcmQgZGlzayBhbmQgQ0QtUk9NIHN1cHBvcnQKQGl0ZW0KRmxvcHB5IGRpc2sKQGl0ZW0KUENJIGFuZCBJU0EgbmV0d29yayBhZGFwdGVycwpAaXRlbQpTZXJpYWwgcG9ydHMKQGl0ZW0KQ3JlYXRpdmUgU291bmRCbGFzdGVyIDE2IHNvdW5kIGNhcmQKQGl0ZW0KRU5TT05JUSBBdWRpb1BDSSBFUzEzNzAgc291bmQgY2FyZApAaXRlbQpJbnRlbCA4MjgwMUFBIEFDOTcgQXVkaW8gY29tcGF0aWJsZSBzb3VuZCBjYXJkCkBpdGVtCkFkbGliKE9QTDIpIC0gWWFtYWhhIFlNMzgxMiBjb21wYXRpYmxlIGNoaXAKQGl0ZW0KR3JhdmlzIFVsdHJhc291bmQgR0YxIHNvdW5kIGNhcmQKQGl0ZW0KQ1M0MjMxQSBjb21wYXRpYmxlIHNvdW5kIGNhcmQKQGl0ZW0KUENJIFVIQ0kgVVNCIGNvbnRyb2xsZXIgYW5kIGEgdmlydHVhbCBVU0IgaHViLgpAZW5kIGl0ZW1pemUKClNNUCBpcyBzdXBwb3J0ZWQgd2l0aCB1cCB0byAyNTUgQ1BVcy4KCk5vdGUgdGhhdCBhZGxpYiwgZ3VzIGFuZCBjczQyMzFhIGFyZSBvbmx5IGF2YWlsYWJsZSB3aGVuIFFFTVUgd2FzCmNvbmZpZ3VyZWQgd2l0aCAtLWF1ZGlvLWNhcmQtbGlzdCBvcHRpb24gY29udGFpbmluZyB0aGUgbmFtZShzKSBvZgpyZXF1aXJlZCBjYXJkKHMpLgoKUUVNVSB1c2VzIHRoZSBQQyBCSU9TIGZyb20gdGhlIEJvY2hzIHByb2plY3QgYW5kIHRoZSBQbGV4ODYvQm9jaHMgTEdQTApWR0EgQklPUy4KClFFTVUgdXNlcyBZTTM4MTIgZW11bGF0aW9uIGJ5IFRhdHN1eXVraSBTYXRvaC4KClFFTVUgdXNlcyBHVVMgZW11bGF0aW9uKEdVU0VNVTMyIEB1cmx7aHR0cDovL3d3dy5kZWlubWVpc3Rlci5kZS9ndXNlbXUvfSkKYnkgVGlib3IgIlRTIiBTY2jDvHR6LgoKTm90IHRoYXQsIGJ5IGRlZmF1bHQsIEdVUyBzaGFyZXMgSVJRKDcpIHdpdGggcGFyYWxsZWwgcG9ydHMgYW5kIHNvCnFlbXUgbXVzdCBiZSB0b2xkIHRvIG5vdCBoYXZlIHBhcmFsbGVsIHBvcnRzIHRvIGhhdmUgd29ya2luZyBHVVMKCkBleGFtcGxlCnFlbXUgZG9zLmltZyAtc291bmRodyBndXMgLXBhcmFsbGVsIG5vbmUKQGVuZCBleGFtcGxlCgpBbHRlcm5hdGl2ZWx5OgpAZXhhbXBsZQpxZW11IGRvcy5pbWcgLWRldmljZSBndXMsaXJxPTUKQGVuZCBleGFtcGxlCgpPciBzb21lIG90aGVyIHVuY2xhaW1lZCBJUlEuCgpDUzQyMzFBIGlzIHRoZSBjaGlwIHVzZWQgaW4gV2luZG93cyBTb3VuZCBTeXN0ZW0gYW5kIEdVU01BWCBwcm9kdWN0cwoKQGMgbWFuIGVuZAoKQG5vZGUgcGNzeXNfcXVpY2tzdGFydApAc2VjdGlvbiBRdWljayBTdGFydAoKRG93bmxvYWQgYW5kIHVuY29tcHJlc3MgdGhlIGxpbnV4IGltYWdlIChAZmlsZXtsaW51eC5pbWd9KSBhbmQgdHlwZToKCkBleGFtcGxlCnFlbXUgbGludXguaW1nCkBlbmQgZXhhbXBsZQoKTGludXggc2hvdWxkIGJvb3QgYW5kIGdpdmUgeW91IGEgcHJvbXB0LgoKQG5vZGUgc2VjX2ludm9jYXRpb24KQHNlY3Rpb24gSW52b2NhdGlvbgoKQGV4YW1wbGUKQGMgbWFuIGJlZ2luIFNZTk9QU0lTCnVzYWdlOiBxZW11IFtvcHRpb25zXSBbQHZhcntkaXNrX2ltYWdlfV0KQGMgbWFuIGVuZApAZW5kIGV4YW1wbGUKCkBjIG1hbiBiZWdpbiBPUFRJT05TCkB2YXJ7ZGlza19pbWFnZX0gaXMgYSByYXcgaGFyZCBkaXNrIGltYWdlIGZvciBJREUgaGFyZCBkaXNrIDAuIFNvbWUKdGFyZ2V0cyBkbyBub3QgbmVlZCBhIGRpc2sgaW1hZ2UuCgpAaW5jbHVkZSBxZW11LW9wdGlvbnMudGV4aQoKQGMgbWFuIGVuZAoKQG5vZGUgcGNzeXNfa2V5cwpAc2VjdGlvbiBLZXlzCgpAYyBtYW4gYmVnaW4gT1BUSU9OUwoKRHVyaW5nIHRoZSBncmFwaGljYWwgZW11bGF0aW9uLCB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIGtleXM6CkB0YWJsZSBAa2V5CkBpdGVtIEN0cmwtQWx0LWYKVG9nZ2xlIGZ1bGwgc2NyZWVuCgpAaXRlbSBDdHJsLUFsdC11ClJlc3RvcmUgdGhlIHNjcmVlbidzIHVuLXNjYWxlZCBkaW1lbnNpb25zCgpAaXRlbSBDdHJsLUFsdC1uClN3aXRjaCB0byB2aXJ0dWFsIGNvbnNvbGUgJ24nLiBTdGFuZGFyZCBjb25zb2xlIG1hcHBpbmdzIGFyZToKQHRhYmxlIEBlbXBoCkBpdGVtIDEKVGFyZ2V0IHN5c3RlbSBkaXNwbGF5CkBpdGVtIDIKTW9uaXRvcgpAaXRlbSAzClNlcmlhbCBwb3J0CkBlbmQgdGFibGUKCkBpdGVtIEN0cmwtQWx0ClRvZ2dsZSBtb3VzZSBhbmQga2V5Ym9hcmQgZ3JhYi4KQGVuZCB0YWJsZQoKSW4gdGhlIHZpcnR1YWwgY29uc29sZXMsIHlvdSBjYW4gdXNlIEBrZXl7Q3RybC1VcH0sIEBrZXl7Q3RybC1Eb3dufSwKQGtleXtDdHJsLVBhZ2VVcH0gYW5kIEBrZXl7Q3RybC1QYWdlRG93bn0gdG8gbW92ZSBpbiB0aGUgYmFjayBsb2cuCgpEdXJpbmcgZW11bGF0aW9uLCBpZiB5b3UgYXJlIHVzaW5nIHRoZSBAb3B0aW9uey1ub2dyYXBoaWN9IG9wdGlvbiwgdXNlCkBrZXl7Q3RybC1hIGh9IHRvIGdldCB0ZXJtaW5hbCBjb21tYW5kczoKCkB0YWJsZSBAa2V5CkBpdGVtIEN0cmwtYSBoCkBpdGVtIEN0cmwtYSA/ClByaW50IHRoaXMgaGVscApAaXRlbSBDdHJsLWEgeApFeGl0IGVtdWxhdG9yCkBpdGVtIEN0cmwtYSBzClNhdmUgZGlzayBkYXRhIGJhY2sgdG8gZmlsZSAoaWYgLXNuYXBzaG90KQpAaXRlbSBDdHJsLWEgdApUb2dnbGUgY29uc29sZSB0aW1lc3RhbXBzCkBpdGVtIEN0cmwtYSBiClNlbmQgYnJlYWsgKG1hZ2ljIHN5c3JxIGluIExpbnV4KQpAaXRlbSBDdHJsLWEgYwpTd2l0Y2ggYmV0d2VlbiBjb25zb2xlIGFuZCBtb25pdG9yCkBpdGVtIEN0cmwtYSBDdHJsLWEKU2VuZCBDdHJsLWEKQGVuZCB0YWJsZQpAYyBtYW4gZW5kCgpAaWdub3JlCgpAYyBtYW4gYmVnaW4gU0VFQUxTTwpUaGUgSFRNTCBkb2N1bWVudGF0aW9uIG9mIFFFTVUgZm9yIG1vcmUgcHJlY2lzZSBpbmZvcm1hdGlvbiBhbmQgTGludXgKdXNlciBtb2RlIGVtdWxhdG9yIGludm9jYXRpb24uCkBjIG1hbiBlbmQKCkBjIG1hbiBiZWdpbiBBVVRIT1IKRmFicmljZSBCZWxsYXJkCkBjIG1hbiBlbmQKCkBlbmQgaWdub3JlCgpAbm9kZSBwY3N5c19tb25pdG9yCkBzZWN0aW9uIFFFTVUgTW9uaXRvcgoKVGhlIFFFTVUgbW9uaXRvciBpcyB1c2VkIHRvIGdpdmUgY29tcGxleCBjb21tYW5kcyB0byB0aGUgUUVNVQplbXVsYXRvci4gWW91IGNhbiB1c2UgaXQgdG86CgpAaXRlbWl6ZSBAbWludXMKCkBpdGVtClJlbW92ZSBvciBpbnNlcnQgcmVtb3ZhYmxlIG1lZGlhIGltYWdlcwooc3VjaCBhcyBDRC1ST00gb3IgZmxvcHBpZXMpLgoKQGl0ZW0KRnJlZXplL3VuZnJlZXplIHRoZSBWaXJ0dWFsIE1hY2hpbmUgKFZNKSBhbmQgc2F2ZSBvciByZXN0b3JlIGl0cyBzdGF0ZQpmcm9tIGEgZGlzayBmaWxlLgoKQGl0ZW0gSW5zcGVjdCB0aGUgVk0gc3RhdGUgd2l0aG91dCBhbiBleHRlcm5hbCBkZWJ1Z2dlci4KCkBlbmQgaXRlbWl6ZQoKQHN1YnNlY3Rpb24gQ29tbWFuZHMKClRoZSBmb2xsb3dpbmcgY29tbWFuZHMgYXJlIGF2YWlsYWJsZToKCkBpbmNsdWRlIHFlbXUtbW9uaXRvci50ZXhpCgpAc3Vic2VjdGlvbiBJbnRlZ2VyIGV4cHJlc3Npb25zCgpUaGUgbW9uaXRvciB1bmRlcnN0YW5kcyBpbnRlZ2VycyBleHByZXNzaW9ucyBmb3IgZXZlcnkgaW50ZWdlcgphcmd1bWVudC4gWW91IGNhbiB1c2UgcmVnaXN0ZXIgbmFtZXMgdG8gZ2V0IHRoZSB2YWx1ZSBvZiBzcGVjaWZpY3MKQ1BVIHJlZ2lzdGVycyBieSBwcmVmaXhpbmcgdGhlbSB3aXRoIEBlbXBoeyR9LgoKQG5vZGUgZGlza19pbWFnZXMKQHNlY3Rpb24gRGlzayBJbWFnZXMKClNpbmNlIHZlcnNpb24gMC42LjEsIFFFTVUgc3VwcG9ydHMgbWFueSBkaXNrIGltYWdlIGZvcm1hdHMsIGluY2x1ZGluZwpncm93YWJsZSBkaXNrIGltYWdlcyAodGhlaXIgc2l6ZSBpbmNyZWFzZSBhcyBub24gZW1wdHkgc2VjdG9ycyBhcmUKd3JpdHRlbiksIGNvbXByZXNzZWQgYW5kIGVuY3J5cHRlZCBkaXNrIGltYWdlcy4gVmVyc2lvbiAwLjguMyBhZGRlZAp0aGUgbmV3IHFjb3cyIGRpc2sgaW1hZ2UgZm9ybWF0IHdoaWNoIGlzIGVzc2VudGlhbCB0byBzdXBwb3J0IFZNCnNuYXBzaG90cy4KCkBtZW51CiogZGlza19pbWFnZXNfcXVpY2tzdGFydDo6ICAgIFF1aWNrIHN0YXJ0IGZvciBkaXNrIGltYWdlIGNyZWF0aW9uCiogZGlza19pbWFnZXNfc25hcHNob3RfbW9kZTo6IFNuYXBzaG90IG1vZGUKKiB2bV9zbmFwc2hvdHM6OiAgICAgICAgICAgICAgVk0gc25hcHNob3RzCiogcWVtdV9pbWdfaW52b2NhdGlvbjo6ICAgICAgIHFlbXUtaW1nIEludm9jYXRpb24KKiBxZW11X25iZF9pbnZvY2F0aW9uOjogICAgICAgcWVtdS1uYmQgSW52b2NhdGlvbgoqIGhvc3RfZHJpdmVzOjogICAgICAgICAgICAgICBVc2luZyBob3N0IGRyaXZlcwoqIGRpc2tfaW1hZ2VzX2ZhdF9pbWFnZXM6OiAgICBWaXJ0dWFsIEZBVCBkaXNrIGltYWdlcwoqIGRpc2tfaW1hZ2VzX25iZDo6ICAgICAgICAgICBOQkQgYWNjZXNzCkBlbmQgbWVudQoKQG5vZGUgZGlza19pbWFnZXNfcXVpY2tzdGFydApAc3Vic2VjdGlvbiBRdWljayBzdGFydCBmb3IgZGlzayBpbWFnZSBjcmVhdGlvbgoKWW91IGNhbiBjcmVhdGUgYSBkaXNrIGltYWdlIHdpdGggdGhlIGNvbW1hbmQ6CkBleGFtcGxlCnFlbXUtaW1nIGNyZWF0ZSBteWltYWdlLmltZyBteXNpemUKQGVuZCBleGFtcGxlCndoZXJlIEB2YXJ7bXlpbWFnZS5pbWd9IGlzIHRoZSBkaXNrIGltYWdlIGZpbGVuYW1lIGFuZCBAdmFye215c2l6ZX0gaXMgaXRzCnNpemUgaW4ga2lsb2J5dGVzLiBZb3UgY2FuIGFkZCBhbiBAY29kZXtNfSBzdWZmaXggdG8gZ2l2ZSB0aGUgc2l6ZSBpbgptZWdhYnl0ZXMgYW5kIGEgQGNvZGV7R30gc3VmZml4IGZvciBnaWdhYnl0ZXMuCgpTZWUgQHJlZntxZW11X2ltZ19pbnZvY2F0aW9ufSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KCkBub2RlIGRpc2tfaW1hZ2VzX3NuYXBzaG90X21vZGUKQHN1YnNlY3Rpb24gU25hcHNob3QgbW9kZQoKSWYgeW91IHVzZSB0aGUgb3B0aW9uIEBvcHRpb257LXNuYXBzaG90fSwgYWxsIGRpc2sgaW1hZ2VzIGFyZQpjb25zaWRlcmVkIGFzIHJlYWQgb25seS4gV2hlbiBzZWN0b3JzIGluIHdyaXR0ZW4sIHRoZXkgYXJlIHdyaXR0ZW4gaW4KYSB0ZW1wb3JhcnkgZmlsZSBjcmVhdGVkIGluIEBmaWxley90bXB9LiBZb3UgY2FuIGhvd2V2ZXIgZm9yY2UgdGhlCndyaXRlIGJhY2sgdG8gdGhlIHJhdyBkaXNrIGltYWdlcyBieSB1c2luZyB0aGUgQGNvZGV7Y29tbWl0fSBtb25pdG9yCmNvbW1hbmQgKG9yIEBrZXl7Qy1hIHN9IGluIHRoZSBzZXJpYWwgY29uc29sZSkuCgpAbm9kZSB2bV9zbmFwc2hvdHMKQHN1YnNlY3Rpb24gVk0gc25hcHNob3RzCgpWTSBzbmFwc2hvdHMgYXJlIHNuYXBzaG90cyBvZiB0aGUgY29tcGxldGUgdmlydHVhbCBtYWNoaW5lIGluY2x1ZGluZwpDUFUgc3RhdGUsIFJBTSwgZGV2aWNlIHN0YXRlIGFuZCB0aGUgY29udGVudCBvZiBhbGwgdGhlIHdyaXRhYmxlCmRpc2tzLiBJbiBvcmRlciB0byB1c2UgVk0gc25hcHNob3RzLCB5b3UgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBub24KcmVtb3ZhYmxlIGFuZCB3cml0YWJsZSBibG9jayBkZXZpY2UgdXNpbmcgdGhlIEBjb2Rle3Fjb3cyfSBkaXNrIGltYWdlCmZvcm1hdC4gTm9ybWFsbHkgdGhpcyBkZXZpY2UgaXMgdGhlIGZpcnN0IHZpcnR1YWwgaGFyZCBkcml2ZS4KClVzZSB0aGUgbW9uaXRvciBjb21tYW5kIEBjb2Rle3NhdmV2bX0gdG8gY3JlYXRlIGEgbmV3IFZNIHNuYXBzaG90IG9yCnJlcGxhY2UgYW4gZXhpc3Rpbmcgb25lLiBBIGh1bWFuIHJlYWRhYmxlIG5hbWUgY2FuIGJlIGFzc2lnbmVkIHRvIGVhY2gKc25hcHNob3QgaW4gYWRkaXRpb24gdG8gaXRzIG51bWVyaWNhbCBJRC4KClVzZSBAY29kZXtsb2Fkdm19IHRvIHJlc3RvcmUgYSBWTSBzbmFwc2hvdCBhbmQgQGNvZGV7ZGVsdm19IHRvIHJlbW92ZQphIFZNIHNuYXBzaG90LiBAY29kZXtpbmZvIHNuYXBzaG90c30gbGlzdHMgdGhlIGF2YWlsYWJsZSBzbmFwc2hvdHMKd2l0aCB0aGVpciBhc3NvY2lhdGVkIGluZm9ybWF0aW9uOgoKQGV4YW1wbGUKKHFlbXUpIGluZm8gc25hcHNob3RzClNuYXBzaG90IGRldmljZXM6IGhkYQpTbmFwc2hvdCBsaXN0IChmcm9tIGhkYSk6CklEICAgICAgICBUQUcgICAgICAgICAgICAgICAgIFZNIFNJWkUgICAgICAgICAgICAgICAgREFURSAgICAgICBWTSBDTE9DSwoxICAgICAgICAgc3RhcnQgICAgICAgICAgICAgICAgICAgNDFNIDIwMDYtMDgtMDYgMTI6Mzg6MDIgICAwMDowMDoxNC45NTQKMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQwTSAyMDA2LTA4LTA2IDEyOjQzOjI5ICAgMDA6MDA6MTguNjMzCjMgICAgICAgICBtc3lzICAgICAgICAgICAgICAgICAgICA0ME0gMjAwNi0wOC0wNiAxMjo0NDowNCAgIDAwOjAwOjIzLjUxNApAZW5kIGV4YW1wbGUKCkEgVk0gc25hcHNob3QgaXMgbWFkZSBvZiBhIFZNIHN0YXRlIGluZm8gKGl0cyBzaXplIGlzIHNob3duIGluCkBjb2Rle2luZm8gc25hcHNob3RzfSkgYW5kIGEgc25hcHNob3Qgb2YgZXZlcnkgd3JpdGFibGUgZGlzayBpbWFnZS4KVGhlIFZNIHN0YXRlIGluZm8gaXMgc3RvcmVkIGluIHRoZSBmaXJzdCBAY29kZXtxY293Mn0gbm9uIHJlbW92YWJsZQphbmQgd3JpdGFibGUgYmxvY2sgZGV2aWNlLiBUaGUgZGlzayBpbWFnZSBzbmFwc2hvdHMgYXJlIHN0b3JlZCBpbgpldmVyeSBkaXNrIGltYWdlLiBUaGUgc2l6ZSBvZiBhIHNuYXBzaG90IGluIGEgZGlzayBpbWFnZSBpcyBkaWZmaWN1bHQKdG8gZXZhbHVhdGUgYW5kIGlzIG5vdCBzaG93biBieSBAY29kZXtpbmZvIHNuYXBzaG90c30gYmVjYXVzZSB0aGUKYXNzb2NpYXRlZCBkaXNrIHNlY3RvcnMgYXJlIHNoYXJlZCBhbW9uZyBhbGwgdGhlIHNuYXBzaG90cyB0byBzYXZlCmRpc2sgc3BhY2UgKG90aGVyd2lzZSBlYWNoIHNuYXBzaG90IHdvdWxkIG5lZWQgYSBmdWxsIGNvcHkgb2YgYWxsIHRoZQpkaXNrIGltYWdlcykuCgpXaGVuIHVzaW5nIHRoZSAodW5yZWxhdGVkKSBAY29kZXstc25hcHNob3R9IG9wdGlvbgooQHJlZntkaXNrX2ltYWdlc19zbmFwc2hvdF9tb2RlfSksIHlvdSBjYW4gYWx3YXlzIG1ha2UgVk0gc25hcHNob3RzLApidXQgdGhleSBhcmUgZGVsZXRlZCBhcyBzb29uIGFzIHlvdSBleGl0IFFFTVUuCgpWTSBzbmFwc2hvdHMgY3VycmVudGx5IGhhdmUgdGhlIGZvbGxvd2luZyBrbm93biBsaW1pdGF0aW9uczoKQGl0ZW1pemUKQGl0ZW0KVGhleSBjYW5ub3QgY29wZSB3aXRoIHJlbW92YWJsZSBkZXZpY2VzIGlmIHRoZXkgYXJlIHJlbW92ZWQgb3IKaW5zZXJ0ZWQgYWZ0ZXIgYSBzbmFwc2hvdCBpcyBkb25lLgpAaXRlbQpBIGZldyBkZXZpY2UgZHJpdmVycyBzdGlsbCBoYXZlIGluY29tcGxldGUgc25hcHNob3Qgc3VwcG9ydCBzbyB0aGVpcgpzdGF0ZSBpcyBub3Qgc2F2ZWQgb3IgcmVzdG9yZWQgcHJvcGVybHkgKGluIHBhcnRpY3VsYXIgVVNCKS4KQGVuZCBpdGVtaXplCgpAbm9kZSBxZW11X2ltZ19pbnZvY2F0aW9uCkBzdWJzZWN0aW9uIEBjb2Rle3FlbXUtaW1nfSBJbnZvY2F0aW9uCgpAaW5jbHVkZSBxZW11LWltZy50ZXhpCgpAbm9kZSBxZW11X25iZF9pbnZvY2F0aW9uCkBzdWJzZWN0aW9uIEBjb2Rle3FlbXUtbmJkfSBJbnZvY2F0aW9uCgpAaW5jbHVkZSBxZW11LW5iZC50ZXhpCgpAbm9kZSBob3N0X2RyaXZlcwpAc3Vic2VjdGlvbiBVc2luZyBob3N0IGRyaXZlcwoKSW4gYWRkaXRpb24gdG8gZGlzayBpbWFnZSBmaWxlcywgUUVNVSBjYW4gZGlyZWN0bHkgYWNjZXNzIGhvc3QKZGV2aWNlcy4gV2UgZGVzY3JpYmUgaGVyZSB0aGUgdXNhZ2UgZm9yIFFFTVUgdmVyc2lvbiA+PSAwLjguMy4KCkBzdWJzdWJzZWN0aW9uIExpbnV4CgpPbiBMaW51eCwgeW91IGNhbiBkaXJlY3RseSB1c2UgdGhlIGhvc3QgZGV2aWNlIGZpbGVuYW1lIGluc3RlYWQgb2YgYQpkaXNrIGltYWdlIGZpbGVuYW1lIHByb3ZpZGVkIHlvdSBoYXZlIGVub3VnaCBwcml2aWxlZ2VzIHRvIGFjY2VzcwppdC4gRm9yIGV4YW1wbGUsIHVzZSBAZmlsZXsvZGV2L2Nkcm9tfSB0byBhY2Nlc3MgdG8gdGhlIENEUk9NIG9yCkBmaWxley9kZXYvZmQwfSBmb3IgdGhlIGZsb3BweS4KCkB0YWJsZSBAY29kZQpAaXRlbSBDRApZb3UgY2FuIHNwZWNpZnkgYSBDRFJPTSBkZXZpY2UgZXZlbiBpZiBubyBDRFJPTSBpcyBsb2FkZWQuIFFFTVUgaGFzCnNwZWNpZmljIGNvZGUgdG8gZGV0ZWN0IENEUk9NIGluc2VydGlvbiBvciByZW1vdmFsLiBDRFJPTSBlamVjdGlvbiBieQp0aGUgZ3Vlc3QgT1MgaXMgc3VwcG9ydGVkLiBDdXJyZW50bHkgb25seSBkYXRhIENEcyBhcmUgc3VwcG9ydGVkLgpAaXRlbSBGbG9wcHkKWW91IGNhbiBzcGVjaWZ5IGEgZmxvcHB5IGRldmljZSBldmVuIGlmIG5vIGZsb3BweSBpcyBsb2FkZWQuIEZsb3BweQpyZW1vdmFsIGlzIGN1cnJlbnRseSBub3QgZGV0ZWN0ZWQgYWNjdXJhdGVseSAoaWYgeW91IGNoYW5nZSBmbG9wcHkKd2l0aG91dCBkb2luZyBmbG9wcHkgYWNjZXNzIHdoaWxlIHRoZSBmbG9wcHkgaXMgbm90IGxvYWRlZCwgdGhlIGd1ZXN0Ck9TIHdpbGwgdGhpbmsgdGhhdCB0aGUgc2FtZSBmbG9wcHkgaXMgbG9hZGVkKS4KQGl0ZW0gSGFyZCBkaXNrcwpIYXJkIGRpc2tzIGNhbiBiZSB1c2VkLiBOb3JtYWxseSB5b3UgbXVzdCBzcGVjaWZ5IHRoZSB3aG9sZSBkaXNrCihAZmlsZXsvZGV2L2hkYn0gaW5zdGVhZCBvZiBAZmlsZXsvZGV2L2hkYjF9KSBzbyB0aGF0IHRoZSBndWVzdCBPUyBjYW4Kc2VlIGl0IGFzIGEgcGFydGl0aW9uZWQgZGlzay4gV0FSTklORzogdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGRvLCBpdAppcyBiZXR0ZXIgdG8gb25seSBtYWtlIFJFQUQtT05MWSBhY2Nlc3NlcyB0byB0aGUgaGFyZCBkaXNrIG90aGVyd2lzZQp5b3UgbWF5IGNvcnJ1cHQgeW91ciBob3N0IGRhdGEgKHVzZSB0aGUgQG9wdGlvbnstc25hcHNob3R9IGNvbW1hbmQKbGluZSBvcHRpb24gb3IgbW9kaWZ5IHRoZSBkZXZpY2UgcGVybWlzc2lvbnMgYWNjb3JkaW5nbHkpLgpAZW5kIHRhYmxlCgpAc3Vic3Vic2VjdGlvbiBXaW5kb3dzCgpAdGFibGUgQGNvZGUKQGl0ZW0gQ0QKVGhlIHByZWZlcnJlZCBzeW50YXggaXMgdGhlIGRyaXZlIGxldHRlciAoZS5nLiBAZmlsZXtkOn0pLiBUaGUKYWx0ZXJuYXRlIHN5bnRheCBAZmlsZXtcXC5cZDp9IGlzIHN1cHBvcnRlZC4gQGZpbGV7L2Rldi9jZHJvbX0gaXMKc3VwcG9ydGVkIGFzIGFuIGFsaWFzIHRvIHRoZSBmaXJzdCBDRFJPTSBkcml2ZS4KCkN1cnJlbnRseSB0aGVyZSBpcyBubyBzcGVjaWZpYyBjb2RlIHRvIGhhbmRsZSByZW1vdmFibGUgbWVkaWEsIHNvIGl0CmlzIGJldHRlciB0byB1c2UgdGhlIEBjb2Rle2NoYW5nZX0gb3IgQGNvZGV7ZWplY3R9IG1vbml0b3IgY29tbWFuZHMgdG8KY2hhbmdlIG9yIGVqZWN0IG1lZGlhLgpAaXRlbSBIYXJkIGRpc2tzCkhhcmQgZGlza3MgY2FuIGJlIHVzZWQgd2l0aCB0aGUgc3ludGF4OiBAZmlsZXtcXC5cUGh5c2ljYWxEcml2ZUB2YXJ7Tn19CndoZXJlIEB2YXJ7Tn0gaXMgdGhlIGRyaXZlIG51bWJlciAoMCBpcyB0aGUgZmlyc3QgaGFyZCBkaXNrKS4KCldBUk5JTkc6IHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBkbywgaXQgaXMgYmV0dGVyIHRvIG9ubHkgbWFrZQpSRUFELU9OTFkgYWNjZXNzZXMgdG8gdGhlIGhhcmQgZGlzayBvdGhlcndpc2UgeW91IG1heSBjb3JydXB0IHlvdXIKaG9zdCBkYXRhICh1c2UgdGhlIEBvcHRpb257LXNuYXBzaG90fSBjb21tYW5kIGxpbmUgc28gdGhhdCB0aGUKbW9kaWZpY2F0aW9ucyBhcmUgd3JpdHRlbiBpbiBhIHRlbXBvcmFyeSBmaWxlKS4KQGVuZCB0YWJsZQoKCkBzdWJzdWJzZWN0aW9uIE1hYyBPUyBYCgpAZmlsZXsvZGV2L2Nkcm9tfSBpcyBhbiBhbGlhcyB0byB0aGUgZmlyc3QgQ0RST00uCgpDdXJyZW50bHkgdGhlcmUgaXMgbm8gc3BlY2lmaWMgY29kZSB0byBoYW5kbGUgcmVtb3ZhYmxlIG1lZGlhLCBzbyBpdAppcyBiZXR0ZXIgdG8gdXNlIHRoZSBAY29kZXtjaGFuZ2V9IG9yIEBjb2Rle2VqZWN0fSBtb25pdG9yIGNvbW1hbmRzIHRvCmNoYW5nZSBvciBlamVjdCBtZWRpYS4KCkBub2RlIGRpc2tfaW1hZ2VzX2ZhdF9pbWFnZXMKQHN1YnNlY3Rpb24gVmlydHVhbCBGQVQgZGlzayBpbWFnZXMKClFFTVUgY2FuIGF1dG9tYXRpY2FsbHkgY3JlYXRlIGEgdmlydHVhbCBGQVQgZGlzayBpbWFnZSBmcm9tIGEKZGlyZWN0b3J5IHRyZWUuIEluIG9yZGVyIHRvIHVzZSBpdCwganVzdCB0eXBlOgoKQGV4YW1wbGUKcWVtdSBsaW51eC5pbWcgLWhkYiBmYXQ6L215X2RpcmVjdG9yeQpAZW5kIGV4YW1wbGUKClRoZW4geW91IGFjY2VzcyBhY2Nlc3MgdG8gYWxsIHRoZSBmaWxlcyBpbiB0aGUgQGZpbGV7L215X2RpcmVjdG9yeX0KZGlyZWN0b3J5IHdpdGhvdXQgaGF2aW5nIHRvIGNvcHkgdGhlbSBpbiBhIGRpc2sgaW1hZ2Ugb3IgdG8gZXhwb3J0CnRoZW0gdmlhIFNBTUJBIG9yIE5GUy4gVGhlIGRlZmF1bHQgYWNjZXNzIGlzIEBlbXBoe3JlYWQtb25seX0uCgpGbG9wcGllcyBjYW4gYmUgZW11bGF0ZWQgd2l0aCB0aGUgQGNvZGV7OmZsb3BweTp9IG9wdGlvbjoKCkBleGFtcGxlCnFlbXUgbGludXguaW1nIC1mZGEgZmF0OmZsb3BweTovbXlfZGlyZWN0b3J5CkBlbmQgZXhhbXBsZQoKQSByZWFkL3dyaXRlIHN1cHBvcnQgaXMgYXZhaWxhYmxlIGZvciB0ZXN0aW5nIChiZXRhIHN0YWdlKSB3aXRoIHRoZQpAY29kZXs6cnc6fSBvcHRpb246CgpAZXhhbXBsZQpxZW11IGxpbnV4LmltZyAtZmRhIGZhdDpmbG9wcHk6cnc6L215X2RpcmVjdG9yeQpAZW5kIGV4YW1wbGUKCldoYXQgeW91IHNob3VsZCBAZW1waHtuZXZlcn0gZG86CkBpdGVtaXplCkBpdGVtIHVzZSBub24tQVNDSUkgZmlsZW5hbWVzIDsKQGl0ZW0gdXNlICItc25hcHNob3QiIHRvZ2V0aGVyIHdpdGggIjpydzoiIDsKQGl0ZW0gZXhwZWN0IGl0IHRvIHdvcmsgd2hlbiBsb2Fkdm0naW5nIDsKQGl0ZW0gd3JpdGUgdG8gdGhlIEZBVCBkaXJlY3Rvcnkgb24gdGhlIGhvc3Qgc3lzdGVtIHdoaWxlIGFjY2Vzc2luZyBpdCB3aXRoIHRoZSBndWVzdCBzeXN0ZW0uCkBlbmQgaXRlbWl6ZQoKQG5vZGUgZGlza19pbWFnZXNfbmJkCkBzdWJzZWN0aW9uIE5CRCBhY2Nlc3MKClFFTVUgY2FuIGFjY2VzcyBkaXJlY3RseSB0byBibG9jayBkZXZpY2UgZXhwb3J0ZWQgdXNpbmcgdGhlIE5ldHdvcmsgQmxvY2sgRGV2aWNlCnByb3RvY29sLgoKQGV4YW1wbGUKcWVtdSBsaW51eC5pbWcgLWhkYiBuYmQ6bXlfbmJkX3NlcnZlci5teWRvbWFpbi5vcmc6MTAyNApAZW5kIGV4YW1wbGUKCklmIHRoZSBOQkQgc2VydmVyIGlzIGxvY2F0ZWQgb24gdGhlIHNhbWUgaG9zdCwgeW91IGNhbiB1c2UgYW4gdW5peCBzb2NrZXQgaW5zdGVhZApvZiBhbiBpbmV0IHNvY2tldDoKCkBleGFtcGxlCnFlbXUgbGludXguaW1nIC1oZGIgbmJkOnVuaXg6L3RtcC9teV9zb2NrZXQKQGVuZCBleGFtcGxlCgpJbiB0aGlzIGNhc2UsIHRoZSBibG9jayBkZXZpY2UgbXVzdCBiZSBleHBvcnRlZCB1c2luZyBxZW11LW5iZDoKCkBleGFtcGxlCnFlbXUtbmJkIC0tc29ja2V0PS90bXAvbXlfc29ja2V0IG15X2Rpc2sucWNvdzIKQGVuZCBleGFtcGxlCgpUaGUgdXNlIG9mIHFlbXUtbmJkIGFsbG93cyB0byBzaGFyZSBhIGRpc2sgYmV0d2VlbiBzZXZlcmFsIGd1ZXN0czoKQGV4YW1wbGUKcWVtdS1uYmQgLS1zb2NrZXQ9L3RtcC9teV9zb2NrZXQgLS1zaGFyZT0yIG15X2Rpc2sucWNvdzIKQGVuZCBleGFtcGxlCgphbmQgdGhlbiB5b3UgY2FuIHVzZSBpdCB3aXRoIHR3byBndWVzdHM6CkBleGFtcGxlCnFlbXUgbGludXgxLmltZyAtaGRiIG5iZDp1bml4Oi90bXAvbXlfc29ja2V0CnFlbXUgbGludXgyLmltZyAtaGRiIG5iZDp1bml4Oi90bXAvbXlfc29ja2V0CkBlbmQgZXhhbXBsZQoKQG5vZGUgcGNzeXNfbmV0d29yawpAc2VjdGlvbiBOZXR3b3JrIGVtdWxhdGlvbgoKUUVNVSBjYW4gc2ltdWxhdGUgc2V2ZXJhbCBuZXR3b3JrIGNhcmRzIChQQ0kgb3IgSVNBIGNhcmRzIG9uIHRoZSBQQwp0YXJnZXQpIGFuZCBjYW4gY29ubmVjdCB0aGVtIHRvIGFuIGFyYml0cmFyeSBudW1iZXIgb2YgVmlydHVhbCBMb2NhbApBcmVhIE5ldHdvcmtzIChWTEFOcykuIEhvc3QgVEFQIGRldmljZXMgY2FuIGJlIGNvbm5lY3RlZCB0byBhbnkgUUVNVQpWTEFOLiBWTEFOIGNhbiBiZSBjb25uZWN0ZWQgYmV0d2VlbiBzZXBhcmF0ZSBpbnN0YW5jZXMgb2YgUUVNVSB0bwpzaW11bGF0ZSBsYXJnZSBuZXR3b3Jrcy4gRm9yIHNpbXBsZXIgdXNhZ2UsIGEgbm9uIHByaXZpbGVnZWQgdXNlciBtb2RlCm5ldHdvcmsgc3RhY2sgY2FuIHJlcGxhY2UgdGhlIFRBUCBkZXZpY2UgdG8gaGF2ZSBhIGJhc2ljIG5ldHdvcmsKY29ubmVjdGlvbi4KCkBzdWJzZWN0aW9uIFZMQU5zCgpRRU1VIHNpbXVsYXRlcyBzZXZlcmFsIFZMQU5zLiBBIFZMQU4gY2FuIGJlIHN5bWJvbGlzZWQgYXMgYSB2aXJ0dWFsCmNvbm5lY3Rpb24gYmV0d2VlbiBzZXZlcmFsIG5ldHdvcmsgZGV2aWNlcy4gVGhlc2UgZGV2aWNlcyBjYW4gYmUgZm9yCmV4YW1wbGUgUUVNVSB2aXJ0dWFsIEV0aGVybmV0IGNhcmRzIG9yIHZpcnR1YWwgSG9zdCBldGhlcm5ldCBkZXZpY2VzCihUQVAgZGV2aWNlcykuCgpAc3Vic2VjdGlvbiBVc2luZyBUQVAgbmV0d29yayBpbnRlcmZhY2VzCgpUaGlzIGlzIHRoZSBzdGFuZGFyZCB3YXkgdG8gY29ubmVjdCBRRU1VIHRvIGEgcmVhbCBuZXR3b3JrLiBRRU1VIGFkZHMKYSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlIG9uIHlvdXIgaG9zdCAoY2FsbGVkIEBjb2Rle3RhcE59KSwgYW5kIHlvdQpjYW4gdGhlbiBjb25maWd1cmUgaXQgYXMgaWYgaXQgd2FzIGEgcmVhbCBldGhlcm5ldCBjYXJkLgoKQHN1YnN1YnNlY3Rpb24gTGludXggaG9zdAoKQXMgYW4gZXhhbXBsZSwgeW91IGNhbiBkb3dubG9hZCB0aGUgQGZpbGV7bGludXgtdGVzdC14eHgudGFyLmd6fQphcmNoaXZlIGFuZCBjb3B5IHRoZSBzY3JpcHQgQGZpbGV7cWVtdS1pZnVwfSBpbiBAZmlsZXsvZXRjfSBhbmQKY29uZmlndXJlIHByb3Blcmx5IEBjb2Rle3N1ZG99IHNvIHRoYXQgdGhlIGNvbW1hbmQgQGNvZGV7aWZjb25maWd9CmNvbnRhaW5lZCBpbiBAZmlsZXtxZW11LWlmdXB9IGNhbiBiZSBleGVjdXRlZCBhcyByb290LiBZb3UgbXVzdCB2ZXJpZnkKdGhhdCB5b3VyIGhvc3Qga2VybmVsIHN1cHBvcnRzIHRoZSBUQVAgbmV0d29yayBpbnRlcmZhY2VzOiB0aGUKZGV2aWNlIEBmaWxley9kZXYvbmV0L3R1bn0gbXVzdCBiZSBwcmVzZW50LgoKU2VlIEByZWZ7c2VjX2ludm9jYXRpb259IHRvIGhhdmUgZXhhbXBsZXMgb2YgY29tbWFuZCBsaW5lcyB1c2luZyB0aGUKVEFQIG5ldHdvcmsgaW50ZXJmYWNlcy4KCkBzdWJzdWJzZWN0aW9uIFdpbmRvd3MgaG9zdAoKVGhlcmUgaXMgYSB2aXJ0dWFsIGV0aGVybmV0IGRyaXZlciBmb3IgV2luZG93cyAyMDAwL1hQIHN5c3RlbXMsIGNhbGxlZApUQVAtV2luMzIuIEJ1dCBpdCBpcyBub3QgaW5jbHVkZWQgaW4gc3RhbmRhcmQgUUVNVSBmb3IgV2luZG93cywKc28geW91IHdpbGwgbmVlZCB0byBnZXQgaXQgc2VwYXJhdGVseS4gSXQgaXMgcGFydCBvZiBPcGVuVlBOIHBhY2thZ2UsCnNvIGRvd25sb2FkIE9wZW5WUE4gZnJvbSA6IEB1cmx7aHR0cDovL29wZW52cG4ubmV0L30uCgpAc3Vic2VjdGlvbiBVc2luZyB0aGUgdXNlciBtb2RlIG5ldHdvcmsgc3RhY2sKCkJ5IHVzaW5nIHRoZSBvcHRpb24gQG9wdGlvbnstbmV0IHVzZXJ9IChkZWZhdWx0IGNvbmZpZ3VyYXRpb24gaWYgbm8KQG9wdGlvbnstbmV0fSBvcHRpb24gaXMgc3BlY2lmaWVkKSwgUUVNVSB1c2VzIGEgY29tcGxldGVseSB1c2VyIG1vZGUKbmV0d29yayBzdGFjayAoeW91IGRvbid0IG5lZWQgcm9vdCBwcml2aWxlZ2UgdG8gdXNlIHRoZSB2aXJ0dWFsCm5ldHdvcmspLiBUaGUgdmlydHVhbCBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gaXMgdGhlIGZvbGxvd2luZzoKCkBleGFtcGxlCgogICAgICAgICBRRU1VIFZMQU4gICAgICA8LS0tLS0tPiAgRmlyZXdhbGwvREhDUCBzZXJ2ZXIgPC0tLS0tPiBJbnRlcm5ldAogICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICgxMC4wLjIuMikKICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tPiAgRE5TIHNlcnZlciAoMTAuMC4yLjMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLT4gIFNNQiBzZXJ2ZXIgKDEwLjAuMi40KQpAZW5kIGV4YW1wbGUKClRoZSBRRU1VIFZNIGJlaGF2ZXMgYXMgaWYgaXQgd2FzIGJlaGluZCBhIGZpcmV3YWxsIHdoaWNoIGJsb2NrcyBhbGwKaW5jb21pbmcgY29ubmVjdGlvbnMuIFlvdSBjYW4gdXNlIGEgREhDUCBjbGllbnQgdG8gYXV0b21hdGljYWxseQpjb25maWd1cmUgdGhlIG5ldHdvcmsgaW4gdGhlIFFFTVUgVk0uIFRoZSBESENQIHNlcnZlciBhc3NpZ24gYWRkcmVzc2VzCnRvIHRoZSBob3N0cyBzdGFydGluZyBmcm9tIDEwLjAuMi4xNS4KCkluIG9yZGVyIHRvIGNoZWNrIHRoYXQgdGhlIHVzZXIgbW9kZSBuZXR3b3JrIGlzIHdvcmtpbmcsIHlvdSBjYW4gcGluZwp0aGUgYWRkcmVzcyAxMC4wLjIuMiBhbmQgdmVyaWZ5IHRoYXQgeW91IGdvdCBhbiBhZGRyZXNzIGluIHRoZSByYW5nZQoxMC4wLjIueCBmcm9tIHRoZSBRRU1VIHZpcnR1YWwgREhDUCBzZXJ2ZXIuCgpOb3RlIHRoYXQgQGNvZGV7cGluZ30gaXMgbm90IHN1cHBvcnRlZCByZWxpYWJseSB0byB0aGUgaW50ZXJuZXQgYXMgaXQKd291bGQgcmVxdWlyZSByb290IHByaXZpbGVnZXMuIEl0IG1lYW5zIHlvdSBjYW4gb25seSBwaW5nIHRoZSBsb2NhbApyb3V0ZXIgKDEwLjAuMi4yKS4KCldoZW4gdXNpbmcgdGhlIGJ1aWx0LWluIFRGVFAgc2VydmVyLCB0aGUgcm91dGVyIGlzIGFsc28gdGhlIFRGVFAKc2VydmVyLgoKV2hlbiB1c2luZyB0aGUgQG9wdGlvbnstcmVkaXJ9IG9wdGlvbiwgVENQIG9yIFVEUCBjb25uZWN0aW9ucyBjYW4gYmUKcmVkaXJlY3RlZCBmcm9tIHRoZSBob3N0IHRvIHRoZSBndWVzdC4gSXQgYWxsb3dzIGZvciBleGFtcGxlIHRvCnJlZGlyZWN0IFgxMSwgdGVsbmV0IG9yIFNTSCBjb25uZWN0aW9ucy4KCkBzdWJzZWN0aW9uIENvbm5lY3RpbmcgVkxBTnMgYmV0d2VlbiBRRU1VIGluc3RhbmNlcwoKVXNpbmcgdGhlIEBvcHRpb257LW5ldCBzb2NrZXR9IG9wdGlvbiwgaXQgaXMgcG9zc2libGUgdG8gbWFrZSBWTEFOcwp0aGF0IHNwYW4gc2V2ZXJhbCBRRU1VIGluc3RhbmNlcy4gU2VlIEByZWZ7c2VjX2ludm9jYXRpb259IHRvIGhhdmUgYQpiYXNpYyBleGFtcGxlLgoKQG5vZGUgZGlyZWN0X2xpbnV4X2Jvb3QKQHNlY3Rpb24gRGlyZWN0IExpbnV4IEJvb3QKClRoaXMgc2VjdGlvbiBleHBsYWlucyBob3cgdG8gbGF1bmNoIGEgTGludXgga2VybmVsIGluc2lkZSBRRU1VIHdpdGhvdXQKaGF2aW5nIHRvIG1ha2UgYSBmdWxsIGJvb3RhYmxlIGltYWdlLiBJdCBpcyB2ZXJ5IHVzZWZ1bCBmb3IgZmFzdCBMaW51eAprZXJuZWwgdGVzdGluZy4KClRoZSBzeW50YXggaXM6CkBleGFtcGxlCnFlbXUgLWtlcm5lbCBhcmNoL2kzODYvYm9vdC9iekltYWdlIC1oZGEgcm9vdC0yLjQuMjAuaW1nIC1hcHBlbmQgInJvb3Q9L2Rldi9oZGEiCkBlbmQgZXhhbXBsZQoKVXNlIEBvcHRpb257LWtlcm5lbH0gdG8gcHJvdmlkZSB0aGUgTGludXgga2VybmVsIGltYWdlIGFuZApAb3B0aW9uey1hcHBlbmR9IHRvIGdpdmUgdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgYXJndW1lbnRzLiBUaGUKQG9wdGlvbnstaW5pdHJkfSBvcHRpb24gY2FuIGJlIHVzZWQgdG8gcHJvdmlkZSBhbiBJTklUUkQgaW1hZ2UuCgpXaGVuIHVzaW5nIHRoZSBkaXJlY3QgTGludXggYm9vdCwgYSBkaXNrIGltYWdlIGZvciB0aGUgZmlyc3QgaGFyZCBkaXNrCkBmaWxle2hkYX0gaXMgcmVxdWlyZWQgYmVjYXVzZSBpdHMgYm9vdCBzZWN0b3IgaXMgdXNlZCB0byBsYXVuY2ggdGhlCkxpbnV4IGtlcm5lbC4KCklmIHlvdSBkbyBub3QgbmVlZCBncmFwaGljYWwgb3V0cHV0LCB5b3UgY2FuIGRpc2FibGUgaXQgYW5kIHJlZGlyZWN0CnRoZSB2aXJ0dWFsIHNlcmlhbCBwb3J0IGFuZCB0aGUgUUVNVSBtb25pdG9yIHRvIHRoZSBjb25zb2xlIHdpdGggdGhlCkBvcHRpb257LW5vZ3JhcGhpY30gb3B0aW9uLiBUaGUgdHlwaWNhbCBjb21tYW5kIGxpbmUgaXM6CkBleGFtcGxlCnFlbXUgLWtlcm5lbCBhcmNoL2kzODYvYm9vdC9iekltYWdlIC1oZGEgcm9vdC0yLjQuMjAuaW1nIFwKICAgICAtYXBwZW5kICJyb290PS9kZXYvaGRhIGNvbnNvbGU9dHR5UzAiIC1ub2dyYXBoaWMKQGVuZCBleGFtcGxlCgpVc2UgQGtleXtDdHJsLWEgY30gdG8gc3dpdGNoIGJldHdlZW4gdGhlIHNlcmlhbCBjb25zb2xlIGFuZCB0aGUKbW9uaXRvciAoQHB4cmVme3Bjc3lzX2tleXN9KS4KCkBub2RlIHBjc3lzX3VzYgpAc2VjdGlvbiBVU0IgZW11bGF0aW9uCgpRRU1VIGVtdWxhdGVzIGEgUENJIFVIQ0kgVVNCIGNvbnRyb2xsZXIuIFlvdSBjYW4gdmlydHVhbGx5IHBsdWcKdmlydHVhbCBVU0IgZGV2aWNlcyBvciByZWFsIGhvc3QgVVNCIGRldmljZXMgKGV4cGVyaW1lbnRhbCwgd29ya3Mgb25seQpvbiBMaW51eCBob3N0cykuICBRZW11IHdpbGwgYXV0b21hdGljYWxseSBjcmVhdGUgYW5kIGNvbm5lY3QgdmlydHVhbCBVU0IgaHVicwphcyBuZWNlc3NhcnkgdG8gY29ubmVjdCBtdWx0aXBsZSBVU0IgZGV2aWNlcy4KCkBtZW51CiogdXNiX2RldmljZXM6OgoqIGhvc3RfdXNiX2RldmljZXM6OgpAZW5kIG1lbnUKQG5vZGUgdXNiX2RldmljZXMKQHN1YnNlY3Rpb24gQ29ubmVjdGluZyBVU0IgZGV2aWNlcwoKVVNCIGRldmljZXMgY2FuIGJlIGNvbm5lY3RlZCB3aXRoIHRoZSBAb3B0aW9uey11c2JkZXZpY2V9IGNvbW1hbmRsaW5lIG9wdGlvbgpvciB0aGUgQGNvZGV7dXNiX2FkZH0gbW9uaXRvciBjb21tYW5kLiAgQXZhaWxhYmxlIGRldmljZXMgYXJlOgoKQHRhYmxlIEBjb2RlCkBpdGVtIG1vdXNlClZpcnR1YWwgTW91c2UuICBUaGlzIHdpbGwgb3ZlcnJpZGUgdGhlIFBTLzIgbW91c2UgZW11bGF0aW9uIHdoZW4gYWN0aXZhdGVkLgpAaXRlbSB0YWJsZXQKUG9pbnRlciBkZXZpY2UgdGhhdCB1c2VzIGFic29sdXRlIGNvb3JkaW5hdGVzIChsaWtlIGEgdG91Y2hzY3JlZW4pLgpUaGlzIG1lYW5zIHFlbXUgaXMgYWJsZSB0byByZXBvcnQgdGhlIG1vdXNlIHBvc2l0aW9uIHdpdGhvdXQgaGF2aW5nCnRvIGdyYWIgdGhlIG1vdXNlLiAgQWxzbyBvdmVycmlkZXMgdGhlIFBTLzIgbW91c2UgZW11bGF0aW9uIHdoZW4gYWN0aXZhdGVkLgpAaXRlbSBkaXNrOkB2YXJ7ZmlsZX0KTWFzcyBzdG9yYWdlIGRldmljZSBiYXNlZCBvbiBAdmFye2ZpbGV9IChAcHhyZWZ7ZGlza19pbWFnZXN9KQpAaXRlbSBob3N0OkB2YXJ7YnVzLmFkZHJ9ClBhc3MgdGhyb3VnaCB0aGUgaG9zdCBkZXZpY2UgaWRlbnRpZmllZCBieSBAdmFye2J1cy5hZGRyfQooTGludXggb25seSkKQGl0ZW0gaG9zdDpAdmFye3ZlbmRvcl9pZDpwcm9kdWN0X2lkfQpQYXNzIHRocm91Z2ggdGhlIGhvc3QgZGV2aWNlIGlkZW50aWZpZWQgYnkgQHZhcnt2ZW5kb3JfaWQ6cHJvZHVjdF9pZH0KKExpbnV4IG9ubHkpCkBpdGVtIHdhY29tLXRhYmxldApWaXJ0dWFsIFdhY29tIFBlblBhcnRuZXIgdGFibGV0LiAgVGhpcyBkZXZpY2UgaXMgc2ltaWxhciB0byB0aGUgQGNvZGV7dGFibGV0fQphYm92ZSBidXQgaXQgY2FuIGJlIHVzZWQgd2l0aCB0aGUgdHNsaWIgbGlicmFyeSBiZWNhdXNlIGluIGFkZGl0aW9uIHRvIHRvdWNoCmNvb3JkaW5hdGVzIGl0IHJlcG9ydHMgdG91Y2ggcHJlc3N1cmUuCkBpdGVtIGtleWJvYXJkClN0YW5kYXJkIFVTQiBrZXlib2FyZC4gIFdpbGwgb3ZlcnJpZGUgdGhlIFBTLzIga2V5Ym9hcmQgKGlmIHByZXNlbnQpLgpAaXRlbSBzZXJpYWw6W3ZlbmRvcmlkPUB2YXJ7dmVuZG9yX2lkfV1bLHByb2R1Y3RfaWQ9QHZhcntwcm9kdWN0X2lkfV06QHZhcntkZXZ9ClNlcmlhbCBjb252ZXJ0ZXIuIFRoaXMgZW11bGF0ZXMgYW4gRlRESSBGVDIzMkJNIGNoaXAgY29ubmVjdGVkIHRvIGhvc3QgY2hhcmFjdGVyCmRldmljZSBAdmFye2Rldn0uIFRoZSBhdmFpbGFibGUgY2hhcmFjdGVyIGRldmljZXMgYXJlIHRoZSBzYW1lIGFzIGZvciB0aGUKQGNvZGV7LXNlcmlhbH0gb3B0aW9uLiBUaGUgQGNvZGV7dmVuZG9yaWR9IGFuZCBAY29kZXtwcm9kdWN0aWR9IG9wdGlvbnMgY2FuIGJlCnVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgMDQwMzo2MDAxLiBGb3IgaW5zdGFuY2UsIApAZXhhbXBsZQp1c2JfYWRkIHNlcmlhbDpwcm9kdWN0aWQ9RkEwMDp0Y3A6MTkyLjE2OC4wLjI6NDQ0NApAZW5kIGV4YW1wbGUKd2lsbCBjb25uZWN0IHRvIHRjcCBwb3J0IDQ0NDQgb2YgaXAgMTkyLjE2OC4wLjIsIGFuZCBwbHVnIHRoYXQgdG8gdGhlIHZpcnR1YWwKc2VyaWFsIGNvbnZlcnRlciwgZmFraW5nIGEgTWF0cml4IE9yYml0YWwgTENEIERpc3BsYXkgKFVTQiBJRCAwNDAzOkZBMDApLgpAaXRlbSBicmFpbGxlCkJyYWlsbGUgZGV2aWNlLiAgVGhpcyB3aWxsIHVzZSBCcmxBUEkgdG8gZGlzcGxheSB0aGUgYnJhaWxsZSBvdXRwdXQgb24gYSByZWFsCm9yIGZha2UgZGV2aWNlLgpAaXRlbSBuZXQ6QHZhcntvcHRpb25zfQpOZXR3b3JrIGFkYXB0ZXIgdGhhdCBzdXBwb3J0cyBDREMgZXRoZXJuZXQgYW5kIFJORElTIHByb3RvY29scy4gIEB2YXJ7b3B0aW9uc30Kc3BlY2lmaWVzIE5JQyBvcHRpb25zIGFzIHdpdGggQGNvZGV7LW5ldCBuaWMsfUB2YXJ7b3B0aW9uc30gKHNlZSBkZXNjcmlwdGlvbikuCkZvciBpbnN0YW5jZSwgdXNlci1tb2RlIG5ldHdvcmtpbmcgY2FuIGJlIHVzZWQgd2l0aApAZXhhbXBsZQpxZW11IFsuLi5PUFRJT05TLi4uXSAtbmV0IHVzZXIsdmxhbj0wIC11c2JkZXZpY2UgbmV0OnZsYW49MApAZW5kIGV4YW1wbGUKQ3VycmVudGx5IHRoaXMgY2Fubm90IGJlIHVzZWQgaW4gbWFjaGluZXMgdGhhdCBzdXBwb3J0IFBDSSBOSUNzLgpAaXRlbSBidFs6QHZhcntoY2ktdHlwZX1dCkJsdWV0b290aCBkb25nbGUgd2hvc2UgdHlwZSBpcyBzcGVjaWZpZWQgaW4gdGhlIHNhbWUgZm9ybWF0IGFzIHdpdGgKdGhlIEBvcHRpb257LWJ0IGhjaX0gb3B0aW9uLCBAcHhyZWZ7YnQtaGNpcywsYWxsb3dlZCBIQ0kgdHlwZXN9LiAgSWYKbm8gdHlwZSBpcyBnaXZlbiwgdGhlIEhDSSBsb2dpYyBjb3JyZXNwb25kcyB0byBAY29kZXstYnQgaGNpLHZsYW49MH0uClRoaXMgVVNCIGRldmljZSBpbXBsZW1lbnRzIHRoZSBVU0IgVHJhbnNwb3J0IExheWVyIG9mIEhDSS4gIEV4YW1wbGUKdXNhZ2U6CkBleGFtcGxlCnFlbXUgWy4uLk9QVElPTlMuLi5dIC11c2JkZXZpY2UgYnQ6aGNpLHZsYW49MyAtYnQgZGV2aWNlOmtleWJvYXJkLHZsYW49MwpAZW5kIGV4YW1wbGUKQGVuZCB0YWJsZQoKQG5vZGUgaG9zdF91c2JfZGV2aWNlcwpAc3Vic2VjdGlvbiBVc2luZyBob3N0IFVTQiBkZXZpY2VzIG9uIGEgTGludXggaG9zdAoKV0FSTklORzogdGhpcyBpcyBhbiBleHBlcmltZW50YWwgZmVhdHVyZS4gUUVNVSB3aWxsIHNsb3cgZG93biB3aGVuCnVzaW5nIGl0LiBVU0IgZGV2aWNlcyByZXF1aXJpbmcgcmVhbCB0aW1lIHN0cmVhbWluZyAoaS5lLiBVU0IgVmlkZW8KQ2FtZXJhcykgYXJlIG5vdCBzdXBwb3J0ZWQgeWV0LgoKQGVudW1lcmF0ZQpAaXRlbSBJZiB5b3UgdXNlIGFuIGVhcmx5IExpbnV4IDIuNCBrZXJuZWwsIHZlcmlmeSB0aGF0IG5vIExpbnV4IGRyaXZlcgppcyBhY3R1YWxseSB1c2luZyB0aGUgVVNCIGRldmljZS4gQSBzaW1wbGUgd2F5IHRvIGRvIHRoYXQgaXMgc2ltcGx5IHRvCmRpc2FibGUgdGhlIGNvcnJlc3BvbmRpbmcga2VybmVsIG1vZHVsZSBieSByZW5hbWluZyBpdCBmcm9tIEBmaWxle215ZHJpdmVyLm99CnRvIEBmaWxle215ZHJpdmVyLm8uZGlzYWJsZWR9LgoKQGl0ZW0gVmVyaWZ5IHRoYXQgQGZpbGV7L3Byb2MvYnVzL3VzYn0gaXMgd29ya2luZyAobW9zdCBMaW51eCBkaXN0cmlidXRpb25zIHNob3VsZCBlbmFibGUgaXQgYnkgZGVmYXVsdCkuIFlvdSBzaG91bGQgc2VlIHNvbWV0aGluZyBsaWtlIHRoYXQ6CkBleGFtcGxlCmxzIC9wcm9jL2J1cy91c2IKMDAxICBkZXZpY2VzICBkcml2ZXJzCkBlbmQgZXhhbXBsZQoKQGl0ZW0gU2luY2Ugb25seSByb290IGNhbiBhY2Nlc3MgdG8gdGhlIFVTQiBkZXZpY2VzIGRpcmVjdGx5LCB5b3UgY2FuIGVpdGhlciBsYXVuY2ggUUVNVSBhcyByb290IG9yIGNoYW5nZSB0aGUgcGVybWlzc2lvbnMgb2YgdGhlIFVTQiBkZXZpY2VzIHlvdSB3YW50IHRvIHVzZS4gRm9yIHRlc3RpbmcsIHRoZSBmb2xsb3dpbmcgc3VmZmljZXM6CkBleGFtcGxlCmNob3duIC1SIG15dWlkIC9wcm9jL2J1cy91c2IKQGVuZCBleGFtcGxlCgpAaXRlbSBMYXVuY2ggUUVNVSBhbmQgZG8gaW4gdGhlIG1vbml0b3I6CkBleGFtcGxlCmluZm8gdXNiaG9zdAogIERldmljZSAxLjIsIHNwZWVkIDQ4MCBNYi9zCiAgICBDbGFzcyAwMDogVVNCIGRldmljZSAxMjM0OjU2NzgsIFVTQiBESVNLCkBlbmQgZXhhbXBsZQpZb3Ugc2hvdWxkIHNlZSB0aGUgbGlzdCBvZiB0aGUgZGV2aWNlcyB5b3UgY2FuIHVzZSAoTmV2ZXIgdHJ5IHRvIHVzZQpodWJzLCBpdCB3b24ndCB3b3JrKS4KCkBpdGVtIEFkZCB0aGUgZGV2aWNlIGluIFFFTVUgYnkgdXNpbmc6CkBleGFtcGxlCnVzYl9hZGQgaG9zdDoxMjM0OjU2NzgKQGVuZCBleGFtcGxlCgpOb3JtYWxseSB0aGUgZ3Vlc3QgT1Mgc2hvdWxkIHJlcG9ydCB0aGF0IGEgbmV3IFVTQiBkZXZpY2UgaXMKcGx1Z2dlZC4gWW91IGNhbiB1c2UgdGhlIG9wdGlvbiBAb3B0aW9uey11c2JkZXZpY2V9IHRvIGRvIHRoZSBzYW1lLgoKQGl0ZW0gTm93IHlvdSBjYW4gdHJ5IHRvIHVzZSB0aGUgaG9zdCBVU0IgZGV2aWNlIGluIFFFTVUuCgpAZW5kIGVudW1lcmF0ZQoKV2hlbiByZWxhdW5jaGluZyBRRU1VLCB5b3UgbWF5IGhhdmUgdG8gdW5wbHVnIGFuZCBwbHVnIGFnYWluIHRoZSBVU0IKZGV2aWNlIHRvIG1ha2UgaXQgd29yayBhZ2FpbiAodGhpcyBpcyBhIGJ1ZykuCgpAbm9kZSB2bmNfc2VjdXJpdHkKQHNlY3Rpb24gVk5DIHNlY3VyaXR5CgpUaGUgVk5DIHNlcnZlciBjYXBhYmlsaXR5IHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgZ3JhcGhpY2FsIGNvbnNvbGUKb2YgdGhlIGd1ZXN0IFZNIGFjcm9zcyB0aGUgbmV0d29yay4gVGhpcyBoYXMgYSBudW1iZXIgb2Ygc2VjdXJpdHkKY29uc2lkZXJhdGlvbnMgZGVwZW5kaW5nIG9uIHRoZSBkZXBsb3ltZW50IHNjZW5hcmlvcy4KCkBtZW51Ciogdm5jX3NlY19ub25lOjoKKiB2bmNfc2VjX3Bhc3N3b3JkOjoKKiB2bmNfc2VjX2NlcnRpZmljYXRlOjoKKiB2bmNfc2VjX2NlcnRpZmljYXRlX3ZlcmlmeTo6Ciogdm5jX3NlY19jZXJ0aWZpY2F0ZV9wdzo6Ciogdm5jX3NlY19zYXNsOjoKKiB2bmNfc2VjX2NlcnRpZmljYXRlX3Nhc2w6OgoqIHZuY19nZW5lcmF0ZV9jZXJ0OjoKKiB2bmNfc2V0dXBfc2FzbDo6CkBlbmQgbWVudQpAbm9kZSB2bmNfc2VjX25vbmUKQHN1YnNlY3Rpb24gV2l0aG91dCBwYXNzd29yZHMKClRoZSBzaW1wbGVzdCBWTkMgc2VydmVyIHNldHVwIGRvZXMgbm90IGluY2x1ZGUgYW55IGZvcm0gb2YgYXV0aGVudGljYXRpb24uCkZvciB0aGlzIHNldHVwIGl0IGlzIHJlY29tbWVuZGVkIHRvIHJlc3RyaWN0IGl0IHRvIGxpc3RlbiBvbiBhIFVOSVggZG9tYWluCnNvY2tldCBvbmx5LiBGb3IgZXhhbXBsZQoKQGV4YW1wbGUKcWVtdSBbLi4uT1BUSU9OUy4uLl0gLXZuYyB1bml4Oi9ob21lL2pvZWJsb2dncy8ucWVtdS1teXZtLXZuYwpAZW5kIGV4YW1wbGUKClRoaXMgZW5zdXJlcyB0aGF0IG9ubHkgdXNlcnMgb24gbG9jYWwgYm94IHdpdGggcmVhZC93cml0ZSBhY2Nlc3MgdG8gdGhhdApwYXRoIGNhbiBhY2Nlc3MgdGhlIFZOQyBzZXJ2ZXIuIFRvIHNlY3VyZWx5IGFjY2VzcyB0aGUgVk5DIHNlcnZlciBmcm9tIGEKcmVtb3RlIG1hY2hpbmUsIGEgY29tYmluYXRpb24gb2YgbmV0Y2F0K3NzaCBjYW4gYmUgdXNlZCB0byBwcm92aWRlIGEgc2VjdXJlCnR1bm5lbC4KCkBub2RlIHZuY19zZWNfcGFzc3dvcmQKQHN1YnNlY3Rpb24gV2l0aCBwYXNzd29yZHMKClRoZSBWTkMgcHJvdG9jb2wgaGFzIGxpbWl0ZWQgc3VwcG9ydCBmb3IgcGFzc3dvcmQgYmFzZWQgYXV0aGVudGljYXRpb24uIFNpbmNlCnRoZSBwcm90b2NvbCBsaW1pdHMgcGFzc3dvcmRzIHRvIDggY2hhcmFjdGVycyBpdCBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQKdG8gcHJvdmlkZSBoaWdoIHNlY3VyaXR5LiBUaGUgcGFzc3dvcmQgY2FuIGJlIGZhaXJseSBlYXNpbHkgYnJ1dGUtZm9yY2VkIGJ5CmEgY2xpZW50IG1ha2luZyByZXBlYXQgY29ubmVjdGlvbnMuIEZvciB0aGlzIHJlYXNvbiwgYSBWTkMgc2VydmVyIHVzaW5nIHBhc3N3b3JkCmF1dGhlbnRpY2F0aW9uIHNob3VsZCBiZSByZXN0cmljdGVkIHRvIG9ubHkgbGlzdGVuIG9uIHRoZSBsb29wYmFjayBpbnRlcmZhY2UKb3IgVU5JWCBkb21haW4gc29ja2V0cy4gUGFzc3dvcmQgYXV0aGVudGljYXRpb24gaXMgcmVxdWVzdGVkIHdpdGggdGhlIEBjb2Rle3Bhc3N3b3JkfQpvcHRpb24sIGFuZCB0aGVuIG9uY2UgUUVNVSBpcyBydW5uaW5nIHRoZSBwYXNzd29yZCBpcyBzZXQgd2l0aCB0aGUgbW9uaXRvci4gVW50aWwKdGhlIG1vbml0b3IgaXMgdXNlZCB0byBzZXQgdGhlIHBhc3N3b3JkIGFsbCBjbGllbnRzIHdpbGwgYmUgcmVqZWN0ZWQuCgpAZXhhbXBsZQpxZW11IFsuLi5PUFRJT05TLi4uXSAtdm5jIDoxLHBhc3N3b3JkIC1tb25pdG9yIHN0ZGlvCihxZW11KSBjaGFuZ2Ugdm5jIHBhc3N3b3JkClBhc3N3b3JkOiAqKioqKioqKgoocWVtdSkKQGVuZCBleGFtcGxlCgpAbm9kZSB2bmNfc2VjX2NlcnRpZmljYXRlCkBzdWJzZWN0aW9uIFdpdGggeDUwOSBjZXJ0aWZpY2F0ZXMKClRoZSBRRU1VIFZOQyBzZXJ2ZXIgYWxzbyBpbXBsZW1lbnRzIHRoZSBWZU5DcnlwdCBleHRlbnNpb24gYWxsb3dpbmcgdXNlIG9mClRMUyBmb3IgZW5jcnlwdGlvbiBvZiB0aGUgc2Vzc2lvbiwgYW5kIHg1MDkgY2VydGlmaWNhdGVzIGZvciBhdXRoZW50aWNhdGlvbi4KVGhlIHVzZSBvZiB4NTA5IGNlcnRpZmljYXRlcyBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCwgYmVjYXVzZSBUTFMgb24gaXRzCm93biBpcyBzdXNjZXB0aWJsZSB0byBtYW4taW4tdGhlLW1pZGRsZSBhdHRhY2tzLiBCYXNpYyB4NTA5IGNlcnRpZmljYXRlCnN1cHBvcnQgcHJvdmlkZXMgYSBzZWN1cmUgc2Vzc2lvbiwgYnV0IG5vIGF1dGhlbnRpY2F0aW9uLiBUaGlzIGFsbG93cyBhbnkKY2xpZW50IHRvIGNvbm5lY3QsIGFuZCBwcm92aWRlcyBhbiBlbmNyeXB0ZWQgc2Vzc2lvbi4KCkBleGFtcGxlCnFlbXUgWy4uLk9QVElPTlMuLi5dIC12bmMgOjEsdGxzLHg1MDk9L2V0Yy9wa2kvcWVtdSAtbW9uaXRvciBzdGRpbwpAZW5kIGV4YW1wbGUKCkluIHRoZSBhYm92ZSBleGFtcGxlIEBjb2Rley9ldGMvcGtpL3FlbXV9IHNob3VsZCBjb250YWluIGF0IGxlYXN0IHRocmVlIGZpbGVzLApAY29kZXtjYS1jZXJ0LnBlbX0sIEBjb2Rle3NlcnZlci1jZXJ0LnBlbX0gYW5kIEBjb2Rle3NlcnZlci1rZXkucGVtfS4gVW5wcml2aWxlZ2VkCnVzZXJzIHdpbGwgd2FudCB0byB1c2UgYSBwcml2YXRlIGRpcmVjdG9yeSwgZm9yIGV4YW1wbGUgQGNvZGV7JEhPTUUvLnBraS9xZW11fS4KTkIgdGhlIEBjb2Rle3NlcnZlci1rZXkucGVtfSBmaWxlIHNob3VsZCBiZSBwcm90ZWN0ZWQgd2l0aCBmaWxlIG1vZGUgMDYwMCB0bwpvbmx5IGJlIHJlYWRhYmxlIGJ5IHRoZSB1c2VyIG93bmluZyBpdC4KCkBub2RlIHZuY19zZWNfY2VydGlmaWNhdGVfdmVyaWZ5CkBzdWJzZWN0aW9uIFdpdGggeDUwOSBjZXJ0aWZpY2F0ZXMgYW5kIGNsaWVudCB2ZXJpZmljYXRpb24KCkNlcnRpZmljYXRlcyBjYW4gYWxzbyBwcm92aWRlIGEgbWVhbnMgdG8gYXV0aGVudGljYXRlIHRoZSBjbGllbnQgY29ubmVjdGluZy4KVGhlIHNlcnZlciB3aWxsIHJlcXVlc3QgdGhhdCB0aGUgY2xpZW50IHByb3ZpZGUgYSBjZXJ0aWZpY2F0ZSwgd2hpY2ggaXQgd2lsbAp0aGVuIHZhbGlkYXRlIGFnYWluc3QgdGhlIENBIGNlcnRpZmljYXRlLiBUaGlzIGlzIGEgZ29vZCBjaG9pY2UgaWYgZGVwbG95aW5nCmluIGFuIGVudmlyb25tZW50IHdpdGggYSBwcml2YXRlIGludGVybmFsIGNlcnRpZmljYXRlIGF1dGhvcml0eS4KCkBleGFtcGxlCnFlbXUgWy4uLk9QVElPTlMuLi5dIC12bmMgOjEsdGxzLHg1MDl2ZXJpZnk9L2V0Yy9wa2kvcWVtdSAtbW9uaXRvciBzdGRpbwpAZW5kIGV4YW1wbGUKCgpAbm9kZSB2bmNfc2VjX2NlcnRpZmljYXRlX3B3CkBzdWJzZWN0aW9uIFdpdGggeDUwOSBjZXJ0aWZpY2F0ZXMsIGNsaWVudCB2ZXJpZmljYXRpb24gYW5kIHBhc3N3b3JkcwoKRmluYWxseSwgdGhlIHByZXZpb3VzIG1ldGhvZCBjYW4gYmUgY29tYmluZWQgd2l0aCBWTkMgcGFzc3dvcmQgYXV0aGVudGljYXRpb24KdG8gcHJvdmlkZSB0d28gbGF5ZXJzIG9mIGF1dGhlbnRpY2F0aW9uIGZvciBjbGllbnRzLgoKQGV4YW1wbGUKcWVtdSBbLi4uT1BUSU9OUy4uLl0gLXZuYyA6MSxwYXNzd29yZCx0bHMseDUwOXZlcmlmeT0vZXRjL3BraS9xZW11IC1tb25pdG9yIHN0ZGlvCihxZW11KSBjaGFuZ2Ugdm5jIHBhc3N3b3JkClBhc3N3b3JkOiAqKioqKioqKgoocWVtdSkKQGVuZCBleGFtcGxlCgoKQG5vZGUgdm5jX3NlY19zYXNsCkBzdWJzZWN0aW9uIFdpdGggU0FTTCBhdXRoZW50aWNhdGlvbgoKVGhlIFNBU0wgYXV0aGVudGljYXRpb24gbWV0aG9kIGlzIGEgVk5DIGV4dGVuc2lvbiwgdGhhdCBwcm92aWRlcyBhbgplYXNpbHkgZXh0ZW5kYWJsZSwgcGx1Z2dhYmxlIGF1dGhlbnRpY2F0aW9uIG1ldGhvZC4gVGhpcyBhbGxvd3MgZm9yCmludGVncmF0aW9uIHdpdGggYSB3aWRlIHJhbmdlIG9mIGF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbXMsIHN1Y2ggYXMKUEFNLCBHU1NBUEkvS2VyYmVyb3MsIExEQVAsIFNRTCBkYXRhYmFzZXMsIG9uZS10aW1lIGtleXMgYW5kIG1vcmUuClRoZSBzdHJlbmd0aCBvZiB0aGUgYXV0aGVudGljYXRpb24gZGVwZW5kcyBvbiB0aGUgZXhhY3QgbWVjaGFuaXNtCmNvbmZpZ3VyZWQuIElmIHRoZSBjaG9zZW4gbWVjaGFuaXNtIGFsc28gcHJvdmlkZXMgYSBTU0YgbGF5ZXIsIHRoZW4KaXQgd2lsbCBlbmNyeXB0IHRoZSBkYXRhc3RyZWFtIGFzIHdlbGwuCgpSZWZlciB0byB0aGUgbGF0ZXIgZG9jcyBvbiBob3cgdG8gY2hvb3NlIHRoZSBleGFjdCBTQVNMIG1lY2hhbmlzbQp1c2VkIGZvciBhdXRoZW50aWNhdGlvbiwgYnV0IGFzc3VtaW5nIHVzZSBvZiBvbmUgc3VwcG9ydGluZyBTU0YsCnRoZW4gUUVNVSBjYW4gYmUgbGF1bmNoZWQgd2l0aDoKCkBleGFtcGxlCnFlbXUgWy4uLk9QVElPTlMuLi5dIC12bmMgOjEsc2FzbCAtbW9uaXRvciBzdGRpbwpAZW5kIGV4YW1wbGUKCkBub2RlIHZuY19zZWNfY2VydGlmaWNhdGVfc2FzbApAc3Vic2VjdGlvbiBXaXRoIHg1MDkgY2VydGlmaWNhdGVzIGFuZCBTQVNMIGF1dGhlbnRpY2F0aW9uCgpJZiB0aGUgZGVzaXJlZCBTQVNMIGF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbSBkb2VzIG5vdCBzdXBwb3J0ZWQKU1NGIGxheWVycywgdGhlbiBpdCBpcyBzdHJvbmdseSBhZHZpc2VkIHRvIHJ1biBpdCBpbiBjb21iaW5hdGlvbgp3aXRoIFRMUyBhbmQgeDUwOSBjZXJ0aWZpY2F0ZXMuIFRoaXMgcHJvdmlkZXMgc2VjdXJlbHkgZW5jcnlwdGVkCmRhdGEgc3RyZWFtLCBhdm9pZGluZyByaXNrIG9mIGNvbXByb21pc2luZyBvZiB0aGUgc2VjdXJpdHkKY3JlZGVudGlhbHMuIFRoaXMgY2FuIGJlIGVuYWJsZWQsIGJ5IGNvbWJpbmluZyB0aGUgJ3Nhc2wnIG9wdGlvbgp3aXRoIHRoZSBhZm9yZW1lbnRpb25lZCBUTFMgKyB4NTA5IG9wdGlvbnM6CgpAZXhhbXBsZQpxZW11IFsuLi5PUFRJT05TLi4uXSAtdm5jIDoxLHRscyx4NTA5LHNhc2wgLW1vbml0b3Igc3RkaW8KQGVuZCBleGFtcGxlCgoKQG5vZGUgdm5jX2dlbmVyYXRlX2NlcnQKQHN1YnNlY3Rpb24gR2VuZXJhdGluZyBjZXJ0aWZpY2F0ZXMgZm9yIFZOQwoKVGhlIEdOVSBUTFMgcGFja2FnZXMgcHJvdmlkZXMgYSBjb21tYW5kIGNhbGxlZCBAY29kZXtjZXJ0dG9vbH0gd2hpY2ggY2FuCmJlIHVzZWQgdG8gZ2VuZXJhdGUgY2VydGlmaWNhdGVzIGFuZCBrZXlzIGluIFBFTSBmb3JtYXQuIEF0IGEgbWluaW11bSBpdAppcyBuZWNjZXNzYXJ5IHRvIHNldHVwIGEgY2VydGlmaWNhdGUgYXV0aG9yaXR5LCBhbmQgaXNzdWUgY2VydGlmaWNhdGVzIHRvCmVhY2ggc2VydmVyLiBJZiB1c2luZyBjZXJ0aWZpY2F0ZXMgZm9yIGF1dGhlbnRpY2F0aW9uLCB0aGVuIGVhY2ggY2xpZW50CndpbGwgYWxzbyBuZWVkIHRvIGJlIGlzc3VlZCBhIGNlcnRpZmljYXRlLiBUaGUgcmVjb21tZW5kYXRpb24gaXMgZm9yIHRoZQpzZXJ2ZXIgdG8ga2VlcCBpdHMgY2VydGlmaWNhdGVzIGluIGVpdGhlciBAY29kZXsvZXRjL3BraS9xZW11fSBvciBmb3IKdW5wcml2aWxlZ2VkIHVzZXJzIGluIEBjb2RleyRIT01FLy5wa2kvcWVtdX0uCgpAbWVudQoqIHZuY19nZW5lcmF0ZV9jYTo6Ciogdm5jX2dlbmVyYXRlX3NlcnZlcjo6Ciogdm5jX2dlbmVyYXRlX2NsaWVudDo6CkBlbmQgbWVudQpAbm9kZSB2bmNfZ2VuZXJhdGVfY2EKQHN1YnN1YnNlY3Rpb24gU2V0dXAgdGhlIENlcnRpZmljYXRlIEF1dGhvcml0eQoKVGhpcyBzdGVwIG9ubHkgbmVlZHMgdG8gYmUgcGVyZm9ybWVkIG9uY2UgcGVyIG9yZ2FuaXphdGlvbiAvIG9yZ2FuaXphdGlvbmFsCnVuaXQuIEZpcnN0IHRoZSBDQSBuZWVkcyBhIHByaXZhdGUga2V5LiBUaGlzIGtleSBtdXN0IGJlIGtlcHQgVkVSWSBzZWNyZXQKYW5kIHNlY3VyZS4gSWYgdGhpcyBrZXkgaXMgY29tcHJvbWlzZWQgdGhlIGVudGlyZSB0cnVzdCBjaGFpbiBvZiB0aGUgY2VydGlmaWNhdGVzCmlzc3VlZCB3aXRoIGl0IGlzIGxvc3QuCgpAZXhhbXBsZQojIGNlcnR0b29sIC0tZ2VuZXJhdGUtcHJpdmtleSA+IGNhLWtleS5wZW0KQGVuZCBleGFtcGxlCgpBIENBIG5lZWRzIHRvIGhhdmUgYSBwdWJsaWMgY2VydGlmaWNhdGUuIEZvciBzaW1wbGljaXR5IGl0IGNhbiBiZSBhIHNlbGYtc2lnbmVkCmNlcnRpZmljYXRlLCBvciBvbmUgaXNzdWUgYnkgYSBjb21tZXJjaWFsIGNlcnRpZmljYXRlIGlzc3VpbmcgYXV0aG9yaXR5LiBUbwpnZW5lcmF0ZSBhIHNlbGYtc2lnbmVkIGNlcnRpZmljYXRlIHJlcXVpcmVzIG9uZSBjb3JlIHBpZWNlIG9mIGluZm9ybWF0aW9uLCB0aGUKbmFtZSBvZiB0aGUgb3JnYW5pemF0aW9uLgoKQGV4YW1wbGUKIyBjYXQgPiBjYS5pbmZvIDw8RU9GCmNuID0gTmFtZSBvZiB5b3VyIG9yZ2FuaXphdGlvbgpjYQpjZXJ0X3NpZ25pbmdfa2V5CkVPRgojIGNlcnR0b29sIC0tZ2VuZXJhdGUtc2VsZi1zaWduZWQgXAogICAgICAgICAgIC0tbG9hZC1wcml2a2V5IGNhLWtleS5wZW0KICAgICAgICAgICAtLXRlbXBsYXRlIGNhLmluZm8gXAogICAgICAgICAgIC0tb3V0ZmlsZSBjYS1jZXJ0LnBlbQpAZW5kIGV4YW1wbGUKClRoZSBAY29kZXtjYS1jZXJ0LnBlbX0gZmlsZSBzaG91bGQgYmUgY29waWVkIHRvIGFsbCBzZXJ2ZXJzIGFuZCBjbGllbnRzIHdpc2hpbmcgdG8gdXRpbGl6ZQpUTFMgc3VwcG9ydCBpbiB0aGUgVk5DIHNlcnZlci4gVGhlIEBjb2Rle2NhLWtleS5wZW19IG11c3Qgbm90IGJlIGRpc2Nsb3NlZC9jb3BpZWQgYXQgYWxsLgoKQG5vZGUgdm5jX2dlbmVyYXRlX3NlcnZlcgpAc3Vic3Vic2VjdGlvbiBJc3N1aW5nIHNlcnZlciBjZXJ0aWZpY2F0ZXMKCkVhY2ggc2VydmVyIChvciBob3N0KSBuZWVkcyB0byBiZSBpc3N1ZWQgd2l0aCBhIGtleSBhbmQgY2VydGlmaWNhdGUuIFdoZW4gY29ubmVjdGluZwp0aGUgY2VydGlmaWNhdGUgaXMgc2VudCB0byB0aGUgY2xpZW50IHdoaWNoIHZhbGlkYXRlcyBpdCBhZ2FpbnN0IHRoZSBDQSBjZXJ0aWZpY2F0ZS4KVGhlIGNvcmUgcGllY2Ugb2YgaW5mb3JtYXRpb24gZm9yIGEgc2VydmVyIGNlcnRpZmljYXRlIGlzIHRoZSBob3N0bmFtZS4gVGhpcyBzaG91bGQKYmUgdGhlIGZ1bGx5IHF1YWxpZmllZCBob3N0bmFtZSB0aGF0IHRoZSBjbGllbnQgd2lsbCBjb25uZWN0IHdpdGgsIHNpbmNlIHRoZSBjbGllbnQKd2lsbCB0eXBpY2FsbHkgYWxzbyB2ZXJpZnkgdGhlIGhvc3RuYW1lIGluIHRoZSBjZXJ0aWZpY2F0ZS4gT24gdGhlIGhvc3QgaG9sZGluZyB0aGUKc2VjdXJlIENBIHByaXZhdGUga2V5OgoKQGV4YW1wbGUKIyBjYXQgPiBzZXJ2ZXIuaW5mbyA8PEVPRgpvcmdhbml6YXRpb24gPSBOYW1lICBvZiB5b3VyIG9yZ2FuaXphdGlvbgpjbiA9IHNlcnZlci5mb28uZXhhbXBsZS5jb20KdGxzX3d3d19zZXJ2ZXIKZW5jcnlwdGlvbl9rZXkKc2lnbmluZ19rZXkKRU9GCiMgY2VydHRvb2wgLS1nZW5lcmF0ZS1wcml2a2V5ID4gc2VydmVyLWtleS5wZW0KIyBjZXJ0dG9vbCAtLWdlbmVyYXRlLWNlcnRpZmljYXRlIFwKICAgICAgICAgICAtLWxvYWQtY2EtY2VydGlmaWNhdGUgY2EtY2VydC5wZW0gXAogICAgICAgICAgIC0tbG9hZC1jYS1wcml2a2V5IGNhLWtleS5wZW0gXAogICAgICAgICAgIC0tbG9hZC1wcml2a2V5IHNlcnZlciBzZXJ2ZXIta2V5LnBlbSBcCiAgICAgICAgICAgLS10ZW1wbGF0ZSBzZXJ2ZXIuaW5mbyBcCiAgICAgICAgICAgLS1vdXRmaWxlIHNlcnZlci1jZXJ0LnBlbQpAZW5kIGV4YW1wbGUKClRoZSBAY29kZXtzZXJ2ZXIta2V5LnBlbX0gYW5kIEBjb2Rle3NlcnZlci1jZXJ0LnBlbX0gZmlsZXMgc2hvdWxkIG5vdyBiZSBzZWN1cmVseSBjb3BpZWQKdG8gdGhlIHNlcnZlciBmb3Igd2hpY2ggdGhleSB3ZXJlIGdlbmVyYXRlZC4gVGhlIEBjb2Rle3NlcnZlci1rZXkucGVtfSBpcyBzZWN1cml0eQpzZW5zaXRpdmUgYW5kIHNob3VsZCBiZSBrZXB0IHByb3RlY3RlZCB3aXRoIGZpbGUgbW9kZSAwNjAwIHRvIHByZXZlbnQgZGlzY2xvc3VyZS4KCkBub2RlIHZuY19nZW5lcmF0ZV9jbGllbnQKQHN1YnN1YnNlY3Rpb24gSXNzdWluZyBjbGllbnQgY2VydGlmaWNhdGVzCgpJZiB0aGUgUUVNVSBWTkMgc2VydmVyIGlzIHRvIHVzZSB0aGUgQGNvZGV7eDUwOXZlcmlmeX0gb3B0aW9uIHRvIHZhbGlkYXRlIGNsaWVudApjZXJ0aWZpY2F0ZXMgYXMgaXRzIGF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbSwgZWFjaCBjbGllbnQgYWxzbyBuZWVkcyB0byBiZSBpc3N1ZWQKYSBjZXJ0aWZpY2F0ZS4gVGhlIGNsaWVudCBjZXJ0aWZpY2F0ZSBjb250YWlucyBlbm91Z2ggbWV0YWRhdGEgdG8gdW5pcXVlbHkgaWRlbnRpZnkKdGhlIGNsaWVudCwgdHlwaWNhbGx5IG9yZ2FuaXphdGlvbiwgc3RhdGUsIGNpdHksIGJ1aWxkaW5nLCBldGMuIE9uIHRoZSBob3N0IGhvbGRpbmcKdGhlIHNlY3VyZSBDQSBwcml2YXRlIGtleToKCkBleGFtcGxlCiMgY2F0ID4gY2xpZW50LmluZm8gPDxFT0YKY291bnRyeSA9IEdCCnN0YXRlID0gTG9uZG9uCmxvY2FsaXR5ID0gTG9uZG9uCm9yZ2FuaWF6YXRpb24gPSBOYW1lIG9mIHlvdXIgb3JnYW5pemF0aW9uCmNuID0gY2xpZW50LmZvby5leGFtcGxlLmNvbQp0bHNfd3d3X2NsaWVudAplbmNyeXB0aW9uX2tleQpzaWduaW5nX2tleQpFT0YKIyBjZXJ0dG9vbCAtLWdlbmVyYXRlLXByaXZrZXkgPiBjbGllbnQta2V5LnBlbQojIGNlcnR0b29sIC0tZ2VuZXJhdGUtY2VydGlmaWNhdGUgXAogICAgICAgICAgIC0tbG9hZC1jYS1jZXJ0aWZpY2F0ZSBjYS1jZXJ0LnBlbSBcCiAgICAgICAgICAgLS1sb2FkLWNhLXByaXZrZXkgY2Eta2V5LnBlbSBcCiAgICAgICAgICAgLS1sb2FkLXByaXZrZXkgY2xpZW50LWtleS5wZW0gXAogICAgICAgICAgIC0tdGVtcGxhdGUgY2xpZW50LmluZm8gXAogICAgICAgICAgIC0tb3V0ZmlsZSBjbGllbnQtY2VydC5wZW0KQGVuZCBleGFtcGxlCgpUaGUgQGNvZGV7Y2xpZW50LWtleS5wZW19IGFuZCBAY29kZXtjbGllbnQtY2VydC5wZW19IGZpbGVzIHNob3VsZCBub3cgYmUgc2VjdXJlbHkKY29waWVkIHRvIHRoZSBjbGllbnQgZm9yIHdoaWNoIHRoZXkgd2VyZSBnZW5lcmF0ZWQuCgoKQG5vZGUgdm5jX3NldHVwX3Nhc2wKCkBzdWJzZWN0aW9uIENvbmZpZ3VyaW5nIFNBU0wgbWVjaGFuaXNtcwoKVGhlIGZvbGxvd2luZyBkb2N1bWVudGF0aW9uIGFzc3VtZXMgdXNlIG9mIHRoZSBDeXJ1cyBTQVNMIGltcGxlbWVudGF0aW9uIG9uIGEKTGludXggaG9zdCwgYnV0IHRoZSBwcmluY2lwYWxzIHNob3VsZCBhcHBseSB0byBhbnkgb3RoZXIgU0FTTCBpbXBsLiBXaGVuIFNBU0wKaXMgZW5hYmxlZCwgdGhlIG1lY2hhbmlzbSBjb25maWd1cmF0aW9uIHdpbGwgYmUgbG9hZGVkIGZyb20gc3lzdGVtIGRlZmF1bHQKU0FTTCBzZXJ2aWNlIGNvbmZpZyAvZXRjL3Nhc2wyL3FlbXUuY29uZi4gSWYgcnVubmluZyBRRU1VIGFzIGFuCnVucHJpdmlsZWdlZCB1c2VyLCBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBTQVNMX0NPTkZfUEFUSCBjYW4gYmUgdXNlZAp0byBtYWtlIGl0IHNlYXJjaCBhbHRlcm5hdGUgbG9jYXRpb25zIGZvciB0aGUgc2VydmljZSBjb25maWcuCgpUaGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIG1pZ2h0IGNvbnRhaW4KCkBleGFtcGxlCm1lY2hfbGlzdDogZGlnZXN0LW1kNQpzYXNsZGJfcGF0aDogL2V0Yy9xZW11L3Bhc3N3ZC5kYgpAZW5kIGV4YW1wbGUKClRoaXMgc2F5cyB0byB1c2UgdGhlICdEaWdlc3QgTUQ1JyBtZWNoYW5pc20sIHdoaWNoIGlzIHNpbWlsYXIgdG8gdGhlIEhUVFAKRGlnZXN0LU1ENSBtZWNoYW5pc20uIFRoZSBsaXN0IG9mIHZhbGlkIHVzZXJuYW1lcyAmIHBhc3N3b3JkcyBpcyBtYWludGFpbmVkCmluIHRoZSAvZXRjL3FlbXUvcGFzc3dkLmRiIGZpbGUsIGFuZCBjYW4gYmUgdXBkYXRlZCB1c2luZyB0aGUgc2FzbHBhc3N3ZDIKY29tbWFuZC4gV2hpbGUgdGhpcyBtZWNoYW5pc20gaXMgZWFzeSB0byBjb25maWd1cmUgYW5kIHVzZSwgaXQgaXMgbm90CmNvbnNpZGVyZWQgc2VjdXJlIGJ5IG1vZGVybiBzdGFuZGFyZHMsIHNvIG9ubHkgc3VpdGFibGUgZm9yIGRldmVsb3BlcnMgLwphZC1ob2MgdGVzdGluZy4KCkEgbW9yZSBzZXJpb3VzIGRlcGxveW1lbnQgbWlnaHQgdXNlIEtlcmJlcm9zLCB3aGljaCBpcyBkb25lIHdpdGggdGhlICdnc3NhcGknCm1lY2hhbmlzbQoKQGV4YW1wbGUKbWVjaF9saXN0OiBnc3NhcGkKa2V5dGFiOiAvZXRjL3FlbXUva3JiNS50YWIKQGVuZCBleGFtcGxlCgpGb3IgdGhpcyB0byB3b3JrIHRoZSBhZG1pbmlzdHJhdG9yIG9mIHlvdXIgS0RDIG11c3QgZ2VuZXJhdGUgYSBLZXJiZXJvcwpwcmluY2lwYWwgZm9yIHRoZSBzZXJ2ZXIsIHdpdGggYSBuYW1lIG9mICAncWVtdS9zb21laG9zdC5leGFtcGxlLmNvbUBARVhBTVBMRS5DT00nCnJlcGxhY2luZyAnc29tZWhvc3QuZXhhbXBsZS5jb20nIHdpdGggdGhlIGZ1bGx5IHF1YWxpZmllZCBob3N0IG5hbWUgb2YgdGhlCm1hY2hpbmUgcnVubmluZyBRRU1VLCBhbmQgJ0VYQU1QTEUuQ09NJyB3aXRoIHRoZSBLZWJlcm9zIFJlYWxtLgoKT3RoZXIgY29uZmlndXJhdGlvbnMgd2lsbCBiZSBsZWZ0IGFzIGFuIGV4ZXJjaXNlIGZvciB0aGUgcmVhZGVyLiBJdCBzaG91bGQKYmUgbm90ZWQgdGhhdCBvbmx5IERpZ2VzdC1NRDUgYW5kIEdTU0FQSSBwcm92aWRlcyBhIFNTRiBsYXllciBmb3IgZGF0YQplbmNyeXB0aW9uLiBGb3IgYWxsIG90aGVyIG1lY2hhbmlzbXMsIFZOQyBzaG91bGQgYWx3YXlzIGJlIGNvbmZpZ3VyZWQgdG8KdXNlIFRMUyBhbmQgeDUwOSBjZXJ0aWZpY2F0ZXMgdG8gcHJvdGVjdCBzZWN1cml0eSBjcmVkZW50aWFscyBmcm9tIHNub29waW5nLgoKQG5vZGUgZ2RiX3VzYWdlCkBzZWN0aW9uIEdEQiB1c2FnZQoKUUVNVSBoYXMgYSBwcmltaXRpdmUgc3VwcG9ydCB0byB3b3JrIHdpdGggZ2RiLCBzbyB0aGF0IHlvdSBjYW4gZG8KJ0N0cmwtQycgd2hpbGUgdGhlIHZpcnR1YWwgbWFjaGluZSBpcyBydW5uaW5nIGFuZCBpbnNwZWN0IGl0cyBzdGF0ZS4KCkluIG9yZGVyIHRvIHVzZSBnZGIsIGxhdW5jaCBxZW11IHdpdGggdGhlICctcycgb3B0aW9uLiBJdCB3aWxsIHdhaXQgZm9yIGEKZ2RiIGNvbm5lY3Rpb246CkBleGFtcGxlCj4gcWVtdSAtcyAta2VybmVsIGFyY2gvaTM4Ni9ib290L2J6SW1hZ2UgLWhkYSByb290LTIuNC4yMC5pbWcgXAogICAgICAgLWFwcGVuZCAicm9vdD0vZGV2L2hkYSIKQ29ubmVjdGVkIHRvIGhvc3QgbmV0d29yayBpbnRlcmZhY2U6IHR1bjAKV2FpdGluZyBnZGIgY29ubmVjdGlvbiBvbiBwb3J0IDEyMzQKQGVuZCBleGFtcGxlCgpUaGVuIGxhdW5jaCBnZGIgb24gdGhlICd2bWxpbnV4JyBleGVjdXRhYmxlOgpAZXhhbXBsZQo+IGdkYiB2bWxpbnV4CkBlbmQgZXhhbXBsZQoKSW4gZ2RiLCBjb25uZWN0IHRvIFFFTVU6CkBleGFtcGxlCihnZGIpIHRhcmdldCByZW1vdGUgbG9jYWxob3N0OjEyMzQKQGVuZCBleGFtcGxlCgpUaGVuIHlvdSBjYW4gdXNlIGdkYiBub3JtYWxseS4gRm9yIGV4YW1wbGUsIHR5cGUgJ2MnIHRvIGxhdW5jaCB0aGUga2VybmVsOgpAZXhhbXBsZQooZ2RiKSBjCkBlbmQgZXhhbXBsZQoKSGVyZSBhcmUgc29tZSB1c2VmdWwgdGlwcyBpbiBvcmRlciB0byB1c2UgZ2RiIG9uIHN5c3RlbSBjb2RlOgoKQGVudW1lcmF0ZQpAaXRlbQpVc2UgQGNvZGV7aW5mbyByZWd9IHRvIGRpc3BsYXkgYWxsIHRoZSBDUFUgcmVnaXN0ZXJzLgpAaXRlbQpVc2UgQGNvZGV7eC8xMGkgJGVpcH0gdG8gZGlzcGxheSB0aGUgY29kZSBhdCB0aGUgUEMgcG9zaXRpb24uCkBpdGVtClVzZSBAY29kZXtzZXQgYXJjaGl0ZWN0dXJlIGk4MDg2fSB0byBkdW1wIDE2IGJpdCBjb2RlLiBUaGVuIHVzZQpAY29kZXt4LzEwaSAkY3MqMTYrJGVpcH0gdG8gZHVtcCB0aGUgY29kZSBhdCB0aGUgUEMgcG9zaXRpb24uCkBlbmQgZW51bWVyYXRlCgpBZHZhbmNlZCBkZWJ1Z2dpbmcgb3B0aW9uczoKClRoZSBkZWZhdWx0IHNpbmdsZSBzdGVwcGluZyBiZWhhdmlvciBpcyBzdGVwIHdpdGggdGhlIElSUXMgYW5kIHRpbWVyIHNlcnZpY2Ugcm91dGluZXMgb2ZmLiAgSXQgaXMgc2V0IHRoaXMgd2F5IGJlY2F1c2Ugd2hlbiBnZGIgZXhlY3V0ZXMgYSBzaW5nbGUgc3RlcCBpdCBleHBlY3RzIHRvIGFkdmFuY2UgYmV5b25kIHRoZSBjdXJyZW50IGluc3RydWN0aW9uLiAgV2l0aCB0aGUgSVJRcyBhbmQgYW5kIHRpbWVyIHNlcnZpY2Ugcm91dGluZXMgb24sIGEgc2luZ2xlIHN0ZXAgbWlnaHQganVtcCBpbnRvIHRoZSBvbmUgb2YgdGhlIGludGVycnVwdCBvciBleGNlcHRpb24gdmVjdG9ycyBpbnN0ZWFkIG9mIGV4ZWN1dGluZyB0aGUgY3VycmVudCBpbnN0cnVjdGlvbi4gVGhpcyBtZWFucyB5b3UgbWF5IGhpdCB0aGUgc2FtZSBicmVha3BvaW50IGEgbnVtYmVyIG9mIHRpbWVzIGJlZm9yZSBleGVjdXRpbmcgdGhlIGluc3RydWN0aW9uIGdkYiB3YW50cyB0byBoYXZlIGV4ZWN1dGVkLiAgQmVjYXVzZSB0aGVyZSBhcmUgcmFyZSBjaXJjdW1zdGFuY2VzIHdoZXJlIHlvdSB3YW50IHRvIHNpbmdsZSBzdGVwIGludG8gYW4gaW50ZXJydXB0IHZlY3RvciB0aGUgYmVoYXZpb3IgY2FuIGJlIGNvbnRyb2xsZWQgZnJvbSBHREIuICBUaGVyZSBhcmUgdGhyZWUgY29tbWFuZHMgeW91IGNhbiBxdWVyeSBhbmQgc2V0IHRoZSBzaW5nbGUgc3RlcCBiZWhhdmlvcjoKQHRhYmxlIEBjb2RlCkBpdGVtIG1haW50ZW5hbmNlIHBhY2tldCBxcWVtdS5zc3RlcGJpdHMKClRoaXMgd2lsbCBkaXNwbGF5IHRoZSBNQVNLIGJpdHMgdXNlZCB0byBjb250cm9sIHRoZSBzaW5nbGUgc3RlcHBpbmcgSUU6CkBleGFtcGxlCihnZGIpIG1haW50ZW5hbmNlIHBhY2tldCBxcWVtdS5zc3RlcGJpdHMKc2VuZGluZzogInFxZW11LnNzdGVwYml0cyIKcmVjZWl2ZWQ6ICJFTkFCTEU9MSxOT0lSUT0yLE5PVElNRVI9NCIKQGVuZCBleGFtcGxlCkBpdGVtIG1haW50ZW5hbmNlIHBhY2tldCBxcWVtdS5zc3RlcAoKVGhpcyB3aWxsIGRpc3BsYXkgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIG1hc2sgdXNlZCB3aGVuIHNpbmdsZSBzdGVwcGluZyBJRToKQGV4YW1wbGUKKGdkYikgbWFpbnRlbmFuY2UgcGFja2V0IHFxZW11LnNzdGVwCnNlbmRpbmc6ICJxcWVtdS5zc3RlcCIKcmVjZWl2ZWQ6ICIweDciCkBlbmQgZXhhbXBsZQpAaXRlbSBtYWludGVuYW5jZSBwYWNrZXQgUXFlbXUuc3N0ZXA9SEVYX1ZBTFVFCgpUaGlzIHdpbGwgY2hhbmdlIHRoZSBzaW5nbGUgc3RlcCBtYXNrLCBzbyBpZiB3YW50ZWQgdG8gZW5hYmxlIElSUXMgb24gdGhlIHNpbmdsZSBzdGVwLCBidXQgbm90IHRpbWVycywgeW91IHdvdWxkIHVzZToKQGV4YW1wbGUKKGdkYikgbWFpbnRlbmFuY2UgcGFja2V0IFFxZW11LnNzdGVwPTB4NQpzZW5kaW5nOiAicWVtdS5zc3RlcD0weDUiCnJlY2VpdmVkOiAiT0siCkBlbmQgZXhhbXBsZQpAZW5kIHRhYmxlCgpAbm9kZSBwY3N5c19vc19zcGVjaWZpYwpAc2VjdGlvbiBUYXJnZXQgT1Mgc3BlY2lmaWMgaW5mb3JtYXRpb24KCkBzdWJzZWN0aW9uIExpbnV4CgpUbyBoYXZlIGFjY2VzcyB0byBTVkdBIGdyYXBoaWMgbW9kZXMgdW5kZXIgWDExLCB1c2UgdGhlIEBjb2Rle3Zlc2F9IG9yCnRoZSBAY29kZXtjaXJydXN9IFgxMSBkcml2ZXIuIEZvciBvcHRpbWFsIHBlcmZvcm1hbmNlcywgdXNlIDE2IGJpdApjb2xvciBkZXB0aCBpbiB0aGUgZ3Vlc3QgYW5kIHRoZSBob3N0IE9TLgoKV2hlbiB1c2luZyBhIDIuNiBndWVzdCBMaW51eCBrZXJuZWwsIHlvdSBzaG91bGQgYWRkIHRoZSBvcHRpb24KQGNvZGV7Y2xvY2s9cGl0fSBvbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZSBiZWNhdXNlIHRoZSAyLjYgTGludXgKa2VybmVscyBtYWtlIHZlcnkgc3RyaWN0IHJlYWwgdGltZSBjbG9jayBjaGVja3MgYnkgZGVmYXVsdCB0aGF0IFFFTVUKY2Fubm90IHNpbXVsYXRlIGV4YWN0bHkuCgpXaGVuIHVzaW5nIGEgMi42IGd1ZXN0IExpbnV4IGtlcm5lbCwgdmVyaWZ5IHRoYXQgdGhlIDRHLzRHIHBhdGNoIGlzCm5vdCBhY3RpdmF0ZWQgYmVjYXVzZSBRRU1VIGlzIHNsb3dlciB3aXRoIHRoaXMgcGF0Y2guIFRoZSBRRU1VCkFjY2VsZXJhdG9yIE1vZHVsZSBpcyBhbHNvIG11Y2ggc2xvd2VyIGluIHRoaXMgY2FzZS4gRWFybGllciBGZWRvcmEKQ29yZSAzIExpbnV4IGtlcm5lbCAoPCAyLjYuOS0xLjcyNF9GQzMpIHdlcmUga25vd24gdG8gaW5jb3Jwb3JhdGUgdGhpcwpwYXRjaCBieSBkZWZhdWx0LiBOZXdlciBrZXJuZWxzIGRvbid0IGhhdmUgaXQuCgpAc3Vic2VjdGlvbiBXaW5kb3dzCgpJZiB5b3UgaGF2ZSBhIHNsb3cgaG9zdCwgdXNpbmcgV2luZG93cyA5NSBpcyBiZXR0ZXIgYXMgaXQgZ2l2ZXMgdGhlCmJlc3Qgc3BlZWQuIFdpbmRvd3MgMjAwMCBpcyBhbHNvIGEgZ29vZCBjaG9pY2UuCgpAc3Vic3Vic2VjdGlvbiBTVkdBIGdyYXBoaWMgbW9kZXMgc3VwcG9ydAoKUUVNVSBlbXVsYXRlcyBhIENpcnJ1cyBMb2dpYyBHRDU0NDYgVmlkZW8KY2FyZC4gQWxsIFdpbmRvd3MgdmVyc2lvbnMgc3RhcnRpbmcgZnJvbSBXaW5kb3dzIDk1IHNob3VsZCByZWNvZ25pemUKYW5kIHVzZSB0aGlzIGdyYXBoaWMgY2FyZC4gRm9yIG9wdGltYWwgcGVyZm9ybWFuY2VzLCB1c2UgMTYgYml0IGNvbG9yCmRlcHRoIGluIHRoZSBndWVzdCBhbmQgdGhlIGhvc3QgT1MuCgpJZiB5b3UgYXJlIHVzaW5nIFdpbmRvd3MgWFAgYXMgZ3Vlc3QgT1MgYW5kIGlmIHlvdSB3YW50IHRvIHVzZSBoaWdoCnJlc29sdXRpb24gbW9kZXMgd2hpY2ggdGhlIENpcnJ1cyBMb2dpYyBCSU9TIGRvZXMgbm90IHN1cHBvcnQgKGkuZS4gPj0KMTI4MHgxMDI0eDE2KSwgdGhlbiB5b3Ugc2hvdWxkIHVzZSB0aGUgVkVTQSBWQkUgdmlydHVhbCBncmFwaGljIGNhcmQKKG9wdGlvbiBAb3B0aW9uey1zdGQtdmdhfSkuCgpAc3Vic3Vic2VjdGlvbiBDUFUgdXNhZ2UgcmVkdWN0aW9uCgpXaW5kb3dzIDl4IGRvZXMgbm90IGNvcnJlY3RseSB1c2UgdGhlIENQVSBITFQKaW5zdHJ1Y3Rpb24uIFRoZSByZXN1bHQgaXMgdGhhdCBpdCB0YWtlcyBob3N0IENQVSBjeWNsZXMgZXZlbiB3aGVuCmlkbGUuIFlvdSBjYW4gaW5zdGFsbCB0aGUgdXRpbGl0eSBmcm9tCkB1cmx7aHR0cDovL3d3dy51c2VyLmNpdHlsaW5lLnJ1L35tYXhhbW4vYW1uaGx0bS56aXB9IHRvIHNvbHZlIHRoaXMKcHJvYmxlbS4gTm90ZSB0aGF0IG5vIHN1Y2ggdG9vbCBpcyBuZWVkZWQgZm9yIE5ULCAyMDAwIG9yIFhQLgoKQHN1YnN1YnNlY3Rpb24gV2luZG93cyAyMDAwIGRpc2sgZnVsbCBwcm9ibGVtCgpXaW5kb3dzIDIwMDAgaGFzIGEgYnVnIHdoaWNoIGdpdmVzIGEgZGlzayBmdWxsIHByb2JsZW0gZHVyaW5nIGl0cwppbnN0YWxsYXRpb24uIFdoZW4gaW5zdGFsbGluZyBpdCwgdXNlIHRoZSBAb3B0aW9uey13aW4yay1oYWNrfSBRRU1VCm9wdGlvbiB0byBlbmFibGUgYSBzcGVjaWZpYyB3b3JrYXJvdW5kLiBBZnRlciBXaW5kb3dzIDIwMDAgaXMKaW5zdGFsbGVkLCB5b3Ugbm8gbG9uZ2VyIG5lZWQgdGhpcyBvcHRpb24gKHRoaXMgb3B0aW9uIHNsb3dzIGRvd24gdGhlCklERSB0cmFuc2ZlcnMpLgoKQHN1YnN1YnNlY3Rpb24gV2luZG93cyAyMDAwIHNodXRkb3duCgpXaW5kb3dzIDIwMDAgY2Fubm90IGF1dG9tYXRpY2FsbHkgc2h1dGRvd24gaW4gUUVNVSBhbHRob3VnaCBXaW5kb3dzIDk4CmNhbi4gSXQgY29tZXMgZnJvbSB0aGUgZmFjdCB0aGF0IFdpbmRvd3MgMjAwMCBkb2VzIG5vdCBhdXRvbWF0aWNhbGx5CnVzZSB0aGUgQVBNIGRyaXZlciBwcm92aWRlZCBieSB0aGUgQklPUy4KCkluIG9yZGVyIHRvIGNvcnJlY3QgdGhhdCwgZG8gdGhlIGZvbGxvd2luZyAodGhhbmtzIHRvIFN0cnVhbgpCYXJ0bGV0dCk6IGdvIHRvIHRoZSBDb250cm9sIFBhbmVsID0+IEFkZC9SZW1vdmUgSGFyZHdhcmUgJiBOZXh0ID0+CkFkZC9Ucm91Ymxlc2hvb3QgYSBkZXZpY2UgPT4gQWRkIGEgbmV3IGRldmljZSAmIE5leHQgPT4gTm8sIHNlbGVjdCB0aGUKaGFyZHdhcmUgZnJvbSBhIGxpc3QgJiBOZXh0ID0+IE5UIEFwbS9MZWdhY3kgU3VwcG9ydCAmIE5leHQgPT4gTmV4dAooYWdhaW4pIGEgZmV3IHRpbWVzLiBOb3cgdGhlIGRyaXZlciBpcyBpbnN0YWxsZWQgYW5kIFdpbmRvd3MgMjAwMCBub3cKY29ycmVjdGx5IGluc3RydWN0cyBRRU1VIHRvIHNodXRkb3duIGF0IHRoZSBhcHByb3ByaWF0ZSBtb21lbnQuCgpAc3Vic3Vic2VjdGlvbiBTaGFyZSBhIGRpcmVjdG9yeSBiZXR3ZWVuIFVuaXggYW5kIFdpbmRvd3MKClNlZSBAcmVme3NlY19pbnZvY2F0aW9ufSBhYm91dCB0aGUgaGVscCBvZiB0aGUgb3B0aW9uIEBvcHRpb257LXNtYn0uCgpAc3Vic3Vic2VjdGlvbiBXaW5kb3dzIFhQIHNlY3VyaXR5IHByb2JsZW0KClNvbWUgcmVsZWFzZXMgb2YgV2luZG93cyBYUCBpbnN0YWxsIGNvcnJlY3RseSBidXQgZ2l2ZSBhIHNlY3VyaXR5CmVycm9yIHdoZW4gYm9vdGluZzoKQGV4YW1wbGUKQSBwcm9ibGVtIGlzIHByZXZlbnRpbmcgV2luZG93cyBmcm9tIGFjY3VyYXRlbHkgY2hlY2tpbmcgdGhlCmxpY2Vuc2UgZm9yIHRoaXMgY29tcHV0ZXIuIEVycm9yIGNvZGU6IDB4ODAwNzAzZTYuCkBlbmQgZXhhbXBsZQoKVGhlIHdvcmthcm91bmQgaXMgdG8gaW5zdGFsbCBhIHNlcnZpY2UgcGFjayBmb3IgWFAgYWZ0ZXIgYSBib290IGluIHNhZmUKbW9kZS4gVGhlbiByZWJvb3QsIGFuZCB0aGUgcHJvYmxlbSBzaG91bGQgZ28gYXdheS4gU2luY2UgdGhlcmUgaXMgbm8KbmV0d29yayB3aGlsZSBpbiBzYWZlIG1vZGUsIGl0cyByZWNvbW1lbmRlZCB0byBkb3dubG9hZCB0aGUgZnVsbAppbnN0YWxsYXRpb24gb2YgU1AxIG9yIFNQMiBhbmQgdHJhbnNmZXIgdGhhdCB2aWEgYW4gSVNPIG9yIHVzaW5nIHRoZQp2dmZhdCBibG9jayBkZXZpY2UgKCItaGRiIGZhdDpkaXJlY3Rvcnlfd2hpY2hfaG9sZHNfdGhlX1NQIikuCgpAc3Vic2VjdGlvbiBNUy1ET1MgYW5kIEZyZWVET1MKCkBzdWJzdWJzZWN0aW9uIENQVSB1c2FnZSByZWR1Y3Rpb24KCkRPUyBkb2VzIG5vdCBjb3JyZWN0bHkgdXNlIHRoZSBDUFUgSExUIGluc3RydWN0aW9uLiBUaGUgcmVzdWx0IGlzIHRoYXQKaXQgdGFrZXMgaG9zdCBDUFUgY3ljbGVzIGV2ZW4gd2hlbiBpZGxlLiBZb3UgY2FuIGluc3RhbGwgdGhlIHV0aWxpdHkKZnJvbSBAdXJse2h0dHA6Ly93d3cudm13YXJlLmNvbS9zb2Z0d2FyZS9kb3NpZGxlMjEwLnppcH0gdG8gc29sdmUgdGhpcwpwcm9ibGVtLgoKQG5vZGUgUUVNVSBTeXN0ZW0gZW11bGF0b3IgZm9yIG5vbiBQQyB0YXJnZXRzCkBjaGFwdGVyIFFFTVUgU3lzdGVtIGVtdWxhdG9yIGZvciBub24gUEMgdGFyZ2V0cwoKUUVNVSBpcyBhIGdlbmVyaWMgZW11bGF0b3IgYW5kIGl0IGVtdWxhdGVzIG1hbnkgbm9uIFBDCm1hY2hpbmVzLiBNb3N0IG9mIHRoZSBvcHRpb25zIGFyZSBzaW1pbGFyIHRvIHRoZSBQQyBlbXVsYXRvci4gVGhlCmRpZmZlcmVuY2VzIGFyZSBtZW50aW9uZWQgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucy4KCkBtZW51CiogUUVNVSBQb3dlclBDIFN5c3RlbSBlbXVsYXRvcjo6CiogU3BhcmMzMiBTeXN0ZW0gZW11bGF0b3I6OgoqIFNwYXJjNjQgU3lzdGVtIGVtdWxhdG9yOjoKKiBNSVBTIFN5c3RlbSBlbXVsYXRvcjo6CiogQVJNIFN5c3RlbSBlbXVsYXRvcjo6CiogQ29sZEZpcmUgU3lzdGVtIGVtdWxhdG9yOjoKQGVuZCBtZW51CgpAbm9kZSBRRU1VIFBvd2VyUEMgU3lzdGVtIGVtdWxhdG9yCkBzZWN0aW9uIFFFTVUgUG93ZXJQQyBTeXN0ZW0gZW11bGF0b3IKClVzZSB0aGUgZXhlY3V0YWJsZSBAZmlsZXtxZW11LXN5c3RlbS1wcGN9IHRvIHNpbXVsYXRlIGEgY29tcGxldGUgUFJFUApvciBQb3dlck1hYyBQb3dlclBDIHN5c3RlbS4KClFFTVUgZW11bGF0ZXMgdGhlIGZvbGxvd2luZyBQb3dlck1hYyBwZXJpcGhlcmFsczoKCkBpdGVtaXplIEBtaW51cwpAaXRlbQpVbmlOb3J0aCBvciBHcmFja2xlIFBDSSBCcmlkZ2UKQGl0ZW0KUENJIFZHQSBjb21wYXRpYmxlIGNhcmQgd2l0aCBWRVNBIEJvY2hzIEV4dGVuc2lvbnMKQGl0ZW0KMiBQTUFDIElERSBpbnRlcmZhY2VzIHdpdGggaGFyZCBkaXNrIGFuZCBDRC1ST00gc3VwcG9ydApAaXRlbQpORTIwMDAgUENJIGFkYXB0ZXJzCkBpdGVtCk5vbiBWb2xhdGlsZSBSQU0KQGl0ZW0KVklBLUNVREEgd2l0aCBBREIga2V5Ym9hcmQgYW5kIG1vdXNlLgpAZW5kIGl0ZW1pemUKClFFTVUgZW11bGF0ZXMgdGhlIGZvbGxvd2luZyBQUkVQIHBlcmlwaGVyYWxzOgoKQGl0ZW1pemUgQG1pbnVzCkBpdGVtClBDSSBCcmlkZ2UKQGl0ZW0KUENJIFZHQSBjb21wYXRpYmxlIGNhcmQgd2l0aCBWRVNBIEJvY2hzIEV4dGVuc2lvbnMKQGl0ZW0KMiBJREUgaW50ZXJmYWNlcyB3aXRoIGhhcmQgZGlzayBhbmQgQ0QtUk9NIHN1cHBvcnQKQGl0ZW0KRmxvcHB5IGRpc2sKQGl0ZW0KTkUyMDAwIG5ldHdvcmsgYWRhcHRlcnMKQGl0ZW0KU2VyaWFsIHBvcnQKQGl0ZW0KUFJFUCBOb24gVm9sYXRpbGUgUkFNCkBpdGVtClBDIGNvbXBhdGlibGUga2V5Ym9hcmQgYW5kIG1vdXNlLgpAZW5kIGl0ZW1pemUKClFFTVUgdXNlcyB0aGUgT3BlbiBIYWNrJ1dhcmUgT3BlbiBGaXJtd2FyZSBDb21wYXRpYmxlIEJJT1MgYXZhaWxhYmxlIGF0CkB1cmx7aHR0cDovL3BlcnNvLm1hZ2ljLmZyL2xfaW5kaWVuL09wZW5IYWNrV2FyZS9pbmRleC5odG19LgoKU2luY2UgdmVyc2lvbiAwLjkuMSwgUUVNVSB1c2VzIE9wZW5CSU9TIEB1cmx7aHR0cDovL3d3dy5vcGVuYmlvcy5vcmcvfQpmb3IgdGhlIGczYmVpZ2UgYW5kIG1hYzk5IFBvd2VyTWFjIG1hY2hpbmVzLiBPcGVuQklPUyBpcyBhIGZyZWUgKEdQTAp2MikgcG9ydGFibGUgZmlybXdhcmUgaW1wbGVtZW50YXRpb24uIFRoZSBnb2FsIGlzIHRvIGltcGxlbWVudCBhIDEwMCUKSUVFRSAxMjc1LTE5OTQgKHJlZmVycmVkIHRvIGFzIE9wZW4gRmlybXdhcmUpIGNvbXBsaWFudCBmaXJtd2FyZS4KCkBjIG1hbiBiZWdpbiBPUFRJT05TCgpUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIHNwZWNpZmljIHRvIHRoZSBQb3dlclBDIGVtdWxhdGlvbjoKCkB0YWJsZSBAb3B0aW9uCgpAaXRlbSAtZyBAdmFye1d9eEB2YXJ7SH1beEB2YXJ7REVQVEh9XQoKU2V0IHRoZSBpbml0aWFsIFZHQSBncmFwaGljIG1vZGUuIFRoZSBkZWZhdWx0IGlzIDgwMHg2MDB4MTUuCgpAaXRlbSAtcHJvbS1lbnYgQHZhcntzdHJpbmd9CgpTZXQgT3BlbkJJT1MgdmFyaWFibGVzIGluIE5WUkFNLCBmb3IgZXhhbXBsZToKCkBleGFtcGxlCnFlbXUtc3lzdGVtLXBwYyAtcHJvbS1lbnYgJ2F1dG8tYm9vdD89ZmFsc2UnIFwKIC1wcm9tLWVudiAnYm9vdC1kZXZpY2U9aGQ6MixceWFib290JyBcCiAtcHJvbS1lbnYgJ2Jvb3QtYXJncz1jb25mPWhkOjIsXHlhYm9vdC5jb25mJwpAZW5kIGV4YW1wbGUKClRoZXNlIHZhcmlhYmxlcyBhcmUgbm90IHVzZWQgYnkgT3BlbiBIYWNrJ1dhcmUuCgpAZW5kIHRhYmxlCgpAYyBtYW4gZW5kCgoKTW9yZSBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgYXQKQHVybHtodHRwOi8vcGVyc28ubWFnaWMuZnIvbF9pbmRpZW4vcWVtdS1wcGMvfS4KCkBub2RlIFNwYXJjMzIgU3lzdGVtIGVtdWxhdG9yCkBzZWN0aW9uIFNwYXJjMzIgU3lzdGVtIGVtdWxhdG9yCgpVc2UgdGhlIGV4ZWN1dGFibGUgQGZpbGV7cWVtdS1zeXN0ZW0tc3BhcmN9IHRvIHNpbXVsYXRlIHRoZSBmb2xsb3dpbmcKU3VuNG0gYXJjaGl0ZWN0dXJlIG1hY2hpbmVzOgpAaXRlbWl6ZSBAbWludXMKQGl0ZW0KU1BBUkNzdGF0aW9uIDQKQGl0ZW0KU1BBUkNzdGF0aW9uIDUKQGl0ZW0KU1BBUkNzdGF0aW9uIDEwCkBpdGVtClNQQVJDc3RhdGlvbiAyMApAaXRlbQpTUEFSQ3NlcnZlciA2MDBNUApAaXRlbQpTUEFSQ3N0YXRpb24gTFgKQGl0ZW0KU1BBUkNzdGF0aW9uIFZveWFnZXIKQGl0ZW0KU1BBUkNjbGFzc2ljCkBpdGVtClNQQVJDYm9vawpAZW5kIGl0ZW1pemUKClRoZSBlbXVsYXRpb24gaXMgc29tZXdoYXQgY29tcGxldGUuIFNNUCB1cCB0byAxNiBDUFVzIGlzIHN1cHBvcnRlZCwKYnV0IExpbnV4IGxpbWl0cyB0aGUgbnVtYmVyIG9mIHVzYWJsZSBDUFVzIHRvIDQuCgpJdCdzIGFsc28gcG9zc2libGUgdG8gc2ltdWxhdGUgYSBTUEFSQ3N0YXRpb24gMiAoc3VuNGMgYXJjaGl0ZWN0dXJlKSwKU1BBUkNzZXJ2ZXIgMTAwMCwgb3IgU1BBUkNjZW50ZXIgMjAwMCAoc3VuNGQgYXJjaGl0ZWN0dXJlKSwgYnV0IHRoZXNlCmVtdWxhdG9ycyBhcmUgbm90IHVzYWJsZSB5ZXQuCgpRRU1VIGVtdWxhdGVzIHRoZSBmb2xsb3dpbmcgc3VuNG0vc3VuNGMvc3VuNGQgcGVyaXBoZXJhbHM6CgpAaXRlbWl6ZSBAbWludXMKQGl0ZW0KSU9NTVUgb3IgSU8tVU5JVHMKQGl0ZW0KVENYIEZyYW1lIGJ1ZmZlcgpAaXRlbQpMYW5jZSAoQW03OTkwKSBFdGhlcm5ldApAaXRlbQpOb24gVm9sYXRpbGUgUkFNIE00OFQwMi9NNDhUMDgKQGl0ZW0KU2xhdmUgSS9POiB0aW1lcnMsIGludGVycnVwdCBjb250cm9sbGVycywgWmlsb2cgc2VyaWFsIHBvcnRzLCBrZXlib2FyZAphbmQgcG93ZXIvcmVzZXQgbG9naWMKQGl0ZW0KRVNQIFNDU0kgY29udHJvbGxlciB3aXRoIGhhcmQgZGlzayBhbmQgQ0QtUk9NIHN1cHBvcnQKQGl0ZW0KRmxvcHB5IGRyaXZlIChub3Qgb24gU1MtNjAwTVApCkBpdGVtCkNTNDIzMSBzb3VuZCBkZXZpY2UgKG9ubHkgb24gU1MtNSwgbm90IHdvcmtpbmcgeWV0KQpAZW5kIGl0ZW1pemUKClRoZSBudW1iZXIgb2YgcGVyaXBoZXJhbHMgaXMgZml4ZWQgaW4gdGhlIGFyY2hpdGVjdHVyZS4gIE1heGltdW0KbWVtb3J5IHNpemUgZGVwZW5kcyBvbiB0aGUgbWFjaGluZSB0eXBlLCBmb3IgU1MtNSBpdCBpcyAyNTZNQiBhbmQgZm9yCm90aGVycyAyMDQ3TUIuCgpTaW5jZSB2ZXJzaW9uIDAuOC4yLCBRRU1VIHVzZXMgT3BlbkJJT1MKQHVybHtodHRwOi8vd3d3Lm9wZW5iaW9zLm9yZy99LiBPcGVuQklPUyBpcyBhIGZyZWUgKEdQTCB2MikgcG9ydGFibGUKZmlybXdhcmUgaW1wbGVtZW50YXRpb24uIFRoZSBnb2FsIGlzIHRvIGltcGxlbWVudCBhIDEwMCUgSUVFRQoxMjc1LTE5OTQgKHJlZmVycmVkIHRvIGFzIE9wZW4gRmlybXdhcmUpIGNvbXBsaWFudCBmaXJtd2FyZS4KCkEgc2FtcGxlIExpbnV4IDIuNiBzZXJpZXMga2VybmVsIGFuZCByYW0gZGlzayBpbWFnZSBhcmUgYXZhaWxhYmxlIG9uCnRoZSBRRU1VIHdlYiBzaXRlLiBUaGVyZSBhcmUgc3RpbGwgaXNzdWVzIHdpdGggTmV0QlNEIGFuZCBPcGVuQlNELCBidXQKc29tZSBrZXJuZWwgdmVyc2lvbnMgd29yay4gUGxlYXNlIG5vdGUgdGhhdCBjdXJyZW50bHkgU29sYXJpcyBrZXJuZWxzCmRvbid0IHdvcmsgcHJvYmFibHkgZHVlIHRvIGludGVyZmFjZSBpc3N1ZXMgYmV0d2VlbiBPcGVuQklPUyBhbmQKU29sYXJpcy4KCkBjIG1hbiBiZWdpbiBPUFRJT05TCgpUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIHNwZWNpZmljIHRvIHRoZSBTcGFyYzMyIGVtdWxhdGlvbjoKCkB0YWJsZSBAb3B0aW9uCgpAaXRlbSAtZyBAdmFye1d9eEB2YXJ7SH14W3hAdmFye0RFUFRIfV0KClNldCB0aGUgaW5pdGlhbCBUQ1ggZ3JhcGhpYyBtb2RlLiBUaGUgZGVmYXVsdCBpcyAxMDI0eDc2OHg4LCBjdXJyZW50bHkKdGhlIG9ubHkgb3RoZXIgcG9zc2libGUgbW9kZSBpcyAxMDI0eDc2OHgyNC4KCkBpdGVtIC1wcm9tLWVudiBAdmFye3N0cmluZ30KClNldCBPcGVuQklPUyB2YXJpYWJsZXMgaW4gTlZSQU0sIGZvciBleGFtcGxlOgoKQGV4YW1wbGUKcWVtdS1zeXN0ZW0tc3BhcmMgLXByb20tZW52ICdhdXRvLWJvb3Q/PWZhbHNlJyBcCiAtcHJvbS1lbnYgJ2Jvb3QtZGV2aWNlPXNkKDAsMiwwKTpkJyAtcHJvbS1lbnYgJ2Jvb3QtYXJncz1saW51eCBzaW5nbGUnCkBlbmQgZXhhbXBsZQoKQGl0ZW0gLU0gW1NTLTR8U1MtNXxTUy0xMHxTUy0yMHxTUy02MDBNUHxMWHxWb3lhZ2VyfFNQQVJDQ2xhc3NpY3xTUEFSQ2Jvb2t8U1MtMnxTUy0xMDAwfFNTLTIwMDBdCgpTZXQgdGhlIGVtdWxhdGVkIG1hY2hpbmUgdHlwZS4gRGVmYXVsdCBpcyBTUy01LgoKQGVuZCB0YWJsZQoKQGMgbWFuIGVuZAoKQG5vZGUgU3BhcmM2NCBTeXN0ZW0gZW11bGF0b3IKQHNlY3Rpb24gU3BhcmM2NCBTeXN0ZW0gZW11bGF0b3IKClVzZSB0aGUgZXhlY3V0YWJsZSBAZmlsZXtxZW11LXN5c3RlbS1zcGFyYzY0fSB0byBzaW11bGF0ZSBhIFN1bjR1CihVbHRyYVNQQVJDIFBDLWxpa2UgbWFjaGluZSksIFN1bjR2IChUMSBQQy1saWtlIG1hY2hpbmUpLCBvciBnZW5lcmljCk5pYWdhcmEgKFQxKSBtYWNoaW5lLiBUaGUgZW11bGF0b3IgaXMgbm90IHVzYWJsZSBmb3IgYW55dGhpbmcgeWV0LCBidXQKaXQgY2FuIGxhdW5jaCBzb21lIGtlcm5lbHMuCgpRRU1VIGVtdWxhdGVzIHRoZSBmb2xsb3dpbmcgcGVyaXBoZXJhbHM6CgpAaXRlbWl6ZSBAbWludXMKQGl0ZW0KVWx0cmFTcGFyYyBJSWkgQVBCIFBDSSBCcmlkZ2UKQGl0ZW0KUENJIFZHQSBjb21wYXRpYmxlIGNhcmQgd2l0aCBWRVNBIEJvY2hzIEV4dGVuc2lvbnMKQGl0ZW0KUFMvMiBtb3VzZSBhbmQga2V5Ym9hcmQKQGl0ZW0KTm9uIFZvbGF0aWxlIFJBTSBNNDhUNTkKQGl0ZW0KUEMtY29tcGF0aWJsZSBzZXJpYWwgcG9ydHMKQGl0ZW0KMiBQQ0kgSURFIGludGVyZmFjZXMgd2l0aCBoYXJkIGRpc2sgYW5kIENELVJPTSBzdXBwb3J0CkBpdGVtCkZsb3BweSBkaXNrCkBlbmQgaXRlbWl6ZQoKQGMgbWFuIGJlZ2luIE9QVElPTlMKClRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgc3BlY2lmaWMgdG8gdGhlIFNwYXJjNjQgZW11bGF0aW9uOgoKQHRhYmxlIEBvcHRpb24KCkBpdGVtIC1wcm9tLWVudiBAdmFye3N0cmluZ30KClNldCBPcGVuQklPUyB2YXJpYWJsZXMgaW4gTlZSQU0sIGZvciBleGFtcGxlOgoKQGV4YW1wbGUKcWVtdS1zeXN0ZW0tc3BhcmM2NCAtcHJvbS1lbnYgJ2F1dG8tYm9vdD89ZmFsc2UnCkBlbmQgZXhhbXBsZQoKQGl0ZW0gLU0gW3N1bjR1fHN1bjR2fE5pYWdhcmFdCgpTZXQgdGhlIGVtdWxhdGVkIG1hY2hpbmUgdHlwZS4gVGhlIGRlZmF1bHQgaXMgc3VuNHUuCgpAZW5kIHRhYmxlCgpAYyBtYW4gZW5kCgpAbm9kZSBNSVBTIFN5c3RlbSBlbXVsYXRvcgpAc2VjdGlvbiBNSVBTIFN5c3RlbSBlbXVsYXRvcgoKRm91ciBleGVjdXRhYmxlcyBjb3ZlciBzaW11bGF0aW9uIG9mIDMyIGFuZCA2NC1iaXQgTUlQUyBzeXN0ZW1zIGluCmJvdGggZW5kaWFuIG9wdGlvbnMsIEBmaWxle3FlbXUtc3lzdGVtLW1pcHN9LCBAZmlsZXtxZW11LXN5c3RlbS1taXBzZWx9CkBmaWxle3FlbXUtc3lzdGVtLW1pcHM2NH0gYW5kIEBmaWxle3FlbXUtc3lzdGVtLW1pcHM2NGVsfS4KRml2ZSBkaWZmZXJlbnQgbWFjaGluZSB0eXBlcyBhcmUgZW11bGF0ZWQ6CgpAaXRlbWl6ZSBAbWludXMKQGl0ZW0KQSBnZW5lcmljIElTQSBQQy1saWtlIG1hY2hpbmUgIm1pcHMiCkBpdGVtClRoZSBNSVBTIE1hbHRhIHByb3RvdHlwZSBib2FyZCAibWFsdGEiCkBpdGVtCkFuIEFDRVIgUGljYSAicGljYTYxIi4gVGhpcyBtYWNoaW5lIG5lZWRzIHRoZSA2NC1iaXQgZW11bGF0b3IuCkBpdGVtCk1JUFMgZW11bGF0b3IgcHNldWRvIGJvYXJkICJtaXBzc2ltIgpAaXRlbQpBIE1JUFMgTWFnbnVtIFI0MDAwIG1hY2hpbmUgIm1hZ251bSIuIFRoaXMgbWFjaGluZSBuZWVkcyB0aGUgNjQtYml0IGVtdWxhdG9yLgpAZW5kIGl0ZW1pemUKClRoZSBnZW5lcmljIGVtdWxhdGlvbiBpcyBzdXBwb3J0ZWQgYnkgRGViaWFuICdFdGNoJyBhbmQgaXMgYWJsZSB0bwppbnN0YWxsIERlYmlhbiBpbnRvIGEgdmlydHVhbCBkaXNrIGltYWdlLiBUaGUgZm9sbG93aW5nIGRldmljZXMgYXJlCmVtdWxhdGVkOgoKQGl0ZW1pemUgQG1pbnVzCkBpdGVtCkEgcmFuZ2Ugb2YgTUlQUyBDUFVzLCBkZWZhdWx0IGlzIHRoZSAyNEtmCkBpdGVtClBDIHN0eWxlIHNlcmlhbCBwb3J0CkBpdGVtClBDIHN0eWxlIElERSBkaXNrCkBpdGVtCk5FMjAwMCBuZXR3b3JrIGNhcmQKQGVuZCBpdGVtaXplCgpUaGUgTWFsdGEgZW11bGF0aW9uIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgZGV2aWNlczoKCkBpdGVtaXplIEBtaW51cwpAaXRlbQpDb3JlIGJvYXJkIHdpdGggTUlQUyAyNEtmIENQVSBhbmQgR2FsaWxlbyBzeXN0ZW0gY29udHJvbGxlcgpAaXRlbQpQSUlYNCBQQ0kvVVNCL1NNYnVzIGNvbnRyb2xsZXIKQGl0ZW0KVGhlIE11bHRpLUkvTyBjaGlwJ3Mgc2VyaWFsIGRldmljZQpAaXRlbQpQQ0kgbmV0d29yayBjYXJkcyAoUENuZXQzMiBhbmQgb3RoZXJzKQpAaXRlbQpNYWx0YSBGUEdBIHNlcmlhbCBkZXZpY2UKQGl0ZW0KQ2lycnVzIChkZWZhdWx0KSBvciBhbnkgb3RoZXIgUENJIFZHQSBncmFwaGljcyBjYXJkCkBlbmQgaXRlbWl6ZQoKVGhlIEFDRVIgUGljYSBlbXVsYXRpb24gc3VwcG9ydHM6CgpAaXRlbWl6ZSBAbWludXMKQGl0ZW0KTUlQUyBSNDAwMCBDUFUKQGl0ZW0KUEMtc3R5bGUgSVJRIGFuZCBETUEgY29udHJvbGxlcnMKQGl0ZW0KUEMgS2V5Ym9hcmQKQGl0ZW0KSURFIGNvbnRyb2xsZXIKQGVuZCBpdGVtaXplCgpUaGUgbWlwc3NpbSBwc2V1ZG8gYm9hcmQgZW11bGF0aW9uIHByb3ZpZGVzIGFuIGVudmlyb25tZW50IHNpbWlsaWFyCnRvIHdoYXQgdGhlIHByb3ByaWV0YXJ5IE1JUFMgZW11bGF0b3IgdXNlcyBmb3IgcnVubmluZyBMaW51eC4KSXQgc3VwcG9ydHM6CgpAaXRlbWl6ZSBAbWludXMKQGl0ZW0KQSByYW5nZSBvZiBNSVBTIENQVXMsIGRlZmF1bHQgaXMgdGhlIDI0S2YKQGl0ZW0KUEMgc3R5bGUgc2VyaWFsIHBvcnQKQGl0ZW0KTUlQU25ldCBuZXR3b3JrIGVtdWxhdGlvbgpAZW5kIGl0ZW1pemUKClRoZSBNSVBTIE1hZ251bSBSNDAwMCBlbXVsYXRpb24gc3VwcG9ydHM6CgpAaXRlbWl6ZSBAbWludXMKQGl0ZW0KTUlQUyBSNDAwMCBDUFUKQGl0ZW0KUEMtc3R5bGUgSVJRIGNvbnRyb2xsZXIKQGl0ZW0KUEMgS2V5Ym9hcmQKQGl0ZW0KU0NTSSBjb250cm9sbGVyCkBpdGVtCkczNjQgZnJhbWVidWZmZXIKQGVuZCBpdGVtaXplCgoKQG5vZGUgQVJNIFN5c3RlbSBlbXVsYXRvcgpAc2VjdGlvbiBBUk0gU3lzdGVtIGVtdWxhdG9yCgpVc2UgdGhlIGV4ZWN1dGFibGUgQGZpbGV7cWVtdS1zeXN0ZW0tYXJtfSB0byBzaW11bGF0ZSBhIEFSTQptYWNoaW5lLiBUaGUgQVJNIEludGVncmF0b3IvQ1AgYm9hcmQgaXMgZW11bGF0ZWQgd2l0aCB0aGUgZm9sbG93aW5nCmRldmljZXM6CgpAaXRlbWl6ZSBAbWludXMKQGl0ZW0KQVJNOTI2RSwgQVJNMTAyNkUsIEFSTTk0NkUsIEFSTTExMzYgb3IgQ29ydGV4LUE4IENQVQpAaXRlbQpUd28gUEwwMTEgVUFSVHMKQGl0ZW0KU01DIDkxYzExMSBFdGhlcm5ldCBhZGFwdGVyCkBpdGVtClBMMTEwIExDRCBjb250cm9sbGVyCkBpdGVtClBMMDUwIEtNSSB3aXRoIFBTLzIga2V5Ym9hcmQgYW5kIG1vdXNlLgpAaXRlbQpQTDE4MSBNdWx0aU1lZGlhIENhcmQgSW50ZXJmYWNlIHdpdGggU0QgY2FyZC4KQGVuZCBpdGVtaXplCgpUaGUgQVJNIFZlcnNhdGlsZSBiYXNlYm9hcmQgaXMgZW11bGF0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIGRldmljZXM6CgpAaXRlbWl6ZSBAbWludXMKQGl0ZW0KQVJNOTI2RSwgQVJNMTEzNiBvciBDb3J0ZXgtQTggQ1BVCkBpdGVtClBMMTkwIFZlY3RvcmVkIEludGVycnVwdCBDb250cm9sbGVyCkBpdGVtCkZvdXIgUEwwMTEgVUFSVHMKQGl0ZW0KU01DIDkxYzExMSBFdGhlcm5ldCBhZGFwdGVyCkBpdGVtClBMMTEwIExDRCBjb250cm9sbGVyCkBpdGVtClBMMDUwIEtNSSB3aXRoIFBTLzIga2V5Ym9hcmQgYW5kIG1vdXNlLgpAaXRlbQpQQ0kgaG9zdCBicmlkZ2UuICBOb3RlIHRoZSBlbXVsYXRlZCBQQ0kgYnJpZGdlIG9ubHkgcHJvdmlkZXMgYWNjZXNzIHRvClBDSSBtZW1vcnkgc3BhY2UuICBJdCBkb2VzIG5vdCBwcm92aWRlIGFjY2VzcyB0byBQQ0kgSU8gc3BhY2UuClRoaXMgbWVhbnMgc29tZSBkZXZpY2VzIChlZy4gbmUya19wY2kgTklDKSBhcmUgbm90IHVzYWJsZSwgYW5kIG90aGVycwooZWcuIHJ0bDgxMzkgTklDKSBhcmUgb25seSB1c2FibGUgd2hlbiB0aGUgZ3Vlc3QgZHJpdmVycyB1c2UgdGhlIG1lbW9yeQptYXBwZWQgY29udHJvbCByZWdpc3RlcnMuCkBpdGVtClBDSSBPSENJIFVTQiBjb250cm9sbGVyLgpAaXRlbQpMU0k1M0M4OTVBIFBDSSBTQ1NJIEhvc3QgQnVzIEFkYXB0ZXIgd2l0aCBoYXJkIGRpc2sgYW5kIENELVJPTSBkZXZpY2VzLgpAaXRlbQpQTDE4MSBNdWx0aU1lZGlhIENhcmQgSW50ZXJmYWNlIHdpdGggU0QgY2FyZC4KQGVuZCBpdGVtaXplCgpUaGUgQVJNIFJlYWxWaWV3IEVtdWxhdGlvbiBiYXNlYm9hcmQgaXMgZW11bGF0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIGRldmljZXM6CgpAaXRlbWl6ZSBAbWludXMKQGl0ZW0KQVJNOTI2RSwgQVJNMTEzNiwgQVJNMTFNUENPUkUoeDQpIG9yIENvcnRleC1BOCBDUFUKQGl0ZW0KQVJNIEFNQkEgR2VuZXJpYy9EaXN0cmlidXRlZCBJbnRlcnJ1cHQgQ29udHJvbGxlcgpAaXRlbQpGb3VyIFBMMDExIFVBUlRzCkBpdGVtClNNQyA5MWMxMTEgRXRoZXJuZXQgYWRhcHRlcgpAaXRlbQpQTDExMCBMQ0QgY29udHJvbGxlcgpAaXRlbQpQTDA1MCBLTUkgd2l0aCBQUy8yIGtleWJvYXJkIGFuZCBtb3VzZQpAaXRlbQpQQ0kgaG9zdCBicmlkZ2UKQGl0ZW0KUENJIE9IQ0kgVVNCIGNvbnRyb2xsZXIKQGl0ZW0KTFNJNTNDODk1QSBQQ0kgU0NTSSBIb3N0IEJ1cyBBZGFwdGVyIHdpdGggaGFyZCBkaXNrIGFuZCBDRC1ST00gZGV2aWNlcwpAaXRlbQpQTDE4MSBNdWx0aU1lZGlhIENhcmQgSW50ZXJmYWNlIHdpdGggU0QgY2FyZC4KQGVuZCBpdGVtaXplCgpUaGUgWFNjYWxlLWJhc2VkIGNsYW1zaGVsbCBQREEgbW9kZWxzICgiU3BpdHoiLCAiQWtpdGEiLCAiQm9yem9pIgphbmQgIlRlcnJpZXIiKSBlbXVsYXRpb24gaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBwZXJpcGhlcmFsczoKCkBpdGVtaXplIEBtaW51cwpAaXRlbQpJbnRlbCBQWEEyNzAgU3lzdGVtLW9uLWNoaXAgKEFSTSBWNVRFIGNvcmUpCkBpdGVtCk5BTkQgRmxhc2ggbWVtb3J5CkBpdGVtCklCTS9IaXRhY2hpIERTQ00gbWljcm9kcml2ZSBpbiBhIFBYQSBQQ01DSUEgc2xvdCAtIG5vdCBpbiAiQWtpdGEiCkBpdGVtCk9uLWNoaXAgT0hDSSBVU0IgY29udHJvbGxlcgpAaXRlbQpPbi1jaGlwIExDRCBjb250cm9sbGVyCkBpdGVtCk9uLWNoaXAgUmVhbCBUaW1lIENsb2NrCkBpdGVtClRJIEFEUzc4NDYgdG91Y2hzY3JlZW4gY29udHJvbGxlciBvbiBTU1AgYnVzCkBpdGVtCk1heGltIE1BWDExMTEgYW5hbG9nLWRpZ2l0YWwgY29udmVydGVyIG9uIElAbWF0aHteMn1DIGJ1cwpAaXRlbQpHUElPLWNvbm5lY3RlZCBrZXlib2FyZCBjb250cm9sbGVyIGFuZCBMRURzCkBpdGVtClNlY3VyZSBEaWdpdGFsIGNhcmQgY29ubmVjdGVkIHRvIFBYQSBNTUMvU0QgaG9zdApAaXRlbQpUaHJlZSBvbi1jaGlwIFVBUlRzCkBpdGVtCldNODc1MCBhdWRpbyBDT0RFQyBvbiBJQG1hdGh7XjJ9QyBhbmQgSUBtYXRoe14yfVMgYnVzc2VzCkBlbmQgaXRlbWl6ZQoKVGhlIFBhbG0gVHVuZ3N0ZW58RSBQREEgKGNvZGVuYW1lICJDaGVldGFoIikgZW11bGF0aW9uIGluY2x1ZGVzIHRoZQpmb2xsb3dpbmcgZWxlbWVudHM6CgpAaXRlbWl6ZSBAbWludXMKQGl0ZW0KVGV4YXMgSW5zdHJ1bWVudHMgT01BUDMxMCBTeXN0ZW0tb24tY2hpcCAoQVJNIDkyNVQgY29yZSkKQGl0ZW0KUk9NIGFuZCBSQU0gbWVtb3JpZXMgKFJPTSBmaXJtd2FyZSBpbWFnZSBjYW4gYmUgbG9hZGVkIHdpdGggLW9wdGlvbi1yb20pCkBpdGVtCk9uLWNoaXAgTENEIGNvbnRyb2xsZXIKQGl0ZW0KT24tY2hpcCBSZWFsIFRpbWUgQ2xvY2sKQGl0ZW0KVEkgVFNDMjEwMmkgdG91Y2hzY3JlZW4gY29udHJvbGxlciAvIGFuYWxvZy1kaWdpdGFsIGNvbnZlcnRlciAvIEF1ZGlvCkNPREVDLCBjb25uZWN0ZWQgdGhyb3VnaCBNaWNyb1dpcmUgYW5kIElAbWF0aHteMn1TIGJ1c3NlcwpAaXRlbQpHUElPLWNvbm5lY3RlZCBtYXRyaXgga2V5cGFkCkBpdGVtClNlY3VyZSBEaWdpdGFsIGNhcmQgY29ubmVjdGVkIHRvIE9NQVAgTU1DL1NEIGhvc3QKQGl0ZW0KVGhyZWUgb24tY2hpcCBVQVJUcwpAZW5kIGl0ZW1pemUKCk5va2lhIE44MDAgYW5kIE44MTAgaW50ZXJuZXQgdGFibGV0cyAoa25vd24gYWxzbyBhcyBSWC0zNCBhbmQgUlgtNDQgLyA0OCkKZW11bGF0aW9uIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgZWxlbWVudHM6CgpAaXRlbWl6ZSBAbWludXMKQGl0ZW0KVGV4YXMgSW5zdHJ1bWVudHMgT01BUDI0MjAgU3lzdGVtLW9uLWNoaXAgKEFSTSAxMTM2IGNvcmUpCkBpdGVtClJBTSBhbmQgbm9uLXZvbGF0aWxlIE9uZU5BTkQgRmxhc2ggbWVtb3JpZXMKQGl0ZW0KRGlzcGxheSBjb25uZWN0ZWQgdG8gRVBTT04gcmVtb3RlIGZyYW1lYnVmZmVyIGNoaXAgYW5kIE9NQVAgb24tY2hpcApkaXNwbGF5IGNvbnRyb2xsZXIgYW5kIGEgTFMwNDF5MyBNSVBJIERCSS1DIGNvbnRyb2xsZXIKQGl0ZW0KVEkgVFNDMjMwMSAoaW4gTjgwMCkgYW5kIFRJIFRTQzIwMDUgKGluIE44MTApIHRvdWNoc2NyZWVuIGNvbnRyb2xsZXJzCmRyaXZlbiB0aHJvdWdoIFNQSSBidXMKQGl0ZW0KTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBMTTgzMjMtY29udHJvbGxlZCBxd2VydHkga2V5Ym9hcmQgZHJpdmVuCnRocm91Z2ggSUBtYXRoe14yfUMgYnVzCkBpdGVtClNlY3VyZSBEaWdpdGFsIGNhcmQgY29ubmVjdGVkIHRvIE9NQVAgTU1DL1NEIGhvc3QKQGl0ZW0KVGhyZWUgT01BUCBvbi1jaGlwIFVBUlRzIGFuZCBvbi1jaGlwIFNUSSBkZWJ1Z2dpbmcgY29uc29sZQpAaXRlbQpBIEJsdWV0b290aChSKSB0cmFuc2NpZXZlciBhbmQgSENJIGNvbm5lY3RlZCB0byBhbiBVQVJUCkBpdGVtCk1lbnRvciBHcmFwaGljcyAiSW52ZW50cmEiIGR1YWwtcm9sZSBVU0IgY29udHJvbGxlciBlbWJlZGRlZCBpbiBhIFRJClRVU0I2MDEwIGNoaXAgLSBvbmx5IFVTQiBob3N0IG1vZGUgaXMgc3VwcG9ydGVkCkBpdGVtClRJIFRNUDEwNSB0ZW1wZXJhdHVyZSBzZW5zb3IgZHJpdmVuIHRocm91Z2ggSUBtYXRoe14yfUMgYnVzCkBpdGVtClRJIFRXTDkyMjMwQyBwb3dlciBtYW5hZ2VtZW50IGNvbXBhbmlvbiB3aXRoIGFuIFJUQyBvbiBJQG1hdGh7XjJ9QyBidXMKQGl0ZW0KTm9raWEgUkVUVSBhbmQgVEFIVk8gbXVsdGktcHVycG9zZSBjaGlwcyB3aXRoIGFuIFJUQywgY29ubmVjdGVkCnRocm91Z2ggQ0JVUwpAZW5kIGl0ZW1pemUKClRoZSBMdW1pbmFyeSBNaWNybyBTdGVsbGFyaXMgTE0zUzgxMUVWQiBlbXVsYXRpb24gaW5jbHVkZXMgdGhlIGZvbGxvd2luZwpkZXZpY2VzOgoKQGl0ZW1pemUgQG1pbnVzCkBpdGVtCkNvcnRleC1NMyBDUFUgY29yZS4KQGl0ZW0KNjRrIEZsYXNoIGFuZCA4ayBTUkFNLgpAaXRlbQpUaW1lcnMsIFVBUlRzLCBBREMgYW5kIElAbWF0aHteMn1DIGludGVyZmFjZS4KQGl0ZW0KT1NSQU0gUGljdGl2YSA5NngxNiBPTEVEIHdpdGggU1NEMDMwMyBjb250cm9sbGVyIG9uIElAbWF0aHteMn1DIGJ1cy4KQGVuZCBpdGVtaXplCgpUaGUgTHVtaW5hcnkgTWljcm8gU3RlbGxhcmlzIExNM1M2OTY1RVZCIGVtdWxhdGlvbiBpbmNsdWRlcyB0aGUgZm9sbG93aW5nCmRldmljZXM6CgpAaXRlbWl6ZSBAbWludXMKQGl0ZW0KQ29ydGV4LU0zIENQVSBjb3JlLgpAaXRlbQoyNTZrIEZsYXNoIGFuZCA2NGsgU1JBTS4KQGl0ZW0KVGltZXJzLCBVQVJUcywgQURDLCBJQG1hdGh7XjJ9QyBhbmQgU1NJIGludGVyZmFjZXMuCkBpdGVtCk9TUkFNIFBpY3RpdmEgMTI4eDY0IE9MRUQgd2l0aCBTU0QwMzIzIGNvbnRyb2xsZXIgY29ubmVjdGVkIHZpYSBTU0kuCkBlbmQgaXRlbWl6ZQoKVGhlIEZyZWVjb20gTXVzaWNQYWwgaW50ZXJuZXQgcmFkaW8gZW11bGF0aW9uIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcKZWxlbWVudHM6CgpAaXRlbWl6ZSBAbWludXMKQGl0ZW0KTWFydmVsbCBNVjg4Vzg2MTggQVJNIGNvcmUuCkBpdGVtCjMyIE1CIFJBTSwgMjU2IEtCIFNSQU0sIDggTUIgZmxhc2guCkBpdGVtClVwIHRvIDIgMTY1NTAgVUFSVHMKQGl0ZW0KTVY4OFc4eHg4IEV0aGVybmV0IGNvbnRyb2xsZXIKQGl0ZW0KTVY4OFc4NjE4IGF1ZGlvIGNvbnRyb2xsZXIsIFdNODc1MCBDT0RFQyBhbmQgbWl4ZXIKQGl0ZW0KMTI41zY0IGRpc3BsYXkgd2l0aCBicmlnaHRuZXNzIGNvbnRyb2wKQGl0ZW0KMiBidXR0b25zLCAyIG5hdmlnYXRpb24gd2hlZWxzIHdpdGggYnV0dG9uIGZ1bmN0aW9uCkBlbmQgaXRlbWl6ZQoKVGhlIFNpZW1lbnMgU1gxIG1vZGVscyB2MSBhbmQgdjIgKGRlZmF1bHQpIGJhc2ljIGVtdWxhdGlvbi4KVGhlIGVtdWxhdG9uIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgZWxlbWVudHM6CgpAaXRlbWl6ZSBAbWludXMKQGl0ZW0KVGV4YXMgSW5zdHJ1bWVudHMgT01BUDMxMCBTeXN0ZW0tb24tY2hpcCAoQVJNIDkyNVQgY29yZSkKQGl0ZW0KUk9NIGFuZCBSQU0gbWVtb3JpZXMgKFJPTSBmaXJtd2FyZSBpbWFnZSBjYW4gYmUgbG9hZGVkIHdpdGggLXBmbGFzaCkKVjEKMSBGbGFzaCBvZiAxNk1CIGFuZCAxIEZsYXNoIG9mIDhNQgpWMgoxIEZsYXNoIG9mIDMyTUIKQGl0ZW0KT24tY2hpcCBMQ0QgY29udHJvbGxlcgpAaXRlbQpPbi1jaGlwIFJlYWwgVGltZSBDbG9jawpAaXRlbQpTZWN1cmUgRGlnaXRhbCBjYXJkIGNvbm5lY3RlZCB0byBPTUFQIE1NQy9TRCBob3N0CkBpdGVtClRocmVlIG9uLWNoaXAgVUFSVHMKQGVuZCBpdGVtaXplCgpUaGUgIlN5Ym9yZyIgU3ltYmlhbiBWaXJ0dWFsIFBsYXRmb3JtIGJhc2UgbW9kZWwgaW5jbHVkZXMgdGhlIGZvbGxvd2luZwplbGVtZW50czoKCkBpdGVtaXplIEBtaW51cwpAaXRlbQpBUk0gQ29ydGV4LUE4IENQVQpAaXRlbQpJbnRlcnJ1cHQgY29udHJvbGxlcgpAaXRlbQpUaW1lcgpAaXRlbQpSZWFsIFRpbWUgQ2xvY2sKQGl0ZW0KS2V5Ym9hcmQKQGl0ZW0KRnJhbWVidWZmZXIKQGl0ZW0KVG91Y2hzY3JlZW4KQGl0ZW0KVUFSVHMKQGVuZCBpdGVtaXplCgpBIExpbnV4IDIuNiB0ZXN0IGltYWdlIGlzIGF2YWlsYWJsZSBvbiB0aGUgUUVNVSB3ZWIgc2l0ZS4gTW9yZQppbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgaW4gdGhlIFFFTVUgbWFpbGluZy1saXN0IGFyY2hpdmUuCgpAYyBtYW4gYmVnaW4gT1BUSU9OUwoKVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBzcGVjaWZpYyB0byB0aGUgQVJNIGVtdWxhdGlvbjoKCkB0YWJsZSBAb3B0aW9uCgpAaXRlbSAtc2VtaWhvc3RpbmcKRW5hYmxlIHNlbWlob3N0aW5nIHN5c2NhbGwgZW11bGF0aW9uLgoKT24gQVJNIHRoaXMgaW1wbGVtZW50cyB0aGUgIkFuZ2VsIiBpbnRlcmZhY2UuCgpOb3RlIHRoYXQgdGhpcyBhbGxvd3MgZ3Vlc3QgZGlyZWN0IGFjY2VzcyB0byB0aGUgaG9zdCBmaWxlc3lzdGVtLApzbyBzaG91bGQgb25seSBiZSB1c2VkIHdpdGggdHJ1c3RlZCBndWVzdCBPUy4KCkBlbmQgdGFibGUKCkBub2RlIENvbGRGaXJlIFN5c3RlbSBlbXVsYXRvcgpAc2VjdGlvbiBDb2xkRmlyZSBTeXN0ZW0gZW11bGF0b3IKClVzZSB0aGUgZXhlY3V0YWJsZSBAZmlsZXtxZW11LXN5c3RlbS1tNjhrfSB0byBzaW11bGF0ZSBhIENvbGRGaXJlIG1hY2hpbmUuClRoZSBlbXVsYXRvciBpcyBhYmxlIHRvIGJvb3QgYSB1Q2xpbnV4IGtlcm5lbC4KClRoZSBNNTIwOEVWQiBlbXVsYXRpb24gaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBkZXZpY2VzOgoKQGl0ZW1pemUgQG1pbnVzCkBpdGVtCk1DRjUyMDggQ29sZEZpcmUgVjIgTWljcm9wcm9jZXNzb3IgKElTQSBBKyB3aXRoIEVNQUMpLgpAaXRlbQpUaHJlZSBUd28gb24tY2hpcCBVQVJUcy4KQGl0ZW0KRmFzdCBFdGhlcm5ldCBDb250cm9sbGVyIChGRUMpCkBlbmQgaXRlbWl6ZQoKVGhlIEFONTIwNiBlbXVsYXRpb24gaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBkZXZpY2VzOgoKQGl0ZW1pemUgQG1pbnVzCkBpdGVtCk1DRjUyMDYgQ29sZEZpcmUgVjIgTWljcm9wcm9jZXNzb3IuCkBpdGVtClR3byBvbi1jaGlwIFVBUlRzLgpAZW5kIGl0ZW1pemUKCkBjIG1hbiBiZWdpbiBPUFRJT05TCgpUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIHNwZWNpZmljIHRvIHRoZSBBUk0gZW11bGF0aW9uOgoKQHRhYmxlIEBvcHRpb24KCkBpdGVtIC1zZW1paG9zdGluZwpFbmFibGUgc2VtaWhvc3Rpbmcgc3lzY2FsbCBlbXVsYXRpb24uCgpPbiBNNjhLIHRoaXMgaW1wbGVtZW50cyB0aGUgIkNvbGRGaXJlIEdEQiIgaW50ZXJmYWNlIHVzZWQgYnkgbGliZ2xvc3MuCgpOb3RlIHRoYXQgdGhpcyBhbGxvd3MgZ3Vlc3QgZGlyZWN0IGFjY2VzcyB0byB0aGUgaG9zdCBmaWxlc3lzdGVtLApzbyBzaG91bGQgb25seSBiZSB1c2VkIHdpdGggdHJ1c3RlZCBndWVzdCBPUy4KCkBlbmQgdGFibGUKCkBub2RlIFFFTVUgVXNlciBzcGFjZSBlbXVsYXRvcgpAY2hhcHRlciBRRU1VIFVzZXIgc3BhY2UgZW11bGF0b3IKCkBtZW51CiogU3VwcG9ydGVkIE9wZXJhdGluZyBTeXN0ZW1zIDo6CiogTGludXggVXNlciBzcGFjZSBlbXVsYXRvcjo6CiogTWFjIE9TIFgvRGFyd2luIFVzZXIgc3BhY2UgZW11bGF0b3IgOjoKKiBCU0QgVXNlciBzcGFjZSBlbXVsYXRvciA6OgpAZW5kIG1lbnUKCkBub2RlIFN1cHBvcnRlZCBPcGVyYXRpbmcgU3lzdGVtcwpAc2VjdGlvbiBTdXBwb3J0ZWQgT3BlcmF0aW5nIFN5c3RlbXMKClRoZSBmb2xsb3dpbmcgT1MgYXJlIHN1cHBvcnRlZCBpbiB1c2VyIHNwYWNlIGVtdWxhdGlvbjoKCkBpdGVtaXplIEBtaW51cwpAaXRlbQpMaW51eCAocmVmZXJyZWQgYXMgcWVtdS1saW51eC11c2VyKQpAaXRlbQpNYWMgT1MgWC9EYXJ3aW4gKHJlZmVycmVkIGFzIHFlbXUtZGFyd2luLXVzZXIpCkBpdGVtCkJTRCAocmVmZXJyZWQgYXMgcWVtdS1ic2QtdXNlcikKQGVuZCBpdGVtaXplCgpAbm9kZSBMaW51eCBVc2VyIHNwYWNlIGVtdWxhdG9yCkBzZWN0aW9uIExpbnV4IFVzZXIgc3BhY2UgZW11bGF0b3IKCkBtZW51CiogUXVpY2sgU3RhcnQ6OgoqIFdpbmUgbGF1bmNoOjoKKiBDb21tYW5kIGxpbmUgb3B0aW9uczo6CiogT3RoZXIgYmluYXJpZXM6OgpAZW5kIG1lbnUKCkBub2RlIFF1aWNrIFN0YXJ0CkBzdWJzZWN0aW9uIFF1aWNrIFN0YXJ0CgpJbiBvcmRlciB0byBsYXVuY2ggYSBMaW51eCBwcm9jZXNzLCBRRU1VIG5lZWRzIHRoZSBwcm9jZXNzIGV4ZWN1dGFibGUKaXRzZWxmIGFuZCBhbGwgdGhlIHRhcmdldCAoeDg2KSBkeW5hbWljIGxpYnJhcmllcyB1c2VkIGJ5IGl0LgoKQGl0ZW1pemUKCkBpdGVtIE9uIHg4NiwgeW91IGNhbiBqdXN0IHRyeSB0byBsYXVuY2ggYW55IHByb2Nlc3MgYnkgdXNpbmcgdGhlIG5hdGl2ZQpsaWJyYXJpZXM6CgpAZXhhbXBsZQpxZW11LWkzODYgLUwgLyAvYmluL2xzCkBlbmQgZXhhbXBsZQoKQGNvZGV7LUwgL30gdGVsbHMgdGhhdCB0aGUgeDg2IGR5bmFtaWMgbGlua2VyIG11c3QgYmUgc2VhcmNoZWQgd2l0aCBhCkBmaWxley99IHByZWZpeC4KCkBpdGVtIFNpbmNlIFFFTVUgaXMgYWxzbyBhIGxpbnV4IHByb2Nlc3MsIHlvdSBjYW4gbGF1bmNoIHFlbXUgd2l0aApxZW11IChOT1RFOiB5b3UgY2FuIG9ubHkgZG8gdGhhdCBpZiB5b3UgY29tcGlsZWQgUUVNVSBmcm9tIHRoZSBzb3VyY2VzKToKCkBleGFtcGxlCnFlbXUtaTM4NiAtTCAvIHFlbXUtaTM4NiAtTCAvIC9iaW4vbHMKQGVuZCBleGFtcGxlCgpAaXRlbSBPbiBub24geDg2IENQVXMsIHlvdSBuZWVkIGZpcnN0IHRvIGRvd25sb2FkIGF0IGxlYXN0IGFuIHg4NiBnbGliYwooQGZpbGV7cWVtdS1ydW50aW1lLWkzODYtWFhYLS50YXIuZ3p9IG9uIHRoZSBRRU1VIHdlYiBwYWdlKS4gRW5zdXJlIHRoYXQKQGNvZGV7TERfTElCUkFSWV9QQVRIfSBpcyBub3Qgc2V0OgoKQGV4YW1wbGUKdW5zZXQgTERfTElCUkFSWV9QQVRICkBlbmQgZXhhbXBsZQoKVGhlbiB5b3UgY2FuIGxhdW5jaCB0aGUgcHJlY29tcGlsZWQgQGZpbGV7bHN9IHg4NiBleGVjdXRhYmxlOgoKQGV4YW1wbGUKcWVtdS1pMzg2IHRlc3RzL2kzODYvbHMKQGVuZCBleGFtcGxlCllvdSBjYW4gbG9vayBhdCBAZmlsZXtxZW11LWJpbmZtdC1jb25mLnNofSBzbyB0aGF0ClFFTVUgaXMgYXV0b21hdGljYWxseSBsYXVuY2hlZCBieSB0aGUgTGludXgga2VybmVsIHdoZW4geW91IHRyeSB0bwpsYXVuY2ggeDg2IGV4ZWN1dGFibGVzLiBJdCByZXF1aXJlcyB0aGUgQGNvZGV7YmluZm10X21pc2N9IG1vZHVsZSBpbiB0aGUKTGludXgga2VybmVsLgoKQGl0ZW0gVGhlIHg4NiB2ZXJzaW9uIG9mIFFFTVUgaXMgYWxzbyBpbmNsdWRlZC4gWW91IGNhbiB0cnkgd2VpcmQgdGhpbmdzIHN1Y2ggYXM6CkBleGFtcGxlCnFlbXUtaTM4NiAvdXNyL2xvY2FsL3FlbXUtaTM4Ni9iaW4vcWVtdS1pMzg2IFwKICAgICAgICAgIC91c3IvbG9jYWwvcWVtdS1pMzg2L2Jpbi9scy1pMzg2CkBlbmQgZXhhbXBsZQoKQGVuZCBpdGVtaXplCgpAbm9kZSBXaW5lIGxhdW5jaApAc3Vic2VjdGlvbiBXaW5lIGxhdW5jaAoKQGl0ZW1pemUKCkBpdGVtIEVuc3VyZSB0aGF0IHlvdSBoYXZlIGEgd29ya2luZyBRRU1VIHdpdGggdGhlIHg4NiBnbGliYwpkaXN0cmlidXRpb24gKHNlZSBwcmV2aW91cyBzZWN0aW9uKS4gSW4gb3JkZXIgdG8gdmVyaWZ5IGl0LCB5b3UgbXVzdCBiZQphYmxlIHRvIGRvOgoKQGV4YW1wbGUKcWVtdS1pMzg2IC91c3IvbG9jYWwvcWVtdS1pMzg2L2Jpbi9scy1pMzg2CkBlbmQgZXhhbXBsZQoKQGl0ZW0gRG93bmxvYWQgdGhlIGJpbmFyeSB4ODYgV2luZSBpbnN0YWxsCihAZmlsZXtxZW11LVhYWC1pMzg2LXdpbmUudGFyLmd6fSBvbiB0aGUgUUVNVSB3ZWIgcGFnZSkuCgpAaXRlbSBDb25maWd1cmUgV2luZSBvbiB5b3VyIGFjY291bnQuIExvb2sgYXQgdGhlIHByb3ZpZGVkIHNjcmlwdApAZmlsZXsvdXNyL2xvY2FsL3FlbXUtaTM4Ni9AL2Jpbi93aW5lLWNvbmYuc2h9LiBZb3VyIHByZXZpb3VzCkBjb2RleyRAe0hPTUVAfS8ud2luZX0gZGlyZWN0b3J5IGlzIHNhdmVkIHRvIEBjb2RleyRAe0hPTUVAfS8ud2luZS5vcmd9LgoKQGl0ZW0gVGhlbiB5b3UgY2FuIHRyeSB0aGUgZXhhbXBsZSBAZmlsZXtwdXR0eS5leGV9OgoKQGV4YW1wbGUKcWVtdS1pMzg2IC91c3IvbG9jYWwvcWVtdS1pMzg2L3dpbmUvYmluL3dpbmUgXAogICAgICAgICAgL3Vzci9sb2NhbC9xZW11LWkzODYvd2luZS9jL1Byb2dyYW1cIEZpbGVzL3B1dHR5LmV4ZQpAZW5kIGV4YW1wbGUKCkBlbmQgaXRlbWl6ZQoKQG5vZGUgQ29tbWFuZCBsaW5lIG9wdGlvbnMKQHN1YnNlY3Rpb24gQ29tbWFuZCBsaW5lIG9wdGlvbnMKCkBleGFtcGxlCnVzYWdlOiBxZW11LWkzODYgWy1oXSBbLWRdIFstTCBwYXRoXSBbLXMgc2l6ZV0gWy1jcHUgbW9kZWxdIFstZyBwb3J0XSBbLUIgb2Zmc2V0XSBwcm9ncmFtIFthcmd1bWVudHMuLi5dCkBlbmQgZXhhbXBsZQoKQHRhYmxlIEBvcHRpb24KQGl0ZW0gLWgKUHJpbnQgdGhlIGhlbHAKQGl0ZW0gLUwgcGF0aApTZXQgdGhlIHg4NiBlbGYgaW50ZXJwcmV0ZXIgcHJlZml4IChkZWZhdWx0PS91c3IvbG9jYWwvcWVtdS1pMzg2KQpAaXRlbSAtcyBzaXplClNldCB0aGUgeDg2IHN0YWNrIHNpemUgaW4gYnl0ZXMgKGRlZmF1bHQ9NTI0Mjg4KQpAaXRlbSAtY3B1IG1vZGVsClNlbGVjdCBDUFUgbW9kZWwgKC1jcHUgPyBmb3IgbGlzdCBhbmQgYWRkaXRpb25hbCBmZWF0dXJlIHNlbGVjdGlvbikKQGl0ZW0gLUIgb2Zmc2V0Ck9mZnNldCBndWVzdCBhZGRyZXNzIGJ5IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGJ5dGVzLiAgVGhpcyBpcyB1c2VmdWwgd2hlbgp0aGUgYWRkcmVzcyByZWdpb24gcmV3dWlyZWQgYnkgZ3Vlc3QgYXBwbGljYXRpb25zIGlzIHJlc2VydmVkIG9uIHRoZSBob3N0LgpUaHMgb3B0aW9uIGlzIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRlZCBvbiBzb21lIGhvc3RzLgpAZW5kIHRhYmxlCgpEZWJ1ZyBvcHRpb25zOgoKQHRhYmxlIEBvcHRpb24KQGl0ZW0gLWQKQWN0aXZhdGUgbG9nIChsb2dmaWxlPS90bXAvcWVtdS5sb2cpCkBpdGVtIC1wIHBhZ2VzaXplCkFjdCBhcyBpZiB0aGUgaG9zdCBwYWdlIHNpemUgd2FzICdwYWdlc2l6ZScgYnl0ZXMKQGl0ZW0gLWcgcG9ydApXYWl0IGdkYiBjb25uZWN0aW9uIHRvIHBvcnQKQGl0ZW0gLXNpbmdsZXN0ZXAKUnVuIHRoZSBlbXVsYXRpb24gaW4gc2luZ2xlIHN0ZXAgbW9kZS4KQGVuZCB0YWJsZQoKRW52aXJvbm1lbnQgdmFyaWFibGVzOgoKQHRhYmxlIEBlbnYKQGl0ZW0gUUVNVV9TVFJBQ0UKUHJpbnQgc3lzdGVtIGNhbGxzIGFuZCBhcmd1bWVudHMgc2ltaWxhciB0byB0aGUgJ3N0cmFjZScgcHJvZ3JhbQooTk9URTogdGhlIGFjdHVhbCAnc3RyYWNlJyBwcm9ncmFtIHdpbGwgbm90IHdvcmsgYmVjYXVzZSB0aGUgdXNlcgpzcGFjZSBlbXVsYXRvciBoYXNuJ3QgaW1wbGVtZW50ZWQgcHRyYWNlKS4gIEF0IHRoZSBtb21lbnQgdGhpcyBpcwppbmNvbXBsZXRlLiAgQWxsIHN5c3RlbSBjYWxscyB0aGF0IGRvbid0IGhhdmUgYSBzcGVjaWZpYyBhcmd1bWVudApmb3JtYXQgYXJlIHByaW50ZWQgd2l0aCBpbmZvcm1hdGlvbiBmb3Igc2l4IGFyZ3VtZW50cy4gIE1hbnkKZmxhZy1zdHlsZSBhcmd1bWVudHMgZG9uJ3QgaGF2ZSBkZWNvZGVycyBhbmQgd2lsbCBzaG93IHVwIGFzIG51bWJlcnMuCkBlbmQgdGFibGUKCkBub2RlIE90aGVyIGJpbmFyaWVzCkBzdWJzZWN0aW9uIE90aGVyIGJpbmFyaWVzCgpAY29tbWFuZHtxZW11LWFybX0gaXMgYWxzbyBjYXBhYmxlIG9mIHJ1bm5pbmcgQVJNICJBbmdlbCIgc2VtaWhvc3RlZCBFTEYKYmluYXJpZXMgKGFzIGltcGxlbWVudGVkIGJ5IHRoZSBhcm0tZWxmIGFuZCBhcm0tZWFiaSBOZXdsaWIvR0RCCmNvbmZpZ3VyYXRpb25zKSwgYW5kIGFybS11Y2xpbnV4IGJGTFQgZm9ybWF0IGJpbmFyaWVzLgoKQGNvbW1hbmR7cWVtdS1tNjhrfSBpcyBjYXBhYmxlIG9mIHJ1bm5pbmcgc2VtaWhvc3RlZCBiaW5hcmllcyB1c2luZyB0aGUgQkRNCihtNXh4eC1yYW0taG9zdGVkLmxkKSBvciBtNjhrLXNpbSAoc2ltLmxkKSBzeXNjYWxsIGludGVyZmFjZXMsIGFuZApjb2xkZmlyZSB1Q2xpbnV4IGJGTFQgZm9ybWF0IGJpbmFyaWVzLgoKVGhlIGJpbmFyeSBmb3JtYXQgaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseS4KCkBjb21tYW5ke3FlbXUtc3BhcmN9IGNhbiBleGVjdXRlIFNwYXJjMzIgYmluYXJpZXMgKFNwYXJjMzIgQ1BVLCAzMiBiaXQgQUJJKS4KCkBjb21tYW5ke3FlbXUtc3BhcmMzMnBsdXN9IGNhbiBleGVjdXRlIFNwYXJjMzIgYW5kIFNQQVJDMzJQTFVTIGJpbmFyaWVzCihTcGFyYzY0IENQVSwgMzIgYml0IEFCSSkuCgpAY29tbWFuZHtxZW11LXNwYXJjNjR9IGNhbiBleGVjdXRlIHNvbWUgU3BhcmM2NCAoU3BhcmM2NCBDUFUsIDY0IGJpdCBBQkkpIGFuZApTUEFSQzMyUExVUyBiaW5hcmllcyAoU3BhcmM2NCBDUFUsIDMyIGJpdCBBQkkpLgoKQG5vZGUgTWFjIE9TIFgvRGFyd2luIFVzZXIgc3BhY2UgZW11bGF0b3IKQHNlY3Rpb24gTWFjIE9TIFgvRGFyd2luIFVzZXIgc3BhY2UgZW11bGF0b3IKCkBtZW51CiogTWFjIE9TIFgvRGFyd2luIFN0YXR1czo6CiogTWFjIE9TIFgvRGFyd2luIFF1aWNrIFN0YXJ0OjoKKiBNYWMgT1MgWC9EYXJ3aW4gQ29tbWFuZCBsaW5lIG9wdGlvbnM6OgpAZW5kIG1lbnUKCkBub2RlIE1hYyBPUyBYL0RhcndpbiBTdGF0dXMKQHN1YnNlY3Rpb24gTWFjIE9TIFgvRGFyd2luIFN0YXR1cwoKQGl0ZW1pemUgQG1pbnVzCkBpdGVtCnRhcmdldCB4ODYgb24geDg2OiBNb3N0IGFwcHMgKENvY29hIGFuZCBDYXJib24gdG9vKSB3b3Jrcy4gWzFdCkBpdGVtCnRhcmdldCBQb3dlclBDIG9uIHg4NjogTm90IHdvcmtpbmcgYXMgdGhlIHBwYyBjb21tcGFnZSBjYW4ndCBiZSBtYXBwZWQgKHlldCEpCkBpdGVtCnRhcmdldCBQb3dlclBDIG9uIFBvd2VyUEM6IE1vc3QgYXBwcyAoQ29jb2EgYW5kIENhcmJvbiB0b28pIHdvcmtzLiBbMV0KQGl0ZW0KdGFyZ2V0IHg4NiBvbiBQb3dlclBDOiBtb3N0IHV0aWxpdGllcyB3b3JrLiBDb2NvYSBhbmQgQ2FyYm9uIGFwcHMgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkLgpAZW5kIGl0ZW1pemUKClsxXSBJZiB5b3UncmUgaG9zdCBjb21tcGFnZSBjYW4gYmUgZXhlY3V0ZWQgYnkgcWVtdS4KCkBub2RlIE1hYyBPUyBYL0RhcndpbiBRdWljayBTdGFydApAc3Vic2VjdGlvbiBRdWljayBTdGFydAoKSW4gb3JkZXIgdG8gbGF1bmNoIGEgTWFjIE9TIFgvRGFyd2luIHByb2Nlc3MsIFFFTVUgbmVlZHMgdGhlIHByb2Nlc3MgZXhlY3V0YWJsZQppdHNlbGYgYW5kIGFsbCB0aGUgdGFyZ2V0IGR5bmFtaWMgbGlicmFyaWVzIHVzZWQgYnkgaXQuIElmIHlvdSBkb24ndCBoYXZlIHRoZSBGQVQKbGlicmFyaWVzICh5b3UncmUgcnVubmluZyBNYWMgT1MgWC9wcGMpIHlvdSdsbCBuZWVkIHRvIG9idGFpbiBpdCBmcm9tIGEgTWFjIE9TIFgKQ0Qgb3IgY29tcGlsZSB0aGVtIGJ5IGhhbmQuCgpAaXRlbWl6ZQoKQGl0ZW0gT24geDg2LCB5b3UgY2FuIGp1c3QgdHJ5IHRvIGxhdW5jaCBhbnkgcHJvY2VzcyBieSB1c2luZyB0aGUgbmF0aXZlCmxpYnJhcmllczoKCkBleGFtcGxlCnFlbXUtaTM4NiAvYmluL2xzCkBlbmQgZXhhbXBsZQoKb3IgdG8gcnVuIHRoZSBwcGMgdmVyc2lvbiBvZiB0aGUgZXhlY3V0YWJsZToKCkBleGFtcGxlCnFlbXUtcHBjIC9iaW4vbHMKQGVuZCBleGFtcGxlCgpAaXRlbSBPbiBwcGMsIHlvdSdsbCBoYXZlIHRvIHRlbGwgcWVtdSB3aGVyZSB5b3VyIHg4NiBsaWJyYXJpZXMgKGFuZCBkeW5hbWljIGxpbmtlcikKYXJlIGluc3RhbGxlZDoKCkBleGFtcGxlCnFlbXUtaTM4NiAtTCAvb3B0L3g4Nl9yb290LyAvYmluL2xzCkBlbmQgZXhhbXBsZQoKQGNvZGV7LUwgL29wdC94ODZfcm9vdC99IHRlbGxzIHRoYXQgdGhlIGR5bmFtaWMgbGlua2VyIChkeWxkKSBwYXRoIGlzIGluCkBmaWxley9vcHQveDg2X3Jvb3QvdXNyL2Jpbi9keWxkfS4KCkBlbmQgaXRlbWl6ZQoKQG5vZGUgTWFjIE9TIFgvRGFyd2luIENvbW1hbmQgbGluZSBvcHRpb25zCkBzdWJzZWN0aW9uIENvbW1hbmQgbGluZSBvcHRpb25zCgpAZXhhbXBsZQp1c2FnZTogcWVtdS1pMzg2IFstaF0gWy1kXSBbLUwgcGF0aF0gWy1zIHNpemVdIHByb2dyYW0gW2FyZ3VtZW50cy4uLl0KQGVuZCBleGFtcGxlCgpAdGFibGUgQG9wdGlvbgpAaXRlbSAtaApQcmludCB0aGUgaGVscApAaXRlbSAtTCBwYXRoClNldCB0aGUgbGlicmFyeSByb290IHBhdGggKGRlZmF1bHQ9LykKQGl0ZW0gLXMgc2l6ZQpTZXQgdGhlIHN0YWNrIHNpemUgaW4gYnl0ZXMgKGRlZmF1bHQ9NTI0Mjg4KQpAZW5kIHRhYmxlCgpEZWJ1ZyBvcHRpb25zOgoKQHRhYmxlIEBvcHRpb24KQGl0ZW0gLWQKQWN0aXZhdGUgbG9nIChsb2dmaWxlPS90bXAvcWVtdS5sb2cpCkBpdGVtIC1wIHBhZ2VzaXplCkFjdCBhcyBpZiB0aGUgaG9zdCBwYWdlIHNpemUgd2FzICdwYWdlc2l6ZScgYnl0ZXMKQGl0ZW0gLXNpbmdsZXN0ZXAKUnVuIHRoZSBlbXVsYXRpb24gaW4gc2luZ2xlIHN0ZXAgbW9kZS4KQGVuZCB0YWJsZQoKQG5vZGUgQlNEIFVzZXIgc3BhY2UgZW11bGF0b3IKQHNlY3Rpb24gQlNEIFVzZXIgc3BhY2UgZW11bGF0b3IKCkBtZW51CiogQlNEIFN0YXR1czo6CiogQlNEIFF1aWNrIFN0YXJ0OjoKKiBCU0QgQ29tbWFuZCBsaW5lIG9wdGlvbnM6OgpAZW5kIG1lbnUKCkBub2RlIEJTRCBTdGF0dXMKQHN1YnNlY3Rpb24gQlNEIFN0YXR1cwoKQGl0ZW1pemUgQG1pbnVzCkBpdGVtCnRhcmdldCBTcGFyYzY0IG9uIFNwYXJjNjQ6IFNvbWUgdHJpdmlhbCBwcm9ncmFtcyB3b3JrLgpAZW5kIGl0ZW1pemUKCkBub2RlIEJTRCBRdWljayBTdGFydApAc3Vic2VjdGlvbiBRdWljayBTdGFydAoKSW4gb3JkZXIgdG8gbGF1bmNoIGEgQlNEIHByb2Nlc3MsIFFFTVUgbmVlZHMgdGhlIHByb2Nlc3MgZXhlY3V0YWJsZQppdHNlbGYgYW5kIGFsbCB0aGUgdGFyZ2V0IGR5bmFtaWMgbGlicmFyaWVzIHVzZWQgYnkgaXQuCgpAaXRlbWl6ZQoKQGl0ZW0gT24gU3BhcmM2NCwgeW91IGNhbiBqdXN0IHRyeSB0byBsYXVuY2ggYW55IHByb2Nlc3MgYnkgdXNpbmcgdGhlIG5hdGl2ZQpsaWJyYXJpZXM6CgpAZXhhbXBsZQpxZW11LXNwYXJjNjQgL2Jpbi9scwpAZW5kIGV4YW1wbGUKCkBlbmQgaXRlbWl6ZQoKQG5vZGUgQlNEIENvbW1hbmQgbGluZSBvcHRpb25zCkBzdWJzZWN0aW9uIENvbW1hbmQgbGluZSBvcHRpb25zCgpAZXhhbXBsZQp1c2FnZTogcWVtdS1zcGFyYzY0IFstaF0gWy1kXSBbLUwgcGF0aF0gWy1zIHNpemVdIFstYnNkIHR5cGVdIHByb2dyYW0gW2FyZ3VtZW50cy4uLl0KQGVuZCBleGFtcGxlCgpAdGFibGUgQG9wdGlvbgpAaXRlbSAtaApQcmludCB0aGUgaGVscApAaXRlbSAtTCBwYXRoClNldCB0aGUgbGlicmFyeSByb290IHBhdGggKGRlZmF1bHQ9LykKQGl0ZW0gLXMgc2l6ZQpTZXQgdGhlIHN0YWNrIHNpemUgaW4gYnl0ZXMgKGRlZmF1bHQ9NTI0Mjg4KQpAaXRlbSAtYnNkIHR5cGUKU2V0IHRoZSB0eXBlIG9mIHRoZSBlbXVsYXRlZCBCU0QgT3BlcmF0aW5nIHN5c3RlbS4gVmFsaWQgdmFsdWVzIGFyZQpGcmVlQlNELCBOZXRCU0QgYW5kIE9wZW5CU0QgKGRlZmF1bHQpLgpAZW5kIHRhYmxlCgpEZWJ1ZyBvcHRpb25zOgoKQHRhYmxlIEBvcHRpb24KQGl0ZW0gLWQKQWN0aXZhdGUgbG9nIChsb2dmaWxlPS90bXAvcWVtdS5sb2cpCkBpdGVtIC1wIHBhZ2VzaXplCkFjdCBhcyBpZiB0aGUgaG9zdCBwYWdlIHNpemUgd2FzICdwYWdlc2l6ZScgYnl0ZXMKQGl0ZW0gLXNpbmdsZXN0ZXAKUnVuIHRoZSBlbXVsYXRpb24gaW4gc2luZ2xlIHN0ZXAgbW9kZS4KQGVuZCB0YWJsZQoKQG5vZGUgY29tcGlsYXRpb24KQGNoYXB0ZXIgQ29tcGlsYXRpb24gZnJvbSB0aGUgc291cmNlcwoKQG1lbnUKKiBMaW51eC9Vbml4OjoKKiBXaW5kb3dzOjoKKiBDcm9zcyBjb21waWxhdGlvbiBmb3IgV2luZG93cyB3aXRoIExpbnV4OjoKKiBNYWMgT1MgWDo6CkBlbmQgbWVudQoKQG5vZGUgTGludXgvVW5peApAc2VjdGlvbiBMaW51eC9Vbml4CgpAc3Vic2VjdGlvbiBDb21waWxhdGlvbgoKRmlyc3QgeW91IG11c3QgZGVjb21wcmVzcyB0aGUgc291cmNlczoKQGV4YW1wbGUKY2QgL3RtcAp0YXIgenh2ZiBxZW11LXgueS56LnRhci5negpjZCBxZW11LXgueS56CkBlbmQgZXhhbXBsZQoKVGhlbiB5b3UgY29uZmlndXJlIFFFTVUgYW5kIGJ1aWxkIGl0ICh1c3VhbGx5IG5vIG9wdGlvbnMgYXJlIG5lZWRlZCk6CkBleGFtcGxlCi4vY29uZmlndXJlCm1ha2UKQGVuZCBleGFtcGxlCgpUaGVuIHR5cGUgYXMgcm9vdCB1c2VyOgpAZXhhbXBsZQptYWtlIGluc3RhbGwKQGVuZCBleGFtcGxlCnRvIGluc3RhbGwgUUVNVSBpbiBAZmlsZXsvdXNyL2xvY2FsfS4KCkBub2RlIFdpbmRvd3MKQHNlY3Rpb24gV2luZG93cwoKQGl0ZW1pemUKQGl0ZW0gSW5zdGFsbCB0aGUgY3VycmVudCB2ZXJzaW9ucyBvZiBNU1lTIGFuZCBNaW5HVyBmcm9tCkB1cmx7aHR0cDovL3d3dy5taW5ndy5vcmcvfS4gWW91IGNhbiBmaW5kIGRldGFpbGVkIGluc3RhbGxhdGlvbgppbnN0cnVjdGlvbnMgaW4gdGhlIGRvd25sb2FkIHNlY3Rpb24gYW5kIHRoZSBGQVEuCgpAaXRlbSBEb3dubG9hZAp0aGUgTWluR1cgZGV2ZWxvcG1lbnQgbGlicmFyeSBvZiBTREwgMS4yLngKKEBmaWxle1NETC1kZXZlbC0xLjIueC1AL21pbmd3MzIudGFyLmd6fSkgZnJvbQpAdXJse2h0dHA6Ly93d3cubGlic2RsLm9yZ30uIFVucGFjayBpdCBpbiBhIHRlbXBvcmFyeSBwbGFjZSwgYW5kCnVucGFjayB0aGUgYXJjaGl2ZSBAZmlsZXtpMzg2LW1pbmd3MzJtc3ZjLnRhci5nen0gaW4gdGhlIE1pbkdXIHRvb2wKZGlyZWN0b3J5LiBFZGl0IHRoZSBAZmlsZXtzZGwtY29uZmlnfSBzY3JpcHQgc28gdGhhdCBpdCBnaXZlcyB0aGUKY29ycmVjdCBTREwgZGlyZWN0b3J5IHdoZW4gaW52b2tlZC4KCkBpdGVtIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBRRU1VLgoKQGl0ZW0gU3RhcnQgdGhlIE1TWVMgc2hlbGwgKGZpbGUgQGZpbGV7bXN5cy5iYXR9KS4KCkBpdGVtIENoYW5nZSB0byB0aGUgUUVNVSBkaXJlY3RvcnkuIExhdW5jaCBAZmlsZXsuL2NvbmZpZ3VyZX0gYW5kCkBmaWxle21ha2V9LiAgSWYgeW91IGhhdmUgcHJvYmxlbXMgdXNpbmcgU0RMLCB2ZXJpZnkgdGhhdApAZmlsZXtzZGwtY29uZmlnfSBjYW4gYmUgbGF1bmNoZWQgZnJvbSB0aGUgTVNZUyBjb21tYW5kIGxpbmUuCgpAaXRlbSBZb3UgY2FuIGluc3RhbGwgUUVNVSBpbiBAZmlsZXtQcm9ncmFtIEZpbGVzL1FlbXV9IGJ5IHR5cGluZwpAZmlsZXttYWtlIGluc3RhbGx9LiBEb24ndCBmb3JnZXQgdG8gY29weSBAZmlsZXtTREwuZGxsfSBpbgpAZmlsZXtQcm9ncmFtIEZpbGVzL1FlbXV9LgoKQGVuZCBpdGVtaXplCgpAbm9kZSBDcm9zcyBjb21waWxhdGlvbiBmb3IgV2luZG93cyB3aXRoIExpbnV4CkBzZWN0aW9uIENyb3NzIGNvbXBpbGF0aW9uIGZvciBXaW5kb3dzIHdpdGggTGludXgKCkBpdGVtaXplCkBpdGVtCkluc3RhbGwgdGhlIE1pbkdXIGNyb3NzIGNvbXBpbGF0aW9uIHRvb2xzIGF2YWlsYWJsZSBhdApAdXJse2h0dHA6Ly93d3cubWluZ3cub3JnL30uCgpAaXRlbQpJbnN0YWxsIHRoZSBXaW4zMiB2ZXJzaW9uIG9mIFNETCAoQHVybHtodHRwOi8vd3d3LmxpYnNkbC5vcmd9KSBieQp1bnBhY2tpbmcgQGZpbGV7aTM4Ni1taW5ndzMybXN2Yy50YXIuZ3p9LiBTZXQgdXAgdGhlIFBBVEggZW52aXJvbm1lbnQKdmFyaWFibGUgc28gdGhhdCBAZmlsZXtpMzg2LW1pbmd3MzJtc3ZjLXNkbC1jb25maWd9IGNhbiBiZSBsYXVuY2hlZCBieQp0aGUgUUVNVSBjb25maWd1cmF0aW9uIHNjcmlwdC4KCkBpdGVtCkNvbmZpZ3VyZSBRRU1VIGZvciBXaW5kb3dzIGNyb3NzIGNvbXBpbGF0aW9uOgpAZXhhbXBsZQouL2NvbmZpZ3VyZSAtLWVuYWJsZS1taW5ndzMyCkBlbmQgZXhhbXBsZQpJZiBuZWNlc3NhcnksIHlvdSBjYW4gY2hhbmdlIHRoZSBjcm9zcy1wcmVmaXggYWNjb3JkaW5nIHRvIHRoZSBwcmVmaXgKY2hvc2VuIGZvciB0aGUgTWluR1cgdG9vbHMgd2l0aCAtLWNyb3NzLXByZWZpeC4gWW91IGNhbiBhbHNvIHVzZQotLXByZWZpeCB0byBzZXQgdGhlIFdpbjMyIGluc3RhbGwgcGF0aC4KCkBpdGVtIFlvdSBjYW4gaW5zdGFsbCBRRU1VIGluIHRoZSBpbnN0YWxsYXRpb24gZGlyZWN0b3J5IGJ5IHR5cGluZwpAZmlsZXttYWtlIGluc3RhbGx9LiBEb24ndCBmb3JnZXQgdG8gY29weSBAZmlsZXtTREwuZGxsfSBpbiB0aGUKaW5zdGFsbGF0aW9uIGRpcmVjdG9yeS4KCkBlbmQgaXRlbWl6ZQoKTm90ZTogQ3VycmVudGx5LCBXaW5lIGRvZXMgbm90IHNlZW0gYWJsZSB0byBsYXVuY2gKUUVNVSBmb3IgV2luMzIuCgpAbm9kZSBNYWMgT1MgWApAc2VjdGlvbiBNYWMgT1MgWAoKVGhlIE1hYyBPUyBYIHBhdGNoZXMgYXJlIG5vdCBmdWxseSBtZXJnZWQgaW4gUUVNVSwgc28geW91IHNob3VsZCBsb29rCmF0IHRoZSBRRU1VIG1haWxpbmcgbGlzdCBhcmNoaXZlIHRvIGhhdmUgYWxsIHRoZSBuZWNlc3NhcnkKaW5mb3JtYXRpb24uCgpAbm9kZSBJbmRleApAY2hhcHRlciBJbmRleApAcHJpbnRpbmRleCBjcAoKQGJ5ZQo=