@xwiki/cristal-electron-main 0.8.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/dist/index.cjs +2 -117
- package/package.json +8 -11
- package/src/index.ts +4 -9
- package/src/mainWindow.ts +4 -9
- package/src/security-restrictions.ts +4 -9
- package/tsconfig.json +1 -0
- package/vite.config.js +4 -9
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @xwiki/cristal-electron-main
|
|
2
2
|
|
|
3
|
+
## 0.9.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- efbd020: Cristal 0.9 Release
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Updated dependencies [efbd020]
|
|
12
|
+
- @xwiki/cristal-browser-electron@0.9.0
|
|
13
|
+
- @xwiki/cristal-electron-storage@0.9.0
|
|
14
|
+
|
|
3
15
|
## 0.8.0
|
|
4
16
|
|
|
5
17
|
### Minor Changes
|
package/dist/index.cjs
CHANGED
|
@@ -1,117 +1,2 @@
|
|
|
1
|
-
"use strict";const
|
|
2
|
-
* See the LICENSE file distributed with this work for additional
|
|
3
|
-
* information regarding copyright ownership.
|
|
4
|
-
*
|
|
5
|
-
* This is free software; you can redistribute it and/or modify it
|
|
6
|
-
* under the terms of the GNU Affero General Public License as
|
|
7
|
-
* published by the Free Software Foundation; either version 2.1 of
|
|
8
|
-
* the License, or (at your option) any later version.
|
|
9
|
-
*
|
|
10
|
-
* This software is distributed in the hope that it will be useful,
|
|
11
|
-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
13
|
-
* Lesser General Public License for more details.
|
|
14
|
-
*
|
|
15
|
-
* You should have received a copy of the GNU Affero General Public
|
|
16
|
-
* License along with this software; if not, write to the Free
|
|
17
|
-
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
|
18
|
-
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
|
|
19
|
-
*
|
|
20
|
-
* This file is part of the Cristal Wiki software prototype
|
|
21
|
-
* @copyright Copyright (c) 2023 XWiki SAS
|
|
22
|
-
* @license http://opensource.org/licenses/AGPL-3.0 AGPL-3.0
|
|
23
|
-
*
|
|
24
|
-
**/const p=new Map([]),x=new Set(["https://github.com"]);t.app.on("web-contents-created",(e,n)=>{n.on("will-navigate",(r,o)=>{const{origin:i}=new d.URL(o);p.has(i)||r.preventDefault()}),n.session.setPermissionRequestHandler((r,o,i)=>{const{origin:c}=new d.URL(r.getURL()),l=!!p.get(c)?.has(o);i(l)}),n.setWindowOpenHandler(({url:r})=>{const{origin:o}=new d.URL(r);return x.has(o)&&t.shell.openExternal(r).catch(console.error),{action:"deny"}}),n.on("will-attach-webview",(r,o,i)=>{const{origin:c}=new d.URL(i.src);if(!p.has(c)){r.preventDefault();return}delete o.preload,delete o.preloadURL,o.nodeIntegration=!1,o.contextIsolation=!0})});/**
|
|
25
|
-
* See the LICENSE file distributed with this work for additional
|
|
26
|
-
* information regarding copyright ownership.
|
|
27
|
-
*
|
|
28
|
-
* This is free software; you can redistribute it and/or modify it
|
|
29
|
-
* under the terms of the GNU Affero General Public License as
|
|
30
|
-
* published by the Free Software Foundation; either version 2.1 of
|
|
31
|
-
* the License, or (at your option) any later version.
|
|
32
|
-
*
|
|
33
|
-
* This software is distributed in the hope that it will be useful,
|
|
34
|
-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
35
|
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
36
|
-
* Lesser General Public License for more details.
|
|
37
|
-
*
|
|
38
|
-
* You should have received a copy of the GNU Affero General Public
|
|
39
|
-
* License along with this software; if not, write to the Free
|
|
40
|
-
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
|
41
|
-
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
|
|
42
|
-
*
|
|
43
|
-
* This file is part of the Cristal Wiki software prototype
|
|
44
|
-
* @copyright Copyright (c) 2023 XWiki SAS
|
|
45
|
-
* @license http://opensource.org/licenses/AGPL-3.0 AGPL-3.0
|
|
46
|
-
*
|
|
47
|
-
**/async function L(){const e=new t.BrowserWindow({show:!1,webPreferences:{nodeIntegration:!1,contextIsolation:!0,sandbox:!1,webviewTag:!1,preload:a.join(t.app.getAppPath(),"./preload/dist/index.cjs")}});return e.webContents.setWindowOpenHandler(({url:n})=>(t.shell.openExternal(n),{action:"deny"})),e.on("ready-to-show",()=>{e?.show()}),await e.loadFile(a.resolve(t.app.getAppPath(),"./renderer/dist/index.html")),e}async function u(){let e=t.BrowserWindow.getAllWindows().find(n=>!n.isDestroyed());return e===void 0&&(e=await L()),e.isMinimized()&&e.restore(),e.focus(),e}/**
|
|
48
|
-
* See the LICENSE file distributed with this work for additional
|
|
49
|
-
* information regarding copyright ownership.
|
|
50
|
-
*
|
|
51
|
-
* This is free software; you can redistribute it and/or modify it
|
|
52
|
-
* under the terms of the GNU Affero General Public License as
|
|
53
|
-
* published by the Free Software Foundation; either version 2.1 of
|
|
54
|
-
* the License, or (at your option) any later version.
|
|
55
|
-
*
|
|
56
|
-
* This software is distributed in the hope that it will be useful,
|
|
57
|
-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
58
|
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
59
|
-
* Lesser General Public License for more details.
|
|
60
|
-
*
|
|
61
|
-
* You should have received a copy of the GNU Affero General Public
|
|
62
|
-
* License along with this software; if not, write to the Free
|
|
63
|
-
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
|
64
|
-
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
|
|
65
|
-
*
|
|
66
|
-
* This file is part of the Cristal Wiki software prototype
|
|
67
|
-
* @copyright Copyright (c) 2023 XWiki SAS
|
|
68
|
-
* @license http://opensource.org/licenses/AGPL-3.0 AGPL-3.0
|
|
69
|
-
*
|
|
70
|
-
**/const f=".cristal",w=a.join(t.app.getPath("home"),f);function O(e,n){const r=t.app.getPath("home");let o=e;return e==="index"&&(o=""),a.join(r,f,o,n+".json")}async function h(e){let n;try{n=await s.promises.lstat(e)}catch(r){console.debug(r)}return n?.isFile()}async function W(e){try{await s.promises.lstat(e)}catch{return!1}return!0}async function g(e){if(!await m(w,e))throw new Error(`[${e}] is not in in [${w}]`);if(await h(e)){const n=await s.promises.readFile(e);return JSON.parse(n.toString("utf8"))}else return}async function m(e,n){const r=a.relative(e,n);return!r.startsWith("../")&&r!==".."}async function A(e,n,r){if(!await m(w,e))throw new Error(`[${e}] is not in in [${w}]`);let o;if(await W(e)&&await h(e)){const l=await s.promises.readFile(e),v=new TextDecoder("utf-8");o=JSON.parse(v.decode(l)),o.source=n,o.name=r}else o={name:r,source:n,syntax:"markdown/1.2"};const i=JSON.stringify(o,null,2),c=a.dirname(e);return await s.promises.mkdir(c,{recursive:!0}),await s.promises.writeFile(e,i,{flag:"w+"}),g(e)}function P(){t.ipcMain.handle("resolvePath",(e,{page:n,syntax:r})=>O(n,r)),t.ipcMain.handle("readPage",(e,{path:n})=>g(n)),t.ipcMain.handle("savePage",(e,{path:n,content:r,title:o})=>A(n,r,o))}/**
|
|
71
|
-
* See the LICENSE file distributed with this work for additional
|
|
72
|
-
* information regarding copyright ownership.
|
|
73
|
-
*
|
|
74
|
-
* This is free software; you can redistribute it and/or modify it
|
|
75
|
-
* under the terms of the GNU Affero General Public License as
|
|
76
|
-
* published by the Free Software Foundation; either version 2.1 of
|
|
77
|
-
* the License, or (at your option) any later version.
|
|
78
|
-
*
|
|
79
|
-
* This software is distributed in the hope that it will be useful,
|
|
80
|
-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
81
|
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
82
|
-
* Lesser General Public License for more details.
|
|
83
|
-
*
|
|
84
|
-
* You should have received a copy of the GNU Affero General Public
|
|
85
|
-
* License along with this software; if not, write to the Free
|
|
86
|
-
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
|
87
|
-
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
|
|
88
|
-
*
|
|
89
|
-
* This file is part of the Cristal Wiki software prototype
|
|
90
|
-
* @copyright Copyright (c) 2023 XWiki SAS
|
|
91
|
-
* @license http://opensource.org/licenses/AGPL-3.0 AGPL-3.0
|
|
92
|
-
*
|
|
93
|
-
**/function R(e){e.loadFile(a.resolve(t.app.getAppPath(),"./renderer/dist/index.html"))}function S(e){t.ipcMain.handle("reloadBrowser",()=>R(e))}/**
|
|
94
|
-
* See the LICENSE file distributed with this work for additional
|
|
95
|
-
* information regarding copyright ownership.
|
|
96
|
-
*
|
|
97
|
-
* This is free software; you can redistribute it and/or modify it
|
|
98
|
-
* under the terms of the GNU Affero General Public License as
|
|
99
|
-
* published by the Free Software Foundation; either version 2.1 of
|
|
100
|
-
* the License, or (at your option) any later version.
|
|
101
|
-
*
|
|
102
|
-
* This software is distributed in the hope that it will be useful,
|
|
103
|
-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
104
|
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
105
|
-
* Lesser General Public License for more details.
|
|
106
|
-
*
|
|
107
|
-
* You should have received a copy of the GNU Affero General Public
|
|
108
|
-
* License along with this software; if not, write to the Free
|
|
109
|
-
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
|
110
|
-
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
|
|
111
|
-
*
|
|
112
|
-
* This file is part of the Cristal Wiki software prototype
|
|
113
|
-
* @copyright Copyright (c) 2023 XWiki SAS
|
|
114
|
-
* @license http://opensource.org/licenses/AGPL-3.0 AGPL-3.0
|
|
115
|
-
*
|
|
116
|
-
**/const E=t.app.requestSingleInstanceLock();E||(t.app.quit(),process.exit(0));t.app.on("second-instance",u);t.app.disableHardwareAcceleration();t.app.on("window-all-closed",()=>{y.platform!=="darwin"&&t.app.quit()});t.app.whenReady().then(()=>{P(),u().then(e=>S(e)),t.app.on("activate",()=>{t.BrowserWindow.getAllWindows().length===0&&u()})}).catch(e=>console.error("Failed create window:",e));t.app.whenReady().then(()=>require("electron-updater").autoUpdater.checkForUpdatesAndNotify()).catch(e=>console.error("Failed check and install updates:",e));
|
|
117
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY2pzIiwic291cmNlcyI6WyIuLi9zcmMvc2VjdXJpdHktcmVzdHJpY3Rpb25zLnRzIiwiLi4vc3JjL21haW5XaW5kb3cudHMiLCIuLi8uLi9zdG9yYWdlL3NyYy9lbGVjdHJvbi9tYWluL2luZGV4LnRzIiwiLi4vLi4vYnJvd3Nlci9zcmMvZWxlY3Ryb24vbWFpbi9pbmRleC50cyIsIi4uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNlZSB0aGUgTElDRU5TRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsXG4gKiBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC5cbiAqXG4gKiBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXRcbiAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzXG4gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mXG4gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVVxuICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljXG4gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb2Z0d2FyZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZVxuICogU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BXG4gKiAwMjExMC0xMzAxIFVTQSwgb3Igc2VlIHRoZSBGU0Ygc2l0ZTogaHR0cDovL3d3dy5mc2Yub3JnLlxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDcmlzdGFsIFdpa2kgc29mdHdhcmUgcHJvdG90eXBlXG4gKiBAY29weXJpZ2h0ICBDb3B5cmlnaHQgKGMpIDIwMjMgWFdpa2kgU0FTXG4gKiBAbGljZW5zZSAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUdQTC0zLjAgQUdQTC0zLjBcbiAqXG4gKiovXG5cbmltcG9ydCB0eXBlIHsgU2Vzc2lvbiB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgYXBwLCBzaGVsbCB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgVVJMIH0gZnJvbSBcIm5vZGU6dXJsXCI7XG5cbi8qKlxuICogVW5pb24gZm9yIGFsbCBleGlzdGluZyBwZXJtaXNzaW9ucyBpbiBlbGVjdHJvblxuICovXG50eXBlIFBlcm1pc3Npb24gPSBQYXJhbWV0ZXJzPFxuICBFeGNsdWRlPFBhcmFtZXRlcnM8U2Vzc2lvbltcInNldFBlcm1pc3Npb25SZXF1ZXN0SGFuZGxlclwiXT5bMF0sIG51bGw+XG4+WzFdO1xuXG4vKipcbiAqIEEgbGlzdCBvZiBvcmlnaW5zIHRoYXQgeW91IGFsbG93IG9wZW4gSU5TSURFIHRoZSBhcHBsaWNhdGlvbiBhbmQgcGVybWlzc2lvbnMgZm9yIHRoZW0uXG4gKlxuICogSW4gZGV2ZWxvcG1lbnQgbW9kZSB5b3UgbmVlZCBhbGxvdyBvcGVuIGBWSVRFX0RFVl9TRVJWRVJfVVJMYC5cbiAqL1xuY29uc3QgQUxMT1dFRF9PUklHSU5TX0FORF9QRVJNSVNTSU9OUyA9IG5ldyBNYXA8c3RyaW5nLCBTZXQ8UGVybWlzc2lvbj4+KFxuICBpbXBvcnQubWV0YS5lbnYuREVWICYmIGltcG9ydC5tZXRhLmVudi5WSVRFX0RFVl9TRVJWRVJfVVJMXG4gICAgPyBbW25ldyBVUkwoaW1wb3J0Lm1ldGEuZW52LlZJVEVfREVWX1NFUlZFUl9VUkwpLm9yaWdpbiwgbmV3IFNldCgpXV1cbiAgICA6IFtdLFxuKTtcblxuLyoqXG4gKiBBIGxpc3Qgb2Ygb3JpZ2lucyB0aGF0IHlvdSBhbGxvdyBvcGVuIElOIEJST1dTRVIuXG4gKiBOYXZpZ2F0aW9uIHRvIHRoZSBvcmlnaW5zIGJlbG93IGlzIG9ubHkgcG9zc2libGUgaWYgdGhlIGxpbmsgb3BlbnMgaW4gYSBuZXcgd2luZG93LlxuICpcbiAqIEBleGFtcGxlXG4gKiA8YVxuICogICB0YXJnZXQ9XCJfYmxhbmtcIlxuICogICBocmVmPVwiaHR0cHM6Ly9naXRodWIuY29tL1wiXG4gKiA+XG4gKi9cbmNvbnN0IEFMTE9XRURfRVhURVJOQUxfT1JJR0lOUyA9IG5ldyBTZXQ8YGh0dHBzOi8vJHtzdHJpbmd9YD4oW1xuICBcImh0dHBzOi8vZ2l0aHViLmNvbVwiLFxuXSk7XG5cbmFwcC5vbihcIndlYi1jb250ZW50cy1jcmVhdGVkXCIsIChfLCBjb250ZW50cykgPT4ge1xuICAvKipcbiAgICogQmxvY2sgbmF2aWdhdGlvbiB0byBvcmlnaW5zIG5vdCBvbiB0aGUgYWxsb3dsaXN0LlxuICAgKlxuICAgKiBOYXZpZ2F0aW9uIGV4cGxvaXRzIGFyZSBxdWl0ZSBjb21tb24uIElmIGFuIGF0dGFja2VyIGNhbiBjb252aW5jZSB0aGUgYXBwIHRvIG5hdmlnYXRlIGF3YXkgZnJvbSBpdHMgY3VycmVudCBwYWdlLFxuICAgKiB0aGV5IGNhbiBwb3NzaWJseSBmb3JjZSB0aGUgYXBwIHRvIG9wZW4gYXJiaXRyYXJ5IHdlYiByZXNvdXJjZXMvd2Vic2l0ZXMgb24gdGhlIHdlYi5cbiAgICpcbiAgICogQHNlZSBodHRwczovL3d3dy5lbGVjdHJvbmpzLm9yZy9kb2NzL2xhdGVzdC90dXRvcmlhbC9zZWN1cml0eSMxMy1kaXNhYmxlLW9yLWxpbWl0LW5hdmlnYXRpb25cbiAgICovXG4gIGNvbnRlbnRzLm9uKFwid2lsbC1uYXZpZ2F0ZVwiLCAoZXZlbnQsIHVybCkgPT4ge1xuICAgIGNvbnN0IHsgb3JpZ2luIH0gPSBuZXcgVVJMKHVybCk7XG4gICAgaWYgKEFMTE9XRURfT1JJR0lOU19BTkRfUEVSTUlTU0lPTlMuaGFzKG9yaWdpbikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBQcmV2ZW50IG5hdmlnYXRpb25cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgaWYgKGltcG9ydC5tZXRhLmVudi5ERVYpIHtcbiAgICAgIGNvbnNvbGUud2FybihgQmxvY2tlZCBuYXZpZ2F0aW5nIHRvIGRpc2FsbG93ZWQgb3JpZ2luOiAke29yaWdpbn1gKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBCbG9jayByZXF1ZXN0cyBmb3IgZGlzYWxsb3dlZCBwZXJtaXNzaW9ucy5cbiAgICogQnkgZGVmYXVsdCwgRWxlY3Ryb24gd2lsbCBhdXRvbWF0aWNhbGx5IGFwcHJvdmUgYWxsIHBlcm1pc3Npb24gcmVxdWVzdHMuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly93d3cuZWxlY3Ryb25qcy5vcmcvZG9jcy9sYXRlc3QvdHV0b3JpYWwvc2VjdXJpdHkjNS1oYW5kbGUtc2Vzc2lvbi1wZXJtaXNzaW9uLXJlcXVlc3RzLWZyb20tcmVtb3RlLWNvbnRlbnRcbiAgICovXG4gIGNvbnRlbnRzLnNlc3Npb24uc2V0UGVybWlzc2lvblJlcXVlc3RIYW5kbGVyKFxuICAgICh3ZWJDb250ZW50cywgcGVybWlzc2lvbiwgY2FsbGJhY2spID0+IHtcbiAgICAgIGNvbnN0IHsgb3JpZ2luIH0gPSBuZXcgVVJMKHdlYkNvbnRlbnRzLmdldFVSTCgpKTtcblxuICAgICAgY29uc3QgcGVybWlzc2lvbkdyYW50ZWQgPVxuICAgICAgICAhIUFMTE9XRURfT1JJR0lOU19BTkRfUEVSTUlTU0lPTlMuZ2V0KG9yaWdpbik/LmhhcyhwZXJtaXNzaW9uKTtcbiAgICAgIGNhbGxiYWNrKHBlcm1pc3Npb25HcmFudGVkKTtcblxuICAgICAgaWYgKCFwZXJtaXNzaW9uR3JhbnRlZCAmJiBpbXBvcnQubWV0YS5lbnYuREVWKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgJHtvcmlnaW59IHJlcXVlc3RlZCBwZXJtaXNzaW9uIGZvciAnJHtwZXJtaXNzaW9ufScsIGJ1dCB3YXMgcmVqZWN0ZWQuYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9LFxuICApO1xuXG4gIC8qKlxuICAgKiBIeXBlcmxpbmtzIGxlYWRpbmcgdG8gYWxsb3dlZCBzaXRlcyBhcmUgb3BlbmVkIGluIHRoZSBkZWZhdWx0IGJyb3dzZXIuXG4gICAqXG4gICAqIFRoZSBjcmVhdGlvbiBvZiBuZXcgYHdlYkNvbnRlbnRzYCBpcyBhIGNvbW1vbiBhdHRhY2sgdmVjdG9yLiBBdHRhY2tlcnMgYXR0ZW1wdCB0byBjb252aW5jZSB0aGUgYXBwIHRvIGNyZWF0ZSBuZXcgd2luZG93cyxcbiAgICogZnJhbWVzLCBvciBvdGhlciByZW5kZXJlciBwcm9jZXNzZXMgd2l0aCBtb3JlIHByaXZpbGVnZXMgdGhhbiB0aGV5IGhhZCBiZWZvcmU7IG9yIHdpdGggcGFnZXMgb3BlbmVkIHRoYXQgdGhleSBjb3VsZG4ndCBvcGVuIGJlZm9yZS5cbiAgICogWW91IHNob3VsZCBkZW55IGFueSB1bmV4cGVjdGVkIHdpbmRvdyBjcmVhdGlvbi5cbiAgICpcbiAgICogQHNlZSBodHRwczovL3d3dy5lbGVjdHJvbmpzLm9yZy9kb2NzL2xhdGVzdC90dXRvcmlhbC9zZWN1cml0eSMxNC1kaXNhYmxlLW9yLWxpbWl0LWNyZWF0aW9uLW9mLW5ldy13aW5kb3dzXG4gICAqIEBzZWUgaHR0cHM6Ly93d3cuZWxlY3Ryb25qcy5vcmcvZG9jcy9sYXRlc3QvdHV0b3JpYWwvc2VjdXJpdHkjMTUtZG8tbm90LXVzZS1vcGVuZXh0ZXJuYWwtd2l0aC11bnRydXN0ZWQtY29udGVudFxuICAgKi9cbiAgY29udGVudHMuc2V0V2luZG93T3BlbkhhbmRsZXIoKHsgdXJsIH0pID0+IHtcbiAgICBjb25zdCB7IG9yaWdpbiB9ID0gbmV3IFVSTCh1cmwpO1xuXG4gICAgaWYgKEFMTE9XRURfRVhURVJOQUxfT1JJR0lOUy5oYXMob3JpZ2luIGFzIGBodHRwczovLyR7c3RyaW5nfWApKSB7XG4gICAgICAvLyBPcGVuIHVybCBpbiBkZWZhdWx0IGJyb3dzZXIuXG4gICAgICBzaGVsbC5vcGVuRXh0ZXJuYWwodXJsKS5jYXRjaChjb25zb2xlLmVycm9yKTtcbiAgICB9IGVsc2UgaWYgKGltcG9ydC5tZXRhLmVudi5ERVYpIHtcbiAgICAgIGNvbnNvbGUud2FybihgQmxvY2tlZCB0aGUgb3BlbmluZyBvZiBhIGRpc2FsbG93ZWQgb3JpZ2luOiAke29yaWdpbn1gKTtcbiAgICB9XG5cbiAgICAvLyBQcmV2ZW50IGNyZWF0aW5nIGEgbmV3IHdpbmRvdy5cbiAgICByZXR1cm4geyBhY3Rpb246IFwiZGVueVwiIH07XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBWZXJpZnkgd2VidmlldyBvcHRpb25zIGJlZm9yZSBjcmVhdGlvbi5cbiAgICpcbiAgICogU3RyaXAgYXdheSBwcmVsb2FkIHNjcmlwdHMsIGRpc2FibGUgTm9kZS5qcyBpbnRlZ3JhdGlvbiwgYW5kIGVuc3VyZSBvcmlnaW5zIGFyZSBvbiB0aGUgYWxsb3dsaXN0LlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vd3d3LmVsZWN0cm9uanMub3JnL2RvY3MvbGF0ZXN0L3R1dG9yaWFsL3NlY3VyaXR5IzEyLXZlcmlmeS13ZWJ2aWV3LW9wdGlvbnMtYmVmb3JlLWNyZWF0aW9uXG4gICAqL1xuICBjb250ZW50cy5vbihcIndpbGwtYXR0YWNoLXdlYnZpZXdcIiwgKGV2ZW50LCB3ZWJQcmVmZXJlbmNlcywgcGFyYW1zKSA9PiB7XG4gICAgY29uc3QgeyBvcmlnaW4gfSA9IG5ldyBVUkwocGFyYW1zLnNyYyk7XG4gICAgaWYgKCFBTExPV0VEX09SSUdJTlNfQU5EX1BFUk1JU1NJT05TLmhhcyhvcmlnaW4pKSB7XG4gICAgICBpZiAoaW1wb3J0Lm1ldGEuZW52LkRFVikge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYEEgd2VidmlldyB0cmllZCB0byBhdHRhY2ggJHtwYXJhbXMuc3JjfSwgYnV0IHdhcyBibG9ja2VkLmAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU3RyaXAgYXdheSBwcmVsb2FkIHNjcmlwdHMgaWYgdW51c2VkIG9yIHZlcmlmeSB0aGVpciBsb2NhdGlvbiBpcyBsZWdpdGltYXRlLlxuICAgIGRlbGV0ZSB3ZWJQcmVmZXJlbmNlcy5wcmVsb2FkO1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYHByZWxvYWRVUkxgIGV4aXN0cy4gLSBAc2VlIGh0dHBzOi8vd3d3LmVsZWN0cm9uanMub3JnL2RvY3MvbGF0ZXN0L2FwaS93ZWItY29udGVudHMjZXZlbnQtd2lsbC1hdHRhY2gtd2Vidmlld1xuICAgIGRlbGV0ZSB3ZWJQcmVmZXJlbmNlcy5wcmVsb2FkVVJMO1xuXG4gICAgLy8gRGlzYWJsZSBOb2RlLmpzIGludGVncmF0aW9uXG4gICAgd2ViUHJlZmVyZW5jZXMubm9kZUludGVncmF0aW9uID0gZmFsc2U7XG5cbiAgICAvLyBFbmFibGUgY29udGV4dElzb2xhdGlvblxuICAgIHdlYlByZWZlcmVuY2VzLmNvbnRleHRJc29sYXRpb24gPSB0cnVlO1xuICB9KTtcbn0pO1xuIiwiLyoqXG4gKiBTZWUgdGhlIExJQ0VOU0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbFxuICogaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuXG4gKlxuICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhc1xuICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZlxuICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlVcbiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpY1xuICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc29mdHdhcmU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWVcbiAqIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQVxuICogMDIxMTAtMTMwMSBVU0EsIG9yIHNlZSB0aGUgRlNGIHNpdGU6IGh0dHA6Ly93d3cuZnNmLm9yZy5cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQ3Jpc3RhbCBXaWtpIHNvZnR3YXJlIHByb3RvdHlwZVxuICogQGNvcHlyaWdodCAgQ29weXJpZ2h0IChjKSAyMDIzIFhXaWtpIFNBU1xuICogQGxpY2Vuc2UgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FHUEwtMy4wIEFHUEwtMy4wXG4gKlxuICoqL1xuXG5pbXBvcnQgeyBhcHAsIEJyb3dzZXJXaW5kb3csIHNoZWxsIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBqb2luLCByZXNvbHZlIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVXaW5kb3coKSB7XG4gIGNvbnN0IGJyb3dzZXJXaW5kb3cgPSBuZXcgQnJvd3NlcldpbmRvdyh7XG4gICAgc2hvdzogZmFsc2UsIC8vIFVzZSB0aGUgJ3JlYWR5LXRvLXNob3cnIGV2ZW50IHRvIHNob3cgdGhlIGluc3RhbnRpYXRlZCBCcm93c2VyV2luZG93LlxuICAgIHdlYlByZWZlcmVuY2VzOiB7XG4gICAgICBub2RlSW50ZWdyYXRpb246IGZhbHNlLFxuICAgICAgY29udGV4dElzb2xhdGlvbjogdHJ1ZSxcbiAgICAgIHNhbmRib3g6IGZhbHNlLCAvLyBTYW5kYm94IGRpc2FibGVkIGJlY2F1c2UgdGhlIGRlbW8gb2YgcHJlbG9hZCBzY3JpcHQgZGVwZW5kIG9uIHRoZSBOb2RlLmpzIGFwaVxuICAgICAgd2Vidmlld1RhZzogZmFsc2UsIC8vIFRoZSB3ZWJ2aWV3IHRhZyBpcyBub3QgcmVjb21tZW5kZWQuIENvbnNpZGVyIGFsdGVybmF0aXZlcyBsaWtlIGFuIGlmcmFtZSBvciBFbGVjdHJvbidzXG4gICAgICAvLyBCcm93c2VyVmlldy4gQHNlZSBodHRwczovL3d3dy5lbGVjdHJvbmpzLm9yZy9kb2NzL2xhdGVzdC9hcGkvd2Vidmlldy10YWcjd2FybmluZ1xuICAgICAgcHJlbG9hZDogam9pbihhcHAuZ2V0QXBwUGF0aCgpLCBcIi4vcHJlbG9hZC9kaXN0L2luZGV4LmNqc1wiKSxcbiAgICB9LFxuICB9KTtcblxuICAvLyBVbmNvbW1lbnQgdG8gc3RhcnQgZWxlY3Ryb24gZGVidWdnZXIgYXQgc3RhcnR1cC5cbiAgLy8gYnJvd3NlcldpbmRvdy53ZWJDb250ZW50cy5vcGVuRGV2VG9vbHMoKTtcblxuICAvLyBBbGxvd3MgZm9yIGV4dGVybmFsIGxpbmtzIHRvIG9wZW4gaW4gdGhlIE9TIGJyb3dzZXIuLlxuICBicm93c2VyV2luZG93LndlYkNvbnRlbnRzLnNldFdpbmRvd09wZW5IYW5kbGVyKCh7IHVybCB9KSA9PiB7XG4gICAgc2hlbGwub3BlbkV4dGVybmFsKHVybCk7XG4gICAgcmV0dXJuIHsgYWN0aW9uOiBcImRlbnlcIiB9O1xuICB9KTtcblxuICAvKipcbiAgICogSWYgdGhlICdzaG93JyBwcm9wZXJ0eSBvZiB0aGUgQnJvd3NlcldpbmRvdydzIGNvbnN0cnVjdG9yIGlzIG9taXR0ZWQgZnJvbSB0aGUgaW5pdGlhbGl6YXRpb24gb3B0aW9ucyxcbiAgICogaXQgdGhlbiBkZWZhdWx0cyB0byAndHJ1ZScuIFRoaXMgY2FuIGNhdXNlIGZsaWNrZXJpbmcgYXMgdGhlIHdpbmRvdyBsb2FkcyB0aGUgaHRtbCBjb250ZW50LFxuICAgKiBhbmQgaXQgYWxzbyBoYXMgc2hvdyBwcm9ibGVtYXRpYyBiZWhhdmlvdXIgd2l0aCB0aGUgY2xvc2luZyBvZiB0aGUgd2luZG93LlxuICAgKiBVc2UgYHNob3c6IGZhbHNlYCBhbmQgbGlzdGVuIHRvIHRoZSAgYHJlYWR5LXRvLXNob3dgIGV2ZW50IHRvIHNob3cgdGhlIHdpbmRvdy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vZWxlY3Ryb24vZWxlY3Ryb24vaXNzdWVzLzI1MDEyIGZvciB0aGUgYWZmb3JkIG1lbnRpb25lZCBpc3N1ZS5cbiAgICovXG4gIGJyb3dzZXJXaW5kb3cub24oXCJyZWFkeS10by1zaG93XCIsICgpID0+IHtcbiAgICBicm93c2VyV2luZG93Py5zaG93KCk7XG5cbiAgICBpZiAoaW1wb3J0Lm1ldGEuZW52LkRFVikge1xuICAgICAgYnJvd3NlcldpbmRvdz8ud2ViQ29udGVudHMub3BlbkRldlRvb2xzKCk7XG4gICAgfVxuICB9KTtcblxuICAvKipcbiAgICogTG9hZCB0aGUgbWFpbiBwYWdlIG9mIHRoZSBtYWluIHdpbmRvdy5cbiAgICovXG4gIGlmIChcbiAgICBpbXBvcnQubWV0YS5lbnYuREVWICYmXG4gICAgaW1wb3J0Lm1ldGEuZW52LlZJVEVfREVWX1NFUlZFUl9VUkwgIT09IHVuZGVmaW5lZFxuICApIHtcbiAgICAvKipcbiAgICAgKiBMb2FkIGZyb20gdGhlIFZpdGUgZGV2IHNlcnZlciBmb3IgZGV2ZWxvcG1lbnQuXG4gICAgICovXG4gICAgYXdhaXQgYnJvd3NlcldpbmRvdy5sb2FkVVJMKGltcG9ydC5tZXRhLmVudi5WSVRFX0RFVl9TRVJWRVJfVVJMKTtcbiAgfSBlbHNlIHtcbiAgICAvKipcbiAgICAgKiBMb2FkIGZyb20gdGhlIGxvY2FsIGZpbGUgc3lzdGVtIGZvciBwcm9kdWN0aW9uIGFuZCB0ZXN0LlxuICAgICAqXG4gICAgICogVXNlIEJyb3dzZXJXaW5kb3cubG9hZEZpbGUoKSBpbnN0ZWFkIG9mIEJyb3dzZXJXaW5kb3cubG9hZFVSTCgpIGZvciBXaGF0V0cgVVJMIEFQSSBsaW1pdGF0aW9uc1xuICAgICAqIHdoZW4gcGF0aCBjb250YWlucyBzcGVjaWFsIGNoYXJhY3RlcnMgbGlrZSBgI2AuXG4gICAgICogTGV0IGVsZWN0cm9uIGhhbmRsZSB0aGUgcGF0aCBxdWlya3MuXG4gICAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzEyNjgyXG4gICAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vZWxlY3Ryb24vZWxlY3Ryb24vaXNzdWVzLzY4NjlcbiAgICAgKi9cbiAgICBhd2FpdCBicm93c2VyV2luZG93LmxvYWRGaWxlKFxuICAgICAgcmVzb2x2ZShhcHAuZ2V0QXBwUGF0aCgpLCBcIi4vcmVuZGVyZXIvZGlzdC9pbmRleC5odG1sXCIpLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gYnJvd3NlcldpbmRvdztcbn1cblxuLyoqXG4gKiBSZXN0b3JlIGFuIGV4aXN0aW5nIEJyb3dzZXJXaW5kb3cgb3IgQ3JlYXRlIGEgbmV3IEJyb3dzZXJXaW5kb3cuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXN0b3JlT3JDcmVhdGVXaW5kb3coKSB7XG4gIGxldCB3aW5kb3cgPSBCcm93c2VyV2luZG93LmdldEFsbFdpbmRvd3MoKS5maW5kKCh3KSA9PiAhdy5pc0Rlc3Ryb3llZCgpKTtcblxuICBpZiAod2luZG93ID09PSB1bmRlZmluZWQpIHtcbiAgICB3aW5kb3cgPSBhd2FpdCBjcmVhdGVXaW5kb3coKTtcbiAgfVxuXG4gIGlmICh3aW5kb3cuaXNNaW5pbWl6ZWQoKSkge1xuICAgIHdpbmRvdy5yZXN0b3JlKCk7XG4gIH1cblxuICB3aW5kb3cuZm9jdXMoKTtcblxuICByZXR1cm4gd2luZG93O1xufVxuIiwiLyoqXG4gKiBTZWUgdGhlIExJQ0VOU0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbFxuICogaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuXG4gKlxuICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhc1xuICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZlxuICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlVcbiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpY1xuICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc29mdHdhcmU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWVcbiAqIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQVxuICogMDIxMTAtMTMwMSBVU0EsIG9yIHNlZSB0aGUgRlNGIHNpdGU6IGh0dHA6Ly93d3cuZnNmLm9yZy5cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQ3Jpc3RhbCBXaWtpIHNvZnR3YXJlIHByb3RvdHlwZVxuICogQGNvcHlyaWdodCAgQ29weXJpZ2h0IChjKSAyMDIzIFhXaWtpIFNBU1xuICogQGxpY2Vuc2UgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FHUEwtMy4wIEFHUEwtMy4wXG4gKlxuICoqL1xuXG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luLCByZWxhdGl2ZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGFwcCwgaXBjTWFpbiB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IGZzIGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyBQYWdlRGF0YSB9IGZyb20gXCJAeHdpa2kvY3Jpc3RhbC1hcGlcIjtcblxuY29uc3QgSE9NRV9QQVRIID0gXCIuY3Jpc3RhbFwiO1xuY29uc3QgSE9NRV9QQVRIX0ZVTEwgPSBqb2luKGFwcC5nZXRQYXRoKFwiaG9tZVwiKSwgSE9NRV9QQVRIKTtcblxuZnVuY3Rpb24gcmVzb2x2ZVBhdGgod2lraU5hbWU6IHN0cmluZywgaWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIFRPRE86IGN1cnJlbnRseSBhIG1lc3MsIHRoZSB3aWtpTmFtZSBpcyBhY3R1YWxseSB0aGUgcGFnZSBwYXRoXG4gIC8vIGFuZCB0aGUgaWQgaXMgdGhlIHN5bnRheFxuICAvLyBXZSBuZWVkIHRvIG1vdmUgdG8gdGhlIHN5bnRheCBiZWluZyBzYXZlZCBhcyBhIHByb3BlcnR5IG9mIHRoZSBqc29uLFxuICAvLyBhbmQgdGhlIHdpa2luYW1lIGJlaW5nIHRoZSBwYXRoIChvciB0aGUgYWN0dWFsIHdpa2kgbmFtZSwgYnV0IGluIHRoaXMgY2FzZSxcbiAgLy8gd2UgYWxzbyBuZWVkIHRvIHByb3ZpZGUgdGhlIGFjdHVhbCBwYWdlIG5hbWUpLlxuICAvLyBXZSBhbHNvIG5lZWQgdG8gZGVjaWRlIGlmIHdlIGRlZmluZSBzb21lIHNvcnQgb2YgZGVmYXVsdCBwYWdlIG5hbWUgKGUuZy4sIGluZGV4KS5cbiAgY29uc3QgaG9tZWRpciA9IGFwcC5nZXRQYXRoKFwiaG9tZVwiKTtcbiAgbGV0IHBhdGhzID0gd2lraU5hbWU7XG4gIGlmICh3aWtpTmFtZSA9PT0gXCJpbmRleFwiKSB7XG4gICAgcGF0aHMgPSBcIlwiO1xuICB9XG4gIHJldHVybiBqb2luKGhvbWVkaXIsIEhPTUVfUEFUSCwgcGF0aHMsIGlkICsgXCIuanNvblwiKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaXNGaWxlKHBhdGg6IHN0cmluZykge1xuICBsZXQgc3RhdCA9IHVuZGVmaW5lZDtcbiAgdHJ5IHtcbiAgICBzdGF0ID0gYXdhaXQgZnMucHJvbWlzZXMubHN0YXQocGF0aCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zb2xlLmRlYnVnKGUpO1xuICB9XG4gIHJldHVybiBzdGF0Py5pc0ZpbGUoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcGF0aEV4aXN0cyhwYXRoOiBzdHJpbmcpIHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBmcy5wcm9taXNlcy5sc3RhdChwYXRoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVhZFBhZ2UocGF0aDogc3RyaW5nKTogUHJvbWlzZTxQYWdlRGF0YSB8IHVuZGVmaW5lZD4ge1xuICBpZiAoIShhd2FpdCBpc1dpdGhpbihIT01FX1BBVEhfRlVMTCwgcGF0aCkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBbJHtwYXRofV0gaXMgbm90IGluIGluIFske0hPTUVfUEFUSF9GVUxMfV1gKTtcbiAgfVxuICBpZiAoYXdhaXQgaXNGaWxlKHBhdGgpKSB7XG4gICAgY29uc3QgcGFnZUNvbnRlbnQgPSBhd2FpdCBmcy5wcm9taXNlcy5yZWFkRmlsZShwYXRoKTtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShwYWdlQ29udGVudC50b1N0cmluZyhcInV0ZjhcIikpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIGlzV2l0aGluKHJvb3Q6IHN0cmluZywgcGF0aDogc3RyaW5nKSB7XG4gIGNvbnN0IHJlbCA9IHJlbGF0aXZlKHJvb3QsIHBhdGgpO1xuICByZXR1cm4gIXJlbC5zdGFydHNXaXRoKFwiLi4vXCIpICYmIHJlbCAhPT0gXCIuLlwiO1xufVxuXG4vKipcbiAqIE5vdGU6IGN1cnJlbnRseSB0aGlzIGlzIG1vcmUgYSBtZXRob2QgdG8gdXBkYXRlIHRoZSBjb250ZW50IG9mIGEgcGFnZSB0aGFuXG4gKiBhbiBhY3R1YWwgcGFnZSBzYXZlLlxuICpcbiAqIEBwYXJhbSBwYXRoIHRoZSBwYXRoIG9mIHRoZSBwYWdlIG9uIHRoZSBmaWxlIHN5c3RlbVxuICogQHBhcmFtIGNvbnRlbnQgdGhlIGNvbnRlbnQgb2YgdGhlIHBhZ2VcbiAqIEBwYXJhbSB0aXRsZSB0aGUgdGl0bGUgb2YgdGhlIHBhZ2VcbiAqIEBzaW5jZSAwLjhcbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2F2ZVBhZ2UoXG4gIHBhdGg6IHN0cmluZyxcbiAgY29udGVudDogc3RyaW5nLFxuICB0aXRsZTogc3RyaW5nLFxuKTogUHJvbWlzZTxQYWdlRGF0YSB8IHVuZGVmaW5lZD4ge1xuICBpZiAoIShhd2FpdCBpc1dpdGhpbihIT01FX1BBVEhfRlVMTCwgcGF0aCkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBbJHtwYXRofV0gaXMgbm90IGluIGluIFske0hPTUVfUEFUSF9GVUxMfV1gKTtcbiAgfVxuICAvLyBUT0RPOiBjdXJyZW50bHkgZXhwZWN0cyBhbiBleGlzdGluZyBwYWdlLCBuZWVkIHRvIGhhbmRsZSBuZXcgcGFnZSBjcmVhdGlvbi5cbiAgLy8gVE9ETzogZmlyc3QgcmVhZCB0aGUgcGFnZSwgdGhlbiB1cGRhdGUgdGhlIGh0bWwgZmllbGQsIHRoZW4gc2F2ZSBhbmQgcmV0dXJuIHRoZSB1cGRhdGVkIHZlcnNpb25cbiAgbGV0IGpzb25Db250ZW50OiB7XG4gICAgc291cmNlOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHN5bnRheD86IHN0cmluZztcbiAgfTtcbiAgaWYgKChhd2FpdCBwYXRoRXhpc3RzKHBhdGgpKSAmJiAoYXdhaXQgaXNGaWxlKHBhdGgpKSkge1xuICAgIGNvbnN0IGZpbGVDb250ZW50ID0gYXdhaXQgZnMucHJvbWlzZXMucmVhZEZpbGUocGF0aCk7XG4gICAgY29uc3QgdGV4dERlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoXCJ1dGYtOFwiKTtcbiAgICBqc29uQ29udGVudCA9IEpTT04ucGFyc2UodGV4dERlY29kZXIuZGVjb2RlKGZpbGVDb250ZW50KSk7XG4gICAganNvbkNvbnRlbnQuc291cmNlID0gY29udGVudDtcbiAgICBqc29uQ29udGVudC5uYW1lID0gdGl0bGU7XG4gIH0gZWxzZSB7XG4gICAganNvbkNvbnRlbnQgPSB7XG4gICAgICBuYW1lOiB0aXRsZSxcbiAgICAgIHNvdXJjZTogY29udGVudCxcbiAgICAgIHN5bnRheDogXCJtYXJrZG93bi8xLjJcIixcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgbmV3SlNPTiA9IEpTT04uc3RyaW5naWZ5KGpzb25Db250ZW50LCBudWxsLCAyKTtcbiAgY29uc3QgcGFyZW50RGlyZWN0b3J5ID0gZGlybmFtZShwYXRoKTtcbiAgLy8gQ3JlYXRlIHRoZSBwYXJlbnQgZGlyZWN0b3JpZXMgaW4gY2FzZSB0aGV5IGRvIG5vdCBleGlzdC5cbiAgYXdhaXQgZnMucHJvbWlzZXMubWtkaXIocGFyZW50RGlyZWN0b3J5LCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgLy8gU2V0IHRoZSBmbGFnIHRvIHcrIHNvIHRoYXQgdGhlIGZpbGUgaXMgY3JlYXRlZCBpZiBpdCBkb2VzIG5vdCBhbHJlYWR5XG4gIC8vIGV4aXN0LCBvciBmdWxseSByZXBsYWNlZCB3aGVuIGl0IGRvZXMuXG4gIGF3YWl0IGZzLnByb21pc2VzLndyaXRlRmlsZShwYXRoLCBuZXdKU09OLCB7IGZsYWc6IFwidytcIiB9KTtcbiAgcmV0dXJuIHJlYWRQYWdlKHBhdGgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsb2FkKCkge1xuICBpcGNNYWluLmhhbmRsZShcInJlc29sdmVQYXRoXCIsIChldmVudCwgeyBwYWdlLCBzeW50YXggfSkgPT4ge1xuICAgIHJldHVybiByZXNvbHZlUGF0aChwYWdlLCBzeW50YXgpO1xuICB9KTtcbiAgaXBjTWFpbi5oYW5kbGUoXCJyZWFkUGFnZVwiLCAoZXZlbnQsIHsgcGF0aCB9KSA9PiB7XG4gICAgcmV0dXJuIHJlYWRQYWdlKHBhdGgpO1xuICB9KTtcbiAgaXBjTWFpbi5oYW5kbGUoXCJzYXZlUGFnZVwiLCAoZXZlbnQsIHsgcGF0aCwgY29udGVudCwgdGl0bGUgfSkgPT4ge1xuICAgIHJldHVybiBzYXZlUGFnZShwYXRoLCBjb250ZW50LCB0aXRsZSk7XG4gIH0pO1xufVxuIiwiLyoqXG4gKiBTZWUgdGhlIExJQ0VOU0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbFxuICogaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuXG4gKlxuICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhc1xuICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZlxuICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlVcbiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpY1xuICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc29mdHdhcmU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWVcbiAqIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQVxuICogMDIxMTAtMTMwMSBVU0EsIG9yIHNlZSB0aGUgRlNGIHNpdGU6IGh0dHA6Ly93d3cuZnNmLm9yZy5cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQ3Jpc3RhbCBXaWtpIHNvZnR3YXJlIHByb3RvdHlwZVxuICogQGNvcHlyaWdodCAgQ29weXJpZ2h0IChjKSAyMDIzIFhXaWtpIFNBU1xuICogQGxpY2Vuc2UgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FHUEwtMy4wIEFHUEwtMy4wXG4gKlxuICoqL1xuXG5pbXBvcnQgeyBpcGNNYWluLCBhcHAgfSBmcm9tIFwiZWxlY3Ryb25cIjtcbmltcG9ydCBCcm93c2VyV2luZG93ID0gRWxlY3Ryb24uQnJvd3NlcldpbmRvdztcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5cbi8qKlxuICogUmVsb2FkIHRoZSBicm93c2VyIGJ5IHJlbG9hZGluZyB0aGUgaW5kZXggZmlsZS5cbiAqIEBwYXJhbSB3aW5kb3dcbiAqL1xuZnVuY3Rpb24gcmVsb2FkQnJvd3Nlcih3aW5kb3c6IEJyb3dzZXJXaW5kb3cpIHtcbiAgd2luZG93LmxvYWRGaWxlKHJlc29sdmUoYXBwLmdldEFwcFBhdGgoKSwgXCIuL3JlbmRlcmVyL2Rpc3QvaW5kZXguaHRtbFwiKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxvYWQod2luZG93OiBCcm93c2VyV2luZG93KSB7XG4gIGlwY01haW4uaGFuZGxlKFwicmVsb2FkQnJvd3NlclwiLCAoKSA9PiB7XG4gICAgcmV0dXJuIHJlbG9hZEJyb3dzZXIod2luZG93KTtcbiAgfSk7XG59XG4iLCIvKipcbiAqIFNlZSB0aGUgTElDRU5TRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsXG4gKiBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC5cbiAqXG4gKiBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXRcbiAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzXG4gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mXG4gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVVxuICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljXG4gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb2Z0d2FyZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZVxuICogU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BXG4gKiAwMjExMC0xMzAxIFVTQSwgb3Igc2VlIHRoZSBGU0Ygc2l0ZTogaHR0cDovL3d3dy5mc2Yub3JnLlxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDcmlzdGFsIFdpa2kgc29mdHdhcmUgcHJvdG90eXBlXG4gKiBAY29weXJpZ2h0ICBDb3B5cmlnaHQgKGMpIDIwMjMgWFdpa2kgU0FTXG4gKiBAbGljZW5zZSAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUdQTC0zLjAgQUdQTC0zLjBcbiAqXG4gKiovXG5cbmltcG9ydCB7IGFwcCwgQnJvd3NlcldpbmRvdyB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IFwiLi9zZWN1cml0eS1yZXN0cmljdGlvbnNcIjtcbmltcG9ydCB7IHJlc3RvcmVPckNyZWF0ZVdpbmRvdyB9IGZyb20gXCIuL21haW5XaW5kb3dcIjtcbmltcG9ydCB7IHBsYXRmb3JtIH0gZnJvbSBcIm5vZGU6cHJvY2Vzc1wiO1xuLy8gQHRzLWV4cGVjdC1lcnJvciBzaG91bGRuJ3QgaGFwcGVuIGJ1dCB3ZSBuZWVkIHRvIGdlbmVyYXRlIHRoZSB0eXBlcyBmb3IgdGhlIHdob2xlIHByb2plY3Qgb25jZS5cbmltcG9ydCBsb2FkIGZyb20gXCJAeHdpa2kvY3Jpc3RhbC1lbGVjdHJvbi1zdG9yYWdlL21haW5cIjtcbi8vIEB0cy1leHBlY3QtZXJyb3Igc2hvdWxkbid0IGhhcHBlbiBidXQgd2UgbmVlZCB0byBnZW5lcmF0ZSB0aGUgdHlwZXMgZm9yIHRoZSB3aG9sZSBwcm9qZWN0IG9uY2UuXG5pbXBvcnQgbG9hZEJyb3dzZXIgZnJvbSBcIkB4d2lraS9jcmlzdGFsLWJyb3dzZXItZWxlY3Ryb24vbWFpblwiO1xuXG4vKipcbiAqIFByZXZlbnQgZWxlY3Ryb24gZnJvbSBydW5uaW5nIG11bHRpcGxlIGluc3RhbmNlcy5cbiAqL1xuY29uc3QgaXNTaW5nbGVJbnN0YW5jZSA9IGFwcC5yZXF1ZXN0U2luZ2xlSW5zdGFuY2VMb2NrKCk7XG5pZiAoIWlzU2luZ2xlSW5zdGFuY2UpIHtcbiAgYXBwLnF1aXQoKTtcbiAgcHJvY2Vzcy5leGl0KDApO1xufVxuYXBwLm9uKFwic2Vjb25kLWluc3RhbmNlXCIsIHJlc3RvcmVPckNyZWF0ZVdpbmRvdyk7XG5cbi8qKlxuICogRGlzYWJsZSBIYXJkd2FyZSBBY2NlbGVyYXRpb24gdG8gc2F2ZSBtb3JlIHN5c3RlbSByZXNvdXJjZXMuXG4gKi9cbmFwcC5kaXNhYmxlSGFyZHdhcmVBY2NlbGVyYXRpb24oKTtcblxuLyoqXG4gKiBTaG91dCBkb3duIGJhY2tncm91bmQgcHJvY2VzcyBpZiBhbGwgd2luZG93cyB3YXMgY2xvc2VkXG4gKi9cbmFwcC5vbihcIndpbmRvdy1hbGwtY2xvc2VkXCIsICgpID0+IHtcbiAgaWYgKHBsYXRmb3JtICE9PSBcImRhcndpblwiKSB7XG4gICAgYXBwLnF1aXQoKTtcbiAgfVxufSk7XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBhcHBsaWNhdGlvbiB3aW5kb3cgd2hlbiB0aGUgYmFja2dyb3VuZCBwcm9jZXNzIGlzIHJlYWR5LlxuICovXG5hcHBcbiAgLndoZW5SZWFkeSgpXG4gIC50aGVuKCgpID0+IHtcbiAgICBsb2FkKCk7XG4gICAgcmVzdG9yZU9yQ3JlYXRlV2luZG93KCkudGhlbigodykgPT4gbG9hZEJyb3dzZXIodykpO1xuICAgIC8qKlxuICAgICAqIEBzZWUgaHR0cHM6Ly93d3cuZWxlY3Ryb25qcy5vcmcvZG9jcy9sYXRlc3QvYXBpL2FwcCNldmVudC1hY3RpdmF0ZS1tYWNvcyBFdmVudDogJ2FjdGl2YXRlJy5cbiAgICAgKi9cbiAgICBhcHAub24oXCJhY3RpdmF0ZVwiLCAoKSA9PiB7XG4gICAgICBpZiAoQnJvd3NlcldpbmRvdy5nZXRBbGxXaW5kb3dzKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJlc3RvcmVPckNyZWF0ZVdpbmRvdygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KVxuICAuY2F0Y2goKGUpID0+IGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgY3JlYXRlIHdpbmRvdzpcIiwgZSkpO1xuXG4vKipcbiAqIEluc3RhbGwgVnVlLmpzIG9yIGFueSBvdGhlciBleHRlbnNpb24gaW4gZGV2ZWxvcG1lbnQgbW9kZSBvbmx5LlxuICogTm90ZTogWW91IG11c3QgaW5zdGFsbCBgZWxlY3Ryb24tZGV2dG9vbHMtaW5zdGFsbGVyYCBtYW51YWxseVxuICovXG4vLyBpZiAoaW1wb3J0Lm1ldGEuZW52LkRFVikge1xuLy8gICBhcHBcbi8vICAgICAud2hlblJlYWR5KClcbi8vICAgICAudGhlbigoKSA9PiBpbXBvcnQoJ2VsZWN0cm9uLWRldnRvb2xzLWluc3RhbGxlcicpKVxuLy8gICAgIC50aGVuKG1vZHVsZSA9PiB7XG4vLyAgICAgICBjb25zdCB7ZGVmYXVsdDogaW5zdGFsbEV4dGVuc2lvbiwgVlVFSlMzX0RFVlRPT0xTfSA9XG4vLyAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgSG90Zml4IGZvciBodHRwczovL2dpdGh1Yi5jb20vY2F3YS05My92aXRlLWVsZWN0cm9uLWJ1aWxkZXIvaXNzdWVzLzkxNVxuLy8gICAgICAgICB0eXBlb2YgbW9kdWxlLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgPyBtb2R1bGUgOiAobW9kdWxlLmRlZmF1bHQgYXMgdHlwZW9mIG1vZHVsZSk7XG4vL1xuLy8gICAgICAgcmV0dXJuIGluc3RhbGxFeHRlbnNpb24oVlVFSlMzX0RFVlRPT0xTLCB7XG4vLyAgICAgICAgIGxvYWRFeHRlbnNpb25PcHRpb25zOiB7XG4vLyAgICAgICAgICAgYWxsb3dGaWxlQWNjZXNzOiB0cnVlLFxuLy8gICAgICAgICB9LFxuLy8gICAgICAgfSk7XG4vLyAgICAgfSlcbi8vICAgICAuY2F0Y2goZSA9PiBjb25zb2xlLmVycm9yKCdGYWlsZWQgaW5zdGFsbCBleHRlbnNpb246JywgZSkpO1xuLy8gfVxuXG4vKipcbiAqIENoZWNrIGZvciBhcHAgdXBkYXRlcywgaW5zdGFsbCBpdCBpbiBiYWNrZ3JvdW5kIGFuZCBub3RpZnkgdXNlciB0aGF0IG5ldyB2ZXJzaW9uIHdhcyBpbnN0YWxsZWQuXG4gKiBObyByZWFzb24gcnVuIHRoaXMgaW4gbm9uLXByb2R1Y3Rpb24gYnVpbGQuXG4gKiBAc2VlIGh0dHBzOi8vd3d3LmVsZWN0cm9uLmJ1aWxkL2F1dG8tdXBkYXRlLmh0bWwjcXVpY2stc2V0dXAtZ3VpZGVcbiAqXG4gKiBOb3RlOiBJdCBtYXkgdGhyb3cgXCJFTk9FTlQ6IG5vIHN1Y2ggZmlsZSBhcHAtdXBkYXRlLnltbFwiXG4gKiBpZiB5b3UgY29tcGlsZSBwcm9kdWN0aW9uIGFwcCB3aXRob3V0IHB1Ymxpc2hpbmcgaXQgdG8gZGlzdHJpYnV0aW9uIHNlcnZlci5cbiAqIExpa2UgYG5wbSBydW4gY29tcGlsZWAgZG9lcy4gSXQncyBvayDwn5iFXG4gKi9cbmlmIChpbXBvcnQubWV0YS5lbnYuUFJPRCkge1xuICBhcHBcbiAgICAud2hlblJlYWR5KClcbiAgICAudGhlbigoKSA9PlxuICAgICAgLyoqXG4gICAgICAgKiBIZXJlIHdlIGZvcmNlZCB0byB1c2UgYHJlcXVpcmVgIHNpbmNlIGVsZWN0cm9uIGRvZXNuJ3QgZnVsbHkgc3VwcG9ydCBkeW5hbWljIGltcG9ydCBpbiBhc2FyIGFyY2hpdmVzXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGVjdHJvbi9lbGVjdHJvbi9pc3N1ZXMvMzg4MjlcbiAgICAgICAqIFBvdGVudGlhbGx5IGl0IG1heSBiZSBmaXhlZCBieSB0aGlzIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGVjdHJvbi9lbGVjdHJvbi9wdWxsLzM3NTM1XG4gICAgICAgKi9cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG4gICAgICByZXF1aXJlKFwiZWxlY3Ryb24tdXBkYXRlclwiKS5hdXRvVXBkYXRlci5jaGVja0ZvclVwZGF0ZXNBbmROb3RpZnkoKSxcbiAgICApXG4gICAgLmNhdGNoKChlKSA9PiBjb25zb2xlLmVycm9yKFwiRmFpbGVkIGNoZWNrIGFuZCBpbnN0YWxsIHVwZGF0ZXM6XCIsIGUpKTtcbn1cbiJdLCJuYW1lcyI6WyJBTExPV0VEX09SSUdJTlNfQU5EX1BFUk1JU1NJT05TIiwiQUxMT1dFRF9FWFRFUk5BTF9PUklHSU5TIiwiYXBwIiwiXyIsImNvbnRlbnRzIiwiZXZlbnQiLCJ1cmwiLCJvcmlnaW4iLCJVUkwiLCJ3ZWJDb250ZW50cyIsInBlcm1pc3Npb24iLCJjYWxsYmFjayIsInBlcm1pc3Npb25HcmFudGVkIiwic2hlbGwiLCJ3ZWJQcmVmZXJlbmNlcyIsInBhcmFtcyIsImNyZWF0ZVdpbmRvdyIsImJyb3dzZXJXaW5kb3ciLCJCcm93c2VyV2luZG93Iiwiam9pbiIsInJlc29sdmUiLCJyZXN0b3JlT3JDcmVhdGVXaW5kb3ciLCJ3aW5kb3ciLCJ3IiwiSE9NRV9QQVRIIiwiSE9NRV9QQVRIX0ZVTEwiLCJyZXNvbHZlUGF0aCIsIndpa2lOYW1lIiwiaWQiLCJob21lZGlyIiwicGF0aHMiLCJpc0ZpbGUiLCJwYXRoIiwic3RhdCIsImZzIiwiZSIsInBhdGhFeGlzdHMiLCJyZWFkUGFnZSIsImlzV2l0aGluIiwicGFnZUNvbnRlbnQiLCJyb290IiwicmVsIiwicmVsYXRpdmUiLCJzYXZlUGFnZSIsImNvbnRlbnQiLCJ0aXRsZSIsImpzb25Db250ZW50IiwiZmlsZUNvbnRlbnQiLCJ0ZXh0RGVjb2RlciIsIm5ld0pTT04iLCJwYXJlbnREaXJlY3RvcnkiLCJkaXJuYW1lIiwibG9hZCIsImlwY01haW4iLCJwYWdlIiwic3ludGF4IiwicmVsb2FkQnJvd3NlciIsImlzU2luZ2xlSW5zdGFuY2UiLCJwbGF0Zm9ybSIsImxvYWRCcm93c2VyIl0sIm1hcHBpbmdzIjoicUlBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBeUNBLE1BQU1BLEVBQWtDLElBQUksSUFHdEMsQ0FBQyxDQUNQLEVBWU1DLE1BQStCLElBQXlCLENBQzVELG9CQUNGLENBQUMsRUFFREMsRUFBQSxJQUFJLEdBQUcsdUJBQXdCLENBQUNDLEVBQUdDLElBQWEsQ0FTOUNBLEVBQVMsR0FBRyxnQkFBaUIsQ0FBQ0MsRUFBT0MsSUFBUSxDQUMzQyxLQUFNLENBQUUsT0FBQUMsQ0FBVyxFQUFBLElBQUlDLE1BQUlGLENBQUcsRUFDMUJOLEVBQWdDLElBQUlPLENBQU0sR0FLOUNGLEVBQU0sZUFBZSxDQUlyQixDQUNELEVBUURELEVBQVMsUUFBUSw0QkFDZixDQUFDSyxFQUFhQyxFQUFZQyxJQUFhLENBQ3JDLEtBQU0sQ0FBRSxPQUFBSixDQUFPLEVBQUksSUFBSUMsRUFBSSxJQUFBQyxFQUFZLFFBQVEsRUFFekNHLEVBQ0osQ0FBQyxDQUFDWixFQUFnQyxJQUFJTyxDQUFNLEdBQUcsSUFB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
|
|
1
|
+
"use strict";const r=require("electron"),u=require("node:url"),o=require("node:path"),A=require("node:process"),a=require("node:fs"),p=new Map([]),P=new Set(["https://github.com"]);r.app.on("web-contents-created",(e,n)=>{n.on("will-navigate",(t,i)=>{const{origin:c}=new u.URL(i);p.has(c)||t.preventDefault()}),n.session.setPermissionRequestHandler((t,i,c)=>{const{origin:l}=new u.URL(t.getURL()),d=!!p.get(l)?.has(i);c(d)}),n.setWindowOpenHandler(({url:t})=>{const{origin:i}=new u.URL(t);return P.has(i)&&r.shell.openExternal(t).catch(console.error),{action:"deny"}}),n.on("will-attach-webview",(t,i,c)=>{const{origin:l}=new u.URL(c.src);if(!p.has(l)){t.preventDefault();return}delete i.preload,delete i.preloadURL,i.nodeIntegration=!1,i.contextIsolation=!0})});async function E(){const e=new r.BrowserWindow({show:!1,webPreferences:{nodeIntegration:!1,contextIsolation:!0,sandbox:!1,webviewTag:!1,preload:o.join(r.app.getAppPath(),"./preload/dist/index.cjs")}});return e.webContents.setWindowOpenHandler(({url:n})=>(r.shell.openExternal(n),{action:"deny"})),e.on("ready-to-show",()=>{e?.show()}),await e.loadFile(o.resolve(r.app.getAppPath(),"./renderer/dist/index.html")),e}async function f(){let e=r.BrowserWindow.getAllWindows().find(n=>!n.isDestroyed());return e===void 0&&(e=await E()),e.isMinimized()&&e.restore(),e.focus(),e}const m=".cristal",s=o.join(r.app.getPath("home"),m);function h(e,...n){const t=r.app.getPath("home");return o.join(t,m,e,...n)}function L(e){return h(e,"page.json")}function O(e){return h(e,"attachments")}function W(e,n){return h(e,"attachments",n)}async function g(e){let n;try{n=await a.promises.lstat(e)}catch(t){console.debug(t)}return n?.isFile()}async function x(e){let n;try{n=await a.promises.lstat(e)}catch(t){console.debug(t)}return n?.isDirectory()}async function M(e){try{await a.promises.lstat(e)}catch{return!1}return!0}async function v(e){if(!await w(s,e))throw new Error(`[${e}] is not in in [${s}]`);if(await g(e)){const n=await a.promises.readFile(e);return JSON.parse(n.toString("utf8"))}else return}async function R(e){if(!await w(s,e))throw new Error(`[${e}] is not in in [${s}]`);if(await x(e))return(await a.promises.readdir(e)).map(t=>({id:t,mimetype:"",reference:t,href:t}))}async function w(e,n){const t=o.relative(e,n);return!t.startsWith("../")&&t!==".."}async function S(e,n,t){if(!await w(s,e))throw new Error(`[${e}] is not in in [${s}]`);let i;if(await M(e)&&await g(e)){const d=await a.promises.readFile(e),y=new TextDecoder("utf-8");i=JSON.parse(y.decode(d)),i.source=n,i.name=t}else i={name:t,source:n,syntax:"markdown/1.2"};const c=JSON.stringify(i,null,2),l=o.dirname(e);return await a.promises.mkdir(l,{recursive:!0}),await a.promises.writeFile(e,c,{flag:"w+"}),v(e)}async function D(e,n){if(!await w(s,e))throw new Error(`[${e}] is not in in [${s}]`);const t=o.dirname(e);await a.promises.mkdir(t,{recursive:!0}),await a.promises.copyFile(n,e)}function F(){r.ipcMain.handle("resolvePath",(e,{page:n})=>L(n)),r.ipcMain.handle("resolveAttachmentsPath",(e,{page:n})=>O(n)),r.ipcMain.handle("readPage",(e,{path:n})=>v(n)),r.ipcMain.handle("readAttachments",(e,{path:n})=>R(n)),r.ipcMain.handle("savePage",(e,{path:n,content:t,title:i})=>S(n,t,i)),r.ipcMain.handle("resolveAttachmentPath",(e,{page:n,filename:t})=>W(n,t)),r.ipcMain.handle("saveAttachment",(e,{path:n,filePath:t})=>D(n,t))}function I(e){e.loadFile(o.resolve(r.app.getAppPath(),"./renderer/dist/index.html"))}function _(e){r.ipcMain.handle("reloadBrowser",()=>I(e))}const q=r.app.requestSingleInstanceLock();q||(r.app.quit(),process.exit(0));r.app.on("second-instance",f);r.app.disableHardwareAcceleration();r.app.on("window-all-closed",()=>{A.platform!=="darwin"&&r.app.quit()});r.app.whenReady().then(()=>{F(),f().then(e=>_(e)),r.app.on("activate",()=>{r.BrowserWindow.getAllWindows().length===0&&f()})}).catch(e=>console.error("Failed create window:",e));r.app.whenReady().then(()=>require("electron-updater").autoUpdater.checkForUpdatesAndNotify()).catch(e=>console.error("Failed check and install updates:",e));
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY2pzIiwic291cmNlcyI6WyIuLi9zcmMvc2VjdXJpdHktcmVzdHJpY3Rpb25zLnRzIiwiLi4vc3JjL21haW5XaW5kb3cudHMiLCIuLi8uLi9zdG9yYWdlL3NyYy9lbGVjdHJvbi9tYWluL2luZGV4LnRzIiwiLi4vLi4vYnJvd3Nlci9zcmMvZWxlY3Ryb24vbWFpbi9pbmRleC50cyIsIi4uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogU2VlIHRoZSBMSUNFTlNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWxcbiAqIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLlxuICpcbiAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXNcbiAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2ZcbiAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VXG4gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvZnR3YXJlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlXG4gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUFcbiAqIDAyMTEwLTEzMDEgVVNBLCBvciBzZWUgdGhlIEZTRiBzaXRlOiBodHRwOi8vd3d3LmZzZi5vcmcuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBTZXNzaW9uIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBhcHAsIHNoZWxsIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgeyBVUkwgfSBmcm9tIFwibm9kZTp1cmxcIjtcblxuLyoqXG4gKiBVbmlvbiBmb3IgYWxsIGV4aXN0aW5nIHBlcm1pc3Npb25zIGluIGVsZWN0cm9uXG4gKi9cbnR5cGUgUGVybWlzc2lvbiA9IFBhcmFtZXRlcnM8XG4gIEV4Y2x1ZGU8UGFyYW1ldGVyczxTZXNzaW9uW1wic2V0UGVybWlzc2lvblJlcXVlc3RIYW5kbGVyXCJdPlswXSwgbnVsbD5cbj5bMV07XG5cbi8qKlxuICogQSBsaXN0IG9mIG9yaWdpbnMgdGhhdCB5b3UgYWxsb3cgb3BlbiBJTlNJREUgdGhlIGFwcGxpY2F0aW9uIGFuZCBwZXJtaXNzaW9ucyBmb3IgdGhlbS5cbiAqXG4gKiBJbiBkZXZlbG9wbWVudCBtb2RlIHlvdSBuZWVkIGFsbG93IG9wZW4gYFZJVEVfREVWX1NFUlZFUl9VUkxgLlxuICovXG5jb25zdCBBTExPV0VEX09SSUdJTlNfQU5EX1BFUk1JU1NJT05TID0gbmV3IE1hcDxzdHJpbmcsIFNldDxQZXJtaXNzaW9uPj4oXG4gIGltcG9ydC5tZXRhLmVudi5ERVYgJiYgaW1wb3J0Lm1ldGEuZW52LlZJVEVfREVWX1NFUlZFUl9VUkxcbiAgICA/IFtbbmV3IFVSTChpbXBvcnQubWV0YS5lbnYuVklURV9ERVZfU0VSVkVSX1VSTCkub3JpZ2luLCBuZXcgU2V0KCldXVxuICAgIDogW10sXG4pO1xuXG4vKipcbiAqIEEgbGlzdCBvZiBvcmlnaW5zIHRoYXQgeW91IGFsbG93IG9wZW4gSU4gQlJPV1NFUi5cbiAqIE5hdmlnYXRpb24gdG8gdGhlIG9yaWdpbnMgYmVsb3cgaXMgb25seSBwb3NzaWJsZSBpZiB0aGUgbGluayBvcGVucyBpbiBhIG5ldyB3aW5kb3cuXG4gKlxuICogQGV4YW1wbGVcbiAqIDxhXG4gKiAgIHRhcmdldD1cIl9ibGFua1wiXG4gKiAgIGhyZWY9XCJodHRwczovL2dpdGh1Yi5jb20vXCJcbiAqID5cbiAqL1xuY29uc3QgQUxMT1dFRF9FWFRFUk5BTF9PUklHSU5TID0gbmV3IFNldDxgaHR0cHM6Ly8ke3N0cmluZ31gPihbXG4gIFwiaHR0cHM6Ly9naXRodWIuY29tXCIsXG5dKTtcblxuYXBwLm9uKFwid2ViLWNvbnRlbnRzLWNyZWF0ZWRcIiwgKF8sIGNvbnRlbnRzKSA9PiB7XG4gIC8qKlxuICAgKiBCbG9jayBuYXZpZ2F0aW9uIHRvIG9yaWdpbnMgbm90IG9uIHRoZSBhbGxvd2xpc3QuXG4gICAqXG4gICAqIE5hdmlnYXRpb24gZXhwbG9pdHMgYXJlIHF1aXRlIGNvbW1vbi4gSWYgYW4gYXR0YWNrZXIgY2FuIGNvbnZpbmNlIHRoZSBhcHAgdG8gbmF2aWdhdGUgYXdheSBmcm9tIGl0cyBjdXJyZW50IHBhZ2UsXG4gICAqIHRoZXkgY2FuIHBvc3NpYmx5IGZvcmNlIHRoZSBhcHAgdG8gb3BlbiBhcmJpdHJhcnkgd2ViIHJlc291cmNlcy93ZWJzaXRlcyBvbiB0aGUgd2ViLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vd3d3LmVsZWN0cm9uanMub3JnL2RvY3MvbGF0ZXN0L3R1dG9yaWFsL3NlY3VyaXR5IzEzLWRpc2FibGUtb3ItbGltaXQtbmF2aWdhdGlvblxuICAgKi9cbiAgY29udGVudHMub24oXCJ3aWxsLW5hdmlnYXRlXCIsIChldmVudCwgdXJsKSA9PiB7XG4gICAgY29uc3QgeyBvcmlnaW4gfSA9IG5ldyBVUkwodXJsKTtcbiAgICBpZiAoQUxMT1dFRF9PUklHSU5TX0FORF9QRVJNSVNTSU9OUy5oYXMob3JpZ2luKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFByZXZlbnQgbmF2aWdhdGlvblxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBpZiAoaW1wb3J0Lm1ldGEuZW52LkRFVikge1xuICAgICAgY29uc29sZS53YXJuKGBCbG9ja2VkIG5hdmlnYXRpbmcgdG8gZGlzYWxsb3dlZCBvcmlnaW46ICR7b3JpZ2lufWApO1xuICAgIH1cbiAgfSk7XG5cbiAgLyoqXG4gICAqIEJsb2NrIHJlcXVlc3RzIGZvciBkaXNhbGxvd2VkIHBlcm1pc3Npb25zLlxuICAgKiBCeSBkZWZhdWx0LCBFbGVjdHJvbiB3aWxsIGF1dG9tYXRpY2FsbHkgYXBwcm92ZSBhbGwgcGVybWlzc2lvbiByZXF1ZXN0cy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL3d3dy5lbGVjdHJvbmpzLm9yZy9kb2NzL2xhdGVzdC90dXRvcmlhbC9zZWN1cml0eSM1LWhhbmRsZS1zZXNzaW9uLXBlcm1pc3Npb24tcmVxdWVzdHMtZnJvbS1yZW1vdGUtY29udGVudFxuICAgKi9cbiAgY29udGVudHMuc2Vzc2lvbi5zZXRQZXJtaXNzaW9uUmVxdWVzdEhhbmRsZXIoXG4gICAgKHdlYkNvbnRlbnRzLCBwZXJtaXNzaW9uLCBjYWxsYmFjaykgPT4ge1xuICAgICAgY29uc3QgeyBvcmlnaW4gfSA9IG5ldyBVUkwod2ViQ29udGVudHMuZ2V0VVJMKCkpO1xuXG4gICAgICBjb25zdCBwZXJtaXNzaW9uR3JhbnRlZCA9XG4gICAgICAgICEhQUxMT1dFRF9PUklHSU5TX0FORF9QRVJNSVNTSU9OUy5nZXQob3JpZ2luKT8uaGFzKHBlcm1pc3Npb24pO1xuICAgICAgY2FsbGJhY2socGVybWlzc2lvbkdyYW50ZWQpO1xuXG4gICAgICBpZiAoIXBlcm1pc3Npb25HcmFudGVkICYmIGltcG9ydC5tZXRhLmVudi5ERVYpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGAke29yaWdpbn0gcmVxdWVzdGVkIHBlcm1pc3Npb24gZm9yICcke3Blcm1pc3Npb259JywgYnV0IHdhcyByZWplY3RlZC5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIEh5cGVybGlua3MgbGVhZGluZyB0byBhbGxvd2VkIHNpdGVzIGFyZSBvcGVuZWQgaW4gdGhlIGRlZmF1bHQgYnJvd3Nlci5cbiAgICpcbiAgICogVGhlIGNyZWF0aW9uIG9mIG5ldyBgd2ViQ29udGVudHNgIGlzIGEgY29tbW9uIGF0dGFjayB2ZWN0b3IuIEF0dGFja2VycyBhdHRlbXB0IHRvIGNvbnZpbmNlIHRoZSBhcHAgdG8gY3JlYXRlIG5ldyB3aW5kb3dzLFxuICAgKiBmcmFtZXMsIG9yIG90aGVyIHJlbmRlcmVyIHByb2Nlc3NlcyB3aXRoIG1vcmUgcHJpdmlsZWdlcyB0aGFuIHRoZXkgaGFkIGJlZm9yZTsgb3Igd2l0aCBwYWdlcyBvcGVuZWQgdGhhdCB0aGV5IGNvdWxkbid0IG9wZW4gYmVmb3JlLlxuICAgKiBZb3Ugc2hvdWxkIGRlbnkgYW55IHVuZXhwZWN0ZWQgd2luZG93IGNyZWF0aW9uLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vd3d3LmVsZWN0cm9uanMub3JnL2RvY3MvbGF0ZXN0L3R1dG9yaWFsL3NlY3VyaXR5IzE0LWRpc2FibGUtb3ItbGltaXQtY3JlYXRpb24tb2YtbmV3LXdpbmRvd3NcbiAgICogQHNlZSBodHRwczovL3d3dy5lbGVjdHJvbmpzLm9yZy9kb2NzL2xhdGVzdC90dXRvcmlhbC9zZWN1cml0eSMxNS1kby1ub3QtdXNlLW9wZW5leHRlcm5hbC13aXRoLXVudHJ1c3RlZC1jb250ZW50XG4gICAqL1xuICBjb250ZW50cy5zZXRXaW5kb3dPcGVuSGFuZGxlcigoeyB1cmwgfSkgPT4ge1xuICAgIGNvbnN0IHsgb3JpZ2luIH0gPSBuZXcgVVJMKHVybCk7XG5cbiAgICBpZiAoQUxMT1dFRF9FWFRFUk5BTF9PUklHSU5TLmhhcyhvcmlnaW4gYXMgYGh0dHBzOi8vJHtzdHJpbmd9YCkpIHtcbiAgICAgIC8vIE9wZW4gdXJsIGluIGRlZmF1bHQgYnJvd3Nlci5cbiAgICAgIHNoZWxsLm9wZW5FeHRlcm5hbCh1cmwpLmNhdGNoKGNvbnNvbGUuZXJyb3IpO1xuICAgIH0gZWxzZSBpZiAoaW1wb3J0Lm1ldGEuZW52LkRFVikge1xuICAgICAgY29uc29sZS53YXJuKGBCbG9ja2VkIHRoZSBvcGVuaW5nIG9mIGEgZGlzYWxsb3dlZCBvcmlnaW46ICR7b3JpZ2lufWApO1xuICAgIH1cblxuICAgIC8vIFByZXZlbnQgY3JlYXRpbmcgYSBuZXcgd2luZG93LlxuICAgIHJldHVybiB7IGFjdGlvbjogXCJkZW55XCIgfTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFZlcmlmeSB3ZWJ2aWV3IG9wdGlvbnMgYmVmb3JlIGNyZWF0aW9uLlxuICAgKlxuICAgKiBTdHJpcCBhd2F5IHByZWxvYWQgc2NyaXB0cywgZGlzYWJsZSBOb2RlLmpzIGludGVncmF0aW9uLCBhbmQgZW5zdXJlIG9yaWdpbnMgYXJlIG9uIHRoZSBhbGxvd2xpc3QuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly93d3cuZWxlY3Ryb25qcy5vcmcvZG9jcy9sYXRlc3QvdHV0b3JpYWwvc2VjdXJpdHkjMTItdmVyaWZ5LXdlYnZpZXctb3B0aW9ucy1iZWZvcmUtY3JlYXRpb25cbiAgICovXG4gIGNvbnRlbnRzLm9uKFwid2lsbC1hdHRhY2gtd2Vidmlld1wiLCAoZXZlbnQsIHdlYlByZWZlcmVuY2VzLCBwYXJhbXMpID0+IHtcbiAgICBjb25zdCB7IG9yaWdpbiB9ID0gbmV3IFVSTChwYXJhbXMuc3JjKTtcbiAgICBpZiAoIUFMTE9XRURfT1JJR0lOU19BTkRfUEVSTUlTU0lPTlMuaGFzKG9yaWdpbikpIHtcbiAgICAgIGlmIChpbXBvcnQubWV0YS5lbnYuREVWKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgQSB3ZWJ2aWV3IHRyaWVkIHRvIGF0dGFjaCAke3BhcmFtcy5zcmN9LCBidXQgd2FzIGJsb2NrZWQuYCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTdHJpcCBhd2F5IHByZWxvYWQgc2NyaXB0cyBpZiB1bnVzZWQgb3IgdmVyaWZ5IHRoZWlyIGxvY2F0aW9uIGlzIGxlZ2l0aW1hdGUuXG4gICAgZGVsZXRlIHdlYlByZWZlcmVuY2VzLnByZWxvYWQ7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBgcHJlbG9hZFVSTGAgZXhpc3RzLiAtIEBzZWUgaHR0cHM6Ly93d3cuZWxlY3Ryb25qcy5vcmcvZG9jcy9sYXRlc3QvYXBpL3dlYi1jb250ZW50cyNldmVudC13aWxsLWF0dGFjaC13ZWJ2aWV3XG4gICAgZGVsZXRlIHdlYlByZWZlcmVuY2VzLnByZWxvYWRVUkw7XG5cbiAgICAvLyBEaXNhYmxlIE5vZGUuanMgaW50ZWdyYXRpb25cbiAgICB3ZWJQcmVmZXJlbmNlcy5ub2RlSW50ZWdyYXRpb24gPSBmYWxzZTtcblxuICAgIC8vIEVuYWJsZSBjb250ZXh0SXNvbGF0aW9uXG4gICAgd2ViUHJlZmVyZW5jZXMuY29udGV4dElzb2xhdGlvbiA9IHRydWU7XG4gIH0pO1xufSk7XG4iLCIvKlxuICogU2VlIHRoZSBMSUNFTlNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWxcbiAqIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLlxuICpcbiAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXNcbiAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2ZcbiAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VXG4gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvZnR3YXJlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlXG4gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUFcbiAqIDAyMTEwLTEzMDEgVVNBLCBvciBzZWUgdGhlIEZTRiBzaXRlOiBodHRwOi8vd3d3LmZzZi5vcmcuXG4gKi9cblxuaW1wb3J0IHsgYXBwLCBCcm93c2VyV2luZG93LCBzaGVsbCB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IHsgam9pbiwgcmVzb2x2ZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlV2luZG93KCkge1xuICBjb25zdCBicm93c2VyV2luZG93ID0gbmV3IEJyb3dzZXJXaW5kb3coe1xuICAgIHNob3c6IGZhbHNlLCAvLyBVc2UgdGhlICdyZWFkeS10by1zaG93JyBldmVudCB0byBzaG93IHRoZSBpbnN0YW50aWF0ZWQgQnJvd3NlcldpbmRvdy5cbiAgICB3ZWJQcmVmZXJlbmNlczoge1xuICAgICAgbm9kZUludGVncmF0aW9uOiBmYWxzZSxcbiAgICAgIGNvbnRleHRJc29sYXRpb246IHRydWUsXG4gICAgICBzYW5kYm94OiBmYWxzZSwgLy8gU2FuZGJveCBkaXNhYmxlZCBiZWNhdXNlIHRoZSBkZW1vIG9mIHByZWxvYWQgc2NyaXB0IGRlcGVuZCBvbiB0aGUgTm9kZS5qcyBhcGlcbiAgICAgIHdlYnZpZXdUYWc6IGZhbHNlLCAvLyBUaGUgd2VidmlldyB0YWcgaXMgbm90IHJlY29tbWVuZGVkLiBDb25zaWRlciBhbHRlcm5hdGl2ZXMgbGlrZSBhbiBpZnJhbWUgb3IgRWxlY3Ryb24nc1xuICAgICAgLy8gQnJvd3NlclZpZXcuIEBzZWUgaHR0cHM6Ly93d3cuZWxlY3Ryb25qcy5vcmcvZG9jcy9sYXRlc3QvYXBpL3dlYnZpZXctdGFnI3dhcm5pbmdcbiAgICAgIHByZWxvYWQ6IGpvaW4oYXBwLmdldEFwcFBhdGgoKSwgXCIuL3ByZWxvYWQvZGlzdC9pbmRleC5janNcIiksXG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gVW5jb21tZW50IHRvIHN0YXJ0IGVsZWN0cm9uIGRlYnVnZ2VyIGF0IHN0YXJ0dXAuXG4gIC8vIGJyb3dzZXJXaW5kb3cud2ViQ29udGVudHMub3BlbkRldlRvb2xzKCk7XG5cbiAgLy8gQWxsb3dzIGZvciBleHRlcm5hbCBsaW5rcyB0byBvcGVuIGluIHRoZSBPUyBicm93c2VyLi5cbiAgYnJvd3NlcldpbmRvdy53ZWJDb250ZW50cy5zZXRXaW5kb3dPcGVuSGFuZGxlcigoeyB1cmwgfSkgPT4ge1xuICAgIHNoZWxsLm9wZW5FeHRlcm5hbCh1cmwpO1xuICAgIHJldHVybiB7IGFjdGlvbjogXCJkZW55XCIgfTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIElmIHRoZSAnc2hvdycgcHJvcGVydHkgb2YgdGhlIEJyb3dzZXJXaW5kb3cncyBjb25zdHJ1Y3RvciBpcyBvbWl0dGVkIGZyb20gdGhlIGluaXRpYWxpemF0aW9uIG9wdGlvbnMsXG4gICAqIGl0IHRoZW4gZGVmYXVsdHMgdG8gJ3RydWUnLiBUaGlzIGNhbiBjYXVzZSBmbGlja2VyaW5nIGFzIHRoZSB3aW5kb3cgbG9hZHMgdGhlIGh0bWwgY29udGVudCxcbiAgICogYW5kIGl0IGFsc28gaGFzIHNob3cgcHJvYmxlbWF0aWMgYmVoYXZpb3VyIHdpdGggdGhlIGNsb3Npbmcgb2YgdGhlIHdpbmRvdy5cbiAgICogVXNlIGBzaG93OiBmYWxzZWAgYW5kIGxpc3RlbiB0byB0aGUgIGByZWFkeS10by1zaG93YCBldmVudCB0byBzaG93IHRoZSB3aW5kb3cuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2VsZWN0cm9uL2VsZWN0cm9uL2lzc3Vlcy8yNTAxMiBmb3IgdGhlIGFmZm9yZCBtZW50aW9uZWQgaXNzdWUuXG4gICAqL1xuICBicm93c2VyV2luZG93Lm9uKFwicmVhZHktdG8tc2hvd1wiLCAoKSA9PiB7XG4gICAgYnJvd3NlcldpbmRvdz8uc2hvdygpO1xuXG4gICAgaWYgKGltcG9ydC5tZXRhLmVudi5ERVYpIHtcbiAgICAgIGJyb3dzZXJXaW5kb3c/LndlYkNvbnRlbnRzLm9wZW5EZXZUb29scygpO1xuICAgIH1cbiAgfSk7XG5cbiAgLyoqXG4gICAqIExvYWQgdGhlIG1haW4gcGFnZSBvZiB0aGUgbWFpbiB3aW5kb3cuXG4gICAqL1xuICBpZiAoXG4gICAgaW1wb3J0Lm1ldGEuZW52LkRFViAmJlxuICAgIGltcG9ydC5tZXRhLmVudi5WSVRFX0RFVl9TRVJWRVJfVVJMICE9PSB1bmRlZmluZWRcbiAgKSB7XG4gICAgLyoqXG4gICAgICogTG9hZCBmcm9tIHRoZSBWaXRlIGRldiBzZXJ2ZXIgZm9yIGRldmVsb3BtZW50LlxuICAgICAqL1xuICAgIGF3YWl0IGJyb3dzZXJXaW5kb3cubG9hZFVSTChpbXBvcnQubWV0YS5lbnYuVklURV9ERVZfU0VSVkVSX1VSTCk7XG4gIH0gZWxzZSB7XG4gICAgLyoqXG4gICAgICogTG9hZCBmcm9tIHRoZSBsb2NhbCBmaWxlIHN5c3RlbSBmb3IgcHJvZHVjdGlvbiBhbmQgdGVzdC5cbiAgICAgKlxuICAgICAqIFVzZSBCcm93c2VyV2luZG93LmxvYWRGaWxlKCkgaW5zdGVhZCBvZiBCcm93c2VyV2luZG93LmxvYWRVUkwoKSBmb3IgV2hhdFdHIFVSTCBBUEkgbGltaXRhdGlvbnNcbiAgICAgKiB3aGVuIHBhdGggY29udGFpbnMgc3BlY2lhbCBjaGFyYWN0ZXJzIGxpa2UgYCNgLlxuICAgICAqIExldCBlbGVjdHJvbiBoYW5kbGUgdGhlIHBhdGggcXVpcmtzLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy8xMjY4MlxuICAgICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2VsZWN0cm9uL2VsZWN0cm9uL2lzc3Vlcy82ODY5XG4gICAgICovXG4gICAgYXdhaXQgYnJvd3NlcldpbmRvdy5sb2FkRmlsZShcbiAgICAgIHJlc29sdmUoYXBwLmdldEFwcFBhdGgoKSwgXCIuL3JlbmRlcmVyL2Rpc3QvaW5kZXguaHRtbFwiKSxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGJyb3dzZXJXaW5kb3c7XG59XG5cbi8qKlxuICogUmVzdG9yZSBhbiBleGlzdGluZyBCcm93c2VyV2luZG93IG9yIENyZWF0ZSBhIG5ldyBCcm93c2VyV2luZG93LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzdG9yZU9yQ3JlYXRlV2luZG93KCkge1xuICBsZXQgd2luZG93ID0gQnJvd3NlcldpbmRvdy5nZXRBbGxXaW5kb3dzKCkuZmluZCgodykgPT4gIXcuaXNEZXN0cm95ZWQoKSk7XG5cbiAgaWYgKHdpbmRvdyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgd2luZG93ID0gYXdhaXQgY3JlYXRlV2luZG93KCk7XG4gIH1cblxuICBpZiAod2luZG93LmlzTWluaW1pemVkKCkpIHtcbiAgICB3aW5kb3cucmVzdG9yZSgpO1xuICB9XG5cbiAgd2luZG93LmZvY3VzKCk7XG5cbiAgcmV0dXJuIHdpbmRvdztcbn1cbiIsIi8qXG4gKiBTZWUgdGhlIExJQ0VOU0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbFxuICogaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuXG4gKlxuICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0XG4gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhc1xuICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZlxuICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlVcbiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xuICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc29mdHdhcmU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWVcbiAqIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQVxuICogMDIxMTAtMTMwMSBVU0EsIG9yIHNlZSB0aGUgRlNGIHNpdGU6IGh0dHA6Ly93d3cuZnNmLm9yZy5cbiAqL1xuXG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luLCByZWxhdGl2ZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGFwcCwgaXBjTWFpbiB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IGZzIGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyBQYWdlQXR0YWNobWVudCwgUGFnZURhdGEgfSBmcm9tIFwiQHh3aWtpL2NyaXN0YWwtYXBpXCI7XG5cbmNvbnN0IEhPTUVfUEFUSCA9IFwiLmNyaXN0YWxcIjtcbmNvbnN0IEhPTUVfUEFUSF9GVUxMID0gam9pbihhcHAuZ2V0UGF0aChcImhvbWVcIiksIEhPTUVfUEFUSCk7XG5cbmZ1bmN0aW9uIHJlc29sdmVQYXRoKHBhZ2U6IHN0cmluZywgLi4ubGFzdFNlZ21lbnRzOiBzdHJpbmdbXSkge1xuICBjb25zdCBob21lZGlyID0gYXBwLmdldFBhdGgoXCJob21lXCIpO1xuICByZXR1cm4gam9pbihob21lZGlyLCBIT01FX1BBVEgsIHBhZ2UsIC4uLmxhc3RTZWdtZW50cyk7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVQYWdlUGF0aChwYWdlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcmVzb2x2ZVBhdGgocGFnZSwgXCJwYWdlLmpzb25cIik7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVBdHRhY2htZW50c1BhdGgocGFnZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlc29sdmVQYXRoKHBhZ2UsIFwiYXR0YWNobWVudHNcIik7XG59XG5mdW5jdGlvbiByZXNvbHZlQXR0YWNobWVudFBhdGgocGFnZTogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlc29sdmVQYXRoKHBhZ2UsIFwiYXR0YWNobWVudHNcIiwgZmlsZW5hbWUpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBpc0ZpbGUocGF0aDogc3RyaW5nKSB7XG4gIGxldCBzdGF0ID0gdW5kZWZpbmVkO1xuICB0cnkge1xuICAgIHN0YXQgPSBhd2FpdCBmcy5wcm9taXNlcy5sc3RhdChwYXRoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUuZGVidWcoZSk7XG4gIH1cbiAgcmV0dXJuIHN0YXQ/LmlzRmlsZSgpO1xufVxuYXN5bmMgZnVuY3Rpb24gaXNEaXJlY3RvcnkocGF0aDogc3RyaW5nKSB7XG4gIGxldCBzdGF0ID0gdW5kZWZpbmVkO1xuICB0cnkge1xuICAgIHN0YXQgPSBhd2FpdCBmcy5wcm9taXNlcy5sc3RhdChwYXRoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUuZGVidWcoZSk7XG4gIH1cbiAgcmV0dXJuIHN0YXQ/LmlzRGlyZWN0b3J5KCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBhdGhFeGlzdHMocGF0aDogc3RyaW5nKSB7XG4gIHRyeSB7XG4gICAgYXdhaXQgZnMucHJvbWlzZXMubHN0YXQocGF0aCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlYWRQYWdlKHBhdGg6IHN0cmluZyk6IFByb21pc2U8UGFnZURhdGEgfCB1bmRlZmluZWQ+IHtcbiAgaWYgKCEoYXdhaXQgaXNXaXRoaW4oSE9NRV9QQVRIX0ZVTEwsIHBhdGgpKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgWyR7cGF0aH1dIGlzIG5vdCBpbiBpbiBbJHtIT01FX1BBVEhfRlVMTH1dYCk7XG4gIH1cbiAgaWYgKGF3YWl0IGlzRmlsZShwYXRoKSkge1xuICAgIGNvbnN0IHBhZ2VDb250ZW50ID0gYXdhaXQgZnMucHJvbWlzZXMucmVhZEZpbGUocGF0aCk7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UocGFnZUNvbnRlbnQudG9TdHJpbmcoXCJ1dGY4XCIpKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlYWRBdHRhY2htZW50cyhcbiAgcGF0aDogc3RyaW5nLFxuKTogUHJvbWlzZTxQYWdlQXR0YWNobWVudFtdIHwgdW5kZWZpbmVkPiB7XG4gIGlmICghKGF3YWl0IGlzV2l0aGluKEhPTUVfUEFUSF9GVUxMLCBwYXRoKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFske3BhdGh9XSBpcyBub3QgaW4gaW4gWyR7SE9NRV9QQVRIX0ZVTEx9XWApO1xuICB9XG4gIGlmIChhd2FpdCBpc0RpcmVjdG9yeShwYXRoKSkge1xuICAgIGNvbnN0IHBhZ2VDb250ZW50ID0gYXdhaXQgZnMucHJvbWlzZXMucmVhZGRpcihwYXRoKTtcbiAgICByZXR1cm4gcGFnZUNvbnRlbnQubWFwKChwYXRoKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogcGF0aCxcbiAgICAgICAgbWltZXR5cGU6IFwiXCIsXG4gICAgICAgIHJlZmVyZW5jZTogcGF0aCxcbiAgICAgICAgaHJlZjogcGF0aCxcbiAgICAgIH07XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBpc1dpdGhpbihyb290OiBzdHJpbmcsIHBhdGg6IHN0cmluZykge1xuICBjb25zdCByZWwgPSByZWxhdGl2ZShyb290LCBwYXRoKTtcbiAgcmV0dXJuICFyZWwuc3RhcnRzV2l0aChcIi4uL1wiKSAmJiByZWwgIT09IFwiLi5cIjtcbn1cblxuLyoqXG4gKiBOb3RlOiBjdXJyZW50bHkgdGhpcyBpcyBtb3JlIGEgbWV0aG9kIHRvIHVwZGF0ZSB0aGUgY29udGVudCBvZiBhIHBhZ2UgdGhhblxuICogYW4gYWN0dWFsIHBhZ2Ugc2F2ZS5cbiAqXG4gKiBAcGFyYW0gcGF0aCB0aGUgcGF0aCBvZiB0aGUgcGFnZSBvbiB0aGUgZmlsZSBzeXN0ZW1cbiAqIEBwYXJhbSBjb250ZW50IHRoZSBjb250ZW50IG9mIHRoZSBwYWdlXG4gKiBAcGFyYW0gdGl0bGUgdGhlIHRpdGxlIG9mIHRoZSBwYWdlXG4gKiBAc2luY2UgMC44XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNhdmVQYWdlKFxuICBwYXRoOiBzdHJpbmcsXG4gIGNvbnRlbnQ6IHN0cmluZyxcbiAgdGl0bGU6IHN0cmluZyxcbik6IFByb21pc2U8UGFnZURhdGEgfCB1bmRlZmluZWQ+IHtcbiAgaWYgKCEoYXdhaXQgaXNXaXRoaW4oSE9NRV9QQVRIX0ZVTEwsIHBhdGgpKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgWyR7cGF0aH1dIGlzIG5vdCBpbiBpbiBbJHtIT01FX1BBVEhfRlVMTH1dYCk7XG4gIH1cbiAgbGV0IGpzb25Db250ZW50OiB7XG4gICAgc291cmNlOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHN5bnRheD86IHN0cmluZztcbiAgfTtcbiAgaWYgKChhd2FpdCBwYXRoRXhpc3RzKHBhdGgpKSAmJiAoYXdhaXQgaXNGaWxlKHBhdGgpKSkge1xuICAgIGNvbnN0IGZpbGVDb250ZW50ID0gYXdhaXQgZnMucHJvbWlzZXMucmVhZEZpbGUocGF0aCk7XG4gICAgY29uc3QgdGV4dERlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoXCJ1dGYtOFwiKTtcbiAgICBqc29uQ29udGVudCA9IEpTT04ucGFyc2UodGV4dERlY29kZXIuZGVjb2RlKGZpbGVDb250ZW50KSk7XG4gICAganNvbkNvbnRlbnQuc291cmNlID0gY29udGVudDtcbiAgICBqc29uQ29udGVudC5uYW1lID0gdGl0bGU7XG4gIH0gZWxzZSB7XG4gICAganNvbkNvbnRlbnQgPSB7XG4gICAgICBuYW1lOiB0aXRsZSxcbiAgICAgIHNvdXJjZTogY29udGVudCxcbiAgICAgIHN5bnRheDogXCJtYXJrZG93bi8xLjJcIixcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgbmV3SlNPTiA9IEpTT04uc3RyaW5naWZ5KGpzb25Db250ZW50LCBudWxsLCAyKTtcbiAgY29uc3QgcGFyZW50RGlyZWN0b3J5ID0gZGlybmFtZShwYXRoKTtcbiAgLy8gQ3JlYXRlIHRoZSBwYXJlbnQgZGlyZWN0b3JpZXMgaW4gY2FzZSB0aGV5IGRvIG5vdCBleGlzdC5cbiAgYXdhaXQgZnMucHJvbWlzZXMubWtkaXIocGFyZW50RGlyZWN0b3J5LCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgLy8gU2V0IHRoZSBmbGFnIHRvIHcrIHNvIHRoYXQgdGhlIGZpbGUgaXMgY3JlYXRlZCBpZiBpdCBkb2VzIG5vdCBhbHJlYWR5XG4gIC8vIGV4aXN0LCBvciBmdWxseSByZXBsYWNlZCB3aGVuIGl0IGRvZXMuXG4gIGF3YWl0IGZzLnByb21pc2VzLndyaXRlRmlsZShwYXRoLCBuZXdKU09OLCB7IGZsYWc6IFwidytcIiB9KTtcbiAgcmV0dXJuIHJlYWRQYWdlKHBhdGgpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzYXZlQXR0YWNobWVudChwYXRoOiBzdHJpbmcsIGZpbGVQYXRoOiBzdHJpbmcpIHtcbiAgaWYgKCEoYXdhaXQgaXNXaXRoaW4oSE9NRV9QQVRIX0ZVTEwsIHBhdGgpKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgWyR7cGF0aH1dIGlzIG5vdCBpbiBpbiBbJHtIT01FX1BBVEhfRlVMTH1dYCk7XG4gIH1cbiAgY29uc3QgcGFyZW50RGlyZWN0b3J5ID0gZGlybmFtZShwYXRoKTtcblxuICAvLyBDcmVhdGUgdGhlIHBhcmVudCBkaXJlY3RvcmllcyBpbiBjYXNlIHRoZXkgZG8gbm90IGV4aXN0LlxuICBhd2FpdCBmcy5wcm9taXNlcy5ta2RpcihwYXJlbnREaXJlY3RvcnksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBhd2FpdCBmcy5wcm9taXNlcy5jb3B5RmlsZShmaWxlUGF0aCwgcGF0aCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxvYWQoKTogdm9pZCB7XG4gIGlwY01haW4uaGFuZGxlKFwicmVzb2x2ZVBhdGhcIiwgKGV2ZW50LCB7IHBhZ2UgfSkgPT4ge1xuICAgIHJldHVybiByZXNvbHZlUGFnZVBhdGgocGFnZSk7XG4gIH0pO1xuICBpcGNNYWluLmhhbmRsZShcInJlc29sdmVBdHRhY2htZW50c1BhdGhcIiwgKGV2ZW50LCB7IHBhZ2UgfSkgPT4ge1xuICAgIHJldHVybiByZXNvbHZlQXR0YWNobWVudHNQYXRoKHBhZ2UpO1xuICB9KTtcbiAgaXBjTWFpbi5oYW5kbGUoXCJyZWFkUGFnZVwiLCAoZXZlbnQsIHsgcGF0aCB9KSA9PiB7XG4gICAgcmV0dXJuIHJlYWRQYWdlKHBhdGgpO1xuICB9KTtcbiAgaXBjTWFpbi5oYW5kbGUoXCJyZWFkQXR0YWNobWVudHNcIiwgKGV2ZW50LCB7IHBhdGggfSkgPT4ge1xuICAgIHJldHVybiByZWFkQXR0YWNobWVudHMocGF0aCk7XG4gIH0pO1xuICBpcGNNYWluLmhhbmRsZShcInNhdmVQYWdlXCIsIChldmVudCwgeyBwYXRoLCBjb250ZW50LCB0aXRsZSB9KSA9PiB7XG4gICAgcmV0dXJuIHNhdmVQYWdlKHBhdGgsIGNvbnRlbnQsIHRpdGxlKTtcbiAgfSk7XG4gIGlwY01haW4uaGFuZGxlKFwicmVzb2x2ZUF0dGFjaG1lbnRQYXRoXCIsIChldmVudCwgeyBwYWdlLCBmaWxlbmFtZSB9KSA9PiB7XG4gICAgcmV0dXJuIHJlc29sdmVBdHRhY2htZW50UGF0aChwYWdlLCBmaWxlbmFtZSk7XG4gIH0pO1xuICBpcGNNYWluLmhhbmRsZShcInNhdmVBdHRhY2htZW50XCIsIChldmVudCwgeyBwYXRoLCBmaWxlUGF0aCB9KSA9PiB7XG4gICAgcmV0dXJuIHNhdmVBdHRhY2htZW50KHBhdGgsIGZpbGVQYXRoKTtcbiAgfSk7XG59XG4iLCIvKlxuICogU2VlIHRoZSBMSUNFTlNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWxcbiAqIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLlxuICpcbiAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdFxuICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXNcbiAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2ZcbiAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VXG4gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcbiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvZnR3YXJlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlXG4gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUFcbiAqIDAyMTEwLTEzMDEgVVNBLCBvciBzZWUgdGhlIEZTRiBzaXRlOiBodHRwOi8vd3d3LmZzZi5vcmcuXG4gKi9cblxuaW1wb3J0IHsgaXBjTWFpbiwgYXBwIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgQnJvd3NlcldpbmRvdyA9IEVsZWN0cm9uLkJyb3dzZXJXaW5kb3c7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuXG4vKipcbiAqIFJlbG9hZCB0aGUgYnJvd3NlciBieSByZWxvYWRpbmcgdGhlIGluZGV4IGZpbGUuXG4gKiBAcGFyYW0gd2luZG93XG4gKi9cbmZ1bmN0aW9uIHJlbG9hZEJyb3dzZXIod2luZG93OiBCcm93c2VyV2luZG93KSB7XG4gIHdpbmRvdy5sb2FkRmlsZShyZXNvbHZlKGFwcC5nZXRBcHBQYXRoKCksIFwiLi9yZW5kZXJlci9kaXN0L2luZGV4Lmh0bWxcIikpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsb2FkKHdpbmRvdzogQnJvd3NlcldpbmRvdyk6IHZvaWQge1xuICBpcGNNYWluLmhhbmRsZShcInJlbG9hZEJyb3dzZXJcIiwgKCkgPT4ge1xuICAgIHJldHVybiByZWxvYWRCcm93c2VyKHdpbmRvdyk7XG4gIH0pO1xufVxuIiwiLypcbiAqIFNlZSB0aGUgTElDRU5TRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsXG4gKiBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC5cbiAqXG4gKiBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXRcbiAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzXG4gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mXG4gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVVxuICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXG4gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb2Z0d2FyZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZVxuICogU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BXG4gKiAwMjExMC0xMzAxIFVTQSwgb3Igc2VlIHRoZSBGU0Ygc2l0ZTogaHR0cDovL3d3dy5mc2Yub3JnLlxuICovXG5cbmltcG9ydCB7IGFwcCwgQnJvd3NlcldpbmRvdyB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IFwiLi9zZWN1cml0eS1yZXN0cmljdGlvbnNcIjtcbmltcG9ydCB7IHJlc3RvcmVPckNyZWF0ZVdpbmRvdyB9IGZyb20gXCIuL21haW5XaW5kb3dcIjtcbmltcG9ydCB7IHBsYXRmb3JtIH0gZnJvbSBcIm5vZGU6cHJvY2Vzc1wiO1xuLy8gQHRzLWV4cGVjdC1lcnJvciBzaG91bGRuJ3QgaGFwcGVuIGJ1dCB3ZSBuZWVkIHRvIGdlbmVyYXRlIHRoZSB0eXBlcyBmb3IgdGhlIHdob2xlIHByb2plY3Qgb25jZS5cbmltcG9ydCBsb2FkIGZyb20gXCJAeHdpa2kvY3Jpc3RhbC1lbGVjdHJvbi1zdG9yYWdlL21haW5cIjtcbi8vIEB0cy1leHBlY3QtZXJyb3Igc2hvdWxkbid0IGhhcHBlbiBidXQgd2UgbmVlZCB0byBnZW5lcmF0ZSB0aGUgdHlwZXMgZm9yIHRoZSB3aG9sZSBwcm9qZWN0IG9uY2UuXG5pbXBvcnQgbG9hZEJyb3dzZXIgZnJvbSBcIkB4d2lraS9jcmlzdGFsLWJyb3dzZXItZWxlY3Ryb24vbWFpblwiO1xuXG4vKipcbiAqIFByZXZlbnQgZWxlY3Ryb24gZnJvbSBydW5uaW5nIG11bHRpcGxlIGluc3RhbmNlcy5cbiAqL1xuY29uc3QgaXNTaW5nbGVJbnN0YW5jZSA9IGFwcC5yZXF1ZXN0U2luZ2xlSW5zdGFuY2VMb2NrKCk7XG5pZiAoIWlzU2luZ2xlSW5zdGFuY2UpIHtcbiAgYXBwLnF1aXQoKTtcbiAgcHJvY2Vzcy5leGl0KDApO1xufVxuYXBwLm9uKFwic2Vjb25kLWluc3RhbmNlXCIsIHJlc3RvcmVPckNyZWF0ZVdpbmRvdyk7XG5cbi8qKlxuICogRGlzYWJsZSBIYXJkd2FyZSBBY2NlbGVyYXRpb24gdG8gc2F2ZSBtb3JlIHN5c3RlbSByZXNvdXJjZXMuXG4gKi9cbmFwcC5kaXNhYmxlSGFyZHdhcmVBY2NlbGVyYXRpb24oKTtcblxuLyoqXG4gKiBTaG91dCBkb3duIGJhY2tncm91bmQgcHJvY2VzcyBpZiBhbGwgd2luZG93cyB3YXMgY2xvc2VkXG4gKi9cbmFwcC5vbihcIndpbmRvdy1hbGwtY2xvc2VkXCIsICgpID0+IHtcbiAgaWYgKHBsYXRmb3JtICE9PSBcImRhcndpblwiKSB7XG4gICAgYXBwLnF1aXQoKTtcbiAgfVxufSk7XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBhcHBsaWNhdGlvbiB3aW5kb3cgd2hlbiB0aGUgYmFja2dyb3VuZCBwcm9jZXNzIGlzIHJlYWR5LlxuICovXG5hcHBcbiAgLndoZW5SZWFkeSgpXG4gIC50aGVuKCgpID0+IHtcbiAgICBsb2FkKCk7XG4gICAgcmVzdG9yZU9yQ3JlYXRlV2luZG93KCkudGhlbigodykgPT4gbG9hZEJyb3dzZXIodykpO1xuICAgIC8qKlxuICAgICAqIEBzZWUgaHR0cHM6Ly93d3cuZWxlY3Ryb25qcy5vcmcvZG9jcy9sYXRlc3QvYXBpL2FwcCNldmVudC1hY3RpdmF0ZS1tYWNvcyBFdmVudDogJ2FjdGl2YXRlJy5cbiAgICAgKi9cbiAgICBhcHAub24oXCJhY3RpdmF0ZVwiLCAoKSA9PiB7XG4gICAgICBpZiAoQnJvd3NlcldpbmRvdy5nZXRBbGxXaW5kb3dzKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJlc3RvcmVPckNyZWF0ZVdpbmRvdygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KVxuICAuY2F0Y2goKGUpID0+IGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgY3JlYXRlIHdpbmRvdzpcIiwgZSkpO1xuXG4vKipcbiAqIEluc3RhbGwgVnVlLmpzIG9yIGFueSBvdGhlciBleHRlbnNpb24gaW4gZGV2ZWxvcG1lbnQgbW9kZSBvbmx5LlxuICogTm90ZTogWW91IG11c3QgaW5zdGFsbCBgZWxlY3Ryb24tZGV2dG9vbHMtaW5zdGFsbGVyYCBtYW51YWxseVxuICovXG4vLyBpZiAoaW1wb3J0Lm1ldGEuZW52LkRFVikge1xuLy8gICBhcHBcbi8vICAgICAud2hlblJlYWR5KClcbi8vICAgICAudGhlbigoKSA9PiBpbXBvcnQoJ2VsZWN0cm9uLWRldnRvb2xzLWluc3RhbGxlcicpKVxuLy8gICAgIC50aGVuKG1vZHVsZSA9PiB7XG4vLyAgICAgICBjb25zdCB7ZGVmYXVsdDogaW5zdGFsbEV4dGVuc2lvbiwgVlVFSlMzX0RFVlRPT0xTfSA9XG4vLyAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgSG90Zml4IGZvciBodHRwczovL2dpdGh1Yi5jb20vY2F3YS05My92aXRlLWVsZWN0cm9uLWJ1aWxkZXIvaXNzdWVzLzkxNVxuLy8gICAgICAgICB0eXBlb2YgbW9kdWxlLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgPyBtb2R1bGUgOiAobW9kdWxlLmRlZmF1bHQgYXMgdHlwZW9mIG1vZHVsZSk7XG4vL1xuLy8gICAgICAgcmV0dXJuIGluc3RhbGxFeHRlbnNpb24oVlVFSlMzX0RFVlRPT0xTLCB7XG4vLyAgICAgICAgIGxvYWRFeHRlbnNpb25PcHRpb25zOiB7XG4vLyAgICAgICAgICAgYWxsb3dGaWxlQWNjZXNzOiB0cnVlLFxuLy8gICAgICAgICB9LFxuLy8gICAgICAgfSk7XG4vLyAgICAgfSlcbi8vICAgICAuY2F0Y2goZSA9PiBjb25zb2xlLmVycm9yKCdGYWlsZWQgaW5zdGFsbCBleHRlbnNpb246JywgZSkpO1xuLy8gfVxuXG4vKipcbiAqIENoZWNrIGZvciBhcHAgdXBkYXRlcywgaW5zdGFsbCBpdCBpbiBiYWNrZ3JvdW5kIGFuZCBub3RpZnkgdXNlciB0aGF0IG5ldyB2ZXJzaW9uIHdhcyBpbnN0YWxsZWQuXG4gKiBObyByZWFzb24gcnVuIHRoaXMgaW4gbm9uLXByb2R1Y3Rpb24gYnVpbGQuXG4gKiBAc2VlIGh0dHBzOi8vd3d3LmVsZWN0cm9uLmJ1aWxkL2F1dG8tdXBkYXRlLmh0bWwjcXVpY2stc2V0dXAtZ3VpZGVcbiAqXG4gKiBOb3RlOiBJdCBtYXkgdGhyb3cgXCJFTk9FTlQ6IG5vIHN1Y2ggZmlsZSBhcHAtdXBkYXRlLnltbFwiXG4gKiBpZiB5b3UgY29tcGlsZSBwcm9kdWN0aW9uIGFwcCB3aXRob3V0IHB1Ymxpc2hpbmcgaXQgdG8gZGlzdHJpYnV0aW9uIHNlcnZlci5cbiAqIExpa2UgYG5wbSBydW4gY29tcGlsZWAgZG9lcy4gSXQncyBvayDwn5iFXG4gKi9cbmlmIChpbXBvcnQubWV0YS5lbnYuUFJPRCkge1xuICBhcHBcbiAgICAud2hlblJlYWR5KClcbiAgICAudGhlbigoKSA9PlxuICAgICAgLyoqXG4gICAgICAgKiBIZXJlIHdlIGZvcmNlZCB0byB1c2UgYHJlcXVpcmVgIHNpbmNlIGVsZWN0cm9uIGRvZXNuJ3QgZnVsbHkgc3VwcG9ydCBkeW5hbWljIGltcG9ydCBpbiBhc2FyIGFyY2hpdmVzXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGVjdHJvbi9lbGVjdHJvbi9pc3N1ZXMvMzg4MjlcbiAgICAgICAqIFBvdGVudGlhbGx5IGl0IG1heSBiZSBmaXhlZCBieSB0aGlzIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGVjdHJvbi9lbGVjdHJvbi9wdWxsLzM3NTM1XG4gICAgICAgKi9cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG4gICAgICByZXF1aXJlKFwiZWxlY3Ryb24tdXBkYXRlclwiKS5hdXRvVXBkYXRlci5jaGVja0ZvclVwZGF0ZXNBbmROb3RpZnkoKSxcbiAgICApXG4gICAgLmNhdGNoKChlKSA9PiBjb25zb2xlLmVycm9yKFwiRmFpbGVkIGNoZWNrIGFuZCBpbnN0YWxsIHVwZGF0ZXM6XCIsIGUpKTtcbn1cbiJdLCJuYW1lcyI6WyJBTExPV0VEX09SSUdJTlNfQU5EX1BFUk1JU1NJT05TIiwiQUxMT1dFRF9FWFRFUk5BTF9PUklHSU5TIiwiYXBwIiwiXyIsImNvbnRlbnRzIiwiZXZlbnQiLCJ1cmwiLCJvcmlnaW4iLCJVUkwiLCJ3ZWJDb250ZW50cyIsInBlcm1pc3Npb24iLCJjYWxsYmFjayIsInBlcm1pc3Npb25HcmFudGVkIiwic2hlbGwiLCJ3ZWJQcmVmZXJlbmNlcyIsInBhcmFtcyIsImNyZWF0ZVdpbmRvdyIsImJyb3dzZXJXaW5kb3ciLCJCcm93c2VyV2luZG93Iiwiam9pbiIsInJlc29sdmUiLCJyZXN0b3JlT3JDcmVhdGVXaW5kb3ciLCJ3aW5kb3ciLCJ3IiwiSE9NRV9QQVRIIiwiSE9NRV9QQVRIX0ZVTEwiLCJyZXNvbHZlUGF0aCIsInBhZ2UiLCJsYXN0U2VnbWVudHMiLCJob21lZGlyIiwicmVzb2x2ZVBhZ2VQYXRoIiwicmVzb2x2ZUF0dGFjaG1lbnRzUGF0aCIsInJlc29sdmVBdHRhY2htZW50UGF0aCIsImZpbGVuYW1lIiwiaXNGaWxlIiwicGF0aCIsInN0YXQiLCJmcyIsImUiLCJpc0RpcmVjdG9yeSIsInBhdGhFeGlzdHMiLCJyZWFkUGFnZSIsImlzV2l0aGluIiwicGFnZUNvbnRlbnQiLCJyZWFkQXR0YWNobWVudHMiLCJyb290IiwicmVsIiwicmVsYXRpdmUiLCJzYXZlUGFnZSIsImNvbnRlbnQiLCJ0aXRsZSIsImpzb25Db250ZW50IiwiZmlsZUNvbnRlbnQiLCJ0ZXh0RGVjb2RlciIsIm5ld0pTT04iLCJwYXJlbnREaXJlY3RvcnkiLCJkaXJuYW1lIiwic2F2ZUF0dGFjaG1lbnQiLCJmaWxlUGF0aCIsImxvYWQiLCJpcGNNYWluIiwicmVsb2FkQnJvd3NlciIsImlzU2luZ2xlSW5zdGFuY2UiLCJwbGF0Zm9ybSIsImxvYWRCcm93c2VyIl0sIm1hcHBpbmdzIjoicUlBb0NNQSxF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
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xwiki/cristal-electron-main",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"license": "
|
|
3
|
+
"version": "0.9.0",
|
|
4
|
+
"license": "LGPL 2.1",
|
|
5
5
|
"author": "XWiki Org Community <contact@xwiki.org>",
|
|
6
6
|
"homepage": "https://cristal.xwiki.org/",
|
|
7
7
|
"repository": {
|
|
@@ -13,21 +13,18 @@
|
|
|
13
13
|
"url": "https://jira.xwiki.org/projects/CRISTAL/"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"electron": "
|
|
17
|
-
"@xwiki/cristal-browser-electron": "0.
|
|
18
|
-
"@xwiki/cristal-electron-storage": "0.
|
|
16
|
+
"electron": "31.0.2",
|
|
17
|
+
"@xwiki/cristal-browser-electron": "0.9.0",
|
|
18
|
+
"@xwiki/cristal-electron-storage": "0.9.0"
|
|
19
19
|
},
|
|
20
20
|
"devDependencies": {
|
|
21
|
-
"@types/node": "20.
|
|
21
|
+
"@types/node": "20.14.7",
|
|
22
22
|
"cross-env": "7.0.3",
|
|
23
|
-
"rimraf": "5.0.7"
|
|
24
|
-
"typescript": "5.4.5",
|
|
25
|
-
"vite": "5.2.11"
|
|
23
|
+
"rimraf": "5.0.7"
|
|
26
24
|
},
|
|
27
25
|
"scripts": {
|
|
28
|
-
"build": "
|
|
26
|
+
"build": "tsc --project tsconfig.json && vite build",
|
|
29
27
|
"clean": "rimraf dist",
|
|
30
|
-
"compile": "tsc --project tsconfig.json --noEmit && vite build",
|
|
31
28
|
"electron": "echo 'no task'",
|
|
32
29
|
"lint": "eslint \"./src/**/*.{ts,tsx}\" --max-warnings=0",
|
|
33
30
|
"linux": "echo 'no task'",
|
package/src/index.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
/*
|
|
2
2
|
* See the LICENSE file distributed with this work for additional
|
|
3
3
|
* information regarding copyright ownership.
|
|
4
4
|
*
|
|
5
5
|
* This is free software; you can redistribute it and/or modify it
|
|
6
|
-
* under the terms of the GNU
|
|
6
|
+
* under the terms of the GNU Lesser General Public License as
|
|
7
7
|
* published by the Free Software Foundation; either version 2.1 of
|
|
8
8
|
* the License, or (at your option) any later version.
|
|
9
9
|
*
|
|
@@ -12,16 +12,11 @@
|
|
|
12
12
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
13
13
|
* Lesser General Public License for more details.
|
|
14
14
|
*
|
|
15
|
-
* You should have received a copy of the GNU
|
|
15
|
+
* You should have received a copy of the GNU Lesser General Public
|
|
16
16
|
* License along with this software; if not, write to the Free
|
|
17
17
|
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
|
18
18
|
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
|
|
19
|
-
|
|
20
|
-
* This file is part of the Cristal Wiki software prototype
|
|
21
|
-
* @copyright Copyright (c) 2023 XWiki SAS
|
|
22
|
-
* @license http://opensource.org/licenses/AGPL-3.0 AGPL-3.0
|
|
23
|
-
*
|
|
24
|
-
**/
|
|
19
|
+
*/
|
|
25
20
|
|
|
26
21
|
import { app, BrowserWindow } from "electron";
|
|
27
22
|
import "./security-restrictions";
|
package/src/mainWindow.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
/*
|
|
2
2
|
* See the LICENSE file distributed with this work for additional
|
|
3
3
|
* information regarding copyright ownership.
|
|
4
4
|
*
|
|
5
5
|
* This is free software; you can redistribute it and/or modify it
|
|
6
|
-
* under the terms of the GNU
|
|
6
|
+
* under the terms of the GNU Lesser General Public License as
|
|
7
7
|
* published by the Free Software Foundation; either version 2.1 of
|
|
8
8
|
* the License, or (at your option) any later version.
|
|
9
9
|
*
|
|
@@ -12,16 +12,11 @@
|
|
|
12
12
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
13
13
|
* Lesser General Public License for more details.
|
|
14
14
|
*
|
|
15
|
-
* You should have received a copy of the GNU
|
|
15
|
+
* You should have received a copy of the GNU Lesser General Public
|
|
16
16
|
* License along with this software; if not, write to the Free
|
|
17
17
|
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
|
18
18
|
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
|
|
19
|
-
|
|
20
|
-
* This file is part of the Cristal Wiki software prototype
|
|
21
|
-
* @copyright Copyright (c) 2023 XWiki SAS
|
|
22
|
-
* @license http://opensource.org/licenses/AGPL-3.0 AGPL-3.0
|
|
23
|
-
*
|
|
24
|
-
**/
|
|
19
|
+
*/
|
|
25
20
|
|
|
26
21
|
import { app, BrowserWindow, shell } from "electron";
|
|
27
22
|
import { join, resolve } from "node:path";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
/*
|
|
2
2
|
* See the LICENSE file distributed with this work for additional
|
|
3
3
|
* information regarding copyright ownership.
|
|
4
4
|
*
|
|
5
5
|
* This is free software; you can redistribute it and/or modify it
|
|
6
|
-
* under the terms of the GNU
|
|
6
|
+
* under the terms of the GNU Lesser General Public License as
|
|
7
7
|
* published by the Free Software Foundation; either version 2.1 of
|
|
8
8
|
* the License, or (at your option) any later version.
|
|
9
9
|
*
|
|
@@ -12,16 +12,11 @@
|
|
|
12
12
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
13
13
|
* Lesser General Public License for more details.
|
|
14
14
|
*
|
|
15
|
-
* You should have received a copy of the GNU
|
|
15
|
+
* You should have received a copy of the GNU Lesser General Public
|
|
16
16
|
* License along with this software; if not, write to the Free
|
|
17
17
|
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
|
18
18
|
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
|
|
19
|
-
|
|
20
|
-
* This file is part of the Cristal Wiki software prototype
|
|
21
|
-
* @copyright Copyright (c) 2023 XWiki SAS
|
|
22
|
-
* @license http://opensource.org/licenses/AGPL-3.0 AGPL-3.0
|
|
23
|
-
*
|
|
24
|
-
**/
|
|
19
|
+
*/
|
|
25
20
|
|
|
26
21
|
import type { Session } from "electron";
|
|
27
22
|
import { app, shell } from "electron";
|
package/tsconfig.json
CHANGED
package/vite.config.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
/*
|
|
2
2
|
* See the LICENSE file distributed with this work for additional
|
|
3
3
|
* information regarding copyright ownership.
|
|
4
4
|
*
|
|
5
5
|
* This is free software; you can redistribute it and/or modify it
|
|
6
|
-
* under the terms of the GNU
|
|
6
|
+
* under the terms of the GNU Lesser General Public License as
|
|
7
7
|
* published by the Free Software Foundation; either version 2.1 of
|
|
8
8
|
* the License, or (at your option) any later version.
|
|
9
9
|
*
|
|
@@ -12,16 +12,11 @@
|
|
|
12
12
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
13
13
|
* Lesser General Public License for more details.
|
|
14
14
|
*
|
|
15
|
-
* You should have received a copy of the GNU
|
|
15
|
+
* You should have received a copy of the GNU Lesser General Public
|
|
16
16
|
* License along with this software; if not, write to the Free
|
|
17
17
|
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
|
18
18
|
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
|
|
19
|
-
|
|
20
|
-
* This file is part of the Cristal Wiki software prototype
|
|
21
|
-
* @copyright Copyright (c) 2023 XWiki SAS
|
|
22
|
-
* @license http://opensource.org/licenses/AGPL-3.0 AGPL-3.0
|
|
23
|
-
*
|
|
24
|
-
**/
|
|
19
|
+
*/
|
|
25
20
|
|
|
26
21
|
import { node } from "../.electron-vendors.cache.json";
|
|
27
22
|
import { join } from "node:path";
|