#!/usr/bin/env python
# This script is generated with chut. Do NOT edit this file.
# All your changes will be lost at the next generation.

version = 'unknown'

import base64, json, types, zlib, sys, os
os.environ['CHUTIFIED'] = '1'
PY3 = sys.version_info[0] == 3
_chut_modules = []
_chut_modules.append(('six', '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\n'))
_chut_modules.append(('docopt', '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\n'))
_chut_modules.append(('ConfigObject', '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\nHpp7vcBJLTMSBP8F6/lKqQ==\n'))
_chut_modules.append(('chut', 'eJytPWtz20aS3/krJnKpANgUZO+mtvZUYWq9sXfj2iTO2U5dbdEsHkSAIiIQQABQsvLY3379mDcG\nlJQcq2yBmJmenp6efk3PcNs1e7Febw/DoSvWa1Hu26YbxKEuN01erKtyKLqs6uei7cp6gHr1Ziib\neibrNb166gr11N/pl335ST8O2aCef67KS/U8lHvdcrhrC932MuuLv3yum+8OQ1mpb2Xdt8VGw6ua\nq6uyvlJfCcmmqTSotgFE2mzYzbY43P5w2XbNpuh7Ndzvm7aoJwvffP96quz9h1dvf/jApZumvVPv\n86Jo8TuXfNXU2/Lq7eWPgLOqYb9T7euh+DQAbVQd+Waf1dlV0c1m63VWVTBJC7GcCfhEMPCmHfpo\nLqKy3jb4Ny8uD1f4UHRd09HDpw38EU80magpwO6bqlj3m65sB6zXFT8dyq4gaP2OWtY3DLqkd0Ne\n1vgwFD00kBhQ9U1GEK66osW/27LO6fWBXg+Exq7I6OWQlRWBK+hrdnutYNWIZ9QCivi33mcEbNf0\nQ53tC/VMbTdU1PV33Ob2qhi4w65S0DYE/nZXbmgs++uh2FOrYrMjSt1uVNUhIwyvfi6pwtWhlk/y\nj/zOlW8q6nK73bcFIQqUvCk6TZGbshsOWSVp15qGVyXhuKNG/U2t3vdM7P6QN+oV8iq1vs156vCF\nKHvDybAgb3NYdLBsa1iFKRBgc5vHCbcv+k3WEsUKbl9gY34LdVbISnUzrAG7ImeGija7fcOz1jK9\n8pKosqdxdHv+X74cmgOQdWVY8tlCOCBnM+A2gCt5DvH7Bh6LLoaOgC2S2SyrSljiPVTKy80QE+bl\ndkPrYhGd95dlfa6+S8IgjaDo0HfnWGqRDIi4YErOAPRsU2WwSKHHuKEVllzMGH5dDiV0/HORQ7//\nAMlW0PuKcENcfvmNa+bFFka0odHFfVFt5yLrrvrFL9HZGawT4LcLbg/UODsDBrhs+kK9+42Rcj7b\n/bD4rqmhPnKzfOyHrsj2CxCZKSwvWLIKUSaGAIpS9QsHHr4BVDUzpCgr8WWMgADNm+XzVeICwiZl\nLXAkqRytC1Tykl1hia1WBs7UlGK1ZIQ31Et3WZ1Xo66gAlBDLBYiuuzKYhtdjMhF5SJansZVcVNU\n1MPZ5/1KnMZ7kL8gD5M+cloVlQV2319NAz0Coi+OtMr6DWqrpBcOVn/B7/TYT2OniAYzVW5Y9sdq\n8unPXGybbp8NC+guTEvq8oKkQZdd7bMLKAEVAaznExcZFacn1ryajIdF4KzpfP3u3dt3Y4rasFi3\nPADWq9d//+GfDyCt3+7Nd/94O/PplvbAaFiRiZ7o8jGrMihdQbI0vtJrGr7I5UxTZnDCwtsua1tg\n6Kc46rl4+vT6Fp+8EfMyQCBxElpCQK1sGLoY6tEKZ+ZIRlB1W9ltChIUapI81s38wci6IOMQ4c2u\n2FyvUQ7GEkl8hvZSuPLMkZxMpIAlfgKNQYKj7LdlBWIDKliD7LKyL8Tb96/RhODmqD+wIVheA8hE\n0N0MDweC6gProCTsWek22b4E9YA1eLBKyoOUaw7DAm0qpA2KvAUbUYkSxCmxWRyRURafdkix0y6J\nWADPhU097gmAc2WuAKp3Af98SnPd9DYrh9hrLYsYuRSWI2hS+AaWUazJJit/tkCrNr2Mo65pnIXl\nUe07oFZ2WRViaER3qGliUtR7NHFSF99k1UEx4WaXkQY6+fWz/42WqzgRJ/QeqqL8+fgxUqiUPU1D\nvZEA5oxSWWfd3RqNaAsrBZX+pkWNZn0cgSgry8gwF/cB/wdrgGQSG9QeBMTAps6hHf0FsrVVBiht\n5gTumdhwa8m4VEmOHtRwjIyHHI7TBO+yQzWohXZycvJNk+UiEynUFFgTe88cozkVr8A8llQHogy7\ngmvmTUG8ysT7VPYDwONxyC4BZbUAClCgdX7oYdGr0kTJCkIpPbR5NhTxrgGlHWgV/SdKnHHaOGqY\nCzNaBXihB63tldc1GI9NHeNKMaT4lsx/xLjgchyOZaNIcWPMFPiSjCeJpCWKAyyHUaGcS+YC7RDD\nByjwsbhqbrEYqR5LazQJmgs89X0LjmIsqdMX7Uhqyck3SPcBpOfCXg6TvB5XMKVzMRzaCqSqi5Ua\nrEEl/bEpa7nOHM2xtOmwUlxs45gX1THC4leUtBYYn47K4nKRBLgGg9WkuRnQPpIB1GxCA+Qb2SJF\nhzNODBK4bK+BqIgFg0rBnd/3sUc0ORexhD6nRqMplKWaWb8HQ99Y15JXXwq0/0UjV+i7ogWHsoBl\nmmEvotkKYDcBeO2brgDjZQ++bd6nmqPX6BzA8JAr+QXBW4gP3UG+2OzztdI6rGHWYPWuWXYjZdiW\nhi9OISgaUwhfbLKjV2DIPqn7meY5jsD2HUyRxkGj75QxCuMyORpk69g1DKgYSHhTNoc+2FbGIwqL\nHMwoIMXBooK3cubJEFCvI4dTUa+rEpczLDDKqDHkpQCBhCflCM5sdBi2f41cLC046tGtoI0EfrCx\nw1iE4WAXP363hCpFVUUrM9q2aWNs6IzTpgRPR5Sgt/BiAihXQagyzGNjBbwLCreQ83oPhoyP1yT5\nHb3iapjsS06l3SXVDxjszJMkbrCKJbnI6EcwXAVLfWnhNzUrybzFWlNLR69l/IB0scQZyz9n1qBC\nus1AfeYuHhSQjLGUSTYn9W670ozY32CJgHAe7jSaLNDQzOl9PEmE4UJEUSUFH1XE74CcMOutyg41\nmN+5uLwj2wOHrQwN/KD0bbXLrdt5g7DNUfxwZ7CWW5jAqgIVPAFnZdMIZGtMLYmf8RsGAIIK2xIS\n9vimaMWUD5AJJxG7tuW5Co5yI5sYIC7aw7GJVpEsqifnewqn/rDZFEV+FC13rnSLR+GEo2N8dPsg\nSSUgoILP2VjKimJqKMSpgXFIWZHLGiP2swdCDGDpGHDVUBp7y1bpH+AsfpZ+zhSDIVhVdeWA0oS7\njD7WERtYcsk5TpOFH7mOxpJjCOy2YITbd1pGPcl5yAtyThydggHqqxrYzxOontplCP7k2JWm5khZ\nKf4sgSHCri+8NgSytLWjvY2zv0MnRVeTfvV4whA8uD/gYwzx87lu4A7S6k09jntU6xwAzvxRrSvg\nMmn5kBZdEL/aZq62tcYMp2wxF3NSPzCrRc0r1NRzA1sclyDPLghj+fziBerBZSCYYWHDfq9ex/x1\nGtclAcWIN4aLVyOiU6yvF6d9JE5FzNCAx4RidGWxJUmgJfwfXALag44+RidPv/jy10B0EjBlJ3uf\njwtNF+Bmdxg6jOGrh4OmCKzs6/GUYOAIpgTbWerej8vZs8ejl+5dMh5SpsXGeAZ9WJkBM+KtzECj\nVyjAPX5D3gxKXz0zruksS8mavGdhmzUQWN1mZdMcwhSoIavmIyPMEnRQfy7e48ZZyAhDVuNdNdfq\nrgJAvr9Dh2sKyik4dcivyH/aK9TxRA96KBLbS+Z1xQIJBFRqI17X3NQrfh+RHnk0Er+q6cFGiWUs\nXl4F1N67Q22pbaD0Zba5vuqaQ52jN0lw0diCAQ5kceUc+ZMep60V28f4S0d9NJwh4zuWtc8jDjc4\nXLvcWLEzrIxrPCiKUKitfGFkBXdnITZEkL+f++SwcNZxl39tOc2GVx7DiSz8GGqbBsA9tFs1fVDn\nAawrhciIe/GF4/KRkzhng8yWQurjRqqDkpWwX9D/OnxNseyp2irYPSofS26Jq4w3GuzHNYv6Zu35\nurzdDP8HxvWImPoEUkuCvyL3/WY9rjV0d2GV1Xqh+fHehx7Tp03RDip8HobGq5QivnEAV3eBKwHV\njvuaZFIpudoj5jpUD8gtXB951uXaF9hqnzAVL2VcuuBcC1i/qOxqQbk1MFhfatE4QDw6noi1CtuJ\nNaiwD66r8drR1WVNHjPpjn0x7JpcD3uftfEGk4BoEl0DtGmqdV/+bDa0m3bd1Gv04A5dsZBb5IFo\nmpT2GYj4YbNTFOsxPC+XscB/nPwC1bAnrGUkOEhCDe2uOdhkvL4NLmO5fJUgP7KEQ0s3scCrZeqz\nMzpNiiRhR0zm9uwP1VDKsdjhMIeoMAivXrppD+sN6MPBcZ573EhAlYb9rcRTURW+QTSh+co6Lz7B\nq+e2X7wev2W3hQQk+ovhcIbcL6aJQwx0tUR8YUYVEOEYR1ey7Pl4wY49yGxOYZqAFlLwltlqVCaN\n9KqPn2bjXrLfo0V8ICP5ExMt54J1J8tCXhBJoDkT/tlCvBgZ26WEQb76xATgh7mBxBuHkELklJUm\nvU/10R74exZ9rbtJGvY/VNREmVNexOFYGys2h3PIaI4n0mrBsSKMRgB/xdzgOFoqmANtaC/ciTmF\nGsr1tSxX40CC/TFz3xX75qaAuVdzNkEpDjGp5bYQZXgWJPbrCe6wP3dlUeUWxlPdSgb4Ujyn1erJ\n7Wk0pInkWMj+h7jV4vr7ONZDTYc+lfy8N+cl9GnT6zLI/epDvhIbEzynC/7jtsCMn7SviqKN0xd+\nbFBOyBck7CTNk/vRdedIwxlF2ez51sqYNnxxH0/vWOEXd9PUE5ZYAXRdVW5GJgPtnv+ruJNJC/9u\nDmIDpklTV3fiAEXUqLdCa0GfxytcqvRXijX4HssS0VmNwtBs3DUdCAr2FZdnL1besAkbPW4YXTew\nyTF23P8IggT4AuH+DjTJ+Fr7NmLRYJ4Txju///efacVh7BRVKQVRHe8O9Y6OMrC4vQjwj9xT4ZAo\ntknSjn1x6Cx5zLayjpHRBg2JA3s/c1JJ+EFU2958cLRkrFwnXMvxZp8Tbg+A8zfc7oE7ufMWwvQP\ngjTb1WaSnfm4h/RQZZf1vCOrdmNRu4YwMhsdTn5TFwpUkpvwIHlr7QLICA9tYHMfyQR4b89FMq8v\nd8e+im4XmaXiwYJpkTw4gufwd2g3U89GeJdAvqXXa6jcUYqeWleOjDJ5BDqd6CIsQm47kBRWFlR0\ne/kscpZt1+/K7R8AmPkAG5PL0oCz1bkiwN6fwVK9ZHHzgR1hj7moGlIN/066q9xhKAy1LYFJVHvd\n3fL5alwr9fZVQnKIwPiiXkt6Rwol4pkpcbsPqzpb4hsOlOMnpYFqIIiQNQFooo51g6ytN90tSxRz\n6uufi66RHMcA3CQlHoWbvzLFIzph6KmO2qNGsHIwXA4s2oAukxB5I8KmKnlMNgAmGuNFpHMYbhy+\nJEI+X02mvBA7oHGJaqXL6itQfIUMLYsz8WIuns/F2YuwVEZr2IbMr7DZeEvc2SrjlbUeGrUQ86PW\nFlcKRmgsOpNyAMFCymGbh/h5al96LB4fZDVQxTxlMcEzNdmpJUwjR4Zwa1cgzcUepPikMDHVytp3\n2DFlXydlLsSfQhjrJWgyucYq6wHt/Cizpz/0JG+Pbo/dlsNOkBfvDV9kPXR6TPtOd2MyDUKZLnbY\nc8JTCSgqmi5rw3wuSz27z7JIf8cm/UM26O/H0uI2ZdmTETFaZUewVVbQdCY0kVKbXWwKyWznCXz9\n4IdEyys3cQ619GwODcY1qKL1yq/txjTGIMYoPCimMUV/Zi2bSSiaO6b/9JGeY+dbrIysEcMftXAd\n+gZOjwA2dMoxdip6Ys3Jyh+rq7mYaHxfQ5O2TaZNbIn7k5OTH3qYi6EBkUeHPvsGBFyeDbTFbWeL\nzSRXMgNJ69YLgrnupZ2r6udL9wdMQ34vY9uotVPdwssqdXL33aK12h8h3Utl460Qa4/Btw9s30R3\nRSc+i2vfPzEVUiy2g79TYEjuNj4gvf7cAY0F+BTYKe/JyZ9XJx1GYcywEgobB+m9hzaC/dOpE9M+\nsIUWxCE8Bpd2c3Erk+bdZFD8kCKFom1OWu+WPJXIryPNigBmULapmr4YJ/t1/w92rE2PR1opj9Lk\nj+Fp/Bzh62PgppiQj79Thj8i21z+6LSzbQn8TJlEqSGMz0RHzT8j6FgNdkbQvcQ8D0ztJnKCmdBl\ndPShvDwMGOulemcmA1N+tzTTmbCMszNh6U8tIB+6E2sNwpxTIENciefHSzObMHizQKy0PLizv4uB\ndyme4eN0QoJoCPz3rPfOVOgj1ZRpiFlfiUkpcU5cT2sJecpKJ+H5adnm1CE+eIXSCf7lt/F77xiG\n5OtwTuC4ER/YfMbHHrwEQZph4EHOWuBRwAq9rArORnJ0DReMzBHr2Kh9KjWYmjpt1yhgWZ5/zRU0\nuPdk3qi35lxEcsx9CCKGx14TL9T9gJNHyA5UYlODyvikpjWD/qEEtTtO520W1ElQcQgh8ykX1JmV\nh8kHtqj7ZLKtmtaFO/2T9ZGVA/lm3mmqVHP9eK6ub5cRlZFf7R7SwY8hCZ++gkqoe+VwSErME8yH\nmZCMpqUKB+rdGArQ6Jl7cBgl+uK0/xJz95zFqEXCVzBBMcoFJbzoKgjr8L/pyIiVOd2BMu6LhopF\nuh8c850a9S8RlkUXdFlLueEsEKqf/JaojJu/ebeSqN6R6Kp33FUxnY+yg3j/ws7u2gKTVdXdSOdi\nMN2yhoNZbGw6y+QzPziAH+MnRGTMy1yG7lDXqLhOu4/1KZ5bpr3KkA9BFHTdAfuEiRq9HLxKGZ4+\nSCbPtOkjVdLn7WS+7TiVkqCPjo/rzje5hJGXHaiOprMDtaBEv9phqIz8js2h6/A8nq5pZ83ol8Ic\nkAUZV+FDbGAb57NPNzt4Hyor6psUryhZGKgWtW5DZzfMbSbUc3bZU8fW7SaJje0DqlvahHy0sNck\nAbEb59uSfb87rs/fv/86lne4PJXzopYuu4tq9cpRvtTpTXFVXsOsFP2QPO5I7x+V/5wG48obu/z3\n6Icoul8LLGmFRWcRqH2SoY9VBFPSW6XDP1aCK7sWptCfJJhRaNDdFJ0zN/oMwJgfWlsq847YUzcF\nC68vkvNG3K8Lfjo0A0qE6CSy59LN+TvuLkrY+GfylL/dFf2drCkpRkCfyTbP1KUFbaLeBUTQaJWQ\n3PyuGd7s26rYg+wpcplssMn1WX1x23TX7EL0dGzzmKg4AhIlznGYY9sfB3nM6Dfp2t5Ofz8c0eqn\n/YVW6tjD9H78pJoIH0HIwgdmXHbJ5mI6SVunpmV+RMuuGPYhneZWSKm7sRQarif3zA7SH8bo0fPF\nxQreRmO+A3Ax+iuuupOr9dsmP1TF/8irWujOuJTffbizQ3BoDgk6T065pHk+8k4F37uGUPlE3ZQH\ntW9AbiGo0a0xRz0omi5puC5P1uvLQ1kNMEfr9clcwPe82eBjWAhCeZttrsHGUtXR84dn75RA71gR\nbMeqiSC8+RUFdBMfbxRVhLfTIlIFoNOWq1Ej1FjBRlwAjX75zWsENTCXtcnd1/K0P/55hPpTWg4v\nepL3j0WjxeBNDFSle8dC6ZJ8LnbsXBPk1XhRPCg9goXUG0r2dZOr9BWAww7Mzx7+ZIMRWnRhSTQd\nBdVTGk7+tm1Kq+4RjzTUkFmdW97n5szkJYTwHu9bS2Z4E6Ggi5jwNV7QFPPthMmM/Hm/TN4qNSMT\n3S/kWwyTGciA2i/Dd9ju02bUig4TlA0Wz8AShXJ1t4q5RkXfl9GjP0V+Fl8ZIK9Qkm/ojjm62SiZ\nIYNjiTTs+CZEwEAspG6U99uQJ7bek1DC1aHuZrrrU37ZL5kd0YJx5RnNWb+bC3VPXrBhygeGJlrz\nXUzy1qfZk9Bn9kS8p9MIMPF10WVILPFkoi4PSt0PGT+VT6h5x5oLrScta/MCNQVYGSUf58qEuR5R\n2fJ4EvQ8HZpP53QWFMdafCo2h8EN69zwPCpzH7wKuvHO/+42lxKPzjGhRyJ7X8Pz8WUse8M2SO+1\nQVu+tSDNHiYZvAFYdwjZiWU38uLI/5xTx+f0PXEu7yLXqmxBfdzWVZPlYE9sdvd0Hm4TRkf3TXUs\nWdTvUroWMo7OWj5tFIDJ1cFQXUNNqwO+h4fu5Yqg1NxHpqpKp4WgQoMHjIcjIUsJAIOJ6vWMJZth\nUyHvV7HfaQx4qSkE7Cq2XWfeWsey7VUqpweFQprTUO/JBVaX7XYVXoir3sJXdAV2w9D2F+fnXXab\nXoERe7hEa+28vWuzc8ON5/usH4rOepO2d5ENC0Cn8AfEfFcWN0UMz4D2+bBvz9duK3uil+46WsGU\nvxehRnPi60R8aeWkA590+3jUx9NInTF3PTtUDnH0hm+Wo4hMn6YpWs+4EJhxnHlzOBI4EPULNRZn\nP32LfrhTW6OmpYC3os0kH9qrLsvJEzs7k1+0UMJ7NW21HGtQqhmoL/n4gCRwfZOem9UY2LC0KpLr\nKMe87YriZ1ieibqtK8irdIqCrJrOZ246BqCv+pLcr3tzgvrOmnjA0HBCf8ATUo+bzokpFWYypidX\n86ovc6R4wOt074ZdU0cjYerzw72SZ6wSbpQewE/DSwcWm8EKLGlrOYGoUiylTm1K78a9lzlwwRam\n2IC+hgkdGjFk1wXYlF2BJ+MURNCxoHkbMG8G7dQ0ZA4hN5gTcbCmf5oLdUUo0Oe/8UHE3zUqVSiy\nQvvmAlCo+YoMOdwtFfG3ePWLzOY4F21+KcCUkOdIfAg77A9EAF0x/H7X3KIR3At6I2smk16Y9pTR\n0Bv5YC7h/OxwqmMsVTIV6eCsuULbdlro6jS+/W675yunabfH35vFrHCshiAmNoFlB8vrld3vtecg\n8XQp1NwyDMCreB3U85Mi6T3H/r24MLBtD7MuQxT3GCdUVbgXfWmbc73eZ7CM1tEKSCHr8s3Y1zVo\nf0t18LVM1g0aegjWnoOEYAdo7c2L8fGEiQ1FSRm+LMTLGlaXwI92W73Ym+whIh50IqdyTibmVZYu\nueHUcYQIqj0QKk+t44chvuRZU6Qg8m9rxE84TMOw7P6Y2xGb0dCxcvCoqoEU/YCXGl+I07Zrrtzb\nKuSFmuNp1heCRmtyoLyOGTD8b+oxdBljmbpKKDqVsowUM7QP4Az8JCvFezxdPJFag3YWlad4xQQw\nSeJkcXsdV/eflsSPvC76l+cXX5z2v/3y4jc853MqKjkediRDDafTdzywf3ouwQYrSzEShUtRsEEN\nzY2STNP9ErhnC+w/5RuqY5S/4SGoLRlbhKkPz3dXgOt6GUexmsUkPls+P/uv1bM+QftQvp1j9Xv5\n5WONBchcH2uPqJawhP9nIyaiXxRw1qWU0/dIcW648iN9TuIJYUvH5vVeAUioAxkso8RK+XsRtEht\ncNCDHc9V7eWxZ9c2GwKiUYsntAgIYQ1DV9ZvmEpQXzaLFQh9OECCc7eaVHN1P7hSDHRyE6Xh/aZi\nZ/Jhlba6J30C0bDpIRGUJd7hzdC9FFaXlM+jYXmClS+k+Fdxd9lkXf6mBjerO7TDw8J/7D6VQ/wi\nCPW1ClA9DFqI2JOXsVMDtMDj6EvxGtFGI5xtX0Gtii4VYfHAH5D2hdiRrEDlNhc/oa0JZuKQRlMH\nmeUvreSXwWJ4DwqoH9Z7qFXsJ07lylU0Ptw8LRopzOovw45vr8NVhC3NZHRFf+Rg5ORGjL0bRIva\nr6oDzmSQcJ8jq0wa+P/keBtmLXu2vYzE4WUX0oil/YmMUi4s2zblQ9j77I5+ISZDCdZIYaTsSNpa\n1jxj7teVFp3wf+jCNbT9TTwWAfKyfhOrQiaEdxHd+2pey5e2qDAA3GnMOaBKAaEjy15Wc3vuwbnM\nOMjr928VheAEYl5UgrfX5iBez5nO/XToC6v7FjzDxj+2gNUX+kjxttD3t9mjMZKTbtBVVvVEZlWJ\ni7oFriy6hQ3Feh9Z7q6HqEzAc+7ZVdsFWjLyxrBiF2Z47ka+4q0hazU5Lcy+2fgQgdrOULtGvK3l\nSzLeMQLGJMECrImwdA1ldDIYbXI6PEd1nEwIibrHW5iVv1A/KYVj7JtDtyncDq2a/MNUkkKc/Brj\nL1pheA6vuwZfg1K1sbp/xQc2QX6nvAqFj74pBO9lOu2ShC3GWN4Xj2DG+l011j98gaCDEsutOTFh\nyvV6Kr8eS996wjeTqUv3pawClZ9VmL98R/t55bb0btNwxiwWYsLBTJ16Riiw4nypNm8D10Q9QedJ\n8Oyx6ETW6n22kt0vR0srgnmjn9AiGYpP9l3+GLy0MFYs57oLOqFVkXGic3VkejlebPGeNyH3yLey\nxcqzie41GsakCFPVx8p1oQELw4O0J2oDGStkBenZH+FwyboKU82uSjuO0voptYhvnwrfbcBXSoYc\nXCkKreRmW2L7dzvJLabAJpT70xGSFGtZ2ZIsPKiJJtbOpETAvc7NNQL0jkaP3muBjuXLz8XZa/G3\n9Onot910Z8kRaEu6UUvQPp1fiio8pWsxekyoQR0LTpR9C6sFxyyJqmlaDqbjkxNJJ0V3VoWj65yg\nGfihGnMG/t4lMHFxyx7f8xRilquBiLd+DOn7D+tvP7z59rWbc4Nm3Vr/hBaasJiUhHduO2Tyf41C\nMoBuvfz8YiVvQY3iKPFDVjpy6YSvtXHBcZFxVGUUIfF/3IfAJnwpF0zDAx0Yn1ASzBSZrP655RcL\nCSNsuKPlWtZewMwcyeHe8KxRNHmyVp9nef/Vuzfff1h//frlq9fvVNIVre1nlmXzTHzz9uWr9bdv\nX/3wzev3wVuxpszUUY8RsiwTWW8Fnpz2J1KwSbkQ9nIMEOk0nfbcSsmMe5uhwW4SW06U7jy5GIVB\nxo3x22mf4oWxUgirbmXc7THnysZHqGiyAOKRQJZCBQ03dRWJ5mllBkxlhh7/QHtte6BJeQ8xTj7W\nHi0NAhccXGI6nQCdxjPjbDmBGKZfUIyjZ2hEyNXiL81QYoMuRp/dVDiWm4cfKXP0PbyBDh+erSTT\n4+W5Y3D2tS/KUXwfurIvGYdJl7pqNuSG2a5kSE+MhVagpT1o+3ZxbRjoNra15IBGB24CsmLgnudS\nqtTq3WuBftWmOuTF4mna3oX06728qvsUv1rAb0QPXHgms/z8sDDpHXU3glE7Gs/QKcFj1AnYAP4s\nzlxBigZhNHvymf69TdzqPI0tLzPpZ0/EB9zBM06A6jBn6UDZSuJVI757+0EUeTnwjh9ik0Ljl1WF\nd3d2+NNiNRABGsGbywJIBu50NpCHUcOArDyldDYz21WnyrEGXNyfDp6LH3v8NSPKEJ3Tjw6TCT/H\nXy02xtYy+urrHz68+ceb168oTBq9iGZ4xwA7KBL4Ghcn6GuUEX+e+Z4McDJQKq3UjsXMVjSSjMaY\nJh8wbEwDs0LXjvFq374MDemciDf10qnEPzqh+zBsz/4aqewnW35Lo+TybgCnzwg1CYQcWdxilq6s\ndHb5Xgfp7OKj5CL20v0cXAvsVdVc6iuVkwcPkrA7Mkx5z4QzTBoqiE8JgnoOEYDqRPi/ngqqG+kh\npes14rteK0PcgqUCC4GMUmw5yvwLIGC7kcp7x9RYzkbGlFjJx5hT4DKWra4+c9SVNR3TbuoYu/8D\nt3RdWg==\n'))
for name, code in _chut_modules:
    if PY3:
        if isinstance(code, str):
            code = code.encode('utf-8')
    else:
        name = bytes(name)
    code = zlib.decompress(base64.decodestring(code))
    mod = types.ModuleType(name)
    globs = dict()
    if PY3:
        if isinstance(code, bytes):
            code = code.decode('utf-8')
        exec(code, globs)
    else:
        exec('exec code in globs')
    mod.__dict__.update(globs)
    if name == 'chut':
        mod.wraps_module(mod)
    else:
        sys.modules[name] = mod
