PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIHNpbmNlIFUtQm9vdCAxLjEuNDoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBTb21lIGNvZGUgY2xlYW51cAoKKiBGaXggZGJhdTF4MDAgYm9hcmRzIGJyb2tlbiBieSBkYmF1MTU1MCBwYXRjaAogIFBMTDpzIHdlcmUgbm90IHNldCBmb3IgYm9hcmRzIG90aGVyIHRoYW4gMTU1MC4KICBGbGFzaCBDRkkgY2F1c2VkIGNhcmQgdG8gaGFuZyBkdWUgdG8gdW5kZWZpbmVkIENGR19GTEFTSF9CQU5LU19MSVNULgogIERlZmF1bHQgYm9vdCBpcyBub3cgYm9vdHAgZm9yIGNhcmRzIG90aGVyIHRoYW4gMTU1MC4KICBQYXRjaCBieSBUaG9tYXMgTGFuZ2UsIDEwIEF1ZyAyMDA1CgoqIEZpeGVzIGNvbW1vbi9jbWRfZmxhc2guYzoKICAtIGZpeCBzb21lIGNvbXBpbGVyL3BhcnNlciBlcnJvciwgaWYgdXNpbmcgbTY4ayB0b29sIGNoYWluCiAgLSBvcHRpY2FsIGZpeCBmb3IgcHJvdGVjdCBvbi9vZmYgYWxsIG1lc3NhZ2VzLCBpZiB1c2luZyBtb3JlCiAgICB0aGVuIG9uZSBiYW5rCiAgUGF0Y2ggYnkgSmVucyBTY2hhcnNpZywgMjggSnVsIDIwMDUKCiogRml4IFF1YWQgVUFSVCBtYXBwaW5nIG9uIE1DQzIwMCBib2FyZCBkdWUgdG8gbmV3IEhXIHJldmlzaW9uCgoqIEZpeCBKRkZTMiBzdXBwb3J0IGZvciBsZWdhY3kgTkFORCBkcml2ZXIuCgoqIFJlbW92ZSBkZXBlbmRlbmNpZXMgYmV0d2VlbiBEb0MgY29kZSBhbmQgb2xkIGxlZ2FjeSBOQU5EIGRyaXZlci4KCiogRml4IFBNODI4X1BDSSB0YXJnZXQsIGZvciB3aGljaCBQQ0kgd2FzICpub3QqIGNvbmZpZ3VyZWQgaW4uCgoqIEZpeCBMaXRlNTIwMEIgc3VwcG9ydDogaW5pdGlhbGl6ZSBTRGVsYXkgcmVnaXN0ZXIKICBTZWUgRnJlZXNjYWxlJ3MgQU4zMjIxICJNUEM1MjAwQiBTRFJBTSBJbml0aWFsaXphdGlvbiBhbmQKICBDb25maWd1cmF0aW9uIiwgMy4zLjEgU0RlbGF5LS1NQkFSICsgMHgwMTkwCgoqIENoYW5nZXMvZml4ZXMgZm9yIGRyaXZlcnMvY2ZpX2ZsYXNoLmM6CgogIC0gQWRkIEludGVsIGxlZ2FjeSBsb2NrL3VubG9jayBzdXBwb3J0IHRvIGNvbW1vbiBDRkkgZHJpdmVyCgogICAgT24gc29tZSBJbnRlbCBmbGFzaCdzIChlLmcuIEludGVsIEozKSBsZWdhY3kgdW5sb2NraW5nIGlzCiAgICBzdXBwb3J0ZWQsIG1lYW5pbmcgdGhhdCB1bmxvY2tpbmcgb2Ygb25lIHNlY3RvciB3aWxsIHVubG9jawogICAgYWxsIHNlY3RvcnMgb2YgdGhpcyBiYW5rLiBVc2luZyB0aGlzIGZlYXR1cmUsIHVubG9ja2luZwogICAgb2YgYWxsIHNlY3RvcnMgdXBvbiBzdGFydHVwICh2aWEgZW52IHZhciAidW5sb2NrPXllcyIpIHdpbGwKICAgIGdldCBtdWNoIGZhc3Rlci4KCiAgLSBGaXhlZCBwcm9ibGVtIHdpdGggbXVsdGlwbGUgcmVhZHMgb2YgZW52cm9ubWVudCB2YXJpYWJsZQogICAgInVubG9jayIgYXMgcG9pbnRlZCBvdXQgYnkgUmVpbmhhcmQgQXJsdCAmIEFuZGVycyBMYXJzZW4uCgogIC0gUmVtb3ZlZCB1bndhbnRlZCBsaW5lZmVlZHMgZnJvbSAicHJvdGVjdCIgY29tbWFuZCB3aGVuCiAgICBDRkdfRkxBU0hfUFJPVEVDVElPTiBpcyBlbmFibGVkLgoKICAtIENoYW5nZWQgcDNwNDAwIGJvYXJkIHRvIHVzZSBDRkdfRkxBU0hfUFJPVEVDVElPTgoKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDAxIEFwciAyMDA2CgoqIENoYW5nZXMvZml4ZXMgZm9yIGRyaXZlcnMvY2ZpX2ZsYXNoLmM6CiAgLSBDb3JyZWN0bHkgaGFuZGxlIHRoZSBjYXNlcyB3aGVyZSBDRkdfSFogIT0gMTAwMCAoc2V2ZXJhbAogICAgWFNjYWxlLWJhc2VkIGJvYXJkcykKICAtIEZpeCB0aGUgdGltZW91dCBjYWxjdWxhdGlvbiBvZiBidWZmZXJlZCB3cml0ZXMgKG9mZiBieSBhCiAgICBmYWN0b3Igb2YgMTAwMCkKICBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAzMSBNYXIgMjAwNgoKKiBVcGRhdGVzIHRvIGNvbW1vbiBQUEM0eHggb25ib2FyZCAoRERSKVNEUkFNIGluaXQgY29kZSAoNDA1IGFuZCA0NDApCgogIDQwNSBTRFJBTTogLSBUaGUgU0RSQU0gcGFyYW1ldGVycyBjYW4gbm93IGJlIGRlZmluZWQgaW4gdGhlIGJvYXJkCgkgICAgICAgY29uZmlnIGZpbGUgYW5kIHRoZSA0MDUgU0RSQU0gY29udHJvbGxlciB2YWx1ZXMgd2lsbAoJICAgICAgIGJlIGNhbGN1bGF0ZWQgdXBvbiBib290dXAgKHNlZSBQUENoYW1lbGVvbkVWQikuCgkgICAgICAgV2hlbiB0aG9zZSBzZXR0aW5ncyBhcmUgbm90IGRlZmluZWQgaW4gdGhlIGJvYXJkCgkgICAgICAgY29uZmlnIGZpbGUsIHRoZSByZWdpc3RlciBzZXR1cCB3aWxsIGJlIGFzIGl0IGlzIG5vdywKCSAgICAgICBzbyB0aGlzIGltcGxlbWVudGF0aW9uIHNob3VsZCBub3QgYnJlYWsgYW55IGN1cnJlbnQKCSAgICAgICBkZXNpZ24gdXNpbmcgdGhpcyBjb2RlLgoKCSAgICAgICBUaGFua3MgdG8gQW5kcmVhIE1hcnNvbiBmcm9tIERBVkUgZm9yIHRoaXMgcGF0Y2guCgogIDQ0MCBERFI6ICAgLSBBZGRlZCBmdW5jdGlvbiBzZHJhbV90cjFfc2V0IHRvIGF1dG8gY2FsY3VsYXRlIHRoZQoJICAgICAgIFRSMSB2YWx1ZSBmb3IgdGhlIEREUi4KCSAgICAgLSBBZGRlZCBFQ0Mgc3VwcG9ydCAoc2VlIHAzcDQ0MCkuCgogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTcgTWFyIDIwMDYKCiogRml4IENPTkZJR19TS0lQX0xPV0xFVkVMX0lOSVQgZGVwZW5kZW5jeSBpbiBjcHUvYXJtOTIwdC9zdGFydC5TCiAgUGF0Y2ggYnkgUGV0ZXIgTWVuemViYWNoLCAxMyBPY3QgMjAwNSBbRE5YIzIwMDYwNDAxNDIwMDA0NzNdCgoqIEFkZCBzdXBwb3J0IGZvciB5bW9kZW0gcHJvdG9jb2wgZG93bmxvYWQKICBQYXRjaCBieSBTdGVmYW5vIEJhYmljLCAyOSBNYXIgMjAwNgoKKiBNZW1vcnkgTWFwIFVwZGF0ZSBmb3IgRGVsdGEgYm9hcmQ6IFUtQm9vdCBpcyBhdCAweDgwMDAwMDAwLTB4ODQwMDAwMDAKICBNZXJnZSBmcm9tIE1hcmt1cyBLbG90emL8Y2hlcidzIHJlcG8sIDAxIEFwciAyMDA2CgoqIEdDQy00LnggZml4ZXM6IGNsZWFuIHVwIGdsb2JhbCBkYXRhIHBvaW50ZXIgaW5pdGlhbGl6YXRpb24gZm9yIGFsbAogIGJvYXJkcwoKKiBVcGRhdGUgZm9yIERlbHRhIGJvYXJkOgogIC0gcmVkdW5kYW50IE5BTkQgZW52aXJvbm1lbnQKICAtIG1pc2MgTW9uYWhhbnMgY2xlYW51cHMgKHJlbW92ZSBkZWFkIGNvZGUgZXRjLikKICAtIERBOTAzMCBJbml0aWFsaXphdGlvbjsgc29tZSBtaW5pbWFsIGNoYW5nZXMgdG8gUFhBIEkyQyBkcml2ZXIgdG8KICAgIG1ha2UgaXQgd29yayB3aXRoIHRoZSBNb25haGFucy4KICAtIE1ha2UgTW9uYWhhbnMgY2xvY2sgZnJlcXVlbmN5IGNvbmZpZ3VyYWJsZSB1c2luZwogICAgQ0ZHX01PTkFIQU5TX1JVTl9NT0RFX09TQ19SQVRJTyBhbmQKICAgIENGR19NT05BSEFOU19UVVJCT19SVU5fTU9ERV9SQVRJTy4KICBNZXJnZSBmcm9tIE1hcmt1cyBLbG90emL8Y2hlcidzIHJlcG8sIDI1IE1hciAyMDA2CgoqIEVuYWJsZSBRdWFkIFVBUlQgb20gTUNDMjAwIGJvYXJkLgoKKiBDbGVhbnVwIE1DQzIwMCBib2FyZCBjb25maWd1cmF0aW9uOyBvbWl0IG5vbi1leGlzdGVudCBzdHVmZi4KCiogQWRkIHN1cHBvcnQgZm9yIE1QQzg1OS84NjYgUmV2LiBBLjAKCiogQWRkIGNvbW1hbmQgZm9yIGhhbmRsaW5nIEREUiBFQ0MgcmVnaXN0ZXJzIG9uIE1QQzgzNDlFRSBNRFMgYm9hcmQuCgoqIEZpeCBERFIgRUNDIGJpdCBkZWZpbml0aW9ucyBmb3IgTVBDODN4eC4KCiogQWRkIGluaXRpYWwgc3VwcG9ydCBmb3IgTVBDODM0OUUgTURTIGJvYXJkLgoKKiBBZGQgc3VwcG9ydCBmb3IgRUNDIEREUiBpbml0aWFsaXphdGlvbiBvbiBNUEM4M3h4LgoKKiBBZGQgRE1BIHN1cHBvcnQgZm9yIE1QQzgzeHguCgoqIEFkZCBzeW5jIGluIGRvX3Jlc2V0KCkgcm91dGluZSBmb3IgTVBDODN4eCBhZnRlciBSUFIgcmVnaXN0ZXIKICB3YXMgd3JpdHRlbiB0by4gSXQgaXMgbmVlZCBvbiBzb21lIHRhcmdldHMgd2hlbiBCQVQgdHJhbnNsYXRpb24KICBpcyBlbmFibGVkLgoKKiBBZGQgYml0IGRlZmluaXRpb25zIGZvciBNUEM4M3h4IEREUiBjb250cm9sbGVyIHJlZ2lzdGVycy4KCiogQWRkIERjYnooKSwgRGNiaSgpIGFuZCBEY2JmKCkgcm91dGluZXMgZm9yIE1QQzgzeHguCgoqIENvcnJlY3Qgc2hpZnQgb2Zmc2V0cyBpbiBpY2FjaGVfc3RhdHVzIGFuZCBkY2FjaGVfc3RhdHVzIGZvciBNUEM4M3h4LgoKKiBBZGQgc3VwcG9ydCBmb3IgRFMxMzc0IFJUQyBjaGlwLgoKKiBBZGQgc3VwcG9ydCBmb3IgTGl0ZTUyMDBCIGJvYXJkLgogIFBhdGNoIGJ5ICBQYXRjaCBieSBKb3NlIE1hcmlhIChUeGVtYSkgTG9wZXosIDE2IEphbiAyMDA2CgoqIEFwcGx5IFNvQyBjb25jZXB0IHRvIGFybTkyNmVqcyBDUFVzLCBpLmUuIG1vdmUgdGhlIFNvQyBzcGVjaWZpYwogIHRpbWVyIGFuZCBjcHVfcmVzZXQgY29kZSBmcm9tIGNwdS8kKENQVSkgaW50byB0aGUgbmV3CiAgY3B1LyQoQ1BVKS8kKFNPQykgZGlyZWN0b3JpZXMKICBQYXRjaCBieSBBbmRyZWFzIEVuZ2VsLCAxMyBNYXIgMjAwNgoKKiBDaGFuZ2UgbWF4IHNpemUgb2YgdW5jb21wcmVzc2VkIHVJbWFnZSdzIHRvIDhNQnl0ZSBhbmQgYWRkCiAgQ0ZHX0JPT1RNX0xFTiB0byBhZGp1c3QgdGhpcyBzZXR0aW5nLgoKICBBcyBtZW50aW9uZWQgYnkgUm9iaW4gR2V0eiBvbiAyMDA1LTA1LTI0IHRoZSBzaXplIG9mIHVuY29tcHJlc3NlZAogIHVJbWFnZXMgd2FzIHJlc3RyaWN0ZWQgdG8gNE1CeXRlcy4gVGhpcyBkZWZhdWx0IHNpemUgaXMgbm93CiAgaW5jcmVhc2VkIHRvIDhNYnl0ZXMgYW5kIGNhbiBiZSBvdmVycmlkZWQgYnkgc2V0dGluZyBDRkdfQk9PVE1fTEVOCiAgaW4gdGhlIGJvYXJkIGNvbmZpZyBmaWxlLgoKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEzIE1hciAyMDA2CgoqIEZpeCBwcm9ibGVtIHdpdGggdXBkYXRlZCBQQ0kgY29kZSBpbiBjcHUvcHBjNHh4LzQwNWdwX3BjaS5jCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMyBNYXIgMjAwNgoKKiBjcHUvcHBjNHh4L3N0YXJ0LlMgOiBleGNlcHRpb25zIGFyZSBlbmFibGVkIGFmdGVyIHJlbG9jYXRpb24KICBQYXRjaCBieSBDZWRyaWMgVmluY2VudCwgMDYgSnVsIDIwMDUKCiogYXUxeDAwX2V0aC5jOiBjaGVjayBtYWxsb2MgcmV0dXJuIHZhbHVlIGFuZCBhYm9ydCBpZiBpdCBmYWlsZWQKICBQYXRjaCBieSBBbmRyZXcgRHllciwgMjYgSnVsIDIwMDUKCiogQ2hhbmdlIHRoZSBzZXF1ZW5jZSBvZiBldmVudHMgaW4gc29mdF9pMmMuYzpzZW5kX2FjaygpIHRvIGtlZXAgZnJvbQogIGluY29ycmVjdGx5IGdlbmVyYXRpbmcgc3RhcnQvc3RvcCBjb25kaXRpb25zIG9uIHRoZSBidXMuCiAgUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIDI2IEp1bCAyMDA1CgoqIEZpeCBidWcgaW4gW2lkXWNhY2hlX3N0YXR1cyBjb21tYW5kcyBmb3IgTVBDODV4eCBwcm9jZXNzb3JzOwogIHNob3VsZCBsb29rIGF0IExTQiBvZiBMMUNTUm4gcmVnaXN0ZXJzIHRvIGRldGVybWluZSBpZiBMMSBjYWNoZSBpcwogIGVuYWJsZWQsIG5vdCB0aGUgTVNCLgogIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDE5IEp1bCAyMDA1CgoqIEZpeCBhcnJheSBvdmVyZmxvdyB3aXRoIGZ3X3NldGVudiBvbiB1bmluaXRpYWxpc2VkIGVudmlyb25tZW50CiAgUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMTUgSnVsIDIwMDUKCiogQWRkIHN1cHBvcnQgZm9yIEVtYmVkZGVkUGxhbmV0IEVQODh4IGJvYXJkcwogIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDEzIEp1bCAyMDA1CgoqIFJlbW92ZSBib2FyZCBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGluY2x1ZGVzIGZyb20gdGhlIGNvbW1vbiB4aWxpbngKICBldGhlcm5ldCBhbmQgaWljIGFkYXB0ZXIgY29kZS4KICBQYXRjaCBieSBNaWNoYWVsIExpYmVza2luZCwgMTIgSnVsIDIwMDUKCiogQWRkIE5hdCBTZW1pIERQODM4NjUgUEhZIHN1cHBvcnQgdG8gTVBDODV4eCBUU0VDIGRyaXZlcgogIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDA4IEp1bCAyMDA1CgoqIEFkZCAoc29tZSkgZGVmaW5pdGlvbnMgZm9yIHRoZSBNUEM4NXh4IGxvY2FsIGJ1cyBjb250cm9sbGVyCiAgUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMDggSnVsIDIwMDUKCiogQWRkIENQTTIgSS9PIHBpbiBmdW5jdGlvbnMgZm9yIE1QQzg1eHggcHJvY2Vzc29ycwogIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDA4IEp1bCAyMDA1CgoqIEZpeCBjb21waWxlIHByb2JsZW0KCiogQWRkZWQgUENJIHN1cHBvcnQgZm9yIE1QQzgzNDlBRFMgYm9hcmQKICBQYXRjaCBieSBLdW1hciBHYWxhIDExIEphbiAyMDA2CgoqIEVuYWJsZSBhZGRyZXNzIHRyYW5zbGF0aW9uIG9uIE1QQzgzeHgKICBQYXRjaCBieSBLdW1hciBHYWxhLCAxMCBGZWIgMjAwNgoKKiBEZWNvcHVsZWQgc2V0dGluZyBvZiBPUi9CUiBhbmQgTEJMQVdCQVIvTEJMQVdBUiBvbiBNUEM4M3h4CiAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMjUgSmFuIDIwMDYKCiogRml4ZWQgZGVmaW5lcyBmb3IgTVBDODN4eCBTSUNSTCByZWdpc3RlciB0byBtYXRjaCBjdXJyZW50IHNwZWNzCiAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMjMgSmFuIDIwMDYKCiogT25seSBkaXNhYmxlIHRoZSBNUEM4M3h4IHdhdGNoZG9nIGlmIGl0cyBlbmFibGVkIG91dCBvZiByZXNldC4KICBJZiBpdHMgZGlzYWJsZWQgb3V0IG9mIHJlc2V0IFNXIGNhbiBsYXRlciBlbmFibGUgaXQgaWYgc28gZGVzaXJlZAogIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDExIEphbiAyMDA2CgoqIEFsbG93IGNvbmZpZyBvZiBHUElPIGRpcmVjdGlvbiAmIGRhdGEgcmVnaXN0ZXJzIGF0IGJvb3Qgb24gODN4eAogIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDExIEphbiAyMDA2CgoqIEVuYWJsZSB0aW1lIGhhbmRsaW5nIG9uIDgzeHgKICBQYXRjaCBieSBLdW1hciBHYWxhLCAxMSBKYW4gMjAwNgoKKiBNYWtlIFN5c3RlbSBJTyBDb25maWcgUmVnaXN0ZXJzIGJvYXJkIGNvbmZpZ3VyYWJsZSBvbiBNUEM4M3h4CiAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMTEgSmFuIDIwMDYKCiogRml4ZWQgUENJIGluZGlyZWN0IGNvbmZpZyBvcHMgdG8gaGFuZGxlIG11bHRpcGxlIFBDSSBjb250cm9sbGVycwogIFdlIG5lZWQgdG8gYWRqdXN0IHRoZSBidXMgbnVtYmVyIHdlIGFyZSB0cnlpbmcgdG8gYWNjZXNzIGJhc2VkCiAgb24gd2hpY2ggUENJIGNvbnRyb2xsZXIgaXRzIG9uCiAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMTIgSmFuIDIwMDYKCiogUmVwb3J0IGJhY2sgUENJIGJ1cyB3aGVuIGRvaW5nIHRhYmxlIGJhc2VkIGRldmljZSBjb25maWcKICBQYXRjaCBieSBLdW1hciBHYWxhLCAxMSBKYW4gMjAwNgoKKiBBZGRlZCBzdXBwb3J0IGZvciBQQ0kgcHJlZmV0Y2hhYmxlIHJlZ2lvbiBhbmQgQkFScwogIElmIGEgaG9zdCBjb250cm9sbGVyIHNldHMgdXAgYSByZWdpb24gYXMgcHJlZmV0Y2hhYmxlIGFuZAogIGEgZGV2aWNlJ3MgQkFSIGRlbm90ZXMgaXQgYXMgcHJlZmV0Y2hhYmxlLCBhbGxvY2F0ZSB0aGUKICBCQVIgaW50byB0aGUgcHJlZmV0Y2ggcmVnaW9uLgoKICBJZiBhIEJBUiBpcyBwcmVmZXRjaGFibGUgYW5kIG5vIHByZWZldGNoYWJsZSByZWdpb24gaGFzCiAgYmVlbiBzZXR1cCBieSB0aGUgY29udHJvbGxlciB3ZSBmYWxsIGJhY2sgdG8gYWxsb2NhdGluZwogIHRoZSBCQVIgaW50byB0aGUgbm9ybWFsbHkgbWVtb3J5IHJlZ2lvbi4KICBQYXRjaCBieSBLdW1hciBHYWxhLCAxMSBKYW4gMjAwNgoKKiBBZGQgaGVscGVyIGZ1bmN0aW9uIGZvciBnZW5lcmljIGZsYXQgZGV2aWNlIHRyZWUgZml4dXBzIGZvciBtcGM4M3h4CiAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMTEgSmFuIDIwMDYKCiogQWRkIHN1cHBvcnQgZm9yIHBhc3NpbmcgaW5pdHJkIGluZm9ybWF0aW9uIHZpYSBmbGF0IGRldmljZSB0cmVlCiAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMTEgSmFuIDIwMDYKCiogQWRkZWQgT0ZfU1RET1VUX1BBVEggYW5kIE9GX1NPQwoKICBPRl9TVERPVVRfUEFUSCBzcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIGRldmljZSB0aGUga2VybmVsIGNhbiB1c2UKICBmb3IgY29uc29sZSBvdXRwdXQKCiAgT0ZfU09DIHNwZWNpZmllcyB0aGUgcHJvcGVyIG5hbWUgb2YgdGhlIFNPQyBub2RlIGlmIG9uZSBleGlzdHMuCiAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMTEgSmFuIDIwMDYKCiogQWxsb3cgYm9hcmQgY29kZSB0byBmaXh1cCB0aGUgZmxhdCBkZXZpY2UgdHJlZSBiZWZvcmUgYm9vdGluZyBhIGtlcm5lbAogIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDExIEphbiAyMDA2CgoqIEFkZGVkIENPTkZJR18gb3B0aW9ucyBmb3IgYmRfdCBhbmQgZW52IGluIGZsYXQgZGV2IHRyZWUKCglDT05GSUdfT0ZfSEFTX0JEX1Qgd2lsbCBwdXQgYSBjb3B5IG9mIHRoZSBiZF90CglpbnRvIHRoZSByZXN1bHRpbmcgZmxhdCBkZXZpY2UgdHJlZS4KCglDT05GSUdfT0ZfSEFTX1VCT09UX0VOViB3aWxsIGNvcHkgdGhlIGVudmlyb25tZW50Cgl2YXJpYWJsZXMgZnJvbSB1LWJvb3QgaW50byB0aGUgZmxhdCBkZXZpY2UgdHJlZQoKICBQYXRjaCBieSBLdW1hciBHYWxhLCAxMSBKYW4gMjAwNgoKKiBBZGQgc3VwcG9ydCBmb3IgdGhlIERIQ1AgdmVuZG9yIG9wdGlvbmFsIGJvb3RmaWxlICgjNjcpLgogIElnbm9yZXMgdGhlIHZlbmRvciBURlRQIHNlcnZlciBuYW1lIG9wdGlvbiAoIzY2KS4KICBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAzMCBKdW4gMjAwNQoKKiBGaXggYSBIVyB0aW1pbmcgaXNzdWUgb24gODU0OCBDRFMgZm9yIGVUU0VDIDMgaW4gUkdNSUkgbW9kZQogIFBhdGNoIGJ5IEFuZHkgRmxlbWluZywgMTQgSnVuIDIwMDUKCiogRml4IGJhZCByZWdpc3RlciBkZWZpbml0aW9ucyBmb3IgTFRYOTcxIFBIWSBvbiBNUEM4NXh4IGJvYXJkcy4KICBQYXRjaCBieSBHZXJoYXJkIEphZWdlciwgMjEgSnVuIDIwMDUKCiogQWRkIG5ldGNvbnNvbGUgYW5kIHNvbWUgbW9yZSBjb21tYW5kcyB0byBSUFhsaXRlX0RXIGJvYXJkCiAgUGF0Y2ggYnkgU2FtIFNvbmcsIDE5IEp1biAyMDA1CgoqIEZpeCBiYWQgZGVjbGFyYXRpb24gb24gcGNpX2NmZ2Z1bmNfbm90aGluZwogIFBhdGNoIGJ5IFNhbSBTb25nLCAxOSBKdW4gMjAwNQoKKiBBZGp1c3QgImVjaG8iIGFzIGEgZGVmYXVsdCBjb21tYW5kCiAgUGF0Y2ggYnkgU2FtIFNvbmcsIDE5IEp1biAyMDA1CgoqIEZpeCBQQ0lERiBjYWxjdWxhdGlvbiBpbiBjcHUvbXBjODI2MC9zcGVlZC5jIGZvciBNUEM4MjgwRUMKICBQYXRjaCBieSBLb2tIb3cgVGVoLCAxNiBKdW4gMjAwNQoKKiBBZGQgY3JjIG9mIGRhdGEgdG8gamZmczIgKGluIGpmZnMyXzFwYXNzX2J1aWxkX2xpc3RzKCkpLgogIFBhdGNoIGJ5IFJpY2sgQnJvbnNvbiwgMTUgSnVuIDIwMDUKCiogQ29kaW5nIFN0eWxlIGNsZWFudXAKCiogQXZvaWQgZGVyZWZlcmVuY2luZyBOVUxMIGluIGZpbmRfY21kKCkgaWYgbm8gdmFsaWQgY29tbWFuZHMgd2VyZSBmb3VuZAogIFBhdGNoIGJ5IEFuZHJldyBEeWVyLCAxMyBKdW4gMjAwNQoKKiBBZGQgQURJIEJsYWNrZmluIHN1cHBvcnQKICAtIGFkZCBzdXBwb3J0IGZvciBBbmFsb2cgRGV2aWNlcyBCbGFja2ZpbiBCRjUzMyBDUFUKICAtIGFkZCBzdXBwb3J0IGZvciB0aGUgQURJIEJGNTMzIFN0YW1wIHVDbGludXggYm9hcmQKICAtIGFkZCBzdXBwb3J0IGZvciB0aGUgQURJIEJGNTMzIEVaS2l0IGJvYXJkCiAgUGF0Y2hlcyBieSBSaWNoYXJkIEtsaW5nbGVyLCAxMSBKdW4gMjAwNQoKKiBBZGQgbG9hZHMgb2YgbnRvaGwoKSBpbiBpbWFnZSBoZWFkZXIgaGFuZGxpbmcKICBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxMCBKdW4gMjAwNQoKKiBTd2l0Y2ggTVBDODZ4QURTIGFuZCBNUEM4ODVBRFMgYm9hcmRzIHRvIHVzZSBjcHVjbGsgZW52aXJvbm1lbnQKICB2YXJpYWJsZSB0byBzZXQgY2xvY2sKICBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAwNSBKdW4gMjAwNQoKKiBSUFhsaXRlIGNvbmZpZ3VyYXRpb24gZml4ZXMKICAtIFVzZSBjb3JyZWN0IGZsYXNoIHNlY3RvciBzaXplCiAgLSBVc2UgY29ycmVjdCBtZW1vcnkgdGVzdCBlbmQgYWRkcmVzcwogIC0gQWRkIHN1cHBvcnQgZm9yIGJ6aXAyIGNvbXByZXNzaW9uCiAgLSBWYXJpb3VzIHNtYWxsIGZpeGVzCiAgUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMDUgSnVuIDIwMDUKCiogTWVtb3J5IGNvbmZpZ3VyYXRpb24gY2hhbmdlcyBmb3IgWlBDLjE5MDAgYm9hcmQKICAtIEZpeCBTRFJBTSB0aW1pbmcgb24gYm90aCBsb2NhbCBidXMgYW5kIDYweCBidXMKICAtIEFkZCBzdXBwb3J0IGZvciBzZWNvbmQgZmxhc2ggYmFuayAoU0lNTSkKICAtIENoYW5nZSBib290IGZsYXNoIGJhc2UKICBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAwNSBKdW4gMjAwNQoKKiBBZGQgc3VwcG9ydCBmb3IgQWRkZXIgYm9hcmRzIHdpdGggMTZNQiBTRFJBTTsKICBhZGQgc3VwcG9ydCBmb3Igc2Vjb25kIEZFQyBvbiBBZGRlcjg3eCBib2FyZC4KICBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAwNSBKdW4gMjAwNQoKKiBGaXggY29uZGl0aW9uYWwgZm9yIGluY2x1ZGluZyBrczg2OTVldGggZHJpdmVyCiAgUGF0Y2ggYnkgR3JlZyBVbmdlcmVyLCAwNCBKdW4gMjAwNQoKKiBGaXggTWFrZWZpbGU6IGluY2x1ZGUgY29uZmlnLm1rIG9ubHkgYWZ0ZXIgQ1JPU1NfQ09NUElMRSBpcyBkZWZpbmVkCiAgUGF0Y2ggYnkgRnJpZWRyaWNoIExvYmVuc3RvY2ssIDAyIEp1biAyMDA1CgoqIEZpeCBjb21tZW50IGluIGNvbW1vbi9zb2Z0X2kyYy5jCiAgUGF0Y2hlcyBieSBQZXRlciBLb3JzZ2FhcmQvVG9sdW5heSBPcmt1biwgMjYgTWF5IDIwMDUKCiogQ2xlYW51cCBjb21waWxlciB3YXJuaW5ncy4KICBQYXRjaCBieSBHcmVnIFVuZ2VyZXIsIDIxIE1heSAyMDA1CgoqIFdvcmQgYWxpZ25tZW50IGZpeGVzIGZvciB3b3JkIGFsaWduZWQgTlMxNjU1MCBVQVJUCiAgUGF0Y2ggYnkgSmVhbi1QYXVsIFNhbWFuLCAwMSBNYXIgMjAwNQoKICBGaXhlcyBidWcgd2l0aCBVQVJUIHRoYXQgb25seSBzdXBwb3J0cyB3b3JkIGFsaWduZWQgYWNjZXNzOiByZW1vdmVkCiAgIl9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsiIGZvciAiKENGR19OUzE2NTUwX1JFR19TSVpFID09IDQpIiBzb21lCiAgKGJyb2tlbiEpIHZlcnNpb25zIG9mIEdDQyBnZW5lcmF0ZSBieXRlIGFjY2Vzc2VzIHdoZW4gZW5jb3VudGVyaW5nCiAgdGhlIHBhY2tlZCBhdHRyaWJ1dGUgcmVnYXJkbGVzcyBpZiB0aGUgc3RydWN0IGlzIGFscmVhZHkgY29ycmVjdGx5CiAgYWxpZ25lZCBmb3IgYSBwbGF0Zm9ybS4gUGVyaXBoZXJhbHMgdGhhdCBjYW4gb25seSBoYW5kbGUgd29yZAogIGFsaWduZWQgYWNjZXNzIHdvbid0IHdvcmsgcHJvcGVybHkgd2hlbiBhY2Nlc3NlZCB3aXRoIGJ5dGUgYWNjZXNzLgogIFRoZSBzdHJ1Y3QgTlMxNjU1MCBpcyBhbHJlYWR5IHdvcmQgYWxpZ25lZCBmb3IgUkVHX1NJWkUgPSA0LCBzbwogIHRoZXJlIGlzIG5vIG5lZWQgdG8gcGFja2VkIHRoZSBzdHJ1Y3QgaW4gdGhhdCBjYXNlLgoKKiBGaXggYmVoYXZpb3VyIGlmIGdhdGV3YXlpcCBpcyBub3Qgc2V0CiAgUGF0Y2ggYnkgUm9iaW4gR2lsa3MsIDIzIERlYyAyMDA0CgoqIEZpeCBjbGVhbnVwIGZvciBuZXRzdGFydCBib2FyZC4KICBSZW1vdmUgYnVpbGQgcmVzdWx0cyBmcm9tIHJlcG9zaXRvcnkKCiogU29tZSBjb2RlIGNsZWFudXAgZm9yIEdDQyA0LngKCiogRml4ZXMgdG8gc3VwcG9ydCBlbnZpcm9ubWVudCBpbiBOQU5EIGZsYXNoOwogIGVuYWJsZSBOQU5EIGZsYXNoIGJhc2VkIGVudmlyb25tZW50IGZvciBkZWx0YSBib2FyZC4KCiogQWRkIHN1cHBvcnQgZm9yIEludGVsIE1vbmFoYW5zIENQVSBvbiBaeWxvbml0ZSBhbmQgRGVsdGEgYm9hcmRzCiAgKFRoaXMgaXMgV29yayBpbiBQcm9ncmVzcyEpCgoqIEFkZCBzdXBwb3J0IGZvciBUUU04MjYwLUFJIGJvYXJkcy4KCiogTWlub3IgY29kZSBjbGVhbnVwCgoqIE1lcmdlIHRoZSBuZXcgTkFORCBjb2RlICh0ZXN0aW5nLU5BTkQgYnJhY2gpOyBzZWUgZG9jL1JFQURNRS5uYW5kCiAgUmV3cml0ZSBvZiBOQU5EIGNvZGUgYmFzZWQgb24gd2hhdCBpcyBpbiAyLjYuMTIgTGludXgga2VybmVsCiAgUGF0Y2ggYnkgTGFkaXNsYXYgTWljaGwsIDI5IEp1biAyMDA1CgoqIEFkZCBsb3dib290IHRhcmdldCB0byBtY2MyMDAgYm9hcmQKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDQgTWFyIDIwMDYKCiogRml4IHByb2JsZW0gd2l0aCBmbGFzaF9nZXRfc2l6ZSgpIGZyb20gQ0ZJIGRyaXZlciB1cGRhdGUKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEgTWFyIDIwMDYKCiogTWFrZSBDRkdfTk9fRkxBU0ggd29yayBvbiBBUk0gc3lzdGVtcwogIFBhdGNoIGJ5IE1hcmt1cyBLbG90emJ1ZWNoZXIsIDI3IEZlYiAyMDA2CgoqIFVwZGF0ZSBtY2MyMDAgY29uZmlnOiBEaXNhYmxlIFBDSSBhbmQgRG9DLCB1c2UgMTMzIE1IeiBJUEIgY2xvY2ssCiAgdXNlIGh1c2ggc2hlbGwuCgoqIENvbnZlcnQgbWNjMjAwIHRvIHVzZSBjb21tb24gQ0ZJIGZsYXNoIGRyaXZlcgogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjggRmViIDIwMDYKCiogQWRkIGVudi12YXJpYWJsZSAidW5sb2NrIiB0byBoYW5kbGUgaW5pdGlhbCBzdGF0ZSBvZiBzZWN0b3JzCiAgKGxvY2tlZC91bmxvY2tlZCkuCgogIE9ubHkgdGhlIFUtQm9vdCBpbWFnZSBhbmQgaXQncyBlbnZpcm9ubWVudCBpcyBwcm90ZWN0ZWQsCiAgYWxsIG90aGVyIHNlY3RvcnMgYXJlIHVucHJvdGVjdGVkICh1bmxvY2tlZCkgaWYgZmxhc2gKICBoYXJkd2FyZSBwcm90ZWN0aW9uIGlzIHVzZWQgKENGR19GTEFTSF9QUk9URUNUSU9OKSBhbmQKICB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgInVubG9jayIgaXMgc2V0IHRvICJ5ZXMiLgoKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDI4IEZlYiAyMDA2CgoqIFVwZGF0ZSBkcml2ZXJzL2NmaV9mbGFzaC5jOgogIC0gZmluZF9zZWN0b3IoKSBjYWxsZWQgaW4gYm90aCB2ZXJzaW9ucyBvZiBmbGFzaF93cml0ZV9jZml3b3JkKCkKICBQYXRjaCBieSBQZXRlciBQZWFyc2UsIDI3dGggRmViIDIwMDYKCiogQ0ZJIHN1cHBvcnQgZm9yIGEgeDgveDE2IEFNRC9TcGFuc2lvbiBmbGFzaCBjb25maWd1cmVkIGluIHg4IG1vZGUKICBQYXRjaCBieSBKb3NlIE1hcmlhIExvcGV6LCAxNiBKYW4gMjAwNgoKKiBBZGQgc3VwcG9ydCBmb3IgQU1EL1NwYW5zaW9uIEZsYXNoZXMgaW4gZmxhc2hfd3JpdGVfY2ZpYnVmZmVyCiAgUGF0Y2ggYnkgQWxleCBCYXN0b3MgYW5kIFRob21hcyBTY2hhZWZlciwgMjAwNS0wOC0yOQoKKiBDaGFuZ2VzL2ZpeGVzIGZvciBkcml2ZXJzL2NmaV9mbGFzaC5jOgogIFdlICpzaG91bGQqIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgZXJyb3IgYml0cyBpZiB0aGUgcHJldmlvdXMgY2FsbAogIHJldHVybmVkIEVSUl9PSyAoT3RoZXJ3aXNlIHdlIHdpbGwgaGF2ZSBvdXRwdXQgYW4gZXJyb3IgbWVzc2FnZSBpbgogIGZsYXNoX3N0YXR1c19jaGVjaygpIGFscmVhZHkuKSAgVGhlIG9yaWdpbmFsIGNvZGUgd291bGQgb25seSBjaGVjayBmb3IKICBlcnJvciBiaXRzIGlmIGZsYXNoX3N0YXR1c19jaGVjaygpIHJldHVybnMgRVJSX1RJTUVPVVQuCiAgUGF0Y2ggYnkgTWFyY3VzIEhhbGwsIDIzIEF1ZyAyMDA1CgoqIENoYW5nZXMvZml4ZXMgZm9yIGRyaXZlcnMvY2ZpX2ZsYXNoLmM6CiAgLSBBZGQgQ0ZHX0ZMQVNIX1BST1RFQ1RfQ0xFQVIgb24gZHJpdmVycy9jZmlfZmxhc2guYwogIC0gUHJvaGliaXQgYnVmZmVyIHdyaXRlIHdoZW4gYnVmZmVyX3NpemUgaXMgMSBvbiBkcml2ZXJzL2NmaV9mbGFzaC5jCiAgUGF0Y2ggYnkgU2FuZ21vb24gS2ltLCAxOSBBdWcgMjAwNQoKKiBGaXhlcyBmb3IgZHJpdmVycy9jZmlfZmxhc2guYzoKICAtIEZpeCB3cm9uZyB0aW1lb3V0IHZhbHVlIHVzYWdlIGluIGZsYXNoX3N0YXR1c19jaGVjaygpCiAgLSBSb3VuZCB3cml0ZV90b3V0IHVwIHdoZW4gY29udmVydGluZyB0byBtc2VjIGluIGZsYXNoX2dldF9zaXplKCkKICAtIFJlbW92ZSBjbGVhcmluZyBmbGFzaCBzdGF0dXMgYXQgdGhlIGVuZCBvZiBmbGFzaF93cml0ZV9jZmlidWZmZXIoKQogICAgd2hpY2ggc2V0cyBJbnRlbCAyOEY2NDBKMyBmbGFzaCBiYWNrIHRvIGNvbW1hbmQgbW9kZSBvbiBDU0I0NzIKICBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCAwMiBKdWx5IDIwMDUKCiogQWRkIGJhc2ljIHN1cHBvcnQgZm9yIHRoZSBTTU1BQ080IEJvYXJkIGZyb20gUGFuRGFDb20uCiAgUGF0Y2ggYnkgSGVpa28gU2Nob2NoZXIsIDIwIEZlYiAyMDA2CgoqIEFkZCBHSVQgdmVyc2lvbiBpbmZvcm1hdGlvbiAoY29tbWlkIElEKSB0byB1bnRhZ2dlZCBVLUJvb3QgdmVyc2lvbnMKCiAgQXMgZG9uZSBpbiB0aGUgbGludXgga2VybmVsLCB0aGUgVS1Cb290IHZlcnNpb24gKFVfQk9PVF9WRVJTSU9OKQogIG9mIGFsbCB1bnJlbGVhc2VkICh1bnRhZ2dlZCkgVS1Cb290IGltYWdlcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkKICBleHRlbmRlZCB1cG9uIGNvbXBpbGV0aW1lIHdpdGggYSBwYXJ0IG9mIHRoZSBHSVQgY29tbWl0IElEIGFuZAogIHBvc3NpYmx5IHdpdGggImRpcnR5IiBpZiB1bmNvbW1pdGVkIGNoYW5nZXMgYXJlIGRldGVjdGVkLgoKICBIZXJlIGFuIGV4YW1wbGUgZm9yIHRoZSByZXN1bHRpbmcgdmVyc2lvbjoKICAiVS1Cb290IDEuMS40LWczNDU3YWMxOC1kaXJ0eSIKCiAgVGhlIHZlcnNpb24gaXMgbm93IG1haW50YWluZWQgaW4gdGhlIHRvcGxldmVsIE1ha2VmaWxlIGFuZCB0aGUKICB2ZXJzaW9uIGhlYWRlcnMgYXJlIGF1dG9nZW5lcmF0ZWQuCgogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgOSBGZWIgMjAwNgoKKiBVcGRhdGUgZGVmYXVsdCBlbnZpcm9ubWVudCBmb3IgSU5LQTR4MDAgYm9hcmQuCgoqIENvbnZlcnQgQ1BDSTc1MCB0byB1c2UgY29tbW9uIENGSSBmbGFzaCBkcml2ZXIKICBQYXRjaCBieSBSZWluaGFyZCBBcmx0LCA4IEZlYiAyMDA2CgoqIFZhcmlvdXMgY2hhbmdlcyB0byBlc2QgSEg0MDUgYm9hcmQgc3BlY2lmaWMgZmlsZXMKICBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgMDcgRmViIDIwMDYKCiogQ2xlYW51cCBVLUJvb3QgYm9vdCBtZXNzYWdlcyBvbiBBUk0uCgogIFRvIG1hdGNoIHRoZSBVLUJvb3QgdXNlciBpbnRlcmZhY2Ugb24gQVJNIHBsYXRmb3JtcyB0byB0aGUgVS1Cb290CiAgc3RhbmRhcmQgKGFzIG9uIFBQQyBwbGF0Zm9ybXMpLCBzb21lIG1lc3NhZ2VzIHdpdGggZGVidWcgY2hhcmFjdGVyCiAgYXJlIHJlbW92ZWQgZnJvbSB0aGUgZGVmYXVsdCBVLUJvb3QgYnVpbGQuCiAgRW5hYmxlIERFQlVHIGZvciBsaWJfYXJtL2JvYXJkLmMgdG8gZW5hYmxlIGRlYnVnIG1lc3NhZ2VzLgogIE5ldyBDT05GSUdfRElTUExBWV9DUFVJTkZPIGFuZCBDT05GSUdfRElTUExBWV9CT0FSRElORk8gb3B0aW9ucy4KICBQYXRjaAkgYnkgU3RlZmFuIFJvZXNlLCAyNCBKYW4gMjAwNgoKKiBGaXggdmFyaW91cyBjb21waWxlciB3YXJuaW5ncyBvbiBwcGM0eHggYnVpbGRzIChFTERLIDQuMCkKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE4IEphbiAyMDA2CgoqIEFkZCBWR0Egc3VwcG9ydCAoQ1Q2OTAwMCkgdG8gQ1BDSTc1MCBib2FyZC4KICBJbnNlcnQgbWlzc2luZyBfX2xlMzJfdG9fY3B1KCkgZm9yIGZpbGVzaXplIGluIGV4dDJmc19yZWFkX2ZpbGUoKS4KICBQYXRjaCBieSBSZWluaGFyZCBBcmx0LCAzMCBEZWMgMjAwNQoKKiBQTUM0MDUgYW5kIENQQ0k0MDU6IE1vdmVkIGNvbmZpZ3VyYXRpb24gb2YgcGNpIHJlc291cmNlcwogIGludG8gY29uZmlnIGZpbGUuCiAgUE1DNDA1IGFuZCBDUENJMkRQOiBBZGRlZCBmaXJtd2FyZSBkb3dubG9hZCBhbmQgYm9vdGluZyB2aWEgcGNpLgogIFBhdGNoIGJ5IE1hdHRoaWFzIEZ1Y2hzLCAyMCBEZWMgMjAwNQoKKiBGaXggMjhGMjU2SjNBIHN1cHBvcnQgb24gUE01MjAgYm9hcmQKICAod2l0aG91dCBiYW5rLXN3aXRjaGluZyBvbmx5IDMyIE1CIGNhbiBiZSBhY2Nlc3NlZCkKCiogRml4IG1raW1hZ2UgYnVnIHdpdGggbXVsdGlmaWxlIGltYWdlcyBjcmVhdGVkIG9uIDY0IGJpdCBzeXN0ZW1zLgoKKiBBZGQgc3VwcG9ydCBmb3IgMjhGMjU2SjNBIGZsYXNoICg9PiA2NCBNQikgb24gUE01MjAgYm9hcmQKCiogRml4IGNvbXBpbGVyIHByb2JsZW0gd2l0aCBhdDkxcm05MjAwZGsgYm9hcmQuCiAgUGF0Y2ggYnkgRXVnZW4gQmlneiwgMTkgRGVjIDIwMDUKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDEuMS40Ogo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIENoYW5nZXMgdG8gWWVsbG93c3RvbmUgJiBZb3NlbWl0ZSA0NDBFUC9HUiBldmFsIGJvYXJkczoKICAtIENoYW5nZWQgR1BJTyBzZXR1cCB0byBlbmFibGUgYW5vdGhlciBhZGRyZXNzIGxpbmUgaW4gb3JkZXIgdG8KICAgIGFkZHJlc3MgNjRNIG9mIEZMQVNILgogIC0gQWRkZWQgZnVuY3Rpb24gc2RyYW1fdHIxX3NldCB0byBhdXRvIGNhbGN1bGF0ZSB0aGUgdHIxIHZhbHVlIGZvcgogICAgdGhlIEREUi4KICBQYXRjaCBieSBTdGV2ZW4gQmxha2VzbGVlLCAxMiBEZWMgMjAwNQoKKiBNUEM1MjAwOiAgU2V0IFBDSSByZXRyeSBjb3VudGVyIHRvIDAgPSBpbmZpbml0ZSByZXRyeTsKICBUaGUgZGVmYXVsdCBvZiAyNTUgaXMgdG9vIHNob3J0IGZvciBzbG93IGRldmljZXMuCiAgUGF0Y2ggYnkgTWFydGluIE55a29keW0sIDEyIERlYyAyMDA1CgoqIENoYW5nZSBwb3J0IGNvbmZpZ3VyYXRpb24gZm9yIE8yRE5UIChDT0RFQzEgb24gUFNDMSkuCgoqIEZpeCByZWdpc3RlciBmb3IgUENJIGFzeW5jIG1vZGUgb24gUFBDNDQwRVAKICBQYXRjaCBieSBZb3VuZ2NodWwgQmFuZywgMDggRGVjIDIwMDUKCiogRml4IFUtQm9vdCBsaW5raW5nIHByb2JsZW1zIChhZGQgLmVoX2ZyYW1lIHNlZ21lbnQgdG8gbGlua2VyIHNjcmlwdCkKICBUaGlzIHNlZ21lbnQgbWF5IGJlIHJlcXVpcmVkIGJ5IHNvbWUgbGliZ2NjLmEgZnVuY3Rpb25zCiAgKGxpa2UgX3VkaXZkaTMpLgoKKiBGaXggRFBSQU0gb2Zmc2V0L3NpemUgZm9yIE1QQzg1NDEvODU1NS4KICBTaW1wbGlmeSBUUU04NXh4IE1ha2VmaWxlIGhhbmRsaW5nLgoKKiBGaXggZGF0YSBvdmVyZmxvdyAodHlwbz8pIGluIHJ0Yy9kczEzMDIuYwoKKiBGaXggVS1Cb290IGNvbXBpbGF0aW9uIGZvciBNSVBTIGJvYXJkcyB1c2luZyBFTERLIDQuMAoKKiBBZGQgc3VwcG9ydCBmb3IgVFFNODU0MS84NTU1IGJvYXJkcywgVFFNODV4eCBzdXBwb3J0IHJld29ya2VkOgogIC0gU3VwcG9ydCBmb3IgVFFNODU0MS84NTU1IGJvYXJkcyBhZGRlZC4KICAtIENvbXBsZXRlIHJld29yayBvZiBUUU04NTQwLzg1NjAgc3VwcG9ydC4KICAtIENvbW1vbiBUUU04NXh4IGNvZGUgbm93IHN1cHBvcnRzIGFsbCBjdXJyZW50IFRRTTg1eHggcGxhdGZvcm1zCiAgICAoVFFNODU0MC84NTQxLzg1NTUvODU2MCkuCiAgLSBERFIgU0RSQU0gc2l6ZSBkZXRlY3Rpb24gYWRkZWQuCiAgLSBDQVMgbGF0ZW5jeSBkZWZhdWx0IHZhbHVlcyBjYW4gYmUgb3ZlcndyaXR0ZW4gYnkgc2V0dGluZyAic2VyaWFsIyIKICAgIHRvIGUuZy4gIkFCQzAwMDEgY2FzbD0yNSIgLT4gQ0FTIGxhdGVuY3kgMi41IHdpbGwgYmUgdXNlZC4KICAgIElmIHByb2JsZW1zIGFyZSBkZXRlY3RlZCB3aXRoIHRoaXMgbm9uIGRlZmF1bHQgQ0FTIGxhdGVuY3ksCiAgICB0aGUgZGVmYXVsdCB2YWx1ZXMgd2lsbCBiZSB1c2VkIGluc3RlYWQuCiAgLSBGbGFzaCBzaXplIGRldGVjdGlvbiBhZGRlZC4KICAtIE1vdmVkIEZDQyBldGhlcm5ldCBkcml2ZXIgaW5pdGlhbGl6YXRpb24gYmVoaW5kIFRTRUMgZHJpdmVyIGluaXQKICAgIC0+IFRTRUMgaXMgZmlyc3QgZGV2aWNlLgogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMzAgTm92IDIwMDUKCiogQWRkIHN1cHBvcnQgZm9yIEFNQ0MgNDQwU1AsIGFkZCBzdXBwb3J0IGZvciBBTUNDIEx1YW4gNDQwU1AgZXZhbCBib2FyZC4KICBQYXRjaCBieSBKb2huIE90a2VuLCAyMyBOb3YgMjAwNQoKKiBDaGFuZ2VkIFBQQzQ0eCBzdGFydHVwIG1lc3NhZ2UgKGNwdSBpbmZvLCBzcGVlZC4uLikgdG8gY29tbW9uIHN0eWxlOgogIE9uIFBQQzQ0eCBwbGF0Zm9ybXMsIHRoZSBzdGFydHVwIG1lc3NhZ2UgZ2VuZXJhdGVkIGluICJjcHUuYyIgb25seQogIGNvbXByaXNlZCB0aGUgcHBjIHR5cGUgYW5kIHJldmlzaW9uIGJ1dCBub3QgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgogIGxpa2Ugc3BlZWQgZXRjLiBUaG9zZSBzcGVlZCBpbmZvcyB3aGVyZSBwcmludGVkIGluIHRoZSBib2FyZCBzcGVjaWZpYwogIGNvZGUuIFRoaXMgbmV3IGltcGxlbWVudGF0aW9uIG5vdyBwcmludHMgYWxsIENQVSBpbmZvcyBpbiB0aGUgY29tbW9uCiAgY3B1IHNwZWNpZmljIGNvZGUuIE5vIGJvYXJkIHNwZWNpZmljIGNvZGUgaXMgbmVlZGVkIGFueW1vcmUgYW5kCiAgdGhlcmVmb3JlIHJlbW92ZWQgZnJvbSBhbGwgY3VycmVudCA0NHggaW1wbGVtZW50YXRpb25zLgogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjcgTm92IDIwMDUKCiogQWRqdXN0IFRRTTgzNHggUEhZIGFkZHJlc3NlcyBmb3IgbGF0ZXN0IGhhcmR3YXJlIHJldmlzaW9uLgoKKiBJbmNyZWFzZSBtYWxsb2MgYXJlbmEgb24gVFFNNTIwMCBib2FyZCB0byAyNTYga0IuCiAgV2l0aCA2NCBrYiB1bmlmb3JtIGZsYXNoIHNlY3RvciBzaXplIHRoZSBvbGQgdmFsdWUgb2YgMTI4IGtCIHdhcwogIHRvbyBzbWFsbC4KCiogRml4IG1paXBoeSBnbG9iYWwgZGF0YSBpbml0aWFsaXphdGlvbiAocHJvYmxlbSBvbiA0eHggYm9hcmRzIHdoZW4KICBubyBldGhhZGRyIGlzIGFzc2lnbmVkKS4gSW5pdGlhbGl6YXRpb24gbW92ZWQgZnJvbQogIG1paXBoeV9yZWdpc3RlcigpIHRvIGV0aF9pbml0aWFsaXplKCkuCgogIEJhc2VkIG9uIGluaXRpYWwgcGF0Y2ggZm9yIDR4eCBwbGF0Zm9ybSBieSBNYXR0aGlhcyBGdWNocy4KCiogUmVtb3ZlIHVubm5lY2Vzc2FyeSAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4gZnJvbSBpbmNsdWRlL2FzbS0qL3UtYm9vdC5oCgoqIEFsbG93IHVzZSBvZiBpbmNsdWRlL2ltYWdlLmggYW5kIGluY2x1ZGUvYXNtLSovdS1ib290LmggaW4gcHJvcHJpZXRhcnkgY29kZS4KICBUaGUgQ09QWUlORyBmaWxlIHdhcyBleHRlbmRlZCB0byBtYWtlIGNsZWFyIHRoYXQgdGhlc2UgZmlsZXMgY2FuIGJlCiAgdXNlZCBpbiBub24tR1BMIGNvZGUsIHRvby4KICBBbHNvLCBhIGNvcnJlc3BvbmRpbmcgbm90ZSB3YXMgcGxhY2VkIGluIHRoZSBoZWFkZXJzIG9mIHRoZSBhZmZlY3RlZCBmaWxlcy4KCiogQWRkIHN1cHBvcnQgZm9yIFByb2RyaXZlIFAzUDQ0MCBib2FyZDoKICAtIEFkZGVkIG9uYm9hcmQgUFBDNDQwIEREUiBhdXRvZGV0ZWN0aW9uIGluIGNwdS9wcGMvc2RyYW0uYwogIC0gQ0ZHX0ZMQVNIX1FVSUVUX1RFU1QgYWRkZWQgdG8gdXNlIHRoZSBjb21tb24gQ0ZJIGRyaXZlcgogICAgZm9yIGJhbmsgYXV0b2RldGVjdGlvbgogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjIgTm92IDIwMDUKCiogQ2hhbmdlIGFsbCAnJCguLi4pJyB2YXJpYWJsZSByZWZlcmVuY2VzIGludG8gJyR7Li4ufScKICB3aGljaCBtYWtlcyB0aGUgZW52aXJvbm1lbnQgY29tcGF0aWJsZSB3aXRoIHRoZSBodXNoIHNoZWxsLgogIFdBUk5JTkc6IFN1cHBvcnQgZm9yIHRoZSBvbGQgJyQoLi4uKScgc3ludGF4IHdpbGwgYmUKICBkaXNjb250aW51ZWQgaW4gYSBsYXRlciB2ZXJzaW9uLgoKKiBNaW5vciBjaGFuZ2VzIHRvIGluaXQgZmxhZ3MgaW4gVFFNODM0eCBQQ0kuCgoqIEZpeCBCYW1ib28gRERSIFNEUkFNIGluaXRpYWxpemF0aW9uIChwcm9ibGVtIHdpdGggb25ib2FyZCBTRFJBTSkKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE1IE5vdiAyMDA1CgoqIE5ldyBQUEMgNDA1RVAgYm9hcmQgYWRkZWQ6IENNUzcwMAogIEFkZGVkIENPTkZJR19ORVRfTVVMVEkgZm9yIFZPTTQwNSBib2FyZC4KICBBZGRlZCByZXNldF9waHkoKSBmb3IgVk9NNDA1IGJvYXJkLgogIFBhdGNoIGJ5IE1hdHRoaWFzIEZ1Y2hzLCAwOSBOb3YgMjAwNQoKKiBVcGRhdGVkIFBDSSBtYXBwaW5nIGZvciBlc2QgQ1BDSTJEUCBib2FyZC4KICBBZGQgc3VwcG9ydCBmb3IgZXJyb3IgTEVELgogIFBhdGNoIGJ5IE1hdHRoaWFzIEZ1Y2hzLCAwNyBOb3YgMjAwNQoKKiBGaXggTVBDODV4eCBQQ0kgc3VwcG9ydCAocGNpX3JlZ2lzdGVyX2hvc2UoKSBiZWZvcmUgcGNpIGNvbmZpZyBhY2Nlc3MpCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNyBOb3YgMjAwNQoKKiBDb3JyZWN0IFBQQyBUaW1lYmFzZSByZWdpc3RlciBkZWZpbml0aW9ucyAoU1BSTl9UQlJMLi4uKQogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDcgTm92IDIwMDUKCiogQWRqdXN0IGJkLT5iaV9mbGFzaHN0YXJ0IG9uIFllbGxvd3N0b25lICYgWW9zZW1pdGUgdG8gY29ycmVjdCBzaXplCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNSBOb3YgMjAwNQoKKiBBZGRpdGlvbmFsIGZpeCBmb3IgZXh0ZXJuYWwgSVJRIGNvbmZpZyBvbiBZZWxsb3dzdG9uZSAmIFlvc2VtaXRlCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwMyBOb3YgMjAwNQoKKiBBZGQgc3VwcG9ydCBmb3IgT2NvdGVhIHBhc3MgMyB3aXRoIDQ0MEdYIFJldi4gRgogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDEgTm92IDIwMDUKCiogRml4IGV4dGVybmFsIElSUSBjb25maWd1cmF0aW9uIG9uIFllbGxvd3N0b25lICYgWW9zZW1pdGUKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDI4IE9jdCAyMDA1CgoqIEFkZCBzdXBwb3J0IGZvciBtdWx0aXBsZSBQSFlzLgogIFRlc3RlZCBvbiB0aGUgZm9sbG93aW5nIGJvYXJkczoKCWNtY3B1MgkgICAgKGF0OTFybTkyMDAvZXRoZXIuYykKCVBQQ2hhbWVsZW9uIChwcGM0eHgvNHh4X2VuZXQuYykKCXl1a29uCSAgICAobXBjODIyMC9mZWMuYykKCXVjMTAwCSAgICAobXBjOHh4L2ZlYy5jKQoJdHFtODM0eAkgICAgKG1wYzgzNHgvdHNlYy5jKSB3aXRoIEVFUFJPMTAwCglsaXRlNTIwMCAgICAobXBjNXh4eC9mZWMuYykgd2l0aCBFRVBSTzEwMCBjYXJkIChkcml2ZXJzL2VlcHJvMTAwLmMpCiAgTWFpbiBjaGFuZ2VzIGluY2x1ZGU6CiAgY29tbW9uL21paXBoeXV0aWwuYwogIC0gbWlpcGh5X3JlZ2lzdGVyIHJvdXRpbmUgd2FzIGFkZGVkIHRvIGFsbG93IG11bHRpcGxlIFBIWXMgdG8gYmUgcmVnaXN0ZXJlZAogIC0gbWlpcGh5X3JlYWQgYW5kIG1paXBoeV93cml0ZSBhcmUgbm93IGRlZmluZWQgaW4gdGhpcyBmaWxlLCBhbmQKICAgIHJlcXVpcmUgYWRkaXRpb25hbCBhcmd1bWVudCAoY2hhciAqZGV2bmFtZSkKICAtIG90aGVyIG1paXBoeV8qIHJvdXRpbmVzIGFsc28gcmVxdWlyZSBhZGRpdGlvbmFsIGRldmljZSBuYW1lIGFyZ3VtZW50CiAgLi4vbGliX2kzODYvYm9hcmQuYwogIC4uL2xpYl9wcGMvYm9hcmQuYwogIENhbGxpbmcgcmVzZXRfcGh5KCkgd2FzIG1vdmVkIHRvIGJlIGV4ZWN1dGVkICphZnRlciogZXRoX2luaXRpYWxpemUoKS4KICBUaGlzIGlzIG5lY2Vzc2FyeSBhcyBub3cgc29tZSBvZiB0aGUgaW1wbGVtZW50YXRpb25zIG9mIHJlc2V0X3BoeSgpCiAgbWF5IG5lZWQgdG8gdXNlIG1paXBoeV9yZXNldCgpIHdoaWNoIGlzIG5vdCBhbGxvd2VkIGJlZm9yZSBldGhfaW5pdGlhbGl6ZSgpCiAgYXMgZXRoX2luaXRpYWxpemUgcmVnaXN0ZXJzIGFsbCByZXF1aXJlZCBtaWlwaHlfKiByb3V0aW5lcy4KICBUZXN0ZWQgb24gSVA4NjAgYW5kIFBIWSBpbml0aWFsaXplcyBwcm9wZXJseSBhZnRlciB0aGlzIGNoYW5nZS4KCiogQ29ycmVjdCBpbmNsdWRlcyBmb3IgZmxhdCB0cmVlIGJ1aWxkZXIuCgoqIEZpeCBjb25mbGljdGluZyB0eXBlcyAoZmxhc2hfd3JpdGUoKSkgaW4gdHJhYiBhdXRvX3VwZGF0ZS5jLgoKKiBBZGQgUENJIHN1cHBvcnQgZm9yIHRoZSBUUU04MzR4IGJvYXJkLgoKKiBBZGQgbWlzc2luZyA0eHggYm9hcmQgdG8gTUFLRUFMTAogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjAgT2N0IDIwMDUKCiogRml4IGNvbmZsaWN0aW5nIHR5cGVzIChmbGFzaF93cml0ZSgpKSBpbiBlc2QgYXV0b191cGRhdGUuYwogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjAgT2N0IDIwMDUKCiogRml4IHByb2JsZW0gd2l0aCBzbGVlcCBpbiBOZXRDb25zb2xlICh1c2UgZ2V0X3RpbWVyKCkpCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyMCBPY3QgMjAwNQoKKiBBZGQgTmV0Q29uc29sZSBTdXBwb3J0IGZvciBBTUNDIGV2YWwgYm9hcmRzCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyMCBPY3QgMjAwNQoKKiBGaXggTmV0Q29uc29sZSBzdXBwb3J0IG9uIDR4eCAob25seSBwcmludCBldGggbGluayBvbiAxc3QgdHJhbnNmZXIpCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxOCBPY3QgMjAwNQoKKiBBZGQgZmF0ICYgZXh0MiBzdXBwb3J0IHRvIEFNQ0MgNDQwRVAgYm9hcmRzIFlvc2VtaXRlICYgQmFtYm9vLgogIEZpeCBpZGVudGF0aW9uIG9uIGV4dDJscyBoZWxwIGVudHJ5LgogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTQgT2N0IDIwMDUKCiogQWRkIHN1cHBvcnQgZm9yIFRRTTgzNHggYm9hcmRzLgogIENsZWFudXAuCgoqIENsZWFudXAgZm9yIEdDQy00LngKCiogQWRkIGRvY3VtZW50YXRpb24gZm9yIE9wZW4gRmlybXdhcmUgRmxhdCBUcmVlIGFuZCB1c2FnZS4KICBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMTMgT2N0IDIwMDUKCiogQWRkIG1pc3NpbmcgZmlsZXMgZm9yIFBhbnRlbGlzIEFudG9uaW91J3MgcGF0Y2gKICBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMDQgU2VwIDIwMDUKCiogRml4IHByb2JsZW0gaW4gcHBjNHh4IGV0aC1kcml2ZXIgd2l0aG91dCBldGhhZGRyIChvbmx5IHdpdGhvdXQKICBDT05GSUdfTkVUX01VTFRJIHNldCkKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEwIE9jdCAyMDA1CgoqIEZpeCBnemlwIGJtcCBzdXBwb3J0ICh0ZXN0IGlmIG1hbGxvYyBmYWlscywgd2FybmluZyB3aGVuIHRydW5jYXRlZCkuCiAgSW5jcmVhc2UgQ0ZHX1ZJREVPX0xPR09fTUFYX1NJWkUgb24gSEg0MDUgYm9hcmQuCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNyBPY3QgMjAwNQoKKiBBZGQgc3VwcG9ydCBmb3IgT0YgZmxhdCB0cmVlIGZvciB0aGUgU1RYdGMgYm9hcmQuCiAgUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDA0IFNlcCAyMDA1CgoqIFN1cHBvcnQgcGFzc2luZyBvZiBPRiBmbGF0IHRyZWVzIHRvIHRoZSBrZXJuZWwuCiAgUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDA0IFNlcCAyMDA1CgoqIENsZWFudXAKCiogQWRkIHN1cHBvcnQgZm9yIE5ldFNpbGljb24gTlM3NTIwIHByb2Nlc3Nvci4KICBQYXRjaCBieSBBcnQgU2hpcGtvd3NraSwgMTIgTWF5IDIwMDUKCiogQWRkIHN1cHBvcnQgZm9yIEFQMTAwMCBib2FyZC4KICBQYXRjaCBieSBKYW1lcyBNYWNBdWxheSwgMDcgT2N0IDIwMDUKCiogRWxpbWluYXRlIGhhcmQtY29kZWQgYWRkcmVzcyBvZiBFdGhlcm5ldCB0cmFuc2ZlciBidWZmZXIgb24gYXQ5MXJtOTIwMAogIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDA3IE9jdCAyMDA1CgogIFRoZSBBdG1lbCBlcnJhdGEgIzExIHN0YXRlcyB0aGF0IHRoZSB0cmFuc2ZlciBidWZmZXIgZGVzY3JpcHRvcgogIHRhYmxlIG11c3QgYmUgYWxpZ25lZCBvbiBhIDE2LXdvcmQgYm91bmRhcnkuIEFzIGl0IHR1cm5lZCBvdXQsIHRoaXMKICBpcyBpbnN1ZmZpY2llbnQgLSBpdCBzZWVtcyB0aGUgdGFibGUgbXVzdCBiZSBhbGlnbmVkIG9uIGEgYm91bmRhcnkKICBhdCBsZWFzdCBhcyBsYXJnZSBhcyB0aGUgdGFibGUgaXRzZWxmIChpbiBMaW51eCB0aGlzIGlzIG5vdCBhbgogIGlzc3VlIC0gdGhlIHRhYmxlIGlzIGFsaWduZWQgb24gYSBQQUdFX1NJWkUgKDQwOTYpIGJvdW5kYXJ5KS4KCiogRml4ZWQgY29tcGlsYXRpb24gZm9yIEFSTSB3aGVuIHVzaW5nIGEgKHN0YW5kYXJkKSBoYXJkLUZQIHRvb2xjaGFpbgogIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDA3IE9jdCAyMDA1CgoqIENsZWFudXAgd2FybmluZ3MgZm9yIGNwdS9hcm03MjB0ICYgY3B1L2FybTExMzYgZmlsZXMuCiAgc2VkIHRoZSBsaW5rZXIgc2NyaXB0cywgcmF0aGVyIHRoYW4gcHJlLXByb2Nlc3MgdGhlbS4KICBQYXRjaCBieSBQZXRlciBQZWFyc2UsIDA3IE9jdCAyMDA1CgoqIFVwZGF0ZSBtYWtlIHRhcmdldCBmb3IgQVJNIHN1cHBvcnRlZCBib2FyZHMuCiAgVXNlIGxvd2xldmVsX2luaXQoKSBpbnN0ZWFkIG9mIHBsYXRmb3Jtc2V0dXAoKSBbcmVuYW1lXS4KICBQYXRjaCBieSBQZXRlciBQZWFyc2UsIDA2IE9jdCAyMDA1CgoqIEZpeCBib290aW5nIGZyb20gc2VyaWFsIGRhdGFmbGFzaCBvbiBBVDkxUk05MjAwCiAgUGF0Y2ggYnkgUGV0ZXIgTWVuemViYWNoLCAyOSBBdWcgMjAwNQoKKiBBZGQgSkZGUzIgc3VwcG9ydCBmb3IgVFJBQiBib2FyZAogIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDI1IEF1ZyAyMDA1CgoqIFJlbW92ZSB1bm5lY2Vzc2FyeSBkZXBlbmRlbmN5IG9mIG5ldGNvbnNvbGUgb24gQ09ORklHX05FVF9NVUxUSQogIFBhdGNoIGJ5IE1hcmN1cyBIYWxsLCAyNCBBdWcgMjAwNQoKKiBGaXggdGhlIG1hY2hpbmUtaWQgb2YgdGhlIENvZ2VudCBjc2I2MzcgYm9hcmQKICBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAwNSBPY3QgMjAwNQoKKiBDb21wbGV0ZSBzdXBwb3J0IGZvciB0aGUgS3dpa0J5dGUgS0I5MjB4IGJvYXJkcwogIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDA1IE9jdCAyMDA1CgoqIFNldCB0aGUgQVQ5MVJNOTIwMCBjbG9jayB0byBhc3luY2hyb25vdXMgbW9kZQogIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDAzIE1heSAyMDA1CgoqIFNldCB0aGUgQVQ5MVJNOTIwMCBjbG9jayB0byBzeW5jaHJvbm91cyBtb2RlCiAgUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMjkgQXByIDIwMDUKCiogQWRkIHN1cHBvcnQgZm9yIENvZ2VudCBjc2I2MzcKICBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAyOSBBcHIgMjAwNQoKKiBGaXggZG05MTYxLmMgaW5pdGlhbGl6YXRpb24KICBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAyOSBBcHIgMjAwNQoKKiBGaXggcHJvYmxlbXMgaW50cm9kdWNlZCBieSBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAwMiBNYXIgMjAwNQogICg4ZTJiZTUxZGU4ZGQwM2MxY2U0ZDA2Y2JiMThhZDA2MTMzZDQ3Y2Q1KQoKKiBNb3ZlIGRtOTE2MS5jIGFuZCBseHQ5NzIuYyBpbnRvIGNwdS9hcm05MjB0L2F0OTFybTkyMDAKICBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAyOSBBcHIgMjAwNQoKKiBGaXggZGV2aWNlIHBhcnRpdGlvbiBpbnRpYWxpemF0aW9uIGZvciBTeXN0ZW1BQ0UgZGlza3MuCiAgUGF0Y2ggYnkgU3RlcGhlbiBXaWxsaWFtcywgMjggQXByIDIwMDUKCiogQWRkZWQgc3VwcG9ydCBmb3IgS3dpa0J5dGUgS0I5MjB4IGJvYXJkcyAoYmFzZWQgb24gQVQ5MVJNOTIwMCkKICBQYXRjaCBieSBNYXR0ID8/IDxrYjkyMDBfZGV2QGt3aWtieXRlLmNvbT4sIDI3IEFwciAyMDA1CgoqIEFkZCBzdXBwb3J0IGZvciBTMjlHTDA2NE0tUjMgZmxhc2ggY2hpcCBvbiB4c2VuZ2luZSBib2FyZAogIFBhdGNoIGJ5IEt1cnQgU3RyZW1lcmNoLCAxOCBBcHIgMjAwNQoKKiBFNTAwIHVwZGF0ZTogcmVwb2ludCBJVlBSIHRvIFJBTSB3aGVuIGNvZGUgaXMgcmVsb2NhdGVkCiAgUGF0Y2ggYnkgS3lsbyBHaW5zYmVyZywgMTMgQXByIDIwMDUKCiogRml4IGxvb3AgZW5kIHRlc3QgaW4gbGliX2dlbmVyaWMvc3RyaW5nLmM6c3Ryc3dhYigpCiAgUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIE9jdG9iZXIgMTAsIDIwMDUKICBTaWduZWQtb2ZmLWJ5OiBBbmRyZXcgRHllciA8YW1keWVyQGdtYWlsLmNvbT4KCiogQ2xlYW51cAoKKiBVcGRhdGUgQVJNIEludGVncmF0b3IgYm9hcmRzOgogIENvcnJlY3QgYWRkZXNzaW5nIGVycm9ycyBpbiBwbGF0Zm9ybSBmaWxlcy4KICBTcGxpdCBvZmYgY29tbW9uIGNvcmUgbW9kdWxlIGRhdGEgZnJvbSBJbnRlZ3JhdG9yIGhlYWRlciBmaWxlcyB0bwogIGluY2x1ZGUvYXJtY29yZW1vZHVsZS5oLgogIFBhdGNoIGJ5IFBldGVyIFBlYXJzZSwgMDQgT2N0IDIwMDUKCiogTWFrZSBzdXJlIG9ubHkgc3VwcG9ydGVkIGNvbXBpbGVyIG9wdGlvbnMgYXJlIHVzZWQKICBJbXBvcnQgImNjLW9wdGlvbiIgc2hlbGwgZnVuY3Rpb24gZnJvbSBrZXJuZWwgYW5kCiAgdXNlIGl0IHRvIGdldCB0aGUgY29ycmVjdCBBUk0gR0NDIG9wdGlvbnMgZm9yIGluZGl2aWR1YWwgQ1BVcwogIFBhdGNoIGJ5IFBldGVyIFBlYXJzZSwgMzAgSnVuIDIwMDUKCiogRml4IDQ0MEdSIHRvIHByaW50IGNvcnJlY3QgY3B1IHJldmlzaW9uCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNCBPY3QgMjAwNQoKKiBDaGFuZ2UgYm9hcmQgbWVzc2FnZSBvbiBBTUNDIFlvc2VtaXRlICYgWWVsbG93c3RvbmUgdG8gY29tbW9uIHN0eWxlCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwMyBPY3QgMjAwNQoKKiBGaXggY29tcGlsZXIgd2FybmluZwoKKiBGaXggRkVDIFBIWSBhZGRyZXNzZXMgZm9yIFRRTTg1eHggYm9hcmRzCgoqIEZpeCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHByb2JsZW0gaW4gaHVzaCBzaGVsbAogIFBhdGNoIGJ5IExhcnMgUm9zdG9jaywgMjYgU2VwIDIwMDUKCiogVW5kbyBjaGFuZ2Ugb2YgZjZlMjBmYzZjYS4uLiB0byBpbmNsdWRlL2NvbmZpZ3MvdHJhYi5oCiAgKE11c3QgaGF2ZSBiZWVuIGFuIGFjY2lkZW50PykKCiogQWRkIHN1cHBvcnQgZm9yIEFUOTFSTTkyMDAgT0hDSSBDb250cm9sbGVyLgogIFBhdGNoIGJ5IEVyaWMgQmVuYXJkLCAwNyBBcHIgMjAwNQoKKiBVcGRhdGUgQVJNIG1hY2gtdHlwZXMuaAogIFBhdGNoIGJ5IEVyaWMgQmVuYXJkLCAwNyBBcHIgMjAwNQoKKiBBZGQgc3VwcG9ydCBmb3IgTVAyVVNCIGJvYXJkLgogIFBhdGNoIGJ5IEVyaWMgQmVuYXJkLCAwNyBBcHIgMjAwNQoKKiBBZGQgYm9hcmQgc3VwcG9ydCBmb3IgYXJtYWRpbGxvIEhUMTA3MAogIFBhdGNoIGJ5IFJvd2VsIEF0aWVuemEsIDA2IEFwciAyMDA1CgoqIFNlY29uZCBFdGhlcm5ldCBhZGRyZXNzIGVuYWJsZWQgZm9yIE1QQzg4NUFEUyBhbmQgTVBDODI3MkFEUy4KICBQYXRjaCBieSBWaXRhbHkgQm9yZHVnLCAzMCBNYXIgMjAwNQoKKiBBZGQgaW9wc2V0IGNvbW1hbmQgb24gbXBjOHh4CiAgUGF0Y2ggYnkgRGFuaWVsIEVpc2VuaHV0LCAyNSBNYXIgMjAwNQoKKiBBZGQgc3VwcG9ydCBmb3IgTUlJIGluIGVlcHJvMTAwIGRyaXZlci4KICBQYXRjaCBieSBHbGViIE5hdGFwb3YsIDIxIE1hciAyMDA1CgoqIEZpeGVzIHRvIHRoZSBMdWJib2NrIChQWEEgMjV4KSBzdXBwb3J0OgogIC0gUmVzb2x2ZSB0aGUgRklYTUUgd2l0aCByZXNwZWN0IHRvIHNhdmluZyB0aGUgdS1ib290IGVudmlyb25tZW50LgogIC0gTWFrZSB0aGUgZGVmYXVsdCBsb2FkIGFkZHJlc3MgbGFuZCBpbiByZWFsIG1lbW9yeS4KICAtIEZpeCBsYW45MWM5NiBTTUNfe2luLG91dH17Yix3LGx9KCkgbWFjcm9zCiAgUGF0Y2ggYnkgRGF2aWQgQnJvd25lbGwsIDEwIE1hciAyMDA1CgoqIEFkZCBCYXJjbyBTdHJlYW1pbmcgVmlkZW8gQ2FyZCAoU1ZDKSBhbmQgU2FtcGxlIENvbXByZXNzIE5ldHdvcmsgKFNDTikgYm9hcmQKICBQYXRjaCBieSBNYXJjIExlZW1hbiwgMDQgTWFyIDIwMDUKCiogT01BUDI0MnggSDQgYm9hcmQgdXBkYXRlCiAgLSBmaXggZm9yIEVTMiBkaWZmZXJlbmNlcy4KICAtIHN3aXRjaCB0byB1c2luZyB0aGUgY2ZpX2ZsYXNoIGRyaXZlci4KICAtIGZpeCBTUkFNIGJ1aWxkIGFkZHJlc3MuCiAgLSBmaXggZm9yIEdQIGRldmljZSBvcGVyYXRpb24uCiAgLSB1bmxvY2sgU1JBTSBmb3IgR1AgZGV2aWNlcy4KICAtIGRpc3BsYXkgbW9yZSBkZXZpY2UgaW5mb3JtYXRpb24uCiAgLSBmaXggcG90ZW50aWFsIGRlYWRsb2NrIGluIG9tYXAyNHh4X2kyYyBkcml2ZXIuCiAgLSBmaXggRExMIGxvYWQgdmFsdWVzIHRvIG1hdGNoIGRwbGxvdXQqMSBvcGVyYXRpb24uCiAgLSBmaXggMm5kIGNoaXAgc2VsZWN0IGluaXQgZm9yIGNvbWJvIEREUiBkZXZpY2UuCiAgLSBhZGQgc3VwcG9ydCBmb3IgQ0ZJIEludGVsIDI4RjI1NkwxOCBvbiBINCBib2FyZC4KICBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCAwMyBNYXIgMjAwNQoKKiBGaXggZm9ybWF0aW5nIGluIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvQVQ5MVJNOTIwMC5oCiAgUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMDIgTWFyIDIwMDUKCiogRml4IHR5cG8gaW4gZXRoLmMKICBQYXRjaCBieSBBcmEgQXZhbmVzeWFuLCAyNCBGZWIgMjAwNQoKKiBSZW1vdmUgdW5uZWVkZWQgI2luY2x1ZGUgPG1hbGxvYy5oPgogIFBhdGNoIGJ5IExhZGlzbGF2IE1pY2hsLCAyMiBGZWIgMjAwNQoKKiBBZGQgY3JhbWZzIHN1cHBvcnQgZm9yIG02OGsKICBQYXRjaCBieSBaYWNoYXJ5IExhbmRhdSwgMjEgRmViIDIwMDUKCiogVXBkYXRlIGVwODI2MDogRml4IGZsYXNoIHRpbWVvdXRzOyBpbXByb3ZlIGNsb2NrIHJlc29sdXRpb24gZm9yIGZhc3RlciBVQVJUcwogIFBhdGNoIGJ5IEplZmYgQW5naWVsc2tpLCAyMSBGZWIgMjAwNQoKKiBGaXggYXUxeDAwX3NlcmlhbCBiYXVkIHJhdGUgY2FsY3VsYXRpb246CiAgcmVtb3ZlIGhhcmRjb2RlZCBjcHUgY2xvY2sgZGl2aXNvciBhbmQgdXNlIHJlZ2lzdGVyIGluc3RlYWQ7CiAgcm91bmQgdXAgaW5zdGVhZCBvZiB0cnVuY2F0ZQogIFBhdGNoIGJ5IEFuZHJldyBEeWVyLCAxNSBGZWIgMjAwNQoKKiBBZGQgWGlsaW54IFNwYXJ0YW4zIGZhbWlseSBGUEdBIHN1cHBvcnQKICBQYXRjaCBieSBLdXJ0IFN0cmVtZXJjaCwgMTQgRmViIDIwMDUKCiogRml4IGRyaXZlcnMvY2ZpX2ZsYXNoLmM6IHVzZSBpbmZvLT5yZXNldF9jbWQgaW5zdGVhZCBvZiBGTEFTSF9DTURfUkVTRVQKICBQYXRjaCBieSBaYWNoYXJ5IExhbmRhdSwgMTEgRmViIDIwMDUKCiogRml4IFZPSDQwNSBTdXBwb3J0CiAgUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDI1IFNlcCAyMDA1CgoqIEFkZGVkIHN1cHBvcnQgZm9yIFBDSSBicmlkZ2Ugb24gTVBDODI3MkFEUwogIFBhdGNoIGJ5IFZpdGFseSBCb3JkdWcsIEZlYiAwOSAyMDA1CgoqIFVwZGF0ZSBtdWx0aWNvcmUgQ005WFggc3VwcG9ydCBmb3IgSW50ZWdyYXRvciBBUCB0byBhbGxvdyBib290aW5nIGZyb20gZmxhc2gKICBQYXRjaCBieSBKZWFuLVBhdWwgU2FtYW4sIDggRmViIDIwMDUKCiogRml4IHN0cnN3YWIoKSB0byByZWxpYWJseSBmaW5kIGVuZCBvZiBzdHJpbmcKICBQYXRjaCBieSBBbmRyZXcgRHllciwgMDggRmViIDIwMDUKCiogRml4IHR5cG9zIGluIGluY2x1ZGUvcHBjNDQwLmgKICBQYXRjaCBieSBBbmRyZXcgRSBNaWxlc2tpLCAwNCBGZWIgMjAwNQoKKiBBZGQgVmlicmVuICh3YXMgQWNjZWxlbnQpIFBYQTI1NSBJRFAgU3VwcG9ydAogIFBhdGNoIGJ5IENsaWZmIEJyYWtlLCAwNCBGZWIgMjAwNQoKKiBGaXggdG9vbHMvYm1wX2xvZ28uYyB1c2luZyBpbmNvcnJlY3Qgb2Zmc2V0IHRvIHBpeGVsIGRhdGEKICBQYXRjaCBieSBBbmRyZXcgRHllciwgMzEgSmFuIDIwMDUKCiogQWRkIEFSTTk0NkUgY3B1IGFuZCBjb3JlIG1vZHVsZSB0YXJnZXRzOyByZW1hcCBtZW1vcnkgdG8gMHgwMDAwMDAwMAogIFBhdGNoIGJ5IFBldGVyIFBlYXJzZSwgMiBGZWIgMjAwNQoKKiBGaXggZXJyb3IgaGFuZGxpbmcgaW4gdG9vbHMvZW52L2Z3X2Vudi5jCiAgUGF0Y2ggYnkgQXJhIEF2YW5lc3lhbiwgMDEgRmViIDIwMDUKCiogRml4IE1HVDUxMDAgUFNDIGJhdWRyYXRlIGNhbGN1bGF0aW9uCiAgUGF0Y2ggYnkgU2ViYXN0aWFuIFNjaGF1LCAyNyBKYW4gMjAwNQoKKiBPTUFQMjQyeCBmaXggZm9yIEdQIGRldmljZSBib290aW5nCiAgLSBBZGQgU1JBTSB1bmxvY2sgZm9yIEdQIGRldmljZXMuCiAgLSBDaGFuZ2UgRERSIERMTCB1bmxvY2sgdmFsdWUgdG8gYWxsb3cgRFBMTG91dCoxIG9wZXJhdGlvbi4KICBQYXRjaGVzIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDIxIEphbiAyMDA1OgoKKiBBZGQgc3VwcG9ydCBmb3IgQU1EJ3MgUGIxeDAwIGV2YWwgYm9hcmQ7CiAgYWRkIE1JSSByb3V0aW5lcyB0byB0aGUgYXUxeDAwIGV0aGVybmV0IGRyaXZlcjsKICBhZGQgVVNCIG9oY2kgZHJpdmVyICh3b3JrIGluIHByb2dyZXNzKQogIFBhdGNoIGJ5IFRob21hcyBTYWlsZXIsIDIwIEphbiAyMDA1CgoqIFVwZGF0ZSBvbWFwNTkxMm9zayBib2FyZAogIFVzZSBkcml2ZXJzL2NmaV9mbGFzaC5jIGluc3RlYWQgb2YgcHJpdmF0ZSBmbGFzaCBkcml2ZXI7CiAgUmVtb3ZlIGhhcmRjb2RlZCBwZXJzb25hbGl6ZWQgc2V0dGluZ3MgZnJvbSBvbWFwNTkxMm9zay5oOwogIEZpeCBzcGFjaW5nIHdpdGggKFJPKSBtYXJrcyBpbiAnZmxpbmZvJyBvdXRwdXQuCiAgUGF0Y2ggYnkgTWljaGFlbCBCZW5kemljaywgMTQgSmFuIDIwMDUKCiogRml4IHdhcm5pbmdzIGZvciBQQ0kgY29kZSBvbiBpeHAKICBQYXRjaCBieSBKb2UgPGxneHVlQHlhaG9vLmNvbT4sIDEzIEphbiAyMDA1CgoqIHZpcnRleDIgZml4IGZvciBib2d1cyBkb3dubG9hZCBlcnJvciBtZXNzYWdlcwogIFRoZSB2aXJ0ZXgyIEZQR0EgZG93bmxvYWQgY29kZSB3YXRjaGVzIGZvciBpbml0IGdvaW5nIGFjdGl2ZSBkdXJpbmcKICBhIGRvd25sb2FkIG9mIGNvbmZpZyBkYXRhIGFzIGFuIGVycm9yIGNvbmRpdGlvbi4gaW5pdCBhbHNvIGdvZXMKICBhY3RpdmUgYWZ0ZXIgYSBjb25maWd1cmF0aW9uIGlzIGZpbmlzaGVkIGluIGNvbmNlcnQgd2l0aCB0aGUgZG9uZQogIHNpZ25hbC4gU28gZmFyLCB0aGUgY29kZSBkb2VzIG5vdCBjaGVjayBmb3IgZG9uZSBhY3RpdmUgdW50aWwgYWxsCiAgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZGF0YSBpcyBzZW50LiBJZiBjb25maWd1cmF0aW9uIGRhdGEgaGFzIGEgZmV3CiAgZXh0cmEgcGFkIGJ5dGVzIGF0IHRoZSBlbmQsIHRoaXMgd291bGQgY2F1c2UgYW4gZXJyb3IgbWVzc2FnZSBldmVuCiAgdGhvdWdoIHRoZSBkb3dubG9hZCBoYWQgc3VjZWVkZWQuCiAgTk9URTogdmlydGV4MiBzbGF2ZSBzZXJpYWwgYW5kIHNwYXJ0YW4yIHZlcnNpb25zIG1heSBzdGlsbCBoYXZlIHRoZQogIHNhbWUgcHJvYmxlbS4KICBQYXRjaCBieSBBbmRyZXcgRHllciwgMTIgSmFuIDIwMDUKCiogT3B0aW1pemUgZmxhc2hfbWFrZV9jbWQgaW4gZHJpdmVycy9jZmlfZmxhc2guYyBmb3IgbGl0dGxlIGVuZGlhbgogIEZpeCAiV0FSTklORzogZmxhc2hfbWFrZV9jbWQ6IHVuc3VwcHBvcnRlZCBMaXR0bGVFbmRpYW4gbW9kZSIKICBtZXNzYWdlIHdoZW4gcHJvYmluZyBmb3Igbm9uZXhpc3RlbnQgZmxhc2ggaW4gbGl0dGxlIGVuZGlhbiBtb2RlLgogIEFzIGEgc2lkZSBlZmZlY3QgbW9yZSBlZmZpY2llbnQgYW5kIHNtYWxsZXIgY29kZSBpcyBnZW5lcmF0ZWQsCiAgd2hpY2ggaXMgYWx3YXlzIGEgR29vZCBUaGluZyAoVE0pLgogIFBhdGNoIGJ5IExhZGlzbGF2IE1pY2hsLCAyNCBTZXAgMjAwNQoKKiBVcGRhdGUgZm9yIFRGVFAgdXNpbmcgYSBmaXhlZCBVRFAgcG9ydAogIFVzZSB0aGUgYXBwcm92ZWQgZW52aXJvbm1lbnQgdmFyaWFibGUgbmFtZXMuIEFkZGVkICJ0ZnRwZHN0cCIgdG8KICBhbGxvdyBwb3J0cyBvdGhlciB0aGFuIDY5IHBlciBUb2x1bmF5IE9ya3VuJ3MgcmVjb21tZW5kYXRpb24uCiAgUGF0Y2ggYnkgSmVycnkgVmFuIEJhcmVuLCAxMiBKYW4gMjAwNQoKKiBBbGxvdyB0byBmb3JjZSBURlRQIHRvIHVzZSBhIGZpeGVkIFVEUCBwb3J0CiAgKEFkZCBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIENPTkZJR19URlRQX1BPUlQgYW5kIG9wdGlvbmFsIGVudgogIHZhcmlhYmxlIHRmdHBwb3J0KQogIFBhdGNoIGJ5IEplcnJ5IFZhbiBCYXJlbiwgMTAgSmFuIDIwMDUKCiogRml4IGV0aGVybmV0IHRpbWVvdXRzIG9uIGRiYXUxNTUwIGFuZCBvdGhlciBhdTF4MDAgc3lzdGVtcwogIFBhdGNoIGJ5IExlaWYgTGluZGhvbG0sIDI5IERlYyAyMDA0CgoqIENsZWFudXA6IGZpeCBicm9rZW4gYnVpbGRzCgoqIEZpeCBQSFkgYWRkcmVzcyBhcmd1bWVudCBwYXNzaW5nIHdpdGggbWlpIGluZm8gY29tbWFuZAogIFBhdGNoIGJ5IEFuZHJldyBEeWVyLCAyOCBEZWMgMjAwNAoKKiBDbGVhbnVwIChQUEM0eHggaXMgQU1DQyBub3cpCgoqIGVzZCBDUENJMkRQIGJvYXJkIGFkZGVkCiAgUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDIyIFNlcCAyMDA1CgoqIGVzZCBQTUM0MDUgYm9hcmQgdXBkYXRlZAogIFBhdGNoIGJ5IE1hdHRoaWFzIEZ1Y2hzLCAyMiBTZXAgMjAwNQoKKiBBZGQgU001MDEgc3VwcG9ydCB0byBISDQwNSBib2FyZC4KICBBZGQgc3VwcG9ydCBmb3IgZ3ppcCBjb21wcmVzc2VkIGJtcCdzIChDT05GSUdfVklERU9fQk1QX0daSVApLgogIEFkZCBzdXBwb3J0IGZvciBlZXByb20gd3JpdGUtZW5hYmxlIChDRkdfRUVQUk9NX1dSRU4pLgogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjIgU2VwIDIwMDUKCiogRml4IGF1dG9uZWdvdGlhdGlvbiBpbiB0c2VjIGV0aGVybmV0IGRyaXZlcgogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjEgU2VwIDIwMDUKCiogRml4IGJ1ZyBpbiBhdXRvX3VwZGF0ZSAodHJhYiBib2FyZCkKICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAxNiBTZXAgMjAwNQoKKiBGaXggY29tcHV0YXRpb24gb2YgZnJhbWVidWZmZXIgcGFsZXR0ZSBmb3IgOGJwcCBMQ0QgYml0bWFwcwogIFBhdGNoIGJ5IEZyYW5jZXNjbyBNYW5kcmFjY2ksIDE2IFNlcCAyMDA1CgoqIFVwZGF0ZSBjb25maWd1cmF0aW9uIGZvciBJTktBNHgwIGJvYXJkCgoqIFVwZGF0ZSBjb25maWd1cmF0aW9uIGZvciBQTTg1NCBib2FyZAogIEJhc2VkIG9uIHBhdGNoIGJ5IFIuIExvZWZmbCwgMjAgSnVsIDIwMDUKCiogQWRkIFBDSSBzdXBwb3J0IHRvIFRRTTg1NDAgYW5kIFRRTTg1NjAgYm9hcmRzCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNSBTZXAgMjAwNQoKKiBVcGRhdGUgQU1DQyBZb3NlbWl0ZSB0byBnZXQgYSBjb25zaXN0ZW50IHNldHVwIGZvciBhbGwgQU1DQyBldmFsCiAgYm9hcmRzIChiYXVkcmF0ZSwgZW52aXJvbm1lbnQuLi4pLiBGbGFzaCBkcml2ZXIgZml4ZWQuCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNSBTZXAgMjAwNQoKKiBGaXggcHJvYmxlbSBpbiA0NDBHUCBldGhlcm5ldCBkcml2ZXIgKGVib255KS4gQWRkIHN1cHBvcnQgZm9yIDJuZAogIGV0aGVybmV0IHBvcnQgb24gZWJvbnkuCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCA3IFNlcCAyMDA1CgoqIEFkZGVkIHN1cHBvcnQgZm9yIG10ZGRldm51bSBhbmQgbXRkZGV2bmFtZSB2YXJpYWJsZXMgKG10ZHBhcnRzIGNvbW1hbmQpCgoqIENoYW5nZSBkZWZhdWx0IGNvbnNvbGUgYmF1ZCByYXRlIGZvciBzdHh4dGMgYm9hcmQKCiogQWRkIEkyQyBzdXBwb3J0IHRvIFRRTTg1NDAgYW5kIFRRTTg1NjAgYm9hcmRzIChFRVBST00sIFJUQywgTE03NS1EVFQpLgogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMzEgQXVnIDIwMDUKCiogRml4IGRlZmF1bHQgY29tbWFuZCBzZXQgKGRvbid0IGluY2x1ZGUgQ0ZHX0NNRF9ESVNQTEFZIGNvbW1hbmQpCiAgUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDAyIFNlcCAyMDA1CgoqIENsZWFudXAKCiogRW5hYmxlIFNNNzEyIGRyaXZlciBzdXBwb3J0IGZvciBITUkxMDAxIGJvYXJkLgoKKiBGaXggcHJvYmxlbXMgd2l0aCBsZCB2ZXJzaW9uIDIuMTYgKGRvdCBvdXRzaWRlIHNlY3Rpb25zIHByb2JsZW0pCiAgUG9pbnRlZCBvdXQgYnkgR2VyaGFyZCBKYWVnZXIsIDMxIEF1ZyAyMDA1OwogIGNmLiBodHRwOi8vc291cmNld2FyZS5vcmcvbWwvYmludXRpbHMvMjAwNS0wOC9tc2cwMDQxMi5odG1sCgoqIFByZXBhcmUgVS1Cb290IGZvciBnY2MtNC54OiBmaXggZ2xvYmFsIGRhdGEgcG9pbnRlciBpbml0aWFsaXphdGlvbgoKKiBBZGp1c3QgQ1MzIHRpbWluZ3Mgb24gSE1JMTAwMSBib2FyZCBmb3IgZG90IG1hdHJpeCBkaXNwbGF5IHVuZGVyIExpbnV4CgoqIEFkZCBrZXlib2FyZCBhbmQgZG90IG1hdHJpeCBkaXNwbGF5IHN1cHBvcnQgZm9yIEhNSTEwMDEgYm9hcmQuCgoqIFByZXBhcmUgVS1Cb290IGZvciBnY2MtNC54CgoqIEZpeGVkIEJhbWJvbyBwb3J0IHRvIGVuYWJsZSBydW5uaW5nIHdpdGhvdXQgRERSLURJTU0KICAoQmFtYm9vIGhhcyBhbHNvIDY0TUIgb25ib2FyZCBERFIpCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyNCBBdWcgMjAwNQoKKiBNZXJnZWQgNDA1Z3BfZW5ldC5jIGFuZCA0NDBneF9lbmV0LmMgdG8gZ2VuZXJpYyA0eHhfZW5ldC5jCiAgbm93IGhhbmRsaW5nIGFsbCA0eHggY3B1J3MKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE2IEF1ZyAyMDA1CgoqIEZpeCBtYWtlIGRlcGVuZGVuY2llcyBmb3IgYXQ5MXJtOTIwMCBhbmQga3M4Njk1IGNwdXMKICBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyMyBBdWcgMjAwNQoKKiBBZGQgSkZGUzIgc3VwcG9ydCBmb3IgVFFNNTIwMCBib2FyZAoKKiBBZGQgZXNkIGNwY2k1MjAwIGFuZCBwZjUyMDAgYm9hcmRzCiAgUGF0Y2ggYnkgUmVpbmhhcmQgQXJsdCwgMjIgQXVnIDIwMDUKCiogRml4IHN5c2Nsb2NrIGZvciBUUU04NTQwIGFuZCBUUU04NTYwIGJvYXJkcwogIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDI1IEp1bCAyMDA1CgoqIEluaXRpYWxpemUgc2VyaWFsIyBhbmQgZXRoYWRkciBmcm9tIG1hbnVmYWN0dXJlciBkYXRhIGluIEVFUFJPTSBvbiBDTUMtUFUyCiAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMDggSnVuIDIwMDUKCiogQWRkIG5ldyBib2FyZCBzcGVjaWZpYyBjb21tYW5kcyBmb3IgVFFNNTIwMC9TVEs1MlhYCiAgLSBTb3VuZCBjb21tYW5kcyAoYmVlcCwgd2F2LCBzb3VuZCkKICAtIFRlc3QgY29tbWFuZHMgKGxlZCwgY2FuLCBiYWNrbGlnaHQsIHJzMjMyKQogIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDAyIE1heSAyMDA1CgoqIENoYW5nZSBtYWluIGNsb2NrIG9uIENNQy1QVTIgYm9hcmQgZnJvbSAyMDcgTUh6IHRvIDE3OSBNSHoKICBiZWNhdXNlIG9mIGEgYnVnIGluIHRoZSBBVDkxUk05MjAwIENQVSBQTEwKICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyMiBBcHIgMjAwNQoKKiBBZGQgYXV0b21hdGljIEhXIGRldGVjdGlvbiBmb3IgYW5vdGhlciBDTUNfUFUyIHZhcmlhbnQKICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyMCBBcHIgMjAwNQoKKiBSZW1vdmUgQ09ORklHX0FUOTFSTTkyMDBESyBpbiBDTUMtUFUyIGNvbmZpZ3VyYXRpb24KICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAxOSBBcHIgMjAwNQoKKiBGaXggaW5pdGlhbGl6YXRpb24gcHJvYmxlbSBvbiBUUU01MjAwIHdpdGhvdXQgU001MDEKICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAwOCBBcHIgMjAwNQoKKiBBZGQgUlRDIHN1cHBvcnQgZm9yIFNUSzUyWFguMjAwCiAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMDcgQXByIDIwMDUKCiogQWRkIHN1cHBvcnQgZm9yIElGTSBvMmRudCBib2FyZAoKKiBFbmFibGUgUENJIG9uIGhtaTEwMDEgYm9hcmQKCiogRml4IHJldHVybiB2YWx1ZXMgb2YgdGhlIGpmZnMyIGNvbW1hbmRzIGxzL2ZzbG9hZC9mc2luZm8sCiAgc28gd2UgY2FuIHVzZSB0aGVtIHRvLCBlLmcuLCBjaGVjayB0aGUgZXhpc3RlbmNlIG9mIGEgZmlsZSB3aXRoCiAgImlmIGxzIGZvbzsgdGhlbiB0aGlzOyBlbHNlIHRoYXQ7IGZpIiBpbiB0aGUgaHVzaCBzaGVsbAogIFBhdGNoIGJ5IEFuZHJlYXMgRW5nZWwsIDE2IEF1Z3VzdCAyMDA1CgoqIENvZGluZyBzdHlsZSBjbGVhbnVwCgoqIEFkZCBzdXBwb3J0IGZvciBTaWxpY29uIFR1cm5rZXkgZVhwcmVzcyBYVGMgKG1wYzg3eC84OHgpIGJvYXJkLgogIFBhdGNoIGJ5IERhbiBNYWxlayBhbmQgUGFudGVsaXMgQW50b25pb3UsIDE1IEF1ZyAyMDA1CgoqIENoZWNrIHJldHVybiB2YWx1ZSBvZiBtYWxsb2MgaW4gNDQwZ3hfZW5ldC5jCiAgUGF0Y2ggYnkgVHJhdmlzIEIuIFNhd3llciwgMTggSnVsIDIwMDUKCiogQWRkIFNhbmRidXJzdCBNZXRyb2JveCBhbmQgU2FuZGJ1cnN0IEthcmVmIGJvYXJkIHN1cHBvcnQgcGFja2FnZXMuCiAgU2Vjb25kIHNlcmlhbCBwb3J0IG9uIDQ0MEdYIG5vdyBkZWZpbmVkIGFzIGEgc3lzdGVtIGRldmljZS4KICBBZGQgJ1Nob3J0IEV0Y2gnIGNvZGUgZm9yIENpY2FkYSBQSFkgd2l0aGluIDQ0MGd4X2VuZXQuYwogIFBhdGNoIGJ5IFRyYXZpcyBCLiBTYXd5ZXIsIDEyIEp1bCAyMDA1Cgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAxLjEuMzoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBNaW5vciBjb2RlIGNsZWFudXAKCiogQWRkIGZvcmdvdHRlbiBuZXcgZmlscyBmcm9tIGxhdGVzdCBWb2ljZUJsdWUgdXBkYXRlCgoqIE1ha2UgYm9vdHJldHJ5IGZlYXR1cmUgd29yayB3aXRoIGh1c2ggc2hlbGwuCiAgQ2F2ZWF0OiB0aGlzIGN1cnJlbnRseSAqcmVxdWlyZXMqIENPTkZJR19SRVNFVF9UT19SRVRSWSB0byBiZSBzZXQsIHRvby4KICBQYXRjaCBieSBBbmRyZWFzIEVuZ2VsLCAxOSBKdWwgMjAwNQoKKiBVcGRhdGUgSHltb2QgQm9hcmQgRGF0YWJhc2UgUEhQIGNvZGUgaW4gInRvb2xzIiBkaXJlY3RvcnkKICBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAwMSBKdWwgMjAwNQoKKiBNYWtlICJ0ciIgY29tbWFuZCB1c2UgUE9TSVggY29tcGxpYW50OyBleHBvcnQgSE9TVE9TIG1ha2UgdmFyaWFibGUKICBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAzMCBKdW4gMjAwNQoKKiBGaXggTXVycmF5IEplbnNlbidzIG1haWwgYWRkcmVzcy4KICBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAzMCBKdW4gMjAwNQoKKiBQcmVzZXJ2ZSBQSFlfQk1DUiBkdXJpbmcgYSBzb2Z0IHJlc2V0LgogIFBhdGNoIGJ5IENhcmwgUmllY2hlcnMsIDI0IEp1biAyMDA1CgoqIFZvaWNlQmx1ZSB1cGRhdGU6IGVlcHJvbSB0b29sIGNhbiBhbHNvIHN0b3JlIGZpcm13YXJlIHZlcnNpb24gbm93LgogIGVlcHJvbS5iaW4gaXMgcnVuYWJsZSBieSBqdW1waW5nIGF0IGxvYWQgYWRkcmVzcy4KICBQYXRjaCBieSBMYWRpc2xhdiBNaWNobCwgMjMgTWF5IDIwMDUKCiogTW92ZSB0aGUgQVQ5MVJNOTIwMERLIHRvIHRoZSBBUk0gU3lzdGVtcyBsaXN0LgogIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDI2IEFwciAyMDA1CgoqIEVsaW1pbmF0ZSBjYWxscyBvZiBBUk0gbGliZ2NjLmEgaGVscGVyIGZ1bmN0aW9ucyBfZGl2c2kzIGFuZCBfbW9kc2kzCiAgUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMjYgQXByIDIwMDUKCiogbWVhc3VyZV9nY2xrKCkgaXMgbmVlZGVkIHdoZW4gREVCVUcgaXMgZW5hYmxlZAogIFBhdGNoIGJ5IEJyeWFuIE8nRG9ub2dodWUsIDI1IEFwciAyMDA1CgoqIEFkZCBVUEQtQ2hlY2tzdW0gY29kZSwgZml4IHByb2JsZW0gaW4gbmV0LmMgKHJldHVybiBpbnN0ZWFkIG9mIGJyZWFrKQogIFBhdGNoIGJ5IFJlaW5oYXJkIEFybHQsIDEyIEF1ZyAyMDA1CgoqIGVzZCBQQ0k0MDUgYm9hcmQgdXBkYXRlZAogIFBhdGNoIGJ5IE1hdHRoaWFzIEZ1Y2hzLCAyOCBKdWwgMjAwNQoKKiBlc2QgV1VINDA1IGFuZCBEVTQwNSBib2FyZCB1cGRhdGVkCiAgUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDI3IEp1bCAyMDA1CgoqIEZpeCBwcm9ibGVtIGluIGNtZF9uYW5kLmMgKG9ubHkgd2hlbiBkZWZpbmVkIENGR19OQU5EX1NLSVBfQkFEX0RPVF9JKQogIFBhdGNoIGJ5IE1hdHRoaWFzIEZ1Y2hzLCA0IE1heSAyMDA1CgoqIFVwZGF0ZSBBTUNDIFlvc2VtaXRlIHRvIGdldCBhIGNvbnNpc3RlbnQgc2V0dXAgZm9yIGFsbCBBTUNDIGV2YWwKICBib2FyZHMgKGJhdWRyYXRlLCBlbnZpcm9ubWVudC4uLikuIEZsYXNoIGRyaXZlciBmaXhlZC4KICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDExIEF1ZyAyMDA1CgoqIENoYW5nZWQgQU1DQyBCdWJpbmdhICg0MDVFUCkgY29uZmlndXJhdGlvbiB0byBzdXBwb3J0IDJuZCBldGggcG9ydAogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTEgQXVnIDIwMDUKCiogQWRkIE5BTkQgRkxBU0ggc3VwcG9ydCBmb3IgQU1DQyBCYW1ib28gNDQwRVAgZXZhbCBib2FyZAogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTEgQXVnIDIwMDUKCiogQWRkIGNvbmZpZ3VyYXRpb24gZm9yIElGTSBBRVYgRklGTyBib2FyZC4KICBNaW5vciBjb2Rpbmcgc3R5bGUgY2xlYW51cC4KCiogQWRkIGNvbmZpZ3VyYXRpb24gZm9yIElGTSBTUEkgZXZhbCBib2FyZAoKKiBGaXggQ29tcGFjdEZsYXNoIHByb2JsZW0gb24gSE1JMTAwMSBib2FyZAoKKiBNYWtlIG5ldyAibXRkcGFydHMiIGNvZGUgYnVpbGQgd2l0aCBvbGRlciBjb21waWxlcnMKICBQYXRjaCBieSBBbmRyZWEgU2NpYW4sIDA5IEF1ZyAyMDA1CgoqIENoYW5nZWQgQ09ORklHXzQ0MF9HWCwgQ09ORklHXzQ0MF9FUCBhbmQgQ09ORklHXzQ0MF9HUiBvcHRpb25zIHRvCiAgQ09ORklHXzQ0R1gsIENPTkZJR180NDBFUCBhbmQgQ09ORklHXzQ0MEdSIGZvciBhIGNvbnNpc3RlbnQgZGVzaWduCiAgd2l0aCB0aGUgNDA1IGRlZmluZXMgYW5kIHRoZSBsaW51eCBrZXJuZWwgZGVmaW5lcy4KICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA4IEF1ZyAyMDA1CgoqIEZpeCBjb21waWxlciB3YXJuaW5ncyB3aXRoIG9sZGVyIEdDQyB2ZXJzaW9ucwoKKiBBZGQgY29tbW9uICh3aXRoIExpbnV4KSBNVEQgcGFydGl0aW9uIHNjaGVtZSBhbmQgIm10ZHBhcnRzIiBjb21tYW5kCgogIE9sZCwgb2Jzb2xldGUgYW5kIGR1cGxpY2F0ZWQgY29kZSB3YXMgY2xlYW5lZCB1cCBhbmQgcmVwbGFjZSBieSB0aGUKICBuZXcgcGFydGl0aW9uaW5nIG1ldGhvZC4gVGhlcmUgYXJlIHR3byBwb3NzaWJsZSBhcHByb2FjaGVzIG5vdzoKCiAgVGhlIGZpcnN0IG9uZSBpcyB0byBkZWZpbmUgYSBzaW5nbGUsIHN0YXRpYyBwYXJ0aXRpb246CgogICN1bmRlZiBDT05GSUdfSkZGUzJfQ01ETElORQogICNkZWZpbmUgQ09ORklHX0pGRlMyX0RFVgkJICJub3IwIgogICNkZWZpbmUgQ09ORklHX0pGRlMyX1BBUlRfU0laRQkgMHhGRkZGRkZGRgkvKiB1c2Ugd2hvbGUgZGV2aWNlICovCiAgI2RlZmluZSBDT05GSUdfSkZGUzJfUEFSVF9TSVpFCSAweDAwMTAwMDAwCS8qIHVzZSAxTUIgKi8KICAjZGVmaW5lIENPTkZJR19KRkZTMl9QQVJUX09GRlNFVAkgMHgwMDAwMDAwMAoKICBUaGUgc2Vjb25kIG1ldGhvZCB1c2VzIHRoZSBtdGRwYXJ0cyBjb21tYW5kIGxpbmUgb3B0aW9uIGFuZCBkeW5hbWljCiAgcGFydGl0aW9uaW5nOgoKICAvKiBtdGRwYXJ0cyBjb21tYW5kIGxpbmUgc3VwcG9ydCAqLwogICNkZWZpbmUgQ09ORklHX0pGRlMyX0NNRExJTkUKICAjZGVmaW5lIE1URElEU19ERUZBVUxUCSAibm9yMT16dW1hLTEsbm9yMj16dW1hLTIiCiAgI2RlZmluZSBNVERQQVJUU19ERUZBVUxUCSAibXRkcGFydHM9enVtYS0xOi0oamZmczIpLHp1bWEtMjotKHVzZXIpIgoKICBDb21tYW5kIGxpbmUgb2YgY291cnNlIHByb2R1Y2VzIGJpZ2dlciBpbWFnZXMsIGFuZCBtYXkgYmUgaW5hcHByb3ByaWF0ZQogIGZvciBzb21lIHRhcmdldHMsIHNvIGJ5IGRlZmF1bHQgaXQncyBvZmYuCgoqIEZpeCBidWlsZCBwcm9ibGVtcyBmb3IgUE04NTYgQm9hcmQKCiogRml4IHNpZ24gZXh0ZW5zaW9uIGJ1ZyBpbiAnZnBnYSBsb2FkYicgY29tbWFuZDsKICBtYWtlICdmcGdhIGxvYWRiJyBhbHdheXMgcHJpbnQgdGhlIGZpbGUgaGVhZGVyIGluZm8KICBQYXRjaCBieSBBbmRyZXcgRHllciwgMTEgSmFuIDIwMDUKCiogRml4IGVycm9ycyB0aGF0IG9jY3VyIHdoZW4gYWNjZXNzaW5nIFN5c3RlbUFDRSBDRgogIFBhdGNoIGJ5IEplZmYgQW5naWVsc2tpLCAwOSBKYW4gMjAwNQoKKiBEb2N1bWVudCBzd2l0Y2hpbmcgYmV0d2VlbiBVLUJvb3QgYW5kIFBsYW5ldENvcmUgb24gUlBYbGl0ZQogIGJ5IFNhbSBTb25nLCAyNCBEZWMgMjAwNAoKKiBGaXggUG93ZXJRVUlDQyBJSSBtYXNrIGRldGVjdGlvbi4KICBQYXRjaCBieSBFdWdlbmUgU3Vyb3ZlZ2luLCAyMCBEZWMgMjAwNAoKKiBBZGQgc3VwcG9ydCBmb3IgQWx0ZXJhIE5JT1MgREsxQzIwIGJvYXJkCiAgUGF0Y2ggYnkgU2hsb21vIEt1dCwgMTMgRGVjIDIwMDQKCiogQWRkIHN1cHBvcnQgZm9yIGVwODI0OCBib2FyZAogIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDEyIERlYyAyMDA0CgogIE1pbm9yIGNvZGUgY2xlYW51cC4KCiogRml4IGJhdWRyYXRlIHNldHRpbmcgZm9yIEtHREIgb24gTVBDODI2MAogIFBhdGNoIGJ5IEhvSmluLCAxMSBEZWMgMjAwNAoKKiBGaXggJ21paSBoZWxwJyB0ZXh0IGZvcm1hdHRpbmcKICBQYXRjaCBieSBDb3J5IFR1c2FyLCAxMCBEZWMgMjAwNAoKKiBGaXggcmV0dXJuIGNvZGUgb2YgTkZTIGNvbW1hbmQKICBQYXRjaCBieSBIaXJvc2hpIEl0bywgMTEgRGVjIDIwMDQKCiogRml4IHR5cG8KCiogRml4IGNvbXBpbGVyIHdhcm5pbmdzIGluIGNwdS9wcGM0eHgvdXNiZGV2LmMKICBQYXRjaCBieSBTdGV2ZW4gQmxha2VzbGVlLCAwNCBBdWcgMjAwNQoKKiBBZGQgc3VwcG9ydCBmb3IgQU1DQyBCYW1ib28gUFBDNDQwRVAgZXZhbCBib2FyZAogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDQgQXVnIDIwMDUKCiogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyCiAgRml4IHN0eWxlIGlzc3VlcyBwcmltYXJpbHkgaW4gODV4eCBhbmQgODN4eCBib2FyZHMuCiAgICAtIEMrKyBjb21tZW50cwogICAgLSBUcmFpbGluZyB3aGl0ZSBzcGFjZQogICAgLSBJbmRlbnRhdGlvbiBub3QgYnkgVEFCCiAgICAtIEV4Y2Vzc2l2ZSBhbW91bnQgb2YgZW1wdHkgbGluZXMKICAgIC0gVHJhaWxpbmcgZW1wdHkgbGluZXMKCiogUGF0Y2ggYnkgUm9uIEFsZGVyLCAxMSBKdWwgMjAwNQogICAgQWRkIFhpYW5naHVhIFhpYW8gYW5kIEx1bnNoZW5nIFdhbmcncyBzdXBwb3J0IGZvciB0aGUKICAgIEdEQSBNUEM4NTQwIEVWQUwgYm9hcmQuCgoqIFBhdGNoIGJ5IEVyYW4gTGliZXJ0eQogIEFkZCBzdXBwb3J0IGZvciB0aGUgRnJlZXNjYWxlIE1QQzgzNDlBRFMgYm9hcmQuCgoqIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciwgMjUgSnVsIDIwMDUKICBNb3ZlIHRoZSBUU0VDIGRyaXZlciBvdXQgb2YgY3B1L21wYzg1eHggYXMgaXQgd2lsbCBiZSBzaGFyZWQKICBieSB0aGUgdXBjb21pbmcgbXBjODN4eCBmYW1pbHkgYXMgd2VsbC4KCiogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyLCAwNSBNYXkgMjAwNQogIEltcGxlbWVudGVkIHN1cHBvcnQgZm9yIE1QQzg1NDhDRFMgYm9hcmQuCiAgQWRkZWQgRERSIElJIHN1cHBvcnQgYmFzZWQgb24gU1BEIHZhbHVlcyBmb3IgTVBDODV4eCBib2FyZHMuCiAgVGhpcyByb2xsLXVwIHBhdGNoIGFsc28gaW5jbHVkZXMgYnVnZmllcyBmb3IgdGhlIHByZXZpb3VzbHkKICBwdWJsaXNoZWQgcGF0Y2hlczoKICAgIEREUklJIENQTywgcHJlIGVUU0VDLCA4NTQ4IExCSVUsIEFuZHkncyBUU0VDLCBlVFNFQyAzJjQgSS9PCgoqIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciwgMTAgRmViIDIwMDUKICBBZGQgY29uZmlnIG9wdGlvbiBDT05GSUdfSEFTX0ZFQyBjYWxsaW5nIG91dCA4NTQwIEZFQyBmZWF0dXJlcy4KCiogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyLCBLdW1hciBHYWxhLCAwOCBGZWIgMjAwNQogIEZvciBNUEM4NXh4Q0RTOgogICAgQWRkcyBSZWxheGVkIFRpbWluZyBUUkxYIGJpdCB0byBGTEFTSCBPUnggcmVncyB0byBhbGxvdwogICAgZm9yIGZhc3RlciBmbGFzaCBwYXJ0cy4KICAgIEFkZCBkb2N1bWVudGF0aW9uIGZvciBCUi9PUiBmb3IgRkxBU0guCgoqIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciAwOCBGZWIgMjAwNQogIERldGVybWluZSBMMiBDYWNoZSBzaXplIGR5bmFtaWNhbGx5IG9uIDg1WFggYm9hcmRzLgoKKiBQYXRjaCBieSBKb24gTG9lbGlnZXIsIEt1bWFyIEdhbGEgMDggRmViIDIwMDUKICAtIENvbnZlcnQgdGhlIENQTTIgYmFzZWQgZnVuY3Rpb25hbGl0eSB0byB1c2UgbmV3IENPTkZJR19DUE0yCiAgICBvcHRpb24gcmF0aGVyIHRoYW4gYSBteXJpYWQgb2YgQ09ORklHX01QQzg1NjAtbGlrZSB2YXJpYW50cy4KICAgIEFwcGxpZXMgdG8gTVBDODV4eCBhbmQgTVBDODI2MCBib2FyZHMsIGluY2x1ZGVzIHN0eGdwMyBhbmQgc2JjODU2MC4KICAgIEVsaW1pbmF0ZXMgdGhlIENPTkZJR19NUEM4NTYwIG9wdGlvbiBlbnRpcmVseS4gIERpc3RyaWJ1dGVzIHRoZQogICAgbmV3IENPTkZJR19DUE0yIG9wdGlvbiB0byBlYWNoIDgyNjAgYm9hcmQuCgoqIEFkZCBzdXBwb3J0IGZvciBNaWNyb1N5cyBQTTg1NiBib2FyZAogIFBhdGNoIGJ5IEpvc2VmIFdhZ25lciwgMDMgQXVnIDIwMDUKCiogTWlub3IgZml4ZXMgdG8gUE04NTQgYm9hcmQKICBQYXRjaCBieSBKb3NlZiBXYWduZXIsIDAzIEF1ZyAyMDA1CgoqIEFkanVzdCBjb25maWd1cmF0aW9uIG9mIFhFTklBWCBib2FyZAogIChjaGlwIHNlbGVjdCBhbmQgR1BJTyByZXF1aXJlZCBmb3IgVVNCIG9wZXJhdGlvbikKCiogRml4IHR5cG9zIGluIGNwdS84NXh4L3N0YXJ0LlMgd2hpY2ggY2F1c2VkIERhdGFUTEIgZXhjZXB0aW9uIHRvIGJlCiAgcm91dGVkIHRvIHRoZSBXYXRjaGRvZyBoYW5kbGVyCiAgUGF0Y2ggYnkgRXVnZW5lIFN1cm92ZWdpbiwgMTggSnVuIDIwMDUKCiogKHJlKWVuYWJsZWQgc2NzaSBjb21tYW5kcyBkb19zY3NpKCkgYW5kIGRvX3Njc2lib290KCkKICBQYXRjaCBieSBEZW5pcyBQZXRlciwgMDYgRGVjIDIwMDQKCiogRml4IGVuZGlhbmVzcyBwcm9ibGVtIGluIFRGVFAgLyBORlMgZGVmYXVsdCBmaWxlbmFtZXMKICBQYXRjaCBieSBIaXJvc2hpIEl0bywgMDYgRGVjIDIwMDQKCiogSWdub3JlIGJyb2FkY2FzdCBzdGF0dXMgYml0IGluIHJlY2VpdmVkIGZyYW1lcyBpbiA4MjYwIEZDQyBldGhlcm5ldAogIGxvb3BiYWNrIHRlc3QgY29kZQogIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDE4IEp1bCAyMDA1CgoqIEZpeCB0eXBvIGluIG1rY29uZmlnIHNjcmlwdCAodXNlZCA9PSBpbnN0ZWFkIG9mID0pCiAgUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMTggSnVsIDIwMDUKCiogQ2xlYW51cCBidWlsZCBwcm9ibGVtcyBvbiA2NCBiaXQgYnVpbGQgaG9zdHMKCiogVXBkYXRlIE1BSU5UQUlORVJTIGZpbGUKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwMSBBdWcgMjAwNToKICAtIE1ham9yIGNsZWFudXAgZm9yIEFNQ0MgZXZhbCBib2FyZHMgV2FsbnV0LCBCdWJpbmdhLCBFYm9ueSwgT2NvdGVhCiAgICAoZm9ybWVyIElCTSBldmFsIGJvYXJkKS4gUGxlYXNlIHNlZSAiZG9jL1JFQURNRS5BTUNDLWV2YWwtYm9hcmRzLWNsZWFudXAiCiAgICBmb3IgZGV0YWlscy4KICAtIFN5Y2Ftb3JlIChQUEM0MDVHUHIpIGV2YWwgYm9hcmQgYWRkZWQgKFdhbG51dCBwb3J0IGlzIGV4dGVuZGVkCiAgICB0byBydW4gb24gYm90aCA0MDVHUCBhbmQgNDA1R1ByIGV2YWwgYm9hcmRzKS4KCiogUGF0Y2ggYnkgU3RldmVuIEJsYWtlc2xlZSwgMjcgSnVsIDIwMDU6CiAgLSBBZGQgc3VwcG9ydCBmb3IgQU1DQyBQUEM0NDBFUC9HUi4KICAtIEFkZCBzdXBwb3J0IGZvciBBTUNDIFlvc2VtaXRlIFBQQzQ0MEVQIGV2YWwgYm9hcmQuCiAgLSBBZGQgc3VwcG9ydCBmb3IgQU1DQyBZZWxsb3dzdG9uZSBQUEM0NDBHUiBldmFsIGJvYXJkLgoKKiBNaW5vciBmaXhlcyBmb3IgUFBDaGFtZWxlb24gQm9hcmQ6CiAgLSBmaXggYWxpZ25tZW50IG9mIE5BTkQgc2l6ZQogIC0gbWFrZSBjb2RlIGRvIHdoYXQgdGhlIGNvbW1lbnQgc2F5cwoKKiBJbXBsZW1lbnQgaC93IHNlY3RvciBwcm90ZWN0aW9uIHN0YXR1cyBzeW5jaHJvbml6YXRpb24gYXQgYm9vdC4KICBUaGUgY29kZSBpcyBwcm92aWRlZCBmb3IsIGFuZCB3YXMgdGVzdGVkIG9uLCB0aGUgWXVrb24vQWxhc2thCiAgYW5kIFBNNTIwIGJvYXJkcyBvbmx5LgoKICBBIGJ1ZyBpbiBmbGFzaF9yZWFsX3Byb3RlY3QoKSBmb3IgdGhlIFl1a29uIGJvYXJkIHdhcyBmaXhlZCBieQogIGFkZGluZyBhIGZ1bmN0aW9uIHRoYXQgdGVsbHMgaWYgdHdvIGJhbmtzIGFyZSBvbiBvbmUgZmxhc2ggY2hpcC4KCiogRml4IHN5c21vbiBQT1NUIHByb2JsZW06IGNoZWNrIEkyQyBlcnJvciBjb2RlcwogIFRoaXMgZml4ZXMgYSBwcm9ibGVtIG9mIGRpc3BsYXlpbmcgYm9ndXMgdm9sdGFnZXMgd2hlbiB0aGUgdm9sdGFnZXMKICBhcmUgc28gbG93IHRoYXQgdGhlIEkyQyBkZXZpY2VzIHN0YXJ0IGZhaWxpbmcgd2hpbGUgdGhlIHJlc3Qgb2YgdGhlCiAgc3lzdGVtIGtlZXBzIHJ1bm5pbmcuCgoqIFBhdGNoIGJ5IENlZHJpYyBWaW5jZW50LCA2IEp1bCAyMDA1OgogIEZpeCBDRkdfQ01EX1NFVEdFVERDUiBoYW5kbGluZyBpbiAiY29tbW9uL2NtZF9kY3IuYyIKCiogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyLCAyMCBKdWwgMjAwNToKICBBZGQgbWlzc2luZyBQQ0kgSU8gcG9ydCBkZWZpbml0aW9ucy4KCiogQWRkIENvbXBhY3RGbGFzaCBzdXBwb3J0IGZvciBITUkxMDAxIGJvYXJkLgoKKiBBZGp1c3QgcHJpbnRlZCBib2FyZCBJRCBmb3IgTFdNT04gYm9hcmQuCgoqIEZpeCBsb3ctbGV2ZWwgT0hDSSB0cmFuc2ZlcnMgZm9yIEFSTTkyMHQgYW5kIE1QQzV4eHgKCiogQWRkIG5ldyBhcmd1bWVudCBmb3JtYXQgZm9yIGZsYXNoIGNvbW1hbmRzIHRvIGFsbG93IGZvciB1c2FnZSBsaWtlCiAgImVyYXNlICQoYWRkcikgKyQoZmlsZXNpemUpIiwgaS4gZS4gYSBzaXplIGFyZ3VtZW50IGNhbiBiZSB1c2VkIGFuZAogIFUtQm9vdCB3aWxsIGF1dG9tYXRpY2lhbGx5IGZpbmQgdGhlIGVuZCBvZiB0aGUgY29ycmVzcG9uZGluZyBzZWN0b3IuCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgNSBKdWwgMjAwNToKICBVcGRhdGUgdWMxMDAgYm9hcmQgUEhZIHNldHVwCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMSBKdWwgMjAwNToKICBGaXggUEhZIGFkZHJlc3MgZm9yIENBVGNlbnRlciBib2FyZCAobm93IGNvcnJlY3QhKQoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDMwIEp1biAyMDA1OgogIEZpeCBQSFkgYWRkcmVzc2VzIGZvciBQUENoYW1lbGVvbiBhbmQgQ0FUY2VudGVyIGJvYXJkcwogIENoYW5nZSBNQUlOVEFJTkVSIGZvciBtb3N0IGVzZCBib2FyZHMKCiogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMzAgSnVuIDIwMDU6CiAgRml4IExDRCBsb2dvIGZvciBsd21vbiBib2FyZCB3aGljaCBnb3QgbG9zdCBpbiB0aGUgbWVyZ2Ugb2YgOHh4IGFuZCBQWEEgTENEIGNvZGUKCiogRml4IGJhdWRyYXRlIGNhbGN1bGF0aW9uIHByb2JsZW0gb24gTVBDNTIwMCBzeXN0ZW1zCgoqIEFkZCBFRVBST00gYW5kIFJUQyBzdXBwb3J0IGZvciBITUkxMDAxIGJvYXJkCgoqIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDIwIEp1biAyMDA1OgogIEZpeCBpbml0aWFsaXphdGlvbiBvZiBsb3cgYWN0aXZlIEdQSU8gcGlucyBvbiBpbmthNHgwIGJvYXJkCgoqIEVuYWJsZSByZWR1bmRhbnQgZW52aXJvbm1lbnQsIGRpc2FibGUgSFcgZmxhc2ggcHJvdGVjdGlvbiBvZgogIEhNSTEwMDEgYm9hcmQKCiogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMTAgSnVuIDIwMDU6CiAgSW5pdGlhbGl6ZSBhbGxvY2F0ZWQgZGV2IGFuZCBwcml2YXRlIGh3IHN0cnVjdHVyZXMKICBhZnRlciB0aGVpciByZXNwZWN0aXZlIGFsbG9jYXRpb24gaW4gNDQwZ3hfZW5ldC5jCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDEwIEp1biAyMDA1OgogIEZpeCBieXRlb3JkZXIgcHJvYmxlbXMgd2l0aCBzZWNvbmQgYXJndW1lbnQgb2YgImJvb3RtIiB3aXRoCiAgc3RhbmRhbG9uZSBpbWFnZXM7CgoqIEFkZCBzdXBwb3J0IGZvciBITUkxMDAxIGJvYXJkCgoqIERpc2FibGUgImRhdGUiIGFuZCAic250cCIgY29tbWFuZHMgb24gVFFNODY2TQoKKiBGaXggd2F0Y2hkb2cgcmVzZXQgcHJvYmxlbXMgb24gTFdNT04gYm9hcmQKCiogUGF0Y2ggYnkgSnVlcmdlbiBTZWxlbnQsIDE3IE1heSAyMDA1OgogIEFkZCBzdXBwb3J0IGZvciBGdW5rd2VyayBWb1ZQTiBnYXRld2F5IG1vZHVsZS4KCiogQ2xlYW51cCBkZWJ1ZyBjb2RlIGZvciBNUEM4MjIwIEZFQyBkcml2ZXIKCiogRXh0ZW5kIGJ1cnN0IG1vZGUgUkFNIHRlc3QgcHJvZ3JhbSB0byB0YWtlIGEgbG9vcCBjb3VudAogICgwID0gaW5maW5pdGUpCgoqIFVzZSBDT05GSUdfRFJJVkVSX0tTODY5NUVUSCB0byBlbmFibGUgS1M4Njk1IGV0aGVybmV0IGRyaXZlciBvbgogIHRob3NlIGJvYXJkcyB0aGF0IHVzZSBpdC4KCiogUGF0Y2hlcyBieSBHcmVnIFVuZ2VyZXIsIDE5IE1heSAyMDA1OgogIC0gYWRkIHN1cHBvcnQgZm9yIHRoZSBLUzg2OTVQIChBUk0gOTIyIGJhc2VkKSBDUFUKICAtIGFkZCBzdXBwb3J0IGZvciB0aGUgT3BlbkdlYXIgQ000MDA4LCBDTTQxMTYgYW5kIENNNDE0OCBib2FyZHMKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTkgTWF5IDIwMDU6CiAgQWRkIHN1cHBvcnQgZm9yIENPTkZJR19TRVJJQUxfVEFHIG9uIEFSTSBib2FyZHMKCiogQWRkIFBDSSBzdXBwb3J0IGZvciBTb3JjZXJ5IGJvYXJkLgogIENvZGUgY2xlYW51cCAoZXNwZWNpYWxseSBTb3JjZXJ5IC8gQWxhc2thIC8gWXVrb24gc2VyaWFsIGRyaXZlcikuCgoqIEZpeCBjb21waWxlIHByb2JsZW1zIGNhdXNlZCBieSBuZXcgYnVyc3QgbW9kZSBTRFJBTSB0ZXN0OwogIG1ha2UgcG9ydCBwaW5zIHRvIHRyaWdnZXIgbG9naWMgYW5hbHl6ZXIgY29uZmlndXJhYmxlCgoqIEZpeCB0aW1lciBoYW5kbGluZyBvbiBNUEM4NXh4IHN5c3RlbXMKCiogRml4IGRlYnVnIGNvZGUgaW4gb21hcDU5MTJvc2sgZmxhc2ggZHJpdmVyCgoqIEFkZCBzdXBwb3J0IGZvciBNUEM4MjQ3IGJhc2VkICJJRFM4MjQ3IiBib2FyZC4KCiogQWRkIHN1cHBvcnQgZm9yIDIgeCBUU0VDIGludGVyZmFjZXMgb24gdGhlIFRRTTg1NDAgYm9hcmQuCgoqIE9uIExXTU9OIHdlIG11c3QgdXNlIHRoZSB3YXRjaGRvZyB0byByZXNldCB0aGUgYm9hcmQgYXMgdGhlIENQVQogIGdlbmVyZWF0ZWQgSFJFU0VUIHB1bHNlIGlzIHRvbyBzaG9ydCB0byByZXNldCB0aGUgZXh0ZXJuYWwKICBjaXJjdWl0cnkuCgoqIEFkZCB0ZXN0IHRvb2wgdG8gZXhlcmNpc2UgU0RSQU0gYWNjZXNzZXMgaW4gYnVyc3QgbW9kZQogIChhcyBzdGFuZGFsb25lIHByb2dyYW0sIE1QQzh4eC9Qb3dlclBDIG9ubHkpCgoqIEluY3JlYXNlIENGR19NT05JVE9SX0xFTiBmb3IgUmF0dGxlciBib2FyZCB0byBtYXRjaCBhY3R1YWwgY29kZQogIHNpemUuCgoqIE1ham9yIHVwYXRlIG9mIEpGRlMyIGNvZGU7IG5vdyBpbiBzeW5jIHdpdGggc25hcHNob3Qgb2YgTVREIENWUyBvZgogIE1hcmNoIDEzLCAyMDA1KTsgbmV3IGNvbmZpZ3VyYXRpb24gb3B0aW9uIENPTkZJR19KRkZTMl9MWk9fTFpBUkkKICBhZGRlZCB0byBzdXBwb3J0IExaTyBhbmQgTFpBUkkgY29tcHJlc3Npb24gbW9kZXMgKHVuZGVmaW5lZCBieQogIGRlZmF1bHQpLgoKKiBGaXggcHJvYmxlbSB3aXRoIHN5bWJvbGljIGxpbmtzIGluIEpGRlMyIGNvZGUuCgoqIFVzZSBsaW5rZXIgQVNTRVJUIHN0YXRlbWVudCB0byBwcmV2ZW50IHVuZGV0ZWN0ZWQgb3ZlcmxhcHBpbmcgb2YKICBzZWN0aW9ucyBvbiBQUENoYW1lbGVvbiBib2FyZDsgb3RoZXIgYm9hcmRzIG1pZ2h0IHVzZSB0aGlzLCB0b28uCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDMgTWF5IDIwMDU6CiAgVXBkYXRlIGZvciBQM0c0CiAgRml4IHByb2JsZW1zIGluIGNtZF91bml2ZXJzZS5jCgoqIFBhdGNoIGJ5IE1hdHRoaWFzIEZ1Y2hzLCAwMyBNYXkgMjAwNToKICBBZGRlZCBtaXNzaW5nIHZhcmlhYmxlIGRlY2xhcmF0aW9uIGluIGNtZF9uYW5kLmMKICBNb2RpZmllZCBDRkdfUENJX1BUTTFNUyBpbiBjb25maWdzL1BMVTQwNS5oIHRvIG1hcCAxMjhNQiByYW0KCiogRml4IElOS0E0eDA6IHVzZSBDUzEgYXMgZ3Bpb193a3VwXzYgb3V0cHV0CgoqIEZpeCBidWcgaW4gdGhlIFNEUkFNIGluaXRpYWxpemF0aW9uIGNvZGUgZm9yIGNhbm1iLCBJY2VDdWJlIGFuZAogIFBNNTIwIGJvYXJkcy4KICBGaXggUEhZIGFkZHJlc3MgZm9yIGNhbm1iIGJvYXJkLgoKKiBDbGVhbnVwIHNlcmlhbCBjb25zb2xlIGJhdWRyYXRlIGNhbGN1bGF0aW9uIG9uIEFUOTFSTTkyMDA7CiAgZ2V0IHJpZCBvZiBvYnNvbGV0ZSBDRkdfQVQ5MUNfQlJHUl9ESVZJU09SIGRlZmluaXRpb24KCiogUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDE4IEFwciAyMDA1OgogIE1ha2UgUENJIHRhcmdldCBhZGRyZXNzIHNwYWNlcyBvbiBQTUM0MDUgYW5kIENQQ0k0MDUgYm9hcmRzCiAgY29uZmlndXJhYmxlIHZpYSBlbnZpcm9ubWVudCB2YXJpYWJsZXMKCiogQXV0by1zaXplIFJBTSBvbiBjYW5tYiBib2FyZC4KCiogQWRkIHN1cHBvcnQgZm9yIGNhbm1iIGJvYXJkCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTMgQXByIDIwMDU6CiAgVXBkYXRlIGZvciBlc2QgYXBjNDA1CgoqIEZpeGVzIGZvciBUUU04NTYwIGJvYXJkOgogIC0gZml4IGNsb2NrIHJhdGVzCiAgLSByZW1vdmUgZGVidWcgbWVzc2FnZXMKICAtIGZpeCBmbGFzaCBzZWN0b3IgcHJvdGVjdGlvbgoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAwNyBBcHIgMjAwNToKICBBZGQgaTJjX3JlZ193cml0ZSgpIGFuZCBpMmNfcmVnX3dyaXRlKCkgZm9yIGF0OTFybTkyMDAgSTJDCgoqIFBhdGNoZXMgYnkgU3RldmVuIFNjaG9seiwgMDcgQXByIDIwMDU6CiAgRml4IGNvbXBpbGVyIHdhcm5pbmcgaW4gYWx0ZXJhLmMKICBGaXggd2FybmluZyBpbiBjcHUvYXJtOTIwdC9hdDkxcm05MjAwL2kyYy5jCgoqIFBhdGNoIGJ5IExhZGlzbGF2IE1pY2hsLCAwNiBBcHIgMjAwNToKICBGaXggdm9pY2VibHVlIGNvbmZpZ3VyYXRpb24uCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDYgQXByIDIwMDU6CiAgVXBkYXRlcyBmb3IgT0NPVEVBIGJvYXJkOgogIC0gQ2hhbmdlZCBVLUJvb3Qgc2l6ZSBmcm9tIDUxMmtCeXRlIHRvIDI1NmtCeXRlCiAgLSBGaXhlZCBmbGFzaCBkcml2ZXIgdG8gc3VwcG9ydCBib290IGZyb20gc29sZGVyZWQgdXNlciBmbGFzaAogIC0gQWRkZWQgUkVBRE1FIGZvciBzd2l0Y2ggZnJvbSBQSUJTIGZpcm13YXJlIHRvIFUtQm9vdAoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAwNSBBcHIgMjAwNToKICAtIENoYW5nZSB0aW1lciBmcmVxdWVuY3kgZm9yIHBwYyA0NDAgZnJvbSAxMCBtcyB0byAxIG1zLgogICAgUHJvYmxlbSBmb3VuZCBieSBBbmRyZXcgV296bmlhay4KCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMDYgQXByIDIwMDU6CiAgLSBjcmVhdGluZyBTb0Mgc3ViZGlyIGZvciBBdG1lbCBBVDkxUk05MjAwIGNwdS9hcm05MjB0L2F0OTFybTkyMDAKICAtIG1vdmluZyBjb2RlIG91dCBvZiBjcHUvYXQ5MXJtOTIwMCBpbnRvIGNwdS9hcm05MjB0L2F0OTFybTkyMDAKCiogUGF0Y2hlcyBieSBSb2JlcnQgV2hhbGV5LCAyOSBOb3YgMjAwNDoKICAtIHVwZGF0ZSB0aGUgcHhhLXJlZ3MuaCBmaWxlIGZvciBQWEEyN3ggY2hpcHMKICAtIGFkZCBQWEEyN3ggYmFzZWQgQURTVklYIGJvYXJkCiAgLSBhZGQgc3VwcG9ydCBmb3IgTU1DIG9uIFBYQTI3eCBwcm9jZXNzb3JzCgoqIFBhdGNoIGJ5IEFuZHJldyBFLiBNaWxlc2tpLCAyOCBOb3YgMjAwNDoKICBGaXggUFBDNHh4IFNQRCBTRFJBTSBkZXRlY3Rpb24gYnVnCgoqIFBhdGNoIGJ5IEhpcm9zaGkgSXRvLCAyNiBOb3YgMjAwNDoKICBGaXggbG9naWMgb2YgInRlc3QgLXoiIGFuZCAidGVzdCAtbiIgY29tbWFuZHMKCiogUGF0Y2ggYnkgTGFkaXNsYXYgTWljaGwsIDA1IEFwciAyMDA1OgogIEFkZCBzdXBwb3J0IGZvciBWb2ljZUJsdWUgYm9hcmQuCgoqIFBhdGNoIGJ5IExhZGlzbGF2IE1pY2hsLCAwNSBBcHIgMjAwNToKICBGaXggbmV0Ym9vdF9jb21tb24oKSBwcm90b3R5cGVzLgoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAwNSBBcHIgMjAwNToKICBVc2UgaS5NWCB3YXRjaGRvZyB0aW1lciBmb3IgcmVzZXRfY3B1KCkKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMDUgQXByIDIwMDU6CiAgTW92ZSByZXNldF9jcHUoKSBvdXQgb2YgY3B1L2FybTkyMHQvc3RhcnQuUyBpbnRvIHRoZSBTb0Mgc3BlY2lmaWMKICBzdWJkaXJlY3RvcmllcyBjcHUvYXJtOTIwdC9pbXgvIGFuZCBjcHUvYXJtOTIwdC9zM2MyNHgwLwogIChub3cgaW4gaW50ZXJ1cHRzLmMpCgoqIEFkZCBzdXBwb3J0IGZvciBNUEM4MjIwIGJhc2VkICJzb3JjZXJ5IiBib2FyZC4KCiogQWRkIHN1cHBvcnQgZm9yIFRRTTg1NjAgYm9hcmQuCgoqIEFkZCBGRUMgc3VwcG9ydCBmb3IgVFFNODU0MCBib2FyZC4KICBJbnRlcmZhY2VzIGFyZSBuYW1lZCBhcyBmb2xsb3dzOiAiRU5FVDEiIC0gVFNFQzIsICJFTkVUMiIgLSBGRUMKCiogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMDQgQXByIDIwMDU6CiAgVXBkYXRlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgQ01DX1BVMiBib2FyZC4KCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMDQgQXByIDIwMDU6CiAgLSByZW1vdmUgYWxsIHJlZmVyZW5jZXMgdG8gQ09ORklHX0lOSVRfQ1JJVElDQUwgZm9yIEFSTSBiYXNlZCBib2FyZHMKICAtIGludHJvZHVjZSB0d28gbmV3IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpbnN0ZWFkOgogICAgQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVCBhbmQgQ09ORklHX1NLSVBfUkVMT0NBVEVfVUJPT1QKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMDQgQXByIDIwMDU6CiAgTWFrZSBzdXJlIHRoYXQgTURJTyBjbG9jayBkb2VzIG5vdCBleGNlZWQgMi41IE1IeiBvbiBBVDkxCgoqIEZpeCB0aW1lciBjb2RlIGZvciBBUk0gc3lzdGVtczogbWFrZSBzdXJlIHRoYXQgdWRlbGF5KCkgZG9lcyBub3QKICByZXNldCB0aW1lcnMgc28gaXQncyBzYXZlIHRvIHVzZSB1ZGVsYXkoKSBpbiB0aW1lb3V0IGNvZGUuCgoqIFBhdGNoIGJ5IE1hdGhpYXMgS/xzdGVyLCAyMyBOb3YgMjAwNDoKICBhZGQgdWRlbGF5IHN1cHBvcnQgZm9yIHRoZSBtY2Y1MjgyIGNwdQoKKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCAxNiBOb3ZlbWJlciAyMDA0OgogIGZpeCBpbmNvcnJlY3Qgb25ib2FyZCBYaWxpbnggQ1BMRCBiYXNlIGFkZHJlc3MKCiogUGF0Y2ggYnkgSmVycnkgVmFuIEJhcmVuLCAwOCBOb3YgMjAwNDoKICAtIEFkZCBsb3ctYm9vdCBvcHRpb24gZm9yIE1QQzgyNjBBRFMgYm9hcmQgKGlmIGxvd2Jvb3QgaXMgc2VsZWN0ZWQsCiAgICB0aGUganVtcGVyIGZvciB0aGUgSFJDVyBzb3VyY2Ugc2hvdWxkIHNlbGVjdCBmbGFzaC4gSWYgbG93Ym9vdCBpcwogICAgbm90IHNlbGVjdGVkLCB0aGUganVtcGVyIGZvciB0aGUgSFJDVyBzb3VyY2Ugc2hvdWxkIHNlbGVjdCB0aGUKICAgIEJDU1IuCiAgLSBjaGFuZ2UgZGVmYXVsdCBsb2FkIGJhc2UgYWRkcmVzcyB0byAweDAwNDAwMDAwCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDA4IE5vdiAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBBbmFsb2d1ZSAmIE1pY3JvIFJhdHRsZXIgYm9hcmRzLgogIFRlc3RlZCBvbiBSYXR0bGVyODI0OC4KCiogUGF0Y2ggYnkgQW5kcmUgUmVuYXVkLCAwOCBOb3YgMjAwNDoKICBGaXggd2F0Y2hkb2cgc3VwcG9ydCBpbiBjb21tb24vbGNkLmMKCiogUGF0Y2ggYnkgTWFyYyBMZWVtYW4sIDA1IE5vdiAyMDAzOgogIEVuYWJsZSBhbGwgNCBQQ01CUlcgYnVmZmVycyBmb3IgdGhlIE1QQzgyNDUgcHJvY2Vzc29yIHNpbmNlIHRoZSBDUFUKICBidWcgb25seSBhZmZlY3RzIHRoZSBYUEM4MjQ1IHByb2Nlc3NvcnMKCiogUGF0Y2hlcyBieSBKb3NlZiBXYWduZXIsIDI5IE9jdCAyMDA0OgogIC0gQWRkIHN1cHBvcnQgZm9yIE1pY3JvU3lzIENQVTg3IGJvYXJkCiAgLSBBZGQgc3VwcG9ydCBmb3IgTWljcm9TeXMgUE04NTQgYm9hcmQKCiogUGF0Y2ggYnkgSmlhbiBaaGFuZywgMDIgTm92IDIwMDQ6CiAgQWRkIDE2LWJpdCBOQU5EIHN1cHBvcnQKCiogUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAwMSBOb3YgMjAwNDoKICBBZGQgbWlzc2luZyBOSU9TL05JT1MyIHN1cHBvcnQgZm9yICJpbWluZm8iIGNvbW1hbmQKCiogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMjkgT2N0IDIwMDQ6CiAgQWRkIG1pc3NpbmcgTklPUy9OSU9TMiBzdXBwb3J0IGZvciAibWtpbWFnZSIgdG9vbC4KCiogUGF0Y2ggYnkgRGF2aWQgQWRhaXIsIDI3IE9jdCAyMDA0OgogIEFkZCBtaXNzaW5nIDQ0MEdYIFNEUkFNIENvbnRyb2xsZXIgcmVzZXQKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMjUgT2N0IDIwMDQ6CiAgRGVjbGFyZSByZXNldF9jcHUoKSBpbiBpbmNsdWRlL2NvbW1vbi5oIGluc3RlYWQgbG9jYWxseQoKKiBQYXRjaCBieSBZdXNkaSBTYW50b3NvLCAyMiBPY3QgMjAwNDoKICAtIEFkZCBzdXBwb3J0IGZvciBISURERU5fRFJBR09OIGJvYXJkCiAgLSBmaXggZW5kaWFuZXNzIHByb2JsZW0gaW4gZHJpdmVyL3J0bDE4MzkuYwoKKiBQYXRjaCBieSBBbGxlbiBDdXJ0aXMsIDIxIE9jdCAyMDA0OgogIHN1cHBvcnQgbXVsdGlwbGUgc2VyaWFsIHBvcnRzCgoqIFBhdGNoIGJ5IFJpY2hhcmQgS2xpbmdsZXIsIDAzIEFwciAyMDA1OgogIEFkZCBjYWxsIHRvIGV0aF9oYWx0KCkgaW4gbmV0L25ldC5jIHdoZW4gY2FsbGVkIGZ1bmN0aW9ucyBmYWlsCiAgYWZ0ZXIgZXRoX2luaXQoKSBoYXMgYmVlbiBjYWxsZWQuCgoqIFBhdGNoIGJ5IFNhbSBTb25nLCAzIEFwcmlsIDIwMDU6CiAgLSBVcGRhdGUgUkVBRE1FLk5ldGNvbnNvbGUKICAtIFVwZGF0ZSBSRUFETUUKCiogUHJlcGFyZSBmb3IgU29DIHJld29yayBvZiBBUk0gY29kZToKICAtIHJlbmFtZSBDT05GSUdfQk9PVEJJTkZVTkMgaW50byAgQ09ORklHX0lOSVRfQ1JJVElDQUwKICAtIHJlbmFtZSBtZW1zZXR1cCBpbnRvIGxvd2xldmVsX2luaXQgKGZ1bmN0aW9uIG5hbWUgYW5kIHNvdXJjZSBmaWxlcykKICBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAwMyBBcHIgMjAwNToKICAtIGNyZWF0ZSBTb0Mgc3BlY2lmaWMgZGlyZWN0b3JpZXMgaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14IGFuZAogICAgaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjR4MAoKKiBGaXggcHJvYmxlbXMgd2l0aCBTTlRQIHN1cHBvcnQ7CiAgZW5hYmxlIFNOVFAgc3VwcG9ydCBpbiBzb21lIGJvYXJkcy4KCiogUGF0Y2hlcyBieSBNYXJ0aW4gS3JhdXNlLCAwMSBBcHIgMjAwNToKICAtIEZpeCBmbGFzaCBlcmFzZSB0aW1lb3V0IG9uIENNQ19QVTIKICAtIEFkZCBhdXRvbWF0aWMgSFcgZGV0ZWN0aW9uIGZvciBDTUNfUFUyIGFuZCBDTUNfQkFTSUMKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTMgTWFyY2ggMjAwNToKICBmaXggY2FjaGUgZW5hYmxpbmcgZm9yIEFUOTFSTTkyMDAKCiogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMzAgTWFyIDIwMDU6CiAgYWRkIFNOVFAgc3VwcG9ydCBhbmQgZXhwYW5kIHRpbWUgc2VydmVyIGFuZCB0aW1lIG9mZnNldCBmaWVsZHMgb2YKICBESENQIHN1cHBvcnQuIFNlZSBkb2MvUkVBRE1FLlNOVFAKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTMgRGVjIDIwMDQ6CiAgRml4IGJ1ZyBpbiBhdDkxcm05MjAgZXRoZXJuZXQgZHJpdmVyCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDEzIERlYyAyMDA0OgogIFJlbW92ZSBkdXBsaWNhdGVkIGNvZGUgYnkgbWVyZ2luZyBtZW1zZXR1cC5TIGZpbGVzIGZvcgogIGF0OTFybTkyMDAgYm9hcmRzIGludG8gb25lIGNwdS9hdDkxcm05MjAwL2xvd2xldmVsLlMKCiogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMzEgTWFyIDIwMDU6CiAgQ2xlYW51cCBkdXBsaWNhdGUgZGVmaW5pdGlvbiBvZiBvdmVyd3JpdGVfY29uc29sZSgpCgoqIFVwZGF0ZSBUUU01MjAwIGNvbmZpZ3VyYXRpb247CiAgcHJlcGFyZSBmb3IgUmV2LiAyMDAgc3RhcnRlciBraXQgYm9hcmRzCgoqIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMjEgT2N0IDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIE5pb3MtSUkgRVBDUyBDb250cm9sbGVyIGNvcmUuCgoqIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMjAgT2N0IDIwMDQ6CiAgTmlvcy1JSSBjbGVhbnVwczoKICAtIEFkZCBzeXNpZCBjb21tYW5kIChOaW9zLUlJIG9ubHkpLgogIC0gTG9jYXRlIGRlZmF1bHQgZXhjZXB0aW9uIHRyYW1wb2xpbmUgYXQgcHJvcGVyIG9mZnNldC4KICAtIEltcGxlbWVudCBJL08gcm91dGluZXMgKHJlYWRiLCB3cml0ZWIsIGV0YykKICAtIEltcGxlbWVudCBkb19ib290bV9saW51eAoKKiBQYXRjaGVzIGJ5IE1hcnRpbiBLcmF1c2UsIDIyIE1hciAyMDA1OgogIC0gdXNlIFRRTTUyMDBfYXV0byBhcyBNQUtFQUxMIHRhcmdldCBmb3IgVFFNNTIwMCBzeXN0ZW1zCiAgLSBhZGQgc3VwcG9ydCBmb3IgU001MDEgZ3JhcGhpY3MgY29udHJvbGxlcgogIC0gYWRkIHN1cHBvcnQgZm9yIGdyYXBoaWMgY29uc29sZSBvbiBUUU01MjAwCiAgLSBhZGQgc3VwcG9ydCBmb3IgVFFNNTIwMCBSZXYgMjAwCiAgLSBjbGVhbnVwLCBmaXggdHlwbyBpbiBpbmNsdWRlL2NvbmZpZ3MvVFFNNTIwMC5oCgoqIFBhdGNoIGJ5IE1hbmZyZWQgQmFyYWwsIDE3IE1hciAyMDA1OgogIEZpeCB0eXBvCgoqIEZpeCBSVEMgY29uZmlndXJhdGlvbiBmb3IgUFBDaGFtZWxlb24gYm9hcmQKCiogQ2xlYW51cCwgZml4IHR5cG8gaW4gaW5jbHVkZS9jb25maWdzL1RRTTUyMDAuaAoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE2IE1hciAyMDA1OgogIFVwZGF0ZSBmb3IgZXNkIGF1dG9fdXBkYXRlIGFuZCBoaDQwNSBib2FyZAoKKiBBZGFwdCBmb3IgVS1Cb290IGltYWdlIHNpemUgKG5ldyBmZWF0dXJlcyBlbmFibGVkKSBvbiBUUU01MjAwCgoqIFVwZGF0ZSBjb2RlIGZvciBUUU04NTQwIGJvYXJkIChhbmQgODV4eCBpbiBnZW5lcmFsKToKICAtIENoYW5nZSB0aGUgbmFtZSBvZiB0aGUgRXRoZXJuZXQgZHJpdmVyOiBNT1RPIEVORVQgLT4gRU5FVAogIC0gUmVmb3JtYXQgYm9vdCBtZXNzYWdlcwogIC0gRW5hYmxlIHJlZHVuZGFudCBlbnZpcm9ubWVudAogIC0gUmVwbGFjZSB0aGUgLU8yIG9wdGltaXphdGlvbiBmbGFnIHdpdGggLW1uby1zdHJpbmcKCiogUGF0Y2ggYnkgRGF2aWQgQnJvd25lbGwsIDEwIE1hciAyMDA1OgogIFJlc3RvcmUgY29weXJpZ2h0IHN0YXRlbWVudHMgaW4gT0hDSSBkcml2ZXJzLgoKKiBBZGQgc3VwcG9ydCBmb3IgVFFNODU0MCBib2FyZAoKKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAxNCBNYXIgMjAwNToKICBOQzY1MDogY2hhbmdlZCBOQU5EIGZsYXNoIGFkZHJlc3NpbmcgdG8gdXNpbmcgVVBNQgoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE0IE1hciAyMDA1OgogIFVwZGF0ZSBmb3IgZXNkIHZvaDQwNSBmcGdhIGltYWdlCgoqIElOS0E0eDA6IEFsbG93IGluaXRpYWxpemF0aW9uIG9mIExDRCBiYWNrbGlnaHQgZGltbWluZyBmcm9tCiAgImJyaWdodG5lc3MiIGVudmlyb25tZW50IHZhcmlhYmxlLgoKKiBBZGQgcG9ydCBpbml0aWFsaXphdGlvbiBmb3IgZGlnaXRhbCBJL08gb24gSU5LQTR4MAoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDAxIE1hciAyMDA1OgogIFVwZGF0ZSBmb3IgZXNkIGJvYXJkcyBkcDQwNSBhbmQgaHViNDA1CgoqIEZpeCBnZXRfcGFydGl0aW9uX2luZm8oKSBwYXJhbWV0ZXIgZXJyb3IgaW4gYWxsIG90aGVyIGNhbGxzCiAgKGNvbW1vbi9jbWRfaWRlLmMsIGNvbW1vbi9jbWRfcmVpc2VyLmMsIGNvbW1vbi9jbWRfc2NzaS5jKS4KCiogRW5hYmxlIFVTQiBhbmQgSURFIHN1cHBvcnQgZm9yIElOS0E0eDAgYm9hcmQKCiogUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIDI4IEZlYiAyMDA1OgogIGZpeCBleHQybG9hZCBwYXNzaW5nIGFuIGluY29ycmVjdCBwb2ludGVyIHRvIGdldF9wYXJ0aXRpb25faW5mbygpCiAgcmVzdWx0aW5nIGluIGxvYWQgZmFpbHVyZSBmb3IgZGV2aWNlcyBvdGhlciB0aGFuIDAKCiogQWRkIHN1cHBvcnQgZm9yIFNSQU0gYW5kIDIgeCBRdWFkIFVBUlRzIG9uIElOS0E0eDAgYm9hcmQKCiogQ2xlYW51cCBVU0IgYW5kIHBhcnRpdGlvbiBkZWZpbmVzCgoqIEFkZCBzdXBwb3J0IGZvciBleHQyIGZpbGVzeXN0ZW1zIGFuZCBpbWFnZSB0aW1lc3RhbXBzIHRvIFRRTTUyMDAgYm9hcmQKCiogQWRkIHJlc2V0IGNvZGUgZm9yIENvcmFsLVAgb24gSU5LQTR4MCBib2FyZAoKKiBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyOCBKdW4gMjAwNDoKICBVcGRhdGUgZm9yIFRSQUIgYm9hcmQuCgoqIEZpeCBzb21lIG1pc3NpbmcgInZvbGF0aWxlInMgaW4gTVBDNXh4eCBGRUMgZHJpdmVyCgoqIEZpeCBjaXJydXMgdm9sdGFnZSBkZXRlY3Rpb24gKGZvciBDUEM0NSkKCiogRml4IGJ5dGVvcmRlciBwcm9ibGVtIGluIHVzYmJvb3QgYW5kIHNjc2lib290IGNvbW1hbmRzLgoKKiBQYXRjaCBieSBDYWp1cyBIYWhuLCAwNCBGZWIgMjAwNToKICAtIGRvbid0IGluc2lzdCBvbiBsZWFkaW5nICcvJyBmb3IgZmlsZW5hbWUgaW4gZXh0MmxvYWQKICAtIHNldCBkZWZhdWx0IHBhcnRpdGlvbiB0byB1c2VmdWwgdmFsdWUgKDEpIGluIGV4dDJsb2FkCgoqIFBhdGNoIGJ5IEFuZHJldyBEeWVyLCAwOCBKYW4gMjAwNToKICBmaXggd3JvbmcgcmV0dXJuIGNvZGVzIGluIGV4dDIgY29kZQoKKiBSZW1vdmVkICctLW5vLXdhcm4tbWlzbWF0Y2gnIG9wdGlvbiBmcm9tIE1ha2VmaWxlLiBUaGlzIG9wdGlvbgogIG1ha2VzICdsZCcgdG8gb3Zlcmxvb2sgYmluYXJ5IG9iamVjdHMgY29tcGF0aWJpbGl0eS4KCiogTW92ZWQgJChQTEFURk9STV9MSUJTKSBmcm9tIHRoZSBsaWJyYXJ5IGdyb3VwICgtLXN0YXJ0LWdyb3VwIC4uLgogIC0tZW5kLWdyb3VwKSBvdXRzaWRlIG9mIHRoZSBncm91cC4gVGhpcyB3aWxsIG1ha2UgJ2xkJyB0byBkbwogIF9tdWx0aXBsZV8gc2VhcmNoIGluIHRoZSBsaWJyYXJ5IGdyb3VwIHdoZW4gcmVzb2x2aW5nIHN5bWJvbAogIHJlZmVyZW5jZXMgYW5kIGRvIG9ubHkgYSBfc2luZ2xlXyBzZWFjaCBpbiBsaWJnY2MuYSBhZnRlciB0aGUgZ3JvdXAKICBzZWFyY2guCgoqIEZpeCBzdGFiaWxpdHkgcHJvYmxlbXMgb24gQ1BDNDUgYm9hcmQgYWdhaW4uCgoqIE1ha2UgaW1hZ2UgZGV0ZWN0aW9uIGZvciBkaXNrYm9vdCAvIHVzYmJvb3QgLyBzY3NpYm9vdCBtb3JlIHJvYnVzdAogIChhbHNvIGNoZWNrIGhlYWRlciBjaGVja3N1bSkKCiogVXBkYXRlIENQQzQ1IGJvYXJkIGNvbmZpZ3VyYXRpb24uCgoqIEFkZCBVU0IgYW5kIFBDSSBzdXBwb3J0IGZvciBJTktBNHgwIGJvYXJkCgoqIEZpeCBJREUgc3RhYmlsaXR5IHByb2JsZW1zIG9uIENQQzQ1IGJvYXJkIChuZWVkcyAyIHggRUlFSU8pLgoKKiBDb2RlIGNsZWFudXAKCiogUGF0Y2ggYnkgUm9iaW4gR2V0eiwgMTMgT2N0IDIwMDQ6CiAgQWRkIHN0YW5kYWxvbmUgYXBwbGljYXRpb24gdG8gY2hhbmdlIFNNQzkxQzExMSBNQUMgYWRkcmVzc2VzLAogIHNlZSBleGFtcGxlcy9SRUFETUUuc21jOTExMTFfZWVwcm9tCgoqIFBhdGNoIGJ5IFhpYW9nZW5nIChTaGF3bikgSmluLCAxMiBPY3QgMjAwNDoKICBGaXggRmxhc2ggc3VwcG9ydCBmb3IgQVJNIEludGVncmF0b3IgQ1AuCgoqIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDEwIEphbiAyMDA1OgogIFVwZGF0ZSBzdXBwb3J0IGZvciBPTUFQMjQyMCAoQVJNMTEpIGFuZCBINCBib2FyZDoKICBvIGNsZWFuIHVwIGFuZCBhZGQgbmV3IHR5cGVzIHRvIEg0IG1lbW9yeSBwcm9iZSBjb2RlLgogIG8gZml4IHRvIHdvcmsgd2l0aCBpbnRlcm5hbCBib290LgogIG8gYWRkZWQgUFJDTSBjb25maWcgSUlJIG9wZXJhdGlvbi4KICBvIGZpeCBtYXJnaW5hbCBmbGFzaCB0aW1pbmdzLgogIG8gYWRkIHJldmlzb24gQVRBRyB1c2FnZS4KICBvIGVuYWJsZSB2b2x0YWdlIHNjYWxpbmcgYXQgcG93ZXIgY2hpcC4KICBvIGZpeCBjb21waWxlIGVycm9yIGZvciBpMmMuCgoqIEZpeCBuZXR3b3JrIHByb2JsZW0gKGVycm9yIHdoZW4gcmVjZWl2aW5nIG11bHRpcGxlIEFSUCBwYWNrZXRzKQoKKiBQYXRjaCBieSBEYW5pZWwgUG9pcm90LCAxMiBPY3QgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgV2luZCBSaXZlciBzYmM0MDUgYm9hcmQKCiogUGF0Y2ggYnkgUmFpbmVyIEJyZXN0YW4sIDEyIE9jdCAyMDA0OgogIE1ha2UgZXhhbXBsZXMvTWFrZWZpbGUgbW9yZSByb2J1c3QKCiogUGF0Y2ggYnkgU2FtIFNvbmcsIDExIE9jdG9iZXIgMjAwNDoKICAtIEFkZCBSRVNFVC9QUkVCT09UL0FVVE9CT09UIHN1cHBvcnQgZm9yIFJQWGxpdGVfRFcgYm9hcmQKICAtIEFkanVzdCBDUFU6QlVTIGZyZXF1ZW5jeSByYXRpbyAxOjEgd2hlbiBjb3JlIGZyZXF1ZW5jeQogICAgbGVzcyB0aGFuIDUwTUh6CgoqIFBhdGNoIGJ5IFNhbSBTb25nLCAxMCBPY3QgMjAwNDoKICBGaXggYSBwYXJhbWV0ZXIgZXJyb3IgaW4gcnVuX2NvbW1hbmQoKSBpbiBtYWluLmMKCiogUGF0Y2ggYnkgUmljaGFyZCBXb29kcnVmZiwgMDEgT2N0IDIwMDQ6CiAgYWRkIHN1cHBvcnQgZm9yIHRoZSBUSSBPTUFQMjQyMCBwcm9jZXNzb3IgYW5kIGl0cyBINCByZWZlcmVuY2UKICBib2FyZAoKKiBQYXRjaCBieSBDaHJpc3RpYW4gUGVsbGVncmluLCAyNCBTZXAgMjAwNDoKICBBZGRlZCBzdXBwb3J0IGZvciBORTIwMDAgY29tcGF0aWJsZSAoRFA4MzkwLCBEUDgzOTAyKSBOSUNzLgoKKiBQYXRjaCBieSBMZWlmIExpbmRob2xtLCAyMyBTZXAgMjAwNDoKICBhZGQgc3VwcG9ydCBmb3IgdGhlIEFNRCBkYjE1NTAgYm9hcmQKCiogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMTUgU2VwIDIwMDQ6CiAgQWRkIENPTkZJR19TRVJJQUxfTVVMVEkgc3VwcG9ydCBmb3IgcHBjNHh4LAogIHVwZGF0ZSBSRUFETUUuc2VyaWFsX211bHRpCgoqIFBhdGNoZXMgYnkgRGF2aWQgU25vd2RvbiwgMDcgU2VwIDIwMDQ6CiAgLSBhZGQgdS1ib290LmhleCB0YXJnZXQgaW4gdGhlIHRvcCBsZXZlbCBNYWtlZmlsZQogIC0gYWRkIHN1cHBvcnQgZm9yIHRoZSBVTlNXL05JQ1RBIFBMRUIgMiBib2FyZCAocGxlYjIpCiAgLSB1c2UgLW10dW5lPXhzY2FsZSBhbmQgLW1hcmNoPWFybXY1IG9wdGlvbnMgZm9yIFBYQQoKKiBQYXRjaCBieSBGbG9yaWFuIFNjaGxvdGUsIDA4IFNlcCAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBTZW5UZWMtQ09CUkE1MjcyLWJvYXJkIChDb2xkZmlyZSkuCgoqIFBhdGNoIGJ5IEdsZWIgTmF0YXBvdiwgMDcgU2VwIDIwMDQ6CiAgbXBjODI0eDogc2V0IFBDSSBsYXRlbmN5IHRpbWVyIHRvIGEgc2FuZSB2YWx1ZQogIChpcyAwIGFmdGVyIHJlc2V0KS4KCiogUGF0Y2ggYnkgS3VydCBTdHJlbWVyY2gsIDAzIFNlcCAyMDA0OgogIEFkZCBiaXRzdHJlYW0gY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIGZwZ2EgY29tbWFuZCAoWGlsaW54IG9ubHkpLgoKKiBQYXRjaCBieSBLdXJ0IFN0cmVtZXJjaCwgMDMgU2VwIDIwMDQ6CiAgQWRkIFhpbGlueCBTcGFydGFuMkUgZmFtaWx5IEZQR0Egc3VwcG9ydAoKKiBQYXRjaCBieSBKZWZmIEFuZ2llbHNraSwgMDIgU2VwIDIwMDQ6CiAgQWRkIEFkZGVkIHN1cHBvcnQgZm9yIEgyIHJldmlzaW9uIG9mIHRoZSBFUDgyNjAgYm9hcmQuCiAgRml4ZWQgZm9ybWF0dGluZyBmb3Igc29tZSBvZiB0aGUgRVA4MjYwIHJlbGF0ZWQgc291cmNlIGZpbGVzLgoKKiBQYXRjaCBieSBKb24gTG9lbGlnZXIsIDAyIFNlcCAyMDA0OgogIFJlc2V0IG1vbml0b3Igc2l6ZSBiYWNrIHRvIDI1NiBzbyBlbnZpcm9ubWVudCBjYW4gYmUgd3JpdHRlbgogIHRvIGZsYXNoIG9uIE1QQzg1eHggQURTIGFuZCBDRFMgcmVsZWFzZXMuCgoqIFBhdGNoIGJ5IFBhb2xvIEJyb2dnaW5pLCAwMiBTZXAgMjAwNDoKICBNYWtlIEJTUyBjbGVhcmluZyBvbiBBUk0gc3lzdGVtcyBtb3JlIHJvYnVzdAoKKiBQYXRjaCBieSBZdWUgSHUgYW5kIEpvZSwgMDEgU2VwIDIwMDQ6CiAgLSBhZGQgUENJIHN1cHBvcnQgZm9yIGl4cDQyNTsKICAtIGFkZCBFRVBSTzEwMCBzdXBwb3IgdGZvciBpeGRwNDI1IGJvYXJkLgoKKiBGaXggcHJvYmxlbSB3aXRoIHByb3RlY3RlZCBzZWN0b3IgZGV0ZWN0aW9uIGluIGRyaXZlci9jZmlfZmxhc2guYwoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMS4xLjI6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogQ29kZSBjbGVhbnVwLCBtb3N0bHkgZm9yIEdDQy0zLjMueAoKKiBDbGVhbnVwIGNvbmZ1c2luZyB1c2Ugb2YgQ09ORklHX0VUSCpBRERSIC0gdXN0IGhpcyBvbmx5IHRvCiAgcHJlLWRlZmluZSBhIE1BQyBhZGRyZXNzOyB1c2UgQ09ORklHX0hBU19FVEgqIHRvIGVuYWJsZSBzdXBwb3J0IGZvcgogIGFkZGl0aW9uYWwgZXRoZXJuZXQgYWRkcmVzc2VzLgoKKiBDbGVhbnVwIGRyaXZlcnMvaTgyMzY1LmMgLSBhdm9pZCBkdXBsaWNhdGlvbiBvZiBjb2RlCgoqIEZpeCBib2d1cyAiY2Fubm90IHNwYW4gYWNyb3NzIGJhbmtzIiBmbGFzaCBlcnJvciBtZXNzYWdlCgoqIENvZGUgY2xlYW51cAoKKiBBZGQgc3VwcG9ydCBmb3IgQ29tcGFjdEZsYXNoIGZvciB0aGUgQ1BDNDUgQm9hcmQuCgoqIEZpeCBwcm9ibGVtcyB3aXRoIENNQ19QVTIgZmxhc2ggZHJpdmVyLgoKKiBDbGVhbnVwOgogIC0gYXZvaWQgdHJpZ3JhcGggd2FybmluZyBpbiBmcy9leHQyL2V4dDJmcy5jCiAgLSByZW5hbWUgVUMxMDAgLT4gdWMxMDAKCiogQWRkIHN1cHBvcnQgZm9yIFVDMTAwIGJvYXJkCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTYgRGV6IDIwMDQ6CiAgLSBleHQyZnMgc3VwcG9ydCBhZGRlZAogIC0gVHVuZHJhIHVuaXZlcnNlIHN1cHBvcnQgYWRkZWQKICAtIENvbGRmaXJlIE1DRjUyNDkgc3VwcG9ydCBhZGRlZCAobm8gcHJlbG9hZGVyIG5lZWRlZCEpCiAgLSBNQ0Y1MjQ5IGJvYXJkIFRBU1JFRyBhZGRlZAogIC0gUFBDIGJvYXJkcyBhZGRlZDogQVBDNDA1LCBDUENJNDA1RFQsIENQQ0k3NTAsIEcyMDAwLCBISDQwNSwKICAgIFZPTTQwNSwgV1VINDA1CiAgLSBzb21lIGVzZCBib2FyZHMgdXBkYXRlZAogIC0gbWVtb3J5IGNvbW1hbmRzICJtZGMiIGFuZCAibXdjIiBhZGRlZCBmb3IgY3ljbGljIHJlYWQvd3JpdGUKICAgIChDT05GSUdfTVhfQ1lDTElDLCBzZWUgUkVBRE1FIGZvciBmdXJ0aGVyIGRlc2NyaXB0aW9uKQoKKiBBZGQgc3VwcG9ydCBmb3IgSU5LQTRYMCBib2FyZAoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxMiBEZWMgMjAwNDoKICBGaXggdHlwbyBpbiBBVDkxIG1lbW9yeSBzZXR1cC4KCiogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjcgT2N0IDIwMDQ6CiAgLSBhZGQgc3VwcG9ydCBmb3IgIlNUSzUyeHgiIGJvYXJkIChpbmNsdWRpbmcgUFMvMiBtdWx0aXBsZXhlcikKICAtIGFkZCBoYXJkd2FyZSBkZXRlY3Rpb24gZm9yIFRRTTUyMDAKCiogQ2xlYW4gdXAgQ01DIFBVMiBmbGFzaCBkcml2ZXIKCiogVXBkYXRlIE1BSU5UQUlORVJTIGZpbGUKCiogRml4IGJ1ZyBpbiBNUEM4MjMgTENEIGRyaXZlcgoKKiBGaXggdWRlbGF5KCkgb24gQVQ5MVJNOTIwMCBmb3IgZGVsYXlzIDwgMSBtcy4KCiogRW5hYmxlIGxvbmcgaGVscCBvbiBDTUMgUFUyIGJvYXJkOwogIGZpeCByZXNldCBpc3N1ZTsKICBpbmNyZWFzZSBDUFUgc3BlZWQgZnJvbSAxNzkgdG8gMjA3IE1Iei4KCiogRml4IHNtYzkxMTExIGV0aGVybmV0IGRyaXZlciBmb3IgWGFlbmlheCBib2FyZCAobmVlZCB0byBoYW5kbGUKICB1bmFsaWduZWQgdGFpbCBwYXJ0IHNwZWNpYWxseSkuCgoqIFVwZGF0ZSBmb3IgQVQ5MVJNOTIwMERLIGFuZCBDTUNfUFUyIGJvYXJkczoKICAtIEVuYWJsZSBib290aW5nIGRpcmVjdGx5IGZyb20gZmxhc2gKICAtIGZpeCBDTUNfUFUyIGZsYXNoIGRyaXZlcgoKKiBGaXggbWtpbWFnZSB1c2FnZSBtZXNzYWdlCgoqIE1hcCBTUkFNIG9uIE5DNjUwIGJvYXJkCgoqIFdvcmsgYXJvdW5kIGZvciBFdGhlcm5ldCBwcm9ibGVtcyBvbiBYYWVuaWF4IGJvYXJkCgoqIFBhdGNoIGJ5IFRzaUNodW5nIExpZXcsIDIzIFNlcCAyMDA0OgogIC0gYWRkIHN1cHBvcnQgZm9yIE1QQzgyMjAgQ1BVCiAgLSBBZGQgc3VwcG9ydCBmb3IgQWxhc2thIGFuZCBZdWtvbiBib2FyZHMKCiogRml4IGNvbmZpZ3VyYXRpb24gZm9yIEVSSUMgYm9hcmQgKG5lZWRzIG1vcmUgcm9vbSkKCiogQWRqdXN0IE1JUFMgY29tcGlsZXIgb3B0aW9ucyBhdCBydW4tdGltZSBkZXBlbmRpbmcgb24gdG9vbHMgdmVyc2lvbgogICgiLW1hcmNoPTRrYyAtbXR1bmU9NGtjIC1XYSwtbWlwc19hbGxvd19icmFuY2hfdG9fdW5kZWZpbmVkIiBmb3IgbmV3LAogICItbWNwdT00a2MiIGZvciBvbGQgdG9vbHMpCgoqIEFkZCBwYXNzaW5nIG9mIHRoZSBjb21tYW5kIGxpbmUgYW5kIG1lbW9yeSBzaXplIGluZm9ybWF0aW9uIHRvICB0aGUKICBrZXJuZWwgb24geGFlbmlheCBib2FyZC4KCiogRW5hYmxlIE5BTkQgZmxhc2ggc3VwcG9ydCBmb3IgTkM2NTAgYm9hcmQuCgoqIFBhdGNoIGJ5IFRob21hcyBMYW5nZSAwNyBPY3QgMjAwNDoKICBVcGRhdGVkIFJFQURNRSBmb3IgREJBdTF4MDAgYm9hcmRzIHRvIG1hdGNoIGN1cnJlbnQgc3RhdHVzCgoqIFBhdGNoIGJ5IFBoaWxpcHBlIFJvYmluLCAyOCBTZXB0IDIwMDQ6CiAgRml4IEZsYXNoIHN1cHBvcnQgZm9yIFZlcnNhdGlsZS4KCiogUGF0Y2ggYnkgUm9nZXIgQmxvZmVsZCwgMTYgU2VwIDIwMDQ6CiAgRml4IHRpbWVvdXQgZm9yIERIQ1AgY29tbWFuZCByZXRyeQoKKiBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMTQgU2VwIDIwMDQ6CiAgRml4IGVhcmx5IHNlcmlhbCBoYW5nIHdoZW4gQ09ORklHX1NFUklBTF9NVUxUSSBpcyBkZWZpbmVkLgoKKiBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMTQgU2VwIDIwMDQ6CiAgS2ljayB3YXRjaGRvZyB3aGVuIGJ6LWRlY29tcHJlc3NpbmcKCiogRml4IENGR19IWiBwcm9ibGVtcyBvbiBBVDkxUk05MjAwIHN5c3RlbXMKICBbUmVtZW1iZXI6IENGR19IWiBzaG91bGQgYmUgMTAwMCBvbiBBTEwgc3lzdGVtcyFdCgoqIFBhdGNoIGJ5IEdyaWRpc2ggU2hsb21pLCAzMCBBdWcgMjAwNDoKICAtIEFkZCBzdXBwb3J0IHRvIHJldkEgdmVyc2lvbiBvZiBQUTI3IGFuZCBQUTI3RS4KICAtIFJldmVydGVkIE1QQzgyNjBBRFMgYmF1ZHJhdGUgYmFjayB0byBvcmlnaW5hbCAxMTUyMDAKCiogUGF0Y2ggYnkgSG9qaW4sIDE3IFNlcCAyMDA0OgogIEZpeCB0eXBvIGluIGNmaV9mbGFzaC5jCgoqIFBhdGNoIGJ5IE1hcmsgSm9uYXMsIDA5IFNlcHRlbWJlciAyMDA0OgogIG10ZXN0J3MgZGF0YSBsaW5lIHRlc3QgKHdpdGggQ0ZHX0FMVF9NRU1URVNUIHNldCkgcmV0dXJuZWQgYSB3cm9uZwogIGVycm9yIG1lc3NhZ2UKCiogUGF0Y2ggYnkgTWFyayBKb25hcywgMzEgQXVndXN0IDIwMDQ6CiAgQWRkZWQgb3B0aW9uIENGR19YTEJfUElQRUxJTklORyB0byBlbmFibGUgWExCIHBpcGVsaW5pbmcuIFRoaXMKICBpbXByb3ZlcyBGVFAgcGVyZm9ybWFuY2UgZm9yIE1QQzUyMDAgc3lzdGVtcy4gRW5hYmxlZCBmb3IgSWNlQ3ViZQogIGJ5IGRlZmF1bHQuCgoqIFBhdGNoIGJ5IE1pY2hhZWwgQmVuZHppY2ssIDMwIEF1ZyAyMDA0OgogIC0gSW1wcm92ZSBwbGF0Zm9ybS5TIGNvZGUgZm9yIG9tYXAxNTEwaW5uIHRoYXQgZGV0ZWN0cyB3aGV0aGVyIGNvZGUKICAgIGlzIHJ1bm5pbmcgZnJvbSBTRFJBTSBvciBub3QuIFBhdGNoIGFsbG93cyBTRFJBTSB0byBiZSBjb25maWd1cmVkCiAgICBpZiBjb2RlIGlzIHJ1bm5pbmcgb3V0IG9mIFNSQU0gYXQgMHgyMDAwMDAwMC4KCiogUGF0Y2ggYnkgRnJlZGVyaWNrIEtsYXR0LCAzMCBBdWcgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgdGhlIFdpbmQgUml2ZXIgU0JDODU0MC9TQkM4NTYwIGJvYXJkcwoKKiBDb25maWd1cmUgU1gxIGJvYXJkIHRvIHVzZSBkcml2ZXJzL2NmaV9mbGFzaC5jCgoqIFBhdGNoZXMgYnkgTWljaGFlbCBCZW5kemljaywgMzAgQXVnIDIwMDQ6CiAgLSBDb25maWd1cmUgb21hcDE1MTBpbm4gYm9hcmQgdG8gdXNlIGRyaXZlcnMvY2ZpX2ZsYXNoLmMKICAtIE1ha2UgZHJpdmVycy9jZmlfZmxhc2guYyBwcm90ZWN0IGVudmlyb25tZW50IGFuZCByZWR1bmRhbnQKICAgIGVudmlyb25tZW50LgoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyMyBKdW4gMjAwNDoKICAtIEFkZCBzY3JpcHQgKHRvb2xzL2ltZzJicmVjLnNoKSB0byBwcm9ncmFtbSBVLUJvb3QgaW50bwogICAgKFN5bmNoKUZsYXNoIHVzaW5nIHRoZSBCb290c3RyYXAgTW9kZSBvZiB0aGUgTUM5MzI4TVgxL0wKCiogUGF0Y2hlcyBieSBTY290dCBNY051dHQsIDI0IEF1ZyAyMDA0OgogIC0gQWRkIHN1cHBvcnQgZm9yIEFsdGVyYSBOaW9zLUlJIHByb2Nlc3NvcnMuCiAgLSBBZGQgc3VwcG9ydCBmb3IgUHN5ZW50IFBDSS01NDQxIGJvYXJkLgogIC0gQWRkIHN1cHBvcnQgZm9yIFBzeWVudCBQSzFDMjAgYm9hcmQuCgoqIFBhdGNoZXMgYnkgSm9uIExvZWxpZ2VyLCAyNCBBdWcgMjAwNDoKICAtIEFkZCBzdXBwb3J0IGZvciB0aGUgTVBDODU0MSBhbmQgTVBDODU1NSBDRFMgYm9hcmRzCiAgLSBDbGVhbnVwIGV0aD9hZGRyIGhhbmRsaW5nOiBtYWtlIGRlcGVuZGVudCBvbiBDT05GSUdfRVRIP0FERFIKICAtIENvbnZlcnQgTVBDODV4eEFEUyB0byB1c2UgY29tbW9uIENGSSBmbGFzaCBkcml2ZXIKICAtIEZpeCBQQ0kgd2luZG93IG9uIE1QQzg1eHg7IHJlbW92ZSB1bm5lZWRlZCBQQ0kgaW5pdGlhbGl6YXRpb24KICAgIGZyb20gYm9hcmRfZWFybHlfaW5pdF9mKCkKICAtIFByb3ZpZGUgU1cgd29ya2Fyb3VuZCBmb3IgUENJIGluaXRpYWxpemF0aW9uIG9uIDg1eHggQ0RTCgoqIFBhdGNoZXMgYnkgR2VvcmdlIEcuIERhdmlzLCAyNCBBdWcgMjAwNDoKICAtIEVuYWJsZSByYW1kaXNrL2luaXRyZCB0YWdnZWQgcGFyYW0gc3VwcG9ydCBmb3Igb21hcDE2MTBoMl9jb25maWcKICAtIFJlbW92ZSBzdGF0aWMgbmV0d29yayBzZXR1cCBkZWZhdWx0cyBmcm9tIG14MWFkc19jb25maWcKICAtIHVwZGF0ZSBBUk0gYm9hcmRzIHRvIHVzZSBjb25zdGFudHMgZnJvbSBtYWNoLXR5cGVzLmgKCiogUGF0Y2ggYnkgR2FyeSBKZW5uZWpvaG4sIDA0IE9jdCAyMDA0OgogIC0gZml4IEkyQyBvbiBhdDkxcm05MjAwCiAgLSBhZGQgc3VwcG9ydCBmb3IgUmljb2ggUlM1QzM3MkEgUlRDCgoqIFBhdGNoIGJ5IEdhcnkgSmVubmVqb2huLCAwMSBPY3QgMjAwNDoKICAtIGFkZCBzdXBwb3J0IGZvciBDTUMgUFUyIGJvYXJkCiAgLSBhZGQgc3VwcG9ydCBmb3IgSTJDIG9uIGF0OTFybTkyMDAKCiogUGF0Y2ggYnkgR2FyeSBKZW5uZWpvaG4sIDI4IFNlcCAyMDA0OgogIGZpeCBiYXVkcmF0ZSBoYW5kbGluZyBvbiBhdDkxcm05MjAwCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDIyIEF1ZyAyMDA0OgogIC0gcmVtb3ZlIFpQQy4xOTAwIGJvYXJkLXNwZWNpZmljIGZsYXNoIGRyaXZlcjsKICAgIHN3aXRjaCB0aGUgcG9ydCB0byBnZW5lcmljIENGSSBkcml2ZXI7CiAgLSBwb3J0IGNsZWFuLXVwCgoqIFBhdGNoIGJ5IEhpbmtvIEtvY2V2YXIsIDIxIEF1ZyAyMDA0OgogIEFkZCBjYWxjX2Zic2l6ZSgpIGZ1bmN0aW9uIHVzZWQgd2l0aCBWSURFT0xGQl9UQUcgb24gVFJBQgoKKiBDbGVhbiB1cCB0b29scy9ibXBfbG9nby5jIHRvIG5vdCBhZGQgdHJhaWxpbmcgd2hpdGUgc3BhY2UKCiogUGF0Y2ggYnkgSGlua28gS29jZXZhciwgMjEgQXVnIDIwMDQ6CiAgLSBHcm91cCBjb21tb24gZnJhbWVidWZmZXIgZnVuY3Rpb25zIGluIGNvbW1vbi9sY2QuYwogIC0gR3JvdXAgY29tbW9uIGZyYW1lYnVmZmVyIG1hY3JvcyBhbmQgI2RlZmluZXMgaW4gaW5jbHVkZS9sY2QuaAogIC0gUHJvdmlkZSBjYWxjX2Zic2l6ZSgpIGZvciB2aWRlbyBBVEFHCgoqIFBhdGNoIGJ5IFNhbSBTb25nLCAyMSBBdWd1c3QgMjAwNDoKICAtIEZpeCBhIHR5cG8gaW4gUkVBRE1FCiAgLSBBbGlnbiAiKFJPKSIgb3V0cHV0IGZvciAiZmxpbmZvIiBhZnRlciAicHJvdGVjdCBvbiIKICAtIEFkZCBSRVNFVCBzdXBwb3J0IGZvciBSUFhsaXRlX0RXIGJvYXJkOyBhZGp1c3QgQ1BVOkJVUyBmcmVxdWVuY3kKICAgIHJhdGlvIDE6MSB3aGVuIGNvcmUgZnJlcXVlbmN5IGxlc3MgdGhhbiA1ME1IegoKKiBQYXRjaGVzIGJ5IEhpbmtvIEtvY2V2YXIsIDIxIEF1ZyAyMDA0OgogIC0gZml4IHNvbWUgInVzZSBvZiBsYWJlbCBhdCBlbmQgb2YgY29tcG91bmQgc3RhdGVtZW50IiB3YXJuaW5ncwogIC0gRGVmaW5lIHR5cGUgb2YgTENEIHBhbmVsIG9uIGx1YmJvY2sgYm9hcmQgaWYgQ09ORklHX0xDRCBpcyB1c2VkCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDE2IEF1ZyAyMDA0OgogIC0gSW50cm9kdWNpbmcgdGhlIGNvbmNlcHQgb2YgU29DcyAiLi9jcHUvJChDUFUpLyQoU09DKSIKICAtIGNyZWF0aW5nIHN1YmRpcnMgZm9yIFNvQ3MgLi9jcHUvYXJtOTIwdC9pbXggYW5kIC4vY3B1L2FybTkyMHQvczNjMjR4MAogIC0gbW92aW5nIFNvQyBzcGVjaWZpYyBjb2RlIG91dCBvZiBjcHUvYXJtOTIwdC8gaW50byBjcHUvYXJtOTIwdC8kKFNPQykvCiAgLSBtb3ZpbmcgZHJpdmVycy9zM2MyNHgwX2kyYy5jIGFuZCBkcml2ZXJzL3NlcmlhbF9pbXguYyBvdXQgb2YgZHJpdmVycy8KICAgIGludG8gY3B1L2FybTkyMHQvJChTT0MpLwoKKiBQYXRjaGVzIGJ5IFNlYW4gQ2hhbmcsIDA5IEF1ZyAyMDA0OgogIC0gQWRkZWQgc3VwcG9ydCBmb3IgYm90aCA4IGFuZCAxNiBiaXQgbW9kZSBhY2Nlc3MgdG8gU3lzdGVtIEFDRSBDRgogICAgdGhyb3VnaCBNUFUuCiAgLSBGaXhlZCBtaXNzaW5nIFN5c3RlbSBBQ0UgQ0YgZGV2aWNlIGR1cmluZyBnZXQgRkFUIHBhcnRpdGlvbiBpbmZvCiAgICBpbiBmYXRfcmVnaXN0ZXJfZGV2aWNlIGZ1bmN0aW9uLgogIC0gRW5hYmxlZCBTeXN0ZW0gQUNFIENGIHN1cHBvcnQgb24gTUwzMDAuCgoqIFBhdGNoIGJ5IFNlYW4gQ2hhbmcsIDA5IEF1ZyAyMDA0OgogIFN5bmNoIGRlZmluZXMgZm9yIHNhdmVlbnYgYW5kIGRvX3NhdmVlbnYgZnVuY3Rpb25zIHNvIHRoZXkgZ2V0CiAgY29tcGlsZWQgdW5kZXIgdGhlIHNhbWUgc3RhdGVtZW50LgoKKiBQYXRjaCBieSBTZWFuIENoYW5nLCAwOSBBdWcgMjAwNDoKICAtIEFkZGVkIEkyQyBzdXBwb3J0IGZvciBNTDMwMC4KICAtIEFkZGVkIHN1cHBvcnQgZm9yIE1MMzAwIHRvIHJlYWQgb3V0IGl0cyBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbgogICAgc3RvcmVkIG9uIHRoZSBFRVBST00uCiAgLSBBZGRlZCBzdXBwb3J0IHRvIHVzZSBib2FyZCBzcGVjaWZpYyBwYXJhbWV0ZXJzIGFzIHBhcnQgb2YKICAgIFUtQm9vdCdzIGVudmlyb25tZW50IGluZm9ybWF0aW9uLgogIC0gVXBkYXRlZCBNTEQgZmlsZXMgdG8gc3VwcG9ydCBjb25maWd1cmF0aW9uIGZvciBuZXcgZmVhdHVyZXMKICAgIGFib3ZlLgoKKiBQYXRjaGVzIGJ5IFRyYXZpcyBTYXd5ZXIsIDA1IEF1ZyAyMDA0OgogIC0gUmVtb3ZlIGluY29ycmVjdCBicmlkZ2Ugc2V0dGluZ3MgZm9yIGV0aCBncm91cCA2CiAgLSBBZGQgY2FsbCB0byBzZXR1cCBicmlkZ2UgaW4gcHBjXzQ0MHhfZXRoX2luaXRpYWxpemUKICAtIEZpeCBwcGNfNDQweF9ldGhfaW5pdCB0byByZXNldCB0aGUgcGh5IG9ubHkgaWYgaXRzIHRoZQogICAgZmlyc3QgdGltZSB0aHJvdWdoLCBvdGhlcndpc2UsIGp1c3QgY2hlY2sgdGhlIHBoeSBmb3IgdGhlCiAgICBhdXRvbmVnb3RpYXRlZCBzcGVlZC9kdXBsZXguICBUaGlzIGFsbG93cyB0aGUgdXNlIG9mIG5ldGNvbnNvbGUKICAtIG9ubHkgcHJpbnQgdGhlIHNwZWVkL2R1cGxleCB0aGUgZmlyc3QgdGltZSB0aGUgcGh5IGlzIHJlc2V0LgoKKiBQYXRjaCBieSBTaGxvbW8gS3V0LCAyOSBNYXIgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgTUtTIEluc3RydW1lbnRzICJRdWFudHVtIiBib2FyZAoKKiBGaXggYnVpbGQgcHJvYmxlbSB3aXRoIENvZ2VudCBib2FyZHM7CiAgYXZvaWQgdXNpbmcgPGFzbS9ieXRlb3JkZXIuaD4gd2hlbiB1c2luZyB0aGUgaG9zdCBjb21waWxlcgoKKiBQYXRjaCBieSBHYW5hcGF0aGkgQywgMDQgQXVnIDIwMDQ6CiAgRml4IE5GUyB0aW1lb3V0IGlzc3VlCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDE5IEp1bCAyMDA0OgogIC0gRml4IGhvc3QgdG9vbHMgYnVpbGRpbmcgaW4gQ3lnd2luIGVudmlyb25tZW50CiAgLSBGaXggaGVhZGVyIGZpbGVzIHNlYXJjaCBvcmRlciBmb3IgaG9zdCB0b29scwoKKiBQYXRjaCBieSBUb20gQXJtaXN0ZWFkLCAxOSBKdWwgMjAwNDoKICBGaXgga2dkYi5TIHN1cHBvcnQgZm9yIDc0eHhfNzV4IGNwdQoKKiBQYXRjaCBieSBKb24gTG9lbGlnZXIsIDE1IEp1bCAyMDA0OgogIEZpeCBNUEM4NXh4IEkyQyBkcml2ZXIKCiogRml4IHByb2JsZW1zIHdpdGggQ0RST00gZHJpdmUgYXMgc2xhdmUgZGV2aWNlIG9uIExpdGU1MjAwIElERSBidXMuCgoqIFBhdGNoIGJ5IFN0ZXBoZW4gV2lsbGlhbXMsIDE1IEp1bHkgMjAwNAogIFNldCB0aGUgUENJIGNsYXNzIGNvZGUgZm9yIEpTRSBib2FyZCBhcyBwYXJ0IG9mIFBDSSBpbnRlcmZhY2Ugc2V0dXAKCiogUGF0Y2ggYnkgTWljaGFlbCBCZW5kemljaywgMTUgSnVsIDIwMDQ6CiAgRml4IHByb2JsZW0gd2l0aCB3cml0ZXMgd2l0aCBvZGQgc2l6ZXMgaW4gZHJpdmVycy9jZmlfZmxhc2guYyB3aGVuCiAgQ0ZHX0ZMQVNIX1VTRV9CVUZGRVJfV1JJVEUgaXMgc2V0CgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDEzIEp1bCAyMDA0OgogIEFsbG93IGNsb2NrIHNldHRpbmcgb24gTVBDODY2L01QQzg4NSBzZXJpZXMgY2hpcHMgYWNjb3JkaW5nIHRvCiAgZW52aXJvbm1lbnQgdmFyaWFibGUgYGNwdWNsaycKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMjAgQXByIDIwMDQ6CiAgUmVtb3ZlIHVubmVjZXNzYXJ5IHJlZGVmaW5lIG9mIENQTV9EQVRBT05MWV9TSVpFIGZvciBNUEM4MjZ4CgoqIFBhdGNoIGJ5IFZpbmNlbnQgRHViZXksIDI0IFNlcCAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciB4YWVuaWF4IGJvYXJkCgoqIEFkZCBjb21tZW50IGFib3V0IG5vbi1HUEwgY2hhcmFjdGVyIG9mIHN0YW5kYWxvbmUgYXBwbGljYXRpb25zIHRvCiAgQ09QWUlORyBmaWxlCgoqIEZpeCBGRUMgZXRoZXJuZXQgcHJvYmxlbSBvbiBOU0NVIGJvYXJkLgoKKiBQYXRjaCBieSBHYXJ5IEplbm5lam9obiwgMDkgU2VwIDIwMDQ6CiAgYWxsb3cgdG8gdXNlIFVTQVJUMSBhcyBjb25zb2xlIHBvcnQgb24gYXQ5MXJtOTIwMGRrIGJvYXJkcwoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE2IFNlcCAyMDA0OgogIFVwZGF0ZSBBUjQwNSBib2FyZC4KCiogRml4IFN5c0NsayBoYW5kbGluZyBmb3IgUFBDaGFtZWxlb24gYW5kIENBVGNlbnRlciBib2FyZHMKCiogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMDggU2VwIDIwMDQ6CiAgVXBkYXRlIGV0YWdzIGJ1aWxkIHRhcmdldAoKKiBJbXByb3ZlIE5ldENvbnNvbGUgc3VwcG9ydDogYWRkIHN1cHBvcnQgZm9yIGJyb2FkY2FzdCBkZXN0aW5hdGlvbgogIGFkZHJlc3MgYW5kIGJ1ZmZlcmVkIGlucHV0LgoKKiBDbGVhbnVwIGNvbXBpbGVyIHdhcm5pbmdzIGZvciBHQ0MgMy4zLnggYW5kIGxhdGVyCgoqIEZpeCBwcm9ibGVtIGluIGNtZF9qZmZzMi5jIGludHJvZHVjZWQgYnkgQ0ZHX0pGRlNfU0lOR0xFX1BBUlQgcGF0Y2gKCiogQWRkIHN1cHBvcnQgZm9yIElEUyAiTkM2NTAiIGJvYXJkCgoqIEFkZCBhdXRvbWF0aWMgdXBkYXRlIHN1cHBvcnQgZm9yIExXTU9OIGJvYXJkCgoqIENsZWFyIEJsb2NrIExvY2stQml0cyB3aGVuIGVyYXNpbmcgZmxhc2ggb24gTFdNT04gYm9hcmQuCgoqIEZpeCByZXR1cm4gY29kZSBvZiAiZmF0bG9hZCIgY29tbWFuZAoKKiBFbmFibGUgTVNET1MvVkZBVCBmaWxlc3lzdGVtIHN1cHBvcnQgZm9yIExXTU9OIGJvYXJkCgoqIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDAzIEF1ZyAyMDA0OgogIGNoYW5nZSB0aW1pbmcgZm9yIFNNNTAxIGdyYXBoaWNzIGNvbnRyb2xsZXIgb24gVFFNNTIwMCBtb2R1bGUKCiogUGF0Y2ggYnkgTWFyayBKb25hcywgMTMgSnVseSAyMDA0OgogIC0gVG90YWw1MjAwIExDRCBub3cgcnVuIGluIGxpdHRsZSBlbmRpYW4gbW9kZS4gRW5kaWFuZXNzIGNvbnZlcnNpb24KICAgIGlzIGRvbmUgaW4gaGFyZHdhcmUuCiAgLSBSZW1vdmVkIGxhc3QgcmVmZXJlbmNlIHRvICJjb25zb2xlIiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KCiogUGF0Y2hlcyBieSBMYXJzIE11bmNoLCAxMiBKdWwgMjAwNDoKICAtIG1vdmUgYXQ0NS5jIHRvIGJvYXJkL2F0OTFybTkyMDBkay8gc2luY2UgdGhpcyBpcyBhdDkxcm05MjAwZGsKICAgIGJvYXJkIHNwZWNpZmljCiAgLSBzcGxpdCBvdXQgdGhlIExYVDk3MUEgUEhZIGZyb20gbnNfOTc1MF9ldGguaAogIC0gc3BsaXQgdGhlIGRtOTE2MSBwaHkgcGFydCBvdXQgb2YgYXQ5MXJtOTIwMF9ldGhlci5jCgoqIFBhdGNoIGJ5IEFuZHJlYXMgRW5nZWwsIDEyIEp1bCAyMDA0OgogIFJlcGxhY2VkIGhhcmRjb2RlZCBQTDAxMSBjbG9jayBmcmVxdWVuY3kgd2l0aCBjb25maWcgdmFyaWFibGUuCiAgRml4ZWQgd3JvbmcgQ09ORklHX0NNRF9ERkwgZG9jLgoKKiBQYXRjaCBieSBUaG9tYXMgVmllaHdlZ2VyLCAwOSBKdW4gMjAwNDoKICBtYWtlIGl0IHBvc3NpYmxlIHRvIHJlbW92ZSBjaHBhcnQgd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSBwYXJ0aXRpb24KCiogQWRkIHN1cHBvcnQgZm9yIGNvbnNvbGUgb3ZlciBVRFAgKGNvbXBhdGlibGUgdG8gSW5nbyBNb2xuYXIncwogIG5ldGNvbnNvbGUgcGF0Y2ggdW5kZXIgTGludXgpCgoqIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciwgMTYgSnVsIDIwMDQ6CiAgLSBzdXBwb3J0IGxhcmdlciBERFIgbWVtb3JpZXMgdXAgdG8gMkcgb24gdGhlIFBDODU0MC84NTYwQURTIGFuZAogICAgU1RYR1AzIGJvYXJkcwogIC0gTWFkZSBNUEM4NTQwLzg1NjBBRFMgYmUgMzNNaHogUENJIGJ5IGRlZmF1bHQuCiAgLSBSZW1vdmVkIG1vbGR5IENPTkZJR19SQU1fQVNfRkxBU0gsIENGR19GTEFTSF9QT1JUX1dJRFRIXzE2CiAgICBhbmQgQ09ORklHX0wyX0lOSVRfUkFNIG9wdGlvbnMuCiAgLSBSZWZhY3RvciBMb2NhbCBCdXMgaW5pdGlhbGl6YXRpb24gb3V0IG9mIFNEUkFNIHNldHVwLgogIC0gUmUtaW1wbGVtZW50IG5ldyB2ZXJzaW9uIG9mIExCQzExL0REUjExIGVycmF0YSB3b3JrYXJvdW5kcy4KICAtIE1vdmVkIGJvYXJkIHNwZWNpZmljIFBDSSBpbml0IHBhcnRzIG91dCBvZiBDUFUgZGlyZWN0b3J5LgogIC0gQWRkZWQgVExCIGVudHJ5IGZvciBQQ0ktMSBJTyBNZW1vcnkKICAtIFVwZGF0ZWQgUkVBRE1FLm1wYzg1eHhhZHMKCiogUGF0Y2ggYnkgU2FzY2hhIEhhdWVyLCAyOCBKdW46CiAgLSBhZGQgZ2VuZXJpYyBzdXBwb3J0IGZvciBNb3Rvcm9sYSBpLk1YIGFyY2hpdGVjdHVyZQogIC0gYWRkIHN1cHBvcnQgZm9yIG14MWFkcywgbXgxZnMyIGFuZCBzY2I5MzI4IGJvYXJkcwoKKiBQYXRjaGVzIGJ5IE1hcmMgTGVlbWFuLCAyMyBKdWwgMjAwNDoKICAtIEFkZCBkZWZpbmUgZm9yIHRoZSBQQ0kvTWVtb3J5IEJ1ZmZlciBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCiAgLSBjb3JyZWN0ZWQgY29tbWVudHMgaW4gY3B1L21wYzgyNHgvY3B1X2luaXQuYwoKKiBBZGQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc2VyaWFsIGludGVyZmFjZXMKICAoZm9yIGV4YW1wbGUgdG8gYWxsb3cgbW9kZW0gZGlhbC1pbiAvIGRpYWwtb3V0KQoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE1IEp1bCAyMDA0OgogIGNwdS9wcGM0eHgvc2RyYW0uYyByZXdyaXR0ZW4gbm93IHVzaW5nIGdldF9yYW1fc2l6ZSgpCgoqIEZpeCBOU0NVIGNvbmZpZzsgYWRkIGV0aGVybmV0IHdha2V1cCBjb2RlLgoKKiBBZGQgbGluayBmb3IgcHJlbG9hZGVyIGZvciBNb3Rvcm9sYSBDb2xkZmlyZSB0byBSRUFETUUubTY4awoKKiBQYXRjaCBieSBNaWNoYWVsIEJlbmR6aWNrLCAxMiBKdWwgMjAwNDoKICBmaXggb3V0cHV0IGZvcm1hdHRpbmcgaW4gZHJpdmVycy9jZmlfZmxhc2guYwoKKiBQYXRjaCBieSBNYXJrIEpvbmFzLCAwMiBKdWwgMjAwNDoKICBGaXggbG93Ym9vdCAoYWdhaW4pIG9uIE1QQzV4eHgKCiogUGF0Y2ggYnkgQ3VydCBCcnVuZSwgMDcgSnVsIDIwMDQ6CiAgcmVsb2NhdGUgZXhjZXB0aW9uIHZlY3RvcnMgb24gYXJtNzIwdCBpZiBuZWVkZWQKCiogUGF0Y2ggYnkgR2VvcmdlIEcuIERhdmlzLCAwNiBKdWwgMjAwNDoKICAtIHVwZGF0ZSBtYWNoLXR5cGVzLmggdG8gbGF0ZXN0IGFybS5saW51eC5vcmcudWsgbWFzdGVyIGxpc3QKICAtIFNldCBjb3JyZWN0IE9NQVAxNjEwIGJpX2FyY2hfbnVtYmVyIGZvciBidWlsZCB0YXJnZXQKCiogUGF0Y2ggYnkgQ3VydCBCcnVuZSwgMDYgSnVsIDIwMDQ6CiAgZXZiNDUxMDogYWRkIHN1cHBvcnQgZm9yIHRpbWVyIGludGVycnVwdDsgY2xlYW51cAoKKiBQYXRjaCBieSBEYW4gUG9pcm90LCAwNiBKdWwgMjAwNDoKICBGaXggc2JjODI2MCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKCiogQ2xlYW51cCByZWR1bmRhbmQgImNvbnNvbGUiIGVudmlyb25tZW50IHZhcmlhYmxlCgoqIFBhdGNoIGJ5IE1hcmsgSm9uYXMsIDA1IEp1bCAyMDA0OgogIGFkZCBzdXBwb3J0IGZvciB0aGUgVG90YWw1MTAwJ3MgYW5kIFRvdGFsNTIwMCdzIExDRCBzY3JlZW4KCiogUGF0Y2hlcyBieSBEYW4gRWlzZW5odXQsIDAxIEp1bCAyMDA0OgogIC0gUkVBRE1FIGZpeGVzLgogIC0gTW92ZSBkb2MyMDAwLmggaW5jbHVkZSB0byBwcmV2ZW50IGNvbXBpbGVyIHdhcm5pbmcgb24gc29tZSBib2FyZHMKCiogUGF0Y2ggYnkgTWFyayBKb25hcywgMDEgSnVsIDIwMDQ6CiAgQWRkZWQgc3VwcG9ydCBmb3IgVG90YWw1MTAwIGFuZCBUb3RhbDUyMDAgKFJldi4xIGFuZCBSZXYuMikKICBNR1Q1MTAwIGFuZCBNUEM1MjAwIGJhc2VkIEZyZWVzY2FsZSBwbGF0Zm9ybXMuCgoqIFBhdGNoIGJ5IFBoaWxpcHBlIFJvYmluLCAwMSBKdWwgMjAwNDoKICBBZGQgaW5pdGlhbGl6YXRpb24gZm9yIEludGVncmF0b3IgYW5kIHZlcnNhdGlsZSBib2FyZCBmaWxlcy4KCiogUGF0Y2ggYnkgSGlua28gS29jZXZhciwgMDEgSnVuIDIwMDQ6CiAgRml4IFZGRCBGQiBhbGxvY2F0aW9uLCBhZGQgTENEIEZCIGFsbG9jYXRpb24gb24gQVJNCgoqIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDMwIEp1biAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBUUU01MjAwIGJvYXJkCgoqIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDI5IEp1biAyMDA0OgogIEFkZCBsb29wdyBjb21tYW5kOiBpbmZpbml0ZSB3cml0ZSBsb29wIG9uIGFkZHJlc3MgcmFuZ2UKCiogUGF0Y2hlcyBieSBZYXN1c2hpIFNob2ppLCAyOSBKdW4gMjAwNDoKICAtIGFkZCBlbXB0eSBpbmNsdWRlL2FzbS1taWNyb2JsYXplL3Byb2Nlc3Nvci5oCiAgLSBhZGQgdG8gQ1JFRElUUyBhbmQgTUFJTlRBSU5FUlMKICAtIGFkZCBnZCBpbml0aWFsaXphdGlvbgogIC0gYWRkIE1pY3JvQmxhemUgYW5kIFNVWkFLVSBib2FyZCB0byBNQUtFQUxMIHNjcmlwdAogIC0gYWRkIHJlc2V0IHN1cHBvcnQgZm9yIFNVWkFLVQogIC0gYWRkIGZsdXNoX2NhY2hlKCkgZm9yIE1pY3JvQmxhemUKICAtIGFkZCBDRkdfRkxBU0hfU0laRSB0byBpbmNsdWRlL2NvbmZpZ3Mvc3V6YWt1Lmggc2luY2Ugd2UgaGF2ZSBmaXhlZAogICAgc2l6ZSBmbGFzaCBtZW1vcnkgb24gU1VaQUtVCgoqIFBhdGNoIGJ5IFByYWthc2ggS3VtYXIsIDI3IEp1biAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciB0aGUgUFhBMjUwIGJhc2VkIEludHJpbnN5YyBDZXJmIGJvYXJkLgoKKiBQYXRjaCBieSBZYXN1c2hpIFNob2ppLCAyNyBKdW4gMjAwNDoKICBmaXggY29tbWVudCBpbiBpbmNsdWRlL2NvbW1vbi5oCgoqIFJlbmFtZSBTQkM4NTYwIGludG8gc2JjODU2MCBmb3IgY29uc2lzdGVuY3kKCiogUGF0Y2ggYnkgRGFuaWVsIFBvaXJvdCwgMjQgSnVuIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIFdpbmQgUml2ZXIncyBzYmM4MjQwIGJvYXJkCgoqIFBhdGNoZXMgYnkgWWFzdXNoaSBTaG9qaSwgMjYgSnVuIDIwMDQ6CiAgLSBkcml2ZXJzL3NlcmlhbF94dWFydGxpdGUuYzogZml4ICJyZXR1cm4gMCIgaW4gdm9pZCBmdW5jdGlvbgogIC0gYWRkIG1pY3JvYmxhemUgc3VwcG9ydCB0byBta2ltYWdlIHRvb2wKCiogUGF0Y2ggYnkgRnJlZCBLbGF0dCwgMjUgSnVuIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIFdpbmRSaXZlcidzIHNiYzg1NjAgYm9hcmQKCiogUGF0Y2ggYnkgTmljb2xhcyBMYWNyZXNzb25uaWVyZSwgMjQgSnVuIDIwMDQKICBTbWFsbCBCdWdzIGZpeGVzIGZvciAiYXQ5MXJtOTIwMGRrIiBib2FyZDoKICAtIFRpbWluZyBtb2RpZmljYXRpb25zIGZvciBTUEkgRGF0YUZsYXNoIGFjY2VzcwogIC0gRml4IE5BTkQgZmxhc2ggZGV0ZWN0aW9uIGJ1ZwoKKiBQYXRjaCBieSBOaWNvbGFzIExhY3Jlc3Nvbm5pZXJlLCAyNCBKdW4gMjAwNDoKICBBZGQgU3VwcG9ydCBmb3IgRmxhc2ggQVQ0OUJWNjQxNiBmb3IgQVQ5MVJNOTIwMERLIGJvYXJkCgoqIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciwgMTcgSnVuZSAyMDA0OgogIENvbXBsZXRpb24gb2YgdGhlIDg1NDBBRFMvODU2MEFEUyB1cGRhdGVzOgogIEZpeCBzb21lIFBDSSBhbmQgUmFwaWQgSS9PIG1lbW9yeSBtYXBzLAogIEluaXRpYWxpemUgYm90aCBUU0VDIDEgYW5kIDIsCiAgSW5pdGlhbGl6ZSBTRFJBTQogIFVwZGF0ZSBNQUlOVEFJTkVSIGZvciA4NXh4IGJvYXJkcyBhbmQgUkVBRE1FLm1wYzg1eHhhZHMKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMTYgSnVuIDIwMDQ6CiAgUmVtb3ZlIG9ic29sZXRlIEFkZGVySUkgcG9ydCB3aGljaCB3YXMgc3VwZXJzZWRlZCBieSB1bmlmaWVkCiAgQWRkZXJJSS9BZGRlcjg3eCBwb3J0CgoqIFBhdGNoIGJ5IExhZGlzbGF2IE1pY2hsLCAxNiBKdW4gMjAwNDoKICBGaXggZ2NjLTMuMy4zIHdhcm5pbmdzIGZvciBzbWM5MTExMS5jCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDIgSnVsIDIwMDQ6CiAgLSBGaXggYnVnIGluIDQwNSBldGhlcm5ldCBkcml2ZXI7IGFsbG9jYXRlZCBkYXRhIG5vdCBjbGVhcmVkIQogIC0gRml4IHByb2JsZW0gaW4gNDA1IGkyYyBkcml2ZXI7IGRvbid0IHRyeSB0byBwcmludCB3aXRob3V0IGNvbnNvbGUhCgoqIFBhdGNoIGJ5IFBhdWwgUnVobGFuZCwgMTEgSnVuIDIwMDQ6CiAgUmVtb3ZlIGRlYnVnIGNvZGUgZnJvbSAnYm9hcmQvbHBkN2E0MHgvZmxhc2guYycKCiogUGF0Y2ggYnkgQW5kcmVhIE1hcnNvbiwgMTEgSnVuIDIwMDQ6CiAgVXBkYXRlIGZvciBQUENoYW1lbGVvbiBib2FyZDoKICAtIHN1cHBvcnQgZm9yIFN5c0NsayBAIDI1TUh6CiAgLSBzdXBwb3J0IGZvciBTaWxpY29uIE1vdGlvbiBTTTcxMiBWR0EgY29udHJvbGxlcgogIC0gc29tZSBjbGVhbiB1cHMKCiogUGF0Y2hlcyBieSBSaWNoYXJkIFdvb2RydWZmLCAxMCBKdW4gMjAwNDoKICAtIGZpeCBwcm9ibGVtcyB3aXRoIGV4YW1wbGVzL3N0dWJzLmMgZm9yIEdDQyA+PSAzLjQKICAtIGZpeCBwcm9ibGVtcyB3aXRoIGdkIGluaXRpYWxpemF0aW9uCgoqIFBhdGNoIGJ5IEN1cnQgQnJ1bmUsIDE3IE1heSAyMDA0OgogIC0gQWRkIHN1cHBvcnQgZm9yIFNhbXN1bmcgUzNDNDUxMEIgQ1BVIChBUk03dGRtaSBiYXNlZCBTb0MpCiAgLSBBZGQgc3VwcG9ydCBmb3IgRVNQRC1JbmMuIEVWQjQ1MTAgQm9hcmQKCiogUGF0Y2ggYnkgTWFyYyBMZWVtYW4sIDExIE1heSAyMDA0OgogIEZpeCBmb3IgTVBDODI0NSAtIHJlYWRpbmcgUFBDIE1lbW9yeSBmcm9tIGFub3RoZXIgZGV2aWNlIHdpdGggdGhlCiAgUFBDIGFzIFBDSSB0YXJnZXQgZGV2aWNlIGNvcnJ1cHRzIGRhdGEgZHVlIHRvIGludGVyZW5hbCBoYXJkd2FyZQogIGJ1ZmZlcmluZy4KCiogRml4ICJjbHMiIGNvbW1hbmQgd2hlbiB1c2VkIHdpdGggc3BsYXNoIHNjcmVlbgoKKiBJbmNyZWFzZSBORlMgZG93bmxvYWQgdGltZW91dCAobm93IDEgbWluIC0gMTAgc2VjIGlzIHRvIHNob3J0IGZvciBhCiAgc2xvdyBkb3dubG9hZCBvZiBhIGJpZyBpbWFnZSkKCiogQWRkICJjbHMiIGZ1bmN0aW9uIHRvIE1QQzgyMyBMQ0QgZHJpdmVyIHNvIHdlIGNhbiByZWluaXRpYWxpemUgdGhlCiAgZGlzcGxheSBldmVuIGFmdGVyIHNob3dpbmcgYSBiaXRtYXAKCiogUGF0Y2ggYnkgSm9zZWYgV2FnbmVyLCAwNCBKdW4gMjAwNDoKICAtIEREUiBSYW0gc3VwcG9ydCBmb3IgUE01MjAgKE1QQzUyMDApCiAgLSBzdXBwb3J0IGZvciBkaWZmZXJlbnQgZmxhc2ggdHlwZXMgKFBNNTIwKQogIC0gVVNCIC8gSURFIC8gQ0YtQ2FyZCAvIERpc2tPbkNoaXAgc3VwcG9ydCBmb3IgUE01MjAKICAtIDggYml0IGJvb3Qgcm9tIHN1cHBvcnQgZm9yIFBNNTIwL0NFNTIwCiAgLSBBZGQgYXV0byBTRFJBTSBtb2R1bGUgZGV0ZWN0aW9uIGZvciBNaWNyb1N5cyBDUEM0NSBib2FyZCAoTVBDODI0NSkKICAtIEkyQyBhbmQgUlRDIHN1cHBvcnQgZm9yIENQQzQ1CiAgLSBzdXBwb3J0IG9mIG5ldyBmbGFzaCB0eXBlICgyOEYxNjBDM1QpIGZvciBDUEM0NQoKKiBGaXggZmxhc2ggcGFyYW1ldGVycyBwYXNzZWQgdG8gTGludXggZm9yIFBQQ2hhbWVsZW9uIGJvYXJkCgoqIFJlbW92ZSBldGhfaW5pdCgpIGZyb20gbGliX2FybS9ib2FyZC5jOyBpdCdzIGRvbmUgaW4gbmV0Lm5ldC5jLgoKKiBQYXRjaCBieSBQYXVsIFJ1aGxhbmQsIDEwIEp1biAyMDA0OgogIGZpeCBzdXBwb3J0IGZvciBMb2dpYyBTREstTEg3QTQwNCBib2FyZCBhbmQgY2xlYW4gdXAgdGhlCiAgTEg3QTQwNCByZWdpc3RlciBtYWNyb3MuCgoqIFBhdGNoIGJ5IE1hdHRoZXcgTWNDbGludG9jaywgMTAgSnVuIDIwMDQ6CiAgTW9kaWZ5IGNvZGUgdG8gc2VsZWN0IGNvcnJlY3Qgc2VyaWFsIGNsb2NrIG9uIFNhbmRwb2ludDgyNDUKCiogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCAxMCBKdW4gMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgSW50ZWwgSzMgc3RyYXRhIGZsYXNoLgoKKiBQYXRjaCBieSBUaG9tYXMgQnJhbmQsIDEwIEp1biAyMDA0OgogIEZpeCAibG9hZHMiIGNvbW1hbmQgb24gREsxUzEwIGJvYXJkCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDA5IEp1biAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciA4TUIgZmxhc2ggU0lNTSBhbmQgSkZGUzIgZmlsZSBzeXN0ZW0gb24KICBNb3Rvcm9sYSBGQURTIGJvYXJkIGFuZCBpdHMgZGVyaXZhdGl2ZXMgKE1QQzg2eEFEUywgTVBDODg1QURTKS4KCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMDkgSnVuIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIEFuYWxvZ3VlJk1pY3JvIEFkZGVyODd4IGFuZCB0aGUgb2xkZXIgQWRkZXJJSSBib2FyZC4KCiogUGF0Y2ggYnkgTWluZy1MZW4gV3UsIDA5IEp1biAyMDA0OgogIEFkZCBzdXBwcG9ydCBmb3IgTUM5MzI4IChEYXJnb25iYWxsKSBDUFUgYW5kIE1vdG9yb2xhIE1YMUFEUyBib2FyZAoKKiBQYXRjaCBieSBTYW0gU29uZywgMDkgSnVuIDIwMDQ6CiAgLSBBZGQgc3VwcG9ydCBmb3IgUlBYbGl0ZV9EVyBib2FyZAogIC0gVXBkYXRlIEZMQVNIIGRyaXZlciBmb3IgNCpBTTI5REwzMjNEQjkwVkkKICAtIEFkZCBvcHRpb24gY29uZmlndXJhdGlvbiBvZiBDRkdfRU5WX0lTX0lOX05WUkFNIG9uIFJQWGxpdGVfRFcgYm9hcmQKCiogUGF0Y2ggYnkgTWFyayBKb25hcywgMDggSnVuZSAyMDA0OgogIC0gTWFrZSBNUEM1MjAwIGJvYXJkcyBldmFsdWF0ZSB0aGUgU1ZSIHRvIHByaW50IHByb2Nlc3NvciBuYW1lIGFuZAogICAgdmVyc2lvbiBpbiBjaGVja2NwdSgpIChjcHUvbXBjNXh4eC9jcHUuYykuCgoqIFBhdGNoIGJ5IEthaS1Vd2UgQmxvZW0sIDA2IE1heSAyMDA0OgogIEZpeCBlbmRpYW5lc3MgcHJvYmxlbSBpbiBjcmFtZnMgY29kZQoKKiBQYXRjaCBieSBUb20gQXJtaXN0ZWFkLCAwNCBKdW4gMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgTUFYNjkwMCBSVEMKCiogUGF0Y2hlcyBieSBMYWRpc2xhdiBNaWNobCwgMDMgSnVuIDIwMDQ6CiAgLSBmaXggY2ZpX2ZsYXNoLmMgb24gTEUgc3lzdGVtcwogIC0gbGV0ICdtYWtlIG1ycHJvcGVyJyBkZWxldGUgdS1ib290LmltZyBhcyB3ZWxsCiAgLSB0dXJuIHByaW50ZiBpbnRvIGRlYnVnIGluIGNmaV9mbGFzaC5jCgoqIFBhdGNoIGJ5IEt1cnQgU3RyZW1lcmNoLCAyOCBNYXkgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgRXh5cyBYU0VuZ2luZSBib2FyZAoKKiBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyNyBNYXkgMjAwNDoKICBGaXggYSBNUEM1eHh4IEkyQyB0aW1pbmcgaXNzdWUgaW4gaTJjX3Byb2JlKCkuCgoqIFBhdGNoIGJ5IExlaWYgTGluZGhvbG0sIDI3IE1heSAyMDA0OgogIEZpeCBib2FyZF9pbml0X2YoKSBmb3IgZGJhdTF4MDAgYm9hcmQuCgoqIFBhdGNoIGJ5IEltcmUgRGVhaywgMjYgTWF5IDIwMDQ6CiAgT24gT01BUDE2MTAgcGxhdGZvcm1zIGNoZWNrIGlmIGJvb3RpbmcgZnJvbSBSQU0oQ1MwKSBvciBmbGFzaChDUzMpLgogIFNldCBmbGFzaCBiYXNlIGFjY29yZGluZ2x5LCBhbmQgZGVjaWRlIHdoZXRoZXIgdG8gZG8gb3Igc2tpcCBib2FyZAogIHNwZWNpZmljIHNldHVwIHN0ZXBzLgoKKiBQYXRjaCBieSBKb3NlZiBCYXVtZ2FydG5lciwgMjYgTWF5IDIwMDQ6CiAgQWRkIG1pc3NpbmcgZGVmaW5lIGluIGluY2x1ZGUvYXNtLW02OGsvZ2xvYmFsX2RhdGEuaAoKKiBQYXRjaCBieSBKb3NlZiBCYXVtZ2FydG5lciwgMjUgTWF5IDIwMDQ6CiAgQWRkIG1pc3NpbmcgZnVuY3Rpb25zIGdldF90aWNrcygpIGFuZCBnZXRfdGJjbGsoKSBpbiBsaWJfbTY4ay90aW1lLmMKCiogUGF0Y2ggYnkgUGF1bCBSdWhsYW5kLCAyNCBNYXkgMjAwNDoKICBmaXggU0RSQU0gaW5pdGlhbGl6YXRpb24gZm9yIExQRDdBNDAwIGJvYXJkLgoKKiBQYXRjaCBieSBKaWFuIFpoYW5nLCAyMCBNYXkgMjAwNDoKICBhZGQgc3VwcG9ydCBmb3IgZW52aXJvbm1lbnQgaW4gTkFORCBmbGFzaAoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAyMCBNYXkgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgSW50ZXJwaGFzZSBpU1BBTiBib2FyZHMuCgoqIFBhdGNoZXMgYnkgUGF1bCBSdWhsYW5kLCAxNyBNYXkgMjAwNDoKICAtIEFkZCBJL08gZnVuY3Rpb25zIHRvIHRoZSBzbWM5MTExMSBldGhlcm5ldCBkcml2ZXIgdG8gc3VwcG9ydCB0aGUKICAgIExvZ2ljIExQRDdBNDB4IGJvYXJkcy4KICAtIEFkZCBzdXBwb3J0IGZvciB0aGUgTG9naWMgWm9vbSBMSDdBNDB4IGJhc2VkIFNESyBib2FyZChzKSwKICAgIHNwZWNpZmljYWxseSB0aGUgTFBEN0E0MDAuCgoqIFBhdGNoZXMgYnkgUm9iZXJ0IFNjaHdlYmVsLCAxNSBNYXkgMjAwNDoKICAtIGNhbGwgTUFDIGFkZHJlc3MgcmVhZGluZyBjb2RlIGFsc28gZm9yIFNNU0M5MUMxMTE7CiAgLSBtYWtlIFNNU0M5MUMxMTEgdGltZW91dCBjb25maWd1cmFibGUsIHJlbW92ZSBkdXBsaWNhdGUgY29kZQogIC0gZml4IGdldF90aW1lcigpIGZvciBQWEEKICAtIHVwZGF0ZSBkb2MvUkVBRE1FLkpGRlMyCiAgLSB1c2UgImJvb3RmaWxlIiBlbnYgdmFyaWFibGUgYWxzbyBmb3IgamZmczIKCiogUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgMTQgTWF5IDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIENvZ2VudCBDU0I0NzIgYm9hcmQgKDhNQiBGbGFzaCBSZXYpCgoqIFBhdGNoIGJ5IFRob21hcyBWaWVod2VnZXIsIDE0IE1heSAyMDA0OgogIC0gZmxhc2guaDogbW9yZSBmbGFzaCB0eXBlcyBhZGRlZAogIC0gaW1tYXBfODI2MC5oOiBzb21lIGJpdHMgYWRkZWQgKHVzZWZ1bCBmb3IgUk1JSSkKICAtIGNtZF9jb25pbmZvLmM6IHR5cG8gY29ycmVjdGVkLCBwcmludGYgLT4gcHV0cwogIC0gcmVkdWNlZCBzaXplIGJ5IHJlcGxhY2luZyBzcGFjZXMgd2l0aCB0YWIKCiogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCAxMyBNYXkgMjAwNDoKICBBZGQgJ2ltZ2V4dHJhY3QnIGNvbW1hbmQ6IGV4dHJhY3Qgb25lIHBhcnQgb2YgYSBtdWx0aSBmaWxlIGltYWdlLgoKKiBQYXRjaGVzIGJ5IEpvbiBMb2VsaWdlciwgMTEgTWF5IDIwMDQ6CiAgRHluYW1pY2FsbHkgaGFuZGxlIFJFVjEgYW5kIFJFVjIgTVBDODV4eCBwYXJ0cy4KICAgIChKb24gTG9lbGlnZXIsIDEwLU1heS0yMDA0KS4KICBOZXcgY29uc2lzdGVudCBtZW1vcnkgbWFwIGFuZCBMb2NhbCBBY2Nlc3MgV2luZG93IGFjcm9zcyBNUEM4NXh4IGxpbmUuCiAgTmV3IENDU1JCQVIgYXQgMHhFMDAwXzAwMDAgbm93LgogIEFkZCBSQVBJRCBJL08gbWVtb3J5IG1hcC4KICBOZXcgbWVtb3J5IG1hcCBpbiBSRUFETUUuTVBDODV4eGFkcwogICAgKEt1bWFyIEdhbGEsIDEwLU1heS0yMDA0KQogIEJldHRlciBib2FyZCBhbmQgQ1BVIGlkZW50aWZpY2F0aW9uIG9uIE1QQzg1eHggYm9hcmRzIGF0IGJvb3QuCiAgICAoSm9uIExvZWxpZ2VyLCAxMC1NYXktMjAwNCkKICBTRFJBTSBjbG9jayBjb250cm9sIGZpeGVzIG9uIE1QQzg1NDBBRFMgJiBNUEM4NTYwIGJvYXJkcy4KICBTb21lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgTVBDODU0MEFEUyAmIE1QQzg1NjBBRFMgY2xlYW5lZCB1cC4KICAgIChKaW0gUm9iZXJ0c29uLCAxMC1NYXktMjAwNCkKICBSZXdyaXRlIG9mIHRoZSBNUEM4NXh4IFRocmVlIFNwZWVkIEV0aGVybmV0IENvbnRyb2xsZXIgKFRTRUMpIGRyaXZlci4KICBTdXBwb3J0cyBtdWx0aXBsZSBQSFlzLgogICAgKEFuZHkgRmxlbWluZywgMTAtTWF5LTIwMDQpCiAgU29tZSBSRUFETUUuTVBDODV4eGFkcyB1cGRhdGVzLgogICAgKEt1bWFyIEdhbGEsIDEwLU1heS0yMDA0KQogIENvcHlyaWdodCB1cGRhdGVzIGZvciAiRnJlZXNjYWxlIgogICAgKEFuZHkgRmxlbWluZywgMTAtTWF5LTIwMDQpCgoqIFBhdGNoIGJ5IFN0ZXBoZW4gV2lsbGlhbXMsIDExIE1heSAyMDA0OgogIEFkZCBmbGFzaCBzdXBwb3J0IGZvciBTVCBNMjlXMDQwQgogIFJlZHVjZSBKU0Ugc3BlY2lmaWMgZmxhc2guYyB0byByZW1vdmUgZGVhZCBjb2RlLgoKKiBQYXRjaCBieSBNYXJrdXMgUGlldHJlaywgMDQgTWF5IDIwMDQ6CiAgRml4IGNsZWFyX2JzcyBjb2RlIGZvciBBUk0gc3lzdGVtcyAoYWxsIGV4Y2VwdCBzM2M0NGIwIHdoaWNoCiAgZG9lc24ndCBjbGVhciBCU1MgYXQgYWxsPykKCiogRml4ICJwaW5nIiBwcm9ibGVtIG9uIElOQy1JUCBib2FyZC4gU3RyYW5nZSBwcm9ibGVtOgogIFNvbWV0aW1lcyB0aGUgc3RvcmUgd29yZCBpbnN0cnVjdGlvbiBoYW5ncyB3aGlsZSB3cml0aW5nIHRvIG9uZSBvZgogIHRoZSBTd2l0Y2ggcmVnaXN0ZXJzLCBidXQgb25seSBpZiB0aGUgbmV4dCBpbnN0cnVjdGlvbiBpcyAxNi1ieXRlCiAgYWxpZ25lZC4gTW92aW5nIHRoZSBpbnN0cnVjdGlvbiBpbnRvIGEgc2VwYXJhdGUgZnVuY3Rpb24gc29tZWhvdwogIG1ha2VzIHRoZSBwcm9ibGVtIGdvIGF3YXkuCgoqIFBhdGNoIGJ5IFJpc2hpIEJoYXR0YWNoYXJ5YSwgMDggTWF5IDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIFRJIE9NQVA1OTEyIE9TSyBCb2FyZAoKKiBQYXRjaCBieSBTYW0gU29uZyBNYXksIDA3IE1heSAyMDA0OgogIEZpeCB0eXBvIG9mIFVQTSB0YWJsZSBmb3Igcm11IGJvYXJkCgoqIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAwNSBNYXkgMjAwNDoKICAtIEludHJhY29tIGJvYXJkIHVwZGF0ZS4KICAtIEFkZCBDb2RlYyBQT1NULgoKKiBBZGQgc3VwcG9ydCBmb3IgdGhlIHNlY29uZCBFdGhlcm5ldCBpbnRlcmZhY2UgZm9yIHRoZSAnUFBDaGFtZWxlb24nCiAgYm9hcmQuCgoqIFBhdGNoIGJ5IERhdmUgUGV2ZXJsZXksIDMwIEFwciAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBPTUFQNzMwIFBlcnNldXMyIERldmVsb3BtZW50IGJvYXJkCgoqIFBhdGNoIGJ5IEFsYW4gSi4gTHVzZSwgMjkgQXByIDIwMDQ6CiAgRml4IGZsYXNoIGNoaXAtc2VsZWN0IChPUjApIG9wdGlvbiByZWdpc3RlciBzZXR0aW5nIG9uIEZBRFMgYm9hcmRzLgoKKiBQYXRjaCBieSBBbGFuIEouIEx1c2UsIDI5IEFwciAyMDA0OgogIFJlcG9ydCBNSUkgbmV0d29yayBzcGVlZCBhbmQgZHVwbGV4IHNldHRpbmcgcHJvcGVybHkgd2hlbgogIGF1dG8tbmVnb3RpYXRlIGlzIG5vdCBlbmFibGVkLgoKKiBQYXRjaCBieSBKYXJyZXR0IFJlZGQsIDI5IEFwciAyMDA0OgogIEZpeCBoYW5nIG9uIHJlc2V0IG9uIE9jb3RlYSBib2FyZCBkdWUgdG8gZmxhc2ggaW4gd3JvbmcgbW9kZS4KCiogUGF0Y2ggYnkgRGF2ZSBQZXZlcmxleSwgMjkgQXByIDIwMDQ6CiAgYWRkIE1BQyBhZGRyZXNzIGRldGVjdGlvbiB0byBzbWM5MTExMSBkcml2ZXIKCiogUGF0Y2ggYnkgRGF2aWQgTfxsbGVyLCAyOCBBcHIgMjAwNDoKICBmaXggdHlwbyBpbiBsaWJfYXJtL2JvYXJkLmMKCiogUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgMjAgQXByIDIwMDQ6CiAgLSBSRUFETUUgdXBkYXRlOiBhZGQgQ09ORklHX0NTQjI3MiBhbmQgY3NiMjcyX2NvbmZpZwogIC0gYWRkIGRlc2NyaXB0aW9ucyBmb3Igc29tZSBNSUkvUEhZIG9wdGlvbnMsIENPTkZJR19JMkNGQVNULCBhbmQKICAgIGkyY2Zhc3QgZW52aXJvbm1lbnQgdmFyaWFibGUKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMTkgQXByIDIwMDQ6CiAgLSBSZW5hbWUgRFVFVF9BRFMgdG8gTVBDODg1QURTCiAgLSBSZW5hbWUgQ09ORklHX0RVRVQgdG8gQ09ORklHX01QQzg4NV9GQU1JTFkKICAtIFJlbmFtZSBDT05GSUdfODY2X2V0X2FsIHRvIENPTkZJR19NUEM4NjZfRkFNSUxZCiAgLSBDbGVhbiB1cCBGQURTIGZhbWlseSBwb3J0IHRvIHVzZSB0aGUgbmV3IGRlZmluZXMKCiogRml4IFBDSSBzdXBwb3J0IG9uIENQQzQ1IGJvYXJkCgoqIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMjUgQXByIDIwMDQ6CiAgQWRkIE5pb3MgR0RCL0pUQUcgQ29uc29sZSBzdXBwb3J0OgogIC0gQWRkIHN0dWJzIHRvIHN1cHBvcnQgZ2RiIHZpYSBKVEFHLgogIC0gQWRkIHN1cHBvcnQgZm9yIGNvbnNvbGUgb3ZlciBKVEFHLgogIC0gTWlub3IgY2xlYW51cC4KCiogQWRkIHN1cHBvcnQgZm9yIENBVGNlbnRlciBib2FyZCAoYmFzZWQgb24gUFBDaGFtZWxlb24gTUUgbW9kdWxlKQoKKiBQYXRjaCBieSBLbGF1cyBIZXlkZWNrLCAxMiBNYXkgMjAwNDoKICBVc2luZyBleHRlcm5hbCB3YXRjaGRvZyBmb3IgS1VQNCBib2FyZHMgaW4gbXBjOHh4L2NwdS5jOwogIGxvYWRfc2VybnVtX2V0aGFkZHIoKSBmb3IgS1VQNCBib2FyZHMgaW4gbGliX3BwYy9ib2FyZC5jOwogIHZhcmlvdXMgY2hhbmdlcyB0byBLVVA0IGJvYXJkIHNwZWNpZmljIGZpbGVzCgoqIEZpeCBtaW5vciBuZXR3b3JrIHByb2JsZW0gb24gTVBDNTIwMDogbmVlZCBzb21lIGRlbGF5IGJldHdlZW4KICByZXNldHRpbmcgdGhlIFBIWSBhbmQgc2VuZGluZyB0aGUgZmlyc3QgcGFja2V0LiBJbXBsZW1lbnRlZCBpbiBhCiAgIm5hdHVyYWwiIHdheSBieSBpbnZva2luZyB0aGUgUEhZIHJlc2V0IGFuZCBpbml0aWFsaXphdGlvbiBjb2RlCiAgb25seSBvbmNlIGFmdGVyIHBvd2VyIG9uIHZzLiBlYWNoIHRpbWUgdGhlIGludGVyZmFjZSBpcyBicm91Z2h0IHVwLgoKKiBBZGQgc29tZSBsaW1pdGVkIHN1cHBvcnQgZm9yIGxvdy1zcGVlZCBkZXZpY2VzIHRvIFNMODExIFVTQiBjb250cm9sbGVyCiAgKGF0IGxlYXN0ICJ1c2IgcmVzZXQiIG5vdyBwYXNzZXMgc3VjY2Vzc2Z1bGx5IGFuZCAidXNiIGluZm8iIGRpc3BsYXlzCiAgY29ycmVjdCBpbmZvcm1hdGlvbikKCiogQ2hhbmdlIGluaXQgc2VxdWVuY2UgZm9yIG11bHRpcGxlIG5ldHdvcmsgaW50ZXJmYWNlczogaW5pdGlhbGl6ZQogIG9uLWNoaXAgaW50ZXJmYWNlcyBiZWZvcmUgZXh0ZXJuYWwgY2FyZHMuCgoqIEZpeCBtZW1vcnkgbGVhayBpbiB0aGUgTkFORC1zcGVjaWZpYyBKRkZTMiBjb2RlCgoqIEZpeCBTTDgxMSBVU0IgY29udHJvbGxlciB3aGVuIGF0dGFjaGVkIHRvIGEgVVNCIGh1YgoKKiBGaXggY29uZmlnIG9wdGlvbiBzcGVsbGluZyBpbiBQTTUyMCBjb25maWcgZmlsZQoKKiBGaXggUEhZIGRpc2NvdmVyeSBwcm9ibGVtIGluIGNwdS9tcGM4eHgvZmVjLmMgKGludHJvZHVjZWQgYnkKICBwYXRjaGVzIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAzMCBNYXIgMjAwNCkKCiogRml4IG1pbm9yIE5BTkQgSkZGUzIgcmVsYXRlZCBpc3N1ZQoKKiBGaXhlcyBmb3IgU0w4MTEgVVNCIGNvbnRyb2xsZXI6CiAgLSBpbXBsZW1lbnQgd29ya2Fyb3VuZCBmb3IgYnJva2VuIG1lbW9yeSBzdGljawogIC0gaW1wcm92ZSBlcnJvciBoYW5kbGluZwoKKiBJbmNyZWFzZSBwYWNrZXQgc2VuZCB0aW1lb3V0IHRvIDEgbXMgaW4gY3B1L21wYzh4eC9zY2MuYyB0byBiZXR0ZXIKICBjb3BlIHdpdGggY29uZ2VzdGVkIG5ldHdvcmtzLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMS4xLjE6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMjMgQXByIDIwMDQ6CiAgRml4IFZTQy9DSVMgODIwMSBwaHkgZGVzY3JhbWJsZXIgaW50ZXJvcGVyYWJpbGl0eSB0aW1pbmcgZHVlIHRvCiAgZXJyYXRhIGZyb20gVml0ZXNzZSBTZW1pY29uZHVjdG9yLgoKKiBQYXRjaCBieSBQaGlsaXBwZSBSb2JpbiwgMjIgQXByIDIwMDQ6CiAgRml4IGV0aGVybmV0IGNvbmZpZ3VyYXRpb24gZm9yICJ2ZXJzYXRpbGUiIGJvYXJkCgoqIFBhdGNoIGJ5IEtzaGl0aWogR3VwdGEsIDIxIEFwciAyMDA0OgogIFJlbW92ZSBidXN5IGxvb3AgYW5kIHVzZSBNUFUgdGltZXIgZnIgdXNsZWVwKCkgb24gT01BUDE1MTAvMTYxMCBib2FyZHMKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMjQgRmViIDIwMDQ6CiAgRml4IGEgYnVnIGluIEFUOTFSTTkyMDAgZXRoZXJuZXQgZHJpdmVyOgogIFRoZSBNSUkgaW50ZXJmYWNlIGlzIG5vdyBpbml0aWFsaXplZCBiZWZvcmUgYWNjZXNzaW5nIHRoZSBQSFkuCgoqIFBhdGNoIGJ5IEpvaG4gS2VybCwgMTkgQXByIDIwMDQ6CiAgVXNlIFUtYm9vdCdzIG1paXBoeS5oIGZvciBQSFkgcmVnaXN0ZXIgbmFtZXMsIHJhdGhlciB0aGFuCiAgaW50cm9kdWNpbmcgYSBuZXcgaGVhZGVyIGZpbGUuCgoqIFVwZGF0ZSBwY2lfaWRzLmggZnJvbSBsaW51eC0yLjQuMjYKCiogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMTkgQXByIDIwMDQ6CiAgRml4IHByb2JsZW0gY2F1c2UgYnkgVkxBTiBmdW5jdGlvbiBvbiBsaXR0bGUgZW5kaWFuIGFyY2hpdGVjdHVyZQogIHdpdGhvdXQgVkxBTiBlbnZpcm9ubWVudAoKKiBDbGVhbiB1cCB0aGUgVFFNOHh4X1lZTUh6IGNvbmZpZ3VyYXRpb25zOyBhbGxvdyB0byB1c2UgdGhlIHNhbWUKICBiaW5hcnkgaW1hZ2UgZm9yIGFsbCBjbG9jayBmcmVxdWVuY2llcy4gSW1wbGVtZW50IHJ1bi10aW1lCiAgb3B0aW1pemF0aW9uIG9mIGZsYXNoIGFjY2VzcyB0aW1pbmcgYmFzZWQgb24gdGhlIGFjdHVhbCBidXMKICBmcmVxdWVuY3kuCgoqIE1vZGlmeSBLVVA0WCBib2FyZCBjb25maWd1cmF0aW9uIHRvIHVzZSBTTDgxMSBkcml2ZXIgZm9yIFVTQiBtZW1vcnkKICBzdGlja3MgKGluY2x1ZGluZyBGQVQgLyBWRkFUIGZpbGVzeXN0ZW0gc3VwcG9ydCkKCiogQWRkIFNMODExIEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UgZHJpdmVyIGZvciBVU0IKCiogQWRkIENGR19JMkNfRUVQUk9NX0FERFJfT1ZFUkZMT1cgZGVzcmlwdGlvbiB0byBSRUFETUUKCiogUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDE5IEFwciAyMDA0OgogIEFsbG93IHRvIHVzZSBzaGVsbCBzdHlsZSBzeW50YXggKGkuIGUuICR7dmFyfSApIHdpdGggc3RhbmRhcmQgcGFyc2VyLgogIE1pbm9yIHBhdGNoZXMgZm9yIEludHJhY29tIGJvYXJkcy4KCiogUGF0Y2ggYnkgQ2hyaXN0aWFuIFBlbGwsIDE5IEFwciAyMDA0OgogIGNsZWFudXAgc3VwcG9ydCBmb3IgQ0YvSURFIG9uIFBDTUNJQSBmb3IgUFhBMjVYCgoqIFRlbXBvcmFyaWx5IGRpc2FibGVkIEpvaG4gS2VybCdzIGV4dGVuZGVkIE1JSSBjb21tYW5kIGNvZGUgYmVjYXVzZQogICJtaWl2YWxzLmgiIGlzIG1pc3NpbmcKCiogUGF0Y2hlcyBieSBNYXJrIEpvbmFzLCAxMyBBcHIgMjAwNDoKICAtIFJlbW92ZSBDUzAgY2hpcCBzZWxlY3QgdGltaW5nIHNldHRpbmcgZnJvbSBjcHUvbXBjNXh4eC9zdGFydC5TCiAgLSBBZGQgc3luYyBpbnN0cnVjdGlvbnMgdG8gSWNlQ3ViZSBTRFJBTSBpbml0IGNvZGUKICAtIE1vdmUgU0RSQU0gY2hpcCBjb25zdGFudHMgaW50byBzZXBlcmF0ZSBpbmNsdWRlIGZpbGVzCiAgLSBVbmlmeSBERFIgYW5kIFNEUiBpbml0aWFsaXphdGlvbiBjb2RlCiAgLSBVbmlmeSBhbGwgSWNlQ3ViZSAoTGl0ZTV4eHgpIHRhcmdldCBuYW1lcwoKKiBQYXRjaCBieSBKb2huIEtlcmwsIDE2IEFwciAyMDA0OgogIEVuYWJsZSByYW5nZXMgaW4gbWlpIGNvbW1hbmQsIGUuZy4gbWlpIHJlYWQgMC0xZiAwIG9yCiAgbWlpIHJlYWQgNC03IDE4LTFhLiAgQWxzbyBhZGQgbWlpIGR1bXAgc3ViY29tbWFuZCBmb3IKICBwcmV0dHktcHJpbnRpbmcgc3RhbmRhcmQgcmVncyAwLTUuCgoqIFBhdGNoIGJ5ICBTdGVwaGVuIFdpbGxpYW1zLCAxNiBBcHJpbCAyMDA0OgogIGZpeCB0eXBvIGluIEpTRS5oOyB1cGRhdGUgTUFJTlRBSU5FUlMKCiogUGF0Y2ggYnkgTWF0dGhldyBTLiBNY0NsaW50b2NrLCAxNCBBcHIgMjAwNDoKICBmaXggaW5pdGRyYW0gZnVuY3Rpb24gZm9yIHV0eDgyNDUgYm9hcmQKCiogUGF0Y2ggYnkgTWFya3VzIFBpZXRyZWssIDE0IEFwciAyMDA0OgogIHVzZSBBVEFHX0lOSVRSRDIgaW5zdGVhZCBvZiBkZXByZWNhdGVkIEFUQUdfSU5JVFJEIHRhZwoKKiBQYXRjaCBieSBSZWluaGFyZCBNZXllciwgMTggQXByIDIwMDQ6CiAgcHJvdmlkZSB0aGUgSURFIFJlc2V0IEZ1bmN0aW9uIGZvciBFTUsgNTIwMCBib2FyZHMKCiogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMTIgQXByIDIwMDQ6CiAgZml4IHBjaV9ob3NlX3dyaXRlX2NvbmZpZ197Ynl0ZSx3b3JkfV92aWFfZHdvcmQgcHJvYmxlbXMKCiogUGF0Y2ggYnkgU2FuZ21vb24gS2ltLCAxMiBBcHIgMjAwNDoKICBVcGRhdGUgbWF4IFJBTSBzaXplIGZvciBkZWJyaXMgYm9hcmQKCiogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMDggQXByIDIwMDQ6CiAgQWRkIFRMQiBlbnRyeSBmb3Igc2Vjb25kIERJTU0gc2xvdCBvbiBvY290ZWEKCiogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMDggQXByIDIwMDQ6CiAgYWRkIFJUTDgxNjkgbmV0d29yayBkcml2ZXIKCiogUGF0Y2ggYnkgRGFuIE1hbGVrLCAwNyBBcHIgMjAwNDoKICAtIEFkZCBzdXBwb3J0IGZvciBSUEMvU1R4IEdQMywgTW90b3JvbGEgODU2MCBib2FyZAogIC0gVXBkYXRlIDg1eHggVFNFQyBkcml2ZXIgc28gaXQgc2VhcmNoZXMgTUlJIGZvciBmaXJzdCBhdmFpbGFibGUgUEhZCiAgICBhbmQgdXNlcyB0aGF0IG9uZS4KICAtIEFkZCBmdW5jdGlvbnMgdG8gc3VwcG9ydCBjb25zb2xlIE1JSSBjb21tYW5kcy4KCiogUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgMDcgQXByIDIwMDQ6CiAgTW92ZSBpbml0aWFsaXphdGlvbiBvZiBiaV9paWNfZmFzdFtdCiAgZnJvbSBib2FyZF9pbml0X2YoKSB0byBib2FyZF9pbml0X3IoKQoKKiBQYXRjaCBieSBZYXN1c2hpIFNob2ppLCAwNyBBcHIgMjAwNDoKICBDbGVhbnVwIG1pY3JvYmxhemUgcG9ydAoKKiBQYXRjaCBieSBTYW5nbW9vbiBLaW0sIDA3IEFwciAyMDA0OgogIEFkZCBhdXRvIFNEUkFNIG1vZHVsZSBkZXRlY3Rpb24gZm9yIERlYnJpcyBib2FyZAoKKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgMDYgQXByIDIwMDQ6CiAgLSBGaXggc29tZSBQQ0kgcHJvYmxlbXMgb24gdGhlIE1QQzgyNjZBRFMgYm9hcmQKICAtIEZpeCB0aGUgbG9jYXRpb24gb2Ygc29tZSBQQ0kgZW50cmllcyBpbiB0aGUgaW1tYXAgc3RydWN0dXJlCgoqIFBhdGNoIGJ5IFlhc3VzaGkgU2hvamksIDA3IEFwciAyMDA0OgogIC0gYWRkIHN1cHBvcnQgZm9yIG1pY3JvYmxhemUgcHJvY2Vzc29ycwogIC0gYWRkIHN1cHBvcnQgZm9yIEF0bWFya1RlY2hubyAic3V6YWt1IiBib2FyZAoKKiBDb25maWd1cmUgUFBDaGFtZWxlb24gYm9hcmQgdG8gdXNlIHJlZHVuZGFuZCBlbnZpcm9ubWVudCBpbiBmbGFzaAoKKiBDb25maWd1cmUgUFBDaGFtZWxlb24gYm9hcmQgdG8gdXNlIEpGRlMyIE5BTkQgc3VwcG9ydC4KCiogQWRkZWQgc3VwcG9ydCBmb3IgSkZGUzIgZmlsZXN5c3RlbSAocmVhZC1vbmx5KSBvbiB0b3Agb2YgTkFORCBmbGFzaAoKKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgMTYgQXByIDIwMDQ6CiAgTEJBNDggZml4ZXMKCiogUGF0Y2hlcyBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMTYgQXByIDIwMDQ6CiAgLSBhZGQgc3VwcG9ydCBmb3IgYSBuZXcgdmVyc2lvbiBvZiBhbiBJbnRyYWNvbSBib2FyZCBhbmQgZml4CiAgICB2YXJpb3VzIG90aGVyIHRoaW5ncyBvbiBvdGhlcnMuCiAgLSBhZGQgdmVyaWZ5IHN1cHBvcnQgdG8gdGhlIGNyYzMyIGNvbW1hbmQgKGRlZmluZQogICAgQ09ORklHX0NSQzMyX1ZFUklGWSB0byBlbmFibGUgaXQpCiAgLSBmaXggRkVDIGRyaXZlciBmb3IgTVBDOHh4IHN5c3RlbXM6CiAgICAxLiBmaXggY29tcGlsYXRpb24gcHJvYmxlbXMgZm9yIGJvYXJkcyB0aGF0IHVzZSBkeW5hbWljCiAgICAgICBhbGxvY2F0aW9uIG9mIERQUkFNCiAgICAyLiBzaHV0IGRvd24gRkVDIGFmdGVyIG5ldHdvcmsgdHJhbnNmZXJzCiAgLSBIVVNIIHBhcnNlciBmaXhlczoKICAgIDEuIEEgbmV3IHRlc3QgY29tbWFuZCB3YXMgYWRkZWQuIFRoaXMgaXMgYSBzaW1wbGlmaWVkIHZlcnNpb24gb2YKICAgICAgIHRoZSBvbmUgaW4gdGhlIGJvdXJuZSBzaGVsbC4KICAgIDIuIEEgbmV3IGV4aXQgY29tbWFuZCB3YXMgYWRkZWQgd2hpY2ggdGVybWluYXRlcyB0aGUgY3VycmVudAogICAgICAgZXhlY3V0aW5nIHNjcmlwdC4KICAgIDMuIEZpeGVkIGhhbmRpbmcgb2YgJD8gKGV4aXQgY29kZSBvZiBsYXN0IGV4ZWN1dGVkIGNvbW1hbmQpCiAgLSBGaXggc29tZSBjb21waWxlIHByb2JsZW1zOwogICAgYWRkICJvbmNlIiBmdW5jdGlvbmFsaXR5IGZvciB0aGUgbmV0cmV0cnkgdmFyaWFibGUKCiogUGF0Y2ggYnkgR2VvcmdlIEcuIERhdmlzLCAwMiBBcHIgMjAwNDoKICBhZGQgc3VwcG9ydCBmb3IgSW50ZWwgQXNzYWJldCBib2FyZAoKKiBQYXRjaCBieSBTdGVwaGVuIFdpbGxpYW1zLCAwMSBBcHIgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgUGljdHVyZSBFbGVtZW50cyBKU0UgYm9hcmQKCiogUGF0Y2ggYnkgQ2hyaXN0aWFuIFBlbGwsIDAxIEFwciAyMDA0OgogIEFkZCBDb21wYWN0Rmxhc2ggc3VwcG9ydCBmb3IgUFhBIHN5c3RlbXMuCgoqIFBhdGNoZXMgYnkgUGFudGVsaXMgQW50b25pb3UsIDMwIE1hciAyMDA0OgogIC0gYWRkIGF1dG8tY29tcGxldGUgc3VwcG9ydCB0byB0aGUgVS1Cb290IENMSQogIC0gYWRkIHN1cHBvcnQgZm9yIE5FVFRBIGFuZCBORVRQSE9ORSBib2FyZHM7IGZpeCBORVRWSUEgYm9hcmQKICAtIGFkZCBzdXBwb3J0IGZvciB0aGUgRXBzb24gMTU2eCBzZXJpZXMgb2YgZ3JhcGhpY2FsIGRpc3BsYXlzCiAgICAoVGhlc2UgZGlzcGxheXMgYXJlIHNlcmlhbCBhbmQgbm90IHN1aXRhYmxlIGZvciB1c2luZyBhIG5vcm1hbAogICAgZnJhbWVidWZmZXIgY29uc29sZSBvbiB0aGVtKQogIC0gYWRkIGluZnJhc3RydWN0dXJlIG5lZWRlZCBpbiBvcmRlciB0byBQT1NUIGFueSBEU1BzIGluIGEgYm9hcmQKICAtIGltcHJvdmUgYW5kIGZpeCB2YXJpb3VzIHRoaW5ncyBpbiB0aGUgTVBDOHh4IEZFQyBkcml2ZXI6CiAgICAxLiBUaGUgbmV3IDg3eCBhbmQgODh4IHNlcmllcyBvZiBwcm9jZXNzb3JzIGhhdmUgdHdvIEZFQ3MsCiAgICAgICBhbmQgdGhlIG5ldyBkcml2ZXIgc3VwcG9ydHMgdGhlbSBib3RoLgogICAgMi4gQW5vdGhlciBjaGFuZ2UgaW4gdGhlIDg3eC84OHggc2VyaWVzIGlzIHN1cHBvcnQgZm9yCiAgICAgICB0aGUgUk1JSSAoUmVkdWNlZCBNSUkpIGludGVyZmFjZS4gSG93ZXZlciBudW1lcm91cwogICAgICAgY2hhbmdlcyBhcmUgbmVlZGVkIHRvIG1ha2UgaXQgd29yayBzaW5jZSB0aGUgUEhZcwogICAgICAgYXJlIGNvbm5lY3RlZCB0byB0aGUgc2FtZSBsaW5lcy4gVGhhdCBtZWFucyB0aGF0CiAgICAgICB5b3UgaGF2ZSB0byBhZGRyZXNzIHRoZW0gY29ycmVjdGx5IG92ZXIgdGhlIE1JSQogICAgICAgaW50ZXJmYWNlLgogICAgMy4gV2Ugbm93IGNvcnJlY3RseSBtYXRjaCB0aGUgTUlJL1JNSUkgaW50ZXJmYWNlCiAgICAgICBjb25maWd1cmF0aW9uIHRvIHdoYXQgdGhlIFBIWSByZXBvcnRzLgogIC0gRml4IHByb2JsZW0gd2hlbiByZWFkaW5ndGhlIE1JSSBzdGF0dXMgcmVnaXN0ZXIuIER1ZSB0byB0aGUKICAgIGludGVybmFsIGRlc2lnbiBvZiBtYW55IFBIWXMgeW91IGhhdmUgdG8gcmVhZCB0aGUgcmVnaXN0ZXIKICAgIHR3aWNlLiBUaGUgcHJvYmxlbSBpcyBtb3JlIGFwcGFyZW50IGluIDEwTWJpdCBtb2RlLgogIC0gYWRkIG5ldyBtb2RlICIuamZmczJzIiBmb3IgcmVhZGluZyBmcm9tIGEgTkFORCBkZXZpY2U6IGl0IGp1c3QKICAgIHNraXBzIG92ZXIgYmFkIGJsb2Nrcy4KICAtIGFkZCBuZXR3b3JraW5nIHN1cHBvcnQgZm9yIFZMQU5zICg4MDIuMXEpLCBhbmQgQ0RQIChDaXNjbwogICAgRGlzY292ZXJ5IFByb3RvY29sKQogIC0gc29tZSBtaW5vciBwYXRjaGVzIC8gY2xlYW51cAoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAyOCBNYXIgMjAwNDoKICAtIEFkZCBzdXBwb3J0IGZvciBNUEM4MjcyIGZhbWlseSBpbmNsdWRpbmcgTVBDODI0Ny84MjQ4LzgyNzEvODI3MgogIC0gQWRkIHN1cHBvcnQgZm9yIE1QQzgyNzJBRFMgZXZhbHVhdGlvbiBib2FyZCAoYW5vdGhlciBmbGF2b3VyIG9mIE1QQzgyNjBBRFMpCiAgLSBDaGFuZ2UgY29uZmlndXJhdGlvbiBtZXRob2QgZm9yIE1QQzgyNjBBRFMgZmFtaWx5CgoqIGFkZCBzdGFydHVwIGNvZGUgdG8gY2xlYXIgdGhlIEJTUyBvZiBzdGFuZGFsb25lIGFwcGxpY2F0aW9ucwoKKiBGaXggaWYgLyBlbGlmIGhhbmRsaW5nIGJ1ZyBpbiBIVVNIIHNoZWxsCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAxLjEuMDoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBQYXRjaCBieSBNYXJrIEpvbmFzOiBSZW1vdmUgY29uZmlnLnRtcCBmaWxlcyBvbmx5IHdoZW4KICB1bmNvbmZpZ3VyaW5nIHRoZSBib2FyZAoKKiBBZGFwdCBSTVUgYm9hcmQgZm9yIGJpZ2dlciBmbGFzaCBtZW1vcnkKCiogUGF0Y2ggYnkgS2xhdXMgSGV5ZGVjaywgMTMgTWFyIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIEtVUDRYIEJvYXJkCgoqIFBhdGNoIGJ5IFBhdmVsIEJhcnR1c2VrLCAyMSBNYXIgMjAwNAogIEFkZCBSZWlzZXJmcyBzdXBwb3J0CgoqIFBhdGNoIGJ5IEhpbmtvIEtvY2V2YXIsIDIwIE1hciAyMDA0CiAgLSBBZGQgYXV0by1yZWxlYXNlIGZvciBTTVNDIExBTjkxYzExMSBkcml2ZXIKICAtIEFkZCBzYXZlL3Jlc3RvcmUgb2YgUFRSIGFuZCBQTlIgcmVncyBhcyBzdWdnZXN0ZWQgaW4gZGF0YXNoZWV0CgoqIFBhdGNoIGJ5IFN0ZXBoZW4gV2lsbGlhbXMsIDE5IE1hcmNoIDIwMDQKICBJbmNyZWFzZSBzcGVlZCBvZiBzZWN0b3IgcmVhZHMgZnJvbSBTeXN0ZW1BQ0UsCiAgc2hvcnRlbiBwb2xsIHRpbWVvdXQgYW5kIHJlbW92ZSBhIHVzZWxlc3MgcmVzZXQKCiogUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgMTkgTWFyIDIwMDQ6CiAgTWFrZSBHaWdFIFBIWSAxMDAwTWJwcyBTcGVlZC9EdXBsZXggZGV0ZWN0aW9uIGNvbmRpdGlvbmFsCiAgKENPTkZJR19QSFlfR0lHRSkKCiogUGF0Y2ggYnkgQnJhZCBLZW1wLCAxOCBNYXIgMjAwNDoKICBwcmV2ZW50IG1hY2hpbmUgY2hlY2tzIGR1cmluZyBhIFBDSSBzY2FuCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDE4IE1hciAyMDA0OgogIEZpeCBzdHJpbmcgY2xlYW5pbmcgaW4gSURFIGlkZW50aWZpY2F0aW9uCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDE4IE1hciAyMDA0OgogIC0gVW5pZnkgdmlkZW8gbW9kZSBoYW5kbGluZyBmb3IgQ2hpcHMgJiBUZWNobm9sb2dpZXMgNjkwMDAgVmlkZW8KICAgIGNoaXAgYW5kIFNpbGljb24gTW90aW9uIFNNSSA3MTIvNzEwLzgxMCBWaWRlbyBjaGlwCiAgLSBBZGQgc2VsZWN0aW9uIG9mIHRoZSB2aWRlbyBvdXRwdXQgKENSVCBvciBMQ0QpIHZpYSAndmlkZW9vdXQnCiAgICBlbnZpcm9ubWVudCB2YXJpYWJsZSBmb3IgdGhlIFNpbGljb24gTW90aW9uCiAgLSBSRUFETUUgdXBkYXRlCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDE4IE1hciAyMDA0OgogIGluY2x1ZGUvY29tbW9uLmggdHlwbyBmaXgKCiogUGF0Y2hlcyBieSBUb2x1bmF5IE9ya3VuLCAxNyBNYXIgMjAwNDoKICAtIEFkZCBzdXBwb3J0IGZvciBiZC0+YmlfaWljX2Zhc3RbXSBpbml0aWFsaXphdGlvbiB2aWEgZW52aXJvbm1lbnQKICAgIHZhcmlhYmxlICJpMmNmYXN0IiAoQ09ORklHX0kyQ0ZBU1QpCiAgLSBBZGQgImkyY2Zhc3QiIHUtYm9vdCBlbnZpcm9ubWVudCB2YXJpYWJsZSBzdXBwb3J0IGZvciBjc2IyNzIKCiogUGF0Y2ggYnkgQ2FybCBSaWVjaGVycywgMTcgTWFyIDIwMDQ6CiAgSWdub3JlICdcMCcgY2hhcmFjdGVycyBpbiBjb25zb2xlIGlucHV0IGZvciB1c2Ugd2l0aCB0ZWxuZXQgYW5kCiAgdGVsY28gcGFkcy4KCiogUGF0Y2ggYnkgTGVvbiBLdWtvdmVjLCAxNyBNYXIgMjAwNDoKICB0eXBvIGZpeCBmb3Igc3Ryc3dhYiBwcm90b3R5cGUgI2lmZGVmCgoqIFBhdGNoZXMgYnkgVGhvbWFzIFZpZWh3ZWdlciwgMTYgTWFyIDIwMDQ6CiAgLSBzaG93IFBDSSBjbG9jayBmcmVxdWVuY3kgb24gTVBDODI2MCBzeXN0ZW1zCiAgLSBhZGQgRkNDX1BTTVJfUk1JSSBmbGFnIGZvciBIaVA3IHByb2Nlc3NvcnMKICAtIGluIGRvX2pmZnMyX2ZzbG9hZCgpLCB0YWtlIGxvYWQgYWRkcmVzcyBmcm9tIGxvYWRfYWRkciBpZiBub3Qgc2V0CiAgICBleHBsaWNpdCwgdXBkYXRlIGxvYWRfYWRkciBvdGhlcndpc2UKICAtIHJlcGxhY2VkIHByaW50ZiBieSBwdXRjL3B1dHMgd2hlbiBubyBmb3JtYXR0aW5nIGlzIG5lZWRlZAogICAgKHNtYWxsZXIgY29kZSBzaXplLCBmYXN0ZXIgZXhlY3V0aW9uKQoKKiBQYXRjaCBieSBQaGlsbGlwcGUgUm9iaW4sIDE2IE1hciAyMDA0OgogIGF2b2lkIGRlcmVmZXJlbmNpbmcgTlVMTCBwb2ludGVyIGluIGxpYl9hcm0vYXJtbGludXguYwoKKiBQYXRjaCBieSBTdGVwaGVuIFdpbGxpYW1zLCAxNSBNYXIgMjAwNDoKICBGaXggQ09ORklHX1NFUklBTF9TT0ZUV0FSRV9GSUZPIGRvY3VtZW50YXRpb24KCiogUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgMTUgTWFyIDIwMDQ6CiAgSW5pdGlhbGl6ZSBiaV9vcGJmcmVxIHRvIHJlYWwgT1BCIGZyZXF1ZW5jeSB2aWEgZ2V0X09QQl9mcmVxKCkKCiogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMTUgTWFyIDIwMDQ6CiAgVXBkYXRlIENSRURJVFMgJiBNQUlOVEFJTkVSUyBmaWxlcyBmb3IgUFBDNDQwR1ggJiBPY290ZWEgcG9ydAoKKiBBZGQgc3RhcnQtdXAgZGVsYXkgdG8gbWFrZSBzdXJlIHBvd2VyIGhhcyBzdGFiaWxpemVkIGJlZm9yZQogIGF0dGVtcHRpbmcgdG8gc3dpdGNoIG9uIFVTQiBvbiBTWDEgYm9hcmQuCgoqIFBhdGNoIGJ5IEpvc2VmIFdhZ25lciwgMTggTWFyIDIwMDQ6CiAgLSBBZGQgc3VwcG9ydCBmb3IgTWljcm9TeXMgWE0yNTAgYm9hcmQgKFBYQTI1NSkKICAtIEFkZCBzdXBwb3J0IGZvciBNaWNyb1N5cyBQTTgyOCBib2FyZCAoTVBDODI4MCkKICAtIEFkZCBzdXBwb3J0IGZvciAzMiBNQiBGbGFzaCBvbiBQTTgyNS84MjYKICAtIG5ldyBTRFJBTSByZWZyZXNoIHJhdGUgZm9yIFBNODI1L1BNODI2CiAgLSBhZGRlZCBzdXBwb3J0IGZvciBNaWNyb1N5cyBQTTUyMCAoTVBDNTIwMCkKICAtIHJlcGxhY2VkIFF1ZXJ5IGJ5IElkZW50aWZ5IGNvbW1hbmQgaW4gQ1BVODYvZmxhc2guYwogICAgdG8gc3VwcG9ydCAyOEYxNjBGM0IKCiogRml4IHdyYXAgYXJvdW5kIHByb2JsZW0gd2l0aCB1ZGVsYXkoKSBvbiBBUk05MjBUCgoqIEFkZCBzdXBwb3J0IGZvciBNYWNyb25peCBmbGFzaCBvbiBUUkFCIGJvYXJkCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDE1IE1hciAyMDA0OgogIEZpeCBidWZmZXIgb3ZlcmZsb3cgaW4gSURFIGlkZW50aWZpY2F0aW9uCgoqIEZpeCBwb3dlci1vZmYgb2YgTENEIGZvciBvdXQtb2YtYmFuZCB0ZW1wZXJhdHVyZXMgb24gTFdNT04gYm9hcmQKCiogUmVtb3ZlIHJlZHVuZGFuZCAjZGVmaW5lIGluIEljZUN1YmUuaAoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyNyBGZWIgMjAwNDoKICAtIEFkZGluZyBnZXRfdGlja3MoKSBhbmQgZ2V0X3RiY2xrKCkgZm9yIEFUOTFSTTkyMDAKICAtIE1hbnkgd2hpdGUgc3BhY2UgZml4ZXMgaW4gY3B1L2F0OTFybTkyMDAvaW50ZXJydXB0cy5jCgoqIFBhdGNoZXMgYnkgU3RldmVuIFNjaG9seiwgMjAgRmViIDIwMDQ6CiAgc29tZSBjbGVhbnVwIGluIEFUOTFSTTkyMDAgcmVsYXRlZCBjb2RlCgoqIFBhdGNoZXMgYnkgVHJhdmlzIFNhd3llciwgMTIgTWFyIDIwMDQ6CiAgLSBGaXggR2lnYWJpdCBFdGhlcm5ldCBzdXBwb3J0IGZvciA0NDBHWAogIC0gQWRkIEdpZ2FiaXQgRXRoZXJuZXQgU3VwcG9ydCB0byBNSUkgUEhZIHV0aWxpdGllcwoKKiBQYXRjaCBieSBCcmFkIEtlbXAsIDEyIE1hciAyMDA0OgogIEZpeGVzIGZvciBkcml2ZXJzL2NmaV9mbGFzaC5jOgogIC0gQmV0dGVyIHN1cHBvcnQgZm9yIHg4L3gxNiBpbXBsZW1lbnRhdGlvbnMKICAtIEFkZGVkIGZhaWx1cmUgZm9yIEFNRCBjaGlwcyBhdHRlbXB0aW5nIHRvIHVzZSBDRkdfRkxBU0hfVVNFX0JVRkZFUl9XUklURQogIC0gQWRkZWQgZGVmaW5lcyBmb3IgQU1EIGNvbW1hbmQgYW5kIGFkZHJlc3MgY29uc3RhbnRzCgoqIFBhdGNoIGJ5IExlb24gS3Vrb3ZlYywgMTIgTWFyIDIwMDQ6CiAgRml4IGdldF9kZW50ZnJvbWRpcigpIHRvIGNvcnJlY3RseSBoYW5kbGUgZGVsZXRlZCBkZW50cmllcwoKKiBQYXRjaCBieSBHZW9yZ2UgRy4gRGF2aXMsIDExIE1hciAyMDA0OgogIFJlbW92ZSBoYXJkIGNvZGVkIG5ldHdvcmsgc2V0dGluZ3MgaW4gVEkgT01BUDE2MTAgSDIKICBkZWZhdWx0IGJvYXJkIGNvbmZpZwoKKiBQYXRjaCBieSBHZW9yZ2UgRy4gRGF2aXMsIDExIE1hciAyMDA0OgogIGFkZCBzdXBwb3J0IGZvciBBRFMgR3JhcGhpY3NDbGllbnQrIGJvYXJkLgoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAxMSBNYXIgMjAwNDoKICAtIGFkZCBiaXRtYXAgY29tbWFuZCBhbmQgc3BsYXNoIHNjcmVlbiBzdXBwb3J0IGluIGNmYiBjb25zb2xlCiAgLSBhZGQgW29wdGlvbmFsXSBvcmlnaW4gaW4gdGhlIGJpdG1hcCBkaXNwbGF5IGNvbW1hbmQKCiogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMTEgTWFyIDIwMDQ6CiAgRml4IG9jb3RlYSBib2FyZCBlYXJseSBpbml0IGludGVycnVwdCBzZXR1cC4KCiogUGF0Y2ggYnkgVGhvbWFzIFZpZWh3ZWdlciwgMTEgTWFyIDIwMDQ6CiAgUmVtb3ZlIHJlZHVuZGFuZCBjb2RlOyBhZGQgIFBDSS1zcGVjaWZpYyBiaXRzIHRvIGluY2x1ZGUvbXBjODI2MC5oCgoqIFBhdGNoIGJ5IFN0ZXBoYW4gTGlueiwgMDkgTWFyIDIwMDQKICAtIEFkZCBzdXBwb3J0IGZvciB0aGUgU1NWIEFETlAvRVNDMSAoTmlvcyBTb2Z0Y29yZSkKCiogUGF0Y2ggYnkgR2VvcmdlIEcuIERhdmlzLCA5IE1hciAyMDA0OgogIGZpeCByZWNlbnQgYnVpbGQgZmFpbHVyZSBmb3IgU0ExMTAwIHRhcmdldAoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAwOSBNYXIgMjAwNDoKICBTdXBwb3J0IG5hdGl2ZSBpbnRlcnJ1cHQgbW9kZSBmb3IgdGhlIElCTTQ0MEdYLgogIFByZXZpb3VzbHkgaXQgd2FzIHJ1bm5pbmcgaW4gNDQwR1AgY29tcGF0aWJpbGl0eSBtb2RlLgoKKiBQYXRjaCBieSBQaGlsaXBwZSBSb2JpbiwgMDkgTWFyIDIwMDQ6CiAgQWRkZWQgQVJNIEludGVncmF0b3IgQVAsIENQIGFuZCBWZXJzYXRpbGUgUEI5MjZFSi1TIFJlZmVyZW5jZQogIFBsYXRmb3JtIHN1cHBvcnQuCgoqIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDA4IE1hciAyMDA0OgogIERvbid0IG92ZXJ3cml0ZSBzZXJ2ZXIgSVAgYWRkcmVzcyBvciBib290IGZpbGUgbmFtZQogIHdoZW4gdGhlIGJvb3Qgc2VydmVyIGRvZXMgbm90IHJldHVybiB2YWx1ZXMKCiogUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgNSBNYXIgMjAwNDoKICBSZW1vdmVkIGNvbXBpbGUgdGltZSByZXN0cmljdGlvbiBvbiBDRkdfSTJDX1NQRUVEIGZvciBEUzEzMzggUlRDCgoqIFBhdGNoIGJ5IFRvbHVuYXkgT3JrdW4sIDUgTWFyIDIwMDQ6CiAgRml4IGVhcmx5IGJvYXJkIGluaXRpYWxpemF0aW9uIGZvciBDb2dlbnQgQ1NCMjcyIGJvYXJkCgoqIFBhdGNoIGJ5IEVkIE9rZXJzb24sIDMgTWFyIDIwMDQ6CiAgZml4IENGSSBmbGFzaCB3cml0ZXMgZm9yIGxpdHRsZSBlbmRpYW4gc3lzdGVtcwoKKiBQYXRjaCBieSBSZWluaGFyZCBNZXllciwgMDEgTWFyIDIwMDQ6CiAgZ2VuZXJhbGl6ZSBVU0IgYW5kIElERSBzdXBwb3J0IGZvciBNUEM1MjAwIHdpdGggYWNjb3JkaW5nCiAgY2hhbmdlcyB0byBJY2VDdWJlLmggYW5kIFRPUDUyMDAuaAogIGFkZCBBbTI5TFYyNTYgMjU2IE1CaXQgRkxBU0ggc3VwcG9ydCBmb3IgVE9QNTIwMCBib2FyZHMKICBhZGQgaW5mbyBhYm91dCBVU0IgYW5kIElERSB0byBSRUFETUUKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgNCBNYXIgMjAwNDoKICBGaXggcHJvYmxlbXMgd2l0aCBHQ0MgMy4zLnggd2hpY2ggY2hhbmdlZCBoYW5kbGluZyBvZiBnbG9iYWwKICB2YXJpYWJsZXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byB6ZXJvIChub3cgaW4gLmJzcyBpbnN0ZWFkIG9mCiAgLmRhdGEgYXMgYmVmb3JlKS4KCiogUGF0Y2ggYnkgTGVvbiBLdWtvdmVjLCAwMiBNYXIgMjAwNDoKICBhZGQgc3Ryc3dhYigpIHRvIGZpeCBJREUgTEJBIGNhcGFjaXR5LCBmaXJtd2FyZSBhbmQgbW9kZWwgbnVtYmVycwogIG9uIGxpdHRsZSBlbmRpYW4gbWFjaGluZXMKCiogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMDIgTWFyIDIwMDQ6CiAgLSBSZW1vdmUgZ2V0X3RpY2tzKCkgZnJvbSBORlMgY29kZQogIC0gQWRkIHZlcmlmaWNhdGlvbiBvZiBSUEMgdHJhbnNhY3Rpb24gSUQKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMDIgTWFyIDIwMDQ6CiAgY2xlYW51cCBmb3IgSURFIGFuZCBVU0IgZHJpdmVycyBmb3IgTVBDNTIwMAoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAwMSBNYXIgMjAwNDoKICBPY290ZWE6CiAgLSBBZGQgSUJNIFBQQzQ0MEdYIFJlZiBQbGF0Zm9ybSBzdXBwb3J0IChPY290ZWEpCiAgICBPcmlnaW5hbCBjb2RlIGJ5IFBhdWwgUmV5bm9sZHMgPFBhdWxSZXlub2xkc0BsaHNvbHV0aW9ucy5jb20+CiAgICBBZGFwdGVkIHRvIFUtQm9vdCBhbmQgNDQwR1ggcG9ydAogIDQ0MGd4X2VuZXQuYzoKICAtIEFkZCBncmFjaW91cyBoYW5kbGluZyBvZiBhbGwgRXRoZXJuZXQgUGluIFNlbGVjdGlvbnMgZm9yIDQ0MEdYCiAgLSBBZGQgUkdNSUkgc2VsZWN0aW9uIGZvciBDaWNhZGEgQ0lTODIwMSBHaWdhYml0IFBIWQogIHBwYzQ0MC5oOgogIC0gQWRkIG5lZWRlZCBiaXQgZGVmaW5pdGlvbnMKICAtIEZpeCBmb3JtYXR0aW5nCgoqIFBhdGNoIGJ5IENhcmwgUmllY2hlcnMsIDEgTWFyIDIwMDQ6CiAgQWRkIFBQQzQ0MEdYIHByYmR2MCBkaXZpZGVyIHRvIGZpeCBtZW1vcnkgY2xvY2sgY2FsY3VsYXRpb24uCgoqIFBhdGNoIGJ5IFN0ZXBoYW4gTGlueiwgMjcgRmViIDIwMDQKICAtIGF2b2lkIHByb2JsZW1zIGZvciB0YXJnZXRzIHdpdGhvdXQgTkZTIGRvd25sb2FkIHN1cHBvcnQKCiogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDI3IEZlYiAyMDA0OgogIC0gQWRkZWQgTEJBNDggc3VwcG9ydCAoQ09ORklHX0xCQTQ4ICYgQ0ZHXzY0QklUX0xCQSkKICAtIEFkZGVkIHN1cHBvcnQgZm9yIDY0Yml0IHByaW50aW5nIGluIHZzcHJpbnRmIChDRkdfNjRCSVRfVlNQUklOVEYpCiAgLSBBZGRlZCBzdXBwb3J0IGZvciA2NGJpdCBzdHJ0b3VsIChDRkdfNjRCSVRfU1RSVE9VTCkKCiogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMjcgRmViIDIwMDQ6CiAgRml4IHJhcnBib290OiBhZGQgYXV0b2xvYWQgYnkgTkZTCgoqIFBhdGNoIGJ5IERhbiBFaXNlbmh1dCwgMjYgRmViIDIwMDQ6CiAgZml4IGZsYXNoX3dyaXRlIHJldHVybiB2YWx1ZSBpbiBzYXZlZW52CgoqIFBhdGNoIGJ5IFN0ZXBoYW4gTGlueiwgMTEgRGVjIDIwMDMKICBleHBhbmQgY29uZmlnLm1rIHRvIGF2b2lkIHRyaWdyYXBoIHdhcm5pbmdzIG9uIE5JT1MKCiogUmVuYW1lICJCTVMyMDAzIiBib2FyZCBpbnRvICJITUkxMCIKCiogU1gxIHBhdGNoZXM6IHVzZSAic2VyaWFsIyIgZm9yIFVTQiBzZXJpYWwgIzsgdXNlIHJlZHVuZGFuZCBlbnZpcm9ubWVudAogIHN0b3JhZ2U7IGF1dG8tc2V0IGNvbnNvbGUgb24gVVNCIHBvcnQgKHVzaW5nIHByZWJvb3QgY29tbWFuZCkKCiogQWRkIHN1cHBvcnQgZm9yIFNYMSBtb2JpbGUgcGhvbmU7IGFkZCBzdXBwb3J0IGZvciBVU0ItYmFzZWQgY29uc29sZQogIChlbmFibGUgd2l0aCAic2V0ZW52IHN0ZG91dCB1c2J0dHk7IHNldGVudiBzdGRpbiB1c2J0dHkiKQoKKiBGaXggTE9XQk9PVCBjb25maWd1cmF0aW9uIGZvciBNUEM1MjAwIHdpdGggRERSIG1lbW9yeQoKKiBGaXggU0RSQU0gdGltaW5ncyBmb3IgTElURTUyMDAgLyBJY2VDdWJlIGJvYXJkCgoqIEhhbmRsZSBBdXRpLU1ESVggLyBjb25uZWN0aW9uIHN0YXR1cyBmb3IgSU5DQS1JUAoKKiBGaXggVVNCIHByb2JsZW1zIHdoZW4gYXR0ZW1wdGluZyB0byByZWFkIDAgYnl0ZXMKCiogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMjYgRmViIDIwMDQ6CiAgRml4IGJyb2tlbiBjb21waWxlIGZvciBYUEVESVRFMUsgdGFyZ2V0LgoKKiBQYXRjaCBieSBTdGVwaGFuIExpbnosIDI2IEZlYiAyMDA0OgogIEJ1ZyBmaXggZm9yIE5GUyBjb2RlIG9uIE5JT1MgdGFyZ2V0cwoKKiBQYXRjaCBieSBTdGVwaGVuIFdpbGxpYW1zLCAyNiBGZWIgMjAwNDoKICBCcmVhayB1cCBTeXN0ZW1BQ0UgcmVhZHMgb2YgbGFyZ2UgYmxvY2sgY291bnRzCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDI2IEZlYiAyMDA0CiAgYWRkIElERSBzdXBwb3J0IGZvciBNUEM1MjAwCgoqIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDI2IEZlYiAyMDA0OgogIGFkZCBhdXRvbG9hZCB2aWEgTkZTCgoqIFBhdGNoIGJ5IFN0ZXBoZW4gV2lsbGlhbXMKICBVc2Ugb2YgQ09ORklHX1NFUklBTF9TT0ZUV0FSRV9GSUZPIGluIGJvYXJkLmMgY29uc2lzdGVudCB3aXRoIHVzZXMKICBlbHNld2hlcmUgaW4gdGhlIHNvdXJjZS4KCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMjUgRmViIDIwMDQ6CiAgLSBUaW1lb3V0cyBpbiBGUEdBIGNvZGUgc2hvdWxkIGJlIGJhc2VkIG9uIENGR19IWgogIC0gTWlub3IgY2xlYW51cCBpbiBjb2RlIGZvciBBbHRlcmEgRlBHQSBBQ0VYMUsKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMjUgRmViIDIwMDQ6CiAgQ2hhbmdlZCAiRGlyZWN0b3J5IEhpZXJhcmNoeSIgc2VjdGlvbiBpbiBSRUFETUUKCiogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMjUgRmViIDIwMDQ6CiAgUmVkdWNlIGNvcHkgY291bnQgaW4gbmZzX3JlYWRfcmVwbHkoKSBvZiBORlMgY29kZQoKKiBQYXRjaCBieSBNYXJrdXMgUGlldHJlaywgMjQgRmViIDIwMDQ6CiAgTlM5NzUwIERldkJvYXJkIGFkZGVkCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDI0IEZlYiAyMDA0CiAgYWRkIFVTQiBzdXBwb3J0IGZvciBNUEM1MjAwCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDI0IEZlYiAyMDA0OgogIC0gZml4IE1JSSBjb21tYW5kcyB0byB1c2UgdmFsdWVzIGZyb20gbGFzdCBjb21tYW5kCgoqIFBhdGNoIGJ5IFRvcnN0ZW4gRGVta2UsIDI0IEZlYiAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciB0aGUgZVhhbGlvbiBwbGF0Zm9ybSAoU1BTVy04MjQwLCBGLTMwLCBGLTMwMCkKCiogUGF0Y2ggYnkgUmFodWwgU2hhbmJoYWcsIDE5IEZlYiAyMDA0OgogIEZpeGVzIGZvciBmb3IgT01BUDE2MTAgYm9hcmQ6CiAgLSBzaGlmdCBzb21lIElSUSBzcGVjaWZpYyBjb2RlIHRvIHBsYXRmb3JtLlMgZmlsZQogIC0gcmVtb3ZlIGR1cGxpY2F0ZXdhdGNoZG9nIHJlc2V0IGNvZGUgZnJvbSBzdGFydC5TCgoqIE1ha2UgQXV0by1NRElYIFN1cHBvcnQgY29uZmlndXJhYmxlIG9uIElOQ0EtSVAgYm9hcmQKCiogRml4IGxpY2Vuc2UgZm9yIG1raW1hZ2UgdG9vbAoKKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAyNCBGZWIgMjAwNDoKICBVcGRhdGUgTmV0Qm9vdEZpbGVYZmVyU2l6ZSBpbiBORlMgY29kZQoKKiBQYXRjaCBieSBTY290dCBNY051dHQsIDI0IEZlYiAyMDA0OgogIGZpeCBwYWNrZXQgbGVuZ3RoIGluIE5GUyBjb2RlCgoqIFBhdGNoIGJ5IE1hc2FtaSBLb21peSwgMjIgRmViIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIE5GUyBmb3IgZmlsZSBkb3dubG9hZAoKKiBQYXRjaCBieSBBbmRyZWEgU2NpYW4sIDE3IEZlYiAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBTM0M0NEIwIHByb2Nlc3NvciBhbmQgREFWRSBCMiBib2FyZAoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyMCBGZWIgMjAwNDoKICAtIEFkZCBzdXBwb3J0IGZvciBNSUkgY29tbWFuZHMgb24gQVQ5MVJNOTIwMCBib2FyZHMKICAtIHNvbWUgY2xlYW51cCBpbiBBVDkxUk05MjAwIGV0aGVybmV0IGNvZGUKCiogUGF0Y2ggYnkgUGV0ZXIgUnlzZXIsIDIwIEZlYiAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciB0aGUgWGlsaW54IE1MMzAwIHBsYXRmb3JtCgoqIFBhdGNoIGJ5IFN0ZXBoYW4gTGlueiwgMTcgRmViIDIwMDQ6CiAgRml4IHdhdGNoZG9nIHN1cHBvcnQgZm9yIE5JT1MKCiogUGF0Y2ggYnkgSm9zaCBGcnltYW4sIDE2IEZlYiAyMDA0OgogIEZpeCBieXRlLXN3YXBwaW5nIGZvciBjZmlfZmxhc2guYyBmb3IgZGlmZmVyZW50IGJ1cyB3aWR0aHMKCiogUGF0Y2ggYnkgSm9uIERpZWtlbWEsIDE0IEplYiAyMDA0OgogIFJlbW92ZSBkdXBsaWNhdGUgIkZQR0EgU3VwcG9ydCIgbm90ZXMgZnJvbSB0aGUgUkVBRE1FIGZpbGUKCiogUGF0Y2hlcyBieSBSZWluaGFyZCBNZXllciwgMTQgRmViIDIwMDQ6CiAgLSB1cGRhdGUgYm9hcmQvZW1rIHRyZWU7IHVzZSBjb21tb24gZmxhc2ggZHJpdmVyCiAgLSBDb3JyZWN0ZWQgdGVzdGVkIGJpdHMgaW4gbWFjaGluZSBjaGVjayBleGNlcHRpb24gaW4gY3B1L21wYzV4eHgvdHJhcHMuYwogICAgW2FkYXB0ZWQgZm9yIG90aGVyIFBQQyBDUFVzIC0tIHdkXQogIC0gQWRkZWQgc3VwcG9ydCBmb3IgdGhlIE00OFQwOCBvbiB0aGUgRVZBTDUyMDAgYm9hcmQgaW4gcnRjL21rNDh0NTkuYwoKKiBQYXRjaCBieSBKb24gRGlla2VtYSwgMTMgRmViIDIwMDQ6CiAgQ2FsbCBzaG93X2Jvb3RfcHJvZ3Jlc3MoKSB3aGVuZXZlciBQT1NUICJGQUlMRUQiIGlzIHByaW50ZWQuCgoqIFBhdGNoIGJ5IE5pc2hhbnQgS2FtYXQsIDEzIEZlYiAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBUSSBPTUFQMTYxMCBIMiBCb2FyZAogIEZpeGVzIGZvciBjcHUvYXJtOTI2ZWpzL2ludGVycnVwdC5jCgkoYmFzZWQgb24gUmljaGFyZCBXb29kcnVmZidzIHBhdGNoIGZvciBhcm05MjUsIDE2IE9jdCAwMykKICBGaXggZm9yIGEgdGltZXIgYnVnIGluIE9NQVAxNjEwIElubm92YXRvcgogIEFkZCBzdXBwb3J0IGZvciBDUzAgKFJPTSkvQ1MzIChGbGFzaCkgYm9vdCBpbiBPTUFQMTYxMCBJbm5vdmF0b3IgYW5kIEgyCgoqIFBhdGNoZXMgYnkgU3RlcGhhbiBMaW56LCAxMiBGZWIgMjAwNDoKICAtIGFkZCBzdXBwb3J0IGZvciBOSU9TIHRpbWVyIHdpdGggdmFyaWFibGUgcGVyaW9kIHByZWxvYWQgY291bnRlciB2YWx1ZQogIC0gcHJlcGFyZSBQT1NUIGZyYW1ld29yayBzdXBwb3J0IGZvciBOSU9TIHRhcmdldHMKCiogUGF0Y2ggYnkgRGVuaXMgUGV0ZXIsIDExIEZlYiAyMDA0OgogIGFkZCBQT1NUIHN1cHBvcnQgZm9yIHRoZSBNSVA0MDUgYm9hcmQKCiogUGF0Y2ggYnkgTGF1cmVudCBNb2hpbiwgMTAgRmViIDIwMDQ6CiAgRml4IGJ1ZmZlciBvdmVyZmxvdyBpbiBjb21tb24vdXNiLmMKCiogUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgMTAgRmViIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIENvZ2VudCBDU0IyNzIgYm9hcmQKCiogUGF0Y2ggYnkgVGhvbWFzIEVsc3RlLCAxMCBGZWIgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgTkVUKzUwIENQVSBhbmQgTW9kTkVUNTAgYm9hcmQKCiogUGF0Y2ggYnkgU2FtIFNvbmcsIDEwIEZlYiAyMDA0OgogIEZpeCB0eXBvcyBpbiBjZmlfZmxhc2guYwoKKiBQYXRjaCBieSBMZW9uIEt1a292ZWMsIDEwIEZlYiAyMDA0CiAgRml4ZWQgbG9uZyBkaXIgZW50cnkgc2xvdCBpZCBjYWxjdWxhdGlvbiBpbiBnZXRfdmZhdG5hbWUKCiogUGF0Y2ggYnkgUm9iaW4gR2lsa3MsIDEwIEZlYiAyMDA0OgogIGFkZCAiaXRlc3QiIGNvbW1hbmQgKG9wZXJhdG9yczogLWVxLCAtbmUsIC1sdCwgLWd0LCAtbGUsIC1nZSwgPT0sCiAgIT0sIDw+LCA8LCA+LCA8PSwgPj0pCgoqIEZpeCBwcm9ibGVtIHdpdGggc2lkZSBlZmZlY3RzIGluIG1hY3JvcyBpbiBpbmNsdWRlL3VzYi5oCgoqIFBhdGNoIGJ5IERhdmlkIEJlbnNvbiwgMTMgTm92IDIwMDM6CiAgYnVnIDg0MTM1OCAtIGZpeCBURlRQIGRvd25sb2FkIHNpemUgbGltaXQKCiogRml4aW5nIGJ1ZyA4NTA3Njg6CiAgaW1wcm9wZXIgZmx1c2hfY2FjaGUoKSBpbiBsb2FkX3NlcmlhbCgpCgoqIEZpeGluZyBidWcgODM0OTQzOgogIE1QQzg1NDAgLSBtaXNzaW5nIHZvbGF0aWxlIGRlY2xhcmF0aW9ucwoKKiBQYXRjaCBieSBTdGVwaGVuIFdpbGxpYW1zLCAwOSBGZWIgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgWGlsaW54IFN5c3RlbUFDRSBjaGlwOgogIC0gTmV3IGZpbGVzIGNvbW1vbi9jbWRfYWNlLmMgYW5kIGluY2x1ZGUvc3lzdGVtYWNlLmgKICAtIEhvb2sgc3lzdGVtYWNlIHN1cHBvcnQgaW50byBjbWRfZmF0IGFuZCB0aGUgcGFydGl0aW9uIG1hbmFnZXIKCiogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMDkgRmViIDIwMDQ6CiAgQWRkIGJpX29wYmZyZXEgJiBiaV9paWNfZmFzdCB0byA0NDBHWCBiZF9pbmZvIGFzIG5lZWRlZCBmb3IgTGludXgKCiogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMDkgRmViIDIwMDQ6CiAgbyA0NDBHWDoKICAgIC0gRml4IFBDSSBJbmRpcmVjdCBhY2Nlc3MgZm9yIHR5cGUgMSBjb25maWcgY3ljbGVzIHdpdGggcHBjNDQwLgogICAgLSBBZGQgcGh5bW9kZSBmb3IgNDQwIGVuZXQKICAgIC0gZml4IHBjaSBwcmUgaW5pdAogIG8gWFBlZGl0ZTFLOgogICAgLSBDaGFuZ2UgYm9hcmRfcHJlX2luaXQgdG8gYm9hcmRfZWFybHlfaW5pdF9mCiAgICAtIEFkZCB1c2VyIGZsYXNoIHRvIGJ1cyBjb250cm9sbGVyIHNldHVwCiAgICAtIEZpeCBwY2kgcHJlIGluaXQKICAgIC0gRml4IGlzX3BjaV9ob3N0IHRvIGNoZWNrIEdQSU8gZm9yIG1vbmFyY2ggYml0CiAgICAtIEZvcmNlIHhwZWRpdGUxayB0byBwY2kgY29udmVudGlvbmFsIG1vZGUgKHZpYSAjZGVmaW5lIG9wdGlvbikKCiogUGF0Y2ggYnkgQnJhZCBLZW1wLCA0IEZlYiAyMDA0OgogIC0gaGFuZGxlIHRoZSBtYWNoaW5lIGNoZWNrIHRoYXQgaXMgZ2VuZXJhdGVkIGR1cmluZyB0aGUgUENJIHNjYW5zCiAgICBvbiA4Mnh4IHByb2Nlc3NvcnMuCiAgLSBkZWZpbmUgdGhlIHJlZ2lzdGVycyB1c2VkIGluIHRoZSBJTU1SIGJ5IHRoZSBQQ0kgc3Vic3lzdGVtLgoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAwMyBGZWIgMjAwNDoKICBjcHUvbXBjNXh4eC9zdGFydC5TOiBjb3B5IE1CQVIgaW50byBTUFIzMTEKCiogUGF0Y2ggYnkgSmVmZiBBbmdpZWxza2ksIDAzIEZlYiAyMDA0OgogIEZpeCBjb3B5ICYgcGFzdGUgZXJyb3IgaW4gY3B1L21wYzgyNjAvcGNpLmMKCiogUGF0Y2ggYnkgUmVpbmhhcmQgTWV5ZXIsIDI0IEphbiAyMDA0OgogIEZpeCB0eXBvIGluIGNwdS9tcGM1eHh4L3BjaV9tcGM1MjAwLmMKCiogQWRkIEF1dG8tTURJWCBzdXBwb3J0IGZvciBJTkNBLUlQCgoqIFNvbWUgY29kZSBjbGVhbnVwCgoqIFBhdGNoIGJ5IEpvc2VmIEJhdW1nYXJ0bmVyLCAxMCBGZWIgMjAwNDoKICBGaXhlcyBmb3IgQ29sZGZpcmUgcG9ydAoKKiBQYXRjaCBieSBCcmFkIEtlbXAsIDExIEZlYiAyMDA0OgogIEZpeCBDRkkgZmxhc2ggZHJpdmVyIHByb2JsZW1zCgoqIE1ha2Ugc3VyZSB0byB1c2UgYSBidXMgY2xvY2sgZGl2aWRlciBvZiAyIG9ubHkgd2hlbiBydW5uaW5nIFRRTTh4eE0KICBtb2R1bGVzIGF0IENQVSBjbG9jayBmcmVxdWVuY2llcyBhYm92ZSA2NiBNSHouCgoqIE9wdGltaXplIGZsYXNoIHByb2dyYW1taW5nIHNwZWVkIGZvciBMV01PTiAoYnkgYW5vdGhlciAxMDAlIDotKQoKKiBQYXRjaCBieSBKaWFuIFpoYW5nLCAzIEZlYiAyMDA0OgogIC0gQ2hhbmdlZCB0aGUgaW5jb3JyZWN0IEZBVDEyQlVGU0laRQogIC0gZGF0YV9iZWdpbiBpbiBmc2RhdGEgY2FuIGJlIG5lZ2F0aXZlLiBDaGFuZ2VkIGl0IHRvIGJlIHNob3J0LgoKKiBQYXRjaGVzIGJ5IFN0ZXBoYW4gTGlueiwgMzAgSmFuIDIwMDQ6CiAgMTogLSBib2FyZC9hbHRlcmEvY29tbW9uL2ZsYXNoLmM6Zmxhc2hfZXJhc2UoKToKICAgICAgIG8gYWxsb3cgaW50ZXJydXB0cyBiZWZvciBnZXRfdGltZXIoKSBjYWxsCiAgICAgICBvIGNoZWNrLXVwIGVhY2ggZXJhc2VkIHNlY3RvciBhbmQgYXZvaWQgdW5leHBlY3RlZCB0aW1lb3V0cwogICAgIC0gYm9hcmQvYWx0ZXJhL2RrMWMyMC9kazFzMTAuYzpib2FyZF9lYXJseV9pbml0X2YoKToKICAgICAgIG8gZW5jbG9zZSBzZXZlbnNlZ19zZXQoKSBpbiBjcHAgY29uZGl0aW9uCiAgICAgLSByZW1vdmUgdGhlIEFTTUkgY29uZmlndXJhdGlvbiBmb3IgREsxUzEwX3N0YW5kYXJkXzMyIChuZXZlciBwcmVzZW50KQogICAgIC0gZml4IHNvbWUgdHlwZWQgaW4gbWlzdGFrZXMgaW4gdGhlIE5JT1MgZG9jdW1lbnRhdGlvbgogIDI6IC0gc3BsaXQgREsxQzIwIGNvbmZpZ3VyYXRpb24gaW50byBzZXZlcmFsIGhlYWRlciBmaWxlczoKICAgICAgIG8gdHdvIG5ldyBmaWxlcyBmb3IgZWFjaCBOSU9TIENQVSBkZXNjcmlwdGlvbgogICAgICAgbyBVLUJvb3QgcmVsYXRlZCBwYXJ0IGlzIHJlbWFpbmluZyBpbiBESzFDMjAuaAogIDM6IC0gc3BsaXQgREsxUzEwIGNvbmZpZ3VyYXRpb24gaW50byBzZXZlcmFsIGhlYWRlciBmaWxlczoKICAgICAgIG8gdHdvIG5ldyBmaWxlcyBmb3IgZWFjaCBOSU9TIENQVSBkZXNjcmlwdGlvbgogICAgICAgbyBVLUJvb3QgcmVsYXRlZCBwYXJ0IGlzIHJlbWFpbmluZyBpbiBESzFTMTAuaAogIDQ6IC0gQWRkIHN1cHBvcnQgZm9yIHRoZSBNaWNyb3Ryb25peCBMaW51eCBEZXZlbG9wbWVudCBLaXQKICAgICAgIE5JT1MgQ1BVIGNvbmZpZ3VyYXRpb24gYXQgdGhlIEFsdGVyYSBOaW9zIERldmVsb3BtZW50IEtpdCwKICAgICAgIFN0cmF0aXggRWRpdGlvbiAoREstMVMxMCkKICA1OiAtIEFkZCBkb2N1bWVudGF0aW9uIGZvciB0aGUgQWx0ZXJhIE5pb3MgRGV2ZWxvcG1lbnQgS2l0LAogICAgICAgU3RyYXRpeCBFZGl0aW9uIChESy0xUzEwKQogIDY6IC0gQWRkIHN1cHBvcnQgZm9yIHRoZSBOaW9zIFNlcmlhbCBQZXJpcGhhcmVsIEludGVyZmFjZSAoU1BJKQogICAgICAgKG1hc3RlciBvbmx5KQogIDc6IC0gQWRkIHN1cHBvcnQgZm9yIHRoZSBjb21tb24gVS1Cb290IFNQSSBmcmFtZXdvcmsgYXQKICAgICAgIFJUQyBkcml2ZXIgRFMxMzA2CgoqIFBhdGNoIGJ5IFJhaHVsIFNoYW5iaGFnLCAyOCBKYW4gMjAwNDoKICBGaXggZmxhc2ggcHJvdGVjdGlvbi9sb2NraW5nIGhhbmRsaW5nIGZvciBPTUFQMTYxMCBpbm5vdmF0b3IgYm9hcmQuCgoqIFBhdGNoIGJ5IFJvbGYgUGV1a2VydCwgMjggSmFuIDIwMDQ6CiAgZml4IGZsYXNoIHdyaXRlIHByb2JsZW1zIG9uIENTQjIyNiBib2FyZCAod3JpdGUgd2l0aCAzMiBiaXQgYnVzIHdpZHRoKQoKKiBQYXRjaGVzIGJ5IE1hcmsgSm9uYXMsIDE2IEphbiAyMDA0OgogIC0gZml4IHJvdW5kaW5nIGVycm9yIHdoZW4gY2FsY3VsYXRpbmcgYmF1ZHJhdGVzIGZvciBNUEM1MjAwIFBTQ3MKICAtIG1ha2Ugc3VyZSBDRkdfUkFNQk9PVCBhbmQgQ0ZHX0xPV0JPT1QgYXJlIG5vdCBlbmFibGVkIGF0IHRoZSBzYW1lCiAgICB0aW1lIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMjYgSmFuIDIwMDQ6CiAgQWxsb3cgYnppcDIgY29tcHJlc3Npb24gZm9yIHNtYWxsIG1lbW9yeSBmb290cHJpbnQgYm9hcmRzCgoqIFBhdGNoIGJ5IEJyYWQgS2VtcCwgMjEgSmFuIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIENGSSBmbGFzaCBkcml2ZXIgZm9yIGJvdGggdGhlIEludGVsIGFuZCB0aGUgQU1ECiAgY29tbWFuZCBzZXRzLgoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAyMCBKYW4gMjAwNDoKICBGaXggcGNpIGJyaWRnZSBhdXRvIGVudW1lcmF0aW9uIG9mIHNpYmxpbmcgcDJwIGJyaWRnZXMuCgoqIFBhdGNoIGJ5IFRvbHVuYXkgT3JrdW4sIDEyIEphbiAyMDA0OgogIEFkZCBzb21lIGRlbGF5cyBhcyBuZWVkZWQgZm9yIEludGVsIExYVDk3MUEgUEhZIHN1cHBvcnQKCiogUGF0Y2hlcyBieSBTdGVwaGFuIExpbnosIDA5IEphbiAyMDA0OgogIC0gYXZvaWQgd2FybmluZzogdW51c2VkIHZhcmlhYmxlIGBwaW9wJyBpbiBib2FyZC9hbHRlcmEvY29tbW9uL3NldmVuc2VnLmMKICAtIG1ha2UgREsxQzIwIGJvYXJkIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBBU01JIGNvbmZvcm0gdG8KICAgIGRvY3VtZW50YXRpb24KCiogUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMDkgSmFuIDIwMDQ6CgogIEFSTSBtZW1vcnkgbGF5b3V0IGZpeGVzOiB0aGUgYWJvcnQtc3RhY2sgaXMgbm93IHNldCB1cCBpbiB0aGUKICBjb3JyZWN0IFJBTSBhcmVhLCBhbmQgdGhlIEJTUyBpcyB6ZXJvZWQgb3V0IGFzIGl0IHNob3VsZCBiZS4KCiAgRnVydGhlcm1vcmUsIHRoZSBtYWdpYyB2YXJpYWJsZXMgJ2FybWJvb3RfZW5kJyBhbmQgJ2FybWJvb3RfZW5kX2RhdGEnCiAgb2YgdGhlIGxpbmtlciBzY3JpcHRzIGFyZSByZXBsYWNlZCBieSAnX19ic3Nfc3RhcnQnIGFuZCAnX2VuZCcsCiAgcmVzcC4sIHdoaWNoIGlzIGEgZnVydGhlciBzdGVwIHRvIGVsaW1pbmF0ZSB1bm5lY2Vzc2FyeSBkaWZmZXJlbmNlcwogIGJldHdlZW4gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBDUFUgYXJjaGl0ZWN0dXJlcy4KCiogUGF0Y2ggYnkgbGlhbmcgYSBsZWksIDkgSmFuIDIwMDQ6CiAgRml4IEludGVsIDI4RjEyOEozIElEIGluIGluY2x1ZGUvZmxhc2guaAoKKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAwOSBKYW4gMjAwNDoKICBhZGQgc3VwcG9ydCBmb3IgVEIwMjI5IGJvYXJkIChORUMgVlI0MTMxIE1JUFMgcHJvY2Vzc29yKQoKKiBQYXRjaCBieSBMZW9uIEt1a292ZWMsIDEyIERlYyAyMDAzOgogIGNoYW5nZWQgZXh0ZXJuIF9faW5saW5lX18gaW50byBzdGF0aWMgX19pbmxpbmVfXyBpbgogIGluY2x1ZGUvbGludXgvYnl0ZW9yZGVyL3N3YWIuaAoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAzMCBEZWMgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgSUJNIFBQQzQ0MEdYLiBNdWx0aXBsZSBFTUFDIEV0aGVybmV0IGRldmljZXMsCiAgc2VsZWN0IE1ESSBwb3J0IGJhc2VkIG9uIGVuYWJsZWQgRU1BQyBkZXZpY2UuCiAgQWRkIHN1cHBvcnQgZm9yIFhFUyBJbmMgPGh0dHA6Ly93d3cueGVzLWluYy5jb20+IFhQZWRpdGUxMDAwIDQ0MEdYCiAgYmFzZSBQclBNQyBib2FyZC4KCiogUGF0Y2ggYnkgV29sdGVyIEthbXBodWlzLCAxNSBEZWMgMjAwMzoKICBtYWRlIENPTkZJR19TSUxFTlRfQ09OU09MRSB1c2FibGUgb24gYWxsIGFyY2hpdGVjdHVyZXMKCiogRGlzYWJsZSBkYXRlIGNvbW1hbmQgb24gVFFNODY2TSAtIHRoZXJlIGlzIG5vIFJUQyBvbiBNUEM4NjYKCiogRml4IHZhcmlhYmxlIENQVSBjbG9jayBmb3IgTVBDODU5Lzg2NiBzeXN0ZW1zIGZvciBsb3cgQ1BVIGNsb2NrcwoKKiBJbXBsZW1lbnQgYWRhcHRpdmUgU0RSQU0gdGltaW5nIGNvbmZpZ3VyYXRpb24gYmFzZWQgb24gYWN0dWFsIENQVQogIGNsb2NrIGZyZXF1ZW5jeSBmb3IgSU5DQS1JUDsgZml4IHByb2JsZW0gd2l0aCBib2FyZCBoYW5naW5nIHdoZW4KICBzd2l0Y2hpbmcgZnJvbSAxNTBNSHogdG8gMTAwTUh6CgoqIEFkZCBQQ01DSUEgQ1Mgc3VwcG9ydCBmb3IgQk1TMjAwMyBib2FyZAoKKiBBZGQgdmFyaWFibGUgQ1BVIGNsb2NrIGZvciBNUEM4NTkvODY2IHN5c3RlbXMgKHNvIGZhciBvbmx5IFRRTTg2Nk0pOgogIHNlZSBkb2MvUkVBRE1FLk1QQzg2NiBmb3IgZGV0YWlsczsKICBpbXBsZW1lbnQgd29ya2Fyb3VuZCBmb3IgIlNJVTQiIGFuZCAiU0lVOSIgc2lsaWNvbiBidWdzIG9uIE1QQzg2NjsKICBjYWxjdWxhdGUgQ1BVIGNsb2NrIGZyZXF1ZW5jeSBmcm9tIFBMTCByZWdpc3RlciB2YWx1ZXMuCgoqIEFkZCBzdXBwb3J0IGZvciAxMjggTUIgUkFNIG9uIFRRTTh4eEwvTSBtb2R1bGVzCgoqIEZpeCBQUy8yIGtleWJvYXJkIHByb2JsZW0gY2F1c2VkIGJ5IHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQgdmFyaWFibGUKICBwb2ludGluZyB0byBhIGxvY2F0aW9uIGluIGZsYXNoCgoqIEZpeCBJTkNBLUlQIGNsb2NrIGNhbGN1bGF0aW9uOiA0MDAvMyA9IDEzMy4zIE1Ieiwgbm90IDEzMC4KCiogVGhlIFBTLzIgbXV4IG9uIHRoZSBCTVMyMDAzIGJvYXJkIG5lZWRzIDQ1MCBtcyBhZnRlciBwb3dlciBvbgogIGJlZm9yZSB3ZSBjYW4gYWNjZXNzIGl0OyBhZGQgZGVsYXkgaW4gY2FzZSB3ZSBhcmUgZmFzdGVyICh3aXRoIG5vCiAgQ0YgY2FyZCBpbnNlcnRlZCkKCiogQ2xlYW51cCBvZiBzb21lIGluaXQgZnVuY3Rpb25zCgoqIE1ha2Ugc3VyZSBTQ0MgRXRoZXJuZXQgaXMgYWx3YXlzIHN0b3BwZWQgYnkgdGhlIHRpbWUgd2UgYm9vdCBMaW51eAogIHRvIGF2b2lkIExpbnV4IGNyYXNoZXMgYnkgZWFybHkgcGFja2V0cyBjb21pbmcgaW4uCgoqIEFjY2VsZXJhdGUgZmxhc2ggYWNjZXNzZXMgb24gTFdNT04gYm9hcmQgYnkgdXNpbmcgYnVmZmVyZWQgd3JpdGVzCgoqIEZpeCB0eXBvIGluIE1ha2VmaWxlOwogIGZpeCBwcm9ibGVtIHdpdGggUEFSVE5VTSBkZXRlY3Rpb24KCiogUGF0Y2ggYnkgUmVpbmhhcmQgTWV5ZXIsIDA5IEphbiAyMDA0OgogIC0gYWRkIFJUQyBzdXBwb3J0IGZvciBNUEM1MjAwIGJhc2VkIGJvYXJkcyAocmVxdWlyZXMgUlRDX1hUQUwpCgoqIEFkZCBzdXBwb3J0IGZvciBJREUgTEVEIG9uIEJNUzIwMDMgYm9hcmQKICAoZXhjbHVzaXZlIHdpdGggc3RhdHVzIExFRCEpCgoqIEFkZCBzdXBwb3J0IGZvciBQUy8yIGtleWJvYXJkICh1c2VkIHdpdGggUFMvMiBtdWx0aXBsZXhvciBvbgogIEJNUzIwMDMgYm9hcmQpCgoqIFBhdGNoZXMgYnkgUmVpbmhhcmQgTWV5ZXIsIDQgSmFuIDIwMDQgKyA3IEphbiAyMDA0OgogIEFkZCBjb21tb24gZmlsZXMgZm9yICJlbWsiIGJvYXJkcwoKKiBBZGQgYSBjb21tb24gZ2V0X3JhbV9zaXplKCkgZnVuY3Rpb24gYW5kIG1vZGlmeSB0aGUgdGhlCiAgYm9hcmQtc3BlY2lmaWMgZmlsZXMgdG8gaW52b2tlIHRoYXQgY29tbW9uIGltcGxlbWVudGF0aW9uLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMS4wLjE6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogU2V0IGRlZmF1bHQgY2xvY2sgZm9yIElOQ0EtSVAgdG8gMTUwIE1IegoKKiBNYWtlIEJNUzIwMDMgdXNlIGEgc2VwYXJhdGUgY29uZmlnIGZpbGUgdG8gYXZvaWQgI2lmZGVmIG1lc3M7CiAgYWRkIEkyQyBzdXBwb3J0OyBhZGQgc3VwcG9ydCBmb3IgRFMxMzM3IFJUQwoKKiBBZGQgQ29tcGFjdEZsYXNoIHN1cHBvcnQgIGZvciBCTVMyMDAzIGJvYXJkCgoqIEFkZCBzdXBwb3J0IGZvciBzdGF0dXMgTEVEIG9uIEJNUzIwMDMgYm9hcmQKCiogUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAwMiBKYW4gMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgdGhlIE5pb3MgQWN0aXZlIFNlcmlhbCBNZW1vcnkgSW50ZXJmYWNlIChBU01JKQogIG9uIEN5Y2xvbmUgZGV2aWNlcwoKKiBQYXRjaCBieSBBbmRyZWEgTWFyc29uLCAxNiBEZWMgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgdGhlIFBQQ2hhbWVsZW9uIE1FIGFuZCBISSBtb2R1bGVzCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDIyIERlYyAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBNb3Rvcm9sYSBEVUVUIEFEUyBib2FyZCAoTVBDODd4Lzg4eCkKCiogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCAxNSBEZWMgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgY3JhbWZzICh1c2VzIEpGRlMyIGNvbW1hbmQgaW50ZXJmYWNlKQoKKiBQYXRjaGVzIGJ5IFN0ZXBoYW4gTGlueiwgMTEgRGVjIDIwMDM6CiAgLSBtb3JlIGRvY3VtZW50YXRpb24gZm9yIE5JT1MgcG9ydAogIC0gbmV3IHN0cnVjdCBuaW9zX3Bpb190LCBzdHJ1Y3Qgbmlvc19zcGlfdAogIC0gUmVjb25maWd1cmF0aW9uIGZvciBOSU9TIERldmVsb3BtZW50IEtpdCBESzFDMjA6CiAgICBvIG1vdmUgYm9hcmQgcmVsYXRlZCBjb2RlIGZyb20gYm9hcmQvZGsxYzIwCiAgICAgIHRvIGJvYXJkL2FsdGVyYS9kazFjMjAKICAgIG8gY3JlYXRlIGEgbmV3IGNvbW1vbiBzb3VyY2UgcGF0aCBib2FyZC9hbHRlcmEvY29tbW9uCiAgICAgIGFuZCBtb3ZlIGdlbmVyaWMgZmxhc2ggYWNjZXNzIHN0dWZmIGludG8gaXQKICAgIG8gY2hhbmdlL2V4cGFuZCBjb25maWd1cmF0aW9uIGZpbGUgREsxQzIwLmgKICAtIEFkZCBzdXBwb3J0IGZvciBOSU9TIERldmVsb3BtZW50IEtpdCBESzFTMTAKICAtIEFkZCBzdGF0dXMgTEVEIHN1cHBvcnQgZm9yIE5JT1Mgc3lzdGVtcwogIC0gQWRkIGR1YWwgNy1zZWdtZW50IExFRCBzdXBwb3J0IGZvciBBbHRlcmEgTklPUyBEZXZLaXRzCgoqIFBhdGNoIGJ5IFJvbmVuIFNoaXRyaXQsIDEwIERlYyAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciB0aGUgTWFydmVsbCBEQjY0MzYwIC8gREI2NDQ2MCBkZXZlbG9wbWVudCBib2FyZHMKCiogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMTAgRGVjIDIwMDM6CiAgZml4IGRlcGVuZGVuY3kgcHJvYmxlbSBpbiBleGFtcGxlcy9NYWtlZmlsZQoKKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgOCBEZWMgMjAwMwogIC0gYWRkIHN1cHBvcnQgZm9yIHRoZSBQQVRJIGJvYXJkIChNUEM1NTUpCiAgLSBhZGQgU1BJIHN1cHBvcnQgZm9yIHRoZSBNUEM1eHgKCiogUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMDggRGVjIDIwMDM6CiAgYWRkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBDT05GSUdfU0VSSUFMX1RBRyBhbmQgQ09ORklHX1JFVklTSU9OX1RBRwogIHRvIHBhc3MgQVRBR19TRVJJQUwgYW5kIEFUQUdfUkVWSVNJT04sIHJlc3AuLCB0byB0aGUgQVJNIHRhcmdldDsKICBjbGVhbnVwIHNvbWUgcmVkdW5kYW5kICNkZWZpbmVzCgoqIFBhdGNoIGJ5IEFuZHLpIFNjaHdhcnosIDggRGVjIDIwMDM6CiAgZml4ZXMgZm9yIERhdmljb20gRE05MTAyQSBFdGhlcm5ldCBDaGlwICgjZGVmaW5lIENPTkZJR19UVUxJUF9GSVhfREFWSUNPTSk6CiAgLSBUWCBhbmQgUlggZGVza3JpcHRvcnMgbXVzdCBiZSBxdWFkLXdvcmQgYWxpZ25lZAogIC0gZG9lcyBub3Qgd29yayB3aXRoIG9ubHkgb25lIFRYIGRlc2tyaXB0b3IKICAtIHN0YW5kYXJkIHJlc2V0IG1ldGhvZCBkb2VzIG5vdCB3b3JrCgoqIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDA4IERlYyAyMDAzOgogIGFkZCBSVEw4MTM5IGV0aGVybmV0IGRyaXZlcgoKKiBQYXRjaGVzIGJ5IEVkIE9rZXJzb24sIDA3IERlYyAyMDAzOgogIC0gZml4IGV0aGVybmV0IGZvciB0aGUgQVUxeDAwIHByb2Nlc3NvcnMgaW4gbGl0dGxlLWVuZGlhbiBtb2RlLgogIC0gZXh0ZW5kIG1lbXNldHVwLlMgZm9yIHRoZSBBVTF4MDAgcHJvY2Vzc29ycyBpbiBCRSBhbmQgTEUgbW9kZXMKCiogTWlub3IgY29kZSBjbGVhbnVwIChjb2Rpbmcgc3R5bGUpCgoqIFBhdGNoIGJ5IFJlaW5oYXJkIE1leWVyLCAzMCBEZWMgMjAwMzoKICAtIGNwdS9tcGM1eHh4L2ZlYy5jOiBhZGRlZCBDT05GSUdfUEhZX0FERFIsIGFkZGVkIENPTkZJR19QSFlfVFlQRSwKICAtIGFkZGVkIENPTkZJR19QSFlfQUREUiB0byBpbmNsdWRlL2NvbmZpZ3MvSWNlQ3ViZS5oLAogIC0gdHVybmVkIGRlYnVnIHByaW50IG9mIFBIWSByZWdpc3RlcnMgaW50byBhIGZ1bmN0aW9uIChjYWxsZWQgaW4gdHdvIHBsYWNlcykKICAtIGFkZGVkIHN1cHBvcnQgZm9yIEVNSyBNUEM1MjAwIGJhc2VkIG1vZHVsZXMKCiogRml4IE1QQzh4eCBQTFBSQ1JfTUZEX1NISUZUIHR5cG8KCiogQWRkIHN1cHBvcnQgZm9yIFRRTTg2Nk0gbW9kdWxlcwoKKiBGaXhlcyBmb3IgVFFNODU1TSB3aXRoIDQgTUIgZmxhc2ggKEFtMjlETDE2MyA9IF9ub18gbWlycm9yIGJpdCBmbGFzaCkKCiogRml4IGEgZmV3IGNvbXBpbGVyIHdhcm5pbmdzCgoqIFBhdGNoIGJ5IFJlaW5oYXJkIE1leWVyLCAyOCBEZWMgMjAwMzoKICBBZGQgaW5pdGlhbCBzdXBwb3J0IGZvciBUT1A1MjAwIGJvYXJkCgoqIE1ha2UgQ1BVIGNsb2NrIG9uIElDQS1JUCBib2FyZCBjb250cm9sbGFibGUgYnkgYSAiY3B1Y2xrIgogIGVudmlyb25tZW50IHZhcmlhYmxlIHdoaWNoIGNhbiBzZXQgdG8gIjEwMCIsICIxMzMiLCBvciAiMTUwIi4gVGhlCiAgQ1BVIGNsb2NrIHdpbGwgYmUgY29uZmlndXJlZCBhY2NvcmRpbmdseSB1cG9uIG5leHQgcmVib290LiBPdGhlcgogIHZhbHVlcyBhcmUgaWdub3JlZC4gSW4gY2FzZSBvZiBhbiBpbnZhbGlkIG9yIHVuZGVmaW5lZCAiY3B1Y2xrIgogIHZhbHVlLCB0aGUgY29tcGlsZS10aW1lIGRlZmF1bHQgQ1BVIGNsb2NrIHNwZWVkIHdpbGwgYmUgdXNlZC4KCiogRW5hYmxlIFF1YWQtVUFSVCBvbiBCTVMyMDAzIGJvYXJkIChpbml0aWFsaXplIHRoZSBQQ01DSUEgbWVtb3J5CiAgd2luZG93IHRoYXQgaXMgdXNlZCB0byBhY2Nlc3MgdGhlIFVBUlQgcmVnaXN0ZXJzIGJ5IHRoZSBMaW51eCBkcml2ZXIpCgoqIFBhdGNoIGJ5IFJlaW5oYXJkIE1leWVyLCAyMCBEZWMgMjAwMzoKICBGaXggY2xvY2sgY2FsY3VsYXRpb24gZm9yIHRoZSBNUEM1MjAwIGZvciBoaWdoZXIgY2xvY2sgZnJlcXVlbmNpZXMKICAoYWJvdmUgMioqMzIgLyAxMCA9IDQyOS41IE1IeikuCgoqIEZpeCBDT05GSUdfUExMX1BDSV9UT19NRU1fTVVMVElQTElFUiBkaXZpZGVyIGVycm9yIGluIFNQODI0MCBjb25maWd1cmF0aW9uCgoqIEZpeCBJY2VDdWJlIENMS0lOIGNvbmZpZ3VyYXRpb24gKGl0J3MgMzMuMDAwMDAwTUh6KQoKKiBBZGQgbmV3IGNvbmZpZ3VyYXRpb24gZm9yIEljZUN1YmUgYm9hcmQgd2l0aCBERFIgbWVtb3J5CgoqIFVwZGF0ZSBUUkFCIG1lbW9yeSBjb25maWd1cmF0aW9ucwoKKiBBZGQgSkZGUzIgc3VwcG9ydCBmb3IgSU5DQS1JUCBib2FyZAoKKiBQYXRjaCBieSBCaWxsIEhhcmdlbiwgMDkgRGVjIDIwMDM6CiAgLSBCVUJJTkdBNDA1RVA6IGNoYW5nZWQgZmxhc2ggZHJpdmVyIHRvIHByb3RlY3QgdG9wIHNlY3RvciBjb250YWluaW5nCiAgICBmaXJzdCBpbnN0cnVjdGlvbi4KICAtIEJVQklOR0E0MDVFUDogY29uZmlndXJlZCAiZWVwcm9tIiBjb21tYW5kIHRvIGFjY2VzcyBib290IGNvbmZpZyBFRVBST00uCiAgLSBCVUJJTkdBNDA1RVA6IGZpeGVkIFBMTCBpbml0IChpbml0IGNoaXAgc2VsZWN0cyBiZWZvcmUgRlBHQS9OVlJBTSBhY2Nlc3MpLgogIC0gNDA1RVA6IGZpeGVkIFNQRC1iYXNlZCBTRFJBTSBpbml0IChvbmx5IHVzZSBiYW5rcyAwIGFuZCAxKS4KICAtIDQwNUVQOiBhZGRlZC9maXhlZCBzdXBwb3J0IGZvciAicmVnaW5mbyIgY29tbWFuZC4KICAtIDR4eDogcmVtb3ZlZCBzcHVyaW91cyBNSUkgZXJyb3IgbWVzc2FnZXMgb24gIm1paSBpbmZvIiBjb21tYW5kLgoKKiBQYXRjaCBieSBCZXJuaGFyZCBLdWhuLCAyOCBOb3YgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgQ29sZGZpcmUgQ1BVCiAgYWRkIHN1cHBvcnQgZm9yIE1vdG9yb2xhIE01MjcyQzMgYW5kIE01MjgyRVZCIGJvYXJkcwoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAyNCBOb3YgMjAwMzoKICAtIGFkZCBhIHJldHVybiB2YWx1ZSBmb3IgdGhlIGZwZ2EgY29tbWFuZAogIC0gYWRkIGlkZV9wcmVpbml0KCkgZnVuY3Rpb24gY2FsbGVkIGluIGlkZV9pbml0IGlmIENPTkZJR19JREVfUFJFSU5JVAogICAgaXMgZGVmaW5lZC4gSWYgaWRlX3ByZWluaXQgZmFpbHMsIGlkZV9pbml0IGlzIGFib3J0ZWQuCiAgLSBmaXggYW4gZW5kaWFuZXNzIHByb2JsZW0gaW4gZmF0LmgKCiogUGF0Y2ggYnkgV29sdGVyIEthbXBodWlzLCAwNSBEZWMgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgU05NQydzIFFTODUwL1FTODIzL1FTODYwVCBib2FyZHMKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMyBEZWMgMjAwMzoKICAicmV2aXZlIiBVLUJvb3Qgc3VwcG9ydCBmb3Igb2xkIE1vdG9yb2xhIE1QQzg2MEFEUyBib2FyZAoKKiBQYXRjaCBieSBDYW0oaWxvPyksIDAzIERlYyAyMDAzOgogIG1ha2UgZXhhbXBsZXMgYnVpbGQgZXZlbiB3aXRoIGJyb2tlbiBNb250YXZpc3RhIG9iamNvcHkKCiogUGF0Y2ggYnkgUGF2ZWwgQmFydHVzZWssIDI3IE5vdiAyMDAzOgogIGZpeCBjb252ZXJzaW9uIHByb2JsZW0gd2l0aCAiYm9vdHJldHJ5IiBldmlyb25tZW50IHZhcmlhYmxlCgoqIFBhdGNoIGJ5IEFuZHJlIFNjaHdhcnosIDI0IE5vdiAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciBtdmJsdWUgKG12Qmx1ZUxZTlggYW5kIG12Qmx1ZUJPWCkgYm9hcmRzCgoqIFBhdGNoIGJ5IFBhdmVsIEJhcnR1c2VrLCAyMSBOb3YgMjAwMzoKICBzZXQgWk1JSSBicmlkZ2Ugc3BlZWQgb24gNDQwCgoqIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDE3IE5vdiAyMDAzOgogIEZpeCBtaXNtYXRjaGVkICNpZmRlZiAvICNlbmRpZiBpbiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvaGFyZHdhcmUuaAoKKiBQYXRjaGVzIGJ5IERhdmlkIE38bGxlciwgMTQgTm92IDIwMDM6CiAgLSBib2FyZC9tcGwvY29tbW9uL2NvbW1vbl91dGlsLmMKICAgICogaW1wbGVtZW50IHN1cHBvcnQgZm9yIEJaSVAyIGNvbXByZXNzZWQgaW1hZ2VzCiAgICAqIHZhcmlvdXMgY2xlYW51cHMgKHByaW50ZiAtPiBwdXRzLCAuLi4pCiAgLSBib2FyZC9tcGwvY29tbW9uL2ZsYXNoLmMKICAgICogcmVwb3J0IGNvcnJlY3QgZXJyb3JzIHRvIHVwcGVyIGxheWVycwogICAgKiBjaGVjayB0aGUgZXJhc2UgZmFpbCBhbmQgVlBQIGxvdyBiaXRzIGluIHN0YXR1cyByZWcKICAtIGJvYXJkL21wbC92Y21hOS9jbWRfdmNtYTkuYwogIC0gYm9hcmQvbXBsL3ZjbWE5L2ZsYXNoLmMKICAgICogdmFyaW91cyBjbGVhbnVwcyAocHJpbnRmIC0+IHB1dHMsIC4uLikKICAtIGNvbW1vbi9jbWRfdXNiLmMKICAgICogZml4IHR5cG8gaW4gY29tbWVudAogIC0gY3B1L2FybTkyMHQvdXNiX29oY2kuYwogICAgKiBzdXBwb3J0IGZvciBTM0MyNDEwIGlzIG1pc3NpbmcgaW4gI2lmIGxpbmUKICAtIGRyaXZlcnMvY3M4OTAwLmMKICAgICogcmVpbml0IHNvbWUgcmVnaXN0ZXJzIGluIGNhc2Ugb2YgZXJyb3IgKGNhYmxlIG1pc3NpbmcsIC4uLikKICAtIGZzL2ZhdC9mYXQuYwogICAgKiBzdXBwb3J0IGZvciBVU0IvTU1DIGRldmljZXMgaXMgbWlzc2luZyBpbiAjaWYgbGluZQogIC0gaW5jbHVkZS9jb25maWdzL01JUDQwNS5oCiAgLSBpbmNsdWRlL2NvbmZpZ3MvUElQNDA1LmgKICAgICogZW5hYmxlIEJaSVAyIHN1cHBvcnQKICAgICogZW5sYXJnZSBtYWxsb2Mgc3BhY2UgdG8gMU1pQiBiZWNhdXNlIG9mIEJaSVAyIHN1cHBvcnQKICAtIGluY2x1ZGUvY29uZmlncy9WQ01BOS5oCiAgICAqIGVuYWJsZSBCWklQMiBzdXBwb3J0CiAgICAqIGVubGFyZ2UgbWFsbG9jIHNwYWNlIHRvIDFNaUIgYmVjYXVzZSBvZiBCWklQMiBzdXBwb3J0CiAgICAqIGVuYWJsZSBVU0Igc3VwcG9ydAogIC0gbGliX2FybS9hcm1saW51eC5jCiAgICAqIGNoYW5nZSBjYWxsaW5nIGNvbnZlbnRpb24gb2YgQVJNIExpbnV4IGtlcm5lbCBhcwogICAgICBkZXNjcmliZWQgb24gaHR0cDovL3d3dy5hcm0ubGludXgub3JnLnVrL2RldmVsb3Blci9ib290aW5nLnBocAoKKiBQYXRjaCBieSBUaG9tYXMgTGFuZ2UsIDE0IE5vdiAyMDAzOgogIFNwbGl0IGRiYXUxeDAwIGludG8gZGJhdTEwMDAsIGRiYXUxMTAwIGFuZCBkYmF1MTUwMCBjb25maWdzIHRvCiAgc3VwcG9ydCBhbGwgdGhlc2UgQU1EIGJvYXJkcy4KCiogUGF0Y2ggYnkgVGhvbWFzIExhbmdlLCAxNCBOb3YgMjAwMzoKICBXb3JrYXJvdW5kIGZvciBtaXBzIGF1MXgwMCBwaHlzaWNhbCBtZW1vcnkgYWNjZXNzZXMgKHRoZSBhdTF4MDAKICB1c2VzIGEgMzYgYml0IGJ1cyBpbnRlcm5hbGx5IGFuZCBjYW5ub3QgYWNjZXNzIHBoeXNpY2FsIG1lbW9yeQogIGRpcmVjdGx5LiBVc2UgdGhlIHVuY2FjaGVkIFNEUkFNIGFkZHJlc3MgaW5zdGVhZCBvZiB0aGUgcGh5c2ljYWwKICBvbmUuKQoKKiBQYXRjaCBieSBYdWUgTGlnb25nIChKb2UpLCAxMyBOb3YgMjAwMzoKICBhZGQgUmVhbHRlayA4MDE5IGV0aGVybmV0IGRyaXZlcgoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAxMyBOb3YgMjAwMzoKICBNUEM4MjZ4QURTL1BRMkZBRFMgIGNsZWFudXAKCiogUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMTIgTm92IDIwMDM6CiAgVXBkYXRlIFJFQURNRSB0byBtYXJrIHRoZSBQT1JUSU8gY29tbWFuZHMgbm9uLXN0YW5kYXJkCgoqIFBhdGNoIGJ5IE5pY29sYXMgTGFjcmVzc29ubmnocmUsIDEyIE5vdiAyMDAzOgogIHVwZGF0ZSBmb3IgZm9yIEF0bWVsIEFUOTFSTTkyMDBESyBkZXZlbG9wbWVudCBraXQ6CiAgLSBzdXBwb3J0IGZvciBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaW4gRGF0YUZsYXNoCiAgLSBBdG1lbCBEYXRhRmxhc2ggQVQ0NURCMTI4MiBzdXBwb3J0CgoqIFBhdGNoIGJ5IEplZmYgQ2FyciwgMTEgTm92IDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIG5ldyB2ZXJzaW9uIG9mIDgyNzAgcHJvY2Vzc29ycwoKKiBQYXRjaGVzIGJ5IEdlb3JnZSBHLiBEYXZpcywgMDUgTm92IDIwMDM6CiAgLSBvbmx5IHBhc3MgdGhlIEFSTSBsaW51eCBpbml0cmQgdGFnIHRvIHRoZSBrZXJuZWwgd2hlbiBhbiBpbml0cmQKICAgIGlzIGFjdHVhbGx5IHByZXNlbnQKICAtIHVwZGF0ZSBvbWFwMTUxMGlubiBjb25maWd1cmF0aW9uIGZpbGUKCiogUGF0Y2hlcyBieSBTdGVwaGFuIExpbnosIDMgTm92IDIwMDM6CiAgLSBtb3JlIGVuZGlhbmVzcyBmaXhlcyBmb3IgTEFOOTFDMTExIGRyaXZlcgogIC0gQ0ZHX0haIGNvbmZpZ3VyYXRpb24gcGF0Y2ggZm9yIE5JT1MgQ3ljbG9uZSBib2FyZAoKKiBQYXRjaCBieSBTdGVwaGFuIExpbnosIDI4IE9jdCAyMDAzOgogIGZpeCBQSFlfSU5UX1JFRyB2cy4gUEhZX01BU0tfUkVHIGJ1ZyBpbiBkcml2ZXJzL3NtYzkxMTExLmMKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMjAgT2N0IDIwMDM6CiAgLSBtYWtlICJtaWkgaW5mbyA8YWRkcj4iIHNob3cgaW5mb3IgZm9yIFBIWSBhdCAiYWRkciIgb25seQogIC0gRW5kaWFuIGZpeCBmb3IgbWlpcGh5X2luZm8oKQoKKiBQYXRjaCBieSBHbGViIE5hdGFwb3YsIDE5IFNlcCAyMDAzOgogIE1vdmUgbW9zdCBvZiB0aGUgdGltZXIgaW50ZXJydXB0IHJlbGF0ZWQgUFBDIGNvZGUgdG8gcHBjX2xpYi9pbnRlcnJ1cHRzLmMKCiogUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMTcgU2VwIDIwMDM6CiAgQnJpbmcgQVJNIG1lbW9yeSBsYXlvdXQgaW4gc3luYyB3aXRoIHRoZSBkb2N1bWVudGF0aW9uOgogIHN0YWNrIGFuZCBtYWxsb2MtaGVhcCBhcmUgbm93IGxvY2F0ZWQgX2JlbG93XyB0aGUgVS1Cb290IGNvZGUKCiogQWNjZWxlcmF0ZSBib290aW5nIG9uIFRSQUIgYm9hcmQ6IHJlYWQgYW5kIGNoZWNrICBhdXRvdXBkYXRlCWltYWdlCiAgaGVhZGVycyBmaXJzdCBpbnN0ZWFkIG9mIGFsd2F5cyByZWFkaW5nIHRoZSB3aG9sZSBpbWFnZXMuCgoqIEZpeCB0eXBlIGluIE1QQzVYWFggY29kZSAocG9pbnRlZCBvdXQgYnkgVmljdG9yIFdyZW4pCgoqIEVuYWJsZWQgcGFzc3dvcmQgY2hlY2sgb24gUk1VIGJvYXJkCgoqIEZpeCBjb25maWd1cmF0aW9uIHByb2JsZW0gd2l0aCBJY2VDdWJlIGluIExPV0JPT1QgY29uZmlndXJhdGlvbjoKICBlbnZyaW9ubWVudCBnb3QgZW1iZWRkZWQsIGNvcnJ1cHRpbmcgdGhlIGltYWdlIGxheW91dC4KCiogRml4IE5FQyBkaXNwbGF5IG5hbWVzIChpdCdzIDY0NDAgW2ZvciA2NDB4NDgwXSwgbm90IDY2NDApLgoKKiBBZGRlZCBCTVMyMDAzIGJvYXJkCiAgYWRkIHN1cHBvcnQgZm9yIE5FQyBOTDY0NDhCQzMzLTU0LiAxMC40IiwgNjQweDQ4MCBURlQgZGlzcGxheQoKKiBGaXggZmxhc2ggZHJpdmVyIGZvciBUUkFCIGJvYXJkIChtdXN0IHVzZSBVbmxvY2sgQnlwYXNzIFJlc2V0CiAgY29tbWFuZCB0byBleGl0IFVubG9jayBCeXBhc3MgTW9kZSk7IGFkanVzdCB0aW1pbmdzIGZvciBmbGFzaCwgU1JBTQogIGFuZCBDUExECgoqIFVzZSAiLWZQSUMiIGluc3RlYWQgb2YgIi1tcmVsb2NhdGFibGUiIHRvIHByZXZlbnQgcHJvYmxlbXMgd2l0aAogIHJlY2VudCB0b29scwoKKiBBZGQgY2hlY2tzdW0gdmVyaWZpY2F0aW9uIHRvICdpbWxzJyBjb21tYW5kCgoqIEFkZCBiZF9pbmZvIGZpZWxkcyBuZWVkZWQgZm9yIDR4eCBMaW51eCBJMkMgZHJpdmVyCgoqIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDQgTm92LiAyMDAzOgogIEZpeCBlcnJvciBpbiBjbWRfdmZkLmMgKFRSQUIgYm9hcmQ6ICJ2ZmQgLzEiIHNob3dzIG5vdyBvbmx5IG9uZSBCaXRtYXApCgoqIFByaW50IHVzZWQgbmV0d29yayBpbnRlcmZhY2Ugd2hlbiBDT05GSUdfTkVUX01VTFRJIGlzIHNldAoKKiBQYXRjaCBieSBCZXJuaGFyZCBLdWhuLCAyOCBPY3QgMjAwMzoKICBBZGQgbG93IGJvb3Qgc3VwcG9ydCBmb3IgTVBDNTIwMAoKKiBGaXggcHJvYmxlbSB3aXRoIGR1YWwgUENNQ0lBIHN1cHBvcnQgKE5TQ1UpCgoqIEZpeCBNUEM1MjAwIEkyQyBpbml0aWFsaXphdGlvbiBmdW5jdGlvbgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMS4wLjA6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogRml4IHBhcmFtZXRlciBwYXNzaW5nIHRvIHN0YW5kYWxvbmUgaW1hZ2VzIHdpdGggYm9vdG0gY29tbWFuZAoKKiBQYXRjaCBieSBLeWxlIEhhcnJpcywgMzAgT2N0IDIwMDM6CiAgRml4IGJ1aWxkIGVycm9ycyBmb3IgaXhkcDQyNSBib2FyZAoKKiBQYXRjaCBieSBEYXZpZCBNLiBIb3JuLCAyOSBPY3QgMjAwMzoKICBGaXhlcyB0byBidWlsZCB1bmRlciBDWUdXSU4KCiogR2V0IEljZUN1YmUgTUdUNTEwMCB3b3JraW5nIChhZ2FpbikKCiogRml4IHByb2JsZW1zIGluIG1lbW9yeSB0ZXN0IG9uIHNvbWUgYm9hcmRzICh3aGljaCB3YXMgbm90CiAgbm9uLWRlc3RydWN0aXZlIGFzIGludGVuZGVkKQoKKiBQYXRjaCBieSBHYXJ5IEplbm5lam9obiwgMjggT2N0IDIwMDM6CiAgQ2hhbmdlIGZzL2ZhdC9mYXQuYyB0byBwdXQgSS9PIGJ1ZmZlcnMgaW4gQlNTIGluc3RlYWQgb24gdGhlIHN0YWNrCiAgdG8gcHJldmVudCBzdGFjayBvdmVyZmxvdyBvbiBBUk0gc3lzdGVtcwoKKiBQYXRjaCBieSBTdGVwaGFuIExpbnosIDI4IE9jdCAyMDAzOgogIGZpeCBpbml0IHNlcXVlbmNlIGVycm9yIGZvciBOSU9TIHBvcnQKCiogQWxsb3cgbG93ZXJjYXNlIHNwZWxsaW5nIGZvciBJY2VDdWJlXzUyMDA7IHN1cHBvcnQgTVBDNTIwMExJVEUgbmFtZQoKKiBBZGQgQ09ORklHX1ZFUlNJT05fVkFSSUFCTEUgdG8gVFJBQiBjb25maWd1cmF0aW9uCgoqIFBhdGNoIGJ5IFhpYW8gWGlhbmdodWEsIDIzIE9jdCAyMDAzOgogIHNtYWxsIHBhdGNoIGZvciBtcGM4NXh4CgoqIEZpeCBzbWFsbCBwcm9ibGVtIGluIE1QQzUyMDAgSTJDIGRyaXZlcgoKKiBGaXggRkNDMyBzdXBwb3J0IG9uIEFUQyBib2FyZAoKKiBDb3JyZWN0IGhlYWRlciBwcmludGluZyBmb3IgbXVsdGktaW1hZ2UgZmlsZXMgaW4gZG9fYm9vdG0oKQoKKiBNYWtlIENPTkZJR19TSUxFTlRfQ09OU09MRSB3b3JrIHdpdGggQ09ORklHX0FVVE9CT09UX0tFWUVECgoqIEZpeCBQQ0kgcHJvYmxlbXMgb24gUFBDaGFtZWxlb24gYm9hcmQKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTggT2N0IDIwMDM6CiAgRml4IEFUOTFSTTkyMDAgZXRoZXJuZXQgZHJpdmVyCgoqIFBhdGNoIGJ5IE55ZSBMaXUsIDE3IE9jdCAyMDAzOgogIEZpeCB0eXBvIGluIGluY2x1ZGUvbXBjOHh4LmgKCiogUGF0Y2ggYnkgUmljaGFyZCBXb29kcnVmZiwgMTYgT2N0IDAzOgogIEZpeGVzIGZvciBjcHUvYXJtOTI1L2ludGVycnVwdC5jCiAgLSBJbml0aWFsaXplIHRpbWVzdGFtcCAmIGxhc3RkZWMgdmFycy4KICAtIGZpeCB0aW1lc3RhbXAgb3ZlcmZsb3dzLgogIC0gZml4IGxhc3RkZWMgb3ZlcmZsb3cuCiAgLSBzbWFydGVyIG5vcm1hbGl6YXRpb24gdG8gYWxsb3cgdWRlbGF5KCkgYmVsb3cgMW1zIHRvIHdvcmsuCgoqIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMTYgT2N0CiAgYWRkIG5ldHdvcmtpbmcgc3VwcG9ydCBmb3IgdGhlIEFsdGVyYSBOaW9zIERldmVsb3BtZW50IEtpdCwKICBDeWNsb25lIEVkaXRpb24gKERLLTFDMjApCgoqIFBhdGNoIGJ5IEpvbiBEaWVrZW1hLCAxNCBPY3QgMjAwMzoKICBhZGQgaGludCBhYm91dCBkb2MvUkVBRE1FLnNpbGVudCB0byBSRUFETUUgZmlsZQoKKiBBZGQgQ29tcGFjdEZsYXNoIHN1cHBvcnQgZm9yIE5TQ1UKCiogRml4IFBDSSBwcm9ibGVtcyBvbiBQUENoYW1lbGVvbkVWQgoKKiBUUkFCIGF1dG8tdXBkYXRlOiBCYXNlIGRlY2lzaW9uIGlmIHdlIGhhdmUgdG8gc3RyaXAgdGhlIGltYWdlCiAgaGVhZGVyIG9uIGltYWdlIHR5cGUgYXMgZW5jb2RlZCBpbiB0aGUgaGVhZGVyCiAgKGluY2x1ZGUgaW1hZ2UgdHlwZSBwYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAxNyBPY3QgMjAwMykKCiogUGF0Y2hlcyBieSBYaWFuZ2h1YSBYaWFvLCAxNSBPY3QgMjAwMzoKCiAgLSBBZGRlZCBNb3Rvcm9sYSBDUFUgODU0MC84NTYwIHN1cHBvcnQgKGNwdS84NXh4KQogIC0gQWRkZWQgTW90b3JvbGEgTVBDODU0MEFEUyBib2FyZCBzdXBwb3J0IChib2FyZC9tcGM4NTQwYWRzKQogIC0gQWRkZWQgTW90b3JvbGEgTVBDODU2MEFEUyBib2FyZCBzdXBwb3J0IChib2FyZC9tcGM4NTYwYWRzKQoKKiBGaXggZmxhc2ggdGltaW5ncyBvbiBUUkFCIGJvYXJkCgoqIE1ha2Ugc3VyZSBIVVNIIGlzIGluaXRpYWxpemVkIGZvciBydW5uaW5nIGF1dG8tdXBkYXRlIHNjcmlwdHMKCiogTWFrZSA1MjAwIHJlc2V0IGNvbW1hbmQgX3JlYWxseV8gcmVzZXQgdGhlIGJvYXJkLCB3aXRob3V0IHJ1bm5pbmcKICBhbnkgb3RoZXIgY29kZSBhZnRlciBpdAoKKiBGaXggZXJyb3JzIHdpdGggZmxhc2ggZXJhc2Ugd2hlbiByYW5nZSBzcGFucwlhY3Jvc3MgYmFua3MKICB0aGF0IGFyZSBtYXBwZWQgaW4gcmV2ZXJzZSBvcmRlcgoKKiBGaXggZmxhc2ggbWFwcGluZyBhbmQgZGlzcGxheSBvbiBQM0c0IGJvYXJkCgoqIFBhdGNoIGJ5IEt5bGUgSGFycmlzLCAxNSBKdWwgMjAwMzoKICAtIGFkZCBzdXBwb3J0IGZvciBJbnRlbCBJWFA0MjUgQ1BVCiAgLSBhZGQgc3VwcG9ydCBmb3IgSVhEUDQyNSBldmFsIGJvYXJkCgoqIEFkZGVkIGNvbmZpZyBvcHRpb24gQ09ORklHX1NJTEVOVF9DT05TT0xFLiAgU2VlIGRvYy9SRUFETUUuc2lsZW50CiAgZm9yIG1vcmUgaW5mb3JtYXRpb24KCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTAgT2N0IDIwMDMKICAtIEFkZCBzdXBwb3J0IGZvciBBbHRlcmEgRlBHQSBBQ0VYMUsKCiogUGF0Y2hlcyBieSBUaG9tYXMgTGFuZ2UsIDA5IE9jdCAyMDAzOgogIC0gZml4IGNtZF9pZGUuYyBmb3Igbm9uIHBwYyBib2FyZHMgKHJlYWQvd3JpdGUgZnVuY3Rpb25zIGRpZCBub3QKICAgIGFkZCBBVEEgYmFzZSBhZGRyZXNzKQogIC0gZml4IGZvciBzaGFubm9uIGJvYXJkCiAgLSAjaWZkZWYgQ09ORklHX0lERV84eHhfRElSRUNUIHNvbWUgb3RoZXJ3aXNlIHVudXNlZCBjb2RlCiAgLSBFbmRpYW4gc3dhcCBBVEEgaWRlbnRpdHkgZm9yIGFsbCBiaWcgZW5kaWFuIENQVXMsIG5vdCBqdXN0IFBQQwogIC0gTUlQUyBvbmx5OiBOZXcgb3B0aW9uIENPTkZJR19NRU1TSVpFX0lOX0JZVEVTIGZvciBwYXNzaW5nIG1lbXNpemUKICAgIGFyZ3MgdG8gbGludXgKICAtIGFkZCBzdXBwb3J0IGZvciBkYmF1MXgwMCBib2FyZCAoTUlQUzMyKQoKKiBQYXRjaCBieSBTYW5nbW9vbiBLaW0sIDA3IE9jdCAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciBkZWJyaXMgYm9hcmQKCiogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMDkgT2N0IDIwMDM6CiAgRml4ZXMgZm9yIFRSQUIgYm9hcmQKICAtIC9ib2FyZC90cmFiL3JzNDg1LmM6IGNvcnJlY3QgYmF1ZHJhdGUKICAtIC9ib2FyZC90cmFiL2NtZF90cmFiLmM6IGJ1ZyBmaXggZm9yIHByb2JsZW0gd2l0aCB0aW1lciBvdmVyZmxvdyBpbgogICAgdWRlbGF5KCk7IGZpeCBzb21lIHRpbWluZyBwcm9ibGVtcyB3aXRoIGFkYyBjb250cm9sbGVyCiAgLSAvYm9hcmQvdHJhYi90cmFiX2ZrdC5jOiBhZGQgbmV3IGNvbW1hbmRzOiBnYWluLCBlZXByb20gYW5kIHBvd2VyOwogICAgbW9kaWZ5IGNvbW1hbmRzOiB0b3VjaCBhbmQgYnV6emVyCgoqIERpc2FibGUgQ09ORklHX1NVUFBPUlRfVkZBVCB3aGVuIHVzZWQgd2l0aCBDT05GSUdfQVVUT19VUERBVEUKICAocXVpY2sgJiBkaXJ0eSB3b3JrYXJvdW5kIGZvciByb2d1ZSBwb2ludGVyIHByb2JsZW0gaW4gZ2V0X3ZmYXRuYW1lKCkpOwogIFVzZSBkaXJlY3QgZnVuY3Rpb24gY2FsbHMgZm9yIGF1dG9fdXBkYXRlIGluc3RlYWQgb2YgaHVzaCBjb21tYW5kcwoKKiBQYXRjaCBieSBTY290dCBNY051dHQsIDA0IE9jdCAyMDAzOgogIC0gYWRkIHN1cHBvcnQgZm9yIEFsdGVyYSBOaW9zLTMyIENQVQogIC0gYWRkIHN1cHBvcnQgZm9yIE5pb3MgQ3ljbG9uZSBEZXZlbG9wbWVudCBLaXQgKERLLTFDMjApCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDI5IFNlcCAyMDAzOgogIC0gQSBzZWNvbmQgcGFyYW1ldGVyIGZvciBib290bSBvdmVyd3JpdGVzIHRoZSBsb2FkIGFkZHJlc3MgZm9yCiAgICAiU3RhbmRhbG9uZSBBcHBsaWNhdGlvbiIgaW1hZ2VzLgogIC0gYm9vdG0gc2V0cyBlbnZpcm9ubWVudCB2YXJpYWJsZSAiZmlsZXNpemUiIHRvIHRoZSByZXN1bHRpbmcKICAgICh1bmNvbXByZXNzZWQpIGRhdGEgbGVuZ3RoIGZvciAiU3RhbmRhbG9uZSBBcHBsaWNhdGlvbiIgaW1hZ2VzCiAgICB3aGVuIGF1dG9zdGFydCBpcyBzZXQgdG8gIm5vIi4gTm93IHlvdSBjYW4gZG8gc29tZXRoaW5nIGxpa2UKCWlmIGJvb3RtICRmcGdhZGF0YSAkc29tZV9mcmVlX3JhbSA7IHRoZW4KCQlmcGdhIGxvYWQgMCAkc29tZV9mcmVlX3JhbSAkZmlsZXNpemUKCWZpCgoqIFBhdGNoIGJ5IERlbmlzIFBldGVyLCAyNSBTZXB0IDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIHRoZSBNSVA0MDUgUmV2LiBDIGJvYXJkCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDI1IFNlcCAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciBaZXBoeXIgRW5naW5lZXJpbmcgWlBDLjE5MDAgYm9hcmQKCiogUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMjMgU2VwIDIwMDM6CiAgYWRkIENNRF9QT1JUSU8gdG8gQ0ZHX0NNRF9OT05TVEQgKGNvbW1hbmRzIGluIHF1ZXN0aW9uIGFyZSBvbmx5CiAgaW1wbGVtZW50ZWQgZm9yIHRoZSB4ODYgYXJjaGl0ZWN0dXJlKQoKKiBQYXRjaCBieSBTYW5nbW9vbiBLaW0sIDIzIFNlcCAyMDAzOgogIGZpeCBwbGxfcGNpX3RvX21lbV9tdWx0aXBsaWVyIHRhYmxlIGZvciBNUEM4MjQ1CgoqIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDIyIFNlcCAyMDAzOgogIGVuYWJsZSB0aW1lZCBhdXRvYm9vdCBvbiBQWEEKCiogUGF0Y2ggYnkgRGF2aWQgTfxsbGVyLCAyMiBTZXAgMjAwMzoKICAtIGFkZCAkKENGTEFHUykgdG8gIi1wcmludC1saWJnY2MtZmlsZW5hbWUiIHNvIGNvbXBpbGVyIGRyaXZlcgogICAgcmV0dXJucyBjb3JyZWN0IGxpYmdjYyBmaWxlIHBhdGgKICAtICJsYXRlbmN5IiByZWR1Y3Rpb24gb2YgYnVzeS1sb29wIHdhaXRpbmcgdG8gaW1wcm92ZSAiVS1Cb290IiBib290CiAgICB0aW1lIG9uIHMzYzI0eDAgc3lzdGVtcwoKKiBQYXRjaCBieSBKb24gRGlla2VtYSwgMTkgU2VwIDIwMDM6CiAgLSBBZGQgQ0ZHX0ZBVUxUX0VDSE9fTElOS19ET1dOIG9wdGlvbiB0byBlY2hvIHRoZSBpbnZlcnRlZCBFdGhlcm5ldAogICAgbGluayBzdGF0ZSB0byB0aGUgZmF1bHQgTEVELgogIC0gSW4gTmV0TG9vcCwgbWFrZSB0aGUgRmF1bHQgTEVEIHJlZmxlY3QgdGhlIGxpbmsgc3RhdHVzLiAgVGhlIGxpbmsKICAgIHN0YXR1cyBnZXRzIHVwZGF0ZWQgb24gZW50cnksIGFuZCBvbiB0aW1lb3V0cy4KCiogUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMTggU2VwIDIwMDM6CiAgYWxsb3cgbWtpbWFnZSB0byBidWlsZCBhbmQgcnVuIG9uIEN5Z3dpbi1ob3N0ZWQgc3lzdGVtcwoKKiBQYXRjaCBieSBGcmFuayBN/GxsZXIsIDE4IFNlcCAyMDAzOgogIHVzZSBiaV9pbnRmcmVxIGluc3RlYWQgb2YgYmlfYnVzZnJlcSB0byBjb21wdXRlIGZlY19taWlfc3BlZWQgaW4KICBjcHUvbXBjOHh4L2ZlYy5jCgoqIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAxNiBTZXAgMjAwMzoKICBhZGQgdG9vbCB0byBjb21wdXRlIGZpbGVkcyBpbiB0aGUgUExQUkNSIHJlZ2lzdGVyIGZvciBNUEM4NngKCiogVXNlIElIX1RZUEVfRklMRVNZU1RFTSBmb3IgVFJBQiAiZGlzayIgaW1hZ2VzLgoKKiBGaXggYnVpbGQgcHJvYmxlbXMgdW5kZXIgRnJlZUJTRAoKKiBBZGQgZ2VuZXJpYyBmaWxlc3lzdGVtIGltYWdlIHR5cGUKCiogTWFrZSBmYXRsb2FkIHNldCBmaWxlc2l6ZSBlbnZpcm9ubWVudCB2YXJpYWJsZQoKKiBlbmFibGUgYmFzaWMgLyBtZWRpdW0gLyBoaWdoLWVuZCBjb25maWd1cmF0aW9ucyBmb3IgUFBDaGFtZWxlb25FVkIKICBib2FyZDsgZml4IE5BTkQgY29kZQoKKiBlbmFibGUgVEZUUCBjbGllbnQgY29kZSB0byBzcGVjaWZ5IHRvIHRoZSBzZXJ2ZXIgdGhlIGRlc2lyZWQKICB0aW1lb3V0IHZhbHVlIChzZWUgUkZDLTIzNDkpCgoqIEltcHJvdmUgU0RSQU0gc2V0dXAgZm9yIFRSQUIgYm9hcmQKCiogU3VwcHJlc3MgYWxsIG91dHB1dCB3aXRoIHNwbGFzaHNjcmVlbiBjb25maWd1cmVkIG9ubHkgaWYgInNwbGFzaGltYWdlIgogIGlzIHNldAoKKiBGaXggcHJvYmxlbXMgd2l0aCBJMkMgc3VwcG9ydCBmb3IgbXBjNTIwMAoKKiBBZGFwdCBUUkFCIGNvbmZpZ3VyYXRpb24gYW5kIGF1dG9fdXBkYXRlIHRvIG5ldyBtZW1vcnkgbGF5b3V0CgoqIEFkZCBjb25maWd1cmF0aW9uIGZvciB3dGsgYm9hcmQKCiogQWRkIHN1cHBvcnQgZm9yIHRoZSBTaGFycCBMUTA2NVQ5RFI1MVUgTENEIGRpc3BsYXkKCiogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDE3IFNlcCAyMDAzOgogIC0gRml4ZXMgZm9yIE1QQzgyNjYgZGVmYXVsdCBjb25maWcKICAtIEFsbG93IGV0aF9sb29wYmFja190ZXN0KCkgb24gODI2MCB0byB1c2UgYSBzdWJzZXQgb2YgdGhlIEZDQydzCgoqIFBhdGNoZXMgYnkgSm9uIERpZWtlbWEsIDE3IFNlcCAyMDAzOgogIC0gdXBkYXRlIFJFQURNRSAoU0hPV19CT09UX1BST0dSRVNTIHZhbHVlcyBmb3IgY21kX25hbmQuYyBhbmQKICAgIGVudl9jb21tb24uYykKICAtIHNiYzgyNjAgdHdlYWtzCiAgLSBhZGp1c3QgImhlbHAiIG91dHB1dAoKKiBQYXRjaGVzIGJ5IEFuZGVycyBMYXJzZW4sIDE3IFNlcCAyMDAzOgogIC0gZml4IHNwZWxsaW5nIGVycm9ycwogIC0gc2V0IEdEX0ZMR19ERVZJTklUIGZsYWcgb25seSBhZnRlciBkZXZpY2UgZnVuY3Rpb24gcG9pbnRlcnMKICAgIGFyZSB2YWxpZAogIC0gQWxsb3cgQ0ZHX0FMVF9NRU1URVNUIG9uIHN5c3RlbXMgd2hlcmUgYWRkcmVzcyB6ZXJvIGlzbid0CiAgICB3cml0ZWFibGUKICAtIGVuYWJsZSAzLnJkIFVBUlQgKFNULVVBUlQpIG9uIFBYQShYU2NhbGUpIENQVXMKICAtIHRyaWdnZXIgd2F0Y2hkb2cgd2hpbGUgd2FpdGluZyBpbiBzZXJpYWwgZHJpdmVyCgoqIEFkZCBhdXRvLXVwZGF0ZSBjb2RlIGZvciBUUkFCIGJvYXJkIHVzaW5nIFVTQiBtZW1vcnkgc3RpY2tzLAogIHN1cHBvcnQgbmV3IGNvbmZpZ3VyYXRpb24gd2l0aCBtb3JlIG1lbW9yeQoKKiBkaXNhYmxlIE1QQzUyMDAgYnVzIHBpcGVsaW5pbmcgYXMgd29ya2Fyb3VuZCBmb3IgYnVzIGNvbnRlbnRpb24KCiogTW9kaWZ5IFhMQiBhcmJpdGVyIHByaW9yaXRpZXMgb24gTVBDNTIwMCBzbyBhbGwgZGV2aWNlcyB1c2Ugc2FtZQogIHByaW9yaXR5OyBjb25maWd1cmUgY3JpdGljYWwgaW50ZXJydXB0cyB0byBiZSBoYW5kbGVkIGxpa2UgZXh0ZXJuYWwKICBpbnRlcnJ1cHRzCgoqIE1ha2UgSVBCIGNsb2NrIG9uIE1HVDUxMDAvTVBDNTIwMCBjb25maWd1cmFibGUgaW4gYm9hcmQgY29uZmlnIGZpbGU7CiAgZ28gYmFjayB0byA2NiBNSHogZm9yIHN0YWJpbGl0eQoKKiBQYXRjaGVzIGJ5IEpvbiBEaWVrZW1hLCAxNSBTZXAgMjAwMzoKICAtIGFkZCBkZXNjcmlwdGlvbiBmb3IgbWlzc2luZyBDRkdfQ01EXyogZW50cmllcyBpbiB0aGUgUkVBRE1FIGZpbGUKICAtIHNhY3NuZyB0d2Vha3MKCiogUGF0Y2ggYnkgR2xlYiBOYXRhcG92LCAxNCBTZXAgMjAwMzoKICBlbmFibGUgd2F0Y2hkb2cgc3VwcG9ydCBmb3IgYWxsIE1QQzgyNHggYm9hcmRzIHRoYXQgaGF2ZSBhIHdhdGNoZG9nCgoqIE9uIE1QQzUyMDAsIHJlc3RyaWN0IEZFQyB0byBhIG1heGltdW0gb2YgMTAgTWJwcyB0byB3b3JrIGFyb3VuZCB0aGUKICAiTm9uLW9jdGV0IEFsaWduZWQgRnJhbWUiIGVycm9ycyB3ZSBzZWUgYXQgMTAwIE1icHMKCiogUGF0Y2ggYnkgU2hhcmFkIEd1cHRhLCAxNCBTZXAgMjAwMzoKICBmaXggU1BSIG51bWJlcnMgZm9yIHVwcGVyIEJBVCByZWdpc3RlciAoW0lEXUJBVFs0LTddW1VMXSkKCiogUGF0Y2ggYnkgbGxhbmRyZSwgMTEgU2VwIDIwMDM6CiAgdXBkYXRlIGNvbmZpZ3VyYXRpb24gZm9yIFBQQ2hhbWVsZW9uRVZCIGJvYXJkCgoqIFBhdGNoIGJ5IERhdmlkIE38bGxlciwgMTMgU2VwIDIwMDM6CiAgdmFyaW91cyBjaGFuZ2VzIHRvIFZDTUE5IGJvYXJkIHNwZWNpZmljIGZpbGVzCgoqIEFkZCBJMkMgc3VwcG9ydCBmb3IgTUdUNTEwMCAvIE1QQzUyMDAKCiogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDExIFNlcCAyMDAzOgogIENoYW5nZWQgZGVmYXVsdCBtZW1vcnkgb3B0aW9uIG9uIE1QQzgyNjZBRFMgdG8gTk9UIGJlIFBhZ2UgQmFzZWQKICBJbnRlcmxlYXZlLCBzaW5jZSB0aGlzIGRvZXNuJ3Qgd29yayB2ZXJ5IHdlbGwgd2l0aCB0aGUgc3RhbmRhcmQKICAxNk1CIERJTU0KCiogUGF0Y2ggYnkgR2VvcmdlIEcuIERhdmlzLCAxMiBTZXAgMjAwMzoKICBmaXggTWFrZWZpbGUgc2V0dGluZ3MgZm9yIHNrOTggZHJpdmVyCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTIgU2VwIDIwMDM6CiAgLSBuZXcgYm9hcmRzIGFkZGVkOiBEUDQwNSwgSFVCNDA1LCBQTFU0MDUsIFZPSDQwNQogIC0gc29tZSBlc2QgYm9hcmRzIHVwZGF0ZWQKICAtIGNwdS9wcGM0eHgvc2RyYW0uYzogZGlzYWJsZSBtZW1vcnkgY29udHJvbGxlciBiZWZvcmUgc2V0dGluZwogICAgZmlyc3QgdmFsdWVzCiAgLSBjcHUvcHBjNHh4LzQwNV9wY2kuYzogc2V0IHZlbmRvciBpZCBvbiBQUEM0MDVFUCBzeXN0ZW1zCgoqIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDExIFNlcCAyMDAzOgogIGFkZCBidXJuLWluIHRlc3RzIGZvciBUUkFCIGJvYXJkCgoqIEVuYWJsZSBpbnN0cnVjdGlvbiBjYWNoZSBvbiBNUEM1MjAwIGJvYXJkCgoqIFBhdGNoIGJ5IERlbmlzIFBldGVyLCAxMSBTZXAgMjAwMzoKICAtIGZpeCBVU0IgZGF0YSBwb2ludGVyIGFzc2lnbm1lbnQgZm9yIGJ1bGsgb25seSB0cmFuc2Zlci4KICAtIHByZXZlbnQgdG8gZGlzcGxheSBlcmFzZWQgZGlyZWN0b3JpZXMgaW4gRkFUIGZpbGVzeXN0ZW0uCgoqIENoYW5nZSBvdXRwdXQgZm9ybWF0IGZvciBOQU5EIGZsYXNoIC0gbWFrZSBpdCBsb29rIGxpa2UgZm9yIG90aGVyCiAgbWVtb3J5LCB0b28KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC44Ogo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIEFkZCBJMkMgYW5kIFJUQyBzdXBwb3J0IGZvciBSTVUgYm9hcmQKCiogUGF0Y2hlcyBieSBEZW5pcyBQZXRlciwgOSBTZXAgMjAwMzoKICBhZGQgRkFUIHN1cHBvcnQgZm9yIElERSwgU0NTSSBhbmQgVVNCCgoqIFBhdGNoZXMgYnkgR2xlYiBOYXRhcG92LCAyIFNlcCAyMDAzOgogIC0gY2xlYW51cCBvZiBQT1NUIGNvZGUgZm9yIHVuc3VwcG9ydGVkIGFyY2hpdGVjdHVyZXMKICAtIE1QQzgyNHggbG9ja3Mgd2F5MCBvZiBkYXRhIGNhY2hlIGZvciB1c2UgYXMgaW5pdGlhbCBSQU07CiAgICB0aGlzIHBhdGNoIHVubG9ja3MgaXQgYWZ0ZXIgcmVsb2NhdGlvbiB0byBSQU0gYW5kIGludmFsaWRhdGVzCiAgICB0aGUgbG9ja2VkIGVudHJpZXMuCgoqIFBhdGNoIGJ5IEdsZWIgTmF0YXBvdiwgMzAgQXVnIDIwMDM6CiAgbmV3IEkyQyBkcml2ZXIgZm9yIG1wYzEwNyBicmlkZ2UuIE5vdyB3b3JrcyBmcm9tIGZsYXNoLgoKKiBQYXRjaCBieSBEYXZlIEVsbGlzLCAxMSBBdWcgMjAwMzoKICAtIEpGRlMyOiBmaXggdHlwbyBpbiBjb21tb24vY21kX2pmZnMyLmMKICAtIEpGRlMyOiBmaXggQ0ZHX0pGRlMyX1NPUlRfRlJBR01FTlRTIG9wdGlvbgogIC0gSkZGUzI6IHJlbW92ZSBub2RlIHZlcnNpb24gMCB3YXJuaW5nCiAgLSBKRkZTMjogYWNjZXB0IEpGRlMyIFBBRERJTkcgbm9kZXMKICAtIFNYTkk4NTVUOiBhZGQgQU0yOUxWODAwIHN1cHBvcnQKICAtIFNYTkk4NTVUOiBtb3ZlIGVudmlyb25tZW50IGZyb20gRUVQUk9NIHRvIGZsYXNoCiAgLSBTWE5JODU1VDogYm9vdCBmcm9tIEpGRlMyIGluIE5PUiBvciBOQU5EIGZsYXNoCgoqIFBhdGNoIGJ5IEJpbGwgSGFyZ2VuLCAxMSBBdWcgMjAwMzoKICBmaXhlcyBmb3IgSTJDIG9uIE1QQzgyNDAKICAtIGZpeCBpMmNfd3JpdGUgcm91dGluZQogIC0gZml4IGlwcm9iZSBjb21tYW5kCiAgLSBlbGltaW5hdGVzIHVzZSBvZiBnbG9iYWwgdmFyaWFibGVzLCBwbHVzIGRlYWQgY29kZSwgY2xlYW51cC4KCiogQWRkIHN1cHBvcnQgZm9yIFVTQiBNYXNzIFN0b3JhZ2UgRGV2aWNlcyAoQkJCKQogICh0ZXN0ZWQgd2l0aCBVU0IgbWVtb3J5IHN0aWNrcyBvbmx5KQoKKiBBdm9pZCBmbGlja2VyIG9uIFRSQUIncyBWRkQKCiogQWRkIHN1cHBvcnQgZm9yIFNLOTh4eCBkcml2ZXIKCiogQWRkIFBDSSBzdXBwb3J0IGZvciBTTDgyNDUgYm9hcmQKCiogU3VwcG9ydCBJY2VDdWJlIGJvYXJkIGNvbmZpZ3VyYXRpb25zIHdpdGggMSB4IEFNRCBBTTI5TFYwNjUgKDggTUIpCiAgb3IgMSB4IEFNMjlMVjY1MiAodHdvIExWMDY1IGluIG9uZSBjaGlwID0gMTYgTUIpOwogIFJ1biBJUEIgYXQgMTMzIE1oejsgYWRqdXN0IHRoZSBNSUkgY2xvY2sgZnJlcXVlbmN5IGFjY29yZGluZ2x5CgoqIFNldCBCUkdfQ0xLIG9uIFBNODI1LzgyNiB0byA2NE1IeiAoVkNPX09VVCAvIDQsIGluc3RlYWQgb2YgMTYJIE1IeikKICB0byBhbGxvdyBmb3IgbW9yZSBhY2N1cmF0ZSBiYXVkcmF0ZSBzZXR0aW5ncwogIChlcnJvciBub3cgMC43JSBhdCAxMTUga2JwcywgaW5zdGVhZCBvZiAzLjUlIGJlZm9yZSkKCiogUGF0Y2ggYnkgQW5kcmVhcyBNb2hyLCA0IFNlcCAyMDAzOgogIEZpeCBhIGxvdCBvZiBzcGVsbGluZyBlcnJvcnMKCiogQWRkIHN1cHBvcnQgZm9yIFBQQ2hhbWVsZW9uIEV2YWwgQm9hcmQKCiogQWRkIHN1cHBvcnQgZm9yIFAzRzQgYm9hcmQKCiogRml4IHByb2JsZW0gd2l0aCBNR1Q1MTAwIEZFQyBkcml2ZXI6IGFkZCAiZWFybHkiIE1BQyBhZGRyZXNzCiAgaW5pdGlhbGl6YXRpb24KCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgNyBBdWcgMjAwMzoKICBjaGVjayBCQ1NSIHRvIGRldGVjdCBpZiB0aGUgYm9hcmQgaXMgY29uZmlndXJlZCBpbiBQQ0kgbW9kZQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC40Ljc6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogUGF0Y2ggYnkgUmFnaHUgS3Jpc2huYXByYXNhZCwgNyBBdWcgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgQWRkZXIgSUkgTVBDODUyVCBtb2R1bGUKCiogUGF0Y2ggYnkgR2VvcmdlIEcuIERhdmlzLCAxOSBBdWcgMjAwMzoKICBmaXggVEkgSW5ub3ZhdG9yL09NQVAxNTEwIHBpbiBjb25maWdzCgoqIFBhdGNoZXMgYnkgS3NoaXRpaiwgMTggQXVnIDIwMDMKICAtIGFkZCBzdXBwb3J0IGZvciBhcm05MjZlanMgY3B1IGNvcmUKICAtIGFkZCBzdXBwb3J0IGZvciBUSSBPTUFQIDE2MTAgSW5ub3ZhdG9yIEJvYXJkCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDE0IEF1ZyAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciBiemlwMiB1bmNvbXByZXNzaW9uCgoqIEFkZCBHQ0MgbGlicmFyeSB0byBleGFtcGxlcy9NYWtlZmlsZSBzbyBHQ0MgdXRpbGl0eSBmdW5jdGlvbnMgd2lsbAogIGJlIHJlc29sdmVkLCB0b28KCiogQWRkIEkyQyBhbmQgUlRDIHN1cHBvcnQgZm9yIFJNVSBib2FyZCB1c2luZyBzb2Z0d2FyZSBJMkMgZHJpdmVyCiAgKGJlY2F1c2Ugb2YgYmV0dGVyIHJlc3BvbnNlIHRvIGlwcm9iZSBjb21tYW5kKTsgZml4IHByb2JsZW0gd2l0aAogICJyZXNldCIgY29tbWFuZAoKKiBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgMjggQXVnIDIwMDM6CiAgQWRkZWQgQ09ORklHX0JPT1RQX0ROUzIgYW5kIENPTkZJR19CT09UUF9TRU5EX0hPU1ROQU1FIHRvCiAgQ09ORklHX0JPT1RQX01BS1MgKHNlZSBSRUFETUUpLgoKKiBGaXggSUNVODYyIGVudmlyb25tZW50IHByb2JsZW0KCiogRml4IFJBTSBzaXplIGRldGVjdGlvbiBmb3IgUk1VIGJvYXJkCgoqIEltcGxlbWVudCAicmVzZXQiIGZvciBNR1Q1MTAwL01QQzUyMDAgc3lzdGVtcwoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC40LjY6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogTWFrZSBFdGhlcm5ldCBhdXRvbmVnb3RpYXRpb24gb24gSU5DQS1JUCB3b3JrIGZvciBhbGwgY2xvY2sgcmF0ZXM7CiAgYWxsb3cgc2VsZWN0aW9uIG9mIGNsb2NrIGZyZXF1ZW5jeSBhcyAibWFrZSIgdGFyZ2V0CgoqIEltcGxlbWVudCBtZW1vcnkgYXV0b3NpemluZyBjb2RlIGZvciBJY2VDdWJlIGJvYXJkcwoKKiBDb25maWd1cmUgbmV0d29yayBwb3J0IG9uIElOQ0EtSVAgZm9yIGF1dG9uZWdvdGlhdGlvbgoKKiBGaXggb3ZlcmZsb3cgcHJvYmxlbSBpbiBuZXR3b3JrIHRpbWVvdXQgY29kZQoKKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCA4IEF1ZyAyMDAzOgogIEFsbG93IGNyYzMyIHRvIGJlIHVzZWQgYXQgYWRkcmVzcyAweDAwMCAoY3JjMzJfbm9fY29tcCwgdG9vKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC41Ogo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIFVwZGF0ZSBmb3IgVFFNIGJvYXJkIGRlZmF1bHRzOgogIGRpc2FibGUgY2xvY2tzX2luX21oeiwgZW5hYmxlIGJvb3QgY291bnQgbGltaXQKCiogUmVtb3ZlZCB0b29scy9nZGIgZnJvbSAibWFrZSBhbGwiIHRhcmdldC4gIEFkZGVkIG1ha2UgdGFyZ2V0ICJnZGJ0b29scyIKICBpbiB0b3BsZXZlbCBkaXJlY3RvcnkgaW5zdGVhZC4gIFJlbW92ZWQgYXN0ZXN0LmMgZnJvbSB0b29scy9nZGIgYmVjYXVzZQogIGl0IGlzIG5vIGxvbmdlciByZWxldmFudC4KCiogRml4IFBDSSBzdXBwb3J0IGZvciBNUEM1MjAwIC8gSWNlQ3ViZSBCb2FyZAoKKiBNYXAgSVNQMTM2MiBVU0IgT1RHIGNvbnRyb2xsZXIgZm9yIE5TQ1UgYm9hcmQKCiogUGF0Y2ggYnkgQnJhZCBQYXJrZXIsIDAyIEF1ZyAyMDAzOgogIGZpeCBzYzUyMF9jZHAgcHJvYmxlbXMKCiogSW1wbGVtZW50IEJvb3QgQ3ljbGUgRGV0ZWN0aW9uIChSZXEuIDIuMyBvZiBPU0RMIENHTCBSZXFpcmVtZW50cykKCiogQWxsb3cgZXJhc2UgY29tbWFuZCB0byBjcm9zcyBmbGFzaCBiYW5rIGJvdW5kYXJpZXMKCiogUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAyMSBKdWwgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgTHludXhXb3JrcyBLZXJuZWwgRG93bmxvYWRhYmxlIEltYWdlcyAoS0RJcykuCiAgQm90aCBMeW54T1MgYW5kIEJsdWVDYXQgbGludXggS0RJcyBhcmUgc3VwcG9ydGVkLgoKKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCAyNSBKdWwgMjAwMzoKICB1c2UgbW9yZSByZWxpYWJsZSByZXNldCBmb3IgT01BUC85MjVUCgoqIFBhdGNoIGJ5IE55ZSBMaXUsIDI1IEp1bCAyMDAzOgogIGZpeCB0eXBvIGluIG1wYzh4eC5oCgoqIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDI0IEp1bCAyMDAzOgogIEZpeGVzIGZvciBjbWRfbmFuZC5jOgogIC0gRml4ZWQgbnVsbCBkZXJlZmVyZWNlIHdoaWNoIGNvdWxkIHJlc3VsdCBpbiBpbmNvcnJlY3QgRUNDIHZhbHVlcy4KICAtIEFkZGVkIHN1cHBvcnQgZm9yIGRldmljZXMgd2l0aCBubyBSZWFkeS9CdXN5IHNpZ25hbCBob29rZWQgdXAuCiAgLSBBZGRlZCBPTUFQMTUxMCByZWFkL3dyaXRlIHByb3RlY3QgaGFuZGxpbmcuCiAgLSBGaXhlZCBuYW5kLmgncyBFQ0NQT1MuIEEgY29uZmxpY3QgZXhpc3RlZCB3aXRoIFBPUzUgYW5kIGJhZGJsb2NrCiAgICBmb3Igbm9uLUpGRlMyLgogIC0gU3dpdGNoZWQgZGVmYXVsdCBFQ0MgdG8gYmUgSkZGUzIuCgoqIEFsbG93IGNyYzMyIHRvIGJlIHVzZWQgYXQgYWRkcmVzcyAweDAwMAoKKiBQcm92aWRlIGNvbnNpc3RlbnQgaW50ZXJmYWNlIHRvIHN0YW5kYWxvbmUgYXBwbGljYXRpb25zIHRvIGFjY2VzcwogIHRoZSAnZ2xvYmFsX2RhdGEnIHN0cnVjdHVyZQogIFByb3ZpZGUgYSBkb2MvUkVBRE1FLnN0YW5kYWxvbmUgbW9yZSB1c2VmdWwgdG8gdXNlcnMvZGV2ZWxvcGVycy4KCiogTWFrZSBJY2VDdWJlIE1HVDUxMDAgRkVDIGRyaXZlciB3b3JrCgoqIEltcGxlbWVudCBuZXcgbWVjaGFuaXNtIHRvIGV4cG9ydCBVLUJvb3QncyBmdW5jdGlvbnMgdG8gc3RhbmRhbG9uZQogIGFwcGxpY2F0aW9uczogaW5zdGVhZCBvZiB1c2luZyAoUFBDLXNwZWNpZmljKSBzeXN0ZW0gY2FsbHMgd2Ugbm93CiAgdXNlIGEganVtcCB0YWJsZTsgcGxlYXNlIHNlZSBkb2MvUkVBRE1FLnN0YW5kYWxvbmUgZm9yIGRldGFpbHMKCiogUGF0Y2ggYnkgRGF2ZSBXZXN0d29vZCwgMjQgSnVsIDIwMDM6CiAgYWRkZWQgc3VwcG9ydCBmb3IgVW5pdHkgT1MgKGEgcHJvcHJpZXRhcnkgT1MpCgoqIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDIzIEp1bCAyMDAzOgogIGFkZCAiaW1scyIgY29tbWFuZCB0byBwcmludCBmbGFzaCB0YWJsZSBvZiBjb250ZW50cwoKKiBGaXggY29sZCBib290IGRldGVjdGlvbiBmb3IgbG9nIGJ1ZmZlciByZXNldAoKKiBSZXR1cm4gZXJyb3IgZm9yIGludmFsaWQgbGVuZ3RoIHNwZWNpZmllcnMgd2l0aCAiY3AuWCIgZXRjLgoKKiBGaXggc3RhcnR1cCBwcm9ibGVtIG9uIE1JUFMKCiogQWxsb3cgZm9yIENPTkZJR19TUExBU0hfU0NSRUVOIGV2ZW4gd2hlbiBubyBleHBsaWNpdAogIGJpdG1hcCBzdXBwb3J0IGlzIGNvbmZpZ3VyZWQKCiogUGF0Y2ggYnkgQmlsbCBIYXJnZW4sIDE4IEp1bCAyMDAzOgogIC0gZml4IGVuZGluYW5lc3MgcHJvYmxlbSBpbiBjcHUvbXBjODI0eC9kcml2ZXJzL2kyYy9pMmMxLmMKCiogUGF0Y2ggYnkgRGVuaXMgUGV0ZXIsIDE4IEp1bCAyMDAzOgogIC0gZml4IG1lbW9yeSBjb25maWd1cmF0aW9uIGZvciBNSVA0MDVUCiAgLSBmaXggcHJpbnRvdXQgb2YgYmF1ZHJhdGUgZm9yICJsb2FkYiA8bG9hZGFkZHI+IDxiYXVkcmF0ZT4iCgoqIENsZWFudXAgb2YgVFFNODJ4eCBjb25maWd1cmF0aW9uczsgdXNlICJvZmZpY2lhbCIgYm9hcmQgdHlwZXMKICB0byBtYWtlIHNlbGVjdGlvbiBlYXNpZXIuCgoqIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDE3IEp1bCAyMDAzOgogIGFkZCBkZWxheSB0byBnZXQgSTJDIHdvcmtpbmcgd2l0aCAiaW1tIiBjb21tYW5kIGFuZCBzM2MyNHgwX2kyYy5jCgoqIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDE3IEp1bHkgMDM6CiAgLSBGaXhlZCBidWcgaW4gT01BUDE1MTAgYmF1ZCByYXRlIGRpdmlzb3Igc2V0dGluZ3MuCgoqIFBhdGNoIGJ5IE55ZSBMaXUsIDE2IEp1bHkgMjAwMzoKICBNUEM4NjBGQURTIGZpeGVzOgogIC0gYWRkIE1QQzg2eEFEUyBzdXBwb3J0ICh1c2VzIE1QQzg2eEFEUy5oKQogIC0gYWRkIDg2NlAvVCBjb3JlIHN1cHBvcnQgKGFsc28gTVBDODU5VC9NUEM4NTlEU0wvTVBDODUyVCkKICAgIG8gUExQUkNSIGNoYW5nZXMKICAgIG8gQlJHIGNoYW5nZXMgKEVYVEFML1hUQUwgcmVzdHJpY3RlZCB0byAxME1IeikKICAgIG8gZG9uJ3QgdHJ1c3QgZ2NsaygpIHNvZnR3YXJlIG1lYXN1cmVtZW50IGJ5IGRlZmF1bHQsIGRlcGVuZCBvbgogICAgICBDT05GSUdfOHh4X0dDTEtfRlJFUQogIC0gYWRkIERSQU0gU0lNTSBub3QgaW5zdGFsbGVkIGRldGVjdGlvbgogIC0gdXNlIG1vcmUgImNvcnJlY3QiIFNEUkFNIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlCiAgLSBhbGxvdyBkaWZmZXJlbnQgU0RSQU0gc2l6ZXMgKDh4eEFEUyBoYXMgOE0pCiAgLSBkZWZhdWx0IERFUiBpcyAwCiAgLSByZW1vdmUgdW51c2VkIE1BTVIgZGVmaW5lcyBmcm9tIEZBRFM4NjBULmggKGFsbCBkb25lIGluIGZhZHMuYykKICAtIHJlbmFtZSBNQU1SL01CTVIgZGVmaW5lcyB0byBiZSBtb3JlIGNvbnNpc3RlbnQuIFNob3VsZCBldmVudHVhbGx5CiAgICBiZSBtZXJnZWQgaW50byBNeE1SIHRvIGJldHRlciByZWZsZWN0IHRoZSBQb3dlclFVSUNDIGRhdGFzaGVldC4KCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMTYgSnVsIDIwMDM6CiAgc3VwcG9ydCBuZXcgTW90b3JvbGEgUFEyRkFEUy1aVSBldmFsdWF0aW9uIGJvYXJkIHdoaWNoIHJlcGxhY2VkCiAgTVBDODI2MEFEUyBhbmQgTVBDODI2NkFEUwoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC40LjQ6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogQWRkIHN1cHBvcnQgZm9yIEljZUN1YmUgYm9hcmQgKHdpdGggTUdUNTEwMCBhbmQgTVBDNTIwMCBDUFVzKQoKKiBBZGQgc3VwcG9ydCBmb3IgTUdUNTEwMCBhbmQgTVBDNTIwMCBwcm9jZXNzb3JzCgoqIFBhdGNoIGJ5IEx1dHogRGVubmlnLCAxNSBKdWwgMjAwMzoKICB1cGRhdGUgZm9yIFIzNjBNUEkgYm9hcmQKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC4zOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIFBhdGNoZXMgYnkgS3NoaXRpaiwgMDQgSnVsIDIwMDMKICAtIGFkZGVkIHN1cHBvcnQgZm9yIGFybTkyNXQgY3B1IGNvcmUKICAtIGFkZGVkIHN1cHBvcnQgZm9yIFRJIE9NQVAgMTUxMCBJbm5vdmF0b3IgQm9hcmQKCiogUGF0Y2hlcyBieSBNYXJ0aW4gS3JhdXNlLCAxNCBKdWwgMjAwMzoKICAtIGFkZCBJMkMgc3VwcG9ydCBmb3IgczNjMjQwMCBzeXN0ZW1zICh0cmFiIGJvYXJkKQogIC0gKHJlLSkgYWRkICJwaW5nIiB0byBjb21tYW5kIHRhYmxlCgoqIEZpeCBoYW5kbGluZyBvZiAic2xvdyIgUE9TVCByb3V0aW5lcwoKKiBQYXRjaGVzIGJ5IFl1bGkgQmFyY29oZW4sIDEzIEp1bCAyMDAzOgogIC0gQ29ycmVjdCBmbGFzaCBhbmQgSkZGUzIgc3VwcG9ydCBmb3IgTVBDODI2MEFEUwogIC0gZml4IFBWUiB2YWx1ZXMgYW5kIGNsb2NrIGdlbmVyYXRpb24gZm9yIFBvd2VyUVVJQ0MgSUkgZmFtaWx5CiAgICAoODI3MC84Mjc1LzgyODApCgoqIFBhdGNoIGJ5IEJlcm5oYXJkIEt1aG4sIDA4IEp1bCAyMDAzOgogIC0gYWRkIHN1cHBvcnQgZm9yIE02OEsgdGFyZ2V0cwoKKiBQYXRjaCBieSBLZW4gQ2hvdSwgMyBKdWw6CiAgLSBGaXggUENJIGNvbmZpZyB0YWJsZSBmb3IgQTMwMDAKICAtIEZpeCBpb2Jhc2UgZm9yIG5hdHNlbWkuYwogICAgKFBDSV9CQVNFX0FERFJFU1NfMCBpcyB0aGUgSU8gYmFzZSByZWdpc3RlciBmb3IgRFA4MzgxNSkKCiogQWxsb3cgdG8gZW5hYmxlICJzbG93IiBQT1NUIHJvdXRpbmVzIGJ5IGtleSBwcmVzcyBvbiBwb3dlci1vbgoqIEZpeCB0ZW1wZXJhdHVyZSBkZXBlbmRlbmQgc3dpdGNoaW5nIG9mIExDRCBiYWNrbGlnaHQgb24gTFdNT04KKiBUd2VhayBvdXRwdXQgZm9ybWF0IGZvciBMV01PTgoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDExIEp1bCAyMDAzOgogIC0gRml4IGJ1ZyBpbiBDT05GSUdfVkVSU0lPTl9WQVJJQUJMRS4KICAtIEFSNDA1IGNvbmZpZyB1cGRhdGVkLgogIC0gT0NSVEMvT1JTRzogYnNwIGNvbW1hbmQgYWRkZWQuCiAgLSBBU0g0MDUgYnNwIHVwZGF0ZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC4yOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIEFkZCBzdXBwb3J0IGZvciBOU0NVIGJvYXJkCgoqIEFkZCBzdXBwb3J0IGZvciBUUU04MjNNLCBUUU04NTBNLCBUUU04NTVNIGFuZCBUUU04NjBNIG1vZHVsZXMKCiogQWRkIHN1cHBvcnQgZm9yIEFtMjlMVjE2ME1MLCBBbTI5TFYzMjBNTCwgYW5kIEFtMjlMVjY0ME1MCiAgbWlycm9yIGJpdCBmbGFzaCBvbiBUUU04eHhNIG1vZHVsZXMKCiogUGF0Y2ggYnkgS2VubmV0aCBKb2hhbnNzb24sIDMwIEp1biAyMDAzOgogIGdldCByaWQgb2YgTUtfQ01EX0VOVFJZIG1hY3JvOyB1cGRhdGUgZG9jL1JFQURNRS5jb21tYW5kCgoqIFBhdGNoIGJ5IFNlYiBKYW1lcywgMzAgSnVuIDIwMDM6CiAgSW1wcm92ZSBkb2N1bWVudGF0aW9uIG9mIEkyQyBjb25maWd1cmF0aW9uIGluIFJFQURNRQoKKiBGaXggcHJvYmxlbXMgd2l0aCBwcmV2aW91cyBsb2cgYnVmZmVyICJmaXhlcyIKCiogRml4IG1pbm9yIGhlbHAgdGV4dCBpc3N1ZXMKCiogImxvZyBhcHBlbmQiIGRpZCBub3QgYXBwZW5kIGEgbmV3bGluZQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC40LjE6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogRml4IHNvbWUgbWlzc2luZyBjb21tYW5kcywgY2xlYW51cCBoZWFkZXIgZmlsZXMKICAoYXV0b3NjcmlwdCwgYm1wLCBic3AsIGZhdCwgbW1jLCBuYW5kLCBwb3J0aW8sIC4uLikKCiogUmV3cml0ZSBjb21tYW5kIGxvb2t1cCBhbmQgaGVscCBjb21tYW5kIChmaXggcHJvYmxlbXMgd2l0aCBidWJibGUKICBzb3J0IHdoZW4gc29ydGluZyBjb21tYW5kIG5hbWUgbGlzdCkuIE1pbm9yIGNsZWFudXAgaGVyZSBhbmQgdGhlcmUuCgoqIE1lcmdlIGZyb20gInN0YWJsZSBicmFuY2giLCB0YWcgTEFCRUxfMjAwM18wNl8yOF8xODAwLXN0YWJsZToKICAtIEFsbG93IHRvIGNhbGwgc3lzbW9uIGZ1bmN0aW9uIGludGVyYWN0aXZlbHkKICAtIFBJQyBvbiBMV01PTiBib2FyZCBuZWVkcyBkZWxheSBhZnRlciBwb3dlci1vbgogIC0gQWRkIG1pc3NpbmcgUlNSIGRlZmluaXRpb25zIGZvciBNUEM4eHgKICAtIEltcHJvdmUgbG9nIGJ1ZmZlciBoYW5kbGluZzogZ3VhcmFudGVlIGNsZWFuIHJlc2V0IGFmdGVyIHBvd2VyLW9uCiAgLSBBZGQgc3VwcG9ydCBmb3IgRVhCSVRHRU4gYm9hcmQgKGFrYSAiZ2VuaWUiKQogIC0gQWRkIHN1cHBvcnQgZm9yIFNMODI0NSBib2FyZAoKKiBDb2RlIGNsZWFudXA6CiAgLSByZW1vdmUgdHJhaWxpbmcgd2hpdGUgc3BhY2UsIHRyYWlsaW5nIGVtcHR5IGxpbmVzLCBDKysgY29tbWVudHMsIGV0Yy4KICAtIHNwbGl0IGNtZF9ib290LmMgKHNlcGFyYXRlIGNtZF9iZGluZm8uYyBhbmQgY21kX2xvYWQuYykKCiogUGF0Y2hlcyBieSBLZW5uZXRoIEpvaGFuc3NvbiwgMjUgSnVuIDIwMDM6CiAgLSBtYWpvciByZXdvcmsgb2YgY29tbWFuZCBzdHJ1Y3R1cmUKICAgICh3b3JrIGRvbmUgbW9zdGx5IGJ5IE1pY2hhbCBDZW5kcm93c2tpIGFuZCBKb2FraW0gS3Jpc3RpYW5zZW4pCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjQuMDoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBQYXRjaGVzIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMjYgSnVuIDIwMDM6CiAgLSBjc2IyMjYgY29uZmlndXJhdGlvbiB1cGRhdGVkCiAgLSBjcmVkaXRzIGZvciBsb2dvZGwgcG9ydCB1cGRhdGVkCiAgLSBpbm5va29tIGNvbmZpZ3VyYXRpb24gdXBkYXRlZAogIC0gbG9nb2RsIHRyZWUgdXBkYXRlLCBzdGlsbCB3aXRoIGNvZGluZyBzdHlsZSBpbmNvbnNpc3RlbmNpZXMKICAtIGFkZGVkIE9DTSBmb3IgcHBjNDA1IHdhcm5pbmcgdG8gUkVBRE1FCgoqIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAyNSBKdW4gMjAwMzoKICB1cGRhdGUgTmV0VmlhIHdpdGggVjIgYm9hcmQgc3VwcG9ydAoKKiBIZWFkZXIgZmlsZSBjbGVhbnVwIGZvciBBUk0KCiogUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMjQgSnVuIDIwMDM6CiAgLSBtYWtlIHN1cmUgdG8gdXNlIG9ubHkgVS1ib290IHByb3ZpZGVkIGhlYWRlciBmaWxlcwogIC0gZml4IHByb2JsZW1zIHdpdGggIi5yb2RhdGEuc3RyMS40IiBzZWN0aW9uIGFzIHVzZWQgYnkgR0NDLTMueAoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDI0IEp1biAyMDAzOgogIC0gVXBkYXRlIGVzZCBBU0g0MDUgYm9hcmQgZmlsZXMuCiAgLSBVcGRhdGUgZXNkIERBU0FfU0lNIGNvbmZpZyBmaWxlLgogIC0gQWRkIHBpbmcgY29tbWFuZCB0byBzb21lIGVzZCBib2FyZHMuCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDIzIEp1biAyMDAzOgogIFVwZGF0ZSBmb3IgTVBDODI2MEFEUyBib2FyZAoKKiBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAyMyBKdW4gMjAwMzoKICAtIGNsZWFudXAgb2YgR0NDIDMueCBjb21waWxlciB3YXJuaW5ncwoKKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgNCBKdW4gMjAwMzoKICBhZGQgbGFyZ2UgbWVtb3J5IHN1cHBvcnQgZm9yIE1QQzgyNjZBRFMgYm9hcmQKCiogUGF0Y2ggYnkgUmljaGFyZCBXb29kcnVmZiwgMTkgSnVuZSAwMzoKICAtIEVuYWJsZWQgc3RhbmRhcmQgdS1ib290IGRldmljZSBhYnN0cmFjdGlvbiBmb3IgQVJNCiAgLSBFbmFibGVkIGNvbnNvbGUgZGV2aWNlIGZvciBBUk0KICAtIEluaXRpbGl6ZWQgYmlfYmF1ZHJhdGUgZm9yIEFSTQoKKiBQYXRjaCBieSBCaWxsIEhhcmdlbiwgMjMgQXByIDIwMDM6CiAgZml4IGJ5dGUgb3JkZXIgZm9yIDgyNHggSTJDIGFkZHJlc3NlcyAod3JpdGUgb3ApCgoqIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDIwIEp1biAyMDAzOgogIC0gaHltb2QgdXBkYXRlCiAgLSBjbGVhbnVwIChlc3BlY2lhbGx5IGZvciBnY2MtMy54IGNvbXBpbGVycykKCiogUGF0Y2ggYnkgVG9tIEd1aWxsaWFtcywgMjAgSnVuIDIwMDM6CiAgYWRkZWQgQ09ORklHXzc1MEZYIHN1cHBvcnQgZm9yIElCTSA3NTBGWCBwcm9jZXNzb3JzCgoqIFBhdGNoIGJ5IERldmluIENydW1iLCAwMiBBcHIgMjAwMzoKICBGaXggY2xvY2sgZGl2aWRlciByb3VuZGluZyBwcm9ibGVtIGluIGRyaXZlcnMvc2VyaWFsLmMKCiogUGF0Y2ggYnkgUmljaGFyZCBXb29kcnVmZiwgMTkgSnVuZSAwMzoKICAtIEZpeGVkIHNtYzkxYzExMSBkcml2ZXIgdG8gc3luYyB3aXRoIHRoZSB1LWJvb3QgZW52aXJvbm1lbnQKICAgIChkcml2ZXIvc21jOTFjMTExLmMpLgogIC0gQWRkZWQgZXRoX2luaXQgZXJyb3IgcmV0dXJuIGNoZWNrIGluIE5ldExvb3AgKG5ldC9uZXQuYykuCgoqIFBhdGNoIGJ5IEtlbiBDaG91LCAxOSBKdW5lIDIwMDM6CiAgQWRkZWQgc3VwcG9ydCBmb3IgQTMwMDAgU0JDIGJvYXJkIChBcnRpcyBNaWNyb3N5c3RlbXMgSW5jLikKCiogUGF0Y2hlcyBieSBNdXJyYXkgSmVuc2VuLCAxNyBKdW4gMjAwMzoKICAtIEh5bW9kIGJvYXJkIGRhdGFiYXNlIG1vZHM6IGFkZCAid2hvIiBmaWVsZCBhbmQgbmV3IHhpbGlueCBjaGlwIHR5cGVzCiAgLSBwcm92aWRlIG5ldyAiaW5pdF9jbWRfdGltZW91dCgpIiBmdW5jdGlvbiBzbyBjb2RlIGV4dGVybmFsIHRvCiAgICAiY29tbW9uL21haW4uYyIgY2FuIHVzZSB0aGUgInJlc2V0X2NtZF90aW1lb3V0KCkiIGZ1bmN0aW9uIGJlZm9yZQogICAgZW50ZXJpbmcgdGhlIG1haW4gbG9vcAogIC0gYWRkIERUVCBzdXBwb3J0IGZvciBhZG0xMDIxIChuZXcgZmlsZSBkdHQvYWRtMTAyMS5jOyBjb25maWcKICAgIHNsaWdodGx5IGRpZmZlcmVudC4gc2VlIGluY2x1ZGUvY29uZmlncy9oeW1vZC5oIGZvciBhbiBleGFtcGxlCiAgICAocmVxdWlyZXMgQ09ORklHX0RUVF9BRE0xMDIxLCBDT05GSUdfRFRUX1NFTlNPUlMsIGFuZAogICAgQ0ZHX0RUVF9BRE0xMDIxIGRlZmluZWQpCiAgLSBhZGQgbmV3ICJlZXByb21fcHJvYmUoKSIgZnVuY3Rpb24gd2hpY2ggaGFzIHNpbWlsYXIgYXJncyBhbmQKICAgIGJlaGF2ZXMgaW4gYSBzaW1pbGFyIHdheSB0byAiZWVwcm9tX3JlYWQoKSIgZXRjLgogIC0gYWRkIDgyNjAgRkNDIGV0aGVybmV0IGxvb3BiYWNrIGNvZGUgKG5ldyAiZXRoX2xvb3BiYWNrX3Rlc3QoKSIKICAgIGZ1bmN0aW9uIHdoaWNoIGlzIGVuYWJsZWQgYnkgZGVmaW5pbmcgQ09ORklHX0VUSEVSX0xPT1BCQUNLX1RFU1QpCiAgLSBnZGJ0b29scyBjb3B5cmlnaHQgdXBkYXRlCiAgLSBlbnN1cmUgdGhhdCBzZXRfbXNyKCkgZXhlY3V0ZXMgdGhlICJzeW5jIiBhbmQgImlzeW5jIiBpbnN0cnVjdGlvbnMKICAgIGFmdGVyIHRoZSAibXRtc3IiIGluc3RydWN0aW9uIGluIGNwdS9tcGM4MjYwL2ludGVycnVwdHMuYwogIC0gODI2MCBJL08gcG9ydHMgZml4OiBPcGVuIERyYWluIHNob3VsZCBiZSBzZXQgbGFzdCB3aGVuIGNvbmZpZ3VyaW5nCiAgLSBhZGQgU0lVIElSUSBkZWZpbmVzIGZvciA4MjYwCiAgLSBhbGxvdyBMRFNDUklQVCBvdmVycmlkZSBhbmQgT0JKQ0ZMQUdTIGluaXRpYWxpemF0aW9uOiBjaGFuZ2UgdG8KICAgIGNvbmZpZy5tayB0byBhbGxvdyBib2FyZCBjb25maWd1cmF0aW9ucyB0byBvdmVycmlkZSB0aGUgR05VCiAgICBsaW5rZXIgc2NyaXB0LCBzZWxlY3RlZCB2aWEgdGhlIExEU0NSSVBULCBtYWtlIHZhcmlhYmxlLCBhbmQgdG8KICAgIGdpdmUgYW4gaW5pdGlhbCB2YWx1ZSB0byB0aGUgT0JKQ0ZMQUdTIG1ha2UgdmFyaWFibGUKICAtIDgyNjAgaTJjIGVuaGFuY2VtZW50OgogICAgbyBjb3JyZWN0bHkgZXh0ZW5kcyB0aGUgdGltZW91dCBkZXBlbmRpbmcgb24gdGhlIHNpemUgb2YgYWxsCiAgICAgIHF1ZXVlZCBtZXNzYWdlcyBmb3IgYm90aCB0cmFuc21pdCBhbmQgcmVjZWl2ZQogICAgbyB3aWxsIG5vdCBjb250aW51ZSB3aXRoIHJlY2VpdmUgaWYgdHJhbnNtaXQgdGltZXMgb3V0CiAgICBvIGVuc3VyZXMgdGhhdCB0aGUgZXJyb3IgY2FsbGJhY2sgaXMgZG9uZSBmb3IgYWxsIHF1ZXVlZCB0eAogICAgICBhbmQgcnggbWVzc2FnZXMKICAgIG8gY29ycmVjdGx5IGRldGVjdHMgYm90aCB0eCBhbmQgcnggdGltZW91dHMsIG9ubHkgZGVsaXZlcnMgb25lIHRvCiAgICAgIHRoZSBjYWxsYmFjaywgYW5kIGRvZXMgbm90IG92ZXJ3cml0ZSBhbiBlYXJsaWVyIGVycm9yCiAgICBvIGxvZ2ljIGluIGkyY19wcm9iZSBub3cgY29ycmVjdAogIC0gYWRkICJ2cHJpbnRmKCkiIGZ1bmN0aW9uIHNvIHRoYXQgInBhbmljKCkiIGZ1bmN0aW9uIGNhbiBiZQogICAgdGVjaG5pY2FsbHkgY29ycmVjdAogIC0gbWFueSBIeW1vZCBib2FyZCBjaGFuZ2VzCgoqIFBhdGNoZXMgYnkgUm9iZXJ0IFNjaHdlYmVsLCAxNCBKdW4gMjAwMzoKICAtIGFkZCBzdXBwb3J0IGZvciBMb2dvdHJvbmljIERMIGRhdGFsb2dnZXIgYm9hcmQKICAtIGNsZWFudXAgc2VyaWFsIGxpbmUgYWZ0ZXIga2VybWl0IGJpbmFyeSBkb3dubG9hZAogIC0gYWRkIGRlYnVnWCBtYWNybyAoZGVidWcgbGV2ZWwgc3VwcG9ydCkKICAtIHVwZGF0ZSBtYWNoLXR5cGVzLmggdG8gbGF0ZXN0IGFybS5saW51eC5vcmcudWsgbWFzdGVyIGxpc3QuCgoqIFBhdGNoZXMgYnkgRGF2aWQgTfxsbGVyLCAxMiBKdW4gMjAwMzoKICAtIHJld3JpdGUgb2YgdGhlIFMzQzI0WDAgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgc3R1ZmYKICAtICJkcml2ZXIiIGZvciB0aGUgYnVpbHQtaW4gUzNDMjRYMCBSVEMKCiogUGF0Y2hlcyBieSBZdWxpIEJhcmNvaGVuLCAxMiBKdW4gMjAwMzoKICAtIEFkZCBNSUkgc3VwcG9ydCBhbmQgRXRoZXJuZXQgUEhZIGluaXRpYWxpemF0aW9uIGZvciBNUEM4MjYwQURTIGJvYXJkCiAgLSBGaXggaW5jb3JyZWN0IFNJVU1DUiBpbml0aWFsaXNhdGlvbiBjYXVzZWQgYnkgd3JvbmcgSGFyZCBSZXNldAogICAgY29uZmlndXJhdGlvbiB3b3JkIHN1cHBsaWVkIGJ5IEZQR0Egb24gc29tZSBNUEM4MjYwQURTIGJvYXJkcwoKKiBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMTAgSnVuIDIwMDM6CiAgVW5pZnkgc3RhdHVzIExFRCBpbnRlcmZhY2UKCiogQWRkIHN1cHBvcnQgZm9yIERTMTI4ODcgUlRDOyBhZGQgUlRDIHN1cHBvcnQgZm9yIEFUQyBib2FyZAoKKiBQYXRjaCBieSBOaWNvbGFzIExhY3Jlc3Nvbm5pZXJlLCAxMSBKdW4gMjAwMzoKICBNb2RpZmljYXRpb25zIGZvciBBdG1lbCBBVDkxUk05MjAwREsgQVJNOTIwVCBiYXNlZCBkZXZlbG9wbWVudCBraXQKICAtIEFkZCBBdG1lbCBEYXRhRmxhc2ggc3VwcG9ydCBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4KICAtIEFkZCBwb3NzaWJpbGl0eSB0byBib290IGEgTGludXggZnJvbSBEYXRhRmxhc2ggd2l0aCBCT09UTSBjb21tYW5kLgogIC0gQWRkIEZsYXNoIGRldGVjdGlvbiBvbiBBdG1lbCBBVDkxUk05MjAwREsKICAgIChiZXR3ZWVuIEF0bWVsIEFUNDlCVjE2MTQgYW5kIEFUNDlCVjE2MTRBIGZsYXNoZXMpCiAgLSBSZXBsYWNlIG9sZCBFdGhlcm5ldCBQSFkgbGF5ZXIgZnVuY3Rpb25zCiAgLSBDaGFuZ2UgbGluayBhZGRyZXNzCgoqIFBhdGNoIGJ5IEZyYW5rIFNtaXRoLCA5IEp1biAyMDAzOgogIHVzZSBDUklUX0VYQ0VQVElPTiBmb3IgbWFjaGluZSBjaGVjayBvbiA0eHgKCiogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMTMgSnVuIDIwMDM6CiAgYWRkZWQgaW1wbGVtZW50YXRpb24gb2YgdGhlICJjYXJpbmZvIiBjb21tYW5kIGluIGNtZF9pbW1hcC5jCgoqIEZpeCBDT05GSUdfTkVUX01VTFRJIHN1cHBvcnQgaW4gaW5jbHVkZS9uZXQuaAoKKiBQYXRjaGVzIGJ5IEt5bGUgSGFycmlzLCAxMyBNYXIgMjAwMzoKICAtIEFkZCBGQVQgcGFydGl0aW9uIHN1cHBvcnQKICAtIEFkZCBjb21tYW5kIHN1cHBvcnQgZm9yIEZBVAogIC0gQWRkIGNvbW1hbmQgc3VwcG9ydCBmb3IgTU1DCiAgLS0tLQogIC0gQWRkIEludGVsIFBYQSBzdXBwb3J0IGZvciB2aWRlbwogIC0gQWRkIEludGVsIFBYQSBzdXBwb3J0IGZvciBNTUMKICAtLS0tCiAgLSBFbmFibGUgTU1DIGFuZCBGQVQgZm9yIGx1YmJvY2sgYm9hcmQKICAtIE90aGVyIG1pc2MgY2hhbmdlcyBmb3IgbHViYm9jayBib2FyZAoKKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIEFwcmlsIDAyLCAyMDAzOgogIGZpeCBmb3IgU01TQzkxMTExIGRyaXZlcgoKKiBQYXRjaCBieSBWbGFkaW1pciBHdXJldmljaCwgMDQgSnVuIDIwMDM6CiAgbWFrZSBwcGM0MDUgZXRoZXJuZXQgZHJpdmVyIGNvbXBhdGlibGUgd2l0aCBDT05GSUdfTkVUX01VTFRJIG9wdGlvbgoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA1IEp1biAyMDAzOgogIC0gUFBDNHh4OiBGaXggYnVnIGZvciBpbml0aWFsIHN0YWNrIGluIGRhdGEgY2FjaGUgYXMgcG9pbnRlZCBvdXQgYnkKICAgIFRob21hcyBTY2hhZWZlciAodHNjaGFlZmVyQGdpZ2Etc3RyZWFtLmRlKS4gTm93IGluaXRhbCBzdGFjayBpbgogICAgZGF0YSBjYWNoZSBjYW4gYmUgdXNlZCBldmVuIGlmIHRoZSBjaGlwIHNlbGVjdCBpcyBpbiB1c2UuCiAgLSBDRkdfUlhfRVRIX0JVRkZFUiBhZGRlZCB0byBzZXQgdGhlIGV0aGVybmV0IHJlY2VpdmUgYnVmZmVyIGNvdW50CiAgICAoc2VlIFJFQURNRSBmb3IgZnVydGhlciBkZXNjcmlwdGlvbikuCiAgLSBDaGFuZ2VkIGNvbmZpZyBmaWxlcyBvZiBDT05GSUdfRUVQUk8xMDAgYm9hcmRzIHRvIHVzZSB0aGUKICAgIENGR19SWF9FVEhfQlVGRkVSIGRlZmluZS4KCiogQWRkIHN1cHBvcnQgZm9yIFJNVSBib2FyZAoKKiBBZGQgc3VwcG9ydCBmb3IgVFFNODYyTCBhdCAxMDAvNTAgTUh6CgoqIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAwMiBKdW4gMjAwMzoKICBtYWpvciByZWNvbnN0cnVjdGlvbiBvZiBuZXR3b3JraW5nIGNvZGU7CiAgYWRkICJwaW5nIiBzdXBwb3J0IChvdXRnb2luZyBvbmx5ISkKCiogUGF0Y2ggYnkgRGVuaXMgUGV0ZXIsIDA0IEp1bmUgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgdGhlIE1JUDQwNVQgYm9hcmQKCiogUGF0Y2hlcyBieSBVZGkgRmlua2Vsc3RlaW4sIDIgSnVuZSAyMDAzOgogIC0gQWRkZWQgc3VwcG9ydCBmb3IgY3VzdG9tIGtleWJvYXJkcywgaW5pdGlhbGl6ZWQgYnkgZGVmaW5pbmcgYQogICAgYm9hcmQtc3BlY2lmaWMgZHJ2X2tleWJvYXJkX2luaXQgYXMgd2VsbCBhcyBkZWZpbmluZyBDT05GSUdfS0VZQk9BUkQgLgogIC0gQWRkZWQgc3VwcG9ydCBmb3IgdGhlIFJCQzgyMyBib2FyZC4KICAtIGNwdS9tcGM4eHgvbGNkLmMgbm93IGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlcyB0aGUKICAgIEhvcml6b250YWwgUGl4ZWwgQ291bnQgZmllbGQuCgoqIEZpeCBhbGlnbm1lbnQgcHJvYmxlbSBpbiBCT09UUCAoZGhjcF9sZWFzZXRpbWUgb3B0aW9uKQogIFtwb2ludGVkIG91dCBieSBOaWNvbGFzIExhY3Jlc3Nvbm5p6HJlLCAyIEp1biAyMDAzXQoKKiBQYXRjaCBieSBNYXJrIFJha2VzLCAxNCBNYXkgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgSW50ZWwgZTEwMDAgZ2lnIGNhcmRzLgoKKiBQYXRjaCBieSBOeWUgTGl1LCAzIEp1biAyMDAzOgogIGZpeCBjcml0aWNhbCB0eXBvIGluIE1BTVIgZGVmaW5pdGlvbiAoaW5jbHVkZS9tcGM4eHguaCkKCiogRml4IHJlcXVpcmVtZW50IHRvIGFsaWduIFUtQm9vdCBpbWFnZSBvbiAxNiBrQiBib3VuZGFyaWVzIG9uIFBQQy4KCiogUGF0Y2ggYnkgS2xhdXMgSGV5ZGVjaywgMiBKdW4gMjAwMwogIE1pbm9yIGNoYW5nZXMgZm9yIEtVUDRLIGNvbmZpZ3VyYXRpb24KCiogUGF0Y2ggYnkgTWFyYyBTaW5nZXIsIDI5IE1heSAyMDAzOgogIEZpeGVkIHJhcnAgYm9vdCBtZXRob2QgZm9yIElBMzIgYW5kIG90aGVyIGxpdHRsZS1lbmRpYW4gQ1BVcy4KCiogUGF0Y2ggYnkgTWFyYyBTaW5nZXIsIDI4IE1heSAyMDAzOgogIEFkZGVkIHBvcnQgSS9PIGNvbW1hbmRzLgoKKiBQYXRjaCBieSBNYXR0aGV3IE1jQ2xpbnRvY2ssIDI4IE1heSAyMDAzCiAgLSBjcHUvbXBjODI0eC9zdGFydC5TOiBmaXggcmVsb2NhdGlvbiBjb2RlIHdoZW4gYm9vdGluZyBmcm9tIFJBTQogIC0gbWlub3IgcGF0Y2hlcyBmb3IgdXR4ODI0NQoKKiBQYXRjaCBieSBEYW5pZWwgRW5nc3Ry9m0sIDI4IE1heSAyMDAzOgogIHg4NiB1cGRhdGUKCiogUGF0Y2ggYnkgRGF2ZSBFbGxpcywgOSBNYXkgMjAwMyArIDI3IE1heSAyMDAzOgogIGFkZCBuYW5kIGZsYXNoIHN1cHBvcnQgdG8gU1hOSTg1NVQgY29uZmlndXJhdGlvbgogIGZpeC9leHRlbmQgbmFuZCBmbGFzaCBzdXBwb3J0OgogIC0gZml4ICduYW5kIGVyYXNlJyBjb21tYW5kIHNvIGRvZXMgbm90IGVyYXNlIGJhZCBibG9ja3MKICAtIGZpeCAnbmFuZCB3cml0ZScgY29tbWFuZCBzbyBkb2VzIG5vdCB3cml0ZSB0byBiYWQgYmxvY2tzCiAgLSBmaXggbmFuZF9wcm9iZSgpIHNvIGhhbmRsZXMgbm8gZmxhc2ggZGV0ZWN0ZWQgcHJvcGVybHkKICAtIGFkZCBkb2MvUkVBRE1FLm5hbmQKICAtIGFkZCAuamZmczIgYW5kIC5vb2Igb3B0aW9ucyB0byBuYW5kIHJlYWQvd3JpdGUKICAtIGFkZCAnbmFuZCBiYWQnIGNvbW1hbmQgdG8gbGlzdCBiYWQgYmxvY2tzCiAgLSBhZGQgJ2NsZWFuJyBvcHRpb24gdG8gJ25hbmQgZXJhc2UnIHRvIHdyaXRlIEpGRlMyIGNsZWFuIG1hcmtlcnMKICAtIG1ha2UgTkFORCByZWFkL3dyaXRlIGZhc3RlcgoKKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgMjMgTWF5IDIwMDM6CiAgVXBkYXRlIGZvciBNUEM4MjY2QURTIGJvYXJkCgoqIEdldCAobW9zdGx5KSByaWQgb2YgQ0ZHX01PTklUT1JfTEVOIGRlZmluaXRpb247IGNvbXB1dGUgcmVhbCBsZW5ndGgKICBpbnN0ZWFkIENGR19NT05JVE9SX0xFTiBpcyBub3cgb25seSB1c2VkIHRvIGRldGVybWluZQkgX2F0X2NvbXBpbGVfCiAgX3RpbWVfICAoISkgaWYgdGhlIGVudmlyb25tZW50IGlzIGVtYmVkZGVkIHdpdGhpbiB0aGUgVS1Cb290IGltYWdlLAogIG9yIGluIGEgc2VwYXJhdGUgZmxhc2ggc2VjdG9yLgoKKiBDbGVhbnVwIENGR19ERVIgI2RlZmluZXMgaW4gY29uZmlnIGZpbGVzICh3ZCBtYWludGFpbmVkIG9ubHkpCgoqIEZpeCBkYXRhIGFib3J0IGV4Y2VwdGlvbiBoYW5kbGluZyBmb3IgYXJtOTIwdCBDUFUKCiogRml4IGFsaWdubWVudCBwcm9ibGVtcyB3aXRoIGZsYXNoIGRyaXZlciBmb3IgVFJBQiBib2FyZAoKKiBQYXRjaCBieSBEb25hbGQgV2hpdGUsIDIxIE1heSAyMDAzOgogIGZpeCBjYWxjdWxhdGlvbiBvZiBiYXNlIGFkZHJlc3MgaW4gcGNpX2hvc2VfY29uZmlnX2RldmljZSgpCgoqIEZpeCBidWcgaW4gY29tbWFuZCBsaW5lIHBhcnNpbmc6ICJjbWQxO2NtZDIiIGlzIHN1cHBvc2VkIHRvIGFsd2F5cwogIGV4ZWN1dGUgImNtZDIiLCBldmVuIGlmICJjbWQxIiBmYWlscy4gTm90ZSB0aGF0IHRoaXMgaXMgZGlmZmVyZW50CiAgdG8gInJ1biB2YXIxIHZhcjIiIHdoZXJlIHRoZSBjb250ZW50cyBvZiAidmFyMiIgd2lsbCBOT1QgYmUKICBleGVjdXRlZCB3aGVuIGEgY29tbWFuZCBpbiAidmFyMSIgZmFpbHMuCgoqIEFkZCB6ZXJvLWNvcHkgcmFtZGlzayBzdXBwb3J0IChyZXF1aXJlcyBjb3JyZXNwb25kaW5nIGtlcm5lbCBzdXBwb3J0ISkKCiogUGF0Y2ggYnkgS3lsZSBIYXJyaXMsIDIwIE1heSAyMDAzOgogIEluIHByZXBhcmF0aW9uIGZvciBhbiBpeHAgcG9ydCwgcmVuYW1lIGNwdS94c2NhbGUgYW5kIGFyY2gteHNjYWxlCiAgaW50byBjcHUvcHhhIGFuZCBhcmNoLXB4YS4KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyMyBNYXkgMjAwMzoKICAtIElCTSBQUEM0MDVFUCBwb3J0IGFkZGVkLgogIC0gQ09ORklHX1VBUlQxX0NPTlNPTEUgYWRkZWQuIElmIGRlZmluZWQgaW50ZXJuYWwgVUFSVDEgKGFuZCBub3QKICAgIFVBUlQwKSBpcyB1c2VkIGFzIGRlZmF1bHQgVS1Cb290IGNvbnNvbGUuIFBQQzR4eCBvbmx5IQogIC0gZXNkIEFTSDQwNSBib2FyZCBhZGRlZCAoUFBDNDA1RVAgYmFzZWQpLgogIC0gQlVCSU5HQTQwNUVQIGJvYXJkIGFkZGVkIChQUEM0MDVFUCBiYXNlZCAtIElCTSBFdmFsIEJvYXJkKS4KICAtIGVzZCBDUENJNDA1QUIgYm9hcmQgYWRkZWQuCiAgLSBlc2QgUE1DNDA1IGJvYXJkIGFkZGVkLgogIC0gVXBkYXRlIG9mIHNvbWUgZXNkIGJvYXJkcy4KCiogUGF0Y2ggYnkgRGVuaXMgUGV0ZXIsIDE5IE1haSAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciB0aGUgTUlQNDA1LTMgYm9hcmQKCiogUGF0Y2ggYnkgRGF2ZSBFbGxpcywgMjIgTWF5IDIwMDM6CiAgRml4IHByb2JsZW0gd2l0aCBvbmx5IHBhcnRpYWxseSBjbGVhcmVkIC5ic3Mgc2VnbWVudAoKKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgMTIgTWF5IDIwMDM6CiAgZ2V0IFBDSSB0byB3b3JrIG9uIGEgTVBDODI2NkFEUyBib2FyZDsgaW5jb3Jwb3JhdGUgY2hhbmdlIHRvCiAgY3B1L21wYzgyNjAvcGNpLmMgdG8gZW5hYmxlIG92ZXJyaWRlcyBvZiBQQ0kgbWVtb3J5IHBhcmFtZXRlcnMKCiogUGF0Y2ggYnkgTnllIExpdSwgMSBNYXkgMjAwMzoKICBtaW5vciBwYXRjaGVzIGZvciB0aGUgRkFEUzh4eAoKKiBQYXRjaCBieSBUaG9tYXMgU2No5GZlciwgMjggQXByIDIwMDM6CiAgRml4IFNQRCBoYW5kbGluZyBmb3IgMjU2IEVDQyBESU1NIG9uIFdhbG51dAoKKiBBZGQgc3VwcG9ydCBmb3IgYXJiaXRyYXJ5IGJpdG1hcHMgZm9yIFRSQUIncwlWRkQgY29tbWFuZDsKICBhbGxvdyB0byBwYXNzIGJvb3QgYml0bWFwIGFkZHJlc3NlcyBpbiBlbnZpcm9ubWVudCB2YXJpYWJsZXM7CiAgYWxsb3cgZm9yIHplcm8gYm9vdCBkZWxheQoKKiBQYXRjaCBieSBDaHJpc3RpYW4gR2Vp32luZ2VyLCAxOSBNYXkgMjAwMjoKICBPbiBUUkFCOiB3YWl0IHVudGlsIHRoZSBkdW1teSBieXRlIGhhcyBiZWVuIGNvbXBsZXRlbHkgc2VudAoKKiBQYXRjaCBieSBEYXZpZCBVcGRlZ3JhZmYsIDIyIEFwciAyMDAzOgogIHVwZGF0ZSBmb3IgQ3JheUwxIGJvYXJkCgoqIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAyMSBBcHIgMjAwMzoKICBhZGQgYm9vdCBzdXBwb3J0IGZvciBBUlRPUyAoYSBwcm9wcmlldGFyeSBPUykKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTEgQXByIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIFJUQyBEUzEzMzgKCiogUGF0Y2ggYnkgUm9kIEJveWNlLCAyNCBKYW4gMjAwMzoKICBGaXggY291bnRpbmcgb2YgZXh0ZW5kZWQgcGFydGl0aW9ucyBpbiBkaXNrYm9vdCBjb21tYW5kCgoqIFBhdGNoIGJ5IENocmlzdG9waGUgTGluZGhlaW1lciwgMjAgTWF5IDIwMDM6CiAgYWxsb3cgdGhlIHVzZSBvZiBDRkdfTE9BRFMgd2hlbiBDRkdfTk9fRkxBU0ggaXMgc2V0CgoqIEZpeCBTRFJBTSB0aW1pbmcgb24gUHVycGxlIGJvYXJkCgoqIEFkZCBzdXBwb3J0IGZvciBDb21wYWN0Rmxhc2ggb24gQVRDIGJvYXJkCiAgKGluY2x1ZGVzIHN1cHBvcnQgZm9yIEludGVsIDgyMzY1IGFuZCBjb21wYXRpYmxlIFBDIENhcmQgY29udHJvbGxlcnMsCiAgYW5kIFllbnRhLWNvbXBhdGlibGUgUENJLXRvLUNhcmRCdXMgY29udHJvbGxlcnMpCgoqIFBhdGNoIGJ5IE1hdGhpanMgSGFhcm1hbiwgMDggTWF5IDIwMDM6CiAgQWRkIGxhbjkxYzk2IGRyaXZlciAodGVzdGVkIG9uIEx1YmJvY2sgYW5kIGN1c3RvbSBQWEEyNTAgYm9hcmQgb25seSkKCiogRml4IHByb2JsZW0gd2l0aCB1c2FnZSBvZiAidHJ1ZSIgKHVuZGVmaW5lZCBpbiBjdXJyZW50IHZlcnNpb25zIG9mIGJmZC5oKQoKKiBBZGQgc3VwcG9ydCBmb3IgUHJvbWVzcyBBVEMgYm9hcmQKCiogUGF0Y2ggYnkgS2VpdGggT3V0d2F0ZXIsIDI4IEFwciAyMDAzOgogIC0gTWlzY2VsbGFuZW91cyBjb3JyZWN0aW9ucyBhbmQgYWRkaXRpb25zIHRvIEdFTjg2MFQgYm9hcmQgc3BlY2lmaWMgY29kZS4KICAtIEFkZGVkIEdFTjg2MF9TQyB2YXJpYW50IHRvIEdFTjg2MFQuCiAgLSBNaXNjZWxsYW5lb3VzIGNvcnJlY3Rpb25zIHRvIEdFTjg2MFQgZG9jdW1lbnRhdGlvbi4KICAtIENvcnJlY3QgZHVwbGljYXRlIGVudHJ5IGluIFUtQm9vdCBDUkVESVRTIGZpbGUuCiAgLSBBZGQgR0VOODYwVF9TQyBlbnRyeSBpbiBNQUlOVEFJTkVSUyBmaWxlLgogIC0gVXBkYXRlIENSRURJVFMgZmlsZSB3aXRoIEdFTjg2MFRfU0MgaW5mby4KCiogVXBkYXRlIFNtaXRocyBBZXJvc3BhY2UgYWRkcmVzc2VzIGluIE1BSU5UQUlORVJTIGZpbGUKCiogRml4IGVycm9yIGhhbmRsaW5nIGluIGh1c2gncyB2ZXJzaW9uIG9mICJydW4iIGNvbW1hbmQKCiogTFdNT04gZXh0ZW5zaW9uczoKICAtIFNwbGFzaHNjcmVlbiBzdXBwb3J0CiAgLSBtb2RlbSBzdXBwb3J0CiAgLSBzeXNtb24gc3VwcG9ydAogIC0gdGVtcGVyYXR1cmUgZGVwZW5kZW5kIGVuYWJsaW5nIG9mIExDRAoKKiBBbGxvdyBib290aW5nIGZyb20gb2xkICJQUENCb290IiBkaXNrIHBhcnRpdGlvbnMKCiogQWRkIHN1cHBvcnQgZm9yIFRRTTgyNTUgQm9hcmQgLyBNUEM4MjU1IENQVQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC4zLjE6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogTWFrZSBzdXJlIEJsb2NrIExvY2sgQml0cyBnZXQgY2xlYXJlZCBpbiBSMzYwTVBJIGZsYXNoIGRyaXZlcgoKKiBNUEM4MjMgTENEIGRyaXZlcjogRmlsbCBjb2xvciBtYXAgYmFja3dhcmRzLCB0byBhbGxvdyBmb3Igc3RlYWR5CiAgZGlzcGxheSB3aGVuIExpbnV4IHRha2VzIG92ZXIKCiogUGF0Y2ggYnkgRXJ3aW4gUm9sLCAyNyBGZWIgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgUlRFTVMgKHRoaXMgdGltZSBmb3IgcmVhbCkuCgoqIEFkZCBzdXBwb3J0IGZvciAiYm1wIGluZm8iIGFuZCAiYm1wIGRpc3BsYXkiIGNvbW1hbmRzIHRvIGxvYWQKICBiaXRtYXAgaW1hZ2VzOyB0aGlzIGNhbiBiZSB1c2VkIChmb3IgZXhhbXBsZSBpbiBhICJwcmVib290IgogIGNvbW1hbmQpIHRvIGRpc3BsYXkgYSBzcGxhc2ggc2NyZWVuIHZlcnkgcXVpY2tseSBhZnRlciBwb3dlcm9uLgoKKiBBZGQgc3VwcG9ydCBmb3IgMTMzIE1IeiBjbG9jayBvbiBJTkNBLUlQIGJvYXJkCgoqIFBhdGNoIGJ5IEx1dHogRGVubmlnLCAxMCBBcHIgMjAwMzoKICBVcGRhdGUgZm9yIFIzNjBNUEkgYm9hcmQKCiogQWRkIG5ldyBtZWFuaW5nIHRvICJhdXRvc3RhcnQiIGVudmlyb25tZW50IHZhcmlhYmxlOgogIElmIHNldCB0byAibm8iLCBhIHN0YW5kYWxvbmUgaW1hZ2UgcGFzc2VkIHRvIHRoZQogICJib290bSIgY29tbWFuZCB3aWxsIGJlIGNvcGllZCB0byB0aGUgbG9hZCBhZGRyZXNzCiAgKGFuZCBldmVudHVhbGx5IHVuY29tcHJlc3NlZCksIGJ1dCBOT1QgYmUgc3RhcnRlZC4KICBUaGlzIGNhbiBiZSB1c2VkIHRvIGxvYWQgYW5kIHVuY29tcHJlc3MgYXJiaXRyYXJ5CiAgZGF0YS4KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMCBBcHIgMjAwMzoKICBDaGFuZ2VkIERIQ1AgY2xpZW50IHRvIHVzZSBJUCBhZGRyZXNzIGZyb20gc2VydmVyIG9wdGlvbiBmaWVsZCAjNTQKICBmcm9tIHRoZSBPRkZFUiBwYWNrZXQgaW4gdGhlIHNlcnZlciBvcHRpb24gZmllbGQgIzU0IGluIHRoZSBSRVFVRVNUCiAgcGFja2V0LiBUaGlzIGZpeGVzIGEgcHJvYmxlbSB1c2luZyBhIFdpbmRvd3MgMjAwMCBESENQIHNlcnZlciwKICB3aGVyZSB0aGUgREhDUC1zZXJ2ZXIgaXMgbm90IHRoZSBURlRQLXNlcnZlci4KCiogU2V0IG1heCBicmlnaHRuZXNzIGZvciBNTjExMjM2IGRpc3BsYXlzIG9uIFRSQUIgYm9hcmQKCiogQWRkIHN1cHBvcnQgZm9yIFRRTTg2MkwgbW9kdWxlcwoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC4zLjA6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogUGF0Y2ggYnkgQXJ1biBEaGFyYW5rYXIsIDQgQXByIDIwMDM6CiAgQWRkIElETUEgZXhhbXBsZSBjb2RlICh0ZXN0ZWQgb24gODI2MCBvbmx5KQoKKiBBZGQgc3VwcG9ydCBmb3IgUHVycGxlIEJvYXJkIChNSVBTNjQgNUtjKQoKKiBBZGQgc3VwcG9ydCBmb3IgTUlQUzY0IDVLYyBDUFVzCgoqIEZpeCBtaXNzaW5nIHNldHRpbmcgb2YgImxvYWRhZGRyIiBhbmQgImJvb3RmaWxlIiBvbiBBUk0gYW5kIE1JUFMKCiogUGF0Y2ggYnkgRGVuaXMgUGV0ZXIsIDA0IEFwciAyMDAzOgogIC0gdXBkYXRlIE1JUDQwNS00IGJvYXJkCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgNCBBcHIgMjAwMzoKICAtIFUtQm9vdCB2ZXJzaW9uIGVudmlyb25tZW50IHZhcmlhYmxlICJ2ZXIiIGFkZGVkCiAgICAoQ09ORklHX1ZFUlNJT05fVkFSSUFCTEUpLgogIC0gQ2hhbmdlZCBQUEM0MDVHUHIgdmVyc2lvbiBmcm9tIEEgdG8gQi4KICAtIENoYW5nZWQgQ1BDSTQwNSB0byB1c2UgQ1RTIGluc3RlYWQgb2YgRFNSIG9uIFBQQzQwNSBVQVJUMS4KCiogUGF0Y2hlcyBieSBEZW5pcyBQZXRlciwgMDMgQXByaWwgMjAwMzoKICAtIGZpeCBQQ0kgSVJRcyBvbiBNUEwgYm9hcmRzCiAgLSBmaXggdHdvIG1vcmUgdW4tcmVsb2NhdGVkIHBvaW50ZXIgcHJvYmxlbXMKCiogRml4IGJlaGF2aW91ciBvZiAicnVuIiBjb21tYW5kOgogIC0gcHJpbnQgZXJyb3IgbWVzc2FnZSBpdiB2YXJpYWJsZSBkb2VzIG5vdCBleGlzdAogIC0gdGVybWluYXRlIHByb2Nlc3Npbmcgb2YgYXJndW1lbnRzIGluIGNhc2Ugb2YgZXJyb3IKCiogUGF0Y2hlcyBieSBQZXRlciBGaWd1bGksIDEwIE1hciAyMDAzCiAgLSBBZGQgc3VwcG9ydCBmb3IgQlRVQVJUIG9uIFBYQSBwbGF0Zm9ybQogIC0gQWRkIHN1cHBvcnQgZm9yIFdFUCBFUDI1MCAoUFhBKSBib2FyZAoKKiBGaXggZmxhc2ggcHJvYmxlbXMgb24gSU5DQS1JUDsgYWRkIHRvb2wgdG8gYWxsb3cgYnJ1bmluZyBpbWFnZXMgIHRvCiAgZmxhc2ggdXNpbmcgYSBCREkyMDAwCgoqIEltcGxlbWVudCBmaXggZm9yIEkyQyBFZGdlIENvbmRpdGlvbnMgcHJvYmxlbSBmb3IgYWxsIGJvYXJkcyB0aGF0CiAgdXNlIHRoZSBiaXQtYmFuZ2luZyBkcml2ZXIgKGNvbW1vbi9zb2Z0X2kyYy5jKQoKKiBQYXRjaCBieSBNYXJ0aW4gV2luaXN0b2VyZmVyLCAyMyBNYXIgMjAwMwogIC0gQWRkIHBvcnQgdG8gTVBDNTU1LzU1NiBtaWNyb2NvbnRyb2xsZXJzCiAgLSBBZGQgc3VwcG9ydCBmb3IgY21pIGN1c3RvbWVyIGJvYXJkIHdpdGgKICAgIEludGVsIDI4RjEyOEozQSwgMjhGMzIwSjNBIG9yIDI4RjY0MEozQSBmbGFzaC4KCiogUGF0Y2ggYnkgUmljayBCcm9uc29uLCAyOCBNYXIgMjAwMzoKICAtIGZpeCBjb21tb24vY21kX25hbmQuYwoKKiBQYXRjaCBieSBBcnVuIERoYXJhbmthciwgMjQgTWFyIDIwMDM6CiAgLSBhZGQgdGhyZWFkcyAvIHNjaGVkdWxlciBleGFtcGxlIGNvZGUKCiogQWRkIHBhdGNoZXMgYnkgUm9iZXJ0IFNjaHdlYmVsLCAzMSBNYXIgMjAwMzoKICAtIGFkZCBjdHJsLWMgc3VwcG9ydCBmb3Iga2VybWl0IGRvd25sb2FkCiAgLSBhbGlnbiBiZGluZm8gb3V0cHV0IG9uIEFSTQogIC0gY3NiMjI2IGJvYXJkOiBicmluZyBpbiBzeW5jIHdpdGggaW5ub2tvbS9tZW1zZXR1cC5TCiAgLSBjc2IyMjYgYm9hcmQ6IGZpeCBNRFJFRlIgaGFuZGxpbmcKICAtIG1pc2MgZG9jIGZpeGVzIC8gZXh0ZW5zaW9ucwogIC0gaW5ub2tvbSBib2FyZDogY2xlYW51cCwgTURSRUZSIGZpeCBpbiBtZW1zZXR1cC5TLCBjb25maWcgdXBkYXRlCiAgLSBhZGQgQk9PVF9QUk9HUkVTUyB0byBhcm1saW51eC5jCgoqIEFkZCBDUFUgSUQsIHZlcnNpb24sIGFuZCBjbG9jayBzcGVlZCBmb3IgSU5DQS1JUAoKKiBQYXRjaGVzIGJ5IERhdmUgRWxsaXMsIDE4IE1hciAyMDAzIGZvciBTWE5JODU1VCBib2FyZDoKICAtIGZpeCBTUkFNIGFuZCBTRFJBTSBtZW1vcnkgc2l6aW5nCiAgLSBhZGQgc3RhdHVzIExFRCBzdXBwb3J0CiAgLSBhZGQgTUFDIGFkZHJlc3MgZm9yIHNlY29uZCAoU0NDMSkgZXRoZXJuZXQgcG9ydAoKKiBVcGRhdGUgZGVmYXVsdCBlbnZpcm9ubWVudCBmb3IgVFFNODI2MCBib2FyZAoKKiBQYXRjaCBieSBSaWNrIEJyb25zb24sIDE2IE1hciAyMDAzOgogIC0gQWRkIE5BTkQgZmxhc2ggc3VwcG9ydCBmb3IgcmVhZGluZywgd3JpdGluZywgYW5kIGVyYXNpbmcgTkFORAogICAgZmxhc2ggKGNlcnRhaW4gZm9ybXMgb2Ygd2hpY2ggYXJlIGNhbGxlZCBTbWFydE1lZGlhKS4KICAtIEFkZCBzdXBwb3J0IGZvciBBdG1lbCBBVDkxUk05MjAwREsgQVJNOTIwVCBiYXNlZCBkZXZlbG9wbWVudCBraXQuCgoqIFBhdGNoZXMgYnkgUm9iZXJ0IFNjaHdlYmVsLCAxOSBNYXIgMjAwMzoKICAtIHVzZSBhcm0tbGludXgtZ2NjIGFzIGRlZmF1bHQgY29tcGlsZXIgZm9yIEFSTQogIC0gZml4IGkyYyBmaXh1cCBjb2RlCiAgLSBmaXggbWlzc2luZyBiYXVkcmF0ZSBzZXR0aW5nCiAgLSBhZGRlZCAkbG9hZGFkZHIgLyBDRkdfTE9BRF9BRERSIHN1cHBvcnQgdG8gbG9hZGIKICAtIG1vdmVkICJpZ25vcmluZyB0cmFpbGluZyBjaGFyYWN0ZXJzIiBfYmVmb3JlXyB1LWJvb3Qgd2FudHMgdG8KICAgIHByaW50IG91dCBkaWFnbm9zdGljcyBtZXNzYWdlczsgcmVtb3ZlcyBib2d1cyBjaGFyYWN0ZXJzIGF0IHRoZQogICAgZW5kIG9mIHRyYW5zbWlzc2lvbgoKKiBQYXRjaCBieSBKb2huIFpoYW4sIDE4IE1hciAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBTaW5vVmVlIE1pY3Jvc3lzdGVtcyBTQzh4eCBib2FyZHMKCiogUGF0Y2ggYnkgUm9sZiBPZmZlcm1hbm5zLCAyMSBNYXIgMjAwMzoKICBwb3J0ZWQgdGhlIGRucDExMTAgcmVsYXRlZCBjaGFuZ2VzIGZyb20gdGhlIGN1cnJlbnQgYXJtYm9vdCBjdnMgdG8KICBjdXJyZW50IHUtYm9vdCBjdnMuIHNtYzkxMTExIGRvZXMgbm90IHdvcmsuIHByb2JsZW0gbWFya2VkIGluCiAgc21jOTExMTEuYywgZ3JlcCBmb3IgIkZJWE1FIi4KCiogUGF0Y2ggYnkgQnJpYW4gQXVsZCwgMjUgTWFyIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIFNUTSBmbGFzaCBjaGlwcyBvbiBlYm9ueSBib2FyZAoKKiBBZGQgUENJIHN1cHBvcnQgZm9yIE1QQzgyNTAgQm9hcmRzIChQTTgyNSBtb2R1bGUpCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjUgTWFyIDIwMDM6CiAgLSBQQ0k0MDUgdXBkYXRlLgoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDIwIE1hciAyMDAzOgogIC0gQ1BDSTQwNTIgdXBkYXRlIChzdXBwb3J0IGZvciByZXZpc2lvbiAzKS4KICAtIFNldCBlZGdlIGNvbmRpdGlvbmluZyBjaXJjdWl0cnkgb24gUFBDNDA1R1ByIGZvciBjb21wYXRpYmlsaXR5CiAgICB0byBleGlzdGluZyBQUEM0MDVHUCBkZXNpZ25zLgogIC0gQ2xpcCB1ZGl2IHRvIDUgYml0cyBvbiBQUEM0MDUgKHNlcmlhbC5jKS4KCiogRXh0ZW5kIElOQ0FJUCBib2FyZCBzdXBwb3J0OgogIC0gYWRkIGF1dG9tYXRpYyBSQU0gc2l6ZSBkZXRlY3Rpb24KICAtIGFkZCAiYmRpbmZvIiBjb21tYW5kCiAgLSBwYXNzIGZsYXNoIGFkZHJlc3MgYW5kIHNpemUgdG8gTGludXgga2VybmVsCiAgLSBzd2l0Y2ggdG8gMTUwIE1IeiBjbG9jawoKKiBBdm9pZCBmbGlja2VyIG9uIHRoZSBUUkFCJ3MgVkZEIGJ5IHN5bmNocm9uaXppbmcgdGhlIGVuYWJsZSB3aXRoCiAgdGhlIEhTWU5DL1ZTWU5DLiBSZXF1aXJlcyBuZXcgQ1BMRCBjb2RlIChWZXJzaW9uIDEwMSBmb3IgUmV2LiAxMDAKICBib2FyZHMsIHZlcnNpb24gMTUzIGZvciBSZXYuIDIwMCBib2FyZHMpLgoKKiBQYXRjaCBieSBWbGFkaW1pciBHdXJldmljaCwgMTIgTWFyIDIwMDM6CiAgRml4IHJlbG9jYXRpb24gcHJvYmxlbSBvZiBzdGF0aWNhbGx5IGluaXRpYWxpemVkIHN0cmluZyBwb2ludGVycwogIGluIGNvbW1vbi9jbWRfcGNpLmMKCiogUGF0Y2ggYnkgS2FpLVV3ZSBCbPZtLCAxMiBNYXIgMjAwMzoKICBDbGVhbnVwICYgYnVnIGZpeGVzIGZvciBKRkZTMiBjb2RlOgogIC0gdGhlIG1lbW9yeSBtYW5nZW1lbnQgd2FzIGJyb2tlbi4gSXQgY2F1c2VkIGhhdm9jIG9uIG1hbGxvYyBieQogICAgd3JpdGluZyBiZXlvbmQgdGhlIGJsb2NrIGJvdW5kYXJpZXMuCiAgLSB0aGUgbGVuZ3RoIGNhbGN1bGF0aW9uIGZvciBmaWxlcyB3YXMgd3JvbmcsIHNvbWV0aW1lcyByZXN1bHRpbmcKICAgIGluIHNob3J0IGZpbGUgcmVhZHMuCiAgLSBkYXRhIGNvcHlpbmcgbm93IG9wdGlvbmFsbHkgdGFrZXMgZnJhZ21lbnQgdmVyc2lvbiBudW1iZXJzIGludG8KICAgIGFjY291bnQsIHRvIGF2b2lkIGNvcHlpbmcgZnJvbSBvbGRlciBkYXRhLgogIFNlZSBkb2MvUkVBRE1FLkpGRlMyIGZvciBkZXRhaWxzLgoKKiBQYXRjaCBieSBKb3NlZiBXYWduZXIsIDEyIE1hciAyMDAzOgogIC0gMTYvMzIgTUIgYW5kIDUwLzgwIE1IeiBzdXBwb3J0IHdpdGggYXV0by1kZXRlY3Rpb24gZm9yIElQODYwCiAgLSBFVEgwNSBhbmQgQkVEQlVHIHN1cHBvcnQgZm9yIENVODI0CiAgLSBhZGRlZCBzdXBwb3J0IGZvciBNaWNyb1N5cyBDUEM0NQogIC0gbmV3IEJPT1RST00vRkxBU0gwIGFuZCBET0MgYmFzZSBmb3IgUE04MjYKCiogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCAxMiBNYXIgMjAwMzoKICBGaXggdGhlIGNocGFydCBjb21tYW5kIG9uIGlubm9rb20gYm9hcmQKCiogTmFtZSBjbGVhbnVwOgogIG12IGluY2x1ZGUvYXNtLWkzODYvcHBjYm9vdC1pMzg2LmggaW5jbHVkZS9hc20taTM4Ni91LWJvb3QtaTM4Ni5oCiAgcy9QUENCb290L1UtQm9vdC8gaW4gc29tZSBmaWxlcwogIHMvcEltYWdlL3VJbWFnZS8gIGluIHNvbWUgZmlsZXMKCiogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMTUgSmFuIDIwMDM6CiAgRml4ICcnIGNvbW1hbmQgbGluZSBxdW90aW5nCgoqIFBhdGNoIGJ5IFRoZSBMRU9YIHRlYW0sIDE5IEphbiAyMDAzOgogIC0gYWRkIHN1cHBvcnQgZm9yIHRoZSBFTFBUODYwIGJvYXJkCiAgLSBhZGQgc3VwcG9ydCBmb3IgRGFsbGFzIGRzMTY0eCBSVEMKCiogUGF0Y2hlcyBieSBEYXZpZCBN/GxsZXIsIDMxIEphbiAyMDAzOgogIC0gbWluaW1hbCBzZXR1cCBmb3IgQ2FyZEJ1cyBicmlkZ2VzCiAgLSBhZGQgRUVQUk9NIHJlYWQvd3JpdGUgc3VwcG9ydCBpbiB0aGUgQ1M4OTAwIGRyaXZlcgogIC0gYWRkIHN1cHBvcnQgZm9yIHRoZSBidWlsdGluIEkyQyBjb250cm9sbGVyIGluIHRoZSBTYW1zdW5nIHMzYzI0eDAgY2hpcHMKICAtIGFkZCBzdXBwb3J0IGZvciBNUEwncyBWQ01BOSAoU2Ftc3VuZyBzM2MyNDEwIGJhc2VkKSBib2FyZAoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAwNCBGZWIgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgUlRDIERTMTMwNwoKKiBQYXRjaCBieSBSZWluaGFyZCBNZXllciwgNSBGZWIgMjAwMzoKICBmaXggUExQUkNSL1NDQ1IgaW5pdCBzZXF1ZW5jZSBvbiA4eHggdG8gYWxsb3cgZm9yCiAgY2hhbmdlcyBvZiBFQkRGIGJ5IHNvZnR3YXJlCgoqIFBhdGNoIGJ5IFZsYWRpbWlyIEd1cmV2aWNoLCAwNyBGZWIgMjAwMzoKICAiQVBJLWNvbXBhdGliaWxpdHkgcGF0Y2giIGZvciA0eHggSTJDIGRyaXZlcgoKKiBUUkFCIGZpeGVzIC8gZXh0ZW5zaW9uczoKICAtIFJlc3RvcmUgVkZEIGJyaWdodG5lc3MgYXMgc2F2ZWQgaW4gZW52aXJvbm1lbnQKICAtIGFkZCBzdXBwb3J0IGZvciBGdWppdHN1IGZsYXNoZXMKICAtIG1ha2Ugc3VyZSBib3RoIGJ1enplcnMgYXJlIHR1cm5lZCBvZmYgKGRyaXZlIGxvdyBsZXZlbCkKCiogUGF0Y2hlcyBieSBSb2JlcnQgU2Nod2ViZWwsIDA2IE1hciAyMDAzOgogIC0gZml4IGJ1ZyBpbiBCT09UUCBjb2RlIChtdXN0IHVzZSBOZXRDb3B5SVApCiAgLSB1cGRhdGUgb2YgQ1NCMjI2IHBvcnQKICAtIGNsZWFyIEJTUyBzZWdtZW50IG9uIFhTY2FsZQogIC0gYWRkZWQgc3VwcG9ydCBmb3IgaTJjX2luaXRfYm9hcmQoKSBmdW5jdGlvbgogIC0gdXBkYXRlIHRvIHRoZSBJbm5va29tIHBsYXR0Zm9ybQoKKiBFeHRlbmQgc3VwcG9ydCBmb3IgcmVkdW5kYW5kIGVudmlyb25tZW50cyBmb3IgY29uZmlndXJhdGlvbnMgd2hlcmUKICBlbnZpcm9ubWVudCBzaXplIDwgc2VjdG9yIHNpemUKCiogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDEzIEZlYiAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBNb3Rvcm9sYSBNUEM4MjY2QURTIGJvYXJkCgoqIFBhdGNoIGJ5IEt5bGUgSGFycmlzLCAxOSBGZWIgMjAwMzoKICBwYXRjaGVzIGZvciB0aGUgSW50ZWwgbHViYm9jayBib2FyZDoKICBtZW1zZXR1cC5TIC0gZ2VuZXJhbCBjbGVhbnVwIChiYXNlZCBvbiBSb2JlcnQncyBjc2IyMjYgY29kZSkKICBmbGFzaC5jIC0gb3ZlcmhhdWwsIGFjdHVhbGx5IHdvcmtzIG5vdwogIGx1YmJvY2suYyAtIGZpeCBpbml0IGZ1bmNzIHRvIHJldHVybiBwcm9wZXIgdmFsdWUKCiogUGF0Y2ggYnkgS2VubmV0aCBKb2hhbnNzb24sIDI2IEZlYiAyMDAzOgogIC0gRml4ZWQgb2ZmIGJ5IG9uZSBpbiBSRlRBIGNhbGN1bGF0aW9uLgogIC0gTm8gbmVlZCB0byBhYm9ydCB3aGVuIExERiBpcyBsb3dlciB0aGFuIHdlIGNhbiBwcm9ncmFtIGl0J3Mgb25seQogICAgbWluaW11bSB0aW1pbmcgc28gY2xhbXAgaXQgdG8gd2hhdCB3ZSBjYW4gZG8uCiAgLSBUYWtlcyBmdW5jdGlvbiBwb2ludGVyIHRvIGZ1bmN0aW9uIGZvciByZWFkaW5nIHRoZSBzcGRfbnZyYW0uIFVzZWZ1bGwKICAgIGZvciBmYWtpbmcgZGF0YSBvciBoYXJkY29kZSBhIG1vZHVsZSB3aXRob3V0IHRoZSBudnJhbS4KICAtIGZpeCBvdGhlciB1c2VyIGZvciBhYm92ZSBjaGFuZ2UKICAtIGZpeCBzb21lIGNvbW1lbnRzLgoKKiBQYXRjaGVzIGJ5IEJyaWFuIFdhaXRlLCAyNiBGZWIgMjAwMzoKICAtIGZpeCBwb3J0IGZvciBldmI2NDI2MCBib2FyZAogIC0gZml4IFBDSSBmb3IgZXZiNjQyNjAgYm9hcmQKICAtIGZpeCBQQ0kgc2NhbgoKKiBQYXRjaCBieSBSZWluaGFyZCBNZXllciwgMSBNYXIgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgRU1LIFRPUDg2MCBNb2R1bGUKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMDIgTWFyIDIwMDM6CiAgQWRkIFNQRCBFRVBST00gc3VwcG9ydCBmb3IgTVBDODI2MEFEUyBib2FyZAoKKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIDIxIEphbiAyMDAzOgogIC0gQWRkIHN1cHBvcnQgZm9yIElubm9rb20gYm9hcmQKICAtIERvbid0IGNvbXBsYWluIGlmICJpbnN0YWxsIiBmYWlscwogIC0gUkVBRE1FIGNsZWFudXAgKHJlbW92ZSBkdXBsaWNhdGVkIGxpbmVzKQogIC0gVXBkYXRlIFBYQSBoZWFkZXIgZmlsZXMKCiogQWRkIGRvY3VtZW50YXRpb24gZm9yIGV4aXN0aW5nIFBPU1QgY29kZSAoZG9jL1JFQURNRS5QT1NUKQoKKiBQYXRjaCBieSBMYXVkbmV5IFJlbiwgMTUgSmFuIDIwMDM6CiAgRml4IGhhbmRsaW5nIG9mIHJlZHVuZGFuZCBlbnZpcm9ubWVudCBpbiAidG9vbHMvZW52Y3JjLmMiCgoqIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDI4IEZlYiAyMDAzOgogIEFkZCBiZWRidWcgc3VwcG9ydCBmb3IgODI0eCBzeXN0ZW1zCgoqIEFkZCBzdXBwb3J0IGZvciAxNiBNQiBmbGFzaCBjb25maWd1cmF0aW9uIG9mIFRSQUIgYm9hcmQKCiogUGF0Y2ggYnkgRXJ3aW4gUm9sLCAyNyBGZWIgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgUlRFTVMKCiogQWRkIGltYWdlIGluZm9ybWF0aW9uIHRvIFJFQURNRQoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE4IEZlYiAyMDAzOgogIENQQ0lJU0VSNCBjb25maWd1cmF0aW9uIHVwZGF0ZWQuCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTcgRmViIDIwMDM6CiAgRml4ZWQgYnVnIGluIGV4dC4gc2VyaWFsIGNsb2NrIHNldHVwIG9uIFBQQzQwNSAoc2luY2UgUFBDNDQwIHBvcnQpLgoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEzIEZlYiAyMDAzOgogIEFkZCAicGNpZGVsYXkiIGVudmlyb25tZW50IHZhcmlhYmxlIChpbiBtcywgZW5hYmxlZCB2aWEKICBDT05GSUdfUENJX0JPT1RERUxBWSkuCiAgUENJIHNwZWMgMi4yIGRlZmluZXMsIHRoYXQgYSBwY2kgdGFyZ2V0IGhhcyAyXjI1IHBjaSBjbG9ja3MgYWZ0ZXIKICBSU1QjIHRvIHJlc3BvbmQgdG8gY29uZmlndXJhdGlvbiBjeWNsZXMgKDMzTUh6IC0+IDFzKS4KCiogRml4IGR1YWwgUENNQ0lBIHNsb3Qgc3VwcG9ydCAod2hlbiBydW5uaW5nIHdpdGgganVzdCBvbmUKICBzbG90IHBvcHVsYXRlZCkKCiogQWRkIFZGRCB0eXBlIGRldGVjdGlvbiB0byB0cmFiIGJvYXJkCgoqIGV4dGVuZCBkcml2ZXJzL2NzODkwMC5jIGRyaXZlciB0byBzeW5jaHJvbml6ZQkgZXRoYWRkciAgZW52aXJvbm1lbnQKICB2YXJpYWJsZSB3aXRoIHZhbHVlIGluIHRoZSBFRVBST00KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMCBGZWIgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgNE1CIGFuZCAxMjhNQiBvbmJvYXJkIFNEUkFNIChjcHUvcHBjNHh4L3NkcmFtLmMpCgoqIEFkZCBzdXBwb3J0IGZvciBNSVBTMzIgNEtjIENQVXMKCiogQWRkIHN1cHBvcnQgZm9yIElOQ0EtSVAgQm9hcmQKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuMi4yOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIEFkZCBkdWFsIGV0aGVybmV0IHN1cHBvcnQgb24gUE04MjYKCiogQWRkIHN1cHBvcnQgZm9yIExYVDk3MSBQSFkgb24gUE04MjYKCiogUGF0Y2ggYnkgVG9yZCBBbmRlcnNzb24sIDE2IEphbiAyMDAzOgogIEZpeCBmbGFzaCBzZWN0b3IgY291bnQgZm9yIFRRTTh4eEwKCiogRml4IEkyQyBFRVBST00gcHJvYmxlbSBvbiBJQ1U4NjIgYm9hcmQgKHdvdWxkIG9ubHkgd3JpdGUgdGhlIGZpcnN0CiAgMTYgYnl0ZXMgb3V0IG9mIGVhY2ggMzIgYnl0ZSBibG9jaykKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuMi4xOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIEFkZCBzdXBwb3J0IGZvciBWMzcgYm9hcmQKICAocGF0Y2ggYnkgSvNuIEJlbmVkaWt0c3NvbiwgMTEgRGVjIDIwMDIpCgoqIFVwZGF0ZSBiYXVkcmF0ZSBpbiBiZF9pbmZvIHdoZW4gaXQgZ2V0cyBjaGFuZ2VkCgoqIEFkZCB3YXRjaGRvZyB0cmlnZ2VyIHBvaW50cyB3aGlsZSB3YWl0aW5nIGZvciBzZXJpYWwgcG9ydAogIChzbyBmYXIgb25seSA4eHggLS0gbmVlZGVkIG9uIExXTU9OIHdpdGggMTAwbXMgd2F0Y2hkb2cpCgoqIEltcHJvdmUgY29tbWFuZCBsaW5lIHRvb2wgdG8gYWNjZXNzIHRoZSBVLUJvb3QncyBlbnZpcm9ubWVudAogIChmaWd1cmF0aW9uIG9mIHRoZSB1dGlsaXR5LCB1c2luZyBhIGNvbmZpZyBmaWxlKQoKKiBBZGQgc2luZ2xlIHF1b3RlIHN1cHBvcnQgZm9yIChvbGQpIGNvbW1hbmQgbGluZSBwYXJzZXIKCiogU3dpdGNoIExXTU9OIGJvYXJkIGRlZmF1bHQgY29uZmlnIGZyb20gRlJBTSB0byBFRVBST007CiAgaW4gUE9TVCwgRUVQUk9NIHNob3dzIHVwIG9uIDggYWRkcmVzc2VzCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjIuMDoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBVc2UgMS1ieXRlLXJlYWQgaW5zdGVhZCBvZiAtd3JpdGUgZm9yIGlwcm9iZSgpIGZ1bmN0aW9uCiAgQWRkIGkyYyBjb21tYW5kcyB0byBQTTgyNiBjb25maWcKCiogZXh0ZW5kIEkyQyBQT1NUIGNvZGU6IGNoZWNrIGZvciBsaXN0IG9uIGtub3duIGFkZHJlc3NlcwoKKiBJbXByb3ZlIGxvZyBidWZmZXIgY29kZTsgdXNlICJsb2dsZXZlbCIgdG8gZGVjaWRlIHdoaWNoIG1lc3NhZ2VzCiAgdG8gbG9nIG9uIHRoZSBjb25zb2xlLCB0b28gKGxpa2UgaW4gTGludXgpOyBnZXQgcmlkIG9mICJsb2dzdGFydCIKCiogQWRkIGNvbW1hbmQgbGluZSB0b29sIHRvIGFjY2VzcyB0aGUgVS1Cb290J3MgZW52aXJvbm1lbnQKICAoYm9hcmQtc3BlY2lmaWMgZm9yIFRSQUIgbm93LCB0byBiZSBmaXhlZCBsYXRlcikKCiogUGF0Y2ggYnkgSGFucy1Kb2VyZyBGcmllZGVuLCAwNiBEZWMgMjAwMgogIEZpeCBtaXNjIHByb2JsZW1zIHdpdGggQW1pZ2FPbmUgc3VwcG9ydAoKKiBQYXRjaCBieSBDaHJpcyBIYWxsaW5hbiwgMyBEZWMgMjAwMjoKICBtaW5vciBjbGVhbnVwIHRvIHRoZSBNUEM4MjQ1IEVQSUMgZHJpdmVyCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQgLCAyOCBOb3YgMjAwMgogIEFkZCBzdXBwb3J0IGZvciBleHRlcm5hbCAoU0lVKSBpbnRlcnJ1cHRzIG9uIE1QQzh4eAoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0ICwgMjggTm92IDIwMDIKICBGaXggbmVzdGVkIHN5c2NhbGxzIGJ1ZyBpbiBzdGFuZGFsb25lIGFwcGxpY2F0aW9ucwoKKiBQYXRjaCBieSBEYXZpZCBN/GxsZXIsIDI3IE5vdiAyMDAyOgogIGZpeCBvdXRwdXQgb2YgInBjaWluZm8iIGNvbW1hbmQgZm9yIENhcmRCdXMgYnJpZGdlIGRldmljZXMuCgoqIEZpeCBidWcgaW4gVFFNODI2MCBib2FyZCBkZXRlY3Rpb24gLSBib2FyZHMgZ290IHN0dWNrIHdoZW4gYm9hcmQgSUQKICB3YXMgbm90IHJlYWRhYmxlCgoqIEFkZCBMRUQgaW5kaWNhdGlvbiBmb3IgSURFIGFjdGl2aXR5IG9uIEtVUDRLIGJvYXJkCgoqIEZpeCBzdGFydHVwIHByb2JsZW1zIHdpdGggVkZEIGRpc3BsYXkgb24gVFJBQgoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAyMCBOb3YgMjAwMgogIEFkZCBkcml2ZXIgZm9yIEVwc29uIFNFRDEzODA2IGdyYXBoaWMgY29udHJvbGxlci4KICBBZGQgc3VwcG9ydCBmb3IgQk1QIGxvZ29zIGluIGNmYl9jb25zb2xlIGRyaXZlci4KCiogQWRkZWQgc3VwcG9ydCBmb3IgYm90aCBQQ01DSUEgc2xvdHMgKGF0IHRoZSBzYW1lIHRpbWUhKSBvbiBNUEM4eHgKCiogUGF0Y2ggYnkgUm9kIEJveWNlLCAyMSBOb3YgMjAwMjoKICBmaXggUENNQ0lBIG9uIE1CWDh4eCBib2FyZAoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0ICwgMjEgTm92IDIwMDIKICBBZGQgQ0ZHX0NQTV9QT1NUX1dPUkRfQUREUiB0byBtYWtlIHRoZSBvZmZzZXQgb2YgdGhlCiAgYm9vdG1vZGUgd29yZCBpbiBEUFJBTSBjb25maWd1cmFibGUKCiogUGF0Y2ggYnkgRGFuaWVsIEVuZ3N0cvZtLCAxOCBOb3YgMjAwMjoKICBGaXhlcyBmb3IgeDg2IHBvcnQgKG1vc3RseSBzdHJpbmdzIGlzc3VlcykKCiogUGF0Y2ggYnkgS2VuIENob3UsIDE4IE5vdiAyMDAyOgogIEZpeCBmb3IgbmF0c2VtaSBOSUMgY2FyZHMgKERQODM4MTUpCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDE5IE5vdiAyMDAyOgogIGZpeCBhIGJ1ZyBmb3IgdGhlIE1JSSBjb25maWd1cmF0aW9uLCBhbmQgc29tZSB3YXJuaW5ncwoKKiBQYXRjaCBieSBUaG9tYXMgRnJpZWRlbiwgMTMgTm92IDIwMDI6CiAgQWRkIGNvZGUgZm9yIEFtaWdhT25lIGJvYXJkCiAgKHByZWxpbWluYXJ5IG1lcmdlIHRvIFUtQm9vdCwgc3RpbGwgV0lQKQoKKiBQYXRjaCBieSBKb24gRGlla2VtYSwgMTIgTm92IDIwMDI6CiAgLSBBZGRpbmcgVVJMIGZvciBJRUVFIE9VSSBsb29rdXAKICAtIE1ha2luZyB0aGUgYXV0b2Jvb3QgI2RlZmluZXMgZGVwZW5kZW50IG9uIENPTkZJR19BVVRPQk9PVF9LRVlFRAogICAgYmVpbmcgZGVmaW5lZC4KICAtIEluIHRoZSBDT05GSUdfRVhUUkFfRU5WX1NFVFRJTkdTICNkZWZpbmUsIHRoZSByb290LW9uLWluaXRyZCBhbmQKICAgIHJvb3Qtb24tbmZzIG1hY3JvcyBhcmUgZGVzaWduZWQgdG8gc3dpdGNoIGhvdyB0aGUgZGVmYXVsdCBib290CiAgICBtZXRob2QgZ2V0cyBkZWZpbmVkLgoKKiBQYXRjaCBieSBEYW5pZWwgRW5nc3Ry9m0sIDEzIE5vdiAyMDAyOgogIEFkZCBzdXBwb3J0IGZvciBpMzg2IGFyY2hpdGVjdHVyZSBhbmQgQU1EIFNDNTIwIGJvYXJkCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDEyIE5vdiAyMDAyOgogIEFkZCBzdXBwb3J0IGZvciBET1MgZmlsZXN5c3RlbSBhbmQgYm9vdGluZyBmcm9tIERPUyBmbG9wcHkgZGlzawoKKiBQYXRjaCBieSBKaW0gU2FuZG96LCAwNyBOb3YgMjAwMjoKICBJbmNyZWFzZSBudW1iZXIgb2YgbmV0d29yayBSWCBidWZmZXJzIChQS1RCVUZTUlggaW4KICAiaW5jbHVkZS9uZXQuaCIpIGZvciBFRVBSTzEwMCBiYXNlZCBib2FyZHMgKGVzcGVjaWFsbHkgU1A4MjQwKQogIHdoaWNoIHNob3dlZCAiUmVjZWl2ZXIgaXMgbm90IHJlYWR5IiBlcnJvcnMgd2hlbiBVLUJvb3Qgd2FzCiAgcHJvY2Vzc2luZyB0aGUgcmVjZWl2ZSBidWZmZXJzIHNsb3dlciB0aGFuIHRoZSBuZXR3b3JrIGNvbnRyb2xsZXIKICB3YXMgZmlsbGluZyB0aGVtLgoKKiBQYXRjaCBieSBBbmRyZWFzIE9iZXJyaXR0ZXIsIDA5IE5vdiAyMDAyOgogIENoYW5nZSBiZWhhdmlvdXIgb2YgTmV0TG9vcCgpOiByZXR1cm4gLTEgZm9yIGVycm9ycywgZmlsZXNpemUKICBvdGhlcndpc2U7IHJldHVybiBjb2RlIDAgaXMgdmFsaWQgYW4gbWVhbnMgbm8gZmlsZSBsb2FkZWQgLSBpbiB0aGlzCiAgY2FzZSB0aGUgZW52aXJvbm1lbnQgc3RpbGwgZ2V0cyB1cGRhdGVkIQoKKiBQYXRjaGVzIGJ5IEpvbiBEaWVrZW1hLCA5IE5vdiAyMDAyOgogIC0gaW1wcm92ZSBBREMvREFDIGNsb2NraW5nIG9uIHRoZSBTQUNTbmcgYm9hcmQgdG8gYWxpZ24KICAgIHRoZSBmYWlsaW5nIGVkZ2VzIG9mIExSQ0xLIGFuZCBTQ0xLCiAgLSBzYmM4MjYwIGNvbmZpZ3VyYXRpb24gdHdlYWtzCiAgLSBhZGQgc3RhdHVzIExFRCBzdXBwb3J0IGZvciA4Mnh4IHN5c3RlbXMKICAtIHdpcmUgc3NwaS9zc3BvIGNvbW1hbmRzIGludG8gY29tbWFuZCBoYW5kbGVyOyBpbXByb3ZlZCBlcnJvcgogICAgaGFuZGxlcmluZwogIC0gYWRkIHRpbWVzdGFtcCBzdXBwb3J0IGFuZCBhbHRlcm5hdGUgbWVtb3J5IHRlc3QgdG8gdGhlCiAgICBTQUNTbmcgY29uZmlndXJhdGlvbgoKKiBQYXRjaCBieSBWaW5jZSBIdXNvdnNreSwgNyBOb3YgMjAwMjoKICBBZGQgIi1uIiB0byBsaW5rZXIgb3B0aW9ucyB0byBnZXQgcmlkIG9mICJOb3QgZW5vdWdoIHJvb20gZm9yCiAgcHJvZ3JhbSBoZWFkZXJzIiBwcm9ibGVtCgoqIFBhdGNoIGJ5IERhdmlkIE38bGxlciwgMDUgTm92IDIwMDIKICBSZW5hbWUgQ09ORklHX1BMTF9JTlBVVF9GUkVRIHRvIENPTkZJR19TWVNfQ0xLX0ZSRVEKICBzbyB3ZSBjYW4gdXNlIGFuIGFscmVhZHkgZXhpc3RpbmcgbmFtZQoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAwNSBOb3YgMjAwMgogIEhhcmR3YXJlIHJlbGF0aWVkIGltcHJvdm1lbnRzIGluIEZEQyBib290IGNvZGUKCiogUGF0Y2ggYnkgSG9sZ2VyIFNjaHVyaWcsIDUgTm92IDIwMDI6CiAgTWFrZSB0aGUgUFhBIHJlYWxseSBjaGFuZ2UgaXQncyBmcmVxdWVuY3kKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMDUgTm92IDIwMDIKICBBZGQgc3VwcG9ydCBmb3Igc2xhdmUgc2VyaWFsIFNwYXJ0YW4gMiBGUEdBcwoKKiBGaXggdW5pbml0aWFsaXplZCBtZW1vcnkgKE1BQwkgYWRkcmVzcykgIGluICA4eHggIFNDQy9GRUMgIGV0aGVybmV0CiAgZHJpdmVycwoKKiBBZGQgc3VwcG9ydCBmb3IgbG9nIGJ1ZmZlciB3aGljaCBjYW4gYmUgcGFzc2VkIHRvIExpbnV4IGtlcm5lbCdzCiAgc3lzbG9nIG1lY2hhbmlzbTsgdXNlZCBlc3BlY2lhbGx5IGZvciBQT1NUIHJlc3VsdHMuCgoqIFBhdGNoIGJ5IEtsYXVzIEhleWRlY2ssIDMxIE9jdCAyMDAyOgogIEFkZCBpbml0aWFsIHN1cHBvcnQgZm9yIGt1cDRrIGJvYXJkCgoqIFBhdGNoIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMDQgTm92IDIwMDI6CiAgLSB1c2Ugd2F0Y2hkb2cgdG8gcmVzZXQgUFhBMjUwIHN5c3RlbXMKICAtIGFkZGVkIHByb2dyZXNzIGNhbGxiYWNrcyB0byAoc29tZSBvZiB0aGUpIEFSTSBjb2RlCiAgLSB1cGRhdGUgZm9yIENvZ2VudCBDU0IyMjYgYm9hcmQKCiogQWRkIHN1cHBvcnQgZm9yIEZQUzg2MCBib2FyZAoKKiBQYXRjaCBieSBHdWlsbGF1bWUgQWxleGFuZHJlLCwgMDQgTm92IDIwMDI6CiAgSW1wcm92ZSBQQ0kgYWNjZXNzIG9uIDMyLWJpdHMgQ29tcGFjdCBQQ0kgYnVzCgoqIEZpeCBtZGVsYXkoKSBvbiBUUkFCIC0gdGhpcyB3YXMgc3RpbGwgdGhlIGRlYnVnZ2luZyB2ZXJzaW9uIHdpdGgKICBzZWNvbmRzIGluc3RlYWQgb2YgbXMuCgoqIFBhdGNoIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMSBOb3YgMjAwMjoKICBYU2NhbGUgcmVsYXRlZCBjbGVhbnVwIChhZmZlY3RzIGFsbCBBUk0gYm9hcmRzKQoKKiBDbGVhbnVwIG9mIG5hbWVzIGFuZCBSRUFETUUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ck5vdGVzIGZvciBVLUJvb3QgMC4xLjA6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KClRoaXMgaXMgdGhlIGluaXRpYWwgdmVyc2lvbiBvZiAiRGFzIFUtQm9vdCIsIHRoZSBVbml2ZXJzYWwgQm9vdCBMb2FkZXIuCgpJdCBpcyBiYXNlZCBvbiB2ZXJzaW9uIDIuMC4wICh0aGUgIkhhbGxvd2VlbiBSZWxlYXNlIikgb2YgUFBDQm9vdC4KRm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZSBoaXN0b3J5IG9mIHRoZSBwcm9qZWN0IHBsZWFzZSBzZWUgdGhlClBQQ0Jvb3QgcHJvamVjdCBwYWdlIGF0IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvcHBjYm9vdAoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo=