dstars commited on
Commit
4bebcaf
·
verified ·
1 Parent(s): 8b78260

Upload 84 files

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .gitattributes +47 -0
  2. demo/__init__.py +8 -0
  3. demo/__pycache__/__init__.cpython-310.pyc +0 -0
  4. demo/__pycache__/agent.cpython-310.pyc +0 -0
  5. demo/__pycache__/theme.cpython-310.pyc +0 -0
  6. demo/agent.py +105 -0
  7. demo/bot.png +0 -0
  8. demo/food/14456664_117_IMG_8176.jpeg +3 -0
  9. demo/food/14456664_126_86838F28-912B-42A4-80C1-BD060B649081.jpeg +0 -0
  10. demo/food/14456664_127_1E703639-9169-4EB4-8A5D-3B1E226F639B.jpeg +3 -0
  11. demo/food/14456664_129_IMG_20220605_181308.jpg +0 -0
  12. demo/food/14456664_130_IMG_20220605_180820.jpg +0 -0
  13. demo/food/14456664_133_IMG_20220709_153436.jpg +0 -0
  14. demo/food/14456664_134_IMG_20220709_153652.jpg +0 -0
  15. demo/food/14456664_136_IMG_20220709_233905.jpg +0 -0
  16. demo/food/14456664_137_IMG_20220717_143941.jpg +0 -0
  17. demo/food/14456664_139_IMG_0917-EDIT.jpg +0 -0
  18. demo/food/14456664_141_IMG_1724.jpg +0 -0
  19. demo/food/14456664_147_IMG_20190225_184723.jpg +0 -0
  20. demo/food/14456664_149_IMG_20180812_182400.jpg +0 -0
  21. demo/food/14456664_14_IMG_20220721_150241.jpg +3 -0
  22. demo/food/14456664_150_IMG_20181218_190852.jpg +0 -0
  23. demo/food/14456664_153_IMG_20240411_102841.jpg +3 -0
  24. demo/food/14456664_155_IMG_20240403_094547.jpg +3 -0
  25. demo/food/14456664_158_IMG_20240416_141427.jpg +3 -0
  26. demo/food/14456664_159_IMG_20240416_140243.jpg +3 -0
  27. demo/food/14456664_187_mmexport1713446177339.jpg +3 -0
  28. demo/food/14456664_19_IMG_0395.jpeg +3 -0
  29. demo/food/14456664_201_mmexport1713452408322.jpg +0 -0
  30. demo/food/14456664_217_IMG_3854.jpeg +3 -0
  31. demo/food/14456664_22_IMG_20240404_135935.jpg +3 -0
  32. demo/food/14456664_236_IMG_4742.jpeg +3 -0
  33. demo/food/14456664_238_d370e16ff482d13a0718c6fb4cd7ffbb.jpeg +0 -0
  34. demo/food/14456664_239_mmexport1713518196678.jpg +0 -0
  35. demo/food/14456664_26_IMG_3472.jpeg +0 -0
  36. demo/food/14456664_34_IMG_0400.jpeg +3 -0
  37. demo/food/14456664_36_20240410160819.jpg +0 -0
  38. demo/food/14456664_40_IMG_20170613_190017.jpg +3 -0
  39. demo/food/14456664_41_IMG_20190216_124017.jpeg +0 -0
  40. demo/food/14456664_50_mmexport1712821641752.jpg +0 -0
  41. demo/food/14456664_61_mmexport1550554859117.jpg +3 -0
  42. demo/food/14456664_64_IMG_20240409_181047.jpg +3 -0
  43. demo/food/14456664_68_IMG_0971.jpeg +3 -0
  44. demo/food/14456664_70_IMG_0581.jpeg +3 -0
  45. demo/food/14456664_72_IMG_0618.jpeg +3 -0
  46. demo/food/14456664_80_IMG_6323.jpeg +3 -0
  47. demo/food/14456664_82_MVIMG_20240413_161454.jpeg +0 -0
  48. demo/food/14456664_87_IMG_5316.jpeg +3 -0
  49. demo/food/14456664_88_wx_camera_1712730236546.jpg +3 -0
  50. demo/food/14521898_108_IMG_6205.jpeg +3 -0