from chut import env
# -*- coding: utf-8 -*-
import chut as sh
import os


@sh.console_script(fmt='msg')
def chutify(args):
    """
    Usage: %prog [options] [<location>]

    Generate binary scripts from all @console_script contained in <location>
    <location> can be a directory, a python file or a dotted name.

    If <location> is .git then generate a pre-commit hook which generate script
    from the current directory.

    <location> and --destination can be set in a .chut file:

        [chut]
        destination = bin/
        location = scripts

    Options:

    -v, --version                 Print script version
    -l, --loop                    Generate scripts when the source change
    -s NAME, --section NAME       Use NAME section in .chut [default: chut]
    --devel                       Install develop scripts in bin/
    --upgrade                     Upgrade virtualenv dependencies
    -d DIR, --destination=DIR     Destination [default: dist/scripts]
    -i X, --interpreter=X         Python interpreter to use
    %options-30s
    """
    config = sh.ini('.chut')
    if sh.env.git_dir:  # pragma: no cover
        cfg = config['githook'] or config[args['--section']]
    else:
        cfg = config[args['--section']]

    interpreter = args['--interpreter'] or cfg.interpreter or 'python'
    if interpreter in ('2', '3'):  # pragma: no cover
        interpreter = 'python' + interpreter
    args['--interpreter'] = interpreter

    location = args.get('<location>') or cfg.location or os.getcwd()
    location = os.path.expanduser(location)

    if location.endswith('.git'):
        hooks = sh.path.join(location, 'hooks')
        hook = sh.path.join(hooks, 'pre-commit')
        args['destination'] = hooks
        generator = sh.Generator(**args)
        if not __file__.endswith('chutify'):
            filename = __file__.replace('.pyc', '.py')
            script = generator(filename)[0]
            sh.mv(script, hook)
        else:  # pragma: no cover
            # install git hook
            sh.cp(__file__, hook)
        executable = sh.chmod('+x', hook)
        if executable:
            print(executable.commands_line)
        return 0

    if cfg.destination and args['--destination'] == 'dist/scripts':
        args['--destination'] = cfg.destination

    generator = sh.Generator(**args)

    commands = cfg.run.as_list('\n')
    commands = [c.strip() for c in commands if c.strip()]

    def gen():
        scripts = generator(location)
        for cmd in commands:
            print('$ %s' % cmd)
            if ' ' in cmd:
                binary, args = cmd.split(' ', 1)
                sh[binary](args) > 2
            else:
                sh[cmd]() > 2
        return scripts

    if args['--loop']:  # pragma: no cover
        import time
        while True:
            try:
                gen()
                time.sleep(.1)
            except KeyboardInterrupt:
                return 0
    else:
        scripts = gen()
        if sh.env.git_dir:  # pragma: no cover
            sh.git('add -f', *scripts) > 1
    return 0

if __name__ == '__main__':
    chutify()
