UNPKG

26.4 kBJavaScriptView Raw
1// koffee 1.14.0
2
3/*
400 00 0000000 000 000 000
5000 000 000 000 000 0000 000
6000000000 000000000 000 000 0 000
7000 0 000 000 000 000 000 0000
8000 000 000 000 000 000 000
9 */
10var app, args, childp, createWindow, electron, highlight, klog, kolor, konrad, konradSend, konradUdp, konradVersion, kstr, noon, p, pkg, post, prefs, quit, ref, setRootDir, slash, startKonrad, udp,
11 slice = [].slice,
12 indexOf = [].indexOf;
13
14ref = require('kxk'), app = ref.app, args = ref.args, childp = ref.childp, klog = ref.klog, kolor = ref.kolor, kstr = ref.kstr, noon = ref.noon, post = ref.post, prefs = ref.prefs, slash = ref.slash, udp = ref.udp;
15
16pkg = require('../package.json');
17
18electron = require('electron');
19
20app = new app({
21 dir: __dirname,
22 pkg: pkg,
23 shortcut: 'CmdOrCtrl+F2',
24 index: 'index.html',
25 icon: '../img/app.ico',
26 tray: '../img/menu@2x.png',
27 about: '../img/about.png',
28 onQuit: function() {
29 return quit();
30 },
31 width: 400,
32 height: 400,
33 minWidth: 300,
34 minHeight: 200,
35 args: "show open window on startup true\nprefs show preferences false"
36});
37
38konrad = null;
39
40konradVersion = null;
41
42konradUdp = new udp({
43 port: 9559
44});
45
46konradSend = function() {
47 var args, msg, s;
48 msg = arguments[0], args = 2 <= arguments.length ? slice.call(arguments, 1) : [];
49 s = [msg + ':'].concat(args).join(' ');
50 return konradUdp.send(s);
51};
52
53if (args.verbose) {
54 klog(kolor.white(kolor.bold("\n" + pkg.name, kolor.gray("v" + pkg.version + "\n"))));
55 klog(kolor.yellow(kolor.bold('process')));
56 p = {
57 cwd: process.cwd()
58 };
59 klog(noon.stringify(p, {
60 colors: true
61 }));
62 klog(kolor.yellow.bold('args'));
63 klog(noon.stringify(args, {
64 colors: true
65 }));
66 klog('');
67}
68
69if (args.prefs) {
70 klog(kolor.yellow(kolor.bold('prefs')));
71 klog(kolor.green(kolor.bold(prefs.store.file)));
72 if (slash.fileExists(prefs.store.file)) {
73 klog(noon.stringify(noon.load(prefs.store.file), {
74 colors: true
75 }));
76 }
77}
78
79post.on('Restart konrad', function() {
80 return startKonrad(prefs.get('rootDir'));
81});
82
83startKonrad = function(rootDir) {
84 var path, treekill;
85 prefs.set('rootDir', rootDir);
86 if (konrad != null) {
87 klog('killing konrad', konrad.pid);
88 treekill = require('tree-kill');
89 treekill(konrad.pid);
90 }
91 path = slash.resolve(__dirname + "/../js/konrad.js");
92 if (indexOf.call(process.env.PATH.split(':'), '/usr/local/bin') < 0) {
93 process.env.PATH = process.env.PATH + ':/usr/local/bin';
94 }
95 konrad = childp.spawn('node', ['--trace-warnings', path, '-w', '-v'], {
96 cwd: rootDir,
97 shell: true,
98 env: process.env,
99 detached: false
100 });
101 konrad.on('exit', function(code, signal) {
102 klog('konrad.on exit', code, signal);
103 return konradSend('exit');
104 });
105 konrad.on('close', function(code, signal) {
106 post.toWins('konradExit', "konrad exit code: " + code);
107 return konradSend('exit');
108 });
109 konrad.stderr.on('data', function(data) {
110 var s;
111 klog(data.toString());
112 s = kstr.stripAnsi(data.toString());
113 konradSend('error', s);
114 if (app.win != null) {
115 return post.toWins('konradError', "konrad error: " + s, kstr.ansi2html(data.toString()));
116 } else {
117 return createWindow('konradError', "konrad error: " + s, kstr.ansi2html(data.toString()));
118 }
119 });
120 return konrad.stdout.on('data', function(data) {
121 var s;
122 s = kstr.stripAnsi(data.toString());
123 if (/\ 👁\ \ /.test(s)) {
124 konradVersion = s.split('👁 ')[1];
125 post.toWins('konradVersion', konradVersion);
126 return konradSend('version', konradVersion);
127 } else if (app.win != null) {
128 post.toWins('konradOutput', s, kstr.ansi2html(data.toString()));
129 if (/ 😡 /.test(s)) {
130 konradSend('error', s);
131 app.win.show();
132 return app.win.focus();
133 } else {
134 return konradSend('output', s);
135 }
136 } else {
137 if (/ 😡 /.test(s)) {
138 konradSend('error', s);
139 return createWindow('konradError', s, kstr.ansi2html(data.toString()));
140 } else {
141 konradSend('output', s);
142 return highlight();
143 }
144 }
145 });
146};
147
148createWindow = function(msg, s, h) {
149 return app.createWindow(function(win) {
150 klog('winReadyToShow', win.id, msg);
151 return post.toWin(win.id, msg, s, h);
152 });
153};
154
155quit = function() {
156 var treekill;
157 if (konrad != null) {
158 klog('killing konrad', konrad != null ? konrad.pid : void 0);
159 treekill = require('tree-kill');
160 treekill(konrad.pid, function() {
161 return app.exitApp();
162 });
163 konrad = null;
164 return 'delay';
165 }
166};
167
168post.on('Restart', function() {
169 var treekill;
170 klog('on Restart', konrad.pid);
171 treekill = require('tree-kill');
172 return treekill(konrad.pid, function() {
173 klog('spawn', process.argv[0], process.argv.slice(1));
174 childp.spawn(process.argv[0], process.argv.slice(1), {
175 cwd: process.cwd(),
176 encoding: 'utf8',
177 detached: true,
178 shell: true,
179 windowsHide: true
180 });
181 return process.exit(0);
182 });
183});
184
185setRootDir = function() {
186 var opts;
187 opts = {
188 title: 'Open',
189 properties: ['openDirectory']
190 };
191 return electron.dialog.showOpenDialog(opts).then((function(_this) {
192 return function(result) {
193 if (!result.canceled && valid(result.filePaths)) {
194 return startKonrad(result.filePaths[0]);
195 }
196 };
197 })(this));
198};
199
200post.on('setRootDir', setRootDir);
201
202post.on('appReady', function() {
203 var rootDir;
204 if (rootDir = prefs.get('rootDir')) {
205 return startKonrad(rootDir);
206 } else {
207 return setRootDir();
208 }
209});
210
211post.on('winReady', function(wID) {
212 if (konradVersion) {
213 return post.toWin(wID, 'konradVersion', konradVersion);
214 }
215});
216
217highlight = function() {
218 var base, unhighlight;
219 if (app.tray == null) {
220 return;
221 }
222 if (slash.win()) {
223 app.tray.setImage(slash.resolve(slash.join(__dirname, '../img/menu.png')));
224 unhighlight = function() {
225 return app.tray.setImage(slash.resolve(slash.join(__dirname, '../img/menu@2x.png')));
226 };
227 return setTimeout(unhighlight, 1000);
228 } else {
229 if (typeof (base = app.tray).setHighlightMode === "function") {
230 base.setHighlightMode('always');
231 }
232 unhighlight = function() {
233 var base1;
234 return typeof (base1 = app.tray).setHighlightMode === "function" ? base1.setHighlightMode('never') : void 0;
235 };
236 return setTimeout(unhighlight, 1000);
237 }
238};
239
240post.on('highlight', highlight);
241
242//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIuLi9jb2ZmZWUiLCJzb3VyY2VzIjpbIm1haW4uY29mZmVlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUE7Ozs7Ozs7QUFBQSxJQUFBLGdNQUFBO0lBQUE7OztBQVFBLE1BQTBFLE9BQUEsQ0FBUSxLQUFSLENBQTFFLEVBQUUsYUFBRixFQUFPLGVBQVAsRUFBYSxtQkFBYixFQUFxQixlQUFyQixFQUEyQixpQkFBM0IsRUFBa0MsZUFBbEMsRUFBd0MsZUFBeEMsRUFBOEMsZUFBOUMsRUFBb0QsaUJBQXBELEVBQTJELGlCQUEzRCxFQUFrRTs7QUFFbEUsR0FBQSxHQUFXLE9BQUEsQ0FBUSxpQkFBUjs7QUFDWCxRQUFBLEdBQVcsT0FBQSxDQUFRLFVBQVI7O0FBRVgsR0FBQSxHQUFNLElBQUksR0FBSixDQUNGO0lBQUEsR0FBQSxFQUFZLFNBQVo7SUFDQSxHQUFBLEVBQVksR0FEWjtJQUVBLFFBQUEsRUFBWSxjQUZaO0lBR0EsS0FBQSxFQUFZLFlBSFo7SUFJQSxJQUFBLEVBQVksZ0JBSlo7SUFLQSxJQUFBLEVBQVksb0JBTFo7SUFNQSxLQUFBLEVBQVksa0JBTlo7SUFPQSxNQUFBLEVBQVksU0FBQTtlQUFHLElBQUEsQ0FBQTtJQUFILENBUFo7SUFRQSxLQUFBLEVBQVksR0FSWjtJQVNBLE1BQUEsRUFBWSxHQVRaO0lBVUEsUUFBQSxFQUFZLEdBVlo7SUFXQSxTQUFBLEVBQVksR0FYWjtJQVlBLElBQUEsRUFBTSxpRkFaTjtDQURFOztBQWtCTixNQUFBLEdBQWlCOztBQUNqQixhQUFBLEdBQWlCOztBQUVqQixTQUFBLEdBQVksSUFBSSxHQUFKLENBQVE7SUFBQSxJQUFBLEVBQUssSUFBTDtDQUFSOztBQUNaLFVBQUEsR0FBYSxTQUFBO0FBQ1QsUUFBQTtJQURVLG9CQUFLO0lBQ2YsQ0FBQSxHQUFJLENBQUMsR0FBQSxHQUFJLEdBQUwsQ0FBUyxDQUFDLE1BQVYsQ0FBaUIsSUFBakIsQ0FBc0IsQ0FBQyxJQUF2QixD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QUF3QixJQUF4QixFQUhKO0tBQUEsTUFBQTs7Z0JBTVksQ0FBQyxpQkFBa0I7O1FBQzNCLFdBQUEsR0FBYyxTQUFBO0FBQUcsZ0JBQUE7b0ZBQVEsQ0FBQyxpQkFBa0I7UUFBOUI7ZUFDZCxVQUFBLENBQVcsV0FBWCxFQUF3QixJQUF4QixFQVJKOztBQUpROztBQWNaLElBQUksQ0FBQyxFQUFMLENBQVEsV0FBUixFQUFvQixTQUFwQiIsInNvdXJjZXNDb250ZW50IjpbIiMjI1xuMDAgICAgIDAwICAgMDAwMDAwMCAgIDAwMCAgMDAwICAgMDAwXG4wMDAgICAwMDAgIDAwMCAgIDAwMCAgMDAwICAwMDAwICAwMDBcbjAwMDAwMDAwMCAgMDAwMDAwMDAwICAwMDAgIDAwMCAwIDAwMFxuMDAwIDAgMDAwICAwMDAgICAwMDAgIDAwMCAgMDAwICAwMDAwXG4wMDAgICAwMDAgIDAwMCAgIDAwMCAgMDAwICAwMDAgICAwMDBcbiMjI1xuXG57IGFwcCwgYXJncywgY2hpbGRwLCBrbG9nLCBrb2xvciwga3N0ciwgbm9vbiwgcG9zdCwgcHJlZnMsIHNsYXNoLCB1ZHAgfSA9IHJlcXVpcmUgJ2t4aydcblxucGtnICAgICAgPSByZXF1aXJlICcuLi9wYWNrYWdlLmpzb24nXG5lbGVjdHJvbiA9IHJlcXVpcmUgJ2VsZWN0cm9uJ1xuXG5hcHAgPSBuZXcgYXBwXG4gICAgZGlyOiAgICAgICAgX19kaXJuYW1lXG4gICAgcGtnOiAgICAgICAgcGtnXG4gICAgc2hvcnRjdXQ6ICAgJ0NtZE9yQ3RybCtGMidcbiAgICBpbmRleDogICAgICAnaW5kZXguaHRtbCdcbiAgICBpY29uOiAgICAgICAnLi4vaW1nL2FwcC5pY28nXG4gICAgdHJheTogICAgICAgJy4uL2ltZy9tZW51QDJ4LnBuZydcbiAgICBhYm91dDogICAgICAnLi4vaW1nL2Fib3V0LnBuZydcbiAgICBvblF1aXQ6ICAgICAtPiBxdWl0KClcbiAgICB3aWR0aDogICAgICA0MDBcbiAgICBoZWlnaHQ6ICAgICA0MDBcbiAgICBtaW5XaWR0aDogICAzMDBcbiAgICBtaW5IZWlnaHQ6ICAyMDBcbiAgICBhcmdzOiBcIlwiXCJcbiAgICAgICAgc2hvdyAgICAgIG9wZW4gd2luZG93IG9uIHN0YXJ0dXAgIHRydWVcbiAgICAgICAgcHJlZnMgICAgIHNob3cgcHJlZmVyZW5jZXMgICAgICAgIGZhbHNlXG4gICAgICAgIFwiXCJcIlxuXG5rb25yYWQgICAgICAgICA9IG51bGxcbmtvbnJhZFZlcnNpb24gID0gbnVsbFxuXG5rb25yYWRVZHAgPSBuZXcgdWRwIHBvcnQ6OTU1OVxua29ucmFkU2VuZCA9IChtc2csIGFyZ3MuLi4pIC0+IFxuICAgIHMgPSBbbXNnKyc6J10uY29uY2F0KGFyZ3MpLmpvaW4gJyAnXG4gICAgIyBrbG9nICdrb25yYWRTZW5kJyBzXG4gICAga29ucmFkVWRwLnNlbmQgc1xuXG5pZiBhcmdzLnZlcmJvc2VcbiAgICBcbiAgICBrbG9nIGtvbG9yLndoaXRlIGtvbG9yLmJvbGQgXCJcXG4je3BrZy5uYW1lfVwiLCBrb2xvci5ncmF5IFwidiN7cGtnLnZlcnNpb259XFxuXCJcbiAgICBrbG9nIGtvbG9yLnllbGxvdyBrb2xvci5ib2xkICdwcm9jZXNzJ1xuICAgIHAgPSBjd2Q6IHByb2Nlc3MuY3dkKClcbiAgICBrbG9nIG5vb24uc3RyaW5naWZ5IHAsIGNvbG9yczp0cnVlXG4gICAga2xvZyBrb2xvci55ZWxsb3cuYm9sZCAnYXJncydcbiAgICBrbG9nIG5vb24uc3RyaW5naWZ5IGFyZ3MsIGNvbG9yczp0cnVlXG4gICAga2xvZyAnJ1xuXG5pZiBhcmdzLnByZWZzXG4gICAgXG4gICAga2xvZyBrb2xvci55ZWxsb3cga29sb3IuYm9sZCAncHJlZnMnXG4gICAga2xvZyBrb2xvci5ncmVlbiBrb2xvci5ib2xkIHByZWZzLnN0b3JlLmZpbGVcbiAgICBpZiBzbGFzaC5maWxlRXhpc3RzIHByZWZzLnN0b3JlLmZpbGVcbiAgICAgICAga2xvZyBub29uLnN0cmluZ2lmeSBub29uLmxvYWQocHJlZnMuc3RvcmUuZmlsZSksIGNvbG9yczp0cnVlXG5cbiMgMDAwICAgMDAwICAgMDAwMDAwMCAgIDAwMCAgIDAwMCAgMDAwMDAwMDAgICAgMDAwMDAwMCAgIDAwMDAwMDBcbiMgMDAwICAwMDAgICAwMDAgICAwMDAgIDAwMDAgIDAwMCAgMDAwICAgMDAwICAwMDAgICAwMDAgIDAwMCAgIDAwMFxuIyAwMDAwMDAwICAgIDAwMCAgIDAwMCAgMDAwIDAgMDAwICAwMDAwMDAwICAgIDAwMDAwMDAwMCAgMDAwICAgMDAwXG4jIDAwMCAgMDAwICAgMDAwICAgMDAwICAwMDAgIDAwMDAgIDAwMCAgIDAwMCAgMDAwICAgMDAwICAwMDAgICAwMDBcbiMgMDAwICAgMDAwICAgMDAwMDAwMCAgIDAwMCAgIDAwMCAgMDAwICAgMDAwICAwMDAgICAwMDAgIDAwMDAwMDBcblxucG9zdC5vbiAnUmVzdGFydCBrb25yYWQnIC0+IHN0YXJ0S29ucmFkIHByZWZzLmdldCAncm9vdERpcidcblxuc3RhcnRLb25yYWQgPSAocm9vdERpcikgLT5cbiAgICBcbiAgICBwcmVmcy5zZXQgJ3Jvb3REaXInIHJvb3REaXJcblxuICAgIGlmIGtvbnJhZD9cbiAgICAgICAga2xvZyAna2lsbGluZyBrb25yYWQnIGtvbnJhZC5waWRcbiAgICAgICAgdHJlZWtpbGwgPSByZXF1aXJlICd0cmVlLWtpbGwnXG4gICAgICAgIHRyZWVraWxsIGtvbnJhZC5waWRcblxuICAgIHBhdGggPSBzbGFzaC5yZXNvbHZlIFwiI3tfX2Rpcm5hbWV9Ly4uL2pzL2tvbnJhZC5qc1wiXG4gICAgXG4gICAgaWYgJy91c3IvbG9jYWwvYmluJyBub3QgaW4gcHJvY2Vzcy5lbnYuUEFUSC5zcGxpdCAnOidcbiAgICAgICAgcHJvY2Vzcy5lbnYuUEFUSCA9IHByb2Nlc3MuZW52LlBBVEggKyAnOi91c3IvbG9jYWwvYmluJ1xuICAgIFxuICAgIGtvbnJhZCA9IGNoaWxkcC5zcGF3biAnbm9kZScgWyctLXRyYWNlLXdhcm5pbmdzJyBwYXRoLCAnLXcnICctdiddLFxuICAgICAgICBjd2Q6ICAgICAgcm9vdERpclxuICAgICAgICBzaGVsbDogICAgdHJ1ZVxuICAgICAgICBlbnY6ICAgICAgcHJvY2Vzcy5lbnZcbiAgICAgICAgZGV0YWNoZWQ6IGZhbHNlXG4gICAgICAgIFxuICAgIGtvbnJhZC5vbiAnZXhpdCcgKGNvZGUsIHNpZ25hbCkgLT4gXG4gICAgICAgIFxuICAgICAgICBrbG9nICdrb25yYWQub24gZXhpdCcgY29kZSwgc2lnbmFsXG4gICAgICAgIGtvbnJhZFNlbmQgJ2V4aXQnXG5cbiAgICBrb25yYWQub24gJ2Nsb3NlJyAoY29kZSwgc2lnbmFsKSAtPlxuICAgICAgICBcbiAgICAgICAgcG9zdC50b1dpbnMgJ2tvbnJhZEV4aXQnIFwia29ucmFkIGV4aXQgY29kZTogI3tjb2RlfVwiXG4gICAgICAgIGtvbnJhZFNlbmQgJ2V4aXQnXG5cbiAgICBrb25yYWQuc3RkZXJyLm9uICdkYXRhJyAoZGF0YSkgLT5cbiAgICAgICAgXG4gICAgICAgIGtsb2cgZGF0YS50b1N0cmluZygpXG4gICAgICAgIHMgPSBrc3RyLnN0cmlwQW5zaSBkYXRhLnRvU3RyaW5nKClcbiAgICAgICAga29ucmFkU2VuZCAnZXJyb3InIHNcbiAgICAgICAgaWYgYXBwLndpbj9cbiAgICAgICAgICAgIHBvc3QudG9XaW5zICdrb25yYWRFcnJvcicgXCJrb25yYWQgZXJyb3I6ICN7c31cIiBrc3RyLmFuc2kyaHRtbCBkYXRhLnRvU3RyaW5nKClcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgY3JlYXRlV2luZG93ICdrb25yYWRFcnJvcicgXCJrb25yYWQgZXJyb3I6ICN7c31cIiBrc3RyLmFuc2kyaHRtbCBkYXRhLnRvU3RyaW5nKClcblxuICAgIGtvbnJhZC5zdGRvdXQub24gJ2RhdGEnIChkYXRhKSAtPlxuICAgICAgICBcbiAgICAgICAgcyA9IGtzdHIuc3RyaXBBbnNpIGRhdGEudG9TdHJpbmcoKVxuICAgICAgICBcbiAgICAgICAgaWYgL1xcIPCfkYFcXCBcXCAvLnRlc3Qgc1xuICAgICAgICAgICAga29ucmFkVmVyc2lvbiA9IHMuc3BsaXQoJ/CfkYEgICcpWzFdXG4gICAgICAgICAgICBwb3N0LnRvV2lucyAna29ucmFkVmVyc2lvbicga29ucmFkVmVyc2lvblxuICAgICAgICAgICAga29ucmFkU2VuZCAndmVyc2lvbicga29ucmFkVmVyc2lvblxuICAgICAgICBlbHNlIGlmIGFwcC53aW4/XG4gICAgICAgICAgICBwb3N0LnRvV2lucyAna29ucmFkT3V0cHV0JyBzLCBrc3RyLmFuc2kyaHRtbCBkYXRhLnRvU3RyaW5nKClcbiAgICAgICAgICAgIGlmIC8g8J+YoSAvLnRlc3Qgc1xuICAgICAgICAgICAgICAgIGtvbnJhZFNlbmQgJ2Vycm9yJyBzXG4gICAgICAgICAgICAgICAgYXBwLndpbi5zaG93KClcbiAgICAgICAgICAgICAgICBhcHAud2luLmZvY3VzKClcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBrb25yYWRTZW5kICdvdXRwdXQnIHNcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgaWYgLyDwn5ihIC8udGVzdCBzXG4gICAgICAgICAgICAgICAga29ucmFkU2VuZCAnZXJyb3InIHNcbiAgICAgICAgICAgICAgICBjcmVhdGVXaW5kb3cgJ2tvbnJhZEVycm9yJyBzLCBrc3RyLmFuc2kyaHRtbCBkYXRhLnRvU3RyaW5nKClcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBrb25yYWRTZW5kICdvdXRwdXQnIHNcbiAgICAgICAgICAgICAgICBoaWdobGlnaHQoKVxuXG5jcmVhdGVXaW5kb3cgPSAobXNnLCBzLCBoKSAtPlxuICAgIFxuICAgIGFwcC5jcmVhdGVXaW5kb3cgKHdpbikgLT5cbiAgICAgICAga2xvZyAnd2luUmVhZHlUb1Nob3cnIHdpbi5pZCwgbXNnICMsIHMsIGhcbiAgICAgICAgcG9zdC50b1dpbiB3aW4uaWQsIG1zZywgcywgaFxuICAgICAgICAgICAgICAgIFxuIyAgMDAwMDAwMCAgIDAwMCAgIDAwMCAgMDAwICAwMDAwMDAwMDAgIFxuIyAwMDAgICAwMDAgIDAwMCAgIDAwMCAgMDAwICAgICAwMDAgICAgIFxuIyAwMDAgMDAgMDAgIDAwMCAgIDAwMCAgMDAwICAgICAwMDAgICAgIFxuIyAwMDAgMDAwMCAgIDAwMCAgIDAwMCAgMDAwICAgICAwMDAgICAgIFxuIyAgMDAwMDAgMDAgICAwMDAwMDAwICAgMDAwICAgICAwMDAgICAgIFxuXG5xdWl0ID0gLT5cblxuICAgIGlmIGtvbnJhZD9cbiAgICAgICAga2xvZyAna2lsbGluZyBrb25yYWQnIGtvbnJhZD8ucGlkXG4gICAgICAgIHRyZWVraWxsID0gcmVxdWlyZSAndHJlZS1raWxsJ1xuICAgICAgICB0cmVla2lsbCBrb25yYWQucGlkLCAtPiBhcHAuZXhpdEFwcCgpXG4gICAgICAgIGtvbnJhZCA9IG51bGxcbiAgICAgICAgJ2RlbGF5J1xuICAgICAgICBcbnBvc3Qub24gJ1Jlc3RhcnQnIC0+XG4gICAgXG4gICAga2xvZyAnb24gUmVzdGFydCcga29ucmFkLnBpZFxuXG4gICAgdHJlZWtpbGwgPSByZXF1aXJlICd0cmVlLWtpbGwnXG4gICAgdHJlZWtpbGwga29ucmFkLnBpZCwgLT4gXG4gICAgXG4gICAgICAgIGtsb2cgJ3NwYXduJyBwcm9jZXNzLmFyZ3ZbMF0sIHByb2Nlc3MuYXJndi5zbGljZSgxKVxuICAgICAgICBjaGlsZHAuc3Bhd24gcHJvY2Vzcy5hcmd2WzBdLCBwcm9jZXNzLmFyZ3Yuc2xpY2UoMSksXG4gICAgICAgICAgICBjd2Q6ICAgICAgICAgcHJvY2Vzcy5jd2QoKVxuICAgICAgICAgICAgZW5jb2Rpbmc6ICAgICd1dGY4J1xuICAgICAgICAgICAgZGV0YWNoZWQ6ICAgIHRydWVcbiAgICAgICAgICAgIHNoZWxsOiAgICAgICB0cnVlXG4gICAgICAgICAgICB3aW5kb3dzSGlkZTogdHJ1ZVxuICAgICAgICBwcm9jZXNzLmV4aXQgMFxuICAgICAgICBcbiMgIDAwMDAwMDAgIDAwMDAwMDAwICAwMDAwMDAwMDAgICAgICAgIDAwMDAwMDAwICAgIDAwMDAwMDAgICAgMDAwMDAwMCAgIDAwMDAwMDAwMCAgXG4jIDAwMCAgICAgICAwMDAgICAgICAgICAgMDAwICAgICAgICAgICAwMDAgICAwMDAgIDAwMCAgIDAwMCAgMDAwICAgMDAwICAgICAwMDAgICAgIFxuIyAwMDAwMDAwICAgMDAwMDAwMCAgICAgIDAwMCAgICAgICAgICAgMDAwMDAwMCAgICAwMDAgICAwMDAgIDAwMCAgIDAwMCAgICAgMDAwICAgICBcbiMgICAgICAwMDAgIDAwMCAgICAgICAgICAwMDAgICAgICAgICAgIDAwMCAgIDAwMCAgMDAwICAgMDAwICAwMDAgICAwMDAgICAgIDAwMCAgICAgXG4jIDAwMDAwMDAgICAwMDAwMDAwMCAgICAgMDAwICAgICAgICAgICAwMDAgICAwMDAgICAwMDAwMDAwICAgIDAwMDAwMDAgICAgICAwMDAgICAgIFxuXG5zZXRSb290RGlyID0gLT5cblxuICAgIG9wdHMgPVxuICAgICAgICB0aXRsZTogICAgICAnT3BlbidcbiAgICAgICAgcHJvcGVydGllczogWydvcGVuRGlyZWN0b3J5J11cblxuICAgIGVsZWN0cm9uLmRpYWxvZy5zaG93T3BlbkRpYWxvZyhvcHRzKS50aGVuIChyZXN1bHQpID0+XG4gICAgICAgIGlmIG5vdCByZXN1bHQuY2FuY2VsZWQgYW5kIHZhbGlkIHJlc3VsdC5maWxlUGF0aHNcbiAgICAgICAgICAgIHN0YXJ0S29ucmFkIHJlc3VsdC5maWxlUGF0aHNbMF1cblxucG9zdC5vbiAnc2V0Um9vdERpcicgc2V0Um9vdERpclxuXG4jICAwMDAwMDAwICAgMDAwMDAwMDAgICAwMDAwMDAwMCAgICAgICAgIDAwMDAwMDAwICAgMDAwMDAwMDAgICAwMDAwMDAwICAgMDAwMDAwMCAgICAwMDAgICAwMDAgIFxuIyAwMDAgICAwMDAgIDAwMCAgIDAwMCAgMDAwICAgMDAwICAgICAgICAwMDAgICAwMDAgIDAwMCAgICAgICAwMDAgICAwMDAgIDAwMCAgIDAwMCAgIDAwMCAwMDAgICBcbiMgMDAwMDAwMDAwICAwMDAwMDAwMCAgIDAwMDAwMDAwICAgICAgICAgMDAwMDAwMCAgICAwMDAwMDAwICAgMDAwMDAwMDAwICAwMDAgICAwMDAgICAgMDAwMDAgICAgXG4jIDAwMCAgIDAwMCAgMDAwICAgICAgICAwMDAgICAgICAgICAgICAgIDAwMCAgIDAwMCAgMDAwICAgICAgIDAwMCAgIDAwMCAgMDAwICAgMDAwICAgICAwMDAgICAgIFxuIyAwMDAgICAwMDAgIDAwMCAgICAgICAgMDAwICAgICAgICAgICAgICAwMDAgICAwMDAgIDAwMDAwMDAwICAwMDAgICAwMDAgIDAwMDAwMDAgICAgICAgMDAwICAgICBcblxucG9zdC5vbiAnYXBwUmVhZHknIC0+XG5cbiAgICBpZiByb290RGlyID0gcHJlZnMuZ2V0ICdyb290RGlyJ1xuICAgICAgICBzdGFydEtvbnJhZCByb290RGlyXG4gICAgZWxzZVxuICAgICAgICBzZXRSb290RGlyKClcblxuIzAwMCAgIDAwMCAgMDAwICAwMDAgICAwMDAgICAgICAgIDAwMDAwMDAwICAgMDAwMDAwMDAgICAwMDAwMDAwICAgMDAwMDAwMCAgICAwMDAgICAwMDAgIFxuIzAwMCAwIDAwMCAgMDAwICAwMDAwICAwMDAgICAgICAgIDAwMCAgIDAwMCAgMDAwICAgICAgIDAwMCAgIDAwMCAgMDAwICAgMDAwICAgMDAwIDAwMCAgIFxuIzAwMDAwMDAwMCAgMDAwICAwMDAgMCAwMDAgICAgICAgIDAwMDAwMDAgICAgMDAwMDAwMCAgIDAwMDAwMDAwMCAgMDAwICAgMDAwICAgIDAwMDAwICAgIFxuIzAwMCAgIDAwMCAgMDAwICAwMDAgIDAwMDAgICAgICAgIDAwMCAgIDAwMCAgMDAwICAgICAgIDAwMCAgIDAwMCAgMDAwICAgMDAwICAgICAwMDAgICAgIFxuIzAwICAgICAwMCAgMDAwICAwMDAgICAwMDAgICAgICAgIDAwMCAgIDAwMCAgMDAwMDAwMDAgIDAwMCAgIDAwMCAgMDAwMDAwMCAgICAgICAwMDAgICAgIFxuXG5wb3N0Lm9uICd3aW5SZWFkeScgKHdJRCkgLT5cbiAgICBcbiAgICBwb3N0LnRvV2luIHdJRCwgJ2tvbnJhZFZlcnNpb24nIGtvbnJhZFZlcnNpb24gaWYga29ucmFkVmVyc2lvblxuXG4jIDAwMCAgIDAwMCAgMDAwICAgMDAwMDAwMCAgIDAwMCAgIDAwMCAgMDAwICAgICAgMDAwICAgMDAwMDAwMCAgIDAwMCAgIDAwMCAgMDAwMDAwMDAwICBcbiMgMDAwICAgMDAwICAwMDAgIDAwMCAgICAgICAgMDAwICAgMDAwICAwMDAgICAgICAwMDAgIDAwMCAgICAgICAgMDAwICAgMDAwICAgICAwMDAgICAgIFxuIyAwMDAwMDAwMDAgIDAwMCAgMDAwICAwMDAwICAwMDAwMDAwMDAgIDAwMCAgICAgIDAwMCAgMDAwICAwMDAwICAwMDAwMDAwMDAgICAgIDAwMCAgICAgXG4jIDAwMCAgIDAwMCAgMDAwICAwMDAgICAwMDAgIDAwMCAgIDAwMCAgMDAwICAgICAgMDAwICAwMDAgICAwMDAgIDAwMCAgIDAwMCAgICAgMDAwICAgICBcbiMgMDAwICAgMDAwICAwMDAgICAwMDAwMDAwICAgMDAwICAgMDAwICAwMDAwMDAwICAwMDAgICAwMDAwMDAwICAgMDAwICAgMDAwICAgICAwMDAgICAgIFxuXG5oaWdobGlnaHQgPSAtPlxuXG4gICAgcmV0dXJuIGlmIG5vdCBhcHAudHJheT8gXG4gICAgXG4gICAgaWYgc2xhc2gud2luKClcbiAgICAgICAgYXBwLnRyYXkuc2V0SW1hZ2Ugc2xhc2gucmVzb2x2ZSBzbGFzaC5qb2luIF9fZGlybmFtZSwgJy4uL2ltZy9tZW51LnBuZydcbiAgICAgICAgdW5oaWdobGlnaHQgPSAtPiBhcHAudHJheS5zZXRJbWFnZSBzbGFzaC5yZXNvbHZlIHNsYXNoLmpvaW4gX19kaXJuYW1lLCAnLi4vaW1nL21lbnVAMngucG5nJ1xuICAgICAgICBzZXRUaW1lb3V0IHVuaGlnaGxpZ2h0LCAxMDAwXG4gICAgZWxzZVxuICAgICAgICBcbiAgICAgICAgYXBwLnRyYXkuc2V0SGlnaGxpZ2h0TW9kZT8gJ2Fsd2F5cydcbiAgICAgICAgdW5oaWdobGlnaHQgPSAtPiBhcHAudHJheS5zZXRIaWdobGlnaHRNb2RlPyAnbmV2ZXInXG4gICAgICAgIHNldFRpbWVvdXQgdW5oaWdobGlnaHQsIDEwMDBcblxucG9zdC5vbiAnaGlnaGxpZ2h0JyBoaWdobGlnaHRcblxuIl19
243//# sourceURL=../coffee/main.coffee
\No newline at end of file