.gitattributes CHANGED
@@ -33,3 +33,50 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ demo/food/14456664_117_IMG_8176.jpeg filter=lfs diff=lfs merge=lfs -text
37
+ demo/food/14456664_127_1E703639-9169-4EB4-8A5D-3B1E226F639B.jpeg filter=lfs diff=lfs merge=lfs -text
38
+ demo/food/14456664_14_IMG_20220721_150241.jpg filter=lfs diff=lfs merge=lfs -text
39
+ demo/food/14456664_153_IMG_20240411_102841.jpg filter=lfs diff=lfs merge=lfs -text
40
+ demo/food/14456664_155_IMG_20240403_094547.jpg filter=lfs diff=lfs merge=lfs -text
41
+ demo/food/14456664_158_IMG_20240416_141427.jpg filter=lfs diff=lfs merge=lfs -text
42
+ demo/food/14456664_159_IMG_20240416_140243.jpg filter=lfs diff=lfs merge=lfs -text
43
+ demo/food/14456664_187_mmexport1713446177339.jpg filter=lfs diff=lfs merge=lfs -text
44
+ demo/food/14456664_19_IMG_0395.jpeg filter=lfs diff=lfs merge=lfs -text
45
+ demo/food/14456664_217_IMG_3854.jpeg filter=lfs diff=lfs merge=lfs -text
46
+ demo/food/14456664_22_IMG_20240404_135935.jpg filter=lfs diff=lfs merge=lfs -text
47
+ demo/food/14456664_236_IMG_4742.jpeg filter=lfs diff=lfs merge=lfs -text
48
+ demo/food/14456664_34_IMG_0400.jpeg filter=lfs diff=lfs merge=lfs -text
49
+ demo/food/14456664_40_IMG_20170613_190017.jpg filter=lfs diff=lfs merge=lfs -text
50
+ demo/food/14456664_61_mmexport1550554859117.jpg filter=lfs diff=lfs merge=lfs -text
51
+ demo/food/14456664_64_IMG_20240409_181047.jpg filter=lfs diff=lfs merge=lfs -text
52
+ demo/food/14456664_68_IMG_0971.jpeg filter=lfs diff=lfs merge=lfs -text
53
+ demo/food/14456664_70_IMG_0581.jpeg filter=lfs diff=lfs merge=lfs -text
54
+ demo/food/14456664_72_IMG_0618.jpeg filter=lfs diff=lfs merge=lfs -text
55
+ demo/food/14456664_80_IMG_6323.jpeg filter=lfs diff=lfs merge=lfs -text
56
+ demo/food/14456664_87_IMG_5316.jpeg filter=lfs diff=lfs merge=lfs -text
57
+ demo/food/14456664_88_wx_camera_1712730236546.jpg filter=lfs diff=lfs merge=lfs -text
58
+ demo/food/14521898_108_IMG_6205.jpeg filter=lfs diff=lfs merge=lfs -text
59
+ demo/food/14521898_109_IMG_5997.jpeg filter=lfs diff=lfs merge=lfs -text
60
+ demo/food/14521898_112_IMG_3570.jpeg filter=lfs diff=lfs merge=lfs -text
61
+ demo/food/14521898_117_IMG_1362.jpeg filter=lfs diff=lfs merge=lfs -text
62
+ demo/food/14521898_122_53D0E884-E012-4FFA-8BD7-8F5666A53123.jpeg filter=lfs diff=lfs merge=lfs -text
63
+ demo/food/14521898_14_IMG_3852.jpeg filter=lfs diff=lfs merge=lfs -text
64
+ demo/food/14521898_144_IMG_8800.jpeg filter=lfs diff=lfs merge=lfs -text
65
+ demo/food/14521898_162_IMG_0356.jpeg filter=lfs diff=lfs merge=lfs -text
66
+ demo/food/14521898_168_D4D36C59-2D68-4354-B05C-B3065F6581AA.jpeg filter=lfs diff=lfs merge=lfs -text
67
+ demo/food/14521898_174_IMG_8019.jpeg filter=lfs diff=lfs merge=lfs -text
68
+ demo/food/14521898_183_IMG_20240502_122921.jpg filter=lfs diff=lfs merge=lfs -text
69
+ demo/food/14521898_209_IMG_3105.jpeg filter=lfs diff=lfs merge=lfs -text
70
+ demo/food/14521898_211_IMG_9139.jpeg filter=lfs diff=lfs merge=lfs -text
71
+ demo/food/14521898_237_IMG_5909.jpeg filter=lfs diff=lfs merge=lfs -text
72
+ demo/food/14521898_257_79874AA6-4F23-4AD6-96E2-7F64039A81C0.jpeg filter=lfs diff=lfs merge=lfs -text
73
+ demo/food/14521898_261_0E3192C7-1B0D-4C4D-9788-5E7A5E6E92BA.jpeg filter=lfs diff=lfs merge=lfs -text
74
+ demo/food/14521898_262_75B3AEDF-C705-400B-AE86-3FA7A92B624C.jpeg filter=lfs diff=lfs merge=lfs -text
75
+ demo/food/14521898_265_1C4A3265-A18E-46C2-A264-4384B85A49C0.jpeg filter=lfs diff=lfs merge=lfs -text
76
+ demo/food/14521898_44_930F3702-FC28-498F-A5A7-9E01AA5AEA15.jpeg filter=lfs diff=lfs merge=lfs -text
77
+ demo/food/14521898_55_IMG_8533.jpeg filter=lfs diff=lfs merge=lfs -text
78
+ demo/food/14521898_65_IMG_20240424_121225.jpg filter=lfs diff=lfs merge=lfs -text
79
+ demo/food/14521898_75_IMG_8637.jpeg filter=lfs diff=lfs merge=lfs -text
80
+ demo/food/14521898_79_IMG_2612.jpeg filter=lfs diff=lfs merge=lfs -text
81
+ demo/food/14521898_80_IMG_2613.jpeg filter=lfs diff=lfs merge=lfs -text
82
+ demo/food/14521898_82_IMG_9847.jpeg filter=lfs diff=lfs merge=lfs -text
demo/__init__.py ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ from demo.agent import ConversationalAgent
2
+ from demo.theme import CustomTheme
3
+
4
+
5
+ __all__ = [
6
+ "ConversationalAgent",
7
+ "CustomTheme",
8
+ ]
demo/__pycache__/__init__.cpython-310.pyc ADDED
Binary file (267 Bytes). View file
 
