CkluIHRoaXMgZG9jdW1lbnQgeW91IHdpbGwgZmluZCBpbmZvcm1hdGlvbiBhYm91dDoKLSBob3cgdG8gYnVpbGQgZXh0ZXJuYWwgbW9kdWxlcwotIGhvdyB0byBtYWtlIHlvdXIgbW9kdWxlIHVzZSBrYnVpbGQgaW5mcmFzdHJ1Y3R1cmUKLSBob3cga2J1aWxkIHdpbGwgaW5zdGFsbCBhIGtlcm5lbAotIGhvdyB0byBpbnN0YWxsIG1vZHVsZXMgaW4gYSBub24tc3RhbmRhcmQgbG9jYXRpb24KCj09PSBUYWJsZSBvZiBDb250ZW50cwoKCT09PSAxIEludHJvZHVjdGlvbgoJPT09IDIgSG93IHRvIGJ1aWxkIGV4dGVybmFsIG1vZHVsZXMKCSAgIC0tLSAyLjEgQnVpbGRpbmcgZXh0ZXJuYWwgbW9kdWxlcwoJICAgLS0tIDIuMiBBdmFpbGFibGUgdGFyZ2V0cwoJICAgLS0tIDIuMyBBdmFpbGFibGUgb3B0aW9ucwoJICAgLS0tIDIuNCBQcmVwYXJpbmcgdGhlIGtlcm5lbCB0cmVlIGZvciBtb2R1bGUgYnVpbGQKCT09PSAzLiBFeGFtcGxlIGNvbW1hbmRzCgk9PT0gNC4gQ3JlYXRpbmcgYSBrYnVpbGQgZmlsZSBmb3IgYW4gZXh0ZXJuYWwgbW9kdWxlCgk9PT0gNS4gSW5jbHVkZSBmaWxlcwoJICAgLS0tIDUuMSBIb3cgdG8gaW5jbHVkZSBmaWxlcyBmcm9tIHRoZSBrZXJuZWwgaW5jbHVkZSBkaXIKCSAgIC0tLSA1LjIgRXh0ZXJuYWwgbW9kdWxlcyB1c2luZyBhbiBpbmNsdWRlLyBkaXIKCT09PSA2LiBNb2R1bGUgaW5zdGFsbGF0aW9uCgkgICAtLS0gNi4xIElOU1RBTExfTU9EX1BBVEgKCSAgIC0tLSA2LjIgSU5TVEFMTF9NT0RfRElSCgk9PT0gNy4gTW9kdWxlIHZlcnNpb25pbmcKCT09PSA4LiBUaXBzICYgVHJpY2tzCgkgICAtLS0gOC4xIFRlc3RpbmcgZm9yIENPTkZJR19GT09fQkFSCgoKCj09PSAxLiBJbnRyb2R1Y3Rpb24KCmtidWlsZCBpbmNsdWRlcyBmdW5jdGlvbmFsaXR5IGZvciBidWlsZGluZyBtb2R1bGVzIGJvdGgKd2l0aGluIHRoZSBrZXJuZWwgc291cmNlIHRyZWUgYW5kIG91dHNpZGUgdGhlIGtlcm5lbCBzb3VyY2UgdHJlZS4KVGhlIGxhdHRlciBpcyB1c3VhbGx5IHJlZmVycmVkIHRvIGFzIGV4dGVybmFsIG1vZHVsZXMgYW5kIGlzIHVzZWQKYm90aCBkdXJpbmcgZGV2ZWxvcG1lbnQgYW5kIGZvciBtb2R1bGVzIHRoYXQgYXJlIG5vdCBwbGFubmVkIHRvIGJlCmluY2x1ZGVkIGluIHRoZSBrZXJuZWwgdHJlZS4KCldoYXQgaXMgY292ZXJlZCB3aXRoaW4gdGhpcyBmaWxlIGlzIG1haW5seSBpbmZvcm1hdGlvbiB0byBhdXRob3JzCm9mIG1vZHVsZXMuIFRoZSBhdXRob3Igb2YgYW4gZXh0ZXJuYWwgbW9kdWxlcyBzaG91bGQgc3VwcGx5CmEgbWFrZWZpbGUgdGhhdCBoaWRlcyBtb3N0IG9mIHRoZSBjb21wbGV4aXR5IHNvIG9uZSBvbmx5IGhhcyB0byB0eXBlCidtYWtlJyB0byBidWxkIHRoZSBtb2R1bGUuIEEgY29tcGxldGUgZXhhbXBsZSB3aWxsIGJlIHByZXNlbnQgaW4KY2hhcHRlciCkLiBDcmVhdGluZyBhIGtidWlsZCBmaWxlIGZvciBhbiBleHRlcm5hbCBtb2R1bGUiLgoKCj09PSAyLiBIb3cgdG8gYnVpbGQgZXh0ZXJuYWwgbW9kdWxlcwoKa2J1aWxkIG9mZmVycyBmdW5jdGlvbmFsaXR5IHRvIGJ1aWxkIGV4dGVybmFsIG1vZHVsZXMsIHdpdGggdGhlCnByZXJlcXVpc2l0ZSB0aGF0IHRoZXJlIGlzIGEgcHJlLWJ1aWx0IGtlcm5lbCBhdmFpbGFibGUgd2l0aCBmdWxsIHNvdXJjZS4KQSBzdWJzZXQgb2YgdGhlIHRhcmdldHMgYXZhaWxhYmxlIHdoZW4gYnVpbGRpbmcgdGhlIGtlcm5lbCBpcyBhdmFpbGFibGUKd2hlbiBidWlsZGluZyBhbiBleHRlcm5hbCBtb2R1bGUuCgotLS0gMi4xIEJ1aWxkaW5nIGV4dGVybmFsIG1vZHVsZXMKCglVc2UgdGhlIGZvbGxvd2luZyBjb21tYW5kIHRvIGJ1aWxkIGFuIGV4dGVybmFsIG1vZHVsZToKCgkJbWFrZSAtQyA8cGF0aC10by1rZXJuZWw+IE09YHB3ZGAKCglGb3IgdGhlIHJ1bm5pbmcga2VybmVsIHVzZToKCQltYWtlIC1DIC9saWIvbW9kdWxlcy9gdW5hbWUgLXJgL2J1aWxkIE09YHB3ZGAKCglGb3IgdGhlIGFib3ZlIGNvbW1hbmQgdG8gc3VjY2VlZCB0aGUga2VybmVsIG11c3QgaGF2ZSBiZWVuIGJ1aWx0IHdpdGgKCW1vZHVsZXMgZW5hYmxlZC4KCglUbyBpbnN0YWxsIHRoZSBtb2R1bGVzIHRoYXQgd2VyZSBqdXN0IGJ1aWx0OgoKCQltYWtlIC1DIDxwYXRoLXRvLWtlcm5lbD4gTT1gcHdkYCBtb2R1bGVzX2luc3RhbGwKCglNb3JlIGNvbXBsZXggZXhhbXBsZXMgbGF0ZXIsIHRoZSBhYm92ZSBzaG91bGQgZ2V0IHlvdSBnb2luZy4KCi0tLSAyLjIgQXZhaWxhYmxlIHRhcmdldHMKCgkkS0RJUiByZWZlcnMgdG8gcGF0aCB0byBrZXJuZWwgc291cmNlIHRvcC1sZXZlbCBkaXJlY3RvcnkKCgltYWtlIC1DICRLRElSIE09YHB3ZGAKCQlXaWxsIGJ1aWxkIHRoZSBtb2R1bGUocykgbG9jYXRlZCBpbiBjdXJyZW50IGRpcmVjdG9yeS4KCQlBbGwgb3V0cHV0IGZpbGVzIHdpbGwgYmUgbG9jYXRlZCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkKCQlhcyB0aGUgbW9kdWxlIHNvdXJjZS4KCQlObyBhdHRlbXB0cyBhcmUgbWFkZSB0byB1cGRhdGUgdGhlIGtlcm5lbCBzb3VyY2UsIGFuZCBpdCBpcwoJCWEgcHJlY29uZGl0aW9uIHRoYXQgYSBzdWNjZXNzZnVsIG1ha2UgaGFzIGJlZW4gZXhlY3V0ZWQKCQlmb3IgdGhlIGtlcm5lbC4KCgltYWtlIC1DICRLRElSIE09YHB3ZGAgbW9kdWxlcwoJCVRoZSBtb2R1bGVzIHRhcmdldCBpcyBpbXBsaWVkIHdoZW4gbm8gdGFyZ2V0IGlzIGdpdmVuLgoJCVNhbWUgZnVuY3Rpb25hbGl0eSBhcyBpZiBubyB0YXJnZXQgd2FzIHNwZWNpZmllZC4KCQlTZWUgZGVzY3JpcHRpb24gYWJvdmUuCgoJbWFrZSAtQyAkS0RJUiBNPSRQV0QgbW9kdWxlc19pbnN0YWxsCgkJSW5zdGFsbCB0aGUgZXh0ZXJuYWwgbW9kdWxlKHMpLgoJCUluc3RhbGxhdGlvbiBkZWZhdWx0IGlzIGluIC9saWIvbW9kdWxlcy88a2VybmVsLXZlcnNpb24+L2V4dHJhLAoJCWJ1dCBtYXkgYmUgcHJlZml4ZWQgd2l0aCBJTlNUQUxMX01PRF9QQVRIIC0gc2VlIHNlcGFyYXRlIGNoYXRlci4KCgltYWtlIC1DICRLRElSIE09JFBXRCBjbGVhbgoJCVJlbW92ZSBhbGwgZ2VuZXJhdGVkIGZpbGVzIGZvciB0aGUgbW9kdWxlIC0gdGhlIGtlcm5lbAoJCXNvdXJjZSBkaXJlY3RvcnkgaXMgbm90IG1vZGRpZmllZC4KCgltYWtlIC1DICRLRElSIE09YHB3ZGAgaGVscAoJCWhlbHAgd2lsbCBsaXN0IHRoZSBhdmFpbGFibGUgdGFyZ2V0IHdoZW4gYnVpbGRpbmcgZXh0ZXJuYWwKCQltb2R1bGVzLgoKLS0tIDIuMyBBdmFpbGFibGUgb3B0aW9uczoKCgkkS0RJUiByZWZlciB0byBwYXRoIHRvIGtlcm5lbCBzcmMKCgltYWtlIC1DICRLRElSCgkJVXNlZCB0byBzcGVjaWZ5IHdoZXJlIHRvIGZpbmQgdGhlIGtlcm5lbCBzb3VyY2UuCgkJJyRLRElSJyByZXByZXNlbnQgdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUga2VybmVsIHNvdXJjZSBpcy4KCQlNYWtlIHdpbGwgYWN0dWFsbHkgY2hhbmdlIGRpcmVjdG9yeSB0byB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeQoJCXdoZW4gZXhlY3V0ZWQgYnV0IGNoYW5nZSBiYWNrIHdoZW4gZmluaXNoZWQuCgoJbWFrZSAtQyAkS0RJUiBNPWBwd2RgCgkJTT0gaXMgdXNlZCB0byB0ZWxsIGtidWlsZCB0aGF0IGFuIGV4dGVybmFsIG1vZHVsZSBpcwoJCWJlaW5nIGJ1aWx0LgoJCVRoZSBvcHRpb24gZ2l2ZW4gdG8gTT0gaXMgdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgZXh0ZXJuYWwKCQltb2R1bGUgKGtidWlsZCBmaWxlKSBpcyBsb2NhdGVkLgoJCVdoZW4gYW4gZXh0ZXJuYWwgbW9kdWxlIGlzIGJlaW5nIGJ1aWx0IG9ubHkgYSBzdWJzZXQgb2YgdGhlCgkJdXN1YWwgdGFyZ2V0cyBhcmUgYXZhaWxhYmxlLgoKCW1ha2UgLUMgJEtESVIgU1VCRElSUz1gcHdkYAoJCVNhbWUgYXMgTT0uIFRoZSBTVUJESVJTPSBzeW50YXggaXMga2VwdCBmb3IgYmFja3dhcmRzCgkJY29tcGF0aWJpbGl0eS4KCi0tLSAyLjQgUHJlcGFyaW5nIHRoZSBrZXJuZWwgdHJlZSBmb3IgbW9kdWxlIGJ1aWxkCgoJVG8gbWFrZSBzdXJlIHRoZSBrZXJuZWwgY29udGFpbnMgdGhlIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvCglidWlsZCBleHRlcm5hbCBtb2R1bGVzIHRoZSB0YXJnZXQgJ21vZHVsZXNfcHJlcGFyZScgbXVzdCBiZSB1c2VkLgoJJ21vZHVsZV9wcmVwYXJlJyBzb2xlbHkgZXhpc3RzIGFzIGEgc2ltcGxlIHdheSB0byBwcmVwYXJlCglhIGtlcm5lbCBmb3IgYnVpbGRpbmcgZXh0ZXJuYWwgbW9kdWxlcy4KCU5vdGU6IG1vZHVsZXNfcHJlcGFyZSB3aWxsIG5vdCBidWlsZCBNb2R1bGUuc3ltdmVycyBldmVuIGlmCgkgICAgICBDT05GSUdfTU9EVUxFVkVSU0lPTklORyBpcyBzZXQuCgkgICAgICBUaGVyZWZvcmUgYSBmdWxsIGtlcm5lbCBidWlsZCBuZWVkcyB0byBiZSBleGVjdXRlZCB0byBtYWtlCgkgICAgICBtb2R1bGUgdmVyc2lvbmluZyB3b3JrLgoKCj09PSAzLiBFeGFtcGxlIGNvbW1hbmRzCgpUaGlzIGV4YW1wbGUgc2hvd3MgdGhlIGFjdHVhbCBjb21tYW5kcyB0byBiZSBleGVjdXRlZCB3aGVuIGJ1aWxkaW5nCmFuIGV4dGVybmFsIG1vZHVsZSBmb3IgdGhlIGN1cnJlbnRseSBydW5uaW5nIGtlcm5lbC4KSW4gdGhlIGV4YW1wbGUgYmVsb3cgdGhlIGRpc3RyaWJ1dGlvbiBpcyBzdXBwb3NlZCB0byB1c2UgdGhlCmZhY2lsaXR5IHRvIGxvY2F0ZSBvdXRwdXQgZmlsZXMgZm9yIGEga2VybmVsIGNvbXBpbGUgaW4gYSBkaWZmZXJlbnQKZGlyZWN0b3J5IHRoYW4gdGhlIGtlcm5lbCBzb3VyY2UgLSBidXQgdGhlIGV4YW1wbGVzIHdpbGwgYWxzbyB3b3JrCndoZW4gdGhlIHNvdXJjZSBhbmQgdGhlIG91dHB1dCBmaWxlcyBhcmUgbWl4ZWQgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgoKIyBLZXJuZWwgc291cmNlCi9saWIvbW9kdWxlcy88a2VybmVsLXZlcnNpb24+L3NvdXJjZSAtPiAvdXNyL3NyYy9saW51eC08dmVyc2lvbj4KCiMgT3V0cHV0IGZyb20ga2VybmVsIGNvbXBpbGUKL2xpYi9tb2R1bGVzLzxrZXJuZWwtdmVyc2lvbj4vYnVpbGQgLT4gL3Vzci9zcmMvbGludXgtPHZlcnNpb24+LXVwCgpDaGFuZ2UgdG8gdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUga2J1aWxkIGZpbGUgaXMgbG9jYXRlZCBhbmQgZXhlY3V0ZQp0aGUgZm9sbG93aW5nIGNvbW1hbmRzIHRvIGJ1aWxkIHRoZSBtb2R1bGU6CgoJY2QgL2hvbWUvdXNlci9zcmMvbW9kdWxlCgltYWtlIC1DIC91c3Ivc3JjL2B1bmFtZSAtcmAvc291cmNlICAgICAgICAgICAgXAoJICAgICAgICBPPS9saWIvbW9kdWxlcy9gdW5hbWUtcmAvYnVpbGQgICAgICAgIFwKCSAgICAgICAgTT1gcHdkYAoKVGhlbiB0byBpbnN0YWxsIHRoZSBtb2R1bGUgdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKCgltYWtlIC1DIC91c3Ivc3JjL2B1bmFtZSAtcmAvc291cmNlICAgICAgICAgICAgXAoJICAgICAgICBPPS9saWIvbW9kdWxlcy9gdW5hbWUtcmAvYnVpbGQgICAgICAgIFwKCSAgICAgICAgTT1gcHdkYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCgkJbW9kdWxlc19pbnN0YWxsCgpJZiBvbmUgbG9va3MgY2xvc2VseSB5b3Ugd2lsbCBzZWUgdGhhdCB0aGlzIGlzIHRoZSBzYW1lIGNvbW1hbmRzIGFzCmxpc3RlZCBiZWZvcmUgLSB3aXRoIHRoZSBkaXJlY3RvcmllcyBzcGVsbGVkIG91dC4KClRoZSBhYm92ZSBhcmUgcmF0aGVyIGxvbmcgY29tbWFuZHMsIGFuZCB0aGUgZm9sbG93aW5nIGNoYXB0ZXIKbGlzdHMgYSBmZXcgdHJpY2tzIHRvIG1ha2UgaXQgYWxsIGVhc2llci4KCgo9PT0gNC4gQ3JlYXRpbmcgYSBrYnVpbGQgZmlsZSBmb3IgYW4gZXh0ZXJuYWwgbW9kdWxlCgprYnVpbGQgaXMgdGhlIGJ1aWxkIHN5c3RlbSBmb3IgdGhlIGtlcm5lbCwgYW5kIGV4dGVybmFsIG1vZHVsZXMKbXVzdCB1c2Uga2J1aWxkIHRvIHN0YXkgY29tcGF0aWJsZSB3aXRoIGNoYW5nZXMgaW4gdGhlIGJ1aWxkIHN5c3RlbQphbmQgdG8gcGljayB1cCB0aGUgcmlnaHQgZmxhZ3MgdG8gZ2NjIGV0Yy4KClRoZSBrYnVpbGQgZmlsZSB1c2VkIGFzIGlucHV0IHNoYWxsIGZvbGxvdyB0aGUgc3ludGF4IGRlc2NyaWJlZAppbiBEb2N1bWVudGF0aW9uL2tidWlsZC9tYWtlZmlsZXMudHh0LiBUaGlzIGNoYXB0ZXIgd2lsbCBpbnRyb2R1Y2UgYSBmZXcKbW9yZSB0cmlja3MgdG8gYmUgdXNlZCB3aGVuIGRlYWxpbmcgd2l0aCBleHRlcm5hbCBtb2R1bGVzLgoKSW4gdGhlIGZvbGxvd2luZyBhIE1ha2VmaWxlIHdpbGwgYmUgY3JlYXRlZCBmb3IgYSBtb2R1bGUgd2l0aCB0aGUKZm9sbG93aW5nIGZpbGVzOgoJODEyM19pZi5jCgk4MTIzX2lmLmgKCTgxMjNfcGNpLmMKCTgxMjNfYmluLm9fc2hpcHBlZAk8PSBCaW5hcnkgYmxvYgoKLS0tIDQuMSBTaGFyZWQgTWFrZWZpbGUgZm9yIG1vZHVsZSBhbmQga2VybmVsCgoJQW4gZXh0ZXJuYWwgbW9kdWxlIGFsd2F5cyBpbmNsdWRlcyBhIHdyYXBwZXIgTWFrZWZpbGUgc3VwcG9ydGluZwoJYnVpbGRpbmcgdGhlIG1vZHVsZSB1c2luZyAnbWFrZScgd2l0aCBubyBhcmd1bWVudHMuCglUaGUgTWFrZWZpbGUgcHJvdmlkZWQgd2lsbCBtb3N0IGxpa2VseSBpbmNsdWRlIGFkZGl0aW9uYWwKCWZ1bmN0aW9uYWxpdHkgc3VjaCBhcyB0ZXN0IHRhcmdldHMgZXRjLiBhbmQgdGhpcyBwYXJ0IHNoYWxsCgliZSBmaWx0ZXJlZCBhd2F5IGZyb20ga2J1aWxkIHNpbmNlIGl0IG1heSBpbXBhY3Qga2J1aWxkIGlmCgluYW1lIGNsYXNoZXMgb2NjdXJzLgoKCUV4YW1wbGUgMToKCQktLT4gZmlsZW5hbWU6IE1ha2VmaWxlCgkJaWZuZXEgKCQoS0VSTkVMUkVMRUFTRSksKQoJCSMga2J1aWxkIHBhcnQgb2YgbWFrZWZpbGUKCQlvYmotbSAgOj0gODEyMy5vCgkJODEyMy15IDo9IDgxMjNfaWYubyA4MTIzX3BjaS5vIDgxMjNfYmluLm8KCgkJZWxzZQoJCSMgTm9ybWFsIE1ha2VmaWxlCgoJCUtFUk5FTERJUiA6PSAvbGliL21vZHVsZXMvYHVuYW1lIC1yYC9idWlsZAoJCWFsbDo6CgkJCSQoTUFLRSkgLUMgJEtFUk5FTERJUiBNPWBwd2RgICRACgoJCSMgTW9kdWxlIHNwZWNpZmljIHRhcmdldHMKCQlnZW5iaW46CgkJCWVjaG8gIlgiID4gODEyM19iaW5pLm9fc2hpcHBlZAoKCQllbmRpZgoKCUluIGV4YW1wbGUgMSB0aGUgY2hlY2sgZm9yIEtFUk5FTFJFTEVBU0UgaXMgdXNlZCB0byBzZXBhcmF0ZQoJdGhlIHR3byBwYXJ0cyBvZiB0aGUgTWFrZWZpbGUuIGtidWlsZCB3aWxsIG9ubHkgc2VlIHRoZSB0d28KCWFzc2lnbm1lbnRzIHdoZXJlYXMgbWFrZSB3aWxsIHNlZSBldmVyeXRoaW5nIGV4Y2VwdCB0aGUgdHdvCglrYnVpbGQgYXNzaWdubWVudHMuCgoJSW4gcmVjZW50IHZlcnNpb25zIG9mIHRoZSBrZXJuZWwsIGtidWlsZCB3aWxsIGxvb2sgZm9yIGEgZmlsZSBuYW1lZAoJS2J1aWxkIGFuZCBhcyBzZWNvbmQgb3B0aW9uIGxvb2sgZm9yIGEgZmlsZSBuYW1lZCBNYWtlZmlsZS4KCVV0aWxpc2luZyB0aGUgS2J1aWxkIGZpbGUgbWFrZXMgdXMgc3BsaXQgdXAgdGhlIE1ha2VmaWxlIGluIGV4YW1wbGUgMQoJaW50byB0d28gZmlsZXMgYXMgc2hvd24gaW4gZXhhbXBsZSAyOgoKCUV4YW1wbGUgMjoKCQktLT4gZmlsZW5hbWU6IEtidWlsZAoJCW9iai1tICA6PSA4MTIzLm8KCQk4MTIzLXkgOj0gODEyM19pZi5vIDgxMjNfcGNpLm8gODEyM19iaW4ubwoKCQktLT4gZmlsZW5hbWU6IE1ha2VmaWxlCgkJS0VSTkVMRElSIDo9IC9saWIvbW9kdWxlcy9gdW5hbWUgLXJgL2J1aWxkCgkJYWxsOjoKCQkJJChNQUtFKSAtQyAkS0VSTkVMRElSIE09YHB3ZGAgJEAKCgkJIyBNb2R1bGUgc3BlY2lmaWMgdGFyZ2V0cwoJCWdlbmJpbjoKCQkJZWNobyAiWCIgPiA4MTIzX2Jpbl9zaGlwcGVkCgoKCUluIGV4YW1wbGUgMiB3ZSBhcmUgZG93biB0byB0d28gZmFpcmx5IHNpbXBsZSBmaWxlcyBhbmQgZm9yIHNpbXBsZQoJZmlsZXMgYXMgdXNlZCBpbiB0aGlzIGV4YW1wbGUgdGhlIHNwbGl0IGlzIHF1ZXN0aW9uYWJsZS4gQnV0IHNvbWUKCWV4dGVybmFsIG1vZHVsZXMgdXNlIE1ha2VmaWxlcyBvZiBzZXZlcmFsIGh1bmRyZWQgbGluZXMgYW5kIGhlcmUgaXQKCXJlYWxseSBwYXlzIG9mZiB0byBzZXBhcmF0ZSB0aGUga2J1aWxkIHBhcnQgZnJvbSB0aGUgcmVzdC4KCUV4YW1wbGUgMyBzaG93cyBhIGJhY2t3YXJkIGNvbXBhdGlibGUgdmVyc2lvbi4KCglFeGFtcGxlIDM6CgkJLS0+IGZpbGVuYW1lOiBLYnVpbGQKCQlvYmotbSAgOj0gODEyMy5vCgkJODEyMy15IDo9IDgxMjNfaWYubyA4MTIzX3BjaS5vIDgxMjNfYmluLm8KCgkJLS0+IGZpbGVuYW1lOiBNYWtlZmlsZQoJCWlmbmVxICgkKEtFUk5FTFJFTEVBU0UpLCkKCQlpbmNsdWRlIEtidWlsZAoJCWVsc2UKCQkjIE5vcm1hbCBNYWtlZmlsZQoKCQlLRVJORUxESVIgOj0gL2xpYi9tb2R1bGVzL2B1bmFtZSAtcmAvYnVpbGQKCQlhbGw6OgoJCQkkKE1BS0UpIC1DICRLRVJORUxESVIgTT1gcHdkYCAkQAoKCQkjIE1vZHVsZSBzcGVjaWZpYyB0YXJnZXRzCgkJZ2VuYmluOgoJCQllY2hvICJYIiA+IDgxMjNfYmluX3NoaXBwZWQKCgkJZW5kaWYKCgkJVGhlIHRyaWNrIGhlcmUgaXMgdG8gaW5jbHVkZSB0aGUgS2J1aWxkIGZpbGUgZnJvbSBNYWtlZmlsZSBzbwoJCWlmIGFuIG9sZGVyIHZlcnNpb24gb2Yga2J1aWxkIHBpY2tzIHVwIHRoZSBNYWtlZmlsZSB0aGUgS2J1aWxkCgkJZmlsZSB3aWxsIGJlIGluY2x1ZGVkLgoKLS0tIDQuMiBCaW5hcnkgYmxvYnMgaW5jbHVkZWQgaW4gYSBtb2R1bGUKCglTb21lIGV4dGVybmFsIG1vZHVsZXMgbmVlZHMgdG8gaW5jbHVkZSBhIC5vIGFzIGEgYmxvYi4ga2J1aWxkCgloYXMgc3VwcG9ydCBmb3IgdGhpcywgYnV0IHJlcXVpcmVzIHRoZSBibG9iIGZpbGUgdG8gYmUgbmFtZWQKCTxmaWxlbmFtZT5fc2hpcHBlZC4gSW4gb3VyIGV4YW1wbGUgdGhlIGJsb2IgaXMgbmFtZWQKCTgxMjNfYmluLm9fc2hpcHBlZCBhbmQgd2hlbiB0aGUga2J1aWxkIHJ1bGVzIGtpY2sgaW4gdGhlIGZpbGUKCTgxMjNfYmluLm8gaXMgY3JlYXRlZCBhcyBhIHNpbXBsZSBjb3B5IG9mZiB0aGUgODIxM19iaW4ub19zaGlwcGVkIGZpbGUKCXdpdGggdGhlIF9zaGlwcGVkIHBhcnQgc3RyaXBwZWQgb2YgdGhlIGZpbGVuYW1lLgoJVGhpcyBhbGxvd3MgdGhlIDgxMjNfYmluLm8gZmlsZW5hbWUgdG8gYmUgdXNlZCBpbiB0aGUgYXNzaWdubWVudCB0bwoJdGhlIG1vZHVsZS4KCglFeGFtcGxlIDQ6CgkJb2JqLW0gIDo9IDgxMjMubwoJCTgxMjMteSA6PSA4MTIzX2lmLm8gODEyM19wY2kubyA4MTIzX2Jpbi5vCgoJSW4gZXhhbXBsZSA0IHRoZXJlIGlzIG5vIGRpc3RpbmN0aW9uIGJldHdlZW4gdGhlIG9yZGluYXJ5IC5jLy5oIGZpbGVzCglhbmQgdGhlIGJpbmFyeSBmaWxlLiBCdXQga2J1aWxkIHdpbGwgcGljayB1cCBkaWZmZXJlbnQgcnVsZXMgdG8gY3JlYXRlCgl0aGUgLm8gZmlsZS4KCgo9PT0gNS4gSW5jbHVkZSBmaWxlcwoKSW5jbHVkZSBmaWxlcyBhcmUgYSBuZWNlc3NpdHkgd2hlbiBhIC5jIGZpbGUgdXNlcyBzb21ldGhpbmcgZnJvbSBhbm90aGVyIC5jCmZpbGVzIChub3Qgc3RyaWN0bHkgaW4gdGhlIHNlbnNlIG9mIC5jIGJ1dCBpZiBnb29kIHByb2dyYW1taW5nIHByYWN0aWNlIGlzCnVzZWQpLiBBbnkgbW9kdWxlIHRoYXQgY29uc2lzdCBvZiBtb3JlIHRoYW4gb25lIC5jIGZpbGUgd2lsbCBoYXZlIGEgLmggZmlsZQpmb3Igb25lIG9mIHRoZSAuYyBmaWxlcy4gCi0gSWYgdGhlIC5oIGZpbGUgb25seSBkZXNjcmliZXMgYSBtb2R1bGUgaW50ZXJuYWwgaW50ZXJmYWNlIHRoZW4gdGhlIC5oIGZpbGUKICBzaGFsbCBiZSBwbGFjZWQgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSAuYyBmaWxlcy4KLSBJZiB0aGUgLmggZmlsZXMgZGVzY3JpYmUgYW4gaW50ZXJmYWNlIHVzZWQgYnkgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbAogIGxvY2F0ZWQgaW4gZGlmZmVyZW50IGRpcmVjdG9yaWVzLCB0aGUgLmggZmlsZXMgc2hhbGwgYmUgbG9jYXRlZCBpbgogIGluY2x1ZGUvbGludXgvIG9yIG90aGVyIGluY2x1ZGUvIGRpcmVjdG9yaWVzIGFzIGFwcHJvcHJpYXRlLgoKT25lIGV4Y2VwdGlvbiBmb3IgdGhpcyBydWxlIGlzIGxhcmdlciBzdWJzeXN0ZW1zIHRoYXQgaGF2ZSB0aGVpciBvd24gZGlyZWN0b3J5CnVuZGVyIGluY2x1ZGUvIHN1Y2ggYXMgaW5jbHVkZS9zY3NpLiBBbm90aGVyIGV4Y2VwdGlvbiBpcyBhcmNoLXNwZWNpZmljCi5oIGZpbGVzIHdoaWNoIGFyZSBsb2NhdGVkIHVuZGVyIGluY2x1ZGUvYXNtLSQoQVJDSCkvKi4KCkV4dGVybmFsIG1vZHVsZXMgaGF2ZSBhIHRlbmRlbmN5IHRvIGxvY2F0ZSBpbmNsdWRlIGZpbGVzIGluIGEgc2VwYXJhdGUgaW5jbHVkZS8KZGlyZWN0b3J5IGFuZCB0aGVyZWZvcmUgbmVlZHMgdG8gZGVhbCB3aXRoIHRoaXMgaW4gdGhlaXIga2J1aWxkIGZpbGUuCgotLS0gNS4xIEhvdyB0byBpbmNsdWRlIGZpbGVzIGZyb20gdGhlIGtlcm5lbCBpbmNsdWRlIGRpcgoKCVdoZW4gYSBtb2R1bGUgbmVlZHMgdG8gaW5jbHVkZSBhIGZpbGUgZnJvbSBpbmNsdWRlL2xpbnV4LyB0aGVuIG9uZQoJanVzdCB1c2VzOgoKCQkjaW5jbHVkZSA8bGludXgvbW9kdWxlcy5oPgoKCWtidWlsZCB3aWxsIG1ha2Ugc3VyZSB0byBhZGQgb3B0aW9ucyB0byBnY2Mgc28gdGhlIHJlbGV2YW50CglkaXJlY3RvcmllcyBhcmUgc2VhcmNoZWQuCglMaWtld2lzZSBmb3IgLmggZmlsZXMgcGxhY2VkIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgLmMgZmlsZS4KCgkJI2luY2x1ZGUgIjgxMjNfaWYuaCIKCgl3aWxsIGRvIHRoZSBqb2IuCgotLS0gNS4yIEV4dGVybmFsIG1vZHVsZXMgdXNpbmcgYW4gaW5jbHVkZS8gZGlyCgoJRXh0ZXJuYWwgbW9kdWxlcyBvZnRlbiBsb2NhdGUgdGhlaXIgLmggZmlsZXMgaW4gYSBzZXBhcmF0ZSBpbmNsdWRlLwoJZGlyZWN0b3J5IGFsdGhvdWdoIHRoaXMgaXMgbm90IHVzdWFsIGtlcm5lbCBzdHlsZS4gV2hlbiBhbiBleHRlcm5hbAoJbW9kdWxlIHVzZXMgYW4gaW5jbHVkZS8gZGlyIHRoZW4ga2J1aWxkIG5lZWRzIHRvIGJlIHRvbGQgc28uCglUaGUgdHJpY2sgaGVyZSBpcyB0byB1c2UgZWl0aGVyIEVYVFJBX0NGTEFHUyAodGFrZSBlZmZlY3QgZm9yIGFsbCAuYwoJZmlsZXMpIG9yIENGTEFHU18kRi5vICh0YWtlIGVmZmVjdCBvbmx5IGZvciBhIHNpbmdsZSBmaWxlKS4KCglJbiBvdXIgZXhhbXBsZSBpZiB3ZSBtb3ZlIDgxMjNfaWYuaCB0byBhIHN1YmRpcmVjdG9yeSBuYW1lZCBpbmNsdWRlLwoJdGhlIHJlc3VsdGluZyBLYnVpbGQgZmlsZSB3b3VsZCBsb29rIGxpa2U6CgoJCS0tPiBmaWxlbmFtZTogS2J1aWxkCgkJb2JqLW0gIDo9IDgxMjMubwoKCQlFWFRSQV9DRkxBR1MgOj0gLUlpbmNsdWRlCgkJODEyMy15IDo9IDgxMjNfaWYubyA4MTIzX3BjaS5vIDgxMjNfYmluLm8KCglOb3RlIHRoYXQgaW4gdGhlIGFzc2luZ21lbnQgdGhlcmUgaXMgbm8gc3BhY2UgYmV0d2VlbiAtSSBhbmQgdGhlIHBhdGguCglUaGlzIGlzIGEga2J1aWxkIGxpbWl0YXRpb24gYW5kIG5vIHNwYWNlIG11c3QgYmUgcHJlc2VudC4KCgo9PT0gNi4gTW9kdWxlIGluc3RhbGxhdGlvbgoKTW9kdWxlcyB3aGljaCBhcmUgaW5jbHVkZWQgaW4gdGhlIGtlcm5lbCBpcyBpbnN0YWxsZWQgaW4gdGhlIGRpcmVjdG9yeToKCgkvbGliL21vZHVsZXMvJChLRVJORUxSRUxFQVNFKS9rZXJuZWwKCkV4dGVybmFsIG1vZHVsZXMgYXJlIGluc3RhbGxlZCBpbiB0aGUgZGlyZWN0b3J5OgoKCS9saWIvbW9kdWxlcy8kKEtFUk5FTFJFTEVBU0UpL2V4dHJhCgotLS0gNi4xIElOU1RBTExfTU9EX1BBVEgKCglBYm92ZSBhcmUgdGhlIGRlZmF1bHQgZGlyZWN0b3JpZXMsIGJ1dCBhcyBhbHdheXMgc29tZSBsZXZlbCBvZgoJY3VzdG9taXphdGlvbiBpcyBwb3NzaWJsZS4gT25lIGNhbiBwcmVmaXggdGhlIHBhdGggdXNpbmcgdGhlIHZhcmlhYmxlCglJTlNUQUxMX01PRF9QQVRIOgoKCQkkIG1ha2UgSU5TVEFMTF9NT0RfUEFUSD0vZnJvZG8gbW9kdWxlc19pbnN0YWxsCgkJPT4gSW5zdGFsbCBkaXI6IC9mcm9kby9saWIvbW9kdWxlcy8kKEtFUk5FTFJFTEVBU0UpL2tlcm5lbAoKCUlOU1RBTExfTU9EX1BBVEggbWF5IGJlIHNldCBhcyBhbiBvcmRpbmFyeSBzaGVsbCB2YXJpYWJsZSBvciBhcyBpbiB0aGUKCWV4YW1wbGUgYWJvdmUgYmUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kbGluZSB3aGVuIGNhbGxpbmcgbWFrZS4KCUlOU1RBTExfTU9EX1BBVEggaGFzIGVmZmVjdCBib3RoIHdoZW4gaW5zdGFsbGluZyBtb2R1bGVzIGluY2x1ZGVkIGluCgl0aGUga2VybmVsIGFzIHdlbGwgYXMgd2hlbiBpbnN0YWxsaW5nIGV4dGVybmFsIG1vZHVsZXMuCgotLS0gNi4yIElOU1RBTExfTU9EX0RJUgoKCVdoZW4gaW5zdGFsbGluZyBleHRlcm5hbCBtb2R1bGVzIHRoZXkgYXJlIGRlZmF1bHQgaW5zdGFsbGVkIGluIGEKCWRpcmVjdG9yeSB1bmRlciAvbGliL21vZHVsZXMvJChLRVJORUxSRUxFQVNFKS9leHRyYSwgYnV0IG9uZSBtYXkgd2lzaAoJdG8gbG9jYXRlIG1vZHVsZXMgZm9yIGEgc3BlY2lmaWMgZnVuY3Rpb25hbGl0eSBpbiBhIHNlcGFyYXRlCglkaXJlY3RvcnkuIEZvciB0aGlzIHB1cnBvc2Ugb25lIGNhbiB1c2UgSU5TVEFMTF9NT0RfRElSIHRvIHNwZWNpZnkgYW4KCWFsdGVybmF0aXZlIG5hbWUgdGhhbiAnZXh0cmEnLgoKCQkkIG1ha2UgSU5TVEFMTF9NT0RfRElSPWdhbmRhbGYgLUMgS0VSTkVMRElSIFwKCQkJTT1gcHdkYCBtb2R1bGVzX2luc3RhbGwKCQk9PiBJbnN0YWxsIGRpcjogL2xpYi9tb2R1bGVzLyQoS0VSTkVMUkVMRUFTRSkvZ2FuZGFsZgoKCj09PSA3LiBNb2R1bGUgdmVyc2lvbmluZwoKTW9kdWxlIHZlcnNpb25pbmcgYXJlIGVuYWJsZWQgYnkgdGhlIENPTkZJR19NT0RWRVJTSU9OUyB0YWcuCgpNb2R1bGUgdmVyc2lvbmluZyBpcyB1c2VkIGFzIGEgc2ltcGxlIEFCSSBjb25zaXN0ZW5jeSBjaGVjay4gVGhlIE1vZHVsZQp2ZXJzaW9uaW5nIGNyZWF0ZXMgYSBDUkMgdmFsdWUgb2YgdGhlIGZ1bGwgcHJvdG90eXBlIGZvciBhbiBleHBvcnRlZCBzeW1ib2wgYW5kCndoZW4gYSBtb2R1bGUgaXMgbG9hZGVkL3VzZWQgdGhlbiB0aGUgQ1JDIHZhbHVlcyBjb250YWluZWQgaW4gdGhlIGtlcm5lbCBhcmUKY29tcGFyZWQgd2l0aCBzaW1pbGFyIHZhbHVlcyBpbiB0aGUgbW9kdWxlLiBJZiB0aGV5IGFyZSBub3QgZXF1YWwgdGhlbiB0aGUKa2VybmVsIHJlZnVzZXMgdG8gbG9hZCB0aGUgbW9kdWxlLgoKRHVyaW5nIGEga2VybmVsIGJ1aWxkIGEgZmlsZSBuYW1lZCBNb2R1bGUuc3ltdmVycyB3aWxsIGJlIGdlbmVyYXRlZC4gVGhpcwpmaWxlIGluY2x1ZGVzIHRoZSBzeW1ib2wgdmVyc2lvbiBvZiBhbGwgc3ltYm9scyB3aXRoaW4gdGhlIGtlcm5lbC4gSWYgdGhlIApNb2R1bGUuc3ltdmVycyBmaWxlIGlzIHNhdmVkIGZyb20gdGhlIGxhc3QgZnVsbCBrZXJuZWwgY29tcGlsZSBvbmUgZG9lcyBub3QKaGF2ZSB0byBkbyBhIGZ1bGwga2VybmVsIGNvbXBpbGUgdG8gYnVpbGQgYSBtb2R1bGUgdmVyc2lvbidzIGNvbXBhdGlibGUgbW9kdWxlLgoKPT09IDguIFRpcHMgJiBUcmlja3MKCi0tLSA4LjEgVGVzdGluZyBmb3IgQ09ORklHX0ZPT19CQVIKCglNb2R1bGVzIG9mdGVuIG5lZWRzIHRvIGNoZWNrIGZvciBjZXJ0YWluIENPTkZJR18gb3B0aW9ucyB0byBkZWNpZGUgaWYKCWEgc3BlY2lmaWMgZmVhdHVyZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiB0aGUgbW9kdWxlLiBXaGVuIGtidWlsZCBpcyB1c2VkCgl0aGlzIGlzIGRvbmUgYnkgcmVmZXJlbmNpbmcgdGhlIENPTkZJR18gdmFyaWFibGUgZGlyZWN0bHkuCgoJCSNmcy9leHQyL01ha2VmaWxlCgkJb2JqLSQoQ09ORklHX0VYVDJfRlMpICs9IGV4dDIubwoKCQlleHQyLXkgOj0gYmFsbG9jLm8gYml0bWFwLm8gZGlyLm8KCQlleHQyLSQoQ09ORklHX0VYVDJfRlNfWEFUVFIpICs9IHhhdHRyLm8KCglFeHRlcm5hbCBtb2R1bGVzIGhhdmUgdHJhZGl0aW9uYWxseSB1c2VkIGdyZXAgdG8gY2hlY2sgZm9yIHNwZWNpZmljCglDT05GSUdfIHNldHRpbmdzIGRpcmVjdGx5IGluIC5jb25maWcuIFRoaXMgdXNhZ2UgaXMgYnJva2VuLgoJQXMgaW50cm9kdWNlZCBiZWZvcmUgZXh0ZXJuYWwgbW9kdWxlcyBzaGFsbCB1c2Uga2J1aWxkIHdoZW4gYnVpbGRpbmcKCWFuZCB0aGVyZWZvcmUgY2FuIHVzZSB0aGUgc2FtZSBtZXRob2RzIGFzIGluLWtlcm5lbCBtb2R1bGVzIHdoZW4gdGVzdGluZwoJZm9yIENPTkZJR18gZGVmaW5pdGlvbnMuCgo=