QW5hbHlzaXMgb2YgQWxnb3JpdGhtczogQXN5bXB0b3RpYyBBbmFseXNpcywgIFdvcnN0LCBBdmVyYWdlIGFuZCBCZXN0IENhc2VzLCAgQXN5bXB0b3RpYyBOb3RhdGlvbnMsICBBbmFseXNpcyBvZiBMb29wcywgIFNvbHZpbmcgUmVjdXJyZW5jZXMsICBBbW9ydGl6ZWQgQW5hbHlzaXMsIFdoYXQgZG9lcyAmbHNxdW87U3BhY2UgQ29tcGxleGl0eSZyc3F1bzsgbWVhbj8sICAgTlAtQ29tcGxldGVuZXNzIEludHJvZHVjdGlvbiwgIEEgVGltZSBDb21wbGV4aXR5IFF1ZXN0aW9uLCAgVGltZSBDb21wbGV4aXR5IG9mIGJ1aWxkaW5nIGEgaGVhcCwgUXVpeiBvbiBBbmFseXNpcyBvZiBBbGdvcml0aG1zLCBRdWl6IG9uIFJlY3VycmVuY2VzCgpTZWFyY2hpbmcgYW5kIFNvcnRpbmc6IEJpbmFyeSBTZWFyY2gsIFNlbGVjdGlvbiBTb3J0LCAgQnViYmxlIFNvcnQsIEluc2VydGlvbiBTb3J0LCAgTWVyZ2UgU29ydCwgIEhlYXAgU29ydCwgIFF1aWNrU29ydCwgQnVja2V0IFNvcnQsIFNoZWxsU29ydCwgSW50ZXJwb2xhdGlvbiBzZWFyY2ggdnMgQmluYXJ5IHNlYXJjaCwgIFN0YWJpbGl0eSBpbiBzb3J0aW5nIGFsZ29yaXRobXMsICBXaGVuIGRvZXMgdGhlIHdvcnN0IGNhc2Ugb2YgUXVpY2tzb3J0IG9jY3VyPywgIExvd2VyIGJvdW5kIGZvciBjb21wYXJpc29uIGJhc2VkIHNvcnRpbmcgYWxnb3JpdGhtcy4gIFdoaWNoIHNvcnRpbmcgYWxnb3JpdGhtIG1ha2VzIG1pbmltdW0gbnVtYmVyIG9mIG1lbW9yeSB3cml0ZXM/LCAgRmluZCB0aGUgTWluaW11bSBsZW5ndGggVW5zb3J0ZWQgU3ViYXJyYXksIHNvcnRpbmcgd2hpY2ggbWFrZXMgdGhlIGNvbXBsZXRlIGFycmF5IHNvcnRlZCwgIE1lcmdlIFNvcnQgZm9yIExpbmtlZCBMaXN0cywgU29ydCBhIG5lYXJseSBzb3J0ZWQgKG9yIEsgc29ydGVkKSBhcnJheSwgIEl0ZXJhdGl2ZSBRdWljayBTb3J0LCBRdWlja1NvcnQgb24gU2luZ2x5IExpbmtlZCBMaXN0LCBRdWlja1NvcnQgb24gRG91Ymx5IExpbmtlZCBMaXN0LCBGaW5kIGsgY2xvc2VzdCBlbGVtZW50cyB0byBhIGdpdmVuIHZhbHVlLCBTb3J0IG4gbnVtYmVycyBpbiByYW5nZSBmcm9tIDAgdG8gbl4yICZuZGFzaDsgMSBpbiBsaW5lYXIgdGltZSwgIEEgUHJvYmxlbSBpbiBNYW55IEJpbmFyeSBTZWFyY2ggSW1wbGVtZW50YXRpb25zLCBTZWFyY2ggaW4gYW4gYWxtb3N0IHNvcnRlZCBhcnJheSwgUXVpeiBvbiBTb3J0aW5nLCBRdWl6IG9uIFNlYXJjaGluZwoKR3JlZWR5IEFsZ29yaXRobXM6IEFjdGl2aXR5IFNlbGVjdGlvbiBQcm9ibGVtLCBLcnVza2FsJnJzcXVvO3MgTWluaW11bSBTcGFubmluZyBUcmVlIEFsZ29yaXRobSwgSHVmZm1hbiBDb2RpbmcsIEVmZmljaWVudCBIdWZmbWFuIENvZGluZyBmb3IgU29ydGVkIElucHV0LCBQcmltJnJzcXVvO3MgTWluaW11bSBTcGFubmluZyBUcmVlIEFsZ29yaXRobSwgUHJpbSZyc3F1bztzIE1TVCBmb3IgQWRqYWNlbmN5IExpc3QgUmVwcmVzZW50YXRpb24sIERpamtzdHJhJnJzcXVvO3MgU2hvcnRlc3QgUGF0aCBBbGdvcml0aG0sIERpamtzdHJhJnJzcXVvO3MgQWxnb3JpdGhtIGZvciBBZGphY2VuY3kgTGlzdCBSZXByZXNlbnRhdGlvbiwgUXVpeiBvbiBHcmVlZHkgQWxnb3JpdGhtcwoKRHluYW1pYyBQcm9ncmFtbWluZzogT3ZlcmxhcHBpbmcgU3VicHJvYmxlbXMgUHJvcGVydHksIE9wdGltYWwgU3Vic3RydWN0dXJlIFByb3BlcnR5LCBMb25nZXN0IEluY3JlYXNpbmcgU3Vic2VxdWVuY2UsIExvbmdlc3QgQ29tbW9uIFN1YnNlcXVlbmNlLCBFZGl0IERpc3RhbmNlLCBNaW4gQ29zdCBQYXRoLCBDb2luIENoYW5nZSwgTWF0cml4IENoYWluIE11bHRpcGxpY2F0aW9uLCBCaW5vbWlhbCBDb2VmZmljaWVudCwgMC0xIEtuYXBzYWNrIFByb2JsZW0sIEVnZyBEcm9wcGluZyBQdXp6bGUsIExvbmdlc3QgUGFsaW5kcm9taWMgU3Vic2VxdWVuY2UsIEN1dHRpbmcgYSBSb2QsIE1heGltdW0gU3VtIEluY3JlYXNpbmcgU3Vic2VxdWVuY2UsIExvbmdlc3QgQml0b25pYyBTdWJzZXF1ZW5jZSwgRmxveWQgV2Fyc2hhbGwgQWxnb3JpdGhtLCBQYWxpbmRyb21lIFBhcnRpdGlvbmluZywgUGFydGl0aW9uIHByb2JsZW0sIFdvcmQgV3JhcCBQcm9ibGVtLCBNYXhpbXVtIExlbmd0aCBDaGFpbiBvZiBQYWlycywgVmFyaWF0aW9ucyBvZiBMSVMsIEJveCBTdGFja2luZyBQcm9ibGVtLCBQcm9ncmFtIGZvciBGaWJvbmFjY2kgbnVtYmVycywgTWluaW11bSBudW1iZXIgb2YganVtcHMgdG8gcmVhY2ggZW5kLCBNYXhpbXVtIHNpemUgc3F1YXJlIHN1Yi1tYXRyaXggd2l0aCBhbGwgMXMsIFVnbHkgTnVtYmVycywgTGFyZ2VzdCBTdW0gQ29udGlndW91cyBTdWJhcnJheSwgTG9uZ2VzdCBQYWxpbmRyb21pYyBTdWJzdHJpbmcsIEJlbGxtYW4mbmRhc2g7Rm9yZCBBbGdvcml0aG0gZm9yIFNob3J0ZXN0IFBhdGhzLCBPcHRpbWFsIEJpbmFyeSBTZWFyY2ggVHJlZSwgTGFyZ2VzdCBJbmRlcGVuZGVudCBTZXQgUHJvYmxlbSwgU3Vic2V0IFN1bSBQcm9ibGVtLCBNYXhpbXVtIHN1bSByZWN0YW5nbGUgaW4gYSAyRCBtYXRyaXgsIENvdW50IG51bWJlciBvZiBiaW5hcnkgc3RyaW5ncyB3aXRob3V0IGNvbnNlY3V0aXZlIDE/cywgIEJvb2xlYW4gUGFyZW50aGVzaXphdGlvbiBQcm9ibGVtLCAgQ291bnQgd2F5cyB0byByZWFjaCB0aGUgbiZyc3F1bzt0aCBzdGFpci4gIFNlZSBEeW5hbWljIFByb2dyYW1taW5nIFRhZyBmb3IgbW9yZSBwcm9ibGVtcywgUXVpeiBvbiBEeW5hbWljIFByb2dyYW1taW5nCgpQYXR0ZXJuIFNlYXJjaGluZzogTmFpdmUgUGF0dGVybiBTZWFyY2hpbmcsIEtNUCBBbGdvcml0aG0sIFJhYmluLUthcnAgQWxnb3JpdGhtLCBBIE5haXZlIFBhdHRlcm4gU2VhcmNoaW5nIFF1ZXN0aW9uLCBGaW5pdGUgQXV0b21hdGEsIEVmZmljaWVudCBDb25zdHJ1Y3Rpb24gb2YgRmluaXRlIEF1dG9tYXRhLCBCb3llciBNb29yZSBBbGdvcml0aG0gJm5kYXNoOyBCYWQgQ2hhcmFjdGVyIEhldXJpc3RpYywgU3VmZml4IEFycmF5LCBBbmFncmFtIFN1YnN0cmluZyBTZWFyY2ggKE9yIFNlYXJjaCBmb3IgYWxsIHBlcm11dGF0aW9ucykKCkJhY2t0cmFja2luZzogIFByaW50IGFsbCBwZXJtdXRhdGlvbnMgb2YgYSBnaXZlbiBzdHJpbmcsIFRoZSBLbmlnaHQmcnNxdW87cyB0b3VyIHByb2JsZW0sIFJhdCBpbiBhIE1hemUsIE4gUXVlZW4gUHJvYmxlbSwgU3Vic2V0IFN1bSwgbSBDb2xvcmluZyBQcm9ibGVtLCBIYW1pbHRvbmlhbiBDeWNsZSwgU3Vkb2t1LCAgVHVnIG9mIFdhciwgIFNvbHZpbmcgQ3J5cHRhcml0aG1ldGljIFB1enpsZXMKCkRpdmlkZSBhbmQgQ29ucXVlcjogIEludHJvZHVjdGlvbiwgV3JpdGUgeW91ciBvd24gcG93KHgsIG4pIHRvIGNhbGN1bGF0ZSB4Km4sIE1lZGlhbiBvZiB0d28gc29ydGVkIGFycmF5cywgQ291bnQgSW52ZXJzaW9ucyAsIENsb3Nlc3QgUGFpciBvZiBQb2ludHMsIFN0cmFzc2VuJnJzcXVvO3MgTWF0cml4IE11bHRpcGxpY2F0aW9uLCBTZWUgdGhpcyBmb3IgbW9yZSwgUXVpeiBvbiBEaXZpZGUgYW5kIENvbnF1ZXIKCkdlb21ldHJpYyBBbGdvcml0aG1zOiBDbG9zZXN0IFBhaXIgb2YgUG9pbnRzIHwgTyhubG9nbikgSW1wbGVtZW50YXRpb24sIEhvdyB0byBjaGVjayBpZiB0d28gZ2l2ZW4gbGluZSBzZWdtZW50cyBpbnRlcnNlY3Q/LCBIb3cgdG8gY2hlY2sgaWYgYSBnaXZlbiBwb2ludCBsaWVzIGluc2lkZSBvciBvdXRzaWRlIGEgcG9seWdvbj8sIENvbnZleCBIdWxsIHwgU2V0IDEgKEphcnZpcyZyc3F1bztzIEFsZ29yaXRobSBvciBXcmFwcGluZyksIENvbnZleCBIdWxsIHwgU2V0IDIgKEdyYWhhbSBTY2FuKSwgR2l2ZW4gbiBsaW5lIHNlZ21lbnRzLCBmaW5kIGlmIGFueSB0d28gc2VnbWVudHMgaW50ZXJzZWN0LCBDaGVjayB3aGV0aGVyIGEgZ2l2ZW4gcG9pbnQgbGllcyBpbnNpZGUgYSB0cmlhbmdsZSBvciBub3QKCk1hdGhlbWF0aWNhbCBBbGdvcml0aG1zOiBXcml0ZSBhbiBFZmZpY2llbnQgTWV0aG9kIHRvIENoZWNrIGlmIGEgTnVtYmVyIGlzIE11bHRpcGxlIG9mIDMsICAgRWZmaWNpZW50IHdheSB0byBtdWx0aXBseSB3aXRoIDcsICAgV3JpdGUgYSBDIHByb2dyYW0gdG8gcHJpbnQgYWxsIHBlcm11dGF0aW9ucyBvZiBhIGdpdmVuIHN0cmluZywgICBMdWNreSBOdW1iZXJzLCAgIFdyaXRlIGEgcHJvZ3JhbSB0byBhZGQgdHdvIG51bWJlcnMgaW4gYmFzZSAxNCwgICBCYWJ5bG9uaWFuIG1ldGhvZCBmb3Igc3F1YXJlIHJvb3QsICAgTXVsdGlwbHkgdHdvIGludGVnZXJzIHdpdGhvdXQgdXNpbmcgbXVsdGlwbGljYXRpb24sIGRpdmlzaW9uIGFuZCBiaXR3aXNlIG9wZXJhdG9ycywgYW5kIG5vIGxvb3BzLCAgIFByaW50IGFsbCBjb21iaW5hdGlvbnMgb2YgcG9pbnRzIHRoYXQgY2FuIGNvbXBvc2UgYSBnaXZlbiBudW1iZXIsICAgV3JpdGUgeW91IG93biBQb3dlciB3aXRob3V0IHVzaW5nIG11bHRpcGxpY2F0aW9uKCopIGFuZCBkaXZpc2lvbigvKSBvcGVyYXRvcnMsICAgUHJvZ3JhbSBmb3IgRmlib25hY2NpIG51bWJlcnMsICAgQXZlcmFnZSBvZiBhIHN0cmVhbSBvZiBudW1iZXJzLCAgIENvdW50IG51bWJlcnMgdGhhdCBkb24mcnNxdW87dCBjb250YWluIDMsICAgTWFnaWMgU3F1YXJlLCAgIFNpZXZlIG9mIEVyYXRvc3RoZW5lcywgICBGaW5kIGRheSBvZiB0aGUgd2VlayBmb3IgYSBnaXZlbiBkYXRlLCAgIERGQSBiYXNlZCBkaXZpc2lvbiwgICBHZW5lcmF0ZSBpbnRlZ2VyIGZyb20gMSB0byA3IHdpdGggZXF1YWwgcHJvYmFiaWxpdHksICAgR2l2ZW4gYSBudW1iZXIsIGZpbmQgdGhlIG5leHQgc21hbGxlc3QgcGFsaW5kcm9tZSwgICBNYWtlIGEgZmFpciBjb2luIGZyb20gYSBiaWFzZWQgY29pbiwgICBDaGVjayBkaXZpc2liaWxpdHkgYnkgNywgICBGaW5kIHRoZSBsYXJnZXN0IG11bHRpcGxlIG9mIDMsICAgTGV4aWNvZ3JhcGhpYyByYW5rIG9mIGEgc3RyaW5nLCAgIFByaW50IGFsbCBwZXJtdXRhdGlvbnMgaW4gc29ydGVkIChsZXhpY29ncmFwaGljKSBvcmRlciwgICBTaHVmZmxlIGEgZ2l2ZW4gYXJyYXksICAgU3BhY2UgYW5kIHRpbWUgZWZmaWNpZW50IEJpbm9taWFsIENvZWZmaWNpZW50LCAgIFJlc2Vydm9pciBTYW1wbGluZywgICBQYXNjYWwmcnNxdW87cyBUcmlhbmdsZSwgICBTZWxlY3QgYSByYW5kb20gbnVtYmVyIGZyb20gc3RyZWFtLCB3aXRoIE8oMSkgc3BhY2UsICAgRmluZCB0aGUgbGFyZ2VzdCBtdWx0aXBsZSBvZiAyLCAzIGFuZCA1LCAgIEVmZmljaWVudCBwcm9ncmFtIHRvIGNhbGN1bGF0ZSBlXngsICAgTWVhc3VyZSBvbmUgbGl0cmUgdXNpbmcgdHdvIHZlc3NlbHMgYW5kIGluZmluaXRlIHdhdGVyIHN1cHBseSwgICBFZmZpY2llbnQgcHJvZ3JhbSB0byBwcmludCBhbGwgcHJpbWUgZmFjdG9ycyBvZiBhIGdpdmVuIG51bWJlciwgICBQcmludCBhbGwgcG9zc2libGUgY29tYmluYXRpb25zIG9mIHIgZWxlbWVudHMgaW4gYSBnaXZlbiBhcnJheSBvZiBzaXplIG4sICAgUmFuZG9tIG51bWJlciBnZW5lcmF0b3IgaW4gYXJiaXRyYXJ5IHByb2JhYmlsaXR5IGRpc3RyaWJ1dGlvbiBmYXNoaW9uLCAgIEhvdyB0byBjaGVjayBpZiBhIGdpdmVuIG51bWJlciBpcyBGaWJvbmFjY2kgbnVtYmVyPywgICBSdXNzaWFuIFBlYXNhbnQgTXVsdGlwbGljYXRpb24sICAgIENvdW50IGFsbCBwb3NzaWJsZSBncm91cHMgb2Ygc2l6ZSAyIG9yIDMgdGhhdCBoYXZlIHN1bSBhcyBtdWx0aXBsZSBvZiAzLCBUb3dlciBvZiBIYW5vaSwgSG9ybmVyJnJzcXVvO3MgTWV0aG9kIGZvciBQb2x5bm9taWFsIEV2YWx1YXRpb24sIENvdW50IHRyYWlsaW5nIHplcm9lcyBpbiBmYWN0b3JpYWwgb2YgYSBudW1iZXIsIFByb2dyYW0gZm9yIG50aCBDYXRhbGFuIE51bWJlciwgIEdlbmVyYXRlIG9uZSBvZiAzIG51bWJlcnMgYWNjb3JkaW5nIHRvIGdpdmVuIHByb2JhYmlsaXRpZXMsIEZpbmQgRXhjZWwgY29sdW1uIG5hbWUgZnJvbSBhIGdpdmVuIGNvbHVtbiBudW1iZXIsRmluZCBuZXh0IGdyZWF0ZXIgbnVtYmVyIHdpdGggc2FtZSBzZXQgb2YgZGlnaXRzLENvdW50IFBvc3NpYmxlIERlY29kaW5ncyBvZiBhIGdpdmVuIERpZ2l0IFNlcXVlbmNlLCBDYWxjdWxhdGUgdGhlIGFuZ2xlIGJldHdlZW4gaG91ciBoYW5kIGFuZCBtaW51dGUgaGFuZCwgIENvdW50IG51bWJlciBvZiBiaW5hcnkgc3RyaW5ncyB3aXRob3V0IGNvbnNlY3V0aXZlIDE/cywgRmluZCB0aGUgc21hbGxlc3QgbnVtYmVyIHdob3NlIGRpZ2l0cyBtdWx0aXBseSB0byBhIGdpdmVuIG51bWJlciBuLCBEcmF3IGEgY2lyY2xlIHdpdGhvdXQgZmxvYXRpbmcgcG9pbnQgYXJpdGhtZXRpYywKCkJpdCBBbGdvcml0aG1zOiBGaW5kIHRoZSBlbGVtZW50IHRoYXQgYXBwZWFycyBvbmNlLCBEZXRlY3Qgb3Bwb3NpdGUgc2lnbnMsIFNldCBiaXRzIGluIGFsbCBudW1iZXJzIGZyb20gMSB0byBuLCBTd2FwIGJpdHMsIEFkZCB0d28gbnVtYmVycywgU21hbGxlc3Qgb2YgdGhyZWUsIEEgQm9vbGVhbiBBcnJheSBQdXp6bGUsIFNldCBiaXRzIGluIGFuIChiaWcpIGFycmF5LCBOZXh0IGhpZ2hlciBudW1iZXIgd2l0aCBzYW1lIG51bWJlciBvZiBzZXQgYml0cywgT3B0aW1pemF0aW9uIFRlY2huaXF1ZSAoTW9kdWx1cyksIEFkZCAxIHRvIGEgbnVtYmVyLCBNdWx0aXBseSB3aXRoIDMuNSwgVHVybiBvZmYgdGhlIHJpZ2h0bW9zdCBzZXQgYml0LCBDaGVjayBmb3IgUG93ZXIgb2YgNCwgQWJzb2x1dGUgdmFsdWUgKGFicykgd2l0aG91dCBicmFuY2hpbmcsIE1vZHVsdXMgZGl2aXNpb24gYnkgYSBwb3dlci1vZi0yLW51bWJlciwgTWluaW11bSBvciBNYXhpbXVtIG9mIHR3byBpbnRlZ2VycyAsIFJvdGF0ZSBiaXRzLCBGaW5kIHRoZSB0d28gbm9uLXJlcGVhdGluZyBlbGVtZW50cyBpbiBhbiBhcnJheSwgTnVtYmVyIE9jY3VycmluZyBPZGQgTnVtYmVyIG9mIFRpbWVzLCBDaGVjayBmb3IgSW50ZWdlciBPdmVyZmxvdywgTGl0dGxlIGFuZCBCaWcgRW5kaWFuICwgUmV2ZXJzZSBCaXRzIG9mIGEgTnVtYmVyLCBDb3VudCBzZXQgYml0cyBpbiBhbiBpbnRlZ2VyLCBOdW1iZXIgb2YgYml0cyB0byBiZSBmbGlwcGVkIHRvIGNvbnZlcnQgQSB0byBCLCBOZXh0IFBvd2VyIG9mIDIsIENoZWNrIGlmIGEgTnVtYmVyIGlzIE11bHRpcGxlIG9mIDMsIEZpbmQgcGFyaXR5LCBNdWx0aXBseSB3aXRoIDcsIEZpbmQgd2hldGhlciBhIG5vIGlzIHBvd2VyIG9mIHR3bywgUG9zaXRpb24gb2YgcmlnaHRtb3N0IHNldCBiaXQsIEJpbmFyeSByZXByZXNlbnRhdGlvbiBvZiBhIGdpdmVuIG51bWJlciwgU3dhcCBhbGwgb2RkIGFuZCBldmVuIGJpdHMsIEZpbmQgcG9zaXRpb24gb2YgdGhlIG9ubHkgc2V0IGJpdCwgS2FyYXRzdWJhIGFsZ29yaXRobSBmb3IgZmFzdCBtdWx0aXBsaWNhdGlvbiwgSG93IHRvIHN3YXAgdHdvIG51bWJlcnMgd2l0aG91dCB1c2luZyBhIHRlbXBvcmFyeSB2YXJpYWJsZT8sIENoZWNrIGlmIGEgbnVtYmVyIGlzIG11bHRpcGxlIG9mIDkgdXNpbmcgYml0d2lzZSBvcGVyYXRvcnMsIFN3YXAgdHdvIG5pYmJsZXMgaW4gYSBieXRlLCBIb3cgdG8gdHVybiBvZmYgYSBwYXJ0aWN1bGFyIGJpdCBpbiBhIG51bWJlcj8sIENoZWNrIGlmIGJpbmFyeSByZXByZXNlbnRhdGlvbiBvZiBhIG51bWJlciBpcyBwYWxpbmRyb21lCgpRdWl6IG9uIEJpdCBBbGdvcml0aG1zLgoKR3JhcGggQWxnb3JpdGhtczoKSW50cm9kdWN0aW9uLCBERlMgYW5kIEJGUzogR3JhcGggYW5kIGl0cyByZXByZXNlbnRhdGlvbnMsIEJyZWFkdGggRmlyc3QgVHJhdmVyc2FsIGZvciBhIEdyYXBoLCBEZXB0aCBGaXJzdCBUcmF2ZXJzYWwgZm9yIGEgR3JhcGgsIEFwcGxpY2F0aW9ucyBvZiBEZXB0aCBGaXJzdCBTZWFyY2gsIERldGVjdCBDeWNsZSBpbiBhIERpcmVjdGVkIEdyYXBoLCBEZXRlY3QgQ3ljbGUgaW4gYSBhbiBVbmRpcmVjdGVkIEdyYXBoLCBEZXRlY3QgY3ljbGUgaW4gYW4gdW5kaXJlY3RlZCBncmFwaCwgTG9uZ2VzdCBQYXRoIGluIGEgRGlyZWN0ZWQgQWN5Y2xpYyBHcmFwaCwgVG9wb2xvZ2ljYWwgU29ydGluZywgQ2hlY2sgd2hldGhlciBhIGdpdmVuIGdyYXBoIGlzIEJpcGFydGl0ZSBvciBub3QsIFNuYWtlIGFuZCBMYWRkZXIgUHJvYmxlbQpNaW5pbXVtIFNwYW5uaW5nIFRyZWU6IFByaW0mcnNxdW87cyBNaW5pbXVtIFNwYW5uaW5nIFRyZWUgKE1TVCkpLCBBcHBsaWNhdGlvbnMgb2YgTWluaW11bSBTcGFubmluZyBUcmVlIFByb2JsZW0sIFByaW0mcnNxdW87cyBNU1QgZm9yIEFkamFjZW5jeSBMaXN0IFJlcHJlc2VudGF0aW9uLCBLcnVza2FsJnJzcXVvO3MgTWluaW11bSBTcGFubmluZyBUcmVlIEFsZ29yaXRobQpTaG9ydGVzdCBQYXRoczogRGlqa3N0cmEmcnNxdW87cyBzaG9ydGVzdCBwYXRoIGFsZ29yaXRobSwgRGlqa3N0cmEmcnNxdW87cyBBbGdvcml0aG0gZm9yIEFkamFjZW5jeSBMaXN0IFJlcHJlc2VudGF0aW9uLCBCZWxsbWFuJm5kYXNoO0ZvcmQgQWxnb3JpdGhtLCBGbG95ZCBXYXJzaGFsbCBBbGdvcml0aG0sIEpvaG5zb24mcnNxdW87cyBhbGdvcml0aG0gZm9yIEFsbC1wYWlycyBzaG9ydGVzdCBwYXRocywgU2hvcnRlc3QgUGF0aCBpbiBEaXJlY3RlZCBBY3ljbGljIEdyYXBoLCBTb21lIGludGVyZXN0aW5nIHNob3J0ZXN0IHBhdGggcXVlc3Rpb25zCkNvbm5lY3Rpdml0eTogRmluZCBpZiB0aGVyZSBpcyBhIHBhdGggYmV0d2VlbiB0d28gdmVydGljZXMgaW4gYSBkaXJlY3RlZCBncmFwaCwgQ29ubmVjdGl2aXR5IGluIGEgZGlyZWN0ZWQgZ3JhcGgsIEFydGljdWxhdGlvbiBQb2ludHMgKG9yIEN1dCBWZXJ0aWNlcykgaW4gYSBHcmFwaCwgQmljb25uZWN0ZWQgZ3JhcGgsIEJyaWRnZXMgaW4gYSBncmFwaCwgRXVsZXJpYW4gcGF0aCBhbmQgY2lyY3VpdCwgRmxldXJ5JnJzcXVvO3MgQWxnb3JpdGhtIGZvciBwcmludGluZyBFdWxlcmlhbiBQYXRoIG9yIENpcmN1aXQsIFN0cm9uZ2x5IENvbm5lY3RlZCBDb21wb25lbnRzLCBUcmFuc2l0aXZlIGNsb3N1cmUgb2YgYSBncmFwaCwgRmluZCB0aGUgbnVtYmVyIG9mIGlzbGFuZHMsIENvdW50IGFsbCBwb3NzaWJsZSB3YWxrcyBmcm9tIGEgc291cmNlIHRvIGEgZGVzdGluYXRpb24gd2l0aCBleGFjdGx5IGsgZWRnZXMsICBFdWxlciBDaXJjdWl0IGluIGEgRGlyZWN0ZWQgR3JhcGgKSGFyZCBQcm9ibGVtczogR3JhcGggQ29sb3JpbmcgKEludHJvZHVjdGlvbiBhbmQgQXBwbGljYXRpb25zKSxHcmVlZHkgQWxnb3JpdGhtIGZvciBHcmFwaCBDb2xvcmluZywgVHJhdmVsbGluZyBTYWxlc21hbiBQcm9ibGVtIChOYWl2ZSBhbmQgRHluYW1pYyBQcm9ncmFtbWluZyksIFRyYXZlbGxpbmcgU2FsZXNtYW4gUHJvYmxlbSAoQXBwcm94aW1hdGUgdXNpbmcgTVNUKSwgSGFtaWx0b25pYW4gQ3ljbGUKTWF4aW11bSBGbG93OiBGb3JkLUZ1bGtlcnNvbiBBbGdvcml0aG0gZm9yIE1heGltdW0gRmxvdyBQcm9ibGVtLEZpbmQgbWF4aW11bSBudW1iZXIgb2YgZWRnZSBkaXNqb2ludCBwYXRocyBiZXR3ZWVuIHR3byB2ZXJ0aWNlcywgRmluZCBtaW5pbXVtIHMtdCBjdXQgaW4gYSBmbG93IG5ldHdvcmssIE1heGltdW0gQmlwYXJ0aXRlIE1hdGNoaW5nLCAgQ2hhbm5lbCBBc3NpZ25tZW50IFByb2JsZW0KTWlzYzogIEZpbmQgaWYgdGhlIHN0cmluZ3MgY2FuIGJlIGNoYWluZWQgdG8gZm9ybSBhIGNpcmNsZSwgR2l2ZW4gYSBzb3J0ZWQgZGljdGlvbmFyeSBvZiBhbiBhbGllbiBsYW5ndWFnZSwgZmluZCBvcmRlciBvZiBjaGFyYWN0ZXJzClF1aXogb24gR3JhcGgKUXVpeiBvbiBHcmFwaCBUcmF2ZXJzYWxzClF1aXogb24gR3JhcGggU2hvcnRlc3QgUGF0aHMKUXVpeiBvbiBHcmFwaCBNaW5pbXVtIFNwYW5uaW5nIFRyZWUKClF1aXp6ZXMgb24gQWxnb3JpdGhtczogQW5hbHlzaXMgb2YgQWxnb3JpdGhtcywgICBTb3J0aW5nLCAgIERpdmlkZSBhbmQgQ29ucXVlciwgICBHcmVlZHkgQWxnb3JpdGhtcywgICBEeW5hbWljIFByb2dyYW1taW5nLCAgIEJhY2t0cmFja2luZywgICBNaXNjLCAgIE5QIENvbXBsZXRlLCAgIFNlYXJjaGluZywgICBBbmFseXNpcyBvZiBBbGdvcml0aG1zIChSZWN1cnJlbmNlcyksICAgUmVjdXJzaW9uLCAgIEJpdCBBbGdvcml0aG1zLCAgIEdyYXBoIFRyYXZlcnNhbHMsICAgR3JhcGggU2hvcnRlc3QgUGF0aHMsICAgR3JhcGggTWluaW11bSBTcGFubmluZyBUcmVlLAoKQ29tbW9ubHkgQXNrZWQgQWxnb3JpdGhtIEludGVydmlldyBRdWVzdGlvbnMgfCBTZXQgMQok
Analysis of Algorithms: Asymptotic Analysis, Worst, Average and Best Cases, Asymptotic Notations, Analysis of Loops, Solving Recurrences, Amortized Analysis, What does ‘Space Complexity’ mean?, NP-Completeness Introduction, A Time Complexity Question, Time Complexity of building a heap, Quiz on Analysis of Algorithms, Quiz on Recurrences
Searching and Sorting: Binary Search, Selection Sort, Bubble Sort, Insertion Sort, Merge Sort, Heap Sort, QuickSort, Bucket Sort, ShellSort, Interpolation search vs Binary search, Stability in sorting algorithms, When does the worst case of Quicksort occur?, Lower bound for comparison based sorting algorithms. Which sorting algorithm makes minimum number of memory writes?, Find the Minimum length Unsorted Subarray, sorting which makes the complete array sorted, Merge Sort for Linked Lists, Sort a nearly sorted (or K sorted) array, Iterative Quick Sort, QuickSort on Singly Linked List, QuickSort on Doubly Linked List, Find k closest elements to a given value, Sort n numbers in range from 0 to n^2 – 1 in linear time, A Problem in Many Binary Search Implementations, Search in an almost sorted array, Quiz on Sorting, Quiz on Searching
Greedy Algorithms: Activity Selection Problem, Kruskal’s Minimum Spanning Tree Algorithm, Huffman Coding, Efficient Huffman Coding for Sorted Input, Prim’s Minimum Spanning Tree Algorithm, Prim’s MST for Adjacency List Representation, Dijkstra’s Shortest Path Algorithm, Dijkstra’s Algorithm for Adjacency List Representation, Quiz on Greedy Algorithms
Dynamic Programming: Overlapping Subproblems Property, Optimal Substructure Property, Longest Increasing Subsequence, Longest Common Subsequence, Edit Distance, Min Cost Path, Coin Change, Matrix Chain Multiplication, Binomial Coefficient, 0-1 Knapsack Problem, Egg Dropping Puzzle, Longest Palindromic Subsequence, Cutting a Rod, Maximum Sum Increasing Subsequence, Longest Bitonic Subsequence, Floyd Warshall Algorithm, Palindrome Partitioning, Partition problem, Word Wrap Problem, Maximum Length Chain of Pairs, Variations of LIS, Box Stacking Problem, Program for Fibonacci numbers, Minimum number of jumps to reach end, Maximum size square sub-matrix with all 1s, Ugly Numbers, Largest Sum Contiguous Subarray, Longest Palindromic Substring, Bellman–Ford Algorithm for Shortest Paths, Optimal Binary Search Tree, Largest Independent Set Problem, Subset Sum Problem, Maximum sum rectangle in a 2D matrix, Count number of binary strings without consecutive 1?s, Boolean Parenthesization Problem, Count ways to reach the n’th stair. See Dynamic Programming Tag for more problems, Quiz on Dynamic Programming
Pattern Searching: Naive Pattern Searching, KMP Algorithm, Rabin-Karp Algorithm, A Naive Pattern Searching Question, Finite Automata, Efficient Construction of Finite Automata, Boyer Moore Algorithm – Bad Character Heuristic, Suffix Array, Anagram Substring Search (Or Search for all permutations)
Backtracking: Print all permutations of a given string, The Knight’s tour problem, Rat in a Maze, N Queen Problem, Subset Sum, m Coloring Problem, Hamiltonian Cycle, Sudoku, Tug of War, Solving Cryptarithmetic Puzzles
Divide and Conquer: Introduction, Write your own pow(x, n) to calculate x*n, Median of two sorted arrays, Count Inversions , Closest Pair of Points, Strassen’s Matrix Multiplication, See this for more, Quiz on Divide and Conquer
Geometric Algorithms: Closest Pair of Points | O(nlogn) Implementation, How to check if two given line segments intersect?, How to check if a given point lies inside or outside a polygon?, Convex Hull | Set 1 (Jarvis’s Algorithm or Wrapping), Convex Hull | Set 2 (Graham Scan), Given n line segments, find if any two segments intersect, Check whether a given point lies inside a triangle or not
Mathematical Algorithms: Write an Efficient Method to Check if a Number is Multiple of 3, Efficient way to multiply with 7, Write a C program to print all permutations of a given string, Lucky Numbers, Write a program to add two numbers in base 14, Babylonian method for square root, Multiply two integers without using multiplication, division and bitwise operators, and no loops, Print all combinations of points that can compose a given number, Write you own Power without using multiplication(*) and division(/) operators, Program for Fibonacci numbers, Average of a stream of numbers, Count numbers that don’t contain 3, Magic Square, Sieve of Eratosthenes, Find day of the week for a given date, DFA based division, Generate integer from 1 to 7 with equal probability, Given a number, find the next smallest palindrome, Make a fair coin from a biased coin, Check divisibility by 7, Find the largest multiple of 3, Lexicographic rank of a string, Print all permutations in sorted (lexicographic) order, Shuffle a given array, Space and time efficient Binomial Coefficient, Reservoir Sampling, Pascal’s Triangle, Select a random number from stream, with O(1) space, Find the largest multiple of 2, 3 and 5, Efficient program to calculate e^x, Measure one litre using two vessels and infinite water supply, Efficient program to print all prime factors of a given number, Print all possible combinations of r elements in a given array of size n, Random number generator in arbitrary probability distribution fashion, How to check if a given number is Fibonacci number?, Russian Peasant Multiplication, Count all possible groups of size 2 or 3 that have sum as multiple of 3, Tower of Hanoi, Horner’s Method for Polynomial Evaluation, Count trailing zeroes in factorial of a number, Program for nth Catalan Number, Generate one of 3 numbers according to given probabilities, Find Excel column name from a given column number,Find next greater number with same set of digits,Count Possible Decodings of a given Digit Sequence, Calculate the angle between hour hand and minute hand, Count number of binary strings without consecutive 1?s, Find the smallest number whose digits multiply to a given number n, Draw a circle without floating point arithmetic,
Bit Algorithms: Find the element that appears once, Detect opposite signs, Set bits in all numbers from 1 to n, Swap bits, Add two numbers, Smallest of three, A Boolean Array Puzzle, Set bits in an (big) array, Next higher number with same number of set bits, Optimization Technique (Modulus), Add 1 to a number, Multiply with 3.5, Turn off the rightmost set bit, Check for Power of 4, Absolute value (abs) without branching, Modulus division by a power-of-2-number, Minimum or Maximum of two integers , Rotate bits, Find the two non-repeating elements in an array, Number Occurring Odd Number of Times, Check for Integer Overflow, Little and Big Endian , Reverse Bits of a Number, Count set bits in an integer, Number of bits to be flipped to convert A to B, Next Power of 2, Check if a Number is Multiple of 3, Find parity, Multiply with 7, Find whether a no is power of two, Position of rightmost set bit, Binary representation of a given number, Swap all odd and even bits, Find position of the only set bit, Karatsuba algorithm for fast multiplication, How to swap two numbers without using a temporary variable?, Check if a number is multiple of 9 using bitwise operators, Swap two nibbles in a byte, How to turn off a particular bit in a number?, Check if binary representation of a number is palindrome
Quiz on Bit Algorithms.
Graph Algorithms:
Introduction, DFS and BFS: Graph and its representations, Breadth First Traversal for a Graph, Depth First Traversal for a Graph, Applications of Depth First Search, Detect Cycle in a Directed Graph, Detect Cycle in a an Undirected Graph, Detect cycle in an undirected graph, Longest Path in a Directed Acyclic Graph, Topological Sorting, Check whether a given graph is Bipartite or not, Snake and Ladder Problem
Minimum Spanning Tree: Prim’s Minimum Spanning Tree (MST)), Applications of Minimum Spanning Tree Problem, Prim’s MST for Adjacency List Representation, Kruskal’s Minimum Spanning Tree Algorithm
Shortest Paths: Dijkstra’s shortest path algorithm, Dijkstra’s Algorithm for Adjacency List Representation, Bellman–Ford Algorithm, Floyd Warshall Algorithm, Johnson’s algorithm for All-pairs shortest paths, Shortest Path in Directed Acyclic Graph, Some interesting shortest path questions
Connectivity: Find if there is a path between two vertices in a directed graph, Connectivity in a directed graph, Articulation Points (or Cut Vertices) in a Graph, Biconnected graph, Bridges in a graph, Eulerian path and circuit, Fleury’s Algorithm for printing Eulerian Path or Circuit, Strongly Connected Components, Transitive closure of a graph, Find the number of islands, Count all possible walks from a source to a destination with exactly k edges, Euler Circuit in a Directed Graph
Hard Problems: Graph Coloring (Introduction and Applications),Greedy Algorithm for Graph Coloring, Travelling Salesman Problem (Naive and Dynamic Programming), Travelling Salesman Problem (Approximate using MST), Hamiltonian Cycle
Maximum Flow: Ford-Fulkerson Algorithm for Maximum Flow Problem,Find maximum number of edge disjoint paths between two vertices, Find minimum s-t cut in a flow network, Maximum Bipartite Matching, Channel Assignment Problem
Misc: Find if the strings can be chained to form a circle, Given a sorted dictionary of an alien language, find order of characters
Quiz on Graph
Quiz on Graph Traversals
Quiz on Graph Shortest Paths
Quiz on Graph Minimum Spanning Tree
Quizzes on Algorithms: Analysis of Algorithms, Sorting, Divide and Conquer, Greedy Algorithms, Dynamic Programming, Backtracking, Misc, NP Complete, Searching, Analysis of Algorithms (Recurrences), Recursion, Bit Algorithms, Graph Traversals, Graph Shortest Paths, Graph Minimum Spanning Tree,
Commonly Asked Algorithm Interview Questions | Set 1
$