demo/__pycache__/agent.cpython-310.pyc ADDED
Binary file (3.4 kB). View file
 
demo/__pycache__/theme.cpython-310.pyc ADDED
Binary file (2.12 kB). View file
 
demo/agent.py ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import logging
3
+ from datetime import datetime
4
+
5
+ import gradio as gr
6
+ from PIL import Image
7
+
8
+ from lmdeploy import pipeline, TurbomindEngineConfig, GenerationConfig, ChatTemplateConfig
9
+ from lmdeploy.vl import load_image
10
+
11
+ class ConversationalAgent:
12
+ def __init__(self,
13
+ model_path,
14
+ outputs_dir) -> None:
15
+ self.pipe = pipeline(model_path,
16
+ chat_template_config=ChatTemplateConfig(model_name='internvl2-internlm2'),
17
+ backend_config=TurbomindEngineConfig(session_len=8192))
18
+ self.uploaded_images_storage = os.path.join(outputs_dir, "uploaded")
19
+ self.uploaded_images_storage = os.path.abspath(self.uploaded_images_storage)
20
+ os.makedirs(self.uploaded_images_storage, exist_ok=True)
21
+ self.sess = None
22
+
23
+ def start_chat(self, chat_state):
24
+ self.sess = None
25
+ self.context = ""
26
+ self.current_image_id = -1
27
+ self.image_list = []
28
+ self.pixel_values_list = []
29
+ self.seen_image_idx = []
30
+ logging.info("=" * 30 + "Start Chat" + "=" * 30)
31
+
32
+ return (
33
+ #gr.update(interactive=False), # [image] Image
34
+ gr.update(interactive=True, placeholder='input the text.'), # [input_text] Textbox
35
+ gr.update(interactive=False), # [start_btn] Button
36
+ gr.update(interactive=True), # [clear_btn] Button
37
+ gr.update(interactive=True), # [image] Image
38
+ gr.update(interactive=True), # [upload_btn] Button
39
+ chat_state # [chat_state] State
40
+ )
41
+
42
+ def restart_chat(self, chat_state):
43
+ self.sess = None
44
+ self.context = ""
45
+ self.current_image_id = -1
46
+ self.image_list = []
47
+ self.pixel_values_list = []
48
+ self.seen_image_idx = []
49
+
50
+ logging.info("=" * 30 + "End Chat" + "=" * 30)
51
+
52
+ return (
53
+ None, # [chatbot] Chatbot
54
+ #gr.update(value=None, interactive=True), # [image] Image
55
+ gr.update(interactive=False, placeholder="Please click the <Start Chat> button to start chat!"), # [input_text] Textbox
56
+ gr.update(interactive=True), # [start] Button
57
+ gr.update(interactive=False), # [clear] Button
58
+ gr.update(value=None, interactive=False), # [image] Image
59
+ gr.update(interactive=False), # [upload_btn] Button
60
+ chat_state # [chat_state] State
61
+ )
62
+
63
+ def upload_image(self, image: Image.Image, chat_history: gr.Chatbot, chat_state: gr.State):
64
+ logging.info(f"type(image): {type(image)}")
65
+
66
+ self.image_list.append(image)
67
+ save_image_path = os.path.join(self.uploaded_images_storage, "{}.jpg".format(len(os.listdir(self.uploaded_images_storage))))
68
+ image.save(save_image_path)
69
+ logging.info(f"image save path: {save_image_path}")
70
+ chat_history.append((gr.HTML(f'<img src="./file={save_image_path}" style="width: 200px; height: auto; display: inline-block;">'), "Received."))
71
+
72
+ return None, chat_history, chat_state
73
+
74
+ def respond(
75
+ self,
76
+ message,
77
+ image,
78
+ chat_history: gr.Chatbot,
79
+ top_p,
80
+ temperature,
81
+ chat_state,
82
+ ):
83
+ current_time = datetime.now().strftime("%b%d-%H:%M:%S")
84
+ logging.info(f"Time: {current_time}")
85
+ logging.info(f"User: {message}")
86
+ gen_config = GenerationConfig(top_p=top_p, temperature=temperature)
87
+ chat_input = message
88
+ if image is not None:
89
+ save_image_path = os.path.join(self.uploaded_images_storage, "{}.jpg".format(len(os.listdir(self.uploaded_images_storage))))
90
+ image.save(save_image_path)
91
+ logging.info(f"image save path: {save_image_path}")
92
+ chat_input = (message, image)
93
+ if self.sess is None:
94
+ self.sess = self.pipe.chat(chat_input, gen_config=gen_config)
95
+ else:
96
+ self.sess = self.pipe.chat(chat_input, session=self.sess, gen_config=gen_config)
97
+ response = self.sess.response.text
98
+ if image is not None:
99
+ chat_history.append((gr.HTML(f'{message}\n\n<img src="./file={save_image_path}" style="width: 200px; height: auto; display: inline-block;">'), response))
100
+ else:
101
+ chat_history.append((message, response))
102
+
103
+ logging.info(f"generated text = \n{response}")
104
+
105
+ return "", None, chat_history, chat_state
demo/bot.png ADDED
demo/food/14456664_117_IMG_8176.jpeg ADDED

