nadesiko3 3.6.12 → 3.6.13

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.
Files changed (45) hide show
  1. package/core/command/plugin_snako.mjs +112 -0
  2. package/core/command/snako.mjs +114 -0
  3. package/core/package.json +1 -1
  4. package/core/sample/hoge.mjs +7 -0
  5. package/core/src/nako_gen.mjs +11 -2
  6. package/core/src/nako_gen.mts +15 -4
  7. package/core/test/error_message_test.mjs +15 -0
  8. package/core/tsconfig.json +4 -4
  9. package/package.json +2 -1
  10. package/release/_hash.txt +77 -12
  11. package/release/_script-tags.txt +33 -20
  12. package/release/editor/edit_main.js +48 -0
  13. package/release/editor/edit_main.js.map +7 -0
  14. package/release/editor/version_main.js +44 -0
  15. package/release/editor/version_main.js.map +7 -0
  16. package/release/editor.js +48 -3
  17. package/release/src/plugin_caniuse.js +2 -0
  18. package/release/src/plugin_caniuse.js.map +7 -0
  19. package/release/src/plugin_datetime.js +2 -0
  20. package/release/src/plugin_datetime.js.map +7 -0
  21. package/release/src/plugin_kansuji.js +2 -0
  22. package/release/src/plugin_kansuji.js.map +7 -0
  23. package/release/src/plugin_keigo.js +2 -0
  24. package/release/src/plugin_keigo.js.map +7 -0
  25. package/release/src/plugin_markup.js +64 -0
  26. package/release/src/plugin_markup.js.map +7 -0
  27. package/release/src/plugin_three.js +2 -0
  28. package/release/src/plugin_three.js.map +7 -0
  29. package/release/src/plugin_turtle.js +2 -0
  30. package/release/src/plugin_turtle.js.map +7 -0
  31. package/release/src/plugin_webworker.js +4 -0
  32. package/release/src/plugin_webworker.js.map +7 -0
  33. package/release/src/plugin_weykturtle3d.js +2 -0
  34. package/release/src/plugin_weykturtle3d.js.map +7 -0
  35. package/release/src/wnako3.js +482 -0
  36. package/release/src/wnako3.js.map +7 -0
  37. package/release/src/wnako3webworker.js +428 -0
  38. package/release/src/wnako3webworker.js.map +7 -0
  39. package/release/version.js +44 -3
  40. package/release/wnako3.js +1 -1
  41. package/release/wnako3.js.map +1 -1
  42. package/src/nako_version.mjs +2 -2
  43. package/src/nako_version.mts +2 -2
  44. package/src/plugin_browser_canvas.mjs +1 -1
  45. package/src/plugin_browser_canvas.mts +1 -1
