From 01281f411e696a83ce2ac7eef00a971bbcbdae70 Mon Sep 17 00:00:00 2001 From: ma91n Date: Thu, 5 Dec 2024 10:25:44 +0900 Subject: [PATCH] TS2024 --- ...45\205\250\346\224\273\347\225\2452024.md" | 505 ++++++++++++++++++ source/images/20241205a/thumbnail.png | Bin 0 -> 10257 bytes ...3\203\224\343\203\274.png:Zone.Identifier" | 0 source/images/20241205a/ts2024.png | Bin 0 -> 40412 bytes 4 files changed, 505 insertions(+) create mode 100644 "source/_posts/20241205a_TypeScript\357\274\217JavaScript_Array\345\256\214\345\205\250\346\224\273\347\225\2452024.md" create mode 100644 source/images/20241205a/thumbnail.png create mode 100644 "source/images/20241205a/ts2024 - \343\202\263\343\203\224\343\203\274.png:Zone.Identifier" create mode 100644 source/images/20241205a/ts2024.png diff --git "a/source/_posts/20241205a_TypeScript\357\274\217JavaScript_Array\345\256\214\345\205\250\346\224\273\347\225\2452024.md" "b/source/_posts/20241205a_TypeScript\357\274\217JavaScript_Array\345\256\214\345\205\250\346\224\273\347\225\2452024.md" new file mode 100644 index 000000000000..c10f3aa904d2 --- /dev/null +++ "b/source/_posts/20241205a_TypeScript\357\274\217JavaScript_Array\345\256\214\345\205\250\346\224\273\347\225\2452024.md" @@ -0,0 +1,505 @@ +--- +title: "TypeScript/JavaScript Array完全攻略2024" +date: 2024/12/05 00:00:00 +postid: a +tag: + - TypeScript + - JavaSCript +category: + - Programming +thumbnail: /images/20241205a/thumbnail.png +author: 澁川喜規 +lede: "イマドキのJavaScriptの書き方2018]というのを以前書いたのだけど、配列周りはかなり変わっているな、というのを思ったので、そこの部分だけアップデートするつもりで書いてみました。" +--- + + + + +[TypeScriptアドベントカレンダー](https://qiita.com/advent-calendar/2024/typescript)の12/5のエントリーです。昨日は@nanasi-1さんの[【TypeScript】ジェネレーターによる遅延評価でフィボナッチ数列を生成する](https://zenn.dev/nanasi_1/articles/22696e18f3a2f9)でした。 + +[イマドキのJavaScriptの書き方2018](https://qiita.com/shibukawa/items/19ab5c381bbb2e09d0d9)というのを以前書いたのだけど、配列周りはかなり変わっているな、というのを思ったので、そこの部分だけアップデートするつもりで書いてみました。 + +実環境で使えるECMAScriptバージョン +============================= + +今時のブラウザは常に最新に更新されるはずなのでECMAScript 2024の機能もフルに使えるはずですが、おそらくNode.jsのLTSが一番古いJavaScriptエンジンということになるのかな、と思います。本記事執筆時点でサポート中のバージョンは以下の4つです。軽くメソッドを調べたりした感じ、こんな感じかと。202x年の11月ぐらいになると、ES202xがLTSバージョンで使えるようになって・・・というサイクルのようですね。DenoとBunはよくわかりません。 + +| Nodeバージョン | ESバージョン | アクティブ | メンテナンス | +|:-|:-:|:-|:-| +| 18.20.5(Maintenance) | 2022相当 | 終了 | 2025/4/30まで | +| 20.18.1(Maintenance) | 2023相当 | 終了 | 2026/4/30まで | +| 22.11.0(LTS) | 2024相当 | 2025/10/21まで | 2027/4/30まで | +| 23.3.0(Current) | 2024相当 |2025/3/31まで | 2025/6/1まで | + +VSCodeでコードを修正する場合、ES2023とか2024のメソッドを使おうとすると ``lib`` を上げろと言ってきますが、実際に使えるECMAScriptバージョンにあわせて、tsconfig.jsonのtargetを上げてしまう方が良いかと思います。 + +```shell +npx -p typescript tsc --init +``` + +```json tsconfig.json +{ + "compilerOptions": { + "target": "es2023" + } +} +``` + +MDNを見ると、Widely Availableは2.5年前のバージョン基準ということで、今だとECMAScript 2022以前、という感じですかね。 + +* https://developer.mozilla.org/en-US/docs/Glossary/Baseline/Compatibility + +配列の作成 +=========================== + +新規で作る +------------------ + +``Array.of()`` というクラスメソッドはありますが、指定した要素を持つ配列はリテラルで作れば良いかなと思います。 + +```ts +// リテラルで配列を作成 +const array1 = [1, 2, 3]; + +// 空の場合は型指定必須 +const array2: string[] = []; // なるべくこちら推奨 +const array3 = [] as string[]; // 式として書かないといけない場合は右辺に +``` + +既存のデータ構造からコピーして作る +------------------------------------- + +旧来の書き方だと`slice()`を使って行っていたと思いますが、旧来のメソッドはインプレースの変更なのか新規作成なのかが分かりにくいため、見た目で新しいオブジェクトを作成していることが明確なスプレッド構文が良いかと思います。 + +```ts 古い書き方 +// 旧: slice利用 +var copied1 = original.slice(0); +``` + +```ts 新しい書き方 +// 新: 浅いコピーはスプレッド構文 +const copeid2 = [...original]; + +// 新: Map, Setなどのイテレータ対応オブジェクトはfrom利用 +const copied3 = Array.from(map); +``` + +ECMAScriptではないのですが、Node.jsでも使える `structuredClone()` 関数を使うと、深いコピーができます。サポートが遅れていたSafariでも2022/10には使えるようになったので、現時点で全ての環境で使えると判断しても良いでしょう。 + +```ts 新しい書き方 +// 新: 深いコピーはstructuredClone +const copied3 = structuredClone(original); +``` + +プログラマブルに配列を作る +-------------------------------- + +プログラマブルに「全部0で初期化された配列を作る」ということを行いたい、ということがあるかと思います。 + +長さ指定で配列を作る場合は ``Array(n)`` で作れますが、これだと配列の中身が ``undefined`` になります。その後初期化が必要なため、疎な配列を作りたい場合以外は使わない方が良いでしょう。 + +```ts 古い書き方 +// 旧: Array(n)を利用。作成後にループで初期化、mapで初期化 +var array1 = Array(20); +for (var i = 0; i < array.length; i++) { + array1[i] = 10; +} +``` + +ECMAScript 2015の`Array.from()`はイテレータ対応のオブジェクト以外に`length`を持つオブジェクトが使えて、2つ目に`map()`と同じ変換関数を持てるので、これを使って任意の数を設定できます。`map()`と同じなので2つめにインデックスが渡されるのでインデックスごとに値を変えたい場合も対応可能です。 + +```ts 新しい書き方 +// 新: Array(n)を利用。作成後にループで初期化、mapで初期化 +const array2 = Array.from({ length: 20 }, () => 10); +``` + +ループ +============== + +ループの書き方は3種類あります。一番使うことになるのが ``for ... of`` ループです。3つ紹介するなかでは最後発で、2015年のECMAScript6で導入されました。この構文は``Array``、``Set``、``Map``、``String``などの繰り返し可能(iterable)オブジェクトに対してループします。配列の場合で、インデックス値が欲しい場合は、``entries()``メソッドを使います。 + +```ts まず最初に使うべきループ +const iterable = ["小金井", "小淵沢", "小矢部"]; + +// for ofループ +// 要素のみ欲しいときは for (const value of iterable) +for (const value of iterable) { + console.log(value); +} + +// for ofループで配列のインデックスが欲しい +for (const [i, value] of iterable.entries()) { + console.log(i, value); +} +``` + +こちらは関数呼び出しを伴わないフラットなコードなので、`async/await`とも一緒に使えます。配列の要素を引数にして、1つずつ`await`したい場合などです。 + +```ts asyncと新しいループ +const iterable = [10, 20, 30]; + +for (const value of iterable) { + await doSomething(value); +} +``` + +2つ目に紹介するのはループ変数が必要となる、最初期からあるC言語由来のループです。順番に配列の最後までループする用途であれば、(2重ループとかで)変数名を間違えて意図せずループが終わったり、無限ループになるリスクがあるため、前述の ``for ... of`` がおすすめです。 + +このループが活躍するのは、アルゴリズムの実装で、ループ変数の開始位置や終了位置が先頭や末尾以外にする必要があるケースなどです。次のコードは、重複を効率よく探すために、 ``i`` と ``j`` の組が重複しないようにループ範囲を調整しています。 + +```ts ループ変数を使うループ +const iterable = ["中野駅", "中村屋", "中尊寺", "中央線", "中野駅"]; + +// C言語由来のループ +for (let i = 0; i < iterable.length; i++) { + var value = iterable[i]; + console.log(value); +} + +// スタート、終了位置が特殊なケース +for (let i = 0; i < iterable.length - 1; i++) { + for (let j = i + 1; j < iterable.length; j++) { + if (iterable[i] === iterable[j]) { + console.log(`重複: ${iterable[i]} (${i}, ${j})`); + } + } +} +``` + +2009年のECMAScript5で追加された``forEach()``もあります。関数型主義的なスタイルで統一するために、`for`を禁止して`forEach()`のみを使うというコーディング標準を規定している会社(Airbnb)も10年ぐらい前に話題になりましたが、積極的に使う理由はないでしょう。 + +```ts ES5の書き方 +const iterable = ["大判焼", "大納言", "大所帯"]; + +// forEach()ループ +iterable.forEach(value => { + console.log(value); +}); +``` + +速度の面で言えば、旧来の ``for`` ループが最速です。 ``for ... of`` や ``forEach()`` は、ループ1周ごとに関数呼び出しが挟まるため、実行コストが多少上乗せされますが、ゲームの座標計算で1フレームごとに数万要素のループを回さなければならない、といったケース以外ではほぼ気にする必要はないでしょうし、特に ``for ... of`` の場合は処理系が最適化を行ってくれているため、パフォーマンス低下は少ないです。 + +[軽く検証](https://www.measurethat.net/Benchmarks/Show/32857/0/foreach-vs-for-len-vs-for-in-vs-for-of-fix)したところ、最速の`for`と比べてChromeで`for...of`の処理時間が20%増し、`forEach()`が135%増しでした。Safariだと、Chromeで`for...of`が110%増し、`forEach()`が460%増しぐらい。`forEach()`はもう忘れましょう。 + +配列のデータ取得 +=========================== + +1要素の取得 +-------------------- + +データの取得方法も選択肢がいくつか増えています。前からn番目の要素取得に関しては変わりませんが、末尾からの取得については、ECMAScriptで2022で追加された `at()` メソッドが便利です。正の値を使う場合は動作はインデックスアクセスと変わりませんが、負の数を与えると末尾からのインデックスで値が取得できます。 + +```ts 今でも有効な書き方 +// 共: 1要素の取得(前からのインデックス) +const v = array[10]; +``` + +```ts 古い書き方 +// 旧: 末尾の要素の取得 +var last = array[array.length - 1]; +``` + +```ts 新しい書き方 +// 新: 末尾の要素の取得 +const last = array.at(-1); +``` + +複数要素の取得 +-------------------- + +複数の要素を取り出す場合は今までは1つずつ取り出していたと思います。また、残りの部分をまとめて取り出すときは`slice()`で取り出します。 +もし配列が短い場合にデフォルト値を与えたい場合はORの演算子 `||` を使うことが多いでしょう。ただし、0とかfalsyな値に真面目に対応しようとするともうちょっとがんばらないといけないのですが。 + +```ts 古い書き方 +// 旧: 末尾の要素の取得 +var a = array[0]; +var b = array[1]; +var c = array[2] || 10; // デフォルト値 + +// 旧: 残りの部分をまとめて配列にするにはslice() +var rest = array.slice(3); +``` + +ECMAScript 2015から導入された分割代入では複数要素をまとめて取り出せます。ECMAScript 2018から導入された残りプロパティ(`...`)を使うと、残りを全てまとめて取得、というのもできます。 + +```ts 新しい書き方 +// 新: 要素をまとめて取得。デフォルト値も指定可能。 +const [a, b, c = 10] = array; + +// 新: 末尾の要素と残りをまとめて取得 +const [a, b, c, ...rest] = array; + +// 新: いくつか読み飛ばしつつ抜き出し +const [, , , ...rest] = array; +``` + +ただし、まとめて取得する場合のスタート位置が状況によって変わる場合は以前の通り、`slice()`を使うことになるでしょう。 + +配列の変更 +=========================== + +ウェブフロントエンドの状態管理だと、配列の変更を行う場合には、インプレースで値を変更するのではなく、新しいオブジェクトを作って返す、ということが行われます。Reactが差分検知でそれを期待しており、Reduxとかもそれに従っていました。Redux Toolkitの裏で使われているimmer.jsみたいに、インプレースの変更をもとにイミュータブルに新しいオブジェクトを作ってくれるライブラリもあるにはありますが、本体にもイミュータブルスタイルのメソッド追加が頻繁に行われています。 + +どちらが新か旧かというのはなく、用途次第だと思うので、破壊的な方法と、イミュータブルの方法を並べて紹介します。 + +先頭・末尾の要素の追加 +------------------- + +末尾に追加するのは`push()`メソッドが昔からある方法です。 + +```ts 破壊的な方法 +const a = [1, 2, 3, 4, 5]; + +a.push(6); // 末尾に追加 +a.push(7, 8); // あまり知られてないけど2つ同時に追加もできる。 +a.unshift(0); // 先頭に追加 +``` + +スプレッド構文を使うと、メソッド名と役割を覚えずに、リテラル上の位置のまま挿入できて、見た目もわかりやすいでしょう。 + +```ts イミュータブルな方法 +const a = [1, 2, 3, 4, 5]; + +const newA = [...a, 6, 7]; // こちらも任意の数を追加できる +const newA2 = [0, ...a]; // 先頭にも追加できる +``` + +先頭・末尾の要素の削除 +------------------------ + +先頭・末尾の要素の削除は`pop()`と`shift()`を使います。 + +```ts 破壊的な方法 +const a = [1, 2, 3, 4, 5]; + +a.pop(); // 末尾の要素の削除 +a.length--; // これでも可能 +a.shift(); // 先頭の要素の削除 +``` + +先頭の要素の削除はスプレッド構文を使えばできますが、末尾の要素の削除はスプレッド構文ではできません。`slice()`を使って、現在よりも1小さい長さを指定してコピーする方法しかないでしょう。 + +```ts イミュータブルな方法 +const a = [1, 2, 3, 4, 5]; + +// 末尾の要素の削除 +const newA = a.slice(0, a.length - 1); +// 先頭の要素の削除 +const [, ...newA2] = a; // 読み飛ばしたい数だけカンマを前におく +``` + +要素の変更 +------------------- + +これは一番シンプルな最初に覚える書き方ですね。 + +```ts 破壊的な方法 +const a = [1, 2, 3, 4, 5]; +a[1] = 4; +``` + +こちらはECMAScript 2023の新顔の`with()`メソッドです。 + +```ts イミュータブルな方法 +const newA = a.with(1, 4); +``` + +配列の結合 +------------------- + +`push()`は複数要素対応できるため、スプレッド構文を使えば破壊的な変更は難しくないでしょう。一昔前は`b.push.apply(b, c)`みたいなコードを書いていた気がしますが、それは忘れましょう。 + +```ts 破壊的な方法 +const a = [1, 2, 3]; +const b = [4, 5, 6]; + +a.push(...b); +``` + +昔からある`concat()`メソッドは新しい配列も作りますが、スプレッド構文1つで配列結合もできるのでこちらだけ覚えておけば良いでしょう。昔のメソッドは破壊的なのかそうじゃないのかが名前だけでは分からない欠点があります。 + +```ts イミュータブルな方法 +const a = [1, 2, 3]; +const b = [4, 5, 6]; + +const newA1 = [...a, ...b]; // スプレッド構文で結合も可能 +const newA2 = a.concat(b); // 昔からあるこちらもイミュータブル +``` + +途中への要素/配列の挿入・削除 +----------------------------- + +昔のJavaScriptには「これが使いこなせれば初級脱出」という`splice()`というメソッドがありました。1つめの引数に処理を開始したい要素のインデックス、2つ目に削除したい要素の数、3つ目以降に挿入したい要素(複数可)というものです。これを使うと、任意の箇所に要素を挿入できます。 + +2つめの引数を1以上にすると削除します。 + +```ts 破壊的な方法 +const a = [1, 2, 3]; +const b = [4, 5, 6]; + +a.splice(2, 0, 3.5); // 2と3の間に3.5を挿入 +a.splice(1, 0, ...b); // 1と2の間にbの要素を挿入 +a.splice(1, 1); // 2番目の要素を1つ削除 +``` + +これはスプレッド構文だけではやや難しかったのですが、ECMAScript 2023では`slice()`のイミュータブルバージョンが追加されました。 + +```ts イミュータブルな方法 +const a = [1, 2, 3]; +const b = [4, 5, 6]; + +const newA = a.toSpliced(2, 0, 3.5); // 2と3の間に3.5を挿入 +const newA2 = newA.toSpliced(1, 0, ...b); // 1と2の間にbの要素を挿入 +const newA3 = newA2.toSpliced(1, 1); // 2番目の要素を1つ削除 +``` + +ソート・反転 +------------------------ + +ミュータブルなソートや反転はおなじみの`sort()`や`reverse()`を使います。 + +```ts 破壊的な方法 +const arr = [1, 5, 8, 3, 6, 2]; +arr.sort((a, b) => b - a); // ソート +arr.reverse(); // 反転 +``` + +`splice()`に対する`toSpliced()`みたいに、ECMAScript 2023で`sort()`に対する`toSorted()`と`reverse()`に対する`toReversed()`が追加されました。 + +```ts イミュータブルな方法 +const arr = [1, 5, 8, 3, 6, 2]; +const arr2 = arr.toSroted((a, b) => b - a); // ソート +const arr3 = arr2.toReversed(); // 反転 +``` + +Pythonは昔から`sorted()`とか`reversed()`という関数を提供していましたが、「ソート済みかどうか」の判定関数にも見えてしまう名前なのでこちらの方が良いですね。 + +ネストを解消 +---------------------- + +`flat()`は配列の中に配列がある場合に、それを平坦にならします。デフォルトでは配列の中の配列までが対象ですが、パラメータの数値で、何段まで探索するかが変わります。これはイミュータブルなメソッドです。 + +```ts +const arr = [0, 1, [2, [3, 4, 5]]]; // 3層の配列 + +console.log(arr.flat()); // デフォルトでは1階層目の配列を展開 +// [0, 1, 2, [3, 4, 5]] +console.log(arr.flat(2)); // 数値を大きくすれば1次元配列に +// [0, 1, 2, 3, 4, 5] +``` + +リスト処理 +==================== + +フロントエンドで関数型スタイルのコーディング技法として広まっているが関数型由来のリスト処理です。昔からあって一番有名なのが`map`/`filter`/`reduce`ですが、他にもいくつかあります。 + +1つだけだと`for...of`を使うのとあまり変わりませんが、メソッドチェーンで複数接続すると、小さい関数で期待する結果を得る、関数型スタイルの処理になります。 + +残念ながら、これらはリストのメソッドであり、DOMのAPIにいくつかある「リストっぽいけどリストじゃない」オブジェクトでは使えなかったりします。今ステージ2の[パイプライン演算子](https://github.com/tc39/proposal-pipeline-operator)が入ることになれば、これらのメソッドも純粋な関数に再定義されて、すべてのイテレーション対応オブジェクトで使えるようになるんじゃないかと期待しています。このリスト処理だと同期処理しか対応できないのですが、それもこのパイプライン演算子が入れば解決の見込みです。 + +```ts +const result = input + |> validation(%) // 他の言語とは違い、%が前の関数の返り値みたい + |> normalize(%) + |> sanitize(%); +``` + +リスト→リスト変換 +---------------------- + +リストからリストを返すメソッド群が以下の3つです。 + +* ``map(変換処理)``: ループの要素ごとに変換処理の関数を呼び出し、その結果で新しい配列を作って返す +* ``filter(判定処理)``: ループの要素ごとに判定処理の関数を呼び出し、真の値を返すもののみの新しい配列を作って返す +* ``flatMap(変換関数)``: ループの要素ごとに変換処理の関数を呼び出し、その結果を ``flat()`` した新しい配列を作って返す + +これらを結合すると柔軟な処理が可能ですが、可能であれば`filter()`で要素を減らす処理を先に行うと、トータルのループの回数が減るため、処理が高速化されます。 + +Reactの仮想DOM構築では、通常はすべて1つの式の中でDOMを作ります。そうなるとif/forが使えません。ifの代わりに三項演算子、`for`の代わりに`map`がよく使われます。 + +```ts リスト→リスト処理 +const items = [ + { name: "りんご", price: 100, category: "果物" }, + { name: "バナナ", price: 50, category: "果物" }, + { name: "オレンジ", price: 80, category: "果物" }, + { name: "牛乳", price: 150, category: "乳製品" }, +]; + +// 税金を加算したリストを作る +const itemsWithTax = items.map(({name, price, category}) => { + return {name, price: price * 1.1, category}; +}); +// [ +// { name: "りんご", price: 110.00000000000001, category: "果物" }, +// { name: "バナナ", price: 55.00000000000001, category: "果物" }, +// { name: "オレンジ", price: 88, category: "果物" }, +// { name: "牛乳", price: 165, category: "乳製品" } +// ] + +// 値段が100以上の商品を抽出する +const cheapItems = items.filter(item => item.price < 100); +// [ +// { name: "バナナ", price: 50, category: "果物" }, +// { name: "オレンジ", price: 80, category: "果物" } +// ] +``` + +`flatMap()`は`map()`と`flat()`をくっつけたものです。ただし、配列を返すとそれを展開する点が異なります。くっつけたことにより、`map()`よりも柔軟です。 + +次のサンプルのように、定数を返すだけなら`map()`互換ですが、空配列を返すとその要素は消滅します。また、配列を返すことで、1要素から複数の要素を生み出せます。ただし、配列そのものを要素にしたい場合は2重配列にする必要があります。 + +```ts +const a = [1, 2, 3, 4]; +const result = a.flatMap(i => { + if (i === 1) return []; // 空配列を返すと削除 + if (i === 2) return 2; // 配列以外を返すとmapと同じくそのまま結果に入る + if (i === 3) return [3, 3, 3]; // 配列を返すと展開される + if (i === 4) return [[4, 4, 4, 4]]; // 配列そのものを要素にしたい場合は2重配列にする +}); +console.log(result); +// => [2, 3, 3, 3, [4, 4, 4, 4]] +``` + +1つの要素を返す +----------------------- + +* ``reduce(結合処理[, 初期値])``: 要素の配列ごとに結合処理を行い、最終的に1つの値にして返す +* ``some(判定処理)``: 要素の1つでも判定処理関数が真の値を返せば ``true`` を返す +* ``every(判定処理)``: すべての要素に対して判定処理関数が真の値を返せば ``true`` を返す + +```ts リスト→1つの要素 +const items = [ + { name: "りんご", price: 100, category: "果物" }, + { name: "バナナ", price: 50, category: "果物" }, + { name: "オレンジ", price: 80, category: "果物" }, + { name: "牛乳", price: 150, category: "乳製品" }, +]; + +// 合計値 +const totalPrice = items.reduce((acc, {price}) => acc + price, 0); +// => 380 + +// 果物が含まれる? +items.some(({ category }) => category === "果物"); +// => true + +// すべての商品が果物? +items.every(({ category }) => category === "果物"); +// => false +``` + +`reduce()`の結合処理は前の処理結果が1つめの引数に渡され2つ目に配列の要素が入ります。これを要素数分繰り返します。初期値を省略すると2つ目の要素から処理され、最初の要素は前の処理の結果として渡されます。上記の処理は4回呼ばれます。最後の結果が関数の結果となります。 + +* `(0, { price: 100 })` => 100 +* `(100, { price: 50 })` => 150 +* `(150, { price: 80 })` => 230 +* `(230, { price: 150 })` => 380 + +`some()`は条件似合うものが1つでもあればすぐにループを終えるので、`every()`はすべての要素を探索するので、not条件を検証したい場合は、`some()`で代替できないかは検討してみると良いでしょう。 + +まとめ +============= + +以前の配列は破壊的操作と、イミュータブルな操作が混ざっていてわかりにくかったのですが、関数型スタイルブームに合わせてか、イミュータブルな処理が増えました。リファレンスを見ても、その辺りの区別がつきにくいと思われるため整理のためにまとめてみました。 + +リスト処理、`toXXXed()`メソッドの追加と`with()`メソッド、`flat()`メソッド、スプレッド構文を中心に使えばイミュータブルなデータ加工はだいぶ思いのままにできそうだな、ということがわかりました。 diff --git a/source/images/20241205a/thumbnail.png b/source/images/20241205a/thumbnail.png new file mode 100644 index 0000000000000000000000000000000000000000..a1431ca7f7b6e57281b8a41de0450b99504aa95e GIT binary patch literal 10257 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 BVO9VD literal 0 HcmV?d00001 diff --git "a/source/images/20241205a/ts2024 - \343\202\263\343\203\224\343\203\274.png:Zone.Identifier" "b/source/images/20241205a/ts2024 - \343\202\263\343\203\224\343\203\274.png:Zone.Identifier" new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/source/images/20241205a/ts2024.png b/source/images/20241205a/ts2024.png new file mode 100644 index 0000000000000000000000000000000000000000..8e5c4d179b1950748c7e318e1250c4ec3a06de7d GIT binary patch literal 40412 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 literal 0 HcmV?d00001