PGh0bWw+Cgo8aGVhZD4KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KPHRpdGxlPlBvbHlnb24gVXNhZ2U8L3RpdGxlPgo8L2hlYWQ+Cgo8Ym9keT4KCjxoMT5MYXlvdXQgVmVyc3VzIFNjaGVtYXRpYyBUdXRvcmlhbDwvaDE+IAo8cD5JbiB0aGlzIHR1dG9yaWFsIHdlIHdpbGwgaW1wbGVtZW50IGEgdG95IFZMU0kgbGF5b3V0IHZlcmlmaWNhdGlvbiAKYXBwbGljYXRpb24uJm5ic3A7IEluIFZMU0kgQ0FEIGFuIGltcG9ydGFudCBzdGVwIG9mIGRlc2lnbiBpcyB0aGUgc2lnbiBvZmYgY2hlY2sgCnRoYXQgdmVyaWZpZXMgdGhhdCB0aGUgcGh5c2ljYWwgbGF5b3V0IGFzIGRyYXduIGJ5IG1hc2sgZGVzaWduZXJzIGFuZCBhdXRvbWF0ZWQgCnRvb2xzIGltcGxlbWVudHMgdGhlIGxvZ2ljYWwgc2NoZW1hdGljIHNwZWNpZmllZCBieSBkZXNpZ24gZW5naW5lZXJzLiZuYnNwOyAKUGh5c2ljYWwgbGF5b3V0IGlzIG1vZGVsZWQgYXMgcG9seWdvbnMgb24gbGF5ZXJzIHRoYXQgYXJlIHVzZWQgdG8gcHJpbnQgdGhlIApsYXlvdXQgdG8gdGhlIHNpbGljb24gd2FmZXIgZHVyaW5nIG1hbnVmYWN0dXJlLiZuYnNwOyBJdCBpcyBtdWNoIGJldHRlciB0byBmaW5kIApwaHlzaWNhbCBkZXNpZ24gbWlzdGFrZXMgYmVmb3JlIHNwZW5kaW5nIG1pbGxpb25zIG9mIGRvbGxhcnMgdG8gcHJlcGFyZSAKbGl0aG9ncmFwaHkgbWFza3MgYW5kIHJ1biBhIHRlc3QgbG90IG9mIHdhZmVycy48L3A+CjxwPlJlYWwgbGF5b3V0IGZpbGUgZm9ybWF0cyBhcmUgYmluYXJ5IGFuZCBvZnRlbiBjb21wcmVzc2VkIGFuZCByZXByZXNlbnQgYSAKZm9sZGVkIGhpZXJhcmNoaWNhbCBtb2RlbCBvZiBsYXlvdXQgd2hlcmUgYSBncm91cCBvZiBwb2x5Z29ucyBjYW4gYmUgZ3JvdXBlZCAKaW50byBhIGNlbGwgYW5kIGluc3RhbnRpYXRlZCBhcyBhIGdyb3VwIGludG8gb3RoZXIgY2VsbHMuJm5ic3A7IEZvciB0aGlzIAp0dXRvcmlhbCB3ZSBhc3N1bWUgYSBzaW1wbGlmaWVkIGFzY2lpIGxheW91dCBmaWxlIGZvcm1hdCB3aXRoIG5vIGRlc2lnbiAKaGllcmFyY2h5LCB3aGljaCB3ZSB3b3VsZCBjYWxsICZxdW90O2ZsYXQmcXVvdDsgaW4gVkxTSSBqYXJnb24uJm5ic3A7IFNpbWlsYXJseSB3ZSBhc3N1bWUgCmEgZmxhdCwgYXNjaWkgbG9naWNhbCBzY2hlbWF0aWMgbmV0IGxpc3QgZmlsZSBmb3JtYXQuJm5ic3A7IEEgbmV0IGlzIGEgbmFtZWQgCmVsZWN0cmljYWwgY29ubmVjdGlvbiBpbiBhIGNpcmN1aXQgZGVzaWduLiZuYnNwOyBUaGUgZ29hbCBvZiB0aGUgbGF5b3V0IAp2ZXJpZmljYXRpb24gdHV0b3JpYWwgaXMgdG8gcGFyc2UgdGhlc2UgdHdvIGZpbGUgZm9ybWF0cywgYXBwbHkgZ2VvbWV0cnkgCm9wZXJhdGlvbnMgcHJvdmlkZWQgYnkgQm9vc3QuUG9seWdvbiBvbiB0aGUgbGF5b3V0IGRhdGEgdG8gZ2VuZXJhdGUgYSBsb2dpY2FsIApzY2hlbWF0aWMgdGhhdCByZXByZXNlbnRzIHdoYXQgaXMgaW1wbGVtZW50ZWQgaW4gdGhlIHBoeXNpY2FsIGxheW91dCBhbmQgdGhlbiAKY29tcGFyZSB0aGUgaW5wdXQgc2NoZW1hdGljIHdpdGggdGhlIGdlbmVyYXRlZCBzY2hlbWF0aWMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgCnRoZXkgYXJlIHRoZSBzYW1lLjwvcD4KPHA+Rmlyc3QgbGV0IHVzIGRlZmluZSBzb21lIG9iamVjdHMgdGhhdCB3ZSB3aWxsIG5lZWQgaW4gdGhlIGRlc2lnbiBvZiBvdXIgdG95IApsYXlvdXQgdmVyaWZpY2F0aW9uIGFwcGxpY2F0aW9uOjwvcD4KPHA+TGF5b3V0IFJlY3RhbmdsZTogQW4gYXhpcy1wYXJhbGxlbCByZWN0YW5nbGUgd2l0aCBhIGxheWVyIGFzc29jaWF0ZWQ8YnI+CkxheW91dCBQaW46IEFuIGF4aXMtcGFyYWxsZWwgcmVjdGFuZ2xlIHdpdGggYSBsYXllciBhbmQgbmV0IChlbGVjdHJpY2FsIHNpZ25hbCkgCm5hbWUgYXNzb2NpYXRlZDxicj4KTGF5b3V0IERhdGFiYXNlOiBBbiBhc3NvY2lhdGl2ZSBjb250YWluZXIgb2YgbGF5ZXIgbmFtZSB0byBwb2x5Z29uIHNldDxicj4KQ29ubmVjdGl2aXR5IERhdGFiYXNlOiBBbiBhc3NvY2lhdGl2ZSBjb250YWluZXIgb2YgbmV0IG5hbWUgdG8gbGF5b3V0IGRhdGFiYXNlPGJyPgpQaHlzaWNhbCBEZXZpY2U6IEEgc3BlY2lmaWMgZ2VvbWV0cmljIGFycmFuZ2VtZW50IG9uIHNldmVyYWwgbGF5ZXJzIHdpdGggb25lIG9yIAptb3JlIGlucHV0IG5ldCBhbmQgb25lIG91dHB1dCBuZXQ8YnI+CkxvZ2ljYWwgTmV0OiBBIG5hbWVkIGdyYXBoIG5vZGU8YnI+CkxvZ2ljYWwgRGV2aWNlOiBBbiB1bi1uYW1lZCBncmFwaCBub2RlIHdpdGggYSBkZXZpY2UgdHlwZTxicj4KTG9naWNhbCBQaW46IEEgc3BlY2lhbCBuZXQgdGhhdCBkZWZpbmVzIGFuIGlucHV0IG9yIG91dHB1dCBmb3IgdGhlIGNpcmN1aXQ8YnI+ClNjaGVtYXRpYyBEYXRhYmFzZTogQSBncmFwaCBjb25zaXN0aW5nIG9mIG5ldHMgYW5kIGxvZ2ljYWwgCmRldmljZXM8L3A+CjxwPk5leHQgbGV0J3MgZGVmaW5lIHRoZSBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIHBlcmZvcm1lZCBieSBvdXIgdG95IApsYXlvdXQgdmVyc3VzIHNjaGVtYXRpYyBhcHBsaWNhdGlvbjo8L3A+CjxwPlBhcnNlIExheW91dDogU3RyZWFtIGxheW91dCByZWN0YW5nbGVzIGFuZCBwb2x5Z29ucyBpbnRvIGEgbGF5b3V0IGRhdGFiYXNlIAphbmQgc3RyZWFtIGxheW91dCBwaW5zIGludG8gYSBjb25uZWN0aXZpdHkgZGF0YWJhc2U8YnI+CkV4dHJhY3QgQ29ubmVjdGl2aXR5OiBBZGQgcG9seWdvbnMgZnJvbSBsYXlvdXQgZGF0YWJhc2UgdG8gY29ubmVjdGl2aXR5IGRhdGFiYXNlIApieSBwaHlzaWNhbCB0b3VjaCBvciBvdmVybGFwIHJlbGF0aW9uc2hpcDxicj4KRXh0cmFjdCBEZXZpY2VzOiBQb3B1bGF0ZSBhIHNjaGVtYXRpYyBkYXRhYmFzZSB3aXRoIGxvZ2ljYWwgZGV2aWNlcyBiYXNlZCBvbiAKcGh5c2ljYWwgZGV2aWNlcyBpZGVudGlmaWVkIHdpdGhpbiB0aGUgbGF5b3V0IGdlb21ldHJ5IGFuZCBleHRyYWN0IHRoZWlyIAp0ZXJtaW5hbHMgZnJvbSB0aGUgCmNvbm5lY3Rpdml0eSBkYXRhYmFzZTxicj4KRXh0cmFjdCBOZXQgTGlzdDogQ29tcGxldGUgZ3JhcGggcmVwcmVzZW50ZWQgaW4gc2NoZW1hdGljIGRhdGFiYXNlIGRlcml2ZWQgZnJvbSAKbGF5b3V0PGJyPgpQYXJzZSBTY2hlbWF0aWM6IFN0cmVhbSBsb2dpY2FsIG5ldHMsIGRldmljZXMgYW5kIHBpbnMgaW50byBhIHNjaGVtYXRpYyAKZGF0YWJhc2U8YnI+CkNvbXBhcmUgU2NoZW1hdGljczogRXZhbHVhdGUgd2hldGhlciBleHRyYWN0ZWQgc2NoZW1hdGljIGRhdGFiYXNlIGlzIGVxdWl2YWxlbnQgCnRvIGlucHV0IHNjaGVtYXRpYyBkYXRhYmFzZSBhbmQgb3V0cHV0IHJlc3VsdDwvcD4KPHA+VG8gdGVzdCBvdXIgYXBwbGljYXRpb24gd2Ugd2lsbCBleHRyYWN0IHNpbmdsZSBsb2dpYyBnYXRlcy4mbmJzcDsgQSBsb2dpYyAKZ2F0ZSBpcyBzZXZlcmFsIHRyYW5zaXN0b3JzIHRoYXQgd29yayB0b2dldGhlciB0byBwZXJmb3JtIGEgc3BlY2lmaWMgbG9naWMgCmZ1bmN0aW9uLiZuYnNwOyBMb2dpYyBmdW5jdGlvbnMgaW5jbHVkZSB0aGUgY29tbW9ubHkgdW5kZXJzdG9vZCBCb29sZWFuIGxvZ2ljIApvcGVyYXRpb25zIHN1Y2ggYXMgQm9vbGVhbiBBTkQsIE9SLCBYT1IgYW5kIElOVkVSVC4mbmJzcDsgQWxzbyBmcmVxdWVudGx5IHVzZWQgCmFyZSBOQU5EIGFuZCBOT1IsIHdoaWNoIGFyZSByZXNwZWN0aXZlbHkgQU5EIGFuZCBPUiBvcGVyYXRpb25zIGZvbGxvd2VkIGJ5IGFuIApJTlZFUlQgb3BlcmF0aW9uLiZuYnNwOyBBIE5BTkQgZ2F0ZSBjYW4gYmUgaW1wbGVtZW50ZWQgaW4gdGhlIENNT1MgY2lyY3VpdCAKZmFtaWx5IHdpdGggZm91ciB0cmFuc2lzdG9ycy4mbmJzcDsgVGhlIE5BTkQgZ2F0ZSBoYXMgdHdvIGlucHV0cyBhbmQgb25lIG91dHB1dC4mbmJzcDsgCkVhY2ggaW5wdXQgZ29lcyB0byB0d28gdHJhbnNpc3RvcnMsIG9uZSBwLXR5cGUgdHJhbnNpc3RvciBhbmQgb25lIG4tdHlwZSAKdHJhbnNpc3Rvci4mbmJzcDsgVGhlICZxdW90O3AmcXVvdDsgc3RhbmRzIGZvciBwb3NpdGl2ZSBhbmQgdGhlICZxdW90O24mcXVvdDsgc3RhbmRzIGZvciBuZWdhdGl2ZS4mbmJzcDsgCldoZW4gdGhlIHAtdHlwZSB0cmFuc2lzdG9yIGlzIG9uIAppdCBwdWxscyB0aGUgb3V0cHV0IHVwIHRvIHRoZSBzYW1lIHZvbHRhZ2UgYXMgdGhlIHZvbHRhZ2Ugc291cmNlLiZuYnNwOyBXaGVuIHRoZSAKbi10eXBlIHRyYW5zaXN0b3IgaXMgb24gaXQgcHVsbHMgdGhlIG91dHB1dCBkb3duIHRvIHRoZSBzYW1lIHZvbHRhZ2UgYXMgdGhlIApncm91bmQuJm5ic3A7IFRoZSBwcm9jZXNzIG9mIGNyZWF0aW5nIGEgcC10eXBlIHRyYW5zaXN0b3IgYmVnaW5zIGJ5ICZxdW90O2RvcGluZyZxdW90OyB0aGUgc2lsaWNvbiAKc3Vic3RyYXRlIHRvIGNyZWF0ZSBuLXR5cGUgbWF0ZXJpYWwuJm5ic3A7IFRoaXMgYXJlYSBvZiBuLXR5cGUgbWF0ZXJpYWwgd2lsbCBiZSAKY2FsbGVkIHRoZSBOV0VMTCBsYXllciBpbiBvdXIgdGVzdCBkYXRhLiZuYnNwOyBXaXRoaW4gdGhlIGFyZWEgb2YgTldFTEwgYSAKcC1kaWZmdXNpb24gYXJlYSBpcyBjcmVhdGVkIGJ5IGZ1cnRoZXIgZG9waW5nIHRoZSBzaWxpY29uIHRvIGNyZWF0ZSBwLXR5cGUgCm1hdGVyaWFsLiZuYnNwOyBUaGlzIGFyZWEgb2YgcC10eXBlIG1hdGVyaWFsIHdpbGwgYmUgY2FsbGVkIFBESUZGIGluIG91ciB0ZXN0IApkYXRhLiZuYnNwOyBUaHJvdWdoIHRoZSBtaWRkbGUgb2YgYSBQRElGRiBhcmVhIGJhcnMgb2YgcG9seS1zaWxpY29uIGFyZSBncm93biAKdGhhdCBjcmVhdGUgY29uZHVjdGl2ZSBsaW5lcyBvdmVyIHRoZSBkaWZmdXNpb24gYXJlYS4mbmJzcDsgVGhlIGFyZWEgb2YgCnBvbHktc2lsaWNvbiBtYXRlcmlhbCB3aWxsIGJlIGNhbGxlZCBQT0xZIGluIG91ciB0ZXN0IGRhdGEuJm5ic3A7IFVuZGVyIHNvbWUgb2YgdGhlc2UgCnBvbHktc2lsaWNvbiBsaW5lcyBhIHRoaW4gbGF5ZXIgb2Ygc2lsaWNvbi1veGlkZSBwcm92aWRlcyBpbnN1bGF0aW9uIGJ1dCBhbGxvd3MgCnRoZSB2b2x0YWdlIGZpZWxkIG9mIHRoZSBwb2x5LXNpbGljb24gdG8gaW50ZXJhY3Qgd2l0aCB0aGUgZGlmZnVzaW9uLiZuYnNwOyBFYWNoIApvZiB0aGVzZSBpbnN1bGF0ZWQgcG9seS1zaWxpY29uIGxpbmVzIGlzIHRoZSAmcXVvdDtnYXRlJnF1b3Q7IG9mIGEgdHJhbnNpc3Rvci4mbmJzcDsgClRoZSBnYXRlIGFyZWEgd2lsbCBiZSBjYWxsZWQgR0FURSBpbiBvdXIgdGVzdCBkYXRhLiZuYnNwOyBXaGVuIHRoZSAKdm9sdGFnZSBhdCB0aGUgZ2F0ZSBpcyB0aGUgc2FtZSBhcyB0aGUgZ3JvdW5kIHZvbHRhZ2UgdGhlIHAtdHlwZSB0cmFuc2lzdG9yIGlzIAomcXVvdDtvbiZxdW90OyBhbmQgY2FuIHBhc3MgY3VycmVudCBmcm9tIHRoZSB2b2x0YWdlIHNvdXJjZSB0byB0aGUgb3V0cHV0IC4mbmJzcDsgVGhlIApwb2x5LXNpbGljb24gbGluZXMgdGhhdCBhcmUgbm90IGluc3VsYXRlZCBjcmVhdGUgZWxlY3RyaWNhbCBjb25uZWN0aW9ucyB0byB0aGUgCnRyYW5zaXN0b3IgZm9yIG91dHB1dCBzaWduYWxzIGFuZCBzb3VyY2Ugdm9sdGFnZS4mbmJzcDsgVGhlIG4tdHlwZSB0cmFuc2lzdG9yIApkaWZmZXJzIGZyb20gdGhlIHAtdHlwZSBpbiB0aGF0IGl0cyBkaWZmdXNpb24gaXMgbi10eXBlIG1hdGVyaWFsIG91dHNpZGUgb2YgTldFTEwgYXJlYS4mbmJzcDsgQ3VycmVudCBjYW4gcGFzcyBmcm9tIHRoZSBvdXRwdXQgdG8gdGhlIGdyb3VuZCB3aGVuIHRoZSAKdm9sdGFnZSBhdCB0aGUgZ2F0ZSBvZiB0aGUgbi10eXBlIHRyYW5zaXN0b3IgaXMgYXQgdGhlIHNvdXJjZSB2b2x0YWdlIGxldmVsLiZuYnNwOyAKQWJvdmUgdGhlIHBvbHktc2lsaWNvbiBsYXllciBpcyBhIGxheWVyIG9mIHNpbGljb24tb3hpZGUgaW5zdWxhdG9yIHdpdGggaG9sZXMgCmN1dCBvdXQgb2YgaXQgdGhhdCBnZXQgZmlsbGVkIGluIHdpdGggbWV0YWwuJm5ic3A7IFRoZXNlIG1ldGFsIGZpbGxlZCBob2xlcyBhcmUgCmNhbGxlZCB2aWFzIGFuZCB3ZSB3aWxsIHJlZmVyIHRvIHRoaXMgbGF5ZXIgYXMgVklBMCBpbiBvdXIgdGVzdCBkYXRhLiZuYnNwOyBPbiAKdG9wIG9mIFZJQTAgaXMgYSBsYXllciBvZiBtZXRhbCBwb2x5Z29ucyB3aXRoIHNpbGljb24gb3hpZGUgaW5zdWxhdG9yIGJldHdlZW4gCnRoZW0uJm5ic3A7IFRoZXNlIG1ldGFsIHBvbHlnb25zIGFyZSB3aXJlcyBhbmQgd2Ugd2lsbCBjYWxsIHRoZW0gTUVUQUwxIGluIG91ciAKdGVzdCBkYXRhLiZuYnNwOyBUaGUgTGF5b3V0IFBpbnMgaW4gb3VyIHRlc3QgZGF0YSB3aWxsIGJlIG9uIE1FVEFMMS4mbmJzcDsgSW4gYSAKTkFORCBnYXRlIHRoZSB0d28gbi10eXBlIHRyYW5zaXN0b3JzIGFyZSBjb25maWd1cmVkIGluIHNlcmllcywgbWVhbmluZyB0aGF0IHRoZSAKb3V0cHV0IG9mIG9uZSBpcyB0aGUgaW5wdXQgdm9sdGFnZSBzb3VyY2Ugb2YgdGhlIG90aGVyLiZuYnNwOyBPbmx5IGlmIGJvdGggCm4tdHlwZSB0cmFuc2lzdG9ycyBvZiBhIE5BTkQgZ2F0ZSBhcmUgJnF1b3Q7b24mcXVvdDsgd2lsbCB0aGUgb3V0cHV0IGJlIGNvbm5lY3RlZCB0byAKZ3JvdW5kLCBzaWduaWZ5aW5nIGEgbG9naWNhbCAmcXVvdDtmYWxzZSZxdW90Oy4mbmJzcDsgVGhlIHR3byBwLXR5cGUgdHJhbnNpc3RvcnMgaW4gYSBOQU5EIApnYXRlIGFyZSBjb25maWd1cmVkIGluIHBhcmFsbGVsLiZuYnNwOyBJZiBlaXRoZXIgaW5wdXQgdG8gdGhlIE5BTkQgZ2F0ZSBpcyBhIApsb2dpY2FsICZxdW90O2ZhbHNlJnF1b3Q7IHRoZSBwLXR5cGUgdHJhbnNpc3RvciBpdCBpcyBjb25uZWN0ZWQgdG8gd2lsbCBiZSAmcXVvdDtvbiZxdW90OyBhbmQgdGhlIApvdXRwdXQgb2YgdGhlIGdhdGUgd2lsbCBiZSBhIGxvZ2ljYWwgJnF1b3Q7dHJ1ZSZxdW90OyBiZWNhdXNlIHRoZSB0cmFuc2lzdG9yIHdpbGwgY29ubmVjdCAKaXQgdG8gdGhlIHZvbHRhZ2Ugc3VwcGx5LiZuYnNwOyBUaGUgZGlhZ3JhbSBiZWxvdyBpcyBhbiBleGFtcGxlIG9mIGhvdyBhIE5BTkQgCmdhdGUgbWlnaHQgYmUgbGFpZCBvdXQgYW5kIGlzIG5vdCBkcmF3biB0byBzY2FsZSBmb3IgYW55IHJlYWwgcHJvY2VzcyAKdGVjaG5vbG9neS4mbmJzcDsgVGhlIGRpZmZ1c2lvbiBtYXRlcmlhbCBpcyBpbnRlbmRlZCB0byBiZSBjdXQgYXdheSB1bmRlciB0aGUgCmdhdGUgbWF0ZXJpYWwgYnkgYSBCb29sZWFuIE5PVCBvcGVyYXRpb24gYW5kIGlzIHJlcHJlc2VudGVkIGFzIHNvbGlkIGJhcnMgdW5kZXIgCnRoZSBnYXRlcyBvZiB0cmFuc2lzdG9ycyBvbmx5IGZvciBjb252ZW5pZW5jZSBvZiBkcmF3aW5nLjwvcD4KPHA+CjxpbWcgYm9yZGVyPSIwIiBzcmM9ImltYWdlcy9OQU5ELlBORyIgd2lkdGg9IjYwMiIgaGVpZ2h0PSIzODciPjwvcD4KPHA+VGhlIGZvbGxvd2luZyBpcyB0aGUgaW5wdXQgbGF5b3V0IGZpbGUgZm9yIHRoZSBhYm92ZSBOQU5EIGdhdGUgbGF5b3V0LCAKcmVjdGFuZ2xlIGZvcm1hdCBpcyBYTCBYSCBZTCBZSDo8L3A+CjxwPjxmb250IGZhY2U9IkNvdXJpZXIgTmV3IiBzaXplPSIyIj5SZWN0YW5nbGUgMCA2MCAyNCA0OCBOV0VMTDxicj4KUmVjdGFuZ2xlIDMgNTcgMzIgNDMgUERJRkY8YnI+ClJlY3RhbmdsZSAzIDU3IDUgMTYgTkRJRkY8YnI+ClJlY3RhbmdsZSA1IDcgMCAxNyBQT0xZPGJyPgpSZWN0YW5nbGUgNSA3IDIyIDQ1IFBPTFk8YnI+ClJlY3RhbmdsZSAxNyAxOSAzIDQ1IFBPTFk8YnI+ClJlY3RhbmdsZSAyOSAzMSAzMSA0OCBQT0xZPGJyPgpSZWN0YW5nbGUgNDEgNDMgMyA0NSBQT0xZPGJyPgpSZWN0YW5nbGUgNTMgNTUgMyA0NSBQT0xZPGJyPgpSZWN0YW5nbGUgMTcgMTkgNCAxNyBHQVRFPGJyPgpSZWN0YW5nbGUgMTcgMTkgMzEgNDQgR0FURTxicj4KUmVjdGFuZ2xlIDQxIDQzIDQgMTcgR0FURTxicj4KUmVjdGFuZ2xlIDQxIDQzIDMxIDQ0IEdBVEU8YnI+ClJlY3RhbmdsZSA1IDcgMCAyIFZJQTA8YnI+ClJlY3RhbmdsZSA1IDcgMjMgMjUgVklBMDxicj4KUmVjdGFuZ2xlIDE3IDE5IDI4IDMwIFZJQTA8YnI+ClJlY3RhbmdsZSAyOSAzMSA0NiA0OCBWSUEwPGJyPgpSZWN0YW5nbGUgNDEgNDMgMTggMjAgVklBMDxicj4KUmVjdGFuZ2xlIDUzIDU1IDIzIDI1IFZJQTA8YnI+ClJlY3RhbmdsZSAwIDYwIDAgMiBNRVRBTDE8YnI+ClJlY3RhbmdsZSAzIDU3IDI4IDMwIE1FVEFMMTxicj4KUmVjdGFuZ2xlIDAgNjAgNDYgNDggTUVUQUwxPGJyPgpSZWN0YW5nbGUgMyA1NyAxOCAyMCBNRVRBTDE8YnI+ClJlY3RhbmdsZSAzIDU3IDIzIDI1IE1FVEFMMTxicj4KUGluIDI5IDMxIDAgMiBNRVRBTDEgR05EPGJyPgpQaW4gMjkgMzEgMjMgMjUgTUVUQUwxIE9VVFBVVDwvZm9udD48Zm9udCBmYWNlPSJDb3VyaWVyIE5ldyIgc2l6ZT0iMiI+PGJyPgpQaW4gMjkgMzEgMjggMzAgTUVUQUwxIElOUFVUMTwvZm9udD48Zm9udCBmYWNlPSJDb3VyaWVyIE5ldyIgc2l6ZT0iMiI+PGJyPgpQaW4gMjkgMzEgNDYgNDggTUVUQUwxIFZERDxicj4KUGluIDI5IDMxIDE4IDIwIE1FVEFMMSBJTlBVVDI8L2ZvbnQ+PC9wPgo8cD4KPGltZyBib3JkZXI9IjAiIHNyYz0iaW1hZ2VzL25hbmRzLlBORyIgd2lkdGg9IjQyMSIgaGVpZ2h0PSI0MDIiPjwvcD4KPHA+VGhlIGZvbGxvd2luZyBpcyB0aGUgbG9naWMgc2NoZW1hdGljIG5ldCBsaXN0IGZpbGUgZm9yIHRoZSBhYm92ZSBOQU5EIGdhdGUgCnNjaGVtYXRpYzo8L3A+CjxwPjxmb250IGZhY2U9IkNvdXJpZXIgTmV3IiBzaXplPSIyIj5QaW4gT1VUUFVUPGJyPlBpbiBJTlBVVDE8YnI+UGluIElOUFVUMjxicj4KUGluIFZERDxicj5QaW4gR05EPGJyPkRldmljZSBQVFJBTlMgVkREIElOUFVUMSBPVVRQVVQ8YnI+RGV2aWNlIFBUUkFOUyBWREQgCklOUFVUMiBPVVRQVVQ8YnI+RGV2aWNlIE5UUkFOUyBHTkQgSU5QVVQxIE5FVDE8YnI+RGV2aWNlIE5UUkFOUyBORVQxIElOUFVUMiAKT1VUUFVUPC9mb250PjwvcD4KPHA+QSBodW1hbiBjYW4gbG9vayBhdCB0aGlzIHNjaGVtYXRpYyBhbmQgY29tcGFyZSBpdCB0byB0aGUgZHJhd24gbGF5b3V0IG9mIHRoZSAKTkFORCBnYXRlIGFib3ZlIHRvIHZlcmlmeSB0aGF0IHRoZSBkcmF3biBsYXlvdXQgbWF0Y2hlcyB3aGF0IHRoZSBzY2hlbWF0aWMgc2F5cyAKaW4gYSBmZXcgc2Vjb25kcy4mbmJzcDsgSWYgeW91IGRvIHRoYXQgbm93IHlvdSB3aWxsIHByb2JhYmx5IGZpbmQgdGhlIHAgYW5kIApuLXR5cGUgdHJhbnNpc3RvcnMgYW5kIHRyYWNlIHRoZSBjb25uZWN0aXZpdHkgb2YgdGhlIGlucHV0cyBhbmQgcG93ZXIgdG8gdGhlIAp0ZXJtaW5hbHMgb2YgdGhlIHRyYW5zaXN0b3JzIGFuZCB0aGVuIHRvIHRoZSBvdXRwdXQuJm5ic3A7IFNpbmNlIHRoZXJlIGFyZSBvbiAKdGhlIG9yZGVyIG9mIG9uZSBiaWxsaW9uIHRyYW5zaXN0b3JzIG9uIGEgc2luZ2xlIGNoaXAgdGhlc2UgZGF5cyB3ZSBuZWVkIHRvIGdvIGEgCmxvdCBmYXN0ZXIgdGhhbiBodW1hbnMgY2FuIGluc3BlY3QgbGF5b3V0IGFuZCBtYWtlIGZld2VyIG1pc3Rha2VzLiZuYnNwOyBVc2luZyBwb2x5Z29uIHNldCBvcGVyYXRpb25zIAphbmQgcG9seWdvbiBjb25uZWN0aXZpdHkgZXh0cmFjdGlvbiBwcm92aWRlZCBieSBCb29zdC5Qb2x5Z29uIHdlIHdpbGwgYXV0b21hdGUgCnRoZSBpZGVudGlmaWNhdGlvbiBvZiB0cmFuc2lzdG9ycyBhbmQgdGhlIHRyYWNpbmcgb2YgY29ubmVjdGl2aXR5LiZuYnNwOyBCYXNlZCAKb24gdGhpcwo8YSBocmVmPSJhbmFseXNpcy5odG0iPmFuYWx5c2lzPC9hPiBvZiBCb29zdC5Qb2x5Z29uIHBlcmZvcm1hbmNlIHdlIGNhbiBleHBlY3QgCnRoaXMgbWV0aG9kb2xvZ3kgdG8gZWFzaWx5IHNjYWxlIHVwIHRvIG1pbGxpb24gZ2F0ZSBibG9ja3Mgb24gc3RhbmRhcmQgCndvcmtzdGF0aW9ucyBhbmQgYXJiaXRyYXJpbHkgbGFyZ2UgZGVzaWducyBnaXZlbiBzdWZmaWNpZW50IHN5c3RlbSBtZW1vcnkuJm5ic3A7IApsZXQncyBzdGFydCAKYnkgaW1wbGVtZW50aW5nIHNvbWUgZGF0YSBzdHJ1Y3R1cmVzIGZvciBvdXIgYXBwbGljYXRpb24uPC9wPgo8cD48Zm9udCBmYWNlPSJDb3VyaWVyIE5ldyIgc2l6ZT0iMiI+c3RydWN0IGxheW91dF9yZWN0YW5nbGUgezxicj4KJm5ic3A7IGludCB4bCwgeWwsIHhoLCB5aDs8YnI+CiZuYnNwOyBzdGQ6OnN0cmluZyBsYXllcjs8YnI+Cn07PC9mb250PjwvcD4KPHA+T3VyIGxheW91dCByZWN0YW5nbGUgaXMgbmljZSBhbmQgbWluaW1hbCwganVzdCBlbm91Z2ggdG8gc3RvcmUgaXRzIGRhdGEuJm5ic3A7IApJdCBpcyBkZWZpbmVkIGluIDxhIGhyZWY9InR1dG9yaWFsL2xheW91dF9yZWN0YW5nbGUuaHBwIj5sYXlvdXRfcmVjdGFuZ2xlLmhwcDwvYT4uIE5leHQgCmxldCdzIGltcGxlbWVudCB0aGUgbGF5b3V0IApwaW4gaW4gYSBzaW1pbGFyIHdheS48L3A+CjxwPjxmb250IGZhY2U9IkNvdXJpZXIgTmV3IiBzaXplPSIyIj5zdHJ1Y3QgbGF5b3V0X3BpbiB7PGJyPgombmJzcDsgaW50IHhsLCB5bCwgeGgsIHloOzxicj4KJm5ic3A7IHN0ZDo6c3RyaW5nIGxheWVyOzxicj4KJm5ic3A7IHN0ZDo6c3RyaW5nIG5ldDs8YnI+Cn07PC9mb250PjwvcD4KPHA+T3VyIGxheW91dCBwaW4gaXMgZGVmaW5lZCBpbiA8YSBocmVmPSJ0dXRvcmlhbC9sYXlvdXRfcGluLmhwcCI+bGF5b3V0X3Bpbi5ocHA8L2E+LiZuYnNwOyBOb3cgCmxldCdzIGRlZmluZSBhIGxheW91dCBkYXRhYmFzZSBvYmplY3QgYW5kIHBvcHVsYXRlIGl0IGZyb20gb3VyIHBhcnNlZCAKbGF5b3V0IGRhdGEgaW4gaW4gPGEgaHJlZj0idHV0b3JpYWwvbGF5b3V0X2RhdGFiYXNlLmhwcCI+bGF5b3V0X2RhdGFiYXNlLmhwcDwvYT4uPC9wPgo8cD48Zm9udCBmYWNlPSJDb3VyaWVyIE5ldyIgc2l6ZT0iMiI+dHlwZWRlZiBzdGQ6Om1hcCZsdDtzdGQ6OnN0cmluZywgCmJvb3N0Ojpwb2x5Z29uOjpwb2x5Z29uXzkwX3NldF9kYXRhJmx0O2ludCZndDsgJmd0OyBsYXlvdXRfZGF0YWJhc2U7PGJyPgo8YnI+Ci8vbWFwIHRoZSBsYXlvdXQgcmVjdGFuZ2xlIGRhdGEgdHlwZSB0byB0aGUgYm9vc3Q6OnBvbHlnb246OnJlY3RhbmdsZV9jb25jZXB0PGJyPgpuYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgcG9seWdvbns8YnI+CiZuYnNwOyB0ZW1wbGF0ZSAmbHQ7Jmd0Ozxicj4KJm5ic3A7IHN0cnVjdCByZWN0YW5nbGVfdHJhaXRzJmx0O2xheW91dF9yZWN0YW5nbGUmZ3Q7IHs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyB0eXBlZGVmIGludCBjb29yZGluYXRlX3R5cGU7PGJyPgombmJzcDsmbmJzcDsmbmJzcDsgdHlwZWRlZiBpbnRlcnZhbF9kYXRhJmx0O2ludCZndDsgaW50ZXJ2YWxfdHlwZTs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyBzdGF0aWMgaW5saW5lIGludGVydmFsX3R5cGUgZ2V0KGNvbnN0IGxheW91dF9yZWN0YW5nbGUmYW1wOyAKcmVjdGFuZ2xlLCBvcmllbnRhdGlvbl8yZCBvcmllbnQpIHs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBpZihvcmllbnQgPT0gSE9SSVpPTlRBTCk8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyByZXR1cm4gaW50ZXJ2YWxfdHlwZShyZWN0YW5nbGUueGwsIApyZWN0YW5nbGUueGgpOzxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHJldHVybiBpbnRlcnZhbF90eXBlKHJlY3RhbmdsZS55bCwgcmVjdGFuZ2xlLnloKTs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyB9PGJyPgombmJzcDsgfTs8YnI+Cjxicj4KJm5ic3A7IHRlbXBsYXRlICZsdDsmZ3Q7PGJyPgombmJzcDsgc3RydWN0IGdlb21ldHJ5X2NvbmNlcHQmbHQ7bGF5b3V0X3JlY3RhbmdsZSZndDsgeyB0eXBlZGVmIHJlY3RhbmdsZV9jb25jZXB0IAp0eXBlOyB9Ozxicj4KfX08YnI+Cjxicj4KLy9pbnNlcnQgbGF5b3V0IHJlY3RhbmdsZXMgaW50byBhIGxheW91dCBkYXRhYmFzZTxicj4KaW5saW5lIHZvaWQgcG9wdWxhdGVfbGF5b3V0X2RhdGFiYXNlKGxheW91dF9kYXRhYmFzZSZhbXA7IGxheW91dCwgc3RkOjp2ZWN0b3ImbHQ7bGF5b3V0X3JlY3RhbmdsZSZndDsmYW1wOyAKcmVjdHMpIHs8YnI+CiZuYnNwOyBmb3Ioc3RkOjpzaXplX3QgaSA9IDA7IGkgJmx0OyByZWN0cy5zaXplKCk7ICsraSkgezxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IGxheW91dFtyZWN0c1tpXS5sYXllcl0uaW5zZXJ0KHJlY3RzW2ldKTs8YnI+CiZuYnNwOyB9PGJyPgp9PC9mb250PjwvcD4KPHA+V2UgZG9uJ3QgbmVlZCB0byBpbnNlcnQgcGlucyBpbnRvIHRoZSBsYXlvdXQgZGF0YWJhc2UgYmVjYXVzZSBpdCBkb2Vzbid0IGtub3cgCmFueXRoaW5nIGFib3V0IGNvbm5lY3Rpdml0eSwganVzdCBnZW9tZXRyeS4mbmJzcDsgSG93ZXZlciwgd2UgZG8gbmVlZCB0byBrbm93IApzb21ldGhpbmcgYWJvdXQgY29ubmVjdGl2aXR5IHRvIGNvbXBhcmUgYSBzY2hlbWF0aWMgdG8gYSBsYXlvdXQsIHNvIHdlIG5lZWQgdG8gCmRlZmluZSBvdXIgY29ubmVjdGl2aXR5IGRhdGFiYXNlIGFuZCBzb21lIGxvZ2ljYWwgb2JqZWN0cy4mbmJzcDsgRmlyc3Qgd2UgZGVmaW5lIAphbiBvYmplY3QgZm9yIGEgbG9naWNhbCBkZXZpY2UgaW4gPGEgaHJlZj0idHV0b3JpYWwvZGV2aWNlLmhwcCI+ZGV2aWNlLmhwcDwvYT4uJm5ic3A7IApTaW5jZSB3ZSBhcmUgbGF6eSB0aGlzIG9iamVjdCBkb2VzIGRvdWJsZSBkdXR5IGFzIGEgcGluIGFuZCBib3RoIHR5cGVzIG9mIAp0cmFuc2lzdG9yLiZuYnNwOyBBIHRyYWRpdGlvbmFsIG9iamVjdCBvcmllbnRlZCBkZXNpZ24gbWlnaHQgZGVjbGFyZSBhIGJhc2UgCmNsYXNzIHdpdGggdmlydHVhbCBkZXN0cnVjdG9yIGFuZCBkZXJpdmUgZXZlcnkgZGV2aWNlIGZyb20gdGhhdC4mbmJzcDsgU2luY2Ugd2UgCmFyZW4ndCBwYWlkIGJ5IHRoZSBsaW5lIG9mIGNvZGUgbGV0J3MganVzdCBrZWVwIHRoaW5ncyBzaW1wbGUuPC9wPgo8cD48Zm9udCBmYWNlPSJDb3VyaWVyIE5ldyIgc2l6ZT0iMiI+c3RydWN0IGRldmljZSB7PGJyPgombmJzcDsgc3RkOjpzdHJpbmcgdHlwZTs8YnI+CiZuYnNwOyBzdGQ6OnZlY3RvciZsdDtzdGQ6OnN0cmluZyZndDsgdGVybWluYWxzOzxicj4KfTs8L2ZvbnQ+PC9wPgo8cD5Ob3cgbGV0J3MgZGVmaW5lIGEgc2NoZW1hdGljIGRhdGFiYXNlIG9iamVjdCBpbgo8YSBocmVmPSJ0dXRvcmlhbC9zY2hlbWF0aWNfZGF0YWJhc2UuaHBwIj5zY2hlbWF0aWNfZGF0YWJhc2UuaHBwPC9hPiBhbmQgcG9wdWxhdGUgaXQgZnJvbSBvdXIgcGFyc2VkIApzY2hlbWF0aWMgZGF0YS48L3A+CjxwPjxmb250IGZhY2U9IkNvdXJpZXIgTmV3Ij48Zm9udCBzaXplPSIyIj5zdHJ1Y3Qgc2NoZW1hdGljX2RhdGFiYXNlezxicj4KJm5ic3A7IHN0ZDo6dmVjdG9yJmx0O2RldmljZSZndDsgZGV2aWNlczs8YnI+CiZuYnNwOyBzdGQ6Om1hcCZsdDtzdGQ6OnN0cmluZywgc3RkOjpzZXQmbHQ7c3RkOjpzaXplX3QmZ3Q7ICZndDsgbmV0czs8YnI+Cn07PGJyPgo8YnI+Ci8vZ2l2ZW4gYSB2ZWN0b3Igb2YgZGV2aWNlcyBwb3B1bGF0ZSB0aGUgbWFwIG9mIG5ldCBuYW1lIHRvIHNldCBvZiBkZXZpY2UgaW5kZXg8YnI+CmlubGluZSB2b2lkIGV4dHJhY3RfbmV0bGlzdChzdGQ6Om1hcCZsdDtzdGQ6OnN0cmluZywgc3RkOjpzZXQmbHQ7c3RkOjpzaXplX3QmZ3Q7ICZndDsmYW1wOyBuZXRzLDxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IApzdGQ6OnZlY3RvciZsdDtkZXZpY2UmZ3Q7JmFtcDsgZGV2aWNlcykgezxicj4KJm5ic3A7IGZvcihzdGQ6OnNpemVfdCBpID0gMDsgaSAmbHQ7IGRldmljZXMuc2l6ZSgpOyArK2kpIHs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyBmb3Ioc3RkOjpzaXplX3QgaiA9IDA7IGogJmx0OyBkZXZpY2VzW2ldLnRlcm1pbmFscy5zaXplKCk7ICsraikgCns8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAvL2NyZWF0ZSBhc3NvY2lhdGlvbiBiZXR3ZWVuIG5ldCBuYW1lIGFuZCBkZXZpY2UgCmlkPGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgCm5ldHNbZGV2aWNlc1tpXS50ZXJtaW5hbHNbal1dLmluc2VydChuZXRzW2RldmljZXNbaV0udGVybWluYWxzW2pdXS5lbmQoKSwgaSk7PGJyPgombmJzcDsmbmJzcDsmbmJzcDsgfTxicj4KJm5ic3A7IH08YnI+Cn08L2ZvbnQ+PC9mb250PjwvcD4KPHA+T3VyIHNjaGVtYXRpYyBkYXRhYmFzZSBpcyBqdXN0IGEgdmVjdG9yIG9mIGRldmljZXMsIHdoaWNoIGFyZSBhc3NvY2lhdGVkIHRvIApuZXRzIGJ5IG5hbWUgdGhyb3VnaCB0aGVpciB0ZXJtaW5hbHMgYW5kIGEgbWFwIG9mIG5ldCBuYW1lIHRvIHNldCBvZiBkZXZpY2UgCmluZGV4IGludG8gdGhlIHZlY3Rvciwgd2hpY2ggY29tcGxldGVzIHRoZSBncmFwaCBieSBhc3NvY2lhdGluZyBuZXRzIHdpdGggdGhlaXIgCmRldmljZXMuJm5ic3A7IEdpdmVuIHRoZSBkZXZpY2VzIGFuZCB0aGVpciB0ZXJtaW5hbCBuZXRzIHdlIGVhc2lseSBidWlsZCB0aGUgCm1hcHBpbmcgZnJvbSBuZXRzIHRvIGRldmljZXMgd2l0aCB0aGUgZXh0cmFjdF9uZXRsaXN0IG9wZXJhdGlvbi4mbmJzcDsgTm93IHdlIAphcmUgcmVhZHkgdG8gc3RhcnQgd29ya2luZyBvbiBleHRyYWN0aW5nIG91ciBsYXlvdXQgdG8gYSBkZXJpdmVkIHNjaGVtYXRpYyAKZGF0YWJhc2UuJm5ic3A7IEhvd2V2ZXIsIGZpcnN0IHdlIG5lZWQgdG8gYnVpbGQgYSBwaHlzaWNhbCBjb25uZWN0aXZpdHkgZGF0YWJhc2UgCndpdGggZ2VvbWV0cnkgaW4gaXQgYmVmb3JlIHdlIGNhbiBidWlsZCBhIGxvZ2ljYWwgY29ubmVjdGl2aXR5IGRhdGFiYXNlIGZyb20gdGhlIApsYXlvdXQuJm5ic3A7IFdlIGRlZmluZSBhIHNpbXBsZSBjb25uZWN0aXZpdHkgZGF0YWJhc2UgaW4KPGEgaHJlZj0idHV0b3JpYWwvY29ubmVjdGl2aXR5X2RhdGFiYXNlLmhwcCI+Y29ubmVjdGl2aXR5X2RhdGFiYXNlLmhwcDwvYT4gYXMgYSAKbWFwIG9mIG5ldCBuYW1lIHRvIGxheW91dCBkYXRhYmFzZSBvZiBnZW9tZXRyeSBjb25uZWN0ZWQgdG8gdGhhdCBuZXQgYW5kIApwb3B1bGF0ZSBpdCB3aXRoIHRoZSBsYXlvdXQgZGF0YWJhc2UgYW5kIHBpbiBkYXRhLjwvcD4KPHA+PGZvbnQgc2l6ZT0iMiIgZmFjZT0iQ291cmllciBOZXciPnR5cGVkZWYgc3RkOjptYXAmbHQ7c3RkOjpzdHJpbmcsIApsYXlvdXRfZGF0YWJhc2UgJmd0OyBjb25uZWN0aXZpdHlfZGF0YWJhc2U7PGJyPgo8YnI+Ci8vbWFwIGxheW91dCBwaW4gZGF0YSB0eXBlIHRvIGJvb3N0Ojpwb2x5Z29uOjpyZWN0YW5nbGVfY29uY2VwdDxicj4KbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIHBvbHlnb257PGJyPgombmJzcDsgdGVtcGxhdGUgJmx0OyZndDs8YnI+CiZuYnNwOyBzdHJ1Y3QgcmVjdGFuZ2xlX3RyYWl0cyZsdDtsYXlvdXRfcGluJmd0OyB7PGJyPgombmJzcDsmbmJzcDsmbmJzcDsgdHlwZWRlZiBpbnQgY29vcmRpbmF0ZV90eXBlOzxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IHR5cGVkZWYgaW50ZXJ2YWxfZGF0YSZsdDtpbnQmZ3Q7IGludGVydmFsX3R5cGU7PGJyPgombmJzcDsmbmJzcDsmbmJzcDsgc3RhdGljIGlubGluZSBpbnRlcnZhbF90eXBlIGdldChjb25zdCBsYXlvdXRfcGluJmFtcDsgcGluLCAKb3JpZW50YXRpb25fMmQgb3JpZW50KSB7PGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgaWYob3JpZW50ID09IEhPUklaT05UQUwpPGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgcmV0dXJuIGludGVydmFsX3R5cGUocGluLnhsLCBwaW4ueGgpOzxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHJldHVybiBpbnRlcnZhbF90eXBlKHBpbi55bCwgcGluLnloKTs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyB9PGJyPgombmJzcDsgfTs8YnI+Cjxicj4KJm5ic3A7IHRlbXBsYXRlICZsdDsmZ3Q7PGJyPgombmJzcDsgc3RydWN0IGdlb21ldHJ5X2NvbmNlcHQmbHQ7bGF5b3V0X3BpbiZndDsgeyB0eXBlZGVmIHJlY3RhbmdsZV9jb25jZXB0IHR5cGU7IH07PGJyPgp9fTwvZm9udD48L3A+CjxwPjxmb250IHNpemU9IjIiIGZhY2U9IkNvdXJpZXIgTmV3Ij4vL2dpdmVuIGEgbGF5b3V0X2RhdGFiYXNlIHdlIHBvcHVsYXRlIGEgCmNvbm5lY3Rpdml0eSBkYXRhYmFzZTxicj4KaW5saW5lIHZvaWQgcG9wdWxhdGVfY29ubmVjdGl2aXR5X2RhdGFiYXNlKGNvbm5lY3Rpdml0eV9kYXRhYmFzZSZhbXA7IGNvbm5lY3Rpdml0eSw8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAKc3RkOjp2ZWN0b3ImbHQ7bGF5b3V0X3BpbiZndDsmYW1wOyBwaW5zLCBsYXlvdXRfZGF0YWJhc2UmYW1wOyBsYXlvdXQpIHs8YnI+CiZuYnNwOyB1c2luZyBuYW1lc3BhY2UgYm9vc3Q6OnBvbHlnb247PGJyPgombmJzcDsgdXNpbmcgbmFtZXNwYWNlIGJvb3N0Ojpwb2x5Z29uOjpvcGVyYXRvcnM7PGJyPgombmJzcDsgZm9yKHN0ZDo6c2l6ZV90IGkgPSAwOyBpICZsdDsgcGlucy5zaXplKCk7ICsraSkgezxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IGNvbm5lY3Rpdml0eVtwaW5zW2ldLm5ldF1bcGluc1tpXS5sYXllcl0uaW5zZXJ0KHBpbnNbaV0pOzxicj4KJm5ic3A7IH08YnI+CiZuYnNwOyBpbnQgaW50ZXJuYWxfbmV0X3N1ZmZpeCA9IDA7PGJyPgombmJzcDsgLy9jb25uZWN0IG1ldGFsMSBsYXlvdXQgdG8gcGlucyB3aGljaCB3ZXJlIG9uIG1ldGFsMTxicj4KJm5ic3A7IGNvbm5lY3RfbGF5b3V0X3RvX2xheWVyKGNvbm5lY3Rpdml0eSwgbGF5b3V0WyZxdW90O01FVEFMMSZxdW90O10sICZxdW90O01FVEFMMSZxdW90OywgPGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgCiZxdW90O01FVEFMMSZxdW90OywgJnF1b3Q7X19pbnRlcm5hbF9uZXRfJnF1b3Q7LCBpbnRlcm5hbF9uZXRfc3VmZml4KTs8YnI+CiZuYnNwOyAvL2Nvbm5lY3QgdmlhMCBsYXlvdXQgdG8gbWV0YWwxPGJyPgombmJzcDsgY29ubmVjdF9sYXlvdXRfdG9fbGF5ZXIoY29ubmVjdGl2aXR5LCBsYXlvdXRbJnF1b3Q7VklBMCZxdW90O10sICZxdW90O1ZJQTAmcXVvdDssIDxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IAomcXVvdDtNRVRBTDEmcXVvdDssICZxdW90O19faW50ZXJuYWxfbmV0XyZxdW90OywgaW50ZXJuYWxfbmV0X3N1ZmZpeCk7PGJyPgombmJzcDsgLy9wb2x5IG5lZWRzIHRvIGhhdmUgZ2F0ZXMgc3VidHJhY3RlZCBmcm9tIGl0IHRvIHByZXZlbnQgc2hvcnRpbmcgdGhyb3VnaCAKdHJhbnNpc3RvcnM8YnI+CiZuYnNwOyBwb2x5Z29uX3NldCBwb2x5X25vdF9nYXRlID0gbGF5b3V0WyZxdW90O1BPTFkmcXVvdDtdIC0gbGF5b3V0WyZxdW90O0dBVEUmcXVvdDtdOzxicj4KJm5ic3A7IC8vY29ubmVjdCBwb2x5IG1pbnVzIGdhdGUgdG8gdmlhMDxicj4KJm5ic3A7IGNvbm5lY3RfbGF5b3V0X3RvX2xheWVyKGNvbm5lY3Rpdml0eSwgcG9seV9ub3RfZ2F0ZSwgJnF1b3Q7UE9MWSZxdW90OywgPGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgCiZxdW90O1ZJQTAmcXVvdDssICZxdW90O19faW50ZXJuYWxfbmV0XyZxdW90OywgaW50ZXJuYWxfbmV0X3N1ZmZpeCk7PGJyPgombmJzcDsgLy93ZSBkb24ndCB3YW50IHRvIHNob3J0IHNpZ25hbHMgdGhyb3VnaCB0cmFuc2lzdG9ycyBzbyB3ZSBzdWJ0cmFjdCB0aGUgCmdhdGUgcmVnaW9uczxicj4KJm5ic3A7IC8vZnJvbSB0aGUgZGlmZnVzaW9uczxicj4KJm5ic3A7IHBvbHlnb25fc2V0IGRpZmZfbm90X2dhdGUgPSAobGF5b3V0WyZxdW90O1BESUZGJnF1b3Q7XSArIGxheW91dFsmcXVvdDtORElGRiZxdW90O10pIC0gCmxheW91dFsmcXVvdDtHQVRFJnF1b3Q7XTs8YnI+CiZuYnNwOyAvL2Nvbm5lY3QgZGlmZnVzaW9uIG1pbnVzIGdhdGUgdG8gcG9seTxicj4KJm5ic3A7IC8vTm90ZSB0aGF0IEkgbWFkZSB1cCB0aGUgRElGRiBsYXllciBuYW1lIGZvciBjb21iaW5lZCBQIGFuZCBORElGRjxicj4KJm5ic3A7IGNvbm5lY3RfbGF5b3V0X3RvX2xheWVyKGNvbm5lY3Rpdml0eSwgZGlmZl9ub3RfZ2F0ZSwgJnF1b3Q7RElGRiZxdW90OywgPGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgCiZxdW90O1BPTFkmcXVvdDssICZxdW90O19faW50ZXJuYWxfbmV0XyZxdW90OywgaW50ZXJuYWxfbmV0X3N1ZmZpeCk7PGJyPgombmJzcDsgLy9jb25uZWN0IGdhdGUgdG8gcG9seSB0byBtYWtlIGNvbm5lY3Rpb25zIHRocm91Z2ggZ2F0ZXMgb24gcG9seTxicj4KJm5ic3A7IGNvbm5lY3RfbGF5b3V0X3RvX2xheWVyKGNvbm5lY3Rpdml0eSwgbGF5b3V0WyZxdW90O0dBVEUmcXVvdDtdLCAmcXVvdDtHQVRFJnF1b3Q7LCA8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAKJnF1b3Q7UE9MWSZxdW90OywgJnF1b3Q7X19pbnRlcm5hbF9uZXRfJnF1b3Q7LCBpbnRlcm5hbF9uZXRfc3VmZml4KTs8YnI+CiZuYnNwOyAvL25vdyB3ZSBoYXZlIHRyYWNlZCBjb25uZWN0aXZpdHkgb2YgdGhlIGxheW91dCBkb3duIHRvIHRoZSB0cmFuc2lzdG9yIApsZXZlbDxicj4KJm5ic3A7IC8vYW55IHBvbHlnb25zIG5vdCBjb25uZWN0ZWQgdG8gcGlucyBoYXZlIGJlZW4gYXNzaWduZWQgaW50ZXJuYWwgbmV0IApuYW1lczxicj4KfTwvZm9udD48L3A+CjxwPlRoaXMgcG9wdWxhdGUgY29ubmVjdGl2aXR5IGRhdGFiYXNlIGZ1bmN0aW9uIGlzIG91ciBmaXJzdCByZWFsIHVzZSBvZiAKQm9vc3QuUG9seWdvbiBpbiBvdXIgYXBwbGljYXRpb24uJm5ic3A7IEhlcmUgd2UgYXJlIGRvaW5nIEJvb2xlYW4gKHBvbHlnb24gc2V0KSAKb3BlcmF0aW9ucyBvbiBsYXlvdXQgbGF5ZXJzIHRvIG1lcmdlIHRvZ2V0aGVyIHRoZSBQRElGRiBhbmQgTkRJRkYgbGF5ZXJzIGFuZCBjdXQgCmF3YXkgdGhlIEdBVEUgbGF5ZXIgZnJvbSB0aGUgcmVzdWx0LCBmb3IgZXhhbXBsZS4mbmJzcDsgV2UgY29ubmVjdCB1cCB0aGUgbGF5b3V0IApzdGFydGluZyBmcm9tIHRoZSBwaW5zIGFuZCB3b3JraW5nIG91ciB3YXkgZG93biB0aGUgbGF5ZXIgc3RhY2sgdG8gdGhlIAp0cmFuc2lzdG9yIGxldmVsLiZuYnNwOyBJdCB3b3VsZCB3b3JrIGVxdWFsbHkgd2VsbCB0byB3b3JrIG91ciB3YXkgdXAgdGhlIGxheWVyIApzdGFjaywgb3IgY29ubmVjdCB0aGluZ3MgdXAgaW4gYW55IG9yZGVyLCByZWFsbHksIGJ1dCB0aGlzIHdheSBwcm9kdWNlcyBmZXdlciAKaW50ZXJuYWwgdGVtcG9yYXJ5IG5ldHMgdGhhdCBuZWVkIHRvIGJlIG1lcmdlZCB3aGVuIGNvbm5lY3Rpb25zIGJldHdlZW4gdGhlbSBhcmUgCmRpc2NvdmVyZWQgbGF0ZXIuJm5ic3A7IFRoZSBjb25uZWN0IGxheW91dCB0byBsYXllciBmdW5jdGlvbiB1c2VkIGFib3ZlIG5lZWRzIHRvIApiZSBpbXBsZW1lbnRlZCBiZWZvcmUgd2UgY2FuIHBvcHVsYXRlIG91ciBjb25uZWN0aXZpdHkgZGF0YWJhc2UuPC9wPgo8cD48Zm9udCBzaXplPSIyIiBmYWNlPSJDb3VyaWVyIE5ldyI+aW5saW5lIHZvaWQgCmNvbm5lY3RfbGF5b3V0X3RvX2xheWVyKGNvbm5lY3Rpdml0eV9kYXRhYmFzZSZhbXA7IGNvbm5lY3Rpdml0eSwgcG9seWdvbl9zZXQmYW1wOyAKbGF5b3V0LCA8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAKc3RkOjpzdHJpbmcgbGF5b3V0X2xheWVyLCBzdGQ6OnN0cmluZyBsYXllciw8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAKc3RkOjpzdHJpbmcgbmV0X3ByZWZpeCwgaW50JmFtcDsgbmV0X3N1ZmZpeCkgezxicj4KJm5ic3A7IGlmKGxheW91dF9sYXllci5lbXB0eSgpKTxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IHJldHVybjs8YnI+CiZuYnNwOyBib29zdDo6cG9seWdvbjo6Y29ubmVjdGl2aXR5X2V4dHJhY3Rpb25fOTAmbHQ7aW50Jmd0OyBjZTs8YnI+CiZuYnNwOyBzdGQ6OnZlY3RvciZsdDtzdGQ6OnN0cmluZyZndDsgbmV0X2lkczs8YnI+CiZuYnNwOyBmb3IoY29ubmVjdGl2aXR5X2RhdGFiYXNlOjppdGVyYXRvciBpdHIgPSBjb25uZWN0aXZpdHkuYmVnaW4oKTsgaXRyICE9IApjb25uZWN0aXZpdHkuZW5kKCk7ICsraXRyKSB7PGJyPgombmJzcDsmbmJzcDsmbmJzcDsgbmV0X2lkcy5wdXNoX2JhY2soKCppdHIpLmZpcnN0KTs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyBjZS5pbnNlcnQoKCppdHIpLnNlY29uZFtsYXllcl0pOzxicj4KJm5ic3A7IH08YnI+CiZuYnNwOyBzdGQ6OnZlY3RvciZsdDtwb2x5Z29uJmd0OyBwb2x5Z29uczs8YnI+CiZuYnNwOyBsYXlvdXQuZ2V0X3BvbHlnb25zKHBvbHlnb25zKTs8YnI+CiZuYnNwOyBzdGQ6OnNpemVfdCBwb2x5Z29uX2lkX29mZnNldCA9IG5ldF9pZHMuc2l6ZSgpOzxicj4KJm5ic3A7IGZvcihzdGQ6OnNpemVfdCBpID0gMDsgaSAmbHQ7IHBvbHlnb25zLnNpemUoKTsgKytpKSB7PGJyPgombmJzcDsmbmJzcDsmbmJzcDsgY2UuaW5zZXJ0KHBvbHlnb25zW2ldKTs8YnI+CiZuYnNwOyB9PGJyPgombmJzcDsgc3RkOjp2ZWN0b3ImbHQ7c3RkOjpzZXQmbHQ7aW50Jmd0OyAmZ3Q7IGdyYXBoKHBvbHlnb25zLnNpemUoKSArIG5ldF9pZHMuc2l6ZSgpLCAKc3RkOjpzZXQmbHQ7aW50Jmd0OygpKTs8YnI+CiZuYnNwOyBjZS5leHRyYWN0KGdyYXBoKTs8YnI+CiZuYnNwOyBzdGQ6OnZlY3RvciZsdDtpbnQmZ3Q7IHBvbHlnb25fY29sb3IocG9seWdvbnMuc2l6ZSgpICsgbmV0X2lkcy5zaXplKCksIDApOzxicj4KJm5ic3A7IC8vZm9yIGVhY2ggbmV0IGluIG5ldF9pZHMgcG9wdWxhdGUgY29ubmVjdGVkIGNvbXBvbmVudCB3aXRoIG5ldDxicj4KJm5ic3A7IGZvcihzdGQ6OnNpemVfdCBub2RlX2lkID0gMDsgbm9kZV9pZCAmbHQ7IG5ldF9pZHMuc2l6ZSgpOyArK25vZGVfaWQpIHs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyBwb3B1bGF0ZV9jb25uZWN0ZWRfY29tcG9uZW50KGNvbm5lY3Rpdml0eSwgcG9seWdvbnMsIApwb2x5Z29uX2NvbG9yLCBncmFwaCwgbm9kZV9pZCwgPGJyPgombmJzcDsmbmJzcDsmbmJzcDsgcG9seWdvbl9pZF9vZmZzZXQsIG5ldF9pZHNbbm9kZV9pZF0sIG5ldF9pZHMsIDxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IG5ldF9wcmVmaXgsIGxheW91dF9sYXllcik7PGJyPgombmJzcDsgfTxicj4KJm5ic3A7IC8vZm9yIGVhY2ggcG9seWdvbl9jb2xvciB0aGF0IGlzIHplcm8gcG9wdWxhdGUgY29ubmVjdGVkIGNvbXBvbmVudCB3aXRoIApuZXRfcHJlZml4ICsgbmV0X3N1ZmZpeCsrPGJyPgombmJzcDsgZm9yKHN0ZDo6c2l6ZV90IGkgPSAwOyBpICZsdDsgcG9seWdvbnMuc2l6ZSgpOyArK2kpIHs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyBpZihwb2x5Z29uX2NvbG9yW2kgKyBwb2x5Z29uX2lkX29mZnNldF0gPT0gMCkgezxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHN0ZDo6c3RyaW5nc3RyZWFtIHNzKHN0ZDo6c3RyaW5nc3RyZWFtOjppbiB8IApzdGQ6OnN0cmluZ3N0cmVhbTo6b3V0KTs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBzcyAmbHQ7Jmx0OyBuZXRfcHJlZml4ICZsdDsmbHQ7IG5ldF9zdWZmaXgrKzs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBzdGQ6OnN0cmluZyBpbnRlcm5hbF9uZXQ7IDxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHNzICZndDsmZ3Q7IGludGVybmFsX25ldDs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBwb3B1bGF0ZV9jb25uZWN0ZWRfY29tcG9uZW50KGNvbm5lY3Rpdml0eSwgCnBvbHlnb25zLCBwb2x5Z29uX2NvbG9yLCBncmFwaCwgPGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgaSArIHBvbHlnb25faWRfb2Zmc2V0LCA8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBwb2x5Z29uX2lkX29mZnNldCwgaW50ZXJuYWxfbmV0LCBuZXRfaWRzLCA8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBuZXRfcHJlZml4LCBsYXlvdXRfbGF5ZXIpOzxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IH08YnI+CiZuYnNwOyB9PGJyPgp9PC9mb250PjwvcD4KPHA+VGhlIGNvbm5lY3QgbGF5b3V0IHRvIGxheWVyIGZ1bmN0aW9uIHVzZXMgdGhlIGNvbm5lY3Rpdml0eSBleHRyYWN0aW9uIGZlYXR1cmUgCm9mIEJvb3N0LlBvbHlvbiB0byBidWlsZCBhIGNvbm5lY3Rpdml0eSBncmFwaCBmb3IgcG9seWdvbnMgb24gdGhlIGlucHV0IHBvbHlnb24gCnNldCBhbmQgaW4gdGhlIGNvbm5lY3Rpdml0eSBkYXRhYmFzZSBvbiB0aGUgc3BlY2lmaWVkIGxheWVyLiZuYnNwOyBJdCB0aGVuIGZpbmRzIApwb2x5Z29ucyBhc3NvY2lhdGVkIHdpdGggZXhpc3RpbmcgbmV0cyBpbiB0aGUgY29ubmVjdGl2aXR5IGRhdGFiYXNlIHRocm91Z2ggCmdyYXBoIHRyYXZlcnNhbCBhbmQgaW5zZXJ0cyB0aGVtIGludG8gdGhlIGNvbm5lY3Rpdml0eSBkYXRhYmFzZS4mbmJzcDsgRmluYWxseSwgCnBvbHlnb25zIHRoYXQgd2VyZW4ndCBjb25uZWN0ZWQgdG8gZXhpc3RpbmcgbmV0cyBhcmUgaW5zZXJ0ZWQgaW50byB0aGUgCmNvbm5lY3Rpdml0eSBkYXRhYmFzZSBvbiBhdXRvLWdlbmVyYXRlZCBpbnRlcm5hbCBuZXQgbmFtZXMuJm5ic3A7IFRoZSBpbnNlcnRpb24gCm9mIGEgY29ubmVjdGVkIGNvbXBvbmVudCBpbnRvIHRoZSBjb25uZWN0aXZpdHkgZGF0YWJhc2UgaXMgaGFuZGxlZCBieSB0aGUgCnJlY3Vyc2l2ZSB0cmF2ZXJzYWwgb2YgdGhlIGNvbm5lY3Rpdml0eSBncmFwaCB0aGF0IHdlIGltcGxlbWVudCBuZXh0LjwvcD4KPHA+PGZvbnQgc2l6ZT0iMiIgZmFjZT0iQ291cmllciBOZXciPmlubGluZSB2b2lkIHBvcHVsYXRlX2Nvbm5lY3RlZF9jb21wb25lbnQ8YnI+Cihjb25uZWN0aXZpdHlfZGF0YWJhc2UmYW1wOyBjb25uZWN0aXZpdHksIHN0ZDo6dmVjdG9yJmx0O3BvbHlnb24mZ3Q7JmFtcDsgcG9seWdvbnMsIDxicj4KJm5ic3A7c3RkOjp2ZWN0b3ImbHQ7aW50Jmd0OyBwb2x5Z29uX2NvbG9yLCBzdGQ6OnZlY3RvciZsdDtzdGQ6OnNldCZsdDtpbnQmZ3Q7ICZndDsmYW1wOyBncmFwaCwgPGJyPgombmJzcDtzdGQ6OnNpemVfdCBub2RlX2lkLCBzdGQ6OnNpemVfdCBwb2x5Z29uX2lkX29mZnNldCwgc3RkOjpzdHJpbmcmYW1wOyBuZXQsIDxicj4KJm5ic3A7c3RkOjp2ZWN0b3ImbHQ7c3RkOjpzdHJpbmcmZ3Q7JmFtcDsgbmV0X2lkcywgc3RkOjpzdHJpbmcgbmV0X3ByZWZpeCw8YnI+CiZuYnNwO3N0ZDo6c3RyaW5nJmFtcDsgbGF5b3V0X2xheWVyKSB7PGJyPgombmJzcDsgaWYocG9seWdvbl9jb2xvcltub2RlX2lkXSA9PSAxKTxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IHJldHVybjs8YnI+CiZuYnNwOyBwb2x5Z29uX2NvbG9yW25vZGVfaWRdID0gMTs8YnI+CiZuYnNwOyBpZihub2RlX2lkICZsdDsgcG9seWdvbl9pZF9vZmZzZXQgJmFtcDsmYW1wOyBuZXRfaWRzW25vZGVfaWRdICE9IG5ldCkgezxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IC8vbWVyZ2UgbmV0cyBpbiBjb25uZWN0aXZpdHkgZGF0YWJhc2U8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyAvL2lmIG9uZSBvZiB0aGUgbmV0cyBpcyBpbnRlcm5hbCBuZXQgbWVyZ2UgaXQgaW50byB0aGUgb3RoZXI8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyBzdGQ6OnN0cmluZyBuZXQxID0gbmV0X2lkc1tub2RlX2lkXTs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyBzdGQ6OnN0cmluZyBuZXQyID0gbmV0Ozxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IGlmKG5ldC5jb21wYXJlKDAsIG5ldF9wcmVmaXgubGVuZ3RoKCksIG5ldF9wcmVmaXgpID09IDApIHs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBuZXQgPSBuZXQxOzxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHN0ZDo6c3dhcChuZXQxLCBuZXQyKTs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyB9IGVsc2Ugezxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IG5ldF9pZHNbbm9kZV9pZF0gPSBuZXQ7PGJyPgombmJzcDsmbmJzcDsmbmJzcDsgfTxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IGNvbm5lY3Rpdml0eV9kYXRhYmFzZTo6aXRlcmF0b3IgaXRyID0gCmNvbm5lY3Rpdml0eS5maW5kKG5ldDEpOzxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IGlmKGl0ciAhPSBjb25uZWN0aXZpdHkuZW5kKCkpIHs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBmb3IobGF5b3V0X2RhdGFiYXNlOjppdGVyYXRvciBpdHIyID0gKCppdHIpLnNlY29uZC5iZWdpbigpOzxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGl0cjIgIT0gKCppdHIpLnNlY29uZC5lbmQoKTsgCisraXRyMikgezxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGNvbm5lY3Rpdml0eVtuZXQyXVsoKml0cjIpLmZpcnN0XS5pbnNlcnQoKCppdHIyKS5zZWNvbmQpOzxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IH08YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBjb25uZWN0aXZpdHkuZXJhc2UoaXRyKTs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyB9PGJyPgombmJzcDsgfTxicj4KJm5ic3A7IGlmKG5vZGVfaWQgJmd0Oz0gcG9seWdvbl9pZF9vZmZzZXQpPGJyPgombmJzcDsgY29ubmVjdGl2aXR5W25ldF1bbGF5b3V0X2xheWVyXS5pbnNlcnQocG9seWdvbnNbbm9kZV9pZCAtIApwb2x5Z29uX2lkX29mZnNldF0pOzxicj4KJm5ic3A7IGZvcihzdGQ6OnNldCZsdDtpbnQmZ3Q7OjppdGVyYXRvciBpdHIgPSBncmFwaFtub2RlX2lkXS5iZWdpbigpOzxicj4KJm5ic3A7IGl0ciAhPSBncmFwaFtub2RlX2lkXS5lbmQoKTsgKytpdHIpIHs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyBwb3B1bGF0ZV9jb25uZWN0ZWRfY29tcG9uZW50KGNvbm5lY3Rpdml0eSwgcG9seWdvbnMsIApwb2x5Z29uX2NvbG9yLCBncmFwaCwgPGJyPgombmJzcDsmbmJzcDsmbmJzcDsgKml0ciwgcG9seWdvbl9pZF9vZmZzZXQsIG5ldCwgbmV0X2lkcywgbmV0X3ByZWZpeCwgCmxheW91dF9sYXllcik7PGJyPgombmJzcDsgfTxicj4KfTxicj4KPGJyPgo8L2ZvbnQ+V2Ugd2FudCB0byBtZXJnZSBpbnRlcm5hbGx5IGdlbmVyYXRlZCBuZXRzIGludG8gcGluIG5ldHMsIHdoaWNoIGlzIHRoZSAKbW9zdCBjb21wbGljYXRlZCBwYXJ0IG9mIHRoaXMgc2ltcGxlIHByb2NlZHVyZS4mbmJzcDsgTm93IHRoYXQgd2UgaGF2ZSBvdXIgCmNvbm5lY3Rpdml0eSBkYXRhYmFzZSBleHRyYWN0ZWQgZnJvbSBwaW5zIGRvd24gdG8gdHJhbnNpc3RvcnMgd2UgbmVlZCB0byBleHRyYWN0IApvdXIgdHJhbnNpc3RvcnMgYW5kIGVzdGFibGlzaCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdHJhbnNpc3RvciB0ZXJtaW5hbHMgYW5kIApuZXRzIGluIG91ciBjb25uZWN0aXZpdHkgZGF0YWJhc2UuJm5ic3A7IEZpcnN0IGxldCdzIGV4dHJhY3QgdHJhbnNpc3RvcnMgd2l0aCAKdGhlIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGRlZmluZWQgaW4gPGEgaHJlZj0idHV0b3JpYWwvZXh0cmFjdF9kZXZpY2VzLmhwcCI+CmV4dHJhY3RfZGV2aWNlcy5ocHA8L2E+LjwvcD4KPHA+PGZvbnQgc2l6ZT0iMiIgZmFjZT0iQ291cmllciBOZXciPnR5cGVkZWYgYm9vc3Q6OnBvbHlnb246OmNvbm5lY3Rpdml0eV9leHRyYWN0aW9uXzkwJmx0O2ludCZndDsgCmNvbm5lY3Rpdml0eV9leHRyYWN0aW9uOzxicj4KaW5saW5lIHN0ZDo6dmVjdG9yJmx0O3N0ZDo6c2V0Jmx0O2ludCZndDsgJmd0Ozxicj4KZXh0cmFjdF9sYXllcihjb25uZWN0aXZpdHlfZXh0cmFjdGlvbiZhbXA7IGNlLCBzdGQ6OnZlY3RvciZsdDtzdGQ6OnN0cmluZyZndDsmYW1wOyBuZXRfaWRzLDxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IApjb25uZWN0aXZpdHlfZGF0YWJhc2UmYW1wOyBjb25uZWN0aXZpdHksIHBvbHlnb25fc2V0JmFtcDsgbGF5b3V0LDxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IApzdGQ6OnN0cmluZyBsYXllcikgezxicj4KJm5ic3A7IGZvcihjb25uZWN0aXZpdHlfZGF0YWJhc2U6Oml0ZXJhdG9yIGl0ciA9IGNvbm5lY3Rpdml0eS5iZWdpbigpOyBpdHIgIT0gCmNvbm5lY3Rpdml0eS5lbmQoKTsgKytpdHIpIHs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyBuZXRfaWRzLnB1c2hfYmFjaygoKml0cikuZmlyc3QpOzxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IGNlLmluc2VydCgoKml0cikuc2Vjb25kW2xheWVyXSk7PGJyPgombmJzcDsgfTxicj4KJm5ic3A7IHN0ZDo6dmVjdG9yJmx0O3BvbHlnb24mZ3Q7IHBvbHlnb25zOzxicj4KJm5ic3A7IGxheW91dC5nZXRfcG9seWdvbnMocG9seWdvbnMpOzxicj4KJm5ic3A7IGZvcihzdGQ6OnNpemVfdCBpID0gMDsgaSAmbHQ7IHBvbHlnb25zLnNpemUoKTsgKytpKSB7PGJyPgombmJzcDsmbmJzcDsmbmJzcDsgY2UuaW5zZXJ0KHBvbHlnb25zW2ldKTs8YnI+CiZuYnNwOyB9PGJyPgombmJzcDsgc3RkOjp2ZWN0b3ImbHQ7c3RkOjpzZXQmbHQ7aW50Jmd0OyAmZ3Q7IGdyYXBoKHBvbHlnb25zLnNpemUoKSArIG5ldF9pZHMuc2l6ZSgpLCAKc3RkOjpzZXQmbHQ7aW50Jmd0OygpKTs8YnI+CiZuYnNwOyBjZS5leHRyYWN0KGdyYXBoKTs8YnI+CiZuYnNwOyByZXR1cm4gZ3JhcGg7PGJyPgp9PC9mb250PjwvcD4KPHA+VGhpcyBleHRyYWN0IGxheWVyIGFsZ29yaXRobSBjb25zdHJ1Y3RzIGEgY29ubmVjdGl2aXR5IGdyYXBoIGJldHdlZW4gcG9seWdvbnMgCmluIHRoZSBpbnB1dCBwb2x5Z29uIHNldCBhbmQgcG9seWdvbnMgaW4gdGhlIGdpdmVuIGxheWVyIG9mIHRoZSBjb25uZWN0aXZpdHkgCmRhdGFiYXNlLiZuYnNwOyBJdCBpcyB1c2VkIHRvIGZvcm0gdGhlIGFzc29jaWF0aW9uIGJldHdlZW4gdHJhbnNpc3RvcnMgYW5kIHRoZWlyIAp0ZXJtaW5hbCBuZXRzIGluIHRoZSBmdW5jdGlvbiBmb3IgZXh0cmFjdGluZyBhIHNwZWNpZmljIHRyYW5zaXN0b3IgdHlwZS48L3A+CjxwPjxmb250IHNpemU9IjIiIGZhY2U9IkNvdXJpZXIgTmV3Ij5pbmxpbmUgdm9pZCBleHRyYWN0X2RldmljZV90eXBlKHN0ZDo6dmVjdG9yJmx0O2RldmljZSZndDsmYW1wOyAKZGV2aWNlcywgY29ubmVjdGl2aXR5X2RhdGFiYXNlJmFtcDsgY29ubmVjdGl2aXR5LDxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IApwb2x5Z29uX3NldCZhbXA7IGxheW91dCwgc3RkOjpzdHJpbmcgdHlwZSkgezxicj4KJm5ic3A7IC8vcmVjYWxsIHRoYXQgUCBhbmQgTkRJRkYgd2VyZSBtZXJnZWQgaW50byBvbmUgRElGRiBsYXllciBpbiB0aGUgCmNvbm5lY3Rpdml0eSBkYXRhYmFzZTxicj4KJm5ic3A7IC8vZmluZCB0aGUgdHdvIG5ldHMgb24gdGhlIERJRkYgbGF5ZXIgdGhhdCBpbnRlcmFjdCB3aXRoIGVhY2ggdHJhbnNpc3Rvcjxicj4KJm5ic3A7IC8vYW5kIHRoZW4gZmluZCB0aGUgbmV0IG9uIHRoZSBwb2x5IGxheWVyIHRoYXQgaW50ZXJhY3RzIHdpdGggZWFjaCAKdHJhbnNpc3Rvcjxicj4KJm5ic3A7IGJvb3N0Ojpwb2x5Z29uOjpjb25uZWN0aXZpdHlfZXh0cmFjdGlvbl85MCZsdDtpbnQmZ3Q7IGNlZGlmZjs8YnI+CiZuYnNwOyBzdGQ6OnZlY3RvciZsdDtzdGQ6OnN0cmluZyZndDsgbmV0X2lkc19kaWZmOzxicj4KJm5ic3A7IHN0ZDo6dmVjdG9yJmx0O3N0ZDo6c2V0Jmx0O2ludCZndDsgJmd0OyBncmFwaF9kaWZmID08YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyBleHRyYWN0X2xheWVyKGNlZGlmZiwgbmV0X2lkc19kaWZmLCBjb25uZWN0aXZpdHksIGxheW91dCwgCiZxdW90O0RJRkYmcXVvdDspOzxicj4KJm5ic3A7IGJvb3N0Ojpwb2x5Z29uOjpjb25uZWN0aXZpdHlfZXh0cmFjdGlvbl85MCZsdDtpbnQmZ3Q7IGNlcG9seTs8YnI+CiZuYnNwOyBzdGQ6OnZlY3RvciZsdDtzdGQ6OnN0cmluZyZndDsgbmV0X2lkc19wb2x5Ozxicj4KJm5ic3A7IHN0ZDo6dmVjdG9yJmx0O3N0ZDo6c2V0Jmx0O2ludCZndDsgJmd0OyBncmFwaF9wb2x5ID08YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyBleHRyYWN0X2xheWVyKGNlcG9seSwgbmV0X2lkc19wb2x5LCBjb25uZWN0aXZpdHksIGxheW91dCwgCiZxdW90O1BPTFkmcXVvdDspOzxicj4KJm5ic3A7IHN0ZDo6dmVjdG9yJmx0O2RldmljZSZndDsgdG1wX2RldmljZXMoZ3JhcGhfZGlmZi5zaXplKCkgLSBuZXRfaWRzX3BvbHkuc2l6ZSgpKTs8YnI+CiZuYnNwOyBmb3Ioc3RkOjpzaXplX3QgaSA9IG5ldF9pZHNfcG9seS5zaXplKCk7IGkgJmx0OyBncmFwaF9kaWZmLnNpemUoKTsgKytpKSB7PGJyPgombmJzcDsmbmJzcDsmbmJzcDsgdG1wX2RldmljZXNbaSAtIG5ldF9pZHNfZGlmZi5zaXplKCldLnR5cGUgPSB0eXBlOzxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IHRtcF9kZXZpY2VzW2kgLSBuZXRfaWRzX2RpZmYuc2l6ZSgpXS50ZXJtaW5hbHMgPSBzdGQ6OnZlY3RvciZsdDtzdGQ6OnN0cmluZyZndDsoMywgCnN0ZDo6c3RyaW5nKCkpOzxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IHN0ZDo6c2l6ZV90IGogPSAwOzxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IGZvcihzdGQ6OnNldCZsdDtpbnQmZ3Q7OjppdGVyYXRvciBpdHIgPSBncmFwaF9kaWZmW2ldLmJlZ2luKCk7PGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgaXRyICE9IGdyYXBoX2RpZmZbaV0uZW5kKCk7ICsraXRyLCAKKytqKSB7PGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgaWYoaiA9PSAwKSB7PGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgdG1wX2RldmljZXNbaSAtIG5ldF9pZHNfZGlmZi5zaXplKCldLnRlcm1pbmFsc1swXSAKPSBuZXRfaWRzX2RpZmZbKml0cl07PGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgfSBlbHNlIGlmKGogPT0gMSkgezxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHRtcF9kZXZpY2VzW2kgLSBuZXRfaWRzX2RpZmYuc2l6ZSgpXS50ZXJtaW5hbHNbMl0gCj0gbmV0X2lkc19kaWZmWyppdHJdOzxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IH0gZWxzZSB7PGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgLy9lcnJvciwgdG9vIG1hbnkgZGlmZiBjb25uZWN0aW9uczxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHRtcF9kZXZpY2VzW2kgLSBuZXRfaWRzX2RpZmYuc2l6ZSgpXS50ZXJtaW5hbHMgCj0gc3RkOjp2ZWN0b3ImbHQ7c3RkOjpzdHJpbmcmZ3Q7KDMsIHN0ZDo6c3RyaW5nKCkpOzxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IH08YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyB9PGJyPgombmJzcDsmbmJzcDsmbmJzcDsgaiA9IDA7PGJyPgombmJzcDsmbmJzcDsmbmJzcDsgZm9yKHN0ZDo6c2V0Jmx0O2ludCZndDs6Oml0ZXJhdG9yIGl0ciA9IGdyYXBoX3BvbHlbaV0uYmVnaW4oKTs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBpdHIgIT0gZ3JhcGhfcG9seVtpXS5lbmQoKTsgKytpdHIsIAorK2opIHs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBpZihqID09IDApIHs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyB0bXBfZGV2aWNlc1tpIC0gbmV0X2lkc19kaWZmLnNpemUoKV0udGVybWluYWxzWzFdIAo9IG5ldF9pZHNfcG9seVsqaXRyXTs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyB9IGVsc2Ugezxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IC8vZXJyb3IsIHRvbyBtYW55IHBvbHkgY29ubmVjdGlvbnM8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyB0bXBfZGV2aWNlc1tpIC0gbmV0X2lkc19wb2x5LnNpemUoKV0udGVybWluYWxzIAo9IHN0ZDo6dmVjdG9yJmx0O3N0ZDo6c3RyaW5nJmd0OygzLCBzdGQ6OnN0cmluZygpKTs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyB9PGJyPgombmJzcDsmbmJzcDsmbmJzcDsgfTxicj4KJm5ic3A7IH08YnI+Cjxicj4KJm5ic3A7IGRldmljZXMuaW5zZXJ0KGRldmljZXMuZW5kKCksIHRtcF9kZXZpY2VzLmJlZ2luKCksIHRtcF9kZXZpY2VzLmVuZCgpKTs8YnI+Cn08L2ZvbnQ+PC9wPgo8cD5XZSBhcHBlbmQgdHJhbnNpc3RvcnMgb250byB0aGUgdmVjdG9yIG9mIGRldmljZXMgd2l0aCB0aGVpciB0ZXJtaW5hbHMgCnBvcHVsYXRlZCB3aXRoIG5ldCBuYW1lcyBleHRyYWN0ZWQgZnJvbSB0aGUgY29ubmVjdGl2aXR5IGRhdGFiYXNlLiZuYnNwOyAKVHJhbnNpc3RvcnMnIHRlcm1pbmFscyBhcmUgY29ubmVjdGVkIHRocm91Z2ggdGhlIFBPTFkgYW5kIERJRkYgbGF5ZXJzIHdoZXJlIERJRkYgCmNvbnRhaW5zIGJvdGggUERJRkYgYW5kIE5ESUZGLiZuYnNwOyBUaGUgY29ubmVjdGlvbiB0byBQT0xZIGxheWVyIGlzIHRoZSBnYXRlIG9mIAp0aGUgdHJhbnNpc3RvciB3aGlsZSB0aGUgY29ubmVjdGlvbnMgdG8gRElGRiBvbiBlaXRoZXIgc2lkZSBvZiB0aGUgY2hhbm5lbCBvZiAKdGhlIHRyYW5zaXN0b3IgYXJlIHRoZSBzb3VyY2UgYW5kIGRyYWluLiZuYnNwOyBXZSBjYW4gdXNlIHRoaXMgdG8gZXh0cmFjdCBhcmUgcCAKYW5kIG4tdHlwZSB0cmFuc2lzdG9ycy4gPGZvbnQgc2l6ZT0iMiIgZmFjZT0iQ291cmllciBOZXciPjxicj4KPGJyPgovL3BvcHVsYXRlcyB2ZWN0b3Igb2YgZGV2aWNlcyBiYXNlZCBvbiBjb25uZWN0aXZpdHkgYW5kIGxheW91dCBkYXRhPGJyPgppbmxpbmUgdm9pZCBleHRyYWN0X2RldmljZXMoc3RkOjp2ZWN0b3ImbHQ7ZGV2aWNlJmd0OyZhbXA7IGRldmljZXMsIGNvbm5lY3Rpdml0eV9kYXRhYmFzZSZhbXA7IApjb25uZWN0aXZpdHksPGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgCmxheW91dF9kYXRhYmFzZSZhbXA7IGxheW91dCkgezxicj4KJm5ic3A7IHVzaW5nIG5hbWVzcGFjZSBib29zdDo6cG9seWdvbjo6b3BlcmF0b3JzOzxicj4KJm5ic3A7IC8vcC10eXBlIHRyYW5zaXN0b3JzIGFyZSBnYXRlIHRoYXQgaW50ZXJhY3Qgd2l0aCBwIGRpZmZ1c2lvbiBhbmQgbndlbGw8YnI+CiZuYnNwOyBwb2x5Z29uX3NldCBwdHJhbnNpc3RvcnMgPSBsYXlvdXRbJnF1b3Q7R0FURSZxdW90O107PGJyPgombmJzcDsgcHRyYW5zaXN0b3JzLmludGVyYWN0KGxheW91dFsmcXVvdDtQRElGRiZxdW90O10pOzxicj4KJm5ic3A7IHB0cmFuc2lzdG9ycy5pbnRlcmFjdChsYXlvdXRbJnF1b3Q7TldFTEwmcXVvdDtdKTs8YnI+CiZuYnNwOyAvL24tdHlwZSB0cmFuc2lzdG9ycyBhcmUgZ2F0ZSB0aGF0IGludGVyYWN0IHdpdGggbiBkaWZmdXNpb24gYW5kIG5vdCAKbndlbGw8YnI+CiZuYnNwOyBwb2x5Z29uX3NldCBudHJhbnNpc3RvcnMgPSBsYXlvdXRbJnF1b3Q7R0FURSZxdW90O107PGJyPgombmJzcDsgbnRyYW5zaXN0b3JzLmludGVyYWN0KGxheW91dFsmcXVvdDtORElGRiZxdW90O10pOzxicj4KJm5ic3A7IHBvbHlnb25fc2V0IG5vdF9udHJhbnNpc3RvcnMgPSBudHJhbnNpc3RvcnM7PGJyPgombmJzcDsgbm90X250cmFuc2lzdG9ycy5pbnRlcmFjdChsYXlvdXRbJnF1b3Q7TldFTEwmcXVvdDtdKTs8YnI+CiZuYnNwOyBudHJhbnNpc3RvcnMgLT0gbm90X250cmFuc2lzdG9yczs8YnI+CiZuYnNwOyBleHRyYWN0X2RldmljZV90eXBlKGRldmljZXMsIGNvbm5lY3Rpdml0eSwgcHRyYW5zaXN0b3JzLCAmcXVvdDtQVFJBTlMmcXVvdDspOzxicj4KJm5ic3A7IGV4dHJhY3RfZGV2aWNlX3R5cGUoZGV2aWNlcywgY29ubmVjdGl2aXR5LCBudHJhbnNpc3RvcnMsICZxdW90O05UUkFOUyZxdW90Oyk7PGJyPgp9PC9mb250PjwvcD4KPHA+VGhlIGV4dHJhY3QgZGV2aWNlcyBwcm9jZWR1cmUgbWFrZXMgc29tZSBtb3JlIHVzZSBvZiBCb29zdC5Qb2x5Z29uIEJvb2xlYW4gCm9wZXJhdGlvbnMgb24gdGhlIGxheW91dCBkYXRhIHdoZW4gd2UgZXhjbHVkZSBHQVRFIG1hdGVyaWFsIG92ZXIgTkRJRkYgdGhhdCAKaXNuJ3QgYWxzbyBvdmVyIE5XRUxMIHRvIGV4dHJhY3Qgb3VyIG4tdHlwZSB0cmFuc2lzdG9ycy4mbmJzcDsgV2UgYWxzbyBhcmUgdXNpbmcgCnRoZSAmcXVvdDtpbnRlcmFjdCZxdW90OyBvcGVyYXRpb24gb24gcG9seWdvbiBnZXRzLCB3aGljaCBpcyBpbXBsZW1lbnRlZCBpbiB0ZXJtcyBvZiAKY29ubmVjdGl2aXR5IGV4dHJhY3Rpb24gYW5kIHJldGFpbnMgYWxsIHBvbHlnb25zIG9mIGEgcG9seWdvbiBzZXQgdGhhdCB0b3VjaCBvciAKb3ZlcmxhcCBwb2x5Z29ucyBmcm9tIGFub3RoZXIgcG9seWdvbiBzZXQuJm5ic3A7IE5vdyB0aGF0IHdlIGhhdmUgYSB2ZWN0b3Igb2YgCmRldmljZXMgd2UgY2FuIGJ1aWxkIGEgc2NoZW1hdGljIGRhdGFiYXNlIGJ5IGNhbGxpbmcgdGhlIGV4dHJhY3RfbmV0bGlzdCAKZnVuY3Rpb24uJm5ic3A7IFdlIGNhbiB0aGVuIGNvbXBhcmUgdGhlIGV4dHJhY3RlZCBzY2hlbWF0aWMgZnJvbSB0aGUgc2NoZW1hdGljIApyZWFkIGluIGZyb20gZmlsZSB3aXRoIHRoZSBmdW5jdGlvbnMgZGVmaW5lZCBpbgo8YSBocmVmPSJ0dXRvcmlhbC9jb21wYXJlX3NjaGVtYXRpY3MuaHBwIj5jb21wYXJlX3NjaGVtYXRpY3MuaHBwPC9hPi4mbmJzcDsgClNpbmNlIGNvbXBhcmluZyB0d28gc2NoZW1hdGljcyBoYXMgbm8gZ2VvbWV0cmljIGFzcGVjdCB3ZSB3b24ndCBnbyBpbnRvIHRoYXQgCnByb2NlZHVyZSBoZXJlIGluIHRoZSB0dXRvcmlhbCBhbmQgd2lsbCBza2lwIHRvIHRoZSBpbnRlZ3JhdGlvbiBvZiBhbGwgdGhlc2UgCnByb2NlZHVyZXMgaW4gZGVmaW5lZCBpbiA8YSBocmVmPSJ0dXRvcmlhbC9leHRyYWN0LmNwcCI+ZXh0cmFjdC5jcHA8L2E+IHRvIGJ1aWxkIAp0aGUgbGF5b3V0IHRvIHNjaGVtYXRpYyBjb21wYXJpc29uIGFsZ29yaXRobS48L3A+CjxwPjxmb250IHNpemU9IjIiIGZhY2U9IkNvdXJpZXIgTmV3Ij5ib29sIGNvbXBhcmVfZmlsZXMoc3RkOjpzdHJpbmcgbGF5b3V0X2ZpbGUsIApzdGQ6OnN0cmluZyBzY2hlbWF0aWNfZmlsZSkgezxicj4KJm5ic3A7IHN0ZDo6aWZzdHJlYW0gc2luKHNjaGVtYXRpY19maWxlLmNfc3RyKCkpOzxicj4KJm5ic3A7IHN0ZDo6aWZzdHJlYW0gbGluKGxheW91dF9maWxlLmNfc3RyKCkpOzxicj4KPGJyPgombmJzcDsgc3RkOjp2ZWN0b3ImbHQ7bGF5b3V0X3JlY3RhbmdsZSZndDsgcmVjdHM7PGJyPgombmJzcDsgc3RkOjp2ZWN0b3ImbHQ7bGF5b3V0X3BpbiZndDsgcGluczs8YnI+CiZuYnNwOyBwYXJzZV9sYXlvdXQocmVjdHMsIHBpbnMsIGxpbik7PGJyPgo8YnI+CiZuYnNwOyBzY2hlbWF0aWNfZGF0YWJhc2UgcmVmZXJlbmNlX3NjaGVtYXRpYzs8YnI+CiZuYnNwOyBwYXJzZV9zY2hlbWF0aWNfZGF0YWJhc2UocmVmZXJlbmNlX3NjaGVtYXRpYywgc2luKTs8YnI+Cjxicj4KJm5ic3A7IGxheW91dF9kYXRhYmFzZSBsYXlvdXQ7PGJyPgombmJzcDsgcG9wdWxhdGVfbGF5b3V0X2RhdGFiYXNlKGxheW91dCwgcmVjdHMpOzxicj4KPGJyPgombmJzcDsgY29ubmVjdGl2aXR5X2RhdGFiYXNlIGNvbm5lY3Rpdml0eTs8YnI+CiZuYnNwOyBwb3B1bGF0ZV9jb25uZWN0aXZpdHlfZGF0YWJhc2UoY29ubmVjdGl2aXR5LCBwaW5zLCBsYXlvdXQpOzxicj4KPGJyPgombmJzcDsgc2NoZW1hdGljX2RhdGFiYXNlIHNjaGVtYXRpYzs8YnI+CiZuYnNwOyBzdGQ6OnZlY3RvciZsdDtkZXZpY2UmZ3Q7JmFtcDsgZGV2aWNlcyA9IHNjaGVtYXRpYy5kZXZpY2VzOzxicj4KJm5ic3A7IGZvcihzdGQ6OnNpemVfdCBpID0gMDsgaSAmbHQ7IHBpbnMuc2l6ZSgpOyArK2kpIHs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyBkZXZpY2VzLnB1c2hfYmFjayhkZXZpY2UoKSk7PGJyPgombmJzcDsmbmJzcDsmbmJzcDsgZGV2aWNlcy5iYWNrKCkudHlwZSA9ICZxdW90O1BJTiZxdW90Ozs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyBkZXZpY2VzLmJhY2soKS50ZXJtaW5hbHMucHVzaF9iYWNrKHBpbnNbaV0ubmV0KTs8YnI+CiZuYnNwOyB9PGJyPgombmJzcDsgZXh0cmFjdF9kZXZpY2VzKGRldmljZXMsIGNvbm5lY3Rpdml0eSwgbGF5b3V0KTs8YnI+CiZuYnNwOyBleHRyYWN0X25ldGxpc3Qoc2NoZW1hdGljLm5ldHMsIGRldmljZXMpOzxicj4KJm5ic3A7IHJldHVybiBjb21wYXJlX3NjaGVtYXRpY3MocmVmZXJlbmNlX3NjaGVtYXRpYywgc2NoZW1hdGljKTs8YnI+Cn08L2ZvbnQ+PC9wPgo8cD48Zm9udCBmYWNlPSJDb3VyaWVyIE5ldyIgc2l6ZT0iMiI+aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7PGJyPgombmJzcDsgaWYoYXJnYyAmbHQ7IDMpIHs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyBzdGQ6OmNvdXQgJmx0OyZsdDsgJnF1b3Q7dXNhZ2U6ICZxdW90OyAmbHQ7Jmx0OyBhcmd2WzBdICZsdDsmbHQ7ICZxdW90OyAmbHQ7bGF5b3V0X2ZpbGUmZ3Q7ICZsdDtzY2hlbWF0aWNfZmlsZSZndDsmcXVvdDsgCiZsdDsmbHQ7IHN0ZDo6ZW5kbDs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyByZXR1cm4gLTE7PGJyPgombmJzcDsgfTxicj4KJm5ic3A7IGJvb2wgcmVzdWx0ID0gY29tcGFyZV9maWxlcyhhcmd2WzFdLCBhcmd2WzJdKTs8YnI+CiZuYnNwOyBpZihyZXN1bHQgPT0gZmFsc2UpIHs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyBzdGQ6OmNvdXQgJmx0OyZsdDsgJnF1b3Q7TGF5b3V0IGRvZXMgbm90IG1hdGNoIHNjaGVtYXRpYy4mcXVvdDsgJmx0OyZsdDsgc3RkOjplbmRsOzxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IHJldHVybiAxOzxicj4KJm5ic3A7IH0gPGJyPgombmJzcDsgc3RkOjpjb3V0ICZsdDsmbHQ7ICZxdW90O0xheW91dCBkb2VzIG1hdGNoIHNjaGVtYXRpYy4mcXVvdDsgJmx0OyZsdDsgc3RkOjplbmRsOzxicj4KJm5ic3A7IHJldHVybiAwOzxicj4KfTxicj4KPGJyPgo8L2ZvbnQ+V2UgdGVzdCB0aGUgcHJvZ3JhbSB3aXRoIHR3byBzY2hlbWF0aWNzIGFuZCB0aHJlZSBsYXlvdXRzLiZuYnNwOyBUaGVzZSAKaW5jbHVkZSBhIG5hbmQgYW5kIGEgbm9yIGdhdGUgbGF5b3V0IGFuZCBzY2hlbWF0aWMgYXMgd2VsbCBhcyBhbiBpbmNvcnJlY3QgbmFuZCAKZ2F0ZSBsYXlvdXQuJm5ic3A7IFRoZSBuYW5kIGxheW91dCBhbmQgc2NoZW1hdGljIGFyZSB0aGUgc2FtZSBhcyBzaG93biBhYm92ZS48Zm9udCBmYWNlPSJDb3VyaWVyIE5ldyIgc2l6ZT0iMiI+CjwvZm9udD48L3A+CjxwPjxmb250IGZhY2U9IkNvdXJpZXIgTmV3IiBzaXplPSIyIj4mZ3Q7IGx2czxicj4KdXNhZ2U6IGx2cyAmbHQ7bGF5b3V0X2ZpbGUmZ3Q7ICZsdDtzY2hlbWF0aWNfZmlsZSZndDs8YnI+CiZndDsgbHZzIG5hbmQubGF5b3V0IG5hbmQuc2NoZW1hdGljIDxicj4KTGF5b3V0IGRvZXMgbWF0Y2ggc2NoZW1hdGljLjxicj4KJmd0OyBsdnMgbmFuZF9zaG9ydC5sYXlvdXQgbmFuZC5zY2hlbWF0aWMgPGJyPgpMYXlvdXQgZG9lcyBub3QgbWF0Y2ggc2NoZW1hdGljLjxicj4KJmd0OyBsdnMgbmFuZC5sYXlvdXQgbm9yLnNjaGVtYXRpYyA8YnI+CkxheW91dCBkb2VzIG5vdCBtYXRjaCBzY2hlbWF0aWMuPGJyPgomZ3Q7IGx2cyBub3IubGF5b3V0IG5vci5zY2hlbWF0aWMgPGJyPgpMYXlvdXQgZG9lcyBtYXRjaCBzY2hlbWF0aWMuPGJyPgomZ3Q7IGx2cyBub3IubGF5b3V0IG5hbmQuc2NoZW1hdGljIDxicj4KTGF5b3V0IGRvZXMgbm90IG1hdGNoIHNjaGVtYXRpYy48L2ZvbnQ+PC9wPgo8cD5UaGlzIGNvbmNsdWRlcyBvdXIgdHV0b3JpYWwgb24gaG93IHRvIGJ1aWxkIGEgc2ltcGxlIGxheW91dCB0byBzY2hlbWF0aWMgCnZlcmlmaWNhdGlvbiBhcHBsaWNhdGlvbiBiYXNlZCBvbiBCb29zdC5Qb2x5Z29uIGxpYnJhcnkgY2FwYWJpbGl0aWVzLiZuYnNwOyBUaGUgCmltcGxlbWVudGF0aW9uIG9mIHRoaXMgYXBwbGljYXRpb24gbWFkZSBtYW55IHNpbXBsaWZ5aW5nIGFzc3VtcHRpb25zIHRoYXQgYXJlIApub3QgdmFsaWQgaW4gdGhlIHJlYWwgd29ybGQgYW5kIGhhcmQgY29kZWQgYSBsb3Qgb2YgdGhpbmdzIHRoYXQgbmVlZCB0byBiZSAKY29uZmlndXJhYmxlIGluIGEgcmVhbCBsYXlvdXQgdmVyaWZpY2F0aW9uIGFwcGxpY2F0aW9uLiZuYnNwOyBIb3dldmVyLCBpdCBkb2VzIApnaXZlIGFuIGlkZWEgb2YgaG93IHRvIHVzZSBCb29zdC5Qb2x5Z29uIHRvIHNvbHZlIHJlYWwgcHJvYmxlbXMgYW5kIHBvaW50cyBpbiAKdGhlIGRpcmVjdGlvbiBvZiBob3cgYSByZWFsIGFwcGxpY2F0aW9uIG1pZ2h0IHVzZSBCb29zdC5Qb2x5Z29uLjwvcD4KCgo8dGFibGUgY2xhc3M9ImRvY2luZm8iIHJ1bGVzPSJub25lIiBmcmFtZT0idm9pZCIgaWQ9InRhYmxlMSI+Cgk8Y29sZ3JvdXA+CgkJPGNvbCBjbGFzcz0iZG9jaW5mby1uYW1lIj48Y29sIGNsYXNzPSJkb2NpbmZvLWNvbnRlbnQiPgoJPC9jb2xncm91cD4KCTx0Ym9keSB2QWxpZ249InRvcCI+CgkJPHRyPgoJCQk8dGggY2xhc3M9ImRvY2luZm8tbmFtZSI+Q29weXJpZ2h0OjwvdGg+CgkJCTx0ZD5Db3B5cmlnaHQgqSBJbnRlbCBDb3Jwb3JhdGlvbiAyMDA4LTIwMTAuPC90ZD4KCQk8L3RyPgoJCTx0ciBjbGFzcz0iZmllbGQiPgoJCQk8dGggY2xhc3M9ImRvY2luZm8tbmFtZSI+TGljZW5zZTo8L3RoPgoJCQk8dGQgY2xhc3M9ImZpZWxkLWJvZHkiPkRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCAKCQkJVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgPHR0IGNsYXNzPSJsaXRlcmFsIj4KCQkJPHNwYW4gY2xhc3M9InByZSI+TElDRU5TRV8xXzAudHh0PC9zcGFuPjwvdHQ+IG9yIGNvcHkgYXQKCQkJPGEgY2xhc3M9InJlZmVyZW5jZSIgdGFyZ2V0PSJfdG9wIiBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQiPgoJCQlodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQ8L2E+KTwvdGQ+CgkJPC90cj4KPC90YWJsZT4KCjwvYm9keT4KCjwvaHRtbD4=