@@ -0,0 +1,112 @@
1
+ /**
2
+ * file: plugin_snako.js
3
+ * 簡単なファイル読み書きのプラグイン
4
+ */
5
+ import fs from 'node:fs';
6
+ import { execSync } from 'node:child_process';
7
+ import path from 'node:path';
8
+ export default {
9
+ 'meta': {
10
+ type: 'const',
11
+ value: {
12
+ pluginName: 'plugin_snako', // プラグインの名前
13
+ description: '最小の機能を提供するプラグイン', // プラグインの説明
14
+ pluginVersion: '3.6.3', // プラグインのバージョン
15
+ nakoRuntime: ['cnako'], // 対象ランタイム
16
+ nakoVersion: '3.6.3' // 要求なでしこバージョン
17
+ }
18
+ },
19
+ '初期化': {
20
+ type: 'func',
21
+ josi: [],
22
+ pure: true,
23
+ fn: function (sys) {
24
+ sys.__getBokanPath = () => {
25
+ let nakofile;
26
+ const cmd = path.basename(process.argv[1]);
27
+ if (cmd.indexOf('snako') < 0) {
28
+ nakofile = process.argv[1];
29
+ }
30
+ else {
31
+ nakofile = process.argv[2];
32
+ }
33
+ return path.dirname(path.resolve(nakofile));
34
+ };
35
+ sys.__setSysVar('コマンドライン', process.argv);
36
+ sys.__setSysVar('ナデシコランタイムパス', process.argv[0]);
37
+ sys.__setSysVar('ナデシコランタイム', path.basename(process.argv[0]));
38
+ sys.__setSysVar('母艦パス', sys.__getBokanPath());
39
+ }
40
+ },
41
+ // @SNAKO
42
+ 'コマンドライン': { type: 'const', value: '' },
43
+ 'ナデシコランタイムパス': { type: 'const', value: '' },
44
+ 'ナデシコランタイム': { type: 'const', value: '' },
45
+ '母艦パス': { type: 'const', value: '' },
46
+ '読': {
47
+ type: 'func',
48
+ josi: [['を', 'から']],
49
+ pure: true,
50
+ fn: function (f) {
51
+ return '' + fs.readFileSync(f);
52
+ }
53
+ },
54
+ '開': {
55
+ type: 'func',
56
+ josi: [['を', 'から']],
57
+ pure: true,
58
+ fn: function (f) {
59
+ return '' + fs.readFileSync(f);
60
+ }
61
+ },
62
+ '保存': {
63
+ type: 'func',
64
+ josi: [['を'], ['に', 'へ']],
65
+ pure: true,
66
+ fn: function (s, f) {
67
+ fs.writeFileSync(f, s, 'utf-8');
68
+ },
69
+ return_none: true
70
+ },
71
+ '起動待機': {
72
+ type: 'func',
73
+ josi: [['を']],
74
+ pure: true,
75
+ fn: function (s) {
76
+ const r = execSync(s);
77
+ return r.toString();
78
+ }
79
+ },
80
+ 'ファイル名抽出': {
81
+ type: 'func',
82
+ josi: [['から', 'の']],
83
+ pure: true,
84
+ fn: function (s) {
85
+ return path.basename(s);
86
+ }
87
+ },
88
+ 'パス抽出': {
89
+ type: 'func',
90
+ josi: [['から', 'の']],
91
+ pure: true,
92
+ fn: function (s) {
93
+ return path.dirname(s);
94
+ }
95
+ },
96
+ '絶対パス変換': {
97
+ type: 'func',
98
+ josi: [['を', 'の']],
99
+ pure: true,
100
+ fn: function (a) {
101
+ return path.resolve(a);
102
+ }
103
+ },
104
+ '相対パス展開': {
105
+ type: 'func',
106
+ josi: [['を'], ['で']],
107
+ pure: true,
108
+ fn: function (a, b) {
109
+ return path.resolve(path.join(a, b));
110
+ }
111
+ }
112
+ };
@@ -0,0 +1,114 @@
1
+ #!/usr/bin/env node --no-warnings=ExperimentalWarning --loader ts-node/esm
2
+ import fs from 'node:fs';
3
+ import path from 'node:path';
4
+ import com from '../index.mjs';
5
+ import { argv as nodejs_argv } from 'node:process';
6
+ import * as url from 'node:url';
7
+ import { NakoGenOptions } from '../src/nako_gen.mjs';
8
+ import PluginSnako from './plugin_snako.mjs';
9
+ const __dirname = url.fileURLToPath(new URL('.', import.meta.url));
10
+ /** コマンドラインオプション */
11
+ class CommandOptions {
12
+ isDebug;
13
+ filename;
14
+ nodePath;
15
+ scriptPath;
16
+ evalStr;
17
+ flagConvert;
18
+ constructor() {
19
+ this.nodePath = '';
20
+ this.scriptPath = '';
21
+ this.filename = '';
22
+ this.evalStr = '';
23
+ this.isDebug = false;
24
+ this.flagConvert = false;
25
+ }
26
+ }
27
+ /** メイン処理 */
28
+ async function main(argvOrg) {
29
+ // コマンドラインオプションを確認
30
+ const argv = [...argvOrg];
31
+ const opt = new CommandOptions();
32
+ opt.nodePath = argv.shift() || '';
33
+ opt.scriptPath = argv.shift() || '';
34
+ while (argv.length > 0) {
35
+ const arg = argv.shift() || '';
36
+ if (arg === '-d' || arg === '--debug') {
37
+ opt.isDebug = true;
38
+ continue;
39
+ }
40
+ if (arg === '-e' || arg === '--eval') {
41
+ opt.evalStr = argv.shift() || '';
42
+ continue;
43
+ }
44
+ if (arg === '-c' || arg === '--convert') {
45
+ opt.flagConvert = true;
46
+ continue;
47
+ }
48
+ if (opt.filename === '') {
49
+ opt.filename = arg;
50
+ }
51
+ }
52
+ // なでしこのコンパイラを生成
53
+ const nako = new com.NakoCompiler();
54
+ nako.addPluginObject('PluginSnako', PluginSnako);
55
+ // 実行前にイベントを挟みたいとき
56
+ nako.addListener('beforeRun', (g) => {
57
+ g.__varslist[0].set('ナデシコ種類', 'snako');
58
+ });
59
+ // logger を設定 --- リスナーを登録することでデバッグレベルを指定
60
+ const logger = nako.getLogger();
61
+ if (opt.isDebug) {
62
+ logger.addListener('trace', (data) => {
63
+ console.log(data.nodeConsole);
64
+ });
65
+ }
66
+ logger.addListener('stdout', (data) => {
67
+ console.log(data.noColor);
68
+ });
69
+ // -e オプションを実行したとき
70
+ if (opt.evalStr) {
71
+ await nako.runAsync(opt.evalStr, 'main.nako3');
72
+ return;
73
+ }
74
+ // パラメータが空だったとき
75
+ if (opt.filename === '') {
76
+ showHelp();
77
+ return;
78
+ }
79
+ // ソースコードをファイルから読み込む
80
+ const code = fs.readFileSync(opt.filename, 'utf-8');
81
+ // -c オプションが指定されたとき
82
+ if (opt.flagConvert) {
83
+ convert(nako, code, opt);
84
+ }
85
+ // 実行
86
+ await nako.runAsync(code, opt.filename);
87
+ }
88
+ // -c オプションを指定したとき
89
+ function convert(nako, code, opt) {
90
+ // オプションを指定
91
+ const genOpt = new NakoGenOptions(false, ['nako_errors.mjs', 'nako_core_version.mjs', 'plugin_system.mjs'], '__self.__varslist[0].set(\'ナデシコ種類\', \'snako\')');
92
+ // スタンドアロンコードを生成
93
+ const js = nako.compileStandalone(code, opt.filename, genOpt);
94
+ const jsFilename = opt.filename + '.js';
95
+ fs.writeFileSync(jsFilename, js, { encoding: 'utf-8' });
96
+ // 必要なライブラリをコピー
97
+ const runtimeDir = path.join(path.dirname(jsFilename), 'nako3runtime');
98
+ const srcDir = path.join(__dirname, '..', 'src');
99
+ if (!fs.existsSync(runtimeDir)) {
100
+ fs.mkdirSync(runtimeDir);
101
+ }
102
+ for (const f of genOpt.importFiles) {
103
+ fs.copyFileSync(path.join(srcDir, f), path.join(runtimeDir, f));
104
+ }
105
+ }
106
+ /** 使い方を表示 */
107
+ function showHelp() {
108
+ console.log('●なでしこ(簡易版) # v.' + com.version.version);
109
+ console.log('[使い方] node snako.mjs [--debug|-d] (filename)');
110
+ console.log('[使い方] node snako.mjs [--eval|-e] (source)');
111
+ console.log('[使い方] node snako.mjs [-c] (source) ... convert');
112
+ }
113
+ /** メイン処理を実行 */
114
+ main(nodejs_argv);
package/core/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nadesiko3core",
3
- "version": "3.6.12",
3
+ "version": "3.6.13",
4
4
  "description": "Japanese Programming Language Nadesiko v3 core",
5
5
  "main": "index.mjs",
6
6
  "type": "module",