Git LFS Details

  • SHA256: f844ef4ef78a325596a63ab702dafa0a67781348de8c12b58b9a9b655953ade1
  • Pointer size: 132 Bytes
  • Size of remote file: 2.64 MB
demo/food/14456664_126_86838F28-912B-42A4-80C1-BD060B649081.jpeg ADDED
demo/food/14456664_127_1E703639-9169-4EB4-8A5D-3B1E226F639B.jpeg ADDED

Git LFS Details

  • SHA256: ad9fa9010a5731ac6c0870bf2a572c406f0954b7d3bf3b5ca1f63c78863e7762
  • Pointer size: 132 Bytes
  • Size of remote file: 1.9 MB
demo/food/14456664_129_IMG_20220605_181308.jpg ADDED
demo/food/14456664_130_IMG_20220605_180820.jpg ADDED
demo/food/14456664_133_IMG_20220709_153436.jpg ADDED
demo/food/14456664_134_IMG_20220709_153652.jpg ADDED
demo/food/14456664_136_IMG_20220709_233905.jpg ADDED
demo/food/14456664_137_IMG_20220717_143941.jpg ADDED
demo/food/14456664_139_IMG_0917-EDIT.jpg ADDED
demo/food/14456664_141_IMG_1724.jpg ADDED
demo/food/14456664_147_IMG_20190225_184723.jpg ADDED
demo/food/14456664_149_IMG_20180812_182400.jpg ADDED
demo/food/14456664_14_IMG_20220721_150241.jpg ADDED

