프로젝트

일반

사용자정보

통계
| 개정판:

hytos / ID2.Manager / ID2.Manager.Data / Models / Documents.cs @ d8bd4799

이력 | 보기 | 이력해설 | 다운로드 (18.1 KB)

1 5898479a yoush97
using System;
2
using System.Collections.Generic;
3
using System.Linq;
4
using System.Text;
5
using System.Threading.Tasks;
6
7 1bd7e3a0 yoush97
using System.ComponentModel;
8 5898479a yoush97
using System.Runtime.Serialization;
9
10 295ce375 yoush97
using Newtonsoft.Json;
11
12 5898479a yoush97
namespace ID2.Manager.Data.Models
13
{
14 25f68105 taeseongkim
    //[DataContract]
15
    //[JsonObject(IsReference = true)]
16 d428fc94 taeseongkim
    public class Documents : NotifyPropertyChange, IEquatable<Documents>
17 5898479a yoush97
    {
18 25f68105 taeseongkim
        //[DataMember]
19 5898479a yoush97
        public int Seq { get; set; }
20 25f68105 taeseongkim
        //[DataMember]
21 90ae20f6 yoush97
        public string DocID { get; set; }
22 25f68105 taeseongkim
        //[DataMember]
23 5898479a yoush97
        public string DocumentNo { get; set; }
24 25f68105 taeseongkim
        //[DataMember]
25 90ae20f6 yoush97
        public string RevisonNo { get; set; }
26 25f68105 taeseongkim
        //[DataMember]
27 79d7836e yoush97
        public string System { get; set; }
28 25f68105 taeseongkim
        //[DataMember]
29 79d7836e yoush97
        public string SubSystemCode { get; set; }
30 a8981c30 yoush97
        public string Team { get; set; }
31 4d2f9e47 yoush97
32 bc01d8d5 yoush97
        private string _Simularity = null;
33 d0a1d373 yoush97
        public string Simularity
34
        {
35 bc01d8d5 yoush97
            get => this._Simularity;
36
            set => SetProperty(ref this._Simularity, value);
37 5ae34a5e humkyung
        }
38
39 4d2f9e47 yoush97
        private string _RefProjectCode = string.Empty;
40 25f68105 taeseongkim
        //[DataMember]
41 4d2f9e47 yoush97
        public string RefProjectCode
42
        {
43
            get => this._RefProjectCode;
44
            set => SetProperty(ref this._RefProjectCode, value);
45
        }
46
47
        private string _JobLevel = string.Empty;
48 25f68105 taeseongkim
        //[DataMember]
49 4d2f9e47 yoush97
        public string JobLevel
50
        {
51
            get => this._JobLevel;
52
            set => SetProperty(ref this._JobLevel, value);
53
        }
54
55 40a1e23a yoush97
        private string _PersonInCharge = null;
56 25f68105 taeseongkim
        //[DataMember]
57 4d2f9e47 yoush97
        public string PersonInCharge
58
        {
59
            get => this._PersonInCharge;
60
            set => SetProperty(ref this._PersonInCharge, value);
61
        }
62
63 40a1e23a yoush97
        private string _Worker = null;
64 25f68105 taeseongkim
        //[DataMember]
65 1bd7e3a0 yoush97
        public string Worker
66
        {
67 d0a1d373 yoush97
            get => this._Worker;
68 4d2f9e47 yoush97
            set => SetProperty(ref this._Worker, value);
69 1bd7e3a0 yoush97
        }
70 4d2f9e47 yoush97
71 25f68105 taeseongkim
        //[DataMember]
72 54977253 yoush97
        public string RegisteredUser { get; set; }
73 25f68105 taeseongkim
        //[DataMember]
74 54977253 yoush97
        public string ModifiedUser { get; set; }
75 25f68105 taeseongkim
        //[DataMember]
76 54977253 yoush97
        public string DeletedUser { get; set; }
77 4d2f9e47 yoush97
78
        private string _ToIsDiscussion = string.Empty;
79 25f68105 taeseongkim
        //[DataMember]
80 4d2f9e47 yoush97
        public string ToIsDiscussion
81
        {
82
            get => this._ToIsDiscussion;
83
            set => SetProperty(ref this._ToIsDiscussion, value);
84
        }
85
86 25f68105 taeseongkim
        //[DataMember]
87 5898479a yoush97
        public string ToRemarks { get; set; }
88 4d2f9e47 yoush97
89 d0a1d373 yoush97
        private string _ToCreator = null;
90 25f68105 taeseongkim
        //[DataMember]
91 4d2f9e47 yoush97
        public string ToCreator
92
        {
93
            get => this._ToCreator;
94
            set => SetProperty(ref this._ToCreator, value);
95
        }
96
97 e8a86b9b yoush97
        public int ToCapture { get; set; }
98 4d2f9e47 yoush97
99
        private string _FrReviewStatus = string.Empty;
100 25f68105 taeseongkim
        //[DataMember]
101 4d2f9e47 yoush97
        public string FrReviewStatus
102
        {
103
            get => this._FrReviewStatus;
104
            set => SetProperty(ref this._FrReviewStatus, value);
105
        }
106
107 25f68105 taeseongkim
        //[DataMember]
108 5898479a yoush97
        public string FrRemarks { get; set; }
109 4d2f9e47 yoush97
110 d0a1d373 yoush97
        private string _FrCreator = null;
111 25f68105 taeseongkim
        //[DataMember]
112 4d2f9e47 yoush97
        public string FrCreator
113
        {
114
            get => this._FrCreator;
115
            set => SetProperty(ref this._FrCreator, value);
116
        }
117
118 e8a86b9b yoush97
        public int FrCapture { get; set; }
119 25f68105 taeseongkim
        //[DataMember]
120 947e6939 yoush97
        public DateTime? ID2StartDate { get; set; }
121 25f68105 taeseongkim
        //[DataMember]
122 947e6939 yoush97
        public DateTime? ID2EndDate { get; set; }
123 4d2f9e47 yoush97
124
125
        private string _ID2Status = string.Empty;
126 25f68105 taeseongkim
        //[DataMember]
127 4d2f9e47 yoush97
        public string ID2Status
128
        {
129
            get => this._ID2Status;
130
            set => SetProperty(ref this._ID2Status, value);
131
        }
132
133
134 25f68105 taeseongkim
        //[DataMember]
135 90ae20f6 yoush97
        public string ID2Issues { get; set; }
136 f4230b40 yoush97
        public int ID2Capture { get; set; }
137 25f68105 taeseongkim
        //[DataMember]
138 cb2e1138 yoush97
        public string ReplyModifications { get; set; }
139 4d2f9e47 yoush97
140 d0a1d373 yoush97
        private string _ReplyRequester = null;
141 25f68105 taeseongkim
        //[DataMember]
142 4d2f9e47 yoush97
        public string ReplyRequester
143
        {
144
            get => this._ReplyRequester;
145
            set => SetProperty(ref this._ReplyRequester, value);
146
        }
147
148
        private string _IsConvert = string.Empty;
149 25f68105 taeseongkim
        //[DataMember]
150 4d2f9e47 yoush97
        public string IsConvert
151
        {
152
            get => this._IsConvert;
153
            set => SetProperty(ref this._IsConvert, value);
154
        }
155
156 40a1e23a yoush97
        private string _AVEVAPersonInCharge = null;
157 25f68105 taeseongkim
        //[DataMember]
158 4d2f9e47 yoush97
        public string AVEVAPersonInCharge
159
        {
160
            get => this._AVEVAPersonInCharge;
161
            set => SetProperty(ref this._AVEVAPersonInCharge, value);
162
        }
163
164 40a1e23a yoush97
        private string _AVEVAWorker = null;
165 25f68105 taeseongkim
        //[DataMember]
166 4d2f9e47 yoush97
        public string AVEVAWorker
167
        {
168
            get => this._AVEVAWorker;
169
            set => SetProperty(ref this._AVEVAWorker, value);
170
        }
171
172 25f68105 taeseongkim
        //[DataMember]
173 482f6326 yoush97
        public DateTime? AVEVAConvertDate { get; set; }
174 25f68105 taeseongkim
        //[DataMember]
175 482f6326 yoush97
        public DateTime? AVEVAReviewDate { get; set; }
176 25f68105 taeseongkim
        //[DataMember]
177 ab3c1c74 yoush97
        public DateTime? AVEVAWorkDate { get; set; }
178 4d2f9e47 yoush97
179
        private string _AVEVAStatus = string.Empty;
180 25f68105 taeseongkim
        //[DataMember]
181 4d2f9e47 yoush97
        public string AVEVAStatus
182
        {
183
            get => this._AVEVAStatus;
184
            set => SetProperty(ref this._AVEVAStatus, value);
185
        }
186
187 25f68105 taeseongkim
        //[DataMember]
188 90ae20f6 yoush97
        public string AVEVAIssues { get; set; }
189 4d2f9e47 yoush97
190 81428703 yoush97
        private string _ProdReviewer = null;
191 25f68105 taeseongkim
        //[DataMember]
192 4d2f9e47 yoush97
        public string ProdReviewer
193
        {
194
            get => this._ProdReviewer;
195
            set => SetProperty(ref this._ProdReviewer, value);
196
        }
197
198
        private string _ProdIsResult = string.Empty;
199 25f68105 taeseongkim
        //[DataMember]
200 4d2f9e47 yoush97
        public string ProdIsResult
201
        {
202
            get => this._ProdIsResult;
203
            set => SetProperty(ref this._ProdIsResult, value);
204
        }
205
206 25f68105 taeseongkim
        //[DataMember]
207 90ae20f6 yoush97
        public string ProdRemarks { get; set; }
208 4d2f9e47 yoush97
209 d0a1d373 yoush97
        private string _ClientReviewer = null;
210 25f68105 taeseongkim
        //[DataMember]
211 4d2f9e47 yoush97
        public string ClientReviewer
212
        {
213
            get => this._ClientReviewer;
214
            set => SetProperty(ref this._ClientReviewer, value);
215
        }
216
217
        private string _ClientIsResult = string.Empty;
218 25f68105 taeseongkim
        //[DataMember]
219 4d2f9e47 yoush97
        public string ClientIsResult
220
        {
221
            get => this._ClientIsResult;
222
            set => SetProperty(ref this._ClientIsResult, value);
223
        }
224
225 25f68105 taeseongkim
        //[DataMember]
226 90ae20f6 yoush97
        public string ClientRemarks { get; set; }
227 4d2f9e47 yoush97
228
        private string _DTIsGateWay = string.Empty;
229 25f68105 taeseongkim
        //[DataMember]
230 4d2f9e47 yoush97
        public string DTIsGateWay
231
        {
232
            get => this._DTIsGateWay;
233
            set => SetProperty(ref this._DTIsGateWay, value);
234
        }
235
236
        private string _DTIsImport = string.Empty;
237 25f68105 taeseongkim
        //[DataMember]
238 4d2f9e47 yoush97
        public string DTIsImport
239
        {
240
            get => this._DTIsImport;
241
            set => SetProperty(ref this._DTIsImport, value);
242
        }
243
244
        private string _DTIsRegSystem = string.Empty;
245 25f68105 taeseongkim
        //[DataMember]
246 4d2f9e47 yoush97
        public string DTIsRegSystem
247
        {
248
            get => this._DTIsRegSystem;
249
            set => SetProperty(ref this._DTIsRegSystem, value);
250
        }
251
252 25f68105 taeseongkim
        //[DataMember]
253 947e6939 yoush97
        public string DTRemarks { get; set; }
254 709c1971 yoush97
255 e458a996 taeseongkim
        public List<MarkupText> Markups { get; set; }
256 c0b49a75 taeseongkim
257 08499f5f taeseongkim
        public List<AttFileInfo> AttFiles { get; set; }
258
259 9096bc6d taeseongkim
        public int ConvertStatus { get; set; }
260 08499f5f taeseongkim
261 d428fc94 taeseongkim
        public override bool Equals(object obj)
262
        {
263
            return Equals(obj as Documents);
264
        }
265
266
        public bool Equals(Documents other)
267
        {
268
269
            if (this != null && other == null)
270
                return false;
271
272 d0a1d373 yoush97
            if (this.DocumentNo != other.DocumentNo) return false;
273
            if (this.RevisonNo != other.RevisonNo) return false;
274
            if (this.System != other.System) return false;
275
            if (this.SubSystemCode != other.SubSystemCode) return false;
276
            if (this.RefProjectCode != other.RefProjectCode) return false;
277
            if (this.JobLevel != other.JobLevel) return false;
278
            if (this.Simularity != other.Simularity) return false;
279
            if (this.PersonInCharge != other.PersonInCharge) return false;
280
            if (this.Worker != other.Worker) return false;
281
            if (this.ToIsDiscussion != other.ToIsDiscussion) return false;
282
            if (this.ToRemarks != other.ToRemarks) return false;
283
            if (this.ToCreator != other.ToCreator) return false;
284
285
            if (this.FrReviewStatus != other.FrReviewStatus) return false;
286
            if (this.FrRemarks != other.FrRemarks) return false;
287
            if (this.FrCreator != other.FrCreator) return false;
288
            if (this.ID2StartDate != other.ID2StartDate) return false;
289
            if (this.ID2EndDate != other.ID2EndDate) return false;
290
            if (this.ID2Status != other.ID2Status) return false;
291
            if (this.ID2Issues != other.ID2Issues) return false;
292
            if (this.ReplyModifications != other.ReplyModifications) return false;
293
            if (this.ReplyRequester != other.ReplyRequester) return false;
294
            if (this.IsConvert != other.IsConvert) return false;
295
            if (this.AVEVAPersonInCharge != other.AVEVAPersonInCharge) return false;
296
            if (this.AVEVAWorker != other.AVEVAWorker) return false;
297
            if (this.AVEVAConvertDate != other.AVEVAConvertDate) return false;
298
            if (this.AVEVAReviewDate != other.AVEVAReviewDate) return false;
299
            if (this.AVEVAWorkDate != other.AVEVAWorkDate) return false;
300
            if (this.AVEVAStatus != other.AVEVAStatus) return false;
301
            if (this.AVEVAIssues != other.AVEVAIssues) return false;
302
            if (this.ProdReviewer != other.ProdReviewer) return false;
303
            if (this.ProdIsResult != other.ProdIsResult) return false;
304
            if (this.ProdRemarks != other.ProdRemarks) return false;
305
            if (this.ClientReviewer != other.ClientReviewer) return false;
306
            if (this.ClientIsResult != other.ClientIsResult) return false;
307
            if (this.ClientRemarks != other.ClientRemarks) return false;
308
            if (this.DTIsGateWay != other.DTIsGateWay) return false;
309
            if (this.DTIsImport != other.DTIsImport) return false;
310
            if (this.DTIsRegSystem != other.DTIsRegSystem) return false;
311
            if (this.DTRemarks != other.DTRemarks) return false;
312
            if (this.ConvertStatus != other.ConvertStatus) return false;
313 62e3647c yoush97
314 d428fc94 taeseongkim
            if (this.AttFiles == null && other.AttFiles == null)
315
            {
316 62e3647c yoush97
                return true;
317 d428fc94 taeseongkim
            }
318 43adf299 taeseongkim
            else if (this.AttFiles != null && other.AttFiles != null)
319 d428fc94 taeseongkim
            {
320 43adf299 taeseongkim
                if (!this.AttFiles.SequenceEqual(other.AttFiles))
321
                    return false;
322 d428fc94 taeseongkim
            }
323 62e3647c yoush97
            else
324
            {
325
                return false;
326
            }
327 d428fc94 taeseongkim
328 43adf299 taeseongkim
            //bool result =  this.FrReviewStatus == other.FrReviewStatus && this.FrRemarks == other.FrRemarks && this.FrCreator == other.FrCreator
329
            //    && this.ID2StartDate == other.ID2StartDate && this.ID2EndDate == other.ID2EndDate && this.ID2Status == other.ID2Status
330
            //    && this.ID2Issues == other.ID2Issues && this.ReplyModifications == other.ReplyModifications && this.ReplyRequester == other.ReplyRequester && this.IsConvert == other.IsConvert && this.AVEVAPersonInCharge == other.AVEVAPersonInCharge && this.AVEVAWorker == other.AVEVAWorker
331
            //    && this.AVEVAConvertDate == other.AVEVAConvertDate && this.AVEVAReviewDate == other.AVEVAReviewDate && this.AVEVAWorkDate == other.AVEVAWorkDate
332
            //    && this.AVEVAStatus == other.AVEVAStatus && this.AVEVAIssues == other.AVEVAIssues
333
            //    && this.ProdReviewer == other.ProdReviewer && this.ProdIsResult == other.ProdIsResult && this.ProdRemarks == other.ProdRemarks && this.ClientReviewer == other.ClientReviewer
334
            //    && this.ClientIsResult == other.ClientIsResult && this.ClientRemarks == other.ClientRemarks && this.DTIsGateWay == other.DTIsGateWay && this.DTIsImport == other.DTIsImport
335
            //    && this.DTIsRegSystem == other.DTIsRegSystem && this.DTRemarks == other.DTRemarks && this.ConvertStatus == other.ConvertStatus
336
            //    && isAttfilesEqual;
337
338
            //if (result == false)
339
            //{
340
            //    string id = this.DocID;
341
            //}
342
343
            return true;
344 d428fc94 taeseongkim
345
        }
346
        public override int GetHashCode()
347
        {
348
            return this.DocumentNo.GetNullableHash() + this.RevisonNo.GetNullableHash() + this.System.GetNullableHash() + this.SubSystemCode.GetNullableHash()
349 b2c03c2e yoush97
                + this.RefProjectCode.GetNullableHash() + this.JobLevel.GetNullableHash() + this.Simularity.GetNullableHash()
350 62e3647c yoush97
                + this.PersonInCharge.GetNullableHash() + this.Worker.GetNullableHash() + this.ToIsDiscussion.GetNullableHash() + this.ToRemarks.GetNullableHash()
351 d428fc94 taeseongkim
                + this.ToCreator.GetNullableHash()
352
                + this.FrReviewStatus.GetNullableHash() + this.FrRemarks.GetNullableHash() + this.FrCreator.GetNullableHash()
353
                + this.ID2StartDate.GetNullableHash() + this.ID2EndDate.GetNullableHash() + this.ID2Status.GetNullableHash()
354
                + this.ID2Issues.GetNullableHash() + this.ReplyModifications.GetNullableHash() + this.ReplyRequester.GetNullableHash() + this.IsConvert.GetNullableHash() + this.AVEVAPersonInCharge.GetNullableHash() + this.AVEVAWorker.GetNullableHash()
355
                + this.AVEVAConvertDate.GetNullableHash() + this.AVEVAReviewDate.GetNullableHash() + this.AVEVAWorkDate.GetNullableHash()
356
                + this.AVEVAStatus.GetNullableHash() + this.AVEVAIssues.GetNullableHash()
357
                + this.ProdReviewer.GetNullableHash() + this.ProdIsResult.GetNullableHash() + this.ProdRemarks.GetNullableHash() + this.ClientReviewer.GetNullableHash()
358
                + this.ClientIsResult.GetNullableHash() + this.ClientRemarks.GetNullableHash() + this.DTIsGateWay.GetNullableHash() + this.DTIsImport.GetNullableHash()
359
                + this.DTIsRegSystem.GetNullableHash() + this.DTRemarks.GetNullableHash() + this.ConvertStatus.GetNullableHash();
360
        }
361 d2d4f84b yoush97
362 f074a104 yoush97
        public class DocumentsKeyCompare : IEqualityComparer<Documents>
363 d2d4f84b yoush97
        {
364
            public bool Equals(Documents x, Documents y)
365
            {
366
                if (x == null && y == null)
367
                    return true;
368
                else if (x == null || y == null)
369
                    return false;
370
                else
371
                {
372
                    return x.DocID == y.DocID;
373
                }
374
            }
375
376
            public int GetHashCode(Documents obj)
377
            {
378
                return (obj.DocID != null ? obj.DocID.GetHashCode() : 0);
379
            }
380
        }
381 f074a104 yoush97
382
        public class DocumentsUniqueCompare : IEqualityComparer<Documents>
383
        {
384
            public bool Equals(Documents x, Documents y)
385
            {
386
                if (x == null && y == null)
387
                    return true;
388
                else if (x == null || y == null)
389
                    return false;
390
                else
391
                {
392
                    return x.RefProjectCode == y.RefProjectCode && x.DocumentNo == y.DocumentNo;
393
                }
394
            }
395
396
            public int GetHashCode(Documents obj)
397
            {
398
                return (obj.RefProjectCode != null ? obj.RefProjectCode.GetHashCode() : 0) + (obj.DocumentNo != null ? obj.DocumentNo.GetHashCode() : 0);
399
            }
400
        }
401
402 e9700266 yoush97
        public void DataCopy(Documents docData)
403 f074a104 yoush97
        {
404 e9700266 yoush97
            this.DocumentNo = docData.DocumentNo;
405
            this.RevisonNo = docData.RevisonNo;
406
            this.System = docData.System;
407
            this.SubSystemCode = docData.SubSystemCode;
408
            this.RefProjectCode = docData.RefProjectCode;
409
            this.JobLevel = docData.JobLevel;
410 b2c03c2e yoush97
            //this.Simularity = docData.Simularity;
411 e9700266 yoush97
            this.PersonInCharge = docData.PersonInCharge;
412 62e3647c yoush97
            this.Worker = docData.Worker;
413 e9700266 yoush97
            this.ToIsDiscussion = docData.ToIsDiscussion;
414
            this.ToRemarks = docData.ToRemarks;
415
            this.ToCreator = docData.ToCreator;
416
            this.ToCapture += docData.ToCapture;
417
            this.FrReviewStatus = docData.FrReviewStatus;
418
            this.FrRemarks = docData.FrRemarks;
419
            this.FrCapture += docData.FrCapture;
420
            this.FrCreator = docData.FrCreator;
421
            this.ID2StartDate = docData.ID2StartDate;
422
            this.ID2EndDate = docData.ID2EndDate;
423
            this.ID2Status = docData.ID2Status;
424
            this.ID2Issues = docData.ID2Issues;
425
            this.ID2Capture += docData.ID2Capture;
426
            this.ReplyModifications = docData.ReplyModifications;
427
            this.ReplyRequester = docData.ReplyRequester;
428
            this.IsConvert = docData.IsConvert;
429
            this.AVEVAPersonInCharge = docData.AVEVAPersonInCharge;
430
            this.AVEVAWorker = docData.AVEVAWorker;
431
            this.AVEVAConvertDate = docData.AVEVAConvertDate;
432
            this.AVEVAReviewDate = docData.AVEVAReviewDate;
433
            this.AVEVAWorkDate = docData.AVEVAWorkDate;
434
            this.AVEVAStatus = docData.AVEVAStatus;
435
            this.AVEVAIssues = docData.AVEVAIssues;
436
            this.ProdReviewer = docData.ProdReviewer;
437
            this.ProdIsResult = docData.ProdIsResult;
438
            this.ProdRemarks = docData.ProdRemarks;
439
            this.ClientReviewer = docData.ClientReviewer;
440
            this.ClientIsResult = docData.ClientIsResult;
441
            this.ClientRemarks = docData.ClientRemarks;
442
            this.DTIsGateWay = docData.DTIsGateWay;
443
            this.DTIsImport = docData.DTIsImport;
444
            this.DTIsRegSystem = docData.DTIsRegSystem;
445
            this.DTRemarks = docData.DTRemarks;
446 f074a104 yoush97
            if (this.AttFiles == null)
447 e9700266 yoush97
                this.AttFiles = docData.AttFiles;
448 f074a104 yoush97
            else
449 e9700266 yoush97
                this.AttFiles.AddRange(docData.AttFiles ?? new List<AttFileInfo>());
450 f074a104 yoush97
        }
451 5898479a yoush97
    }
452 fe57f64a yoush97
453
    [DataContract]
454
    public class ID2Drawings
455
    {
456 25f68105 taeseongkim
        //[DataMember]
457 e458a996 taeseongkim
        public string PROJECTNAME { get; set; }
458 25f68105 taeseongkim
        //[DataMember]
459 fe57f64a yoush97
        public string UID { get; set; }
460 25f68105 taeseongkim
        //[DataMember]
461 fe57f64a yoush97
        public string NAME { get; set; }
462 25f68105 taeseongkim
        //[DataMember]
463 fe57f64a yoush97
        public string DOCNAME { get; set; }
464 25f68105 taeseongkim
        //[DataMember]
465 fe57f64a yoush97
        public DateTime? DATETIME { get; set; }
466 25f68105 taeseongkim
        //[DataMember]
467 fe57f64a yoush97
        public string OCCUPIED { get; set; }
468 25f68105 taeseongkim
        //[DataMember]
469 fe57f64a yoush97
        public byte[] Image { get; set; }
470
    }
471 904fbe46 yoush97
472
    public class DocumentsResult
473
    {
474
        public List<Documents> Dwgs { get; set; }
475
        public int TotalCount { get; set; }
476
    }
477 5898479a yoush97
}
클립보드 이미지 추가 (최대 크기: 500 MB)