@@ -0,0 +1,7 @@
1
+ import core from '../index.mjs';
2
+ const main = async () => {
3
+ const com = new core.NakoCompiler();
4
+ const g = await com.runAsync('1 + 2 * 3を表示', 'main.nako3');
5
+ console.log(g.log);
6
+ };
7
+ await main();
@@ -191,11 +191,11 @@ export class NakoGen {
191
191
  varname_set(name, jsvalue) {
192
192
  if (this.varslistSet.length === 3) {
193
193
  // グローバル
194
- return `__self.__varslist[${2}].set(${JSON.stringify(name)}, ${jsvalue})`;
194
+ return `__self.__varslist[${2}].set(${JSON.stringify(name)}, (${jsvalue}))`;
195
195
  }
196
196
  else {
197
197
  // ローカル
198
- return `__self.__vars.set(${JSON.stringify(name)}, ${jsvalue})`;
198
+ return `__self.__vars.set(${JSON.stringify(name)}, (${jsvalue}))`;
199
199
  }
200
200
  }
201
201
  /**
@@ -1638,9 +1638,18 @@ export class NakoGen {
1638
1638
  if (this.speedMode.invalidSore === 0) {
1639
1639
  value = this.varname_get('それ');
1640
1640
  }
1641
+ // 値のプログラムを生成
1641
1642
  if (node.value) {
1643
+ const ast = node.value;
1644
+ if (ast.type === 'func' && ast.name !== undefined) {
1645
+ const func = this.__self.getFunc(ast.name);
1646
+ if (func && func.return_none) {
1647
+ throw NakoSyntaxError.fromNode(`関数『${ast.name}』は戻り値がないので結果を代入できません。`, node);
1648
+ }
1649
+ }
1642
1650
  value = this._convGen(node.value, true);
1643
1651
  }
1652
+ // 戻り値の検証
1644
1653
  if (value == null) {
1645
1654
  throw NakoSyntaxError.fromNode('代入する先の変数名がありません。', node);
1646
1655
  }
@@ -269,10 +269,10 @@ export class NakoGen {
269
269
  varname_set (name: string, jsvalue: string): string {
270
270
  if (this.varslistSet.length === 3) {
271
271
  // グローバル
272
- return `__self.__varslist[${2}].set(${JSON.stringify(name)}, ${jsvalue})`
272
+ return `__self.__varslist[${2}].set(${JSON.stringify(name)}, (${jsvalue}))`
273
273
  } else {
274
274
  // ローカル
275
- return `__self.__vars.set(${JSON.stringify(name)}, ${jsvalue})`
275
+ return `__self.__vars.set(${JSON.stringify(name)}, (${jsvalue}))`
276
276
  }
277
277
  }
278
278
 
@@ -1693,10 +1693,22 @@ export class NakoGen {
1693
1693
  // もし値が省略されていたら、変数「それ」に代入する
1694
1694
  let value = null
1695
1695
  if (this.speedMode.invalidSore === 0) { value = this.varname_get('それ') }
1696
- if (node.value) { value = this._convGen(node.value, true) }
1696
+ // 値のプログラムを生成
1697
+ if (node.value) {
1698
+ const ast = node.value
1699
+ if (ast.type === 'func' && ast.name !== undefined) {
1700
+ const func = this.__self.getFunc(ast.name)
1701
+ if (func && func.return_none) {
1702
+ throw NakoSyntaxError.fromNode(`関数『${ast.name}』は戻り値がないので結果を代入できません。`, node)
1703
+ }
1704
+ }
1705
+ value = this._convGen(node.value, true)
1706
+ }
1707
+ // 戻り値の検証
1697
1708
  if (value == null) {
1698
1709
  throw NakoSyntaxError.fromNode('代入する先の変数名がありません。', node)
1699
1710
  }
1711
+
1700
1712
  // 変数名
1701
1713
  const name: string = (node.name as Ast).value
1702
1714
  const res = this.findVar(name, value)
@@ -1712,7 +1724,6 @@ export class NakoGen {
1712
1724
  }
1713
1725
  code = `${res.js_set};`
1714
1726
  }
1715
-
1716
1727
  return ';' + this.convLineno(node, false) + code + '\n'
1717
1728
  }
1718
1729
 
@@ -207,4 +207,19 @@ describe('error_message', () => {
207
207
  assert.strictEqual(log, '')
208
208
  })
209
209
  })
210
+ it('戻り値のない関数を代入文の結果に使おうとする #175', async () => {
211
+ const compiler = new NakoCompiler()
212
+ const logger = compiler.getLogger()
213
+ logger.addListener('error', ({ level, noColor }) => {
214
+ const s = (noColor + '\n').split('\n')[0].replace('[エラー]', '')
215
+ assert.strictEqual(level, 'error')
216
+ assert.strictEqual(s, '[文法エラー]main.nako3(1行目): 関数『表示』は戻り値がないので結果を代入できません。')
217
+ return true
218
+ })
219
+ try {
220
+ await compiler.runAsync('A=「あ」を表示', 'main.nako3')
221
+ } catch (_) {
222
+ // pass
223
+ }
224
+ })
210
225
  })
@@ -30,14 +30,14 @@
30
30
  // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
31
31
 
32
32
  /* Modules */
33
- "module": "NodeNext", /* Specify what module code is generated. */
33
+ "module": "NodeNext", /* Specify what module code is generated. */
34
34
  // "rootDir": "./", /* Specify the root folder within your source files. */
35
- "moduleResolution": "NodeNext", /* Specify how TypeScript looks up a file from a given module specifier. */
36
- "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
35
+ "moduleResolution": "NodeNext", /* Specify how TypeScript looks up a file from a given module specifier. */
36
+ "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
37
37
  // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
38
38
  // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
39
39
  "typeRoots": ["src/@types", "node_modules/@types"], /* Specify multiple folders that act like `./node_modules/@types`. */
40
- "types": ["node", "mocha"], /* Specify type package names to be included without being referenced in a source file. */
40
+ "types": ["node"], /* Specify type package names to be included without being referenced in a source file. */
41
41
  // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
42
42
  // "resolveJsonModule": true, /* Enable importing .json files */
43
43
  // "noResolve": true, /* Disallow `import`s, `require`s or `<reference>`s from expanding the number of files TypeScript should add to a project. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nadesiko3",
3
- "version": "3.6.12",
3
+ "version": "3.6.13",
4
4
  "description": "Japanese Programming Language",
5
5
  "type": "module",
6
6
  "main": "src/index.mjs",
@@ -29,6 +29,7 @@
29
29
  "build:nako_version": "node src/cnako3.mjs batch/build_nako_version.nako3",
30
30
  "build:tsc": "tsc",
31
31
  "build": "npm run build:tsc && npm run build:nako_version && npm run build:tsc && npm run build:command && npm run build:esbuild && node src/cnako3.mjs batch/calc_hash.nako3",
32
+ "build:watch": "node bundle_esbuild.js --watch",
32
33
  "clean": "npm run build:tsc && node src/cnako3.mjs batch/clean.nako3",
33
34
  "tsc": "tsc --watch",
34
35
  "build:esbuild": "tsc && node bundle_esbuild.js",
package/release/_hash.txt CHANGED
@@ -18,11 +18,21 @@ edit_main.js:
18
18
  sha256(hex): d6a8060e3d48b1a54f2c463d5279407b4c59e0a8ca823912a52b723e7184352c
19
19
  sha256(base64): 1qgGDj1IsaVPLEY9UnlAe0xZ4KjKgjkSpStyPnGENSw=
20
20
  sha512(base64): chJSrv6X4XeV+t0MehOr1mrmsz4ZTNJUA0wfSu99I0A7EvRPX9MgR3LXeOMcTHWyuLj7htmRhCch6j0zXjTYRQ==
21
+ edit_main.js:
22
+ md5(hex): b21c330f008df8c5d9d2a63c206e2235
23
+ sha256(hex): d6a8060e3d48b1a54f2c463d5279407b4c59e0a8ca823912a52b723e7184352c
24
+ sha256(base64): 1qgGDj1IsaVPLEY9UnlAe0xZ4KjKgjkSpStyPnGENSw=
25
+ sha512(base64): chJSrv6X4XeV+t0MehOr1mrmsz4ZTNJUA0wfSu99I0A7EvRPX9MgR3LXeOMcTHWyuLj7htmRhCch6j0zXjTYRQ==
26
+ version_main.js:
27
+ md5(hex): 2d14cb91d486038e934b6afd1d275259
28
+ sha256(hex): b2c3a51c08fdbfeaf8c79676b354f519807cfc0ce8e38237bc1df7e27370bb1b
29
+ sha256(base64): ssOlHAj9v+r4x5Z2s1T1GYB8/Azo44I3vB334nNwuxs=
30
+ sha512(base64): OWs22aZ0QaDY3L3J4Be4/hWf/0iSWXuMVY1vvl6wynYrem4fe1Sh3CIclOWdQnolRzTFXHGMnBp9FUv8NcQsQA==
21
31
  editor.js:
22
- md5(hex): 02ee12ca00319afcdf21ab7d2b618ceb
23
- sha256(hex): b4333db1608d7a87a2c4f733ac5fe29d98ec3ccdc89494d8575cdd0c337b0ba7
24
- sha256(base64): tDM9sWCNeoeixPczrF/inZjsPM3IlJTYV1zdDDN7C6c=
25
- sha512(base64): 60RfvbeW58u/tKFDLZxjYlxeMCCqE2vx+zp969gt/Ed9gvyUQnNb2o8jR5ePaW253JI+WlJy2uaC2kpAqfq59A==
32
+ md5(hex): b21c330f008df8c5d9d2a63c206e2235
33
+ sha256(hex): d6a8060e3d48b1a54f2c463d5279407b4c59e0a8ca823912a52b723e7184352c
34
+ sha256(base64): 1qgGDj1IsaVPLEY9UnlAe0xZ4KjKgjkSpStyPnGENSw=
35
+ sha512(base64): chJSrv6X4XeV+t0MehOr1mrmsz4ZTNJUA0wfSu99I0A7EvRPX9MgR3LXeOMcTHWyuLj7htmRhCch6j0zXjTYRQ==
26
36
  nako_gen_async.js:
27
37
  md5(hex): 42d5fed01039474ff197d449c27c84ad
28
38
  sha256(hex): d78d516b32b551c4a51ceef529568760783c84f6c5d90029fa9b38922d5b4430
@@ -78,21 +88,76 @@ plugin_weykturtle3d.js:
78
88
  sha256(hex): e74ba47893348954dd3ea94eee8517427c9ac70395f6984ac07241245112538d
79
89
  sha256(base64): 50ukeJM0iVTdPqlO7oUXQnyaxwOV9phKwHJBJFESU40=
80
90
  sha512(base64): ONFdombPCdgdnXs7VMUAHpe8IBvTuLzSgzmERf1jEhHo4l06wDpkpRRCk3/9a1hiXRHQ+le2LZBT7XH4VA27sQ==
91
+ plugin_caniuse.js:
92
+ md5(hex): 7aa93b13b4ab775d7bc5a0fb99d4df93
93
+ sha256(hex): 3a47ea016531a8e78a13599d27a4303964ba878d9d10f36a3634645ffa159705
94
+ sha256(base64): OkfqAWUxqOeKE1mdJ6QwOWS6h42dEPNqNjRkX/oVlwU=
95
+ sha512(base64): V6nOBHnhxPChu+S/LfB7elCeBk985ukLmBmkCyPk4ai5VfoJZuOIttg72PbZSxWfP5eQTrlLNajsorfwNw/vcA==
96
+ plugin_datetime.js:
97
+ md5(hex): 90a1fcbe222cd79351faedf1c6a62c47
98
+ sha256(hex): d8c7be82e986e2d223f51b1b4202d63bc322ad575460766ec7efb22ab75b3eb4
99
+ sha256(base64): 2Me+gumG4tIj9RsbQgLWO8MirVdUYHZux++yKrdbPrQ=
100
+ sha512(base64): ofb5jVaHjjTRoCAmHnbewc2fS8vr1oEkX/B3WoOCjYpDnZ3nnl3EDz6fdAS8CFFzGvuekCk2RFN5BuM9kX6FAg==
101
+ plugin_kansuji.js:
102
+ md5(hex): 06fb701ed190ab224f60260858fccdfd
103
+ sha256(hex): a73466d59fd94e4e6fdfe54daafdff92bc7050c33488acc3f660d5534595129c
104
+ sha256(base64): pzRm1Z/ZTk5v3+VNqv3/krxwUMM0iKzD9mDVU0WVEpw=
105
+ sha512(base64): N+S8Th1yCiQy3q5jh0TFvlTOtrWNE82a4UJZ9O3ml3BGBYA141bpWlJR5c34dObTe1prbLJZ7v5WvV0vnDnr9A==
106
+ plugin_keigo.js:
107
+ md5(hex): 17c9d515a107feeb621e59e635e6d92c
108
+ sha256(hex): d4866cde44e4da71e5f74377172ab5b85afc1295a60c081f6d7c24525f403e0d
109
+ sha256(base64): 1IZs3kTk2nHl90N3Fyq1uFr8EpWmDAgfbXwkUl9APg0=
110
+ sha512(base64): u067+CeBvMb6+oINFY9Wz77GBk4NSxS2+k35GJ3RsFFmphJliwzwmV2ceID0gZ4mbjJ0xJHQX9WIypiyI6yfdA==
111
+ plugin_markup.js:
112
+ md5(hex): c67475a1be3fb260086ffb9782ce0b08
113
+ sha256(hex): 6f8edea132abefa955b8431707633a5f48dd40b04b76693245411e21c17e1ecb
114
+ sha256(base64): b47eoTKr76lVuEMXB2M6X0jdQLBLdmkyRUEeIcF+Hss=
115
+ sha512(base64): O5gWVMkfYr1neke9fSBDOa3BmSQDWUwGBh8VxPtHW2AEJYvaGyuER9lmPwOTP+WtMB/kc4K9DM/OvNsCWfvL7Q==
116
+ plugin_three.js:
117
+ md5(hex): 5fa1fba6c48576ba6046e9302b3bcf89
118
+ sha256(hex): e2b2c54d9674837d51cc91d032e3aa9f2a1cc8fbc11b6be503649a1cccfe08cb
119
+ sha256(base64): 4rLFTZZ0g31RzJHQMuOqnyocyPvBG2vlA2SaHMz+CMs=
120
+ sha512(base64): 4loRkhlxZ9A9v5t3sk5VECW7T33axIVbBQgwkNdgcjk03yRqAvxut5OS4n3BBS4jnWWHOE3i0vj9qxOOp4uV3Q==
121
+ plugin_turtle.js:
122
+ md5(hex): 544cfa3bd85bad6e968cf90250799f45
123
+ sha256(hex): 90a4a5f26ea1a362dac7fe7a272c4e167a76f749265b88961d3053f64c576209
124
+ sha256(base64): kKSl8m6ho2Lax/56JyxOFnp290kmW4iWHTBT9kxXYgk=
125
+ sha512(base64): ce8etr+HoC+UjUyXSgxJzy3+pOYhsBdt9jDzhks2H/eEPQ1gIz7M8hoeyP0223zLLZHBBzlHiL/a6mmJdoKQ+w==
126
+ plugin_webworker.js:
127
+ md5(hex): ae0adac0834f5e6032708a5c7672b817
128
+ sha256(hex): 46a0bb24c1d8f1d0652057e9348eaca1b26a857f0ffc993e9070ae683609c045
129
+ sha256(base64): RqC7JMHY8dBlIFfpNI6sobJqhX8P/Jk+kHCuaDYJwEU=
130
+ sha512(base64): 6UHX2dgMPRY4BuIxLXaERKaA8Wg5eK2pWy+OysU0/+gt2E15M7K5Vr8+4CQt6hylWnmzmJQJfgObIr+yjW5kPw==
131
+ plugin_weykturtle3d.js:
132
+ md5(hex): fb981a85ea64ff05f29fb05c99294e94
133
+ sha256(hex): e74ba47893348954dd3ea94eee8517427c9ac70395f6984ac07241245112538d
134
+ sha256(base64): 50ukeJM0iVTdPqlO7oUXQnyaxwOV9phKwHJBJFESU40=
135
+ sha512(base64): ONFdombPCdgdnXs7VMUAHpe8IBvTuLzSgzmERf1jEhHo4l06wDpkpRRCk3/9a1hiXRHQ+le2LZBT7XH4VA27sQ==
136
+ wnako3.js:
137
+ md5(hex): c75e89be9d951df1ed05e0d7d6571175
138
+ sha256(hex): a351605c360072aa2d0c109666c58b9e8e82b2efacc21390909b2c0fa4f0469b
139
+ sha256(base64): o1FgXDYAcqotDBCWZsWLno6Csu+swhOQkJssD6TwRps=
140
+ sha512(base64): OynXQRRt0dv7GIW23ZlWFVfqqXpg8ZqUDpcv8kqDiNCkRTzLW41PS9aEHdOieLI7Twwu9f6r5+4MlxvE3UYqVw==
141
+ wnako3webworker.js:
142
+ md5(hex): bca0766f8a4b9510fc4b87409e297880
143
+ sha256(hex): 9dbfbeb5f4922ab54ebedca251298c701b3c09b5ba57e6eae048ec2e2e2128ad
144
+ sha256(base64): nb++tfSSKrVOvtyiUSmMcBs8CbW6V+bq4EjsLi4hKK0=
145
+ sha512(base64): 97yLnnWQfc6SSs51PMT93W5ROTIFqO01Ox7ic2hZGlrw4dzPehJG02J99n8Iv3k6sy9m3Eg74QdACYVwIr4oSg==
81
146
  version.js:
82
- md5(hex): fc7153033fef5c2ba396c83704f8d452
83
- sha256(hex): 43b8963338c0b323cb966109c6dcdbd75d91fb6821bc160b304ca72ef902a456
84
- sha256(base64): Q7iWMzjAsyPLlmEJxtzb112R+2ghvBYLMEynLvkCpFY=
85
- sha512(base64): Xy8RMyAkohHiIXAKfISKFZTnAAHK1dLZWOV2kU15Hx/r6fpZOtHt7j4okKPgKOZoGs/BLozy8YS5nIU/Sfk/2g==
147
+ md5(hex): fadb4046dc4fc1c9fe87e6802e40a546
148
+ sha256(hex): a7607bf33d941d7d39f06688245ad96ebcdfe6925c0c057b5df71ea740e4dec1
149
+ sha256(base64): p2B78z2UHX058GaIJFrZbrzf5pJcDAV7Xfcep0Dk3sE=
150
+ sha512(base64): 5I8dZgHE9dwZN3wYyZRlTwLIjYKhwbyFHSfxJS6qysZyb+JKOrmeUsHQywYrgAfmeboMiUMboLlovx8l1IX76g==
86
151
  version_main.js:
87
152
  md5(hex): fadb4046dc4fc1c9fe87e6802e40a546
88
153
  sha256(hex): a7607bf33d941d7d39f06688245ad96ebcdfe6925c0c057b5df71ea740e4dec1
89
154
  sha256(base64): p2B78z2UHX058GaIJFrZbrzf5pJcDAV7Xfcep0Dk3sE=
90
155
  sha512(base64): 5I8dZgHE9dwZN3wYyZRlTwLIjYKhwbyFHSfxJS6qysZyb+JKOrmeUsHQywYrgAfmeboMiUMboLlovx8l1IX76g==
91
156
  wnako3.js:
92
- md5(hex): 708c077919252b07a86f745b52a75804
93
- sha256(hex): 2ff3bf73da684da5f1907e926b3d8fe4c3dc788028a9fd2c47bdebeb2570c2be
94
- sha256(base64): L/O/c9poTaXxkH6Saz2P5MPceIAoqf0sR73r6yVwwr4=
95
- sha512(base64): oNx6op64NBndIKb0lfaFerJoX+HB237R+wTkFMHNIZfACT3OBOGGwcnEJsX3IAr7A6g+AxdecuPb5SnXicfLxw==
157
+ md5(hex): 1fcbc67fb6d0b75a8db5e0e2075627d2
158
+ sha256(hex): f9d35aff98f4f59509a4f73aa92c3d69ed761f90c2f7c14b268b8b479aa069e0
159
+ sha256(base64): +dNa/5j09ZUJpPc6qSw9ae12H5DC98FLJouLR5qgaeA=
160
+ sha512(base64): 7WovIXqX2HnkOVAag2xaf1PY8Pf1wiVbQrSlY9DEyY/CrekxnwytZQposyQp8vFSXw5JHbK61J45+a1pV/pn1Q==
96
161
  wnako3webworker.js:
97
162
  md5(hex): 0fa4059c0f5f4fff126480dd7662ebd5
98
163
  sha256(hex): fc7a53d66e54e74e78b677c73feab18b99139ddaaf45fbde9e6e2aef0d9aaaeb
@@ -1,20 +1,33 @@
1
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.12&f=release/command.json.js" integrity="sha512-cM2Az1P66nPoDyzHmyJ08fgslW0MGQx9sB8ChXiywo7vqlRoqsCYi+YmVyiMHsWuEewYXPTlrMFriKaey2C9tA==" crossorigin="anonymous"></script>
2
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.12&f=release/core_src_nako_josi_list_mjs.js" integrity="sha512-0+LAeEfPy2Lrl+DeJMjbBIUda9Y5ttpLGy3/FW8rjSW8bN3udrALJa5V/bhjxU7mYouumV/QGN2wt3oxMCKy9g==" crossorigin="anonymous"></script>
3
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.12&f=release/core_src_nako_reserved_words_mjs.js" integrity="sha512-UzZigh2tIhgBO3+Sp1wnqKMvAGfhqSRdH2+ffmRy4+8CVNEeepddaDV0oKJ+vyvi28zQLmXeMsjRu+Frj3YlTg==" crossorigin="anonymous"></script>
4
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.12&f=release/edit_main.js" integrity="sha512-chJSrv6X4XeV+t0MehOr1mrmsz4ZTNJUA0wfSu99I0A7EvRPX9MgR3LXeOMcTHWyuLj7htmRhCch6j0zXjTYRQ==" crossorigin="anonymous"></script>
5
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.12&f=release/editor.js" integrity="sha512-60RfvbeW58u/tKFDLZxjYlxeMCCqE2vx+zp969gt/Ed9gvyUQnNb2o8jR5ePaW253JI+WlJy2uaC2kpAqfq59A==" crossorigin="anonymous"></script>
6
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.12&f=release/nako_gen_async.js" integrity="sha512-/73lycspxJ921s+NmqaOKF58X9rCsgEZrZT4O4sW1aCe5CSXtQevIasAoGgIoL3a5RmlaghbaIVASwAgmoE3+g==" crossorigin="anonymous"></script>
7
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.12&f=release/plugin_caniuse.js" integrity="sha512-V6nOBHnhxPChu+S/LfB7elCeBk985ukLmBmkCyPk4ai5VfoJZuOIttg72PbZSxWfP5eQTrlLNajsorfwNw/vcA==" crossorigin="anonymous"></script>
8
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.12&f=release/plugin_datetime.js" integrity="sha512-ofb5jVaHjjTRoCAmHnbewc2fS8vr1oEkX/B3WoOCjYpDnZ3nnl3EDz6fdAS8CFFzGvuekCk2RFN5BuM9kX6FAg==" crossorigin="anonymous"></script>
9
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.12&f=release/plugin_kansuji.js" integrity="sha512-N+S8Th1yCiQy3q5jh0TFvlTOtrWNE82a4UJZ9O3ml3BGBYA141bpWlJR5c34dObTe1prbLJZ7v5WvV0vnDnr9A==" crossorigin="anonymous"></script>
10
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.12&f=release/plugin_keigo.js" integrity="sha512-u067+CeBvMb6+oINFY9Wz77GBk4NSxS2+k35GJ3RsFFmphJliwzwmV2ceID0gZ4mbjJ0xJHQX9WIypiyI6yfdA==" crossorigin="anonymous"></script>
11
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.12&f=release/plugin_markup.js" integrity="sha512-O5gWVMkfYr1neke9fSBDOa3BmSQDWUwGBh8VxPtHW2AEJYvaGyuER9lmPwOTP+WtMB/kc4K9DM/OvNsCWfvL7Q==" crossorigin="anonymous"></script>
12
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.12&f=release/plugin_three.js" integrity="sha512-4loRkhlxZ9A9v5t3sk5VECW7T33axIVbBQgwkNdgcjk03yRqAvxut5OS4n3BBS4jnWWHOE3i0vj9qxOOp4uV3Q==" crossorigin="anonymous"></script>
13
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.12&f=release/plugin_toml.js" integrity="sha512-Z4JmOCY66VuyoD8m4dCzKttEbCTEUfqyuqlmcOhs69m/88skKcPYWXi+4W+Td5LdI3xqezn4BkN32F9ZkPzUpQ==" crossorigin="anonymous"></script>
14
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.12&f=release/plugin_turtle.js" integrity="sha512-ce8etr+HoC+UjUyXSgxJzy3+pOYhsBdt9jDzhks2H/eEPQ1gIz7M8hoeyP0223zLLZHBBzlHiL/a6mmJdoKQ+w==" crossorigin="anonymous"></script>
15
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.12&f=release/plugin_webworker.js" integrity="sha512-6UHX2dgMPRY4BuIxLXaERKaA8Wg5eK2pWy+OysU0/+gt2E15M7K5Vr8+4CQt6hylWnmzmJQJfgObIr+yjW5kPw==" crossorigin="anonymous"></script>
16
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.12&f=release/plugin_weykturtle3d.js" integrity="sha512-ONFdombPCdgdnXs7VMUAHpe8IBvTuLzSgzmERf1jEhHo4l06wDpkpRRCk3/9a1hiXRHQ+le2LZBT7XH4VA27sQ==" crossorigin="anonymous"></script>
17
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.12&f=release/version.js" integrity="sha512-Xy8RMyAkohHiIXAKfISKFZTnAAHK1dLZWOV2kU15Hx/r6fpZOtHt7j4okKPgKOZoGs/BLozy8YS5nIU/Sfk/2g==" crossorigin="anonymous"></script>
18
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.12&f=release/version_main.js" integrity="sha512-5I8dZgHE9dwZN3wYyZRlTwLIjYKhwbyFHSfxJS6qysZyb+JKOrmeUsHQywYrgAfmeboMiUMboLlovx8l1IX76g==" crossorigin="anonymous"></script>
19
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.12&f=release/wnako3.js" integrity="sha512-oNx6op64NBndIKb0lfaFerJoX+HB237R+wTkFMHNIZfACT3OBOGGwcnEJsX3IAr7A6g+AxdecuPb5SnXicfLxw==" crossorigin="anonymous"></script>
20
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.12&f=release/wnako3webworker.js" integrity="sha512-n6GS1iHW9cBD/5ucIxWXAnY/QaFuitBY3LSPHQpyKFHlsTpE45q9awHDch0JiyrwI3JVtroFqz/ECcQMLHNphA==" crossorigin="anonymous"></script>
1
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.13&f=release/command.json.js" integrity="sha512-cM2Az1P66nPoDyzHmyJ08fgslW0MGQx9sB8ChXiywo7vqlRoqsCYi+YmVyiMHsWuEewYXPTlrMFriKaey2C9tA==" crossorigin="anonymous"></script>
2
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.13&f=release/core_src_nako_josi_list_mjs.js" integrity="sha512-0+LAeEfPy2Lrl+DeJMjbBIUda9Y5ttpLGy3/FW8rjSW8bN3udrALJa5V/bhjxU7mYouumV/QGN2wt3oxMCKy9g==" crossorigin="anonymous"></script>
3
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.13&f=release/core_src_nako_reserved_words_mjs.js" integrity="sha512-UzZigh2tIhgBO3+Sp1wnqKMvAGfhqSRdH2+ffmRy4+8CVNEeepddaDV0oKJ+vyvi28zQLmXeMsjRu+Frj3YlTg==" crossorigin="anonymous"></script>
4
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.13&f=release/edit_main.js" integrity="sha512-chJSrv6X4XeV+t0MehOr1mrmsz4ZTNJUA0wfSu99I0A7EvRPX9MgR3LXeOMcTHWyuLj7htmRhCch6j0zXjTYRQ==" crossorigin="anonymous"></script>
5
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.13&f=release/edit_main.js" integrity="sha512-chJSrv6X4XeV+t0MehOr1mrmsz4ZTNJUA0wfSu99I0A7EvRPX9MgR3LXeOMcTHWyuLj7htmRhCch6j0zXjTYRQ==" crossorigin="anonymous"></script>
6
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.13&f=release/version_main.js" integrity="sha512-OWs22aZ0QaDY3L3J4Be4/hWf/0iSWXuMVY1vvl6wynYrem4fe1Sh3CIclOWdQnolRzTFXHGMnBp9FUv8NcQsQA==" crossorigin="anonymous"></script>
7
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.13&f=release/editor.js" integrity="sha512-chJSrv6X4XeV+t0MehOr1mrmsz4ZTNJUA0wfSu99I0A7EvRPX9MgR3LXeOMcTHWyuLj7htmRhCch6j0zXjTYRQ==" crossorigin="anonymous"></script>
8
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.13&f=release/nako_gen_async.js" integrity="sha512-/73lycspxJ921s+NmqaOKF58X9rCsgEZrZT4O4sW1aCe5CSXtQevIasAoGgIoL3a5RmlaghbaIVASwAgmoE3+g==" crossorigin="anonymous"></script>
9
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.13&f=release/plugin_caniuse.js" integrity="sha512-V6nOBHnhxPChu+S/LfB7elCeBk985ukLmBmkCyPk4ai5VfoJZuOIttg72PbZSxWfP5eQTrlLNajsorfwNw/vcA==" crossorigin="anonymous"></script>
10
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.13&f=release/plugin_datetime.js" integrity="sha512-ofb5jVaHjjTRoCAmHnbewc2fS8vr1oEkX/B3WoOCjYpDnZ3nnl3EDz6fdAS8CFFzGvuekCk2RFN5BuM9kX6FAg==" crossorigin="anonymous"></script>
11
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.13&f=release/plugin_kansuji.js" integrity="sha512-N+S8Th1yCiQy3q5jh0TFvlTOtrWNE82a4UJZ9O3ml3BGBYA141bpWlJR5c34dObTe1prbLJZ7v5WvV0vnDnr9A==" crossorigin="anonymous"></script>
12
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.13&f=release/plugin_keigo.js" integrity="sha512-u067+CeBvMb6+oINFY9Wz77GBk4NSxS2+k35GJ3RsFFmphJliwzwmV2ceID0gZ4mbjJ0xJHQX9WIypiyI6yfdA==" crossorigin="anonymous"></script>
13
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.13&f=release/plugin_markup.js" integrity="sha512-O5gWVMkfYr1neke9fSBDOa3BmSQDWUwGBh8VxPtHW2AEJYvaGyuER9lmPwOTP+WtMB/kc4K9DM/OvNsCWfvL7Q==" crossorigin="anonymous"></script>
14
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.13&f=release/plugin_three.js" integrity="sha512-4loRkhlxZ9A9v5t3sk5VECW7T33axIVbBQgwkNdgcjk03yRqAvxut5OS4n3BBS4jnWWHOE3i0vj9qxOOp4uV3Q==" crossorigin="anonymous"></script>
15
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.13&f=release/plugin_toml.js" integrity="sha512-Z4JmOCY66VuyoD8m4dCzKttEbCTEUfqyuqlmcOhs69m/88skKcPYWXi+4W+Td5LdI3xqezn4BkN32F9ZkPzUpQ==" crossorigin="anonymous"></script>
16
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.13&f=release/plugin_turtle.js" integrity="sha512-ce8etr+HoC+UjUyXSgxJzy3+pOYhsBdt9jDzhks2H/eEPQ1gIz7M8hoeyP0223zLLZHBBzlHiL/a6mmJdoKQ+w==" crossorigin="anonymous"></script>
17
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.13&f=release/plugin_webworker.js" integrity="sha512-6UHX2dgMPRY4BuIxLXaERKaA8Wg5eK2pWy+OysU0/+gt2E15M7K5Vr8+4CQt6hylWnmzmJQJfgObIr+yjW5kPw==" crossorigin="anonymous"></script>
18
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.13&f=release/plugin_weykturtle3d.js" integrity="sha512-ONFdombPCdgdnXs7VMUAHpe8IBvTuLzSgzmERf1jEhHo4l06wDpkpRRCk3/9a1hiXRHQ+le2LZBT7XH4VA27sQ==" crossorigin="anonymous"></script>
19
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.13&f=release/plugin_caniuse.js" integrity="sha512-V6nOBHnhxPChu+S/LfB7elCeBk985ukLmBmkCyPk4ai5VfoJZuOIttg72PbZSxWfP5eQTrlLNajsorfwNw/vcA==" crossorigin="anonymous"></script>
20
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.13&f=release/plugin_datetime.js" integrity="sha512-ofb5jVaHjjTRoCAmHnbewc2fS8vr1oEkX/B3WoOCjYpDnZ3nnl3EDz6fdAS8CFFzGvuekCk2RFN5BuM9kX6FAg==" crossorigin="anonymous"></script>
21
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.13&f=release/plugin_kansuji.js" integrity="sha512-N+S8Th1yCiQy3q5jh0TFvlTOtrWNE82a4UJZ9O3ml3BGBYA141bpWlJR5c34dObTe1prbLJZ7v5WvV0vnDnr9A==" crossorigin="anonymous"></script>
22
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.13&f=release/plugin_keigo.js" integrity="sha512-u067+CeBvMb6+oINFY9Wz77GBk4NSxS2+k35GJ3RsFFmphJliwzwmV2ceID0gZ4mbjJ0xJHQX9WIypiyI6yfdA==" crossorigin="anonymous"></script>
23
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.13&f=release/plugin_markup.js" integrity="sha512-O5gWVMkfYr1neke9fSBDOa3BmSQDWUwGBh8VxPtHW2AEJYvaGyuER9lmPwOTP+WtMB/kc4K9DM/OvNsCWfvL7Q==" crossorigin="anonymous"></script>
24
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.13&f=release/plugin_three.js" integrity="sha512-4loRkhlxZ9A9v5t3sk5VECW7T33axIVbBQgwkNdgcjk03yRqAvxut5OS4n3BBS4jnWWHOE3i0vj9qxOOp4uV3Q==" crossorigin="anonymous"></script>
25
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.13&f=release/plugin_turtle.js" integrity="sha512-ce8etr+HoC+UjUyXSgxJzy3+pOYhsBdt9jDzhks2H/eEPQ1gIz7M8hoeyP0223zLLZHBBzlHiL/a6mmJdoKQ+w==" crossorigin="anonymous"></script>
26
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.13&f=release/plugin_webworker.js" integrity="sha512-6UHX2dgMPRY4BuIxLXaERKaA8Wg5eK2pWy+OysU0/+gt2E15M7K5Vr8+4CQt6hylWnmzmJQJfgObIr+yjW5kPw==" crossorigin="anonymous"></script>
27
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.13&f=release/plugin_weykturtle3d.js" integrity="sha512-ONFdombPCdgdnXs7VMUAHpe8IBvTuLzSgzmERf1jEhHo4l06wDpkpRRCk3/9a1hiXRHQ+le2LZBT7XH4VA27sQ==" crossorigin="anonymous"></script>
28
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.13&f=release/wnako3.js" integrity="sha512-OynXQRRt0dv7GIW23ZlWFVfqqXpg8ZqUDpcv8kqDiNCkRTzLW41PS9aEHdOieLI7Twwu9f6r5+4MlxvE3UYqVw==" crossorigin="anonymous"></script>
29
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.13&f=release/wnako3webworker.js" integrity="sha512-97yLnnWQfc6SSs51PMT93W5ROTIFqO01Ox7ic2hZGlrw4dzPehJG02J99n8Iv3k6sy9m3Eg74QdACYVwIr4oSg==" crossorigin="anonymous"></script>
30
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.13&f=release/version.js" integrity="sha512-5I8dZgHE9dwZN3wYyZRlTwLIjYKhwbyFHSfxJS6qysZyb+JKOrmeUsHQywYrgAfmeboMiUMboLlovx8l1IX76g==" crossorigin="anonymous"></script>
31
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.13&f=release/version_main.js" integrity="sha512-5I8dZgHE9dwZN3wYyZRlTwLIjYKhwbyFHSfxJS6qysZyb+JKOrmeUsHQywYrgAfmeboMiUMboLlovx8l1IX76g==" crossorigin="anonymous"></script>
32
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.13&f=release/wnako3.js" integrity="sha512-7WovIXqX2HnkOVAag2xaf1PY8Pf1wiVbQrSlY9DEyY/CrekxnwytZQposyQp8vFSXw5JHbK61J45+a1pV/pn1Q==" crossorigin="anonymous"></script>
33
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.13&f=release/wnako3webworker.js" integrity="sha512-n6GS1iHW9cBD/5ucIxWXAnY/QaFuitBY3LSPHQpyKFHlsTpE45q9awHDch0JiyrwI3JVtroFqz/ECcQMLHNphA==" crossorigin="anonymous"></script>