Git LFS Details

  • SHA256: df1c0a0fa513ed03b735318e47c7393a7761bf46a33ab60b9f9d3898355e71e2
  • Pointer size: 132 Bytes
  • Size of remote file: 3.95 MB
demo/food/14456664_150_IMG_20181218_190852.jpg ADDED
demo/food/14456664_153_IMG_20240411_102841.jpg ADDED

Git LFS Details

  • SHA256: 2b151c68460ea7bc0fc85d91535a2bc94ed88dcf4d761046d2a37722c5bfa5f5
  • Pointer size: 132 Bytes
  • Size of remote file: 1.93 MB
demo/food/14456664_155_IMG_20240403_094547.jpg ADDED

Git LFS Details

  • SHA256: 65b3e7f66dbace96b3f790e17c38abedddfa07bf886e1d5c8159feb30352e5b6
  • Pointer size: 132 Bytes
  • Size of remote file: 2.27 MB
demo/food/14456664_158_IMG_20240416_141427.jpg ADDED

Git LFS Details

  • SHA256: f622069e0add72f4e778af7c223922a66dc1478ed13a1458dd3455ae3fe04495
  • Pointer size: 132 Bytes
  • Size of remote file: 2.9 MB
demo/food/14456664_159_IMG_20240416_140243.jpg ADDED

Git LFS Details

  • SHA256: ce5bf8987b1bb99fb874a8ba8043952c2a03d6593d28447d44f09d4814402124
  • Pointer size: 132 Bytes
  • Size of remote file: 2.81 MB
demo/food/14456664_187_mmexport1713446177339.jpg ADDED

Git LFS Details

  • SHA256: a8fa2b9fe1ef98e53d61be59061e848e7338b09e5d3f8e01fb376b877698461b
  • Pointer size: 132 Bytes
  • Size of remote file: 1 MB
demo/food/14456664_19_IMG_0395.jpeg ADDED

Git LFS Details

  • SHA256: d3776a76f3612ab93123499a7fdb8bfabaad2596ee76eca754f4806fd404bc89
  • Pointer size: 132 Bytes
  • Size of remote file: 3.11 MB
demo/food/14456664_201_mmexport1713452408322.jpg ADDED
demo/food/14456664_217_IMG_3854.jpeg ADDED

Git LFS Details

  • SHA256: d6ee11d0137ab40d9c1bf743535cbd163e00c6de5fd69022febfd55a4abae610
  • Pointer size: 132 Bytes
  • Size of remote file: 4.98 MB
demo/food/14456664_22_IMG_20240404_135935.jpg ADDED

Git LFS Details

  • SHA256: f4f79f735255036164c0dac6d5cff946ef36a765eeed815992e437a1f48aa12b
  • Pointer size: 132 Bytes
  • Size of remote file: 3.19 MB
demo/food/14456664_236_IMG_4742.jpeg ADDED

