íì ì€í¬ëŠœížë¥Œ íì©íì¬ íì ìì ì±ìŽ ë°ìŽë ì 겜ë§ì 구ì¶íë ë°©ë²ì ìì볎ìžì. ì ì íìŽíìŽ ë¥ë¬ë íë¡ì ížì ì 뢰ì±, ì ì§ë³Žìì± í¥ì ë° ì€ë¥ ê°ìì ìŽë»ê² êž°ì¬íëì§ íìµí©ëë€.
TypeScript ë¥ë¬ë: ì ê²œë§ íì ìì ì±
ë¥ë¬ëì í¬ì€ìŒìŽë¶í° êžìµì ìŽë¥Žêž°ê¹ì§ ë€ìí ì°ì ì íëª ì ìŒìŒí€ê³ ììŒë©°, ìŽë¬í ì§ë¥í ìì€í ì 구ì¶íë ë° ì¬ì©íë ë구ë ëìììŽ ì§ííê³ ììµëë€. íìŽì¬ìŽ ì íµì ìŒë¡ ë¥ë¬ë ë¶ìŒë¥Œ ì§ë°°íŽìì§ë§, íì ì€í¬ëŠœížë ê²¬ê³ ì±, ì ì§ë³Žìì± ë° íë¡ ížìë íµí©ì ê°ì¡°íë íë¡ì ížìì í¹í ë§€ë ¥ì ìž ëììŒë¡ ë¶ìíê³ ììµëë€. ìŽ êžì ì ê²œë§ êµ¬ì¶ì íì ì€í¬ëŠœížë¥Œ ì¬ì©íë ìŽì ì í구íë©°, íì ì€í¬ëŠœížì ì ì íìŽí ìì€í ìŽ ìœë íì§ì í¬ê² í¥ììí€ê³ ì€ë¥ë¥Œ ì€ìŽë ë°©ë²ì ìŽì ì ë§ì¶¥ëë€.
ë¥ë¬ëì íì ì€í¬ëŠœížë¥Œ ì¬ì©íë ìŽì ?
ìë°ì€í¬ëŠœížì ìì ì§í©ìž íì ì€í¬ëŠœížë ìžìŽì ì ì íìŽíì ì¶ê°í©ëë€. ìŽë ë³ì, íšì ë§€ê°ë³ì ë° ë°í ê°ì íì ì ì ìí ì ììì ì믞íë©°, íì ì€í¬ëŠœíž ì»ŽíìŒë¬ê° ë°íììŽ ìë ê°ë° ì€ì íì êŽë š ì€ë¥ë¥Œ ì°ŸìëŒ ì ìëë¡ í©ëë€. ìŽ êž°ë¥ì ë³µì¡í ë°ìŽí° 구조ì ìì¹ ê³ì°ìŽ ìŒë°ì ìž ë¥ë¬ëìì í¹í ì ì©í©ëë€.
ë¥ë¬ëìì íì ì€í¬ëŠœížì 죌ì ì¥ì :
- í¥ìë ìœë ì 뢰ì±: ì ì íìŽíì ê°ë° íë¡ìžì€ ìŽêž°ì ì€ë¥ë¥Œ í¬ì°©íì¬ ë°íì ì¶©ë ë° ìêž°ì¹ ìì ëìì ìíì ì€ì ëë€. ìŽë ëê·ëªš ë°ìŽí°ì 곌 ë³µì¡í 몚ëžì í¬íšíë ë¥ë¬ë ì í늬ìŒìŽì ì íìì ì ëë€.
- í¥ìë ì ì§ë³Žìì±: íì 죌ìì í¹í ì¬ë¬ êž°ì¬ìê° ìë ëê·ëªš íë¡ì ížìì ìœë륌 ìŽíŽíê³ ì ì§ êŽëЬíêž° ìœê² ë§ëëë€. ëª íí íì ì ìë 묞ì ìí ì íì¬ ìœëì ëíŽ ì¶ë¡ íê³ ì€ë¥ë¥Œ ë°ììí€ì§ ìê³ ë³ê²œíë ê²ì ë ìœê² í©ëë€.
- ë ëì íŽë§ ì§ì: íì ì€í¬ëŠœížë Visual Studio Codeì ê°ì ìžêž° IDEìì ìë ìì±, íì ê²ì¬ ë° ëŠ¬í©í ë§ êž°ë¥ê³Œ ê°ì ë°ìŽë íŽë§ ì§ìì ìŽì ì ë늜ëë€. ìŽë ê°ë°ì ìì°ì±ì í¬ê² í¥ììí€ê³ ëë²ê¹ ì ììëë ìê°ì ì€ìŒ ì ììµëë€.
- ìíí íë¡ ížìë íµí©: íì ì€í¬ëŠœížë ëžëŒì°ì ìì ì€íëìŽìŒ íë ë¥ë¬ë ì í늬ìŒìŽì ì 구ì¶íë ë° ìì°ì€ë¬ìŽ ì íì ëë€. TensorFlow.js ë° WebAssemblyì ê°ì íë ììí¬ë¥Œ ì¬ì©í멎 íìµë 몚ëžì íŽëŒìŽìžíž ìž¡ì ì§ì ë°°í¬íì¬ ëíí ë° ì€ìê° ê²œíì ê°ë¥íê² í©ëë€.
- ë ê°ë ¥í íì : ëª íí íì ì ìë ìŒêŽë ìœë© ì€íìŒì ê°ì íê³ íìŽ ë¥ë¬ë íë¡ì ížìì ë ìœê² íì í ì ìëë¡ í©ëë€. ìŽë ìì¬ìíµ ì€íìŒê³Œ ìœë© 컚벀ì ìŽ ë€ë¥Œ ì ìë êµì íìì í¹í ì€ìí©ëë€.
ì 겜ë§ì íì ìì ì±: ì¬ìžµ ë¶ì
íì ì€í¬ëŠœížì íì ìì€í ì íì©íì¬ ì ê²œë§ ê°ë°ìì íì ìì ì±ì 볎ì¥íë ë°©ë²ì ììží ìŽíŽë³Žê² ìµëë€. íì 죌ììŽ í° ì°šìŽë¥Œ ë§ë€ ì ìë ëª ê°ì§ íµì¬ ììì í구í ê²ì ëë€.
1. ë°ìŽí° ì ë ¥ ë° ì¶ë ¥ ì íšì± ê²ì¬
ì 겜ë§ì ìì¹ ë°ìŽí°ë¡ ìëíë©°, ì ë ¥ ë°ìŽí°ê° ìì íìì ë¶í©íëì§ íìžíë ê²ìŽ íìì ì ëë€. íì ì€í¬ëŠœížì íì ìì€í ì ì¬ì©í멎 ìží°íìŽì€ë íì ë³ì¹ì ì ìíì¬ ì ë ¥ ë°ìŽí°ì 구조륌 ëíëŒ ì ììµëë€. ì륌 ë€ìŽ, ì ë ¥ìŽ 28x28 íìì¡° ìŽë¯žì§ìž ìŽë¯žì§ ë¶ë¥ ìì ì ê³ ë €íŽ ëŽ ìë€.
interface ImageData {
width: number;
height: number;
channels: number; // Grayscale: 1, RGB: 3, etc.
data: number[]; // Pixel data (0-255)
}
function processImage(image: ImageData): void {
// ... image processing logic ...
}
// Example usage:
const myImage: ImageData = {
width: 28,
height: 28,
channels: 1,
data: new Array(28 * 28).fill(0) // Initialize with zeros
};
processImage(myImage);
`ImageData` ìží°íìŽì€ë¥Œ ì ìíšìŒë¡ìš, `processImage` íšìê° ìì 구조ì ë¶í©íë ê°ì²Žë§ ë°ëë¡ ë³Žì¥í ì ììµëë€. ìŽë ì못 구ì±ëê±°ë ì¬ë°ë¥Žì§ ìì ë°ìŽí°ë¥Œ ì ë¬íì¬ ë°ìíë ì€ë¥ë¥Œ ë°©ì§íë ë° ëììŽ ë©ëë€.
2. ë ìŽìŽ êµ¬ì± ë° ë§€ê°ë³ì íìŽí
ì 겜ë§ì ê°ê° ê³ ì í ë§€ê°ë³ì ìžížë¥Œ ê°ì§ ë ìŽìŽë¡ 구ì±ë©ëë€. íì ì€í¬ëŠœížë¥Œ ì¬ì©íì¬ ìŽë¬í ë§€ê°ë³ìì íì ì ì ìíšìŒë¡ìš, ì¬ë°ë¥ž íì ìŽë©° ì íší ë²ì ëŽì ììì 볎ì¥í ì ììµëë€. ì륌 ë€ìŽ, ì§ì ë ìì ì ë ¥ ë° ì¶ë ¥ ì ëì ê°ì§ Dense ë ìŽìŽë¥Œ ê³ ë €íŽ ëŽ ìë€.
interface DenseLayerParams {
inputUnits: number;
outputUnits: number;
activation: 'relu' | 'sigmoid' | 'tanh'; // Restrict activation function choices
weightInitializer?: 'random' | 'zeros'; // Optional weight initialization strategy
}
class DenseLayer {
private weights: number[][];
private biases: number[];
constructor(params: DenseLayerParams) {
// ... weight and bias initialization logic based on params ...
this.weights = Array(params.inputUnits).fill(null).map(() => Array(params.outputUnits).fill(0)); // Example initialization
this.biases = Array(params.outputUnits).fill(0);
}
forward(input: number[]): number[] {
// ... forward propagation logic ...
return []; // Replace with actual output
}
}
// Example usage:
const denseLayerParams: DenseLayerParams = {
inputUnits: 784,
outputUnits: 128,
activation: 'relu',
weightInitializer: 'random'
};
const denseLayer = new DenseLayer(denseLayerParams);
`DenseLayerParams` ìží°íìŽì€ë ë ìŽìŽ êµ¬ì±ìŽ íì ë§€ê°ë³ì륌 í¬íšíê³ `activation` íšìê° íì©ë ê° ì€ íëìì ê°ì í©ëë€. ìŽë êµ¬ì± ì€ë¥ë¥Œ ë°©ì§íê³ ë ìŽìŽê° ì¬ë°ë¥Žê² ìŽêž°íëëë¡ ë³Žì¥íë ë° ëììŽ ë©ëë€.
3. í ì ì°ì° ë° íì ê²ì¬
TensorFlow.jsì ê°ì ë¥ë¬ë íë ììí¬ë í ì ì°ì°ì í¬ê² ì졎í©ëë€. íì ì€í¬ëŠœížë í ìì íìì ì ìíê³ ížíëë íìì ê°ì§ í ìì ëíŽ ì°ì°ìŽ ìíëëë¡ ë³Žì¥íë ë° ì¬ì©ë ì ììµëë€. ìŽë íë ¬ ê³±ì , ì¬íì± ë° êž°í í ì ì¡°ì곌 êŽë šë ì€ë¥ë¥Œ í¬ì°©íë ë° ëììŽ ë ì ììµëë€.
// Simple Tensor type (can be expanded for multi-dimensional tensors)
type Tensor = number[];
function matrixMultiply(a: Tensor, b: Tensor, aRows: number, aCols: number, bRows: number, bCols: number): Tensor {
if (aCols !== bRows) {
throw new Error("Matrix dimensions are incompatible for multiplication.");
}
const result: Tensor = new Array(aRows * bCols).fill(0);
for (let i = 0; i < aRows; i++) {
for (let j = 0; j < bCols; j++) {
for (let k = 0; k < aCols; k++) {
result[i * bCols + j] += a[i * aCols + k] * b[k * bCols + j];
}
}
}
return result;
}
// Example Usage:
const matrixA: Tensor = [1, 2, 3, 4, 5, 6]; // 2x3 matrix
const matrixB: Tensor = [7, 8, 9, 10, 11, 12]; // 3x2 matrix
try {
const resultMatrix = matrixMultiply(matrixA, matrixB, 2, 3, 3, 2);
console.log("Result Matrix:", resultMatrix);
} catch (error: any) {
console.error("Error during matrix multiplication:", error.message);
}
ìŽ ììë íë ¬ ê³±ì íšì ëŽì Ʞ볞ì ìž íì ê²ì¬ë¥Œ 볎ì¬ì€ëë€. TensorFlow.js륌 ì¬ì©íë ì€ì ìë늬ì€ììë íë ììí¬ì íì ì ì륌 íì©íì¬ íì ì ìœì ë³Žë€ ì격íê² ì ì©í ì ììµëë€.
ìì: íì ì€í¬ëŠœížë¡ ê°ëší íŒëí¬ìë ì ê²œë§ êµ¬ì¶íêž°
ë¶ë¥ ìì ì ìí ê°ëší íŒëí¬ìë ì 겜ë§ì 구ì¶íë ë° íì ì€í¬ëŠœížê° ìŽë»ê² ì¬ì©ë ì ìëì§ ì€ëª íŽ ëŽ ìë€. ìŽ ììììë Ʞ볞 í ì ì°ì°ì ìíŽ TensorFlow.js륌 ì¬ì©í ê²ì ëë€.
import * as tf from '@tensorflow/tfjs';
interface NetworkConfig {
inputShape: number[];
layers: LayerConfig[];
optimizer?: tf.Optimizer;
}
interface LayerConfig {
type: 'dense';
units: number;
activation: 'relu' | 'sigmoid' | 'softmax';
}
class NeuralNetwork {
private model: tf.Sequential;
private config: NetworkConfig;
constructor(config: NetworkConfig) {
this.config = config;
this.model = tf.sequential();
this.buildModel();
}
private buildModel(): void {
this.config.layers.forEach((layerConfig) => {
if (layerConfig.type === 'dense') {
this.model.add(tf.layers.dense({
units: layerConfig.units,
activation: layerConfig.activation,
inputShape: this.config.inputShape
}));
}
});
this.model.compile({
optimizer: this.config.optimizer || 'adam',
loss: 'categoricalCrossentropy',
metrics: ['accuracy']
});
}
async train(xTrain: tf.Tensor, yTrain: tf.Tensor, epochs: number): Promise {
const history = await this.model.fit(xTrain, yTrain, {
epochs: epochs,
validationSplit: 0.1
});
return history;
}
predict(input: tf.Tensor): tf.Tensor {
return this.model.predict(input) as tf.Tensor;
}
}
// Example Usage:
const config: NetworkConfig = {
inputShape: [784], // MNIST image size (28x28)
layers: [
{ type: 'dense', units: 128, activation: 'relu' },
{ type: 'dense', units: 10, activation: 'softmax' } // 10 output classes (digits 0-9)
]
};
const model = new NeuralNetwork(config);
// Dummy Data (replace with actual MNIST data)
const xTrain = tf.randomNormal([100, 784]);
const yTrain = tf.oneHot(tf.randomUniform([100], 0, 10, 'int32'), 10);
model.train(xTrain, yTrain, 10).then((history) => {
console.log("Training complete:", history);
const prediction = model.predict(xTrain.slice([0], [1]));
console.log("Prediction:", prediction.toString());
});
ìŽ ììë ì 겜ë§ì 구ì±ì ì ìíê³ ë ìŽìŽê° ì¬ë°ë¥ž ë§€ê°ë³ìë¡ ìì±ëëë¡ ë³Žì¥íë ë° íì ì€í¬ëŠœížê° ìŽë»ê² ì¬ì©ë ì ìëì§ ë³Žì¬ì€ëë€. `NetworkConfig` ë° `LayerConfig` ìží°íìŽì€ë íì ìì ì±ì ê°ì íê³ ìœë륌 ë ìœêž° ìœê³ ì ì§ë³Žìíêž° ìœê² ë§ëëë€.
íì ì€í¬ëŠœíž ë¥ë¬ëìì íì ìì ì±ì ìí ëªšë² ì¬ë¡
íì ì€í¬ëŠœíž ë¥ë¬ë íë¡ì ížìì íì ìì ì±ì ìŽì ì ê·¹ëííë €ë©Ž ë€ì ëªšë² ì¬ë¡ë¥Œ ê³ ë €íììì€:
- ëª ìì íì 죌ì ì¬ì©: íì ì€í¬ëŠœížê° ìŒë¶ 겜ì°ì íì ì ì¶ë¡ í ì ìì§ë§, ë³ì, íšì ë§€ê°ë³ì ë° ë°í ê°ì ëª ìì ìŒë¡ 죌ìì ë€ë ê²ìŽ ìŒë°ì ìŒë¡ ì¢ì ìµêŽì ëë€. ìŽë ìœë륌 ë ìœêž° ìœê² ë§ë€ê³ íì êŽë š ì€ë¥ë¥Œ ìŽêž°ì í¬ì°©íë ë° ëììŽ ë©ëë€.
- ë°ìŽí° 구조륌 ìí ì¬ì©ì ì ì íì ì ì: ì ë ¥ ë°ìŽí°, ë ìŽìŽ ë§€ê°ë³ì ë° í ì íìì í¬íšíì¬ ë°ìŽí° 구조륌 ëíëŽë ìží°íìŽì€ ëë íì ë³ì¹ì ìì±í©ëë€. ìŽë ë°ìŽí°ê° ìì íìì ë¶í©íëì§ íìžíê³ ì못 구ì±ë ë°ìŽí°ë¡ ìží ì€ë¥ë¥Œ ë°©ì§íë ë° ëììŽ ë©ëë€.
- ì ëìž íì 곌 ìŽê±°í íì©: ì ëìž íì 곌 ìŽê±°íì ì¬ì©íì¬ ë³ìì ë§€ê°ë³ìì ê°ë¥í ê°ì ì íí©ëë€. ìŽë êµ¬ì± ì€ë¥ë¥Œ ë°©ì§íê³ ìœëê° ììëë¡ ëìíëë¡ ë³Žì¥íë ë° ëììŽ ë©ëë€. ì륌 ë€ìŽ, ììì ì€ëª í íì±í íšìì ëí íì© ê°ì ì ìíë ê²ê³Œ ê°ìµëë€.
- íì ê²ì¬ë¥Œ íµí ëšì í ì€íž ìì±: ëšì í ì€ížì íì ê²ì¬ë¥Œ íµí©íì¬ ìœëê° ë€ìí íì ì ë°ìŽí°ì ëíŽ ì¬ë°ë¥Žê² ëìíëì§ íìží©ëë€. ìŽë íì ì€í¬ëŠœíž ì»ŽíìŒë¬ë§ìŒë¡ë ê°ì§ëì§ ìì ì ìë ì€ë¥ë¥Œ í¬ì°©íë ë° ëììŽ ë ì ììµëë€.
- ëŠ°í° ë° í¬ë§·í° ì¬ì©: ESLintì ê°ì 늰í°ì Prettierì ê°ì ìœë í¬ë§·í°ë¥Œ ì¬ì©íì¬ ìŒêŽë ìœë© ì€íìŒì ê°ì íê³ ì ì¬ì ìž ì€ë¥ë¥Œ í¬ì°©í©ëë€. ìŽë ìœë íì§ì í¥ììí€ê³ íìŽ íì íë ê²ì ë ìœê² ë§ë€ ì ììµëë€.
곌ì ë° ê³ ë € ì¬í
íì ì€í¬ëŠœížê° ë¥ë¬ëì ìë¹í ìŽì ì ì ê³µíì§ë§, ì¬ì©ê³Œ êŽë šë 곌ì ë° ê³ ë € ì¬íì ìžì§íë ê²ìŽ ì€ìí©ëë€:
- íìµ ê³¡ì : íì ì€í¬ëŠœížë ìë°ì€í¬ëŠœíž ê°ë°ì ì¶ê°ì ìž ë³µì¡ì±ì ëíë©°, ê°ë°ìë íì ìì€í ë° êŽë š ê°ë ì ë°°ììŒ í©ëë€. íì§ë§ íì ìì ì± ë° í¥ìë ì ì§ë³Žìì±ì ìŽì ì ì¢ ì¢ ìŽêž° íìµ ê³¡ì ë³Žë€ ë íœëë€.
- Ʞ졎 ëŒìŽëžë¬ëЬìì íµí©: ìŒë¶ Ʞ졎 ìë°ì€í¬ëŠœíž ë¥ë¬ë ëŒìŽëžë¬ëЬìë í¬êŽì ìž íì ì€í¬ëŠœíž íì ì ìê° ìì ì ììµëë€. ìŽë¬í 겜ì°, ì첎 íì ì ì륌 ìì±íê±°ë 컀뮀ëí°ìì ì ì§ êŽëЬíë íì ì ì íìŒì ì¬ì©íŽìŒ í ì ììµëë€. DefinitelyTypedë íë¥í ìë£ì ëë€.
- ì±ë¥ ê³ ë € ì¬í: íì ê²ì¬ë 컎íìŒ íë¡ìžì€ì ìœê°ì ì€ë²í€ë륌 ì¶ê°í ì ììµëë€. íì§ë§ ìŽë ë°íì ì€ë¥ ê°ì ë° ìœë ì ì§ë³Žìì± í¥ììŒë¡ ìží ì±ë¥ ìŽëì ë¹íŽ ìŒë°ì ìŒë¡ 묎ìí ì ìë ìì€ì ëë€.
- íì ì€ë¥ ëë²ê¹ : íì ì€í¬ëŠœížê° ì€ë¥ë¥Œ ì¡°êž°ì í¬ì°©íë ë° ëììŽ ëì§ë§, í¹í ë³µì¡í íë¡ì ížììë íì ì€ë¥ë¥Œ ëë²ê¹ íë ê²ìŽ ëëë¡ ìŽë €ìž ì ììµëë€. ê·žë¬ë ìœë ì€í ì€ë£š ë° ë³ì íì ê²ì¬ êž°ë¥ì í¬íší íì ì€í¬ëŠœížì íŽë§ ì§ìì ëë²ê¹ íë¡ìžì€ì í¬ê² ëììŽ ë ì ììµëë€.
êžë¡ë² ìí¥ ë° ë¯žë ëí¥
ë¥ë¬ëìì íì ì€í¬ëŠœížì ì±íì ì ìžê³ì ìŒë¡ ê°ìíëê³ ììŒë©°, í¹í ìœë íì§, ì ì§ë³Žìì± ë° íë¡ ížìë íµí©ì ì°ì ìíë ì¡°ì§ìì ëì± ê·žë ìµëë€. ë¥ë¬ëìŽ í¬ì€ìŒìŽ, êžìµ, ìŽì¡ì í¬íší ë€ìí ì°ì ìì ëì± ë³Žížíëšì ë°ëŒ ê²¬ê³ íê³ ì 뢰í ì ìë ë구ì ëí ììë ê³ì ìŠê°í ê²ì ëë€.
ë€ìì 믞ëì 죌목íŽìŒ í ëª ê°ì§ 죌ì ëí¥ì ëë€:
- íì ì€í¬ëŠœíž ì±í ìŠê°: ë ë§ì ê°ë°ìê° íì ìì ì± ë° í¥ìë íŽë§ì ìŽì ì ìžìíšì ë°ëŒ, íì ì€í¬ëŠœížë ë¥ë¬ë ì í늬ìŒìŽì 구ì¶ì ì ì ë ìžêž°ë¥Œ ì»ì ê°ë¥ì±ìŽ ëìµëë€.
- ëŒìŽëžë¬ëЬ íì ì ì ê°ì : 컀뮀ëí°ë Ʞ졎 ìë°ì€í¬ëŠœíž ë¥ë¬ë ëŒìŽëžë¬ëЬì íì ì ì륌 ê°ì íêž° ìíŽ ì ê·¹ì ìŒë¡ ë žë ¥íê³ ììŒë©°, ìŽë ìŽë¬í íë¡ì ížìì íì ì€í¬ëŠœížë¥Œ ë ìœê² ì¬ì©í ì ìëë¡ í©ëë€.
- WebAssemblyìì íµí©: WebAssembly (Wasm)ë ëžëŒì°ì ìì ê³ ì±ë¥ ìœë륌 ì€ííë ë°©ë²ì ì ê³µíë©°, íì ì€í¬ëŠœížë Wasm êž°ë° ë¥ë¬ë ì í늬ìŒìŽì ì 구ì¶íë ë° ì í©í©ëë€.
- ì£ì§ 컎íší ë° IoT: ë¥ë¬ëìŽ ì£ì§ 컎íší ì ë ê°ê¹ìì§ì ë°ëŒ, íì ì€í¬ëŠœížë 늬ìì€ê° ì íë ì¥ì¹ìì ì€íëë ì í늬ìŒìŽì ì 구ì¶íë ë° ì€ìí ìí ì í ì ììµëë€.
- ì ê·Œì± ë° í¬êŽì±: íì ì€í¬ëŠœížì ê°ë ¥í íìŽí ë° ëª íí 구묞ì ë ì ê·Œíêž° ìœê³ í¬êŽì ìž ìœë© êŽíì êž°ì¬íì¬, ë€ìí 배겜곌 êž°ì ìì€ì ê°ì§ ê°ë°ìë€ìŽ ë¥ë¬ë íë¡ì ížì êž°ì¬íë ê²ì ë ìœê² ë§ëëë€.
ê²°ë¡
íì ì€í¬ëŠœížë íì ìì ì±ìŽ ë°ìŽë ì 겜ë§ì 구ì¶íêž° ìí ê°ë ¥íê³ ë§€ë ¥ì ìž ì ê·Œ ë°©ìì ì ê³µí©ëë€. ì ì íìŽí ìì€í ì íì©íšìŒë¡ìš ê°ë°ìë ë¥ë¬ë íë¡ì ížìì ìœë ì 뢰ì±ì í¬ê² ëìŽê³ ì ì§ë³Žìì±ì í¥ììí€ë©° ì€ë¥ë¥Œ ì€ìŒ ì ììµëë€. ë¥ë¬ë íê²œìŽ ê³ì ë°ì íšì ë°ëŒ íì ì€í¬ëŠœížë ì§ë¥í ìì€í ì 믞ë륌 íì±íë ë° íµì¬ì ìž ìí ì í ì€ë¹ê° ëìŽ ììµëë€. íì ì€í¬ëŠœížë¥Œ ìì©í멎 ì ìžê³ ì¡°ì§ê³Œ ì¬ì©ììê² ìŽì ì ì ê³µíë ëì± ê²¬ê³ íê³ íì¥ ê°ë¥íë©° ì ì§ë³Žìê° ì©ìŽí ë¥ë¬ë ì룚ì ìŒë¡ ìŽìŽì§ ì ììµëë€.
ìì íë¡ì ížë¡ ììíê±°ë Ʞ졎 ìë°ì€í¬ëŠœíž ìœë륌 ì ì§ì ìŒë¡ íì ì€í¬ëŠœížë¡ ë§ìŽê·žë ìŽì íë ê²ì ê³ ë €íŽ ë³Žìžì. ë€ìí íì 죌ìì ì€ííê³ íì ì€í¬ëŠœíž ìžìŽì ë€ìí êž°ë¥ì íìíì¬ ë¥ë¬ë ë§¥ëœìì íì ì€í¬ëŠœížì 몚ë ì ì¬ë ¥ì ë°ê²¬íììì€. íì ì€í¬ëŠœížë¥Œ ë°°ì°ê³ ì±ííë ë° í¬ìí ë žë ¥ì ì¥êž°ì ìŒë¡ ìì¬í ì¬ì§ ììŽ ê²°ì€ì ë§ºìŽ ëì± ì 뢰í ì ìê³ ì ì§ë³Žì ê°ë¥íë©° ì±ê³µì ìž ë¥ë¬ë ë žë ¥ì ìŽë ê²ì ëë€.