UNPKG

27.1 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, valid,
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, valid = ref.valid;
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 console.log('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 if (indexOf.call(process.env.PATH.split(':'), '/opt/homebrew/bin') < 0) {
96 process.env.PATH = process.env.PATH + ':/opt/homebrew/bin';
97 }
98 konrad = childp.spawn('node', ['--trace-warnings', path, '-w', '-v'], {
99 cwd: rootDir,
100 shell: true,
101 env: process.env,
102 detached: false
103 });
104 konrad.on('exit', function(code, signal) {
105 console.log('konrad.on exit', code, signal);
106 return konradSend('exit');
107 });
108 konrad.on('close', function(code, signal) {
109 post.toWins('konradExit', "konrad exit code: " + code);
110 return konradSend('exit');
111 });
112 konrad.stderr.on('data', function(data) {
113 var s;
114 s = kstr.stripAnsi(data.toString());
115 konradSend('error', s);
116 if ((app != null ? app.win : void 0) != null) {
117 return post.toWins('konradError', "konrad error: " + s, kstr.ansi2html(data.toString()));
118 } else {
119 return createWindow('konradError', "konrad error: " + s, kstr.ansi2html(data.toString()));
120 }
121 });
122 return konrad.stdout.on('data', function(data) {
123 var s;
124 s = kstr.stripAnsi(data.toString());
125 if (/\ 👁\ \ /.test(s)) {
126 konradVersion = s.split('👁 ')[1];
127 post.toWins('konradVersion', konradVersion);
128 return konradSend('version', konradVersion);
129 } else if (app.win != null) {
130 if (/ 😡 /.test(s)) {
131 post.toWins('konradError', s, kstr.ansi2html(data.toString()));
132 konradSend('error', s);
133 app.win.show();
134 return app.win.focus();
135 } else {
136 post.toWins('konradOutput', s, kstr.ansi2html(data.toString()));
137 return konradSend('output', s);
138 }
139 } else {
140 if (/ 😡 /.test(s)) {
141 konradSend('error', s);
142 return createWindow('konradError', s, kstr.ansi2html(data.toString()));
143 } else {
144 konradSend('output', s);
145 return highlight();
146 }
147 }
148 });
149};
150
151createWindow = function(msg, s, h) {
152 return app.createWindow(function(w) {
153 return post.toWin(w.id, msg, s, h);
154 });
155};
156
157quit = function() {
158 var treekill;
159 if (konrad != null) {
160 klog('killing konrad', konrad != null ? konrad.pid : void 0);
161 treekill = require('tree-kill');
162 treekill(konrad.pid, function() {
163 return app.exitApp();
164 });
165 konrad = null;
166 return 'delay';
167 }
168};
169
170post.on('Restart', function() {
171 var treekill;
172 klog('on Restart', konrad.pid);
173 treekill = require('tree-kill');
174 return treekill(konrad.pid, function() {
175 klog('spawn', process.argv[0], process.argv.slice(1));
176 childp.spawn(process.argv[0], process.argv.slice(1), {
177 cwd: process.cwd(),
178 encoding: 'utf8',
179 detached: true,
180 shell: true,
181 windowsHide: true
182 });
183 return process.exit(0);
184 });
185});
186
187setRootDir = function() {
188 var opts;
189 opts = {
190 title: 'Open',
191 properties: ['openDirectory']
192 };
193 return electron.dialog.showOpenDialog(opts).then((function(_this) {
194 return function(result) {
195 if (!result.canceled && valid(result.filePaths)) {
196 return startKonrad(result.filePaths[0]);
197 }
198 };
199 })(this));
200};
201
202post.on('setRootDir', setRootDir);
203
204post.on('appReady', function() {
205 var rootDir;
206 if (rootDir = prefs.get('rootDir')) {
207 return startKonrad(rootDir);
208 } else {
209 return setRootDir();
210 }
211});
212
213post.on('winReady', function(wID) {
214 if (konradVersion) {
215 return post.toWin(wID, 'konradVersion', konradVersion);
216 }
217});
218
219highlight = function() {
220 var base, unhighlight;
221 if (app.tray == null) {
222 return;
223 }
224 if (slash.win()) {
225 app.tray.setImage(slash.resolve(slash.join(__dirname, '../img/menu.png')));
226 unhighlight = function() {
227 return app.tray.setImage(slash.resolve(slash.join(__dirname, '../img/menu@2x.png')));
228 };
229 return setTimeout(unhighlight, 1000);
230 } else {
231 if (typeof (base = app.tray).setHighlightMode === "function") {
232 base.setHighlightMode('always');
233 }
234 unhighlight = function() {
235 var base1;
236 return typeof (base1 = app.tray).setHighlightMode === "function" ? base1.setHighlightMode('never') : void 0;
237 };
238 return setTimeout(unhighlight, 1000);
239 }
240};
241
242post.on('highlight', highlight);
243
244//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIuLi9jb2ZmZWUiLCJzb3VyY2VzIjpbIm1haW4uY29mZmVlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUE7Ozs7Ozs7QUFBQSxJQUFBLHVNQUFBO0lBQUE7OztBQVFBLE1BQWlGLE9BQUEsQ0FBUSxLQUFSLENBQWpGLEVBQUUsYUFBRixFQUFPLGVBQVAsRUFBYSxtQkFBYixFQUFxQixlQUFyQixFQUEyQixpQkFBM0IsRUFBa0MsZUFBbEMsRUFBd0MsZUFBeEMsRUFBOEMsZUFBOUMsRUFBb0QsaUJBQXBELEVBQTJELGlCQUEzRCxFQUFrRSxhQUFsRSxFQUF1RTs7QUFFdkUsR0FBQSxHQUFXLE9BQUEsQ0FBUSxpQkFBUjs7QUFDWCxRQUFBLEdBQVcsT0FBQSxDQUFRLFVBQVI7O0FBRVgsR0FBQSxHQUFNLElBQUksR0FBSixDQUNGO0lBQUEsR0FBQSxFQUFZLFNBQVo7SUFDQSxHQUFBLEVBQVksR0FEWjtJQUVBLFFBQUEsRUFBWSxjQUZaO0lBR0EsS0FBQSxFQUFZLFlBSFo7SUFJQSxJQUFBLEVBQVksZ0JBSlo7SUFLQSxJQUFBLEVBQVksb0JBTFo7SUFNQSxLQUFBLEVBQVksa0JBTlo7SUFPQSxNQUFBLEVBQVksU0FBQTtlQUFHLElBQUEsQ0FBQTtJQUFILENBUFo7SUFRQSxLQUFBLEVBQVksR0FSWjtJQVNBLE1BQUEsRUFBWSxHQVRaO0lBVUEsUUFBQSxFQUFZLEdBVlo7SUFXQSxTQUFBLEVBQVksR0FYWjtJQVlBLElBQUEsRUFBTSxpRkFaTjtDQURFOztBQWtCTixNQUFBLEdBQWlCOztBQUNqQixhQUFBLEdBQWlCOztBQUVqQixTQUFBLEdBQVksSUFBSSxHQUFKLENBQVE7SUFBQSxJQUFBLEVBQUssSUFBTDtDQUFSOztBQUNaLFVBQUEsR0FBYSxTQUFBO0FBQ1QsUUFBQTtJQURVLG9CQUFLO0lBQ2YsQ0FBQSxHQUFJLENBQUMsR0FBQSxHQUFJLEdBQUwsQ0FBUyxDQUFDLE1BQVYsQ0FBaUIsSUFBakIsQ0FBc0Is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QUFLLENBQUMsSUFBTixDQUFXLFNBQVgsRUFBc0IsaUJBQXRCLENBQWQsQ0FBbEI7UUFDQSxXQUFBLEdBQWMsU0FBQTttQkFBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVQsQ0FBa0IsS0FBSyxDQUFDLE9BQU4sQ0FBYyxLQUFLLENBQUMsSUFBTixDQUFXLFNBQVgsRUFBc0Isb0JBQXRCLENBQWQsQ0FBbEI7UUFBSDtlQUNkLFVBQUEsQ0FBVyxXQUFYLEVBQXdCLElBQXhCLEVBSEo7S0FBQSxNQUFBOztnQkFNWSxDQUFDLGlCQUFrQjs7UUFDM0IsV0FBQSxHQUFjLFNBQUE7QUFBRyxnQkFBQTtvRkFBUSxDQUFDLGlCQUFrQjtRQUE5QjtlQUNkLFVBQUEsQ0FBVyxXQUFYLEVBQXdCLElBQXhCLEVBUko7O0FBSlE7O0FBY1osSUFBSSxDQUFDLEVBQUwsQ0FBUSxXQUFSLEVBQW9CLFNBQXBCIiwic291cmNlc0NvbnRlbnQiOlsiIyMjXG4wMCAgICAgMDAgICAwMDAwMDAwICAgMDAwICAwMDAgICAwMDBcbjAwMCAgIDAwMCAgMDAwICAgMDAwICAwMDAgIDAwMDAgIDAwMFxuMDAwMDAwMDAwICAwMDAwMDAwMDAgIDAwMCAgMDAwIDAgMDAwXG4wMDAgMCAwMDAgIDAwMCAgIDAwMCAgMDAwICAwMDAgIDAwMDBcbjAwMCAgIDAwMCAgMDAwICAgMDAwICAwMDAgIDAwMCAgIDAwMFxuIyMjXG5cbnsgYXBwLCBhcmdzLCBjaGlsZHAsIGtsb2csIGtvbG9yLCBrc3RyLCBub29uLCBwb3N0LCBwcmVmcywgc2xhc2gsIHVkcCwgdmFsaWQgfSA9IHJlcXVpcmUgJ2t4aydcblxucGtnICAgICAgPSByZXF1aXJlICcuLi9wYWNrYWdlLmpzb24nXG5lbGVjdHJvbiA9IHJlcXVpcmUgJ2VsZWN0cm9uJ1xuXG5hcHAgPSBuZXcgYXBwXG4gICAgZGlyOiAgICAgICAgX19kaXJuYW1lXG4gICAgcGtnOiAgICAgICAgcGtnXG4gICAgc2hvcnRjdXQ6ICAgJ0NtZE9yQ3RybCtGMidcbiAgICBpbmRleDogICAgICAnaW5kZXguaHRtbCdcbiAgICBpY29uOiAgICAgICAnLi4vaW1nL2FwcC5pY28nXG4gICAgdHJheTogICAgICAgJy4uL2ltZy9tZW51QDJ4LnBuZydcbiAgICBhYm91dDogICAgICAnLi4vaW1nL2Fib3V0LnBuZydcbiAgICBvblF1aXQ6ICAgICAtPiBxdWl0KClcbiAgICB3aWR0aDogICAgICA0MDBcbiAgICBoZWlnaHQ6ICAgICA0MDBcbiAgICBtaW5XaWR0aDogICAzMDBcbiAgICBtaW5IZWlnaHQ6ICAyMDBcbiAgICBhcmdzOiBcIlwiXCJcbiAgICAgICAgc2hvdyAgICAgIG9wZW4gd2luZG93IG9uIHN0YXJ0dXAgIHRydWVcbiAgICAgICAgcHJlZnMgICAgIHNob3cgcHJlZmVyZW5jZXMgICAgICAgIGZhbHNlXG4gICAgICAgIFwiXCJcIlxuXG5rb25yYWQgICAgICAgICA9IG51bGxcbmtvbnJhZFZlcnNpb24gID0gbnVsbFxuXG5rb25yYWRVZHAgPSBuZXcgdWRwIHBvcnQ6OTU1OVxua29ucmFkU2VuZCA9IChtc2csIGFyZ3MuLi4pIC0+IFxuICAgIHMgPSBbbXNnKyc6J10uY29uY2F0KGFyZ3MpLmpvaW4gJyAnXG4gICAgIyBrbG9nICdrb25yYWRTZW5kJyBzXG4gICAga29ucmFkVWRwLnNlbmQgc1xuXG5pZiBhcmdzLnZlcmJvc2VcbiAgICBcbiAgICBrbG9nIGtvbG9yLndoaXRlIGtvbG9yLmJvbGQgXCJcXG4je3BrZy5uYW1lfVwiLCBrb2xvci5ncmF5IFwidiN7cGtnLnZlcnNpb259XFxuXCJcbiAgICBrbG9nIGtvbG9yLnllbGxvdyBrb2xvci5ib2xkICdwcm9jZXNzJ1xuICAgIHAgPSBjd2Q6IHByb2Nlc3MuY3dkKClcbiAgICBrbG9nIG5vb24uc3RyaW5naWZ5IHAsIGNvbG9yczp0cnVlXG4gICAga2xvZyBrb2xvci55ZWxsb3cuYm9sZCAnYXJncydcbiAgICBrbG9nIG5vb24uc3RyaW5naWZ5IGFyZ3MsIGNvbG9yczp0cnVlXG4gICAga2xvZyAnJ1xuXG5pZiBhcmdzLnByZWZzXG4gICAgXG4gICAga2xvZyBrb2xvci55ZWxsb3cga29sb3IuYm9sZCAncHJlZnMnXG4gICAga2xvZyBrb2xvci5ncmVlbiBrb2xvci5ib2xkIHByZWZzLnN0b3JlLmZpbGVcbiAgICBpZiBzbGFzaC5maWxlRXhpc3RzIHByZWZzLnN0b3JlLmZpbGVcbiAgICAgICAga2xvZyBub29uLnN0cmluZ2lmeSBub29uLmxvYWQocHJlZnMuc3RvcmUuZmlsZSksIGNvbG9yczp0cnVlXG5cbiMgMDAwICAgMDAwICAgMDAwMDAwMCAgIDAwMCAgIDAwMCAgMDAwMDAwMDAgICAgMDAwMDAwMCAgIDAwMDAwMDBcbiMgMDAwICAwMDAgICAwMDAgICAwMDAgIDAwMDAgIDAwMCAgMDAwICAgMDAwICAwMDAgICAwMDAgIDAwMCAgIDAwMFxuIyAwMDAwMDAwICAgIDAwMCAgIDAwMCAgMDAwIDAgMDAwICAwMDAwMDAwICAgIDAwMDAwMDAwMCAgMDAwICAgMDAwXG4jIDAwMCAgMDAwICAgMDAwICAgMDAwICAwMDAgIDAwMDAgIDAwMCAgIDAwMCAgMDAwICAgMDAwICAwMDAgICAwMDBcbiMgMDAwICAgMDAwICAgMDAwMDAwMCAgIDAwMCAgIDAwMCAgMDAwICAgMDAwICAwMDAgICAwMDAgIDAwMDAwMDBcblxucG9zdC5vbiAnUmVzdGFydCBrb25yYWQnIC0+IHN0YXJ0S29ucmFkIHByZWZzLmdldCAncm9vdERpcidcblxuc3RhcnRLb25yYWQgPSAocm9vdERpcikgLT5cbiAgICBcbiAgICBwcmVmcy5zZXQgJ3Jvb3REaXInIHJvb3REaXJcblxuICAgIGlmIGtvbnJhZD9cbiAgICAgICAgbG9nICdraWxsaW5nIGtvbnJhZCcga29ucmFkLnBpZFxuICAgICAgICB0cmVla2lsbCA9IHJlcXVpcmUgJ3RyZWUta2lsbCdcbiAgICAgICAgdHJlZWtpbGwga29ucmFkLnBpZFxuXG4gICAgcGF0aCA9IHNsYXNoLnJlc29sdmUgXCIje19fZGlybmFtZX0vLi4vanMva29ucmFkLmpzXCJcbiAgICBcbiAgICBpZiAnL3Vzci9sb2NhbC9iaW4nIG5vdCBpbiBwcm9jZXNzLmVudi5QQVRILnNwbGl0ICc6J1xuICAgICAgICBwcm9jZXNzLmVudi5QQVRIID0gcHJvY2Vzcy5lbnYuUEFUSCArICc6L3Vzci9sb2NhbC9iaW4nXG4gICAgICAgIFxuICAgIGlmICcvb3B0L2hvbWVicmV3L2Jpbicgbm90IGluIHByb2Nlc3MuZW52LlBBVEguc3BsaXQgJzonXG4gICAgICAgIHByb2Nlc3MuZW52LlBBVEggPSBwcm9jZXNzLmVudi5QQVRIICsgJzovb3B0L2hvbWVicmV3L2JpbidcblxuICAgIGtvbnJhZCA9IGNoaWxkcC5zcGF3biAnbm9kZScgWyctLXRyYWNlLXdhcm5pbmdzJyBwYXRoLCAnLXcnICctdiddLFxuICAgICAgICBjd2Q6ICAgICAgcm9vdERpclxuICAgICAgICBzaGVsbDogICAgdHJ1ZVxuICAgICAgICBlbnY6ICAgICAgcHJvY2Vzcy5lbnZcbiAgICAgICAgZGV0YWNoZWQ6IGZhbHNlXG4gICAgICAgIFxuICAgIGtvbnJhZC5vbiAnZXhpdCcgKGNvZGUsIHNpZ25hbCkgLT4gXG4gICAgICAgIFxuICAgICAgICBsb2cgJ2tvbnJhZC5vbiBleGl0JyBjb2RlLCBzaWduYWxcbiAgICAgICAga29ucmFkU2VuZCAnZXhpdCdcblxuICAgIGtvbnJhZC5vbiAnY2xvc2UnIChjb2RlLCBzaWduYWwpIC0+XG4gICAgICAgIFxuICAgICAgICBwb3N0LnRvV2lucyAna29ucmFkRXhpdCcgXCJrb25yYWQgZXhpdCBjb2RlOiAje2NvZGV9XCJcbiAgICAgICAga29ucmFkU2VuZCAnZXhpdCdcblxuICAgIGtvbnJhZC5zdGRlcnIub24gJ2RhdGEnIChkYXRhKSAtPlxuICAgICAgICBcbiAgICAgICAgcyA9IGtzdHIuc3RyaXBBbnNpIGRhdGEudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgIFxuICAgICAgICBrb25yYWRTZW5kICdlcnJvcicgc1xuICAgICAgICBpZiBhcHA/Lndpbj9cbiAgICAgICAgICAgIHBvc3QudG9XaW5zICdrb25yYWRFcnJvcicgXCJrb25yYWQgZXJyb3I6ICN7c31cIiBrc3RyLmFuc2kyaHRtbCBkYXRhLnRvU3RyaW5nKClcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgY3JlYXRlV2luZG93ICdrb25yYWRFcnJvcicgXCJrb25yYWQgZXJyb3I6ICN7c31cIiBrc3RyLmFuc2kyaHRtbCBkYXRhLnRvU3RyaW5nKClcblxuICAgIGtvbnJhZC5zdGRvdXQub24gJ2RhdGEnIChkYXRhKSAtPlxuICAgICAgICBcbiAgICAgICAgcyA9IGtzdHIuc3RyaXBBbnNpIGRhdGEudG9TdHJpbmcoKVxuICAgICAgICBcbiAgICAgICAgaWYgL1xcIPCfkYFcXCBcXCAvLnRlc3Qgc1xuICAgICAgICAgICAga29ucmFkVmVyc2lvbiA9IHMuc3BsaXQoJ/CfkYEgICcpWzFdXG4gICAgICAgICAgICBwb3N0LnRvV2lucyAna29ucmFkVmVyc2lvbicga29ucmFkVmVyc2lvblxuICAgICAgICAgICAga29ucmFkU2VuZCAndmVyc2lvbicga29ucmFkVmVyc2lvblxuICAgICAgICBlbHNlIGlmIGFwcC53aW4/XG4gICAgICAgICAgICBpZiAvIPCfmKEgLy50ZXN0IHNcbiAgICAgICAgICAgICAgICBwb3N0LnRvV2lucyAna29ucmFkRXJyb3InIHMsIGtzdHIuYW5zaTJodG1sIGRhdGEudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgIGtvbnJhZFNlbmQgJ2Vycm9yJyBzXG4gICAgICAgICAgICAgICAgYXBwLndpbi5zaG93KClcbiAgICAgICAgICAgICAgICBhcHAud2luLmZvY3VzKClcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBwb3N0LnRvV2lucyAna29ucmFkT3V0cHV0JyBzLCBrc3RyLmFuc2kyaHRtbCBkYXRhLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICBrb25yYWRTZW5kICdvdXRwdXQnIHNcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgaWYgLyDwn5ihIC8udGVzdCBzXG4gICAgICAgICAgICAgICAga29ucmFkU2VuZCAnZXJyb3InIHNcbiAgICAgICAgICAgICAgICBjcmVhdGVXaW5kb3cgJ2tvbnJhZEVycm9yJyBzLCBrc3RyLmFuc2kyaHRtbCBkYXRhLnRvU3RyaW5nKClcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBrb25yYWRTZW5kICdvdXRwdXQnIHNcbiAgICAgICAgICAgICAgICBoaWdobGlnaHQoKVxuXG5jcmVhdGVXaW5kb3cgPSAobXNnLCBzLCBoKSAtPlxuICAgIFxuICAgIGFwcC5jcmVhdGVXaW5kb3cgKHcpIC0+XG4gICAgICAgIHBvc3QudG9XaW4gdy5pZCwgbXNnLCBzLCBoXG4gICAgICAgICAgICAgICAgXG4jICAwMDAwMDAwICAgMDAwICAgMDAwICAwMDAgIDAwMDAwMDAwMCAgXG4jIDAwMCAgIDAwMCAgMDAwICAgMDAwICAwMDAgICAgIDAwMCAgICAgXG4jIDAwMCAwMCAwMCAgMDAwICAgMDAwICAwMDAgICAgIDAwMCAgICAgXG4jIDAwMCAwMDAwICAgMDAwICAgMDAwICAwMDAgICAgIDAwMCAgICAgXG4jICAwMDAwMCAwMCAgIDAwMDAwMDAgICAwMDAgICAgIDAwMCAgICAgXG5cbnF1aXQgPSAtPlxuXG4gICAgaWYga29ucmFkP1xuICAgICAgICBrbG9nICdraWxsaW5nIGtvbnJhZCcga29ucmFkPy5waWRcbiAgICAgICAgdHJlZWtpbGwgPSByZXF1aXJlICd0cmVlLWtpbGwnXG4gICAgICAgIHRyZWVraWxsIGtvbnJhZC5waWQsIC0+IGFwcC5leGl0QXBwKClcbiAgICAgICAga29ucmFkID0gbnVsbFxuICAgICAgICAnZGVsYXknXG4gICAgICAgIFxucG9zdC5vbiAnUmVzdGFydCcgLT5cbiAgICBcbiAgICBrbG9nICdvbiBSZXN0YXJ0JyBrb25yYWQucGlkXG5cbiAgICB0cmVla2lsbCA9IHJlcXVpcmUgJ3RyZWUta2lsbCdcbiAgICB0cmVla2lsbCBrb25yYWQucGlkLCAtPiBcbiAgICBcbiAgICAgICAga2xvZyAnc3Bhd24nIHByb2Nlc3MuYXJndlswXSwgcHJvY2Vzcy5hcmd2LnNsaWNlKDEpXG4gICAgICAgIGNoaWxkcC5zcGF3biBwcm9jZXNzLmFyZ3ZbMF0sIHByb2Nlc3MuYXJndi5zbGljZSgxKSxcbiAgICAgICAgICAgIGN3ZDogICAgICAgICBwcm9jZXNzLmN3ZCgpXG4gICAgICAgICAgICBlbmNvZGluZzogICAgJ3V0ZjgnXG4gICAgICAgICAgICBkZXRhY2hlZDogICAgdHJ1ZVxuICAgICAgICAgICAgc2hlbGw6ICAgICAgIHRydWVcbiAgICAgICAgICAgIHdpbmRvd3NIaWRlOiB0cnVlXG4gICAgICAgIHByb2Nlc3MuZXhpdCAwXG4gICAgICAgIFxuIyAgMDAwMDAwMCAgMDAwMDAwMDAgIDAwMDAwMDAwMCAgICAgICAgMDAwMDAwMDAgICAgMDAwMDAwMCAgICAwMDAwMDAwICAgMDAwMDAwMDAwICBcbiMgMDAwICAgICAgIDAwMCAgICAgICAgICAwMDAgICAgICAgICAgIDAwMCAgIDAwMCAgMDAwICAgMDAwICAwMDAgICAwMDAgICAgIDAwMCAgICAgXG4jIDAwMDAwMDAgICAwMDAwMDAwICAgICAgMDAwICAgICAgICAgICAwMDAwMDAwICAgIDAwMCAgIDAwMCAgMDAwICAgMDAwICAgICAwMDAgICAgIFxuIyAgICAgIDAwMCAgMDAwICAgICAgICAgIDAwMCAgICAgICAgICAgMDAwICAgMDAwICAwMDAgICAwMDAgIDAwMCAgIDAwMCAgICAgMDAwICAgICBcbiMgMDAwMDAwMCAgIDAwMDAwMDAwICAgICAwMDAgICAgICAgICAgIDAwMCAgIDAwMCAgIDAwMDAwMDAgICAgMDAwMDAwMCAgICAgIDAwMCAgICAgXG5cbnNldFJvb3REaXIgPSAtPlxuXG4gICAgb3B0cyA9XG4gICAgICAgIHRpdGxlOiAgICAgICdPcGVuJ1xuICAgICAgICBwcm9wZXJ0aWVzOiBbJ29wZW5EaXJlY3RvcnknXVxuXG4gICAgZWxlY3Ryb24uZGlhbG9nLnNob3dPcGVuRGlhbG9nKG9wdHMpLnRoZW4gKHJlc3VsdCkgPT5cbiAgICAgICAgaWYgbm90IHJlc3VsdC5jYW5jZWxlZCBhbmQgdmFsaWQgcmVzdWx0LmZpbGVQYXRoc1xuICAgICAgICAgICAgc3RhcnRLb25yYWQgcmVzdWx0LmZpbGVQYXRoc1swXVxuXG5wb3N0Lm9uICdzZXRSb290RGlyJyBzZXRSb290RGlyXG5cbiMgIDAwMDAwMDAgICAwMDAwMDAwMCAgIDAwMDAwMDAwICAgICAgICAgMDAwMDAwMDAgICAwMDAwMDAwMCAgIDAwMDAwMDAgICAwMDAwMDAwICAgIDAwMCAgIDAwMCAgXG4jIDAwMCAgIDAwMCAgMDAwICAgMDAwICAwMDAgICAwMDAgICAgICAgIDAwMCAgIDAwMCAgMDAwICAgICAgIDAwMCAgIDAwMCAgMDAwICAgMDAwICAgMDAwIDAwMCAgIFxuIyAwMDAwMDAwMDAgIDAwMDAwMDAwICAgMDAwMDAwMDAgICAgICAgICAwMDAwMDAwICAgIDAwMDAwMDAgICAwMDAwMDAwMDAgIDAwMCAgIDAwMCAgICAwMDAwMCAgICBcbiMgMDAwICAgMDAwICAwMDAgICAgICAgIDAwMCAgICAgICAgICAgICAgMDAwICAgMDAwICAwMDAgICAgICAgMDAwICAgMDAwICAwMDAgICAwMDAgICAgIDAwMCAgICAgXG4jIDAwMCAgIDAwMCAgMDAwICAgICAgICAwMDAgICAgICAgICAgICAgIDAwMCAgIDAwMCAgMDAwMDAwMDAgIDAwMCAgIDAwMCAgMDAwMDAwMCAgICAgICAwMDAgICAgIFxuXG5wb3N0Lm9uICdhcHBSZWFkeScgLT5cblxuICAgIGlmIHJvb3REaXIgPSBwcmVmcy5nZXQgJ3Jvb3REaXInXG4gICAgICAgIHN0YXJ0S29ucmFkIHJvb3REaXJcbiAgICBlbHNlXG4gICAgICAgIHNldFJvb3REaXIoKVxuXG4jMDAwICAgMDAwICAwMDAgIDAwMCAgIDAwMCAgICAgICAgMDAwMDAwMDAgICAwMDAwMDAwMCAgIDAwMDAwMDAgICAwMDAwMDAwICAgIDAwMCAgIDAwMCAgXG4jMDAwIDAgMDAwICAwMDAgIDAwMDAgIDAwMCAgICAgICAgMDAwICAgMDAwICAwMDAgICAgICAgMDAwICAgMDAwICAwMDAgICAwMDAgICAwMDAgMDAwICAgXG4jMDAwMDAwMDAwICAwMDAgIDAwMCAwIDAwMCAgICAgICAgMDAwMDAwMCAgICAwMDAwMDAwICAgMDAwMDAwMDAwICAwMDAgICAwMDAgICAgMDAwMDAgICAgXG4jMDAwICAgMDAwICAwMDAgIDAwMCAgMDAwMCAgICAgICAgMDAwICAgMDAwICAwMDAgICAgICAgMDAwICAgMDAwICAwMDAgICAwMDAgICAgIDAwMCAgICAgXG4jMDAgICAgIDAwICAwMDAgIDAwMCAgIDAwMCAgICAgICAgMDAwICAgMDAwICAwMDAwMDAwMCAgMDAwICAgMDAwICAwMDAwMDAwICAgICAgIDAwMCAgICAgXG5cbnBvc3Qub24gJ3dpblJlYWR5JyAod0lEKSAtPlxuICAgIFxuICAgIHBvc3QudG9XaW4gd0lELCAna29ucmFkVmVyc2lvbicga29ucmFkVmVyc2lvbiBpZiBrb25yYWRWZXJzaW9uXG5cbiMgMDAwICAgMDAwICAwMDAgICAwMDAwMDAwICAgMDAwICAgMDAwICAwMDAgICAgICAwMDAgICAwMDAwMDAwICAgMDAwICAgMDAwICAwMDAwMDAwMDAgIFxuIyAwMDAgICAwMDAgIDAwMCAgMDAwICAgICAgICAwMDAgICAwMDAgIDAwMCAgICAgIDAwMCAgMDAwICAgICAgICAwMDAgICAwMDAgICAgIDAwMCAgICAgXG4jIDAwMDAwMDAwMCAgMDAwICAwMDAgIDAwMDAgIDAwMDAwMDAwMCAgMDAwICAgICAgMDAwICAwMDAgIDAwMDAgIDAwMDAwMDAwMCAgICAgMDAwICAgICBcbiMgMDAwICAgMDAwICAwMDAgIDAwMCAgIDAwMCAgMDAwICAgMDAwICAwMDAgICAgICAwMDAgIDAwMCAgIDAwMCAgMDAwICAgMDAwICAgICAwMDAgICAgIFxuIyAwMDAgICAwMDAgIDAwMCAgIDAwMDAwMDAgICAwMDAgICAwMDAgIDAwMDAwMDAgIDAwMCAgIDAwMDAwMDAgICAwMDAgICAwMDAgICAgIDAwMCAgICAgXG5cbmhpZ2hsaWdodCA9IC0+XG5cbiAgICByZXR1cm4gaWYgbm90IGFwcC50cmF5PyBcbiAgICBcbiAgICBpZiBzbGFzaC53aW4oKVxuICAgICAgICBhcHAudHJheS5zZXRJbWFnZSBzbGFzaC5yZXNvbHZlIHNsYXNoLmpvaW4gX19kaXJuYW1lLCAnLi4vaW1nL21lbnUucG5nJ1xuICAgICAgICB1bmhpZ2hsaWdodCA9IC0+IGFwcC50cmF5LnNldEltYWdlIHNsYXNoLnJlc29sdmUgc2xhc2guam9pbiBfX2Rpcm5hbWUsICcuLi9pbWcvbWVudUAyeC5wbmcnXG4gICAgICAgIHNldFRpbWVvdXQgdW5oaWdobGlnaHQsIDEwMDBcbiAgICBlbHNlXG4gICAgICAgIFxuICAgICAgICBhcHAudHJheS5zZXRIaWdobGlnaHRNb2RlPyAnYWx3YXlzJ1xuICAgICAgICB1bmhpZ2hsaWdodCA9IC0+IGFwcC50cmF5LnNldEhpZ2hsaWdodE1vZGU/ICduZXZlcidcbiAgICAgICAgc2V0VGltZW91dCB1bmhpZ2hsaWdodCwgMTAwMFxuXG5wb3N0Lm9uICdoaWdobGlnaHQnIGhpZ2hsaWdodFxuXG4iXX0=
245//# sourceURL=../coffee/main.coffee
\No newline at end of file