Git LFS Details

  • SHA256: a25050eff6c82d7dac7cbd2fb7e37eec886867b512e6ea0390c40cf7ca961338
  • Pointer size: 132 Bytes
  • Size of remote file: 2.4 MB
demo/food/14456664_238_d370e16ff482d13a0718c6fb4cd7ffbb.jpeg ADDED
demo/food/14456664_239_mmexport1713518196678.jpg ADDED
demo/food/14456664_26_IMG_3472.jpeg ADDED
demo/food/14456664_34_IMG_0400.jpeg ADDED

Git LFS Details

  • SHA256: 7fd191af0a76621edeb10abe04cc952bb03c761b2abc733e5fe5474639d7b0e2
  • Pointer size: 132 Bytes
  • Size of remote file: 1.81 MB
demo/food/14456664_36_20240410160819.jpg ADDED
demo/food/14456664_40_IMG_20170613_190017.jpg ADDED

Git LFS Details

  • SHA256: d813465ccf81c04c65d7dbab663b2948ac4298e31bda62d0bd0df5dcb90e539d
  • Pointer size: 132 Bytes
  • Size of remote file: 3.05 MB
demo/food/14456664_41_IMG_20190216_124017.jpeg ADDED
demo/food/14456664_50_mmexport1712821641752.jpg ADDED
demo/food/14456664_61_mmexport1550554859117.jpg ADDED

Git LFS Details

  • SHA256: d95fbbf0cce24c3a8779a87216e4ece91af058b443129696405e7384705b9037
  • Pointer size: 132 Bytes
  • Size of remote file: 2.25 MB
demo/food/14456664_64_IMG_20240409_181047.jpg ADDED

Git LFS Details

  • SHA256: 070c656fa584ccf2331c37fa4e780381bab3b0d808aea54cba406fd66b7735bb
  • Pointer size: 132 Bytes
  • Size of remote file: 2.68 MB
demo/food/14456664_68_IMG_0971.jpeg ADDED

Git LFS Details

  • SHA256: 1ae462fcb5b73a7c228ee775b08fe84827a383e9f663e2c31c1ef4c086a67c03
  • Pointer size: 132 Bytes
  • Size of remote file: 2.79 MB
demo/food/14456664_70_IMG_0581.jpeg ADDED

Git LFS Details

  • SHA256: 05a32a6d8ce58c42a4ba4e852fabc9b326b1b66937ade06ed0251ea6408f4571
  • Pointer size: 132 Bytes
  • Size of remote file: 1.81 MB
demo/food/14456664_72_IMG_0618.jpeg ADDED

Git LFS Details

  • SHA256: 57b49b974c7b966ac2042e4efa506c5b55a9e6038ba7f1bb76434a97b5e06fe7
  • Pointer size: 132 Bytes
  • Size of remote file: 2.48 MB
demo/food/14456664_80_IMG_6323.jpeg ADDED

Git LFS Details

  • SHA256: 7a71fe70bfd223397ab7f0af42159ac501d787d99bbbbf61165b2f11e6f6ba0a
  • Pointer size: 132 Bytes
  • Size of remote file: 3.67 MB
demo/food/14456664_82_MVIMG_20240413_161454.jpeg ADDED
demo/food/14456664_87_IMG_5316.jpeg ADDED

Git LFS Details

  • SHA256: beadadd5d26749545b59159f8914f4a6ca9602f9a37c18f9ae6d578c62717eec
  • Pointer size: 132 Bytes
  • Size of remote file: 3.14 MB
demo/food/14456664_88_wx_camera_1712730236546.jpg ADDED

Git LFS Details

  • SHA256: cdc6b744e764770bff3cf73f7fb9bbe1424f88e59b4e22bb238c8765aec90483
  • Pointer size: 132 Bytes
  • Size of remote file: 1.29 MB
demo/food/14521898_108_IMG_6205.jpeg ADDED

Git LFS Details

  • SHA256: 575cc946cb96af9bf5bece1fcda3eaf6a17dab7ba28f127d0573b068cfd4d9c0
  • Pointer size: 132 Bytes
  • Size of remote file: 2.62 MB