CkluIHRoaXMgZG9jdW1lbnQgeW91IHdpbGwgZmluZCBpbmZvcm1hdGlvbiBhYm91dDoKLSBob3cgdG8gYnVpbGQgZXh0ZXJuYWwgbW9kdWxlcwotIGhvdyB0byBtYWtlIHlvdXIgbW9kdWxlIHVzZSBrYnVpbGQgaW5mcmFzdHJ1Y3R1cmUKLSBob3cga2J1aWxkIHdpbGwgaW5zdGFsbCBhIGtlcm5lbAotIGhvdyB0byBpbnN0YWxsIG1vZHVsZXMgaW4gYSBub24tc3RhbmRhcmQgbG9jYXRpb24KCj09PSBUYWJsZSBvZiBDb250ZW50cwoKCT09PSAxIEludHJvZHVjdGlvbgoJPT09IDIgSG93IHRvIGJ1aWxkIGV4dGVybmFsIG1vZHVsZXMKCSAgIC0tLSAyLjEgQnVpbGRpbmcgZXh0ZXJuYWwgbW9kdWxlcwoJICAgLS0tIDIuMiBBdmFpbGFibGUgdGFyZ2V0cwoJICAgLS0tIDIuMyBBdmFpbGFibGUgb3B0aW9ucwoJICAgLS0tIDIuNCBQcmVwYXJpbmcgdGhlIGtlcm5lbCB0cmVlIGZvciBtb2R1bGUgYnVpbGQKCSAgIC0tLSAyLjUgQnVpbGRpbmcgc2VwYXJhdGUgZmlsZXMgZm9yIGEgbW9kdWxlCgk9PT0gMy4gRXhhbXBsZSBjb21tYW5kcwoJPT09IDQuIENyZWF0aW5nIGEga2J1aWxkIGZpbGUgZm9yIGFuIGV4dGVybmFsIG1vZHVsZQoJPT09IDUuIEluY2x1ZGUgZmlsZXMKCSAgIC0tLSA1LjEgSG93IHRvIGluY2x1ZGUgZmlsZXMgZnJvbSB0aGUga2VybmVsIGluY2x1ZGUgZGlyCgkgICAtLS0gNS4yIEV4dGVybmFsIG1vZHVsZXMgdXNpbmcgYW4gaW5jbHVkZS8gZGlyCgkgICAtLS0gNS4zIEV4dGVybmFsIG1vZHVsZXMgdXNpbmcgc2V2ZXJhbCBkaXJlY3RvcmllcwoJPT09IDYuIE1vZHVsZSBpbnN0YWxsYXRpb24KCSAgIC0tLSA2LjEgSU5TVEFMTF9NT0RfUEFUSAoJICAgLS0tIDYuMiBJTlNUQUxMX01PRF9ESVIKCT09PSA3LiBNb2R1bGUgdmVyc2lvbmluZyAmIE1vZHVsZS5zeW12ZXJzCgkgICAtLS0gNy4xIFN5bWJvbHMgZnJvbiB0aGUga2VybmVsICh2bWxpbnV4ICsgbW9kdWxlcykKCSAgIC0tLSA3LjIgU3ltYm9scyBhbmQgZXh0ZXJuYWwgbW9kdWxlcwoJICAgLS0tIDcuMyBTeW1ib2xzIGZyb20gYW5vdGhlciBleHRlcm5hbCBtb2R1bGUKCT09PSA4LiBUaXBzICYgVHJpY2tzCgkgICAtLS0gOC4xIFRlc3RpbmcgZm9yIENPTkZJR19GT09fQkFSCgoKCj09PSAxLiBJbnRyb2R1Y3Rpb24KCmtidWlsZCBpbmNsdWRlcyBmdW5jdGlvbmFsaXR5IGZvciBidWlsZGluZyBtb2R1bGVzIGJvdGgKd2l0aGluIHRoZSBrZXJuZWwgc291cmNlIHRyZWUgYW5kIG91dHNpZGUgdGhlIGtlcm5lbCBzb3VyY2UgdHJlZS4KVGhlIGxhdHRlciBpcyB1c3VhbGx5IHJlZmVycmVkIHRvIGFzIGV4dGVybmFsIG1vZHVsZXMgYW5kIGlzIHVzZWQKYm90aCBkdXJpbmcgZGV2ZWxvcG1lbnQgYW5kIGZvciBtb2R1bGVzIHRoYXQgYXJlIG5vdCBwbGFubmVkIHRvIGJlCmluY2x1ZGVkIGluIHRoZSBrZXJuZWwgdHJlZS4KCldoYXQgaXMgY292ZXJlZCB3aXRoaW4gdGhpcyBmaWxlIGlzIG1haW5seSBpbmZvcm1hdGlvbiB0byBhdXRob3JzCm9mIG1vZHVsZXMuIFRoZSBhdXRob3Igb2YgYW4gZXh0ZXJuYWwgbW9kdWxlcyBzaG91bGQgc3VwcGx5CmEgbWFrZWZpbGUgdGhhdCBoaWRlcyBtb3N0IG9mIHRoZSBjb21wbGV4aXR5IHNvIG9uZSBvbmx5IGhhcyB0byB0eXBlCidtYWtlJyB0byBidWlsZCB0aGUgbW9kdWxlLiBBIGNvbXBsZXRlIGV4YW1wbGUgd2lsbCBiZSBwcmVzZW50IGluCmNoYXB0ZXIgpC4gQ3JlYXRpbmcgYSBrYnVpbGQgZmlsZSBmb3IgYW4gZXh0ZXJuYWwgbW9kdWxlIi4KCgo9PT0gMi4gSG93IHRvIGJ1aWxkIGV4dGVybmFsIG1vZHVsZXMKCmtidWlsZCBvZmZlcnMgZnVuY3Rpb25hbGl0eSB0byBidWlsZCBleHRlcm5hbCBtb2R1bGVzLCB3aXRoIHRoZQpwcmVyZXF1aXNpdGUgdGhhdCB0aGVyZSBpcyBhIHByZS1idWlsdCBrZXJuZWwgYXZhaWxhYmxlIHdpdGggZnVsbCBzb3VyY2UuCkEgc3Vic2V0IG9mIHRoZSB0YXJnZXRzIGF2YWlsYWJsZSB3aGVuIGJ1aWxkaW5nIHRoZSBrZXJuZWwgaXMgYXZhaWxhYmxlCndoZW4gYnVpbGRpbmcgYW4gZXh0ZXJuYWwgbW9kdWxlLgoKLS0tIDIuMSBCdWlsZGluZyBleHRlcm5hbCBtb2R1bGVzCgoJVXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB0byBidWlsZCBhbiBleHRlcm5hbCBtb2R1bGU6CgoJCW1ha2UgLUMgPHBhdGgtdG8ta2VybmVsPiBNPWBwd2RgCgoJRm9yIHRoZSBydW5uaW5nIGtlcm5lbCB1c2U6CgkJbWFrZSAtQyAvbGliL21vZHVsZXMvYHVuYW1lIC1yYC9idWlsZCBNPWBwd2RgCgoJRm9yIHRoZSBhYm92ZSBjb21tYW5kIHRvIHN1Y2NlZWQgdGhlIGtlcm5lbCBtdXN0IGhhdmUgYmVlbiBidWlsdCB3aXRoCgltb2R1bGVzIGVuYWJsZWQuCgoJVG8gaW5zdGFsbCB0aGUgbW9kdWxlcyB0aGF0IHdlcmUganVzdCBidWlsdDoKCgkJbWFrZSAtQyA8cGF0aC10by1rZXJuZWw+IE09YHB3ZGAgbW9kdWxlc19pbnN0YWxsCgoJTW9yZSBjb21wbGV4IGV4YW1wbGVzIGxhdGVyLCB0aGUgYWJvdmUgc2hvdWxkIGdldCB5b3UgZ29pbmcuCgotLS0gMi4yIEF2YWlsYWJsZSB0YXJnZXRzCgoJJEtESVIgcmVmZXJzIHRvIHRoZSBwYXRoIHRvIHRoZSBrZXJuZWwgc291cmNlIHRvcC1sZXZlbCBkaXJlY3RvcnkKCgltYWtlIC1DICRLRElSIE09YHB3ZGAKCQlXaWxsIGJ1aWxkIHRoZSBtb2R1bGUocykgbG9jYXRlZCBpbiBjdXJyZW50IGRpcmVjdG9yeS4KCQlBbGwgb3V0cHV0IGZpbGVzIHdpbGwgYmUgbG9jYXRlZCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkKCQlhcyB0aGUgbW9kdWxlIHNvdXJjZS4KCQlObyBhdHRlbXB0cyBhcmUgbWFkZSB0byB1cGRhdGUgdGhlIGtlcm5lbCBzb3VyY2UsIGFuZCBpdCBpcwoJCWEgcHJlY29uZGl0aW9uIHRoYXQgYSBzdWNjZXNzZnVsIG1ha2UgaGFzIGJlZW4gZXhlY3V0ZWQKCQlmb3IgdGhlIGtlcm5lbC4KCgltYWtlIC1DICRLRElSIE09YHB3ZGAgbW9kdWxlcwoJCVRoZSBtb2R1bGVzIHRhcmdldCBpcyBpbXBsaWVkIHdoZW4gbm8gdGFyZ2V0IGlzIGdpdmVuLgoJCVNhbWUgZnVuY3Rpb25hbGl0eSBhcyBpZiBubyB0YXJnZXQgd2FzIHNwZWNpZmllZC4KCQlTZWUgZGVzY3JpcHRpb24gYWJvdmUuCgoJbWFrZSAtQyAkS0RJUiBNPSRQV0QgbW9kdWxlc19pbnN0YWxsCgkJSW5zdGFsbCB0aGUgZXh0ZXJuYWwgbW9kdWxlKHMpLgoJCUluc3RhbGxhdGlvbiBkZWZhdWx0IGlzIGluIC9saWIvbW9kdWxlcy88a2VybmVsLXZlcnNpb24+L2V4dHJhLAoJCWJ1dCBtYXkgYmUgcHJlZml4ZWQgd2l0aCBJTlNUQUxMX01PRF9QQVRIIC0gc2VlIHNlcGFyYXRlCgkJY2hhcHRlci4KCgltYWtlIC1DICRLRElSIE09JFBXRCBjbGVhbgoJCVJlbW92ZSBhbGwgZ2VuZXJhdGVkIGZpbGVzIGZvciB0aGUgbW9kdWxlIC0gdGhlIGtlcm5lbAoJCXNvdXJjZSBkaXJlY3RvcnkgaXMgbm90IG1vZGlmaWVkLgoKCW1ha2UgLUMgJEtESVIgTT1gcHdkYCBoZWxwCgkJaGVscCB3aWxsIGxpc3QgdGhlIGF2YWlsYWJsZSB0YXJnZXQgd2hlbiBidWlsZGluZyBleHRlcm5hbAoJCW1vZHVsZXMuCgotLS0gMi4zIEF2YWlsYWJsZSBvcHRpb25zOgoKCSRLRElSIHJlZmVycyB0byB0aGUgcGF0aCB0byB0aGUga2VybmVsIHNvdXJjZSB0b3AtbGV2ZWwgZGlyZWN0b3J5CgoJbWFrZSAtQyAkS0RJUgoJCVVzZWQgdG8gc3BlY2lmeSB3aGVyZSB0byBmaW5kIHRoZSBrZXJuZWwgc291cmNlLgoJCSckS0RJUicgcmVwcmVzZW50IHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGtlcm5lbCBzb3VyY2UgaXMuCgkJTWFrZSB3aWxsIGFjdHVhbGx5IGNoYW5nZSBkaXJlY3RvcnkgdG8gdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkKCQl3aGVuIGV4ZWN1dGVkIGJ1dCBjaGFuZ2UgYmFjayB3aGVuIGZpbmlzaGVkLgoKCW1ha2UgLUMgJEtESVIgTT1gcHdkYAoJCU09IGlzIHVzZWQgdG8gdGVsbCBrYnVpbGQgdGhhdCBhbiBleHRlcm5hbCBtb2R1bGUgaXMKCQliZWluZyBidWlsdC4KCQlUaGUgb3B0aW9uIGdpdmVuIHRvIE09IGlzIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGV4dGVybmFsCgkJbW9kdWxlIChrYnVpbGQgZmlsZSkgaXMgbG9jYXRlZC4KCQlXaGVuIGFuIGV4dGVybmFsIG1vZHVsZSBpcyBiZWluZyBidWlsdCBvbmx5IGEgc3Vic2V0IG9mIHRoZQoJCXVzdWFsIHRhcmdldHMgYXJlIGF2YWlsYWJsZS4KCgltYWtlIC1DICRLRElSIFNVQkRJUlM9YHB3ZGAKCQlTYW1lIGFzIE09LiBUaGUgU1VCRElSUz0gc3ludGF4IGlzIGtlcHQgZm9yIGJhY2t3YXJkcwoJCWNvbXBhdGliaWxpdHkuCgotLS0gMi40IFByZXBhcmluZyB0aGUga2VybmVsIHRyZWUgZm9yIG1vZHVsZSBidWlsZAoKCVRvIG1ha2Ugc3VyZSB0aGUga2VybmVsIGNvbnRhaW5zIHRoZSBpbmZvcm1hdGlvbiByZXF1aXJlZCB0bwoJYnVpbGQgZXh0ZXJuYWwgbW9kdWxlcyB0aGUgdGFyZ2V0ICdtb2R1bGVzX3ByZXBhcmUnIG11c3QgYmUgdXNlZC4KCSdtb2R1bGVfcHJlcGFyZScgc29sZWx5IGV4aXN0cyBhcyBhIHNpbXBsZSB3YXkgdG8gcHJlcGFyZQoJYSBrZXJuZWwgZm9yIGJ1aWxkaW5nIGV4dGVybmFsIG1vZHVsZXMuCglOb3RlOiBtb2R1bGVzX3ByZXBhcmUgd2lsbCBub3QgYnVpbGQgTW9kdWxlLnN5bXZlcnMgZXZlbiBpZgoJICAgICAgQ09ORklHX01PRFVMRVZFUlNJT05JTkcgaXMgc2V0LgoJICAgICAgVGhlcmVmb3JlIGEgZnVsbCBrZXJuZWwgYnVpbGQgbmVlZHMgdG8gYmUgZXhlY3V0ZWQgdG8gbWFrZQoJICAgICAgbW9kdWxlIHZlcnNpb25pbmcgd29yay4KCi0tLSAyLjUgQnVpbGRpbmcgc2VwYXJhdGUgZmlsZXMgZm9yIGEgbW9kdWxlCglJdCBpcyBwb3NzaWJsZSB0byBidWlsZCBzaW5nbGUgZmlsZXMgd2hpY2ggaXMgcGFydCBvZiBhIG1vZHVsZS4KCVRoaXMgd29ya3MgZXF1YWwgZm9yIHRoZSBrZXJuZWwsIGEgbW9kdWxlIGFuZCBldmVuIGZvciBleHRlcm5hbAoJbW9kdWxlcy4KCUV4YW1wbGVzIChtb2R1bGUgZm9vLmtvLCBjb25zaXN0IG9mIGJhci5vLCBiYXoubyk6CgkJbWFrZSAtQyAkS0RJUiBNPWBwd2RgIGJhci5sc3QKCQltYWtlIC1DICRLRElSIE09YHB3ZGAgYmFyLm8KCQltYWtlIC1DICRLRElSIE09YHB3ZGAgZm9vLmtvCgkJbWFrZSAtQyAkS0RJUiBNPWBwd2RgIC8KCQoKPT09IDMuIEV4YW1wbGUgY29tbWFuZHMKClRoaXMgZXhhbXBsZSBzaG93cyB0aGUgYWN0dWFsIGNvbW1hbmRzIHRvIGJlIGV4ZWN1dGVkIHdoZW4gYnVpbGRpbmcKYW4gZXh0ZXJuYWwgbW9kdWxlIGZvciB0aGUgY3VycmVudGx5IHJ1bm5pbmcga2VybmVsLgpJbiB0aGUgZXhhbXBsZSBiZWxvdyB0aGUgZGlzdHJpYnV0aW9uIGlzIHN1cHBvc2VkIHRvIHVzZSB0aGUKZmFjaWxpdHkgdG8gbG9jYXRlIG91dHB1dCBmaWxlcyBmb3IgYSBrZXJuZWwgY29tcGlsZSBpbiBhIGRpZmZlcmVudApkaXJlY3RvcnkgdGhhbiB0aGUga2VybmVsIHNvdXJjZSAtIGJ1dCB0aGUgZXhhbXBsZXMgd2lsbCBhbHNvIHdvcmsKd2hlbiB0aGUgc291cmNlIGFuZCB0aGUgb3V0cHV0IGZpbGVzIGFyZSBtaXhlZCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCgojIEtlcm5lbCBzb3VyY2UKL2xpYi9tb2R1bGVzLzxrZXJuZWwtdmVyc2lvbj4vc291cmNlIC0+IC91c3Ivc3JjL2xpbnV4LTx2ZXJzaW9uPgoKIyBPdXRwdXQgZnJvbSBrZXJuZWwgY29tcGlsZQovbGliL21vZHVsZXMvPGtlcm5lbC12ZXJzaW9uPi9idWlsZCAtPiAvdXNyL3NyYy9saW51eC08dmVyc2lvbj4tdXAKCkNoYW5nZSB0byB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBrYnVpbGQgZmlsZSBpcyBsb2NhdGVkIGFuZCBleGVjdXRlCnRoZSBmb2xsb3dpbmcgY29tbWFuZHMgdG8gYnVpbGQgdGhlIG1vZHVsZToKCgljZCAvaG9tZS91c2VyL3NyYy9tb2R1bGUKCW1ha2UgLUMgL3Vzci9zcmMvYHVuYW1lIC1yYC9zb3VyY2UgICAgICAgICAgICBcCgkgICAgICAgIE89L2xpYi9tb2R1bGVzL2B1bmFtZS1yYC9idWlsZCAgICAgICAgXAoJICAgICAgICBNPWBwd2RgCgpUaGVuIHRvIGluc3RhbGwgdGhlIG1vZHVsZSB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kOgoKCW1ha2UgLUMgL3Vzci9zcmMvYHVuYW1lIC1yYC9zb3VyY2UgICAgICAgICAgICBcCgkgICAgICAgIE89L2xpYi9tb2R1bGVzL2B1bmFtZS1yYC9idWlsZCAgICAgICAgXAoJICAgICAgICBNPWBwd2RgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKCQltb2R1bGVzX2luc3RhbGwKCklmIG9uZSBsb29rcyBjbG9zZWx5IHlvdSB3aWxsIHNlZSB0aGF0IHRoaXMgaXMgdGhlIHNhbWUgY29tbWFuZHMgYXMKbGlzdGVkIGJlZm9yZSAtIHdpdGggdGhlIGRpcmVjdG9yaWVzIHNwZWxsZWQgb3V0LgoKVGhlIGFib3ZlIGFyZSByYXRoZXIgbG9uZyBjb21tYW5kcywgYW5kIHRoZSBmb2xsb3dpbmcgY2hhcHRlcgpsaXN0cyBhIGZldyB0cmlja3MgdG8gbWFrZSBpdCBhbGwgZWFzaWVyLgoKCj09PSA0LiBDcmVhdGluZyBhIGtidWlsZCBmaWxlIGZvciBhbiBleHRlcm5hbCBtb2R1bGUKCmtidWlsZCBpcyB0aGUgYnVpbGQgc3lzdGVtIGZvciB0aGUga2VybmVsLCBhbmQgZXh0ZXJuYWwgbW9kdWxlcwptdXN0IHVzZSBrYnVpbGQgdG8gc3RheSBjb21wYXRpYmxlIHdpdGggY2hhbmdlcyBpbiB0aGUgYnVpbGQgc3lzdGVtCmFuZCB0byBwaWNrIHVwIHRoZSByaWdodCBmbGFncyB0byBnY2MgZXRjLgoKVGhlIGtidWlsZCBmaWxlIHVzZWQgYXMgaW5wdXQgc2hhbGwgZm9sbG93IHRoZSBzeW50YXggZGVzY3JpYmVkCmluIERvY3VtZW50YXRpb24va2J1aWxkL21ha2VmaWxlcy50eHQuIFRoaXMgY2hhcHRlciB3aWxsIGludHJvZHVjZSBhIGZldwptb3JlIHRyaWNrcyB0byBiZSB1c2VkIHdoZW4gZGVhbGluZyB3aXRoIGV4dGVybmFsIG1vZHVsZXMuCgpJbiB0aGUgZm9sbG93aW5nIGEgTWFrZWZpbGUgd2lsbCBiZSBjcmVhdGVkIGZvciBhIG1vZHVsZSB3aXRoIHRoZQpmb2xsb3dpbmcgZmlsZXM6Cgk4MTIzX2lmLmMKCTgxMjNfaWYuaAoJODEyM19wY2kuYwoJODEyM19iaW4ub19zaGlwcGVkCTw9IEJpbmFyeSBibG9iCgotLS0gNC4xIFNoYXJlZCBNYWtlZmlsZSBmb3IgbW9kdWxlIGFuZCBrZXJuZWwKCglBbiBleHRlcm5hbCBtb2R1bGUgYWx3YXlzIGluY2x1ZGVzIGEgd3JhcHBlciBNYWtlZmlsZSBzdXBwb3J0aW5nCglidWlsZGluZyB0aGUgbW9kdWxlIHVzaW5nICdtYWtlJyB3aXRoIG5vIGFyZ3VtZW50cy4KCVRoZSBNYWtlZmlsZSBwcm92aWRlZCB3aWxsIG1vc3QgbGlrZWx5IGluY2x1ZGUgYWRkaXRpb25hbAoJZnVuY3Rpb25hbGl0eSBzdWNoIGFzIHRlc3QgdGFyZ2V0cyBldGMuIGFuZCB0aGlzIHBhcnQgc2hhbGwKCWJlIGZpbHRlcmVkIGF3YXkgZnJvbSBrYnVpbGQgc2luY2UgaXQgbWF5IGltcGFjdCBrYnVpbGQgaWYKCW5hbWUgY2xhc2hlcyBvY2N1cnMuCgoJRXhhbXBsZSAxOgoJCS0tPiBmaWxlbmFtZTogTWFrZWZpbGUKCQlpZm5lcSAoJChLRVJORUxSRUxFQVNFKSwpCgkJIyBrYnVpbGQgcGFydCBvZiBtYWtlZmlsZQoJCW9iai1tICA6PSA4MTIzLm8KCQk4MTIzLXkgOj0gODEyM19pZi5vIDgxMjNfcGNpLm8gODEyM19iaW4ubwoKCQllbHNlCgkJIyBOb3JtYWwgTWFrZWZpbGUKCgkJS0VSTkVMRElSIDo9IC9saWIvbW9kdWxlcy9gdW5hbWUgLXJgL2J1aWxkCgkJYWxsOjoKCQkJJChNQUtFKSAtQyAkKEtFUk5FTERJUikgTT1gcHdkYCAkQAoKCQkjIE1vZHVsZSBzcGVjaWZpYyB0YXJnZXRzCgkJZ2VuYmluOgoJCQllY2hvICJYIiA+IDgxMjNfYmluLm9fc2hpcHBlZAoKCQllbmRpZgoKCUluIGV4YW1wbGUgMSB0aGUgY2hlY2sgZm9yIEtFUk5FTFJFTEVBU0UgaXMgdXNlZCB0byBzZXBhcmF0ZQoJdGhlIHR3byBwYXJ0cyBvZiB0aGUgTWFrZWZpbGUuIGtidWlsZCB3aWxsIG9ubHkgc2VlIHRoZSB0d28KCWFzc2lnbm1lbnRzIHdoZXJlYXMgbWFrZSB3aWxsIHNlZSBldmVyeXRoaW5nIGV4Y2VwdCB0aGUgdHdvCglrYnVpbGQgYXNzaWdubWVudHMuCgoJSW4gcmVjZW50IHZlcnNpb25zIG9mIHRoZSBrZXJuZWwsIGtidWlsZCB3aWxsIGxvb2sgZm9yIGEgZmlsZSBuYW1lZAoJS2J1aWxkIGFuZCBhcyBzZWNvbmQgb3B0aW9uIGxvb2sgZm9yIGEgZmlsZSBuYW1lZCBNYWtlZmlsZS4KCVV0aWxpc2luZyB0aGUgS2J1aWxkIGZpbGUgbWFrZXMgdXMgc3BsaXQgdXAgdGhlIE1ha2VmaWxlIGluIGV4YW1wbGUgMQoJaW50byB0d28gZmlsZXMgYXMgc2hvd24gaW4gZXhhbXBsZSAyOgoKCUV4YW1wbGUgMjoKCQktLT4gZmlsZW5hbWU6IEtidWlsZAoJCW9iai1tICA6PSA4MTIzLm8KCQk4MTIzLXkgOj0gODEyM19pZi5vIDgxMjNfcGNpLm8gODEyM19iaW4ubwoKCQktLT4gZmlsZW5hbWU6IE1ha2VmaWxlCgkJS0VSTkVMRElSIDo9IC9saWIvbW9kdWxlcy9gdW5hbWUgLXJgL2J1aWxkCgkJYWxsOjoKCQkJJChNQUtFKSAtQyAkS0VSTkVMRElSIE09YHB3ZGAgJEAKCgkJIyBNb2R1bGUgc3BlY2lmaWMgdGFyZ2V0cwoJCWdlbmJpbjoKCQkJZWNobyAiWCIgPiA4MTIzX2Jpbl9zaGlwcGVkCgoKCUluIGV4YW1wbGUgMiB3ZSBhcmUgZG93biB0byB0d28gZmFpcmx5IHNpbXBsZSBmaWxlcyBhbmQgZm9yIHNpbXBsZQoJZmlsZXMgYXMgdXNlZCBpbiB0aGlzIGV4YW1wbGUgdGhlIHNwbGl0IGlzIHF1ZXN0aW9uYWJsZS4gQnV0IHNvbWUKCWV4dGVybmFsIG1vZHVsZXMgdXNlIE1ha2VmaWxlcyBvZiBzZXZlcmFsIGh1bmRyZWQgbGluZXMgYW5kIGhlcmUgaXQKCXJlYWxseSBwYXlzIG9mZiB0byBzZXBhcmF0ZSB0aGUga2J1aWxkIHBhcnQgZnJvbSB0aGUgcmVzdC4KCUV4YW1wbGUgMyBzaG93cyBhIGJhY2t3YXJkIGNvbXBhdGlibGUgdmVyc2lvbi4KCglFeGFtcGxlIDM6CgkJLS0+IGZpbGVuYW1lOiBLYnVpbGQKCQlvYmotbSAgOj0gODEyMy5vCgkJODEyMy15IDo9IDgxMjNfaWYubyA4MTIzX3BjaS5vIDgxMjNfYmluLm8KCgkJLS0+IGZpbGVuYW1lOiBNYWtlZmlsZQoJCWlmbmVxICgkKEtFUk5FTFJFTEVBU0UpLCkKCQlpbmNsdWRlIEtidWlsZAoJCWVsc2UKCQkjIE5vcm1hbCBNYWtlZmlsZQoKCQlLRVJORUxESVIgOj0gL2xpYi9tb2R1bGVzL2B1bmFtZSAtcmAvYnVpbGQKCQlhbGw6OgoJCQkkKE1BS0UpIC1DICRLRVJORUxESVIgTT1gcHdkYCAkQAoKCQkjIE1vZHVsZSBzcGVjaWZpYyB0YXJnZXRzCgkJZ2VuYmluOgoJCQllY2hvICJYIiA+IDgxMjNfYmluX3NoaXBwZWQKCgkJZW5kaWYKCgkJVGhlIHRyaWNrIGhlcmUgaXMgdG8gaW5jbHVkZSB0aGUgS2J1aWxkIGZpbGUgZnJvbSBNYWtlZmlsZSBzbwoJCWlmIGFuIG9sZGVyIHZlcnNpb24gb2Yga2J1aWxkIHBpY2tzIHVwIHRoZSBNYWtlZmlsZSB0aGUgS2J1aWxkCgkJZmlsZSB3aWxsIGJlIGluY2x1ZGVkLgoKLS0tIDQuMiBCaW5hcnkgYmxvYnMgaW5jbHVkZWQgaW4gYSBtb2R1bGUKCglTb21lIGV4dGVybmFsIG1vZHVsZXMgbmVlZHMgdG8gaW5jbHVkZSBhIC5vIGFzIGEgYmxvYi4ga2J1aWxkCgloYXMgc3VwcG9ydCBmb3IgdGhpcywgYnV0IHJlcXVpcmVzIHRoZSBibG9iIGZpbGUgdG8gYmUgbmFtZWQKCTxmaWxlbmFtZT5fc2hpcHBlZC4gSW4gb3VyIGV4YW1wbGUgdGhlIGJsb2IgaXMgbmFtZWQKCTgxMjNfYmluLm9fc2hpcHBlZCBhbmQgd2hlbiB0aGUga2J1aWxkIHJ1bGVzIGtpY2sgaW4gdGhlIGZpbGUKCTgxMjNfYmluLm8gaXMgY3JlYXRlZCBhcyBhIHNpbXBsZSBjb3B5IG9mZiB0aGUgODIxM19iaW4ub19zaGlwcGVkIGZpbGUKCXdpdGggdGhlIF9zaGlwcGVkIHBhcnQgc3RyaXBwZWQgb2YgdGhlIGZpbGVuYW1lLgoJVGhpcyBhbGxvd3MgdGhlIDgxMjNfYmluLm8gZmlsZW5hbWUgdG8gYmUgdXNlZCBpbiB0aGUgYXNzaWdubWVudCB0bwoJdGhlIG1vZHVsZS4KCglFeGFtcGxlIDQ6CgkJb2JqLW0gIDo9IDgxMjMubwoJCTgxMjMteSA6PSA4MTIzX2lmLm8gODEyM19wY2kubyA4MTIzX2Jpbi5vCgoJSW4gZXhhbXBsZSA0IHRoZXJlIGlzIG5vIGRpc3RpbmN0aW9uIGJldHdlZW4gdGhlIG9yZGluYXJ5IC5jLy5oIGZpbGVzCglhbmQgdGhlIGJpbmFyeSBmaWxlLiBCdXQga2J1aWxkIHdpbGwgcGljayB1cCBkaWZmZXJlbnQgcnVsZXMgdG8gY3JlYXRlCgl0aGUgLm8gZmlsZS4KCgo9PT0gNS4gSW5jbHVkZSBmaWxlcwoKSW5jbHVkZSBmaWxlcyBhcmUgYSBuZWNlc3NpdHkgd2hlbiBhIC5jIGZpbGUgdXNlcyBzb21ldGhpbmcgZnJvbSBhbm90aGVyIC5jCmZpbGVzIChub3Qgc3RyaWN0bHkgaW4gdGhlIHNlbnNlIG9mIC5jIGJ1dCBpZiBnb29kIHByb2dyYW1taW5nIHByYWN0aWNlIGlzCnVzZWQpLiBBbnkgbW9kdWxlIHRoYXQgY29uc2lzdCBvZiBtb3JlIHRoYW4gb25lIC5jIGZpbGUgd2lsbCBoYXZlIGEgLmggZmlsZQpmb3Igb25lIG9mIHRoZSAuYyBmaWxlcy4gCi0gSWYgdGhlIC5oIGZpbGUgb25seSBkZXNjcmliZXMgYSBtb2R1bGUgaW50ZXJuYWwgaW50ZXJmYWNlIHRoZW4gdGhlIC5oIGZpbGUKICBzaGFsbCBiZSBwbGFjZWQgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSAuYyBmaWxlcy4KLSBJZiB0aGUgLmggZmlsZXMgZGVzY3JpYmUgYW4gaW50ZXJmYWNlIHVzZWQgYnkgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbAogIGxvY2F0ZWQgaW4gZGlmZmVyZW50IGRpcmVjdG9yaWVzLCB0aGUgLmggZmlsZXMgc2hhbGwgYmUgbG9jYXRlZCBpbgogIGluY2x1ZGUvbGludXgvIG9yIG90aGVyIGluY2x1ZGUvIGRpcmVjdG9yaWVzIGFzIGFwcHJvcHJpYXRlLgoKT25lIGV4Y2VwdGlvbiBmb3IgdGhpcyBydWxlIGlzIGxhcmdlciBzdWJzeXN0ZW1zIHRoYXQgaGF2ZSB0aGVpciBvd24gZGlyZWN0b3J5CnVuZGVyIGluY2x1ZGUvIHN1Y2ggYXMgaW5jbHVkZS9zY3NpLiBBbm90aGVyIGV4Y2VwdGlvbiBpcyBhcmNoLXNwZWNpZmljCi5oIGZpbGVzIHdoaWNoIGFyZSBsb2NhdGVkIHVuZGVyIGluY2x1ZGUvYXNtLSQoQVJDSCkvKi4KCkV4dGVybmFsIG1vZHVsZXMgaGF2ZSBhIHRlbmRlbmN5IHRvIGxvY2F0ZSBpbmNsdWRlIGZpbGVzIGluIGEgc2VwYXJhdGUgaW5jbHVkZS8KZGlyZWN0b3J5IGFuZCB0aGVyZWZvcmUgbmVlZHMgdG8gZGVhbCB3aXRoIHRoaXMgaW4gdGhlaXIga2J1aWxkIGZpbGUuCgotLS0gNS4xIEhvdyB0byBpbmNsdWRlIGZpbGVzIGZyb20gdGhlIGtlcm5lbCBpbmNsdWRlIGRpcgoKCVdoZW4gYSBtb2R1bGUgbmVlZHMgdG8gaW5jbHVkZSBhIGZpbGUgZnJvbSBpbmNsdWRlL2xpbnV4LyB0aGVuIG9uZQoJanVzdCB1c2VzOgoKCQkjaW5jbHVkZSA8bGludXgvbW9kdWxlcy5oPgoKCWtidWlsZCB3aWxsIG1ha2Ugc3VyZSB0byBhZGQgb3B0aW9ucyB0byBnY2Mgc28gdGhlIHJlbGV2YW50CglkaXJlY3RvcmllcyBhcmUgc2VhcmNoZWQuCglMaWtld2lzZSBmb3IgLmggZmlsZXMgcGxhY2VkIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgLmMgZmlsZS4KCgkJI2luY2x1ZGUgIjgxMjNfaWYuaCIKCgl3aWxsIGRvIHRoZSBqb2IuCgotLS0gNS4yIEV4dGVybmFsIG1vZHVsZXMgdXNpbmcgYW4gaW5jbHVkZS8gZGlyCgoJRXh0ZXJuYWwgbW9kdWxlcyBvZnRlbiBsb2NhdGUgdGhlaXIgLmggZmlsZXMgaW4gYSBzZXBhcmF0ZSBpbmNsdWRlLwoJZGlyZWN0b3J5IGFsdGhvdWdoIHRoaXMgaXMgbm90IHVzdWFsIGtlcm5lbCBzdHlsZS4gV2hlbiBhbiBleHRlcm5hbAoJbW9kdWxlIHVzZXMgYW4gaW5jbHVkZS8gZGlyIHRoZW4ga2J1aWxkIG5lZWRzIHRvIGJlIHRvbGQgc28uCglUaGUgdHJpY2sgaGVyZSBpcyB0byB1c2UgZWl0aGVyIEVYVFJBX0NGTEFHUyAodGFrZSBlZmZlY3QgZm9yIGFsbCAuYwoJZmlsZXMpIG9yIENGTEFHU18kRi5vICh0YWtlIGVmZmVjdCBvbmx5IGZvciBhIHNpbmdsZSBmaWxlKS4KCglJbiBvdXIgZXhhbXBsZSBpZiB3ZSBtb3ZlIDgxMjNfaWYuaCB0byBhIHN1YmRpcmVjdG9yeSBuYW1lZCBpbmNsdWRlLwoJdGhlIHJlc3VsdGluZyBLYnVpbGQgZmlsZSB3b3VsZCBsb29rIGxpa2U6CgoJCS0tPiBmaWxlbmFtZTogS2J1aWxkCgkJb2JqLW0gIDo9IDgxMjMubwoKCQlFWFRSQV9DRkxBR1MgOj0gLUlpbmNsdWRlCgkJODEyMy15IDo9IDgxMjNfaWYubyA4MTIzX3BjaS5vIDgxMjNfYmluLm8KCglOb3RlIHRoYXQgaW4gdGhlIGFzc2lnbm1lbnQgdGhlcmUgaXMgbm8gc3BhY2UgYmV0d2VlbiAtSSBhbmQgdGhlIHBhdGguCglUaGlzIGlzIGEga2J1aWxkIGxpbWl0YXRpb246ICB0aGVyZSBtdXN0IGJlIG5vIHNwYWNlIHByZXNlbnQuCgotLS0gNS4zIEV4dGVybmFsIG1vZHVsZXMgdXNpbmcgc2V2ZXJhbCBkaXJlY3RvcmllcwoKCUlmIGFuIGV4dGVybmFsIG1vZHVsZSBkb2VzIG5vdCBmb2xsb3cgdGhlIHVzdWFsIGtlcm5lbCBzdHlsZSBidXQKCWRlY2lkZSB0byBzcHJlYWQgZmlsZXMgb3ZlciBzZXZlcmFsIGRpcmVjdG9yaWVzIHRoZW4ga2J1aWxkIGNhbgoJc3VwcG9ydCB0aGlzIHRvby4KCglDb25zaWRlciB0aGUgZm9sbG93aW5nIGV4YW1wbGU6CgkKCXwKCSstIHNyYy9jb21wbGV4X21haW4uYwoJfCAgICstIGhhbC9oYXJkd2FyZWlmLmMKCXwgICArLSBoYWwvaW5jbHVkZS9oYXJkd2FyZWlmLmgKCSstIGluY2x1ZGUvY29tcGxleC5oCgkKCVRvIGJ1aWxkIGEgc2luZ2xlIG1vZHVsZSBuYW1lZCBjb21wbGV4LmtvIHdlIHRoZW4gbmVlZCB0aGUgZm9sbG93aW5nCglrYnVpbGQgZmlsZToKCglLYnVpbGQ6CgkJb2JqLW0gOj0gY29tcGxleC5vCgkJY29tcGxleC15IDo9IHNyYy9jb21wbGV4X21haW4ubwoJCWNvbXBsZXgteSArPSBzcmMvaGFsL2hhcmR3YXJlaWYubwoKCQlFWFRSQV9DRkxBR1MgOj0gLUkkKHNyYykvaW5jbHVkZQoJCUVYVFJBX0NGTEFHUyArPSAtSSQoc3JjKXNyYy9oYWwvaW5jbHVkZQoKCglrYnVpbGQga25vd3MgaG93IHRvIGhhbmRsZSAubyBmaWxlcyBsb2NhdGVkIGluIGFub3RoZXIgZGlyZWN0b3J5IC0KCWFsdGhvdWdoIHRoaXMgaXMgTk9UIHJlY2NvbW1lbmRlZCBwcmFjdGljZS4gVGhlIHN5bnRheCBpcyB0byBzcGVjaWZ5Cgl0aGUgZGlyZWN0b3J5IHJlbGF0aXZlIHRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIEtidWlsZCBmaWxlIGlzCglsb2NhdGVkLgoKCVRvIGZpbmQgdGhlIC5oIGZpbGVzIHdlIGhhdmUgdG8gZXhwbGljaXRseSB0ZWxsIGtidWlsZCB3aGVyZSB0byBsb29rCglmb3IgdGhlIC5oIGZpbGVzLiBXaGVuIGtidWlsZCBleGVjdXRlcyBjdXJyZW50IGRpcmVjdG9yeSBpcyBhbHdheXMKCXRoZSByb290IG9mIHRoZSBrZXJuZWwgdHJlZSAoYXJndW1lbnQgdG8gLUMpIGFuZCB0aGVyZWZvcmUgd2UgaGF2ZSB0bwoJdGVsbCBrYnVpbGQgaG93IHRvIGZpbmQgdGhlIC5oIGZpbGVzIHVzaW5nIGFic29sdXRlIHBhdGhzLgoJJChzcmMpIHdpbGwgc3BlY2lmeSB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZQoJS2J1aWxkIGZpbGUgYXJlIGxvY2F0ZWQgd2hlbiBiZWluZyBidWlsZCBhcyBhbiBleHRlcm5hbCBtb2R1bGUuCglUaGVyZWZvcmUgLUkkKHNyYykvIGlzIHVzZWQgdG8gcG9pbnQgb3V0IHRoZSBkaXJlY3Rvcnkgb2YgdGhlIEtidWlsZAoJZmlsZSBhbmQgYW55IGFkZGl0aW9uYWwgcGF0aCBhcmUganVzdCBhcHBlbmRlZC4KCj09PSA2LiBNb2R1bGUgaW5zdGFsbGF0aW9uCgpNb2R1bGVzIHdoaWNoIGFyZSBpbmNsdWRlZCBpbiB0aGUga2VybmVsIGFyZSBpbnN0YWxsZWQgaW4gdGhlIGRpcmVjdG9yeToKCgkvbGliL21vZHVsZXMvJChLRVJORUxSRUxFQVNFKS9rZXJuZWwKCkV4dGVybmFsIG1vZHVsZXMgYXJlIGluc3RhbGxlZCBpbiB0aGUgZGlyZWN0b3J5OgoKCS9saWIvbW9kdWxlcy8kKEtFUk5FTFJFTEVBU0UpL2V4dHJhCgotLS0gNi4xIElOU1RBTExfTU9EX1BBVEgKCglBYm92ZSBhcmUgdGhlIGRlZmF1bHQgZGlyZWN0b3JpZXMsIGJ1dCBhcyBhbHdheXMgc29tZSBsZXZlbCBvZgoJY3VzdG9taXphdGlvbiBpcyBwb3NzaWJsZS4gT25lIGNhbiBwcmVmaXggdGhlIHBhdGggdXNpbmcgdGhlIHZhcmlhYmxlCglJTlNUQUxMX01PRF9QQVRIOgoKCQkkIG1ha2UgSU5TVEFMTF9NT0RfUEFUSD0vZnJvZG8gbW9kdWxlc19pbnN0YWxsCgkJPT4gSW5zdGFsbCBkaXI6IC9mcm9kby9saWIvbW9kdWxlcy8kKEtFUk5FTFJFTEVBU0UpL2tlcm5lbAoKCUlOU1RBTExfTU9EX1BBVEggbWF5IGJlIHNldCBhcyBhbiBvcmRpbmFyeSBzaGVsbCB2YXJpYWJsZSBvciBhcyBpbiB0aGUKCWV4YW1wbGUgYWJvdmUgYmUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUgd2hlbiBjYWxsaW5nIG1ha2UuCglJTlNUQUxMX01PRF9QQVRIIGhhcyBlZmZlY3QgYm90aCB3aGVuIGluc3RhbGxpbmcgbW9kdWxlcyBpbmNsdWRlZCBpbgoJdGhlIGtlcm5lbCBhcyB3ZWxsIGFzIHdoZW4gaW5zdGFsbGluZyBleHRlcm5hbCBtb2R1bGVzLgoKLS0tIDYuMiBJTlNUQUxMX01PRF9ESVIKCglXaGVuIGluc3RhbGxpbmcgZXh0ZXJuYWwgbW9kdWxlcyB0aGV5IGFyZSBkZWZhdWx0IGluc3RhbGxlZCBpbiBhCglkaXJlY3RvcnkgdW5kZXIgL2xpYi9tb2R1bGVzLyQoS0VSTkVMUkVMRUFTRSkvZXh0cmEsIGJ1dCBvbmUgbWF5IHdpc2gKCXRvIGxvY2F0ZSBtb2R1bGVzIGZvciBhIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkgaW4gYSBzZXBhcmF0ZQoJZGlyZWN0b3J5LiBGb3IgdGhpcyBwdXJwb3NlIG9uZSBjYW4gdXNlIElOU1RBTExfTU9EX0RJUiB0byBzcGVjaWZ5IGFuCglhbHRlcm5hdGl2ZSBuYW1lIHRoYW4gJ2V4dHJhJy4KCgkJJCBtYWtlIElOU1RBTExfTU9EX0RJUj1nYW5kYWxmIC1DIEtFUk5FTERJUiBcCgkJCU09YHB3ZGAgbW9kdWxlc19pbnN0YWxsCgkJPT4gSW5zdGFsbCBkaXI6IC9saWIvbW9kdWxlcy8kKEtFUk5FTFJFTEVBU0UpL2dhbmRhbGYKCgo9PT0gNy4gTW9kdWxlIHZlcnNpb25pbmcgJiBNb2R1bGUuc3ltdmVycwoKTW9kdWxlIHZlcnNpb25pbmcgaXMgZW5hYmxlZCBieSB0aGUgQ09ORklHX01PRFZFUlNJT05TIHRhZy4KCk1vZHVsZSB2ZXJzaW9uaW5nIGlzIHVzZWQgYXMgYSBzaW1wbGUgQUJJIGNvbnNpc3RlbmN5IGNoZWNrLiBUaGUgTW9kdWxlCnZlcnNpb25pbmcgY3JlYXRlcyBhIENSQyB2YWx1ZSBvZiB0aGUgZnVsbCBwcm90b3R5cGUgZm9yIGFuIGV4cG9ydGVkIHN5bWJvbCBhbmQKd2hlbiBhIG1vZHVsZSBpcyBsb2FkZWQvdXNlZCB0aGVuIHRoZSBDUkMgdmFsdWVzIGNvbnRhaW5lZCBpbiB0aGUga2VybmVsIGFyZQpjb21wYXJlZCB3aXRoIHNpbWlsYXIgdmFsdWVzIGluIHRoZSBtb2R1bGUuIElmIHRoZXkgYXJlIG5vdCBlcXVhbCB0aGVuIHRoZQprZXJuZWwgcmVmdXNlcyB0byBsb2FkIHRoZSBtb2R1bGUuCgpNb2R1bGUuc3ltdmVycyBjb250YWlucyBhIGxpc3Qgb2YgYWxsIGV4cG9ydGVkIHN5bWJvbHMgZnJvbSBhIGtlcm5lbCBidWlsZC4KCi0tLSA3LjEgU3ltYm9scyBmcm9uIHRoZSBrZXJuZWwgKHZtbGludXggKyBtb2R1bGVzKQoKCUR1cmluZyBhIGtlcm5lbCBidWlsZCBhIGZpbGUgbmFtZWQgTW9kdWxlLnN5bXZlcnMgd2lsbCBiZSBnZW5lcmF0ZWQuCglNb2R1bGUuc3ltdmVycyBjb250YWlucyBhbGwgZXhwb3J0ZWQgc3ltYm9scyBmcm9tIHRoZSBrZXJuZWwgYW5kCgljb21waWxlZCBtb2R1bGVzLiBGb3IgZWFjaCBzeW1ib2xzIHRoZSBjb3JyZXNwb25kaW5nIENSQyB2YWx1ZQoJaXMgc3RvcmVkIHRvby4KCglUaGUgc3ludGF4IG9mIHRoZSBNb2R1bGUuc3ltdmVycyBmaWxlIGlzOgoJCTxDUkM+ICAgICAgIDxTeW1ib2w+ICAgICAgICAgICA8bW9kdWxlPgoJU2FtcGxlOgoJCTB4MmQwMzY4MzQgIHNjc2lfcmVtb3ZlX2hvc3QgICBkcml2ZXJzL3Njc2kvc2NzaV9tb2QKCglGb3IgYSBrZXJuZWwgYnVpbGQgd2l0aG91dCBDT05GSUdfTU9EVkVSU0lPTklORyBlbmFibGVkIHRoZSBjcmMKCXdvdWxkIHJlYWQ6IDB4MDAwMDAwMDAKCglNb2R1bGUuc3ltdmVycyBzZXJ2ZSB0d28gcHVycG9zZXMuCgkxKSBJdCBsaXN0IGFsbCBleHBvcnRlZCBzeW1ib2xzIGJvdGggZnJvbSB2bWxpbnV4IGFuZCBhbGwgbW9kdWxlcwoJMikgSXQgbGlzdCBDUkMgaWYgQ09ORklHX01PRFZFUlNJT04gaXMgZW5hYmxlZAoKLS0tIDcuMiBTeW1ib2xzIGFuZCBleHRlcm5hbCBtb2R1bGVzCgoJV2hlbiBidWlsZGluZyBhbiBleHRlcm5hbCBtb2R1bGUgdGhlIGJ1aWxkIHN5c3RlbSBuZWVkcyBhY2Nlc3MgdG8KCXRoZSBzeW1ib2xzIGZyb20gdGhlIGtlcm5lbCB0byBjaGVjayBpZiBhbGwgZXh0ZXJuYWwgc3ltYm9scyBhcmUKCWRlZmluZWQuIFRoaXMgaXMgZG9uZSBpbiB0aGUgTU9EUE9TVCBzdGVwIGFuZCB0byBvYnRhaW4gYWxsCglzeW1ib2xzIG1vZHBvc3QgcmVhZHMgTW9kdWxlLnN5bXZlcnMgZnJvbSB0aGUga2VybmVsLgoJSWYgYSBNb2R1bGUuc3ltdmVycyBmaWxlIGlzIHByZXNlbnQgaW4gdGhlIGRpcmVjdG9yeSB3aGVyZQoJdGhlIGV4dGVybmFsIG1vZHVsZSBpcyBiZWluZyBidWlsZCB0aGlzIGZpbGUgd2lsbCBiZSByZWFkIHRvby4KCUR1cmluZyB0aGUgTU9EUE9TVCBzdGVwIGEgbmV3IE1vZHVsZS5zeW12ZXJzIGZpbGUgd2lsbCBiZSB3cml0dGVuCgljb250YWluaW5nIGFsbCBleHBvcnRlZCBzeW1ib2xzIHRoYXQgd2FzIG5vdCBkZWZpbmVkIGluIHRoZSBrZXJuZWwuCgkKLS0tIDcuMyBTeW1ib2xzIGZyb20gYW5vdGhlciBleHRlcm5hbCBtb2R1bGUKCglTb21ldGltZXMgb25lIGV4dGVybmFsIG1vZHVsZSB1c2VzIGV4cG9ydGVkIHN5bWJvbHMgZnJvbSBhbm90aGVyCglleHRlcm5hbCBtb2R1bGUuIEtidWlsZCBuZWVkcyB0byBoYXZlIGZ1bGwga25vd2xlZGdlIG9uIGFsbCBzeW1ib2xzCgl0byBhdm9pZCBzcGl0dGluZyBvdXQgd2FybmluZ3MgYWJvdXQgdW5kZWZpbmVkIHN5bWJvbHMuCglUd28gc29sdXRpb25zIGV4aXN0IHRvIGxldCBrYnVpbGQga25vdyBhbGwgc3ltYm9scyBvZiBtb3JlIHRoYW4KCW9uZSBleHRlcm5hbCBtb2R1bGUuCglUaGUgbWV0aG9kIHdpdGggYSB0b3AtbGV2ZWwga2J1aWxkIGZpbGUgaXMgcmVjb21tZW5kZWQgYnV0IG1heSBiZQoJaW1wcmFjdGljYWwgaW4gY2VydGFpbiBzaXR1YXRpb25zLgoKCVVzZSBhIHRvcC1sZXZlbCBLYnVpbGQgZmlsZQoJCUlmIHlvdSBoYXZlIHR3byBtb2R1bGVzOiAnZm9vJywgJ2JhcicgYW5kICdmb28nIG5lZWRzIHN5bWJvbHMKCQlmcm9tICdiYXInIHRoZW4gb25lIGNhbiB1c2UgYSBjb21tb24gdG9wLWxldmVsIGtidWlsZCBmaWxlIHNvCgkJYm90aCBtb2R1bGVzIGFyZSBjb21waWxlZCBpbiBzYW1lIGJ1aWxkLgoKCQlDb25zaWRlciBmb2xsb3dpbmcgZGlyZWN0b3J5IGxheW91dDoKCQkuL2Zvby8gPD0gY29udGFpbnMgdGhlIGZvbyBtb2R1bGUKCQkuL2Jhci8gPD0gY29udGFpbnMgdGhlIGJhciBtb2R1bGUKCQlUaGUgdG9wLWxldmVsIEtidWlsZCBmaWxlIHdvdWxkIHRoZW4gbG9vayBsaWtlOgoJCQoJCSMuL0tidWlsZDogKHRoaXMgZmlsZSBtYXkgYWxzbyBiZSBuYW1lZCBNYWtlZmlsZSkKCQkJb2JqLXkgOj0gZm9vLyBiYXIvCgoJCUV4ZWN1dGluZzoKCQkJbWFrZSAtQyAkS0RJUiBNPWBwd2RgCgoJCXdpbGwgdGhlbiBkbyB0aGUgZXhwZWN0ZWQgYW5kIGNvbXBpbGUgYm90aCBtb2R1bGVzIHdpdGggZnVsbAoJCWtub3dsZWRnZSBvbiBzeW1ib2xzIGZyb20gYm90aCBtb2R1bGVzLgoKCVVzZSBhbiBleHRyYSBNb2R1bGUuc3ltdmVycyBmaWxlCgkJV2hlbiBhbiBleHRlcm5hbCBtb2R1bGUgaXMgYnVpbGQgYSBNb2R1bGUuc3ltdmVycyBmaWxlIGlzCgkJZ2VuZXJhdGVkIGNvbnRhaW5pbmcgYWxsIGV4cG9ydGVkIHN5bWJvbHMgd2hpY2ggYXJlIG5vdAoJCWRlZmluZWQgaW4gdGhlIGtlcm5lbC4KCQlUbyBnZXQgYWNjZXNzIHRvIHN5bWJvbHMgZnJvbSBtb2R1bGUgJ2Jhcicgb25lIGNhbiBjb3B5IHRoZQoJCU1vZHVsZS5zeW12ZXJzIGZpbGUgZnJvbSB0aGUgY29tcGlsYXRpb24gb2YgdGhlICdiYXInIG1vZHVsZQoJCXRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlICdmb28nIG1vZHVsZSBpcyBidWlsZC4KCQlEdXJpbmcgdGhlIG1vZHVsZSBidWlsZCBrYnVpbGQgd2lsbCByZWFkIHRoZSBNb2R1bGUuc3ltdmVycwoJCWZpbGUgaW4gdGhlIGRpcmVjdG9yeSBvZiB0aGUgZXh0ZXJuYWwgbW9kdWxlIGFuZCB3aGVuIHRoZQoJCWJ1aWxkIGlzIGZpbmlzaGVkIGEgbmV3IE1vZHVsZS5zeW12ZXJzIGZpbGUgaXMgY3JlYXRlZAoJCWNvbnRhaW5pbmcgdGhlIHN1bSBvZiBhbGwgc3ltYm9scyBkZWZpbmVkIGFuZCBub3QgcGFydCBvZiB0aGUKCQlrZXJuZWwuCgkJCj09PSA4LiBUaXBzICYgVHJpY2tzCgotLS0gOC4xIFRlc3RpbmcgZm9yIENPTkZJR19GT09fQkFSCgoJTW9kdWxlcyBvZnRlbiBuZWVkcyB0byBjaGVjayBmb3IgY2VydGFpbiBDT05GSUdfIG9wdGlvbnMgdG8gZGVjaWRlIGlmCglhIHNwZWNpZmljIGZlYXR1cmUgc2hhbGwgYmUgaW5jbHVkZWQgaW4gdGhlIG1vZHVsZS4gV2hlbiBrYnVpbGQgaXMgdXNlZAoJdGhpcyBpcyBkb25lIGJ5IHJlZmVyZW5jaW5nIHRoZSBDT05GSUdfIHZhcmlhYmxlIGRpcmVjdGx5LgoKCQkjZnMvZXh0Mi9NYWtlZmlsZQoJCW9iai0kKENPTkZJR19FWFQyX0ZTKSArPSBleHQyLm8KCgkJZXh0Mi15IDo9IGJhbGxvYy5vIGJpdG1hcC5vIGRpci5vCgkJZXh0Mi0kKENPTkZJR19FWFQyX0ZTX1hBVFRSKSArPSB4YXR0ci5vCgoJRXh0ZXJuYWwgbW9kdWxlcyBoYXZlIHRyYWRpdGlvbmFsbHkgdXNlZCBncmVwIHRvIGNoZWNrIGZvciBzcGVjaWZpYwoJQ09ORklHXyBzZXR0aW5ncyBkaXJlY3RseSBpbiAuY29uZmlnLiBUaGlzIHVzYWdlIGlzIGJyb2tlbi4KCUFzIGludHJvZHVjZWQgYmVmb3JlIGV4dGVybmFsIG1vZHVsZXMgc2hhbGwgdXNlIGtidWlsZCB3aGVuIGJ1aWxkaW5nCglhbmQgdGhlcmVmb3JlIGNhbiB1c2UgdGhlIHNhbWUgbWV0aG9kcyBhcyBpbi1rZXJuZWwgbW9kdWxlcyB3aGVuIHRlc3RpbmcKCWZvciBDT05GSUdfIGRlZmluaXRpb25zLgoK